1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-18 09:35:20 +02:00
joplin/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js

1 line
4.2 MiB

module.exports = `KGZ1bmN0aW9uKEpNLEFnKXt0eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJnR5cGVvZiBtb2R1bGU8InUiP21vZHVsZS5leHBvcnRzPUFnKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoQWcpOihKTT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczpKTXx8c2VsZixKTS5tZXJtYWlkPUFnKCkpfSkodGhpcyxmdW5jdGlvbigpe3ZhciBGV2UsUldlOyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBKTShpKXtmb3IodmFyIHM9W10sdT0xO3U8YXJndW1lbnRzLmxlbmd0aDt1Kyspc1t1LTFdPWFyZ3VtZW50c1t1XTt2YXIgZD1BcnJheS5mcm9tKHR5cGVvZiBpPT0ic3RyaW5nIj9baV06aSk7ZFtkLmxlbmd0aC0xXT1kW2QubGVuZ3RoLTFdLnJlcGxhY2UoL1xyP1xuKFtcdCBdKikkLywiIik7dmFyIHA9ZC5yZWR1Y2UoZnVuY3Rpb24oeSxUKXt2YXIgXz1ULm1hdGNoKC9cbihbXHQgXSt8KD8hXHMpLikvZyk7cmV0dXJuIF8/eS5jb25jYXQoXy5tYXAoZnVuY3Rpb24oQSl7dmFyIFAsUjtyZXR1cm4oUj0oUD1BLm1hdGNoKC9bXHQgXS9nKSk9PT1udWxsfHxQPT09dm9pZCAwP3ZvaWQgMDpQLmxlbmd0aCkhPT1udWxsJiZSIT09dm9pZCAwP1I6MH0pKTp5fSxbXSk7aWYocC5sZW5ndGgpe3ZhciB2PW5ldyBSZWdFeHAoYApbCSBde2ArTWF0aC5taW4uYXBwbHkoTWF0aCxwKSsifSIsImciKTtkPWQubWFwKGZ1bmN0aW9uKHkpe3JldHVybiB5LnJlcGxhY2UodixgCmApfSl9ZFswXT1kWzBdLnJlcGxhY2UoL15ccj9cbi8sIiIpO3ZhciBiPWRbMF07cmV0dXJuIHMuZm9yRWFjaChmdW5jdGlvbih5LFQpe3ZhciBfPWIubWF0Y2goLyg/Ol58XG4pKCAqKSQvKSxBPV8/X1sxXToiIixQPXk7dHlwZW9mIHk9PSJzdHJpbmciJiZ5LmluY2x1ZGVzKGAKYCkmJihQPVN0cmluZyh5KS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihSLEYpe3JldHVybiBGPT09MD9SOiIiK0ErUn0pLmpvaW4oYApgKSksYis9UCtkW1QrMV19KSxifXZhciBBZz10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIGhDKGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCJkZWZhdWx0Iik/aS5kZWZhdWx0Oml9dmFyIG9CZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGkscyl7KGZ1bmN0aW9uKHUsZCl7aS5leHBvcnRzPWQoKX0pKEFnLGZ1bmN0aW9uKCl7dmFyIHU9MWUzLGQ9NmU0LHA9MzZlNSx2PSJtaWxsaXNlY29uZCIsYj0ic2Vjb25kIix5PSJtaW51dGUiLFQ9ImhvdXIiLF89ImRheSIsQT0id2VlayIsUD0ibW9udGgiLFI9InF1YXJ0ZXIiLEY9InllYXIiLGo9ImRhdGUiLEs9IkludmFsaWQgRGF0ZSIsZWU9L14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8saWU9L1xbKFteXF1dKyldfFl7MSw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZyxvZT17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpmdW5jdGlvbihGZSl7dmFyIFBlPVsidGgiLCJzdCIsIm5kIiwicmQiXSxqZT1GZSUxMDA7cmV0dXJuIlsiK0ZlKyhQZVsoamUtMjApJTEwXXx8UGVbamVdfHxQZVswXSkrIl0ifX0scGU9ZnVuY3Rpb24oRmUsUGUsamUpe3ZhciBJZT1TdHJpbmcoRmUpO3JldHVybiFJZXx8SWUubGVuZ3RoPj1QZT9GZToiIitBcnJheShQZSsxLUllLmxlbmd0aCkuam9pbihqZSkrRmV9LGJlPXtzOnBlLHo6ZnVuY3Rpb24oRmUpe3ZhciBQZT0tRmUudXRjT2Zmc2V0KCksamU9TWF0aC5hYnMoUGUpLEllPU1hdGguZmxvb3IoamUvNjApLFNlPWplJTYwO3JldHVybihQZTw9MD8iKyI6Ii0iKStwZShJZSwyLCIwIikrIjoiK3BlKFNlLDIsIjAiKX0sbTpmdW5jdGlvbiBGZShQZSxqZSl7aWYoUGUuZGF0ZSgpPGplLmRhdGUoKSlyZXR1cm4tRmUoamUsUGUpO3ZhciBJZT0xMiooamUueWVhcigpLVBlLnllYXIoKSkrKGplLm1vbnRoKCktUGUubW9udGgoKSksU2U9UGUuY2xvbmUoKS5hZGQoSWUsUCksQ2U9amUtU2U8MCxrZT1QZS5jbG9uZSgpLmFkZChJZSsoQ2U/LTE6MSksUCk7cmV0dXJuKygtKEllKyhqZS1TZSkvKENlP1NlLWtlOmtlLVNlKSl8fDApfSxhOmZ1bmN0aW9uKEZlKXtyZXR1cm4gRmU8MD9NYXRoLmNlaWwoRmUpfHwwOk1hdGguZmxvb3IoRmUpfSxwOmZ1bmN0aW9uKEZlKXtyZXR1cm57TTpQLHk6Rix3OkEsZDpfLEQ6aixoOlQsbTp5LHM6Yixtczp2LFE6Un1bRmVdfHxTdHJpbmcoRmV8fCIiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL3MkLywiIil9LHU6ZnVuY3Rpb24oRmUpe3JldHVybiBGZT09PXZvaWQgMH19LGFlPSJlbiIsbmU9e307bmVbYWVdPW9lO3ZhciBzZT0iJGlzRGF5anNPYmplY3QiLGRlPWZ1bmN0aW9uKEZlKXtyZXR1cm4gRmUgaW5zdGFuY2VvZiB4ZXx8ISghRmV8fCFGZVtzZV0pfSxYPWZ1bmN0aW9uIEZlKFBlLGplLEllKXt2YXIgU2U7aWYoIVBlKXJldHVybiBhZTtpZih0eXBlb2YgUGU9PSJzdHJpbmciKXt2YXIgQ2U9UGUudG9Mb3dlckNhc2UoKTtuZVtDZV0mJihTZT1DZSksamUmJihuZVtDZV09amUsU2U9Q2UpO3ZhciBrZT1QZS5zcGxpdCgiLSIpO2lmKCFTZSYma2UubGVuZ3RoPjEpcmV0dXJuIEZlKGtlWzBdKX1lbHNle3ZhciBLZT1QZS5uYW1lO25lW0tlXT1QZSxTZT1LZX1yZXR1cm4hSWUmJlNlJiYoYWU9U2UpLFNlfHwhSWUmJmFlfSxnZT1mdW5jdGlvbihGZSxQZSl7aWYoZGUoRmUpKXJldHVybiBGZS5jbG9uZSgpO3ZhciBqZT10eXBlb2YgUGU9PSJvYmplY3QiP1BlOnt9O3JldHVybiBqZS5kYXRlPUZlLGplLmFyZ3M9YXJndW1lbnRzLG5ldyB4ZShqZSl9LFc9YmU7Vy5sPVgsVy5pPWRlLFcudz1mdW5jdGlvbihGZSxQZSl7cmV0dXJuIGdlKEZlLHtsb2NhbGU6UGUuJEwsdXRjOlBlLiR1LHg6UGUuJHgsJG9mZnNldDpQZS4kb2Zmc2V0fSl9O3ZhciB4ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIEZlKGplKXt0aGlzLiRMPVgoamUubG9jYWxlLG51bGwsITApLHRoaXMucGFyc2UoamUpLHRoaXMuJHg9dGhpcy4keHx8amUueHx8e30sdGhpc1tzZV09ITB9dmFyIFBlPUZlLnByb3RvdHlwZTtyZXR1cm4gUGUucGFyc2U9ZnVuY3Rpb24oamUpe3RoaXMuJGQ9ZnVuY3Rpb24oSWUpe3ZhciBTZT1JZS5kYXRlLENlPUllLnV0YztpZihTZT09PW51bGwpcmV0dXJuIG5ldyBEYXRlKE5hTik7aWYoVy51KFNlKSlyZXR1cm4gbmV3IERhdGU7aWYoU2UgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShTZSk7aWYodHlwZW9mIFNlPT0ic3RyaW5nIiYmIS9aJC9pLnRlc3QoU2UpKXt2YXIga2U9U2UubWF0Y2goZWUpO2lmKGtlKXt2YXIgS2U9a2VbMl0tMXx8MCxGdD0oa2VbN118fCIwIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIENlP25ldyBEYXRlKERhdGUuVVRDKGtlWzFdLEtlLGtlWzNdfHwxLGtlWzRdfHwwLGtlWzVdfHwwLGtlWzZdfHwwLEZ0KSk6bmV3IERhdGUoa2VbMV0sS2Usa2VbM118fDEsa2VbNF18fDAsa2VbNV18fDAsa2VbNl18fDAsRnQpfX1yZXR1cm4gbmV3IERhdGUoU2UpfShqZSksdGhpcy5pbml0KCl9LFBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgamU9dGhpcy4kZDt0aGlzLiR5PWplLmdldEZ1bGxZZWFyKCksdGhpcy4kTT1qZS5nZXRNb250aCgpLHRoaXMuJEQ9amUuZ2V0RGF0ZSgpLHRoaXMuJFc9amUuZ2V0RGF5KCksdGhpcy4kSD1qZS5nZXRIb3VycygpLHRoaXMuJG09amUuZ2V0TWludXRlcygpLHRoaXMuJHM9amUuZ2V0U2Vjb25kcygpLHRoaXMuJG1zPWplLmdldE1pbGxpc2Vjb25kcygpfSxQZS4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gV30sUGUuaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvU3RyaW5nKCkhPT1LfSxQZS5pc1NhbWU9ZnVuY3Rpb24oamUsSWUpe3ZhciBTZT1nZShqZSk7cmV0dXJuIHRoaXMuc3RhcnRPZihJZSk8PVNlJiZTZTw9dGhpcy5lbmRPZihJZSl9LFBlLmlzQWZ0ZXI9ZnVuY3Rpb24oamUsSWUpe3JldHVybiBnZShqZSk8dGhpcy5zdGFydE9mKEllKX0sUGUuaXNCZWZvcmU9ZnVuY3Rpb24oamUsSWUpe3JldHVybiB0aGlzLmVuZE9mKEllKTxnZShqZSl9LFBlLiRnPWZ1bmN0aW9uKGplLEllLFNlKXtyZXR1cm4gVy51KGplKT90aGlzW0llXTp0aGlzLnNldChTZSxqZSl9LFBlLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxQZS52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQuZ2V0VGltZSgpfSxQZS5zdGFydE9mPWZ1bmN0aW9uKGplLEllKXt2YXIgU2U9dGhpcyxDZT0hIVcudShJZSl8fEllLGtlPVcucChqZSksS2U9ZnVuY3Rpb24oeHQsUHQpe3ZhciBRZT1XLncoU2UuJHU/RGF0ZS5VVEMoU2UuJHksUHQseHQpOm5ldyBEYXRlKFNlLiR5LFB0LHh0KSxTZSk7cmV0dXJuIENlP1FlOlFlLmVuZE9mKF8pfSxGdD1mdW5jdGlvbih4dCxQdCl7cmV0dXJuIFcudyhTZS50b0RhdGUoKVt4dF0uYXBwbHkoU2UudG9EYXRlKCJzIiksKENlP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoUHQpKSxTZSl9LE5lPXRoaXMuJFcsZ249dGhpcy4kTSxfdD10aGlzLiRELEV0PSJzZXQiKyh0aGlzLiR1PyJVVEMiOiIiKTtzd2l0Y2goa2Upe2Nhc2UgRjpyZXR1cm4gQ2U/S2UoMSwwKTpLZSgzMSwxMSk7Y2FzZSBQOnJldHVybiBDZT9LZSgxLGduKTpLZSgwLGduKzEpO2Nhc2UgQTp2YXIgR3Q9dGhpcy4kbG9jYWxlKCkud2Vla1N0YXJ0fHwwLGxuPShOZTxHdD9OZSs3Ok5lKS1HdDtyZXR1cm4gS2UoQ2U/X3QtbG46X3QrKDYtbG4pLGduKTtjYXNlIF86Y2FzZSBqOnJldHVybiBGdChFdCsiSG91cnMiLDApO2Nhc2UgVDpyZXR1cm4gRnQoRXQrIk1pbnV0ZXMiLDEpO2Nhc2UgeTpyZXR1cm4gRnQoRXQrIlNlY29uZHMiLDIpO2Nhc2UgYjpyZXR1cm4gRnQoRXQrIk1pbGxpc2Vjb25kcyIsMyk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbG9uZSgpfX0sUGUuZW5kT2Y9ZnVuY3Rpb24oamUpe3JldHVybiB0aGlzLnN0YXJ0T2YoamUsITEpfSxQZS4kc2V0PWZ1bmN0aW9uKGplLEllKXt2YXIgU2UsQ2U9Vy5wKGplKSxrZT0ic2V0IisodGhpcy4kdT8iVVRDIjoiIiksS2U9KFNlPXt9LFNlW19dPWtlKyJEYXRlIixTZVtqXT1rZSsiRGF0ZSIsU2VbUF09a2UrIk1vbnRoIixTZVtGXT1rZSsiRnVsbFllYXIiLFNlW1RdPWtlKyJIb3VycyIsU2VbeV09a2UrIk1pbnV0ZXMiLFNlW2JdPWtlKyJTZWNvbmRzIixTZVt2XT1rZSsiTWlsbGlzZWNvbmRzIixTZSlbQ2VdLEZ0PUNlPT09Xz90aGlzLiREKyhJZS10aGlzLiRXKTpJZTtpZihDZT09PVB8fENlPT09Ril7dmFyIE5lPXRoaXMuY2xvbmUoKS5zZXQoaiwxKTtOZS4kZFtLZV0oRnQpLE5lLmluaXQoKSx0aGlzLiRkPU5lLnNldChqLE1hdGgubWluKHRoaXMuJEQsTmUuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgS2UmJnRoaXMuJGRbS2VdKEZ0KTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sUGUuc2V0PWZ1bmN0aW9uKGplLEllKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQoamUsSWUpfSxQZS5nZXQ9ZnVuY3Rpb24oamUpe3JldHVybiB0aGlzW1cucChqZSldKCl9LFBlLmFkZD1mdW5jdGlvbihqZSxJZSl7dmFyIFNlLENlPXRoaXM7amU9TnVtYmVyKGplKTt2YXIga2U9Vy5wKEllKSxLZT1mdW5jdGlvbihnbil7dmFyIF90PWdlKENlKTtyZXR1cm4gVy53KF90LmRhdGUoX3QuZGF0ZSgpK01hdGgucm91bmQoZ24qamUpKSxDZSl9O2lmKGtlPT09UClyZXR1cm4gdGhpcy5zZXQoUCx0aGlzLiRNK2plKTtpZihrZT09PUYpcmV0dXJuIHRoaXMuc2V0KEYsdGhpcy4keStqZSk7aWYoa2U9PT1fKXJldHVybiBLZSgxKTtpZihrZT09PUEpcmV0dXJuIEtlKDcpO3ZhciBGdD0oU2U9e30sU2VbeV09ZCxTZVtUXT1wLFNlW2JdPXUsU2UpW2tlXXx8MSxOZT10aGlzLiRkLmdldFRpbWUoKStqZSpGdDtyZXR1cm4gVy53KE5lLHRoaXMpfSxQZS5zdWJ0cmFjdD1mdW5jdGlvbihqZSxJZSl7cmV0dXJuIHRoaXMuYWRkKC0xKmplLEllKX0sUGUuZm9ybWF0PWZ1bmN0aW9uKGplKXt2YXIgSWU9dGhpcyxTZT10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIFNlLmludmFsaWREYXRlfHxLO3ZhciBDZT1qZXx8IllZWVktTU0tRERUSEg6bW06c3NaIixrZT1XLnoodGhpcyksS2U9dGhpcy4kSCxGdD10aGlzLiRtLE5lPXRoaXMuJE0sZ249U2Uud2Vla2RheXMsX3Q9U2UubW9udGhzLEV0PVNlLm1lcmlkaWVtLEd0PWZ1bmN0aW9uKFB0LFFlLER0LGt0KXtyZXR1cm4gUHQmJihQdFtRZV18fFB0KEllLENlKSl8fER0W1FlXS5zbGljZSgwLGt0KX0sbG49ZnVuY3Rpb24oUHQpe3JldHVybiBXLnMoS2UlMTJ8fDEyLFB0LCIwIil9LHh0PUV0fHxmdW5jdGlvbihQdCxRZSxEdCl7dmFyIGt0PVB0PDEyPyJBTSI6IlBNIjtyZXR1cm4gRHQ/a3QudG9Mb3dlckNhc2UoKTprdH07cmV0dXJuIENlLnJlcGxhY2UoaWUsZnVuY3Rpb24oUHQsUWUpe3JldHVybiBRZXx8ZnVuY3Rpb24oRHQpe3N3aXRjaChEdCl7Y2FzZSJZWSI6cmV0dXJuIFN0cmluZyhJZS4keSkuc2xpY2UoLTIpO2Nhc2UiWVlZWSI6cmV0dXJuIFcucyhJZS4keSw0LCIwIik7Y2FzZSJNIjpyZXR1cm4gTmUrMTtjYXNlIk1NIjpyZXR1cm4gVy5zKE5lKzEsMiwiMCIpO2Nhc2UiTU1NIjpyZXR1cm4gR3QoU2UubW9udGhzU2hvcnQsTmUsX3QsMyk7Y2FzZSJNTU1NIjpyZXR1cm4gR3QoX3QsTmUpO2Nhc2UiRCI6cmV0dXJuIEllLiREO2Nhc2UiREQiOnJldHVybiBXLnMoSWUuJEQsMiwiMCIpO2Nhc2UiZCI6cmV0dXJuIFN0cmluZyhJZS4kVyk7Y2FzZSJkZCI6cmV0dXJuIEd0KFNlLndlZWtkYXlzTWluLEllLiRXLGduLDIpO2Nhc2UiZGRkIjpyZXR1cm4gR3QoU2Uud2Vla2RheXNTaG9ydCxJZS4kVyxnbiwzKTtjYXNlImRkZGQiOnJldHVybiBnbltJZS4kV107Y2FzZSJIIjpyZXR1cm4gU3RyaW5nKEtlKTtjYXNlIkhIIjpyZXR1cm4gVy5zKEtlLDIsIjAiKTtjYXNlImgiOnJldHVybiBsbigxKTtjYXNlImhoIjpyZXR1cm4gbG4oMik7Y2FzZSJhIjpyZXR1cm4geHQoS2UsRnQsITApO2Nhc2UiQSI6cmV0dXJuIHh0KEtlLEZ0LCExKTtjYXNlIm0iOnJldHVybiBTdHJpbmcoRnQpO2Nhc2UibW0iOnJldHVybiBXLnMoRnQsMiwiMCIpO2Nhc2UicyI6cmV0dXJuIFN0cmluZyhJZS4kcyk7Y2FzZSJzcyI6cmV0dXJuIFcucyhJZS4kcywyLCIwIik7Y2FzZSJTU1MiOnJldHVybiBXLnMoSWUuJG1zLDMsIjAiKTtjYXNlIloiOnJldHVybiBrZX1yZXR1cm4gbnVsbH0oUHQpfHxrZS5yZXBsYWNlKCI6IiwiIil9KX0sUGUudXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LFBlLmRpZmY9ZnVuY3Rpb24oamUsSWUsU2Upe3ZhciBDZSxrZT10aGlzLEtlPVcucChJZSksRnQ9Z2UoamUpLE5lPShGdC51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSpkLGduPXRoaXMtRnQsX3Q9ZnVuY3Rpb24oKXtyZXR1cm4gVy5tKGtlLEZ0KX07c3dpdGNoKEtlKXtjYXNlIEY6Q2U9X3QoKS8xMjticmVhaztjYXNlIFA6Q2U9X3QoKTticmVhaztjYXNlIFI6Q2U9X3QoKS8zO2JyZWFrO2Nhc2UgQTpDZT0oZ24tTmUpLzYwNDhlNTticmVhaztjYXNlIF86Q2U9KGduLU5lKS84NjRlNTticmVhaztjYXNlIFQ6Q2U9Z24vcDticmVhaztjYXNlIHk6Q2U9Z24vZDticmVhaztjYXNlIGI6Q2U9Z24vdTticmVhaztkZWZhdWx0OkNlPWdufXJldHVybiBTZT9DZTpXLmEoQ2UpfSxQZS5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZE9mKFApLiREfSxQZS4kbG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIG5lW3RoaXMuJExdfSxQZS5sb2NhbGU9ZnVuY3Rpb24oamUsSWUpe2lmKCFqZSlyZXR1cm4gdGhpcy4kTDt2YXIgU2U9dGhpcy5jbG9uZSgpLENlPVgoamUsSWUsITApO3JldHVybiBDZSYmKFNlLiRMPUNlKSxTZX0sUGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gVy53KHRoaXMuJGQsdGhpcyl9LFBlLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LFBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sUGUudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSxQZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvVVRDU3RyaW5nKCl9LEZlfSgpLFU9eGUucHJvdG90eXBlO3JldHVybiBnZS5wcm90b3R5cGU9VSxbWyIkbXMiLHZdLFsiJHMiLGJdLFsiJG0iLHldLFsiJEgiLFRdLFsiJFciLF9dLFsiJE0iLFBdLFsiJHkiLEZdLFsiJEQiLGpdXS5mb3JFYWNoKGZ1bmN0aW9uKEZlKXtVW0ZlWzFdXT1mdW5jdGlvbihQZSl7cmV0dXJuIHRoaXMuJGcoUGUsRmVbMF0sRmVbMV0pfX0pLGdlLmV4dGVuZD1mdW5jdGlvbihGZSxQZSl7cmV0dXJuIEZlLiRpfHwoRmUoUGUseGUsZ2UpLEZlLiRpPSEwKSxnZX0sZ2UubG9jYWxlPVgsZ2UuaXNEYXlqcz1kZSxnZS51bml4PWZ1bmN0aW9uKEZlKXtyZXR1cm4gZ2UoMWUzKkZlKX0sZ2UuZW49bmVbYWVdLGdlLkxzPW5lLGdlLnA9e30sZ2V9KX0pKG9CZSk7dmFyIE5BdD1vQmUuZXhwb3J0cztjb25zdCBMZz1oQyhOQXQpLGc3PXt0cmFjZTowLGRlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LFhlPXt0cmFjZTooLi4uaSk9Pnt9LGRlYnVnOiguLi5pKT0+e30saW5mbzooLi4uaSk9Pnt9LHdhcm46KC4uLmkpPT57fSxlcnJvcjooLi4uaSk9Pnt9LGZhdGFsOiguLi5pKT0+e319LGZwZT1mdW5jdGlvbihpPSJmYXRhbCIpe2xldCBzPWc3LmZhdGFsO3R5cGVvZiBpPT0ic3RyaW5nIj8oaT1pLnRvTG93ZXJDYXNlKCksaSBpbiBnNyYmKHM9ZzdbaV0pKTp0eXBlb2YgaT09Im51bWJlciImJihzPWkpLFhlLnRyYWNlPSgpPT57fSxYZS5kZWJ1Zz0oKT0+e30sWGUuaW5mbz0oKT0+e30sWGUud2Fybj0oKT0+e30sWGUuZXJyb3I9KCk9Pnt9LFhlLmZhdGFsPSgpPT57fSxzPD1nNy5mYXRhbCYmKFhlLmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsTHYoIkZBVEFMIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzVtIixMdigiRkFUQUwiKSkpLHM8PWc3LmVycm9yJiYoWGUuZXJyb3I9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxMdigiRVJST1IiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszMW0iLEx2KCJFUlJPUiIpKSksczw9Zzcud2FybiYmKFhlLndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsTHYoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszM20iLEx2KCJXQVJOIikpKSxzPD1nNy5pbmZvJiYoWGUuaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxMdigiSU5GTyIpLCJjb2xvcjogbGlnaHRibHVlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzM0bSIsTHYoIklORk8iKSkpLHM8PWc3LmRlYnVnJiYoWGUuZGVidWc9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxMdigiREVCVUciKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixMdigiREVCVUciKSkpLHM8PWc3LnRyYWNlJiYoWGUudHJhY2U9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxMdigiVFJBQ0UiKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixMdigiVFJBQ0UiKSkpfSxMdj1pPT5gJWMke0xnKCkuZm9ybWF0KCJzcy5TU1MiKX0gOiAke2l9IDogYDt2YXIgcDk9e307KGZ1bmN0aW9uKGkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxpLnNhbml0aXplVXJsPWkuQkxBTktfVVJMPXZvaWQgMDt2YXIgcz0vXihbXlx3XSopKGphdmFzY3JpcHR8ZGF0YXx2YnNjcmlwdCkvaW0sdT0vJiMoXHcrKSheXHd8Oyk/L2csZD0vJihuZXdsaW5lfHRhYik7L2dpLHA9L1tcdTAwMDAtXHUwMDFGXHUwMDdGLVx1MDA5Rlx1MjAwMC1cdTIwMERcdUZFRkZdL2dpbSx2PS9eLisoOnwmY29sb247KS9naW0sYj1bIi4iLCIvIl07aS5CTEFOS19VUkw9ImFib3V0OmJsYW5rIjtmdW5jdGlvbiB5KEEpe3JldHVybiBiLmluZGV4T2YoQVswXSk+LTF9ZnVuY3Rpb24gVChBKXt2YXIgUD1BLnJlcGxhY2UocCwiIik7cmV0dXJuIFAucmVwbGFjZSh1LGZ1bmN0aW9uKFIsRil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoRil9KX1mdW5jdGlvbiBfKEEpe2lmKCFBKXJldHVybiBpLkJMQU5LX1VSTDt2YXIgUD1UKEEpLnJlcGxhY2UoZCwiIikucmVwbGFjZShwLCIiKS50cmltKCk7aWYoIVApcmV0dXJuIGkuQkxBTktfVVJMO2lmKHkoUCkpcmV0dXJuIFA7dmFyIFI9UC5tYXRjaCh2KTtpZighUilyZXR1cm4gUDt2YXIgRj1SWzBdO3JldHVybiBzLnRlc3QoRik/aS5CTEFOS19VUkw6UH1pLnNhbml0aXplVXJsPV99KShwOSk7ZnVuY3Rpb24gRFkoaSxzKXtyZXR1cm4gaT09bnVsbHx8cz09bnVsbD9OYU46aTxzPy0xOmk+cz8xOmk+PXM/MDpOYU59ZnVuY3Rpb24gUEF0KGkscyl7cmV0dXJuIGk9PW51bGx8fHM9PW51bGw/TmFOOnM8aT8tMTpzPmk/MTpzPj1pPzA6TmFOfWZ1bmN0aW9uIGRwZShpKXtsZXQgcyx1LGQ7aS5sZW5ndGghPT0yPyhzPURZLHU9KHksVCk9PkRZKGkoeSksVCksZD0oeSxUKT0+aSh5KS1UKToocz1pPT09RFl8fGk9PT1QQXQ/aTpCQXQsdT1pLGQ9aSk7ZnVuY3Rpb24gcCh5LFQsXz0wLEE9eS5sZW5ndGgpe2lmKF88QSl7aWYocyhULFQpIT09MClyZXR1cm4gQTtkb3tjb25zdCBQPV8rQT4+PjE7dSh5W1BdLFQpPDA/Xz1QKzE6QT1QfXdoaWxlKF88QSl9cmV0dXJuIF99ZnVuY3Rpb24gdih5LFQsXz0wLEE9eS5sZW5ndGgpe2lmKF88QSl7aWYocyhULFQpIT09MClyZXR1cm4gQTtkb3tjb25zdCBQPV8rQT4+PjE7dSh5W1BdLFQpPD0wP189UCsxOkE9UH13aGlsZShfPEEpfXJldHVybiBffWZ1bmN0aW9uIGIoeSxULF89MCxBPXkubGVuZ3RoKXtjb25zdCBQPXAoeSxULF8sQS0xKTtyZXR1cm4gUD5fJiZkKHlbUC0xXSxUKT4tZCh5W1BdLFQpP1AtMTpQfXJldHVybntsZWZ0OnAsY2VudGVyOmIscmlnaHQ6dn19ZnVuY3Rpb24gQkF0KCl7cmV0dXJuIDB9ZnVuY3Rpb24gRkF0KGkpe3JldHVybiBpPT09bnVsbD9OYU46K2l9Y29uc3QgUkF0PWRwZShEWSkucmlnaHQ7ZHBlKEZBdCkuY2VudGVyO2NvbnN0IGpBdD1SQXQ7Y2xhc3MgY0JlIGV4dGVuZHMgTWFwe2NvbnN0cnVjdG9yKHMsdT1xQXQpe2lmKHN1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7X2ludGVybjp7dmFsdWU6bmV3IE1hcH0sX2tleTp7dmFsdWU6dX19KSxzIT1udWxsKWZvcihjb25zdFtkLHBdb2Ygcyl0aGlzLnNldChkLHApfWdldChzKXtyZXR1cm4gc3VwZXIuZ2V0KHVCZSh0aGlzLHMpKX1oYXMocyl7cmV0dXJuIHN1cGVyLmhhcyh1QmUodGhpcyxzKSl9c2V0KHMsdSl7cmV0dXJuIHN1cGVyLnNldCgkQXQodGhpcyxzKSx1KX1kZWxldGUocyl7cmV0dXJuIHN1cGVyLmRlbGV0ZSh6QXQodGhpcyxzKSl9fWZ1bmN0aW9uIHVCZSh7X2ludGVybjppLF9rZXk6c30sdSl7Y29uc3QgZD1zKHUpO3JldHVybiBpLmhhcyhkKT9pLmdldChkKTp1fWZ1bmN0aW9uICRBdCh7X2ludGVybjppLF9rZXk6c30sdSl7Y29uc3QgZD1zKHUpO3JldHVybiBpLmhhcyhkKT9pLmdldChkKTooaS5zZXQoZCx1KSx1KX1mdW5jdGlvbiB6QXQoe19pbnRlcm46aSxfa2V5OnN9LHUpe2NvbnN0IGQ9cyh1KTtyZXR1cm4gaS5oYXMoZCkmJih1PWkuZ2V0KGQpLGkuZGVsZXRlKGQpKSx1fWZ1bmN0aW9uIHFBdChpKXtyZXR1cm4gaSE9PW51bGwmJnR5cGVvZiBpPT0ib2JqZWN0Ij9pLnZhbHVlT2YoKTppfWNvbnN0IEhBdD1NYXRoLnNxcnQoNTApLFZBdD1NYXRoLnNxcnQoMTApLFVBdD1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gSVkoaSxzLHUpe2NvbnN0IGQ9KHMtaSkvTWF0aC5tYXgoMCx1KSxwPU1hdGguZmxvb3IoTWF0aC5sb2cxMChkKSksdj1kL01hdGgucG93KDEwLHApLGI9dj49SEF0PzEwOnY+PVZBdD81OnY+PVVBdD8yOjE7bGV0IHksVCxfO3JldHVybiBwPDA/KF89TWF0aC5wb3coMTAsLXApL2IseT1NYXRoLnJvdW5kKGkqXyksVD1NYXRoLnJvdW5kKHMqXykseS9fPGkmJisreSxUL18+cyYmLS1ULF89LV8pOihfPU1hdGgucG93KDEwLHApKmIseT1NYXRoLnJvdW5kKGkvXyksVD1NYXRoLnJvdW5kKHMvXykseSpfPGkmJisreSxUKl8+cyYmLS1UKSxUPHkmJi41PD11JiZ1PDI/SVkoaSxzLHUqMik6W3ksVCxfXX1mdW5jdGlvbiBHQXQoaSxzLHUpe2lmKHM9K3MsaT0raSx1PSt1LCEodT4wKSlyZXR1cm5bXTtpZihpPT09cylyZXR1cm5baV07Y29uc3QgZD1zPGksW3AsdixiXT1kP0lZKHMsaSx1KTpJWShpLHMsdSk7aWYoISh2Pj1wKSlyZXR1cm5bXTtjb25zdCB5PXYtcCsxLFQ9bmV3IEFycmF5KHkpO2lmKGQpaWYoYjwwKWZvcihsZXQgXz0wO188eTsrK18pVFtfXT0odi1fKS8tYjtlbHNlIGZvcihsZXQgXz0wO188eTsrK18pVFtfXT0odi1fKSpiO2Vsc2UgaWYoYjwwKWZvcihsZXQgXz0wO188eTsrK18pVFtfXT0ocCtfKS8tYjtlbHNlIGZvcihsZXQgXz0wO188eTsrK18pVFtfXT0ocCtfKSpiO3JldHVybiBUfWZ1bmN0aW9uIGdwZShpLHMsdSl7cmV0dXJuIHM9K3MsaT0raSx1PSt1LElZKGkscyx1KVsyXX1mdW5jdGlvbiBwcGUoaSxzLHUpe3M9K3MsaT0raSx1PSt1O2NvbnN0IGQ9czxpLHA9ZD9ncGUocyxpLHUpOmdwZShpLHMsdSk7cmV0dXJuKGQ/LTE6MSkqKHA8MD8xLy1wOnApfWZ1bmN0aW9uIEtBdChpLHMpe2xldCB1O2lmKHM9PT12b2lkIDApZm9yKGNvbnN0IGQgb2YgaSlkIT1udWxsJiYodTxkfHx1PT09dm9pZCAwJiZkPj1kKSYmKHU9ZCk7ZWxzZXtsZXQgZD0tMTtmb3IobGV0IHAgb2YgaSkocD1zKHAsKytkLGkpKSE9bnVsbCYmKHU8cHx8dT09PXZvaWQgMCYmcD49cCkmJih1PXApfXJldHVybiB1fWZ1bmN0aW9uIFdBdChpLHMpe2xldCB1O2lmKHM9PT12b2lkIDApZm9yKGNvbnN0IGQgb2YgaSlkIT1udWxsJiYodT5kfHx1PT09dm9pZCAwJiZkPj1kKSYmKHU9ZCk7ZWxzZXtsZXQgZD0tMTtmb3IobGV0IHAgb2YgaSkocD1zKHAsKytkLGkpKSE9bnVsbCYmKHU+cHx8dT09PXZvaWQgMCYmcD49cCkmJih1PXApfXJldHVybiB1fWZ1bmN0aW9uIFlBdChpLHMsdSl7aT0raSxzPStzLHU9KHA9YXJndW1lbnRzLmxlbmd0aCk8Mj8ocz1pLGk9MCwxKTpwPDM/MTordTtmb3IodmFyIGQ9LTEscD1NYXRoLm1heCgwLE1hdGguY2VpbCgocy1pKS91KSl8MCx2PW5ldyBBcnJheShwKTsrK2Q8cDspdltkXT1pK2QqdTtyZXR1cm4gdn1mdW5jdGlvbiBYQXQoaSl7cmV0dXJuIGl9dmFyIE9ZPTEsYnBlPTIsbXBlPTMsTlk9NCxsQmU9MWUtNjtmdW5jdGlvbiBRQXQoaSl7cmV0dXJuInRyYW5zbGF0ZSgiK2krIiwwKSJ9ZnVuY3Rpb24gSkF0KGkpe3JldHVybiJ0cmFuc2xhdGUoMCwiK2krIikifWZ1bmN0aW9uIFpBdChpKXtyZXR1cm4gcz0+K2kocyl9ZnVuY3Rpb24gZUx0KGkscyl7cmV0dXJuIHM9TWF0aC5tYXgoMCxpLmJhbmR3aWR0aCgpLXMqMikvMixpLnJvdW5kKCkmJihzPU1hdGgucm91bmQocykpLHU9PitpKHUpK3N9ZnVuY3Rpb24gdEx0KCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGhCZShpLHMpe3ZhciB1PVtdLGQ9bnVsbCxwPW51bGwsdj02LGI9Nix5PTMsVD10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmRldmljZVBpeGVsUmF0aW8+MT8wOi41LF89aT09PU9ZfHxpPT09Tlk/LTE6MSxBPWk9PT1OWXx8aT09PWJwZT8ieCI6InkiLFA9aT09PU9ZfHxpPT09bXBlP1FBdDpKQXQ7ZnVuY3Rpb24gUihGKXt2YXIgaj1kPz8ocy50aWNrcz9zLnRpY2tzLmFwcGx5KHMsdSk6cy5kb21haW4oKSksSz1wPz8ocy50aWNrRm9ybWF0P3MudGlja0Zvcm1hdC5hcHBseShzLHUpOlhBdCksZWU9TWF0aC5tYXgodiwwKSt5LGllPXMucmFuZ2UoKSxvZT0raWVbMF0rVCxwZT0raWVbaWUubGVuZ3RoLTFdK1QsYmU9KHMuYmFuZHdpZHRoP2VMdDpaQXQpKHMuY29weSgpLFQpLGFlPUYuc2VsZWN0aW9uP0Yuc2VsZWN0aW9uKCk6RixuZT1hZS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksc2U9YWUuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoaixzKS5vcmRlcigpLGRlPXNlLmV4aXQoKSxYPXNlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksZ2U9c2Uuc2VsZWN0KCJsaW5lIiksVz1zZS5zZWxlY3QoInRleHQiKTtuZT1uZS5tZXJnZShuZS5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksc2U9c2UubWVyZ2UoWCksZ2U9Z2UubWVyZ2UoWC5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKEErIjIiLF8qdikpLFc9Vy5tZXJnZShYLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKEEsXyplZSkuYXR0cigiZHkiLGk9PT1PWT8iMGVtIjppPT09bXBlPyIwLjcxZW0iOiIwLjMyZW0iKSksRiE9PWFlJiYobmU9bmUudHJhbnNpdGlvbihGKSxzZT1zZS50cmFuc2l0aW9uKEYpLGdlPWdlLnRyYW5zaXRpb24oRiksVz1XLnRyYW5zaXRpb24oRiksZGU9ZGUudHJhbnNpdGlvbihGKS5hdHRyKCJvcGFjaXR5IixsQmUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oeGUpe3JldHVybiBpc0Zpbml0ZSh4ZT1iZSh4ZSkpP1AoeGUrVCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksWC5hdHRyKCJvcGFjaXR5IixsQmUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oeGUpe3ZhciBVPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIFAoKFUmJmlzRmluaXRlKFU9VSh4ZSkpP1U6YmUoeGUpKStUKX0pKSxkZS5yZW1vdmUoKSxuZS5hdHRyKCJkIixpPT09Tll8fGk9PT1icGU/Yj8iTSIrXypiKyIsIitvZSsiSCIrVCsiViIrcGUrIkgiK18qYjoiTSIrVCsiLCIrb2UrIlYiK3BlOmI/Ik0iK29lKyIsIitfKmIrIlYiK1QrIkgiK3BlKyJWIitfKmI6Ik0iK29lKyIsIitUKyJIIitwZSksc2UuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih4ZSl7cmV0dXJuIFAoYmUoeGUpK1QpfSksZ2UuYXR0cihBKyIyIixfKnYpLFcuYXR0cihBLF8qZWUpLnRleHQoSyksYWUuZmlsdGVyKHRMdCkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsaT09PWJwZT8ic3RhcnQiOmk9PT1OWT8iZW5kIjoibWlkZGxlIiksYWUuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPWJlfSl9cmV0dXJuIFIuc2NhbGU9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RixSKTpzfSxSLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHU9QXJyYXkuZnJvbShhcmd1bWVudHMpLFJ9LFIudGlja0FyZ3VtZW50cz1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1GPT1udWxsP1tdOkFycmF5LmZyb20oRiksUik6dS5zbGljZSgpfSxSLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9Rj09bnVsbD9udWxsOkFycmF5LmZyb20oRiksUik6ZCYmZC5zbGljZSgpfSxSLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9RixSKTpwfSxSLnRpY2tTaXplPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWI9K0YsUik6dn0sUi50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PStGLFIpOnZ9LFIudGlja1NpemVPdXRlcj1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0rRixSKTpifSxSLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PStGLFIpOnl9LFIub2Zmc2V0PWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPStGLFIpOlR9LFJ9ZnVuY3Rpb24gbkx0KGkpe3JldHVybiBoQmUoT1ksaSl9ZnVuY3Rpb24gckx0KGkpe3JldHVybiBoQmUobXBlLGkpfXZhciBpTHQ9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gZkJlKCl7Zm9yKHZhciBpPTAscz1hcmd1bWVudHMubGVuZ3RoLHU9e30sZDtpPHM7KytpKXtpZighKGQ9YXJndW1lbnRzW2ldKyIiKXx8ZCBpbiB1fHwvW1xzLl0vLnRlc3QoZCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrZCk7dVtkXT1bXX1yZXR1cm4gbmV3IFBZKHUpfWZ1bmN0aW9uIFBZKGkpe3RoaXMuXz1pfWZ1bmN0aW9uIHNMdChpLHMpe3JldHVybiBpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odSl7dmFyIGQ9IiIscD11LmluZGV4T2YoIi4iKTtpZihwPj0wJiYoZD11LnNsaWNlKHArMSksdT11LnNsaWNlKDAscCkpLHUmJiFzLmhhc093blByb3BlcnR5KHUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3UpO3JldHVybnt0eXBlOnUsbmFtZTpkfX0pfVBZLnByb3RvdHlwZT1mQmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQWSxvbjpmdW5jdGlvbihpLHMpe3ZhciB1PXRoaXMuXyxkPXNMdChpKyIiLHUpLHAsdj0tMSxiPWQubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK3Y8YjspaWYoKHA9KGk9ZFt2XSkudHlwZSkmJihwPWFMdCh1W3BdLGkubmFtZSkpKXJldHVybiBwO3JldHVybn1pZihzIT1udWxsJiZ0eXBlb2YgcyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrcyk7Zm9yKDsrK3Y8YjspaWYocD0oaT1kW3ZdKS50eXBlKXVbcF09ZEJlKHVbcF0saS5uYW1lLHMpO2Vsc2UgaWYocz09bnVsbClmb3IocCBpbiB1KXVbcF09ZEJlKHVbcF0saS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGk9e30scz10aGlzLl87Zm9yKHZhciB1IGluIHMpaVt1XT1zW3VdLnNsaWNlKCk7cmV0dXJuIG5ldyBQWShpKX0sY2FsbDpmdW5jdGlvbihpLHMpe2lmKChwPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHU9bmV3IEFycmF5KHApLGQ9MCxwLHY7ZDxwOysrZCl1W2RdPWFyZ3VtZW50c1tkKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoaSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIraSk7Zm9yKHY9dGhpcy5fW2ldLGQ9MCxwPXYubGVuZ3RoO2Q8cDsrK2QpdltkXS52YWx1ZS5hcHBseShzLHUpfSxhcHBseTpmdW5jdGlvbihpLHMsdSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShpKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitpKTtmb3IodmFyIGQ9dGhpcy5fW2ldLHA9MCx2PWQubGVuZ3RoO3A8djsrK3ApZFtwXS52YWx1ZS5hcHBseShzLHUpfX07ZnVuY3Rpb24gYUx0KGkscyl7Zm9yKHZhciB1PTAsZD1pLmxlbmd0aCxwO3U8ZDsrK3UpaWYoKHA9aVt1XSkubmFtZT09PXMpcmV0dXJuIHAudmFsdWV9ZnVuY3Rpb24gZEJlKGkscyx1KXtmb3IodmFyIGQ9MCxwPWkubGVuZ3RoO2Q8cDsrK2QpaWYoaVtkXS5uYW1lPT09cyl7aVtkXT1pTHQsaT1pLnNsaWNlKDAsZCkuY29uY2F0KGkuc2xpY2UoZCsxKSk7YnJlYWt9cmV0dXJuIHUhPW51bGwmJmkucHVzaCh7bmFtZTpzLHZhbHVlOnV9KSxpfXZhciB2cGU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IGdCZT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6dnBlLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gQlkoaSl7dmFyIHM9aSs9IiIsdT1zLmluZGV4T2YoIjoiKTtyZXR1cm4gdT49MCYmKHM9aS5zbGljZSgwLHUpKSE9PSJ4bWxucyImJihpPWkuc2xpY2UodSsxKSksZ0JlLmhhc093blByb3BlcnR5KHMpP3tzcGFjZTpnQmVbc10sbG9jYWw6aX06aX1mdW5jdGlvbiBvTHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5vd25lckRvY3VtZW50LHU9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHU9PT12cGUmJnMuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXZwZT9zLmNyZWF0ZUVsZW1lbnQoaSk6cy5jcmVhdGVFbGVtZW50TlModSxpKX19ZnVuY3Rpb24gY0x0KGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGkuc3BhY2UsaS5sb2NhbCl9fWZ1bmN0aW9uIHBCZShpKXt2YXIgcz1CWShpKTtyZXR1cm4ocy5sb2NhbD9jTHQ6b0x0KShzKX1mdW5jdGlvbiB1THQoKXt9ZnVuY3Rpb24gd3BlKGkpe3JldHVybiBpPT1udWxsP3VMdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoaSl9fWZ1bmN0aW9uIGxMdChpKXt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9d3BlKGkpKTtmb3IodmFyIHM9dGhpcy5fZ3JvdXBzLHU9cy5sZW5ndGgsZD1uZXcgQXJyYXkodSkscD0wO3A8dTsrK3ApZm9yKHZhciB2PXNbcF0sYj12Lmxlbmd0aCx5PWRbcF09bmV3IEFycmF5KGIpLFQsXyxBPTA7QTxiOysrQSkoVD12W0FdKSYmKF89aS5jYWxsKFQsVC5fX2RhdGFfXyxBLHYpKSYmKCJfX2RhdGFfXyJpbiBUJiYoXy5fX2RhdGFfXz1ULl9fZGF0YV9fKSx5W0FdPV8pO3JldHVybiBuZXcgeHAoZCx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBiQmUoaSl7cmV0dXJuIGk9PW51bGw/W106QXJyYXkuaXNBcnJheShpKT9pOkFycmF5LmZyb20oaSl9ZnVuY3Rpb24gaEx0KCl7cmV0dXJuW119ZnVuY3Rpb24gbUJlKGkpe3JldHVybiBpPT1udWxsP2hMdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoaSl9fWZ1bmN0aW9uIGZMdChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYkJlKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gZEx0KGkpe3R5cGVvZiBpPT0iZnVuY3Rpb24iP2k9Zkx0KGkpOmk9bUJlKGkpO2Zvcih2YXIgcz10aGlzLl9ncm91cHMsdT1zLmxlbmd0aCxkPVtdLHA9W10sdj0wO3Y8dTsrK3YpZm9yKHZhciBiPXNbdl0seT1iLmxlbmd0aCxULF89MDtfPHk7KytfKShUPWJbX10pJiYoZC5wdXNoKGkuY2FsbChULFQuX19kYXRhX18sXyxiKSkscC5wdXNoKFQpKTtyZXR1cm4gbmV3IHhwKGQscCl9ZnVuY3Rpb24gdkJlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoaSl9fWZ1bmN0aW9uIHdCZShpKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHMubWF0Y2hlcyhpKX19dmFyIGdMdD1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiBwTHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdMdC5jYWxsKHRoaXMuY2hpbGRyZW4saSl9fWZ1bmN0aW9uIGJMdCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfWZ1bmN0aW9uIG1MdChpKXtyZXR1cm4gdGhpcy5zZWxlY3QoaT09bnVsbD9iTHQ6cEx0KHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6d0JlKGkpKSl9dmFyIHZMdD1BcnJheS5wcm90b3R5cGUuZmlsdGVyO2Z1bmN0aW9uIHdMdCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pfWZ1bmN0aW9uIHlMdChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdkx0LmNhbGwodGhpcy5jaGlsZHJlbixpKX19ZnVuY3Rpb24geEx0KGkpe3JldHVybiB0aGlzLnNlbGVjdEFsbChpPT1udWxsP3dMdDp5THQodHlwZW9mIGk9PSJmdW5jdGlvbiI/aTp3QmUoaSkpKX1mdW5jdGlvbiBrTHQoaSl7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPXZCZShpKSk7Zm9yKHZhciBzPXRoaXMuX2dyb3Vwcyx1PXMubGVuZ3RoLGQ9bmV3IEFycmF5KHUpLHA9MDtwPHU7KytwKWZvcih2YXIgdj1zW3BdLGI9di5sZW5ndGgseT1kW3BdPVtdLFQsXz0wO188YjsrK18pKFQ9dltfXSkmJmkuY2FsbChULFQuX19kYXRhX18sXyx2KSYmeS5wdXNoKFQpO3JldHVybiBuZXcgeHAoZCx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB5QmUoaSl7cmV0dXJuIG5ldyBBcnJheShpLmxlbmd0aCl9ZnVuY3Rpb24gRUx0KCl7cmV0dXJuIG5ldyB4cCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcCh5QmUpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIEZZKGkscyl7dGhpcy5vd25lckRvY3VtZW50PWkub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1pLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWksdGhpcy5fX2RhdGFfXz1zfUZZLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RlksYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoaSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGkscyl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoaSxzKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoaSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGkpfX07ZnVuY3Rpb24gVEx0KGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1mdW5jdGlvbiBDTHQoaSxzLHUsZCxwLHYpe2Zvcih2YXIgYj0wLHksVD1zLmxlbmd0aCxfPXYubGVuZ3RoO2I8XzsrK2IpKHk9c1tiXSk/KHkuX19kYXRhX189dltiXSxkW2JdPXkpOnVbYl09bmV3IEZZKGksdltiXSk7Zm9yKDtiPFQ7KytiKSh5PXNbYl0pJiYocFtiXT15KX1mdW5jdGlvbiBTTHQoaSxzLHUsZCxwLHYsYil7dmFyIHksVCxfPW5ldyBNYXAsQT1zLmxlbmd0aCxQPXYubGVuZ3RoLFI9bmV3IEFycmF5KEEpLEY7Zm9yKHk9MDt5PEE7Kyt5KShUPXNbeV0pJiYoUlt5XT1GPWIuY2FsbChULFQuX19kYXRhX18seSxzKSsiIixfLmhhcyhGKT9wW3ldPVQ6Xy5zZXQoRixUKSk7Zm9yKHk9MDt5PFA7Kyt5KUY9Yi5jYWxsKGksdlt5XSx5LHYpKyIiLChUPV8uZ2V0KEYpKT8oZFt5XT1ULFQuX19kYXRhX189dlt5XSxfLmRlbGV0ZShGKSk6dVt5XT1uZXcgRlkoaSx2W3ldKTtmb3IoeT0wO3k8QTsrK3kpKFQ9c1t5XSkmJl8uZ2V0KFJbeV0pPT09VCYmKHBbeV09VCl9ZnVuY3Rpb24gX0x0KGkpe3JldHVybiBpLl9fZGF0YV9ffWZ1bmN0aW9uIEFMdChpLHMpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsX0x0KTt2YXIgdT1zP1NMdDpDTHQsZD10aGlzLl9wYXJlbnRzLHA9dGhpcy5fZ3JvdXBzO3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1UTHQoaSkpO2Zvcih2YXIgdj1wLmxlbmd0aCxiPW5ldyBBcnJheSh2KSx5PW5ldyBBcnJheSh2KSxUPW5ldyBBcnJheSh2KSxfPTA7Xzx2OysrXyl7dmFyIEE9ZFtfXSxQPXBbX10sUj1QLmxlbmd0aCxGPUxMdChpLmNhbGwoQSxBJiZBLl9fZGF0YV9fLF8sZCkpLGo9Ri5sZW5ndGgsSz15W19dPW5ldyBBcnJheShqKSxlZT1iW19dPW5ldyBBcnJheShqKSxpZT1UW19dPW5ldyBBcnJheShSKTt1KEEsUCxLLGVlLGllLEYscyk7Zm9yKHZhciBvZT0wLHBlPTAsYmUsYWU7b2U8ajsrK29lKWlmKGJlPUtbb2VdKXtmb3Iob2U+PXBlJiYocGU9b2UrMSk7IShhZT1lZVtwZV0pJiYrK3BlPGo7KTtiZS5fbmV4dD1hZXx8bnVsbH19cmV0dXJuIGI9bmV3IHhwKGIsZCksYi5fZW50ZXI9eSxiLl9leGl0PVQsYn1mdW5jdGlvbiBMTHQoaSl7cmV0dXJuIHR5cGVvZiBpPT0ib2JqZWN0IiYmImxlbmd0aCJpbiBpP2k6QXJyYXkuZnJvbShpKX1mdW5jdGlvbiBNTHQoKXtyZXR1cm4gbmV3IHhwKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoeUJlKSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBETHQoaSxzLHUpe3ZhciBkPXRoaXMuZW50ZXIoKSxwPXRoaXMsdj10aGlzLmV4aXQoKTtyZXR1cm4gdHlwZW9mIGk9PSJmdW5jdGlvbiI/KGQ9aShkKSxkJiYoZD1kLnNlbGVjdGlvbigpKSk6ZD1kLmFwcGVuZChpKyIiKSxzIT1udWxsJiYocD1zKHApLHAmJihwPXAuc2VsZWN0aW9uKCkpKSx1PT1udWxsP3YucmVtb3ZlKCk6dSh2KSxkJiZwP2QubWVyZ2UocCkub3JkZXIoKTpwfWZ1bmN0aW9uIElMdChpKXtmb3IodmFyIHM9aS5zZWxlY3Rpb24/aS5zZWxlY3Rpb24oKTppLHU9dGhpcy5fZ3JvdXBzLGQ9cy5fZ3JvdXBzLHA9dS5sZW5ndGgsdj1kLmxlbmd0aCxiPU1hdGgubWluKHAsdikseT1uZXcgQXJyYXkocCksVD0wO1Q8YjsrK1QpZm9yKHZhciBfPXVbVF0sQT1kW1RdLFA9Xy5sZW5ndGgsUj15W1RdPW5ldyBBcnJheShQKSxGLGo9MDtqPFA7KytqKShGPV9bal18fEFbal0pJiYoUltqXT1GKTtmb3IoO1Q8cDsrK1QpeVtUXT11W1RdO3JldHVybiBuZXcgeHAoeSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBPTHQoKXtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHM9LTEsdT1pLmxlbmd0aDsrK3M8dTspZm9yKHZhciBkPWlbc10scD1kLmxlbmd0aC0xLHY9ZFtwXSxiOy0tcD49MDspKGI9ZFtwXSkmJih2JiZiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHYpXjQmJnYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYix2KSx2PWIpO3JldHVybiB0aGlzfWZ1bmN0aW9uIE5MdChpKXtpfHwoaT1QTHQpO2Z1bmN0aW9uIHMoUCxSKXtyZXR1cm4gUCYmUj9pKFAuX19kYXRhX18sUi5fX2RhdGFfXyk6IVAtIVJ9Zm9yKHZhciB1PXRoaXMuX2dyb3VwcyxkPXUubGVuZ3RoLHA9bmV3IEFycmF5KGQpLHY9MDt2PGQ7Kyt2KXtmb3IodmFyIGI9dVt2XSx5PWIubGVuZ3RoLFQ9cFt2XT1uZXcgQXJyYXkoeSksXyxBPTA7QTx5OysrQSkoXz1iW0FdKSYmKFRbQV09Xyk7VC5zb3J0KHMpfXJldHVybiBuZXcgeHAocCx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIFBMdChpLHMpe3JldHVybiBpPHM/LTE6aT5zPzE6aT49cz8wOk5hTn1mdW5jdGlvbiBCTHQoKXt2YXIgaT1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLGkuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9ZnVuY3Rpb24gRkx0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9ZnVuY3Rpb24gUkx0KCl7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxzPTAsdT1pLmxlbmd0aDtzPHU7KytzKWZvcih2YXIgZD1pW3NdLHA9MCx2PWQubGVuZ3RoO3A8djsrK3Ape3ZhciBiPWRbcF07aWYoYilyZXR1cm4gYn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBqTHQoKXtsZXQgaT0wO2Zvcihjb25zdCBzIG9mIHRoaXMpKytpO3JldHVybiBpfWZ1bmN0aW9uICRMdCgpe3JldHVybiF0aGlzLm5vZGUoKX1mdW5jdGlvbiB6THQoaSl7Zm9yKHZhciBzPXRoaXMuX2dyb3Vwcyx1PTAsZD1zLmxlbmd0aDt1PGQ7Kyt1KWZvcih2YXIgcD1zW3VdLHY9MCxiPXAubGVuZ3RoLHk7djxiOysrdikoeT1wW3ZdKSYmaS5jYWxsKHkseS5fX2RhdGFfXyx2LHApO3JldHVybiB0aGlzfWZ1bmN0aW9uIHFMdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShpKX19ZnVuY3Rpb24gSEx0KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKX19ZnVuY3Rpb24gVkx0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoaSxzKX19ZnVuY3Rpb24gVUx0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwscyl9fWZ1bmN0aW9uIEdMdChpLHMpe3JldHVybiBmdW5jdGlvbigpe3ZhciB1PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3U9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSk6dGhpcy5zZXRBdHRyaWJ1dGUoaSx1KX19ZnVuY3Rpb24gS0x0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHU9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dT09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwsdSl9fWZ1bmN0aW9uIFdMdChpLHMpe3ZhciB1PUJZKGkpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGQ9dGhpcy5ub2RlKCk7cmV0dXJuIHUubG9jYWw/ZC5nZXRBdHRyaWJ1dGVOUyh1LnNwYWNlLHUubG9jYWwpOmQuZ2V0QXR0cmlidXRlKHUpfXJldHVybiB0aGlzLmVhY2goKHM9PW51bGw/dS5sb2NhbD9ITHQ6cUx0OnR5cGVvZiBzPT0iZnVuY3Rpb24iP3UubG9jYWw/S0x0OkdMdDp1LmxvY2FsP1VMdDpWTHQpKHUscykpfWZ1bmN0aW9uIHhCZShpKXtyZXR1cm4gaS5vd25lckRvY3VtZW50JiZpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGkuZG9jdW1lbnQmJml8fGkuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gWUx0KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoaSl9fWZ1bmN0aW9uIFhMdChpLHMsdSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShpLHMsdSl9fWZ1bmN0aW9uIFFMdChpLHMsdSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZD09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoaSxkLHUpfX1mdW5jdGlvbiBKTHQoaSxzLHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChzPT1udWxsP1lMdDp0eXBlb2Ygcz09ImZ1bmN0aW9uIj9RTHQ6WEx0KShpLHMsdT8/IiIpKTpaTSh0aGlzLm5vZGUoKSxpKX1mdW5jdGlvbiBaTShpLHMpe3JldHVybiBpLnN0eWxlLmdldFByb3BlcnR5VmFsdWUocyl8fHhCZShpKS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShzKX1mdW5jdGlvbiBaTHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbaV19fWZ1bmN0aW9uIGVNdChpLHMpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbaV09c319ZnVuY3Rpb24gdE10KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHU9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dT09bnVsbD9kZWxldGUgdGhpc1tpXTp0aGlzW2ldPXV9fWZ1bmN0aW9uIG5NdChpLHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChzPT1udWxsP1pMdDp0eXBlb2Ygcz09ImZ1bmN0aW9uIj90TXQ6ZU10KShpLHMpKTp0aGlzLm5vZGUoKVtpXX1mdW5jdGlvbiBrQmUoaSl7cmV0dXJuIGkudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHlwZShpKXtyZXR1cm4gaS5jbGFzc0xpc3R8fG5ldyBFQmUoaSl9ZnVuY3Rpb24gRUJlKGkpe3RoaXMuX25vZGU9aSx0aGlzLl9uYW1lcz1rQmUoaS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1FQmUucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oaSl7dmFyIHM9dGhpcy5fbmFtZXMuaW5kZXhPZihpKTtzPDAmJih0aGlzLl9uYW1lcy5wdXNoKGkpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihpKXt2YXIgcz10aGlzLl9uYW1lcy5pbmRleE9mKGkpO3M+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UocywxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihpKT49MH19O2Z1bmN0aW9uIFRCZShpLHMpe2Zvcih2YXIgdT15cGUoaSksZD0tMSxwPXMubGVuZ3RoOysrZDxwOyl1LmFkZChzW2RdKX1mdW5jdGlvbiBDQmUoaSxzKXtmb3IodmFyIHU9eXBlKGkpLGQ9LTEscD1zLmxlbmd0aDsrK2Q8cDspdS5yZW1vdmUoc1tkXSl9ZnVuY3Rpb24gck10KGkpe3JldHVybiBmdW5jdGlvbigpe1RCZSh0aGlzLGkpfX1mdW5jdGlvbiBpTXQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Q0JlKHRoaXMsaSl9fWZ1bmN0aW9uIHNNdChpLHMpe3JldHVybiBmdW5jdGlvbigpeyhzLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9UQmU6Q0JlKSh0aGlzLGkpfX1mdW5jdGlvbiBhTXQoaSxzKXt2YXIgdT1rQmUoaSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGQ9eXBlKHRoaXMubm9kZSgpKSxwPS0xLHY9dS5sZW5ndGg7KytwPHY7KWlmKCFkLmNvbnRhaW5zKHVbcF0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBzPT0iZnVuY3Rpb24iP3NNdDpzP3JNdDppTXQpKHUscykpfWZ1bmN0aW9uIG9NdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gY010KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9aX19ZnVuY3Rpb24gdU10KGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBzPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9cz8/IiJ9fWZ1bmN0aW9uIGxNdChpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goaT09bnVsbD9vTXQ6KHR5cGVvZiBpPT0iZnVuY3Rpb24iP3VNdDpjTXQpKGkpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH1mdW5jdGlvbiBoTXQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBmTXQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9aX19ZnVuY3Rpb24gZE10KGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBzPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXM/PyIifX1mdW5jdGlvbiBnTXQoaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGk9PW51bGw/aE10Oih0eXBlb2YgaT09ImZ1bmN0aW9uIj9kTXQ6Zk10KShpKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfWZ1bmN0aW9uIHBNdCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBiTXQoKXtyZXR1cm4gdGhpcy5lYWNoKHBNdCl9ZnVuY3Rpb24gbU10KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gdk10KCl7cmV0dXJuIHRoaXMuZWFjaChtTXQpfWZ1bmN0aW9uIHdNdChpKXt2YXIgcz10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnBCZShpKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiB5TXQoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB4TXQoaSxzKXt2YXIgdT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnBCZShpKSxkPXM9PW51bGw/eU10OnR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6d3BlKHMpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZSh1LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX1mdW5jdGlvbiBrTXQoKXt2YXIgaT10aGlzLnBhcmVudE5vZGU7aSYmaS5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBFTXQoKXtyZXR1cm4gdGhpcy5lYWNoKGtNdCl9ZnVuY3Rpb24gVE10KCl7dmFyIGk9dGhpcy5jbG9uZU5vZGUoITEpLHM9dGhpcy5wYXJlbnROb2RlO3JldHVybiBzP3MuaW5zZXJ0QmVmb3JlKGksdGhpcy5uZXh0U2libGluZyk6aX1mdW5jdGlvbiBDTXQoKXt2YXIgaT10aGlzLmNsb25lTm9kZSghMCkscz10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHM/cy5pbnNlcnRCZWZvcmUoaSx0aGlzLm5leHRTaWJsaW5nKTppfWZ1bmN0aW9uIFNNdChpKXtyZXR1cm4gdGhpcy5zZWxlY3QoaT9DTXQ6VE10KX1mdW5jdGlvbiBfTXQoaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGkpOnRoaXMubm9kZSgpLl9fZGF0YV9ffWZ1bmN0aW9uIEFNdChpKXtyZXR1cm4gZnVuY3Rpb24ocyl7aS5jYWxsKHRoaXMscyx0aGlzLl9fZGF0YV9fKX19ZnVuY3Rpb24gTE10KGkpe3JldHVybiBpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocyl7dmFyIHU9IiIsZD1zLmluZGV4T2YoIi4iKTtyZXR1cm4gZD49MCYmKHU9cy5zbGljZShkKzEpLHM9cy5zbGljZSgwLGQpKSx7dHlwZTpzLG5hbWU6dX19KX1mdW5jdGlvbiBNTXQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5fX29uO2lmKHMpe2Zvcih2YXIgdT0wLGQ9LTEscD1zLmxlbmd0aCx2O3U8cDsrK3Updj1zW3VdLCghaS50eXBlfHx2LnR5cGU9PT1pLnR5cGUpJiZ2Lm5hbWU9PT1pLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHYudHlwZSx2Lmxpc3RlbmVyLHYub3B0aW9ucyk6c1srK2RdPXY7KytkP3MubGVuZ3RoPWQ6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIERNdChpLHMsdSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5fX29uLHAsdj1BTXQocyk7aWYoZCl7Zm9yKHZhciBiPTAseT1kLmxlbmd0aDtiPHk7KytiKWlmKChwPWRbYl0pLnR5cGU9PT1pLnR5cGUmJnAubmFtZT09PWkubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHAudHlwZSxwLmxpc3RlbmVyLHAub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKHAudHlwZSxwLmxpc3RlbmVyPXYscC5vcHRpb25zPXUpLHAudmFsdWU9cztyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihpLnR5cGUsdix1KSxwPXt0eXBlOmkudHlwZSxuYW1lOmkubmFtZSx2YWx1ZTpzLGxpc3RlbmVyOnYsb3B0aW9uczp1fSxkP2QucHVzaChwKTp0aGlzLl9fb249W3BdfX1mdW5jdGlvbiBJTXQoaSxzLHUpe3ZhciBkPUxNdChpKyIiKSxwLHY9ZC5sZW5ndGgsYjtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciB5PXRoaXMubm9kZSgpLl9fb247aWYoeSl7Zm9yKHZhciBUPTAsXz15Lmxlbmd0aCxBO1Q8XzsrK1QpZm9yKHA9MCxBPXlbVF07cDx2OysrcClpZigoYj1kW3BdKS50eXBlPT09QS50eXBlJiZiLm5hbWU9PT1BLm5hbWUpcmV0dXJuIEEudmFsdWV9cmV0dXJufWZvcih5PXM/RE10Ok1NdCxwPTA7cDx2OysrcCl0aGlzLmVhY2goeShkW3BdLHMsdSkpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFNCZShpLHMsdSl7dmFyIGQ9eEJlKGkpLHA9ZC5DdXN0b21FdmVudDt0eXBlb2YgcD09ImZ1bmN0aW9uIj9wPW5ldyBwKHMsdSk6KHA9ZC5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSx1PyhwLmluaXRFdmVudChzLHUuYnViYmxlcyx1LmNhbmNlbGFibGUpLHAuZGV0YWlsPXUuZGV0YWlsKTpwLmluaXRFdmVudChzLCExLCExKSksaS5kaXNwYXRjaEV2ZW50KHApfWZ1bmN0aW9uIE9NdChpLHMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBTQmUodGhpcyxpLHMpfX1mdW5jdGlvbiBOTXQoaSxzKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gU0JlKHRoaXMsaSxzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIFBNdChpLHMpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiBzPT0iZnVuY3Rpb24iP05NdDpPTXQpKGkscykpfWZ1bmN0aW9uKkJNdCgpe2Zvcih2YXIgaT10aGlzLl9ncm91cHMscz0wLHU9aS5sZW5ndGg7czx1Oysrcylmb3IodmFyIGQ9aVtzXSxwPTAsdj1kLmxlbmd0aCxiO3A8djsrK3ApKGI9ZFtwXSkmJih5aWVsZCBiKX12YXIgeHBlPVtudWxsXTtmdW5jdGlvbiB4cChpLHMpe3RoaXMuX2dyb3Vwcz1pLHRoaXMuX3BhcmVudHM9c31mdW5jdGlvbiB2Rigpe3JldHVybiBuZXcgeHAoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSx4cGUpfWZ1bmN0aW9uIEZNdCgpe3JldHVybiB0aGlzfXhwLnByb3RvdHlwZT12Ri5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnhwLHNlbGVjdDpsTHQsc2VsZWN0QWxsOmRMdCxzZWxlY3RDaGlsZDptTHQsc2VsZWN0Q2hpbGRyZW46eEx0LGZpbHRlcjprTHQsZGF0YTpBTHQsZW50ZXI6RUx0LGV4aXQ6TUx0LGpvaW46REx0LG1lcmdlOklMdCxzZWxlY3Rpb246Rk10LG9yZGVyOk9MdCxzb3J0Ok5MdCxjYWxsOkJMdCxub2RlczpGTHQsbm9kZTpSTHQsc2l6ZTpqTHQsZW1wdHk6JEx0LGVhY2g6ekx0LGF0dHI6V0x0LHN0eWxlOkpMdCxwcm9wZXJ0eTpuTXQsY2xhc3NlZDphTXQsdGV4dDpsTXQsaHRtbDpnTXQscmFpc2U6Yk10LGxvd2VyOnZNdCxhcHBlbmQ6d010LGluc2VydDp4TXQscmVtb3ZlOkVNdCxjbG9uZTpTTXQsZGF0dW06X010LG9uOklNdCxkaXNwYXRjaDpQTXQsW1N5bWJvbC5pdGVyYXRvcl06Qk10fTtmdW5jdGlvbiBJcihpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciP25ldyB4cChbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHhwKFtbaV1dLHhwZSl9ZnVuY3Rpb24gX0JlKGkpe3JldHVybiB0eXBlb2YgaT09InN0cmluZyI/bmV3IHhwKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGkpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHhwKFtiQmUoaSldLHhwZSl9ZnVuY3Rpb24gd0YoaSxzLHUpe2kucHJvdG90eXBlPXMucHJvdG90eXBlPXUsdS5jb25zdHJ1Y3Rvcj1pfWZ1bmN0aW9uIFJZKGkscyl7dmFyIHU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBkIGluIHMpdVtkXT1zW2RdO3JldHVybiB1fWZ1bmN0aW9uIGZDKCl7fXZhciB5Rj0uNyxqWT0xL3lGLGVEPSJcXHMqKFsrLV0/XFxkKylcXHMqIix4Rj0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsUjQ9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixSTXQ9L14jKFswLTlhLWZdezMsOH0pJC8sak10PW5ldyBSZWdFeHAoYF5yZ2JcXCgke2VEfSwke2VEfSwke2VEfVxcKSRgKSwkTXQ9bmV3IFJlZ0V4cChgXnJnYlxcKCR7UjR9LCR7UjR9LCR7UjR9XFwpJGApLHpNdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7ZUR9LCR7ZUR9LCR7ZUR9LCR7eEZ9XFwpJGApLHFNdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7UjR9LCR7UjR9LCR7UjR9LCR7eEZ9XFwpJGApLEhNdD1uZXcgUmVnRXhwKGBeaHNsXFwoJHt4Rn0sJHtSNH0sJHtSNH1cXCkkYCksVk10PW5ldyBSZWdFeHAoYF5oc2xhXFwoJHt4Rn0sJHtSNH0sJHtSNH0sJHt4Rn1cXCkkYCksQUJlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O3dGKGZDLGRDLHtjb3B5KGkpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsaSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OkxCZSxmb3JtYXRIZXg6TEJlLGZvcm1hdEhleDg6VU10LGZvcm1hdEhzbDpHTXQsZm9ybWF0UmdiOk1CZSx0b1N0cmluZzpNQmV9KTtmdW5jdGlvbiBMQmUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBVTXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXg4KCl9ZnVuY3Rpb24gR010KCl7cmV0dXJuIEJCZSh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBNQmUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBkQyhpKXt2YXIgcyx1O3JldHVybiBpPShpKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwocz1STXQuZXhlYyhpKSk/KHU9c1sxXS5sZW5ndGgscz1wYXJzZUludChzWzFdLDE2KSx1PT09Nj9EQmUocyk6dT09PTM/bmV3IE1nKHM+PjgmMTV8cz4+NCYyNDAscz4+NCYxNXxzJjI0MCwocyYxNSk8PDR8cyYxNSwxKTp1PT09OD8kWShzPj4yNCYyNTUscz4+MTYmMjU1LHM+PjgmMjU1LChzJjI1NSkvMjU1KTp1PT09ND8kWShzPj4xMiYxNXxzPj44JjI0MCxzPj44JjE1fHM+PjQmMjQwLHM+PjQmMTV8cyYyNDAsKChzJjE1KTw8NHxzJjE1KS8yNTUpOm51bGwpOihzPWpNdC5leGVjKGkpKT9uZXcgTWcoc1sxXSxzWzJdLHNbM10sMSk6KHM9JE10LmV4ZWMoaSkpP25ldyBNZyhzWzFdKjI1NS8xMDAsc1syXSoyNTUvMTAwLHNbM10qMjU1LzEwMCwxKToocz16TXQuZXhlYyhpKSk/JFkoc1sxXSxzWzJdLHNbM10sc1s0XSk6KHM9cU10LmV4ZWMoaSkpPyRZKHNbMV0qMjU1LzEwMCxzWzJdKjI1NS8xMDAsc1szXSoyNTUvMTAwLHNbNF0pOihzPUhNdC5leGVjKGkpKT9QQmUoc1sxXSxzWzJdLzEwMCxzWzNdLzEwMCwxKToocz1WTXQuZXhlYyhpKSk/UEJlKHNbMV0sc1syXS8xMDAsc1szXS8xMDAsc1s0XSk6QUJlLmhhc093blByb3BlcnR5KGkpP0RCZShBQmVbaV0pOmk9PT0idHJhbnNwYXJlbnQiP25ldyBNZyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIERCZShpKXtyZXR1cm4gbmV3IE1nKGk+PjE2JjI1NSxpPj44JjI1NSxpJjI1NSwxKX1mdW5jdGlvbiAkWShpLHMsdSxkKXtyZXR1cm4gZDw9MCYmKGk9cz11PU5hTiksbmV3IE1nKGkscyx1LGQpfWZ1bmN0aW9uIElCZShpKXtyZXR1cm4gaSBpbnN0YW5jZW9mIGZDfHwoaT1kQyhpKSksaT8oaT1pLnJnYigpLG5ldyBNZyhpLnIsaS5nLGkuYixpLm9wYWNpdHkpKTpuZXcgTWd9ZnVuY3Rpb24ga3BlKGkscyx1LGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9JQmUoaSk6bmV3IE1nKGkscyx1LGQ/PzEpfWZ1bmN0aW9uIE1nKGkscyx1LGQpe3RoaXMucj0raSx0aGlzLmc9K3MsdGhpcy5iPSt1LHRoaXMub3BhY2l0eT0rZH13RihNZyxrcGUsUlkoZkMse2JyaWdodGVyKGkpe3JldHVybiBpPWk9PW51bGw/alk6TWF0aC5wb3coalksaSksbmV3IE1nKHRoaXMucippLHRoaXMuZyppLHRoaXMuYippLHRoaXMub3BhY2l0eSl9LGRhcmtlcihpKXtyZXR1cm4gaT1pPT1udWxsP3lGOk1hdGgucG93KHlGLGkpLG5ldyBNZyh0aGlzLnIqaSx0aGlzLmcqaSx0aGlzLmIqaSx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdGhpc30sY2xhbXAoKXtyZXR1cm4gbmV3IE1nKGdDKHRoaXMuciksZ0ModGhpcy5nKSxnQyh0aGlzLmIpLHpZKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6T0JlLGZvcm1hdEhleDpPQmUsZm9ybWF0SGV4ODpLTXQsZm9ybWF0UmdiOk5CZSx0b1N0cmluZzpOQmV9KSk7ZnVuY3Rpb24gT0JlKCl7cmV0dXJuYCMke3BDKHRoaXMucil9JHtwQyh0aGlzLmcpfSR7cEModGhpcy5iKX1gfWZ1bmN0aW9uIEtNdCgpe3JldHVybmAjJHtwQyh0aGlzLnIpfSR7cEModGhpcy5nKX0ke3BDKHRoaXMuYil9JHtwQygoaXNOYU4odGhpcy5vcGFjaXR5KT8xOnRoaXMub3BhY2l0eSkqMjU1KX1gfWZ1bmN0aW9uIE5CZSgpe2NvbnN0IGk9elkodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHtpPT09MT8icmdiKCI6InJnYmEoIn0ke2dDKHRoaXMucil9LCAke2dDKHRoaXMuZyl9LCAke2dDKHRoaXMuYil9JHtpPT09MT8iKSI6YCwgJHtpfSlgfWB9ZnVuY3Rpb24gelkoaSl7cmV0dXJuIGlzTmFOKGkpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGkpKX1mdW5jdGlvbiBnQyhpKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChpKXx8MCkpfWZ1bmN0aW9uIHBDKGkpe3JldHVybiBpPWdDKGkpLChpPDE2PyIwIjoiIikraS50b1N0cmluZygxNil9ZnVuY3Rpb24gUEJlKGkscyx1LGQpe3JldHVybiBkPD0wP2k9cz11PU5hTjp1PD0wfHx1Pj0xP2k9cz1OYU46czw9MCYmKGk9TmFOKSxuZXcgQTMoaSxzLHUsZCl9ZnVuY3Rpb24gQkJlKGkpe2lmKGkgaW5zdGFuY2VvZiBBMylyZXR1cm4gbmV3IEEzKGkuaCxpLnMsaS5sLGkub3BhY2l0eSk7aWYoaSBpbnN0YW5jZW9mIGZDfHwoaT1kQyhpKSksIWkpcmV0dXJuIG5ldyBBMztpZihpIGluc3RhbmNlb2YgQTMpcmV0dXJuIGk7aT1pLnJnYigpO3ZhciBzPWkuci8yNTUsdT1pLmcvMjU1LGQ9aS5iLzI1NSxwPU1hdGgubWluKHMsdSxkKSx2PU1hdGgubWF4KHMsdSxkKSxiPU5hTix5PXYtcCxUPSh2K3ApLzI7cmV0dXJuIHk/KHM9PT12P2I9KHUtZCkveSsodTxkKSo2OnU9PT12P2I9KGQtcykveSsyOmI9KHMtdSkveSs0LHkvPVQ8LjU/ditwOjItdi1wLGIqPTYwKTp5PVQ+MCYmVDwxPzA6YixuZXcgQTMoYix5LFQsaS5vcGFjaXR5KX1mdW5jdGlvbiBXTXQoaSxzLHUsZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0JCZShpKTpuZXcgQTMoaSxzLHUsZD8/MSl9ZnVuY3Rpb24gQTMoaSxzLHUsZCl7dGhpcy5oPStpLHRoaXMucz0rcyx0aGlzLmw9K3UsdGhpcy5vcGFjaXR5PStkfXdGKEEzLFdNdCxSWShmQyx7YnJpZ2h0ZXIoaSl7cmV0dXJuIGk9aT09bnVsbD9qWTpNYXRoLnBvdyhqWSxpKSxuZXcgQTModGhpcy5oLHRoaXMucyx0aGlzLmwqaSx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoaSl7cmV0dXJuIGk9aT09bnVsbD95RjpNYXRoLnBvdyh5RixpKSxuZXcgQTModGhpcy5oLHRoaXMucyx0aGlzLmwqaSx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgaT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHM9aXNOYU4oaSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsdT10aGlzLmwsZD11Kyh1PC41P3U6MS11KSpzLHA9Mip1LWQ7cmV0dXJuIG5ldyBNZyhFcGUoaT49MjQwP2ktMjQwOmkrMTIwLHAsZCksRXBlKGkscCxkKSxFcGUoaTwxMjA/aSsyNDA6aS0xMjAscCxkKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcgQTMoRkJlKHRoaXMuaCkscVkodGhpcy5zKSxxWSh0aGlzLmwpLHpZKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsKCl7Y29uc3QgaT16WSh0aGlzLm9wYWNpdHkpO3JldHVybmAke2k9PT0xPyJoc2woIjoiaHNsYSgifSR7RkJlKHRoaXMuaCl9LCAke3FZKHRoaXMucykqMTAwfSUsICR7cVkodGhpcy5sKSoxMDB9JSR7aT09PTE/IikiOmAsICR7aX0pYH1gfX0pKTtmdW5jdGlvbiBGQmUoaSl7cmV0dXJuIGk9KGl8fDApJTM2MCxpPDA/aSszNjA6aX1mdW5jdGlvbiBxWShpKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLGl8fDApKX1mdW5jdGlvbiBFcGUoaSxzLHUpe3JldHVybihpPDYwP3MrKHUtcykqaS82MDppPDE4MD91Omk8MjQwP3MrKHUtcykqKDI0MC1pKS82MDpzKSoyNTV9Y29uc3QgWU10PU1hdGguUEkvMTgwLFhNdD0xODAvTWF0aC5QSSxIWT0xOCxSQmU9Ljk2NDIyLGpCZT0xLCRCZT0uODI1MjEsekJlPTQvMjksdEQ9Ni8yOSxxQmU9Myp0RCp0RCxRTXQ9dEQqdEQqdEQ7ZnVuY3Rpb24gSEJlKGkpe2lmKGkgaW5zdGFuY2VvZiBqNClyZXR1cm4gbmV3IGo0KGkubCxpLmEsaS5iLGkub3BhY2l0eSk7aWYoaSBpbnN0YW5jZW9mIHA3KXJldHVybiBWQmUoaSk7aSBpbnN0YW5jZW9mIE1nfHwoaT1JQmUoaSkpO3ZhciBzPV9wZShpLnIpLHU9X3BlKGkuZyksZD1fcGUoaS5iKSxwPVRwZSgoLjIyMjUwNDUqcysuNzE2ODc4Nip1Ky4wNjA2MTY5KmQpL2pCZSksdixiO3JldHVybiBzPT09dSYmdT09PWQ/dj1iPXA6KHY9VHBlKCguNDM2MDc0NypzKy4zODUwNjQ5KnUrLjE0MzA4MDQqZCkvUkJlKSxiPVRwZSgoLjAxMzkzMjIqcysuMDk3MTA0NSp1Ky43MTQxNzMzKmQpLyRCZSkpLG5ldyBqNCgxMTYqcC0xNiw1MDAqKHYtcCksMjAwKihwLWIpLGkub3BhY2l0eSl9ZnVuY3Rpb24gSk10KGkscyx1LGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9IQmUoaSk6bmV3IGo0KGkscyx1LGQ/PzEpfWZ1bmN0aW9uIGo0KGkscyx1LGQpe3RoaXMubD0raSx0aGlzLmE9K3MsdGhpcy5iPSt1LHRoaXMub3BhY2l0eT0rZH13RihqNCxKTXQsUlkoZkMse2JyaWdodGVyKGkpe3JldHVybiBuZXcgajQodGhpcy5sK0hZKihpPz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcihpKXtyZXR1cm4gbmV3IGo0KHRoaXMubC1IWSooaT8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgaT0odGhpcy5sKzE2KS8xMTYscz1pc05hTih0aGlzLmEpP2k6aSt0aGlzLmEvNTAwLHU9aXNOYU4odGhpcy5iKT9pOmktdGhpcy5iLzIwMDtyZXR1cm4gcz1SQmUqQ3BlKHMpLGk9akJlKkNwZShpKSx1PSRCZSpDcGUodSksbmV3IE1nKFNwZSgzLjEzMzg1NjEqcy0xLjYxNjg2NjcqaS0uNDkwNjE0Nip1KSxTcGUoLS45Nzg3Njg0KnMrMS45MTYxNDE1KmkrLjAzMzQ1NCp1KSxTcGUoLjA3MTk0NTMqcy0uMjI4OTkxNCppKzEuNDA1MjQyNyp1KSx0aGlzLm9wYWNpdHkpfX0pKTtmdW5jdGlvbiBUcGUoaSl7cmV0dXJuIGk+UU10P01hdGgucG93KGksMS8zKTppL3FCZSt6QmV9ZnVuY3Rpb24gQ3BlKGkpe3JldHVybiBpPnREP2kqaSppOnFCZSooaS16QmUpfWZ1bmN0aW9uIFNwZShpKXtyZXR1cm4gMjU1KihpPD0uMDAzMTMwOD8xMi45MippOjEuMDU1Kk1hdGgucG93KGksMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIF9wZShpKXtyZXR1cm4oaS89MjU1KTw9LjA0MDQ1P2kvMTIuOTI6TWF0aC5wb3coKGkrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBaTXQoaSl7aWYoaSBpbnN0YW5jZW9mIHA3KXJldHVybiBuZXcgcDcoaS5oLGkuYyxpLmwsaS5vcGFjaXR5KTtpZihpIGluc3RhbmNlb2YgajR8fChpPUhCZShpKSksaS5hPT09MCYmaS5iPT09MClyZXR1cm4gbmV3IHA3KE5hTiwwPGkubCYmaS5sPDEwMD8wOk5hTixpLmwsaS5vcGFjaXR5KTt2YXIgcz1NYXRoLmF0YW4yKGkuYixpLmEpKlhNdDtyZXR1cm4gbmV3IHA3KHM8MD9zKzM2MDpzLE1hdGguc3FydChpLmEqaS5hK2kuYippLmIpLGkubCxpLm9wYWNpdHkpfWZ1bmN0aW9uIEFwZShpLHMsdSxkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Wk10KGkpOm5ldyBwNyhpLHMsdSxkPz8xKX1mdW5jdGlvbiBwNyhpLHMsdSxkKXt0aGlzLmg9K2ksdGhpcy5jPStzLHRoaXMubD0rdSx0aGlzLm9wYWNpdHk9K2R9ZnVuY3Rpb24gVkJlKGkpe2lmKGlzTmFOKGkuaCkpcmV0dXJuIG5ldyBqNChpLmwsMCwwLGkub3BhY2l0eSk7dmFyIHM9aS5oKllNdDtyZXR1cm4gbmV3IGo0KGkubCxNYXRoLmNvcyhzKSppLmMsTWF0aC5zaW4ocykqaS5jLGkub3BhY2l0eSl9d0YocDcsQXBlLFJZKGZDLHticmlnaHRlcihpKXtyZXR1cm4gbmV3IHA3KHRoaXMuaCx0aGlzLmMsdGhpcy5sK0hZKihpPz8xKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoaSl7cmV0dXJuIG5ldyBwNyh0aGlzLmgsdGhpcy5jLHRoaXMubC1IWSooaT8/MSksdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIFZCZSh0aGlzKS5yZ2IoKX19KSk7Y29uc3QgVlk9aT0+KCk9Pmk7ZnVuY3Rpb24gVUJlKGkscyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpK3Uqc319ZnVuY3Rpb24gZUR0KGkscyx1KXtyZXR1cm4gaT1NYXRoLnBvdyhpLHUpLHM9TWF0aC5wb3cocyx1KS1pLHU9MS91LGZ1bmN0aW9uKGQpe3JldHVybiBNYXRoLnBvdyhpK2Qqcyx1KX19ZnVuY3Rpb24gdER0KGkscyl7dmFyIHU9cy1pO3JldHVybiB1P1VCZShpLHU+MTgwfHx1PC0xODA/dS0zNjAqTWF0aC5yb3VuZCh1LzM2MCk6dSk6VlkoaXNOYU4oaSk/czppKX1mdW5jdGlvbiBuRHQoaSl7cmV0dXJuKGk9K2kpPT0xP2tGOmZ1bmN0aW9uKHMsdSl7cmV0dXJuIHUtcz9lRHQocyx1LGkpOlZZKGlzTmFOKHMpP3U6cyl9fWZ1bmN0aW9uIGtGKGkscyl7dmFyIHU9cy1pO3JldHVybiB1P1VCZShpLHUpOlZZKGlzTmFOKGkpP3M6aSl9Y29uc3QgVVk9ZnVuY3Rpb24gaShzKXt2YXIgdT1uRHQocyk7ZnVuY3Rpb24gZChwLHYpe3ZhciBiPXUoKHA9a3BlKHApKS5yLCh2PWtwZSh2KSkucikseT11KHAuZyx2LmcpLFQ9dShwLmIsdi5iKSxfPWtGKHAub3BhY2l0eSx2Lm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihBKXtyZXR1cm4gcC5yPWIoQSkscC5nPXkoQSkscC5iPVQoQSkscC5vcGFjaXR5PV8oQSkscCsiIn19cmV0dXJuIGQuZ2FtbWE9aSxkfSgxKTtmdW5jdGlvbiByRHQoaSxzKXtzfHwocz1bXSk7dmFyIHU9aT9NYXRoLm1pbihzLmxlbmd0aCxpLmxlbmd0aCk6MCxkPXMuc2xpY2UoKSxwO3JldHVybiBmdW5jdGlvbih2KXtmb3IocD0wO3A8dTsrK3ApZFtwXT1pW3BdKigxLXYpK3NbcF0qdjtyZXR1cm4gZH19ZnVuY3Rpb24gaUR0KGkpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoaSkmJiEoaSBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBzRHQoaSxzKXt2YXIgdT1zP3MubGVuZ3RoOjAsZD1pP01hdGgubWluKHUsaS5sZW5ndGgpOjAscD1uZXcgQXJyYXkoZCksdj1uZXcgQXJyYXkodSksYjtmb3IoYj0wO2I8ZDsrK2IpcFtiXT1EcGUoaVtiXSxzW2JdKTtmb3IoO2I8dTsrK2IpdltiXT1zW2JdO3JldHVybiBmdW5jdGlvbih5KXtmb3IoYj0wO2I8ZDsrK2IpdltiXT1wW2JdKHkpO3JldHVybiB2fX1mdW5jdGlvbiBhRHQoaSxzKXt2YXIgdT1uZXcgRGF0ZTtyZXR1cm4gaT0raSxzPStzLGZ1bmN0aW9uKGQpe3JldHVybiB1LnNldFRpbWUoaSooMS1kKStzKmQpLHV9fWZ1bmN0aW9uIEwzKGkscyl7cmV0dXJuIGk9K2kscz0rcyxmdW5jdGlvbih1KXtyZXR1cm4gaSooMS11KStzKnV9fWZ1bmN0aW9uIG9EdChpLHMpe3ZhciB1PXt9LGQ9e30scDsoaT09PW51bGx8fHR5cGVvZiBpIT0ib2JqZWN0IikmJihpPXt9KSwocz09PW51bGx8fHR5cGVvZiBzIT0ib2JqZWN0IikmJihzPXt9KTtmb3IocCBpbiBzKXAgaW4gaT91W3BdPURwZShpW3BdLHNbcF0pOmRbcF09c1twXTtyZXR1cm4gZnVuY3Rpb24odil7Zm9yKHAgaW4gdSlkW3BdPXVbcF0odik7cmV0dXJuIGR9fXZhciBMcGU9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLE1wZT1uZXcgUmVnRXhwKExwZS5zb3VyY2UsImciKTtmdW5jdGlvbiBjRHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIHVEdChpKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIGkocykrIiJ9fWZ1bmN0aW9uIEdCZShpLHMpe3ZhciB1PUxwZS5sYXN0SW5kZXg9TXBlLmxhc3RJbmRleD0wLGQscCx2LGI9LTEseT1bXSxUPVtdO2ZvcihpPWkrIiIscz1zKyIiOyhkPUxwZS5leGVjKGkpKSYmKHA9TXBlLmV4ZWMocykpOykodj1wLmluZGV4KT51JiYodj1zLnNsaWNlKHUsdikseVtiXT95W2JdKz12OnlbKytiXT12KSwoZD1kWzBdKT09PShwPXBbMF0pP3lbYl0/eVtiXSs9cDp5WysrYl09cDooeVsrK2JdPW51bGwsVC5wdXNoKHtpOmIseDpMMyhkLHApfSkpLHU9TXBlLmxhc3RJbmRleDtyZXR1cm4gdTxzLmxlbmd0aCYmKHY9cy5zbGljZSh1KSx5W2JdP3lbYl0rPXY6eVsrK2JdPXYpLHkubGVuZ3RoPDI/VFswXT91RHQoVFswXS54KTpjRHQocyk6KHM9VC5sZW5ndGgsZnVuY3Rpb24oXyl7Zm9yKHZhciBBPTAsUDtBPHM7KytBKXlbKFA9VFtBXSkuaV09UC54KF8pO3JldHVybiB5LmpvaW4oIiIpfSl9ZnVuY3Rpb24gRHBlKGkscyl7dmFyIHU9dHlwZW9mIHMsZDtyZXR1cm4gcz09bnVsbHx8dT09PSJib29sZWFuIj9WWShzKToodT09PSJudW1iZXIiP0wzOnU9PT0ic3RyaW5nIj8oZD1kQyhzKSk/KHM9ZCxVWSk6R0JlOnMgaW5zdGFuY2VvZiBkQz9VWTpzIGluc3RhbmNlb2YgRGF0ZT9hRHQ6aUR0KHMpP3JEdDpBcnJheS5pc0FycmF5KHMpP3NEdDp0eXBlb2Ygcy52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2Ygcy50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4ocyk/b0R0OkwzKShpLHMpfWZ1bmN0aW9uIGxEdChpLHMpe3JldHVybiBpPStpLHM9K3MsZnVuY3Rpb24odSl7cmV0dXJuIE1hdGgucm91bmQoaSooMS11KStzKnUpfX12YXIgS0JlPTE4MC9NYXRoLlBJLElwZT17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBXQmUoaSxzLHUsZCxwLHYpe3ZhciBiLHksVDtyZXR1cm4oYj1NYXRoLnNxcnQoaSppK3MqcykpJiYoaS89YixzLz1iKSwoVD1pKnUrcypkKSYmKHUtPWkqVCxkLT1zKlQpLCh5PU1hdGguc3FydCh1KnUrZCpkKSkmJih1Lz15LGQvPXksVC89eSksaSpkPHMqdSYmKGk9LWkscz0tcyxUPS1ULGI9LWIpLHt0cmFuc2xhdGVYOnAsdHJhbnNsYXRlWTp2LHJvdGF0ZTpNYXRoLmF0YW4yKHMsaSkqS0JlLHNrZXdYOk1hdGguYXRhbihUKSpLQmUsc2NhbGVYOmIsc2NhbGVZOnl9fXZhciBHWTtmdW5jdGlvbiBoRHQoaSl7Y29uc3Qgcz1uZXcodHlwZW9mIERPTU1hdHJpeD09ImZ1bmN0aW9uIj9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KShpKyIiKTtyZXR1cm4gcy5pc0lkZW50aXR5P0lwZTpXQmUocy5hLHMuYixzLmMscy5kLHMuZSxzLmYpfWZ1bmN0aW9uIGZEdChpKXtyZXR1cm4gaT09bnVsbHx8KEdZfHwoR1k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksR1kuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGkpLCEoaT1HWS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKSk/SXBlOihpPWkubWF0cml4LFdCZShpLmEsaS5iLGkuYyxpLmQsaS5lLGkuZikpfWZ1bmN0aW9uIFlCZShpLHMsdSxkKXtmdW5jdGlvbiBwKF8pe3JldHVybiBfLmxlbmd0aD9fLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiB2KF8sQSxQLFIsRixqKXtpZihfIT09UHx8QSE9PVIpe3ZhciBLPUYucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxzLG51bGwsdSk7ai5wdXNoKHtpOkstNCx4OkwzKF8sUCl9LHtpOkstMix4OkwzKEEsUil9KX1lbHNlKFB8fFIpJiZGLnB1c2goInRyYW5zbGF0ZSgiK1ArcytSK3UpfWZ1bmN0aW9uIGIoXyxBLFAsUil7XyE9PUE/KF8tQT4xODA/QSs9MzYwOkEtXz4xODAmJihfKz0zNjApLFIucHVzaCh7aTpQLnB1c2gocChQKSsicm90YXRlKCIsbnVsbCxkKS0yLHg6TDMoXyxBKX0pKTpBJiZQLnB1c2gocChQKSsicm90YXRlKCIrQStkKX1mdW5jdGlvbiB5KF8sQSxQLFIpe18hPT1BP1IucHVzaCh7aTpQLnB1c2gocChQKSsic2tld1goIixudWxsLGQpLTIseDpMMyhfLEEpfSk6QSYmUC5wdXNoKHAoUCkrInNrZXdYKCIrQStkKX1mdW5jdGlvbiBUKF8sQSxQLFIsRixqKXtpZihfIT09UHx8QSE9PVIpe3ZhciBLPUYucHVzaChwKEYpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtqLnB1c2goe2k6Sy00LHg6TDMoXyxQKX0se2k6Sy0yLHg6TDMoQSxSKX0pfWVsc2UoUCE9PTF8fFIhPT0xKSYmRi5wdXNoKHAoRikrInNjYWxlKCIrUCsiLCIrUisiKSIpfXJldHVybiBmdW5jdGlvbihfLEEpe3ZhciBQPVtdLFI9W107cmV0dXJuIF89aShfKSxBPWkoQSksdihfLnRyYW5zbGF0ZVgsXy50cmFuc2xhdGVZLEEudHJhbnNsYXRlWCxBLnRyYW5zbGF0ZVksUCxSKSxiKF8ucm90YXRlLEEucm90YXRlLFAsUikseShfLnNrZXdYLEEuc2tld1gsUCxSKSxUKF8uc2NhbGVYLF8uc2NhbGVZLEEuc2NhbGVYLEEuc2NhbGVZLFAsUiksXz1BPW51bGwsZnVuY3Rpb24oRil7Zm9yKHZhciBqPS0xLEs9Ui5sZW5ndGgsZWU7KytqPEs7KVBbKGVlPVJbal0pLmldPWVlLngoRik7cmV0dXJuIFAuam9pbigiIil9fX12YXIgZER0PVlCZShoRHQsInB4LCAiLCJweCkiLCJkZWcpIiksZ0R0PVlCZShmRHQsIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBwRHQoaSl7cmV0dXJuIGZ1bmN0aW9uKHMsdSl7dmFyIGQ9aSgocz1BcGUocykpLmgsKHU9QXBlKHUpKS5oKSxwPWtGKHMuYyx1LmMpLHY9a0Yocy5sLHUubCksYj1rRihzLm9wYWNpdHksdS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oeSl7cmV0dXJuIHMuaD1kKHkpLHMuYz1wKHkpLHMubD12KHkpLHMub3BhY2l0eT1iKHkpLHMrIiJ9fX1jb25zdCBiRHQ9cER0KHREdCk7dmFyIG5EPTAsRUY9MCxURj0wLFhCZT0xZTMsS1ksQ0YsV1k9MCxiQz0wLFlZPTAsU0Y9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsUUJlPXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGkpe3NldFRpbWVvdXQoaSwxNyl9O2Z1bmN0aW9uIE9wZSgpe3JldHVybiBiQ3x8KFFCZShtRHQpLGJDPVNGLm5vdygpK1lZKX1mdW5jdGlvbiBtRHQoKXtiQz0wfWZ1bmN0aW9uIFhZKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1YWS5wcm90b3R5cGU9SkJlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WFkscmVzdGFydDpmdW5jdGlvbihpLHMsdSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTt1PSh1PT1udWxsP09wZSgpOit1KSsocz09bnVsbD8wOitzKSwhdGhpcy5fbmV4dCYmQ0YhPT10aGlzJiYoQ0Y/Q0YuX25leHQ9dGhpczpLWT10aGlzLENGPXRoaXMpLHRoaXMuX2NhbGw9aSx0aGlzLl90aW1lPXUsTnBlKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLE5wZSgpKX19O2Z1bmN0aW9uIEpCZShpLHMsdSl7dmFyIGQ9bmV3IFhZO3JldHVybiBkLnJlc3RhcnQoaSxzLHUpLGR9ZnVuY3Rpb24gdkR0KCl7T3BlKCksKytuRDtmb3IodmFyIGk9S1kscztpOykocz1iQy1pLl90aW1lKT49MCYmaS5fY2FsbC5jYWxsKHZvaWQgMCxzKSxpPWkuX25leHQ7LS1uRH1mdW5jdGlvbiBaQmUoKXtiQz0oV1k9U0Yubm93KCkpK1lZLG5EPUVGPTA7dHJ5e3ZEdCgpfWZpbmFsbHl7bkQ9MCx5RHQoKSxiQz0wfX1mdW5jdGlvbiB3RHQoKXt2YXIgaT1TRi5ub3coKSxzPWktV1k7cz5YQmUmJihZWS09cyxXWT1pKX1mdW5jdGlvbiB5RHQoKXtmb3IodmFyIGkscz1LWSx1LGQ9MS8wO3M7KXMuX2NhbGw/KGQ+cy5fdGltZSYmKGQ9cy5fdGltZSksaT1zLHM9cy5fbmV4dCk6KHU9cy5fbmV4dCxzLl9uZXh0PW51bGwscz1pP2kuX25leHQ9dTpLWT11KTtDRj1pLE5wZShkKX1mdW5jdGlvbiBOcGUoaSl7aWYoIW5EKXtFRiYmKEVGPWNsZWFyVGltZW91dChFRikpO3ZhciBzPWktYkM7cz4yND8oaTwxLzAmJihFRj1zZXRUaW1lb3V0KFpCZSxpLVNGLm5vdygpLVlZKSksVEYmJihURj1jbGVhckludGVydmFsKFRGKSkpOihURnx8KFdZPVNGLm5vdygpLFRGPXNldEludGVydmFsKHdEdCxYQmUpKSxuRD0xLFFCZShaQmUpKX19ZnVuY3Rpb24gZUZlKGkscyx1KXt2YXIgZD1uZXcgWFk7cmV0dXJuIHM9cz09bnVsbD8wOitzLGQucmVzdGFydChwPT57ZC5zdG9wKCksaShwK3MpfSxzLHUpLGR9dmFyIHhEdD1mQmUoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0Iiksa0R0PVtdLHRGZT0wLG5GZT0xLFBwZT0yLFFZPTMsckZlPTQsQnBlPTUsSlk9NjtmdW5jdGlvbiBaWShpLHMsdSxkLHAsdil7dmFyIGI9aS5fX3RyYW5zaXRpb247aWYoIWIpaS5fX3RyYW5zaXRpb249e307ZWxzZSBpZih1IGluIGIpcmV0dXJuO0VEdChpLHUse25hbWU6cyxpbmRleDpkLGdyb3VwOnAsb246eER0LHR3ZWVuOmtEdCx0aW1lOnYudGltZSxkZWxheTp2LmRlbGF5LGR1cmF0aW9uOnYuZHVyYXRpb24sZWFzZTp2LmVhc2UsdGltZXI6bnVsbCxzdGF0ZTp0RmV9KX1mdW5jdGlvbiBGcGUoaSxzKXt2YXIgdT1NMyhpLHMpO2lmKHUuc3RhdGU+dEZlKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHV9ZnVuY3Rpb24gJDQoaSxzKXt2YXIgdT1NMyhpLHMpO2lmKHUuc3RhdGU+UVkpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIHV9ZnVuY3Rpb24gTTMoaSxzKXt2YXIgdT1pLl9fdHJhbnNpdGlvbjtpZighdXx8ISh1PXVbc10pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gdX1mdW5jdGlvbiBFRHQoaSxzLHUpe3ZhciBkPWkuX190cmFuc2l0aW9uLHA7ZFtzXT11LHUudGltZXI9SkJlKHYsMCx1LnRpbWUpO2Z1bmN0aW9uIHYoXyl7dS5zdGF0ZT1uRmUsdS50aW1lci5yZXN0YXJ0KGIsdS5kZWxheSx1LnRpbWUpLHUuZGVsYXk8PV8mJmIoXy11LmRlbGF5KX1mdW5jdGlvbiBiKF8pe3ZhciBBLFAsUixGO2lmKHUuc3RhdGUhPT1uRmUpcmV0dXJuIFQoKTtmb3IoQSBpbiBkKWlmKEY9ZFtBXSxGLm5hbWU9PT11Lm5hbWUpe2lmKEYuc3RhdGU9PT1RWSlyZXR1cm4gZUZlKGIpO0Yuc3RhdGU9PT1yRmU/KEYuc3RhdGU9SlksRi50aW1lci5zdG9wKCksRi5vbi5jYWxsKCJpbnRlcnJ1cHQiLGksaS5fX2RhdGFfXyxGLmluZGV4LEYuZ3JvdXApLGRlbGV0ZSBkW0FdKTorQTxzJiYoRi5zdGF0ZT1KWSxGLnRpbWVyLnN0b3AoKSxGLm9uLmNhbGwoImNhbmNlbCIsaSxpLl9fZGF0YV9fLEYuaW5kZXgsRi5ncm91cCksZGVsZXRlIGRbQV0pfWlmKGVGZShmdW5jdGlvbigpe3Uuc3RhdGU9PT1RWSYmKHUuc3RhdGU9ckZlLHUudGltZXIucmVzdGFydCh5LHUuZGVsYXksdS50aW1lKSx5KF8pKX0pLHUuc3RhdGU9UHBlLHUub24uY2FsbCgic3RhcnQiLGksaS5fX2RhdGFfXyx1LmluZGV4LHUuZ3JvdXApLHUuc3RhdGU9PT1QcGUpe2Zvcih1LnN0YXRlPVFZLHA9bmV3IEFycmF5KFI9dS50d2Vlbi5sZW5ndGgpLEE9MCxQPS0xO0E8UjsrK0EpKEY9dS50d2VlbltBXS52YWx1ZS5jYWxsKGksaS5fX2RhdGFfXyx1LmluZGV4LHUuZ3JvdXApKSYmKHBbKytQXT1GKTtwLmxlbmd0aD1QKzF9fWZ1bmN0aW9uIHkoXyl7Zm9yKHZhciBBPV88dS5kdXJhdGlvbj91LmVhc2UuY2FsbChudWxsLF8vdS5kdXJhdGlvbik6KHUudGltZXIucmVzdGFydChUKSx1LnN0YXRlPUJwZSwxKSxQPS0xLFI9cC5sZW5ndGg7KytQPFI7KXBbUF0uY2FsbChpLEEpO3Uuc3RhdGU9PT1CcGUmJih1Lm9uLmNhbGwoImVuZCIsaSxpLl9fZGF0YV9fLHUuaW5kZXgsdS5ncm91cCksVCgpKX1mdW5jdGlvbiBUKCl7dS5zdGF0ZT1KWSx1LnRpbWVyLnN0b3AoKSxkZWxldGUgZFtzXTtmb3IodmFyIF8gaW4gZClyZXR1cm47ZGVsZXRlIGkuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBURHQoaSxzKXt2YXIgdT1pLl9fdHJhbnNpdGlvbixkLHAsdj0hMCxiO2lmKHUpe3M9cz09bnVsbD9udWxsOnMrIiI7Zm9yKGIgaW4gdSl7aWYoKGQ9dVtiXSkubmFtZSE9PXMpe3Y9ITE7Y29udGludWV9cD1kLnN0YXRlPlBwZSYmZC5zdGF0ZTxCcGUsZC5zdGF0ZT1KWSxkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwocD8iaW50ZXJydXB0IjoiY2FuY2VsIixpLGkuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgdVtiXX12JiZkZWxldGUgaS5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIENEdChpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7VER0KHRoaXMsaSl9KX1mdW5jdGlvbiBTRHQoaSxzKXt2YXIgdSxkO3JldHVybiBmdW5jdGlvbigpe3ZhciBwPSQ0KHRoaXMsaSksdj1wLnR3ZWVuO2lmKHYhPT11KXtkPXU9djtmb3IodmFyIGI9MCx5PWQubGVuZ3RoO2I8eTsrK2IpaWYoZFtiXS5uYW1lPT09cyl7ZD1kLnNsaWNlKCksZC5zcGxpY2UoYiwxKTticmVha319cC50d2Vlbj1kfX1mdW5jdGlvbiBfRHQoaSxzLHUpe3ZhciBkLHA7aWYodHlwZW9mIHUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PSQ0KHRoaXMsaSksYj12LnR3ZWVuO2lmKGIhPT1kKXtwPShkPWIpLnNsaWNlKCk7Zm9yKHZhciB5PXtuYW1lOnMsdmFsdWU6dX0sVD0wLF89cC5sZW5ndGg7VDxfOysrVClpZihwW1RdLm5hbWU9PT1zKXtwW1RdPXk7YnJlYWt9VD09PV8mJnAucHVzaCh5KX12LnR3ZWVuPXB9fWZ1bmN0aW9uIEFEdChpLHMpe3ZhciB1PXRoaXMuX2lkO2lmKGkrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBkPU0zKHRoaXMubm9kZSgpLHUpLnR3ZWVuLHA9MCx2PWQubGVuZ3RoLGI7cDx2OysrcClpZigoYj1kW3BdKS5uYW1lPT09aSlyZXR1cm4gYi52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChzPT1udWxsP1NEdDpfRHQpKHUsaSxzKSl9ZnVuY3Rpb24gUnBlKGkscyx1KXt2YXIgZD1pLl9pZDtyZXR1cm4gaS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHA9JDQodGhpcyxkKTsocC52YWx1ZXx8KHAudmFsdWU9e30pKVtzXT11LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKHApe3JldHVybiBNMyhwLGQpLnZhbHVlW3NdfX1mdW5jdGlvbiBpRmUoaSxzKXt2YXIgdTtyZXR1cm4odHlwZW9mIHM9PSJudW1iZXIiP0wzOnMgaW5zdGFuY2VvZiBkQz9VWToodT1kQyhzKSk/KHM9dSxVWSk6R0JlKShpLHMpfWZ1bmN0aW9uIExEdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShpKX19ZnVuY3Rpb24gTUR0KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKX19ZnVuY3Rpb24gRER0KGkscyx1KXt2YXIgZCxwPXUrIiIsdjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldEF0dHJpYnV0ZShpKTtyZXR1cm4gYj09PXA/bnVsbDpiPT09ZD92OnY9cyhkPWIsdSl9fWZ1bmN0aW9uIElEdChpLHMsdSl7dmFyIGQscD11KyIiLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpO3JldHVybiBiPT09cD9udWxsOmI9PT1kP3Y6dj1zKGQ9Yix1KX19ZnVuY3Rpb24gT0R0KGkscyx1KXt2YXIgZCxwLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGIseT11KHRoaXMpLFQ7cmV0dXJuIHk9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShpKTooYj10aGlzLmdldEF0dHJpYnV0ZShpKSxUPXkrIiIsYj09PVQ/bnVsbDpiPT09ZCYmVD09PXA/djoocD1ULHY9cyhkPWIseSkpKX19ZnVuY3Rpb24gTkR0KGkscyx1KXt2YXIgZCxwLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGIseT11KHRoaXMpLFQ7cmV0dXJuIHk9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCk6KGI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpLFQ9eSsiIixiPT09VD9udWxsOmI9PT1kJiZUPT09cD92OihwPVQsdj1zKGQ9Yix5KSkpfX1mdW5jdGlvbiBQRHQoaSxzKXt2YXIgdT1CWShpKSxkPXU9PT0idHJhbnNmb3JtIj9nRHQ6aUZlO3JldHVybiB0aGlzLmF0dHJUd2VlbihpLHR5cGVvZiBzPT0iZnVuY3Rpb24iPyh1LmxvY2FsP05EdDpPRHQpKHUsZCxScGUodGhpcywiYXR0ci4iK2kscykpOnM9PW51bGw/KHUubG9jYWw/TUR0OkxEdCkodSk6KHUubG9jYWw/SUR0OkREdCkodSxkLHMpKX1mdW5jdGlvbiBCRHQoaSxzKXtyZXR1cm4gZnVuY3Rpb24odSl7dGhpcy5zZXRBdHRyaWJ1dGUoaSxzLmNhbGwodGhpcyx1KSl9fWZ1bmN0aW9uIEZEdChpLHMpe3JldHVybiBmdW5jdGlvbih1KXt0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxzLmNhbGwodGhpcyx1KSl9fWZ1bmN0aW9uIFJEdChpLHMpe3ZhciB1LGQ7ZnVuY3Rpb24gcCgpe3ZhciB2PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2IT09ZCYmKHU9KGQ9dikmJkZEdChpLHYpKSx1fXJldHVybiBwLl92YWx1ZT1zLHB9ZnVuY3Rpb24gakR0KGkscyl7dmFyIHUsZDtmdW5jdGlvbiBwKCl7dmFyIHY9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHYhPT1kJiYodT0oZD12KSYmQkR0KGksdikpLHV9cmV0dXJuIHAuX3ZhbHVlPXMscH1mdW5jdGlvbiAkRHQoaSxzKXt2YXIgdT0iYXR0ci4iK2k7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybih1PXRoaXMudHdlZW4odSkpJiZ1Ll92YWx1ZTtpZihzPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHUsbnVsbCk7aWYodHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBkPUJZKGkpO3JldHVybiB0aGlzLnR3ZWVuKHUsKGQubG9jYWw/UkR0OmpEdCkoZCxzKSl9ZnVuY3Rpb24gekR0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7RnBlKHRoaXMsaSkuZGVsYXk9K3MuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBxRHQoaSxzKXtyZXR1cm4gcz0rcyxmdW5jdGlvbigpe0ZwZSh0aGlzLGkpLmRlbGF5PXN9fWZ1bmN0aW9uIEhEdChpKXt2YXIgcz10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBpPT0iZnVuY3Rpb24iP3pEdDpxRHQpKHMsaSkpOk0zKHRoaXMubm9kZSgpLHMpLmRlbGF5fWZ1bmN0aW9uIFZEdChpLHMpe3JldHVybiBmdW5jdGlvbigpeyQ0KHRoaXMsaSkuZHVyYXRpb249K3MuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBVRHQoaSxzKXtyZXR1cm4gcz0rcyxmdW5jdGlvbigpeyQ0KHRoaXMsaSkuZHVyYXRpb249c319ZnVuY3Rpb24gR0R0KGkpe3ZhciBzPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGk9PSJmdW5jdGlvbiI/VkR0OlVEdCkocyxpKSk6TTModGhpcy5ub2RlKCkscykuZHVyYXRpb259ZnVuY3Rpb24gS0R0KGkscyl7aWYodHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpeyQ0KHRoaXMsaSkuZWFzZT1zfX1mdW5jdGlvbiBXRHQoaSl7dmFyIHM9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKEtEdChzLGkpKTpNMyh0aGlzLm5vZGUoKSxzKS5lYXNlfWZ1bmN0aW9uIFlEdChpLHMpe3JldHVybiBmdW5jdGlvbigpe3ZhciB1PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHR5cGVvZiB1IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjskNCh0aGlzLGkpLmVhc2U9dX19ZnVuY3Rpb24gWER0KGkpe2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5lYWNoKFlEdCh0aGlzLl9pZCxpKSl9ZnVuY3Rpb24gUUR0KGkpe3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT12QmUoaSkpO2Zvcih2YXIgcz10aGlzLl9ncm91cHMsdT1zLmxlbmd0aCxkPW5ldyBBcnJheSh1KSxwPTA7cDx1OysrcClmb3IodmFyIHY9c1twXSxiPXYubGVuZ3RoLHk9ZFtwXT1bXSxULF89MDtfPGI7KytfKShUPXZbX10pJiZpLmNhbGwoVCxULl9fZGF0YV9fLF8sdikmJnkucHVzaChUKTtyZXR1cm4gbmV3IGI3KGQsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBKRHQoaSl7aWYoaS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBzPXRoaXMuX2dyb3Vwcyx1PWkuX2dyb3VwcyxkPXMubGVuZ3RoLHA9dS5sZW5ndGgsdj1NYXRoLm1pbihkLHApLGI9bmV3IEFycmF5KGQpLHk9MDt5PHY7Kyt5KWZvcih2YXIgVD1zW3ldLF89dVt5XSxBPVQubGVuZ3RoLFA9Ylt5XT1uZXcgQXJyYXkoQSksUixGPTA7RjxBOysrRikoUj1UW0ZdfHxfW0ZdKSYmKFBbRl09Uik7Zm9yKDt5PGQ7Kyt5KWJbeV09c1t5XTtyZXR1cm4gbmV3IGI3KGIsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBaRHQoaSl7cmV0dXJuKGkrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihzKXt2YXIgdT1zLmluZGV4T2YoIi4iKTtyZXR1cm4gdT49MCYmKHM9cy5zbGljZSgwLHUpKSwhc3x8cz09PSJzdGFydCJ9KX1mdW5jdGlvbiBlSXQoaSxzLHUpe3ZhciBkLHAsdj1aRHQocyk/RnBlOiQ0O3JldHVybiBmdW5jdGlvbigpe3ZhciBiPXYodGhpcyxpKSx5PWIub247eSE9PWQmJihwPShkPXkpLmNvcHkoKSkub24ocyx1KSxiLm9uPXB9fWZ1bmN0aW9uIHRJdChpLHMpe3ZhciB1PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/TTModGhpcy5ub2RlKCksdSkub24ub24oaSk6dGhpcy5lYWNoKGVJdCh1LGkscykpfWZ1bmN0aW9uIG5JdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciB1IGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCt1IT09aSlyZXR1cm47cyYmcy5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gckl0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLG5JdCh0aGlzLl9pZCkpfWZ1bmN0aW9uIGlJdChpKXt2YXIgcz10aGlzLl9uYW1lLHU9dGhpcy5faWQ7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPXdwZShpKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxwPWQubGVuZ3RoLHY9bmV3IEFycmF5KHApLGI9MDtiPHA7KytiKWZvcih2YXIgeT1kW2JdLFQ9eS5sZW5ndGgsXz12W2JdPW5ldyBBcnJheShUKSxBLFAsUj0wO1I8VDsrK1IpKEE9eVtSXSkmJihQPWkuY2FsbChBLEEuX19kYXRhX18sUix5KSkmJigiX19kYXRhX18iaW4gQSYmKFAuX19kYXRhX189QS5fX2RhdGFfXyksX1tSXT1QLFpZKF9bUl0scyx1LFIsXyxNMyhBLHUpKSk7cmV0dXJuIG5ldyBiNyh2LHRoaXMuX3BhcmVudHMscyx1KX1mdW5jdGlvbiBzSXQoaSl7dmFyIHM9dGhpcy5fbmFtZSx1PXRoaXMuX2lkO3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1tQmUoaSkpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMscD1kLmxlbmd0aCx2PVtdLGI9W10seT0wO3k8cDsrK3kpZm9yKHZhciBUPWRbeV0sXz1ULmxlbmd0aCxBLFA9MDtQPF87KytQKWlmKEE9VFtQXSl7Zm9yKHZhciBSPWkuY2FsbChBLEEuX19kYXRhX18sUCxUKSxGLGo9TTMoQSx1KSxLPTAsZWU9Ui5sZW5ndGg7SzxlZTsrK0spKEY9UltLXSkmJlpZKEYscyx1LEssUixqKTt2LnB1c2goUiksYi5wdXNoKEEpfXJldHVybiBuZXcgYjcodixiLHMsdSl9dmFyIGFJdD12Ri5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gb0l0KCl7cmV0dXJuIG5ldyBhSXQodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGNJdChpLHMpe3ZhciB1LGQscDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj1aTSh0aGlzLGkpLGI9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoaSksWk0odGhpcyxpKSk7cmV0dXJuIHY9PT1iP251bGw6dj09PXUmJmI9PT1kP3A6cD1zKHU9dixkPWIpfX1mdW5jdGlvbiBzRmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShpKX19ZnVuY3Rpb24gdUl0KGkscyx1KXt2YXIgZCxwPXUrIiIsdjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj1aTSh0aGlzLGkpO3JldHVybiBiPT09cD9udWxsOmI9PT1kP3Y6dj1zKGQ9Yix1KX19ZnVuY3Rpb24gbEl0KGkscyx1KXt2YXIgZCxwLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9Wk0odGhpcyxpKSx5PXUodGhpcyksVD15KyIiO3JldHVybiB5PT1udWxsJiYoVD15PSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpLFpNKHRoaXMsaSkpKSxiPT09VD9udWxsOmI9PT1kJiZUPT09cD92OihwPVQsdj1zKGQ9Yix5KSl9fWZ1bmN0aW9uIGhJdChpLHMpe3ZhciB1LGQscCx2PSJzdHlsZS4iK3MsYj0iZW5kLiIrdix5O3JldHVybiBmdW5jdGlvbigpe3ZhciBUPSQ0KHRoaXMsaSksXz1ULm9uLEE9VC52YWx1ZVt2XT09bnVsbD95fHwoeT1zRmUocykpOnZvaWQgMDsoXyE9PXV8fHAhPT1BKSYmKGQ9KHU9XykuY29weSgpKS5vbihiLHA9QSksVC5vbj1kfX1mdW5jdGlvbiBmSXQoaSxzLHUpe3ZhciBkPShpKz0iIik9PSJ0cmFuc2Zvcm0iP2REdDppRmU7cmV0dXJuIHM9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKGksY0l0KGksZCkpLm9uKCJlbmQuc3R5bGUuIitpLHNGZShpKSk6dHlwZW9mIHM9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKGksbEl0KGksZCxScGUodGhpcywic3R5bGUuIitpLHMpKSkuZWFjaChoSXQodGhpcy5faWQsaSkpOnRoaXMuc3R5bGVUd2VlbihpLHVJdChpLGQscyksdSkub24oImVuZC5zdHlsZS4iK2ksbnVsbCl9ZnVuY3Rpb24gZEl0KGkscyx1KXtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShpLHMuY2FsbCh0aGlzLGQpLHUpfX1mdW5jdGlvbiBnSXQoaSxzLHUpe3ZhciBkLHA7ZnVuY3Rpb24gdigpe3ZhciBiPXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBiIT09cCYmKGQ9KHA9YikmJmRJdChpLGIsdSkpLGR9cmV0dXJuIHYuX3ZhbHVlPXMsdn1mdW5jdGlvbiBwSXQoaSxzLHUpe3ZhciBkPSJzdHlsZS4iKyhpKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihkPXRoaXMudHdlZW4oZCkpJiZkLl92YWx1ZTtpZihzPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKGQsbnVsbCk7aWYodHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGQsZ0l0KGkscyx1Pz8iIikpfWZ1bmN0aW9uIGJJdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWl9fWZ1bmN0aW9uIG1JdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1pKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9cz8/IiJ9fWZ1bmN0aW9uIHZJdChpKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGk9PSJmdW5jdGlvbiI/bUl0KFJwZSh0aGlzLCJ0ZXh0IixpKSk6Ykl0KGk9PW51bGw/IiI6aSsiIikpfWZ1bmN0aW9uIHdJdChpKXtyZXR1cm4gZnVuY3Rpb24ocyl7dGhpcy50ZXh0Q29udGVudD1pLmNhbGwodGhpcyxzKX19ZnVuY3Rpb24geUl0KGkpe3ZhciBzLHU7ZnVuY3Rpb24gZCgpe3ZhciBwPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBwIT09dSYmKHM9KHU9cCkmJndJdChwKSksc31yZXR1cm4gZC5fdmFsdWU9aSxkfWZ1bmN0aW9uIHhJdChpKXt2YXIgcz0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihzPXRoaXMudHdlZW4ocykpJiZzLl92YWx1ZTtpZihpPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHMsbnVsbCk7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHMseUl0KGkpKX1mdW5jdGlvbiBrSXQoKXtmb3IodmFyIGk9dGhpcy5fbmFtZSxzPXRoaXMuX2lkLHU9YUZlKCksZD10aGlzLl9ncm91cHMscD1kLmxlbmd0aCx2PTA7djxwOysrdilmb3IodmFyIGI9ZFt2XSx5PWIubGVuZ3RoLFQsXz0wO188eTsrK18paWYoVD1iW19dKXt2YXIgQT1NMyhULHMpO1pZKFQsaSx1LF8sYix7dGltZTpBLnRpbWUrQS5kZWxheStBLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246QS5kdXJhdGlvbixlYXNlOkEuZWFzZX0pfXJldHVybiBuZXcgYjcoZCx0aGlzLl9wYXJlbnRzLGksdSl9ZnVuY3Rpb24gRUl0KCl7dmFyIGkscyx1PXRoaXMsZD11Ll9pZCxwPXUuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih2LGIpe3ZhciB5PXt2YWx1ZTpifSxUPXt2YWx1ZTpmdW5jdGlvbigpey0tcD09PTAmJnYoKX19O3UuZWFjaChmdW5jdGlvbigpe3ZhciBfPSQ0KHRoaXMsZCksQT1fLm9uO0EhPT1pJiYocz0oaT1BKS5jb3B5KCkscy5fLmNhbmNlbC5wdXNoKHkpLHMuXy5pbnRlcnJ1cHQucHVzaCh5KSxzLl8uZW5kLnB1c2goVCkpLF8ub249c30pLHA9PT0wJiZ2KCl9KX12YXIgVEl0PTA7ZnVuY3Rpb24gYjcoaSxzLHUsZCl7dGhpcy5fZ3JvdXBzPWksdGhpcy5fcGFyZW50cz1zLHRoaXMuX25hbWU9dSx0aGlzLl9pZD1kfWZ1bmN0aW9uIGFGZSgpe3JldHVybisrVEl0fXZhciBtNz12Ri5wcm90b3R5cGU7YjcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiNyxzZWxlY3Q6aUl0LHNlbGVjdEFsbDpzSXQsc2VsZWN0Q2hpbGQ6bTcuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46bTcuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOlFEdCxtZXJnZTpKRHQsc2VsZWN0aW9uOm9JdCx0cmFuc2l0aW9uOmtJdCxjYWxsOm03LmNhbGwsbm9kZXM6bTcubm9kZXMsbm9kZTptNy5ub2RlLHNpemU6bTcuc2l6ZSxlbXB0eTptNy5lbXB0eSxlYWNoOm03LmVhY2gsb246dEl0LGF0dHI6UER0LGF0dHJUd2VlbjokRHQsc3R5bGU6Zkl0LHN0eWxlVHdlZW46cEl0LHRleHQ6dkl0LHRleHRUd2Vlbjp4SXQscmVtb3ZlOnJJdCx0d2VlbjpBRHQsZGVsYXk6SER0LGR1cmF0aW9uOkdEdCxlYXNlOldEdCxlYXNlVmFyeWluZzpYRHQsZW5kOkVJdCxbU3ltYm9sLml0ZXJhdG9yXTptN1tTeW1ib2wuaXRlcmF0b3JdfTtmdW5jdGlvbiBDSXQoaSl7cmV0dXJuKChpKj0yKTw9MT9pKmkqaTooaS09MikqaSppKzIpLzJ9dmFyIFNJdD17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6Q0l0fTtmdW5jdGlvbiBfSXQoaSxzKXtmb3IodmFyIHU7ISh1PWkuX190cmFuc2l0aW9uKXx8ISh1PXVbc10pOylpZighKGk9aS5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtzfSBub3QgZm91bmRgKTtyZXR1cm4gdX1mdW5jdGlvbiBBSXQoaSl7dmFyIHMsdTtpIGluc3RhbmNlb2YgYjc/KHM9aS5faWQsaT1pLl9uYW1lKToocz1hRmUoKSwodT1TSXQpLnRpbWU9T3BlKCksaT1pPT1udWxsP251bGw6aSsiIik7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxwPWQubGVuZ3RoLHY9MDt2PHA7Kyt2KWZvcih2YXIgYj1kW3ZdLHk9Yi5sZW5ndGgsVCxfPTA7Xzx5OysrXykoVD1iW19dKSYmWlkoVCxpLHMsXyxiLHV8fF9JdChULHMpKTtyZXR1cm4gbmV3IGI3KGQsdGhpcy5fcGFyZW50cyxpLHMpfXZGLnByb3RvdHlwZS5pbnRlcnJ1cHQ9Q0R0LHZGLnByb3RvdHlwZS50cmFuc2l0aW9uPUFJdDtjb25zdCBqcGU9TWF0aC5QSSwkcGU9MipqcGUsbUM9MWUtNixMSXQ9JHBlLW1DO2Z1bmN0aW9uIG9GZShpKXt0aGlzLl8rPWlbMF07Zm9yKGxldCBzPTEsdT1pLmxlbmd0aDtzPHU7KytzKXRoaXMuXys9YXJndW1lbnRzW3NdK2lbc119ZnVuY3Rpb24gTUl0KGkpe2xldCBzPU1hdGguZmxvb3IoaSk7aWYoIShzPj0wKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2l9YCk7aWYocz4xNSlyZXR1cm4gb0ZlO2NvbnN0IHU9MTAqKnM7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuXys9ZFswXTtmb3IobGV0IHA9MSx2PWQubGVuZ3RoO3A8djsrK3ApdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1twXSp1KS91K2RbcF19fWxldCBESXQ9Y2xhc3N7Y29uc3RydWN0b3Iocyl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiIsdGhpcy5fYXBwZW5kPXM9PW51bGw/b0ZlOk1JdChzKX1tb3ZlVG8ocyx1KXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K3N9LCR7dGhpcy5feTA9dGhpcy5feTE9K3V9YH1jbG9zZVBhdGgoKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyhzLHUpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rc30sJHt0aGlzLl95MT0rdX1gfXF1YWRyYXRpY0N1cnZlVG8ocyx1LGQscCl7dGhpcy5fYXBwZW5kYFEkeytzfSwkeyt1fSwke3RoaXMuX3gxPStkfSwke3RoaXMuX3kxPStwfWB9YmV6aWVyQ3VydmVUbyhzLHUsZCxwLHYsYil7dGhpcy5fYXBwZW5kYEMkeytzfSwkeyt1fSwkeytkfSwkeytwfSwke3RoaXMuX3gxPSt2fSwke3RoaXMuX3kxPStifWB9YXJjVG8ocyx1LGQscCx2KXtpZihzPStzLHU9K3UsZD0rZCxwPStwLHY9K3YsdjwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke3Z9YCk7bGV0IGI9dGhpcy5feDEseT10aGlzLl95MSxUPWQtcyxfPXAtdSxBPWItcyxQPXktdSxSPUEqQStQKlA7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuX2FwcGVuZGBNJHt0aGlzLl94MT1zfSwke3RoaXMuX3kxPXV9YDtlbHNlIGlmKFI+bUMpaWYoIShNYXRoLmFicyhQKlQtXypBKT5tQyl8fCF2KXRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT1zfSwke3RoaXMuX3kxPXV9YDtlbHNle2xldCBGPWQtYixqPXAteSxLPVQqVCtfKl8sZWU9RipGK2oqaixpZT1NYXRoLnNxcnQoSyksb2U9TWF0aC5zcXJ0KFIpLHBlPXYqTWF0aC50YW4oKGpwZS1NYXRoLmFjb3MoKEsrUi1lZSkvKDIqaWUqb2UpKSkvMiksYmU9cGUvb2UsYWU9cGUvaWU7TWF0aC5hYnMoYmUtMSk+bUMmJnRoaXMuX2FwcGVuZGBMJHtzK2JlKkF9LCR7dStiZSpQfWAsdGhpcy5fYXBwZW5kYEEke3Z9LCR7dn0sMCwwLCR7KyhQKkY+QSpqKX0sJHt0aGlzLl94MT1zK2FlKlR9LCR7dGhpcy5feTE9dSthZSpffWB9fWFyYyhzLHUsZCxwLHYsYil7aWYocz0rcyx1PSt1LGQ9K2QsYj0hIWIsZDwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2R9YCk7bGV0IHk9ZCpNYXRoLmNvcyhwKSxUPWQqTWF0aC5zaW4ocCksXz1zK3ksQT11K1QsUD0xXmIsUj1iP3Atdjp2LXA7dGhpcy5feDE9PT1udWxsP3RoaXMuX2FwcGVuZGBNJHtffSwke0F9YDooTWF0aC5hYnModGhpcy5feDEtXyk+bUN8fE1hdGguYWJzKHRoaXMuX3kxLUEpPm1DKSYmdGhpcy5fYXBwZW5kYEwke199LCR7QX1gLGQmJihSPDAmJihSPVIlJHBlKyRwZSksUj5MSXQ/dGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwxLCR7UH0sJHtzLXl9LCR7dS1UfUEke2R9LCR7ZH0sMCwxLCR7UH0sJHt0aGlzLl94MT1ffSwke3RoaXMuX3kxPUF9YDpSPm1DJiZ0aGlzLl9hcHBlbmRgQSR7ZH0sJHtkfSwwLCR7KyhSPj1qcGUpfSwke1B9LCR7dGhpcy5feDE9cytkKk1hdGguY29zKHYpfSwke3RoaXMuX3kxPXUrZCpNYXRoLnNpbih2KX1gKX1yZWN0KHMsdSxkLHApe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rc30sJHt0aGlzLl95MD10aGlzLl95MT0rdX1oJHtkPStkfXYkeytwfWgkey1kfVpgfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX319O2Z1bmN0aW9uIElJdChpKXtpZighaS5vayl0aHJvdyBuZXcgRXJyb3IoaS5zdGF0dXMrIiAiK2kuc3RhdHVzVGV4dCk7cmV0dXJuIGkudGV4dCgpfWZ1bmN0aW9uIE9JdChpLHMpe3JldHVybiBmZXRjaChpLHMpLnRoZW4oSUl0KX1mdW5jdGlvbiBOSXQoaSl7cmV0dXJuKHMsdSk9Pk9JdChzLHUpLnRoZW4oZD0+bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhkLGkpKX12YXIgUEl0PU5JdCgiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIEJJdChpKXtyZXR1cm4gTWF0aC5hYnMoaT1NYXRoLnJvdW5kKGkpKT49MWUyMT9pLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6aS50b1N0cmluZygxMCl9ZnVuY3Rpb24gZVgoaSxzKXtpZigodT0oaT1zP2kudG9FeHBvbmVudGlhbChzLTEpOmkudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIHUsZD1pLnNsaWNlKDAsdSk7cmV0dXJuW2QubGVuZ3RoPjE/ZFswXStkLnNsaWNlKDIpOmQsK2kuc2xpY2UodSsxKV19ZnVuY3Rpb24gckQoaSl7cmV0dXJuIGk9ZVgoTWF0aC5hYnMoaSkpLGk/aVsxXTpOYU59ZnVuY3Rpb24gRkl0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKHUsZCl7Zm9yKHZhciBwPXUubGVuZ3RoLHY9W10sYj0wLHk9aVswXSxUPTA7cD4wJiZ5PjAmJihUK3krMT5kJiYoeT1NYXRoLm1heCgxLGQtVCkpLHYucHVzaCh1LnN1YnN0cmluZyhwLT15LHAreSkpLCEoKFQrPXkrMSk+ZCkpOyl5PWlbYj0oYisxKSVpLmxlbmd0aF07cmV0dXJuIHYucmV2ZXJzZSgpLmpvaW4ocyl9fWZ1bmN0aW9uIFJJdChpKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbih1KXtyZXR1cm4gaVsrdV19KX19dmFyIGpJdD0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiB0WChpKXtpZighKHM9akl0LmV4ZWMoaSkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIraSk7dmFyIHM7cmV0dXJuIG5ldyB6cGUoe2ZpbGw6c1sxXSxhbGlnbjpzWzJdLHNpZ246c1szXSxzeW1ib2w6c1s0XSx6ZXJvOnNbNV0sd2lkdGg6c1s2XSxjb21tYTpzWzddLHByZWNpc2lvbjpzWzhdJiZzWzhdLnNsaWNlKDEpLHRyaW06c1s5XSx0eXBlOnNbMTBdfSl9dFgucHJvdG90eXBlPXpwZS5wcm90b3R5cGU7ZnVuY3Rpb24genBlKGkpe3RoaXMuZmlsbD1pLmZpbGw9PT12b2lkIDA/IiAiOmkuZmlsbCsiIix0aGlzLmFsaWduPWkuYWxpZ249PT12b2lkIDA/Ij4iOmkuYWxpZ24rIiIsdGhpcy5zaWduPWkuc2lnbj09PXZvaWQgMD8iLSI6aS5zaWduKyIiLHRoaXMuc3ltYm9sPWkuc3ltYm9sPT09dm9pZCAwPyIiOmkuc3ltYm9sKyIiLHRoaXMuemVybz0hIWkuemVybyx0aGlzLndpZHRoPWkud2lkdGg9PT12b2lkIDA/dm9pZCAwOitpLndpZHRoLHRoaXMuY29tbWE9ISFpLmNvbW1hLHRoaXMucHJlY2lzaW9uPWkucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDoraS5wcmVjaXNpb24sdGhpcy50cmltPSEhaS50cmltLHRoaXMudHlwZT1pLnR5cGU9PT12b2lkIDA/IiI6aS50eXBlKyIifXpwZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiAkSXQoaSl7ZTpmb3IodmFyIHM9aS5sZW5ndGgsdT0xLGQ9LTEscDt1PHM7Kyt1KXN3aXRjaChpW3VdKXtjYXNlIi4iOmQ9cD11O2JyZWFrO2Nhc2UiMCI6ZD09PTAmJihkPXUpLHA9dTticmVhaztkZWZhdWx0OmlmKCEraVt1XSlicmVhayBlO2Q+MCYmKGQ9MCk7YnJlYWt9cmV0dXJuIGQ+MD9pLnNsaWNlKDAsZCkraS5zbGljZShwKzEpOml9dmFyIGNGZTtmdW5jdGlvbiB6SXQoaSxzKXt2YXIgdT1lWChpLHMpO2lmKCF1KXJldHVybiBpKyIiO3ZhciBkPXVbMF0scD11WzFdLHY9cC0oY0ZlPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihwLzMpKSkqMykrMSxiPWQubGVuZ3RoO3JldHVybiB2PT09Yj9kOnY+Yj9kK25ldyBBcnJheSh2LWIrMSkuam9pbigiMCIpOnY+MD9kLnNsaWNlKDAsdikrIi4iK2Quc2xpY2Uodik6IjAuIituZXcgQXJyYXkoMS12KS5qb2luKCIwIikrZVgoaSxNYXRoLm1heCgwLHMrdi0xKSlbMF19ZnVuY3Rpb24gdUZlKGkscyl7dmFyIHU9ZVgoaSxzKTtpZighdSlyZXR1cm4gaSsiIjt2YXIgZD11WzBdLHA9dVsxXTtyZXR1cm4gcDwwPyIwLiIrbmV3IEFycmF5KC1wKS5qb2luKCIwIikrZDpkLmxlbmd0aD5wKzE/ZC5zbGljZSgwLHArMSkrIi4iK2Quc2xpY2UocCsxKTpkK25ldyBBcnJheShwLWQubGVuZ3RoKzIpLmpvaW4oIjAiKX1jb25zdCBsRmU9eyIlIjooaSxzKT0+KGkqMTAwKS50b0ZpeGVkKHMpLGI6aT0+TWF0aC5yb3VuZChpKS50b1N0cmluZygyKSxjOmk9PmkrIiIsZDpCSXQsZTooaSxzKT0+aS50b0V4cG9uZW50aWFsKHMpLGY6KGkscyk9PmkudG9GaXhlZChzKSxnOihpLHMpPT5pLnRvUHJlY2lzaW9uKHMpLG86aT0+TWF0aC5yb3VuZChpKS50b1N0cmluZyg4KSxwOihpLHMpPT51RmUoaSoxMDAscykscjp1RmUsczp6SXQsWDppPT5NYXRoLnJvdW5kKGkpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHg6aT0+TWF0aC5yb3VuZChpKS50b1N0cmluZygxNil9O2Z1bmN0aW9uIGhGZShpKXtyZXR1cm4gaX12YXIgZkZlPUFycmF5LnByb3RvdHlwZS5tYXAsZEZlPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiBxSXQoaSl7dmFyIHM9aS5ncm91cGluZz09PXZvaWQgMHx8aS50aG91c2FuZHM9PT12b2lkIDA/aEZlOkZJdChmRmUuY2FsbChpLmdyb3VwaW5nLE51bWJlciksaS50aG91c2FuZHMrIiIpLHU9aS5jdXJyZW5jeT09PXZvaWQgMD8iIjppLmN1cnJlbmN5WzBdKyIiLGQ9aS5jdXJyZW5jeT09PXZvaWQgMD8iIjppLmN1cnJlbmN5WzFdKyIiLHA9aS5kZWNpbWFsPT09dm9pZCAwPyIuIjppLmRlY2ltYWwrIiIsdj1pLm51bWVyYWxzPT09dm9pZCAwP2hGZTpSSXQoZkZlLmNhbGwoaS5udW1lcmFscyxTdHJpbmcpKSxiPWkucGVyY2VudD09PXZvaWQgMD8iJSI6aS5wZXJjZW50KyIiLHk9aS5taW51cz09PXZvaWQgMD8i4oiSIjppLm1pbnVzKyIiLFQ9aS5uYW49PT12b2lkIDA/Ik5hTiI6aS5uYW4rIiI7ZnVuY3Rpb24gXyhQKXtQPXRYKFApO3ZhciBSPVAuZmlsbCxGPVAuYWxpZ24saj1QLnNpZ24sSz1QLnN5bWJvbCxlZT1QLnplcm8saWU9UC53aWR0aCxvZT1QLmNvbW1hLHBlPVAucHJlY2lzaW9uLGJlPVAudHJpbSxhZT1QLnR5cGU7YWU9PT0ibiI/KG9lPSEwLGFlPSJnIik6bEZlW2FlXXx8KHBlPT09dm9pZCAwJiYocGU9MTIpLGJlPSEwLGFlPSJnIiksKGVlfHxSPT09IjAiJiZGPT09Ij0iKSYmKGVlPSEwLFI9IjAiLEY9Ij0iKTt2YXIgbmU9Sz09PSIkIj91Oks9PT0iIyImJi9bYm94WF0vLnRlc3QoYWUpPyIwIithZS50b0xvd2VyQ2FzZSgpOiIiLHNlPUs9PT0iJCI/ZDovWyVwXS8udGVzdChhZSk/YjoiIixkZT1sRmVbYWVdLFg9L1tkZWZncHJzJV0vLnRlc3QoYWUpO3BlPXBlPT09dm9pZCAwPzY6L1tncHJzXS8udGVzdChhZSk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxwZSkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAscGUpKTtmdW5jdGlvbiBnZShXKXt2YXIgeGU9bmUsVT1zZSxGZSxQZSxqZTtpZihhZT09PSJjIilVPWRlKFcpK1UsVz0iIjtlbHNle1c9K1c7dmFyIEllPVc8MHx8MS9XPDA7aWYoVz1pc05hTihXKT9UOmRlKE1hdGguYWJzKFcpLHBlKSxiZSYmKFc9JEl0KFcpKSxJZSYmK1c9PTAmJmohPT0iKyImJihJZT0hMSkseGU9KEllP2o9PT0iKCI/ajp5Omo9PT0iLSJ8fGo9PT0iKCI/IiI6aikreGUsVT0oYWU9PT0icyI/ZEZlWzgrY0ZlLzNdOiIiKStVKyhJZSYmaj09PSIoIj8iKSI6IiIpLFgpe2ZvcihGZT0tMSxQZT1XLmxlbmd0aDsrK0ZlPFBlOylpZihqZT1XLmNoYXJDb2RlQXQoRmUpLDQ4PmplfHxqZT41Nyl7VT0oamU9PT00Nj9wK1cuc2xpY2UoRmUrMSk6Vy5zbGljZShGZSkpK1UsVz1XLnNsaWNlKDAsRmUpO2JyZWFrfX19b2UmJiFlZSYmKFc9cyhXLDEvMCkpO3ZhciBTZT14ZS5sZW5ndGgrVy5sZW5ndGgrVS5sZW5ndGgsQ2U9U2U8aWU/bmV3IEFycmF5KGllLVNlKzEpLmpvaW4oUik6IiI7c3dpdGNoKG9lJiZlZSYmKFc9cyhDZStXLENlLmxlbmd0aD9pZS1VLmxlbmd0aDoxLzApLENlPSIiKSxGKXtjYXNlIjwiOlc9eGUrVytVK0NlO2JyZWFrO2Nhc2UiPSI6Vz14ZStDZStXK1U7YnJlYWs7Y2FzZSJeIjpXPUNlLnNsaWNlKDAsU2U9Q2UubGVuZ3RoPj4xKSt4ZStXK1UrQ2Uuc2xpY2UoU2UpO2JyZWFrO2RlZmF1bHQ6Vz1DZSt4ZStXK1U7YnJlYWt9cmV0dXJuIHYoVyl9cmV0dXJuIGdlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFArIiJ9LGdlfWZ1bmN0aW9uIEEoUCxSKXt2YXIgRj1fKChQPXRYKFApLFAudHlwZT0iZiIsUCkpLGo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJEKFIpLzMpKSkqMyxLPU1hdGgucG93KDEwLC1qKSxlZT1kRmVbOCtqLzNdO3JldHVybiBmdW5jdGlvbihpZSl7cmV0dXJuIEYoSyppZSkrZWV9fXJldHVybntmb3JtYXQ6Xyxmb3JtYXRQcmVmaXg6QX19dmFyIG5YLGdGZSxwRmU7SEl0KHt0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pO2Z1bmN0aW9uIEhJdChpKXtyZXR1cm4gblg9cUl0KGkpLGdGZT1uWC5mb3JtYXQscEZlPW5YLmZvcm1hdFByZWZpeCxuWH1mdW5jdGlvbiBWSXQoaSl7cmV0dXJuIE1hdGgubWF4KDAsLXJEKE1hdGguYWJzKGkpKSl9ZnVuY3Rpb24gVUl0KGkscyl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJEKHMpLzMpKSkqMy1yRChNYXRoLmFicyhpKSkpfWZ1bmN0aW9uIEdJdChpLHMpe3JldHVybiBpPU1hdGguYWJzKGkpLHM9TWF0aC5hYnMocyktaSxNYXRoLm1heCgwLHJEKHMpLXJEKGkpKSsxfWZ1bmN0aW9uIHJYKGkscyl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShpKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UocykuZG9tYWluKGkpO2JyZWFrfXJldHVybiB0aGlzfWNvbnN0IGJGZT1TeW1ib2woImltcGxpY2l0Iik7ZnVuY3Rpb24gX0YoKXt2YXIgaT1uZXcgY0JlLHM9W10sdT1bXSxkPWJGZTtmdW5jdGlvbiBwKHYpe2xldCBiPWkuZ2V0KHYpO2lmKGI9PT12b2lkIDApe2lmKGQhPT1iRmUpcmV0dXJuIGQ7aS5zZXQodixiPXMucHVzaCh2KS0xKX1yZXR1cm4gdVtiJXUubGVuZ3RoXX1yZXR1cm4gcC5kb21haW49ZnVuY3Rpb24odil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHMuc2xpY2UoKTtzPVtdLGk9bmV3IGNCZTtmb3IoY29uc3QgYiBvZiB2KWkuaGFzKGIpfHxpLnNldChiLHMucHVzaChiKS0xKTtyZXR1cm4gcH0scC5yYW5nZT1mdW5jdGlvbih2KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1BcnJheS5mcm9tKHYpLHApOnUuc2xpY2UoKX0scC51bmtub3duPWZ1bmN0aW9uKHYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXYscCk6ZH0scC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIF9GKHMsdSkudW5rbm93bihkKX0sclguYXBwbHkocCxhcmd1bWVudHMpLHB9ZnVuY3Rpb24gcXBlKCl7dmFyIGk9X0YoKS51bmtub3duKHZvaWQgMCkscz1pLmRvbWFpbix1PWkucmFuZ2UsZD0wLHA9MSx2LGIseT0hMSxUPTAsXz0wLEE9LjU7ZGVsZXRlIGkudW5rbm93bjtmdW5jdGlvbiBQKCl7dmFyIFI9cygpLmxlbmd0aCxGPXA8ZCxqPUY/cDpkLEs9Rj9kOnA7dj0oSy1qKS9NYXRoLm1heCgxLFItVCtfKjIpLHkmJih2PU1hdGguZmxvb3IodikpLGorPShLLWotdiooUi1UKSkqQSxiPXYqKDEtVCkseSYmKGo9TWF0aC5yb3VuZChqKSxiPU1hdGgucm91bmQoYikpO3ZhciBlZT1ZQXQoUikubWFwKGZ1bmN0aW9uKGllKXtyZXR1cm4gait2KmllfSk7cmV0dXJuIHUoRj9lZS5yZXZlcnNlKCk6ZWUpfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyhSKSxQKCkpOnMoKX0saS5yYW5nZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oW2QscF09UixkPStkLHA9K3AsUCgpKTpbZCxwXX0saS5yYW5nZVJvdW5kPWZ1bmN0aW9uKFIpe3JldHVybltkLHBdPVIsZD0rZCxwPStwLHk9ITAsUCgpfSxpLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBifSxpLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdn0saS5yb3VuZD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0hIVIsUCgpKTp5fSxpLnBhZGRpbmc9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9TWF0aC5taW4oMSxfPStSKSxQKCkpOlR9LGkucGFkZGluZ0lubmVyPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPU1hdGgubWluKDEsUiksUCgpKTpUfSxpLnBhZGRpbmdPdXRlcj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rUixQKCkpOl99LGkuYWxpZ249ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9TWF0aC5tYXgoMCxNYXRoLm1pbigxLFIpKSxQKCkpOkF9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBxcGUocygpLFtkLHBdKS5yb3VuZCh5KS5wYWRkaW5nSW5uZXIoVCkucGFkZGluZ091dGVyKF8pLmFsaWduKEEpfSxyWC5hcHBseShQKCksYXJndW1lbnRzKX1mdW5jdGlvbiBLSXQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIFdJdChpKXtyZXR1cm4raX12YXIgbUZlPVswLDFdO2Z1bmN0aW9uIGlEKGkpe3JldHVybiBpfWZ1bmN0aW9uIEhwZShpLHMpe3JldHVybihzLT1pPStpKT9mdW5jdGlvbih1KXtyZXR1cm4odS1pKS9zfTpLSXQoaXNOYU4ocyk/TmFOOi41KX1mdW5jdGlvbiBZSXQoaSxzKXt2YXIgdTtyZXR1cm4gaT5zJiYodT1pLGk9cyxzPXUpLGZ1bmN0aW9uKGQpe3JldHVybiBNYXRoLm1heChpLE1hdGgubWluKHMsZCkpfX1mdW5jdGlvbiBYSXQoaSxzLHUpe3ZhciBkPWlbMF0scD1pWzFdLHY9c1swXSxiPXNbMV07cmV0dXJuIHA8ZD8oZD1IcGUocCxkKSx2PXUoYix2KSk6KGQ9SHBlKGQscCksdj11KHYsYikpLGZ1bmN0aW9uKHkpe3JldHVybiB2KGQoeSkpfX1mdW5jdGlvbiBRSXQoaSxzLHUpe3ZhciBkPU1hdGgubWluKGkubGVuZ3RoLHMubGVuZ3RoKS0xLHA9bmV3IEFycmF5KGQpLHY9bmV3IEFycmF5KGQpLGI9LTE7Zm9yKGlbZF08aVswXSYmKGk9aS5zbGljZSgpLnJldmVyc2UoKSxzPXMuc2xpY2UoKS5yZXZlcnNlKCkpOysrYjxkOylwW2JdPUhwZShpW2JdLGlbYisxXSksdltiXT11KHNbYl0sc1tiKzFdKTtyZXR1cm4gZnVuY3Rpb24oeSl7dmFyIFQ9akF0KGkseSwxLGQpLTE7cmV0dXJuIHZbVF0ocFtUXSh5KSl9fWZ1bmN0aW9uIHZGZShpLHMpe3JldHVybiBzLmRvbWFpbihpLmRvbWFpbigpKS5yYW5nZShpLnJhbmdlKCkpLmludGVycG9sYXRlKGkuaW50ZXJwb2xhdGUoKSkuY2xhbXAoaS5jbGFtcCgpKS51bmtub3duKGkudW5rbm93bigpKX1mdW5jdGlvbiBKSXQoKXt2YXIgaT1tRmUscz1tRmUsdT1EcGUsZCxwLHYsYj1pRCx5LFQsXztmdW5jdGlvbiBBKCl7dmFyIFI9TWF0aC5taW4oaS5sZW5ndGgscy5sZW5ndGgpO3JldHVybiBiIT09aUQmJihiPVlJdChpWzBdLGlbUi0xXSkpLHk9Uj4yP1FJdDpYSXQsVD1fPW51bGwsUH1mdW5jdGlvbiBQKFIpe3JldHVybiBSPT1udWxsfHxpc05hTihSPStSKT92OihUfHwoVD15KGkubWFwKGQpLHMsdSkpKShkKGIoUikpKX1yZXR1cm4gUC5pbnZlcnQ9ZnVuY3Rpb24oUil7cmV0dXJuIGIocCgoX3x8KF89eShzLGkubWFwKGQpLEwzKSkpKFIpKSl9LFAuZG9tYWluPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPUFycmF5LmZyb20oUixXSXQpLEEoKSk6aS5zbGljZSgpfSxQLnJhbmdlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPUFycmF5LmZyb20oUiksQSgpKTpzLnNsaWNlKCl9LFAucmFuZ2VSb3VuZD1mdW5jdGlvbihSKXtyZXR1cm4gcz1BcnJheS5mcm9tKFIpLHU9bER0LEEoKX0sUC5jbGFtcD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj1SPyEwOmlELEEoKSk6YiE9PWlEfSxQLmludGVycG9sYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PVIsQSgpKTp1fSxQLnVua25vd249ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9UixQKTp2fSxmdW5jdGlvbihSLEYpe3JldHVybiBkPVIscD1GLEEoKX19ZnVuY3Rpb24gd0ZlKCl7cmV0dXJuIEpJdCgpKGlELGlEKX1mdW5jdGlvbiBaSXQoaSxzLHUsZCl7dmFyIHA9cHBlKGkscyx1KSx2O3N3aXRjaChkPXRYKGQ/PyIsZiIpLGQudHlwZSl7Y2FzZSJzIjp7dmFyIGI9TWF0aC5tYXgoTWF0aC5hYnMoaSksTWF0aC5hYnMocykpO3JldHVybiBkLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKHY9VUl0KHAsYikpJiYoZC5wcmVjaXNpb249dikscEZlKGQsYil9Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6e2QucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4odj1HSXQocCxNYXRoLm1heChNYXRoLmFicyhpKSxNYXRoLmFicyhzKSkpKSYmKGQucHJlY2lzaW9uPXYtKGQudHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7ZC5wcmVjaXNpb249PW51bGwmJiFpc05hTih2PVZJdChwKSkmJihkLnByZWNpc2lvbj12LShkLnR5cGU9PT0iJSIpKjIpO2JyZWFrfX1yZXR1cm4gZ0ZlKGQpfWZ1bmN0aW9uIGVPdChpKXt2YXIgcz1pLmRvbWFpbjtyZXR1cm4gaS50aWNrcz1mdW5jdGlvbih1KXt2YXIgZD1zKCk7cmV0dXJuIEdBdChkWzBdLGRbZC5sZW5ndGgtMV0sdT8/MTApfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odSxkKXt2YXIgcD1zKCk7cmV0dXJuIFpJdChwWzBdLHBbcC5sZW5ndGgtMV0sdT8/MTAsZCl9LGkubmljZT1mdW5jdGlvbih1KXt1PT1udWxsJiYodT0xMCk7dmFyIGQ9cygpLHA9MCx2PWQubGVuZ3RoLTEsYj1kW3BdLHk9ZFt2XSxULF8sQT0xMDtmb3IoeTxiJiYoXz1iLGI9eSx5PV8sXz1wLHA9dix2PV8pO0EtLSA+MDspe2lmKF89Z3BlKGIseSx1KSxfPT09VClyZXR1cm4gZFtwXT1iLGRbdl09eSxzKGQpO2lmKF8+MCliPU1hdGguZmxvb3IoYi9fKSpfLHk9TWF0aC5jZWlsKHkvXykqXztlbHNlIGlmKF88MCliPU1hdGguY2VpbChiKl8pL18seT1NYXRoLmZsb29yKHkqXykvXztlbHNlIGJyZWFrO1Q9X31yZXR1cm4gaX0saX1mdW5jdGlvbiBzRCgpe3ZhciBpPXdGZSgpO3JldHVybiBpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdkZlKGksc0QoKSl9LHJYLmFwcGx5KGksYXJndW1lbnRzKSxlT3QoaSl9ZnVuY3Rpb24gdE90KGkscyl7aT1pLnNsaWNlKCk7dmFyIHU9MCxkPWkubGVuZ3RoLTEscD1pW3VdLHY9aVtkXSxiO3JldHVybiB2PHAmJihiPXUsdT1kLGQ9YixiPXAscD12LHY9YiksaVt1XT1zLmZsb29yKHApLGlbZF09cy5jZWlsKHYpLGl9Y29uc3QgVnBlPW5ldyBEYXRlLFVwZT1uZXcgRGF0ZTtmdW5jdGlvbiBoMShpLHMsdSxkKXtmdW5jdGlvbiBwKHYpe3JldHVybiBpKHY9YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK3YpKSx2fXJldHVybiBwLmZsb29yPXY9PihpKHY9bmV3IERhdGUoK3YpKSx2KSxwLmNlaWw9dj0+KGkodj1uZXcgRGF0ZSh2LTEpKSxzKHYsMSksaSh2KSx2KSxwLnJvdW5kPXY9Pntjb25zdCBiPXAodikseT1wLmNlaWwodik7cmV0dXJuIHYtYjx5LXY/Yjp5fSxwLm9mZnNldD0odixiKT0+KHModj1uZXcgRGF0ZSgrdiksYj09bnVsbD8xOk1hdGguZmxvb3IoYikpLHYpLHAucmFuZ2U9KHYsYix5KT0+e2NvbnN0IFQ9W107aWYodj1wLmNlaWwodikseT15PT1udWxsPzE6TWF0aC5mbG9vcih5KSwhKHY8Yil8fCEoeT4wKSlyZXR1cm4gVDtsZXQgXztkbyBULnB1c2goXz1uZXcgRGF0ZSgrdikpLHModix5KSxpKHYpO3doaWxlKF88diYmdjxiKTtyZXR1cm4gVH0scC5maWx0ZXI9dj0+aDEoYj0+e2lmKGI+PWIpZm9yKDtpKGIpLCF2KGIpOyliLnNldFRpbWUoYi0xKX0sKGIseSk9PntpZihiPj1iKWlmKHk8MClmb3IoOysreTw9MDspZm9yKDtzKGIsLTEpLCF2KGIpOyk7ZWxzZSBmb3IoOy0teT49MDspZm9yKDtzKGIsMSksIXYoYik7KTt9KSx1JiYocC5jb3VudD0odixiKT0+KFZwZS5zZXRUaW1lKCt2KSxVcGUuc2V0VGltZSgrYiksaShWcGUpLGkoVXBlKSxNYXRoLmZsb29yKHUoVnBlLFVwZSkpKSxwLmV2ZXJ5PXY9Pih2PU1hdGguZmxvb3IodiksIWlzRmluaXRlKHYpfHwhKHY+MCk/bnVsbDp2PjE/cC5maWx0ZXIoZD9iPT5kKGIpJXY9PT0wOmI9PnAuY291bnQoMCxiKSV2PT09MCk6cCkpLHB9Y29uc3QgYUQ9aDEoKCk9Pnt9LChpLHMpPT57aS5zZXRUaW1lKCtpK3MpfSwoaSxzKT0+cy1pKTthRC5ldmVyeT1pPT4oaT1NYXRoLmZsb29yKGkpLCFpc0Zpbml0ZShpKXx8IShpPjApP251bGw6aT4xP2gxKHM9PntzLnNldFRpbWUoTWF0aC5mbG9vcihzL2kpKmkpfSwocyx1KT0+e3Muc2V0VGltZSgrcyt1KmkpfSwocyx1KT0+KHUtcykvaSk6YUQpLGFELnJhbmdlO2NvbnN0IHY3PTFlMyxNdj12Nyo2MCx3Nz1Ndio2MCx5Nz13NyoyNCxHcGU9eTcqNyx5RmU9eTcqMzAsS3BlPXk3KjM2NSxiOT1oMShpPT57aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKSl9LChpLHMpPT57aS5zZXRUaW1lKCtpK3MqdjcpfSwoaSxzKT0+KHMtaSkvdjcsaT0+aS5nZXRVVENTZWNvbmRzKCkpO2I5LnJhbmdlO2NvbnN0IEFGPWgxKGk9PntpLnNldFRpbWUoaS1pLmdldE1pbGxpc2Vjb25kcygpLWkuZ2V0U2Vjb25kcygpKnY3KX0sKGkscyk9PntpLnNldFRpbWUoK2krcypNdil9LChpLHMpPT4ocy1pKS9NdixpPT5pLmdldE1pbnV0ZXMoKSk7QUYucmFuZ2UsaDEoaT0+e2kuc2V0VVRDU2Vjb25kcygwLDApfSwoaSxzKT0+e2kuc2V0VGltZSgraStzKk12KX0sKGkscyk9PihzLWkpL012LGk9PmkuZ2V0VVRDTWludXRlcygpKS5yYW5nZTtjb25zdCBMRj1oMShpPT57aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKS1pLmdldFNlY29uZHMoKSp2Ny1pLmdldE1pbnV0ZXMoKSpNdil9LChpLHMpPT57aS5zZXRUaW1lKCtpK3MqdzcpfSwoaSxzKT0+KHMtaSkvdzcsaT0+aS5nZXRIb3VycygpKTtMRi5yYW5nZSxoMShpPT57aS5zZXRVVENNaW51dGVzKDAsMCwwKX0sKGkscyk9PntpLnNldFRpbWUoK2krcyp3Nyl9LChpLHMpPT4ocy1pKS93NyxpPT5pLmdldFVUQ0hvdXJzKCkpLnJhbmdlO2NvbnN0IHZDPWgxKGk9Pmkuc2V0SG91cnMoMCwwLDAsMCksKGkscyk9Pmkuc2V0RGF0ZShpLmdldERhdGUoKStzKSwoaSxzKT0+KHMtaS0ocy5nZXRUaW1lem9uZU9mZnNldCgpLWkuZ2V0VGltZXpvbmVPZmZzZXQoKSkqTXYpL3k3LGk9PmkuZ2V0RGF0ZSgpLTEpO3ZDLnJhbmdlO2NvbnN0IFdwZT1oMShpPT57aS5zZXRVVENIb3VycygwLDAsMCwwKX0sKGkscyk9PntpLnNldFVUQ0RhdGUoaS5nZXRVVENEYXRlKCkrcyl9LChpLHMpPT4ocy1pKS95NyxpPT5pLmdldFVUQ0RhdGUoKS0xKTtXcGUucmFuZ2UsaDEoaT0+e2kuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChpLHMpPT57aS5zZXRVVENEYXRlKGkuZ2V0VVRDRGF0ZSgpK3MpfSwoaSxzKT0+KHMtaSkveTcsaT0+TWF0aC5mbG9vcihpL3k3KSkucmFuZ2U7ZnVuY3Rpb24gd0MoaSl7cmV0dXJuIGgxKHM9PntzLnNldERhdGUocy5nZXREYXRlKCktKHMuZ2V0RGF5KCkrNy1pKSU3KSxzLnNldEhvdXJzKDAsMCwwLDApfSwocyx1KT0+e3Muc2V0RGF0ZShzLmdldERhdGUoKSt1KjcpfSwocyx1KT0+KHUtcy0odS5nZXRUaW1lem9uZU9mZnNldCgpLXMuZ2V0VGltZXpvbmVPZmZzZXQoKSkqTXYpL0dwZSl9Y29uc3QgTUY9d0MoMCksREY9d0MoMSkseEZlPXdDKDIpLGtGZT13QygzKSx5Qz13Qyg0KSxFRmU9d0MoNSksVEZlPXdDKDYpO01GLnJhbmdlLERGLnJhbmdlLHhGZS5yYW5nZSxrRmUucmFuZ2UseUMucmFuZ2UsRUZlLnJhbmdlLFRGZS5yYW5nZTtmdW5jdGlvbiB4QyhpKXtyZXR1cm4gaDEocz0+e3Muc2V0VVRDRGF0ZShzLmdldFVUQ0RhdGUoKS0ocy5nZXRVVENEYXkoKSs3LWkpJTcpLHMuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChzLHUpPT57cy5zZXRVVENEYXRlKHMuZ2V0VVRDRGF0ZSgpK3UqNyl9LChzLHUpPT4odS1zKS9HcGUpfWNvbnN0IENGZT14QygwKSxpWD14QygxKSxuT3Q9eEMoMiksck90PXhDKDMpLG9EPXhDKDQpLGlPdD14Qyg1KSxzT3Q9eEMoNik7Q0ZlLnJhbmdlLGlYLnJhbmdlLG5PdC5yYW5nZSxyT3QucmFuZ2Usb0QucmFuZ2UsaU90LnJhbmdlLHNPdC5yYW5nZTtjb25zdCBJRj1oMShpPT57aS5zZXREYXRlKDEpLGkuc2V0SG91cnMoMCwwLDAsMCl9LChpLHMpPT57aS5zZXRNb250aChpLmdldE1vbnRoKCkrcyl9LChpLHMpPT5zLmdldE1vbnRoKCktaS5nZXRNb250aCgpKyhzLmdldEZ1bGxZZWFyKCktaS5nZXRGdWxsWWVhcigpKSoxMixpPT5pLmdldE1vbnRoKCkpO0lGLnJhbmdlLGgxKGk9PntpLnNldFVUQ0RhdGUoMSksaS5zZXRVVENIb3VycygwLDAsMCwwKX0sKGkscyk9PntpLnNldFVUQ01vbnRoKGkuZ2V0VVRDTW9udGgoKStzKX0sKGkscyk9PnMuZ2V0VVRDTW9udGgoKS1pLmdldFVUQ01vbnRoKCkrKHMuZ2V0VVRDRnVsbFllYXIoKS1pLmdldFVUQ0Z1bGxZZWFyKCkpKjEyLGk9PmkuZ2V0VVRDTW9udGgoKSkucmFuZ2U7Y29uc3QgeDc9aDEoaT0+e2kuc2V0TW9udGgoMCwxKSxpLnNldEhvdXJzKDAsMCwwLDApfSwoaSxzKT0+e2kuc2V0RnVsbFllYXIoaS5nZXRGdWxsWWVhcigpK3MpfSwoaSxzKT0+cy5nZXRGdWxsWWVhcigpLWkuZ2V0RnVsbFllYXIoKSxpPT5pLmdldEZ1bGxZZWFyKCkpO3g3LmV2ZXJ5PWk9PiFpc0Zpbml0ZShpPU1hdGguZmxvb3IoaSkpfHwhKGk+MCk/bnVsbDpoMShzPT57cy5zZXRGdWxsWWVhcihNYXRoLmZsb29yKHMuZ2V0RnVsbFllYXIoKS9pKSppKSxzLnNldE1vbnRoKDAsMSkscy5zZXRIb3VycygwLDAsMCwwKX0sKHMsdSk9PntzLnNldEZ1bGxZZWFyKHMuZ2V0RnVsbFllYXIoKSt1KmkpfSkseDcucmFuZ2U7Y29uc3Qga0M9aDEoaT0+e2kuc2V0VVRDTW9udGgoMCwxKSxpLnNldFVUQ0hvdXJzKDAsMCwwLDApfSwoaSxzKT0+e2kuc2V0VVRDRnVsbFllYXIoaS5nZXRVVENGdWxsWWVhcigpK3MpfSwoaSxzKT0+cy5nZXRVVENGdWxsWWVhcigpLWkuZ2V0VVRDRnVsbFllYXIoKSxpPT5pLmdldFVUQ0Z1bGxZZWFyKCkpO2tDLmV2ZXJ5PWk9PiFpc0Zpbml0ZShpPU1hdGguZmxvb3IoaSkpfHwhKGk+MCk/bnVsbDpoMShzPT57cy5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHMuZ2V0VVRDRnVsbFllYXIoKS9pKSppKSxzLnNldFVUQ01vbnRoKDAsMSkscy5zZXRVVENIb3VycygwLDAsMCwwKX0sKHMsdSk9PntzLnNldFVUQ0Z1bGxZZWFyKHMuZ2V0VVRDRnVsbFllYXIoKSt1KmkpfSksa0MucmFuZ2U7ZnVuY3Rpb24gYU90KGkscyx1LGQscCx2KXtjb25zdCBiPVtbYjksMSx2N10sW2I5LDUsNSp2N10sW2I5LDE1LDE1KnY3XSxbYjksMzAsMzAqdjddLFt2LDEsTXZdLFt2LDUsNSpNdl0sW3YsMTUsMTUqTXZdLFt2LDMwLDMwKk12XSxbcCwxLHc3XSxbcCwzLDMqdzddLFtwLDYsNip3N10sW3AsMTIsMTIqdzddLFtkLDEseTddLFtkLDIsMip5N10sW3UsMSxHcGVdLFtzLDEseUZlXSxbcywzLDMqeUZlXSxbaSwxLEtwZV1dO2Z1bmN0aW9uIHkoXyxBLFApe2NvbnN0IFI9QTxfO1ImJihbXyxBXT1bQSxfXSk7Y29uc3QgRj1QJiZ0eXBlb2YgUC5yYW5nZT09ImZ1bmN0aW9uIj9QOlQoXyxBLFApLGo9Rj9GLnJhbmdlKF8sK0ErMSk6W107cmV0dXJuIFI/ai5yZXZlcnNlKCk6an1mdW5jdGlvbiBUKF8sQSxQKXtjb25zdCBSPU1hdGguYWJzKEEtXykvUCxGPWRwZSgoWywsZWVdKT0+ZWUpLnJpZ2h0KGIsUik7aWYoRj09PWIubGVuZ3RoKXJldHVybiBpLmV2ZXJ5KHBwZShfL0twZSxBL0twZSxQKSk7aWYoRj09PTApcmV0dXJuIGFELmV2ZXJ5KE1hdGgubWF4KHBwZShfLEEsUCksMSkpO2NvbnN0W2osS109YltSL2JbRi0xXVsyXTxiW0ZdWzJdL1I/Ri0xOkZdO3JldHVybiBqLmV2ZXJ5KEspfXJldHVyblt5LFRdfWNvbnN0W29PdCxjT3RdPWFPdCh4NyxJRixNRix2QyxMRixBRik7ZnVuY3Rpb24gWXBlKGkpe2lmKDA8PWkueSYmaS55PDEwMCl7dmFyIHM9bmV3IERhdGUoLTEsaS5tLGkuZCxpLkgsaS5NLGkuUyxpLkwpO3JldHVybiBzLnNldEZ1bGxZZWFyKGkueSksc31yZXR1cm4gbmV3IERhdGUoaS55LGkubSxpLmQsaS5ILGkuTSxpLlMsaS5MKX1mdW5jdGlvbiBYcGUoaSl7aWYoMDw9aS55JiZpLnk8MTAwKXt2YXIgcz1uZXcgRGF0ZShEYXRlLlVUQygtMSxpLm0saS5kLGkuSCxpLk0saS5TLGkuTCkpO3JldHVybiBzLnNldFVUQ0Z1bGxZZWFyKGkueSksc31yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoaS55LGkubSxpLmQsaS5ILGkuTSxpLlMsaS5MKSl9ZnVuY3Rpb24gT0YoaSxzLHUpe3JldHVybnt5OmksbTpzLGQ6dSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIHVPdChpKXt2YXIgcz1pLmRhdGVUaW1lLHU9aS5kYXRlLGQ9aS50aW1lLHA9aS5wZXJpb2RzLHY9aS5kYXlzLGI9aS5zaG9ydERheXMseT1pLm1vbnRocyxUPWkuc2hvcnRNb250aHMsXz1ORihwKSxBPVBGKHApLFA9TkYodiksUj1QRih2KSxGPU5GKGIpLGo9UEYoYiksSz1ORih5KSxlZT1QRih5KSxpZT1ORihUKSxvZT1QRihUKSxwZT17YTpJZSxBOlNlLGI6Q2UsQjprZSxjOm51bGwsZDpERmUsZTpERmUsZjpJT3QsZzpxT3QsRzpWT3QsSDpMT3QsSTpNT3QsajpET3QsTDpJRmUsbTpPT3QsTTpOT3QscDpLZSxxOkZ0LFE6UkZlLHM6akZlLFM6UE90LHU6Qk90LFU6Rk90LFY6Uk90LHc6ak90LFc6JE90LHg6bnVsbCxYOm51bGwseTp6T3QsWTpIT3QsWjpVT3QsIiUiOkZGZX0sYmU9e2E6TmUsQTpnbixiOl90LEI6RXQsYzpudWxsLGQ6TkZlLGU6TkZlLGY6WU90LGc6c050LEc6b050LEg6R090LEk6S090LGo6V090LEw6UEZlLG06WE90LE06UU90LHA6R3QscTpsbixROlJGZSxzOmpGZSxTOkpPdCx1OlpPdCxVOmVOdCxWOnROdCx3Om5OdCxXOnJOdCx4Om51bGwsWDpudWxsLHk6aU50LFk6YU50LFo6Y050LCIlIjpGRmV9LGFlPXthOmdlLEE6VyxiOnhlLEI6VSxjOkZlLGQ6TEZlLGU6TEZlLGY6Q090LGc6QUZlLEc6X0ZlLEg6TUZlLEk6TUZlLGo6eE90LEw6VE90LG06eU90LE06a090LHA6WCxxOndPdCxROl9PdCxzOkFPdCxTOkVPdCx1OmdPdCxVOnBPdCxWOmJPdCx3OmRPdCxXOm1PdCx4OlBlLFg6amUseTpBRmUsWTpfRmUsWjp2T3QsIiUiOlNPdH07cGUueD1uZSh1LHBlKSxwZS5YPW5lKGQscGUpLHBlLmM9bmUocyxwZSksYmUueD1uZSh1LGJlKSxiZS5YPW5lKGQsYmUpLGJlLmM9bmUocyxiZSk7ZnVuY3Rpb24gbmUoeHQsUHQpe3JldHVybiBmdW5jdGlvbihRZSl7dmFyIER0PVtdLGt0PS0xLE9uPTAsaHQ9eHQubGVuZ3RoLHpyLHl0LGppO2ZvcihRZSBpbnN0YW5jZW9mIERhdGV8fChRZT1uZXcgRGF0ZSgrUWUpKTsrK2t0PGh0Oyl4dC5jaGFyQ29kZUF0KGt0KT09PTM3JiYoRHQucHVzaCh4dC5zbGljZShPbixrdCkpLCh5dD1TRmVbenI9eHQuY2hhckF0KCsra3QpXSkhPW51bGw/enI9eHQuY2hhckF0KCsra3QpOnl0PXpyPT09ImUiPyIgIjoiMCIsKGppPVB0W3pyXSkmJih6cj1qaShRZSx5dCkpLER0LnB1c2goenIpLE9uPWt0KzEpO3JldHVybiBEdC5wdXNoKHh0LnNsaWNlKE9uLGt0KSksRHQuam9pbigiIil9fWZ1bmN0aW9uIHNlKHh0LFB0KXtyZXR1cm4gZnVuY3Rpb24oUWUpe3ZhciBEdD1PRigxOTAwLHZvaWQgMCwxKSxrdD1kZShEdCx4dCxRZSs9IiIsMCksT24saHQ7aWYoa3QhPVFlLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBEdClyZXR1cm4gbmV3IERhdGUoRHQuUSk7aWYoInMiaW4gRHQpcmV0dXJuIG5ldyBEYXRlKER0LnMqMWUzKygiTCJpbiBEdD9EdC5MOjApKTtpZihQdCYmISgiWiJpbiBEdCkmJihEdC5aPTApLCJwImluIER0JiYoRHQuSD1EdC5IJTEyK0R0LnAqMTIpLER0Lm09PT12b2lkIDAmJihEdC5tPSJxImluIER0P0R0LnE6MCksIlYiaW4gRHQpe2lmKER0LlY8MXx8RHQuVj41MylyZXR1cm4gbnVsbDsidyJpbiBEdHx8KER0Lnc9MSksIloiaW4gRHQ/KE9uPVhwZShPRihEdC55LDAsMSkpLGh0PU9uLmdldFVUQ0RheSgpLE9uPWh0PjR8fGh0PT09MD9pWC5jZWlsKE9uKTppWChPbiksT249V3BlLm9mZnNldChPbiwoRHQuVi0xKSo3KSxEdC55PU9uLmdldFVUQ0Z1bGxZZWFyKCksRHQubT1Pbi5nZXRVVENNb250aCgpLER0LmQ9T24uZ2V0VVRDRGF0ZSgpKyhEdC53KzYpJTcpOihPbj1ZcGUoT0YoRHQueSwwLDEpKSxodD1Pbi5nZXREYXkoKSxPbj1odD40fHxodD09PTA/REYuY2VpbChPbik6REYoT24pLE9uPXZDLm9mZnNldChPbiwoRHQuVi0xKSo3KSxEdC55PU9uLmdldEZ1bGxZZWFyKCksRHQubT1Pbi5nZXRNb250aCgpLER0LmQ9T24uZ2V0RGF0ZSgpKyhEdC53KzYpJTcpfWVsc2UoIlciaW4gRHR8fCJVImluIER0KSYmKCJ3ImluIER0fHwoRHQudz0idSJpbiBEdD9EdC51JTc6IlciaW4gRHQ/MTowKSxodD0iWiJpbiBEdD9YcGUoT0YoRHQueSwwLDEpKS5nZXRVVENEYXkoKTpZcGUoT0YoRHQueSwwLDEpKS5nZXREYXkoKSxEdC5tPTAsRHQuZD0iVyJpbiBEdD8oRHQudys2KSU3K0R0LlcqNy0oaHQrNSklNzpEdC53K0R0LlUqNy0oaHQrNiklNyk7cmV0dXJuIloiaW4gRHQ/KER0LkgrPUR0LlovMTAwfDAsRHQuTSs9RHQuWiUxMDAsWHBlKER0KSk6WXBlKER0KX19ZnVuY3Rpb24gZGUoeHQsUHQsUWUsRHQpe2Zvcih2YXIga3Q9MCxPbj1QdC5sZW5ndGgsaHQ9UWUubGVuZ3RoLHpyLHl0O2t0PE9uOyl7aWYoRHQ+PWh0KXJldHVybi0xO2lmKHpyPVB0LmNoYXJDb2RlQXQoa3QrKyksenI9PT0zNyl7aWYoenI9UHQuY2hhckF0KGt0KyspLHl0PWFlW3pyIGluIFNGZT9QdC5jaGFyQXQoa3QrKyk6enJdLCF5dHx8KER0PXl0KHh0LFFlLER0KSk8MClyZXR1cm4tMX1lbHNlIGlmKHpyIT1RZS5jaGFyQ29kZUF0KER0KyspKXJldHVybi0xfXJldHVybiBEdH1mdW5jdGlvbiBYKHh0LFB0LFFlKXt2YXIgRHQ9Xy5leGVjKFB0LnNsaWNlKFFlKSk7cmV0dXJuIER0Pyh4dC5wPUEuZ2V0KER0WzBdLnRvTG93ZXJDYXNlKCkpLFFlK0R0WzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ2UoeHQsUHQsUWUpe3ZhciBEdD1GLmV4ZWMoUHQuc2xpY2UoUWUpKTtyZXR1cm4gRHQ/KHh0Lnc9ai5nZXQoRHRbMF0udG9Mb3dlckNhc2UoKSksUWUrRHRbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXKHh0LFB0LFFlKXt2YXIgRHQ9UC5leGVjKFB0LnNsaWNlKFFlKSk7cmV0dXJuIER0Pyh4dC53PVIuZ2V0KER0WzBdLnRvTG93ZXJDYXNlKCkpLFFlK0R0WzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geGUoeHQsUHQsUWUpe3ZhciBEdD1pZS5leGVjKFB0LnNsaWNlKFFlKSk7cmV0dXJuIER0Pyh4dC5tPW9lLmdldChEdFswXS50b0xvd2VyQ2FzZSgpKSxRZStEdFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFUoeHQsUHQsUWUpe3ZhciBEdD1LLmV4ZWMoUHQuc2xpY2UoUWUpKTtyZXR1cm4gRHQ/KHh0Lm09ZWUuZ2V0KER0WzBdLnRvTG93ZXJDYXNlKCkpLFFlK0R0WzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRmUoeHQsUHQsUWUpe3JldHVybiBkZSh4dCxzLFB0LFFlKX1mdW5jdGlvbiBQZSh4dCxQdCxRZSl7cmV0dXJuIGRlKHh0LHUsUHQsUWUpfWZ1bmN0aW9uIGplKHh0LFB0LFFlKXtyZXR1cm4gZGUoeHQsZCxQdCxRZSl9ZnVuY3Rpb24gSWUoeHQpe3JldHVybiBiW3h0LmdldERheSgpXX1mdW5jdGlvbiBTZSh4dCl7cmV0dXJuIHZbeHQuZ2V0RGF5KCldfWZ1bmN0aW9uIENlKHh0KXtyZXR1cm4gVFt4dC5nZXRNb250aCgpXX1mdW5jdGlvbiBrZSh4dCl7cmV0dXJuIHlbeHQuZ2V0TW9udGgoKV19ZnVuY3Rpb24gS2UoeHQpe3JldHVybiBwWysoeHQuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBGdCh4dCl7cmV0dXJuIDErfn4oeHQuZ2V0TW9udGgoKS8zKX1mdW5jdGlvbiBOZSh4dCl7cmV0dXJuIGJbeHQuZ2V0VVRDRGF5KCldfWZ1bmN0aW9uIGduKHh0KXtyZXR1cm4gdlt4dC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gX3QoeHQpe3JldHVybiBUW3h0LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEV0KHh0KXtyZXR1cm4geVt4dC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBHdCh4dCl7cmV0dXJuIHBbKyh4dC5nZXRVVENIb3VycygpPj0xMildfWZ1bmN0aW9uIGxuKHh0KXtyZXR1cm4gMSt+fih4dC5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oeHQpe3ZhciBQdD1uZSh4dCs9IiIscGUpO3JldHVybiBQdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB4dH0sUHR9LHBhcnNlOmZ1bmN0aW9uKHh0KXt2YXIgUHQ9c2UoeHQrPSIiLCExKTtyZXR1cm4gUHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4geHR9LFB0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oeHQpe3ZhciBQdD1uZSh4dCs9IiIsYmUpO3JldHVybiBQdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB4dH0sUHR9LHV0Y1BhcnNlOmZ1bmN0aW9uKHh0KXt2YXIgUHQ9c2UoeHQrPSIiLCEwKTtyZXR1cm4gUHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4geHR9LFB0fX19dmFyIFNGZT17Ii0iOiIiLF86IiAiLDA6IjAifSxyZD0vXlxzKlxkKy8sbE90PS9eJS8saE90PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBtdShpLHMsdSl7dmFyIGQ9aTwwPyItIjoiIixwPShkPy1pOmkpKyIiLHY9cC5sZW5ndGg7cmV0dXJuIGQrKHY8dT9uZXcgQXJyYXkodS12KzEpLmpvaW4ocykrcDpwKX1mdW5jdGlvbiBmT3QoaSl7cmV0dXJuIGkucmVwbGFjZShoT3QsIlxcJCYiKX1mdW5jdGlvbiBORihpKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIraS5tYXAoZk90KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gUEYoaSl7cmV0dXJuIG5ldyBNYXAoaS5tYXAoKHMsdSk9PltzLnRvTG93ZXJDYXNlKCksdV0pKX1mdW5jdGlvbiBkT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMSkpO3JldHVybiBkPyhpLnc9K2RbMF0sdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ090KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzEpKTtyZXR1cm4gZD8oaS51PStkWzBdLHUrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHBPdChpLHMsdSl7dmFyIGQ9cmQuZXhlYyhzLnNsaWNlKHUsdSsyKSk7cmV0dXJuIGQ/KGkuVT0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMikpO3JldHVybiBkPyhpLlY9K2RbMF0sdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbU90KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzIpKTtyZXR1cm4gZD8oaS5XPStkWzBdLHUrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF9GZShpLHMsdSl7dmFyIGQ9cmQuZXhlYyhzLnNsaWNlKHUsdSs0KSk7cmV0dXJuIGQ/KGkueT0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBRmUoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMikpO3JldHVybiBkPyhpLnk9K2RbMF0rKCtkWzBdPjY4PzE5MDA6MmUzKSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2T3QoaSxzLHUpe3ZhciBkPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKHMuc2xpY2UodSx1KzYpKTtyZXR1cm4gZD8oaS5aPWRbMV0/MDotKGRbMl0rKGRbM118fCIwMCIpKSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB3T3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMSkpO3JldHVybiBkPyhpLnE9ZFswXSozLTMsdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geU90KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzIpKTtyZXR1cm4gZD8oaS5tPWRbMF0tMSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMRmUoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMikpO3JldHVybiBkPyhpLmQ9K2RbMF0sdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geE90KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzMpKTtyZXR1cm4gZD8oaS5tPTAsaS5kPStkWzBdLHUrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE1GZShpLHMsdSl7dmFyIGQ9cmQuZXhlYyhzLnNsaWNlKHUsdSsyKSk7cmV0dXJuIGQ/KGkuSD0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMikpO3JldHVybiBkPyhpLk09K2RbMF0sdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRU90KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzIpKTtyZXR1cm4gZD8oaS5TPStkWzBdLHUrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFRPdChpLHMsdSl7dmFyIGQ9cmQuZXhlYyhzLnNsaWNlKHUsdSszKSk7cmV0dXJuIGQ/KGkuTD0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBDT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrNikpO3JldHVybiBkPyhpLkw9TWF0aC5mbG9vcihkWzBdLzFlMyksdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gU090KGkscyx1KXt2YXIgZD1sT3QuZXhlYyhzLnNsaWNlKHUsdSsxKSk7cmV0dXJuIGQ/dStkWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBfT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1KSk7cmV0dXJuIGQ/KGkuUT0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1KSk7cmV0dXJuIGQ/KGkucz0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBERmUoaSxzKXtyZXR1cm4gbXUoaS5nZXREYXRlKCkscywyKX1mdW5jdGlvbiBMT3QoaSxzKXtyZXR1cm4gbXUoaS5nZXRIb3VycygpLHMsMil9ZnVuY3Rpb24gTU90KGkscyl7cmV0dXJuIG11KGkuZ2V0SG91cnMoKSUxMnx8MTIscywyKX1mdW5jdGlvbiBET3QoaSxzKXtyZXR1cm4gbXUoMSt2Qy5jb3VudCh4NyhpKSxpKSxzLDMpfWZ1bmN0aW9uIElGZShpLHMpe3JldHVybiBtdShpLmdldE1pbGxpc2Vjb25kcygpLHMsMyl9ZnVuY3Rpb24gSU90KGkscyl7cmV0dXJuIElGZShpLHMpKyIwMDAifWZ1bmN0aW9uIE9PdChpLHMpe3JldHVybiBtdShpLmdldE1vbnRoKCkrMSxzLDIpfWZ1bmN0aW9uIE5PdChpLHMpe3JldHVybiBtdShpLmdldE1pbnV0ZXMoKSxzLDIpfWZ1bmN0aW9uIFBPdChpLHMpe3JldHVybiBtdShpLmdldFNlY29uZHMoKSxzLDIpfWZ1bmN0aW9uIEJPdChpKXt2YXIgcz1pLmdldERheSgpO3JldHVybiBzPT09MD83OnN9ZnVuY3Rpb24gRk90KGkscyl7cmV0dXJuIG11KE1GLmNvdW50KHg3KGkpLTEsaSkscywyKX1mdW5jdGlvbiBPRmUoaSl7dmFyIHM9aS5nZXREYXkoKTtyZXR1cm4gcz49NHx8cz09PTA/eUMoaSk6eUMuY2VpbChpKX1mdW5jdGlvbiBST3QoaSxzKXtyZXR1cm4gaT1PRmUoaSksbXUoeUMuY291bnQoeDcoaSksaSkrKHg3KGkpLmdldERheSgpPT09NCkscywyKX1mdW5jdGlvbiBqT3QoaSl7cmV0dXJuIGkuZ2V0RGF5KCl9ZnVuY3Rpb24gJE90KGkscyl7cmV0dXJuIG11KERGLmNvdW50KHg3KGkpLTEsaSkscywyKX1mdW5jdGlvbiB6T3QoaSxzKXtyZXR1cm4gbXUoaS5nZXRGdWxsWWVhcigpJTEwMCxzLDIpfWZ1bmN0aW9uIHFPdChpLHMpe3JldHVybiBpPU9GZShpKSxtdShpLmdldEZ1bGxZZWFyKCklMTAwLHMsMil9ZnVuY3Rpb24gSE90KGkscyl7cmV0dXJuIG11KGkuZ2V0RnVsbFllYXIoKSUxZTQscyw0KX1mdW5jdGlvbiBWT3QoaSxzKXt2YXIgdT1pLmdldERheSgpO3JldHVybiBpPXU+PTR8fHU9PT0wP3lDKGkpOnlDLmNlaWwoaSksbXUoaS5nZXRGdWxsWWVhcigpJTFlNCxzLDQpfWZ1bmN0aW9uIFVPdChpKXt2YXIgcz1pLmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKHM+MD8iLSI6KHMqPS0xLCIrIikpK211KHMvNjB8MCwiMCIsMikrbXUocyU2MCwiMCIsMil9ZnVuY3Rpb24gTkZlKGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDRGF0ZSgpLHMsMil9ZnVuY3Rpb24gR090KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDSG91cnMoKSxzLDIpfWZ1bmN0aW9uIEtPdChpLHMpe3JldHVybiBtdShpLmdldFVUQ0hvdXJzKCklMTJ8fDEyLHMsMil9ZnVuY3Rpb24gV090KGkscyl7cmV0dXJuIG11KDErV3BlLmNvdW50KGtDKGkpLGkpLHMsMyl9ZnVuY3Rpb24gUEZlKGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDTWlsbGlzZWNvbmRzKCkscywzKX1mdW5jdGlvbiBZT3QoaSxzKXtyZXR1cm4gUEZlKGkscykrIjAwMCJ9ZnVuY3Rpb24gWE90KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDTW9udGgoKSsxLHMsMil9ZnVuY3Rpb24gUU90KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDTWludXRlcygpLHMsMil9ZnVuY3Rpb24gSk90KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDU2Vjb25kcygpLHMsMil9ZnVuY3Rpb24gWk90KGkpe3ZhciBzPWkuZ2V0VVRDRGF5KCk7cmV0dXJuIHM9PT0wPzc6c31mdW5jdGlvbiBlTnQoaSxzKXtyZXR1cm4gbXUoQ0ZlLmNvdW50KGtDKGkpLTEsaSkscywyKX1mdW5jdGlvbiBCRmUoaSl7dmFyIHM9aS5nZXRVVENEYXkoKTtyZXR1cm4gcz49NHx8cz09PTA/b0QoaSk6b0QuY2VpbChpKX1mdW5jdGlvbiB0TnQoaSxzKXtyZXR1cm4gaT1CRmUoaSksbXUob0QuY291bnQoa0MoaSksaSkrKGtDKGkpLmdldFVUQ0RheSgpPT09NCkscywyKX1mdW5jdGlvbiBuTnQoaSl7cmV0dXJuIGkuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gck50KGkscyl7cmV0dXJuIG11KGlYLmNvdW50KGtDKGkpLTEsaSkscywyKX1mdW5jdGlvbiBpTnQoaSxzKXtyZXR1cm4gbXUoaS5nZXRVVENGdWxsWWVhcigpJTEwMCxzLDIpfWZ1bmN0aW9uIHNOdChpLHMpe3JldHVybiBpPUJGZShpKSxtdShpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHMsMil9ZnVuY3Rpb24gYU50KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDRnVsbFllYXIoKSUxZTQscyw0KX1mdW5jdGlvbiBvTnQoaSxzKXt2YXIgdT1pLmdldFVUQ0RheSgpO3JldHVybiBpPXU+PTR8fHU9PT0wP29EKGkpOm9ELmNlaWwoaSksbXUoaS5nZXRVVENGdWxsWWVhcigpJTFlNCxzLDQpfWZ1bmN0aW9uIGNOdCgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gRkZlKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFJGZShpKXtyZXR1cm4raX1mdW5jdGlvbiBqRmUoaSl7cmV0dXJuIE1hdGguZmxvb3IoK2kvMWUzKX12YXIgY0Qsc1g7dU50KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gdU50KGkpe3JldHVybiBjRD11T3QoaSksc1g9Y0QuZm9ybWF0LGNELnBhcnNlLGNELnV0Y0Zvcm1hdCxjRC51dGNQYXJzZSxjRH1mdW5jdGlvbiBsTnQoaSl7cmV0dXJuIG5ldyBEYXRlKGkpfWZ1bmN0aW9uIGhOdChpKXtyZXR1cm4gaSBpbnN0YW5jZW9mIERhdGU/K2k6K25ldyBEYXRlKCtpKX1mdW5jdGlvbiAkRmUoaSxzLHUsZCxwLHYsYix5LFQsXyl7dmFyIEE9d0ZlKCksUD1BLmludmVydCxSPUEuZG9tYWluLEY9XygiLiVMIiksaj1fKCI6JVMiKSxLPV8oIiVJOiVNIiksZWU9XygiJUkgJXAiKSxpZT1fKCIlYSAlZCIpLG9lPV8oIiViICVkIikscGU9XygiJUIiKSxiZT1fKCIlWSIpO2Z1bmN0aW9uIGFlKG5lKXtyZXR1cm4oVChuZSk8bmU/Rjp5KG5lKTxuZT9qOmIobmUpPG5lP0s6dihuZSk8bmU/ZWU6ZChuZSk8bmU/cChuZSk8bmU/aWU6b2U6dShuZSk8bmU/cGU6YmUpKG5lKX1yZXR1cm4gQS5pbnZlcnQ9ZnVuY3Rpb24obmUpe3JldHVybiBuZXcgRGF0ZShQKG5lKSl9LEEuZG9tYWluPWZ1bmN0aW9uKG5lKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9SKEFycmF5LmZyb20obmUsaE50KSk6UigpLm1hcChsTnQpfSxBLnRpY2tzPWZ1bmN0aW9uKG5lKXt2YXIgc2U9UigpO3JldHVybiBpKHNlWzBdLHNlW3NlLmxlbmd0aC0xXSxuZT8/MTApfSxBLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obmUsc2Upe3JldHVybiBzZT09bnVsbD9hZTpfKHNlKX0sQS5uaWNlPWZ1bmN0aW9uKG5lKXt2YXIgc2U9UigpO3JldHVybighbmV8fHR5cGVvZiBuZS5yYW5nZSE9ImZ1bmN0aW9uIikmJihuZT1zKHNlWzBdLHNlW3NlLmxlbmd0aC0xXSxuZT8/MTApKSxuZT9SKHRPdChzZSxuZSkpOkF9LEEuY29weT1mdW5jdGlvbigpe3JldHVybiB2RmUoQSwkRmUoaSxzLHUsZCxwLHYsYix5LFQsXykpfSxBfWZ1bmN0aW9uIGZOdCgpe3JldHVybiByWC5hcHBseSgkRmUob090LGNPdCx4NyxJRixNRix2QyxMRixBRixiOSxzWCkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZE50KGkpe2Zvcih2YXIgcz1pLmxlbmd0aC82fDAsdT1uZXcgQXJyYXkocyksZD0wO2Q8czspdVtkXT0iIyIraS5zbGljZShkKjYsKytkKjYpO3JldHVybiB1fWNvbnN0IHpGZT1kTnQoIjRlNzlhN2YyOGUyY2UxNTc1OTc2YjdiMjU5YTE0ZmVkYzk0OWFmN2FhMWZmOWRhNzljNzU1ZmJhYjBhYiIpO2Z1bmN0aW9uIFdmKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1jb25zdCBxRmU9TWF0aC5hYnMsRGc9TWF0aC5hdGFuMixFQz1NYXRoLmNvcyxnTnQ9TWF0aC5tYXgsUXBlPU1hdGgubWluLHo0PU1hdGguc2luLHVEPU1hdGguc3FydCxJZz0xZS0xMixCRj1NYXRoLlBJLGFYPUJGLzIsb1g9MipCRjtmdW5jdGlvbiBwTnQoaSl7cmV0dXJuIGk+MT8wOmk8LTE/QkY6TWF0aC5hY29zKGkpfWZ1bmN0aW9uIEhGZShpKXtyZXR1cm4gaT49MT9hWDppPD0tMT8tYVg6TWF0aC5hc2luKGkpfWZ1bmN0aW9uIFZGZShpKXtsZXQgcz0zO3JldHVybiBpLmRpZ2l0cz1mdW5jdGlvbih1KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcztpZih1PT1udWxsKXM9bnVsbDtlbHNle2NvbnN0IGQ9TWF0aC5mbG9vcih1KTtpZighKGQ+PTApKXRocm93IG5ldyBSYW5nZUVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHt1fWApO3M9ZH1yZXR1cm4gaX0sKCk9Pm5ldyBESXQocyl9ZnVuY3Rpb24gYk50KGkpe3JldHVybiBpLmlubmVyUmFkaXVzfWZ1bmN0aW9uIG1OdChpKXtyZXR1cm4gaS5vdXRlclJhZGl1c31mdW5jdGlvbiB2TnQoaSl7cmV0dXJuIGkuc3RhcnRBbmdsZX1mdW5jdGlvbiB3TnQoaSl7cmV0dXJuIGkuZW5kQW5nbGV9ZnVuY3Rpb24geU50KGkpe3JldHVybiBpJiZpLnBhZEFuZ2xlfWZ1bmN0aW9uIHhOdChpLHMsdSxkLHAsdixiLHkpe3ZhciBUPXUtaSxfPWQtcyxBPWItcCxQPXktdixSPVAqVC1BKl87aWYoIShSKlI8SWcpKXJldHVybiBSPShBKihzLXYpLVAqKGktcCkpL1IsW2krUipULHMrUipfXX1mdW5jdGlvbiBjWChpLHMsdSxkLHAsdixiKXt2YXIgeT1pLXUsVD1zLWQsXz0oYj92Oi12KS91RCh5KnkrVCpUKSxBPV8qVCxQPS1fKnksUj1pK0EsRj1zK1Asaj11K0EsSz1kK1AsZWU9KFIraikvMixpZT0oRitLKS8yLG9lPWotUixwZT1LLUYsYmU9b2Uqb2UrcGUqcGUsYWU9cC12LG5lPVIqSy1qKkYsc2U9KHBlPDA/LTE6MSkqdUQoZ050KDAsYWUqYWUqYmUtbmUqbmUpKSxkZT0obmUqcGUtb2Uqc2UpL2JlLFg9KC1uZSpvZS1wZSpzZSkvYmUsZ2U9KG5lKnBlK29lKnNlKS9iZSxXPSgtbmUqb2UrcGUqc2UpL2JlLHhlPWRlLWVlLFU9WC1pZSxGZT1nZS1lZSxQZT1XLWllO3JldHVybiB4ZSp4ZStVKlU+RmUqRmUrUGUqUGUmJihkZT1nZSxYPVcpLHtjeDpkZSxjeTpYLHgwMTotQSx5MDE6LVAseDExOmRlKihwL2FlLTEpLHkxMTpYKihwL2FlLTEpfX1mdW5jdGlvbiBsRCgpe3ZhciBpPWJOdCxzPW1OdCx1PVdmKDApLGQ9bnVsbCxwPXZOdCx2PXdOdCxiPXlOdCx5PW51bGwsVD1WRmUoXyk7ZnVuY3Rpb24gXygpe3ZhciBBLFAsUj0raS5hcHBseSh0aGlzLGFyZ3VtZW50cyksRj0rcy5hcHBseSh0aGlzLGFyZ3VtZW50cyksaj1wLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1hWCxLPXYuYXBwbHkodGhpcyxhcmd1bWVudHMpLWFYLGVlPXFGZShLLWopLGllPUs+ajtpZih5fHwoeT1BPVQoKSksRjxSJiYoUD1GLEY9UixSPVApLCEoRj5JZykpeS5tb3ZlVG8oMCwwKTtlbHNlIGlmKGVlPm9YLUlnKXkubW92ZVRvKEYqRUMoaiksRip6NChqKSkseS5hcmMoMCwwLEYsaixLLCFpZSksUj5JZyYmKHkubW92ZVRvKFIqRUMoSyksUip6NChLKSkseS5hcmMoMCwwLFIsSyxqLGllKSk7ZWxzZXt2YXIgb2U9aixwZT1LLGJlPWosYWU9SyxuZT1lZSxzZT1lZSxkZT1iLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLFg9ZGU+SWcmJihkPytkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp1RChSKlIrRipGKSksZ2U9UXBlKHFGZShGLVIpLzIsK3UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxXPWdlLHhlPWdlLFUsRmU7aWYoWD5JZyl7dmFyIFBlPUhGZShYL1IqejQoZGUpKSxqZT1IRmUoWC9GKno0KGRlKSk7KG5lLT1QZSoyKT5JZz8oUGUqPWllPzE6LTEsYmUrPVBlLGFlLT1QZSk6KG5lPTAsYmU9YWU9KGorSykvMiksKHNlLT1qZSoyKT5JZz8oamUqPWllPzE6LTEsb2UrPWplLHBlLT1qZSk6KHNlPTAsb2U9cGU9KGorSykvMil9dmFyIEllPUYqRUMob2UpLFNlPUYqejQob2UpLENlPVIqRUMoYWUpLGtlPVIqejQoYWUpO2lmKGdlPklnKXt2YXIgS2U9RipFQyhwZSksRnQ9Rip6NChwZSksTmU9UipFQyhiZSksZ249Uip6NChiZSksX3Q7aWYoZWU8QkYpaWYoX3Q9eE50KEllLFNlLE5lLGduLEtlLEZ0LENlLGtlKSl7dmFyIEV0PUllLV90WzBdLEd0PVNlLV90WzFdLGxuPUtlLV90WzBdLHh0PUZ0LV90WzFdLFB0PTEvejQocE50KChFdCpsbitHdCp4dCkvKHVEKEV0KkV0K0d0Kkd0KSp1RChsbipsbit4dCp4dCkpKS8yKSxRZT11RChfdFswXSpfdFswXStfdFsxXSpfdFsxXSk7Vz1RcGUoZ2UsKFItUWUpLyhQdC0xKSkseGU9UXBlKGdlLChGLVFlKS8oUHQrMSkpfWVsc2UgVz14ZT0wfXNlPklnP3hlPklnPyhVPWNYKE5lLGduLEllLFNlLEYseGUsaWUpLEZlPWNYKEtlLEZ0LENlLGtlLEYseGUsaWUpLHkubW92ZVRvKFUuY3grVS54MDEsVS5jeStVLnkwMSkseGU8Z2U/eS5hcmMoVS5jeCxVLmN5LHhlLERnKFUueTAxLFUueDAxKSxEZyhGZS55MDEsRmUueDAxKSwhaWUpOih5LmFyYyhVLmN4LFUuY3kseGUsRGcoVS55MDEsVS54MDEpLERnKFUueTExLFUueDExKSwhaWUpLHkuYXJjKDAsMCxGLERnKFUuY3krVS55MTEsVS5jeCtVLngxMSksRGcoRmUuY3krRmUueTExLEZlLmN4K0ZlLngxMSksIWllKSx5LmFyYyhGZS5jeCxGZS5jeSx4ZSxEZyhGZS55MTEsRmUueDExKSxEZyhGZS55MDEsRmUueDAxKSwhaWUpKSk6KHkubW92ZVRvKEllLFNlKSx5LmFyYygwLDAsRixvZSxwZSwhaWUpKTp5Lm1vdmVUbyhJZSxTZSksIShSPklnKXx8IShuZT5JZyk/eS5saW5lVG8oQ2Usa2UpOlc+SWc/KFU9Y1goQ2Usa2UsS2UsRnQsUiwtVyxpZSksRmU9Y1goSWUsU2UsTmUsZ24sUiwtVyxpZSkseS5saW5lVG8oVS5jeCtVLngwMSxVLmN5K1UueTAxKSxXPGdlP3kuYXJjKFUuY3gsVS5jeSxXLERnKFUueTAxLFUueDAxKSxEZyhGZS55MDEsRmUueDAxKSwhaWUpOih5LmFyYyhVLmN4LFUuY3ksVyxEZyhVLnkwMSxVLngwMSksRGcoVS55MTEsVS54MTEpLCFpZSkseS5hcmMoMCwwLFIsRGcoVS5jeStVLnkxMSxVLmN4K1UueDExKSxEZyhGZS5jeStGZS55MTEsRmUuY3grRmUueDExKSxpZSkseS5hcmMoRmUuY3gsRmUuY3ksVyxEZyhGZS55MTEsRmUueDExKSxEZyhGZS55MDEsRmUueDAxKSwhaWUpKSk6eS5hcmMoMCwwLFIsYWUsYmUsaWUpfWlmKHkuY2xvc2VQYXRoKCksQSlyZXR1cm4geT1udWxsLEErIiJ8fG51bGx9cmV0dXJuIF8uY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgQT0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArcy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsUD0oK3AuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArdi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItQkYvMjtyZXR1cm5bRUMoUCkqQSx6NChQKSpBXX0sXy5pbm5lclJhZGl1cz1mdW5jdGlvbihBKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgQT09ImZ1bmN0aW9uIj9BOldmKCtBKSxfKTppfSxfLm91dGVyUmFkaXVzPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXR5cGVvZiBBPT0iZnVuY3Rpb24iP0E6V2YoK0EpLF8pOnN9LF8uY29ybmVyUmFkaXVzPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXR5cGVvZiBBPT0iZnVuY3Rpb24iP0E6V2YoK0EpLF8pOnV9LF8ucGFkUmFkaXVzPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPUE9PW51bGw/bnVsbDp0eXBlb2YgQT09ImZ1bmN0aW9uIj9BOldmKCtBKSxfKTpkfSxfLnN0YXJ0QW5nbGU9ZnVuY3Rpb24oQSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dHlwZW9mIEE9PSJmdW5jdGlvbiI/QTpXZigrQSksXyk6cH0sXy5lbmRBbmdsZT1mdW5jdGlvbihBKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10eXBlb2YgQT09ImZ1bmN0aW9uIj9BOldmKCtBKSxfKTp2fSxfLnBhZEFuZ2xlPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXR5cGVvZiBBPT0iZnVuY3Rpb24iP0E6V2YoK0EpLF8pOmJ9LF8uY29udGV4dD1mdW5jdGlvbihBKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT1BPz9udWxsLF8pOnl9LF99ZnVuY3Rpb24gVUZlKGkpe3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJiJsZW5ndGgiaW4gaT9pOkFycmF5LmZyb20oaSl9ZnVuY3Rpb24gR0ZlKGkpe3RoaXMuX2NvbnRleHQ9aX1HRmUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXtzd2l0Y2goaT0raSxzPStzLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGkscyk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxzKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKGkscyk7YnJlYWt9fX07ZnVuY3Rpb24ga3AoaSl7cmV0dXJuIG5ldyBHRmUoaSl9ZnVuY3Rpb24ga050KGkpe3JldHVybiBpWzBdfWZ1bmN0aW9uIEVOdChpKXtyZXR1cm4gaVsxXX1mdW5jdGlvbiBrNyhpLHMpe3ZhciB1PVdmKCEwKSxkPW51bGwscD1rcCx2PW51bGwsYj1WRmUoeSk7aT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmk9PT12b2lkIDA/a050OldmKGkpLHM9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpzPT09dm9pZCAwP0VOdDpXZihzKTtmdW5jdGlvbiB5KFQpe3ZhciBfLEE9KFQ9VUZlKFQpKS5sZW5ndGgsUCxSPSExLEY7Zm9yKGQ9PW51bGwmJih2PXAoRj1iKCkpKSxfPTA7Xzw9QTsrK18pIShfPEEmJnUoUD1UW19dLF8sVCkpPT09UiYmKChSPSFSKT92LmxpbmVTdGFydCgpOnYubGluZUVuZCgpKSxSJiZ2LnBvaW50KCtpKFAsXyxUKSwrcyhQLF8sVCkpO2lmKEYpcmV0dXJuIHY9bnVsbCxGKyIifHxudWxsfXJldHVybiB5Lng9ZnVuY3Rpb24oVCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIFQ9PSJmdW5jdGlvbiI/VDpXZigrVCkseSk6aX0seS55PWZ1bmN0aW9uKFQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXR5cGVvZiBUPT0iZnVuY3Rpb24iP1Q6V2YoK1QpLHkpOnN9LHkuZGVmaW5lZD1mdW5jdGlvbihUKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10eXBlb2YgVD09ImZ1bmN0aW9uIj9UOldmKCEhVCkseSk6dX0seS5jdXJ2ZT1mdW5jdGlvbihUKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1ULGQhPW51bGwmJih2PXAoZCkpLHkpOnB9LHkuY29udGV4dD1mdW5jdGlvbihUKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD09bnVsbD9kPXY9bnVsbDp2PXAoZD1UKSx5KTpkfSx5fWZ1bmN0aW9uIFROdChpLHMpe3JldHVybiBzPGk/LTE6cz5pPzE6cz49aT8wOk5hTn1mdW5jdGlvbiBDTnQoaSl7cmV0dXJuIGl9ZnVuY3Rpb24gU050KCl7dmFyIGk9Q050LHM9VE50LHU9bnVsbCxkPVdmKDApLHA9V2Yob1gpLHY9V2YoMCk7ZnVuY3Rpb24gYih5KXt2YXIgVCxfPSh5PVVGZSh5KSkubGVuZ3RoLEEsUCxSPTAsRj1uZXcgQXJyYXkoXyksaj1uZXcgQXJyYXkoXyksSz0rZC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZWU9TWF0aC5taW4ob1gsTWF0aC5tYXgoLW9YLHAuYXBwbHkodGhpcyxhcmd1bWVudHMpLUspKSxpZSxvZT1NYXRoLm1pbihNYXRoLmFicyhlZSkvXyx2LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscGU9b2UqKGVlPDA/LTE6MSksYmU7Zm9yKFQ9MDtUPF87KytUKShiZT1qW0ZbVF09VF09K2koeVtUXSxULHkpKT4wJiYoUis9YmUpO2ZvcihzIT1udWxsP0Yuc29ydChmdW5jdGlvbihhZSxuZSl7cmV0dXJuIHMoalthZV0saltuZV0pfSk6dSE9bnVsbCYmRi5zb3J0KGZ1bmN0aW9uKGFlLG5lKXtyZXR1cm4gdSh5W2FlXSx5W25lXSl9KSxUPTAsUD1SPyhlZS1fKnBlKS9SOjA7VDxfOysrVCxLPWllKUE9RltUXSxiZT1qW0FdLGllPUsrKGJlPjA/YmUqUDowKStwZSxqW0FdPXtkYXRhOnlbQV0saW5kZXg6VCx2YWx1ZTpiZSxzdGFydEFuZ2xlOkssZW5kQW5nbGU6aWUscGFkQW5nbGU6b2V9O3JldHVybiBqfXJldHVybiBiLnZhbHVlPWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiB5PT0iZnVuY3Rpb24iP3k6V2YoK3kpLGIpOml9LGIuc29ydFZhbHVlcz1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz15LHU9bnVsbCxiKTpzfSxiLnNvcnQ9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9eSxzPW51bGwsYik6dX0sYi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXR5cGVvZiB5PT0iZnVuY3Rpb24iP3k6V2YoK3kpLGIpOmR9LGIuZW5kQW5nbGU9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpXZigreSksYik6cH0sYi5wYWRBbmdsZT1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10eXBlb2YgeT09ImZ1bmN0aW9uIj95OldmKCt5KSxiKTp2fSxifWNsYXNzIEtGZXtjb25zdHJ1Y3RvcihzLHUpe3RoaXMuX2NvbnRleHQ9cyx0aGlzLl94PXV9YXJlYVN0YXJ0KCl7dGhpcy5fbGluZT0wfWFyZWFFbmQoKXt0aGlzLl9saW5lPU5hTn1saW5lU3RhcnQoKXt0aGlzLl9wb2ludD0wfWxpbmVFbmQoKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9cG9pbnQocyx1KXtzd2l0Y2gocz0rcyx1PSt1LHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhzLHUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHMsdSk7YnJlYWt9Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7dGhpcy5feD90aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDA9KHRoaXMuX3gwK3MpLzIsdGhpcy5feTAsdGhpcy5feDAsdSxzLHUpOnRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MCx0aGlzLl95MD0odGhpcy5feTArdSkvMixzLHRoaXMuX3kwLHMsdSk7YnJlYWt9fXRoaXMuX3gwPXMsdGhpcy5feTA9dX19ZnVuY3Rpb24gX050KGkpe3JldHVybiBuZXcgS0ZlKGksITApfWZ1bmN0aW9uIEFOdChpKXtyZXR1cm4gbmV3IEtGZShpLCExKX1mdW5jdGlvbiBtOSgpe31mdW5jdGlvbiB1WChpLHMsdSl7aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmkuX3gwK2kuX3gxKS8zLCgyKmkuX3kwK2kuX3kxKS8zLChpLl94MCsyKmkuX3gxKS8zLChpLl95MCsyKmkuX3kxKS8zLChpLl94MCs0KmkuX3gxK3MpLzYsKGkuX3kwKzQqaS5feTErdSkvNil9ZnVuY3Rpb24gbFgoaSl7dGhpcy5fY29udGV4dD1pfWxYLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6dVgodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGkscyl7c3dpdGNoKGk9K2kscz0rcyx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhpLHMpOnRoaXMuX2NvbnRleHQubW92ZVRvKGkscyk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6dVgodGhpcyxpLHMpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9c319O2Z1bmN0aW9uIEZGKGkpe3JldHVybiBuZXcgbFgoaSl9ZnVuY3Rpb24gV0ZlKGkpe3RoaXMuX2NvbnRleHQ9aX1XRmUucHJvdG90eXBlPXthcmVhU3RhcnQ6bTksYXJlYUVuZDptOSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGkscyl7c3dpdGNoKGk9K2kscz0rcyx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9aSx0aGlzLl95Mj1zO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWksdGhpcy5feTM9czticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1pLHRoaXMuX3k0PXMsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNiwodGhpcy5feTArNCp0aGlzLl95MStzKS82KTticmVhaztkZWZhdWx0OnVYKHRoaXMsaSxzKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXN9fTtmdW5jdGlvbiBMTnQoaSl7cmV0dXJuIG5ldyBXRmUoaSl9ZnVuY3Rpb24gWUZlKGkpe3RoaXMuX2NvbnRleHQ9aX1ZRmUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGkscyl7c3dpdGNoKGk9K2kscz0rcyx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHU9KHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNixkPSh0aGlzLl95MCs0KnRoaXMuX3kxK3MpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh1LGQpOnRoaXMuX2NvbnRleHQubW92ZVRvKHUsZCk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDp1WCh0aGlzLGkscyk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1zfX07ZnVuY3Rpb24gTU50KGkpe3JldHVybiBuZXcgWUZlKGkpfWZ1bmN0aW9uIFhGZShpLHMpe3RoaXMuX2Jhc2lzPW5ldyBsWChpKSx0aGlzLl9iZXRhPXN9WEZlLnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5feCxzPXRoaXMuX3ksdT1pLmxlbmd0aC0xO2lmKHU+MClmb3IodmFyIGQ9aVswXSxwPXNbMF0sdj1pW3VdLWQsYj1zW3VdLXAseT0tMSxUOysreTw9dTspVD15L3UsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSppW3ldKygxLXRoaXMuX2JldGEpKihkK1QqdiksdGhpcy5fYmV0YSpzW3ldKygxLXRoaXMuX2JldGEpKihwK1QqYikpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXt0aGlzLl94LnB1c2goK2kpLHRoaXMuX3kucHVzaCgrcyl9fTtjb25zdCBETnQ9ZnVuY3Rpb24gaShzKXtmdW5jdGlvbiB1KGQpe3JldHVybiBzPT09MT9uZXcgbFgoZCk6bmV3IFhGZShkLHMpfXJldHVybiB1LmJldGE9ZnVuY3Rpb24oZCl7cmV0dXJuIGkoK2QpfSx1fSguODUpO2Z1bmN0aW9uIGhYKGkscyx1KXtpLl9jb250ZXh0LmJlemllckN1cnZlVG8oaS5feDEraS5fayooaS5feDItaS5feDApLGkuX3kxK2kuX2sqKGkuX3kyLWkuX3kwKSxpLl94MitpLl9rKihpLl94MS1zKSxpLl95MitpLl9rKihpLl95MS11KSxpLl94MixpLl95Mil9ZnVuY3Rpb24gSnBlKGkscyl7dGhpcy5fY29udGV4dD1pLHRoaXMuX2s9KDEtcykvNn1KcGUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOmhYKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXtzd2l0Y2goaT0raSxzPStzLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGkscyk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxzKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT1pLHRoaXMuX3kxPXM7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpoWCh0aGlzLGkscyk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1zfX07Y29uc3QgSU50PWZ1bmN0aW9uIGkocyl7ZnVuY3Rpb24gdShkKXtyZXR1cm4gbmV3IEpwZShkLHMpfXJldHVybiB1LnRlbnNpb249ZnVuY3Rpb24oZCl7cmV0dXJuIGkoK2QpfSx1fSgwKTtmdW5jdGlvbiBacGUoaSxzKXt0aGlzLl9jb250ZXh0PWksdGhpcy5faz0oMS1zKS82fVpwZS5wcm90b3R5cGU9e2FyZWFTdGFydDptOSxhcmVhRW5kOm05LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihpLHMpe3N3aXRjaChpPStpLHM9K3MsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWksdGhpcy5feTM9czticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1pLHRoaXMuX3k0PXMpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWksdGhpcy5feTU9czticmVhaztkZWZhdWx0OmhYKHRoaXMsaSxzKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXN9fTtjb25zdCBPTnQ9ZnVuY3Rpb24gaShzKXtmdW5jdGlvbiB1KGQpe3JldHVybiBuZXcgWnBlKGQscyl9cmV0dXJuIHUudGVuc2lvbj1mdW5jdGlvbihkKXtyZXR1cm4gaSgrZCl9LHV9KDApO2Z1bmN0aW9uIGUyZShpLHMpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9rPSgxLXMpLzZ9ZTJlLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLHMpe3N3aXRjaChpPStpLHM9K3MsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmhYKHRoaXMsaSxzKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXN9fTtjb25zdCBOTnQ9ZnVuY3Rpb24gaShzKXtmdW5jdGlvbiB1KGQpe3JldHVybiBuZXcgZTJlKGQscyl9cmV0dXJuIHUudGVuc2lvbj1mdW5jdGlvbihkKXtyZXR1cm4gaSgrZCl9LHV9KDApO2Z1bmN0aW9uIHQyZShpLHMsdSl7dmFyIGQ9aS5feDEscD1pLl95MSx2PWkuX3gyLGI9aS5feTI7aWYoaS5fbDAxX2E+SWcpe3ZhciB5PTIqaS5fbDAxXzJhKzMqaS5fbDAxX2EqaS5fbDEyX2EraS5fbDEyXzJhLFQ9MyppLl9sMDFfYSooaS5fbDAxX2EraS5fbDEyX2EpO2Q9KGQqeS1pLl94MCppLl9sMTJfMmEraS5feDIqaS5fbDAxXzJhKS9ULHA9KHAqeS1pLl95MCppLl9sMTJfMmEraS5feTIqaS5fbDAxXzJhKS9UfWlmKGkuX2wyM19hPklnKXt2YXIgXz0yKmkuX2wyM18yYSszKmkuX2wyM19hKmkuX2wxMl9hK2kuX2wxMl8yYSxBPTMqaS5fbDIzX2EqKGkuX2wyM19hK2kuX2wxMl9hKTt2PSh2Kl8raS5feDEqaS5fbDIzXzJhLXMqaS5fbDEyXzJhKS9BLGI9KGIqXytpLl95MSppLl9sMjNfMmEtdSppLl9sMTJfMmEpL0F9aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGQscCx2LGIsaS5feDIsaS5feTIpfWZ1bmN0aW9uIFFGZShpLHMpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1zfVFGZS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLHMpe2lmKGk9K2kscz0rcyx0aGlzLl9wb2ludCl7dmFyIHU9dGhpcy5feDItaSxkPXRoaXMuX3kyLXM7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyh1KnUrZCpkLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGkscyk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxzKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OnQyZSh0aGlzLGkscyk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9c319O2NvbnN0IFBOdD1mdW5jdGlvbiBpKHMpe2Z1bmN0aW9uIHUoZCl7cmV0dXJuIHM/bmV3IFFGZShkLHMpOm5ldyBKcGUoZCwwKX1yZXR1cm4gdS5hbHBoYT1mdW5jdGlvbihkKXtyZXR1cm4gaSgrZCl9LHV9KC41KTtmdW5jdGlvbiBKRmUoaSxzKXt0aGlzLl9jb250ZXh0PWksdGhpcy5fYWxwaGE9c31KRmUucHJvdG90eXBlPXthcmVhU3RhcnQ6bTksYXJlYUVuZDptOSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXtpZihpPStpLHM9K3MsdGhpcy5fcG9pbnQpe3ZhciB1PXRoaXMuX3gyLWksZD10aGlzLl95Mi1zO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3codSp1K2QqZCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9aSx0aGlzLl95Mz1zO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PWksdGhpcy5feTQ9cyk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9aSx0aGlzLl95NT1zO2JyZWFrO2RlZmF1bHQ6dDJlKHRoaXMsaSxzKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1zfX07Y29uc3QgQk50PWZ1bmN0aW9uIGkocyl7ZnVuY3Rpb24gdShkKXtyZXR1cm4gcz9uZXcgSkZlKGQscyk6bmV3IFpwZShkLDApfXJldHVybiB1LmFscGhhPWZ1bmN0aW9uKGQpe3JldHVybiBpKCtkKX0sdX0oLjUpO2Z1bmN0aW9uIFpGZShpLHMpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1zfVpGZS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXtpZihpPStpLHM9K3MsdGhpcy5fcG9pbnQpe3ZhciB1PXRoaXMuX3gyLWksZD10aGlzLl95Mi1zO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3codSp1K2QqZCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6dDJlKHRoaXMsaSxzKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1zfX07Y29uc3QgRk50PWZ1bmN0aW9uIGkocyl7ZnVuY3Rpb24gdShkKXtyZXR1cm4gcz9uZXcgWkZlKGQscyk6bmV3IGUyZShkLDApfXJldHVybiB1LmFscGhhPWZ1bmN0aW9uKGQpe3JldHVybiBpKCtkKX0sdX0oLjUpO2Z1bmN0aW9uIGVSZShpKXt0aGlzLl9jb250ZXh0PWl9ZVJlLnByb3RvdHlwZT17YXJlYVN0YXJ0Om05LGFyZWFFbmQ6bTksbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihpLHMpe2k9K2kscz0rcyx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhpLHMpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGkscykpfX07ZnVuY3Rpb24gUk50KGkpe3JldHVybiBuZXcgZVJlKGkpfWZ1bmN0aW9uIHRSZShpKXtyZXR1cm4gaTwwPy0xOjF9ZnVuY3Rpb24gblJlKGkscyx1KXt2YXIgZD1pLl94MS1pLl94MCxwPXMtaS5feDEsdj0oaS5feTEtaS5feTApLyhkfHxwPDAmJi0wKSxiPSh1LWkuX3kxKS8ocHx8ZDwwJiYtMCkseT0odipwK2IqZCkvKGQrcCk7cmV0dXJuKHRSZSh2KSt0UmUoYikpKk1hdGgubWluKE1hdGguYWJzKHYpLE1hdGguYWJzKGIpLC41Kk1hdGguYWJzKHkpKXx8MH1mdW5jdGlvbiByUmUoaSxzKXt2YXIgdT1pLl94MS1pLl94MDtyZXR1cm4gdT8oMyooaS5feTEtaS5feTApL3UtcykvMjpzfWZ1bmN0aW9uIG4yZShpLHMsdSl7dmFyIGQ9aS5feDAscD1pLl95MCx2PWkuX3gxLGI9aS5feTEseT0odi1kKS8zO2kuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhkK3kscCt5KnMsdi15LGIteSp1LHYsYil9ZnVuY3Rpb24gZlgoaSl7dGhpcy5fY29udGV4dD1pfWZYLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpuMmUodGhpcyx0aGlzLl90MCxyUmUodGhpcyx0aGlzLl90MCkpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXt2YXIgdT1OYU47aWYoaT0raSxzPStzLCEoaT09PXRoaXMuX3gxJiZzPT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxzKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLHMpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLG4yZSh0aGlzLHJSZSh0aGlzLHU9blJlKHRoaXMsaSxzKSksdSk7YnJlYWs7ZGVmYXVsdDpuMmUodGhpcyx0aGlzLl90MCx1PW5SZSh0aGlzLGkscykpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9cyx0aGlzLl90MD11fX19O2Z1bmN0aW9uIGlSZShpKXt0aGlzLl9jb250ZXh0PW5ldyBzUmUoaSl9KGlSZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShmWC5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihpLHMpe2ZYLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMscyxpKX07ZnVuY3Rpb24gc1JlKGkpe3RoaXMuX2NvbnRleHQ9aX1zUmUucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24oaSxzKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhzLGkpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24oaSxzKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhzLGkpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGkscyx1LGQscCx2KXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8ocyxpLGQsdSx2LHApfX07ZnVuY3Rpb24gak50KGkpe3JldHVybiBuZXcgZlgoaSl9ZnVuY3Rpb24gJE50KGkpe3JldHVybiBuZXcgaVJlKGkpfWZ1bmN0aW9uIGFSZShpKXt0aGlzLl9jb250ZXh0PWl9YVJlLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBpPXRoaXMuX3gscz10aGlzLl95LHU9aS5sZW5ndGg7aWYodSlpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGlbMF0sc1swXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaVswXSxzWzBdKSx1PT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhpWzFdLHNbMV0pO2Vsc2UgZm9yKHZhciBkPW9SZShpKSxwPW9SZShzKSx2PTAsYj0xO2I8dTsrK3YsKytiKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhkWzBdW3ZdLHBbMF1bdl0sZFsxXVt2XSxwWzFdW3ZdLGlbYl0sc1tiXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ1PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGkscyl7dGhpcy5feC5wdXNoKCtpKSx0aGlzLl95LnB1c2goK3MpfX07ZnVuY3Rpb24gb1JlKGkpe3ZhciBzLHU9aS5sZW5ndGgtMSxkLHA9bmV3IEFycmF5KHUpLHY9bmV3IEFycmF5KHUpLGI9bmV3IEFycmF5KHUpO2ZvcihwWzBdPTAsdlswXT0yLGJbMF09aVswXSsyKmlbMV0scz0xO3M8dS0xOysrcylwW3NdPTEsdltzXT00LGJbc109NCppW3NdKzIqaVtzKzFdO2ZvcihwW3UtMV09Mix2W3UtMV09NyxiW3UtMV09OCppW3UtMV0raVt1XSxzPTE7czx1OysrcylkPXBbc10vdltzLTFdLHZbc10tPWQsYltzXS09ZCpiW3MtMV07Zm9yKHBbdS0xXT1iW3UtMV0vdlt1LTFdLHM9dS0yO3M+PTA7LS1zKXBbc109KGJbc10tcFtzKzFdKS92W3NdO2Zvcih2W3UtMV09KGlbdV0rcFt1LTFdKS8yLHM9MDtzPHUtMTsrK3MpdltzXT0yKmlbcysxXS1wW3MrMV07cmV0dXJuW3Asdl19ZnVuY3Rpb24gek50KGkpe3JldHVybiBuZXcgYVJlKGkpfWZ1bmN0aW9uIGRYKGkscyl7dGhpcy5fY29udGV4dD1pLHRoaXMuX3Q9c31kWC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmdGhpcy5fcG9pbnQ9PT0yJiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbihpLHMpe3N3aXRjaChpPStpLHM9K3MsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxzKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLHMpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6e2lmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxzKSx0aGlzLl9jb250ZXh0LmxpbmVUbyhpLHMpO2Vsc2V7dmFyIHU9dGhpcy5feCooMS10aGlzLl90KStpKnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8odSx0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyh1LHMpfWJyZWFrfX10aGlzLl94PWksdGhpcy5feT1zfX07ZnVuY3Rpb24gcU50KGkpe3JldHVybiBuZXcgZFgoaSwuNSl9ZnVuY3Rpb24gSE50KGkpe3JldHVybiBuZXcgZFgoaSwwKX1mdW5jdGlvbiBWTnQoaSl7cmV0dXJuIG5ldyBkWChpLDEpfWZ1bmN0aW9uIFJGKGkscyx1KXt0aGlzLms9aSx0aGlzLng9cyx0aGlzLnk9dX1SRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJGLHNjYWxlOmZ1bmN0aW9uKGkpe3JldHVybiBpPT09MT90aGlzOm5ldyBSRih0aGlzLmsqaSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGkscyl7cmV0dXJuIGk9PT0wJnM9PT0wP3RoaXM6bmV3IFJGKHRoaXMuayx0aGlzLngrdGhpcy5rKmksdGhpcy55K3RoaXMuaypzKX0sYXBwbHk6ZnVuY3Rpb24oaSl7cmV0dXJuW2lbMF0qdGhpcy5rK3RoaXMueCxpWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oaSl7cmV0dXJuIGkqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGkpe3JldHVybiBpKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihpKXtyZXR1cm5bKGlbMF0tdGhpcy54KS90aGlzLmssKGlbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihpKXtyZXR1cm4gaS5jb3B5KCkuZG9tYWluKGkucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChpLmludmVydCxpKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGkpe3JldHVybiBpLmNvcHkoKS5kb21haW4oaS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGkuaW52ZXJ0LGkpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sUkYucHJvdG90eXBlOy8qISBAbGljZW5zZSBET01QdXJpZnkgMy4wLjkgfCAoYykgQ3VyZTUzIGFuZCBvdGhlciBjb250cmlidXRvcnMgfCBSZWxlYXNlZCB1bmRlciB0aGUgQXBhY2hlIGxpY2Vuc2UgMi4wIGFuZCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDIuMCB8IGdpdGh1Yi5jb20vY3VyZTUzL0RPTVB1cmlmeS9ibG9iLzMuMC45L0xJQ0VOU0UgKi9jb25zdHtlbnRyaWVzOmNSZSxzZXRQcm90b3R5cGVPZjp1UmUsaXNGcm96ZW46VU50LGdldFByb3RvdHlwZU9mOkdOdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6S050fT1PYmplY3Q7bGV0e2ZyZWV6ZTpFcCxzZWFsOkQzLGNyZWF0ZTpsUmV9PU9iamVjdCx7YXBwbHk6cjJlLGNvbnN0cnVjdDppMmV9PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdDtFcHx8KEVwPWZ1bmN0aW9uKHMpe3JldHVybiBzfSksRDN8fChEMz1mdW5jdGlvbihzKXtyZXR1cm4gc30pLHIyZXx8KHIyZT1mdW5jdGlvbihzLHUsZCl7cmV0dXJuIHMuYXBwbHkodSxkKX0pLGkyZXx8KGkyZT1mdW5jdGlvbihzLHUpe3JldHVybiBuZXcgcyguLi51KX0pO2NvbnN0IGdYPXNtKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSxoUmU9c20oQXJyYXkucHJvdG90eXBlLnBvcCksakY9c20oQXJyYXkucHJvdG90eXBlLnB1c2gpLHBYPXNtKFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLHMyZT1zbShTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKSxXTnQ9c20oU3RyaW5nLnByb3RvdHlwZS5tYXRjaCksJEY9c20oU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxZTnQ9c20oU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSxYTnQ9c20oU3RyaW5nLnByb3RvdHlwZS50cmltKSxJMz1zbShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxpbT1zbShSZWdFeHAucHJvdG90eXBlLnRlc3QpLHpGPVFOdChUeXBlRXJyb3IpO2Z1bmN0aW9uIHNtKGkpe3JldHVybiBmdW5jdGlvbihzKXtmb3IodmFyIHU9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheSh1PjE/dS0xOjApLHA9MTtwPHU7cCsrKWRbcC0xXT1hcmd1bWVudHNbcF07cmV0dXJuIHIyZShpLHMsZCl9fWZ1bmN0aW9uIFFOdChpKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCx1PW5ldyBBcnJheShzKSxkPTA7ZDxzO2QrKyl1W2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gaTJlKGksdSl9fWZ1bmN0aW9uIENjKGkscyl7bGV0IHU9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnBYO3VSZSYmdVJlKGksbnVsbCk7bGV0IGQ9cy5sZW5ndGg7Zm9yKDtkLS07KXtsZXQgcD1zW2RdO2lmKHR5cGVvZiBwPT0ic3RyaW5nIil7Y29uc3Qgdj11KHApO3YhPT1wJiYoVU50KHMpfHwoc1tkXT12KSxwPXYpfWlbcF09ITB9cmV0dXJuIGl9ZnVuY3Rpb24gSk50KGkpe2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKUkzKGkscyl8fChpW3NdPW51bGwpO3JldHVybiBpfWZ1bmN0aW9uIFRDKGkpe2NvbnN0IHM9bFJlKG51bGwpO2Zvcihjb25zdFt1LGRdb2YgY1JlKGkpKUkzKGksdSkmJihBcnJheS5pc0FycmF5KGQpP3NbdV09Sk50KGQpOmQmJnR5cGVvZiBkPT0ib2JqZWN0IiYmZC5jb25zdHJ1Y3Rvcj09PU9iamVjdD9zW3VdPVRDKGQpOnNbdV09ZCk7cmV0dXJuIHN9ZnVuY3Rpb24gYlgoaSxzKXtmb3IoO2khPT1udWxsOyl7Y29uc3QgZD1LTnQoaSxzKTtpZihkKXtpZihkLmdldClyZXR1cm4gc20oZC5nZXQpO2lmKHR5cGVvZiBkLnZhbHVlPT0iZnVuY3Rpb24iKXJldHVybiBzbShkLnZhbHVlKX1pPUdOdChpKX1mdW5jdGlvbiB1KCl7cmV0dXJuIG51bGx9cmV0dXJuIHV9Y29uc3QgZlJlPUVwKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxhMmU9RXAoWyJzdmciLCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBoaXRlbSIsImFuaW1hdGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIsImVsbGlwc2UiLCJmaWx0ZXIiLCJmb250IiwiZyIsImdseXBoIiwiZ2x5cGhyZWYiLCJoa2VybiIsImltYWdlIiwibGluZSIsImxpbmVhcmdyYWRpZW50IiwibWFya2VyIiwibWFzayIsIm1ldGFkYXRhIiwibXBhdGgiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIsInN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRpdGxlIiwidHJlZiIsInRzcGFuIiwidmlldyIsInZrZXJuIl0pLG8yZT1FcChbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRHJvcFNoYWRvdyIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxaTnQ9RXAoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLGMyZT1FcChbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIiwibXByZXNjcmlwdHMiXSksZVB0PUVwKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxkUmU9RXAoWyIjdGV4dCJdKSxnUmU9RXAoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwieG1sbnMiLCJzbG90Il0pLHUyZT1FcChbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzcGVjdWxhcmNvbnN0YW50Iiwic3BlY3VsYXJleHBvbmVudCIsInNwcmVhZG1ldGhvZCIsInN0YXJ0b2Zmc2V0Iiwic3RkZGV2aWF0aW9uIiwic3RpdGNodGlsZXMiLCJzdG9wLWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWxpbmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJva2UtbWl0ZXJsaW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlIiwic3Ryb2tlLXdpZHRoIiwic3R5bGUiLCJzdXJmYWNlc2NhbGUiLCJzeXN0ZW1sYW5ndWFnZSIsInRhYmluZGV4IiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLHBSZT1FcChbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxtWD1FcChbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhsaW5rIl0pLHRQdD1EMygvXHtce1tcd1xXXSp8W1x3XFddKlx9XH0vZ20pLG5QdD1EMygvPCVbXHdcV10qfFtcd1xXXSolPi9nbSksclB0PUQzKC9cJHtbXHdcV10qfS9nbSksaVB0PUQzKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXS8pLHNQdD1EMygvXmFyaWEtW1wtXHddKyQvKSxiUmU9RDMoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSksYVB0PUQzKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxvUHQ9RDMoL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksbVJlPUQzKC9eaHRtbCQvaSk7dmFyIHZSZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxNVVNUQUNIRV9FWFBSOnRQdCxFUkJfRVhQUjpuUHQsVE1QTElUX0VYUFI6clB0LERBVEFfQVRUUjppUHQsQVJJQV9BVFRSOnNQdCxJU19BTExPV0VEX1VSSTpiUmUsSVNfU0NSSVBUX09SX0RBVEE6YVB0LEFUVFJfV0hJVEVTUEFDRTpvUHQsRE9DVFlQRV9OQU1FOm1SZX0pO2NvbnN0IGNQdD1mdW5jdGlvbigpe3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvd30sdVB0PWZ1bmN0aW9uKHMsdSl7aWYodHlwZW9mIHMhPSJvYmplY3QifHx0eXBlb2Ygcy5jcmVhdGVQb2xpY3khPSJmdW5jdGlvbiIpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtjb25zdCBwPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO3UmJnUuaGFzQXR0cmlidXRlKHApJiYoZD11LmdldEF0dHJpYnV0ZShwKSk7Y29uc3Qgdj0iZG9tcHVyaWZ5IisoZD8iIyIrZDoiIik7dHJ5e3JldHVybiBzLmNyZWF0ZVBvbGljeSh2LHtjcmVhdGVIVE1MKGIpe3JldHVybiBifSxjcmVhdGVTY3JpcHRVUkwoYil7cmV0dXJuIGJ9fSl9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK3YrIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKSxudWxsfX07ZnVuY3Rpb24gd1JlKCl7bGV0IGk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOmNQdCgpO2NvbnN0IHM9YXM9PndSZShhcyk7aWYocy52ZXJzaW9uPSIzLjAuOSIscy5yZW1vdmVkPVtdLCFpfHwhaS5kb2N1bWVudHx8aS5kb2N1bWVudC5ub2RlVHlwZSE9PTkpcmV0dXJuIHMuaXNTdXBwb3J0ZWQ9ITEscztsZXR7ZG9jdW1lbnQ6dX09aTtjb25zdCBkPXUscD1kLmN1cnJlbnRTY3JpcHQse0RvY3VtZW50RnJhZ21lbnQ6dixIVE1MVGVtcGxhdGVFbGVtZW50OmIsTm9kZTp5LEVsZW1lbnQ6VCxOb2RlRmlsdGVyOl8sTmFtZWROb2RlTWFwOkE9aS5OYW1lZE5vZGVNYXB8fGkuTW96TmFtZWRBdHRyTWFwLEhUTUxGb3JtRWxlbWVudDpQLERPTVBhcnNlcjpSLHRydXN0ZWRUeXBlczpGfT1pLGo9VC5wcm90b3R5cGUsSz1iWChqLCJjbG9uZU5vZGUiKSxlZT1iWChqLCJuZXh0U2libGluZyIpLGllPWJYKGosImNoaWxkTm9kZXMiKSxvZT1iWChqLCJwYXJlbnROb2RlIik7aWYodHlwZW9mIGI9PSJmdW5jdGlvbiIpe2NvbnN0IGFzPXUuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTthcy5jb250ZW50JiZhcy5jb250ZW50Lm93bmVyRG9jdW1lbnQmJih1PWFzLmNvbnRlbnQub3duZXJEb2N1bWVudCl9bGV0IHBlLGJlPSIiO2NvbnN0e2ltcGxlbWVudGF0aW9uOmFlLGNyZWF0ZU5vZGVJdGVyYXRvcjpuZSxjcmVhdGVEb2N1bWVudEZyYWdtZW50OnNlLGdldEVsZW1lbnRzQnlUYWdOYW1lOmRlfT11LHtpbXBvcnROb2RlOlh9PWQ7bGV0IGdlPXt9O3MuaXNTdXBwb3J0ZWQ9dHlwZW9mIGNSZT09ImZ1bmN0aW9uIiYmdHlwZW9mIG9lPT0iZnVuY3Rpb24iJiZhZSYmYWUuY3JlYXRlSFRNTERvY3VtZW50IT09dm9pZCAwO2NvbnN0e01VU1RBQ0hFX0VYUFI6VyxFUkJfRVhQUjp4ZSxUTVBMSVRfRVhQUjpVLERBVEFfQVRUUjpGZSxBUklBX0FUVFI6UGUsSVNfU0NSSVBUX09SX0RBVEE6amUsQVRUUl9XSElURVNQQUNFOkllfT12UmU7bGV0e0lTX0FMTE9XRURfVVJJOlNlfT12UmUsQ2U9bnVsbDtjb25zdCBrZT1DYyh7fSxbLi4uZlJlLC4uLmEyZSwuLi5vMmUsLi4uYzJlLC4uLmRSZV0pO2xldCBLZT1udWxsO2NvbnN0IEZ0PUNjKHt9LFsuLi5nUmUsLi4udTJlLC4uLnBSZSwuLi5tWF0pO2xldCBOZT1PYmplY3Quc2VhbChsUmUobnVsbCx7dGFnTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhdHRyaWJ1dGVOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50czp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6ITF9fSkpLGduPW51bGwsX3Q9bnVsbCxFdD0hMCxHdD0hMCxsbj0hMSx4dD0hMCxQdD0hMSxRZT0hMSxEdD0hMSxrdD0hMSxPbj0hMSxodD0hMSx6cj0hMSx5dD0hMCxqaT0hMTtjb25zdCB4aT0idXNlci1jb250ZW50LSI7bGV0IE1hPSEwLHpzPSExLGFvPXt9LFRyPW51bGw7Y29uc3QgRm49Q2Moe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIsInhtcCJdKTtsZXQgcW49bnVsbDtjb25zdCBVbj1DYyh7fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pO2xldCBBdD1udWxsO2NvbnN0IHd0PUNjKHt9LFsiYWx0IiwiY2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSksb249Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLGZuPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsQW49Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2xldCBvbz1Bbixqbz0hMSwkbz1udWxsO2NvbnN0IFBhPUNjKHt9LFtvbixmbixBbl0sczJlKTtsZXQgd289bnVsbDtjb25zdCBfcz1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdLHRsPSJ0ZXh0L2h0bWwiO2xldCBkYT1udWxsLGowPW51bGw7Y29uc3QgcG09dS5jcmVhdGVFbGVtZW50KCJmb3JtIiksTWw9ZnVuY3Rpb24od24pe3JldHVybiB3biBpbnN0YW5jZW9mIFJlZ0V4cHx8d24gaW5zdGFuY2VvZiBGdW5jdGlvbn0sWGM9ZnVuY3Rpb24oKXtsZXQgd249YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O2lmKCEoajAmJmowPT09d24pKXtpZigoIXdufHx0eXBlb2Ygd24hPSJvYmplY3QiKSYmKHduPXt9KSx3bj1UQyh3biksd289X3MuaW5kZXhPZih3bi5QQVJTRVJfTUVESUFfVFlQRSk9PT0tMT90bDp3bi5QQVJTRVJfTUVESUFfVFlQRSxkYT13bz09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiP3MyZTpwWCxDZT1JMyh3biwiQUxMT1dFRF9UQUdTIik/Q2Moe30sd24uQUxMT1dFRF9UQUdTLGRhKTprZSxLZT1JMyh3biwiQUxMT1dFRF9BVFRSIik/Q2Moe30sd24uQUxMT1dFRF9BVFRSLGRhKTpGdCwkbz1JMyh3biwiQUxMT1dFRF9OQU1FU1BBQ0VTIik/Q2Moe30sd24uQUxMT1dFRF9OQU1FU1BBQ0VTLHMyZSk6UGEsQXQ9STMod24sIkFERF9VUklfU0FGRV9BVFRSIik/Q2MoVEMod3QpLHduLkFERF9VUklfU0FGRV9BVFRSLGRhKTp3dCxxbj1JMyh3biwiQUREX0RBVEFfVVJJX1RBR1MiKT9DYyhUQyhVbiksd24uQUREX0RBVEFfVVJJX1RBR1MsZGEpOlVuLFRyPUkzKHduLCJGT1JCSURfQ09OVEVOVFMiKT9DYyh7fSx3bi5GT1JCSURfQ09OVEVOVFMsZGEpOkZuLGduPUkzKHduLCJGT1JCSURfVEFHUyIpP0NjKHt9LHduLkZPUkJJRF9UQUdTLGRhKTp7fSxfdD1JMyh3biwiRk9SQklEX0FUVFIiKT9DYyh7fSx3bi5GT1JCSURfQVRUUixkYSk6e30sYW89STMod24sIlVTRV9QUk9GSUxFUyIpP3duLlVTRV9QUk9GSUxFUzohMSxFdD13bi5BTExPV19BUklBX0FUVFIhPT0hMSxHdD13bi5BTExPV19EQVRBX0FUVFIhPT0hMSxsbj13bi5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEseHQ9d24uQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSIT09ITEsUHQ9d24uU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxRZT13bi5XSE9MRV9ET0NVTUVOVHx8ITEsT249d24uUkVUVVJOX0RPTXx8ITEsaHQ9d24uUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsenI9d24uUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsa3Q9d24uRk9SQ0VfQk9EWXx8ITEseXQ9d24uU0FOSVRJWkVfRE9NIT09ITEsamk9d24uU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLE1hPXduLktFRVBfQ09OVEVOVCE9PSExLHpzPXduLklOX1BMQUNFfHwhMSxTZT13bi5BTExPV0VEX1VSSV9SRUdFWFB8fGJSZSxvbz13bi5OQU1FU1BBQ0V8fEFuLE5lPXduLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HfHx7fSx3bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmTWwod24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKE5lLnRhZ05hbWVDaGVjaz13bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spLHduLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZNbCh3bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spJiYoTmUuYXR0cmlidXRlTmFtZUNoZWNrPXduLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayksd24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJnR5cGVvZiB3bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM9PSJib29sZWFuIiYmKE5lLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz13bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMpLFB0JiYoR3Q9ITEpLGh0JiYoT249ITApLGFvJiYoQ2U9Q2Moe30sZFJlKSxLZT1bXSxhby5odG1sPT09ITAmJihDYyhDZSxmUmUpLENjKEtlLGdSZSkpLGFvLnN2Zz09PSEwJiYoQ2MoQ2UsYTJlKSxDYyhLZSx1MmUpLENjKEtlLG1YKSksYW8uc3ZnRmlsdGVycz09PSEwJiYoQ2MoQ2UsbzJlKSxDYyhLZSx1MmUpLENjKEtlLG1YKSksYW8ubWF0aE1sPT09ITAmJihDYyhDZSxjMmUpLENjKEtlLHBSZSksQ2MoS2UsbVgpKSksd24uQUREX1RBR1MmJihDZT09PWtlJiYoQ2U9VEMoQ2UpKSxDYyhDZSx3bi5BRERfVEFHUyxkYSkpLHduLkFERF9BVFRSJiYoS2U9PT1GdCYmKEtlPVRDKEtlKSksQ2MoS2Usd24uQUREX0FUVFIsZGEpKSx3bi5BRERfVVJJX1NBRkVfQVRUUiYmQ2MoQXQsd24uQUREX1VSSV9TQUZFX0FUVFIsZGEpLHduLkZPUkJJRF9DT05URU5UUyYmKFRyPT09Rm4mJihUcj1UQyhUcikpLENjKFRyLHduLkZPUkJJRF9DT05URU5UUyxkYSkpLE1hJiYoQ2VbIiN0ZXh0Il09ITApLFFlJiZDYyhDZSxbImh0bWwiLCJoZWFkIiwiYm9keSJdKSxDZS50YWJsZSYmKENjKENlLFsidGJvZHkiXSksZGVsZXRlIGduLnRib2R5KSx3bi5UUlVTVEVEX1RZUEVTX1BPTElDWSl7aWYodHlwZW9mIHduLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZUhUTUwhPSJmdW5jdGlvbiIpdGhyb3cgekYoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVIVE1MIiBob29rLicpO2lmKHR5cGVvZiB3bi5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVTY3JpcHRVUkwhPSJmdW5jdGlvbiIpdGhyb3cgekYoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVTY3JpcHRVUkwiIGhvb2suJyk7cGU9d24uVFJVU1RFRF9UWVBFU19QT0xJQ1ksYmU9cGUuY3JlYXRlSFRNTCgiIil9ZWxzZSBwZT09PXZvaWQgMCYmKHBlPXVQdChGLHApKSxwZSE9PW51bGwmJnR5cGVvZiBiZT09InN0cmluZyImJihiZT1wZS5jcmVhdGVIVE1MKCIiKSk7RXAmJkVwKHduKSxqMD13bn19LEJjPUNjKHt9LFsibWkiLCJtbyIsIm1uIiwibXMiLCJtdGV4dCJdKSxqYT1DYyh7fSxbImZvcmVpZ25vYmplY3QiLCJkZXNjIiwidGl0bGUiLCJhbm5vdGF0aW9uLXhtbCJdKSxPdT1DYyh7fSxbInRpdGxlIiwic3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKSxTYT1DYyh7fSxbLi4uYTJlLC4uLm8yZSwuLi5aTnRdKSxQbz1DYyh7fSxbLi4uYzJlLC4uLmVQdF0pLEZjPWZ1bmN0aW9uKHduKXtsZXQgWnI9b2Uod24pOyghWnJ8fCFaci50YWdOYW1lKSYmKFpyPXtuYW1lc3BhY2VVUkk6b28sdGFnTmFtZToidGVtcGxhdGUifSk7Y29uc3QgWmk9cFgod24udGFnTmFtZSksbnU9cFgoWnIudGFnTmFtZSk7cmV0dXJuICRvW3duLm5hbWVzcGFjZVVSSV0/d24ubmFtZXNwYWNlVVJJPT09Zm4/WnIubmFtZXNwYWNlVVJJPT09QW4/Wmk9PT0ic3ZnIjpaci5uYW1lc3BhY2VVUkk9PT1vbj9aaT09PSJzdmciJiYobnU9PT0iYW5ub3RhdGlvbi14bWwifHxCY1tudV0pOiEhU2FbWmldOnduLm5hbWVzcGFjZVVSST09PW9uP1pyLm5hbWVzcGFjZVVSST09PUFuP1ppPT09Im1hdGgiOlpyLm5hbWVzcGFjZVVSST09PWZuP1ppPT09Im1hdGgiJiZqYVtudV06ISFQb1taaV06d24ubmFtZXNwYWNlVVJJPT09QW4/WnIubmFtZXNwYWNlVVJJPT09Zm4mJiFqYVtudV18fFpyLm5hbWVzcGFjZVVSST09PW9uJiYhQmNbbnVdPyExOiFQb1taaV0mJihPdVtaaV18fCFTYVtaaV0pOiEhKHdvPT09ImFwcGxpY2F0aW9uL3hodG1sK3htbCImJiRvW3duLm5hbWVzcGFjZVVSSV0pOiExfSx4YT1mdW5jdGlvbih3bil7akYocy5yZW1vdmVkLHtlbGVtZW50OndufSk7dHJ5e3duLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQod24pfWNhdGNoe3duLnJlbW92ZSgpfX0sQmE9ZnVuY3Rpb24od24sWnIpe3RyeXtqRihzLnJlbW92ZWQse2F0dHJpYnV0ZTpaci5nZXRBdHRyaWJ1dGVOb2RlKHduKSxmcm9tOlpyfSl9Y2F0Y2h7akYocy5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOlpyfSl9aWYoWnIucmVtb3ZlQXR0cmlidXRlKHduKSx3bj09PSJpcyImJiFLZVt3bl0paWYoT258fGh0KXRyeXt4YShacil9Y2F0Y2h7fWVsc2UgdHJ5e1pyLnNldEF0dHJpYnV0ZSh3biwiIil9Y2F0Y2h7fX0sZ2E9ZnVuY3Rpb24od24pe2xldCBacj1udWxsLFppPW51bGw7aWYoa3Qpd249IjxyZW1vdmU+PC9yZW1vdmU+Iit3bjtlbHNle2NvbnN0IERsPVdOdCh3biwvXltcclxuXHQgXSsvKTtaaT1EbCYmRGxbMF19d289PT0iYXBwbGljYXRpb24veGh0bWwreG1sIiYmb289PT1BbiYmKHduPSc8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PC9oZWFkPjxib2R5Picrd24rIjwvYm9keT48L2h0bWw+Iik7Y29uc3QgbnU9cGU/cGUuY3JlYXRlSFRNTCh3bik6d247aWYob289PT1Bbil0cnl7WnI9bmV3IFIoKS5wYXJzZUZyb21TdHJpbmcobnUsd28pfWNhdGNoe31pZighWnJ8fCFaci5kb2N1bWVudEVsZW1lbnQpe1pyPWFlLmNyZWF0ZURvY3VtZW50KG9vLCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e1pyLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9am8/YmU6bnV9Y2F0Y2h7fX1jb25zdCB2dT1aci5ib2R5fHxaci5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHduJiZaaSYmdnUuaW5zZXJ0QmVmb3JlKHUuY3JlYXRlVGV4dE5vZGUoWmkpLHZ1LmNoaWxkTm9kZXNbMF18fG51bGwpLG9vPT09QW4/ZGUuY2FsbChacixRZT8iaHRtbCI6ImJvZHkiKVswXTpRZT9aci5kb2N1bWVudEVsZW1lbnQ6dnV9LGtoPWZ1bmN0aW9uKHduKXtyZXR1cm4gbmUuY2FsbCh3bi5vd25lckRvY3VtZW50fHx3bix3bixfLlNIT1dfRUxFTUVOVHxfLlNIT1dfQ09NTUVOVHxfLlNIT1dfVEVYVCxudWxsKX0sbHU9ZnVuY3Rpb24od24pe3JldHVybiB3biBpbnN0YW5jZW9mIFAmJih0eXBlb2Ygd24ubm9kZU5hbWUhPSJzdHJpbmcifHx0eXBlb2Ygd24udGV4dENvbnRlbnQhPSJzdHJpbmcifHx0eXBlb2Ygd24ucmVtb3ZlQ2hpbGQhPSJmdW5jdGlvbiJ8fCEod24uYXR0cmlidXRlcyBpbnN0YW5jZW9mIEEpfHx0eXBlb2Ygd24ucmVtb3ZlQXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2Ygd24uc2V0QXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2Ygd24ubmFtZXNwYWNlVVJJIT0ic3RyaW5nInx8dHlwZW9mIHduLmluc2VydEJlZm9yZSE9ImZ1bmN0aW9uInx8dHlwZW9mIHduLmhhc0NoaWxkTm9kZXMhPSJmdW5jdGlvbiIpfSxvNT1mdW5jdGlvbih3bil7cmV0dXJuIHR5cGVvZiB5PT0iZnVuY3Rpb24iJiZ3biBpbnN0YW5jZW9mIHl9LFdoPWZ1bmN0aW9uKHduLFpyLFppKXtnZVt3bl0mJmdYKGdlW3duXSxudT0+e251LmNhbGwocyxacixaaSxqMCl9KX0sb2Q9ZnVuY3Rpb24od24pe2xldCBacj1udWxsO2lmKFdoKCJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIix3bixudWxsKSxsdSh3bikpcmV0dXJuIHhhKHduKSwhMDtjb25zdCBaaT1kYSh3bi5ub2RlTmFtZSk7aWYoV2goInVwb25TYW5pdGl6ZUVsZW1lbnQiLHduLHt0YWdOYW1lOlppLGFsbG93ZWRUYWdzOkNlfSksd24uaGFzQ2hpbGROb2RlcygpJiYhbzUod24uZmlyc3RFbGVtZW50Q2hpbGQpJiZpbSgvPFsvXHddL2csd24uaW5uZXJIVE1MKSYmaW0oLzxbL1x3XS9nLHduLnRleHRDb250ZW50KSlyZXR1cm4geGEod24pLCEwO2lmKCFDZVtaaV18fGduW1ppXSl7aWYoIWduW1ppXSYmY2QoWmkpJiYoTmUudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZpbShOZS50YWdOYW1lQ2hlY2ssWmkpfHxOZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmTmUudGFnTmFtZUNoZWNrKFppKSkpcmV0dXJuITE7aWYoTWEmJiFUcltaaV0pe2NvbnN0IG51PW9lKHduKXx8d24ucGFyZW50Tm9kZSx2dT1pZSh3bil8fHduLmNoaWxkTm9kZXM7aWYodnUmJm51KXtjb25zdCBEbD12dS5sZW5ndGg7Zm9yKGxldCBZaD1EbC0xO1loPj0wOy0tWWgpbnUuaW5zZXJ0QmVmb3JlKEsodnVbWWhdLCEwKSxlZSh3bikpfX1yZXR1cm4geGEod24pLCEwfXJldHVybiB3biBpbnN0YW5jZW9mIFQmJiFGYyh3bil8fChaaT09PSJub3NjcmlwdCJ8fFppPT09Im5vZW1iZWQifHxaaT09PSJub2ZyYW1lcyIpJiZpbSgvPFwvbm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSx3bi5pbm5lckhUTUwpPyh4YSh3biksITApOihQdCYmd24ubm9kZVR5cGU9PT0zJiYoWnI9d24udGV4dENvbnRlbnQsZ1goW1cseGUsVV0sbnU9Pntacj0kRihacixudSwiICIpfSksd24udGV4dENvbnRlbnQhPT1aciYmKGpGKHMucmVtb3ZlZCx7ZWxlbWVudDp3bi5jbG9uZU5vZGUoKX0pLHduLnRleHRDb250ZW50PVpyKSksV2goImFmdGVyU2FuaXRpemVFbGVtZW50cyIsd24sbnVsbCksITEpfSxHZD1mdW5jdGlvbih3bixacixaaSl7aWYoeXQmJihacj09PSJpZCJ8fFpyPT09Im5hbWUiKSYmKFppIGluIHV8fFppIGluIHBtKSlyZXR1cm4hMTtpZighKEd0JiYhX3RbWnJdJiZpbShGZSxacikpKXtpZighKEV0JiZpbShQZSxacikpKXtpZighS2VbWnJdfHxfdFtacl0pe2lmKCEoY2Qod24pJiYoTmUudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZpbShOZS50YWdOYW1lQ2hlY2ssd24pfHxOZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmTmUudGFnTmFtZUNoZWNrKHduKSkmJihOZS5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJmltKE5lLmF0dHJpYnV0ZU5hbWVDaGVjayxacil8fE5lLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZOZS5hdHRyaWJ1dGVOYW1lQ2hlY2soWnIpKXx8WnI9PT0iaXMiJiZOZS5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihOZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJmltKE5lLnRhZ05hbWVDaGVjayxaaSl8fE5lLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZOZS50YWdOYW1lQ2hlY2soWmkpKSkpcmV0dXJuITF9ZWxzZSBpZighQXRbWnJdKXtpZighaW0oU2UsJEYoWmksSWUsIiIpKSl7aWYoISgoWnI9PT0ic3JjInx8WnI9PT0ieGxpbms6aHJlZiJ8fFpyPT09ImhyZWYiKSYmd24hPT0ic2NyaXB0IiYmWU50KFppLCJkYXRhOiIpPT09MCYmcW5bd25dKSl7aWYoIShsbiYmIWltKGplLCRGKFppLEllLCIiKSkpKXtpZihaaSlyZXR1cm4hMX19fX19fXJldHVybiEwfSxjZD1mdW5jdGlvbih3bil7cmV0dXJuIHduIT09ImFubm90YXRpb24teG1sIiYmd24uaW5kZXhPZigiLSIpPjB9LEtkPWZ1bmN0aW9uKHduKXtXaCgiYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzIix3bixudWxsKTtjb25zdHthdHRyaWJ1dGVzOlpyfT13bjtpZighWnIpcmV0dXJuO2NvbnN0IFppPXthdHRyTmFtZToiIixhdHRyVmFsdWU6IiIsa2VlcEF0dHI6ITAsYWxsb3dlZEF0dHJpYnV0ZXM6S2V9O2xldCBudT1aci5sZW5ndGg7Zm9yKDtudS0tOyl7Y29uc3QgdnU9WnJbbnVdLHtuYW1lOkRsLG5hbWVzcGFjZVVSSTpZaCx2YWx1ZTp3MX09dnUsJDA9ZGEoRGwpO2xldCBXaT1EbD09PSJ2YWx1ZSI/dzE6WE50KHcxKTtpZihaaS5hdHRyTmFtZT0kMCxaaS5hdHRyVmFsdWU9V2ksWmkua2VlcEF0dHI9ITAsWmkuZm9yY2VLZWVwQXR0cj12b2lkIDAsV2goInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsd24sWmkpLFdpPVppLmF0dHJWYWx1ZSxaaS5mb3JjZUtlZXBBdHRyfHwoQmEoRGwsd24pLCFaaS5rZWVwQXR0cikpY29udGludWU7aWYoIXh0JiZpbSgvXC8+L2ksV2kpKXtCYShEbCx3bik7Y29udGludWV9UHQmJmdYKFtXLHhlLFVdLFFhPT57V2k9JEYoV2ksUWEsIiAiKX0pO2NvbnN0IEJzPWRhKHduLm5vZGVOYW1lKTtpZihHZChCcywkMCxXaSkpe2lmKGppJiYoJDA9PT0iaWQifHwkMD09PSJuYW1lIikmJihCYShEbCx3biksV2k9eGkrV2kpLHBlJiZ0eXBlb2YgRj09Im9iamVjdCImJnR5cGVvZiBGLmdldEF0dHJpYnV0ZVR5cGU9PSJmdW5jdGlvbiImJiFZaClzd2l0Y2goRi5nZXRBdHRyaWJ1dGVUeXBlKEJzLCQwKSl7Y2FzZSJUcnVzdGVkSFRNTCI6e1dpPXBlLmNyZWF0ZUhUTUwoV2kpO2JyZWFrfWNhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6e1dpPXBlLmNyZWF0ZVNjcmlwdFVSTChXaSk7YnJlYWt9fXRyeXtZaD93bi5zZXRBdHRyaWJ1dGVOUyhZaCxEbCxXaSk6d24uc2V0QXR0cmlidXRlKERsLFdpKSxoUmUocy5yZW1vdmVkKX1jYXRjaHt9fX1XaCgiYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMiLHduLG51bGwpfSwkZz1mdW5jdGlvbiBhcyh3bil7bGV0IFpyPW51bGw7Y29uc3QgWmk9a2god24pO2ZvcihXaCgiYmVmb3JlU2FuaXRpemVTaGFkb3dET00iLHduLG51bGwpO1pyPVppLm5leHROb2RlKCk7KVdoKCJ1cG9uU2FuaXRpemVTaGFkb3dOb2RlIixacixudWxsKSwhb2QoWnIpJiYoWnIuY29udGVudCBpbnN0YW5jZW9mIHYmJmFzKFpyLmNvbnRlbnQpLEtkKFpyKSk7V2goImFmdGVyU2FuaXRpemVTaGFkb3dET00iLHduLG51bGwpfTtyZXR1cm4gcy5zYW5pdGl6ZT1mdW5jdGlvbihhcyl7bGV0IHduPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxacj1udWxsLFppPW51bGwsbnU9bnVsbCx2dT1udWxsO2lmKGpvPSFhcyxqbyYmKGFzPSI8IS0tPiIpLHR5cGVvZiBhcyE9InN0cmluZyImJiFvNShhcykpaWYodHlwZW9mIGFzLnRvU3RyaW5nPT0iZnVuY3Rpb24iKXtpZihhcz1hcy50b1N0cmluZygpLHR5cGVvZiBhcyE9InN0cmluZyIpdGhyb3cgekYoImRpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmciKX1lbHNlIHRocm93IHpGKCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCFzLmlzU3VwcG9ydGVkKXJldHVybiBhcztpZihEdHx8WGMod24pLHMucmVtb3ZlZD1bXSx0eXBlb2YgYXM9PSJzdHJpbmciJiYoenM9ITEpLHpzKXtpZihhcy5ub2RlTmFtZSl7Y29uc3QgdzE9ZGEoYXMubm9kZU5hbWUpO2lmKCFDZVt3MV18fGduW3cxXSl0aHJvdyB6Rigicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKGFzIGluc3RhbmNlb2YgeSlacj1nYSgiPCEtLS0tPiIpLFppPVpyLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShhcywhMCksWmkubm9kZVR5cGU9PT0xJiZaaS5ub2RlTmFtZT09PSJCT0RZInx8Wmkubm9kZU5hbWU9PT0iSFRNTCI/WnI9Wmk6WnIuYXBwZW5kQ2hpbGQoWmkpO2Vsc2V7aWYoIU9uJiYhUHQmJiFRZSYmYXMuaW5kZXhPZigiPCIpPT09LTEpcmV0dXJuIHBlJiZ6cj9wZS5jcmVhdGVIVE1MKGFzKTphcztpZihacj1nYShhcyksIVpyKXJldHVybiBPbj9udWxsOnpyP2JlOiIifVpyJiZrdCYmeGEoWnIuZmlyc3RDaGlsZCk7Y29uc3QgRGw9a2goenM/YXM6WnIpO2Zvcig7bnU9RGwubmV4dE5vZGUoKTspb2QobnUpfHwobnUuY29udGVudCBpbnN0YW5jZW9mIHYmJiRnKG51LmNvbnRlbnQpLEtkKG51KSk7aWYoenMpcmV0dXJuIGFzO2lmKE9uKXtpZihodClmb3IodnU9c2UuY2FsbChaci5vd25lckRvY3VtZW50KTtaci5maXJzdENoaWxkOyl2dS5hcHBlbmRDaGlsZChaci5maXJzdENoaWxkKTtlbHNlIHZ1PVpyO3JldHVybihLZS5zaGFkb3dyb290fHxLZS5zaGFkb3dyb290bW9kZSkmJih2dT1YLmNhbGwoZCx2dSwhMCkpLHZ1fWxldCBZaD1RZT9aci5vdXRlckhUTUw6WnIuaW5uZXJIVE1MO3JldHVybiBRZSYmQ2VbIiFkb2N0eXBlIl0mJlpyLm93bmVyRG9jdW1lbnQmJlpyLm93bmVyRG9jdW1lbnQuZG9jdHlwZSYmWnIub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJmltKG1SZSxaci5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJihZaD0iPCFET0NUWVBFICIrWnIub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrYD4KYCtZaCksUHQmJmdYKFtXLHhlLFVdLHcxPT57WWg9JEYoWWgsdzEsIiAiKX0pLHBlJiZ6cj9wZS5jcmVhdGVIVE1MKFloKTpZaH0scy5zZXRDb25maWc9ZnVuY3Rpb24oKXtsZXQgYXM9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O1hjKGFzKSxEdD0hMH0scy5jbGVhckNvbmZpZz1mdW5jdGlvbigpe2owPW51bGwsRHQ9ITF9LHMuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbihhcyx3bixacil7ajB8fFhjKHt9KTtjb25zdCBaaT1kYShhcyksbnU9ZGEod24pO3JldHVybiBHZChaaSxudSxacil9LHMuYWRkSG9vaz1mdW5jdGlvbihhcyx3bil7dHlwZW9mIHduPT0iZnVuY3Rpb24iJiYoZ2VbYXNdPWdlW2FzXXx8W10sakYoZ2VbYXNdLHduKSl9LHMucmVtb3ZlSG9vaz1mdW5jdGlvbihhcyl7aWYoZ2VbYXNdKXJldHVybiBoUmUoZ2VbYXNdKX0scy5yZW1vdmVIb29rcz1mdW5jdGlvbihhcyl7Z2VbYXNdJiYoZ2VbYXNdPVtdKX0scy5yZW1vdmVBbGxIb29rcz1mdW5jdGlvbigpe2dlPXt9fSxzfXZhciBoRD13UmUoKTtjb25zdCBmRD0vPGJyXHMqXC8/Pi9naSxsUHQ9aT0+aT9rUmUoaSkucmVwbGFjZSgvXFxuL2csIiNiciMiKS5zcGxpdCgiI2JyIyIpOlsiIl0saFB0PSgoKT0+e2xldCBpPSExO3JldHVybigpPT57aXx8KGZQdCgpLGk9ITApfX0pKCk7ZnVuY3Rpb24gZlB0KCl7Y29uc3QgaT0iZGF0YS10ZW1wLWhyZWYtdGFyZ2V0IjtoRC5hZGRIb29rKCJiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMiLHM9PntzLnRhZ05hbWU9PT0iQSImJnMuaGFzQXR0cmlidXRlKCJ0YXJnZXQiKSYmcy5zZXRBdHRyaWJ1dGUoaSxzLmdldEF0dHJpYnV0ZSgidGFyZ2V0Iil8fCIiKX0pLGhELmFkZEhvb2soImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixzPT57cy50YWdOYW1lPT09IkEiJiZzLmhhc0F0dHJpYnV0ZShpKSYmKHMuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLHMuZ2V0QXR0cmlidXRlKGkpfHwiIikscy5yZW1vdmVBdHRyaWJ1dGUoaSkscy5nZXRBdHRyaWJ1dGUoInRhcmdldCIpPT09Il9ibGFuayImJnMuc2V0QXR0cmlidXRlKCJyZWwiLCJub29wZW5lciIpKX0pfWNvbnN0IHlSZT1pPT4oaFB0KCksaEQuc2FuaXRpemUoaSkpLHhSZT0oaSxzKT0+e3ZhciB1O2lmKCgodT1zLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOnUuaHRtbExhYmVscykhPT0hMSl7Y29uc3QgZD1zLnNlY3VyaXR5TGV2ZWw7ZD09PSJhbnRpc2NyaXB0Inx8ZD09PSJzdHJpY3QiP2k9eVJlKGkpOmQhPT0ibG9vc2UiJiYoaT1rUmUoaSksaT1pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLGk9aS5yZXBsYWNlKC89L2csIiZlcXVhbHM7IiksaT1iUHQoaSkpfXJldHVybiBpfSxZZj0oaSxzKT0+aSYmKHMuZG9tcHVyaWZ5Q29uZmlnP2k9aEQuc2FuaXRpemUoeFJlKGkscykscy5kb21wdXJpZnlDb25maWcpLnRvU3RyaW5nKCk6aT1oRC5zYW5pdGl6ZSh4UmUoaSxzKSx7Rk9SQklEX1RBR1M6WyJzdHlsZSJdfSkudG9TdHJpbmcoKSxpKSxkUHQ9KGkscyk9PnR5cGVvZiBpPT0ic3RyaW5nIj9ZZihpLHMpOmkuZmxhdCgpLm1hcCh1PT5ZZih1LHMpKSxnUHQ9aT0+ZkQudGVzdChpKSxwUHQ9aT0+aS5zcGxpdChmRCksYlB0PWk9PmkucmVwbGFjZSgvI2JyIy9nLCI8YnIvPiIpLGtSZT1pPT5pLnJlcGxhY2UoZkQsIiNiciMiKSxtUHQ9aT0+e2xldCBzPSIiO3JldHVybiBpJiYocz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxzPXMucmVwbGFjZUFsbCgvXCgvZywiXFwoIikscz1zLnJlcGxhY2VBbGwoL1wpL2csIlxcKSIpKSxzfSxmMT1pPT4hKGk9PT0hMXx8WyJmYWxzZSIsIm51bGwiLCIwIl0uaW5jbHVkZXMoU3RyaW5nKGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSksdlB0PWZ1bmN0aW9uKC4uLmkpe2NvbnN0IHM9aS5maWx0ZXIodT0+IWlzTmFOKHUpKTtyZXR1cm4gTWF0aC5tYXgoLi4ucyl9LHdQdD1mdW5jdGlvbiguLi5pKXtjb25zdCBzPWkuZmlsdGVyKHU9PiFpc05hTih1KSk7cmV0dXJuIE1hdGgubWluKC4uLnMpfSxxRj1mdW5jdGlvbihpKXtjb25zdCBzPWkuc3BsaXQoLygsKS8pLHU9W107Zm9yKGxldCBkPTA7ZDxzLmxlbmd0aDtkKyspe2xldCBwPXNbZF07aWYocD09PSIsIiYmZD4wJiZkKzE8cy5sZW5ndGgpe2NvbnN0IHY9c1tkLTFdLGI9c1tkKzFdO3lQdCh2LGIpJiYocD12KyIsIitiLGQrKyx1LnBvcCgpKX11LnB1c2goeFB0KHApKX1yZXR1cm4gdS5qb2luKCIiKX0sbDJlPShpLHMpPT5NYXRoLm1heCgwLGkuc3BsaXQocykubGVuZ3RoLTEpLHlQdD0oaSxzKT0+e2NvbnN0IHU9bDJlKGksIn4iKSxkPWwyZShzLCJ+Iik7cmV0dXJuIHU9PT0xJiZkPT09MX0seFB0PWk9Pntjb25zdCBzPWwyZShpLCJ+Iik7bGV0IHU9ITE7aWYoczw9MSlyZXR1cm4gaTtzJTIhPT0wJiZpLnN0YXJ0c1dpdGgoIn4iKSYmKGk9aS5zdWJzdHJpbmcoMSksdT0hMCk7Y29uc3QgZD1bLi4uaV07bGV0IHA9ZC5pbmRleE9mKCJ+Iiksdj1kLmxhc3RJbmRleE9mKCJ+Iik7Zm9yKDtwIT09LTEmJnYhPT0tMSYmcCE9PXY7KWRbcF09IjwiLGRbdl09Ij4iLHA9ZC5pbmRleE9mKCJ+Iiksdj1kLmxhc3RJbmRleE9mKCJ+Iik7cmV0dXJuIHUmJmQudW5zaGlmdCgifiIpLGQuam9pbigiIil9LEVSZT0oKT0+d2luZG93Lk1hdGhNTEVsZW1lbnQhPT12b2lkIDAsaDJlPS9cJFwkKC4qKVwkXCQvZyxEdj1pPT57dmFyIHM7cmV0dXJuKCgocz1pLm1hdGNoKGgyZSkpPT1udWxsP3ZvaWQgMDpzLmxlbmd0aCk/PzApPjB9LEhGPWFzeW5jKGkscyk9PntpPWF3YWl0IENDKGkscyk7Y29uc3QgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmlubmVySFRNTD1pLHUuaWQ9ImthdGV4LXRlbXAiLHUuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix1LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdS5zdHlsZS50b3A9IjAiO2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpO2Q9PW51bGx8fGQuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJiZWZvcmVlbmQiLHUpO2NvbnN0IHA9e3dpZHRoOnUuY2xpZW50V2lkdGgsaGVpZ2h0OnUuY2xpZW50SGVpZ2h0fTtyZXR1cm4gdS5yZW1vdmUoKSxwfSxDQz1hc3luYyhpLHMpPT57aWYoIUR2KGkpKXJldHVybiBpO2lmKCFFUmUoKSYmIXMubGVnYWN5TWF0aE1MKXJldHVybiBpLnJlcGxhY2UoaDJlLCJNYXRoTUwgaXMgdW5zdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4iKTtjb25zdHtkZWZhdWx0OnV9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pk1WdCk7cmV0dXJuIGkuc3BsaXQoZkQpLm1hcChkPT5EdihkKT9gCiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwOyI+CiAgICAgICAgICAgICAgJHtkfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6YDxkaXY+JHtkfTwvZGl2PmApLmpvaW4oIiIpLnJlcGxhY2UoaDJlLChkLHApPT51LnJlbmRlclRvU3RyaW5nKHAse3Rocm93T25FcnJvcjohMCxkaXNwbGF5TW9kZTohMCxvdXRwdXQ6RVJlKCk/Im1hdGhtbCI6Imh0bWxBbmRNYXRobWwifSkucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoLzxhbm5vdGF0aW9uLio8XC9hbm5vdGF0aW9uPi9nLCIiKSl9LGNpPXtnZXRSb3dzOmxQdCxzYW5pdGl6ZVRleHQ6WWYsc2FuaXRpemVUZXh0T3JBcnJheTpkUHQsaGFzQnJlYWtzOmdQdCxzcGxpdEJyZWFrczpwUHQsbGluZUJyZWFrUmVnZXg6ZkQscmVtb3ZlU2NyaXB0OnlSZSxnZXRVcmw6bVB0LGV2YWx1YXRlOmYxLGdldE1heDp2UHQsZ2V0TWluOndQdH0sdlg9e21pbjp7cjowLGc6MCxiOjAsczowLGw6MCxhOjB9LG1heDp7cjoyNTUsZzoyNTUsYjoyNTUsaDozNjAsczoxMDAsbDoxMDAsYToxfSxjbGFtcDp7cjppPT5pPj0yNTU/MjU1Omk8MD8wOmksZzppPT5pPj0yNTU/MjU1Omk8MD8wOmksYjppPT5pPj0yNTU/MjU1Omk8MD8wOmksaDppPT5pJTM2MCxzOmk9Pmk+PTEwMD8xMDA6aTwwPzA6aSxsOmk9Pmk+PTEwMD8xMDA6aTwwPzA6aSxhOmk9Pmk+PTE/MTppPDA/MDppfSx0b0xpbmVhcjppPT57Y29uc3Qgcz1pLzI1NTtyZXR1cm4gaT4uMDM5Mjg/TWF0aC5wb3coKHMrLjA1NSkvMS4wNTUsMi40KTpzLzEyLjkyfSxodWUycmdiOihpLHMsdSk9Pih1PDAmJih1Kz0xKSx1PjEmJih1LT0xKSx1PDEvNj9pKyhzLWkpKjYqdTp1PDEvMj9zOnU8Mi8zP2krKHMtaSkqKDIvMy11KSo2OmkpLGhzbDJyZ2I6KHtoOmkscyxsOnV9LGQpPT57aWYoIXMpcmV0dXJuIHUqMi41NTtpLz0zNjAscy89MTAwLHUvPTEwMDtjb25zdCBwPXU8LjU/dSooMStzKTp1K3MtdSpzLHY9Mip1LXA7c3dpdGNoKGQpe2Nhc2UiciI6cmV0dXJuIHZYLmh1ZTJyZ2IodixwLGkrMS8zKSoyNTU7Y2FzZSJnIjpyZXR1cm4gdlguaHVlMnJnYih2LHAsaSkqMjU1O2Nhc2UiYiI6cmV0dXJuIHZYLmh1ZTJyZ2IodixwLGktMS8zKSoyNTV9fSxyZ2IyaHNsOih7cjppLGc6cyxiOnV9LGQpPT57aS89MjU1LHMvPTI1NSx1Lz0yNTU7Y29uc3QgcD1NYXRoLm1heChpLHMsdSksdj1NYXRoLm1pbihpLHMsdSksYj0ocCt2KS8yO2lmKGQ9PT0ibCIpcmV0dXJuIGIqMTAwO2lmKHA9PT12KXJldHVybiAwO2NvbnN0IHk9cC12LFQ9Yj4uNT95LygyLXAtdik6eS8ocCt2KTtpZihkPT09InMiKXJldHVybiBUKjEwMDtzd2l0Y2gocCl7Y2FzZSBpOnJldHVybigocy11KS95KyhzPHU/NjowKSkqNjA7Y2FzZSBzOnJldHVybigodS1pKS95KzIpKjYwO2Nhc2UgdTpyZXR1cm4oKGktcykveSs0KSo2MDtkZWZhdWx0OnJldHVybi0xfX19LFdhPXtjaGFubmVsOnZYLGxhbmc6e2NsYW1wOihpLHMsdSk9PnM+dT9NYXRoLm1pbihzLE1hdGgubWF4KHUsaSkpOk1hdGgubWluKHUsTWF0aC5tYXgocyxpKSkscm91bmQ6aT0+TWF0aC5yb3VuZChpKjFlMTApLzFlMTB9LHVuaXQ6e2RlYzJoZXg6aT0+e2NvbnN0IHM9TWF0aC5yb3VuZChpKS50b1N0cmluZygxNik7cmV0dXJuIHMubGVuZ3RoPjE/czpgMCR7c31gfX19LHY5PXt9O2ZvcihsZXQgaT0wO2k8PTI1NTtpKyspdjlbaV09V2EudW5pdC5kZWMyaGV4KGkpO2NvbnN0IE9nPXtBTEw6MCxSR0I6MSxIU0w6Mn07Y2xhc3Mga1B0e2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPU9nLkFMTH1nZXQoKXtyZXR1cm4gdGhpcy50eXBlfXNldChzKXtpZih0aGlzLnR5cGUmJnRoaXMudHlwZSE9PXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZSIpO3RoaXMudHlwZT1zfXJlc2V0KCl7dGhpcy50eXBlPU9nLkFMTH1pcyhzKXtyZXR1cm4gdGhpcy50eXBlPT09c319Y29uc3QgRVB0PWtQdDtjbGFzcyBUUHR7Y29uc3RydWN0b3Iocyx1KXt0aGlzLmNvbG9yPXUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1zLHRoaXMudHlwZT1uZXcgRVB0fXNldChzLHUpe3JldHVybiB0aGlzLmNvbG9yPXUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1zLHRoaXMudHlwZS50eXBlPU9nLkFMTCx0aGlzfV9lbnN1cmVIU0woKXtjb25zdCBzPXRoaXMuZGF0YSx7aDp1LHM6ZCxsOnB9PXM7dT09PXZvaWQgMCYmKHMuaD1XYS5jaGFubmVsLnJnYjJoc2wocywiaCIpKSxkPT09dm9pZCAwJiYocy5zPVdhLmNoYW5uZWwucmdiMmhzbChzLCJzIikpLHA9PT12b2lkIDAmJihzLmw9V2EuY2hhbm5lbC5yZ2IyaHNsKHMsImwiKSl9X2Vuc3VyZVJHQigpe2NvbnN0IHM9dGhpcy5kYXRhLHtyOnUsZzpkLGI6cH09czt1PT09dm9pZCAwJiYocy5yPVdhLmNoYW5uZWwuaHNsMnJnYihzLCJyIikpLGQ9PT12b2lkIDAmJihzLmc9V2EuY2hhbm5lbC5oc2wycmdiKHMsImciKSkscD09PXZvaWQgMCYmKHMuYj1XYS5jaGFubmVsLmhzbDJyZ2IocywiYiIpKX1nZXQgcigpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5yO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuSFNMKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVIU0woKSxXYS5jaGFubmVsLmhzbDJyZ2IocywiciIpKX1nZXQgZygpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5nO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuSFNMKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVIU0woKSxXYS5jaGFubmVsLmhzbDJyZ2IocywiZyIpKX1nZXQgYigpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5iO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuSFNMKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVIU0woKSxXYS5jaGFubmVsLmhzbDJyZ2IocywiYiIpKX1nZXQgaCgpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5oO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuUkdCKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVSR0IoKSxXYS5jaGFubmVsLnJnYjJoc2wocywiaCIpKX1nZXQgcygpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5zO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuUkdCKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVSR0IoKSxXYS5jaGFubmVsLnJnYjJoc2wocywicyIpKX1nZXQgbCgpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5sO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuUkdCKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVSR0IoKSxXYS5jaGFubmVsLnJnYjJoc2wocywibCIpKX1nZXQgYSgpe3JldHVybiB0aGlzLmRhdGEuYX1zZXQgcihzKXt0aGlzLnR5cGUuc2V0KE9nLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPXN9c2V0IGcocyl7dGhpcy50eXBlLnNldChPZy5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz1zfXNldCBiKHMpe3RoaXMudHlwZS5zZXQoT2cuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9c31zZXQgaChzKXt0aGlzLnR5cGUuc2V0KE9nLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPXN9c2V0IHMocyl7dGhpcy50eXBlLnNldChPZy5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz1zfXNldCBsKHMpe3RoaXMudHlwZS5zZXQoT2cuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9c31zZXQgYShzKXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9c319Y29uc3QgQ1B0PVRQdCx3WD1uZXcgQ1B0KHtyOjAsZzowLGI6MCxhOjB9LCJ0cmFuc3BhcmVudCIpLFRSZT17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTppPT57aWYoaS5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuO2NvbnN0IHM9aS5tYXRjaChUUmUucmUpO2lmKCFzKXJldHVybjtjb25zdCB1PXNbMV0sZD1wYXJzZUludCh1LDE2KSxwPXUubGVuZ3RoLHY9cCU0PT09MCxiPXA+NCx5PWI/MToxNyxUPWI/ODo0LF89dj8wOi0xLEE9Yj8yNTU6MTU7cmV0dXJuIHdYLnNldCh7cjooZD4+VCooXyszKSZBKSp5LGc6KGQ+PlQqKF8rMikmQSkqeSxiOihkPj5UKihfKzEpJkEpKnksYTp2PyhkJkEpKnkvMjU1OjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6cyxnOnUsYjpkLGE6cH09aTtyZXR1cm4gcDwxP2AjJHt2OVtNYXRoLnJvdW5kKHMpXX0ke3Y5W01hdGgucm91bmQodSldfSR7djlbTWF0aC5yb3VuZChkKV19JHt2OVtNYXRoLnJvdW5kKHAqMjU1KV19YDpgIyR7djlbTWF0aC5yb3VuZChzKV19JHt2OVtNYXRoLnJvdW5kKHUpXX0ke3Y5W01hdGgucm91bmQoZCldfWB9fSxWRj1UUmUseVg9e3JlOi9eaHNsYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyglKT8pKT9ccyo/XCkkL2ksaHVlUmU6L14oLis/KShkZWd8Z3JhZHxyYWR8dHVybikkL2ksX2h1ZTJkZWc6aT0+e2NvbnN0IHM9aS5tYXRjaCh5WC5odWVSZSk7aWYocyl7Y29uc3RbLHUsZF09cztzd2l0Y2goZCl7Y2FzZSJncmFkIjpyZXR1cm4gV2EuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQodSkqLjkpO2Nhc2UicmFkIjpyZXR1cm4gV2EuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQodSkqMTgwL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIFdhLmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KHUpKjM2MCl9fXJldHVybiBXYS5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChpKSl9LHBhcnNlOmk9Pntjb25zdCBzPWkuY2hhckNvZGVBdCgwKTtpZihzIT09MTA0JiZzIT09NzIpcmV0dXJuO2NvbnN0IHU9aS5tYXRjaCh5WC5yZSk7aWYoIXUpcmV0dXJuO2NvbnN0WyxkLHAsdixiLHldPXU7cmV0dXJuIHdYLnNldCh7aDp5WC5faHVlMmRlZyhkKSxzOldhLmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHApKSxsOldhLmNoYW5uZWwuY2xhbXAubChwYXJzZUZsb2F0KHYpKSxhOmI/V2EuY2hhbm5lbC5jbGFtcC5hKHk/cGFyc2VGbG9hdChiKS8xMDA6cGFyc2VGbG9hdChiKSk6MX0saSl9LHN0cmluZ2lmeTppPT57Y29uc3R7aDpzLHM6dSxsOmQsYTpwfT1pO3JldHVybiBwPDE/YGhzbGEoJHtXYS5sYW5nLnJvdW5kKHMpfSwgJHtXYS5sYW5nLnJvdW5kKHUpfSUsICR7V2EubGFuZy5yb3VuZChkKX0lLCAke3B9KWA6YGhzbCgke1dhLmxhbmcucm91bmQocyl9LCAke1dhLmxhbmcucm91bmQodSl9JSwgJHtXYS5sYW5nLnJvdW5kKGQpfSUpYH19LHhYPXlYLGtYPXtjb2xvcnM6e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbmFxdWE6IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsdGFuOiIjZDJiNDhjIix0ZWFsOiIjMDA4MDgwIix0aGlzdGxlOiIjZDhiZmQ4Iix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIn0scGFyc2U6aT0+e2k9aS50b0xvd2VyQ2FzZSgpO2NvbnN0IHM9a1guY29sb3JzW2ldO2lmKHMpcmV0dXJuIFZGLnBhcnNlKHMpfSxzdHJpbmdpZnk6aT0+e2NvbnN0IHM9VkYuc3RyaW5naWZ5KGkpO2Zvcihjb25zdCB1IGluIGtYLmNvbG9ycylpZihrWC5jb2xvcnNbdV09PT1zKXJldHVybiB1fX0sQ1JlPWtYLFNSZT17cmU6L15yZ2JhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKT9ccyo/XCkkL2kscGFyc2U6aT0+e2NvbnN0IHM9aS5jaGFyQ29kZUF0KDApO2lmKHMhPT0xMTQmJnMhPT04MilyZXR1cm47Y29uc3QgdT1pLm1hdGNoKFNSZS5yZSk7aWYoIXUpcmV0dXJuO2NvbnN0WyxkLHAsdixiLHksVCxfLEFdPXU7cmV0dXJuIHdYLnNldCh7cjpXYS5jaGFubmVsLmNsYW1wLnIocD9wYXJzZUZsb2F0KGQpKjIuNTU6cGFyc2VGbG9hdChkKSksZzpXYS5jaGFubmVsLmNsYW1wLmcoYj9wYXJzZUZsb2F0KHYpKjIuNTU6cGFyc2VGbG9hdCh2KSksYjpXYS5jaGFubmVsLmNsYW1wLmIoVD9wYXJzZUZsb2F0KHkpKjIuNTU6cGFyc2VGbG9hdCh5KSksYTpfP1dhLmNoYW5uZWwuY2xhbXAuYShBP3BhcnNlRmxvYXQoXykvMTAwOnBhcnNlRmxvYXQoXykpOjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6cyxnOnUsYjpkLGE6cH09aTtyZXR1cm4gcDwxP2ByZ2JhKCR7V2EubGFuZy5yb3VuZChzKX0sICR7V2EubGFuZy5yb3VuZCh1KX0sICR7V2EubGFuZy5yb3VuZChkKX0sICR7V2EubGFuZy5yb3VuZChwKX0pYDpgcmdiKCR7V2EubGFuZy5yb3VuZChzKX0sICR7V2EubGFuZy5yb3VuZCh1KX0sICR7V2EubGFuZy5yb3VuZChkKX0pYH19LEVYPVNSZSxPMz17Zm9ybWF0OntrZXl3b3JkOkNSZSxoZXg6VkYscmdiOkVYLHJnYmE6RVgsaHNsOnhYLGhzbGE6eFh9LHBhcnNlOmk9PntpZih0eXBlb2YgaSE9InN0cmluZyIpcmV0dXJuIGk7Y29uc3Qgcz1WRi5wYXJzZShpKXx8RVgucGFyc2UoaSl8fHhYLnBhcnNlKGkpfHxDUmUucGFyc2UoaSk7aWYocylyZXR1cm4gczt0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIiR7aX0iYCl9LHN0cmluZ2lmeTppPT4haS5jaGFuZ2VkJiZpLmNvbG9yP2kuY29sb3I6aS50eXBlLmlzKE9nLkhTTCl8fGkuZGF0YS5yPT09dm9pZCAwP3hYLnN0cmluZ2lmeShpKTppLmE8MXx8IU51bWJlci5pc0ludGVnZXIoaS5yKXx8IU51bWJlci5pc0ludGVnZXIoaS5nKXx8IU51bWJlci5pc0ludGVnZXIoaS5iKT9FWC5zdHJpbmdpZnkoaSk6VkYuc3RyaW5naWZ5KGkpfSxfUmU9KGkscyk9Pntjb25zdCB1PU8zLnBhcnNlKGkpO2Zvcihjb25zdCBkIGluIHMpdVtkXT1XYS5jaGFubmVsLmNsYW1wW2RdKHNbZF0pO3JldHVybiBPMy5zdHJpbmdpZnkodSl9LFNDPShpLHMsdT0wLGQ9MSk9PntpZih0eXBlb2YgaSE9Im51bWJlciIpcmV0dXJuIF9SZShpLHthOnN9KTtjb25zdCBwPXdYLnNldCh7cjpXYS5jaGFubmVsLmNsYW1wLnIoaSksZzpXYS5jaGFubmVsLmNsYW1wLmcocyksYjpXYS5jaGFubmVsLmNsYW1wLmIodSksYTpXYS5jaGFubmVsLmNsYW1wLmEoZCl9KTtyZXR1cm4gTzMuc3RyaW5naWZ5KHApfSxBUmU9KGkscyk9PldhLmxhbmcucm91bmQoTzMucGFyc2UoaSlbc10pLFNQdD1pPT57Y29uc3R7cjpzLGc6dSxiOmR9PU8zLnBhcnNlKGkpLHA9LjIxMjYqV2EuY2hhbm5lbC50b0xpbmVhcihzKSsuNzE1MipXYS5jaGFubmVsLnRvTGluZWFyKHUpKy4wNzIyKldhLmNoYW5uZWwudG9MaW5lYXIoZCk7cmV0dXJuIFdhLmxhbmcucm91bmQocCl9LF9QdD1pPT5TUHQoaSk+PS41LF9DPWk9PiFfUHQoaSksTFJlPShpLHMsdSk9Pntjb25zdCBkPU8zLnBhcnNlKGkpLHA9ZFtzXSx2PVdhLmNoYW5uZWwuY2xhbXBbc10ocCt1KTtyZXR1cm4gcCE9PXYmJihkW3NdPXYpLE8zLnN0cmluZ2lmeShkKX0sR3M9KGkscyk9PkxSZShpLCJsIixzKSxmYT0oaSxzKT0+TFJlKGksImwiLC1zKSxJbj0oaSxzKT0+e2NvbnN0IHU9TzMucGFyc2UoaSksZD17fTtmb3IoY29uc3QgcCBpbiBzKXNbcF0mJihkW3BdPXVbcF0rc1twXSk7cmV0dXJuIF9SZShpLGQpfSxBUHQ9KGkscyx1PTUwKT0+e2NvbnN0e3I6ZCxnOnAsYjp2LGE6Yn09TzMucGFyc2UoaSkse3I6eSxnOlQsYjpfLGE6QX09TzMucGFyc2UocyksUD11LzEwMCxSPVAqMi0xLEY9Yi1BLEs9KChSKkY9PT0tMT9SOihSK0YpLygxK1IqRikpKzEpLzIsZWU9MS1LLGllPWQqSyt5KmVlLG9lPXAqSytUKmVlLHBlPXYqSytfKmVlLGJlPWIqUCtBKigxLVApO3JldHVybiBTQyhpZSxvZSxwZSxiZSl9LFZpPShpLHM9MTAwKT0+e2NvbnN0IHU9TzMucGFyc2UoaSk7cmV0dXJuIHUucj0yNTUtdS5yLHUuZz0yNTUtdS5nLHUuYj0yNTUtdS5iLEFQdCh1LGkscyl9LFRwPShpLHMpPT5zP0luKGkse3M6LTQwLGw6MTB9KTpJbihpLHtzOi00MCxsOi0xMH0pLFRYPSIjZmZmZmZmIixDWD0iI2YyZjJmMiI7bGV0IExQdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5wcmltYXJ5Q29sb3I9IiNmZmY0ZGQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9IiMzMzMiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgifXVwZGF0ZUNvbG9ycygpe3ZhciB1LGQscCx2LGIseSxULF8sQSxQLFI7aWYodGhpcy5wcmltYXJ5VGV4dENvbG9yPXRoaXMucHJpbWFyeVRleHRDb2xvcnx8KHRoaXMuZGFya01vZGU/IiNlZWUiOiIjMzMzIiksdGhpcy5zZWNvbmRhcnlDb2xvcj10aGlzLnNlY29uZGFyeUNvbG9yfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotMTIwfSksdGhpcy50ZXJ0aWFyeUNvbG9yPXRoaXMudGVydGlhcnlDb2xvcnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTgwLGw6NX0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yfHxUcCh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPXRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3J8fFRwKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPXRoaXMudGVydGlhcnlCb3JkZXJDb2xvcnx8VHAodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMubm90ZUJvcmRlckNvbG9yfHxUcCh0aGlzLm5vdGVCa2dDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCa2dDb2xvcj10aGlzLm5vdGVCa2dDb2xvcnx8IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLm5vdGVUZXh0Q29sb3J8fCIjMzMzIix0aGlzLnNlY29uZGFyeVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcnx8VmkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj10aGlzLnRlcnRpYXJ5VGV4dENvbG9yfHxWaSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXRoaXMubGluZUNvbG9yfHxWaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5hcnJvd2hlYWRDb2xvcnx8VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYm9yZGVyMj10aGlzLmJvcmRlcjJ8fHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5ub2RlQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm1haW5Ca2c9dGhpcy5tYWluQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm5vZGVCb3JkZXI9dGhpcy5ub2RlQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmNsdXN0ZXJCa2c9dGhpcy5jbHVzdGVyQmtnfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuY2x1c3RlckJvcmRlcnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmRlZmF1bHRMaW5rQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRpdGxlQ29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/ZmEodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5ub2RlVGV4dENvbG9yPXRoaXMubm9kZVRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JCb3JkZXI9dGhpcy5hY3RvckJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hY3RvckJrZz10aGlzLmFjdG9yQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yTGluZUNvbG9yfHwiZ3JleSIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMubGFiZWxCb3hCa2dDb2xvcnx8dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMuc2lnbmFsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMuc2lnbmFsVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5sYWJlbEJveEJvcmRlckNvbG9yfHx0aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5sYWJlbFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5sb29wVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPXRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yfHxmYSh0aGlzLnNlY29uZGFyeUNvbG9yLDEwKSx0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj10aGlzLmFjdGl2YXRpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9dGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yfHxWaSh0aGlzLmxpbmVDb2xvciksdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj10aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcnx8IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9dGhpcy5zZWN0aW9uQmtnQ29sb3IyfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj10aGlzLmV4Y2x1ZGVCa2dDb2xvcnx8IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhc2tCa2dDb2xvcj10aGlzLnRhc2tCa2dDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yfHxHcyh0aGlzLnByaW1hcnlDb2xvciwyMyksdGhpcy5ncmlkQ29sb3I9dGhpcy5ncmlkQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmVUYXNrQmtnQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3J8fCJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj10aGlzLmNyaXRCb3JkZXJDb2xvcnx8IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yfHwicmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMudG9kYXlMaW5lQ29sb3J8fCJyZWQiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj10aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J8fCIjMDAzMTYzIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnBlcnNvbkJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5wZXJzb25Ca2d8fHRoaXMubWFpbkJrZyx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMCxsOjE1MH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmRhcmtNb2RlKWZvcihsZXQgRj0wO0Y8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtGKyspdGhpc1siY1NjYWxlIitGXT1mYSh0aGlzWyJjU2NhbGUiK0ZdLDc1KTtlbHNlIGZvcihsZXQgRj0wO0Y8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtGKyspdGhpc1siY1NjYWxlIitGXT1mYSh0aGlzWyJjU2NhbGUiK0ZdLDI1KTtmb3IobGV0IEY9MDtGPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7RisrKXRoaXNbImNTY2FsZUludiIrRl09dGhpc1siY1NjYWxlSW52IitGXXx8VmkodGhpc1siY1NjYWxlIitGXSk7Zm9yKGxldCBGPTA7Rjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO0YrKyl0aGlzLmRhcmtNb2RlP3RoaXNbImNTY2FsZVBlZXIiK0ZdPXRoaXNbImNTY2FsZVBlZXIiK0ZdfHxHcyh0aGlzWyJjU2NhbGUiK0ZdLDEwKTp0aGlzWyJjU2NhbGVQZWVyIitGXT10aGlzWyJjU2NhbGVQZWVyIitGXXx8ZmEodGhpc1siY1NjYWxlIitGXSwxMCk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fHRoaXMubGFiZWxUZXh0Q29sb3I7Zm9yKGxldCBGPTA7Rjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO0YrKyl0aGlzWyJjU2NhbGVMYWJlbCIrRl09dGhpc1siY1NjYWxlTGFiZWwiK0ZdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtjb25zdCBzPXRoaXMuZGFya01vZGU/LTQ6LTE7Zm9yKGxldCBGPTA7Rjw1O0YrKyl0aGlzWyJzdXJmYWNlIitGXT10aGlzWyJzdXJmYWNlIitGXXx8SW4odGhpcy5tYWluQmtnLHtoOjE4MCxzOi0xNSxsOnMqKDUrRiozKX0pLHRoaXNbInN1cmZhY2VQZWVyIitGXT10aGlzWyJzdXJmYWNlUGVlciIrRl18fEluKHRoaXMubWFpbkJrZyx7aDoxODAsczotMTUsbDpzKig4K0YqMyl9KTt0aGlzLmNsYXNzVGV4dD10aGlzLmNsYXNzVGV4dHx8dGhpcy50ZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5maWxsVHlwZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuZmlsbFR5cGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPXRoaXMuZmlsbFR5cGUyfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPXRoaXMuZmlsbFR5cGUzfHxJbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9dGhpcy5maWxsVHlwZTR8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PXRoaXMuZmlsbFR5cGU1fHxJbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PXRoaXMuZmlsbFR5cGU2fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz10aGlzLmZpbGxUeXBlN3x8SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLnBpZTQ9dGhpcy5waWU0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHxJbih0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fEluKHRoaXMudGVydGlhcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0xMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0xMH0pLHRoaXMucGllOT10aGlzLnBpZTl8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOjB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMjB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi0xMH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8X0ModGhpcy5xdWFkcmFudDFGaWxsKT9Hcyh0aGlzLnF1YWRyYW50MUZpbGwpOmZhKHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOigodT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp1LmJhY2tncm91bmRDb2xvcil8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOigoZD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpkLnRpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOigocD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnhBeGlzVGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6KCh2PXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnYueEF4aXNMYWJlbENvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOigoYj10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzVGlja0NvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOigoeT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp5LnhBeGlzTGluZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjooKFQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6VC55QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOigoXz10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpfLnlBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjooKEE9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6QS55QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjooKFA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6UC55QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOigoUj10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpSLnBsb3RDb2xvclBhbGV0dGUpfHwiI0ZGRjRERCwjRkZEOEIxLCNGRkEwN0EsI0VDRUZGMSwjRDZEQkRGLCNDM0UwQTgsI0ZGQjZBNCwjRkZENzRELCM3MzhGQTcsI0ZGRkZGMCJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/ZmEodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPXRoaXMuZ2l0MHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMuZ2l0MXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5naXQyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMuZ2l0M3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMuZ2l0NHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMuZ2l0NXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMuZ2l0Nnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5naXQ3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmRhcmtNb2RlPyh0aGlzLmdpdDA9R3ModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9R3ModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9R3ModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9R3ModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9R3ModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9R3ModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9R3ModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9R3ModGhpcy5naXQ3LDI1KSk6KHRoaXMuZ2l0MD1mYSh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1mYSh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1mYSh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1mYSh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1mYSh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1mYSh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1mYSh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1mYSh0aGlzLmdpdDcsMjUpKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxWaSh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fFZpKHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8VmkodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxWaSh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fFZpKHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8VmkodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxWaSh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fFZpKHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxUWCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxDWH1jYWxjdWxhdGUocyl7aWYodHlwZW9mIHMhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCB1PU9iamVjdC5rZXlzKHMpO3UuZm9yRWFjaChkPT57dGhpc1tkXT1zW2RdfSksdGhpcy51cGRhdGVDb2xvcnMoKSx1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pfX07Y29uc3QgTVB0PWk9Pntjb25zdCBzPW5ldyBMUHQ7cmV0dXJuIHMuY2FsY3VsYXRlKGkpLHN9O2xldCBEUHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiMzMzMiLHRoaXMucHJpbWFyeUNvbG9yPSIjMWYyMDIwIix0aGlzLnNlY29uZGFyeUNvbG9yPUdzKHRoaXMucHJpbWFyeUNvbG9yLDE2KSx0aGlzLnRlcnRpYXJ5Q29sb3I9SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVZpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPVZpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1WaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPVZpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1WaSh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iIzFmMjAyMCIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubWFpbkNvbnRyYXN0Q29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kYXJrVGV4dENvbG9yPUdzKFZpKCIjMzIzRDQ3IiksMTApLHRoaXMubGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmJvcmRlcjE9IiM4MUIxREIiLHRoaXMuYm9yZGVyMj1TQygyNTUsMjU1LDI1NSwuMjUpLHRoaXMuYXJyb3doZWFkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iIzE4MTgxOCIsdGhpcy50ZXh0Q29sb3I9IiNjY2MiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iI0Y5RkZGRSIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJibGFjayIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ZmEoIiNFQUU4RDkiLDMwKSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjRUFFOEQ5Iix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj1mYSh0aGlzLnNlY3Rpb25Ca2dDb2xvciwxMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9U0MoMjU1LDI1NSwyNTUsNzApLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPVNDKDI1NSwyNTUsMjU1LDUwKSx0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iIzgxQjFEQiIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI0U4MzczNyIsdGhpcy5jcml0QmtnQ29sb3I9IiNFODM3MzciLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9IiNEQjU3NTciLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZXJyb3JCa2dDb2xvcj0iI2E0NDE0MSIsdGhpcy5lcnJvclRleHRDb2xvcj0iI2RkZCJ9dXBkYXRlQ29sb3JzKCl7dmFyIHMsdSxkLHAsdixiLHksVCxfLEEsUDt0aGlzLnNlY29uZEJrZz1Hcyh0aGlzLm1haW5Ca2csMTYpLHRoaXMubGluZUNvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hcnJvd2hlYWRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPUdzKHRoaXMubGFiZWxCYWNrZ3JvdW5kLDI1KSx0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5iYWNrZ3JvdW5kLHRoaXMudGFza0JrZ0NvbG9yPUdzKHRoaXMubWFpbkJrZywyMyksdGhpcy50YXNrVGV4dENvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy5ncmlkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiIzU1NSIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9IiNmNGY0ZjQiLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1Jbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8IiMwYjAwMDAiLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fCIjNGQxMDM3Iix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHwiIzNmNTI1OCIsdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8IiM0ZjJmMWIiLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fCIjNmUwYTBhIix0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHwiIzNiMDA0OCIsdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8IiM5OTVhMDEiLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fCIjMTU0NzA2Iix0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHwiIzE2MTcyMiIsdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHwiIzAwMjk2ZiIsdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHwiIzAxNjI5YyIsdGhpcy5jU2NhbGUxMj10aGlzLmNTY2FsZTEyfHwiIzAxMDAyOSIsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pO2ZvcihsZXQgUj0wO1I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtSKyspdGhpc1siY1NjYWxlSW52IitSXT10aGlzWyJjU2NhbGVJbnYiK1JdfHxWaSh0aGlzWyJjU2NhbGUiK1JdKTtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbImNTY2FsZVBlZXIiK1JdPXRoaXNbImNTY2FsZVBlZXIiK1JdfHxHcyh0aGlzWyJjU2NhbGUiK1JdLDEwKTtmb3IobGV0IFI9MDtSPDU7UisrKXRoaXNbInN1cmZhY2UiK1JdPXRoaXNbInN1cmZhY2UiK1JdfHxJbih0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKC0xMCtSKjQpfSksdGhpc1sic3VyZmFjZVBlZXIiK1JdPXRoaXNbInN1cmZhY2VQZWVyIitSXXx8SW4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSgtNytSKjQpfSk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvcik7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVMYWJlbCIrUl09dGhpc1siY1NjYWxlTGFiZWwiK1JdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbInBpZSIrUl09dGhpc1siY1NjYWxlIitSXTt0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fF9DKHRoaXMucXVhZHJhbnQxRmlsbCk/R3ModGhpcy5xdWFkcmFudDFGaWxsKTpmYSh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjooKHM9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6cy5iYWNrZ3JvdW5kQ29sb3IpfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjooKHU9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dS50aXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjooKGQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6ZC54QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOigocD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnhBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjooKHY9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6di54QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjooKGI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Yi54QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6KCh5PXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnkueUF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjooKFQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6VC55QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6KChBPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkEueUF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTooKFA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6UC5wbG90Q29sb3JQYWxldHRlKXx8IiMzNDk4ZGIsIzJlY2M3MSwjZTc0YzNjLCNmMWM0MGYsI2JkYzNjNywjZmZmZmZmLCMzNDQ5NWUsIzliNTliNiwjMWFiYzljLCNlNjdlMjIifSx0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT9mYSh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9R3ModGhpcy5zZWNvbmRhcnlDb2xvciwyMCksdGhpcy5naXQxPUdzKHRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvciwyMCksdGhpcy5naXQyPUdzKHRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLDIwKSx0aGlzLmdpdDM9R3ModGhpcy5waWU0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSwyMCksdGhpcy5naXQ0PUdzKHRoaXMucGllNXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksMjApLHRoaXMuZ2l0NT1Hcyh0aGlzLnBpZTZ8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLDEwKSx0aGlzLmdpdDY9R3ModGhpcy5waWU3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLDEwKSx0aGlzLmdpdDc9R3ModGhpcy5waWU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSwyMCksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8VmkodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxWaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fFZpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8VmkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxWaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fFZpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8VmkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxWaSh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHxWaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8VmkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxHcyh0aGlzLmJhY2tncm91bmQsMTIpLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fEdzKHRoaXMuYmFja2dyb3VuZCwyKX1jYWxjdWxhdGUocyl7aWYodHlwZW9mIHMhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCB1PU9iamVjdC5rZXlzKHMpO3UuZm9yRWFjaChkPT57dGhpc1tkXT1zW2RdfSksdGhpcy51cGRhdGVDb2xvcnMoKSx1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pfX07Y29uc3QgSVB0PWk9Pntjb25zdCBzPW5ldyBEUHQ7cmV0dXJuIHMuY2FsY3VsYXRlKGkpLHN9O2xldCBPUHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjRUNFQ0ZGIix0aGlzLnNlY29uZGFyeUNvbG9yPUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNmZmZmZGUiLHRoaXMudGVydGlhcnlDb2xvcj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9VHAodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPVZpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1WaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPVZpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1WaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI0VDRUNGRiIsdGhpcy5zZWNvbmRCa2c9IiNmZmZmZGUiLHRoaXMubGluZUNvbG9yPSIjMzMzMzMzIix0aGlzLmJvcmRlcjE9IiM5MzcwREIiLHRoaXMuYm9yZGVyMj0iI2FhYWEzMyIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLnRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9U0MoMTAyLDEwMiwyNTUsLjQ5KSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI2ZmZjQwMCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMudGFza0JrZ0NvbG9yPSIjOGE5MGRkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjYmZjN2ZmIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXVwZGF0ZUNvbG9ycygpe3ZhciBzLHUsZCxwLHYsYix5LFQsXyxBLFA7dGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pLHRoaXNbImNTY2FsZVBlZXIxIl09dGhpc1siY1NjYWxlUGVlcjEiXXx8ZmEodGhpcy5zZWNvbmRhcnlDb2xvciw0NSksdGhpc1siY1NjYWxlUGVlcjIiXT10aGlzWyJjU2NhbGVQZWVyMiJdfHxmYSh0aGlzLnRlcnRpYXJ5Q29sb3IsNDApO2ZvcihsZXQgUj0wO1I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtSKyspdGhpc1siY1NjYWxlIitSXT1mYSh0aGlzWyJjU2NhbGUiK1JdLDEwKSx0aGlzWyJjU2NhbGVQZWVyIitSXT10aGlzWyJjU2NhbGVQZWVyIitSXXx8ZmEodGhpc1siY1NjYWxlIitSXSwyNSk7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVJbnYiK1JdPXRoaXNbImNTY2FsZUludiIrUl18fEluKHRoaXNbImNTY2FsZSIrUl0se2g6MTgwfSk7Zm9yKGxldCBSPTA7Ujw1O1IrKyl0aGlzWyJzdXJmYWNlIitSXT10aGlzWyJzdXJmYWNlIitSXXx8SW4odGhpcy5tYWluQmtnLHtoOjMwLGw6LSg1K1IqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrUl09dGhpc1sic3VyZmFjZVBlZXIiK1JdfHxJbih0aGlzLm1haW5Ca2cse2g6MzAsbDotKDcrUio1KX0pO2lmKHRoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yIT09ImNhbGN1bGF0ZWQiJiZ0aGlzLnNjYWxlTGFiZWxDb2xvcj90aGlzLnNjYWxlTGFiZWxDb2xvcjp0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMubGFiZWxUZXh0Q29sb3IhPT0iY2FsY3VsYXRlZCIpe3RoaXMuY1NjYWxlTGFiZWwwPXRoaXMuY1NjYWxlTGFiZWwwfHxWaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmNTY2FsZUxhYmVsMz10aGlzLmNTY2FsZUxhYmVsM3x8VmkodGhpcy5sYWJlbFRleHRDb2xvcik7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVMYWJlbCIrUl09dGhpc1siY1NjYWxlTGFiZWwiK1JdfHx0aGlzLmxhYmVsVGV4dENvbG9yfXRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD10aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLmFjdG9yQm9yZGVyPUdzKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1Jbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHxJbih0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTQwfSksdGhpcy5waWU0PXRoaXMucGllNHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxJbih0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTIwfSksdGhpcy5waWU3PXRoaXMucGllN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNDB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNDB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTQwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotOTAsbDotNDB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi0zMH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8X0ModGhpcy5xdWFkcmFudDFGaWxsKT9Hcyh0aGlzLnF1YWRyYW50MUZpbGwpOmZhKHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOigocz10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpzLmJhY2tncm91bmRDb2xvcil8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOigodT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp1LnRpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOigoZD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpkLnhBeGlzVGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6KChwPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnAueEF4aXNMYWJlbENvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOigodj10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp2LnhBeGlzVGlja0NvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOigoYj10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzTGluZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjooKHk9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6eS55QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOigoVD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpULnlBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjooKF89dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Xy55QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjooKEE9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6QS55QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOigoUD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpQLnBsb3RDb2xvclBhbGV0dGUpfHwiI0VDRUNGRiwjODQ5M0E2LCNGRkMzQTAsI0RDRERFMSwjQjhFOTk0LCNEMUEzNkYsI0MzQ0RFNiwjRkZCNkMxLCM0OTYwNzgsI0Y4RjNFMyJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPXRoaXMuZ2l0MHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMuZ2l0MXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5naXQyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMuZ2l0M3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMuZ2l0NHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMuZ2l0NXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMuZ2l0Nnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5naXQ3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmRhcmtNb2RlPyh0aGlzLmdpdDA9R3ModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9R3ModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9R3ModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9R3ModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9R3ModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9R3ModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9R3ModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9R3ModGhpcy5naXQ3LDI1KSk6KHRoaXMuZ2l0MD1mYSh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1mYSh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1mYSh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1mYSh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1mYSh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1mYSh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1mYSh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1mYSh0aGlzLmdpdDcsMjUpKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxmYShWaSh0aGlzLmdpdDApLDI1KSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxWaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fFZpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8VmkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxWaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fFZpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8VmkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxWaSh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHxWaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8VmkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxUWCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxDWH1jYWxjdWxhdGUocyl7aWYodHlwZW9mIHMhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCB1PU9iamVjdC5rZXlzKHMpO3UuZm9yRWFjaChkPT57dGhpc1tkXT1zW2RdfSksdGhpcy51cGRhdGVDb2xvcnMoKSx1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pfX07Y29uc3QgZjJlPWk9Pntjb25zdCBzPW5ldyBPUHQ7cmV0dXJuIHMuY2FsY3VsYXRlKGkpLHN9O2xldCBOUHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjY2RlNDk4Iix0aGlzLnNlY29uZGFyeUNvbG9yPSIjY2RmZmIyIix0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNjZGU0OTgiLHRoaXMuc2Vjb25kQmtnPSIjY2RmZmIyIix0aGlzLmxpbmVDb2xvcj0iZ3JlZW4iLHRoaXMuYm9yZGVyMT0iIzEzNTQwYyIsdGhpcy5ib3JkZXIyPSIjNmVhYTQ5Iix0aGlzLmFycm93aGVhZENvbG9yPSJncmVlbiIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMudGVydGlhcnlDb2xvcj1HcygiI2NkZTQ5OCIsMTApLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVRwKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9VHAodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9VHAodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1WaSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9VmkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1WaSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5saW5lQ29sb3I9VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1WaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iIzMzMyIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iZ3JleSIsdGhpcy5zaWduYWxDb2xvcj0iIzMzMyIsdGhpcy5zaWduYWxUZXh0Q29sb3I9IiMzMzMiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSIjMzI2OTMyIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSIjNmVhYTQ5Iix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iIzZlYWE0OSIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iIzQ4N2UzYSIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dXBkYXRlQ29sb3JzKCl7dmFyIHMsdSxkLHAsdixiLHksVCxfLEEsUDt0aGlzLmFjdG9yQm9yZGVyPWZhKHRoaXMubWFpbkJrZywyMCksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoyMTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSksdGhpc1siY1NjYWxlUGVlcjEiXT10aGlzWyJjU2NhbGVQZWVyMSJdfHxmYSh0aGlzLnNlY29uZGFyeUNvbG9yLDQ1KSx0aGlzWyJjU2NhbGVQZWVyMiJdPXRoaXNbImNTY2FsZVBlZXIyIl18fGZhKHRoaXMudGVydGlhcnlDb2xvciw0MCk7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGUiK1JdPWZhKHRoaXNbImNTY2FsZSIrUl0sMTApLHRoaXNbImNTY2FsZVBlZXIiK1JdPXRoaXNbImNTY2FsZVBlZXIiK1JdfHxmYSh0aGlzWyJjU2NhbGUiK1JdLDI1KTtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbImNTY2FsZUludiIrUl09dGhpc1siY1NjYWxlSW52IitSXXx8SW4odGhpc1siY1NjYWxlIitSXSx7aDoxODB9KTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvciE9PSJjYWxjdWxhdGVkIiYmdGhpcy5zY2FsZUxhYmVsQ29sb3I/dGhpcy5zY2FsZUxhYmVsQ29sb3I6dGhpcy5sYWJlbFRleHRDb2xvcjtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbImNTY2FsZUxhYmVsIitSXT10aGlzWyJjU2NhbGVMYWJlbCIrUl18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgUj0wO1I8NTtSKyspdGhpc1sic3VyZmFjZSIrUl09dGhpc1sic3VyZmFjZSIrUl18fEluKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oNStSKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK1JdPXRoaXNbInN1cmZhY2VQZWVyIitSXXx8SW4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSg4K1IqNSl9KTt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMuYm9yZGVyMSx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1Jbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1Jbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fEluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8SW4odGhpcy50ZXJ0aWFyeUNvbG9yLHtoOjQwLGw6LTQwfSksdGhpcy5waWU3PXRoaXMucGllN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi01MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTUwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fF9DKHRoaXMucXVhZHJhbnQxRmlsbCk/R3ModGhpcy5xdWFkcmFudDFGaWxsKTpmYSh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjooKHM9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6cy5iYWNrZ3JvdW5kQ29sb3IpfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjooKHU9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dS50aXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjooKGQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6ZC54QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOigocD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnhBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjooKHY9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6di54QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjooKGI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Yi54QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6KCh5PXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnkueUF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjooKFQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6VC55QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6KChBPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkEueUF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTooKFA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6UC5wbG90Q29sb3JQYWxldHRlKXx8IiNDREU0OTgsI0ZGNkI2QiwjQTBEMkRCLCNEN0JERTIsI0YwRjBGMCwjRkZDM0EwLCM3RkQ4QkUsI0ZGOUE4QiwjRkFGM0UwLCNGRkYxNzYifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1Hcyh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1Hcyh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1Hcyh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1Hcyh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1Hcyh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1Hcyh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1Hcyh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1Hcyh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPWZhKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPWZhKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPWZhKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPWZhKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PWZhKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PWZhKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PWZhKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PWZhKHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fFZpKHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8VmkodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxWaSh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fFZpKHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8VmkodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxWaSh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fFZpKHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8VmkodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8VmkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fFZpKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8VFgsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8Q1h9Y2FsY3VsYXRlKHMpe2lmKHR5cGVvZiBzIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgdT1PYmplY3Qua2V5cyhzKTt1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksdS5mb3JFYWNoKGQ9Pnt0aGlzW2RdPXNbZF19KX19O2NvbnN0IFBQdD1pPT57Y29uc3Qgcz1uZXcgTlB0O3JldHVybiBzLmNhbGN1bGF0ZShpKSxzfTtjbGFzcyBCUHR7Y29uc3RydWN0b3IoKXt0aGlzLnByaW1hcnlDb2xvcj0iI2VlZSIsdGhpcy5jb250cmFzdD0iIzcwNzA3MCIsdGhpcy5zZWNvbmRhcnlDb2xvcj1Hcyh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJhY2tncm91bmQ9IiNmZmZmZmYiLHRoaXMudGVydGlhcnlDb2xvcj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9VHAodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPVZpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1WaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPVZpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1WaSh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iI2VlZSIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubGluZUNvbG9yPSIjNjY2Iix0aGlzLmJvcmRlcjE9IiM5OTkiLHRoaXMuYm9yZGVyMj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlPSIjZmZhIix0aGlzLnRleHQ9IiMzMzMiLHRoaXMuY3JpdGljYWw9IiNkNDIiLHRoaXMuZG9uZT0iI2JiYiIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dXBkYXRlQ29sb3JzKCl7dmFyIHMsdSxkLHAsdixiLHksVCxfLEEsUDt0aGlzLnNlY29uZEJrZz1Hcyh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJvcmRlcjI9dGhpcy5jb250cmFzdCx0aGlzLmFjdG9yQm9yZGVyPUdzKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dCx0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLm5vdGVCb3JkZXJDb2xvcj0iIzk5OSIsdGhpcy5ub3RlQmtnQ29sb3I9IiM2NjYiLHRoaXMubm90ZVRleHRDb2xvcj0iI2ZmZiIsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8IiM1NTUiLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fCIjRjRGNEY0Iix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHwiIzU1NSIsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8IiNCQkIiLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fCIjNzc3Iix0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHwiIzk5OSIsdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8IiNEREQiLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fCIjRkZGIix0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHwiI0RERCIsdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8IiNCQkIiLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8IiM5OTkiLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8IiM3NzciO2ZvcihsZXQgUj0wO1I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtSKyspdGhpc1siY1NjYWxlSW52IitSXT10aGlzWyJjU2NhbGVJbnYiK1JdfHxWaSh0aGlzWyJjU2NhbGUiK1JdKTtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXMuZGFya01vZGU/dGhpc1siY1NjYWxlUGVlciIrUl09dGhpc1siY1NjYWxlUGVlciIrUl18fEdzKHRoaXNbImNTY2FsZSIrUl0sMTApOnRoaXNbImNTY2FsZVBlZXIiK1JdPXRoaXNbImNTY2FsZVBlZXIiK1JdfHxmYSh0aGlzWyJjU2NhbGUiK1JdLDEwKTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmNTY2FsZUxhYmVsMD10aGlzLmNTY2FsZUxhYmVsMHx8dGhpcy5jU2NhbGUxLHRoaXMuY1NjYWxlTGFiZWwyPXRoaXMuY1NjYWxlTGFiZWwyfHx0aGlzLmNTY2FsZTE7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVMYWJlbCIrUl09dGhpc1siY1NjYWxlTGFiZWwiK1JdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IFI9MDtSPDU7UisrKXRoaXNbInN1cmZhY2UiK1JdPXRoaXNbInN1cmZhY2UiK1JdfHxJbih0aGlzLm1haW5Ca2cse2w6LSg1K1IqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrUl09dGhpc1sic3VyZmFjZVBlZXIiK1JdfHxJbih0aGlzLm1haW5Ca2cse2w6LSg4K1IqNSl9KTt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHQsdGhpcy5zZWN0aW9uQmtnQ29sb3I9R3ModGhpcy5jb250cmFzdCwzMCksdGhpcy5zZWN0aW9uQmtnQ29sb3IyPUdzKHRoaXMuY29udHJhc3QsMzApLHRoaXMudGFza0JvcmRlckNvbG9yPWZhKHRoaXMuY29udHJhc3QsMTApLHRoaXMudGFza0JrZ0NvbG9yPXRoaXMuY29udHJhc3QsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy50ZXh0LHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Ca2csdGhpcy5ncmlkQ29sb3I9R3ModGhpcy5ib3JkZXIxLDMwKSx0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRpY2FsLHRoaXMuY3JpdEJvcmRlckNvbG9yPWZhKHRoaXMuY3JpdEJrZ0NvbG9yLDEwKSx0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KTtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbInBpZSIrUl09dGhpc1siY1NjYWxlIitSXTt0aGlzLnBpZTEyPXRoaXMucGllMCx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fF9DKHRoaXMucXVhZHJhbnQxRmlsbCk/R3ModGhpcy5xdWFkcmFudDFGaWxsKTpmYSh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjooKHM9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6cy5iYWNrZ3JvdW5kQ29sb3IpfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjooKHU9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dS50aXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjooKGQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6ZC54QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOigocD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnhBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjooKHY9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6di54QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjooKGI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Yi54QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6KCh5PXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnkueUF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjooKFQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6VC55QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6KChBPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkEueUF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTooKFA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6UC5wbG90Q29sb3JQYWxldHRlKXx8IiNFRUUsIzZCQjhFNCwjOEFDQjg4LCNDN0FDRDYsI0U4RENDMiwjRkZCMkE4LCNGRkYzODAsIzdFOEQ5MSwjRkZEOEIxLCNGQUYzRTAifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9ZmEodGhpcy5waWUxLDI1KXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMucGllNHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMucGllNXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMucGllNnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMucGllN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5waWU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxWaSh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fFZpKHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8VmkodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxWaSh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fFZpKHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8VmkodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxWaSh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fFZpKHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDE9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxUWCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxDWH1jYWxjdWxhdGUocyl7aWYodHlwZW9mIHMhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCB1PU9iamVjdC5rZXlzKHMpO3UuZm9yRWFjaChkPT57dGhpc1tkXT1zW2RdfSksdGhpcy51cGRhdGVDb2xvcnMoKSx1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pfX1jb25zdCBFNz17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6TVB0fSxkYXJrOntnZXRUaGVtZVZhcmlhYmxlczpJUHR9LGRlZmF1bHQ6e2dldFRoZW1lVmFyaWFibGVzOmYyZX0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczpQUHR9LG5ldXRyYWw6e2dldFRoZW1lVmFyaWFibGVzOmk9Pntjb25zdCBzPW5ldyBCUHQ7cmV0dXJuIHMuY2FsY3VsYXRlKGkpLHN9fX0sVDc9e2Zsb3djaGFydDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsc3ViR3JhcGhUaXRsZU1hcmdpbjp7dG9wOjAsYm90dG9tOjB9LGRpYWdyYW1QYWRkaW5nOjgsaHRtbExhYmVsczohMCxub2RlU3BhY2luZzo1MCxyYW5rU3BhY2luZzo1MCxjdXJ2ZToiYmFzaXMiLHBhZGRpbmc6MTUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIix3cmFwcGluZ1dpZHRoOjIwMH0sc2VxdWVuY2U6e3VzZU1heFdpZHRoOiEwLGhpZGVVbnVzZWRQYXJ0aWNpcGFudHM6ITEsYWN0aXZhdGlvbldpZHRoOjEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGFjdG9yTWFyZ2luOjUwLHdpZHRoOjE1MCxoZWlnaHQ6NjUsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLG1pcnJvckFjdG9yczohMCxmb3JjZU1lbnVzOiExLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHNob3dTZXF1ZW5jZU51bWJlcnM6ITEsYWN0b3JGb250U2l6ZToxNCxhY3RvckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxhY3RvckZvbnRXZWlnaHQ6NDAwLG5vdGVGb250U2l6ZToxNCxub3RlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxub3RlRm9udFdlaWdodDo0MDAsbm90ZUFsaWduOiJjZW50ZXIiLG1lc3NhZ2VGb250U2l6ZToxNixtZXNzYWdlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDo0MDAsd3JhcDohMSx3cmFwUGFkZGluZzoxMCxsYWJlbEJveFdpZHRoOjUwLGxhYmVsQm94SGVpZ2h0OjIwfSxnYW50dDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsYmFySGVpZ2h0OjIwLGJhckdhcDo0LHRvcFBhZGRpbmc6NTAscmlnaHRQYWRkaW5nOjc1LGxlZnRQYWRkaW5nOjc1LGdyaWRMaW5lU3RhcnRQYWRkaW5nOjM1LGZvbnRTaXplOjExLHNlY3Rpb25Gb250U2l6ZToxMSxudW1iZXJTZWN0aW9uU3R5bGVzOjQsYXhpc0Zvcm1hdDoiJVktJW0tJWQiLHRvcEF4aXM6ITEsZGlzcGxheU1vZGU6IiIsd2Vla2RheToic3VuZGF5In0sam91cm5leTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXX0sY2xhc3M6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGFycm93TWFya2VyQWJzb2x1dGU6ITEsZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMCxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIiLGh0bWxMYWJlbHM6ITF9LHN0YXRlOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxkaXZpZGVyTWFyZ2luOjEwLHNpemVVbml0OjUscGFkZGluZzo4LHRleHRIZWlnaHQ6MTAsdGl0bGVTaGlmdDotMTUsbm90ZU1hcmdpbjoxMCxmb3JrV2lkdGg6NzAsZm9ya0hlaWdodDo3LG1pbmlQYWRkaW5nOjIsZm9udFNpemVGYWN0b3I6NS4wMixmb250U2l6ZToyNCxsYWJlbEhlaWdodDoxNixlZGdlTGVuZ3RoRmFjdG9yOiIyMCIsY29tcG9zaXRUaXRsZVNpemU6MzUscmFkaXVzOjUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIn0sZXI6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjIwLGxheW91dERpcmVjdGlvbjoiVEIiLG1pbkVudGl0eVdpZHRoOjEwMCxtaW5FbnRpdHlIZWlnaHQ6NzUsZW50aXR5UGFkZGluZzoxNSxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMn0scGllOnt1c2VNYXhXaWR0aDohMCx0ZXh0UG9zaXRpb246Ljc1fSxxdWFkcmFudENoYXJ0Ont1c2VNYXhXaWR0aDohMCxjaGFydFdpZHRoOjUwMCxjaGFydEhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAscXVhZHJhbnRQYWRkaW5nOjUseEF4aXNMYWJlbFBhZGRpbmc6NSx5QXhpc0xhYmVsUGFkZGluZzo1LHhBeGlzTGFiZWxGb250U2l6ZToxNix5QXhpc0xhYmVsRm9udFNpemU6MTYscXVhZHJhbnRMYWJlbEZvbnRTaXplOjE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6NSxwb2ludFRleHRQYWRkaW5nOjUscG9pbnRMYWJlbEZvbnRTaXplOjEyLHBvaW50UmFkaXVzOjUseEF4aXNQb3NpdGlvbjoidG9wIix5QXhpc1Bvc2l0aW9uOiJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6Mn0seHlDaGFydDp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NzAwLGhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAsc2hvd1RpdGxlOiEwLHhBeGlzOnskcmVmOiIjLyRkZWZzL1hZQ2hhcnRBeGlzQ29uZmlnIixzaG93TGFiZWw6ITAsbGFiZWxGb250U2l6ZToxNCxsYWJlbFBhZGRpbmc6NSxzaG93VGl0bGU6ITAsdGl0bGVGb250U2l6ZToxNix0aXRsZVBhZGRpbmc6NSxzaG93VGljazohMCx0aWNrTGVuZ3RoOjUsdGlja1dpZHRoOjIsc2hvd0F4aXNMaW5lOiEwLGF4aXNMaW5lV2lkdGg6Mn0seUF4aXM6eyRyZWY6IiMvJGRlZnMvWFlDaGFydEF4aXNDb25maWciLHNob3dMYWJlbDohMCxsYWJlbEZvbnRTaXplOjE0LGxhYmVsUGFkZGluZzo1LHNob3dUaXRsZTohMCx0aXRsZUZvbnRTaXplOjE2LHRpdGxlUGFkZGluZzo1LHNob3dUaWNrOiEwLHRpY2tMZW5ndGg6NSx0aWNrV2lkdGg6MixzaG93QXhpc0xpbmU6ITAsYXhpc0xpbmVXaWR0aDoyfSxjaGFydE9yaWVudGF0aW9uOiJ2ZXJ0aWNhbCIscGxvdFJlc2VydmVkU3BhY2VQZXJjZW50OjUwfSxyZXF1aXJlbWVudDp7dXNlTWF4V2lkdGg6ITAscmVjdF9maWxsOiIjZjlmOWY5Iix0ZXh0X2NvbG9yOiIjMzMzIixyZWN0X2JvcmRlcl9zaXplOiIwLjVweCIscmVjdF9ib3JkZXJfY29sb3I6IiNiYmIiLHJlY3RfbWluX3dpZHRoOjIwMCxyZWN0X21pbl9oZWlnaHQ6MjAwLGZvbnRTaXplOjE0LHJlY3RfcGFkZGluZzoxMCxsaW5lX2hlaWdodDoyMH0sbWluZG1hcDp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzoxMCxtYXhOb2RlV2lkdGg6MjAwfSx0aW1lbGluZTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXSxkaXNhYmxlTXVsdGljb2xvcjohMX0sZ2l0R3JhcGg6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjgsbm9kZUxhYmVsOnt3aWR0aDo3NSxoZWlnaHQ6MTAwLHg6LTI1LHk6MH0sbWFpbkJyYW5jaE5hbWU6Im1haW4iLG1haW5CcmFuY2hPcmRlcjowLHNob3dDb21taXRMYWJlbDohMCxzaG93QnJhbmNoZXM6ITAscm90YXRlQ29tbWl0TGFiZWw6ITAscGFyYWxsZWxDb21taXRzOiExLGFycm93TWFya2VyQWJzb2x1dGU6ITF9LGM0Ont1c2VNYXhXaWR0aDohMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxjNFNoYXBlTWFyZ2luOjUwLGM0U2hhcGVQYWRkaW5nOjIwLHdpZHRoOjIxNixoZWlnaHQ6NjAsYm94TWFyZ2luOjEwLGM0U2hhcGVJblJvdzo0LG5leHRMaW5lUGFkZGluZ1g6MCxjNEJvdW5kYXJ5SW5Sb3c6MixwZXJzb25Gb250U2l6ZToxNCxwZXJzb25Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicscGVyc29uRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9wZXJzb25Gb250U2l6ZToxNCxleHRlcm5hbF9wZXJzb25Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfcGVyc29uRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1Gb250U2l6ZToxNCxzeXN0ZW1Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1Gb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1fZGJGb250U2l6ZToxNCxzeXN0ZW1fZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtX2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1fZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1fcXVldWVGb250U2l6ZToxNCxzeXN0ZW1fcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixib3VuZGFyeUZvbnRTaXplOjE0LGJvdW5kYXJ5Rm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGJvdW5kYXJ5Rm9udFdlaWdodDoibm9ybWFsIixtZXNzYWdlRm9udFNpemU6MTIsbWVzc2FnZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJGb250U2l6ZToxNCxjb250YWluZXJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJfZGJGb250U2l6ZToxNCxjb250YWluZXJfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyX2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJfcXVldWVGb250U2l6ZToxNCxjb250YWluZXJfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRGb250U2l6ZToxNCxjb21wb25lbnRGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50Rm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50Rm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRfZGJGb250U2l6ZToxNCxjb21wb25lbnRfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50X2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRfcXVldWVGb250U2l6ZToxNCxjb21wb25lbnRfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIix3cmFwOiEwLHdyYXBQYWRkaW5nOjEwLHBlcnNvbl9iZ19jb2xvcjoiIzA4NDI3QiIscGVyc29uX2JvcmRlcl9jb2xvcjoiIzA3M0I2RiIsZXh0ZXJuYWxfcGVyc29uX2JnX2NvbG9yOiIjNjg2ODY4IixleHRlcm5hbF9wZXJzb25fYm9yZGVyX2NvbG9yOiIjOEE4QThBIixzeXN0ZW1fYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLHN5c3RlbV9kYl9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX2RiX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsc3lzdGVtX3F1ZXVlX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fcXVldWVfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixleHRlcm5hbF9zeXN0ZW1fYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGV4dGVybmFsX3N5c3RlbV9kYl9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX2RiX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fcXVldWVfYm9yZGVyX2NvbG9yOiIjOEE4QThBIixjb250YWluZXJfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGNvbnRhaW5lcl9kYl9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX2RiX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfcXVldWVfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixleHRlcm5hbF9jb250YWluZXJfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGV4dGVybmFsX2NvbnRhaW5lcl9kYl9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX2RiX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfcXVldWVfYm9yZGVyX2NvbG9yOiIjQTZBNkE2Iixjb21wb25lbnRfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGNvbXBvbmVudF9kYl9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X2RiX2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfcXVldWVfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4IixleHRlcm5hbF9jb21wb25lbnRfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9ib3JkZXJfY29sb3I6IiNCRkJGQkYiLGV4dGVybmFsX2NvbXBvbmVudF9kYl9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X2RiX2JvcmRlcl9jb2xvcjoiI0JGQkZCRiIsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIn0sc2Fua2V5Ont1c2VNYXhXaWR0aDohMCx3aWR0aDo2MDAsaGVpZ2h0OjQwMCxsaW5rQ29sb3I6ImdyYWRpZW50Iixub2RlQWxpZ25tZW50OiJqdXN0aWZ5IixzaG93VmFsdWVzOiEwLHByZWZpeDoiIixzdWZmaXg6IiJ9LGJsb2NrOnt1c2VNYXhXaWR0aDohMCxwYWRkaW5nOjh9LHRoZW1lOiJkZWZhdWx0IixtYXhUZXh0U2l6ZTo1ZTQsbWF4RWRnZXM6NTAwLGRhcmtNb2RlOiExLGZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsnLGxvZ0xldmVsOjUsc2VjdXJpdHlMZXZlbDoic3RyaWN0IixzdGFydE9uTG9hZDohMCxhcnJvd01hcmtlckFic29sdXRlOiExLHNlY3VyZTpbInNlY3VyZSIsInNlY3VyaXR5TGV2ZWwiLCJzdGFydE9uTG9hZCIsIm1heFRleHRTaXplIiwibWF4RWRnZXMiXSxsZWdhY3lNYXRoTUw6ITEsZGV0ZXJtaW5pc3RpY0lkczohMSxmb250U2l6ZToxNn0sTVJlPXsuLi5UNyxkZXRlcm1pbmlzdGljSURTZWVkOnZvaWQgMCx0aGVtZUNTUzp2b2lkIDAsdGhlbWVWYXJpYWJsZXM6RTcuZGVmYXVsdC5nZXRUaGVtZVZhcmlhYmxlcygpLHNlcXVlbmNlOnsuLi5UNy5zZXF1ZW5jZSxtZXNzYWdlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLm1lc3NhZ2VGb250V2VpZ2h0fX0sbm90ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5ub3RlRm9udFdlaWdodH19LGFjdG9yRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuYWN0b3JGb250V2VpZ2h0fX19LGdhbnR0OnsuLi5UNy5nYW50dCx0aWNrSW50ZXJ2YWw6dm9pZCAwLHVzZVdpZHRoOnZvaWQgMH0sYzQ6ey4uLlQ3LmM0LHVzZVdpZHRoOnZvaWQgMCxwZXJzb25Gb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5wZXJzb25Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMucGVyc29uRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnBlcnNvbkZvbnRXZWlnaHR9fSxleHRlcm5hbF9wZXJzb25Gb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRXZWlnaHR9fSxzeXN0ZW1Gb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbUZvbnRXZWlnaHR9fSxleHRlcm5hbF9zeXN0ZW1Gb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRXZWlnaHR9fSxzeXN0ZW1fZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1fZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbV9kYkZvbnRXZWlnaHR9fSxleHRlcm5hbF9zeXN0ZW1fZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRXZWlnaHR9fSxzeXN0ZW1fcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1fcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRXZWlnaHR9fSxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRXZWlnaHR9fSxjb250YWluZXJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lckZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb250YWluZXJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRXZWlnaHR9fSxjb250YWluZXJfZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lcl9kYkZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb250YWluZXJfZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRXZWlnaHR9fSxjb250YWluZXJfcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHR9fSxjb21wb25lbnRGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudEZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb21wb25lbnRGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRXZWlnaHR9fSxjb21wb25lbnRfZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50X2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudF9kYkZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb21wb25lbnRfZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRXZWlnaHR9fSxjb21wb25lbnRfcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHR9fSxib3VuZGFyeUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmJvdW5kYXJ5Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmJvdW5kYXJ5Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmJvdW5kYXJ5Rm9udFdlaWdodH19LG1lc3NhZ2VGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubWVzc2FnZUZvbnRXZWlnaHR9fX0scGllOnsuLi5UNy5waWUsdXNlV2lkdGg6OTg0fSx4eUNoYXJ0OnsuLi5UNy54eUNoYXJ0LHVzZVdpZHRoOnZvaWQgMH0scmVxdWlyZW1lbnQ6ey4uLlQ3LnJlcXVpcmVtZW50LHVzZVdpZHRoOnZvaWQgMH0sZ2l0R3JhcGg6ey4uLlQ3LmdpdEdyYXBoLHVzZU1heFdpZHRoOiExfSxzYW5rZXk6ey4uLlQ3LnNhbmtleSx1c2VNYXhXaWR0aDohMX19LERSZT0oaSxzPSIiKT0+T2JqZWN0LmtleXMoaSkucmVkdWNlKCh1LGQpPT5BcnJheS5pc0FycmF5KGlbZF0pP3U6dHlwZW9mIGlbZF09PSJvYmplY3QiJiZpW2RdIT09bnVsbD9bLi4udSxzK2QsLi4uRFJlKGlbZF0sIiIpXTpbLi4udSxzK2RdLFtdKSxGUHQ9bmV3IFNldChEUmUoTVJlLCIiKSksc2g9TVJlLFNYPWk9PntpZihYZS5kZWJ1Zygic2FuaXRpemVEaXJlY3RpdmUgY2FsbGVkIHdpdGgiLGkpLCEodHlwZW9mIGkhPSJvYmplY3QifHxpPT1udWxsKSl7aWYoQXJyYXkuaXNBcnJheShpKSl7aS5mb3JFYWNoKHM9PlNYKHMpKTtyZXR1cm59Zm9yKGNvbnN0IHMgb2YgT2JqZWN0LmtleXMoaSkpe2lmKFhlLmRlYnVnKCJDaGVja2luZyBrZXkiLHMpLHMuc3RhcnRzV2l0aCgiX18iKXx8cy5pbmNsdWRlcygicHJvdG8iKXx8cy5pbmNsdWRlcygiY29uc3RyIil8fCFGUHQuaGFzKHMpfHxpW3NdPT1udWxsKXtYZS5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcga2V5OiAiLHMpLGRlbGV0ZSBpW3NdO2NvbnRpbnVlfWlmKHR5cGVvZiBpW3NdPT0ib2JqZWN0Iil7WGUuZGVidWcoInNhbml0aXppbmcgb2JqZWN0IixzKSxTWChpW3NdKTtjb250aW51ZX1jb25zdCB1PVsidGhlbWVDU1MiLCJmb250RmFtaWx5IiwiYWx0Rm9udEZhbWlseSJdO2Zvcihjb25zdCBkIG9mIHUpcy5pbmNsdWRlcyhkKSYmKFhlLmRlYnVnKCJzYW5pdGl6aW5nIGNzcyBvcHRpb24iLHMpLGlbc109UlB0KGlbc10pKX1pZihpLnRoZW1lVmFyaWFibGVzKWZvcihjb25zdCBzIG9mIE9iamVjdC5rZXlzKGkudGhlbWVWYXJpYWJsZXMpKXtjb25zdCB1PWkudGhlbWVWYXJpYWJsZXNbc107dSE9bnVsbCYmdS5tYXRjaCYmIXUubWF0Y2goL15bXGQgIiMlKCksLjtBLVphLXpdKyQvKSYmKGkudGhlbWVWYXJpYWJsZXNbc109IiIpfVhlLmRlYnVnKCJBZnRlciBzYW5pdGl6YXRpb24iLGkpfX0sUlB0PWk9PntsZXQgcz0wLHU9MDtmb3IoY29uc3QgZCBvZiBpKXtpZihzPHUpcmV0dXJuInsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH0iO2Q9PT0ieyI/cysrOmQ9PT0ifSImJnUrK31yZXR1cm4gcyE9PXU/InsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH0iOml9LElSZT0vXi17M31ccypbXG5ccl0oLio/KVtcblxyXS17M31ccypbXG5ccl0rL3MsVUY9LyV7Mn17XHMqKD86KFx3Kylccyo6fChcdyspKVxzKig/OihcdyspfCgoPzooPyF9JXsyfSkufFxyP1xuKSopKT9ccyooPzp9JXsyfSk/L2dpLGpQdD0vXHMqJSUuKlxuL2dtO2NsYXNzIE9SZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHMpe3N1cGVyKHMpLHRoaXMubmFtZT0iVW5rbm93bkRpYWdyYW1FcnJvciJ9fWNvbnN0IGREPXt9LF9YPWZ1bmN0aW9uKGkscyl7aT1pLnJlcGxhY2UoSVJlLCIiKS5yZXBsYWNlKFVGLCIiKS5yZXBsYWNlKGpQdCxgCmApO2Zvcihjb25zdFt1LHtkZXRlY3RvcjpkfV1vZiBPYmplY3QuZW50cmllcyhkRCkpaWYoZChpLHMpKXJldHVybiB1O3Rocm93IG5ldyBPUmUoYE5vIGRpYWdyYW0gdHlwZSBkZXRlY3RlZCBtYXRjaGluZyBnaXZlbiBjb25maWd1cmF0aW9uIGZvciB0ZXh0OiAke2l9YCl9LE5SZT0oLi4uaSk9Pntmb3IoY29uc3R7aWQ6cyxkZXRlY3Rvcjp1LGxvYWRlcjpkfW9mIGkpUFJlKHMsdSxkKX0sUFJlPShpLHMsdSk9PntkRFtpXT9YZS5lcnJvcihgRGV0ZWN0b3Igd2l0aCBrZXkgJHtpfSBhbHJlYWR5IGV4aXN0c2ApOmREW2ldPXtkZXRlY3RvcjpzLGxvYWRlcjp1fSxYZS5kZWJ1ZyhgRGV0ZWN0b3Igd2l0aCBrZXkgJHtpfSBhZGRlZCR7dT8iIHdpdGggbG9hZGVyIjoiIn1gKX0sJFB0PWk9PmREW2ldLmxvYWRlcixkMmU9KGkscyx7ZGVwdGg6dT0yLGNsb2JiZXI6ZD0hMX09e30pPT57Y29uc3QgcD17ZGVwdGg6dSxjbG9iYmVyOmR9O3JldHVybiBBcnJheS5pc0FycmF5KHMpJiYhQXJyYXkuaXNBcnJheShpKT8ocy5mb3JFYWNoKHY9PmQyZShpLHYscCkpLGkpOkFycmF5LmlzQXJyYXkocykmJkFycmF5LmlzQXJyYXkoaSk/KHMuZm9yRWFjaCh2PT57aS5pbmNsdWRlcyh2KXx8aS5wdXNoKHYpfSksaSk6aT09PXZvaWQgMHx8dTw9MD9pIT1udWxsJiZ0eXBlb2YgaT09Im9iamVjdCImJnR5cGVvZiBzPT0ib2JqZWN0Ij9PYmplY3QuYXNzaWduKGkscyk6czoocyE9PXZvaWQgMCYmdHlwZW9mIGk9PSJvYmplY3QiJiZ0eXBlb2Ygcz09Im9iamVjdCImJk9iamVjdC5rZXlzKHMpLmZvckVhY2godj0+e3R5cGVvZiBzW3ZdPT0ib2JqZWN0IiYmKGlbdl09PT12b2lkIDB8fHR5cGVvZiBpW3ZdPT0ib2JqZWN0Iik/KGlbdl09PT12b2lkIDAmJihpW3ZdPUFycmF5LmlzQXJyYXkoc1t2XSk/W106e30pLGlbdl09ZDJlKGlbdl0sc1t2XSx7ZGVwdGg6dS0xLGNsb2JiZXI6ZH0pKTooZHx8dHlwZW9mIGlbdl0hPSJvYmplY3QiJiZ0eXBlb2Ygc1t2XSE9Im9iamVjdCIpJiYoaVt2XT1zW3ZdKX0pLGkpfSxpZD1kMmU7dmFyIHpQdD10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7Y29uc3QgQlJlPXpQdDt2YXIgcVB0PXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsSFB0PUJSZXx8cVB0fHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO2NvbnN0IE4zPUhQdDt2YXIgVlB0PU4zLlN5bWJvbDtjb25zdCBJdj1WUHQ7dmFyIEZSZT1PYmplY3QucHJvdG90eXBlLFVQdD1GUmUuaGFzT3duUHJvcGVydHksR1B0PUZSZS50b1N0cmluZyxHRj1Jdj9Jdi50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gS1B0KGkpe3ZhciBzPVVQdC5jYWxsKGksR0YpLHU9aVtHRl07dHJ5e2lbR0ZdPXZvaWQgMDt2YXIgZD0hMH1jYXRjaHt9dmFyIHA9R1B0LmNhbGwoaSk7cmV0dXJuIGQmJihzP2lbR0ZdPXU6ZGVsZXRlIGlbR0ZdKSxwfXZhciBXUHQ9T2JqZWN0LnByb3RvdHlwZSxZUHQ9V1B0LnRvU3RyaW5nO2Z1bmN0aW9uIFhQdChpKXtyZXR1cm4gWVB0LmNhbGwoaSl9dmFyIFFQdD0iW29iamVjdCBOdWxsXSIsSlB0PSJbb2JqZWN0IFVuZGVmaW5lZF0iLFJSZT1Jdj9Jdi50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gQUMoaSl7cmV0dXJuIGk9PW51bGw/aT09PXZvaWQgMD9KUHQ6UVB0OlJSZSYmUlJlIGluIE9iamVjdChpKT9LUHQoaSk6WFB0KGkpfWZ1bmN0aW9uIGFtKGkpe3ZhciBzPXR5cGVvZiBpO3JldHVybiBpIT1udWxsJiYocz09Im9iamVjdCJ8fHM9PSJmdW5jdGlvbiIpfXZhciBaUHQ9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLGVCdD0iW29iamVjdCBGdW5jdGlvbl0iLHRCdD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLG5CdD0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIGdEKGkpe2lmKCFhbShpKSlyZXR1cm4hMTt2YXIgcz1BQyhpKTtyZXR1cm4gcz09ZUJ0fHxzPT10QnR8fHM9PVpQdHx8cz09bkJ0fXZhciByQnQ9TjNbIl9fY29yZS1qc19zaGFyZWRfXyJdO2NvbnN0IGcyZT1yQnQ7dmFyIGpSZT1mdW5jdGlvbigpe3ZhciBpPS9bXi5dKyQvLmV4ZWMoZzJlJiZnMmUua2V5cyYmZzJlLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gaT8iU3ltYm9sKHNyYylfMS4iK2k6IiJ9KCk7ZnVuY3Rpb24gaUJ0KGkpe3JldHVybiEhalJlJiZqUmUgaW4gaX12YXIgc0J0PUZ1bmN0aW9uLnByb3RvdHlwZSxhQnQ9c0J0LnRvU3RyaW5nO2Z1bmN0aW9uIExDKGkpe2lmKGkhPW51bGwpe3RyeXtyZXR1cm4gYUJ0LmNhbGwoaSl9Y2F0Y2h7fXRyeXtyZXR1cm4gaSsiIn1jYXRjaHt9fXJldHVybiIifXZhciBvQnQ9L1tcXF4kLiorPygpW1xde318XS9nLGNCdD0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyx1QnQ9RnVuY3Rpb24ucHJvdG90eXBlLGxCdD1PYmplY3QucHJvdG90eXBlLGhCdD11QnQudG9TdHJpbmcsZkJ0PWxCdC5oYXNPd25Qcm9wZXJ0eSxkQnQ9UmVnRXhwKCJeIitoQnQuY2FsbChmQnQpLnJlcGxhY2Uob0J0LCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIGdCdChpKXtpZighYW0oaSl8fGlCdChpKSlyZXR1cm4hMTt2YXIgcz1nRChpKT9kQnQ6Y0J0O3JldHVybiBzLnRlc3QoTEMoaSkpfWZ1bmN0aW9uIHBCdChpLHMpe3JldHVybiBpPT1udWxsP3ZvaWQgMDppW3NdfWZ1bmN0aW9uIE1DKGkscyl7dmFyIHU9cEJ0KGkscyk7cmV0dXJuIGdCdCh1KT91OnZvaWQgMH12YXIgYkJ0PU1DKE9iamVjdCwiY3JlYXRlIik7Y29uc3QgS0Y9YkJ0O2Z1bmN0aW9uIG1CdCgpe3RoaXMuX19kYXRhX189S0Y/S0YobnVsbCk6e30sdGhpcy5zaXplPTB9ZnVuY3Rpb24gdkJ0KGkpe3ZhciBzPXRoaXMuaGFzKGkpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tpXTtyZXR1cm4gdGhpcy5zaXplLT1zPzE6MCxzfXZhciB3QnQ9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHlCdD1PYmplY3QucHJvdG90eXBlLHhCdD15QnQuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24ga0J0KGkpe3ZhciBzPXRoaXMuX19kYXRhX187aWYoS0Ype3ZhciB1PXNbaV07cmV0dXJuIHU9PT13QnQ/dm9pZCAwOnV9cmV0dXJuIHhCdC5jYWxsKHMsaSk/c1tpXTp2b2lkIDB9dmFyIEVCdD1PYmplY3QucHJvdG90eXBlLFRCdD1FQnQuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gQ0J0KGkpe3ZhciBzPXRoaXMuX19kYXRhX187cmV0dXJuIEtGP3NbaV0hPT12b2lkIDA6VEJ0LmNhbGwocyxpKX12YXIgU0J0PSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBfQnQoaSxzKXt2YXIgdT10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGkpPzA6MSx1W2ldPUtGJiZzPT09dm9pZCAwP1NCdDpzLHRoaXN9ZnVuY3Rpb24gREMoaSl7dmFyIHM9LTEsdT1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3M8dTspe3ZhciBkPWlbc107dGhpcy5zZXQoZFswXSxkWzFdKX19REMucHJvdG90eXBlLmNsZWFyPW1CdCxEQy5wcm90b3R5cGUuZGVsZXRlPXZCdCxEQy5wcm90b3R5cGUuZ2V0PWtCdCxEQy5wcm90b3R5cGUuaGFzPUNCdCxEQy5wcm90b3R5cGUuc2V0PV9CdDtmdW5jdGlvbiBBQnQoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIHBEKGkscyl7cmV0dXJuIGk9PT1zfHxpIT09aSYmcyE9PXN9ZnVuY3Rpb24gQVgoaSxzKXtmb3IodmFyIHU9aS5sZW5ndGg7dS0tOylpZihwRChpW3VdWzBdLHMpKXJldHVybiB1O3JldHVybi0xfXZhciBMQnQ9QXJyYXkucHJvdG90eXBlLE1CdD1MQnQuc3BsaWNlO2Z1bmN0aW9uIERCdChpKXt2YXIgcz10aGlzLl9fZGF0YV9fLHU9QVgocyxpKTtpZih1PDApcmV0dXJuITE7dmFyIGQ9cy5sZW5ndGgtMTtyZXR1cm4gdT09ZD9zLnBvcCgpOk1CdC5jYWxsKHMsdSwxKSwtLXRoaXMuc2l6ZSwhMH1mdW5jdGlvbiBJQnQoaSl7dmFyIHM9dGhpcy5fX2RhdGFfXyx1PUFYKHMsaSk7cmV0dXJuIHU8MD92b2lkIDA6c1t1XVsxXX1mdW5jdGlvbiBPQnQoaSl7cmV0dXJuIEFYKHRoaXMuX19kYXRhX18saSk+LTF9ZnVuY3Rpb24gTkJ0KGkscyl7dmFyIHU9dGhpcy5fX2RhdGFfXyxkPUFYKHUsaSk7cmV0dXJuIGQ8MD8oKyt0aGlzLnNpemUsdS5wdXNoKFtpLHNdKSk6dVtkXVsxXT1zLHRoaXN9ZnVuY3Rpb24gQzcoaSl7dmFyIHM9LTEsdT1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3M8dTspe3ZhciBkPWlbc107dGhpcy5zZXQoZFswXSxkWzFdKX19QzcucHJvdG90eXBlLmNsZWFyPUFCdCxDNy5wcm90b3R5cGUuZGVsZXRlPURCdCxDNy5wcm90b3R5cGUuZ2V0PUlCdCxDNy5wcm90b3R5cGUuaGFzPU9CdCxDNy5wcm90b3R5cGUuc2V0PU5CdDt2YXIgUEJ0PU1DKE4zLCJNYXAiKTtjb25zdCBXRj1QQnQ7ZnVuY3Rpb24gQkJ0KCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgREMsbWFwOm5ldyhXRnx8QzcpLHN0cmluZzpuZXcgREN9fWZ1bmN0aW9uIEZCdChpKXt2YXIgcz10eXBlb2YgaTtyZXR1cm4gcz09InN0cmluZyJ8fHM9PSJudW1iZXIifHxzPT0ic3ltYm9sInx8cz09ImJvb2xlYW4iP2khPT0iX19wcm90b19fIjppPT09bnVsbH1mdW5jdGlvbiBMWChpLHMpe3ZhciB1PWkuX19kYXRhX187cmV0dXJuIEZCdChzKT91W3R5cGVvZiBzPT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOnUubWFwfWZ1bmN0aW9uIFJCdChpKXt2YXIgcz1MWCh0aGlzLGkpLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5zaXplLT1zPzE6MCxzfWZ1bmN0aW9uIGpCdChpKXtyZXR1cm4gTFgodGhpcyxpKS5nZXQoaSl9ZnVuY3Rpb24gJEJ0KGkpe3JldHVybiBMWCh0aGlzLGkpLmhhcyhpKX1mdW5jdGlvbiB6QnQoaSxzKXt2YXIgdT1MWCh0aGlzLGkpLGQ9dS5zaXplO3JldHVybiB1LnNldChpLHMpLHRoaXMuc2l6ZSs9dS5zaXplPT1kPzA6MSx0aGlzfWZ1bmN0aW9uIFM3KGkpe3ZhciBzPS0xLHU9aT09bnVsbD8wOmkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytzPHU7KXt2YXIgZD1pW3NdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fVM3LnByb3RvdHlwZS5jbGVhcj1CQnQsUzcucHJvdG90eXBlLmRlbGV0ZT1SQnQsUzcucHJvdG90eXBlLmdldD1qQnQsUzcucHJvdG90eXBlLmhhcz0kQnQsUzcucHJvdG90eXBlLnNldD16QnQ7dmFyIHFCdD0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gYkQoaSxzKXtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uInx8cyE9bnVsbCYmdHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihxQnQpO3ZhciB1PWZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzLHA9cz9zLmFwcGx5KHRoaXMsZCk6ZFswXSx2PXUuY2FjaGU7aWYodi5oYXMocCkpcmV0dXJuIHYuZ2V0KHApO3ZhciBiPWkuYXBwbHkodGhpcyxkKTtyZXR1cm4gdS5jYWNoZT12LnNldChwLGIpfHx2LGJ9O3JldHVybiB1LmNhY2hlPW5ldyhiRC5DYWNoZXx8UzcpLHV9YkQuQ2FjaGU9Uzc7ZnVuY3Rpb24gSEJ0KCl7dGhpcy5fX2RhdGFfXz1uZXcgQzcsdGhpcy5zaXplPTB9ZnVuY3Rpb24gVkJ0KGkpe3ZhciBzPXRoaXMuX19kYXRhX18sdT1zLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5zaXplPXMuc2l6ZSx1fWZ1bmN0aW9uIFVCdChpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoaSl9ZnVuY3Rpb24gR0J0KGkpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhpKX12YXIgS0J0PTIwMDtmdW5jdGlvbiBXQnQoaSxzKXt2YXIgdT10aGlzLl9fZGF0YV9fO2lmKHUgaW5zdGFuY2VvZiBDNyl7dmFyIGQ9dS5fX2RhdGFfXztpZighV0Z8fGQubGVuZ3RoPEtCdC0xKXJldHVybiBkLnB1c2goW2ksc10pLHRoaXMuc2l6ZT0rK3Uuc2l6ZSx0aGlzO3U9dGhpcy5fX2RhdGFfXz1uZXcgUzcoZCl9cmV0dXJuIHUuc2V0KGkscyksdGhpcy5zaXplPXUuc2l6ZSx0aGlzfWZ1bmN0aW9uIFAzKGkpe3ZhciBzPXRoaXMuX19kYXRhX189bmV3IEM3KGkpO3RoaXMuc2l6ZT1zLnNpemV9UDMucHJvdG90eXBlLmNsZWFyPUhCdCxQMy5wcm90b3R5cGUuZGVsZXRlPVZCdCxQMy5wcm90b3R5cGUuZ2V0PVVCdCxQMy5wcm90b3R5cGUuaGFzPUdCdCxQMy5wcm90b3R5cGUuc2V0PVdCdDt2YXIgWUJ0PWZ1bmN0aW9uKCl7dHJ5e3ZhciBpPU1DKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gaSh7fSwiIix7fSksaX1jYXRjaHt9fSgpO2NvbnN0IE1YPVlCdDtmdW5jdGlvbiBEWChpLHMsdSl7cz09Il9fcHJvdG9fXyImJk1YP01YKGkscyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6dSx3cml0YWJsZTohMH0pOmlbc109dX1mdW5jdGlvbiBwMmUoaSxzLHUpeyh1IT09dm9pZCAwJiYhcEQoaVtzXSx1KXx8dT09PXZvaWQgMCYmIShzIGluIGkpKSYmRFgoaSxzLHUpfWZ1bmN0aW9uIFhCdChpKXtyZXR1cm4gZnVuY3Rpb24ocyx1LGQpe2Zvcih2YXIgcD0tMSx2PU9iamVjdChzKSxiPWQocykseT1iLmxlbmd0aDt5LS07KXt2YXIgVD1iW2k/eTorK3BdO2lmKHUodltUXSxULHYpPT09ITEpYnJlYWt9cmV0dXJuIHN9fXZhciBRQnQ9WEJ0KCk7Y29uc3QgYjJlPVFCdDt2YXIgJFJlPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMselJlPSRSZSYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLEpCdD16UmUmJnpSZS5leHBvcnRzPT09JFJlLHFSZT1KQnQ/TjMuQnVmZmVyOnZvaWQgMCxIUmU9cVJlP3FSZS5hbGxvY1Vuc2FmZTp2b2lkIDA7ZnVuY3Rpb24gVlJlKGkscyl7aWYocylyZXR1cm4gaS5zbGljZSgpO3ZhciB1PWkubGVuZ3RoLGQ9SFJlP0hSZSh1KTpuZXcgaS5jb25zdHJ1Y3Rvcih1KTtyZXR1cm4gaS5jb3B5KGQpLGR9dmFyIFpCdD1OMy5VaW50OEFycmF5O2NvbnN0IElYPVpCdDtmdW5jdGlvbiBtMmUoaSl7dmFyIHM9bmV3IGkuY29uc3RydWN0b3IoaS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IElYKHMpLnNldChuZXcgSVgoaSkpLHN9ZnVuY3Rpb24gVVJlKGkscyl7dmFyIHU9cz9tMmUoaS5idWZmZXIpOmkuYnVmZmVyO3JldHVybiBuZXcgaS5jb25zdHJ1Y3Rvcih1LGkuYnl0ZU9mZnNldCxpLmxlbmd0aCl9ZnVuY3Rpb24gR1JlKGkscyl7dmFyIHU9LTEsZD1pLmxlbmd0aDtmb3Ioc3x8KHM9QXJyYXkoZCkpOysrdTxkOylzW3VdPWlbdV07cmV0dXJuIHN9dmFyIEtSZT1PYmplY3QuY3JlYXRlLGVGdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGkoKXt9cmV0dXJuIGZ1bmN0aW9uKHMpe2lmKCFhbShzKSlyZXR1cm57fTtpZihLUmUpcmV0dXJuIEtSZShzKTtpLnByb3RvdHlwZT1zO3ZhciB1PW5ldyBpO3JldHVybiBpLnByb3RvdHlwZT12b2lkIDAsdX19KCk7Y29uc3QgdEZ0PWVGdDtmdW5jdGlvbiBXUmUoaSxzKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkocyh1KSl9fXZhciBuRnQ9V1JlKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO2NvbnN0IHYyZT1uRnQ7dmFyIHJGdD1PYmplY3QucHJvdG90eXBlO2Z1bmN0aW9uIE9YKGkpe3ZhciBzPWkmJmkuY29uc3RydWN0b3IsdT10eXBlb2Ygcz09ImZ1bmN0aW9uIiYmcy5wcm90b3R5cGV8fHJGdDtyZXR1cm4gaT09PXV9ZnVuY3Rpb24gWVJlKGkpe3JldHVybiB0eXBlb2YgaS5jb25zdHJ1Y3Rvcj09ImZ1bmN0aW9uIiYmIU9YKGkpP3RGdCh2MmUoaSkpOnt9fWZ1bmN0aW9uIHE0KGkpe3JldHVybiBpIT1udWxsJiZ0eXBlb2YgaT09Im9iamVjdCJ9dmFyIGlGdD0iW29iamVjdCBBcmd1bWVudHNdIjtmdW5jdGlvbiBYUmUoaSl7cmV0dXJuIHE0KGkpJiZBQyhpKT09aUZ0fXZhciBRUmU9T2JqZWN0LnByb3RvdHlwZSxzRnQ9UVJlLmhhc093blByb3BlcnR5LGFGdD1RUmUucHJvcGVydHlJc0VudW1lcmFibGUsb0Z0PVhSZShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP1hSZTpmdW5jdGlvbihpKXtyZXR1cm4gcTQoaSkmJnNGdC5jYWxsKGksImNhbGxlZSIpJiYhYUZ0LmNhbGwoaSwiY2FsbGVlIil9O2NvbnN0IG1EPW9GdDt2YXIgY0Z0PUFycmF5LmlzQXJyYXk7Y29uc3QgRDA9Y0Z0O3ZhciB1RnQ9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiB3MmUoaSl7cmV0dXJuIHR5cGVvZiBpPT0ibnVtYmVyIiYmaT4tMSYmaSUxPT0wJiZpPD11RnR9ZnVuY3Rpb24gdzkoaSl7cmV0dXJuIGkhPW51bGwmJncyZShpLmxlbmd0aCkmJiFnRChpKX1mdW5jdGlvbiBKUmUoaSl7cmV0dXJuIHE0KGkpJiZ3OShpKX1mdW5jdGlvbiBsRnQoKXtyZXR1cm4hMX12YXIgWlJlPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsZWplPVpSZSYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGhGdD1lamUmJmVqZS5leHBvcnRzPT09WlJlLHRqZT1oRnQ/TjMuQnVmZmVyOnZvaWQgMCxmRnQ9dGplP3RqZS5pc0J1ZmZlcjp2b2lkIDAsZEZ0PWZGdHx8bEZ0O2NvbnN0IHZEPWRGdDt2YXIgZ0Z0PSJbb2JqZWN0IE9iamVjdF0iLHBGdD1GdW5jdGlvbi5wcm90b3R5cGUsYkZ0PU9iamVjdC5wcm90b3R5cGUsbmplPXBGdC50b1N0cmluZyxtRnQ9YkZ0Lmhhc093blByb3BlcnR5LHZGdD1uamUuY2FsbChPYmplY3QpO2Z1bmN0aW9uIHJqZShpKXtpZighcTQoaSl8fEFDKGkpIT1nRnQpcmV0dXJuITE7dmFyIHM9djJlKGkpO2lmKHM9PT1udWxsKXJldHVybiEwO3ZhciB1PW1GdC5jYWxsKHMsImNvbnN0cnVjdG9yIikmJnMuY29uc3RydWN0b3I7cmV0dXJuIHR5cGVvZiB1PT0iZnVuY3Rpb24iJiZ1IGluc3RhbmNlb2YgdSYmbmplLmNhbGwodSk9PXZGdH12YXIgd0Z0PSJbb2JqZWN0IEFyZ3VtZW50c10iLHlGdD0iW29iamVjdCBBcnJheV0iLHhGdD0iW29iamVjdCBCb29sZWFuXSIsa0Z0PSJbb2JqZWN0IERhdGVdIixFRnQ9IltvYmplY3QgRXJyb3JdIixURnQ9IltvYmplY3QgRnVuY3Rpb25dIixDRnQ9IltvYmplY3QgTWFwXSIsU0Z0PSJbb2JqZWN0IE51bWJlcl0iLF9GdD0iW29iamVjdCBPYmplY3RdIixBRnQ9IltvYmplY3QgUmVnRXhwXSIsTEZ0PSJbb2JqZWN0IFNldF0iLE1GdD0iW29iamVjdCBTdHJpbmddIixERnQ9IltvYmplY3QgV2Vha01hcF0iLElGdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLE9GdD0iW29iamVjdCBEYXRhVmlld10iLE5GdD0iW29iamVjdCBGbG9hdDMyQXJyYXldIixQRnQ9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsQkZ0PSJbb2JqZWN0IEludDhBcnJheV0iLEZGdD0iW29iamVjdCBJbnQxNkFycmF5XSIsUkZ0PSJbb2JqZWN0IEludDMyQXJyYXldIixqRnQ9IltvYmplY3QgVWludDhBcnJheV0iLCRGdD0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLHpGdD0iW29iamVjdCBVaW50MTZBcnJheV0iLHFGdD0iW29iamVjdCBVaW50MzJBcnJheV0iLGFoPXt9O2FoW05GdF09YWhbUEZ0XT1haFtCRnRdPWFoW0ZGdF09YWhbUkZ0XT1haFtqRnRdPWFoWyRGdF09YWhbekZ0XT1haFtxRnRdPSEwLGFoW3dGdF09YWhbeUZ0XT1haFtJRnRdPWFoW3hGdF09YWhbT0Z0XT1haFtrRnRdPWFoW0VGdF09YWhbVEZ0XT1haFtDRnRdPWFoW1NGdF09YWhbX0Z0XT1haFtBRnRdPWFoW0xGdF09YWhbTUZ0XT1haFtERnRdPSExO2Z1bmN0aW9uIEhGdChpKXtyZXR1cm4gcTQoaSkmJncyZShpLmxlbmd0aCkmJiEhYWhbQUMoaSldfWZ1bmN0aW9uIE5YKGkpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gaShzKX19dmFyIGlqZT10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFlGPWlqZSYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLFZGdD1ZRiYmWUYuZXhwb3J0cz09PWlqZSx5MmU9VkZ0JiZCUmUucHJvY2VzcyxVRnQ9ZnVuY3Rpb24oKXt0cnl7dmFyIGk9WUYmJllGLnJlcXVpcmUmJllGLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gaXx8eTJlJiZ5MmUuYmluZGluZyYmeTJlLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO2NvbnN0IHdEPVVGdDt2YXIgc2plPXdEJiZ3RC5pc1R5cGVkQXJyYXksR0Z0PXNqZT9OWChzamUpOkhGdDtjb25zdCBQWD1HRnQ7ZnVuY3Rpb24geDJlKGkscyl7aWYoIShzPT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIGlbc109PSJmdW5jdGlvbiIpJiZzIT0iX19wcm90b19fIilyZXR1cm4gaVtzXX12YXIgS0Z0PU9iamVjdC5wcm90b3R5cGUsV0Z0PUtGdC5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBCWChpLHMsdSl7dmFyIGQ9aVtzXTsoIShXRnQuY2FsbChpLHMpJiZwRChkLHUpKXx8dT09PXZvaWQgMCYmIShzIGluIGkpKSYmRFgoaSxzLHUpfWZ1bmN0aW9uIFhGKGkscyx1LGQpe3ZhciBwPSF1O3V8fCh1PXt9KTtmb3IodmFyIHY9LTEsYj1zLmxlbmd0aDsrK3Y8Yjspe3ZhciB5PXNbdl0sVD1kP2QodVt5XSxpW3ldLHksdSxpKTp2b2lkIDA7VD09PXZvaWQgMCYmKFQ9aVt5XSkscD9EWCh1LHksVCk6QlgodSx5LFQpfXJldHVybiB1fWZ1bmN0aW9uIFlGdChpLHMpe2Zvcih2YXIgdT0tMSxkPUFycmF5KGkpOysrdTxpOylkW3VdPXModSk7cmV0dXJuIGR9dmFyIFhGdD05MDA3MTk5MjU0NzQwOTkxLFFGdD0vXig/OjB8WzEtOV1cZCopJC87ZnVuY3Rpb24gRlgoaSxzKXt2YXIgdT10eXBlb2YgaTtyZXR1cm4gcz1zPz9YRnQsISFzJiYodT09Im51bWJlciJ8fHUhPSJzeW1ib2wiJiZRRnQudGVzdChpKSkmJmk+LTEmJmklMT09MCYmaTxzfXZhciBKRnQ9T2JqZWN0LnByb3RvdHlwZSxaRnQ9SkZ0Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGFqZShpLHMpe3ZhciB1PUQwKGkpLGQ9IXUmJm1EKGkpLHA9IXUmJiFkJiZ2RChpKSx2PSF1JiYhZCYmIXAmJlBYKGkpLGI9dXx8ZHx8cHx8dix5PWI/WUZ0KGkubGVuZ3RoLFN0cmluZyk6W10sVD15Lmxlbmd0aDtmb3IodmFyIF8gaW4gaSkoc3x8WkZ0LmNhbGwoaSxfKSkmJiEoYiYmKF89PSJsZW5ndGgifHxwJiYoXz09Im9mZnNldCJ8fF89PSJwYXJlbnQiKXx8diYmKF89PSJidWZmZXIifHxfPT0iYnl0ZUxlbmd0aCJ8fF89PSJieXRlT2Zmc2V0Iil8fEZYKF8sVCkpKSYmeS5wdXNoKF8pO3JldHVybiB5fWZ1bmN0aW9uIGVSdChpKXt2YXIgcz1bXTtpZihpIT1udWxsKWZvcih2YXIgdSBpbiBPYmplY3QoaSkpcy5wdXNoKHUpO3JldHVybiBzfXZhciB0UnQ9T2JqZWN0LnByb3RvdHlwZSxuUnQ9dFJ0Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHJSdChpKXtpZighYW0oaSkpcmV0dXJuIGVSdChpKTt2YXIgcz1PWChpKSx1PVtdO2Zvcih2YXIgZCBpbiBpKWQ9PSJjb25zdHJ1Y3RvciImJihzfHwhblJ0LmNhbGwoaSxkKSl8fHUucHVzaChkKTtyZXR1cm4gdX1mdW5jdGlvbiBJQyhpKXtyZXR1cm4gdzkoaSk/YWplKGksITApOnJSdChpKX1mdW5jdGlvbiBpUnQoaSl7cmV0dXJuIFhGKGksSUMoaSkpfWZ1bmN0aW9uIHNSdChpLHMsdSxkLHAsdixiKXt2YXIgeT14MmUoaSx1KSxUPXgyZShzLHUpLF89Yi5nZXQoVCk7aWYoXyl7cDJlKGksdSxfKTtyZXR1cm59dmFyIEE9dj92KHksVCx1KyIiLGkscyxiKTp2b2lkIDAsUD1BPT09dm9pZCAwO2lmKFApe3ZhciBSPUQwKFQpLEY9IVImJnZEKFQpLGo9IVImJiFGJiZQWChUKTtBPVQsUnx8Rnx8aj9EMCh5KT9BPXk6SlJlKHkpP0E9R1JlKHkpOkY/KFA9ITEsQT1WUmUoVCwhMCkpOmo/KFA9ITEsQT1VUmUoVCwhMCkpOkE9W106cmplKFQpfHxtRChUKT8oQT15LG1EKHkpP0E9aVJ0KHkpOighYW0oeSl8fGdEKHkpKSYmKEE9WVJlKFQpKSk6UD0hMX1QJiYoYi5zZXQoVCxBKSxwKEEsVCxkLHYsYiksYi5kZWxldGUoVCkpLHAyZShpLHUsQSl9ZnVuY3Rpb24gb2plKGkscyx1LGQscCl7aSE9PXMmJmIyZShzLGZ1bmN0aW9uKHYsYil7aWYocHx8KHA9bmV3IFAzKSxhbSh2KSlzUnQoaSxzLGIsdSxvamUsZCxwKTtlbHNle3ZhciB5PWQ/ZCh4MmUoaSxiKSx2LGIrIiIsaSxzLHApOnZvaWQgMDt5PT09dm9pZCAwJiYoeT12KSxwMmUoaSxiLHkpfX0sSUMpfWZ1bmN0aW9uIE9DKGkpe3JldHVybiBpfWZ1bmN0aW9uIGFSdChpLHMsdSl7c3dpdGNoKHUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGkuY2FsbChzKTtjYXNlIDE6cmV0dXJuIGkuY2FsbChzLHVbMF0pO2Nhc2UgMjpyZXR1cm4gaS5jYWxsKHMsdVswXSx1WzFdKTtjYXNlIDM6cmV0dXJuIGkuY2FsbChzLHVbMF0sdVsxXSx1WzJdKX1yZXR1cm4gaS5hcHBseShzLHUpfXZhciBjamU9TWF0aC5tYXg7ZnVuY3Rpb24gdWplKGkscyx1KXtyZXR1cm4gcz1jamUocz09PXZvaWQgMD9pLmxlbmd0aC0xOnMsMCksZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLHA9LTEsdj1jamUoZC5sZW5ndGgtcywwKSxiPUFycmF5KHYpOysrcDx2OyliW3BdPWRbcytwXTtwPS0xO2Zvcih2YXIgeT1BcnJheShzKzEpOysrcDxzOyl5W3BdPWRbcF07cmV0dXJuIHlbc109dShiKSxhUnQoaSx0aGlzLHkpfX1mdW5jdGlvbiB5RChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19dmFyIG9SdD1NWD9mdW5jdGlvbihpLHMpe3JldHVybiBNWChpLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnlEKHMpLHdyaXRhYmxlOiEwfSl9Ok9DO2NvbnN0IGNSdD1vUnQ7dmFyIHVSdD04MDAsbFJ0PTE2LGhSdD1EYXRlLm5vdztmdW5jdGlvbiBmUnQoaSl7dmFyIHM9MCx1PTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9aFJ0KCkscD1sUnQtKGQtdSk7aWYodT1kLHA+MCl7aWYoKytzPj11UnQpcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIHM9MDtyZXR1cm4gaS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19dmFyIGRSdD1mUnQoY1J0KTtjb25zdCBsamU9ZFJ0O2Z1bmN0aW9uIFJYKGkscyl7cmV0dXJuIGxqZSh1amUoaSxzLE9DKSxpKyIiKX1mdW5jdGlvbiBRRihpLHMsdSl7aWYoIWFtKHUpKXJldHVybiExO3ZhciBkPXR5cGVvZiBzO3JldHVybihkPT0ibnVtYmVyIj93OSh1KSYmRlgocyx1Lmxlbmd0aCk6ZD09InN0cmluZyImJnMgaW4gdSk/cEQodVtzXSxpKTohMX1mdW5jdGlvbiBnUnQoaSl7cmV0dXJuIFJYKGZ1bmN0aW9uKHMsdSl7dmFyIGQ9LTEscD11Lmxlbmd0aCx2PXA+MT91W3AtMV06dm9pZCAwLGI9cD4yP3VbMl06dm9pZCAwO2Zvcih2PWkubGVuZ3RoPjMmJnR5cGVvZiB2PT0iZnVuY3Rpb24iPyhwLS0sdik6dm9pZCAwLGImJlFGKHVbMF0sdVsxXSxiKSYmKHY9cDwzP3ZvaWQgMDp2LHA9MSkscz1PYmplY3Qocyk7KytkPHA7KXt2YXIgeT11W2RdO3kmJmkocyx5LGQsdil9cmV0dXJuIHN9KX12YXIgcFJ0PWdSdChmdW5jdGlvbihpLHMsdSl7b2plKGkscyx1KX0pO2NvbnN0IGpYPXBSdCxoamU9IuKAiyIsYlJ0PXtjdXJ2ZUJhc2lzOkZGLGN1cnZlQmFzaXNDbG9zZWQ6TE50LGN1cnZlQmFzaXNPcGVuOk1OdCxjdXJ2ZUJ1bXBYOl9OdCxjdXJ2ZUJ1bXBZOkFOdCxjdXJ2ZUJ1bmRsZTpETnQsY3VydmVDYXJkaW5hbENsb3NlZDpPTnQsY3VydmVDYXJkaW5hbE9wZW46Tk50LGN1cnZlQ2FyZGluYWw6SU50LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDpCTnQsY3VydmVDYXRtdWxsUm9tT3BlbjpGTnQsY3VydmVDYXRtdWxsUm9tOlBOdCxjdXJ2ZUxpbmVhcjprcCxjdXJ2ZUxpbmVhckNsb3NlZDpSTnQsY3VydmVNb25vdG9uZVg6ak50LGN1cnZlTW9ub3RvbmVZOiROdCxjdXJ2ZU5hdHVyYWw6ek50LGN1cnZlU3RlcDpxTnQsY3VydmVTdGVwQWZ0ZXI6Vk50LGN1cnZlU3RlcEJlZm9yZTpITnR9LG1SdD0vXHMqKD86KFx3KykoPz06KTp8KFx3KykpXHMqKD86KFx3Kyl8KCg/Oig/IX0lezJ9KS58XHI/XG4pKikpP1xzKig/On0lezJ9KT8vZ2ksdlJ0PWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1mamUoaSwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLyk7bGV0IGQ9e307aWYoQXJyYXkuaXNBcnJheSh1KSl7Y29uc3QgYj11Lm1hcCh5PT55LmFyZ3MpO1NYKGIpLGQ9aWQoZCxbLi4uYl0pfWVsc2UgZD11LmFyZ3M7aWYoIWQpcmV0dXJuO2xldCBwPV9YKGkscyk7Y29uc3Qgdj0iY29uZmlnIjtyZXR1cm4gZFt2XSE9PXZvaWQgMCYmKHA9PT0iZmxvd2NoYXJ0LXYyIiYmKHA9ImZsb3djaGFydCIpLGRbcF09ZFt2XSxkZWxldGUgZFt2XSksZH0sZmplPWZ1bmN0aW9uKGkscz1udWxsKXt0cnl7Y29uc3QgdT1uZXcgUmVnRXhwKGBbJV17Mn0oPyFbe10ke21SdC5zb3VyY2V9KSg/PVt9XVslXXsyfSkuKgpgLCJpZyIpO2k9aS50cmltKCkucmVwbGFjZSh1LCIiKS5yZXBsYWNlKC8nL2dtLCciJyksWGUuZGVidWcoYERldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSR7cyE9PW51bGw/IiB0eXBlOiIrczoiIn0gYmFzZWQgb24gdGhlIHRleHQ6JHtpfWApO2xldCBkO2NvbnN0IHA9W107Zm9yKDsoZD1VRi5leGVjKGkpKSE9PW51bGw7KWlmKGQuaW5kZXg9PT1VRi5sYXN0SW5kZXgmJlVGLmxhc3RJbmRleCsrLGQmJiFzfHxzJiZkWzFdJiZkWzFdLm1hdGNoKHMpfHxzJiZkWzJdJiZkWzJdLm1hdGNoKHMpKXtjb25zdCB2PWRbMV0/ZFsxXTpkWzJdLGI9ZFszXT9kWzNdLnRyaW0oKTpkWzRdP0pTT04ucGFyc2UoZFs0XS50cmltKCkpOm51bGw7cC5wdXNoKHt0eXBlOnYsYXJnczpifSl9cmV0dXJuIHAubGVuZ3RoPT09MD97dHlwZTppLGFyZ3M6bnVsbH06cC5sZW5ndGg9PT0xP3BbMF06cH1jYXRjaCh1KXtyZXR1cm4gWGUuZXJyb3IoYEVSUk9SOiAke3UubWVzc2FnZX0gLSBVbmFibGUgdG8gcGFyc2UgZGlyZWN0aXZlIHR5cGU6ICcke3N9JyBiYXNlZCBvbiB0aGUgdGV4dDogJyR7aX0nYCkse3R5cGU6dm9pZCAwLGFyZ3M6bnVsbH19fSx3UnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGkucmVwbGFjZShVRiwiIil9LHlSdD1mdW5jdGlvbihpLHMpe2Zvcihjb25zdFt1LGRdb2Ygcy5lbnRyaWVzKCkpaWYoZC5tYXRjaChpKSlyZXR1cm4gdTtyZXR1cm4tMX07ZnVuY3Rpb24gT3YoaSxzKXtpZighaSlyZXR1cm4gcztjb25zdCB1PWBjdXJ2ZSR7aS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStpLnNsaWNlKDEpfWA7cmV0dXJuIGJSdFt1XT8/c31mdW5jdGlvbiB4UnQoaSxzKXtjb25zdCB1PWkudHJpbSgpO2lmKHUpcmV0dXJuIHMuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSI/cDkuc2FuaXRpemVVcmwodSk6dX1jb25zdCBrUnQ9KGksLi4ucyk9Pntjb25zdCB1PWkuc3BsaXQoIi4iKSxkPXUubGVuZ3RoLTEscD11W2RdO2xldCB2PXdpbmRvdztmb3IobGV0IGI9MDtiPGQ7YisrKWlmKHY9dlt1W2JdXSwhdil7WGUuZXJyb3IoYEZ1bmN0aW9uIG5hbWU6ICR7aX0gbm90IGZvdW5kIGluIHdpbmRvd2ApO3JldHVybn12W3BdKC4uLnMpfTtmdW5jdGlvbiBkamUoaSxzKXtyZXR1cm4haXx8IXM/MDpNYXRoLnNxcnQoTWF0aC5wb3cocy54LWkueCwyKStNYXRoLnBvdyhzLnktaS55LDIpKX1mdW5jdGlvbiBFUnQoaSl7bGV0IHMsdT0wO2kuZm9yRWFjaChwPT57dSs9ZGplKHAscykscz1wfSk7Y29uc3QgZD11LzI7cmV0dXJuIGsyZShpLGQpfWZ1bmN0aW9uIFRSdChpKXtyZXR1cm4gaS5sZW5ndGg9PT0xP2lbMF06RVJ0KGkpfWNvbnN0IGdqZT0oaSxzPTIpPT57Y29uc3QgdT1NYXRoLnBvdygxMCxzKTtyZXR1cm4gTWF0aC5yb3VuZChpKnUpL3V9LGsyZT0oaSxzKT0+e2xldCB1LGQ9cztmb3IoY29uc3QgcCBvZiBpKXtpZih1KXtjb25zdCB2PWRqZShwLHUpO2lmKHY8ZClkLT12O2Vsc2V7Y29uc3QgYj1kL3Y7aWYoYjw9MClyZXR1cm4gdTtpZihiPj0xKXJldHVybnt4OnAueCx5OnAueX07aWYoYj4wJiZiPDEpcmV0dXJue3g6Z2plKCgxLWIpKnUueCtiKnAueCw1KSx5OmdqZSgoMS1iKSp1LnkrYipwLnksNSl9fX11PXB9dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBhIHN1aXRhYmxlIHBvaW50IGZvciB0aGUgZ2l2ZW4gZGlzdGFuY2UiKX0sQ1J0PShpLHMsdSk9PntYZS5pbmZvKGBvdXIgcG9pbnRzICR7SlNPTi5zdHJpbmdpZnkocyl9YCksc1swXSE9PXUmJihzPXMucmV2ZXJzZSgpKTtjb25zdCBwPWsyZShzLDI1KSx2PWk/MTA6NSxiPU1hdGguYXRhbjIoc1swXS55LXAueSxzWzBdLngtcC54KSx5PXt4OjAseTowfTtyZXR1cm4geS54PU1hdGguc2luKGIpKnYrKHNbMF0ueCtwLngpLzIseS55PS1NYXRoLmNvcyhiKSp2KyhzWzBdLnkrcC55KS8yLHl9O2Z1bmN0aW9uIFNSdChpLHMsdSl7Y29uc3QgZD1zdHJ1Y3R1cmVkQ2xvbmUodSk7WGUuaW5mbygib3VyIHBvaW50cyIsZCkscyE9PSJzdGFydF9sZWZ0IiYmcyE9PSJzdGFydF9yaWdodCImJmQucmV2ZXJzZSgpO2NvbnN0IHA9MjUraSx2PWsyZShkLHApLGI9MTAraSouNSx5PU1hdGguYXRhbjIoZFswXS55LXYueSxkWzBdLngtdi54KSxUPXt4OjAseTowfTtyZXR1cm4gcz09PSJzdGFydF9sZWZ0Ij8oVC54PU1hdGguc2luKHkrTWF0aC5QSSkqYisoZFswXS54K3YueCkvMixULnk9LU1hdGguY29zKHkrTWF0aC5QSSkqYisoZFswXS55K3YueSkvMik6cz09PSJlbmRfcmlnaHQiPyhULng9TWF0aC5zaW4oeS1NYXRoLlBJKSpiKyhkWzBdLngrdi54KS8yLTUsVC55PS1NYXRoLmNvcyh5LU1hdGguUEkpKmIrKGRbMF0ueSt2LnkpLzItNSk6cz09PSJlbmRfbGVmdCI/KFQueD1NYXRoLnNpbih5KSpiKyhkWzBdLngrdi54KS8yLTUsVC55PS1NYXRoLmNvcyh5KSpiKyhkWzBdLnkrdi55KS8yLTUpOihULng9TWF0aC5zaW4oeSkqYisoZFswXS54K3YueCkvMixULnk9LU1hdGguY29zKHkpKmIrKGRbMF0ueSt2LnkpLzIpLFR9ZnVuY3Rpb24gb20oaSl7bGV0IHM9IiIsdT0iIjtmb3IoY29uc3QgZCBvZiBpKWQhPT12b2lkIDAmJihkLnN0YXJ0c1dpdGgoImNvbG9yOiIpfHxkLnN0YXJ0c1dpdGgoInRleHQtYWxpZ246Iik/dT11K2QrIjsiOnM9cytkKyI7Iik7cmV0dXJue3N0eWxlOnMsbGFiZWxTdHlsZTp1fX1sZXQgcGplPTA7Y29uc3QgYmplPSgpPT4ocGplKyssImlkLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpKyItIitwamUpO2Z1bmN0aW9uIF9SdChpKXtsZXQgcz0iIjtjb25zdCB1PSIwMTIzNDU2Nzg5YWJjZGVmIixkPXUubGVuZ3RoO2ZvcihsZXQgcD0wO3A8aTtwKyspcys9dS5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmQpKTtyZXR1cm4gc31jb25zdCBtamU9aT0+X1J0KGkubGVuZ3RoKSxBUnQ9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6InN0YXJ0IixzdHlsZToiIzY2NiIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx2YWxpZ246dm9pZCAwLHRleHQ6IiJ9fSxMUnQ9ZnVuY3Rpb24oaSxzKXtjb25zdCB1PXMudGV4dC5yZXBsYWNlKGNpLmxpbmVCcmVha1JlZ2V4LCIgIiksWyxkXT1OQyhzLmZvbnRTaXplKSxwPWkuYXBwZW5kKCJ0ZXh0Iik7cC5hdHRyKCJ4IixzLngpLHAuYXR0cigieSIscy55KSxwLnN0eWxlKCJ0ZXh0LWFuY2hvciIscy5hbmNob3IpLHAuc3R5bGUoImZvbnQtZmFtaWx5IixzLmZvbnRGYW1pbHkpLHAuc3R5bGUoImZvbnQtc2l6ZSIsZCkscC5zdHlsZSgiZm9udC13ZWlnaHQiLHMuZm9udFdlaWdodCkscC5hdHRyKCJmaWxsIixzLmZpbGwpLHMuY2xhc3MhPT12b2lkIDAmJnAuYXR0cigiY2xhc3MiLHMuY2xhc3MpO2NvbnN0IHY9cC5hcHBlbmQoInRzcGFuIik7cmV0dXJuIHYuYXR0cigieCIscy54K3MudGV4dE1hcmdpbioyKSx2LmF0dHIoImZpbGwiLHMuZmlsbCksdi50ZXh0KHUpLHB9LHZqZT1iRCgoaSxzLHUpPT57aWYoIWl8fCh1PU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixqb2luV2l0aDoiPGJyLz4ifSx1KSxjaS5saW5lQnJlYWtSZWdleC50ZXN0KGkpKSlyZXR1cm4gaTtjb25zdCBkPWkuc3BsaXQoIiAiKSxwPVtdO2xldCB2PSIiO3JldHVybiBkLmZvckVhY2goKGIseSk9Pntjb25zdCBUPUg0KGAke2J9IGAsdSksXz1INCh2LHUpO2lmKFQ+cyl7Y29uc3R7aHlwaGVuYXRlZFN0cmluZ3M6UixyZW1haW5pbmdXb3JkOkZ9PU1SdChiLHMsIi0iLHUpO3AucHVzaCh2LC4uLlIpLHY9Rn1lbHNlIF8rVD49cz8ocC5wdXNoKHYpLHY9Yik6dj1bdixiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO3krMT09PWQubGVuZ3RoJiZwLnB1c2godil9KSxwLmZpbHRlcihiPT5iIT09IiIpLmpvaW4odS5qb2luV2l0aCl9LChpLHMsdSk9PmAke2l9JHtzfSR7dS5mb250U2l6ZX0ke3UuZm9udFdlaWdodH0ke3UuZm9udEZhbWlseX0ke3Uuam9pbldpdGh9YCksTVJ0PWJEKChpLHMsdT0iLSIsZCk9PntkPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MH0sZCk7Y29uc3QgcD1bLi4uaV0sdj1bXTtsZXQgYj0iIjtyZXR1cm4gcC5mb3JFYWNoKCh5LFQpPT57Y29uc3QgXz1gJHtifSR7eX1gO2lmKEg0KF8sZCk+PXMpe2NvbnN0IFA9VCsxLFI9cC5sZW5ndGg9PT1QLEY9YCR7X30ke3V9YDt2LnB1c2goUj9fOkYpLGI9IiJ9ZWxzZSBiPV99KSx7aHlwaGVuYXRlZFN0cmluZ3M6dixyZW1haW5pbmdXb3JkOmJ9fSwoaSxzLHU9Ii0iLGQpPT5gJHtpfSR7c30ke3V9JHtkLmZvbnRTaXplfSR7ZC5mb250V2VpZ2h0fSR7ZC5mb250RmFtaWx5fWApO2Z1bmN0aW9uIEUyZShpLHMpe3JldHVybiBUMmUoaSxzKS5oZWlnaHR9ZnVuY3Rpb24gSDQoaSxzKXtyZXR1cm4gVDJlKGkscykud2lkdGh9Y29uc3QgVDJlPWJEKChpLHMpPT57Y29uc3R7Zm9udFNpemU6dT0xMixmb250RmFtaWx5OmQ9IkFyaWFsIixmb250V2VpZ2h0OnA9NDAwfT1zO2lmKCFpKXJldHVybnt3aWR0aDowLGhlaWdodDowfTtjb25zdFssdl09TkModSksYj1bInNhbnMtc2VyaWYiLGRdLHk9aS5zcGxpdChjaS5saW5lQnJlYWtSZWdleCksVD1bXSxfPUlyKCJib2R5Iik7aWYoIV8ucmVtb3ZlKXJldHVybnt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07Y29uc3QgQT1fLmFwcGVuZCgic3ZnIik7Zm9yKGNvbnN0IFIgb2YgYil7bGV0IEY9MDtjb25zdCBqPXt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07Zm9yKGNvbnN0IEsgb2YgeSl7Y29uc3QgZWU9QVJ0KCk7ZWUudGV4dD1LfHxoamU7Y29uc3QgaWU9TFJ0KEEsZWUpLnN0eWxlKCJmb250LXNpemUiLHYpLnN0eWxlKCJmb250LXdlaWdodCIscCkuc3R5bGUoImZvbnQtZmFtaWx5IixSKSxvZT0oaWUuX2dyb3Vwc3x8aWUpWzBdWzBdLmdldEJCb3goKTtpZihvZS53aWR0aD09PTAmJm9lLmhlaWdodD09PTApdGhyb3cgbmV3IEVycm9yKCJzdmcgZWxlbWVudCBub3QgaW4gcmVuZGVyIHRyZWUiKTtqLndpZHRoPU1hdGgucm91bmQoTWF0aC5tYXgoai53aWR0aCxvZS53aWR0aCkpLEY9TWF0aC5yb3VuZChvZS5oZWlnaHQpLGouaGVpZ2h0Kz1GLGoubGluZUhlaWdodD1NYXRoLnJvdW5kKE1hdGgubWF4KGoubGluZUhlaWdodCxGKSl9VC5wdXNoKGopfUEucmVtb3ZlKCk7Y29uc3QgUD1pc05hTihUWzFdLmhlaWdodCl8fGlzTmFOKFRbMV0ud2lkdGgpfHxpc05hTihUWzFdLmxpbmVIZWlnaHQpfHxUWzBdLmhlaWdodD5UWzFdLmhlaWdodCYmVFswXS53aWR0aD5UWzFdLndpZHRoJiZUWzBdLmxpbmVIZWlnaHQ+VFsxXS5saW5lSGVpZ2h0PzA6MTtyZXR1cm4gVFtQXX0sKGkscyk9PmAke2l9JHtzLmZvbnRTaXplfSR7cy5mb250V2VpZ2h0fSR7cy5mb250RmFtaWx5fWApO2NsYXNzIERSdHtjb25zdHJ1Y3RvcihzPSExLHUpe3RoaXMuY291bnQ9MCx0aGlzLmNvdW50PXU/dS5sZW5ndGg6MCx0aGlzLm5leHQ9cz8oKT0+dGhpcy5jb3VudCsrOigpPT5EYXRlLm5vdygpfX1sZXQgJFg7Y29uc3QgSVJ0PWZ1bmN0aW9uKGkpe3JldHVybiAkWD0kWHx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksaT1lc2NhcGUoaSkucmVwbGFjZSgvJTI2L2csIiYiKS5yZXBsYWNlKC8lMjMvZywiIyIpLnJlcGxhY2UoLyUzQi9nLCI7IiksJFguaW5uZXJIVE1MPWksdW5lc2NhcGUoJFgudGV4dENvbnRlbnQpfTtmdW5jdGlvbiB3amUoaSl7cmV0dXJuInN0ciJpbiBpfWNvbnN0IE9SdD0oaSxzLHUsZCk9Pnt2YXIgdjtpZighZClyZXR1cm47Y29uc3QgcD0odj1pLm5vZGUoKSk9PW51bGw/dm9pZCAwOnYuZ2V0QkJveCgpO3AmJmkuYXBwZW5kKCJ0ZXh0IikudGV4dChkKS5hdHRyKCJ4IixwLngrcC53aWR0aC8yKS5hdHRyKCJ5IiwtdSkuYXR0cigiY2xhc3MiLHMpfSxOQz1pPT57aWYodHlwZW9mIGk9PSJudW1iZXIiKXJldHVybltpLGkrInB4Il07Y29uc3Qgcz1wYXJzZUludChpPz8iIiwxMCk7cmV0dXJuIE51bWJlci5pc05hTihzKT9bdm9pZCAwLHZvaWQgMF06aT09PVN0cmluZyhzKT9bcyxpKyJweCJdOltzLGldfTtmdW5jdGlvbiBKRihpLHMpe3JldHVybiBqWCh7fSxpLHMpfWNvbnN0IEFvPXthc3NpZ25XaXRoRGVwdGg6aWQsd3JhcExhYmVsOnZqZSxjYWxjdWxhdGVUZXh0SGVpZ2h0OkUyZSxjYWxjdWxhdGVUZXh0V2lkdGg6SDQsY2FsY3VsYXRlVGV4dERpbWVuc2lvbnM6VDJlLGNsZWFuQW5kTWVyZ2U6SkYsZGV0ZWN0SW5pdDp2UnQsZGV0ZWN0RGlyZWN0aXZlOmZqZSxpc1N1YnN0cmluZ0luQXJyYXk6eVJ0LGludGVycG9sYXRlVG9DdXJ2ZTpPdixjYWxjTGFiZWxQb3NpdGlvbjpUUnQsY2FsY0NhcmRpbmFsaXR5UG9zaXRpb246Q1J0LGNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb246U1J0LGZvcm1hdFVybDp4UnQsZ2V0U3R5bGVzRnJvbUFycmF5Om9tLGdlbmVyYXRlSWQ6YmplLHJhbmRvbTptamUscnVuRnVuYzprUnQsZW50aXR5RGVjb2RlOklSdCxpbnNlcnRUaXRsZTpPUnQscGFyc2VGb250U2l6ZTpOQyxJbml0SURHZW5lcmF0b3I6RFJ0fSxOUnQ9ZnVuY3Rpb24oaSl7bGV0IHM9aTtyZXR1cm4gcz1zLnJlcGxhY2UoL3N0eWxlLio6XFMqIy4qOy9nLGZ1bmN0aW9uKHUpe3JldHVybiB1LnN1YnN0cmluZygwLHUubGVuZ3RoLTEpfSkscz1zLnJlcGxhY2UoL2NsYXNzRGVmLio6XFMqIy4qOy9nLGZ1bmN0aW9uKHUpe3JldHVybiB1LnN1YnN0cmluZygwLHUubGVuZ3RoLTEpfSkscz1zLnJlcGxhY2UoLyNcdys7L2csZnVuY3Rpb24odSl7Y29uc3QgZD11LnN1YnN0cmluZygxLHUubGVuZ3RoLTEpO3JldHVybi9eXCs/XGQrJC8udGVzdChkKT8i76yCwrDCsCIrZCsiwrbDnyI6Iu+sgsKwIitkKyLCtsOfIn0pLHN9LFpGPWZ1bmN0aW9uKGkpe3JldHVybiBpLnJlcGxhY2UoL++sgsKwwrAvZywiJiMiKS5yZXBsYWNlKC/vrILCsC9nLCImIikucmVwbGFjZSgvwrbDny9nLCI7Iil9O3ZhciB5amU9ImNvbW0iLHhqZT0icnVsZSIsa2plPSJkZWNsIixQUnQ9IkBpbXBvcnQiLEJSdD0iQGtleWZyYW1lcyIsRlJ0PSJAbGF5ZXIiLEVqZT1NYXRoLmFicyxDMmU9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBUamUoaSl7cmV0dXJuIGkudHJpbSgpfWZ1bmN0aW9uIHpYKGkscyx1KXtyZXR1cm4gaS5yZXBsYWNlKHMsdSl9ZnVuY3Rpb24gUlJ0KGkscyx1KXtyZXR1cm4gaS5pbmRleE9mKHMsdSl9ZnVuY3Rpb24gZVIoaSxzKXtyZXR1cm4gaS5jaGFyQ29kZUF0KHMpfDB9ZnVuY3Rpb24gdFIoaSxzLHUpe3JldHVybiBpLnNsaWNlKHMsdSl9ZnVuY3Rpb24gXzcoaSl7cmV0dXJuIGkubGVuZ3RofWZ1bmN0aW9uIGpSdChpKXtyZXR1cm4gaS5sZW5ndGh9ZnVuY3Rpb24gcVgoaSxzKXtyZXR1cm4gcy5wdXNoKGkpLGl9dmFyIEhYPTEseEQ9MSxDamU9MCxOdj0wLEkwPTAsa0Q9IiI7ZnVuY3Rpb24gUzJlKGkscyx1LGQscCx2LGIseSl7cmV0dXJue3ZhbHVlOmkscm9vdDpzLHBhcmVudDp1LHR5cGU6ZCxwcm9wczpwLGNoaWxkcmVuOnYsbGluZTpIWCxjb2x1bW46eEQsbGVuZ3RoOmIscmV0dXJuOiIiLHNpYmxpbmdzOnl9fWZ1bmN0aW9uICRSdCgpe3JldHVybiBJMH1mdW5jdGlvbiB6UnQoKXtyZXR1cm4gSTA9TnY+MD9lUihrRCwtLU52KTowLHhELS0sSTA9PT0xMCYmKHhEPTEsSFgtLSksSTB9ZnVuY3Rpb24gQjMoKXtyZXR1cm4gSTA9TnY8Q2plP2VSKGtELE52KyspOjAseEQrKyxJMD09PTEwJiYoeEQ9MSxIWCsrKSxJMH1mdW5jdGlvbiBQQygpe3JldHVybiBlUihrRCxOdil9ZnVuY3Rpb24gVlgoKXtyZXR1cm4gTnZ9ZnVuY3Rpb24gVVgoaSxzKXtyZXR1cm4gdFIoa0QsaSxzKX1mdW5jdGlvbiBfMmUoaSl7c3dpdGNoKGkpe2Nhc2UgMDpjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIDU7Y2FzZSAzMzpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0NzpjYXNlIDYyOmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA1OTpjYXNlIDEyMzpjYXNlIDEyNTpyZXR1cm4gNDtjYXNlIDU4OnJldHVybiAzO2Nhc2UgMzQ6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgOTE6cmV0dXJuIDI7Y2FzZSA0MTpjYXNlIDkzOnJldHVybiAxfXJldHVybiAwfWZ1bmN0aW9uIHFSdChpKXtyZXR1cm4gSFg9eEQ9MSxDamU9Xzcoa0Q9aSksTnY9MCxbXX1mdW5jdGlvbiBIUnQoaSl7cmV0dXJuIGtEPSIiLGl9ZnVuY3Rpb24gQTJlKGkpe3JldHVybiBUamUoVVgoTnYtMSxMMmUoaT09PTkxP2krMjppPT09NDA/aSsxOmkpKSl9ZnVuY3Rpb24gVlJ0KGkpe2Zvcig7KEkwPVBDKCkpJiZJMDwzMzspQjMoKTtyZXR1cm4gXzJlKGkpPjJ8fF8yZShJMCk+Mz8iIjoiICJ9ZnVuY3Rpb24gVVJ0KGkscyl7Zm9yKDstLXMmJkIzKCkmJiEoSTA8NDh8fEkwPjEwMnx8STA+NTcmJkkwPDY1fHxJMD43MCYmSTA8OTcpOyk7cmV0dXJuIFVYKGksVlgoKSsoczw2JiZQQygpPT0zMiYmQjMoKT09MzIpKX1mdW5jdGlvbiBMMmUoaSl7Zm9yKDtCMygpOylzd2l0Y2goSTApe2Nhc2UgaTpyZXR1cm4gTnY7Y2FzZSAzNDpjYXNlIDM5OmkhPT0zNCYmaSE9PTM5JiZMMmUoSTApO2JyZWFrO2Nhc2UgNDA6aT09PTQxJiZMMmUoaSk7YnJlYWs7Y2FzZSA5MjpCMygpO2JyZWFrfXJldHVybiBOdn1mdW5jdGlvbiBHUnQoaSxzKXtmb3IoO0IzKCkmJmkrSTAhPT00NysxMDspaWYoaStJMD09PTQyKzQyJiZQQygpPT09NDcpYnJlYWs7cmV0dXJuIi8qIitVWChzLE52LTEpKyIqIitDMmUoaT09PTQ3P2k6QjMoKSl9ZnVuY3Rpb24gS1J0KGkpe2Zvcig7IV8yZShQQygpKTspQjMoKTtyZXR1cm4gVVgoaSxOdil9ZnVuY3Rpb24gV1J0KGkpe3JldHVybiBIUnQoR1goIiIsbnVsbCxudWxsLG51bGwsWyIiXSxpPXFSdChpKSwwLFswXSxpKSl9ZnVuY3Rpb24gR1goaSxzLHUsZCxwLHYsYix5LFQpe2Zvcih2YXIgXz0wLEE9MCxQPWIsUj0wLEY9MCxqPTAsSz0xLGVlPTEsaWU9MSxvZT0wLHBlPSIiLGJlPXAsYWU9dixuZT1kLHNlPXBlO2VlOylzd2l0Y2goaj1vZSxvZT1CMygpKXtjYXNlIDQwOmlmKGohPTEwOCYmZVIoc2UsUC0xKT09NTgpe1JSdChzZSs9elgoQTJlKG9lKSwiJiIsIiZcZiIpLCImXGYiLEVqZShfP3lbXy0xXTowKSkhPS0xJiYoaWU9LTEpO2JyZWFrfWNhc2UgMzQ6Y2FzZSAzOTpjYXNlIDkxOnNlKz1BMmUob2UpO2JyZWFrO2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpzZSs9VlJ0KGopO2JyZWFrO2Nhc2UgOTI6c2UrPVVSdChWWCgpLTEsNyk7Y29udGludWU7Y2FzZSA0Nzpzd2l0Y2goUEMoKSl7Y2FzZSA0MjpjYXNlIDQ3OnFYKFlSdChHUnQoQjMoKSxWWCgpKSxzLHUsVCksVCk7YnJlYWs7ZGVmYXVsdDpzZSs9Ii8ifWJyZWFrO2Nhc2UgMTIzKks6eVtfKytdPV83KHNlKSppZTtjYXNlIDEyNSpLOmNhc2UgNTk6Y2FzZSAwOnN3aXRjaChvZSl7Y2FzZSAwOmNhc2UgMTI1OmVlPTA7Y2FzZSA1OStBOmllPT0tMSYmKHNlPXpYKHNlLC9cZi9nLCIiKSksRj4wJiZfNyhzZSktUCYmcVgoRj4zMj9famUoc2UrIjsiLGQsdSxQLTEsVCk6X2plKHpYKHNlLCIgIiwiIikrIjsiLGQsdSxQLTIsVCksVCk7YnJlYWs7Y2FzZSA1OTpzZSs9IjsiO2RlZmF1bHQ6aWYocVgobmU9U2plKHNlLHMsdSxfLEEscCx5LHBlLGJlPVtdLGFlPVtdLFAsdiksdiksb2U9PT0xMjMpaWYoQT09PTApR1goc2UscyxuZSxuZSxiZSx2LFAseSxhZSk7ZWxzZSBzd2l0Y2goUj09PTk5JiZlUihzZSwzKT09PTExMD8xMDA6Uil7Y2FzZSAxMDA6Y2FzZSAxMDg6Y2FzZSAxMDk6Y2FzZSAxMTU6R1goaSxuZSxuZSxkJiZxWChTamUoaSxuZSxuZSwwLDAscCx5LHBlLHAsYmU9W10sUCxhZSksYWUpLHAsYWUsUCx5LGQ/YmU6YWUpO2JyZWFrO2RlZmF1bHQ6R1goc2UsbmUsbmUsbmUsWyIiXSxhZSwwLHksYWUpfX1fPUE9Rj0wLEs9aWU9MSxwZT1zZT0iIixQPWI7YnJlYWs7Y2FzZSA1ODpQPTErXzcoc2UpLEY9ajtkZWZhdWx0OmlmKEs8MSl7aWYob2U9PTEyMyktLUs7ZWxzZSBpZihvZT09MTI1JiZLKys9PTAmJnpSdCgpPT0xMjUpY29udGludWV9c3dpdGNoKHNlKz1DMmUob2UpLG9lKkspe2Nhc2UgMzg6aWU9QT4wPzE6KHNlKz0iXGYiLC0xKTticmVhaztjYXNlIDQ0OnlbXysrXT0oXzcoc2UpLTEpKmllLGllPTE7YnJlYWs7Y2FzZSA2NDpQQygpPT09NDUmJihzZSs9QTJlKEIzKCkpKSxSPVBDKCksQT1QPV83KHBlPXNlKz1LUnQoVlgoKSkpLG9lKys7YnJlYWs7Y2FzZSA0NTpqPT09NDUmJl83KHNlKT09MiYmKEs9MCl9fXJldHVybiB2fWZ1bmN0aW9uIFNqZShpLHMsdSxkLHAsdixiLHksVCxfLEEsUCl7Zm9yKHZhciBSPXAtMSxGPXA9PT0wP3Y6WyIiXSxqPWpSdChGKSxLPTAsZWU9MCxpZT0wO0s8ZDsrK0spZm9yKHZhciBvZT0wLHBlPXRSKGksUisxLFI9RWplKGVlPWJbS10pKSxiZT1pO29lPGo7KytvZSkoYmU9VGplKGVlPjA/RltvZV0rIiAiK3BlOnpYKHBlLC8mXGYvZyxGW29lXSkpKSYmKFRbaWUrK109YmUpO3JldHVybiBTMmUoaSxzLHUscD09PTA/eGplOnksVCxfLEEsUCl9ZnVuY3Rpb24gWVJ0KGkscyx1LGQpe3JldHVybiBTMmUoaSxzLHUseWplLEMyZSgkUnQoKSksdFIoaSwyLC0yKSwwLGQpfWZ1bmN0aW9uIF9qZShpLHMsdSxkLHApe3JldHVybiBTMmUoaSxzLHUsa2plLHRSKGksMCxkKSx0UihpLGQrMSwtMSksZCxwKX1mdW5jdGlvbiBNMmUoaSxzKXtmb3IodmFyIHU9IiIsZD0wO2Q8aS5sZW5ndGg7ZCsrKXUrPXMoaVtkXSxkLGkscyl8fCIiO3JldHVybiB1fWZ1bmN0aW9uIFhSdChpLHMsdSxkKXtzd2l0Y2goaS50eXBlKXtjYXNlIEZSdDppZihpLmNoaWxkcmVuLmxlbmd0aClicmVhaztjYXNlIFBSdDpjYXNlIGtqZTpyZXR1cm4gaS5yZXR1cm49aS5yZXR1cm58fGkudmFsdWU7Y2FzZSB5amU6cmV0dXJuIiI7Y2FzZSBCUnQ6cmV0dXJuIGkucmV0dXJuPWkudmFsdWUrInsiK00yZShpLmNoaWxkcmVuLGQpKyJ9IjtjYXNlIHhqZTppZighXzcoaS52YWx1ZT1pLnByb3BzLmpvaW4oIiwiKSkpcmV0dXJuIiJ9cmV0dXJuIF83KHU9TTJlKGkuY2hpbGRyZW4sZCkpP2kucmV0dXJuPWkudmFsdWUrInsiK3UrIn0iOiIifWNvbnN0IEFqZT0iMTAuOS4xIixFRD1PYmplY3QuZnJlZXplKHNoKTtsZXQgQjI9aWQoe30sRUQpLExqZSxURD1bXSxuUj1pZCh7fSxFRCk7Y29uc3QgS1g9KGkscyk9PntsZXQgdT1pZCh7fSxpKSxkPXt9O2Zvcihjb25zdCBwIG9mIHMpSWplKHApLGQ9aWQoZCxwKTtpZih1PWlkKHUsZCksZC50aGVtZSYmZC50aGVtZSBpbiBFNyl7Y29uc3QgcD1pZCh7fSxMamUpLHY9aWQocC50aGVtZVZhcmlhYmxlc3x8e30sZC50aGVtZVZhcmlhYmxlcyk7dS50aGVtZSYmdS50aGVtZSBpbiBFNyYmKHUudGhlbWVWYXJpYWJsZXM9RTdbdS50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXModikpfXJldHVybiBuUj11LE5qZShuUiksblJ9LFFSdD1pPT4oQjI9aWQoe30sRUQpLEIyPWlkKEIyLGkpLGkudGhlbWUmJkU3W2kudGhlbWVdJiYoQjIudGhlbWVWYXJpYWJsZXM9RTdbaS50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMoaS50aGVtZVZhcmlhYmxlcykpLEtYKEIyLFREKSxCMiksSlJ0PWk9PntMamU9aWQoe30saSl9LFpSdD1pPT4oQjI9aWQoQjIsaSksS1goQjIsVEQpLEIyKSxNamU9KCk9PmlkKHt9LEIyKSxEamU9aT0+KE5qZShpKSxpZChuUixpKSxWaCgpKSxWaD0oKT0+aWQoe30sblIpLElqZT1pPT57aSYmKFsic2VjdXJlIiwuLi5CMi5zZWN1cmU/P1tdXS5mb3JFYWNoKHM9PntPYmplY3QuaGFzT3duKGkscykmJihYZS5kZWJ1ZyhgRGVuaWVkIGF0dGVtcHQgdG8gbW9kaWZ5IGEgc2VjdXJlIGtleSAke3N9YCxpW3NdKSxkZWxldGUgaVtzXSl9KSxPYmplY3Qua2V5cyhpKS5mb3JFYWNoKHM9PntzLnN0YXJ0c1dpdGgoIl9fIikmJmRlbGV0ZSBpW3NdfSksT2JqZWN0LmtleXMoaSkuZm9yRWFjaChzPT57dHlwZW9mIGlbc109PSJzdHJpbmciJiYoaVtzXS5pbmNsdWRlcygiPCIpfHxpW3NdLmluY2x1ZGVzKCI+Iil8fGlbc10uaW5jbHVkZXMoInVybChkYXRhOiIpKSYmZGVsZXRlIGlbc10sdHlwZW9mIGlbc109PSJvYmplY3QiJiZJamUoaVtzXSl9KSl9LGVqdD1pPT57U1goaSksaS5mb250RmFtaWx5JiYoIWkudGhlbWVWYXJpYWJsZXN8fCFpLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHkpJiYoaS50aGVtZVZhcmlhYmxlcz17Zm9udEZhbWlseTppLmZvbnRGYW1pbHl9KSxURC5wdXNoKGkpLEtYKEIyLFREKX0sV1g9KGk9QjIpPT57VEQ9W10sS1goaSxURCl9LHRqdD17TEFaWV9MT0FEX0RFUFJFQ0FURUQ6IlRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGF6eUxvYWRlZERpYWdyYW1zIGFuZCBsb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCBhcmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgaW5zdGVhZC4ifSxPamU9e30sbmp0PWk9PntPamVbaV18fChYZS53YXJuKHRqdFtpXSksT2plW2ldPSEwKX0sTmplPWk9PntpJiYoaS5sYXp5TG9hZGVkRGlhZ3JhbXN8fGkubG9hZEV4dGVybmFsRGlhZ3JhbXNBdFN0YXJ0dXApJiZuanQoIkxBWllfTE9BRF9ERVBSRUNBVEVEIil9LFBqZT0iYzQiLHJqdD17aWQ6UGplLGRldGVjdG9yOmk9Pi9eXHMqQzRDb250ZXh0fEM0Q29udGFpbmVyfEM0Q29tcG9uZW50fEM0RHluYW1pY3xDNERlcGxveW1lbnQvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PndVdCk7cmV0dXJue2lkOlBqZSxkaWFncmFtOml9fX0sQmplPSJmbG93Y2hhcnQiLGlqdD17aWQ6QmplLGRldGVjdG9yOihpLHMpPT57dmFyIHUsZDtyZXR1cm4oKHU9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciJ8fCgoZD1zPT1udWxsP3ZvaWQgMDpzLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOmQuZGVmYXVsdFJlbmRlcmVyKT09PSJlbGsiPyExOi9eXHMqZ3JhcGgvLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5fZW4pO3JldHVybntpZDpCamUsZGlhZ3JhbTppfX19LEZqZT0iZmxvd2NoYXJ0LXYyIixzanQ9e2lkOkZqZSxkZXRlY3RvcjooaSxzKT0+e3ZhciB1LGQscDtyZXR1cm4oKHU9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtZDMifHwoKGQ9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpkLmRlZmF1bHRSZW5kZXJlcik9PT0iZWxrIj8hMTovXlxzKmdyYXBoLy50ZXN0KGkpJiYoKHA9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpwLmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITA6L15ccypmbG93Y2hhcnQvLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5BZW4pO3JldHVybntpZDpGamUsZGlhZ3JhbTppfX19LFJqZT0iZXIiLGFqdD17aWQ6UmplLGRldGVjdG9yOmk9Pi9eXHMqZXJEaWFncmFtLy50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ldG4pO3JldHVybntpZDpSamUsZGlhZ3JhbTppfX19LGpqZT0iZ2l0R3JhcGgiLG9qdD17aWQ6amplLGRldGVjdG9yOmk9Pi9eXHMqZ2l0R3JhcGgvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlN0bik7cmV0dXJue2lkOmpqZSxkaWFncmFtOml9fX0sJGplPSJnYW50dCIsY2p0PXtpZDokamUsZGV0ZWN0b3I6aT0+L15ccypnYW50dC8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+cG5uKTtyZXR1cm57aWQ6JGplLGRpYWdyYW06aX19fSx6amU9ImluZm8iLHVqdD17aWQ6emplLGRldGVjdG9yOmk9Pi9eXHMqaW5mby8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bW5uKTtyZXR1cm57aWQ6emplLGRpYWdyYW06aX19fSxxamU9InBpZSIsbGp0PXtpZDpxamUsZGV0ZWN0b3I6aT0+L15ccypwaWUvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkVubik7cmV0dXJue2lkOnFqZSxkaWFncmFtOml9fX0sSGplPSJxdWFkcmFudENoYXJ0IixoanQ9e2lkOkhqZSxkZXRlY3RvcjppPT4vXlxzKnF1YWRyYW50Q2hhcnQvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pmpubik7cmV0dXJue2lkOkhqZSxkaWFncmFtOml9fX0sVmplPSJ4eWNoYXJ0IixmanQ9e2lkOlZqZSxkZXRlY3RvcjppPT4vXlxzKnh5Y2hhcnQtYmV0YS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dXJuKTtyZXR1cm57aWQ6VmplLGRpYWdyYW06aX19fSxVamU9InJlcXVpcmVtZW50IixkanQ9e2lkOlVqZSxkZXRlY3RvcjppPT4vXlxzKnJlcXVpcmVtZW50KERpYWdyYW0pPy8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+d3JuKTtyZXR1cm57aWQ6VWplLGRpYWdyYW06aX19fSxHamU9InNlcXVlbmNlIixnanQ9e2lkOkdqZSxkZXRlY3RvcjppPT4vXlxzKnNlcXVlbmNlRGlhZ3JhbS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+a2luKTtyZXR1cm57aWQ6R2plLGRpYWdyYW06aX19fSxLamU9ImNsYXNzIixwanQ9e2lkOktqZSxkZXRlY3RvcjooaSxzKT0+e3ZhciB1O3JldHVybigodT1zPT1udWxsP3ZvaWQgMDpzLmNsYXNzKT09bnVsbD92b2lkIDA6dS5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiPyExOi9eXHMqY2xhc3NEaWFncmFtLy50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+R2luKTtyZXR1cm57aWQ6S2plLGRpYWdyYW06aX19fSxXamU9ImNsYXNzRGlhZ3JhbSIsYmp0PXtpZDpXamUsZGV0ZWN0b3I6KGkscyk9Pnt2YXIgdTtyZXR1cm4vXlxzKmNsYXNzRGlhZ3JhbS8udGVzdChpKSYmKCh1PXM9PW51bGw/dm9pZCAwOnMuY2xhc3MpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITA6L15ccypjbGFzc0RpYWdyYW0tdjIvLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5KaW4pO3JldHVybntpZDpXamUsZGlhZ3JhbTppfX19LFlqZT0ic3RhdGUiLG1qdD17aWQ6WWplLGRldGVjdG9yOihpLHMpPT57dmFyIHU7cmV0dXJuKCh1PXM9PW51bGw/dm9pZCAwOnMuc3RhdGUpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITE6L15ccypzdGF0ZURpYWdyYW0vLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5qc24pO3JldHVybntpZDpZamUsZGlhZ3JhbTppfX19LFhqZT0ic3RhdGVEaWFncmFtIix2anQ9e2lkOlhqZSxkZXRlY3RvcjooaSxzKT0+e3ZhciB1O3JldHVybiEhKC9eXHMqc3RhdGVEaWFncmFtLXYyLy50ZXN0KGkpfHwvXlxzKnN0YXRlRGlhZ3JhbS8udGVzdChpKSYmKCh1PXM9PW51bGw/dm9pZCAwOnMuc3RhdGUpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciIpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+aWFuKTtyZXR1cm57aWQ6WGplLGRpYWdyYW06aX19fSxRamU9ImpvdXJuZXkiLHdqdD17aWQ6UWplLGRldGVjdG9yOmk9Pi9eXHMqam91cm5leS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+RWFuKTtyZXR1cm57aWQ6UWplLGRpYWdyYW06aX19fSx5anQ9ZnVuY3Rpb24oaSxzKXtmb3IobGV0IHUgb2YgcylpLmF0dHIodVswXSx1WzFdKX0seGp0PWZ1bmN0aW9uKGkscyx1KXtsZXQgZD1uZXcgTWFwO3JldHVybiB1PyhkLnNldCgid2lkdGgiLCIxMDAlIiksZC5zZXQoInN0eWxlIixgbWF4LXdpZHRoOiAke3N9cHg7YCkpOihkLnNldCgiaGVpZ2h0IixpKSxkLnNldCgid2lkdGgiLHMpKSxkfSxOZz1mdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPXhqdChzLHUsZCk7eWp0KGkscCl9LHk5PWZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0IHA9cy5ub2RlKCkuZ2V0QkJveCgpLHY9cC53aWR0aCxiPXAuaGVpZ2h0O1hlLmluZm8oYFNWRyBib3VuZHM6ICR7dn14JHtifWAscCk7bGV0IHk9MCxUPTA7WGUuaW5mbyhgR3JhcGggYm91bmRzOiAke3l9eCR7VH1gLGkpLHk9dit1KjIsVD1iK3UqMixYZS5pbmZvKGBDYWxjdWxhdGVkIGJvdW5kczogJHt5fXgke1R9YCksTmcocyxULHksZCk7Y29uc3QgXz1gJHtwLngtdX0gJHtwLnktdX0gJHtwLndpZHRoKzIqdX0gJHtwLmhlaWdodCsyKnV9YDtzLmF0dHIoInZpZXdCb3giLF8pfSxZWD17fSxranQ9KGkscyx1KT0+e2xldCBkPSIiO3JldHVybiBpIGluIFlYJiZZWFtpXT9kPVlYW2ldKHUpOlhlLndhcm4oYE5vIHRoZW1lIGZvdW5kIGZvciAke2l9YCksYCAmIHsKICAgIGZvbnQtZmFtaWx5OiAke3UuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7dS5mb250U2l6ZX07CiAgICBmaWxsOiAke3UudGV4dENvbG9yfQogIH0KCiAgLyogQ2xhc3NlcyBjb21tb24gZm9yIG11bHRpcGxlIGRpYWdyYW1zICovCgogICYgLmVycm9yLWljb24gewogICAgZmlsbDogJHt1LmVycm9yQmtnQ29sb3J9OwogIH0KICAmIC5lcnJvci10ZXh0IHsKICAgIGZpbGw6ICR7dS5lcnJvclRleHRDb2xvcn07CiAgICBzdHJva2U6ICR7dS5lcnJvclRleHRDb2xvcn07CiAgfQoKICAmIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwgewogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQogICYgLmVkZ2UtdGhpY2tuZXNzLXRoaWNrIHsKICAgIHN0cm9rZS13aWR0aDogMy41cHgKICB9CiAgJiAuZWRnZS1wYXR0ZXJuLXNvbGlkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDA7CiAgfQoKICAmIC5lZGdlLXBhdHRlcm4tZGFzaGVkewogICAgc3Ryb2tlLWRhc2hhcnJheTogMzsKICB9CiAgLmVkZ2UtcGF0dGVybi1kb3R0ZWQgewogICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICB9CgogICYgLm1hcmtlciB7CiAgICBmaWxsOiAke3UubGluZUNvbG9yfTsKICAgIHN0cm9rZTogJHt1LmxpbmVDb2xvcn07CiAgfQogICYgLm1hcmtlci5jcm9zcyB7CiAgICBzdHJva2U6ICR7dS5saW5lQ29sb3J9OwogIH0KCiAgJiBzdmcgewogICAgZm9udC1mYW1pbHk6ICR7dS5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHt1LmZvbnRTaXplfTsKICB9CgogICR7ZH0KCiAgJHtzfQpgfSxFanQ9KGkscyk9PntzIT09dm9pZCAwJiYoWVhbaV09cyl9LFRqdD1ranQ7bGV0IEQyZT0iIixJMmU9IiIsTzJlPSIiO2NvbnN0IE4yZT1pPT5ZZihpLFZoKCkpLFBnPSgpPT57RDJlPSIiLE8yZT0iIixJMmU9IiJ9LEJnPWk9PntEMmU9TjJlKGkpLnJlcGxhY2UoL15ccysvZywiIil9LENwPSgpPT5EMmUsU3A9aT0+e08yZT1OMmUoaSkucmVwbGFjZSgvXG5ccysvZyxgCmApfSxfcD0oKT0+TzJlLGNtPWk9PntJMmU9TjJlKGkpfSxBcD0oKT0+STJlLEpqZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsY2xlYXI6UGcsZ2V0QWNjRGVzY3JpcHRpb246X3AsZ2V0QWNjVGl0bGU6Q3AsZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldEFjY0Rlc2NyaXB0aW9uOlNwLHNldEFjY1RpdGxlOkJnLHNldERpYWdyYW1UaXRsZTpjbX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxDanQ9WGUsU2p0PWZwZSxxdD1WaCxfanQ9RGplLFpqZT1FRCxBanQ9aT0+WWYoaSxxdCgpKSxlJGU9eTksTGp0PSgpPT5KamUsWFg9e30sUVg9KGkscyx1KT0+e3ZhciBkO2lmKFhYW2ldKXRocm93IG5ldyBFcnJvcihgRGlhZ3JhbSAke2l9IGFscmVhZHkgcmVnaXN0ZXJlZC5gKTtYWFtpXT1zLHUmJlBSZShpLHUpLEVqdChpLHMuc3R5bGVzKSwoZD1zLmluamVjdFV0aWxzKT09bnVsbHx8ZC5jYWxsKHMsQ2p0LFNqdCxxdCxBanQsZSRlLExqdCgpLCgpPT57fSl9LFAyZT1pPT57aWYoaSBpbiBYWClyZXR1cm4gWFhbaV07dGhyb3cgbmV3IE1qdChpKX07Y2xhc3MgTWp0IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3Iocyl7c3VwZXIoYERpYWdyYW0gJHtzfSBub3QgZm91bmQuYCl9fWNvbnN0IHJSPWk9Pnt2YXIgcDtjb25zdHtzZWN1cml0eUxldmVsOnN9PXF0KCk7bGV0IHU9SXIoImJvZHkiKTtpZihzPT09InNhbmRib3giKXtjb25zdCBiPSgocD1JcihgI2kke2l9YCkubm9kZSgpKT09bnVsbD92b2lkIDA6cC5jb250ZW50RG9jdW1lbnQpPz9kb2N1bWVudDt1PUlyKGIuYm9keSl9cmV0dXJuIHUuc2VsZWN0KGAjJHtpfWApfSx0JGU9e2RyYXc6KGkscyx1KT0+e1hlLmRlYnVnKGByZW5kZXJpbmcgc3ZnIGZvciBzeW50YXggZXJyb3IKYCk7Y29uc3QgZD1yUihzKSxwPWQuYXBwZW5kKCJnIik7ZC5hdHRyKCJ2aWV3Qm94IiwiMCAwIDI0MTIgNTEyIiksTmcoZCwxMDAsNTEyLCEwKSxwLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDExLjMxMywxMjMuMzEzYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyLTkuMzc1LDkuMzc1LTIwLjY4OC0yMC42ODhjLTEyLjQ4NC0xMi41LTMyLjc2Ni0xMi41LTQ1LjI1LDBsLTE2LDE2Yy0xLjI2MSwxLjI2MS0yLjMwNCwyLjY0OC0zLjMxLDQuMDUxLTIxLjczOS04LjU2MS00NS4zMjQtMTMuNDI2LTcwLjA2NS0xMy40MjYtMTA1Ljg2NywwLTE5Miw4Ni4xMzMtMTkyLDE5MnM4Ni4xMzMsMTkyIDE5MiwxOTIgMTkyLTg2LjEzMyAxOTItMTkyYzAtMjQuNzQxLTQuODY0LTQ4LjMyNy0xMy40MjYtNzAuMDY1IDEuNDAyLTEuMDA3IDIuNzktMi4wNDkgNC4wNTEtMy4zMWwxNi0xNmMxMi41LTEyLjQ5MiAxMi41LTMyLjc1OCAwLTQ1LjI1bC0yMC42ODgtMjAuNjg4IDkuMzc1LTkuMzc1IDMyLjAwMS0zMS45OTl6bS0yMTkuMzEzLDEwMC42ODdjLTUyLjkzOCwwLTk2LDQzLjA2My05Niw5NiAwLDguODM2LTcuMTY0LDE2LTE2LDE2cy0xNi03LjE2NC0xNi0xNmMwLTcwLjU3OCA1Ny40MjItMTI4IDEyOC0xMjggOC44MzYsMCAxNiw3LjE2NCAxNiwxNnMtNy4xNjQsMTYtMTYsMTZ6IikscC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ1OS4wMiwxNDguOThjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTYsMTZjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYuMDAxLTE2eiIpLHAuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6IikscC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQwMCw2NGM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2di0zMmMwLTguODM2LTcuMTU2LTE2LTE2LTE2LTguODQ0LDAtMTYsNy4xNjQtMTYsMTZ2MzJjMCw4LjgzNiA3LjE1NiwxNiAxNiwxNnoiKSxwLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDk2LDk2LjU4NmgtMzJjLTguODQ0LDAtMTYsNy4xNjQtMTYsMTYgMCw4LjgzNiA3LjE1NiwxNiAxNiwxNmgzMmM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2IDAtOC44MzYtNy4xNTYtMTYtMTYtMTZ6IikscC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6IikscC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxNDQwKS5hdHRyKCJ5IiwyNTApLmF0dHIoImZvbnQtc2l6ZSIsIjE1MHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgiU3ludGF4IGVycm9yIGluIHRleHQiKSxwLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDEyNTApLmF0dHIoInkiLDQwMCkuYXR0cigiZm9udC1zaXplIiwiMTAwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGBtZXJtYWlkIHZlcnNpb24gJHt1fWApfX0sRGp0PXQkZSxJanQ9e2RiOnt9LHJlbmRlcmVyOnQkZSxwYXJzZXI6e3BhcnNlcjp7eXk6e319LHBhcnNlOigpPT57fX19LG4kZT0iZmxvd2NoYXJ0LWVsayIsT2p0PXtpZDpuJGUsZGV0ZWN0b3I6KGkscyk9Pnt2YXIgdTtyZXR1cm4hISgvXlxzKmZsb3djaGFydC1lbGsvLnRlc3QoaSl8fC9eXHMqZmxvd2NoYXJ0fGdyYXBoLy50ZXN0KGkpJiYoKHU9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZWxrIil9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5qYW4pO3JldHVybntpZDpuJGUsZGlhZ3JhbTppfX19LHIkZT0idGltZWxpbmUiLE5qdD17aWQ6ciRlLGRldGVjdG9yOmk9Pi9eXHMqdGltZWxpbmUvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pmlvbik7cmV0dXJue2lkOnIkZSxkaWFncmFtOml9fX0saSRlPSJtaW5kbWFwIixQanQ9e2lkOmkkZSxkZXRlY3RvcjppPT4vXlxzKm1pbmRtYXAvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pklvbik7cmV0dXJue2lkOmkkZSxkaWFncmFtOml9fX0scyRlPSJzYW5rZXkiLEJqdD17aWQ6cyRlLGRldGVjdG9yOmk9Pi9eXHMqc2Fua2V5LWJldGEvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmNjbik7cmV0dXJue2lkOnMkZSxkaWFncmFtOml9fX0sYSRlPSJibG9jayIsRmp0PXtpZDphJGUsZGV0ZWN0b3I6aT0+L15ccypibG9jay1iZXRhLy50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5NY24pO3JldHVybntpZDphJGUsZGlhZ3JhbTppfX19O2xldCBvJGU9ITE7Y29uc3QgQjJlPSgpPT57byRlfHwobyRlPSEwLFFYKCJlcnJvciIsSWp0LGk9PmkudG9Mb3dlckNhc2UoKS50cmltKCk9PT0iZXJyb3IiKSxRWCgiLS0tIix7ZGI6e2NsZWFyOigpPT57fX0sc3R5bGVzOnt9LHJlbmRlcmVyOntkcmF3OigpPT57fX0scGFyc2VyOntwYXJzZXI6e3l5Ont9fSxwYXJzZTooKT0+e3Rocm93IG5ldyBFcnJvcigiRGlhZ3JhbXMgYmVnaW5uaW5nIHdpdGggLS0tIGFyZSBub3QgdmFsaWQuIElmIHlvdSB3ZXJlIHRyeWluZyB0byB1c2UgYSBZQU1MIGZyb250LW1hdHRlciwgcGxlYXNlIGVuc3VyZSB0aGF0IHlvdSd2ZSBjb3JyZWN0bHkgb3BlbmVkIGFuZCBjbG9zZWQgdGhlIFlBTUwgZnJvbnQtbWF0dGVyIHdpdGggdW4taW5kZW50ZWQgYC0tLWAgYmxvY2tzIil9fSxpbml0OigpPT5udWxsfSxpPT5pLnRvTG93ZXJDYXNlKCkudHJpbVN0YXJ0KCkuc3RhcnRzV2l0aCgiLS0tIikpLE5SZShyanQsYmp0LHBqdCxhanQsY2p0LHVqdCxsanQsZGp0LGdqdCxPanQsc2p0LGlqdCxQanQsTmp0LG9qdCx2anQsbWp0LHdqdCxoanQsQmp0LGZqdCxGanQpKX07Y2xhc3MgYyRle2NvbnN0cnVjdG9yKHMsdT17fSl7dGhpcy50ZXh0PXMsdGhpcy5tZXRhZGF0YT11LHRoaXMudHlwZT0iZ3JhcGgiLHRoaXMudGV4dD1OUnQocyksdGhpcy50ZXh0Kz1gCmA7Y29uc3QgZD1WaCgpO3RyeXt0aGlzLnR5cGU9X1gocyxkKX1jYXRjaCh2KXt0aGlzLnR5cGU9ImVycm9yIix0aGlzLmRldGVjdEVycm9yPXZ9Y29uc3QgcD1QMmUodGhpcy50eXBlKTtYZS5kZWJ1ZygiVHlwZSAiK3RoaXMudHlwZSksdGhpcy5kYj1wLmRiLHRoaXMucmVuZGVyZXI9cC5yZW5kZXJlcix0aGlzLnBhcnNlcj1wLnBhcnNlcix0aGlzLnBhcnNlci5wYXJzZXIueXk9dGhpcy5kYix0aGlzLmluaXQ9cC5pbml0LHRoaXMucGFyc2UoKX1wYXJzZSgpe3ZhciB1LGQscCx2LGI7aWYodGhpcy5kZXRlY3RFcnJvcil0aHJvdyB0aGlzLmRldGVjdEVycm9yOyhkPSh1PXRoaXMuZGIpLmNsZWFyKT09bnVsbHx8ZC5jYWxsKHUpO2NvbnN0IHM9VmgoKTsocD10aGlzLmluaXQpPT1udWxsfHxwLmNhbGwodGhpcyxzKSx0aGlzLm1ldGFkYXRhLnRpdGxlJiYoKGI9KHY9dGhpcy5kYikuc2V0RGlhZ3JhbVRpdGxlKT09bnVsbHx8Yi5jYWxsKHYsdGhpcy5tZXRhZGF0YS50aXRsZSkpLHRoaXMucGFyc2VyLnBhcnNlKHRoaXMudGV4dCl9YXN5bmMgcmVuZGVyKHMsdSl7YXdhaXQgdGhpcy5yZW5kZXJlci5kcmF3KHRoaXMudGV4dCxzLHUsdGhpcyl9Z2V0UGFyc2VyKCl7cmV0dXJuIHRoaXMucGFyc2VyfWdldFR5cGUoKXtyZXR1cm4gdGhpcy50eXBlfX1jb25zdCBSanQ9YXN5bmMoaSxzPXt9KT0+e2NvbnN0IHU9X1goaSxWaCgpKTt0cnl7UDJlKHUpfWNhdGNoe2NvbnN0IHA9JFB0KHUpO2lmKCFwKXRocm93IG5ldyBPUmUoYERpYWdyYW0gJHt1fSBub3QgZm91bmQuYCk7Y29uc3R7aWQ6dixkaWFncmFtOmJ9PWF3YWl0IHAoKTtRWCh2LGIpfXJldHVybiBuZXcgYyRlKGkscyl9O2xldCB1JGU9W107Y29uc3Qgamp0PSgpPT57dSRlLmZvckVhY2goaT0+e2koKX0pLHUkZT1bXX07dmFyICRqdD1XUmUoT2JqZWN0LmtleXMsT2JqZWN0KTtjb25zdCB6anQ9JGp0O3ZhciBxanQ9T2JqZWN0LnByb3RvdHlwZSxIanQ9cWp0Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGwkZShpKXtpZighT1goaSkpcmV0dXJuIHpqdChpKTt2YXIgcz1bXTtmb3IodmFyIHUgaW4gT2JqZWN0KGkpKUhqdC5jYWxsKGksdSkmJnUhPSJjb25zdHJ1Y3RvciImJnMucHVzaCh1KTtyZXR1cm4gc312YXIgVmp0PU1DKE4zLCJEYXRhVmlldyIpO2NvbnN0IEYyZT1WanQ7dmFyIFVqdD1NQyhOMywiUHJvbWlzZSIpO2NvbnN0IFIyZT1VanQ7dmFyIEdqdD1NQyhOMywiU2V0Iik7Y29uc3QgQ0Q9R2p0O3ZhciBLanQ9TUMoTjMsIldlYWtNYXAiKTtjb25zdCBqMmU9S2p0O3ZhciBoJGU9IltvYmplY3QgTWFwXSIsV2p0PSJbb2JqZWN0IE9iamVjdF0iLGYkZT0iW29iamVjdCBQcm9taXNlXSIsZCRlPSJbb2JqZWN0IFNldF0iLGckZT0iW29iamVjdCBXZWFrTWFwXSIscCRlPSJbb2JqZWN0IERhdGFWaWV3XSIsWWp0PUxDKEYyZSksWGp0PUxDKFdGKSxRanQ9TEMoUjJlKSxKanQ9TEMoQ0QpLFpqdD1MQyhqMmUpLEJDPUFDOyhGMmUmJkJDKG5ldyBGMmUobmV3IEFycmF5QnVmZmVyKDEpKSkhPXAkZXx8V0YmJkJDKG5ldyBXRikhPWgkZXx8UjJlJiZCQyhSMmUucmVzb2x2ZSgpKSE9ZiRlfHxDRCYmQkMobmV3IENEKSE9ZCRlfHxqMmUmJkJDKG5ldyBqMmUpIT1nJGUpJiYoQkM9ZnVuY3Rpb24oaSl7dmFyIHM9QUMoaSksdT1zPT1XanQ/aS5jb25zdHJ1Y3Rvcjp2b2lkIDAsZD11P0xDKHUpOiIiO2lmKGQpc3dpdGNoKGQpe2Nhc2UgWWp0OnJldHVybiBwJGU7Y2FzZSBYanQ6cmV0dXJuIGgkZTtjYXNlIFFqdDpyZXR1cm4gZiRlO2Nhc2UgSmp0OnJldHVybiBkJGU7Y2FzZSBaanQ6cmV0dXJuIGckZX1yZXR1cm4gc30pO2NvbnN0IFNEPUJDO3ZhciBlJHQ9IltvYmplY3QgTWFwXSIsdCR0PSJbb2JqZWN0IFNldF0iLG4kdD1PYmplY3QucHJvdG90eXBlLHIkdD1uJHQuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gaVIoaSl7aWYoaT09bnVsbClyZXR1cm4hMDtpZih3OShpKSYmKEQwKGkpfHx0eXBlb2YgaT09InN0cmluZyJ8fHR5cGVvZiBpLnNwbGljZT09ImZ1bmN0aW9uInx8dkQoaSl8fFBYKGkpfHxtRChpKSkpcmV0dXJuIWkubGVuZ3RoO3ZhciBzPVNEKGkpO2lmKHM9PWUkdHx8cz09dCR0KXJldHVybiFpLnNpemU7aWYoT1goaSkpcmV0dXJuIWwkZShpKS5sZW5ndGg7Zm9yKHZhciB1IGluIGkpaWYociR0LmNhbGwoaSx1KSlyZXR1cm4hMTtyZXR1cm4hMH1jb25zdCBpJHQ9ImdyYXBoaWNzLWRvY3VtZW50IGRvY3VtZW50IjtmdW5jdGlvbiBzJHQoaSxzKXtpLmF0dHIoInJvbGUiLGkkdCkscyE9PSIiJiZpLmF0dHIoImFyaWEtcm9sZWRlc2NyaXB0aW9uIixzKX1mdW5jdGlvbiBhJHQoaSxzLHUsZCl7aWYoaS5pbnNlcnQhPT12b2lkIDApe2lmKHUpe2NvbnN0IHA9YGNoYXJ0LWRlc2MtJHtkfWA7aS5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixwKSxpLmluc2VydCgiZGVzYyIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImlkIixwKS50ZXh0KHUpfWlmKHMpe2NvbnN0IHA9YGNoYXJ0LXRpdGxlLSR7ZH1gO2kuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixwKSxpLmluc2VydCgidGl0bGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJpZCIscCkudGV4dChzKX19fWNvbnN0IG8kdD1pPT5pLnJlcGxhY2UoL15ccyolJSg/IXspW15cbl0rXG4/L2dtLCIiKS50cmltU3RhcnQoKTsvKiEganMteWFtbCA0LjEuMCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwgQGxpY2Vuc2UgTUlUICovZnVuY3Rpb24gYiRlKGkpe3JldHVybiB0eXBlb2YgaT4idSJ8fGk9PT1udWxsfWZ1bmN0aW9uIGMkdChpKXtyZXR1cm4gdHlwZW9mIGk9PSJvYmplY3QiJiZpIT09bnVsbH1mdW5jdGlvbiB1JHQoaSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/aTpiJGUoaSk/W106W2ldfWZ1bmN0aW9uIGwkdChpLHMpe3ZhciB1LGQscCx2O2lmKHMpZm9yKHY9T2JqZWN0LmtleXMocyksdT0wLGQ9di5sZW5ndGg7dTxkO3UrPTEpcD12W3VdLGlbcF09c1twXTtyZXR1cm4gaX1mdW5jdGlvbiBoJHQoaSxzKXt2YXIgdT0iIixkO2ZvcihkPTA7ZDxzO2QrPTEpdSs9aTtyZXR1cm4gdX1mdW5jdGlvbiBmJHQoaSl7cmV0dXJuIGk9PT0wJiZOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk9PT0xL2l9dmFyIGQkdD1iJGUsZyR0PWMkdCxwJHQ9dSR0LGIkdD1oJHQsbSR0PWYkdCx2JHQ9bCR0LExwPXtpc05vdGhpbmc6ZCR0LGlzT2JqZWN0OmckdCx0b0FycmF5OnAkdCxyZXBlYXQ6YiR0LGlzTmVnYXRpdmVaZXJvOm0kdCxleHRlbmQ6diR0fTtmdW5jdGlvbiBtJGUoaSxzKXt2YXIgdT0iIixkPWkucmVhc29ufHwiKHVua25vd24gcmVhc29uKSI7cmV0dXJuIGkubWFyaz8oaS5tYXJrLm5hbWUmJih1Kz0naW4gIicraS5tYXJrLm5hbWUrJyIgJyksdSs9IigiKyhpLm1hcmsubGluZSsxKSsiOiIrKGkubWFyay5jb2x1bW4rMSkrIikiLCFzJiZpLm1hcmsuc25pcHBldCYmKHUrPWAKCmAraS5tYXJrLnNuaXBwZXQpLGQrIiAiK3UpOmR9ZnVuY3Rpb24gc1IoaSxzKXtFcnJvci5jYWxsKHRoaXMpLHRoaXMubmFtZT0iWUFNTEV4Y2VwdGlvbiIsdGhpcy5yZWFzb249aSx0aGlzLm1hcms9cyx0aGlzLm1lc3NhZ2U9bSRlKHRoaXMsITEpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFja3x8IiJ9c1IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxzUi5wcm90b3R5cGUuY29uc3RydWN0b3I9c1Isc1IucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLm5hbWUrIjogIittJGUodGhpcyxzKX07dmFyIEE3PXNSO2Z1bmN0aW9uICQyZShpLHMsdSxkLHApe3ZhciB2PSIiLGI9IiIseT1NYXRoLmZsb29yKHAvMiktMTtyZXR1cm4gZC1zPnkmJih2PSIgLi4uICIscz1kLXkrdi5sZW5ndGgpLHUtZD55JiYoYj0iIC4uLiIsdT1kK3ktYi5sZW5ndGgpLHtzdHI6ditpLnNsaWNlKHMsdSkucmVwbGFjZSgvXHQvZywi4oaSIikrYixwb3M6ZC1zK3YubGVuZ3RofX1mdW5jdGlvbiB6MmUoaSxzKXtyZXR1cm4gTHAucmVwZWF0KCIgIixzLWkubGVuZ3RoKStpfWZ1bmN0aW9uIHckdChpLHMpe2lmKHM9T2JqZWN0LmNyZWF0ZShzfHxudWxsKSwhaS5idWZmZXIpcmV0dXJuIG51bGw7cy5tYXhMZW5ndGh8fChzLm1heExlbmd0aD03OSksdHlwZW9mIHMuaW5kZW50IT0ibnVtYmVyIiYmKHMuaW5kZW50PTEpLHR5cGVvZiBzLmxpbmVzQmVmb3JlIT0ibnVtYmVyIiYmKHMubGluZXNCZWZvcmU9MyksdHlwZW9mIHMubGluZXNBZnRlciE9Im51bWJlciImJihzLmxpbmVzQWZ0ZXI9Mik7Zm9yKHZhciB1PS9ccj9cbnxccnxcMC9nLGQ9WzBdLHA9W10sdixiPS0xO3Y9dS5leGVjKGkuYnVmZmVyKTspcC5wdXNoKHYuaW5kZXgpLGQucHVzaCh2LmluZGV4K3ZbMF0ubGVuZ3RoKSxpLnBvc2l0aW9uPD12LmluZGV4JiZiPDAmJihiPWQubGVuZ3RoLTIpO2I8MCYmKGI9ZC5sZW5ndGgtMSk7dmFyIHk9IiIsVCxfLEE9TWF0aC5taW4oaS5saW5lK3MubGluZXNBZnRlcixwLmxlbmd0aCkudG9TdHJpbmcoKS5sZW5ndGgsUD1zLm1heExlbmd0aC0ocy5pbmRlbnQrQSszKTtmb3IoVD0xO1Q8PXMubGluZXNCZWZvcmUmJiEoYi1UPDApO1QrKylfPSQyZShpLmJ1ZmZlcixkW2ItVF0scFtiLVRdLGkucG9zaXRpb24tKGRbYl0tZFtiLVRdKSxQKSx5PUxwLnJlcGVhdCgiICIscy5pbmRlbnQpK3oyZSgoaS5saW5lLVQrMSkudG9TdHJpbmcoKSxBKSsiIHwgIitfLnN0citgCmAreTtmb3IoXz0kMmUoaS5idWZmZXIsZFtiXSxwW2JdLGkucG9zaXRpb24sUCkseSs9THAucmVwZWF0KCIgIixzLmluZGVudCkrejJlKChpLmxpbmUrMSkudG9TdHJpbmcoKSxBKSsiIHwgIitfLnN0citgCmAseSs9THAucmVwZWF0KCItIixzLmluZGVudCtBKzMrXy5wb3MpK2BeCmAsVD0xO1Q8PXMubGluZXNBZnRlciYmIShiK1Q+PXAubGVuZ3RoKTtUKyspXz0kMmUoaS5idWZmZXIsZFtiK1RdLHBbYitUXSxpLnBvc2l0aW9uLShkW2JdLWRbYitUXSksUCkseSs9THAucmVwZWF0KCIgIixzLmluZGVudCkrejJlKChpLmxpbmUrVCsxKS50b1N0cmluZygpLEEpKyIgfCAiK18uc3RyK2AKYDtyZXR1cm4geS5yZXBsYWNlKC9cbiQvLCIiKX12YXIgeSR0PXckdCx4JHQ9WyJraW5kIiwibXVsdGkiLCJyZXNvbHZlIiwiY29uc3RydWN0IiwiaW5zdGFuY2VPZiIsInByZWRpY2F0ZSIsInJlcHJlc2VudCIsInJlcHJlc2VudE5hbWUiLCJkZWZhdWx0U3R5bGUiLCJzdHlsZUFsaWFzZXMiXSxrJHQ9WyJzY2FsYXIiLCJzZXF1ZW5jZSIsIm1hcHBpbmciXTtmdW5jdGlvbiBFJHQoaSl7dmFyIHM9e307cmV0dXJuIGkhPT1udWxsJiZPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2lbdV0uZm9yRWFjaChmdW5jdGlvbihkKXtzW1N0cmluZyhkKV09dX0pfSksc31mdW5jdGlvbiBUJHQoaSxzKXtpZihzPXN8fHt9LE9iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24odSl7aWYoeCR0LmluZGV4T2YodSk9PT0tMSl0aHJvdyBuZXcgQTcoJ1Vua25vd24gb3B0aW9uICInK3UrJyIgaXMgbWV0IGluIGRlZmluaXRpb24gb2YgIicraSsnIiBZQU1MIHR5cGUuJyl9KSx0aGlzLm9wdGlvbnM9cyx0aGlzLnRhZz1pLHRoaXMua2luZD1zLmtpbmR8fG51bGwsdGhpcy5yZXNvbHZlPXMucmVzb2x2ZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdGhpcy5jb25zdHJ1Y3Q9cy5jb25zdHJ1Y3R8fGZ1bmN0aW9uKHUpe3JldHVybiB1fSx0aGlzLmluc3RhbmNlT2Y9cy5pbnN0YW5jZU9mfHxudWxsLHRoaXMucHJlZGljYXRlPXMucHJlZGljYXRlfHxudWxsLHRoaXMucmVwcmVzZW50PXMucmVwcmVzZW50fHxudWxsLHRoaXMucmVwcmVzZW50TmFtZT1zLnJlcHJlc2VudE5hbWV8fG51bGwsdGhpcy5kZWZhdWx0U3R5bGU9cy5kZWZhdWx0U3R5bGV8fG51bGwsdGhpcy5tdWx0aT1zLm11bHRpfHwhMSx0aGlzLnN0eWxlQWxpYXNlcz1FJHQocy5zdHlsZUFsaWFzZXN8fG51bGwpLGskdC5pbmRleE9mKHRoaXMua2luZCk9PT0tMSl0aHJvdyBuZXcgQTcoJ1Vua25vd24ga2luZCAiJyt0aGlzLmtpbmQrJyIgaXMgc3BlY2lmaWVkIGZvciAiJytpKyciIFlBTUwgdHlwZS4nKX12YXIgRmc9VCR0O2Z1bmN0aW9uIHYkZShpLHMpe3ZhciB1PVtdO3JldHVybiBpW3NdLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIHA9dS5sZW5ndGg7dS5mb3JFYWNoKGZ1bmN0aW9uKHYsYil7di50YWc9PT1kLnRhZyYmdi5raW5kPT09ZC5raW5kJiZ2Lm11bHRpPT09ZC5tdWx0aSYmKHA9Yil9KSx1W3BdPWR9KSx1fWZ1bmN0aW9uIEMkdCgpe3ZhciBpPXtzY2FsYXI6e30sc2VxdWVuY2U6e30sbWFwcGluZzp7fSxmYWxsYmFjazp7fSxtdWx0aTp7c2NhbGFyOltdLHNlcXVlbmNlOltdLG1hcHBpbmc6W10sZmFsbGJhY2s6W119fSxzLHU7ZnVuY3Rpb24gZChwKXtwLm11bHRpPyhpLm11bHRpW3Aua2luZF0ucHVzaChwKSxpLm11bHRpLmZhbGxiYWNrLnB1c2gocCkpOmlbcC5raW5kXVtwLnRhZ109aS5mYWxsYmFja1twLnRhZ109cH1mb3Iocz0wLHU9YXJndW1lbnRzLmxlbmd0aDtzPHU7cys9MSlhcmd1bWVudHNbc10uZm9yRWFjaChkKTtyZXR1cm4gaX1mdW5jdGlvbiBxMmUoaSl7cmV0dXJuIHRoaXMuZXh0ZW5kKGkpfXEyZS5wcm90b3R5cGUuZXh0ZW5kPWZ1bmN0aW9uKHMpe3ZhciB1PVtdLGQ9W107aWYocyBpbnN0YW5jZW9mIEZnKWQucHVzaChzKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkocykpZD1kLmNvbmNhdChzKTtlbHNlIGlmKHMmJihBcnJheS5pc0FycmF5KHMuaW1wbGljaXQpfHxBcnJheS5pc0FycmF5KHMuZXhwbGljaXQpKSlzLmltcGxpY2l0JiYodT11LmNvbmNhdChzLmltcGxpY2l0KSkscy5leHBsaWNpdCYmKGQ9ZC5jb25jYXQocy5leHBsaWNpdCkpO2Vsc2UgdGhyb3cgbmV3IEE3KCJTY2hlbWEuZXh0ZW5kIGFyZ3VtZW50IHNob3VsZCBiZSBhIFR5cGUsIFsgVHlwZSBdLCBvciBhIHNjaGVtYSBkZWZpbml0aW9uICh7IGltcGxpY2l0OiBbLi4uXSwgZXhwbGljaXQ6IFsuLi5dIH0pIik7dS5mb3JFYWNoKGZ1bmN0aW9uKHYpe2lmKCEodiBpbnN0YW5jZW9mIEZnKSl0aHJvdyBuZXcgQTcoIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKTtpZih2LmxvYWRLaW5kJiZ2LmxvYWRLaW5kIT09InNjYWxhciIpdGhyb3cgbmV3IEE3KCJUaGVyZSBpcyBhIG5vbi1zY2FsYXIgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gSW1wbGljaXQgcmVzb2x2aW5nIG9mIHN1Y2ggdHlwZXMgaXMgbm90IHN1cHBvcnRlZC4iKTtpZih2Lm11bHRpKXRocm93IG5ldyBBNygiVGhlcmUgaXMgYSBtdWx0aSB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBNdWx0aSB0YWdzIGNhbiBvbmx5IGJlIGxpc3RlZCBhcyBleHBsaWNpdC4iKX0pLGQuZm9yRWFjaChmdW5jdGlvbih2KXtpZighKHYgaW5zdGFuY2VvZiBGZykpdGhyb3cgbmV3IEE3KCJTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuIil9KTt2YXIgcD1PYmplY3QuY3JlYXRlKHEyZS5wcm90b3R5cGUpO3JldHVybiBwLmltcGxpY2l0PSh0aGlzLmltcGxpY2l0fHxbXSkuY29uY2F0KHUpLHAuZXhwbGljaXQ9KHRoaXMuZXhwbGljaXR8fFtdKS5jb25jYXQoZCkscC5jb21waWxlZEltcGxpY2l0PXYkZShwLCJpbXBsaWNpdCIpLHAuY29tcGlsZWRFeHBsaWNpdD12JGUocCwiZXhwbGljaXQiKSxwLmNvbXBpbGVkVHlwZU1hcD1DJHQocC5jb21waWxlZEltcGxpY2l0LHAuY29tcGlsZWRFeHBsaWNpdCkscH07dmFyIFMkdD1xMmUsXyR0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6c3RyIix7a2luZDoic2NhbGFyIixjb25zdHJ1Y3Q6ZnVuY3Rpb24oaSl7cmV0dXJuIGkhPT1udWxsP2k6IiJ9fSksQSR0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6c2VxIix7a2luZDoic2VxdWVuY2UiLGNvbnN0cnVjdDpmdW5jdGlvbihpKXtyZXR1cm4gaSE9PW51bGw/aTpbXX19KSxMJHQ9bmV3IEZnKCJ0YWc6eWFtbC5vcmcsMjAwMjptYXAiLHtraW5kOiJtYXBwaW5nIixjb25zdHJ1Y3Q6ZnVuY3Rpb24oaSl7cmV0dXJuIGkhPT1udWxsP2k6e319fSksTSR0PW5ldyBTJHQoe2V4cGxpY2l0OltfJHQsQSR0LEwkdF19KTtmdW5jdGlvbiBEJHQoaSl7aWYoaT09PW51bGwpcmV0dXJuITA7dmFyIHM9aS5sZW5ndGg7cmV0dXJuIHM9PT0xJiZpPT09In4ifHxzPT09NCYmKGk9PT0ibnVsbCJ8fGk9PT0iTnVsbCJ8fGk9PT0iTlVMTCIpfWZ1bmN0aW9uIEkkdCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIE8kdChpKXtyZXR1cm4gaT09PW51bGx9dmFyIE4kdD1uZXcgRmcoInRhZzp5YW1sLm9yZywyMDAyOm51bGwiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6RCR0LGNvbnN0cnVjdDpJJHQscHJlZGljYXRlOk8kdCxyZXByZXNlbnQ6e2Nhbm9uaWNhbDpmdW5jdGlvbigpe3JldHVybiJ+In0sbG93ZXJjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIm51bGwifSx1cHBlcmNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4iTlVMTCJ9LGNhbWVsY2FzZTpmdW5jdGlvbigpe3JldHVybiJOdWxsIn0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4iIn19LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pO2Z1bmN0aW9uIFAkdChpKXtpZihpPT09bnVsbClyZXR1cm4hMTt2YXIgcz1pLmxlbmd0aDtyZXR1cm4gcz09PTQmJihpPT09InRydWUifHxpPT09IlRydWUifHxpPT09IlRSVUUiKXx8cz09PTUmJihpPT09ImZhbHNlInx8aT09PSJGYWxzZSJ8fGk9PT0iRkFMU0UiKX1mdW5jdGlvbiBCJHQoaSl7cmV0dXJuIGk9PT0idHJ1ZSJ8fGk9PT0iVHJ1ZSJ8fGk9PT0iVFJVRSJ9ZnVuY3Rpb24gRiR0KGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSk9PT0iW29iamVjdCBCb29sZWFuXSJ9dmFyIFIkdD1uZXcgRmcoInRhZzp5YW1sLm9yZywyMDAyOmJvb2wiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6UCR0LGNvbnN0cnVjdDpCJHQscHJlZGljYXRlOkYkdCxyZXByZXNlbnQ6e2xvd2VyY2FzZTpmdW5jdGlvbihpKXtyZXR1cm4gaT8idHJ1ZSI6ImZhbHNlIn0sdXBwZXJjYXNlOmZ1bmN0aW9uKGkpe3JldHVybiBpPyJUUlVFIjoiRkFMU0UifSxjYW1lbGNhc2U6ZnVuY3Rpb24oaSl7cmV0dXJuIGk/IlRydWUiOiJGYWxzZSJ9fSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KTtmdW5jdGlvbiBqJHQoaSl7cmV0dXJuIDQ4PD1pJiZpPD01N3x8NjU8PWkmJmk8PTcwfHw5Nzw9aSYmaTw9MTAyfWZ1bmN0aW9uICQkdChpKXtyZXR1cm4gNDg8PWkmJmk8PTU1fWZ1bmN0aW9uIHokdChpKXtyZXR1cm4gNDg8PWkmJmk8PTU3fWZ1bmN0aW9uIHEkdChpKXtpZihpPT09bnVsbClyZXR1cm4hMTt2YXIgcz1pLmxlbmd0aCx1PTAsZD0hMSxwO2lmKCFzKXJldHVybiExO2lmKHA9aVt1XSwocD09PSItInx8cD09PSIrIikmJihwPWlbKyt1XSkscD09PSIwIil7aWYodSsxPT09cylyZXR1cm4hMDtpZihwPWlbKyt1XSxwPT09ImIiKXtmb3IodSsrO3U8czt1KyspaWYocD1pW3VdLHAhPT0iXyIpe2lmKHAhPT0iMCImJnAhPT0iMSIpcmV0dXJuITE7ZD0hMH1yZXR1cm4gZCYmcCE9PSJfIn1pZihwPT09IngiKXtmb3IodSsrO3U8czt1KyspaWYocD1pW3VdLHAhPT0iXyIpe2lmKCFqJHQoaS5jaGFyQ29kZUF0KHUpKSlyZXR1cm4hMTtkPSEwfXJldHVybiBkJiZwIT09Il8ifWlmKHA9PT0ibyIpe2Zvcih1Kys7dTxzO3UrKylpZihwPWlbdV0scCE9PSJfIil7aWYoISQkdChpLmNoYXJDb2RlQXQodSkpKXJldHVybiExO2Q9ITB9cmV0dXJuIGQmJnAhPT0iXyJ9fWlmKHA9PT0iXyIpcmV0dXJuITE7Zm9yKDt1PHM7dSsrKWlmKHA9aVt1XSxwIT09Il8iKXtpZigheiR0KGkuY2hhckNvZGVBdCh1KSkpcmV0dXJuITE7ZD0hMH1yZXR1cm4hKCFkfHxwPT09Il8iKX1mdW5jdGlvbiBIJHQoaSl7dmFyIHM9aSx1PTEsZDtpZihzLmluZGV4T2YoIl8iKSE9PS0xJiYocz1zLnJlcGxhY2UoL18vZywiIikpLGQ9c1swXSwoZD09PSItInx8ZD09PSIrIikmJihkPT09Ii0iJiYodT0tMSkscz1zLnNsaWNlKDEpLGQ9c1swXSkscz09PSIwIilyZXR1cm4gMDtpZihkPT09IjAiKXtpZihzWzFdPT09ImIiKXJldHVybiB1KnBhcnNlSW50KHMuc2xpY2UoMiksMik7aWYoc1sxXT09PSJ4IilyZXR1cm4gdSpwYXJzZUludChzLnNsaWNlKDIpLDE2KTtpZihzWzFdPT09Im8iKXJldHVybiB1KnBhcnNlSW50KHMuc2xpY2UoMiksOCl9cmV0dXJuIHUqcGFyc2VJbnQocywxMCl9ZnVuY3Rpb24gViR0KGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSk9PT0iW29iamVjdCBOdW1iZXJdIiYmaSUxPT09MCYmIUxwLmlzTmVnYXRpdmVaZXJvKGkpfXZhciBVJHQ9bmV3IEZnKCJ0YWc6eWFtbC5vcmcsMjAwMjppbnQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cSR0LGNvbnN0cnVjdDpIJHQscHJlZGljYXRlOlYkdCxyZXByZXNlbnQ6e2JpbmFyeTpmdW5jdGlvbihpKXtyZXR1cm4gaT49MD8iMGIiK2kudG9TdHJpbmcoMik6Ii0wYiIraS50b1N0cmluZygyKS5zbGljZSgxKX0sb2N0YWw6ZnVuY3Rpb24oaSl7cmV0dXJuIGk+PTA/IjBvIitpLnRvU3RyaW5nKDgpOiItMG8iK2kudG9TdHJpbmcoOCkuc2xpY2UoMSl9LGRlY2ltYWw6ZnVuY3Rpb24oaSl7cmV0dXJuIGkudG9TdHJpbmcoMTApfSxoZXhhZGVjaW1hbDpmdW5jdGlvbihpKXtyZXR1cm4gaT49MD8iMHgiK2kudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk6Ii0weCIraS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKX19LGRlZmF1bHRTdHlsZToiZGVjaW1hbCIsc3R5bGVBbGlhc2VzOntiaW5hcnk6WzIsImJpbiJdLG9jdGFsOls4LCJvY3QiXSxkZWNpbWFsOlsxMCwiZGVjIl0saGV4YWRlY2ltYWw6WzE2LCJoZXgiXX19KSxHJHQ9bmV3IFJlZ0V4cCgiXig/OlstK10/KD86WzAtOV1bMC05X10qKSg/OlxcLlswLTlfXSopPyg/OltlRV1bLStdP1swLTldKyk/fFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspP3xbLStdP1xcLig/OmluZnxJbmZ8SU5GKXxcXC4oPzpuYW58TmFOfE5BTikpJCIpO2Z1bmN0aW9uIEskdChpKXtyZXR1cm4hKGk9PT1udWxsfHwhRyR0LnRlc3QoaSl8fGlbaS5sZW5ndGgtMV09PT0iXyIpfWZ1bmN0aW9uIFckdChpKXt2YXIgcyx1O3JldHVybiBzPWkucmVwbGFjZSgvXy9nLCIiKS50b0xvd2VyQ2FzZSgpLHU9c1swXT09PSItIj8tMToxLCIrLSIuaW5kZXhPZihzWzBdKT49MCYmKHM9cy5zbGljZSgxKSkscz09PSIuaW5mIj91PT09MT9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOnM9PT0iLm5hbiI/TmFOOnUqcGFyc2VGbG9hdChzLDEwKX12YXIgWSR0PS9eWy0rXT9bMC05XStlLztmdW5jdGlvbiBYJHQoaSxzKXt2YXIgdTtpZihpc05hTihpKSlzd2l0Y2gocyl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiIubmFuIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi5OQU4iO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLk5hTiJ9ZWxzZSBpZihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk9PT1pKXN3aXRjaChzKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5pbmYiO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuSW5mIn1lbHNlIGlmKE51bWJlci5ORUdBVElWRV9JTkZJTklUWT09PWkpc3dpdGNoKHMpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLS5pbmYiO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLS5JTkYiO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLS5JbmYifWVsc2UgaWYoTHAuaXNOZWdhdGl2ZVplcm8oaSkpcmV0dXJuIi0wLjAiO3JldHVybiB1PWkudG9TdHJpbmcoMTApLFkkdC50ZXN0KHUpP3UucmVwbGFjZSgiZSIsIi5lIik6dX1mdW5jdGlvbiBRJHQoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IE51bWJlcl0iJiYoaSUxIT09MHx8THAuaXNOZWdhdGl2ZVplcm8oaSkpfXZhciBKJHQ9bmV3IEZnKCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpLJHQsY29uc3RydWN0OlckdCxwcmVkaWNhdGU6USR0LHJlcHJlc2VudDpYJHQsZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSksdyRlPU0kdC5leHRlbmQoe2ltcGxpY2l0OltOJHQsUiR0LFUkdCxKJHRdfSksWiR0PXckZSx5JGU9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0pLShbMC05XVswLTldKSQiKSx4JGU9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0/KS0oWzAtOV1bMC05XT8pKD86W1R0XXxbIFxcdF0rKShbMC05XVswLTldPyk6KFswLTldWzAtOV0pOihbMC05XVswLTldKSg/OlxcLihbMC05XSopKT8oPzpbIFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KSg/OjooWzAtOV1bMC05XSkpPykpPyQiKTtmdW5jdGlvbiBlenQoaSl7cmV0dXJuIGk9PT1udWxsPyExOnkkZS5leGVjKGkpIT09bnVsbHx8eCRlLmV4ZWMoaSkhPT1udWxsfWZ1bmN0aW9uIHR6dChpKXt2YXIgcyx1LGQscCx2LGIseSxUPTAsXz1udWxsLEEsUCxSO2lmKHM9eSRlLmV4ZWMoaSkscz09PW51bGwmJihzPXgkZS5leGVjKGkpKSxzPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkRhdGUgcmVzb2x2ZSBlcnJvciIpO2lmKHU9K3NbMV0sZD0rc1syXS0xLHA9K3NbM10sIXNbNF0pcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHUsZCxwKSk7aWYodj0rc1s0XSxiPStzWzVdLHk9K3NbNl0sc1s3XSl7Zm9yKFQ9c1s3XS5zbGljZSgwLDMpO1QubGVuZ3RoPDM7KVQrPSIwIjtUPStUfXJldHVybiBzWzldJiYoQT0rc1sxMF0sUD0rKHNbMTFdfHwwKSxfPShBKjYwK1ApKjZlNCxzWzldPT09Ii0iJiYoXz0tXykpLFI9bmV3IERhdGUoRGF0ZS5VVEModSxkLHAsdixiLHksVCkpLF8mJlIuc2V0VGltZShSLmdldFRpbWUoKS1fKSxSfWZ1bmN0aW9uIG56dChpKXtyZXR1cm4gaS50b0lTT1N0cmluZygpfXZhciByenQ9bmV3IEZnKCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6ZXp0LGNvbnN0cnVjdDp0enQsaW5zdGFuY2VPZjpEYXRlLHJlcHJlc2VudDpuenR9KTtmdW5jdGlvbiBpenQoaSl7cmV0dXJuIGk9PT0iPDwifHxpPT09bnVsbH12YXIgc3p0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6aXp0fSksSDJlPWBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPQpccmA7ZnVuY3Rpb24gYXp0KGkpe2lmKGk9PT1udWxsKXJldHVybiExO3ZhciBzLHUsZD0wLHA9aS5sZW5ndGgsdj1IMmU7Zm9yKHU9MDt1PHA7dSsrKWlmKHM9di5pbmRleE9mKGkuY2hhckF0KHUpKSwhKHM+NjQpKXtpZihzPDApcmV0dXJuITE7ZCs9Nn1yZXR1cm4gZCU4PT09MH1mdW5jdGlvbiBvenQoaSl7dmFyIHMsdSxkPWkucmVwbGFjZSgvW1xyXG49XS9nLCIiKSxwPWQubGVuZ3RoLHY9SDJlLGI9MCx5PVtdO2ZvcihzPTA7czxwO3MrKylzJTQ9PT0wJiZzJiYoeS5wdXNoKGI+PjE2JjI1NSkseS5wdXNoKGI+PjgmMjU1KSx5LnB1c2goYiYyNTUpKSxiPWI8PDZ8di5pbmRleE9mKGQuY2hhckF0KHMpKTtyZXR1cm4gdT1wJTQqNix1PT09MD8oeS5wdXNoKGI+PjE2JjI1NSkseS5wdXNoKGI+PjgmMjU1KSx5LnB1c2goYiYyNTUpKTp1PT09MTg/KHkucHVzaChiPj4xMCYyNTUpLHkucHVzaChiPj4yJjI1NSkpOnU9PT0xMiYmeS5wdXNoKGI+PjQmMjU1KSxuZXcgVWludDhBcnJheSh5KX1mdW5jdGlvbiBjenQoaSl7dmFyIHM9IiIsdT0wLGQscCx2PWkubGVuZ3RoLGI9SDJlO2ZvcihkPTA7ZDx2O2QrKylkJTM9PT0wJiZkJiYocys9Ylt1Pj4xOCY2M10scys9Ylt1Pj4xMiY2M10scys9Ylt1Pj42JjYzXSxzKz1iW3UmNjNdKSx1PSh1PDw4KStpW2RdO3JldHVybiBwPXYlMyxwPT09MD8ocys9Ylt1Pj4xOCY2M10scys9Ylt1Pj4xMiY2M10scys9Ylt1Pj42JjYzXSxzKz1iW3UmNjNdKTpwPT09Mj8ocys9Ylt1Pj4xMCY2M10scys9Ylt1Pj40JjYzXSxzKz1iW3U8PDImNjNdLHMrPWJbNjRdKTpwPT09MSYmKHMrPWJbdT4+MiY2M10scys9Ylt1PDw0JjYzXSxzKz1iWzY0XSxzKz1iWzY0XSksc31mdW5jdGlvbiB1enQoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IFVpbnQ4QXJyYXldIn12YXIgbHp0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOmF6dCxjb25zdHJ1Y3Q6b3p0LHByZWRpY2F0ZTp1enQscmVwcmVzZW50OmN6dH0pLGh6dD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGZ6dD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGR6dChpKXtpZihpPT09bnVsbClyZXR1cm4hMDt2YXIgcz1bXSx1LGQscCx2LGIseT1pO2Zvcih1PTAsZD15Lmxlbmd0aDt1PGQ7dSs9MSl7aWYocD15W3VdLGI9ITEsZnp0LmNhbGwocCkhPT0iW29iamVjdCBPYmplY3RdIilyZXR1cm4hMTtmb3IodiBpbiBwKWlmKGh6dC5jYWxsKHAsdikpaWYoIWIpYj0hMDtlbHNlIHJldHVybiExO2lmKCFiKXJldHVybiExO2lmKHMuaW5kZXhPZih2KT09PS0xKXMucHVzaCh2KTtlbHNlIHJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGd6dChpKXtyZXR1cm4gaSE9PW51bGw/aTpbXX12YXIgcHp0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6b21hcCIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOmR6dCxjb25zdHJ1Y3Q6Z3p0fSksYnp0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gbXp0KGkpe2lmKGk9PT1udWxsKXJldHVybiEwO3ZhciBzLHUsZCxwLHYsYj1pO2Zvcih2PW5ldyBBcnJheShiLmxlbmd0aCkscz0wLHU9Yi5sZW5ndGg7czx1O3MrPTEpe2lmKGQ9YltzXSxienQuY2FsbChkKSE9PSJbb2JqZWN0IE9iamVjdF0ifHwocD1PYmplY3Qua2V5cyhkKSxwLmxlbmd0aCE9PTEpKXJldHVybiExO3Zbc109W3BbMF0sZFtwWzBdXV19cmV0dXJuITB9ZnVuY3Rpb24gdnp0KGkpe2lmKGk9PT1udWxsKXJldHVybltdO3ZhciBzLHUsZCxwLHYsYj1pO2Zvcih2PW5ldyBBcnJheShiLmxlbmd0aCkscz0wLHU9Yi5sZW5ndGg7czx1O3MrPTEpZD1iW3NdLHA9T2JqZWN0LmtleXMoZCksdltzXT1bcFswXSxkW3BbMF1dXTtyZXR1cm4gdn12YXIgd3p0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTptenQsY29uc3RydWN0OnZ6dH0pLHl6dD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHh6dChpKXtpZihpPT09bnVsbClyZXR1cm4hMDt2YXIgcyx1PWk7Zm9yKHMgaW4gdSlpZih5enQuY2FsbCh1LHMpJiZ1W3NdIT09bnVsbClyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBrenQoaSl7cmV0dXJuIGkhPT1udWxsP2k6e319dmFyIEV6dD1uZXcgRmcoInRhZzp5YW1sLm9yZywyMDAyOnNldCIse2tpbmQ6Im1hcHBpbmciLHJlc29sdmU6eHp0LGNvbnN0cnVjdDprenR9KSxUenQ9WiR0LmV4dGVuZCh7aW1wbGljaXQ6W3J6dCxzenRdLGV4cGxpY2l0OltsenQscHp0LHd6dCxFenRdfSkseDk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxKWD0xLGskZT0yLEUkZT0zLFpYPTQsVjJlPTEsQ3p0PTIsVCRlPTMsU3p0PS9bXHgwMC1ceDA4XHgwQlx4MENceDBFLVx4MUZceDdGLVx4ODRceDg2LVx4OUZcdUZGRkVcdUZGRkZdfFtcdUQ4MDAtXHVEQkZGXSg/IVtcdURDMDAtXHVERkZGXSl8KD86W15cdUQ4MDAtXHVEQkZGXXxeKVtcdURDMDAtXHVERkZGXS8sX3p0PS9bXHg4NVx1MjAyOFx1MjAyOV0vLEF6dD0vWyxcW1xdXHtcfV0vLEMkZT0vXig/OiF8ISF8IVthLXpcLV0rISkkL2ksUyRlPS9eKD86IXxbXixcW1xdXHtcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcLSM7XC9cPzpAJj1cK1wkLF9cLiF+XConXChcKVxbXF1dKSokL2k7ZnVuY3Rpb24gXyRlKGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSl9ZnVuY3Rpb24gVjQoaSl7cmV0dXJuIGk9PT0xMHx8aT09PTEzfWZ1bmN0aW9uIEZDKGkpe3JldHVybiBpPT09OXx8aT09PTMyfWZ1bmN0aW9uIEYyKGkpe3JldHVybiBpPT09OXx8aT09PTMyfHxpPT09MTB8fGk9PT0xM31mdW5jdGlvbiBfRChpKXtyZXR1cm4gaT09PTQ0fHxpPT09OTF8fGk9PT05M3x8aT09PTEyM3x8aT09PTEyNX1mdW5jdGlvbiBMenQoaSl7dmFyIHM7cmV0dXJuIDQ4PD1pJiZpPD01Nz9pLTQ4OihzPWl8MzIsOTc8PXMmJnM8PTEwMj9zLTk3KzEwOi0xKX1mdW5jdGlvbiBNenQoaSl7cmV0dXJuIGk9PT0xMjA/MjppPT09MTE3PzQ6aT09PTg1Pzg6MH1mdW5jdGlvbiBEenQoaSl7cmV0dXJuIDQ4PD1pJiZpPD01Nz9pLTQ4Oi0xfWZ1bmN0aW9uIEEkZShpKXtyZXR1cm4gaT09PTQ4PyJcMCI6aT09PTk3PyJceDA3IjppPT09OTg/IlxiIjppPT09MTE2fHxpPT09OT8iCSI6aT09PTExMD9gCmA6aT09PTExOD8iXHYiOmk9PT0xMDI/IlxmIjppPT09MTE0PyJcciI6aT09PTEwMT8iXHgxQiI6aT09PTMyPyIgIjppPT09MzQ/JyInOmk9PT00Nz8iLyI6aT09PTkyPyJcXCI6aT09PTc4PyLChSI6aT09PTk1PyLCoCI6aT09PTc2PyJcdTIwMjgiOmk9PT04MD8iXHUyMDI5IjoiIn1mdW5jdGlvbiBJenQoaSl7cmV0dXJuIGk8PTY1NTM1P1N0cmluZy5mcm9tQ2hhckNvZGUoaSk6U3RyaW5nLmZyb21DaGFyQ29kZSgoaS02NTUzNj4+MTApKzU1Mjk2LChpLTY1NTM2JjEwMjMpKzU2MzIwKX1mb3IodmFyIEwkZT1uZXcgQXJyYXkoMjU2KSxNJGU9bmV3IEFycmF5KDI1NiksQUQ9MDtBRDwyNTY7QUQrKylMJGVbQURdPUEkZShBRCk/MTowLE0kZVtBRF09QSRlKEFEKTtmdW5jdGlvbiBPenQoaSxzKXt0aGlzLmlucHV0PWksdGhpcy5maWxlbmFtZT1zLmZpbGVuYW1lfHxudWxsLHRoaXMuc2NoZW1hPXMuc2NoZW1hfHxUenQsdGhpcy5vbldhcm5pbmc9cy5vbldhcm5pbmd8fG51bGwsdGhpcy5sZWdhY3k9cy5sZWdhY3l8fCExLHRoaXMuanNvbj1zLmpzb258fCExLHRoaXMubGlzdGVuZXI9cy5saXN0ZW5lcnx8bnVsbCx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLnR5cGVNYXA9dGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwLHRoaXMubGVuZ3RoPWkubGVuZ3RoLHRoaXMucG9zaXRpb249MCx0aGlzLmxpbmU9MCx0aGlzLmxpbmVTdGFydD0wLHRoaXMubGluZUluZGVudD0wLHRoaXMuZmlyc3RUYWJJbkxpbmU9LTEsdGhpcy5kb2N1bWVudHM9W119ZnVuY3Rpb24gRCRlKGkscyl7dmFyIHU9e25hbWU6aS5maWxlbmFtZSxidWZmZXI6aS5pbnB1dC5zbGljZSgwLC0xKSxwb3NpdGlvbjppLnBvc2l0aW9uLGxpbmU6aS5saW5lLGNvbHVtbjppLnBvc2l0aW9uLWkubGluZVN0YXJ0fTtyZXR1cm4gdS5zbmlwcGV0PXkkdCh1KSxuZXcgQTcocyx1KX1mdW5jdGlvbiBvYShpLHMpe3Rocm93IEQkZShpLHMpfWZ1bmN0aW9uIGVRKGkscyl7aS5vbldhcm5pbmcmJmkub25XYXJuaW5nLmNhbGwobnVsbCxEJGUoaSxzKSl9dmFyIEkkZT17WUFNTDpmdW5jdGlvbihzLHUsZCl7dmFyIHAsdixiO3MudmVyc2lvbiE9PW51bGwmJm9hKHMsImR1cGxpY2F0aW9uIG9mICVZQU1MIGRpcmVjdGl2ZSIpLGQubGVuZ3RoIT09MSYmb2EocywiWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudCIpLHA9L14oWzAtOV0rKVwuKFswLTldKykkLy5leGVjKGRbMF0pLHA9PT1udWxsJiZvYShzLCJpbGwtZm9ybWVkIGFyZ3VtZW50IG9mIHRoZSBZQU1MIGRpcmVjdGl2ZSIpLHY9cGFyc2VJbnQocFsxXSwxMCksYj1wYXJzZUludChwWzJdLDEwKSx2IT09MSYmb2EocywidW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKSxzLnZlcnNpb249ZFswXSxzLmNoZWNrTGluZUJyZWFrcz1iPDIsYiE9PTEmJmIhPT0yJiZlUShzLCJ1bnN1cHBvcnRlZCBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Iil9LFRBRzpmdW5jdGlvbihzLHUsZCl7dmFyIHAsdjtkLmxlbmd0aCE9PTImJm9hKHMsIlRBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHMiKSxwPWRbMF0sdj1kWzFdLEMkZS50ZXN0KHApfHxvYShzLCJpbGwtZm9ybWVkIHRhZyBoYW5kbGUgKGZpcnN0IGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpLHg5LmNhbGwocy50YWdNYXAscCkmJm9hKHMsJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yICInK3ArJyIgdGFnIGhhbmRsZScpLFMkZS50ZXN0KHYpfHxvYShzLCJpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKTt0cnl7dj1kZWNvZGVVUklDb21wb25lbnQodil9Y2F0Y2h7b2EocywidGFnIHByZWZpeCBpcyBtYWxmb3JtZWQ6ICIrdil9cy50YWdNYXBbcF09dn19O2Z1bmN0aW9uIGs5KGkscyx1LGQpe3ZhciBwLHYsYix5O2lmKHM8dSl7aWYoeT1pLmlucHV0LnNsaWNlKHMsdSksZClmb3IocD0wLHY9eS5sZW5ndGg7cDx2O3ArPTEpYj15LmNoYXJDb2RlQXQocCksYj09PTl8fDMyPD1iJiZiPD0xMTE0MTExfHxvYShpLCJleHBlY3RlZCB2YWxpZCBKU09OIGNoYXJhY3RlciIpO2Vsc2UgU3p0LnRlc3QoeSkmJm9hKGksInRoZSBzdHJlYW0gY29udGFpbnMgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIik7aS5yZXN1bHQrPXl9fWZ1bmN0aW9uIE8kZShpLHMsdSxkKXt2YXIgcCx2LGIseTtmb3IoTHAuaXNPYmplY3QodSl8fG9hKGksImNhbm5vdCBtZXJnZSBtYXBwaW5nczsgdGhlIHByb3ZpZGVkIHNvdXJjZSBvYmplY3QgaXMgdW5hY2NlcHRhYmxlIikscD1PYmplY3Qua2V5cyh1KSxiPTAseT1wLmxlbmd0aDtiPHk7Yis9MSl2PXBbYl0seDkuY2FsbChzLHYpfHwoc1t2XT11W3ZdLGRbdl09ITApfWZ1bmN0aW9uIExEKGkscyx1LGQscCx2LGIseSxUKXt2YXIgXyxBO2lmKEFycmF5LmlzQXJyYXkocCkpZm9yKHA9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocCksXz0wLEE9cC5sZW5ndGg7XzxBO18rPTEpQXJyYXkuaXNBcnJheShwW19dKSYmb2EoaSwibmVzdGVkIGFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUga2V5cyIpLHR5cGVvZiBwPT0ib2JqZWN0IiYmXyRlKHBbX10pPT09IltvYmplY3QgT2JqZWN0XSImJihwW19dPSJbb2JqZWN0IE9iamVjdF0iKTtpZih0eXBlb2YgcD09Im9iamVjdCImJl8kZShwKT09PSJbb2JqZWN0IE9iamVjdF0iJiYocD0iW29iamVjdCBPYmplY3RdIikscD1TdHJpbmcocCkscz09PW51bGwmJihzPXt9KSxkPT09InRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIilpZihBcnJheS5pc0FycmF5KHYpKWZvcihfPTAsQT12Lmxlbmd0aDtfPEE7Xys9MSlPJGUoaSxzLHZbX10sdSk7ZWxzZSBPJGUoaSxzLHYsdSk7ZWxzZSFpLmpzb24mJiF4OS5jYWxsKHUscCkmJng5LmNhbGwocyxwKSYmKGkubGluZT1ifHxpLmxpbmUsaS5saW5lU3RhcnQ9eXx8aS5saW5lU3RhcnQsaS5wb3NpdGlvbj1UfHxpLnBvc2l0aW9uLG9hKGksImR1cGxpY2F0ZWQgbWFwcGluZyBrZXkiKSkscD09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLHAse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZ9KTpzW3BdPXYsZGVsZXRlIHVbcF07cmV0dXJuIHN9ZnVuY3Rpb24gVTJlKGkpe3ZhciBzO3M9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLHM9PT0xMD9pLnBvc2l0aW9uKys6cz09PTEzPyhpLnBvc2l0aW9uKyssaS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pPT09MTAmJmkucG9zaXRpb24rKyk6b2EoaSwiYSBsaW5lIGJyZWFrIGlzIGV4cGVjdGVkIiksaS5saW5lKz0xLGkubGluZVN0YXJ0PWkucG9zaXRpb24saS5maXJzdFRhYkluTGluZT0tMX1mdW5jdGlvbiBPMChpLHMsdSl7Zm9yKHZhciBkPTAscD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7cCE9PTA7KXtmb3IoO0ZDKHApOylwPT09OSYmaS5maXJzdFRhYkluTGluZT09PS0xJiYoaS5maXJzdFRhYkluTGluZT1pLnBvc2l0aW9uKSxwPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2lmKHMmJnA9PT0zNSlkbyBwPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3doaWxlKHAhPT0xMCYmcCE9PTEzJiZwIT09MCk7aWYoVjQocCkpZm9yKFUyZShpKSxwPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxkKyssaS5saW5lSW5kZW50PTA7cD09PTMyOylpLmxpbmVJbmRlbnQrKyxwPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2Vsc2UgYnJlYWt9cmV0dXJuIHUhPT0tMSYmZCE9PTAmJmkubGluZUluZGVudDx1JiZlUShpLCJkZWZpY2llbnQgaW5kZW50YXRpb24iKSxkfWZ1bmN0aW9uIHRRKGkpe3ZhciBzPWkucG9zaXRpb24sdTtyZXR1cm4gdT1pLmlucHV0LmNoYXJDb2RlQXQocyksISEoKHU9PT00NXx8dT09PTQ2KSYmdT09PWkuaW5wdXQuY2hhckNvZGVBdChzKzEpJiZ1PT09aS5pbnB1dC5jaGFyQ29kZUF0KHMrMikmJihzKz0zLHU9aS5pbnB1dC5jaGFyQ29kZUF0KHMpLHU9PT0wfHxGMih1KSkpfWZ1bmN0aW9uIEcyZShpLHMpe3M9PT0xP2kucmVzdWx0Kz0iICI6cz4xJiYoaS5yZXN1bHQrPUxwLnJlcGVhdChgCmAscy0xKSl9ZnVuY3Rpb24gTnp0KGkscyx1KXt2YXIgZCxwLHYsYix5LFQsXyxBLFA9aS5raW5kLFI9aS5yZXN1bHQsRjtpZihGPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxGMihGKXx8X0QoRil8fEY9PT0zNXx8Rj09PTM4fHxGPT09NDJ8fEY9PT0zM3x8Rj09PTEyNHx8Rj09PTYyfHxGPT09Mzl8fEY9PT0zNHx8Rj09PTM3fHxGPT09NjR8fEY9PT05Nnx8KEY9PT02M3x8Rj09PTQ1KSYmKHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksRjIocCl8fHUmJl9EKHApKSlyZXR1cm4hMTtmb3IoaS5raW5kPSJzY2FsYXIiLGkucmVzdWx0PSIiLHY9Yj1pLnBvc2l0aW9uLHk9ITE7RiE9PTA7KXtpZihGPT09NTgpe2lmKHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksRjIocCl8fHUmJl9EKHApKWJyZWFrfWVsc2UgaWYoRj09PTM1KXtpZihkPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uLTEpLEYyKGQpKWJyZWFrfWVsc2V7aWYoaS5wb3NpdGlvbj09PWkubGluZVN0YXJ0JiZ0UShpKXx8dSYmX0QoRikpYnJlYWs7aWYoVjQoRikpaWYoVD1pLmxpbmUsXz1pLmxpbmVTdGFydCxBPWkubGluZUluZGVudCxPMChpLCExLC0xKSxpLmxpbmVJbmRlbnQ+PXMpe3k9ITAsRj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7Y29udGludWV9ZWxzZXtpLnBvc2l0aW9uPWIsaS5saW5lPVQsaS5saW5lU3RhcnQ9XyxpLmxpbmVJbmRlbnQ9QTticmVha319eSYmKGs5KGksdixiLCExKSxHMmUoaSxpLmxpbmUtVCksdj1iPWkucG9zaXRpb24seT0hMSksRkMoRil8fChiPWkucG9zaXRpb24rMSksRj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKX1yZXR1cm4gazkoaSx2LGIsITEpLGkucmVzdWx0PyEwOihpLmtpbmQ9UCxpLnJlc3VsdD1SLCExKX1mdW5jdGlvbiBQenQoaSxzKXt2YXIgdSxkLHA7aWYodT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksdSE9PTM5KXJldHVybiExO2ZvcihpLmtpbmQ9InNjYWxhciIsaS5yZXN1bHQ9IiIsaS5wb3NpdGlvbisrLGQ9cD1pLnBvc2l0aW9uOyh1PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSkhPT0wOylpZih1PT09MzkpaWYoazkoaSxkLGkucG9zaXRpb24sITApLHU9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksdT09PTM5KWQ9aS5wb3NpdGlvbixpLnBvc2l0aW9uKysscD1pLnBvc2l0aW9uO2Vsc2UgcmV0dXJuITA7ZWxzZSBWNCh1KT8oazkoaSxkLHAsITApLEcyZShpLE8wKGksITEscykpLGQ9cD1pLnBvc2l0aW9uKTppLnBvc2l0aW9uPT09aS5saW5lU3RhcnQmJnRRKGkpP29hKGksInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpOihpLnBvc2l0aW9uKysscD1pLnBvc2l0aW9uKTtvYShpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIil9ZnVuY3Rpb24gQnp0KGkscyl7dmFyIHUsZCxwLHYsYix5O2lmKHk9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLHkhPT0zNClyZXR1cm4hMTtmb3IoaS5raW5kPSJzY2FsYXIiLGkucmVzdWx0PSIiLGkucG9zaXRpb24rKyx1PWQ9aS5wb3NpdGlvbjsoeT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbikpIT09MDspe2lmKHk9PT0zNClyZXR1cm4gazkoaSx1LGkucG9zaXRpb24sITApLGkucG9zaXRpb24rKywhMDtpZih5PT09OTIpe2lmKGs5KGksdSxpLnBvc2l0aW9uLCEwKSx5PWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLFY0KHkpKU8wKGksITEscyk7ZWxzZSBpZih5PDI1NiYmTCRlW3ldKWkucmVzdWx0Kz1NJGVbeV0saS5wb3NpdGlvbisrO2Vsc2UgaWYoKGI9TXp0KHkpKT4wKXtmb3IocD1iLHY9MDtwPjA7cC0tKXk9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksKGI9THp0KHkpKT49MD92PSh2PDw0KStiOm9hKGksImV4cGVjdGVkIGhleGFkZWNpbWFsIGNoYXJhY3RlciIpO2kucmVzdWx0Kz1JenQodiksaS5wb3NpdGlvbisrfWVsc2Ugb2EoaSwidW5rbm93biBlc2NhcGUgc2VxdWVuY2UiKTt1PWQ9aS5wb3NpdGlvbn1lbHNlIFY0KHkpPyhrOShpLHUsZCwhMCksRzJlKGksTzAoaSwhMSxzKSksdT1kPWkucG9zaXRpb24pOmkucG9zaXRpb249PT1pLmxpbmVTdGFydCYmdFEoaSk/b2EoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIik6KGkucG9zaXRpb24rKyxkPWkucG9zaXRpb24pfW9hKGksInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBGenQoaSxzKXt2YXIgdT0hMCxkLHAsdixiPWkudGFnLHksVD1pLmFuY2hvcixfLEEsUCxSLEYsaj1PYmplY3QuY3JlYXRlKG51bGwpLEssZWUsaWUsb2U7aWYob2U9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLG9lPT09OTEpQT05MyxGPSExLHk9W107ZWxzZSBpZihvZT09PTEyMylBPTEyNSxGPSEwLHk9e307ZWxzZSByZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPXkpLG9lPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO29lIT09MDspe2lmKE8wKGksITAscyksb2U9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLG9lPT09QSlyZXR1cm4gaS5wb3NpdGlvbisrLGkudGFnPWIsaS5hbmNob3I9VCxpLmtpbmQ9Rj8ibWFwcGluZyI6InNlcXVlbmNlIixpLnJlc3VsdD15LCEwO3U/b2U9PT00NCYmb2EoaSwiZXhwZWN0ZWQgdGhlIG5vZGUgY29udGVudCwgYnV0IGZvdW5kICcsJyIpOm9hKGksIm1pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzIiksZWU9Sz1pZT1udWxsLFA9Uj0hMSxvZT09PTYzJiYoXz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKSxGMihfKSYmKFA9Uj0hMCxpLnBvc2l0aW9uKyssTzAoaSwhMCxzKSkpLGQ9aS5saW5lLHA9aS5saW5lU3RhcnQsdj1pLnBvc2l0aW9uLE1EKGkscyxKWCwhMSwhMCksZWU9aS50YWcsSz1pLnJlc3VsdCxPMChpLCEwLHMpLG9lPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSwoUnx8aS5saW5lPT09ZCkmJm9lPT09NTgmJihQPSEwLG9lPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLE8wKGksITAscyksTUQoaSxzLEpYLCExLCEwKSxpZT1pLnJlc3VsdCksRj9MRChpLHksaixlZSxLLGllLGQscCx2KTpQP3kucHVzaChMRChpLG51bGwsaixlZSxLLGllLGQscCx2KSk6eS5wdXNoKEspLE8wKGksITAscyksb2U9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLG9lPT09NDQ/KHU9ITAsb2U9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbikpOnU9ITF9b2EoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBmbG93IGNvbGxlY3Rpb24iKX1mdW5jdGlvbiBSenQoaSxzKXt2YXIgdSxkLHA9VjJlLHY9ITEsYj0hMSx5PXMsVD0wLF89ITEsQSxQO2lmKFA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLFA9PT0xMjQpZD0hMTtlbHNlIGlmKFA9PT02MilkPSEwO2Vsc2UgcmV0dXJuITE7Zm9yKGkua2luZD0ic2NhbGFyIixpLnJlc3VsdD0iIjtQIT09MDspaWYoUD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxQPT09NDN8fFA9PT00NSlWMmU9PT1wP3A9UD09PTQzP1QkZTpDenQ6b2EoaSwicmVwZWF0IG9mIGEgY2hvbXBpbmcgbW9kZSBpZGVudGlmaWVyIik7ZWxzZSBpZigoQT1EenQoUCkpPj0wKUE9PT0wP29hKGksImJhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUiKTpiP29hKGksInJlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyIik6KHk9cytBLTEsYj0hMCk7ZWxzZSBicmVhaztpZihGQyhQKSl7ZG8gUD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZShGQyhQKSk7aWYoUD09PTM1KWRvIFA9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUoIVY0KFApJiZQIT09MCl9Zm9yKDtQIT09MDspe2ZvcihVMmUoaSksaS5saW5lSW5kZW50PTAsUD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7KCFifHxpLmxpbmVJbmRlbnQ8eSkmJlA9PT0zMjspaS5saW5lSW5kZW50KyssUD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtpZighYiYmaS5saW5lSW5kZW50PnkmJih5PWkubGluZUluZGVudCksVjQoUCkpe1QrKztjb250aW51ZX1pZihpLmxpbmVJbmRlbnQ8eSl7cD09PVQkZT9pLnJlc3VsdCs9THAucmVwZWF0KGAKYCx2PzErVDpUKTpwPT09VjJlJiZ2JiYoaS5yZXN1bHQrPWAKYCk7YnJlYWt9Zm9yKGQ/RkMoUCk/KF89ITAsaS5yZXN1bHQrPUxwLnJlcGVhdChgCmAsdj8xK1Q6VCkpOl8/KF89ITEsaS5yZXN1bHQrPUxwLnJlcGVhdChgCmAsVCsxKSk6VD09PTA/diYmKGkucmVzdWx0Kz0iICIpOmkucmVzdWx0Kz1McC5yZXBlYXQoYApgLFQpOmkucmVzdWx0Kz1McC5yZXBlYXQoYApgLHY/MStUOlQpLHY9ITAsYj0hMCxUPTAsdT1pLnBvc2l0aW9uOyFWNChQKSYmUCE9PTA7KVA9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7azkoaSx1LGkucG9zaXRpb24sITEpfXJldHVybiEwfWZ1bmN0aW9uIE4kZShpLHMpe3ZhciB1LGQ9aS50YWcscD1pLmFuY2hvcix2PVtdLGIseT0hMSxUO2lmKGkuZmlyc3RUYWJJbkxpbmUhPT0tMSlyZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPXYpLFQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO1QhPT0wJiYoaS5maXJzdFRhYkluTGluZSE9PS0xJiYoaS5wb3NpdGlvbj1pLmZpcnN0VGFiSW5MaW5lLG9hKGksInRhYiBjaGFyYWN0ZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4gaW5kZW50YXRpb24iKSksIShUIT09NDV8fChiPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpLCFGMihiKSkpKTspe2lmKHk9ITAsaS5wb3NpdGlvbisrLE8wKGksITAsLTEpJiZpLmxpbmVJbmRlbnQ8PXMpe3YucHVzaChudWxsKSxUPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTtjb250aW51ZX1pZih1PWkubGluZSxNRChpLHMsRSRlLCExLCEwKSx2LnB1c2goaS5yZXN1bHQpLE8wKGksITAsLTEpLFQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLChpLmxpbmU9PT11fHxpLmxpbmVJbmRlbnQ+cykmJlQhPT0wKW9hKGksImJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5Iik7ZWxzZSBpZihpLmxpbmVJbmRlbnQ8cylicmVha31yZXR1cm4geT8oaS50YWc9ZCxpLmFuY2hvcj1wLGkua2luZD0ic2VxdWVuY2UiLGkucmVzdWx0PXYsITApOiExfWZ1bmN0aW9uIGp6dChpLHMsdSl7dmFyIGQscCx2LGIseSxULF89aS50YWcsQT1pLmFuY2hvcixQPXt9LFI9T2JqZWN0LmNyZWF0ZShudWxsKSxGPW51bGwsaj1udWxsLEs9bnVsbCxlZT0hMSxpZT0hMSxvZTtpZihpLmZpcnN0VGFiSW5MaW5lIT09LTEpcmV0dXJuITE7Zm9yKGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1QKSxvZT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7b2UhPT0wOyl7aWYoIWVlJiZpLmZpcnN0VGFiSW5MaW5lIT09LTEmJihpLnBvc2l0aW9uPWkuZmlyc3RUYWJJbkxpbmUsb2EoaSwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbiIpKSxkPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpLHY9aS5saW5lLChvZT09PTYzfHxvZT09PTU4KSYmRjIoZCkpb2U9PT02Mz8oZWUmJihMRChpLFAsUixGLGosbnVsbCxiLHksVCksRj1qPUs9bnVsbCksaWU9ITAsZWU9ITAscD0hMCk6ZWU/KGVlPSExLHA9ITApOm9hKGksImluY29tcGxldGUgZXhwbGljaXQgbWFwcGluZyBwYWlyOyBhIGtleSBub2RlIGlzIG1pc3NlZDsgb3IgZm9sbG93ZWQgYnkgYSBub24tdGFidWxhdGVkIGVtcHR5IGxpbmUiKSxpLnBvc2l0aW9uKz0xLG9lPWQ7ZWxzZXtpZihiPWkubGluZSx5PWkubGluZVN0YXJ0LFQ9aS5wb3NpdGlvbiwhTUQoaSx1LGskZSwhMSwhMCkpYnJlYWs7aWYoaS5saW5lPT09dil7Zm9yKG9lPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTtGQyhvZSk7KW9lPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2lmKG9lPT09NTgpb2U9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksRjIob2UpfHxvYShpLCJhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmciKSxlZSYmKExEKGksUCxSLEYsaixudWxsLGIseSxUKSxGPWo9Sz1udWxsKSxpZT0hMCxlZT0hMSxwPSExLEY9aS50YWcsaj1pLnJlc3VsdDtlbHNlIGlmKGllKW9hKGksImNhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkIik7ZWxzZSByZXR1cm4gaS50YWc9XyxpLmFuY2hvcj1BLCEwfWVsc2UgaWYoaWUpb2EoaSwiY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5Iik7ZWxzZSByZXR1cm4gaS50YWc9XyxpLmFuY2hvcj1BLCEwfWlmKChpLmxpbmU9PT12fHxpLmxpbmVJbmRlbnQ+cykmJihlZSYmKGI9aS5saW5lLHk9aS5saW5lU3RhcnQsVD1pLnBvc2l0aW9uKSxNRChpLHMsWlgsITAscCkmJihlZT9qPWkucmVzdWx0Oks9aS5yZXN1bHQpLGVlfHwoTEQoaSxQLFIsRixqLEssYix5LFQpLEY9aj1LPW51bGwpLE8wKGksITAsLTEpLG9lPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSksKGkubGluZT09PXZ8fGkubGluZUluZGVudD5zKSYmb2UhPT0wKW9hKGksImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnkiKTtlbHNlIGlmKGkubGluZUluZGVudDxzKWJyZWFrfXJldHVybiBlZSYmTEQoaSxQLFIsRixqLG51bGwsYix5LFQpLGllJiYoaS50YWc9XyxpLmFuY2hvcj1BLGkua2luZD0ibWFwcGluZyIsaS5yZXN1bHQ9UCksaWV9ZnVuY3Rpb24gJHp0KGkpe3ZhciBzLHU9ITEsZD0hMSxwLHYsYjtpZihiPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxiIT09MzMpcmV0dXJuITE7aWYoaS50YWchPT1udWxsJiZvYShpLCJkdXBsaWNhdGlvbiBvZiBhIHRhZyBwcm9wZXJ0eSIpLGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksYj09PTYwPyh1PSEwLGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbikpOmI9PT0zMz8oZD0hMCxwPSIhISIsYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6cD0iISIscz1pLnBvc2l0aW9uLHUpe2RvIGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUoYiE9PTAmJmIhPT02Mik7aS5wb3NpdGlvbjxpLmxlbmd0aD8odj1pLmlucHV0LnNsaWNlKHMsaS5wb3NpdGlvbiksYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6b2EoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSB2ZXJiYXRpbSB0YWciKX1lbHNle2Zvcig7YiE9PTAmJiFGMihiKTspYj09PTMzJiYoZD9vYShpLCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzIik6KHA9aS5pbnB1dC5zbGljZShzLTEsaS5wb3NpdGlvbisxKSxDJGUudGVzdChwKXx8b2EoaSwibmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMiKSxkPSEwLHM9aS5wb3NpdGlvbisxKSksYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt2PWkuaW5wdXQuc2xpY2UocyxpLnBvc2l0aW9uKSxBenQudGVzdCh2KSYmb2EoaSwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBmbG93IGluZGljYXRvciBjaGFyYWN0ZXJzIil9diYmIVMkZS50ZXN0KHYpJiZvYShpLCJ0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICIrdik7dHJ5e3Y9ZGVjb2RlVVJJQ29tcG9uZW50KHYpfWNhdGNoe29hKGksInRhZyBuYW1lIGlzIG1hbGZvcm1lZDogIit2KX1yZXR1cm4gdT9pLnRhZz12Ong5LmNhbGwoaS50YWdNYXAscCk/aS50YWc9aS50YWdNYXBbcF0rdjpwPT09IiEiP2kudGFnPSIhIit2OnA9PT0iISEiP2kudGFnPSJ0YWc6eWFtbC5vcmcsMjAwMjoiK3Y6b2EoaSwndW5kZWNsYXJlZCB0YWcgaGFuZGxlICInK3ArJyInKSwhMH1mdW5jdGlvbiB6enQoaSl7dmFyIHMsdTtpZih1PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSx1IT09MzgpcmV0dXJuITE7Zm9yKGkuYW5jaG9yIT09bnVsbCYmb2EoaSwiZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5IiksdT1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxzPWkucG9zaXRpb247dSE9PTAmJiFGMih1KSYmIV9EKHUpOyl1PWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3JldHVybiBpLnBvc2l0aW9uPT09cyYmb2EoaSwibmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpLGkuYW5jaG9yPWkuaW5wdXQuc2xpY2UocyxpLnBvc2l0aW9uKSwhMH1mdW5jdGlvbiBxenQoaSl7dmFyIHMsdSxkO2lmKGQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGQhPT00MilyZXR1cm4hMTtmb3IoZD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxzPWkucG9zaXRpb247ZCE9PTAmJiFGMihkKSYmIV9EKGQpOylkPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3JldHVybiBpLnBvc2l0aW9uPT09cyYmb2EoaSwibmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIiksdT1pLmlucHV0LnNsaWNlKHMsaS5wb3NpdGlvbikseDkuY2FsbChpLmFuY2hvck1hcCx1KXx8b2EoaSwndW5pZGVudGlmaWVkIGFsaWFzICInK3UrJyInKSxpLnJlc3VsdD1pLmFuY2hvck1hcFt1XSxPMChpLCEwLC0xKSwhMH1mdW5jdGlvbiBNRChpLHMsdSxkLHApe3ZhciB2LGIseSxUPTEsXz0hMSxBPSExLFAsUixGLGosSyxlZTtpZihpLmxpc3RlbmVyIT09bnVsbCYmaS5saXN0ZW5lcigib3BlbiIsaSksaS50YWc9bnVsbCxpLmFuY2hvcj1udWxsLGkua2luZD1udWxsLGkucmVzdWx0PW51bGwsdj1iPXk9Wlg9PT11fHxFJGU9PT11LGQmJk8wKGksITAsLTEpJiYoXz0hMCxpLmxpbmVJbmRlbnQ+cz9UPTE6aS5saW5lSW5kZW50PT09cz9UPTA6aS5saW5lSW5kZW50PHMmJihUPS0xKSksVD09PTEpZm9yKDskenQoaSl8fHp6dChpKTspTzAoaSwhMCwtMSk/KF89ITAseT12LGkubGluZUluZGVudD5zP1Q9MTppLmxpbmVJbmRlbnQ9PT1zP1Q9MDppLmxpbmVJbmRlbnQ8cyYmKFQ9LTEpKTp5PSExO2lmKHkmJih5PV98fHApLChUPT09MXx8Wlg9PT11KSYmKEpYPT09dXx8ayRlPT09dT9LPXM6Sz1zKzEsZWU9aS5wb3NpdGlvbi1pLmxpbmVTdGFydCxUPT09MT95JiYoTiRlKGksZWUpfHxqenQoaSxlZSxLKSl8fEZ6dChpLEspP0E9ITA6KGImJlJ6dChpLEspfHxQenQoaSxLKXx8Qnp0KGksSyk/QT0hMDpxenQoaSk/KEE9ITAsKGkudGFnIT09bnVsbHx8aS5hbmNob3IhPT1udWxsKSYmb2EoaSwiYWxpYXMgbm9kZSBzaG91bGQgbm90IGhhdmUgYW55IHByb3BlcnRpZXMiKSk6Tnp0KGksSyxKWD09PXUpJiYoQT0hMCxpLnRhZz09PW51bGwmJihpLnRhZz0iPyIpKSxpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09aS5yZXN1bHQpKTpUPT09MCYmKEE9eSYmTiRlKGksZWUpKSksaS50YWc9PT1udWxsKWkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCk7ZWxzZSBpZihpLnRhZz09PSI/Iil7Zm9yKGkucmVzdWx0IT09bnVsbCYmaS5raW5kIT09InNjYWxhciImJm9hKGksJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Pz4gdGFnOyBpdCBzaG91bGQgYmUgInNjYWxhciIsIG5vdCAiJytpLmtpbmQrJyInKSxQPTAsUj1pLmltcGxpY2l0VHlwZXMubGVuZ3RoO1A8UjtQKz0xKWlmKGo9aS5pbXBsaWNpdFR5cGVzW1BdLGoucmVzb2x2ZShpLnJlc3VsdCkpe2kucmVzdWx0PWouY29uc3RydWN0KGkucmVzdWx0KSxpLnRhZz1qLnRhZyxpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09aS5yZXN1bHQpO2JyZWFrfX1lbHNlIGlmKGkudGFnIT09IiEiKXtpZih4OS5jYWxsKGkudHlwZU1hcFtpLmtpbmR8fCJmYWxsYmFjayJdLGkudGFnKSlqPWkudHlwZU1hcFtpLmtpbmR8fCJmYWxsYmFjayJdW2kudGFnXTtlbHNlIGZvcihqPW51bGwsRj1pLnR5cGVNYXAubXVsdGlbaS5raW5kfHwiZmFsbGJhY2siXSxQPTAsUj1GLmxlbmd0aDtQPFI7UCs9MSlpZihpLnRhZy5zbGljZSgwLEZbUF0udGFnLmxlbmd0aCk9PT1GW1BdLnRhZyl7aj1GW1BdO2JyZWFrfWp8fG9hKGksInVua25vd24gdGFnICE8IitpLnRhZysiPiIpLGkucmVzdWx0IT09bnVsbCYmai5raW5kIT09aS5raW5kJiZvYShpLCJ1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPCIraS50YWcrJz4gdGFnOyBpdCBzaG91bGQgYmUgIicrai5raW5kKyciLCBub3QgIicraS5raW5kKyciJyksai5yZXNvbHZlKGkucmVzdWx0LGkudGFnKT8oaS5yZXN1bHQ9ai5jb25zdHJ1Y3QoaS5yZXN1bHQsaS50YWcpLGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCkpOm9hKGksImNhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8IitpLnRhZysiPiBleHBsaWNpdCB0YWciKX1yZXR1cm4gaS5saXN0ZW5lciE9PW51bGwmJmkubGlzdGVuZXIoImNsb3NlIixpKSxpLnRhZyE9PW51bGx8fGkuYW5jaG9yIT09bnVsbHx8QX1mdW5jdGlvbiBIenQoaSl7dmFyIHM9aS5wb3NpdGlvbix1LGQscCx2PSExLGI7Zm9yKGkudmVyc2lvbj1udWxsLGkuY2hlY2tMaW5lQnJlYWtzPWkubGVnYWN5LGkudGFnTWFwPU9iamVjdC5jcmVhdGUobnVsbCksaS5hbmNob3JNYXA9T2JqZWN0LmNyZWF0ZShudWxsKTsoYj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbikpIT09MCYmKE8wKGksITAsLTEpLGI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLCEoaS5saW5lSW5kZW50PjB8fGIhPT0zNykpOyl7Zm9yKHY9ITAsYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSx1PWkucG9zaXRpb247YiE9PTAmJiFGMihiKTspYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtmb3IoZD1pLmlucHV0LnNsaWNlKHUsaS5wb3NpdGlvbikscD1bXSxkLmxlbmd0aDwxJiZvYShpLCJkaXJlY3RpdmUgbmFtZSBtdXN0IG5vdCBiZSBsZXNzIHRoYW4gb25lIGNoYXJhY3RlciBpbiBsZW5ndGgiKTtiIT09MDspe2Zvcig7RkMoYik7KWI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7aWYoYj09PTM1KXtkbyBiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3doaWxlKGIhPT0wJiYhVjQoYikpO2JyZWFrfWlmKFY0KGIpKWJyZWFrO2Zvcih1PWkucG9zaXRpb247YiE9PTAmJiFGMihiKTspYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtwLnB1c2goaS5pbnB1dC5zbGljZSh1LGkucG9zaXRpb24pKX1iIT09MCYmVTJlKGkpLHg5LmNhbGwoSSRlLGQpP0kkZVtkXShpLGQscCk6ZVEoaSwndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgIicrZCsnIicpfWlmKE8wKGksITAsLTEpLGkubGluZUluZGVudD09PTAmJmkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKT09PTQ1JiZpLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKT09PTQ1JiZpLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisyKT09PTQ1PyhpLnBvc2l0aW9uKz0zLE8wKGksITAsLTEpKTp2JiZvYShpLCJkaXJlY3RpdmVzIGVuZCBtYXJrIGlzIGV4cGVjdGVkIiksTUQoaSxpLmxpbmVJbmRlbnQtMSxaWCwhMSwhMCksTzAoaSwhMCwtMSksaS5jaGVja0xpbmVCcmVha3MmJl96dC50ZXN0KGkuaW5wdXQuc2xpY2UocyxpLnBvc2l0aW9uKSkmJmVRKGksIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCIpLGkuZG9jdW1lbnRzLnB1c2goaS5yZXN1bHQpLGkucG9zaXRpb249PT1pLmxpbmVTdGFydCYmdFEoaSkpe2kuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKT09PTQ2JiYoaS5wb3NpdGlvbis9MyxPMChpLCEwLC0xKSk7cmV0dXJufWlmKGkucG9zaXRpb248aS5sZW5ndGgtMSlvYShpLCJlbmQgb2YgdGhlIHN0cmVhbSBvciBhIGRvY3VtZW50IHNlcGFyYXRvciBpcyBleHBlY3RlZCIpO2Vsc2UgcmV0dXJufWZ1bmN0aW9uIFAkZShpLHMpe2k9U3RyaW5nKGkpLHM9c3x8e30saS5sZW5ndGghPT0wJiYoaS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09MTAmJmkuY2hhckNvZGVBdChpLmxlbmd0aC0xKSE9PTEzJiYoaSs9YApgKSxpLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKGk9aS5zbGljZSgxKSkpO3ZhciB1PW5ldyBPenQoaSxzKSxkPWkuaW5kZXhPZigiXDAiKTtmb3IoZCE9PS0xJiYodS5wb3NpdGlvbj1kLG9hKHUsIm51bGwgYnl0ZSBpcyBub3QgYWxsb3dlZCBpbiBpbnB1dCIpKSx1LmlucHV0Kz0iXDAiO3UuaW5wdXQuY2hhckNvZGVBdCh1LnBvc2l0aW9uKT09PTMyOyl1LmxpbmVJbmRlbnQrPTEsdS5wb3NpdGlvbis9MTtmb3IoO3UucG9zaXRpb248dS5sZW5ndGgtMTspSHp0KHUpO3JldHVybiB1LmRvY3VtZW50c31mdW5jdGlvbiBWenQoaSxzLHUpe3MhPT1udWxsJiZ0eXBlb2Ygcz09Im9iamVjdCImJnR5cGVvZiB1PiJ1IiYmKHU9cyxzPW51bGwpO3ZhciBkPVAkZShpLHUpO2lmKHR5cGVvZiBzIT0iZnVuY3Rpb24iKXJldHVybiBkO2Zvcih2YXIgcD0wLHY9ZC5sZW5ndGg7cDx2O3ArPTEpcyhkW3BdKX1mdW5jdGlvbiBVenQoaSxzKXt2YXIgdT1QJGUoaSxzKTtpZih1Lmxlbmd0aCE9PTApe2lmKHUubGVuZ3RoPT09MSlyZXR1cm4gdVswXTt0aHJvdyBuZXcgQTcoImV4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlIil9fXZhciBHenQ9Vnp0LEt6dD1VenQsV3p0PXtsb2FkQWxsOkd6dCxsb2FkOkt6dH0sWXp0PXckZSxYenQ9V3p0LmxvYWQ7ZnVuY3Rpb24gUXp0KGkpe2NvbnN0IHM9aS5tYXRjaChJUmUpO2lmKCFzKXJldHVybnt0ZXh0OmksbWV0YWRhdGE6e319O2xldCB1PVh6dChzWzFdLHtzY2hlbWE6WXp0fSk/P3t9O3U9dHlwZW9mIHU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheSh1KT91Ont9O2NvbnN0IGQ9e307cmV0dXJuIHUuZGlzcGxheU1vZGUmJihkLmRpc3BsYXlNb2RlPXUuZGlzcGxheU1vZGUudG9TdHJpbmcoKSksdS50aXRsZSYmKGQudGl0bGU9dS50aXRsZS50b1N0cmluZygpKSx1LmNvbmZpZyYmKGQuY29uZmlnPXUuY29uZmlnKSx7dGV4dDppLnNsaWNlKHNbMF0ubGVuZ3RoKSxtZXRhZGF0YTpkfX1jb25zdCBKenQ9aT0+aS5yZXBsYWNlKC9cclxuPy9nLGAKYCkucmVwbGFjZSgvPChcdyspKFtePl0qKT4vZywocyx1LGQpPT4iPCIrdStkLnJlcGxhY2UoLz0iKFteIl0qKSIvZywiPSckMSciKSsiPiIpLFp6dD1pPT57Y29uc3R7dGV4dDpzLG1ldGFkYXRhOnV9PVF6dChpKSx7ZGlzcGxheU1vZGU6ZCx0aXRsZTpwLGNvbmZpZzp2PXt9fT11O3JldHVybiBkJiYodi5nYW50dHx8KHYuZ2FudHQ9e30pLHYuZ2FudHQuZGlzcGxheU1vZGU9ZCkse3RpdGxlOnAsY29uZmlnOnYsdGV4dDpzfX0sZXF0PWk9Pntjb25zdCBzPUFvLmRldGVjdEluaXQoaSk/P3t9LHU9QW8uZGV0ZWN0RGlyZWN0aXZlKGksIndyYXAiKTtyZXR1cm4gQXJyYXkuaXNBcnJheSh1KT9zLndyYXA9dS5zb21lKCh7dHlwZTpkfSk9Pnt9KToodT09bnVsbD92b2lkIDA6dS50eXBlKT09PSJ3cmFwIiYmKHMud3JhcD0hMCkse3RleHQ6d1J0KGkpLGRpcmVjdGl2ZTpzfX07ZnVuY3Rpb24gQiRlKGkpe2NvbnN0IHM9Snp0KGkpLHU9Wnp0KHMpLGQ9ZXF0KHUudGV4dCkscD1KRih1LmNvbmZpZyxkLmRpcmVjdGl2ZSk7cmV0dXJuIGk9byR0KGQudGV4dCkse2NvZGU6aSx0aXRsZTp1LnRpdGxlLGNvbmZpZzpwfX1jb25zdCB0cXQ9NWU0LG5xdD0iZ3JhcGggVEI7YVtNYXhpbXVtIHRleHQgc2l6ZSBpbiBkaWFncmFtIGV4Y2VlZGVkXTtzdHlsZSBhIGZpbGw6I2ZhYSIscnF0PSJzYW5kYm94IixpcXQ9Imxvb3NlIixzcXQ9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixhcXQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLG9xdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsY3F0PSIxMDAlIix1cXQ9IjEwMCUiLGxxdD0iYm9yZGVyOjA7bWFyZ2luOjA7IixocXQ9Im1hcmdpbjowIixmcXQ9ImFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvbiBhbGxvdy1wb3B1cHMiLGRxdD0nVGhlICJpZnJhbWUiIHRhZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4nLGdxdD1bImZvcmVpZ25vYmplY3QiXSxwcXQ9WyJkb21pbmFudC1iYXNlbGluZSJdO2Z1bmN0aW9uIEYkZShpKXtjb25zdCBzPUIkZShpKTtyZXR1cm4gV1goKSxlanQocy5jb25maWc/P3t9KSxzfWFzeW5jIGZ1bmN0aW9uIGJxdChpLHMpe0IyZSgpLGk9RiRlKGkpLmNvZGU7dHJ5e2F3YWl0IEsyZShpKX1jYXRjaCh1KXtpZihzIT1udWxsJiZzLnN1cHByZXNzRXJyb3JzKXJldHVybiExO3Rocm93IHV9cmV0dXJuITB9Y29uc3QgUiRlPShpLHMsdT1bXSk9PmAKLiR7aX0gJHtzfSB7ICR7dS5qb2luKCIgIWltcG9ydGFudDsgIil9ICFpbXBvcnRhbnQ7IH1gLG1xdD0oaSxzPXt9KT0+e3ZhciBkO2xldCB1PSIiO2lmKGkudGhlbWVDU1MhPT12b2lkIDAmJih1Kz1gCiR7aS50aGVtZUNTU31gKSxpLmZvbnRGYW1pbHkhPT12b2lkIDAmJih1Kz1gCjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX19YCksaS5hbHRGb250RmFtaWx5IT09dm9pZCAwJiYodSs9YAo6cm9vdCB7IC0tbWVybWFpZC1hbHQtZm9udC1mYW1pbHk6ICR7aS5hbHRGb250RmFtaWx5fX1gKSwhaVIocykpe2NvbnN0IHk9aS5odG1sTGFiZWxzfHwoKGQ9aS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpkLmh0bWxMYWJlbHMpP1siPiAqIiwic3BhbiJdOlsicmVjdCIsInBvbHlnb24iLCJlbGxpcHNlIiwiY2lyY2xlIiwicGF0aCJdO2Zvcihjb25zdCBUIGluIHMpe2NvbnN0IF89c1tUXTtpUihfLnN0eWxlcyl8fHkuZm9yRWFjaChBPT57dSs9UiRlKF8uaWQsQSxfLnN0eWxlcyl9KSxpUihfLnRleHRTdHlsZXMpfHwodSs9UiRlKF8uaWQsInRzcGFuIixfLnRleHRTdHlsZXMpKX19cmV0dXJuIHV9LHZxdD0oaSxzLHUsZCk9Pntjb25zdCBwPW1xdChpLHUpLHY9VGp0KHMscCxpLnRoZW1lVmFyaWFibGVzKTtyZXR1cm4gTTJlKFdSdChgJHtkfXske3Z9fWApLFhSdCl9LHdxdD0oaT0iIixzLHUpPT57bGV0IGQ9aTtyZXR1cm4hdSYmIXMmJihkPWQucmVwbGFjZSgvbWFya2VyLWVuZD0idXJsXChbXGQrLi86PT9BLVphLXotXSo/Iy9nLCdtYXJrZXItZW5kPSJ1cmwoIycpKSxkPVpGKGQpLGQ9ZC5yZXBsYWNlKC88YnI+L2csIjxici8+IiksZH0seXF0PShpPSIiLHMpPT57dmFyIHAsdjtjb25zdCB1PSh2PShwPXM9PW51bGw/dm9pZCAwOnMudmlld0JveCk9PW51bGw/dm9pZCAwOnAuYmFzZVZhbCkhPW51bGwmJnYuaGVpZ2h0P3Mudmlld0JveC5iYXNlVmFsLmhlaWdodCsicHgiOnVxdCxkPWJ0b2EoJzxib2R5IHN0eWxlPSInK2hxdCsnIj4nK2krIjwvYm9keT4iKTtyZXR1cm5gPGlmcmFtZSBzdHlsZT0id2lkdGg6JHtjcXR9O2hlaWdodDoke3V9OyR7bHF0fSIgc3JjPSJkYXRhOnRleHQvaHRtbDtiYXNlNjQsJHtkfSIgc2FuZGJveD0iJHtmcXR9Ij4KICAke2RxdH0KPC9pZnJhbWU+YH0saiRlPShpLHMsdSxkLHApPT57Y29uc3Qgdj1pLmFwcGVuZCgiZGl2Iik7di5hdHRyKCJpZCIsdSksZCYmdi5hdHRyKCJzdHlsZSIsZCk7Y29uc3QgYj12LmFwcGVuZCgic3ZnIikuYXR0cigiaWQiLHMpLmF0dHIoIndpZHRoIiwiMTAwJSIpLmF0dHIoInhtbG5zIixzcXQpO3JldHVybiBwJiZiLmF0dHIoInhtbG5zOnhsaW5rIixwKSxiLmFwcGVuZCgiZyIpLGl9O2Z1bmN0aW9uICQkZShpLHMpe3JldHVybiBpLmFwcGVuZCgiaWZyYW1lIikuYXR0cigiaWQiLHMpLmF0dHIoInN0eWxlIiwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsiKS5hdHRyKCJzYW5kYm94IiwiIil9Y29uc3QgeHF0PShpLHMsdSxkKT0+e3ZhciBwLHYsYjsocD1pLmdldEVsZW1lbnRCeUlkKHMpKT09bnVsbHx8cC5yZW1vdmUoKSwodj1pLmdldEVsZW1lbnRCeUlkKHUpKT09bnVsbHx8di5yZW1vdmUoKSwoYj1pLmdldEVsZW1lbnRCeUlkKGQpKT09bnVsbHx8Yi5yZW1vdmUoKX0sa3F0PWFzeW5jIGZ1bmN0aW9uKGkscyx1KXt2YXIgVSxGZSxQZSxqZSxJZSxTZTtCMmUoKTtjb25zdCBkPUYkZShzKTtzPWQuY29kZTtjb25zdCBwPVZoKCk7WGUuZGVidWcocCkscy5sZW5ndGg+KChwPT1udWxsP3ZvaWQgMDpwLm1heFRleHRTaXplKT8/dHF0KSYmKHM9bnF0KTtjb25zdCB2PSIjIitpLGI9ImkiK2kseT0iIyIrYixUPSJkIitpLF89IiMiK1Q7bGV0IEE9SXIoImJvZHkiKTtjb25zdCBQPXAuc2VjdXJpdHlMZXZlbD09PXJxdCxSPXAuc2VjdXJpdHlMZXZlbD09PWlxdCxGPXAuZm9udEZhbWlseTtpZih1IT09dm9pZCAwKXtpZih1JiYodS5pbm5lckhUTUw9IiIpLFApe2NvbnN0IENlPSQkZShJcih1KSxiKTtBPUlyKENlLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpLEEubm9kZSgpLnN0eWxlLm1hcmdpbj0wfWVsc2UgQT1Jcih1KTtqJGUoQSxpLFQsYGZvbnQtZmFtaWx5OiAke0Z9YCxhcXQpfWVsc2V7aWYoeHF0KGRvY3VtZW50LGksVCxiKSxQKXtjb25zdCBDZT0kJGUoSXIoImJvZHkiKSxiKTtBPUlyKENlLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpLEEubm9kZSgpLnN0eWxlLm1hcmdpbj0wfWVsc2UgQT1JcigiYm9keSIpO2okZShBLGksVCl9bGV0IGosSzt0cnl7aj1hd2FpdCBLMmUocyx7dGl0bGU6ZC50aXRsZX0pfWNhdGNoKENlKXtqPW5ldyBjJGUoImVycm9yIiksSz1DZX1jb25zdCBlZT1BLnNlbGVjdChfKS5ub2RlKCksaWU9ai50eXBlLG9lPWVlLmZpcnN0Q2hpbGQscGU9b2UuZmlyc3RDaGlsZCxiZT0oRmU9KFU9ai5yZW5kZXJlcikuZ2V0Q2xhc3Nlcyk9PW51bGw/dm9pZCAwOkZlLmNhbGwoVSxzLGopLGFlPXZxdChwLGllLGJlLHYpLG5lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bmUuaW5uZXJIVE1MPWFlLG9lLmluc2VydEJlZm9yZShuZSxwZSk7dHJ5e2F3YWl0IGoucmVuZGVyZXIuZHJhdyhzLGksQWplLGopfWNhdGNoKENlKXt0aHJvdyBEanQuZHJhdyhzLGksQWplKSxDZX1jb25zdCBzZT1BLnNlbGVjdChgJHtffSBzdmdgKSxkZT0oamU9KFBlPWouZGIpLmdldEFjY1RpdGxlKT09bnVsbD92b2lkIDA6amUuY2FsbChQZSksWD0oU2U9KEllPWouZGIpLmdldEFjY0Rlc2NyaXB0aW9uKT09bnVsbD92b2lkIDA6U2UuY2FsbChJZSk7VHF0KGllLHNlLGRlLFgpLEEuc2VsZWN0KGBbaWQ9IiR7aX0iXWApLnNlbGVjdEFsbCgiZm9yZWlnbm9iamVjdCA+ICoiKS5hdHRyKCJ4bWxucyIsb3F0KTtsZXQgZ2U9QS5zZWxlY3QoXykubm9kZSgpLmlubmVySFRNTDtpZihYZS5kZWJ1ZygiY29uZmlnLmFycm93TWFya2VyQWJzb2x1dGUiLHAuYXJyb3dNYXJrZXJBYnNvbHV0ZSksZ2U9d3F0KGdlLFAsZjEocC5hcnJvd01hcmtlckFic29sdXRlKSksUCl7Y29uc3QgQ2U9QS5zZWxlY3QoXysiIHN2ZyIpLm5vZGUoKTtnZT15cXQoZ2UsQ2UpfWVsc2UgUnx8KGdlPWhELnNhbml0aXplKGdlLHtBRERfVEFHUzpncXQsQUREX0FUVFI6cHF0fSkpO2lmKGpqdCgpLEspdGhyb3cgSztjb25zdCB4ZT1JcihQP3k6Xykubm9kZSgpO3JldHVybiB4ZSYmInJlbW92ZSJpbiB4ZSYmeGUucmVtb3ZlKCkse3N2ZzpnZSxiaW5kRnVuY3Rpb25zOmouZGIuYmluZEZ1bmN0aW9uc319O2Z1bmN0aW9uIEVxdChpPXt9KXt2YXIgdTtpIT1udWxsJiZpLmZvbnRGYW1pbHkmJiEoKHU9aS50aGVtZVZhcmlhYmxlcykhPW51bGwmJnUuZm9udEZhbWlseSkmJihpLnRoZW1lVmFyaWFibGVzfHwoaS50aGVtZVZhcmlhYmxlcz17fSksaS50aGVtZVZhcmlhYmxlcy5mb250RmFtaWx5PWkuZm9udEZhbWlseSksSlJ0KGkpLGkhPW51bGwmJmkudGhlbWUmJmkudGhlbWUgaW4gRTc/aS50aGVtZVZhcmlhYmxlcz1FN1tpLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhpLnRoZW1lVmFyaWFibGVzKTppJiYoaS50aGVtZVZhcmlhYmxlcz1FNy5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKGkudGhlbWVWYXJpYWJsZXMpKTtjb25zdCBzPXR5cGVvZiBpPT0ib2JqZWN0Ij9RUnQoaSk6TWplKCk7ZnBlKHMubG9nTGV2ZWwpLEIyZSgpfWNvbnN0IEsyZT0oaSxzPXt9KT0+e2NvbnN0e2NvZGU6dX09QiRlKGkpO3JldHVybiBSanQodSxzKX07ZnVuY3Rpb24gVHF0KGkscyx1LGQpe3MkdChzLGkpLGEkdChzLHUsZCxzLmF0dHIoImlkIikpfWNvbnN0IFJDPU9iamVjdC5mcmVlemUoe3JlbmRlcjprcXQscGFyc2U6YnF0LGdldERpYWdyYW1Gcm9tVGV4dDpLMmUsaW5pdGlhbGl6ZTpFcXQsZ2V0Q29uZmlnOlZoLHNldENvbmZpZzpEamUsZ2V0U2l0ZUNvbmZpZzpNamUsdXBkYXRlU2l0ZUNvbmZpZzpaUnQscmVzZXQ6KCk9PntXWCgpfSxnbG9iYWxSZXNldDooKT0+e1dYKEVEKX0sZGVmYXVsdENvbmZpZzpFRH0pO2ZwZShWaCgpLmxvZ0xldmVsKSxXWChWaCgpKTtjb25zdCBDcXQ9YXN5bmMoKT0+e1hlLmRlYnVnKCJMb2FkaW5nIHJlZ2lzdGVyZWQgZGlhZ3JhbXMiKTtjb25zdCBzPShhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmVudHJpZXMoZEQpLm1hcChhc3luYyhbdSx7ZGV0ZWN0b3I6ZCxsb2FkZXI6cH1dKT0+e2lmKHApdHJ5e1AyZSh1KX1jYXRjaHt0cnl7Y29uc3R7ZGlhZ3JhbTpiLGlkOnl9PWF3YWl0IHAoKTtRWCh5LGIsZCl9Y2F0Y2goYil7dGhyb3cgWGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRpYWdyYW0gd2l0aCBrZXkgJHt1fS4gUmVtb3ZpbmcgZnJvbSBkZXRlY3RvcnMuYCksZGVsZXRlIGREW3VdLGJ9fX0pKSkuZmlsdGVyKHU9PnUuc3RhdHVzPT09InJlamVjdGVkIik7aWYocy5sZW5ndGg+MCl7WGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkICR7cy5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCk7Zm9yKGNvbnN0IHUgb2YgcylYZS5lcnJvcih1KTt0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkICR7cy5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCl9fSxTcXQ9KGkscyx1KT0+e1hlLndhcm4oaSksd2plKGkpPyh1JiZ1KGkuc3RyLGkuaGFzaCkscy5wdXNoKHsuLi5pLG1lc3NhZ2U6aS5zdHIsZXJyb3I6aX0pKToodSYmdShpKSxpIGluc3RhbmNlb2YgRXJyb3ImJnMucHVzaCh7c3RyOmkubWVzc2FnZSxtZXNzYWdlOmkubWVzc2FnZSxoYXNoOmkubmFtZSxlcnJvcjppfSkpfSx6JGU9YXN5bmMgZnVuY3Rpb24oaT17cXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifSl7dHJ5e2F3YWl0IF9xdChpKX1jYXRjaChzKXtpZih3amUocykmJlhlLmVycm9yKHMuc3RyKSx1bS5wYXJzZUVycm9yJiZ1bS5wYXJzZUVycm9yKHMpLCFpLnN1cHByZXNzRXJyb3JzKXRocm93IFhlLmVycm9yKCJVc2UgdGhlIHN1cHByZXNzRXJyb3JzIG9wdGlvbiB0byBzdXBwcmVzcyB0aGVzZSBlcnJvcnMiKSxzfX0sX3F0PWFzeW5jIGZ1bmN0aW9uKHtwb3N0UmVuZGVyQ2FsbGJhY2s6aSxxdWVyeVNlbGVjdG9yOnMsbm9kZXM6dX09e3F1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn0pe2NvbnN0IGQ9UkMuZ2V0Q29uZmlnKCk7WGUuZGVidWcoYCR7aT8iIjoiTm8gIn1DYWxsYmFjayBmdW5jdGlvbiBmb3VuZGApO2xldCBwO2lmKHUpcD11O2Vsc2UgaWYocylwPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIGFuZCBxdWVyeVNlbGVjdG9yIGFyZSBib3RoIHVuZGVmaW5lZCIpO1hlLmRlYnVnKGBGb3VuZCAke3AubGVuZ3RofSBkaWFncmFtc2ApLChkPT1udWxsP3ZvaWQgMDpkLnN0YXJ0T25Mb2FkKSE9PXZvaWQgMCYmKFhlLmRlYnVnKCJTdGFydCBPbiBMb2FkOiAiKyhkPT1udWxsP3ZvaWQgMDpkLnN0YXJ0T25Mb2FkKSksUkMudXBkYXRlU2l0ZUNvbmZpZyh7c3RhcnRPbkxvYWQ6ZD09bnVsbD92b2lkIDA6ZC5zdGFydE9uTG9hZH0pKTtjb25zdCB2PW5ldyBBby5Jbml0SURHZW5lcmF0b3IoZC5kZXRlcm1pbmlzdGljSWRzLGQuZGV0ZXJtaW5pc3RpY0lEU2VlZCk7bGV0IGI7Y29uc3QgeT1bXTtmb3IoY29uc3QgVCBvZiBBcnJheS5mcm9tKHApKXtYZS5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbTogIitULmlkKTsvKiEgQ2hlY2sgaWYgcHJldmlvdXNseSBwcm9jZXNzZWQgKi9pZihULmdldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiKSljb250aW51ZTtULnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCJ0cnVlIik7Y29uc3QgXz1gbWVybWFpZC0ke3YubmV4dCgpfWA7Yj1ULmlubmVySFRNTCxiPUpNKEFvLmVudGl0eURlY29kZShiKSkudHJpbSgpLnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIjxici8+Iik7Y29uc3QgQT1Bby5kZXRlY3RJbml0KGIpO0EmJlhlLmRlYnVnKCJEZXRlY3RlZCBlYXJseSByZWluaXQ6ICIsQSk7dHJ5e2NvbnN0e3N2ZzpQLGJpbmRGdW5jdGlvbnM6Un09YXdhaXQgVSRlKF8sYixUKTtULmlubmVySFRNTD1QLGkmJmF3YWl0IGkoXyksUiYmUihUKX1jYXRjaChQKXtTcXQoUCx5LHVtLnBhcnNlRXJyb3IpfX1pZih5Lmxlbmd0aD4wKXRocm93IHlbMF19LHEkZT1mdW5jdGlvbihpKXtSQy5pbml0aWFsaXplKGkpfSxBcXQ9YXN5bmMgZnVuY3Rpb24oaSxzLHUpe1hlLndhcm4oIm1lcm1haWQuaW5pdCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHJ1biBpbnN0ZWFkLiIpLGkmJnEkZShpKTtjb25zdCBkPXtwb3N0UmVuZGVyQ2FsbGJhY2s6dSxxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9O3R5cGVvZiBzPT0ic3RyaW5nIj9kLnF1ZXJ5U2VsZWN0b3I9czpzJiYocyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P2Qubm9kZXM9W3NdOmQubm9kZXM9cyksYXdhaXQgeiRlKGQpfSxMcXQ9YXN5bmMoaSx7bGF6eUxvYWQ6cz0hMH09e30pPT57TlJlKC4uLmkpLHM9PT0hMSYmYXdhaXQgQ3F0KCl9LEgkZT1mdW5jdGlvbigpe2lmKHVtLnN0YXJ0T25Mb2FkKXtjb25zdHtzdGFydE9uTG9hZDppfT1SQy5nZXRDb25maWcoKTtpJiZ1bS5ydW4oKS5jYXRjaChzPT5YZS5lcnJvcigiTWVybWFpZCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSIscykpfX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7LyohCiAqIFdhaXQgZm9yIGRvY3VtZW50IGxvYWRlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGV4ZWN1dGlvbgogKi93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsSCRlLCExKX1jb25zdCBNcXQ9ZnVuY3Rpb24oaSl7dW0ucGFyc2VFcnJvcj1pfSxuUT1bXTtsZXQgVzJlPSExO2NvbnN0IFYkZT1hc3luYygpPT57aWYoIVcyZSl7Zm9yKFcyZT0hMDtuUS5sZW5ndGg+MDspe2NvbnN0IGk9blEuc2hpZnQoKTtpZihpKXRyeXthd2FpdCBpKCl9Y2F0Y2gocyl7WGUuZXJyb3IoIkVycm9yIGV4ZWN1dGluZyBxdWV1ZSIscyl9fVcyZT0hMX19LERxdD1hc3luYyhpLHMpPT5uZXcgUHJvbWlzZSgodSxkKT0+e2NvbnN0IHA9KCk9Pm5ldyBQcm9taXNlKCh2LGIpPT57UkMucGFyc2UoaSxzKS50aGVuKHk9Pnt2KHkpLHUoeSl9LHk9Pnt2YXIgVDtYZS5lcnJvcigiRXJyb3IgcGFyc2luZyIseSksKFQ9dW0ucGFyc2VFcnJvcik9PW51bGx8fFQuY2FsbCh1bSx5KSxiKHkpLGQoeSl9KX0pO25RLnB1c2gocCksViRlKCkuY2F0Y2goZCl9KSxVJGU9KGkscyx1KT0+bmV3IFByb21pc2UoKGQscCk9Pntjb25zdCB2PSgpPT5uZXcgUHJvbWlzZSgoYix5KT0+e1JDLnJlbmRlcihpLHMsdSkudGhlbihUPT57YihUKSxkKFQpfSxUPT57dmFyIF87WGUuZXJyb3IoIkVycm9yIHBhcnNpbmciLFQpLChfPXVtLnBhcnNlRXJyb3IpPT1udWxsfHxfLmNhbGwodW0sVCkseShUKSxwKFQpfSl9KTtuUS5wdXNoKHYpLFYkZSgpLmNhdGNoKHApfSksdW09e3N0YXJ0T25Mb2FkOiEwLG1lcm1haWRBUEk6UkMscGFyc2U6RHF0LHJlbmRlcjpVJGUsaW5pdDpBcXQscnVuOnokZSxyZWdpc3RlckV4dGVybmFsRGlhZ3JhbXM6THF0LGluaXRpYWxpemU6cSRlLHBhcnNlRXJyb3I6dm9pZCAwLGNvbnRlbnRMb2FkZWQ6SCRlLHNldFBhcnNlRXJyb3JIYW5kbGVyOk1xdCxkZXRlY3RUeXBlOl9YfTtjbGFzcyBsbXtjb25zdHJ1Y3RvcihzLHUsZCl7dGhpcy5sZXhlcj12b2lkIDAsdGhpcy5zdGFydD12b2lkIDAsdGhpcy5lbmQ9dm9pZCAwLHRoaXMubGV4ZXI9cyx0aGlzLnN0YXJ0PXUsdGhpcy5lbmQ9ZH1zdGF0aWMgcmFuZ2Uocyx1KXtyZXR1cm4gdT8hc3x8IXMubG9jfHwhdS5sb2N8fHMubG9jLmxleGVyIT09dS5sb2MubGV4ZXI/bnVsbDpuZXcgbG0ocy5sb2MubGV4ZXIscy5sb2Muc3RhcnQsdS5sb2MuZW5kKTpzJiZzLmxvY319Y2xhc3MgVTR7Y29uc3RydWN0b3Iocyx1KXt0aGlzLnRleHQ9dm9pZCAwLHRoaXMubG9jPXZvaWQgMCx0aGlzLm5vZXhwYW5kPXZvaWQgMCx0aGlzLnRyZWF0QXNSZWxheD12b2lkIDAsdGhpcy50ZXh0PXMsdGhpcy5sb2M9dX1yYW5nZShzLHUpe3JldHVybiBuZXcgVTQodSxsbS5yYW5nZSh0aGlzLHMpKX19Y2xhc3MgQ2l7Y29uc3RydWN0b3Iocyx1KXt0aGlzLm5hbWU9dm9pZCAwLHRoaXMucG9zaXRpb249dm9pZCAwLHRoaXMubGVuZ3RoPXZvaWQgMCx0aGlzLnJhd01lc3NhZ2U9dm9pZCAwO3ZhciBkPSJLYVRlWCBwYXJzZSBlcnJvcjogIitzLHAsdixiPXUmJnUubG9jO2lmKGImJmIuc3RhcnQ8PWIuZW5kKXt2YXIgeT1iLmxleGVyLmlucHV0O3A9Yi5zdGFydCx2PWIuZW5kLHA9PT15Lmxlbmd0aD9kKz0iIGF0IGVuZCBvZiBpbnB1dDogIjpkKz0iIGF0IHBvc2l0aW9uICIrKHArMSkrIjogIjt2YXIgVD15LnNsaWNlKHAsdikucmVwbGFjZSgvW15dL2csIiQmzLIiKSxfO3A+MTU/Xz0i4oCmIit5LnNsaWNlKHAtMTUscCk6Xz15LnNsaWNlKDAscCk7dmFyIEE7disxNTx5Lmxlbmd0aD9BPXkuc2xpY2Uodix2KzE1KSsi4oCmIjpBPXkuc2xpY2UodiksZCs9XytUK0F9dmFyIFA9bmV3IEVycm9yKGQpO3JldHVybiBQLm5hbWU9IlBhcnNlRXJyb3IiLFAuX19wcm90b19fPUNpLnByb3RvdHlwZSxQLnBvc2l0aW9uPXAscCE9bnVsbCYmdiE9bnVsbCYmKFAubGVuZ3RoPXYtcCksUC5yYXdNZXNzYWdlPXMsUH19Q2kucHJvdG90eXBlLl9fcHJvdG9fXz1FcnJvci5wcm90b3R5cGU7dmFyIElxdD1mdW5jdGlvbihzLHUpe3JldHVybiBzLmluZGV4T2YodSkhPT0tMX0sT3F0PWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHM9PT12b2lkIDA/dTpzfSxOcXQ9LyhbQS1aXSkvZyxQcXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVwbGFjZShOcXQsIi0kMSIpLnRvTG93ZXJDYXNlKCl9LEJxdD17IiYiOiImYW1wOyIsIj4iOiImZ3Q7IiwiPCI6IiZsdDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjeDI3OyJ9LEZxdD0vWyY+PCInXS9nO2Z1bmN0aW9uIFJxdChpKXtyZXR1cm4gU3RyaW5nKGkpLnJlcGxhY2UoRnF0LHM9PkJxdFtzXSl9dmFyIEckZT1mdW5jdGlvbiBpKHMpe3JldHVybiBzLnR5cGU9PT0ib3JkZ3JvdXAifHxzLnR5cGU9PT0iY29sb3IiP3MuYm9keS5sZW5ndGg9PT0xP2kocy5ib2R5WzBdKTpzOnMudHlwZT09PSJmb250Ij9pKHMuYm9keSk6c30sanF0PWZ1bmN0aW9uKHMpe3ZhciB1PUckZShzKTtyZXR1cm4gdS50eXBlPT09Im1hdGhvcmQifHx1LnR5cGU9PT0idGV4dG9yZCJ8fHUudHlwZT09PSJhdG9tIn0sJHF0PWZ1bmN0aW9uKHMpe2lmKCFzKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9uLW51bGwsIGJ1dCBnb3QgIitTdHJpbmcocykpO3JldHVybiBzfSx6cXQ9ZnVuY3Rpb24ocyl7dmFyIHU9L15ccyooW15cXC8jXSo/KSg/Ojp8JiMwKjU4fCYjeDAqM2EpL2kuZXhlYyhzKTtyZXR1cm4gdSE9bnVsbD91WzFdOiJfcmVsYXRpdmUifSxZYT17Y29udGFpbnM6SXF0LGRlZmx0Ok9xdCxlc2NhcGU6UnF0LGh5cGhlbmF0ZTpQcXQsZ2V0QmFzZUVsZW06RyRlLGlzQ2hhcmFjdGVyQm94OmpxdCxwcm90b2NvbEZyb21Vcmw6enF0fSxyUT17ZGlzcGxheU1vZGU6e3R5cGU6ImJvb2xlYW4iLGRlc2NyaXB0aW9uOiJSZW5kZXIgbWF0aCBpbiBkaXNwbGF5IG1vZGUsIHdoaWNoIHB1dHMgdGhlIG1hdGggaW4gZGlzcGxheSBzdHlsZSAoc28gXFxpbnQgYW5kIFxcc3VtIGFyZSBsYXJnZSwgZm9yIGV4YW1wbGUpLCBhbmQgY2VudGVycyB0aGUgbWF0aCBvbiB0aGUgcGFnZSBvbiBpdHMgb3duIGxpbmUuIixjbGk6Ii1kLCAtLWRpc3BsYXktbW9kZSJ9LG91dHB1dDp7dHlwZTp7ZW51bTpbImh0bWxBbmRNYXRobWwiLCJodG1sIiwibWF0aG1sIl19LGRlc2NyaXB0aW9uOiJEZXRlcm1pbmVzIHRoZSBtYXJrdXAgbGFuZ3VhZ2Ugb2YgdGhlIG91dHB1dC4iLGNsaToiLUYsIC0tZm9ybWF0IDx0eXBlPiJ9LGxlcW5vOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIGRpc3BsYXkgbWF0aCBpbiBsZXFubyBzdHlsZSAobGVmdC1qdXN0aWZpZWQgdGFncykuIn0sZmxlcW46e3R5cGU6ImJvb2xlYW4iLGRlc2NyaXB0aW9uOiJSZW5kZXIgZGlzcGxheSBtYXRoIGZsdXNoIGxlZnQuIn0sdGhyb3dPbkVycm9yOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiEwLGNsaToiLXQsIC0tbm8tdGhyb3ctb24tZXJyb3IiLGNsaURlc2NyaXB0aW9uOiJSZW5kZXIgZXJyb3JzIChpbiB0aGUgY29sb3IgZ2l2ZW4gYnkgLS1lcnJvci1jb2xvcikgaW5zdGVhZCBvZiB0aHJvd2luZyBhIFBhcnNlRXJyb3IgZXhjZXB0aW9uIHdoZW4gZW5jb3VudGVyaW5nIGFuIGVycm9yLiJ9LGVycm9yQ29sb3I6e3R5cGU6InN0cmluZyIsZGVmYXVsdDoiI2NjMDAwMCIsY2xpOiItYywgLS1lcnJvci1jb2xvciA8Y29sb3I+IixjbGlEZXNjcmlwdGlvbjoiQSBjb2xvciBzdHJpbmcgZ2l2ZW4gaW4gdGhlIGZvcm1hdCAncmdiJyBvciAncnJnZ2JiJyAobm8gIykuIFRoaXMgb3B0aW9uIGRldGVybWluZXMgdGhlIGNvbG9yIG9mIGVycm9ycyByZW5kZXJlZCBieSB0aGUgLXQgb3B0aW9uLiIsY2xpUHJvY2Vzc29yOmk9PiIjIitpfSxtYWNyb3M6e3R5cGU6Im9iamVjdCIsY2xpOiItbSwgLS1tYWNybyA8ZGVmPiIsY2xpRGVzY3JpcHRpb246IkRlZmluZSBjdXN0b20gbWFjcm8gb2YgdGhlIGZvcm0gJ1xcZm9vOmV4cGFuc2lvbicgKHVzZSBtdWx0aXBsZSAtbSBhcmd1bWVudHMgZm9yIG11bHRpcGxlIG1hY3JvcykuIixjbGlEZWZhdWx0OltdLGNsaVByb2Nlc3NvcjooaSxzKT0+KHMucHVzaChpKSxzKX0sbWluUnVsZVRoaWNrbmVzczp7dHlwZToibnVtYmVyIixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIGEgbWluaW11bSB0aGlja25lc3MsIGluIGVtcywgZm9yIGZyYWN0aW9uIGxpbmVzLCBgXFxzcXJ0YCB0b3AgbGluZXMsIGB7YXJyYXl9YCB2ZXJ0aWNhbCBsaW5lcywgYFxcaGxpbmVgLCBgXFxoZGFzaGxpbmVgLCBgXFx1bmRlcmxpbmVgLCBgXFxvdmVybGluZWAsIGFuZCB0aGUgYm9yZGVycyBvZiBgXFxmYm94YCwgYFxcYm94ZWRgLCBhbmQgYFxcZmNvbG9yYm94YC4iLHByb2Nlc3NvcjppPT5NYXRoLm1heCgwLGkpLGNsaToiLS1taW4tcnVsZS10aGlja25lc3MgPHNpemU+IixjbGlQcm9jZXNzb3I6cGFyc2VGbG9hdH0sY29sb3JJc1RleHRDb2xvcjp7dHlwZToiYm9vbGVhbiIsZGVzY3JpcHRpb246Ik1ha2VzIFxcY29sb3IgYmVoYXZlIGxpa2UgTGFUZVgncyAyLWFyZ3VtZW50IFxcdGV4dGNvbG9yLCBpbnN0ZWFkIG9mIExhVGVYJ3Mgb25lLWFyZ3VtZW50IFxcY29sb3IgbW9kZSBjaGFuZ2UuIixjbGk6Ii1iLCAtLWNvbG9yLWlzLXRleHQtY29sb3IifSxzdHJpY3Q6e3R5cGU6W3tlbnVtOlsid2FybiIsImlnbm9yZSIsImVycm9yIl19LCJib29sZWFuIiwiZnVuY3Rpb24iXSxkZXNjcmlwdGlvbjoiVHVybiBvbiBzdHJpY3QgLyBMYVRlWCBmYWl0aGZ1bG5lc3MgbW9kZSwgd2hpY2ggdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBpbnB1dCB1c2VzIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgTGFUZVguIixjbGk6Ii1TLCAtLXN0cmljdCIsY2xpRGVmYXVsdDohMX0sdHJ1c3Q6e3R5cGU6WyJib29sZWFuIiwiZnVuY3Rpb24iXSxkZXNjcmlwdGlvbjoiVHJ1c3QgdGhlIGlucHV0LCBlbmFibGluZyBhbGwgSFRNTCBmZWF0dXJlcyBzdWNoIGFzIFxcdXJsLiIsY2xpOiItVCwgLS10cnVzdCJ9LG1heFNpemU6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLzAsZGVzY3JpcHRpb246IklmIG5vbi16ZXJvLCBhbGwgdXNlci1zcGVjaWZpZWQgc2l6ZXMsIGUuZy4gaW4gXFxydWxlezUwMGVtfXs1MDBlbX0sIHdpbGwgYmUgY2FwcGVkIHRvIG1heFNpemUgZW1zLiBPdGhlcndpc2UsIGVsZW1lbnRzIGFuZCBzcGFjZXMgY2FuIGJlIGFyYml0cmFyaWx5IGxhcmdlIixwcm9jZXNzb3I6aT0+TWF0aC5tYXgoMCxpKSxjbGk6Ii1zLCAtLW1heC1zaXplIDxuPiIsY2xpUHJvY2Vzc29yOnBhcnNlSW50fSxtYXhFeHBhbmQ6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxZTMsZGVzY3JpcHRpb246IkxpbWl0IHRoZSBudW1iZXIgb2YgbWFjcm8gZXhwYW5zaW9ucyB0byB0aGUgc3BlY2lmaWVkIG51bWJlciwgdG8gcHJldmVudCBlLmcuIGluZmluaXRlIG1hY3JvIGxvb3BzLiBJZiBzZXQgdG8gSW5maW5pdHksIHRoZSBtYWNybyBleHBhbmRlciB3aWxsIHRyeSB0byBmdWxseSBleHBhbmQgYXMgaW4gTGFUZVguIixwcm9jZXNzb3I6aT0+TWF0aC5tYXgoMCxpKSxjbGk6Ii1lLCAtLW1heC1leHBhbmQgPG4+IixjbGlQcm9jZXNzb3I6aT0+aT09PSJJbmZpbml0eSI/MS8wOnBhcnNlSW50KGkpfSxnbG9iYWxHcm91cDp7dHlwZToiYm9vbGVhbiIsY2xpOiExfX07ZnVuY3Rpb24gcXF0KGkpe2lmKGkuZGVmYXVsdClyZXR1cm4gaS5kZWZhdWx0O3ZhciBzPWkudHlwZSx1PUFycmF5LmlzQXJyYXkocyk/c1swXTpzO2lmKHR5cGVvZiB1IT0ic3RyaW5nIilyZXR1cm4gdS5lbnVtWzBdO3N3aXRjaCh1KXtjYXNlImJvb2xlYW4iOnJldHVybiExO2Nhc2Uic3RyaW5nIjpyZXR1cm4iIjtjYXNlIm51bWJlciI6cmV0dXJuIDA7Y2FzZSJvYmplY3QiOnJldHVybnt9fX1jbGFzcyBZMmV7Y29uc3RydWN0b3Iocyl7dGhpcy5kaXNwbGF5TW9kZT12b2lkIDAsdGhpcy5vdXRwdXQ9dm9pZCAwLHRoaXMubGVxbm89dm9pZCAwLHRoaXMuZmxlcW49dm9pZCAwLHRoaXMudGhyb3dPbkVycm9yPXZvaWQgMCx0aGlzLmVycm9yQ29sb3I9dm9pZCAwLHRoaXMubWFjcm9zPXZvaWQgMCx0aGlzLm1pblJ1bGVUaGlja25lc3M9dm9pZCAwLHRoaXMuY29sb3JJc1RleHRDb2xvcj12b2lkIDAsdGhpcy5zdHJpY3Q9dm9pZCAwLHRoaXMudHJ1c3Q9dm9pZCAwLHRoaXMubWF4U2l6ZT12b2lkIDAsdGhpcy5tYXhFeHBhbmQ9dm9pZCAwLHRoaXMuZ2xvYmFsR3JvdXA9dm9pZCAwLHM9c3x8e307Zm9yKHZhciB1IGluIHJRKWlmKHJRLmhhc093blByb3BlcnR5KHUpKXt2YXIgZD1yUVt1XTt0aGlzW3VdPXNbdV0hPT12b2lkIDA/ZC5wcm9jZXNzb3I/ZC5wcm9jZXNzb3Ioc1t1XSk6c1t1XTpxcXQoZCl9fXJlcG9ydE5vbnN0cmljdChzLHUsZCl7dmFyIHA9dGhpcy5zdHJpY3Q7aWYodHlwZW9mIHA9PSJmdW5jdGlvbiImJihwPXAocyx1LGQpKSwhKCFwfHxwPT09Imlnbm9yZSIpKXtpZihwPT09ITB8fHA9PT0iZXJyb3IiKXRocm93IG5ldyBDaSgiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ2Vycm9yJzogIisodSsiIFsiK3MrIl0iKSxkKTtwPT09Indhcm4iP3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAnd2Fybic6ICIrKHUrIiBbIitzKyJdIikpOnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAiKygidW5yZWNvZ25pemVkICciK3ArIic6ICIrdSsiIFsiK3MrIl0iKSl9fXVzZVN0cmljdEJlaGF2aW9yKHMsdSxkKXt2YXIgcD10aGlzLnN0cmljdDtpZih0eXBlb2YgcD09ImZ1bmN0aW9uIil0cnl7cD1wKHMsdSxkKX1jYXRjaHtwPSJlcnJvciJ9cmV0dXJuIXB8fHA9PT0iaWdub3JlIj8hMTpwPT09ITB8fHA9PT0iZXJyb3IiPyEwOnA9PT0id2FybiI/KHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAnd2Fybic6ICIrKHUrIiBbIitzKyJdIikpLCExKToodHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICIrKCJ1bnJlY29nbml6ZWQgJyIrcCsiJzogIit1KyIgWyIrcysiXSIpKSwhMSl9aXNUcnVzdGVkKHMpe3MudXJsJiYhcy5wcm90b2NvbCYmKHMucHJvdG9jb2w9WWEucHJvdG9jb2xGcm9tVXJsKHMudXJsKSk7dmFyIHU9dHlwZW9mIHRoaXMudHJ1c3Q9PSJmdW5jdGlvbiI/dGhpcy50cnVzdChzKTp0aGlzLnRydXN0O3JldHVybiEhdX19Y2xhc3MgRTl7Y29uc3RydWN0b3Iocyx1LGQpe3RoaXMuaWQ9dm9pZCAwLHRoaXMuc2l6ZT12b2lkIDAsdGhpcy5jcmFtcGVkPXZvaWQgMCx0aGlzLmlkPXMsdGhpcy5zaXplPXUsdGhpcy5jcmFtcGVkPWR9c3VwKCl7cmV0dXJuIEc0W0hxdFt0aGlzLmlkXV19c3ViKCl7cmV0dXJuIEc0W1ZxdFt0aGlzLmlkXV19ZnJhY051bSgpe3JldHVybiBHNFtVcXRbdGhpcy5pZF1dfWZyYWNEZW4oKXtyZXR1cm4gRzRbR3F0W3RoaXMuaWRdXX1jcmFtcCgpe3JldHVybiBHNFtLcXRbdGhpcy5pZF1dfXRleHQoKXtyZXR1cm4gRzRbV3F0W3RoaXMuaWRdXX1pc1RpZ2h0KCl7cmV0dXJuIHRoaXMuc2l6ZT49Mn19dmFyIFgyZT0wLGlRPTEsREQ9MixMNz0zLGFSPTQsUHY9NSxJRD02LE1wPTcsRzQ9W25ldyBFOShYMmUsMCwhMSksbmV3IEU5KGlRLDAsITApLG5ldyBFOShERCwxLCExKSxuZXcgRTkoTDcsMSwhMCksbmV3IEU5KGFSLDIsITEpLG5ldyBFOShQdiwyLCEwKSxuZXcgRTkoSUQsMywhMSksbmV3IEU5KE1wLDMsITApXSxIcXQ9W2FSLFB2LGFSLFB2LElELE1wLElELE1wXSxWcXQ9W1B2LFB2LFB2LFB2LE1wLE1wLE1wLE1wXSxVcXQ9W0RELEw3LGFSLFB2LElELE1wLElELE1wXSxHcXQ9W0w3LEw3LFB2LFB2LE1wLE1wLE1wLE1wXSxLcXQ9W2lRLGlRLEw3LEw3LFB2LFB2LE1wLE1wXSxXcXQ9W1gyZSxpUSxERCxMNyxERCxMNyxERCxMN10sVGE9e0RJU1BMQVk6RzRbWDJlXSxURVhUOkc0W0REXSxTQ1JJUFQ6RzRbYVJdLFNDUklQVFNDUklQVDpHNFtJRF19LFEyZT1be25hbWU6ImxhdGluIixibG9ja3M6W1syNTYsNTkxXSxbNzY4LDg3OV1dfSx7bmFtZToiY3lyaWxsaWMiLGJsb2NrczpbWzEwMjQsMTI3OV1dfSx7bmFtZToiYXJtZW5pYW4iLGJsb2NrczpbWzEzMjgsMTQyM11dfSx7bmFtZToiYnJhaG1pYyIsYmxvY2tzOltbMjMwNCw0MjU1XV19LHtuYW1lOiJnZW9yZ2lhbiIsYmxvY2tzOltbNDI1Niw0MzUxXV19LHtuYW1lOiJjamsiLGJsb2NrczpbWzEyMjg4LDEyNTQzXSxbMTk5NjgsNDA4NzldLFs2NTI4MCw2NTM3Nl1dfSx7bmFtZToiaGFuZ3VsIixibG9ja3M6W1s0NDAzMiw1NTIxNV1dfV07ZnVuY3Rpb24gWXF0KGkpe2Zvcih2YXIgcz0wO3M8UTJlLmxlbmd0aDtzKyspZm9yKHZhciB1PVEyZVtzXSxkPTA7ZDx1LmJsb2Nrcy5sZW5ndGg7ZCsrKXt2YXIgcD11LmJsb2Nrc1tkXTtpZihpPj1wWzBdJiZpPD1wWzFdKXJldHVybiB1Lm5hbWV9cmV0dXJuIG51bGx9dmFyIHNRPVtdO1EyZS5mb3JFYWNoKGk9PmkuYmxvY2tzLmZvckVhY2gocz0+c1EucHVzaCguLi5zKSkpO2Z1bmN0aW9uIEskZShpKXtmb3IodmFyIHM9MDtzPHNRLmxlbmd0aDtzKz0yKWlmKGk+PXNRW3NdJiZpPD1zUVtzKzFdKXJldHVybiEwO3JldHVybiExfXZhciBPRD04MCxYcXQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4iTTk1LCIrKDYyMitzK3UpK2AKYy0yLjcsMCwtNy4xNywtMi43LC0xMy41LC04Yy01LjgsLTUuMywtOS41LC0xMCwtOS41LC0xNApjMCwtMiwwLjMsLTMuMywxLC00YzEuMywtMi43LDIzLjgzLC0yMC43LDY3LjUsLTU0CmM0NC4yLC0zMy4zLDY1LjgsLTUwLjMsNjYuNSwtNTFjMS4zLC0xLjMsMywtMiw1LC0yYzQuNywwLDguNywzLjMsMTIsMTAKczE3MywzNzgsMTczLDM3OGMwLjcsMCwzNS4zLC03MSwxMDQsLTIxM2M2OC43LC0xNDIsMTM3LjUsLTI4NSwyMDYuNSwtNDI5CmM2OSwtMTQ0LDEwNC41LC0yMTcuNywxMDYuNSwtMjIxCmxgK3MvMi4wNzUrIiAtIitzK2AKYzUuMywtOS4zLDEyLC0xNCwyMCwtMTQKSDQwMDAwMHZgKyg0MCtzKStgSDg0NS4yNzI0CnMtMjI1LjI3Miw0NjcsLTIyNS4yNzIsNDY3cy0yMzUsNDg2LC0yMzUsNDg2Yy0yLjcsNC43LC05LDcsLTE5LDcKYy02LDAsLTEwLC0xLC0xMiwtM3MtMTk0LC00MjIsLTE5NCwtNDIycy02NSw0NywtNjUsNDd6Ck1gKyg4MzQrcykrIiAiK3UrImg0MDAwMDB2IisoNDArcykrImgtNDAwMDAweiJ9LFFxdD1mdW5jdGlvbihzLHUpe3JldHVybiJNMjYzLCIrKDYwMStzK3UpK2BjMC43LDAsMTgsMzkuNyw1MiwxMTkKYzM0LDc5LjMsNjguMTY3LDE1OC43LDEwMi41LDIzOGMzNC4zLDc5LjMsNTEuOCwxMTkuMyw1Mi41LDEyMApjMzQwLC03MDQuNyw1MTAuNywtMTA2MC4zLDUxMiwtMTA2NwpsYCtzLzIuMDg0KyIgLSIrcytgCmM0LjcsLTcuMywxMSwtMTEsMTksLTExCkg0MDAwMHZgKyg0MCtzKStgSDEwMTIuMwpzLTI3MS4zLDU2NywtMjcxLjMsNTY3Yy0zOC43LDgwLjcsLTg0LDE3NSwtMTM2LDI4M2MtNTIsMTA4LC04OS4xNjcsMTg1LjMsLTExMS41LDIzMgpjLTIyLjMsNDYuNywtMzMuOCw3MC4zLC0zNC41LDcxYy00LjcsNC43LC0xMi4zLDcsLTIzLDdzLTEyLC0xLC0xMiwtMQpzLTEwOSwtMjUzLC0xMDksLTI1M2MtNzIuNywtMTY4LC0xMDkuMywtMjUyLC0xMTAsLTI1MmMtMTAuNyw4LC0yMiwxNi43LC0zNCwyNgpjLTIyLDE3LjMsLTMzLjMsMjYsLTM0LDI2cy0yNiwtMjYsLTI2LC0yNnM3NiwtNTksNzYsLTU5czc2LC02MCw3NiwtNjB6Ck1gKygxMDAxK3MpKyIgIit1KyJoNDAwMDAwdiIrKDQwK3MpKyJoLTQwMDAwMHoifSxKcXQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4iTTk4MyAiKygxMCtzK3UpK2AKbGArcy8zLjEzKyIgLSIrcytgCmM0LC02LjcsMTAsLTEwLDE4LC0xMCBINDAwMDAwdmArKDQwK3MpK2AKSDEwMTMuMXMtODMuNCwyNjgsLTI2NC4xLDg0MGMtMTgwLjcsNTcyLC0yNzcsODc2LjMsLTI4OSw5MTNjLTQuNyw0LjcsLTEyLjcsNywtMjQsNwpzLTEyLDAsLTEyLDBjLTEuMywtMy4zLC0zLjcsLTExLjcsLTcsLTI1Yy0zNS4zLC0xMjUuMywtMTA2LjcsLTM3My4zLC0yMTQsLTc0NApjLTEwLDEyLC0yMSwyNSwtMzMsMzlzLTMyLDM5LC0zMiwzOWMtNiwtNS4zLC0xNSwtMTQsLTI3LC0yNnMyNSwtMzAsMjUsLTMwCmMyNi43LC0zMi43LDUyLC02Myw3NiwtOTFzNTIsLTYwLDUyLC02MHMyMDgsNzIyLDIwOCw3MjIKYzU2LC0xNzUuMywxMjYuMywtMzk3LjMsMjExLC02NjZjODQuNywtMjY4LjcsMTUzLjgsLTQ4OC4yLDIwNy41LC02NTguNQpjNTMuNywtMTcwLjMsODQuNSwtMjY2LjgsOTIuNSwtMjg5LjV6Ck1gKygxMDAxK3MpKyIgIit1KyJoNDAwMDAwdiIrKDQwK3MpKyJoLTQwMDAwMHoifSxacXQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4iTTQyNCwiKygyMzk4K3MrdSkrYApjLTEuMywtMC43LC0zOC41LC0xNzIsLTExMS41LC01MTRjLTczLC0zNDIsLTEwOS44LC01MTMuMywtMTEwLjUsLTUxNApjMCwtMiwtMTAuNywxNC4zLC0zMiw0OWMtNC43LDcuMywtOS44LDE1LjcsLTE1LjUsMjVjLTUuNyw5LjMsLTkuOCwxNiwtMTIuNSwyMApzLTUsNywtNSw3Yy00LC0zLjMsLTguMywtNy43LC0xMywtMTNzLTEzLC0xMywtMTMsLTEzczc2LC0xMjIsNzYsLTEyMnM3NywtMTIxLDc3LC0xMjEKczIwOSw5NjgsMjA5LDk2OGMwLC0yLDg0LjcsLTM2MS43LDI1NCwtMTA3OWMxNjkuMywtNzE3LjMsMjU0LjcsLTEwNzcuNywyNTYsLTEwODEKbGArcy80LjIyMysiIC0iK3MrYGM0LC02LjcsMTAsLTEwLDE4LC0xMCBINDAwMDAwCnZgKyg0MCtzKStgSDEwMTQuNgpzLTg3LjMsMzc4LjcsLTI3Mi42LDExNjZjLTE4NS4zLDc4Ny4zLC0yNzkuMywxMTgyLjMsLTI4MiwxMTg1CmMtMiw2LC0xMCw5LC0yNCw5CmMtOCwwLC0xMiwtMC43LC0xMiwtMnogTWArKDEwMDErcykrIiAiK3UrYApoNDAwMDAwdmArKDQwK3MpKyJoLTQwMDAwMHoifSxlSHQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4iTTQ3MywiKygyNzEzK3MrdSkrYApjMzM5LjMsLTE3OTkuMyw1MDkuMywtMjcwMCw1MTAsLTI3MDIgbGArcy81LjI5OCsiIC0iK3MrYApjMy4zLC03LjMsOS4zLC0xMSwxOCwtMTEgSDQwMDAwMHZgKyg0MCtzKStgSDEwMTcuNwpzLTkwLjUsNDc4LC0yNzYuMiwxNDY2Yy0xODUuNyw5ODgsLTI3OS41LDE0ODMsLTI4MS41LDE0ODVjLTIsNiwtMTAsOSwtMjQsOQpjLTgsMCwtMTIsLTAuNywtMTIsLTJjMCwtMS4zLC01LjMsLTMyLC0xNiwtOTJjLTUwLjcsLTI5My4zLC0xMTkuNywtNjkzLjMsLTIwNywtMTIwMApjMCwtMS4zLC01LjMsOC43LC0xNiwzMGMtMTAuNywyMS4zLC0yMS4zLDQyLjcsLTMyLDY0cy0xNiwzMywtMTYsMzNzLTI2LC0yNiwtMjYsLTI2CnM3NiwtMTUzLDc2LC0xNTNzNzcsLTE1MSw3NywtMTUxYzAuNywwLjcsMzUuNywyMDIsMTA1LDYwNGM2Ny4zLDQwMC43LDEwMiw2MDIuNywxMDQsCjYwNnpNYCsoMTAwMStzKSsiICIrdSsiaDQwMDAwMHYiKyg0MCtzKSsiSDEwMTcuN3oifSx0SHQ9ZnVuY3Rpb24ocyl7dmFyIHU9cy8yO3JldHVybiJNNDAwMDAwICIrcysiIEgwIEwiK3UrIiAwIGw2NSA0NSBMMTQ1ICIrKHMtODApKyIgSDQwMDAwMHoifSxuSHQ9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwPWQtNTQtdS1zO3JldHVybiJNNzAyICIrKHMrdSkrIkg0MDAwMDAiKyg0MCtzKStgCkg3NDJ2YCtwK2BsLTQgNC00IDRjLS42NjcuNyAtMiAxLjUtNCAyLjVzLTQuMTY3IDEuODMzLTYuNSAyLjUtNS41IDEtOS41IDEKaC0xMmwtMjgtODRjLTE2LjY2Ny01Mi05Ni42NjcgLTI5NC4zMzMtMjQwLTcyN2wtMjEyIC02NDMgLTg1IDE3MApjLTQtMy4zMzMtOC4zMzMtNy42NjctMTMgLTEzbC0xMy0xM2w3Ny0xNTUgNzctMTU2YzY2IDE5OS4zMzMgMTM5IDQxOS42NjcKMjE5IDY2MSBsMjE4IDY2MXpNNzAyIGArdSsiSDQwMDAwMHYiKyg0MCtzKSsiSDc0MnoifSxySHQ9ZnVuY3Rpb24ocyx1LGQpe3U9MWUzKnU7dmFyIHA9IiI7c3dpdGNoKHMpe2Nhc2Uic3FydE1haW4iOnA9WHF0KHUsT0QpO2JyZWFrO2Nhc2Uic3FydFNpemUxIjpwPVFxdCh1LE9EKTticmVhaztjYXNlInNxcnRTaXplMiI6cD1KcXQodSxPRCk7YnJlYWs7Y2FzZSJzcXJ0U2l6ZTMiOnA9WnF0KHUsT0QpO2JyZWFrO2Nhc2Uic3FydFNpemU0IjpwPWVIdCh1LE9EKTticmVhaztjYXNlInNxcnRUYWxsIjpwPW5IdCh1LE9ELGQpfXJldHVybiBwfSxpSHQ9ZnVuY3Rpb24ocyx1KXtzd2l0Y2gocyl7Y2FzZSLijpwiOnJldHVybiJNMjkxIDAgSDQxNyBWIit1KyIgSDI5MXogTTI5MSAwIEg0MTcgViIrdSsiIEgyOTF6IjtjYXNlIuKIoyI6cmV0dXJuIk0xNDUgMCBIMTg4IFYiK3UrIiBIMTQ1eiBNMTQ1IDAgSDE4OCBWIit1KyIgSDE0NXoiO2Nhc2Ui4oilIjpyZXR1cm4iTTE0NSAwIEgxODggViIrdSsiIEgxNDV6IE0xNDUgMCBIMTg4IFYiK3UrIiBIMTQ1eiIrKCJNMzY3IDAgSDQxMCBWIit1KyIgSDM2N3ogTTM2NyAwIEg0MTAgViIrdSsiIEgzNjd6Iik7Y2FzZSLijp8iOnJldHVybiJNNDU3IDAgSDU4MyBWIit1KyIgSDQ1N3ogTTQ1NyAwIEg1ODMgViIrdSsiIEg0NTd6IjtjYXNlIuKOoiI6cmV0dXJuIk0zMTkgMCBINDAzIFYiK3UrIiBIMzE5eiBNMzE5IDAgSDQwMyBWIit1KyIgSDMxOXoiO2Nhc2Ui4o6lIjpyZXR1cm4iTTI2MyAwIEgzNDcgViIrdSsiIEgyNjN6IE0yNjMgMCBIMzQ3IFYiK3UrIiBIMjYzeiI7Y2FzZSLijqoiOnJldHVybiJNMzg0IDAgSDUwNCBWIit1KyIgSDM4NHogTTM4NCAwIEg1MDQgViIrdSsiIEgzODR6IjtjYXNlIuKPkCI6cmV0dXJuIk0zMTIgMCBIMzU1IFYiK3UrIiBIMzEyeiBNMzEyIDAgSDM1NSBWIit1KyIgSDMxMnoiO2Nhc2Ui4oCWIjpyZXR1cm4iTTI1NyAwIEgzMDAgViIrdSsiIEgyNTd6IE0yNTcgMCBIMzAwIFYiK3UrIiBIMjU3eiIrKCJNNDc4IDAgSDUyMSBWIit1KyIgSDQ3OHogTTQ3OCAwIEg1MjEgViIrdSsiIEg0Nzh6Iik7ZGVmYXVsdDpyZXR1cm4iIn19LFckZT17ZG91YmxlbGVmdGFycm93OmBNMjYyIDE1NwpsMTAtMTBjMzQtMzYgNjIuNy03NyA4Ni0xMjMgMy4zLTggNS0xMy4zIDUtMTYgMC01LjMtNi43LTgtMjAtOC03LjMKIDAtMTIuMi41LTE0LjUgMS41LTIuMyAxLTQuOCA0LjUtNy41IDEwLjUtNDkuMyA5Ny4zLTEyMS43IDE2OS4zLTIxNyAyMTYtMjgKIDE0LTU3LjMgMjUtODggMzMtNi43IDItMTEgMy44LTEzIDUuNS0yIDEuNy0zIDQuMi0zIDcuNXMxIDUuOCAzIDcuNQpjMiAxLjcgNi4zIDMuNSAxMyA1LjUgNjggMTcuMyAxMjguMiA0Ny44IDE4MC41IDkxLjUgNTIuMyA0My43IDkzLjggOTYuMiAxMjQuNQogMTU3LjUgOS4zIDggMTUuMyAxMi4zIDE4IDEzaDZjMTItLjcgMTgtNCAxOC0xMCAwLTItMS43LTctNS0xNS0yMy4zLTQ2LTUyLTg3Ci04Ni0xMjNsLTEwLTEwaDM5OTczOHYtNDBIMjE4YzMyOCAwIDAgMCAwIDBsLTEwLThjLTI2LjctMjAtNjUuNy00My0xMTctNjkgMi43Ci0yIDYtMy43IDEwLTUgMzYuNy0xNiA3Mi4zLTM3LjMgMTA3LTY0bDEwLThoMzk5Nzgydi00MHoKbTggMHY0MGgzOTk3MzB2LTQwem0wIDE5NHY0MGgzOTk3MzB2LTQwemAsZG91YmxlcmlnaHRhcnJvdzpgTTM5OTczOCAzOTJsCi0xMCAxMGMtMzQgMzYtNjIuNyA3Ny04NiAxMjMtMy4zIDgtNSAxMy4zLTUgMTYgMCA1LjMgNi43IDggMjAgOCA3LjMgMCAxMi4yLS41CiAxNC41LTEuNSAyLjMtMSA0LjgtNC41IDcuNS0xMC41IDQ5LjMtOTcuMyAxMjEuNy0xNjkuMyAyMTctMjE2IDI4LTE0IDU3LjMtMjUgODgKLTMzIDYuNy0yIDExLTMuOCAxMy01LjUgMi0xLjcgMy00LjIgMy03LjVzLTEtNS44LTMtNy41Yy0yLTEuNy02LjMtMy41LTEzLTUuNS02OAotMTcuMy0xMjguMi00Ny44LTE4MC41LTkxLjUtNTIuMy00My43LTkzLjgtOTYuMi0xMjQuNS0xNTcuNS05LjMtOC0xNS4zLTEyLjMtMTgKLTEzaC02Yy0xMiAuNy0xOCA0LTE4IDEwIDAgMiAxLjcgNyA1IDE1IDIzLjMgNDYgNTIgODcgODYgMTIzbDEwIDEwSDB2NDBoMzk5NzgyCmMtMzI4IDAgMCAwIDAgMGwxMCA4YzI2LjcgMjAgNjUuNyA0MyAxMTcgNjktMi43IDItNiAzLjctMTAgNS0zNi43IDE2LTcyLjMgMzcuMwotMTA3IDY0bC0xMCA4SDB2NDB6TTAgMTU3djQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6YCxsZWZ0YXJyb3c6YE00MDAwMDAgMjQxSDExMGwzLTNjNjguNy01Mi43IDExMy43LTEyMAogMTM1LTIwMiA0LTE0LjcgNi0yMyA2LTI1IDAtNy4zLTctMTEtMjEtMTEtOCAwLTEzLjIuOC0xNS41IDIuNS0yLjMgMS43LTQuMiA1LjgKLTUuNSAxMi41LTEuMyA0LjctMi43IDEwLjMtNCAxNy0xMiA0OC43LTM0LjggOTItNjguNSAxMzBTNjUuMyAyMjguMyAxOCAyNDcKYy0xMCA0LTE2IDcuNy0xOCAxMSAwIDguNyA2IDE0LjMgMTggMTcgNDcuMyAxOC43IDg3LjggNDcgMTIxLjUgODVTMTk2IDQ0MS4zIDIwOAogNDkwYy43IDIgMS4zIDUgMiA5czEuMiA2LjcgMS41IDhjLjMgMS4zIDEgMy4zIDIgNnMyLjIgNC41IDMuNSA1LjVjMS4zIDEgMy4zCiAxLjggNiAyLjVzNiAxIDEwIDFjMTQgMCAyMS0zLjcgMjEtMTEgMC0yLTItMTAuMy02LTI1LTIwLTc5LjMtNjUtMTQ2LjctMTM1LTIwMgogbC0zLTNoMzk5ODkwek0xMDAgMjQxdjQwaDM5OTkwMHYtNDB6YCxsZWZ0YnJhY2U6YE02IDU0OGwtNi02di0zNWw2LTExYzU2LTEwNCAxMzUuMy0xODEuMyAyMzgtMjMyIDU3LjMtMjguNyAxMTcKLTQ1IDE3OS01MGgzOTk1Nzd2MTIwSDQwM2MtNDMuMyA3LTgxIDE1LTExMyAyNi0xMDAuNyAzMy0xNzkuNyA5MS0yMzcgMTc0LTIuNwogNS02IDktMTAgMTMtLjcgMS03LjMgMS0yMCAxSDZ6YCxsZWZ0YnJhY2V1bmRlcjpgTTAgNmw2LTZoMTdjMTIuNjg4IDAgMTkuMzEzLjMgMjAgMSA0IDQgNy4zMTMgOC4zIDEwIDEzCiAzNS4zMTMgNTEuMyA4MC44MTMgOTMuOCAxMzYuNSAxMjcuNSA1NS42ODggMzMuNyAxMTcuMTg4IDU1LjggMTg0LjUgNjYuNS42ODgKIDAgMiAuMyA0IDEgMTguNjg4IDIuNyA3NiA0LjMgMTcyIDVoMzk5NDUwdjEyMEg0MjlsLTYtMWMtMTI0LjY4OC04LTIzNS02MS43Ci0zMzEtMTYxQzYwLjY4NyAxMzguNyAzMi4zMTIgOTkuMyA3IDU0TDAgNDFWNnpgLGxlZnRncm91cDpgTTQwMDAwMCA4MApINDM1QzY0IDgwIDE2OC4zIDIyOS40IDIxIDI2MGMtNS45IDEuMi0xOCAwLTE4IDAtMiAwLTMtMS0zLTN2LTM4Qzc2IDYxIDI1NyAwCiA0MzUgMGgzOTk1NjV6YCxsZWZ0Z3JvdXB1bmRlcjpgTTQwMDAwMCAyNjIKSDQzNUM2NCAyNjIgMTY4LjMgMTEyLjYgMjEgODJjLTUuOS0xLjItMTggMC0xOCAwLTIgMC0zIDEtMyAzdjM4Yzc2IDE1OCAyNTcgMjE5CiA0MzUgMjE5aDM5OTU2NXpgLGxlZnRoYXJwb29uOmBNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuMwotMy4zIDEwLjItOS41IDIwLjUtMTguNXMxNy44LTE1LjggMjIuNS0yMC41YzUwLjctNTIgODgtMTEwLjMgMTEyLTE3NSA0LTExLjMgNQotMTguMyAzLTIxLTEuMy00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNwotMTk2IDIyOC02LjcgNC43LTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpgLGxlZnRoYXJwb29ucGx1czpgTTAgMjY3Yy43IDUuMyAzIDEwIDcgMTRoMzk5OTkzdi00MEg5M2MzLjMtMy4zIDEwLjItOS41CiAyMC41LTE4LjVzMTcuOC0xNS44IDIyLjUtMjAuNWM1MC43LTUyIDg4LTExMC4zIDExMi0xNzUgNC0xMS4zIDUtMTguMyAzLTIxLTEuMwotNC03LjMtNi0xOC02LTggMC0xMyAuNy0xNSAycy00LjcgNi43LTggMTZjLTQyIDk4LjctMTA3LjMgMTc0LjctMTk2IDIyOC02LjcgNC43Ci0xMC43IDgtMTIgMTAtMS4zIDItMiA1LjctMiAxMXptMTAwLTI2djQwaDM5OTkwMHYtNDB6TTAgNDM1djQwaDQwMDAwMHYtNDB6Cm0wIDB2NDBoNDAwMDAwdi00MHpgLGxlZnRoYXJwb29uZG93bjpgTTcgMjQxYy00IDQtNi4zMzMgOC42NjctNyAxNCAwIDUuMzMzLjY2NyA5IDIgMTFzNS4zMzMKIDUuMzMzIDEyIDEwYzkwLjY2NyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zMzMgMTAuNjY3IDYuMzMzIDE2LjMzMyA5IDE3IDIgLjY2NyA1CiAxIDkgMWg1YzEwLjY2NyAwIDE2LjY2Ny0yIDE4LTYgMi0yLjY2NyAxLTkuNjY3LTMtMjEtMzItODcuMzMzLTgyLjY2Ny0xNTcuNjY3Ci0xNTItMjExbC0zLTNoMzk5OTA3di00MHpNOTMgMjgxIEg0MDAwMDAgdi00MEw3IDI0MXpgLGxlZnRoYXJwb29uZG93bnBsdXM6YE03IDQzNWMtNCA0LTYuMyA4LjctNyAxNCAwIDUuMy43IDkgMiAxMXM1LjMgNS4zIDEyCiAxMGM5MC43IDU0IDE1NiAxMzAgMTk2IDIyOCAzLjMgMTAuNyA2LjMgMTYuMyA5IDE3IDIgLjcgNSAxIDkgMWg1YzEwLjcgMCAxNi43Ci0yIDE4LTYgMi0yLjcgMS05LjctMy0yMS0zMi04Ny4zLTgyLjctMTU3LjctMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDBIN3ptOTMgMAp2NDBoMzk5OTAwdi00MHpNMCAyNDF2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6YCxsZWZ0aG9vazpgTTQwMDAwMCAyODEgSDEwM3MtMzMtMTEuMi02MS0zMy41UzAgMTk3LjMgMCAxNjRzMTQuMi02MS4yIDQyLjUKLTgzLjVDNzAuOCA1OC4yIDEwNCA0NyAxNDIgNDcgYzE2LjcgMCAyNSA2LjcgMjUgMjAgMCAxMi04LjcgMTguNy0yNiAyMC00MCAzLjMKLTY4LjcgMTUuNy04NiAzNy0xMCAxMi0xNSAyNS4zLTE1IDQwIDAgMjIuNyA5LjggNDAuNyAyOS41IDU0IDE5LjcgMTMuMyA0My41IDIxCiA3MS41IDIzaDM5OTg1OXpNMTAzIDI4MXYtNDBoMzk5ODk3djQwemAsbGVmdGxpbmVzZWdtZW50OmBNNDAgMjgxIFY0MjggSDAgVjk0IEg0MCBWMjQxIEg0MDAwMDAgdjQwegpNNDAgMjgxIFY0MjggSDAgVjk0IEg0MCBWMjQxIEg0MDAwMDAgdjQwemAsbGVmdG1hcHN0bzpgTTQwIDI4MSBWNDQ4SDBWNzRINDBWMjQxSDQwMDAwMHY0MHoKTTQwIDI4MSBWNDQ4SDBWNzRINDBWMjQxSDQwMDAwMHY0MHpgLGxlZnRUb0Zyb206YE0wIDE0N2g0MDAwMDB2NDBIMHptMCAyMTRjNjggNDAgMTE1LjcgOTUuNyAxNDMgMTY3aDIyYzE1LjMgMCAyMwotLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjktNzAtMTAxbC03LThoMzk5OTA1di00MEg5NWw3LTgKYzI4LjctMzIgNTItNjUuNyA3MC0xMDEgMTAuNy0yMy4zIDE2LTM1LjcgMTYtMzcgMC0uNy03LjctMS0yMy0xaC0yMkMxMTUuNyAyNjUuMwogNjggMzIxIDAgMzYxem0wLTE3NHYtNDBoMzk5OTAwdjQwem0xMDAgMTU0djQwaDM5OTkwMHYtNDB6YCxsb25nZXF1YWw6YE0wIDUwIGg0MDAwMDAgdjQwSDB6IG0wIDE5NGg0MDAwMHY0MEgwegpNMCA1MCBoNDAwMDAwIHY0MEgweiBtMCAxOTRoNDAwMDB2NDBIMHpgLG1pZGJyYWNlOmBNMjAwNDI4IDMzNApjLTEwMC43LTguMy0xOTUuMy00NC0yODAtMTA4LTU1LjMtNDItMTAxLjctOTMtMTM5LTE1M2wtOS0xNGMtMi43IDQtNS43IDguNy05IDE0Ci01My4zIDg2LjctMTIzLjcgMTUzLTIxMSAxOTktNjYuNyAzNi0xMzcuMyA1Ni4zLTIxMiA2MkgwVjIxNGgxOTk1NjhjMTc4LjMtMTEuNwogMzExLjctNzguMyA0MDMtMjAxIDYtOCA5LjctMTIgMTEtMTIgLjctLjcgNi43LTEgMTgtMXMxNy4zLjMgMTggMWMxLjMgMCA1IDQgMTEKIDEyIDQ0LjcgNTkuMyAxMDEuMyAxMDYuMyAxNzAgMTQxczE0NS4zIDU0LjMgMjI5IDYwaDE5OTU3MnYxMjB6YCxtaWRicmFjZXVuZGVyOmBNMTk5NTcyIDIxNApjMTAwLjcgOC4zIDE5NS4zIDQ0IDI4MCAxMDggNTUuMyA0MiAxMDEuNyA5MyAxMzkgMTUzbDkgMTRjMi43LTQgNS43LTguNyA5LTE0CiA1My4zLTg2LjcgMTIzLjctMTUzIDIxMS0xOTkgNjYuNy0zNiAxMzcuMy01Ni4zIDIxMi02MmgxOTk1Njh2MTIwSDIwMDQzMmMtMTc4LjMKIDExLjctMzExLjcgNzguMy00MDMgMjAxLTYgOC05LjcgMTItMTEgMTItLjcuNy02LjcgMS0xOCAxcy0xNy4zLS4zLTE4LTFjLTEuMyAwCi01LTQtMTEtMTItNDQuNy01OS4zLTEwMS4zLTEwNi4zLTE3MC0xNDFzLTE0NS4zLTU0LjMtMjI5LTYwSDBWMjE0emAsb2lpbnRTaXplMTpgTTUxMi42IDcxLjZjMjcyLjYgMCAzMjAuMyAxMDYuOCAzMjAuMyAxNzguMiAwIDcwLjgtNDcuNyAxNzcuNgotMzIwLjMgMTc3LjZTMTkzLjEgMzIwLjYgMTkzLjEgMjQ5LjhjMC03MS40IDQ2LjktMTc4LjIgMzE5LjUtMTc4LjJ6Cm0zNjguMSAxNzguMmMwLTg2LjQtNjAuOS0yMTUuNC0zNjguMS0yMTUuNC0zMDYuNCAwLTM2Ny4zIDEyOS0zNjcuMyAyMTUuNCAwIDg1LjgKNjAuOSAyMTQuOCAzNjcuMyAyMTQuOCAzMDcuMiAwIDM2OC4xLTEyOSAzNjguMS0yMTQuOHpgLG9paW50U2l6ZTI6YE03NTcuOCAxMDAuMWMzODQuNyAwIDQ1MS4xIDEzNy42IDQ1MS4xIDIzMCAwIDkxLjMtNjYuNCAyMjguOAotNDUxLjEgMjI4LjgtMzg2LjMgMC00NTIuNy0xMzcuNS00NTIuNy0yMjguOCAwLTkyLjQgNjYuNC0yMzAgNDUyLjctMjMwegptNTAyLjQgMjMwYzAtMTExLjItODIuNC0yNzcuMi01MDIuNC0yNzcuMnMtNTA0IDE2Ni01MDQgMjc3LjIKYzAgMTEwIDg0IDI3NiA1MDQgMjc2czUwMi40LTE2NiA1MDIuNC0yNzZ6YCxvaWlpbnRTaXplMTpgTTY4MS40IDcxLjZjNDA4LjkgMCA0ODAuNSAxMDYuOCA0ODAuNSAxNzguMiAwIDcwLjgtNzEuNiAxNzcuNgotNDgwLjUgMTc3LjZTMjAyLjEgMzIwLjYgMjAyLjEgMjQ5LjhjMC03MS40IDcwLjUtMTc4LjIgNDc5LjMtMTc4LjJ6Cm01MjUuOCAxNzguMmMwLTg2LjQtODYuOC0yMTUuNC01MjUuNy0yMTUuNC00MzcuOSAwLTUyNC43IDEyOS01MjQuNyAyMTUuNCAwCjg1LjggODYuOCAyMTQuOCA1MjQuNyAyMTQuOCA0MzguOSAwIDUyNS43LTEyOSA1MjUuNy0yMTQuOHpgLG9paWludFNpemUyOmBNMTAyMS4yIDUzYzYwMy42IDAgNzA3LjggMTY1LjggNzA3LjggMjc3LjIgMCAxMTAtMTA0LjIgMjc1LjgKLTcwNy44IDI3NS44LTYwNiAwLTcxMC4yLTE2NS44LTcxMC4yLTI3NS44QzMxMSAyMTguOCA0MTUuMiA1MyAxMDIxLjIgNTN6Cm03NzAuNCAyNzcuMWMwLTEzMS4yLTEyNi40LTMyNy42LTc3MC41LTMyNy42UzI0OC40IDE5OC45IDI0OC40IDMzMC4xCmMwIDEzMCAxMjguOCAzMjYuNCA3NzIuNyAzMjYuNHM3NzAuNS0xOTYuNCA3NzAuNS0zMjYuNHpgLHJpZ2h0YXJyb3c6YE0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4Ci0xNi43IDMyLTI3LjcgNjMuNy0zMyA5NSAwIDEuMy0uMiAyLjctLjUgNC0uMyAxLjMtLjUgMi4zLS41IDMgMCA3LjMgNi43IDExIDIwCiAxMSA4IDAgMTMuMi0uOCAxNS41LTIuNSAyLjMtMS43IDQuMi01LjUgNS41LTExLjUgMi0xMy4zIDUuNy0yNyAxMS00MSAxNC43LTQ0LjcKIDM5LTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1Ci00MC41LTExOS03NS41cy01OC4zLTc0LjgtNzMtMTE5LjVjLTQuNy0xNC04LjMtMjcuMy0xMS00MC0xLjMtNi43LTMuMi0xMC44LTUuNQotMTIuNS0yLjMtMS43LTcuNS0yLjUtMTUuNS0yLjUtMTQgMC0yMSAzLjctMjEgMTEgMCAyIDIgMTAuMyA2IDI1IDIwLjcgODMuMyA2NwogMTUxLjcgMTM5IDIwNXptMCAwdjQwaDM5OTkwMHYtNDB6YCxyaWdodGJyYWNlOmBNNDAwMDAwIDU0MmwKLTYgNmgtMTdjLTEyLjcgMC0xOS4zLS4zLTIwLTEtNC00LTcuMy04LjMtMTAtMTMtMzUuMy01MS4zLTgwLjgtOTMuOC0xMzYuNS0xMjcuNQpzLTExNy4yLTU1LjgtMTg0LjUtNjYuNWMtLjcgMC0yLS4zLTQtMS0xOC43LTIuNy03Ni00LjMtMTcyLTVIMFYyMTRoMzk5NTcxbDYgMQpjMTI0LjcgOCAyMzUgNjEuNyAzMzEgMTYxIDMxLjMgMzMuMyA1OS43IDcyLjcgODUgMTE4bDcgMTN2MzV6YCxyaWdodGJyYWNldW5kZXI6YE0zOTk5OTQgMGw2IDZ2MzVsLTYgMTFjLTU2IDEwNC0xMzUuMyAxODEuMy0yMzggMjMyLTU3LjMKIDI4LjctMTE3IDQ1LTE3OSA1MEgtMzAwVjIxNGgzOTk4OTdjNDMuMy03IDgxLTE1IDExMy0yNiAxMDAuNy0zMyAxNzkuNy05MSAyMzcKLTE3NCAyLjctNSA2LTkgMTAtMTMgLjctMSA3LjMtMSAyMC0xaDE3emAscmlnaHRncm91cDpgTTAgODBoMzk5NTY1YzM3MSAwIDI2Ni43IDE0OS40IDQxNCAxODAgNS45IDEuMiAxOCAwIDE4IDAgMiAwCiAzLTEgMy0zdi0zOGMtNzYtMTU4LTI1Ny0yMTktNDM1LTIxOUgwemAscmlnaHRncm91cHVuZGVyOmBNMCAyNjJoMzk5NTY1YzM3MSAwIDI2Ni43LTE0OS40IDQxNC0xODAgNS45LTEuMiAxOCAwIDE4CiAwIDIgMCAzIDEgMyAzdjM4Yy03NiAxNTgtMjU3IDIxOS00MzUgMjE5SDB6YCxyaWdodGhhcnBvb246YE0wIDI0MXY0MGgzOTk5OTNjNC43LTQuNyA3LTkuMyA3LTE0IDAtOS4zCi0zLjctMTUuMy0xMS0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMgotMTAuNyAwLTE2LjcgMi0xOCA2LTIgMi43LTEgOS43IDMgMjEgMTUuMyA0MiAzNi43IDgxLjggNjQgMTE5LjUgMjcuMyAzNy43IDU4CiA2OS4yIDkyIDk0LjV6bTAgMHY0MGgzOTk5MDB2LTQwemAscmlnaHRoYXJwb29ucGx1czpgTTAgMjQxdjQwaDM5OTk5M2M0LjctNC43IDctOS4zIDctMTQgMC05LjMtMy43LTE1LjMtMTEKLTE4LTkyLjctNTYuNy0xNTktMTMzLjctMTk5LTIzMS0zLjMtOS4zLTYtMTQuNy04LTE2LTItMS4zLTctMi0xNS0yLTEwLjcgMC0xNi43CiAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTggNjkuMiA5MiA5NC41egptMCAwdjQwaDM5OTkwMHYtNDB6IG0xMDAgMTk0djQwaDM5OTkwMHYtNDB6bTAgMHY0MGgzOTk5MDB2LTQwemAscmlnaHRoYXJwb29uZG93bjpgTTM5OTc0NyA1MTFjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOCAxNS0yLjVzNC43LTYuOAogOC0xNS41YzQwLTk0IDk5LjMtMTY2LjMgMTc4LTIxNyAxMy4zLTggMjAuMy0xMi4zIDIxLTEzIDUuMy0zLjMgOC41LTUuOCA5LjUKLTcuNSAxLTEuNyAxLjUtNS4yIDEuNS0xMC41cy0yLjMtMTAuMy03LTE1SDB2NDBoMzk5OTA4Yy0zNCAyNS4zLTY0LjcgNTctOTIgOTUKLTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCAyNDF2NDBoMzk5OTAwdi00MHpgLHJpZ2h0aGFycG9vbmRvd25wbHVzOmBNMzk5NzQ3IDcwNWMwIDcuMyA2LjcgMTEgMjAgMTEgOCAwIDEzLS44CiAxNS0yLjVzNC43LTYuOCA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMwogOC41LTUuOCA5LjUtNy41IDEtMS43IDEuNS01LjIgMS41LTEwLjVzLTIuMy0xMC4zLTctMTVIMHY0MGgzOTk5MDhjLTM0IDI1LjMKLTY0LjcgNTctOTIgOTUtMjcuMyAzOC00OC43IDc3LjctNjQgMTE5LTMuMyA4LjctNSAxNC01IDE2ek0wIDQzNXY0MGgzOTk5MDB2LTQwegptMC0xOTR2NDBoNDAwMDAwdi00MHptMCAwdjQwaDQwMDAwMHYtNDB6YCxyaWdodGhvb2s6YE0zOTk4NTkgMjQxYy03NjQgMCAwIDAgMCAwIDQwLTMuMyA2OC43LTE1LjcgODYtMzcgMTAtMTIgMTUtMjUuMwogMTUtNDAgMC0yMi43LTkuOC00MC43LTI5LjUtNTQtMTkuNy0xMy4zLTQzLjUtMjEtNzEuNS0yMy0xNy4zLTEuMy0yNi04LTI2LTIwIDAKLTEzLjMgOC43LTIwIDI2LTIwIDM4IDAgNzEgMTEuMiA5OSAzMy41IDAgMCA3IDUuNiAyMSAxNi43IDE0IDExLjIgMjEgMzMuNSAyMQogNjYuOHMtMTQgNjEuMi00MiA4My41Yy0yOCAyMi4zLTYxIDMzLjUtOTkgMzMuNUwwIDI0MXogTTAgMjgxdi00MGgzOTk4NTl2NDB6YCxyaWdodGxpbmVzZWdtZW50OmBNMzk5OTYwIDI0MSBWOTQgaDQwIFY0MjggaC00MCBWMjgxIEgwIHYtNDB6Ck0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHpgLHJpZ2h0VG9Gcm9tOmBNNDAwMDAwIDE2N2MtNzAuNy00Mi0xMTgtOTcuNy0xNDItMTY3aC0yM2MtMTUuMyAwLTIzIC4zLTIzCiAxIDAgMS4zIDUuMyAxMy43IDE2IDM3IDE4IDM1LjMgNDEuMyA2OSA3MCAxMDFsNyA4SDB2NDBoMzk5OTA1bC03IDhjLTI4LjcgMzIKLTUyIDY1LjctNzAgMTAxLTEwLjcgMjMuMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyM2MyNC02OS4zIDcxLjMtMTI1IDE0MgotMTY3eiBNMTAwIDE0N3Y0MGgzOTk5MDB2LTQwek0wIDM0MXY0MGgzOTk5MDB2LTQwemAsdHdvaGVhZGxlZnRhcnJvdzpgTTAgMTY3YzY4IDQwCiAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzLS4zIDIzLTEgMC0xLjMtNS4zLTEzLjctMTYtMzctMTgtMzUuMy00MS4zLTY5Ci03MC0xMDFsLTctOGgxMjVsOSA3YzUwLjcgMzkuMyA4NSA4NiAxMDMgMTQwaDQ2YzAtNC43LTYuMy0xOC43LTE5LTQyLTE4LTM1LjMKLTQwLTY3LjMtNjYtOTZsLTktOWgzOTk3MTZ2LTQwSDI4NGw5LTljMjYtMjguNyA0OC02MC43IDY2LTk2IDEyLjctMjMuMzMzIDE5Ci0zNy4zMzMgMTktNDJoLTQ2Yy0xOCA1NC01Mi4zIDEwMC43LTEwMyAxNDBsLTkgN0g5NWw3LThjMjguNy0zMiA1Mi02NS43IDcwLTEwMQogMTAuNy0yMy4zMzMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDcxLjMgNjggMTI3IDAgMTY3emAsdHdvaGVhZHJpZ2h0YXJyb3c6YE00MDAwMDAgMTY3CmMtNjgtNDAtMTE1LjctOTUuNy0xNDMtMTY3aC0yMmMtMTUuMyAwLTIzIC4zLTIzIDEgMCAxLjMgNS4zIDEzLjcgMTYgMzcgMTggMzUuMwogNDEuMyA2OSA3MCAxMDFsNyA4aC0xMjVsLTktN2MtNTAuNy0zOS4zLTg1LTg2LTEwMy0xNDBoLTQ2YzAgNC43IDYuMyAxOC43IDE5IDQyCiAxOCAzNS4zIDQwIDY3LjMgNjYgOTZsOSA5SDB2NDBoMzk5NzE2bC05IDljLTI2IDI4LjctNDggNjAuNy02NiA5Ni0xMi43IDIzLjMzMwotMTkgMzcuMzMzLTE5IDQyaDQ2YzE4LTU0IDUyLjMtMTAwLjcgMTAzLTE0MGw5LTdoMTI1bC03IDhjLTI4LjcgMzItNTIgNjUuNy03MAogMTAxLTEwLjcgMjMuMzMzLTE2IDM1LjctMTYgMzcgMCAuNyA3LjcgMSAyMyAxaDIyYzI3LjMtNzEuMyA3NS0xMjcgMTQzLTE2N3pgLHRpbGRlMTpgTTIwMCA1NS41MzhjLTc3IDAtMTY4IDczLjk1My0xNzcgNzMuOTUzLTMgMC03Ci0yLjE3NS05LTUuNDM3TDIgOTdjLTEtMi0yLTQtMi02IDAtNCAyLTcgNS05bDIwLTEyQzExNiAxMiAxNzEgMCAyMDcgMGM4NiAwCiAxMTQgNjggMTkxIDY4IDc4IDAgMTY4LTY4IDE3Ny02OCA0IDAgNyAyIDkgNWwxMiAxOWMxIDIuMTc1IDIgNC4zNSAyIDYuNTI1IDAKIDQuMzUtMiA3LjYxMy01IDkuNzg4bC0xOSAxMy4wNWMtOTIgNjMuMDc3LTExNi45MzcgNzUuMzA4LTE4MyA3Ni4xMjgKLTY4LjI2Ny44NDctMTEzLTczLjk1Mi0xOTEtNzMuOTUyemAsdGlsZGUyOmBNMzQ0IDU1LjI2NmMtMTQyIDAtMzAwLjYzOCA4MS4zMTYtMzExLjUgODYuNDE4Ci04LjAxIDMuNzYyLTIyLjUgMTAuOTEtMjMuNSA1LjU2MkwxIDEyMGMtMS0yLTEtMy0xLTQgMC01IDMtOSA4LTEwbDE4LjQtOUMxNjAuOQogMzEuOSAyODMgMCAzNTggMGMxNDggMCAxODggMTIyIDMzMSAxMjJzMzE0LTk3IDMyNi05N2M0IDAgOCAyIDEwIDdsNyAyMS4xMTQKYzEgMi4xNCAxIDMuMjEgMSA0LjI4IDAgNS4zNDctMyA5LjYyNi03IDEwLjY5NmwtMjIuMyAxMi42MjJDODUyLjYgMTU4LjM3MiA3NTEKIDE4MS40NzYgNjc2IDE4MS40NzZjLTE0OSAwLTE4OS0xMjYuMjEtMzMyLTEyNi4yMXpgLHRpbGRlMzpgTTc4NiA1OUM0NTcgNTkgMzIgMTc1LjI0MiAxMyAxNzUuMjQyYy02IDAtMTAtMy40NTcKLTExLTEwLjM3TC4xNSAxMzhjLTEtNyAzLTEyIDEwLTEzbDE5LjItNi40QzM3OC40IDQwLjcgNjM0LjMgMCA4MDQuMyAwYzMzNyAwCiA0MTEuOCAxNTcgNzQ2LjggMTU3IDMyOCAwIDc1NC0xMTIgNzczLTExMiA1IDAgMTAgMyAxMSA5bDEgMTQuMDc1YzEgOC4wNjYtLjY5NwogMTYuNTk1LTYuNjk3IDE3LjQ5MmwtMjEuMDUyIDcuMzFjLTM2Ny45IDk4LjE0Ni02MDkuMTUgMTIyLjY5Ni03NzguMTUgMTIyLjY5NgogLTMzOCAwLTQwOS0xNTYuNTczLTc0NC0xNTYuNTczemAsdGlsZGU0OmBNNzg2IDU4QzQ1NyA1OCAzMiAxNzcuNDg3IDEzIDE3Ny40ODdjLTYgMC0xMC0zLjM0NQotMTEtMTAuMDM1TC4xNSAxNDNjLTEtNyAzLTEyIDEwLTEzbDIyLTYuN0MzODEuMiAzNSA2MzcuMTUgMCA4MDcuMTUgMGMzMzcgMCA0MDkKIDE3NyA3NDQgMTc3IDMyOCAwIDc1NC0xMjcgNzczLTEyNyA1IDAgMTAgMyAxMSA5bDEgMTQuNzk0YzEgNy44MDUtMyAxMy4zOC05CiAxNC40OTVsLTIwLjcgNS41NzRjLTM2Ni44NSA5OS43OS02MDcuMyAxMzkuMzcyLTc3Ni4zIDEzOS4zNzItMzM4IDAtNDA5CiAtMTc1LjIzNi03NDQtMTc1LjIzNnpgLHZlYzpgTTM3NyAyMGMwLTUuMzMzIDEuODMzLTEwIDUuNS0xNFMzOTEgMCAzOTcgMGM0LjY2NyAwIDguNjY3IDEuNjY3IDEyIDUKMy4zMzMgMi42NjcgNi42NjcgOSAxMCAxOSA2LjY2NyAyNC42NjcgMjAuMzMzIDQzLjY2NyA0MSA1NyA3LjMzMyA0LjY2NyAxMQoxMC42NjcgMTEgMTggMCA2LTEgMTAtMyAxMnMtNi42NjcgNS0xNCA5Yy0yOC42NjcgMTQuNjY3LTUzLjY2NyAzNS42NjctNzUgNjMKLTEuMzMzIDEuMzMzLTMuMTY3IDMuNS01LjUgNi41cy00IDQuODMzLTUgNS41Yy0xIC42NjctMi41IDEuMzMzLTQuNSAycy00LjMzMyAxCi03IDFjLTQuNjY3IDAtOS4xNjctMS44MzMtMTMuNS01LjVTMzM3IDE4NCAzMzcgMTc4YzAtMTIuNjY3IDE1LjY2Ny0zMi4zMzMgNDctNTkKSDIxM2wtMTcxLTFjLTguNjY3LTYtMTMtMTIuMzMzLTEzLTE5IDAtNC42NjcgNC4zMzMtMTEuMzMzIDEzLTIwaDM1OQpjLTE2LTI1LjMzMy0yNC00NS0yNC01OXpgLHdpZGVoYXQxOmBNNTI5IDBoNWw1MTkgMTE1YzUgMSA5IDUgOSAxMCAwIDEtMSAyLTEgM2wtNCAyMgpjLTEgNS01IDktMTEgOWgtMkw1MzIgNjcgMTkgMTU5aC0yYy01IDAtOS00LTExLTlsLTUtMjJjLTEtNiAyLTEyIDgtMTN6YCx3aWRlaGF0MjpgTTExODEgMGgybDExNzEgMTc2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMAotMTEgMTBoLTFMMTE4MiA2NyAxNSAyMjBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpgLHdpZGVoYXQzOmBNMTE4MSAwaDJsMTE3MSAyMzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwCi0xMSAxMGgtMUwxMTgyIDY3IDE1IDI4MGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExemAsd2lkZWhhdDQ6YE0xMTgxIDBoMmwxMTcxIDI5NmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTAKLTExIDEwaC0xTDExODIgNjcgMTUgMzQwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6YCx3aWRlY2hlY2sxOmBNNTI5LDE1OWg1bDUxOSwtMTE1YzUsLTEsOSwtNSw5LC0xMGMwLC0xLC0xLC0yLC0xLC0zbC00LC0yMmMtMSwKLTUsLTUsLTksLTExLC05aC0ybC01MTIsOTJsLTUxMywtOTJoLTJjLTUsMCwtOSw0LC0xMSw5bC01LDIyYy0xLDYsMiwxMiw4LDEzemAsd2lkZWNoZWNrMjpgTTExODEsMjIwaDJsMTE3MSwtMTc2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCwKLTExLC0xMGgtMWwtMTE2OCwxNTNsLTExNjcsLTE1M2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6YCx3aWRlY2hlY2szOmBNMTE4MSwyODBoMmwxMTcxLC0yMzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLAotMTEsLTEwaC0xbC0xMTY4LDIxM2wtMTE2NywtMjEzaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpgLHdpZGVjaGVjazQ6YE0xMTgxLDM0MGgybDExNzEsLTI5NmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsCi0xMSwtMTBoLTFsLTExNjgsMjczbC0xMTY3LC0yNzNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExemAsYmFyYWJvdmVsZWZ0YXJyb3c6YE00MDAwMDAgNjIwaC0zOTk4OTBsMyAtM2M2OC43IC01Mi43IDExMy43IC0xMjAgMTM1IC0yMDIKYzQgLTE0LjcgNiAtMjMgNiAtMjVjMCAtNy4zIC03IC0xMSAtMjEgLTExYy04IDAgLTEzLjIgMC44IC0xNS41IDIuNQpjLTIuMyAxLjcgLTQuMiA1LjggLTUuNSAxMi41Yy0xLjMgNC43IC0yLjcgMTAuMyAtNCAxN2MtMTIgNDguNyAtMzQuOCA5MiAtNjguNSAxMzAKcy03NC4yIDY2LjMgLTEyMS41IDg1Yy0xMCA0IC0xNiA3LjcgLTE4IDExYzAgOC43IDYgMTQuMyAxOCAxN2M0Ny4zIDE4LjcgODcuOCA0NwoxMjEuNSA4NXM1Ni41IDgxLjMgNjguNSAxMzBjMC43IDIgMS4zIDUgMiA5czEuMiA2LjcgMS41IDhjMC4zIDEuMyAxIDMuMyAyIDYKczIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjMgMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEgLTMuNyAyMSAtMTEKYzAgLTIgLTIgLTEwLjMgLTYgLTI1Yy0yMCAtNzkuMyAtNjUgLTE0Ni43IC0xMzUgLTIwMmwtMyAtM2gzOTk4OTB6Ck0xMDAgNjIwdjQwaDM5OTkwMHYtNDB6IE0wIDI0MXY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwemAscmlnaHRhcnJvd2Fib3ZlYmFyOmBNMCAyNDF2NDBoMzk5ODkxYy00Ny4zIDM1LjMtODQgNzgtMTEwIDEyOC0xNi43IDMyCi0yNy43IDYzLjctMzMgOTUgMCAxLjMtLjIgMi43LS41IDQtLjMgMS4zLS41IDIuMy0uNSAzIDAgNy4zIDYuNyAxMSAyMCAxMSA4IDAKMTMuMi0uOCAxNS41LTIuNSAyLjMtMS43IDQuMi01LjUgNS41LTExLjUgMi0xMy4zIDUuNy0yNyAxMS00MSAxNC43LTQ0LjcgMzkKLTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1LTQwLjUKLTExOS03NS41cy01OC4zLTc0LjgtNzMtMTE5LjVjLTQuNy0xNC04LjMtMjcuMy0xMS00MC0xLjMtNi43LTMuMi0xMC44LTUuNQotMTIuNS0yLjMtMS43LTcuNS0yLjUtMTUuNS0yLjUtMTQgMC0yMSAzLjctMjEgMTEgMCAyIDIgMTAuMyA2IDI1IDIwLjcgODMuMyA2NwoxNTEuNyAxMzkgMjA1em05NiAzNzloMzk5ODk0djQwSDB6bTAgMGgzOTk5MDR2NDBIMHpgLGJhcmFib3Zlc2hvcnRsZWZ0aGFycG9vbjpgTTUwNyw0MzVjLTQsNCwtNi4zLDguNywtNywxNGMwLDUuMywwLjcsOSwyLDExCmMxLjMsMiw1LjMsNS4zLDEyLDEwYzkwLjcsNTQsMTU2LDEzMCwxOTYsMjI4YzMuMywxMC43LDYuMywxNi4zLDksMTcKYzIsMC43LDUsMSw5LDFjMCwwLDUsMCw1LDBjMTAuNywwLDE2LjcsLTIsMTgsLTZjMiwtMi43LDEsLTkuNywtMywtMjEKYy0zMiwtODcuMywtODIuNywtMTU3LjcsLTE1MiwtMjExYzAsMCwtMywtMywtMywtM2wzOTkzNTEsMGwwLC00MApjLTM5ODU3MCwwLC0zOTk0MzcsMCwtMzk5NDM3LDB6IE01OTMgNDM1IHY0MCBIMzk5NTAwIHYtNDB6Ck0wIDI4MSB2LTQwIEgzOTk5MDggdjQweiBNMCAyODEgdi00MCBIMzk5OTA4IHY0MHpgLHJpZ2h0aGFycG9vbmFib3Zlc2hvcnRiYXI6YE0wLDI0MSBsMCw0MGMzOTkxMjYsMCwzOTk5OTMsMCwzOTk5OTMsMApjNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSwKLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNgpjLTIsMi43LC0xLDkuNywzLDIxYzE1LjMsNDIsMzYuNyw4MS44LDY0LDExOS41YzI3LjMsMzcuNyw1OCw2OS4yLDkyLDk0LjV6Ck0wIDI0MSB2NDAgSDM5OTkwOCB2LTQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHogTTAgNDc1IHYtNDAgSDM5OTUwMCB2NDB6YCxzaG9ydGJhcmFib3ZlbGVmdGhhcnBvb246YE03LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTEKYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxN2MyLDAuNyw1LDEsOSwKMWMwLDAsNSwwLDUsMGMxMC43LDAsMTYuNywtMiwxOCwtNmMyLC0yLjcsMSwtOS43LC0zLC0yMWMtMzIsLTg3LjMsLTgyLjcsLTE1Ny43LAotMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTkwNywwbDAsLTQwYy0zOTkxMjYsMCwtMzk5OTkzLDAsLTM5OTk5MywwegpNOTMgNDM1IHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6YCxzaG9ydHJpZ2h0aGFycG9vbmFib3ZlYmFyOmBNNTMsMjQxbDAsNDBjMzk4NTcwLDAsMzk5NDM3LDAsMzk5NDM3LDAKYzQuNywtNC43LDcsLTkuMyw3LC0xNGMwLC05LjMsLTMuNywtMTUuMywtMTEsLTE4Yy05Mi43LC01Ni43LC0xNTksLTEzMy43LC0xOTksCi0yMzFjLTMuMywtOS4zLC02LC0xNC43LC04LC0xNmMtMiwtMS4zLC03LC0yLC0xNSwtMmMtMTAuNywwLC0xNi43LDIsLTE4LDYKYy0yLDIuNywtMSw5LjcsMywyMWMxNS4zLDQyLDM2LjcsODEuOCw2NCwxMTkuNWMyNy4zLDM3LjcsNTgsNjkuMiw5Miw5NC41egpNNTAwIDI0MSB2NDAgSDM5OTQwOCB2LTQweiBNNTAwIDQzNSB2NDAgSDQwMDAwMCB2LTQwemB9LHNIdD1mdW5jdGlvbihzLHUpe3N3aXRjaChzKXtjYXNlImxicmFjayI6cmV0dXJuIk00MDMgMTc1OSBWODQgSDY2NiBWMCBIMzE5IFYxNzU5IHYiK3UrYCB2MTc1OSBoMzQ3IHYtODQKSDQwM3ogTTQwMyAxNzU5IFYwIEgzMTkgVjE3NTkgdmArdSsiIHYxNzU5IGg4NHoiO2Nhc2UicmJyYWNrIjpyZXR1cm4iTTM0NyAxNzU5IFYwIEgwIFY4NCBIMjYzIFYxNzU5IHYiK3UrYCB2MTc1OSBIMCB2ODQgSDM0N3oKTTM0NyAxNzU5IFYwIEgyNjMgVjE3NTkgdmArdSsiIHYxNzU5IGg4NHoiO2Nhc2UidmVydCI6cmV0dXJuIk0xNDUgMTUgdjU4NSB2Iit1K2AgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTUKYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2YCstdStgIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNQpjLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTE4OCAxNSBIMTQ1IHY1ODUgdmArdSsiIHY1ODUgaDQzeiI7Y2FzZSJkb3VibGV2ZXJ0IjpyZXR1cm4iTTE0NSAxNSB2NTg1IHYiK3UrYCB2NTg1IGMyLjY2NywxMCw5LjY2NywxNSwyMSwxNQpjMTAsMCwxNi42NjcsLTUsMjAsLTE1IHYtNTg1IHZgKy11K2Agdi01ODUgYy0yLjY2NywtMTAsLTkuNjY3LC0xNSwtMjEsLTE1CmMtMTAsMCwtMTYuNjY3LDUsLTIwLDE1eiBNMTg4IDE1IEgxNDUgdjU4NSB2YCt1K2AgdjU4NSBoNDN6Ck0zNjcgMTUgdjU4NSB2YCt1K2AgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTUKYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2YCstdStgIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNQpjLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTQxMCAxNSBIMzY3IHY1ODUgdmArdSsiIHY1ODUgaDQzeiI7Y2FzZSJsZmxvb3IiOnJldHVybiJNMzE5IDYwMiBWMCBINDAzIFY2MDIgdiIrdStgIHYxNzE1IGgyNjMgdjg0IEgzMTl6Ck1NMzE5IDYwMiBWMCBINDAzIFY2MDIgdmArdSsiIHYxNzE1IEgzMTl6IjtjYXNlInJmbG9vciI6cmV0dXJuIk0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2Iit1K2AgdjE3OTkgSDAgdi04NCBIMzE5egpNTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZgK3UrIiB2MTcxNSBIMzE5eiI7Y2FzZSJsY2VpbCI6cmV0dXJuIk00MDMgMTc1OSBWODQgSDY2NiBWMCBIMzE5IFYxNzU5IHYiK3UrYCB2NjAyIGg4NHoKTTQwMyAxNzU5IFYwIEgzMTkgVjE3NTkgdmArdSsiIHY2MDIgaDg0eiI7Y2FzZSJyY2VpbCI6cmV0dXJuIk0zNDcgMTc1OSBWMCBIMCBWODQgSDI2MyBWMTc1OSB2Iit1K2AgdjYwMiBoODR6Ck0zNDcgMTc1OSBWMCBoLTg0IFYxNzU5IHZgK3UrIiB2NjAyIGg4NHoiO2Nhc2UibHBhcmVuIjpyZXR1cm5gTTg2Myw5YzAsLTIsLTIsLTUsLTYsLTljMCwwLC0xNywwLC0xNywwYy0xMi43LDAsLTE5LjMsMC4zLC0yMCwxCmMtNS4zLDUuMywtMTAuMywxMSwtMTUsMTdjLTI0Mi43LDI5NC43LC0zOTUuMyw2ODIsLTQ1OCwxMTYyYy0yMS4zLDE2My4zLC0zMy4zLDM0OSwKLTM2LDU1NyBsMCxgKyh1Kzg0KStgYzAuMiw2LDAsMjYsMCw2MGMyLDE1OS4zLDEwLDMxMC43LDI0LDQ1NGM1My4zLDUyOCwyMTAsCjk0OS43LDQ3MCwxMjY1YzQuNyw2LDkuNywxMS43LDE1LDE3YzAuNywwLjcsNywxLDE5LDFjMCwwLDE4LDAsMTgsMGM0LC00LDYsLTcsNiwtOQpjMCwtMi43LC0zLjMsLTguNywtMTAsLTE4Yy0xMzUuMywtMTkyLjcsLTIzNS41LC00MTQuMywtMzAwLjUsLTY2NWMtNjUsLTI1MC43LC0xMDIuNSwKLTU0NC43LC0xMTIuNSwtODgyYy0yLC0xMDQsLTMsLTE2NywtMywtMTg5CmwwLC1gKyh1KzkyKStgYzAsLTE2Mi43LDUuNywtMzE0LDE3LC00NTRjMjAuNywtMjcyLDYzLjcsLTUxMywxMjksLTcyM2M2NS4zLAotMjEwLDE1NS4zLC0zOTYuMywyNzAsLTU1OWM2LjcsLTkuMywxMCwtMTUuMywxMCwtMTh6YDtjYXNlInJwYXJlbiI6cmV0dXJuYE03NiwwYy0xNi43LDAsLTI1LDMsLTI1LDljMCwyLDIsNi4zLDYsMTNjMjEuMywyOC43LDQyLjMsNjAuMywKNjMsOTVjOTYuNywxNTYuNywxNzIuOCwzMzIuNSwyMjguNSw1MjcuNWM1NS43LDE5NSw5Mi44LDQxNi41LDExMS41LDY2NC41CmMxMS4zLDEzOS4zLDE3LDI5MC43LDE3LDQ1NGMwLDI4LDEuNyw0MywzLjMsNDVsMCxgKyh1KzkpK2AKYy0zLDQsLTMuMywxNi43LC0zLjMsMzhjMCwxNjIsLTUuNywzMTMuNywtMTcsNDU1Yy0xOC43LDI0OCwtNTUuOCw0NjkuMywtMTExLjUsNjY0CmMtNTUuNywxOTQuNywtMTMxLjgsMzcwLjMsLTIyOC41LDUyN2MtMjAuNywzNC43LC00MS43LDY2LjMsLTYzLDk1Yy0yLDMuMywtNCw3LC02LDExCmMwLDcuMyw1LjcsMTEsMTcsMTFjMCwwLDExLDAsMTEsMGM5LjMsMCwxNC4zLC0wLjMsMTUsLTFjNS4zLC01LjMsMTAuMywtMTEsMTUsLTE3CmMyNDIuNywtMjk0LjcsMzk1LjMsLTY4MS43LDQ1OCwtMTE2MWMyMS4zLC0xNjQuNywzMy4zLC0zNTAuNywzNiwtNTU4CmwwLC1gKyh1KzE0NCkrYGMtMiwtMTU5LjMsLTEwLC0zMTAuNywtMjQsLTQ1NGMtNTMuMywtNTI4LC0yMTAsLTk0OS43LAotNDcwLC0xMjY1Yy00LjcsLTYsLTkuNywtMTEuNywtMTUsLTE3Yy0wLjcsLTAuNywtNi43LC0xLC0xOCwtMXpgO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHN0cmV0Y2h5IGRlbGltaXRlci4iKX19O2NsYXNzIG9Se2NvbnN0cnVjdG9yKHMpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMuY2hpbGRyZW49cyx0aGlzLmNsYXNzZXM9W10sdGhpcy5oZWlnaHQ9MCx0aGlzLmRlcHRoPTAsdGhpcy5tYXhGb250U2l6ZT0wLHRoaXMuc3R5bGU9e319aGFzQ2xhc3Mocyl7cmV0dXJuIFlhLmNvbnRhaW5zKHRoaXMuY2xhc3NlcyxzKX10b05vZGUoKXtmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHU9MDt1PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3UrKylzLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bdV0udG9Ob2RlKCkpO3JldHVybiBzfXRvTWFya3VwKCl7Zm9yKHZhciBzPSIiLHU9MDt1PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3UrKylzKz10aGlzLmNoaWxkcmVuW3VdLnRvTWFya3VwKCk7cmV0dXJuIHN9dG9UZXh0KCl7dmFyIHM9dT0+dS50b1RleHQoKTtyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAocykuam9pbigiIil9fXZhciBLND17IkFNUy1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSw2NTpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjY6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDY3OlswLC42ODg4OSwwLDAsLjcyMjIyXSw2ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjk6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDcwOlswLC42ODg4OSwwLDAsLjYxMTExXSw3MTpbMCwuNjg4ODksMCwwLC43Nzc3OF0sNzI6WzAsLjY4ODg5LDAsMCwuNzc3NzhdLDczOlswLC42ODg4OSwwLDAsLjM4ODg5XSw3NDpbLjE2NjY3LC42ODg4OSwwLDAsLjVdLDc1OlswLC42ODg4OSwwLDAsLjc3Nzc4XSw3NjpbMCwuNjg4ODksMCwwLC42NjY2N10sNzc6WzAsLjY4ODg5LDAsMCwuOTQ0NDVdLDc4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw3OTpbLjE2NjY3LC42ODg4OSwwLDAsLjc3Nzc4XSw4MDpbMCwuNjg4ODksMCwwLC42MTExMV0sODE6Wy4xNjY2NywuNjg4ODksMCwwLC43Nzc3OF0sODI6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDgzOlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NDpbMCwuNjg4ODksMCwwLC42NjY2N10sODU6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDg2OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4NzpbMCwuNjg4ODksMCwwLDFdLDg4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sOTA6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDEwNzpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMTYwOlswLDAsMCwwLC4yNV0sMTY1OlswLC42NzUsLjAyNSwwLC43NV0sMTc0OlsuMTU1NTksLjY5MjI0LDAsMCwuOTQ2NjZdLDI0MDpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMjk1OlswLC42ODg4OSwwLDAsLjU0MDI4XSw3MTA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzMyOlswLC45LDAsMCwyLjMzMzM0XSw3NzA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzcxOlswLC45LDAsMCwyLjMzMzM0XSw5ODk6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sMTAwODpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw4MjQ1OlswLC41NDk4NiwwLDAsLjI3NV0sODQ2MzpbMCwuNjg4ODksMCwwLC41NDAyOF0sODQ4NzpbMCwuNjg4ODksMCwwLC43MjIyMl0sODQ5ODpbMCwuNjg4ODksMCwwLC41NTU1Nl0sODUwMjpbMCwuNjg4ODksMCwwLC42NjY2N10sODUwMzpbMCwuNjg4ODksMCwwLC40NDQ0NV0sODUwNDpbMCwuNjg4ODksMCwwLC42NjY2N10sODUxMzpbMCwuNjg4ODksMCwwLC42Mzg4OV0sODU5MjpbLS4wMzU5OCwuNDY0MDIsMCwwLC41XSw4NTk0OlstLjAzNTk4LC40NjQwMiwwLDAsLjVdLDg2MDI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjAzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODYwNjpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYwODpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYxMDpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxMTpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxOTpbMCwuNTQ5ODYsMCwwLDFdLDg2MjA6WzAsLjU0OTg2LDAsMCwxXSw4NjIxOlstLjEzMzEzLC4zNzc4OCwwLDAsMS4zODg4OV0sODYyMjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2MjQ6WzAsLjY5MjI0LDAsMCwuNV0sODYyNTpbMCwuNjkyMjQsMCwwLC41XSw4NjMwOlswLC40MzA1NiwwLDAsMV0sODYzMTpbMCwuNDMwNTYsMCwwLDFdLDg2MzQ6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODYzNTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4NjM4OlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2Mzk6Wy4xOTQ0NCwuNjkyMjQsMCwwLC40MTY2N10sODY0MjpbLjE5NDQ0LC42OTIyNCwwLDAsLjQxNjY3XSw4NjQzOlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2NDQ6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDY6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDc6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDg6Wy4xOTQ0NCwuNjkyMjQsMCwwLC44MzMzNF0sODY0OTpbLjE4MDgsLjY3NSwwLDAsMV0sODY1MDpbLjE5NDQ0LC42OTIyNCwwLDAsLjgzMzM0XSw4NjUxOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUyOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY1NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTU6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjY2OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY3OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY5OlstLjEzMzEzLC4zNzc4OCwwLDAsMV0sODY3MjpbLS4wNjQsLjQzNywwLDAsMS4zMzRdLDg2NzQ6Wy0uMDY0LC40MzcsMCwwLDEuMzM0XSw4NzA1OlswLC44MjUsMCwwLC41XSw4NzA4OlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NzA5OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MTc6WzAsLjQzMDU2LDAsMCwuNDI5MTddLDg3MjI6Wy0uMDM1OTgsLjQ2NDAyLDAsMCwuNV0sODcyNDpbLjA4MTk4LC42OTIyNCwwLDAsLjc3Nzc4XSw4NzI2OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MzM6WzAsLjY5MjI0LDAsMCwuNzc3NzhdLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzc6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzg6Wy4wMzUxNywuNTIyMzksMCwwLC43MjIyMl0sODczOTpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw4NzQwOlsuMjUxNDIsLjc0MTExLDAsMCwuMjc3NzhdLDg3NDE6Wy4wODE2NywuNTgxNjcsMCwwLC4zODg4OV0sODc0MjpbLjI1MTQyLC43NDExMSwwLDAsLjVdLDg3NTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NTc6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NjQ6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NjU6Wy0uMTMzMTMsLjM3Nzg4LDAsMCwuNzc3NzhdLDg3Njk6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NzA6Wy0uMDM2MjUsLjQ2Mzc1LDAsMCwuNzc3NzhdLDg3NzQ6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODc3NjpbLS4wMTY4OCwuNDgzMTIsMCwwLC43Nzc3OF0sODc3ODpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4NzgyOlsuMDYwNjIsLjU0OTg2LDAsMCwuNzc3NzhdLDg3ODM6Wy4wNjA2MiwuNTQ5ODYsMCwwLC43Nzc3OF0sODc4NTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4Nzg2OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg3ODc6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODc5MDpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODc5MTpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4Nzk2OlsuMDgxOTgsLjkxNjY3LDAsMCwuNzc3NzhdLDg4MDY6Wy4yNTU4MywuNzU1ODMsMCwwLC43Nzc3OF0sODgwNzpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSw4ODA4OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDg4MDk6Wy4yNTE0MiwuNzU3MjYsMCwwLC43Nzc3OF0sODgxMjpbLjI1NTgzLC43NTU4MywwLDAsLjVdLDg4MTQ6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgxNTpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODE2OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4MTc6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODgxODpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODE5OlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MjI6Wy4xODA4LC42NzUsMCwwLC43Nzc3OF0sODgyMzpbLjE4MDgsLjY3NSwwLDAsLjc3Nzc4XSw4ODI4OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg4Mjk6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODgzMDpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODMxOlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MzI6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgzMzpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODQwOlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4NDE6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODg0MjpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODQzOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NDc6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sODg0ODpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODU4OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg4NTk6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODg2MTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4ODYyOlswLC42NzUsMCwwLC43Nzc3OF0sODg2MzpbMCwuNjc1LDAsMCwuNzc3NzhdLDg4NjQ6WzAsLjY3NSwwLDAsLjc3Nzc4XSw4ODY1OlswLC42NzUsMCwwLC43Nzc3OF0sODg3MjpbMCwuNjkyMjQsMCwwLC42MTExMV0sODg3MzpbMCwuNjkyMjQsMCwwLC43MjIyMl0sODg3NDpbMCwuNjkyMjQsMCwwLC44ODg4OV0sODg3NjpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3NzpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg3OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg4MjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODgzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg4ODQ6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODg4NTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSw4ODg4OlswLC41NDk4NiwwLDAsMS4xMTExMV0sODg5MDpbLjE5NDQ0LC40MzA1NiwwLDAsLjU1NTU2XSw4ODkxOlsuMTk0NDQsLjY5MjI0LDAsMCwuNjExMTFdLDg4OTI6Wy4xOTQ0NCwuNjkyMjQsMCwwLC42MTExMV0sODkwMTpbMCwuNTQ5ODYsMCwwLC4yNzc3OF0sODkwMzpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4OTA1OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg5MDY6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sODkwNzpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwODpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwOTpbLS4wMzU5OCwuNDY0MDIsMCwwLC43Nzc3OF0sODkxMDpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMTpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4OTEzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg5MTQ6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTU6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg5MTg6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MTk6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MjA6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjE6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjI6Wy4zODU2OSwuODg1NjksMCwwLC43Nzc3OF0sODkyMzpbLjM4NTY5LC44ODU2OSwwLDAsLjc3Nzc4XSw4OTI2OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg5Mjc6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODkyODpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTI5OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg5MzQ6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzNTpbLjIzMjIyLC43NDExMSwwLDAsLjc3Nzc4XSw4OTM2OlsuMjMyMjIsLjc0MTExLDAsMCwuNzc3NzhdLDg5Mzc6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzODpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4OTM5OlsuMjA1NzYsLjcwNTc2LDAsMCwuNzc3NzhdLDg5NDA6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODk0MTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTk0OlsuMTk0NDQsLjY5MjI0LDAsMCwuNzc3NzhdLDg5OTU6Wy4xOTQ0NCwuNjkyMjQsMCwwLC43Nzc3OF0sOTQxNjpbLjE1NTU5LC42OTIyNCwwLDAsLjkwMjIyXSw5NDg0OlswLC42OTIyNCwwLDAsLjVdLDk0ODg6WzAsLjY5MjI0LDAsMCwuNV0sOTQ5MjpbMCwuMzc3ODgsMCwwLC41XSw5NDk2OlswLC4zNzc4OCwwLDAsLjVdLDk1ODU6Wy4xOTQ0NCwuNjg4ODksMCwwLC44ODg4OV0sOTU4NjpbLjE5NDQ0LC43NDExMSwwLDAsLjg4ODg5XSw5NjMyOlswLC42NzUsMCwwLC43Nzc3OF0sOTYzMzpbMCwuNjc1LDAsMCwuNzc3NzhdLDk2NTA6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTE6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTQ6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sOTY2MDpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2MTpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2NDpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw5Njc0OlsuMTExMTEsLjY5MjI0LDAsMCwuNjY2NjddLDk3MzM6Wy4xOTQ0NCwuNjkyMjQsMCwwLC45NDQ0NV0sMTAwMDM6WzAsLjY5MjI0LDAsMCwuODMzMzRdLDEwMDE2OlswLC42OTIyNCwwLDAsLjgzMzM0XSwxMDczMTpbLjExMTExLC42OTIyNCwwLDAsLjY2NjY3XSwxMDg0NjpbLjE5NDQ0LC43NTU4MywwLDAsLjYxMTExXSwxMDg3NzpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg3ODpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg4NTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NjpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NzpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4ODpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4OTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MDpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MTpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDg5MjpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDkwMTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkwMjpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkzMzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNDpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNjpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNzpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzODpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDk0OTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1MDpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1NTpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSwxMDk1NjpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSw1NzM1MDpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw1NzM1MTpbLjA4MTY3LC41ODE2NywwLDAsLjM4ODg5XSw1NzM1MjpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw1NzM1MzpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw1NzM1NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1ODpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM1OTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MDpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MTpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM2NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2ODpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2OTpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM3MDpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw1NzM3MTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XX0sIkNhbGlncmFwaGljLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDY1OlswLC42ODMzMywwLC4xOTQ0NSwuNzk4NDddLDY2OlswLC42ODMzMywuMDMwNDEsLjEzODg5LC42NTY4MV0sNjc6WzAsLjY4MzMzLC4wNTgzNCwuMTM4ODksLjUyNjUzXSw2ODpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzcxMzldLDY5OlswLC42ODMzMywuMDg5NDQsLjExMTExLC41Mjc3OF0sNzA6WzAsLjY4MzMzLC4wOTkzMSwuMTExMTEsLjcxODc1XSw3MTpbLjA5NzIyLC42ODMzMywuMDU5MywuMTExMTEsLjU5NDg3XSw3MjpbMCwuNjgzMzMsLjAwOTY1LC4xMTExMSwuODQ0NTJdLDczOlswLC42ODMzMywuMDczODIsMCwuNTQ0NTJdLDc0OlsuMDk3MjIsLjY4MzMzLC4xODQ3MiwuMTY2NjcsLjY3Nzc4XSw3NTpbMCwuNjgzMzMsLjAxNDQ1LC4wNTU1NiwuNzYxOTVdLDc2OlswLC42ODMzMywwLC4xMzg4OSwuNjg5NzJdLDc3OlswLC42ODMzMywwLC4xMzg4OSwxLjIwMDldLDc4OlswLC42ODMzMywuMTQ3MzYsLjA4MzM0LC44MjA0OV0sNzk6WzAsLjY4MzMzLC4wMjc3OCwuMTExMTEsLjc5NjExXSw4MDpbMCwuNjgzMzMsLjA4MjIyLC4wODMzNCwuNjk1NTZdLDgxOlsuMDk3MjIsLjY4MzMzLDAsLjExMTExLC44MTY2N10sODI6WzAsLjY4MzMzLDAsLjA4MzM0LC44NDc1XSw4MzpbMCwuNjgzMzMsLjA3NSwuMTM4ODksLjYwNTU2XSw4NDpbMCwuNjgzMzMsLjI1NDE3LDAsLjU0NDY0XSw4NTpbMCwuNjgzMzMsLjA5OTMxLC4wODMzNCwuNjI1ODNdLDg2OlswLC42ODMzMywuMDgyMjIsMCwuNjEyNzhdLDg3OlswLC42ODMzMywuMDgyMjIsLjA4MzM0LC45ODc3OF0sODg6WzAsLjY4MzMzLC4xNDY0MywuMTM4ODksLjcxMzNdLDg5OlsuMDk3MjIsLjY4MzMzLC4wODIyMiwuMDgzMzQsLjY2ODM0XSw5MDpbMCwuNjgzMzMsLjA3OTQ0LC4xMzg4OSwuNzI0NzNdLDE2MDpbMCwwLDAsMCwuMjVdfSwiRnJha3R1ci1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjkxNDEsMCwwLC4yOTU3NF0sMzQ6WzAsLjY5MTQxLDAsMCwuMjE0NzFdLDM4OlswLC42OTE0MSwwLDAsLjczNzg2XSwzOTpbMCwuNjkxNDEsMCwwLC4yMTIwMV0sNDA6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDI6WzAsLjYyMTE5LDAsMCwuMjc3NjRdLDQzOlsuMDgzMTksLjU4MjgzLDAsMCwuNzU2MjNdLDQ0OlswLC4xMDgwMywwLDAsLjI3NzY0XSw0NTpbLjA4MzE5LC41ODI4MywwLDAsLjc1NjIzXSw0NjpbMCwuMTA4MDMsMCwwLC4yNzc2NF0sNDc6Wy4yNDk4MiwuNzQ5NDcsMCwwLC41MDE4MV0sNDg6WzAsLjQ3NTM0LDAsMCwuNTAxODFdLDQ5OlswLC40NzUzNCwwLDAsLjUwMTgxXSw1MDpbMCwuNDc1MzQsMCwwLC41MDE4MV0sNTE6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTI6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTM6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTQ6WzAsLjY5MTQxLDAsMCwuNTAxODFdLDU1OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAxODFdLDU2OlswLC42OTE0MSwwLDAsLjUwMTgxXSw1NzpbLjE4OTA2LC40NzUzNCwwLDAsLjUwMTgxXSw1ODpbMCwuNDc1MzQsMCwwLC4yMTYwNl0sNTk6Wy4xMjYwNCwuNDc1MzQsMCwwLC4yMTYwNl0sNjE6Wy0uMTMwOTksLjM2ODY2LDAsMCwuNzU2MjNdLDYzOlswLC42OTE0MSwwLDAsLjM2MjQ1XSw2NTpbMCwuNjkxNDEsMCwwLC43MTc2XSw2NjpbMCwuNjkxNDEsMCwwLC44ODM5N10sNjc6WzAsLjY5MTQxLDAsMCwuNjEyNTRdLDY4OlswLC42OTE0MSwwLDAsLjgzMTU4XSw2OTpbMCwuNjkxNDEsMCwwLC42NjI3OF0sNzA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MTExOV0sNzE6WzAsLjY5MTQxLDAsMCwuNzg1MzldLDcyOlsuMDYzMDIsLjY5MTQxLDAsMCwuNzIwM10sNzM6WzAsLjY5MTQxLDAsMCwuNTU0NDhdLDc0OlsuMTI2MDQsLjY5MTQxLDAsMCwuNTUyMzFdLDc1OlswLC42OTE0MSwwLDAsLjY2ODQ1XSw3NjpbMCwuNjkxNDEsMCwwLC42NjYwMl0sNzc6WzAsLjY5MTQxLDAsMCwxLjA0OTUzXSw3ODpbMCwuNjkxNDEsMCwwLC44MzIxMl0sNzk6WzAsLjY5MTQxLDAsMCwuODI2OTldLDgwOlsuMTg5MDYsLjY5MTQxLDAsMCwuODI3NTNdLDgxOlsuMDM3ODEsLjY5MTQxLDAsMCwuODI2OTldLDgyOlswLC42OTE0MSwwLDAsLjgyODA3XSw4MzpbMCwuNjkxNDEsMCwwLC44Mjg2MV0sODQ6WzAsLjY5MTQxLDAsMCwuNjY4OTldLDg1OlswLC42OTE0MSwwLDAsLjY0NTc2XSw4NjpbMCwuNjkxNDEsMCwwLC44MzEzMV0sODc6WzAsLjY5MTQxLDAsMCwxLjA0NjAyXSw4ODpbMCwuNjkxNDEsMCwwLC43MTkyMl0sODk6Wy4xODkwNiwuNjkxNDEsMCwwLC44MzI5M10sOTA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MDIwMV0sOTE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTM6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTQ6WzAsLjY5MTQxLDAsMCwuNDk5NjVdLDk3OlswLC40NzUzNCwwLDAsLjUwMDQ2XSw5ODpbMCwuNjkxNDEsMCwwLC41MTMxNV0sOTk6WzAsLjQ3NTM0LDAsMCwuMzg5NDZdLDEwMDpbMCwuNjIxMTksMCwwLC40OTg1N10sMTAxOlswLC40NzUzNCwwLDAsLjQwMDUzXSwxMDI6Wy4xODkwNiwuNjkxNDEsMCwwLC4zMjYyNl0sMTAzOlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzN10sMTA0OlsuMTg5MDYsLjY5MTQxLDAsMCwuNTIxMjZdLDEwNTpbMCwuNjkxNDEsMCwwLC4yNzg5OV0sMTA2OlswLC42OTE0MSwwLDAsLjI4MDg4XSwxMDc6WzAsLjY5MTQxLDAsMCwuMzg5NDZdLDEwODpbMCwuNjkxNDEsMCwwLC4yNzk1M10sMTA5OlswLC40NzUzNCwwLDAsLjc2Njc2XSwxMTA6WzAsLjQ3NTM0LDAsMCwuNTI2NjZdLDExMTpbMCwuNDc1MzQsMCwwLC40ODg4NV0sMTEyOlsuMTg5MDYsLjUyMzk2LDAsMCwuNTAwNDZdLDExMzpbLjE4OTA2LC40NzUzNCwwLDAsLjQ4OTEyXSwxMTQ6WzAsLjQ3NTM0LDAsMCwuMzg5MTldLDExNTpbMCwuNDc1MzQsMCwwLC40NDI2Nl0sMTE2OlswLC42MjExOSwwLDAsLjMzMzAxXSwxMTc6WzAsLjQ3NTM0LDAsMCwuNTE3Ml0sMTE4OlswLC41MjM5NiwwLDAsLjUxMThdLDExOTpbMCwuNTIzOTYsMCwwLC43NzM1MV0sMTIwOlsuMTg5MDYsLjQ3NTM0LDAsMCwuMzg4NjVdLDEyMTpbLjE4OTA2LC40NzUzNCwwLDAsLjQ5ODg0XSwxMjI6Wy4xODkwNiwuNDc1MzQsMCwwLC4zOTA1NF0sMTYwOlswLDAsMCwwLC4yNV0sODIxNjpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sODIxNzpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sNTgxMTI6WzAsLjYyMTE5LDAsMCwuNDk3NDldLDU4MTEzOlswLC42MjExOSwwLDAsLjQ5ODNdLDU4MTE0OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzMzMjhdLDU4MTE1OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzI5MjNdLDU4MTE2OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzNDNdLDU4MTE3OlswLC42OTE0MSwwLDAsLjMzMzAxXSw1ODExODpbMCwuNjIxMTksMCwwLC4zMzQwOV0sNTgxMTk6WzAsLjQ3NTM0LDAsMCwuNTAwNzNdfSwiTWFpbi1Cb2xkIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsMCwwLC4zNV0sMzQ6WzAsLjY5NDQ0LDAsMCwuNjAyNzhdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuOTU4MzNdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSwzNzpbLjA1NTU2LC43NSwwLDAsLjk1ODMzXSwzODpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sMzk6WzAsLjY5NDQ0LDAsMCwuMzE5NDRdLDQwOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQxOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQyOlswLC43NSwwLDAsLjU3NV0sNDM6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sNDQ6Wy4xOTQ0NCwuMTU1NTYsMCwwLC4zMTk0NF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzgzMzNdLDQ2OlswLC4xNTU1NiwwLDAsLjMxOTQ0XSw0NzpbLjI1LC43NSwwLDAsLjU3NV0sNDg6WzAsLjY0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNjQ0NDQsMCwwLC41NzVdLDUwOlswLC42NDQ0NCwwLDAsLjU3NV0sNTE6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1MjpbMCwuNjQ0NDQsMCwwLC41NzVdLDUzOlswLC42NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbMCwuNjQ0NDQsMCwwLC41NzVdLDU2OlswLC42NDQ0NCwwLDAsLjU3NV0sNTc6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1ODpbMCwuNDQ0NDQsMCwwLC4zMTk0NF0sNTk6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4zMTk0NF0sNjA6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sNjE6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDYyOlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDYzOlswLC42OTQ0NCwwLDAsLjU0MzA1XSw2NDpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwwLDAsLjgxODA1XSw2NzpbMCwuNjg2MTEsMCwwLC44MzA1NV0sNjg6WzAsLjY4NjExLDAsMCwuODgxOTRdLDY5OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3MDpbMCwuNjg2MTEsMCwwLC43MjM2MV0sNzE6WzAsLjY4NjExLDAsMCwuOTA0MTZdLDcyOlswLC42ODYxMSwwLDAsLjldLDczOlswLC42ODYxMSwwLDAsLjQzNjExXSw3NDpbMCwuNjg2MTEsMCwwLC41OTQ0NF0sNzU6WzAsLjY4NjExLDAsMCwuOTAxMzhdLDc2OlswLC42ODYxMSwwLDAsLjY5MTY2XSw3NzpbMCwuNjg2MTEsMCwwLDEuMDkxNjZdLDc4OlswLC42ODYxMSwwLDAsLjldLDc5OlswLC42ODYxMSwwLDAsLjg2Mzg4XSw4MDpbMCwuNjg2MTEsMCwwLC43ODYxMV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44NjM4OF0sODI6WzAsLjY4NjExLDAsMCwuODYyNV0sODM6WzAsLjY4NjExLDAsMCwuNjM4ODldLDg0OlswLC42ODYxMSwwLDAsLjhdLDg1OlswLC42ODYxMSwwLDAsLjg4NDcyXSw4NjpbMCwuNjg2MTEsLjAxNTk3LDAsLjg2OTQ0XSw4NzpbMCwuNjg2MTEsLjAxNTk3LDAsMS4xODg4OF0sODg6WzAsLjY4NjExLDAsMCwuODY5NDRdLDg5OlswLC42ODYxMSwuMDI4NzUsMCwuODY5NDRdLDkwOlswLC42ODYxMSwwLDAsLjcwMjc3XSw5MTpbLjI1LC43NSwwLDAsLjMxOTQ0XSw5MjpbLjI1LC43NSwwLDAsLjU3NV0sOTM6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5NTpbLjMxLC4xMzQ0NCwuMDMxOTQsMCwuNTc1XSw5NzpbMCwuNDQ0NDQsMCwwLC41NTkwMl0sOTg6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDk5OlswLC40NDQ0NCwwLDAsLjUxMTExXSwxMDA6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwMTpbMCwuNDQ0NDQsMCwwLC41MjcwOF0sMTAyOlswLC42OTQ0NCwuMTA5MDMsMCwuMzUxMzldLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMDE1OTcsMCwuNTc1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwNTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMzUxMzldLDEwNzpbMCwuNjk0NDQsMCwwLC42MDY5NF0sMTA4OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuOTU4MzNdLDExMDpbMCwuNDQ0NDQsMCwwLC42Mzg4OV0sMTExOlswLC40NDQ0NCwwLDAsLjU3NV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjM4ODldLDExMzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYwNjk0XSwxMTQ6WzAsLjQ0NDQ0LDAsMCwuNDczNjFdLDExNTpbMCwuNDQ0NDQsMCwwLC40NTM2MV0sMTE2OlswLC42MzQ5MiwwLDAsLjQ0NzIyXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjM4ODldLDExODpbMCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMTk6WzAsLjQ0NDQ0LC4wMTU5NywwLC44MzA1NV0sMTIwOlswLC40NDQ0NCwwLDAsLjYwNjk0XSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNTExMTFdLDEyMzpbLjI1LC43NSwwLDAsLjU3NV0sMTI0OlsuMjUsLjc1LDAsMCwuMzE5NDRdLDEyNTpbLjI1LC43NSwwLDAsLjU3NV0sMTI2OlsuMzUsLjM0NDQ0LDAsMCwuNTc1XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuODY4NTNdLDE2ODpbMCwuNjk0NDQsMCwwLC41NzVdLDE3MjpbMCwuNDQ0NDQsMCwwLC43NjY2Nl0sMTc2OlswLC42OTQ0NCwwLDAsLjg2OTQ0XSwxNzc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUxMTExXSwxOTg6WzAsLjY4NjExLDAsMCwxLjA0MTY2XSwyMTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjE2OlsuMDQ4NjEsLjczNDcyLDAsMCwuODk0NDRdLDIyMzpbMCwuNjk0NDQsMCwwLC41OTcyMl0sMjMwOlswLC40NDQ0NCwwLDAsLjgzMDU1XSwyNDc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjQ4OlsuMDk3MjIsLjU0MTY3LDAsMCwuNTc1XSwzMDU6WzAsLjQ0NDQ0LDAsMCwuMzE5NDRdLDMzODpbMCwuNjg2MTEsMCwwLDEuMTY5NDRdLDMzOTpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sNTY3OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuMzUxMzldLDcxMDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxMTpbMCwuNjMxOTQsMCwwLC41NzVdLDcxMzpbMCwuNTk2MTEsMCwwLC41NzVdLDcxNDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxNTpbMCwuNjk0NDQsMCwwLC41NzVdLDcyODpbMCwuNjk0NDQsMCwwLC41NzVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sNzMwOlswLC42OTQ0NCwwLDAsLjg2OTQ0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTc1XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5MTU6WzAsLjY4NjExLDAsMCwuNjkxNjZdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MjM6WzAsLjY4NjExLDAsMCwuODA1NTVdLDkyNjpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTI4OlswLC42ODYxMSwwLDAsLjldLDkzMTpbMCwuNjg2MTEsMCwwLC44MzA1NV0sOTMzOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MzQ6WzAsLjY4NjExLDAsMCwuODMwNTVdLDkzNjpbMCwuNjg2MTEsMCwwLC44OTQ0NF0sOTM3OlswLC42ODYxMSwwLDAsLjgzMDU1XSw4MjExOlswLC40NDQ0NCwuMDMxOTQsMCwuNTc1XSw4MjEyOlswLC40NDQ0NCwuMDMxOTQsMCwxLjE0OTk5XSw4MjE2OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjE3OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjIwOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjIxOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjI0OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNTExMTFdLDgyMjU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41MTExMV0sODI0MjpbMCwuNTU1NTYsMCwwLC4zNDQ0NF0sODQwNzpbMCwuNzI0NDQsLjE1NDg2LDAsLjU3NV0sODQ2MzpbMCwuNjk0NDQsMCwwLC42Njc1OV0sODQ2NTpbMCwuNjk0NDQsMCwwLC44MzA1NV0sODQ2NzpbMCwuNjk0NDQsMCwwLC40NzM2MV0sODQ3MjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0MDI3XSw4NDc2OlswLC42OTQ0NCwwLDAsLjgzMDU1XSw4NTAxOlswLC42OTQ0NCwwLDAsLjcwMjc3XSw4NTkyOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODU5MzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjU3NV0sODU5NDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41NzVdLDg1OTY6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NTk3OlsuMjUsLjc1LDAsMCwuNTc1XSw4NTk4OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NTk5OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAwOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjM2OlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODYzNzpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NDA6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NjQxOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODY1NjpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY1ODpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY2MDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NjE6Wy4yNSwuNzUsMCwwLC43MDI3N10sODcwNDpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sODcwNjpbMCwuNjk0NDQsLjA2Mzg5LDAsLjYyODQ3XSw4NzA3OlswLC42OTQ0NCwwLDAsLjYzODg5XSw4NzA5OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSw4NzExOlswLC42ODYxMSwwLDAsLjk1ODMzXSw4NzEyOlsuMDg1NTYsLjU4NTU2LDAsMCwuNzY2NjZdLDg3MTU6Wy4wODU1NiwuNTg1NTYsMCwwLC43NjY2Nl0sODcyMjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4NzIzOlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg3MjU6Wy4yNSwuNzUsMCwwLC41NzVdLDg3MjY6Wy4yNSwuNzUsMCwwLC41NzVdLDg3Mjc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw4NzI4OlstLjAyNjM5LC40NzM2MSwwLDAsLjU3NV0sODcyOTpbLS4wMjYzOSwuNDczNjEsMCwwLC41NzVdLDg3MzA6Wy4xOCwuODIsMCwwLC45NTgzM10sODczMzpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sODczNDpbMCwuNDQ0NDQsMCwwLDEuMTQ5OTldLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzk6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sODc0MTpbLjI1LC43NSwwLDAsLjU3NV0sODc0MzpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NDpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NzpbLjE5NDQ0LC42OTQ0NCwuMTI3NzgsMCwuNTY4NzVdLDg3NjQ6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDg3Njg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zMTk0NF0sODc3MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4NzczOlsuMDI3LC42MzgsMCwwLC44OTRdLDg3NzY6Wy4wMjQ0NCwuNTI0NDQsMCwwLC44OTQ0NF0sODc4MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4ODAxOlsuMDAyMjIsLjUwMjIyLDAsMCwuODk0NDRdLDg4MDQ6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgwNTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODEwOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODExOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODI2OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mjc6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sODgzNDpbLjA4NTU2LC41ODU1NiwwLDAsLjg5NDQ0XSw4ODM1OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mzg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgzOTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODQ2OlswLC41NTU1NiwwLDAsLjc2NjY2XSw4ODQ5OlsuMTk2NjcsLjY5NjY3LDAsMCwuODk0NDRdLDg4NTA6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODg1MTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MzpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU0OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sODg1NjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU3OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NjY6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njc6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njg6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg4Njk6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg5MDA6Wy0uMDI2MzksLjQ3MzYxLDAsMCwuNTc1XSw4OTAxOlstLjAyNjM5LC40NzM2MSwwLDAsLjMxOTQ0XSw4OTAyOlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sODk2ODpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTY5OlsuMjUsLjc1LDAsMCwuNTExMTFdLDg5NzA6Wy4yNSwuNzUsMCwwLC41MTExMV0sODk3MTpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTk0OlstLjEzODg5LC4zNjExMSwwLDAsMS4xNDk5OV0sODk5NTpbLS4xMzg4OSwuMzYxMTEsMCwwLDEuMTQ5OTldLDk2NTE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDEuMDIyMjJdLDk2NTc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw5NjYxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjAyMjIyXSw5NjY3OlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sOTcxMTpbLjE5NDQ0LC42OTQ0NCwwLDAsMS4xNDk5OV0sOTgyNDpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODI1OlsuMTI5NjMsLjY5NDQ0LDAsMCwuODk0NDRdLDk4MjY6Wy4xMjk2MywuNjk0NDQsMCwwLC44OTQ0NF0sOTgyNzpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODM3OlswLC43NSwwLDAsLjQ0NzIyXSw5ODM4OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNDQ3MjJdLDk4Mzk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDcyMl0sMTAyMTY6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTAyMTc6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTA4MTU6WzAsLjY4NjExLDAsMCwuOV0sMTA5Mjc6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sMTA5Mjg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sNTczNzY6Wy4xOTQ0NCwuNjk0NDQsMCwwLDBdfSwiTWFpbi1Cb2xkSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjExNDE3LDAsLjM4NjExXSwzNDpbMCwuNjk0NDQsLjA3OTM5LDAsLjYyMDU1XSwzNTpbLjE5NDQ0LC42OTQ0NCwuMDY4MzMsMCwuOTQ0NDRdLDM3OlsuMDU1NTYsLjc1LC4xMjg2MSwwLC45NDQ0NF0sMzg6WzAsLjY5NDQ0LC4wODUyOCwwLC44ODU1NV0sMzk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNDA6Wy4yNSwuNzUsLjE1ODA2LDAsLjQ3MzMzXSw0MTpbLjI1LC43NSwuMDMzMDYsMCwuNDczMzNdLDQyOlswLC43NSwuMTQzMzMsMCwuNTkxMTFdLDQzOlsuMTAzMzMsLjYwMzMzLC4wMzMwNiwwLC44ODU1NV0sNDQ6Wy4xOTQ0NCwuMTQ3MjIsMCwwLC4zNTU1NV0sNDU6WzAsLjQ0NDQ0LC4wMjYxMSwwLC40MTQ0NF0sNDY6WzAsLjE0NzIyLDAsMCwuMzU1NTVdLDQ3OlsuMjUsLjc1LC4xNTgwNiwwLC41OTExMV0sNDg6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNDk6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTA6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTE6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTI6Wy4xOTQ0NCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1MzpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NDpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NTpbLjE5NDQ0LC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU2OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU3OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU4OlswLC40NDQ0NCwuMDY2OTUsMCwuMzU1NTVdLDU5OlsuMTk0NDQsLjQ0NDQ0LC4wNjY5NSwwLC4zNTU1NV0sNjE6Wy0uMTA4ODksLjM5MTExLC4wNjgzMywwLC44ODU1NV0sNjM6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNjQ6WzAsLjY5NDQ0LC4wOTIwOCwwLC44ODU1NV0sNjU6WzAsLjY4NjExLDAsMCwuODY1NTVdLDY2OlswLC42ODYxMSwuMDk5MiwwLC44MTY2Nl0sNjc6WzAsLjY4NjExLC4xNDIwOCwwLC44MjY2Nl0sNjg6WzAsLjY4NjExLC4wOTA2MiwwLC44NzU1NV0sNjk6WzAsLjY4NjExLC4xMTQzMSwwLC43NTY2Nl0sNzA6WzAsLjY4NjExLC4xMjkwMywwLC43MjcyMl0sNzE6WzAsLjY4NjExLC4wNzM0NywwLC44OTUyN10sNzI6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw3MzpbMCwuNjg2MTEsLjE1NjgxLDAsLjQ3MTY2XSw3NDpbMCwuNjg2MTEsLjE0NSwwLC42MTA1NV0sNzU6WzAsLjY4NjExLC4xNDIwOCwwLC44OTQ5OV0sNzY6WzAsLjY4NjExLDAsMCwuNjk3NzddLDc3OlswLC42ODYxMSwuMTcyMDgsMCwxLjA3Mjc3XSw3ODpbMCwuNjg2MTEsLjE3MjA4LDAsLjg5NjFdLDc5OlswLC42ODYxMSwuMDkwNjIsMCwuODU0OTldLDgwOlswLC42ODYxMSwuMDk5MiwwLC43ODcyMV0sODE6Wy4xOTQ0NCwuNjg2MTEsLjA5MDYyLDAsLjg1NDk5XSw4MjpbMCwuNjg2MTEsLjAyNTU5LDAsLjg1OTQ0XSw4MzpbMCwuNjg2MTEsLjExMjY0LDAsLjY0OTk5XSw4NDpbMCwuNjg2MTEsLjEyOTAzLDAsLjc5NjFdLDg1OlswLC42ODYxMSwuMTcyMDgsMCwuODgwODNdLDg2OlswLC42ODYxMSwuMTg2MjUsMCwuODY1NTVdLDg3OlswLC42ODYxMSwuMTg2MjUsMCwxLjE1OTk5XSw4ODpbMCwuNjg2MTEsLjE1NjgxLDAsLjg2NTU1XSw4OTpbMCwuNjg2MTEsLjE5ODAzLDAsLjg2NTU1XSw5MDpbMCwuNjg2MTEsLjE0MjA4LDAsLjcwODg4XSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zNTYxMV0sOTM6Wy4yNSwuNzUsLjA5OTcyLDAsLjM1NjExXSw5NDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw5NTpbLjMxLC4xMzQ0NCwuMDk4MTEsMCwuNTkxMTFdLDk3OlswLC40NDQ0NCwuMDk0MjYsMCwuNTkxMTFdLDk4OlswLC42OTQ0NCwuMDc4NjEsMCwuNTMyMjJdLDk5OlswLC40NDQ0NCwuMDUyMjIsMCwuNTMyMjJdLDEwMDpbMCwuNjk0NDQsLjEwODYxLDAsLjU5MTExXSwxMDE6WzAsLjQ0NDQ0LC4wODUsMCwuNTMyMjJdLDEwMjpbLjE5NDQ0LC42OTQ0NCwuMjE3NzgsMCwuNF0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4xMDUsMCwuNTMyMjJdLDEwNDpbMCwuNjk0NDQsLjA5NDI2LDAsLjU5MTExXSwxMDU6WzAsLjY5MzI2LC4xMTM4NywwLC4zNTU1NV0sMTA2OlsuMTk0NDQsLjY5MzI2LC4xNjcyLDAsLjM1NTU1XSwxMDc6WzAsLjY5NDQ0LC4xMTExMSwwLC41MzIyMl0sMTA4OlswLC42OTQ0NCwuMTA4NjEsMCwuMjk2NjZdLDEwOTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjk0NDQ0XSwxMTA6WzAsLjQ0NDQ0LC4wOTQyNiwwLC42NDk5OV0sMTExOlswLC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMjpbLjE5NDQ0LC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjUzMjIyXSwxMTQ6WzAsLjQ0NDQ0LC4xMTExMSwwLC41MDE2N10sMTE1OlswLC40NDQ0NCwuMDgxNjcsMCwuNDg2OTRdLDExNjpbMCwuNjM0OTIsLjA5NjM5LDAsLjM4NV0sMTE3OlswLC40NDQ0NCwuMDk0MjYsMCwuNjIwNTVdLDExODpbMCwuNDQ0NDQsLjExMTExLDAsLjUzMjIyXSwxMTk6WzAsLjQ0NDQ0LC4xMTExMSwwLC43Njc3N10sMTIwOlswLC40NDQ0NCwuMTI1ODMsMCwuNTYwNTVdLDEyMTpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjU2MTY2XSwxMjI6WzAsLjQ0NDQ0LC4xMzg4OSwwLC40OTA1NV0sMTI2OlsuMzUsLjM0NDQ0LC4xMTQ3MiwwLC41OTExMV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwuMTE0NzMsMCwuNTkxMTFdLDE3NjpbMCwuNjk0NDQsMCwwLC45NDg4OF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUzMjIyXSwxOTg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMDIyNzddLDIxNjpbLjA0ODYxLC43MzQ3MiwuMDkwNjIsMCwuODg1NTVdLDIyMzpbLjE5NDQ0LC42OTQ0NCwuMDk3MzYsMCwuNjY1XSwyMzA6WzAsLjQ0NDQ0LC4wODUsMCwuODI2NjZdLDI0ODpbLjA5NzIyLC41NDE2NywuMDk0NTgsMCwuNTkxMTFdLDMwNTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjM1NTU1XSwzMzg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMTQwNTRdLDMzOTpbMCwuNDQ0NDQsLjA4NSwwLC44MjY2Nl0sNTY3OlsuMTk0NDQsLjQ0NDQ0LC4wNDYxMSwwLC4zODVdLDcxMDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw3MTE6WzAsLjYzMTk0LC4wODI3MSwwLC41OTExMV0sNzEzOlswLC41OTQ0NCwuMTA0NDQsMCwuNTkxMTFdLDcxNDpbMCwuNjk0NDQsLjA4NTI4LDAsLjU5MTExXSw3MTU6WzAsLjY5NDQ0LDAsMCwuNTkxMTFdLDcyODpbMCwuNjk0NDQsLjEwMzMzLDAsLjU5MTExXSw3Mjk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNzMwOlswLC42OTQ0NCwwLDAsLjk0ODg4XSw3MzI6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNzMzOlswLC42OTQ0NCwuMTE0NzIsMCwuNTkxMTFdLDkxNTpbMCwuNjg2MTEsLjEyOTAzLDAsLjY5Nzc3XSw5MTY6WzAsLjY4NjExLDAsMCwuOTQ0NDRdLDkyMDpbMCwuNjg2MTEsLjA5MDYyLDAsLjg4NTU1XSw5MjM6WzAsLjY4NjExLDAsMCwuODA2NjZdLDkyNjpbMCwuNjg2MTEsLjE1MDkyLDAsLjc2Nzc3XSw5Mjg6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw5MzE6WzAsLjY4NjExLC4xMTQzMSwwLC44MjY2Nl0sOTMzOlswLC42ODYxMSwuMTA3NzgsMCwuODg1NTVdLDkzNDpbMCwuNjg2MTEsLjA1NjMyLDAsLjgyNjY2XSw5MzY6WzAsLjY4NjExLC4xMDc3OCwwLC44ODU1NV0sOTM3OlswLC42ODYxMSwuMDk5MiwwLC44MjY2Nl0sODIxMTpbMCwuNDQ0NDQsLjA5ODExLDAsLjU5MTExXSw4MjEyOlswLC40NDQ0NCwuMDk4MTEsMCwxLjE4MjIxXSw4MjE2OlswLC42OTQ0NCwuMTI5NDUsMCwuMzU1NTVdLDgyMTc6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sODIyMDpbMCwuNjk0NDQsLjE2NzcyLDAsLjYyMDU1XSw4MjIxOlswLC42OTQ0NCwuMDc5MzksMCwuNjIwNTVdfSwiTWFpbi1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDMzOlswLC42OTQ0NCwuMTI0MTcsMCwuMzA2NjddLDM0OlswLC42OTQ0NCwuMDY5NjEsMCwuNTE0NDRdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNjYxNiwwLC44MTc3N10sMzc6Wy4wNTU1NiwuNzUsLjEzNjM5LDAsLjgxNzc3XSwzODpbMCwuNjk0NDQsLjA5Njk0LDAsLjc2NjY2XSwzOTpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw0MDpbLjI1LC43NSwuMTYxOTQsMCwuNDA4ODldLDQxOlsuMjUsLjc1LC4wMzY5NCwwLC40MDg4OV0sNDI6WzAsLjc1LC4xNDkxNywwLC41MTExMV0sNDM6Wy4wNTY2NywuNTYxNjcsLjAzNjk0LDAsLjc2NjY2XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjMwNjY3XSw0NTpbMCwuNDMwNTYsLjAyODI2LDAsLjM1Nzc4XSw0NjpbMCwuMTA1NTYsMCwwLC4zMDY2N10sNDc6Wy4yNSwuNzUsLjE2MTk0LDAsLjUxMTExXSw0ODpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw0OTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MDpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MjpbLjE5NDQ0LC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDUzOlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU0OlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU1OlsuMTk0NDQsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTY6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTc6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTg6WzAsLjQzMDU2LC4wNTgyLDAsLjMwNjY3XSw1OTpbLjE5NDQ0LC40MzA1NiwuMDU4MiwwLC4zMDY2N10sNjE6Wy0uMTMzMTMsLjM2Njg3LC4wNjYxNiwwLC43NjY2Nl0sNjM6WzAsLjY5NDQ0LC4xMjI1LDAsLjUxMTExXSw2NDpbMCwuNjk0NDQsLjA5NTk3LDAsLjc2NjY2XSw2NTpbMCwuNjgzMzMsMCwwLC43NDMzM10sNjY6WzAsLjY4MzMzLC4xMDI1NywwLC43MDM4OV0sNjc6WzAsLjY4MzMzLC4xNDUyOCwwLC43MTU1NV0sNjg6WzAsLjY4MzMzLC4wOTQwMywwLC43NTVdLDY5OlswLC42ODMzMywuMTIwMjgsMCwuNjc4MzNdLDcwOlswLC42ODMzMywuMTMzMDUsMCwuNjUyNzddLDcxOlswLC42ODMzMywuMDg3MjIsMCwuNzczNjFdLDcyOlswLC42ODMzMywuMTYzODksMCwuNzQzMzNdLDczOlswLC42ODMzMywuMTU4MDYsMCwuMzg1NTVdLDc0OlswLC42ODMzMywuMTQwMjgsMCwuNTI1XSw3NTpbMCwuNjgzMzMsLjE0NTI4LDAsLjc2ODg4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjcyMl0sNzc6WzAsLjY4MzMzLC4xNjM4OSwwLC44OTY2Nl0sNzg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sNzk6WzAsLjY4MzMzLC4wOTQwMywwLC43NjY2Nl0sODA6WzAsLjY4MzMzLC4xMDI1NywwLC42NzgzM10sODE6Wy4xOTQ0NCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw4MjpbMCwuNjgzMzMsLjAzODY4LDAsLjcyOTQ0XSw4MzpbMCwuNjgzMzMsLjExOTcyLDAsLjU2MjIyXSw4NDpbMCwuNjgzMzMsLjEzMzA1LDAsLjcxNTU1XSw4NTpbMCwuNjgzMzMsLjE2Mzg5LDAsLjc0MzMzXSw4NjpbMCwuNjgzMzMsLjE4MzYxLDAsLjc0MzMzXSw4NzpbMCwuNjgzMzMsLjE4MzYxLDAsLjk5ODg4XSw4ODpbMCwuNjgzMzMsLjE1ODA2LDAsLjc0MzMzXSw4OTpbMCwuNjgzMzMsLjE5MzgzLDAsLjc0MzMzXSw5MDpbMCwuNjgzMzMsLjE0NTI4LDAsLjYxMzMzXSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zMDY2N10sOTM6Wy4yNSwuNzUsLjEwNTI4LDAsLjMwNjY3XSw5NDpbMCwuNjk0NDQsLjA2NjQ2LDAsLjUxMTExXSw5NTpbLjMxLC4xMjA1NiwuMDkyMDgsMCwuNTExMTFdLDk3OlswLC40MzA1NiwuMDc2NzEsMCwuNTExMTFdLDk4OlswLC42OTQ0NCwuMDYzMTIsMCwuNDZdLDk5OlswLC40MzA1NiwuMDU2NTMsMCwuNDZdLDEwMDpbMCwuNjk0NDQsLjEwMzMzLDAsLjUxMTExXSwxMDE6WzAsLjQzMDU2LC4wNzUxNCwwLC40Nl0sMTAyOlsuMTk0NDQsLjY5NDQ0LC4yMTE5NCwwLC4zMDY2N10sMTAzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTA0OlswLC42OTQ0NCwuMDc2NzEsMCwuNTExMTFdLDEwNTpbMCwuNjU1MzYsLjEwMTksMCwuMzA2NjddLDEwNjpbLjE5NDQ0LC42NTUzNiwuMTQ0NjcsMCwuMzA2NjddLDEwNzpbMCwuNjk0NDQsLjEwNzY0LDAsLjQ2XSwxMDg6WzAsLjY5NDQ0LC4xMDMzMywwLC4yNTU1NV0sMTA5OlswLC40MzA1NiwuMDc2NzEsMCwuODE3NzddLDExMDpbMCwuNDMwNTYsLjA3NjcxLDAsLjU2MjIyXSwxMTE6WzAsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEyOlsuMTk0NDQsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTE0OlswLC40MzA1NiwuMTA3NjQsMCwuNDIxNjZdLDExNTpbMCwuNDMwNTYsLjA4MjA4LDAsLjQwODg5XSwxMTY6WzAsLjYxNTA4LC4wOTQ4NiwwLC4zMzIyMl0sMTE3OlswLC40MzA1NiwuMDc2NzEsMCwuNTM2NjZdLDExODpbMCwuNDMwNTYsLjEwNzY0LDAsLjQ2XSwxMTk6WzAsLjQzMDU2LC4xMDc2NCwwLC42NjQ0NF0sMTIwOlswLC40MzA1NiwuMTIwNDIsMCwuNDYzODldLDEyMTpbLjE5NDQ0LC40MzA1NiwuMDg4NDcsMCwuNDg1NTVdLDEyMjpbMCwuNDMwNTYsLjEyMjkyLDAsLjQwODg5XSwxMjY6Wy4zNSwuMzE3ODYsLjExNTg1LDAsLjUxMTExXSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY2Nzg2LC4xMDQ3NCwwLC41MTExMV0sMTc2OlswLC42OTQ0NCwwLDAsLjgzMTI5XSwxODQ6Wy4xNzAxNCwwLDAsMCwuNDZdLDE5ODpbMCwuNjgzMzMsLjEyMDI4LDAsLjg4Mjc3XSwyMTY6Wy4wNDg2MSwuNzMxOTQsLjA5NDAzLDAsLjc2NjY2XSwyMjM6Wy4xOTQ0NCwuNjk0NDQsLjEwNTE0LDAsLjUzNjY2XSwyMzA6WzAsLjQzMDU2LC4wNzUxNCwwLC43MTU1NV0sMjQ4OlsuMDk3MjIsLjUyNzc4LC4wOTE5NCwwLC41MTExMV0sMzM4OlswLC42ODMzMywuMTIwMjgsMCwuOTg0OTldLDMzOTpbMCwuNDMwNTYsLjA3NTE0LDAsLjcxNTU1XSw3MTA6WzAsLjY5NDQ0LC4wNjY0NiwwLC41MTExMV0sNzExOlswLC42Mjg0NywuMDgyOTUsMCwuNTExMTFdLDcxMzpbMCwuNTYxNjcsLjEwMzMzLDAsLjUxMTExXSw3MTQ6WzAsLjY5NDQ0LC4wOTY5NCwwLC41MTExMV0sNzE1OlswLC42OTQ0NCwwLDAsLjUxMTExXSw3Mjg6WzAsLjY5NDQ0LC4xMDgwNiwwLC41MTExMV0sNzI5OlswLC42Njc4NiwuMTE3NTIsMCwuMzA2NjddLDczMDpbMCwuNjk0NDQsMCwwLC44MzEyOV0sNzMyOlswLC42Njc4NiwuMTE1ODUsMCwuNTExMTFdLDczMzpbMCwuNjk0NDQsLjEyMjUsMCwuNTExMTFdLDkxNTpbMCwuNjgzMzMsLjEzMzA1LDAsLjYyNzIyXSw5MTY6WzAsLjY4MzMzLDAsMCwuODE3NzddLDkyMDpbMCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw5MjM6WzAsLjY4MzMzLDAsMCwuNjkyMjJdLDkyNjpbMCwuNjgzMzMsLjE1Mjk0LDAsLjY2NDQ0XSw5Mjg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sOTMxOlswLC42ODMzMywuMTIwMjgsMCwuNzE1NTVdLDkzMzpbMCwuNjgzMzMsLjExMTExLDAsLjc2NjY2XSw5MzQ6WzAsLjY4MzMzLC4wNTk4NiwwLC43MTU1NV0sOTM2OlswLC42ODMzMywuMTExMTEsMCwuNzY2NjZdLDkzNzpbMCwuNjgzMzMsLjEwMjU3LDAsLjcxNTU1XSw4MjExOlswLC40MzA1NiwuMDkyMDgsMCwuNTExMTFdLDgyMTI6WzAsLjQzMDU2LC4wOTIwOCwwLDEuMDIyMjJdLDgyMTY6WzAsLjY5NDQ0LC4xMjQxNywwLC4zMDY2N10sODIxNzpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw4MjIwOlswLC42OTQ0NCwuMTY4NSwwLC41MTQ0NF0sODIyMTpbMCwuNjk0NDQsLjA2OTYxLDAsLjUxNDQ0XSw4NDYzOlswLC42ODg4OSwwLDAsLjU0MDI4XX0sIk1haW4tUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjI3Nzc4XSw0NTpbMCwuNDMwNTYsMCwwLC4zMzMzM10sNDY6WzAsLjEwNTU2LDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LDAsMCwuNV0sNDg6WzAsLjY0NDQ0LDAsMCwuNV0sNDk6WzAsLjY0NDQ0LDAsMCwuNV0sNTA6WzAsLjY0NDQ0LDAsMCwuNV0sNTE6WzAsLjY0NDQ0LDAsMCwuNV0sNTI6WzAsLjY0NDQ0LDAsMCwuNV0sNTM6WzAsLjY0NDQ0LDAsMCwuNV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNV0sNTU6WzAsLjY0NDQ0LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6WzAsLjY0NDQ0LDAsMCwuNV0sNTg6WzAsLjQzMDU2LDAsMCwuMjc3NzhdLDU5OlsuMTk0NDQsLjQzMDU2LDAsMCwuMjc3NzhdLDYwOlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw2MTpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sNjI6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sNjU6WzAsLjY4MzMzLDAsMCwuNzVdLDY2OlswLC42ODMzMywwLDAsLjcwODM0XSw2NzpbMCwuNjgzMzMsMCwwLC43MjIyMl0sNjg6WzAsLjY4MzMzLDAsMCwuNzYzODldLDY5OlswLC42ODMzMywwLDAsLjY4MDU2XSw3MDpbMCwuNjgzMzMsMCwwLC42NTI3OF0sNzE6WzAsLjY4MzMzLDAsMCwuNzg0NzJdLDcyOlswLC42ODMzMywwLDAsLjc1XSw3MzpbMCwuNjgzMzMsMCwwLC4zNjExMV0sNzQ6WzAsLjY4MzMzLDAsMCwuNTEzODldLDc1OlswLC42ODMzMywwLDAsLjc3Nzc4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjVdLDc3OlswLC42ODMzMywwLDAsLjkxNjY3XSw3ODpbMCwuNjgzMzMsMCwwLC43NV0sNzk6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDgwOlswLC42ODMzMywwLDAsLjY4MDU2XSw4MTpbLjE5NDQ0LC42ODMzMywwLDAsLjc3Nzc4XSw4MjpbMCwuNjgzMzMsMCwwLC43MzYxMV0sODM6WzAsLjY4MzMzLDAsMCwuNTU1NTZdLDg0OlswLC42ODMzMywwLDAsLjcyMjIyXSw4NTpbMCwuNjgzMzMsMCwwLC43NV0sODY6WzAsLjY4MzMzLC4wMTM4OSwwLC43NV0sODc6WzAsLjY4MzMzLC4wMTM4OSwwLDEuMDI3NzhdLDg4OlswLC42ODMzMywwLDAsLjc1XSw4OTpbMCwuNjgzMzMsLjAyNSwwLC43NV0sOTA6WzAsLjY4MzMzLDAsMCwuNjExMTFdLDkxOlsuMjUsLjc1LDAsMCwuMjc3NzhdLDkyOlsuMjUsLjc1LDAsMCwuNV0sOTM6Wy4yNSwuNzUsMCwwLC4yNzc3OF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zMSwuMTIwNTYsLjAyNzc4LDAsLjVdLDk3OlswLC40MzA1NiwwLDAsLjVdLDk4OlswLC42OTQ0NCwwLDAsLjU1NTU2XSw5OTpbMCwuNDMwNTYsMCwwLC40NDQ0NV0sMTAwOlswLC42OTQ0NCwwLDAsLjU1NTU2XSwxMDE6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEwMjpbMCwuNjk0NDQsLjA3Nzc4LDAsLjMwNTU2XSwxMDM6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjVdLDEwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sMTA1OlswLC42Njc4NiwwLDAsLjI3Nzc4XSwxMDY6Wy4xOTQ0NCwuNjY3ODYsMCwwLC4zMDU1Nl0sMTA3OlswLC42OTQ0NCwwLDAsLjUyNzc4XSwxMDg6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44MzMzNF0sMTEwOlswLC40MzA1NiwwLDAsLjU1NTU2XSwxMTE6WzAsLjQzMDU2LDAsMCwuNV0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsMCwuNTU1NTZdLDExMzpbLjE5NDQ0LC40MzA1NiwwLDAsLjUyNzc4XSwxMTQ6WzAsLjQzMDU2LDAsMCwuMzkxNjddLDExNTpbMCwuNDMwNTYsMCwwLC4zOTQ0NV0sMTE2OlswLC42MTUwOCwwLDAsLjM4ODg5XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTU1NTZdLDExODpbMCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMTk6WzAsLjQzMDU2LC4wMTM4OSwwLC43MjIyMl0sMTIwOlswLC40MzA1NiwwLDAsLjUyNzc4XSwxMjE6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMjI6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEyMzpbLjI1LC43NSwwLDAsLjVdLDEyNDpbLjI1LC43NSwwLDAsLjI3Nzc4XSwxMjU6Wy4yNSwuNzUsMCwwLC41XSwxMjY6Wy4zNSwuMzE3ODYsMCwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuNzY5MDldLDE2NzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSwxNjg6WzAsLjY2Nzg2LDAsMCwuNV0sMTcyOlswLC40MzA1NiwwLDAsLjY2NjY3XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzVdLDE3NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwxODI6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ0NDQ1XSwxOTg6WzAsLjY4MzMzLDAsMCwuOTAyNzhdLDIxNTpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwyMTY6Wy4wNDg2MSwuNzMxOTQsMCwwLC43Nzc3OF0sMjIzOlswLC42OTQ0NCwwLDAsLjVdLDIzMDpbMCwuNDMwNTYsMCwwLC43MjIyMl0sMjQ3OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDI0ODpbLjA5NzIyLC41Mjc3OCwwLDAsLjVdLDMwNTpbMCwuNDMwNTYsMCwwLC4yNzc3OF0sMzM4OlswLC42ODMzMywwLDAsMS4wMTM4OV0sMzM5OlswLC40MzA1NiwwLDAsLjc3Nzc4XSw1Njc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC4zMDU1Nl0sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjI4NDcsMCwwLC41XSw3MTM6WzAsLjU2Nzc4LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42Njc4NiwwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzVdLDczMjpbMCwuNjY3ODYsMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42ODMzMywwLDAsLjYyNV0sOTE2OlswLC42ODMzMywwLDAsLjgzMzM0XSw5MjA6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDkyMzpbMCwuNjgzMzMsMCwwLC42OTQ0NV0sOTI2OlswLC42ODMzMywwLDAsLjY2NjY3XSw5Mjg6WzAsLjY4MzMzLDAsMCwuNzVdLDkzMTpbMCwuNjgzMzMsMCwwLC43MjIyMl0sOTMzOlswLC42ODMzMywwLDAsLjc3Nzc4XSw5MzQ6WzAsLjY4MzMzLDAsMCwuNzIyMjJdLDkzNjpbMCwuNjgzMzMsMCwwLC43Nzc3OF0sOTM3OlswLC42ODMzMywwLDAsLjcyMjIyXSw4MjExOlswLC40MzA1NiwuMDI3NzgsMCwuNV0sODIxMjpbMCwuNDMwNTYsLjAyNzc4LDAsMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIxNzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIyMDpbMCwuNjk0NDQsMCwwLC41XSw4MjIxOlswLC42OTQ0NCwwLDAsLjVdLDgyMjQ6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDQ0NV0sODIyNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSw4MjMwOlswLC4xMjMsMCwwLDEuMTcyXSw4MjQyOlswLC41NTU1NiwwLDAsLjI3NV0sODQwNzpbMCwuNzE0NDQsLjE1MzgyLDAsLjVdLDg0NjM6WzAsLjY4ODg5LDAsMCwuNTQwMjhdLDg0NjU6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg0Njc6WzAsLjY5NDQ0LDAsLjExMTExLC40MTY2N10sODQ3MjpbLjE5NDQ0LC40MzA1NiwwLC4xMTExMSwuNjM2NDZdLDg0NzY6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg1MDE6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg1OTI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NTkzOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNV0sODU5NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41XSw4NTk2OlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODU5NzpbLjI1LC43NSwwLDAsLjVdLDg1OTg6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg1OTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDA6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MTQ6Wy4wMTEsLjUxMSwwLDAsMV0sODYxNzpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYxODpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYzNjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2Mzc6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjQwOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY0MTpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTI6Wy4wMTEsLjY3MSwwLDAsMV0sODY1NjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY1ODpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY2MDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NjE6Wy4yNSwuNzUsMCwwLC42MTExMV0sODcwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwNjpbMCwuNjk0NDQsLjA1NTU2LC4wODMzNCwuNTMwOV0sODcwNzpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwOTpbLjA1NTU2LC43NSwwLDAsLjVdLDg3MTE6WzAsLjY4MzMzLDAsMCwuODMzMzRdLDg3MTI6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MTU6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MjI6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODcyMzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4NzI1OlsuMjUsLjc1LDAsMCwuNV0sODcyNjpbLjI1LC43NSwwLDAsLjVdLDg3Mjc6Wy0uMDM0NzIsLjQ2NTI4LDAsMCwuNV0sODcyODpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4NzI5OlstLjA1NTU1LC40NDQ0NSwwLDAsLjVdLDg3MzA6Wy4yLC44LDAsMCwuODMzMzRdLDg3MzM6WzAsLjQzMDU2LDAsMCwuNzc3NzhdLDg3MzQ6WzAsLjQzMDU2LDAsMCwxXSw4NzM2OlswLC42OTIyNCwwLDAsLjcyMjIyXSw4NzM5OlsuMjUsLjc1LDAsMCwuMjc3NzhdLDg3NDE6Wy4yNSwuNzUsMCwwLC41XSw4NzQzOlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ0OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ1OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ2OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ3OlsuMTk0NDQsLjY5NDQ0LC4xMTExMSwwLC40MTY2N10sODc2NDpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sODc2ODpbLjE5NDQ0LC42OTQ0NCwwLDAsLjI3Nzc4XSw4NzcxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4NzczOlstLjAyMiwuNTg5LDAsMCwuNzc4XSw4Nzc2OlstLjAxNjg4LC40ODMxMiwwLDAsLjc3Nzc4XSw4NzgxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4Nzg0OlstLjEzMywuNjczLDAsMCwuNzc4XSw4ODAxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4ODA0OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4MDU6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODgxMDpbLjAzOTEsLjUzOTEsMCwwLDFdLDg4MTE6Wy4wMzkxLC41MzkxLDAsMCwxXSw4ODI2OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODI3OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM0OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM1OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4Mzk6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODg0NjpbMCwuNTU1NTYsMCwwLC42NjY2N10sODg0OTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODUwOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NTE6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTI6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTM6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NDpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODU1OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDg4NTY6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODY2OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY3OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY4OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODY5OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODcyOlsuMjQ5LC43NSwwLDAsLjg2N10sODkwMDpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4OTAxOlstLjA1NTU1LC40NDQ0NSwwLDAsLjI3Nzc4XSw4OTAyOlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDg5MDQ6Wy4wMDUsLjUwNSwwLDAsLjldLDg5NDI6Wy4wMywuOTAzLDAsMCwuMjc4XSw4OTQzOlstLjE5LC4zMTMsMCwwLDEuMTcyXSw4OTQ1OlstLjEsLjgyMywwLDAsMS4yODJdLDg5Njg6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk2OTpbLjI1LC43NSwwLDAsLjQ0NDQ1XSw4OTcwOlsuMjUsLjc1LDAsMCwuNDQ0NDVdLDg5NzE6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk5NDpbLS4xNDIzNiwuMzU3NjQsMCwwLDFdLDg5OTU6Wy0uMTQyMzYsLjM1NzY0LDAsMCwxXSw5MTM2OlsuMjQ0LC43NDQsMCwwLC40MTJdLDkxMzc6Wy4yNDQsLjc0NSwwLDAsLjQxMl0sOTY1MTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjg4ODg5XSw5NjU3OlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDk2NjE6Wy4xOTQ0NCwuNjk0NDQsMCwwLC44ODg4OV0sOTY2NzpbLS4wMzQ3MiwuNDY1MjgsMCwwLC41XSw5NzExOlsuMTk0NDQsLjY5NDQ0LDAsMCwxXSw5ODI0OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4MjU6Wy4xMjk2MywuNjk0NDQsMCwwLC43Nzc3OF0sOTgyNjpbLjEyOTYzLC42OTQ0NCwwLDAsLjc3Nzc4XSw5ODI3OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4Mzc6WzAsLjc1LDAsMCwuMzg4ODldLDk4Mzg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zODg4OV0sOTgzOTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjM4ODg5XSwxMDIxNjpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIxNzpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIyMjpbLjI0NCwuNzQ0LDAsMCwuNDEyXSwxMDIyMzpbLjI0NCwuNzQ1LDAsMCwuNDEyXSwxMDIyOTpbLjAxMSwuNTExLDAsMCwxLjYwOV0sMTAyMzA6Wy4wMTEsLjUxMSwwLDAsMS42MzhdLDEwMjMxOlsuMDExLC41MTEsMCwwLDEuODU5XSwxMDIzMjpbLjAyNCwuNTI1LDAsMCwxLjYwOV0sMTAyMzM6Wy4wMjQsLjUyNSwwLDAsMS42MzhdLDEwMjM0OlsuMDI0LC41MjUsMCwwLDEuODU4XSwxMDIzNjpbLjAxMSwuNTExLDAsMCwxLjYzOF0sMTA4MTU6WzAsLjY4MzMzLDAsMCwuNzVdLDEwOTI3OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDEwOTI4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDU3Mzc2OlsuMTk0NDQsLjY5NDQ0LDAsMCwwXX0sIk1hdGgtQm9sZEl0YWxpYyI6ezMyOlswLDAsMCwwLC4yNV0sNDg6WzAsLjQ0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNDQ0NDQsMCwwLC41NzVdLDUwOlswLC40NDQ0NCwwLDAsLjU3NV0sNTE6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41NzVdLDUyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNTc1XSw1MzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTY6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwuMDQ4MzUsMCwuODY2NF0sNjc6WzAsLjY4NjExLC4wNjk3OSwwLC44MTY5NF0sNjg6WzAsLjY4NjExLC4wMzE5NCwwLC45MzgxMl0sNjk6WzAsLjY4NjExLC4wNTQ1MSwwLC44MTAwN10sNzA6WzAsLjY4NjExLC4xNTk3MiwwLC42ODg4OV0sNzE6WzAsLjY4NjExLDAsMCwuODg2NzNdLDcyOlswLC42ODYxMSwuMDgyMjksMCwuOTgyMjldLDczOlswLC42ODYxMSwuMDc3NzgsMCwuNTExMTFdLDc0OlswLC42ODYxMSwuMTAwNjksMCwuNjMxMjVdLDc1OlswLC42ODYxMSwuMDY5NzksMCwuOTcxMThdLDc2OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3NzpbMCwuNjg2MTEsLjExNDI0LDAsMS4xNDIwMV0sNzg6WzAsLjY4NjExLC4xMTQyNCwwLC45NTAzNF0sNzk6WzAsLjY4NjExLC4wMzE5NCwwLC44MzY2Nl0sODA6WzAsLjY4NjExLC4xNTk3MiwwLC43MjMwOV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44Njg2MV0sODI6WzAsLjY4NjExLC4wMDQyMSwwLC44NzIzNV0sODM6WzAsLjY4NjExLC4wNTM4MiwwLC42OTI3MV0sODQ6WzAsLjY4NjExLC4xNTk3MiwwLC42MzY2M10sODU6WzAsLjY4NjExLC4xMTQyNCwwLC44MDAyN10sODY6WzAsLjY4NjExLC4yNTU1NSwwLC42Nzc3OF0sODc6WzAsLjY4NjExLC4xNTk3MiwwLDEuMDkzMDVdLDg4OlswLC42ODYxMSwuMDc3NzgsMCwuOTQ3MjJdLDg5OlswLC42ODYxMSwuMjU1NTUsMCwuNjc0NThdLDkwOlswLC42ODYxMSwuMDY5NzksMCwuNzcyNTddLDk3OlswLC40NDQ0NCwwLDAsLjYzMjg3XSw5ODpbMCwuNjk0NDQsMCwwLC41MjA4M10sOTk6WzAsLjQ0NDQ0LDAsMCwuNTEzNDJdLDEwMDpbMCwuNjk0NDQsMCwwLC42MDk3Ml0sMTAxOlswLC40NDQ0NCwwLDAsLjU1MzYxXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjExMDQyLDAsLjU2ODA2XSwxMDM6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU0NDldLDEwNDpbMCwuNjk0NDQsMCwwLC42Njc1OV0sMTA1OlswLC42OTMyNiwwLDAsLjQwNDhdLDEwNjpbLjE5NDQ0LC42OTMyNiwuMDYyMiwwLC40NzA4M10sMTA3OlswLC42OTQ0NCwuMDE4NTIsMCwuNjAzN10sMTA4OlswLC42OTQ0NCwuMDA4OCwwLC4zNDgxNV0sMTA5OlswLC40NDQ0NCwwLDAsMS4wMzI0XSwxMTA6WzAsLjQ0NDQ0LDAsMCwuNzEyOTZdLDExMTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjAwOTJdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMDM3MDQsMCwuNTQyMTNdLDExNDpbMCwuNDQ0NDQsLjAzMTk0LDAsLjUyODddLDExNTpbMCwuNDQ0NDQsMCwwLC41MzEyNV0sMTE2OlswLC42MzQ5MiwwLDAsLjQxNTI4XSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjgxMDJdLDExODpbMCwuNDQ0NDQsLjAzNzA0LDAsLjU2NjY2XSwxMTk6WzAsLjQ0NDQ0LC4wMjc3OCwwLC44MzE0OF0sMTIwOlswLC40NDQ0NCwwLDAsLjY1OTAzXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU5MDI4XSwxMjI6WzAsLjQ0NDQ0LC4wNDIxMywwLC41NTUwOV0sMTYwOlswLDAsMCwwLC4yNV0sOTE1OlswLC42ODYxMSwuMTU5NzIsMCwuNjU2OTRdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwuMDMxOTQsMCwuODY3MjJdLDkyMzpbMCwuNjg2MTEsMCwwLC44MDU1NV0sOTI2OlswLC42ODYxMSwuMDc0NTgsMCwuODQxMjVdLDkyODpbMCwuNjg2MTEsLjA4MjI5LDAsLjk4MjI5XSw5MzE6WzAsLjY4NjExLC4wNTQ1MSwwLC44ODUwN10sOTMzOlswLC42ODYxMSwuMTU5NzIsMCwuNjcwODNdLDkzNDpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTM2OlswLC42ODYxMSwuMTE2NTMsMCwuNzE0MDJdLDkzNzpbMCwuNjg2MTEsLjA0ODM1LDAsLjg3ODldLDk0NTpbMCwuNDQ0NDQsMCwwLC43NjA2NF0sOTQ2OlsuMTk0NDQsLjY5NDQ0LC4wMzQwMywwLC42NTk3Ml0sOTQ3OlsuMTk0NDQsLjQ0NDQ0LC4wNjM4OSwwLC41OTAwM10sOTQ4OlswLC42OTQ0NCwuMDM4MTksMCwuNTIyMjJdLDk0OTpbMCwuNDQ0NDQsMCwwLC41Mjg4Ml0sOTUwOlsuMTk0NDQsLjY5NDQ0LC4wNjIxNSwwLC41MDgzM10sOTUxOlsuMTk0NDQsLjQ0NDQ0LC4wMzcwNCwwLC42XSw5NTI6WzAsLjY5NDQ0LC4wMzE5NCwwLC41NjE4XSw5NTM6WzAsLjQ0NDQ0LDAsMCwuNDEyMDRdLDk1NDpbMCwuNDQ0NDQsMCwwLC42Njc1OV0sOTU1OlswLC42OTQ0NCwwLDAsLjY3MDgzXSw5NTY6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MDc4N10sOTU3OlswLC40NDQ0NCwuMDY4OTgsMCwuNTc2ODVdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDMwMjEsMCwuNTA4MzNdLDk1OTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sOTYwOlswLC40NDQ0NCwuMDM3MDQsMCwuNjgyNDFdLDk2MTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYxMThdLDk2MjpbLjA5NzIyLC40NDQ0NCwuMDc5MTcsMCwuNDIzNjFdLDk2MzpbMCwuNDQ0NDQsLjAzNzA0LDAsLjY4NTg4XSw5NjQ6WzAsLjQ0NDQ0LC4xMzQ3MiwwLC41MjA4M10sOTY1OlswLC40NDQ0NCwuMDM3MDQsMCwuNjMwNTVdLDk2NjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0NzIyXSw5Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MTgwNV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzcwNCwwLC43NTgzM10sOTY5OlswLC40NDQ0NCwuMDM3MDQsMCwuNzE3ODJdLDk3NzpbMCwuNjk0NDQsMCwwLC42OTE1NV0sOTgxOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNzEyNV0sOTgyOlswLC40NDQ0NCwuMDMxOTQsMCwuOTc1XSwxMDA5OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjExOF0sMTAxMzpbMCwuNDQ0NDQsMCwwLC40ODMzM10sNTc2NDk6WzAsLjQ0NDQ0LDAsMCwuMzkzNTJdLDU3OTExOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNDM4ODldfSwiTWF0aC1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDQ4OlswLC40MzA1NiwwLDAsLjVdLDQ5OlswLC40MzA1NiwwLDAsLjVdLDUwOlswLC40MzA1NiwwLDAsLjVdLDUxOlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTI6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw1MzpbLjE5NDQ0LC40MzA1NiwwLDAsLjVdLDU0OlswLC42NDQ0NCwwLDAsLjVdLDU1OlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw2NTpbMCwuNjgzMzMsMCwuMTM4ODksLjc1XSw2NjpbMCwuNjgzMzMsLjA1MDE3LC4wODMzNCwuNzU4NTFdLDY3OlswLC42ODMzMywuMDcxNTMsLjA4MzM0LC43MTQ3Ml0sNjg6WzAsLjY4MzMzLC4wMjc3OCwuMDU1NTYsLjgyNzkyXSw2OTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzM4Ml0sNzA6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjY0MzA2XSw3MTpbMCwuNjgzMzMsMCwuMDgzMzQsLjc4NjI1XSw3MjpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDczOlswLC42ODMzMywuMDc4NDcsLjExMTExLC40Mzk1OF0sNzQ6WzAsLjY4MzMzLC4wOTYxOCwuMTY2NjcsLjU1NDUxXSw3NTpbMCwuNjgzMzMsLjA3MTUzLC4wNTU1NiwuODQ5MzFdLDc2OlswLC42ODMzMywwLC4wMjc3OCwuNjgwNTZdLDc3OlswLC42ODMzMywuMTA5MDMsLjA4MzM0LC45NzAxNF0sNzg6WzAsLjY4MzMzLC4xMDkwMywuMDgzMzQsLjgwMzQ3XSw3OTpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzYyNzhdLDgwOlswLC42ODMzMywuMTM4ODksLjA4MzM0LC42NDIwMV0sODE6Wy4xOTQ0NCwuNjgzMzMsMCwuMDgzMzQsLjc5MDU2XSw4MjpbMCwuNjgzMzMsLjAwNzczLC4wODMzNCwuNzU5MjldLDgzOlswLC42ODMzMywuMDU3NjQsLjA4MzM0LC42MTMyXSw4NDpbMCwuNjgzMzMsLjEzODg5LC4wODMzNCwuNTg0MzhdLDg1OlswLC42ODMzMywuMTA5MDMsLjAyNzc4LC42ODI3OF0sODY6WzAsLjY4MzMzLC4yMjIyMiwwLC41ODMzM10sODc6WzAsLjY4MzMzLC4xMzg4OSwwLC45NDQ0NV0sODg6WzAsLjY4MzMzLC4wNzg0NywuMDgzMzQsLjgyODQ3XSw4OTpbMCwuNjgzMzMsLjIyMjIyLDAsLjU4MDU2XSw5MDpbMCwuNjgzMzMsLjA3MTUzLC4wODMzNCwuNjgyNjRdLDk3OlswLC40MzA1NiwwLDAsLjUyODU5XSw5ODpbMCwuNjk0NDQsMCwwLC40MjkxN10sOTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40MzI3Nl0sMTAwOlswLC42OTQ0NCwwLC4xNjY2NywuNTIwNDldLDEwMTpbMCwuNDMwNTYsMCwuMDU1NTYsLjQ2NTYzXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjEwNzY0LC4xNjY2NywuNDg5NTldLDEwMzpbLjE5NDQ0LC40MzA1NiwuMDM1ODgsLjAyNzc4LC40NzY5N10sMTA0OlswLC42OTQ0NCwwLDAsLjU3NjE2XSwxMDU6WzAsLjY1OTUyLDAsMCwuMzQ0NTFdLDEwNjpbLjE5NDQ0LC42NTk1MiwuMDU3MjQsMCwuNDExODFdLDEwNzpbMCwuNjk0NDQsLjAzMTQ4LDAsLjUyMDZdLDEwODpbMCwuNjk0NDQsLjAxOTY4LC4wODMzNCwuMjk4MzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44NzgwMV0sMTEwOlswLC40MzA1NiwwLDAsLjYwMDIzXSwxMTE6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MDMxM10sMTEzOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDgzMzQsLjQ0NjQxXSwxMTQ6WzAsLjQzMDU2LC4wMjc3OCwuMDU1NTYsLjQ1MTE2XSwxMTU6WzAsLjQzMDU2LDAsLjA1NTU2LC40Njg3NV0sMTE2OlswLC42MTUwOCwwLC4wODMzNCwuMzYxMTFdLDExNzpbMCwuNDMwNTYsMCwuMDI3NzgsLjU3MjQ2XSwxMTg6WzAsLjQzMDU2LC4wMzU4OCwuMDI3NzgsLjQ4NDcyXSwxMTk6WzAsLjQzMDU2LC4wMjY5MSwuMDgzMzQsLjcxNTkyXSwxMjA6WzAsLjQzMDU2LDAsLjAyNzc4LC41NzE1M10sMTIxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5MDI4XSwxMjI6WzAsLjQzMDU2LC4wNDM5OCwuMDU1NTYsLjQ2NTA1XSwxNjA6WzAsMCwwLDAsLjI1XSw5MTU6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjYxNTI4XSw5MTY6WzAsLjY4MzMzLDAsLjE2NjY3LC44MzMzNF0sOTIwOlswLC42ODMzMywuMDI3NzgsLjA4MzM0LC43NjI3OF0sOTIzOlswLC42ODMzMywwLC4xNjY2NywuNjk0NDVdLDkyNjpbMCwuNjgzMzMsLjA3NTY5LC4wODMzNCwuNzQyMzZdLDkyODpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDkzMTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzc5ODZdLDkzMzpbMCwuNjgzMzMsLjEzODg5LC4wNTU1NiwuNTgzMzNdLDkzNDpbMCwuNjgzMzMsMCwuMDgzMzQsLjY2NjY3XSw5MzY6WzAsLjY4MzMzLC4xMSwuMDU1NTYsLjYxMjIyXSw5Mzc6WzAsLjY4MzMzLC4wNTAxNywuMDgzMzQsLjc3MjRdLDk0NTpbMCwuNDMwNTYsLjAwMzcsLjAyNzc4LC42Mzk3XSw5NDY6Wy4xOTQ0NCwuNjk0NDQsLjA1Mjc4LC4wODMzNCwuNTY1NjNdLDk0NzpbLjE5NDQ0LC40MzA1NiwuMDU1NTYsMCwuNTE3NzNdLDk0ODpbMCwuNjk0NDQsLjAzNzg1LC4wNTU1NiwuNDQ0NDRdLDk0OTpbMCwuNDMwNTYsMCwuMDgzMzQsLjQ2NjMyXSw5NTA6Wy4xOTQ0NCwuNjk0NDQsLjA3Mzc4LC4wODMzNCwuNDM3NV0sOTUxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5NjUzXSw5NTI6WzAsLjY5NDQ0LC4wMjc3OCwuMDgzMzQsLjQ2OTQ0XSw5NTM6WzAsLjQzMDU2LDAsLjA1NTU2LC4zNTM5NF0sOTU0OlswLC40MzA1NiwwLDAsLjU3NjE2XSw5NTU6WzAsLjY5NDQ0LDAsMCwuNTgzMzRdLDk1NjpbLjE5NDQ0LC40MzA1NiwwLC4wMjc3OCwuNjAyNTVdLDk1NzpbMCwuNDMwNTYsLjA2MzY2LC4wMjc3OCwuNDkzOThdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDQ2MDEsLjExMTExLC40Mzc1XSw5NTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sOTYwOlswLC40MzA1NiwuMDM1ODgsMCwuNTcwMDNdLDk2MTpbLjE5NDQ0LC40MzA1NiwwLC4wODMzNCwuNTE3MDJdLDk2MjpbLjA5NzIyLC40MzA1NiwuMDc5ODYsLjA4MzM0LC4zNjI4NV0sOTYzOlswLC40MzA1NiwuMDM1ODgsMCwuNTcxNDFdLDk2NDpbMCwuNDMwNTYsLjExMzIsLjAyNzc4LC40MzcxNV0sOTY1OlswLC40MzA1NiwuMDM1ODgsLjAyNzc4LC41NDAyOF0sOTY2OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC42NTQxN10sOTY3OlsuMTk0NDQsLjQzMDU2LDAsLjA1NTU2LC42MjU2OV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzU4OCwuMTExMTEsLjY1MTM5XSw5Njk6WzAsLjQzMDU2LC4wMzU4OCwwLC42MjI0NV0sOTc3OlswLC42OTQ0NCwwLC4wODMzNCwuNTkxNDRdLDk4MTpbLjE5NDQ0LC42OTQ0NCwwLC4wODMzNCwuNTk1ODNdLDk4MjpbMCwuNDMwNTYsLjAyNzc4LDAsLjgyODEzXSwxMDA5OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MTcwMl0sMTAxMzpbMCwuNDMwNTYsMCwuMDU1NTYsLjQwNTldLDU3NjQ5OlswLC40MzA1NiwwLC4wMjc3OCwuMzIyNDZdLDU3OTExOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC4zODQwM119LCJTYW5zU2VyaWYtQm9sZCI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzY2NjddLDM0OlswLC42OTQ0NCwwLDAsLjU1ODM0XSwzNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjkxNjY3XSwzNjpbLjA1NTU2LC43NSwwLDAsLjU1XSwzNzpbLjA1NTU2LC43NSwwLDAsMS4wMjkxMl0sMzg6WzAsLjY5NDQ0LDAsMCwuODMwNTZdLDM5OlswLC42OTQ0NCwwLDAsLjMwNTU2XSw0MDpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MTpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MjpbMCwuNzUsMCwwLC41NV0sNDM6Wy4xMTY2NywuNjE2NjcsMCwwLC44NTU1Nl0sNDQ6Wy4xMDU1NiwuMTMwNTYsMCwwLC4zMDU1Nl0sNDU6WzAsLjQ1ODMzLDAsMCwuMzY2NjddLDQ2OlswLC4xMzA1NiwwLDAsLjMwNTU2XSw0NzpbLjI1LC43NSwwLDAsLjU1XSw0ODpbMCwuNjk0NDQsMCwwLC41NV0sNDk6WzAsLjY5NDQ0LDAsMCwuNTVdLDUwOlswLC42OTQ0NCwwLDAsLjU1XSw1MTpbMCwuNjk0NDQsMCwwLC41NV0sNTI6WzAsLjY5NDQ0LDAsMCwuNTVdLDUzOlswLC42OTQ0NCwwLDAsLjU1XSw1NDpbMCwuNjk0NDQsMCwwLC41NV0sNTU6WzAsLjY5NDQ0LDAsMCwuNTVdLDU2OlswLC42OTQ0NCwwLDAsLjU1XSw1NzpbMCwuNjk0NDQsMCwwLC41NV0sNTg6WzAsLjQ1ODMzLDAsMCwuMzA1NTZdLDU5OlsuMTA1NTYsLjQ1ODMzLDAsMCwuMzA1NTZdLDYxOlstLjA5Mzc1LC40MDYyNSwwLDAsLjg1NTU2XSw2MzpbMCwuNjk0NDQsMCwwLC41MTk0NV0sNjQ6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDY1OlswLC42OTQ0NCwwLDAsLjczMzM0XSw2NjpbMCwuNjk0NDQsMCwwLC43MzMzNF0sNjc6WzAsLjY5NDQ0LDAsMCwuNzAyNzhdLDY4OlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw2OTpbMCwuNjk0NDQsMCwwLC42NDE2N10sNzA6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDcxOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MjpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzM6WzAsLjY5NDQ0LDAsMCwuMzMwNTZdLDc0OlswLC42OTQ0NCwwLDAsLjUxOTQ1XSw3NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sNzY6WzAsLjY5NDQ0LDAsMCwuNTgwNTZdLDc3OlswLC42OTQ0NCwwLDAsLjk3Nzc4XSw3ODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzk6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgwOlswLC42OTQ0NCwwLDAsLjcwMjc4XSw4MTpbLjEwNTU2LC42OTQ0NCwwLDAsLjc5NDQ1XSw4MjpbMCwuNjk0NDQsMCwwLC43MDI3OF0sODM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg0OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sODY6WzAsLjY5NDQ0LC4wMTUyOCwwLC43MzMzNF0sODc6WzAsLjY5NDQ0LC4wMTUyOCwwLDEuMDM4ODldLDg4OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4OTpbMCwuNjk0NDQsLjAyNzUsMCwuNzMzMzRdLDkwOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MTpbLjI1LC43NSwwLDAsLjM0MzA2XSw5MzpbLjI1LC43NSwwLDAsLjM0MzA2XSw5NDpbMCwuNjk0NDQsMCwwLC41NV0sOTU6Wy4zNSwuMTA4MzMsLjAzMDU2LDAsLjU1XSw5NzpbMCwuNDU4MzMsMCwwLC41MjVdLDk4OlswLC42OTQ0NCwwLDAsLjU2MTExXSw5OTpbMCwuNDU4MzMsMCwwLC40ODg4OV0sMTAwOlswLC42OTQ0NCwwLDAsLjU2MTExXSwxMDE6WzAsLjQ1ODMzLDAsMCwuNTExMTFdLDEwMjpbMCwuNjk0NDQsLjA3NjM5LDAsLjMzNjExXSwxMDM6Wy4xOTQ0NCwuNDU4MzMsLjAxNTI4LDAsLjU1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTYxMTFdLDEwNTpbMCwuNjk0NDQsMCwwLC4yNTU1Nl0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMjg2MTFdLDEwNzpbMCwuNjk0NDQsMCwwLC41MzA1Nl0sMTA4OlswLC42OTQ0NCwwLDAsLjI1NTU2XSwxMDk6WzAsLjQ1ODMzLDAsMCwuODY2NjddLDExMDpbMCwuNDU4MzMsMCwwLC41NjExMV0sMTExOlswLC40NTgzMywwLDAsLjU1XSwxMTI6Wy4xOTQ0NCwuNDU4MzMsMCwwLC41NjExMV0sMTEzOlsuMTk0NDQsLjQ1ODMzLDAsMCwuNTYxMTFdLDExNDpbMCwuNDU4MzMsLjAxNTI4LDAsLjM3MjIyXSwxMTU6WzAsLjQ1ODMzLDAsMCwuNDIxNjddLDExNjpbMCwuNTg5MjksMCwwLC40MDQxN10sMTE3OlswLC40NTgzMywwLDAsLjU2MTExXSwxMTg6WzAsLjQ1ODMzLC4wMTUyOCwwLC41XSwxMTk6WzAsLjQ1ODMzLC4wMTUyOCwwLC43NDQ0NV0sMTIwOlswLC40NTgzMywwLDAsLjVdLDEyMTpbLjE5NDQ0LC40NTgzMywuMDE1MjgsMCwuNV0sMTIyOlswLC40NTgzMywwLDAsLjQ3NjM5XSwxMjY6Wy4zNSwuMzQ0NDQsMCwwLC41NV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwwLDAsLjU1XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDE4MDpbMCwuNjk0NDQsMCwwLC41NV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ4ODg5XSwzMDU6WzAsLjQ1ODMzLDAsMCwuMjU1NTZdLDU2NzpbLjE5NDQ0LC40NTgzMywwLDAsLjI4NjExXSw3MTA6WzAsLjY5NDQ0LDAsMCwuNTVdLDcxMTpbMCwuNjM1NDIsMCwwLC41NV0sNzEzOlswLC42Mzc3OCwwLDAsLjU1XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNTVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sNzMwOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTVdLDczMzpbMCwuNjk0NDQsMCwwLC41NV0sOTE1OlswLC42OTQ0NCwwLDAsLjU4MDU2XSw5MTY6WzAsLjY5NDQ0LDAsMCwuOTE2NjddLDkyMDpbMCwuNjk0NDQsMCwwLC44NTU1Nl0sOTIzOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDkyODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTMxOlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw5MzM6WzAsLjY5NDQ0LDAsMCwuODU1NTZdLDkzNDpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTM2OlswLC42OTQ0NCwwLDAsLjg1NTU2XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgyMTE6WzAsLjQ1ODMzLC4wMzA1NiwwLC41NV0sODIxMjpbMCwuNDU4MzMsLjAzMDU2LDAsMS4xMDAwMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIxNzpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIyMDpbMCwuNjk0NDQsMCwwLC41NTgzNF0sODIyMTpbMCwuNjk0NDQsMCwwLC41NTgzNF19LCJTYW5zU2VyaWYtSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjA1NzMzLDAsLjMxOTQ1XSwzNDpbMCwuNjk0NDQsLjAwMzE2LDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNTA4NywwLC44MzMzNF0sMzY6Wy4wNTU1NiwuNzUsLjExMTU2LDAsLjVdLDM3OlsuMDU1NTYsLjc1LC4wMzEyNiwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LC4wMzA1OCwwLC43NTgzNF0sMzk6WzAsLjY5NDQ0LC4wNzgxNiwwLC4yNzc3OF0sNDA6Wy4yNSwuNzUsLjEzMTY0LDAsLjM4ODg5XSw0MTpbLjI1LC43NSwuMDI1MzYsMCwuMzg4ODldLDQyOlswLC43NSwuMTE3NzUsMCwuNV0sNDM6Wy4wODMzMywuNTgzMzMsLjAyNTM2LDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LC4wMTk0NiwwLC4zMzMzM10sNDY6WzAsLjA4MzMzLDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LC4xMzE2NCwwLC41XSw0ODpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDQ5OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTA6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1MTpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDUyOlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTM6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NDpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU1OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTY6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NzpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU4OlswLC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDU5OlsuMTI1LC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDYxOlstLjEzLC4zNywuMDUwODcsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwuMTE4MDksMCwuNDcyMjJdLDY0OlswLC42OTQ0NCwuMDc1NTUsMCwuNjY2NjddLDY1OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NjpbMCwuNjk0NDQsLjA4MjkzLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsLjExOTgzLDAsLjYzODg5XSw2ODpbMCwuNjk0NDQsLjA3NTU1LDAsLjcyMjIzXSw2OTpbMCwuNjk0NDQsLjExOTgzLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsLjEzMzcyLDAsLjU2OTQ1XSw3MTpbMCwuNjk0NDQsLjExOTgzLDAsLjY2NjY3XSw3MjpbMCwuNjk0NDQsLjA4MDk0LDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsLjEzMzcyLDAsLjI3Nzc4XSw3NDpbMCwuNjk0NDQsLjA4MDk0LDAsLjQ3MjIyXSw3NTpbMCwuNjk0NDQsLjExOTgzLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LC4wODA5NCwwLC44NzVdLDc4OlswLC42OTQ0NCwuMDgwOTQsMCwuNzA4MzRdLDc5OlswLC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwuMDgyOTMsMCwuNjM4ODldLDgxOlsuMTI1LC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgyOlswLC42OTQ0NCwuMDgyOTMsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwuMDkyMDUsMCwuNTU1NTZdLDg0OlswLC42OTQ0NCwuMTMzNzIsMCwuNjgwNTZdLDg1OlswLC42OTQ0NCwuMDgwOTQsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4xNjE1LDAsLjY2NjY3XSw4NzpbMCwuNjk0NDQsLjE2MTUsMCwuOTQ0NDVdLDg4OlswLC42OTQ0NCwuMTMzNzIsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMTcyNjEsMCwuNjY2NjddLDkwOlswLC42OTQ0NCwuMTE5ODMsMCwuNjExMTFdLDkxOlsuMjUsLjc1LC4xNTk0MiwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsLjA4NzE5LDAsLjI4ODg5XSw5NDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjA4NjE2LDAsLjVdLDk3OlswLC40NDQ0NCwuMDA5ODEsMCwuNDgwNTZdLDk4OlswLC42OTQ0NCwuMDMwNTcsMCwuNTE2NjddLDk5OlswLC40NDQ0NCwuMDgzMzYsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsLjA5NDgzLDAsLjUxNjY3XSwxMDE6WzAsLjQ0NDQ0LC4wNjc3OCwwLC40NDQ0NV0sMTAyOlswLC42OTQ0NCwuMjE3MDUsMCwuMzA1NTZdLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMTA4MzYsMCwuNV0sMTA0OlswLC42OTQ0NCwuMDE3NzgsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsLjA5NzE4LDAsLjIzODg5XSwxMDY6Wy4xOTQ0NCwuNjc5MzcsLjA5MTYyLDAsLjI2NjY3XSwxMDc6WzAsLjY5NDQ0LC4wODMzNiwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwuMDk0ODMsMCwuMjM4ODldLDEwOTpbMCwuNDQ0NDQsLjAxNzc4LDAsLjc5NDQ1XSwxMTA6WzAsLjQ0NDQ0LC4wMTc3OCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwuMDY2MTMsMCwuNV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LC4wMzg5LDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTQ6WzAsLjQ0NDQ0LC4xMDgzNiwwLC4zNDE2N10sMTE1OlswLC40NDQ0NCwuMDc3OCwwLC4zODMzM10sMTE2OlswLC41NzE0MywuMDcyMjUsMCwuMzYxMTFdLDExNzpbMCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTg6WzAsLjQ0NDQ0LC4xMDgzNiwwLC40NjExMV0sMTE5OlswLC40NDQ0NCwuMTA4MzYsMCwuNjgzMzRdLDEyMDpbMCwuNDQ0NDQsLjA5MTY5LDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjEwODM2LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LC4wODc1MiwwLC40MzQ3Ml0sMTI2OlsuMzUsLjMyNjU5LC4wODgyNiwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY3OTM3LC4wNjM4NSwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwuMDQxNjksMCwuMjM4ODldLDU2NzpbLjE5NDQ0LC40NDQ0NCwuMDQxNjksMCwuMjY2NjddLDcxMDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sNzExOlswLC42MzE5NCwuMDg0MzIsMCwuNV0sNzEzOlswLC42MDg4OSwuMDg3NzYsMCwuNV0sNzE0OlswLC42OTQ0NCwuMDkyMDUsMCwuNV0sNzE1OlswLC42OTQ0NCwwLDAsLjVdLDcyODpbMCwuNjk0NDQsLjA5NDgzLDAsLjVdLDcyOTpbMCwuNjc5MzcsLjA3Nzc0LDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDczMjpbMCwuNjc2NTksLjA4ODI2LDAsLjVdLDczMzpbMCwuNjk0NDQsLjA5MjA1LDAsLjVdLDkxNTpbMCwuNjk0NDQsLjEzMzcyLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsLjA3NTU1LDAsLjc3Nzc4XSw5MjM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDkyNjpbMCwuNjk0NDQsLjEyODE2LDAsLjY2NjY3XSw5Mjg6WzAsLjY5NDQ0LC4wODA5NCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwuMTE5ODMsMCwuNzIyMjJdLDkzMzpbMCwuNjk0NDQsLjA5MDMxLDAsLjc3Nzc4XSw5MzQ6WzAsLjY5NDQ0LC4wNDYwMywwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwuMDkwMzEsMCwuNzc3NzhdLDkzNzpbMCwuNjk0NDQsLjA4MjkzLDAsLjcyMjIyXSw4MjExOlswLC40NDQ0NCwuMDg2MTYsMCwuNV0sODIxMjpbMCwuNDQ0NDQsLjA4NjE2LDAsMV0sODIxNjpbMCwuNjk0NDQsLjA3ODE2LDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwuMDc4MTYsMCwuMjc3NzhdLDgyMjA6WzAsLjY5NDQ0LC4xNDIwNSwwLC41XSw4MjIxOlswLC42OTQ0NCwuMDAzMTYsMCwuNV19LCJTYW5zU2VyaWYtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzE5NDVdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzU4MzRdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzMzMzNdLDQ2OlswLC4wODMzMywwLDAsLjI3Nzc4XSw0NzpbLjI1LC43NSwwLDAsLjVdLDQ4OlswLC42NTU1NiwwLDAsLjVdLDQ5OlswLC42NTU1NiwwLDAsLjVdLDUwOlswLC42NTU1NiwwLDAsLjVdLDUxOlswLC42NTU1NiwwLDAsLjVdLDUyOlswLC42NTU1NiwwLDAsLjVdLDUzOlswLC42NTU1NiwwLDAsLjVdLDU0OlswLC42NTU1NiwwLDAsLjVdLDU1OlswLC42NTU1NiwwLDAsLjVdLDU2OlswLC42NTU1NiwwLDAsLjVdLDU3OlswLC42NTU1NiwwLDAsLjVdLDU4OlswLC40NDQ0NCwwLDAsLjI3Nzc4XSw1OTpbLjEyNSwuNDQ0NDQsMCwwLC4yNzc3OF0sNjE6Wy0uMTMsLjM3LDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC42NjY2N10sNjU6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDY2OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sNjg6WzAsLjY5NDQ0LDAsMCwuNzIyMjNdLDY5OlswLC42OTQ0NCwwLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsMCwwLC41Njk0NV0sNzE6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDcyOlswLC42OTQ0NCwwLDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sNzQ6WzAsLjY5NDQ0LDAsMCwuNDcyMjJdLDc1OlswLC42OTQ0NCwwLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LDAsMCwuODc1XSw3ODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sNzk6WzAsLjY5NDQ0LDAsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwwLDAsLjYzODg5XSw4MTpbLjEyNSwuNjk0NDQsMCwwLC43MzYxMV0sODI6WzAsLjY5NDQ0LDAsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwwLDAsLjU1NTU2XSw4NDpbMCwuNjk0NDQsMCwwLC42ODA1Nl0sODU6WzAsLjY5NDQ0LDAsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4wMTM4OSwwLC42NjY2N10sODc6WzAsLjY5NDQ0LC4wMTM4OSwwLC45NDQ0NV0sODg6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMDI1LDAsLjY2NjY3XSw5MDpbMCwuNjk0NDQsMCwwLC42MTExMV0sOTE6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjAyNzc4LDAsLjVdLDk3OlswLC40NDQ0NCwwLDAsLjQ4MDU2XSw5ODpbMCwuNjk0NDQsMCwwLC41MTY2N10sOTk6WzAsLjQ0NDQ0LDAsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsMCwwLC41MTY2N10sMTAxOlswLC40NDQ0NCwwLDAsLjQ0NDQ1XSwxMDI6WzAsLjY5NDQ0LC4wNjk0NCwwLC4zMDU1Nl0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4wMTM4OSwwLC41XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsMCwwLC4yMzg4OV0sMTA2OlsuMTk0NDQsLjY3OTM3LDAsMCwuMjY2NjddLDEwNzpbMCwuNjk0NDQsMCwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwwLDAsLjIzODg5XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuNzk0NDVdLDExMDpbMCwuNDQ0NDQsMCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwwLDAsLjVdLDExMjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41MTY2N10sMTE0OlswLC40NDQ0NCwuMDEzODksMCwuMzQxNjddLDExNTpbMCwuNDQ0NDQsMCwwLC4zODMzM10sMTE2OlswLC41NzE0MywwLDAsLjM2MTExXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNTE2NjddLDExODpbMCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMTk6WzAsLjQ0NDQ0LC4wMTM4OSwwLC42ODMzNF0sMTIwOlswLC40NDQ0NCwwLDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNDM0NzJdLDEyNjpbLjM1LC4zMjY1OSwwLDAsLjVdLDE2MDpbMCwwLDAsMCwuMjVdLDE2ODpbMCwuNjc5MzcsMCwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwwLDAsLjIzODg5XSw1Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4yNjY2N10sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjMxOTQsMCwwLC41XSw3MTM6WzAsLjYwODg5LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42NzkzNywwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDczMjpbMCwuNjc2NTksMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42OTQ0NCwwLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sOTIzOlswLC42OTQ0NCwwLDAsLjYxMTExXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDkyODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwwLDAsLjcyMjIyXSw5MzM6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDkzNDpbMCwuNjk0NDQsMCwwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDgyMTE6WzAsLjQ0NDQ0LC4wMjc3OCwwLC41XSw4MjEyOlswLC40NDQ0NCwuMDI3NzgsMCwxXSw4MjE2OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjIwOlswLC42OTQ0NCwwLDAsLjVdLDgyMjE6WzAsLjY5NDQ0LDAsMCwuNV19LCJTY3JpcHQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNjU6WzAsLjcsLjIyOTI1LDAsLjgwMjUzXSw2NjpbMCwuNywuMDQwODcsMCwuOTA3NTddLDY3OlswLC43LC4xNjg5LDAsLjY2NjE5XSw2ODpbMCwuNywuMDkzNzEsMCwuNzc0NDNdLDY5OlswLC43LC4xODU4MywwLC41NjE2Ml0sNzA6WzAsLjcsLjEzNjM0LDAsLjg5NTQ0XSw3MTpbMCwuNywuMTczMjIsMCwuNjA5NjFdLDcyOlswLC43LC4yOTY5NCwwLC45NjkxOV0sNzM6WzAsLjcsLjE5MTg5LDAsLjgwOTA3XSw3NDpbLjI3Nzc4LC43LC4xOTE4OSwwLDEuMDUxNTldLDc1OlswLC43LC4zMTI1OSwwLC45MTM2NF0sNzY6WzAsLjcsLjE5MTg5LDAsLjg3MzczXSw3NzpbMCwuNywuMTU5ODEsMCwxLjA4MDMxXSw3ODpbMCwuNywuMzUyNSwwLC45MDE1XSw3OTpbMCwuNywuMDgwNzgsMCwuNzM3ODddLDgwOlswLC43LC4wODA3OCwwLDEuMDEyNjJdLDgxOlswLC43LC4wMzMwNSwwLC44ODI4Ml0sODI6WzAsLjcsLjA2MjU5LDAsLjg1XSw4MzpbMCwuNywuMTkxODksMCwuODY3NjddLDg0OlswLC43LC4yOTA4NywwLC43NDY5N10sODU6WzAsLjcsLjI1ODE1LDAsLjc5OTk2XSw4NjpbMCwuNywuMjc1MjMsMCwuNjIyMDRdLDg3OlswLC43LC4yNzUyMywwLC44MDUzMl0sODg6WzAsLjcsLjI2MDA2LDAsLjk0NDQ1XSw4OTpbMCwuNywuMjkzOSwwLC43MDk2MV0sOTA6WzAsLjcsLjI0MDM3LDAsLjgyMTJdLDE2MDpbMCwwLDAsMCwuMjVdfSwiU2l6ZTEtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDE6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDc6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTE6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sOTI6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTM6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sMTIzOlsuMzUwMDEsLjg1LDAsMCwuNTgzMzRdLDEyNTpbLjM1MDAxLC44NSwwLDAsLjU4MzM0XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDczMjpbMCwuNzIyMjIsMCwwLC41NTU1Nl0sNzcwOlswLC43MjIyMiwwLDAsLjU1NTU2XSw3NzE6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDgyMTQ6Wy05OWUtNSwuNjAxLDAsMCwuNzc3NzhdLDg1OTM6WzFlLTUsLjYsMCwwLC42NjY2N10sODU5NTpbMWUtNSwuNiwwLDAsLjY2NjY3XSw4NjU3OlsxZS01LC42LDAsMCwuNzc3NzhdLDg2NTk6WzFlLTUsLjYsMCwwLC43Nzc3OF0sODcxOTpbLjI1MDAxLC43NSwwLDAsLjk0NDQ1XSw4NzIwOlsuMjUwMDEsLjc1LDAsMCwuOTQ0NDVdLDg3MjE6Wy4yNTAwMSwuNzUsMCwwLDEuMDU1NTZdLDg3MzA6Wy4zNTAwMSwuODUsMCwwLDFdLDg3Mzk6Wy0uMDA1OTksLjYwNiwwLDAsLjMzMzMzXSw4NzQxOlstLjAwNTk5LC42MDYsMCwwLC41NTU1Nl0sODc0NzpbLjMwNjEyLC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ4OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ5OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzUwOlsuMzA2MTIsLjgwNSwuMTk0NDUsMCwuNDcyMjJdLDg4OTY6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODg5NzpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSw4ODk4OlsuMjUwMDEsLjc1LDAsMCwuODMzMzRdLDg4OTk6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODk2ODpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw4OTY5OlsuMzUwMDEsLjg1LDAsMCwuNDcyMjJdLDg5NzA6Wy4zNTAwMSwuODUsMCwwLC40NzIyMl0sODk3MTpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw5MTY4OlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSwxMDIxNjpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDIxNzpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDc1MjpbLjI1MDAxLC43NSwwLDAsMS4xMTExMV0sMTA3NTM6Wy4yNTAwMSwuNzUsMCwwLDEuMTExMTFdLDEwNzU0OlsuMjUwMDEsLjc1LDAsMCwxLjExMTExXSwxMDc1NjpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSwxMDc1ODpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XX0sIlNpemUyLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuNjUwMDIsMS4xNSwwLDAsLjU5NzIyXSw0MTpbLjY1MDAyLDEuMTUsMCwwLC41OTcyMl0sNDc6Wy42NTAwMiwxLjE1LDAsMCwuODExMTFdLDkxOlsuNjUwMDIsMS4xNSwwLDAsLjQ3MjIyXSw5MjpbLjY1MDAyLDEuMTUsMCwwLC44MTExMV0sOTM6Wy42NTAwMiwxLjE1LDAsMCwuNDcyMjJdLDEyMzpbLjY1MDAyLDEuMTUsMCwwLC42NjY2N10sMTI1OlsuNjUwMDIsMS4xNSwwLDAsLjY2NjY3XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjc1LDAsMCwxXSw3MzI6WzAsLjc1LDAsMCwxXSw3NzA6WzAsLjc1LDAsMCwxXSw3NzE6WzAsLjc1LDAsMCwxXSw4NzE5OlsuNTUwMDEsMS4wNSwwLDAsMS4yNzc3OF0sODcyMDpbLjU1MDAxLDEuMDUsMCwwLDEuMjc3NzhdLDg3MjE6Wy41NTAwMSwxLjA1LDAsMCwxLjQ0NDQ1XSw4NzMwOlsuNjUwMDIsMS4xNSwwLDAsMV0sODc0NzpbLjg2MjI1LDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ4OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ5OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzUwOlsuODYyMjUsMS4zNiwuNDQ0NDUsMCwuNTU1NTZdLDg4OTY6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4ODk3OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sODg5ODpbLjU1MDAxLDEuMDUsMCwwLDEuMTExMTFdLDg4OTk6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4OTY4OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTY5OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcwOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcxOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSwxMDIxNjpbLjY1MDAyLDEuMTUsMCwwLC42MTExMV0sMTAyMTc6Wy42NTAwMiwxLjE1LDAsMCwuNjExMTFdLDEwNzUyOlsuNTUwMDEsMS4wNSwwLDAsMS41MTExMl0sMTA3NTM6Wy41NTAwMSwxLjA1LDAsMCwxLjUxMTEyXSwxMDc1NDpbLjU1MDAxLDEuMDUsMCwwLDEuNTExMTJdLDEwNzU2OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sMTA3NTg6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXX0sIlNpemUzLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuOTUwMDMsMS40NSwwLDAsLjczNjExXSw0MTpbLjk1MDAzLDEuNDUsMCwwLC43MzYxMV0sNDc6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MTpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sOTI6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MzpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sMTIzOlsuOTUwMDMsMS40NSwwLDAsLjc1XSwxMjU6Wy45NTAwMywxLjQ1LDAsMCwuNzVdLDE2MDpbMCwwLDAsMCwuMjVdLDcxMDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDczMjpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MTpbMCwuNzUsMCwwLDEuNDQ0NDVdLDg3MzA6Wy45NTAwMywxLjQ1LDAsMCwxXSw4OTY4OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTY5OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcwOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcxOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSwxMDIxNjpbLjk1MDAzLDEuNDUsMCwwLC43NV0sMTAyMTc6Wy45NTAwMywxLjQ1LDAsMCwuNzVdfSwiU2l6ZTQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6WzEuMjUwMDMsMS43NSwwLDAsLjc5MTY3XSw0MTpbMS4yNTAwMywxLjc1LDAsMCwuNzkxNjddLDQ3OlsxLjI1MDAzLDEuNzUsMCwwLDEuMjc3NzhdLDkxOlsxLjI1MDAzLDEuNzUsMCwwLC41ODMzNF0sOTI6WzEuMjUwMDMsMS43NSwwLDAsMS4yNzc3OF0sOTM6WzEuMjUwMDMsMS43NSwwLDAsLjU4MzM0XSwxMjM6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMjU6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjgyNSwwLDAsMS44ODg5XSw3MzI6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzA6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzE6WzAsLjgyNSwwLDAsMS44ODg5XSw4NzMwOlsxLjI1MDAzLDEuNzUsMCwwLDFdLDg5Njg6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw4OTY5OlsxLjI1MDAzLDEuNzUsMCwwLC42Mzg4OV0sODk3MDpbMS4yNTAwMywxLjc1LDAsMCwuNjM4ODldLDg5NzE6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw5MTE1OlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMTY6WzFlLTUsLjYsMCwwLC44NzVdLDkxMTc6Wy42NDUwMiwxLjE1NSwwLDAsLjg3NV0sOTExODpbLjY0NTAyLDEuMTU1LDAsMCwuODc1XSw5MTE5OlsxZS01LC42LDAsMCwuODc1XSw5MTIwOlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMjE6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTIyOlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSw5MTIzOlsuNjQ1MDIsMS4xNTUsMCwwLC42NjY2N10sOTEyNDpbLjY0NTAyLDEuMTU1LDAsMCwuNjY2NjddLDkxMjU6Wy05OWUtNSwuNjAxLDAsMCwuNjY2NjddLDkxMjY6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTI3OlsxZS01LC45LDAsMCwuODg4ODldLDkxMjg6Wy42NTAwMiwxLjE1LDAsMCwuODg4ODldLDkxMjk6Wy45MDAwMSwwLDAsMCwuODg4ODldLDkxMzA6WzAsLjMsMCwwLC44ODg4OV0sOTEzMTpbMWUtNSwuOSwwLDAsLjg4ODg5XSw5MTMyOlsuNjUwMDIsMS4xNSwwLDAsLjg4ODg5XSw5MTMzOlsuOTAwMDEsMCwwLDAsLjg4ODg5XSw5MTQzOlsuODg1MDIsLjkxNSwwLDAsMS4wNTU1Nl0sMTAyMTY6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMDIxNzpbMS4yNTAwMywxLjc1LDAsMCwuODA1NTZdLDU3MzQ0OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3MzQ1OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3NjgwOlswLC4xMiwwLDAsLjQ1XSw1NzY4MTpbMCwuMTIsMCwwLC40NV0sNTc2ODI6WzAsLjEyLDAsMCwuNDVdLDU3NjgzOlswLC4xMiwwLDAsLjQ1XX0sIlR5cGV3cml0ZXItUmVndWxhciI6ezMyOlswLDAsMCwwLC41MjVdLDMzOlswLC42MTExMSwwLDAsLjUyNV0sMzQ6WzAsLjYxMTExLDAsMCwuNTI1XSwzNTpbMCwuNjExMTEsMCwwLC41MjVdLDM2OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwzNzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMzg6WzAsLjYxMTExLDAsMCwuNTI1XSwzOTpbMCwuNjExMTEsMCwwLC41MjVdLDQwOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw0MTpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDI6WzAsLjUyMDgzLDAsMCwuNTI1XSw0MzpbLS4wODA1NiwuNTMwNTUsMCwwLC41MjVdLDQ0OlsuMTM4ODksLjEyNSwwLDAsLjUyNV0sNDU6Wy0uMDgwNTYsLjUzMDU1LDAsMCwuNTI1XSw0NjpbMCwuMTI1LDAsMCwuNTI1XSw0NzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDg6WzAsLjYxMTExLDAsMCwuNTI1XSw0OTpbMCwuNjExMTEsMCwwLC41MjVdLDUwOlswLC42MTExMSwwLDAsLjUyNV0sNTE6WzAsLjYxMTExLDAsMCwuNTI1XSw1MjpbMCwuNjExMTEsMCwwLC41MjVdLDUzOlswLC42MTExMSwwLDAsLjUyNV0sNTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw1NTpbMCwuNjExMTEsMCwwLC41MjVdLDU2OlswLC42MTExMSwwLDAsLjUyNV0sNTc6WzAsLjYxMTExLDAsMCwuNTI1XSw1ODpbMCwuNDMwNTYsMCwwLC41MjVdLDU5OlsuMTM4ODksLjQzMDU2LDAsMCwuNTI1XSw2MDpbLS4wNTU1NiwuNTU1NTYsMCwwLC41MjVdLDYxOlstLjE5NTQ5LC40MTU2MiwwLDAsLjUyNV0sNjI6Wy0uMDU1NTYsLjU1NTU2LDAsMCwuNTI1XSw2MzpbMCwuNjExMTEsMCwwLC41MjVdLDY0OlswLC42MTExMSwwLDAsLjUyNV0sNjU6WzAsLjYxMTExLDAsMCwuNTI1XSw2NjpbMCwuNjExMTEsMCwwLC41MjVdLDY3OlswLC42MTExMSwwLDAsLjUyNV0sNjg6WzAsLjYxMTExLDAsMCwuNTI1XSw2OTpbMCwuNjExMTEsMCwwLC41MjVdLDcwOlswLC42MTExMSwwLDAsLjUyNV0sNzE6WzAsLjYxMTExLDAsMCwuNTI1XSw3MjpbMCwuNjExMTEsMCwwLC41MjVdLDczOlswLC42MTExMSwwLDAsLjUyNV0sNzQ6WzAsLjYxMTExLDAsMCwuNTI1XSw3NTpbMCwuNjExMTEsMCwwLC41MjVdLDc2OlswLC42MTExMSwwLDAsLjUyNV0sNzc6WzAsLjYxMTExLDAsMCwuNTI1XSw3ODpbMCwuNjExMTEsMCwwLC41MjVdLDc5OlswLC42MTExMSwwLDAsLjUyNV0sODA6WzAsLjYxMTExLDAsMCwuNTI1XSw4MTpbLjEzODg5LC42MTExMSwwLDAsLjUyNV0sODI6WzAsLjYxMTExLDAsMCwuNTI1XSw4MzpbMCwuNjExMTEsMCwwLC41MjVdLDg0OlswLC42MTExMSwwLDAsLjUyNV0sODU6WzAsLjYxMTExLDAsMCwuNTI1XSw4NjpbMCwuNjExMTEsMCwwLC41MjVdLDg3OlswLC42MTExMSwwLDAsLjUyNV0sODg6WzAsLjYxMTExLDAsMCwuNTI1XSw4OTpbMCwuNjExMTEsMCwwLC41MjVdLDkwOlswLC42MTExMSwwLDAsLjUyNV0sOTE6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDkyOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw5MzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sOTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw5NTpbLjA5NTE0LDAsMCwwLC41MjVdLDk2OlswLC42MTExMSwwLDAsLjUyNV0sOTc6WzAsLjQzMDU2LDAsMCwuNTI1XSw5ODpbMCwuNjExMTEsMCwwLC41MjVdLDk5OlswLC40MzA1NiwwLDAsLjUyNV0sMTAwOlswLC42MTExMSwwLDAsLjUyNV0sMTAxOlswLC40MzA1NiwwLDAsLjUyNV0sMTAyOlswLC42MTExMSwwLDAsLjUyNV0sMTAzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMDQ6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDU6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDY6Wy4yMjIyMiwuNjExMTEsMCwwLC41MjVdLDEwNzpbMCwuNjExMTEsMCwwLC41MjVdLDEwODpbMCwuNjExMTEsMCwwLC41MjVdLDEwOTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMDpbMCwuNDMwNTYsMCwwLC41MjVdLDExMTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMjpbLjIyMjIyLC40MzA1NiwwLDAsLjUyNV0sMTEzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMTQ6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTU6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTY6WzAsLjU1MzU4LDAsMCwuNTI1XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTg6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTk6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjA6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjE6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDEyMjpbMCwuNDMwNTYsMCwwLC41MjVdLDEyMzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMTI0OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwxMjU6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDEyNjpbMCwuNjExMTEsMCwwLC41MjVdLDEyNzpbMCwuNjExMTEsMCwwLC41MjVdLDE2MDpbMCwwLDAsMCwuNTI1XSwxNzY6WzAsLjYxMTExLDAsMCwuNTI1XSwxODQ6Wy4xOTQ0NSwwLDAsMCwuNTI1XSwzMDU6WzAsLjQzMDU2LDAsMCwuNTI1XSw1Njc6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDcxMTpbMCwuNTY1OTcsMCwwLC41MjVdLDcxMzpbMCwuNTY1NTUsMCwwLC41MjVdLDcxNDpbMCwuNjExMTEsMCwwLC41MjVdLDcxNTpbMCwuNjExMTEsMCwwLC41MjVdLDcyODpbMCwuNjExMTEsMCwwLC41MjVdLDczMDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MTpbMCwuNjExMTEsMCwwLC41MjVdLDc3NjpbMCwuNjExMTEsMCwwLC41MjVdLDkxNTpbMCwuNjExMTEsMCwwLC41MjVdLDkxNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyMDpbMCwuNjExMTEsMCwwLC41MjVdLDkyMzpbMCwuNjExMTEsMCwwLC41MjVdLDkyNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyODpbMCwuNjExMTEsMCwwLC41MjVdLDkzMTpbMCwuNjExMTEsMCwwLC41MjVdLDkzMzpbMCwuNjExMTEsMCwwLC41MjVdLDkzNDpbMCwuNjExMTEsMCwwLC41MjVdLDkzNjpbMCwuNjExMTEsMCwwLC41MjVdLDkzNzpbMCwuNjExMTEsMCwwLC41MjVdLDgyMTY6WzAsLjYxMTExLDAsMCwuNTI1XSw4MjE3OlswLC42MTExMSwwLDAsLjUyNV0sODI0MjpbMCwuNjExMTEsMCwwLC41MjVdLDkyNTE6Wy4xMTExMSwuMjE5NDQsMCwwLC41MjVdfX0sYVE9e3NsYW50OlsuMjUsLjI1LC4yNV0sc3BhY2U6WzAsMCwwXSxzdHJldGNoOlswLDAsMF0sc2hyaW5rOlswLDAsMF0seEhlaWdodDpbLjQzMSwuNDMxLC40MzFdLHF1YWQ6WzEsMS4xNzEsMS40NzJdLGV4dHJhU3BhY2U6WzAsMCwwXSxudW0xOlsuNjc3LC43MzIsLjkyNV0sbnVtMjpbLjM5NCwuMzg0LC4zODddLG51bTM6Wy40NDQsLjQ3MSwuNTA0XSxkZW5vbTE6Wy42ODYsLjc1MiwxLjAyNV0sZGVub20yOlsuMzQ1LC4zNDQsLjUzMl0sc3VwMTpbLjQxMywuNTAzLC41MDRdLHN1cDI6Wy4zNjMsLjQzMSwuNDA0XSxzdXAzOlsuMjg5LC4yODYsLjI5NF0sc3ViMTpbLjE1LC4xNDMsLjJdLHN1YjI6Wy4yNDcsLjI4NiwuNF0sc3VwRHJvcDpbLjM4NiwuMzUzLC40OTRdLHN1YkRyb3A6Wy4wNSwuMDcxLC4xXSxkZWxpbTE6WzIuMzksMS43LDEuOThdLGRlbGltMjpbMS4wMSwxLjE1NywxLjQyXSxheGlzSGVpZ2h0OlsuMjUsLjI1LC4yNV0sZGVmYXVsdFJ1bGVUaGlja25lc3M6Wy4wNCwuMDQ5LC4wNDldLGJpZ09wU3BhY2luZzE6Wy4xMTEsLjExMSwuMTExXSxiaWdPcFNwYWNpbmcyOlsuMTY2LC4xNjYsLjE2Nl0sYmlnT3BTcGFjaW5nMzpbLjIsLjIsLjJdLGJpZ09wU3BhY2luZzQ6Wy42LC42MTEsLjYxMV0sYmlnT3BTcGFjaW5nNTpbLjEsLjE0MywuMTQzXSxzcXJ0UnVsZVRoaWNrbmVzczpbLjA0LC4wNCwuMDRdLHB0UGVyRW06WzEwLDEwLDEwXSxkb3VibGVSdWxlU2VwOlsuMiwuMiwuMl0sYXJyYXlSdWxlV2lkdGg6Wy4wNCwuMDQsLjA0XSxmYm94c2VwOlsuMywuMywuM10sZmJveHJ1bGU6Wy4wNCwuMDQsLjA0XX0sWSRlPXvDhToiQSIsw5A6IkQiLMOeOiJvIizDpToiYSIsw7A6ImQiLMO+OiJvIizQkDoiQSIs0JE6IkIiLNCSOiJCIizQkzoiRiIs0JQ6IkEiLNCVOiJFIizQljoiSyIs0Jc6IjMiLNCYOiJOIizQmToiTiIs0Jo6IksiLNCbOiJOIizQnDoiTSIs0J06IkgiLNCeOiJPIizQnzoiTiIs0KA6IlAiLNChOiJDIizQojoiVCIs0KM6InkiLNCkOiJPIizQpToiWCIs0KY6IlUiLNCnOiJoIizQqDoiVyIs0Kk6IlciLNCqOiJCIizQqzoiWCIs0Kw6IkIiLNCtOiIzIizQrjoiWCIs0K86IlIiLNCwOiJhIizQsToiYiIs0LI6ImEiLNCzOiJyIizQtDoieSIs0LU6ImUiLNC2OiJtIizQtzoiZSIs0Lg6Im4iLNC5OiJuIizQujoibiIs0Ls6Im4iLNC8OiJtIizQvToibiIs0L46Im8iLNC/OiJuIizRgDoicCIs0YE6ImMiLNGCOiJvIizRgzoieSIs0YQ6ImIiLNGFOiJ4IizRhjoibiIs0Yc6Im4iLNGIOiJ3IizRiToidyIs0Yo6ImEiLNGLOiJtIizRjDoiYSIs0Y06ImUiLNGOOiJtIizRjzoiciJ9O2Z1bmN0aW9uIGFIdChpLHMpe0s0W2ldPXN9ZnVuY3Rpb24gSjJlKGkscyx1KXtpZighSzRbc10pdGhyb3cgbmV3IEVycm9yKCJGb250IG1ldHJpY3Mgbm90IGZvdW5kIGZvciBmb250OiAiK3MrIi4iKTt2YXIgZD1pLmNoYXJDb2RlQXQoMCkscD1LNFtzXVtkXTtpZighcCYmaVswXWluIFkkZSYmKGQ9WSRlW2lbMF1dLmNoYXJDb2RlQXQoMCkscD1LNFtzXVtkXSksIXAmJnU9PT0idGV4dCImJkskZShkKSYmKHA9SzRbc11bNzddKSxwKXJldHVybntkZXB0aDpwWzBdLGhlaWdodDpwWzFdLGl0YWxpYzpwWzJdLHNrZXc6cFszXSx3aWR0aDpwWzRdfX12YXIgWjJlPXt9O2Z1bmN0aW9uIG9IdChpKXt2YXIgcztpZihpPj01P3M9MDppPj0zP3M9MTpzPTIsIVoyZVtzXSl7dmFyIHU9WjJlW3NdPXtjc3NFbVBlck11OmFRLnF1YWRbc10vMTh9O2Zvcih2YXIgZCBpbiBhUSlhUS5oYXNPd25Qcm9wZXJ0eShkKSYmKHVbZF09YVFbZF1bc10pfXJldHVybiBaMmVbc119dmFyIGNIdD1bWzEsMSwxXSxbMiwxLDFdLFszLDEsMV0sWzQsMiwxXSxbNSwyLDFdLFs2LDMsMV0sWzcsNCwyXSxbOCw2LDNdLFs5LDcsNl0sWzEwLDgsN10sWzExLDEwLDldXSxYJGU9Wy41LC42LC43LC44LC45LDEsMS4yLDEuNDQsMS43MjgsMi4wNzQsMi40ODhdLFEkZT1mdW5jdGlvbihzLHUpe3JldHVybiB1LnNpemU8Mj9zOmNIdFtzLTFdW3Uuc2l6ZS0xXX07Y2xhc3MgTTd7Y29uc3RydWN0b3Iocyl7dGhpcy5zdHlsZT12b2lkIDAsdGhpcy5jb2xvcj12b2lkIDAsdGhpcy5zaXplPXZvaWQgMCx0aGlzLnRleHRTaXplPXZvaWQgMCx0aGlzLnBoYW50b209dm9pZCAwLHRoaXMuZm9udD12b2lkIDAsdGhpcy5mb250RmFtaWx5PXZvaWQgMCx0aGlzLmZvbnRXZWlnaHQ9dm9pZCAwLHRoaXMuZm9udFNoYXBlPXZvaWQgMCx0aGlzLnNpemVNdWx0aXBsaWVyPXZvaWQgMCx0aGlzLm1heFNpemU9dm9pZCAwLHRoaXMubWluUnVsZVRoaWNrbmVzcz12b2lkIDAsdGhpcy5fZm9udE1ldHJpY3M9dm9pZCAwLHRoaXMuc3R5bGU9cy5zdHlsZSx0aGlzLmNvbG9yPXMuY29sb3IsdGhpcy5zaXplPXMuc2l6ZXx8TTcuQkFTRVNJWkUsdGhpcy50ZXh0U2l6ZT1zLnRleHRTaXplfHx0aGlzLnNpemUsdGhpcy5waGFudG9tPSEhcy5waGFudG9tLHRoaXMuZm9udD1zLmZvbnR8fCIiLHRoaXMuZm9udEZhbWlseT1zLmZvbnRGYW1pbHl8fCIiLHRoaXMuZm9udFdlaWdodD1zLmZvbnRXZWlnaHR8fCIiLHRoaXMuZm9udFNoYXBlPXMuZm9udFNoYXBlfHwiIix0aGlzLnNpemVNdWx0aXBsaWVyPVgkZVt0aGlzLnNpemUtMV0sdGhpcy5tYXhTaXplPXMubWF4U2l6ZSx0aGlzLm1pblJ1bGVUaGlja25lc3M9cy5taW5SdWxlVGhpY2tuZXNzLHRoaXMuX2ZvbnRNZXRyaWNzPXZvaWQgMH1leHRlbmQocyl7dmFyIHU9e3N0eWxlOnRoaXMuc3R5bGUsc2l6ZTp0aGlzLnNpemUsdGV4dFNpemU6dGhpcy50ZXh0U2l6ZSxjb2xvcjp0aGlzLmNvbG9yLHBoYW50b206dGhpcy5waGFudG9tLGZvbnQ6dGhpcy5mb250LGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5LGZvbnRXZWlnaHQ6dGhpcy5mb250V2VpZ2h0LGZvbnRTaGFwZTp0aGlzLmZvbnRTaGFwZSxtYXhTaXplOnRoaXMubWF4U2l6ZSxtaW5SdWxlVGhpY2tuZXNzOnRoaXMubWluUnVsZVRoaWNrbmVzc307Zm9yKHZhciBkIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShkKSYmKHVbZF09c1tkXSk7cmV0dXJuIG5ldyBNNyh1KX1oYXZpbmdTdHlsZShzKXtyZXR1cm4gdGhpcy5zdHlsZT09PXM/dGhpczp0aGlzLmV4dGVuZCh7c3R5bGU6cyxzaXplOlEkZSh0aGlzLnRleHRTaXplLHMpfSl9aGF2aW5nQ3JhbXBlZFN0eWxlKCl7cmV0dXJuIHRoaXMuaGF2aW5nU3R5bGUodGhpcy5zdHlsZS5jcmFtcCgpKX1oYXZpbmdTaXplKHMpe3JldHVybiB0aGlzLnNpemU9PT1zJiZ0aGlzLnRleHRTaXplPT09cz90aGlzOnRoaXMuZXh0ZW5kKHtzdHlsZTp0aGlzLnN0eWxlLnRleHQoKSxzaXplOnMsdGV4dFNpemU6cyxzaXplTXVsdGlwbGllcjpYJGVbcy0xXX0pfWhhdmluZ0Jhc2VTdHlsZShzKXtzPXN8fHRoaXMuc3R5bGUudGV4dCgpO3ZhciB1PVEkZShNNy5CQVNFU0laRSxzKTtyZXR1cm4gdGhpcy5zaXplPT09dSYmdGhpcy50ZXh0U2l6ZT09PU03LkJBU0VTSVpFJiZ0aGlzLnN0eWxlPT09cz90aGlzOnRoaXMuZXh0ZW5kKHtzdHlsZTpzLHNpemU6dX0pfWhhdmluZ0Jhc2VTaXppbmcoKXt2YXIgcztzd2l0Y2godGhpcy5zdHlsZS5pZCl7Y2FzZSA0OmNhc2UgNTpzPTM7YnJlYWs7Y2FzZSA2OmNhc2UgNzpzPTE7YnJlYWs7ZGVmYXVsdDpzPTZ9cmV0dXJuIHRoaXMuZXh0ZW5kKHtzdHlsZTp0aGlzLnN0eWxlLnRleHQoKSxzaXplOnN9KX13aXRoQ29sb3Iocyl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtjb2xvcjpzfSl9d2l0aFBoYW50b20oKXtyZXR1cm4gdGhpcy5leHRlbmQoe3BoYW50b206ITB9KX13aXRoRm9udChzKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnQ6c30pfXdpdGhUZXh0Rm9udEZhbWlseShzKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRGYW1pbHk6cyxmb250OiIifSl9d2l0aFRleHRGb250V2VpZ2h0KHMpe3JldHVybiB0aGlzLmV4dGVuZCh7Zm9udFdlaWdodDpzLGZvbnQ6IiJ9KX13aXRoVGV4dEZvbnRTaGFwZShzKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRTaGFwZTpzLGZvbnQ6IiJ9KX1zaXppbmdDbGFzc2VzKHMpe3JldHVybiBzLnNpemUhPT10aGlzLnNpemU/WyJzaXppbmciLCJyZXNldC1zaXplIitzLnNpemUsInNpemUiK3RoaXMuc2l6ZV06W119YmFzZVNpemluZ0NsYXNzZXMoKXtyZXR1cm4gdGhpcy5zaXplIT09TTcuQkFTRVNJWkU/WyJzaXppbmciLCJyZXNldC1zaXplIit0aGlzLnNpemUsInNpemUiK003LkJBU0VTSVpFXTpbXX1mb250TWV0cmljcygpe3JldHVybiB0aGlzLl9mb250TWV0cmljc3x8KHRoaXMuX2ZvbnRNZXRyaWNzPW9IdCh0aGlzLnNpemUpKSx0aGlzLl9mb250TWV0cmljc31nZXRDb2xvcigpe3JldHVybiB0aGlzLnBoYW50b20/InRyYW5zcGFyZW50Ijp0aGlzLmNvbG9yfX1NNy5CQVNFU0laRT02O3ZhciBlYmU9e3B0OjEsbW06NzIyNy8yNTQwLGNtOjcyMjcvMjU0LGluOjcyLjI3LGJwOjgwMy84MDAscGM6MTIsZGQ6MTIzOC8xMTU3LGNjOjE0ODU2LzExNTcsbmQ6Njg1LzY0MixuYzoxMzcwLzEwNyxzcDoxLzY1NTM2LHB4OjgwMy84MDB9LHVIdD17ZXg6ITAsZW06ITAsbXU6ITB9LEokZT1mdW5jdGlvbihzKXtyZXR1cm4gdHlwZW9mIHMhPSJzdHJpbmciJiYocz1zLnVuaXQpLHMgaW4gZWJlfHxzIGluIHVIdHx8cz09PSJleCJ9LFVoPWZ1bmN0aW9uKHMsdSl7dmFyIGQ7aWYocy51bml0IGluIGViZSlkPWViZVtzLnVuaXRdL3UuZm9udE1ldHJpY3MoKS5wdFBlckVtL3Uuc2l6ZU11bHRpcGxpZXI7ZWxzZSBpZihzLnVuaXQ9PT0ibXUiKWQ9dS5mb250TWV0cmljcygpLmNzc0VtUGVyTXU7ZWxzZXt2YXIgcDtpZih1LnN0eWxlLmlzVGlnaHQoKT9wPXUuaGF2aW5nU3R5bGUodS5zdHlsZS50ZXh0KCkpOnA9dSxzLnVuaXQ9PT0iZXgiKWQ9cC5mb250TWV0cmljcygpLnhIZWlnaHQ7ZWxzZSBpZihzLnVuaXQ9PT0iZW0iKWQ9cC5mb250TWV0cmljcygpLnF1YWQ7ZWxzZSB0aHJvdyBuZXcgQ2koIkludmFsaWQgdW5pdDogJyIrcy51bml0KyInIik7cCE9PXUmJihkKj1wLnNpemVNdWx0aXBsaWVyL3Uuc2l6ZU11bHRpcGxpZXIpfXJldHVybiBNYXRoLm1pbihzLm51bWJlcipkLHUubWF4U2l6ZSl9LFJpPWZ1bmN0aW9uKHMpe3JldHVybitzLnRvRml4ZWQoNCkrImVtIn0sVDk9ZnVuY3Rpb24ocyl7cmV0dXJuIHMuZmlsdGVyKHU9PnUpLmpvaW4oIiAiKX0sWiRlPWZ1bmN0aW9uKHMsdSxkKXtpZih0aGlzLmNsYXNzZXM9c3x8W10sdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMuaGVpZ2h0PTAsdGhpcy5kZXB0aD0wLHRoaXMubWF4Rm9udFNpemU9MCx0aGlzLnN0eWxlPWR8fHt9LHUpe3Uuc3R5bGUuaXNUaWdodCgpJiZ0aGlzLmNsYXNzZXMucHVzaCgibXRpZ2h0Iik7dmFyIHA9dS5nZXRDb2xvcigpO3AmJih0aGlzLnN0eWxlLmNvbG9yPXApfX0sZXplPWZ1bmN0aW9uKHMpe3ZhciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocyk7dS5jbGFzc05hbWU9VDkodGhpcy5jbGFzc2VzKTtmb3IodmFyIGQgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KGQpJiYodS5zdHlsZVtkXT10aGlzLnN0eWxlW2RdKTtmb3IodmFyIHAgaW4gdGhpcy5hdHRyaWJ1dGVzKXRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShwKSYmdS5zZXRBdHRyaWJ1dGUocCx0aGlzLmF0dHJpYnV0ZXNbcF0pO2Zvcih2YXIgdj0wO3Y8dGhpcy5jaGlsZHJlbi5sZW5ndGg7disrKXUuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlblt2XS50b05vZGUoKSk7cmV0dXJuIHV9LHR6ZT1mdW5jdGlvbihzKXt2YXIgdT0iPCIrczt0aGlzLmNsYXNzZXMubGVuZ3RoJiYodSs9JyBjbGFzcz0iJytZYS5lc2NhcGUoVDkodGhpcy5jbGFzc2VzKSkrJyInKTt2YXIgZD0iIjtmb3IodmFyIHAgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHApJiYoZCs9WWEuaHlwaGVuYXRlKHApKyI6Iit0aGlzLnN0eWxlW3BdKyI7Iik7ZCYmKHUrPScgc3R5bGU9IicrWWEuZXNjYXBlKGQpKyciJyk7Zm9yKHZhciB2IGluIHRoaXMuYXR0cmlidXRlcyl0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkodikmJih1Kz0iICIrdisnPSInK1lhLmVzY2FwZSh0aGlzLmF0dHJpYnV0ZXNbdl0pKyciJyk7dSs9Ij4iO2Zvcih2YXIgYj0wO2I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YisrKXUrPXRoaXMuY2hpbGRyZW5bYl0udG9NYXJrdXAoKTtyZXR1cm4gdSs9IjwvIitzKyI+Iix1fTtjbGFzcyBjUntjb25zdHJ1Y3RvcihzLHUsZCxwKXt0aGlzLmNoaWxkcmVuPXZvaWQgMCx0aGlzLmF0dHJpYnV0ZXM9dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMud2lkdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLFokZS5jYWxsKHRoaXMscyxkLHApLHRoaXMuY2hpbGRyZW49dXx8W119c2V0QXR0cmlidXRlKHMsdSl7dGhpcy5hdHRyaWJ1dGVzW3NdPXV9aGFzQ2xhc3Mocyl7cmV0dXJuIFlhLmNvbnRhaW5zKHRoaXMuY2xhc3NlcyxzKX10b05vZGUoKXtyZXR1cm4gZXplLmNhbGwodGhpcywic3BhbiIpfXRvTWFya3VwKCl7cmV0dXJuIHR6ZS5jYWxsKHRoaXMsInNwYW4iKX19Y2xhc3MgdGJle2NvbnN0cnVjdG9yKHMsdSxkLHApe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5zdHlsZT12b2lkIDAsWiRlLmNhbGwodGhpcyx1LHApLHRoaXMuY2hpbGRyZW49ZHx8W10sdGhpcy5zZXRBdHRyaWJ1dGUoImhyZWYiLHMpfXNldEF0dHJpYnV0ZShzLHUpe3RoaXMuYXR0cmlidXRlc1tzXT11fWhhc0NsYXNzKHMpe3JldHVybiBZYS5jb250YWlucyh0aGlzLmNsYXNzZXMscyl9dG9Ob2RlKCl7cmV0dXJuIGV6ZS5jYWxsKHRoaXMsImEiKX10b01hcmt1cCgpe3JldHVybiB0emUuY2FsbCh0aGlzLCJhIil9fWNsYXNzIGxIdHtjb25zdHJ1Y3RvcihzLHUsZCl7dGhpcy5zcmM9dm9pZCAwLHRoaXMuYWx0PXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmRlcHRoPXZvaWQgMCx0aGlzLm1heEZvbnRTaXplPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCx0aGlzLmFsdD11LHRoaXMuc3JjPXMsdGhpcy5jbGFzc2VzPVsibW9yZCJdLHRoaXMuc3R5bGU9ZH1oYXNDbGFzcyhzKXtyZXR1cm4gWWEuY29udGFpbnModGhpcy5jbGFzc2VzLHMpfXRvTm9kZSgpe3ZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpO3Muc3JjPXRoaXMuc3JjLHMuYWx0PXRoaXMuYWx0LHMuY2xhc3NOYW1lPSJtb3JkIjtmb3IodmFyIHUgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHUpJiYocy5zdHlsZVt1XT10aGlzLnN0eWxlW3VdKTtyZXR1cm4gc310b01hcmt1cCgpe3ZhciBzPSI8aW1nICBzcmM9JyIrdGhpcy5zcmMrIiAnYWx0PSciK3RoaXMuYWx0KyInICIsdT0iIjtmb3IodmFyIGQgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KGQpJiYodSs9WWEuaHlwaGVuYXRlKGQpKyI6Iit0aGlzLnN0eWxlW2RdKyI7Iik7cmV0dXJuIHUmJihzKz0nIHN0eWxlPSInK1lhLmVzY2FwZSh1KSsnIicpLHMrPSInLz4iLHN9fXZhciBoSHQ9e8OuOiLEscyCIizDrzoixLHMiCIsw606IsSxzIEiLMOsOiLEscyAIn07Y2xhc3MgQnZ7Y29uc3RydWN0b3Iocyx1LGQscCx2LGIseSxUKXt0aGlzLnRleHQ9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmRlcHRoPXZvaWQgMCx0aGlzLml0YWxpYz12b2lkIDAsdGhpcy5za2V3PXZvaWQgMCx0aGlzLndpZHRoPXZvaWQgMCx0aGlzLm1heEZvbnRTaXplPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMudGV4dD1zLHRoaXMuaGVpZ2h0PXV8fDAsdGhpcy5kZXB0aD1kfHwwLHRoaXMuaXRhbGljPXB8fDAsdGhpcy5za2V3PXZ8fDAsdGhpcy53aWR0aD1ifHwwLHRoaXMuY2xhc3Nlcz15fHxbXSx0aGlzLnN0eWxlPVR8fHt9LHRoaXMubWF4Rm9udFNpemU9MDt2YXIgXz1ZcXQodGhpcy50ZXh0LmNoYXJDb2RlQXQoMCkpO18mJnRoaXMuY2xhc3Nlcy5wdXNoKF8rIl9mYWxsYmFjayIpLC9bw67Dr8Otw6xdLy50ZXN0KHRoaXMudGV4dCkmJih0aGlzLnRleHQ9aEh0W3RoaXMudGV4dF0pfWhhc0NsYXNzKHMpe3JldHVybiBZYS5jb250YWlucyh0aGlzLmNsYXNzZXMscyl9dG9Ob2RlKCl7dmFyIHM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KSx1PW51bGw7dGhpcy5pdGFsaWM+MCYmKHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHUuc3R5bGUubWFyZ2luUmlnaHQ9UmkodGhpcy5pdGFsaWMpKSx0aGlzLmNsYXNzZXMubGVuZ3RoPjAmJih1PXV8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSx1LmNsYXNzTmFtZT1UOSh0aGlzLmNsYXNzZXMpKTtmb3IodmFyIGQgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KGQpJiYodT11fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksdS5zdHlsZVtkXT10aGlzLnN0eWxlW2RdKTtyZXR1cm4gdT8odS5hcHBlbmRDaGlsZChzKSx1KTpzfXRvTWFya3VwKCl7dmFyIHM9ITEsdT0iPHNwYW4iO3RoaXMuY2xhc3Nlcy5sZW5ndGgmJihzPSEwLHUrPScgY2xhc3M9IicsdSs9WWEuZXNjYXBlKFQ5KHRoaXMuY2xhc3NlcykpLHUrPSciJyk7dmFyIGQ9IiI7dGhpcy5pdGFsaWM+MCYmKGQrPSJtYXJnaW4tcmlnaHQ6Iit0aGlzLml0YWxpYysiZW07Iik7Zm9yKHZhciBwIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShwKSYmKGQrPVlhLmh5cGhlbmF0ZShwKSsiOiIrdGhpcy5zdHlsZVtwXSsiOyIpO2QmJihzPSEwLHUrPScgc3R5bGU9IicrWWEuZXNjYXBlKGQpKyciJyk7dmFyIHY9WWEuZXNjYXBlKHRoaXMudGV4dCk7cmV0dXJuIHM/KHUrPSI+Iix1Kz12LHUrPSI8L3NwYW4+Iix1KTp2fX1jbGFzcyBEN3tjb25zdHJ1Y3RvcihzLHUpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jaGlsZHJlbj1zfHxbXSx0aGlzLmF0dHJpYnV0ZXM9dXx8e319dG9Ob2RlKCl7dmFyIHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzLCJzdmciKTtmb3IodmFyIGQgaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsZCkmJnUuc2V0QXR0cmlidXRlKGQsdGhpcy5hdHRyaWJ1dGVzW2RdKTtmb3IodmFyIHA9MDtwPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3ArKyl1LmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bcF0udG9Ob2RlKCkpO3JldHVybiB1fXRvTWFya3VwKCl7dmFyIHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIic7Zm9yKHZhciB1IGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHUpJiYocys9IiAiK3UrIj0nIit0aGlzLmF0dHJpYnV0ZXNbdV0rIiciKTtzKz0iPiI7Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspcys9dGhpcy5jaGlsZHJlbltkXS50b01hcmt1cCgpO3JldHVybiBzKz0iPC9zdmc+IixzfX1jbGFzcyBDOXtjb25zdHJ1Y3RvcihzLHUpe3RoaXMucGF0aE5hbWU9dm9pZCAwLHRoaXMuYWx0ZXJuYXRlPXZvaWQgMCx0aGlzLnBhdGhOYW1lPXMsdGhpcy5hbHRlcm5hdGU9dX10b05vZGUoKXt2YXIgcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHMsInBhdGgiKTtyZXR1cm4gdGhpcy5hbHRlcm5hdGU/dS5zZXRBdHRyaWJ1dGUoImQiLHRoaXMuYWx0ZXJuYXRlKTp1LnNldEF0dHJpYnV0ZSgiZCIsVyRlW3RoaXMucGF0aE5hbWVdKSx1fXRvTWFya3VwKCl7cmV0dXJuIHRoaXMuYWx0ZXJuYXRlPyI8cGF0aCBkPSciK3RoaXMuYWx0ZXJuYXRlKyInLz4iOiI8cGF0aCBkPSciK1ckZVt0aGlzLnBhdGhOYW1lXSsiJy8+In19Y2xhc3MgbmJle2NvbnN0cnVjdG9yKHMpe3RoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXN8fHt9fXRvTm9kZSgpe3ZhciBzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocywibGluZSIpO2Zvcih2YXIgZCBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxkKSYmdS5zZXRBdHRyaWJ1dGUoZCx0aGlzLmF0dHJpYnV0ZXNbZF0pO3JldHVybiB1fXRvTWFya3VwKCl7dmFyIHM9IjxsaW5lIjtmb3IodmFyIHUgaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsdSkmJihzKz0iICIrdSsiPSciK3RoaXMuYXR0cmlidXRlc1t1XSsiJyIpO3JldHVybiBzKz0iLz4iLHN9fWZ1bmN0aW9uIG56ZShpKXtpZihpIGluc3RhbmNlb2YgQnYpcmV0dXJuIGk7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBzeW1ib2xOb2RlIGJ1dCBnb3QgIitTdHJpbmcoaSkrIi4iKX1mdW5jdGlvbiBmSHQoaSl7aWYoaSBpbnN0YW5jZW9mIGNSKXJldHVybiBpO3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgc3BhbjxIdG1sRG9tTm9kZT4gYnV0IGdvdCAiK1N0cmluZyhpKSsiLiIpfXZhciBkSHQ9e2JpbjoxLGNsb3NlOjEsaW5uZXI6MSxvcGVuOjEscHVuY3Q6MSxyZWw6MX0sZ0h0PXsiYWNjZW50LXRva2VuIjoxLG1hdGhvcmQ6MSwib3AtdG9rZW4iOjEsc3BhY2luZzoxLHRleHRvcmQ6MX0sVWw9e21hdGg6e30sdGV4dDp7fX07ZnVuY3Rpb24gd2UoaSxzLHUsZCxwLHYpe1VsW2ldW3BdPXtmb250OnMsZ3JvdXA6dSxyZXBsYWNlOmR9LHYmJmQmJihVbFtpXVtkXT1VbFtpXVtwXSl9dmFyIEFlPSJtYXRoIixzaT0idGV4dCIsVWU9Im1haW4iLCR0PSJhbXMiLHdoPSJhY2NlbnQtdG9rZW4iLGxzPSJiaW4iLERwPSJjbG9zZSIsTkQ9ImlubmVyIixDYT0ibWF0aG9yZCIsTjA9Im9wLXRva2VuIixobT0ib3BlbiIsb1E9InB1bmN0IixIdD0icmVsIixJNz0ic3BhY2luZyIsbW49InRleHRvcmQiO3dlKEFlLFVlLEh0LCLiiaEiLCJcXGVxdWl2IiwhMCksd2UoQWUsVWUsSHQsIuKJuiIsIlxccHJlYyIsITApLHdlKEFlLFVlLEh0LCLiibsiLCJcXHN1Y2MiLCEwKSx3ZShBZSxVZSxIdCwi4oi8IiwiXFxzaW0iLCEwKSx3ZShBZSxVZSxIdCwi4oqlIiwiXFxwZXJwIiksd2UoQWUsVWUsSHQsIuKqryIsIlxccHJlY2VxIiwhMCksd2UoQWUsVWUsSHQsIuKqsCIsIlxcc3VjY2VxIiwhMCksd2UoQWUsVWUsSHQsIuKJgyIsIlxcc2ltZXEiLCEwKSx3ZShBZSxVZSxIdCwi4oijIiwiXFxtaWQiLCEwKSx3ZShBZSxVZSxIdCwi4omqIiwiXFxsbCIsITApLHdlKEFlLFVlLEh0LCLiiasiLCJcXGdnIiwhMCksd2UoQWUsVWUsSHQsIuKJjSIsIlxcYXN5bXAiLCEwKSx3ZShBZSxVZSxIdCwi4oilIiwiXFxwYXJhbGxlbCIpLHdlKEFlLFVlLEh0LCLii4giLCJcXGJvd3RpZSIsITApLHdlKEFlLFVlLEh0LCLijKMiLCJcXHNtaWxlIiwhMCksd2UoQWUsVWUsSHQsIuKKkSIsIlxcc3FzdWJzZXRlcSIsITApLHdlKEFlLFVlLEh0LCLiipIiLCJcXHNxc3Vwc2V0ZXEiLCEwKSx3ZShBZSxVZSxIdCwi4omQIiwiXFxkb3RlcSIsITApLHdlKEFlLFVlLEh0LCLijKIiLCJcXGZyb3duIiwhMCksd2UoQWUsVWUsSHQsIuKIiyIsIlxcbmkiLCEwKSx3ZShBZSxVZSxIdCwi4oidIiwiXFxwcm9wdG8iLCEwKSx3ZShBZSxVZSxIdCwi4oqiIiwiXFx2ZGFzaCIsITApLHdlKEFlLFVlLEh0LCLiiqMiLCJcXGRhc2h2IiwhMCksd2UoQWUsVWUsSHQsIuKIiyIsIlxcb3ducyIpLHdlKEFlLFVlLG9RLCIuIiwiXFxsZG90cCIpLHdlKEFlLFVlLG9RLCLii4UiLCJcXGNkb3RwIiksd2UoQWUsVWUsbW4sIiMiLCJcXCMiKSx3ZShzaSxVZSxtbiwiIyIsIlxcIyIpLHdlKEFlLFVlLG1uLCImIiwiXFwmIiksd2Uoc2ksVWUsbW4sIiYiLCJcXCYiKSx3ZShBZSxVZSxtbiwi4oS1IiwiXFxhbGVwaCIsITApLHdlKEFlLFVlLG1uLCLiiIAiLCJcXGZvcmFsbCIsITApLHdlKEFlLFVlLG1uLCLihI8iLCJcXGhiYXIiLCEwKSx3ZShBZSxVZSxtbiwi4oiDIiwiXFxleGlzdHMiLCEwKSx3ZShBZSxVZSxtbiwi4oiHIiwiXFxuYWJsYSIsITApLHdlKEFlLFVlLG1uLCLima0iLCJcXGZsYXQiLCEwKSx3ZShBZSxVZSxtbiwi4oSTIiwiXFxlbGwiLCEwKSx3ZShBZSxVZSxtbiwi4pmuIiwiXFxuYXR1cmFsIiwhMCksd2UoQWUsVWUsbW4sIuKZoyIsIlxcY2x1YnN1aXQiLCEwKSx3ZShBZSxVZSxtbiwi4oSYIiwiXFx3cCIsITApLHdlKEFlLFVlLG1uLCLima8iLCJcXHNoYXJwIiwhMCksd2UoQWUsVWUsbW4sIuKZoiIsIlxcZGlhbW9uZHN1aXQiLCEwKSx3ZShBZSxVZSxtbiwi4oScIiwiXFxSZSIsITApLHdlKEFlLFVlLG1uLCLimaEiLCJcXGhlYXJ0c3VpdCIsITApLHdlKEFlLFVlLG1uLCLihJEiLCJcXEltIiwhMCksd2UoQWUsVWUsbW4sIuKZoCIsIlxcc3BhZGVzdWl0IiwhMCksd2UoQWUsVWUsbW4sIsKnIiwiXFxTIiwhMCksd2Uoc2ksVWUsbW4sIsKnIiwiXFxTIiksd2UoQWUsVWUsbW4sIsK2IiwiXFxQIiwhMCksd2Uoc2ksVWUsbW4sIsK2IiwiXFxQIiksd2UoQWUsVWUsbW4sIuKAoCIsIlxcZGFnIiksd2Uoc2ksVWUsbW4sIuKAoCIsIlxcZGFnIiksd2Uoc2ksVWUsbW4sIuKAoCIsIlxcdGV4dGRhZ2dlciIpLHdlKEFlLFVlLG1uLCLigKEiLCJcXGRkYWciKSx3ZShzaSxVZSxtbiwi4oChIiwiXFxkZGFnIiksd2Uoc2ksVWUsbW4sIuKAoSIsIlxcdGV4dGRhZ2dlcmRibCIpLHdlKEFlLFVlLERwLCLijrEiLCJcXHJtb3VzdGFjaGUiLCEwKSx3ZShBZSxVZSxobSwi4o6wIiwiXFxsbW91c3RhY2hlIiwhMCksd2UoQWUsVWUsRHAsIuKfryIsIlxccmdyb3VwIiwhMCksd2UoQWUsVWUsaG0sIuKfriIsIlxcbGdyb3VwIiwhMCksd2UoQWUsVWUsbHMsIuKIkyIsIlxcbXAiLCEwKSx3ZShBZSxVZSxscywi4oqWIiwiXFxvbWludXMiLCEwKSx3ZShBZSxVZSxscywi4oqOIiwiXFx1cGx1cyIsITApLHdlKEFlLFVlLGxzLCLiipMiLCJcXHNxY2FwIiwhMCksd2UoQWUsVWUsbHMsIuKIlyIsIlxcYXN0Iiksd2UoQWUsVWUsbHMsIuKKlCIsIlxcc3FjdXAiLCEwKSx3ZShBZSxVZSxscywi4pevIiwiXFxiaWdjaXJjIiwhMCksd2UoQWUsVWUsbHMsIuKImSIsIlxcYnVsbGV0IiwhMCksd2UoQWUsVWUsbHMsIuKAoSIsIlxcZGRhZ2dlciIpLHdlKEFlLFVlLGxzLCLiiYAiLCJcXHdyIiwhMCksd2UoQWUsVWUsbHMsIuKovyIsIlxcYW1hbGciKSx3ZShBZSxVZSxscywiJiIsIlxcQW5kIiksd2UoQWUsVWUsSHQsIuKftSIsIlxcbG9uZ2xlZnRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLih5AiLCJcXExlZnRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLin7giLCJcXExvbmdsZWZ0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4p+2IiwiXFxsb25ncmlnaHRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLih5IiLCJcXFJpZ2h0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4p+5IiwiXFxMb25ncmlnaHRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLihpQiLCJcXGxlZnRyaWdodGFycm93IiwhMCksd2UoQWUsVWUsSHQsIuKftyIsIlxcbG9uZ2xlZnRyaWdodGFycm93IiwhMCksd2UoQWUsVWUsSHQsIuKHlCIsIlxcTGVmdHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4p+6IiwiXFxMb25nbGVmdHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oamIiwiXFxtYXBzdG8iLCEwKSx3ZShBZSxVZSxIdCwi4p+8IiwiXFxsb25nbWFwc3RvIiwhMCksd2UoQWUsVWUsSHQsIuKGlyIsIlxcbmVhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLihqkiLCJcXGhvb2tsZWZ0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oaqIiwiXFxob29rcmlnaHRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLihpgiLCJcXHNlYXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oa8IiwiXFxsZWZ0aGFycG9vbnVwIiwhMCksd2UoQWUsVWUsSHQsIuKHgCIsIlxccmlnaHRoYXJwb29udXAiLCEwKSx3ZShBZSxVZSxIdCwi4oaZIiwiXFxzd2Fycm93IiwhMCksd2UoQWUsVWUsSHQsIuKGvSIsIlxcbGVmdGhhcnBvb25kb3duIiwhMCksd2UoQWUsVWUsSHQsIuKHgSIsIlxccmlnaHRoYXJwb29uZG93biIsITApLHdlKEFlLFVlLEh0LCLihpYiLCJcXG53YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oeMIiwiXFxyaWdodGxlZnRoYXJwb29ucyIsITApLHdlKEFlLCR0LEh0LCLiia4iLCJcXG5sZXNzIiwhMCksd2UoQWUsJHQsSHQsIu6AkCIsIlxcQG5sZXFzbGFudCIpLHdlKEFlLCR0LEh0LCLugJEiLCJcXEBubGVxcSIpLHdlKEFlLCR0LEh0LCLiqociLCJcXGxuZXEiLCEwKSx3ZShBZSwkdCxIdCwi4omoIiwiXFxsbmVxcSIsITApLHdlKEFlLCR0LEh0LCLugIwiLCJcXEBsdmVydG5lcXEiKSx3ZShBZSwkdCxIdCwi4oumIiwiXFxsbnNpbSIsITApLHdlKEFlLCR0LEh0LCLiqokiLCJcXGxuYXBwcm94IiwhMCksd2UoQWUsJHQsSHQsIuKKgCIsIlxcbnByZWMiLCEwKSx3ZShBZSwkdCxIdCwi4ougIiwiXFxucHJlY2VxIiwhMCksd2UoQWUsJHQsSHQsIuKLqCIsIlxccHJlY25zaW0iLCEwKSx3ZShBZSwkdCxIdCwi4qq5IiwiXFxwcmVjbmFwcHJveCIsITApLHdlKEFlLCR0LEh0LCLiiYEiLCJcXG5zaW0iLCEwKSx3ZShBZSwkdCxIdCwi7oCGIiwiXFxAbnNob3J0bWlkIiksd2UoQWUsJHQsSHQsIuKIpCIsIlxcbm1pZCIsITApLHdlKEFlLCR0LEh0LCLiiqwiLCJcXG52ZGFzaCIsITApLHdlKEFlLCR0LEh0LCLiiq0iLCJcXG52RGFzaCIsITApLHdlKEFlLCR0LEh0LCLii6oiLCJcXG50cmlhbmdsZWxlZnQiKSx3ZShBZSwkdCxIdCwi4ousIiwiXFxudHJpYW5nbGVsZWZ0ZXEiLCEwKSx3ZShBZSwkdCxIdCwi4oqKIiwiXFxzdWJzZXRuZXEiLCEwKSx3ZShBZSwkdCxIdCwi7oCaIiwiXFxAdmFyc3Vic2V0bmVxIiksd2UoQWUsJHQsSHQsIuKriyIsIlxcc3Vic2V0bmVxcSIsITApLHdlKEFlLCR0LEh0LCLugJciLCJcXEB2YXJzdWJzZXRuZXFxIiksd2UoQWUsJHQsSHQsIuKJryIsIlxcbmd0ciIsITApLHdlKEFlLCR0LEh0LCLugI8iLCJcXEBuZ2Vxc2xhbnQiKSx3ZShBZSwkdCxIdCwi7oCOIiwiXFxAbmdlcXEiKSx3ZShBZSwkdCxIdCwi4qqIIiwiXFxnbmVxIiwhMCksd2UoQWUsJHQsSHQsIuKJqSIsIlxcZ25lcXEiLCEwKSx3ZShBZSwkdCxIdCwi7oCNIiwiXFxAZ3ZlcnRuZXFxIiksd2UoQWUsJHQsSHQsIuKLpyIsIlxcZ25zaW0iLCEwKSx3ZShBZSwkdCxIdCwi4qqKIiwiXFxnbmFwcHJveCIsITApLHdlKEFlLCR0LEh0LCLiioEiLCJcXG5zdWNjIiwhMCksd2UoQWUsJHQsSHQsIuKLoSIsIlxcbnN1Y2NlcSIsITApLHdlKEFlLCR0LEh0LCLii6kiLCJcXHN1Y2Nuc2ltIiwhMCksd2UoQWUsJHQsSHQsIuKquiIsIlxcc3VjY25hcHByb3giLCEwKSx3ZShBZSwkdCxIdCwi4omGIiwiXFxuY29uZyIsITApLHdlKEFlLCR0LEh0LCLugIciLCJcXEBuc2hvcnRwYXJhbGxlbCIpLHdlKEFlLCR0LEh0LCLiiKYiLCJcXG5wYXJhbGxlbCIsITApLHdlKEFlLCR0LEh0LCLiiq8iLCJcXG5WRGFzaCIsITApLHdlKEFlLCR0LEh0LCLii6siLCJcXG50cmlhbmdsZXJpZ2h0Iiksd2UoQWUsJHQsSHQsIuKLrSIsIlxcbnRyaWFuZ2xlcmlnaHRlcSIsITApLHdlKEFlLCR0LEh0LCLugJgiLCJcXEBuc3Vwc2V0ZXFxIiksd2UoQWUsJHQsSHQsIuKKiyIsIlxcc3Vwc2V0bmVxIiwhMCksd2UoQWUsJHQsSHQsIu6AmyIsIlxcQHZhcnN1cHNldG5lcSIpLHdlKEFlLCR0LEh0LCLiq4wiLCJcXHN1cHNldG5lcXEiLCEwKSx3ZShBZSwkdCxIdCwi7oCZIiwiXFxAdmFyc3Vwc2V0bmVxcSIpLHdlKEFlLCR0LEh0LCLiiq4iLCJcXG5WZGFzaCIsITApLHdlKEFlLCR0LEh0LCLiqrUiLCJcXHByZWNuZXFxIiwhMCksd2UoQWUsJHQsSHQsIuKqtiIsIlxcc3VjY25lcXEiLCEwKSx3ZShBZSwkdCxIdCwi7oCWIiwiXFxAbnN1YnNldGVxcSIpLHdlKEFlLCR0LGxzLCLiirQiLCJcXHVubGhkIiksd2UoQWUsJHQsbHMsIuKKtSIsIlxcdW5yaGQiKSx3ZShBZSwkdCxIdCwi4oaaIiwiXFxubGVmdGFycm93IiwhMCksd2UoQWUsJHQsSHQsIuKGmyIsIlxcbnJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oeNIiwiXFxuTGVmdGFycm93IiwhMCksd2UoQWUsJHQsSHQsIuKHjyIsIlxcblJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oauIiwiXFxubGVmdHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oeOIiwiXFxuTGVmdHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4pazIiwiXFx2YXJ0cmlhbmdsZSIpLHdlKEFlLCR0LG1uLCLihI8iLCJcXGhzbGFzaCIpLHdlKEFlLCR0LG1uLCLilr0iLCJcXHRyaWFuZ2xlZG93biIpLHdlKEFlLCR0LG1uLCLil4oiLCJcXGxvemVuZ2UiKSx3ZShBZSwkdCxtbiwi4pOIIiwiXFxjaXJjbGVkUyIpLHdlKEFlLCR0LG1uLCLCriIsIlxcY2lyY2xlZFIiKSx3ZShzaSwkdCxtbiwiwq4iLCJcXGNpcmNsZWRSIiksd2UoQWUsJHQsbW4sIuKIoSIsIlxcbWVhc3VyZWRhbmdsZSIsITApLHdlKEFlLCR0LG1uLCLiiIQiLCJcXG5leGlzdHMiKSx3ZShBZSwkdCxtbiwi4oSnIiwiXFxtaG8iKSx3ZShBZSwkdCxtbiwi4oSyIiwiXFxGaW52IiwhMCksd2UoQWUsJHQsbW4sIuKFgSIsIlxcR2FtZSIsITApLHdlKEFlLCR0LG1uLCLigLUiLCJcXGJhY2twcmltZSIpLHdlKEFlLCR0LG1uLCLilrIiLCJcXGJsYWNrdHJpYW5nbGUiKSx3ZShBZSwkdCxtbiwi4pa8IiwiXFxibGFja3RyaWFuZ2xlZG93biIpLHdlKEFlLCR0LG1uLCLilqAiLCJcXGJsYWNrc3F1YXJlIiksd2UoQWUsJHQsbW4sIuKnqyIsIlxcYmxhY2tsb3plbmdlIiksd2UoQWUsJHQsbW4sIuKYhSIsIlxcYmlnc3RhciIpLHdlKEFlLCR0LG1uLCLiiKIiLCJcXHNwaGVyaWNhbGFuZ2xlIiwhMCksd2UoQWUsJHQsbW4sIuKIgSIsIlxcY29tcGxlbWVudCIsITApLHdlKEFlLCR0LG1uLCLDsCIsIlxcZXRoIiwhMCksd2Uoc2ksVWUsbW4sIsOwIiwiw7AiKSx3ZShBZSwkdCxtbiwi4pWxIiwiXFxkaWFndXAiKSx3ZShBZSwkdCxtbiwi4pWyIiwiXFxkaWFnZG93biIpLHdlKEFlLCR0LG1uLCLilqEiLCJcXHNxdWFyZSIpLHdlKEFlLCR0LG1uLCLilqEiLCJcXEJveCIpLHdlKEFlLCR0LG1uLCLil4oiLCJcXERpYW1vbmQiKSx3ZShBZSwkdCxtbiwiwqUiLCJcXHllbiIsITApLHdlKHNpLCR0LG1uLCLCpSIsIlxceWVuIiwhMCksd2UoQWUsJHQsbW4sIuKckyIsIlxcY2hlY2ttYXJrIiwhMCksd2Uoc2ksJHQsbW4sIuKckyIsIlxcY2hlY2ttYXJrIiksd2UoQWUsJHQsbW4sIuKEtiIsIlxcYmV0aCIsITApLHdlKEFlLCR0LG1uLCLihLgiLCJcXGRhbGV0aCIsITApLHdlKEFlLCR0LG1uLCLihLciLCJcXGdpbWVsIiwhMCksd2UoQWUsJHQsbW4sIs+dIiwiXFxkaWdhbW1hIiwhMCksd2UoQWUsJHQsbW4sIs+wIiwiXFx2YXJrYXBwYSIpLHdlKEFlLCR0LGhtLCLilIwiLCJcXEB1bGNvcm5lciIsITApLHdlKEFlLCR0LERwLCLilJAiLCJcXEB1cmNvcm5lciIsITApLHdlKEFlLCR0LGhtLCLilJQiLCJcXEBsbGNvcm5lciIsITApLHdlKEFlLCR0LERwLCLilJgiLCJcXEBscmNvcm5lciIsITApLHdlKEFlLCR0LEh0LCLiiaYiLCJcXGxlcXEiLCEwKSx3ZShBZSwkdCxIdCwi4qm9IiwiXFxsZXFzbGFudCIsITApLHdlKEFlLCR0LEh0LCLiqpUiLCJcXGVxc2xhbnRsZXNzIiwhMCksd2UoQWUsJHQsSHQsIuKJsiIsIlxcbGVzc3NpbSIsITApLHdlKEFlLCR0LEh0LCLiqoUiLCJcXGxlc3NhcHByb3giLCEwKSx3ZShBZSwkdCxIdCwi4omKIiwiXFxhcHByb3hlcSIsITApLHdlKEFlLCR0LGxzLCLii5YiLCJcXGxlc3Nkb3QiKSx3ZShBZSwkdCxIdCwi4ouYIiwiXFxsbGwiLCEwKSx3ZShBZSwkdCxIdCwi4om2IiwiXFxsZXNzZ3RyIiwhMCksd2UoQWUsJHQsSHQsIuKLmiIsIlxcbGVzc2VxZ3RyIiwhMCksd2UoQWUsJHQsSHQsIuKqiyIsIlxcbGVzc2VxcWd0ciIsITApLHdlKEFlLCR0LEh0LCLiiZEiLCJcXGRvdGVxZG90Iiksd2UoQWUsJHQsSHQsIuKJkyIsIlxccmlzaW5nZG90c2VxIiwhMCksd2UoQWUsJHQsSHQsIuKJkiIsIlxcZmFsbGluZ2RvdHNlcSIsITApLHdlKEFlLCR0LEh0LCLiiL0iLCJcXGJhY2tzaW0iLCEwKSx3ZShBZSwkdCxIdCwi4ouNIiwiXFxiYWNrc2ltZXEiLCEwKSx3ZShBZSwkdCxIdCwi4quFIiwiXFxzdWJzZXRlcXEiLCEwKSx3ZShBZSwkdCxIdCwi4ouQIiwiXFxTdWJzZXQiLCEwKSx3ZShBZSwkdCxIdCwi4oqPIiwiXFxzcXN1YnNldCIsITApLHdlKEFlLCR0LEh0LCLiibwiLCJcXHByZWNjdXJseWVxIiwhMCksd2UoQWUsJHQsSHQsIuKLniIsIlxcY3VybHllcXByZWMiLCEwKSx3ZShBZSwkdCxIdCwi4om+IiwiXFxwcmVjc2ltIiwhMCksd2UoQWUsJHQsSHQsIuKqtyIsIlxccHJlY2FwcHJveCIsITApLHdlKEFlLCR0LEh0LCLiirIiLCJcXHZhcnRyaWFuZ2xlbGVmdCIpLHdlKEFlLCR0LEh0LCLiirQiLCJcXHRyaWFuZ2xlbGVmdGVxIiksd2UoQWUsJHQsSHQsIuKKqCIsIlxcdkRhc2giLCEwKSx3ZShBZSwkdCxIdCwi4oqqIiwiXFxWdmRhc2giLCEwKSx3ZShBZSwkdCxIdCwi4oyjIiwiXFxzbWFsbHNtaWxlIiksd2UoQWUsJHQsSHQsIuKMoiIsIlxcc21hbGxmcm93biIpLHdlKEFlLCR0LEh0LCLiiY8iLCJcXGJ1bXBlcSIsITApLHdlKEFlLCR0LEh0LCLiiY4iLCJcXEJ1bXBlcSIsITApLHdlKEFlLCR0LEh0LCLiiaciLCJcXGdlcXEiLCEwKSx3ZShBZSwkdCxIdCwi4qm+IiwiXFxnZXFzbGFudCIsITApLHdlKEFlLCR0LEh0LCLiqpYiLCJcXGVxc2xhbnRndHIiLCEwKSx3ZShBZSwkdCxIdCwi4omzIiwiXFxndHJzaW0iLCEwKSx3ZShBZSwkdCxIdCwi4qqGIiwiXFxndHJhcHByb3giLCEwKSx3ZShBZSwkdCxscywi4ouXIiwiXFxndHJkb3QiKSx3ZShBZSwkdCxIdCwi4ouZIiwiXFxnZ2ciLCEwKSx3ZShBZSwkdCxIdCwi4om3IiwiXFxndHJsZXNzIiwhMCksd2UoQWUsJHQsSHQsIuKLmyIsIlxcZ3RyZXFsZXNzIiwhMCksd2UoQWUsJHQsSHQsIuKqjCIsIlxcZ3RyZXFxbGVzcyIsITApLHdlKEFlLCR0LEh0LCLiiZYiLCJcXGVxY2lyYyIsITApLHdlKEFlLCR0LEh0LCLiiZciLCJcXGNpcmNlcSIsITApLHdlKEFlLCR0LEh0LCLiiZwiLCJcXHRyaWFuZ2xlcSIsITApLHdlKEFlLCR0LEh0LCLiiLwiLCJcXHRoaWNrc2ltIiksd2UoQWUsJHQsSHQsIuKJiCIsIlxcdGhpY2thcHByb3giKSx3ZShBZSwkdCxIdCwi4quGIiwiXFxzdXBzZXRlcXEiLCEwKSx3ZShBZSwkdCxIdCwi4ouRIiwiXFxTdXBzZXQiLCEwKSx3ZShBZSwkdCxIdCwi4oqQIiwiXFxzcXN1cHNldCIsITApLHdlKEFlLCR0LEh0LCLiib0iLCJcXHN1Y2NjdXJseWVxIiwhMCksd2UoQWUsJHQsSHQsIuKLnyIsIlxcY3VybHllcXN1Y2MiLCEwKSx3ZShBZSwkdCxIdCwi4om/IiwiXFxzdWNjc2ltIiwhMCksd2UoQWUsJHQsSHQsIuKquCIsIlxcc3VjY2FwcHJveCIsITApLHdlKEFlLCR0LEh0LCLiirMiLCJcXHZhcnRyaWFuZ2xlcmlnaHQiKSx3ZShBZSwkdCxIdCwi4oq1IiwiXFx0cmlhbmdsZXJpZ2h0ZXEiKSx3ZShBZSwkdCxIdCwi4oqpIiwiXFxWZGFzaCIsITApLHdlKEFlLCR0LEh0LCLiiKMiLCJcXHNob3J0bWlkIiksd2UoQWUsJHQsSHQsIuKIpSIsIlxcc2hvcnRwYXJhbGxlbCIpLHdlKEFlLCR0LEh0LCLiiawiLCJcXGJldHdlZW4iLCEwKSx3ZShBZSwkdCxIdCwi4ouUIiwiXFxwaXRjaGZvcmsiLCEwKSx3ZShBZSwkdCxIdCwi4oidIiwiXFx2YXJwcm9wdG8iKSx3ZShBZSwkdCxIdCwi4peAIiwiXFxibGFja3RyaWFuZ2xlbGVmdCIpLHdlKEFlLCR0LEh0LCLiiLQiLCJcXHRoZXJlZm9yZSIsITApLHdlKEFlLCR0LEh0LCLiiI0iLCJcXGJhY2tlcHNpbG9uIiksd2UoQWUsJHQsSHQsIuKWtiIsIlxcYmxhY2t0cmlhbmdsZXJpZ2h0Iiksd2UoQWUsJHQsSHQsIuKItSIsIlxcYmVjYXVzZSIsITApLHdlKEFlLCR0LEh0LCLii5giLCJcXGxsbGVzcyIpLHdlKEFlLCR0LEh0LCLii5kiLCJcXGdnZ3RyIiksd2UoQWUsJHQsbHMsIuKKsiIsIlxcbGhkIiksd2UoQWUsJHQsbHMsIuKKsyIsIlxccmhkIiksd2UoQWUsJHQsSHQsIuKJgiIsIlxcZXFzaW0iLCEwKSx3ZShBZSxVZSxIdCwi4ouIIiwiXFxKb2luIiksd2UoQWUsJHQsSHQsIuKJkSIsIlxcRG90ZXEiLCEwKSx3ZShBZSwkdCxscywi4oiUIiwiXFxkb3RwbHVzIiwhMCksd2UoQWUsJHQsbHMsIuKIliIsIlxcc21hbGxzZXRtaW51cyIpLHdlKEFlLCR0LGxzLCLii5IiLCJcXENhcCIsITApLHdlKEFlLCR0LGxzLCLii5MiLCJcXEN1cCIsITApLHdlKEFlLCR0LGxzLCLiqZ4iLCJcXGRvdWJsZWJhcndlZGdlIiwhMCksd2UoQWUsJHQsbHMsIuKKnyIsIlxcYm94bWludXMiLCEwKSx3ZShBZSwkdCxscywi4oqeIiwiXFxib3hwbHVzIiwhMCksd2UoQWUsJHQsbHMsIuKLhyIsIlxcZGl2aWRlb250aW1lcyIsITApLHdlKEFlLCR0LGxzLCLii4kiLCJcXGx0aW1lcyIsITApLHdlKEFlLCR0LGxzLCLii4oiLCJcXHJ0aW1lcyIsITApLHdlKEFlLCR0LGxzLCLii4siLCJcXGxlZnR0aHJlZXRpbWVzIiwhMCksd2UoQWUsJHQsbHMsIuKLjCIsIlxccmlnaHR0aHJlZXRpbWVzIiwhMCksd2UoQWUsJHQsbHMsIuKLjyIsIlxcY3VybHl3ZWRnZSIsITApLHdlKEFlLCR0LGxzLCLii44iLCJcXGN1cmx5dmVlIiwhMCksd2UoQWUsJHQsbHMsIuKKnSIsIlxcY2lyY2xlZGRhc2giLCEwKSx3ZShBZSwkdCxscywi4oqbIiwiXFxjaXJjbGVkYXN0IiwhMCksd2UoQWUsJHQsbHMsIuKLhSIsIlxcY2VudGVyZG90Iiksd2UoQWUsJHQsbHMsIuKKuiIsIlxcaW50ZXJjYWwiLCEwKSx3ZShBZSwkdCxscywi4ouSIiwiXFxkb3VibGVjYXAiKSx3ZShBZSwkdCxscywi4ouTIiwiXFxkb3VibGVjdXAiKSx3ZShBZSwkdCxscywi4oqgIiwiXFxib3h0aW1lcyIsITApLHdlKEFlLCR0LEh0LCLih6IiLCJcXGRhc2hyaWdodGFycm93IiwhMCksd2UoQWUsJHQsSHQsIuKHoCIsIlxcZGFzaGxlZnRhcnJvdyIsITApLHdlKEFlLCR0LEh0LCLih4ciLCJcXGxlZnRsZWZ0YXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKHhiIsIlxcbGVmdHJpZ2h0YXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKHmiIsIlxcTGxlZnRhcnJvdyIsITApLHdlKEFlLCR0LEh0LCLihp4iLCJcXHR3b2hlYWRsZWZ0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oaiIiwiXFxsZWZ0YXJyb3d0YWlsIiwhMCksd2UoQWUsJHQsSHQsIuKGqyIsIlxcbG9vcGFycm93bGVmdCIsITApLHdlKEFlLCR0LEh0LCLih4siLCJcXGxlZnRyaWdodGhhcnBvb25zIiwhMCksd2UoQWUsJHQsSHQsIuKGtiIsIlxcY3VydmVhcnJvd2xlZnQiLCEwKSx3ZShBZSwkdCxIdCwi4oa6IiwiXFxjaXJjbGVhcnJvd2xlZnQiLCEwKSx3ZShBZSwkdCxIdCwi4oawIiwiXFxMc2giLCEwKSx3ZShBZSwkdCxIdCwi4oeIIiwiXFx1cHVwYXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKGvyIsIlxcdXBoYXJwb29ubGVmdCIsITApLHdlKEFlLCR0LEh0LCLih4MiLCJcXGRvd25oYXJwb29ubGVmdCIsITApLHdlKEFlLFVlLEh0LCLiirYiLCJcXG9yaWdvZiIsITApLHdlKEFlLFVlLEh0LCLiirciLCJcXGltYWdlb2YiLCEwKSx3ZShBZSwkdCxIdCwi4oq4IiwiXFxtdWx0aW1hcCIsITApLHdlKEFlLCR0LEh0LCLihq0iLCJcXGxlZnRyaWdodHNxdWlnYXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oeJIiwiXFxyaWdodHJpZ2h0YXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKHhCIsIlxccmlnaHRsZWZ0YXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKGoCIsIlxcdHdvaGVhZHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oajIiwiXFxyaWdodGFycm93dGFpbCIsITApLHdlKEFlLCR0LEh0LCLihqwiLCJcXGxvb3BhcnJvd3JpZ2h0IiwhMCksd2UoQWUsJHQsSHQsIuKGtyIsIlxcY3VydmVhcnJvd3JpZ2h0IiwhMCksd2UoQWUsJHQsSHQsIuKGuyIsIlxcY2lyY2xlYXJyb3dyaWdodCIsITApLHdlKEFlLCR0LEh0LCLihrEiLCJcXFJzaCIsITApLHdlKEFlLCR0LEh0LCLih4oiLCJcXGRvd25kb3duYXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKGviIsIlxcdXBoYXJwb29ucmlnaHQiLCEwKSx3ZShBZSwkdCxIdCwi4oeCIiwiXFxkb3duaGFycG9vbnJpZ2h0IiwhMCksd2UoQWUsJHQsSHQsIuKHnSIsIlxccmlnaHRzcXVpZ2Fycm93IiwhMCksd2UoQWUsJHQsSHQsIuKHnSIsIlxcbGVhZHN0byIpLHdlKEFlLCR0LEh0LCLih5siLCJcXFJyaWdodGFycm93IiwhMCksd2UoQWUsJHQsSHQsIuKGviIsIlxccmVzdHJpY3Rpb24iKSx3ZShBZSxVZSxtbiwi4oCYIiwiYCIpLHdlKEFlLFVlLG1uLCIkIiwiXFwkIiksd2Uoc2ksVWUsbW4sIiQiLCJcXCQiKSx3ZShzaSxVZSxtbiwiJCIsIlxcdGV4dGRvbGxhciIpLHdlKEFlLFVlLG1uLCIlIiwiXFwlIiksd2Uoc2ksVWUsbW4sIiUiLCJcXCUiKSx3ZShBZSxVZSxtbiwiXyIsIlxcXyIpLHdlKHNpLFVlLG1uLCJfIiwiXFxfIiksd2Uoc2ksVWUsbW4sIl8iLCJcXHRleHR1bmRlcnNjb3JlIiksd2UoQWUsVWUsbW4sIuKIoCIsIlxcYW5nbGUiLCEwKSx3ZShBZSxVZSxtbiwi4oieIiwiXFxpbmZ0eSIsITApLHdlKEFlLFVlLG1uLCLigLIiLCJcXHByaW1lIiksd2UoQWUsVWUsbW4sIuKWsyIsIlxcdHJpYW5nbGUiKSx3ZShBZSxVZSxtbiwizpMiLCJcXEdhbW1hIiwhMCksd2UoQWUsVWUsbW4sIs6UIiwiXFxEZWx0YSIsITApLHdlKEFlLFVlLG1uLCLOmCIsIlxcVGhldGEiLCEwKSx3ZShBZSxVZSxtbiwizpsiLCJcXExhbWJkYSIsITApLHdlKEFlLFVlLG1uLCLOniIsIlxcWGkiLCEwKSx3ZShBZSxVZSxtbiwizqAiLCJcXFBpIiwhMCksd2UoQWUsVWUsbW4sIs6jIiwiXFxTaWdtYSIsITApLHdlKEFlLFVlLG1uLCLOpSIsIlxcVXBzaWxvbiIsITApLHdlKEFlLFVlLG1uLCLOpiIsIlxcUGhpIiwhMCksd2UoQWUsVWUsbW4sIs6oIiwiXFxQc2kiLCEwKSx3ZShBZSxVZSxtbiwizqkiLCJcXE9tZWdhIiwhMCksd2UoQWUsVWUsbW4sIkEiLCLOkSIpLHdlKEFlLFVlLG1uLCJCIiwizpIiKSx3ZShBZSxVZSxtbiwiRSIsIs6VIiksd2UoQWUsVWUsbW4sIloiLCLOliIpLHdlKEFlLFVlLG1uLCJIIiwizpciKSx3ZShBZSxVZSxtbiwiSSIsIs6ZIiksd2UoQWUsVWUsbW4sIksiLCLOmiIpLHdlKEFlLFVlLG1uLCJNIiwizpwiKSx3ZShBZSxVZSxtbiwiTiIsIs6dIiksd2UoQWUsVWUsbW4sIk8iLCLOnyIpLHdlKEFlLFVlLG1uLCJQIiwizqEiKSx3ZShBZSxVZSxtbiwiVCIsIs6kIiksd2UoQWUsVWUsbW4sIlgiLCLOpyIpLHdlKEFlLFVlLG1uLCLCrCIsIlxcbmVnIiwhMCksd2UoQWUsVWUsbW4sIsKsIiwiXFxsbm90Iiksd2UoQWUsVWUsbW4sIuKKpCIsIlxcdG9wIiksd2UoQWUsVWUsbW4sIuKKpSIsIlxcYm90Iiksd2UoQWUsVWUsbW4sIuKIhSIsIlxcZW1wdHlzZXQiKSx3ZShBZSwkdCxtbiwi4oiFIiwiXFx2YXJub3RoaW5nIiksd2UoQWUsVWUsQ2EsIs6xIiwiXFxhbHBoYSIsITApLHdlKEFlLFVlLENhLCLOsiIsIlxcYmV0YSIsITApLHdlKEFlLFVlLENhLCLOsyIsIlxcZ2FtbWEiLCEwKSx3ZShBZSxVZSxDYSwizrQiLCJcXGRlbHRhIiwhMCksd2UoQWUsVWUsQ2EsIs+1IiwiXFxlcHNpbG9uIiwhMCksd2UoQWUsVWUsQ2EsIs62IiwiXFx6ZXRhIiwhMCksd2UoQWUsVWUsQ2EsIs63IiwiXFxldGEiLCEwKSx3ZShBZSxVZSxDYSwizrgiLCJcXHRoZXRhIiwhMCksd2UoQWUsVWUsQ2EsIs65IiwiXFxpb3RhIiwhMCksd2UoQWUsVWUsQ2EsIs66IiwiXFxrYXBwYSIsITApLHdlKEFlLFVlLENhLCLOuyIsIlxcbGFtYmRhIiwhMCksd2UoQWUsVWUsQ2EsIs68IiwiXFxtdSIsITApLHdlKEFlLFVlLENhLCLOvSIsIlxcbnUiLCEwKSx3ZShBZSxVZSxDYSwizr4iLCJcXHhpIiwhMCksd2UoQWUsVWUsQ2EsIs6/IiwiXFxvbWljcm9uIiwhMCksd2UoQWUsVWUsQ2EsIs+AIiwiXFxwaSIsITApLHdlKEFlLFVlLENhLCLPgSIsIlxccmhvIiwhMCksd2UoQWUsVWUsQ2EsIs+DIiwiXFxzaWdtYSIsITApLHdlKEFlLFVlLENhLCLPhCIsIlxcdGF1IiwhMCksd2UoQWUsVWUsQ2EsIs+FIiwiXFx1cHNpbG9uIiwhMCksd2UoQWUsVWUsQ2EsIs+VIiwiXFxwaGkiLCEwKSx3ZShBZSxVZSxDYSwiz4ciLCJcXGNoaSIsITApLHdlKEFlLFVlLENhLCLPiCIsIlxccHNpIiwhMCksd2UoQWUsVWUsQ2EsIs+JIiwiXFxvbWVnYSIsITApLHdlKEFlLFVlLENhLCLOtSIsIlxcdmFyZXBzaWxvbiIsITApLHdlKEFlLFVlLENhLCLPkSIsIlxcdmFydGhldGEiLCEwKSx3ZShBZSxVZSxDYSwiz5YiLCJcXHZhcnBpIiwhMCksd2UoQWUsVWUsQ2EsIs+xIiwiXFx2YXJyaG8iLCEwKSx3ZShBZSxVZSxDYSwiz4IiLCJcXHZhcnNpZ21hIiwhMCksd2UoQWUsVWUsQ2EsIs+GIiwiXFx2YXJwaGkiLCEwKSx3ZShBZSxVZSxscywi4oiXIiwiKiIsITApLHdlKEFlLFVlLGxzLCIrIiwiKyIpLHdlKEFlLFVlLGxzLCLiiJIiLCItIiwhMCksd2UoQWUsVWUsbHMsIuKLhSIsIlxcY2RvdCIsITApLHdlKEFlLFVlLGxzLCLiiJgiLCJcXGNpcmMiLCEwKSx3ZShBZSxVZSxscywiw7ciLCJcXGRpdiIsITApLHdlKEFlLFVlLGxzLCLCsSIsIlxccG0iLCEwKSx3ZShBZSxVZSxscywiw5ciLCJcXHRpbWVzIiwhMCksd2UoQWUsVWUsbHMsIuKIqSIsIlxcY2FwIiwhMCksd2UoQWUsVWUsbHMsIuKIqiIsIlxcY3VwIiwhMCksd2UoQWUsVWUsbHMsIuKIliIsIlxcc2V0bWludXMiLCEwKSx3ZShBZSxVZSxscywi4oinIiwiXFxsYW5kIiksd2UoQWUsVWUsbHMsIuKIqCIsIlxcbG9yIiksd2UoQWUsVWUsbHMsIuKIpyIsIlxcd2VkZ2UiLCEwKSx3ZShBZSxVZSxscywi4oioIiwiXFx2ZWUiLCEwKSx3ZShBZSxVZSxtbiwi4oiaIiwiXFxzdXJkIiksd2UoQWUsVWUsaG0sIuKfqCIsIlxcbGFuZ2xlIiwhMCksd2UoQWUsVWUsaG0sIuKIoyIsIlxcbHZlcnQiKSx3ZShBZSxVZSxobSwi4oilIiwiXFxsVmVydCIpLHdlKEFlLFVlLERwLCI/IiwiPyIpLHdlKEFlLFVlLERwLCIhIiwiISIpLHdlKEFlLFVlLERwLCLin6kiLCJcXHJhbmdsZSIsITApLHdlKEFlLFVlLERwLCLiiKMiLCJcXHJ2ZXJ0Iiksd2UoQWUsVWUsRHAsIuKIpSIsIlxcclZlcnQiKSx3ZShBZSxVZSxIdCwiPSIsIj0iKSx3ZShBZSxVZSxIdCwiOiIsIjoiKSx3ZShBZSxVZSxIdCwi4omIIiwiXFxhcHByb3giLCEwKSx3ZShBZSxVZSxIdCwi4omFIiwiXFxjb25nIiwhMCksd2UoQWUsVWUsSHQsIuKJpSIsIlxcZ2UiKSx3ZShBZSxVZSxIdCwi4omlIiwiXFxnZXEiLCEwKSx3ZShBZSxVZSxIdCwi4oaQIiwiXFxnZXRzIiksd2UoQWUsVWUsSHQsIj4iLCJcXGd0IiwhMCksd2UoQWUsVWUsSHQsIuKIiCIsIlxcaW4iLCEwKSx3ZShBZSxVZSxIdCwi7oCgIiwiXFxAbm90Iiksd2UoQWUsVWUsSHQsIuKKgiIsIlxcc3Vic2V0IiwhMCksd2UoQWUsVWUsSHQsIuKKgyIsIlxcc3Vwc2V0IiwhMCksd2UoQWUsVWUsSHQsIuKKhiIsIlxcc3Vic2V0ZXEiLCEwKSx3ZShBZSxVZSxIdCwi4oqHIiwiXFxzdXBzZXRlcSIsITApLHdlKEFlLCR0LEh0LCLiiogiLCJcXG5zdWJzZXRlcSIsITApLHdlKEFlLCR0LEh0LCLiiokiLCJcXG5zdXBzZXRlcSIsITApLHdlKEFlLFVlLEh0LCLiiqgiLCJcXG1vZGVscyIpLHdlKEFlLFVlLEh0LCLihpAiLCJcXGxlZnRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLiiaQiLCJcXGxlIiksd2UoQWUsVWUsSHQsIuKJpCIsIlxcbGVxIiwhMCksd2UoQWUsVWUsSHQsIjwiLCJcXGx0IiwhMCksd2UoQWUsVWUsSHQsIuKGkiIsIlxccmlnaHRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLihpIiLCJcXHRvIiksd2UoQWUsJHQsSHQsIuKJsSIsIlxcbmdlcSIsITApLHdlKEFlLCR0LEh0LCLiibAiLCJcXG5sZXEiLCEwKSx3ZShBZSxVZSxJNywiwqAiLCJcXCAiKSx3ZShBZSxVZSxJNywiwqAiLCJcXHNwYWNlIiksd2UoQWUsVWUsSTcsIsKgIiwiXFxub2JyZWFrc3BhY2UiKSx3ZShzaSxVZSxJNywiwqAiLCJcXCAiKSx3ZShzaSxVZSxJNywiwqAiLCIgIiksd2Uoc2ksVWUsSTcsIsKgIiwiXFxzcGFjZSIpLHdlKHNpLFVlLEk3LCLCoCIsIlxcbm9icmVha3NwYWNlIiksd2UoQWUsVWUsSTcsbnVsbCwiXFxub2JyZWFrIiksd2UoQWUsVWUsSTcsbnVsbCwiXFxhbGxvd2JyZWFrIiksd2UoQWUsVWUsb1EsIiwiLCIsIiksd2UoQWUsVWUsb1EsIjsiLCI7Iiksd2UoQWUsJHQsbHMsIuKKvCIsIlxcYmFyd2VkZ2UiLCEwKSx3ZShBZSwkdCxscywi4oq7IiwiXFx2ZWViYXIiLCEwKSx3ZShBZSxVZSxscywi4oqZIiwiXFxvZG90IiwhMCksd2UoQWUsVWUsbHMsIuKKlSIsIlxcb3BsdXMiLCEwKSx3ZShBZSxVZSxscywi4oqXIiwiXFxvdGltZXMiLCEwKSx3ZShBZSxVZSxtbiwi4oiCIiwiXFxwYXJ0aWFsIiwhMCksd2UoQWUsVWUsbHMsIuKKmCIsIlxcb3NsYXNoIiwhMCksd2UoQWUsJHQsbHMsIuKKmiIsIlxcY2lyY2xlZGNpcmMiLCEwKSx3ZShBZSwkdCxscywi4oqhIiwiXFxib3hkb3QiLCEwKSx3ZShBZSxVZSxscywi4pazIiwiXFxiaWd0cmlhbmdsZXVwIiksd2UoQWUsVWUsbHMsIuKWvSIsIlxcYmlndHJpYW5nbGVkb3duIiksd2UoQWUsVWUsbHMsIuKAoCIsIlxcZGFnZ2VyIiksd2UoQWUsVWUsbHMsIuKLhCIsIlxcZGlhbW9uZCIpLHdlKEFlLFVlLGxzLCLii4YiLCJcXHN0YXIiKSx3ZShBZSxVZSxscywi4peDIiwiXFx0cmlhbmdsZWxlZnQiKSx3ZShBZSxVZSxscywi4pa5IiwiXFx0cmlhbmdsZXJpZ2h0Iiksd2UoQWUsVWUsaG0sInsiLCJcXHsiKSx3ZShzaSxVZSxtbiwieyIsIlxceyIpLHdlKHNpLFVlLG1uLCJ7IiwiXFx0ZXh0YnJhY2VsZWZ0Iiksd2UoQWUsVWUsRHAsIn0iLCJcXH0iKSx3ZShzaSxVZSxtbiwifSIsIlxcfSIpLHdlKHNpLFVlLG1uLCJ9IiwiXFx0ZXh0YnJhY2VyaWdodCIpLHdlKEFlLFVlLGhtLCJ7IiwiXFxsYnJhY2UiKSx3ZShBZSxVZSxEcCwifSIsIlxccmJyYWNlIiksd2UoQWUsVWUsaG0sIlsiLCJcXGxicmFjayIsITApLHdlKHNpLFVlLG1uLCJbIiwiXFxsYnJhY2siLCEwKSx3ZShBZSxVZSxEcCwiXSIsIlxccmJyYWNrIiwhMCksd2Uoc2ksVWUsbW4sIl0iLCJcXHJicmFjayIsITApLHdlKEFlLFVlLGhtLCIoIiwiXFxscGFyZW4iLCEwKSx3ZShBZSxVZSxEcCwiKSIsIlxccnBhcmVuIiwhMCksd2Uoc2ksVWUsbW4sIjwiLCJcXHRleHRsZXNzIiwhMCksd2Uoc2ksVWUsbW4sIj4iLCJcXHRleHRncmVhdGVyIiwhMCksd2UoQWUsVWUsaG0sIuKMiiIsIlxcbGZsb29yIiwhMCksd2UoQWUsVWUsRHAsIuKMiyIsIlxccmZsb29yIiwhMCksd2UoQWUsVWUsaG0sIuKMiCIsIlxcbGNlaWwiLCEwKSx3ZShBZSxVZSxEcCwi4oyJIiwiXFxyY2VpbCIsITApLHdlKEFlLFVlLG1uLCJcXCIsIlxcYmFja3NsYXNoIiksd2UoQWUsVWUsbW4sIuKIoyIsInwiKSx3ZShBZSxVZSxtbiwi4oijIiwiXFx2ZXJ0Iiksd2Uoc2ksVWUsbW4sInwiLCJcXHRleHRiYXIiLCEwKSx3ZShBZSxVZSxtbiwi4oilIiwiXFx8Iiksd2UoQWUsVWUsbW4sIuKIpSIsIlxcVmVydCIpLHdlKHNpLFVlLG1uLCLiiKUiLCJcXHRleHRiYXJkYmwiKSx3ZShzaSxVZSxtbiwifiIsIlxcdGV4dGFzY2lpdGlsZGUiKSx3ZShzaSxVZSxtbiwiXFwiLCJcXHRleHRiYWNrc2xhc2giKSx3ZShzaSxVZSxtbiwiXiIsIlxcdGV4dGFzY2lpY2lyY3VtIiksd2UoQWUsVWUsSHQsIuKGkSIsIlxcdXBhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLih5EiLCJcXFVwYXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oaTIiwiXFxkb3duYXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oeTIiwiXFxEb3duYXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oaVIiwiXFx1cGRvd25hcnJvdyIsITApLHdlKEFlLFVlLEh0LCLih5UiLCJcXFVwZG93bmFycm93IiwhMCksd2UoQWUsVWUsTjAsIuKIkCIsIlxcY29wcm9kIiksd2UoQWUsVWUsTjAsIuKLgSIsIlxcYmlndmVlIiksd2UoQWUsVWUsTjAsIuKLgCIsIlxcYmlnd2VkZ2UiKSx3ZShBZSxVZSxOMCwi4qiEIiwiXFxiaWd1cGx1cyIpLHdlKEFlLFVlLE4wLCLii4IiLCJcXGJpZ2NhcCIpLHdlKEFlLFVlLE4wLCLii4MiLCJcXGJpZ2N1cCIpLHdlKEFlLFVlLE4wLCLiiKsiLCJcXGludCIpLHdlKEFlLFVlLE4wLCLiiKsiLCJcXGludG9wIiksd2UoQWUsVWUsTjAsIuKIrCIsIlxcaWludCIpLHdlKEFlLFVlLE4wLCLiiK0iLCJcXGlpaW50Iiksd2UoQWUsVWUsTjAsIuKIjyIsIlxccHJvZCIpLHdlKEFlLFVlLE4wLCLiiJEiLCJcXHN1bSIpLHdlKEFlLFVlLE4wLCLiqIIiLCJcXGJpZ290aW1lcyIpLHdlKEFlLFVlLE4wLCLiqIEiLCJcXGJpZ29wbHVzIiksd2UoQWUsVWUsTjAsIuKogCIsIlxcYmlnb2RvdCIpLHdlKEFlLFVlLE4wLCLiiK4iLCJcXG9pbnQiKSx3ZShBZSxVZSxOMCwi4oivIiwiXFxvaWludCIpLHdlKEFlLFVlLE4wLCLiiLAiLCJcXG9paWludCIpLHdlKEFlLFVlLE4wLCLiqIYiLCJcXGJpZ3NxY3VwIiksd2UoQWUsVWUsTjAsIuKIqyIsIlxcc21hbGxpbnQiKSx3ZShzaSxVZSxORCwi4oCmIiwiXFx0ZXh0ZWxsaXBzaXMiKSx3ZShBZSxVZSxORCwi4oCmIiwiXFxtYXRoZWxsaXBzaXMiKSx3ZShzaSxVZSxORCwi4oCmIiwiXFxsZG90cyIsITApLHdlKEFlLFVlLE5ELCLigKYiLCJcXGxkb3RzIiwhMCksd2UoQWUsVWUsTkQsIuKLryIsIlxcQGNkb3RzIiwhMCksd2UoQWUsVWUsTkQsIuKLsSIsIlxcZGRvdHMiLCEwKSx3ZShBZSxVZSxtbiwi4ouuIiwiXFx2YXJ2ZG90cyIpLHdlKEFlLFVlLHdoLCLLiiIsIlxcYWN1dGUiKSx3ZShBZSxVZSx3aCwiy4siLCJcXGdyYXZlIiksd2UoQWUsVWUsd2gsIsKoIiwiXFxkZG90Iiksd2UoQWUsVWUsd2gsIn4iLCJcXHRpbGRlIiksd2UoQWUsVWUsd2gsIsuJIiwiXFxiYXIiKSx3ZShBZSxVZSx3aCwiy5giLCJcXGJyZXZlIiksd2UoQWUsVWUsd2gsIsuHIiwiXFxjaGVjayIpLHdlKEFlLFVlLHdoLCJeIiwiXFxoYXQiKSx3ZShBZSxVZSx3aCwi4oOXIiwiXFx2ZWMiKSx3ZShBZSxVZSx3aCwiy5kiLCJcXGRvdCIpLHdlKEFlLFVlLHdoLCLLmiIsIlxcbWF0aHJpbmciKSx3ZShBZSxVZSxDYSwi7oSxIiwiXFxAaW1hdGgiKSx3ZShBZSxVZSxDYSwi7oi3IiwiXFxAam1hdGgiKSx3ZShBZSxVZSxtbiwixLEiLCLEsSIpLHdlKEFlLFVlLG1uLCLItyIsIsi3Iiksd2Uoc2ksVWUsbW4sIsSxIiwiXFxpIiwhMCksd2Uoc2ksVWUsbW4sIsi3IiwiXFxqIiwhMCksd2Uoc2ksVWUsbW4sIsOfIiwiXFxzcyIsITApLHdlKHNpLFVlLG1uLCLDpiIsIlxcYWUiLCEwKSx3ZShzaSxVZSxtbiwixZMiLCJcXG9lIiwhMCksd2Uoc2ksVWUsbW4sIsO4IiwiXFxvIiwhMCksd2Uoc2ksVWUsbW4sIsOGIiwiXFxBRSIsITApLHdlKHNpLFVlLG1uLCLFkiIsIlxcT0UiLCEwKSx3ZShzaSxVZSxtbiwiw5giLCJcXE8iLCEwKSx3ZShzaSxVZSx3aCwiy4oiLCJcXCciKSx3ZShzaSxVZSx3aCwiy4siLCJcXGAiKSx3ZShzaSxVZSx3aCwiy4YiLCJcXF4iKSx3ZShzaSxVZSx3aCwiy5wiLCJcXH4iKSx3ZShzaSxVZSx3aCwiy4kiLCJcXD0iKSx3ZShzaSxVZSx3aCwiy5giLCJcXHUiKSx3ZShzaSxVZSx3aCwiy5kiLCJcXC4iKSx3ZShzaSxVZSx3aCwiwrgiLCJcXGMiKSx3ZShzaSxVZSx3aCwiy5oiLCJcXHIiKSx3ZShzaSxVZSx3aCwiy4ciLCJcXHYiKSx3ZShzaSxVZSx3aCwiwqgiLCdcXCInKSx3ZShzaSxVZSx3aCwiy50iLCJcXEgiKSx3ZShzaSxVZSx3aCwi4pevIiwiXFx0ZXh0Y2lyY2xlZCIpO3ZhciByemU9eyItLSI6ITAsIi0tLSI6ITAsImBgIjohMCwiJyciOiEwfTt3ZShzaSxVZSxtbiwi4oCTIiwiLS0iLCEwKSx3ZShzaSxVZSxtbiwi4oCTIiwiXFx0ZXh0ZW5kYXNoIiksd2Uoc2ksVWUsbW4sIuKAlCIsIi0tLSIsITApLHdlKHNpLFVlLG1uLCLigJQiLCJcXHRleHRlbWRhc2giKSx3ZShzaSxVZSxtbiwi4oCYIiwiYCIsITApLHdlKHNpLFVlLG1uLCLigJgiLCJcXHRleHRxdW90ZWxlZnQiKSx3ZShzaSxVZSxtbiwi4oCZIiwiJyIsITApLHdlKHNpLFVlLG1uLCLigJkiLCJcXHRleHRxdW90ZXJpZ2h0Iiksd2Uoc2ksVWUsbW4sIuKAnCIsImBgIiwhMCksd2Uoc2ksVWUsbW4sIuKAnCIsIlxcdGV4dHF1b3RlZGJsbGVmdCIpLHdlKHNpLFVlLG1uLCLigJ0iLCInJyIsITApLHdlKHNpLFVlLG1uLCLigJ0iLCJcXHRleHRxdW90ZWRibHJpZ2h0Iiksd2UoQWUsVWUsbW4sIsKwIiwiXFxkZWdyZWUiLCEwKSx3ZShzaSxVZSxtbiwiwrAiLCJcXGRlZ3JlZSIpLHdlKHNpLFVlLG1uLCLCsCIsIlxcdGV4dGRlZ3JlZSIsITApLHdlKEFlLFVlLG1uLCLCoyIsIlxccG91bmRzIiksd2UoQWUsVWUsbW4sIsKjIiwiXFxtYXRoc3RlcmxpbmciLCEwKSx3ZShzaSxVZSxtbiwiwqMiLCJcXHBvdW5kcyIpLHdlKHNpLFVlLG1uLCLCoyIsIlxcdGV4dHN0ZXJsaW5nIiwhMCksd2UoQWUsJHQsbW4sIuKcoCIsIlxcbWFsdGVzZSIpLHdlKHNpLCR0LG1uLCLinKAiLCJcXG1hbHRlc2UiKTtmb3IodmFyIGl6ZT0nMDEyMzQ1Njc4OS9ALiInLHJiZT0wO3JiZTxpemUubGVuZ3RoO3JiZSsrKXt2YXIgc3plPWl6ZS5jaGFyQXQocmJlKTt3ZShBZSxVZSxtbixzemUsc3plKX1mb3IodmFyIGF6ZT0nMDEyMzQ1Njc4OSFAKigpLT0rIjs6Py8uLCcsaWJlPTA7aWJlPGF6ZS5sZW5ndGg7aWJlKyspe3ZhciBvemU9YXplLmNoYXJBdChpYmUpO3dlKHNpLFVlLG1uLG96ZSxvemUpfWZvcih2YXIgY1E9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLHNiZT0wO3NiZTxjUS5sZW5ndGg7c2JlKyspe3ZhciB1UT1jUS5jaGFyQXQoc2JlKTt3ZShBZSxVZSxDYSx1USx1USksd2Uoc2ksVWUsbW4sdVEsdVEpfXdlKEFlLCR0LG1uLCJDIiwi4oSCIiksd2Uoc2ksJHQsbW4sIkMiLCLihIIiKSx3ZShBZSwkdCxtbiwiSCIsIuKEjSIpLHdlKHNpLCR0LG1uLCJIIiwi4oSNIiksd2UoQWUsJHQsbW4sIk4iLCLihJUiKSx3ZShzaSwkdCxtbiwiTiIsIuKElSIpLHdlKEFlLCR0LG1uLCJQIiwi4oSZIiksd2Uoc2ksJHQsbW4sIlAiLCLihJkiKSx3ZShBZSwkdCxtbiwiUSIsIuKEmiIpLHdlKHNpLCR0LG1uLCJRIiwi4oSaIiksd2UoQWUsJHQsbW4sIlIiLCLihJ0iKSx3ZShzaSwkdCxtbiwiUiIsIuKEnSIpLHdlKEFlLCR0LG1uLCJaIiwi4oSkIiksd2Uoc2ksJHQsbW4sIloiLCLihKQiKSx3ZShBZSxVZSxDYSwiaCIsIuKEjiIpLHdlKHNpLFVlLENhLCJoIiwi4oSOIik7Zm9yKHZhciBYYT0iIixJcD0wO0lwPGNRLmxlbmd0aDtJcCsrKXt2YXIgRWY9Y1EuY2hhckF0KElwKTtYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2MzIwK0lwKSx3ZShBZSxVZSxDYSxFZixYYSksd2Uoc2ksVWUsbW4sRWYsWGEpLFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTYzNzIrSXApLHdlKEFlLFVlLENhLEVmLFhhKSx3ZShzaSxVZSxtbixFZixYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjQyNCtJcCksd2UoQWUsVWUsQ2EsRWYsWGEpLHdlKHNpLFVlLG1uLEVmLFhhKSxYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2NTgwK0lwKSx3ZShBZSxVZSxDYSxFZixYYSksd2Uoc2ksVWUsbW4sRWYsWGEpLFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY2ODQrSXApLHdlKEFlLFVlLENhLEVmLFhhKSx3ZShzaSxVZSxtbixFZixYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjczNitJcCksd2UoQWUsVWUsQ2EsRWYsWGEpLHdlKHNpLFVlLG1uLEVmLFhhKSxYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2Nzg4K0lwKSx3ZShBZSxVZSxDYSxFZixYYSksd2Uoc2ksVWUsbW4sRWYsWGEpLFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY4NDArSXApLHdlKEFlLFVlLENhLEVmLFhhKSx3ZShzaSxVZSxtbixFZixYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1Njk0NCtJcCksd2UoQWUsVWUsQ2EsRWYsWGEpLHdlKHNpLFVlLG1uLEVmLFhhKSxJcDwyNiYmKFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY2MzIrSXApLHdlKEFlLFVlLENhLEVmLFhhKSx3ZShzaSxVZSxtbixFZixYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjQ3NitJcCksd2UoQWUsVWUsQ2EsRWYsWGEpLHdlKHNpLFVlLG1uLEVmLFhhKSl9WGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjY2OCksd2UoQWUsVWUsQ2EsImsiLFhhKSx3ZShzaSxVZSxtbiwiayIsWGEpO2Zvcih2YXIgakM9MDtqQzwxMDtqQysrKXt2YXIgUzk9akMudG9TdHJpbmcoKTtYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU3Mjk0K2pDKSx3ZShBZSxVZSxDYSxTOSxYYSksd2Uoc2ksVWUsbW4sUzksWGEpLFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTczMTQrakMpLHdlKEFlLFVlLENhLFM5LFhhKSx3ZShzaSxVZSxtbixTOSxYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NzMyNCtqQyksd2UoQWUsVWUsQ2EsUzksWGEpLHdlKHNpLFVlLG1uLFM5LFhhKSxYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU3MzM0K2pDKSx3ZShBZSxVZSxDYSxTOSxYYSksd2Uoc2ksVWUsbW4sUzksWGEpfWZvcih2YXIgYWJlPSLDkMOew74iLG9iZT0wO29iZTxhYmUubGVuZ3RoO29iZSsrKXt2YXIgbFE9YWJlLmNoYXJBdChvYmUpO3dlKEFlLFVlLENhLGxRLGxRKSx3ZShzaSxVZSxtbixsUSxsUSl9dmFyIGhRPVtbIm1hdGhiZiIsInRleHRiZiIsIk1haW4tQm9sZCJdLFsibWF0aGJmIiwidGV4dGJmIiwiTWFpbi1Cb2xkIl0sWyJtYXRobm9ybWFsIiwidGV4dGl0IiwiTWF0aC1JdGFsaWMiXSxbIm1hdGhub3JtYWwiLCJ0ZXh0aXQiLCJNYXRoLUl0YWxpYyJdLFsiYm9sZHN5bWJvbCIsImJvbGRzeW1ib2wiLCJNYWluLUJvbGRJdGFsaWMiXSxbImJvbGRzeW1ib2wiLCJib2xkc3ltYm9sIiwiTWFpbi1Cb2xkSXRhbGljIl0sWyJtYXRoc2NyIiwidGV4dHNjciIsIlNjcmlwdC1SZWd1bGFyIl0sWyIiLCIiLCIiXSxbIiIsIiIsIiJdLFsiIiwiIiwiIl0sWyJtYXRoZnJhayIsInRleHRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoZnJhayIsInRleHRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoYmIiLCJ0ZXh0YmIiLCJBTVMtUmVndWxhciJdLFsibWF0aGJiIiwidGV4dGJiIiwiQU1TLVJlZ3VsYXIiXSxbIm1hdGhib2xkZnJhayIsInRleHRib2xkZnJhayIsIkZyYWt0dXItUmVndWxhciJdLFsibWF0aGJvbGRmcmFrIiwidGV4dGJvbGRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoc2YiLCJ0ZXh0c2YiLCJTYW5zU2VyaWYtUmVndWxhciJdLFsibWF0aHNmIiwidGV4dHNmIiwiU2Fuc1NlcmlmLVJlZ3VsYXIiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGhpdHNmIiwidGV4dGl0c2YiLCJTYW5zU2VyaWYtSXRhbGljIl0sWyJtYXRoaXRzZiIsInRleHRpdHNmIiwiU2Fuc1NlcmlmLUl0YWxpYyJdLFsiIiwiIiwiIl0sWyIiLCIiLCIiXSxbIm1hdGh0dCIsInRleHR0dCIsIlR5cGV3cml0ZXItUmVndWxhciJdLFsibWF0aHR0IiwidGV4dHR0IiwiVHlwZXdyaXRlci1SZWd1bGFyIl1dLGN6ZT1bWyJtYXRoYmYiLCJ0ZXh0YmYiLCJNYWluLUJvbGQiXSxbIiIsIiIsIiJdLFsibWF0aHNmIiwidGV4dHNmIiwiU2Fuc1NlcmlmLVJlZ3VsYXIiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGh0dCIsInRleHR0dCIsIlR5cGV3cml0ZXItUmVndWxhciJdXSxwSHQ9ZnVuY3Rpb24ocyx1KXt2YXIgZD1zLmNoYXJDb2RlQXQoMCkscD1zLmNoYXJDb2RlQXQoMSksdj0oZC01NTI5NikqMTAyNCsocC01NjMyMCkrNjU1MzYsYj11PT09Im1hdGgiPzA6MTtpZigxMTk4MDg8PXYmJnY8MTIwNDg0KXt2YXIgeT1NYXRoLmZsb29yKCh2LTExOTgwOCkvMjYpO3JldHVybltoUVt5XVsyXSxoUVt5XVtiXV19ZWxzZSBpZigxMjA3ODI8PXYmJnY8PTEyMDgzMSl7dmFyIFQ9TWF0aC5mbG9vcigodi0xMjA3ODIpLzEwKTtyZXR1cm5bY3plW1RdWzJdLGN6ZVtUXVtiXV19ZWxzZXtpZih2PT09MTIwNDg1fHx2PT09MTIwNDg2KXJldHVybltoUVswXVsyXSxoUVswXVtiXV07aWYoMTIwNDg2PHYmJnY8MTIwNzgyKXJldHVyblsiIiwiIl07dGhyb3cgbmV3IENpKCJVbnN1cHBvcnRlZCBjaGFyYWN0ZXI6ICIrcyl9fSxmUT1mdW5jdGlvbihzLHUsZCl7cmV0dXJuIFVsW2RdW3NdJiZVbFtkXVtzXS5yZXBsYWNlJiYocz1VbFtkXVtzXS5yZXBsYWNlKSx7dmFsdWU6cyxtZXRyaWNzOkoyZShzLHUsZCl9fSxGMz1mdW5jdGlvbihzLHUsZCxwLHYpe3ZhciBiPWZRKHMsdSxkKSx5PWIubWV0cmljcztzPWIudmFsdWU7dmFyIFQ7aWYoeSl7dmFyIF89eS5pdGFsaWM7KGQ9PT0idGV4dCJ8fHAmJnAuZm9udD09PSJtYXRoaXQiKSYmKF89MCksVD1uZXcgQnYocyx5LmhlaWdodCx5LmRlcHRoLF8seS5za2V3LHkud2lkdGgsdil9ZWxzZSB0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTm8gY2hhcmFjdGVyIG1ldHJpY3MgIisoImZvciAnIitzKyInIGluIHN0eWxlICciK3UrIicgYW5kIG1vZGUgJyIrZCsiJyIpKSxUPW5ldyBCdihzLDAsMCwwLDAsMCx2KTtpZihwKXtULm1heEZvbnRTaXplPXAuc2l6ZU11bHRpcGxpZXIscC5zdHlsZS5pc1RpZ2h0KCkmJlQuY2xhc3Nlcy5wdXNoKCJtdGlnaHQiKTt2YXIgQT1wLmdldENvbG9yKCk7QSYmKFQuc3R5bGUuY29sb3I9QSl9cmV0dXJuIFR9LGJIdD1mdW5jdGlvbihzLHUsZCxwKXtyZXR1cm4gcD09PXZvaWQgMCYmKHA9W10pLGQuZm9udD09PSJib2xkc3ltYm9sIiYmZlEocywiTWFpbi1Cb2xkIix1KS5tZXRyaWNzP0YzKHMsIk1haW4tQm9sZCIsdSxkLHAuY29uY2F0KFsibWF0aGJmIl0pKTpzPT09IlxcInx8VWxbdV1bc10uZm9udD09PSJtYWluIj9GMyhzLCJNYWluLVJlZ3VsYXIiLHUsZCxwKTpGMyhzLCJBTVMtUmVndWxhciIsdSxkLHAuY29uY2F0KFsiYW1zcm0iXSkpfSxtSHQ9ZnVuY3Rpb24ocyx1LGQscCx2KXtyZXR1cm4gdiE9PSJ0ZXh0b3JkIiYmZlEocywiTWF0aC1Cb2xkSXRhbGljIix1KS5tZXRyaWNzP3tmb250TmFtZToiTWF0aC1Cb2xkSXRhbGljIixmb250Q2xhc3M6ImJvbGRzeW1ib2wifTp7Zm9udE5hbWU6Ik1haW4tQm9sZCIsZm9udENsYXNzOiJtYXRoYmYifX0sdkh0PWZ1bmN0aW9uKHMsdSxkKXt2YXIgcD1zLm1vZGUsdj1zLnRleHQsYj1bIm1vcmQiXSx5PXA9PT0ibWF0aCJ8fHA9PT0idGV4dCImJnUuZm9udCxUPXk/dS5mb250OnUuZm9udEZhbWlseSxfPSIiLEE9IiI7aWYodi5jaGFyQ29kZUF0KDApPT09NTUzNDkmJihbXyxBXT1wSHQodixwKSksXy5sZW5ndGg+MClyZXR1cm4gRjModixfLHAsdSxiLmNvbmNhdChBKSk7aWYoVCl7dmFyIFAsUjtpZihUPT09ImJvbGRzeW1ib2wiKXt2YXIgRj1tSHQodixwLHUsYixkKTtQPUYuZm9udE5hbWUsUj1bRi5mb250Q2xhc3NdfWVsc2UgeT8oUD1oemVbVF0uZm9udE5hbWUsUj1bVF0pOihQPWRRKFQsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKSxSPVtULHUuZm9udFdlaWdodCx1LmZvbnRTaGFwZV0pO2lmKGZRKHYsUCxwKS5tZXRyaWNzKXJldHVybiBGMyh2LFAscCx1LGIuY29uY2F0KFIpKTtpZihyemUuaGFzT3duUHJvcGVydHkodikmJlAuc2xpY2UoMCwxMCk9PT0iVHlwZXdyaXRlciIpe2Zvcih2YXIgaj1bXSxLPTA7Szx2Lmxlbmd0aDtLKyspai5wdXNoKEYzKHZbS10sUCxwLHUsYi5jb25jYXQoUikpKTtyZXR1cm4gbHplKGopfX1pZihkPT09Im1hdGhvcmQiKXJldHVybiBGMyh2LCJNYXRoLUl0YWxpYyIscCx1LGIuY29uY2F0KFsibWF0aG5vcm1hbCJdKSk7aWYoZD09PSJ0ZXh0b3JkIil7dmFyIGVlPVVsW3BdW3ZdJiZVbFtwXVt2XS5mb250O2lmKGVlPT09ImFtcyIpe3ZhciBpZT1kUSgiYW1zcm0iLHUuZm9udFdlaWdodCx1LmZvbnRTaGFwZSk7cmV0dXJuIEYzKHYsaWUscCx1LGIuY29uY2F0KCJhbXNybSIsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKSl9ZWxzZSBpZihlZT09PSJtYWluInx8IWVlKXt2YXIgb2U9ZFEoInRleHRybSIsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKTtyZXR1cm4gRjModixvZSxwLHUsYi5jb25jYXQodS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKSl9ZWxzZXt2YXIgcGU9ZFEoZWUsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKTtyZXR1cm4gRjModixwZSxwLHUsYi5jb25jYXQocGUsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKSl9fWVsc2UgdGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHR5cGU6ICIrZCsiIGluIG1ha2VPcmQiKX0sd0h0PShpLHMpPT57aWYoVDkoaS5jbGFzc2VzKSE9PVQ5KHMuY2xhc3Nlcyl8fGkuc2tldyE9PXMuc2tld3x8aS5tYXhGb250U2l6ZSE9PXMubWF4Rm9udFNpemUpcmV0dXJuITE7aWYoaS5jbGFzc2VzLmxlbmd0aD09PTEpe3ZhciB1PWkuY2xhc3Nlc1swXTtpZih1PT09Im1iaW4ifHx1PT09Im1vcmQiKXJldHVybiExfWZvcih2YXIgZCBpbiBpLnN0eWxlKWlmKGkuc3R5bGUuaGFzT3duUHJvcGVydHkoZCkmJmkuc3R5bGVbZF0hPT1zLnN0eWxlW2RdKXJldHVybiExO2Zvcih2YXIgcCBpbiBzLnN0eWxlKWlmKHMuc3R5bGUuaGFzT3duUHJvcGVydHkocCkmJmkuc3R5bGVbcF0hPT1zLnN0eWxlW3BdKXJldHVybiExO3JldHVybiEwfSx5SHQ9aT0+e2Zvcih2YXIgcz0wO3M8aS5sZW5ndGgtMTtzKyspe3ZhciB1PWlbc10sZD1pW3MrMV07dSBpbnN0YW5jZW9mIEJ2JiZkIGluc3RhbmNlb2YgQnYmJndIdCh1LGQpJiYodS50ZXh0Kz1kLnRleHQsdS5oZWlnaHQ9TWF0aC5tYXgodS5oZWlnaHQsZC5oZWlnaHQpLHUuZGVwdGg9TWF0aC5tYXgodS5kZXB0aCxkLmRlcHRoKSx1Lml0YWxpYz1kLml0YWxpYyxpLnNwbGljZShzKzEsMSkscy0tKX1yZXR1cm4gaX0sY2JlPWZ1bmN0aW9uKHMpe2Zvcih2YXIgdT0wLGQ9MCxwPTAsdj0wO3Y8cy5jaGlsZHJlbi5sZW5ndGg7disrKXt2YXIgYj1zLmNoaWxkcmVuW3ZdO2IuaGVpZ2h0PnUmJih1PWIuaGVpZ2h0KSxiLmRlcHRoPmQmJihkPWIuZGVwdGgpLGIubWF4Rm9udFNpemU+cCYmKHA9Yi5tYXhGb250U2l6ZSl9cy5oZWlnaHQ9dSxzLmRlcHRoPWQscy5tYXhGb250U2l6ZT1wfSxSMj1mdW5jdGlvbihzLHUsZCxwKXt2YXIgdj1uZXcgY1Iocyx1LGQscCk7cmV0dXJuIGNiZSh2KSx2fSx1emU9KGkscyx1LGQpPT5uZXcgY1IoaSxzLHUsZCkseEh0PWZ1bmN0aW9uKHMsdSxkKXt2YXIgcD1SMihbc10sW10sdSk7cmV0dXJuIHAuaGVpZ2h0PU1hdGgubWF4KGR8fHUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyx1Lm1pblJ1bGVUaGlja25lc3MpLHAuc3R5bGUuYm9yZGVyQm90dG9tV2lkdGg9UmkocC5oZWlnaHQpLHAubWF4Rm9udFNpemU9MSxwfSxrSHQ9ZnVuY3Rpb24ocyx1LGQscCl7dmFyIHY9bmV3IHRiZShzLHUsZCxwKTtyZXR1cm4gY2JlKHYpLHZ9LGx6ZT1mdW5jdGlvbihzKXt2YXIgdT1uZXcgb1Iocyk7cmV0dXJuIGNiZSh1KSx1fSxFSHQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gcyBpbnN0YW5jZW9mIG9SP1IyKFtdLFtzXSx1KTpzfSxUSHQ9ZnVuY3Rpb24ocyl7aWYocy5wb3NpdGlvblR5cGU9PT0iaW5kaXZpZHVhbFNoaWZ0Iil7Zm9yKHZhciB1PXMuY2hpbGRyZW4sZD1bdVswXV0scD0tdVswXS5zaGlmdC11WzBdLmVsZW0uZGVwdGgsdj1wLGI9MTtiPHUubGVuZ3RoO2IrKyl7dmFyIHk9LXVbYl0uc2hpZnQtdi11W2JdLmVsZW0uZGVwdGgsVD15LSh1W2ItMV0uZWxlbS5oZWlnaHQrdVtiLTFdLmVsZW0uZGVwdGgpO3Y9dit5LGQucHVzaCh7dHlwZToia2VybiIsc2l6ZTpUfSksZC5wdXNoKHVbYl0pfXJldHVybntjaGlsZHJlbjpkLGRlcHRoOnB9fXZhciBfO2lmKHMucG9zaXRpb25UeXBlPT09InRvcCIpe2Zvcih2YXIgQT1zLnBvc2l0aW9uRGF0YSxQPTA7UDxzLmNoaWxkcmVuLmxlbmd0aDtQKyspe3ZhciBSPXMuY2hpbGRyZW5bUF07QS09Ui50eXBlPT09Imtlcm4iP1Iuc2l6ZTpSLmVsZW0uaGVpZ2h0K1IuZWxlbS5kZXB0aH1fPUF9ZWxzZSBpZihzLnBvc2l0aW9uVHlwZT09PSJib3R0b20iKV89LXMucG9zaXRpb25EYXRhO2Vsc2V7dmFyIEY9cy5jaGlsZHJlblswXTtpZihGLnR5cGUhPT0iZWxlbSIpdGhyb3cgbmV3IEVycm9yKCdGaXJzdCBjaGlsZCBtdXN0IGhhdmUgdHlwZSAiZWxlbSIuJyk7aWYocy5wb3NpdGlvblR5cGU9PT0ic2hpZnQiKV89LUYuZWxlbS5kZXB0aC1zLnBvc2l0aW9uRGF0YTtlbHNlIGlmKHMucG9zaXRpb25UeXBlPT09ImZpcnN0QmFzZWxpbmUiKV89LUYuZWxlbS5kZXB0aDtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwb3NpdGlvblR5cGUgIitzLnBvc2l0aW9uVHlwZSsiLiIpfXJldHVybntjaGlsZHJlbjpzLmNoaWxkcmVuLGRlcHRoOl99fSxDSHQ9ZnVuY3Rpb24ocyx1KXtmb3IodmFye2NoaWxkcmVuOmQsZGVwdGg6cH09VEh0KHMpLHY9MCxiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciB5PWRbYl07aWYoeS50eXBlPT09ImVsZW0iKXt2YXIgVD15LmVsZW07dj1NYXRoLm1heCh2LFQubWF4Rm9udFNpemUsVC5oZWlnaHQpfX12Kz0yO3ZhciBfPVIyKFsicHN0cnV0Il0sW10pO18uc3R5bGUuaGVpZ2h0PVJpKHYpO2Zvcih2YXIgQT1bXSxQPXAsUj1wLEY9cCxqPTA7ajxkLmxlbmd0aDtqKyspe3ZhciBLPWRbal07aWYoSy50eXBlPT09Imtlcm4iKUYrPUsuc2l6ZTtlbHNle3ZhciBlZT1LLmVsZW0saWU9Sy53cmFwcGVyQ2xhc3Nlc3x8W10sb2U9Sy53cmFwcGVyU3R5bGV8fHt9LHBlPVIyKGllLFtfLGVlXSx2b2lkIDAsb2UpO3BlLnN0eWxlLnRvcD1SaSgtdi1GLWVlLmRlcHRoKSxLLm1hcmdpbkxlZnQmJihwZS5zdHlsZS5tYXJnaW5MZWZ0PUsubWFyZ2luTGVmdCksSy5tYXJnaW5SaWdodCYmKHBlLnN0eWxlLm1hcmdpblJpZ2h0PUsubWFyZ2luUmlnaHQpLEEucHVzaChwZSksRis9ZWUuaGVpZ2h0K2VlLmRlcHRofVA9TWF0aC5taW4oUCxGKSxSPU1hdGgubWF4KFIsRil9dmFyIGJlPVIyKFsidmxpc3QiXSxBKTtiZS5zdHlsZS5oZWlnaHQ9UmkoUik7dmFyIGFlO2lmKFA8MCl7dmFyIG5lPVIyKFtdLFtdKSxzZT1SMihbInZsaXN0Il0sW25lXSk7c2Uuc3R5bGUuaGVpZ2h0PVJpKC1QKTt2YXIgZGU9UjIoWyJ2bGlzdC1zIl0sW25ldyBCdigi4oCLIildKTthZT1bUjIoWyJ2bGlzdC1yIl0sW2JlLGRlXSksUjIoWyJ2bGlzdC1yIl0sW3NlXSldfWVsc2UgYWU9W1IyKFsidmxpc3QtciJdLFtiZV0pXTt2YXIgWD1SMihbInZsaXN0LXQiXSxhZSk7cmV0dXJuIGFlLmxlbmd0aD09PTImJlguY2xhc3Nlcy5wdXNoKCJ2bGlzdC10MiIpLFguaGVpZ2h0PVIsWC5kZXB0aD0tUCxYfSxTSHQ9KGkscyk9Pnt2YXIgdT1SMihbIm1zcGFjZSJdLFtdLHMpLGQ9VWgoaSxzKTtyZXR1cm4gdS5zdHlsZS5tYXJnaW5SaWdodD1SaShkKSx1fSxkUT1mdW5jdGlvbihzLHUsZCl7dmFyIHA9IiI7c3dpdGNoKHMpe2Nhc2UiYW1zcm0iOnA9IkFNUyI7YnJlYWs7Y2FzZSJ0ZXh0cm0iOnA9Ik1haW4iO2JyZWFrO2Nhc2UidGV4dHNmIjpwPSJTYW5zU2VyaWYiO2JyZWFrO2Nhc2UidGV4dHR0IjpwPSJUeXBld3JpdGVyIjticmVhaztkZWZhdWx0OnA9c312YXIgdjtyZXR1cm4gdT09PSJ0ZXh0YmYiJiZkPT09InRleHRpdCI/dj0iQm9sZEl0YWxpYyI6dT09PSJ0ZXh0YmYiP3Y9IkJvbGQiOnU9PT0idGV4dGl0Ij92PSJJdGFsaWMiOnY9IlJlZ3VsYXIiLHArIi0iK3Z9LGh6ZT17bWF0aGJmOnt2YXJpYW50OiJib2xkIixmb250TmFtZToiTWFpbi1Cb2xkIn0sbWF0aHJtOnt2YXJpYW50OiJub3JtYWwiLGZvbnROYW1lOiJNYWluLVJlZ3VsYXIifSx0ZXh0aXQ6e3ZhcmlhbnQ6Iml0YWxpYyIsZm9udE5hbWU6Ik1haW4tSXRhbGljIn0sbWF0aGl0Ont2YXJpYW50OiJpdGFsaWMiLGZvbnROYW1lOiJNYWluLUl0YWxpYyJ9LG1hdGhub3JtYWw6e3ZhcmlhbnQ6Iml0YWxpYyIsZm9udE5hbWU6Ik1hdGgtSXRhbGljIn0sbWF0aGJiOnt2YXJpYW50OiJkb3VibGUtc3RydWNrIixmb250TmFtZToiQU1TLVJlZ3VsYXIifSxtYXRoY2FsOnt2YXJpYW50OiJzY3JpcHQiLGZvbnROYW1lOiJDYWxpZ3JhcGhpYy1SZWd1bGFyIn0sbWF0aGZyYWs6e3ZhcmlhbnQ6ImZyYWt0dXIiLGZvbnROYW1lOiJGcmFrdHVyLVJlZ3VsYXIifSxtYXRoc2NyOnt2YXJpYW50OiJzY3JpcHQiLGZvbnROYW1lOiJTY3JpcHQtUmVndWxhciJ9LG1hdGhzZjp7dmFyaWFudDoic2Fucy1zZXJpZiIsZm9udE5hbWU6IlNhbnNTZXJpZi1SZWd1bGFyIn0sbWF0aHR0Ont2YXJpYW50OiJtb25vc3BhY2UiLGZvbnROYW1lOiJUeXBld3JpdGVyLVJlZ3VsYXIifX0sZnplPXt2ZWM6WyJ2ZWMiLC40NzEsLjcxNF0sb2lpbnRTaXplMTpbIm9paW50U2l6ZTEiLC45NTcsLjQ5OV0sb2lpbnRTaXplMjpbIm9paW50U2l6ZTIiLDEuNDcyLC42NTldLG9paWludFNpemUxOlsib2lpaW50U2l6ZTEiLDEuMzA0LC40OTldLG9paWludFNpemUyOlsib2lpaW50U2l6ZTIiLDEuOTgsLjY1OV19LF9IdD1mdW5jdGlvbihzLHUpe3ZhcltkLHAsdl09ZnplW3NdLGI9bmV3IEM5KGQpLHk9bmV3IEQ3KFtiXSx7d2lkdGg6UmkocCksaGVpZ2h0OlJpKHYpLHN0eWxlOiJ3aWR0aDoiK1JpKHApLHZpZXdCb3g6IjAgMCAiKzFlMypwKyIgIisxZTMqdixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiJ9KSxUPXV6ZShbIm92ZXJsYXkiXSxbeV0sdSk7cmV0dXJuIFQuaGVpZ2h0PXYsVC5zdHlsZS5oZWlnaHQ9UmkodiksVC5zdHlsZS53aWR0aD1SaShwKSxUfSx6bj17Zm9udE1hcDpoemUsbWFrZVN5bWJvbDpGMyxtYXRoc3ltOmJIdCxtYWtlU3BhbjpSMixtYWtlU3ZnU3Bhbjp1emUsbWFrZUxpbmVTcGFuOnhIdCxtYWtlQW5jaG9yOmtIdCxtYWtlRnJhZ21lbnQ6bHplLHdyYXBGcmFnbWVudDpFSHQsbWFrZVZMaXN0OkNIdCxtYWtlT3JkOnZIdCxtYWtlR2x1ZTpTSHQsc3RhdGljU3ZnOl9IdCxzdmdEYXRhOmZ6ZSx0cnlDb21iaW5lQ2hhcnM6eUh0fSxHaD17bnVtYmVyOjMsdW5pdDoibXUifSwkQz17bnVtYmVyOjQsdW5pdDoibXUifSxPNz17bnVtYmVyOjUsdW5pdDoibXUifSxBSHQ9e21vcmQ6e21vcDpHaCxtYmluOiRDLG1yZWw6TzcsbWlubmVyOkdofSxtb3A6e21vcmQ6R2gsbW9wOkdoLG1yZWw6TzcsbWlubmVyOkdofSxtYmluOnttb3JkOiRDLG1vcDokQyxtb3BlbjokQyxtaW5uZXI6JEN9LG1yZWw6e21vcmQ6TzcsbW9wOk83LG1vcGVuOk83LG1pbm5lcjpPN30sbW9wZW46e30sbWNsb3NlOnttb3A6R2gsbWJpbjokQyxtcmVsOk83LG1pbm5lcjpHaH0sbXB1bmN0Onttb3JkOkdoLG1vcDpHaCxtcmVsOk83LG1vcGVuOkdoLG1jbG9zZTpHaCxtcHVuY3Q6R2gsbWlubmVyOkdofSxtaW5uZXI6e21vcmQ6R2gsbW9wOkdoLG1iaW46JEMsbXJlbDpPNyxtb3BlbjpHaCxtcHVuY3Q6R2gsbWlubmVyOkdofX0sTEh0PXttb3JkOnttb3A6R2h9LG1vcDp7bW9yZDpHaCxtb3A6R2h9LG1iaW46e30sbXJlbDp7fSxtb3Blbjp7fSxtY2xvc2U6e21vcDpHaH0sbXB1bmN0Ont9LG1pbm5lcjp7bW9wOkdofX0sZHplPXt9LGdRPXt9LHBRPXt9O2Z1bmN0aW9uIEppKGkpe2Zvcih2YXJ7dHlwZTpzLG5hbWVzOnUscHJvcHM6ZCxoYW5kbGVyOnAsaHRtbEJ1aWxkZXI6dixtYXRobWxCdWlsZGVyOmJ9PWkseT17dHlwZTpzLG51bUFyZ3M6ZC5udW1BcmdzLGFyZ1R5cGVzOmQuYXJnVHlwZXMsYWxsb3dlZEluQXJndW1lbnQ6ISFkLmFsbG93ZWRJbkFyZ3VtZW50LGFsbG93ZWRJblRleHQ6ISFkLmFsbG93ZWRJblRleHQsYWxsb3dlZEluTWF0aDpkLmFsbG93ZWRJbk1hdGg9PT12b2lkIDA/ITA6ZC5hbGxvd2VkSW5NYXRoLG51bU9wdGlvbmFsQXJnczpkLm51bU9wdGlvbmFsQXJnc3x8MCxpbmZpeDohIWQuaW5maXgscHJpbWl0aXZlOiEhZC5wcmltaXRpdmUsaGFuZGxlcjpwfSxUPTA7VDx1Lmxlbmd0aDsrK1QpZHplW3VbVF1dPXk7cyYmKHYmJihnUVtzXT12KSxiJiYocFFbc109YikpfWZ1bmN0aW9uIHpDKGkpe3Zhcnt0eXBlOnMsaHRtbEJ1aWxkZXI6dSxtYXRobWxCdWlsZGVyOmR9PWk7Smkoe3R5cGU6cyxuYW1lczpbXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKCl7dGhyb3cgbmV3IEVycm9yKCJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkLiIpfSxodG1sQnVpbGRlcjp1LG1hdGhtbEJ1aWxkZXI6ZH0pfXZhciBiUT1mdW5jdGlvbihzKXtyZXR1cm4gcy50eXBlPT09Im9yZGdyb3VwIiYmcy5ib2R5Lmxlbmd0aD09PTE/cy5ib2R5WzBdOnN9LFhmPWZ1bmN0aW9uKHMpe3JldHVybiBzLnR5cGU9PT0ib3JkZ3JvdXAiP3MuYm9keTpbc119LE43PXpuLm1ha2VTcGFuLE1IdD1bImxlZnRtb3N0IiwibWJpbiIsIm1vcGVuIiwibXJlbCIsIm1vcCIsIm1wdW5jdCJdLERIdD1bInJpZ2h0bW9zdCIsIm1yZWwiLCJtY2xvc2UiLCJtcHVuY3QiXSxJSHQ9e2Rpc3BsYXk6VGEuRElTUExBWSx0ZXh0OlRhLlRFWFQsc2NyaXB0OlRhLlNDUklQVCxzY3JpcHRzY3JpcHQ6VGEuU0NSSVBUU0NSSVBUfSxPSHQ9e21vcmQ6Im1vcmQiLG1vcDoibW9wIixtYmluOiJtYmluIixtcmVsOiJtcmVsIixtb3BlbjoibW9wZW4iLG1jbG9zZToibWNsb3NlIixtcHVuY3Q6Im1wdW5jdCIsbWlubmVyOiJtaW5uZXIifSxkMT1mdW5jdGlvbihzLHUsZCxwKXtwPT09dm9pZCAwJiYocD1bbnVsbCxudWxsXSk7Zm9yKHZhciB2PVtdLGI9MDtiPHMubGVuZ3RoO2IrKyl7dmFyIHk9dXUoc1tiXSx1KTtpZih5IGluc3RhbmNlb2Ygb1Ipe3ZhciBUPXkuY2hpbGRyZW47di5wdXNoKC4uLlQpfWVsc2Ugdi5wdXNoKHkpfWlmKHpuLnRyeUNvbWJpbmVDaGFycyh2KSwhZClyZXR1cm4gdjt2YXIgXz11O2lmKHMubGVuZ3RoPT09MSl7dmFyIEE9c1swXTtBLnR5cGU9PT0ic2l6aW5nIj9fPXUuaGF2aW5nU2l6ZShBLnNpemUpOkEudHlwZT09PSJzdHlsaW5nIiYmKF89dS5oYXZpbmdTdHlsZShJSHRbQS5zdHlsZV0pKX12YXIgUD1ONyhbcFswXXx8ImxlZnRtb3N0Il0sW10sdSksUj1ONyhbcFsxXXx8InJpZ2h0bW9zdCJdLFtdLHUpLEY9ZD09PSJyb290IjtyZXR1cm4gZ3plKHYsKGosSyk9Pnt2YXIgZWU9Sy5jbGFzc2VzWzBdLGllPWouY2xhc3Nlc1swXTtlZT09PSJtYmluIiYmWWEuY29udGFpbnMoREh0LGllKT9LLmNsYXNzZXNbMF09Im1vcmQiOmllPT09Im1iaW4iJiZZYS5jb250YWlucyhNSHQsZWUpJiYoai5jbGFzc2VzWzBdPSJtb3JkIil9LHtub2RlOlB9LFIsRiksZ3plKHYsKGosSyk9Pnt2YXIgZWU9dWJlKEspLGllPXViZShqKSxvZT1lZSYmaWU/ai5oYXNDbGFzcygibXRpZ2h0Iik/TEh0W2VlXVtpZV06QUh0W2VlXVtpZV06bnVsbDtpZihvZSlyZXR1cm4gem4ubWFrZUdsdWUob2UsXyl9LHtub2RlOlB9LFIsRiksdn0sZ3plPWZ1bmN0aW9uIGkocyx1LGQscCx2KXtwJiZzLnB1c2gocCk7Zm9yKHZhciBiPTA7YjxzLmxlbmd0aDtiKyspe3ZhciB5PXNbYl0sVD1wemUoeSk7aWYoVCl7aShULmNoaWxkcmVuLHUsZCxudWxsLHYpO2NvbnRpbnVlfXZhciBfPSF5Lmhhc0NsYXNzKCJtc3BhY2UiKTtpZihfKXt2YXIgQT11KHksZC5ub2RlKTtBJiYoZC5pbnNlcnRBZnRlcj9kLmluc2VydEFmdGVyKEEpOihzLnVuc2hpZnQoQSksYisrKSl9Xz9kLm5vZGU9eTp2JiZ5Lmhhc0NsYXNzKCJuZXdsaW5lIikmJihkLm5vZGU9TjcoWyJsZWZ0bW9zdCJdKSksZC5pbnNlcnRBZnRlcj0oUD0+Uj0+e3Muc3BsaWNlKFArMSwwLFIpLGIrK30pKGIpfXAmJnMucG9wKCl9LHB6ZT1mdW5jdGlvbihzKXtyZXR1cm4gcyBpbnN0YW5jZW9mIG9SfHxzIGluc3RhbmNlb2YgdGJlfHxzIGluc3RhbmNlb2YgY1ImJnMuaGFzQ2xhc3MoImVuY2xvc2luZyIpP3M6bnVsbH0sTkh0PWZ1bmN0aW9uIGkocyx1KXt2YXIgZD1wemUocyk7aWYoZCl7dmFyIHA9ZC5jaGlsZHJlbjtpZihwLmxlbmd0aCl7aWYodT09PSJyaWdodCIpcmV0dXJuIGkocFtwLmxlbmd0aC0xXSwicmlnaHQiKTtpZih1PT09ImxlZnQiKXJldHVybiBpKHBbMF0sImxlZnQiKX19cmV0dXJuIHN9LHViZT1mdW5jdGlvbihzLHUpe3JldHVybiBzPyh1JiYocz1OSHQocyx1KSksT0h0W3MuY2xhc3Nlc1swXV18fG51bGwpOm51bGx9LHVSPWZ1bmN0aW9uKHMsdSl7dmFyIGQ9WyJudWxsZGVsaW1pdGVyIl0uY29uY2F0KHMuYmFzZVNpemluZ0NsYXNzZXMoKSk7cmV0dXJuIE43KHUuY29uY2F0KGQpKX0sdXU9ZnVuY3Rpb24ocyx1LGQpe2lmKCFzKXJldHVybiBONygpO2lmKGdRW3MudHlwZV0pe3ZhciBwPWdRW3MudHlwZV0ocyx1KTtpZihkJiZ1LnNpemUhPT1kLnNpemUpe3A9TjcodS5zaXppbmdDbGFzc2VzKGQpLFtwXSx1KTt2YXIgdj11LnNpemVNdWx0aXBsaWVyL2Quc2l6ZU11bHRpcGxpZXI7cC5oZWlnaHQqPXYscC5kZXB0aCo9dn1yZXR1cm4gcH1lbHNlIHRocm93IG5ldyBDaSgiR290IGdyb3VwIG9mIHVua25vd24gdHlwZTogJyIrcy50eXBlKyInIil9O2Z1bmN0aW9uIG1RKGkscyl7dmFyIHU9TjcoWyJiYXNlIl0saSxzKSxkPU43KFsic3RydXQiXSk7cmV0dXJuIGQuc3R5bGUuaGVpZ2h0PVJpKHUuaGVpZ2h0K3UuZGVwdGgpLHUuZGVwdGgmJihkLnN0eWxlLnZlcnRpY2FsQWxpZ249UmkoLXUuZGVwdGgpKSx1LmNoaWxkcmVuLnVuc2hpZnQoZCksdX1mdW5jdGlvbiBsYmUoaSxzKXt2YXIgdT1udWxsO2kubGVuZ3RoPT09MSYmaVswXS50eXBlPT09InRhZyImJih1PWlbMF0udGFnLGk9aVswXS5ib2R5KTt2YXIgZD1kMShpLHMsInJvb3QiKSxwO2QubGVuZ3RoPT09MiYmZFsxXS5oYXNDbGFzcygidGFnIikmJihwPWQucG9wKCkpO2Zvcih2YXIgdj1bXSxiPVtdLHk9MDt5PGQubGVuZ3RoO3krKylpZihiLnB1c2goZFt5XSksZFt5XS5oYXNDbGFzcygibWJpbiIpfHxkW3ldLmhhc0NsYXNzKCJtcmVsIil8fGRbeV0uaGFzQ2xhc3MoImFsbG93YnJlYWsiKSl7Zm9yKHZhciBUPSExO3k8ZC5sZW5ndGgtMSYmZFt5KzFdLmhhc0NsYXNzKCJtc3BhY2UiKSYmIWRbeSsxXS5oYXNDbGFzcygibmV3bGluZSIpOyl5KyssYi5wdXNoKGRbeV0pLGRbeV0uaGFzQ2xhc3MoIm5vYnJlYWsiKSYmKFQ9ITApO1R8fCh2LnB1c2gobVEoYixzKSksYj1bXSl9ZWxzZSBkW3ldLmhhc0NsYXNzKCJuZXdsaW5lIikmJihiLnBvcCgpLGIubGVuZ3RoPjAmJih2LnB1c2gobVEoYixzKSksYj1bXSksdi5wdXNoKGRbeV0pKTtiLmxlbmd0aD4wJiZ2LnB1c2gobVEoYixzKSk7dmFyIF87dT8oXz1tUShkMSh1LHMsITApKSxfLmNsYXNzZXM9WyJ0YWciXSx2LnB1c2goXykpOnAmJnYucHVzaChwKTt2YXIgQT1ONyhbImthdGV4LWh0bWwiXSx2KTtpZihBLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksXyl7dmFyIFA9Xy5jaGlsZHJlblswXTtQLnN0eWxlLmhlaWdodD1SaShBLmhlaWdodCtBLmRlcHRoKSxBLmRlcHRoJiYoUC5zdHlsZS52ZXJ0aWNhbEFsaWduPVJpKC1BLmRlcHRoKSl9cmV0dXJuIEF9ZnVuY3Rpb24gYnplKGkpe3JldHVybiBuZXcgb1IoaSl9Y2xhc3MgRnZ7Y29uc3RydWN0b3Iocyx1LGQpe3RoaXMudHlwZT12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmNoaWxkcmVuPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMudHlwZT1zLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLmNoaWxkcmVuPXV8fFtdLHRoaXMuY2xhc3Nlcz1kfHxbXX1zZXRBdHRyaWJ1dGUocyx1KXt0aGlzLmF0dHJpYnV0ZXNbc109dX1nZXRBdHRyaWJ1dGUocyl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1tzXX10b05vZGUoKXt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHRoaXMudHlwZSk7Zm9yKHZhciB1IGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHUpJiZzLnNldEF0dHJpYnV0ZSh1LHRoaXMuYXR0cmlidXRlc1t1XSk7dGhpcy5jbGFzc2VzLmxlbmd0aD4wJiYocy5jbGFzc05hbWU9VDkodGhpcy5jbGFzc2VzKSk7Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspcy5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2RdLnRvTm9kZSgpKTtyZXR1cm4gc310b01hcmt1cCgpe3ZhciBzPSI8Iit0aGlzLnR5cGU7Zm9yKHZhciB1IGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHUpJiYocys9IiAiK3UrJz0iJyxzKz1ZYS5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW3VdKSxzKz0nIicpO3RoaXMuY2xhc3Nlcy5sZW5ndGg+MCYmKHMrPScgY2xhc3MgPSInK1lhLmVzY2FwZShUOSh0aGlzLmNsYXNzZXMpKSsnIicpLHMrPSI+Ijtmb3IodmFyIGQ9MDtkPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2QrKylzKz10aGlzLmNoaWxkcmVuW2RdLnRvTWFya3VwKCk7cmV0dXJuIHMrPSI8LyIrdGhpcy50eXBlKyI+IixzfXRvVGV4dCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLm1hcChzPT5zLnRvVGV4dCgpKS5qb2luKCIiKX19Y2xhc3MgbFJ7Y29uc3RydWN0b3Iocyl7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLnRleHQ9c310b05vZGUoKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KX10b01hcmt1cCgpe3JldHVybiBZYS5lc2NhcGUodGhpcy50b1RleHQoKSl9dG9UZXh0KCl7cmV0dXJuIHRoaXMudGV4dH19Y2xhc3MgUEh0e2NvbnN0cnVjdG9yKHMpe3RoaXMud2lkdGg9dm9pZCAwLHRoaXMuY2hhcmFjdGVyPXZvaWQgMCx0aGlzLndpZHRoPXMscz49LjA1NTU1JiZzPD0uMDU1NTY/dGhpcy5jaGFyYWN0ZXI9IuKAiiI6cz49LjE2NjYmJnM8PS4xNjY3P3RoaXMuY2hhcmFjdGVyPSLigIkiOnM+PS4yMjIyJiZzPD0uMjIyMz90aGlzLmNoYXJhY3Rlcj0i4oCFIjpzPj0uMjc3NyYmczw9LjI3Nzg/dGhpcy5jaGFyYWN0ZXI9IuKAheKAiiI6cz49LS4wNTU1NiYmczw9LS4wNTU1NT90aGlzLmNoYXJhY3Rlcj0i4oCK4oGjIjpzPj0tLjE2NjcmJnM8PS0uMTY2Nj90aGlzLmNoYXJhY3Rlcj0i4oCJ4oGjIjpzPj0tLjIyMjMmJnM8PS0uMjIyMj90aGlzLmNoYXJhY3Rlcj0i4oGf4oGjIjpzPj0tLjI3NzgmJnM8PS0uMjc3Nz90aGlzLmNoYXJhY3Rlcj0i4oCF4oGjIjp0aGlzLmNoYXJhY3Rlcj1udWxsfXRvTm9kZSgpe2lmKHRoaXMuY2hhcmFjdGVyKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmNoYXJhY3Rlcik7dmFyIHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIiwibXNwYWNlIik7cmV0dXJuIHMuc2V0QXR0cmlidXRlKCJ3aWR0aCIsUmkodGhpcy53aWR0aCkpLHN9dG9NYXJrdXAoKXtyZXR1cm4gdGhpcy5jaGFyYWN0ZXI/IjxtdGV4dD4iK3RoaXMuY2hhcmFjdGVyKyI8L210ZXh0PiI6Jzxtc3BhY2Ugd2lkdGg9IicrUmkodGhpcy53aWR0aCkrJyIvPid9dG9UZXh0KCl7cmV0dXJuIHRoaXMuY2hhcmFjdGVyP3RoaXMuY2hhcmFjdGVyOiIgIn19dmFyIHZpPXtNYXRoTm9kZTpGdixUZXh0Tm9kZTpsUixTcGFjZU5vZGU6UEh0LG5ld0RvY3VtZW50RnJhZ21lbnQ6YnplfSxSdj1mdW5jdGlvbihzLHUsZCl7cmV0dXJuIFVsW3VdW3NdJiZVbFt1XVtzXS5yZXBsYWNlJiZzLmNoYXJDb2RlQXQoMCkhPT01NTM0OSYmIShyemUuaGFzT3duUHJvcGVydHkocykmJmQmJihkLmZvbnRGYW1pbHkmJmQuZm9udEZhbWlseS5zbGljZSg0LDYpPT09InR0Inx8ZC5mb250JiZkLmZvbnQuc2xpY2UoNCw2KT09PSJ0dCIpKSYmKHM9VWxbdV1bc10ucmVwbGFjZSksbmV3IHZpLlRleHROb2RlKHMpfSxoYmU9ZnVuY3Rpb24ocyl7cmV0dXJuIHMubGVuZ3RoPT09MT9zWzBdOm5ldyB2aS5NYXRoTm9kZSgibXJvdyIscyl9LGZiZT1mdW5jdGlvbihzLHUpe2lmKHUuZm9udEZhbWlseT09PSJ0ZXh0dHQiKXJldHVybiJtb25vc3BhY2UiO2lmKHUuZm9udEZhbWlseT09PSJ0ZXh0c2YiKXJldHVybiB1LmZvbnRTaGFwZT09PSJ0ZXh0aXQiJiZ1LmZvbnRXZWlnaHQ9PT0idGV4dGJmIj8ic2Fucy1zZXJpZi1ib2xkLWl0YWxpYyI6dS5mb250U2hhcGU9PT0idGV4dGl0Ij8ic2Fucy1zZXJpZi1pdGFsaWMiOnUuZm9udFdlaWdodD09PSJ0ZXh0YmYiPyJib2xkLXNhbnMtc2VyaWYiOiJzYW5zLXNlcmlmIjtpZih1LmZvbnRTaGFwZT09PSJ0ZXh0aXQiJiZ1LmZvbnRXZWlnaHQ9PT0idGV4dGJmIilyZXR1cm4iYm9sZC1pdGFsaWMiO2lmKHUuZm9udFNoYXBlPT09InRleHRpdCIpcmV0dXJuIml0YWxpYyI7aWYodS5mb250V2VpZ2h0PT09InRleHRiZiIpcmV0dXJuImJvbGQiO3ZhciBkPXUuZm9udDtpZighZHx8ZD09PSJtYXRobm9ybWFsIilyZXR1cm4gbnVsbDt2YXIgcD1zLm1vZGU7aWYoZD09PSJtYXRoaXQiKXJldHVybiJpdGFsaWMiO2lmKGQ9PT0iYm9sZHN5bWJvbCIpcmV0dXJuIHMudHlwZT09PSJ0ZXh0b3JkIj8iYm9sZCI6ImJvbGQtaXRhbGljIjtpZihkPT09Im1hdGhiZiIpcmV0dXJuImJvbGQiO2lmKGQ9PT0ibWF0aGJiIilyZXR1cm4iZG91YmxlLXN0cnVjayI7aWYoZD09PSJtYXRoZnJhayIpcmV0dXJuImZyYWt0dXIiO2lmKGQ9PT0ibWF0aHNjciJ8fGQ9PT0ibWF0aGNhbCIpcmV0dXJuInNjcmlwdCI7aWYoZD09PSJtYXRoc2YiKXJldHVybiJzYW5zLXNlcmlmIjtpZihkPT09Im1hdGh0dCIpcmV0dXJuIm1vbm9zcGFjZSI7dmFyIHY9cy50ZXh0O2lmKFlhLmNvbnRhaW5zKFsiXFxpbWF0aCIsIlxcam1hdGgiXSx2KSlyZXR1cm4gbnVsbDtVbFtwXVt2XSYmVWxbcF1bdl0ucmVwbGFjZSYmKHY9VWxbcF1bdl0ucmVwbGFjZSk7dmFyIGI9em4uZm9udE1hcFtkXS5mb250TmFtZTtyZXR1cm4gSjJlKHYsYixwKT96bi5mb250TWFwW2RdLnZhcmlhbnQ6bnVsbH0sajI9ZnVuY3Rpb24ocyx1LGQpe2lmKHMubGVuZ3RoPT09MSl7dmFyIHA9TGwoc1swXSx1KTtyZXR1cm4gZCYmcCBpbnN0YW5jZW9mIEZ2JiZwLnR5cGU9PT0ibW8iJiYocC5zZXRBdHRyaWJ1dGUoImxzcGFjZSIsIjBlbSIpLHAuc2V0QXR0cmlidXRlKCJyc3BhY2UiLCIwZW0iKSksW3BdfWZvcih2YXIgdj1bXSxiLHk9MDt5PHMubGVuZ3RoO3krKyl7dmFyIFQ9TGwoc1t5XSx1KTtpZihUIGluc3RhbmNlb2YgRnYmJmIgaW5zdGFuY2VvZiBGdil7aWYoVC50eXBlPT09Im10ZXh0IiYmYi50eXBlPT09Im10ZXh0IiYmVC5nZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50Iik9PT1iLmdldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiKSl7Yi5jaGlsZHJlbi5wdXNoKC4uLlQuY2hpbGRyZW4pO2NvbnRpbnVlfWVsc2UgaWYoVC50eXBlPT09Im1uIiYmYi50eXBlPT09Im1uIil7Yi5jaGlsZHJlbi5wdXNoKC4uLlQuY2hpbGRyZW4pO2NvbnRpbnVlfWVsc2UgaWYoVC50eXBlPT09Im1pIiYmVC5jaGlsZHJlbi5sZW5ndGg9PT0xJiZiLnR5cGU9PT0ibW4iKXt2YXIgXz1ULmNoaWxkcmVuWzBdO2lmKF8gaW5zdGFuY2VvZiBsUiYmXy50ZXh0PT09Ii4iKXtiLmNoaWxkcmVuLnB1c2goLi4uVC5jaGlsZHJlbik7Y29udGludWV9fWVsc2UgaWYoYi50eXBlPT09Im1pIiYmYi5jaGlsZHJlbi5sZW5ndGg9PT0xKXt2YXIgQT1iLmNoaWxkcmVuWzBdO2lmKEEgaW5zdGFuY2VvZiBsUiYmQS50ZXh0PT09Isy4IiYmKFQudHlwZT09PSJtbyJ8fFQudHlwZT09PSJtaSJ8fFQudHlwZT09PSJtbiIpKXt2YXIgUD1ULmNoaWxkcmVuWzBdO1AgaW5zdGFuY2VvZiBsUiYmUC50ZXh0Lmxlbmd0aD4wJiYoUC50ZXh0PVAudGV4dC5zbGljZSgwLDEpKyLMuCIrUC50ZXh0LnNsaWNlKDEpLHYucG9wKCkpfX19di5wdXNoKFQpLGI9VH1yZXR1cm4gdn0sXzk9ZnVuY3Rpb24ocyx1LGQpe3JldHVybiBoYmUoajIocyx1LGQpKX0sTGw9ZnVuY3Rpb24ocyx1KXtpZighcylyZXR1cm4gbmV3IHZpLk1hdGhOb2RlKCJtcm93Iik7aWYocFFbcy50eXBlXSl7dmFyIGQ9cFFbcy50eXBlXShzLHUpO3JldHVybiBkfWVsc2UgdGhyb3cgbmV3IENpKCJHb3QgZ3JvdXAgb2YgdW5rbm93biB0eXBlOiAnIitzLnR5cGUrIiciKX07ZnVuY3Rpb24gbXplKGkscyx1LGQscCl7dmFyIHY9ajIoaSx1KSxiO3YubGVuZ3RoPT09MSYmdlswXWluc3RhbmNlb2YgRnYmJllhLmNvbnRhaW5zKFsibXJvdyIsIm10YWJsZSJdLHZbMF0udHlwZSk/Yj12WzBdOmI9bmV3IHZpLk1hdGhOb2RlKCJtcm93Iix2KTt2YXIgeT1uZXcgdmkuTWF0aE5vZGUoImFubm90YXRpb24iLFtuZXcgdmkuVGV4dE5vZGUocyldKTt5LnNldEF0dHJpYnV0ZSgiZW5jb2RpbmciLCJhcHBsaWNhdGlvbi94LXRleCIpO3ZhciBUPW5ldyB2aS5NYXRoTm9kZSgic2VtYW50aWNzIixbYix5XSksXz1uZXcgdmkuTWF0aE5vZGUoIm1hdGgiLFtUXSk7Xy5zZXRBdHRyaWJ1dGUoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIpLGQmJl8uc2V0QXR0cmlidXRlKCJkaXNwbGF5IiwiYmxvY2siKTt2YXIgQT1wPyJrYXRleCI6ImthdGV4LW1hdGhtbCI7cmV0dXJuIHpuLm1ha2VTcGFuKFtBXSxbX10pfXZhciB2emU9ZnVuY3Rpb24ocyl7cmV0dXJuIG5ldyBNNyh7c3R5bGU6cy5kaXNwbGF5TW9kZT9UYS5ESVNQTEFZOlRhLlRFWFQsbWF4U2l6ZTpzLm1heFNpemUsbWluUnVsZVRoaWNrbmVzczpzLm1pblJ1bGVUaGlja25lc3N9KX0sd3plPWZ1bmN0aW9uKHMsdSl7aWYodS5kaXNwbGF5TW9kZSl7dmFyIGQ9WyJrYXRleC1kaXNwbGF5Il07dS5sZXFubyYmZC5wdXNoKCJsZXFubyIpLHUuZmxlcW4mJmQucHVzaCgiZmxlcW4iKSxzPXpuLm1ha2VTcGFuKGQsW3NdKX1yZXR1cm4gc30sQkh0PWZ1bmN0aW9uKHMsdSxkKXt2YXIgcD12emUoZCksdjtpZihkLm91dHB1dD09PSJtYXRobWwiKXJldHVybiBtemUocyx1LHAsZC5kaXNwbGF5TW9kZSwhMCk7aWYoZC5vdXRwdXQ9PT0iaHRtbCIpe3ZhciBiPWxiZShzLHApO3Y9em4ubWFrZVNwYW4oWyJrYXRleCJdLFtiXSl9ZWxzZXt2YXIgeT1temUocyx1LHAsZC5kaXNwbGF5TW9kZSwhMSksVD1sYmUocyxwKTt2PXpuLm1ha2VTcGFuKFsia2F0ZXgiXSxbeSxUXSl9cmV0dXJuIHd6ZSh2LGQpfSxGSHQ9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwPXZ6ZShkKSx2PWxiZShzLHApLGI9em4ubWFrZVNwYW4oWyJrYXRleCJdLFt2XSk7cmV0dXJuIHd6ZShiLGQpfSxSSHQ9e3dpZGVoYXQ6Il4iLHdpZGVjaGVjazoiy4ciLHdpZGV0aWxkZToifiIsdXRpbGRlOiJ+IixvdmVybGVmdGFycm93OiLihpAiLHVuZGVybGVmdGFycm93OiLihpAiLHhsZWZ0YXJyb3c6IuKGkCIsb3ZlcnJpZ2h0YXJyb3c6IuKGkiIsdW5kZXJyaWdodGFycm93OiLihpIiLHhyaWdodGFycm93OiLihpIiLHVuZGVyYnJhY2U6IuKPnyIsb3ZlcmJyYWNlOiLij54iLG92ZXJncm91cDoi4o+gIix1bmRlcmdyb3VwOiLij6EiLG92ZXJsZWZ0cmlnaHRhcnJvdzoi4oaUIix1bmRlcmxlZnRyaWdodGFycm93OiLihpQiLHhsZWZ0cmlnaHRhcnJvdzoi4oaUIixPdmVycmlnaHRhcnJvdzoi4oeSIix4UmlnaHRhcnJvdzoi4oeSIixvdmVybGVmdGhhcnBvb246IuKGvCIseGxlZnRoYXJwb29udXA6IuKGvCIsb3ZlcnJpZ2h0aGFycG9vbjoi4oeAIix4cmlnaHRoYXJwb29udXA6IuKHgCIseExlZnRhcnJvdzoi4oeQIix4TGVmdHJpZ2h0YXJyb3c6IuKHlCIseGhvb2tsZWZ0YXJyb3c6IuKGqSIseGhvb2tyaWdodGFycm93OiLihqoiLHhtYXBzdG86IuKGpiIseHJpZ2h0aGFycG9vbmRvd246IuKHgSIseGxlZnRoYXJwb29uZG93bjoi4oa9Iix4cmlnaHRsZWZ0aGFycG9vbnM6IuKHjCIseGxlZnRyaWdodGhhcnBvb25zOiLih4siLHh0d29oZWFkbGVmdGFycm93OiLihp4iLHh0d29oZWFkcmlnaHRhcnJvdzoi4oagIix4bG9uZ2VxdWFsOiI9Iix4dG9mcm9tOiLih4QiLHhyaWdodGxlZnRhcnJvd3M6IuKHhCIseHJpZ2h0ZXF1aWxpYnJpdW06IuKHjCIseGxlZnRlcXVpbGlicml1bToi4oeLIiwiXFxjZHJpZ2h0YXJyb3ciOiLihpIiLCJcXGNkbGVmdGFycm93Ijoi4oaQIiwiXFxjZGxvbmdlcXVhbCI6Ij0ifSxqSHQ9ZnVuY3Rpb24ocyl7dmFyIHU9bmV3IHZpLk1hdGhOb2RlKCJtbyIsW25ldyB2aS5UZXh0Tm9kZShSSHRbcy5yZXBsYWNlKC9eXFwvLCIiKV0pXSk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKSx1fSwkSHQ9e292ZXJyaWdodGFycm93OltbInJpZ2h0YXJyb3ciXSwuODg4LDUyMiwieE1heFlNaW4iXSxvdmVybGVmdGFycm93OltbImxlZnRhcnJvdyJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLHVuZGVycmlnaHRhcnJvdzpbWyJyaWdodGFycm93Il0sLjg4OCw1MjIsInhNYXhZTWluIl0sdW5kZXJsZWZ0YXJyb3c6W1sibGVmdGFycm93Il0sLjg4OCw1MjIsInhNaW5ZTWluIl0seHJpZ2h0YXJyb3c6W1sicmlnaHRhcnJvdyJdLDEuNDY5LDUyMiwieE1heFlNaW4iXSwiXFxjZHJpZ2h0YXJyb3ciOltbInJpZ2h0YXJyb3ciXSwzLDUyMiwieE1heFlNaW4iXSx4bGVmdGFycm93OltbImxlZnRhcnJvdyJdLDEuNDY5LDUyMiwieE1pbllNaW4iXSwiXFxjZGxlZnRhcnJvdyI6W1sibGVmdGFycm93Il0sMyw1MjIsInhNaW5ZTWluIl0sT3ZlcnJpZ2h0YXJyb3c6W1siZG91YmxlcmlnaHRhcnJvdyJdLC44ODgsNTYwLCJ4TWF4WU1pbiJdLHhSaWdodGFycm93OltbImRvdWJsZXJpZ2h0YXJyb3ciXSwxLjUyNiw1NjAsInhNYXhZTWluIl0seExlZnRhcnJvdzpbWyJkb3VibGVsZWZ0YXJyb3ciXSwxLjUyNiw1NjAsInhNaW5ZTWluIl0sb3ZlcmxlZnRoYXJwb29uOltbImxlZnRoYXJwb29uIl0sLjg4OCw1MjIsInhNaW5ZTWluIl0seGxlZnRoYXJwb29udXA6W1sibGVmdGhhcnBvb24iXSwuODg4LDUyMiwieE1pbllNaW4iXSx4bGVmdGhhcnBvb25kb3duOltbImxlZnRoYXJwb29uZG93biJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLG92ZXJyaWdodGhhcnBvb246W1sicmlnaHRoYXJwb29uIl0sLjg4OCw1MjIsInhNYXhZTWluIl0seHJpZ2h0aGFycG9vbnVwOltbInJpZ2h0aGFycG9vbiJdLC44ODgsNTIyLCJ4TWF4WU1pbiJdLHhyaWdodGhhcnBvb25kb3duOltbInJpZ2h0aGFycG9vbmRvd24iXSwuODg4LDUyMiwieE1heFlNaW4iXSx4bG9uZ2VxdWFsOltbImxvbmdlcXVhbCJdLC44ODgsMzM0LCJ4TWluWU1pbiJdLCJcXGNkbG9uZ2VxdWFsIjpbWyJsb25nZXF1YWwiXSwzLDMzNCwieE1pbllNaW4iXSx4dHdvaGVhZGxlZnRhcnJvdzpbWyJ0d29oZWFkbGVmdGFycm93Il0sLjg4OCwzMzQsInhNaW5ZTWluIl0seHR3b2hlYWRyaWdodGFycm93OltbInR3b2hlYWRyaWdodGFycm93Il0sLjg4OCwzMzQsInhNYXhZTWluIl0sb3ZlcmxlZnRyaWdodGFycm93OltbImxlZnRhcnJvdyIsInJpZ2h0YXJyb3ciXSwuODg4LDUyMl0sb3ZlcmJyYWNlOltbImxlZnRicmFjZSIsIm1pZGJyYWNlIiwicmlnaHRicmFjZSJdLDEuNiw1NDhdLHVuZGVyYnJhY2U6W1sibGVmdGJyYWNldW5kZXIiLCJtaWRicmFjZXVuZGVyIiwicmlnaHRicmFjZXVuZGVyIl0sMS42LDU0OF0sdW5kZXJsZWZ0cmlnaHRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGFycm93Il0sLjg4OCw1MjJdLHhsZWZ0cmlnaHRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGFycm93Il0sMS43NSw1MjJdLHhMZWZ0cmlnaHRhcnJvdzpbWyJkb3VibGVsZWZ0YXJyb3ciLCJkb3VibGVyaWdodGFycm93Il0sMS43NSw1NjBdLHhyaWdodGxlZnRoYXJwb29uczpbWyJsZWZ0aGFycG9vbmRvd25wbHVzIiwicmlnaHRoYXJwb29ucGx1cyJdLDEuNzUsNzE2XSx4bGVmdHJpZ2h0aGFycG9vbnM6W1sibGVmdGhhcnBvb25wbHVzIiwicmlnaHRoYXJwb29uZG93bnBsdXMiXSwxLjc1LDcxNl0seGhvb2tsZWZ0YXJyb3c6W1sibGVmdGFycm93IiwicmlnaHRob29rIl0sMS4wOCw1MjJdLHhob29rcmlnaHRhcnJvdzpbWyJsZWZ0aG9vayIsInJpZ2h0YXJyb3ciXSwxLjA4LDUyMl0sb3ZlcmxpbmVzZWdtZW50OltbImxlZnRsaW5lc2VnbWVudCIsInJpZ2h0bGluZXNlZ21lbnQiXSwuODg4LDUyMl0sdW5kZXJsaW5lc2VnbWVudDpbWyJsZWZ0bGluZXNlZ21lbnQiLCJyaWdodGxpbmVzZWdtZW50Il0sLjg4OCw1MjJdLG92ZXJncm91cDpbWyJsZWZ0Z3JvdXAiLCJyaWdodGdyb3VwIl0sLjg4OCwzNDJdLHVuZGVyZ3JvdXA6W1sibGVmdGdyb3VwdW5kZXIiLCJyaWdodGdyb3VwdW5kZXIiXSwuODg4LDM0Ml0seG1hcHN0bzpbWyJsZWZ0bWFwc3RvIiwicmlnaHRhcnJvdyJdLDEuNSw1MjJdLHh0b2Zyb206W1sibGVmdFRvRnJvbSIsInJpZ2h0VG9Gcm9tIl0sMS43NSw1MjhdLHhyaWdodGxlZnRhcnJvd3M6W1siYmFyYWJvdmVsZWZ0YXJyb3ciLCJyaWdodGFycm93YWJvdmViYXIiXSwxLjc1LDkwMV0seHJpZ2h0ZXF1aWxpYnJpdW06W1siYmFyYWJvdmVzaG9ydGxlZnRoYXJwb29uIiwicmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhciJdLDEuNzUsNzE2XSx4bGVmdGVxdWlsaWJyaXVtOltbInNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbiIsInNob3J0cmlnaHRoYXJwb29uYWJvdmViYXIiXSwxLjc1LDcxNl19LHpIdD1mdW5jdGlvbihzKXtyZXR1cm4gcy50eXBlPT09Im9yZGdyb3VwIj9zLmJvZHkubGVuZ3RoOjF9LHFIdD1mdW5jdGlvbihzLHUpe2Z1bmN0aW9uIGQoKXt2YXIgeT00ZTUsVD1zLmxhYmVsLnNsaWNlKDEpO2lmKFlhLmNvbnRhaW5zKFsid2lkZWhhdCIsIndpZGVjaGVjayIsIndpZGV0aWxkZSIsInV0aWxkZSJdLFQpKXt2YXIgXz1zLEE9ekh0KF8uYmFzZSksUCxSLEY7aWYoQT41KVQ9PT0id2lkZWhhdCJ8fFQ9PT0id2lkZWNoZWNrIj8oUD00MjAseT0yMzY0LEY9LjQyLFI9VCsiNCIpOihQPTMxMix5PTIzNDAsRj0uMzQsUj0idGlsZGU0Iik7ZWxzZXt2YXIgaj1bMSwxLDIsMiwzLDNdW0FdO1Q9PT0id2lkZWhhdCJ8fFQ9PT0id2lkZWNoZWNrIj8oeT1bMCwxMDYyLDIzNjQsMjM2NCwyMzY0XVtqXSxQPVswLDIzOSwzMDAsMzYwLDQyMF1bal0sRj1bMCwuMjQsLjMsLjMsLjM2LC40Ml1bal0sUj1UK2opOih5PVswLDYwMCwxMDMzLDIzMzksMjM0MF1bal0sUD1bMCwyNjAsMjg2LDMwNiwzMTJdW2pdLEY9WzAsLjI2LC4yODYsLjMsLjMwNiwuMzRdW2pdLFI9InRpbGRlIitqKX12YXIgSz1uZXcgQzkoUiksZWU9bmV3IEQ3KFtLXSx7d2lkdGg6IjEwMCUiLGhlaWdodDpSaShGKSx2aWV3Qm94OiIwIDAgIit5KyIgIitQLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSk7cmV0dXJue3NwYW46em4ubWFrZVN2Z1NwYW4oW10sW2VlXSx1KSxtaW5XaWR0aDowLGhlaWdodDpGfX1lbHNle3ZhciBpZT1bXSxvZT0kSHRbVF0sW3BlLGJlLGFlXT1vZSxuZT1hZS8xZTMsc2U9cGUubGVuZ3RoLGRlLFg7aWYoc2U9PT0xKXt2YXIgZ2U9b2VbM107ZGU9WyJoaWRlLXRhaWwiXSxYPVtnZV19ZWxzZSBpZihzZT09PTIpZGU9WyJoYWxmYXJyb3ctbGVmdCIsImhhbGZhcnJvdy1yaWdodCJdLFg9WyJ4TWluWU1pbiIsInhNYXhZTWluIl07ZWxzZSBpZihzZT09PTMpZGU9WyJicmFjZS1sZWZ0IiwiYnJhY2UtY2VudGVyIiwiYnJhY2UtcmlnaHQiXSxYPVsieE1pbllNaW4iLCJ4TWlkWU1pbiIsInhNYXhZTWluIl07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYENvcnJlY3Qga2F0ZXhJbWFnZXNEYXRhIG9yIHVwZGF0ZSBjb2RlIGhlcmUgdG8gc3VwcG9ydAogICAgICAgICAgICAgICAgICAgIGArc2UrIiBjaGlsZHJlbi4iKTtmb3IodmFyIFc9MDtXPHNlO1crKyl7dmFyIHhlPW5ldyBDOShwZVtXXSksVT1uZXcgRDcoW3hlXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6UmkobmUpLHZpZXdCb3g6IjAgMCAiK3krIiAiK2FlLHByZXNlcnZlQXNwZWN0UmF0aW86WFtXXSsiIHNsaWNlIn0pLEZlPXpuLm1ha2VTdmdTcGFuKFtkZVtXXV0sW1VdLHUpO2lmKHNlPT09MSlyZXR1cm57c3BhbjpGZSxtaW5XaWR0aDpiZSxoZWlnaHQ6bmV9O0ZlLnN0eWxlLmhlaWdodD1SaShuZSksaWUucHVzaChGZSl9cmV0dXJue3NwYW46em4ubWFrZVNwYW4oWyJzdHJldGNoeSJdLGllLHUpLG1pbldpZHRoOmJlLGhlaWdodDpuZX19fXZhcntzcGFuOnAsbWluV2lkdGg6dixoZWlnaHQ6Yn09ZCgpO3JldHVybiBwLmhlaWdodD1iLHAuc3R5bGUuaGVpZ2h0PVJpKGIpLHY+MCYmKHAuc3R5bGUubWluV2lkdGg9UmkodikpLHB9LEhIdD1mdW5jdGlvbihzLHUsZCxwLHYpe3ZhciBiLHk9cy5oZWlnaHQrcy5kZXB0aCtkK3A7aWYoL2Zib3h8Y29sb3J8YW5nbC8udGVzdCh1KSl7aWYoYj16bi5tYWtlU3BhbihbInN0cmV0Y2h5Iix1XSxbXSx2KSx1PT09ImZib3giKXt2YXIgVD12LmNvbG9yJiZ2LmdldENvbG9yKCk7VCYmKGIuc3R5bGUuYm9yZGVyQ29sb3I9VCl9fWVsc2V7dmFyIF89W107L15bYnhdY2FuY2VsJC8udGVzdCh1KSYmXy5wdXNoKG5ldyBuYmUoe3gxOiIwIix5MToiMCIseDI6IjEwMCUiLHkyOiIxMDAlIiwic3Ryb2tlLXdpZHRoIjoiMC4wNDZlbSJ9KSksL154P2NhbmNlbCQvLnRlc3QodSkmJl8ucHVzaChuZXcgbmJlKHt4MToiMCIseTE6IjEwMCUiLHgyOiIxMDAlIix5MjoiMCIsInN0cm9rZS13aWR0aCI6IjAuMDQ2ZW0ifSkpO3ZhciBBPW5ldyBENyhfLHt3aWR0aDoiMTAwJSIsaGVpZ2h0OlJpKHkpfSk7Yj16bi5tYWtlU3ZnU3BhbihbXSxbQV0sdil9cmV0dXJuIGIuaGVpZ2h0PXksYi5zdHlsZS5oZWlnaHQ9UmkoeSksYn0sUDc9e2VuY2xvc2VTcGFuOkhIdCxtYXRoTUxub2RlOmpIdCxzdmdTcGFuOnFIdH07ZnVuY3Rpb24gWW8oaSxzKXtpZighaXx8aS50eXBlIT09cyl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG5vZGUgb2YgdHlwZSAiK3MrIiwgYnV0IGdvdCAiKyhpPyJub2RlIG9mIHR5cGUgIitpLnR5cGU6U3RyaW5nKGkpKSk7cmV0dXJuIGl9ZnVuY3Rpb24gZGJlKGkpe3ZhciBzPXZRKGkpO2lmKCFzKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9kZSBvZiBzeW1ib2wgZ3JvdXAgdHlwZSwgYnV0IGdvdCAiKyhpPyJub2RlIG9mIHR5cGUgIitpLnR5cGU6U3RyaW5nKGkpKSk7cmV0dXJuIHN9ZnVuY3Rpb24gdlEoaSl7cmV0dXJuIGkmJihpLnR5cGU9PT0iYXRvbSJ8fGdIdC5oYXNPd25Qcm9wZXJ0eShpLnR5cGUpKT9pOm51bGx9dmFyIGdiZT0oaSxzKT0+e3ZhciB1LGQscDtpJiZpLnR5cGU9PT0ic3Vwc3ViIj8oZD1ZbyhpLmJhc2UsImFjY2VudCIpLHU9ZC5iYXNlLGkuYmFzZT11LHA9Zkh0KHV1KGkscykpLGkuYmFzZT1kKTooZD1ZbyhpLCJhY2NlbnQiKSx1PWQuYmFzZSk7dmFyIHY9dXUodSxzLmhhdmluZ0NyYW1wZWRTdHlsZSgpKSxiPWQuaXNTaGlmdHkmJllhLmlzQ2hhcmFjdGVyQm94KHUpLHk9MDtpZihiKXt2YXIgVD1ZYS5nZXRCYXNlRWxlbSh1KSxfPXV1KFQscy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7eT1uemUoXykuc2tld312YXIgQT1kLmxhYmVsPT09IlxcYyIsUD1BP3YuaGVpZ2h0K3YuZGVwdGg6TWF0aC5taW4odi5oZWlnaHQscy5mb250TWV0cmljcygpLnhIZWlnaHQpLFI7aWYoZC5pc1N0cmV0Y2h5KVI9UDcuc3ZnU3BhbihkLHMpLFI9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp2fSx7dHlwZToiZWxlbSIsZWxlbTpSLHdyYXBwZXJDbGFzc2VzOlsic3ZnLWFsaWduIl0sd3JhcHBlclN0eWxlOnk+MD97d2lkdGg6ImNhbGMoMTAwJSAtICIrUmkoMip5KSsiKSIsbWFyZ2luTGVmdDpSaSgyKnkpfTp2b2lkIDB9XX0scyk7ZWxzZXt2YXIgRixqO2QubGFiZWw9PT0iXFx2ZWMiPyhGPXpuLnN0YXRpY1N2ZygidmVjIixzKSxqPXpuLnN2Z0RhdGEudmVjWzFdKTooRj16bi5tYWtlT3JkKHttb2RlOmQubW9kZSx0ZXh0OmQubGFiZWx9LHMsInRleHRvcmQiKSxGPW56ZShGKSxGLml0YWxpYz0wLGo9Ri53aWR0aCxBJiYoUCs9Ri5kZXB0aCkpLFI9em4ubWFrZVNwYW4oWyJhY2NlbnQtYm9keSJdLFtGXSk7dmFyIEs9ZC5sYWJlbD09PSJcXHRleHRjaXJjbGVkIjtLJiYoUi5jbGFzc2VzLnB1c2goImFjY2VudC1mdWxsIiksUD12LmhlaWdodCk7dmFyIGVlPXk7S3x8KGVlLT1qLzIpLFIuc3R5bGUubGVmdD1SaShlZSksZC5sYWJlbD09PSJcXHRleHRjaXJjbGVkIiYmKFIuc3R5bGUudG9wPSIuMmVtIiksUj16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnZ9LHt0eXBlOiJrZXJuIixzaXplOi1QfSx7dHlwZToiZWxlbSIsZWxlbTpSfV19LHMpfXZhciBpZT16bi5tYWtlU3BhbihbIm1vcmQiLCJhY2NlbnQiXSxbUl0scyk7cmV0dXJuIHA/KHAuY2hpbGRyZW5bMF09aWUscC5oZWlnaHQ9TWF0aC5tYXgoaWUuaGVpZ2h0LHAuaGVpZ2h0KSxwLmNsYXNzZXNbMF09Im1vcmQiLHApOmllfSx5emU9KGkscyk9Pnt2YXIgdT1pLmlzU3RyZXRjaHk/UDcubWF0aE1Mbm9kZShpLmxhYmVsKTpuZXcgdmkuTWF0aE5vZGUoIm1vIixbUnYoaS5sYWJlbCxpLm1vZGUpXSksZD1uZXcgdmkuTWF0aE5vZGUoIm1vdmVyIixbTGwoaS5iYXNlLHMpLHVdKTtyZXR1cm4gZC5zZXRBdHRyaWJ1dGUoImFjY2VudCIsInRydWUiKSxkfSxWSHQ9bmV3IFJlZ0V4cChbIlxcYWN1dGUiLCJcXGdyYXZlIiwiXFxkZG90IiwiXFx0aWxkZSIsIlxcYmFyIiwiXFxicmV2ZSIsIlxcY2hlY2siLCJcXGhhdCIsIlxcdmVjIiwiXFxkb3QiLCJcXG1hdGhyaW5nIl0ubWFwKGk9PiJcXCIraSkuam9pbigifCIpKTtKaSh7dHlwZToiYWNjZW50IixuYW1lczpbIlxcYWN1dGUiLCJcXGdyYXZlIiwiXFxkZG90IiwiXFx0aWxkZSIsIlxcYmFyIiwiXFxicmV2ZSIsIlxcY2hlY2siLCJcXGhhdCIsIlxcdmVjIiwiXFxkb3QiLCJcXG1hdGhyaW5nIiwiXFx3aWRlY2hlY2siLCJcXHdpZGVoYXQiLCJcXHdpZGV0aWxkZSIsIlxcb3ZlcnJpZ2h0YXJyb3ciLCJcXG92ZXJsZWZ0YXJyb3ciLCJcXE92ZXJyaWdodGFycm93IiwiXFxvdmVybGVmdHJpZ2h0YXJyb3ciLCJcXG92ZXJncm91cCIsIlxcb3ZlcmxpbmVzZWdtZW50IiwiXFxvdmVybGVmdGhhcnBvb24iLCJcXG92ZXJyaWdodGhhcnBvb24iXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOihpLHMpPT57dmFyIHU9YlEoc1swXSksZD0hVkh0LnRlc3QoaS5mdW5jTmFtZSkscD0hZHx8aS5mdW5jTmFtZT09PSJcXHdpZGVoYXQifHxpLmZ1bmNOYW1lPT09Ilxcd2lkZXRpbGRlInx8aS5mdW5jTmFtZT09PSJcXHdpZGVjaGVjayI7cmV0dXJue3R5cGU6ImFjY2VudCIsbW9kZTppLnBhcnNlci5tb2RlLGxhYmVsOmkuZnVuY05hbWUsaXNTdHJldGNoeTpkLGlzU2hpZnR5OnAsYmFzZTp1fX0saHRtbEJ1aWxkZXI6Z2JlLG1hdGhtbEJ1aWxkZXI6eXplfSksSmkoe3R5cGU6ImFjY2VudCIsbmFtZXM6WyJcXCciLCJcXGAiLCJcXF4iLCJcXH4iLCJcXD0iLCJcXHUiLCJcXC4iLCdcXCInLCJcXGMiLCJcXHIiLCJcXEgiLCJcXHYiLCJcXHRleHRjaXJjbGVkIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITAsYXJnVHlwZXM6WyJwcmltaXRpdmUiXX0saGFuZGxlcjooaSxzKT0+e3ZhciB1PXNbMF0sZD1pLnBhcnNlci5tb2RlO3JldHVybiBkPT09Im1hdGgiJiYoaS5wYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJtYXRoVnNUZXh0QWNjZW50cyIsIkxhVGVYJ3MgYWNjZW50ICIraS5mdW5jTmFtZSsiIHdvcmtzIG9ubHkgaW4gdGV4dCBtb2RlIiksZD0idGV4dCIpLHt0eXBlOiJhY2NlbnQiLG1vZGU6ZCxsYWJlbDppLmZ1bmNOYW1lLGlzU3RyZXRjaHk6ITEsaXNTaGlmdHk6ITAsYmFzZTp1fX0saHRtbEJ1aWxkZXI6Z2JlLG1hdGhtbEJ1aWxkZXI6eXplfSksSmkoe3R5cGU6ImFjY2VudFVuZGVyIixuYW1lczpbIlxcdW5kZXJsZWZ0YXJyb3ciLCJcXHVuZGVycmlnaHRhcnJvdyIsIlxcdW5kZXJsZWZ0cmlnaHRhcnJvdyIsIlxcdW5kZXJncm91cCIsIlxcdW5kZXJsaW5lc2VnbWVudCIsIlxcdXRpbGRlIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9c1swXTtyZXR1cm57dHlwZToiYWNjZW50VW5kZXIiLG1vZGU6dS5tb2RlLGxhYmVsOmQsYmFzZTpwfX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT11dShpLmJhc2UscyksZD1QNy5zdmdTcGFuKGkscykscD1pLmxhYmVsPT09IlxcdXRpbGRlIj8uMTI6MCx2PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJ0b3AiLHBvc2l0aW9uRGF0YTp1LmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06ZCx3cmFwcGVyQ2xhc3NlczpbInN2Zy1hbGlnbiJdfSx7dHlwZToia2VybiIsc2l6ZTpwfSx7dHlwZToiZWxlbSIsZWxlbTp1fV19LHMpO3JldHVybiB6bi5tYWtlU3BhbihbIm1vcmQiLCJhY2NlbnR1bmRlciJdLFt2XSxzKX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PVA3Lm1hdGhNTG5vZGUoaS5sYWJlbCksZD1uZXcgdmkuTWF0aE5vZGUoIm11bmRlciIsW0xsKGkuYmFzZSxzKSx1XSk7cmV0dXJuIGQuc2V0QXR0cmlidXRlKCJhY2NlbnR1bmRlciIsInRydWUiKSxkfX0pO3ZhciB3UT1pPT57dmFyIHM9bmV3IHZpLk1hdGhOb2RlKCJtcGFkZGVkIixpP1tpXTpbXSk7cmV0dXJuIHMuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIiswLjZlbSIpLHMuc2V0QXR0cmlidXRlKCJsc3BhY2UiLCIwLjNlbSIpLHN9O0ppKHt0eXBlOiJ4QXJyb3ciLG5hbWVzOlsiXFx4bGVmdGFycm93IiwiXFx4cmlnaHRhcnJvdyIsIlxceExlZnRhcnJvdyIsIlxceFJpZ2h0YXJyb3ciLCJcXHhsZWZ0cmlnaHRhcnJvdyIsIlxceExlZnRyaWdodGFycm93IiwiXFx4aG9va2xlZnRhcnJvdyIsIlxceGhvb2tyaWdodGFycm93IiwiXFx4bWFwc3RvIiwiXFx4cmlnaHRoYXJwb29uZG93biIsIlxceHJpZ2h0aGFycG9vbnVwIiwiXFx4bGVmdGhhcnBvb25kb3duIiwiXFx4bGVmdGhhcnBvb251cCIsIlxceHJpZ2h0bGVmdGhhcnBvb25zIiwiXFx4bGVmdHJpZ2h0aGFycG9vbnMiLCJcXHhsb25nZXF1YWwiLCJcXHh0d29oZWFkcmlnaHRhcnJvdyIsIlxceHR3b2hlYWRsZWZ0YXJyb3ciLCJcXHh0b2Zyb20iLCJcXHhyaWdodGxlZnRhcnJvd3MiLCJcXHhyaWdodGVxdWlsaWJyaXVtIiwiXFx4bGVmdGVxdWlsaWJyaXVtIiwiXFxcXGNkcmlnaHRhcnJvdyIsIlxcXFxjZGxlZnRhcnJvdyIsIlxcXFxjZGxvbmdlcXVhbCJdLHByb3BzOntudW1BcmdzOjEsbnVtT3B0aW9uYWxBcmdzOjF9LGhhbmRsZXIoaSxzLHUpe3ZhcntwYXJzZXI6ZCxmdW5jTmFtZTpwfT1pO3JldHVybnt0eXBlOiJ4QXJyb3ciLG1vZGU6ZC5tb2RlLGxhYmVsOnAsYm9keTpzWzBdLGJlbG93OnVbMF19fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PXMuc3R5bGUsZD1zLmhhdmluZ1N0eWxlKHUuc3VwKCkpLHA9em4ud3JhcEZyYWdtZW50KHV1KGkuYm9keSxkLHMpLHMpLHY9aS5sYWJlbC5zbGljZSgwLDIpPT09IlxceCI/IngiOiJjZCI7cC5jbGFzc2VzLnB1c2godisiLWFycm93LXBhZCIpO3ZhciBiO2kuYmVsb3cmJihkPXMuaGF2aW5nU3R5bGUodS5zdWIoKSksYj16bi53cmFwRnJhZ21lbnQodXUoaS5iZWxvdyxkLHMpLHMpLGIuY2xhc3Nlcy5wdXNoKHYrIi1hcnJvdy1wYWQiKSk7dmFyIHk9UDcuc3ZnU3BhbihpLHMpLFQ9LXMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0Ky41KnkuaGVpZ2h0LF89LXMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LS41KnkuaGVpZ2h0LS4xMTE7KHAuZGVwdGg+LjI1fHxpLmxhYmVsPT09IlxceGxlZnRlcXVpbGlicml1bSIpJiYoXy09cC5kZXB0aCk7dmFyIEE7aWYoYil7dmFyIFA9LXMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0K2IuaGVpZ2h0Ky41KnkuaGVpZ2h0Ky4xMTE7QT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cCxzaGlmdDpffSx7dHlwZToiZWxlbSIsZWxlbTp5LHNoaWZ0OlR9LHt0eXBlOiJlbGVtIixlbGVtOmIsc2hpZnQ6UH1dfSxzKX1lbHNlIEE9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnAsc2hpZnQ6X30se3R5cGU6ImVsZW0iLGVsZW06eSxzaGlmdDpUfV19LHMpO3JldHVybiBBLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaCgic3ZnLWFsaWduIiksem4ubWFrZVNwYW4oWyJtcmVsIiwieC1hcnJvdyJdLFtBXSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PVA3Lm1hdGhNTG5vZGUoaS5sYWJlbCk7dS5zZXRBdHRyaWJ1dGUoIm1pbnNpemUiLGkubGFiZWwuY2hhckF0KDApPT09IngiPyIxLjc1ZW0iOiIzLjBlbSIpO3ZhciBkO2lmKGkuYm9keSl7dmFyIHA9d1EoTGwoaS5ib2R5LHMpKTtpZihpLmJlbG93KXt2YXIgdj13UShMbChpLmJlbG93LHMpKTtkPW5ldyB2aS5NYXRoTm9kZSgibXVuZGVyb3ZlciIsW3UsdixwXSl9ZWxzZSBkPW5ldyB2aS5NYXRoTm9kZSgibW92ZXIiLFt1LHBdKX1lbHNlIGlmKGkuYmVsb3cpe3ZhciBiPXdRKExsKGkuYmVsb3cscykpO2Q9bmV3IHZpLk1hdGhOb2RlKCJtdW5kZXIiLFt1LGJdKX1lbHNlIGQ9d1EoKSxkPW5ldyB2aS5NYXRoTm9kZSgibW92ZXIiLFt1LGRdKTtyZXR1cm4gZH19KTt2YXIgVUh0PXpuLm1ha2VTcGFuO2Z1bmN0aW9uIHh6ZShpLHMpe3ZhciB1PWQxKGkuYm9keSxzLCEwKTtyZXR1cm4gVUh0KFtpLm1jbGFzc10sdSxzKX1mdW5jdGlvbiBremUoaSxzKXt2YXIgdSxkPWoyKGkuYm9keSxzKTtyZXR1cm4gaS5tY2xhc3M9PT0ibWlubmVyIj91PW5ldyB2aS5NYXRoTm9kZSgibXBhZGRlZCIsZCk6aS5tY2xhc3M9PT0ibW9yZCI/aS5pc0NoYXJhY3RlckJveD8odT1kWzBdLHUudHlwZT0ibWkiKTp1PW5ldyB2aS5NYXRoTm9kZSgibWkiLGQpOihpLmlzQ2hhcmFjdGVyQm94Pyh1PWRbMF0sdS50eXBlPSJtbyIpOnU9bmV3IHZpLk1hdGhOb2RlKCJtbyIsZCksaS5tY2xhc3M9PT0ibWJpbiI/KHUuYXR0cmlidXRlcy5sc3BhY2U9IjAuMjJlbSIsdS5hdHRyaWJ1dGVzLnJzcGFjZT0iMC4yMmVtIik6aS5tY2xhc3M9PT0ibXB1bmN0Ij8odS5hdHRyaWJ1dGVzLmxzcGFjZT0iMGVtIix1LmF0dHJpYnV0ZXMucnNwYWNlPSIwLjE3ZW0iKTppLm1jbGFzcz09PSJtb3BlbiJ8fGkubWNsYXNzPT09Im1jbG9zZSI/KHUuYXR0cmlidXRlcy5sc3BhY2U9IjBlbSIsdS5hdHRyaWJ1dGVzLnJzcGFjZT0iMGVtIik6aS5tY2xhc3M9PT0ibWlubmVyIiYmKHUuYXR0cmlidXRlcy5sc3BhY2U9IjAuMDU1NmVtIix1LmF0dHJpYnV0ZXMud2lkdGg9IiswLjExMTFlbSIpKSx1fUppKHt0eXBlOiJtY2xhc3MiLG5hbWVzOlsiXFxtYXRob3JkIiwiXFxtYXRoYmluIiwiXFxtYXRocmVsIiwiXFxtYXRob3BlbiIsIlxcbWF0aGNsb3NlIiwiXFxtYXRocHVuY3QiLCJcXG1hdGhpbm5lciJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzBdO3JldHVybnt0eXBlOiJtY2xhc3MiLG1vZGU6dS5tb2RlLG1jbGFzczoibSIrZC5zbGljZSg1KSxib2R5OlhmKHApLGlzQ2hhcmFjdGVyQm94OllhLmlzQ2hhcmFjdGVyQm94KHApfX0saHRtbEJ1aWxkZXI6eHplLG1hdGhtbEJ1aWxkZXI6a3plfSk7dmFyIHlRPWk9Pnt2YXIgcz1pLnR5cGU9PT0ib3JkZ3JvdXAiJiZpLmJvZHkubGVuZ3RoP2kuYm9keVswXTppO3JldHVybiBzLnR5cGU9PT0iYXRvbSImJihzLmZhbWlseT09PSJiaW4ifHxzLmZhbWlseT09PSJyZWwiKT8ibSIrcy5mYW1pbHk6Im1vcmQifTtKaSh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcQGJpbnJlbCJdLHByb3BzOntudW1BcmdzOjJ9LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnV9PWk7cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTp1Lm1vZGUsbWNsYXNzOnlRKHNbMF0pLGJvZHk6WGYoc1sxXSksaXNDaGFyYWN0ZXJCb3g6WWEuaXNDaGFyYWN0ZXJCb3goc1sxXSl9fX0pLEppKHt0eXBlOiJtY2xhc3MiLG5hbWVzOlsiXFxzdGFja3JlbCIsIlxcb3ZlcnNldCIsIlxcdW5kZXJzZXQiXSxwcm9wczp7bnVtQXJnczoyfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzFdLHY9c1swXSxiO2QhPT0iXFxzdGFja3JlbCI/Yj15UShwKTpiPSJtcmVsIjt2YXIgeT17dHlwZToib3AiLG1vZGU6cC5tb2RlLGxpbWl0czohMCxhbHdheXNIYW5kbGVTdXBTdWI6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiExLHN1cHByZXNzQmFzZVNoaWZ0OmQhPT0iXFxzdGFja3JlbCIsYm9keTpYZihwKX0sVD17dHlwZToic3Vwc3ViIixtb2RlOnYubW9kZSxiYXNlOnksc3VwOmQ9PT0iXFx1bmRlcnNldCI/bnVsbDp2LHN1YjpkPT09IlxcdW5kZXJzZXQiP3Y6bnVsbH07cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTp1Lm1vZGUsbWNsYXNzOmIsYm9keTpbVF0saXNDaGFyYWN0ZXJCb3g6WWEuaXNDaGFyYWN0ZXJCb3goVCl9fSxodG1sQnVpbGRlcjp4emUsbWF0aG1sQnVpbGRlcjpremV9KSxKaSh7dHlwZToicG1iIixuYW1lczpbIlxccG1iIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1fT1pO3JldHVybnt0eXBlOiJwbWIiLG1vZGU6dS5tb2RlLG1jbGFzczp5UShzWzBdKSxib2R5OlhmKHNbMF0pfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT1kMShpLmJvZHkscywhMCksZD16bi5tYWtlU3BhbihbaS5tY2xhc3NdLHUscyk7cmV0dXJuIGQuc3R5bGUudGV4dFNoYWRvdz0iMC4wMmVtIDAuMDFlbSAwLjA0cHgiLGR9LG1hdGhtbEJ1aWxkZXIoaSxzKXt2YXIgdT1qMihpLmJvZHkscyksZD1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIsdSk7cmV0dXJuIGQuc2V0QXR0cmlidXRlKCJzdHlsZSIsInRleHQtc2hhZG93OiAwLjAyZW0gMC4wMWVtIDAuMDRweCIpLGR9fSk7dmFyIEdIdD17Ij4iOiJcXFxcY2RyaWdodGFycm93IiwiPCI6IlxcXFxjZGxlZnRhcnJvdyIsIj0iOiJcXFxcY2Rsb25nZXF1YWwiLEE6IlxcdXBhcnJvdyIsVjoiXFxkb3duYXJyb3ciLCJ8IjoiXFxWZXJ0IiwiLiI6Im5vIGFycm93In0sRXplPSgpPT4oe3R5cGU6InN0eWxpbmciLGJvZHk6W10sbW9kZToibWF0aCIsc3R5bGU6ImRpc3BsYXkifSksVHplPWk9PmkudHlwZT09PSJ0ZXh0b3JkIiYmaS50ZXh0PT09IkAiLEtIdD0oaSxzKT0+KGkudHlwZT09PSJtYXRob3JkInx8aS50eXBlPT09ImF0b20iKSYmaS50ZXh0PT09cztmdW5jdGlvbiBXSHQoaSxzLHUpe3ZhciBkPUdIdFtpXTtzd2l0Y2goZCl7Y2FzZSJcXFxcY2RyaWdodGFycm93IjpjYXNlIlxcXFxjZGxlZnRhcnJvdyI6cmV0dXJuIHUuY2FsbEZ1bmN0aW9uKGQsW3NbMF1dLFtzWzFdXSk7Y2FzZSJcXHVwYXJyb3ciOmNhc2UiXFxkb3duYXJyb3ciOnt2YXIgcD11LmNhbGxGdW5jdGlvbigiXFxcXGNkbGVmdCIsW3NbMF1dLFtdKSx2PXt0eXBlOiJhdG9tIix0ZXh0OmQsbW9kZToibWF0aCIsZmFtaWx5OiJyZWwifSxiPXUuY2FsbEZ1bmN0aW9uKCJcXEJpZyIsW3ZdLFtdKSx5PXUuY2FsbEZ1bmN0aW9uKCJcXFxcY2RyaWdodCIsW3NbMV1dLFtdKSxUPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpbcCxiLHldfTtyZXR1cm4gdS5jYWxsRnVuY3Rpb24oIlxcXFxjZHBhcmVudCIsW1RdLFtdKX1jYXNlIlxcXFxjZGxvbmdlcXVhbCI6cmV0dXJuIHUuY2FsbEZ1bmN0aW9uKCJcXFxcY2Rsb25nZXF1YWwiLFtdLFtdKTtjYXNlIlxcVmVydCI6e3ZhciBfPXt0eXBlOiJ0ZXh0b3JkIix0ZXh0OiJcXFZlcnQiLG1vZGU6Im1hdGgifTtyZXR1cm4gdS5jYWxsRnVuY3Rpb24oIlxcQmlnIixbX10sW10pfWRlZmF1bHQ6cmV0dXJue3R5cGU6InRleHRvcmQiLHRleHQ6IiAiLG1vZGU6Im1hdGgifX19ZnVuY3Rpb24gWUh0KGkpe3ZhciBzPVtdO2ZvcihpLmd1bGxldC5iZWdpbkdyb3VwKCksaS5ndWxsZXQubWFjcm9zLnNldCgiXFxjciIsIlxcXFxcXHJlbGF4IiksaS5ndWxsZXQuYmVnaW5Hcm91cCgpOzspe3MucHVzaChpLnBhcnNlRXhwcmVzc2lvbighMSwiXFxcXCIpKSxpLmd1bGxldC5lbmRHcm91cCgpLGkuZ3VsbGV0LmJlZ2luR3JvdXAoKTt2YXIgdT1pLmZldGNoKCkudGV4dDtpZih1PT09IiYifHx1PT09IlxcXFwiKWkuY29uc3VtZSgpO2Vsc2UgaWYodT09PSJcXGVuZCIpe3Nbcy5sZW5ndGgtMV0ubGVuZ3RoPT09MCYmcy5wb3AoKTticmVha31lbHNlIHRocm93IG5ldyBDaSgiRXhwZWN0ZWQgXFxcXCBvciBcXGNyIG9yIFxcZW5kIixpLm5leHRUb2tlbil9Zm9yKHZhciBkPVtdLHA9W2RdLHY9MDt2PHMubGVuZ3RoO3YrKyl7Zm9yKHZhciBiPXNbdl0seT1FemUoKSxUPTA7VDxiLmxlbmd0aDtUKyspaWYoIVR6ZShiW1RdKSl5LmJvZHkucHVzaChiW1RdKTtlbHNle2QucHVzaCh5KSxUKz0xO3ZhciBfPWRiZShiW1RdKS50ZXh0LEE9bmV3IEFycmF5KDIpO2lmKEFbMF09e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OltdfSxBWzFdPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpbXX0sISgiPXwuIi5pbmRleE9mKF8pPi0xKSlpZigiPD5BViIuaW5kZXhPZihfKT4tMSlmb3IodmFyIFA9MDtQPDI7UCsrKXtmb3IodmFyIFI9ITAsRj1UKzE7RjxiLmxlbmd0aDtGKyspe2lmKEtIdChiW0ZdLF8pKXtSPSExLFQ9RjticmVha31pZihUemUoYltGXSkpdGhyb3cgbmV3IENpKCJNaXNzaW5nIGEgIitfKyIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuIixiW0ZdKTtBW1BdLmJvZHkucHVzaChiW0ZdKX1pZihSKXRocm93IG5ldyBDaSgiTWlzc2luZyBhICIrXysiIGNoYXJhY3RlciB0byBjb21wbGV0ZSBhIENEIGFycm93LiIsYltUXSl9ZWxzZSB0aHJvdyBuZXcgQ2koJ0V4cGVjdGVkIG9uZSBvZiAiPD5BVj18LiIgYWZ0ZXIgQCcsYltUXSk7dmFyIGo9V0h0KF8sQSxpKSxLPXt0eXBlOiJzdHlsaW5nIixib2R5OltqXSxtb2RlOiJtYXRoIixzdHlsZToiZGlzcGxheSJ9O2QucHVzaChLKSx5PUV6ZSgpfXYlMj09PTA/ZC5wdXNoKHkpOmQuc2hpZnQoKSxkPVtdLHAucHVzaChkKX1pLmd1bGxldC5lbmRHcm91cCgpLGkuZ3VsbGV0LmVuZEdyb3VwKCk7dmFyIGVlPW5ldyBBcnJheShwWzBdLmxlbmd0aCkuZmlsbCh7dHlwZToiYWxpZ24iLGFsaWduOiJjIixwcmVnYXA6LjI1LHBvc3RnYXA6LjI1fSk7cmV0dXJue3R5cGU6ImFycmF5Iixtb2RlOiJtYXRoIixib2R5OnAsYXJyYXlzdHJldGNoOjEsYWRkSm90OiEwLHJvd0dhcHM6W251bGxdLGNvbHM6ZWUsY29sU2VwYXJhdGlvblR5cGU6IkNEIixoTGluZXNCZWZvcmVSb3c6bmV3IEFycmF5KHAubGVuZ3RoKzEpLmZpbGwoW10pfX1KaSh7dHlwZToiY2RsYWJlbCIsbmFtZXM6WyJcXFxcY2RsZWZ0IiwiXFxcXGNkcmlnaHQiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWk7cmV0dXJue3R5cGU6ImNkbGFiZWwiLG1vZGU6dS5tb2RlLHNpZGU6ZC5zbGljZSg0KSxsYWJlbDpzWzBdfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT1zLmhhdmluZ1N0eWxlKHMuc3R5bGUuc3VwKCkpLGQ9em4ud3JhcEZyYWdtZW50KHV1KGkubGFiZWwsdSxzKSxzKTtyZXR1cm4gZC5jbGFzc2VzLnB1c2goImNkLWxhYmVsLSIraS5zaWRlKSxkLnN0eWxlLmJvdHRvbT1SaSguOC1kLmRlcHRoKSxkLmhlaWdodD0wLGQuZGVwdGg9MCxkfSxtYXRobWxCdWlsZGVyKGkscyl7dmFyIHU9bmV3IHZpLk1hdGhOb2RlKCJtcm93IixbTGwoaS5sYWJlbCxzKV0pO3JldHVybiB1PW5ldyB2aS5NYXRoTm9kZSgibXBhZGRlZCIsW3VdKSx1LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwIiksaS5zaWRlPT09ImxlZnQiJiZ1LnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiLTF3aWR0aCIpLHUuc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IiwiMC43ZW0iKSx1PW5ldyB2aS5NYXRoTm9kZSgibXN0eWxlIixbdV0pLHUuc2V0QXR0cmlidXRlKCJkaXNwbGF5c3R5bGUiLCJmYWxzZSIpLHUuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjEiKSx1fX0pLEppKHt0eXBlOiJjZGxhYmVscGFyZW50IixuYW1lczpbIlxcXFxjZHBhcmVudCJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnV9PWk7cmV0dXJue3R5cGU6ImNkbGFiZWxwYXJlbnQiLG1vZGU6dS5tb2RlLGZyYWdtZW50OnNbMF19fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PXpuLndyYXBGcmFnbWVudCh1dShpLmZyYWdtZW50LHMpLHMpO3JldHVybiB1LmNsYXNzZXMucHVzaCgiY2QtdmVydC1hcnJvdyIpLHV9LG1hdGhtbEJ1aWxkZXIoaSxzKXtyZXR1cm4gbmV3IHZpLk1hdGhOb2RlKCJtcm93IixbTGwoaS5mcmFnbWVudCxzKV0pfX0pLEppKHt0eXBlOiJ0ZXh0b3JkIixuYW1lczpbIlxcQGNoYXIiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIoaSxzKXtmb3IodmFye3BhcnNlcjp1fT1pLGQ9WW8oc1swXSwib3JkZ3JvdXAiKSxwPWQuYm9keSx2PSIiLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIHk9WW8ocFtiXSwidGV4dG9yZCIpO3YrPXkudGV4dH12YXIgVD1wYXJzZUludCh2KSxfO2lmKGlzTmFOKFQpKXRocm93IG5ldyBDaSgiXFxAY2hhciBoYXMgbm9uLW51bWVyaWMgYXJndW1lbnQgIit2KTtpZihUPDB8fFQ+PTExMTQxMTEpdGhyb3cgbmV3IENpKCJcXEBjaGFyIHdpdGggaW52YWxpZCBjb2RlIHBvaW50ICIrdik7cmV0dXJuIFQ8PTY1NTM1P189U3RyaW5nLmZyb21DaGFyQ29kZShUKTooVC09NjU1MzYsXz1TdHJpbmcuZnJvbUNoYXJDb2RlKChUPj4xMCkrNTUyOTYsKFQmMTAyMykrNTYzMjApKSx7dHlwZToidGV4dG9yZCIsbW9kZTp1Lm1vZGUsdGV4dDpffX19KTt2YXIgQ3plPShpLHMpPT57dmFyIHU9ZDEoaS5ib2R5LHMud2l0aENvbG9yKGkuY29sb3IpLCExKTtyZXR1cm4gem4ubWFrZUZyYWdtZW50KHUpfSxTemU9KGkscyk9Pnt2YXIgdT1qMihpLmJvZHkscy53aXRoQ29sb3IoaS5jb2xvcikpLGQ9bmV3IHZpLk1hdGhOb2RlKCJtc3R5bGUiLHUpO3JldHVybiBkLnNldEF0dHJpYnV0ZSgibWF0aGNvbG9yIixpLmNvbG9yKSxkfTtKaSh7dHlwZToiY29sb3IiLG5hbWVzOlsiXFx0ZXh0Y29sb3IiXSxwcm9wczp7bnVtQXJnczoyLGFsbG93ZWRJblRleHQ6ITAsYXJnVHlwZXM6WyJjb2xvciIsIm9yaWdpbmFsIl19LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnV9PWksZD1ZbyhzWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yLHA9c1sxXTtyZXR1cm57dHlwZToiY29sb3IiLG1vZGU6dS5tb2RlLGNvbG9yOmQsYm9keTpYZihwKX19LGh0bWxCdWlsZGVyOkN6ZSxtYXRobWxCdWlsZGVyOlN6ZX0pLEppKHt0eXBlOiJjb2xvciIsbmFtZXM6WyJcXGNvbG9yIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiXX0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dSxicmVha09uVG9rZW5UZXh0OmR9PWkscD1ZbyhzWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yO3UuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY3VycmVudEBjb2xvciIscCk7dmFyIHY9dS5wYXJzZUV4cHJlc3Npb24oITAsZCk7cmV0dXJue3R5cGU6ImNvbG9yIixtb2RlOnUubW9kZSxjb2xvcjpwLGJvZHk6dn19LGh0bWxCdWlsZGVyOkN6ZSxtYXRobWxCdWlsZGVyOlN6ZX0pLEppKHt0eXBlOiJjciIsbmFtZXM6WyJcXFxcIl0scHJvcHM6e251bUFyZ3M6MCxudW1PcHRpb25hbEFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKGkscyx1KXt2YXJ7cGFyc2VyOmR9PWkscD1kLmd1bGxldC5mdXR1cmUoKS50ZXh0PT09IlsiP2QucGFyc2VTaXplR3JvdXAoITApOm51bGwsdj0hZC5zZXR0aW5ncy5kaXNwbGF5TW9kZXx8IWQuc2V0dGluZ3MudXNlU3RyaWN0QmVoYXZpb3IoIm5ld0xpbmVJbkRpc3BsYXlNb2RlIiwiSW4gTGFUZVgsIFxcXFwgb3IgXFxuZXdsaW5lIGRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGUiKTtyZXR1cm57dHlwZToiY3IiLG1vZGU6ZC5tb2RlLG5ld0xpbmU6dixzaXplOnAmJllvKHAsInNpemUiKS52YWx1ZX19LGh0bWxCdWlsZGVyKGkscyl7dmFyIHU9em4ubWFrZVNwYW4oWyJtc3BhY2UiXSxbXSxzKTtyZXR1cm4gaS5uZXdMaW5lJiYodS5jbGFzc2VzLnB1c2goIm5ld2xpbmUiKSxpLnNpemUmJih1LnN0eWxlLm1hcmdpblRvcD1SaShVaChpLnNpemUscykpKSksdX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibXNwYWNlIik7cmV0dXJuIGkubmV3TGluZSYmKHUuc2V0QXR0cmlidXRlKCJsaW5lYnJlYWsiLCJuZXdsaW5lIiksaS5zaXplJiZ1LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixSaShVaChpLnNpemUscykpKSksdX19KTt2YXIgcGJlPXsiXFxnbG9iYWwiOiJcXGdsb2JhbCIsIlxcbG9uZyI6IlxcXFxnbG9iYWxsb25nIiwiXFxcXGdsb2JhbGxvbmciOiJcXFxcZ2xvYmFsbG9uZyIsIlxcZGVmIjoiXFxnZGVmIiwiXFxnZGVmIjoiXFxnZGVmIiwiXFxlZGVmIjoiXFx4ZGVmIiwiXFx4ZGVmIjoiXFx4ZGVmIiwiXFxsZXQiOiJcXFxcZ2xvYmFsbGV0IiwiXFxmdXR1cmVsZXQiOiJcXFxcZ2xvYmFsZnV0dXJlIn0sX3plPWk9Pnt2YXIgcz1pLnRleHQ7aWYoL14oPzpbXFx7fSQmI15fXXxFT0YpJC8udGVzdChzKSl0aHJvdyBuZXcgQ2koIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZSIsaSk7cmV0dXJuIHN9LFhIdD1pPT57dmFyIHM9aS5ndWxsZXQucG9wVG9rZW4oKTtyZXR1cm4gcy50ZXh0PT09Ij0iJiYocz1pLmd1bGxldC5wb3BUb2tlbigpLHMudGV4dD09PSIgIiYmKHM9aS5ndWxsZXQucG9wVG9rZW4oKSkpLHN9LEF6ZT0oaSxzLHUsZCk9Pnt2YXIgcD1pLmd1bGxldC5tYWNyb3MuZ2V0KHUudGV4dCk7cD09bnVsbCYmKHUubm9leHBhbmQ9ITAscD17dG9rZW5zOlt1XSxudW1BcmdzOjAsdW5leHBhbmRhYmxlOiFpLmd1bGxldC5pc0V4cGFuZGFibGUodS50ZXh0KX0pLGkuZ3VsbGV0Lm1hY3Jvcy5zZXQocyxwLGQpfTtKaSh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxnbG9iYWwiLCJcXGxvbmciLCJcXFxcZ2xvYmFsbG9uZyJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpKXt2YXJ7cGFyc2VyOnMsZnVuY05hbWU6dX09aTtzLmNvbnN1bWVTcGFjZXMoKTt2YXIgZD1zLmZldGNoKCk7aWYocGJlW2QudGV4dF0pcmV0dXJuKHU9PT0iXFxnbG9iYWwifHx1PT09IlxcXFxnbG9iYWxsb25nIikmJihkLnRleHQ9cGJlW2QudGV4dF0pLFlvKHMucGFyc2VGdW5jdGlvbigpLCJpbnRlcm5hbCIpO3Rocm93IG5ldyBDaSgiSW52YWxpZCB0b2tlbiBhZnRlciBtYWNybyBwcmVmaXgiLGQpfX0pLEppKHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGRlZiIsIlxcZ2RlZiIsIlxcZWRlZiIsIlxceGRlZiJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIoaSl7dmFye3BhcnNlcjpzLGZ1bmNOYW1lOnV9PWksZD1zLmd1bGxldC5wb3BUb2tlbigpLHA9ZC50ZXh0O2lmKC9eKD86W1xce30kJiNeX118RU9GKSQvLnRlc3QocCkpdGhyb3cgbmV3IENpKCJFeHBlY3RlZCBhIGNvbnRyb2wgc2VxdWVuY2UiLGQpO2Zvcih2YXIgdj0wLGIseT1bW11dO3MuZ3VsbGV0LmZ1dHVyZSgpLnRleHQhPT0ieyI7KWlmKGQ9cy5ndWxsZXQucG9wVG9rZW4oKSxkLnRleHQ9PT0iIyIpe2lmKHMuZ3VsbGV0LmZ1dHVyZSgpLnRleHQ9PT0ieyIpe2I9cy5ndWxsZXQuZnV0dXJlKCkseVt2XS5wdXNoKCJ7Iik7YnJlYWt9aWYoZD1zLmd1bGxldC5wb3BUb2tlbigpLCEvXlsxLTldJC8udGVzdChkLnRleHQpKXRocm93IG5ldyBDaSgnSW52YWxpZCBhcmd1bWVudCBudW1iZXIgIicrZC50ZXh0KyciJyk7aWYocGFyc2VJbnQoZC50ZXh0KSE9PXYrMSl0aHJvdyBuZXcgQ2koJ0FyZ3VtZW50IG51bWJlciAiJytkLnRleHQrJyIgb3V0IG9mIG9yZGVyJyk7disrLHkucHVzaChbXSl9ZWxzZXtpZihkLnRleHQ9PT0iRU9GIil0aHJvdyBuZXcgQ2koIkV4cGVjdGVkIGEgbWFjcm8gZGVmaW5pdGlvbiIpO3lbdl0ucHVzaChkLnRleHQpfXZhcnt0b2tlbnM6VH09cy5ndWxsZXQuY29uc3VtZUFyZygpO3JldHVybiBiJiZULnVuc2hpZnQoYiksKHU9PT0iXFxlZGVmInx8dT09PSJcXHhkZWYiKSYmKFQ9cy5ndWxsZXQuZXhwYW5kVG9rZW5zKFQpLFQucmV2ZXJzZSgpKSxzLmd1bGxldC5tYWNyb3Muc2V0KHAse3Rva2VuczpULG51bUFyZ3M6dixkZWxpbWl0ZXJzOnl9LHU9PT1wYmVbdV0pLHt0eXBlOiJpbnRlcm5hbCIsbW9kZTpzLm1vZGV9fX0pLEppKHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGxldCIsIlxcXFxnbG9iYWxsZXQiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKGkpe3ZhcntwYXJzZXI6cyxmdW5jTmFtZTp1fT1pLGQ9X3plKHMuZ3VsbGV0LnBvcFRva2VuKCkpO3MuZ3VsbGV0LmNvbnN1bWVTcGFjZXMoKTt2YXIgcD1YSHQocyk7cmV0dXJuIEF6ZShzLGQscCx1PT09IlxcXFxnbG9iYWxsZXQiKSx7dHlwZToiaW50ZXJuYWwiLG1vZGU6cy5tb2RlfX19KSxKaSh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxmdXR1cmVsZXQiLCJcXFxcZ2xvYmFsZnV0dXJlIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcihpKXt2YXJ7cGFyc2VyOnMsZnVuY05hbWU6dX09aSxkPV96ZShzLmd1bGxldC5wb3BUb2tlbigpKSxwPXMuZ3VsbGV0LnBvcFRva2VuKCksdj1zLmd1bGxldC5wb3BUb2tlbigpO3JldHVybiBBemUocyxkLHYsdT09PSJcXFxcZ2xvYmFsZnV0dXJlIikscy5ndWxsZXQucHVzaFRva2VuKHYpLHMuZ3VsbGV0LnB1c2hUb2tlbihwKSx7dHlwZToiaW50ZXJuYWwiLG1vZGU6cy5tb2RlfX19KTt2YXIgaFI9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwPVVsLm1hdGhbc10mJlVsLm1hdGhbc10ucmVwbGFjZSx2PUoyZShwfHxzLHUsZCk7aWYoIXYpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzeW1ib2wgIitzKyIgYW5kIGZvbnQgc2l6ZSAiK3UrIi4iKTtyZXR1cm4gdn0sYmJlPWZ1bmN0aW9uKHMsdSxkLHApe3ZhciB2PWQuaGF2aW5nQmFzZVN0eWxlKHUpLGI9em4ubWFrZVNwYW4ocC5jb25jYXQodi5zaXppbmdDbGFzc2VzKGQpKSxbc10sZCkseT12LnNpemVNdWx0aXBsaWVyL2Quc2l6ZU11bHRpcGxpZXI7cmV0dXJuIGIuaGVpZ2h0Kj15LGIuZGVwdGgqPXksYi5tYXhGb250U2l6ZT12LnNpemVNdWx0aXBsaWVyLGJ9LEx6ZT1mdW5jdGlvbihzLHUsZCl7dmFyIHA9dS5oYXZpbmdCYXNlU3R5bGUoZCksdj0oMS11LnNpemVNdWx0aXBsaWVyL3Auc2l6ZU11bHRpcGxpZXIpKnUuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O3MuY2xhc3Nlcy5wdXNoKCJkZWxpbWNlbnRlciIpLHMuc3R5bGUudG9wPVJpKHYpLHMuaGVpZ2h0LT12LHMuZGVwdGgrPXZ9LFFIdD1mdW5jdGlvbihzLHUsZCxwLHYsYil7dmFyIHk9em4ubWFrZVN5bWJvbChzLCJNYWluLVJlZ3VsYXIiLHYscCksVD1iYmUoeSx1LHAsYik7cmV0dXJuIGQmJkx6ZShULHAsdSksVH0sSkh0PWZ1bmN0aW9uKHMsdSxkLHApe3JldHVybiB6bi5tYWtlU3ltYm9sKHMsIlNpemUiK3UrIi1SZWd1bGFyIixkLHApfSxNemU9ZnVuY3Rpb24ocyx1LGQscCx2LGIpe3ZhciB5PUpIdChzLHUsdixwKSxUPWJiZSh6bi5tYWtlU3BhbihbImRlbGltc2l6aW5nIiwic2l6ZSIrdV0sW3ldLHApLFRhLlRFWFQscCxiKTtyZXR1cm4gZCYmTHplKFQscCxUYS5URVhUKSxUfSxtYmU9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwO3U9PT0iU2l6ZTEtUmVndWxhciI/cD0iZGVsaW0tc2l6ZTEiOnA9ImRlbGltLXNpemU0Ijt2YXIgdj16bi5tYWtlU3BhbihbImRlbGltc2l6aW5naW5uZXIiLHBdLFt6bi5tYWtlU3BhbihbXSxbem4ubWFrZVN5bWJvbChzLHUsZCldKV0pO3JldHVybnt0eXBlOiJlbGVtIixlbGVtOnZ9fSx2YmU9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwPUs0WyJTaXplNC1SZWd1bGFyIl1bcy5jaGFyQ29kZUF0KDApXT9LNFsiU2l6ZTQtUmVndWxhciJdW3MuY2hhckNvZGVBdCgwKV1bNF06SzRbIlNpemUxLVJlZ3VsYXIiXVtzLmNoYXJDb2RlQXQoMCldWzRdLHY9bmV3IEM5KCJpbm5lciIsaUh0KHMsTWF0aC5yb3VuZCgxZTMqdSkpKSxiPW5ldyBENyhbdl0se3dpZHRoOlJpKHApLGhlaWdodDpSaSh1KSxzdHlsZToid2lkdGg6IitSaShwKSx2aWV3Qm94OiIwIDAgIisxZTMqcCsiICIrTWF0aC5yb3VuZCgxZTMqdSkscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4ifSkseT16bi5tYWtlU3ZnU3BhbihbXSxbYl0sZCk7cmV0dXJuIHkuaGVpZ2h0PXUseS5zdHlsZS5oZWlnaHQ9UmkodSkseS5zdHlsZS53aWR0aD1SaShwKSx7dHlwZToiZWxlbSIsZWxlbTp5fX0sd2JlPS4wMDgseFE9e3R5cGU6Imtlcm4iLHNpemU6LTEqd2JlfSxaSHQ9WyJ8IiwiXFxsdmVydCIsIlxccnZlcnQiLCJcXHZlcnQiXSxlVnQ9WyJcXHwiLCJcXGxWZXJ0IiwiXFxyVmVydCIsIlxcVmVydCJdLER6ZT1mdW5jdGlvbihzLHUsZCxwLHYsYil7dmFyIHksVCxfLEEsUD0iIixSPTA7eT1fPUE9cyxUPW51bGw7dmFyIEY9IlNpemUxLVJlZ3VsYXIiO3M9PT0iXFx1cGFycm93Ij9fPUE9IuKPkCI6cz09PSJcXFVwYXJyb3ciP189QT0i4oCWIjpzPT09IlxcZG93bmFycm93Ij95PV89IuKPkCI6cz09PSJcXERvd25hcnJvdyI/eT1fPSLigJYiOnM9PT0iXFx1cGRvd25hcnJvdyI/KHk9IlxcdXBhcnJvdyIsXz0i4o+QIixBPSJcXGRvd25hcnJvdyIpOnM9PT0iXFxVcGRvd25hcnJvdyI/KHk9IlxcVXBhcnJvdyIsXz0i4oCWIixBPSJcXERvd25hcnJvdyIpOllhLmNvbnRhaW5zKFpIdCxzKT8oXz0i4oijIixQPSJ2ZXJ0IixSPTMzMyk6WWEuY29udGFpbnMoZVZ0LHMpPyhfPSLiiKUiLFA9ImRvdWJsZXZlcnQiLFI9NTU2KTpzPT09IlsifHxzPT09IlxcbGJyYWNrIj8oeT0i4o6hIixfPSLijqIiLEE9IuKOoyIsRj0iU2l6ZTQtUmVndWxhciIsUD0ibGJyYWNrIixSPTY2Nyk6cz09PSJdInx8cz09PSJcXHJicmFjayI/KHk9IuKOpCIsXz0i4o6lIixBPSLijqYiLEY9IlNpemU0LVJlZ3VsYXIiLFA9InJicmFjayIsUj02NjcpOnM9PT0iXFxsZmxvb3IifHxzPT09IuKMiiI/KF89eT0i4o6iIixBPSLijqMiLEY9IlNpemU0LVJlZ3VsYXIiLFA9ImxmbG9vciIsUj02NjcpOnM9PT0iXFxsY2VpbCJ8fHM9PT0i4oyIIj8oeT0i4o6hIixfPUE9IuKOoiIsRj0iU2l6ZTQtUmVndWxhciIsUD0ibGNlaWwiLFI9NjY3KTpzPT09IlxccmZsb29yInx8cz09PSLijIsiPyhfPXk9IuKOpSIsQT0i4o6mIixGPSJTaXplNC1SZWd1bGFyIixQPSJyZmxvb3IiLFI9NjY3KTpzPT09IlxccmNlaWwifHxzPT09IuKMiSI/KHk9IuKOpCIsXz1BPSLijqUiLEY9IlNpemU0LVJlZ3VsYXIiLFA9InJjZWlsIixSPTY2Nyk6cz09PSIoInx8cz09PSJcXGxwYXJlbiI/KHk9IuKOmyIsXz0i4o6cIixBPSLijp0iLEY9IlNpemU0LVJlZ3VsYXIiLFA9ImxwYXJlbiIsUj04NzUpOnM9PT0iKSJ8fHM9PT0iXFxycGFyZW4iPyh5PSLijp4iLF89IuKOnyIsQT0i4o6gIixGPSJTaXplNC1SZWd1bGFyIixQPSJycGFyZW4iLFI9ODc1KTpzPT09IlxceyJ8fHM9PT0iXFxsYnJhY2UiPyh5PSLijqciLFQ9IuKOqCIsQT0i4o6pIixfPSLijqoiLEY9IlNpemU0LVJlZ3VsYXIiKTpzPT09IlxcfSJ8fHM9PT0iXFxyYnJhY2UiPyh5PSLijqsiLFQ9IuKOrCIsQT0i4o6tIixfPSLijqoiLEY9IlNpemU0LVJlZ3VsYXIiKTpzPT09IlxcbGdyb3VwInx8cz09PSLin64iPyh5PSLijqciLEE9IuKOqSIsXz0i4o6qIixGPSJTaXplNC1SZWd1bGFyIik6cz09PSJcXHJncm91cCJ8fHM9PT0i4p+vIj8oeT0i4o6rIixBPSLijq0iLF89IuKOqiIsRj0iU2l6ZTQtUmVndWxhciIpOnM9PT0iXFxsbW91c3RhY2hlInx8cz09PSLijrAiPyh5PSLijqciLEE9IuKOrSIsXz0i4o6qIixGPSJTaXplNC1SZWd1bGFyIik6KHM9PT0iXFxybW91c3RhY2hlInx8cz09PSLijrEiKSYmKHk9IuKOqyIsQT0i4o6pIixfPSLijqoiLEY9IlNpemU0LVJlZ3VsYXIiKTt2YXIgaj1oUih5LEYsdiksSz1qLmhlaWdodCtqLmRlcHRoLGVlPWhSKF8sRix2KSxpZT1lZS5oZWlnaHQrZWUuZGVwdGgsb2U9aFIoQSxGLHYpLHBlPW9lLmhlaWdodCtvZS5kZXB0aCxiZT0wLGFlPTE7aWYoVCE9PW51bGwpe3ZhciBuZT1oUihULEYsdik7YmU9bmUuaGVpZ2h0K25lLmRlcHRoLGFlPTJ9dmFyIHNlPUsrcGUrYmUsZGU9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHUtc2UpLyhhZSppZSkpKSxYPXNlK2RlKmFlKmllLGdlPXAuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O2QmJihnZSo9cC5zaXplTXVsdGlwbGllcik7dmFyIFc9WC8yLWdlLHhlPVtdO2lmKFAubGVuZ3RoPjApe3ZhciBVPVgtSy1wZSxGZT1NYXRoLnJvdW5kKFgqMWUzKSxQZT1zSHQoUCxNYXRoLnJvdW5kKFUqMWUzKSksamU9bmV3IEM5KFAsUGUpLEllPShSLzFlMykudG9GaXhlZCgzKSsiZW0iLFNlPShGZS8xZTMpLnRvRml4ZWQoMykrImVtIixDZT1uZXcgRDcoW2plXSx7d2lkdGg6SWUsaGVpZ2h0OlNlLHZpZXdCb3g6IjAgMCAiK1IrIiAiK0ZlfSksa2U9em4ubWFrZVN2Z1NwYW4oW10sW0NlXSxwKTtrZS5oZWlnaHQ9RmUvMWUzLGtlLnN0eWxlLndpZHRoPUllLGtlLnN0eWxlLmhlaWdodD1TZSx4ZS5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOmtlfSl9ZWxzZXtpZih4ZS5wdXNoKG1iZShBLEYsdikpLHhlLnB1c2goeFEpLFQ9PT1udWxsKXt2YXIgS2U9WC1LLXBlKzIqd2JlO3hlLnB1c2godmJlKF8sS2UscCkpfWVsc2V7dmFyIEZ0PShYLUstcGUtYmUpLzIrMip3YmU7eGUucHVzaCh2YmUoXyxGdCxwKSkseGUucHVzaCh4USkseGUucHVzaChtYmUoVCxGLHYpKSx4ZS5wdXNoKHhRKSx4ZS5wdXNoKHZiZShfLEZ0LHApKX14ZS5wdXNoKHhRKSx4ZS5wdXNoKG1iZSh5LEYsdikpfXZhciBOZT1wLmhhdmluZ0Jhc2VTdHlsZShUYS5URVhUKSxnbj16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6VyxjaGlsZHJlbjp4ZX0sTmUpO3JldHVybiBiYmUoem4ubWFrZVNwYW4oWyJkZWxpbXNpemluZyIsIm11bHQiXSxbZ25dLE5lKSxUYS5URVhULHAsYil9LHliZT04MCx4YmU9LjA4LGtiZT1mdW5jdGlvbihzLHUsZCxwLHYpe3ZhciBiPXJIdChzLHAsZCkseT1uZXcgQzkocyxiKSxUPW5ldyBENyhbeV0se3dpZHRoOiI0MDBlbSIsaGVpZ2h0OlJpKHUpLHZpZXdCb3g6IjAgMCA0MDAwMDAgIitkLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIHNsaWNlIn0pO3JldHVybiB6bi5tYWtlU3ZnU3BhbihbImhpZGUtdGFpbCJdLFtUXSx2KX0sdFZ0PWZ1bmN0aW9uKHMsdSl7dmFyIGQ9dS5oYXZpbmdCYXNlU2l6aW5nKCkscD1QemUoIlxcc3VyZCIscypkLnNpemVNdWx0aXBsaWVyLE56ZSxkKSx2PWQuc2l6ZU11bHRpcGxpZXIsYj1NYXRoLm1heCgwLHUubWluUnVsZVRoaWNrbmVzcy11LmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MpLHksVD0wLF89MCxBPTAsUDtyZXR1cm4gcC50eXBlPT09InNtYWxsIj8oQT0xZTMrMWUzKmIreWJlLHM8MT92PTE6czwxLjQmJih2PS43KSxUPSgxK2IreGJlKS92LF89KDErYikvdix5PWtiZSgic3FydE1haW4iLFQsQSxiLHUpLHkuc3R5bGUubWluV2lkdGg9IjAuODUzZW0iLFA9LjgzMy92KTpwLnR5cGU9PT0ibGFyZ2UiPyhBPSgxZTMreWJlKSpmUltwLnNpemVdLF89KGZSW3Auc2l6ZV0rYikvdixUPShmUltwLnNpemVdK2IreGJlKS92LHk9a2JlKCJzcXJ0U2l6ZSIrcC5zaXplLFQsQSxiLHUpLHkuc3R5bGUubWluV2lkdGg9IjEuMDJlbSIsUD0xL3YpOihUPXMrYit4YmUsXz1zK2IsQT1NYXRoLmZsb29yKDFlMypzK2IpK3liZSx5PWtiZSgic3FydFRhbGwiLFQsQSxiLHUpLHkuc3R5bGUubWluV2lkdGg9IjAuNzQyZW0iLFA9MS4wNTYpLHkuaGVpZ2h0PV8seS5zdHlsZS5oZWlnaHQ9UmkoVCkse3NwYW46eSxhZHZhbmNlV2lkdGg6UCxydWxlV2lkdGg6KHUuZm9udE1ldHJpY3MoKS5zcXJ0UnVsZVRoaWNrbmVzcytiKSp2fX0sSXplPVsiKCIsIlxcbHBhcmVuIiwiKSIsIlxccnBhcmVuIiwiWyIsIlxcbGJyYWNrIiwiXSIsIlxccmJyYWNrIiwiXFx7IiwiXFxsYnJhY2UiLCJcXH0iLCJcXHJicmFjZSIsIlxcbGZsb29yIiwiXFxyZmxvb3IiLCLijIoiLCLijIsiLCJcXGxjZWlsIiwiXFxyY2VpbCIsIuKMiCIsIuKMiSIsIlxcc3VyZCJdLG5WdD1bIlxcdXBhcnJvdyIsIlxcZG93bmFycm93IiwiXFx1cGRvd25hcnJvdyIsIlxcVXBhcnJvdyIsIlxcRG93bmFycm93IiwiXFxVcGRvd25hcnJvdyIsInwiLCJcXHwiLCJcXHZlcnQiLCJcXFZlcnQiLCJcXGx2ZXJ0IiwiXFxydmVydCIsIlxcbFZlcnQiLCJcXHJWZXJ0IiwiXFxsZ3JvdXAiLCJcXHJncm91cCIsIuKfriIsIuKfryIsIlxcbG1vdXN0YWNoZSIsIlxccm1vdXN0YWNoZSIsIuKOsCIsIuKOsSJdLE96ZT1bIjwiLCI+IiwiXFxsYW5nbGUiLCJcXHJhbmdsZSIsIi8iLCJcXGJhY2tzbGFzaCIsIlxcbHQiLCJcXGd0Il0sZlI9WzAsMS4yLDEuOCwyLjQsM10sclZ0PWZ1bmN0aW9uKHMsdSxkLHAsdil7aWYocz09PSI8Inx8cz09PSJcXGx0Inx8cz09PSLin6giP3M9IlxcbGFuZ2xlIjoocz09PSI+Inx8cz09PSJcXGd0Inx8cz09PSLin6kiKSYmKHM9IlxccmFuZ2xlIiksWWEuY29udGFpbnMoSXplLHMpfHxZYS5jb250YWlucyhPemUscykpcmV0dXJuIE16ZShzLHUsITEsZCxwLHYpO2lmKFlhLmNvbnRhaW5zKG5WdCxzKSlyZXR1cm4gRHplKHMsZlJbdV0sITEsZCxwLHYpO3Rocm93IG5ldyBDaSgiSWxsZWdhbCBkZWxpbWl0ZXI6ICciK3MrIiciKX0saVZ0PVt7dHlwZToic21hbGwiLHN0eWxlOlRhLlNDUklQVFNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpUYS5TQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6VGEuVEVYVH0se3R5cGU6ImxhcmdlIixzaXplOjF9LHt0eXBlOiJsYXJnZSIsc2l6ZToyfSx7dHlwZToibGFyZ2UiLHNpemU6M30se3R5cGU6ImxhcmdlIixzaXplOjR9XSxzVnQ9W3t0eXBlOiJzbWFsbCIsc3R5bGU6VGEuU0NSSVBUU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOlRhLlNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpUYS5URVhUfSx7dHlwZToic3RhY2sifV0sTnplPVt7dHlwZToic21hbGwiLHN0eWxlOlRhLlNDUklQVFNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpUYS5TQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6VGEuVEVYVH0se3R5cGU6ImxhcmdlIixzaXplOjF9LHt0eXBlOiJsYXJnZSIsc2l6ZToyfSx7dHlwZToibGFyZ2UiLHNpemU6M30se3R5cGU6ImxhcmdlIixzaXplOjR9LHt0eXBlOiJzdGFjayJ9XSxhVnQ9ZnVuY3Rpb24ocyl7aWYocy50eXBlPT09InNtYWxsIilyZXR1cm4iTWFpbi1SZWd1bGFyIjtpZihzLnR5cGU9PT0ibGFyZ2UiKXJldHVybiJTaXplIitzLnNpemUrIi1SZWd1bGFyIjtpZihzLnR5cGU9PT0ic3RhY2siKXJldHVybiJTaXplNC1SZWd1bGFyIjt0aHJvdyBuZXcgRXJyb3IoIkFkZCBzdXBwb3J0IGZvciBkZWxpbSB0eXBlICciK3MudHlwZSsiJyBoZXJlLiIpfSxQemU9ZnVuY3Rpb24ocyx1LGQscCl7Zm9yKHZhciB2PU1hdGgubWluKDIsMy1wLnN0eWxlLnNpemUpLGI9djtiPGQubGVuZ3RoJiZkW2JdLnR5cGUhPT0ic3RhY2siO2IrKyl7dmFyIHk9aFIocyxhVnQoZFtiXSksIm1hdGgiKSxUPXkuaGVpZ2h0K3kuZGVwdGg7aWYoZFtiXS50eXBlPT09InNtYWxsIil7dmFyIF89cC5oYXZpbmdCYXNlU3R5bGUoZFtiXS5zdHlsZSk7VCo9Xy5zaXplTXVsdGlwbGllcn1pZihUPnUpcmV0dXJuIGRbYl19cmV0dXJuIGRbZC5sZW5ndGgtMV19LEJ6ZT1mdW5jdGlvbihzLHUsZCxwLHYsYil7cz09PSI8Inx8cz09PSJcXGx0Inx8cz09PSLin6giP3M9IlxcbGFuZ2xlIjoocz09PSI+Inx8cz09PSJcXGd0Inx8cz09PSLin6kiKSYmKHM9IlxccmFuZ2xlIik7dmFyIHk7WWEuY29udGFpbnMoT3plLHMpP3k9aVZ0OllhLmNvbnRhaW5zKEl6ZSxzKT95PU56ZTp5PXNWdDt2YXIgVD1QemUocyx1LHkscCk7cmV0dXJuIFQudHlwZT09PSJzbWFsbCI/UUh0KHMsVC5zdHlsZSxkLHAsdixiKTpULnR5cGU9PT0ibGFyZ2UiP016ZShzLFQuc2l6ZSxkLHAsdixiKTpEemUocyx1LGQscCx2LGIpfSxvVnQ9ZnVuY3Rpb24ocyx1LGQscCx2LGIpe3ZhciB5PXAuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0KnAuc2l6ZU11bHRpcGxpZXIsVD05MDEsXz01L3AuZm9udE1ldHJpY3MoKS5wdFBlckVtLEE9TWF0aC5tYXgodS15LGQreSksUD1NYXRoLm1heChBLzUwMCpULDIqQS1fKTtyZXR1cm4gQnplKHMsUCwhMCxwLHYsYil9LEI3PXtzcXJ0SW1hZ2U6dFZ0LHNpemVkRGVsaW06clZ0LHNpemVUb01heEhlaWdodDpmUixjdXN0b21TaXplZERlbGltOkJ6ZSxsZWZ0UmlnaHREZWxpbTpvVnR9LEZ6ZT17IlxcYmlnbCI6e21jbGFzczoibW9wZW4iLHNpemU6MX0sIlxcQmlnbCI6e21jbGFzczoibW9wZW4iLHNpemU6Mn0sIlxcYmlnZ2wiOnttY2xhc3M6Im1vcGVuIixzaXplOjN9LCJcXEJpZ2dsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZTo0fSwiXFxiaWdyIjp7bWNsYXNzOiJtY2xvc2UiLHNpemU6MX0sIlxcQmlnciI6e21jbGFzczoibWNsb3NlIixzaXplOjJ9LCJcXGJpZ2dyIjp7bWNsYXNzOiJtY2xvc2UiLHNpemU6M30sIlxcQmlnZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZTo0fSwiXFxiaWdtIjp7bWNsYXNzOiJtcmVsIixzaXplOjF9LCJcXEJpZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6Mn0sIlxcYmlnZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6M30sIlxcQmlnZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6NH0sIlxcYmlnIjp7bWNsYXNzOiJtb3JkIixzaXplOjF9LCJcXEJpZyI6e21jbGFzczoibW9yZCIsc2l6ZToyfSwiXFxiaWdnIjp7bWNsYXNzOiJtb3JkIixzaXplOjN9LCJcXEJpZ2ciOnttY2xhc3M6Im1vcmQiLHNpemU6NH19LGNWdD1bIigiLCJcXGxwYXJlbiIsIikiLCJcXHJwYXJlbiIsIlsiLCJcXGxicmFjayIsIl0iLCJcXHJicmFjayIsIlxceyIsIlxcbGJyYWNlIiwiXFx9IiwiXFxyYnJhY2UiLCJcXGxmbG9vciIsIlxccmZsb29yIiwi4oyKIiwi4oyLIiwiXFxsY2VpbCIsIlxccmNlaWwiLCLijIgiLCLijIkiLCI8IiwiPiIsIlxcbGFuZ2xlIiwi4p+oIiwiXFxyYW5nbGUiLCLin6kiLCJcXGx0IiwiXFxndCIsIlxcbHZlcnQiLCJcXHJ2ZXJ0IiwiXFxsVmVydCIsIlxcclZlcnQiLCJcXGxncm91cCIsIlxccmdyb3VwIiwi4p+uIiwi4p+vIiwiXFxsbW91c3RhY2hlIiwiXFxybW91c3RhY2hlIiwi4o6wIiwi4o6xIiwiLyIsIlxcYmFja3NsYXNoIiwifCIsIlxcdmVydCIsIlxcfCIsIlxcVmVydCIsIlxcdXBhcnJvdyIsIlxcVXBhcnJvdyIsIlxcZG93bmFycm93IiwiXFxEb3duYXJyb3ciLCJcXHVwZG93bmFycm93IiwiXFxVcGRvd25hcnJvdyIsIi4iXTtmdW5jdGlvbiBrUShpLHMpe3ZhciB1PXZRKGkpO2lmKHUmJllhLmNvbnRhaW5zKGNWdCx1LnRleHQpKXJldHVybiB1O3Rocm93IHU/bmV3IENpKCJJbnZhbGlkIGRlbGltaXRlciAnIit1LnRleHQrIicgYWZ0ZXIgJyIrcy5mdW5jTmFtZSsiJyIsaSk6bmV3IENpKCJJbnZhbGlkIGRlbGltaXRlciB0eXBlICciK2kudHlwZSsiJyIsaSl9Smkoe3R5cGU6ImRlbGltc2l6aW5nIixuYW1lczpbIlxcYmlnbCIsIlxcQmlnbCIsIlxcYmlnZ2wiLCJcXEJpZ2dsIiwiXFxiaWdyIiwiXFxCaWdyIiwiXFxiaWdnciIsIlxcQmlnZ3IiLCJcXGJpZ20iLCJcXEJpZ20iLCJcXGJpZ2dtIiwiXFxCaWdnbSIsIlxcYmlnIiwiXFxCaWciLCJcXGJpZ2ciLCJcXEJpZ2ciXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsicHJpbWl0aXZlIl19LGhhbmRsZXI6KGkscyk9Pnt2YXIgdT1rUShzWzBdLGkpO3JldHVybnt0eXBlOiJkZWxpbXNpemluZyIsbW9kZTppLnBhcnNlci5tb2RlLHNpemU6RnplW2kuZnVuY05hbWVdLnNpemUsbWNsYXNzOkZ6ZVtpLmZ1bmNOYW1lXS5tY2xhc3MsZGVsaW06dS50ZXh0fX0saHRtbEJ1aWxkZXI6KGkscyk9PmkuZGVsaW09PT0iLiI/em4ubWFrZVNwYW4oW2kubWNsYXNzXSk6Qjcuc2l6ZWREZWxpbShpLmRlbGltLGkuc2l6ZSxzLGkubW9kZSxbaS5tY2xhc3NdKSxtYXRobWxCdWlsZGVyOmk9Pnt2YXIgcz1bXTtpLmRlbGltIT09Ii4iJiZzLnB1c2goUnYoaS5kZWxpbSxpLm1vZGUpKTt2YXIgdT1uZXcgdmkuTWF0aE5vZGUoIm1vIixzKTtpLm1jbGFzcz09PSJtb3BlbiJ8fGkubWNsYXNzPT09Im1jbG9zZSI/dS5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpOnUuc2V0QXR0cmlidXRlKCJmZW5jZSIsImZhbHNlIiksdS5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBkPVJpKEI3LnNpemVUb01heEhlaWdodFtpLnNpemVdKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoIm1pbnNpemUiLGQpLHUuc2V0QXR0cmlidXRlKCJtYXhzaXplIixkKSx1fX0pO2Z1bmN0aW9uIFJ6ZShpKXtpZighaS5ib2R5KXRocm93IG5ldyBFcnJvcigiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLiIpfUppKHt0eXBlOiJsZWZ0cmlnaHQtcmlnaHQiLG5hbWVzOlsiXFxyaWdodCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOihpLHMpPT57dmFyIHU9aS5wYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcY3VycmVudEBjb2xvciIpO2lmKHUmJnR5cGVvZiB1IT0ic3RyaW5nIil0aHJvdyBuZXcgQ2koIlxcY3VycmVudEBjb2xvciBzZXQgdG8gbm9uLXN0cmluZyBpbiBcXHJpZ2h0Iik7cmV0dXJue3R5cGU6ImxlZnRyaWdodC1yaWdodCIsbW9kZTppLnBhcnNlci5tb2RlLGRlbGltOmtRKHNbMF0saSkudGV4dCxjb2xvcjp1fX19KSxKaSh7dHlwZToibGVmdHJpZ2h0IixuYW1lczpbIlxcbGVmdCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOihpLHMpPT57dmFyIHU9a1Eoc1swXSxpKSxkPWkucGFyc2VyOysrZC5sZWZ0cmlnaHREZXB0aDt2YXIgcD1kLnBhcnNlRXhwcmVzc2lvbighMSk7LS1kLmxlZnRyaWdodERlcHRoLGQuZXhwZWN0KCJcXHJpZ2h0IiwhMSk7dmFyIHY9WW8oZC5wYXJzZUZ1bmN0aW9uKCksImxlZnRyaWdodC1yaWdodCIpO3JldHVybnt0eXBlOiJsZWZ0cmlnaHQiLG1vZGU6ZC5tb2RlLGJvZHk6cCxsZWZ0OnUudGV4dCxyaWdodDp2LmRlbGltLHJpZ2h0Q29sb3I6di5jb2xvcn19LGh0bWxCdWlsZGVyOihpLHMpPT57UnplKGkpO2Zvcih2YXIgdT1kMShpLmJvZHkscywhMCxbIm1vcGVuIiwibWNsb3NlIl0pLGQ9MCxwPTAsdj0hMSxiPTA7Yjx1Lmxlbmd0aDtiKyspdVtiXS5pc01pZGRsZT92PSEwOihkPU1hdGgubWF4KHVbYl0uaGVpZ2h0LGQpLHA9TWF0aC5tYXgodVtiXS5kZXB0aCxwKSk7ZCo9cy5zaXplTXVsdGlwbGllcixwKj1zLnNpemVNdWx0aXBsaWVyO3ZhciB5O2lmKGkubGVmdD09PSIuIj95PXVSKHMsWyJtb3BlbiJdKTp5PUI3LmxlZnRSaWdodERlbGltKGkubGVmdCxkLHAscyxpLm1vZGUsWyJtb3BlbiJdKSx1LnVuc2hpZnQoeSksdilmb3IodmFyIFQ9MTtUPHUubGVuZ3RoO1QrKyl7dmFyIF89dVtUXSxBPV8uaXNNaWRkbGU7QSYmKHVbVF09QjcubGVmdFJpZ2h0RGVsaW0oQS5kZWxpbSxkLHAsQS5vcHRpb25zLGkubW9kZSxbXSkpfXZhciBQO2lmKGkucmlnaHQ9PT0iLiIpUD11UihzLFsibWNsb3NlIl0pO2Vsc2V7dmFyIFI9aS5yaWdodENvbG9yP3Mud2l0aENvbG9yKGkucmlnaHRDb2xvcik6cztQPUI3LmxlZnRSaWdodERlbGltKGkucmlnaHQsZCxwLFIsaS5tb2RlLFsibWNsb3NlIl0pfXJldHVybiB1LnB1c2goUCksem4ubWFrZVNwYW4oWyJtaW5uZXIiXSx1LHMpfSxtYXRobWxCdWlsZGVyOihpLHMpPT57UnplKGkpO3ZhciB1PWoyKGkuYm9keSxzKTtpZihpLmxlZnQhPT0iLiIpe3ZhciBkPW5ldyB2aS5NYXRoTm9kZSgibW8iLFtSdihpLmxlZnQsaS5tb2RlKV0pO2Quc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSx1LnVuc2hpZnQoZCl9aWYoaS5yaWdodCE9PSIuIil7dmFyIHA9bmV3IHZpLk1hdGhOb2RlKCJtbyIsW1J2KGkucmlnaHQsaS5tb2RlKV0pO3Auc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxpLnJpZ2h0Q29sb3ImJnAuc2V0QXR0cmlidXRlKCJtYXRoY29sb3IiLGkucmlnaHRDb2xvciksdS5wdXNoKHApfXJldHVybiBoYmUodSl9fSksSmkoe3R5cGU6Im1pZGRsZSIsbmFtZXM6WyJcXG1pZGRsZSJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOihpLHMpPT57dmFyIHU9a1Eoc1swXSxpKTtpZighaS5wYXJzZXIubGVmdHJpZ2h0RGVwdGgpdGhyb3cgbmV3IENpKCJcXG1pZGRsZSB3aXRob3V0IHByZWNlZGluZyBcXGxlZnQiLHUpO3JldHVybnt0eXBlOiJtaWRkbGUiLG1vZGU6aS5wYXJzZXIubW9kZSxkZWxpbTp1LnRleHR9fSxodG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1O2lmKGkuZGVsaW09PT0iLiIpdT11UihzLFtdKTtlbHNle3U9Qjcuc2l6ZWREZWxpbShpLmRlbGltLDEscyxpLm1vZGUsW10pO3ZhciBkPXtkZWxpbTppLmRlbGltLG9wdGlvbnM6c307dS5pc01pZGRsZT1kfXJldHVybiB1fSxtYXRobWxCdWlsZGVyOihpLHMpPT57dmFyIHU9aS5kZWxpbT09PSJcXHZlcnQifHxpLmRlbGltPT09InwiP1J2KCJ8IiwidGV4dCIpOlJ2KGkuZGVsaW0saS5tb2RlKSxkPW5ldyB2aS5NYXRoTm9kZSgibW8iLFt1XSk7cmV0dXJuIGQuc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxkLnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiMC4wNWVtIiksZC5zZXRBdHRyaWJ1dGUoInJzcGFjZSIsIjAuMDVlbSIpLGR9fSk7dmFyIEViZT0oaSxzKT0+e3ZhciB1PXpuLndyYXBGcmFnbWVudCh1dShpLmJvZHkscykscyksZD1pLmxhYmVsLnNsaWNlKDEpLHA9cy5zaXplTXVsdGlwbGllcix2LGI9MCx5PVlhLmlzQ2hhcmFjdGVyQm94KGkuYm9keSk7aWYoZD09PSJzb3V0Iil2PXpuLm1ha2VTcGFuKFsic3RyZXRjaHkiLCJzb3V0Il0pLHYuaGVpZ2h0PXMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcy9wLGI9LS41KnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O2Vsc2UgaWYoZD09PSJwaGFzZSIpe3ZhciBUPVVoKHtudW1iZXI6LjYsdW5pdDoicHQifSxzKSxfPVVoKHtudW1iZXI6LjM1LHVuaXQ6ImV4In0scyksQT1zLmhhdmluZ0Jhc2VTaXppbmcoKTtwPXAvQS5zaXplTXVsdGlwbGllcjt2YXIgUD11LmhlaWdodCt1LmRlcHRoK1QrXzt1LnN0eWxlLnBhZGRpbmdMZWZ0PVJpKFAvMitUKTt2YXIgUj1NYXRoLmZsb29yKDFlMypQKnApLEY9dEh0KFIpLGo9bmV3IEQ3KFtuZXcgQzkoInBoYXNlIixGKV0se3dpZHRoOiI0MDBlbSIsaGVpZ2h0OlJpKFIvMWUzKSx2aWV3Qm94OiIwIDAgNDAwMDAwICIrUixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiBzbGljZSJ9KTt2PXpuLm1ha2VTdmdTcGFuKFsiaGlkZS10YWlsIl0sW2pdLHMpLHYuc3R5bGUuaGVpZ2h0PVJpKFApLGI9dS5kZXB0aCtUK199ZWxzZXsvY2FuY2VsLy50ZXN0KGQpP3l8fHUuY2xhc3Nlcy5wdXNoKCJjYW5jZWwtcGFkIik6ZD09PSJhbmdsIj91LmNsYXNzZXMucHVzaCgiYW5nbHBhZCIpOnUuY2xhc3Nlcy5wdXNoKCJib3hwYWQiKTt2YXIgSz0wLGVlPTAsaWU9MDsvYm94Ly50ZXN0KGQpPyhpZT1NYXRoLm1heChzLmZvbnRNZXRyaWNzKCkuZmJveHJ1bGUscy5taW5SdWxlVGhpY2tuZXNzKSxLPXMuZm9udE1ldHJpY3MoKS5mYm94c2VwKyhkPT09ImNvbG9yYm94Ij8wOmllKSxlZT1LKTpkPT09ImFuZ2wiPyhpZT1NYXRoLm1heChzLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3Mscy5taW5SdWxlVGhpY2tuZXNzKSxLPTQqaWUsZWU9TWF0aC5tYXgoMCwuMjUtdS5kZXB0aCkpOihLPXk/LjI6MCxlZT1LKSx2PVA3LmVuY2xvc2VTcGFuKHUsZCxLLGVlLHMpLC9mYm94fGJveGVkfGZjb2xvcmJveC8udGVzdChkKT8odi5zdHlsZS5ib3JkZXJTdHlsZT0ic29saWQiLHYuc3R5bGUuYm9yZGVyV2lkdGg9UmkoaWUpKTpkPT09ImFuZ2wiJiZpZSE9PS4wNDkmJih2LnN0eWxlLmJvcmRlclRvcFdpZHRoPVJpKGllKSx2LnN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9UmkoaWUpKSxiPXUuZGVwdGgrZWUsaS5iYWNrZ3JvdW5kQ29sb3ImJih2LnN0eWxlLmJhY2tncm91bmRDb2xvcj1pLmJhY2tncm91bmRDb2xvcixpLmJvcmRlckNvbG9yJiYodi5zdHlsZS5ib3JkZXJDb2xvcj1pLmJvcmRlckNvbG9yKSl9dmFyIG9lO2lmKGkuYmFja2dyb3VuZENvbG9yKW9lPXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp2LHNoaWZ0OmJ9LHt0eXBlOiJlbGVtIixlbGVtOnUsc2hpZnQ6MH1dfSxzKTtlbHNle3ZhciBwZT0vY2FuY2VsfHBoYXNlLy50ZXN0KGQpP1sic3ZnLWFsaWduIl06W107b2U9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnUsc2hpZnQ6MH0se3R5cGU6ImVsZW0iLGVsZW06dixzaGlmdDpiLHdyYXBwZXJDbGFzc2VzOnBlfV19LHMpfXJldHVybi9jYW5jZWwvLnRlc3QoZCkmJihvZS5oZWlnaHQ9dS5oZWlnaHQsb2UuZGVwdGg9dS5kZXB0aCksL2NhbmNlbC8udGVzdChkKSYmIXk/em4ubWFrZVNwYW4oWyJtb3JkIiwiY2FuY2VsLWxhcCJdLFtvZV0scyk6em4ubWFrZVNwYW4oWyJtb3JkIl0sW29lXSxzKX0sVGJlPShpLHMpPT57dmFyIHU9MCxkPW5ldyB2aS5NYXRoTm9kZShpLmxhYmVsLmluZGV4T2YoImNvbG9yYm94Iik+LTE/Im1wYWRkZWQiOiJtZW5jbG9zZSIsW0xsKGkuYm9keSxzKV0pO3N3aXRjaChpLmxhYmVsKXtjYXNlIlxcY2FuY2VsIjpkLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJ1cGRpYWdvbmFsc3RyaWtlIik7YnJlYWs7Y2FzZSJcXGJjYW5jZWwiOmQuc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsImRvd25kaWFnb25hbHN0cmlrZSIpO2JyZWFrO2Nhc2UiXFxwaGFzZSI6ZC5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwicGhhc29yYW5nbGUiKTticmVhaztjYXNlIlxcc291dCI6ZC5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwiaG9yaXpvbnRhbHN0cmlrZSIpO2JyZWFrO2Nhc2UiXFxmYm94IjpkLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJib3giKTticmVhaztjYXNlIlxcYW5nbCI6ZC5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwiYWN0dWFyaWFsIik7YnJlYWs7Y2FzZSJcXGZjb2xvcmJveCI6Y2FzZSJcXGNvbG9yYm94IjppZih1PXMuZm9udE1ldHJpY3MoKS5mYm94c2VwKnMuZm9udE1ldHJpY3MoKS5wdFBlckVtLGQuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIisiKzIqdSsicHQiKSxkLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiKyIrMip1KyJwdCIpLGQuc2V0QXR0cmlidXRlKCJsc3BhY2UiLHUrInB0IiksZC5zZXRBdHRyaWJ1dGUoInZvZmZzZXQiLHUrInB0IiksaS5sYWJlbD09PSJcXGZjb2xvcmJveCIpe3ZhciBwPU1hdGgubWF4KHMuZm9udE1ldHJpY3MoKS5mYm94cnVsZSxzLm1pblJ1bGVUaGlja25lc3MpO2Quc2V0QXR0cmlidXRlKCJzdHlsZSIsImJvcmRlcjogIitwKyJlbSBzb2xpZCAiK1N0cmluZyhpLmJvcmRlckNvbG9yKSl9YnJlYWs7Y2FzZSJcXHhjYW5jZWwiOmQuc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsInVwZGlhZ29uYWxzdHJpa2UgZG93bmRpYWdvbmFsc3RyaWtlIik7YnJlYWt9cmV0dXJuIGkuYmFja2dyb3VuZENvbG9yJiZkLnNldEF0dHJpYnV0ZSgibWF0aGJhY2tncm91bmQiLGkuYmFja2dyb3VuZENvbG9yKSxkfTtKaSh7dHlwZToiZW5jbG9zZSIsbmFtZXM6WyJcXGNvbG9yYm94Il0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJ0ZXh0Il19LGhhbmRsZXIoaSxzLHUpe3ZhcntwYXJzZXI6ZCxmdW5jTmFtZTpwfT1pLHY9WW8oc1swXSwiY29sb3ItdG9rZW4iKS5jb2xvcixiPXNbMV07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6ZC5tb2RlLGxhYmVsOnAsYmFja2dyb3VuZENvbG9yOnYsYm9keTpifX0saHRtbEJ1aWxkZXI6RWJlLG1hdGhtbEJ1aWxkZXI6VGJlfSksSmkoe3R5cGU6ImVuY2xvc2UiLG5hbWVzOlsiXFxmY29sb3Jib3giXSxwcm9wczp7bnVtQXJnczozLGFsbG93ZWRJblRleHQ6ITAsYXJnVHlwZXM6WyJjb2xvciIsImNvbG9yIiwidGV4dCJdfSxoYW5kbGVyKGkscyx1KXt2YXJ7cGFyc2VyOmQsZnVuY05hbWU6cH09aSx2PVlvKHNbMF0sImNvbG9yLXRva2VuIikuY29sb3IsYj1ZbyhzWzFdLCJjb2xvci10b2tlbiIpLmNvbG9yLHk9c1syXTtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTpkLm1vZGUsbGFiZWw6cCxiYWNrZ3JvdW5kQ29sb3I6Yixib3JkZXJDb2xvcjp2LGJvZHk6eX19LGh0bWxCdWlsZGVyOkViZSxtYXRobWxCdWlsZGVyOlRiZX0pLEppKHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcZmJveCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJoYm94Il0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTp1Lm1vZGUsbGFiZWw6IlxcZmJveCIsYm9keTpzWzBdfX19KSxKaSh7dHlwZToiZW5jbG9zZSIsbmFtZXM6WyJcXGNhbmNlbCIsIlxcYmNhbmNlbCIsIlxceGNhbmNlbCIsIlxcc291dCIsIlxccGhhc2UiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzBdO3JldHVybnt0eXBlOiJlbmNsb3NlIixtb2RlOnUubW9kZSxsYWJlbDpkLGJvZHk6cH19LGh0bWxCdWlsZGVyOkViZSxtYXRobWxCdWlsZGVyOlRiZX0pLEppKHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcYW5nbCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJoYm94Il0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTp1Lm1vZGUsbGFiZWw6IlxcYW5nbCIsYm9keTpzWzBdfX19KTt2YXIganplPXt9O2Z1bmN0aW9uIFc0KGkpe2Zvcih2YXJ7dHlwZTpzLG5hbWVzOnUscHJvcHM6ZCxoYW5kbGVyOnAsaHRtbEJ1aWxkZXI6dixtYXRobWxCdWlsZGVyOmJ9PWkseT17dHlwZTpzLG51bUFyZ3M6ZC5udW1BcmdzfHwwLGFsbG93ZWRJblRleHQ6ITEsbnVtT3B0aW9uYWxBcmdzOjAsaGFuZGxlcjpwfSxUPTA7VDx1Lmxlbmd0aDsrK1QpanplW3VbVF1dPXk7diYmKGdRW3NdPXYpLGImJihwUVtzXT1iKX12YXIgJHplPXt9O2Z1bmN0aW9uIGV0KGkscyl7JHplW2ldPXN9ZnVuY3Rpb24genplKGkpe3ZhciBzPVtdO2kuY29uc3VtZVNwYWNlcygpO3ZhciB1PWkuZmV0Y2goKS50ZXh0O2Zvcih1PT09IlxccmVsYXgiJiYoaS5jb25zdW1lKCksaS5jb25zdW1lU3BhY2VzKCksdT1pLmZldGNoKCkudGV4dCk7dT09PSJcXGhsaW5lInx8dT09PSJcXGhkYXNobGluZSI7KWkuY29uc3VtZSgpLHMucHVzaCh1PT09IlxcaGRhc2hsaW5lIiksaS5jb25zdW1lU3BhY2VzKCksdT1pLmZldGNoKCkudGV4dDtyZXR1cm4gc312YXIgRVE9aT0+e3ZhciBzPWkucGFyc2VyLnNldHRpbmdzO2lmKCFzLmRpc3BsYXlNb2RlKXRocm93IG5ldyBDaSgieyIraS5lbnZOYW1lKyJ9IGNhbiBiZSB1c2VkIG9ubHkgaW4gZGlzcGxheSBtb2RlLiIpfTtmdW5jdGlvbiBDYmUoaSl7aWYoaS5pbmRleE9mKCJlZCIpPT09LTEpcmV0dXJuIGkuaW5kZXhPZigiKiIpPT09LTF9ZnVuY3Rpb24gQTkoaSxzLHUpe3Zhcntoc2tpcEJlZm9yZUFuZEFmdGVyOmQsYWRkSm90OnAsY29sczp2LGFycmF5c3RyZXRjaDpiLGNvbFNlcGFyYXRpb25UeXBlOnksYXV0b1RhZzpULHNpbmdsZVJvdzpfLGVtcHR5U2luZ2xlUm93OkEsbWF4TnVtQ29sczpQLGxlcW5vOlJ9PXM7aWYoaS5ndWxsZXQuYmVnaW5Hcm91cCgpLF98fGkuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY3IiLCJcXFxcXFxyZWxheCIpLCFiKXt2YXIgRj1pLmd1bGxldC5leHBhbmRNYWNyb0FzVGV4dCgiXFxhcnJheXN0cmV0Y2giKTtpZihGPT1udWxsKWI9MTtlbHNlIGlmKGI9cGFyc2VGbG9hdChGKSwhYnx8YjwwKXRocm93IG5ldyBDaSgiSW52YWxpZCBcXGFycmF5c3RyZXRjaDogIitGKX1pLmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIGo9W10sSz1bal0sZWU9W10saWU9W10sb2U9VCE9bnVsbD9bXTp2b2lkIDA7ZnVuY3Rpb24gcGUoKXtUJiZpLmd1bGxldC5tYWNyb3Muc2V0KCJcXEBlcW5zdyIsIjEiLCEwKX1mdW5jdGlvbiBiZSgpe29lJiYoaS5ndWxsZXQubWFjcm9zLmdldCgiXFxkZkB0YWciKT8ob2UucHVzaChpLnN1YnBhcnNlKFtuZXcgVTQoIlxcZGZAdGFnIildKSksaS5ndWxsZXQubWFjcm9zLnNldCgiXFxkZkB0YWciLHZvaWQgMCwhMCkpOm9lLnB1c2goISFUJiZpLmd1bGxldC5tYWNyb3MuZ2V0KCJcXEBlcW5zdyIpPT09IjEiKSl9Zm9yKHBlKCksaWUucHVzaCh6emUoaSkpOzspe3ZhciBhZT1pLnBhcnNlRXhwcmVzc2lvbighMSxfPyJcXGVuZCI6IlxcXFwiKTtpLmd1bGxldC5lbmRHcm91cCgpLGkuZ3VsbGV0LmJlZ2luR3JvdXAoKSxhZT17dHlwZToib3JkZ3JvdXAiLG1vZGU6aS5tb2RlLGJvZHk6YWV9LHUmJihhZT17dHlwZToic3R5bGluZyIsbW9kZTppLm1vZGUsc3R5bGU6dSxib2R5OlthZV19KSxqLnB1c2goYWUpO3ZhciBuZT1pLmZldGNoKCkudGV4dDtpZihuZT09PSImIil7aWYoUCYmai5sZW5ndGg9PT1QKXtpZihffHx5KXRocm93IG5ldyBDaSgiVG9vIG1hbnkgdGFiIGNoYXJhY3RlcnM6ICYiLGkubmV4dFRva2VuKTtpLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidGV4dEVudiIsIlRvbyBmZXcgY29sdW1ucyBzcGVjaWZpZWQgaW4gdGhlIHthcnJheX0gY29sdW1uIGFyZ3VtZW50LiIpfWkuY29uc3VtZSgpfWVsc2UgaWYobmU9PT0iXFxlbmQiKXtiZSgpLGoubGVuZ3RoPT09MSYmYWUudHlwZT09PSJzdHlsaW5nIiYmYWUuYm9keVswXS5ib2R5Lmxlbmd0aD09PTAmJihLLmxlbmd0aD4xfHwhQSkmJksucG9wKCksaWUubGVuZ3RoPEsubGVuZ3RoKzEmJmllLnB1c2goW10pO2JyZWFrfWVsc2UgaWYobmU9PT0iXFxcXCIpe2kuY29uc3VtZSgpO3ZhciBzZT12b2lkIDA7aS5ndWxsZXQuZnV0dXJlKCkudGV4dCE9PSIgIiYmKHNlPWkucGFyc2VTaXplR3JvdXAoITApKSxlZS5wdXNoKHNlP3NlLnZhbHVlOm51bGwpLGJlKCksaWUucHVzaCh6emUoaSkpLGo9W10sSy5wdXNoKGopLHBlKCl9ZWxzZSB0aHJvdyBuZXcgQ2koIkV4cGVjdGVkICYgb3IgXFxcXCBvciBcXGNyIG9yIFxcZW5kIixpLm5leHRUb2tlbil9cmV0dXJuIGkuZ3VsbGV0LmVuZEdyb3VwKCksaS5ndWxsZXQuZW5kR3JvdXAoKSx7dHlwZToiYXJyYXkiLG1vZGU6aS5tb2RlLGFkZEpvdDpwLGFycmF5c3RyZXRjaDpiLGJvZHk6Syxjb2xzOnYscm93R2FwczplZSxoc2tpcEJlZm9yZUFuZEFmdGVyOmQsaExpbmVzQmVmb3JlUm93OmllLGNvbFNlcGFyYXRpb25UeXBlOnksdGFnczpvZSxsZXFubzpSfX1mdW5jdGlvbiBTYmUoaSl7cmV0dXJuIGkuc2xpY2UoMCwxKT09PSJkIj8iZGlzcGxheSI6InRleHQifXZhciBZND1mdW5jdGlvbihzLHUpe3ZhciBkLHAsdj1zLmJvZHkubGVuZ3RoLGI9cy5oTGluZXNCZWZvcmVSb3cseT0wLFQ9bmV3IEFycmF5KHYpLF89W10sQT1NYXRoLm1heCh1LmZvbnRNZXRyaWNzKCkuYXJyYXlSdWxlV2lkdGgsdS5taW5SdWxlVGhpY2tuZXNzKSxQPTEvdS5mb250TWV0cmljcygpLnB0UGVyRW0sUj01KlA7aWYocy5jb2xTZXBhcmF0aW9uVHlwZSYmcy5jb2xTZXBhcmF0aW9uVHlwZT09PSJzbWFsbCIpe3ZhciBGPXUuaGF2aW5nU3R5bGUoVGEuU0NSSVBUKS5zaXplTXVsdGlwbGllcjtSPS4yNzc4KihGL3Uuc2l6ZU11bHRpcGxpZXIpfXZhciBqPXMuY29sU2VwYXJhdGlvblR5cGU9PT0iQ0QiP1VoKHtudW1iZXI6Myx1bml0OiJleCJ9LHUpOjEyKlAsSz0zKlAsZWU9cy5hcnJheXN0cmV0Y2gqaixpZT0uNyplZSxvZT0uMyplZSxwZT0wO2Z1bmN0aW9uIGJlKGppKXtmb3IodmFyIHhpPTA7eGk8amkubGVuZ3RoOysreGkpeGk+MCYmKHBlKz0uMjUpLF8ucHVzaCh7cG9zOnBlLGlzRGFzaGVkOmppW3hpXX0pfWZvcihiZShiWzBdKSxkPTA7ZDxzLmJvZHkubGVuZ3RoOysrZCl7dmFyIGFlPXMuYm9keVtkXSxuZT1pZSxzZT1vZTt5PGFlLmxlbmd0aCYmKHk9YWUubGVuZ3RoKTt2YXIgZGU9bmV3IEFycmF5KGFlLmxlbmd0aCk7Zm9yKHA9MDtwPGFlLmxlbmd0aDsrK3Ape3ZhciBYPXV1KGFlW3BdLHUpO3NlPFguZGVwdGgmJihzZT1YLmRlcHRoKSxuZTxYLmhlaWdodCYmKG5lPVguaGVpZ2h0KSxkZVtwXT1YfXZhciBnZT1zLnJvd0dhcHNbZF0sVz0wO2dlJiYoVz1VaChnZSx1KSxXPjAmJihXKz1vZSxzZTxXJiYoc2U9VyksVz0wKSkscy5hZGRKb3QmJihzZSs9SyksZGUuaGVpZ2h0PW5lLGRlLmRlcHRoPXNlLHBlKz1uZSxkZS5wb3M9cGUscGUrPXNlK1csVFtkXT1kZSxiZShiW2QrMV0pfXZhciB4ZT1wZS8yK3UuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LFU9cy5jb2xzfHxbXSxGZT1bXSxQZSxqZSxJZT1bXTtpZihzLnRhZ3MmJnMudGFncy5zb21lKGppPT5qaSkpZm9yKGQ9MDtkPHY7KytkKXt2YXIgU2U9VFtkXSxDZT1TZS5wb3MteGUsa2U9cy50YWdzW2RdLEtlPXZvaWQgMDtrZT09PSEwP0tlPXpuLm1ha2VTcGFuKFsiZXFuLW51bSJdLFtdLHUpOmtlPT09ITE/S2U9em4ubWFrZVNwYW4oW10sW10sdSk6S2U9em4ubWFrZVNwYW4oW10sZDEoa2UsdSwhMCksdSksS2UuZGVwdGg9U2UuZGVwdGgsS2UuaGVpZ2h0PVNlLmhlaWdodCxJZS5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOktlLHNoaWZ0OkNlfSl9Zm9yKHA9MCxqZT0wO3A8eXx8amU8VS5sZW5ndGg7KytwLCsramUpe2Zvcih2YXIgRnQ9VVtqZV18fHt9LE5lPSEwO0Z0LnR5cGU9PT0ic2VwYXJhdG9yIjspe2lmKE5lfHwoUGU9em4ubWFrZVNwYW4oWyJhcnJheWNvbHNlcCJdLFtdKSxQZS5zdHlsZS53aWR0aD1SaSh1LmZvbnRNZXRyaWNzKCkuZG91YmxlUnVsZVNlcCksRmUucHVzaChQZSkpLEZ0LnNlcGFyYXRvcj09PSJ8Inx8RnQuc2VwYXJhdG9yPT09IjoiKXt2YXIgZ249RnQuc2VwYXJhdG9yPT09InwiPyJzb2xpZCI6ImRhc2hlZCIsX3Q9em4ubWFrZVNwYW4oWyJ2ZXJ0aWNhbC1zZXBhcmF0b3IiXSxbXSx1KTtfdC5zdHlsZS5oZWlnaHQ9UmkocGUpLF90LnN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9UmkoQSksX3Quc3R5bGUuYm9yZGVyUmlnaHRTdHlsZT1nbixfdC5zdHlsZS5tYXJnaW49IjAgIitSaSgtQS8yKTt2YXIgRXQ9cGUteGU7RXQmJihfdC5zdHlsZS52ZXJ0aWNhbEFsaWduPVJpKC1FdCkpLEZlLnB1c2goX3QpfWVsc2UgdGhyb3cgbmV3IENpKCJJbnZhbGlkIHNlcGFyYXRvciB0eXBlOiAiK0Z0LnNlcGFyYXRvcik7amUrKyxGdD1VW2plXXx8e30sTmU9ITF9aWYoIShwPj15KSl7dmFyIEd0PXZvaWQgMDsocD4wfHxzLmhza2lwQmVmb3JlQW5kQWZ0ZXIpJiYoR3Q9WWEuZGVmbHQoRnQucHJlZ2FwLFIpLEd0IT09MCYmKFBlPXpuLm1ha2VTcGFuKFsiYXJyYXljb2xzZXAiXSxbXSksUGUuc3R5bGUud2lkdGg9UmkoR3QpLEZlLnB1c2goUGUpKSk7dmFyIGxuPVtdO2ZvcihkPTA7ZDx2OysrZCl7dmFyIHh0PVRbZF0sUHQ9eHRbcF07aWYoUHQpe3ZhciBRZT14dC5wb3MteGU7UHQuZGVwdGg9eHQuZGVwdGgsUHQuaGVpZ2h0PXh0LmhlaWdodCxsbi5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOlB0LHNoaWZ0OlFlfSl9fWxuPXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOmxufSx1KSxsbj16bi5tYWtlU3BhbihbImNvbC1hbGlnbi0iKyhGdC5hbGlnbnx8ImMiKV0sW2xuXSksRmUucHVzaChsbiksKHA8eS0xfHxzLmhza2lwQmVmb3JlQW5kQWZ0ZXIpJiYoR3Q9WWEuZGVmbHQoRnQucG9zdGdhcCxSKSxHdCE9PTAmJihQZT16bi5tYWtlU3BhbihbImFycmF5Y29sc2VwIl0sW10pLFBlLnN0eWxlLndpZHRoPVJpKEd0KSxGZS5wdXNoKFBlKSkpfX1pZihUPXpuLm1ha2VTcGFuKFsibXRhYmxlIl0sRmUpLF8ubGVuZ3RoPjApe2Zvcih2YXIgRHQ9em4ubWFrZUxpbmVTcGFuKCJobGluZSIsdSxBKSxrdD16bi5tYWtlTGluZVNwYW4oImhkYXNobGluZSIsdSxBKSxPbj1be3R5cGU6ImVsZW0iLGVsZW06VCxzaGlmdDowfV07Xy5sZW5ndGg+MDspe3ZhciBodD1fLnBvcCgpLHpyPWh0LnBvcy14ZTtodC5pc0Rhc2hlZD9Pbi5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOmt0LHNoaWZ0OnpyfSk6T24ucHVzaCh7dHlwZToiZWxlbSIsZWxlbTpEdCxzaGlmdDp6cn0pfVQ9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46T259LHUpfWlmKEllLmxlbmd0aD09PTApcmV0dXJuIHpuLm1ha2VTcGFuKFsibW9yZCJdLFtUXSx1KTt2YXIgeXQ9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46SWV9LHUpO3JldHVybiB5dD16bi5tYWtlU3BhbihbInRhZyJdLFt5dF0sdSksem4ubWFrZUZyYWdtZW50KFtULHl0XSl9LHVWdD17YzoiY2VudGVyICIsbDoibGVmdCAiLHI6InJpZ2h0ICJ9LFg0PWZ1bmN0aW9uKHMsdSl7Zm9yKHZhciBkPVtdLHA9bmV3IHZpLk1hdGhOb2RlKCJtdGQiLFtdLFsibXRyLWdsdWUiXSksdj1uZXcgdmkuTWF0aE5vZGUoIm10ZCIsW10sWyJtbWwtZXFuLW51bSJdKSxiPTA7YjxzLmJvZHkubGVuZ3RoO2IrKyl7Zm9yKHZhciB5PXMuYm9keVtiXSxUPVtdLF89MDtfPHkubGVuZ3RoO18rKylULnB1c2gobmV3IHZpLk1hdGhOb2RlKCJtdGQiLFtMbCh5W19dLHUpXSkpO3MudGFncyYmcy50YWdzW2JdJiYoVC51bnNoaWZ0KHApLFQucHVzaChwKSxzLmxlcW5vP1QudW5zaGlmdCh2KTpULnB1c2godikpLGQucHVzaChuZXcgdmkuTWF0aE5vZGUoIm10ciIsVCkpfXZhciBBPW5ldyB2aS5NYXRoTm9kZSgibXRhYmxlIixkKSxQPXMuYXJyYXlzdHJldGNoPT09LjU/LjE6LjE2K3MuYXJyYXlzdHJldGNoLTErKHMuYWRkSm90Py4wOTowKTtBLnNldEF0dHJpYnV0ZSgicm93c3BhY2luZyIsUmkoUCkpO3ZhciBSPSIiLEY9IiI7aWYocy5jb2xzJiZzLmNvbHMubGVuZ3RoPjApe3ZhciBqPXMuY29scyxLPSIiLGVlPSExLGllPTAsb2U9ai5sZW5ndGg7alswXS50eXBlPT09InNlcGFyYXRvciImJihSKz0idG9wICIsaWU9MSksaltqLmxlbmd0aC0xXS50eXBlPT09InNlcGFyYXRvciImJihSKz0iYm90dG9tICIsb2UtPTEpO2Zvcih2YXIgcGU9aWU7cGU8b2U7cGUrKylqW3BlXS50eXBlPT09ImFsaWduIj8oRis9dVZ0W2pbcGVdLmFsaWduXSxlZSYmKEsrPSJub25lICIpLGVlPSEwKTpqW3BlXS50eXBlPT09InNlcGFyYXRvciImJmVlJiYoSys9altwZV0uc2VwYXJhdG9yPT09InwiPyJzb2xpZCAiOiJkYXNoZWQgIixlZT0hMSk7QS5zZXRBdHRyaWJ1dGUoImNvbHVtbmFsaWduIixGLnRyaW0oKSksL1tzZF0vLnRlc3QoSykmJkEuc2V0QXR0cmlidXRlKCJjb2x1bW5saW5lcyIsSy50cmltKCkpfWlmKHMuY29sU2VwYXJhdGlvblR5cGU9PT0iYWxpZ24iKXtmb3IodmFyIGJlPXMuY29sc3x8W10sYWU9IiIsbmU9MTtuZTxiZS5sZW5ndGg7bmUrKylhZSs9bmUlMj8iMGVtICI6IjFlbSAiO0Euc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIixhZS50cmltKCkpfWVsc2Ugcy5jb2xTZXBhcmF0aW9uVHlwZT09PSJhbGlnbmF0Inx8cy5jb2xTZXBhcmF0aW9uVHlwZT09PSJnYXRoZXIiP0Euc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIiwiMGVtIik6cy5jb2xTZXBhcmF0aW9uVHlwZT09PSJzbWFsbCI/QS5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLCIwLjI3NzhlbSIpOnMuY29sU2VwYXJhdGlvblR5cGU9PT0iQ0QiP0Euc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIiwiMC41ZW0iKTpBLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjFlbSIpO3ZhciBzZT0iIixkZT1zLmhMaW5lc0JlZm9yZVJvdztSKz1kZVswXS5sZW5ndGg+MD8ibGVmdCAiOiIiLFIrPWRlW2RlLmxlbmd0aC0xXS5sZW5ndGg+MD8icmlnaHQgIjoiIjtmb3IodmFyIFg9MTtYPGRlLmxlbmd0aC0xO1grKylzZSs9ZGVbWF0ubGVuZ3RoPT09MD8ibm9uZSAiOmRlW1hdWzBdPyJkYXNoZWQgIjoic29saWQgIjtyZXR1cm4vW3NkXS8udGVzdChzZSkmJkEuc2V0QXR0cmlidXRlKCJyb3dsaW5lcyIsc2UudHJpbSgpKSxSIT09IiImJihBPW5ldyB2aS5NYXRoTm9kZSgibWVuY2xvc2UiLFtBXSksQS5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIixSLnRyaW0oKSkpLHMuYXJyYXlzdHJldGNoJiZzLmFycmF5c3RyZXRjaDwxJiYoQT1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIsW0FdKSxBLnNldEF0dHJpYnV0ZSgic2NyaXB0bGV2ZWwiLCIxIikpLEF9LHF6ZT1mdW5jdGlvbihzLHUpe3MuZW52TmFtZS5pbmRleE9mKCJlZCIpPT09LTEmJkVRKHMpO3ZhciBkPVtdLHA9cy5lbnZOYW1lLmluZGV4T2YoImF0Iik+LTE/ImFsaWduYXQiOiJhbGlnbiIsdj1zLmVudk5hbWU9PT0ic3BsaXQiLGI9QTkocy5wYXJzZXIse2NvbHM6ZCxhZGRKb3Q6ITAsYXV0b1RhZzp2P3ZvaWQgMDpDYmUocy5lbnZOYW1lKSxlbXB0eVNpbmdsZVJvdzohMCxjb2xTZXBhcmF0aW9uVHlwZTpwLG1heE51bUNvbHM6dj8yOnZvaWQgMCxsZXFubzpzLnBhcnNlci5zZXR0aW5ncy5sZXFub30sImRpc3BsYXkiKSx5LFQ9MCxfPXt0eXBlOiJvcmRncm91cCIsbW9kZTpzLm1vZGUsYm9keTpbXX07aWYodVswXSYmdVswXS50eXBlPT09Im9yZGdyb3VwIil7Zm9yKHZhciBBPSIiLFA9MDtQPHVbMF0uYm9keS5sZW5ndGg7UCsrKXt2YXIgUj1Zbyh1WzBdLmJvZHlbUF0sInRleHRvcmQiKTtBKz1SLnRleHR9eT1OdW1iZXIoQSksVD15KjJ9dmFyIEY9IVQ7Yi5ib2R5LmZvckVhY2goZnVuY3Rpb24oaWUpe2Zvcih2YXIgb2U9MTtvZTxpZS5sZW5ndGg7b2UrPTIpe3ZhciBwZT1ZbyhpZVtvZV0sInN0eWxpbmciKSxiZT1ZbyhwZS5ib2R5WzBdLCJvcmRncm91cCIpO2JlLmJvZHkudW5zaGlmdChfKX1pZihGKVQ8aWUubGVuZ3RoJiYoVD1pZS5sZW5ndGgpO2Vsc2V7dmFyIGFlPWllLmxlbmd0aC8yO2lmKHk8YWUpdGhyb3cgbmV3IENpKCJUb28gbWFueSBtYXRoIGluIGEgcm93OiAiKygiZXhwZWN0ZWQgIit5KyIsIGJ1dCBnb3QgIithZSksaWVbMF0pfX0pO2Zvcih2YXIgaj0wO2o8VDsrK2ope3ZhciBLPSJyIixlZT0wO2olMj09PTE/Sz0ibCI6aj4wJiZGJiYoZWU9MSksZFtqXT17dHlwZToiYWxpZ24iLGFsaWduOksscHJlZ2FwOmVlLHBvc3RnYXA6MH19cmV0dXJuIGIuY29sU2VwYXJhdGlvblR5cGU9Rj8iYWxpZ24iOiJhbGlnbmF0IixifTtXNCh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYXJyYXkiLCJkYXJyYXkiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKGkscyl7dmFyIHU9dlEoc1swXSksZD11P1tzWzBdXTpZbyhzWzBdLCJvcmRncm91cCIpLmJvZHkscD1kLm1hcChmdW5jdGlvbihiKXt2YXIgeT1kYmUoYiksVD15LnRleHQ7aWYoImxjciIuaW5kZXhPZihUKSE9PS0xKXJldHVybnt0eXBlOiJhbGlnbiIsYWxpZ246VH07aWYoVD09PSJ8IilyZXR1cm57dHlwZToic2VwYXJhdG9yIixzZXBhcmF0b3I6InwifTtpZihUPT09IjoiKXJldHVybnt0eXBlOiJzZXBhcmF0b3IiLHNlcGFyYXRvcjoiOiJ9O3Rocm93IG5ldyBDaSgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK1QsYil9KSx2PXtjb2xzOnAsaHNraXBCZWZvcmVBbmRBZnRlcjohMCxtYXhOdW1Db2xzOnAubGVuZ3RofTtyZXR1cm4gQTkoaS5wYXJzZXIsdixTYmUoaS5lbnZOYW1lKSl9LGh0bWxCdWlsZGVyOlk0LG1hdGhtbEJ1aWxkZXI6WDR9KSxXNCh7dHlwZToiYXJyYXkiLG5hbWVzOlsibWF0cml4IiwicG1hdHJpeCIsImJtYXRyaXgiLCJCbWF0cml4Iiwidm1hdHJpeCIsIlZtYXRyaXgiLCJtYXRyaXgqIiwicG1hdHJpeCoiLCJibWF0cml4KiIsIkJtYXRyaXgqIiwidm1hdHJpeCoiLCJWbWF0cml4KiJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7dmFyIHM9e21hdHJpeDpudWxsLHBtYXRyaXg6WyIoIiwiKSJdLGJtYXRyaXg6WyJbIiwiXSJdLEJtYXRyaXg6WyJcXHsiLCJcXH0iXSx2bWF0cml4OlsifCIsInwiXSxWbWF0cml4OlsiXFxWZXJ0IiwiXFxWZXJ0Il19W2kuZW52TmFtZS5yZXBsYWNlKCIqIiwiIildLHU9ImMiLGQ9e2hza2lwQmVmb3JlQW5kQWZ0ZXI6ITEsY29sczpbe3R5cGU6ImFsaWduIixhbGlnbjp1fV19O2lmKGkuZW52TmFtZS5jaGFyQXQoaS5lbnZOYW1lLmxlbmd0aC0xKT09PSIqIil7dmFyIHA9aS5wYXJzZXI7aWYocC5jb25zdW1lU3BhY2VzKCkscC5mZXRjaCgpLnRleHQ9PT0iWyIpe2lmKHAuY29uc3VtZSgpLHAuY29uc3VtZVNwYWNlcygpLHU9cC5mZXRjaCgpLnRleHQsImxjciIuaW5kZXhPZih1KT09PS0xKXRocm93IG5ldyBDaSgiRXhwZWN0ZWQgbCBvciBjIG9yIHIiLHAubmV4dFRva2VuKTtwLmNvbnN1bWUoKSxwLmNvbnN1bWVTcGFjZXMoKSxwLmV4cGVjdCgiXSIpLHAuY29uc3VtZSgpLGQuY29scz1be3R5cGU6ImFsaWduIixhbGlnbjp1fV19fXZhciB2PUE5KGkucGFyc2VyLGQsU2JlKGkuZW52TmFtZSkpLGI9TWF0aC5tYXgoMCwuLi52LmJvZHkubWFwKHk9PnkubGVuZ3RoKSk7cmV0dXJuIHYuY29scz1uZXcgQXJyYXkoYikuZmlsbCh7dHlwZToiYWxpZ24iLGFsaWduOnV9KSxzP3t0eXBlOiJsZWZ0cmlnaHQiLG1vZGU6aS5tb2RlLGJvZHk6W3ZdLGxlZnQ6c1swXSxyaWdodDpzWzFdLHJpZ2h0Q29sb3I6dm9pZCAwfTp2fSxodG1sQnVpbGRlcjpZNCxtYXRobWxCdWlsZGVyOlg0fSksVzQoe3R5cGU6ImFycmF5IixuYW1lczpbInNtYWxsbWF0cml4Il0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcihpKXt2YXIgcz17YXJyYXlzdHJldGNoOi41fSx1PUE5KGkucGFyc2VyLHMsInNjcmlwdCIpO3JldHVybiB1LmNvbFNlcGFyYXRpb25UeXBlPSJzbWFsbCIsdX0saHRtbEJ1aWxkZXI6WTQsbWF0aG1sQnVpbGRlcjpYNH0pLFc0KHt0eXBlOiJhcnJheSIsbmFtZXM6WyJzdWJhcnJheSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIoaSxzKXt2YXIgdT12UShzWzBdKSxkPXU/W3NbMF1dOllvKHNbMF0sIm9yZGdyb3VwIikuYm9keSxwPWQubWFwKGZ1bmN0aW9uKGIpe3ZhciB5PWRiZShiKSxUPXkudGV4dDtpZigibGMiLmluZGV4T2YoVCkhPT0tMSlyZXR1cm57dHlwZToiYWxpZ24iLGFsaWduOlR9O3Rocm93IG5ldyBDaSgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK1QsYil9KTtpZihwLmxlbmd0aD4xKXRocm93IG5ldyBDaSgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTt2YXIgdj17Y29sczpwLGhza2lwQmVmb3JlQW5kQWZ0ZXI6ITEsYXJyYXlzdHJldGNoOi41fTtpZih2PUE5KGkucGFyc2VyLHYsInNjcmlwdCIpLHYuYm9keS5sZW5ndGg+MCYmdi5ib2R5WzBdLmxlbmd0aD4xKXRocm93IG5ldyBDaSgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTtyZXR1cm4gdn0saHRtbEJ1aWxkZXI6WTQsbWF0aG1sQnVpbGRlcjpYNH0pLFc0KHt0eXBlOiJhcnJheSIsbmFtZXM6WyJjYXNlcyIsImRjYXNlcyIsInJjYXNlcyIsImRyY2FzZXMiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKGkpe3ZhciBzPXthcnJheXN0cmV0Y2g6MS4yLGNvbHM6W3t0eXBlOiJhbGlnbiIsYWxpZ246ImwiLHByZWdhcDowLHBvc3RnYXA6MX0se3R5cGU6ImFsaWduIixhbGlnbjoibCIscHJlZ2FwOjAscG9zdGdhcDowfV19LHU9QTkoaS5wYXJzZXIscyxTYmUoaS5lbnZOYW1lKSk7cmV0dXJue3R5cGU6ImxlZnRyaWdodCIsbW9kZTppLm1vZGUsYm9keTpbdV0sbGVmdDppLmVudk5hbWUuaW5kZXhPZigiciIpPi0xPyIuIjoiXFx7IixyaWdodDppLmVudk5hbWUuaW5kZXhPZigiciIpPi0xPyJcXH0iOiIuIixyaWdodENvbG9yOnZvaWQgMH19LGh0bWxCdWlsZGVyOlk0LG1hdGhtbEJ1aWxkZXI6WDR9KSxXNCh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYWxpZ24iLCJhbGlnbioiLCJhbGlnbmVkIiwic3BsaXQiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyOnF6ZSxodG1sQnVpbGRlcjpZNCxtYXRobWxCdWlsZGVyOlg0fSksVzQoe3R5cGU6ImFycmF5IixuYW1lczpbImdhdGhlcmVkIiwiZ2F0aGVyIiwiZ2F0aGVyKiJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7WWEuY29udGFpbnMoWyJnYXRoZXIiLCJnYXRoZXIqIl0saS5lbnZOYW1lKSYmRVEoaSk7dmFyIHM9e2NvbHM6W3t0eXBlOiJhbGlnbiIsYWxpZ246ImMifV0sYWRkSm90OiEwLGNvbFNlcGFyYXRpb25UeXBlOiJnYXRoZXIiLGF1dG9UYWc6Q2JlKGkuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsbGVxbm86aS5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiBBOShpLnBhcnNlcixzLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOlk0LG1hdGhtbEJ1aWxkZXI6WDR9KSxXNCh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYWxpZ25hdCIsImFsaWduYXQqIiwiYWxpZ25lZGF0Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpxemUsaHRtbEJ1aWxkZXI6WTQsbWF0aG1sQnVpbGRlcjpYNH0pLFc0KHt0eXBlOiJhcnJheSIsbmFtZXM6WyJlcXVhdGlvbiIsImVxdWF0aW9uKiJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7RVEoaSk7dmFyIHM9e2F1dG9UYWc6Q2JlKGkuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsc2luZ2xlUm93OiEwLG1heE51bUNvbHM6MSxsZXFubzppLnBhcnNlci5zZXR0aW5ncy5sZXFub307cmV0dXJuIEE5KGkucGFyc2VyLHMsImRpc3BsYXkiKX0saHRtbEJ1aWxkZXI6WTQsbWF0aG1sQnVpbGRlcjpYNH0pLFc0KHt0eXBlOiJhcnJheSIsbmFtZXM6WyJDRCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7cmV0dXJuIEVRKGkpLFlIdChpLnBhcnNlcil9LGh0bWxCdWlsZGVyOlk0LG1hdGhtbEJ1aWxkZXI6WDR9KSxldCgiXFxub251bWJlciIsIlxcZ2RlZlxcQGVxbnN3ezB9IiksZXQoIlxcbm90YWciLCJcXG5vbnVtYmVyIiksSmkoe3R5cGU6InRleHQiLG5hbWVzOlsiXFxobGluZSIsIlxcaGRhc2hsaW5lIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITB9LGhhbmRsZXIoaSxzKXt0aHJvdyBuZXcgQ2koaS5mdW5jTmFtZSsiIHZhbGlkIG9ubHkgd2l0aGluIGFycmF5IGVudmlyb25tZW50Iil9fSk7dmFyIEh6ZT1qemU7Smkoe3R5cGU6ImVudmlyb25tZW50IixuYW1lczpbIlxcYmVnaW4iLCJcXGVuZCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il19LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZH09aSxwPXNbMF07aWYocC50eXBlIT09Im9yZGdyb3VwIil0aHJvdyBuZXcgQ2koIkludmFsaWQgZW52aXJvbm1lbnQgbmFtZSIscCk7Zm9yKHZhciB2PSIiLGI9MDtiPHAuYm9keS5sZW5ndGg7KytiKXYrPVlvKHAuYm9keVtiXSwidGV4dG9yZCIpLnRleHQ7aWYoZD09PSJcXGJlZ2luIil7aWYoIUh6ZS5oYXNPd25Qcm9wZXJ0eSh2KSl0aHJvdyBuZXcgQ2koIk5vIHN1Y2ggZW52aXJvbm1lbnQ6ICIrdixwKTt2YXIgeT1IemVbdl0se2FyZ3M6VCxvcHRBcmdzOl99PXUucGFyc2VBcmd1bWVudHMoIlxcYmVnaW57Iit2KyJ9Iix5KSxBPXttb2RlOnUubW9kZSxlbnZOYW1lOnYscGFyc2VyOnV9LFA9eS5oYW5kbGVyKEEsVCxfKTt1LmV4cGVjdCgiXFxlbmQiLCExKTt2YXIgUj11Lm5leHRUb2tlbixGPVlvKHUucGFyc2VGdW5jdGlvbigpLCJlbnZpcm9ubWVudCIpO2lmKEYubmFtZSE9PXYpdGhyb3cgbmV3IENpKCJNaXNtYXRjaDogXFxiZWdpbnsiK3YrIn0gbWF0Y2hlZCBieSBcXGVuZHsiK0YubmFtZSsifSIsUik7cmV0dXJuIFB9cmV0dXJue3R5cGU6ImVudmlyb25tZW50Iixtb2RlOnUubW9kZSxuYW1lOnYsbmFtZUdyb3VwOnB9fX0pO3ZhciBWemU9KGkscyk9Pnt2YXIgdT1pLmZvbnQsZD1zLndpdGhGb250KHUpO3JldHVybiB1dShpLmJvZHksZCl9LFV6ZT0oaSxzKT0+e3ZhciB1PWkuZm9udCxkPXMud2l0aEZvbnQodSk7cmV0dXJuIExsKGkuYm9keSxkKX0sR3plPXsiXFxCYmIiOiJcXG1hdGhiYiIsIlxcYm9sZCI6IlxcbWF0aGJmIiwiXFxmcmFrIjoiXFxtYXRoZnJhayIsIlxcYm0iOiJcXGJvbGRzeW1ib2wifTtKaSh7dHlwZToiZm9udCIsbmFtZXM6WyJcXG1hdGhybSIsIlxcbWF0aGl0IiwiXFxtYXRoYmYiLCJcXG1hdGhub3JtYWwiLCJcXG1hdGhiYiIsIlxcbWF0aGNhbCIsIlxcbWF0aGZyYWsiLCJcXG1hdGhzY3IiLCJcXG1hdGhzZiIsIlxcbWF0aHR0IiwiXFxCYmIiLCJcXGJvbGQiLCJcXGZyYWsiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJbkFyZ3VtZW50OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1iUShzWzBdKSx2PWQ7cmV0dXJuIHYgaW4gR3plJiYodj1HemVbdl0pLHt0eXBlOiJmb250Iixtb2RlOnUubW9kZSxmb250OnYuc2xpY2UoMSksYm9keTpwfX0saHRtbEJ1aWxkZXI6VnplLG1hdGhtbEJ1aWxkZXI6VXplfSksSmkoe3R5cGU6Im1jbGFzcyIsbmFtZXM6WyJcXGJvbGRzeW1ib2wiLCJcXGJtIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dX09aSxkPXNbMF0scD1ZYS5pc0NoYXJhY3RlckJveChkKTtyZXR1cm57dHlwZToibWNsYXNzIixtb2RlOnUubW9kZSxtY2xhc3M6eVEoZCksYm9keTpbe3R5cGU6ImZvbnQiLG1vZGU6dS5tb2RlLGZvbnQ6ImJvbGRzeW1ib2wiLGJvZHk6ZH1dLGlzQ2hhcmFjdGVyQm94OnB9fX0pLEppKHt0eXBlOiJmb250IixuYW1lczpbIlxccm0iLCJcXHNmIiwiXFx0dCIsIlxcYmYiLCJcXGl0IiwiXFxjYWwiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZCxicmVha09uVG9rZW5UZXh0OnB9PWkse21vZGU6dn09dSxiPXUucGFyc2VFeHByZXNzaW9uKCEwLHApLHk9Im1hdGgiK2Quc2xpY2UoMSk7cmV0dXJue3R5cGU6ImZvbnQiLG1vZGU6dixmb250OnksYm9keTp7dHlwZToib3JkZ3JvdXAiLG1vZGU6dS5tb2RlLGJvZHk6Yn19fSxodG1sQnVpbGRlcjpWemUsbWF0aG1sQnVpbGRlcjpVemV9KTt2YXIgS3plPShpLHMpPT57dmFyIHU9cztyZXR1cm4gaT09PSJkaXNwbGF5Ij91PXUuaWQ+PVRhLlNDUklQVC5pZD91LnRleHQoKTpUYS5ESVNQTEFZOmk9PT0idGV4dCImJnUuc2l6ZT09PVRhLkRJU1BMQVkuc2l6ZT91PVRhLlRFWFQ6aT09PSJzY3JpcHQiP3U9VGEuU0NSSVBUOmk9PT0ic2NyaXB0c2NyaXB0IiYmKHU9VGEuU0NSSVBUU0NSSVBUKSx1fSxfYmU9KGkscyk9Pnt2YXIgdT1LemUoaS5zaXplLHMuc3R5bGUpLGQ9dS5mcmFjTnVtKCkscD11LmZyYWNEZW4oKSx2O3Y9cy5oYXZpbmdTdHlsZShkKTt2YXIgYj11dShpLm51bWVyLHYscyk7aWYoaS5jb250aW51ZWQpe3ZhciB5PTguNS9zLmZvbnRNZXRyaWNzKCkucHRQZXJFbSxUPTMuNS9zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtiLmhlaWdodD1iLmhlaWdodDx5P3k6Yi5oZWlnaHQsYi5kZXB0aD1iLmRlcHRoPFQ/VDpiLmRlcHRofXY9cy5oYXZpbmdTdHlsZShwKTt2YXIgXz11dShpLmRlbm9tLHYscyksQSxQLFI7aS5oYXNCYXJMaW5lPyhpLmJhclNpemU/KFA9VWgoaS5iYXJTaXplLHMpLEE9em4ubWFrZUxpbmVTcGFuKCJmcmFjLWxpbmUiLHMsUCkpOkE9em4ubWFrZUxpbmVTcGFuKCJmcmFjLWxpbmUiLHMpLFA9QS5oZWlnaHQsUj1BLmhlaWdodCk6KEE9bnVsbCxQPTAsUj1zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MpO3ZhciBGLGosSzt1LnNpemU9PT1UYS5ESVNQTEFZLnNpemV8fGkuc2l6ZT09PSJkaXNwbGF5Ij8oRj1zLmZvbnRNZXRyaWNzKCkubnVtMSxQPjA/aj0zKlI6aj03KlIsSz1zLmZvbnRNZXRyaWNzKCkuZGVub20xKTooUD4wPyhGPXMuZm9udE1ldHJpY3MoKS5udW0yLGo9Uik6KEY9cy5mb250TWV0cmljcygpLm51bTMsaj0zKlIpLEs9cy5mb250TWV0cmljcygpLmRlbm9tMik7dmFyIGVlO2lmKEEpe3ZhciBvZT1zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtGLWIuZGVwdGgtKG9lKy41KlApPGomJihGKz1qLShGLWIuZGVwdGgtKG9lKy41KlApKSksb2UtLjUqUC0oXy5oZWlnaHQtSyk8aiYmKEsrPWotKG9lLS41KlAtKF8uaGVpZ2h0LUspKSk7dmFyIHBlPS0ob2UtLjUqUCk7ZWU9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOl8sc2hpZnQ6S30se3R5cGU6ImVsZW0iLGVsZW06QSxzaGlmdDpwZX0se3R5cGU6ImVsZW0iLGVsZW06YixzaGlmdDotRn1dfSxzKX1lbHNle3ZhciBpZT1GLWIuZGVwdGgtKF8uaGVpZ2h0LUspO2llPGomJihGKz0uNSooai1pZSksSys9LjUqKGotaWUpKSxlZT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06XyxzaGlmdDpLfSx7dHlwZToiZWxlbSIsZWxlbTpiLHNoaWZ0Oi1GfV19LHMpfXY9cy5oYXZpbmdTdHlsZSh1KSxlZS5oZWlnaHQqPXYuc2l6ZU11bHRpcGxpZXIvcy5zaXplTXVsdGlwbGllcixlZS5kZXB0aCo9di5zaXplTXVsdGlwbGllci9zLnNpemVNdWx0aXBsaWVyO3ZhciBiZTt1LnNpemU9PT1UYS5ESVNQTEFZLnNpemU/YmU9cy5mb250TWV0cmljcygpLmRlbGltMTp1LnNpemU9PT1UYS5TQ1JJUFRTQ1JJUFQuc2l6ZT9iZT1zLmhhdmluZ1N0eWxlKFRhLlNDUklQVCkuZm9udE1ldHJpY3MoKS5kZWxpbTI6YmU9cy5mb250TWV0cmljcygpLmRlbGltMjt2YXIgYWUsbmU7cmV0dXJuIGkubGVmdERlbGltPT1udWxsP2FlPXVSKHMsWyJtb3BlbiJdKTphZT1CNy5jdXN0b21TaXplZERlbGltKGkubGVmdERlbGltLGJlLCEwLHMuaGF2aW5nU3R5bGUodSksaS5tb2RlLFsibW9wZW4iXSksaS5jb250aW51ZWQ/bmU9em4ubWFrZVNwYW4oW10pOmkucmlnaHREZWxpbT09bnVsbD9uZT11UihzLFsibWNsb3NlIl0pOm5lPUI3LmN1c3RvbVNpemVkRGVsaW0oaS5yaWdodERlbGltLGJlLCEwLHMuaGF2aW5nU3R5bGUodSksaS5tb2RlLFsibWNsb3NlIl0pLHpuLm1ha2VTcGFuKFsibW9yZCJdLmNvbmNhdCh2LnNpemluZ0NsYXNzZXMocykpLFthZSx6bi5tYWtlU3BhbihbIm1mcmFjIl0sW2VlXSksbmVdLHMpfSxBYmU9KGkscyk9Pnt2YXIgdT1uZXcgdmkuTWF0aE5vZGUoIm1mcmFjIixbTGwoaS5udW1lcixzKSxMbChpLmRlbm9tLHMpXSk7aWYoIWkuaGFzQmFyTGluZSl1LnNldEF0dHJpYnV0ZSgibGluZXRoaWNrbmVzcyIsIjBweCIpO2Vsc2UgaWYoaS5iYXJTaXplKXt2YXIgZD1VaChpLmJhclNpemUscyk7dS5zZXRBdHRyaWJ1dGUoImxpbmV0aGlja25lc3MiLFJpKGQpKX12YXIgcD1LemUoaS5zaXplLHMuc3R5bGUpO2lmKHAuc2l6ZSE9PXMuc3R5bGUuc2l6ZSl7dT1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIsW3VdKTt2YXIgdj1wLnNpemU9PT1UYS5ESVNQTEFZLnNpemU/InRydWUiOiJmYWxzZSI7dS5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIsdiksdS5zZXRBdHRyaWJ1dGUoInNjcmlwdGxldmVsIiwiMCIpfWlmKGkubGVmdERlbGltIT1udWxsfHxpLnJpZ2h0RGVsaW0hPW51bGwpe3ZhciBiPVtdO2lmKGkubGVmdERlbGltIT1udWxsKXt2YXIgeT1uZXcgdmkuTWF0aE5vZGUoIm1vIixbbmV3IHZpLlRleHROb2RlKGkubGVmdERlbGltLnJlcGxhY2UoIlxcIiwiIikpXSk7eS5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpLGIucHVzaCh5KX1pZihiLnB1c2godSksaS5yaWdodERlbGltIT1udWxsKXt2YXIgVD1uZXcgdmkuTWF0aE5vZGUoIm1vIixbbmV3IHZpLlRleHROb2RlKGkucmlnaHREZWxpbS5yZXBsYWNlKCJcXCIsIiIpKV0pO1Quc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxiLnB1c2goVCl9cmV0dXJuIGhiZShiKX1yZXR1cm4gdX07Smkoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxkZnJhYyIsIlxcZnJhYyIsIlxcdGZyYWMiLCJcXGRiaW5vbSIsIlxcYmlub20iLCJcXHRiaW5vbSIsIlxcXFxhdG9wZnJhYyIsIlxcXFxicmFjZWZyYWMiLCJcXFxcYnJhY2tmcmFjIl0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5Bcmd1bWVudDohMH0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9c1swXSx2PXNbMV0sYix5PW51bGwsVD1udWxsLF89ImF1dG8iO3N3aXRjaChkKXtjYXNlIlxcZGZyYWMiOmNhc2UiXFxmcmFjIjpjYXNlIlxcdGZyYWMiOmI9ITA7YnJlYWs7Y2FzZSJcXFxcYXRvcGZyYWMiOmI9ITE7YnJlYWs7Y2FzZSJcXGRiaW5vbSI6Y2FzZSJcXGJpbm9tIjpjYXNlIlxcdGJpbm9tIjpiPSExLHk9IigiLFQ9IikiO2JyZWFrO2Nhc2UiXFxcXGJyYWNlZnJhYyI6Yj0hMSx5PSJcXHsiLFQ9IlxcfSI7YnJlYWs7Y2FzZSJcXFxcYnJhY2tmcmFjIjpiPSExLHk9IlsiLFQ9Il0iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgZ2VuZnJhYyBjb21tYW5kIil9c3dpdGNoKGQpe2Nhc2UiXFxkZnJhYyI6Y2FzZSJcXGRiaW5vbSI6Xz0iZGlzcGxheSI7YnJlYWs7Y2FzZSJcXHRmcmFjIjpjYXNlIlxcdGJpbm9tIjpfPSJ0ZXh0IjticmVha31yZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTp1Lm1vZGUsY29udGludWVkOiExLG51bWVyOnAsZGVub206dixoYXNCYXJMaW5lOmIsbGVmdERlbGltOnkscmlnaHREZWxpbTpULHNpemU6XyxiYXJTaXplOm51bGx9fSxodG1sQnVpbGRlcjpfYmUsbWF0aG1sQnVpbGRlcjpBYmV9KSxKaSh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXGNmcmFjIl0scHJvcHM6e251bUFyZ3M6Mn0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9c1swXSx2PXNbMV07cmV0dXJue3R5cGU6ImdlbmZyYWMiLG1vZGU6dS5tb2RlLGNvbnRpbnVlZDohMCxudW1lcjpwLGRlbm9tOnYsaGFzQmFyTGluZTohMCxsZWZ0RGVsaW06bnVsbCxyaWdodERlbGltOm51bGwsc2l6ZToiZGlzcGxheSIsYmFyU2l6ZTpudWxsfX19KSxKaSh7dHlwZToiaW5maXgiLG5hbWVzOlsiXFxvdmVyIiwiXFxjaG9vc2UiLCJcXGF0b3AiLCJcXGJyYWNlIiwiXFxicmFjayJdLHByb3BzOntudW1BcmdzOjAsaW5maXg6ITB9LGhhbmRsZXIoaSl7dmFye3BhcnNlcjpzLGZ1bmNOYW1lOnUsdG9rZW46ZH09aSxwO3N3aXRjaCh1KXtjYXNlIlxcb3ZlciI6cD0iXFxmcmFjIjticmVhaztjYXNlIlxcY2hvb3NlIjpwPSJcXGJpbm9tIjticmVhaztjYXNlIlxcYXRvcCI6cD0iXFxcXGF0b3BmcmFjIjticmVhaztjYXNlIlxcYnJhY2UiOnA9IlxcXFxicmFjZWZyYWMiO2JyZWFrO2Nhc2UiXFxicmFjayI6cD0iXFxcXGJyYWNrZnJhYyI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBpbmZpeCBnZW5mcmFjIGNvbW1hbmQiKX1yZXR1cm57dHlwZToiaW5maXgiLG1vZGU6cy5tb2RlLHJlcGxhY2VXaXRoOnAsdG9rZW46ZH19fSk7dmFyIFd6ZT1bImRpc3BsYXkiLCJ0ZXh0Iiwic2NyaXB0Iiwic2NyaXB0c2NyaXB0Il0sWXplPWZ1bmN0aW9uKHMpe3ZhciB1PW51bGw7cmV0dXJuIHMubGVuZ3RoPjAmJih1PXMsdT11PT09Ii4iP251bGw6dSksdX07Smkoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxnZW5mcmFjIl0scHJvcHM6e251bUFyZ3M6NixhbGxvd2VkSW5Bcmd1bWVudDohMCxhcmdUeXBlczpbIm1hdGgiLCJtYXRoIiwic2l6ZSIsInRleHQiLCJtYXRoIiwibWF0aCJdfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1fT1pLGQ9c1s0XSxwPXNbNV0sdj1iUShzWzBdKSxiPXYudHlwZT09PSJhdG9tIiYmdi5mYW1pbHk9PT0ib3BlbiI/WXplKHYudGV4dCk6bnVsbCx5PWJRKHNbMV0pLFQ9eS50eXBlPT09ImF0b20iJiZ5LmZhbWlseT09PSJjbG9zZSI/WXplKHkudGV4dCk6bnVsbCxfPVlvKHNbMl0sInNpemUiKSxBLFA9bnVsbDtfLmlzQmxhbms/QT0hMDooUD1fLnZhbHVlLEE9UC5udW1iZXI+MCk7dmFyIFI9ImF1dG8iLEY9c1szXTtpZihGLnR5cGU9PT0ib3JkZ3JvdXAiKXtpZihGLmJvZHkubGVuZ3RoPjApe3ZhciBqPVlvKEYuYm9keVswXSwidGV4dG9yZCIpO1I9V3plW051bWJlcihqLnRleHQpXX19ZWxzZSBGPVlvKEYsInRleHRvcmQiKSxSPVd6ZVtOdW1iZXIoRi50ZXh0KV07cmV0dXJue3R5cGU6ImdlbmZyYWMiLG1vZGU6dS5tb2RlLG51bWVyOmQsZGVub206cCxjb250aW51ZWQ6ITEsaGFzQmFyTGluZTpBLGJhclNpemU6UCxsZWZ0RGVsaW06YixyaWdodERlbGltOlQsc2l6ZTpSfX0saHRtbEJ1aWxkZXI6X2JlLG1hdGhtbEJ1aWxkZXI6QWJlfSksSmkoe3R5cGU6ImluZml4IixuYW1lczpbIlxcYWJvdmUiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsic2l6ZSJdLGluZml4OiEwfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmQsdG9rZW46cH09aTtyZXR1cm57dHlwZToiaW5maXgiLG1vZGU6dS5tb2RlLHJlcGxhY2VXaXRoOiJcXFxcYWJvdmVmcmFjIixzaXplOllvKHNbMF0sInNpemUiKS52YWx1ZSx0b2tlbjpwfX19KSxKaSh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXFxcYWJvdmVmcmFjIl0scHJvcHM6e251bUFyZ3M6MyxhcmdUeXBlczpbIm1hdGgiLCJzaXplIiwibWF0aCJdfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzBdLHY9JHF0KFlvKHNbMV0sImluZml4Iikuc2l6ZSksYj1zWzJdLHk9di5udW1iZXI+MDtyZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTp1Lm1vZGUsbnVtZXI6cCxkZW5vbTpiLGNvbnRpbnVlZDohMSxoYXNCYXJMaW5lOnksYmFyU2l6ZTp2LGxlZnREZWxpbTpudWxsLHJpZ2h0RGVsaW06bnVsbCxzaXplOiJhdXRvIn19LGh0bWxCdWlsZGVyOl9iZSxtYXRobWxCdWlsZGVyOkFiZX0pO3ZhciBYemU9KGkscyk9Pnt2YXIgdT1zLnN0eWxlLGQscDtpLnR5cGU9PT0ic3Vwc3ViIj8oZD1pLnN1cD91dShpLnN1cCxzLmhhdmluZ1N0eWxlKHUuc3VwKCkpLHMpOnV1KGkuc3ViLHMuaGF2aW5nU3R5bGUodS5zdWIoKSkscykscD1ZbyhpLmJhc2UsImhvcml6QnJhY2UiKSk6cD1ZbyhpLCJob3JpekJyYWNlIik7dmFyIHY9dXUocC5iYXNlLHMuaGF2aW5nQmFzZVN0eWxlKFRhLkRJU1BMQVkpKSxiPVA3LnN2Z1NwYW4ocCxzKSx5O2lmKHAuaXNPdmVyPyh5PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dn0se3R5cGU6Imtlcm4iLHNpemU6LjF9LHt0eXBlOiJlbGVtIixlbGVtOmJ9XX0scykseS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goInN2Zy1hbGlnbiIpKTooeT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6di5kZXB0aCsuMStiLmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06Yn0se3R5cGU6Imtlcm4iLHNpemU6LjF9LHt0eXBlOiJlbGVtIixlbGVtOnZ9XX0scykseS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jbGFzc2VzLnB1c2goInN2Zy1hbGlnbiIpKSxkKXt2YXIgVD16bi5tYWtlU3BhbihbIm1vcmQiLHAuaXNPdmVyPyJtb3ZlciI6Im11bmRlciJdLFt5XSxzKTtwLmlzT3Zlcj95PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06VH0se3R5cGU6Imtlcm4iLHNpemU6LjJ9LHt0eXBlOiJlbGVtIixlbGVtOmR9XX0scyk6eT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6VC5kZXB0aCsuMitkLmhlaWdodCtkLmRlcHRoLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpkfSx7dHlwZToia2VybiIsc2l6ZTouMn0se3R5cGU6ImVsZW0iLGVsZW06VH1dfSxzKX1yZXR1cm4gem4ubWFrZVNwYW4oWyJtb3JkIixwLmlzT3Zlcj8ibW92ZXIiOiJtdW5kZXIiXSxbeV0scyl9LGxWdD0oaSxzKT0+e3ZhciB1PVA3Lm1hdGhNTG5vZGUoaS5sYWJlbCk7cmV0dXJuIG5ldyB2aS5NYXRoTm9kZShpLmlzT3Zlcj8ibW92ZXIiOiJtdW5kZXIiLFtMbChpLmJhc2UscyksdV0pfTtKaSh7dHlwZToiaG9yaXpCcmFjZSIsbmFtZXM6WyJcXG92ZXJicmFjZSIsIlxcdW5kZXJicmFjZSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZH09aTtyZXR1cm57dHlwZToiaG9yaXpCcmFjZSIsbW9kZTp1Lm1vZGUsbGFiZWw6ZCxpc092ZXI6L15cXG92ZXIvLnRlc3QoZCksYmFzZTpzWzBdfX0saHRtbEJ1aWxkZXI6WHplLG1hdGhtbEJ1aWxkZXI6bFZ0fSksSmkoe3R5cGU6ImhyZWYiLG5hbWVzOlsiXFxocmVmIl0scHJvcHM6e251bUFyZ3M6MixhcmdUeXBlczpbInVybCIsIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dX09aSxkPXNbMV0scD1ZbyhzWzBdLCJ1cmwiKS51cmw7cmV0dXJuIHUuc2V0dGluZ3MuaXNUcnVzdGVkKHtjb21tYW5kOiJcXGhyZWYiLHVybDpwfSk/e3R5cGU6ImhyZWYiLG1vZGU6dS5tb2RlLGhyZWY6cCxib2R5OlhmKGQpfTp1LmZvcm1hdFVuc3VwcG9ydGVkQ21kKCJcXGhyZWYiKX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1kMShpLmJvZHkscywhMSk7cmV0dXJuIHpuLm1ha2VBbmNob3IoaS5ocmVmLFtdLHUscyl9LG1hdGhtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1fOShpLmJvZHkscyk7cmV0dXJuIHUgaW5zdGFuY2VvZiBGdnx8KHU9bmV3IEZ2KCJtcm93IixbdV0pKSx1LnNldEF0dHJpYnV0ZSgiaHJlZiIsaS5ocmVmKSx1fX0pLEppKHt0eXBlOiJocmVmIixuYW1lczpbIlxcdXJsIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInVybCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnV9PWksZD1ZbyhzWzBdLCJ1cmwiKS51cmw7aWYoIXUuc2V0dGluZ3MuaXNUcnVzdGVkKHtjb21tYW5kOiJcXHVybCIsdXJsOmR9KSlyZXR1cm4gdS5mb3JtYXRVbnN1cHBvcnRlZENtZCgiXFx1cmwiKTtmb3IodmFyIHA9W10sdj0wO3Y8ZC5sZW5ndGg7disrKXt2YXIgYj1kW3ZdO2I9PT0ifiImJihiPSJcXHRleHRhc2NpaXRpbGRlIikscC5wdXNoKHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iix0ZXh0OmJ9KX12YXIgeT17dHlwZToidGV4dCIsbW9kZTp1Lm1vZGUsZm9udDoiXFx0ZXh0dHQiLGJvZHk6cH07cmV0dXJue3R5cGU6ImhyZWYiLG1vZGU6dS5tb2RlLGhyZWY6ZCxib2R5OlhmKHkpfX19KSxKaSh7dHlwZToiaGJveCIsbmFtZXM6WyJcXGhib3giXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsidGV4dCJdLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1fT1pO3JldHVybnt0eXBlOiJoYm94Iixtb2RlOnUubW9kZSxib2R5OlhmKHNbMF0pfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT1kMShpLmJvZHkscywhMSk7cmV0dXJuIHpuLm1ha2VGcmFnbWVudCh1KX0sbWF0aG1sQnVpbGRlcihpLHMpe3JldHVybiBuZXcgdmkuTWF0aE5vZGUoIm1yb3ciLGoyKGkuYm9keSxzKSl9fSksSmkoe3R5cGU6Imh0bWwiLG5hbWVzOlsiXFxodG1sQ2xhc3MiLCJcXGh0bWxJZCIsIlxcaHRtbFN0eWxlIiwiXFxodG1sRGF0YSJdLHByb3BzOntudW1BcmdzOjIsYXJnVHlwZXM6WyJyYXciLCJvcmlnaW5hbCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZCx0b2tlbjpwfT1pLHY9WW8oc1swXSwicmF3Iikuc3RyaW5nLGI9c1sxXTt1LnNldHRpbmdzLnN0cmljdCYmdS5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoImh0bWxFeHRlbnNpb24iLCJIVE1MIGV4dGVuc2lvbiBpcyBkaXNhYmxlZCBvbiBzdHJpY3QgbW9kZSIpO3ZhciB5LFQ9e307c3dpdGNoKGQpe2Nhc2UiXFxodG1sQ2xhc3MiOlQuY2xhc3M9dix5PXtjb21tYW5kOiJcXGh0bWxDbGFzcyIsY2xhc3M6dn07YnJlYWs7Y2FzZSJcXGh0bWxJZCI6VC5pZD12LHk9e2NvbW1hbmQ6IlxcaHRtbElkIixpZDp2fTticmVhaztjYXNlIlxcaHRtbFN0eWxlIjpULnN0eWxlPXYseT17Y29tbWFuZDoiXFxodG1sU3R5bGUiLHN0eWxlOnZ9O2JyZWFrO2Nhc2UiXFxodG1sRGF0YSI6e2Zvcih2YXIgXz12LnNwbGl0KCIsIiksQT0wO0E8Xy5sZW5ndGg7QSsrKXt2YXIgUD1fW0FdLnNwbGl0KCI9Iik7aWYoUC5sZW5ndGghPT0yKXRocm93IG5ldyBDaSgiRXJyb3IgcGFyc2luZyBrZXktdmFsdWUgZm9yIFxcaHRtbERhdGEiKTtUWyJkYXRhLSIrUFswXS50cmltKCldPVBbMV0udHJpbSgpfXk9e2NvbW1hbmQ6IlxcaHRtbERhdGEiLGF0dHJpYnV0ZXM6VH07YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBodG1sIGNvbW1hbmQiKX1yZXR1cm4gdS5zZXR0aW5ncy5pc1RydXN0ZWQoeSk/e3R5cGU6Imh0bWwiLG1vZGU6dS5tb2RlLGF0dHJpYnV0ZXM6VCxib2R5OlhmKGIpfTp1LmZvcm1hdFVuc3VwcG9ydGVkQ21kKGQpfSxodG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PWQxKGkuYm9keSxzLCExKSxkPVsiZW5jbG9zaW5nIl07aS5hdHRyaWJ1dGVzLmNsYXNzJiZkLnB1c2goLi4uaS5hdHRyaWJ1dGVzLmNsYXNzLnRyaW0oKS5zcGxpdCgvXHMrLykpO3ZhciBwPXpuLm1ha2VTcGFuKGQsdSxzKTtmb3IodmFyIHYgaW4gaS5hdHRyaWJ1dGVzKXYhPT0iY2xhc3MiJiZpLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkodikmJnAuc2V0QXR0cmlidXRlKHYsaS5hdHRyaWJ1dGVzW3ZdKTtyZXR1cm4gcH0sbWF0aG1sQnVpbGRlcjooaSxzKT0+XzkoaS5ib2R5LHMpfSksSmkoe3R5cGU6Imh0bWxtYXRobWwiLG5hbWVzOlsiXFxodG1sQG1hdGhtbCJdLHByb3BzOntudW1BcmdzOjIsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToiaHRtbG1hdGhtbCIsbW9kZTp1Lm1vZGUsaHRtbDpYZihzWzBdKSxtYXRobWw6WGYoc1sxXSl9fSxodG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PWQxKGkuaHRtbCxzLCExKTtyZXR1cm4gem4ubWFrZUZyYWdtZW50KHUpfSxtYXRobWxCdWlsZGVyOihpLHMpPT5fOShpLm1hdGhtbCxzKX0pO3ZhciBMYmU9ZnVuY3Rpb24ocyl7aWYoL15bLStdPyAqKFxkKyhcLlxkKik/fFwuXGQrKSQvLnRlc3QocykpcmV0dXJue251bWJlcjorcyx1bml0OiJicCJ9O3ZhciB1PS8oWy0rXT8pICooXGQrKD86XC5cZCopP3xcLlxkKykgKihbYS16XXsyfSkvLmV4ZWMocyk7aWYoIXUpdGhyb3cgbmV3IENpKCJJbnZhbGlkIHNpemU6ICciK3MrIicgaW4gXFxpbmNsdWRlZ3JhcGhpY3MiKTt2YXIgZD17bnVtYmVyOisodVsxXSt1WzJdKSx1bml0OnVbM119O2lmKCFKJGUoZCkpdGhyb3cgbmV3IENpKCJJbnZhbGlkIHVuaXQ6ICciK2QudW5pdCsiJyBpbiBcXGluY2x1ZGVncmFwaGljcy4iKTtyZXR1cm4gZH07Smkoe3R5cGU6ImluY2x1ZGVncmFwaGljcyIsbmFtZXM6WyJcXGluY2x1ZGVncmFwaGljcyJdLHByb3BzOntudW1BcmdzOjEsbnVtT3B0aW9uYWxBcmdzOjEsYXJnVHlwZXM6WyJyYXciLCJ1cmwiXSxhbGxvd2VkSW5UZXh0OiExfSxoYW5kbGVyOihpLHMsdSk9Pnt2YXJ7cGFyc2VyOmR9PWkscD17bnVtYmVyOjAsdW5pdDoiZW0ifSx2PXtudW1iZXI6LjksdW5pdDoiZW0ifSxiPXtudW1iZXI6MCx1bml0OiJlbSJ9LHk9IiI7aWYodVswXSlmb3IodmFyIFQ9WW8odVswXSwicmF3Iikuc3RyaW5nLF89VC5zcGxpdCgiLCIpLEE9MDtBPF8ubGVuZ3RoO0ErKyl7dmFyIFA9X1tBXS5zcGxpdCgiPSIpO2lmKFAubGVuZ3RoPT09Mil7dmFyIFI9UFsxXS50cmltKCk7c3dpdGNoKFBbMF0udHJpbSgpKXtjYXNlImFsdCI6eT1SO2JyZWFrO2Nhc2Uid2lkdGgiOnA9TGJlKFIpO2JyZWFrO2Nhc2UiaGVpZ2h0Ijp2PUxiZShSKTticmVhaztjYXNlInRvdGFsaGVpZ2h0IjpiPUxiZShSKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBDaSgiSW52YWxpZCBrZXk6ICciK1BbMF0rIicgaW4gXFxpbmNsdWRlZ3JhcGhpY3MuIil9fX12YXIgRj1ZbyhzWzBdLCJ1cmwiKS51cmw7cmV0dXJuIHk9PT0iIiYmKHk9Rix5PXkucmVwbGFjZSgvXi4qW1xcL10vLCIiKSx5PXkuc3Vic3RyaW5nKDAseS5sYXN0SW5kZXhPZigiLiIpKSksZC5zZXR0aW5ncy5pc1RydXN0ZWQoe2NvbW1hbmQ6IlxcaW5jbHVkZWdyYXBoaWNzIix1cmw6Rn0pP3t0eXBlOiJpbmNsdWRlZ3JhcGhpY3MiLG1vZGU6ZC5tb2RlLGFsdDp5LHdpZHRoOnAsaGVpZ2h0OnYsdG90YWxoZWlnaHQ6YixzcmM6Rn06ZC5mb3JtYXRVbnN1cHBvcnRlZENtZCgiXFxpbmNsdWRlZ3JhcGhpY3MiKX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1VaChpLmhlaWdodCxzKSxkPTA7aS50b3RhbGhlaWdodC5udW1iZXI+MCYmKGQ9VWgoaS50b3RhbGhlaWdodCxzKS11KTt2YXIgcD0wO2kud2lkdGgubnVtYmVyPjAmJihwPVVoKGkud2lkdGgscykpO3ZhciB2PXtoZWlnaHQ6UmkodStkKX07cD4wJiYodi53aWR0aD1SaShwKSksZD4wJiYodi52ZXJ0aWNhbEFsaWduPVJpKC1kKSk7dmFyIGI9bmV3IGxIdChpLnNyYyxpLmFsdCx2KTtyZXR1cm4gYi5oZWlnaHQ9dSxiLmRlcHRoPWQsYn0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibWdseXBoIixbXSk7dS5zZXRBdHRyaWJ1dGUoImFsdCIsaS5hbHQpO3ZhciBkPVVoKGkuaGVpZ2h0LHMpLHA9MDtpZihpLnRvdGFsaGVpZ2h0Lm51bWJlcj4wJiYocD1VaChpLnRvdGFsaGVpZ2h0LHMpLWQsdS5zZXRBdHRyaWJ1dGUoInZhbGlnbiIsUmkoLXApKSksdS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsUmkoZCtwKSksaS53aWR0aC5udW1iZXI+MCl7dmFyIHY9VWgoaS53aWR0aCxzKTt1LnNldEF0dHJpYnV0ZSgid2lkdGgiLFJpKHYpKX1yZXR1cm4gdS5zZXRBdHRyaWJ1dGUoInNyYyIsaS5zcmMpLHV9fSksSmkoe3R5cGU6Imtlcm4iLG5hbWVzOlsiXFxrZXJuIiwiXFxta2VybiIsIlxcaHNraXAiLCJcXG1za2lwIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInNpemUiXSxwcmltaXRpdmU6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9WW8oc1swXSwic2l6ZSIpO2lmKHUuc2V0dGluZ3Muc3RyaWN0KXt2YXIgdj1kWzFdPT09Im0iLGI9cC52YWx1ZS51bml0PT09Im11Ijt2PyhifHx1LnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK2QrIiBzdXBwb3J0cyBvbmx5IG11IHVuaXRzLCAiKygibm90ICIrcC52YWx1ZS51bml0KyIgdW5pdHMiKSksdS5tb2RlIT09Im1hdGgiJiZ1LnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK2QrIiB3b3JrcyBvbmx5IGluIG1hdGggbW9kZSIpKTpiJiZ1LnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK2QrIiBkb2Vzbid0IHN1cHBvcnQgbXUgdW5pdHMiKX1yZXR1cm57dHlwZToia2VybiIsbW9kZTp1Lm1vZGUsZGltZW5zaW9uOnAudmFsdWV9fSxodG1sQnVpbGRlcihpLHMpe3JldHVybiB6bi5tYWtlR2x1ZShpLmRpbWVuc2lvbixzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PVVoKGkuZGltZW5zaW9uLHMpO3JldHVybiBuZXcgdmkuU3BhY2VOb2RlKHUpfX0pLEppKHt0eXBlOiJsYXAiLG5hbWVzOlsiXFxtYXRobGxhcCIsIlxcbWF0aHJsYXAiLCJcXG1hdGhjbGFwIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzBdO3JldHVybnt0eXBlOiJsYXAiLG1vZGU6dS5tb2RlLGFsaWdubWVudDpkLnNsaWNlKDUpLGJvZHk6cH19LGh0bWxCdWlsZGVyOihpLHMpPT57dmFyIHU7aS5hbGlnbm1lbnQ9PT0iY2xhcCI/KHU9em4ubWFrZVNwYW4oW10sW3V1KGkuYm9keSxzKV0pLHU9em4ubWFrZVNwYW4oWyJpbm5lciJdLFt1XSxzKSk6dT16bi5tYWtlU3BhbihbImlubmVyIl0sW3V1KGkuYm9keSxzKV0pO3ZhciBkPXpuLm1ha2VTcGFuKFsiZml4Il0sW10pLHA9em4ubWFrZVNwYW4oW2kuYWxpZ25tZW50XSxbdSxkXSxzKSx2PXpuLm1ha2VTcGFuKFsic3RydXQiXSk7cmV0dXJuIHYuc3R5bGUuaGVpZ2h0PVJpKHAuaGVpZ2h0K3AuZGVwdGgpLHAuZGVwdGgmJih2LnN0eWxlLnZlcnRpY2FsQWxpZ249UmkoLXAuZGVwdGgpKSxwLmNoaWxkcmVuLnVuc2hpZnQodikscD16bi5tYWtlU3BhbihbInRoaW5ib3giXSxbcF0scyksem4ubWFrZVNwYW4oWyJtb3JkIiwidmJveCJdLFtwXSxzKX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibXBhZGRlZCIsW0xsKGkuYm9keSxzKV0pO2lmKGkuYWxpZ25tZW50IT09InJsYXAiKXt2YXIgZD1pLmFsaWdubWVudD09PSJsbGFwIj8iLTEiOiItMC41Ijt1LnNldEF0dHJpYnV0ZSgibHNwYWNlIixkKyJ3aWR0aCIpfXJldHVybiB1LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwcHgiKSx1fX0pLEppKHt0eXBlOiJzdHlsaW5nIixuYW1lczpbIlxcKCIsIiQiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAsYWxsb3dlZEluTWF0aDohMX0saGFuZGxlcihpLHMpe3ZhcntmdW5jTmFtZTp1LHBhcnNlcjpkfT1pLHA9ZC5tb2RlO2Quc3dpdGNoTW9kZSgibWF0aCIpO3ZhciB2PXU9PT0iXFwoIj8iXFwpIjoiJCIsYj1kLnBhcnNlRXhwcmVzc2lvbighMSx2KTtyZXR1cm4gZC5leHBlY3QodiksZC5zd2l0Y2hNb2RlKHApLHt0eXBlOiJzdHlsaW5nIixtb2RlOmQubW9kZSxzdHlsZToidGV4dCIsYm9keTpifX19KSxKaSh7dHlwZToidGV4dCIsbmFtZXM6WyJcXCkiLCJcXF0iXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAsYWxsb3dlZEluTWF0aDohMX0saGFuZGxlcihpLHMpe3Rocm93IG5ldyBDaSgiTWlzbWF0Y2hlZCAiK2kuZnVuY05hbWUpfX0pO3ZhciBRemU9KGkscyk9Pntzd2l0Y2gocy5zdHlsZS5zaXplKXtjYXNlIFRhLkRJU1BMQVkuc2l6ZTpyZXR1cm4gaS5kaXNwbGF5O2Nhc2UgVGEuVEVYVC5zaXplOnJldHVybiBpLnRleHQ7Y2FzZSBUYS5TQ1JJUFQuc2l6ZTpyZXR1cm4gaS5zY3JpcHQ7Y2FzZSBUYS5TQ1JJUFRTQ1JJUFQuc2l6ZTpyZXR1cm4gaS5zY3JpcHRzY3JpcHQ7ZGVmYXVsdDpyZXR1cm4gaS50ZXh0fX07Smkoe3R5cGU6Im1hdGhjaG9pY2UiLG5hbWVzOlsiXFxtYXRoY2hvaWNlIl0scHJvcHM6e251bUFyZ3M6NCxwcmltaXRpdmU6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnV9PWk7cmV0dXJue3R5cGU6Im1hdGhjaG9pY2UiLG1vZGU6dS5tb2RlLGRpc3BsYXk6WGYoc1swXSksdGV4dDpYZihzWzFdKSxzY3JpcHQ6WGYoc1syXSksc2NyaXB0c2NyaXB0OlhmKHNbM10pfX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1RemUoaSxzKSxkPWQxKHUscywhMSk7cmV0dXJuIHpuLm1ha2VGcmFnbWVudChkKX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PVF6ZShpLHMpO3JldHVybiBfOSh1LHMpfX0pO3ZhciBKemU9KGkscyx1LGQscCx2LGIpPT57aT16bi5tYWtlU3BhbihbXSxbaV0pO3ZhciB5PXUmJllhLmlzQ2hhcmFjdGVyQm94KHUpLFQsXztpZihzKXt2YXIgQT11dShzLGQuaGF2aW5nU3R5bGUocC5zdXAoKSksZCk7Xz17ZWxlbTpBLGtlcm46TWF0aC5tYXgoZC5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzEsZC5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzMtQS5kZXB0aCl9fWlmKHUpe3ZhciBQPXV1KHUsZC5oYXZpbmdTdHlsZShwLnN1YigpKSxkKTtUPXtlbGVtOlAsa2VybjpNYXRoLm1heChkLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nMixkLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNC1QLmhlaWdodCl9fXZhciBSO2lmKF8mJlQpe3ZhciBGPWQuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1K1QuZWxlbS5oZWlnaHQrVC5lbGVtLmRlcHRoK1Qua2VybitpLmRlcHRoK2I7Uj16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6RixjaGlsZHJlbjpbe3R5cGU6Imtlcm4iLHNpemU6ZC5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzV9LHt0eXBlOiJlbGVtIixlbGVtOlQuZWxlbSxtYXJnaW5MZWZ0OlJpKC12KX0se3R5cGU6Imtlcm4iLHNpemU6VC5rZXJufSx7dHlwZToiZWxlbSIsZWxlbTppfSx7dHlwZToia2VybiIsc2l6ZTpfLmtlcm59LHt0eXBlOiJlbGVtIixlbGVtOl8uZWxlbSxtYXJnaW5MZWZ0OlJpKHYpfSx7dHlwZToia2VybiIsc2l6ZTpkLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNX1dfSxkKX1lbHNlIGlmKFQpe3ZhciBqPWkuaGVpZ2h0LWI7Uj16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToidG9wIixwb3NpdGlvbkRhdGE6aixjaGlsZHJlbjpbe3R5cGU6Imtlcm4iLHNpemU6ZC5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzV9LHt0eXBlOiJlbGVtIixlbGVtOlQuZWxlbSxtYXJnaW5MZWZ0OlJpKC12KX0se3R5cGU6Imtlcm4iLHNpemU6VC5rZXJufSx7dHlwZToiZWxlbSIsZWxlbTppfV19LGQpfWVsc2UgaWYoXyl7dmFyIEs9aS5kZXB0aCtiO1I9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImJvdHRvbSIscG9zaXRpb25EYXRhOkssY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOml9LHt0eXBlOiJrZXJuIixzaXplOl8ua2Vybn0se3R5cGU6ImVsZW0iLGVsZW06Xy5lbGVtLG1hcmdpbkxlZnQ6Umkodil9LHt0eXBlOiJrZXJuIixzaXplOmQuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1fV19LGQpfWVsc2UgcmV0dXJuIGk7dmFyIGVlPVtSXTtpZihUJiZ2IT09MCYmIXkpe3ZhciBpZT16bi5tYWtlU3BhbihbIm1zcGFjZSJdLFtdLGQpO2llLnN0eWxlLm1hcmdpblJpZ2h0PVJpKHYpLGVlLnVuc2hpZnQoaWUpfXJldHVybiB6bi5tYWtlU3BhbihbIm1vcCIsIm9wLWxpbWl0cyJdLGVlLGQpfSxaemU9WyJcXHNtYWxsaW50Il0sUEQ9KGkscyk9Pnt2YXIgdSxkLHA9ITEsdjtpLnR5cGU9PT0ic3Vwc3ViIj8odT1pLnN1cCxkPWkuc3ViLHY9WW8oaS5iYXNlLCJvcCIpLHA9ITApOnY9WW8oaSwib3AiKTt2YXIgYj1zLnN0eWxlLHk9ITE7Yi5zaXplPT09VGEuRElTUExBWS5zaXplJiZ2LnN5bWJvbCYmIVlhLmNvbnRhaW5zKFp6ZSx2Lm5hbWUpJiYoeT0hMCk7dmFyIFQ7aWYodi5zeW1ib2wpe3ZhciBfPXk/IlNpemUyLVJlZ3VsYXIiOiJTaXplMS1SZWd1bGFyIixBPSIiO2lmKCh2Lm5hbWU9PT0iXFxvaWludCJ8fHYubmFtZT09PSJcXG9paWludCIpJiYoQT12Lm5hbWUuc2xpY2UoMSksdi5uYW1lPUE9PT0ib2lpbnQiPyJcXGlpbnQiOiJcXGlpaW50IiksVD16bi5tYWtlU3ltYm9sKHYubmFtZSxfLCJtYXRoIixzLFsibW9wIiwib3Atc3ltYm9sIix5PyJsYXJnZS1vcCI6InNtYWxsLW9wIl0pLEEubGVuZ3RoPjApe3ZhciBQPVQuaXRhbGljLFI9em4uc3RhdGljU3ZnKEErIlNpemUiKyh5PyIyIjoiMSIpLHMpO1Q9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOlQsc2hpZnQ6MH0se3R5cGU6ImVsZW0iLGVsZW06UixzaGlmdDp5Py4wODowfV19LHMpLHYubmFtZT0iXFwiK0EsVC5jbGFzc2VzLnVuc2hpZnQoIm1vcCIpLFQuaXRhbGljPVB9fWVsc2UgaWYodi5ib2R5KXt2YXIgRj1kMSh2LmJvZHkscywhMCk7Ri5sZW5ndGg9PT0xJiZGWzBdaW5zdGFuY2VvZiBCdj8oVD1GWzBdLFQuY2xhc3Nlc1swXT0ibW9wIik6VD16bi5tYWtlU3BhbihbIm1vcCJdLEYscyl9ZWxzZXtmb3IodmFyIGo9W10sSz0xO0s8di5uYW1lLmxlbmd0aDtLKyspai5wdXNoKHpuLm1hdGhzeW0odi5uYW1lW0tdLHYubW9kZSxzKSk7VD16bi5tYWtlU3BhbihbIm1vcCJdLGoscyl9dmFyIGVlPTAsaWU9MDtyZXR1cm4oVCBpbnN0YW5jZW9mIEJ2fHx2Lm5hbWU9PT0iXFxvaWludCJ8fHYubmFtZT09PSJcXG9paWludCIpJiYhdi5zdXBwcmVzc0Jhc2VTaGlmdCYmKGVlPShULmhlaWdodC1ULmRlcHRoKS8yLXMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LGllPVQuaXRhbGljKSxwP0p6ZShULHUsZCxzLGIsaWUsZWUpOihlZSYmKFQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixULnN0eWxlLnRvcD1SaShlZSkpLFQpfSxkUj0oaSxzKT0+e3ZhciB1O2lmKGkuc3ltYm9sKXU9bmV3IEZ2KCJtbyIsW1J2KGkubmFtZSxpLm1vZGUpXSksWWEuY29udGFpbnMoWnplLGkubmFtZSkmJnUuc2V0QXR0cmlidXRlKCJsYXJnZW9wIiwiZmFsc2UiKTtlbHNlIGlmKGkuYm9keSl1PW5ldyBGdigibW8iLGoyKGkuYm9keSxzKSk7ZWxzZXt1PW5ldyBGdigibWkiLFtuZXcgbFIoaS5uYW1lLnNsaWNlKDEpKV0pO3ZhciBkPW5ldyBGdigibW8iLFtSdigi4oGhIiwidGV4dCIpXSk7aS5wYXJlbnRJc1N1cFN1Yj91PW5ldyBGdigibXJvdyIsW3UsZF0pOnU9YnplKFt1LGRdKX1yZXR1cm4gdX0saFZ0PXsi4oiPIjoiXFxwcm9kIiwi4oiQIjoiXFxjb3Byb2QiLCLiiJEiOiJcXHN1bSIsIuKLgCI6IlxcYmlnd2VkZ2UiLCLii4EiOiJcXGJpZ3ZlZSIsIuKLgiI6IlxcYmlnY2FwIiwi4ouDIjoiXFxiaWdjdXAiLCLiqIAiOiJcXGJpZ29kb3QiLCLiqIEiOiJcXGJpZ29wbHVzIiwi4qiCIjoiXFxiaWdvdGltZXMiLCLiqIQiOiJcXGJpZ3VwbHVzIiwi4qiGIjoiXFxiaWdzcWN1cCJ9O0ppKHt0eXBlOiJvcCIsbmFtZXM6WyJcXGNvcHJvZCIsIlxcYmlndmVlIiwiXFxiaWd3ZWRnZSIsIlxcYmlndXBsdXMiLCJcXGJpZ2NhcCIsIlxcYmlnY3VwIiwiXFxpbnRvcCIsIlxccHJvZCIsIlxcc3VtIiwiXFxiaWdvdGltZXMiLCJcXGJpZ29wbHVzIiwiXFxiaWdvZG90IiwiXFxiaWdzcWN1cCIsIlxcc21hbGxpbnQiLCLiiI8iLCLiiJAiLCLiiJEiLCLii4AiLCLii4EiLCLii4IiLCLii4MiLCLiqIAiLCLiqIEiLCLiqIIiLCLiqIQiLCLiqIYiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1kO3JldHVybiBwLmxlbmd0aD09PTEmJihwPWhWdFtwXSkse3R5cGU6Im9wIixtb2RlOnUubW9kZSxsaW1pdHM6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiEwLG5hbWU6cH19LGh0bWxCdWlsZGVyOlBELG1hdGhtbEJ1aWxkZXI6ZFJ9KSxKaSh7dHlwZToib3AiLG5hbWVzOlsiXFxtYXRob3AiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dX09aSxkPXNbMF07cmV0dXJue3R5cGU6Im9wIixtb2RlOnUubW9kZSxsaW1pdHM6ITEscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiExLGJvZHk6WGYoZCl9fSxodG1sQnVpbGRlcjpQRCxtYXRobWxCdWlsZGVyOmRSfSk7dmFyIGZWdD17IuKIqyI6IlxcaW50Iiwi4oisIjoiXFxpaW50Iiwi4oitIjoiXFxpaWludCIsIuKIriI6Ilxcb2ludCIsIuKIryI6Ilxcb2lpbnQiLCLiiLAiOiJcXG9paWludCJ9O0ppKHt0eXBlOiJvcCIsbmFtZXM6WyJcXGFyY3NpbiIsIlxcYXJjY29zIiwiXFxhcmN0YW4iLCJcXGFyY3RnIiwiXFxhcmNjdGciLCJcXGFyZyIsIlxcY2giLCJcXGNvcyIsIlxcY29zZWMiLCJcXGNvc2giLCJcXGNvdCIsIlxcY290ZyIsIlxcY290aCIsIlxcY3NjIiwiXFxjdGciLCJcXGN0aCIsIlxcZGVnIiwiXFxkaW0iLCJcXGV4cCIsIlxcaG9tIiwiXFxrZXIiLCJcXGxnIiwiXFxsbiIsIlxcbG9nIiwiXFxzZWMiLCJcXHNpbiIsIlxcc2luaCIsIlxcc2giLCJcXHRhbiIsIlxcdGFuaCIsIlxcdGciLCJcXHRoIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcihpKXt2YXJ7cGFyc2VyOnMsZnVuY05hbWU6dX09aTtyZXR1cm57dHlwZToib3AiLG1vZGU6cy5tb2RlLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMSxzeW1ib2w6ITEsbmFtZTp1fX0saHRtbEJ1aWxkZXI6UEQsbWF0aG1sQnVpbGRlcjpkUn0pLEppKHt0eXBlOiJvcCIsbmFtZXM6WyJcXGRldCIsIlxcZ2NkIiwiXFxpbmYiLCJcXGxpbSIsIlxcbWF4IiwiXFxtaW4iLCJcXFByIiwiXFxzdXAiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKGkpe3ZhcntwYXJzZXI6cyxmdW5jTmFtZTp1fT1pO3JldHVybnt0eXBlOiJvcCIsbW9kZTpzLm1vZGUsbGltaXRzOiEwLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxuYW1lOnV9fSxodG1sQnVpbGRlcjpQRCxtYXRobWxCdWlsZGVyOmRSfSksSmkoe3R5cGU6Im9wIixuYW1lczpbIlxcaW50IiwiXFxpaW50IiwiXFxpaWludCIsIlxcb2ludCIsIlxcb2lpbnQiLCJcXG9paWludCIsIuKIqyIsIuKIrCIsIuKIrSIsIuKIriIsIuKIryIsIuKIsCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7dmFye3BhcnNlcjpzLGZ1bmNOYW1lOnV9PWksZD11O3JldHVybiBkLmxlbmd0aD09PTEmJihkPWZWdFtkXSkse3R5cGU6Im9wIixtb2RlOnMubW9kZSxsaW1pdHM6ITEscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiEwLG5hbWU6ZH19LGh0bWxCdWlsZGVyOlBELG1hdGhtbEJ1aWxkZXI6ZFJ9KTt2YXIgZXFlPShpLHMpPT57dmFyIHUsZCxwPSExLHY7aS50eXBlPT09InN1cHN1YiI/KHU9aS5zdXAsZD1pLnN1Yix2PVlvKGkuYmFzZSwib3BlcmF0b3JuYW1lIikscD0hMCk6dj1ZbyhpLCJvcGVyYXRvcm5hbWUiKTt2YXIgYjtpZih2LmJvZHkubGVuZ3RoPjApe2Zvcih2YXIgeT12LmJvZHkubWFwKFA9Pnt2YXIgUj1QLnRleHQ7cmV0dXJuIHR5cGVvZiBSPT0ic3RyaW5nIj97dHlwZToidGV4dG9yZCIsbW9kZTpQLm1vZGUsdGV4dDpSfTpQfSksVD1kMSh5LHMud2l0aEZvbnQoIm1hdGhybSIpLCEwKSxfPTA7XzxULmxlbmd0aDtfKyspe3ZhciBBPVRbX107QSBpbnN0YW5jZW9mIEJ2JiYoQS50ZXh0PUEudGV4dC5yZXBsYWNlKC9cdTIyMTIvLCItIikucmVwbGFjZSgvXHUyMjE3LywiKiIpKX1iPXpuLm1ha2VTcGFuKFsibW9wIl0sVCxzKX1lbHNlIGI9em4ubWFrZVNwYW4oWyJtb3AiXSxbXSxzKTtyZXR1cm4gcD9KemUoYix1LGQscyxzLnN0eWxlLDAsMCk6Yn0sZFZ0PShpLHMpPT57Zm9yKHZhciB1PWoyKGkuYm9keSxzLndpdGhGb250KCJtYXRocm0iKSksZD0hMCxwPTA7cDx1Lmxlbmd0aDtwKyspe3ZhciB2PXVbcF07aWYoISh2IGluc3RhbmNlb2YgdmkuU3BhY2VOb2RlKSlpZih2IGluc3RhbmNlb2YgdmkuTWF0aE5vZGUpc3dpdGNoKHYudHlwZSl7Y2FzZSJtaSI6Y2FzZSJtbiI6Y2FzZSJtcyI6Y2FzZSJtc3BhY2UiOmNhc2UibXRleHQiOmJyZWFrO2Nhc2UibW8iOnt2YXIgYj12LmNoaWxkcmVuWzBdO3YuY2hpbGRyZW4ubGVuZ3RoPT09MSYmYiBpbnN0YW5jZW9mIHZpLlRleHROb2RlP2IudGV4dD1iLnRleHQucmVwbGFjZSgvXHUyMjEyLywiLSIpLnJlcGxhY2UoL1x1MjIxNy8sIioiKTpkPSExO2JyZWFrfWRlZmF1bHQ6ZD0hMX1lbHNlIGQ9ITF9aWYoZCl7dmFyIHk9dS5tYXAoQT0+QS50b1RleHQoKSkuam9pbigiIik7dT1bbmV3IHZpLlRleHROb2RlKHkpXX12YXIgVD1uZXcgdmkuTWF0aE5vZGUoIm1pIix1KTtULnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLCJub3JtYWwiKTt2YXIgXz1uZXcgdmkuTWF0aE5vZGUoIm1vIixbUnYoIuKBoSIsInRleHQiKV0pO3JldHVybiBpLnBhcmVudElzU3VwU3ViP25ldyB2aS5NYXRoTm9kZSgibXJvdyIsW1QsX10pOnZpLm5ld0RvY3VtZW50RnJhZ21lbnQoW1QsX10pfTtKaSh7dHlwZToib3BlcmF0b3JuYW1lIixuYW1lczpbIlxcb3BlcmF0b3JuYW1lQCIsIlxcb3BlcmF0b3JuYW1ld2l0aGxpbWl0cyJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZH09aSxwPXNbMF07cmV0dXJue3R5cGU6Im9wZXJhdG9ybmFtZSIsbW9kZTp1Lm1vZGUsYm9keTpYZihwKSxhbHdheXNIYW5kbGVTdXBTdWI6ZD09PSJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHMiLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMX19LGh0bWxCdWlsZGVyOmVxZSxtYXRobWxCdWlsZGVyOmRWdH0pLGV0KCJcXG9wZXJhdG9ybmFtZSIsIlxcQGlmc3Rhclxcb3BlcmF0b3JuYW1ld2l0aGxpbWl0c1xcb3BlcmF0b3JuYW1lQCIpLHpDKHt0eXBlOiJvcmRncm91cCIsaHRtbEJ1aWxkZXIoaSxzKXtyZXR1cm4gaS5zZW1pc2ltcGxlP3puLm1ha2VGcmFnbWVudChkMShpLmJvZHkscywhMSkpOnpuLm1ha2VTcGFuKFsibW9yZCJdLGQxKGkuYm9keSxzLCEwKSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3JldHVybiBfOShpLmJvZHkscywhMCl9fSksSmkoe3R5cGU6Im92ZXJsaW5lIixuYW1lczpbIlxcb3ZlcmxpbmUiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1fT1pLGQ9c1swXTtyZXR1cm57dHlwZToib3ZlcmxpbmUiLG1vZGU6dS5tb2RlLGJvZHk6ZH19LGh0bWxCdWlsZGVyKGkscyl7dmFyIHU9dXUoaS5ib2R5LHMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpLGQ9em4ubWFrZUxpbmVTcGFuKCJvdmVybGluZS1saW5lIixzKSxwPXMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyx2PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX0se3R5cGU6Imtlcm4iLHNpemU6MypwfSx7dHlwZToiZWxlbSIsZWxlbTpkfSx7dHlwZToia2VybiIsc2l6ZTpwfV19LHMpO3JldHVybiB6bi5tYWtlU3BhbihbIm1vcmQiLCJvdmVybGluZSJdLFt2XSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibW8iLFtuZXcgdmkuVGV4dE5vZGUoIuKAviIpXSk7dS5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBkPW5ldyB2aS5NYXRoTm9kZSgibW92ZXIiLFtMbChpLmJvZHkscyksdV0pO3JldHVybiBkLnNldEF0dHJpYnV0ZSgiYWNjZW50IiwidHJ1ZSIpLGR9fSksSmkoe3R5cGU6InBoYW50b20iLG5hbWVzOlsiXFxwaGFudG9tIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1fT1pLGQ9c1swXTtyZXR1cm57dHlwZToicGhhbnRvbSIsbW9kZTp1Lm1vZGUsYm9keTpYZihkKX19LGh0bWxCdWlsZGVyOihpLHMpPT57dmFyIHU9ZDEoaS5ib2R5LHMud2l0aFBoYW50b20oKSwhMSk7cmV0dXJuIHpuLm1ha2VGcmFnbWVudCh1KX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PWoyKGkuYm9keSxzKTtyZXR1cm4gbmV3IHZpLk1hdGhOb2RlKCJtcGhhbnRvbSIsdSl9fSksSmkoe3R5cGU6ImhwaGFudG9tIixuYW1lczpbIlxcaHBoYW50b20iXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnV9PWksZD1zWzBdO3JldHVybnt0eXBlOiJocGhhbnRvbSIsbW9kZTp1Lm1vZGUsYm9keTpkfX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT16bi5tYWtlU3BhbihbXSxbdXUoaS5ib2R5LHMud2l0aFBoYW50b20oKSldKTtpZih1LmhlaWdodD0wLHUuZGVwdGg9MCx1LmNoaWxkcmVuKWZvcih2YXIgZD0wO2Q8dS5jaGlsZHJlbi5sZW5ndGg7ZCsrKXUuY2hpbGRyZW5bZF0uaGVpZ2h0PTAsdS5jaGlsZHJlbltkXS5kZXB0aD0wO3JldHVybiB1PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX1dfSxzKSx6bi5tYWtlU3BhbihbIm1vcmQiXSxbdV0scyl9LG1hdGhtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1qMihYZihpLmJvZHkpLHMpLGQ9bmV3IHZpLk1hdGhOb2RlKCJtcGhhbnRvbSIsdSkscD1uZXcgdmkuTWF0aE5vZGUoIm1wYWRkZWQiLFtkXSk7cmV0dXJuIHAuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIwcHgiKSxwLnNldEF0dHJpYnV0ZSgiZGVwdGgiLCIwcHgiKSxwfX0pLEppKHt0eXBlOiJ2cGhhbnRvbSIsbmFtZXM6WyJcXHZwaGFudG9tIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1fT1pLGQ9c1swXTtyZXR1cm57dHlwZToidnBoYW50b20iLG1vZGU6dS5tb2RlLGJvZHk6ZH19LGh0bWxCdWlsZGVyOihpLHMpPT57dmFyIHU9em4ubWFrZVNwYW4oWyJpbm5lciJdLFt1dShpLmJvZHkscy53aXRoUGhhbnRvbSgpKV0pLGQ9em4ubWFrZVNwYW4oWyJmaXgiXSxbXSk7cmV0dXJuIHpuLm1ha2VTcGFuKFsibW9yZCIsInJsYXAiXSxbdSxkXSxzKX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PWoyKFhmKGkuYm9keSkscyksZD1uZXcgdmkuTWF0aE5vZGUoIm1waGFudG9tIix1KSxwPW5ldyB2aS5NYXRoTm9kZSgibXBhZGRlZCIsW2RdKTtyZXR1cm4gcC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMHB4IikscH19KSxKaSh7dHlwZToicmFpc2Vib3giLG5hbWVzOlsiXFxyYWlzZWJveCJdLHByb3BzOntudW1BcmdzOjIsYXJnVHlwZXM6WyJzaXplIiwiaGJveCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnV9PWksZD1ZbyhzWzBdLCJzaXplIikudmFsdWUscD1zWzFdO3JldHVybnt0eXBlOiJyYWlzZWJveCIsbW9kZTp1Lm1vZGUsZHk6ZCxib2R5OnB9fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PXV1KGkuYm9keSxzKSxkPVVoKGkuZHkscyk7cmV0dXJuIHpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOi1kLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1fV19LHMpfSxtYXRobWxCdWlsZGVyKGkscyl7dmFyIHU9bmV3IHZpLk1hdGhOb2RlKCJtcGFkZGVkIixbTGwoaS5ib2R5LHMpXSksZD1pLmR5Lm51bWJlcitpLmR5LnVuaXQ7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IixkKSx1fX0pLEppKHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXHJlbGF4Il0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKGkpe3ZhcntwYXJzZXI6c309aTtyZXR1cm57dHlwZToiaW50ZXJuYWwiLG1vZGU6cy5tb2RlfX19KSxKaSh7dHlwZToicnVsZSIsbmFtZXM6WyJcXHJ1bGUiXSxwcm9wczp7bnVtQXJnczoyLG51bU9wdGlvbmFsQXJnczoxLGFyZ1R5cGVzOlsic2l6ZSIsInNpemUiLCJzaXplIl19LGhhbmRsZXIoaSxzLHUpe3ZhcntwYXJzZXI6ZH09aSxwPXVbMF0sdj1ZbyhzWzBdLCJzaXplIiksYj1ZbyhzWzFdLCJzaXplIik7cmV0dXJue3R5cGU6InJ1bGUiLG1vZGU6ZC5tb2RlLHNoaWZ0OnAmJllvKHAsInNpemUiKS52YWx1ZSx3aWR0aDp2LnZhbHVlLGhlaWdodDpiLnZhbHVlfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT16bi5tYWtlU3BhbihbIm1vcmQiLCJydWxlIl0sW10scyksZD1VaChpLndpZHRoLHMpLHA9VWgoaS5oZWlnaHQscyksdj1pLnNoaWZ0P1VoKGkuc2hpZnQscyk6MDtyZXR1cm4gdS5zdHlsZS5ib3JkZXJSaWdodFdpZHRoPVJpKGQpLHUuc3R5bGUuYm9yZGVyVG9wV2lkdGg9UmkocCksdS5zdHlsZS5ib3R0b209UmkodiksdS53aWR0aD1kLHUuaGVpZ2h0PXArdix1LmRlcHRoPS12LHUubWF4Rm9udFNpemU9cCoxLjEyNSpzLnNpemVNdWx0aXBsaWVyLHV9LG1hdGhtbEJ1aWxkZXIoaSxzKXt2YXIgdT1VaChpLndpZHRoLHMpLGQ9VWgoaS5oZWlnaHQscykscD1pLnNoaWZ0P1VoKGkuc2hpZnQscyk6MCx2PXMuY29sb3ImJnMuZ2V0Q29sb3IoKXx8ImJsYWNrIixiPW5ldyB2aS5NYXRoTm9kZSgibXNwYWNlIik7Yi5zZXRBdHRyaWJ1dGUoIm1hdGhiYWNrZ3JvdW5kIix2KSxiLnNldEF0dHJpYnV0ZSgid2lkdGgiLFJpKHUpKSxiLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixSaShkKSk7dmFyIHk9bmV3IHZpLk1hdGhOb2RlKCJtcGFkZGVkIixbYl0pO3JldHVybiBwPj0wP3kuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFJpKHApKTooeS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsUmkocCkpLHkuc2V0QXR0cmlidXRlKCJkZXB0aCIsUmkoLXApKSkseS5zZXRBdHRyaWJ1dGUoInZvZmZzZXQiLFJpKHApKSx5fX0pO2Z1bmN0aW9uIHRxZShpLHMsdSl7Zm9yKHZhciBkPWQxKGkscywhMSkscD1zLnNpemVNdWx0aXBsaWVyL3Uuc2l6ZU11bHRpcGxpZXIsdj0wO3Y8ZC5sZW5ndGg7disrKXt2YXIgYj1kW3ZdLmNsYXNzZXMuaW5kZXhPZigic2l6aW5nIik7YjwwP0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGRbdl0uY2xhc3NlcyxzLnNpemluZ0NsYXNzZXModSkpOmRbdl0uY2xhc3Nlc1tiKzFdPT09InJlc2V0LXNpemUiK3Muc2l6ZSYmKGRbdl0uY2xhc3Nlc1tiKzFdPSJyZXNldC1zaXplIit1LnNpemUpLGRbdl0uaGVpZ2h0Kj1wLGRbdl0uZGVwdGgqPXB9cmV0dXJuIHpuLm1ha2VGcmFnbWVudChkKX12YXIgbnFlPVsiXFx0aW55IiwiXFxzaXhwdHNpemUiLCJcXHNjcmlwdHNpemUiLCJcXGZvb3Rub3Rlc2l6ZSIsIlxcc21hbGwiLCJcXG5vcm1hbHNpemUiLCJcXGxhcmdlIiwiXFxMYXJnZSIsIlxcTEFSR0UiLCJcXGh1Z2UiLCJcXEh1Z2UiXSxnVnQ9KGkscyk9Pnt2YXIgdT1zLmhhdmluZ1NpemUoaS5zaXplKTtyZXR1cm4gdHFlKGkuYm9keSx1LHMpfTtKaSh7dHlwZToic2l6aW5nIixuYW1lczpucWUscHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye2JyZWFrT25Ub2tlblRleHQ6dSxmdW5jTmFtZTpkLHBhcnNlcjpwfT1pLHY9cC5wYXJzZUV4cHJlc3Npb24oITEsdSk7cmV0dXJue3R5cGU6InNpemluZyIsbW9kZTpwLm1vZGUsc2l6ZTpucWUuaW5kZXhPZihkKSsxLGJvZHk6dn19LGh0bWxCdWlsZGVyOmdWdCxtYXRobWxCdWlsZGVyOihpLHMpPT57dmFyIHU9cy5oYXZpbmdTaXplKGkuc2l6ZSksZD1qMihpLmJvZHksdSkscD1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIsZCk7cmV0dXJuIHAuc2V0QXR0cmlidXRlKCJtYXRoc2l6ZSIsUmkodS5zaXplTXVsdGlwbGllcikpLHB9fSksSmkoe3R5cGU6InNtYXNoIixuYW1lczpbIlxcc21hc2giXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyx1KT0+e3ZhcntwYXJzZXI6ZH09aSxwPSExLHY9ITEsYj11WzBdJiZZbyh1WzBdLCJvcmRncm91cCIpO2lmKGIpZm9yKHZhciB5PSIiLFQ9MDtUPGIuYm9keS5sZW5ndGg7KytUKXt2YXIgXz1iLmJvZHlbVF07aWYoeT1fLnRleHQseT09PSJ0IilwPSEwO2Vsc2UgaWYoeT09PSJiIil2PSEwO2Vsc2V7cD0hMSx2PSExO2JyZWFrfX1lbHNlIHA9ITAsdj0hMDt2YXIgQT1zWzBdO3JldHVybnt0eXBlOiJzbWFzaCIsbW9kZTpkLm1vZGUsYm9keTpBLHNtYXNoSGVpZ2h0OnAsc21hc2hEZXB0aDp2fX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT16bi5tYWtlU3BhbihbXSxbdXUoaS5ib2R5LHMpXSk7aWYoIWkuc21hc2hIZWlnaHQmJiFpLnNtYXNoRGVwdGgpcmV0dXJuIHU7aWYoaS5zbWFzaEhlaWdodCYmKHUuaGVpZ2h0PTAsdS5jaGlsZHJlbikpZm9yKHZhciBkPTA7ZDx1LmNoaWxkcmVuLmxlbmd0aDtkKyspdS5jaGlsZHJlbltkXS5oZWlnaHQ9MDtpZihpLnNtYXNoRGVwdGgmJih1LmRlcHRoPTAsdS5jaGlsZHJlbikpZm9yKHZhciBwPTA7cDx1LmNoaWxkcmVuLmxlbmd0aDtwKyspdS5jaGlsZHJlbltwXS5kZXB0aD0wO3ZhciB2PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX1dfSxzKTtyZXR1cm4gem4ubWFrZVNwYW4oWyJtb3JkIl0sW3ZdLHMpfSxtYXRobWxCdWlsZGVyOihpLHMpPT57dmFyIHU9bmV3IHZpLk1hdGhOb2RlKCJtcGFkZGVkIixbTGwoaS5ib2R5LHMpXSk7cmV0dXJuIGkuc21hc2hIZWlnaHQmJnUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIwcHgiKSxpLnNtYXNoRGVwdGgmJnUuc2V0QXR0cmlidXRlKCJkZXB0aCIsIjBweCIpLHV9fSksSmkoe3R5cGU6InNxcnQiLG5hbWVzOlsiXFxzcXJ0Il0scHJvcHM6e251bUFyZ3M6MSxudW1PcHRpb25hbEFyZ3M6MX0saGFuZGxlcihpLHMsdSl7dmFye3BhcnNlcjpkfT1pLHA9dVswXSx2PXNbMF07cmV0dXJue3R5cGU6InNxcnQiLG1vZGU6ZC5tb2RlLGJvZHk6dixpbmRleDpwfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT11dShpLmJvZHkscy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7dS5oZWlnaHQ9PT0wJiYodS5oZWlnaHQ9cy5mb250TWV0cmljcygpLnhIZWlnaHQpLHU9em4ud3JhcEZyYWdtZW50KHUscyk7dmFyIGQ9cy5mb250TWV0cmljcygpLHA9ZC5kZWZhdWx0UnVsZVRoaWNrbmVzcyx2PXA7cy5zdHlsZS5pZDxUYS5URVhULmlkJiYodj1zLmZvbnRNZXRyaWNzKCkueEhlaWdodCk7dmFyIGI9cCt2LzQseT11LmhlaWdodCt1LmRlcHRoK2IrcCx7c3BhbjpULHJ1bGVXaWR0aDpfLGFkdmFuY2VXaWR0aDpBfT1CNy5zcXJ0SW1hZ2UoeSxzKSxQPVQuaGVpZ2h0LV87UD51LmhlaWdodCt1LmRlcHRoK2ImJihiPShiK1AtdS5oZWlnaHQtdS5kZXB0aCkvMik7dmFyIFI9VC5oZWlnaHQtdS5oZWlnaHQtYi1fO3Uuc3R5bGUucGFkZGluZ0xlZnQ9UmkoQSk7dmFyIEY9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1LHdyYXBwZXJDbGFzc2VzOlsic3ZnLWFsaWduIl19LHt0eXBlOiJrZXJuIixzaXplOi0odS5oZWlnaHQrUil9LHt0eXBlOiJlbGVtIixlbGVtOlR9LHt0eXBlOiJrZXJuIixzaXplOl99XX0scyk7aWYoaS5pbmRleCl7dmFyIGo9cy5oYXZpbmdTdHlsZShUYS5TQ1JJUFRTQ1JJUFQpLEs9dXUoaS5pbmRleCxqLHMpLGVlPS42KihGLmhlaWdodC1GLmRlcHRoKSxpZT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTotZWUsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOkt9XX0scyksb2U9em4ubWFrZVNwYW4oWyJyb290Il0sW2llXSk7cmV0dXJuIHpuLm1ha2VTcGFuKFsibW9yZCIsInNxcnQiXSxbb2UsRl0scyl9ZWxzZSByZXR1cm4gem4ubWFrZVNwYW4oWyJtb3JkIiwic3FydCJdLFtGXSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3Zhcntib2R5OnUsaW5kZXg6ZH09aTtyZXR1cm4gZD9uZXcgdmkuTWF0aE5vZGUoIm1yb290IixbTGwodSxzKSxMbChkLHMpXSk6bmV3IHZpLk1hdGhOb2RlKCJtc3FydCIsW0xsKHUscyldKX19KTt2YXIgcnFlPXtkaXNwbGF5OlRhLkRJU1BMQVksdGV4dDpUYS5URVhULHNjcmlwdDpUYS5TQ1JJUFQsc2NyaXB0c2NyaXB0OlRhLlNDUklQVFNDUklQVH07Smkoe3R5cGU6InN0eWxpbmciLG5hbWVzOlsiXFxkaXNwbGF5c3R5bGUiLCJcXHRleHRzdHlsZSIsIlxcc2NyaXB0c3R5bGUiLCJcXHNjcmlwdHNjcmlwdHN0eWxlIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcihpLHMpe3ZhcnticmVha09uVG9rZW5UZXh0OnUsZnVuY05hbWU6ZCxwYXJzZXI6cH09aSx2PXAucGFyc2VFeHByZXNzaW9uKCEwLHUpLGI9ZC5zbGljZSgxLGQubGVuZ3RoLTUpO3JldHVybnt0eXBlOiJzdHlsaW5nIixtb2RlOnAubW9kZSxzdHlsZTpiLGJvZHk6dn19LGh0bWxCdWlsZGVyKGkscyl7dmFyIHU9cnFlW2kuc3R5bGVdLGQ9cy5oYXZpbmdTdHlsZSh1KS53aXRoRm9udCgiIik7cmV0dXJuIHRxZShpLmJvZHksZCxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PXJxZVtpLnN0eWxlXSxkPXMuaGF2aW5nU3R5bGUodSkscD1qMihpLmJvZHksZCksdj1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIscCksYj17ZGlzcGxheTpbIjAiLCJ0cnVlIl0sdGV4dDpbIjAiLCJmYWxzZSJdLHNjcmlwdDpbIjEiLCJmYWxzZSJdLHNjcmlwdHNjcmlwdDpbIjIiLCJmYWxzZSJdfSx5PWJbaS5zdHlsZV07cmV0dXJuIHYuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIseVswXSksdi5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIseVsxXSksdn19KTt2YXIgcFZ0PWZ1bmN0aW9uKHMsdSl7dmFyIGQ9cy5iYXNlO2lmKGQpaWYoZC50eXBlPT09Im9wIil7dmFyIHA9ZC5saW1pdHMmJih1LnN0eWxlLnNpemU9PT1UYS5ESVNQTEFZLnNpemV8fGQuYWx3YXlzSGFuZGxlU3VwU3ViKTtyZXR1cm4gcD9QRDpudWxsfWVsc2UgaWYoZC50eXBlPT09Im9wZXJhdG9ybmFtZSIpe3ZhciB2PWQuYWx3YXlzSGFuZGxlU3VwU3ViJiYodS5zdHlsZS5zaXplPT09VGEuRElTUExBWS5zaXplfHxkLmxpbWl0cyk7cmV0dXJuIHY/ZXFlOm51bGx9ZWxzZXtpZihkLnR5cGU9PT0iYWNjZW50IilyZXR1cm4gWWEuaXNDaGFyYWN0ZXJCb3goZC5iYXNlKT9nYmU6bnVsbDtpZihkLnR5cGU9PT0iaG9yaXpCcmFjZSIpe3ZhciBiPSFzLnN1YjtyZXR1cm4gYj09PWQuaXNPdmVyP1h6ZTpudWxsfWVsc2UgcmV0dXJuIG51bGx9ZWxzZSByZXR1cm4gbnVsbH07ekMoe3R5cGU6InN1cHN1YiIsaHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT1wVnQoaSxzKTtpZih1KXJldHVybiB1KGkscyk7dmFye2Jhc2U6ZCxzdXA6cCxzdWI6dn09aSxiPXV1KGQscykseSxULF89cy5mb250TWV0cmljcygpLEE9MCxQPTAsUj1kJiZZYS5pc0NoYXJhY3RlckJveChkKTtpZihwKXt2YXIgRj1zLmhhdmluZ1N0eWxlKHMuc3R5bGUuc3VwKCkpO3k9dXUocCxGLHMpLFJ8fChBPWIuaGVpZ2h0LUYuZm9udE1ldHJpY3MoKS5zdXBEcm9wKkYuc2l6ZU11bHRpcGxpZXIvcy5zaXplTXVsdGlwbGllcil9aWYodil7dmFyIGo9cy5oYXZpbmdTdHlsZShzLnN0eWxlLnN1YigpKTtUPXV1KHYsaixzKSxSfHwoUD1iLmRlcHRoK2ouZm9udE1ldHJpY3MoKS5zdWJEcm9wKmouc2l6ZU11bHRpcGxpZXIvcy5zaXplTXVsdGlwbGllcil9dmFyIEs7cy5zdHlsZT09PVRhLkRJU1BMQVk/Sz1fLnN1cDE6cy5zdHlsZS5jcmFtcGVkP0s9Xy5zdXAzOks9Xy5zdXAyO3ZhciBlZT1zLnNpemVNdWx0aXBsaWVyLGllPVJpKC41L18ucHRQZXJFbS9lZSksb2U9bnVsbDtpZihUKXt2YXIgcGU9aS5iYXNlJiZpLmJhc2UudHlwZT09PSJvcCImJmkuYmFzZS5uYW1lJiYoaS5iYXNlLm5hbWU9PT0iXFxvaWludCJ8fGkuYmFzZS5uYW1lPT09Ilxcb2lpaW50Iik7KGIgaW5zdGFuY2VvZiBCdnx8cGUpJiYob2U9UmkoLWIuaXRhbGljKSl9dmFyIGJlO2lmKHkmJlQpe0E9TWF0aC5tYXgoQSxLLHkuZGVwdGgrLjI1Kl8ueEhlaWdodCksUD1NYXRoLm1heChQLF8uc3ViMik7dmFyIGFlPV8uZGVmYXVsdFJ1bGVUaGlja25lc3MsbmU9NCphZTtpZihBLXkuZGVwdGgtKFQuaGVpZ2h0LVApPG5lKXtQPW5lLShBLXkuZGVwdGgpK1QuaGVpZ2h0O3ZhciBzZT0uOCpfLnhIZWlnaHQtKEEteS5kZXB0aCk7c2U+MCYmKEErPXNlLFAtPXNlKX12YXIgZGU9W3t0eXBlOiJlbGVtIixlbGVtOlQsc2hpZnQ6UCxtYXJnaW5SaWdodDppZSxtYXJnaW5MZWZ0Om9lfSx7dHlwZToiZWxlbSIsZWxlbTp5LHNoaWZ0Oi1BLG1hcmdpblJpZ2h0OmllfV07YmU9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46ZGV9LHMpfWVsc2UgaWYoVCl7UD1NYXRoLm1heChQLF8uc3ViMSxULmhlaWdodC0uOCpfLnhIZWlnaHQpO3ZhciBYPVt7dHlwZToiZWxlbSIsZWxlbTpULG1hcmdpbkxlZnQ6b2UsbWFyZ2luUmlnaHQ6aWV9XTtiZT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTpQLGNoaWxkcmVuOlh9LHMpfWVsc2UgaWYoeSlBPU1hdGgubWF4KEEsSyx5LmRlcHRoKy4yNSpfLnhIZWlnaHQpLGJlPXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOi1BLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp5LG1hcmdpblJpZ2h0OmllfV19LHMpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJzdXBzdWIgbXVzdCBoYXZlIGVpdGhlciBzdXAgb3Igc3ViLiIpO3ZhciBnZT11YmUoYiwicmlnaHQiKXx8Im1vcmQiO3JldHVybiB6bi5tYWtlU3BhbihbZ2VdLFtiLHpuLm1ha2VTcGFuKFsibXN1cHN1YiJdLFtiZV0pXSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PSExLGQscDtpLmJhc2UmJmkuYmFzZS50eXBlPT09Imhvcml6QnJhY2UiJiYocD0hIWkuc3VwLHA9PT1pLmJhc2UuaXNPdmVyJiYodT0hMCxkPWkuYmFzZS5pc092ZXIpKSxpLmJhc2UmJihpLmJhc2UudHlwZT09PSJvcCJ8fGkuYmFzZS50eXBlPT09Im9wZXJhdG9ybmFtZSIpJiYoaS5iYXNlLnBhcmVudElzU3VwU3ViPSEwKTt2YXIgdj1bTGwoaS5iYXNlLHMpXTtpLnN1YiYmdi5wdXNoKExsKGkuc3ViLHMpKSxpLnN1cCYmdi5wdXNoKExsKGkuc3VwLHMpKTt2YXIgYjtpZih1KWI9ZD8ibW92ZXIiOiJtdW5kZXIiO2Vsc2UgaWYoaS5zdWIpaWYoaS5zdXApe3ZhciBfPWkuYmFzZTtfJiZfLnR5cGU9PT0ib3AiJiZfLmxpbWl0cyYmcy5zdHlsZT09PVRhLkRJU1BMQVl8fF8mJl8udHlwZT09PSJvcGVyYXRvcm5hbWUiJiZfLmFsd2F5c0hhbmRsZVN1cFN1YiYmKHMuc3R5bGU9PT1UYS5ESVNQTEFZfHxfLmxpbWl0cyk/Yj0ibXVuZGVyb3ZlciI6Yj0ibXN1YnN1cCJ9ZWxzZXt2YXIgVD1pLmJhc2U7VCYmVC50eXBlPT09Im9wIiYmVC5saW1pdHMmJihzLnN0eWxlPT09VGEuRElTUExBWXx8VC5hbHdheXNIYW5kbGVTdXBTdWIpfHxUJiZULnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmVC5hbHdheXNIYW5kbGVTdXBTdWImJihULmxpbWl0c3x8cy5zdHlsZT09PVRhLkRJU1BMQVkpP2I9Im11bmRlciI6Yj0ibXN1YiJ9ZWxzZXt2YXIgeT1pLmJhc2U7eSYmeS50eXBlPT09Im9wIiYmeS5saW1pdHMmJihzLnN0eWxlPT09VGEuRElTUExBWXx8eS5hbHdheXNIYW5kbGVTdXBTdWIpfHx5JiZ5LnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmeS5hbHdheXNIYW5kbGVTdXBTdWImJih5LmxpbWl0c3x8cy5zdHlsZT09PVRhLkRJU1BMQVkpP2I9Im1vdmVyIjpiPSJtc3VwIn1yZXR1cm4gbmV3IHZpLk1hdGhOb2RlKGIsdil9fSksekMoe3R5cGU6ImF0b20iLGh0bWxCdWlsZGVyKGkscyl7cmV0dXJuIHpuLm1hdGhzeW0oaS50ZXh0LGkubW9kZSxzLFsibSIraS5mYW1pbHldKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibW8iLFtSdihpLnRleHQsaS5tb2RlKV0pO2lmKGkuZmFtaWx5PT09ImJpbiIpe3ZhciBkPWZiZShpLHMpO2Q9PT0iYm9sZC1pdGFsaWMiJiZ1LnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLGQpfWVsc2UgaS5mYW1pbHk9PT0icHVuY3QiP3Uuc2V0QXR0cmlidXRlKCJzZXBhcmF0b3IiLCJ0cnVlIik6KGkuZmFtaWx5PT09Im9wZW4ifHxpLmZhbWlseT09PSJjbG9zZSIpJiZ1LnNldEF0dHJpYnV0ZSgic3RyZXRjaHkiLCJmYWxzZSIpO3JldHVybiB1fX0pO3ZhciBpcWU9e21pOiJpdGFsaWMiLG1uOiJub3JtYWwiLG10ZXh0OiJub3JtYWwifTt6Qyh7dHlwZToibWF0aG9yZCIsaHRtbEJ1aWxkZXIoaSxzKXtyZXR1cm4gem4ubWFrZU9yZChpLHMsIm1hdGhvcmQiKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibWkiLFtSdihpLnRleHQsaS5tb2RlLHMpXSksZD1mYmUoaSxzKXx8Iml0YWxpYyI7cmV0dXJuIGQhPT1pcWVbdS50eXBlXSYmdS5zZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50IixkKSx1fX0pLHpDKHt0eXBlOiJ0ZXh0b3JkIixodG1sQnVpbGRlcihpLHMpe3JldHVybiB6bi5tYWtlT3JkKGkscywidGV4dG9yZCIpfSxtYXRobWxCdWlsZGVyKGkscyl7dmFyIHU9UnYoaS50ZXh0LGkubW9kZSxzKSxkPWZiZShpLHMpfHwibm9ybWFsIixwO3JldHVybiBpLm1vZGU9PT0idGV4dCI/cD1uZXcgdmkuTWF0aE5vZGUoIm10ZXh0IixbdV0pOi9bMC05XS8udGVzdChpLnRleHQpP3A9bmV3IHZpLk1hdGhOb2RlKCJtbiIsW3VdKTppLnRleHQ9PT0iXFxwcmltZSI/cD1uZXcgdmkuTWF0aE5vZGUoIm1vIixbdV0pOnA9bmV3IHZpLk1hdGhOb2RlKCJtaSIsW3VdKSxkIT09aXFlW3AudHlwZV0mJnAuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsZCkscH19KTt2YXIgTWJlPXsiXFxub2JyZWFrIjoibm9icmVhayIsIlxcYWxsb3dicmVhayI6ImFsbG93YnJlYWsifSxEYmU9eyIgIjp7fSwiXFwgIjp7fSwifiI6e2NsYXNzTmFtZToibm9icmVhayJ9LCJcXHNwYWNlIjp7fSwiXFxub2JyZWFrc3BhY2UiOntjbGFzc05hbWU6Im5vYnJlYWsifX07ekMoe3R5cGU6InNwYWNpbmciLGh0bWxCdWlsZGVyKGkscyl7aWYoRGJlLmhhc093blByb3BlcnR5KGkudGV4dCkpe3ZhciB1PURiZVtpLnRleHRdLmNsYXNzTmFtZXx8IiI7aWYoaS5tb2RlPT09InRleHQiKXt2YXIgZD16bi5tYWtlT3JkKGkscywidGV4dG9yZCIpO3JldHVybiBkLmNsYXNzZXMucHVzaCh1KSxkfWVsc2UgcmV0dXJuIHpuLm1ha2VTcGFuKFsibXNwYWNlIix1XSxbem4ubWF0aHN5bShpLnRleHQsaS5tb2RlLHMpXSxzKX1lbHNle2lmKE1iZS5oYXNPd25Qcm9wZXJ0eShpLnRleHQpKXJldHVybiB6bi5tYWtlU3BhbihbIm1zcGFjZSIsTWJlW2kudGV4dF1dLFtdLHMpO3Rocm93IG5ldyBDaSgnVW5rbm93biB0eXBlIG9mIHNwYWNlICInK2kudGV4dCsnIicpfX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1O2lmKERiZS5oYXNPd25Qcm9wZXJ0eShpLnRleHQpKXU9bmV3IHZpLk1hdGhOb2RlKCJtdGV4dCIsW25ldyB2aS5UZXh0Tm9kZSgiwqAiKV0pO2Vsc2V7aWYoTWJlLmhhc093blByb3BlcnR5KGkudGV4dCkpcmV0dXJuIG5ldyB2aS5NYXRoTm9kZSgibXNwYWNlIik7dGhyb3cgbmV3IENpKCdVbmtub3duIHR5cGUgb2Ygc3BhY2UgIicraS50ZXh0KyciJyl9cmV0dXJuIHV9fSk7dmFyIHNxZT0oKT0+e3ZhciBpPW5ldyB2aS5NYXRoTm9kZSgibXRkIixbXSk7cmV0dXJuIGkuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjUwJSIpLGl9O3pDKHt0eXBlOiJ0YWciLG1hdGhtbEJ1aWxkZXIoaSxzKXt2YXIgdT1uZXcgdmkuTWF0aE5vZGUoIm10YWJsZSIsW25ldyB2aS5NYXRoTm9kZSgibXRyIixbc3FlKCksbmV3IHZpLk1hdGhOb2RlKCJtdGQiLFtfOShpLmJvZHkscyldKSxzcWUoKSxuZXcgdmkuTWF0aE5vZGUoIm10ZCIsW185KGkudGFnLHMpXSldKV0pO3JldHVybiB1LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxMDAlIiksdX19KTt2YXIgYXFlPXsiXFx0ZXh0Ijp2b2lkIDAsIlxcdGV4dHJtIjoidGV4dHJtIiwiXFx0ZXh0c2YiOiJ0ZXh0c2YiLCJcXHRleHR0dCI6InRleHR0dCIsIlxcdGV4dG5vcm1hbCI6InRleHRybSJ9LG9xZT17IlxcdGV4dGJmIjoidGV4dGJmIiwiXFx0ZXh0bWQiOiJ0ZXh0bWQifSxiVnQ9eyJcXHRleHRpdCI6InRleHRpdCIsIlxcdGV4dHVwIjoidGV4dHVwIn0sY3FlPShpLHMpPT57dmFyIHU9aS5mb250O3JldHVybiB1P2FxZVt1XT9zLndpdGhUZXh0Rm9udEZhbWlseShhcWVbdV0pOm9xZVt1XT9zLndpdGhUZXh0Rm9udFdlaWdodChvcWVbdV0pOnMud2l0aFRleHRGb250U2hhcGUoYlZ0W3VdKTpzfTtKaSh7dHlwZToidGV4dCIsbmFtZXM6WyJcXHRleHQiLCJcXHRleHRybSIsIlxcdGV4dHNmIiwiXFx0ZXh0dHQiLCJcXHRleHRub3JtYWwiLCJcXHRleHRiZiIsIlxcdGV4dG1kIiwiXFx0ZXh0aXQiLCJcXHRleHR1cCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il0sYWxsb3dlZEluQXJndW1lbnQ6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9c1swXTtyZXR1cm57dHlwZToidGV4dCIsbW9kZTp1Lm1vZGUsYm9keTpYZihwKSxmb250OmR9fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PWNxZShpLHMpLGQ9ZDEoaS5ib2R5LHUsITApO3JldHVybiB6bi5tYWtlU3BhbihbIm1vcmQiLCJ0ZXh0Il0sZCx1KX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PWNxZShpLHMpO3JldHVybiBfOShpLmJvZHksdSl9fSksSmkoe3R5cGU6InVuZGVybGluZSIsbmFtZXM6WyJcXHVuZGVybGluZSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToidW5kZXJsaW5lIixtb2RlOnUubW9kZSxib2R5OnNbMF19fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PXV1KGkuYm9keSxzKSxkPXpuLm1ha2VMaW5lU3BhbigidW5kZXJsaW5lLWxpbmUiLHMpLHA9cy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzLHY9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InRvcCIscG9zaXRpb25EYXRhOnUuaGVpZ2h0LGNoaWxkcmVuOlt7dHlwZToia2VybiIsc2l6ZTpwfSx7dHlwZToiZWxlbSIsZWxlbTpkfSx7dHlwZToia2VybiIsc2l6ZTozKnB9LHt0eXBlOiJlbGVtIixlbGVtOnV9XX0scyk7cmV0dXJuIHpuLm1ha2VTcGFuKFsibW9yZCIsInVuZGVybGluZSJdLFt2XSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibW8iLFtuZXcgdmkuVGV4dE5vZGUoIuKAviIpXSk7dS5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBkPW5ldyB2aS5NYXRoTm9kZSgibXVuZGVyIixbTGwoaS5ib2R5LHMpLHVdKTtyZXR1cm4gZC5zZXRBdHRyaWJ1dGUoImFjY2VudHVuZGVyIiwidHJ1ZSIpLGR9fSksSmkoe3R5cGU6InZjZW50ZXIiLG5hbWVzOlsiXFx2Y2VudGVyIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToidmNlbnRlciIsbW9kZTp1Lm1vZGUsYm9keTpzWzBdfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT11dShpLmJvZHkscyksZD1zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCxwPS41Kih1LmhlaWdodC1kLSh1LmRlcHRoK2QpKTtyZXR1cm4gem4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InNoaWZ0Iixwb3NpdGlvbkRhdGE6cCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX1dfSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3JldHVybiBuZXcgdmkuTWF0aE5vZGUoIm1wYWRkZWQiLFtMbChpLmJvZHkscyldLFsidmNlbnRlciJdKX19KSxKaSh7dHlwZToidmVyYiIsbmFtZXM6WyJcXHZlcmIiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIoaSxzLHUpe3Rocm93IG5ldyBDaSgiXFx2ZXJiIGVuZGVkIGJ5IGVuZCBvZiBsaW5lIGluc3RlYWQgb2YgbWF0Y2hpbmcgZGVsaW1pdGVyIil9LGh0bWxCdWlsZGVyKGkscyl7Zm9yKHZhciB1PXVxZShpKSxkPVtdLHA9cy5oYXZpbmdTdHlsZShzLnN0eWxlLnRleHQoKSksdj0wO3Y8dS5sZW5ndGg7disrKXt2YXIgYj11W3ZdO2I9PT0ifiImJihiPSJcXHRleHRhc2NpaXRpbGRlIiksZC5wdXNoKHpuLm1ha2VTeW1ib2woYiwiVHlwZXdyaXRlci1SZWd1bGFyIixpLm1vZGUscCxbIm1vcmQiLCJ0ZXh0dHQiXSkpfXJldHVybiB6bi5tYWtlU3BhbihbIm1vcmQiLCJ0ZXh0Il0uY29uY2F0KHAuc2l6aW5nQ2xhc3NlcyhzKSksem4udHJ5Q29tYmluZUNoYXJzKGQpLHApfSxtYXRobWxCdWlsZGVyKGkscyl7dmFyIHU9bmV3IHZpLlRleHROb2RlKHVxZShpKSksZD1uZXcgdmkuTWF0aE5vZGUoIm10ZXh0IixbdV0pO3JldHVybiBkLnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLCJtb25vc3BhY2UiKSxkfX0pO3ZhciB1cWU9aT0+aS5ib2R5LnJlcGxhY2UoLyAvZyxpLnN0YXI/IuKQoyI6IsKgIiksTDk9ZHplLGxxZT1gWyBccgoJXWAsbVZ0PSJcXFxcW2EtekEtWkBdKyIsdlZ0PSJcXFxcW15cdUQ4MDAtXHVERkZGXSIsd1Z0PSIoIittVnQrIikiK2xxZSsiKiIseVZ0PWBcXFxcKAp8WyBccgldKwo/KVsgXHIJXSpgLEliZT0iW8yALc2vXSIseFZ0PW5ldyBSZWdFeHAoSWJlKyIrJCIpLGtWdD0iKCIrbHFlKyIrKXwiKyh5VnQrInwiKSsiKFshLVxcW1xcXS3igKfigKot7Z+/76SALe+/v10iKyhJYmUrIioiKSsifFtcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXSIrKEliZSsiKiIpKyJ8XFxcXHZlcmJcXCooW15dKS4qP1xcNHxcXFxcdmVyYihbXiphLXpBLVpdKS4qP1xcNSIrKCJ8Iit3VnQpKygifCIrdlZ0KyIpIik7Y2xhc3MgaHFle2NvbnN0cnVjdG9yKHMsdSl7dGhpcy5pbnB1dD12b2lkIDAsdGhpcy5zZXR0aW5ncz12b2lkIDAsdGhpcy50b2tlblJlZ2V4PXZvaWQgMCx0aGlzLmNhdGNvZGVzPXZvaWQgMCx0aGlzLmlucHV0PXMsdGhpcy5zZXR0aW5ncz11LHRoaXMudG9rZW5SZWdleD1uZXcgUmVnRXhwKGtWdCwiZyIpLHRoaXMuY2F0Y29kZXM9eyIlIjoxNCwifiI6MTN9fXNldENhdGNvZGUocyx1KXt0aGlzLmNhdGNvZGVzW3NdPXV9bGV4KCl7dmFyIHM9dGhpcy5pbnB1dCx1PXRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXg7aWYodT09PXMubGVuZ3RoKXJldHVybiBuZXcgVTQoIkVPRiIsbmV3IGxtKHRoaXMsdSx1KSk7dmFyIGQ9dGhpcy50b2tlblJlZ2V4LmV4ZWMocyk7aWYoZD09PW51bGx8fGQuaW5kZXghPT11KXRocm93IG5ldyBDaSgiVW5leHBlY3RlZCBjaGFyYWN0ZXI6ICciK3NbdV0rIiciLG5ldyBVNChzW3VdLG5ldyBsbSh0aGlzLHUsdSsxKSkpO3ZhciBwPWRbNl18fGRbM118fChkWzJdPyJcXCAiOiIgIik7aWYodGhpcy5jYXRjb2Rlc1twXT09PTE0KXt2YXIgdj1zLmluZGV4T2YoYApgLHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpO3JldHVybiB2PT09LTE/KHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXg9cy5sZW5ndGgsdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoImNvbW1lbnRBdEVuZCIsIiUgY29tbWVudCBoYXMgbm8gdGVybWluYXRpbmcgbmV3bGluZTsgTGFUZVggd291bGQgZmFpbCBiZWNhdXNlIG9mIGNvbW1lbnRpbmcgdGhlIGVuZCBvZiBtYXRoIG1vZGUgKGUuZy4gJCkiKSk6dGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleD12KzEsdGhpcy5sZXgoKX1yZXR1cm4gbmV3IFU0KHAsbmV3IGxtKHRoaXMsdSx0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4KSl9fWNsYXNzIEVWdHtjb25zdHJ1Y3RvcihzLHUpe3M9PT12b2lkIDAmJihzPXt9KSx1PT09dm9pZCAwJiYodT17fSksdGhpcy5jdXJyZW50PXZvaWQgMCx0aGlzLmJ1aWx0aW5zPXZvaWQgMCx0aGlzLnVuZGVmU3RhY2s9dm9pZCAwLHRoaXMuY3VycmVudD11LHRoaXMuYnVpbHRpbnM9cyx0aGlzLnVuZGVmU3RhY2s9W119YmVnaW5Hcm91cCgpe3RoaXMudW5kZWZTdGFjay5wdXNoKHt9KX1lbmRHcm91cCgpe2lmKHRoaXMudW5kZWZTdGFjay5sZW5ndGg9PT0wKXRocm93IG5ldyBDaSgiVW5iYWxhbmNlZCBuYW1lc3BhY2UgZGVzdHJ1Y3Rpb246IGF0dGVtcHQgdG8gcG9wIGdsb2JhbCBuYW1lc3BhY2U7IHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyIpO3ZhciBzPXRoaXMudW5kZWZTdGFjay5wb3AoKTtmb3IodmFyIHUgaW4gcylzLmhhc093blByb3BlcnR5KHUpJiYoc1t1XT09bnVsbD9kZWxldGUgdGhpcy5jdXJyZW50W3VdOnRoaXMuY3VycmVudFt1XT1zW3VdKX1lbmRHcm91cHMoKXtmb3IoO3RoaXMudW5kZWZTdGFjay5sZW5ndGg+MDspdGhpcy5lbmRHcm91cCgpfWhhcyhzKXtyZXR1cm4gdGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KHMpfHx0aGlzLmJ1aWx0aW5zLmhhc093blByb3BlcnR5KHMpfWdldChzKXtyZXR1cm4gdGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KHMpP3RoaXMuY3VycmVudFtzXTp0aGlzLmJ1aWx0aW5zW3NdfXNldChzLHUsZCl7aWYoZD09PXZvaWQgMCYmKGQ9ITEpLGQpe2Zvcih2YXIgcD0wO3A8dGhpcy51bmRlZlN0YWNrLmxlbmd0aDtwKyspZGVsZXRlIHRoaXMudW5kZWZTdGFja1twXVtzXTt0aGlzLnVuZGVmU3RhY2subGVuZ3RoPjAmJih0aGlzLnVuZGVmU3RhY2tbdGhpcy51bmRlZlN0YWNrLmxlbmd0aC0xXVtzXT11KX1lbHNle3ZhciB2PXRoaXMudW5kZWZTdGFja1t0aGlzLnVuZGVmU3RhY2subGVuZ3RoLTFdO3YmJiF2Lmhhc093blByb3BlcnR5KHMpJiYodltzXT10aGlzLmN1cnJlbnRbc10pfXU9PW51bGw/ZGVsZXRlIHRoaXMuY3VycmVudFtzXTp0aGlzLmN1cnJlbnRbc109dX19dmFyIFRWdD0kemU7ZXQoIlxcbm9leHBhbmQiLGZ1bmN0aW9uKGkpe3ZhciBzPWkucG9wVG9rZW4oKTtyZXR1cm4gaS5pc0V4cGFuZGFibGUocy50ZXh0KSYmKHMubm9leHBhbmQ9ITAscy50cmVhdEFzUmVsYXg9ITApLHt0b2tlbnM6W3NdLG51bUFyZ3M6MH19KSxldCgiXFxleHBhbmRhZnRlciIsZnVuY3Rpb24oaSl7dmFyIHM9aS5wb3BUb2tlbigpO3JldHVybiBpLmV4cGFuZE9uY2UoITApLHt0b2tlbnM6W3NdLG51bUFyZ3M6MH19KSxldCgiXFxAZmlyc3RvZnR3byIsZnVuY3Rpb24oaSl7dmFyIHM9aS5jb25zdW1lQXJncygyKTtyZXR1cm57dG9rZW5zOnNbMF0sbnVtQXJnczowfX0pLGV0KCJcXEBzZWNvbmRvZnR3byIsZnVuY3Rpb24oaSl7dmFyIHM9aS5jb25zdW1lQXJncygyKTtyZXR1cm57dG9rZW5zOnNbMV0sbnVtQXJnczowfX0pLGV0KCJcXEBpZm5leHRjaGFyIixmdW5jdGlvbihpKXt2YXIgcz1pLmNvbnN1bWVBcmdzKDMpO2kuY29uc3VtZVNwYWNlcygpO3ZhciB1PWkuZnV0dXJlKCk7cmV0dXJuIHNbMF0ubGVuZ3RoPT09MSYmc1swXVswXS50ZXh0PT09dS50ZXh0P3t0b2tlbnM6c1sxXSxudW1BcmdzOjB9Ont0b2tlbnM6c1syXSxudW1BcmdzOjB9fSksZXQoIlxcQGlmc3RhciIsIlxcQGlmbmV4dGNoYXIgKntcXEBmaXJzdG9mdHdveyMxfX0iKSxldCgiXFxUZXh0T3JNYXRoIixmdW5jdGlvbihpKXt2YXIgcz1pLmNvbnN1bWVBcmdzKDIpO3JldHVybiBpLm1vZGU9PT0idGV4dCI/e3Rva2VuczpzWzBdLG51bUFyZ3M6MH06e3Rva2VuczpzWzFdLG51bUFyZ3M6MH19KTt2YXIgZnFlPXswOjAsMToxLDI6MiwzOjMsNDo0LDU6NSw2OjYsNzo3LDg6OCw5OjksYToxMCxBOjEwLGI6MTEsQjoxMSxjOjEyLEM6MTIsZDoxMyxEOjEzLGU6MTQsRToxNCxmOjE1LEY6MTV9O2V0KCJcXGNoYXIiLGZ1bmN0aW9uKGkpe3ZhciBzPWkucG9wVG9rZW4oKSx1LGQ9IiI7aWYocy50ZXh0PT09IiciKXU9OCxzPWkucG9wVG9rZW4oKTtlbHNlIGlmKHMudGV4dD09PSciJyl1PTE2LHM9aS5wb3BUb2tlbigpO2Vsc2UgaWYocy50ZXh0PT09ImAiKWlmKHM9aS5wb3BUb2tlbigpLHMudGV4dFswXT09PSJcXCIpZD1zLnRleHQuY2hhckNvZGVBdCgxKTtlbHNle2lmKHMudGV4dD09PSJFT0YiKXRocm93IG5ldyBDaSgiXFxjaGFyYCBtaXNzaW5nIGFyZ3VtZW50Iik7ZD1zLnRleHQuY2hhckNvZGVBdCgwKX1lbHNlIHU9MTA7aWYodSl7aWYoZD1mcWVbcy50ZXh0XSxkPT1udWxsfHxkPj11KXRocm93IG5ldyBDaSgiSW52YWxpZCBiYXNlLSIrdSsiIGRpZ2l0ICIrcy50ZXh0KTtmb3IodmFyIHA7KHA9ZnFlW2kuZnV0dXJlKCkudGV4dF0pIT1udWxsJiZwPHU7KWQqPXUsZCs9cCxpLnBvcFRva2VuKCl9cmV0dXJuIlxcQGNoYXJ7IitkKyJ9In0pO3ZhciBPYmU9KGkscyx1KT0+e3ZhciBkPWkuY29uc3VtZUFyZygpLnRva2VucztpZihkLmxlbmd0aCE9PTEpdGhyb3cgbmV3IENpKCJcXG5ld2NvbW1hbmQncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgbWFjcm8gbmFtZSIpO3ZhciBwPWRbMF0udGV4dCx2PWkuaXNEZWZpbmVkKHApO2lmKHYmJiFzKXRocm93IG5ldyBDaSgiXFxuZXdjb21tYW5keyIrcCsifSBhdHRlbXB0aW5nIHRvIHJlZGVmaW5lICIrKHArIjsgdXNlIFxccmVuZXdjb21tYW5kIikpO2lmKCF2JiYhdSl0aHJvdyBuZXcgQ2koIlxccmVuZXdjb21tYW5keyIrcCsifSB3aGVuIGNvbW1hbmQgIitwKyIgZG9lcyBub3QgeWV0IGV4aXN0OyB1c2UgXFxuZXdjb21tYW5kIik7dmFyIGI9MDtpZihkPWkuY29uc3VtZUFyZygpLnRva2VucyxkLmxlbmd0aD09PTEmJmRbMF0udGV4dD09PSJbIil7Zm9yKHZhciB5PSIiLFQ9aS5leHBhbmROZXh0VG9rZW4oKTtULnRleHQhPT0iXSImJlQudGV4dCE9PSJFT0YiOyl5Kz1ULnRleHQsVD1pLmV4cGFuZE5leHRUb2tlbigpO2lmKCF5Lm1hdGNoKC9eXHMqWzAtOV0rXHMqJC8pKXRocm93IG5ldyBDaSgiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzOiAiK3kpO2I9cGFyc2VJbnQoeSksZD1pLmNvbnN1bWVBcmcoKS50b2tlbnN9cmV0dXJuIGkubWFjcm9zLnNldChwLHt0b2tlbnM6ZCxudW1BcmdzOmJ9KSwiIn07ZXQoIlxcbmV3Y29tbWFuZCIsaT0+T2JlKGksITEsITApKSxldCgiXFxyZW5ld2NvbW1hbmQiLGk9Pk9iZShpLCEwLCExKSksZXQoIlxccHJvdmlkZWNvbW1hbmQiLGk9Pk9iZShpLCEwLCEwKSksZXQoIlxcbWVzc2FnZSIsaT0+e3ZhciBzPWkuY29uc3VtZUFyZ3MoMSlbMF07cmV0dXJuIGNvbnNvbGUubG9nKHMucmV2ZXJzZSgpLm1hcCh1PT51LnRleHQpLmpvaW4oIiIpKSwiIn0pLGV0KCJcXGVycm1lc3NhZ2UiLGk9Pnt2YXIgcz1pLmNvbnN1bWVBcmdzKDEpWzBdO3JldHVybiBjb25zb2xlLmVycm9yKHMucmV2ZXJzZSgpLm1hcCh1PT51LnRleHQpLmpvaW4oIiIpKSwiIn0pLGV0KCJcXHNob3ciLGk9Pnt2YXIgcz1pLnBvcFRva2VuKCksdT1zLnRleHQ7cmV0dXJuIGNvbnNvbGUubG9nKHMsaS5tYWNyb3MuZ2V0KHUpLEw5W3VdLFVsLm1hdGhbdV0sVWwudGV4dFt1XSksIiJ9KSxldCgiXFxiZ3JvdXAiLCJ7IiksZXQoIlxcZWdyb3VwIiwifSIpLGV0KCJ+IiwiXFxub2JyZWFrc3BhY2UiKSxldCgiXFxscSIsImAiKSxldCgiXFxycSIsIiciKSxldCgiXFxhYSIsIlxcciBhIiksZXQoIlxcQUEiLCJcXHIgQSIpLGV0KCJcXHRleHRjb3B5cmlnaHQiLCJcXGh0bWxAbWF0aG1se1xcdGV4dGNpcmNsZWR7Y319e1xcY2hhcmDCqX0iKSxldCgiXFxjb3B5cmlnaHQiLCJcXFRleHRPck1hdGh7XFx0ZXh0Y29weXJpZ2h0fXtcXHRleHR7XFx0ZXh0Y29weXJpZ2h0fX0iKSxldCgiXFx0ZXh0cmVnaXN0ZXJlZCIsIlxcaHRtbEBtYXRobWx7XFx0ZXh0Y2lyY2xlZHtcXHNjcmlwdHNpemUgUn19e1xcY2hhcmDCrn0iKSxldCgi4oSsIiwiXFxtYXRoc2Nye0J9IiksZXQoIuKEsCIsIlxcbWF0aHNjcntFfSIpLGV0KCLihLEiLCJcXG1hdGhzY3J7Rn0iKSxldCgi4oSLIiwiXFxtYXRoc2Nye0h9IiksZXQoIuKEkCIsIlxcbWF0aHNjcntJfSIpLGV0KCLihJIiLCJcXG1hdGhzY3J7TH0iKSxldCgi4oSzIiwiXFxtYXRoc2Nye019IiksZXQoIuKEmyIsIlxcbWF0aHNjcntSfSIpLGV0KCLihK0iLCJcXG1hdGhmcmFre0N9IiksZXQoIuKEjCIsIlxcbWF0aGZyYWt7SH0iKSxldCgi4oSoIiwiXFxtYXRoZnJha3tafSIpLGV0KCJcXEJiYmsiLCJcXEJiYntrfSIpLGV0KCLCtyIsIlxcY2RvdHAiKSxldCgiXFxsbGFwIiwiXFxtYXRobGxhcHtcXHRleHRybXsjMX19IiksZXQoIlxccmxhcCIsIlxcbWF0aHJsYXB7XFx0ZXh0cm17IzF9fSIpLGV0KCJcXGNsYXAiLCJcXG1hdGhjbGFwe1xcdGV4dHJteyMxfX0iKSxldCgiXFxtYXRoc3RydXQiLCJcXHZwaGFudG9teyh9IiksZXQoIlxcdW5kZXJiYXIiLCJcXHVuZGVybGluZXtcXHRleHR7IzF9fSIpLGV0KCJcXG5vdCIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbWF0aHJsYXBcXEBub3R9fXtcXGNoYXIiMzM4fScpLGV0KCJcXG5lcSIsIlxcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbm90PX19e1xcbWF0aHJlbHtcXGNoYXJg4omgfX0iKSxldCgiXFxuZSIsIlxcbmVxIiksZXQoIuKJoCIsIlxcbmVxIiksZXQoIlxcbm90aW4iLCJcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHt7XFxpbn1cXG1hdGhsbGFwey9cXG1za2lwMW11fX19e1xcbWF0aHJlbHtcXGNoYXJg4oiJfX0iKSxldCgi4oiJIiwiXFxub3RpbiIpLGV0KCLiiZgiLCJcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHs9XFxrZXJuey0xZW19XFxyYWlzZWJveHswLjRlbX17JFxcc2NyaXB0c2l6ZVxcZnJvd24kfX19e1xcbWF0aHJlbHtcXGNoYXJg4omYfX0iKSxldCgi4omZIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcd2VkZ2V9ez19fXtcXG1hdGhyZWx7XFxjaGFyYOKJmH19IiksZXQoIuKJmiIsIlxcaHRtbEBtYXRobWx7XFxzdGFja3JlbHtcXHRpbnlcXHZlZX17PX19e1xcbWF0aHJlbHtcXGNoYXJg4omafX0iKSxldCgi4ombIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcc2NyaXB0c2l6ZVxcc3Rhcn17PX19e1xcbWF0aHJlbHtcXGNoYXJg4ombfX0iKSxldCgi4omdIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcbWF0aHJte2RlZn19ez19fXtcXG1hdGhyZWx7XFxjaGFyYOKJnX19IiksZXQoIuKJniIsIlxcaHRtbEBtYXRobWx7XFxzdGFja3JlbHtcXHRpbnlcXG1hdGhybXttfX17PX19e1xcbWF0aHJlbHtcXGNoYXJg4omefX0iKSxldCgi4omfIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueT99ez19fXtcXG1hdGhyZWx7XFxjaGFyYOKJn319IiksZXQoIuKfgiIsIlxccGVycCIpLGV0KCLigLwiLCJcXG1hdGhjbG9zZXshXFxta2Vybi0wLjhtdSF9IiksZXQoIuKIjCIsIlxcbm90bmkiKSxldCgi4oycIiwiXFx1bGNvcm5lciIpLGV0KCLijJ0iLCJcXHVyY29ybmVyIiksZXQoIuKMniIsIlxcbGxjb3JuZXIiKSxldCgi4oyfIiwiXFxscmNvcm5lciIpLGV0KCLCqSIsIlxcY29weXJpZ2h0IiksZXQoIsKuIiwiXFx0ZXh0cmVnaXN0ZXJlZCIpLGV0KCLvuI8iLCJcXHRleHRyZWdpc3RlcmVkIiksZXQoIlxcdWxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxY319JyksZXQoIlxcdXJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZH19JyksZXQoIlxcbGxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZX19JyksZXQoIlxcbHJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZn19JyksZXQoIlxcdmRvdHMiLCJcXG1hdGhvcmR7XFx2YXJ2ZG90c1xccnVsZXswcHR9ezE1cHR9fSIpLGV0KCLii64iLCJcXHZkb3RzIiksZXQoIlxcdmFyR2FtbWEiLCJcXG1hdGhpdHtcXEdhbW1hfSIpLGV0KCJcXHZhckRlbHRhIiwiXFxtYXRoaXR7XFxEZWx0YX0iKSxldCgiXFx2YXJUaGV0YSIsIlxcbWF0aGl0e1xcVGhldGF9IiksZXQoIlxcdmFyTGFtYmRhIiwiXFxtYXRoaXR7XFxMYW1iZGF9IiksZXQoIlxcdmFyWGkiLCJcXG1hdGhpdHtcXFhpfSIpLGV0KCJcXHZhclBpIiwiXFxtYXRoaXR7XFxQaX0iKSxldCgiXFx2YXJTaWdtYSIsIlxcbWF0aGl0e1xcU2lnbWF9IiksZXQoIlxcdmFyVXBzaWxvbiIsIlxcbWF0aGl0e1xcVXBzaWxvbn0iKSxldCgiXFx2YXJQaGkiLCJcXG1hdGhpdHtcXFBoaX0iKSxldCgiXFx2YXJQc2kiLCJcXG1hdGhpdHtcXFBzaX0iKSxldCgiXFx2YXJPbWVnYSIsIlxcbWF0aGl0e1xcT21lZ2F9IiksZXQoIlxcc3Vic3RhY2siLCJcXGJlZ2lue3N1YmFycmF5fXtjfSMxXFxlbmR7c3ViYXJyYXl9IiksZXQoIlxcY29sb24iLCJcXG5vYnJlYWtcXG1za2lwMm11XFxtYXRocHVuY3R7fVxcbWF0aGNob2ljZXtcXG1rZXJuLTNtdX17XFxta2Vybi0zbXV9e317fXs6fVxcbXNraXA2bXVcXHJlbGF4IiksZXQoIlxcYm94ZWQiLCJcXGZib3h7JFxcZGlzcGxheXN0eWxleyMxfSR9IiksZXQoIlxcaWZmIiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRyaWdodGFycm93XFw7IiksZXQoIlxcaW1wbGllcyIsIlxcRE9UU0JcXDtcXExvbmdyaWdodGFycm93XFw7IiksZXQoIlxcaW1wbGllZGJ5IiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRhcnJvd1xcOyIpO3ZhciBkcWU9eyIsIjoiXFxkb3RzYyIsIlxcbm90IjoiXFxkb3RzYiIsIisiOiJcXGRvdHNiIiwiPSI6IlxcZG90c2IiLCI8IjoiXFxkb3RzYiIsIj4iOiJcXGRvdHNiIiwiLSI6IlxcZG90c2IiLCIqIjoiXFxkb3RzYiIsIjoiOiJcXGRvdHNiIiwiXFxET1RTQiI6IlxcZG90c2IiLCJcXGNvcHJvZCI6IlxcZG90c2IiLCJcXGJpZ3ZlZSI6IlxcZG90c2IiLCJcXGJpZ3dlZGdlIjoiXFxkb3RzYiIsIlxcYmlndXBsdXMiOiJcXGRvdHNiIiwiXFxiaWdjYXAiOiJcXGRvdHNiIiwiXFxiaWdjdXAiOiJcXGRvdHNiIiwiXFxwcm9kIjoiXFxkb3RzYiIsIlxcc3VtIjoiXFxkb3RzYiIsIlxcYmlnb3RpbWVzIjoiXFxkb3RzYiIsIlxcYmlnb3BsdXMiOiJcXGRvdHNiIiwiXFxiaWdvZG90IjoiXFxkb3RzYiIsIlxcYmlnc3FjdXAiOiJcXGRvdHNiIiwiXFxBbmQiOiJcXGRvdHNiIiwiXFxsb25ncmlnaHRhcnJvdyI6IlxcZG90c2IiLCJcXExvbmdyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcbG9uZ2xlZnRhcnJvdyI6IlxcZG90c2IiLCJcXExvbmdsZWZ0YXJyb3ciOiJcXGRvdHNiIiwiXFxsb25nbGVmdHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxMb25nbGVmdHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxtYXBzdG8iOiJcXGRvdHNiIiwiXFxsb25nbWFwc3RvIjoiXFxkb3RzYiIsIlxcaG9va3JpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxkb3RlcSI6IlxcZG90c2IiLCJcXG1hdGhiaW4iOiJcXGRvdHNiIiwiXFxtYXRocmVsIjoiXFxkb3RzYiIsIlxccmVsYmFyIjoiXFxkb3RzYiIsIlxcUmVsYmFyIjoiXFxkb3RzYiIsIlxceHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFx4bGVmdGFycm93IjoiXFxkb3RzYiIsIlxcRE9UU0kiOiJcXGRvdHNpIiwiXFxpbnQiOiJcXGRvdHNpIiwiXFxvaW50IjoiXFxkb3RzaSIsIlxcaWludCI6IlxcZG90c2kiLCJcXGlpaW50IjoiXFxkb3RzaSIsIlxcaWlpaW50IjoiXFxkb3RzaSIsIlxcaWRvdHNpbnQiOiJcXGRvdHNpIiwiXFxET1RTWCI6IlxcZG90c3gifTtldCgiXFxkb3RzIixmdW5jdGlvbihpKXt2YXIgcz0iXFxkb3RzbyIsdT1pLmV4cGFuZEFmdGVyRnV0dXJlKCkudGV4dDtyZXR1cm4gdSBpbiBkcWU/cz1kcWVbdV06KHUuc2xpY2UoMCw0KT09PSJcXG5vdCJ8fHUgaW4gVWwubWF0aCYmWWEuY29udGFpbnMoWyJiaW4iLCJyZWwiXSxVbC5tYXRoW3VdLmdyb3VwKSkmJihzPSJcXGRvdHNiIiksc30pO3ZhciBOYmU9eyIpIjohMCwiXSI6ITAsIlxccmJyYWNrIjohMCwiXFx9IjohMCwiXFxyYnJhY2UiOiEwLCJcXHJhbmdsZSI6ITAsIlxccmNlaWwiOiEwLCJcXHJmbG9vciI6ITAsIlxccmdyb3VwIjohMCwiXFxybW91c3RhY2hlIjohMCwiXFxyaWdodCI6ITAsIlxcYmlnciI6ITAsIlxcYmlnZ3IiOiEwLCJcXEJpZ3IiOiEwLCJcXEJpZ2dyIjohMCwkOiEwLCI7IjohMCwiLiI6ITAsIiwiOiEwfTtldCgiXFxkb3RzbyIsZnVuY3Rpb24oaSl7dmFyIHM9aS5mdXR1cmUoKS50ZXh0O3JldHVybiBzIGluIE5iZT8iXFxsZG90c1xcLCI6IlxcbGRvdHMifSksZXQoIlxcZG90c2MiLGZ1bmN0aW9uKGkpe3ZhciBzPWkuZnV0dXJlKCkudGV4dDtyZXR1cm4gcyBpbiBOYmUmJnMhPT0iLCI/IlxcbGRvdHNcXCwiOiJcXGxkb3RzIn0pLGV0KCJcXGNkb3RzIixmdW5jdGlvbihpKXt2YXIgcz1pLmZ1dHVyZSgpLnRleHQ7cmV0dXJuIHMgaW4gTmJlPyJcXEBjZG90c1xcLCI6IlxcQGNkb3RzIn0pLGV0KCJcXGRvdHNiIiwiXFxjZG90cyIpLGV0KCJcXGRvdHNtIiwiXFxjZG90cyIpLGV0KCJcXGRvdHNpIiwiXFwhXFxjZG90cyIpLGV0KCJcXGRvdHN4IiwiXFxsZG90c1xcLCIpLGV0KCJcXERPVFNJIiwiXFxyZWxheCIpLGV0KCJcXERPVFNCIiwiXFxyZWxheCIpLGV0KCJcXERPVFNYIiwiXFxyZWxheCIpLGV0KCJcXHRtc3BhY2UiLCJcXFRleHRPck1hdGh7XFxrZXJuIzEjM317XFxtc2tpcCMxIzJ9XFxyZWxheCIpLGV0KCJcXCwiLCJcXHRtc3BhY2UrezNtdX17LjE2NjdlbX0iKSxldCgiXFx0aGluc3BhY2UiLCJcXCwiKSxldCgiXFw+IiwiXFxtc2tpcHs0bXV9IiksZXQoIlxcOiIsIlxcdG1zcGFjZSt7NG11fXsuMjIyMmVtfSIpLGV0KCJcXG1lZHNwYWNlIiwiXFw6IiksZXQoIlxcOyIsIlxcdG1zcGFjZSt7NW11fXsuMjc3N2VtfSIpLGV0KCJcXHRoaWNrc3BhY2UiLCJcXDsiKSxldCgiXFwhIiwiXFx0bXNwYWNlLXszbXV9ey4xNjY3ZW19IiksZXQoIlxcbmVndGhpbnNwYWNlIiwiXFwhIiksZXQoIlxcbmVnbWVkc3BhY2UiLCJcXHRtc3BhY2UtezRtdX17LjIyMjJlbX0iKSxldCgiXFxuZWd0aGlja3NwYWNlIiwiXFx0bXNwYWNlLXs1bXV9ey4yNzdlbX0iKSxldCgiXFxlbnNwYWNlIiwiXFxrZXJuLjVlbSAiKSxldCgiXFxlbnNraXAiLCJcXGhza2lwLjVlbVxccmVsYXgiKSxldCgiXFxxdWFkIiwiXFxoc2tpcDFlbVxccmVsYXgiKSxldCgiXFxxcXVhZCIsIlxcaHNraXAyZW1cXHJlbGF4IiksZXQoIlxcdGFnIiwiXFxAaWZzdGFyXFx0YWdAbGl0ZXJhbFxcdGFnQHBhcmVuIiksZXQoIlxcdGFnQHBhcmVuIiwiXFx0YWdAbGl0ZXJhbHsoeyMxfSl9IiksZXQoIlxcdGFnQGxpdGVyYWwiLGk9PntpZihpLm1hY3Jvcy5nZXQoIlxcZGZAdGFnIikpdGhyb3cgbmV3IENpKCJNdWx0aXBsZSBcXHRhZyIpO3JldHVybiJcXGdkZWZcXGRmQHRhZ3tcXHRleHR7IzF9fSJ9KSxldCgiXFxibW9kIiwiXFxtYXRoY2hvaWNle1xcbXNraXAxbXV9e1xcbXNraXAxbXV9e1xcbXNraXA1bXV9e1xcbXNraXA1bXV9XFxtYXRoYmlue1xccm0gbW9kfVxcbWF0aGNob2ljZXtcXG1za2lwMW11fXtcXG1za2lwMW11fXtcXG1za2lwNW11fXtcXG1za2lwNW11fSIpLGV0KCJcXHBvZCIsIlxcYWxsb3dicmVha1xcbWF0aGNob2ljZXtcXG1rZXJuMThtdX17XFxta2VybjhtdX17XFxta2VybjhtdX17XFxta2VybjhtdX0oIzEpIiksZXQoIlxccG1vZCIsIlxccG9ke3tcXHJtIG1vZH1cXG1rZXJuNm11IzF9IiksZXQoIlxcbW9kIiwiXFxhbGxvd2JyZWFrXFxtYXRoY2hvaWNle1xcbWtlcm4xOG11fXtcXG1rZXJuMTJtdX17XFxta2VybjEybXV9e1xcbWtlcm4xMm11fXtcXHJtIG1vZH1cXCxcXCwjMSIpLGV0KCJcXG5ld2xpbmUiLCJcXFxcXFxyZWxheCIpLGV0KCJcXFRlWCIsIlxcdGV4dHJte1xcaHRtbEBtYXRobWx7VFxca2Vybi0uMTY2N2VtXFxyYWlzZWJveHstLjVleH17RX1cXGtlcm4tLjEyNWVtWH17VGVYfX0iKTt2YXIgZ3FlPVJpKEs0WyJNYWluLVJlZ3VsYXIiXVsiVCIuY2hhckNvZGVBdCgwKV1bMV0tLjcqSzRbIk1haW4tUmVndWxhciJdWyJBIi5jaGFyQ29kZUF0KDApXVsxXSk7ZXQoIlxcTGFUZVgiLCJcXHRleHRybXtcXGh0bWxAbWF0aG1seyIrKCJMXFxrZXJuLS4zNmVtXFxyYWlzZWJveHsiK2dxZSsifXtcXHNjcmlwdHN0eWxlIEF9IikrIlxca2Vybi0uMTVlbVxcVGVYfXtMYVRlWH19IiksZXQoIlxcS2FUZVgiLCJcXHRleHRybXtcXGh0bWxAbWF0aG1seyIrKCJLXFxrZXJuLS4xN2VtXFxyYWlzZWJveHsiK2dxZSsifXtcXHNjcmlwdHN0eWxlIEF9IikrIlxca2Vybi0uMTVlbVxcVGVYfXtLYVRlWH19IiksZXQoIlxcaHNwYWNlIiwiXFxAaWZzdGFyXFxAaHNwYWNlclxcQGhzcGFjZSIpLGV0KCJcXEBoc3BhY2UiLCJcXGhza2lwICMxXFxyZWxheCIpLGV0KCJcXEBoc3BhY2VyIiwiXFxydWxlezBwdH17MHB0fVxcaHNraXAgIzFcXHJlbGF4IiksZXQoIlxcb3JkaW5hcnljb2xvbiIsIjoiKSxldCgiXFx2Y2VudGNvbG9uIiwiXFxtYXRocmVse1xcbWF0aG9wXFxvcmRpbmFyeWNvbG9ufSIpLGV0KCJcXGRibGNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tLjltdX1cXHZjZW50Y29sb259fXtcXG1hdGhvcHtcXGNoYXIiMjIzN319JyksZXQoIlxcY29sb25lcXEiLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX09fX17XFxtYXRob3B7XFxjaGFyIjIyNTR9fScpLGV0KCJcXENvbG9uZXFxIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19fXtcXG1hdGhvcHtcXGNoYXIiMjIzN1xcY2hhciIzZH19JyksZXQoIlxcY29sb25lcSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX19e1xcbWF0aG9we1xcY2hhciIzYVxcY2hhciIyMjEyfX0nKSxldCgiXFxDb2xvbmVxIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX19e1xcbWF0aG9we1xcY2hhciIyMjM3XFxjaGFyIjIyMTJ9fScpLGV0KCJcXGVxcWNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7PVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjU1fX0nKSxldCgiXFxFcXFjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVsez1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGRibGNvbG9ufX17XFxtYXRob3B7XFxjaGFyIjNkXFxjaGFyIjIyMzd9fScpLGV0KCJcXGVxY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXG1hdGhyZWx7LX1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259fXtcXG1hdGhvcHtcXGNoYXIiMjIzOX19JyksZXQoIlxcRXFjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259fXtcXG1hdGhvcHtcXGNoYXIiMjIxMlxcY2hhciIyMjM3fX0nKSxldCgiXFxjb2xvbmFwcHJveCIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcYXBwcm94fX17XFxtYXRob3B7XFxjaGFyIjNhXFxjaGFyIjIyNDh9fScpLGV0KCJcXENvbG9uYXBwcm94IiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcYXBwcm94fX17XFxtYXRob3B7XFxjaGFyIjIyMzdcXGNoYXIiMjI0OH19JyksZXQoIlxcY29sb25zaW0iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHNpbX19e1xcbWF0aG9we1xcY2hhciIzYVxcY2hhciIyMjNjfX0nKSxldCgiXFxDb2xvbnNpbSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHNpbX19e1xcbWF0aG9we1xcY2hhciIyMjM3XFxjaGFyIjIyM2N9fScpLGV0KCLiiLciLCJcXGRibGNvbG9uIiksZXQoIuKIuSIsIlxcZXFjb2xvbiIpLGV0KCLiiZQiLCJcXGNvbG9uZXFxIiksZXQoIuKJlSIsIlxcZXFxY29sb24iKSxldCgi4qm0IiwiXFxDb2xvbmVxcSIpLGV0KCJcXHJhdGlvIiwiXFx2Y2VudGNvbG9uIiksZXQoIlxcY29sb25jb2xvbiIsIlxcZGJsY29sb24iKSxldCgiXFxjb2xvbmVxdWFscyIsIlxcY29sb25lcXEiKSxldCgiXFxjb2xvbmNvbG9uZXF1YWxzIiwiXFxDb2xvbmVxcSIpLGV0KCJcXGVxdWFsc2NvbG9uIiwiXFxlcXFjb2xvbiIpLGV0KCJcXGVxdWFsc2NvbG9uY29sb24iLCJcXEVxcWNvbG9uIiksZXQoIlxcY29sb25taW51cyIsIlxcY29sb25lcSIpLGV0KCJcXGNvbG9uY29sb25taW51cyIsIlxcQ29sb25lcSIpLGV0KCJcXG1pbnVzY29sb24iLCJcXGVxY29sb24iKSxldCgiXFxtaW51c2NvbG9uY29sb24iLCJcXEVxY29sb24iKSxldCgiXFxjb2xvbmNvbG9uYXBwcm94IiwiXFxDb2xvbmFwcHJveCIpLGV0KCJcXGNvbG9uY29sb25zaW0iLCJcXENvbG9uc2ltIiksZXQoIlxcc2ltY29sb24iLCJcXG1hdGhyZWx7XFxzaW1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259IiksZXQoIlxcc2ltY29sb25jb2xvbiIsIlxcbWF0aHJlbHtcXHNpbVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259IiksZXQoIlxcYXBwcm94Y29sb24iLCJcXG1hdGhyZWx7XFxhcHByb3hcXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259IiksZXQoIlxcYXBwcm94Y29sb25jb2xvbiIsIlxcbWF0aHJlbHtcXGFwcHJveFxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259IiksZXQoIlxcbm90bmkiLCJcXGh0bWxAbWF0aG1se1xcbm90XFxuaX17XFxtYXRocmVse1xcY2hhcmDiiIx9fSIpLGV0KCJcXGxpbXN1cCIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7bGltXFwsc3VwfSIpLGV0KCJcXGxpbWluZiIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7bGltXFwsaW5mfSIpLGV0KCJcXGluamxpbSIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7aW5qXFwsbGltfSIpLGV0KCJcXHByb2psaW0iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe3Byb2pcXCxsaW19IiksZXQoIlxcdmFybGltc3VwIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntcXG92ZXJsaW5le2xpbX19IiksZXQoIlxcdmFybGltaW5mIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntcXHVuZGVybGluZXtsaW19fSIpLGV0KCJcXHZhcmluamxpbSIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7XFx1bmRlcnJpZ2h0YXJyb3d7bGltfX0iKSxldCgiXFx2YXJwcm9qbGltIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntcXHVuZGVybGVmdGFycm93e2xpbX19IiksZXQoIlxcZ3ZlcnRuZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBndmVydG5lcXF9e+KJqX0iKSxldCgiXFxsdmVydG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQGx2ZXJ0bmVxcX174omofSIpLGV0KCJcXG5nZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBuZ2VxcX174omxfSIpLGV0KCJcXG5nZXFzbGFudCIsIlxcaHRtbEBtYXRobWx7XFxAbmdlcXNsYW50fXviibF9IiksZXQoIlxcbmxlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5sZXFxfXviibB9IiksZXQoIlxcbmxlcXNsYW50IiwiXFxodG1sQG1hdGhtbHtcXEBubGVxc2xhbnR9e+KJsH0iKSxldCgiXFxuc2hvcnRtaWQiLCJcXGh0bWxAbWF0aG1se1xcQG5zaG9ydG1pZH174oikfSIpLGV0KCJcXG5zaG9ydHBhcmFsbGVsIiwiXFxodG1sQG1hdGhtbHtcXEBuc2hvcnRwYXJhbGxlbH174oimfSIpLGV0KCJcXG5zdWJzZXRlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5zdWJzZXRlcXF9e+KKiH0iKSxldCgiXFxuc3Vwc2V0ZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBuc3Vwc2V0ZXFxfXviiol9IiksZXQoIlxcdmFyc3Vic2V0bmVxIiwiXFxodG1sQG1hdGhtbHtcXEB2YXJzdWJzZXRuZXF9e+KKin0iKSxldCgiXFx2YXJzdWJzZXRuZXFxIiwiXFxodG1sQG1hdGhtbHtcXEB2YXJzdWJzZXRuZXFxfXviq4t9IiksZXQoIlxcdmFyc3Vwc2V0bmVxIiwiXFxodG1sQG1hdGhtbHtcXEB2YXJzdXBzZXRuZXF9e+KKi30iKSxldCgiXFx2YXJzdXBzZXRuZXFxIiwiXFxodG1sQG1hdGhtbHtcXEB2YXJzdXBzZXRuZXFxfXviq4x9IiksZXQoIlxcaW1hdGgiLCJcXGh0bWxAbWF0aG1se1xcQGltYXRofXvEsX0iKSxldCgiXFxqbWF0aCIsIlxcaHRtbEBtYXRobWx7XFxAam1hdGh9e8i3fSIpLGV0KCJcXGxsYnJhY2tldCIsIlxcaHRtbEBtYXRobWx7XFxtYXRob3BlbntbXFxta2Vybi0zLjJtdVt9fXtcXG1hdGhvcGVue1xcY2hhcmDin6Z9fSIpLGV0KCJcXHJyYnJhY2tldCIsIlxcaHRtbEBtYXRobWx7XFxtYXRoY2xvc2V7XVxcbWtlcm4tMy4ybXVdfX17XFxtYXRoY2xvc2V7XFxjaGFyYOKfp319IiksZXQoIuKfpiIsIlxcbGxicmFja2V0IiksZXQoIuKfpyIsIlxccnJicmFja2V0IiksZXQoIlxcbEJyYWNlIiwiXFxodG1sQG1hdGhtbHtcXG1hdGhvcGVue1xce1xcbWtlcm4tMy4ybXVbfX17XFxtYXRob3BlbntcXGNoYXJg4qaDfX0iKSxldCgiXFxyQnJhY2UiLCJcXGh0bWxAbWF0aG1se1xcbWF0aGNsb3Nle11cXG1rZXJuLTMuMm11XFx9fX17XFxtYXRoY2xvc2V7XFxjaGFyYOKmhH19IiksZXQoIuKmgyIsIlxcbEJyYWNlIiksZXQoIuKmhCIsIlxcckJyYWNlIiksZXQoIlxcbWludXNvIiwiXFxtYXRoYmlue1xcaHRtbEBtYXRobWx7e1xcbWF0aHJsYXB7XFxtYXRoY2hvaWNle1xca2VybnswLjE0NWVtfX17XFxrZXJuezAuMTQ1ZW19fXtcXGtlcm57MC4xMDE1ZW19fXtcXGtlcm57MC4wNzI1ZW19fVxcY2lyY317LX19fXtcXGNoYXJg4qa1fX0iKSxldCgi4qa1IiwiXFxtaW51c28iKSxldCgiXFxkYXJyIiwiXFxkb3duYXJyb3ciKSxldCgiXFxkQXJyIiwiXFxEb3duYXJyb3ciKSxldCgiXFxEYXJyIiwiXFxEb3duYXJyb3ciKSxldCgiXFxsYW5nIiwiXFxsYW5nbGUiKSxldCgiXFxyYW5nIiwiXFxyYW5nbGUiKSxldCgiXFx1YXJyIiwiXFx1cGFycm93IiksZXQoIlxcdUFyciIsIlxcVXBhcnJvdyIpLGV0KCJcXFVhcnIiLCJcXFVwYXJyb3ciKSxldCgiXFxOIiwiXFxtYXRoYmJ7Tn0iKSxldCgiXFxSIiwiXFxtYXRoYmJ7Un0iKSxldCgiXFxaIiwiXFxtYXRoYmJ7Wn0iKSxldCgiXFxhbGVmIiwiXFxhbGVwaCIpLGV0KCJcXGFsZWZzeW0iLCJcXGFsZXBoIiksZXQoIlxcQWxwaGEiLCJcXG1hdGhybXtBfSIpLGV0KCJcXEJldGEiLCJcXG1hdGhybXtCfSIpLGV0KCJcXGJ1bGwiLCJcXGJ1bGxldCIpLGV0KCJcXENoaSIsIlxcbWF0aHJte1h9IiksZXQoIlxcY2x1YnMiLCJcXGNsdWJzdWl0IiksZXQoIlxcY251bXMiLCJcXG1hdGhiYntDfSIpLGV0KCJcXENvbXBsZXgiLCJcXG1hdGhiYntDfSIpLGV0KCJcXERhZ2dlciIsIlxcZGRhZ2dlciIpLGV0KCJcXGRpYW1vbmRzIiwiXFxkaWFtb25kc3VpdCIpLGV0KCJcXGVtcHR5IiwiXFxlbXB0eXNldCIpLGV0KCJcXEVwc2lsb24iLCJcXG1hdGhybXtFfSIpLGV0KCJcXEV0YSIsIlxcbWF0aHJte0h9IiksZXQoIlxcZXhpc3QiLCJcXGV4aXN0cyIpLGV0KCJcXGhhcnIiLCJcXGxlZnRyaWdodGFycm93IiksZXQoIlxcaEFyciIsIlxcTGVmdHJpZ2h0YXJyb3ciKSxldCgiXFxIYXJyIiwiXFxMZWZ0cmlnaHRhcnJvdyIpLGV0KCJcXGhlYXJ0cyIsIlxcaGVhcnRzdWl0IiksZXQoIlxcaW1hZ2UiLCJcXEltIiksZXQoIlxcaW5maW4iLCJcXGluZnR5IiksZXQoIlxcSW90YSIsIlxcbWF0aHJte0l9IiksZXQoIlxcaXNpbiIsIlxcaW4iKSxldCgiXFxLYXBwYSIsIlxcbWF0aHJte0t9IiksZXQoIlxcbGFyciIsIlxcbGVmdGFycm93IiksZXQoIlxcbEFyciIsIlxcTGVmdGFycm93IiksZXQoIlxcTGFyciIsIlxcTGVmdGFycm93IiksZXQoIlxcbHJhcnIiLCJcXGxlZnRyaWdodGFycm93IiksZXQoIlxcbHJBcnIiLCJcXExlZnRyaWdodGFycm93IiksZXQoIlxcTHJhcnIiLCJcXExlZnRyaWdodGFycm93IiksZXQoIlxcTXUiLCJcXG1hdGhybXtNfSIpLGV0KCJcXG5hdG51bXMiLCJcXG1hdGhiYntOfSIpLGV0KCJcXE51IiwiXFxtYXRocm17Tn0iKSxldCgiXFxPbWljcm9uIiwiXFxtYXRocm17T30iKSxldCgiXFxwbHVzbW4iLCJcXHBtIiksZXQoIlxccmFyciIsIlxccmlnaHRhcnJvdyIpLGV0KCJcXHJBcnIiLCJcXFJpZ2h0YXJyb3ciKSxldCgiXFxSYXJyIiwiXFxSaWdodGFycm93IiksZXQoIlxccmVhbCIsIlxcUmUiKSxldCgiXFxyZWFscyIsIlxcbWF0aGJie1J9IiksZXQoIlxcUmVhbHMiLCJcXG1hdGhiYntSfSIpLGV0KCJcXFJobyIsIlxcbWF0aHJte1B9IiksZXQoIlxcc2RvdCIsIlxcY2RvdCIpLGV0KCJcXHNlY3QiLCJcXFMiKSxldCgiXFxzcGFkZXMiLCJcXHNwYWRlc3VpdCIpLGV0KCJcXHN1YiIsIlxcc3Vic2V0IiksZXQoIlxcc3ViZSIsIlxcc3Vic2V0ZXEiKSxldCgiXFxzdXBlIiwiXFxzdXBzZXRlcSIpLGV0KCJcXFRhdSIsIlxcbWF0aHJte1R9IiksZXQoIlxcdGhldGFzeW0iLCJcXHZhcnRoZXRhIiksZXQoIlxcd2VpZXJwIiwiXFx3cCIpLGV0KCJcXFpldGEiLCJcXG1hdGhybXtafSIpLGV0KCJcXGFyZ21pbiIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7YXJnXFwsbWlufSIpLGV0KCJcXGFyZ21heCIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7YXJnXFwsbWF4fSIpLGV0KCJcXHBsaW0iLCJcXERPVFNCXFxtYXRob3B7XFxvcGVyYXRvcm5hbWV7cGxpbX19XFxsaW1pdHMiKSxldCgiXFxicmEiLCJcXG1hdGhpbm5lcntcXGxhbmdsZXsjMX18fSIpLGV0KCJcXGtldCIsIlxcbWF0aGlubmVye3x7IzF9XFxyYW5nbGV9IiksZXQoIlxcYnJha2V0IiwiXFxtYXRoaW5uZXJ7XFxsYW5nbGV7IzF9XFxyYW5nbGV9IiksZXQoIlxcQnJhIiwiXFxsZWZ0XFxsYW5nbGUjMVxccmlnaHR8IiksZXQoIlxcS2V0IiwiXFxsZWZ0fCMxXFxyaWdodFxccmFuZ2xlIik7dmFyIHBxZT1pPT5zPT57dmFyIHU9cy5jb25zdW1lQXJnKCkudG9rZW5zLGQ9cy5jb25zdW1lQXJnKCkudG9rZW5zLHA9cy5jb25zdW1lQXJnKCkudG9rZW5zLHY9cy5jb25zdW1lQXJnKCkudG9rZW5zLGI9cy5tYWNyb3MuZ2V0KCJ8IikseT1zLm1hY3Jvcy5nZXQoIlxcfCIpO3MubWFjcm9zLmJlZ2luR3JvdXAoKTt2YXIgVD1QPT5SPT57aSYmKFIubWFjcm9zLnNldCgifCIsYikscC5sZW5ndGgmJlIubWFjcm9zLnNldCgiXFx8Iix5KSk7dmFyIEY9UDtpZighUCYmcC5sZW5ndGgpe3ZhciBqPVIuZnV0dXJlKCk7ai50ZXh0PT09InwiJiYoUi5wb3BUb2tlbigpLEY9ITApfXJldHVybnt0b2tlbnM6Rj9wOmQsbnVtQXJnczowfX07cy5tYWNyb3Muc2V0KCJ8IixUKCExKSkscC5sZW5ndGgmJnMubWFjcm9zLnNldCgiXFx8IixUKCEwKSk7dmFyIF89cy5jb25zdW1lQXJnKCkudG9rZW5zLEE9cy5leHBhbmRUb2tlbnMoWy4uLnYsLi4uXywuLi51XSk7cmV0dXJuIHMubWFjcm9zLmVuZEdyb3VwKCkse3Rva2VuczpBLnJldmVyc2UoKSxudW1BcmdzOjB9fTtldCgiXFxicmFAa2V0IixwcWUoITEpKSxldCgiXFxicmFAc2V0IixwcWUoITApKSxldCgiXFxCcmFrZXQiLCJcXGJyYUBrZXR7XFxsZWZ0XFxsYW5nbGV9e1xcLFxcbWlkZGxlXFx2ZXJ0XFwsfXtcXCxcXG1pZGRsZVxcdmVydFxcLH17XFxyaWdodFxccmFuZ2xlfSIpLGV0KCJcXFNldCIsIlxcYnJhQHNldHtcXGxlZnRcXHtcXDp9e1xcO1xcbWlkZGxlXFx2ZXJ0XFw7fXtcXDtcXG1pZGRsZVxcVmVydFxcO317XFw6XFxyaWdodFxcfX0iKSxldCgiXFxzZXQiLCJcXGJyYUBzZXR7XFx7XFwsfXtcXG1pZH17fXtcXCxcXH19IiksZXQoIlxcYW5nbG4iLCJ7XFxhbmdsIG59IiksZXQoIlxcYmx1ZSIsIlxcdGV4dGNvbG9yeyMjNjQ5NWVkfXsjMX0iKSxldCgiXFxvcmFuZ2UiLCJcXHRleHRjb2xvcnsjI2ZmYTUwMH17IzF9IiksZXQoIlxccGluayIsIlxcdGV4dGNvbG9yeyMjZmYwMGFmfXsjMX0iKSxldCgiXFxyZWQiLCJcXHRleHRjb2xvcnsjI2RmMDAzMH17IzF9IiksZXQoIlxcZ3JlZW4iLCJcXHRleHRjb2xvcnsjIzI4YWU3Yn17IzF9IiksZXQoIlxcZ3JheSIsIlxcdGV4dGNvbG9ye2dyYXl9eyMxfSIpLGV0KCJcXHB1cnBsZSIsIlxcdGV4dGNvbG9yeyMjOWQzOGJkfXsjMX0iKSxldCgiXFxibHVlQSIsIlxcdGV4dGNvbG9yeyMjY2NmYWZmfXsjMX0iKSxldCgiXFxibHVlQiIsIlxcdGV4dGNvbG9yeyMjODBmNmZmfXsjMX0iKSxldCgiXFxibHVlQyIsIlxcdGV4dGNvbG9yeyMjNjNkOWVhfXsjMX0iKSxldCgiXFxibHVlRCIsIlxcdGV4dGNvbG9yeyMjMTFhY2NkfXsjMX0iKSxldCgiXFxibHVlRSIsIlxcdGV4dGNvbG9yeyMjMGM3Zjk5fXsjMX0iKSxldCgiXFx0ZWFsQSIsIlxcdGV4dGNvbG9yeyMjOTRmZmY1fXsjMX0iKSxldCgiXFx0ZWFsQiIsIlxcdGV4dGNvbG9yeyMjMjZlZGQ1fXsjMX0iKSxldCgiXFx0ZWFsQyIsIlxcdGV4dGNvbG9yeyMjMDFkMWMxfXsjMX0iKSxldCgiXFx0ZWFsRCIsIlxcdGV4dGNvbG9yeyMjMDFhOTk1fXsjMX0iKSxldCgiXFx0ZWFsRSIsIlxcdGV4dGNvbG9yeyMjMjA4MTcwfXsjMX0iKSxldCgiXFxncmVlbkEiLCJcXHRleHRjb2xvcnsjI2I2ZmZiMH17IzF9IiksZXQoIlxcZ3JlZW5CIiwiXFx0ZXh0Y29sb3J7IyM4YWYyODF9eyMxfSIpLGV0KCJcXGdyZWVuQyIsIlxcdGV4dGNvbG9yeyMjNzRjZjcwfXsjMX0iKSxldCgiXFxncmVlbkQiLCJcXHRleHRjb2xvcnsjIzFmYWI1NH17IzF9IiksZXQoIlxcZ3JlZW5FIiwiXFx0ZXh0Y29sb3J7IyMwZDkyM2Z9eyMxfSIpLGV0KCJcXGdvbGRBIiwiXFx0ZXh0Y29sb3J7IyNmZmQwYTl9eyMxfSIpLGV0KCJcXGdvbGRCIiwiXFx0ZXh0Y29sb3J7IyNmZmJiNzF9eyMxfSIpLGV0KCJcXGdvbGRDIiwiXFx0ZXh0Y29sb3J7IyNmZjljMzl9eyMxfSIpLGV0KCJcXGdvbGREIiwiXFx0ZXh0Y29sb3J7IyNlMDdkMTB9eyMxfSIpLGV0KCJcXGdvbGRFIiwiXFx0ZXh0Y29sb3J7IyNhNzVhMDV9eyMxfSIpLGV0KCJcXHJlZEEiLCJcXHRleHRjb2xvcnsjI2ZjYTlhOX17IzF9IiksZXQoIlxccmVkQiIsIlxcdGV4dGNvbG9yeyMjZmY4NDgyfXsjMX0iKSxldCgiXFxyZWRDIiwiXFx0ZXh0Y29sb3J7IyNmOTY4NWR9eyMxfSIpLGV0KCJcXHJlZEQiLCJcXHRleHRjb2xvcnsjI2U4NGQzOX17IzF9IiksZXQoIlxccmVkRSIsIlxcdGV4dGNvbG9yeyMjYmMyNjEyfXsjMX0iKSxldCgiXFxtYXJvb25BIiwiXFx0ZXh0Y29sb3J7IyNmZmJkZTB9eyMxfSIpLGV0KCJcXG1hcm9vbkIiLCJcXHRleHRjb2xvcnsjI2ZmOTJjNn17IzF9IiksZXQoIlxcbWFyb29uQyIsIlxcdGV4dGNvbG9yeyMjZWQ1ZmE2fXsjMX0iKSxldCgiXFxtYXJvb25EIiwiXFx0ZXh0Y29sb3J7IyNjYTMzN2N9eyMxfSIpLGV0KCJcXG1hcm9vbkUiLCJcXHRleHRjb2xvcnsjIzllMDM0ZX17IzF9IiksZXQoIlxccHVycGxlQSIsIlxcdGV4dGNvbG9yeyMjZGRkN2ZmfXsjMX0iKSxldCgiXFxwdXJwbGVCIiwiXFx0ZXh0Y29sb3J7IyNjNmI5ZmN9eyMxfSIpLGV0KCJcXHB1cnBsZUMiLCJcXHRleHRjb2xvcnsjI2FhODdmZn17IzF9IiksZXQoIlxccHVycGxlRCIsIlxcdGV4dGNvbG9yeyMjNzg1NGFifXsjMX0iKSxldCgiXFxwdXJwbGVFIiwiXFx0ZXh0Y29sb3J7IyM1NDNiNzh9eyMxfSIpLGV0KCJcXG1pbnRBIiwiXFx0ZXh0Y29sb3J7IyNmNWY5ZTh9eyMxfSIpLGV0KCJcXG1pbnRCIiwiXFx0ZXh0Y29sb3J7IyNlZGYyZGZ9eyMxfSIpLGV0KCJcXG1pbnRDIiwiXFx0ZXh0Y29sb3J7IyNlMGU1Y2N9eyMxfSIpLGV0KCJcXGdyYXlBIiwiXFx0ZXh0Y29sb3J7IyNmNmY3Zjd9eyMxfSIpLGV0KCJcXGdyYXlCIiwiXFx0ZXh0Y29sb3J7IyNmMGYxZjJ9eyMxfSIpLGV0KCJcXGdyYXlDIiwiXFx0ZXh0Y29sb3J7IyNlM2U1ZTZ9eyMxfSIpLGV0KCJcXGdyYXlEIiwiXFx0ZXh0Y29sb3J7IyNkNmQ4ZGF9eyMxfSIpLGV0KCJcXGdyYXlFIiwiXFx0ZXh0Y29sb3J7IyNiYWJlYzJ9eyMxfSIpLGV0KCJcXGdyYXlGIiwiXFx0ZXh0Y29sb3J7IyM4ODhkOTN9eyMxfSIpLGV0KCJcXGdyYXlHIiwiXFx0ZXh0Y29sb3J7IyM2MjY1Njl9eyMxfSIpLGV0KCJcXGdyYXlIIiwiXFx0ZXh0Y29sb3J7IyMzYjNlNDB9eyMxfSIpLGV0KCJcXGdyYXlJIiwiXFx0ZXh0Y29sb3J7IyMyMTI0MmN9eyMxfSIpLGV0KCJcXGthQmx1ZSIsIlxcdGV4dGNvbG9yeyMjMzE0NDUzfXsjMX0iKSxldCgiXFxrYUdyZWVuIiwiXFx0ZXh0Y29sb3J7IyM3MUIzMDd9eyMxfSIpO3ZhciBicWU9eyJeIjohMCxfOiEwLCJcXGxpbWl0cyI6ITAsIlxcbm9saW1pdHMiOiEwfTtjbGFzcyBDVnR7Y29uc3RydWN0b3Iocyx1LGQpe3RoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMuZXhwYW5zaW9uQ291bnQ9dm9pZCAwLHRoaXMubGV4ZXI9dm9pZCAwLHRoaXMubWFjcm9zPXZvaWQgMCx0aGlzLnN0YWNrPXZvaWQgMCx0aGlzLm1vZGU9dm9pZCAwLHRoaXMuc2V0dGluZ3M9dSx0aGlzLmV4cGFuc2lvbkNvdW50PTAsdGhpcy5mZWVkKHMpLHRoaXMubWFjcm9zPW5ldyBFVnQoVFZ0LHUubWFjcm9zKSx0aGlzLm1vZGU9ZCx0aGlzLnN0YWNrPVtdfWZlZWQocyl7dGhpcy5sZXhlcj1uZXcgaHFlKHMsdGhpcy5zZXR0aW5ncyl9c3dpdGNoTW9kZShzKXt0aGlzLm1vZGU9c31iZWdpbkdyb3VwKCl7dGhpcy5tYWNyb3MuYmVnaW5Hcm91cCgpfWVuZEdyb3VwKCl7dGhpcy5tYWNyb3MuZW5kR3JvdXAoKX1lbmRHcm91cHMoKXt0aGlzLm1hY3Jvcy5lbmRHcm91cHMoKX1mdXR1cmUoKXtyZXR1cm4gdGhpcy5zdGFjay5sZW5ndGg9PT0wJiZ0aGlzLnB1c2hUb2tlbih0aGlzLmxleGVyLmxleCgpKSx0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdfXBvcFRva2VuKCl7cmV0dXJuIHRoaXMuZnV0dXJlKCksdGhpcy5zdGFjay5wb3AoKX1wdXNoVG9rZW4ocyl7dGhpcy5zdGFjay5wdXNoKHMpfXB1c2hUb2tlbnMocyl7dGhpcy5zdGFjay5wdXNoKC4uLnMpfXNjYW5Bcmd1bWVudChzKXt2YXIgdSxkLHA7aWYocyl7aWYodGhpcy5jb25zdW1lU3BhY2VzKCksdGhpcy5mdXR1cmUoKS50ZXh0IT09IlsiKXJldHVybiBudWxsO3U9dGhpcy5wb3BUb2tlbigpLHt0b2tlbnM6cCxlbmQ6ZH09dGhpcy5jb25zdW1lQXJnKFsiXSJdKX1lbHNlKHt0b2tlbnM6cCxzdGFydDp1LGVuZDpkfT10aGlzLmNvbnN1bWVBcmcoKSk7cmV0dXJuIHRoaXMucHVzaFRva2VuKG5ldyBVNCgiRU9GIixkLmxvYykpLHRoaXMucHVzaFRva2VucyhwKSx1LnJhbmdlKGQsIiIpfWNvbnN1bWVTcGFjZXMoKXtmb3IoOzspe3ZhciBzPXRoaXMuZnV0dXJlKCk7aWYocy50ZXh0PT09IiAiKXRoaXMuc3RhY2sucG9wKCk7ZWxzZSBicmVha319Y29uc3VtZUFyZyhzKXt2YXIgdT1bXSxkPXMmJnMubGVuZ3RoPjA7ZHx8dGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIHA9dGhpcy5mdXR1cmUoKSx2LGI9MCx5PTA7ZG97aWYodj10aGlzLnBvcFRva2VuKCksdS5wdXNoKHYpLHYudGV4dD09PSJ7IikrK2I7ZWxzZSBpZih2LnRleHQ9PT0ifSIpe2lmKC0tYixiPT09LTEpdGhyb3cgbmV3IENpKCJFeHRyYSB9Iix2KX1lbHNlIGlmKHYudGV4dD09PSJFT0YiKXRocm93IG5ldyBDaSgiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gYSBtYWNybyBhcmd1bWVudCwgZXhwZWN0ZWQgJyIrKHMmJmQ/c1t5XToifSIpKyInIix2KTtpZihzJiZkKWlmKChiPT09MHx8Yj09PTEmJnNbeV09PT0ieyIpJiZ2LnRleHQ9PT1zW3ldKXtpZigrK3kseT09PXMubGVuZ3RoKXt1LnNwbGljZSgteSx5KTticmVha319ZWxzZSB5PTB9d2hpbGUoYiE9PTB8fGQpO3JldHVybiBwLnRleHQ9PT0ieyImJnVbdS5sZW5ndGgtMV0udGV4dD09PSJ9IiYmKHUucG9wKCksdS5zaGlmdCgpKSx1LnJldmVyc2UoKSx7dG9rZW5zOnUsc3RhcnQ6cCxlbmQ6dn19Y29uc3VtZUFyZ3Mocyx1KXtpZih1KXtpZih1Lmxlbmd0aCE9PXMrMSl0aHJvdyBuZXcgQ2koIlRoZSBsZW5ndGggb2YgZGVsaW1pdGVycyBkb2Vzbid0IG1hdGNoIHRoZSBudW1iZXIgb2YgYXJncyEiKTtmb3IodmFyIGQ9dVswXSxwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciB2PXRoaXMucG9wVG9rZW4oKTtpZihkW3BdIT09di50ZXh0KXRocm93IG5ldyBDaSgiVXNlIG9mIHRoZSBtYWNybyBkb2Vzbid0IG1hdGNoIGl0cyBkZWZpbml0aW9uIix2KX19Zm9yKHZhciBiPVtdLHk9MDt5PHM7eSsrKWIucHVzaCh0aGlzLmNvbnN1bWVBcmcodSYmdVt5KzFdKS50b2tlbnMpO3JldHVybiBifWV4cGFuZE9uY2Uocyl7dmFyIHU9dGhpcy5wb3BUb2tlbigpLGQ9dS50ZXh0LHA9dS5ub2V4cGFuZD9udWxsOnRoaXMuX2dldEV4cGFuc2lvbihkKTtpZihwPT1udWxsfHxzJiZwLnVuZXhwYW5kYWJsZSl7aWYocyYmcD09bnVsbCYmZFswXT09PSJcXCImJiF0aGlzLmlzRGVmaW5lZChkKSl0aHJvdyBuZXcgQ2koIlVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlOiAiK2QpO3JldHVybiB0aGlzLnB1c2hUb2tlbih1KSwhMX1pZih0aGlzLmV4cGFuc2lvbkNvdW50KyssdGhpcy5leHBhbnNpb25Db3VudD50aGlzLnNldHRpbmdzLm1heEV4cGFuZCl0aHJvdyBuZXcgQ2koIlRvbyBtYW55IGV4cGFuc2lvbnM6IGluZmluaXRlIGxvb3Agb3IgbmVlZCB0byBpbmNyZWFzZSBtYXhFeHBhbmQgc2V0dGluZyIpO3ZhciB2PXAudG9rZW5zLGI9dGhpcy5jb25zdW1lQXJncyhwLm51bUFyZ3MscC5kZWxpbWl0ZXJzKTtpZihwLm51bUFyZ3Mpe3Y9di5zbGljZSgpO2Zvcih2YXIgeT12Lmxlbmd0aC0xO3k+PTA7LS15KXt2YXIgVD12W3ldO2lmKFQudGV4dD09PSIjIil7aWYoeT09PTApdGhyb3cgbmV3IENpKCJJbmNvbXBsZXRlIHBsYWNlaG9sZGVyIGF0IGVuZCBvZiBtYWNybyBib2R5IixUKTtpZihUPXZbLS15XSxULnRleHQ9PT0iIyIpdi5zcGxpY2UoeSsxLDEpO2Vsc2UgaWYoL15bMS05XSQvLnRlc3QoVC50ZXh0KSl2LnNwbGljZSh5LDIsLi4uYlsrVC50ZXh0LTFdKTtlbHNlIHRocm93IG5ldyBDaSgiTm90IGEgdmFsaWQgYXJndW1lbnQgbnVtYmVyIixUKX19fXJldHVybiB0aGlzLnB1c2hUb2tlbnModiksdi5sZW5ndGh9ZXhwYW5kQWZ0ZXJGdXR1cmUoKXtyZXR1cm4gdGhpcy5leHBhbmRPbmNlKCksdGhpcy5mdXR1cmUoKX1leHBhbmROZXh0VG9rZW4oKXtmb3IoOzspaWYodGhpcy5leHBhbmRPbmNlKCk9PT0hMSl7dmFyIHM9dGhpcy5zdGFjay5wb3AoKTtyZXR1cm4gcy50cmVhdEFzUmVsYXgmJihzLnRleHQ9IlxccmVsYXgiKSxzfXRocm93IG5ldyBFcnJvcn1leHBhbmRNYWNybyhzKXtyZXR1cm4gdGhpcy5tYWNyb3MuaGFzKHMpP3RoaXMuZXhwYW5kVG9rZW5zKFtuZXcgVTQocyldKTp2b2lkIDB9ZXhwYW5kVG9rZW5zKHMpe3ZhciB1PVtdLGQ9dGhpcy5zdGFjay5sZW5ndGg7Zm9yKHRoaXMucHVzaFRva2VucyhzKTt0aGlzLnN0YWNrLmxlbmd0aD5kOylpZih0aGlzLmV4cGFuZE9uY2UoITApPT09ITEpe3ZhciBwPXRoaXMuc3RhY2sucG9wKCk7cC50cmVhdEFzUmVsYXgmJihwLm5vZXhwYW5kPSExLHAudHJlYXRBc1JlbGF4PSExKSx1LnB1c2gocCl9cmV0dXJuIHV9ZXhwYW5kTWFjcm9Bc1RleHQocyl7dmFyIHU9dGhpcy5leHBhbmRNYWNybyhzKTtyZXR1cm4gdSYmdS5tYXAoZD0+ZC50ZXh0KS5qb2luKCIiKX1fZ2V0RXhwYW5zaW9uKHMpe3ZhciB1PXRoaXMubWFjcm9zLmdldChzKTtpZih1PT1udWxsKXJldHVybiB1O2lmKHMubGVuZ3RoPT09MSl7dmFyIGQ9dGhpcy5sZXhlci5jYXRjb2Rlc1tzXTtpZihkIT1udWxsJiZkIT09MTMpcmV0dXJufXZhciBwPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3UodGhpcyk6dTtpZih0eXBlb2YgcD09InN0cmluZyIpe3ZhciB2PTA7aWYocC5pbmRleE9mKCIjIikhPT0tMSlmb3IodmFyIGI9cC5yZXBsYWNlKC8jIy9nLCIiKTtiLmluZGV4T2YoIiMiKyh2KzEpKSE9PS0xOykrK3Y7Zm9yKHZhciB5PW5ldyBocWUocCx0aGlzLnNldHRpbmdzKSxUPVtdLF89eS5sZXgoKTtfLnRleHQhPT0iRU9GIjspVC5wdXNoKF8pLF89eS5sZXgoKTtULnJldmVyc2UoKTt2YXIgQT17dG9rZW5zOlQsbnVtQXJnczp2fTtyZXR1cm4gQX1yZXR1cm4gcH1pc0RlZmluZWQocyl7cmV0dXJuIHRoaXMubWFjcm9zLmhhcyhzKXx8TDkuaGFzT3duUHJvcGVydHkocyl8fFVsLm1hdGguaGFzT3duUHJvcGVydHkocyl8fFVsLnRleHQuaGFzT3duUHJvcGVydHkocyl8fGJxZS5oYXNPd25Qcm9wZXJ0eShzKX1pc0V4cGFuZGFibGUocyl7dmFyIHU9dGhpcy5tYWNyb3MuZ2V0KHMpO3JldHVybiB1IT1udWxsP3R5cGVvZiB1PT0ic3RyaW5nInx8dHlwZW9mIHU9PSJmdW5jdGlvbiJ8fCF1LnVuZXhwYW5kYWJsZTpMOS5oYXNPd25Qcm9wZXJ0eShzKSYmIUw5W3NdLnByaW1pdGl2ZX19dmFyIG1xZT0vXlvigorigovigozigo3igo7igoDigoHigoLigoPigoTigoXigobigofigojigonigpDigpHigpXhtaLisbzigpbigpfigpjigpnigpLigprhtaPigpvigpzhtaThtaXigpPhtabhtafhtajhtanhtapdLyxUUT1PYmplY3QuZnJlZXplKHsi4oKKIjoiKyIsIuKCiyI6Ii0iLCLigowiOiI9Iiwi4oKNIjoiKCIsIuKCjiI6IikiLCLigoAiOiIwIiwi4oKBIjoiMSIsIuKCgiI6IjIiLCLigoMiOiIzIiwi4oKEIjoiNCIsIuKChSI6IjUiLCLigoYiOiI2Iiwi4oKHIjoiNyIsIuKCiCI6IjgiLCLigokiOiI5Iiwi4oKQIjoiYSIsIuKCkSI6ImUiLCLigpUiOiJoIiwi4bWiIjoiaSIsIuKxvCI6ImoiLCLigpYiOiJrIiwi4oKXIjoibCIsIuKCmCI6Im0iLCLigpkiOiJuIiwi4oKSIjoibyIsIuKCmiI6InAiLCLhtaMiOiJyIiwi4oKbIjoicyIsIuKCnCI6InQiLCLhtaQiOiJ1Iiwi4bWlIjoidiIsIuKCkyI6IngiLCLhtaYiOiLOsiIsIuG1pyI6Is6zIiwi4bWoIjoiz4EiLCLhtakiOiLPlSIsIuG1qiI6Is+HIiwi4oG6IjoiKyIsIuKBuyI6Ii0iLCLigbwiOiI9Iiwi4oG9IjoiKCIsIuKBviI6IikiLCLigbAiOiIwIiwiwrkiOiIxIiwiwrIiOiIyIiwiwrMiOiIzIiwi4oG0IjoiNCIsIuKBtSI6IjUiLCLigbYiOiI2Iiwi4oG3IjoiNyIsIuKBuCI6IjgiLCLigbkiOiI5Iiwi4bSsIjoiQSIsIuG0riI6IkIiLCLhtLAiOiJEIiwi4bSxIjoiRSIsIuG0syI6IkciLCLhtLQiOiJIIiwi4bS1IjoiSSIsIuG0tiI6IkoiLCLhtLciOiJLIiwi4bS4IjoiTCIsIuG0uSI6Ik0iLCLhtLoiOiJOIiwi4bS8IjoiTyIsIuG0viI6IlAiLCLhtL8iOiJSIiwi4bWAIjoiVCIsIuG1gSI6IlUiLCLisb0iOiJWIiwi4bWCIjoiVyIsIuG1gyI6ImEiLCLhtYciOiJiIiwi4bacIjoiYyIsIuG1iCI6ImQiLCLhtYkiOiJlIiwi4bagIjoiZiIsIuG1jSI6ImciLMqwOiJoIiwi4oGxIjoiaSIsyrI6ImoiLCLhtY8iOiJrIizLoToibCIsIuG1kCI6Im0iLOKBvzoibiIsIuG1kiI6Im8iLCLhtZYiOiJwIizKszoiciIsy6I6InMiLCLhtZciOiJ0Iiwi4bWYIjoidSIsIuG1myI6InYiLMq3OiJ3IizLozoieCIsyrg6InkiLCLhtrsiOiJ6Iiwi4bWdIjoizrIiLCLhtZ4iOiLOsyIsIuG1nyI6Is60Iiwi4bWgIjoiz5UiLCLhtaEiOiLPhyIsIuG2vyI6Is64In0pLFBiZT17IsyBIjp7dGV4dDoiXFwnIixtYXRoOiJcXGFjdXRlIn0sIsyAIjp7dGV4dDoiXFxgIixtYXRoOiJcXGdyYXZlIn0sIsyIIjp7dGV4dDonXFwiJyxtYXRoOiJcXGRkb3QifSwizIMiOnt0ZXh0OiJcXH4iLG1hdGg6IlxcdGlsZGUifSwizIQiOnt0ZXh0OiJcXD0iLG1hdGg6IlxcYmFyIn0sIsyGIjp7dGV4dDoiXFx1IixtYXRoOiJcXGJyZXZlIn0sIsyMIjp7dGV4dDoiXFx2IixtYXRoOiJcXGNoZWNrIn0sIsyCIjp7dGV4dDoiXFxeIixtYXRoOiJcXGhhdCJ9LCLMhyI6e3RleHQ6IlxcLiIsbWF0aDoiXFxkb3QifSwizIoiOnt0ZXh0OiJcXHIiLG1hdGg6IlxcbWF0aHJpbmcifSwizIsiOnt0ZXh0OiJcXEgifSwizKciOnt0ZXh0OiJcXGMifX0sdnFlPXvDoToiYcyBIizDoDoiYcyAIizDpDoiYcyIIizHnzoiYcyIzIQiLMOjOiJhzIMiLMSBOiJhzIQiLMSDOiJhzIYiLOG6rzoiYcyGzIEiLOG6sToiYcyGzIAiLOG6tToiYcyGzIMiLMeOOiJhzIwiLMOiOiJhzIIiLOG6pToiYcyCzIEiLOG6pzoiYcyCzIAiLOG6qzoiYcyCzIMiLMinOiJhzIciLMehOiJhzIfMhCIsw6U6ImHMiiIsx7s6ImHMisyBIizhuIM6ImLMhyIsxIc6ImPMgSIs4biJOiJjzKfMgSIsxI06ImPMjCIsxIk6ImPMgiIsxIs6ImPMhyIsw6c6ImPMpyIsxI86ImTMjCIs4biLOiJkzIciLOG4kToiZMynIizDqToiZcyBIizDqDoiZcyAIizDqzoiZcyIIizhur06ImXMgyIsxJM6ImXMhCIs4biXOiJlzITMgSIs4biVOiJlzITMgCIsxJU6ImXMhiIs4bidOiJlzKfMhiIsxJs6ImXMjCIsw6o6ImXMgiIs4bq/OiJlzILMgSIs4buBOiJlzILMgCIs4buFOiJlzILMgyIsxJc6ImXMhyIsyKk6ImXMpyIs4bifOiJmzIciLMe1OiJnzIEiLOG4oToiZ8yEIizEnzoiZ8yGIizHpzoiZ8yMIizEnToiZ8yCIizEoToiZ8yHIizEozoiZ8ynIizhuKc6ImjMiCIsyJ86ImjMjCIsxKU6ImjMgiIs4bijOiJozIciLOG4qToiaMynIizDrToiacyBIizDrDoiacyAIizDrzoiacyIIizhuK86ImnMiMyBIizEqToiacyDIizEqzoiacyEIizErToiacyGIizHkDoiacyMIizDrjoiacyCIizHsDoiasyMIizEtToiasyCIizhuLE6ImvMgSIsx6k6ImvMjCIsxLc6ImvMpyIsxLo6ImzMgSIsxL46ImzMjCIsxLw6ImzMpyIs4bi/OiJtzIEiLOG5gToibcyHIizFhDoibsyBIizHuToibsyAIizDsToibsyDIizFiDoibsyMIizhuYU6Im7MhyIsxYY6Im7MpyIsw7M6Im/MgSIsw7I6Im/MgCIsw7Y6Im/MiCIsyKs6Im/MiMyEIizDtToib8yDIizhuY06Im/Mg8yBIizhuY86Im/Mg8yIIizIrToib8yDzIQiLMWNOiJvzIQiLOG5kzoib8yEzIEiLOG5kToib8yEzIAiLMWPOiJvzIYiLMeSOiJvzIwiLMO0OiJvzIIiLOG7kToib8yCzIEiLOG7kzoib8yCzIAiLOG7lzoib8yCzIMiLMivOiJvzIciLMixOiJvzIfMhCIsxZE6Im/MiyIs4bmVOiJwzIEiLOG5lzoicMyHIizFlToicsyBIizFmToicsyMIizhuZk6InLMhyIsxZc6InLMpyIsxZs6InPMgSIs4bmlOiJzzIHMhyIsxaE6InPMjCIs4bmnOiJzzIzMhyIsxZ06InPMgiIs4bmhOiJzzIciLMWfOiJzzKciLOG6lzoidMyIIizFpToidMyMIizhuas6InTMhyIsxaM6InTMpyIsw7o6InXMgSIsw7k6InXMgCIsw7w6InXMiCIsx5g6InXMiMyBIizHnDoidcyIzIAiLMeWOiJ1zIjMhCIsx5o6InXMiMyMIizFqToidcyDIizhubk6InXMg8yBIizFqzoidcyEIizhubs6InXMhMyIIizFrToidcyGIizHlDoidcyMIizDuzoidcyCIizFrzoidcyKIizFsToidcyLIizhub06InbMgyIs4bqDOiJ3zIEiLOG6gToid8yAIizhuoU6InfMiCIsxbU6InfMgiIs4bqHOiJ3zIciLOG6mDoid8yKIizhuo06InjMiCIs4bqLOiJ4zIciLMO9OiJ5zIEiLOG7szoiecyAIizDvzoiecyIIizhu7k6InnMgyIsyLM6InnMhCIsxbc6InnMgiIs4bqPOiJ5zIciLOG6mToiecyKIizFujoiesyBIizFvjoiesyMIizhupE6InrMgiIsxbw6InrMhyIsw4E6IkHMgSIsw4A6IkHMgCIsw4Q6IkHMiCIsx546IkHMiMyEIizDgzoiQcyDIizEgDoiQcyEIizEgjoiQcyGIizhuq46IkHMhsyBIizhurA6IkHMhsyAIizhurQ6IkHMhsyDIizHjToiQcyMIizDgjoiQcyCIizhuqQ6IkHMgsyBIizhuqY6IkHMgsyAIizhuqo6IkHMgsyDIizIpjoiQcyHIizHoDoiQcyHzIQiLMOFOiJBzIoiLMe6OiJBzIrMgSIs4biCOiJCzIciLMSGOiJDzIEiLOG4iDoiQ8ynzIEiLMSMOiJDzIwiLMSIOiJDzIIiLMSKOiJDzIciLMOHOiJDzKciLMSOOiJEzIwiLOG4ijoiRMyHIizhuJA6IkTMpyIsw4k6IkXMgSIsw4g6IkXMgCIsw4s6IkXMiCIs4bq8OiJFzIMiLMSSOiJFzIQiLOG4ljoiRcyEzIEiLOG4lDoiRcyEzIAiLMSUOiJFzIYiLOG4nDoiRcynzIYiLMSaOiJFzIwiLMOKOiJFzIIiLOG6vjoiRcyCzIEiLOG7gDoiRcyCzIAiLOG7hDoiRcyCzIMiLMSWOiJFzIciLMioOiJFzKciLOG4njoiRsyHIizHtDoiR8yBIizhuKA6IkfMhCIsxJ46IkfMhiIsx6Y6IkfMjCIsxJw6IkfMgiIsxKA6IkfMhyIsxKI6IkfMpyIs4bimOiJIzIgiLMieOiJIzIwiLMSkOiJIzIIiLOG4ojoiSMyHIizhuKg6IkjMpyIsw406IknMgSIsw4w6IknMgCIsw486IknMiCIs4biuOiJJzIjMgSIsxKg6IknMgyIsxKo6IknMhCIsxKw6IknMhiIsx486IknMjCIsw446IknMgiIsxLA6IknMhyIsxLQ6IkrMgiIs4biwOiJLzIEiLMeoOiJLzIwiLMS2OiJLzKciLMS5OiJMzIEiLMS9OiJMzIwiLMS7OiJMzKciLOG4vjoiTcyBIizhuYA6Ik3MhyIsxYM6Ik7MgSIsx7g6Ik7MgCIsw5E6Ik7MgyIsxYc6Ik7MjCIs4bmEOiJOzIciLMWFOiJOzKciLMOTOiJPzIEiLMOSOiJPzIAiLMOWOiJPzIgiLMiqOiJPzIjMhCIsw5U6Ik/MgyIs4bmMOiJPzIPMgSIs4bmOOiJPzIPMiCIsyKw6Ik/Mg8yEIizFjDoiT8yEIizhuZI6Ik/MhMyBIizhuZA6Ik/MhMyAIizFjjoiT8yGIizHkToiT8yMIizDlDoiT8yCIizhu5A6Ik/MgsyBIizhu5I6Ik/MgsyAIizhu5Y6Ik/MgsyDIizIrjoiT8yHIizIsDoiT8yHzIQiLMWQOiJPzIsiLOG5lDoiUMyBIizhuZY6IlDMhyIsxZQ6IlLMgSIsxZg6IlLMjCIs4bmYOiJSzIciLMWWOiJSzKciLMWaOiJTzIEiLOG5pDoiU8yBzIciLMWgOiJTzIwiLOG5pjoiU8yMzIciLMWcOiJTzIIiLOG5oDoiU8yHIizFnjoiU8ynIizFpDoiVMyMIizhuao6IlTMhyIsxaI6IlTMpyIsw5o6IlXMgSIsw5k6IlXMgCIsw5w6IlXMiCIsx5c6IlXMiMyBIizHmzoiVcyIzIAiLMeVOiJVzIjMhCIsx5k6IlXMiMyMIizFqDoiVcyDIizhubg6IlXMg8yBIizFqjoiVcyEIizhubo6IlXMhMyIIizFrDoiVcyGIizHkzoiVcyMIizDmzoiVcyCIizFrjoiVcyKIizFsDoiVcyLIizhubw6IlbMgyIs4bqCOiJXzIEiLOG6gDoiV8yAIizhuoQ6IlfMiCIsxbQ6IlfMgiIs4bqGOiJXzIciLOG6jDoiWMyIIizhuoo6IljMhyIsw506IlnMgSIs4buyOiJZzIAiLMW4OiJZzIgiLOG7uDoiWcyDIizIsjoiWcyEIizFtjoiWcyCIizhuo46IlnMhyIsxbk6IlrMgSIsxb06IlrMjCIs4bqQOiJazIIiLMW7OiJazIciLM6sOiLOscyBIizhvbA6Is6xzIAiLOG+sToizrHMhCIs4b6wOiLOscyGIizOrToizrXMgSIs4b2yOiLOtcyAIizOrjoizrfMgSIs4b20OiLOt8yAIizOrzoizrnMgSIs4b22OiLOucyAIizPijoizrnMiCIszpA6Is65zIjMgSIs4b+SOiLOucyIzIAiLOG/kToizrnMhCIs4b+QOiLOucyGIizPjDoizr/MgSIs4b24OiLOv8yAIizPjToiz4XMgSIs4b26OiLPhcyAIizPizoiz4XMiCIszrA6Is+FzIjMgSIs4b+iOiLPhcyIzIAiLOG/oToiz4XMhCIs4b+gOiLPhcyGIizPjjoiz4nMgSIs4b28OiLPicyAIizOjjoizqXMgSIs4b+qOiLOpcyAIizOqzoizqXMiCIs4b+pOiLOpcyEIizhv6g6Is6lzIYiLM6POiLOqcyBIizhv7o6Is6pzIAifTtjbGFzcyBnUntjb25zdHJ1Y3RvcihzLHUpe3RoaXMubW9kZT12b2lkIDAsdGhpcy5ndWxsZXQ9dm9pZCAwLHRoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMubGVmdHJpZ2h0RGVwdGg9dm9pZCAwLHRoaXMubmV4dFRva2VuPXZvaWQgMCx0aGlzLm1vZGU9Im1hdGgiLHRoaXMuZ3VsbGV0PW5ldyBDVnQocyx1LHRoaXMubW9kZSksdGhpcy5zZXR0aW5ncz11LHRoaXMubGVmdHJpZ2h0RGVwdGg9MH1leHBlY3Qocyx1KXtpZih1PT09dm9pZCAwJiYodT0hMCksdGhpcy5mZXRjaCgpLnRleHQhPT1zKXRocm93IG5ldyBDaSgiRXhwZWN0ZWQgJyIrcysiJywgZ290ICciK3RoaXMuZmV0Y2goKS50ZXh0KyInIix0aGlzLmZldGNoKCkpO3UmJnRoaXMuY29uc3VtZSgpfWNvbnN1bWUoKXt0aGlzLm5leHRUb2tlbj1udWxsfWZldGNoKCl7cmV0dXJuIHRoaXMubmV4dFRva2VuPT1udWxsJiYodGhpcy5uZXh0VG9rZW49dGhpcy5ndWxsZXQuZXhwYW5kTmV4dFRva2VuKCkpLHRoaXMubmV4dFRva2VufXN3aXRjaE1vZGUocyl7dGhpcy5tb2RlPXMsdGhpcy5ndWxsZXQuc3dpdGNoTW9kZShzKX1wYXJzZSgpe3RoaXMuc2V0dGluZ3MuZ2xvYmFsR3JvdXB8fHRoaXMuZ3VsbGV0LmJlZ2luR3JvdXAoKSx0aGlzLnNldHRpbmdzLmNvbG9ySXNUZXh0Q29sb3ImJnRoaXMuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY29sb3IiLCJcXHRleHRjb2xvciIpO3RyeXt2YXIgcz10aGlzLnBhcnNlRXhwcmVzc2lvbighMSk7cmV0dXJuIHRoaXMuZXhwZWN0KCJFT0YiKSx0aGlzLnNldHRpbmdzLmdsb2JhbEdyb3VwfHx0aGlzLmd1bGxldC5lbmRHcm91cCgpLHN9ZmluYWxseXt0aGlzLmd1bGxldC5lbmRHcm91cHMoKX19c3VicGFyc2Uocyl7dmFyIHU9dGhpcy5uZXh0VG9rZW47dGhpcy5jb25zdW1lKCksdGhpcy5ndWxsZXQucHVzaFRva2VuKG5ldyBVNCgifSIpKSx0aGlzLmd1bGxldC5wdXNoVG9rZW5zKHMpO3ZhciBkPXRoaXMucGFyc2VFeHByZXNzaW9uKCExKTtyZXR1cm4gdGhpcy5leHBlY3QoIn0iKSx0aGlzLm5leHRUb2tlbj11LGR9cGFyc2VFeHByZXNzaW9uKHMsdSl7Zm9yKHZhciBkPVtdOzspe3RoaXMubW9kZT09PSJtYXRoIiYmdGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIHA9dGhpcy5mZXRjaCgpO2lmKGdSLmVuZE9mRXhwcmVzc2lvbi5pbmRleE9mKHAudGV4dCkhPT0tMXx8dSYmcC50ZXh0PT09dXx8cyYmTDlbcC50ZXh0XSYmTDlbcC50ZXh0XS5pbmZpeClicmVhazt2YXIgdj10aGlzLnBhcnNlQXRvbSh1KTtpZih2KXtpZih2LnR5cGU9PT0iaW50ZXJuYWwiKWNvbnRpbnVlfWVsc2UgYnJlYWs7ZC5wdXNoKHYpfXJldHVybiB0aGlzLm1vZGU9PT0idGV4dCImJnRoaXMuZm9ybUxpZ2F0dXJlcyhkKSx0aGlzLmhhbmRsZUluZml4Tm9kZXMoZCl9aGFuZGxlSW5maXhOb2RlcyhzKXtmb3IodmFyIHU9LTEsZCxwPTA7cDxzLmxlbmd0aDtwKyspaWYoc1twXS50eXBlPT09ImluZml4Iil7aWYodSE9PS0xKXRocm93IG5ldyBDaSgib25seSBvbmUgaW5maXggb3BlcmF0b3IgcGVyIGdyb3VwIixzW3BdLnRva2VuKTt1PXAsZD1zW3BdLnJlcGxhY2VXaXRofWlmKHUhPT0tMSYmZCl7dmFyIHYsYix5PXMuc2xpY2UoMCx1KSxUPXMuc2xpY2UodSsxKTt5Lmxlbmd0aD09PTEmJnlbMF0udHlwZT09PSJvcmRncm91cCI/dj15WzBdOnY9e3R5cGU6Im9yZGdyb3VwIixtb2RlOnRoaXMubW9kZSxib2R5Onl9LFQubGVuZ3RoPT09MSYmVFswXS50eXBlPT09Im9yZGdyb3VwIj9iPVRbMF06Yj17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGJvZHk6VH07dmFyIF87cmV0dXJuIGQ9PT0iXFxcXGFib3ZlZnJhYyI/Xz10aGlzLmNhbGxGdW5jdGlvbihkLFt2LHNbdV0sYl0sW10pOl89dGhpcy5jYWxsRnVuY3Rpb24oZCxbdixiXSxbXSksW19dfWVsc2UgcmV0dXJuIHN9aGFuZGxlU3VwU3Vic2NyaXB0KHMpe3ZhciB1PXRoaXMuZmV0Y2goKSxkPXUudGV4dDt0aGlzLmNvbnN1bWUoKSx0aGlzLmNvbnN1bWVTcGFjZXMoKTt2YXIgcD10aGlzLnBhcnNlR3JvdXAocyk7aWYoIXApdGhyb3cgbmV3IENpKCJFeHBlY3RlZCBncm91cCBhZnRlciAnIitkKyInIix1KTtyZXR1cm4gcH1mb3JtYXRVbnN1cHBvcnRlZENtZChzKXtmb3IodmFyIHU9W10sZD0wO2Q8cy5sZW5ndGg7ZCsrKXUucHVzaCh7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsdGV4dDpzW2RdfSk7dmFyIHA9e3R5cGU6InRleHQiLG1vZGU6dGhpcy5tb2RlLGJvZHk6dX0sdj17dHlwZToiY29sb3IiLG1vZGU6dGhpcy5tb2RlLGNvbG9yOnRoaXMuc2V0dGluZ3MuZXJyb3JDb2xvcixib2R5OltwXX07cmV0dXJuIHZ9cGFyc2VBdG9tKHMpe3ZhciB1PXRoaXMucGFyc2VHcm91cCgiYXRvbSIscyk7aWYodGhpcy5tb2RlPT09InRleHQiKXJldHVybiB1O2Zvcih2YXIgZCxwOzspe3RoaXMuY29uc3VtZVNwYWNlcygpO3ZhciB2PXRoaXMuZmV0Y2goKTtpZih2LnRleHQ9PT0iXFxsaW1pdHMifHx2LnRleHQ9PT0iXFxub2xpbWl0cyIpe2lmKHUmJnUudHlwZT09PSJvcCIpe3ZhciBiPXYudGV4dD09PSJcXGxpbWl0cyI7dS5saW1pdHM9Yix1LmFsd2F5c0hhbmRsZVN1cFN1Yj0hMH1lbHNlIGlmKHUmJnUudHlwZT09PSJvcGVyYXRvcm5hbWUiKXUuYWx3YXlzSGFuZGxlU3VwU3ViJiYodS5saW1pdHM9di50ZXh0PT09IlxcbGltaXRzIik7ZWxzZSB0aHJvdyBuZXcgQ2koIkxpbWl0IGNvbnRyb2xzIG11c3QgZm9sbG93IGEgbWF0aCBvcGVyYXRvciIsdik7dGhpcy5jb25zdW1lKCl9ZWxzZSBpZih2LnRleHQ9PT0iXiIpe2lmKGQpdGhyb3cgbmV3IENpKCJEb3VibGUgc3VwZXJzY3JpcHQiLHYpO2Q9dGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoInN1cGVyc2NyaXB0Iil9ZWxzZSBpZih2LnRleHQ9PT0iXyIpe2lmKHApdGhyb3cgbmV3IENpKCJEb3VibGUgc3Vic2NyaXB0Iix2KTtwPXRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KCJzdWJzY3JpcHQiKX1lbHNlIGlmKHYudGV4dD09PSInIil7aWYoZCl0aHJvdyBuZXcgQ2koIkRvdWJsZSBzdXBlcnNjcmlwdCIsdik7dmFyIHk9e3R5cGU6InRleHRvcmQiLG1vZGU6dGhpcy5tb2RlLHRleHQ6IlxccHJpbWUifSxUPVt5XTtmb3IodGhpcy5jb25zdW1lKCk7dGhpcy5mZXRjaCgpLnRleHQ9PT0iJyI7KVQucHVzaCh5KSx0aGlzLmNvbnN1bWUoKTt0aGlzLmZldGNoKCkudGV4dD09PSJeIiYmVC5wdXNoKHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KCJzdXBlcnNjcmlwdCIpKSxkPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsYm9keTpUfX1lbHNlIGlmKFRRW3YudGV4dF0pe3ZhciBfPVRRW3YudGV4dF0sQT1tcWUudGVzdCh2LnRleHQpO2Zvcih0aGlzLmNvbnN1bWUoKTs7KXt2YXIgUD10aGlzLmZldGNoKCkudGV4dDtpZighVFFbUF18fG1xZS50ZXN0KFApIT09QSlicmVhazt0aGlzLmNvbnN1bWUoKSxfKz1UUVtQXX12YXIgUj1uZXcgZ1IoXyx0aGlzLnNldHRpbmdzKS5wYXJzZSgpO0E/cD17dHlwZToib3JkZ3JvdXAiLG1vZGU6Im1hdGgiLGJvZHk6Un06ZD17dHlwZToib3JkZ3JvdXAiLG1vZGU6Im1hdGgiLGJvZHk6Un19ZWxzZSBicmVha31yZXR1cm4gZHx8cD97dHlwZToic3Vwc3ViIixtb2RlOnRoaXMubW9kZSxiYXNlOnUsc3VwOmQsc3ViOnB9OnV9cGFyc2VGdW5jdGlvbihzLHUpe3ZhciBkPXRoaXMuZmV0Y2goKSxwPWQudGV4dCx2PUw5W3BdO2lmKCF2KXJldHVybiBudWxsO2lmKHRoaXMuY29uc3VtZSgpLHUmJnUhPT0iYXRvbSImJiF2LmFsbG93ZWRJbkFyZ3VtZW50KXRocm93IG5ldyBDaSgiR290IGZ1bmN0aW9uICciK3ArIicgd2l0aCBubyBhcmd1bWVudHMiKyh1PyIgYXMgIit1OiIiKSxkKTtpZih0aGlzLm1vZGU9PT0idGV4dCImJiF2LmFsbG93ZWRJblRleHQpdGhyb3cgbmV3IENpKCJDYW4ndCB1c2UgZnVuY3Rpb24gJyIrcCsiJyBpbiB0ZXh0IG1vZGUiLGQpO2lmKHRoaXMubW9kZT09PSJtYXRoIiYmdi5hbGxvd2VkSW5NYXRoPT09ITEpdGhyb3cgbmV3IENpKCJDYW4ndCB1c2UgZnVuY3Rpb24gJyIrcCsiJyBpbiBtYXRoIG1vZGUiLGQpO3ZhcnthcmdzOmIsb3B0QXJnczp5fT10aGlzLnBhcnNlQXJndW1lbnRzKHAsdik7cmV0dXJuIHRoaXMuY2FsbEZ1bmN0aW9uKHAsYix5LGQscyl9Y2FsbEZ1bmN0aW9uKHMsdSxkLHAsdil7dmFyIGI9e2Z1bmNOYW1lOnMscGFyc2VyOnRoaXMsdG9rZW46cCxicmVha09uVG9rZW5UZXh0OnZ9LHk9TDlbc107aWYoeSYmeS5oYW5kbGVyKXJldHVybiB5LmhhbmRsZXIoYix1LGQpO3Rocm93IG5ldyBDaSgiTm8gZnVuY3Rpb24gaGFuZGxlciBmb3IgIitzKX1wYXJzZUFyZ3VtZW50cyhzLHUpe3ZhciBkPXUubnVtQXJncyt1Lm51bU9wdGlvbmFsQXJncztpZihkPT09MClyZXR1cm57YXJnczpbXSxvcHRBcmdzOltdfTtmb3IodmFyIHA9W10sdj1bXSxiPTA7YjxkO2IrKyl7dmFyIHk9dS5hcmdUeXBlcyYmdS5hcmdUeXBlc1tiXSxUPWI8dS5udW1PcHRpb25hbEFyZ3M7KHUucHJpbWl0aXZlJiZ5PT1udWxsfHx1LnR5cGU9PT0ic3FydCImJmI9PT0xJiZ2WzBdPT1udWxsKSYmKHk9InByaW1pdGl2ZSIpO3ZhciBfPXRoaXMucGFyc2VHcm91cE9mVHlwZSgiYXJndW1lbnQgdG8gJyIrcysiJyIseSxUKTtpZihUKXYucHVzaChfKTtlbHNlIGlmKF8hPW51bGwpcC5wdXNoKF8pO2Vsc2UgdGhyb3cgbmV3IENpKCJOdWxsIGFyZ3VtZW50LCBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBidWciKX1yZXR1cm57YXJnczpwLG9wdEFyZ3M6dn19cGFyc2VHcm91cE9mVHlwZShzLHUsZCl7c3dpdGNoKHUpe2Nhc2UiY29sb3IiOnJldHVybiB0aGlzLnBhcnNlQ29sb3JHcm91cChkKTtjYXNlInNpemUiOnJldHVybiB0aGlzLnBhcnNlU2l6ZUdyb3VwKGQpO2Nhc2UidXJsIjpyZXR1cm4gdGhpcy5wYXJzZVVybEdyb3VwKGQpO2Nhc2UibWF0aCI6Y2FzZSJ0ZXh0IjpyZXR1cm4gdGhpcy5wYXJzZUFyZ3VtZW50R3JvdXAoZCx1KTtjYXNlImhib3giOnt2YXIgcD10aGlzLnBhcnNlQXJndW1lbnRHcm91cChkLCJ0ZXh0Iik7cmV0dXJuIHAhPW51bGw/e3R5cGU6InN0eWxpbmciLG1vZGU6cC5tb2RlLGJvZHk6W3BdLHN0eWxlOiJ0ZXh0In06bnVsbH1jYXNlInJhdyI6e3ZhciB2PXRoaXMucGFyc2VTdHJpbmdHcm91cCgicmF3IixkKTtyZXR1cm4gdiE9bnVsbD97dHlwZToicmF3Iixtb2RlOiJ0ZXh0IixzdHJpbmc6di50ZXh0fTpudWxsfWNhc2UicHJpbWl0aXZlIjp7aWYoZCl0aHJvdyBuZXcgQ2koIkEgcHJpbWl0aXZlIGFyZ3VtZW50IGNhbm5vdCBiZSBvcHRpb25hbCIpO3ZhciBiPXRoaXMucGFyc2VHcm91cChzKTtpZihiPT1udWxsKXRocm93IG5ldyBDaSgiRXhwZWN0ZWQgZ3JvdXAgYXMgIitzLHRoaXMuZmV0Y2goKSk7cmV0dXJuIGJ9Y2FzZSJvcmlnaW5hbCI6Y2FzZSBudWxsOmNhc2Ugdm9pZCAwOnJldHVybiB0aGlzLnBhcnNlQXJndW1lbnRHcm91cChkKTtkZWZhdWx0OnRocm93IG5ldyBDaSgiVW5rbm93biBncm91cCB0eXBlIGFzICIrcyx0aGlzLmZldGNoKCkpfX1jb25zdW1lU3BhY2VzKCl7Zm9yKDt0aGlzLmZldGNoKCkudGV4dD09PSIgIjspdGhpcy5jb25zdW1lKCl9cGFyc2VTdHJpbmdHcm91cChzLHUpe3ZhciBkPXRoaXMuZ3VsbGV0LnNjYW5Bcmd1bWVudCh1KTtpZihkPT1udWxsKXJldHVybiBudWxsO2Zvcih2YXIgcD0iIix2Oyh2PXRoaXMuZmV0Y2goKSkudGV4dCE9PSJFT0YiOylwKz12LnRleHQsdGhpcy5jb25zdW1lKCk7cmV0dXJuIHRoaXMuY29uc3VtZSgpLGQudGV4dD1wLGR9cGFyc2VSZWdleEdyb3VwKHMsdSl7Zm9yKHZhciBkPXRoaXMuZmV0Y2goKSxwPWQsdj0iIixiOyhiPXRoaXMuZmV0Y2goKSkudGV4dCE9PSJFT0YiJiZzLnRlc3QoditiLnRleHQpOylwPWIsdis9cC50ZXh0LHRoaXMuY29uc3VtZSgpO2lmKHY9PT0iIil0aHJvdyBuZXcgQ2koIkludmFsaWQgIit1KyI6ICciK2QudGV4dCsiJyIsZCk7cmV0dXJuIGQucmFuZ2UocCx2KX1wYXJzZUNvbG9yR3JvdXAocyl7dmFyIHU9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJjb2xvciIscyk7aWYodT09bnVsbClyZXR1cm4gbnVsbDt2YXIgZD0vXigjW2EtZjAtOV17M318Iz9bYS1mMC05XXs2fXxbYS16XSspJC9pLmV4ZWModS50ZXh0KTtpZighZCl0aHJvdyBuZXcgQ2koIkludmFsaWQgY29sb3I6ICciK3UudGV4dCsiJyIsdSk7dmFyIHA9ZFswXTtyZXR1cm4vXlswLTlhLWZdezZ9JC9pLnRlc3QocCkmJihwPSIjIitwKSx7dHlwZToiY29sb3ItdG9rZW4iLG1vZGU6dGhpcy5tb2RlLGNvbG9yOnB9fXBhcnNlU2l6ZUdyb3VwKHMpe3ZhciB1LGQ9ITE7aWYodGhpcy5ndWxsZXQuY29uc3VtZVNwYWNlcygpLCFzJiZ0aGlzLmd1bGxldC5mdXR1cmUoKS50ZXh0IT09InsiP3U9dGhpcy5wYXJzZVJlZ2V4R3JvdXAoL15bLStdPyAqKD86JHxcZCt8XGQrXC5cZCp8XC5cZCopICpbYS16XXswLDJ9ICokLywic2l6ZSIpOnU9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJzaXplIixzKSwhdSlyZXR1cm4gbnVsbDshcyYmdS50ZXh0Lmxlbmd0aD09PTAmJih1LnRleHQ9IjBwdCIsZD0hMCk7dmFyIHA9LyhbLStdPykgKihcZCsoPzpcLlxkKik/fFwuXGQrKSAqKFthLXpdezJ9KS8uZXhlYyh1LnRleHQpO2lmKCFwKXRocm93IG5ldyBDaSgiSW52YWxpZCBzaXplOiAnIit1LnRleHQrIiciLHUpO3ZhciB2PXtudW1iZXI6KyhwWzFdK3BbMl0pLHVuaXQ6cFszXX07aWYoIUokZSh2KSl0aHJvdyBuZXcgQ2koIkludmFsaWQgdW5pdDogJyIrdi51bml0KyInIix1KTtyZXR1cm57dHlwZToic2l6ZSIsbW9kZTp0aGlzLm1vZGUsdmFsdWU6dixpc0JsYW5rOmR9fXBhcnNlVXJsR3JvdXAocyl7dGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZSgiJSIsMTMpLHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIn4iLDEyKTt2YXIgdT10aGlzLnBhcnNlU3RyaW5nR3JvdXAoInVybCIscyk7aWYodGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZSgiJSIsMTQpLHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIn4iLDEzKSx1PT1udWxsKXJldHVybiBudWxsO3ZhciBkPXUudGV4dC5yZXBsYWNlKC9cXChbIyQlJn5fXnt9XSkvZywiJDEiKTtyZXR1cm57dHlwZToidXJsIixtb2RlOnRoaXMubW9kZSx1cmw6ZH19cGFyc2VBcmd1bWVudEdyb3VwKHMsdSl7dmFyIGQ9dGhpcy5ndWxsZXQuc2NhbkFyZ3VtZW50KHMpO2lmKGQ9PW51bGwpcmV0dXJuIG51bGw7dmFyIHA9dGhpcy5tb2RlO3UmJnRoaXMuc3dpdGNoTW9kZSh1KSx0aGlzLmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIHY9dGhpcy5wYXJzZUV4cHJlc3Npb24oITEsIkVPRiIpO3RoaXMuZXhwZWN0KCJFT0YiKSx0aGlzLmd1bGxldC5lbmRHcm91cCgpO3ZhciBiPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsbG9jOmQubG9jLGJvZHk6dn07cmV0dXJuIHUmJnRoaXMuc3dpdGNoTW9kZShwKSxifXBhcnNlR3JvdXAocyx1KXt2YXIgZD10aGlzLmZldGNoKCkscD1kLnRleHQsdjtpZihwPT09InsifHxwPT09IlxcYmVnaW5ncm91cCIpe3RoaXMuY29uc3VtZSgpO3ZhciBiPXA9PT0ieyI/In0iOiJcXGVuZGdyb3VwIjt0aGlzLmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIHk9dGhpcy5wYXJzZUV4cHJlc3Npb24oITEsYiksVD10aGlzLmZldGNoKCk7dGhpcy5leHBlY3QoYiksdGhpcy5ndWxsZXQuZW5kR3JvdXAoKSx2PXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsbG9jOmxtLnJhbmdlKGQsVCksYm9keTp5LHNlbWlzaW1wbGU6cD09PSJcXGJlZ2luZ3JvdXAifHx2b2lkIDB9fWVsc2UgaWYodj10aGlzLnBhcnNlRnVuY3Rpb24odSxzKXx8dGhpcy5wYXJzZVN5bWJvbCgpLHY9PW51bGwmJnBbMF09PT0iXFwiJiYhYnFlLmhhc093blByb3BlcnR5KHApKXtpZih0aGlzLnNldHRpbmdzLnRocm93T25FcnJvcil0aHJvdyBuZXcgQ2koIlVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlOiAiK3AsZCk7dj10aGlzLmZvcm1hdFVuc3VwcG9ydGVkQ21kKHApLHRoaXMuY29uc3VtZSgpfXJldHVybiB2fWZvcm1MaWdhdHVyZXMocyl7Zm9yKHZhciB1PXMubGVuZ3RoLTEsZD0wO2Q8dTsrK2Qpe3ZhciBwPXNbZF0sdj1wLnRleHQ7dj09PSItIiYmc1tkKzFdLnRleHQ9PT0iLSImJihkKzE8dSYmc1tkKzJdLnRleHQ9PT0iLSI/KHMuc3BsaWNlKGQsMyx7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOmxtLnJhbmdlKHAsc1tkKzJdKSx0ZXh0OiItLS0ifSksdS09Mik6KHMuc3BsaWNlKGQsMix7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOmxtLnJhbmdlKHAsc1tkKzFdKSx0ZXh0OiItLSJ9KSx1LT0xKSksKHY9PT0iJyJ8fHY9PT0iYCIpJiZzW2QrMV0udGV4dD09PXYmJihzLnNwbGljZShkLDIse3R5cGU6InRleHRvcmQiLG1vZGU6InRleHQiLGxvYzpsbS5yYW5nZShwLHNbZCsxXSksdGV4dDp2K3Z9KSx1LT0xKX19cGFyc2VTeW1ib2woKXt2YXIgcz10aGlzLmZldGNoKCksdT1zLnRleHQ7aWYoL15cXHZlcmJbXmEtekEtWl0vLnRlc3QodSkpe3RoaXMuY29uc3VtZSgpO3ZhciBkPXUuc2xpY2UoNSkscD1kLmNoYXJBdCgwKT09PSIqIjtpZihwJiYoZD1kLnNsaWNlKDEpKSxkLmxlbmd0aDwyfHxkLmNoYXJBdCgwKSE9PWQuc2xpY2UoLTEpKXRocm93IG5ldyBDaShgXFx2ZXJiIGFzc2VydGlvbiBmYWlsZWQgLS0KICAgICAgICAgICAgICAgICAgICBwbGVhc2UgcmVwb3J0IHdoYXQgaW5wdXQgY2F1c2VkIHRoaXMgYnVnYCk7cmV0dXJuIGQ9ZC5zbGljZSgxLC0xKSx7dHlwZToidmVyYiIsbW9kZToidGV4dCIsYm9keTpkLHN0YXI6cH19dnFlLmhhc093blByb3BlcnR5KHVbMF0pJiYhVWxbdGhpcy5tb2RlXVt1WzBdXSYmKHRoaXMuc2V0dGluZ3Muc3RyaWN0JiZ0aGlzLm1vZGU9PT0ibWF0aCImJnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmljb2RlVGV4dEluTWF0aE1vZGUiLCdBY2NlbnRlZCBVbmljb2RlIHRleHQgY2hhcmFjdGVyICInK3VbMF0rJyIgdXNlZCBpbiBtYXRoIG1vZGUnLHMpLHU9dnFlW3VbMF1dK3Uuc2xpY2UoMSkpO3ZhciB2PXhWdC5leGVjKHUpO3YmJih1PXUuc3Vic3RyaW5nKDAsdi5pbmRleCksdT09PSJpIj91PSLEsSI6dT09PSJqIiYmKHU9Isi3IikpO3ZhciBiO2lmKFVsW3RoaXMubW9kZV1bdV0pe3RoaXMuc2V0dGluZ3Muc3RyaWN0JiZ0aGlzLm1vZGU9PT0ibWF0aCImJmFiZS5pbmRleE9mKHUpPj0wJiZ0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidW5pY29kZVRleHRJbk1hdGhNb2RlIiwnTGF0aW4tMS9Vbmljb2RlIHRleHQgY2hhcmFjdGVyICInK3VbMF0rJyIgdXNlZCBpbiBtYXRoIG1vZGUnLHMpO3ZhciB5PVVsW3RoaXMubW9kZV1bdV0uZ3JvdXAsVD1sbS5yYW5nZShzKSxfO2lmKGRIdC5oYXNPd25Qcm9wZXJ0eSh5KSl7dmFyIEE9eTtfPXt0eXBlOiJhdG9tIixtb2RlOnRoaXMubW9kZSxmYW1pbHk6QSxsb2M6VCx0ZXh0OnV9fWVsc2UgXz17dHlwZTp5LG1vZGU6dGhpcy5tb2RlLGxvYzpULHRleHQ6dX07Yj1ffWVsc2UgaWYodS5jaGFyQ29kZUF0KDApPj0xMjgpdGhpcy5zZXR0aW5ncy5zdHJpY3QmJihLJGUodS5jaGFyQ29kZUF0KDApKT90aGlzLm1vZGU9PT0ibWF0aCImJnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmljb2RlVGV4dEluTWF0aE1vZGUiLCdVbmljb2RlIHRleHQgY2hhcmFjdGVyICInK3VbMF0rJyIgdXNlZCBpbiBtYXRoIG1vZGUnLHMpOnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmtub3duU3ltYm9sIiwnVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyICInK3VbMF0rJyInKygiICgiK3UuY2hhckNvZGVBdCgwKSsiKSIpLHMpKSxiPXt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iixsb2M6bG0ucmFuZ2UocyksdGV4dDp1fTtlbHNlIHJldHVybiBudWxsO2lmKHRoaXMuY29uc3VtZSgpLHYpZm9yKHZhciBQPTA7UDx2WzBdLmxlbmd0aDtQKyspe3ZhciBSPXZbMF1bUF07aWYoIVBiZVtSXSl0aHJvdyBuZXcgQ2koIlVua25vd24gYWNjZW50ICcgIitSKyInIixzKTt2YXIgRj1QYmVbUl1bdGhpcy5tb2RlXXx8UGJlW1JdLnRleHQ7aWYoIUYpdGhyb3cgbmV3IENpKCJBY2NlbnQgIitSKyIgdW5zdXBwb3J0ZWQgaW4gIit0aGlzLm1vZGUrIiBtb2RlIixzKTtiPXt0eXBlOiJhY2NlbnQiLG1vZGU6dGhpcy5tb2RlLGxvYzpsbS5yYW5nZShzKSxsYWJlbDpGLGlzU3RyZXRjaHk6ITEsaXNTaGlmdHk6ITAsYmFzZTpifX1yZXR1cm4gYn19Z1IuZW5kT2ZFeHByZXNzaW9uPVsifSIsIlxcZW5kZ3JvdXAiLCJcXGVuZCIsIlxccmlnaHQiLCImIl07dmFyIEJiZT1mdW5jdGlvbihzLHUpe2lmKCEodHlwZW9mIHM9PSJzdHJpbmcifHxzIGluc3RhbmNlb2YgU3RyaW5nKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJLYVRlWCBjYW4gb25seSBwYXJzZSBzdHJpbmcgdHlwZWQgZXhwcmVzc2lvbiIpO3ZhciBkPW5ldyBnUihzLHUpO2RlbGV0ZSBkLmd1bGxldC5tYWNyb3MuY3VycmVudFsiXFxkZkB0YWciXTt2YXIgcD1kLnBhcnNlKCk7aWYoZGVsZXRlIGQuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50WyJcXGN1cnJlbnRAY29sb3IiXSxkZWxldGUgZC5ndWxsZXQubWFjcm9zLmN1cnJlbnRbIlxcY29sb3IiXSxkLmd1bGxldC5tYWNyb3MuZ2V0KCJcXGRmQHRhZyIpKXtpZighdS5kaXNwbGF5TW9kZSl0aHJvdyBuZXcgQ2koIlxcdGFnIHdvcmtzIG9ubHkgaW4gZGlzcGxheSBlcXVhdGlvbnMiKTtwPVt7dHlwZToidGFnIixtb2RlOiJ0ZXh0Iixib2R5OnAsdGFnOmQuc3VicGFyc2UoW25ldyBVNCgiXFxkZkB0YWciKV0pfV19cmV0dXJuIHB9LHdxZT1mdW5jdGlvbihzLHUsZCl7dS50ZXh0Q29udGVudD0iIjt2YXIgcD1GYmUocyxkKS50b05vZGUoKTt1LmFwcGVuZENoaWxkKHApfTt0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jb21wYXRNb2RlIT09IkNTUzFDb21wYXQiJiYodHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIldhcm5pbmc6IEthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS4gTWFrZSBzdXJlIHlvdXIgd2Vic2l0ZSBoYXMgYSBzdWl0YWJsZSBkb2N0eXBlLiIpLHdxZT1mdW5jdGlvbigpe3Rocm93IG5ldyBDaSgiS2FUZVggZG9lc24ndCB3b3JrIGluIHF1aXJrcyBtb2RlLiIpfSk7dmFyIFNWdD1mdW5jdGlvbihzLHUpe3ZhciBkPUZiZShzLHUpLnRvTWFya3VwKCk7cmV0dXJuIGR9LF9WdD1mdW5jdGlvbihzLHUpe3ZhciBkPW5ldyBZMmUodSk7cmV0dXJuIEJiZShzLGQpfSx5cWU9ZnVuY3Rpb24ocyx1LGQpe2lmKGQudGhyb3dPbkVycm9yfHwhKHMgaW5zdGFuY2VvZiBDaSkpdGhyb3cgczt2YXIgcD16bi5tYWtlU3BhbihbImthdGV4LWVycm9yIl0sW25ldyBCdih1KV0pO3JldHVybiBwLnNldEF0dHJpYnV0ZSgidGl0bGUiLHMudG9TdHJpbmcoKSkscC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiY29sb3I6IitkLmVycm9yQ29sb3IpLHB9LEZiZT1mdW5jdGlvbihzLHUpe3ZhciBkPW5ldyBZMmUodSk7dHJ5e3ZhciBwPUJiZShzLGQpO3JldHVybiBCSHQocCxzLGQpfWNhdGNoKHYpe3JldHVybiB5cWUodixzLGQpfX0sQVZ0PWZ1bmN0aW9uKHMsdSl7dmFyIGQ9bmV3IFkyZSh1KTt0cnl7dmFyIHA9QmJlKHMsZCk7cmV0dXJuIEZIdChwLHMsZCl9Y2F0Y2godil7cmV0dXJuIHlxZSh2LHMsZCl9fSxMVnQ9e3ZlcnNpb246IjAuMTYuOSIscmVuZGVyOndxZSxyZW5kZXJUb1N0cmluZzpTVnQsUGFyc2VFcnJvcjpDaSxTRVRUSU5HU19TQ0hFTUE6clEsX19wYXJzZTpfVnQsX19yZW5kZXJUb0RvbVRyZWU6RmJlLF9fcmVuZGVyVG9IVE1MVHJlZTpBVnQsX19zZXRGb250TWV0cmljczphSHQsX19kZWZpbmVTeW1ib2w6d2UsX19kZWZpbmVGdW5jdGlvbjpKaSxfX2RlZmluZU1hY3JvOmV0LF9fZG9tVHJlZTp7U3BhbjpjUixBbmNob3I6dGJlLFN5bWJvbE5vZGU6QnYsU3ZnTm9kZTpENyxQYXRoTm9kZTpDOSxMaW5lTm9kZTpuYmV9fTtjb25zdCBNVnQ9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6TFZ0fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBDUT1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKFRyLEZuLHFuLFVuKXtmb3IocW49cW58fHt9LFVuPVRyLmxlbmd0aDtVbi0tO3FuW1RyW1VuXV09Rm4pO3JldHVybiBxbn0scz1bMSwyNF0sdT1bMSwyNV0sZD1bMSwyNl0scD1bMSwyN10sdj1bMSwyOF0sYj1bMSw2M10seT1bMSw2NF0sVD1bMSw2NV0sXz1bMSw2Nl0sQT1bMSw2N10sUD1bMSw2OF0sUj1bMSw2OV0sRj1bMSwyOV0saj1bMSwzMF0sSz1bMSwzMV0sZWU9WzEsMzJdLGllPVsxLDMzXSxvZT1bMSwzNF0scGU9WzEsMzVdLGJlPVsxLDM2XSxhZT1bMSwzN10sbmU9WzEsMzhdLHNlPVsxLDM5XSxkZT1bMSw0MF0sWD1bMSw0MV0sZ2U9WzEsNDJdLFc9WzEsNDNdLHhlPVsxLDQ0XSxVPVsxLDQ1XSxGZT1bMSw0Nl0sUGU9WzEsNDddLGplPVsxLDQ4XSxJZT1bMSw1MF0sU2U9WzEsNTFdLENlPVsxLDUyXSxrZT1bMSw1M10sS2U9WzEsNTRdLEZ0PVsxLDU1XSxOZT1bMSw1Nl0sZ249WzEsNTddLF90PVsxLDU4XSxFdD1bMSw1OV0sR3Q9WzEsNjBdLGxuPVsxNCw0Ml0seHQ9WzE0LDM0LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSxQdD1bMTIsMTQsMzQsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzRdLFFlPVsxLDgyXSxEdD1bMSw4M10sa3Q9WzEsODRdLE9uPVsxLDg1XSxodD1bMTIsMTQsNDJdLHpyPVsxMiwxNCwzMyw0Ml0seXQ9WzEyLDE0LDMzLDQyLDc2LDc3LDc5LDgwXSxqaT1bMTIsMzNdLHhpPVszNCwzNiwzNywzOCwzOSw0MCw0MSw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NF0sTWE9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3Rpb246NSxkaXJlY3Rpb25fdGI6NixkaXJlY3Rpb25fYnQ6NyxkaXJlY3Rpb25fcmw6OCxkaXJlY3Rpb25fbHI6OSxncmFwaENvbmZpZzoxMCxDNF9DT05URVhUOjExLE5FV0xJTkU6MTIsc3RhdGVtZW50czoxMyxFT0Y6MTQsQzRfQ09OVEFJTkVSOjE1LEM0X0NPTVBPTkVOVDoxNixDNF9EWU5BTUlDOjE3LEM0X0RFUExPWU1FTlQ6MTgsb3RoZXJTdGF0ZW1lbnRzOjE5LGRpYWdyYW1TdGF0ZW1lbnRzOjIwLG90aGVyU3RhdGVtZW50OjIxLHRpdGxlOjIyLGFjY0Rlc2NyaXB0aW9uOjIzLGFjY190aXRsZToyNCxhY2NfdGl0bGVfdmFsdWU6MjUsYWNjX2Rlc2NyOjI2LGFjY19kZXNjcl92YWx1ZToyNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjI4LGJvdW5kYXJ5U3RhdGVtZW50OjI5LGJvdW5kYXJ5U3RhcnRTdGF0ZW1lbnQ6MzAsYm91bmRhcnlTdG9wU3RhdGVtZW50OjMxLGJvdW5kYXJ5U3RhcnQ6MzIsTEJSQUNFOjMzLEVOVEVSUFJJU0VfQk9VTkRBUlk6MzQsYXR0cmlidXRlczozNSxTWVNURU1fQk9VTkRBUlk6MzYsQk9VTkRBUlk6MzcsQ09OVEFJTkVSX0JPVU5EQVJZOjM4LE5PREU6MzksTk9ERV9MOjQwLE5PREVfUjo0MSxSQlJBQ0U6NDIsZGlhZ3JhbVN0YXRlbWVudDo0MyxQRVJTT046NDQsUEVSU09OX0VYVDo0NSxTWVNURU06NDYsU1lTVEVNX0RCOjQ3LFNZU1RFTV9RVUVVRTo0OCxTWVNURU1fRVhUOjQ5LFNZU1RFTV9FWFRfREI6NTAsU1lTVEVNX0VYVF9RVUVVRTo1MSxDT05UQUlORVI6NTIsQ09OVEFJTkVSX0RCOjUzLENPTlRBSU5FUl9RVUVVRTo1NCxDT05UQUlORVJfRVhUOjU1LENPTlRBSU5FUl9FWFRfREI6NTYsQ09OVEFJTkVSX0VYVF9RVUVVRTo1NyxDT01QT05FTlQ6NTgsQ09NUE9ORU5UX0RCOjU5LENPTVBPTkVOVF9RVUVVRTo2MCxDT01QT05FTlRfRVhUOjYxLENPTVBPTkVOVF9FWFRfREI6NjIsQ09NUE9ORU5UX0VYVF9RVUVVRTo2MyxSRUw6NjQsQklSRUw6NjUsUkVMX1U6NjYsUkVMX0Q6NjcsUkVMX0w6NjgsUkVMX1I6NjksUkVMX0I6NzAsUkVMX0lOREVYOjcxLFVQREFURV9FTF9TVFlMRTo3MixVUERBVEVfUkVMX1NUWUxFOjczLFVQREFURV9MQVlPVVRfQ09ORklHOjc0LGF0dHJpYnV0ZTo3NSxTVFI6NzYsU1RSX0tFWTo3NyxTVFJfVkFMVUU6NzgsQVRUUklCVVRFOjc5LEFUVFJJQlVURV9FTVBUWTo4MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiZGlyZWN0aW9uX3RiIiw3OiJkaXJlY3Rpb25fYnQiLDg6ImRpcmVjdGlvbl9ybCIsOToiZGlyZWN0aW9uX2xyIiwxMToiQzRfQ09OVEVYVCIsMTI6Ik5FV0xJTkUiLDE0OiJFT0YiLDE1OiJDNF9DT05UQUlORVIiLDE2OiJDNF9DT01QT05FTlQiLDE3OiJDNF9EWU5BTUlDIiwxODoiQzRfREVQTE9ZTUVOVCIsMjI6InRpdGxlIiwyMzoiYWNjRGVzY3JpcHRpb24iLDI0OiJhY2NfdGl0bGUiLDI1OiJhY2NfdGl0bGVfdmFsdWUiLDI2OiJhY2NfZGVzY3IiLDI3OiJhY2NfZGVzY3JfdmFsdWUiLDI4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzMzoiTEJSQUNFIiwzNDoiRU5URVJQUklTRV9CT1VOREFSWSIsMzY6IlNZU1RFTV9CT1VOREFSWSIsMzc6IkJPVU5EQVJZIiwzODoiQ09OVEFJTkVSX0JPVU5EQVJZIiwzOToiTk9ERSIsNDA6Ik5PREVfTCIsNDE6Ik5PREVfUiIsNDI6IlJCUkFDRSIsNDQ6IlBFUlNPTiIsNDU6IlBFUlNPTl9FWFQiLDQ2OiJTWVNURU0iLDQ3OiJTWVNURU1fREIiLDQ4OiJTWVNURU1fUVVFVUUiLDQ5OiJTWVNURU1fRVhUIiw1MDoiU1lTVEVNX0VYVF9EQiIsNTE6IlNZU1RFTV9FWFRfUVVFVUUiLDUyOiJDT05UQUlORVIiLDUzOiJDT05UQUlORVJfREIiLDU0OiJDT05UQUlORVJfUVVFVUUiLDU1OiJDT05UQUlORVJfRVhUIiw1NjoiQ09OVEFJTkVSX0VYVF9EQiIsNTc6IkNPTlRBSU5FUl9FWFRfUVVFVUUiLDU4OiJDT01QT05FTlQiLDU5OiJDT01QT05FTlRfREIiLDYwOiJDT01QT05FTlRfUVVFVUUiLDYxOiJDT01QT05FTlRfRVhUIiw2MjoiQ09NUE9ORU5UX0VYVF9EQiIsNjM6IkNPTVBPTkVOVF9FWFRfUVVFVUUiLDY0OiJSRUwiLDY1OiJCSVJFTCIsNjY6IlJFTF9VIiw2NzoiUkVMX0QiLDY4OiJSRUxfTCIsNjk6IlJFTF9SIiw3MDoiUkVMX0IiLDcxOiJSRUxfSU5ERVgiLDcyOiJVUERBVEVfRUxfU1RZTEUiLDczOiJVUERBVEVfUkVMX1NUWUxFIiw3NDoiVVBEQVRFX0xBWU9VVF9DT05GSUciLDc2OiJTVFIiLDc3OiJTVFJfS0VZIiw3ODoiU1RSX1ZBTFVFIiw3OToiQVRUUklCVVRFIiw4MDoiQVRUUklCVVRFX0VNUFRZIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDFdLFs1LDFdLFs1LDFdLFs1LDFdLFs1LDFdLFs0LDFdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEzLDFdLFsxMywxXSxbMTMsMl0sWzE5LDFdLFsxOSwyXSxbMTksM10sWzIxLDFdLFsyMSwxXSxbMjEsMl0sWzIxLDJdLFsyMSwxXSxbMjksM10sWzMwLDNdLFszMCwzXSxbMzAsNF0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMSwxXSxbMjAsMV0sWzIwLDJdLFsyMCwzXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywxXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFszNSwxXSxbMzUsMl0sWzc1LDFdLFs3NSwyXSxbNzUsMV0sWzc1LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEZuLHFuLFVuLEF0LHd0LG9uLGZuKXt2YXIgQW49b24ubGVuZ3RoLTE7c3dpdGNoKHd0KXtjYXNlIDM6QXQuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNDpBdC5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSA1OkF0LnNldERpcmVjdGlvbigiUkwiKTticmVhaztjYXNlIDY6QXQuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTI6QXQuc2V0QzRUeXBlKG9uW0FuLTNdKTticmVhaztjYXNlIDE5OkF0LnNldFRpdGxlKG9uW0FuXS5zdWJzdHJpbmcoNikpLHRoaXMuJD1vbltBbl0uc3Vic3RyaW5nKDYpO2JyZWFrO2Nhc2UgMjA6QXQuc2V0QWNjRGVzY3JpcHRpb24ob25bQW5dLnN1YnN0cmluZygxNSkpLHRoaXMuJD1vbltBbl0uc3Vic3RyaW5nKDE1KTticmVhaztjYXNlIDIxOnRoaXMuJD1vbltBbl0udHJpbSgpLEF0LnNldFRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnRoaXMuJD1vbltBbl0udHJpbSgpLEF0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyODpjYXNlIDI5Om9uW0FuXS5zcGxpY2UoMiwwLCJFTlRFUlBSSVNFIiksQXQuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSAzMDpBdC5hZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5KC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDMxOm9uW0FuXS5zcGxpY2UoMiwwLCJDT05UQUlORVIiKSxBdC5hZGRDb250YWluZXJCb3VuZGFyeSguLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSAzMjpBdC5hZGREZXBsb3ltZW50Tm9kZSgibm9kZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgMzM6QXQuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVMIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSAzNDpBdC5hZGREZXBsb3ltZW50Tm9kZSgibm9kZVIiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDM1OkF0LnBvcEJvdW5kYXJ5UGFyc2VTdGFjaygpO2JyZWFrO2Nhc2UgMzk6QXQuYWRkUGVyc29uT3JTeXN0ZW0oInBlcnNvbiIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDA6QXQuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3BlcnNvbiIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDE6QXQuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDI6QXQuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9kYiIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDM6QXQuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDQ6QXQuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDU6QXQuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9kYiIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDY6QXQuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDc6QXQuYWRkQ29udGFpbmVyKCJjb250YWluZXIiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDQ4OkF0LmFkZENvbnRhaW5lcigiY29udGFpbmVyX2RiIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA0OTpBdC5hZGRDb250YWluZXIoImNvbnRhaW5lcl9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNTA6QXQuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXIiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDUxOkF0LmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyX2RiIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA1MjpBdC5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNTM6QXQuYWRkQ29tcG9uZW50KCJjb21wb25lbnQiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDU0OkF0LmFkZENvbXBvbmVudCgiY29tcG9uZW50X2RiIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA1NTpBdC5hZGRDb21wb25lbnQoImNvbXBvbmVudF9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNTY6QXQuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnQiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDU3OkF0LmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50X2RiIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA1ODpBdC5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNjA6QXQuYWRkUmVsKCJyZWwiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDYxOkF0LmFkZFJlbCgiYmlyZWwiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDYyOkF0LmFkZFJlbCgicmVsX3UiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDYzOkF0LmFkZFJlbCgicmVsX2QiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDY0OkF0LmFkZFJlbCgicmVsX2wiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDY1OkF0LmFkZFJlbCgicmVsX3IiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDY2OkF0LmFkZFJlbCgicmVsX2IiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDY3Om9uW0FuXS5zcGxpY2UoMCwxKSxBdC5hZGRSZWwoInJlbCIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNjg6QXQudXBkYXRlRWxTdHlsZSgidXBkYXRlX2VsX3N0eWxlIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA2OTpBdC51cGRhdGVSZWxTdHlsZSgidXBkYXRlX3JlbF9zdHlsZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNzA6QXQudXBkYXRlTGF5b3V0Q29uZmlnKCJ1cGRhdGVfbGF5b3V0X2NvbmZpZyIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPVtvbltBbl1dO2JyZWFrO2Nhc2UgNzI6b25bQW5dLnVuc2hpZnQob25bQW4tMV0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA3MzpjYXNlIDc1OnRoaXMuJD1vbltBbl0udHJpbSgpO2JyZWFrO2Nhc2UgNzQ6bGV0IG9vPXt9O29vW29uW0FuLTFdLnRyaW0oKV09b25bQW5dLnRyaW0oKSx0aGlzLiQ9b287YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9IiI7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6WzEsNV0sNzpbMSw2XSw4OlsxLDddLDk6WzEsOF0sMTA6NCwxMTpbMSw5XSwxNTpbMSwxMF0sMTY6WzEsMTFdLDE3OlsxLDEyXSwxODpbMSwxM119LHsxOlszXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiw3XX0sezE6WzIsM119LHsxOlsyLDRdfSx7MTpbMiw1XX0sezE6WzIsNl19LHsxMjpbMSwxNF19LHsxMjpbMSwxNV19LHsxMjpbMSwxNl19LHsxMjpbMSwxN119LHsxMjpbMSwxOF19LHsxMzoxOSwxOToyMCwyMDoyMSwyMToyMiwyMjpzLDIzOnUsMjQ6ZCwyNjpwLDI4OnYsMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjp5LDM3OlQsMzg6XywzOTpBLDQwOlAsNDE6Uiw0MzoyMyw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZSw1MTpiZSw1MjphZSw1MzpuZSw1NDpzZSw1NTpkZSw1NjpYLDU3OmdlLDU4OlcsNTk6eGUsNjA6VSw2MTpGZSw2MjpQZSw2MzpqZSw2NDpJZSw2NTpTZSw2NjpDZSw2NzprZSw2ODpLZSw2OTpGdCw3MDpOZSw3MTpnbiw3MjpfdCw3MzpFdCw3NDpHdH0sezEzOjcwLDE5OjIwLDIwOjIxLDIxOjIyLDIyOnMsMjM6dSwyNDpkLDI2OnAsMjg6diwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OnksMzc6VCwzODpfLDM5OkEsNDA6UCw0MTpSLDQzOjIzLDQ0OkYsNDU6aiw0NjpLLDQ3OmVlLDQ4OmllLDQ5Om9lLDUwOnBlLDUxOmJlLDUyOmFlLDUzOm5lLDU0OnNlLDU1OmRlLDU2OlgsNTc6Z2UsNTg6Vyw1OTp4ZSw2MDpVLDYxOkZlLDYyOlBlLDYzOmplLDY0OkllLDY1OlNlLDY2OkNlLDY3OmtlLDY4OktlLDY5OkZ0LDcwOk5lLDcxOmduLDcyOl90LDczOkV0LDc0Okd0fSx7MTM6NzEsMTk6MjAsMjA6MjEsMjE6MjIsMjI6cywyMzp1LDI0OmQsMjY6cCwyODp2LDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6eSwzNzpULDM4Ol8sMzk6QSw0MDpQLDQxOlIsNDM6MjMsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGUsNTE6YmUsNTI6YWUsNTM6bmUsNTQ6c2UsNTU6ZGUsNTY6WCw1NzpnZSw1ODpXLDU5OnhlLDYwOlUsNjE6RmUsNjI6UGUsNjM6amUsNjQ6SWUsNjU6U2UsNjY6Q2UsNjc6a2UsNjg6S2UsNjk6RnQsNzA6TmUsNzE6Z24sNzI6X3QsNzM6RXQsNzQ6R3R9LHsxMzo3MiwxOToyMCwyMDoyMSwyMToyMiwyMjpzLDIzOnUsMjQ6ZCwyNjpwLDI4OnYsMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjp5LDM3OlQsMzg6XywzOTpBLDQwOlAsNDE6Uiw0MzoyMyw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZSw1MTpiZSw1MjphZSw1MzpuZSw1NDpzZSw1NTpkZSw1NjpYLDU3OmdlLDU4OlcsNTk6eGUsNjA6VSw2MTpGZSw2MjpQZSw2MzpqZSw2NDpJZSw2NTpTZSw2NjpDZSw2NzprZSw2ODpLZSw2OTpGdCw3MDpOZSw3MTpnbiw3MjpfdCw3MzpFdCw3NDpHdH0sezEzOjczLDE5OjIwLDIwOjIxLDIxOjIyLDIyOnMsMjM6dSwyNDpkLDI2OnAsMjg6diwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OnksMzc6VCwzODpfLDM5OkEsNDA6UCw0MTpSLDQzOjIzLDQ0OkYsNDU6aiw0NjpLLDQ3OmVlLDQ4OmllLDQ5Om9lLDUwOnBlLDUxOmJlLDUyOmFlLDUzOm5lLDU0OnNlLDU1OmRlLDU2OlgsNTc6Z2UsNTg6Vyw1OTp4ZSw2MDpVLDYxOkZlLDYyOlBlLDYzOmplLDY0OkllLDY1OlNlLDY2OkNlLDY3OmtlLDY4OktlLDY5OkZ0LDcwOk5lLDcxOmduLDcyOl90LDczOkV0LDc0Okd0fSx7MTQ6WzEsNzRdfSxpKGxuLFsyLDEzXSx7NDM6MjMsMjk6NDksMzA6NjEsMzI6NjIsMjA6NzUsMzQ6YiwzNjp5LDM3OlQsMzg6XywzOTpBLDQwOlAsNDE6Uiw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZSw1MTpiZSw1MjphZSw1MzpuZSw1NDpzZSw1NTpkZSw1NjpYLDU3OmdlLDU4OlcsNTk6eGUsNjA6VSw2MTpGZSw2MjpQZSw2MzpqZSw2NDpJZSw2NTpTZSw2NjpDZSw2NzprZSw2ODpLZSw2OTpGdCw3MDpOZSw3MTpnbiw3MjpfdCw3MzpFdCw3NDpHdH0pLGkobG4sWzIsMTRdKSxpKHh0LFsyLDE2XSx7MTI6WzEsNzZdfSksaShsbixbMiwzNl0sezEyOlsxLDc3XX0pLGkoUHQsWzIsMTldKSxpKFB0LFsyLDIwXSksezI1OlsxLDc4XX0sezI3OlsxLDc5XX0saShQdCxbMiwyM10pLHszNTo4MCw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1Ojg2LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6ODcsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNTo4OCw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1Ojg5LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6OTAsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNTo5MSw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1OjkyLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6OTMsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNTo5NCw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1Ojk1LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6OTYsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNTo5Nyw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1Ojk4LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6OTksNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDAsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDEsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDIsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDMsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDQsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LGkoaHQsWzIsNTldKSx7MzU6MTA1LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTA2LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTA3LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTA4LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTA5LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTEwLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTExLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTEyLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTEzLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTE0LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTE1LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MjA6MTE2LDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6eSwzNzpULDM4Ol8sMzk6QSw0MDpQLDQxOlIsNDM6MjMsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGUsNTE6YmUsNTI6YWUsNTM6bmUsNTQ6c2UsNTU6ZGUsNTY6WCw1NzpnZSw1ODpXLDU5OnhlLDYwOlUsNjE6RmUsNjI6UGUsNjM6amUsNjQ6SWUsNjU6U2UsNjY6Q2UsNjc6a2UsNjg6S2UsNjk6RnQsNzA6TmUsNzE6Z24sNzI6X3QsNzM6RXQsNzQ6R3R9LHsxMjpbMSwxMThdLDMzOlsxLDExN119LHszNToxMTksNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjAsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjEsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjIsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjMsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjQsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjUsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHsxNDpbMSwxMjZdfSx7MTQ6WzEsMTI3XX0sezE0OlsxLDEyOF19LHsxNDpbMSwxMjldfSx7MTpbMiw4XX0saShsbixbMiwxNV0pLGkoeHQsWzIsMTddLHsyMToyMiwxOToxMzAsMjI6cywyMzp1LDI0OmQsMjY6cCwyODp2fSksaShsbixbMiwzN10sezE5OjIwLDIwOjIxLDIxOjIyLDQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDEzOjEzMSwyMjpzLDIzOnUsMjQ6ZCwyNjpwLDI4OnYsMzQ6YiwzNjp5LDM3OlQsMzg6XywzOTpBLDQwOlAsNDE6Uiw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZSw1MTpiZSw1MjphZSw1MzpuZSw1NDpzZSw1NTpkZSw1NjpYLDU3OmdlLDU4OlcsNTk6eGUsNjA6VSw2MTpGZSw2MjpQZSw2MzpqZSw2NDpJZSw2NTpTZSw2NjpDZSw2NzprZSw2ODpLZSw2OTpGdCw3MDpOZSw3MTpnbiw3MjpfdCw3MzpFdCw3NDpHdH0pLGkoUHQsWzIsMjFdKSxpKFB0LFsyLDIyXSksaShodCxbMiwzOV0pLGkoenIsWzIsNzFdLHs3NTo4MSwzNToxMzIsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259KSxpKHl0LFsyLDczXSksezc4OlsxLDEzM119LGkoeXQsWzIsNzVdKSxpKHl0LFsyLDc2XSksaShodCxbMiw0MF0pLGkoaHQsWzIsNDFdKSxpKGh0LFsyLDQyXSksaShodCxbMiw0M10pLGkoaHQsWzIsNDRdKSxpKGh0LFsyLDQ1XSksaShodCxbMiw0Nl0pLGkoaHQsWzIsNDddKSxpKGh0LFsyLDQ4XSksaShodCxbMiw0OV0pLGkoaHQsWzIsNTBdKSxpKGh0LFsyLDUxXSksaShodCxbMiw1Ml0pLGkoaHQsWzIsNTNdKSxpKGh0LFsyLDU0XSksaShodCxbMiw1NV0pLGkoaHQsWzIsNTZdKSxpKGh0LFsyLDU3XSksaShodCxbMiw1OF0pLGkoaHQsWzIsNjBdKSxpKGh0LFsyLDYxXSksaShodCxbMiw2Ml0pLGkoaHQsWzIsNjNdKSxpKGh0LFsyLDY0XSksaShodCxbMiw2NV0pLGkoaHQsWzIsNjZdKSxpKGh0LFsyLDY3XSksaShodCxbMiw2OF0pLGkoaHQsWzIsNjldKSxpKGh0LFsyLDcwXSksezMxOjEzNCw0MjpbMSwxMzVdfSx7MTI6WzEsMTM2XX0sezMzOlsxLDEzN119LGkoamksWzIsMjhdKSxpKGppLFsyLDI5XSksaShqaSxbMiwzMF0pLGkoamksWzIsMzFdKSxpKGppLFsyLDMyXSksaShqaSxbMiwzM10pLGkoamksWzIsMzRdKSx7MTpbMiw5XX0sezE6WzIsMTBdfSx7MTpbMiwxMV19LHsxOlsyLDEyXX0saSh4dCxbMiwxOF0pLGkobG4sWzIsMzhdKSxpKHpyLFsyLDcyXSksaSh5dCxbMiw3NF0pLGkoaHQsWzIsMjRdKSxpKGh0LFsyLDM1XSksaSh4aSxbMiwyNV0pLGkoeGksWzIsMjZdLHsxMjpbMSwxMzhdfSksaSh4aSxbMiwyN10pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSwzOlsyLDJdLDQ6WzIsN10sNTpbMiwzXSw2OlsyLDRdLDc6WzIsNV0sODpbMiw2XSw3NDpbMiw4XSwxMjY6WzIsOV0sMTI3OlsyLDEwXSwxMjg6WzIsMTFdLDEyOTpbMiwxMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oRm4scW4pe2lmKHFuLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoRm4pO2Vsc2V7dmFyIFVuPW5ldyBFcnJvcihGbik7dGhyb3cgVW4uaGFzaD1xbixVbn19LHBhcnNlOmZ1bmN0aW9uKEZuKXt2YXIgcW49dGhpcyxVbj1bMF0sQXQ9W10sd3Q9W251bGxdLG9uPVtdLGZuPXRoaXMudGFibGUsQW49IiIsb289MCxqbz0wLCRvPTIsUGE9MSx3bz1vbi5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxfcz1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHRsPXt5eTp7fX07Zm9yKHZhciBkYSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGRhKSYmKHRsLnl5W2RhXT10aGlzLnl5W2RhXSk7X3Muc2V0SW5wdXQoRm4sdGwueXkpLHRsLnl5LmxleGVyPV9zLHRsLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBfcy55eWxsb2M+InUiJiYoX3MueXlsbG9jPXt9KTt2YXIgajA9X3MueXlsbG9jO29uLnB1c2goajApO3ZhciBwbT1fcy5vcHRpb25zJiZfcy5vcHRpb25zLnJhbmdlczt0eXBlb2YgdGwueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9dGwueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gTWwoKXt2YXIga2g7cmV0dXJuIGtoPUF0LnBvcCgpfHxfcy5sZXgoKXx8UGEsdHlwZW9mIGtoIT0ibnVtYmVyIiYmKGtoIGluc3RhbmNlb2YgQXJyYXkmJihBdD1raCxraD1BdC5wb3AoKSksa2g9cW4uc3ltYm9sc19ba2hdfHxraCksa2h9Zm9yKHZhciBYYyxCYyxqYSxPdSxTYT17fSxQbyxGYyx4YSxCYTs7KXtpZihCYz1VbltVbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tCY10/amE9dGhpcy5kZWZhdWx0QWN0aW9uc1tCY106KChYYz09PW51bGx8fHR5cGVvZiBYYz4idSIpJiYoWGM9TWwoKSksamE9Zm5bQmNdJiZmbltCY11bWGNdKSx0eXBlb2YgamE+InUifHwhamEubGVuZ3RofHwhamFbMF0pe3ZhciBnYT0iIjtCYT1bXTtmb3IoUG8gaW4gZm5bQmNdKXRoaXMudGVybWluYWxzX1tQb10mJlBvPiRvJiZCYS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bUG9dKyInIik7X3Muc2hvd1Bvc2l0aW9uP2dhPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG9vKzEpK2A6CmArX3Muc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtCYS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1hjXXx8WGMpKyInIjpnYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhvbysxKSsiOiBVbmV4cGVjdGVkICIrKFhjPT1QYT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tYY118fFhjKSsiJyIpLHRoaXMucGFyc2VFcnJvcihnYSx7dGV4dDpfcy5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bWGNdfHxYYyxsaW5lOl9zLnl5bGluZW5vLGxvYzpqMCxleHBlY3RlZDpCYX0pfWlmKGphWzBdaW5zdGFuY2VvZiBBcnJheSYmamEubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitCYysiLCB0b2tlbjogIitYYyk7c3dpdGNoKGphWzBdKXtjYXNlIDE6VW4ucHVzaChYYyksd3QucHVzaChfcy55eXRleHQpLG9uLnB1c2goX3MueXlsbG9jKSxVbi5wdXNoKGphWzFdKSxYYz1udWxsLGpvPV9zLnl5bGVuZyxBbj1fcy55eXRleHQsb289X3MueXlsaW5lbm8sajA9X3MueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihGYz10aGlzLnByb2R1Y3Rpb25zX1tqYVsxXV1bMV0sU2EuJD13dFt3dC5sZW5ndGgtRmNdLFNhLl8kPXtmaXJzdF9saW5lOm9uW29uLmxlbmd0aC0oRmN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpvbltvbi5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpvbltvbi5sZW5ndGgtKEZjfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm9uW29uLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0scG0mJihTYS5fJC5yYW5nZT1bb25bb24ubGVuZ3RoLShGY3x8MSldLnJhbmdlWzBdLG9uW29uLmxlbmd0aC0xXS5yYW5nZVsxXV0pLE91PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShTYSxbQW4sam8sb28sdGwueXksamFbMV0sd3Qsb25dLmNvbmNhdCh3bykpLHR5cGVvZiBPdTwidSIpcmV0dXJuIE91O0ZjJiYoVW49VW4uc2xpY2UoMCwtMSpGYyoyKSx3dD13dC5zbGljZSgwLC0xKkZjKSxvbj1vbi5zbGljZSgwLC0xKkZjKSksVW4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tqYVsxXV1bMF0pLHd0LnB1c2goU2EuJCksb24ucHVzaChTYS5fJCkseGE9Zm5bVW5bVW4ubGVuZ3RoLTJdXVtVbltVbi5sZW5ndGgtMV1dLFVuLnB1c2goeGEpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSx6cz1mdW5jdGlvbigpe3ZhciBUcj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihxbixVbil7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihxbixVbik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IocW4pfSxzZXRJbnB1dDpmdW5jdGlvbihGbixxbil7cmV0dXJuIHRoaXMueXk9cW58fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUZuLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBGbj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Rm4sdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUZuLHRoaXMubWF0Y2hlZCs9Rm47dmFyIHFuPUZuLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gcW4/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEZufSx1bnB1dDpmdW5jdGlvbihGbil7dmFyIHFuPUZuLmxlbmd0aCxVbj1Gbi5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUZuK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1xbiksdGhpcy5vZmZzZXQtPXFuO3ZhciBBdD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxVbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVVuLmxlbmd0aC0xKTt2YXIgd3Q9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlVuPyhVbi5sZW5ndGg9PT1BdC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0F0W0F0Lmxlbmd0aC1Vbi5sZW5ndGhdLmxlbmd0aC1VblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXFufSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3d0WzBdLHd0WzBdK3RoaXMueXlsZW5nLXFuXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oRm4pe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShGbikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRm49dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihGbi5sZW5ndGg+MjA/Ii4uLiI6IiIpK0ZuLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIEZuPXRoaXMubWF0Y2g7cmV0dXJuIEZuLmxlbmd0aDwyMCYmKEZuKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1Gbi5sZW5ndGgpKSwoRm4uc3Vic3RyKDAsMjApKyhGbi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEZuPXRoaXMucGFzdElucHV0KCkscW49bmV3IEFycmF5KEZuLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEZuK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtxbisiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oRm4scW4pe3ZhciBVbixBdCx3dDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYod3Q9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYod3QueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQXQ9Rm5bMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEF0JiYodGhpcy55eWxpbmVubys9QXQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46QXQ/QXRbQXQubGVuZ3RoLTFdLmxlbmd0aC1BdFtBdC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitGblswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1GblswXSx0aGlzLm1hdGNoKz1GblswXSx0aGlzLm1hdGNoZXM9Rm4sdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoRm5bMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUZuWzBdLFVuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHFuLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLFVuKXJldHVybiBVbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgb24gaW4gd3QpdGhpc1tvbl09d3Rbb25dO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEZuLHFuLFVuLEF0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHd0PXRoaXMuX2N1cnJlbnRSdWxlcygpLG9uPTA7b248d3QubGVuZ3RoO29uKyspaWYoVW49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t3dFtvbl1dKSxVbiYmKCFxbnx8VW5bMF0ubGVuZ3RoPnFuWzBdLmxlbmd0aCkpe2lmKHFuPVVuLEF0PW9uLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEZuPXRoaXMudGVzdF9tYXRjaChVbix3dFtvbl0pLEZuIT09ITEpcmV0dXJuIEZuO2lmKHRoaXMuX2JhY2t0cmFjayl7cW49ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gcW4/KEZuPXRoaXMudGVzdF9tYXRjaChxbix3dFtBdF0pLEZuIT09ITE/Rm46ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBxbj10aGlzLm5leHQoKTtyZXR1cm4gcW58fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHFuKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gocW4pfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBxbj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBxbj4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHFuKXtyZXR1cm4gcW49dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhxbnx8MCkscW4+PTA/dGhpcy5jb25kaXRpb25TdGFja1txbl06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24ocW4pe3RoaXMuYmVnaW4ocW4pfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHFuLFVuLEF0LHd0KXtzd2l0Y2goQXQpe2Nhc2UgMDpyZXR1cm4gNjtjYXNlIDE6cmV0dXJuIDc7Y2FzZSAyOnJldHVybiA4O2Nhc2UgMzpyZXR1cm4gOTtjYXNlIDQ6cmV0dXJuIDIyO2Nhc2UgNTpyZXR1cm4gMjM7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyNDtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDI2O2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpjO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIDEyO2Nhc2UgMTY6YnJlYWs7Y2FzZSAxNzpyZXR1cm4gMTE7Y2FzZSAxODpyZXR1cm4gMTU7Y2FzZSAxOTpyZXR1cm4gMTY7Y2FzZSAyMDpyZXR1cm4gMTc7Y2FzZSAyMTpyZXR1cm4gMTg7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigicGVyc29uX2V4dCIpLDQ1O2Nhc2UgMjM6cmV0dXJuIHRoaXMuYmVnaW4oInBlcnNvbiIpLDQ0O2Nhc2UgMjQ6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHRfcXVldWUiKSw1MTtjYXNlIDI1OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0X2RiIiksNTA7Y2FzZSAyNjpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dCIpLDQ5O2Nhc2UgMjc6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9xdWV1ZSIpLDQ4O2Nhc2UgMjg6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9kYiIpLDQ3O2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbSIpLDQ2O2Nhc2UgMzA6cmV0dXJuIHRoaXMuYmVnaW4oImJvdW5kYXJ5IiksMzc7Y2FzZSAzMTpyZXR1cm4gdGhpcy5iZWdpbigiZW50ZXJwcmlzZV9ib3VuZGFyeSIpLDM0O2Nhc2UgMzI6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9ib3VuZGFyeSIpLDM2O2Nhc2UgMzM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHRfcXVldWUiKSw1NztjYXNlIDM0OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0X2RiIiksNTY7Y2FzZSAzNTpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dCIpLDU1O2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9xdWV1ZSIpLDU0O2Nhc2UgMzc6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9kYiIpLDUzO2Nhc2UgMzg6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lciIpLDUyO2Nhc2UgMzk6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9ib3VuZGFyeSIpLDM4O2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHRfcXVldWUiKSw2MztjYXNlIDQxOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0X2RiIiksNjI7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dCIpLDYxO2Nhc2UgNDM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9xdWV1ZSIpLDYwO2Nhc2UgNDQ6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9kYiIpLDU5O2Nhc2UgNDU6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudCIpLDU4O2Nhc2UgNDY6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGUiKSwzOTtjYXNlIDQ3OnJldHVybiB0aGlzLmJlZ2luKCJub2RlIiksMzk7Y2FzZSA0ODpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9sIiksNDA7Y2FzZSA0OTpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9yIiksNDE7Y2FzZSA1MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsIiksNjQ7Y2FzZSA1MTpyZXR1cm4gdGhpcy5iZWdpbigiYmlyZWwiKSw2NTtjYXNlIDUyOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfdSIpLDY2O2Nhc2UgNTM6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF91IiksNjY7Y2FzZSA1NDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2QiKSw2NztjYXNlIDU1OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfZCIpLDY3O2Nhc2UgNTY6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9sIiksNjg7Y2FzZSA1NzpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2wiKSw2ODtjYXNlIDU4OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfciIpLDY5O2Nhc2UgNTk6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9yIiksNjk7Y2FzZSA2MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2IiKSw3MDtjYXNlIDYxOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfaW5kZXgiKSw3MTtjYXNlIDYyOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfZWxfc3R5bGUiKSw3MjtjYXNlIDYzOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfcmVsX3N0eWxlIiksNzM7Y2FzZSA2NDpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX2xheW91dF9jb25maWciKSw3NDtjYXNlIDY1OnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDY2OnJldHVybiB0aGlzLmJlZ2luKCJhdHRyaWJ1dGUiKSwiQVRUUklCVVRFX0VNUFRZIjtjYXNlIDY3OnRoaXMuYmVnaW4oImF0dHJpYnV0ZSIpO2JyZWFrO2Nhc2UgNjg6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY5OnJldHVybiA4MDtjYXNlIDcwOmJyZWFrO2Nhc2UgNzE6cmV0dXJuIDgwO2Nhc2UgNzI6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA3Mzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3NDpyZXR1cm4iU1RSIjtjYXNlIDc1OnRoaXMuYmVnaW4oInN0cmluZ19rdiIpO2JyZWFrO2Nhc2UgNzY6cmV0dXJuIHRoaXMuYmVnaW4oInN0cmluZ19rdl9rZXkiKSwiU1RSX0tFWSI7Y2FzZSA3Nzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigic3RyaW5nX2t2X3ZhbHVlIik7YnJlYWs7Y2FzZSA3ODpyZXR1cm4iU1RSX1ZBTFVFIjtjYXNlIDc5OnRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4MDpyZXR1cm4iU1RSIjtjYXNlIDgxOnJldHVybiJMQlJBQ0UiO2Nhc2UgODI6cmV0dXJuIlJCUkFDRSI7Y2FzZSA4MzpyZXR1cm4iU1BBQ0UiO2Nhc2UgODQ6cmV0dXJuIkVPTCI7Y2FzZSA4NTpyZXR1cm4gMTR9fSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzp0aXRsZVxzW14jXG47XSspLywvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86QzRDb250ZXh0XGIpLywvXig/OkM0Q29udGFpbmVyXGIpLywvXig/OkM0Q29tcG9uZW50XGIpLywvXig/OkM0RHluYW1pY1xiKS8sL14oPzpDNERlcGxveW1lbnRcYikvLC9eKD86UGVyc29uX0V4dFxiKS8sL14oPzpQZXJzb25cYikvLC9eKD86U3lzdGVtUXVldWVfRXh0XGIpLywvXig/OlN5c3RlbURiX0V4dFxiKS8sL14oPzpTeXN0ZW1fRXh0XGIpLywvXig/OlN5c3RlbVF1ZXVlXGIpLywvXig/OlN5c3RlbURiXGIpLywvXig/OlN5c3RlbVxiKS8sL14oPzpCb3VuZGFyeVxiKS8sL14oPzpFbnRlcnByaXNlX0JvdW5kYXJ5XGIpLywvXig/OlN5c3RlbV9Cb3VuZGFyeVxiKS8sL14oPzpDb250YWluZXJRdWV1ZV9FeHRcYikvLC9eKD86Q29udGFpbmVyRGJfRXh0XGIpLywvXig/OkNvbnRhaW5lcl9FeHRcYikvLC9eKD86Q29udGFpbmVyUXVldWVcYikvLC9eKD86Q29udGFpbmVyRGJcYikvLC9eKD86Q29udGFpbmVyXGIpLywvXig/OkNvbnRhaW5lcl9Cb3VuZGFyeVxiKS8sL14oPzpDb21wb25lbnRRdWV1ZV9FeHRcYikvLC9eKD86Q29tcG9uZW50RGJfRXh0XGIpLywvXig/OkNvbXBvbmVudF9FeHRcYikvLC9eKD86Q29tcG9uZW50UXVldWVcYikvLC9eKD86Q29tcG9uZW50RGJcYikvLC9eKD86Q29tcG9uZW50XGIpLywvXig/OkRlcGxveW1lbnRfTm9kZVxiKS8sL14oPzpOb2RlXGIpLywvXig/Ok5vZGVfTFxiKS8sL14oPzpOb2RlX1JcYikvLC9eKD86UmVsXGIpLywvXig/OkJpUmVsXGIpLywvXig/OlJlbF9VcFxiKS8sL14oPzpSZWxfVVxiKS8sL14oPzpSZWxfRG93blxiKS8sL14oPzpSZWxfRFxiKS8sL14oPzpSZWxfTGVmdFxiKS8sL14oPzpSZWxfTFxiKS8sL14oPzpSZWxfUmlnaHRcYikvLC9eKD86UmVsX1JcYikvLC9eKD86UmVsX0JhY2tcYikvLC9eKD86UmVsSW5kZXhcYikvLC9eKD86VXBkYXRlRWxlbWVudFN0eWxlXGIpLywvXig/OlVwZGF0ZVJlbFN0eWxlXGIpLywvXig/OlVwZGF0ZUxheW91dENvbmZpZ1xiKS8sL14oPzokKS8sL14oPzpbKF1bIF0qWyxdKS8sL14oPzpbKF0pLywvXig/OlspXSkvLC9eKD86LCwpLywvXig/OiwpLywvXig/OlsgXSpbIl1bIl0pLywvXig/OlsgXSpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsgXSpbXCRdKS8sL14oPzpbXj1dKikvLC9eKD86Wz1dWyBdKlsiXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86W14sXSspLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86W1xzXSspLywvXig/OltcblxyXSspLywvXig/OiQpL10sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzldLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbN10saW5jbHVzaXZlOiExfSxzdHJpbmdfa3ZfdmFsdWU6e3J1bGVzOls3OCw3OV0saW5jbHVzaXZlOiExfSxzdHJpbmdfa3Zfa2V5OntydWxlczpbNzddLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2OntydWxlczpbNzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNzMsNzRdLGluY2x1c2l2ZTohMX0sYXR0cmlidXRlOntydWxlczpbNjgsNjksNzAsNzEsNzIsNzUsODBdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2xheW91dF9jb25maWc6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSx1cGRhdGVfcmVsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2VsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9sOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2Q6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfdTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9iaTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxyZWw6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX3I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX2w6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0saW5kZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0scmVsX2luZGV4OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dF9xdWV1ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJpcmVsOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2JvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sZW50ZXJwcmlzZV9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX3F1ZXVlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scGVyc29uX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHBlcnNvbjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsODEsODIsODMsODQsODVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gVHJ9KCk7TWEubGV4ZXI9enM7ZnVuY3Rpb24gYW8oKXt0aGlzLnl5PXt9fXJldHVybiBhby5wcm90b3R5cGU9TWEsTWEuUGFyc2VyPWFvLG5ldyBhb30oKTtDUS5wYXJzZXI9Q1E7Y29uc3QgRFZ0PUNRO2xldCBSMz1bXSxNOT1bIiJdLE9wPSJnbG9iYWwiLGozPSIiLFE0PVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSxwUj1bXSxSYmU9IiIsamJlPSExLFNRPTQsX1E9Mjt2YXIgeHFlO2NvbnN0IElWdD1mdW5jdGlvbigpe3JldHVybiB4cWV9LE9WdD1mdW5jdGlvbihpKXt4cWU9WWYoaSxxdCgpKX0sTlZ0PWZ1bmN0aW9uKGkscyx1LGQscCx2LGIseSxUKXtpZihpPT1udWxsfHxzPT09dm9pZCAwfHxzPT09bnVsbHx8dT09PXZvaWQgMHx8dT09PW51bGx8fGQ9PT12b2lkIDB8fGQ9PT1udWxsKXJldHVybjtsZXQgXz17fTtjb25zdCBBPXBSLmZpbmQoUD0+UC5mcm9tPT09cyYmUC50bz09PXUpO2lmKEE/Xz1BOnBSLnB1c2goXyksXy50eXBlPWksXy5mcm9tPXMsXy50bz11LF8ubGFiZWw9e3RleHQ6ZH0scD09bnVsbClfLnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W1AsUl09T2JqZWN0LmVudHJpZXMocClbMF07X1tQXT17dGV4dDpSfX1lbHNlIF8udGVjaG49e3RleHQ6cH07aWYodj09bnVsbClfLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W1AsUl09T2JqZWN0LmVudHJpZXModilbMF07X1tQXT17dGV4dDpSfX1lbHNlIF8uZGVzY3I9e3RleHQ6dn07aWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbUCxSXT1PYmplY3QuZW50cmllcyhiKVswXTtfW1BdPVJ9ZWxzZSBfLnNwcml0ZT1iO2lmKHR5cGVvZiB5PT0ib2JqZWN0Iil7bGV0W1AsUl09T2JqZWN0LmVudHJpZXMoeSlbMF07X1tQXT1SfWVsc2UgXy50YWdzPXk7aWYodHlwZW9mIFQ9PSJvYmplY3QiKXtsZXRbUCxSXT1PYmplY3QuZW50cmllcyhUKVswXTtfW1BdPVJ9ZWxzZSBfLmxpbms9VDtfLndyYXA9RDkoKX0sUFZ0PWZ1bmN0aW9uKGkscyx1LGQscCx2LGIpe2lmKHM9PT1udWxsfHx1PT09bnVsbClyZXR1cm47bGV0IHk9e307Y29uc3QgVD1SMy5maW5kKF89Pl8uYWxpYXM9PT1zKTtpZihUJiZzPT09VC5hbGlhcz95PVQ6KHkuYWxpYXM9cyxSMy5wdXNoKHkpKSx1PT1udWxsP3kubGFiZWw9e3RleHQ6IiJ9OnkubGFiZWw9e3RleHQ6dX0sZD09bnVsbCl5LmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W18sQV09T2JqZWN0LmVudHJpZXMoZClbMF07eVtfXT17dGV4dDpBfX1lbHNlIHkuZGVzY3I9e3RleHQ6ZH07aWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbXyxBXT1PYmplY3QuZW50cmllcyhwKVswXTt5W19dPUF9ZWxzZSB5LnNwcml0ZT1wO2lmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W18sQV09T2JqZWN0LmVudHJpZXModilbMF07eVtfXT1BfWVsc2UgeS50YWdzPXY7aWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbXyxBXT1PYmplY3QuZW50cmllcyhiKVswXTt5W19dPUF9ZWxzZSB5Lmxpbms9Yjt5LnR5cGVDNFNoYXBlPXt0ZXh0Oml9LHkucGFyZW50Qm91bmRhcnk9T3AseS53cmFwPUQ5KCl9LEJWdD1mdW5jdGlvbihpLHMsdSxkLHAsdixiLHkpe2lmKHM9PT1udWxsfHx1PT09bnVsbClyZXR1cm47bGV0IFQ9e307Y29uc3QgXz1SMy5maW5kKEE9PkEuYWxpYXM9PT1zKTtpZihfJiZzPT09Xy5hbGlhcz9UPV86KFQuYWxpYXM9cyxSMy5wdXNoKFQpKSx1PT1udWxsP1QubGFiZWw9e3RleHQ6IiJ9OlQubGFiZWw9e3RleHQ6dX0sZD09bnVsbClULnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoZClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQudGVjaG49e3RleHQ6ZH07aWYocD09bnVsbClULmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMocClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQuZGVzY3I9e3RleHQ6cH07aWYodHlwZW9mIHY9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyh2KVswXTtUW0FdPVB9ZWxzZSBULnNwcml0ZT12O2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoYilbMF07VFtBXT1QfWVsc2UgVC50YWdzPWI7aWYodHlwZW9mIHk9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyh5KVswXTtUW0FdPVB9ZWxzZSBULmxpbms9eTtULndyYXA9RDkoKSxULnR5cGVDNFNoYXBlPXt0ZXh0Oml9LFQucGFyZW50Qm91bmRhcnk9T3B9LEZWdD1mdW5jdGlvbihpLHMsdSxkLHAsdixiLHkpe2lmKHM9PT1udWxsfHx1PT09bnVsbClyZXR1cm47bGV0IFQ9e307Y29uc3QgXz1SMy5maW5kKEE9PkEuYWxpYXM9PT1zKTtpZihfJiZzPT09Xy5hbGlhcz9UPV86KFQuYWxpYXM9cyxSMy5wdXNoKFQpKSx1PT1udWxsP1QubGFiZWw9e3RleHQ6IiJ9OlQubGFiZWw9e3RleHQ6dX0sZD09bnVsbClULnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoZClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQudGVjaG49e3RleHQ6ZH07aWYocD09bnVsbClULmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMocClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQuZGVzY3I9e3RleHQ6cH07aWYodHlwZW9mIHY9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyh2KVswXTtUW0FdPVB9ZWxzZSBULnNwcml0ZT12O2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoYilbMF07VFtBXT1QfWVsc2UgVC50YWdzPWI7aWYodHlwZW9mIHk9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyh5KVswXTtUW0FdPVB9ZWxzZSBULmxpbms9eTtULndyYXA9RDkoKSxULnR5cGVDNFNoYXBlPXt0ZXh0Oml9LFQucGFyZW50Qm91bmRhcnk9T3B9LFJWdD1mdW5jdGlvbihpLHMsdSxkLHApe2lmKGk9PT1udWxsfHxzPT09bnVsbClyZXR1cm47bGV0IHY9e307Y29uc3QgYj1RNC5maW5kKHk9PnkuYWxpYXM9PT1pKTtpZihiJiZpPT09Yi5hbGlhcz92PWI6KHYuYWxpYXM9aSxRNC5wdXNoKHYpKSxzPT1udWxsP3YubGFiZWw9e3RleHQ6IiJ9OnYubGFiZWw9e3RleHQ6c30sdT09bnVsbCl2LnR5cGU9e3RleHQ6InN5c3RlbSJ9O2Vsc2UgaWYodHlwZW9mIHU9PSJvYmplY3QiKXtsZXRbeSxUXT1PYmplY3QuZW50cmllcyh1KVswXTt2W3ldPXt0ZXh0OlR9fWVsc2Ugdi50eXBlPXt0ZXh0OnV9O2lmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W3ksVF09T2JqZWN0LmVudHJpZXMoZClbMF07dlt5XT1UfWVsc2Ugdi50YWdzPWQ7aWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbeSxUXT1PYmplY3QuZW50cmllcyhwKVswXTt2W3ldPVR9ZWxzZSB2Lmxpbms9cDt2LnBhcmVudEJvdW5kYXJ5PU9wLHYud3JhcD1EOSgpLGozPU9wLE9wPWksTTkucHVzaChqMyl9LGpWdD1mdW5jdGlvbihpLHMsdSxkLHApe2lmKGk9PT1udWxsfHxzPT09bnVsbClyZXR1cm47bGV0IHY9e307Y29uc3QgYj1RNC5maW5kKHk9PnkuYWxpYXM9PT1pKTtpZihiJiZpPT09Yi5hbGlhcz92PWI6KHYuYWxpYXM9aSxRNC5wdXNoKHYpKSxzPT1udWxsP3YubGFiZWw9e3RleHQ6IiJ9OnYubGFiZWw9e3RleHQ6c30sdT09bnVsbCl2LnR5cGU9e3RleHQ6ImNvbnRhaW5lciJ9O2Vsc2UgaWYodHlwZW9mIHU9PSJvYmplY3QiKXtsZXRbeSxUXT1PYmplY3QuZW50cmllcyh1KVswXTt2W3ldPXt0ZXh0OlR9fWVsc2Ugdi50eXBlPXt0ZXh0OnV9O2lmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W3ksVF09T2JqZWN0LmVudHJpZXMoZClbMF07dlt5XT1UfWVsc2Ugdi50YWdzPWQ7aWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbeSxUXT1PYmplY3QuZW50cmllcyhwKVswXTt2W3ldPVR9ZWxzZSB2Lmxpbms9cDt2LnBhcmVudEJvdW5kYXJ5PU9wLHYud3JhcD1EOSgpLGozPU9wLE9wPWksTTkucHVzaChqMyl9LCRWdD1mdW5jdGlvbihpLHMsdSxkLHAsdixiLHkpe2lmKHM9PT1udWxsfHx1PT09bnVsbClyZXR1cm47bGV0IFQ9e307Y29uc3QgXz1RNC5maW5kKEE9PkEuYWxpYXM9PT1zKTtpZihfJiZzPT09Xy5hbGlhcz9UPV86KFQuYWxpYXM9cyxRNC5wdXNoKFQpKSx1PT1udWxsP1QubGFiZWw9e3RleHQ6IiJ9OlQubGFiZWw9e3RleHQ6dX0sZD09bnVsbClULnR5cGU9e3RleHQ6Im5vZGUifTtlbHNlIGlmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoZClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQudHlwZT17dGV4dDpkfTtpZihwPT1udWxsKVQuZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyhwKVswXTtUW0FdPXt0ZXh0OlB9fWVsc2UgVC5kZXNjcj17dGV4dDpwfTtpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtBLFBdPU9iamVjdC5lbnRyaWVzKGIpWzBdO1RbQV09UH1lbHNlIFQudGFncz1iO2lmKHR5cGVvZiB5PT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoeSlbMF07VFtBXT1QfWVsc2UgVC5saW5rPXk7VC5ub2RlVHlwZT1pLFQucGFyZW50Qm91bmRhcnk9T3AsVC53cmFwPUQ5KCksajM9T3AsT3A9cyxNOS5wdXNoKGozKX0selZ0PWZ1bmN0aW9uKCl7T3A9ajMsTTkucG9wKCksajM9TTkucG9wKCksTTkucHVzaChqMyl9LHFWdD1mdW5jdGlvbihpLHMsdSxkLHAsdixiLHksVCxfLEEpe2xldCBQPVIzLmZpbmQoUj0+Ui5hbGlhcz09PXMpO2lmKCEoUD09PXZvaWQgMCYmKFA9UTQuZmluZChSPT5SLmFsaWFzPT09cyksUD09PXZvaWQgMCkpKXtpZih1IT1udWxsKWlmKHR5cGVvZiB1PT0ib2JqZWN0Iil7bGV0W1IsRl09T2JqZWN0LmVudHJpZXModSlbMF07UFtSXT1GfWVsc2UgUC5iZ0NvbG9yPXU7aWYoZCE9bnVsbClpZih0eXBlb2YgZD09Im9iamVjdCIpe2xldFtSLEZdPU9iamVjdC5lbnRyaWVzKGQpWzBdO1BbUl09Rn1lbHNlIFAuZm9udENvbG9yPWQ7aWYocCE9bnVsbClpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtSLEZdPU9iamVjdC5lbnRyaWVzKHApWzBdO1BbUl09Rn1lbHNlIFAuYm9yZGVyQ29sb3I9cDtpZih2IT1udWxsKWlmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W1IsRl09T2JqZWN0LmVudHJpZXModilbMF07UFtSXT1GfWVsc2UgUC5zaGFkb3dpbmc9djtpZihiIT1udWxsKWlmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W1IsRl09T2JqZWN0LmVudHJpZXMoYilbMF07UFtSXT1GfWVsc2UgUC5zaGFwZT1iO2lmKHkhPW51bGwpaWYodHlwZW9mIHk9PSJvYmplY3QiKXtsZXRbUixGXT1PYmplY3QuZW50cmllcyh5KVswXTtQW1JdPUZ9ZWxzZSBQLnNwcml0ZT15O2lmKFQhPW51bGwpaWYodHlwZW9mIFQ9PSJvYmplY3QiKXtsZXRbUixGXT1PYmplY3QuZW50cmllcyhUKVswXTtQW1JdPUZ9ZWxzZSBQLnRlY2huPVQ7aWYoXyE9bnVsbClpZih0eXBlb2YgXz09Im9iamVjdCIpe2xldFtSLEZdPU9iamVjdC5lbnRyaWVzKF8pWzBdO1BbUl09Rn1lbHNlIFAubGVnZW5kVGV4dD1fO2lmKEEhPW51bGwpaWYodHlwZW9mIEE9PSJvYmplY3QiKXtsZXRbUixGXT1PYmplY3QuZW50cmllcyhBKVswXTtQW1JdPUZ9ZWxzZSBQLmxlZ2VuZFNwcml0ZT1BfX0sSFZ0PWZ1bmN0aW9uKGkscyx1LGQscCx2LGIpe2NvbnN0IHk9cFIuZmluZChUPT5ULmZyb209PT1zJiZULnRvPT09dSk7aWYoeSE9PXZvaWQgMCl7aWYoZCE9bnVsbClpZih0eXBlb2YgZD09Im9iamVjdCIpe2xldFtULF9dPU9iamVjdC5lbnRyaWVzKGQpWzBdO3lbVF09X31lbHNlIHkudGV4dENvbG9yPWQ7aWYocCE9bnVsbClpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtULF9dPU9iamVjdC5lbnRyaWVzKHApWzBdO3lbVF09X31lbHNlIHkubGluZUNvbG9yPXA7aWYodiE9bnVsbClpZih0eXBlb2Ygdj09Im9iamVjdCIpe2xldFtULF9dPU9iamVjdC5lbnRyaWVzKHYpWzBdO3lbVF09cGFyc2VJbnQoXyl9ZWxzZSB5Lm9mZnNldFg9cGFyc2VJbnQodik7aWYoYiE9bnVsbClpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtULF9dPU9iamVjdC5lbnRyaWVzKGIpWzBdO3lbVF09cGFyc2VJbnQoXyl9ZWxzZSB5Lm9mZnNldFk9cGFyc2VJbnQoYil9fSxWVnQ9ZnVuY3Rpb24oaSxzLHUpe2xldCBkPVNRLHA9X1E7aWYodHlwZW9mIHM9PSJvYmplY3QiKXtjb25zdCB2PU9iamVjdC52YWx1ZXMocylbMF07ZD1wYXJzZUludCh2KX1lbHNlIGQ9cGFyc2VJbnQocyk7aWYodHlwZW9mIHU9PSJvYmplY3QiKXtjb25zdCB2PU9iamVjdC52YWx1ZXModSlbMF07cD1wYXJzZUludCh2KX1lbHNlIHA9cGFyc2VJbnQodSk7ZD49MSYmKFNRPWQpLHA+PTEmJihfUT1wKX0sVVZ0PWZ1bmN0aW9uKCl7cmV0dXJuIFNRfSxHVnQ9ZnVuY3Rpb24oKXtyZXR1cm4gX1F9LEtWdD1mdW5jdGlvbigpe3JldHVybiBPcH0sV1Z0PWZ1bmN0aW9uKCl7cmV0dXJuIGozfSxrcWU9ZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/UjM6UjMuZmlsdGVyKHM9PnMucGFyZW50Qm91bmRhcnk9PT1pKX0sWVZ0PWZ1bmN0aW9uKGkpe3JldHVybiBSMy5maW5kKHM9PnMuYWxpYXM9PT1pKX0sWFZ0PWZ1bmN0aW9uKGkpe3JldHVybiBPYmplY3Qua2V5cyhrcWUoaSkpfSxFcWU9ZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/UTQ6UTQuZmlsdGVyKHM9PnMucGFyZW50Qm91bmRhcnk9PT1pKX0sUVZ0PUVxZSxKVnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcFJ9LFpWdD1mdW5jdGlvbigpe3JldHVybiBSYmV9LGVVdD1mdW5jdGlvbihpKXtqYmU9aX0sRDk9ZnVuY3Rpb24oKXtyZXR1cm4gamJlfSwkYmU9e2FkZFBlcnNvbk9yU3lzdGVtOlBWdCxhZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5OlJWdCxhZGRDb250YWluZXI6QlZ0LGFkZENvbnRhaW5lckJvdW5kYXJ5OmpWdCxhZGRDb21wb25lbnQ6RlZ0LGFkZERlcGxveW1lbnROb2RlOiRWdCxwb3BCb3VuZGFyeVBhcnNlU3RhY2s6elZ0LGFkZFJlbDpOVnQsdXBkYXRlRWxTdHlsZTpxVnQsdXBkYXRlUmVsU3R5bGU6SFZ0LHVwZGF0ZUxheW91dENvbmZpZzpWVnQsYXV0b1dyYXA6RDksc2V0V3JhcDplVXQsZ2V0QzRTaGFwZUFycmF5OmtxZSxnZXRDNFNoYXBlOllWdCxnZXRDNFNoYXBlS2V5czpYVnQsZ2V0Qm91bmRhcmllczpFcWUsZ2V0Qm91bmRhcnlzOlFWdCxnZXRDdXJyZW50Qm91bmRhcnlQYXJzZTpLVnQsZ2V0UGFyZW50Qm91bmRhcnlQYXJzZTpXVnQsZ2V0UmVsczpKVnQsZ2V0VGl0bGU6WlZ0LGdldEM0VHlwZTpJVnQsZ2V0QzRTaGFwZUluUm93OlVWdCxnZXRDNEJvdW5kYXJ5SW5Sb3c6R1Z0LHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldENvbmZpZzooKT0+cXQoKS5jNCxjbGVhcjpmdW5jdGlvbigpe1IzPVtdLFE0PVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSxqMz0iIixPcD0iZ2xvYmFsIixNOT1bIiJdLHBSPVtdLE05PVsiIl0sUmJlPSIiLGpiZT0hMSxTUT00LF9RPTJ9LExJTkVUWVBFOntTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNX0sQVJST1dUWVBFOntGSUxMRUQ6MCxPUEVOOjF9LFBMQUNFTUVOVDp7TEVGVE9GOjAsUklHSFRPRjoxLE9WRVI6Mn0sc2V0VGl0bGU6ZnVuY3Rpb24oaSl7UmJlPVlmKGkscXQoKSl9LHNldEM0VHlwZTpPVnR9LEFRPShpLHMpPT57Y29uc3QgdT1pLmFwcGVuZCgicmVjdCIpO2lmKHUuYXR0cigieCIscy54KSx1LmF0dHIoInkiLHMueSksdS5hdHRyKCJmaWxsIixzLmZpbGwpLHUuYXR0cigic3Ryb2tlIixzLnN0cm9rZSksdS5hdHRyKCJ3aWR0aCIscy53aWR0aCksdS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KSxzLm5hbWUmJnUuYXR0cigibmFtZSIscy5uYW1lKSxzLnJ4IT09dm9pZCAwJiZ1LmF0dHIoInJ4IixzLnJ4KSxzLnJ5IT09dm9pZCAwJiZ1LmF0dHIoInJ5IixzLnJ5KSxzLmF0dHJzIT09dm9pZCAwKWZvcihjb25zdCBkIGluIHMuYXR0cnMpdS5hdHRyKGQscy5hdHRyc1tkXSk7cmV0dXJuIHMuY2xhc3MhPT12b2lkIDAmJnUuYXR0cigiY2xhc3MiLHMuY2xhc3MpLHV9LFRxZT0oaSxzKT0+e2NvbnN0IHU9e3g6cy5zdGFydHgseTpzLnN0YXJ0eSx3aWR0aDpzLnN0b3B4LXMuc3RhcnR4LGhlaWdodDpzLnN0b3B5LXMuc3RhcnR5LGZpbGw6cy5maWxsLHN0cm9rZTpzLnN0cm9rZSxjbGFzczoicmVjdCJ9O0FRKGksdSkubG93ZXIoKX0sdFV0PShpLHMpPT57Y29uc3QgdT1zLnRleHQucmVwbGFjZShmRCwiICIpLGQ9aS5hcHBlbmQoInRleHQiKTtkLmF0dHIoIngiLHMueCksZC5hdHRyKCJ5IixzLnkpLGQuYXR0cigiY2xhc3MiLCJsZWdlbmQiKSxkLnN0eWxlKCJ0ZXh0LWFuY2hvciIscy5hbmNob3IpLHMuY2xhc3MhPT12b2lkIDAmJmQuYXR0cigiY2xhc3MiLHMuY2xhc3MpO2NvbnN0IHA9ZC5hcHBlbmQoInRzcGFuIik7cmV0dXJuIHAuYXR0cigieCIscy54K3MudGV4dE1hcmdpbioyKSxwLnRleHQodSksZH0sblV0PShpLHMsdSxkKT0+e2NvbnN0IHA9aS5hcHBlbmQoImltYWdlIik7cC5hdHRyKCJ4IixzKSxwLmF0dHIoInkiLHUpO2NvbnN0IHY9cDkuc2FuaXRpemVVcmwoZCk7cC5hdHRyKCJ4bGluazpocmVmIix2KX0sclV0PShpLHMsdSxkKT0+e2NvbnN0IHA9aS5hcHBlbmQoInVzZSIpO3AuYXR0cigieCIscykscC5hdHRyKCJ5Iix1KTtjb25zdCB2PXA5LnNhbml0aXplVXJsKGQpO3AuYXR0cigieGxpbms6aHJlZiIsYCMke3Z9YCl9LHFDPSgpPT4oe3g6MCx5OjAsd2lkdGg6MTAwLGhlaWdodDoxMDAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2IixhbmNob3I6InN0YXJ0IixyeDowLHJ5OjB9KSx6YmU9KCk9Pih7eDowLHk6MCx3aWR0aDoxMDAsaGVpZ2h0OjEwMCwidGV4dC1hbmNob3IiOiJzdGFydCIsc3R5bGU6IiM2NjYiLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITB9KSxxYmU9ZnVuY3Rpb24oaSxzKXtyZXR1cm4gQVEoaSxzKX0sQ3FlPWZ1bmN0aW9uKGkscyx1LGQscCx2KXtjb25zdCBiPWkuYXBwZW5kKCJpbWFnZSIpO2IuYXR0cigid2lkdGgiLHMpLGIuYXR0cigiaGVpZ2h0Iix1KSxiLmF0dHIoIngiLGQpLGIuYXR0cigieSIscCk7bGV0IHk9di5zdGFydHNXaXRoKCJkYXRhOmltYWdlL3BuZztiYXNlNjQiKT92OnA5LnNhbml0aXplVXJsKHYpO2IuYXR0cigieGxpbms6aHJlZiIseSl9LGlVdD0oaSxzLHUpPT57Y29uc3QgZD1pLmFwcGVuZCgiZyIpO2xldCBwPTA7Zm9yKGxldCB2IG9mIHMpe2xldCBiPXYudGV4dENvbG9yP3YudGV4dENvbG9yOiIjNDQ0NDQ0Iix5PXYubGluZUNvbG9yP3YubGluZUNvbG9yOiIjNDQ0NDQ0IixUPXYub2Zmc2V0WD9wYXJzZUludCh2Lm9mZnNldFgpOjAsXz12Lm9mZnNldFk/cGFyc2VJbnQodi5vZmZzZXRZKTowLEE9IiI7aWYocD09PTApe2xldCBSPWQuYXBwZW5kKCJsaW5lIik7Ui5hdHRyKCJ4MSIsdi5zdGFydFBvaW50LngpLFIuYXR0cigieTEiLHYuc3RhcnRQb2ludC55KSxSLmF0dHIoIngyIix2LmVuZFBvaW50LngpLFIuYXR0cigieTIiLHYuZW5kUG9pbnQueSksUi5hdHRyKCJzdHJva2Utd2lkdGgiLCIxIiksUi5hdHRyKCJzdHJva2UiLHkpLFIuc3R5bGUoImZpbGwiLCJub25lIiksdi50eXBlIT09InJlbF9iIiYmUi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrQSsiI2Fycm93aGVhZCkiKSwodi50eXBlPT09ImJpcmVsInx8di50eXBlPT09InJlbF9iIikmJlIuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrQSsiI2Fycm93ZW5kKSIpLHA9LTF9ZWxzZXtsZXQgUj1kLmFwcGVuZCgicGF0aCIpO1IuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxIikuYXR0cigic3Ryb2tlIix5KS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHkgUWNvbnRyb2x4LGNvbnRyb2x5IHN0b3B4LHN0b3B5ICIucmVwbGFjZUFsbCgic3RhcnR4Iix2LnN0YXJ0UG9pbnQueCkucmVwbGFjZUFsbCgic3RhcnR5Iix2LnN0YXJ0UG9pbnQueSkucmVwbGFjZUFsbCgiY29udHJvbHgiLHYuc3RhcnRQb2ludC54Kyh2LmVuZFBvaW50Lngtdi5zdGFydFBvaW50LngpLzItKHYuZW5kUG9pbnQueC12LnN0YXJ0UG9pbnQueCkvNCkucmVwbGFjZUFsbCgiY29udHJvbHkiLHYuc3RhcnRQb2ludC55Kyh2LmVuZFBvaW50Lnktdi5zdGFydFBvaW50LnkpLzIpLnJlcGxhY2VBbGwoInN0b3B4Iix2LmVuZFBvaW50LngpLnJlcGxhY2VBbGwoInN0b3B5Iix2LmVuZFBvaW50LnkpKSx2LnR5cGUhPT0icmVsX2IiJiZSLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitBKyIjYXJyb3doZWFkKSIpLCh2LnR5cGU9PT0iYmlyZWwifHx2LnR5cGU9PT0icmVsX2IiKSYmUi5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitBKyIjYXJyb3dlbmQpIil9bGV0IFA9dS5tZXNzYWdlRm9udCgpO0Y3KHUpKHYubGFiZWwudGV4dCxkLE1hdGgubWluKHYuc3RhcnRQb2ludC54LHYuZW5kUG9pbnQueCkrTWF0aC5hYnModi5lbmRQb2ludC54LXYuc3RhcnRQb2ludC54KS8yK1QsTWF0aC5taW4odi5zdGFydFBvaW50Lnksdi5lbmRQb2ludC55KStNYXRoLmFicyh2LmVuZFBvaW50Lnktdi5zdGFydFBvaW50LnkpLzIrXyx2LmxhYmVsLndpZHRoLHYubGFiZWwuaGVpZ2h0LHtmaWxsOmJ9LFApLHYudGVjaG4mJnYudGVjaG4udGV4dCE9PSIiJiYoUD11Lm1lc3NhZ2VGb250KCksRjcodSkoIlsiK3YudGVjaG4udGV4dCsiXSIsZCxNYXRoLm1pbih2LnN0YXJ0UG9pbnQueCx2LmVuZFBvaW50LngpK01hdGguYWJzKHYuZW5kUG9pbnQueC12LnN0YXJ0UG9pbnQueCkvMitULE1hdGgubWluKHYuc3RhcnRQb2ludC55LHYuZW5kUG9pbnQueSkrTWF0aC5hYnModi5lbmRQb2ludC55LXYuc3RhcnRQb2ludC55KS8yK3UubWVzc2FnZUZvbnRTaXplKzUrXyxNYXRoLm1heCh2LmxhYmVsLndpZHRoLHYudGVjaG4ud2lkdGgpLHYudGVjaG4uaGVpZ2h0LHtmaWxsOmIsImZvbnQtc3R5bGUiOiJpdGFsaWMifSxQKSl9fSxzVXQ9ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9aS5hcHBlbmQoImciKTtsZXQgcD1zLmJnQ29sb3I/cy5iZ0NvbG9yOiJub25lIix2PXMuYm9yZGVyQ29sb3I/cy5ib3JkZXJDb2xvcjoiIzQ0NDQ0NCIsYj1zLmZvbnRDb2xvcj9zLmZvbnRDb2xvcjoiYmxhY2siLHk9eyJzdHJva2Utd2lkdGgiOjEsInN0cm9rZS1kYXNoYXJyYXkiOiI3LjAsNy4wIn07cy5ub2RlVHlwZSYmKHk9eyJzdHJva2Utd2lkdGgiOjF9KTtsZXQgVD17eDpzLngseTpzLnksZmlsbDpwLHN0cm9rZTp2LHdpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0LHJ4OjIuNSxyeToyLjUsYXR0cnM6eX07cWJlKGQsVCk7bGV0IF89dS5ib3VuZGFyeUZvbnQoKTtfLmZvbnRXZWlnaHQ9ImJvbGQiLF8uZm9udFNpemU9Xy5mb250U2l6ZSsyLF8uZm9udENvbG9yPWIsRjcodSkocy5sYWJlbC50ZXh0LGQscy54LHMueStzLmxhYmVsLlkscy53aWR0aCxzLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LF8pLHMudHlwZSYmcy50eXBlLnRleHQhPT0iIiYmKF89dS5ib3VuZGFyeUZvbnQoKSxfLmZvbnRDb2xvcj1iLEY3KHUpKHMudHlwZS50ZXh0LGQscy54LHMueStzLnR5cGUuWSxzLndpZHRoLHMuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0sXykpLHMuZGVzY3ImJnMuZGVzY3IudGV4dCE9PSIiJiYoXz11LmJvdW5kYXJ5Rm9udCgpLF8uZm9udFNpemU9Xy5mb250U2l6ZS0yLF8uZm9udENvbG9yPWIsRjcodSkocy5kZXNjci50ZXh0LGQscy54LHMueStzLmRlc2NyLlkscy53aWR0aCxzLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LF8pKX0sYVV0PWZ1bmN0aW9uKGkscyx1KXt2YXIgUDtsZXQgZD1zLmJnQ29sb3I/cy5iZ0NvbG9yOnVbcy50eXBlQzRTaGFwZS50ZXh0KyJfYmdfY29sb3IiXSxwPXMuYm9yZGVyQ29sb3I/cy5ib3JkZXJDb2xvcjp1W3MudHlwZUM0U2hhcGUudGV4dCsiX2JvcmRlcl9jb2xvciJdLHY9cy5mb250Q29sb3I/cy5mb250Q29sb3I6IiNGRkZGRkYiLGI9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUNEMGxFUVZSNFh1MllvVTRFTVJDR1QrNGo4QWk4QWhhSDRRSGdBVWpRdUZNRUNVZ01JVWd3SkFnTWhnUXNBWVVpSkNpUUlCQlkrRUlUc2pmVGRtZTZWMjR2NGM4dnlHYmIrWmpPdE4wYk5jdmpRWG1rSDgzV3ZZQld0bzZQTG02djdwN3VIMS93MmZYRCtQQnljWDFQdjJsM0lkRG0vdm43eCtkWFFpQXViUnpvVVJhN2dSWldkMGlHUklpSmJPbmhuZllCUVpOSmpOYnV5WTJlSkc4ZmtERTNiYkc0ZXA2TUhVQXNnWXhtRTNuVnM2VnNCV0pTR2Njc09sRlBtTElWaU16TE9CN3BDVk8yQXRISk1vaEg3Rmg2enFpdFFLN20wckp2QVZZZ0djRXBlLy9QTGREejY1c000cEY5TjdJQ2NYREtJQjVOdjZqN3REME5vU2RNMlFyVTlHZzBld0UxTHFCaEhSM0JCZHZqMnZhcG5pZGpIeEQvcTZ2ZDdQdmhyMzFBd2NZOGVYTVRYQUtFQ1paSkZYdUVxMjdhTGdRSzV1TE1vaENlbkdHdUdld094U2pCdllCcWVHNkIrTnFpYmxnZ2RqbmMrWlhEeStGTkZwRnp3NzZPM1VCQVJPdVhoNkZvaUFjZjVnOWVUdlVnenkwbldnNkk4Y1hIUlVwZzViT1ZCQ28rS0RwRmFqT2YyM0dnUG1lN1JTUStsYWNJRU5VZ0o2Z2cxazZIamdPbHFuTHFpcDR0RXVodjBoTkVNWFVEMGNseVhFM3A2cFpBMFMybm52VGxYd0xKRVpXbGI3Y1RRSDErVVNnVE40VmhBZW5tL3dlYTFPQ0FPbXFvNmZFMVdDYjlXU0tCYWgrcmJVV1BXQW1FMlJ2azBBcGlCNDVlT3lOQXpVOHhjVHZqOEt2a0tFb09hSVllSE5BM1p1eWdBdkZNVU8wQUFBQUFTVVZPUks1Q1lJST0iO3N3aXRjaChzLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpiPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9IjticmVhaztjYXNlImV4dGVybmFsX3BlcnNvbiI6Yj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQjZFbEVRVlI0WHUyWUxZK0VNQkNHOStkV3IwYWowV2cwR28xR28wK2o4WGR2MnVUQ3Z2MWdwdDBlYkhLUHVoRGFlVzQ2MDVaOW1Kdng0QWRYVXlUVWRkMDh6K3U2ZmxtV1pSbkhzV2thZms5RHB0QXdEUHUrZjBlQVl0dTJQRWFHV3VqNWZDSVpyQkFDMmVMQkFuUkNzRWtreG1lYUpwN2lESjJRTURkSHNMZzhTeEtGRUphQW84bEFYbm11T0ZJaFRNcHh4S0FUZWJvNFVpRmtudU5vNE9uaVNJWFF5UnhFQTNZc25qR0NWRWpWWEQ3eUxVQXF4QkdVeVB2L1k0VzJiZU1nR3VTN2tWUUlCeWNIMGZEK29pNXBlelFFVHhkSEttUUtHazFlUUVZbGRLK2p3NUd4UGZaOXo3TWswUW5oZjFXMW0zdy8vRVVuNUJEbVNac2JSNDRRUUxCRXFyQkhxT3JtU0thUUF4ZG5MQXJDcnhaY003QTdaS3M0aW9ScThMRkMrTnBDM1dDQkpzdnBWdzVlZG05aUVYRnV5TmZ4WEFnU3dmckZRMWMwaU5kYThBZGVqdlVnbmt0T3RKUVF4bWNmRnpHZ2xjNVdWQ2o3b0RnRnFVMThib2VGU3M1MkNVaDhMRThCSVZRRFQxQUJyQjBIdGdTRVlsWDVkb0puQ3d2OVRYb2NLQ2FLYm53aGRES1BxNGxmM1N3VTNITHE0Vi8rV1loSFZNYS8zYjRJbGZ5aWtBZHVDa2NCYzdtUTMvei9RcS9jVHVpa2hrekIxMkFlL21jSkM5VStWbzhFajFnV0F0Z2JlR2dGc0FNSHI1MEJJV09MQ2JlenZocEJGVWRZNkVKdUovUURXMFhvTVg2MHpaMEFBQUFBU1VWT1JLNUNZSUk9IjticmVha31jb25zdCB5PWkuYXBwZW5kKCJnIik7eS5hdHRyKCJjbGFzcyIsInBlcnNvbi1tYW4iKTtjb25zdCBUPXFDKCk7c3dpdGNoKHMudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpjYXNlInN5c3RlbSI6Y2FzZSJleHRlcm5hbF9zeXN0ZW0iOmNhc2UiY29udGFpbmVyIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lciI6Y2FzZSJjb21wb25lbnQiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50IjpULng9cy54LFQueT1zLnksVC5maWxsPWQsVC53aWR0aD1zLndpZHRoLFQuaGVpZ2h0PXMuaGVpZ2h0LFQuc3Ryb2tlPXAsVC5yeD0yLjUsVC5yeT0yLjUsVC5hdHRycz17InN0cm9rZS13aWR0aCI6LjV9LHFiZSh5LFQpO2JyZWFrO2Nhc2Uic3lzdGVtX2RiIjpjYXNlImV4dGVybmFsX3N5c3RlbV9kYiI6Y2FzZSJjb250YWluZXJfZGIiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyX2RiIjpjYXNlImNvbXBvbmVudF9kYiI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnRfZGIiOnkuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsZCkuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixwKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwtMTAgaGFsZiwtMTAgaGFsZiwtMTBjMCwwIGhhbGYsMCBoYWxmLDEwbDAsaGVpZ2h0YzAsMTAgLWhhbGYsMTAgLWhhbGYsMTBjMCwwIC1oYWxmLDAgLWhhbGYsLTEwbDAsLWhlaWdodCIucmVwbGFjZUFsbCgic3RhcnR4IixzLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIscy55KS5yZXBsYWNlQWxsKCJoYWxmIixzLndpZHRoLzIpLnJlcGxhY2VBbGwoImhlaWdodCIscy5oZWlnaHQpKSx5LmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixwKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwxMCBoYWxmLDEwIGhhbGYsMTBjMCwwIGhhbGYsMCBoYWxmLC0xMCIucmVwbGFjZUFsbCgic3RhcnR4IixzLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIscy55KS5yZXBsYWNlQWxsKCJoYWxmIixzLndpZHRoLzIpKTticmVhaztjYXNlInN5c3RlbV9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9zeXN0ZW1fcXVldWUiOmNhc2UiY29udGFpbmVyX3F1ZXVlIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSI6Y2FzZSJjb21wb25lbnRfcXVldWUiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlIjp5LmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLGQpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIscCkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5bHdpZHRoLDBjNSwwIDUsaGFsZiA1LGhhbGZjMCwwIDAsaGFsZiAtNSxoYWxmbC13aWR0aCwwYy01LDAgLTUsLWhhbGYgLTUsLWhhbGZjMCwwIDAsLWhhbGYgNSwtaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixzLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIscy55KS5yZXBsYWNlQWxsKCJ3aWR0aCIscy53aWR0aCkucmVwbGFjZUFsbCgiaGFsZiIscy5oZWlnaHQvMikpLHkuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLHApLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMtNSwwIC01LGhhbGYgLTUsaGFsZmMwLGhhbGYgNSxoYWxmIDUsaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixzLngrcy53aWR0aCkucmVwbGFjZUFsbCgic3RhcnR5IixzLnkpLnJlcGxhY2VBbGwoImhhbGYiLHMuaGVpZ2h0LzIpKTticmVha31sZXQgXz1wVXQodSxzLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaCh5LmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLHYpLmF0dHIoImZvbnQtZmFtaWx5IixfLmZvbnRGYW1pbHkpLmF0dHIoImZvbnQtc2l6ZSIsXy5mb250U2l6ZS0yKS5hdHRyKCJmb250LXN0eWxlIiwiaXRhbGljIikuYXR0cigibGVuZ3RoQWRqdXN0Iiwic3BhY2luZyIpLmF0dHIoInRleHRMZW5ndGgiLHMudHlwZUM0U2hhcGUud2lkdGgpLmF0dHIoIngiLHMueCtzLndpZHRoLzItcy50eXBlQzRTaGFwZS53aWR0aC8yKS5hdHRyKCJ5IixzLnkrcy50eXBlQzRTaGFwZS5ZKS50ZXh0KCI8PCIrcy50eXBlQzRTaGFwZS50ZXh0KyI+PiIpLHMudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpDcWUoeSw0OCw0OCxzLngrcy53aWR0aC8yLTI0LHMueStzLmltYWdlLlksYik7YnJlYWt9bGV0IEE9dVtzLnR5cGVDNFNoYXBlLnRleHQrIkZvbnQiXSgpO3JldHVybiBBLmZvbnRXZWlnaHQ9ImJvbGQiLEEuZm9udFNpemU9QS5mb250U2l6ZSsyLEEuZm9udENvbG9yPXYsRjcodSkocy5sYWJlbC50ZXh0LHkscy54LHMueStzLmxhYmVsLlkscy53aWR0aCxzLmhlaWdodCx7ZmlsbDp2fSxBKSxBPXVbcy50eXBlQzRTaGFwZS50ZXh0KyJGb250Il0oKSxBLmZvbnRDb2xvcj12LHMudGVjaG4mJigoUD1zLnRlY2huKT09bnVsbD92b2lkIDA6UC50ZXh0KSE9PSIiP0Y3KHUpKHMudGVjaG4udGV4dCx5LHMueCxzLnkrcy50ZWNobi5ZLHMud2lkdGgscy5oZWlnaHQse2ZpbGw6diwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LEEpOnMudHlwZSYmcy50eXBlLnRleHQhPT0iIiYmRjcodSkocy50eXBlLnRleHQseSxzLngscy55K3MudHlwZS5ZLHMud2lkdGgscy5oZWlnaHQse2ZpbGw6diwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LEEpLHMuZGVzY3ImJnMuZGVzY3IudGV4dCE9PSIiJiYoQT11LnBlcnNvbkZvbnQoKSxBLmZvbnRDb2xvcj12LEY3KHUpKHMuZGVzY3IudGV4dCx5LHMueCxzLnkrcy5kZXNjci5ZLHMud2lkdGgscy5oZWlnaHQse2ZpbGw6dn0sQSkpLHMuaGVpZ2h0fSxvVXQ9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiZGF0YWJhc2UiKS5hdHRyKCJmaWxsLXJ1bGUiLCJldmVub2RkIikuYXR0cigiY2xpcC1ydWxlIiwiZXZlbm9kZCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6Iil9LGNVdD1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSx1VXQ9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY2xvY2siKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXoiKX0sbFV0PWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iil9LGhVdD1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2VuZCIpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxMCAwIEwgMCA1IEwgMTAgMTAgeiIpfSxmVXQ9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZmlsbGVkLWhlYWQiKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sZFV0PWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0sZ1V0PWZ1bmN0aW9uKGkpe2NvbnN0IHU9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiwxNikuYXR0cigicmVmWSIsNCk7dS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gOSwyIFYgNiBMMTYsNCBaIiksdS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSAwLDEgTCA2LDcgTSA2LDEgTCAwLDciKX0scFV0PShpLHMpPT4oe2ZvbnRGYW1pbHk6aVtzKyJGb250RmFtaWx5Il0sZm9udFNpemU6aVtzKyJGb250U2l6ZSJdLGZvbnRXZWlnaHQ6aVtzKyJGb250V2VpZ2h0Il19KSxGNz1mdW5jdGlvbigpe2Z1bmN0aW9uIGkocCx2LGIseSxULF8sQSl7Y29uc3QgUD12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrVC8yKS5hdHRyKCJ5Iix5K18vMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHApO2QoUCxBKX1mdW5jdGlvbiBzKHAsdixiLHksVCxfLEEsUCl7Y29uc3R7Zm9udFNpemU6Uixmb250RmFtaWx5OkYsZm9udFdlaWdodDpqfT1QLEs9cC5zcGxpdChjaS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCBlZT0wO2VlPEsubGVuZ3RoO2VlKyspe2NvbnN0IGllPWVlKlItUiooSy5sZW5ndGgtMSkvMixvZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrVC8yKS5hdHRyKCJ5Iix5KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLFIpLnN0eWxlKCJmb250LXdlaWdodCIsaikuc3R5bGUoImZvbnQtZmFtaWx5IixGKTtvZS5hcHBlbmQoInRzcGFuIikuYXR0cigiZHkiLGllKS50ZXh0KEtbZWVdKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtYXRoZW1hdGljYWwiKSxkKG9lLEEpfX1mdW5jdGlvbiB1KHAsdixiLHksVCxfLEEsUCl7Y29uc3QgUj12LmFwcGVuZCgic3dpdGNoIiksaj1SLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLHkpLmF0dHIoIndpZHRoIixUKS5hdHRyKCJoZWlnaHQiLF8pLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2ouYXBwZW5kKCJkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQocCkscyhwLFIsYix5LFQsXyxBLFApLGQoaixBKX1mdW5jdGlvbiBkKHAsdil7Zm9yKGNvbnN0IGIgaW4gdil2Lmhhc093blByb3BlcnR5KGIpJiZwLmF0dHIoYix2W2JdKX1yZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIHAudGV4dFBsYWNlbWVudD09PSJmbyI/dTpwLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOnN9fSgpLEo0PXtkcmF3UmVjdDpxYmUsZHJhd0JvdW5kYXJ5OnNVdCxkcmF3QzRTaGFwZTphVXQsZHJhd1JlbHM6aVV0LGRyYXdJbWFnZTpDcWUsaW5zZXJ0QXJyb3dIZWFkOmxVdCxpbnNlcnRBcnJvd0VuZDpoVXQsaW5zZXJ0QXJyb3dGaWxsZWRIZWFkOmZVdCxpbnNlcnREeW5hbWljTnVtYmVyOmRVdCxpbnNlcnRBcnJvd0Nyb3NzSGVhZDpnVXQsaW5zZXJ0RGF0YWJhc2VJY29uOm9VdCxpbnNlcnRDb21wdXRlckljb246Y1V0LGluc2VydENsb2NrSWNvbjp1VXR9O2xldCBMUT0wLE1RPTAsU3FlPTQsSGJlPTI7Q1EueXk9JGJlO2xldCAkcz17fTtjbGFzcyBfcWV7Y29uc3RydWN0b3Iocyl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17fSx0aGlzLmRhdGEuc3RhcnR4PXZvaWQgMCx0aGlzLmRhdGEuc3RvcHg9dm9pZCAwLHRoaXMuZGF0YS5zdGFydHk9dm9pZCAwLHRoaXMuZGF0YS5zdG9weT12b2lkIDAsdGhpcy5kYXRhLndpZHRoTGltaXQ9dm9pZCAwLHRoaXMubmV4dERhdGE9e30sdGhpcy5uZXh0RGF0YS5zdGFydHg9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RvcHg9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RhcnR5PXZvaWQgMCx0aGlzLm5leHREYXRhLnN0b3B5PXZvaWQgMCx0aGlzLm5leHREYXRhLmNudD0wLFZiZShzLmRiLmdldENvbmZpZygpKX1zZXREYXRhKHMsdSxkLHApe3RoaXMubmV4dERhdGEuc3RhcnR4PXRoaXMuZGF0YS5zdGFydHg9cyx0aGlzLm5leHREYXRhLnN0b3B4PXRoaXMuZGF0YS5zdG9weD11LHRoaXMubmV4dERhdGEuc3RhcnR5PXRoaXMuZGF0YS5zdGFydHk9ZCx0aGlzLm5leHREYXRhLnN0b3B5PXRoaXMuZGF0YS5zdG9weT1wfXVwZGF0ZVZhbChzLHUsZCxwKXtzW3VdPT09dm9pZCAwP3NbdV09ZDpzW3VdPXAoZCxzW3VdKX1pbnNlcnQocyl7dGhpcy5uZXh0RGF0YS5jbnQ9dGhpcy5uZXh0RGF0YS5jbnQrMTtsZXQgdT10aGlzLm5leHREYXRhLnN0YXJ0eD09PXRoaXMubmV4dERhdGEuc3RvcHg/dGhpcy5uZXh0RGF0YS5zdG9weCtzLm1hcmdpbjp0aGlzLm5leHREYXRhLnN0b3B4K3MubWFyZ2luKjIsZD11K3Mud2lkdGgscD10aGlzLm5leHREYXRhLnN0YXJ0eStzLm1hcmdpbioyLHY9cCtzLmhlaWdodDsodT49dGhpcy5kYXRhLndpZHRoTGltaXR8fGQ+PXRoaXMuZGF0YS53aWR0aExpbWl0fHx0aGlzLm5leHREYXRhLmNudD5TcWUpJiYodT10aGlzLm5leHREYXRhLnN0YXJ0eCtzLm1hcmdpbiskcy5uZXh0TGluZVBhZGRpbmdYLHA9dGhpcy5uZXh0RGF0YS5zdG9weStzLm1hcmdpbioyLHRoaXMubmV4dERhdGEuc3RvcHg9ZD11K3Mud2lkdGgsdGhpcy5uZXh0RGF0YS5zdGFydHk9dGhpcy5uZXh0RGF0YS5zdG9weSx0aGlzLm5leHREYXRhLnN0b3B5PXY9cCtzLmhlaWdodCx0aGlzLm5leHREYXRhLmNudD0xKSxzLng9dSxzLnk9cCx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0YXJ0eCIsdSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdGFydHkiLHAsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHgiLGQsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHkiLHYsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0YXJ0eCIsdSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RhcnR5IixwLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdG9weCIsZCxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RvcHkiLHYsTWF0aC5tYXgpfWluaXQocyl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDAsd2lkdGhMaW1pdDp2b2lkIDB9LHRoaXMubmV4dERhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwLGNudDowfSxWYmUocy5kYi5nZXRDb25maWcoKSl9YnVtcExhc3RNYXJnaW4ocyl7dGhpcy5kYXRhLnN0b3B4Kz1zLHRoaXMuZGF0YS5zdG9weSs9c319Y29uc3QgVmJlPWZ1bmN0aW9uKGkpe2lkKCRzLGkpLGkuZm9udEZhbWlseSYmKCRzLnBlcnNvbkZvbnRGYW1pbHk9JHMuc3lzdGVtRm9udEZhbWlseT0kcy5tZXNzYWdlRm9udEZhbWlseT1pLmZvbnRGYW1pbHkpLGkuZm9udFNpemUmJigkcy5wZXJzb25Gb250U2l6ZT0kcy5zeXN0ZW1Gb250U2l6ZT0kcy5tZXNzYWdlRm9udFNpemU9aS5mb250U2l6ZSksaS5mb250V2VpZ2h0JiYoJHMucGVyc29uRm9udFdlaWdodD0kcy5zeXN0ZW1Gb250V2VpZ2h0PSRzLm1lc3NhZ2VGb250V2VpZ2h0PWkuZm9udFdlaWdodCl9LGJSPShpLHMpPT4oe2ZvbnRGYW1pbHk6aVtzKyJGb250RmFtaWx5Il0sZm9udFNpemU6aVtzKyJGb250U2l6ZSJdLGZvbnRXZWlnaHQ6aVtzKyJGb250V2VpZ2h0Il19KSxEUT1pPT4oe2ZvbnRGYW1pbHk6aS5ib3VuZGFyeUZvbnRGYW1pbHksZm9udFNpemU6aS5ib3VuZGFyeUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5ib3VuZGFyeUZvbnRXZWlnaHR9KSxiVXQ9aT0+KHtmb250RmFtaWx5OmkubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6aS5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDppLm1lc3NhZ2VGb250V2VpZ2h0fSk7ZnVuY3Rpb24gJDMoaSxzLHUsZCxwKXtpZighc1tpXS53aWR0aClpZih1KXNbaV0udGV4dD12amUoc1tpXS50ZXh0LHAsZCksc1tpXS50ZXh0TGluZXM9c1tpXS50ZXh0LnNwbGl0KGNpLmxpbmVCcmVha1JlZ2V4KS5sZW5ndGgsc1tpXS53aWR0aD1wLHNbaV0uaGVpZ2h0PUUyZShzW2ldLnRleHQsZCk7ZWxzZXtsZXQgdj1zW2ldLnRleHQuc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpO3NbaV0udGV4dExpbmVzPXYubGVuZ3RoO2xldCBiPTA7c1tpXS5oZWlnaHQ9MCxzW2ldLndpZHRoPTA7Zm9yKGNvbnN0IHkgb2YgdilzW2ldLndpZHRoPU1hdGgubWF4KEg0KHksZCksc1tpXS53aWR0aCksYj1FMmUoeSxkKSxzW2ldLmhlaWdodD1zW2ldLmhlaWdodCtifX1jb25zdCBBcWU9ZnVuY3Rpb24oaSxzLHUpe3MueD11LmRhdGEuc3RhcnR4LHMueT11LmRhdGEuc3RhcnR5LHMud2lkdGg9dS5kYXRhLnN0b3B4LXUuZGF0YS5zdGFydHgscy5oZWlnaHQ9dS5kYXRhLnN0b3B5LXUuZGF0YS5zdGFydHkscy5sYWJlbC55PSRzLmM0U2hhcGVNYXJnaW4tMzU7bGV0IGQ9cy53cmFwJiYkcy53cmFwLHA9RFEoJHMpO3AuZm9udFNpemU9cC5mb250U2l6ZSsyLHAuZm9udFdlaWdodD0iYm9sZCI7bGV0IHY9SDQocy5sYWJlbC50ZXh0LHApOyQzKCJsYWJlbCIscyxkLHAsdiksSjQuZHJhd0JvdW5kYXJ5KGkscywkcyl9LExxZT1mdW5jdGlvbihpLHMsdSxkKXtsZXQgcD0wO2Zvcihjb25zdCB2IG9mIGQpe3A9MDtjb25zdCBiPXVbdl07bGV0IHk9YlIoJHMsYi50eXBlQzRTaGFwZS50ZXh0KTtzd2l0Y2goeS5mb250U2l6ZT15LmZvbnRTaXplLTIsYi50eXBlQzRTaGFwZS53aWR0aD1INCgiwqsiK2IudHlwZUM0U2hhcGUudGV4dCsiwrsiLHkpLGIudHlwZUM0U2hhcGUuaGVpZ2h0PXkuZm9udFNpemUrMixiLnR5cGVDNFNoYXBlLlk9JHMuYzRTaGFwZVBhZGRpbmcscD1iLnR5cGVDNFNoYXBlLlkrYi50eXBlQzRTaGFwZS5oZWlnaHQtNCxiLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0sYi50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOmIuaW1hZ2Uud2lkdGg9NDgsYi5pbWFnZS5oZWlnaHQ9NDgsYi5pbWFnZS5ZPXAscD1iLmltYWdlLlkrYi5pbWFnZS5oZWlnaHQ7YnJlYWt9Yi5zcHJpdGUmJihiLmltYWdlLndpZHRoPTQ4LGIuaW1hZ2UuaGVpZ2h0PTQ4LGIuaW1hZ2UuWT1wLHA9Yi5pbWFnZS5ZK2IuaW1hZ2UuaGVpZ2h0KTtsZXQgVD1iLndyYXAmJiRzLndyYXAsXz0kcy53aWR0aC0kcy5jNFNoYXBlUGFkZGluZyoyLEE9YlIoJHMsYi50eXBlQzRTaGFwZS50ZXh0KTtpZihBLmZvbnRTaXplPUEuZm9udFNpemUrMixBLmZvbnRXZWlnaHQ9ImJvbGQiLCQzKCJsYWJlbCIsYixULEEsXyksYi5sYWJlbC5ZPXArOCxwPWIubGFiZWwuWStiLmxhYmVsLmhlaWdodCxiLnR5cGUmJmIudHlwZS50ZXh0IT09IiIpe2IudHlwZS50ZXh0PSJbIitiLnR5cGUudGV4dCsiXSI7bGV0IEY9YlIoJHMsYi50eXBlQzRTaGFwZS50ZXh0KTskMygidHlwZSIsYixULEYsXyksYi50eXBlLlk9cCs1LHA9Yi50eXBlLlkrYi50eXBlLmhlaWdodH1lbHNlIGlmKGIudGVjaG4mJmIudGVjaG4udGV4dCE9PSIiKXtiLnRlY2huLnRleHQ9IlsiK2IudGVjaG4udGV4dCsiXSI7bGV0IEY9YlIoJHMsYi50ZWNobi50ZXh0KTskMygidGVjaG4iLGIsVCxGLF8pLGIudGVjaG4uWT1wKzUscD1iLnRlY2huLlkrYi50ZWNobi5oZWlnaHR9bGV0IFA9cCxSPWIubGFiZWwud2lkdGg7aWYoYi5kZXNjciYmYi5kZXNjci50ZXh0IT09IiIpe2xldCBGPWJSKCRzLGIudHlwZUM0U2hhcGUudGV4dCk7JDMoImRlc2NyIixiLFQsRixfKSxiLmRlc2NyLlk9cCsyMCxwPWIuZGVzY3IuWStiLmRlc2NyLmhlaWdodCxSPU1hdGgubWF4KGIubGFiZWwud2lkdGgsYi5kZXNjci53aWR0aCksUD1wLWIuZGVzY3IudGV4dExpbmVzKjV9Uj1SKyRzLmM0U2hhcGVQYWRkaW5nLGIud2lkdGg9TWF0aC5tYXgoYi53aWR0aHx8JHMud2lkdGgsUiwkcy53aWR0aCksYi5oZWlnaHQ9TWF0aC5tYXgoYi5oZWlnaHR8fCRzLmhlaWdodCxQLCRzLmhlaWdodCksYi5tYXJnaW49Yi5tYXJnaW58fCRzLmM0U2hhcGVNYXJnaW4saS5pbnNlcnQoYiksSjQuZHJhd0M0U2hhcGUocyxiLCRzKX1pLmJ1bXBMYXN0TWFyZ2luKCRzLmM0U2hhcGVNYXJnaW4pfTtsZXQganY9Y2xhc3N7Y29uc3RydWN0b3Iocyx1KXt0aGlzLng9cyx0aGlzLnk9dX19LE1xZT1mdW5jdGlvbihpLHMpe2xldCB1PWkueCxkPWkueSxwPXMueCx2PXMueSxiPXUraS53aWR0aC8yLHk9ZCtpLmhlaWdodC8yLFQ9TWF0aC5hYnModS1wKSxfPU1hdGguYWJzKGQtdiksQT1fL1QsUD1pLmhlaWdodC9pLndpZHRoLFI9bnVsbDtyZXR1cm4gZD09diYmdTxwP1I9bmV3IGp2KHUraS53aWR0aCx5KTpkPT12JiZ1PnA/Uj1uZXcganYodSx5KTp1PT1wJiZkPHY/Uj1uZXcganYoYixkK2kuaGVpZ2h0KTp1PT1wJiZkPnYmJihSPW5ldyBqdihiLGQpKSx1PnAmJmQ8dj9QPj1BP1I9bmV3IGp2KHUseStBKmkud2lkdGgvMik6Uj1uZXcganYoYi1UL18qaS5oZWlnaHQvMixkK2kuaGVpZ2h0KTp1PHAmJmQ8dj9QPj1BP1I9bmV3IGp2KHUraS53aWR0aCx5K0EqaS53aWR0aC8yKTpSPW5ldyBqdihiK1QvXyppLmhlaWdodC8yLGQraS5oZWlnaHQpOnU8cCYmZD52P1A+PUE/Uj1uZXcganYodStpLndpZHRoLHktQSppLndpZHRoLzIpOlI9bmV3IGp2KGIraS5oZWlnaHQvMipUL18sZCk6dT5wJiZkPnYmJihQPj1BP1I9bmV3IGp2KHUseS1pLndpZHRoLzIqQSk6Uj1uZXcganYoYi1pLmhlaWdodC8yKlQvXyxkKSksUn0sbVV0PWZ1bmN0aW9uKGkscyl7bGV0IHU9e3g6MCx5OjB9O3UueD1zLngrcy53aWR0aC8yLHUueT1zLnkrcy5oZWlnaHQvMjtsZXQgZD1NcWUoaSx1KTt1Lng9aS54K2kud2lkdGgvMix1Lnk9aS55K2kuaGVpZ2h0LzI7bGV0IHA9TXFlKHMsdSk7cmV0dXJue3N0YXJ0UG9pbnQ6ZCxlbmRQb2ludDpwfX07Y29uc3QgdlV0PWZ1bmN0aW9uKGkscyx1LGQpe2xldCBwPTA7Zm9yKGxldCB2IG9mIHMpe3A9cCsxO2xldCBiPXYud3JhcCYmJHMud3JhcCx5PWJVdCgkcyk7ZC5kYi5nZXRDNFR5cGUoKT09PSJDNER5bmFtaWMiJiYodi5sYWJlbC50ZXh0PXArIjogIit2LmxhYmVsLnRleHQpO2xldCBfPUg0KHYubGFiZWwudGV4dCx5KTskMygibGFiZWwiLHYsYix5LF8pLHYudGVjaG4mJnYudGVjaG4udGV4dCE9PSIiJiYoXz1INCh2LnRlY2huLnRleHQseSksJDMoInRlY2huIix2LGIseSxfKSksdi5kZXNjciYmdi5kZXNjci50ZXh0IT09IiImJihfPUg0KHYuZGVzY3IudGV4dCx5KSwkMygiZGVzY3IiLHYsYix5LF8pKTtsZXQgQT11KHYuZnJvbSksUD11KHYudG8pLFI9bVV0KEEsUCk7di5zdGFydFBvaW50PVIuc3RhcnRQb2ludCx2LmVuZFBvaW50PVIuZW5kUG9pbnR9SjQuZHJhd1JlbHMoaSxzLCRzKX07ZnVuY3Rpb24gRHFlKGkscyx1LGQscCl7bGV0IHY9bmV3IF9xZShwKTt2LmRhdGEud2lkdGhMaW1pdD11LmRhdGEud2lkdGhMaW1pdC9NYXRoLm1pbihIYmUsZC5sZW5ndGgpO2ZvcihsZXRbYix5XW9mIGQuZW50cmllcygpKXtsZXQgVD0wO3kuaW1hZ2U9e3dpZHRoOjAsaGVpZ2h0OjAsWTowfSx5LnNwcml0ZSYmKHkuaW1hZ2Uud2lkdGg9NDgseS5pbWFnZS5oZWlnaHQ9NDgseS5pbWFnZS5ZPVQsVD15LmltYWdlLlkreS5pbWFnZS5oZWlnaHQpO2xldCBfPXkud3JhcCYmJHMud3JhcCxBPURRKCRzKTtpZihBLmZvbnRTaXplPUEuZm9udFNpemUrMixBLmZvbnRXZWlnaHQ9ImJvbGQiLCQzKCJsYWJlbCIseSxfLEEsdi5kYXRhLndpZHRoTGltaXQpLHkubGFiZWwuWT1UKzgsVD15LmxhYmVsLlkreS5sYWJlbC5oZWlnaHQseS50eXBlJiZ5LnR5cGUudGV4dCE9PSIiKXt5LnR5cGUudGV4dD0iWyIreS50eXBlLnRleHQrIl0iO2xldCBqPURRKCRzKTskMygidHlwZSIseSxfLGosdi5kYXRhLndpZHRoTGltaXQpLHkudHlwZS5ZPVQrNSxUPXkudHlwZS5ZK3kudHlwZS5oZWlnaHR9aWYoeS5kZXNjciYmeS5kZXNjci50ZXh0IT09IiIpe2xldCBqPURRKCRzKTtqLmZvbnRTaXplPWouZm9udFNpemUtMiwkMygiZGVzY3IiLHksXyxqLHYuZGF0YS53aWR0aExpbWl0KSx5LmRlc2NyLlk9VCsyMCxUPXkuZGVzY3IuWSt5LmRlc2NyLmhlaWdodH1pZihiPT0wfHxiJUhiZT09PTApe2xldCBqPXUuZGF0YS5zdGFydHgrJHMuZGlhZ3JhbU1hcmdpblgsSz11LmRhdGEuc3RvcHkrJHMuZGlhZ3JhbU1hcmdpblkrVDt2LnNldERhdGEoaixqLEssSyl9ZWxzZXtsZXQgaj12LmRhdGEuc3RvcHghPT12LmRhdGEuc3RhcnR4P3YuZGF0YS5zdG9weCskcy5kaWFncmFtTWFyZ2luWDp2LmRhdGEuc3RhcnR4LEs9di5kYXRhLnN0YXJ0eTt2LnNldERhdGEoaixqLEssSyl9di5uYW1lPXkuYWxpYXM7bGV0IFA9cC5kYi5nZXRDNFNoYXBlQXJyYXkoeS5hbGlhcyksUj1wLmRiLmdldEM0U2hhcGVLZXlzKHkuYWxpYXMpO1IubGVuZ3RoPjAmJkxxZSh2LGksUCxSKSxzPXkuYWxpYXM7bGV0IEY9cC5kYi5nZXRCb3VuZGFyeXMocyk7Ri5sZW5ndGg+MCYmRHFlKGkscyx2LEYscCkseS5hbGlhcyE9PSJnbG9iYWwiJiZBcWUoaSx5LHYpLHUuZGF0YS5zdG9weT1NYXRoLm1heCh2LmRhdGEuc3RvcHkrJHMuYzRTaGFwZU1hcmdpbix1LmRhdGEuc3RvcHkpLHUuZGF0YS5zdG9weD1NYXRoLm1heCh2LmRhdGEuc3RvcHgrJHMuYzRTaGFwZU1hcmdpbix1LmRhdGEuc3RvcHgpLExRPU1hdGgubWF4KExRLHUuZGF0YS5zdG9weCksTVE9TWF0aC5tYXgoTVEsdS5kYXRhLnN0b3B5KX19Y29uc3QgSXFlPXtkcmF3UGVyc29uT3JTeXN0ZW1BcnJheTpMcWUsZHJhd0JvdW5kYXJ5OkFxZSxzZXRDb25mOlZiZSxkcmF3OmZ1bmN0aW9uKGkscyx1LGQpeyRzPXF0KCkuYzQ7Y29uc3QgcD1xdCgpLnNlY3VyaXR5TGV2ZWw7bGV0IHY7cD09PSJzYW5kYm94IiYmKHY9SXIoIiNpIitzKSk7Y29uc3QgYj1JcihwPT09InNhbmRib3giP3Yubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpO2xldCB5PWQuZGI7ZC5kYi5zZXRXcmFwKCRzLndyYXApLFNxZT15LmdldEM0U2hhcGVJblJvdygpLEhiZT15LmdldEM0Qm91bmRhcnlJblJvdygpLFhlLmRlYnVnKGBDOiR7SlNPTi5zdHJpbmdpZnkoJHMsbnVsbCwyKX1gKTtjb25zdCBUPXA9PT0ic2FuZGJveCI/Yi5zZWxlY3QoYFtpZD0iJHtzfSJdYCk6SXIoYFtpZD0iJHtzfSJdYCk7SjQuaW5zZXJ0Q29tcHV0ZXJJY29uKFQpLEo0Lmluc2VydERhdGFiYXNlSWNvbihUKSxKNC5pbnNlcnRDbG9ja0ljb24oVCk7bGV0IF89bmV3IF9xZShkKTtfLnNldERhdGEoJHMuZGlhZ3JhbU1hcmdpblgsJHMuZGlhZ3JhbU1hcmdpblgsJHMuZGlhZ3JhbU1hcmdpblksJHMuZGlhZ3JhbU1hcmdpblkpLF8uZGF0YS53aWR0aExpbWl0PXNjcmVlbi5hdmFpbFdpZHRoLExRPSRzLmRpYWdyYW1NYXJnaW5YLE1RPSRzLmRpYWdyYW1NYXJnaW5ZO2NvbnN0IEE9ZC5kYi5nZXRUaXRsZSgpO2xldCBQPWQuZGIuZ2V0Qm91bmRhcnlzKCIiKTtEcWUoVCwiIixfLFAsZCksSjQuaW5zZXJ0QXJyb3dIZWFkKFQpLEo0Lmluc2VydEFycm93RW5kKFQpLEo0Lmluc2VydEFycm93Q3Jvc3NIZWFkKFQpLEo0Lmluc2VydEFycm93RmlsbGVkSGVhZChUKSx2VXQoVCxkLmRiLmdldFJlbHMoKSxkLmRiLmdldEM0U2hhcGUsZCksXy5kYXRhLnN0b3B4PUxRLF8uZGF0YS5zdG9weT1NUTtjb25zdCBSPV8uZGF0YTtsZXQgaj1SLnN0b3B5LVIuc3RhcnR5KzIqJHMuZGlhZ3JhbU1hcmdpblk7Y29uc3QgZWU9Ui5zdG9weC1SLnN0YXJ0eCsyKiRzLmRpYWdyYW1NYXJnaW5YO0EmJlQuYXBwZW5kKCJ0ZXh0IikudGV4dChBKS5hdHRyKCJ4IiwoUi5zdG9weC1SLnN0YXJ0eCkvMi00KiRzLmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IixSLnN0YXJ0eSskcy5kaWFncmFtTWFyZ2luWSksTmcoVCxqLGVlLCRzLnVzZU1heFdpZHRoKTtjb25zdCBpZT1BPzYwOjA7VC5hdHRyKCJ2aWV3Qm94IixSLnN0YXJ0eC0kcy5kaWFncmFtTWFyZ2luWCsiIC0iKygkcy5kaWFncmFtTWFyZ2luWStpZSkrIiAiK2VlKyIgIisoaitpZSkpLFhlLmRlYnVnKCJtb2RlbHM6IixSKX19LHdVdD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOkRWdCxkYjokYmUscmVuZGVyZXI6SXFlLHN0eWxlczppPT5gLnBlcnNvbiB7CiAgICBzdHJva2U6ICR7aS5wZXJzb25Cb3JkZXJ9OwogICAgZmlsbDogJHtpLnBlcnNvbkJrZ307CiAgfQpgLGluaXQ6KHtjNDppLHdyYXA6c30pPT57SXFlLnNldENvbmYoaSksJGJlLnNldFdyYXAocyl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgVWJlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oJDAsV2ksQnMsUWEpe2ZvcihCcz1Cc3x8e30sUWE9JDAubGVuZ3RoO1FhLS07QnNbJDBbUWFdXT1XaSk7cmV0dXJuIEJzfSxzPVsxLDRdLHU9WzEsM10sZD1bMSw1XSxwPVsxLDgsOSwxMCwxMSwyNywzNCwzNiwzOCw0Miw1OCw4MSw4Miw4Myw4NCw4NSw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTMsMTE4LDExOSwxMjAsMTIxXSx2PVsyLDJdLGI9WzEsMTNdLHk9WzEsMTRdLFQ9WzEsMTVdLF89WzEsMTZdLEE9WzEsMjNdLFA9WzEsMjVdLFI9WzEsMjZdLEY9WzEsMjddLGo9WzEsNDldLEs9WzEsNDhdLGVlPVsxLDI5XSxpZT1bMSwzMF0sb2U9WzEsMzFdLHBlPVsxLDMyXSxiZT1bMSwzM10sYWU9WzEsNDRdLG5lPVsxLDQ2XSxzZT1bMSw0Ml0sZGU9WzEsNDddLFg9WzEsNDNdLGdlPVsxLDUwXSxXPVsxLDQ1XSx4ZT1bMSw1MV0sVT1bMSw1Ml0sRmU9WzEsMzRdLFBlPVsxLDM1XSxqZT1bMSwzNl0sSWU9WzEsMzddLFNlPVsxLDU3XSxDZT1bMSw4LDksMTAsMTEsMjcsMzIsMzQsMzYsMzgsNDIsNTgsODEsODIsODMsODQsODUsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzLDExOCwxMTksMTIwLDEyMV0sa2U9WzEsNjFdLEtlPVsxLDYwXSxGdD1bMSw2Ml0sTmU9WzgsOSwxMSw3Myw3NV0sZ249WzEsODhdLF90PVsxLDkzXSxFdD1bMSw5Ml0sR3Q9WzEsODldLGxuPVsxLDg1XSx4dD1bMSw5MV0sUHQ9WzEsODddLFFlPVsxLDk0XSxEdD1bMSw5MF0sa3Q9WzEsOTVdLE9uPVsxLDg2XSxodD1bOCw5LDEwLDExLDczLDc1XSx6cj1bOCw5LDEwLDExLDQ0LDczLDc1XSx5dD1bOCw5LDEwLDExLDI5LDQyLDQ0LDQ2LDQ4LDUwLDUyLDU0LDU2LDU4LDYxLDYzLDY1LDY2LDY4LDczLDc1LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10samk9WzgsOSwxMSw0Miw1OCw3Myw3NSw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLHhpPVs0Miw1OCw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLE1hPVsxLDEyMV0senM9WzEsMTIwXSxhbz1bMSwxMjhdLFRyPVsxLDE0Ml0sRm49WzEsMTQzXSxxbj1bMSwxNDRdLFVuPVsxLDE0NV0sQXQ9WzEsMTMwXSx3dD1bMSwxMzJdLG9uPVsxLDEzNl0sZm49WzEsMTM3XSxBbj1bMSwxMzhdLG9vPVsxLDEzOV0sam89WzEsMTQwXSwkbz1bMSwxNDFdLFBhPVsxLDE0Nl0sd289WzEsMTQ3XSxfcz1bMSwxMjZdLHRsPVsxLDEyN10sZGE9WzEsMTM0XSxqMD1bMSwxMjldLHBtPVsxLDEzM10sTWw9WzEsMTMxXSxYYz1bOCw5LDEwLDExLDI3LDMyLDM0LDM2LDM4LDQyLDU4LDgxLDgyLDgzLDg0LDg1LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExMywxMTgsMTE5LDEyMCwxMjFdLEJjPVsxLDE0OV0samE9WzgsOSwxMV0sT3U9WzgsOSwxMCwxMSwxNCw0Miw1OCw4NiwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLFNhPVsxLDE2OV0sUG89WzEsMTY1XSxGYz1bMSwxNjZdLHhhPVsxLDE3MF0sQmE9WzEsMTY3XSxnYT1bMSwxNjhdLGtoPVs3NSwxMTMsMTE2XSxsdT1bOCw5LDEwLDExLDEyLDE0LDI3LDI5LDMyLDQyLDU4LDczLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDEwMiwxMDYsMTA4LDExMSwxMTIsMTEzXSxvNT1bMTAsMTAzXSxXaD1bMzEsNDcsNDksNTEsNTMsNTUsNjAsNjIsNjQsNjUsNjcsNjksMTEzLDExNCwxMTVdLG9kPVsxLDIzNV0sR2Q9WzEsMjMzXSxjZD1bMSwyMzddLEtkPVsxLDIzMV0sJGc9WzEsMjMyXSxhcz1bMSwyMzRdLHduPVsxLDIzNl0sWnI9WzEsMjM4XSxaaT1bMSwyNTVdLG51PVs4LDksMTEsMTAzXSx2dT1bOCw5LDEwLDExLDU4LDgxLDEwMiwxMDMsMTA2LDEwNywxMDgsMTA5XSxEbD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZ3JhcGhDb25maWc6NCxkb2N1bWVudDo1LGxpbmU6NixzdGF0ZW1lbnQ6NyxTRU1JOjgsTkVXTElORTo5LFNQQUNFOjEwLEVPRjoxMSxHUkFQSDoxMixOT0RJUjoxMyxESVI6MTQsRmlyc3RTdG10U2VwYXJhdG9yOjE1LGVuZGluZzoxNixlbmRUb2tlbjoxNyxzcGFjZUxpc3Q6MTgsc3BhY2VMaXN0TmV3bGluZToxOSx2ZXJ0ZXhTdGF0ZW1lbnQ6MjAsc2VwYXJhdG9yOjIxLHN0eWxlU3RhdGVtZW50OjIyLGxpbmtTdHlsZVN0YXRlbWVudDoyMyxjbGFzc0RlZlN0YXRlbWVudDoyNCxjbGFzc1N0YXRlbWVudDoyNSxjbGlja1N0YXRlbWVudDoyNixzdWJncmFwaDoyNyx0ZXh0Tm9UYWdzOjI4LFNRUzoyOSx0ZXh0OjMwLFNRRTozMSxlbmQ6MzIsZGlyZWN0aW9uOjMzLGFjY190aXRsZTozNCxhY2NfdGl0bGVfdmFsdWU6MzUsYWNjX2Rlc2NyOjM2LGFjY19kZXNjcl92YWx1ZTozNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM4LGxpbms6Mzksbm9kZTo0MCxzdHlsZWRWZXJ0ZXg6NDEsQU1QOjQyLHZlcnRleDo0MyxTVFlMRV9TRVBBUkFUT1I6NDQsaWRTdHJpbmc6NDUsRE9VQkxFQ0lSQ0xFU1RBUlQ6NDYsRE9VQkxFQ0lSQ0xFRU5EOjQ3LFBTOjQ4LFBFOjQ5LCIoLSI6NTAsIi0pIjo1MSxTVEFESVVNU1RBUlQ6NTIsU1RBRElVTUVORDo1MyxTVUJST1VUSU5FU1RBUlQ6NTQsU1VCUk9VVElORUVORDo1NSxWRVJURVhfV0lUSF9QUk9QU19TVEFSVDo1NiwiTk9ERV9TVFJJTkdbZmllbGRdIjo1NyxDT0xPTjo1OCwiTk9ERV9TVFJJTkdbdmFsdWVdIjo1OSxQSVBFOjYwLENZTElOREVSU1RBUlQ6NjEsQ1lMSU5ERVJFTkQ6NjIsRElBTU9ORF9TVEFSVDo2MyxESUFNT05EX1NUT1A6NjQsVEFHRU5EOjY1LFRSQVBTVEFSVDo2NixUUkFQRU5EOjY3LElOVlRSQVBTVEFSVDo2OCxJTlZUUkFQRU5EOjY5LGxpbmtTdGF0ZW1lbnQ6NzAsYXJyb3dUZXh0OjcxLFRFU1RTVFI6NzIsU1RBUlRfTElOSzo3MyxlZGdlVGV4dDo3NCxMSU5LOjc1LGVkZ2VUZXh0VG9rZW46NzYsU1RSOjc3LE1EX1NUUjo3OCx0ZXh0VG9rZW46Nzksa2V5d29yZHM6ODAsU1RZTEU6ODEsTElOS1NUWUxFOjgyLENMQVNTREVGOjgzLENMQVNTOjg0LENMSUNLOjg1LERPV046ODYsVVA6ODcsdGV4dE5vVGFnc1Rva2VuOjg4LHN0eWxlc09wdDo4OSwiaWRTdHJpbmdbdmVydGV4XSI6OTAsImlkU3RyaW5nW2NsYXNzXSI6OTEsQ0FMTEJBQ0tOQU1FOjkyLENBTExCQUNLQVJHUzo5MyxIUkVGOjk0LExJTktfVEFSR0VUOjk1LCJTVFJbbGlua10iOjk2LCJTVFJbdG9vbHRpcF0iOjk3LGFscGhhTnVtOjk4LERFRkFVTFQ6OTksbnVtTGlzdDoxMDAsSU5URVJQT0xBVEU6MTAxLE5VTToxMDIsQ09NTUE6MTAzLHN0eWxlOjEwNCxzdHlsZUNvbXBvbmVudDoxMDUsTk9ERV9TVFJJTkc6MTA2LFVOSVQ6MTA3LEJSS1Q6MTA4LFBDVDoxMDksaWRTdHJpbmdUb2tlbjoxMTAsTUlOVVM6MTExLE1VTFQ6MTEyLFVOSUNPREVfVEVYVDoxMTMsVEVYVDoxMTQsVEFHU1RBUlQ6MTE1LEVER0VfVEVYVDoxMTYsYWxwaGFOdW1Ub2tlbjoxMTcsZGlyZWN0aW9uX3RiOjExOCxkaXJlY3Rpb25fYnQ6MTE5LGRpcmVjdGlvbl9ybDoxMjAsZGlyZWN0aW9uX2xyOjEyMSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsODoiU0VNSSIsOToiTkVXTElORSIsMTA6IlNQQUNFIiwxMToiRU9GIiwxMjoiR1JBUEgiLDEzOiJOT0RJUiIsMTQ6IkRJUiIsMjc6InN1YmdyYXBoIiwyOToiU1FTIiwzMToiU1FFIiwzMjoiZW5kIiwzNDoiYWNjX3RpdGxlIiwzNToiYWNjX3RpdGxlX3ZhbHVlIiwzNjoiYWNjX2Rlc2NyIiwzNzoiYWNjX2Rlc2NyX3ZhbHVlIiwzODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNDI6IkFNUCIsNDQ6IlNUWUxFX1NFUEFSQVRPUiIsNDY6IkRPVUJMRUNJUkNMRVNUQVJUIiw0NzoiRE9VQkxFQ0lSQ0xFRU5EIiw0ODoiUFMiLDQ5OiJQRSIsNTA6IigtIiw1MToiLSkiLDUyOiJTVEFESVVNU1RBUlQiLDUzOiJTVEFESVVNRU5EIiw1NDoiU1VCUk9VVElORVNUQVJUIiw1NToiU1VCUk9VVElORUVORCIsNTY6IlZFUlRFWF9XSVRIX1BST1BTX1NUQVJUIiw1NzoiTk9ERV9TVFJJTkdbZmllbGRdIiw1ODoiQ09MT04iLDU5OiJOT0RFX1NUUklOR1t2YWx1ZV0iLDYwOiJQSVBFIiw2MToiQ1lMSU5ERVJTVEFSVCIsNjI6IkNZTElOREVSRU5EIiw2MzoiRElBTU9ORF9TVEFSVCIsNjQ6IkRJQU1PTkRfU1RPUCIsNjU6IlRBR0VORCIsNjY6IlRSQVBTVEFSVCIsNjc6IlRSQVBFTkQiLDY4OiJJTlZUUkFQU1RBUlQiLDY5OiJJTlZUUkFQRU5EIiw3MjoiVEVTVFNUUiIsNzM6IlNUQVJUX0xJTksiLDc1OiJMSU5LIiw3NzoiU1RSIiw3ODoiTURfU1RSIiw4MToiU1RZTEUiLDgyOiJMSU5LU1RZTEUiLDgzOiJDTEFTU0RFRiIsODQ6IkNMQVNTIiw4NToiQ0xJQ0siLDg2OiJET1dOIiw4NzoiVVAiLDkwOiJpZFN0cmluZ1t2ZXJ0ZXhdIiw5MToiaWRTdHJpbmdbY2xhc3NdIiw5MjoiQ0FMTEJBQ0tOQU1FIiw5MzoiQ0FMTEJBQ0tBUkdTIiw5NDoiSFJFRiIsOTU6IkxJTktfVEFSR0VUIiw5NjoiU1RSW2xpbmtdIiw5NzoiU1RSW3Rvb2x0aXBdIiw5OToiREVGQVVMVCIsMTAxOiJJTlRFUlBPTEFURSIsMTAyOiJOVU0iLDEwMzoiQ09NTUEiLDEwNjoiTk9ERV9TVFJJTkciLDEwNzoiVU5JVCIsMTA4OiJCUktUIiwxMDk6IlBDVCIsMTExOiJNSU5VUyIsMTEyOiJNVUxUIiwxMTM6IlVOSUNPREVfVEVYVCIsMTE0OiJURVhUIiwxMTU6IlRBR1NUQVJUIiwxMTY6IkVER0VfVEVYVCIsMTE4OiJkaXJlY3Rpb25fdGIiLDExOToiZGlyZWN0aW9uX2J0IiwxMjA6ImRpcmVjdGlvbl9ybCIsMTIxOiJkaXJlY3Rpb25fbHIifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzUsMF0sWzUsMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsM10sWzE2LDJdLFsxNiwxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMTksMl0sWzE5LDJdLFsxOSwxXSxbMTksMV0sWzE4LDJdLFsxOCwxXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNyw5XSxbNyw2XSxbNyw0XSxbNywxXSxbNywyXSxbNywyXSxbNywxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMjAsM10sWzIwLDRdLFsyMCwyXSxbMjAsMV0sWzQwLDFdLFs0MCw1XSxbNDEsMV0sWzQxLDNdLFs0Myw0XSxbNDMsNF0sWzQzLDZdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0Myw4XSxbNDMsNF0sWzQzLDRdLFs0Myw0XSxbNDMsNl0sWzQzLDRdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0Myw0XSxbNDMsMV0sWzM5LDJdLFszOSwzXSxbMzksM10sWzM5LDFdLFszOSwzXSxbNzQsMV0sWzc0LDJdLFs3NCwxXSxbNzQsMV0sWzcwLDFdLFs3MSwzXSxbMzAsMV0sWzMwLDJdLFszMCwxXSxbMzAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbMjgsMV0sWzI4LDJdLFsyOCwxXSxbMjgsMV0sWzI0LDVdLFsyNSw1XSxbMjYsMl0sWzI2LDRdLFsyNiwzXSxbMjYsNV0sWzI2LDNdLFsyNiw1XSxbMjYsNV0sWzI2LDddLFsyNiwyXSxbMjYsNF0sWzI2LDJdLFsyNiw0XSxbMjYsNF0sWzI2LDZdLFsyMiw1XSxbMjMsNV0sWzIzLDVdLFsyMyw5XSxbMjMsOV0sWzIzLDddLFsyMyw3XSxbMTAwLDFdLFsxMDAsM10sWzg5LDFdLFs4OSwzXSxbMTA0LDFdLFsxMDQsMl0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbNzYsMV0sWzc2LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbNDUsMV0sWzQ1LDJdLFs5OCwxXSxbOTgsMl0sWzMzLDFdLFszMywxXSxbMzMsMV0sWzMzLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFdpLEJzLFFhLEJpLE51LE90LFczKXt2YXIgS3Q9T3QubGVuZ3RoLTE7c3dpdGNoKE51KXtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzooIUFycmF5LmlzQXJyYXkoT3RbS3RdKXx8T3RbS3RdLmxlbmd0aD4wKSYmT3RbS3QtMV0ucHVzaChPdFtLdF0pLHRoaXMuJD1PdFtLdC0xXTticmVhaztjYXNlIDQ6Y2FzZSAxNzY6dGhpcy4kPU90W0t0XTticmVhaztjYXNlIDExOkJpLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDEyOkJpLnNldERpcmVjdGlvbihPdFtLdC0xXSksdGhpcy4kPU90W0t0LTFdO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPU90W0t0LTFdLm5vZGVzO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTpjYXNlIDMwOmNhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9QmkuYWRkU3ViR3JhcGgoT3RbS3QtNl0sT3RbS3QtMV0sT3RbS3QtNF0pO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPUJpLmFkZFN1YkdyYXBoKE90W0t0LTNdLE90W0t0LTFdLE90W0t0LTNdKTticmVhaztjYXNlIDM1OnRoaXMuJD1CaS5hZGRTdWJHcmFwaCh2b2lkIDAsT3RbS3QtMV0sdm9pZCAwKTticmVhaztjYXNlIDM3OnRoaXMuJD1PdFtLdF0udHJpbSgpLEJpLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnRoaXMuJD1PdFtLdF0udHJpbSgpLEJpLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA0MzpCaS5hZGRMaW5rKE90W0t0LTJdLnN0bXQsT3RbS3RdLE90W0t0LTFdKSx0aGlzLiQ9e3N0bXQ6T3RbS3RdLG5vZGVzOk90W0t0XS5jb25jYXQoT3RbS3QtMl0ubm9kZXMpfTticmVhaztjYXNlIDQ0OkJpLmFkZExpbmsoT3RbS3QtM10uc3RtdCxPdFtLdC0xXSxPdFtLdC0yXSksdGhpcy4kPXtzdG10Ok90W0t0LTFdLG5vZGVzOk90W0t0LTFdLmNvbmNhdChPdFtLdC0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXtzdG10Ok90W0t0LTFdLG5vZGVzOk90W0t0LTFdfTticmVhaztjYXNlIDQ2OnRoaXMuJD17c3RtdDpPdFtLdF0sbm9kZXM6T3RbS3RdfTticmVhaztjYXNlIDQ3OnRoaXMuJD1bT3RbS3RdXTticmVhaztjYXNlIDQ4OnRoaXMuJD1PdFtLdC00XS5jb25jYXQoT3RbS3RdKTticmVhaztjYXNlIDQ5OnRoaXMuJD1PdFtLdF07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9T3RbS3QtMl0sQmkuc2V0Q2xhc3MoT3RbS3QtMl0sT3RbS3RdKTticmVhaztjYXNlIDUxOnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTI6dGhpcy4kPU90W0t0LTNdLEJpLmFkZFZlcnRleChPdFtLdC0zXSxPdFtLdC0xXSwiZG91YmxlY2lyY2xlIik7YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9T3RbS3QtNV0sQmkuYWRkVmVydGV4KE90W0t0LTVdLE90W0t0LTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU0OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImVsbGlwc2UiKTticmVhaztjYXNlIDU1OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sInN0YWRpdW0iKTticmVhaztjYXNlIDU2OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDU3OnRoaXMuJD1PdFtLdC03XSxCaS5hZGRWZXJ0ZXgoT3RbS3QtN10sT3RbS3QtMV0sInJlY3QiLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE9iamVjdC5mcm9tRW50cmllcyhbW090W0t0LTVdLE90W0t0LTNdXV0pKTticmVhaztjYXNlIDU4OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImN5bGluZGVyIik7YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9T3RbS3QtM10sQmkuYWRkVmVydGV4KE90W0t0LTNdLE90W0t0LTFdLCJyb3VuZCIpO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPU90W0t0LTNdLEJpLmFkZFZlcnRleChPdFtLdC0zXSxPdFtLdC0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPU90W0t0LTVdLEJpLmFkZFZlcnRleChPdFtLdC01XSxPdFtLdC0yXSwiaGV4YWdvbiIpO2JyZWFrO2Nhc2UgNjI6dGhpcy4kPU90W0t0LTNdLEJpLmFkZFZlcnRleChPdFtLdC0zXSxPdFtLdC0xXSwib2RkIik7YnJlYWs7Y2FzZSA2Mzp0aGlzLiQ9T3RbS3QtM10sQmkuYWRkVmVydGV4KE90W0t0LTNdLE90W0t0LTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY0OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImludl90cmFwZXpvaWQiKTticmVhaztjYXNlIDY1OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImxlYW5fcmlnaHQiKTticmVhaztjYXNlIDY2OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPU90W0t0XSxCaS5hZGRWZXJ0ZXgoT3RbS3RdKTticmVhaztjYXNlIDY4Ok90W0t0LTFdLnRleHQ9T3RbS3RdLHRoaXMuJD1PdFtLdC0xXTticmVhaztjYXNlIDY5OmNhc2UgNzA6T3RbS3QtMl0udGV4dD1PdFtLdC0xXSx0aGlzLiQ9T3RbS3QtMl07YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9T3RbS3RdO2JyZWFrO2Nhc2UgNzI6dmFyIHowPUJpLmRlc3RydWN0TGluayhPdFtLdF0sT3RbS3QtMl0pO3RoaXMuJD17dHlwZTp6MC50eXBlLHN0cm9rZTp6MC5zdHJva2UsbGVuZ3RoOnowLmxlbmd0aCx0ZXh0Ok90W0t0LTFdfTticmVhaztjYXNlIDczOnRoaXMuJD17dGV4dDpPdFtLdF0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPXt0ZXh0Ok90W0t0LTFdLnRleHQrIiIrT3RbS3RdLHR5cGU6T3RbS3QtMV0udHlwZX07YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9e3RleHQ6T3RbS3RdLHR5cGU6InN0cmluZyJ9O2JyZWFrO2Nhc2UgNzY6dGhpcy4kPXt0ZXh0Ok90W0t0XSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgNzc6dmFyIHowPUJpLmRlc3RydWN0TGluayhPdFtLdF0pO3RoaXMuJD17dHlwZTp6MC50eXBlLHN0cm9rZTp6MC5zdHJva2UsbGVuZ3RoOnowLmxlbmd0aH07YnJlYWs7Y2FzZSA3ODp0aGlzLiQ9T3RbS3QtMV07YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9e3RleHQ6T3RbS3RdLHR5cGU6InRleHQifTticmVhaztjYXNlIDgwOnRoaXMuJD17dGV4dDpPdFtLdC0xXS50ZXh0KyIiK090W0t0XSx0eXBlOk90W0t0LTFdLnR5cGV9O2JyZWFrO2Nhc2UgODE6dGhpcy4kPXt0ZXh0Ok90W0t0XSx0eXBlOiJzdHJpbmcifTticmVhaztjYXNlIDgyOmNhc2UgOTc6dGhpcy4kPXt0ZXh0Ok90W0t0XSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgOTQ6dGhpcy4kPXt0ZXh0Ok90W0t0XSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA5NTp0aGlzLiQ9e3RleHQ6T3RbS3QtMV0udGV4dCsiIitPdFtLdF0sdHlwZTpPdFtLdC0xXS50eXBlfTticmVhaztjYXNlIDk2OnRoaXMuJD17dGV4dDpPdFtLdF0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgOTg6dGhpcy4kPU90W0t0LTRdLEJpLmFkZENsYXNzKE90W0t0LTJdLE90W0t0XSk7YnJlYWs7Y2FzZSA5OTp0aGlzLiQ9T3RbS3QtNF0sQmkuc2V0Q2xhc3MoT3RbS3QtMl0sT3RbS3RdKTticmVhaztjYXNlIDEwMDpjYXNlIDEwODp0aGlzLiQ9T3RbS3QtMV0sQmkuc2V0Q2xpY2tFdmVudChPdFtLdC0xXSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTAxOmNhc2UgMTA5OnRoaXMuJD1PdFtLdC0zXSxCaS5zZXRDbGlja0V2ZW50KE90W0t0LTNdLE90W0t0LTJdKSxCaS5zZXRUb29sdGlwKE90W0t0LTNdLE90W0t0XSk7YnJlYWs7Y2FzZSAxMDI6dGhpcy4kPU90W0t0LTJdLEJpLnNldENsaWNrRXZlbnQoT3RbS3QtMl0sT3RbS3QtMV0sT3RbS3RdKTticmVhaztjYXNlIDEwMzp0aGlzLiQ9T3RbS3QtNF0sQmkuc2V0Q2xpY2tFdmVudChPdFtLdC00XSxPdFtLdC0zXSxPdFtLdC0yXSksQmkuc2V0VG9vbHRpcChPdFtLdC00XSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTA0OnRoaXMuJD1PdFtLdC0yXSxCaS5zZXRMaW5rKE90W0t0LTJdLE90W0t0XSk7YnJlYWs7Y2FzZSAxMDU6dGhpcy4kPU90W0t0LTRdLEJpLnNldExpbmsoT3RbS3QtNF0sT3RbS3QtMl0pLEJpLnNldFRvb2x0aXAoT3RbS3QtNF0sT3RbS3RdKTticmVhaztjYXNlIDEwNjp0aGlzLiQ9T3RbS3QtNF0sQmkuc2V0TGluayhPdFtLdC00XSxPdFtLdC0yXSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTA3OnRoaXMuJD1PdFtLdC02XSxCaS5zZXRMaW5rKE90W0t0LTZdLE90W0t0LTRdLE90W0t0XSksQmkuc2V0VG9vbHRpcChPdFtLdC02XSxPdFtLdC0yXSk7YnJlYWs7Y2FzZSAxMTA6dGhpcy4kPU90W0t0LTFdLEJpLnNldExpbmsoT3RbS3QtMV0sT3RbS3RdKTticmVhaztjYXNlIDExMTp0aGlzLiQ9T3RbS3QtM10sQmkuc2V0TGluayhPdFtLdC0zXSxPdFtLdC0yXSksQmkuc2V0VG9vbHRpcChPdFtLdC0zXSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTEyOnRoaXMuJD1PdFtLdC0zXSxCaS5zZXRMaW5rKE90W0t0LTNdLE90W0t0LTJdLE90W0t0XSk7YnJlYWs7Y2FzZSAxMTM6dGhpcy4kPU90W0t0LTVdLEJpLnNldExpbmsoT3RbS3QtNV0sT3RbS3QtNF0sT3RbS3RdKSxCaS5zZXRUb29sdGlwKE90W0t0LTVdLE90W0t0LTJdKTticmVhaztjYXNlIDExNDp0aGlzLiQ9T3RbS3QtNF0sQmkuYWRkVmVydGV4KE90W0t0LTJdLHZvaWQgMCx2b2lkIDAsT3RbS3RdKTticmVhaztjYXNlIDExNTp0aGlzLiQ9T3RbS3QtNF0sQmkudXBkYXRlTGluayhbT3RbS3QtMl1dLE90W0t0XSk7YnJlYWs7Y2FzZSAxMTY6dGhpcy4kPU90W0t0LTRdLEJpLnVwZGF0ZUxpbmsoT3RbS3QtMl0sT3RbS3RdKTticmVhaztjYXNlIDExNzp0aGlzLiQ9T3RbS3QtOF0sQmkudXBkYXRlTGlua0ludGVycG9sYXRlKFtPdFtLdC02XV0sT3RbS3QtMl0pLEJpLnVwZGF0ZUxpbmsoW090W0t0LTZdXSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTE4OnRoaXMuJD1PdFtLdC04XSxCaS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoT3RbS3QtNl0sT3RbS3QtMl0pLEJpLnVwZGF0ZUxpbmsoT3RbS3QtNl0sT3RbS3RdKTticmVhaztjYXNlIDExOTp0aGlzLiQ9T3RbS3QtNl0sQmkudXBkYXRlTGlua0ludGVycG9sYXRlKFtPdFtLdC00XV0sT3RbS3RdKTticmVhaztjYXNlIDEyMDp0aGlzLiQ9T3RbS3QtNl0sQmkudXBkYXRlTGlua0ludGVycG9sYXRlKE90W0t0LTRdLE90W0t0XSk7YnJlYWs7Y2FzZSAxMjE6Y2FzZSAxMjM6dGhpcy4kPVtPdFtLdF1dO2JyZWFrO2Nhc2UgMTIyOmNhc2UgMTI0Ok90W0t0LTJdLnB1c2goT3RbS3RdKSx0aGlzLiQ9T3RbS3QtMl07YnJlYWs7Y2FzZSAxMjY6dGhpcy4kPU90W0t0LTFdK090W0t0XTticmVhaztjYXNlIDE3NDp0aGlzLiQ9T3RbS3RdO2JyZWFrO2Nhc2UgMTc1OnRoaXMuJD1PdFtLdC0xXSsiIitPdFtLdF07YnJlYWs7Y2FzZSAxNzc6dGhpcy4kPU90W0t0LTFdKyIiK090W0t0XTticmVhaztjYXNlIDE3ODp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAxNzk6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJCVCJ9O2JyZWFrO2Nhc2UgMTgwOnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDE4MTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsOTpzLDEwOnUsMTI6ZH0sezE6WzNdfSxpKHAsdix7NTo2fSksezQ6Nyw5OnMsMTA6dSwxMjpkfSx7NDo4LDk6cywxMDp1LDEyOmR9LHsxMzpbMSw5XSwxNDpbMSwxMF19LHsxOlsyLDFdLDY6MTEsNzoxMiw4OmIsOTp5LDEwOlQsMTE6XywyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpBLDMzOjI0LDM0OlAsMzY6UiwzODpGLDQwOjI4LDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4MTplZSw4MjppZSw4MzpvZSw4NDpwZSw4NTpiZSw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVLDExODpGZSwxMTk6UGUsMTIwOmplLDEyMTpJZX0saShwLFsyLDldKSxpKHAsWzIsMTBdKSxpKHAsWzIsMTFdKSx7ODpbMSw1NF0sOTpbMSw1NV0sMTA6U2UsMTU6NTMsMTg6NTZ9LGkoQ2UsWzIsM10pLGkoQ2UsWzIsNF0pLGkoQ2UsWzIsNV0pLGkoQ2UsWzIsNl0pLGkoQ2UsWzIsN10pLGkoQ2UsWzIsOF0pLHs4OmtlLDk6S2UsMTE6RnQsMjE6NTgsMzk6NTksNzA6NjMsNzM6WzEsNjRdLDc1OlsxLDY1XX0sezg6a2UsOTpLZSwxMTpGdCwyMTo2Nn0sezg6a2UsOTpLZSwxMTpGdCwyMTo2N30sezg6a2UsOTpLZSwxMTpGdCwyMTo2OH0sezg6a2UsOTpLZSwxMTpGdCwyMTo2OX0sezg6a2UsOTpLZSwxMTpGdCwyMTo3MH0sezg6a2UsOTpLZSwxMDpbMSw3MV0sMTE6RnQsMjE6NzJ9LGkoQ2UsWzIsMzZdKSx7MzU6WzEsNzNdfSx7Mzc6WzEsNzRdfSxpKENlLFsyLDM5XSksaShOZSxbMiw0Nl0sezE4Ojc1LDEwOlNlfSksezEwOlsxLDc2XX0sezEwOlsxLDc3XX0sezEwOlsxLDc4XX0sezEwOlsxLDc5XX0sezE0OmduLDQyOl90LDU4OkV0LDc3OlsxLDgzXSw4NjpHdCw5MjpbMSw4MF0sOTQ6WzEsODFdLDk4OjgyLDEwMjpsbiwxMDM6eHQsMTA2OlB0LDEwODpRZSwxMTE6RHQsMTEyOmt0LDExMzpPbiwxMTc6ODR9LGkoQ2UsWzIsMTc4XSksaShDZSxbMiwxNzldKSxpKENlLFsyLDE4MF0pLGkoQ2UsWzIsMTgxXSksaShodCxbMiw0N10pLGkoaHQsWzIsNDldLHs0NDpbMSw5Nl19KSxpKHpyLFsyLDY3XSx7MTEwOjEwOSwyOTpbMSw5N10sNDI6aiw0NjpbMSw5OF0sNDg6WzEsOTldLDUwOlsxLDEwMF0sNTI6WzEsMTAxXSw1NDpbMSwxMDJdLDU2OlsxLDEwM10sNTg6Syw2MTpbMSwxMDRdLDYzOlsxLDEwNV0sNjU6WzEsMTA2XSw2NjpbMSwxMDddLDY4OlsxLDEwOF0sODY6YWUsOTk6bmUsMTAyOnNlLDEwMzpkZSwxMDY6WCwxMDg6Z2UsMTExOlcsMTEyOnhlLDExMzpVfSksaSh5dCxbMiwxNzRdKSxpKHl0LFsyLDEzNV0pLGkoeXQsWzIsMTM2XSksaSh5dCxbMiwxMzddKSxpKHl0LFsyLDEzOF0pLGkoeXQsWzIsMTM5XSksaSh5dCxbMiwxNDBdKSxpKHl0LFsyLDE0MV0pLGkoeXQsWzIsMTQyXSksaSh5dCxbMiwxNDNdKSxpKHl0LFsyLDE0NF0pLGkoeXQsWzIsMTQ1XSksaShwLFsyLDEyXSksaShwLFsyLDE4XSksaShwLFsyLDE5XSksezk6WzEsMTEwXX0saShqaSxbMiwyNl0sezE4OjExMSwxMDpTZX0pLGkoQ2UsWzIsMjddKSx7NDA6MTEyLDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSxpKENlLFsyLDQwXSksaShDZSxbMiw0MV0pLGkoQ2UsWzIsNDJdKSxpKHhpLFsyLDcxXSx7NzE6MTEzLDYwOlsxLDExNV0sNzI6WzEsMTE0XX0pLHs3NDoxMTYsNzY6MTE3LDc3OlsxLDExOF0sNzg6WzEsMTE5XSwxMTM6TWEsMTE2OnpzfSxpKFs0Miw1OCw2MCw3Miw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLFsyLDc3XSksaShDZSxbMiwyOF0pLGkoQ2UsWzIsMjldKSxpKENlLFsyLDMwXSksaShDZSxbMiwzMV0pLGkoQ2UsWzIsMzJdKSx7MTA6YW8sMTI6VHIsMTQ6Rm4sMjc6cW4sMjg6MTIyLDMyOlVuLDQyOkF0LDU4Ond0LDczOm9uLDc3OlsxLDEyNF0sNzg6WzEsMTI1XSw4MDoxMzUsODE6Zm4sODI6QW4sODM6b28sODQ6am8sODU6JG8sODY6UGEsODc6d28sODg6MTIzLDEwMjpfcywxMDY6dGwsMTA4OmRhLDExMTpqMCwxMTI6cG0sMTEzOk1sfSxpKFhjLHYsezU6MTQ4fSksaShDZSxbMiwzN10pLGkoQ2UsWzIsMzhdKSxpKE5lLFsyLDQ1XSx7NDI6QmN9KSx7NDI6aiw0NToxNTAsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSx7OTk6WzEsMTUxXSwxMDA6MTUyLDEwMjpbMSwxNTNdfSx7NDI6aiw0NToxNTQsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSx7NDI6aiw0NToxNTUsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSxpKGphLFsyLDEwMF0sezEwOlsxLDE1Nl0sOTM6WzEsMTU3XX0pLHs3NzpbMSwxNThdfSxpKGphLFsyLDEwOF0sezExNzoxNjAsMTA6WzEsMTU5XSwxNDpnbiw0MjpfdCw1ODpFdCw4NjpHdCwxMDI6bG4sMTAzOnh0LDEwNjpQdCwxMDg6UWUsMTExOkR0LDExMjprdCwxMTM6T259KSxpKGphLFsyLDExMF0sezEwOlsxLDE2MV19KSxpKE91LFsyLDE3Nl0pLGkoT3UsWzIsMTYzXSksaShPdSxbMiwxNjRdKSxpKE91LFsyLDE2NV0pLGkoT3UsWzIsMTY2XSksaShPdSxbMiwxNjddKSxpKE91LFsyLDE2OF0pLGkoT3UsWzIsMTY5XSksaShPdSxbMiwxNzBdKSxpKE91LFsyLDE3MV0pLGkoT3UsWzIsMTcyXSksaShPdSxbMiwxNzNdKSx7NDI6aiw0NToxNjIsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSx7MzA6MTYzLDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMwOjE3MSw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHszMDoxNzMsNDg6WzEsMTcyXSw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHszMDoxNzQsNjU6U2EsNzc6UG8sNzg6RmMsNzk6MTY0LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7MzA6MTc1LDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMwOjE3Niw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHsxMDY6WzEsMTc3XX0sezMwOjE3OCw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHszMDoxNzksNjM6WzEsMTgwXSw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHszMDoxODEsNjU6U2EsNzc6UG8sNzg6RmMsNzk6MTY0LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7MzA6MTgyLDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMwOjE4Myw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LGkoeXQsWzIsMTc1XSksaShwLFsyLDIwXSksaShqaSxbMiwyNV0pLGkoTmUsWzIsNDNdLHsxODoxODQsMTA6U2V9KSxpKHhpLFsyLDY4XSx7MTA6WzEsMTg1XX0pLHsxMDpbMSwxODZdfSx7MzA6MTg3LDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezc1OlsxLDE4OF0sNzY6MTg5LDExMzpNYSwxMTY6enN9LGkoa2gsWzIsNzNdKSxpKGtoLFsyLDc1XSksaShraCxbMiw3Nl0pLGkoa2gsWzIsMTYxXSksaShraCxbMiwxNjJdKSx7ODprZSw5OktlLDEwOmFvLDExOkZ0LDEyOlRyLDE0OkZuLDIxOjE5MSwyNzpxbiwyOTpbMSwxOTBdLDMyOlVuLDQyOkF0LDU4Ond0LDczOm9uLDgwOjEzNSw4MTpmbiw4MjpBbiw4Mzpvbyw4NDpqbyw4NTokbyw4NjpQYSw4Nzp3byw4ODoxOTIsMTAyOl9zLDEwNjp0bCwxMDg6ZGEsMTExOmowLDExMjpwbSwxMTM6TWx9LGkobHUsWzIsOTRdKSxpKGx1LFsyLDk2XSksaShsdSxbMiw5N10pLGkobHUsWzIsMTUwXSksaShsdSxbMiwxNTFdKSxpKGx1LFsyLDE1Ml0pLGkobHUsWzIsMTUzXSksaShsdSxbMiwxNTRdKSxpKGx1LFsyLDE1NV0pLGkobHUsWzIsMTU2XSksaShsdSxbMiwxNTddKSxpKGx1LFsyLDE1OF0pLGkobHUsWzIsMTU5XSksaShsdSxbMiwxNjBdKSxpKGx1LFsyLDgzXSksaShsdSxbMiw4NF0pLGkobHUsWzIsODVdKSxpKGx1LFsyLDg2XSksaShsdSxbMiw4N10pLGkobHUsWzIsODhdKSxpKGx1LFsyLDg5XSksaShsdSxbMiw5MF0pLGkobHUsWzIsOTFdKSxpKGx1LFsyLDkyXSksaShsdSxbMiw5M10pLHs2OjExLDc6MTIsODpiLDk6eSwxMDpULDExOl8sMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6QSwzMjpbMSwxOTNdLDMzOjI0LDM0OlAsMzY6UiwzODpGLDQwOjI4LDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4MTplZSw4MjppZSw4MzpvZSw4NDpwZSw4NTpiZSw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVLDExODpGZSwxMTk6UGUsMTIwOmplLDEyMTpJZX0sezEwOlNlLDE4OjE5NH0sezEwOlsxLDE5NV0sNDI6aiw1ODpLLDg2OmFlLDk5Om5lLDEwMjpzZSwxMDM6ZGUsMTA2OlgsMTA4OmdlLDExMDoxMDksMTExOlcsMTEyOnhlLDExMzpVfSx7MTA6WzEsMTk2XX0sezEwOlsxLDE5N10sMTAzOlsxLDE5OF19LGkobzUsWzIsMTIxXSksezEwOlsxLDE5OV0sNDI6aiw1ODpLLDg2OmFlLDk5Om5lLDEwMjpzZSwxMDM6ZGUsMTA2OlgsMTA4OmdlLDExMDoxMDksMTExOlcsMTEyOnhlLDExMzpVfSx7MTA6WzEsMjAwXSw0MjpqLDU4OkssODY6YWUsOTk6bmUsMTAyOnNlLDEwMzpkZSwxMDY6WCwxMDg6Z2UsMTEwOjEwOSwxMTE6VywxMTI6eGUsMTEzOlV9LHs3NzpbMSwyMDFdfSxpKGphLFsyLDEwMl0sezEwOlsxLDIwMl19KSxpKGphLFsyLDEwNF0sezEwOlsxLDIwM119KSx7Nzc6WzEsMjA0XX0saShPdSxbMiwxNzddKSx7Nzc6WzEsMjA1XSw5NTpbMSwyMDZdfSxpKGh0LFsyLDUwXSx7MTEwOjEwOSw0MjpqLDU4OkssODY6YWUsOTk6bmUsMTAyOnNlLDEwMzpkZSwxMDY6WCwxMDg6Z2UsMTExOlcsMTEyOnhlLDExMzpVfSksezMxOlsxLDIwN10sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKFdoLFsyLDc5XSksaShXaCxbMiw4MV0pLGkoV2gsWzIsODJdKSxpKFdoLFsyLDE0Nl0pLGkoV2gsWzIsMTQ3XSksaShXaCxbMiwxNDhdKSxpKFdoLFsyLDE0OV0pLHs0NzpbMSwyMDldLDY1OlNhLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMwOjIxMCw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHs0OTpbMSwyMTFdLDY1OlNhLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezUxOlsxLDIxMl0sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7NTM6WzEsMjEzXSw2NTpTYSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHs1NTpbMSwyMTRdLDY1OlNhLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezU4OlsxLDIxNV19LHs2MjpbMSwyMTZdLDY1OlNhLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezY0OlsxLDIxN10sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7MzA6MjE4LDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMxOlsxLDIxOV0sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7NjU6U2EsNjc6WzEsMjIwXSw2OTpbMSwyMjFdLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezY1OlNhLDY3OlsxLDIyM10sNjk6WzEsMjIyXSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LGkoTmUsWzIsNDRdLHs0MjpCY30pLGkoeGksWzIsNzBdKSxpKHhpLFsyLDY5XSksezYwOlsxLDIyNF0sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKHhpLFsyLDcyXSksaShraCxbMiw3NF0pLHszMDoyMjUsNjU6U2EsNzc6UG8sNzg6RmMsNzk6MTY0LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKFhjLHYsezU6MjI2fSksaShsdSxbMiw5NV0pLGkoQ2UsWzIsMzVdKSx7NDE6MjI3LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSx7MTA6b2QsNTg6R2QsODE6Y2QsODk6MjI4LDEwMjpLZCwxMDQ6MjI5LDEwNToyMzAsMTA2OiRnLDEwNzphcywxMDg6d24sMTA5OlpyfSx7MTA6b2QsNTg6R2QsODE6Y2QsODk6MjM5LDEwMTpbMSwyNDBdLDEwMjpLZCwxMDQ6MjI5LDEwNToyMzAsMTA2OiRnLDEwNzphcywxMDg6d24sMTA5OlpyfSx7MTA6b2QsNTg6R2QsODE6Y2QsODk6MjQxLDEwMTpbMSwyNDJdLDEwMjpLZCwxMDQ6MjI5LDEwNToyMzAsMTA2OiRnLDEwNzphcywxMDg6d24sMTA5OlpyfSx7MTAyOlsxLDI0M119LHsxMDpvZCw1ODpHZCw4MTpjZCw4OToyNDQsMTAyOktkLDEwNDoyMjksMTA1OjIzMCwxMDY6JGcsMTA3OmFzLDEwODp3biwxMDk6WnJ9LHs0MjpqLDQ1OjI0NSw1ODpLLDg2OmFlLDk5Om5lLDEwMjpzZSwxMDM6ZGUsMTA2OlgsMTA4OmdlLDExMDo0MSwxMTE6VywxMTI6eGUsMTEzOlV9LGkoamEsWzIsMTAxXSksezc3OlsxLDI0Nl19LHs3NzpbMSwyNDddLDk1OlsxLDI0OF19LGkoamEsWzIsMTA5XSksaShqYSxbMiwxMTFdLHsxMDpbMSwyNDldfSksaShqYSxbMiwxMTJdKSxpKHpyLFsyLDUxXSksaShXaCxbMiw4MF0pLGkoenIsWzIsNTJdKSx7NDk6WzEsMjUwXSw2NTpTYSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LGkoenIsWzIsNTldKSxpKHpyLFsyLDU0XSksaSh6cixbMiw1NV0pLGkoenIsWzIsNTZdKSx7MTA2OlsxLDI1MV19LGkoenIsWzIsNThdKSxpKHpyLFsyLDYwXSksezY0OlsxLDI1Ml0sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKHpyLFsyLDYyXSksaSh6cixbMiw2M10pLGkoenIsWzIsNjVdKSxpKHpyLFsyLDY0XSksaSh6cixbMiw2Nl0pLGkoWzEwLDQyLDU4LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10sWzIsNzhdKSx7MzE6WzEsMjUzXSw2NTpTYSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHs2OjExLDc6MTIsODpiLDk6eSwxMDpULDExOl8sMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6QSwzMjpbMSwyNTRdLDMzOjI0LDM0OlAsMzY6UiwzODpGLDQwOjI4LDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4MTplZSw4MjppZSw4MzpvZSw4NDpwZSw4NTpiZSw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVLDExODpGZSwxMTk6UGUsMTIwOmplLDEyMTpJZX0saShodCxbMiw0OF0pLGkoamEsWzIsMTE0XSx7MTAzOlppfSksaShudSxbMiwxMjNdLHsxMDU6MjU2LDEwOm9kLDU4OkdkLDgxOmNkLDEwMjpLZCwxMDY6JGcsMTA3OmFzLDEwODp3biwxMDk6WnJ9KSxpKHZ1LFsyLDEyNV0pLGkodnUsWzIsMTI3XSksaSh2dSxbMiwxMjhdKSxpKHZ1LFsyLDEyOV0pLGkodnUsWzIsMTMwXSksaSh2dSxbMiwxMzFdKSxpKHZ1LFsyLDEzMl0pLGkodnUsWzIsMTMzXSksaSh2dSxbMiwxMzRdKSxpKGphLFsyLDExNV0sezEwMzpaaX0pLHsxMDpbMSwyNTddfSxpKGphLFsyLDExNl0sezEwMzpaaX0pLHsxMDpbMSwyNThdfSxpKG81LFsyLDEyMl0pLGkoamEsWzIsOThdLHsxMDM6Wml9KSxpKGphLFsyLDk5XSx7MTEwOjEwOSw0MjpqLDU4OkssODY6YWUsOTk6bmUsMTAyOnNlLDEwMzpkZSwxMDY6WCwxMDg6Z2UsMTExOlcsMTEyOnhlLDExMzpVfSksaShqYSxbMiwxMDNdKSxpKGphLFsyLDEwNV0sezEwOlsxLDI1OV19KSxpKGphLFsyLDEwNl0pLHs5NTpbMSwyNjBdfSx7NDk6WzEsMjYxXX0sezYwOlsxLDI2Ml19LHs2NDpbMSwyNjNdfSx7ODprZSw5OktlLDExOkZ0LDIxOjI2NH0saShDZSxbMiwzNF0pLHsxMDpvZCw1ODpHZCw4MTpjZCwxMDI6S2QsMTA0OjI2NSwxMDU6MjMwLDEwNjokZywxMDc6YXMsMTA4OnduLDEwOTpacn0saSh2dSxbMiwxMjZdKSx7MTQ6Z24sNDI6X3QsNTg6RXQsODY6R3QsOTg6MjY2LDEwMjpsbiwxMDM6eHQsMTA2OlB0LDEwODpRZSwxMTE6RHQsMTEyOmt0LDExMzpPbiwxMTc6ODR9LHsxNDpnbiw0MjpfdCw1ODpFdCw4NjpHdCw5ODoyNjcsMTAyOmxuLDEwMzp4dCwxMDY6UHQsMTA4OlFlLDExMTpEdCwxMTI6a3QsMTEzOk9uLDExNzo4NH0sezk1OlsxLDI2OF19LGkoamEsWzIsMTEzXSksaSh6cixbMiw1M10pLHszMDoyNjksNjU6U2EsNzc6UG8sNzg6RmMsNzk6MTY0LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKHpyLFsyLDYxXSksaShYYyx2LHs1OjI3MH0pLGkobnUsWzIsMTI0XSx7MTA1OjI1NiwxMDpvZCw1ODpHZCw4MTpjZCwxMDI6S2QsMTA2OiRnLDEwNzphcywxMDg6d24sMTA5OlpyfSksaShqYSxbMiwxMTldLHsxMTc6MTYwLDEwOlsxLDI3MV0sMTQ6Z24sNDI6X3QsNTg6RXQsODY6R3QsMTAyOmxuLDEwMzp4dCwxMDY6UHQsMTA4OlFlLDExMTpEdCwxMTI6a3QsMTEzOk9ufSksaShqYSxbMiwxMjBdLHsxMTc6MTYwLDEwOlsxLDI3Ml0sMTQ6Z24sNDI6X3QsNTg6RXQsODY6R3QsMTAyOmxuLDEwMzp4dCwxMDY6UHQsMTA4OlFlLDExMTpEdCwxMTI6a3QsMTEzOk9ufSksaShqYSxbMiwxMDddKSx7MzE6WzEsMjczXSw2NTpTYSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHs2OjExLDc6MTIsODpiLDk6eSwxMDpULDExOl8sMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6QSwzMjpbMSwyNzRdLDMzOjI0LDM0OlAsMzY6UiwzODpGLDQwOjI4LDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4MTplZSw4MjppZSw4MzpvZSw4NDpwZSw4NTpiZSw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVLDExODpGZSwxMTk6UGUsMTIwOmplLDEyMTpJZX0sezEwOm9kLDU4OkdkLDgxOmNkLDg5OjI3NSwxMDI6S2QsMTA0OjIyOSwxMDU6MjMwLDEwNjokZywxMDc6YXMsMTA4OnduLDEwOTpacn0sezEwOm9kLDU4OkdkLDgxOmNkLDg5OjI3NiwxMDI6S2QsMTA0OjIyOSwxMDU6MjMwLDEwNjokZywxMDc6YXMsMTA4OnduLDEwOTpacn0saSh6cixbMiw1N10pLGkoQ2UsWzIsMzNdKSxpKGphLFsyLDExN10sezEwMzpaaX0pLGkoamEsWzIsMTE4XSx7MTAzOlppfSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oV2ksQnMpe2lmKEJzLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoV2kpO2Vsc2V7dmFyIFFhPW5ldyBFcnJvcihXaSk7dGhyb3cgUWEuaGFzaD1CcyxRYX19LHBhcnNlOmZ1bmN0aW9uKFdpKXt2YXIgQnM9dGhpcyxRYT1bMF0sQmk9W10sTnU9W251bGxdLE90PVtdLFczPXRoaXMudGFibGUsS3Q9IiIsejA9MCxCcD0wLFkzPTIsJDk9MSxjNT1PdC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxFaD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHpnPXt5eTp7fX07Zm9yKHZhciBibSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGJtKSYmKHpnLnl5W2JtXT10aGlzLnl5W2JtXSk7RWguc2V0SW5wdXQoV2ksemcueXkpLHpnLnl5LmxleGVyPUVoLHpnLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBFaC55eWxsb2M+InUiJiYoRWgueXlsbG9jPXt9KTt2YXIgejk9RWgueXlsbG9jO090LnB1c2goejkpO3ZhciBtbT1FaC5vcHRpb25zJiZFaC5vcHRpb25zLnJhbmdlczt0eXBlb2YgemcueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9emcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gdTUoKXt2YXIgRnA7cmV0dXJuIEZwPUJpLnBvcCgpfHxFaC5sZXgoKXx8JDksdHlwZW9mIEZwIT0ibnVtYmVyIiYmKEZwIGluc3RhbmNlb2YgQXJyYXkmJihCaT1GcCxGcD1CaS5wb3AoKSksRnA9QnMuc3ltYm9sc19bRnBdfHxGcCksRnB9Zm9yKHZhciB5MSx1ZCxsZCxxOSxWdj17fSxZNyxHMixYNyxsNTs7KXtpZih1ZD1RYVtRYS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t1ZF0/bGQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t1ZF06KCh5MT09PW51bGx8fHR5cGVvZiB5MT4idSIpJiYoeTE9dTUoKSksbGQ9VzNbdWRdJiZXM1t1ZF1beTFdKSx0eXBlb2YgbGQ+InUifHwhbGQubGVuZ3RofHwhbGRbMF0pe3ZhciBYMz0iIjtsNT1bXTtmb3IoWTcgaW4gVzNbdWRdKXRoaXMudGVybWluYWxzX1tZN10mJlk3PlkzJiZsNS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bWTddKyInIik7RWguc2hvd1Bvc2l0aW9uP1gzPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHowKzEpK2A6CmArRWguc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtsNS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3kxXXx8eTEpKyInIjpYMz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh6MCsxKSsiOiBVbmV4cGVjdGVkICIrKHkxPT0kOT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t5MV18fHkxKSsiJyIpLHRoaXMucGFyc2VFcnJvcihYMyx7dGV4dDpFaC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beTFdfHx5MSxsaW5lOkVoLnl5bGluZW5vLGxvYzp6OSxleHBlY3RlZDpsNX0pfWlmKGxkWzBdaW5zdGFuY2VvZiBBcnJheSYmbGQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit1ZCsiLCB0b2tlbjogIit5MSk7c3dpdGNoKGxkWzBdKXtjYXNlIDE6UWEucHVzaCh5MSksTnUucHVzaChFaC55eXRleHQpLE90LnB1c2goRWgueXlsbG9jKSxRYS5wdXNoKGxkWzFdKSx5MT1udWxsLEJwPUVoLnl5bGVuZyxLdD1FaC55eXRleHQsejA9RWgueXlsaW5lbm8sejk9RWgueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihHMj10aGlzLnByb2R1Y3Rpb25zX1tsZFsxXV1bMV0sVnYuJD1OdVtOdS5sZW5ndGgtRzJdLFZ2Ll8kPXtmaXJzdF9saW5lOk90W090Lmxlbmd0aC0oRzJ8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpPdFtPdC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpPdFtPdC5sZW5ndGgtKEcyfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOk90W090Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbW0mJihWdi5fJC5yYW5nZT1bT3RbT3QubGVuZ3RoLShHMnx8MSldLnJhbmdlWzBdLE90W090Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLHE5PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShWdixbS3QsQnAsejAsemcueXksbGRbMV0sTnUsT3RdLmNvbmNhdChjNSkpLHR5cGVvZiBxOTwidSIpcmV0dXJuIHE5O0cyJiYoUWE9UWEuc2xpY2UoMCwtMSpHMioyKSxOdT1OdS5zbGljZSgwLC0xKkcyKSxPdD1PdC5zbGljZSgwLC0xKkcyKSksUWEucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tsZFsxXV1bMF0pLE51LnB1c2goVnYuJCksT3QucHVzaChWdi5fJCksWDc9VzNbUWFbUWEubGVuZ3RoLTJdXVtRYVtRYS5sZW5ndGgtMV1dLFFhLnB1c2goWDcpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxZaD1mdW5jdGlvbigpe3ZhciAkMD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihCcyxRYSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihCcyxRYSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoQnMpfSxzZXRJbnB1dDpmdW5jdGlvbihXaSxCcyl7cmV0dXJuIHRoaXMueXk9QnN8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PVdpLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBXaT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9V2ksdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVdpLHRoaXMubWF0Y2hlZCs9V2k7dmFyIEJzPVdpLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gQnM/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFdpfSx1bnB1dDpmdW5jdGlvbihXaSl7dmFyIEJzPVdpLmxlbmd0aCxRYT1XaS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVdpK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1CcyksdGhpcy5vZmZzZXQtPUJzO3ZhciBCaT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxRYS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVFhLmxlbmd0aC0xKTt2YXIgTnU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlFhPyhRYS5sZW5ndGg9PT1CaS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0JpW0JpLmxlbmd0aC1RYS5sZW5ndGhdLmxlbmd0aC1RYVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUJzfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W051WzBdLE51WzBdK3RoaXMueXlsZW5nLUJzXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oV2kpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShXaSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgV2k9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihXaS5sZW5ndGg+MjA/Ii4uLiI6IiIpK1dpLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFdpPXRoaXMubWF0Y2g7cmV0dXJuIFdpLmxlbmd0aDwyMCYmKFdpKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1XaS5sZW5ndGgpKSwoV2kuc3Vic3RyKDAsMjApKyhXaS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFdpPXRoaXMucGFzdElucHV0KCksQnM9bmV3IEFycmF5KFdpLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFdpK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtCcysiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oV2ksQnMpe3ZhciBRYSxCaSxOdTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoTnU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoTnUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQmk9V2lbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEJpJiYodGhpcy55eWxpbmVubys9QmkubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Qmk/QmlbQmkubGVuZ3RoLTFdLmxlbmd0aC1CaVtCaS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitXaVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1XaVswXSx0aGlzLm1hdGNoKz1XaVswXSx0aGlzLm1hdGNoZXM9V2ksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoV2lbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVdpWzBdLFFhPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEJzLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLFFhKXJldHVybiBRYTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgT3QgaW4gTnUpdGhpc1tPdF09TnVbT3RdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFdpLEJzLFFhLEJpO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIE51PXRoaXMuX2N1cnJlbnRSdWxlcygpLE90PTA7T3Q8TnUubGVuZ3RoO090KyspaWYoUWE9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tOdVtPdF1dKSxRYSYmKCFCc3x8UWFbMF0ubGVuZ3RoPkJzWzBdLmxlbmd0aCkpe2lmKEJzPVFhLEJpPU90LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFdpPXRoaXMudGVzdF9tYXRjaChRYSxOdVtPdF0pLFdpIT09ITEpcmV0dXJuIFdpO2lmKHRoaXMuX2JhY2t0cmFjayl7QnM9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gQnM/KFdpPXRoaXMudGVzdF9tYXRjaChCcyxOdVtCaV0pLFdpIT09ITE/V2k6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBCcz10aGlzLm5leHQoKTtyZXR1cm4gQnN8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKEJzKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goQnMpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBCcz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBCcz4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKEJzKXtyZXR1cm4gQnM9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhCc3x8MCksQnM+PTA/dGhpcy5jb25kaXRpb25TdGFja1tCc106IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oQnMpe3RoaXMuYmVnaW4oQnMpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEJzLFFhLEJpLE51KXtzd2l0Y2goQmkpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzQ7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNjtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSA4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIDkyO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuIDkzO2Nhc2UgMTM6cmV0dXJuIk1EX1NUUiI7Y2FzZSAxNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNTp0aGlzLmJlZ2luKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDE2OnJldHVybiJTVFIiO2Nhc2UgMTc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTg6dGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgMTk6cmV0dXJuIDgxO2Nhc2UgMjA6cmV0dXJuIDk5O2Nhc2UgMjE6cmV0dXJuIDgyO2Nhc2UgMjI6cmV0dXJuIDEwMTtjYXNlIDIzOnJldHVybiA4MztjYXNlIDI0OnJldHVybiA4NDtjYXNlIDI1OnJldHVybiA5NDtjYXNlIDI2OnRoaXMuYmVnaW4oImNsaWNrIik7YnJlYWs7Y2FzZSAyNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyODpyZXR1cm4gODU7Y2FzZSAyOTpyZXR1cm4gQnMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMDpyZXR1cm4gQnMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMTpyZXR1cm4gQnMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMjpyZXR1cm4gMjc7Y2FzZSAzMzpyZXR1cm4gMzI7Y2FzZSAzNDpyZXR1cm4gOTU7Y2FzZSAzNTpyZXR1cm4gOTU7Y2FzZSAzNjpyZXR1cm4gOTU7Y2FzZSAzNzpyZXR1cm4gOTU7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDEzO2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ5OnJldHVybiAxMTg7Y2FzZSA1MDpyZXR1cm4gMTE5O2Nhc2UgNTE6cmV0dXJuIDEyMDtjYXNlIDUyOnJldHVybiAxMjE7Y2FzZSA1MzpyZXR1cm4gMTAyO2Nhc2UgNTQ6cmV0dXJuIDEwODtjYXNlIDU1OnJldHVybiA0NDtjYXNlIDU2OnJldHVybiA1ODtjYXNlIDU3OnJldHVybiA0MjtjYXNlIDU4OnJldHVybiA4O2Nhc2UgNTk6cmV0dXJuIDEwMztjYXNlIDYwOnJldHVybiAxMTI7Y2FzZSA2MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDc1O2Nhc2UgNjI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJlZGdlVGV4dCIpLDczO2Nhc2UgNjM6cmV0dXJuIDExNjtjYXNlIDY0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzU7Y2FzZSA2NTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRoaWNrRWRnZVRleHQiKSw3MztjYXNlIDY2OnJldHVybiAxMTY7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDc1O2Nhc2UgNjg6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkb3R0ZWRFZGdlVGV4dCIpLDczO2Nhc2UgNjk6cmV0dXJuIDExNjtjYXNlIDcwOnJldHVybiA3NTtjYXNlIDcxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTE7Y2FzZSA3MjpyZXR1cm4iVEVYVCI7Y2FzZSA3MzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVsbGlwc2VUZXh0IiksNTA7Y2FzZSA3NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDUzO2Nhc2UgNzU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNTI7Y2FzZSA3NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDU1O2Nhc2UgNzc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNTQ7Y2FzZSA3ODpyZXR1cm4gNTY7Y2FzZSA3OTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2NTtjYXNlIDgwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjI7Y2FzZSA4MTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2MTtjYXNlIDgyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDc7Y2FzZSA4MzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw0NjtjYXNlIDg0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjc7Y2FzZSA4NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDY5O2Nhc2UgODY6cmV0dXJuIDExNDtjYXNlIDg3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidHJhcFRleHQiKSw2NjtjYXNlIDg4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidHJhcFRleHQiKSw2ODtjYXNlIDg5OnJldHVybiAxMTU7Y2FzZSA5MDpyZXR1cm4gNjU7Y2FzZSA5MTpyZXR1cm4gODc7Y2FzZSA5MjpyZXR1cm4iU0VQIjtjYXNlIDkzOnJldHVybiA4NjtjYXNlIDk0OnJldHVybiAxMTI7Y2FzZSA5NTpyZXR1cm4gMTA4O2Nhc2UgOTY6cmV0dXJuIDQyO2Nhc2UgOTc6cmV0dXJuIDEwNjtjYXNlIDk4OnJldHVybiAxMTE7Y2FzZSA5OTpyZXR1cm4gMTEzO2Nhc2UgMTAwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjA7Y2FzZSAxMDE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjA7Y2FzZSAxMDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0OTtjYXNlIDEwMzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw0ODtjYXNlIDEwNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDMxO2Nhc2UgMTA1OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDI5O2Nhc2UgMTA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjQ7Y2FzZSAxMDc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjM7Y2FzZSAxMDg6cmV0dXJuIlRFWFQiO2Nhc2UgMTA5OnJldHVybiJRVU9URSI7Y2FzZSAxMTA6cmV0dXJuIDk7Y2FzZSAxMTE6cmV0dXJuIDEwO2Nhc2UgMTEyOnJldHVybiAxMX19LHJ1bGVzOlsvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl1bYF0pLywvXig/OlteIl0rKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86c3R5bGVcYikvLC9eKD86ZGVmYXVsdFxiKS8sL14oPzpsaW5rU3R5bGVcYikvLC9eKD86aW50ZXJwb2xhdGVcYikvLC9eKD86Y2xhc3NEZWZcYikvLC9eKD86Y2xhc3NcYikvLC9eKD86aHJlZltcc10pLywvXig/OmNsaWNrW1xzXSspLywvXig/Oltcc1xuXSkvLC9eKD86W15cc1xuXSopLywvXig/OmZsb3djaGFydC1lbGtcYikvLC9eKD86Z3JhcGhcYikvLC9eKD86Zmxvd2NoYXJ0XGIpLywvXig/OnN1YmdyYXBoXGIpLywvXig/OmVuZFxiXHMqKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/Oihccj9cbikqXHMqXG4pLywvXig/OlxzKkxSXGIpLywvXig/OlxzKlJMXGIpLywvXig/OlxzKlRCXGIpLywvXig/OlxzKkJUXGIpLywvXig/OlxzKlREXGIpLywvXig/OlxzKkJSXGIpLywvXig/OlxzKjwpLywvXig/OlxzKj4pLywvXig/OlxzKlxeKS8sL14oPzpccyp2XGIpLywvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OlswLTldKykvLC9eKD86IykvLC9eKD86Ojo6KS8sL14oPzo6KS8sL14oPzomKS8sL14oPzo7KS8sL14oPzosKS8sL14oPzpcKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT8tLVxzKikvLC9eKD86W14tXXwtKD8hLSkrKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpbXj1dfD0oPyEpKS8sL14oPzpccypbeG88XT8tP1wuKy1beG8+XT9ccyopLywvXig/OlxzKlt4bzxdPy1cLlxzKikvLC9eKD86W15cLl18XC4oPyEpKS8sL14oPzpccyp+fltcfl0rXHMqKS8sL14oPzpbLS9cKV1bXCldKS8sL14oPzpbXlwoXClcW1xdXHtcfV18IVwpKykvLC9eKD86XCgtKS8sL14oPzpcXVwpKS8sL14oPzpcKFxbKS8sL14oPzpcXVxdKS8sL14oPzpcW1xbKS8sL14oPzpcW1x8KS8sL14oPzo+KS8sL14oPzpcKVxdKS8sL14oPzpcW1woKS8sL14oPzpcKVwpXCkpLywvXig/OlwoXChcKCkvLC9eKD86W1xcKD89XF0pXVtcXV0pLywvXig/OlwvKD89XF0pXF0pLywvXig/OlwvKD8hXF0pfFxcKD8hXF0pfFteXFxcW1xdXChcKVx7XH1cL10rKS8sL14oPzpcW1wvKS8sL14oPzpcW1xcKS8sL14oPzo8KS8sL14oPzo+KS8sL14oPzpcXikvLC9eKD86XFxcfCkvLC9eKD86dlxiKS8sL14oPzpcKikvLC9eKD86IykvLC9eKD86JikvLC9eKD86KFtBLVphLXowLTkhIlwjJCUmJyorXC5gP1xcX1wvXXwtKD89W15cPlwtXC5dKXwoPyEpKSspLywvXig/Oi0pLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHwpLywvXig/Olx8KS8sL14oPzpcKSkvLC9eKD86XCgpLywvXig/OlxdKS8sL14oPzpcWykvLC9eKD86KFx9KSkvLC9eKD86XHspLywvXig/OlteXFtcXVwoXClce1x9XHxcIl0rKS8sL14oPzoiKS8sL14oPzooXHI/XG4pKykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7Y2FsbGJhY2thcmdzOntydWxlczpbMTEsMTIsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrbmFtZTp7cnVsZXM6WzgsOSwxMCwxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzE1LDE4LDI3LDI4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxkb3R0ZWRFZGdlVGV4dDp7cnVsZXM6WzE1LDE4LDY3LDY5LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSx0aGlja0VkZ2VUZXh0OntydWxlczpbMTUsMTgsNjQsNjYsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGVkZ2VUZXh0OntydWxlczpbMTUsMTgsNjEsNjMsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHRyYXBUZXh0OntydWxlczpbMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODQsODUsODYsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGVsbGlwc2VUZXh0OntydWxlczpbMTUsMTgsNzAsNzEsNzIsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHRleHQ6e3J1bGVzOlsxNSwxOCw3MCw3Myw3NCw3NSw3Niw3Nyw4MCw4MSw4Miw4Myw4Nyw4OCwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOF0saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOlsxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMTUsMTgsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDYsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzMsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzEsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzEzLDE0LDE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxNSwxNiwxNywxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsMTUsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjQsNjUsNjcsNjgsNzAsNzMsNzUsNzcsNzgsNzksODEsODMsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAxLDEwMywxMDUsMTA3LDEwOSwxMTAsMTExLDExMl0saW5jbHVzaXZlOiEwfX19O3JldHVybiAkMH0oKTtEbC5sZXhlcj1ZaDtmdW5jdGlvbiB3MSgpe3RoaXMueXk9e319cmV0dXJuIHcxLnByb3RvdHlwZT1EbCxEbC5QYXJzZXI9dzEsbmV3IHcxfSgpO1ViZS5wYXJzZXI9VWJlO2NvbnN0IEdiZT1VYmUseVV0PSJmbG93Y2hhcnQtIjtsZXQgT3FlPTAsQkQ9cXQoKSxvaD17fSx6Mz1bXSxGRD17fSxSNz1bXSxJUT17fSxPUT17fSxOUT0wLEtiZT0hMCwkdixQUSxCUT1bXTtjb25zdCBGUT1pPT5jaS5zYW5pdGl6ZVRleHQoaSxCRCksbVI9ZnVuY3Rpb24oaSl7Y29uc3Qgcz1PYmplY3Qua2V5cyhvaCk7Zm9yKGNvbnN0IHUgb2YgcylpZihvaFt1XS5pZD09PWkpcmV0dXJuIG9oW3VdLmRvbUlkO3JldHVybiBpfSxOcWU9ZnVuY3Rpb24oaSxzLHUsZCxwLHYsYj17fSl7bGV0IHksVD1pO1QhPT12b2lkIDAmJlQudHJpbSgpLmxlbmd0aCE9PTAmJihvaFtUXT09PXZvaWQgMCYmKG9oW1RdPXtpZDpULGxhYmVsVHlwZToidGV4dCIsZG9tSWQ6eVV0K1QrIi0iK09xZSxzdHlsZXM6W10sY2xhc3NlczpbXX0pLE9xZSsrLHMhPT12b2lkIDA/KEJEPXF0KCkseT1GUShzLnRleHQudHJpbSgpKSxvaFtUXS5sYWJlbFR5cGU9cy50eXBlLHlbMF09PT0nIicmJnlbeS5sZW5ndGgtMV09PT0nIicmJih5PXkuc3Vic3RyaW5nKDEseS5sZW5ndGgtMSkpLG9oW1RdLnRleHQ9eSk6b2hbVF0udGV4dD09PXZvaWQgMCYmKG9oW1RdLnRleHQ9aSksdSE9PXZvaWQgMCYmKG9oW1RdLnR5cGU9dSksZCE9bnVsbCYmZC5mb3JFYWNoKGZ1bmN0aW9uKF8pe29oW1RdLnN0eWxlcy5wdXNoKF8pfSkscCE9bnVsbCYmcC5mb3JFYWNoKGZ1bmN0aW9uKF8pe29oW1RdLmNsYXNzZXMucHVzaChfKX0pLHYhPT12b2lkIDAmJihvaFtUXS5kaXI9diksb2hbVF0ucHJvcHM9PT12b2lkIDA/b2hbVF0ucHJvcHM9YjpiIT09dm9pZCAwJiZPYmplY3QuYXNzaWduKG9oW1RdLnByb3BzLGIpKX0sUHFlPWZ1bmN0aW9uKGkscyx1KXtjb25zdCB2PXtzdGFydDppLGVuZDpzLHR5cGU6dm9pZCAwLHRleHQ6IiIsbGFiZWxUeXBlOiJ0ZXh0In07WGUuaW5mbygiYWJjNzggR290IGVkZ2UuLi4iLHYpO2NvbnN0IGI9dS50ZXh0O2lmKGIhPT12b2lkIDAmJih2LnRleHQ9RlEoYi50ZXh0LnRyaW0oKSksdi50ZXh0WzBdPT09JyInJiZ2LnRleHRbdi50ZXh0Lmxlbmd0aC0xXT09PSciJyYmKHYudGV4dD12LnRleHQuc3Vic3RyaW5nKDEsdi50ZXh0Lmxlbmd0aC0xKSksdi5sYWJlbFR5cGU9Yi50eXBlKSx1IT09dm9pZCAwJiYodi50eXBlPXUudHlwZSx2LnN0cm9rZT11LnN0cm9rZSx2Lmxlbmd0aD11Lmxlbmd0aCksKHY9PW51bGw/dm9pZCAwOnYubGVuZ3RoKT4xMCYmKHYubGVuZ3RoPTEwKSx6My5sZW5ndGg8KEJELm1heEVkZ2VzPz81MDApKVhlLmluZm8oImFiYzc4IHB1c2hpbmcgZWRnZS4uLiIpLHozLnB1c2godik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEVkZ2UgbGltaXQgZXhjZWVkZWQuICR7ejMubGVuZ3RofSBlZGdlcyBmb3VuZCwgYnV0IHRoZSBsaW1pdCBpcyAke0JELm1heEVkZ2VzfS4KCkluaXRpYWxpemUgbWVybWFpZCB3aXRoIG1heEVkZ2VzIHNldCB0byBhIGhpZ2hlciBudW1iZXIgdG8gYWxsb3cgbW9yZSBlZGdlcy4KWW91IGNhbm5vdCBzZXQgdGhpcyBjb25maWcgdmlhIGNvbmZpZ3VyYXRpb24gaW5zaWRlIHRoZSBkaWFncmFtIGFzIGl0IGlzIGEgc2VjdXJlIGNvbmZpZy4KWW91IGhhdmUgdG8gY2FsbCBtZXJtYWlkLmluaXRpYWxpemUuYCl9LEJxZT1mdW5jdGlvbihpLHMsdSl7WGUuaW5mbygiYWRkTGluayAoYWJjNzgpIixpLHMsdSk7bGV0IGQscDtmb3IoZD0wO2Q8aS5sZW5ndGg7ZCsrKWZvcihwPTA7cDxzLmxlbmd0aDtwKyspUHFlKGlbZF0sc1twXSx1KX0sRnFlPWZ1bmN0aW9uKGkscyl7aS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3U9PT0iZGVmYXVsdCI/ejMuZGVmYXVsdEludGVycG9sYXRlPXM6ejNbdV0uaW50ZXJwb2xhdGU9c30pfSxScWU9ZnVuY3Rpb24oaSxzKXtpLmZvckVhY2goZnVuY3Rpb24odSl7aWYodT49ejMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVGhlIGluZGV4ICR7dX0gZm9yIGxpbmtTdHlsZSBpcyBvdXQgb2YgYm91bmRzLiBWYWxpZCBpbmRpY2VzIGZvciBsaW5rU3R5bGUgYXJlIGJldHdlZW4gMCBhbmQgJHt6My5sZW5ndGgtMX0uIChIZWxwOiBFbnN1cmUgdGhhdCB0aGUgaW5kZXggaXMgd2l0aGluIHRoZSByYW5nZSBvZiBleGlzdGluZyBlZGdlcy4pYCk7dT09PSJkZWZhdWx0Ij96My5kZWZhdWx0U3R5bGU9czooQW8uaXNTdWJzdHJpbmdJbkFycmF5KCJmaWxsIixzKT09PS0xJiZzLnB1c2goImZpbGw6bm9uZSIpLHozW3VdLnN0eWxlPXMpfSl9LGpxZT1mdW5jdGlvbihpLHMpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe0ZEW3VdPT09dm9pZCAwJiYoRkRbdV09e2lkOnUsc3R5bGVzOltdLHRleHRTdHlsZXM6W119KSxzIT1udWxsJiZzLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoZC5tYXRjaCgiY29sb3IiKSl7Y29uc3QgcD1kLnJlcGxhY2UoImZpbGwiLCJiZ0ZpbGwiKS5yZXBsYWNlKCJjb2xvciIsImZpbGwiKTtGRFt1XS50ZXh0U3R5bGVzLnB1c2gocCl9RkRbdV0uc3R5bGVzLnB1c2goZCl9KX0pfSwkcWU9ZnVuY3Rpb24oaSl7JHY9aSwkdi5tYXRjaCgvLio8LykmJigkdj0iUkwiKSwkdi5tYXRjaCgvLipcXi8pJiYoJHY9IkJUIiksJHYubWF0Y2goLy4qPi8pJiYoJHY9IkxSIiksJHYubWF0Y2goLy4qdi8pJiYoJHY9IlRCIiksJHY9PT0iVEQiJiYoJHY9IlRCIil9LFJRPWZ1bmN0aW9uKGkscyl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odSl7bGV0IGQ9dTtvaFtkXSE9PXZvaWQgMCYmb2hbZF0uY2xhc3Nlcy5wdXNoKHMpLElRW2RdIT09dm9pZCAwJiZJUVtkXS5jbGFzc2VzLnB1c2gocyl9KX0seFV0PWZ1bmN0aW9uKGkscyl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odSl7cyE9PXZvaWQgMCYmKE9RW1BRPT09Imdlbi0xIj9tUih1KTp1XT1GUShzKSl9KX0sa1V0PWZ1bmN0aW9uKGkscyx1KXtsZXQgZD1tUihpKTtpZihxdCgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UifHxzPT09dm9pZCAwKXJldHVybjtsZXQgcD1bXTtpZih0eXBlb2YgdT09InN0cmluZyIpe3A9dS5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IobGV0IHY9MDt2PHAubGVuZ3RoO3YrKyl7bGV0IGI9cFt2XS50cmltKCk7Yi5jaGFyQXQoMCk9PT0nIicmJmIuY2hhckF0KGIubGVuZ3RoLTEpPT09JyInJiYoYj1iLnN1YnN0cigxLGIubGVuZ3RoLTIpKSxwW3ZdPWJ9fXAubGVuZ3RoPT09MCYmcC5wdXNoKGkpLG9oW2ldIT09dm9pZCAwJiYob2hbaV0uaGF2ZUNhbGxiYWNrPSEwLEJRLnB1c2goZnVuY3Rpb24oKXtjb25zdCB2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtkfSJdYCk7diE9PW51bGwmJnYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7QW8ucnVuRnVuYyhzLC4uLnApfSwhMSl9KSl9LHpxZT1mdW5jdGlvbihpLHMsdSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7b2hbZF0hPT12b2lkIDAmJihvaFtkXS5saW5rPUFvLmZvcm1hdFVybChzLEJEKSxvaFtkXS5saW5rVGFyZ2V0PXUpfSksUlEoaSwiY2xpY2thYmxlIil9LHFxZT1mdW5jdGlvbihpKXtpZihPUS5oYXNPd25Qcm9wZXJ0eShpKSlyZXR1cm4gT1FbaV19LEhxZT1mdW5jdGlvbihpLHMsdSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7a1V0KGQscyx1KX0pLFJRKGksImNsaWNrYWJsZSIpfSxWcWU9ZnVuY3Rpb24oaSl7QlEuZm9yRWFjaChmdW5jdGlvbihzKXtzKGkpfSl9LFVxZT1mdW5jdGlvbigpe3JldHVybiAkdi50cmltKCl9LEdxZT1mdW5jdGlvbigpe3JldHVybiBvaH0sS3FlPWZ1bmN0aW9uKCl7cmV0dXJuIHozfSxXcWU9ZnVuY3Rpb24oKXtyZXR1cm4gRkR9LFlxZT1mdW5jdGlvbihpKXtsZXQgcz1JcigiLm1lcm1haWRUb29sdGlwIik7KHMuX2dyb3Vwc3x8cylbMF1bMF09PT1udWxsJiYocz1JcigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksSXIoaSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgcD1Jcih0aGlzKTtpZihwLmF0dHIoInRpdGxlIik9PT1udWxsKXJldHVybjtjb25zdCBiPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cy50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45Iikscy50ZXh0KHAuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK2IubGVmdCsoYi5yaWdodC1iLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrYi5ib3R0b20rInB4Iikscy5odG1sKHMuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSxwLmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7cy50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCksSXIodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pfTtCUS5wdXNoKFlxZSk7Y29uc3QgWHFlPWZ1bmN0aW9uKGk9Imdlbi0xIil7b2g9e30sRkQ9e30sejM9W10sQlE9W1lxZV0sUjc9W10sSVE9e30sTlE9MCxPUT17fSxLYmU9ITAsUFE9aSxCRD1xdCgpLFBnKCl9LFFxZT1pPT57UFE9aXx8Imdlbi0yIn0sSnFlPWZ1bmN0aW9uKCl7cmV0dXJuImZpbGw6I2ZmYTtzdHJva2U6ICNmNjY7IHN0cm9rZS13aWR0aDogM3B4OyBzdHJva2UtZGFzaGFycmF5OiA1LCA1O2ZpbGw6I2ZmYTtzdHJva2U6ICM2NjY7In0sWnFlPWZ1bmN0aW9uKGkscyx1KXtsZXQgZD1pLnRleHQudHJpbSgpLHA9dS50ZXh0O2k9PT11JiZ1LnRleHQubWF0Y2goL1xzLykmJihkPXZvaWQgMCk7ZnVuY3Rpb24gdihBKXtjb25zdCBQPXtib29sZWFuOnt9LG51bWJlcjp7fSxzdHJpbmc6e319LFI9W107bGV0IEY7cmV0dXJue25vZGVMaXN0OkEuZmlsdGVyKGZ1bmN0aW9uKEspe2NvbnN0IGVlPXR5cGVvZiBLO3JldHVybiBLLnN0bXQmJksuc3RtdD09PSJkaXIiPyhGPUsudmFsdWUsITEpOksudHJpbSgpPT09IiI/ITE6ZWUgaW4gUD9QW2VlXS5oYXNPd25Qcm9wZXJ0eShLKT8hMTpQW2VlXVtLXT0hMDpSLmluY2x1ZGVzKEspPyExOlIucHVzaChLKX0pLGRpcjpGfX1sZXQgYj1bXTtjb25zdHtub2RlTGlzdDp5LGRpcjpUfT12KGIuY29uY2F0LmFwcGx5KGIscykpO2lmKGI9eSxQUT09PSJnZW4tMSIpZm9yKGxldCBBPTA7QTxiLmxlbmd0aDtBKyspYltBXT1tUihiW0FdKTtkPWR8fCJzdWJHcmFwaCIrTlEscD1wfHwiIixwPUZRKHApLE5RPU5RKzE7Y29uc3QgXz17aWQ6ZCxub2RlczpiLHRpdGxlOnAudHJpbSgpLGNsYXNzZXM6W10sZGlyOlQsbGFiZWxUeXBlOnUudHlwZX07cmV0dXJuIFhlLmluZm8oIkFkZGluZyIsXy5pZCxfLm5vZGVzLF8uZGlyKSxfLm5vZGVzPWNIZShfLFI3KS5ub2RlcyxSNy5wdXNoKF8pLElRW2RdPV8sZH0sRVV0PWZ1bmN0aW9uKGkpe2Zvcihjb25zdFtzLHVdb2YgUjcuZW50cmllcygpKWlmKHUuaWQ9PT1pKXJldHVybiBzO3JldHVybi0xfTtsZXQgdlI9LTE7Y29uc3QgZUhlPVtdLHRIZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9Ujdbc10ubm9kZXM7aWYodlI9dlIrMSx2Uj4yZTMpcmV0dXJuO2lmKGVIZVt2Ul09cyxSN1tzXS5pZD09PWkpcmV0dXJue3Jlc3VsdDohMCxjb3VudDowfTtsZXQgZD0wLHA9MTtmb3IoO2Q8dS5sZW5ndGg7KXtjb25zdCB2PUVVdCh1W2RdKTtpZih2Pj0wKXtjb25zdCBiPXRIZShpLHYpO2lmKGIucmVzdWx0KXJldHVybntyZXN1bHQ6ITAsY291bnQ6cCtiLmNvdW50fTtwPXArYi5jb3VudH1kPWQrMX1yZXR1cm57cmVzdWx0OiExLGNvdW50OnB9fSxuSGU9ZnVuY3Rpb24oaSl7cmV0dXJuIGVIZVtpXX0sckhlPWZ1bmN0aW9uKCl7dlI9LTEsUjcubGVuZ3RoPjAmJnRIZSgibm9uZSIsUjcubGVuZ3RoLTEpfSxpSGU9ZnVuY3Rpb24oKXtyZXR1cm4gUjd9LHNIZT0oKT0+S2JlPyhLYmU9ITEsITApOiExLFRVdD1pPT57bGV0IHM9aS50cmltKCksdT0iYXJyb3dfb3BlbiI7c3dpdGNoKHNbMF0pe2Nhc2UiPCI6dT0iYXJyb3dfcG9pbnQiLHM9cy5zbGljZSgxKTticmVhaztjYXNlIngiOnU9ImFycm93X2Nyb3NzIixzPXMuc2xpY2UoMSk7YnJlYWs7Y2FzZSJvIjp1PSJhcnJvd19jaXJjbGUiLHM9cy5zbGljZSgxKTticmVha31sZXQgZD0ibm9ybWFsIjtyZXR1cm4gcy5pbmNsdWRlcygiPSIpJiYoZD0idGhpY2siKSxzLmluY2x1ZGVzKCIuIikmJihkPSJkb3R0ZWQiKSx7dHlwZTp1LHN0cm9rZTpkfX0sQ1V0PShpLHMpPT57Y29uc3QgdT1zLmxlbmd0aDtsZXQgZD0wO2ZvcihsZXQgcD0wO3A8dTsrK3Apc1twXT09PWkmJisrZDtyZXR1cm4gZH0sU1V0PWk9Pntjb25zdCBzPWkudHJpbSgpO2xldCB1PXMuc2xpY2UoMCwtMSksZD0iYXJyb3dfb3BlbiI7c3dpdGNoKHMuc2xpY2UoLTEpKXtjYXNlIngiOmQ9ImFycm93X2Nyb3NzIixzWzBdPT09IngiJiYoZD0iZG91YmxlXyIrZCx1PXUuc2xpY2UoMSkpO2JyZWFrO2Nhc2UiPiI6ZD0iYXJyb3dfcG9pbnQiLHNbMF09PT0iPCImJihkPSJkb3VibGVfIitkLHU9dS5zbGljZSgxKSk7YnJlYWs7Y2FzZSJvIjpkPSJhcnJvd19jaXJjbGUiLHNbMF09PT0ibyImJihkPSJkb3VibGVfIitkLHU9dS5zbGljZSgxKSk7YnJlYWt9bGV0IHA9Im5vcm1hbCIsdj11Lmxlbmd0aC0xO3VbMF09PT0iPSImJihwPSJ0aGljayIpLHVbMF09PT0ifiImJihwPSJpbnZpc2libGUiKTtsZXQgYj1DVXQoIi4iLHUpO3JldHVybiBiJiYocD0iZG90dGVkIix2PWIpLHt0eXBlOmQsc3Ryb2tlOnAsbGVuZ3RoOnZ9fSxhSGU9KGkscyk9Pntjb25zdCB1PVNVdChpKTtsZXQgZDtpZihzKXtpZihkPVRVdChzKSxkLnN0cm9rZSE9PXUuc3Ryb2tlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtpZihkLnR5cGU9PT0iYXJyb3dfb3BlbiIpZC50eXBlPXUudHlwZTtlbHNle2lmKGQudHlwZSE9PXUudHlwZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07ZC50eXBlPSJkb3VibGVfIitkLnR5cGV9cmV0dXJuIGQudHlwZT09PSJkb3VibGVfYXJyb3ciJiYoZC50eXBlPSJkb3VibGVfYXJyb3dfcG9pbnQiKSxkLmxlbmd0aD11Lmxlbmd0aCxkfXJldHVybiB1fSxvSGU9KGkscyk9PntsZXQgdT0hMTtyZXR1cm4gaS5mb3JFYWNoKGQ9PntkLm5vZGVzLmluZGV4T2Yocyk+PTAmJih1PSEwKX0pLHV9LGNIZT0oaSxzKT0+e2NvbnN0IHU9W107cmV0dXJuIGkubm9kZXMuZm9yRWFjaCgoZCxwKT0+e29IZShzLGQpfHx1LnB1c2goaS5ub2Rlc1twXSl9KSx7bm9kZXM6dX19LHVIZT17Zmlyc3RHcmFwaDpzSGV9LEhDPXtkZWZhdWx0Q29uZmlnOigpPT5aamUuZmxvd2NoYXJ0LHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGFkZFZlcnRleDpOcWUsbG9va1VwRG9tSWQ6bVIsYWRkTGluazpCcWUsdXBkYXRlTGlua0ludGVycG9sYXRlOkZxZSx1cGRhdGVMaW5rOlJxZSxhZGRDbGFzczpqcWUsc2V0RGlyZWN0aW9uOiRxZSxzZXRDbGFzczpSUSxzZXRUb29sdGlwOnhVdCxnZXRUb29sdGlwOnFxZSxzZXRDbGlja0V2ZW50OkhxZSxzZXRMaW5rOnpxZSxiaW5kRnVuY3Rpb25zOlZxZSxnZXREaXJlY3Rpb246VXFlLGdldFZlcnRpY2VzOkdxZSxnZXRFZGdlczpLcWUsZ2V0Q2xhc3NlczpXcWUsY2xlYXI6WHFlLHNldEdlbjpRcWUsZGVmYXVsdFN0eWxlOkpxZSxhZGRTdWJHcmFwaDpacWUsZ2V0RGVwdGhGaXJzdFBvczpuSGUsaW5kZXhOb2RlczpySGUsZ2V0U3ViR3JhcGhzOmlIZSxkZXN0cnVjdExpbms6YUhlLGxleDp1SGUsZXhpc3RzOm9IZSxtYWtlVW5pcTpjSGUsc2V0RGlhZ3JhbVRpdGxlOmNtLGdldERpYWdyYW1UaXRsZTpBcH0sX1V0PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhZGRDbGFzczpqcWUsYWRkTGluazpCcWUsYWRkU2luZ2xlTGluazpQcWUsYWRkU3ViR3JhcGg6WnFlLGFkZFZlcnRleDpOcWUsYmluZEZ1bmN0aW9uczpWcWUsY2xlYXI6WHFlLGRlZmF1bHQ6SEMsZGVmYXVsdFN0eWxlOkpxZSxkZXN0cnVjdExpbms6YUhlLGZpcnN0R3JhcGg6c0hlLGdldENsYXNzZXM6V3FlLGdldERlcHRoRmlyc3RQb3M6bkhlLGdldERpcmVjdGlvbjpVcWUsZ2V0RWRnZXM6S3FlLGdldFN1YkdyYXBoczppSGUsZ2V0VG9vbHRpcDpxcWUsZ2V0VmVydGljZXM6R3FlLGluZGV4Tm9kZXM6ckhlLGxleDp1SGUsbG9va1VwRG9tSWQ6bVIsc2V0Q2xhc3M6UlEsc2V0Q2xpY2tFdmVudDpIcWUsc2V0RGlyZWN0aW9uOiRxZSxzZXRHZW46UXFlLHNldExpbms6enFlLHVwZGF0ZUxpbms6UnFlLHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpGcWV9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIEFVdD0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiBWQyhpKXtyZXR1cm4gdHlwZW9mIGk9PSJzeW1ib2wifHxxNChpKSYmQUMoaSk9PUFVdH1mdW5jdGlvbiBSRChpLHMpe2Zvcih2YXIgdT0tMSxkPWk9PW51bGw/MDppLmxlbmd0aCxwPUFycmF5KGQpOysrdTxkOylwW3VdPXMoaVt1XSx1LGkpO3JldHVybiBwfXZhciBMVXQ9MS8wLGxIZT1Jdj9Jdi5wcm90b3R5cGU6dm9pZCAwLGhIZT1sSGU/bEhlLnRvU3RyaW5nOnZvaWQgMDtmdW5jdGlvbiBmSGUoaSl7aWYodHlwZW9mIGk9PSJzdHJpbmciKXJldHVybiBpO2lmKEQwKGkpKXJldHVybiBSRChpLGZIZSkrIiI7aWYoVkMoaSkpcmV0dXJuIGhIZT9oSGUuY2FsbChpKToiIjt2YXIgcz1pKyIiO3JldHVybiBzPT0iMCImJjEvaT09LUxVdD8iLTAiOnN9dmFyIE1VdD0vXHMvO2Z1bmN0aW9uIERVdChpKXtmb3IodmFyIHM9aS5sZW5ndGg7cy0tJiZNVXQudGVzdChpLmNoYXJBdChzKSk7KTtyZXR1cm4gc312YXIgSVV0PS9eXHMrLztmdW5jdGlvbiBPVXQoaSl7cmV0dXJuIGkmJmkuc2xpY2UoMCxEVXQoaSkrMSkucmVwbGFjZShJVXQsIiIpfXZhciBkSGU9MC8wLE5VdD0vXlstK10weFswLTlhLWZdKyQvaSxQVXQ9L14wYlswMV0rJC9pLEJVdD0vXjBvWzAtN10rJC9pLEZVdD1wYXJzZUludDtmdW5jdGlvbiBSVXQoaSl7aWYodHlwZW9mIGk9PSJudW1iZXIiKXJldHVybiBpO2lmKFZDKGkpKXJldHVybiBkSGU7aWYoYW0oaSkpe3ZhciBzPXR5cGVvZiBpLnZhbHVlT2Y9PSJmdW5jdGlvbiI/aS52YWx1ZU9mKCk6aTtpPWFtKHMpP3MrIiI6c31pZih0eXBlb2YgaSE9InN0cmluZyIpcmV0dXJuIGk9PT0wP2k6K2k7aT1PVXQoaSk7dmFyIHU9UFV0LnRlc3QoaSk7cmV0dXJuIHV8fEJVdC50ZXN0KGkpP0ZVdChpLnNsaWNlKDIpLHU/Mjo4KTpOVXQudGVzdChpKT9kSGU6K2l9dmFyIGdIZT0xLzAsalV0PTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjtmdW5jdGlvbiBqUShpKXtpZighaSlyZXR1cm4gaT09PTA/aTowO2lmKGk9UlV0KGkpLGk9PT1nSGV8fGk9PT0tZ0hlKXt2YXIgcz1pPDA/LTE6MTtyZXR1cm4gcypqVXR9cmV0dXJuIGk9PT1pP2k6MH1mdW5jdGlvbiAkVXQoaSl7dmFyIHM9alEoaSksdT1zJTE7cmV0dXJuIHM9PT1zP3U/cy11OnM6MH1mdW5jdGlvbiB6VXQoKXt9ZnVuY3Rpb24gcEhlKGkscyl7Zm9yKHZhciB1PS0xLGQ9aT09bnVsbD8wOmkubGVuZ3RoOysrdTxkJiZzKGlbdV0sdSxpKSE9PSExOyk7cmV0dXJuIGl9ZnVuY3Rpb24gYkhlKGkscyx1LGQpe2Zvcih2YXIgcD1pLmxlbmd0aCx2PXUrKGQ/MTotMSk7ZD92LS06Kyt2PHA7KWlmKHMoaVt2XSx2LGkpKXJldHVybiB2O3JldHVybi0xfWZ1bmN0aW9uIHFVdChpKXtyZXR1cm4gaSE9PWl9ZnVuY3Rpb24gSFV0KGkscyx1KXtmb3IodmFyIGQ9dS0xLHA9aS5sZW5ndGg7KytkPHA7KWlmKGlbZF09PT1zKXJldHVybiBkO3JldHVybi0xfWZ1bmN0aW9uIFZVdChpLHMsdSl7cmV0dXJuIHM9PT1zP0hVdChpLHMsdSk6YkhlKGkscVV0LHUpfWZ1bmN0aW9uIFVVdChpLHMpe3ZhciB1PWk9PW51bGw/MDppLmxlbmd0aDtyZXR1cm4hIXUmJlZVdChpLHMsMCk+LTF9ZnVuY3Rpb24gZm0oaSl7cmV0dXJuIHc5KGkpP2FqZShpKTpsJGUoaSl9dmFyIEdVdD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxLVXQ9L15cdyokLztmdW5jdGlvbiBXYmUoaSxzKXtpZihEMChpKSlyZXR1cm4hMTt2YXIgdT10eXBlb2YgaTtyZXR1cm4gdT09Im51bWJlciJ8fHU9PSJzeW1ib2wifHx1PT0iYm9vbGVhbiJ8fGk9PW51bGx8fFZDKGkpPyEwOktVdC50ZXN0KGkpfHwhR1V0LnRlc3QoaSl8fHMhPW51bGwmJmkgaW4gT2JqZWN0KHMpfXZhciBXVXQ9NTAwO2Z1bmN0aW9uIFlVdChpKXt2YXIgcz1iRChpLGZ1bmN0aW9uKGQpe3JldHVybiB1LnNpemU9PT1XVXQmJnUuY2xlYXIoKSxkfSksdT1zLmNhY2hlO3JldHVybiBzfXZhciBYVXQ9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csUVV0PS9cXChcXCk/L2csSlV0PVlVdChmdW5jdGlvbihpKXt2YXIgcz1bXTtyZXR1cm4gaS5jaGFyQ29kZUF0KDApPT09NDYmJnMucHVzaCgiIiksaS5yZXBsYWNlKFhVdCxmdW5jdGlvbih1LGQscCx2KXtzLnB1c2gocD92LnJlcGxhY2UoUVV0LCIkMSIpOmR8fHUpfSksc30pO2NvbnN0IFpVdD1KVXQ7ZnVuY3Rpb24gbUhlKGkpe3JldHVybiBpPT1udWxsPyIiOmZIZShpKX1mdW5jdGlvbiAkUShpLHMpe3JldHVybiBEMChpKT9pOldiZShpLHMpP1tpXTpaVXQobUhlKGkpKX12YXIgZUd0PTEvMDtmdW5jdGlvbiB3UihpKXtpZih0eXBlb2YgaT09InN0cmluZyJ8fFZDKGkpKXJldHVybiBpO3ZhciBzPWkrIiI7cmV0dXJuIHM9PSIwIiYmMS9pPT0tZUd0PyItMCI6c31mdW5jdGlvbiB6UShpLHMpe3M9JFEocyxpKTtmb3IodmFyIHU9MCxkPXMubGVuZ3RoO2khPW51bGwmJnU8ZDspaT1pW3dSKHNbdSsrXSldO3JldHVybiB1JiZ1PT1kP2k6dm9pZCAwfWZ1bmN0aW9uIHRHdChpLHMsdSl7dmFyIGQ9aT09bnVsbD92b2lkIDA6elEoaSxzKTtyZXR1cm4gZD09PXZvaWQgMD91OmR9ZnVuY3Rpb24gWWJlKGkscyl7Zm9yKHZhciB1PS0xLGQ9cy5sZW5ndGgscD1pLmxlbmd0aDsrK3U8ZDspaVtwK3VdPXNbdV07cmV0dXJuIGl9dmFyIHZIZT1Jdj9Jdi5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO2Z1bmN0aW9uIG5HdChpKXtyZXR1cm4gRDAoaSl8fG1EKGkpfHwhISh2SGUmJmkmJmlbdkhlXSl9ZnVuY3Rpb24gcVEoaSxzLHUsZCxwKXt2YXIgdj0tMSxiPWkubGVuZ3RoO2Zvcih1fHwodT1uR3QpLHB8fChwPVtdKTsrK3Y8Yjspe3ZhciB5PWlbdl07cz4wJiZ1KHkpP3M+MT9xUSh5LHMtMSx1LGQscCk6WWJlKHAseSk6ZHx8KHBbcC5sZW5ndGhdPXkpfXJldHVybiBwfWZ1bmN0aW9uIGpEKGkpe3ZhciBzPWk9PW51bGw/MDppLmxlbmd0aDtyZXR1cm4gcz9xUShpLDEpOltdfWZ1bmN0aW9uIHJHdChpKXtyZXR1cm4gbGplKHVqZShpLHZvaWQgMCxqRCksaSsiIil9ZnVuY3Rpb24gaUd0KGkscyx1LGQpe3ZhciBwPS0xLHY9aT09bnVsbD8wOmkubGVuZ3RoO2ZvcihkJiZ2JiYodT1pWysrcF0pOysrcDx2Oyl1PXModSxpW3BdLHAsaSk7cmV0dXJuIHV9ZnVuY3Rpb24gc0d0KGkscyl7cmV0dXJuIGkmJlhGKHMsZm0ocyksaSl9ZnVuY3Rpb24gYUd0KGkscyl7cmV0dXJuIGkmJlhGKHMsSUMocyksaSl9ZnVuY3Rpb24gd0hlKGkscyl7Zm9yKHZhciB1PS0xLGQ9aT09bnVsbD8wOmkubGVuZ3RoLHA9MCx2PVtdOysrdTxkOyl7dmFyIGI9aVt1XTtzKGIsdSxpKSYmKHZbcCsrXT1iKX1yZXR1cm4gdn1mdW5jdGlvbiB5SGUoKXtyZXR1cm5bXX12YXIgb0d0PU9iamVjdC5wcm90b3R5cGUsY0d0PW9HdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSx4SGU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyx1R3Q9eEhlP2Z1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsP1tdOihpPU9iamVjdChpKSx3SGUoeEhlKGkpLGZ1bmN0aW9uKHMpe3JldHVybiBjR3QuY2FsbChpLHMpfSkpfTp5SGU7Y29uc3QgWGJlPXVHdDtmdW5jdGlvbiBsR3QoaSxzKXtyZXR1cm4gWEYoaSxYYmUoaSkscyl9dmFyIGhHdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGZHdD1oR3Q/ZnVuY3Rpb24oaSl7Zm9yKHZhciBzPVtdO2k7KVliZShzLFhiZShpKSksaT12MmUoaSk7cmV0dXJuIHN9OnlIZTtjb25zdCBrSGU9Zkd0O2Z1bmN0aW9uIGRHdChpLHMpe3JldHVybiBYRihpLGtIZShpKSxzKX1mdW5jdGlvbiBFSGUoaSxzLHUpe3ZhciBkPXMoaSk7cmV0dXJuIEQwKGkpP2Q6WWJlKGQsdShpKSl9ZnVuY3Rpb24gUWJlKGkpe3JldHVybiBFSGUoaSxmbSxYYmUpfWZ1bmN0aW9uIGdHdChpKXtyZXR1cm4gRUhlKGksSUMsa0hlKX12YXIgcEd0PU9iamVjdC5wcm90b3R5cGUsYkd0PXBHdC5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBtR3QoaSl7dmFyIHM9aS5sZW5ndGgsdT1uZXcgaS5jb25zdHJ1Y3RvcihzKTtyZXR1cm4gcyYmdHlwZW9mIGlbMF09PSJzdHJpbmciJiZiR3QuY2FsbChpLCJpbmRleCIpJiYodS5pbmRleD1pLmluZGV4LHUuaW5wdXQ9aS5pbnB1dCksdX1mdW5jdGlvbiB2R3QoaSxzKXt2YXIgdT1zP20yZShpLmJ1ZmZlcik6aS5idWZmZXI7cmV0dXJuIG5ldyBpLmNvbnN0cnVjdG9yKHUsaS5ieXRlT2Zmc2V0LGkuYnl0ZUxlbmd0aCl9dmFyIHdHdD0vXHcqJC87ZnVuY3Rpb24geUd0KGkpe3ZhciBzPW5ldyBpLmNvbnN0cnVjdG9yKGkuc291cmNlLHdHdC5leGVjKGkpKTtyZXR1cm4gcy5sYXN0SW5kZXg9aS5sYXN0SW5kZXgsc312YXIgVEhlPUl2P0l2LnByb3RvdHlwZTp2b2lkIDAsQ0hlPVRIZT9USGUudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24geEd0KGkpe3JldHVybiBDSGU/T2JqZWN0KENIZS5jYWxsKGkpKTp7fX12YXIga0d0PSJbb2JqZWN0IEJvb2xlYW5dIixFR3Q9IltvYmplY3QgRGF0ZV0iLFRHdD0iW29iamVjdCBNYXBdIixDR3Q9IltvYmplY3QgTnVtYmVyXSIsU0d0PSJbb2JqZWN0IFJlZ0V4cF0iLF9HdD0iW29iamVjdCBTZXRdIixBR3Q9IltvYmplY3QgU3RyaW5nXSIsTEd0PSJbb2JqZWN0IFN5bWJvbF0iLE1HdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLERHdD0iW29iamVjdCBEYXRhVmlld10iLElHdD0iW29iamVjdCBGbG9hdDMyQXJyYXldIixPR3Q9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsTkd0PSJbb2JqZWN0IEludDhBcnJheV0iLFBHdD0iW29iamVjdCBJbnQxNkFycmF5XSIsQkd0PSJbb2JqZWN0IEludDMyQXJyYXldIixGR3Q9IltvYmplY3QgVWludDhBcnJheV0iLFJHdD0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLGpHdD0iW29iamVjdCBVaW50MTZBcnJheV0iLCRHdD0iW29iamVjdCBVaW50MzJBcnJheV0iO2Z1bmN0aW9uIHpHdChpLHMsdSl7dmFyIGQ9aS5jb25zdHJ1Y3Rvcjtzd2l0Y2gocyl7Y2FzZSBNR3Q6cmV0dXJuIG0yZShpKTtjYXNlIGtHdDpjYXNlIEVHdDpyZXR1cm4gbmV3IGQoK2kpO2Nhc2UgREd0OnJldHVybiB2R3QoaSx1KTtjYXNlIElHdDpjYXNlIE9HdDpjYXNlIE5HdDpjYXNlIFBHdDpjYXNlIEJHdDpjYXNlIEZHdDpjYXNlIFJHdDpjYXNlIGpHdDpjYXNlICRHdDpyZXR1cm4gVVJlKGksdSk7Y2FzZSBUR3Q6cmV0dXJuIG5ldyBkO2Nhc2UgQ0d0OmNhc2UgQUd0OnJldHVybiBuZXcgZChpKTtjYXNlIFNHdDpyZXR1cm4geUd0KGkpO2Nhc2UgX0d0OnJldHVybiBuZXcgZDtjYXNlIExHdDpyZXR1cm4geEd0KGkpfX12YXIgcUd0PSJbb2JqZWN0IE1hcF0iO2Z1bmN0aW9uIEhHdChpKXtyZXR1cm4gcTQoaSkmJlNEKGkpPT1xR3R9dmFyIFNIZT13RCYmd0QuaXNNYXAsVkd0PVNIZT9OWChTSGUpOkhHdDtjb25zdCBVR3Q9Vkd0O3ZhciBHR3Q9IltvYmplY3QgU2V0XSI7ZnVuY3Rpb24gS0d0KGkpe3JldHVybiBxNChpKSYmU0QoaSk9PUdHdH12YXIgX0hlPXdEJiZ3RC5pc1NldCxXR3Q9X0hlP05YKF9IZSk6S0d0O2NvbnN0IFlHdD1XR3Q7dmFyIFhHdD0xLFFHdD0yLEpHdD00LEFIZT0iW29iamVjdCBBcmd1bWVudHNdIixaR3Q9IltvYmplY3QgQXJyYXldIixlS3Q9IltvYmplY3QgQm9vbGVhbl0iLHRLdD0iW29iamVjdCBEYXRlXSIsbkt0PSJbb2JqZWN0IEVycm9yXSIsTEhlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsckt0PSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsaUt0PSJbb2JqZWN0IE1hcF0iLHNLdD0iW29iamVjdCBOdW1iZXJdIixNSGU9IltvYmplY3QgT2JqZWN0XSIsYUt0PSJbb2JqZWN0IFJlZ0V4cF0iLG9LdD0iW29iamVjdCBTZXRdIixjS3Q9IltvYmplY3QgU3RyaW5nXSIsdUt0PSJbb2JqZWN0IFN5bWJvbF0iLGxLdD0iW29iamVjdCBXZWFrTWFwXSIsaEt0PSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsZkt0PSJbb2JqZWN0IERhdGFWaWV3XSIsZEt0PSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGdLdD0iW29iamVjdCBGbG9hdDY0QXJyYXldIixwS3Q9IltvYmplY3QgSW50OEFycmF5XSIsYkt0PSJbb2JqZWN0IEludDE2QXJyYXldIixtS3Q9IltvYmplY3QgSW50MzJBcnJheV0iLHZLdD0iW29iamVjdCBVaW50OEFycmF5XSIsd0t0PSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIseUt0PSJbb2JqZWN0IFVpbnQxNkFycmF5XSIseEt0PSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsR2w9e307R2xbQUhlXT1HbFtaR3RdPUdsW2hLdF09R2xbZkt0XT1HbFtlS3RdPUdsW3RLdF09R2xbZEt0XT1HbFtnS3RdPUdsW3BLdF09R2xbYkt0XT1HbFttS3RdPUdsW2lLdF09R2xbc0t0XT1HbFtNSGVdPUdsW2FLdF09R2xbb0t0XT1HbFtjS3RdPUdsW3VLdF09R2xbdkt0XT1HbFt3S3RdPUdsW3lLdF09R2xbeEt0XT0hMCxHbFtuS3RdPUdsW0xIZV09R2xbbEt0XT0hMTtmdW5jdGlvbiB5UihpLHMsdSxkLHAsdil7dmFyIGIseT1zJlhHdCxUPXMmUUd0LF89cyZKR3Q7aWYodSYmKGI9cD91KGksZCxwLHYpOnUoaSkpLGIhPT12b2lkIDApcmV0dXJuIGI7aWYoIWFtKGkpKXJldHVybiBpO3ZhciBBPUQwKGkpO2lmKEEpe2lmKGI9bUd0KGkpLCF5KXJldHVybiBHUmUoaSxiKX1lbHNle3ZhciBQPVNEKGkpLFI9UD09TEhlfHxQPT1yS3Q7aWYodkQoaSkpcmV0dXJuIFZSZShpLHkpO2lmKFA9PU1IZXx8UD09QUhlfHxSJiYhcCl7aWYoYj1UfHxSP3t9OllSZShpKSwheSlyZXR1cm4gVD9kR3QoaSxhR3QoYixpKSk6bEd0KGksc0d0KGIsaSkpfWVsc2V7aWYoIUdsW1BdKXJldHVybiBwP2k6e307Yj16R3QoaSxQLHkpfX12fHwodj1uZXcgUDMpO3ZhciBGPXYuZ2V0KGkpO2lmKEYpcmV0dXJuIEY7di5zZXQoaSxiKSxZR3QoaSk/aS5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtiLmFkZCh5UihlZSxzLHUsZWUsaSx2KSl9KTpVR3QoaSkmJmkuZm9yRWFjaChmdW5jdGlvbihlZSxpZSl7Yi5zZXQoaWUseVIoZWUscyx1LGllLGksdikpfSk7dmFyIGo9Xz9UP2dHdDpRYmU6VD9JQzpmbSxLPUE/dm9pZCAwOmooaSk7cmV0dXJuIHBIZShLfHxpLGZ1bmN0aW9uKGVlLGllKXtLJiYoaWU9ZWUsZWU9aVtpZV0pLEJYKGIsaWUseVIoZWUscyx1LGllLGksdikpfSksYn12YXIga0t0PTQ7ZnVuY3Rpb24gREhlKGkpe3JldHVybiB5UihpLGtLdCl9dmFyIEVLdD0xLFRLdD00O2Z1bmN0aW9uIENLdChpKXtyZXR1cm4geVIoaSxFS3R8VEt0KX12YXIgU0t0PSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBfS3QoaSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGksU0t0KSx0aGlzfWZ1bmN0aW9uIEFLdChpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoaSl9ZnVuY3Rpb24geFIoaSl7dmFyIHM9LTEsdT1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFM3Oysrczx1Oyl0aGlzLmFkZChpW3NdKX14Ui5wcm90b3R5cGUuYWRkPXhSLnByb3RvdHlwZS5wdXNoPV9LdCx4Ui5wcm90b3R5cGUuaGFzPUFLdDtmdW5jdGlvbiBMS3QoaSxzKXtmb3IodmFyIHU9LTEsZD1pPT1udWxsPzA6aS5sZW5ndGg7Kyt1PGQ7KWlmKHMoaVt1XSx1LGkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIElIZShpLHMpe3JldHVybiBpLmhhcyhzKX12YXIgTUt0PTEsREt0PTI7ZnVuY3Rpb24gT0hlKGkscyx1LGQscCx2KXt2YXIgYj11Jk1LdCx5PWkubGVuZ3RoLFQ9cy5sZW5ndGg7aWYoeSE9VCYmIShiJiZUPnkpKXJldHVybiExO3ZhciBfPXYuZ2V0KGkpLEE9di5nZXQocyk7aWYoXyYmQSlyZXR1cm4gXz09cyYmQT09aTt2YXIgUD0tMSxSPSEwLEY9dSZES3Q/bmV3IHhSOnZvaWQgMDtmb3Iodi5zZXQoaSxzKSx2LnNldChzLGkpOysrUDx5Oyl7dmFyIGo9aVtQXSxLPXNbUF07aWYoZCl2YXIgZWU9Yj9kKEssaixQLHMsaSx2KTpkKGosSyxQLGkscyx2KTtpZihlZSE9PXZvaWQgMCl7aWYoZWUpY29udGludWU7Uj0hMTticmVha31pZihGKXtpZighTEt0KHMsZnVuY3Rpb24oaWUsb2Upe2lmKCFJSGUoRixvZSkmJihqPT09aWV8fHAoaixpZSx1LGQsdikpKXJldHVybiBGLnB1c2gob2UpfSkpe1I9ITE7YnJlYWt9fWVsc2UgaWYoIShqPT09S3x8cChqLEssdSxkLHYpKSl7Uj0hMTticmVha319cmV0dXJuIHYuZGVsZXRlKGkpLHYuZGVsZXRlKHMpLFJ9ZnVuY3Rpb24gSUt0KGkpe3ZhciBzPS0xLHU9QXJyYXkoaS5zaXplKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKGQscCl7dVsrK3NdPVtwLGRdfSksdX1mdW5jdGlvbiBKYmUoaSl7dmFyIHM9LTEsdT1BcnJheShpLnNpemUpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oZCl7dVsrK3NdPWR9KSx1fXZhciBPS3Q9MSxOS3Q9MixQS3Q9IltvYmplY3QgQm9vbGVhbl0iLEJLdD0iW29iamVjdCBEYXRlXSIsRkt0PSJbb2JqZWN0IEVycm9yXSIsUkt0PSJbb2JqZWN0IE1hcF0iLGpLdD0iW29iamVjdCBOdW1iZXJdIiwkS3Q9IltvYmplY3QgUmVnRXhwXSIsekt0PSJbb2JqZWN0IFNldF0iLHFLdD0iW29iamVjdCBTdHJpbmddIixIS3Q9IltvYmplY3QgU3ltYm9sXSIsVkt0PSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsVUt0PSJbb2JqZWN0IERhdGFWaWV3XSIsTkhlPUl2P0l2LnByb3RvdHlwZTp2b2lkIDAsWmJlPU5IZT9OSGUudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gR0t0KGkscyx1LGQscCx2LGIpe3N3aXRjaCh1KXtjYXNlIFVLdDppZihpLmJ5dGVMZW5ndGghPXMuYnl0ZUxlbmd0aHx8aS5ieXRlT2Zmc2V0IT1zLmJ5dGVPZmZzZXQpcmV0dXJuITE7aT1pLmJ1ZmZlcixzPXMuYnVmZmVyO2Nhc2UgVkt0OnJldHVybiEoaS5ieXRlTGVuZ3RoIT1zLmJ5dGVMZW5ndGh8fCF2KG5ldyBJWChpKSxuZXcgSVgocykpKTtjYXNlIFBLdDpjYXNlIEJLdDpjYXNlIGpLdDpyZXR1cm4gcEQoK2ksK3MpO2Nhc2UgRkt0OnJldHVybiBpLm5hbWU9PXMubmFtZSYmaS5tZXNzYWdlPT1zLm1lc3NhZ2U7Y2FzZSAkS3Q6Y2FzZSBxS3Q6cmV0dXJuIGk9PXMrIiI7Y2FzZSBSS3Q6dmFyIHk9SUt0O2Nhc2Ugekt0OnZhciBUPWQmT0t0O2lmKHl8fCh5PUpiZSksaS5zaXplIT1zLnNpemUmJiFUKXJldHVybiExO3ZhciBfPWIuZ2V0KGkpO2lmKF8pcmV0dXJuIF89PXM7ZHw9Tkt0LGIuc2V0KGkscyk7dmFyIEE9T0hlKHkoaSkseShzKSxkLHAsdixiKTtyZXR1cm4gYi5kZWxldGUoaSksQTtjYXNlIEhLdDppZihaYmUpcmV0dXJuIFpiZS5jYWxsKGkpPT1aYmUuY2FsbChzKX1yZXR1cm4hMX12YXIgS0t0PTEsV0t0PU9iamVjdC5wcm90b3R5cGUsWUt0PVdLdC5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBYS3QoaSxzLHUsZCxwLHYpe3ZhciBiPXUmS0t0LHk9UWJlKGkpLFQ9eS5sZW5ndGgsXz1RYmUocyksQT1fLmxlbmd0aDtpZihUIT1BJiYhYilyZXR1cm4hMTtmb3IodmFyIFA9VDtQLS07KXt2YXIgUj15W1BdO2lmKCEoYj9SIGluIHM6WUt0LmNhbGwocyxSKSkpcmV0dXJuITF9dmFyIEY9di5nZXQoaSksaj12LmdldChzKTtpZihGJiZqKXJldHVybiBGPT1zJiZqPT1pO3ZhciBLPSEwO3Yuc2V0KGkscyksdi5zZXQocyxpKTtmb3IodmFyIGVlPWI7KytQPFQ7KXtSPXlbUF07dmFyIGllPWlbUl0sb2U9c1tSXTtpZihkKXZhciBwZT1iP2Qob2UsaWUsUixzLGksdik6ZChpZSxvZSxSLGkscyx2KTtpZighKHBlPT09dm9pZCAwP2llPT09b2V8fHAoaWUsb2UsdSxkLHYpOnBlKSl7Sz0hMTticmVha31lZXx8KGVlPVI9PSJjb25zdHJ1Y3RvciIpfWlmKEsmJiFlZSl7dmFyIGJlPWkuY29uc3RydWN0b3IsYWU9cy5jb25zdHJ1Y3RvcjtiZSE9YWUmJiJjb25zdHJ1Y3RvciJpbiBpJiYiY29uc3RydWN0b3IiaW4gcyYmISh0eXBlb2YgYmU9PSJmdW5jdGlvbiImJmJlIGluc3RhbmNlb2YgYmUmJnR5cGVvZiBhZT09ImZ1bmN0aW9uIiYmYWUgaW5zdGFuY2VvZiBhZSkmJihLPSExKX1yZXR1cm4gdi5kZWxldGUoaSksdi5kZWxldGUocyksS312YXIgUUt0PTEsUEhlPSJbb2JqZWN0IEFyZ3VtZW50c10iLEJIZT0iW29iamVjdCBBcnJheV0iLEhRPSJbb2JqZWN0IE9iamVjdF0iLEpLdD1PYmplY3QucHJvdG90eXBlLEZIZT1KS3QuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gWkt0KGkscyx1LGQscCx2KXt2YXIgYj1EMChpKSx5PUQwKHMpLFQ9Yj9CSGU6U0QoaSksXz15P0JIZTpTRChzKTtUPVQ9PVBIZT9IUTpULF89Xz09UEhlP0hROl87dmFyIEE9VD09SFEsUD1fPT1IUSxSPVQ9PV87aWYoUiYmdkQoaSkpe2lmKCF2RChzKSlyZXR1cm4hMTtiPSEwLEE9ITF9aWYoUiYmIUEpcmV0dXJuIHZ8fCh2PW5ldyBQMyksYnx8UFgoaSk/T0hlKGkscyx1LGQscCx2KTpHS3QoaSxzLFQsdSxkLHAsdik7aWYoISh1JlFLdCkpe3ZhciBGPUEmJkZIZS5jYWxsKGksIl9fd3JhcHBlZF9fIiksaj1QJiZGSGUuY2FsbChzLCJfX3dyYXBwZWRfXyIpO2lmKEZ8fGope3ZhciBLPUY/aS52YWx1ZSgpOmksZWU9aj9zLnZhbHVlKCk6cztyZXR1cm4gdnx8KHY9bmV3IFAzKSxwKEssZWUsdSxkLHYpfX1yZXR1cm4gUj8odnx8KHY9bmV3IFAzKSxYS3QoaSxzLHUsZCxwLHYpKTohMX1mdW5jdGlvbiBlbWUoaSxzLHUsZCxwKXtyZXR1cm4gaT09PXM/ITA6aT09bnVsbHx8cz09bnVsbHx8IXE0KGkpJiYhcTQocyk/aSE9PWkmJnMhPT1zOlpLdChpLHMsdSxkLGVtZSxwKX12YXIgZVd0PTEsdFd0PTI7ZnVuY3Rpb24gbld0KGkscyx1LGQpe3ZhciBwPXUubGVuZ3RoLHY9cCxiPSFkO2lmKGk9PW51bGwpcmV0dXJuIXY7Zm9yKGk9T2JqZWN0KGkpO3AtLTspe3ZhciB5PXVbcF07aWYoYiYmeVsyXT95WzFdIT09aVt5WzBdXTohKHlbMF1pbiBpKSlyZXR1cm4hMX1mb3IoOysrcDx2Oyl7eT11W3BdO3ZhciBUPXlbMF0sXz1pW1RdLEE9eVsxXTtpZihiJiZ5WzJdKXtpZihfPT09dm9pZCAwJiYhKFQgaW4gaSkpcmV0dXJuITF9ZWxzZXt2YXIgUD1uZXcgUDM7aWYoZCl2YXIgUj1kKF8sQSxULGkscyxQKTtpZighKFI9PT12b2lkIDA/ZW1lKEEsXyxlV3R8dFd0LGQsUCk6UikpcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIFJIZShpKXtyZXR1cm4gaT09PWkmJiFhbShpKX1mdW5jdGlvbiByV3QoaSl7Zm9yKHZhciBzPWZtKGkpLHU9cy5sZW5ndGg7dS0tOyl7dmFyIGQ9c1t1XSxwPWlbZF07c1t1XT1bZCxwLFJIZShwKV19cmV0dXJuIHN9ZnVuY3Rpb24gakhlKGkscyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiB1PT1udWxsPyExOnVbaV09PT1zJiYocyE9PXZvaWQgMHx8aSBpbiBPYmplY3QodSkpfX1mdW5jdGlvbiBpV3QoaSl7dmFyIHM9cld0KGkpO3JldHVybiBzLmxlbmd0aD09MSYmc1swXVsyXT9qSGUoc1swXVswXSxzWzBdWzFdKTpmdW5jdGlvbih1KXtyZXR1cm4gdT09PWl8fG5XdCh1LGkscyl9fWZ1bmN0aW9uIHNXdChpLHMpe3JldHVybiBpIT1udWxsJiZzIGluIE9iamVjdChpKX1mdW5jdGlvbiAkSGUoaSxzLHUpe3M9JFEocyxpKTtmb3IodmFyIGQ9LTEscD1zLmxlbmd0aCx2PSExOysrZDxwOyl7dmFyIGI9d1Ioc1tkXSk7aWYoISh2PWkhPW51bGwmJnUoaSxiKSkpYnJlYWs7aT1pW2JdfXJldHVybiB2fHwrK2QhPXA/djoocD1pPT1udWxsPzA6aS5sZW5ndGgsISFwJiZ3MmUocCkmJkZYKGIscCkmJihEMChpKXx8bUQoaSkpKX1mdW5jdGlvbiB6SGUoaSxzKXtyZXR1cm4gaSE9bnVsbCYmJEhlKGkscyxzV3QpfXZhciBhV3Q9MSxvV3Q9MjtmdW5jdGlvbiBjV3QoaSxzKXtyZXR1cm4gV2JlKGkpJiZSSGUocyk/akhlKHdSKGkpLHMpOmZ1bmN0aW9uKHUpe3ZhciBkPXRHdCh1LGkpO3JldHVybiBkPT09dm9pZCAwJiZkPT09cz96SGUodSxpKTplbWUocyxkLGFXdHxvV3QpfX1mdW5jdGlvbiB1V3QoaSl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBzPT1udWxsP3ZvaWQgMDpzW2ldfX1mdW5jdGlvbiBsV3QoaSl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB6UShzLGkpfX1mdW5jdGlvbiBoV3QoaSl7cmV0dXJuIFdiZShpKT91V3Qod1IoaSkpOmxXdChpKX1mdW5jdGlvbiBJOShpKXtyZXR1cm4gdHlwZW9mIGk9PSJmdW5jdGlvbiI/aTppPT1udWxsP09DOnR5cGVvZiBpPT0ib2JqZWN0Ij9EMChpKT9jV3QoaVswXSxpWzFdKTppV3QoaSk6aFd0KGkpfWZ1bmN0aW9uIHRtZShpLHMpe3JldHVybiBpJiZiMmUoaSxzLGZtKX1mdW5jdGlvbiBmV3QoaSxzKXtyZXR1cm4gZnVuY3Rpb24odSxkKXtpZih1PT1udWxsKXJldHVybiB1O2lmKCF3OSh1KSlyZXR1cm4gaSh1LGQpO2Zvcih2YXIgcD11Lmxlbmd0aCx2PXM/cDotMSxiPU9iamVjdCh1KTsocz92LS06Kyt2PHApJiZkKGJbdl0sdixiKSE9PSExOyk7cmV0dXJuIHV9fXZhciBkV3Q9Zld0KHRtZSk7Y29uc3QgVlE9ZFd0O3ZhciBnV3Q9ZnVuY3Rpb24oKXtyZXR1cm4gTjMuRGF0ZS5ub3coKX07Y29uc3QgcUhlPWdXdDt2YXIgSEhlPU9iamVjdC5wcm90b3R5cGUscFd0PUhIZS5oYXNPd25Qcm9wZXJ0eSxiV3Q9UlgoZnVuY3Rpb24oaSxzKXtpPU9iamVjdChpKTt2YXIgdT0tMSxkPXMubGVuZ3RoLHA9ZD4yP3NbMl06dm9pZCAwO2ZvcihwJiZRRihzWzBdLHNbMV0scCkmJihkPTEpOysrdTxkOylmb3IodmFyIHY9c1t1XSxiPUlDKHYpLHk9LTEsVD1iLmxlbmd0aDsrK3k8VDspe3ZhciBfPWJbeV0sQT1pW19dOyhBPT09dm9pZCAwfHxwRChBLEhIZVtfXSkmJiFwV3QuY2FsbChpLF8pKSYmKGlbX109dltfXSl9cmV0dXJuIGl9KTtjb25zdCAkRD1iV3Q7ZnVuY3Rpb24gbVd0KGkscyx1KXtmb3IodmFyIGQ9LTEscD1pPT1udWxsPzA6aS5sZW5ndGg7KytkPHA7KWlmKHUocyxpW2RdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBVUShpKXt2YXIgcz1pPT1udWxsPzA6aS5sZW5ndGg7cmV0dXJuIHM/aVtzLTFdOnZvaWQgMH1mdW5jdGlvbiBubWUoaSl7cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6T0N9ZnVuY3Rpb24gQXIoaSxzKXt2YXIgdT1EMChpKT9wSGU6VlE7cmV0dXJuIHUoaSxubWUocykpfWZ1bmN0aW9uIHZXdChpLHMpe3ZhciB1PVtdO3JldHVybiBWUShpLGZ1bmN0aW9uKGQscCx2KXtzKGQscCx2KSYmdS5wdXNoKGQpfSksdX1mdW5jdGlvbiBqNyhpLHMpe3ZhciB1PUQwKGkpP3dIZTp2V3Q7cmV0dXJuIHUoaSxJOShzKSl9ZnVuY3Rpb24gd1d0KGkpe3JldHVybiBmdW5jdGlvbihzLHUsZCl7dmFyIHA9T2JqZWN0KHMpO2lmKCF3OShzKSl7dmFyIHY9STkodSk7cz1mbShzKSx1PWZ1bmN0aW9uKHkpe3JldHVybiB2KHBbeV0seSxwKX19dmFyIGI9aShzLHUsZCk7cmV0dXJuIGI+LTE/cFt2P3NbYl06Yl06dm9pZCAwfX12YXIgeVd0PU1hdGgubWF4O2Z1bmN0aW9uIHhXdChpLHMsdSl7dmFyIGQ9aT09bnVsbD8wOmkubGVuZ3RoO2lmKCFkKXJldHVybi0xO3ZhciBwPXU9PW51bGw/MDokVXQodSk7cmV0dXJuIHA8MCYmKHA9eVd0KGQrcCwwKSksYkhlKGksSTkocykscCl9dmFyIGtXdD13V3QoeFd0KTtjb25zdCBybWU9a1d0O2Z1bmN0aW9uIFZIZShpLHMpe3ZhciB1PS0xLGQ9dzkoaSk/QXJyYXkoaS5sZW5ndGgpOltdO3JldHVybiBWUShpLGZ1bmN0aW9uKHAsdixiKXtkWysrdV09cyhwLHYsYil9KSxkfWZ1bmN0aW9uIFAwKGkscyl7dmFyIHU9RDAoaSk/UkQ6VkhlO3JldHVybiB1KGksSTkocykpfWZ1bmN0aW9uIEVXdChpLHMpe3JldHVybiBpPT1udWxsP2k6YjJlKGksbm1lKHMpLElDKX1mdW5jdGlvbiBUV3QoaSxzKXtyZXR1cm4gaSYmdG1lKGksbm1lKHMpKX1mdW5jdGlvbiBDV3QoaSxzKXtyZXR1cm4gaT5zfXZhciBTV3Q9T2JqZWN0LnByb3RvdHlwZSxfV3Q9U1d0Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIEFXdChpLHMpe3JldHVybiBpIT1udWxsJiZfV3QuY2FsbChpLHMpfWZ1bmN0aW9uIExvKGkscyl7cmV0dXJuIGkhPW51bGwmJiRIZShpLHMsQVd0KX1mdW5jdGlvbiBMV3QoaSxzKXtyZXR1cm4gUkQocyxmdW5jdGlvbih1KXtyZXR1cm4gaVt1XX0pfWZ1bmN0aW9uICQ3KGkpe3JldHVybiBpPT1udWxsP1tdOkxXdChpLGZtKGkpKX1mdW5jdGlvbiBRZihpKXtyZXR1cm4gaT09PXZvaWQgMH1mdW5jdGlvbiBVSGUoaSxzKXtyZXR1cm4gaTxzfWZ1bmN0aW9uIEdRKGkscyl7dmFyIHU9e307cmV0dXJuIHM9STkocyksdG1lKGksZnVuY3Rpb24oZCxwLHYpe0RYKHUscCxzKGQscCx2KSl9KSx1fWZ1bmN0aW9uIGltZShpLHMsdSl7Zm9yKHZhciBkPS0xLHA9aS5sZW5ndGg7KytkPHA7KXt2YXIgdj1pW2RdLGI9cyh2KTtpZihiIT1udWxsJiYoeT09PXZvaWQgMD9iPT09YiYmIVZDKGIpOnUoYix5KSkpdmFyIHk9YixUPXZ9cmV0dXJuIFR9ZnVuY3Rpb24gVUMoaSl7cmV0dXJuIGkmJmkubGVuZ3RoP2ltZShpLE9DLENXdCk6dm9pZCAwfWZ1bmN0aW9uIGtSKGkpe3JldHVybiBpJiZpLmxlbmd0aD9pbWUoaSxPQyxVSGUpOnZvaWQgMH1mdW5jdGlvbiBzbWUoaSxzKXtyZXR1cm4gaSYmaS5sZW5ndGg/aW1lKGksSTkocyksVUhlKTp2b2lkIDB9ZnVuY3Rpb24gTVd0KGkscyx1LGQpe2lmKCFhbShpKSlyZXR1cm4gaTtzPSRRKHMsaSk7Zm9yKHZhciBwPS0xLHY9cy5sZW5ndGgsYj12LTEseT1pO3khPW51bGwmJisrcDx2Oyl7dmFyIFQ9d1Ioc1twXSksXz11O2lmKFQ9PT0iX19wcm90b19fInx8VD09PSJjb25zdHJ1Y3RvciJ8fFQ9PT0icHJvdG90eXBlIilyZXR1cm4gaTtpZihwIT1iKXt2YXIgQT15W1RdO189ZD9kKEEsVCx5KTp2b2lkIDAsXz09PXZvaWQgMCYmKF89YW0oQSk/QTpGWChzW3ArMV0pP1tdOnt9KX1CWCh5LFQsXykseT15W1RdfXJldHVybiBpfWZ1bmN0aW9uIERXdChpLHMsdSl7Zm9yKHZhciBkPS0xLHA9cy5sZW5ndGgsdj17fTsrK2Q8cDspe3ZhciBiPXNbZF0seT16UShpLGIpO3UoeSxiKSYmTVd0KHYsJFEoYixpKSx5KX1yZXR1cm4gdn1mdW5jdGlvbiBJV3QoaSxzKXt2YXIgdT1pLmxlbmd0aDtmb3IoaS5zb3J0KHMpO3UtLTspaVt1XT1pW3VdLnZhbHVlO3JldHVybiBpfWZ1bmN0aW9uIE9XdChpLHMpe2lmKGkhPT1zKXt2YXIgdT1pIT09dm9pZCAwLGQ9aT09PW51bGwscD1pPT09aSx2PVZDKGkpLGI9cyE9PXZvaWQgMCx5PXM9PT1udWxsLFQ9cz09PXMsXz1WQyhzKTtpZigheSYmIV8mJiF2JiZpPnN8fHYmJmImJlQmJiF5JiYhX3x8ZCYmYiYmVHx8IXUmJlR8fCFwKXJldHVybiAxO2lmKCFkJiYhdiYmIV8mJmk8c3x8XyYmdSYmcCYmIWQmJiF2fHx5JiZ1JiZwfHwhYiYmcHx8IVQpcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gTld0KGkscyx1KXtmb3IodmFyIGQ9LTEscD1pLmNyaXRlcmlhLHY9cy5jcml0ZXJpYSxiPXAubGVuZ3RoLHk9dS5sZW5ndGg7KytkPGI7KXt2YXIgVD1PV3QocFtkXSx2W2RdKTtpZihUKXtpZihkPj15KXJldHVybiBUO3ZhciBfPXVbZF07cmV0dXJuIFQqKF89PSJkZXNjIj8tMToxKX19cmV0dXJuIGkuaW5kZXgtcy5pbmRleH1mdW5jdGlvbiBQV3QoaSxzLHUpe3MubGVuZ3RoP3M9UkQocyxmdW5jdGlvbih2KXtyZXR1cm4gRDAodik/ZnVuY3Rpb24oYil7cmV0dXJuIHpRKGIsdi5sZW5ndGg9PT0xP3ZbMF06dil9OnZ9KTpzPVtPQ107dmFyIGQ9LTE7cz1SRChzLE5YKEk5KSk7dmFyIHA9VkhlKGksZnVuY3Rpb24odixiLHkpe3ZhciBUPVJEKHMsZnVuY3Rpb24oXyl7cmV0dXJuIF8odil9KTtyZXR1cm57Y3JpdGVyaWE6VCxpbmRleDorK2QsdmFsdWU6dn19KTtyZXR1cm4gSVd0KHAsZnVuY3Rpb24odixiKXtyZXR1cm4gTld0KHYsYix1KX0pfWZ1bmN0aW9uIEJXdChpLHMpe3JldHVybiBEV3QoaSxzLGZ1bmN0aW9uKHUsZCl7cmV0dXJuIHpIZShpLGQpfSl9dmFyIEZXdD1yR3QoZnVuY3Rpb24oaSxzKXtyZXR1cm4gaT09bnVsbD97fTpCV3QoaSxzKX0pO2NvbnN0IEVSPUZXdDt2YXIgUld0PU1hdGguY2VpbCxqV3Q9TWF0aC5tYXg7ZnVuY3Rpb24gJFd0KGkscyx1LGQpe2Zvcih2YXIgcD0tMSx2PWpXdChSV3QoKHMtaSkvKHV8fDEpKSwwKSxiPUFycmF5KHYpO3YtLTspYltkP3Y6KytwXT1pLGkrPXU7cmV0dXJuIGJ9ZnVuY3Rpb24geld0KGkpe3JldHVybiBmdW5jdGlvbihzLHUsZCl7cmV0dXJuIGQmJnR5cGVvZiBkIT0ibnVtYmVyIiYmUUYocyx1LGQpJiYodT1kPXZvaWQgMCkscz1qUShzKSx1PT09dm9pZCAwPyh1PXMscz0wKTp1PWpRKHUpLGQ9ZD09PXZvaWQgMD9zPHU/MTotMTpqUShkKSwkV3Qocyx1LGQsaSl9fXZhciBxV3Q9eld0KCk7Y29uc3QgR0M9cVd0O2Z1bmN0aW9uIEhXdChpLHMsdSxkLHApe3JldHVybiBwKGksZnVuY3Rpb24odixiLHkpe3U9ZD8oZD0hMSx2KTpzKHUsdixiLHkpfSksdX1mdW5jdGlvbiBUUihpLHMsdSl7dmFyIGQ9RDAoaSk/aUd0OkhXdCxwPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gZChpLEk5KHMpLHUscCxWUSl9dmFyIFZXdD1SWChmdW5jdGlvbihpLHMpe2lmKGk9PW51bGwpcmV0dXJuW107dmFyIHU9cy5sZW5ndGg7cmV0dXJuIHU+MSYmUUYoaSxzWzBdLHNbMV0pP3M9W106dT4yJiZRRihzWzBdLHNbMV0sc1syXSkmJihzPVtzWzBdXSksUFd0KGkscVEocywxKSxbXSl9KTtjb25zdCBDUj1WV3Q7dmFyIFVXdD0xLzAsR1d0PUNEJiYxL0piZShuZXcgQ0QoWywtMF0pKVsxXT09VVd0P2Z1bmN0aW9uKGkpe3JldHVybiBuZXcgQ0QoaSl9OnpVdDtjb25zdCBLV3Q9R1d0O3ZhciBXV3Q9MjAwO2Z1bmN0aW9uIFlXdChpLHMsdSl7dmFyIGQ9LTEscD1VVXQsdj1pLmxlbmd0aCxiPSEwLHk9W10sVD15O2lmKHUpYj0hMSxwPW1XdDtlbHNlIGlmKHY+PVdXdCl7dmFyIF89cz9udWxsOktXdChpKTtpZihfKXJldHVybiBKYmUoXyk7Yj0hMSxwPUlIZSxUPW5ldyB4Un1lbHNlIFQ9cz9bXTp5O2U6Zm9yKDsrK2Q8djspe3ZhciBBPWlbZF0sUD1zP3MoQSk6QTtpZihBPXV8fEEhPT0wP0E6MCxiJiZQPT09UCl7Zm9yKHZhciBSPVQubGVuZ3RoO1ItLTspaWYoVFtSXT09PVApY29udGludWUgZTtzJiZULnB1c2goUCkseS5wdXNoKEEpfWVsc2UgcChULFAsdSl8fChUIT09eSYmVC5wdXNoKFApLHkucHVzaChBKSl9cmV0dXJuIHl9dmFyIFhXdD1SWChmdW5jdGlvbihpKXtyZXR1cm4gWVd0KHFRKGksMSxKUmUsITApKX0pO2NvbnN0IFFXdD1YV3Q7dmFyIEpXdD0wO2Z1bmN0aW9uIEtRKGkpe3ZhciBzPSsrSld0O3JldHVybiBtSGUoaSkrc31mdW5jdGlvbiBaV3QoaSxzLHUpe2Zvcih2YXIgZD0tMSxwPWkubGVuZ3RoLHY9cy5sZW5ndGgsYj17fTsrK2Q8cDspe3ZhciB5PWQ8dj9zW2RdOnZvaWQgMDt1KGIsaVtkXSx5KX1yZXR1cm4gYn1mdW5jdGlvbiBlWXQoaSxzKXtyZXR1cm4gWld0KGl8fFtdLHN8fFtdLEJYKX12YXIgdFl0PSJcMCIsS0M9IlwwIixHSGU9IgEiO2NsYXNzIEIwe2NvbnN0cnVjdG9yKHM9e30pe3RoaXMuX2lzRGlyZWN0ZWQ9TG8ocywiZGlyZWN0ZWQiKT9zLmRpcmVjdGVkOiEwLHRoaXMuX2lzTXVsdGlncmFwaD1MbyhzLCJtdWx0aWdyYXBoIik/cy5tdWx0aWdyYXBoOiExLHRoaXMuX2lzQ29tcG91bmQ9TG8ocywiY29tcG91bmQiKT9zLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49eUQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49eUQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW0tDXT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1pc0RpcmVjdGVkKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9aXNNdWx0aWdyYXBoKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH1pc0NvbXBvdW5kKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9c2V0R3JhcGgocyl7cmV0dXJuIHRoaXMuX2xhYmVsPXMsdGhpc31ncmFwaCgpe3JldHVybiB0aGlzLl9sYWJlbH1zZXREZWZhdWx0Tm9kZUxhYmVsKHMpe3JldHVybiBnRChzKXx8KHM9eUQocykpLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1zLHRoaXN9bm9kZUNvdW50KCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH1ub2Rlcygpe3JldHVybiBmbSh0aGlzLl9ub2Rlcyl9c291cmNlcygpe3ZhciBzPXRoaXM7cmV0dXJuIGo3KHRoaXMubm9kZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gaVIocy5faW5bdV0pfSl9c2lua3MoKXt2YXIgcz10aGlzO3JldHVybiBqNyh0aGlzLm5vZGVzKCksZnVuY3Rpb24odSl7cmV0dXJuIGlSKHMuX291dFt1XSl9KX1zZXROb2RlcyhzLHUpe3ZhciBkPWFyZ3VtZW50cyxwPXRoaXM7cmV0dXJuIEFyKHMsZnVuY3Rpb24odil7ZC5sZW5ndGg+MT9wLnNldE5vZGUodix1KTpwLnNldE5vZGUodil9KSx0aGlzfXNldE5vZGUocyx1KXtyZXR1cm4gTG8odGhpcy5fbm9kZXMscyk/KGFyZ3VtZW50cy5sZW5ndGg+MSYmKHRoaXMuX25vZGVzW3NdPXUpLHRoaXMpOih0aGlzLl9ub2Rlc1tzXT1hcmd1bWVudHMubGVuZ3RoPjE/dTp0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm4ocyksdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudFtzXT1LQyx0aGlzLl9jaGlsZHJlbltzXT17fSx0aGlzLl9jaGlsZHJlbltLQ11bc109ITApLHRoaXMuX2luW3NdPXt9LHRoaXMuX3ByZWRzW3NdPXt9LHRoaXMuX291dFtzXT17fSx0aGlzLl9zdWNzW3NdPXt9LCsrdGhpcy5fbm9kZUNvdW50LHRoaXMpfW5vZGUocyl7cmV0dXJuIHRoaXMuX25vZGVzW3NdfWhhc05vZGUocyl7cmV0dXJuIExvKHRoaXMuX25vZGVzLHMpfXJlbW92ZU5vZGUocyl7dmFyIHU9dGhpcztpZihMbyh0aGlzLl9ub2RlcyxzKSl7dmFyIGQ9ZnVuY3Rpb24ocCl7dS5yZW1vdmVFZGdlKHUuX2VkZ2VPYmpzW3BdKX07ZGVsZXRlIHRoaXMuX25vZGVzW3NdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChzKSxkZWxldGUgdGhpcy5fcGFyZW50W3NdLEFyKHRoaXMuY2hpbGRyZW4ocyksZnVuY3Rpb24ocCl7dS5zZXRQYXJlbnQocCl9KSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bc10pLEFyKGZtKHRoaXMuX2luW3NdKSxkKSxkZWxldGUgdGhpcy5faW5bc10sZGVsZXRlIHRoaXMuX3ByZWRzW3NdLEFyKGZtKHRoaXMuX291dFtzXSksZCksZGVsZXRlIHRoaXMuX291dFtzXSxkZWxldGUgdGhpcy5fc3Vjc1tzXSwtLXRoaXMuX25vZGVDb3VudH1yZXR1cm4gdGhpc31zZXRQYXJlbnQocyx1KXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoUWYodSkpdT1LQztlbHNle3UrPSIiO2Zvcih2YXIgZD11OyFRZihkKTtkPXRoaXMucGFyZW50KGQpKWlmKGQ9PT1zKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3UrIiBhcyBwYXJlbnQgb2YgIitzKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUodSl9cmV0dXJuIHRoaXMuc2V0Tm9kZShzKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChzKSx0aGlzLl9wYXJlbnRbc109dSx0aGlzLl9jaGlsZHJlblt1XVtzXT0hMCx0aGlzfV9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChzKXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W3NdXVtzXX1wYXJlbnQocyl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIHU9dGhpcy5fcGFyZW50W3NdO2lmKHUhPT1LQylyZXR1cm4gdX19Y2hpbGRyZW4ocyl7aWYoUWYocykmJihzPUtDKSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgdT10aGlzLl9jaGlsZHJlbltzXTtpZih1KXJldHVybiBmbSh1KX1lbHNle2lmKHM9PT1LQylyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZShzKSlyZXR1cm5bXX19cHJlZGVjZXNzb3JzKHMpe3ZhciB1PXRoaXMuX3ByZWRzW3NdO2lmKHUpcmV0dXJuIGZtKHUpfXN1Y2Nlc3NvcnMocyl7dmFyIHU9dGhpcy5fc3Vjc1tzXTtpZih1KXJldHVybiBmbSh1KX1uZWlnaGJvcnMocyl7dmFyIHU9dGhpcy5wcmVkZWNlc3NvcnMocyk7aWYodSlyZXR1cm4gUVd0KHUsdGhpcy5zdWNjZXNzb3JzKHMpKX1pc0xlYWYocyl7dmFyIHU7cmV0dXJuIHRoaXMuaXNEaXJlY3RlZCgpP3U9dGhpcy5zdWNjZXNzb3JzKHMpOnU9dGhpcy5uZWlnaGJvcnMocyksdS5sZW5ndGg9PT0wfWZpbHRlck5vZGVzKHMpe3ZhciB1PW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTt1LnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIGQ9dGhpcztBcih0aGlzLl9ub2RlcyxmdW5jdGlvbihiLHkpe3MoeSkmJnUuc2V0Tm9kZSh5LGIpfSksQXIodGhpcy5fZWRnZU9ianMsZnVuY3Rpb24oYil7dS5oYXNOb2RlKGIudikmJnUuaGFzTm9kZShiLncpJiZ1LnNldEVkZ2UoYixkLmVkZ2UoYikpfSk7dmFyIHA9e307ZnVuY3Rpb24gdihiKXt2YXIgeT1kLnBhcmVudChiKTtyZXR1cm4geT09PXZvaWQgMHx8dS5oYXNOb2RlKHkpPyhwW2JdPXkseSk6eSBpbiBwP3BbeV06dih5KX1yZXR1cm4gdGhpcy5faXNDb21wb3VuZCYmQXIodS5ub2RlcygpLGZ1bmN0aW9uKGIpe3Uuc2V0UGFyZW50KGIsdihiKSl9KSx1fXNldERlZmF1bHRFZGdlTGFiZWwocyl7cmV0dXJuIGdEKHMpfHwocz15RChzKSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXMsdGhpc31lZGdlQ291bnQoKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fWVkZ2VzKCl7cmV0dXJuICQ3KHRoaXMuX2VkZ2VPYmpzKX1zZXRQYXRoKHMsdSl7dmFyIGQ9dGhpcyxwPWFyZ3VtZW50cztyZXR1cm4gVFIocyxmdW5jdGlvbih2LGIpe3JldHVybiBwLmxlbmd0aD4xP2Quc2V0RWRnZSh2LGIsdSk6ZC5zZXRFZGdlKHYsYiksYn0pLHRoaXN9c2V0RWRnZSgpe3ZhciBzLHUsZCxwLHY9ITEsYj1hcmd1bWVudHNbMF07dHlwZW9mIGI9PSJvYmplY3QiJiZiIT09bnVsbCYmInYiaW4gYj8ocz1iLnYsdT1iLncsZD1iLm5hbWUsYXJndW1lbnRzLmxlbmd0aD09PTImJihwPWFyZ3VtZW50c1sxXSx2PSEwKSk6KHM9Yix1PWFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihwPWFyZ3VtZW50c1syXSx2PSEwKSkscz0iIitzLHU9IiIrdSxRZihkKXx8KGQ9IiIrZCk7dmFyIHk9U1IodGhpcy5faXNEaXJlY3RlZCxzLHUsZCk7aWYoTG8odGhpcy5fZWRnZUxhYmVscyx5KSlyZXR1cm4gdiYmKHRoaXMuX2VkZ2VMYWJlbHNbeV09cCksdGhpcztpZighUWYoZCkmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKHMpLHRoaXMuc2V0Tm9kZSh1KSx0aGlzLl9lZGdlTGFiZWxzW3ldPXY/cDp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4ocyx1LGQpO3ZhciBUPW5ZdCh0aGlzLl9pc0RpcmVjdGVkLHMsdSxkKTtyZXR1cm4gcz1ULnYsdT1ULncsT2JqZWN0LmZyZWV6ZShUKSx0aGlzLl9lZGdlT2Jqc1t5XT1ULEtIZSh0aGlzLl9wcmVkc1t1XSxzKSxLSGUodGhpcy5fc3Vjc1tzXSx1KSx0aGlzLl9pblt1XVt5XT1ULHRoaXMuX291dFtzXVt5XT1ULHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9ZWRnZShzLHUsZCl7dmFyIHA9YXJndW1lbnRzLmxlbmd0aD09PTE/YW1lKHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpTUih0aGlzLl9pc0RpcmVjdGVkLHMsdSxkKTtyZXR1cm4gdGhpcy5fZWRnZUxhYmVsc1twXX1oYXNFZGdlKHMsdSxkKXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPT09MT9hbWUodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlNSKHRoaXMuX2lzRGlyZWN0ZWQscyx1LGQpO3JldHVybiBMbyh0aGlzLl9lZGdlTGFiZWxzLHApfXJlbW92ZUVkZ2Uocyx1LGQpe3ZhciBwPWFyZ3VtZW50cy5sZW5ndGg9PT0xP2FtZSh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6U1IodGhpcy5faXNEaXJlY3RlZCxzLHUsZCksdj10aGlzLl9lZGdlT2Jqc1twXTtyZXR1cm4gdiYmKHM9di52LHU9di53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW3BdLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1twXSxXSGUodGhpcy5fcHJlZHNbdV0scyksV0hlKHRoaXMuX3N1Y3Nbc10sdSksZGVsZXRlIHRoaXMuX2luW3VdW3BdLGRlbGV0ZSB0aGlzLl9vdXRbc11bcF0sdGhpcy5fZWRnZUNvdW50LS0pLHRoaXN9aW5FZGdlcyhzLHUpe3ZhciBkPXRoaXMuX2luW3NdO2lmKGQpe3ZhciBwPSQ3KGQpO3JldHVybiB1P2o3KHAsZnVuY3Rpb24odil7cmV0dXJuIHYudj09PXV9KTpwfX1vdXRFZGdlcyhzLHUpe3ZhciBkPXRoaXMuX291dFtzXTtpZihkKXt2YXIgcD0kNyhkKTtyZXR1cm4gdT9qNyhwLGZ1bmN0aW9uKHYpe3JldHVybiB2Lnc9PT11fSk6cH19bm9kZUVkZ2VzKHMsdSl7dmFyIGQ9dGhpcy5pbkVkZ2VzKHMsdSk7aWYoZClyZXR1cm4gZC5jb25jYXQodGhpcy5vdXRFZGdlcyhzLHUpKX19QjAucHJvdG90eXBlLl9ub2RlQ291bnQ9MCxCMC5wcm90b3R5cGUuX2VkZ2VDb3VudD0wO2Z1bmN0aW9uIEtIZShpLHMpe2lbc10/aVtzXSsrOmlbc109MX1mdW5jdGlvbiBXSGUoaSxzKXstLWlbc118fGRlbGV0ZSBpW3NdfWZ1bmN0aW9uIFNSKGkscyx1LGQpe3ZhciBwPSIiK3Msdj0iIit1O2lmKCFpJiZwPnYpe3ZhciBiPXA7cD12LHY9Yn1yZXR1cm4gcCtHSGUrditHSGUrKFFmKGQpP3RZdDpkKX1mdW5jdGlvbiBuWXQoaSxzLHUsZCl7dmFyIHA9IiIrcyx2PSIiK3U7aWYoIWkmJnA+dil7dmFyIGI9cDtwPXYsdj1ifXZhciB5PXt2OnAsdzp2fTtyZXR1cm4gZCYmKHkubmFtZT1kKSx5fWZ1bmN0aW9uIGFtZShpLHMpe3JldHVybiBTUihpLHMudixzLncscy5uYW1lKX1jbGFzcyByWXR7Y29uc3RydWN0b3IoKXt2YXIgcz17fTtzLl9uZXh0PXMuX3ByZXY9cyx0aGlzLl9zZW50aW5lbD1zfWRlcXVldWUoKXt2YXIgcz10aGlzLl9zZW50aW5lbCx1PXMuX3ByZXY7aWYodSE9PXMpcmV0dXJuIFlIZSh1KSx1fWVucXVldWUocyl7dmFyIHU9dGhpcy5fc2VudGluZWw7cy5fcHJldiYmcy5fbmV4dCYmWUhlKHMpLHMuX25leHQ9dS5fbmV4dCx1Ll9uZXh0Ll9wcmV2PXMsdS5fbmV4dD1zLHMuX3ByZXY9dX10b1N0cmluZygpe2Zvcih2YXIgcz1bXSx1PXRoaXMuX3NlbnRpbmVsLGQ9dS5fcHJldjtkIT09dTspcy5wdXNoKEpTT04uc3RyaW5naWZ5KGQsaVl0KSksZD1kLl9wcmV2O3JldHVybiJbIitzLmpvaW4oIiwgIikrIl0ifX1mdW5jdGlvbiBZSGUoaSl7aS5fcHJldi5fbmV4dD1pLl9uZXh0LGkuX25leHQuX3ByZXY9aS5fcHJldixkZWxldGUgaS5fbmV4dCxkZWxldGUgaS5fcHJldn1mdW5jdGlvbiBpWXQoaSxzKXtpZihpIT09Il9uZXh0IiYmaSE9PSJfcHJldiIpcmV0dXJuIHN9dmFyIHNZdD15RCgxKTtmdW5jdGlvbiBhWXQoaSxzKXtpZihpLm5vZGVDb3VudCgpPD0xKXJldHVybltdO3ZhciB1PWNZdChpLHN8fHNZdCksZD1vWXQodS5ncmFwaCx1LmJ1Y2tldHMsdS56ZXJvSWR4KTtyZXR1cm4gakQoUDAoZCxmdW5jdGlvbihwKXtyZXR1cm4gaS5vdXRFZGdlcyhwLnYscC53KX0pKX1mdW5jdGlvbiBvWXQoaSxzLHUpe2Zvcih2YXIgZD1bXSxwPXNbcy5sZW5ndGgtMV0sdj1zWzBdLGI7aS5ub2RlQ291bnQoKTspe2Zvcig7Yj12LmRlcXVldWUoKTspb21lKGkscyx1LGIpO2Zvcig7Yj1wLmRlcXVldWUoKTspb21lKGkscyx1LGIpO2lmKGkubm9kZUNvdW50KCkpe2Zvcih2YXIgeT1zLmxlbmd0aC0yO3k+MDstLXkpaWYoYj1zW3ldLmRlcXVldWUoKSxiKXtkPWQuY29uY2F0KG9tZShpLHMsdSxiLCEwKSk7YnJlYWt9fX1yZXR1cm4gZH1mdW5jdGlvbiBvbWUoaSxzLHUsZCxwKXt2YXIgdj1wP1tdOnZvaWQgMDtyZXR1cm4gQXIoaS5pbkVkZ2VzKGQudiksZnVuY3Rpb24oYil7dmFyIHk9aS5lZGdlKGIpLFQ9aS5ub2RlKGIudik7cCYmdi5wdXNoKHt2OmIudix3OmIud30pLFQub3V0LT15LGNtZShzLHUsVCl9KSxBcihpLm91dEVkZ2VzKGQudiksZnVuY3Rpb24oYil7dmFyIHk9aS5lZGdlKGIpLFQ9Yi53LF89aS5ub2RlKFQpO18uaW4tPXksY21lKHMsdSxfKX0pLGkucmVtb3ZlTm9kZShkLnYpLHZ9ZnVuY3Rpb24gY1l0KGkscyl7dmFyIHU9bmV3IEIwLGQ9MCxwPTA7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHkpe3Uuc2V0Tm9kZSh5LHt2OnksaW46MCxvdXQ6MH0pfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKHkpe3ZhciBUPXUuZWRnZSh5LnYseS53KXx8MCxfPXMoeSksQT1UK187dS5zZXRFZGdlKHkudix5LncsQSkscD1NYXRoLm1heChwLHUubm9kZSh5LnYpLm91dCs9XyksZD1NYXRoLm1heChkLHUubm9kZSh5LncpLmluKz1fKX0pO3ZhciB2PUdDKHArZCszKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJZdH0pLGI9ZCsxO3JldHVybiBBcih1Lm5vZGVzKCksZnVuY3Rpb24oeSl7Y21lKHYsYix1Lm5vZGUoeSkpfSkse2dyYXBoOnUsYnVja2V0czp2LHplcm9JZHg6Yn19ZnVuY3Rpb24gY21lKGkscyx1KXt1Lm91dD91LmluP2lbdS5vdXQtdS5pbitzXS5lbnF1ZXVlKHUpOmlbaS5sZW5ndGgtMV0uZW5xdWV1ZSh1KTppWzBdLmVucXVldWUodSl9ZnVuY3Rpb24gdVl0KGkpe3ZhciBzPWkuZ3JhcGgoKS5hY3ljbGljZXI9PT0iZ3JlZWR5Ij9hWXQoaSx1KGkpKTpsWXQoaSk7QXIocyxmdW5jdGlvbihkKXt2YXIgcD1pLmVkZ2UoZCk7aS5yZW1vdmVFZGdlKGQpLHAuZm9yd2FyZE5hbWU9ZC5uYW1lLHAucmV2ZXJzZWQ9ITAsaS5zZXRFZGdlKGQudyxkLnYscCxLUSgicmV2IikpfSk7ZnVuY3Rpb24gdShkKXtyZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIGQuZWRnZShwKS53ZWlnaHR9fX1mdW5jdGlvbiBsWXQoaSl7dmFyIHM9W10sdT17fSxkPXt9O2Z1bmN0aW9uIHAodil7TG8oZCx2KXx8KGRbdl09ITAsdVt2XT0hMCxBcihpLm91dEVkZ2VzKHYpLGZ1bmN0aW9uKGIpe0xvKHUsYi53KT9zLnB1c2goYik6cChiLncpfSksZGVsZXRlIHVbdl0pfXJldHVybiBBcihpLm5vZGVzKCkscCksc31mdW5jdGlvbiBoWXQoaSl7QXIoaS5lZGdlcygpLGZ1bmN0aW9uKHMpe3ZhciB1PWkuZWRnZShzKTtpZih1LnJldmVyc2VkKXtpLnJlbW92ZUVkZ2Uocyk7dmFyIGQ9dS5mb3J3YXJkTmFtZTtkZWxldGUgdS5yZXZlcnNlZCxkZWxldGUgdS5mb3J3YXJkTmFtZSxpLnNldEVkZ2Uocy53LHMudix1LGQpfX0pfWZ1bmN0aW9uIHpEKGkscyx1LGQpe3ZhciBwO2RvIHA9S1EoZCk7d2hpbGUoaS5oYXNOb2RlKHApKTtyZXR1cm4gdS5kdW1teT1zLGkuc2V0Tm9kZShwLHUpLHB9ZnVuY3Rpb24gZll0KGkpe3ZhciBzPW5ldyBCMCgpLnNldEdyYXBoKGkuZ3JhcGgoKSk7cmV0dXJuIEFyKGkubm9kZXMoKSxmdW5jdGlvbih1KXtzLnNldE5vZGUodSxpLm5vZGUodSkpfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKHUpe3ZhciBkPXMuZWRnZSh1LnYsdS53KXx8e3dlaWdodDowLG1pbmxlbjoxfSxwPWkuZWRnZSh1KTtzLnNldEVkZ2UodS52LHUudyx7d2VpZ2h0OmQud2VpZ2h0K3Aud2VpZ2h0LG1pbmxlbjpNYXRoLm1heChkLm1pbmxlbixwLm1pbmxlbil9KX0pLHN9ZnVuY3Rpb24gWEhlKGkpe3ZhciBzPW5ldyBCMCh7bXVsdGlncmFwaDppLmlzTXVsdGlncmFwaCgpfSkuc2V0R3JhcGgoaS5ncmFwaCgpKTtyZXR1cm4gQXIoaS5ub2RlcygpLGZ1bmN0aW9uKHUpe2kuY2hpbGRyZW4odSkubGVuZ3RofHxzLnNldE5vZGUodSxpLm5vZGUodSkpfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKHUpe3Muc2V0RWRnZSh1LGkuZWRnZSh1KSl9KSxzfWZ1bmN0aW9uIFFIZShpLHMpe3ZhciB1PWkueCxkPWkueSxwPXMueC11LHY9cy55LWQsYj1pLndpZHRoLzIseT1pLmhlaWdodC8yO2lmKCFwJiYhdil0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3ZhciBULF87cmV0dXJuIE1hdGguYWJzKHYpKmI+TWF0aC5hYnMocCkqeT8odjwwJiYoeT0teSksVD15KnAvdixfPXkpOihwPDAmJihiPS1iKSxUPWIsXz1iKnYvcCkse3g6dStULHk6ZCtffX1mdW5jdGlvbiBXUShpKXt2YXIgcz1QMChHQyhaSGUoaSkrMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO3JldHVybiBBcihpLm5vZGVzKCksZnVuY3Rpb24odSl7dmFyIGQ9aS5ub2RlKHUpLHA9ZC5yYW5rO1FmKHApfHwoc1twXVtkLm9yZGVyXT11KX0pLHN9ZnVuY3Rpb24gZFl0KGkpe3ZhciBzPWtSKFAwKGkubm9kZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gaS5ub2RlKHUpLnJhbmt9KSk7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHUpe3ZhciBkPWkubm9kZSh1KTtMbyhkLCJyYW5rIikmJihkLnJhbmstPXMpfSl9ZnVuY3Rpb24gZ1l0KGkpe3ZhciBzPWtSKFAwKGkubm9kZXMoKSxmdW5jdGlvbih2KXtyZXR1cm4gaS5ub2RlKHYpLnJhbmt9KSksdT1bXTtBcihpLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIGI9aS5ub2RlKHYpLnJhbmstczt1W2JdfHwodVtiXT1bXSksdVtiXS5wdXNoKHYpfSk7dmFyIGQ9MCxwPWkuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtBcih1LGZ1bmN0aW9uKHYsYil7UWYodikmJmIlcCE9PTA/LS1kOmQmJkFyKHYsZnVuY3Rpb24oeSl7aS5ub2RlKHkpLnJhbmsrPWR9KX0pfWZ1bmN0aW9uIEpIZShpLHMsdSxkKXt2YXIgcD17d2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTQmJihwLnJhbms9dSxwLm9yZGVyPWQpLHpEKGksImJvcmRlciIscCxzKX1mdW5jdGlvbiBaSGUoaSl7cmV0dXJuIFVDKFAwKGkubm9kZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLm5vZGUocykucmFuaztpZighUWYodSkpcmV0dXJuIHV9KSl9ZnVuY3Rpb24gcFl0KGkscyl7dmFyIHU9e2xoczpbXSxyaHM6W119O3JldHVybiBBcihpLGZ1bmN0aW9uKGQpe3MoZCk/dS5saHMucHVzaChkKTp1LnJocy5wdXNoKGQpfSksdX1mdW5jdGlvbiBiWXQoaSxzKXt2YXIgdT1xSGUoKTt0cnl7cmV0dXJuIHMoKX1maW5hbGx5e2NvbnNvbGUubG9nKGkrIiB0aW1lOiAiKyhxSGUoKS11KSsibXMiKX19ZnVuY3Rpb24gbVl0KGkscyl7cmV0dXJuIHMoKX1mdW5jdGlvbiB2WXQoaSl7ZnVuY3Rpb24gcyh1KXt2YXIgZD1pLmNoaWxkcmVuKHUpLHA9aS5ub2RlKHUpO2lmKGQubGVuZ3RoJiZBcihkLHMpLExvKHAsIm1pblJhbmsiKSl7cC5ib3JkZXJMZWZ0PVtdLHAuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciB2PXAubWluUmFuayxiPXAubWF4UmFuaysxO3Y8YjsrK3YpZVZlKGksImJvcmRlckxlZnQiLCJfYmwiLHUscCx2KSxlVmUoaSwiYm9yZGVyUmlnaHQiLCJfYnIiLHUscCx2KX19QXIoaS5jaGlsZHJlbigpLHMpfWZ1bmN0aW9uIGVWZShpLHMsdSxkLHAsdil7dmFyIGI9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazp2LGJvcmRlclR5cGU6c30seT1wW3NdW3YtMV0sVD16RChpLCJib3JkZXIiLGIsdSk7cFtzXVt2XT1ULGkuc2V0UGFyZW50KFQsZCkseSYmaS5zZXRFZGdlKHksVCx7d2VpZ2h0OjF9KX1mdW5jdGlvbiB3WXQoaSl7dmFyIHM9aS5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsocz09PSJsciJ8fHM9PT0icmwiKSYmdFZlKGkpfWZ1bmN0aW9uIHlZdChpKXt2YXIgcz1pLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyhzPT09ImJ0Inx8cz09PSJybCIpJiZ4WXQoaSksKHM9PT0ibHIifHxzPT09InJsIikmJihrWXQoaSksdFZlKGkpKX1mdW5jdGlvbiB0VmUoaSl7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHMpe25WZShpLm5vZGUocykpfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKHMpe25WZShpLmVkZ2UocykpfSl9ZnVuY3Rpb24gblZlKGkpe3ZhciBzPWkud2lkdGg7aS53aWR0aD1pLmhlaWdodCxpLmhlaWdodD1zfWZ1bmN0aW9uIHhZdChpKXtBcihpLm5vZGVzKCksZnVuY3Rpb24ocyl7dW1lKGkubm9kZShzKSl9KSxBcihpLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIHU9aS5lZGdlKHMpO0FyKHUucG9pbnRzLHVtZSksTG8odSwieSIpJiZ1bWUodSl9KX1mdW5jdGlvbiB1bWUoaSl7aS55PS1pLnl9ZnVuY3Rpb24ga1l0KGkpe0FyKGkubm9kZXMoKSxmdW5jdGlvbihzKXtsbWUoaS5ub2RlKHMpKX0pLEFyKGkuZWRnZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLmVkZ2Uocyk7QXIodS5wb2ludHMsbG1lKSxMbyh1LCJ4IikmJmxtZSh1KX0pfWZ1bmN0aW9uIGxtZShpKXt2YXIgcz1pLng7aS54PWkueSxpLnk9c31mdW5jdGlvbiBFWXQoaSl7aS5ncmFwaCgpLmR1bW15Q2hhaW5zPVtdLEFyKGkuZWRnZXMoKSxmdW5jdGlvbihzKXtUWXQoaSxzKX0pfWZ1bmN0aW9uIFRZdChpLHMpe3ZhciB1PXMudixkPWkubm9kZSh1KS5yYW5rLHA9cy53LHY9aS5ub2RlKHApLnJhbmssYj1zLm5hbWUseT1pLmVkZ2UocyksVD15LmxhYmVsUmFuaztpZih2IT09ZCsxKXtpLnJlbW92ZUVkZ2Uocyk7dmFyIF8sQSxQO2ZvcihQPTAsKytkO2Q8djsrK1AsKytkKXkucG9pbnRzPVtdLEE9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOnksZWRnZU9iajpzLHJhbms6ZH0sXz16RChpLCJlZGdlIixBLCJfZCIpLGQ9PT1UJiYoQS53aWR0aD15LndpZHRoLEEuaGVpZ2h0PXkuaGVpZ2h0LEEuZHVtbXk9ImVkZ2UtbGFiZWwiLEEubGFiZWxwb3M9eS5sYWJlbHBvcyksaS5zZXRFZGdlKHUsXyx7d2VpZ2h0Onkud2VpZ2h0fSxiKSxQPT09MCYmaS5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goXyksdT1fO2kuc2V0RWRnZSh1LHAse3dlaWdodDp5LndlaWdodH0sYil9fWZ1bmN0aW9uIENZdChpKXtBcihpLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24ocyl7dmFyIHU9aS5ub2RlKHMpLGQ9dS5lZGdlTGFiZWwscDtmb3IoaS5zZXRFZGdlKHUuZWRnZU9iaixkKTt1LmR1bW15OylwPWkuc3VjY2Vzc29ycyhzKVswXSxpLnJlbW92ZU5vZGUocyksZC5wb2ludHMucHVzaCh7eDp1LngseTp1Lnl9KSx1LmR1bW15PT09ImVkZ2UtbGFiZWwiJiYoZC54PXUueCxkLnk9dS55LGQud2lkdGg9dS53aWR0aCxkLmhlaWdodD11LmhlaWdodCkscz1wLHU9aS5ub2RlKHMpfSl9ZnVuY3Rpb24gaG1lKGkpe3ZhciBzPXt9O2Z1bmN0aW9uIHUoZCl7dmFyIHA9aS5ub2RlKGQpO2lmKExvKHMsZCkpcmV0dXJuIHAucmFuaztzW2RdPSEwO3ZhciB2PWtSKFAwKGkub3V0RWRnZXMoZCksZnVuY3Rpb24oYil7cmV0dXJuIHUoYi53KS1pLmVkZ2UoYikubWlubGVufSkpO3JldHVybih2PT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfHx2PT09dm9pZCAwfHx2PT09bnVsbCkmJih2PTApLHAucmFuaz12fUFyKGkuc291cmNlcygpLHUpfWZ1bmN0aW9uIF9SKGkscyl7cmV0dXJuIGkubm9kZShzLncpLnJhbmstaS5ub2RlKHMudikucmFuay1pLmVkZ2UocykubWlubGVufWZ1bmN0aW9uIHJWZShpKXt2YXIgcz1uZXcgQjAoe2RpcmVjdGVkOiExfSksdT1pLm5vZGVzKClbMF0sZD1pLm5vZGVDb3VudCgpO3Muc2V0Tm9kZSh1LHt9KTtmb3IodmFyIHAsdjtTWXQocyxpKTxkOylwPV9ZdChzLGkpLHY9cy5oYXNOb2RlKHAudik/X1IoaSxwKTotX1IoaSxwKSxBWXQocyxpLHYpO3JldHVybiBzfWZ1bmN0aW9uIFNZdChpLHMpe2Z1bmN0aW9uIHUoZCl7QXIocy5ub2RlRWRnZXMoZCksZnVuY3Rpb24ocCl7dmFyIHY9cC52LGI9ZD09PXY/cC53OnY7IWkuaGFzTm9kZShiKSYmIV9SKHMscCkmJihpLnNldE5vZGUoYix7fSksaS5zZXRFZGdlKGQsYix7fSksdShiKSl9KX1yZXR1cm4gQXIoaS5ub2RlcygpLHUpLGkubm9kZUNvdW50KCl9ZnVuY3Rpb24gX1l0KGkscyl7cmV0dXJuIHNtZShzLmVkZ2VzKCksZnVuY3Rpb24odSl7aWYoaS5oYXNOb2RlKHUudikhPT1pLmhhc05vZGUodS53KSlyZXR1cm4gX1Iocyx1KX0pfWZ1bmN0aW9uIEFZdChpLHMsdSl7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKGQpe3Mubm9kZShkKS5yYW5rKz11fSl9ZnVuY3Rpb24gTFl0KCl7fUxZdC5wcm90b3R5cGU9bmV3IEVycm9yO2Z1bmN0aW9uIGlWZShpLHMsdSl7RDAocyl8fChzPVtzXSk7dmFyIGQ9KGkuaXNEaXJlY3RlZCgpP2kuc3VjY2Vzc29yczppLm5laWdoYm9ycykuYmluZChpKSxwPVtdLHY9e307cmV0dXJuIEFyKHMsZnVuY3Rpb24oYil7aWYoIWkuaGFzTm9kZShiKSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIitiKTtzVmUoaSxiLHU9PT0icG9zdCIsdixkLHApfSkscH1mdW5jdGlvbiBzVmUoaSxzLHUsZCxwLHYpe0xvKGQscyl8fChkW3NdPSEwLHV8fHYucHVzaChzKSxBcihwKHMpLGZ1bmN0aW9uKGIpe3NWZShpLGIsdSxkLHAsdil9KSx1JiZ2LnB1c2gocykpfWZ1bmN0aW9uIE1ZdChpLHMpe3JldHVybiBpVmUoaSxzLCJwb3N0Iil9ZnVuY3Rpb24gRFl0KGkscyl7cmV0dXJuIGlWZShpLHMsInByZSIpfVdDLmluaXRMb3dMaW1WYWx1ZXM9ZG1lLFdDLmluaXRDdXRWYWx1ZXM9Zm1lLFdDLmNhbGNDdXRWYWx1ZT1hVmUsV0MubGVhdmVFZGdlPWNWZSxXQy5lbnRlckVkZ2U9dVZlLFdDLmV4Y2hhbmdlRWRnZXM9bFZlO2Z1bmN0aW9uIFdDKGkpe2k9Zll0KGkpLGhtZShpKTt2YXIgcz1yVmUoaSk7ZG1lKHMpLGZtZShzLGkpO2Zvcih2YXIgdSxkO3U9Y1ZlKHMpOylkPXVWZShzLGksdSksbFZlKHMsaSx1LGQpfWZ1bmN0aW9uIGZtZShpLHMpe3ZhciB1PU1ZdChpLGkubm9kZXMoKSk7dT11LnNsaWNlKDAsdS5sZW5ndGgtMSksQXIodSxmdW5jdGlvbihkKXtJWXQoaSxzLGQpfSl9ZnVuY3Rpb24gSVl0KGkscyx1KXt2YXIgZD1pLm5vZGUodSkscD1kLnBhcmVudDtpLmVkZ2UodSxwKS5jdXR2YWx1ZT1hVmUoaSxzLHUpfWZ1bmN0aW9uIGFWZShpLHMsdSl7dmFyIGQ9aS5ub2RlKHUpLHA9ZC5wYXJlbnQsdj0hMCxiPXMuZWRnZSh1LHApLHk9MDtyZXR1cm4gYnx8KHY9ITEsYj1zLmVkZ2UocCx1KSkseT1iLndlaWdodCxBcihzLm5vZGVFZGdlcyh1KSxmdW5jdGlvbihUKXt2YXIgXz1ULnY9PT11LEE9Xz9ULnc6VC52O2lmKEEhPT1wKXt2YXIgUD1fPT09dixSPXMuZWRnZShUKS53ZWlnaHQ7aWYoeSs9UD9SOi1SLE5ZdChpLHUsQSkpe3ZhciBGPWkuZWRnZSh1LEEpLmN1dHZhbHVlO3krPVA/LUY6Rn19fSkseX1mdW5jdGlvbiBkbWUoaSxzKXthcmd1bWVudHMubGVuZ3RoPDImJihzPWkubm9kZXMoKVswXSksb1ZlKGkse30sMSxzKX1mdW5jdGlvbiBvVmUoaSxzLHUsZCxwKXt2YXIgdj11LGI9aS5ub2RlKGQpO3JldHVybiBzW2RdPSEwLEFyKGkubmVpZ2hib3JzKGQpLGZ1bmN0aW9uKHkpe0xvKHMseSl8fCh1PW9WZShpLHMsdSx5LGQpKX0pLGIubG93PXYsYi5saW09dSsrLHA/Yi5wYXJlbnQ9cDpkZWxldGUgYi5wYXJlbnQsdX1mdW5jdGlvbiBjVmUoaSl7cmV0dXJuIHJtZShpLmVkZ2VzKCksZnVuY3Rpb24ocyl7cmV0dXJuIGkuZWRnZShzKS5jdXR2YWx1ZTwwfSl9ZnVuY3Rpb24gdVZlKGkscyx1KXt2YXIgZD11LnYscD11Lnc7cy5oYXNFZGdlKGQscCl8fChkPXUudyxwPXUudik7dmFyIHY9aS5ub2RlKGQpLGI9aS5ub2RlKHApLHk9dixUPSExO3YubGltPmIubGltJiYoeT1iLFQ9ITApO3ZhciBfPWo3KHMuZWRnZXMoKSxmdW5jdGlvbihBKXtyZXR1cm4gVD09PWhWZShpLGkubm9kZShBLnYpLHkpJiZUIT09aFZlKGksaS5ub2RlKEEudykseSl9KTtyZXR1cm4gc21lKF8sZnVuY3Rpb24oQSl7cmV0dXJuIF9SKHMsQSl9KX1mdW5jdGlvbiBsVmUoaSxzLHUsZCl7dmFyIHA9dS52LHY9dS53O2kucmVtb3ZlRWRnZShwLHYpLGkuc2V0RWRnZShkLnYsZC53LHt9KSxkbWUoaSksZm1lKGkscyksT1l0KGkscyl9ZnVuY3Rpb24gT1l0KGkscyl7dmFyIHU9cm1lKGkubm9kZXMoKSxmdW5jdGlvbihwKXtyZXR1cm4hcy5ub2RlKHApLnBhcmVudH0pLGQ9RFl0KGksdSk7ZD1kLnNsaWNlKDEpLEFyKGQsZnVuY3Rpb24ocCl7dmFyIHY9aS5ub2RlKHApLnBhcmVudCxiPXMuZWRnZShwLHYpLHk9ITE7Ynx8KGI9cy5lZGdlKHYscCkseT0hMCkscy5ub2RlKHApLnJhbms9cy5ub2RlKHYpLnJhbmsrKHk/Yi5taW5sZW46LWIubWlubGVuKX0pfWZ1bmN0aW9uIE5ZdChpLHMsdSl7cmV0dXJuIGkuaGFzRWRnZShzLHUpfWZ1bmN0aW9uIGhWZShpLHMsdSl7cmV0dXJuIHUubG93PD1zLmxpbSYmcy5saW08PXUubGltfWZ1bmN0aW9uIFBZdChpKXtzd2l0Y2goaS5ncmFwaCgpLnJhbmtlcil7Y2FzZSJuZXR3b3JrLXNpbXBsZXgiOmZWZShpKTticmVhaztjYXNlInRpZ2h0LXRyZWUiOkZZdChpKTticmVhaztjYXNlImxvbmdlc3QtcGF0aCI6Qll0KGkpO2JyZWFrO2RlZmF1bHQ6ZlZlKGkpfX12YXIgQll0PWhtZTtmdW5jdGlvbiBGWXQoaSl7aG1lKGkpLHJWZShpKX1mdW5jdGlvbiBmVmUoaSl7V0MoaSl9ZnVuY3Rpb24gUll0KGkpe3ZhciBzPXpEKGksInJvb3QiLHt9LCJfcm9vdCIpLHU9all0KGkpLGQ9VUMoJDcodSkpLTEscD0yKmQrMTtpLmdyYXBoKCkubmVzdGluZ1Jvb3Q9cyxBcihpLmVkZ2VzKCksZnVuY3Rpb24oYil7aS5lZGdlKGIpLm1pbmxlbio9cH0pO3ZhciB2PSRZdChpKSsxO0FyKGkuY2hpbGRyZW4oKSxmdW5jdGlvbihiKXtkVmUoaSxzLHAsdixkLHUsYil9KSxpLmdyYXBoKCkubm9kZVJhbmtGYWN0b3I9cH1mdW5jdGlvbiBkVmUoaSxzLHUsZCxwLHYsYil7dmFyIHk9aS5jaGlsZHJlbihiKTtpZigheS5sZW5ndGgpe2IhPT1zJiZpLnNldEVkZ2UocyxiLHt3ZWlnaHQ6MCxtaW5sZW46dX0pO3JldHVybn12YXIgVD1KSGUoaSwiX2J0IiksXz1KSGUoaSwiX2JiIiksQT1pLm5vZGUoYik7aS5zZXRQYXJlbnQoVCxiKSxBLmJvcmRlclRvcD1ULGkuc2V0UGFyZW50KF8sYiksQS5ib3JkZXJCb3R0b209XyxBcih5LGZ1bmN0aW9uKFApe2RWZShpLHMsdSxkLHAsdixQKTt2YXIgUj1pLm5vZGUoUCksRj1SLmJvcmRlclRvcD9SLmJvcmRlclRvcDpQLGo9Ui5ib3JkZXJCb3R0b20/Ui5ib3JkZXJCb3R0b206UCxLPVIuYm9yZGVyVG9wP2Q6MipkLGVlPUYhPT1qPzE6cC12W2JdKzE7aS5zZXRFZGdlKFQsRix7d2VpZ2h0OkssbWlubGVuOmVlLG5lc3RpbmdFZGdlOiEwfSksaS5zZXRFZGdlKGosXyx7d2VpZ2h0OkssbWlubGVuOmVlLG5lc3RpbmdFZGdlOiEwfSl9KSxpLnBhcmVudChiKXx8aS5zZXRFZGdlKHMsVCx7d2VpZ2h0OjAsbWlubGVuOnArdltiXX0pfWZ1bmN0aW9uIGpZdChpKXt2YXIgcz17fTtmdW5jdGlvbiB1KGQscCl7dmFyIHY9aS5jaGlsZHJlbihkKTt2JiZ2Lmxlbmd0aCYmQXIodixmdW5jdGlvbihiKXt1KGIscCsxKX0pLHNbZF09cH1yZXR1cm4gQXIoaS5jaGlsZHJlbigpLGZ1bmN0aW9uKGQpe3UoZCwxKX0pLHN9ZnVuY3Rpb24gJFl0KGkpe3JldHVybiBUUihpLmVkZ2VzKCksZnVuY3Rpb24ocyx1KXtyZXR1cm4gcytpLmVkZ2UodSkud2VpZ2h0fSwwKX1mdW5jdGlvbiB6WXQoaSl7dmFyIHM9aS5ncmFwaCgpO2kucmVtb3ZlTm9kZShzLm5lc3RpbmdSb290KSxkZWxldGUgcy5uZXN0aW5nUm9vdCxBcihpLmVkZ2VzKCksZnVuY3Rpb24odSl7dmFyIGQ9aS5lZGdlKHUpO2QubmVzdGluZ0VkZ2UmJmkucmVtb3ZlRWRnZSh1KX0pfWZ1bmN0aW9uIHFZdChpLHMsdSl7dmFyIGQ9e30scDtBcih1LGZ1bmN0aW9uKHYpe2Zvcih2YXIgYj1pLnBhcmVudCh2KSx5LFQ7Yjspe2lmKHk9aS5wYXJlbnQoYikseT8oVD1kW3ldLGRbeV09Yik6KFQ9cCxwPWIpLFQmJlQhPT1iKXtzLnNldEVkZ2UoVCxiKTtyZXR1cm59Yj15fX0pfWZ1bmN0aW9uIEhZdChpLHMsdSl7dmFyIGQ9Vll0KGkpLHA9bmV3IEIwKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290OmR9KS5zZXREZWZhdWx0Tm9kZUxhYmVsKGZ1bmN0aW9uKHYpe3JldHVybiBpLm5vZGUodil9KTtyZXR1cm4gQXIoaS5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBiPWkubm9kZSh2KSx5PWkucGFyZW50KHYpOyhiLnJhbms9PT1zfHxiLm1pblJhbms8PXMmJnM8PWIubWF4UmFuaykmJihwLnNldE5vZGUodikscC5zZXRQYXJlbnQodix5fHxkKSxBcihpW3VdKHYpLGZ1bmN0aW9uKFQpe3ZhciBfPVQudj09PXY/VC53OlQudixBPXAuZWRnZShfLHYpLFA9UWYoQSk/MDpBLndlaWdodDtwLnNldEVkZ2UoXyx2LHt3ZWlnaHQ6aS5lZGdlKFQpLndlaWdodCtQfSl9KSxMbyhiLCJtaW5SYW5rIikmJnAuc2V0Tm9kZSh2LHtib3JkZXJMZWZ0OmIuYm9yZGVyTGVmdFtzXSxib3JkZXJSaWdodDpiLmJvcmRlclJpZ2h0W3NdfSkpfSkscH1mdW5jdGlvbiBWWXQoaSl7Zm9yKHZhciBzO2kuaGFzTm9kZShzPUtRKCJfcm9vdCIpKTspO3JldHVybiBzfWZ1bmN0aW9uIFVZdChpLHMpe2Zvcih2YXIgdT0wLGQ9MTtkPHMubGVuZ3RoOysrZCl1Kz1HWXQoaSxzW2QtMV0sc1tkXSk7cmV0dXJuIHV9ZnVuY3Rpb24gR1l0KGkscyx1KXtmb3IodmFyIGQ9ZVl0KHUsUDAodSxmdW5jdGlvbihfLEEpe3JldHVybiBBfSkpLHA9akQoUDAocyxmdW5jdGlvbihfKXtyZXR1cm4gQ1IoUDAoaS5vdXRFZGdlcyhfKSxmdW5jdGlvbihBKXtyZXR1cm57cG9zOmRbQS53XSx3ZWlnaHQ6aS5lZGdlKEEpLndlaWdodH19KSwicG9zIil9KSksdj0xO3Y8dS5sZW5ndGg7KXY8PD0xO3ZhciBiPTIqdi0xO3YtPTE7dmFyIHk9UDAobmV3IEFycmF5KGIpLGZ1bmN0aW9uKCl7cmV0dXJuIDB9KSxUPTA7cmV0dXJuIEFyKHAuZm9yRWFjaChmdW5jdGlvbihfKXt2YXIgQT1fLnBvcyt2O3lbQV0rPV8ud2VpZ2h0O2Zvcih2YXIgUD0wO0E+MDspQSUyJiYoUCs9eVtBKzFdKSxBPUEtMT4+MSx5W0FdKz1fLndlaWdodDtUKz1fLndlaWdodCpQfSkpLFR9ZnVuY3Rpb24gS1l0KGkpe3ZhciBzPXt9LHU9ajcoaS5ub2RlcygpLGZ1bmN0aW9uKHkpe3JldHVybiFpLmNoaWxkcmVuKHkpLmxlbmd0aH0pLGQ9VUMoUDAodSxmdW5jdGlvbih5KXtyZXR1cm4gaS5ub2RlKHkpLnJhbmt9KSkscD1QMChHQyhkKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtmdW5jdGlvbiB2KHkpe2lmKCFMbyhzLHkpKXtzW3ldPSEwO3ZhciBUPWkubm9kZSh5KTtwW1QucmFua10ucHVzaCh5KSxBcihpLnN1Y2Nlc3NvcnMoeSksdil9fXZhciBiPUNSKHUsZnVuY3Rpb24oeSl7cmV0dXJuIGkubm9kZSh5KS5yYW5rfSk7cmV0dXJuIEFyKGIsdikscH1mdW5jdGlvbiBXWXQoaSxzKXtyZXR1cm4gUDAocyxmdW5jdGlvbih1KXt2YXIgZD1pLmluRWRnZXModSk7aWYoZC5sZW5ndGgpe3ZhciBwPVRSKGQsZnVuY3Rpb24odixiKXt2YXIgeT1pLmVkZ2UoYiksVD1pLm5vZGUoYi52KTtyZXR1cm57c3VtOnYuc3VtK3kud2VpZ2h0KlQub3JkZXIsd2VpZ2h0OnYud2VpZ2h0K3kud2VpZ2h0fX0se3N1bTowLHdlaWdodDowfSk7cmV0dXJue3Y6dSxiYXJ5Y2VudGVyOnAuc3VtL3Aud2VpZ2h0LHdlaWdodDpwLndlaWdodH19ZWxzZSByZXR1cm57djp1fX0pfWZ1bmN0aW9uIFlZdChpLHMpe3ZhciB1PXt9O0FyKGksZnVuY3Rpb24ocCx2KXt2YXIgYj11W3Audl09e2luZGVncmVlOjAsaW46W10sb3V0OltdLHZzOltwLnZdLGk6dn07UWYocC5iYXJ5Y2VudGVyKXx8KGIuYmFyeWNlbnRlcj1wLmJhcnljZW50ZXIsYi53ZWlnaHQ9cC53ZWlnaHQpfSksQXIocy5lZGdlcygpLGZ1bmN0aW9uKHApe3ZhciB2PXVbcC52XSxiPXVbcC53XTshUWYodikmJiFRZihiKSYmKGIuaW5kZWdyZWUrKyx2Lm91dC5wdXNoKHVbcC53XSkpfSk7dmFyIGQ9ajcodSxmdW5jdGlvbihwKXtyZXR1cm4hcC5pbmRlZ3JlZX0pO3JldHVybiBYWXQoZCl9ZnVuY3Rpb24gWFl0KGkpe3ZhciBzPVtdO2Z1bmN0aW9uIHUodil7cmV0dXJuIGZ1bmN0aW9uKGIpe2IubWVyZ2VkfHwoUWYoYi5iYXJ5Y2VudGVyKXx8UWYodi5iYXJ5Y2VudGVyKXx8Yi5iYXJ5Y2VudGVyPj12LmJhcnljZW50ZXIpJiZRWXQodixiKX19ZnVuY3Rpb24gZCh2KXtyZXR1cm4gZnVuY3Rpb24oYil7Yi5pbi5wdXNoKHYpLC0tYi5pbmRlZ3JlZT09PTAmJmkucHVzaChiKX19Zm9yKDtpLmxlbmd0aDspe3ZhciBwPWkucG9wKCk7cy5wdXNoKHApLEFyKHAuaW4ucmV2ZXJzZSgpLHUocCkpLEFyKHAub3V0LGQocCkpfXJldHVybiBQMChqNyhzLGZ1bmN0aW9uKHYpe3JldHVybiF2Lm1lcmdlZH0pLGZ1bmN0aW9uKHYpe3JldHVybiBFUih2LFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pfWZ1bmN0aW9uIFFZdChpLHMpe3ZhciB1PTAsZD0wO2kud2VpZ2h0JiYodSs9aS5iYXJ5Y2VudGVyKmkud2VpZ2h0LGQrPWkud2VpZ2h0KSxzLndlaWdodCYmKHUrPXMuYmFyeWNlbnRlcipzLndlaWdodCxkKz1zLndlaWdodCksaS52cz1zLnZzLmNvbmNhdChpLnZzKSxpLmJhcnljZW50ZXI9dS9kLGkud2VpZ2h0PWQsaS5pPU1hdGgubWluKHMuaSxpLmkpLHMubWVyZ2VkPSEwfWZ1bmN0aW9uIEpZdChpLHMpe3ZhciB1PXBZdChpLGZ1bmN0aW9uKEEpe3JldHVybiBMbyhBLCJiYXJ5Y2VudGVyIil9KSxkPXUubGhzLHA9Q1IodS5yaHMsZnVuY3Rpb24oQSl7cmV0dXJuLUEuaX0pLHY9W10sYj0wLHk9MCxUPTA7ZC5zb3J0KFpZdCghIXMpKSxUPWdWZSh2LHAsVCksQXIoZCxmdW5jdGlvbihBKXtUKz1BLnZzLmxlbmd0aCx2LnB1c2goQS52cyksYis9QS5iYXJ5Y2VudGVyKkEud2VpZ2h0LHkrPUEud2VpZ2h0LFQ9Z1ZlKHYscCxUKX0pO3ZhciBfPXt2czpqRCh2KX07cmV0dXJuIHkmJihfLmJhcnljZW50ZXI9Yi95LF8ud2VpZ2h0PXkpLF99ZnVuY3Rpb24gZ1ZlKGkscyx1KXtmb3IodmFyIGQ7cy5sZW5ndGgmJihkPVVRKHMpKS5pPD11OylzLnBvcCgpLGkucHVzaChkLnZzKSx1Kys7cmV0dXJuIHV9ZnVuY3Rpb24gWll0KGkpe3JldHVybiBmdW5jdGlvbihzLHUpe3JldHVybiBzLmJhcnljZW50ZXI8dS5iYXJ5Y2VudGVyPy0xOnMuYmFyeWNlbnRlcj51LmJhcnljZW50ZXI/MTppP3UuaS1zLmk6cy5pLXUuaX19ZnVuY3Rpb24gcFZlKGkscyx1LGQpe3ZhciBwPWkuY2hpbGRyZW4ocyksdj1pLm5vZGUocyksYj12P3YuYm9yZGVyTGVmdDp2b2lkIDAseT12P3YuYm9yZGVyUmlnaHQ6dm9pZCAwLFQ9e307YiYmKHA9ajcocCxmdW5jdGlvbihqKXtyZXR1cm4gaiE9PWImJmohPT15fSkpO3ZhciBfPVdZdChpLHApO0FyKF8sZnVuY3Rpb24oail7aWYoaS5jaGlsZHJlbihqLnYpLmxlbmd0aCl7dmFyIEs9cFZlKGksai52LHUsZCk7VFtqLnZdPUssTG8oSywiYmFyeWNlbnRlciIpJiZ0WHQoaixLKX19KTt2YXIgQT1ZWXQoXyx1KTtlWHQoQSxUKTt2YXIgUD1KWXQoQSxkKTtpZihiJiYoUC52cz1qRChbYixQLnZzLHldKSxpLnByZWRlY2Vzc29ycyhiKS5sZW5ndGgpKXt2YXIgUj1pLm5vZGUoaS5wcmVkZWNlc3NvcnMoYilbMF0pLEY9aS5ub2RlKGkucHJlZGVjZXNzb3JzKHkpWzBdKTtMbyhQLCJiYXJ5Y2VudGVyIil8fChQLmJhcnljZW50ZXI9MCxQLndlaWdodD0wKSxQLmJhcnljZW50ZXI9KFAuYmFyeWNlbnRlcipQLndlaWdodCtSLm9yZGVyK0Yub3JkZXIpLyhQLndlaWdodCsyKSxQLndlaWdodCs9Mn1yZXR1cm4gUH1mdW5jdGlvbiBlWHQoaSxzKXtBcihpLGZ1bmN0aW9uKHUpe3UudnM9akQodS52cy5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIHNbZF0/c1tkXS52czpkfSkpfSl9ZnVuY3Rpb24gdFh0KGkscyl7UWYoaS5iYXJ5Y2VudGVyKT8oaS5iYXJ5Y2VudGVyPXMuYmFyeWNlbnRlcixpLndlaWdodD1zLndlaWdodCk6KGkuYmFyeWNlbnRlcj0oaS5iYXJ5Y2VudGVyKmkud2VpZ2h0K3MuYmFyeWNlbnRlcipzLndlaWdodCkvKGkud2VpZ2h0K3Mud2VpZ2h0KSxpLndlaWdodCs9cy53ZWlnaHQpfWZ1bmN0aW9uIG5YdChpKXt2YXIgcz1aSGUoaSksdT1iVmUoaSxHQygxLHMrMSksImluRWRnZXMiKSxkPWJWZShpLEdDKHMtMSwtMSwtMSksIm91dEVkZ2VzIikscD1LWXQoaSk7bVZlKGkscCk7Zm9yKHZhciB2PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxiLHk9MCxUPTA7VDw0OysreSwrK1Qpe3JYdCh5JTI/dTpkLHklND49MikscD1XUShpKTt2YXIgXz1VWXQoaSxwKTtfPHYmJihUPTAsYj1DS3QocCksdj1fKX1tVmUoaSxiKX1mdW5jdGlvbiBiVmUoaSxzLHUpe3JldHVybiBQMChzLGZ1bmN0aW9uKGQpe3JldHVybiBIWXQoaSxkLHUpfSl9ZnVuY3Rpb24gclh0KGkscyl7dmFyIHU9bmV3IEIwO0FyKGksZnVuY3Rpb24oZCl7dmFyIHA9ZC5ncmFwaCgpLnJvb3Qsdj1wVmUoZCxwLHUscyk7QXIodi52cyxmdW5jdGlvbihiLHkpe2Qubm9kZShiKS5vcmRlcj15fSkscVl0KGQsdSx2LnZzKX0pfWZ1bmN0aW9uIG1WZShpLHMpe0FyKHMsZnVuY3Rpb24odSl7QXIodSxmdW5jdGlvbihkLHApe2kubm9kZShkKS5vcmRlcj1wfSl9KX1mdW5jdGlvbiBpWHQoaSl7dmFyIHM9YVh0KGkpO0FyKGkuZ3JhcGgoKS5kdW1teUNoYWlucyxmdW5jdGlvbih1KXtmb3IodmFyIGQ9aS5ub2RlKHUpLHA9ZC5lZGdlT2JqLHY9c1h0KGkscyxwLnYscC53KSxiPXYucGF0aCx5PXYubGNhLFQ9MCxfPWJbVF0sQT0hMDt1IT09cC53Oyl7aWYoZD1pLm5vZGUodSksQSl7Zm9yKDsoXz1iW1RdKSE9PXkmJmkubm9kZShfKS5tYXhSYW5rPGQucmFuazspVCsrO189PT15JiYoQT0hMSl9aWYoIUEpe2Zvcig7VDxiLmxlbmd0aC0xJiZpLm5vZGUoXz1iW1QrMV0pLm1pblJhbms8PWQucmFuazspVCsrO189YltUXX1pLnNldFBhcmVudCh1LF8pLHU9aS5zdWNjZXNzb3JzKHUpWzBdfX0pfWZ1bmN0aW9uIHNYdChpLHMsdSxkKXt2YXIgcD1bXSx2PVtdLGI9TWF0aC5taW4oc1t1XS5sb3csc1tkXS5sb3cpLHk9TWF0aC5tYXgoc1t1XS5saW0sc1tkXS5saW0pLFQsXztUPXU7ZG8gVD1pLnBhcmVudChUKSxwLnB1c2goVCk7d2hpbGUoVCYmKHNbVF0ubG93PmJ8fHk+c1tUXS5saW0pKTtmb3IoXz1ULFQ9ZDsoVD1pLnBhcmVudChUKSkhPT1fOyl2LnB1c2goVCk7cmV0dXJue3BhdGg6cC5jb25jYXQodi5yZXZlcnNlKCkpLGxjYTpffX1mdW5jdGlvbiBhWHQoaSl7dmFyIHM9e30sdT0wO2Z1bmN0aW9uIGQocCl7dmFyIHY9dTtBcihpLmNoaWxkcmVuKHApLGQpLHNbcF09e2xvdzp2LGxpbTp1Kyt9fXJldHVybiBBcihpLmNoaWxkcmVuKCksZCksc31mdW5jdGlvbiBvWHQoaSxzKXt2YXIgdT17fTtmdW5jdGlvbiBkKHAsdil7dmFyIGI9MCx5PTAsVD1wLmxlbmd0aCxfPVVRKHYpO3JldHVybiBBcih2LGZ1bmN0aW9uKEEsUCl7dmFyIFI9dVh0KGksQSksRj1SP2kubm9kZShSKS5vcmRlcjpUOyhSfHxBPT09XykmJihBcih2LnNsaWNlKHksUCsxKSxmdW5jdGlvbihqKXtBcihpLnByZWRlY2Vzc29ycyhqKSxmdW5jdGlvbihLKXt2YXIgZWU9aS5ub2RlKEspLGllPWVlLm9yZGVyOyhpZTxifHxGPGllKSYmIShlZS5kdW1teSYmaS5ub2RlKGopLmR1bW15KSYmdlZlKHUsSyxqKX0pfSkseT1QKzEsYj1GKX0pLHZ9cmV0dXJuIFRSKHMsZCksdX1mdW5jdGlvbiBjWHQoaSxzKXt2YXIgdT17fTtmdW5jdGlvbiBkKHYsYix5LFQsXyl7dmFyIEE7QXIoR0MoYix5KSxmdW5jdGlvbihQKXtBPXZbUF0saS5ub2RlKEEpLmR1bW15JiZBcihpLnByZWRlY2Vzc29ycyhBKSxmdW5jdGlvbihSKXt2YXIgRj1pLm5vZGUoUik7Ri5kdW1teSYmKEYub3JkZXI8VHx8Ri5vcmRlcj5fKSYmdlZlKHUsUixBKX0pfSl9ZnVuY3Rpb24gcCh2LGIpe3ZhciB5PS0xLFQsXz0wO3JldHVybiBBcihiLGZ1bmN0aW9uKEEsUCl7aWYoaS5ub2RlKEEpLmR1bW15PT09ImJvcmRlciIpe3ZhciBSPWkucHJlZGVjZXNzb3JzKEEpO1IubGVuZ3RoJiYoVD1pLm5vZGUoUlswXSkub3JkZXIsZChiLF8sUCx5LFQpLF89UCx5PVQpfWQoYixfLGIubGVuZ3RoLFQsdi5sZW5ndGgpfSksYn1yZXR1cm4gVFIocyxwKSx1fWZ1bmN0aW9uIHVYdChpLHMpe2lmKGkubm9kZShzKS5kdW1teSlyZXR1cm4gcm1lKGkucHJlZGVjZXNzb3JzKHMpLGZ1bmN0aW9uKHUpe3JldHVybiBpLm5vZGUodSkuZHVtbXl9KX1mdW5jdGlvbiB2VmUoaSxzLHUpe2lmKHM+dSl7dmFyIGQ9cztzPXUsdT1kfXZhciBwPWlbc107cHx8KGlbc109cD17fSkscFt1XT0hMH1mdW5jdGlvbiBsWHQoaSxzLHUpe2lmKHM+dSl7dmFyIGQ9cztzPXUsdT1kfXJldHVybiBMbyhpW3NdLHUpfWZ1bmN0aW9uIGhYdChpLHMsdSxkKXt2YXIgcD17fSx2PXt9LGI9e307cmV0dXJuIEFyKHMsZnVuY3Rpb24oeSl7QXIoeSxmdW5jdGlvbihULF8pe3BbVF09VCx2W1RdPVQsYltUXT1ffSl9KSxBcihzLGZ1bmN0aW9uKHkpe3ZhciBUPS0xO0FyKHksZnVuY3Rpb24oXyl7dmFyIEE9ZChfKTtpZihBLmxlbmd0aCl7QT1DUihBLGZ1bmN0aW9uKEspe3JldHVybiBiW0tdfSk7Zm9yKHZhciBQPShBLmxlbmd0aC0xKS8yLFI9TWF0aC5mbG9vcihQKSxGPU1hdGguY2VpbChQKTtSPD1GOysrUil7dmFyIGo9QVtSXTt2W19dPT09XyYmVDxiW2pdJiYhbFh0KHUsXyxqKSYmKHZbal09Xyx2W19dPXBbX109cFtqXSxUPWJbal0pfX19KX0pLHtyb290OnAsYWxpZ246dn19ZnVuY3Rpb24gZlh0KGkscyx1LGQscCl7dmFyIHY9e30sYj1kWHQoaSxzLHUscCkseT1wPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIFQoUCxSKXtmb3IodmFyIEY9Yi5ub2RlcygpLGo9Ri5wb3AoKSxLPXt9O2o7KUtbal0/UChqKTooS1tqXT0hMCxGLnB1c2goaiksRj1GLmNvbmNhdChSKGopKSksaj1GLnBvcCgpfWZ1bmN0aW9uIF8oUCl7dltQXT1iLmluRWRnZXMoUCkucmVkdWNlKGZ1bmN0aW9uKFIsRil7cmV0dXJuIE1hdGgubWF4KFIsdltGLnZdK2IuZWRnZShGKSl9LDApfWZ1bmN0aW9uIEEoUCl7dmFyIFI9Yi5vdXRFZGdlcyhQKS5yZWR1Y2UoZnVuY3Rpb24oaixLKXtyZXR1cm4gTWF0aC5taW4oaix2W0sud10tYi5lZGdlKEspKX0sTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxGPWkubm9kZShQKTtSIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZGLmJvcmRlclR5cGUhPT15JiYodltQXT1NYXRoLm1heCh2W1BdLFIpKX1yZXR1cm4gVChfLGIucHJlZGVjZXNzb3JzLmJpbmQoYikpLFQoQSxiLnN1Y2Nlc3NvcnMuYmluZChiKSksQXIoZCxmdW5jdGlvbihQKXt2W1BdPXZbdVtQXV19KSx2fWZ1bmN0aW9uIGRYdChpLHMsdSxkKXt2YXIgcD1uZXcgQjAsdj1pLmdyYXBoKCksYj12WHQodi5ub2Rlc2VwLHYuZWRnZXNlcCxkKTtyZXR1cm4gQXIocyxmdW5jdGlvbih5KXt2YXIgVDtBcih5LGZ1bmN0aW9uKF8pe3ZhciBBPXVbX107aWYocC5zZXROb2RlKEEpLFQpe3ZhciBQPXVbVF0sUj1wLmVkZ2UoUCxBKTtwLnNldEVkZ2UoUCxBLE1hdGgubWF4KGIoaSxfLFQpLFJ8fDApKX1UPV99KX0pLHB9ZnVuY3Rpb24gZ1h0KGkscyl7cmV0dXJuIHNtZSgkNyhzKSxmdW5jdGlvbih1KXt2YXIgZD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkscD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIEVXdCh1LGZ1bmN0aW9uKHYsYil7dmFyIHk9d1h0KGksYikvMjtkPU1hdGgubWF4KHYreSxkKSxwPU1hdGgubWluKHYteSxwKX0pLGQtcH0pfWZ1bmN0aW9uIHBYdChpLHMpe3ZhciB1PSQ3KHMpLGQ9a1IodSkscD1VQyh1KTtBcihbInUiLCJkIl0sZnVuY3Rpb24odil7QXIoWyJsIiwiciJdLGZ1bmN0aW9uKGIpe3ZhciB5PXYrYixUPWlbeV0sXztpZihUIT09cyl7dmFyIEE9JDcoVCk7Xz1iPT09ImwiP2Qta1IoQSk6cC1VQyhBKSxfJiYoaVt5XT1HUShULGZ1bmN0aW9uKFApe3JldHVybiBQK199KSl9fSl9KX1mdW5jdGlvbiBiWHQoaSxzKXtyZXR1cm4gR1EoaS51bCxmdW5jdGlvbih1LGQpe2lmKHMpcmV0dXJuIGlbcy50b0xvd2VyQ2FzZSgpXVtkXTt2YXIgcD1DUihQMChpLGQpKTtyZXR1cm4ocFsxXStwWzJdKS8yfSl9ZnVuY3Rpb24gbVh0KGkpe3ZhciBzPVdRKGkpLHU9algob1h0KGkscyksY1h0KGkscykpLGQ9e30scDtBcihbInUiLCJkIl0sZnVuY3Rpb24oYil7cD1iPT09InUiP3M6JDcocykucmV2ZXJzZSgpLEFyKFsibCIsInIiXSxmdW5jdGlvbih5KXt5PT09InIiJiYocD1QMChwLGZ1bmN0aW9uKFApe3JldHVybiAkNyhQKS5yZXZlcnNlKCl9KSk7dmFyIFQ9KGI9PT0idSI/aS5wcmVkZWNlc3NvcnM6aS5zdWNjZXNzb3JzKS5iaW5kKGkpLF89aFh0KGkscCx1LFQpLEE9Zlh0KGkscCxfLnJvb3QsXy5hbGlnbix5PT09InIiKTt5PT09InIiJiYoQT1HUShBLGZ1bmN0aW9uKFApe3JldHVybi1QfSkpLGRbYit5XT1BfSl9KTt2YXIgdj1nWHQoaSxkKTtyZXR1cm4gcFh0KGQsdiksYlh0KGQsaS5ncmFwaCgpLmFsaWduKX1mdW5jdGlvbiB2WHQoaSxzLHUpe3JldHVybiBmdW5jdGlvbihkLHAsdil7dmFyIGI9ZC5ub2RlKHApLHk9ZC5ub2RlKHYpLFQ9MCxfO2lmKFQrPWIud2lkdGgvMixMbyhiLCJsYWJlbHBvcyIpKXN3aXRjaChiLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Xz0tYi53aWR0aC8yO2JyZWFrO2Nhc2UiciI6Xz1iLndpZHRoLzI7YnJlYWt9aWYoXyYmKFQrPXU/XzotXyksXz0wLFQrPShiLmR1bW15P3M6aSkvMixUKz0oeS5kdW1teT9zOmkpLzIsVCs9eS53aWR0aC8yLExvKHksImxhYmVscG9zIikpc3dpdGNoKHkubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSJsIjpfPXkud2lkdGgvMjticmVhaztjYXNlInIiOl89LXkud2lkdGgvMjticmVha31yZXR1cm4gXyYmKFQrPXU/XzotXyksXz0wLFR9fWZ1bmN0aW9uIHdYdChpLHMpe3JldHVybiBpLm5vZGUocykud2lkdGh9ZnVuY3Rpb24geVh0KGkpe2k9WEhlKGkpLHhYdChpKSxUV3QobVh0KGkpLGZ1bmN0aW9uKHMsdSl7aS5ub2RlKHUpLng9c30pfWZ1bmN0aW9uIHhYdChpKXt2YXIgcz1XUShpKSx1PWkuZ3JhcGgoKS5yYW5rc2VwLGQ9MDtBcihzLGZ1bmN0aW9uKHApe3ZhciB2PVVDKFAwKHAsZnVuY3Rpb24oYil7cmV0dXJuIGkubm9kZShiKS5oZWlnaHR9KSk7QXIocCxmdW5jdGlvbihiKXtpLm5vZGUoYikueT1kK3YvMn0pLGQrPXYrdX0pfWZ1bmN0aW9uIHFEKGkscyl7dmFyIHU9cyYmcy5kZWJ1Z1RpbWluZz9iWXQ6bVl0O3UoImxheW91dCIsZnVuY3Rpb24oKXt2YXIgZD11KCIgIGJ1aWxkTGF5b3V0R3JhcGgiLGZ1bmN0aW9uKCl7cmV0dXJuIElYdChpKX0pO3UoIiAgcnVuTGF5b3V0IixmdW5jdGlvbigpe2tYdChkLHUpfSksdSgiICB1cGRhdGVJbnB1dEdyYXBoIixmdW5jdGlvbigpe0VYdChpLGQpfSl9KX1mdW5jdGlvbiBrWHQoaSxzKXtzKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsZnVuY3Rpb24oKXtPWHQoaSl9KSxzKCIgICAgcmVtb3ZlU2VsZkVkZ2VzIixmdW5jdGlvbigpe3FYdChpKX0pLHMoIiAgICBhY3ljbGljIixmdW5jdGlvbigpe3VZdChpKX0pLHMoIiAgICBuZXN0aW5nR3JhcGgucnVuIixmdW5jdGlvbigpe1JZdChpKX0pLHMoIiAgICByYW5rIixmdW5jdGlvbigpe1BZdChYSGUoaSkpfSkscygiICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMiLGZ1bmN0aW9uKCl7Tlh0KGkpfSkscygiICAgIHJlbW92ZUVtcHR5UmFua3MiLGZ1bmN0aW9uKCl7Z1l0KGkpfSkscygiICAgIG5lc3RpbmdHcmFwaC5jbGVhbnVwIixmdW5jdGlvbigpe3pZdChpKX0pLHMoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXtkWXQoaSl9KSxzKCIgICAgYXNzaWduUmFua01pbk1heCIsZnVuY3Rpb24oKXtQWHQoaSl9KSxzKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtCWHQoaSl9KSxzKCIgICAgbm9ybWFsaXplLnJ1biIsZnVuY3Rpb24oKXtFWXQoaSl9KSxzKCIgICAgcGFyZW50RHVtbXlDaGFpbnMiLGZ1bmN0aW9uKCl7aVh0KGkpfSkscygiICAgIGFkZEJvcmRlclNlZ21lbnRzIixmdW5jdGlvbigpe3ZZdChpKX0pLHMoIiAgICBvcmRlciIsZnVuY3Rpb24oKXtuWHQoaSl9KSxzKCIgICAgaW5zZXJ0U2VsZkVkZ2VzIixmdW5jdGlvbigpe0hYdChpKX0pLHMoIiAgICBhZGp1c3RDb29yZGluYXRlU3lzdGVtIixmdW5jdGlvbigpe3dZdChpKX0pLHMoIiAgICBwb3NpdGlvbiIsZnVuY3Rpb24oKXt5WHQoaSl9KSxzKCIgICAgcG9zaXRpb25TZWxmRWRnZXMiLGZ1bmN0aW9uKCl7Vlh0KGkpfSkscygiICAgIHJlbW92ZUJvcmRlck5vZGVzIixmdW5jdGlvbigpe3pYdChpKX0pLHMoIiAgICBub3JtYWxpemUudW5kbyIsZnVuY3Rpb24oKXtDWXQoaSl9KSxzKCIgICAgZml4dXBFZGdlTGFiZWxDb29yZHMiLGZ1bmN0aW9uKCl7alh0KGkpfSkscygiICAgIHVuZG9Db29yZGluYXRlU3lzdGVtIixmdW5jdGlvbigpe3lZdChpKX0pLHMoIiAgICB0cmFuc2xhdGVHcmFwaCIsZnVuY3Rpb24oKXtGWHQoaSl9KSxzKCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7Ulh0KGkpfSkscygiICAgIHJldmVyc2VQb2ludHMiLGZ1bmN0aW9uKCl7JFh0KGkpfSkscygiICAgIGFjeWNsaWMudW5kbyIsZnVuY3Rpb24oKXtoWXQoaSl9KX1mdW5jdGlvbiBFWHQoaSxzKXtBcihpLm5vZGVzKCksZnVuY3Rpb24odSl7dmFyIGQ9aS5ub2RlKHUpLHA9cy5ub2RlKHUpO2QmJihkLng9cC54LGQueT1wLnkscy5jaGlsZHJlbih1KS5sZW5ndGgmJihkLndpZHRoPXAud2lkdGgsZC5oZWlnaHQ9cC5oZWlnaHQpKX0pLEFyKGkuZWRnZXMoKSxmdW5jdGlvbih1KXt2YXIgZD1pLmVkZ2UodSkscD1zLmVkZ2UodSk7ZC5wb2ludHM9cC5wb2ludHMsTG8ocCwieCIpJiYoZC54PXAueCxkLnk9cC55KX0pLGkuZ3JhcGgoKS53aWR0aD1zLmdyYXBoKCkud2lkdGgsaS5ncmFwaCgpLmhlaWdodD1zLmdyYXBoKCkuaGVpZ2h0fXZhciBUWHQ9WyJub2Rlc2VwIiwiZWRnZXNlcCIsInJhbmtzZXAiLCJtYXJnaW54IiwibWFyZ2lueSJdLENYdD17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxTWHQ9WyJhY3ljbGljZXIiLCJyYW5rZXIiLCJyYW5rZGlyIiwiYWxpZ24iXSxfWHQ9WyJ3aWR0aCIsImhlaWdodCJdLEFYdD17d2lkdGg6MCxoZWlnaHQ6MH0sTFh0PVsibWlubGVuIiwid2VpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJsYWJlbG9mZnNldCJdLE1YdD17bWlubGVuOjEsd2VpZ2h0OjEsd2lkdGg6MCxoZWlnaHQ6MCxsYWJlbG9mZnNldDoxMCxsYWJlbHBvczoiciJ9LERYdD1bImxhYmVscG9zIl07ZnVuY3Rpb24gSVh0KGkpe3ZhciBzPW5ldyBCMCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLHU9cG1lKGkuZ3JhcGgoKSk7cmV0dXJuIHMuc2V0R3JhcGgoalgoe30sQ1h0LGdtZSh1LFRYdCksRVIodSxTWHQpKSksQXIoaS5ub2RlcygpLGZ1bmN0aW9uKGQpe3ZhciBwPXBtZShpLm5vZGUoZCkpO3Muc2V0Tm9kZShkLCREKGdtZShwLF9YdCksQVh0KSkscy5zZXRQYXJlbnQoZCxpLnBhcmVudChkKSl9KSxBcihpLmVkZ2VzKCksZnVuY3Rpb24oZCl7dmFyIHA9cG1lKGkuZWRnZShkKSk7cy5zZXRFZGdlKGQsalgoe30sTVh0LGdtZShwLExYdCksRVIocCxEWHQpKSl9KSxzfWZ1bmN0aW9uIE9YdChpKXt2YXIgcz1pLmdyYXBoKCk7cy5yYW5rc2VwLz0yLEFyKGkuZWRnZXMoKSxmdW5jdGlvbih1KXt2YXIgZD1pLmVkZ2UodSk7ZC5taW5sZW4qPTIsZC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYocy5yYW5rZGlyPT09IlRCInx8cy5yYW5rZGlyPT09IkJUIj9kLndpZHRoKz1kLmxhYmVsb2Zmc2V0OmQuaGVpZ2h0Kz1kLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIE5YdChpKXtBcihpLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIHU9aS5lZGdlKHMpO2lmKHUud2lkdGgmJnUuaGVpZ2h0KXt2YXIgZD1pLm5vZGUocy52KSxwPWkubm9kZShzLncpLHY9e3Jhbms6KHAucmFuay1kLnJhbmspLzIrZC5yYW5rLGU6c307ekQoaSwiZWRnZS1wcm94eSIsdiwiX2VwIil9fSl9ZnVuY3Rpb24gUFh0KGkpe3ZhciBzPTA7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHUpe3ZhciBkPWkubm9kZSh1KTtkLmJvcmRlclRvcCYmKGQubWluUmFuaz1pLm5vZGUoZC5ib3JkZXJUb3ApLnJhbmssZC5tYXhSYW5rPWkubm9kZShkLmJvcmRlckJvdHRvbSkucmFuayxzPVVDKHMsZC5tYXhSYW5rKSl9KSxpLmdyYXBoKCkubWF4UmFuaz1zfWZ1bmN0aW9uIEJYdChpKXtBcihpLm5vZGVzKCksZnVuY3Rpb24ocyl7dmFyIHU9aS5ub2RlKHMpO3UuZHVtbXk9PT0iZWRnZS1wcm94eSImJihpLmVkZ2UodS5lKS5sYWJlbFJhbms9dS5yYW5rLGkucmVtb3ZlTm9kZShzKSl9KX1mdW5jdGlvbiBGWHQoaSl7dmFyIHM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHU9MCxkPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxwPTAsdj1pLmdyYXBoKCksYj12Lm1hcmdpbnh8fDAseT12Lm1hcmdpbnl8fDA7ZnVuY3Rpb24gVChfKXt2YXIgQT1fLngsUD1fLnksUj1fLndpZHRoLEY9Xy5oZWlnaHQ7cz1NYXRoLm1pbihzLEEtUi8yKSx1PU1hdGgubWF4KHUsQStSLzIpLGQ9TWF0aC5taW4oZCxQLUYvMikscD1NYXRoLm1heChwLFArRi8yKX1BcihpLm5vZGVzKCksZnVuY3Rpb24oXyl7VChpLm5vZGUoXykpfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKF8pe3ZhciBBPWkuZWRnZShfKTtMbyhBLCJ4IikmJlQoQSl9KSxzLT1iLGQtPXksQXIoaS5ub2RlcygpLGZ1bmN0aW9uKF8pe3ZhciBBPWkubm9kZShfKTtBLngtPXMsQS55LT1kfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKF8pe3ZhciBBPWkuZWRnZShfKTtBcihBLnBvaW50cyxmdW5jdGlvbihQKXtQLngtPXMsUC55LT1kfSksTG8oQSwieCIpJiYoQS54LT1zKSxMbyhBLCJ5IikmJihBLnktPWQpfSksdi53aWR0aD11LXMrYix2LmhlaWdodD1wLWQreX1mdW5jdGlvbiBSWHQoaSl7QXIoaS5lZGdlcygpLGZ1bmN0aW9uKHMpe3ZhciB1PWkuZWRnZShzKSxkPWkubm9kZShzLnYpLHA9aS5ub2RlKHMudyksdixiO3UucG9pbnRzPyh2PXUucG9pbnRzWzBdLGI9dS5wb2ludHNbdS5wb2ludHMubGVuZ3RoLTFdKToodS5wb2ludHM9W10sdj1wLGI9ZCksdS5wb2ludHMudW5zaGlmdChRSGUoZCx2KSksdS5wb2ludHMucHVzaChRSGUocCxiKSl9KX1mdW5jdGlvbiBqWHQoaSl7QXIoaS5lZGdlcygpLGZ1bmN0aW9uKHMpe3ZhciB1PWkuZWRnZShzKTtpZihMbyh1LCJ4Iikpc3dpdGNoKCh1LmxhYmVscG9zPT09ImwifHx1LmxhYmVscG9zPT09InIiKSYmKHUud2lkdGgtPXUubGFiZWxvZmZzZXQpLHUubGFiZWxwb3Mpe2Nhc2UibCI6dS54LT11LndpZHRoLzIrdS5sYWJlbG9mZnNldDticmVhaztjYXNlInIiOnUueCs9dS53aWR0aC8yK3UubGFiZWxvZmZzZXQ7YnJlYWt9fSl9ZnVuY3Rpb24gJFh0KGkpe0FyKGkuZWRnZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLmVkZ2Uocyk7dS5yZXZlcnNlZCYmdS5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gelh0KGkpe0FyKGkubm9kZXMoKSxmdW5jdGlvbihzKXtpZihpLmNoaWxkcmVuKHMpLmxlbmd0aCl7dmFyIHU9aS5ub2RlKHMpLGQ9aS5ub2RlKHUuYm9yZGVyVG9wKSxwPWkubm9kZSh1LmJvcmRlckJvdHRvbSksdj1pLm5vZGUoVVEodS5ib3JkZXJMZWZ0KSksYj1pLm5vZGUoVVEodS5ib3JkZXJSaWdodCkpO3Uud2lkdGg9TWF0aC5hYnMoYi54LXYueCksdS5oZWlnaHQ9TWF0aC5hYnMocC55LWQueSksdS54PXYueCt1LndpZHRoLzIsdS55PWQueSt1LmhlaWdodC8yfX0pLEFyKGkubm9kZXMoKSxmdW5jdGlvbihzKXtpLm5vZGUocykuZHVtbXk9PT0iYm9yZGVyIiYmaS5yZW1vdmVOb2RlKHMpfSl9ZnVuY3Rpb24gcVh0KGkpe0FyKGkuZWRnZXMoKSxmdW5jdGlvbihzKXtpZihzLnY9PT1zLncpe3ZhciB1PWkubm9kZShzLnYpO3Uuc2VsZkVkZ2VzfHwodS5zZWxmRWRnZXM9W10pLHUuc2VsZkVkZ2VzLnB1c2goe2U6cyxsYWJlbDppLmVkZ2Uocyl9KSxpLnJlbW92ZUVkZ2Uocyl9fSl9ZnVuY3Rpb24gSFh0KGkpe3ZhciBzPVdRKGkpO0FyKHMsZnVuY3Rpb24odSl7dmFyIGQ9MDtBcih1LGZ1bmN0aW9uKHAsdil7dmFyIGI9aS5ub2RlKHApO2Iub3JkZXI9ditkLEFyKGIuc2VsZkVkZ2VzLGZ1bmN0aW9uKHkpe3pEKGksInNlbGZlZGdlIix7d2lkdGg6eS5sYWJlbC53aWR0aCxoZWlnaHQ6eS5sYWJlbC5oZWlnaHQscmFuazpiLnJhbmssb3JkZXI6disgKytkLGU6eS5lLGxhYmVsOnkubGFiZWx9LCJfc2UiKX0pLGRlbGV0ZSBiLnNlbGZFZGdlc30pfSl9ZnVuY3Rpb24gVlh0KGkpe0FyKGkubm9kZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLm5vZGUocyk7aWYodS5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBkPWkubm9kZSh1LmUudikscD1kLngrZC53aWR0aC8yLHY9ZC55LGI9dS54LXAseT1kLmhlaWdodC8yO2kuc2V0RWRnZSh1LmUsdS5sYWJlbCksaS5yZW1vdmVOb2RlKHMpLHUubGFiZWwucG9pbnRzPVt7eDpwKzIqYi8zLHk6di15fSx7eDpwKzUqYi82LHk6di15fSx7eDpwK2IseTp2fSx7eDpwKzUqYi82LHk6dit5fSx7eDpwKzIqYi8zLHk6dit5fV0sdS5sYWJlbC54PXUueCx1LmxhYmVsLnk9dS55fX0pfWZ1bmN0aW9uIGdtZShpLHMpe3JldHVybiBHUShFUihpLHMpLE51bWJlcil9ZnVuY3Rpb24gcG1lKGkpe3ZhciBzPXt9O3JldHVybiBBcihpLGZ1bmN0aW9uKHUsZCl7c1tkLnRvTG93ZXJDYXNlKCldPXV9KSxzfWZ1bmN0aW9uIHdWZShpLHMpe3JldHVybiEhaS5jaGlsZHJlbihzKS5sZW5ndGh9ZnVuY3Rpb24geVZlKGkpe3JldHVybiBibWUoaS52KSsiOiIrYm1lKGkudykrIjoiK2JtZShpLm5hbWUpfXZhciBVWHQ9LzovZztmdW5jdGlvbiBibWUoaSl7cmV0dXJuIGk/U3RyaW5nKGkpLnJlcGxhY2UoVVh0LCJcXDoiKToiIn1mdW5jdGlvbiBaNChpLHMpe3MmJmkuYXR0cigic3R5bGUiLHMpfWZ1bmN0aW9uIHhWZShpLHMsdSl7cyYmaS5hdHRyKCJjbGFzcyIscykuYXR0cigiY2xhc3MiLHUrIiAiK2kuYXR0cigiY2xhc3MiKSl9ZnVuY3Rpb24gcTMoaSxzKXt2YXIgdT1zLmdyYXBoKCk7aWYocmplKHUpKXt2YXIgZD11LnRyYW5zaXRpb247aWYoZ0QoZCkpcmV0dXJuIGQoaSl9cmV0dXJuIGl9dmFyIG1tZT17bm9ybWFsOktYdCx2ZWU6V1h0LHVuZGlyZWN0ZWQ6WVh0fTtmdW5jdGlvbiBHWHQoaSl7bW1lPWl9ZnVuY3Rpb24gS1h0KGkscyx1LGQpe3ZhciBwPWkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksdj1wLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO1o0KHYsdVtkKyJTdHlsZSJdKSx1W2QrIkNsYXNzIl0mJnYuYXR0cigiY2xhc3MiLHVbZCsiQ2xhc3MiXSl9ZnVuY3Rpb24gV1h0KGkscyx1LGQpe3ZhciBwPWkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksdj1wLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIEwgNCA1IHoiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO1o0KHYsdVtkKyJTdHlsZSJdKSx1W2QrIkNsYXNzIl0mJnYuYXR0cigiY2xhc3MiLHVbZCsiQ2xhc3MiXSl9ZnVuY3Rpb24gWVh0KGkscyx1LGQpe3ZhciBwPWkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksdj1wLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDUiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO1o0KHYsdVtkKyJTdHlsZSJdKSx1W2QrIkNsYXNzIl0mJnYuYXR0cigiY2xhc3MiLHVbZCsiQ2xhc3MiXSl9ZnVuY3Rpb24gdm1lKGkscyl7dmFyIHU9aS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsIjEwMDAwMCIpLGQ9dS5hcHBlbmQoInhodG1sOmRpdiIpO2QuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7dmFyIHA9cy5sYWJlbDtzd2l0Y2godHlwZW9mIHApe2Nhc2UiZnVuY3Rpb24iOmQuaW5zZXJ0KHApO2JyZWFrO2Nhc2Uib2JqZWN0IjpkLmluc2VydChmdW5jdGlvbigpe3JldHVybiBwfSk7YnJlYWs7ZGVmYXVsdDpkLmh0bWwocCl9WjQoZCxzLmxhYmVsU3R5bGUpLGQuc3R5bGUoImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKSxkLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpO3ZhciB2PWQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB1LmF0dHIoIndpZHRoIix2LndpZHRoKS5hdHRyKCJoZWlnaHQiLHYuaGVpZ2h0KSx1fWZ1bmN0aW9uIFhYdChpLHMpe3ZhciB1PWk7cmV0dXJuIHUubm9kZSgpLmFwcGVuZENoaWxkKHMubGFiZWwpLFo0KHUscy5sYWJlbFN0eWxlKSx1fWZ1bmN0aW9uIFFYdChpLHMpe2Zvcih2YXIgdT1pLmFwcGVuZCgidGV4dCIpLGQ9Slh0KHMubGFiZWwpLnNwbGl0KGAKYCkscD0wO3A8ZC5sZW5ndGg7cCsrKXUuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoInhtbDpzcGFjZSIsInByZXNlcnZlIikuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJ4IiwiMSIpLnRleHQoZFtwXSk7cmV0dXJuIFo0KHUscy5sYWJlbFN0eWxlKSx1fWZ1bmN0aW9uIEpYdChpKXtmb3IodmFyIHM9IiIsdT0hMSxkLHA9MDtwPGkubGVuZ3RoOysrcClpZihkPWlbcF0sdSl7c3dpdGNoKGQpe2Nhc2UibiI6cys9YApgO2JyZWFrO2RlZmF1bHQ6cys9ZH11PSExfWVsc2UgZD09PSJcXCI/dT0hMDpzKz1kO3JldHVybiBzfWZ1bmN0aW9uIHdtZShpLHMsdSl7dmFyIGQ9cy5sYWJlbCxwPWkuYXBwZW5kKCJnIik7cy5sYWJlbFR5cGU9PT0ic3ZnIj9YWHQocCxzKTp0eXBlb2YgZCE9InN0cmluZyJ8fHMubGFiZWxUeXBlPT09Imh0bWwiP3ZtZShwLHMpOlFYdChwLHMpO3ZhciB2PXAubm9kZSgpLmdldEJCb3goKSxiO3N3aXRjaCh1KXtjYXNlInRvcCI6Yj0tcy5oZWlnaHQvMjticmVhaztjYXNlImJvdHRvbSI6Yj1zLmhlaWdodC8yLXYuaGVpZ2h0O2JyZWFrO2RlZmF1bHQ6Yj0tdi5oZWlnaHQvMn1yZXR1cm4gcC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistdi53aWR0aC8yKyIsIitiKyIpIikscH12YXIgeW1lPWZ1bmN0aW9uKGkscyl7dmFyIHU9cy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbih2KXtyZXR1cm4gd1ZlKHMsdil9KSxkPWkuc2VsZWN0QWxsKCJnLmNsdXN0ZXIiKS5kYXRhKHUsZnVuY3Rpb24odil7cmV0dXJuIHZ9KTtxMyhkLmV4aXQoKSxzKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIHA9ZC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIpLmF0dHIoImlkIixmdW5jdGlvbih2KXt2YXIgYj1zLm5vZGUodik7cmV0dXJuIGIuaWR9KS5zdHlsZSgib3BhY2l0eSIsMCkuZWFjaChmdW5jdGlvbih2KXt2YXIgYj1zLm5vZGUodikseT1Jcih0aGlzKTtJcih0aGlzKS5hcHBlbmQoInJlY3QiKTt2YXIgVD15LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTt3bWUoVCxiLGIuY2x1c3RlckxhYmVsUG9zKX0pO3JldHVybiBkPWQubWVyZ2UocCksZD1xMyhkLHMpLnN0eWxlKCJvcGFjaXR5IiwxKSxkLnNlbGVjdEFsbCgicmVjdCIpLmVhY2goZnVuY3Rpb24odil7dmFyIGI9cy5ub2RlKHYpLHk9SXIodGhpcyk7WjQoeSxiLnN0eWxlKX0pLGR9O2Z1bmN0aW9uIFpYdChpKXt5bWU9aX1sZXQgeG1lPWZ1bmN0aW9uKGkscyl7dmFyIHU9aS5zZWxlY3RBbGwoImcuZWRnZUxhYmVsIikuZGF0YShzLmVkZ2VzKCksZnVuY3Rpb24ocCl7cmV0dXJuIHlWZShwKX0pLmNsYXNzZWQoInVwZGF0ZSIsITApO3UuZXhpdCgpLnJlbW92ZSgpLHUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJlZGdlTGFiZWwiLCEwKS5zdHlsZSgib3BhY2l0eSIsMCksdT1pLnNlbGVjdEFsbCgiZy5lZGdlTGFiZWwiKSx1LmVhY2goZnVuY3Rpb24ocCl7dmFyIHY9SXIodGhpcyk7di5zZWxlY3QoIi5sYWJlbCIpLnJlbW92ZSgpO3ZhciBiPXMuZWRnZShwKSx5PXdtZSh2LHMuZWRnZShwKSwwKS5jbGFzc2VkKCJsYWJlbCIsITApLFQ9eS5ub2RlKCkuZ2V0QkJveCgpO2IubGFiZWxJZCYmeS5hdHRyKCJpZCIsYi5sYWJlbElkKSxMbyhiLCJ3aWR0aCIpfHwoYi53aWR0aD1ULndpZHRoKSxMbyhiLCJoZWlnaHQiKXx8KGIuaGVpZ2h0PVQuaGVpZ2h0KX0pO3ZhciBkO3JldHVybiB1LmV4aXQ/ZD11LmV4aXQoKTpkPXUuc2VsZWN0QWxsKG51bGwpLHEzKGQscykuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHV9O2Z1bmN0aW9uIGVRdChpKXt4bWU9aX1mdW5jdGlvbiBrVmUoaSxzKXtyZXR1cm4gaS5pbnRlcnNlY3Qocyl9dmFyIGttZT1mdW5jdGlvbihpLHMsdSl7dmFyIGQ9aS5zZWxlY3RBbGwoImcuZWRnZVBhdGgiKS5kYXRhKHMuZWRnZXMoKSxmdW5jdGlvbihiKXtyZXR1cm4geVZlKGIpfSkuY2xhc3NlZCgidXBkYXRlIiwhMCkscD1zUXQoZCxzKTthUXQoZCxzKTt2YXIgdj1kLm1lcmdlIT09dm9pZCAwP2QubWVyZ2UocCk6ZDtyZXR1cm4gcTModixzKS5zdHlsZSgib3BhY2l0eSIsMSksdi5lYWNoKGZ1bmN0aW9uKGIpe3ZhciB5PUlyKHRoaXMpLFQ9cy5lZGdlKGIpO1QuZWxlbT10aGlzLFQuaWQmJnkuYXR0cigiaWQiLFQuaWQpLHhWZSh5LFQuY2xhc3MsKHkuY2xhc3NlZCgidXBkYXRlIik/InVwZGF0ZSAiOiIiKSsiZWRnZVBhdGgiKX0pLHYuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKS5lYWNoKGZ1bmN0aW9uKGIpe3ZhciB5PXMuZWRnZShiKTt5LmFycm93aGVhZElkPUtRKCJhcnJvd2hlYWQiKTt2YXIgVD1Jcih0aGlzKS5hdHRyKCJtYXJrZXItZW5kIixmdW5jdGlvbigpe3JldHVybiJ1cmwoIituUXQobG9jYXRpb24uaHJlZix5LmFycm93aGVhZElkKSsiKSJ9KS5zdHlsZSgiZmlsbCIsIm5vbmUiKTtxMyhULHMpLmF0dHIoImQiLGZ1bmN0aW9uKF8pe3JldHVybiByUXQocyxfKX0pLFo0KFQseS5zdHlsZSl9KSx2LnNlbGVjdEFsbCgiZGVmcyAqIikucmVtb3ZlKCksdi5zZWxlY3RBbGwoImRlZnMiKS5lYWNoKGZ1bmN0aW9uKGIpe3ZhciB5PXMuZWRnZShiKSxUPXVbeS5hcnJvd2hlYWRdO1QoSXIodGhpcykseS5hcnJvd2hlYWRJZCx5LCJhcnJvd2hlYWQiKX0pLHZ9O2Z1bmN0aW9uIHRRdChpKXtrbWU9aX1mdW5jdGlvbiBuUXQoaSxzKXt2YXIgdT1pLnNwbGl0KCIjIilbMF07cmV0dXJuIHUrIiMiK3N9ZnVuY3Rpb24gclF0KGkscyl7dmFyIHU9aS5lZGdlKHMpLGQ9aS5ub2RlKHMudikscD1pLm5vZGUocy53KSx2PXUucG9pbnRzLnNsaWNlKDEsdS5wb2ludHMubGVuZ3RoLTEpO3JldHVybiB2LnVuc2hpZnQoa1ZlKGQsdlswXSkpLHYucHVzaChrVmUocCx2W3YubGVuZ3RoLTFdKSksRVZlKHUsdil9ZnVuY3Rpb24gRVZlKGkscyl7dmFyIHU9KGs3fHxQSXQubGluZSkoKS54KGZ1bmN0aW9uKGQpe3JldHVybiBkLnh9KS55KGZ1bmN0aW9uKGQpe3JldHVybiBkLnl9KTtyZXR1cm4odS5jdXJ2ZXx8dS5pbnRlcnBvbGF0ZSkoaS5jdXJ2ZSksdShzKX1mdW5jdGlvbiBpUXQoaSl7dmFyIHM9aS5nZXRCQm94KCksdT1pLm93bmVyU1ZHRWxlbWVudC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkubXVsdGlwbHkoaS5nZXRTY3JlZW5DVE0oKSkudHJhbnNsYXRlKHMud2lkdGgvMixzLmhlaWdodC8yKTtyZXR1cm57eDp1LmUseTp1LmZ9fWZ1bmN0aW9uIHNRdChpLHMpe3ZhciB1PWkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VQYXRoIikuc3R5bGUoIm9wYWNpdHkiLDApO3JldHVybiB1LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwicGF0aCIpLmF0dHIoImQiLGZ1bmN0aW9uKGQpe3ZhciBwPXMuZWRnZShkKSx2PXMubm9kZShkLnYpLmVsZW0sYj1HQyhwLnBvaW50cy5sZW5ndGgpLm1hcChmdW5jdGlvbigpe3JldHVybiBpUXQodil9KTtyZXR1cm4gRVZlKHAsYil9KSx1LmFwcGVuZCgiZGVmcyIpLHV9ZnVuY3Rpb24gYVF0KGkscyl7dmFyIHU9aS5leGl0KCk7cTModSxzKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCl9dmFyIEVtZT1mdW5jdGlvbihpLHMsdSl7dmFyIGQ9cy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4hd1ZlKHMsYil9KSxwPWkuc2VsZWN0QWxsKCJnLm5vZGUiKS5kYXRhKGQsZnVuY3Rpb24oYil7cmV0dXJuIGJ9KS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtwLmV4aXQoKS5yZW1vdmUoKSxwLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlIikuc3R5bGUoIm9wYWNpdHkiLDApLHA9aS5zZWxlY3RBbGwoImcubm9kZSIpLHAuZWFjaChmdW5jdGlvbihiKXt2YXIgeT1zLm5vZGUoYiksVD1Jcih0aGlzKTt4VmUoVCx5LmNsYXNzLChULmNsYXNzZWQoInVwZGF0ZSIpPyJ1cGRhdGUgIjoiIikrIm5vZGUiKSxULnNlbGVjdCgiZy5sYWJlbCIpLnJlbW92ZSgpO3ZhciBfPVQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEE9d21lKF8seSksUD11W3kuc2hhcGVdLFI9RVIoQS5ub2RlKCkuZ2V0QkJveCgpLCJ3aWR0aCIsImhlaWdodCIpO3kuZWxlbT10aGlzLHkuaWQmJlQuYXR0cigiaWQiLHkuaWQpLHkubGFiZWxJZCYmXy5hdHRyKCJpZCIseS5sYWJlbElkKSxMbyh5LCJ3aWR0aCIpJiYoUi53aWR0aD15LndpZHRoKSxMbyh5LCJoZWlnaHQiKSYmKFIuaGVpZ2h0PXkuaGVpZ2h0KSxSLndpZHRoKz15LnBhZGRpbmdMZWZ0K3kucGFkZGluZ1JpZ2h0LFIuaGVpZ2h0Kz15LnBhZGRpbmdUb3AreS5wYWRkaW5nQm90dG9tLF8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHkucGFkZGluZ0xlZnQteS5wYWRkaW5nUmlnaHQpLzIrIiwiKyh5LnBhZGRpbmdUb3AteS5wYWRkaW5nQm90dG9tKS8yKyIpIik7dmFyIEY9SXIodGhpcyk7Ri5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKS5yZW1vdmUoKTt2YXIgaj1QKEYsUix5KS5jbGFzc2VkKCJsYWJlbC1jb250YWluZXIiLCEwKTtaNChqLHkuc3R5bGUpO3ZhciBLPWoubm9kZSgpLmdldEJCb3goKTt5LndpZHRoPUsud2lkdGgseS5oZWlnaHQ9Sy5oZWlnaHR9KTt2YXIgdjtyZXR1cm4gcC5leGl0P3Y9cC5leGl0KCk6dj1wLnNlbGVjdEFsbChudWxsKSxxMyh2LHMpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxwfTtmdW5jdGlvbiBvUXQoaSl7RW1lPWl9ZnVuY3Rpb24gY1F0KGkscyl7dmFyIHU9aS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4hSXIodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KTtmdW5jdGlvbiBkKHApe3ZhciB2PXMubm9kZShwKTtyZXR1cm4idHJhbnNsYXRlKCIrdi54KyIsIit2LnkrIikifXUuYXR0cigidHJhbnNmb3JtIixkKSxxMyhpLHMpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGQpLHEzKHUuc2VsZWN0QWxsKCJyZWN0IikscykuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHApe3JldHVybiBzLm5vZGUocCkud2lkdGh9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHApe3JldHVybiBzLm5vZGUocCkuaGVpZ2h0fSkuYXR0cigieCIsZnVuY3Rpb24ocCl7dmFyIHY9cy5ub2RlKHApO3JldHVybi12LndpZHRoLzJ9KS5hdHRyKCJ5IixmdW5jdGlvbihwKXt2YXIgdj1zLm5vZGUocCk7cmV0dXJuLXYuaGVpZ2h0LzJ9KX1mdW5jdGlvbiB1UXQoaSxzKXt2YXIgdT1pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiFJcih0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pO2Z1bmN0aW9uIGQocCl7dmFyIHY9cy5lZGdlKHApO3JldHVybiBMbyh2LCJ4Iik/InRyYW5zbGF0ZSgiK3YueCsiLCIrdi55KyIpIjoiIn11LmF0dHIoInRyYW5zZm9ybSIsZCkscTMoaSxzKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixkKX1mdW5jdGlvbiBsUXQoaSxzKXt2YXIgdT1pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiFJcih0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pO2Z1bmN0aW9uIGQocCl7dmFyIHY9cy5ub2RlKHApO3JldHVybiJ0cmFuc2xhdGUoIit2LngrIiwiK3YueSsiKSJ9dS5hdHRyKCJ0cmFuc2Zvcm0iLGQpLHEzKGkscykuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZCl9ZnVuY3Rpb24gVFZlKGkscyx1LGQpe3ZhciBwPWkueCx2PWkueSxiPXAtZC54LHk9di1kLnksVD1NYXRoLnNxcnQocypzKnkqeSt1KnUqYipiKSxfPU1hdGguYWJzKHMqdSpiL1QpO2QueDxwJiYoXz0tXyk7dmFyIEE9TWF0aC5hYnMocyp1KnkvVCk7cmV0dXJuIGQueTx2JiYoQT0tQSkse3g6cCtfLHk6ditBfX1mdW5jdGlvbiBoUXQoaSxzLHUpe3JldHVybiBUVmUoaSxzLHMsdSl9ZnVuY3Rpb24gZlF0KGkscyx1LGQpe3ZhciBwLHYsYix5LFQsXyxBLFAsUixGLGosSyxlZSxpZSxvZTtpZihwPXMueS1pLnksYj1pLngtcy54LFQ9cy54KmkueS1pLngqcy55LFI9cCp1LngrYip1LnkrVCxGPXAqZC54K2IqZC55K1QsIShSIT09MCYmRiE9PTAmJkNWZShSLEYpKSYmKHY9ZC55LXUueSx5PXUueC1kLngsXz1kLngqdS55LXUueCpkLnksQT12KmkueCt5KmkueStfLFA9dipzLngreSpzLnkrXywhKEEhPT0wJiZQIT09MCYmQ1ZlKEEsUCkpJiYoaj1wKnktdipiLGohPT0wKSkpcmV0dXJuIEs9TWF0aC5hYnMoai8yKSxlZT1iKl8teSpULGllPWVlPDA/KGVlLUspL2o6KGVlK0spL2osZWU9dipULXAqXyxvZT1lZTwwPyhlZS1LKS9qOihlZStLKS9qLHt4OmllLHk6b2V9fWZ1bmN0aW9uIENWZShpLHMpe3JldHVybiBpKnM+MH1mdW5jdGlvbiBlNShpLHMsdSl7dmFyIGQ9aS54LHA9aS55LHY9W10sYj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cy5mb3JFYWNoKGZ1bmN0aW9uKGope2I9TWF0aC5taW4oYixqLngpLHk9TWF0aC5taW4oeSxqLnkpfSk7Zm9yKHZhciBUPWQtaS53aWR0aC8yLWIsXz1wLWkuaGVpZ2h0LzIteSxBPTA7QTxzLmxlbmd0aDtBKyspe3ZhciBQPXNbQV0sUj1zW0E8cy5sZW5ndGgtMT9BKzE6MF0sRj1mUXQoaSx1LHt4OlQrUC54LHk6XytQLnl9LHt4OlQrUi54LHk6XytSLnl9KTtGJiZ2LnB1c2goRil9cmV0dXJuIHYubGVuZ3RoPyh2Lmxlbmd0aD4xJiZ2LnNvcnQoZnVuY3Rpb24oaixLKXt2YXIgZWU9ai54LXUueCxpZT1qLnktdS55LG9lPU1hdGguc3FydChlZSplZStpZSppZSkscGU9Sy54LXUueCxiZT1LLnktdS55LGFlPU1hdGguc3FydChwZSpwZStiZSpiZSk7cmV0dXJuIG9lPGFlPy0xOm9lPT09YWU/MDoxfSksdlswXSk6KGNvbnNvbGUubG9nKCJOTyBJTlRFUlNFQ1RJT04gRk9VTkQsIFJFVFVSTiBOT0RFIENFTlRFUiIsaSksaSl9ZnVuY3Rpb24gVG1lKGkscyl7dmFyIHU9aS54LGQ9aS55LHA9cy54LXUsdj1zLnktZCxiPWkud2lkdGgvMix5PWkuaGVpZ2h0LzIsVCxfO3JldHVybiBNYXRoLmFicyh2KSpiPk1hdGguYWJzKHApKnk/KHY8MCYmKHk9LXkpLFQ9dj09PTA/MDp5KnAvdixfPXkpOihwPDAmJihiPS1iKSxUPWIsXz1wPT09MD8wOmIqdi9wKSx7eDp1K1QseTpkK199fXZhciBDbWU9e3JlY3Q6Z1F0LGVsbGlwc2U6cFF0LGNpcmNsZTpiUXQsZGlhbW9uZDptUXR9O2Z1bmN0aW9uIGRRdChpKXtDbWU9aX1mdW5jdGlvbiBnUXQoaSxzLHUpe3ZhciBkPWkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigicngiLHUucngpLmF0dHIoInJ5Iix1LnJ5KS5hdHRyKCJ4Iiwtcy53aWR0aC8yKS5hdHRyKCJ5Iiwtcy5oZWlnaHQvMikuYXR0cigid2lkdGgiLHMud2lkdGgpLmF0dHIoImhlaWdodCIscy5oZWlnaHQpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gVG1lKHUscCl9LGR9ZnVuY3Rpb24gcFF0KGkscyx1KXt2YXIgZD1zLndpZHRoLzIscD1zLmhlaWdodC8yLHY9aS5pbnNlcnQoImVsbGlwc2UiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4Iiwtcy53aWR0aC8yKS5hdHRyKCJ5Iiwtcy5oZWlnaHQvMikuYXR0cigicngiLGQpLmF0dHIoInJ5IixwKTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFRWZSh1LGQscCxiKX0sdn1mdW5jdGlvbiBiUXQoaSxzLHUpe3ZhciBkPU1hdGgubWF4KHMud2lkdGgscy5oZWlnaHQpLzIscD1pLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsLXMud2lkdGgvMikuYXR0cigieSIsLXMuaGVpZ2h0LzIpLmF0dHIoInIiLGQpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbih2KXtyZXR1cm4gaFF0KHUsZCx2KX0scH1mdW5jdGlvbiBtUXQoaSxzLHUpe3ZhciBkPXMud2lkdGgqTWF0aC5TUVJUMi8yLHA9cy5oZWlnaHQqTWF0aC5TUVJUMi8yLHY9W3t4OjAseTotcH0se3g6LWQseTowfSx7eDowLHk6cH0se3g6ZCx5OjB9XSxiPWkuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIix2Lm1hcChmdW5jdGlvbih5KXtyZXR1cm4geS54KyIsIit5Lnl9KS5qb2luKCIgIikpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gZTUodSx2LHkpfSxifWZ1bmN0aW9uIHZRdCgpe3ZhciBpPWZ1bmN0aW9uKHMsdSl7eFF0KHUpO3ZhciBkPUFSKHMsIm91dHB1dCIpLHA9QVIoZCwiY2x1c3RlcnMiKSx2PUFSKGQsImVkZ2VQYXRocyIpLGI9eG1lKEFSKGQsImVkZ2VMYWJlbHMiKSx1KSx5PUVtZShBUihkLCJub2RlcyIpLHUsQ21lKTtxRCh1KSxsUXQoeSx1KSx1UXQoYix1KSxrbWUodix1LG1tZSk7dmFyIFQ9eW1lKHAsdSk7Y1F0KFQsdSksa1F0KHUpfTtyZXR1cm4gaS5jcmVhdGVOb2Rlcz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1F0KHMpLGkpOkVtZX0saS5jcmVhdGVDbHVzdGVycz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oWlh0KHMpLGkpOnltZX0saS5jcmVhdGVFZGdlTGFiZWxzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlUXQocyksaSk6eG1lfSxpLmNyZWF0ZUVkZ2VQYXRocz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odFF0KHMpLGkpOmttZX0saS5zaGFwZXM9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGRRdChzKSxpKTpDbWV9LGkuYXJyb3dzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhHWHQocyksaSk6bW1lfSxpfXZhciB3UXQ9e3BhZGRpbmdMZWZ0OjEwLHBhZGRpbmdSaWdodDoxMCxwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscng6MCxyeTowLHNoYXBlOiJyZWN0In0seVF0PXthcnJvd2hlYWQ6Im5vcm1hbCIsY3VydmU6a3B9O2Z1bmN0aW9uIHhRdChpKXtpLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgdT1pLm5vZGUocyk7IUxvKHUsImxhYmVsIikmJiFpLmNoaWxkcmVuKHMpLmxlbmd0aCYmKHUubGFiZWw9cyksTG8odSwicGFkZGluZ1giKSYmJEQodSx7cGFkZGluZ0xlZnQ6dS5wYWRkaW5nWCxwYWRkaW5nUmlnaHQ6dS5wYWRkaW5nWH0pLExvKHUsInBhZGRpbmdZIikmJiREKHUse3BhZGRpbmdUb3A6dS5wYWRkaW5nWSxwYWRkaW5nQm90dG9tOnUucGFkZGluZ1l9KSxMbyh1LCJwYWRkaW5nIikmJiREKHUse3BhZGRpbmdMZWZ0OnUucGFkZGluZyxwYWRkaW5nUmlnaHQ6dS5wYWRkaW5nLHBhZGRpbmdUb3A6dS5wYWRkaW5nLHBhZGRpbmdCb3R0b206dS5wYWRkaW5nfSksJEQodSx3UXQpLEFyKFsicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLGZ1bmN0aW9uKGQpe3VbZF09TnVtYmVyKHVbZF0pfSksTG8odSwid2lkdGgiKSYmKHUuX3ByZXZXaWR0aD11LndpZHRoKSxMbyh1LCJoZWlnaHQiKSYmKHUuX3ByZXZIZWlnaHQ9dS5oZWlnaHQpfSksaS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIHU9aS5lZGdlKHMpO0xvKHUsImxhYmVsIil8fCh1LmxhYmVsPSIiKSwkRCh1LHlRdCl9KX1mdW5jdGlvbiBrUXQoaSl7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHMpe3ZhciB1PWkubm9kZShzKTtMbyh1LCJfcHJldldpZHRoIik/dS53aWR0aD11Ll9wcmV2V2lkdGg6ZGVsZXRlIHUud2lkdGgsTG8odSwiX3ByZXZIZWlnaHQiKT91LmhlaWdodD11Ll9wcmV2SGVpZ2h0OmRlbGV0ZSB1LmhlaWdodCxkZWxldGUgdS5fcHJldldpZHRoLGRlbGV0ZSB1Ll9wcmV2SGVpZ2h0fSl9ZnVuY3Rpb24gQVIoaSxzKXt2YXIgdT1pLnNlbGVjdCgiZy4iK3MpO3JldHVybiB1LmVtcHR5KCkmJih1PWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLHMpKSx1fWZ1bmN0aW9uIFNWZShpLHMsdSl7Y29uc3QgZD1zLndpZHRoLHA9cy5oZWlnaHQsdj0oZCtwKSouOSxiPVt7eDp2LzIseTowfSx7eDp2LHk6LXYvMn0se3g6di8yLHk6LXZ9LHt4OjAseTotdi8yfV0seT16NyhpLHYsdixiKTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oVCl7cmV0dXJuIGU1KHUsYixUKX0seX1mdW5jdGlvbiBfVmUoaSxzLHUpe2NvbnN0IHA9cy5oZWlnaHQsdj1wLzQsYj1zLndpZHRoKzIqdix5PVt7eDp2LHk6MH0se3g6Yi12LHk6MH0se3g6Yix5Oi1wLzJ9LHt4OmItdix5Oi1wfSx7eDp2LHk6LXB9LHt4OjAseTotcC8yfV0sVD16NyhpLGIscCx5KTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIGU1KHUseSxfKX0sVH1mdW5jdGlvbiBBVmUoaSxzLHUpe2NvbnN0IGQ9cy53aWR0aCxwPXMuaGVpZ2h0LHY9W3t4Oi1wLzIseTowfSx7eDpkLHk6MH0se3g6ZCx5Oi1wfSx7eDotcC8yLHk6LXB9LHt4OjAseTotcC8yfV0sYj16NyhpLGQscCx2KTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIGU1KHUsdix5KX0sYn1mdW5jdGlvbiBMVmUoaSxzLHUpe2NvbnN0IGQ9cy53aWR0aCxwPXMuaGVpZ2h0LHY9W3t4Oi0yKnAvNix5OjB9LHt4OmQtcC82LHk6MH0se3g6ZCsyKnAvNix5Oi1wfSx7eDpwLzYseTotcH1dLGI9ejcoaSxkLHAsdik7cmV0dXJuIHUuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBlNSh1LHYseSl9LGJ9ZnVuY3Rpb24gTVZlKGkscyx1KXtjb25zdCBkPXMud2lkdGgscD1zLmhlaWdodCx2PVt7eDoyKnAvNix5OjB9LHt4OmQrcC82LHk6MH0se3g6ZC0yKnAvNix5Oi1wfSx7eDotcC82LHk6LXB9XSxiPXo3KGksZCxwLHYpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gZTUodSx2LHkpfSxifWZ1bmN0aW9uIERWZShpLHMsdSl7Y29uc3QgZD1zLndpZHRoLHA9cy5oZWlnaHQsdj1be3g6LTIqcC82LHk6MH0se3g6ZCsyKnAvNix5OjB9LHt4OmQtcC82LHk6LXB9LHt4OnAvNix5Oi1wfV0sYj16NyhpLGQscCx2KTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIGU1KHUsdix5KX0sYn1mdW5jdGlvbiBJVmUoaSxzLHUpe2NvbnN0IGQ9cy53aWR0aCxwPXMuaGVpZ2h0LHY9W3t4OnAvNix5OjB9LHt4OmQtcC82LHk6MH0se3g6ZCsyKnAvNix5Oi1wfSx7eDotMipwLzYseTotcH1dLGI9ejcoaSxkLHAsdik7cmV0dXJuIHUuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBlNSh1LHYseSl9LGJ9ZnVuY3Rpb24gT1ZlKGkscyx1KXtjb25zdCBkPXMud2lkdGgscD1zLmhlaWdodCx2PVt7eDowLHk6MH0se3g6ZCtwLzIseTowfSx7eDpkLHk6LXAvMn0se3g6ZCtwLzIseTotcH0se3g6MCx5Oi1wfV0sYj16NyhpLGQscCx2KTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIGU1KHUsdix5KX0sYn1mdW5jdGlvbiBOVmUoaSxzLHUpe2NvbnN0IGQ9cy5oZWlnaHQscD1zLndpZHRoK2QvNCx2PWkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigicngiLGQvMikuYXR0cigicnkiLGQvMikuYXR0cigieCIsLXAvMikuYXR0cigieSIsLWQvMikuYXR0cigid2lkdGgiLHApLmF0dHIoImhlaWdodCIsZCk7cmV0dXJuIHUuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBUbWUodSxiKX0sdn1mdW5jdGlvbiBQVmUoaSxzLHUpe2NvbnN0IGQ9cy53aWR0aCxwPXMuaGVpZ2h0LHY9W3t4OjAseTowfSx7eDpkLHk6MH0se3g6ZCx5Oi1wfSx7eDowLHk6LXB9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OmQrOCx5OjB9LHt4OmQrOCx5Oi1wfSx7eDotOCx5Oi1wfSx7eDotOCx5OjB9XSxiPXo3KGksZCxwLHYpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gZTUodSx2LHkpfSxifWZ1bmN0aW9uIEJWZShpLHMsdSl7Y29uc3QgZD1zLndpZHRoLHA9ZC8yLHY9cC8oMi41K2QvNTApLGI9cy5oZWlnaHQrdix5PSJNIDAsIit2KyIgYSAiK3ArIiwiK3YrIiAwLDAsMCAiK2QrIiAwIGEgIitwKyIsIit2KyIgMCwwLDAgIistZCsiIDAgbCAwLCIrYisiIGEgIitwKyIsIit2KyIgMCwwLDAgIitkKyIgMCBsIDAsIistYixUPWkuYXR0cigibGFiZWwtb2Zmc2V0LXkiLHYpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImQiLHkpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1kLzIrIiwiKy0oYi8yK3YpKyIpIik7cmV0dXJuIHUuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe2NvbnN0IEE9VG1lKHUsXyksUD1BLngtdS54O2lmKHAhPTAmJihNYXRoLmFicyhQKTx1LndpZHRoLzJ8fE1hdGguYWJzKFApPT11LndpZHRoLzImJk1hdGguYWJzKEEueS11LnkpPnUuaGVpZ2h0LzItdikpe2xldCBSPXYqdiooMS1QKlAvKHAqcCkpO1IhPTAmJihSPU1hdGguc3FydChSKSksUj12LVIsXy55LXUueT4wJiYoUj0tUiksQS55Kz1SfXJldHVybiBBfSxUfWZ1bmN0aW9uIEVRdChpKXtpLnNoYXBlcygpLnF1ZXN0aW9uPVNWZSxpLnNoYXBlcygpLmhleGFnb249X1ZlLGkuc2hhcGVzKCkuc3RhZGl1bT1OVmUsaS5zaGFwZXMoKS5zdWJyb3V0aW5lPVBWZSxpLnNoYXBlcygpLmN5bGluZGVyPUJWZSxpLnNoYXBlcygpLnJlY3RfbGVmdF9pbnZfYXJyb3c9QVZlLGkuc2hhcGVzKCkubGVhbl9yaWdodD1MVmUsaS5zaGFwZXMoKS5sZWFuX2xlZnQ9TVZlLGkuc2hhcGVzKCkudHJhcGV6b2lkPURWZSxpLnNoYXBlcygpLmludl90cmFwZXpvaWQ9SVZlLGkuc2hhcGVzKCkucmVjdF9yaWdodF9pbnZfYXJyb3c9T1ZlfWZ1bmN0aW9uIFRRdChpKXtpKHtxdWVzdGlvbjpTVmV9KSxpKHtoZXhhZ29uOl9WZX0pLGkoe3N0YWRpdW06TlZlfSksaSh7c3Vicm91dGluZTpQVmV9KSxpKHtjeWxpbmRlcjpCVmV9KSxpKHtyZWN0X2xlZnRfaW52X2Fycm93OkFWZX0pLGkoe2xlYW5fcmlnaHQ6TFZlfSksaSh7bGVhbl9sZWZ0Ok1WZX0pLGkoe3RyYXBlem9pZDpEVmV9KSxpKHtpbnZfdHJhcGV6b2lkOklWZX0pLGkoe3JlY3RfcmlnaHRfaW52X2Fycm93Ok9WZX0pfWZ1bmN0aW9uIHo3KGkscyx1LGQpe3JldHVybiBpLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsZC5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIHAueCsiLCIrcC55fSkuam9pbigiICIpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcy8yKyIsIit1LzIrIikiKX1jb25zdCBDUXQ9e2FkZFRvUmVuZGVyOkVRdCxhZGRUb1JlbmRlclYyOlRRdH0sRlZlPXt9LFNRdD1mdW5jdGlvbihpKXtjb25zdCBzPU9iamVjdC5rZXlzKGkpO2Zvcihjb25zdCB1IG9mIHMpRlZlW3VdPWlbdV19LFJWZT1hc3luYyBmdW5jdGlvbihpLHMsdSxkLHAsdil7Y29uc3QgYj1kP2Quc2VsZWN0KGBbaWQ9IiR7dX0iXWApOklyKGBbaWQ9IiR7dX0iXWApLHk9cHx8ZG9jdW1lbnQsVD1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgXyBvZiBUKXtjb25zdCBBPWlbX107bGV0IFA9ImRlZmF1bHQiO0EuY2xhc3Nlcy5sZW5ndGg+MCYmKFA9QS5jbGFzc2VzLmpvaW4oIiAiKSk7Y29uc3QgUj1vbShBLnN0eWxlcyk7bGV0IEY9QS50ZXh0IT09dm9pZCAwP0EudGV4dDpBLmlkLGo7aWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IGllPXtsYWJlbDphd2FpdCBDQyhGLnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxvZT0+YDxpIGNsYXNzPScke29lLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCkscXQoKSl9O2o9dm1lKGIsaWUpLm5vZGUoKSxqLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoail9ZWxzZXtjb25zdCBpZT15LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7aWUuc2V0QXR0cmlidXRlKCJzdHlsZSIsUi5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2NvbnN0IG9lPUYuc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpO2Zvcihjb25zdCBwZSBvZiBvZSl7Y29uc3QgYmU9eS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtiZS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxiZS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksYmUuc2V0QXR0cmlidXRlKCJ4IiwiMSIpLGJlLnRleHRDb250ZW50PXBlLGllLmFwcGVuZENoaWxkKGJlKX1qPWllfWxldCBLPTAsZWU9IiI7c3dpdGNoKEEudHlwZSl7Y2FzZSJyb3VuZCI6Sz01LGVlPSJyZWN0IjticmVhaztjYXNlInNxdWFyZSI6ZWU9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6ZWU9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOmVlPSJoZXhhZ29uIjticmVhaztjYXNlIm9kZCI6ZWU9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6ZWU9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjplZT0ibGVhbl9sZWZ0IjticmVhaztjYXNlInRyYXBlem9pZCI6ZWU9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjplZT0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJvZGRfcmlnaHQiOmVlPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImNpcmNsZSI6ZWU9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjplZT0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjplZT0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjplZT0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6ZWU9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjplZT0icmVjdCI7YnJlYWs7ZGVmYXVsdDplZT0icmVjdCJ9WGUud2FybigiQWRkaW5nIG5vZGUiLEEuaWQsQS5kb21JZCkscy5zZXROb2RlKHYuZGIubG9va1VwRG9tSWQoQS5pZCkse2xhYmVsVHlwZToic3ZnIixsYWJlbFN0eWxlOlIubGFiZWxTdHlsZSxzaGFwZTplZSxsYWJlbDpqLHJ4Oksscnk6SyxjbGFzczpQLHN0eWxlOlIuc3R5bGUsaWQ6di5kYi5sb29rVXBEb21JZChBLmlkKX0pfX0salZlPWFzeW5jIGZ1bmN0aW9uKGkscyx1KXtsZXQgZD0wLHAsdjtpZihpLmRlZmF1bHRTdHlsZSE9PXZvaWQgMCl7Y29uc3QgYj1vbShpLmRlZmF1bHRTdHlsZSk7cD1iLnN0eWxlLHY9Yi5sYWJlbFN0eWxlfWZvcihjb25zdCBiIG9mIGkpe2QrKztjb25zdCB5PSJMLSIrYi5zdGFydCsiLSIrYi5lbmQsVD0iTFMtIitiLnN0YXJ0LF89IkxFLSIrYi5lbmQsQT17fTtiLnR5cGU9PT0iYXJyb3dfb3BlbiI/QS5hcnJvd2hlYWQ9Im5vbmUiOkEuYXJyb3doZWFkPSJub3JtYWwiO2xldCBQPSIiLFI9IiI7aWYoYi5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgRj1vbShiLnN0eWxlKTtQPUYuc3R5bGUsUj1GLmxhYmVsU3R5bGV9ZWxzZSBzd2l0Y2goYi5zdHJva2Upe2Nhc2Uibm9ybWFsIjpQPSJmaWxsOm5vbmUiLHAhPT12b2lkIDAmJihQPXApLHYhPT12b2lkIDAmJihSPXYpO2JyZWFrO2Nhc2UiZG90dGVkIjpQPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpQPSIgc3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmUiO2JyZWFrfUEuc3R5bGU9UCxBLmxhYmVsU3R5bGU9UixiLmludGVycG9sYXRlIT09dm9pZCAwP0EuY3VydmU9T3YoYi5pbnRlcnBvbGF0ZSxrcCk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/QS5jdXJ2ZT1PdihpLmRlZmF1bHRJbnRlcnBvbGF0ZSxrcCk6QS5jdXJ2ZT1PdihGVmUuY3VydmUsa3ApLGIudGV4dD09PXZvaWQgMD9iLnN0eWxlIT09dm9pZCAwJiYoQS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihBLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixBLmxhYmVscG9zPSJjIixmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKT8oQS5sYWJlbFR5cGU9Imh0bWwiLEEubGFiZWw9YDxzcGFuIGlkPSJMLSR7eX0iIGNsYXNzPSJlZGdlTGFiZWwgTC0ke1R9JyBMLSR7X30iIHN0eWxlPSIke0EubGFiZWxTdHlsZX0iPiR7YXdhaXQgQ0MoYi50ZXh0LnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxGPT5gPGkgY2xhc3M9JyR7Ri5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApLHF0KCkpfTwvc3Bhbj5gKTooQS5sYWJlbFR5cGU9InRleHQiLEEubGFiZWw9Yi50ZXh0LnJlcGxhY2UoY2kubGluZUJyZWFrUmVnZXgsYApgKSxiLnN0eWxlPT09dm9pZCAwJiYoQS5zdHlsZT1BLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLEEubGFiZWxTdHlsZT1BLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSkpLEEuaWQ9eSxBLmNsYXNzPVQrIiAiK18sQS5taW5sZW49Yi5sZW5ndGh8fDEscy5zZXRFZGdlKHUuZGIubG9va1VwRG9tSWQoYi5zdGFydCksdS5kYi5sb29rVXBEb21JZChiLmVuZCksQSxkKX19LF9RdD17c2V0Q29uZjpTUXQsYWRkVmVydGljZXM6UlZlLGFkZEVkZ2VzOmpWZSxnZXRDbGFzc2VzOmZ1bmN0aW9uKGkscyl7cmV0dXJuIFhlLmluZm8oIkV4dHJhY3RpbmcgY2xhc3NlcyIpLHMuZGIuZ2V0Q2xhc3NlcygpfSxkcmF3OmFzeW5jIGZ1bmN0aW9uKGkscyx1LGQpe1hlLmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0Iik7Y29uc3R7c2VjdXJpdHlMZXZlbDpwLGZsb3djaGFydDp2fT1xdCgpO2xldCBiO3A9PT0ic2FuZGJveCImJihiPUlyKCIjaSIrcykpO2NvbnN0IHk9SXIocD09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKSxUPXA9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudDtsZXQgXz1kLmRiLmdldERpcmVjdGlvbigpO189PT12b2lkIDAmJihfPSJURCIpO2NvbnN0IEE9di5ub2RlU3BhY2luZ3x8NTAsUD12LnJhbmtTcGFjaW5nfHw1MCxSPW5ldyBCMCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOl8sbm9kZXNlcDpBLHJhbmtzZXA6UCxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7bGV0IEY7Y29uc3Qgaj1kLmRiLmdldFN1YkdyYXBocygpO2ZvcihsZXQgbmU9ai5sZW5ndGgtMTtuZT49MDtuZS0tKUY9altuZV0sZC5kYi5hZGRWZXJ0ZXgoRi5pZCxGLnRpdGxlLCJncm91cCIsdm9pZCAwLEYuY2xhc3Nlcyk7Y29uc3QgSz1kLmRiLmdldFZlcnRpY2VzKCk7WGUud2FybigiR2V0IHZlcnRpY2VzIixLKTtjb25zdCBlZT1kLmRiLmdldEVkZ2VzKCk7bGV0IGllPTA7Zm9yKGllPWoubGVuZ3RoLTE7aWU+PTA7aWUtLSl7Rj1qW2llXSxfQmUoImNsdXN0ZXIiKS5hcHBlbmQoInRleHQiKTtmb3IobGV0IG5lPTA7bmU8Ri5ub2Rlcy5sZW5ndGg7bmUrKylYZS53YXJuKCJTZXR0aW5nIHN1YmdyYXBoIixGLm5vZGVzW25lXSxkLmRiLmxvb2tVcERvbUlkKEYubm9kZXNbbmVdKSxkLmRiLmxvb2tVcERvbUlkKEYuaWQpKSxSLnNldFBhcmVudChkLmRiLmxvb2tVcERvbUlkKEYubm9kZXNbbmVdKSxkLmRiLmxvb2tVcERvbUlkKEYuaWQpKX1hd2FpdCBSVmUoSyxSLHMseSxULGQpLGF3YWl0IGpWZShlZSxSLGQpO2NvbnN0IG9lPW5ldyB2UXQ7Q1F0LmFkZFRvUmVuZGVyKG9lKSxvZS5hcnJvd3MoKS5ub25lPWZ1bmN0aW9uKHNlLGRlLFgsZ2Upe2NvbnN0IHhlPXNlLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGRlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAwIDAgTCAwIDAgeiIpO1o0KHhlLFhbZ2UrIlN0eWxlIl0pfSxvZS5hcnJvd3MoKS5ub3JtYWw9ZnVuY3Rpb24oc2UsZGUpe3NlLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGRlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd2hlYWRQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX07Y29uc3QgcGU9eS5zZWxlY3QoYFtpZD0iJHtzfSJdYCksYmU9eS5zZWxlY3QoIiMiK3MrIiBnIik7Zm9yKG9lKGJlLFIpLGJlLnNlbGVjdEFsbCgiZy5ub2RlIikuYXR0cigidGl0bGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGIuZ2V0VG9vbHRpcCh0aGlzLmlkKX0pLGQuZGIuaW5kZXhOb2Rlcygic3ViR3JhcGgiK2llKSxpZT0wO2llPGoubGVuZ3RoO2llKyspaWYoRj1qW2llXSxGLnRpdGxlIT09InVuZGVmaW5lZCIpe2NvbnN0IG5lPVQucXVlcnlTZWxlY3RvckFsbCgiIyIrcysnIFtpZD0iJytkLmRiLmxvb2tVcERvbUlkKEYuaWQpKyciXSByZWN0Jyksc2U9VC5xdWVyeVNlbGVjdG9yQWxsKCIjIitzKycgW2lkPSInK2QuZGIubG9va1VwRG9tSWQoRi5pZCkrJyJdJyksZGU9bmVbMF0ueC5iYXNlVmFsLnZhbHVlLFg9bmVbMF0ueS5iYXNlVmFsLnZhbHVlLGdlPW5lWzBdLndpZHRoLmJhc2VWYWwudmFsdWUseGU9SXIoc2VbMF0pLnNlbGVjdCgiLmxhYmVsIik7eGUuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7ZGUrZ2UvMn0sICR7WCsxNH0pYCkseGUuYXR0cigiaWQiLHMrIlRleHQiKTtmb3IobGV0IFU9MDtVPEYuY2xhc3Nlcy5sZW5ndGg7VSsrKXNlWzBdLmNsYXNzTGlzdC5hZGQoRi5jbGFzc2VzW1VdKX1pZighdi5odG1sTGFiZWxzKXtjb25zdCBuZT1ULnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytzKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBzZSBvZiBuZSl7Y29uc3QgZGU9c2UuZ2V0QkJveCgpLFg9VC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO1guc2V0QXR0cmlidXRlKCJyeCIsMCksWC5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxYLnNldEF0dHJpYnV0ZSgid2lkdGgiLGRlLndpZHRoKSxYLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixkZS5oZWlnaHQpLHNlLmluc2VydEJlZm9yZShYLHNlLmZpcnN0Q2hpbGQpfX15OShSLHBlLHYuZGlhZ3JhbVBhZGRpbmcsdi51c2VNYXhXaWR0aCksT2JqZWN0LmtleXMoSykuZm9yRWFjaChmdW5jdGlvbihuZSl7Y29uc3Qgc2U9S1tuZV07aWYoc2UubGluayl7Y29uc3QgZGU9eS5zZWxlY3QoIiMiK3MrJyBbaWQ9IicrZC5kYi5sb29rVXBEb21JZChuZSkrJyJdJyk7aWYoZGUpe2NvbnN0IFg9VC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO1guc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLHNlLmNsYXNzZXMuam9pbigiICIpKSxYLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImhyZWYiLHNlLmxpbmspLFguc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSxwPT09InNhbmRib3giP1guc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IiwiX3RvcCIpOnNlLmxpbmtUYXJnZXQmJlguc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IixzZS5saW5rVGFyZ2V0KTtjb25zdCBnZT1kZS5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gWH0sIjpmaXJzdC1jaGlsZCIpLFc9ZGUuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7VyYmZ2UuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIFcubm9kZSgpfSk7Y29uc3QgeGU9ZGUuc2VsZWN0KCIubGFiZWwiKTt4ZSYmZ2UuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHhlLm5vZGUoKX0pfX19KX19O2Z1bmN0aW9uIHE3KGkpe3ZhciBzPXtvcHRpb25zOntkaXJlY3RlZDppLmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOmkuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6aS5pc0NvbXBvdW5kKCl9LG5vZGVzOkFRdChpKSxlZGdlczpMUXQoaSl9O3JldHVybiBRZihpLmdyYXBoKCkpfHwocy52YWx1ZT1ESGUoaS5ncmFwaCgpKSksc31mdW5jdGlvbiBBUXQoaSl7cmV0dXJuIFAwKGkubm9kZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLm5vZGUocyksZD1pLnBhcmVudChzKSxwPXt2OnN9O3JldHVybiBRZih1KXx8KHAudmFsdWU9dSksUWYoZCl8fChwLnBhcmVudD1kKSxwfSl9ZnVuY3Rpb24gTFF0KGkpe3JldHVybiBQMChpLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIHU9aS5lZGdlKHMpLGQ9e3Y6cy52LHc6cy53fTtyZXR1cm4gUWYocy5uYW1lKXx8KGQubmFtZT1zLm5hbWUpLFFmKHUpfHwoZC52YWx1ZT11KSxkfSl9Y29uc3QgTVF0PShpLHMsdSxkKT0+e3MuZm9yRWFjaChwPT57RFF0W3BdKGksdSxkKX0pfSxEUXQ9e2V4dGVuc2lvbjooaSxzLHUpPT57WGUudHJhY2UoIk1ha2luZyBtYXJrZXJzIGZvciAiLHUpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWV4dGVuc2lvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrcykuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWV4dGVuc2lvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK3MpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBWIDEzIEwxOCw3IFoiKX0sY29tcG9zaXRpb246KGkscyx1KT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK3MpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHUrIl8iK3MrIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrcykuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSxhZ2dyZWdhdGlvbjooaSxzLHUpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1KyJfIitzKyItYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrcykuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWFnZ3JlZ2F0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitzKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LGRlcGVuZGVuY3k6KGkscyx1KT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitzKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrcykuYXR0cigicmVmWCIsMTMpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LGxvbGxpcG9wOihpLHMsdSk9PntpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHUrIl8iK3MrIi1sb2xsaXBvcFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitzKS5hdHRyKCJyZWZYIiwxMykuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHUrIl8iK3MrIi1sb2xsaXBvcEVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGxvbGxpcG9wICIrcykuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KX0scG9pbnQ6KGkscyx1KT0+e2kuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLXBvaW50RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitzKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNikuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksaS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1KyJfIitzKyItcG9pbnRTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrcykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDQuNSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDEwIEwgMTAgMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjaXJjbGU6KGkscyx1KT0+e2kuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWNpcmNsZUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrcykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDExKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSxpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHUrIl8iK3MrIi1jaXJjbGVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrcykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sY3Jvc3M6KGkscyx1KT0+e2kuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWNyb3NzRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitzKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsMTIpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLGkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWNyb3NzU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK3MpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGJhcmI6KGkscyx1KT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWJhcmJFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE0KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIil9fSxTbWU9TVF0O2Z1bmN0aW9uIElRdChpLHMpe3MmJmkuYXR0cigic3R5bGUiLHMpfWZ1bmN0aW9uIE9RdChpKXtjb25zdCBzPUlyKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb3JlaWduT2JqZWN0IikpLHU9cy5hcHBlbmQoInhodG1sOmRpdiIpLGQ9aS5sYWJlbCxwPWkuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiO3JldHVybiB1Lmh0bWwoJzxzcGFuIGNsYXNzPSInK3ArJyIgJysoaS5sYWJlbFN0eWxlPydzdHlsZT0iJytpLmxhYmVsU3R5bGUrJyInOiIiKSsiPiIrZCsiPC9zcGFuPiIpLElRdCh1LGkubGFiZWxTdHlsZSksdS5zdHlsZSgiZGlzcGxheSIsImlubGluZS1ibG9jayIpLHUuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIiksdS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxzLm5vZGUoKX1jb25zdCAkMj0oaSxzLHUsZCk9PntsZXQgcD1pfHwiIjtpZih0eXBlb2YgcD09Im9iamVjdCImJihwPXBbMF0pLGYxKHF0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtwPXAucmVwbGFjZSgvXFxufFxuL2csIjxiciAvPiIpLFhlLmRlYnVnKCJ2ZXJ0ZXhUZXh0IitwKTtjb25zdCB2PXtpc05vZGU6ZCxsYWJlbDpaRihwKS5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2cseT0+YDxpIGNsYXNzPScke3kucmVwbGFjZSgiOiIsIiAiKX0nPjwvaT5gKSxsYWJlbFN0eWxlOnMucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX07cmV0dXJuIE9RdCh2KX1lbHNle2NvbnN0IHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTt2LnNldEF0dHJpYnV0ZSgic3R5bGUiLHMucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSk7bGV0IGI9W107dHlwZW9mIHA9PSJzdHJpbmciP2I9cC5zcGxpdCgvXFxufFxufDxiclxzKlwvPz4vZ2kpOkFycmF5LmlzQXJyYXkocCk/Yj1wOmI9W107Zm9yKGNvbnN0IHkgb2YgYil7Y29uc3QgVD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtULnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLFQuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLFQuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHU/VC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwidGl0bGUtcm93Iik6VC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IiksVC50ZXh0Q29udGVudD15LnRyaW0oKSx2LmFwcGVuZENoaWxkKFQpfXJldHVybiB2fX0sTlF0PXt9O2Z1bmN0aW9uIFBRdChpLHMpe2NvbnN0IHU9c3x8TlF0LGQ9dHlwZW9mIHUuaW5jbHVkZUltYWdlQWx0PT0iYm9vbGVhbiI/dS5pbmNsdWRlSW1hZ2VBbHQ6ITAscD10eXBlb2YgdS5pbmNsdWRlSHRtbD09ImJvb2xlYW4iP3UuaW5jbHVkZUh0bWw6ITA7cmV0dXJuICRWZShpLGQscCl9ZnVuY3Rpb24gJFZlKGkscyx1KXtpZihCUXQoaSkpe2lmKCJ2YWx1ZSJpbiBpKXJldHVybiBpLnR5cGU9PT0iaHRtbCImJiF1PyIiOmkudmFsdWU7aWYocyYmImFsdCJpbiBpJiZpLmFsdClyZXR1cm4gaS5hbHQ7aWYoImNoaWxkcmVuImluIGkpcmV0dXJuIHpWZShpLmNoaWxkcmVuLHMsdSl9cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/elZlKGkscyx1KToiIn1mdW5jdGlvbiB6VmUoaSxzLHUpe2NvbnN0IGQ9W107bGV0IHA9LTE7Zm9yKDsrK3A8aS5sZW5ndGg7KWRbcF09JFZlKGlbcF0scyx1KTtyZXR1cm4gZC5qb2luKCIiKX1mdW5jdGlvbiBCUXQoaSl7cmV0dXJuISEoaSYmdHlwZW9mIGk9PSJvYmplY3QiKX1mdW5jdGlvbiB0NShpLHMsdSxkKXtjb25zdCBwPWkubGVuZ3RoO2xldCB2PTAsYjtpZihzPDA/cz0tcz5wPzA6cCtzOnM9cz5wP3A6cyx1PXU+MD91OjAsZC5sZW5ndGg8MWU0KWI9QXJyYXkuZnJvbShkKSxiLnVuc2hpZnQocyx1KSxpLnNwbGljZSguLi5iKTtlbHNlIGZvcih1JiZpLnNwbGljZShzLHUpO3Y8ZC5sZW5ndGg7KWI9ZC5zbGljZSh2LHYrMWU0KSxiLnVuc2hpZnQocywwKSxpLnNwbGljZSguLi5iKSx2Kz0xZTQscys9MWU0fWZ1bmN0aW9uIHp2KGkscyl7cmV0dXJuIGkubGVuZ3RoPjA/KHQ1KGksaS5sZW5ndGgsMCxzKSxpKTpzfWNvbnN0IHFWZT17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBGUXQoaSl7Y29uc3Qgcz17fTtsZXQgdT0tMTtmb3IoOysrdTxpLmxlbmd0aDspUlF0KHMsaVt1XSk7cmV0dXJuIHN9ZnVuY3Rpb24gUlF0KGkscyl7bGV0IHU7Zm9yKHUgaW4gcyl7Y29uc3QgcD0ocVZlLmNhbGwoaSx1KT9pW3VdOnZvaWQgMCl8fChpW3VdPXt9KSx2PXNbdV07bGV0IGI7aWYodilmb3IoYiBpbiB2KXtxVmUuY2FsbChwLGIpfHwocFtiXT1bXSk7Y29uc3QgeT12W2JdO2pRdChwW2JdLEFycmF5LmlzQXJyYXkoeSk/eTp5P1t5XTpbXSl9fX1mdW5jdGlvbiBqUXQoaSxzKXtsZXQgdT0tMTtjb25zdCBkPVtdO2Zvcig7Kyt1PHMubGVuZ3RoOykoc1t1XS5hZGQ9PT0iYWZ0ZXIiP2k6ZCkucHVzaChzW3VdKTt0NShpLDAsMCxkKX1jb25zdCAkUXQ9L1shLVwvOi1AXFstYFx7LX5ceEExXHhBN1x4QUJceEI2XHhCN1x4QkJceEJGXHUwMzdFXHUwMzg3XHUwNTVBLVx1MDU1Rlx1MDU4OVx1MDU4QVx1MDVCRVx1MDVDMFx1MDVDM1x1MDVDNlx1MDVGM1x1MDVGNFx1MDYwOVx1MDYwQVx1MDYwQ1x1MDYwRFx1MDYxQlx1MDYxRC1cdTA2MUZcdTA2NkEtXHUwNjZEXHUwNkQ0XHUwNzAwLVx1MDcwRFx1MDdGNy1cdTA3RjlcdTA4MzAtXHUwODNFXHUwODVFXHUwOTY0XHUwOTY1XHUwOTcwXHUwOUZEXHUwQTc2XHUwQUYwXHUwQzc3XHUwQzg0XHUwREY0XHUwRTRGXHUwRTVBXHUwRTVCXHUwRjA0LVx1MEYxMlx1MEYxNFx1MEYzQS1cdTBGM0RcdTBGODVcdTBGRDAtXHUwRkQ0XHUwRkQ5XHUwRkRBXHUxMDRBLVx1MTA0Rlx1MTBGQlx1MTM2MC1cdTEzNjhcdTE0MDBcdTE2NkVcdTE2OUJcdTE2OUNcdTE2RUItXHUxNkVEXHUxNzM1XHUxNzM2XHUxN0Q0LVx1MTdENlx1MTdEOC1cdTE3REFcdTE4MDAtXHUxODBBXHUxOTQ0XHUxOTQ1XHUxQTFFXHUxQTFGXHUxQUEwLVx1MUFBNlx1MUFBOC1cdTFBQURcdTFCNUEtXHUxQjYwXHUxQjdEXHUxQjdFXHUxQkZDLVx1MUJGRlx1MUMzQi1cdTFDM0ZcdTFDN0VcdTFDN0ZcdTFDQzAtXHUxQ0M3XHUxQ0QzXHUyMDEwLVx1MjAyN1x1MjAzMC1cdTIwNDNcdTIwNDUtXHUyMDUxXHUyMDUzLVx1MjA1RVx1MjA3RFx1MjA3RVx1MjA4RFx1MjA4RVx1MjMwOC1cdTIzMEJcdTIzMjlcdTIzMkFcdTI3NjgtXHUyNzc1XHUyN0M1XHUyN0M2XHUyN0U2LVx1MjdFRlx1Mjk4My1cdTI5OThcdTI5RDgtXHUyOURCXHUyOUZDXHUyOUZEXHUyQ0Y5LVx1MkNGQ1x1MkNGRVx1MkNGRlx1MkQ3MFx1MkUwMC1cdTJFMkVcdTJFMzAtXHUyRTRGXHUyRTUyLVx1MkU1RFx1MzAwMS1cdTMwMDNcdTMwMDgtXHUzMDExXHUzMDE0LVx1MzAxRlx1MzAzMFx1MzAzRFx1MzBBMFx1MzBGQlx1QTRGRVx1QTRGRlx1QTYwRC1cdUE2MEZcdUE2NzNcdUE2N0VcdUE2RjItXHVBNkY3XHVBODc0LVx1QTg3N1x1QThDRVx1QThDRlx1QThGOC1cdUE4RkFcdUE4RkNcdUE5MkVcdUE5MkZcdUE5NUZcdUE5QzEtXHVBOUNEXHVBOURFXHVBOURGXHVBQTVDLVx1QUE1Rlx1QUFERVx1QUFERlx1QUFGMFx1QUFGMVx1QUJFQlx1RkQzRVx1RkQzRlx1RkUxMC1cdUZFMTlcdUZFMzAtXHVGRTUyXHVGRTU0LVx1RkU2MVx1RkU2M1x1RkU2OFx1RkU2QVx1RkU2Qlx1RkYwMS1cdUZGMDNcdUZGMDUtXHVGRjBBXHVGRjBDLVx1RkYwRlx1RkYxQVx1RkYxQlx1RkYxRlx1RkYyMFx1RkYzQi1cdUZGM0RcdUZGM0ZcdUZGNUJcdUZGNURcdUZGNUYtXHVGRjY1XS8sbjU9TzkoL1tBLVphLXpdLyksSDM9TzkoL1tcZEEtWmEtel0vKSx6UXQ9TzkoL1sjLScqK1wtLTk9P0EtWl4tfl0vKTtmdW5jdGlvbiBfbWUoaSl7cmV0dXJuIGkhPT1udWxsJiYoaTwzMnx8aT09PTEyNyl9Y29uc3QgQW1lPU85KC9cZC8pLHFRdD1POSgvW1xkQS1GYS1mXS8pLEhRdD1POSgvWyEtLzotQFstYHstfl0vKTtmdW5jdGlvbiBzbyhpKXtyZXR1cm4gaSE9PW51bGwmJmk8LTJ9ZnVuY3Rpb24gejIoaSl7cmV0dXJuIGkhPT1udWxsJiYoaTwwfHxpPT09MzIpfWZ1bmN0aW9uIEl1KGkpe3JldHVybiBpPT09LTJ8fGk9PT0tMXx8aT09PTMyfWNvbnN0IFZRdD1POSgkUXQpLFVRdD1POSgvXHMvKTtmdW5jdGlvbiBPOShpKXtyZXR1cm4gcztmdW5jdGlvbiBzKHUpe3JldHVybiB1IT09bnVsbCYmaS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUodSkpfX1mdW5jdGlvbiBLbChpLHMsdSxkKXtjb25zdCBwPWQ/ZC0xOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgdj0wO3JldHVybiBiO2Z1bmN0aW9uIGIoVCl7cmV0dXJuIEl1KFQpPyhpLmVudGVyKHUpLHkoVCkpOnMoVCl9ZnVuY3Rpb24geShUKXtyZXR1cm4gSXUoVCkmJnYrKzxwPyhpLmNvbnN1bWUoVCkseSk6KGkuZXhpdCh1KSxzKFQpKX19Y29uc3QgR1F0PXt0b2tlbml6ZTpLUXR9O2Z1bmN0aW9uIEtRdChpKXtjb25zdCBzPWkuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmNvbnRlbnRJbml0aWFsLGQscCk7bGV0IHU7cmV0dXJuIHM7ZnVuY3Rpb24gZCh5KXtpZih5PT09bnVsbCl7aS5jb25zdW1lKHkpO3JldHVybn1yZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZSh5KSxpLmV4aXQoImxpbmVFbmRpbmciKSxLbChpLHMsImxpbmVQcmVmaXgiKX1mdW5jdGlvbiBwKHkpe3JldHVybiBpLmVudGVyKCJwYXJhZ3JhcGgiKSx2KHkpfWZ1bmN0aW9uIHYoeSl7Y29uc3QgVD1pLmVudGVyKCJjaHVua1RleHQiLHtjb250ZW50VHlwZToidGV4dCIscHJldmlvdXM6dX0pO3JldHVybiB1JiYodS5uZXh0PVQpLHU9VCxiKHkpfWZ1bmN0aW9uIGIoeSl7aWYoeT09PW51bGwpe2kuZXhpdCgiY2h1bmtUZXh0IiksaS5leGl0KCJwYXJhZ3JhcGgiKSxpLmNvbnN1bWUoeSk7cmV0dXJufXJldHVybiBzbyh5KT8oaS5jb25zdW1lKHkpLGkuZXhpdCgiY2h1bmtUZXh0Iiksdik6KGkuY29uc3VtZSh5KSxiKX19Y29uc3QgV1F0PXt0b2tlbml6ZTpZUXR9LEhWZT17dG9rZW5pemU6WFF0fTtmdW5jdGlvbiBZUXQoaSl7Y29uc3Qgcz10aGlzLHU9W107bGV0IGQ9MCxwLHYsYjtyZXR1cm4geTtmdW5jdGlvbiB5KHBlKXtpZihkPHUubGVuZ3RoKXtjb25zdCBiZT11W2RdO3JldHVybiBzLmNvbnRhaW5lclN0YXRlPWJlWzFdLGkuYXR0ZW1wdChiZVswXS5jb250aW51YXRpb24sVCxfKShwZSl9cmV0dXJuIF8ocGUpfWZ1bmN0aW9uIFQocGUpe2lmKGQrKyxzLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cpe3MuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz12b2lkIDAscCYmb2UoKTtjb25zdCBiZT1zLmV2ZW50cy5sZW5ndGg7bGV0IGFlPWJlLG5lO2Zvcig7YWUtLTspaWYocy5ldmVudHNbYWVdWzBdPT09ImV4aXQiJiZzLmV2ZW50c1thZV1bMV0udHlwZT09PSJjaHVua0Zsb3ciKXtuZT1zLmV2ZW50c1thZV1bMV0uZW5kO2JyZWFrfWllKGQpO2xldCBzZT1iZTtmb3IoO3NlPHMuZXZlbnRzLmxlbmd0aDspcy5ldmVudHNbc2VdWzFdLmVuZD1PYmplY3QuYXNzaWduKHt9LG5lKSxzZSsrO3JldHVybiB0NShzLmV2ZW50cyxhZSsxLDAscy5ldmVudHMuc2xpY2UoYmUpKSxzLmV2ZW50cy5sZW5ndGg9c2UsXyhwZSl9cmV0dXJuIHkocGUpfWZ1bmN0aW9uIF8ocGUpe2lmKGQ9PT11Lmxlbmd0aCl7aWYoIXApcmV0dXJuIFIocGUpO2lmKHAuY3VycmVudENvbnN0cnVjdCYmcC5jdXJyZW50Q29uc3RydWN0LmNvbmNyZXRlKXJldHVybiBqKHBlKTtzLmludGVycnVwdD0hIShwLmN1cnJlbnRDb25zdHJ1Y3QmJiFwLl9nZm1UYWJsZUR5bmFtaWNJbnRlcnJ1cHRIYWNrKX1yZXR1cm4gcy5jb250YWluZXJTdGF0ZT17fSxpLmNoZWNrKEhWZSxBLFApKHBlKX1mdW5jdGlvbiBBKHBlKXtyZXR1cm4gcCYmb2UoKSxpZShkKSxSKHBlKX1mdW5jdGlvbiBQKHBlKXtyZXR1cm4gcy5wYXJzZXIubGF6eVtzLm5vdygpLmxpbmVdPWQhPT11Lmxlbmd0aCxiPXMubm93KCkub2Zmc2V0LGoocGUpfWZ1bmN0aW9uIFIocGUpe3JldHVybiBzLmNvbnRhaW5lclN0YXRlPXt9LGkuYXR0ZW1wdChIVmUsRixqKShwZSl9ZnVuY3Rpb24gRihwZSl7cmV0dXJuIGQrKyx1LnB1c2goW3MuY3VycmVudENvbnN0cnVjdCxzLmNvbnRhaW5lclN0YXRlXSksUihwZSl9ZnVuY3Rpb24gaihwZSl7aWYocGU9PT1udWxsKXtwJiZvZSgpLGllKDApLGkuY29uc3VtZShwZSk7cmV0dXJufXJldHVybiBwPXB8fHMucGFyc2VyLmZsb3cocy5ub3coKSksaS5lbnRlcigiY2h1bmtGbG93Iix7Y29udGVudFR5cGU6ImZsb3ciLHByZXZpb3VzOnYsX3Rva2VuaXplcjpwfSksSyhwZSl9ZnVuY3Rpb24gSyhwZSl7aWYocGU9PT1udWxsKXtlZShpLmV4aXQoImNodW5rRmxvdyIpLCEwKSxpZSgwKSxpLmNvbnN1bWUocGUpO3JldHVybn1yZXR1cm4gc28ocGUpPyhpLmNvbnN1bWUocGUpLGVlKGkuZXhpdCgiY2h1bmtGbG93IikpLGQ9MCxzLmludGVycnVwdD12b2lkIDAseSk6KGkuY29uc3VtZShwZSksSyl9ZnVuY3Rpb24gZWUocGUsYmUpe2NvbnN0IGFlPXMuc2xpY2VTdHJlYW0ocGUpO2lmKGJlJiZhZS5wdXNoKG51bGwpLHBlLnByZXZpb3VzPXYsdiYmKHYubmV4dD1wZSksdj1wZSxwLmRlZmluZVNraXAocGUuc3RhcnQpLHAud3JpdGUoYWUpLHMucGFyc2VyLmxhenlbcGUuc3RhcnQubGluZV0pe2xldCBuZT1wLmV2ZW50cy5sZW5ndGg7Zm9yKDtuZS0tOylpZihwLmV2ZW50c1tuZV1bMV0uc3RhcnQub2Zmc2V0PGImJighcC5ldmVudHNbbmVdWzFdLmVuZHx8cC5ldmVudHNbbmVdWzFdLmVuZC5vZmZzZXQ+YikpcmV0dXJuO2NvbnN0IHNlPXMuZXZlbnRzLmxlbmd0aDtsZXQgZGU9c2UsWCxnZTtmb3IoO2RlLS07KWlmKHMuZXZlbnRzW2RlXVswXT09PSJleGl0IiYmcy5ldmVudHNbZGVdWzFdLnR5cGU9PT0iY2h1bmtGbG93Iil7aWYoWCl7Z2U9cy5ldmVudHNbZGVdWzFdLmVuZDticmVha31YPSEwfWZvcihpZShkKSxuZT1zZTtuZTxzLmV2ZW50cy5sZW5ndGg7KXMuZXZlbnRzW25lXVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxnZSksbmUrKzt0NShzLmV2ZW50cyxkZSsxLDAscy5ldmVudHMuc2xpY2Uoc2UpKSxzLmV2ZW50cy5sZW5ndGg9bmV9fWZ1bmN0aW9uIGllKHBlKXtsZXQgYmU9dS5sZW5ndGg7Zm9yKDtiZS0tID5wZTspe2NvbnN0IGFlPXVbYmVdO3MuY29udGFpbmVyU3RhdGU9YWVbMV0sYWVbMF0uZXhpdC5jYWxsKHMsaSl9dS5sZW5ndGg9cGV9ZnVuY3Rpb24gb2UoKXtwLndyaXRlKFtudWxsXSksdj12b2lkIDAscD12b2lkIDAscy5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMH19ZnVuY3Rpb24gWFF0KGkscyx1KXtyZXR1cm4gS2woaSxpLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5kb2N1bWVudCxzLHUpLCJsaW5lUHJlZml4Iix0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpfWZ1bmN0aW9uIFZWZShpKXtpZihpPT09bnVsbHx8ejIoaSl8fFVRdChpKSlyZXR1cm4gMTtpZihWUXQoaSkpcmV0dXJuIDJ9ZnVuY3Rpb24gTG1lKGkscyx1KXtjb25zdCBkPVtdO2xldCBwPS0xO2Zvcig7KytwPGkubGVuZ3RoOyl7Y29uc3Qgdj1pW3BdLnJlc29sdmVBbGw7diYmIWQuaW5jbHVkZXModikmJihzPXYocyx1KSxkLnB1c2godikpfXJldHVybiBzfWNvbnN0IE1tZT17bmFtZToiYXR0ZW50aW9uIix0b2tlbml6ZTpKUXQscmVzb2x2ZUFsbDpRUXR9O2Z1bmN0aW9uIFFRdChpLHMpe2xldCB1PS0xLGQscCx2LGIseSxULF8sQTtmb3IoOysrdTxpLmxlbmd0aDspaWYoaVt1XVswXT09PSJlbnRlciImJmlbdV1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJmlbdV1bMV0uX2Nsb3NlKXtmb3IoZD11O2QtLTspaWYoaVtkXVswXT09PSJleGl0IiYmaVtkXVsxXS50eXBlPT09ImF0dGVudGlvblNlcXVlbmNlIiYmaVtkXVsxXS5fb3BlbiYmcy5zbGljZVNlcmlhbGl6ZShpW2RdWzFdKS5jaGFyQ29kZUF0KDApPT09cy5zbGljZVNlcmlhbGl6ZShpW3VdWzFdKS5jaGFyQ29kZUF0KDApKXtpZigoaVtkXVsxXS5fY2xvc2V8fGlbdV1bMV0uX29wZW4pJiYoaVt1XVsxXS5lbmQub2Zmc2V0LWlbdV1bMV0uc3RhcnQub2Zmc2V0KSUzJiYhKChpW2RdWzFdLmVuZC5vZmZzZXQtaVtkXVsxXS5zdGFydC5vZmZzZXQraVt1XVsxXS5lbmQub2Zmc2V0LWlbdV1bMV0uc3RhcnQub2Zmc2V0KSUzKSljb250aW51ZTtUPWlbZF1bMV0uZW5kLm9mZnNldC1pW2RdWzFdLnN0YXJ0Lm9mZnNldD4xJiZpW3VdWzFdLmVuZC5vZmZzZXQtaVt1XVsxXS5zdGFydC5vZmZzZXQ+MT8yOjE7Y29uc3QgUD1PYmplY3QuYXNzaWduKHt9LGlbZF1bMV0uZW5kKSxSPU9iamVjdC5hc3NpZ24oe30saVt1XVsxXS5zdGFydCk7VVZlKFAsLVQpLFVWZShSLFQpLGI9e3R5cGU6VD4xPyJzdHJvbmdTZXF1ZW5jZSI6ImVtcGhhc2lzU2VxdWVuY2UiLHN0YXJ0OlAsZW5kOk9iamVjdC5hc3NpZ24oe30saVtkXVsxXS5lbmQpfSx5PXt0eXBlOlQ+MT8ic3Ryb25nU2VxdWVuY2UiOiJlbXBoYXNpc1NlcXVlbmNlIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbdV1bMV0uc3RhcnQpLGVuZDpSfSx2PXt0eXBlOlQ+MT8ic3Ryb25nVGV4dCI6ImVtcGhhc2lzVGV4dCIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW2RdWzFdLmVuZCksZW5kOk9iamVjdC5hc3NpZ24oe30saVt1XVsxXS5zdGFydCl9LHA9e3R5cGU6VD4xPyJzdHJvbmciOiJlbXBoYXNpcyIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxiLnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSx5LmVuZCl9LGlbZF1bMV0uZW5kPU9iamVjdC5hc3NpZ24oe30sYi5zdGFydCksaVt1XVsxXS5zdGFydD1PYmplY3QuYXNzaWduKHt9LHkuZW5kKSxfPVtdLGlbZF1bMV0uZW5kLm9mZnNldC1pW2RdWzFdLnN0YXJ0Lm9mZnNldCYmKF89enYoXyxbWyJlbnRlciIsaVtkXVsxXSxzXSxbImV4aXQiLGlbZF1bMV0sc11dKSksXz16dihfLFtbImVudGVyIixwLHNdLFsiZW50ZXIiLGIsc10sWyJleGl0IixiLHNdLFsiZW50ZXIiLHYsc11dKSxfPXp2KF8sTG1lKHMucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLGkuc2xpY2UoZCsxLHUpLHMpKSxfPXp2KF8sW1siZXhpdCIsdixzXSxbImVudGVyIix5LHNdLFsiZXhpdCIseSxzXSxbImV4aXQiLHAsc11dKSxpW3VdWzFdLmVuZC5vZmZzZXQtaVt1XVsxXS5zdGFydC5vZmZzZXQ/KEE9MixfPXp2KF8sW1siZW50ZXIiLGlbdV1bMV0sc10sWyJleGl0IixpW3VdWzFdLHNdXSkpOkE9MCx0NShpLGQtMSx1LWQrMyxfKSx1PWQrXy5sZW5ndGgtQS0yO2JyZWFrfX1mb3IodT0tMTsrK3U8aS5sZW5ndGg7KWlbdV1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJihpW3VdWzFdLnR5cGU9ImRhdGEiKTtyZXR1cm4gaX1mdW5jdGlvbiBKUXQoaSxzKXtjb25zdCB1PXRoaXMucGFyc2VyLmNvbnN0cnVjdHMuYXR0ZW50aW9uTWFya2Vycy5udWxsLGQ9dGhpcy5wcmV2aW91cyxwPVZWZShkKTtsZXQgdjtyZXR1cm4gYjtmdW5jdGlvbiBiKFQpe3JldHVybiB2PVQsaS5lbnRlcigiYXR0ZW50aW9uU2VxdWVuY2UiKSx5KFQpfWZ1bmN0aW9uIHkoVCl7aWYoVD09PXYpcmV0dXJuIGkuY29uc3VtZShUKSx5O2NvbnN0IF89aS5leGl0KCJhdHRlbnRpb25TZXF1ZW5jZSIpLEE9VlZlKFQpLFA9IUF8fEE9PT0yJiZwfHx1LmluY2x1ZGVzKFQpLFI9IXB8fHA9PT0yJiZBfHx1LmluY2x1ZGVzKGQpO3JldHVybiBfLl9vcGVuPSEhKHY9PT00Mj9QOlAmJihwfHwhUikpLF8uX2Nsb3NlPSEhKHY9PT00Mj9SOlImJihBfHwhUCkpLHMoVCl9fWZ1bmN0aW9uIFVWZShpLHMpe2kuY29sdW1uKz1zLGkub2Zmc2V0Kz1zLGkuX2J1ZmZlckluZGV4Kz1zfWNvbnN0IFpRdD17bmFtZToiYXV0b2xpbmsiLHRva2VuaXplOmVKdH07ZnVuY3Rpb24gZUp0KGkscyx1KXtsZXQgZD0wO3JldHVybiBwO2Z1bmN0aW9uIHAoRil7cmV0dXJuIGkuZW50ZXIoImF1dG9saW5rIiksaS5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKSxpLmNvbnN1bWUoRiksaS5leGl0KCJhdXRvbGlua01hcmtlciIpLGkuZW50ZXIoImF1dG9saW5rUHJvdG9jb2wiKSx2fWZ1bmN0aW9uIHYoRil7cmV0dXJuIG41KEYpPyhpLmNvbnN1bWUoRiksYik6XyhGKX1mdW5jdGlvbiBiKEYpe3JldHVybiBGPT09NDN8fEY9PT00NXx8Rj09PTQ2fHxIMyhGKT8oZD0xLHkoRikpOl8oRil9ZnVuY3Rpb24geShGKXtyZXR1cm4gRj09PTU4PyhpLmNvbnN1bWUoRiksZD0wLFQpOihGPT09NDN8fEY9PT00NXx8Rj09PTQ2fHxIMyhGKSkmJmQrKzwzMj8oaS5jb25zdW1lKEYpLHkpOihkPTAsXyhGKSl9ZnVuY3Rpb24gVChGKXtyZXR1cm4gRj09PTYyPyhpLmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKSxpLmVudGVyKCJhdXRvbGlua01hcmtlciIpLGkuY29uc3VtZShGKSxpLmV4aXQoImF1dG9saW5rTWFya2VyIiksaS5leGl0KCJhdXRvbGluayIpLHMpOkY9PT1udWxsfHxGPT09MzJ8fEY9PT02MHx8X21lKEYpP3UoRik6KGkuY29uc3VtZShGKSxUKX1mdW5jdGlvbiBfKEYpe3JldHVybiBGPT09NjQ/KGkuY29uc3VtZShGKSxBKTp6UXQoRik/KGkuY29uc3VtZShGKSxfKTp1KEYpfWZ1bmN0aW9uIEEoRil7cmV0dXJuIEgzKEYpP1AoRik6dShGKX1mdW5jdGlvbiBQKEYpe3JldHVybiBGPT09NDY/KGkuY29uc3VtZShGKSxkPTAsQSk6Rj09PTYyPyhpLmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKS50eXBlPSJhdXRvbGlua0VtYWlsIixpLmVudGVyKCJhdXRvbGlua01hcmtlciIpLGkuY29uc3VtZShGKSxpLmV4aXQoImF1dG9saW5rTWFya2VyIiksaS5leGl0KCJhdXRvbGluayIpLHMpOlIoRil9ZnVuY3Rpb24gUihGKXtpZigoRj09PTQ1fHxIMyhGKSkmJmQrKzw2Myl7Y29uc3Qgaj1GPT09NDU/UjpQO3JldHVybiBpLmNvbnN1bWUoRiksan1yZXR1cm4gdShGKX19Y29uc3QgWVE9e3Rva2VuaXplOnRKdCxwYXJ0aWFsOiEwfTtmdW5jdGlvbiB0SnQoaSxzLHUpe3JldHVybiBkO2Z1bmN0aW9uIGQodil7cmV0dXJuIEl1KHYpP0tsKGkscCwibGluZVByZWZpeCIpKHYpOnAodil9ZnVuY3Rpb24gcCh2KXtyZXR1cm4gdj09PW51bGx8fHNvKHYpP3Modik6dSh2KX19Y29uc3QgR1ZlPXtuYW1lOiJibG9ja1F1b3RlIix0b2tlbml6ZTpuSnQsY29udGludWF0aW9uOnt0b2tlbml6ZTpySnR9LGV4aXQ6aUp0fTtmdW5jdGlvbiBuSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gcDtmdW5jdGlvbiBwKGIpe2lmKGI9PT02Mil7Y29uc3QgeT1kLmNvbnRhaW5lclN0YXRlO3JldHVybiB5Lm9wZW58fChpLmVudGVyKCJibG9ja1F1b3RlIix7X2NvbnRhaW5lcjohMH0pLHkub3Blbj0hMCksaS5lbnRlcigiYmxvY2tRdW90ZVByZWZpeCIpLGkuZW50ZXIoImJsb2NrUXVvdGVNYXJrZXIiKSxpLmNvbnN1bWUoYiksaS5leGl0KCJibG9ja1F1b3RlTWFya2VyIiksdn1yZXR1cm4gdShiKX1mdW5jdGlvbiB2KGIpe3JldHVybiBJdShiKT8oaS5lbnRlcigiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiKSxpLmNvbnN1bWUoYiksaS5leGl0KCJibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZSIpLGkuZXhpdCgiYmxvY2tRdW90ZVByZWZpeCIpLHMpOihpLmV4aXQoImJsb2NrUXVvdGVQcmVmaXgiKSxzKGIpKX19ZnVuY3Rpb24gckp0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIHA7ZnVuY3Rpb24gcChiKXtyZXR1cm4gSXUoYik/S2woaSx2LCJsaW5lUHJlZml4IixkLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpKGIpOnYoYil9ZnVuY3Rpb24gdihiKXtyZXR1cm4gaS5hdHRlbXB0KEdWZSxzLHUpKGIpfX1mdW5jdGlvbiBpSnQoaSl7aS5leGl0KCJibG9ja1F1b3RlIil9Y29uc3QgS1ZlPXtuYW1lOiJjaGFyYWN0ZXJFc2NhcGUiLHRva2VuaXplOnNKdH07ZnVuY3Rpb24gc0p0KGkscyx1KXtyZXR1cm4gZDtmdW5jdGlvbiBkKHYpe3JldHVybiBpLmVudGVyKCJjaGFyYWN0ZXJFc2NhcGUiKSxpLmVudGVyKCJlc2NhcGVNYXJrZXIiKSxpLmNvbnN1bWUodiksaS5leGl0KCJlc2NhcGVNYXJrZXIiKSxwfWZ1bmN0aW9uIHAodil7cmV0dXJuIEhRdCh2KT8oaS5lbnRlcigiY2hhcmFjdGVyRXNjYXBlVmFsdWUiKSxpLmNvbnN1bWUodiksaS5leGl0KCJjaGFyYWN0ZXJFc2NhcGVWYWx1ZSIpLGkuZXhpdCgiY2hhcmFjdGVyRXNjYXBlIikscyk6dSh2KX19Y29uc3QgV1ZlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImkiKTtmdW5jdGlvbiBEbWUoaSl7Y29uc3Qgcz0iJiIraSsiOyI7V1ZlLmlubmVySFRNTD1zO2NvbnN0IHU9V1ZlLnRleHRDb250ZW50O3JldHVybiB1LmNoYXJDb2RlQXQodS5sZW5ndGgtMSk9PT01OSYmaSE9PSJzZW1pInx8dT09PXM/ITE6dX1jb25zdCBZVmU9e25hbWU6ImNoYXJhY3RlclJlZmVyZW5jZSIsdG9rZW5pemU6YUp0fTtmdW5jdGlvbiBhSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztsZXQgcD0wLHYsYjtyZXR1cm4geTtmdW5jdGlvbiB5KFApe3JldHVybiBpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2UiKSxpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSxpLmNvbnN1bWUoUCksaS5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSxUfWZ1bmN0aW9uIFQoUCl7cmV0dXJuIFA9PT0zNT8oaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIpLGkuY29uc3VtZShQKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiKSxfKTooaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSx2PTMxLGI9SDMsQShQKSl9ZnVuY3Rpb24gXyhQKXtyZXR1cm4gUD09PTg4fHxQPT09MTIwPyhpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCIpLGkuY29uc3VtZShQKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsIiksaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSx2PTYsYj1xUXQsQSk6KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIiksdj03LGI9QW1lLEEoUCkpfWZ1bmN0aW9uIEEoUCl7aWYoUD09PTU5JiZwKXtjb25zdCBSPWkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKTtyZXR1cm4gYj09PUgzJiYhRG1lKGQuc2xpY2VTZXJpYWxpemUoUikpP3UoUCk6KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLGkuY29uc3VtZShQKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLGkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlIikscyl9cmV0dXJuIGIoUCkmJnArKzx2PyhpLmNvbnN1bWUoUCksQSk6dShQKX19Y29uc3QgWFZlPXt0b2tlbml6ZTpjSnQscGFydGlhbDohMH0sUVZlPXtuYW1lOiJjb2RlRmVuY2VkIix0b2tlbml6ZTpvSnQsY29uY3JldGU6ITB9O2Z1bmN0aW9uIG9KdChpLHMsdSl7Y29uc3QgZD10aGlzLHA9e3Rva2VuaXplOmFlLHBhcnRpYWw6ITB9O2xldCB2PTAsYj0wLHk7cmV0dXJuIFQ7ZnVuY3Rpb24gVChuZSl7cmV0dXJuIF8obmUpfWZ1bmN0aW9uIF8obmUpe2NvbnN0IHNlPWQuZXZlbnRzW2QuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gdj1zZSYmc2VbMV0udHlwZT09PSJsaW5lUHJlZml4Ij9zZVsyXS5zbGljZVNlcmlhbGl6ZShzZVsxXSwhMCkubGVuZ3RoOjAseT1uZSxpLmVudGVyKCJjb2RlRmVuY2VkIiksaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlIiksaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxBKG5lKX1mdW5jdGlvbiBBKG5lKXtyZXR1cm4gbmU9PT15PyhiKyssaS5jb25zdW1lKG5lKSxBKTpiPDM/dShuZSk6KGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxJdShuZSk/S2woaSxQLCJ3aGl0ZXNwYWNlIikobmUpOlAobmUpKX1mdW5jdGlvbiBQKG5lKXtyZXR1cm4gbmU9PT1udWxsfHxzbyhuZSk/KGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlIiksZC5pbnRlcnJ1cHQ/cyhuZSk6aS5jaGVjayhYVmUsSyxiZSkobmUpKTooaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlSW5mbyIpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxSKG5lKSl9ZnVuY3Rpb24gUihuZSl7cmV0dXJuIG5lPT09bnVsbHx8c28obmUpPyhpLmV4aXQoImNodW5rU3RyaW5nIiksaS5leGl0KCJjb2RlRmVuY2VkRmVuY2VJbmZvIiksUChuZSkpOkl1KG5lKT8oaS5leGl0KCJjaHVua1N0cmluZyIpLGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlSW5mbyIpLEtsKGksRiwid2hpdGVzcGFjZSIpKG5lKSk6bmU9PT05NiYmbmU9PT15P3UobmUpOihpLmNvbnN1bWUobmUpLFIpfWZ1bmN0aW9uIEYobmUpe3JldHVybiBuZT09PW51bGx8fHNvKG5lKT9QKG5lKTooaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlTWV0YSIpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxqKG5lKSl9ZnVuY3Rpb24gaihuZSl7cmV0dXJuIG5lPT09bnVsbHx8c28obmUpPyhpLmV4aXQoImNodW5rU3RyaW5nIiksaS5leGl0KCJjb2RlRmVuY2VkRmVuY2VNZXRhIiksUChuZSkpOm5lPT09OTYmJm5lPT09eT91KG5lKTooaS5jb25zdW1lKG5lKSxqKX1mdW5jdGlvbiBLKG5lKXtyZXR1cm4gaS5hdHRlbXB0KHAsYmUsZWUpKG5lKX1mdW5jdGlvbiBlZShuZSl7cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUobmUpLGkuZXhpdCgibGluZUVuZGluZyIpLGllfWZ1bmN0aW9uIGllKG5lKXtyZXR1cm4gdj4wJiZJdShuZSk/S2woaSxvZSwibGluZVByZWZpeCIsdisxKShuZSk6b2UobmUpfWZ1bmN0aW9uIG9lKG5lKXtyZXR1cm4gbmU9PT1udWxsfHxzbyhuZSk/aS5jaGVjayhYVmUsSyxiZSkobmUpOihpLmVudGVyKCJjb2RlRmxvd1ZhbHVlIikscGUobmUpKX1mdW5jdGlvbiBwZShuZSl7cmV0dXJuIG5lPT09bnVsbHx8c28obmUpPyhpLmV4aXQoImNvZGVGbG93VmFsdWUiKSxvZShuZSkpOihpLmNvbnN1bWUobmUpLHBlKX1mdW5jdGlvbiBiZShuZSl7cmV0dXJuIGkuZXhpdCgiY29kZUZlbmNlZCIpLHMobmUpfWZ1bmN0aW9uIGFlKG5lLHNlLGRlKXtsZXQgWD0wO3JldHVybiBnZTtmdW5jdGlvbiBnZShQZSl7cmV0dXJuIG5lLmVudGVyKCJsaW5lRW5kaW5nIiksbmUuY29uc3VtZShQZSksbmUuZXhpdCgibGluZUVuZGluZyIpLFd9ZnVuY3Rpb24gVyhQZSl7cmV0dXJuIG5lLmVudGVyKCJjb2RlRmVuY2VkRmVuY2UiKSxJdShQZSk/S2wobmUseGUsImxpbmVQcmVmaXgiLGQucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCkoUGUpOnhlKFBlKX1mdW5jdGlvbiB4ZShQZSl7cmV0dXJuIFBlPT09eT8obmUuZW50ZXIoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksVShQZSkpOmRlKFBlKX1mdW5jdGlvbiBVKFBlKXtyZXR1cm4gUGU9PT15PyhYKyssbmUuY29uc3VtZShQZSksVSk6WD49Yj8obmUuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxJdShQZSk/S2wobmUsRmUsIndoaXRlc3BhY2UiKShQZSk6RmUoUGUpKTpkZShQZSl9ZnVuY3Rpb24gRmUoUGUpe3JldHVybiBQZT09PW51bGx8fHNvKFBlKT8obmUuZXhpdCgiY29kZUZlbmNlZEZlbmNlIiksc2UoUGUpKTpkZShQZSl9fX1mdW5jdGlvbiBjSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gcDtmdW5jdGlvbiBwKGIpe3JldHVybiBiPT09bnVsbD91KGIpOihpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGluZUVuZGluZyIpLHYpfWZ1bmN0aW9uIHYoYil7cmV0dXJuIGQucGFyc2VyLmxhenlbZC5ub3coKS5saW5lXT91KGIpOnMoYil9fWNvbnN0IEltZT17bmFtZToiY29kZUluZGVudGVkIix0b2tlbml6ZTpsSnR9LHVKdD17dG9rZW5pemU6aEp0LHBhcnRpYWw6ITB9O2Z1bmN0aW9uIGxKdChpLHMsdSl7Y29uc3QgZD10aGlzO3JldHVybiBwO2Z1bmN0aW9uIHAoXyl7cmV0dXJuIGkuZW50ZXIoImNvZGVJbmRlbnRlZCIpLEtsKGksdiwibGluZVByZWZpeCIsNCsxKShfKX1mdW5jdGlvbiB2KF8pe2NvbnN0IEE9ZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiBBJiZBWzFdLnR5cGU9PT0ibGluZVByZWZpeCImJkFbMl0uc2xpY2VTZXJpYWxpemUoQVsxXSwhMCkubGVuZ3RoPj00P2IoXyk6dShfKX1mdW5jdGlvbiBiKF8pe3JldHVybiBfPT09bnVsbD9UKF8pOnNvKF8pP2kuYXR0ZW1wdCh1SnQsYixUKShfKTooaS5lbnRlcigiY29kZUZsb3dWYWx1ZSIpLHkoXykpfWZ1bmN0aW9uIHkoXyl7cmV0dXJuIF89PT1udWxsfHxzbyhfKT8oaS5leGl0KCJjb2RlRmxvd1ZhbHVlIiksYihfKSk6KGkuY29uc3VtZShfKSx5KX1mdW5jdGlvbiBUKF8pe3JldHVybiBpLmV4aXQoImNvZGVJbmRlbnRlZCIpLHMoXyl9fWZ1bmN0aW9uIGhKdChpLHMsdSl7Y29uc3QgZD10aGlzO3JldHVybiBwO2Z1bmN0aW9uIHAoYil7cmV0dXJuIGQucGFyc2VyLmxhenlbZC5ub3coKS5saW5lXT91KGIpOnNvKGIpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGluZUVuZGluZyIpLHApOktsKGksdiwibGluZVByZWZpeCIsNCsxKShiKX1mdW5jdGlvbiB2KGIpe2NvbnN0IHk9ZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiB5JiZ5WzFdLnR5cGU9PT0ibGluZVByZWZpeCImJnlbMl0uc2xpY2VTZXJpYWxpemUoeVsxXSwhMCkubGVuZ3RoPj00P3MoYik6c28oYik/cChiKTp1KGIpfX1jb25zdCBmSnQ9e25hbWU6ImNvZGVUZXh0Iix0b2tlbml6ZTpwSnQscmVzb2x2ZTpkSnQscHJldmlvdXM6Z0p0fTtmdW5jdGlvbiBkSnQoaSl7bGV0IHM9aS5sZW5ndGgtNCx1PTMsZCxwO2lmKChpW3VdWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fGlbdV1bMV0udHlwZT09PSJzcGFjZSIpJiYoaVtzXVsxXS50eXBlPT09ImxpbmVFbmRpbmcifHxpW3NdWzFdLnR5cGU9PT0ic3BhY2UiKSl7Zm9yKGQ9dTsrK2Q8czspaWYoaVtkXVsxXS50eXBlPT09ImNvZGVUZXh0RGF0YSIpe2lbdV1bMV0udHlwZT0iY29kZVRleHRQYWRkaW5nIixpW3NdWzFdLnR5cGU9ImNvZGVUZXh0UGFkZGluZyIsdSs9MixzLT0yO2JyZWFrfX1mb3IoZD11LTEscysrOysrZDw9czspcD09PXZvaWQgMD9kIT09cyYmaVtkXVsxXS50eXBlIT09ImxpbmVFbmRpbmciJiYocD1kKTooZD09PXN8fGlbZF1bMV0udHlwZT09PSJsaW5lRW5kaW5nIikmJihpW3BdWzFdLnR5cGU9ImNvZGVUZXh0RGF0YSIsZCE9PXArMiYmKGlbcF1bMV0uZW5kPWlbZC0xXVsxXS5lbmQsaS5zcGxpY2UocCsyLGQtcC0yKSxzLT1kLXAtMixkPXArMikscD12b2lkIDApO3JldHVybiBpfWZ1bmN0aW9uIGdKdChpKXtyZXR1cm4gaSE9PTk2fHx0aGlzLmV2ZW50c1t0aGlzLmV2ZW50cy5sZW5ndGgtMV1bMV0udHlwZT09PSJjaGFyYWN0ZXJFc2NhcGUifWZ1bmN0aW9uIHBKdChpLHMsdSl7bGV0IGQ9MCxwLHY7cmV0dXJuIGI7ZnVuY3Rpb24gYihQKXtyZXR1cm4gaS5lbnRlcigiY29kZVRleHQiKSxpLmVudGVyKCJjb2RlVGV4dFNlcXVlbmNlIikseShQKX1mdW5jdGlvbiB5KFApe3JldHVybiBQPT09OTY/KGkuY29uc3VtZShQKSxkKysseSk6KGkuZXhpdCgiY29kZVRleHRTZXF1ZW5jZSIpLFQoUCkpfWZ1bmN0aW9uIFQoUCl7cmV0dXJuIFA9PT1udWxsP3UoUCk6UD09PTMyPyhpLmVudGVyKCJzcGFjZSIpLGkuY29uc3VtZShQKSxpLmV4aXQoInNwYWNlIiksVCk6UD09PTk2Pyh2PWkuZW50ZXIoImNvZGVUZXh0U2VxdWVuY2UiKSxwPTAsQShQKSk6c28oUCk/KGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoUCksaS5leGl0KCJsaW5lRW5kaW5nIiksVCk6KGkuZW50ZXIoImNvZGVUZXh0RGF0YSIpLF8oUCkpfWZ1bmN0aW9uIF8oUCl7cmV0dXJuIFA9PT1udWxsfHxQPT09MzJ8fFA9PT05Nnx8c28oUCk/KGkuZXhpdCgiY29kZVRleHREYXRhIiksVChQKSk6KGkuY29uc3VtZShQKSxfKX1mdW5jdGlvbiBBKFApe3JldHVybiBQPT09OTY/KGkuY29uc3VtZShQKSxwKyssQSk6cD09PWQ/KGkuZXhpdCgiY29kZVRleHRTZXF1ZW5jZSIpLGkuZXhpdCgiY29kZVRleHQiKSxzKFApKToodi50eXBlPSJjb2RlVGV4dERhdGEiLF8oUCkpfX1mdW5jdGlvbiBKVmUoaSl7Y29uc3Qgcz17fTtsZXQgdT0tMSxkLHAsdixiLHksVCxfO2Zvcig7Kyt1PGkubGVuZ3RoOyl7Zm9yKDt1IGluIHM7KXU9c1t1XTtpZihkPWlbdV0sdSYmZFsxXS50eXBlPT09ImNodW5rRmxvdyImJmlbdS0xXVsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4IiYmKFQ9ZFsxXS5fdG9rZW5pemVyLmV2ZW50cyx2PTAsdjxULmxlbmd0aCYmVFt2XVsxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayImJih2Kz0yKSx2PFQubGVuZ3RoJiZUW3ZdWzFdLnR5cGU9PT0iY29udGVudCIpKWZvcig7Kyt2PFQubGVuZ3RoJiZUW3ZdWzFdLnR5cGUhPT0iY29udGVudCI7KVRbdl1bMV0udHlwZT09PSJjaHVua1RleHQiJiYoVFt2XVsxXS5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW09ITAsdisrKTtpZihkWzBdPT09ImVudGVyIilkWzFdLmNvbnRlbnRUeXBlJiYoT2JqZWN0LmFzc2lnbihzLGJKdChpLHUpKSx1PXNbdV0sXz0hMCk7ZWxzZSBpZihkWzFdLl9jb250YWluZXIpe2Zvcih2PXUscD12b2lkIDA7di0tJiYoYj1pW3ZdLGJbMV0udHlwZT09PSJsaW5lRW5kaW5nInx8YlsxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayIpOyliWzBdPT09ImVudGVyIiYmKHAmJihpW3BdWzFdLnR5cGU9ImxpbmVFbmRpbmdCbGFuayIpLGJbMV0udHlwZT0ibGluZUVuZGluZyIscD12KTtwJiYoZFsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxpW3BdWzFdLnN0YXJ0KSx5PWkuc2xpY2UocCx1KSx5LnVuc2hpZnQoZCksdDUoaSxwLHUtcCsxLHkpKX19cmV0dXJuIV99ZnVuY3Rpb24gYkp0KGkscyl7Y29uc3QgdT1pW3NdWzFdLGQ9aVtzXVsyXTtsZXQgcD1zLTE7Y29uc3Qgdj1bXSxiPXUuX3Rva2VuaXplcnx8ZC5wYXJzZXJbdS5jb250ZW50VHlwZV0odS5zdGFydCkseT1iLmV2ZW50cyxUPVtdLF89e307bGV0IEEsUCxSPS0xLEY9dSxqPTAsSz0wO2NvbnN0IGVlPVtLXTtmb3IoO0Y7KXtmb3IoO2lbKytwXVsxXSE9PUY7KTt2LnB1c2gocCksRi5fdG9rZW5pemVyfHwoQT1kLnNsaWNlU3RyZWFtKEYpLEYubmV4dHx8QS5wdXNoKG51bGwpLFAmJmIuZGVmaW5lU2tpcChGLnN0YXJ0KSxGLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSYmKGIuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbT0hMCksYi53cml0ZShBKSxGLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSYmKGIuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbT12b2lkIDApKSxQPUYsRj1GLm5leHR9Zm9yKEY9dTsrK1I8eS5sZW5ndGg7KXlbUl1bMF09PT0iZXhpdCImJnlbUi0xXVswXT09PSJlbnRlciImJnlbUl1bMV0udHlwZT09PXlbUi0xXVsxXS50eXBlJiZ5W1JdWzFdLnN0YXJ0LmxpbmUhPT15W1JdWzFdLmVuZC5saW5lJiYoSz1SKzEsZWUucHVzaChLKSxGLl90b2tlbml6ZXI9dm9pZCAwLEYucHJldmlvdXM9dm9pZCAwLEY9Ri5uZXh0KTtmb3IoYi5ldmVudHM9W10sRj8oRi5fdG9rZW5pemVyPXZvaWQgMCxGLnByZXZpb3VzPXZvaWQgMCk6ZWUucG9wKCksUj1lZS5sZW5ndGg7Ui0tOyl7Y29uc3QgaWU9eS5zbGljZShlZVtSXSxlZVtSKzFdKSxvZT12LnBvcCgpO1QudW5zaGlmdChbb2Usb2UraWUubGVuZ3RoLTFdKSx0NShpLG9lLDIsaWUpfWZvcihSPS0xOysrUjxULmxlbmd0aDspX1tqK1RbUl1bMF1dPWorVFtSXVsxXSxqKz1UW1JdWzFdLVRbUl1bMF0tMTtyZXR1cm4gX31jb25zdCBtSnQ9e3Rva2VuaXplOnlKdCxyZXNvbHZlOndKdH0sdkp0PXt0b2tlbml6ZTp4SnQscGFydGlhbDohMH07ZnVuY3Rpb24gd0p0KGkpe3JldHVybiBKVmUoaSksaX1mdW5jdGlvbiB5SnQoaSxzKXtsZXQgdTtyZXR1cm4gZDtmdW5jdGlvbiBkKHkpe3JldHVybiBpLmVudGVyKCJjb250ZW50IiksdT1pLmVudGVyKCJjaHVua0NvbnRlbnQiLHtjb250ZW50VHlwZToiY29udGVudCJ9KSxwKHkpfWZ1bmN0aW9uIHAoeSl7cmV0dXJuIHk9PT1udWxsP3YoeSk6c28oeSk/aS5jaGVjayh2SnQsYix2KSh5KTooaS5jb25zdW1lKHkpLHApfWZ1bmN0aW9uIHYoeSl7cmV0dXJuIGkuZXhpdCgiY2h1bmtDb250ZW50IiksaS5leGl0KCJjb250ZW50Iikscyh5KX1mdW5jdGlvbiBiKHkpe3JldHVybiBpLmNvbnN1bWUoeSksaS5leGl0KCJjaHVua0NvbnRlbnQiKSx1Lm5leHQ9aS5lbnRlcigiY2h1bmtDb250ZW50Iix7Y29udGVudFR5cGU6ImNvbnRlbnQiLHByZXZpb3VzOnV9KSx1PXUubmV4dCxwfX1mdW5jdGlvbiB4SnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gcDtmdW5jdGlvbiBwKGIpe3JldHVybiBpLmV4aXQoImNodW5rQ29udGVudCIpLGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoYiksaS5leGl0KCJsaW5lRW5kaW5nIiksS2woaSx2LCJsaW5lUHJlZml4Iil9ZnVuY3Rpb24gdihiKXtpZihiPT09bnVsbHx8c28oYikpcmV0dXJuIHUoYik7Y29uc3QgeT1kLmV2ZW50c1tkLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIWQucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSYmeSYmeVsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZ5WzJdLnNsaWNlU2VyaWFsaXplKHlbMV0sITApLmxlbmd0aD49ND9zKGIpOmkuaW50ZXJydXB0KGQucGFyc2VyLmNvbnN0cnVjdHMuZmxvdyx1LHMpKGIpfX1mdW5jdGlvbiBaVmUoaSxzLHUsZCxwLHYsYix5LFQpe2NvbnN0IF89VHx8TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBBPTA7cmV0dXJuIFA7ZnVuY3Rpb24gUChpZSl7cmV0dXJuIGllPT09NjA/KGkuZW50ZXIoZCksaS5lbnRlcihwKSxpLmVudGVyKHYpLGkuY29uc3VtZShpZSksaS5leGl0KHYpLFIpOmllPT09bnVsbHx8aWU9PT0zMnx8aWU9PT00MXx8X21lKGllKT91KGllKTooaS5lbnRlcihkKSxpLmVudGVyKGIpLGkuZW50ZXIoeSksaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLEsoaWUpKX1mdW5jdGlvbiBSKGllKXtyZXR1cm4gaWU9PT02Mj8oaS5lbnRlcih2KSxpLmNvbnN1bWUoaWUpLGkuZXhpdCh2KSxpLmV4aXQocCksaS5leGl0KGQpLHMpOihpLmVudGVyKHkpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxGKGllKSl9ZnVuY3Rpb24gRihpZSl7cmV0dXJuIGllPT09NjI/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoeSksUihpZSkpOmllPT09bnVsbHx8aWU9PT02MHx8c28oaWUpP3UoaWUpOihpLmNvbnN1bWUoaWUpLGllPT09OTI/ajpGKX1mdW5jdGlvbiBqKGllKXtyZXR1cm4gaWU9PT02MHx8aWU9PT02Mnx8aWU9PT05Mj8oaS5jb25zdW1lKGllKSxGKTpGKGllKX1mdW5jdGlvbiBLKGllKXtyZXR1cm4hQSYmKGllPT09bnVsbHx8aWU9PT00MXx8ejIoaWUpKT8oaS5leGl0KCJjaHVua1N0cmluZyIpLGkuZXhpdCh5KSxpLmV4aXQoYiksaS5leGl0KGQpLHMoaWUpKTpBPF8mJmllPT09NDA/KGkuY29uc3VtZShpZSksQSsrLEspOmllPT09NDE/KGkuY29uc3VtZShpZSksQS0tLEspOmllPT09bnVsbHx8aWU9PT0zMnx8aWU9PT00MHx8X21lKGllKT91KGllKTooaS5jb25zdW1lKGllKSxpZT09PTkyP2VlOkspfWZ1bmN0aW9uIGVlKGllKXtyZXR1cm4gaWU9PT00MHx8aWU9PT00MXx8aWU9PT05Mj8oaS5jb25zdW1lKGllKSxLKTpLKGllKX19ZnVuY3Rpb24gZVVlKGkscyx1LGQscCx2KXtjb25zdCBiPXRoaXM7bGV0IHk9MCxUO3JldHVybiBfO2Z1bmN0aW9uIF8oRil7cmV0dXJuIGkuZW50ZXIoZCksaS5lbnRlcihwKSxpLmNvbnN1bWUoRiksaS5leGl0KHApLGkuZW50ZXIodiksQX1mdW5jdGlvbiBBKEYpe3JldHVybiB5Pjk5OXx8Rj09PW51bGx8fEY9PT05MXx8Rj09PTkzJiYhVHx8Rj09PTk0JiYheSYmIl9oaWRkZW5Gb290bm90ZVN1cHBvcnQiaW4gYi5wYXJzZXIuY29uc3RydWN0cz91KEYpOkY9PT05Mz8oaS5leGl0KHYpLGkuZW50ZXIocCksaS5jb25zdW1lKEYpLGkuZXhpdChwKSxpLmV4aXQoZCkscyk6c28oRik/KGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoRiksaS5leGl0KCJsaW5lRW5kaW5nIiksQSk6KGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxQKEYpKX1mdW5jdGlvbiBQKEYpe3JldHVybiBGPT09bnVsbHx8Rj09PTkxfHxGPT09OTN8fHNvKEYpfHx5Kys+OTk5PyhpLmV4aXQoImNodW5rU3RyaW5nIiksQShGKSk6KGkuY29uc3VtZShGKSxUfHwoVD0hSXUoRikpLEY9PT05Mj9SOlApfWZ1bmN0aW9uIFIoRil7cmV0dXJuIEY9PT05MXx8Rj09PTkyfHxGPT09OTM/KGkuY29uc3VtZShGKSx5KyssUCk6UChGKX19ZnVuY3Rpb24gdFVlKGkscyx1LGQscCx2KXtsZXQgYjtyZXR1cm4geTtmdW5jdGlvbiB5KFIpe3JldHVybiBSPT09MzR8fFI9PT0zOXx8Uj09PTQwPyhpLmVudGVyKGQpLGkuZW50ZXIocCksaS5jb25zdW1lKFIpLGkuZXhpdChwKSxiPVI9PT00MD80MTpSLFQpOnUoUil9ZnVuY3Rpb24gVChSKXtyZXR1cm4gUj09PWI/KGkuZW50ZXIocCksaS5jb25zdW1lKFIpLGkuZXhpdChwKSxpLmV4aXQoZCkscyk6KGkuZW50ZXIodiksXyhSKSl9ZnVuY3Rpb24gXyhSKXtyZXR1cm4gUj09PWI/KGkuZXhpdCh2KSxUKGIpKTpSPT09bnVsbD91KFIpOnNvKFIpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKFIpLGkuZXhpdCgibGluZUVuZGluZyIpLEtsKGksXywibGluZVByZWZpeCIpKTooaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLEEoUikpfWZ1bmN0aW9uIEEoUil7cmV0dXJuIFI9PT1ifHxSPT09bnVsbHx8c28oUik/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxfKFIpKTooaS5jb25zdW1lKFIpLFI9PT05Mj9QOkEpfWZ1bmN0aW9uIFAoUil7cmV0dXJuIFI9PT1ifHxSPT09OTI/KGkuY29uc3VtZShSKSxBKTpBKFIpfX1mdW5jdGlvbiBMUihpLHMpe2xldCB1O3JldHVybiBkO2Z1bmN0aW9uIGQocCl7cmV0dXJuIHNvKHApPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKHApLGkuZXhpdCgibGluZUVuZGluZyIpLHU9ITAsZCk6SXUocCk/S2woaSxkLHU/ImxpbmVQcmVmaXgiOiJsaW5lU3VmZml4IikocCk6cyhwKX19ZnVuY3Rpb24gSEQoaSl7cmV0dXJuIGkucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvXiB8ICQvZywiIikudG9Mb3dlckNhc2UoKS50b1VwcGVyQ2FzZSgpfWNvbnN0IGtKdD17bmFtZToiZGVmaW5pdGlvbiIsdG9rZW5pemU6VEp0fSxFSnQ9e3Rva2VuaXplOkNKdCxwYXJ0aWFsOiEwfTtmdW5jdGlvbiBUSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztsZXQgcDtyZXR1cm4gdjtmdW5jdGlvbiB2KEYpe3JldHVybiBpLmVudGVyKCJkZWZpbml0aW9uIiksYihGKX1mdW5jdGlvbiBiKEYpe3JldHVybiBlVWUuY2FsbChkLGkseSx1LCJkZWZpbml0aW9uTGFiZWwiLCJkZWZpbml0aW9uTGFiZWxNYXJrZXIiLCJkZWZpbml0aW9uTGFiZWxTdHJpbmciKShGKX1mdW5jdGlvbiB5KEYpe3JldHVybiBwPUhEKGQuc2xpY2VTZXJpYWxpemUoZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdWzFdKS5zbGljZSgxLC0xKSksRj09PTU4PyhpLmVudGVyKCJkZWZpbml0aW9uTWFya2VyIiksaS5jb25zdW1lKEYpLGkuZXhpdCgiZGVmaW5pdGlvbk1hcmtlciIpLFQpOnUoRil9ZnVuY3Rpb24gVChGKXtyZXR1cm4gejIoRik/TFIoaSxfKShGKTpfKEYpfWZ1bmN0aW9uIF8oRil7cmV0dXJuIFpWZShpLEEsdSwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uIiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uTGl0ZXJhbCIsImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLCJkZWZpbml0aW9uRGVzdGluYXRpb25SYXciLCJkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmciKShGKX1mdW5jdGlvbiBBKEYpe3JldHVybiBpLmF0dGVtcHQoRUp0LFAsUCkoRil9ZnVuY3Rpb24gUChGKXtyZXR1cm4gSXUoRik/S2woaSxSLCJ3aGl0ZXNwYWNlIikoRik6UihGKX1mdW5jdGlvbiBSKEYpe3JldHVybiBGPT09bnVsbHx8c28oRik/KGkuZXhpdCgiZGVmaW5pdGlvbiIpLGQucGFyc2VyLmRlZmluZWQucHVzaChwKSxzKEYpKTp1KEYpfX1mdW5jdGlvbiBDSnQoaSxzLHUpe3JldHVybiBkO2Z1bmN0aW9uIGQoeSl7cmV0dXJuIHoyKHkpP0xSKGkscCkoeSk6dSh5KX1mdW5jdGlvbiBwKHkpe3JldHVybiB0VWUoaSx2LHUsImRlZmluaXRpb25UaXRsZSIsImRlZmluaXRpb25UaXRsZU1hcmtlciIsImRlZmluaXRpb25UaXRsZVN0cmluZyIpKHkpfWZ1bmN0aW9uIHYoeSl7cmV0dXJuIEl1KHkpP0tsKGksYiwid2hpdGVzcGFjZSIpKHkpOmIoeSl9ZnVuY3Rpb24gYih5KXtyZXR1cm4geT09PW51bGx8fHNvKHkpP3MoeSk6dSh5KX19Y29uc3QgU0p0PXtuYW1lOiJoYXJkQnJlYWtFc2NhcGUiLHRva2VuaXplOl9KdH07ZnVuY3Rpb24gX0p0KGkscyx1KXtyZXR1cm4gZDtmdW5jdGlvbiBkKHYpe3JldHVybiBpLmVudGVyKCJoYXJkQnJlYWtFc2NhcGUiKSxpLmNvbnN1bWUodikscH1mdW5jdGlvbiBwKHYpe3JldHVybiBzbyh2KT8oaS5leGl0KCJoYXJkQnJlYWtFc2NhcGUiKSxzKHYpKTp1KHYpfX1jb25zdCBBSnQ9e25hbWU6ImhlYWRpbmdBdHgiLHRva2VuaXplOk1KdCxyZXNvbHZlOkxKdH07ZnVuY3Rpb24gTEp0KGkscyl7bGV0IHU9aS5sZW5ndGgtMixkPTMscCx2O3JldHVybiBpW2RdWzFdLnR5cGU9PT0id2hpdGVzcGFjZSImJihkKz0yKSx1LTI+ZCYmaVt1XVsxXS50eXBlPT09IndoaXRlc3BhY2UiJiYodS09MiksaVt1XVsxXS50eXBlPT09ImF0eEhlYWRpbmdTZXF1ZW5jZSImJihkPT09dS0xfHx1LTQ+ZCYmaVt1LTJdWzFdLnR5cGU9PT0id2hpdGVzcGFjZSIpJiYodS09ZCsxPT09dT8yOjQpLHU+ZCYmKHA9e3R5cGU6ImF0eEhlYWRpbmdUZXh0IixzdGFydDppW2RdWzFdLnN0YXJ0LGVuZDppW3VdWzFdLmVuZH0sdj17dHlwZToiY2h1bmtUZXh0IixzdGFydDppW2RdWzFdLnN0YXJ0LGVuZDppW3VdWzFdLmVuZCxjb250ZW50VHlwZToidGV4dCJ9LHQ1KGksZCx1LWQrMSxbWyJlbnRlciIscCxzXSxbImVudGVyIix2LHNdLFsiZXhpdCIsdixzXSxbImV4aXQiLHAsc11dKSksaX1mdW5jdGlvbiBNSnQoaSxzLHUpe2xldCBkPTA7cmV0dXJuIHA7ZnVuY3Rpb24gcChBKXtyZXR1cm4gaS5lbnRlcigiYXR4SGVhZGluZyIpLHYoQSl9ZnVuY3Rpb24gdihBKXtyZXR1cm4gaS5lbnRlcigiYXR4SGVhZGluZ1NlcXVlbmNlIiksYihBKX1mdW5jdGlvbiBiKEEpe3JldHVybiBBPT09MzUmJmQrKzw2PyhpLmNvbnN1bWUoQSksYik6QT09PW51bGx8fHoyKEEpPyhpLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLHkoQSkpOnUoQSl9ZnVuY3Rpb24geShBKXtyZXR1cm4gQT09PTM1PyhpLmVudGVyKCJhdHhIZWFkaW5nU2VxdWVuY2UiKSxUKEEpKTpBPT09bnVsbHx8c28oQSk/KGkuZXhpdCgiYXR4SGVhZGluZyIpLHMoQSkpOkl1KEEpP0tsKGkseSwid2hpdGVzcGFjZSIpKEEpOihpLmVudGVyKCJhdHhIZWFkaW5nVGV4dCIpLF8oQSkpfWZ1bmN0aW9uIFQoQSl7cmV0dXJuIEE9PT0zNT8oaS5jb25zdW1lKEEpLFQpOihpLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLHkoQSkpfWZ1bmN0aW9uIF8oQSl7cmV0dXJuIEE9PT1udWxsfHxBPT09MzV8fHoyKEEpPyhpLmV4aXQoImF0eEhlYWRpbmdUZXh0IikseShBKSk6KGkuY29uc3VtZShBKSxfKX19Y29uc3QgREp0PVsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJhc2UiLCJiYXNlZm9udCIsImJsb2NrcXVvdGUiLCJib2R5IiwiY2FwdGlvbiIsImNlbnRlciIsImNvbCIsImNvbGdyb3VwIiwiZGQiLCJkZXRhaWxzIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImZvcm0iLCJmcmFtZSIsImZyYW1lc2V0IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhyIiwiaHRtbCIsImlmcmFtZSIsImxlZ2VuZCIsImxpIiwibGluayIsIm1haW4iLCJtZW51IiwibWVudWl0ZW0iLCJuYXYiLCJub2ZyYW1lcyIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJwIiwicGFyYW0iLCJzZWFyY2giLCJzZWN0aW9uIiwic3VtbWFyeSIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpdGxlIiwidHIiLCJ0cmFjayIsInVsIl0sblVlPVsicHJlIiwic2NyaXB0Iiwic3R5bGUiLCJ0ZXh0YXJlYSJdLElKdD17bmFtZToiaHRtbEZsb3ciLHRva2VuaXplOkJKdCxyZXNvbHZlVG86UEp0LGNvbmNyZXRlOiEwfSxPSnQ9e3Rva2VuaXplOlJKdCxwYXJ0aWFsOiEwfSxOSnQ9e3Rva2VuaXplOkZKdCxwYXJ0aWFsOiEwfTtmdW5jdGlvbiBQSnQoaSl7bGV0IHM9aS5sZW5ndGg7Zm9yKDtzLS0mJiEoaVtzXVswXT09PSJlbnRlciImJmlbc11bMV0udHlwZT09PSJodG1sRmxvdyIpOyk7cmV0dXJuIHM+MSYmaVtzLTJdWzFdLnR5cGU9PT0ibGluZVByZWZpeCImJihpW3NdWzFdLnN0YXJ0PWlbcy0yXVsxXS5zdGFydCxpW3MrMV1bMV0uc3RhcnQ9aVtzLTJdWzFdLnN0YXJ0LGkuc3BsaWNlKHMtMiwyKSksaX1mdW5jdGlvbiBCSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztsZXQgcCx2LGIseSxUO3JldHVybiBfO2Z1bmN0aW9uIF8oTmUpe3JldHVybiBBKE5lKX1mdW5jdGlvbiBBKE5lKXtyZXR1cm4gaS5lbnRlcigiaHRtbEZsb3ciKSxpLmVudGVyKCJodG1sRmxvd0RhdGEiKSxpLmNvbnN1bWUoTmUpLFB9ZnVuY3Rpb24gUChOZSl7cmV0dXJuIE5lPT09MzM/KGkuY29uc3VtZShOZSksUik6TmU9PT00Nz8oaS5jb25zdW1lKE5lKSx2PSEwLEspOk5lPT09NjM/KGkuY29uc3VtZShOZSkscD0zLGQuaW50ZXJydXB0P3M6a2UpOm41KE5lKT8oaS5jb25zdW1lKE5lKSxiPVN0cmluZy5mcm9tQ2hhckNvZGUoTmUpLGVlKTp1KE5lKX1mdW5jdGlvbiBSKE5lKXtyZXR1cm4gTmU9PT00NT8oaS5jb25zdW1lKE5lKSxwPTIsRik6TmU9PT05MT8oaS5jb25zdW1lKE5lKSxwPTUseT0wLGopOm41KE5lKT8oaS5jb25zdW1lKE5lKSxwPTQsZC5pbnRlcnJ1cHQ/czprZSk6dShOZSl9ZnVuY3Rpb24gRihOZSl7cmV0dXJuIE5lPT09NDU/KGkuY29uc3VtZShOZSksZC5pbnRlcnJ1cHQ/czprZSk6dShOZSl9ZnVuY3Rpb24gaihOZSl7Y29uc3QgZ249IkNEQVRBWyI7cmV0dXJuIE5lPT09Z24uY2hhckNvZGVBdCh5KyspPyhpLmNvbnN1bWUoTmUpLHk9PT1nbi5sZW5ndGg/ZC5pbnRlcnJ1cHQ/czp4ZTpqKTp1KE5lKX1mdW5jdGlvbiBLKE5lKXtyZXR1cm4gbjUoTmUpPyhpLmNvbnN1bWUoTmUpLGI9U3RyaW5nLmZyb21DaGFyQ29kZShOZSksZWUpOnUoTmUpfWZ1bmN0aW9uIGVlKE5lKXtpZihOZT09PW51bGx8fE5lPT09NDd8fE5lPT09NjJ8fHoyKE5lKSl7Y29uc3QgZ249TmU9PT00NyxfdD1iLnRvTG93ZXJDYXNlKCk7cmV0dXJuIWduJiYhdiYmblVlLmluY2x1ZGVzKF90KT8ocD0xLGQuaW50ZXJydXB0P3MoTmUpOnhlKE5lKSk6REp0LmluY2x1ZGVzKGIudG9Mb3dlckNhc2UoKSk/KHA9Nixnbj8oaS5jb25zdW1lKE5lKSxpZSk6ZC5pbnRlcnJ1cHQ/cyhOZSk6eGUoTmUpKToocD03LGQuaW50ZXJydXB0JiYhZC5wYXJzZXIubGF6eVtkLm5vdygpLmxpbmVdP3UoTmUpOnY/b2UoTmUpOnBlKE5lKSl9cmV0dXJuIE5lPT09NDV8fEgzKE5lKT8oaS5jb25zdW1lKE5lKSxiKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE5lKSxlZSk6dShOZSl9ZnVuY3Rpb24gaWUoTmUpe3JldHVybiBOZT09PTYyPyhpLmNvbnN1bWUoTmUpLGQuaW50ZXJydXB0P3M6eGUpOnUoTmUpfWZ1bmN0aW9uIG9lKE5lKXtyZXR1cm4gSXUoTmUpPyhpLmNvbnN1bWUoTmUpLG9lKTpnZShOZSl9ZnVuY3Rpb24gcGUoTmUpe3JldHVybiBOZT09PTQ3PyhpLmNvbnN1bWUoTmUpLGdlKTpOZT09PTU4fHxOZT09PTk1fHxuNShOZSk/KGkuY29uc3VtZShOZSksYmUpOkl1KE5lKT8oaS5jb25zdW1lKE5lKSxwZSk6Z2UoTmUpfWZ1bmN0aW9uIGJlKE5lKXtyZXR1cm4gTmU9PT00NXx8TmU9PT00Nnx8TmU9PT01OHx8TmU9PT05NXx8SDMoTmUpPyhpLmNvbnN1bWUoTmUpLGJlKTphZShOZSl9ZnVuY3Rpb24gYWUoTmUpe3JldHVybiBOZT09PTYxPyhpLmNvbnN1bWUoTmUpLG5lKTpJdShOZSk/KGkuY29uc3VtZShOZSksYWUpOnBlKE5lKX1mdW5jdGlvbiBuZShOZSl7cmV0dXJuIE5lPT09bnVsbHx8TmU9PT02MHx8TmU9PT02MXx8TmU9PT02Mnx8TmU9PT05Nj91KE5lKTpOZT09PTM0fHxOZT09PTM5PyhpLmNvbnN1bWUoTmUpLFQ9TmUsc2UpOkl1KE5lKT8oaS5jb25zdW1lKE5lKSxuZSk6ZGUoTmUpfWZ1bmN0aW9uIHNlKE5lKXtyZXR1cm4gTmU9PT1UPyhpLmNvbnN1bWUoTmUpLFQ9bnVsbCxYKTpOZT09PW51bGx8fHNvKE5lKT91KE5lKTooaS5jb25zdW1lKE5lKSxzZSl9ZnVuY3Rpb24gZGUoTmUpe3JldHVybiBOZT09PW51bGx8fE5lPT09MzR8fE5lPT09Mzl8fE5lPT09NDd8fE5lPT09NjB8fE5lPT09NjF8fE5lPT09NjJ8fE5lPT09OTZ8fHoyKE5lKT9hZShOZSk6KGkuY29uc3VtZShOZSksZGUpfWZ1bmN0aW9uIFgoTmUpe3JldHVybiBOZT09PTQ3fHxOZT09PTYyfHxJdShOZSk/cGUoTmUpOnUoTmUpfWZ1bmN0aW9uIGdlKE5lKXtyZXR1cm4gTmU9PT02Mj8oaS5jb25zdW1lKE5lKSxXKTp1KE5lKX1mdW5jdGlvbiBXKE5lKXtyZXR1cm4gTmU9PT1udWxsfHxzbyhOZSk/eGUoTmUpOkl1KE5lKT8oaS5jb25zdW1lKE5lKSxXKTp1KE5lKX1mdW5jdGlvbiB4ZShOZSl7cmV0dXJuIE5lPT09NDUmJnA9PT0yPyhpLmNvbnN1bWUoTmUpLGplKTpOZT09PTYwJiZwPT09MT8oaS5jb25zdW1lKE5lKSxJZSk6TmU9PT02MiYmcD09PTQ/KGkuY29uc3VtZShOZSksS2UpOk5lPT09NjMmJnA9PT0zPyhpLmNvbnN1bWUoTmUpLGtlKTpOZT09PTkzJiZwPT09NT8oaS5jb25zdW1lKE5lKSxDZSk6c28oTmUpJiYocD09PTZ8fHA9PT03KT8oaS5leGl0KCJodG1sRmxvd0RhdGEiKSxpLmNoZWNrKE9KdCxGdCxVKShOZSkpOk5lPT09bnVsbHx8c28oTmUpPyhpLmV4aXQoImh0bWxGbG93RGF0YSIpLFUoTmUpKTooaS5jb25zdW1lKE5lKSx4ZSl9ZnVuY3Rpb24gVShOZSl7cmV0dXJuIGkuY2hlY2soTkp0LEZlLEZ0KShOZSl9ZnVuY3Rpb24gRmUoTmUpe3JldHVybiBpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKE5lKSxpLmV4aXQoImxpbmVFbmRpbmciKSxQZX1mdW5jdGlvbiBQZShOZSl7cmV0dXJuIE5lPT09bnVsbHx8c28oTmUpP1UoTmUpOihpLmVudGVyKCJodG1sRmxvd0RhdGEiKSx4ZShOZSkpfWZ1bmN0aW9uIGplKE5lKXtyZXR1cm4gTmU9PT00NT8oaS5jb25zdW1lKE5lKSxrZSk6eGUoTmUpfWZ1bmN0aW9uIEllKE5lKXtyZXR1cm4gTmU9PT00Nz8oaS5jb25zdW1lKE5lKSxiPSIiLFNlKTp4ZShOZSl9ZnVuY3Rpb24gU2UoTmUpe2lmKE5lPT09NjIpe2NvbnN0IGduPWIudG9Mb3dlckNhc2UoKTtyZXR1cm4gblVlLmluY2x1ZGVzKGduKT8oaS5jb25zdW1lKE5lKSxLZSk6eGUoTmUpfXJldHVybiBuNShOZSkmJmIubGVuZ3RoPDg/KGkuY29uc3VtZShOZSksYis9U3RyaW5nLmZyb21DaGFyQ29kZShOZSksU2UpOnhlKE5lKX1mdW5jdGlvbiBDZShOZSl7cmV0dXJuIE5lPT09OTM/KGkuY29uc3VtZShOZSksa2UpOnhlKE5lKX1mdW5jdGlvbiBrZShOZSl7cmV0dXJuIE5lPT09NjI/KGkuY29uc3VtZShOZSksS2UpOk5lPT09NDUmJnA9PT0yPyhpLmNvbnN1bWUoTmUpLGtlKTp4ZShOZSl9ZnVuY3Rpb24gS2UoTmUpe3JldHVybiBOZT09PW51bGx8fHNvKE5lKT8oaS5leGl0KCJodG1sRmxvd0RhdGEiKSxGdChOZSkpOihpLmNvbnN1bWUoTmUpLEtlKX1mdW5jdGlvbiBGdChOZSl7cmV0dXJuIGkuZXhpdCgiaHRtbEZsb3ciKSxzKE5lKX19ZnVuY3Rpb24gRkp0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIHA7ZnVuY3Rpb24gcChiKXtyZXR1cm4gc28oYik/KGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoYiksaS5leGl0KCJsaW5lRW5kaW5nIiksdik6dShiKX1mdW5jdGlvbiB2KGIpe3JldHVybiBkLnBhcnNlci5sYXp5W2Qubm93KCkubGluZV0/dShiKTpzKGIpfX1mdW5jdGlvbiBSSnQoaSxzLHUpe3JldHVybiBkO2Z1bmN0aW9uIGQocCl7cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUocCksaS5leGl0KCJsaW5lRW5kaW5nIiksaS5hdHRlbXB0KFlRLHMsdSl9fWNvbnN0IGpKdD17bmFtZToiaHRtbFRleHQiLHRva2VuaXplOiRKdH07ZnVuY3Rpb24gJEp0KGkscyx1KXtjb25zdCBkPXRoaXM7bGV0IHAsdixiO3JldHVybiB5O2Z1bmN0aW9uIHkoa2Upe3JldHVybiBpLmVudGVyKCJodG1sVGV4dCIpLGkuZW50ZXIoImh0bWxUZXh0RGF0YSIpLGkuY29uc3VtZShrZSksVH1mdW5jdGlvbiBUKGtlKXtyZXR1cm4ga2U9PT0zMz8oaS5jb25zdW1lKGtlKSxfKTprZT09PTQ3PyhpLmNvbnN1bWUoa2UpLGFlKTprZT09PTYzPyhpLmNvbnN1bWUoa2UpLHBlKTpuNShrZSk/KGkuY29uc3VtZShrZSksZGUpOnUoa2UpfWZ1bmN0aW9uIF8oa2Upe3JldHVybiBrZT09PTQ1PyhpLmNvbnN1bWUoa2UpLEEpOmtlPT09OTE/KGkuY29uc3VtZShrZSksdj0wLGopOm41KGtlKT8oaS5jb25zdW1lKGtlKSxvZSk6dShrZSl9ZnVuY3Rpb24gQShrZSl7cmV0dXJuIGtlPT09NDU/KGkuY29uc3VtZShrZSksRik6dShrZSl9ZnVuY3Rpb24gUChrZSl7cmV0dXJuIGtlPT09bnVsbD91KGtlKTprZT09PTQ1PyhpLmNvbnN1bWUoa2UpLFIpOnNvKGtlKT8oYj1QLEllKGtlKSk6KGkuY29uc3VtZShrZSksUCl9ZnVuY3Rpb24gUihrZSl7cmV0dXJuIGtlPT09NDU/KGkuY29uc3VtZShrZSksRik6UChrZSl9ZnVuY3Rpb24gRihrZSl7cmV0dXJuIGtlPT09NjI/amUoa2UpOmtlPT09NDU/UihrZSk6UChrZSl9ZnVuY3Rpb24gaihrZSl7Y29uc3QgS2U9IkNEQVRBWyI7cmV0dXJuIGtlPT09S2UuY2hhckNvZGVBdCh2KyspPyhpLmNvbnN1bWUoa2UpLHY9PT1LZS5sZW5ndGg/SzpqKTp1KGtlKX1mdW5jdGlvbiBLKGtlKXtyZXR1cm4ga2U9PT1udWxsP3Uoa2UpOmtlPT09OTM/KGkuY29uc3VtZShrZSksZWUpOnNvKGtlKT8oYj1LLEllKGtlKSk6KGkuY29uc3VtZShrZSksSyl9ZnVuY3Rpb24gZWUoa2Upe3JldHVybiBrZT09PTkzPyhpLmNvbnN1bWUoa2UpLGllKTpLKGtlKX1mdW5jdGlvbiBpZShrZSl7cmV0dXJuIGtlPT09NjI/amUoa2UpOmtlPT09OTM/KGkuY29uc3VtZShrZSksaWUpOksoa2UpfWZ1bmN0aW9uIG9lKGtlKXtyZXR1cm4ga2U9PT1udWxsfHxrZT09PTYyP2plKGtlKTpzbyhrZSk/KGI9b2UsSWUoa2UpKTooaS5jb25zdW1lKGtlKSxvZSl9ZnVuY3Rpb24gcGUoa2Upe3JldHVybiBrZT09PW51bGw/dShrZSk6a2U9PT02Mz8oaS5jb25zdW1lKGtlKSxiZSk6c28oa2UpPyhiPXBlLEllKGtlKSk6KGkuY29uc3VtZShrZSkscGUpfWZ1bmN0aW9uIGJlKGtlKXtyZXR1cm4ga2U9PT02Mj9qZShrZSk6cGUoa2UpfWZ1bmN0aW9uIGFlKGtlKXtyZXR1cm4gbjUoa2UpPyhpLmNvbnN1bWUoa2UpLG5lKTp1KGtlKX1mdW5jdGlvbiBuZShrZSl7cmV0dXJuIGtlPT09NDV8fEgzKGtlKT8oaS5jb25zdW1lKGtlKSxuZSk6c2Uoa2UpfWZ1bmN0aW9uIHNlKGtlKXtyZXR1cm4gc28oa2UpPyhiPXNlLEllKGtlKSk6SXUoa2UpPyhpLmNvbnN1bWUoa2UpLHNlKTpqZShrZSl9ZnVuY3Rpb24gZGUoa2Upe3JldHVybiBrZT09PTQ1fHxIMyhrZSk/KGkuY29uc3VtZShrZSksZGUpOmtlPT09NDd8fGtlPT09NjJ8fHoyKGtlKT9YKGtlKTp1KGtlKX1mdW5jdGlvbiBYKGtlKXtyZXR1cm4ga2U9PT00Nz8oaS5jb25zdW1lKGtlKSxqZSk6a2U9PT01OHx8a2U9PT05NXx8bjUoa2UpPyhpLmNvbnN1bWUoa2UpLGdlKTpzbyhrZSk/KGI9WCxJZShrZSkpOkl1KGtlKT8oaS5jb25zdW1lKGtlKSxYKTpqZShrZSl9ZnVuY3Rpb24gZ2Uoa2Upe3JldHVybiBrZT09PTQ1fHxrZT09PTQ2fHxrZT09PTU4fHxrZT09PTk1fHxIMyhrZSk/KGkuY29uc3VtZShrZSksZ2UpOlcoa2UpfWZ1bmN0aW9uIFcoa2Upe3JldHVybiBrZT09PTYxPyhpLmNvbnN1bWUoa2UpLHhlKTpzbyhrZSk/KGI9VyxJZShrZSkpOkl1KGtlKT8oaS5jb25zdW1lKGtlKSxXKTpYKGtlKX1mdW5jdGlvbiB4ZShrZSl7cmV0dXJuIGtlPT09bnVsbHx8a2U9PT02MHx8a2U9PT02MXx8a2U9PT02Mnx8a2U9PT05Nj91KGtlKTprZT09PTM0fHxrZT09PTM5PyhpLmNvbnN1bWUoa2UpLHA9a2UsVSk6c28oa2UpPyhiPXhlLEllKGtlKSk6SXUoa2UpPyhpLmNvbnN1bWUoa2UpLHhlKTooaS5jb25zdW1lKGtlKSxGZSl9ZnVuY3Rpb24gVShrZSl7cmV0dXJuIGtlPT09cD8oaS5jb25zdW1lKGtlKSxwPXZvaWQgMCxQZSk6a2U9PT1udWxsP3Uoa2UpOnNvKGtlKT8oYj1VLEllKGtlKSk6KGkuY29uc3VtZShrZSksVSl9ZnVuY3Rpb24gRmUoa2Upe3JldHVybiBrZT09PW51bGx8fGtlPT09MzR8fGtlPT09Mzl8fGtlPT09NjB8fGtlPT09NjF8fGtlPT09OTY/dShrZSk6a2U9PT00N3x8a2U9PT02Mnx8ejIoa2UpP1goa2UpOihpLmNvbnN1bWUoa2UpLEZlKX1mdW5jdGlvbiBQZShrZSl7cmV0dXJuIGtlPT09NDd8fGtlPT09NjJ8fHoyKGtlKT9YKGtlKTp1KGtlKX1mdW5jdGlvbiBqZShrZSl7cmV0dXJuIGtlPT09NjI/KGkuY29uc3VtZShrZSksaS5leGl0KCJodG1sVGV4dERhdGEiKSxpLmV4aXQoImh0bWxUZXh0Iikscyk6dShrZSl9ZnVuY3Rpb24gSWUoa2Upe3JldHVybiBpLmV4aXQoImh0bWxUZXh0RGF0YSIpLGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoa2UpLGkuZXhpdCgibGluZUVuZGluZyIpLFNlfWZ1bmN0aW9uIFNlKGtlKXtyZXR1cm4gSXUoa2UpP0tsKGksQ2UsImxpbmVQcmVmaXgiLGQucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCkoa2UpOkNlKGtlKX1mdW5jdGlvbiBDZShrZSl7cmV0dXJuIGkuZW50ZXIoImh0bWxUZXh0RGF0YSIpLGIoa2UpfX1jb25zdCBPbWU9e25hbWU6ImxhYmVsRW5kIix0b2tlbml6ZTpHSnQscmVzb2x2ZVRvOlVKdCxyZXNvbHZlQWxsOlZKdH0sekp0PXt0b2tlbml6ZTpLSnR9LHFKdD17dG9rZW5pemU6V0p0fSxISnQ9e3Rva2VuaXplOllKdH07ZnVuY3Rpb24gVkp0KGkpe2xldCBzPS0xO2Zvcig7KytzPGkubGVuZ3RoOyl7Y29uc3QgdT1pW3NdWzFdOyh1LnR5cGU9PT0ibGFiZWxJbWFnZSJ8fHUudHlwZT09PSJsYWJlbExpbmsifHx1LnR5cGU9PT0ibGFiZWxFbmQiKSYmKGkuc3BsaWNlKHMrMSx1LnR5cGU9PT0ibGFiZWxJbWFnZSI/NDoyKSx1LnR5cGU9ImRhdGEiLHMrKyl9cmV0dXJuIGl9ZnVuY3Rpb24gVUp0KGkscyl7bGV0IHU9aS5sZW5ndGgsZD0wLHAsdixiLHk7Zm9yKDt1LS07KWlmKHA9aVt1XVsxXSx2KXtpZihwLnR5cGU9PT0ibGluayJ8fHAudHlwZT09PSJsYWJlbExpbmsiJiZwLl9pbmFjdGl2ZSlicmVhaztpW3VdWzBdPT09ImVudGVyIiYmcC50eXBlPT09ImxhYmVsTGluayImJihwLl9pbmFjdGl2ZT0hMCl9ZWxzZSBpZihiKXtpZihpW3VdWzBdPT09ImVudGVyIiYmKHAudHlwZT09PSJsYWJlbEltYWdlInx8cC50eXBlPT09ImxhYmVsTGluayIpJiYhcC5fYmFsYW5jZWQmJih2PXUscC50eXBlIT09ImxhYmVsTGluayIpKXtkPTI7YnJlYWt9fWVsc2UgcC50eXBlPT09ImxhYmVsRW5kIiYmKGI9dSk7Y29uc3QgVD17dHlwZTppW3ZdWzFdLnR5cGU9PT0ibGFiZWxMaW5rIj8ibGluayI6ImltYWdlIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbdl1bMV0uc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbaS5sZW5ndGgtMV1bMV0uZW5kKX0sXz17dHlwZToibGFiZWwiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVt2XVsxXS5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30saVtiXVsxXS5lbmQpfSxBPXt0eXBlOiJsYWJlbFRleHQiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVt2K2QrMl1bMV0uZW5kKSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxpW2ItMl1bMV0uc3RhcnQpfTtyZXR1cm4geT1bWyJlbnRlciIsVCxzXSxbImVudGVyIixfLHNdXSx5PXp2KHksaS5zbGljZSh2KzEsditkKzMpKSx5PXp2KHksW1siZW50ZXIiLEEsc11dKSx5PXp2KHksTG1lKHMucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLGkuc2xpY2UoditkKzQsYi0zKSxzKSkseT16dih5LFtbImV4aXQiLEEsc10saVtiLTJdLGlbYi0xXSxbImV4aXQiLF8sc11dKSx5PXp2KHksaS5zbGljZShiKzEpKSx5PXp2KHksW1siZXhpdCIsVCxzXV0pLHQ1KGksdixpLmxlbmd0aCx5KSxpfWZ1bmN0aW9uIEdKdChpLHMsdSl7Y29uc3QgZD10aGlzO2xldCBwPWQuZXZlbnRzLmxlbmd0aCx2LGI7Zm9yKDtwLS07KWlmKChkLmV2ZW50c1twXVsxXS50eXBlPT09ImxhYmVsSW1hZ2UifHxkLmV2ZW50c1twXVsxXS50eXBlPT09ImxhYmVsTGluayIpJiYhZC5ldmVudHNbcF1bMV0uX2JhbGFuY2VkKXt2PWQuZXZlbnRzW3BdWzFdO2JyZWFrfXJldHVybiB5O2Z1bmN0aW9uIHkoUil7cmV0dXJuIHY/di5faW5hY3RpdmU/UChSKTooYj1kLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKEhEKGQuc2xpY2VTZXJpYWxpemUoe3N0YXJ0OnYuZW5kLGVuZDpkLm5vdygpfSkpKSxpLmVudGVyKCJsYWJlbEVuZCIpLGkuZW50ZXIoImxhYmVsTWFya2VyIiksaS5jb25zdW1lKFIpLGkuZXhpdCgibGFiZWxNYXJrZXIiKSxpLmV4aXQoImxhYmVsRW5kIiksVCk6dShSKX1mdW5jdGlvbiBUKFIpe3JldHVybiBSPT09NDA/aS5hdHRlbXB0KHpKdCxBLGI/QTpQKShSKTpSPT09OTE/aS5hdHRlbXB0KHFKdCxBLGI/XzpQKShSKTpiP0EoUik6UChSKX1mdW5jdGlvbiBfKFIpe3JldHVybiBpLmF0dGVtcHQoSEp0LEEsUCkoUil9ZnVuY3Rpb24gQShSKXtyZXR1cm4gcyhSKX1mdW5jdGlvbiBQKFIpe3JldHVybiB2Ll9iYWxhbmNlZD0hMCx1KFIpfX1mdW5jdGlvbiBLSnQoaSxzLHUpe3JldHVybiBkO2Z1bmN0aW9uIGQoUCl7cmV0dXJuIGkuZW50ZXIoInJlc291cmNlIiksaS5lbnRlcigicmVzb3VyY2VNYXJrZXIiKSxpLmNvbnN1bWUoUCksaS5leGl0KCJyZXNvdXJjZU1hcmtlciIpLHB9ZnVuY3Rpb24gcChQKXtyZXR1cm4gejIoUCk/TFIoaSx2KShQKTp2KFApfWZ1bmN0aW9uIHYoUCl7cmV0dXJuIFA9PT00MT9BKFApOlpWZShpLGIseSwicmVzb3VyY2VEZXN0aW5hdGlvbiIsInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsIiwicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLCJyZXNvdXJjZURlc3RpbmF0aW9uUmF3IiwicmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZyIsMzIpKFApfWZ1bmN0aW9uIGIoUCl7cmV0dXJuIHoyKFApP0xSKGksVCkoUCk6QShQKX1mdW5jdGlvbiB5KFApe3JldHVybiB1KFApfWZ1bmN0aW9uIFQoUCl7cmV0dXJuIFA9PT0zNHx8UD09PTM5fHxQPT09NDA/dFVlKGksXyx1LCJyZXNvdXJjZVRpdGxlIiwicmVzb3VyY2VUaXRsZU1hcmtlciIsInJlc291cmNlVGl0bGVTdHJpbmciKShQKTpBKFApfWZ1bmN0aW9uIF8oUCl7cmV0dXJuIHoyKFApP0xSKGksQSkoUCk6QShQKX1mdW5jdGlvbiBBKFApe3JldHVybiBQPT09NDE/KGkuZW50ZXIoInJlc291cmNlTWFya2VyIiksaS5jb25zdW1lKFApLGkuZXhpdCgicmVzb3VyY2VNYXJrZXIiKSxpLmV4aXQoInJlc291cmNlIikscyk6dShQKX19ZnVuY3Rpb24gV0p0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIHA7ZnVuY3Rpb24gcCh5KXtyZXR1cm4gZVVlLmNhbGwoZCxpLHYsYiwicmVmZXJlbmNlIiwicmVmZXJlbmNlTWFya2VyIiwicmVmZXJlbmNlU3RyaW5nIikoeSl9ZnVuY3Rpb24gdih5KXtyZXR1cm4gZC5wYXJzZXIuZGVmaW5lZC5pbmNsdWRlcyhIRChkLnNsaWNlU2VyaWFsaXplKGQuZXZlbnRzW2QuZXZlbnRzLmxlbmd0aC0xXVsxXSkuc2xpY2UoMSwtMSkpKT9zKHkpOnUoeSl9ZnVuY3Rpb24gYih5KXtyZXR1cm4gdSh5KX19ZnVuY3Rpb24gWUp0KGkscyx1KXtyZXR1cm4gZDtmdW5jdGlvbiBkKHYpe3JldHVybiBpLmVudGVyKCJyZWZlcmVuY2UiKSxpLmVudGVyKCJyZWZlcmVuY2VNYXJrZXIiKSxpLmNvbnN1bWUodiksaS5leGl0KCJyZWZlcmVuY2VNYXJrZXIiKSxwfWZ1bmN0aW9uIHAodil7cmV0dXJuIHY9PT05Mz8oaS5lbnRlcigicmVmZXJlbmNlTWFya2VyIiksaS5jb25zdW1lKHYpLGkuZXhpdCgicmVmZXJlbmNlTWFya2VyIiksaS5leGl0KCJyZWZlcmVuY2UiKSxzKTp1KHYpfX1jb25zdCBYSnQ9e25hbWU6ImxhYmVsU3RhcnRJbWFnZSIsdG9rZW5pemU6UUp0LHJlc29sdmVBbGw6T21lLnJlc29sdmVBbGx9O2Z1bmN0aW9uIFFKdChpLHMsdSl7Y29uc3QgZD10aGlzO3JldHVybiBwO2Z1bmN0aW9uIHAoeSl7cmV0dXJuIGkuZW50ZXIoImxhYmVsSW1hZ2UiKSxpLmVudGVyKCJsYWJlbEltYWdlTWFya2VyIiksaS5jb25zdW1lKHkpLGkuZXhpdCgibGFiZWxJbWFnZU1hcmtlciIpLHZ9ZnVuY3Rpb24gdih5KXtyZXR1cm4geT09PTkxPyhpLmVudGVyKCJsYWJlbE1hcmtlciIpLGkuY29uc3VtZSh5KSxpLmV4aXQoImxhYmVsTWFya2VyIiksaS5leGl0KCJsYWJlbEltYWdlIiksYik6dSh5KX1mdW5jdGlvbiBiKHkpe3JldHVybiB5PT09OTQmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIGQucGFyc2VyLmNvbnN0cnVjdHM/dSh5KTpzKHkpfX1jb25zdCBKSnQ9e25hbWU6ImxhYmVsU3RhcnRMaW5rIix0b2tlbml6ZTpaSnQscmVzb2x2ZUFsbDpPbWUucmVzb2x2ZUFsbH07ZnVuY3Rpb24gWkp0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIHA7ZnVuY3Rpb24gcChiKXtyZXR1cm4gaS5lbnRlcigibGFiZWxMaW5rIiksaS5lbnRlcigibGFiZWxNYXJrZXIiKSxpLmNvbnN1bWUoYiksaS5leGl0KCJsYWJlbE1hcmtlciIpLGkuZXhpdCgibGFiZWxMaW5rIiksdn1mdW5jdGlvbiB2KGIpe3JldHVybiBiPT09OTQmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIGQucGFyc2VyLmNvbnN0cnVjdHM/dShiKTpzKGIpfX1jb25zdCBObWU9e25hbWU6ImxpbmVFbmRpbmciLHRva2VuaXplOmVadH07ZnVuY3Rpb24gZVp0KGkscyl7cmV0dXJuIHU7ZnVuY3Rpb24gdShkKXtyZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShkKSxpLmV4aXQoImxpbmVFbmRpbmciKSxLbChpLHMsImxpbmVQcmVmaXgiKX19Y29uc3QgWFE9e25hbWU6InRoZW1hdGljQnJlYWsiLHRva2VuaXplOnRadH07ZnVuY3Rpb24gdFp0KGkscyx1KXtsZXQgZD0wLHA7cmV0dXJuIHY7ZnVuY3Rpb24gdihfKXtyZXR1cm4gaS5lbnRlcigidGhlbWF0aWNCcmVhayIpLGIoXyl9ZnVuY3Rpb24gYihfKXtyZXR1cm4gcD1fLHkoXyl9ZnVuY3Rpb24geShfKXtyZXR1cm4gXz09PXA/KGkuZW50ZXIoInRoZW1hdGljQnJlYWtTZXF1ZW5jZSIpLFQoXykpOmQ+PTMmJihfPT09bnVsbHx8c28oXykpPyhpLmV4aXQoInRoZW1hdGljQnJlYWsiKSxzKF8pKTp1KF8pfWZ1bmN0aW9uIFQoXyl7cmV0dXJuIF89PT1wPyhpLmNvbnN1bWUoXyksZCsrLFQpOihpLmV4aXQoInRoZW1hdGljQnJlYWtTZXF1ZW5jZSIpLEl1KF8pP0tsKGkseSwid2hpdGVzcGFjZSIpKF8pOnkoXykpfX1jb25zdCBxMj17bmFtZToibGlzdCIsdG9rZW5pemU6aVp0LGNvbnRpbnVhdGlvbjp7dG9rZW5pemU6c1p0fSxleGl0Om9adH0sblp0PXt0b2tlbml6ZTpjWnQscGFydGlhbDohMH0sclp0PXt0b2tlbml6ZTphWnQscGFydGlhbDohMH07ZnVuY3Rpb24gaVp0KGkscyx1KXtjb25zdCBkPXRoaXMscD1kLmV2ZW50c1tkLmV2ZW50cy5sZW5ndGgtMV07bGV0IHY9cCYmcFsxXS50eXBlPT09ImxpbmVQcmVmaXgiP3BbMl0uc2xpY2VTZXJpYWxpemUocFsxXSwhMCkubGVuZ3RoOjAsYj0wO3JldHVybiB5O2Z1bmN0aW9uIHkoRil7Y29uc3Qgaj1kLmNvbnRhaW5lclN0YXRlLnR5cGV8fChGPT09NDJ8fEY9PT00M3x8Rj09PTQ1PyJsaXN0VW5vcmRlcmVkIjoibGlzdE9yZGVyZWQiKTtpZihqPT09Imxpc3RVbm9yZGVyZWQiPyFkLmNvbnRhaW5lclN0YXRlLm1hcmtlcnx8Rj09PWQuY29udGFpbmVyU3RhdGUubWFya2VyOkFtZShGKSl7aWYoZC5jb250YWluZXJTdGF0ZS50eXBlfHwoZC5jb250YWluZXJTdGF0ZS50eXBlPWosaS5lbnRlcihqLHtfY29udGFpbmVyOiEwfSkpLGo9PT0ibGlzdFVub3JkZXJlZCIpcmV0dXJuIGkuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksRj09PTQyfHxGPT09NDU/aS5jaGVjayhYUSx1LF8pKEYpOl8oRik7aWYoIWQuaW50ZXJydXB0fHxGPT09NDkpcmV0dXJuIGkuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksaS5lbnRlcigibGlzdEl0ZW1WYWx1ZSIpLFQoRil9cmV0dXJuIHUoRil9ZnVuY3Rpb24gVChGKXtyZXR1cm4gQW1lKEYpJiYrK2I8MTA/KGkuY29uc3VtZShGKSxUKTooIWQuaW50ZXJydXB0fHxiPDIpJiYoZC5jb250YWluZXJTdGF0ZS5tYXJrZXI/Rj09PWQuY29udGFpbmVyU3RhdGUubWFya2VyOkY9PT00MXx8Rj09PTQ2KT8oaS5leGl0KCJsaXN0SXRlbVZhbHVlIiksXyhGKSk6dShGKX1mdW5jdGlvbiBfKEYpe3JldHVybiBpLmVudGVyKCJsaXN0SXRlbU1hcmtlciIpLGkuY29uc3VtZShGKSxpLmV4aXQoImxpc3RJdGVtTWFya2VyIiksZC5jb250YWluZXJTdGF0ZS5tYXJrZXI9ZC5jb250YWluZXJTdGF0ZS5tYXJrZXJ8fEYsaS5jaGVjayhZUSxkLmludGVycnVwdD91OkEsaS5hdHRlbXB0KG5adCxSLFApKX1mdW5jdGlvbiBBKEYpe3JldHVybiBkLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmU9ITAsdisrLFIoRil9ZnVuY3Rpb24gUChGKXtyZXR1cm4gSXUoRik/KGkuZW50ZXIoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpLGkuY29uc3VtZShGKSxpLmV4aXQoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpLFIpOnUoRil9ZnVuY3Rpb24gUihGKXtyZXR1cm4gZC5jb250YWluZXJTdGF0ZS5zaXplPXYrZC5zbGljZVNlcmlhbGl6ZShpLmV4aXQoImxpc3RJdGVtUHJlZml4IiksITApLmxlbmd0aCxzKEYpfX1mdW5jdGlvbiBzWnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gZC5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMCxpLmNoZWNrKFlRLHAsdik7ZnVuY3Rpb24gcCh5KXtyZXR1cm4gZC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz1kLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzfHxkLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmUsS2woaSxzLCJsaXN0SXRlbUluZGVudCIsZC5jb250YWluZXJTdGF0ZS5zaXplKzEpKHkpfWZ1bmN0aW9uIHYoeSl7cmV0dXJuIGQuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXN8fCFJdSh5KT8oZC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAsZC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCxiKHkpKTooZC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAsZC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCxpLmF0dGVtcHQoclp0LHMsYikoeSkpfWZ1bmN0aW9uIGIoeSl7cmV0dXJuIGQuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz0hMCxkLmludGVycnVwdD12b2lkIDAsS2woaSxpLmF0dGVtcHQocTIscyx1KSwibGluZVByZWZpeCIsZC5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KSh5KX19ZnVuY3Rpb24gYVp0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIEtsKGkscCwibGlzdEl0ZW1JbmRlbnQiLGQuY29udGFpbmVyU3RhdGUuc2l6ZSsxKTtmdW5jdGlvbiBwKHYpe2NvbnN0IGI9ZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiBiJiZiWzFdLnR5cGU9PT0ibGlzdEl0ZW1JbmRlbnQiJiZiWzJdLnNsaWNlU2VyaWFsaXplKGJbMV0sITApLmxlbmd0aD09PWQuY29udGFpbmVyU3RhdGUuc2l6ZT9zKHYpOnUodil9fWZ1bmN0aW9uIG9adChpKXtpLmV4aXQodGhpcy5jb250YWluZXJTdGF0ZS50eXBlKX1mdW5jdGlvbiBjWnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gS2woaSxwLCJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiLGQucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCsxKTtmdW5jdGlvbiBwKHYpe2NvbnN0IGI9ZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiFJdSh2KSYmYiYmYlsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSI/cyh2KTp1KHYpfX1jb25zdCByVWU9e25hbWU6InNldGV4dFVuZGVybGluZSIsdG9rZW5pemU6bFp0LHJlc29sdmVUbzp1WnR9O2Z1bmN0aW9uIHVadChpLHMpe2xldCB1PWkubGVuZ3RoLGQscCx2O2Zvcig7dS0tOylpZihpW3VdWzBdPT09ImVudGVyIil7aWYoaVt1XVsxXS50eXBlPT09ImNvbnRlbnQiKXtkPXU7YnJlYWt9aVt1XVsxXS50eXBlPT09InBhcmFncmFwaCImJihwPXUpfWVsc2UgaVt1XVsxXS50eXBlPT09ImNvbnRlbnQiJiZpLnNwbGljZSh1LDEpLCF2JiZpW3VdWzFdLnR5cGU9PT0iZGVmaW5pdGlvbiImJih2PXUpO2NvbnN0IGI9e3R5cGU6InNldGV4dEhlYWRpbmciLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVtwXVsxXS5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30saVtpLmxlbmd0aC0xXVsxXS5lbmQpfTtyZXR1cm4gaVtwXVsxXS50eXBlPSJzZXRleHRIZWFkaW5nVGV4dCIsdj8oaS5zcGxpY2UocCwwLFsiZW50ZXIiLGIsc10pLGkuc3BsaWNlKHYrMSwwLFsiZXhpdCIsaVtkXVsxXSxzXSksaVtkXVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxpW3ZdWzFdLmVuZCkpOmlbZF1bMV09YixpLnB1c2goWyJleGl0IixiLHNdKSxpfWZ1bmN0aW9uIGxadChpLHMsdSl7Y29uc3QgZD10aGlzO2xldCBwO3JldHVybiB2O2Z1bmN0aW9uIHYoXyl7bGV0IEE9ZC5ldmVudHMubGVuZ3RoLFA7Zm9yKDtBLS07KWlmKGQuZXZlbnRzW0FdWzFdLnR5cGUhPT0ibGluZUVuZGluZyImJmQuZXZlbnRzW0FdWzFdLnR5cGUhPT0ibGluZVByZWZpeCImJmQuZXZlbnRzW0FdWzFdLnR5cGUhPT0iY29udGVudCIpe1A9ZC5ldmVudHNbQV1bMV0udHlwZT09PSJwYXJhZ3JhcGgiO2JyZWFrfXJldHVybiFkLnBhcnNlci5sYXp5W2Qubm93KCkubGluZV0mJihkLmludGVycnVwdHx8UCk/KGkuZW50ZXIoInNldGV4dEhlYWRpbmdMaW5lIikscD1fLGIoXykpOnUoXyl9ZnVuY3Rpb24gYihfKXtyZXR1cm4gaS5lbnRlcigic2V0ZXh0SGVhZGluZ0xpbmVTZXF1ZW5jZSIpLHkoXyl9ZnVuY3Rpb24geShfKXtyZXR1cm4gXz09PXA/KGkuY29uc3VtZShfKSx5KTooaS5leGl0KCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIiksSXUoXyk/S2woaSxULCJsaW5lU3VmZml4IikoXyk6VChfKSl9ZnVuY3Rpb24gVChfKXtyZXR1cm4gXz09PW51bGx8fHNvKF8pPyhpLmV4aXQoInNldGV4dEhlYWRpbmdMaW5lIikscyhfKSk6dShfKX19Y29uc3QgaFp0PXt0b2tlbml6ZTpmWnR9O2Z1bmN0aW9uIGZadChpKXtjb25zdCBzPXRoaXMsdT1pLmF0dGVtcHQoWVEsZCxpLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5mbG93SW5pdGlhbCxwLEtsKGksaS5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvdyxwLGkuYXR0ZW1wdChtSnQscCkpLCJsaW5lUHJlZml4IikpKTtyZXR1cm4gdTtmdW5jdGlvbiBkKHYpe2lmKHY9PT1udWxsKXtpLmNvbnN1bWUodik7cmV0dXJufXJldHVybiBpLmVudGVyKCJsaW5lRW5kaW5nQmxhbmsiKSxpLmNvbnN1bWUodiksaS5leGl0KCJsaW5lRW5kaW5nQmxhbmsiKSxzLmN1cnJlbnRDb25zdHJ1Y3Q9dm9pZCAwLHV9ZnVuY3Rpb24gcCh2KXtpZih2PT09bnVsbCl7aS5jb25zdW1lKHYpO3JldHVybn1yZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZSh2KSxpLmV4aXQoImxpbmVFbmRpbmciKSxzLmN1cnJlbnRDb25zdHJ1Y3Q9dm9pZCAwLHV9fWNvbnN0IGRadD17cmVzb2x2ZUFsbDpzVWUoKX0sZ1p0PWlVZSgic3RyaW5nIikscFp0PWlVZSgidGV4dCIpO2Z1bmN0aW9uIGlVZShpKXtyZXR1cm57dG9rZW5pemU6cyxyZXNvbHZlQWxsOnNVZShpPT09InRleHQiP2JadDp2b2lkIDApfTtmdW5jdGlvbiBzKHUpe2NvbnN0IGQ9dGhpcyxwPXRoaXMucGFyc2VyLmNvbnN0cnVjdHNbaV0sdj11LmF0dGVtcHQocCxiLHkpO3JldHVybiBiO2Z1bmN0aW9uIGIoQSl7cmV0dXJuIF8oQSk/dihBKTp5KEEpfWZ1bmN0aW9uIHkoQSl7aWYoQT09PW51bGwpe3UuY29uc3VtZShBKTtyZXR1cm59cmV0dXJuIHUuZW50ZXIoImRhdGEiKSx1LmNvbnN1bWUoQSksVH1mdW5jdGlvbiBUKEEpe3JldHVybiBfKEEpPyh1LmV4aXQoImRhdGEiKSx2KEEpKToodS5jb25zdW1lKEEpLFQpfWZ1bmN0aW9uIF8oQSl7aWYoQT09PW51bGwpcmV0dXJuITA7Y29uc3QgUD1wW0FdO2xldCBSPS0xO2lmKFApZm9yKDsrK1I8UC5sZW5ndGg7KXtjb25zdCBGPVBbUl07aWYoIUYucHJldmlvdXN8fEYucHJldmlvdXMuY2FsbChkLGQucHJldmlvdXMpKXJldHVybiEwfXJldHVybiExfX19ZnVuY3Rpb24gc1VlKGkpe3JldHVybiBzO2Z1bmN0aW9uIHModSxkKXtsZXQgcD0tMSx2O2Zvcig7KytwPD11Lmxlbmd0aDspdj09PXZvaWQgMD91W3BdJiZ1W3BdWzFdLnR5cGU9PT0iZGF0YSImJih2PXAscCsrKTooIXVbcF18fHVbcF1bMV0udHlwZSE9PSJkYXRhIikmJihwIT09disyJiYodVt2XVsxXS5lbmQ9dVtwLTFdWzFdLmVuZCx1LnNwbGljZSh2KzIscC12LTIpLHA9disyKSx2PXZvaWQgMCk7cmV0dXJuIGk/aSh1LGQpOnV9fWZ1bmN0aW9uIGJadChpLHMpe2xldCB1PTA7Zm9yKDsrK3U8PWkubGVuZ3RoOylpZigodT09PWkubGVuZ3RofHxpW3VdWzFdLnR5cGU9PT0ibGluZUVuZGluZyIpJiZpW3UtMV1bMV0udHlwZT09PSJkYXRhIil7Y29uc3QgZD1pW3UtMV1bMV0scD1zLnNsaWNlU3RyZWFtKGQpO2xldCB2PXAubGVuZ3RoLGI9LTEseT0wLFQ7Zm9yKDt2LS07KXtjb25zdCBfPXBbdl07aWYodHlwZW9mIF89PSJzdHJpbmciKXtmb3IoYj1fLmxlbmd0aDtfLmNoYXJDb2RlQXQoYi0xKT09PTMyOyl5KyssYi0tO2lmKGIpYnJlYWs7Yj0tMX1lbHNlIGlmKF89PT0tMilUPSEwLHkrKztlbHNlIGlmKF8hPT0tMSl7disrO2JyZWFrfX1pZih5KXtjb25zdCBfPXt0eXBlOnU9PT1pLmxlbmd0aHx8VHx8eTwyPyJsaW5lU3VmZml4IjoiaGFyZEJyZWFrVHJhaWxpbmciLHN0YXJ0OntsaW5lOmQuZW5kLmxpbmUsY29sdW1uOmQuZW5kLmNvbHVtbi15LG9mZnNldDpkLmVuZC5vZmZzZXQteSxfaW5kZXg6ZC5zdGFydC5faW5kZXgrdixfYnVmZmVySW5kZXg6dj9iOmQuc3RhcnQuX2J1ZmZlckluZGV4K2J9LGVuZDpPYmplY3QuYXNzaWduKHt9LGQuZW5kKX07ZC5lbmQ9T2JqZWN0LmFzc2lnbih7fSxfLnN0YXJ0KSxkLnN0YXJ0Lm9mZnNldD09PWQuZW5kLm9mZnNldD9PYmplY3QuYXNzaWduKGQsXyk6KGkuc3BsaWNlKHUsMCxbImVudGVyIixfLHNdLFsiZXhpdCIsXyxzXSksdSs9Mil9dSsrfXJldHVybiBpfWZ1bmN0aW9uIG1adChpLHMsdSl7bGV0IGQ9T2JqZWN0LmFzc2lnbih1P09iamVjdC5hc3NpZ24oe30sdSk6e2xpbmU6MSxjb2x1bW46MSxvZmZzZXQ6MH0se19pbmRleDowLF9idWZmZXJJbmRleDotMX0pO2NvbnN0IHA9e30sdj1bXTtsZXQgYj1bXSx5PVtdO2NvbnN0IFQ9e2NvbnN1bWU6b2UsZW50ZXI6cGUsZXhpdDpiZSxhdHRlbXB0OnNlKGFlKSxjaGVjazpzZShuZSksaW50ZXJydXB0OnNlKG5lLHtpbnRlcnJ1cHQ6ITB9KX0sXz17cHJldmlvdXM6bnVsbCxjb2RlOm51bGwsY29udGFpbmVyU3RhdGU6e30sZXZlbnRzOltdLHBhcnNlcjppLHNsaWNlU3RyZWFtOkYsc2xpY2VTZXJpYWxpemU6Uixub3c6aixkZWZpbmVTa2lwOkssd3JpdGU6UH07bGV0IEE9cy50b2tlbml6ZS5jYWxsKF8sVCk7cmV0dXJuIHMucmVzb2x2ZUFsbCYmdi5wdXNoKHMpLF87ZnVuY3Rpb24gUChXKXtyZXR1cm4gYj16dihiLFcpLGVlKCksYltiLmxlbmd0aC0xXSE9PW51bGw/W106KGRlKHMsMCksXy5ldmVudHM9TG1lKHYsXy5ldmVudHMsXyksXy5ldmVudHMpfWZ1bmN0aW9uIFIoVyx4ZSl7cmV0dXJuIHdadChGKFcpLHhlKX1mdW5jdGlvbiBGKFcpe3JldHVybiB2WnQoYixXKX1mdW5jdGlvbiBqKCl7Y29uc3R7bGluZTpXLGNvbHVtbjp4ZSxvZmZzZXQ6VSxfaW5kZXg6RmUsX2J1ZmZlckluZGV4OlBlfT1kO3JldHVybntsaW5lOlcsY29sdW1uOnhlLG9mZnNldDpVLF9pbmRleDpGZSxfYnVmZmVySW5kZXg6UGV9fWZ1bmN0aW9uIEsoVyl7cFtXLmxpbmVdPVcuY29sdW1uLGdlKCl9ZnVuY3Rpb24gZWUoKXtsZXQgVztmb3IoO2QuX2luZGV4PGIubGVuZ3RoOyl7Y29uc3QgeGU9YltkLl9pbmRleF07aWYodHlwZW9mIHhlPT0ic3RyaW5nIilmb3IoVz1kLl9pbmRleCxkLl9idWZmZXJJbmRleDwwJiYoZC5fYnVmZmVySW5kZXg9MCk7ZC5faW5kZXg9PT1XJiZkLl9idWZmZXJJbmRleDx4ZS5sZW5ndGg7KWllKHhlLmNoYXJDb2RlQXQoZC5fYnVmZmVySW5kZXgpKTtlbHNlIGllKHhlKX19ZnVuY3Rpb24gaWUoVyl7QT1BKFcpfWZ1bmN0aW9uIG9lKFcpe3NvKFcpPyhkLmxpbmUrKyxkLmNvbHVtbj0xLGQub2Zmc2V0Kz1XPT09LTM/MjoxLGdlKCkpOlchPT0tMSYmKGQuY29sdW1uKyssZC5vZmZzZXQrKyksZC5fYnVmZmVySW5kZXg8MD9kLl9pbmRleCsrOihkLl9idWZmZXJJbmRleCsrLGQuX2J1ZmZlckluZGV4PT09YltkLl9pbmRleF0ubGVuZ3RoJiYoZC5fYnVmZmVySW5kZXg9LTEsZC5faW5kZXgrKykpLF8ucHJldmlvdXM9V31mdW5jdGlvbiBwZShXLHhlKXtjb25zdCBVPXhlfHx7fTtyZXR1cm4gVS50eXBlPVcsVS5zdGFydD1qKCksXy5ldmVudHMucHVzaChbImVudGVyIixVLF9dKSx5LnB1c2goVSksVX1mdW5jdGlvbiBiZShXKXtjb25zdCB4ZT15LnBvcCgpO3JldHVybiB4ZS5lbmQ9aigpLF8uZXZlbnRzLnB1c2goWyJleGl0Iix4ZSxfXSkseGV9ZnVuY3Rpb24gYWUoVyx4ZSl7ZGUoVyx4ZS5mcm9tKX1mdW5jdGlvbiBuZShXLHhlKXt4ZS5yZXN0b3JlKCl9ZnVuY3Rpb24gc2UoVyx4ZSl7cmV0dXJuIFU7ZnVuY3Rpb24gVShGZSxQZSxqZSl7bGV0IEllLFNlLENlLGtlO3JldHVybiBBcnJheS5pc0FycmF5KEZlKT9GdChGZSk6InRva2VuaXplImluIEZlP0Z0KFtGZV0pOktlKEZlKTtmdW5jdGlvbiBLZShFdCl7cmV0dXJuIEd0O2Z1bmN0aW9uIEd0KGxuKXtjb25zdCB4dD1sbiE9PW51bGwmJkV0W2xuXSxQdD1sbiE9PW51bGwmJkV0Lm51bGwsUWU9Wy4uLkFycmF5LmlzQXJyYXkoeHQpP3h0Onh0P1t4dF06W10sLi4uQXJyYXkuaXNBcnJheShQdCk/UHQ6UHQ/W1B0XTpbXV07cmV0dXJuIEZ0KFFlKShsbil9fWZ1bmN0aW9uIEZ0KEV0KXtyZXR1cm4gSWU9RXQsU2U9MCxFdC5sZW5ndGg9PT0wP2plOk5lKEV0W1NlXSl9ZnVuY3Rpb24gTmUoRXQpe3JldHVybiBHdDtmdW5jdGlvbiBHdChsbil7cmV0dXJuIGtlPVgoKSxDZT1FdCxFdC5wYXJ0aWFsfHwoXy5jdXJyZW50Q29uc3RydWN0PUV0KSxFdC5uYW1lJiZfLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcyhFdC5uYW1lKT9fdCgpOkV0LnRva2VuaXplLmNhbGwoeGU/T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKF8pLHhlKTpfLFQsZ24sX3QpKGxuKX19ZnVuY3Rpb24gZ24oRXQpe3JldHVybiBXKENlLGtlKSxQZX1mdW5jdGlvbiBfdChFdCl7cmV0dXJuIGtlLnJlc3RvcmUoKSwrK1NlPEllLmxlbmd0aD9OZShJZVtTZV0pOmplfX19ZnVuY3Rpb24gZGUoVyx4ZSl7Vy5yZXNvbHZlQWxsJiYhdi5pbmNsdWRlcyhXKSYmdi5wdXNoKFcpLFcucmVzb2x2ZSYmdDUoXy5ldmVudHMseGUsXy5ldmVudHMubGVuZ3RoLXhlLFcucmVzb2x2ZShfLmV2ZW50cy5zbGljZSh4ZSksXykpLFcucmVzb2x2ZVRvJiYoXy5ldmVudHM9Vy5yZXNvbHZlVG8oXy5ldmVudHMsXykpfWZ1bmN0aW9uIFgoKXtjb25zdCBXPWooKSx4ZT1fLnByZXZpb3VzLFU9Xy5jdXJyZW50Q29uc3RydWN0LEZlPV8uZXZlbnRzLmxlbmd0aCxQZT1BcnJheS5mcm9tKHkpO3JldHVybntyZXN0b3JlOmplLGZyb206RmV9O2Z1bmN0aW9uIGplKCl7ZD1XLF8ucHJldmlvdXM9eGUsXy5jdXJyZW50Q29uc3RydWN0PVUsXy5ldmVudHMubGVuZ3RoPUZlLHk9UGUsZ2UoKX19ZnVuY3Rpb24gZ2UoKXtkLmxpbmUgaW4gcCYmZC5jb2x1bW48MiYmKGQuY29sdW1uPXBbZC5saW5lXSxkLm9mZnNldCs9cFtkLmxpbmVdLTEpfX1mdW5jdGlvbiB2WnQoaSxzKXtjb25zdCB1PXMuc3RhcnQuX2luZGV4LGQ9cy5zdGFydC5fYnVmZmVySW5kZXgscD1zLmVuZC5faW5kZXgsdj1zLmVuZC5fYnVmZmVySW5kZXg7bGV0IGI7aWYodT09PXApYj1baVt1XS5zbGljZShkLHYpXTtlbHNle2lmKGI9aS5zbGljZSh1LHApLGQ+LTEpe2NvbnN0IHk9YlswXTt0eXBlb2YgeT09InN0cmluZyI/YlswXT15LnNsaWNlKGQpOmIuc2hpZnQoKX12PjAmJmIucHVzaChpW3BdLnNsaWNlKDAsdikpfXJldHVybiBifWZ1bmN0aW9uIHdadChpLHMpe2xldCB1PS0xO2NvbnN0IGQ9W107bGV0IHA7Zm9yKDsrK3U8aS5sZW5ndGg7KXtjb25zdCB2PWlbdV07bGV0IGI7aWYodHlwZW9mIHY9PSJzdHJpbmciKWI9djtlbHNlIHN3aXRjaCh2KXtjYXNlLTU6e2I9IlxyIjticmVha31jYXNlLTQ6e2I9YApgO2JyZWFrfWNhc2UtMzp7Yj1gXHIKYDticmVha31jYXNlLTI6e2I9cz8iICI6IgkiO2JyZWFrfWNhc2UtMTp7aWYoIXMmJnApY29udGludWU7Yj0iICI7YnJlYWt9ZGVmYXVsdDpiPVN0cmluZy5mcm9tQ2hhckNvZGUodil9cD12PT09LTIsZC5wdXNoKGIpfXJldHVybiBkLmpvaW4oIiIpfWNvbnN0IHladD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYXR0ZW50aW9uTWFya2Vyczp7bnVsbDpbNDIsOTVdfSxjb250ZW50SW5pdGlhbDp7OTE6a0p0fSxkaXNhYmxlOntudWxsOltdfSxkb2N1bWVudDp7NDI6cTIsNDM6cTIsNDU6cTIsNDg6cTIsNDk6cTIsNTA6cTIsNTE6cTIsNTI6cTIsNTM6cTIsNTQ6cTIsNTU6cTIsNTY6cTIsNTc6cTIsNjI6R1ZlfSxmbG93OnszNTpBSnQsNDI6WFEsNDU6W3JVZSxYUV0sNjA6SUp0LDYxOnJVZSw5NTpYUSw5NjpRVmUsMTI2OlFWZX0sZmxvd0luaXRpYWw6e1stMl06SW1lLFstMV06SW1lLDMyOkltZX0saW5zaWRlU3Bhbjp7bnVsbDpbTW1lLGRadF19LHN0cmluZzp7Mzg6WVZlLDkyOktWZX0sdGV4dDp7Wy01XTpObWUsWy00XTpObWUsWy0zXTpObWUsMzM6WEp0LDM4OllWZSw0MjpNbWUsNjA6W1pRdCxqSnRdLDkxOkpKdCw5MjpbU0p0LEtWZV0sOTM6T21lLDk1Ok1tZSw5NjpmSnR9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO2Z1bmN0aW9uIHhadChpKXtjb25zdCB1PUZRdChbeVp0LC4uLihpfHx7fSkuZXh0ZW5zaW9uc3x8W11dKSxkPXtkZWZpbmVkOltdLGxhenk6e30sY29uc3RydWN0czp1LGNvbnRlbnQ6cChHUXQpLGRvY3VtZW50OnAoV1F0KSxmbG93OnAoaFp0KSxzdHJpbmc6cChnWnQpLHRleHQ6cChwWnQpfTtyZXR1cm4gZDtmdW5jdGlvbiBwKHYpe3JldHVybiBiO2Z1bmN0aW9uIGIoeSl7cmV0dXJuIG1adChkLHYseSl9fX1jb25zdCBhVWU9L1tcMFx0XG5ccl0vZztmdW5jdGlvbiBrWnQoKXtsZXQgaT0xLHM9IiIsdT0hMCxkO3JldHVybiBwO2Z1bmN0aW9uIHAodixiLHkpe2NvbnN0IFQ9W107bGV0IF8sQSxQLFIsRjtmb3Iodj1zK3YudG9TdHJpbmcoYiksUD0wLHM9IiIsdSYmKHYuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiZQKyssdT12b2lkIDApO1A8di5sZW5ndGg7KXtpZihhVWUubGFzdEluZGV4PVAsXz1hVWUuZXhlYyh2KSxSPV8mJl8uaW5kZXghPT12b2lkIDA/Xy5pbmRleDp2Lmxlbmd0aCxGPXYuY2hhckNvZGVBdChSKSwhXyl7cz12LnNsaWNlKFApO2JyZWFrfWlmKEY9PT0xMCYmUD09PVImJmQpVC5wdXNoKC0zKSxkPXZvaWQgMDtlbHNlIHN3aXRjaChkJiYoVC5wdXNoKC01KSxkPXZvaWQgMCksUDxSJiYoVC5wdXNoKHYuc2xpY2UoUCxSKSksaSs9Ui1QKSxGKXtjYXNlIDA6e1QucHVzaCg2NTUzMyksaSsrO2JyZWFrfWNhc2UgOTp7Zm9yKEE9TWF0aC5jZWlsKGkvNCkqNCxULnB1c2goLTIpO2krKzxBOylULnB1c2goLTEpO2JyZWFrfWNhc2UgMTA6e1QucHVzaCgtNCksaT0xO2JyZWFrfWRlZmF1bHQ6ZD0hMCxpPTF9UD1SKzF9cmV0dXJuIHkmJihkJiZULnB1c2goLTUpLHMmJlQucHVzaChzKSxULnB1c2gobnVsbCkpLFR9fWZ1bmN0aW9uIEVadChpKXtmb3IoOyFKVmUoaSk7KTtyZXR1cm4gaX1mdW5jdGlvbiBvVWUoaSxzKXtjb25zdCB1PU51bWJlci5wYXJzZUludChpLHMpO3JldHVybiB1PDl8fHU9PT0xMXx8dT4xMyYmdTwzMnx8dT4xMjYmJnU8MTYwfHx1PjU1Mjk1JiZ1PDU3MzQ0fHx1PjY0OTc1JiZ1PDY1MDA4fHwodSY2NTUzNSk9PT02NTUzNXx8KHUmNjU1MzUpPT09NjU1MzR8fHU+MTExNDExMT8i77+9IjpTdHJpbmcuZnJvbUNoYXJDb2RlKHUpfWNvbnN0IFRadD0vXFwoWyEtLzotQFstYHstfl0pfCYoIyg/OlxkezEsN318eFtcZGEtZl17MSw2fSl8W1xkYS16XXsxLDMxfSk7L2dpO2Z1bmN0aW9uIENadChpKXtyZXR1cm4gaS5yZXBsYWNlKFRadCxTWnQpfWZ1bmN0aW9uIFNadChpLHMsdSl7aWYocylyZXR1cm4gcztpZih1LmNoYXJDb2RlQXQoMCk9PT0zNSl7Y29uc3QgcD11LmNoYXJDb2RlQXQoMSksdj1wPT09MTIwfHxwPT09ODg7cmV0dXJuIG9VZSh1LnNsaWNlKHY/MjoxKSx2PzE2OjEwKX1yZXR1cm4gRG1lKHUpfHxpfWZ1bmN0aW9uIFFRKGkpe3JldHVybiFpfHx0eXBlb2YgaSE9Im9iamVjdCI/IiI6InBvc2l0aW9uImluIGl8fCJ0eXBlImluIGk/Y1VlKGkucG9zaXRpb24pOiJzdGFydCJpbiBpfHwiZW5kImluIGk/Y1VlKGkpOiJsaW5lImluIGl8fCJjb2x1bW4iaW4gaT9QbWUoaSk6IiJ9ZnVuY3Rpb24gUG1lKGkpe3JldHVybiB1VWUoaSYmaS5saW5lKSsiOiIrdVVlKGkmJmkuY29sdW1uKX1mdW5jdGlvbiBjVWUoaSl7cmV0dXJuIFBtZShpJiZpLnN0YXJ0KSsiLSIrUG1lKGkmJmkuZW5kKX1mdW5jdGlvbiB1VWUoaSl7cmV0dXJuIGkmJnR5cGVvZiBpPT0ibnVtYmVyIj9pOjF9Y29uc3QgbFVlPXt9Lmhhc093blByb3BlcnR5LGhVZT1mdW5jdGlvbihpLHMsdSl7cmV0dXJuIHR5cGVvZiBzIT0ic3RyaW5nIiYmKHU9cyxzPXZvaWQgMCksX1p0KHUpKEVadCh4WnQodSkuZG9jdW1lbnQoKS53cml0ZShrWnQoKShpLHMsITApKSkpfTtmdW5jdGlvbiBfWnQoaSl7Y29uc3Qgcz17dHJhbnNmb3JtczpbXSxjYW5Db250YWluRW9sczpbImVtcGhhc2lzIiwiZnJhZ21lbnQiLCJoZWFkaW5nIiwicGFyYWdyYXBoIiwic3Ryb25nIl0sZW50ZXI6e2F1dG9saW5rOnkoTWEpLGF1dG9saW5rUHJvdG9jb2w6VyxhdXRvbGlua0VtYWlsOlcsYXR4SGVhZGluZzp5KHpyKSxibG9ja1F1b3RlOnkoUWUpLGNoYXJhY3RlckVzY2FwZTpXLGNoYXJhY3RlclJlZmVyZW5jZTpXLGNvZGVGZW5jZWQ6eShEdCksY29kZUZlbmNlZEZlbmNlSW5mbzpULGNvZGVGZW5jZWRGZW5jZU1ldGE6VCxjb2RlSW5kZW50ZWQ6eShEdCxUKSxjb2RlVGV4dDp5KGt0LFQpLGNvZGVUZXh0RGF0YTpXLGRhdGE6Vyxjb2RlRmxvd1ZhbHVlOlcsZGVmaW5pdGlvbjp5KE9uKSxkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6VCxkZWZpbml0aW9uTGFiZWxTdHJpbmc6VCxkZWZpbml0aW9uVGl0bGVTdHJpbmc6VCxlbXBoYXNpczp5KGh0KSxoYXJkQnJlYWtFc2NhcGU6eSh5dCksaGFyZEJyZWFrVHJhaWxpbmc6eSh5dCksaHRtbEZsb3c6eShqaSxUKSxodG1sRmxvd0RhdGE6VyxodG1sVGV4dDp5KGppLFQpLGh0bWxUZXh0RGF0YTpXLGltYWdlOnkoeGkpLGxhYmVsOlQsbGluazp5KE1hKSxsaXN0SXRlbTp5KGFvKSxsaXN0SXRlbVZhbHVlOmosbGlzdE9yZGVyZWQ6eSh6cyxGKSxsaXN0VW5vcmRlcmVkOnkoenMpLHBhcmFncmFwaDp5KFRyKSxyZWZlcmVuY2U6X3QscmVmZXJlbmNlU3RyaW5nOlQscmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzpULHJlc291cmNlVGl0bGVTdHJpbmc6VCxzZXRleHRIZWFkaW5nOnkoenIpLHN0cm9uZzp5KEZuKSx0aGVtYXRpY0JyZWFrOnkoVW4pfSxleGl0OnthdHhIZWFkaW5nOkEoKSxhdHhIZWFkaW5nU2VxdWVuY2U6c2UsYXV0b2xpbms6QSgpLGF1dG9saW5rRW1haWw6UHQsYXV0b2xpbmtQcm90b2NvbDp4dCxibG9ja1F1b3RlOkEoKSxjaGFyYWN0ZXJFc2NhcGVWYWx1ZTp4ZSxjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbDpHdCxjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljOkd0LGNoYXJhY3RlclJlZmVyZW5jZVZhbHVlOmxuLGNvZGVGZW5jZWQ6QShvZSksY29kZUZlbmNlZEZlbmNlOmllLGNvZGVGZW5jZWRGZW5jZUluZm86Syxjb2RlRmVuY2VkRmVuY2VNZXRhOmVlLGNvZGVGbG93VmFsdWU6eGUsY29kZUluZGVudGVkOkEocGUpLGNvZGVUZXh0OkEoSWUpLGNvZGVUZXh0RGF0YTp4ZSxkYXRhOnhlLGRlZmluaXRpb246QSgpLGRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZzpuZSxkZWZpbml0aW9uTGFiZWxTdHJpbmc6YmUsZGVmaW5pdGlvblRpdGxlU3RyaW5nOmFlLGVtcGhhc2lzOkEoKSxoYXJkQnJlYWtFc2NhcGU6QShGZSksaGFyZEJyZWFrVHJhaWxpbmc6QShGZSksaHRtbEZsb3c6QShQZSksaHRtbEZsb3dEYXRhOnhlLGh0bWxUZXh0OkEoamUpLGh0bWxUZXh0RGF0YTp4ZSxpbWFnZTpBKENlKSxsYWJlbDpLZSxsYWJlbFRleHQ6a2UsbGluZUVuZGluZzpVLGxpbms6QShTZSksbGlzdEl0ZW06QSgpLGxpc3RPcmRlcmVkOkEoKSxsaXN0VW5vcmRlcmVkOkEoKSxwYXJhZ3JhcGg6QSgpLHJlZmVyZW5jZVN0cmluZzpFdCxyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOkZ0LHJlc291cmNlVGl0bGVTdHJpbmc6TmUscmVzb3VyY2U6Z24sc2V0ZXh0SGVhZGluZzpBKGdlKSxzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOlgsc2V0ZXh0SGVhZGluZ1RleHQ6ZGUsc3Ryb25nOkEoKSx0aGVtYXRpY0JyZWFrOkEoKX19O2ZVZShzLChpfHx7fSkubWRhc3RFeHRlbnNpb25zfHxbXSk7Y29uc3QgdT17fTtyZXR1cm4gZDtmdW5jdGlvbiBkKEF0KXtsZXQgd3Q9e3R5cGU6InJvb3QiLGNoaWxkcmVuOltdfTtjb25zdCBvbj17c3RhY2s6W3d0XSx0b2tlblN0YWNrOltdLGNvbmZpZzpzLGVudGVyOl8sZXhpdDpQLGJ1ZmZlcjpULHJlc3VtZTpSLHNldERhdGE6dixnZXREYXRhOmJ9LGZuPVtdO2xldCBBbj0tMTtmb3IoOysrQW48QXQubGVuZ3RoOylpZihBdFtBbl1bMV0udHlwZT09PSJsaXN0T3JkZXJlZCJ8fEF0W0FuXVsxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQiKWlmKEF0W0FuXVswXT09PSJlbnRlciIpZm4ucHVzaChBbik7ZWxzZXtjb25zdCBvbz1mbi5wb3AoKTtBbj1wKEF0LG9vLEFuKX1mb3IoQW49LTE7KytBbjxBdC5sZW5ndGg7KXtjb25zdCBvbz1zW0F0W0FuXVswXV07bFVlLmNhbGwob28sQXRbQW5dWzFdLnR5cGUpJiZvb1tBdFtBbl1bMV0udHlwZV0uY2FsbChPYmplY3QuYXNzaWduKHtzbGljZVNlcmlhbGl6ZTpBdFtBbl1bMl0uc2xpY2VTZXJpYWxpemV9LG9uKSxBdFtBbl1bMV0pfWlmKG9uLnRva2VuU3RhY2subGVuZ3RoPjApe2NvbnN0IG9vPW9uLnRva2VuU3RhY2tbb24udG9rZW5TdGFjay5sZW5ndGgtMV07KG9vWzFdfHxkVWUpLmNhbGwob24sdm9pZCAwLG9vWzBdKX1mb3Iod3QucG9zaXRpb249e3N0YXJ0Ok45KEF0Lmxlbmd0aD4wP0F0WzBdWzFdLnN0YXJ0OntsaW5lOjEsY29sdW1uOjEsb2Zmc2V0OjB9KSxlbmQ6TjkoQXQubGVuZ3RoPjA/QXRbQXQubGVuZ3RoLTJdWzFdLmVuZDp7bGluZToxLGNvbHVtbjoxLG9mZnNldDowfSl9LEFuPS0xOysrQW48cy50cmFuc2Zvcm1zLmxlbmd0aDspd3Q9cy50cmFuc2Zvcm1zW0FuXSh3dCl8fHd0O3JldHVybiB3dH1mdW5jdGlvbiBwKEF0LHd0LG9uKXtsZXQgZm49d3QtMSxBbj0tMSxvbz0hMSxqbywkbyxQYSx3bztmb3IoOysrZm48PW9uOyl7Y29uc3QgX3M9QXRbZm5dO2lmKF9zWzFdLnR5cGU9PT0ibGlzdFVub3JkZXJlZCJ8fF9zWzFdLnR5cGU9PT0ibGlzdE9yZGVyZWQifHxfc1sxXS50eXBlPT09ImJsb2NrUXVvdGUiPyhfc1swXT09PSJlbnRlciI/QW4rKzpBbi0tLHdvPXZvaWQgMCk6X3NbMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiP19zWzBdPT09ImVudGVyIiYmKGpvJiYhd28mJiFBbiYmIVBhJiYoUGE9Zm4pLHdvPXZvaWQgMCk6X3NbMV0udHlwZT09PSJsaW5lUHJlZml4Inx8X3NbMV0udHlwZT09PSJsaXN0SXRlbVZhbHVlInx8X3NbMV0udHlwZT09PSJsaXN0SXRlbU1hcmtlciJ8fF9zWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgifHxfc1sxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSJ8fCh3bz12b2lkIDApLCFBbiYmX3NbMF09PT0iZW50ZXIiJiZfc1sxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4Inx8QW49PT0tMSYmX3NbMF09PT0iZXhpdCImJihfc1sxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQifHxfc1sxXS50eXBlPT09Imxpc3RPcmRlcmVkIikpe2lmKGpvKXtsZXQgdGw9Zm47Zm9yKCRvPXZvaWQgMDt0bC0tOyl7Y29uc3QgZGE9QXRbdGxdO2lmKGRhWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fGRhWzFdLnR5cGU9PT0ibGluZUVuZGluZ0JsYW5rIil7aWYoZGFbMF09PT0iZXhpdCIpY29udGludWU7JG8mJihBdFskb11bMV0udHlwZT0ibGluZUVuZGluZ0JsYW5rIixvbz0hMCksZGFbMV0udHlwZT0ibGluZUVuZGluZyIsJG89dGx9ZWxzZSBpZighKGRhWzFdLnR5cGU9PT0ibGluZVByZWZpeCJ8fGRhWzFdLnR5cGU9PT0iYmxvY2tRdW90ZVByZWZpeCJ8fGRhWzFdLnR5cGU9PT0iYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UifHxkYVsxXS50eXBlPT09ImJsb2NrUXVvdGVNYXJrZXIifHxkYVsxXS50eXBlPT09Imxpc3RJdGVtSW5kZW50IikpYnJlYWt9UGEmJighJG98fFBhPCRvKSYmKGpvLl9zcHJlYWQ9ITApLGpvLmVuZD1PYmplY3QuYXNzaWduKHt9LCRvP0F0WyRvXVsxXS5zdGFydDpfc1sxXS5lbmQpLEF0LnNwbGljZSgkb3x8Zm4sMCxbImV4aXQiLGpvLF9zWzJdXSksZm4rKyxvbisrfV9zWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgiJiYoam89e3R5cGU6Imxpc3RJdGVtIixfc3ByZWFkOiExLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sX3NbMV0uc3RhcnQpLGVuZDp2b2lkIDB9LEF0LnNwbGljZShmbiwwLFsiZW50ZXIiLGpvLF9zWzJdXSksZm4rKyxvbisrLFBhPXZvaWQgMCx3bz0hMCl9fXJldHVybiBBdFt3dF1bMV0uX3NwcmVhZD1vbyxvbn1mdW5jdGlvbiB2KEF0LHd0KXt1W0F0XT13dH1mdW5jdGlvbiBiKEF0KXtyZXR1cm4gdVtBdF19ZnVuY3Rpb24geShBdCx3dCl7cmV0dXJuIG9uO2Z1bmN0aW9uIG9uKGZuKXtfLmNhbGwodGhpcyxBdChmbiksZm4pLHd0JiZ3dC5jYWxsKHRoaXMsZm4pfX1mdW5jdGlvbiBUKCl7dGhpcy5zdGFjay5wdXNoKHt0eXBlOiJmcmFnbWVudCIsY2hpbGRyZW46W119KX1mdW5jdGlvbiBfKEF0LHd0LG9uKXtyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXS5jaGlsZHJlbi5wdXNoKEF0KSx0aGlzLnN0YWNrLnB1c2goQXQpLHRoaXMudG9rZW5TdGFjay5wdXNoKFt3dCxvbl0pLEF0LnBvc2l0aW9uPXtzdGFydDpOOSh3dC5zdGFydCl9LEF0fWZ1bmN0aW9uIEEoQXQpe3JldHVybiB3dDtmdW5jdGlvbiB3dChvbil7QXQmJkF0LmNhbGwodGhpcyxvbiksUC5jYWxsKHRoaXMsb24pfX1mdW5jdGlvbiBQKEF0LHd0KXtjb25zdCBvbj10aGlzLnN0YWNrLnBvcCgpLGZuPXRoaXMudG9rZW5TdGFjay5wb3AoKTtpZihmbilmblswXS50eXBlIT09QXQudHlwZSYmKHd0P3d0LmNhbGwodGhpcyxBdCxmblswXSk6KGZuWzFdfHxkVWUpLmNhbGwodGhpcyxBdCxmblswXSkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgYCIrQXQudHlwZSsiYCAoIitRUSh7c3RhcnQ6QXQuc3RhcnQsZW5kOkF0LmVuZH0pKyIpOiBpdOKAmXMgbm90IG9wZW4iKTtyZXR1cm4gb24ucG9zaXRpb24uZW5kPU45KEF0LmVuZCksb259ZnVuY3Rpb24gUigpe3JldHVybiBQUXQodGhpcy5zdGFjay5wb3AoKSl9ZnVuY3Rpb24gRigpe3YoImV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSIsITApfWZ1bmN0aW9uIGooQXQpe2lmKGIoImV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSIpKXtjb25zdCB3dD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO3d0LnN0YXJ0PU51bWJlci5wYXJzZUludCh0aGlzLnNsaWNlU2VyaWFsaXplKEF0KSwxMCksdigiZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlIil9fWZ1bmN0aW9uIEsoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QubGFuZz1BdH1mdW5jdGlvbiBlZSgpe2NvbnN0IEF0PXRoaXMucmVzdW1lKCksd3Q9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTt3dC5tZXRhPUF0fWZ1bmN0aW9uIGllKCl7YigiZmxvd0NvZGVJbnNpZGUiKXx8KHRoaXMuYnVmZmVyKCksdigiZmxvd0NvZGVJbnNpZGUiLCEwKSl9ZnVuY3Rpb24gb2UoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudmFsdWU9QXQucmVwbGFjZSgvXihccj9cbnxccil8KFxyP1xufFxyKSQvZywiIiksdigiZmxvd0NvZGVJbnNpZGUiKX1mdW5jdGlvbiBwZSgpe2NvbnN0IEF0PXRoaXMucmVzdW1lKCksd3Q9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTt3dC52YWx1ZT1BdC5yZXBsYWNlKC8oXHI/XG58XHIpJC9nLCIiKX1mdW5jdGlvbiBiZShBdCl7Y29uc3Qgd3Q9dGhpcy5yZXN1bWUoKSxvbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO29uLmxhYmVsPXd0LG9uLmlkZW50aWZpZXI9SEQodGhpcy5zbGljZVNlcmlhbGl6ZShBdCkpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYWUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudGl0bGU9QXR9ZnVuY3Rpb24gbmUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudXJsPUF0fWZ1bmN0aW9uIHNlKEF0KXtjb25zdCB3dD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKCF3dC5kZXB0aCl7Y29uc3Qgb249dGhpcy5zbGljZVNlcmlhbGl6ZShBdCkubGVuZ3RoO3d0LmRlcHRoPW9ufX1mdW5jdGlvbiBkZSgpe3YoInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciLCEwKX1mdW5jdGlvbiBYKEF0KXtjb25zdCB3dD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO3d0LmRlcHRoPXRoaXMuc2xpY2VTZXJpYWxpemUoQXQpLmNoYXJDb2RlQXQoMCk9PT02MT8xOjJ9ZnVuY3Rpb24gZ2UoKXt2KCJzZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nIil9ZnVuY3Rpb24gVyhBdCl7Y29uc3Qgd3Q9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtsZXQgb249d3QuY2hpbGRyZW5bd3QuY2hpbGRyZW4ubGVuZ3RoLTFdOyghb258fG9uLnR5cGUhPT0idGV4dCIpJiYob249cW4oKSxvbi5wb3NpdGlvbj17c3RhcnQ6TjkoQXQuc3RhcnQpfSx3dC5jaGlsZHJlbi5wdXNoKG9uKSksdGhpcy5zdGFjay5wdXNoKG9uKX1mdW5jdGlvbiB4ZShBdCl7Y29uc3Qgd3Q9dGhpcy5zdGFjay5wb3AoKTt3dC52YWx1ZSs9dGhpcy5zbGljZVNlcmlhbGl6ZShBdCksd3QucG9zaXRpb24uZW5kPU45KEF0LmVuZCl9ZnVuY3Rpb24gVShBdCl7Y29uc3Qgd3Q9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZihiKCJhdEhhcmRCcmVhayIpKXtjb25zdCBvbj13dC5jaGlsZHJlblt3dC5jaGlsZHJlbi5sZW5ndGgtMV07b24ucG9zaXRpb24uZW5kPU45KEF0LmVuZCksdigiYXRIYXJkQnJlYWsiKTtyZXR1cm59IWIoInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciKSYmcy5jYW5Db250YWluRW9scy5pbmNsdWRlcyh3dC50eXBlKSYmKFcuY2FsbCh0aGlzLEF0KSx4ZS5jYWxsKHRoaXMsQXQpKX1mdW5jdGlvbiBGZSgpe3YoImF0SGFyZEJyZWFrIiwhMCl9ZnVuY3Rpb24gUGUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudmFsdWU9QXR9ZnVuY3Rpb24gamUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudmFsdWU9QXR9ZnVuY3Rpb24gSWUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudmFsdWU9QXR9ZnVuY3Rpb24gU2UoKXtjb25zdCBBdD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKGIoImluUmVmZXJlbmNlIikpe2NvbnN0IHd0PWIoInJlZmVyZW5jZVR5cGUiKXx8InNob3J0Y3V0IjtBdC50eXBlKz0iUmVmZXJlbmNlIixBdC5yZWZlcmVuY2VUeXBlPXd0LGRlbGV0ZSBBdC51cmwsZGVsZXRlIEF0LnRpdGxlfWVsc2UgZGVsZXRlIEF0LmlkZW50aWZpZXIsZGVsZXRlIEF0LmxhYmVsO3YoInJlZmVyZW5jZVR5cGUiKX1mdW5jdGlvbiBDZSgpe2NvbnN0IEF0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoYigiaW5SZWZlcmVuY2UiKSl7Y29uc3Qgd3Q9YigicmVmZXJlbmNlVHlwZSIpfHwic2hvcnRjdXQiO0F0LnR5cGUrPSJSZWZlcmVuY2UiLEF0LnJlZmVyZW5jZVR5cGU9d3QsZGVsZXRlIEF0LnVybCxkZWxldGUgQXQudGl0bGV9ZWxzZSBkZWxldGUgQXQuaWRlbnRpZmllcixkZWxldGUgQXQubGFiZWw7digicmVmZXJlbmNlVHlwZSIpfWZ1bmN0aW9uIGtlKEF0KXtjb25zdCB3dD10aGlzLnNsaWNlU2VyaWFsaXplKEF0KSxvbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO29uLmxhYmVsPUNadCh3dCksb24uaWRlbnRpZmllcj1IRCh3dCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBLZSgpe2NvbnN0IEF0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV0sd3Q9dGhpcy5yZXN1bWUoKSxvbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKHYoImluUmVmZXJlbmNlIiwhMCksb24udHlwZT09PSJsaW5rIil7Y29uc3QgZm49QXQuY2hpbGRyZW47b24uY2hpbGRyZW49Zm59ZWxzZSBvbi5hbHQ9d3R9ZnVuY3Rpb24gRnQoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudXJsPUF0fWZ1bmN0aW9uIE5lKCl7Y29uc3QgQXQ9dGhpcy5yZXN1bWUoKSx3dD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO3d0LnRpdGxlPUF0fWZ1bmN0aW9uIGduKCl7digiaW5SZWZlcmVuY2UiKX1mdW5jdGlvbiBfdCgpe3YoInJlZmVyZW5jZVR5cGUiLCJjb2xsYXBzZWQiKX1mdW5jdGlvbiBFdChBdCl7Y29uc3Qgd3Q9dGhpcy5yZXN1bWUoKSxvbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO29uLmxhYmVsPXd0LG9uLmlkZW50aWZpZXI9SEQodGhpcy5zbGljZVNlcmlhbGl6ZShBdCkpLnRvTG93ZXJDYXNlKCksdigicmVmZXJlbmNlVHlwZSIsImZ1bGwiKX1mdW5jdGlvbiBHdChBdCl7digiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIsQXQudHlwZSl9ZnVuY3Rpb24gbG4oQXQpe2NvbnN0IHd0PXRoaXMuc2xpY2VTZXJpYWxpemUoQXQpLG9uPWIoImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiKTtsZXQgZm47b24/KGZuPW9VZSh3dCxvbj09PSJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIj8xMDoxNiksdigiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpKTpmbj1EbWUod3QpO2NvbnN0IEFuPXRoaXMuc3RhY2sucG9wKCk7QW4udmFsdWUrPWZuLEFuLnBvc2l0aW9uLmVuZD1OOShBdC5lbmQpfWZ1bmN0aW9uIHh0KEF0KXt4ZS5jYWxsKHRoaXMsQXQpO2NvbnN0IHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudXJsPXRoaXMuc2xpY2VTZXJpYWxpemUoQXQpfWZ1bmN0aW9uIFB0KEF0KXt4ZS5jYWxsKHRoaXMsQXQpO2NvbnN0IHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudXJsPSJtYWlsdG86Iit0aGlzLnNsaWNlU2VyaWFsaXplKEF0KX1mdW5jdGlvbiBRZSgpe3JldHVybnt0eXBlOiJibG9ja3F1b3RlIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gRHQoKXtyZXR1cm57dHlwZToiY29kZSIsbGFuZzpudWxsLG1ldGE6bnVsbCx2YWx1ZToiIn19ZnVuY3Rpb24ga3QoKXtyZXR1cm57dHlwZToiaW5saW5lQ29kZSIsdmFsdWU6IiJ9fWZ1bmN0aW9uIE9uKCl7cmV0dXJue3R5cGU6ImRlZmluaXRpb24iLGlkZW50aWZpZXI6IiIsbGFiZWw6bnVsbCx0aXRsZTpudWxsLHVybDoiIn19ZnVuY3Rpb24gaHQoKXtyZXR1cm57dHlwZToiZW1waGFzaXMiLGNoaWxkcmVuOltdfX1mdW5jdGlvbiB6cigpe3JldHVybnt0eXBlOiJoZWFkaW5nIixkZXB0aDp2b2lkIDAsY2hpbGRyZW46W119fWZ1bmN0aW9uIHl0KCl7cmV0dXJue3R5cGU6ImJyZWFrIn19ZnVuY3Rpb24gamkoKXtyZXR1cm57dHlwZToiaHRtbCIsdmFsdWU6IiJ9fWZ1bmN0aW9uIHhpKCl7cmV0dXJue3R5cGU6ImltYWdlIix0aXRsZTpudWxsLHVybDoiIixhbHQ6bnVsbH19ZnVuY3Rpb24gTWEoKXtyZXR1cm57dHlwZToibGluayIsdGl0bGU6bnVsbCx1cmw6IiIsY2hpbGRyZW46W119fWZ1bmN0aW9uIHpzKEF0KXtyZXR1cm57dHlwZToibGlzdCIsb3JkZXJlZDpBdC50eXBlPT09Imxpc3RPcmRlcmVkIixzdGFydDpudWxsLHNwcmVhZDpBdC5fc3ByZWFkLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBhbyhBdCl7cmV0dXJue3R5cGU6Imxpc3RJdGVtIixzcHJlYWQ6QXQuX3NwcmVhZCxjaGVja2VkOm51bGwsY2hpbGRyZW46W119fWZ1bmN0aW9uIFRyKCl7cmV0dXJue3R5cGU6InBhcmFncmFwaCIsY2hpbGRyZW46W119fWZ1bmN0aW9uIEZuKCl7cmV0dXJue3R5cGU6InN0cm9uZyIsY2hpbGRyZW46W119fWZ1bmN0aW9uIHFuKCl7cmV0dXJue3R5cGU6InRleHQiLHZhbHVlOiIifX1mdW5jdGlvbiBVbigpe3JldHVybnt0eXBlOiJ0aGVtYXRpY0JyZWFrIn19fWZ1bmN0aW9uIE45KGkpe3JldHVybntsaW5lOmkubGluZSxjb2x1bW46aS5jb2x1bW4sb2Zmc2V0Omkub2Zmc2V0fX1mdW5jdGlvbiBmVWUoaSxzKXtsZXQgdT0tMTtmb3IoOysrdTxzLmxlbmd0aDspe2NvbnN0IGQ9c1t1XTtBcnJheS5pc0FycmF5KGQpP2ZVZShpLGQpOkFadChpLGQpfX1mdW5jdGlvbiBBWnQoaSxzKXtsZXQgdTtmb3IodSBpbiBzKWlmKGxVZS5jYWxsKHMsdSkpe2lmKHU9PT0iY2FuQ29udGFpbkVvbHMiKXtjb25zdCBkPXNbdV07ZCYmaVt1XS5wdXNoKC4uLmQpfWVsc2UgaWYodT09PSJ0cmFuc2Zvcm1zIil7Y29uc3QgZD1zW3VdO2QmJmlbdV0ucHVzaCguLi5kKX1lbHNlIGlmKHU9PT0iZW50ZXIifHx1PT09ImV4aXQiKXtjb25zdCBkPXNbdV07ZCYmT2JqZWN0LmFzc2lnbihpW3VdLGQpfX19ZnVuY3Rpb24gZFVlKGkscyl7dGhyb3cgaT9uZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIitpLnR5cGUrImAgKCIrUVEoe3N0YXJ0Omkuc3RhcnQsZW5kOmkuZW5kfSkrIik6IGEgZGlmZmVyZW50IHRva2VuIChgIitzLnR5cGUrImAsICIrUVEoe3N0YXJ0OnMuc3RhcnQsZW5kOnMuZW5kfSkrIikgaXMgb3BlbiIpOm5ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGRvY3VtZW50LCBhIHRva2VuIChgIitzLnR5cGUrImAsICIrUVEoe3N0YXJ0OnMuc3RhcnQsZW5kOnMuZW5kfSkrIikgaXMgc3RpbGwgb3BlbiIpfWZ1bmN0aW9uIExadChpKXtjb25zdCBzPWkucmVwbGFjZSgvXG57Mix9L2csYApgKTtyZXR1cm4gSk0ocyl9ZnVuY3Rpb24gTVp0KGkpe2NvbnN0IHM9TFp0KGkpLHtjaGlsZHJlbjp1fT1oVWUocyksZD1bW11dO2xldCBwPTA7ZnVuY3Rpb24gdihiLHk9Im5vcm1hbCIpe2IudHlwZT09PSJ0ZXh0Ij9iLnZhbHVlLnNwbGl0KGAKYCkuZm9yRWFjaCgoXyxBKT0+e0EhPT0wJiYocCsrLGQucHVzaChbXSkpLF8uc3BsaXQoIiAiKS5mb3JFYWNoKFA9PntQJiZkW3BdLnB1c2goe2NvbnRlbnQ6UCx0eXBlOnl9KX0pfSk6KGIudHlwZT09PSJzdHJvbmcifHxiLnR5cGU9PT0iZW1waGFzaXMiKSYmYi5jaGlsZHJlbi5mb3JFYWNoKFQ9Pnt2KFQsYi50eXBlKX0pfXJldHVybiB1LmZvckVhY2goYj0+e2IudHlwZT09PSJwYXJhZ3JhcGgiJiZiLmNoaWxkcmVuLmZvckVhY2goeT0+e3YoeSl9KX0pLGR9ZnVuY3Rpb24gRFp0KGkpe2NvbnN0e2NoaWxkcmVuOnN9PWhVZShpKTtmdW5jdGlvbiB1KGQpe3JldHVybiBkLnR5cGU9PT0idGV4dCI/ZC52YWx1ZS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpOmQudHlwZT09PSJzdHJvbmciP2A8c3Ryb25nPiR7ZC5jaGlsZHJlbi5tYXAodSkuam9pbigiIil9PC9zdHJvbmc+YDpkLnR5cGU9PT0iZW1waGFzaXMiP2A8ZW0+JHtkLmNoaWxkcmVuLm1hcCh1KS5qb2luKCIiKX08L2VtPmA6ZC50eXBlPT09InBhcmFncmFwaCI/YDxwPiR7ZC5jaGlsZHJlbi5tYXAodSkuam9pbigiIil9PC9wPmA6YFVuc3VwcG9ydGVkIG1hcmtkb3duOiAke2QudHlwZX1gfXJldHVybiBzLm1hcCh1KS5qb2luKCIiKX1mdW5jdGlvbiBJWnQoaSl7cmV0dXJuIEludGwuU2VnbWVudGVyP1suLi5uZXcgSW50bC5TZWdtZW50ZXIoKS5zZWdtZW50KGkpXS5tYXAocz0+cy5zZWdtZW50KTpbLi4uaV19ZnVuY3Rpb24gT1p0KGkscyl7Y29uc3QgdT1JWnQocy5jb250ZW50KTtyZXR1cm4gZ1VlKGksW10sdSxzLnR5cGUpfWZ1bmN0aW9uIGdVZShpLHMsdSxkKXtpZih1Lmxlbmd0aD09PTApcmV0dXJuW3tjb250ZW50OnMuam9pbigiIiksdHlwZTpkfSx7Y29udGVudDoiIix0eXBlOmR9XTtjb25zdFtwLC4uLnZdPXUsYj1bLi4ucyxwXTtyZXR1cm4gaShbe2NvbnRlbnQ6Yi5qb2luKCIiKSx0eXBlOmR9XSk/Z1VlKGksYix2LGQpOihzLmxlbmd0aD09PTAmJnAmJihzLnB1c2gocCksdS5zaGlmdCgpKSxbe2NvbnRlbnQ6cy5qb2luKCIiKSx0eXBlOmR9LHtjb250ZW50OnUuam9pbigiIiksdHlwZTpkfV0pfWZ1bmN0aW9uIE5adChpLHMpe2lmKGkuc29tZSgoe2NvbnRlbnQ6dX0pPT51LmluY2x1ZGVzKGAKYCkpKXRocm93IG5ldyBFcnJvcigic3BsaXRMaW5lVG9GaXRXaWR0aCBkb2VzIG5vdCBzdXBwb3J0IG5ld2xpbmVzIGluIHRoZSBsaW5lIik7cmV0dXJuIEJtZShpLHMpfWZ1bmN0aW9uIEJtZShpLHMsdT1bXSxkPVtdKXtpZihpLmxlbmd0aD09PTApcmV0dXJuIGQubGVuZ3RoPjAmJnUucHVzaChkKSx1Lmxlbmd0aD4wP3U6W107bGV0IHA9IiI7aVswXS5jb250ZW50PT09IiAiJiYocD0iICIsaS5zaGlmdCgpKTtjb25zdCB2PWkuc2hpZnQoKT8/e2NvbnRlbnQ6IiAiLHR5cGU6Im5vcm1hbCJ9LGI9Wy4uLmRdO2lmKHAhPT0iIiYmYi5wdXNoKHtjb250ZW50OnAsdHlwZToibm9ybWFsIn0pLGIucHVzaCh2KSxzKGIpKXJldHVybiBCbWUoaSxzLHUsYik7aWYoZC5sZW5ndGg+MCl1LnB1c2goZCksaS51bnNoaWZ0KHYpO2Vsc2UgaWYodi5jb250ZW50KXtjb25zdFt5LFRdPU9adChzLHYpO3UucHVzaChbeV0pLFQuY29udGVudCYmaS51bnNoaWZ0KFQpfXJldHVybiBCbWUoaSxzLHUpfWZ1bmN0aW9uIFBadChpLHMpe3MmJmkuYXR0cigic3R5bGUiLHMpfWZ1bmN0aW9uIEJadChpLHMsdSxkLHA9ITEpe2NvbnN0IHY9aS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKSxiPXYuYXBwZW5kKCJ4aHRtbDpkaXYiKSx5PXMubGFiZWwsVD1zLmlzTm9kZT8ibm9kZUxhYmVsIjoiZWRnZUxhYmVsIjtiLmh0bWwoYAogICAgPHNwYW4gY2xhc3M9IiR7VH0gJHtkfSIgYCsocy5sYWJlbFN0eWxlPydzdHlsZT0iJytzLmxhYmVsU3R5bGUrJyInOiIiKSsiPiIreSsiPC9zcGFuPiIpLFBadChiLHMubGFiZWxTdHlsZSksYi5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKSxiLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpLGIuc3R5bGUoIm1heC13aWR0aCIsdSsicHgiKSxiLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHAmJmIuYXR0cigiY2xhc3MiLCJsYWJlbEJrZyIpO2xldCBfPWIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBfLndpZHRoPT09dSYmKGIuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLGIuc3R5bGUoIndoaXRlLXNwYWNlIiwiYnJlYWstc3BhY2VzIiksYi5zdHlsZSgid2lkdGgiLHUrInB4IiksXz1iLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksdi5zdHlsZSgid2lkdGgiLF8ud2lkdGgpLHYuc3R5bGUoImhlaWdodCIsXy5oZWlnaHQpLHYubm9kZSgpfWZ1bmN0aW9uIEZtZShpLHMsdSl7cmV0dXJuIGkuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImNsYXNzIiwidGV4dC1vdXRlci10c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLHMqdS0uMSsiZW0iKS5hdHRyKCJkeSIsdSsiZW0iKX1mdW5jdGlvbiBGWnQoaSxzLHUpe2NvbnN0IGQ9aS5hcHBlbmQoInRleHQiKSxwPUZtZShkLDEscyk7Um1lKHAsdSk7Y29uc3Qgdj1wLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtyZXR1cm4gZC5yZW1vdmUoKSx2fWZ1bmN0aW9uIFJadChpLHMsdSl7dmFyIGI7Y29uc3QgZD1pLmFwcGVuZCgidGV4dCIpLHA9Rm1lKGQsMSxzKTtSbWUocCxbe2NvbnRlbnQ6dSx0eXBlOiJub3JtYWwifV0pO2NvbnN0IHY9KGI9cC5ub2RlKCkpPT1udWxsP3ZvaWQgMDpiLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB2JiZkLnJlbW92ZSgpLHZ9ZnVuY3Rpb24galp0KGkscyx1LGQ9ITEpe2NvbnN0IHY9cy5hcHBlbmQoImciKSxiPXYuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIikseT12LmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLCItMTAuMSIpO2xldCBUPTA7Zm9yKGNvbnN0IF8gb2YgdSl7Y29uc3QgQT1SPT5GWnQodiwxLjEsUik8PWksUD1BKF8pP1tfXTpOWnQoXyxBKTtmb3IoY29uc3QgUiBvZiBQKXtjb25zdCBGPUZtZSh5LFQsMS4xKTtSbWUoRixSKSxUKyt9fWlmKGQpe2NvbnN0IF89eS5ub2RlKCkuZ2V0QkJveCgpLEE9MjtyZXR1cm4gYi5hdHRyKCJ4IiwtQSkuYXR0cigieSIsLUEpLmF0dHIoIndpZHRoIixfLndpZHRoKzIqQSkuYXR0cigiaGVpZ2h0IixfLmhlaWdodCsyKkEpLHYubm9kZSgpfWVsc2UgcmV0dXJuIHkubm9kZSgpfWZ1bmN0aW9uIFJtZShpLHMpe2kudGV4dCgiIikscy5mb3JFYWNoKCh1LGQpPT57Y29uc3QgcD1pLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJmb250LXN0eWxlIix1LnR5cGU9PT0iZW1waGFzaXMiPyJpdGFsaWMiOiJub3JtYWwiKS5hdHRyKCJjbGFzcyIsInRleHQtaW5uZXItdHNwYW4iKS5hdHRyKCJmb250LXdlaWdodCIsdS50eXBlPT09InN0cm9uZyI/ImJvbGQiOiJub3JtYWwiKTtkPT09MD9wLnRleHQodS5jb250ZW50KTpwLnRleHQoIiAiK3UuY29udGVudCl9KX1jb25zdCBKUT0oaSxzPSIiLHtzdHlsZTp1PSIiLGlzVGl0bGU6ZD0hMSxjbGFzc2VzOnA9IiIsdXNlSHRtbExhYmVsczp2PSEwLGlzTm9kZTpiPSEwLHdpZHRoOnk9MjAwLGFkZFN2Z0JhY2tncm91bmQ6VD0hMX09e30pPT57aWYoWGUuaW5mbygiY3JlYXRlVGV4dCIscyx1LGQscCx2LGIsVCksdil7Y29uc3QgXz1EWnQocyksQT17aXNOb2RlOmIsbGFiZWw6WkYoXykucmVwbGFjZSgvZmFbYmxyc10/OmZhLVtcdy1dKy9nLFI9PmA8aSBjbGFzcz0nJHtSLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCksbGFiZWxTdHlsZTp1LnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiBCWnQoaSxBLHkscCxUKX1lbHNle2NvbnN0IF89TVp0KHMpO3JldHVybiBqWnQoeSxpLF8sVCl9fSxnMT1hc3luYyhpLHMsdSxkKT0+e2xldCBwO2NvbnN0IHY9cy51c2VIdG1sTGFiZWxzfHxmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKTt1P3A9dTpwPSJub2RlIGRlZmF1bHQiO2NvbnN0IGI9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIscCkuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpLHk9Yi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLHMubGFiZWxTdHlsZSk7bGV0IFQ7cy5sYWJlbFRleHQ9PT12b2lkIDA/VD0iIjpUPXR5cGVvZiBzLmxhYmVsVGV4dD09InN0cmluZyI/cy5sYWJlbFRleHQ6cy5sYWJlbFRleHRbMF07Y29uc3QgXz15Lm5vZGUoKTtsZXQgQTtzLmxhYmVsVHlwZT09PSJtYXJrZG93biI/QT1KUSh5LFlmKFpGKFQpLHF0KCkpLHt1c2VIdG1sTGFiZWxzOnYsd2lkdGg6cy53aWR0aHx8cXQoKS5mbG93Y2hhcnQud3JhcHBpbmdXaWR0aCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIn0pOkE9Xy5hcHBlbmRDaGlsZCgkMihZZihaRihUKSxxdCgpKSxzLmxhYmVsU3R5bGUsITEsZCkpO2xldCBQPUEuZ2V0QkJveCgpO2NvbnN0IFI9cy5wYWRkaW5nLzI7aWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IEY9QS5jaGlsZHJlblswXSxqPUlyKEEpLEs9Ri5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIik7aWYoSyl7Y29uc3QgZWU9VC5yZXBsYWNlKC88aW1nW14+XSo+L2csIiIpLnRyaW0oKT09PSIiO2F3YWl0IFByb21pc2UuYWxsKFsuLi5LXS5tYXAoaWU9Pm5ldyBQcm9taXNlKG9lPT57ZnVuY3Rpb24gcGUoKXtpZihpZS5zdHlsZS5kaXNwbGF5PSJmbGV4IixpZS5zdHlsZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGVlKXtjb25zdCBiZT1xdCgpLmZvbnRTaXplP3F0KCkuZm9udFNpemU6d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUsYWU9NSxuZT1wYXJzZUludChiZSwxMCkqYWUrInB4IjtpZS5zdHlsZS5taW5XaWR0aD1uZSxpZS5zdHlsZS5tYXhXaWR0aD1uZX1lbHNlIGllLnN0eWxlLndpZHRoPSIxMDAlIjtvZShpZSl9c2V0VGltZW91dCgoKT0+e2llLmNvbXBsZXRlJiZwZSgpfSksaWUuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHBlKSxpZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixwZSl9KSkpfVA9Ri5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxqLmF0dHIoIndpZHRoIixQLndpZHRoKSxqLmF0dHIoImhlaWdodCIsUC5oZWlnaHQpfXJldHVybiB2P3kuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVAud2lkdGgvMisiLCAiKy1QLmhlaWdodC8yKyIpIik6eS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistUC5oZWlnaHQvMisiKSIpLHMuY2VudGVyTGFiZWwmJnkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVAud2lkdGgvMisiLCAiKy1QLmhlaWdodC8yKyIpIikseS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6YixiYm94OlAsaGFsZlBhZGRpbmc6UixsYWJlbDp5fX0sS2g9KGkscyk9Pntjb25zdCB1PXMubm9kZSgpLmdldEJCb3goKTtpLndpZHRoPXUud2lkdGgsaS5oZWlnaHQ9dS5oZWlnaHR9O2Z1bmN0aW9uIHI1KGkscyx1LGQpe3JldHVybiBpLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsZC5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIHAueCsiLCIrcC55fSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsImxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1zLzIrIiwiK3UvMisiKSIpfWxldCBNbz17fSxWMz17fSxwVWU9e307Y29uc3QgJFp0PSgpPT57VjM9e30scFVlPXt9LE1vPXt9fSxaUT0oaSxzKT0+KFhlLnRyYWNlKCJJbiBpc0Rlc2NlbmRhbnQiLHMsIiAiLGksIiA9ICIsVjNbc10uaW5jbHVkZXMoaSkpLCEhVjNbc10uaW5jbHVkZXMoaSkpLHpadD0oaSxzKT0+KFhlLmluZm8oIkRlc2NlbmRhbnRzIG9mICIscywiIGlzICIsVjNbc10pLFhlLmluZm8oIkVkZ2UgaXMgIixpKSxpLnY9PT1zfHxpLnc9PT1zPyExOlYzW3NdP1YzW3NdLmluY2x1ZGVzKGkudil8fFpRKGkudixzKXx8WlEoaS53LHMpfHxWM1tzXS5pbmNsdWRlcyhpLncpOihYZS5kZWJ1ZygiVGlsdCwgIixzLCIsbm90IGluIGRlc2NlbmRhbnRzIiksITEpKSxiVWU9KGkscyx1LGQpPT57WGUud2FybigiQ29weWluZyBjaGlsZHJlbiBvZiAiLGksInJvb3QiLGQsImRhdGEiLHMubm9kZShpKSxkKTtjb25zdCBwPXMuY2hpbGRyZW4oaSl8fFtdO2khPT1kJiZwLnB1c2goaSksWGUud2FybigiQ29weWluZyAobm9kZXMpIGNsdXN0ZXJJZCIsaSwibm9kZXMiLHApLHAuZm9yRWFjaCh2PT57aWYocy5jaGlsZHJlbih2KS5sZW5ndGg+MCliVWUodixzLHUsZCk7ZWxzZXtjb25zdCBiPXMubm9kZSh2KTtYZS5pbmZvKCJjcCAiLHYsIiB0byAiLGQsIiB3aXRoIHBhcmVudCAiLGkpLHUuc2V0Tm9kZSh2LGIpLGQhPT1zLnBhcmVudCh2KSYmKFhlLndhcm4oIlNldHRpbmcgcGFyZW50Iix2LHMucGFyZW50KHYpKSx1LnNldFBhcmVudCh2LHMucGFyZW50KHYpKSksaSE9PWQmJnYhPT1pPyhYZS5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLHYsaSksdS5zZXRQYXJlbnQodixpKSk6KFhlLmluZm8oIkluIGNvcHkgIixpLCJyb290IixkLCJkYXRhIixzLm5vZGUoaSksZCksWGUuZGVidWcoIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT0iLHYsImNsdXN0ZXIhPT1yb290SWQiLGkhPT1kLCJub2RlIT09Y2x1c3RlcklkIix2IT09aSkpO2NvbnN0IHk9cy5lZGdlcyh2KTtYZS5kZWJ1ZygiQ29weWluZyBFZGdlcyIseSkseS5mb3JFYWNoKFQ9PntYZS5pbmZvKCJFZGdlIixUKTtjb25zdCBfPXMuZWRnZShULnYsVC53LFQubmFtZSk7WGUuaW5mbygiRWRnZSBkYXRhIixfLGQpO3RyeXt6WnQoVCxkKT8oWGUuaW5mbygiQ29weWluZyBhcyAiLFQudixULncsXyxULm5hbWUpLHUuc2V0RWRnZShULnYsVC53LF8sVC5uYW1lKSxYZS5pbmZvKCJuZXdHcmFwaCBlZGdlcyAiLHUuZWRnZXMoKSx1LmVkZ2UodS5lZGdlcygpWzBdKSkpOlhlLmluZm8oIlNraXBwaW5nIGNvcHkgb2YgZWRnZSAiLFQudiwiLS0+IixULncsIiByb290SWQ6ICIsZCwiIGNsdXN0ZXJJZDoiLGkpfWNhdGNoKEEpe1hlLmVycm9yKEEpfX0pfVhlLmRlYnVnKCJSZW1vdmluZyBub2RlIix2KSxzLnJlbW92ZU5vZGUodil9KX0sbVVlPShpLHMpPT57Y29uc3QgdT1zLmNoaWxkcmVuKGkpO2xldCBkPVsuLi51XTtmb3IoY29uc3QgcCBvZiB1KXBVZVtwXT1pLGQ9Wy4uLmQsLi4ubVVlKHAscyldO3JldHVybiBkfSxNUj0oaSxzKT0+e1hlLnRyYWNlKCJTZWFyY2hpbmciLGkpO2NvbnN0IHU9cy5jaGlsZHJlbihpKTtpZihYZS50cmFjZSgiU2VhcmNoaW5nIGNoaWxkcmVuIG9mIGlkICIsaSx1KSx1Lmxlbmd0aDwxKXJldHVybiBYZS50cmFjZSgiVGhpcyBpcyBhIHZhbGlkIG5vZGUiLGkpLGk7Zm9yKGNvbnN0IGQgb2YgdSl7Y29uc3QgcD1NUihkLHMpO2lmKHApcmV0dXJuIFhlLnRyYWNlKCJGb3VuZCByZXBsYWNlbWVudCBmb3IiLGksIiA9PiAiLHApLHB9fSxlSj1pPT4hTW9baV18fCFNb1tpXS5leHRlcm5hbENvbm5lY3Rpb25zP2k6TW9baV0/TW9baV0uaWQ6aSxxWnQ9KGkscyk9PntpZighaXx8cz4xMCl7WGUuZGVidWcoIk9wdGluZyBvdXQsIG5vIGdyYXBoICIpO3JldHVybn1lbHNlIFhlLmRlYnVnKCJPcHRpbmcgaW4sIGdyYXBoICIpO2kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2kuY2hpbGRyZW4odSkubGVuZ3RoPjAmJihYZS53YXJuKCJDbHVzdGVyIGlkZW50aWZpZWQiLHUsIiBSZXBsYWNlbWVudCBpZCBpbiBlZGdlczogIixNUih1LGkpKSxWM1t1XT1tVWUodSxpKSxNb1t1XT17aWQ6TVIodSxpKSxjbHVzdGVyRGF0YTppLm5vZGUodSl9KX0pLGkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2NvbnN0IGQ9aS5jaGlsZHJlbih1KSxwPWkuZWRnZXMoKTtkLmxlbmd0aD4wPyhYZS5kZWJ1ZygiQ2x1c3RlciBpZGVudGlmaWVkIix1LFYzKSxwLmZvckVhY2godj0+e2lmKHYudiE9PXUmJnYudyE9PXUpe2NvbnN0IGI9WlEodi52LHUpLHk9WlEodi53LHUpO2JeeSYmKFhlLndhcm4oIkVkZ2U6ICIsdiwiIGxlYXZlcyBjbHVzdGVyICIsdSksWGUud2FybigiRGVzY2VuZGFudHMgb2YgWFhYICIsdSwiOiAiLFYzW3VdKSxNb1t1XS5leHRlcm5hbENvbm5lY3Rpb25zPSEwKX19KSk6WGUuZGVidWcoIk5vdCBhIGNsdXN0ZXIgIix1LFYzKX0pO2ZvcihsZXQgdSBvZiBPYmplY3Qua2V5cyhNbykpe2NvbnN0IGQ9TW9bdV0uaWQscD1pLnBhcmVudChkKTtwIT09dSYmTW9bcF0mJiFNb1twXS5leHRlcm5hbENvbm5lY3Rpb25zJiYoTW9bdV0uaWQ9cCl9aS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24odSl7Y29uc3QgZD1pLmVkZ2UodSk7WGUud2FybigiRWRnZSAiK3UudisiIC0+ICIrdS53KyI6ICIrSlNPTi5zdHJpbmdpZnkodSkpLFhlLndhcm4oIkVkZ2UgIit1LnYrIiAtPiAiK3UudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZSh1KSkpO2xldCBwPXUudix2PXUudztpZihYZS53YXJuKCJGaXggWFhYIixNbywiaWRzOiIsdS52LHUudywiVHJhbnNsYXRpbmc6ICIsTW9bdS52XSwiIC0tLSAiLE1vW3Uud10pLE1vW3Uudl0mJk1vW3Uud10mJk1vW3Uudl09PT1Nb1t1LnddKXtYZS53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgbGluayB0byBzZWxmIC0gcmVtb3ZpbmcgWFhYIix1LnYsdS53LHUubmFtZSksWGUud2FybigiRml4aW5nIGFuZCB0cml4aW5nIC0gcmVtb3ZpbmcgWFhYIix1LnYsdS53LHUubmFtZSkscD1lSih1LnYpLHY9ZUoodS53KSxpLnJlbW92ZUVkZ2UodS52LHUudyx1Lm5hbWUpO2NvbnN0IGI9dS53KyItLS0iK3UudjtpLnNldE5vZGUoYix7ZG9tSWQ6YixpZDpiLGxhYmVsU3R5bGU6IiIsbGFiZWxUZXh0OmQubGFiZWwscGFkZGluZzowLHNoYXBlOiJsYWJlbFJlY3QiLHN0eWxlOiIifSk7Y29uc3QgeT1zdHJ1Y3R1cmVkQ2xvbmUoZCksVD1zdHJ1Y3R1cmVkQ2xvbmUoZCk7eS5sYWJlbD0iIix5LmFycm93VHlwZUVuZD0ibm9uZSIsVC5sYWJlbD0iIix5LmZyb21DbHVzdGVyPXUudixULnRvQ2x1c3Rlcj11LnYsaS5zZXRFZGdlKHAsYix5LHUubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIiksaS5zZXRFZGdlKGIsdixULHUubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIil9ZWxzZSBpZihNb1t1LnZdfHxNb1t1LnddKXtpZihYZS53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgLSByZW1vdmluZyBYWFgiLHUudix1LncsdS5uYW1lKSxwPWVKKHUudiksdj1lSih1LncpLGkucmVtb3ZlRWRnZSh1LnYsdS53LHUubmFtZSkscCE9PXUudil7Y29uc3QgYj1pLnBhcmVudChwKTtNb1tiXS5leHRlcm5hbENvbm5lY3Rpb25zPSEwLGQuZnJvbUNsdXN0ZXI9dS52fWlmKHYhPT11Lncpe2NvbnN0IGI9aS5wYXJlbnQodik7TW9bYl0uZXh0ZXJuYWxDb25uZWN0aW9ucz0hMCxkLnRvQ2x1c3Rlcj11Lnd9WGUud2FybigiRml4IFJlcGxhY2luZyB3aXRoIFhYWCIscCx2LHUubmFtZSksaS5zZXRFZGdlKHAsdixkLHUubmFtZSl9fSksWGUud2FybigiQWRqdXN0ZWQgR3JhcGgiLHE3KGkpKSx2VWUoaSwwKSxYZS50cmFjZShNbyl9LHZVZT0oaSxzKT0+e2lmKFhlLndhcm4oImV4dHJhY3RvciAtICIscyxxNyhpKSxpLmNoaWxkcmVuKCJEIikpLHM+MTApe1hlLmVycm9yKCJCYWlsaW5nIG91dCIpO3JldHVybn1sZXQgdT1pLm5vZGVzKCksZD0hMTtmb3IoY29uc3QgcCBvZiB1KXtjb25zdCB2PWkuY2hpbGRyZW4ocCk7ZD1kfHx2Lmxlbmd0aD4wfWlmKCFkKXtYZS5kZWJ1ZygiRG9uZSwgbm8gbm9kZSBoYXMgY2hpbGRyZW4iLGkubm9kZXMoKSk7cmV0dXJufVhlLmRlYnVnKCJOb2RlcyA9ICIsdSxzKTtmb3IoY29uc3QgcCBvZiB1KWlmKFhlLmRlYnVnKCJFeHRyYWN0aW5nIG5vZGUiLHAsTW8sTW9bcF0mJiFNb1twXS5leHRlcm5hbENvbm5lY3Rpb25zLCFpLnBhcmVudChwKSxpLm5vZGUocCksaS5jaGlsZHJlbigiRCIpLCIgRGVwdGggIixzKSwhTW9bcF0pWGUuZGVidWcoIk5vdCBhIGNsdXN0ZXIiLHAscyk7ZWxzZSBpZighTW9bcF0uZXh0ZXJuYWxDb25uZWN0aW9ucyYmaS5jaGlsZHJlbihwKSYmaS5jaGlsZHJlbihwKS5sZW5ndGg+MCl7WGUud2FybigiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuIixwLHMpO2xldCBiPWkuZ3JhcGgoKS5yYW5rZGlyPT09IlRCIj8iTFIiOiJUQiI7TW9bcF0mJk1vW3BdLmNsdXN0ZXJEYXRhJiZNb1twXS5jbHVzdGVyRGF0YS5kaXImJihiPU1vW3BdLmNsdXN0ZXJEYXRhLmRpcixYZS53YXJuKCJGaXhpbmcgZGlyIixNb1twXS5jbHVzdGVyRGF0YS5kaXIsYikpO2NvbnN0IHk9bmV3IEIwKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6Yixub2Rlc2VwOjUwLHJhbmtzZXA6NTAsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO1hlLndhcm4oIk9sZCBncmFwaCBiZWZvcmUgY29weSIscTcoaSkpLGJVZShwLGkseSxwKSxpLnNldE5vZGUocCx7Y2x1c3Rlck5vZGU6ITAsaWQ6cCxjbHVzdGVyRGF0YTpNb1twXS5jbHVzdGVyRGF0YSxsYWJlbFRleHQ6TW9bcF0ubGFiZWxUZXh0LGdyYXBoOnl9KSxYZS53YXJuKCJOZXcgZ3JhcGggYWZ0ZXIgY29weSBub2RlOiAoIixwLCIpIixxNyh5KSksWGUuZGVidWcoIk9sZCBncmFwaCBhZnRlciBjb3B5IixxNyhpKSl9ZWxzZSBYZS53YXJuKCJDbHVzdGVyICoqICIscCwiICoqbm90IG1lZXRpbmcgdGhlIGNyaXRlcmlhICFleHRlcm5hbENvbm5lY3Rpb25zOiIsIU1vW3BdLmV4dGVybmFsQ29ubmVjdGlvbnMsIiBubyBwYXJlbnQ6ICIsIWkucGFyZW50KHApLCIgY2hpbGRyZW4gIixpLmNoaWxkcmVuKHApJiZpLmNoaWxkcmVuKHApLmxlbmd0aD4wLGkuY2hpbGRyZW4oIkQiKSxzKSxYZS5kZWJ1ZyhNbyk7dT1pLm5vZGVzKCksWGUud2FybigiTmV3IGxpc3Qgb2Ygbm9kZXMiLHUpO2Zvcihjb25zdCBwIG9mIHUpe2NvbnN0IHY9aS5ub2RlKHApO1hlLndhcm4oIiBOb3cgbmV4dCBsZXZlbCIscCx2KSx2LmNsdXN0ZXJOb2RlJiZ2VWUodi5ncmFwaCxzKzEpfX0sd1VlPShpLHMpPT57aWYocy5sZW5ndGg9PT0wKXJldHVybltdO2xldCB1PU9iamVjdC5hc3NpZ24ocyk7cmV0dXJuIHMuZm9yRWFjaChkPT57Y29uc3QgcD1pLmNoaWxkcmVuKGQpLHY9d1VlKGkscCk7dT1bLi4udSwuLi52XX0pLHV9LEhadD1pPT53VWUoaSxpLmNoaWxkcmVuKCkpO2Z1bmN0aW9uIFZadChpLHMpe3JldHVybiBpLmludGVyc2VjdChzKX1mdW5jdGlvbiB5VWUoaSxzLHUsZCl7dmFyIHA9aS54LHY9aS55LGI9cC1kLngseT12LWQueSxUPU1hdGguc3FydChzKnMqeSp5K3UqdSpiKmIpLF89TWF0aC5hYnMocyp1KmIvVCk7ZC54PHAmJihfPS1fKTt2YXIgQT1NYXRoLmFicyhzKnUqeS9UKTtyZXR1cm4gZC55PHYmJihBPS1BKSx7eDpwK18seTp2K0F9fWZ1bmN0aW9uIFVadChpLHMsdSl7cmV0dXJuIHlVZShpLHMscyx1KX1mdW5jdGlvbiBHWnQoaSxzLHUsZCl7dmFyIHAsdixiLHksVCxfLEEsUCxSLEYsaixLLGVlLGllLG9lO2lmKHA9cy55LWkueSxiPWkueC1zLngsVD1zLngqaS55LWkueCpzLnksUj1wKnUueCtiKnUueStULEY9cCpkLngrYipkLnkrVCwhKFIhPT0wJiZGIT09MCYmeFVlKFIsRikpJiYodj1kLnktdS55LHk9dS54LWQueCxfPWQueCp1LnktdS54KmQueSxBPXYqaS54K3kqaS55K18sUD12KnMueCt5KnMueStfLCEoQSE9PTAmJlAhPT0wJiZ4VWUoQSxQKSkmJihqPXAqeS12KmIsaiE9PTApKSlyZXR1cm4gSz1NYXRoLmFicyhqLzIpLGVlPWIqXy15KlQsaWU9ZWU8MD8oZWUtSykvajooZWUrSykvaixlZT12KlQtcCpfLG9lPWVlPDA/KGVlLUspL2o6KGVlK0spL2ose3g6aWUseTpvZX19ZnVuY3Rpb24geFVlKGkscyl7cmV0dXJuIGkqcz4wfWZ1bmN0aW9uIEtadChpLHMsdSl7dmFyIGQ9aS54LHA9aS55LHY9W10sYj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7dHlwZW9mIHMuZm9yRWFjaD09ImZ1bmN0aW9uIj9zLmZvckVhY2goZnVuY3Rpb24oail7Yj1NYXRoLm1pbihiLGoueCkseT1NYXRoLm1pbih5LGoueSl9KTooYj1NYXRoLm1pbihiLHMueCkseT1NYXRoLm1pbih5LHMueSkpO2Zvcih2YXIgVD1kLWkud2lkdGgvMi1iLF89cC1pLmhlaWdodC8yLXksQT0wO0E8cy5sZW5ndGg7QSsrKXt2YXIgUD1zW0FdLFI9c1tBPHMubGVuZ3RoLTE/QSsxOjBdLEY9R1p0KGksdSx7eDpUK1AueCx5Ol8rUC55fSx7eDpUK1IueCx5Ol8rUi55fSk7RiYmdi5wdXNoKEYpfXJldHVybiB2Lmxlbmd0aD8odi5sZW5ndGg+MSYmdi5zb3J0KGZ1bmN0aW9uKGosSyl7dmFyIGVlPWoueC11LngsaWU9ai55LXUueSxvZT1NYXRoLnNxcnQoZWUqZWUraWUqaWUpLHBlPUsueC11LngsYmU9Sy55LXUueSxhZT1NYXRoLnNxcnQocGUqcGUrYmUqYmUpO3JldHVybiBvZTxhZT8tMTpvZT09PWFlPzA6MX0pLHZbMF0pOml9Y29uc3QgRFI9KGkscyk9Pnt2YXIgdT1pLngsZD1pLnkscD1zLngtdSx2PXMueS1kLGI9aS53aWR0aC8yLHk9aS5oZWlnaHQvMixULF87cmV0dXJuIE1hdGguYWJzKHYpKmI+TWF0aC5hYnMocCkqeT8odjwwJiYoeT0teSksVD12PT09MD8wOnkqcC92LF89eSk6KHA8MCYmKGI9LWIpLFQ9YixfPXA9PT0wPzA6Yip2L3ApLHt4OnUrVCx5OmQrX319LHloPXtub2RlOlZadCxjaXJjbGU6VVp0LGVsbGlwc2U6eVVlLHBvbHlnb246S1p0LHJlY3Q6RFJ9LFdadD1hc3luYyhpLHMpPT57cy51c2VIdG1sTGFiZWxzfHxxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzfHwocy5jZW50ZXJMYWJlbD0hMCk7Y29uc3R7c2hhcGVTdmc6ZCxiYm94OnAsaGFsZlBhZGRpbmc6dn09YXdhaXQgZzEoaSxzLCJub2RlICIrcy5jbGFzc2VzLCEwKTtYZS5pbmZvKCJDbGFzc2VzID0gIixzLmNsYXNzZXMpO2NvbnN0IGI9ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYi5hdHRyKCJyeCIscy5yeCkuYXR0cigicnkiLHMucnkpLmF0dHIoIngiLC1wLndpZHRoLzItdikuYXR0cigieSIsLXAuaGVpZ2h0LzItdikuYXR0cigid2lkdGgiLHAud2lkdGgrcy5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHAuaGVpZ2h0K3MucGFkZGluZyksS2gocyxiKSxzLmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4geWgucmVjdChzLHkpfSxkfSxZWnQ9aT0+e2NvbnN0IHM9bmV3IFNldDtmb3IoY29uc3QgdSBvZiBpKXN3aXRjaCh1KXtjYXNlIngiOnMuYWRkKCJyaWdodCIpLHMuYWRkKCJsZWZ0Iik7YnJlYWs7Y2FzZSJ5IjpzLmFkZCgidXAiKSxzLmFkZCgiZG93biIpO2JyZWFrO2RlZmF1bHQ6cy5hZGQodSk7YnJlYWt9cmV0dXJuIHN9LFhadD0oaSxzLHUpPT57Y29uc3QgZD1ZWnQoaSkscD0yLHY9cy5oZWlnaHQrMip1LnBhZGRpbmcsYj12L3AseT1zLndpZHRoKzIqYit1LnBhZGRpbmcsVD11LnBhZGRpbmcvMjtyZXR1cm4gZC5oYXMoInJpZ2h0IikmJmQuaGFzKCJsZWZ0IikmJmQuaGFzKCJ1cCIpJiZkLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6Yix5OjB9LHt4OnkvMix5OjIqVH0se3g6eS1iLHk6MH0se3g6eSx5OjB9LHt4OnkseTotdi8zfSx7eDp5KzIqVCx5Oi12LzJ9LHt4OnkseTotMip2LzN9LHt4OnkseTotdn0se3g6eS1iLHk6LXZ9LHt4OnkvMix5Oi12LTIqVH0se3g6Yix5Oi12fSx7eDowLHk6LXZ9LHt4OjAseTotMip2LzN9LHt4Oi0yKlQseTotdi8yfSx7eDowLHk6LXYvM31dOmQuaGFzKCJyaWdodCIpJiZkLmhhcygibGVmdCIpJiZkLmhhcygidXAiKT9be3g6Yix5OjB9LHt4OnktYix5OjB9LHt4OnkseTotdi8yfSx7eDp5LWIseTotdn0se3g6Yix5Oi12fSx7eDowLHk6LXYvMn1dOmQuaGFzKCJyaWdodCIpJiZkLmhhcygibGVmdCIpJiZkLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6Yix5Oi12fSx7eDp5LWIseTotdn0se3g6eSx5OjB9XTpkLmhhcygicmlnaHQiKSYmZC5oYXMoInVwIikmJmQuaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDp5LHk6LWJ9LHt4OnkseTotditifSx7eDowLHk6LXZ9XTpkLmhhcygibGVmdCIpJiZkLmhhcygidXAiKSYmZC5oYXMoImRvd24iKT9be3g6eSx5OjB9LHt4OjAseTotYn0se3g6MCx5Oi12K2J9LHt4OnkseTotdn1dOmQuaGFzKCJyaWdodCIpJiZkLmhhcygibGVmdCIpP1t7eDpiLHk6MH0se3g6Yix5Oi1UfSx7eDp5LWIseTotVH0se3g6eS1iLHk6MH0se3g6eSx5Oi12LzJ9LHt4OnktYix5Oi12fSx7eDp5LWIseTotditUfSx7eDpiLHk6LXYrVH0se3g6Yix5Oi12fSx7eDowLHk6LXYvMn1dOmQuaGFzKCJ1cCIpJiZkLmhhcygiZG93biIpP1t7eDp5LzIseTowfSx7eDowLHk6LVR9LHt4OmIseTotVH0se3g6Yix5Oi12K1R9LHt4OjAseTotditUfSx7eDp5LzIseTotdn0se3g6eSx5Oi12K1R9LHt4OnktYix5Oi12K1R9LHt4OnktYix5Oi1UfSx7eDp5LHk6LVR9XTpkLmhhcygicmlnaHQiKSYmZC5oYXMoInVwIik/W3t4OjAseTowfSx7eDp5LHk6LWJ9LHt4OjAseTotdn1dOmQuaGFzKCJyaWdodCIpJiZkLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6eSx5OjB9LHt4OjAseTotdn1dOmQuaGFzKCJsZWZ0IikmJmQuaGFzKCJ1cCIpP1t7eDp5LHk6MH0se3g6MCx5Oi1ifSx7eDp5LHk6LXZ9XTpkLmhhcygibGVmdCIpJiZkLmhhcygiZG93biIpP1t7eDp5LHk6MH0se3g6MCx5OjB9LHt4OnkseTotdn1dOmQuaGFzKCJyaWdodCIpP1t7eDpiLHk6LVR9LHt4OmIseTotVH0se3g6eS1iLHk6LVR9LHt4OnktYix5OjB9LHt4OnkseTotdi8yfSx7eDp5LWIseTotdn0se3g6eS1iLHk6LXYrVH0se3g6Yix5Oi12K1R9LHt4OmIseTotditUfV06ZC5oYXMoImxlZnQiKT9be3g6Yix5OjB9LHt4OmIseTotVH0se3g6eS1iLHk6LVR9LHt4OnktYix5Oi12K1R9LHt4OmIseTotditUfSx7eDpiLHk6LXZ9LHt4OjAseTotdi8yfV06ZC5oYXMoInVwIik/W3t4OmIseTotVH0se3g6Yix5Oi12K1R9LHt4OjAseTotditUfSx7eDp5LzIseTotdn0se3g6eSx5Oi12K1R9LHt4OnktYix5Oi12K1R9LHt4OnktYix5Oi1UfV06ZC5oYXMoImRvd24iKT9be3g6eS8yLHk6MH0se3g6MCx5Oi1UfSx7eDpiLHk6LVR9LHt4OmIseTotditUfSx7eDp5LWIseTotditUfSx7eDp5LWIseTotVH0se3g6eSx5Oi1UfV06W3t4OjAseTowfV19LGtVZT1pPT5pPyIgIitpOiIiLGRtPShpLHMpPT5gJHtzfHwibm9kZSBkZWZhdWx0In0ke2tVZShpLmNsYXNzZXMpfSAke2tVZShpLmNsYXNzKX1gLEVVZT1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1wK3YseT1be3g6Yi8yLHk6MH0se3g6Yix5Oi1iLzJ9LHt4OmIvMix5Oi1ifSx7eDowLHk6LWIvMn1dO1hlLmluZm8oIlF1ZXN0aW9uIG1haW4gKENpcmNsZSkiKTtjb25zdCBUPXI1KHUsYixiLHkpO3JldHVybiBULmF0dHIoInN0eWxlIixzLnN0eWxlKSxLaChzLFQpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiBYZS53YXJuKCJJbnRlcnNlY3QgY2FsbGVkIikseWgucG9seWdvbihzLHksXyl9LHV9LFFadD0oaSxzKT0+e2NvbnN0IHU9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixzLmRvbUlkfHxzLmlkKSxkPTI4LHA9W3t4OjAseTpkLzJ9LHt4OmQvMix5OjB9LHt4OjAseTotZC8yfSx7eDotZC8yLHk6MH1dO3JldHVybiB1Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIscC5tYXAoZnVuY3Rpb24oYil7cmV0dXJuIGIueCsiLCIrYi55fSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDI4KS5hdHRyKCJoZWlnaHQiLDI4KSxzLndpZHRoPTI4LHMuaGVpZ2h0PTI4LHMuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiB5aC5jaXJjbGUocywxNCxiKX0sdX0sSlp0PWFzeW5jKGkscyk9Pntjb25zdHtzaGFwZVN2Zzp1LGJib3g6ZH09YXdhaXQgZzEoaSxzLGRtKHMsdm9pZCAwKSwhMCkscD00LHY9ZC5oZWlnaHQrcy5wYWRkaW5nLGI9di9wLHk9ZC53aWR0aCsyKmIrcy5wYWRkaW5nLFQ9W3t4OmIseTowfSx7eDp5LWIseTowfSx7eDp5LHk6LXYvMn0se3g6eS1iLHk6LXZ9LHt4OmIseTotdn0se3g6MCx5Oi12LzJ9XSxfPXI1KHUseSx2LFQpO3JldHVybiBfLmF0dHIoInN0eWxlIixzLnN0eWxlKSxLaChzLF8pLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiB5aC5wb2x5Z29uKHMsVCxBKX0sdX0sWlp0PWFzeW5jKGkscyk9Pntjb25zdHtzaGFwZVN2Zzp1LGJib3g6ZH09YXdhaXQgZzEoaSxzLHZvaWQgMCwhMCkscD0yLHY9ZC5oZWlnaHQrMipzLnBhZGRpbmcsYj12L3AseT1kLndpZHRoKzIqYitzLnBhZGRpbmcsVD1YWnQocy5kaXJlY3Rpb25zLGQscyksXz1yNSh1LHksdixUKTtyZXR1cm4gXy5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyxfKSxzLmludGVyc2VjdD1mdW5jdGlvbihBKXtyZXR1cm4geWgucG9seWdvbihzLFQsQSl9LHV9LGVlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6LXYvMix5OjB9LHt4OnAseTowfSx7eDpwLHk6LXZ9LHt4Oi12LzIseTotdn0se3g6MCx5Oi12LzJ9XTtyZXR1cm4gcjUodSxwLHYsYikuYXR0cigic3R5bGUiLHMuc3R5bGUpLHMud2lkdGg9cCt2LHMuaGVpZ2h0PXYscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oVCl7cmV0dXJuIHloLnBvbHlnb24ocyxiLFQpfSx1fSx0ZW49YXN5bmMoaSxzKT0+e2NvbnN0e3NoYXBlU3ZnOnUsYmJveDpkfT1hd2FpdCBnMShpLHMsZG0ocyksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6LTIqdi82LHk6MH0se3g6cC12LzYseTowfSx7eDpwKzIqdi82LHk6LXZ9LHt4OnYvNix5Oi12fV0seT1yNSh1LHAsdixiKTtyZXR1cm4geS5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyx5KSxzLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4geWgucG9seWdvbihzLGIsVCl9LHV9LG5lbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6Mip2LzYseTowfSx7eDpwK3YvNix5OjB9LHt4OnAtMip2LzYseTotdn0se3g6LXYvNix5Oi12fV0seT1yNSh1LHAsdixiKTtyZXR1cm4geS5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyx5KSxzLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4geWgucG9seWdvbihzLGIsVCl9LHV9LHJlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6LTIqdi82LHk6MH0se3g6cCsyKnYvNix5OjB9LHt4OnAtdi82LHk6LXZ9LHt4OnYvNix5Oi12fV0seT1yNSh1LHAsdixiKTtyZXR1cm4geS5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyx5KSxzLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4geWgucG9seWdvbihzLGIsVCl9LHV9LGllbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6di82LHk6MH0se3g6cC12LzYseTowfSx7eDpwKzIqdi82LHk6LXZ9LHt4Oi0yKnYvNix5Oi12fV0seT1yNSh1LHAsdixiKTtyZXR1cm4geS5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyx5KSxzLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4geWgucG9seWdvbihzLGIsVCl9LHV9LHNlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6MCx5OjB9LHt4OnArdi8yLHk6MH0se3g6cCx5Oi12LzJ9LHt4OnArdi8yLHk6LXZ9LHt4OjAseTotdn1dLHk9cjUodSxwLHYsYik7cmV0dXJuIHkuYXR0cigic3R5bGUiLHMuc3R5bGUpLEtoKHMseSkscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oVCl7cmV0dXJuIHloLnBvbHlnb24ocyxiLFQpfSx1fSxhZW49YXN5bmMoaSxzKT0+e2NvbnN0e3NoYXBlU3ZnOnUsYmJveDpkfT1hd2FpdCBnMShpLHMsZG0ocyx2b2lkIDApLCEwKSxwPWQud2lkdGgrcy5wYWRkaW5nLHY9cC8yLGI9di8oMi41K3AvNTApLHk9ZC5oZWlnaHQrYitzLnBhZGRpbmcsVD0iTSAwLCIrYisiIGEgIit2KyIsIitiKyIgMCwwLDAgIitwKyIgMCBhICIrdisiLCIrYisiIDAsMCwwICIrLXArIiAwIGwgMCwiK3krIiBhICIrdisiLCIrYisiIDAsMCwwICIrcCsiIDAgbCAwLCIrLXksXz11LmF0dHIoImxhYmVsLW9mZnNldC15IixiKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigiZCIsVCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAvMisiLCIrLSh5LzIrYikrIikiKTtyZXR1cm4gS2gocyxfKSxzLmludGVyc2VjdD1mdW5jdGlvbihBKXtjb25zdCBQPXloLnJlY3QocyxBKSxSPVAueC1zLng7aWYodiE9MCYmKE1hdGguYWJzKFIpPHMud2lkdGgvMnx8TWF0aC5hYnMoUik9PXMud2lkdGgvMiYmTWF0aC5hYnMoUC55LXMueSk+cy5oZWlnaHQvMi1iKSl7bGV0IEY9YipiKigxLVIqUi8odip2KSk7RiE9MCYmKEY9TWF0aC5zcXJ0KEYpKSxGPWItRixBLnktcy55PjAmJihGPS1GKSxQLnkrPUZ9cmV0dXJuIFB9LHV9LG9lbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmQsaGFsZlBhZGRpbmc6cH09YXdhaXQgZzEoaSxzLCJub2RlICIrcy5jbGFzc2VzKyIgIitzLmNsYXNzLCEwKSx2PXUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYj1zLnBvc2l0aW9uZWQ/cy53aWR0aDpkLndpZHRoK3MucGFkZGluZyx5PXMucG9zaXRpb25lZD9zLmhlaWdodDpkLmhlaWdodCtzLnBhZGRpbmcsVD1zLnBvc2l0aW9uZWQ/LWIvMjotZC53aWR0aC8yLXAsXz1zLnBvc2l0aW9uZWQ/LXkvMjotZC5oZWlnaHQvMi1wO2lmKHYuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJ4IixUKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsYikuYXR0cigiaGVpZ2h0Iix5KSxzLnByb3BzKXtjb25zdCBBPW5ldyBTZXQoT2JqZWN0LmtleXMocy5wcm9wcykpO3MucHJvcHMuYm9yZGVycyYmKGptZSh2LHMucHJvcHMuYm9yZGVycyxiLHkpLEEuZGVsZXRlKCJib3JkZXJzIikpLEEuZm9yRWFjaChQPT57WGUud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7UH1gKX0pfXJldHVybiBLaChzLHYpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiB5aC5yZWN0KHMsQSl9LHV9LGNlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmQsaGFsZlBhZGRpbmc6cH09YXdhaXQgZzEoaSxzLCJub2RlICIrcy5jbGFzc2VzLCEwKSx2PXUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYj1zLnBvc2l0aW9uZWQ/cy53aWR0aDpkLndpZHRoK3MucGFkZGluZyx5PXMucG9zaXRpb25lZD9zLmhlaWdodDpkLmhlaWdodCtzLnBhZGRpbmcsVD1zLnBvc2l0aW9uZWQ/LWIvMjotZC53aWR0aC8yLXAsXz1zLnBvc2l0aW9uZWQ/LXkvMjotZC5oZWlnaHQvMi1wO2lmKHYuYXR0cigiY2xhc3MiLCJiYXNpYyBjbHVzdGVyIGNvbXBvc2l0ZSBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJ4IixUKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsYikuYXR0cigiaGVpZ2h0Iix5KSxzLnByb3BzKXtjb25zdCBBPW5ldyBTZXQoT2JqZWN0LmtleXMocy5wcm9wcykpO3MucHJvcHMuYm9yZGVycyYmKGptZSh2LHMucHJvcHMuYm9yZGVycyxiLHkpLEEuZGVsZXRlKCJib3JkZXJzIikpLEEuZm9yRWFjaChQPT57WGUud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7UH1gKX0pfXJldHVybiBLaChzLHYpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiB5aC5yZWN0KHMsQSl9LHV9LHVlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dX09YXdhaXQgZzEoaSxzLCJsYWJlbCIsITApO1hlLnRyYWNlKCJDbGFzc2VzID0gIixzLmNsYXNzKTtjb25zdCBkPXUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikscD0wLHY9MDtpZihkLmF0dHIoIndpZHRoIixwKS5hdHRyKCJoZWlnaHQiLHYpLHUuYXR0cigiY2xhc3MiLCJsYWJlbCBlZGdlTGFiZWwiKSxzLnByb3BzKXtjb25zdCBiPW5ldyBTZXQoT2JqZWN0LmtleXMocy5wcm9wcykpO3MucHJvcHMuYm9yZGVycyYmKGptZShkLHMucHJvcHMuYm9yZGVycyxwLHYpLGIuZGVsZXRlKCJib3JkZXJzIikpLGIuZm9yRWFjaCh5PT57WGUud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7eX1gKX0pfXJldHVybiBLaChzLGQpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiB5aC5yZWN0KHMsYil9LHV9O2Z1bmN0aW9uIGptZShpLHMsdSxkKXtjb25zdCBwPVtdLHY9eT0+e3AucHVzaCh5LDApfSxiPXk9PntwLnB1c2goMCx5KX07cy5pbmNsdWRlcygidCIpPyhYZS5kZWJ1ZygiYWRkIHRvcCBib3JkZXIiKSx2KHUpKTpiKHUpLHMuaW5jbHVkZXMoInIiKT8oWGUuZGVidWcoImFkZCByaWdodCBib3JkZXIiKSx2KGQpKTpiKGQpLHMuaW5jbHVkZXMoImIiKT8oWGUuZGVidWcoImFkZCBib3R0b20gYm9yZGVyIiksdih1KSk6Yih1KSxzLmluY2x1ZGVzKCJsIik/KFhlLmRlYnVnKCJhZGQgbGVmdCBib3JkZXIiKSx2KGQpKTpiKGQpLGkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIscC5qb2luKCIgIikpfWNvbnN0IGxlbj0oaSxzKT0+e2xldCB1O3MuY2xhc3Nlcz91PSJub2RlICIrcy5jbGFzc2VzOnU9Im5vZGUgZGVmYXVsdCI7Y29uc3QgZD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIix1KS5hdHRyKCJpZCIscy5kb21JZHx8cy5pZCkscD1kLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHY9ZC5pbnNlcnQoImxpbmUiKSxiPWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLHk9cy5sYWJlbFRleHQuZmxhdD9zLmxhYmVsVGV4dC5mbGF0KCk6cy5sYWJlbFRleHQ7bGV0IFQ9IiI7dHlwZW9mIHk9PSJvYmplY3QiP1Q9eVswXTpUPXksWGUuaW5mbygiTGFiZWwgdGV4dCBhYmM3OSIsVCx5LHR5cGVvZiB5PT0ib2JqZWN0Iik7Y29uc3QgXz1iLm5vZGUoKS5hcHBlbmRDaGlsZCgkMihULHMubGFiZWxTdHlsZSwhMCwhMCkpO2xldCBBPXt3aWR0aDowLGhlaWdodDowfTtpZihmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgSz1fLmNoaWxkcmVuWzBdLGVlPUlyKF8pO0E9Sy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlZS5hdHRyKCJ3aWR0aCIsQS53aWR0aCksZWUuYXR0cigiaGVpZ2h0IixBLmhlaWdodCl9WGUuaW5mbygiVGV4dCAyIix5KTtjb25zdCBQPXkuc2xpY2UoMSx5Lmxlbmd0aCk7bGV0IFI9Xy5nZXRCQm94KCk7Y29uc3QgRj1iLm5vZGUoKS5hcHBlbmRDaGlsZCgkMihQLmpvaW4/UC5qb2luKCI8YnIvPiIpOlAscy5sYWJlbFN0eWxlLCEwLCEwKSk7aWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IEs9Ri5jaGlsZHJlblswXSxlZT1JcihGKTtBPUsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZWUuYXR0cigid2lkdGgiLEEud2lkdGgpLGVlLmF0dHIoImhlaWdodCIsQS5oZWlnaHQpfWNvbnN0IGo9cy5wYWRkaW5nLzI7cmV0dXJuIElyKEYpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoQS53aWR0aD5SLndpZHRoPzA6KFIud2lkdGgtQS53aWR0aCkvMikrIiwgIisoUi5oZWlnaHQrais1KSsiKSIpLElyKF8pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoQS53aWR0aDxSLndpZHRoPzA6LShSLndpZHRoLUEud2lkdGgpLzIpKyIsIDApIiksQT1iLm5vZGUoKS5nZXRCQm94KCksYi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistQS53aWR0aC8yKyIsICIrKC1BLmhlaWdodC8yLWorMykrIikiKSxwLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtQS53aWR0aC8yLWopLmF0dHIoInkiLC1BLmhlaWdodC8yLWopLmF0dHIoIndpZHRoIixBLndpZHRoK3MucGFkZGluZykuYXR0cigiaGVpZ2h0IixBLmhlaWdodCtzLnBhZGRpbmcpLHYuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1BLndpZHRoLzItaikuYXR0cigieDIiLEEud2lkdGgvMitqKS5hdHRyKCJ5MSIsLUEuaGVpZ2h0LzItaitSLmhlaWdodCtqKS5hdHRyKCJ5MiIsLUEuaGVpZ2h0LzItaitSLmhlaWdodCtqKSxLaChzLHApLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKEspe3JldHVybiB5aC5yZWN0KHMsSyl9LGR9LGhlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC5oZWlnaHQrcy5wYWRkaW5nLHY9ZC53aWR0aCtwLzQrcy5wYWRkaW5nLGI9dS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHAvMikuYXR0cigicnkiLHAvMikuYXR0cigieCIsLXYvMikuYXR0cigieSIsLXAvMikuYXR0cigid2lkdGgiLHYpLmF0dHIoImhlaWdodCIscCk7cmV0dXJuIEtoKHMsYikscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIHloLnJlY3Qocyx5KX0sdX0sZmVuPWFzeW5jKGkscyk9Pntjb25zdHtzaGFwZVN2Zzp1LGJib3g6ZCxoYWxmUGFkZGluZzpwfT1hd2FpdCBnMShpLHMsZG0ocyx2b2lkIDApLCEwKSx2PXUuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdi5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJyIixkLndpZHRoLzIrcCkuYXR0cigid2lkdGgiLGQud2lkdGgrcy5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGQuaGVpZ2h0K3MucGFkZGluZyksWGUuaW5mbygiQ2lyY2xlIG1haW4iKSxLaChzLHYpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBYZS5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixzLGQud2lkdGgvMitwLGIpLHloLmNpcmNsZShzLGQud2lkdGgvMitwLGIpfSx1fSxkZW49YXN5bmMoaSxzKT0+e2NvbnN0e3NoYXBlU3ZnOnUsYmJveDpkLGhhbGZQYWRkaW5nOnB9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHY9NSxiPXUuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIikseT1iLmluc2VydCgiY2lyY2xlIiksVD1iLmluc2VydCgiY2lyY2xlIik7cmV0dXJuIGIuYXR0cigiY2xhc3MiLHMuY2xhc3MpLHkuYXR0cigic3R5bGUiLHMuc3R5bGUpLmF0dHIoInJ4IixzLnJ4KS5hdHRyKCJyeSIscy5yeSkuYXR0cigiciIsZC53aWR0aC8yK3ArdikuYXR0cigid2lkdGgiLGQud2lkdGgrcy5wYWRkaW5nK3YqMikuYXR0cigiaGVpZ2h0IixkLmhlaWdodCtzLnBhZGRpbmcrdioyKSxULmF0dHIoInN0eWxlIixzLnN0eWxlKS5hdHRyKCJyeCIscy5yeCkuYXR0cigicnkiLHMucnkpLmF0dHIoInIiLGQud2lkdGgvMitwKS5hdHRyKCJ3aWR0aCIsZC53aWR0aCtzLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsZC5oZWlnaHQrcy5wYWRkaW5nKSxYZS5pbmZvKCJEb3VibGVDaXJjbGUgbWFpbiIpLEtoKHMseSkscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIFhlLmluZm8oIkRvdWJsZUNpcmNsZSBpbnRlcnNlY3QiLHMsZC53aWR0aC8yK3ArdixfKSx5aC5jaXJjbGUocyxkLndpZHRoLzIrcCt2LF8pfSx1fSxnZW49YXN5bmMoaSxzKT0+e2NvbnN0e3NoYXBlU3ZnOnUsYmJveDpkfT1hd2FpdCBnMShpLHMsZG0ocyx2b2lkIDApLCEwKSxwPWQud2lkdGgrcy5wYWRkaW5nLHY9ZC5oZWlnaHQrcy5wYWRkaW5nLGI9W3t4OjAseTowfSx7eDpwLHk6MH0se3g6cCx5Oi12fSx7eDowLHk6LXZ9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OnArOCx5OjB9LHt4OnArOCx5Oi12fSx7eDotOCx5Oi12fSx7eDotOCx5OjB9XSx5PXI1KHUscCx2LGIpO3JldHVybiB5LmF0dHIoInN0eWxlIixzLnN0eWxlKSxLaChzLHkpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKFQpe3JldHVybiB5aC5wb2x5Z29uKHMsYixUKX0sdX0scGVuPShpLHMpPT57Y29uc3QgdT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpLGQ9dS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBkLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLEtoKHMsZCkscy5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHloLmNpcmNsZShzLDcscCl9LHV9LFRVZT0oaSxzLHUpPT57Y29uc3QgZD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpO2xldCBwPTcwLHY9MTA7dT09PSJMUiImJihwPTEwLHY9NzApO2NvbnN0IGI9ZC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMSpwLzIpLmF0dHIoInkiLC0xKnYvMikuYXR0cigid2lkdGgiLHApLmF0dHIoImhlaWdodCIsdikuYXR0cigiY2xhc3MiLCJmb3JrLWpvaW4iKTtyZXR1cm4gS2gocyxiKSxzLmhlaWdodD1zLmhlaWdodCtzLnBhZGRpbmcvMixzLndpZHRoPXMud2lkdGgrcy5wYWRkaW5nLzIscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIHloLnJlY3Qocyx5KX0sZH0sQ1VlPXtyaG9tYnVzOkVVZSxjb21wb3NpdGU6Y2VuLHF1ZXN0aW9uOkVVZSxyZWN0Om9lbixsYWJlbFJlY3Q6dWVuLHJlY3RXaXRoVGl0bGU6bGVuLGNob2ljZTpRWnQsY2lyY2xlOmZlbixkb3VibGVjaXJjbGU6ZGVuLHN0YWRpdW06aGVuLGhleGFnb246Slp0LGJsb2NrX2Fycm93OlpadCxyZWN0X2xlZnRfaW52X2Fycm93OmVlbixsZWFuX3JpZ2h0OnRlbixsZWFuX2xlZnQ6bmVuLHRyYXBlem9pZDpyZW4saW52X3RyYXBlem9pZDppZW4scmVjdF9yaWdodF9pbnZfYXJyb3c6c2VuLGN5bGluZGVyOmFlbixzdGFydDpwZW4sZW5kOihpLHMpPT57Y29uc3QgdT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpLGQ9dS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLHA9dS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBwLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLGQuYXR0cigiY2xhc3MiLCJzdGF0ZS1lbmQiKS5hdHRyKCJyIiw1KS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApLEtoKHMscCkscy5pbnRlcnNlY3Q9ZnVuY3Rpb24odil7cmV0dXJuIHloLmNpcmNsZShzLDcsdil9LHV9LG5vdGU6V1p0LHN1YnJvdXRpbmU6Z2VuLGZvcms6VFVlLGpvaW46VFVlLGNsYXNzX2JveDooaSxzKT0+e2NvbnN0IHU9cy5wYWRkaW5nLzIsZD00LHA9ODtsZXQgdjtzLmNsYXNzZXM/dj0ibm9kZSAiK3MuY2xhc3Nlczp2PSJub2RlIGRlZmF1bHQiO2NvbnN0IGI9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsdikuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpLHk9Yi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxUPWIuaW5zZXJ0KCJsaW5lIiksXz1iLmluc2VydCgibGluZSIpO2xldCBBPTAsUD1kO2NvbnN0IFI9Yi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7bGV0IEY9MDtjb25zdCBqPXMuY2xhc3NEYXRhLmFubm90YXRpb25zJiZzLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSxLPXMuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdPyLCqyIrcy5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0rIsK7IjoiIixlZT1SLm5vZGUoKS5hcHBlbmRDaGlsZCgkMihLLHMubGFiZWxTdHlsZSwhMCwhMCkpO2xldCBpZT1lZS5nZXRCQm94KCk7aWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IGRlPWVlLmNoaWxkcmVuWzBdLFg9SXIoZWUpO2llPWRlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFguYXR0cigid2lkdGgiLGllLndpZHRoKSxYLmF0dHIoImhlaWdodCIsaWUuaGVpZ2h0KX1zLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSYmKFArPWllLmhlaWdodCtkLEErPWllLndpZHRoKTtsZXQgb2U9cy5jbGFzc0RhdGEubGFiZWw7cy5jbGFzc0RhdGEudHlwZSE9PXZvaWQgMCYmcy5jbGFzc0RhdGEudHlwZSE9PSIiJiYocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscz9vZSs9IiZsdDsiK3MuY2xhc3NEYXRhLnR5cGUrIiZndDsiOm9lKz0iPCIrcy5jbGFzc0RhdGEudHlwZSsiPiIpO2NvbnN0IHBlPVIubm9kZSgpLmFwcGVuZENoaWxkKCQyKG9lLHMubGFiZWxTdHlsZSwhMCwhMCkpO0lyKHBlKS5hdHRyKCJjbGFzcyIsImNsYXNzVGl0bGUiKTtsZXQgYmU9cGUuZ2V0QkJveCgpO2lmKGYxKHF0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBkZT1wZS5jaGlsZHJlblswXSxYPUlyKHBlKTtiZT1kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxYLmF0dHIoIndpZHRoIixiZS53aWR0aCksWC5hdHRyKCJoZWlnaHQiLGJlLmhlaWdodCl9UCs9YmUuaGVpZ2h0K2QsYmUud2lkdGg+QSYmKEE9YmUud2lkdGgpO2NvbnN0IGFlPVtdO3MuY2xhc3NEYXRhLm1lbWJlcnMuZm9yRWFjaChkZT0+e2NvbnN0IFg9ZGUuZ2V0RGlzcGxheURldGFpbHMoKTtsZXQgZ2U9WC5kaXNwbGF5VGV4dDtxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYoZ2U9Z2UucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO2NvbnN0IFc9Ui5ub2RlKCkuYXBwZW5kQ2hpbGQoJDIoZ2UsWC5jc3NTdHlsZT9YLmNzc1N0eWxlOnMubGFiZWxTdHlsZSwhMCwhMCkpO2xldCB4ZT1XLmdldEJCb3goKTtpZihmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgVT1XLmNoaWxkcmVuWzBdLEZlPUlyKFcpO3hlPVUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRmUuYXR0cigid2lkdGgiLHhlLndpZHRoKSxGZS5hdHRyKCJoZWlnaHQiLHhlLmhlaWdodCl9eGUud2lkdGg+QSYmKEE9eGUud2lkdGgpLFArPXhlLmhlaWdodCtkLGFlLnB1c2goVyl9KSxQKz1wO2NvbnN0IG5lPVtdO2lmKHMuY2xhc3NEYXRhLm1ldGhvZHMuZm9yRWFjaChkZT0+e2NvbnN0IFg9ZGUuZ2V0RGlzcGxheURldGFpbHMoKTtsZXQgZ2U9WC5kaXNwbGF5VGV4dDtxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYoZ2U9Z2UucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO2NvbnN0IFc9Ui5ub2RlKCkuYXBwZW5kQ2hpbGQoJDIoZ2UsWC5jc3NTdHlsZT9YLmNzc1N0eWxlOnMubGFiZWxTdHlsZSwhMCwhMCkpO2xldCB4ZT1XLmdldEJCb3goKTtpZihmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgVT1XLmNoaWxkcmVuWzBdLEZlPUlyKFcpO3hlPVUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRmUuYXR0cigid2lkdGgiLHhlLndpZHRoKSxGZS5hdHRyKCJoZWlnaHQiLHhlLmhlaWdodCl9eGUud2lkdGg+QSYmKEE9eGUud2lkdGgpLFArPXhlLmhlaWdodCtkLG5lLnB1c2goVyl9KSxQKz1wLGope2xldCBkZT0oQS1pZS53aWR0aCkvMjtJcihlZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKygtMSpBLzIrZGUpKyIsICIrLTEqUC8yKyIpIiksRj1pZS5oZWlnaHQrZH1sZXQgc2U9KEEtYmUud2lkdGgpLzI7cmV0dXJuIElyKHBlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKkEvMitzZSkrIiwgIisoLTEqUC8yK0YpKyIpIiksRis9YmUuaGVpZ2h0K2QsVC5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLUEvMi11KS5hdHRyKCJ4MiIsQS8yK3UpLmF0dHIoInkxIiwtUC8yLXUrcCtGKS5hdHRyKCJ5MiIsLVAvMi11K3ArRiksRis9cCxhZS5mb3JFYWNoKGRlPT57SXIoZGUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistQS8yKyIsICIrKC0xKlAvMitGK3AvMikrIikiKTtjb25zdCBYPWRlPT1udWxsP3ZvaWQgMDpkZS5nZXRCQm94KCk7Ris9KChYPT1udWxsP3ZvaWQgMDpYLmhlaWdodCk/PzApK2R9KSxGKz1wLF8uYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1BLzItdSkuYXR0cigieDIiLEEvMit1KS5hdHRyKCJ5MSIsLVAvMi11K3ArRikuYXR0cigieTIiLC1QLzItdStwK0YpLEYrPXAsbmUuZm9yRWFjaChkZT0+e0lyKGRlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLUEvMisiLCAiKygtMSpQLzIrRikrIikiKTtjb25zdCBYPWRlPT1udWxsP3ZvaWQgMDpkZS5nZXRCQm94KCk7Ris9KChYPT1udWxsP3ZvaWQgMDpYLmhlaWdodCk/PzApK2R9KSx5LmF0dHIoInN0eWxlIixzLnN0eWxlKS5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigieCIsLUEvMi11KS5hdHRyKCJ5IiwtKFAvMiktdSkuYXR0cigid2lkdGgiLEErcy5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLFArcy5wYWRkaW5nKSxLaChzLHkpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKGRlKXtyZXR1cm4geWgucmVjdChzLGRlKX0sYn19O2xldCBWRD17fTtjb25zdCB0Sj1hc3luYyhpLHMsdSk9PntsZXQgZCxwO2lmKHMubGluayl7bGV0IHY7cXQoKS5zZWN1cml0eUxldmVsPT09InNhbmRib3giP3Y9Il90b3AiOnMubGlua1RhcmdldCYmKHY9cy5saW5rVGFyZ2V0fHwiX2JsYW5rIiksZD1pLmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixzLmxpbmspLmF0dHIoInRhcmdldCIsdikscD1hd2FpdCBDVWVbcy5zaGFwZV0oZCxzLHUpfWVsc2UgcD1hd2FpdCBDVWVbcy5zaGFwZV0oaSxzLHUpLGQ9cDtyZXR1cm4gcy50b29sdGlwJiZwLmF0dHIoInRpdGxlIixzLnRvb2x0aXApLHMuY2xhc3MmJnAuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitzLmNsYXNzKSxkLmF0dHIoImRhdGEtbm9kZSIsInRydWUiKSxkLmF0dHIoImRhdGEtaWQiLHMuaWQpLFZEW3MuaWRdPWQscy5oYXZlQ2FsbGJhY2smJlZEW3MuaWRdLmF0dHIoImNsYXNzIixWRFtzLmlkXS5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIiksZH0sYmVuPShpLHMpPT57VkRbcy5pZF09aX0sbWVuPSgpPT57VkQ9e319LCRtZT1pPT57Y29uc3Qgcz1WRFtpLmlkXTtYZS50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLGkuZGlmZixpLCJ0cmFuc2xhdGUoIisoaS54LWkud2lkdGgvMi01KSsiLCAiK2kud2lkdGgvMisiKSIpO2NvbnN0IHU9OCxkPWkuZGlmZnx8MDtyZXR1cm4gaS5jbHVzdGVyTm9kZT9zLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhpLngrZC1pLndpZHRoLzIpKyIsICIrKGkueS1pLmhlaWdodC8yLXUpKyIpIik6cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLngrIiwgIitpLnkrIikiKSxkfSxuSj0oe2Zsb3djaGFydDppfSk9Pnt2YXIgcCx2O2NvbnN0IHM9KChwPWk9PW51bGw/dm9pZCAwOmkuc3ViR3JhcGhUaXRsZU1hcmdpbik9PW51bGw/dm9pZCAwOnAudG9wKT8/MCx1PSgodj1pPT1udWxsP3ZvaWQgMDppLnN1YkdyYXBoVGl0bGVNYXJnaW4pPT1udWxsP3ZvaWQgMDp2LmJvdHRvbSk/PzAsZD1zK3U7cmV0dXJue3N1YkdyYXBoVGl0bGVUb3BNYXJnaW46cyxzdWJHcmFwaFRpdGxlQm90dG9tTWFyZ2luOnUsc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luOmR9fSx2ZW49e3JlY3Q6KGkscyk9PntYZS5pbmZvKCJDcmVhdGluZyBzdWJncmFwaCByZWN0IGZvciAiLHMuaWQscyk7Y29uc3QgdT1xdCgpLGQ9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIiKyhzLmNsYXNzPyIgIitzLmNsYXNzOiIiKSkuYXR0cigiaWQiLHMuaWQpLHA9ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx2PWYxKHUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpLGI9ZC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSx5PXMubGFiZWxUeXBlPT09Im1hcmtkb3duIj9KUShiLHMubGFiZWxUZXh0LHtzdHlsZTpzLmxhYmVsU3R5bGUsdXNlSHRtbExhYmVsczp2fSk6Yi5ub2RlKCkuYXBwZW5kQ2hpbGQoJDIocy5sYWJlbFRleHQscy5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpO2xldCBUPXkuZ2V0QkJveCgpO2lmKGYxKHUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBqPXkuY2hpbGRyZW5bMF0sSz1Jcih5KTtUPWouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSy5hdHRyKCJ3aWR0aCIsVC53aWR0aCksSy5hdHRyKCJoZWlnaHQiLFQuaGVpZ2h0KX1jb25zdCBfPTAqcy5wYWRkaW5nLEE9Xy8yLFA9cy53aWR0aDw9VC53aWR0aCtfP1Qud2lkdGgrXzpzLndpZHRoO3Mud2lkdGg8PVQud2lkdGgrXz9zLmRpZmY9KFQud2lkdGgtcy53aWR0aCkvMi1zLnBhZGRpbmcvMjpzLmRpZmY9LXMucGFkZGluZy8yLFhlLnRyYWNlKCJEYXRhICIscyxKU09OLnN0cmluZ2lmeShzKSkscC5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJ4IixzLngtUC8yKS5hdHRyKCJ5IixzLnktcy5oZWlnaHQvMi1BKS5hdHRyKCJ3aWR0aCIsUCkuYXR0cigiaGVpZ2h0IixzLmhlaWdodCtfKTtjb25zdHtzdWJHcmFwaFRpdGxlVG9wTWFyZ2luOlJ9PW5KKHUpO3Y/Yi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzLngtVC53aWR0aC8yfSwgJHtzLnktcy5oZWlnaHQvMitSfSlgKTpiLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3MueH0sICR7cy55LXMuaGVpZ2h0LzIrUn0pYCk7Y29uc3QgRj1wLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIHMud2lkdGg9Ri53aWR0aCxzLmhlaWdodD1GLmhlaWdodCxzLmludGVyc2VjdD1mdW5jdGlvbihqKXtyZXR1cm4gRFIocyxqKX0sZH0scm91bmRlZFdpdGhUaXRsZTooaSxzKT0+e2NvbnN0IHU9cXQoKSxkPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLHMuY2xhc3NlcykuYXR0cigiaWQiLHMuaWQpLHA9ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx2PWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyLWxhYmVsIiksYj1kLmFwcGVuZCgicmVjdCIpLHk9di5ub2RlKCkuYXBwZW5kQ2hpbGQoJDIocy5sYWJlbFRleHQscy5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpO2xldCBUPXkuZ2V0QkJveCgpO2lmKGYxKHUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBqPXkuY2hpbGRyZW5bMF0sSz1Jcih5KTtUPWouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSy5hdHRyKCJ3aWR0aCIsVC53aWR0aCksSy5hdHRyKCJoZWlnaHQiLFQuaGVpZ2h0KX1UPXkuZ2V0QkJveCgpO2NvbnN0IF89MCpzLnBhZGRpbmcsQT1fLzIsUD1zLndpZHRoPD1ULndpZHRoK3MucGFkZGluZz9ULndpZHRoK3MucGFkZGluZzpzLndpZHRoO3Mud2lkdGg8PVQud2lkdGgrcy5wYWRkaW5nP3MuZGlmZj0oVC53aWR0aCtzLnBhZGRpbmcqMC1zLndpZHRoKS8yOnMuZGlmZj0tcy5wYWRkaW5nLzIscC5hdHRyKCJjbGFzcyIsIm91dGVyIikuYXR0cigieCIscy54LVAvMi1BKS5hdHRyKCJ5IixzLnktcy5oZWlnaHQvMi1BKS5hdHRyKCJ3aWR0aCIsUCtfKS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0K18pLGIuYXR0cigiY2xhc3MiLCJpbm5lciIpLmF0dHIoIngiLHMueC1QLzItQSkuYXR0cigieSIscy55LXMuaGVpZ2h0LzItQStULmhlaWdodC0xKS5hdHRyKCJ3aWR0aCIsUCtfKS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0K18tVC5oZWlnaHQtMyk7Y29uc3R7c3ViR3JhcGhUaXRsZVRvcE1hcmdpbjpSfT1uSih1KTt2LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3MueC1ULndpZHRoLzJ9LCAke3MueS1zLmhlaWdodC8yLXMucGFkZGluZy8zKyhmMSh1LmZsb3djaGFydC5odG1sTGFiZWxzKT81OjMpK1J9KWApO2NvbnN0IEY9cC5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBzLmhlaWdodD1GLmhlaWdodCxzLmludGVyc2VjdD1mdW5jdGlvbihqKXtyZXR1cm4gRFIocyxqKX0sZH0sbm90ZUdyb3VwOihpLHMpPT57Y29uc3QgdT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm90ZS1jbHVzdGVyIikuYXR0cigiaWQiLHMuaWQpLGQ9dS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxwPTAqcy5wYWRkaW5nLHY9cC8yO2QuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJ4IixzLngtcy53aWR0aC8yLXYpLmF0dHIoInkiLHMueS1zLmhlaWdodC8yLXYpLmF0dHIoIndpZHRoIixzLndpZHRoK3ApLmF0dHIoImhlaWdodCIscy5oZWlnaHQrcCkuYXR0cigiZmlsbCIsIm5vbmUiKTtjb25zdCBiPWQubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gcy53aWR0aD1iLndpZHRoLHMuaGVpZ2h0PWIuaGVpZ2h0LHMuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBEUihzLHkpfSx1fSxkaXZpZGVyOihpLHMpPT57Y29uc3QgdT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixzLmNsYXNzZXMpLmF0dHIoImlkIixzLmlkKSxkPXUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikscD0wKnMucGFkZGluZyx2PXAvMjtkLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngiLHMueC1zLndpZHRoLzItdikuYXR0cigieSIscy55LXMuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixzLndpZHRoK3ApLmF0dHIoImhlaWdodCIscy5oZWlnaHQrcCk7Y29uc3QgYj1kLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIHMud2lkdGg9Yi53aWR0aCxzLmhlaWdodD1iLmhlaWdodCxzLmRpZmY9LXMucGFkZGluZy8yLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBEUihzLHkpfSx1fX07bGV0IFNVZT17fTtjb25zdCB3ZW49KGkscyk9PntYZS50cmFjZSgiSW5zZXJ0aW5nIGNsdXN0ZXIiKTtjb25zdCB1PXMuc2hhcGV8fCJyZWN0IjtTVWVbcy5pZF09dmVuW3VdKGkscyl9LHllbj0oKT0+e1NVZT17fX0sUDk9e2FnZ3JlZ2F0aW9uOjE4LGV4dGVuc2lvbjoxOCxjb21wb3NpdGlvbjoxOCxkZXBlbmRlbmN5OjYsbG9sbGlwb3A6MTMuNSxhcnJvd19wb2ludDo1LjN9O2Z1bmN0aW9uIHJKKGkscyl7aWYoaT09PXZvaWQgMHx8cz09PXZvaWQgMClyZXR1cm57YW5nbGU6MCxkZWx0YVg6MCxkZWx0YVk6MH07aT1pSihpKSxzPWlKKHMpO2NvbnN0W3UsZF09W2kueCxpLnldLFtwLHZdPVtzLngscy55XSxiPXAtdSx5PXYtZDtyZXR1cm57YW5nbGU6TWF0aC5hdGFuKHkvYiksZGVsdGFYOmIsZGVsdGFZOnl9fWNvbnN0IGlKPWk9PkFycmF5LmlzQXJyYXkoaSk/e3g6aVswXSx5OmlbMV19OmksX1VlPWk9Pih7eDpmdW5jdGlvbihzLHUsZCl7bGV0IHA9MDtpZih1PT09MCYmT2JqZWN0Lmhhc093bihQOSxpLmFycm93VHlwZVN0YXJ0KSl7Y29uc3R7YW5nbGU6dixkZWx0YVg6Yn09ckooZFswXSxkWzFdKTtwPVA5W2kuYXJyb3dUeXBlU3RhcnRdKk1hdGguY29zKHYpKihiPj0wPzE6LTEpfWVsc2UgaWYodT09PWQubGVuZ3RoLTEmJk9iamVjdC5oYXNPd24oUDksaS5hcnJvd1R5cGVFbmQpKXtjb25zdHthbmdsZTp2LGRlbHRhWDpifT1ySihkW2QubGVuZ3RoLTFdLGRbZC5sZW5ndGgtMl0pO3A9UDlbaS5hcnJvd1R5cGVFbmRdKk1hdGguY29zKHYpKihiPj0wPzE6LTEpfXJldHVybiBpSihzKS54K3B9LHk6ZnVuY3Rpb24ocyx1LGQpe2xldCBwPTA7aWYodT09PTAmJk9iamVjdC5oYXNPd24oUDksaS5hcnJvd1R5cGVTdGFydCkpe2NvbnN0e2FuZ2xlOnYsZGVsdGFZOmJ9PXJKKGRbMF0sZFsxXSk7cD1QOVtpLmFycm93VHlwZVN0YXJ0XSpNYXRoLmFicyhNYXRoLnNpbih2KSkqKGI+PTA/MTotMSl9ZWxzZSBpZih1PT09ZC5sZW5ndGgtMSYmT2JqZWN0Lmhhc093bihQOSxpLmFycm93VHlwZUVuZCkpe2NvbnN0e2FuZ2xlOnYsZGVsdGFZOmJ9PXJKKGRbZC5sZW5ndGgtMV0sZFtkLmxlbmd0aC0yXSk7cD1QOVtpLmFycm93VHlwZUVuZF0qTWF0aC5hYnMoTWF0aC5zaW4odikpKihiPj0wPzE6LTEpfXJldHVybiBpSihzKS55K3B9fSksQVVlPShpLHMsdSxkLHApPT57cy5hcnJvd1R5cGVTdGFydCYmTFVlKGksInN0YXJ0IixzLmFycm93VHlwZVN0YXJ0LHUsZCxwKSxzLmFycm93VHlwZUVuZCYmTFVlKGksImVuZCIscy5hcnJvd1R5cGVFbmQsdSxkLHApfSx4ZW49e2Fycm93X2Nyb3NzOiJjcm9zcyIsYXJyb3dfcG9pbnQ6InBvaW50IixhcnJvd19iYXJiOiJiYXJiIixhcnJvd19jaXJjbGU6ImNpcmNsZSIsYWdncmVnYXRpb246ImFnZ3JlZ2F0aW9uIixleHRlbnNpb246ImV4dGVuc2lvbiIsY29tcG9zaXRpb246ImNvbXBvc2l0aW9uIixkZXBlbmRlbmN5OiJkZXBlbmRlbmN5Iixsb2xsaXBvcDoibG9sbGlwb3AifSxMVWU9KGkscyx1LGQscCx2KT0+e2NvbnN0IGI9eGVuW3VdO2lmKCFiKXtYZS53YXJuKGBVbmtub3duIGFycm93IHR5cGU6ICR7dX1gKTtyZXR1cm59Y29uc3QgeT1zPT09InN0YXJ0Ij8iU3RhcnQiOiJFbmQiO2kuYXR0cihgbWFya2VyLSR7c31gLGB1cmwoJHtkfSMke3B9XyR7dn0tJHtifSR7eX0pYCl9O2xldCBzSj17fSxWZD17fTtjb25zdCBrZW49KCk9PntzSj17fSxWZD17fX0sem1lPShpLHMpPT57Y29uc3QgdT1mMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSxkPXMubGFiZWxUeXBlPT09Im1hcmtkb3duIj9KUShpLHMubGFiZWwse3N0eWxlOnMubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOnUsYWRkU3ZnQmFja2dyb3VuZDohMH0pOiQyKHMubGFiZWwscy5sYWJlbFN0eWxlKSxwPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSx2PXAuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO3Yubm9kZSgpLmFwcGVuZENoaWxkKGQpO2xldCBiPWQuZ2V0QkJveCgpO2lmKHUpe2NvbnN0IFQ9ZC5jaGlsZHJlblswXSxfPUlyKGQpO2I9VC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxfLmF0dHIoIndpZHRoIixiLndpZHRoKSxfLmF0dHIoImhlaWdodCIsYi5oZWlnaHQpfXYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWIud2lkdGgvMisiLCAiKy1iLmhlaWdodC8yKyIpIiksc0pbcy5pZF09cCxzLndpZHRoPWIud2lkdGgscy5oZWlnaHQ9Yi5oZWlnaHQ7bGV0IHk7aWYocy5zdGFydExhYmVsTGVmdCl7Y29uc3QgVD0kMihzLnN0YXJ0TGFiZWxMZWZ0LHMubGFiZWxTdHlsZSksXz1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLEE9Xy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7eT1BLm5vZGUoKS5hcHBlbmRDaGlsZChUKTtjb25zdCBQPVQuZ2V0QkJveCgpO0EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVAud2lkdGgvMisiLCAiKy1QLmhlaWdodC8yKyIpIiksVmRbcy5pZF18fChWZFtzLmlkXT17fSksVmRbcy5pZF0uc3RhcnRMZWZ0PV8sYUooeSxzLnN0YXJ0TGFiZWxMZWZ0KX1pZihzLnN0YXJ0TGFiZWxSaWdodCl7Y29uc3QgVD0kMihzLnN0YXJ0TGFiZWxSaWdodCxzLmxhYmVsU3R5bGUpLF89aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxBPV8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO3k9Xy5ub2RlKCkuYXBwZW5kQ2hpbGQoVCksQS5ub2RlKCkuYXBwZW5kQ2hpbGQoVCk7Y29uc3QgUD1ULmdldEJCb3goKTtBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1QLndpZHRoLzIrIiwgIistUC5oZWlnaHQvMisiKSIpLFZkW3MuaWRdfHwoVmRbcy5pZF09e30pLFZkW3MuaWRdLnN0YXJ0UmlnaHQ9XyxhSih5LHMuc3RhcnRMYWJlbFJpZ2h0KX1pZihzLmVuZExhYmVsTGVmdCl7Y29uc3QgVD0kMihzLmVuZExhYmVsTGVmdCxzLmxhYmVsU3R5bGUpLF89aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxBPV8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO3k9QS5ub2RlKCkuYXBwZW5kQ2hpbGQoVCk7Y29uc3QgUD1ULmdldEJCb3goKTtBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1QLndpZHRoLzIrIiwgIistUC5oZWlnaHQvMisiKSIpLF8ubm9kZSgpLmFwcGVuZENoaWxkKFQpLFZkW3MuaWRdfHwoVmRbcy5pZF09e30pLFZkW3MuaWRdLmVuZExlZnQ9XyxhSih5LHMuZW5kTGFiZWxMZWZ0KX1pZihzLmVuZExhYmVsUmlnaHQpe2NvbnN0IFQ9JDIocy5lbmRMYWJlbFJpZ2h0LHMubGFiZWxTdHlsZSksXz1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLEE9Xy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7eT1BLm5vZGUoKS5hcHBlbmRDaGlsZChUKTtjb25zdCBQPVQuZ2V0QkJveCgpO0EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVAud2lkdGgvMisiLCAiKy1QLmhlaWdodC8yKyIpIiksXy5ub2RlKCkuYXBwZW5kQ2hpbGQoVCksVmRbcy5pZF18fChWZFtzLmlkXT17fSksVmRbcy5pZF0uZW5kUmlnaHQ9XyxhSih5LHMuZW5kTGFiZWxSaWdodCl9cmV0dXJuIGR9O2Z1bmN0aW9uIGFKKGkscyl7cXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmaSYmKGkuc3R5bGUud2lkdGg9cy5sZW5ndGgqOSsicHgiLGkuc3R5bGUuaGVpZ2h0PSIxMnB4Iil9Y29uc3QgTVVlPShpLHMpPT57WGUuZGVidWcoIk1vdmluZyBsYWJlbCBhYmM4OCAiLGkuaWQsaS5sYWJlbCxzSltpLmlkXSxzKTtsZXQgdT1zLnVwZGF0ZWRQYXRoP3MudXBkYXRlZFBhdGg6cy5vcmlnaW5hbFBhdGg7Y29uc3QgZD1xdCgpLHtzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW46cH09bkooZCk7aWYoaS5sYWJlbCl7Y29uc3Qgdj1zSltpLmlkXTtsZXQgYj1pLngseT1pLnk7aWYodSl7Y29uc3QgVD1Bby5jYWxjTGFiZWxQb3NpdGlvbih1KTtYZS5kZWJ1ZygiTW92aW5nIGxhYmVsICIraS5sYWJlbCsiIGZyb20gKCIsYiwiLCIseSwiKSB0byAoIixULngsIiwiLFQueSwiKSBhYmM4OCIpLHMudXBkYXRlZFBhdGgmJihiPVQueCx5PVQueSl9di5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtifSwgJHt5K3AvMn0pYCl9aWYoaS5zdGFydExhYmVsTGVmdCl7Y29uc3Qgdj1WZFtpLmlkXS5zdGFydExlZnQ7bGV0IGI9aS54LHk9aS55O2lmKHUpe2NvbnN0IFQ9QW8uY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihpLmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X2xlZnQiLHUpO2I9VC54LHk9VC55fXYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7Yn0sICR7eX0pYCl9aWYoaS5zdGFydExhYmVsUmlnaHQpe2NvbnN0IHY9VmRbaS5pZF0uc3RhcnRSaWdodDtsZXQgYj1pLngseT1pLnk7aWYodSl7Y29uc3QgVD1Bby5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfcmlnaHQiLHUpO2I9VC54LHk9VC55fXYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7Yn0sICR7eX0pYCl9aWYoaS5lbmRMYWJlbExlZnQpe2NvbnN0IHY9VmRbaS5pZF0uZW5kTGVmdDtsZXQgYj1pLngseT1pLnk7aWYodSl7Y29uc3QgVD1Bby5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9sZWZ0Iix1KTtiPVQueCx5PVQueX12LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2J9LCAke3l9KWApfWlmKGkuZW5kTGFiZWxSaWdodCl7Y29uc3Qgdj1WZFtpLmlkXS5lbmRSaWdodDtsZXQgYj1pLngseT1pLnk7aWYodSl7Y29uc3QgVD1Bby5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9yaWdodCIsdSk7Yj1ULngseT1ULnl9di5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtifSwgJHt5fSlgKX19LEVlbj0oaSxzKT0+e2NvbnN0IHU9aS54LGQ9aS55LHA9TWF0aC5hYnMocy54LXUpLHY9TWF0aC5hYnMocy55LWQpLGI9aS53aWR0aC8yLHk9aS5oZWlnaHQvMjtyZXR1cm4gcD49Ynx8dj49eX0sVGVuPShpLHMsdSk9PntYZS5kZWJ1ZyhgaW50ZXJzZWN0aW9uIGNhbGMgYWJjODk6CiAgb3V0c2lkZVBvaW50OiAke0pTT04uc3RyaW5naWZ5KHMpfQogIGluc2lkZVBvaW50IDogJHtKU09OLnN0cmluZ2lmeSh1KX0KICBub2RlICAgICAgICA6IHg6JHtpLnh9IHk6JHtpLnl9IHc6JHtpLndpZHRofSBoOiR7aS5oZWlnaHR9YCk7Y29uc3QgZD1pLngscD1pLnksdj1NYXRoLmFicyhkLXUueCksYj1pLndpZHRoLzI7bGV0IHk9dS54PHMueD9iLXY6Yit2O2NvbnN0IFQ9aS5oZWlnaHQvMixfPU1hdGguYWJzKHMueS11LnkpLEE9TWF0aC5hYnMocy54LXUueCk7aWYoTWF0aC5hYnMocC1zLnkpKmI+TWF0aC5hYnMoZC1zLngpKlQpe2xldCBQPXUueTxzLnk/cy55LVQtcDpwLVQtcy55O3k9QSpQL187Y29uc3QgUj17eDp1Lng8cy54P3UueCt5OnUueC1BK3kseTp1Lnk8cy55P3UueStfLVA6dS55LV8rUH07cmV0dXJuIHk9PT0wJiYoUi54PXMueCxSLnk9cy55KSxBPT09MCYmKFIueD1zLngpLF89PT0wJiYoUi55PXMueSksWGUuZGVidWcoYGFiYzg5IHRvcHAvYm90dCBjYWxjLCBRICR7X30sIHEgJHtQfSwgUiAke0F9LCByICR7eX1gLFIpLFJ9ZWxzZXt1Lng8cy54P3k9cy54LWItZDp5PWQtYi1zLng7bGV0IFA9Xyp5L0EsUj11Lng8cy54P3UueCtBLXk6dS54LUEreSxGPXUueTxzLnk/dS55K1A6dS55LVA7cmV0dXJuIFhlLmRlYnVnKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7X30sIHEgJHtQfSwgUiAke0F9LCByICR7eX1gLHtfeDpSLF95OkZ9KSx5PT09MCYmKFI9cy54LEY9cy55KSxBPT09MCYmKFI9cy54KSxfPT09MCYmKEY9cy55KSx7eDpSLHk6Rn19fSxEVWU9KGkscyk9PntYZS5kZWJ1ZygiYWJjODggY3V0UGF0aEF0SW50ZXJzZWN0IixpLHMpO2xldCB1PVtdLGQ9aVswXSxwPSExO3JldHVybiBpLmZvckVhY2godj0+e2lmKCFFZW4ocyx2KSYmIXApe2NvbnN0IGI9VGVuKHMsZCx2KTtsZXQgeT0hMTt1LmZvckVhY2goVD0+e3k9eXx8VC54PT09Yi54JiZULnk9PT1iLnl9KSx1LnNvbWUoVD0+VC54PT09Yi54JiZULnk9PT1iLnkpfHx1LnB1c2goYikscD0hMH1lbHNlIGQ9dixwfHx1LnB1c2godil9KSx1fSxJVWU9ZnVuY3Rpb24oaSxzLHUsZCxwLHYsYil7bGV0IHk9dS5wb2ludHM7WGUuZGVidWcoImFiYzg4IEluc2VydEVkZ2U6IGVkZ2U9Iix1LCJlPSIscyk7bGV0IFQ9ITE7Y29uc3QgXz12Lm5vZGUocy52KTt2YXIgQT12Lm5vZGUocy53KTtBIT1udWxsJiZBLmludGVyc2VjdCYmKF8hPW51bGwmJl8uaW50ZXJzZWN0KSYmKHk9eS5zbGljZSgxLHUucG9pbnRzLmxlbmd0aC0xKSx5LnVuc2hpZnQoXy5pbnRlcnNlY3QoeVswXSkpLHkucHVzaChBLmludGVyc2VjdCh5W3kubGVuZ3RoLTFdKSkpLHUudG9DbHVzdGVyJiYoWGUuZGVidWcoInRvIGNsdXN0ZXIgYWJjODgiLGRbdS50b0NsdXN0ZXJdKSx5PURVZSh1LnBvaW50cyxkW3UudG9DbHVzdGVyXS5ub2RlKSxUPSEwKSx1LmZyb21DbHVzdGVyJiYoWGUuZGVidWcoImZyb20gY2x1c3RlciBhYmM4OCIsZFt1LmZyb21DbHVzdGVyXSkseT1EVWUoeS5yZXZlcnNlKCksZFt1LmZyb21DbHVzdGVyXS5ub2RlKS5yZXZlcnNlKCksVD0hMCk7Y29uc3QgUD15LmZpbHRlcihiZT0+IU51bWJlci5pc05hTihiZS55KSk7bGV0IFI9RkY7dS5jdXJ2ZSYmKHA9PT0iZ3JhcGgifHxwPT09ImZsb3djaGFydCIpJiYoUj11LmN1cnZlKTtjb25zdHt4OkYseTpqfT1fVWUodSksSz1rNygpLngoRikueShqKS5jdXJ2ZShSKTtsZXQgZWU7c3dpdGNoKHUudGhpY2tuZXNzKXtjYXNlIm5vcm1hbCI6ZWU9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCI7YnJlYWs7Y2FzZSJ0aGljayI6ZWU9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztjYXNlImludmlzaWJsZSI6ZWU9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztkZWZhdWx0OmVlPSIifXN3aXRjaCh1LnBhdHRlcm4pe2Nhc2Uic29saWQiOmVlKz0iIGVkZ2UtcGF0dGVybi1zb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmVlKz0iIGVkZ2UtcGF0dGVybi1kb3R0ZWQiO2JyZWFrO2Nhc2UiZGFzaGVkIjplZSs9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIjticmVha31jb25zdCBpZT1pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLEsoUCkpLmF0dHIoImlkIix1LmlkKS5hdHRyKCJjbGFzcyIsIiAiK2VlKyh1LmNsYXNzZXM/IiAiK3UuY2xhc3NlczoiIikpLmF0dHIoInN0eWxlIix1LnN0eWxlKTtsZXQgb2U9IiI7KHF0KCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fHF0KCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihvZT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxvZT1vZS5yZXBsYWNlKC9cKC9nLCJcXCgiKSxvZT1vZS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksQVVlKGllLHUsb2UsYixwKTtsZXQgcGU9e307cmV0dXJuIFQmJihwZS51cGRhdGVkUGF0aD15KSxwZS5vcmlnaW5hbFBhdGg9dS5wb2ludHMscGV9LE9VZT1hc3luYyhpLHMsdSxkLHAsdik9PntYZS5pbmZvKCJHcmFwaCBpbiByZWN1cnNpdmUgcmVuZGVyOiBYWFgiLHE3KHMpLHApO2NvbnN0IGI9cy5ncmFwaCgpLnJhbmtkaXI7WGUudHJhY2UoIkRpciBpbiByZWN1cnNpdmUgcmVuZGVyIC0gZGlyOiIsYik7Y29uc3QgeT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwicm9vdCIpO3Mubm9kZXMoKT9YZS5pbmZvKCJSZWN1cnNpdmUgcmVuZGVyIFhYWCIscy5ub2RlcygpKTpYZS5pbmZvKCJObyBub2RlcyBmb3VuZCBmb3IiLHMpLHMuZWRnZXMoKS5sZW5ndGg+MCYmWGUudHJhY2UoIlJlY3Vyc2l2ZSBlZGdlcyIscy5lZGdlKHMuZWRnZXMoKVswXSkpO2NvbnN0IFQ9eS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXJzIiksXz15Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVBhdGhzIiksQT15Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVscyIpLFA9eS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGVzIik7YXdhaXQgUHJvbWlzZS5hbGwocy5ub2RlcygpLm1hcChhc3luYyBmdW5jdGlvbihqKXtjb25zdCBLPXMubm9kZShqKTtpZihwIT09dm9pZCAwKXtjb25zdCBlZT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHAuY2x1c3RlckRhdGEpKTtYZS5pbmZvKCJTZXR0aW5nIGRhdGEgZm9yIGNsdXN0ZXIgWFhYICgiLGosIikgIixlZSxwKSxzLnNldE5vZGUocC5pZCxlZSkscy5wYXJlbnQoail8fChYZS50cmFjZSgiU2V0dGluZyBwYXJlbnQiLGoscC5pZCkscy5zZXRQYXJlbnQoaixwLmlkLGVlKSl9aWYoWGUuaW5mbygiKEluc2VydCkgTm9kZSBYWFgiK2orIjogIitKU09OLnN0cmluZ2lmeShzLm5vZGUoaikpKSxLJiZLLmNsdXN0ZXJOb2RlKXtYZS5pbmZvKCJDbHVzdGVyIGlkZW50aWZpZWQiLGosSy53aWR0aCxzLm5vZGUoaikpO2NvbnN0IGVlPWF3YWl0IE9VZShQLEsuZ3JhcGgsdSxkLHMubm9kZShqKSx2KSxpZT1lZS5lbGVtO0toKEssaWUpLEsuZGlmZj1lZS5kaWZmfHwwLFhlLmluZm8oIk5vZGUgYm91bmRzIChhYmMxMjMpIixqLEssSy53aWR0aCxLLngsSy55KSxiZW4oaWUsSyksWGUud2FybigiUmVjdXJzaXZlIHJlbmRlciBjb21wbGV0ZSAiLGllLEspfWVsc2Ugcy5jaGlsZHJlbihqKS5sZW5ndGg+MD8oWGUuaW5mbygiQ2x1c3RlciAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGggWFhYIixqLEsuaWQsSyxzKSxYZS5pbmZvKE1SKEsuaWQscykpLE1vW0suaWRdPXtpZDpNUihLLmlkLHMpLG5vZGU6S30pOihYZS5pbmZvKCJOb2RlIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCIsaixLLmlkLEspLGF3YWl0IHRKKFAscy5ub2RlKGopLGIpKX0pKSxzLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtjb25zdCBLPXMuZWRnZShqLnYsai53LGoubmFtZSk7WGUuaW5mbygiRWRnZSAiK2oudisiIC0+ICIrai53KyI6ICIrSlNPTi5zdHJpbmdpZnkoaikpLFhlLmluZm8oIkVkZ2UgIitqLnYrIiAtPiAiK2oudysiOiAiLGosIiAiLEpTT04uc3RyaW5naWZ5KHMuZWRnZShqKSkpLFhlLmluZm8oIkZpeCIsTW8sImlkczoiLGoudixqLncsIlRyYW5zbGF0aW5nOiAiLE1vW2oudl0sTW9bai53XSksem1lKEEsSyl9KSxzLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtYZS5pbmZvKCJFZGdlICIrai52KyIgLT4gIitqLncrIjogIitKU09OLnN0cmluZ2lmeShqKSl9KSxYZS5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxYZS5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMiKSxYZS5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxYZS5pbmZvKHMpLHFEKHMpLFhlLmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLHE3KHMpKTtsZXQgUj0wO2NvbnN0e3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjpGfT1uSih2KTtyZXR1cm4gSFp0KHMpLmZvckVhY2goZnVuY3Rpb24oail7Y29uc3QgSz1zLm5vZGUoaik7WGUuaW5mbygiUG9zaXRpb24gIitqKyI6ICIrSlNPTi5zdHJpbmdpZnkocy5ub2RlKGopKSksWGUuaW5mbygiUG9zaXRpb24gIitqKyI6ICgiK0sueCwiLCIrSy55LCIpIHdpZHRoOiAiLEsud2lkdGgsIiBoZWlnaHQ6ICIsSy5oZWlnaHQpLEsmJksuY2x1c3Rlck5vZGU/KEsueSs9RiwkbWUoSykpOnMuY2hpbGRyZW4oaikubGVuZ3RoPjA/KEsuaGVpZ2h0Kz1GLHdlbihULEspLE1vW0suaWRdLm5vZGU9Syk6KEsueSs9Ri8yLCRtZShLKSl9KSxzLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtjb25zdCBLPXMuZWRnZShqKTtYZS5pbmZvKCJFZGdlICIrai52KyIgLT4gIitqLncrIjogIitKU09OLnN0cmluZ2lmeShLKSxLKSxLLnBvaW50cy5mb3JFYWNoKGllPT5pZS55Kz1GLzIpO2NvbnN0IGVlPUlVZShfLGosSyxNbyx1LHMsZCk7TVVlKEssZWUpfSkscy5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oail7Y29uc3QgSz1zLm5vZGUoaik7WGUuaW5mbyhqLEsudHlwZSxLLmRpZmYpLEsudHlwZT09PSJncm91cCImJihSPUsuZGlmZil9KSx7ZWxlbTp5LGRpZmY6Un19LHFtZT1hc3luYyhpLHMsdSxkLHApPT57U21lKGksdSxkLHApLG1lbigpLGtlbigpLHllbigpLCRadCgpLFhlLndhcm4oIkdyYXBoIGF0IGZpcnN0OiIsSlNPTi5zdHJpbmdpZnkocTcocykpKSxxWnQocyksWGUud2FybigiR3JhcGggYWZ0ZXI6IixKU09OLnN0cmluZ2lmeShxNyhzKSkpO2NvbnN0IHY9cXQoKTthd2FpdCBPVWUoaSxzLGQscCx2b2lkIDAsdil9LE5VZT17fSxDZW49ZnVuY3Rpb24oaSl7Y29uc3Qgcz1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgdSBvZiBzKU5VZVt1XT1pW3VdfSxQVWU9YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCxwLHYpe2NvbnN0IGI9ZC5zZWxlY3QoYFtpZD0iJHt1fSJdYCkseT1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgVCBvZiB5KXtjb25zdCBfPWlbVF07bGV0IEE9ImRlZmF1bHQiO18uY2xhc3Nlcy5sZW5ndGg+MCYmKEE9Xy5jbGFzc2VzLmpvaW4oIiAiKSksQT1BKyIgZmxvd2NoYXJ0LWxhYmVsIjtjb25zdCBQPW9tKF8uc3R5bGVzKTtsZXQgUj1fLnRleHQhPT12b2lkIDA/Xy50ZXh0Ol8uaWQsRjtpZihYZS5pbmZvKCJ2ZXJ0ZXgiLF8sXy5sYWJlbFR5cGUpLF8ubGFiZWxUeXBlPT09Im1hcmtkb3duIilYZS5pbmZvKCJ2ZXJ0ZXgiLF8sXy5sYWJlbFR5cGUpO2Vsc2UgaWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpRj12bWUoYix7bGFiZWw6Un0pLm5vZGUoKSxGLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoRik7ZWxzZXtjb25zdCBpZT1wLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7aWUuc2V0QXR0cmlidXRlKCJzdHlsZSIsUC5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2NvbnN0IG9lPVIuc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpO2Zvcihjb25zdCBwZSBvZiBvZSl7Y29uc3QgYmU9cC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtiZS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxiZS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksYmUuc2V0QXR0cmlidXRlKCJ4IiwiMSIpLGJlLnRleHRDb250ZW50PXBlLGllLmFwcGVuZENoaWxkKGJlKX1GPWllfWxldCBqPTAsSz0iIjtzd2l0Y2goXy50eXBlKXtjYXNlInJvdW5kIjpqPTUsSz0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOks9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6Sz0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6Sz0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOks9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6Sz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOks9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOks9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpLPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlIm9kZF9yaWdodCI6Sz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOks9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjpLPSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOks9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6Sz0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6Sz0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOks9InJlY3QiO2JyZWFrO2Nhc2UiZG91YmxlY2lyY2xlIjpLPSJkb3VibGVjaXJjbGUiO2JyZWFrO2RlZmF1bHQ6Sz0icmVjdCJ9Y29uc3QgZWU9YXdhaXQgQ0MoUixxdCgpKTtzLnNldE5vZGUoXy5pZCx7bGFiZWxTdHlsZTpQLmxhYmVsU3R5bGUsc2hhcGU6SyxsYWJlbFRleHQ6ZWUsbGFiZWxUeXBlOl8ubGFiZWxUeXBlLHJ4Omoscnk6aixjbGFzczpBLHN0eWxlOlAuc3R5bGUsaWQ6Xy5pZCxsaW5rOl8ubGluayxsaW5rVGFyZ2V0Ol8ubGlua1RhcmdldCx0b29sdGlwOnYuZGIuZ2V0VG9vbHRpcChfLmlkKXx8IiIsZG9tSWQ6di5kYi5sb29rVXBEb21JZChfLmlkKSxoYXZlQ2FsbGJhY2s6Xy5oYXZlQ2FsbGJhY2ssd2lkdGg6Xy50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLGRpcjpfLmRpcix0eXBlOl8udHlwZSxwcm9wczpfLnByb3BzLHBhZGRpbmc6cXQoKS5mbG93Y2hhcnQucGFkZGluZ30pLFhlLmluZm8oInNldE5vZGUiLHtsYWJlbFN0eWxlOlAubGFiZWxTdHlsZSxsYWJlbFR5cGU6Xy5sYWJlbFR5cGUsc2hhcGU6SyxsYWJlbFRleHQ6ZWUscng6aixyeTpqLGNsYXNzOkEsc3R5bGU6UC5zdHlsZSxpZDpfLmlkLGRvbUlkOnYuZGIubG9va1VwRG9tSWQoXy5pZCksd2lkdGg6Xy50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLHR5cGU6Xy50eXBlLGRpcjpfLmRpcixwcm9wczpfLnByb3BzLHBhZGRpbmc6cXQoKS5mbG93Y2hhcnQucGFkZGluZ30pfX0sQlVlPWFzeW5jIGZ1bmN0aW9uKGkscyx1KXtYZS5pbmZvKCJhYmM3OCBlZGdlcyA9ICIsaSk7bGV0IGQ9MCxwPXt9LHYsYjtpZihpLmRlZmF1bHRTdHlsZSE9PXZvaWQgMCl7Y29uc3QgeT1vbShpLmRlZmF1bHRTdHlsZSk7dj15LnN0eWxlLGI9eS5sYWJlbFN0eWxlfWZvcihjb25zdCB5IG9mIGkpe2QrKztjb25zdCBUPSJMLSIreS5zdGFydCsiLSIreS5lbmQ7cFtUXT09PXZvaWQgMD8ocFtUXT0wLFhlLmluZm8oImFiYzc4IG5ldyBlbnRyeSIsVCxwW1RdKSk6KHBbVF0rKyxYZS5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLFQscFtUXSkpO2xldCBfPVQrIi0iK3BbVF07WGUuaW5mbygiYWJjNzggbmV3IGxpbmsgaWQgdG8gYmUgdXNlZCBpcyIsVCxfLHBbVF0pO2NvbnN0IEE9IkxTLSIreS5zdGFydCxQPSJMRS0iK3kuZW5kLFI9e3N0eWxlOiIiLGxhYmVsU3R5bGU6IiJ9O3N3aXRjaChSLm1pbmxlbj15Lmxlbmd0aHx8MSx5LnR5cGU9PT0iYXJyb3dfb3BlbiI/Ui5hcnJvd2hlYWQ9Im5vbmUiOlIuYXJyb3doZWFkPSJub3JtYWwiLFIuYXJyb3dUeXBlU3RhcnQ9ImFycm93X29wZW4iLFIuYXJyb3dUeXBlRW5kPSJhcnJvd19vcGVuIix5LnR5cGUpe2Nhc2UiZG91YmxlX2Fycm93X2Nyb3NzIjpSLmFycm93VHlwZVN0YXJ0PSJhcnJvd19jcm9zcyI7Y2FzZSJhcnJvd19jcm9zcyI6Ui5hcnJvd1R5cGVFbmQ9ImFycm93X2Nyb3NzIjticmVhaztjYXNlImRvdWJsZV9hcnJvd19wb2ludCI6Ui5hcnJvd1R5cGVTdGFydD0iYXJyb3dfcG9pbnQiO2Nhc2UiYXJyb3dfcG9pbnQiOlIuYXJyb3dUeXBlRW5kPSJhcnJvd19wb2ludCI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfY2lyY2xlIjpSLmFycm93VHlwZVN0YXJ0PSJhcnJvd19jaXJjbGUiO2Nhc2UiYXJyb3dfY2lyY2xlIjpSLmFycm93VHlwZUVuZD0iYXJyb3dfY2lyY2xlIjticmVha31sZXQgRj0iIixqPSIiO3N3aXRjaCh5LnN0cm9rZSl7Y2FzZSJub3JtYWwiOkY9ImZpbGw6bm9uZTsiLHYhPT12b2lkIDAmJihGPXYpLGIhPT12b2lkIDAmJihqPWIpLFIudGhpY2tuZXNzPSJub3JtYWwiLFIucGF0dGVybj0ic29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpSLnRoaWNrbmVzcz0ibm9ybWFsIixSLnBhdHRlcm49ImRvdHRlZCIsUi5zdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWRhc2hhcnJheTozOyI7YnJlYWs7Y2FzZSJ0aGljayI6Ui50aGlja25lc3M9InRoaWNrIixSLnBhdHRlcm49InNvbGlkIixSLnN0eWxlPSJzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZTsiO2JyZWFrO2Nhc2UiaW52aXNpYmxlIjpSLnRoaWNrbmVzcz0iaW52aXNpYmxlIixSLnBhdHRlcm49InNvbGlkIixSLnN0eWxlPSJzdHJva2Utd2lkdGg6IDA7ZmlsbDpub25lOyI7YnJlYWt9aWYoeS5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgSz1vbSh5LnN0eWxlKTtGPUsuc3R5bGUsaj1LLmxhYmVsU3R5bGV9Ui5zdHlsZT1SLnN0eWxlKz1GLFIubGFiZWxTdHlsZT1SLmxhYmVsU3R5bGUrPWoseS5pbnRlcnBvbGF0ZSE9PXZvaWQgMD9SLmN1cnZlPU92KHkuaW50ZXJwb2xhdGUsa3ApOmkuZGVmYXVsdEludGVycG9sYXRlIT09dm9pZCAwP1IuY3VydmU9T3YoaS5kZWZhdWx0SW50ZXJwb2xhdGUsa3ApOlIuY3VydmU9T3YoTlVlLmN1cnZlLGtwKSx5LnRleHQ9PT12b2lkIDA/eS5zdHlsZSE9PXZvaWQgMCYmKFIuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKTooUi5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsUi5sYWJlbHBvcz0iYyIpLFIubGFiZWxUeXBlPXkubGFiZWxUeXBlLFIubGFiZWw9YXdhaXQgQ0MoeS50ZXh0LnJlcGxhY2UoY2kubGluZUJyZWFrUmVnZXgsYApgKSxxdCgpKSx5LnN0eWxlPT09dm9pZCAwJiYoUi5zdHlsZT1SLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiKSxSLmxhYmVsU3R5bGU9Ui5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IiksUi5pZD1fLFIuY2xhc3Nlcz0iZmxvd2NoYXJ0LWxpbmsgIitBKyIgIitQLHMuc2V0RWRnZSh5LnN0YXJ0LHkuZW5kLFIsZCl9fSxIbWU9e3NldENvbmY6Q2VuLGFkZFZlcnRpY2VzOlBVZSxhZGRFZGdlczpCVWUsZ2V0Q2xhc3NlczpmdW5jdGlvbihpLHMpe3JldHVybiBzLmRiLmdldENsYXNzZXMoKX0sZHJhdzphc3luYyBmdW5jdGlvbihpLHMsdSxkKXtYZS5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpO2xldCBwPWQuZGIuZ2V0RGlyZWN0aW9uKCk7cD09PXZvaWQgMCYmKHA9IlREIik7Y29uc3R7c2VjdXJpdHlMZXZlbDp2LGZsb3djaGFydDpifT1xdCgpLHk9Yi5ub2RlU3BhY2luZ3x8NTAsVD1iLnJhbmtTcGFjaW5nfHw1MDtsZXQgXzt2PT09InNhbmRib3giJiYoXz1JcigiI2kiK3MpKTtjb25zdCBBPUlyKHY9PT0ic2FuZGJveCI/Xy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksUD12PT09InNhbmRib3giP18ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsUj1uZXcgQjAoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpwLG5vZGVzZXA6eSxyYW5rc2VwOlQsbWFyZ2lueDowLG1hcmdpbnk6MH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBGO2NvbnN0IGo9ZC5kYi5nZXRTdWJHcmFwaHMoKTtYZS5pbmZvKCJTdWJncmFwaHMgLSAiLGopO2ZvcihsZXQgYWU9ai5sZW5ndGgtMTthZT49MDthZS0tKUY9althZV0sWGUuaW5mbygiU3ViZ3JhcGggLSAiLEYpLGQuZGIuYWRkVmVydGV4KEYuaWQse3RleHQ6Ri50aXRsZSx0eXBlOkYubGFiZWxUeXBlfSwiZ3JvdXAiLHZvaWQgMCxGLmNsYXNzZXMsRi5kaXIpO2NvbnN0IEs9ZC5kYi5nZXRWZXJ0aWNlcygpLGVlPWQuZGIuZ2V0RWRnZXMoKTtYZS5pbmZvKCJFZGdlcyIsZWUpO2xldCBpZT0wO2ZvcihpZT1qLmxlbmd0aC0xO2llPj0wO2llLS0pe0Y9altpZV0sX0JlKCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKGxldCBhZT0wO2FlPEYubm9kZXMubGVuZ3RoO2FlKyspWGUuaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLEYubm9kZXNbYWVdLEYuaWQpLFIuc2V0UGFyZW50KEYubm9kZXNbYWVdLEYuaWQpfWF3YWl0IFBVZShLLFIscyxBLFAsZCksYXdhaXQgQlVlKGVlLFIpO2NvbnN0IG9lPUEuc2VsZWN0KGBbaWQ9IiR7c30iXWApLHBlPUEuc2VsZWN0KCIjIitzKyIgZyIpO2lmKGF3YWl0IHFtZShwZSxSLFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLCJmbG93Y2hhcnQiLHMpLEFvLmluc2VydFRpdGxlKG9lLCJmbG93Y2hhcnRUaXRsZVRleHQiLGIudGl0bGVUb3BNYXJnaW4sZC5kYi5nZXREaWFncmFtVGl0bGUoKSkseTkoUixvZSxiLmRpYWdyYW1QYWRkaW5nLGIudXNlTWF4V2lkdGgpLGQuZGIuaW5kZXhOb2Rlcygic3ViR3JhcGgiK2llKSwhYi5odG1sTGFiZWxzKXtjb25zdCBhZT1QLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytzKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBuZSBvZiBhZSl7Y29uc3Qgc2U9bmUuZ2V0QkJveCgpLGRlPVAuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTtkZS5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxkZS5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxkZS5zZXRBdHRyaWJ1dGUoIndpZHRoIixzZS53aWR0aCksZGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLHNlLmhlaWdodCksbmUuaW5zZXJ0QmVmb3JlKGRlLG5lLmZpcnN0Q2hpbGQpfX1PYmplY3Qua2V5cyhLKS5mb3JFYWNoKGZ1bmN0aW9uKGFlKXtjb25zdCBuZT1LW2FlXTtpZihuZS5saW5rKXtjb25zdCBzZT1JcigiIyIrcysnIFtpZD0iJythZSsnIl0nKTtpZihzZSl7Y29uc3QgZGU9UC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2RlLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixuZS5jbGFzc2VzLmpvaW4oIiAiKSksZGUuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbmUubGluayksZGUuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSx2PT09InNhbmRib3giP2RlLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsIl90b3AiKTpuZS5saW5rVGFyZ2V0JiZkZS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLG5lLmxpbmtUYXJnZXQpO2NvbnN0IFg9c2UuaW5zZXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIGRlfSwiOmZpcnN0LWNoaWxkIiksZ2U9c2Uuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7Z2UmJlguYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGdlLm5vZGUoKX0pO2NvbnN0IFc9c2Uuc2VsZWN0KCIubGFiZWwiKTtXJiZYLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBXLm5vZGUoKX0pfX19KX19LFNlbj0oaSxzKT0+e2NvbnN0IHU9QVJlLGQ9dShpLCJyIikscD11KGksImciKSx2PXUoaSwiYiIpO3JldHVybiBTQyhkLHAsdixzKX0sRlVlPWk9PmAubGFiZWwgewogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgc3BhbixwIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCxzcGFuLHAgewogICAgZmlsbDogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAvLyB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgLy8gfQoKICAubm9kZSAua2F0ZXggcGF0aCB7CiAgICBmaWxsOiAjMDAwOwogICAgc3Ryb2tlOiAjMDAwOwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqLwogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke1NlbihpLmVkZ2VMYWJlbEJhY2tncm91bmQsLjUpfTsKICAgIC8vIGJhY2tncm91bmQtY29sb3I6IAogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke2kuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7aS5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuLHAgewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYCxfZW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpHYmUsZGI6SEMscmVuZGVyZXI6SG1lLHN0eWxlczpGVWUsaW5pdDppPT57aS5mbG93Y2hhcnR8fChpLmZsb3djaGFydD17fSksaS5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsX1F0LnNldENvbmYoaS5mbG93Y2hhcnQpLEhDLmNsZWFyKCksSEMuc2V0R2VuKCJnZW4tMSIpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksQWVuPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6R2JlLGRiOkhDLHJlbmRlcmVyOkhtZSxzdHlsZXM6RlVlLGluaXQ6aT0+e2kuZmxvd2NoYXJ0fHwoaS5mbG93Y2hhcnQ9e30pLGkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLF9qdCh7Zmxvd2NoYXJ0OnthcnJvd01hcmtlckFic29sdXRlOmkuYXJyb3dNYXJrZXJBYnNvbHV0ZX19KSxIbWUuc2V0Q29uZihpLmZsb3djaGFydCksSEMuY2xlYXIoKSxIQy5zZXRHZW4oImdlbi0yIil9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgVm1lPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oZGUsWCxnZSxXKXtmb3IoZ2U9Z2V8fHt9LFc9ZGUubGVuZ3RoO1ctLTtnZVtkZVtXXV09WCk7cmV0dXJuIGdlfSxzPVs2LDgsMTAsMjAsMjIsMjQsMjYsMjcsMjhdLHU9WzEsMTBdLGQ9WzEsMTFdLHA9WzEsMTJdLHY9WzEsMTNdLGI9WzEsMTRdLHk9WzEsMTVdLFQ9WzEsMjFdLF89WzEsMjJdLEE9WzEsMjNdLFA9WzEsMjRdLFI9WzEsMjVdLEY9WzYsOCwxMCwxMywxNSwxOCwxOSwyMCwyMiwyNCwyNiwyNywyOCw0MSw0Miw0Myw0NCw0NV0saj1bMSwzNF0sSz1bMjcsMjgsNDYsNDddLGVlPVs0MSw0Miw0Myw0NCw0NV0saWU9WzE3LDM0XSxvZT1bMSw1NF0scGU9WzEsNTNdLGJlPVsxNywzNCwzNiwzOF0sYWU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLEVSX0RJQUdSQU06NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsZW50aXR5TmFtZToxMSxyZWxTcGVjOjEyLCI6IjoxMyxyb2xlOjE0LEJMT0NLX1NUQVJUOjE1LGF0dHJpYnV0ZXM6MTYsQkxPQ0tfU1RPUDoxNyxTUVM6MTgsU1FFOjE5LHRpdGxlOjIwLHRpdGxlX3ZhbHVlOjIxLGFjY190aXRsZToyMixhY2NfdGl0bGVfdmFsdWU6MjMsYWNjX2Rlc2NyOjI0LGFjY19kZXNjcl92YWx1ZToyNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjI2LEFMUEhBTlVNOjI3LEVOVElUWV9OQU1FOjI4LGF0dHJpYnV0ZToyOSxhdHRyaWJ1dGVUeXBlOjMwLGF0dHJpYnV0ZU5hbWU6MzEsYXR0cmlidXRlS2V5VHlwZUxpc3Q6MzIsYXR0cmlidXRlQ29tbWVudDozMyxBVFRSSUJVVEVfV09SRDozNCxhdHRyaWJ1dGVLZXlUeXBlOjM1LENPTU1BOjM2LEFUVFJJQlVURV9LRVk6MzcsQ09NTUVOVDozOCxjYXJkaW5hbGl0eTozOSxyZWxUeXBlOjQwLFpFUk9fT1JfT05FOjQxLFpFUk9fT1JfTU9SRTo0MixPTkVfT1JfTU9SRTo0MyxPTkxZX09ORTo0NCxNRF9QQVJFTlQ6NDUsTk9OX0lERU5USUZZSU5HOjQ2LElERU5USUZZSU5HOjQ3LFdPUkQ6NDgsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkVSX0RJQUdSQU0iLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMzoiOiIsMTU6IkJMT0NLX1NUQVJUIiwxNzoiQkxPQ0tfU1RPUCIsMTg6IlNRUyIsMTk6IlNRRSIsMjA6InRpdGxlIiwyMToidGl0bGVfdmFsdWUiLDIyOiJhY2NfdGl0bGUiLDIzOiJhY2NfdGl0bGVfdmFsdWUiLDI0OiJhY2NfZGVzY3IiLDI1OiJhY2NfZGVzY3JfdmFsdWUiLDI2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNzoiQUxQSEFOVU0iLDI4OiJFTlRJVFlfTkFNRSIsMzQ6IkFUVFJJQlVURV9XT1JEIiwzNjoiQ09NTUEiLDM3OiJBVFRSSUJVVEVfS0VZIiwzODoiQ09NTUVOVCIsNDE6IlpFUk9fT1JfT05FIiw0MjoiWkVST19PUl9NT1JFIiw0MzoiT05FX09SX01PUkUiLDQ0OiJPTkxZX09ORSIsNDU6Ik1EX1BBUkVOVCIsNDY6Ik5PTl9JREVOVElGWUlORyIsNDc6IklERU5USUZZSU5HIiw0ODoiV09SRCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSw1XSxbOSw0XSxbOSwzXSxbOSwxXSxbOSw3XSxbOSw2XSxbOSw0XSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTEsMV0sWzExLDFdLFsxNiwxXSxbMTYsMl0sWzI5LDJdLFsyOSwzXSxbMjksM10sWzI5LDRdLFszMCwxXSxbMzEsMV0sWzMyLDFdLFszMiwzXSxbMzUsMV0sWzMzLDFdLFsxMiwzXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzM5LDFdLFs0MCwxXSxbNDAsMV0sWzE0LDFdLFsxNCwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oWCxnZSxXLHhlLFUsRmUsUGUpe3ZhciBqZT1GZS5sZW5ndGgtMTtzd2l0Y2goVSl7Y2FzZSAxOmJyZWFrO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOkZlW2plLTFdLnB1c2goRmVbamVdKSx0aGlzLiQ9RmVbamUtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9RmVbamVdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODp4ZS5hZGRFbnRpdHkoRmVbamUtNF0pLHhlLmFkZEVudGl0eShGZVtqZS0yXSkseGUuYWRkUmVsYXRpb25zaGlwKEZlW2plLTRdLEZlW2plXSxGZVtqZS0yXSxGZVtqZS0zXSk7YnJlYWs7Y2FzZSA5OnhlLmFkZEVudGl0eShGZVtqZS0zXSkseGUuYWRkQXR0cmlidXRlcyhGZVtqZS0zXSxGZVtqZS0xXSk7YnJlYWs7Y2FzZSAxMDp4ZS5hZGRFbnRpdHkoRmVbamUtMl0pO2JyZWFrO2Nhc2UgMTE6eGUuYWRkRW50aXR5KEZlW2plXSk7YnJlYWs7Y2FzZSAxMjp4ZS5hZGRFbnRpdHkoRmVbamUtNl0sRmVbamUtNF0pLHhlLmFkZEF0dHJpYnV0ZXMoRmVbamUtNl0sRmVbamUtMV0pO2JyZWFrO2Nhc2UgMTM6eGUuYWRkRW50aXR5KEZlW2plLTVdLEZlW2plLTNdKTticmVhaztjYXNlIDE0OnhlLmFkZEVudGl0eShGZVtqZS0zXSxGZVtqZS0xXSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE2OnRoaXMuJD1GZVtqZV0udHJpbSgpLHhlLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNzpjYXNlIDE4OnRoaXMuJD1GZVtqZV0udHJpbSgpLHhlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTpjYXNlIDQzOnRoaXMuJD1GZVtqZV07YnJlYWs7Y2FzZSAyMDpjYXNlIDQxOmNhc2UgNDI6dGhpcy4kPUZlW2plXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMjE6Y2FzZSAyOTp0aGlzLiQ9W0ZlW2plXV07YnJlYWs7Y2FzZSAyMjpGZVtqZV0ucHVzaChGZVtqZS0xXSksdGhpcy4kPUZlW2plXTticmVhaztjYXNlIDIzOnRoaXMuJD17YXR0cmlidXRlVHlwZTpGZVtqZS0xXSxhdHRyaWJ1dGVOYW1lOkZlW2plXX07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6RmVbamUtMl0sYXR0cmlidXRlTmFtZTpGZVtqZS0xXSxhdHRyaWJ1dGVLZXlUeXBlTGlzdDpGZVtqZV19O2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOkZlW2plLTJdLGF0dHJpYnV0ZU5hbWU6RmVbamUtMV0sYXR0cmlidXRlQ29tbWVudDpGZVtqZV19O2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOkZlW2plLTNdLGF0dHJpYnV0ZU5hbWU6RmVbamUtMl0sYXR0cmlidXRlS2V5VHlwZUxpc3Q6RmVbamUtMV0sYXR0cmlidXRlQ29tbWVudDpGZVtqZV19O2JyZWFrO2Nhc2UgMjc6Y2FzZSAyODpjYXNlIDMxOnRoaXMuJD1GZVtqZV07YnJlYWs7Y2FzZSAzMDpGZVtqZS0yXS5wdXNoKEZlW2plXSksdGhpcy4kPUZlW2plLTJdO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPUZlW2plXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXtjYXJkQTpGZVtqZV0scmVsVHlwZTpGZVtqZS0xXSxjYXJkQjpGZVtqZS0yXX07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9eGUuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9eGUuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPXhlLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXhlLkNhcmRpbmFsaXR5Lk9OTFlfT05FO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPXhlLkNhcmRpbmFsaXR5Lk1EX1BBUkVOVDticmVhaztjYXNlIDM5OnRoaXMuJD14ZS5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkc7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9eGUuSWRlbnRpZmljYXRpb24uSURFTlRJRllJTkc7YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkocyxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOjksMjA6dSwyMjpkLDI0OnAsMjY6diwyNzpiLDI4Onl9LGkocyxbMiw3XSx7MTpbMiwxXX0pLGkocyxbMiwzXSksezk6MTYsMTE6OSwyMDp1LDIyOmQsMjQ6cCwyNjp2LDI3OmIsMjg6eX0saShzLFsyLDVdKSxpKHMsWzIsNl0pLGkocyxbMiwxMV0sezEyOjE3LDM5OjIwLDE1OlsxLDE4XSwxODpbMSwxOV0sNDE6VCw0MjpfLDQzOkEsNDQ6UCw0NTpSfSksezIxOlsxLDI2XX0sezIzOlsxLDI3XX0sezI1OlsxLDI4XX0saShzLFsyLDE4XSksaShGLFsyLDE5XSksaShGLFsyLDIwXSksaShzLFsyLDRdKSx7MTE6MjksMjc6YiwyODp5fSx7MTY6MzAsMTc6WzEsMzFdLDI5OjMyLDMwOjMzLDM0Omp9LHsxMTozNSwyNzpiLDI4Onl9LHs0MDozNiw0NjpbMSwzN10sNDc6WzEsMzhdfSxpKEssWzIsMzRdKSxpKEssWzIsMzVdKSxpKEssWzIsMzZdKSxpKEssWzIsMzddKSxpKEssWzIsMzhdKSxpKHMsWzIsMTVdKSxpKHMsWzIsMTZdKSxpKHMsWzIsMTddKSx7MTM6WzEsMzldfSx7MTc6WzEsNDBdfSxpKHMsWzIsMTBdKSx7MTY6NDEsMTc6WzIsMjFdLDI5OjMyLDMwOjMzLDM0Omp9LHszMTo0MiwzNDpbMSw0M119LHszNDpbMiwyN119LHsxOTpbMSw0NF19LHszOTo0NSw0MTpULDQyOl8sNDM6QSw0NDpQLDQ1OlJ9LGkoZWUsWzIsMzldKSxpKGVlLFsyLDQwXSksezE0OjQ2LDI3OlsxLDQ5XSwyODpbMSw0OF0sNDg6WzEsNDddfSxpKHMsWzIsOV0pLHsxNzpbMiwyMl19LGkoaWUsWzIsMjNdLHszMjo1MCwzMzo1MSwzNTo1MiwzNzpvZSwzODpwZX0pLGkoWzE3LDM0LDM3LDM4XSxbMiwyOF0pLGkocyxbMiwxNF0sezE1OlsxLDU1XX0pLGkoWzI3LDI4XSxbMiwzM10pLGkocyxbMiw4XSksaShzLFsyLDQxXSksaShzLFsyLDQyXSksaShzLFsyLDQzXSksaShpZSxbMiwyNF0sezMzOjU2LDM2OlsxLDU3XSwzODpwZX0pLGkoaWUsWzIsMjVdKSxpKGJlLFsyLDI5XSksaShpZSxbMiwzMl0pLGkoYmUsWzIsMzFdKSx7MTY6NTgsMTc6WzEsNTldLDI5OjMyLDMwOjMzLDM0Omp9LGkoaWUsWzIsMjZdKSx7MzU6NjAsMzc6b2V9LHsxNzpbMSw2MV19LGkocyxbMiwxM10pLGkoYmUsWzIsMzBdKSxpKHMsWzIsMTJdKV0sZGVmYXVsdEFjdGlvbnM6ezM0OlsyLDI3XSw0MTpbMiwyMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oWCxnZSl7aWYoZ2UucmVjb3ZlcmFibGUpdGhpcy50cmFjZShYKTtlbHNle3ZhciBXPW5ldyBFcnJvcihYKTt0aHJvdyBXLmhhc2g9Z2UsV319LHBhcnNlOmZ1bmN0aW9uKFgpe3ZhciBnZT10aGlzLFc9WzBdLHhlPVtdLFU9W251bGxdLEZlPVtdLFBlPXRoaXMudGFibGUsamU9IiIsSWU9MCxTZT0wLENlPTIsa2U9MSxLZT1GZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxGdD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLE5lPXt5eTp7fX07Zm9yKHZhciBnbiBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGduKSYmKE5lLnl5W2duXT10aGlzLnl5W2duXSk7RnQuc2V0SW5wdXQoWCxOZS55eSksTmUueXkubGV4ZXI9RnQsTmUueXkucGFyc2VyPXRoaXMsdHlwZW9mIEZ0Lnl5bGxvYz4idSImJihGdC55eWxsb2M9e30pO3ZhciBfdD1GdC55eWxsb2M7RmUucHVzaChfdCk7dmFyIEV0PUZ0Lm9wdGlvbnMmJkZ0Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBOZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1OZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBHdCgpe3ZhciBqaTtyZXR1cm4gamk9eGUucG9wKCl8fEZ0LmxleCgpfHxrZSx0eXBlb2YgamkhPSJudW1iZXIiJiYoamkgaW5zdGFuY2VvZiBBcnJheSYmKHhlPWppLGppPXhlLnBvcCgpKSxqaT1nZS5zeW1ib2xzX1tqaV18fGppKSxqaX1mb3IodmFyIGxuLHh0LFB0LFFlLER0PXt9LGt0LE9uLGh0LHpyOzspe2lmKHh0PVdbVy5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t4dF0/UHQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t4dF06KChsbj09PW51bGx8fHR5cGVvZiBsbj4idSIpJiYobG49R3QoKSksUHQ9UGVbeHRdJiZQZVt4dF1bbG5dKSx0eXBlb2YgUHQ+InUifHwhUHQubGVuZ3RofHwhUHRbMF0pe3ZhciB5dD0iIjt6cj1bXTtmb3Ioa3QgaW4gUGVbeHRdKXRoaXMudGVybWluYWxzX1trdF0mJmt0PkNlJiZ6ci5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19ba3RdKyInIik7RnQuc2hvd1Bvc2l0aW9uP3l0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEllKzEpK2A6CmArRnQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCt6ci5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2xuXXx8bG4pKyInIjp5dD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhJZSsxKSsiOiBVbmV4cGVjdGVkICIrKGxuPT1rZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tsbl18fGxuKSsiJyIpLHRoaXMucGFyc2VFcnJvcih5dCx7dGV4dDpGdC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bbG5dfHxsbixsaW5lOkZ0Lnl5bGluZW5vLGxvYzpfdCxleHBlY3RlZDp6cn0pfWlmKFB0WzBdaW5zdGFuY2VvZiBBcnJheSYmUHQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit4dCsiLCB0b2tlbjogIitsbik7c3dpdGNoKFB0WzBdKXtjYXNlIDE6Vy5wdXNoKGxuKSxVLnB1c2goRnQueXl0ZXh0KSxGZS5wdXNoKEZ0Lnl5bGxvYyksVy5wdXNoKFB0WzFdKSxsbj1udWxsLFNlPUZ0Lnl5bGVuZyxqZT1GdC55eXRleHQsSWU9RnQueXlsaW5lbm8sX3Q9RnQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihPbj10aGlzLnByb2R1Y3Rpb25zX1tQdFsxXV1bMV0sRHQuJD1VW1UubGVuZ3RoLU9uXSxEdC5fJD17Zmlyc3RfbGluZTpGZVtGZS5sZW5ndGgtKE9ufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6RmVbRmUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46RmVbRmUubGVuZ3RoLShPbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpGZVtGZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEV0JiYoRHQuXyQucmFuZ2U9W0ZlW0ZlLmxlbmd0aC0oT258fDEpXS5yYW5nZVswXSxGZVtGZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxRZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoRHQsW2plLFNlLEllLE5lLnl5LFB0WzFdLFUsRmVdLmNvbmNhdChLZSkpLHR5cGVvZiBRZTwidSIpcmV0dXJuIFFlO09uJiYoVz1XLnNsaWNlKDAsLTEqT24qMiksVT1VLnNsaWNlKDAsLTEqT24pLEZlPUZlLnNsaWNlKDAsLTEqT24pKSxXLnB1c2godGhpcy5wcm9kdWN0aW9uc19bUHRbMV1dWzBdKSxVLnB1c2goRHQuJCksRmUucHVzaChEdC5fJCksaHQ9UGVbV1tXLmxlbmd0aC0yXV1bV1tXLmxlbmd0aC0xXV0sVy5wdXNoKGh0KTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sbmU9ZnVuY3Rpb24oKXt2YXIgZGU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oZ2UsVyl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihnZSxXKTtlbHNlIHRocm93IG5ldyBFcnJvcihnZSl9LHNldElucHV0OmZ1bmN0aW9uKFgsZ2Upe3JldHVybiB0aGlzLnl5PWdlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1YLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBYPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1YLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1YLHRoaXMubWF0Y2hlZCs9WDt2YXIgZ2U9WC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGdlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxYfSx1bnB1dDpmdW5jdGlvbihYKXt2YXIgZ2U9WC5sZW5ndGgsVz1YLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9WCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZ2UpLHRoaXMub2Zmc2V0LT1nZTt2YXIgeGU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksVy5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVcubGVuZ3RoLTEpO3ZhciBVPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpXPyhXLmxlbmd0aD09PXhlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkreGVbeGUubGVuZ3RoLVcubGVuZ3RoXS5sZW5ndGgtV1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWdlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W1VbMF0sVVswXSt0aGlzLnl5bGVuZy1nZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKFgpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShYKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBYPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oWC5sZW5ndGg+MjA/Ii4uLiI6IiIpK1guc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWD10aGlzLm1hdGNoO3JldHVybiBYLmxlbmd0aDwyMCYmKFgrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVgubGVuZ3RoKSksKFguc3Vic3RyKDAsMjApKyhYLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgWD10aGlzLnBhc3RJbnB1dCgpLGdlPW5ldyBBcnJheShYLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFgrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2dlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihYLGdlKXt2YXIgVyx4ZSxVO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihVPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSkseGU9WFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykseGUmJih0aGlzLnl5bGluZW5vKz14ZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjp4ZT94ZVt4ZS5sZW5ndGgtMV0ubGVuZ3RoLXhlW3hlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1hbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9WFswXSx0aGlzLm1hdGNoKz1YWzBdLHRoaXMubWF0Y2hlcz1YLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFhbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVhbMF0sVz10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxnZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxXKXJldHVybiBXO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBGZSBpbiBVKXRoaXNbRmVdPVVbRmVdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFgsZ2UsVyx4ZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBVPXRoaXMuX2N1cnJlbnRSdWxlcygpLEZlPTA7RmU8VS5sZW5ndGg7RmUrKylpZihXPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbVVtGZV1dKSxXJiYoIWdlfHxXWzBdLmxlbmd0aD5nZVswXS5sZW5ndGgpKXtpZihnZT1XLHhlPUZlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFg9dGhpcy50ZXN0X21hdGNoKFcsVVtGZV0pLFghPT0hMSlyZXR1cm4gWDtpZih0aGlzLl9iYWNrdHJhY2spe2dlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGdlPyhYPXRoaXMudGVzdF9tYXRjaChnZSxVW3hlXSksWCE9PSExP1g6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBnZT10aGlzLm5leHQoKTtyZXR1cm4gZ2V8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKGdlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goZ2UpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBnZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBnZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKGdlKXtyZXR1cm4gZ2U9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhnZXx8MCksZ2U+PTA/dGhpcy5jb25kaXRpb25TdGFja1tnZV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oZ2Upe3RoaXMuYmVnaW4oZ2UpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGdlLFcseGUsVSl7c3dpdGNoKHhlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDIyO2Nhc2UgMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMjQ7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA3OnJldHVybiAxMDtjYXNlIDg6YnJlYWs7Y2FzZSA5OnJldHVybiA4O2Nhc2UgMTA6cmV0dXJuIDI4O2Nhc2UgMTE6cmV0dXJuIDQ4O2Nhc2UgMTI6cmV0dXJuIDQ7Y2FzZSAxMzpyZXR1cm4gdGhpcy5iZWdpbigiYmxvY2siKSwxNTtjYXNlIDE0OnJldHVybiAzNjtjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIDM3O2Nhc2UgMTc6cmV0dXJuIDM0O2Nhc2UgMTg6cmV0dXJuIDM0O2Nhc2UgMTk6cmV0dXJuIDM4O2Nhc2UgMjA6YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE3O2Nhc2UgMjI6cmV0dXJuIFcueXl0ZXh0WzBdO2Nhc2UgMjM6cmV0dXJuIDE4O2Nhc2UgMjQ6cmV0dXJuIDE5O2Nhc2UgMjU6cmV0dXJuIDQxO2Nhc2UgMjY6cmV0dXJuIDQzO2Nhc2UgMjc6cmV0dXJuIDQzO2Nhc2UgMjg6cmV0dXJuIDQzO2Nhc2UgMjk6cmV0dXJuIDQxO2Nhc2UgMzA6cmV0dXJuIDQxO2Nhc2UgMzE6cmV0dXJuIDQyO2Nhc2UgMzI6cmV0dXJuIDQyO2Nhc2UgMzM6cmV0dXJuIDQyO2Nhc2UgMzQ6cmV0dXJuIDQyO2Nhc2UgMzU6cmV0dXJuIDQyO2Nhc2UgMzY6cmV0dXJuIDQzO2Nhc2UgMzc6cmV0dXJuIDQyO2Nhc2UgMzg6cmV0dXJuIDQzO2Nhc2UgMzk6cmV0dXJuIDQ0O2Nhc2UgNDA6cmV0dXJuIDQ0O2Nhc2UgNDE6cmV0dXJuIDQ0O2Nhc2UgNDI6cmV0dXJuIDQ0O2Nhc2UgNDM6cmV0dXJuIDQxO2Nhc2UgNDQ6cmV0dXJuIDQyO2Nhc2UgNDU6cmV0dXJuIDQzO2Nhc2UgNDY6cmV0dXJuIDQ1O2Nhc2UgNDc6cmV0dXJuIDQ2O2Nhc2UgNDg6cmV0dXJuIDQ3O2Nhc2UgNDk6cmV0dXJuIDQ3O2Nhc2UgNTA6cmV0dXJuIDQ2O2Nhc2UgNTE6cmV0dXJuIDQ2O2Nhc2UgNTI6cmV0dXJuIDQ2O2Nhc2UgNTM6cmV0dXJuIDI3O2Nhc2UgNTQ6cmV0dXJuIFcueXl0ZXh0WzBdO2Nhc2UgNTU6cmV0dXJuIDZ9fSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86W1xzXSspL2ksL14oPzoiW14iJVxyXG5cdlxiXFxdKyIpL2ksL14oPzoiW14iXSoiKS9pLC9eKD86ZXJEaWFncmFtXGIpL2ksL14oPzpceykvaSwvXig/OiwpL2ksL14oPzpccyspL2ksL14oPzpcYigoPzpQSyl8KD86RkspfCg/OlVLKSlcYikvaSwvXig/OiguKj8pW35dKC4qPykqW35dKS9pLC9eKD86W1wqQS1aYS16X11bQS1aYS16MC05XC1fXFtcXVwoXCldKikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzpbXG5dKykvaSwvXig/Olx9KS9pLC9eKD86LikvaSwvXig/OlxbKS9pLC9eKD86XF0pL2ksL14oPzpvbmUgb3IgemVyb1xiKS9pLC9eKD86b25lIG9yIG1vcmVcYikvaSwvXig/Om9uZSBvciBtYW55XGIpL2ksL14oPzoxXCspL2ksL14oPzpcfG9cYikvaSwvXig/Onplcm8gb3Igb25lXGIpL2ksL14oPzp6ZXJvIG9yIG1vcmVcYikvaSwvXig/Onplcm8gb3IgbWFueVxiKS9pLC9eKD86MFwrKS9pLC9eKD86XH1vXGIpL2ksL14oPzptYW55XCgwXCkpL2ksL14oPzptYW55XCgxXCkpL2ksL14oPzptYW55XGIpL2ksL14oPzpcfVx8KS9pLC9eKD86b25lXGIpL2ksL14oPzpvbmx5IG9uZVxiKS9pLC9eKD86MVxiKS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpccyp1XGIpL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzp0b1xiKS9pLC9eKD86b3B0aW9uYWxseSB0b1xiKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel9dW0EtWmEtejAtOVwtX10qKS9pLC9eKD86LikvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGRlfSgpO2FlLmxleGVyPW5lO2Z1bmN0aW9uIHNlKCl7dGhpcy55eT17fX1yZXR1cm4gc2UucHJvdG90eXBlPWFlLGFlLlBhcnNlcj1zZSxuZXcgc2V9KCk7Vm1lLnBhcnNlcj1WbWU7Y29uc3QgTGVuPVZtZTtsZXQgQjk9e30sVW1lPVtdO2NvbnN0IE1lbj17WkVST19PUl9PTkU6IlpFUk9fT1JfT05FIixaRVJPX09SX01PUkU6IlpFUk9fT1JfTU9SRSIsT05FX09SX01PUkU6Ik9ORV9PUl9NT1JFIixPTkxZX09ORToiT05MWV9PTkUiLE1EX1BBUkVOVDoiTURfUEFSRU5UIn0sRGVuPXtOT05fSURFTlRJRllJTkc6Ik5PTl9JREVOVElGWUlORyIsSURFTlRJRllJTkc6IklERU5USUZZSU5HIn0sUlVlPWZ1bmN0aW9uKGkscz12b2lkIDApe3JldHVybiBCOVtpXT09PXZvaWQgMD8oQjlbaV09e2F0dHJpYnV0ZXM6W10sYWxpYXM6c30sWGUuaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6IixpKSk6QjlbaV0mJiFCOVtpXS5hbGlhcyYmcyYmKEI5W2ldLmFsaWFzPXMsWGUuaW5mbyhgQWRkIGFsaWFzICcke3N9JyB0byBlbnRpdHkgJyR7aX0nYCkpLEI5W2ldfSxJZW49e0NhcmRpbmFsaXR5Ok1lbixJZGVudGlmaWNhdGlvbjpEZW4sZ2V0Q29uZmlnOigpPT5xdCgpLmVyLGFkZEVudGl0eTpSVWUsYWRkQXR0cmlidXRlczpmdW5jdGlvbihpLHMpe2xldCB1PVJVZShpKSxkO2ZvcihkPXMubGVuZ3RoLTE7ZD49MDtkLS0pdS5hdHRyaWJ1dGVzLnB1c2goc1tkXSksWGUuZGVidWcoIkFkZGVkIGF0dHJpYnV0ZSAiLHNbZF0uYXR0cmlidXRlTmFtZSl9LGdldEVudGl0aWVzOigpPT5COSxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24oaSxzLHUsZCl7bGV0IHA9e2VudGl0eUE6aSxyb2xlQTpzLGVudGl0eUI6dSxyZWxTcGVjOmR9O1VtZS5wdXNoKHApLFhlLmRlYnVnKCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDoiLHApfSxnZXRSZWxhdGlvbnNoaXBzOigpPT5VbWUsY2xlYXI6ZnVuY3Rpb24oKXtCOT17fSxVbWU9W10sUGcoKX0sc2V0QWNjVGl0bGU6QmcsZ2V0QWNjVGl0bGU6Q3Asc2V0QWNjRGVzY3JpcHRpb246U3AsZ2V0QWNjRGVzY3JpcHRpb246X3Asc2V0RGlhZ3JhbVRpdGxlOmNtLGdldERpYWdyYW1UaXRsZTpBcH0sVTM9e09OTFlfT05FX1NUQVJUOiJPTkxZX09ORV9TVEFSVCIsT05MWV9PTkVfRU5EOiJPTkxZX09ORV9FTkQiLFpFUk9fT1JfT05FX1NUQVJUOiJaRVJPX09SX09ORV9TVEFSVCIsWkVST19PUl9PTkVfRU5EOiJaRVJPX09SX09ORV9FTkQiLE9ORV9PUl9NT1JFX1NUQVJUOiJPTkVfT1JfTU9SRV9TVEFSVCIsT05FX09SX01PUkVfRU5EOiJPTkVfT1JfTU9SRV9FTkQiLFpFUk9fT1JfTU9SRV9TVEFSVDoiWkVST19PUl9NT1JFX1NUQVJUIixaRVJPX09SX01PUkVfRU5EOiJaRVJPX09SX01PUkVfRU5EIixNRF9QQVJFTlRfRU5EOiJNRF9QQVJFTlRfRU5EIixNRF9QQVJFTlRfU1RBUlQ6Ik1EX1BBUkVOVF9TVEFSVCJ9LEczPXtFUk1hcmtlcnM6VTMsaW5zZXJ0TWFya2VyczpmdW5jdGlvbihpLHMpe2xldCB1O2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVTMuTURfUEFSRU5UX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFUzLk1EX1BBUkVOVF9FTkQpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixVMy5PTkxZX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCBNMTUsMCBMMTUsMTgiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFUzLk9OTFlfT05FX0VORCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIscy5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDAgTDMsMTggTTksMCBMOSwxOCIpLHU9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixVMy5aRVJPX09SX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksdS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIscy5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4IiwyMSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLHUuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCIpLHU9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixVMy5aRVJPX09SX09ORV9FTkQpLmF0dHIoInJlZlgiLDMwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSx1LmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSx1LmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIscy5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwwIEwyMSwxOCIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVTMuT05FX09SX01PUkVfU1RBUlQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUSAxOCwwIDM2LDE4IFEgMTgsMzYgMCwxOCBNNDIsOSBMNDIsMjciKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFUzLk9ORV9PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMjcpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLHMuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMyw5IEwzLDI3IE05LDE4IFEyNywwIDQ1LDE4IFEyNywzNiA5LDE4IiksdT1pLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFUzLlpFUk9fT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSx1LmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDQ4KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLHUuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUTE4LDAgMzYsMTggUTE4LDM2IDAsMTgiKSx1PWkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVTMuWkVST19PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMzkpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSx1LmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksdS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLHMuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMTggUTM5LDAgNTcsMTggUTM5LDM2IDIxLDE4Iil9fSxPZW49L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Z1bmN0aW9uIE5lbihpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciJiZPZW4udGVzdChpKX1jb25zdCBVZD1bXTtmb3IobGV0IGk9MDtpPDI1NjsrK2kpVWQucHVzaCgoaSsyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24gUGVuKGkscz0wKXtyZXR1cm4gVWRbaVtzKzBdXStVZFtpW3MrMV1dK1VkW2lbcysyXV0rVWRbaVtzKzNdXSsiLSIrVWRbaVtzKzRdXStVZFtpW3MrNV1dKyItIitVZFtpW3MrNl1dK1VkW2lbcys3XV0rIi0iK1VkW2lbcys4XV0rVWRbaVtzKzldXSsiLSIrVWRbaVtzKzEwXV0rVWRbaVtzKzExXV0rVWRbaVtzKzEyXV0rVWRbaVtzKzEzXV0rVWRbaVtzKzE0XV0rVWRbaVtzKzE1XV19ZnVuY3Rpb24gQmVuKGkpe2lmKCFOZW4oaSkpdGhyb3cgVHlwZUVycm9yKCJJbnZhbGlkIFVVSUQiKTtsZXQgcztjb25zdCB1PW5ldyBVaW50OEFycmF5KDE2KTtyZXR1cm4gdVswXT0ocz1wYXJzZUludChpLnNsaWNlKDAsOCksMTYpKT4+PjI0LHVbMV09cz4+PjE2JjI1NSx1WzJdPXM+Pj44JjI1NSx1WzNdPXMmMjU1LHVbNF09KHM9cGFyc2VJbnQoaS5zbGljZSg5LDEzKSwxNikpPj4+OCx1WzVdPXMmMjU1LHVbNl09KHM9cGFyc2VJbnQoaS5zbGljZSgxNCwxOCksMTYpKT4+PjgsdVs3XT1zJjI1NSx1WzhdPShzPXBhcnNlSW50KGkuc2xpY2UoMTksMjMpLDE2KSk+Pj44LHVbOV09cyYyNTUsdVsxMF09KHM9cGFyc2VJbnQoaS5zbGljZSgyNCwzNiksMTYpKS8xMDk5NTExNjI3Nzc2JjI1NSx1WzExXT1zLzQyOTQ5NjcyOTYmMjU1LHVbMTJdPXM+Pj4yNCYyNTUsdVsxM109cz4+PjE2JjI1NSx1WzE0XT1zPj4+OCYyNTUsdVsxNV09cyYyNTUsdX1mdW5jdGlvbiBGZW4oaSl7aT11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoaSkpO2NvbnN0IHM9W107Zm9yKGxldCB1PTA7dTxpLmxlbmd0aDsrK3Upcy5wdXNoKGkuY2hhckNvZGVBdCh1KSk7cmV0dXJuIHN9Y29uc3QgUmVuPSI2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgiLGplbj0iNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4IjtmdW5jdGlvbiAkZW4oaSxzLHUpe2Z1bmN0aW9uIGQocCx2LGIseSl7dmFyIFQ7aWYodHlwZW9mIHA9PSJzdHJpbmciJiYocD1GZW4ocCkpLHR5cGVvZiB2PT0ic3RyaW5nIiYmKHY9QmVuKHYpKSwoKFQ9dik9PT1udWxsfHxUPT09dm9pZCAwP3ZvaWQgMDpULmxlbmd0aCkhPT0xNil0aHJvdyBUeXBlRXJyb3IoIk5hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSkiKTtsZXQgXz1uZXcgVWludDhBcnJheSgxNitwLmxlbmd0aCk7aWYoXy5zZXQodiksXy5zZXQocCx2Lmxlbmd0aCksXz11KF8pLF9bNl09X1s2XSYxNXxzLF9bOF09X1s4XSY2M3wxMjgsYil7eT15fHwwO2ZvcihsZXQgQT0wO0E8MTY7KytBKWJbeStBXT1fW0FdO3JldHVybiBifXJldHVybiBQZW4oXyl9dHJ5e2QubmFtZT1pfWNhdGNoe31yZXR1cm4gZC5ETlM9UmVuLGQuVVJMPWplbixkfWZ1bmN0aW9uIHplbihpLHMsdSxkKXtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBzJnVefnMmZDtjYXNlIDE6cmV0dXJuIHNedV5kO2Nhc2UgMjpyZXR1cm4gcyZ1XnMmZF51JmQ7Y2FzZSAzOnJldHVybiBzXnVeZH19ZnVuY3Rpb24gR21lKGkscyl7cmV0dXJuIGk8PHN8aT4+PjMyLXN9ZnVuY3Rpb24gcWVuKGkpe2NvbnN0IHM9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdLHU9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXTtpZih0eXBlb2YgaT09InN0cmluZyIpe2NvbnN0IGI9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGkpKTtpPVtdO2ZvcihsZXQgeT0wO3k8Yi5sZW5ndGg7Kyt5KWkucHVzaChiLmNoYXJDb2RlQXQoeSkpfWVsc2UgQXJyYXkuaXNBcnJheShpKXx8KGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSkpO2kucHVzaCgxMjgpO2NvbnN0IGQ9aS5sZW5ndGgvNCsyLHA9TWF0aC5jZWlsKGQvMTYpLHY9bmV3IEFycmF5KHApO2ZvcihsZXQgYj0wO2I8cDsrK2Ipe2NvbnN0IHk9bmV3IFVpbnQzMkFycmF5KDE2KTtmb3IobGV0IFQ9MDtUPDE2OysrVCl5W1RdPWlbYio2NCtUKjRdPDwyNHxpW2IqNjQrVCo0KzFdPDwxNnxpW2IqNjQrVCo0KzJdPDw4fGlbYio2NCtUKjQrM107dltiXT15fXZbcC0xXVsxNF09KGkubGVuZ3RoLTEpKjgvTWF0aC5wb3coMiwzMiksdltwLTFdWzE0XT1NYXRoLmZsb29yKHZbcC0xXVsxNF0pLHZbcC0xXVsxNV09KGkubGVuZ3RoLTEpKjgmNDI5NDk2NzI5NTtmb3IobGV0IGI9MDtiPHA7KytiKXtjb25zdCB5PW5ldyBVaW50MzJBcnJheSg4MCk7Zm9yKGxldCBGPTA7RjwxNjsrK0YpeVtGXT12W2JdW0ZdO2ZvcihsZXQgRj0xNjtGPDgwOysrRil5W0ZdPUdtZSh5W0YtM11eeVtGLThdXnlbRi0xNF1eeVtGLTE2XSwxKTtsZXQgVD11WzBdLF89dVsxXSxBPXVbMl0sUD11WzNdLFI9dVs0XTtmb3IobGV0IEY9MDtGPDgwOysrRil7Y29uc3Qgaj1NYXRoLmZsb29yKEYvMjApLEs9R21lKFQsNSkremVuKGosXyxBLFApK1Irc1tqXSt5W0ZdPj4+MDtSPVAsUD1BLEE9R21lKF8sMzApPj4+MCxfPVQsVD1LfXVbMF09dVswXStUPj4+MCx1WzFdPXVbMV0rXz4+PjAsdVsyXT11WzJdK0E+Pj4wLHVbM109dVszXStQPj4+MCx1WzRdPXVbNF0rUj4+PjB9cmV0dXJuW3VbMF0+PjI0JjI1NSx1WzBdPj4xNiYyNTUsdVswXT4+OCYyNTUsdVswXSYyNTUsdVsxXT4+MjQmMjU1LHVbMV0+PjE2JjI1NSx1WzFdPj44JjI1NSx1WzFdJjI1NSx1WzJdPj4yNCYyNTUsdVsyXT4+MTYmMjU1LHVbMl0+PjgmMjU1LHVbMl0mMjU1LHVbM10+PjI0JjI1NSx1WzNdPj4xNiYyNTUsdVszXT4+OCYyNTUsdVszXSYyNTUsdVs0XT4+MjQmMjU1LHVbNF0+PjE2JjI1NSx1WzRdPj44JjI1NSx1WzRdJjI1NV19Y29uc3QgSGVuPSRlbigidjUiLDgwLHFlbiksVmVuPS9bXlxkQS1aYS16XShcVykqL2c7bGV0IHAxPXt9LElSPW5ldyBNYXA7Y29uc3QgVWVuPWZ1bmN0aW9uKGkpe2NvbnN0IHM9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IHUgb2YgcylwMVt1XT1pW3VdfSxHZW49KGkscyx1KT0+e2NvbnN0IGQ9cDEuZW50aXR5UGFkZGluZy8zLHA9cDEuZW50aXR5UGFkZGluZy8zLHY9cDEuZm9udFNpemUqLjg1LGI9cy5ub2RlKCkuZ2V0QkJveCgpLHk9W107bGV0IFQ9ITEsXz0hMSxBPTAsUD0wLFI9MCxGPTAsaj1iLmhlaWdodCtkKjIsSz0xO3UuZm9yRWFjaChwZT0+e3BlLmF0dHJpYnV0ZUtleVR5cGVMaXN0IT09dm9pZCAwJiZwZS5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5sZW5ndGg+MCYmKFQ9ITApLHBlLmF0dHJpYnV0ZUNvbW1lbnQhPT12b2lkIDAmJihfPSEwKX0pLHUuZm9yRWFjaChwZT0+e2NvbnN0IGJlPWAke3Mubm9kZSgpLmlkfS1hdHRyLSR7S31gO2xldCBhZT0wO2NvbnN0IG5lPXFGKHBlLmF0dHJpYnV0ZVR5cGUpLHNlPWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7YmV9LXR5cGVgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixxdCgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLHYrInB4IikudGV4dChuZSksZGU9aS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHtiZX0tbmFtZWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLHF0KCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsdisicHgiKS50ZXh0KHBlLmF0dHJpYnV0ZU5hbWUpLFg9e307WC50bj1zZSxYLm5uPWRlO2NvbnN0IGdlPXNlLm5vZGUoKS5nZXRCQm94KCksVz1kZS5ub2RlKCkuZ2V0QkJveCgpO2lmKEE9TWF0aC5tYXgoQSxnZS53aWR0aCksUD1NYXRoLm1heChQLFcud2lkdGgpLGFlPU1hdGgubWF4KGdlLmhlaWdodCxXLmhlaWdodCksVCl7Y29uc3QgeGU9cGUuYXR0cmlidXRlS2V5VHlwZUxpc3QhPT12b2lkIDA/cGUuYXR0cmlidXRlS2V5VHlwZUxpc3Quam9pbigiLCIpOiIiLFU9aS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHtiZX0ta2V5YCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibGVmdCIpLnN0eWxlKCJmb250LWZhbWlseSIscXQoKS5mb250RmFtaWx5KS5zdHlsZSgiZm9udC1zaXplIix2KyJweCIpLnRleHQoeGUpO1gua249VTtjb25zdCBGZT1VLm5vZGUoKS5nZXRCQm94KCk7Uj1NYXRoLm1heChSLEZlLndpZHRoKSxhZT1NYXRoLm1heChhZSxGZS5oZWlnaHQpfWlmKF8pe2NvbnN0IHhlPWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7YmV9LWNvbW1lbnRgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixxdCgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLHYrInB4IikudGV4dChwZS5hdHRyaWJ1dGVDb21tZW50fHwiIik7WC5jbj14ZTtjb25zdCBVPXhlLm5vZGUoKS5nZXRCQm94KCk7Rj1NYXRoLm1heChGLFUud2lkdGgpLGFlPU1hdGgubWF4KGFlLFUuaGVpZ2h0KX1YLmhlaWdodD1hZSx5LnB1c2goWCksais9YWUrZCoyLEsrPTF9KTtsZXQgZWU9NDtUJiYoZWUrPTIpLF8mJihlZSs9Mik7Y29uc3QgaWU9QStQK1IrRixvZT17d2lkdGg6TWF0aC5tYXgocDEubWluRW50aXR5V2lkdGgsTWF0aC5tYXgoYi53aWR0aCtwMS5lbnRpdHlQYWRkaW5nKjIsaWUrcCplZSkpLGhlaWdodDp1Lmxlbmd0aD4wP2o6TWF0aC5tYXgocDEubWluRW50aXR5SGVpZ2h0LGIuaGVpZ2h0K3AxLmVudGl0eVBhZGRpbmcqMil9O2lmKHUubGVuZ3RoPjApe2NvbnN0IHBlPU1hdGgubWF4KDAsKG9lLndpZHRoLWllLXAqZWUpLyhlZS8yKSk7cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvZS53aWR0aC8yKyIsIisoZCtiLmhlaWdodC8yKSsiKSIpO2xldCBiZT1iLmhlaWdodCtkKjIsYWU9ImF0dHJpYnV0ZUJveE9kZCI7eS5mb3JFYWNoKG5lPT57Y29uc3Qgc2U9YmUrZCtuZS5oZWlnaHQvMjtuZS50bi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitwKyIsIitzZSsiKSIpO2NvbnN0IGRlPWkuaW5zZXJ0KCJyZWN0IiwiIyIrbmUudG4ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke2FlfWAsITApLmF0dHIoIngiLDApLmF0dHIoInkiLGJlKS5hdHRyKCJ3aWR0aCIsQStwKjIrcGUpLmF0dHIoImhlaWdodCIsbmUuaGVpZ2h0K2QqMiksWD1wYXJzZUZsb2F0KGRlLmF0dHIoIngiKSkrcGFyc2VGbG9hdChkZS5hdHRyKCJ3aWR0aCIpKTtuZS5ubi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoWCtwKSsiLCIrc2UrIikiKTtjb25zdCBnZT1pLmluc2VydCgicmVjdCIsIiMiK25lLm5uLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHthZX1gLCEwKS5hdHRyKCJ4IixYKS5hdHRyKCJ5IixiZSkuYXR0cigid2lkdGgiLFArcCoyK3BlKS5hdHRyKCJoZWlnaHQiLG5lLmhlaWdodCtkKjIpO2xldCBXPXBhcnNlRmxvYXQoZ2UuYXR0cigieCIpKStwYXJzZUZsb2F0KGdlLmF0dHIoIndpZHRoIikpO2lmKFQpe25lLmtuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhXK3ApKyIsIitzZSsiKSIpO2NvbnN0IHhlPWkuaW5zZXJ0KCJyZWN0IiwiIyIrbmUua24ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke2FlfWAsITApLmF0dHIoIngiLFcpLmF0dHIoInkiLGJlKS5hdHRyKCJ3aWR0aCIsUitwKjIrcGUpLmF0dHIoImhlaWdodCIsbmUuaGVpZ2h0K2QqMik7Vz1wYXJzZUZsb2F0KHhlLmF0dHIoIngiKSkrcGFyc2VGbG9hdCh4ZS5hdHRyKCJ3aWR0aCIpKX1fJiYobmUuY24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKFcrcCkrIiwiK3NlKyIpIiksaS5pbnNlcnQoInJlY3QiLCIjIituZS5jbi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7YWV9YCwidHJ1ZSIpLmF0dHIoIngiLFcpLmF0dHIoInkiLGJlKS5hdHRyKCJ3aWR0aCIsRitwKjIrcGUpLmF0dHIoImhlaWdodCIsbmUuaGVpZ2h0K2QqMikpLGJlKz1uZS5oZWlnaHQrZCoyLGFlPWFlPT09ImF0dHJpYnV0ZUJveE9kZCI/ImF0dHJpYnV0ZUJveEV2ZW4iOiJhdHRyaWJ1dGVCb3hPZGQifSl9ZWxzZSBvZS5oZWlnaHQ9TWF0aC5tYXgocDEubWluRW50aXR5SGVpZ2h0LGopLHMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrb2Uud2lkdGgvMisiLCIrb2UuaGVpZ2h0LzIrIikiKTtyZXR1cm4gb2V9LEtlbj1mdW5jdGlvbihpLHMsdSl7Y29uc3QgZD1PYmplY3Qua2V5cyhzKTtsZXQgcDtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKHYpe2NvbnN0IGI9WmVuKHYsImVudGl0eSIpO0lSLnNldCh2LGIpO2NvbnN0IHk9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIsYik7cD1wPT09dm9pZCAwP2I6cDtjb25zdCBUPSJ0ZXh0LSIrYixfPXkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsVCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtZmFtaWx5IixxdCgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLHAxLmZvbnRTaXplKyJweCIpLnRleHQoc1t2XS5hbGlhcz8/dikse3dpZHRoOkEsaGVpZ2h0OlB9PUdlbih5LF8sc1t2XS5hdHRyaWJ1dGVzKSxGPXkuaW5zZXJ0KCJyZWN0IiwiIyIrVCkuY2xhc3NlZCgiZXIgZW50aXR5Qm94IiwhMCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLEEpLmF0dHIoImhlaWdodCIsUCkubm9kZSgpLmdldEJCb3goKTt1LnNldE5vZGUoYix7d2lkdGg6Ri53aWR0aCxoZWlnaHQ6Ri5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOmJ9KX0pLHB9LFdlbj1mdW5jdGlvbihpLHMpe3Mubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3UhPT12b2lkIDAmJnMubm9kZSh1KSE9PXZvaWQgMCYmaS5zZWxlY3QoIiMiK3UpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLm5vZGUodSkueC1zLm5vZGUodSkud2lkdGgvMikrIiwiKyhzLm5vZGUodSkueS1zLm5vZGUodSkuaGVpZ2h0LzIpKyIgKSIpfSl9LGpVZT1mdW5jdGlvbihpKXtyZXR1cm4oaS5lbnRpdHlBK2kucm9sZUEraS5lbnRpdHlCKS5yZXBsYWNlKC9ccy9nLCIiKX0sWWVuPWZ1bmN0aW9uKGkscyl7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbih1KXtzLnNldEVkZ2UoSVIuZ2V0KHUuZW50aXR5QSksSVIuZ2V0KHUuZW50aXR5Qikse3JlbGF0aW9uc2hpcDp1fSxqVWUodSkpfSksaX07bGV0ICRVZT0wO2NvbnN0IFhlbj1mdW5jdGlvbihpLHMsdSxkLHApeyRVZSsrO2NvbnN0IHY9dS5lZGdlKElSLmdldChzLmVudGl0eUEpLElSLmdldChzLmVudGl0eUIpLGpVZShzKSksYj1rNygpLngoZnVuY3Rpb24oail7cmV0dXJuIGoueH0pLnkoZnVuY3Rpb24oail7cmV0dXJuIGoueX0pLmN1cnZlKEZGKSx5PWkuaW5zZXJ0KCJwYXRoIiwiIyIrZCkuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGluZSIsITApLmF0dHIoImQiLGIodi5wb2ludHMpKS5zdHlsZSgic3Ryb2tlIixwMS5zdHJva2UpLnN0eWxlKCJmaWxsIiwibm9uZSIpO3MucmVsU3BlYy5yZWxUeXBlPT09cC5kYi5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkcmJnkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjgsOCIpO2xldCBUPSIiO3N3aXRjaChwMS5hcnJvd01hcmtlckFic29sdXRlJiYoVD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxUPVQucmVwbGFjZSgvXCgvZywiXFwoIiksVD1ULnJlcGxhY2UoL1wpL2csIlxcKSIpKSxzLnJlbFNwZWMuY2FyZEEpe2Nhc2UgcC5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuWkVST19PUl9PTkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBwLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuWkVST19PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2UgcC5kYi5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuT05FX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBwLmRiLkNhcmRpbmFsaXR5Lk9OTFlfT05FOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK1QrIiMiK0czLkVSTWFya2Vycy5PTkxZX09ORV9FTkQrIikiKTticmVhaztjYXNlIHAuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK1QrIiMiK0czLkVSTWFya2Vycy5NRF9QQVJFTlRfRU5EKyIpIik7YnJlYWt9c3dpdGNoKHMucmVsU3BlYy5jYXJkQil7Y2FzZSBwLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrVCsiIyIrRzMuRVJNYXJrZXJzLlpFUk9fT1JfT05FX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBwLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTp5LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK1QrIiMiK0czLkVSTWFya2Vycy5aRVJPX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHAuZGIuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuT05FX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHAuZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuT05MWV9PTkVfU1RBUlQrIikiKTticmVhaztjYXNlIHAuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrVCsiIyIrRzMuRVJNYXJrZXJzLk1EX1BBUkVOVF9TVEFSVCsiKSIpO2JyZWFrfWNvbnN0IF89eS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxBPXkubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoXyouNSksUD0icmVsIiskVWUsRj1pLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIHJlbGF0aW9uc2hpcExhYmVsIiwhMCkuYXR0cigiaWQiLFApLmF0dHIoIngiLEEueCkuYXR0cigieSIsQS55KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1mYW1pbHkiLHF0KCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIscDEuZm9udFNpemUrInB4IikudGV4dChzLnJvbGVBKS5ub2RlKCkuZ2V0QkJveCgpO2kuaW5zZXJ0KCJyZWN0IiwiIyIrUCkuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGFiZWxCb3giLCEwKS5hdHRyKCJ4IixBLngtRi53aWR0aC8yKS5hdHRyKCJ5IixBLnktRi5oZWlnaHQvMikuYXR0cigid2lkdGgiLEYud2lkdGgpLmF0dHIoImhlaWdodCIsRi5oZWlnaHQpfSxRZW49ZnVuY3Rpb24oaSxzLHUsZCl7cDE9cXQoKS5lcixYZS5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKTtjb25zdCBwPXF0KCkuc2VjdXJpdHlMZXZlbDtsZXQgdjtwPT09InNhbmRib3giJiYodj1JcigiI2kiK3MpKTtjb25zdCB5PUlyKHA9PT0ic2FuZGJveCI/di5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KGBbaWQ9JyR7c30nXWApO0czLmluc2VydE1hcmtlcnMoeSxwMSk7bGV0IFQ7VD1uZXcgQjAoe211bHRpZ3JhcGg6ITAsZGlyZWN0ZWQ6ITAsY29tcG91bmQ6ITF9KS5zZXRHcmFwaCh7cmFua2RpcjpwMS5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7Y29uc3QgXz1LZW4oeSxkLmRiLmdldEVudGl0aWVzKCksVCksQT1ZZW4oZC5kYi5nZXRSZWxhdGlvbnNoaXBzKCksVCk7cUQoVCksV2VuKHksVCksQS5mb3JFYWNoKGZ1bmN0aW9uKEspe1hlbih5LEssVCxfLGQpfSk7Y29uc3QgUD1wMS5kaWFncmFtUGFkZGluZztBby5pbnNlcnRUaXRsZSh5LCJlbnRpdHlUaXRsZVRleHQiLHAxLnRpdGxlVG9wTWFyZ2luLGQuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO2NvbnN0IFI9eS5ub2RlKCkuZ2V0QkJveCgpLEY9Ui53aWR0aCtQKjIsaj1SLmhlaWdodCtQKjI7TmcoeSxqLEYscDEudXNlTWF4V2lkdGgpLHkuYXR0cigidmlld0JveCIsYCR7Ui54LVB9ICR7Ui55LVB9ICR7Rn0gJHtqfWApfSxKZW49IjI4ZTlmOWRiLTNjOGQtNWFhNS05ZmFmLTQ0Mjg2YWU1OTM3YyI7ZnVuY3Rpb24gWmVuKGk9IiIscz0iIil7Y29uc3QgdT1pLnJlcGxhY2UoVmVuLCIiKTtyZXR1cm5gJHt6VWUocyl9JHt6VWUodSl9JHtIZW4oaSxKZW4pfWB9ZnVuY3Rpb24gelVlKGk9IiIpe3JldHVybiBpLmxlbmd0aD4wP2Ake2l9LWA6IiJ9Y29uc3QgZXRuPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6TGVuLGRiOkllbixyZW5kZXJlcjp7c2V0Q29uZjpVZW4sZHJhdzpRZW59LHN0eWxlczppPT5gCiAgLmVudGl0eUJveCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hPZGQgewogICAgZmlsbDogJHtpLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZH07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hFdmVuIHsKICAgIGZpbGw6ICAke2kuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbn07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5yZWxhdGlvbnNoaXBMYWJlbEJveCB7CiAgICBmaWxsOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBvcGFjaXR5OiAwLjc7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kudGVydGlhcnlDb2xvcn07CiAgICAgIHJlY3QgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogIH0KCiAgICAucmVsYXRpb25zaGlwTGluZSB7CiAgICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICB9CgogIC5lbnRpdHlUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0gICAgCiAgI01EX1BBUkVOVF9TVEFSVCB7CiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogICNNRF9QQVJFTlRfRU5EIHsKICAgIGZpbGw6ICNmNWY1ZjUgIWltcG9ydGFudDsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICAgIHN0cm9rZS13aWR0aDogMTsKICB9CiAgCmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBLbWU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihhZSxuZSxzZSxkZSl7Zm9yKHNlPXNlfHx7fSxkZT1hZS5sZW5ndGg7ZGUtLTtzZVthZVtkZV1dPW5lKTtyZXR1cm4gc2V9LHM9WzEsM10sdT1bMSw2XSxkPVsxLDRdLHA9WzEsNV0sdj1bMiw1XSxiPVsxLDEyXSx5PVs1LDcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzcsNDAsNDddLFQ9WzcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzcsNDBdLF89WzcsMTIsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzcsNDBdLEE9WzcsMTMsNDddLFA9WzEsNDJdLFI9WzEsNDFdLEY9WzcsMTMsMjksMzIsMzUsMzgsNDddLGo9WzEsNTVdLEs9WzEsNTZdLGVlPVsxLDU3XSxpZT1bNywxMywzMiwzNSw0Miw0N10sb2U9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LEdHOjUsZG9jdW1lbnQ6NixFT0Y6NywiOiI6OCxESVI6OSxvcHRpb25zOjEwLGJvZHk6MTEsT1BUOjEyLE5MOjEzLGxpbmU6MTQsc3RhdGVtZW50OjE1LGNvbW1pdFN0YXRlbWVudDoxNixtZXJnZVN0YXRlbWVudDoxNyxjaGVycnlQaWNrU3RhdGVtZW50OjE4LGFjY190aXRsZToxOSxhY2NfdGl0bGVfdmFsdWU6MjAsYWNjX2Rlc2NyOjIxLGFjY19kZXNjcl92YWx1ZToyMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjIzLHNlY3Rpb246MjQsYnJhbmNoU3RhdGVtZW50OjI1LENIRUNLT1VUOjI2LHJlZjoyNyxCUkFOQ0g6MjgsT1JERVI6MjksTlVNOjMwLENIRVJSWV9QSUNLOjMxLENPTU1JVF9JRDozMixTVFI6MzMsUEFSRU5UX0NPTU1JVDozNCxDT01NSVRfVEFHOjM1LEVNUFRZU1RSOjM2LE1FUkdFOjM3LENPTU1JVF9UWVBFOjM4LGNvbW1pdFR5cGU6MzksQ09NTUlUOjQwLGNvbW1pdF9hcmc6NDEsQ09NTUlUX01TRzo0MixOT1JNQUw6NDMsUkVWRVJTRTo0NCxISUdITElHSFQ6NDUsSUQ6NDYsIjsiOjQ3LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJHRyIsNzoiRU9GIiw4OiI6Iiw5OiJESVIiLDEyOiJPUFQiLDEzOiJOTCIsMTk6ImFjY190aXRsZSIsMjA6ImFjY190aXRsZV92YWx1ZSIsMjE6ImFjY19kZXNjciIsMjI6ImFjY19kZXNjcl92YWx1ZSIsMjM6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDI0OiJzZWN0aW9uIiwyNjoiQ0hFQ0tPVVQiLDI4OiJCUkFOQ0giLDI5OiJPUkRFUiIsMzA6Ik5VTSIsMzE6IkNIRVJSWV9QSUNLIiwzMjoiQ09NTUlUX0lEIiwzMzoiU1RSIiwzNDoiUEFSRU5UX0NPTU1JVCIsMzU6IkNPTU1JVF9UQUciLDM2OiJFTVBUWVNUUiIsMzc6Ik1FUkdFIiwzODoiQ09NTUlUX1RZUEUiLDQwOiJDT01NSVQiLDQyOiJDT01NSVRfTVNHIiw0MzoiTk9STUFMIiw0NDoiUkVWRVJTRSIsNDU6IkhJR0hMSUdIVCIsNDY6IklEIiw0NzoiOyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywzXSxbMyw0XSxbMyw1XSxbNiwwXSxbNiwyXSxbMTAsMl0sWzEwLDFdLFsxMSwwXSxbMTEsMl0sWzE0LDJdLFsxNCwxXSxbMTUsMV0sWzE1LDFdLFsxNSwxXSxbMTUsMl0sWzE1LDJdLFsxNSwxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMjUsMl0sWzI1LDRdLFsxOCwzXSxbMTgsNV0sWzE4LDVdLFsxOCw3XSxbMTgsN10sWzE4LDVdLFsxOCw1XSxbMTgsNV0sWzE4LDddLFsxOCw3XSxbMTgsN10sWzE4LDddLFsxNywyXSxbMTcsNF0sWzE3LDRdLFsxNyw0XSxbMTcsNl0sWzE3LDZdLFsxNyw2XSxbMTcsNl0sWzE3LDZdLFsxNyw2XSxbMTcsOF0sWzE3LDhdLFsxNyw4XSxbMTcsOF0sWzE3LDhdLFsxNyw4XSxbMTYsMl0sWzE2LDNdLFsxNiwzXSxbMTYsNV0sWzE2LDVdLFsxNiwzXSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDNdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFs0MSwwXSxbNDEsMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzI3LDFdLFsyNywxXSxbNCwxXSxbNCwxXSxbNCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihuZSxzZSxkZSxYLGdlLFcseGUpe3ZhciBVPVcubGVuZ3RoLTE7c3dpdGNoKGdlKXtjYXNlIDI6cmV0dXJuIFdbVV07Y2FzZSAzOnJldHVybiBXW1UtMV07Y2FzZSA0OnJldHVybiBYLnNldERpcmVjdGlvbihXW1UtM10pLFdbVS0xXTtjYXNlIDY6WC5zZXRPcHRpb25zKFdbVS0xXSksdGhpcy4kPVdbVV07YnJlYWs7Y2FzZSA3OldbVS0xXSs9V1tVXSx0aGlzLiQ9V1tVLTFdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMDpXW1UtMV0ucHVzaChXW1VdKSx0aGlzLiQ9V1tVLTFdO2JyZWFrO2Nhc2UgMTE6dGhpcy4kPVdbVS0xXTticmVhaztjYXNlIDE2OnRoaXMuJD1XW1VdLnRyaW0oKSxYLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNzpjYXNlIDE4OnRoaXMuJD1XW1VdLnRyaW0oKSxYLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTpYLmFkZFNlY3Rpb24oV1tVXS5zdWJzdHIoOCkpLHRoaXMuJD1XW1VdLnN1YnN0cig4KTticmVhaztjYXNlIDIxOlguY2hlY2tvdXQoV1tVXSk7YnJlYWs7Y2FzZSAyMjpYLmJyYW5jaChXW1VdKTticmVhaztjYXNlIDIzOlguYnJhbmNoKFdbVS0yXSxXW1VdKTticmVhaztjYXNlIDI0OlguY2hlcnJ5UGljayhXW1VdLCIiLHZvaWQgMCk7YnJlYWs7Y2FzZSAyNTpYLmNoZXJyeVBpY2soV1tVLTJdLCIiLHZvaWQgMCxXW1VdKTticmVhaztjYXNlIDI2OlguY2hlcnJ5UGljayhXW1UtMl0sIiIsV1tVXSk7YnJlYWs7Y2FzZSAyNzpYLmNoZXJyeVBpY2soV1tVLTRdLCIiLFdbVV0sV1tVLTJdKTticmVhaztjYXNlIDI4OlguY2hlcnJ5UGljayhXW1UtNF0sIiIsV1tVLTJdLFdbVV0pO2JyZWFrO2Nhc2UgMjk6WC5jaGVycnlQaWNrKFdbVV0sIiIsV1tVLTJdKTticmVhaztjYXNlIDMwOlguY2hlcnJ5UGljayhXW1VdLCIiLCIiKTticmVhaztjYXNlIDMxOlguY2hlcnJ5UGljayhXW1UtMl0sIiIsIiIpO2JyZWFrO2Nhc2UgMzI6WC5jaGVycnlQaWNrKFdbVS00XSwiIiwiIixXW1UtMl0pO2JyZWFrO2Nhc2UgMzM6WC5jaGVycnlQaWNrKFdbVS00XSwiIiwiIixXW1VdKTticmVhaztjYXNlIDM0OlguY2hlcnJ5UGljayhXW1UtMl0sIiIsV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgMzU6WC5jaGVycnlQaWNrKFdbVS0yXSwiIiwiIixXW1VdKTticmVhaztjYXNlIDM2OlgubWVyZ2UoV1tVXSwiIiwiIiwiIik7YnJlYWs7Y2FzZSAzNzpYLm1lcmdlKFdbVS0yXSxXW1VdLCIiLCIiKTticmVhaztjYXNlIDM4OlgubWVyZ2UoV1tVLTJdLCIiLFdbVV0sIiIpO2JyZWFrO2Nhc2UgMzk6WC5tZXJnZShXW1UtMl0sIiIsIiIsV1tVXSk7YnJlYWs7Y2FzZSA0MDpYLm1lcmdlKFdbVS00XSxXW1VdLCIiLFdbVS0yXSk7YnJlYWs7Y2FzZSA0MTpYLm1lcmdlKFdbVS00XSwiIixXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSA0MjpYLm1lcmdlKFdbVS00XSwiIixXW1UtMl0sV1tVXSk7YnJlYWs7Y2FzZSA0MzpYLm1lcmdlKFdbVS00XSxXW1UtMl0sV1tVXSwiIik7YnJlYWs7Y2FzZSA0NDpYLm1lcmdlKFdbVS00XSxXW1UtMl0sIiIsV1tVXSk7YnJlYWs7Y2FzZSA0NTpYLm1lcmdlKFdbVS00XSxXW1VdLFdbVS0yXSwiIik7YnJlYWs7Y2FzZSA0NjpYLm1lcmdlKFdbVS02XSxXW1UtNF0sV1tVLTJdLFdbVV0pO2JyZWFrO2Nhc2UgNDc6WC5tZXJnZShXW1UtNl0sV1tVXSxXW1UtNF0sV1tVLTJdKTticmVhaztjYXNlIDQ4OlgubWVyZ2UoV1tVLTZdLFdbVS00XSxXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSA0OTpYLm1lcmdlKFdbVS02XSxXW1UtMl0sV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgNTA6WC5tZXJnZShXW1UtNl0sV1tVXSxXW1UtMl0sV1tVLTRdKTticmVhaztjYXNlIDUxOlgubWVyZ2UoV1tVLTZdLFdbVS0yXSxXW1VdLFdbVS00XSk7YnJlYWs7Y2FzZSA1MjpYLmNvbW1pdChXW1VdKTticmVhaztjYXNlIDUzOlguY29tbWl0KCIiLCIiLFguY29tbWl0VHlwZS5OT1JNQUwsV1tVXSk7YnJlYWs7Y2FzZSA1NDpYLmNvbW1pdCgiIiwiIixXW1VdLCIiKTticmVhaztjYXNlIDU1OlguY29tbWl0KCIiLCIiLFdbVV0sV1tVLTJdKTticmVhaztjYXNlIDU2OlguY29tbWl0KCIiLCIiLFdbVS0yXSxXW1VdKTticmVhaztjYXNlIDU3OlguY29tbWl0KCIiLFdbVV0sWC5jb21taXRUeXBlLk5PUk1BTCwiIik7YnJlYWs7Y2FzZSA1ODpYLmNvbW1pdCgiIixXW1UtMl0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1VdKTticmVhaztjYXNlIDU5OlguY29tbWl0KCIiLFdbVV0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtMl0pO2JyZWFrO2Nhc2UgNjA6WC5jb21taXQoIiIsV1tVLTJdLFdbVV0sIiIpO2JyZWFrO2Nhc2UgNjE6WC5jb21taXQoIiIsV1tVXSxXW1UtMl0sIiIpO2JyZWFrO2Nhc2UgNjI6WC5jb21taXQoIiIsV1tVLTRdLFdbVS0yXSxXW1VdKTticmVhaztjYXNlIDYzOlguY29tbWl0KCIiLFdbVS00XSxXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSA2NDpYLmNvbW1pdCgiIixXW1UtMl0sV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgNjU6WC5jb21taXQoIiIsV1tVXSxXW1UtNF0sV1tVLTJdKTticmVhaztjYXNlIDY2OlguY29tbWl0KCIiLFdbVV0sV1tVLTJdLFdbVS00XSk7YnJlYWs7Y2FzZSA2NzpYLmNvbW1pdCgiIixXW1UtMl0sV1tVXSxXW1UtNF0pO2JyZWFrO2Nhc2UgNjg6WC5jb21taXQoV1tVXSwiIixYLmNvbW1pdFR5cGUuTk9STUFMLCIiKTticmVhaztjYXNlIDY5OlguY29tbWl0KFdbVV0sIiIsWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtMl0pO2JyZWFrO2Nhc2UgNzA6WC5jb21taXQoV1tVLTJdLCIiLFguY29tbWl0VHlwZS5OT1JNQUwsV1tVXSk7YnJlYWs7Y2FzZSA3MTpYLmNvbW1pdChXW1UtMl0sIiIsV1tVXSwiIik7YnJlYWs7Y2FzZSA3MjpYLmNvbW1pdChXW1VdLCIiLFdbVS0yXSwiIik7YnJlYWs7Y2FzZSA3MzpYLmNvbW1pdChXW1VdLFdbVS0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLCIiKTticmVhaztjYXNlIDc0OlguY29tbWl0KFdbVS0yXSxXW1VdLFguY29tbWl0VHlwZS5OT1JNQUwsIiIpO2JyZWFrO2Nhc2UgNzU6WC5jb21taXQoV1tVLTRdLCIiLFdbVS0yXSxXW1VdKTticmVhaztjYXNlIDc2OlguY29tbWl0KFdbVS00XSwiIixXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSA3NzpYLmNvbW1pdChXW1UtMl0sIiIsV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgNzg6WC5jb21taXQoV1tVXSwiIixXW1UtNF0sV1tVLTJdKTticmVhaztjYXNlIDc5OlguY29tbWl0KFdbVV0sIiIsV1tVLTJdLFdbVS00XSk7YnJlYWs7Y2FzZSA4MDpYLmNvbW1pdChXW1UtMl0sIiIsV1tVXSxXW1UtNF0pO2JyZWFrO2Nhc2UgODE6WC5jb21taXQoV1tVLTRdLFdbVV0sV1tVLTJdLCIiKTticmVhaztjYXNlIDgyOlguY29tbWl0KFdbVS00XSxXW1UtMl0sV1tVXSwiIik7YnJlYWs7Y2FzZSA4MzpYLmNvbW1pdChXW1UtMl0sV1tVXSxXW1UtNF0sIiIpO2JyZWFrO2Nhc2UgODQ6WC5jb21taXQoV1tVXSxXW1UtMl0sV1tVLTRdLCIiKTticmVhaztjYXNlIDg1OlguY29tbWl0KFdbVV0sV1tVLTRdLFdbVS0yXSwiIik7YnJlYWs7Y2FzZSA4NjpYLmNvbW1pdChXW1UtMl0sV1tVLTRdLFdbVV0sIiIpO2JyZWFrO2Nhc2UgODc6WC5jb21taXQoV1tVLTRdLFdbVV0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtMl0pO2JyZWFrO2Nhc2UgODg6WC5jb21taXQoV1tVLTRdLFdbVS0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLFdbVV0pO2JyZWFrO2Nhc2UgODk6WC5jb21taXQoV1tVLTJdLFdbVV0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtNF0pO2JyZWFrO2Nhc2UgOTA6WC5jb21taXQoV1tVXSxXW1UtMl0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtNF0pO2JyZWFrO2Nhc2UgOTE6WC5jb21taXQoV1tVXSxXW1UtNF0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtMl0pO2JyZWFrO2Nhc2UgOTI6WC5jb21taXQoV1tVLTJdLFdbVS00XSxYLmNvbW1pdFR5cGUuTk9STUFMLFdbVV0pO2JyZWFrO2Nhc2UgOTM6WC5jb21taXQoV1tVLTZdLFdbVS00XSxXW1UtMl0sV1tVXSk7YnJlYWs7Y2FzZSA5NDpYLmNvbW1pdChXW1UtNl0sV1tVLTRdLFdbVV0sV1tVLTJdKTticmVhaztjYXNlIDk1OlguY29tbWl0KFdbVS02XSxXW1UtMl0sV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgOTY6WC5jb21taXQoV1tVLTZdLFdbVV0sV1tVLTRdLFdbVS0yXSk7YnJlYWs7Y2FzZSA5NzpYLmNvbW1pdChXW1UtNl0sV1tVLTJdLFdbVV0sV1tVLTRdKTticmVhaztjYXNlIDk4OlguY29tbWl0KFdbVS02XSxXW1VdLFdbVS0yXSxXW1UtNF0pO2JyZWFrO2Nhc2UgOTk6WC5jb21taXQoV1tVLTRdLFdbVS02XSxXW1UtMl0sV1tVXSk7YnJlYWs7Y2FzZSAxMDA6WC5jb21taXQoV1tVLTRdLFdbVS02XSxXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSAxMDE6WC5jb21taXQoV1tVLTJdLFdbVS02XSxXW1UtNF0sV1tVXSk7YnJlYWs7Y2FzZSAxMDI6WC5jb21taXQoV1tVXSxXW1UtNl0sV1tVLTRdLFdbVS0yXSk7YnJlYWs7Y2FzZSAxMDM6WC5jb21taXQoV1tVLTJdLFdbVS02XSxXW1VdLFdbVS00XSk7YnJlYWs7Y2FzZSAxMDQ6WC5jb21taXQoV1tVXSxXW1UtNl0sV1tVLTJdLFdbVS00XSk7YnJlYWs7Y2FzZSAxMDU6WC5jb21taXQoV1tVXSxXW1UtNF0sV1tVLTJdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMDY6WC5jb21taXQoV1tVLTJdLFdbVS00XSxXW1VdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMDc6WC5jb21taXQoV1tVXSxXW1UtMl0sV1tVLTRdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMDg6WC5jb21taXQoV1tVLTJdLFdbVV0sV1tVLTRdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMDk6WC5jb21taXQoV1tVLTRdLFdbVS0yXSxXW1VdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMTA6WC5jb21taXQoV1tVLTRdLFdbVV0sV1tVLTJdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMTE6WC5jb21taXQoV1tVLTJdLFdbVS00XSxXW1UtNl0sV1tVXSk7YnJlYWs7Y2FzZSAxMTI6WC5jb21taXQoV1tVXSxXW1UtNF0sV1tVLTZdLFdbVS0yXSk7YnJlYWs7Y2FzZSAxMTM6WC5jb21taXQoV1tVLTJdLFdbVV0sV1tVLTZdLFdbVS00XSk7YnJlYWs7Y2FzZSAxMTQ6WC5jb21taXQoV1tVXSxXW1UtMl0sV1tVLTZdLFdbVS00XSk7YnJlYWs7Y2FzZSAxMTU6WC5jb21taXQoV1tVLTRdLFdbVS0yXSxXW1UtNl0sV1tVXSk7YnJlYWs7Y2FzZSAxMTY6WC5jb21taXQoV1tVLTRdLFdbVV0sV1tVLTZdLFdbVS0yXSk7YnJlYWs7Y2FzZSAxMTc6dGhpcy4kPSIiO2JyZWFrO2Nhc2UgMTE4OnRoaXMuJD1XW1VdO2JyZWFrO2Nhc2UgMTE5OnRoaXMuJD1YLmNvbW1pdFR5cGUuTk9STUFMO2JyZWFrO2Nhc2UgMTIwOnRoaXMuJD1YLmNvbW1pdFR5cGUuUkVWRVJTRTticmVhaztjYXNlIDEyMTp0aGlzLiQ9WC5jb21taXRUeXBlLkhJR0hMSUdIVDticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OnMsNzp1LDEzOmQsNDc6cH0sezE6WzNdfSx7Mzo3LDQ6Miw1OnMsNzp1LDEzOmQsNDc6cH0sezY6OCw3OnYsODpbMSw5XSw5OlsxLDEwXSwxMDoxMSwxMzpifSxpKHksWzIsMTI0XSksaSh5LFsyLDEyNV0pLGkoeSxbMiwxMjZdKSx7MTpbMiwxXX0sezc6WzEsMTNdfSx7NjoxNCw3OnYsMTA6MTEsMTM6Yn0sezg6WzEsMTVdfSxpKFQsWzIsOV0sezExOjE2LDEyOlsxLDE3XX0pLGkoXyxbMiw4XSksezE6WzIsMl19LHs3OlsxLDE4XX0sezY6MTksNzp2LDEwOjExLDEzOmJ9LHs3OlsyLDZdLDEzOlsxLDIyXSwxNDoyMCwxNToyMSwxNjoyMywxNzoyNCwxODoyNSwxOTpbMSwyNl0sMjE6WzEsMjddLDIzOlsxLDI4XSwyNDpbMSwyOV0sMjU6MzAsMjY6WzEsMzFdLDI4OlsxLDM1XSwzMTpbMSwzNF0sMzc6WzEsMzNdLDQwOlsxLDMyXX0saShfLFsyLDddKSx7MTpbMiwzXX0sezc6WzEsMzZdfSxpKFQsWzIsMTBdKSx7NDozNyw3OnUsMTM6ZCw0NzpwfSxpKFQsWzIsMTJdKSxpKEEsWzIsMTNdKSxpKEEsWzIsMTRdKSxpKEEsWzIsMTVdKSx7MjA6WzEsMzhdfSx7MjI6WzEsMzldfSxpKEEsWzIsMThdKSxpKEEsWzIsMTldKSxpKEEsWzIsMjBdKSx7Mjc6NDAsMzM6UCw0NjpSfSxpKEEsWzIsMTE3XSx7NDE6NDMsMzI6WzEsNDZdLDMzOlsxLDQ4XSwzNTpbMSw0NF0sMzg6WzEsNDVdLDQyOlsxLDQ3XX0pLHsyNzo0OSwzMzpQLDQ2OlJ9LHszMjpbMSw1MF0sMzU6WzEsNTFdfSx7Mjc6NTIsMzM6UCw0NjpSfSx7MTpbMiw0XX0saShULFsyLDExXSksaShBLFsyLDE2XSksaShBLFsyLDE3XSksaShBLFsyLDIxXSksaShGLFsyLDEyMl0pLGkoRixbMiwxMjNdKSxpKEEsWzIsNTJdKSx7MzM6WzEsNTNdfSx7Mzk6NTQsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsNThdfSx7MzM6WzEsNTldfSxpKEEsWzIsMTE4XSksaShBLFsyLDM2XSx7MzI6WzEsNjBdLDM1OlsxLDYyXSwzODpbMSw2MV19KSx7MzM6WzEsNjNdfSx7MzM6WzEsNjRdLDM2OlsxLDY1XX0saShBLFsyLDIyXSx7Mjk6WzEsNjZdfSksaShBLFsyLDUzXSx7MzI6WzEsNjhdLDM4OlsxLDY3XSw0MjpbMSw2OV19KSxpKEEsWzIsNTRdLHszMjpbMSw3MV0sMzU6WzEsNzBdLDQyOlsxLDcyXX0pLGkoaWUsWzIsMTE5XSksaShpZSxbMiwxMjBdKSxpKGllLFsyLDEyMV0pLGkoQSxbMiw1N10sezM1OlsxLDczXSwzODpbMSw3NF0sNDI6WzEsNzVdfSksaShBLFsyLDY4XSx7MzI6WzEsNzhdLDM1OlsxLDc2XSwzODpbMSw3N119KSx7MzM6WzEsNzldfSx7Mzk6ODAsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsODFdfSxpKEEsWzIsMjRdLHszNDpbMSw4Ml0sMzU6WzEsODNdfSksezMyOlsxLDg0XX0sezMyOlsxLDg1XX0sezMwOlsxLDg2XX0sezM5Ojg3LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDg4XX0sezMzOlsxLDg5XX0sezMzOlsxLDkwXX0sezMzOlsxLDkxXX0sezMzOlsxLDkyXX0sezMzOlsxLDkzXX0sezM5Ojk0LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDk1XX0sezMzOlsxLDk2XX0sezM5Ojk3LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDk4XX0saShBLFsyLDM3XSx7MzU6WzEsMTAwXSwzODpbMSw5OV19KSxpKEEsWzIsMzhdLHszMjpbMSwxMDJdLDM1OlsxLDEwMV19KSxpKEEsWzIsMzldLHszMjpbMSwxMDNdLDM4OlsxLDEwNF19KSx7MzM6WzEsMTA1XX0sezMzOlsxLDEwNl0sMzY6WzEsMTA3XX0sezMzOlsxLDEwOF19LHszMzpbMSwxMDldfSxpKEEsWzIsMjNdKSxpKEEsWzIsNTVdLHszMjpbMSwxMTBdLDQyOlsxLDExMV19KSxpKEEsWzIsNTldLHszODpbMSwxMTJdLDQyOlsxLDExM119KSxpKEEsWzIsNjldLHszMjpbMSwxMTVdLDM4OlsxLDExNF19KSxpKEEsWzIsNTZdLHszMjpbMSwxMTZdLDQyOlsxLDExN119KSxpKEEsWzIsNjFdLHszNTpbMSwxMThdLDQyOlsxLDExOV19KSxpKEEsWzIsNzJdLHszMjpbMSwxMjFdLDM1OlsxLDEyMF19KSxpKEEsWzIsNThdLHszODpbMSwxMjJdLDQyOlsxLDEyM119KSxpKEEsWzIsNjBdLHszNTpbMSwxMjRdLDQyOlsxLDEyNV19KSxpKEEsWzIsNzNdLHszNTpbMSwxMjddLDM4OlsxLDEyNl19KSxpKEEsWzIsNzBdLHszMjpbMSwxMjldLDM4OlsxLDEyOF19KSxpKEEsWzIsNzFdLHszMjpbMSwxMzFdLDM1OlsxLDEzMF19KSxpKEEsWzIsNzRdLHszNTpbMSwxMzNdLDM4OlsxLDEzMl19KSx7Mzk6MTM0LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDEzNV19LHszMzpbMSwxMzZdfSx7MzM6WzEsMTM3XX0sezMzOlsxLDEzOF19LHszOToxMzksNDM6aiw0NDpLLDQ1OmVlfSxpKEEsWzIsMjVdLHszNTpbMSwxNDBdfSksaShBLFsyLDI2XSx7MzQ6WzEsMTQxXX0pLGkoQSxbMiwzMV0sezM0OlsxLDE0Ml19KSxpKEEsWzIsMjldLHszNDpbMSwxNDNdfSksaShBLFsyLDMwXSx7MzQ6WzEsMTQ0XX0pLHszMzpbMSwxNDVdfSx7MzM6WzEsMTQ2XX0sezM5OjE0Nyw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwxNDhdfSx7Mzk6MTQ5LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDE1MF19LHszMzpbMSwxNTFdfSx7MzM6WzEsMTUyXX0sezMzOlsxLDE1M119LHszMzpbMSwxNTRdfSx7MzM6WzEsMTU1XX0sezMzOlsxLDE1Nl19LHszOToxNTcsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsMTU4XX0sezMzOlsxLDE1OV19LHszMzpbMSwxNjBdfSx7Mzk6MTYxLDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDE2Ml19LHszOToxNjMsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsMTY0XX0sezMzOlsxLDE2NV19LHszMzpbMSwxNjZdfSx7Mzk6MTY3LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDE2OF19LGkoQSxbMiw0M10sezM1OlsxLDE2OV19KSxpKEEsWzIsNDRdLHszODpbMSwxNzBdfSksaShBLFsyLDQyXSx7MzI6WzEsMTcxXX0pLGkoQSxbMiw0NV0sezM1OlsxLDE3Ml19KSxpKEEsWzIsNDBdLHszODpbMSwxNzNdfSksaShBLFsyLDQxXSx7MzI6WzEsMTc0XX0pLHszMzpbMSwxNzVdLDM2OlsxLDE3Nl19LHszMzpbMSwxNzddfSx7MzM6WzEsMTc4XX0sezMzOlsxLDE3OV19LHszMzpbMSwxODBdfSxpKEEsWzIsNjZdLHs0MjpbMSwxODFdfSksaShBLFsyLDc5XSx7MzI6WzEsMTgyXX0pLGkoQSxbMiw2N10sezQyOlsxLDE4M119KSxpKEEsWzIsOTBdLHszODpbMSwxODRdfSksaShBLFsyLDgwXSx7MzI6WzEsMTg1XX0pLGkoQSxbMiw4OV0sezM4OlsxLDE4Nl19KSxpKEEsWzIsNjVdLHs0MjpbMSwxODddfSksaShBLFsyLDc4XSx7MzI6WzEsMTg4XX0pLGkoQSxbMiw2NF0sezQyOlsxLDE4OV19KSxpKEEsWzIsODRdLHszNTpbMSwxOTBdfSksaShBLFsyLDc3XSx7MzI6WzEsMTkxXX0pLGkoQSxbMiw4M10sezM1OlsxLDE5Ml19KSxpKEEsWzIsNjNdLHs0MjpbMSwxOTNdfSksaShBLFsyLDkxXSx7Mzg6WzEsMTk0XX0pLGkoQSxbMiw2Ml0sezQyOlsxLDE5NV19KSxpKEEsWzIsODVdLHszNTpbMSwxOTZdfSksaShBLFsyLDg2XSx7MzU6WzEsMTk3XX0pLGkoQSxbMiw5Ml0sezM4OlsxLDE5OF19KSxpKEEsWzIsNzZdLHszMjpbMSwxOTldfSksaShBLFsyLDg3XSx7Mzg6WzEsMjAwXX0pLGkoQSxbMiw3NV0sezMyOlsxLDIwMV19KSxpKEEsWzIsODFdLHszNTpbMSwyMDJdfSksaShBLFsyLDgyXSx7MzU6WzEsMjAzXX0pLGkoQSxbMiw4OF0sezM4OlsxLDIwNF19KSx7MzM6WzEsMjA1XX0sezM5OjIwNiw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwyMDddfSx7MzM6WzEsMjA4XX0sezM5OjIwOSw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwyMTBdfSxpKEEsWzIsMjddKSxpKEEsWzIsMzJdKSxpKEEsWzIsMjhdKSxpKEEsWzIsMzNdKSxpKEEsWzIsMzRdKSxpKEEsWzIsMzVdKSx7MzM6WzEsMjExXX0sezMzOlsxLDIxMl19LHszMzpbMSwyMTNdfSx7Mzk6MjE0LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDIxNV19LHszOToyMTYsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsMjE3XX0sezMzOlsxLDIxOF19LHszMzpbMSwyMTldfSx7MzM6WzEsMjIwXX0sezMzOlsxLDIyMV19LHszMzpbMSwyMjJdfSx7MzM6WzEsMjIzXX0sezM5OjIyNCw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwyMjVdfSx7MzM6WzEsMjI2XX0sezMzOlsxLDIyN119LHszOToyMjgsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsMjI5XX0sezM5OjIzMCw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwyMzFdfSx7MzM6WzEsMjMyXX0sezMzOlsxLDIzM119LHszOToyMzQsNDM6aiw0NDpLLDQ1OmVlfSxpKEEsWzIsNDZdKSxpKEEsWzIsNDhdKSxpKEEsWzIsNDddKSxpKEEsWzIsNDldKSxpKEEsWzIsNTFdKSxpKEEsWzIsNTBdKSxpKEEsWzIsMTA3XSksaShBLFsyLDEwOF0pLGkoQSxbMiwxMDVdKSxpKEEsWzIsMTA2XSksaShBLFsyLDExMF0pLGkoQSxbMiwxMDldKSxpKEEsWzIsMTE0XSksaShBLFsyLDExM10pLGkoQSxbMiwxMTJdKSxpKEEsWzIsMTExXSksaShBLFsyLDExNl0pLGkoQSxbMiwxMTVdKSxpKEEsWzIsMTA0XSksaShBLFsyLDEwM10pLGkoQSxbMiwxMDJdKSxpKEEsWzIsMTAxXSksaShBLFsyLDk5XSksaShBLFsyLDEwMF0pLGkoQSxbMiw5OF0pLGkoQSxbMiw5N10pLGkoQSxbMiw5Nl0pLGkoQSxbMiw5NV0pLGkoQSxbMiw5M10pLGkoQSxbMiw5NF0pXSxkZWZhdWx0QWN0aW9uczp7NzpbMiwxXSwxMzpbMiwyXSwxODpbMiwzXSwzNjpbMiw0XX0scGFyc2VFcnJvcjpmdW5jdGlvbihuZSxzZSl7aWYoc2UucmVjb3ZlcmFibGUpdGhpcy50cmFjZShuZSk7ZWxzZXt2YXIgZGU9bmV3IEVycm9yKG5lKTt0aHJvdyBkZS5oYXNoPXNlLGRlfX0scGFyc2U6ZnVuY3Rpb24obmUpe3ZhciBzZT10aGlzLGRlPVswXSxYPVtdLGdlPVtudWxsXSxXPVtdLHhlPXRoaXMudGFibGUsVT0iIixGZT0wLFBlPTAsamU9MixJZT0xLFNlPVcuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksQ2U9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxrZT17eXk6e319O2Zvcih2YXIgS2UgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxLZSkmJihrZS55eVtLZV09dGhpcy55eVtLZV0pO0NlLnNldElucHV0KG5lLGtlLnl5KSxrZS55eS5sZXhlcj1DZSxrZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgQ2UueXlsbG9jPiJ1IiYmKENlLnl5bGxvYz17fSk7dmFyIEZ0PUNlLnl5bGxvYztXLnB1c2goRnQpO3ZhciBOZT1DZS5vcHRpb25zJiZDZS5vcHRpb25zLnJhbmdlczt0eXBlb2Yga2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9a2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gZ24oKXt2YXIgaHQ7cmV0dXJuIGh0PVgucG9wKCl8fENlLmxleCgpfHxJZSx0eXBlb2YgaHQhPSJudW1iZXIiJiYoaHQgaW5zdGFuY2VvZiBBcnJheSYmKFg9aHQsaHQ9WC5wb3AoKSksaHQ9c2Uuc3ltYm9sc19baHRdfHxodCksaHR9Zm9yKHZhciBfdCxFdCxHdCxsbix4dD17fSxQdCxRZSxEdCxrdDs7KXtpZihFdD1kZVtkZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tFdF0/R3Q9dGhpcy5kZWZhdWx0QWN0aW9uc1tFdF06KChfdD09PW51bGx8fHR5cGVvZiBfdD4idSIpJiYoX3Q9Z24oKSksR3Q9eGVbRXRdJiZ4ZVtFdF1bX3RdKSx0eXBlb2YgR3Q+InUifHwhR3QubGVuZ3RofHwhR3RbMF0pe3ZhciBPbj0iIjtrdD1bXTtmb3IoUHQgaW4geGVbRXRdKXRoaXMudGVybWluYWxzX1tQdF0mJlB0PmplJiZrdC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bUHRdKyInIik7Q2Uuc2hvd1Bvc2l0aW9uP09uPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEZlKzEpK2A6CmArQ2Uuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtrdC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW190XXx8X3QpKyInIjpPbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhGZSsxKSsiOiBVbmV4cGVjdGVkICIrKF90PT1JZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfdF18fF90KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPbix7dGV4dDpDZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX3RdfHxfdCxsaW5lOkNlLnl5bGluZW5vLGxvYzpGdCxleHBlY3RlZDprdH0pfWlmKEd0WzBdaW5zdGFuY2VvZiBBcnJheSYmR3QubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitFdCsiLCB0b2tlbjogIitfdCk7c3dpdGNoKEd0WzBdKXtjYXNlIDE6ZGUucHVzaChfdCksZ2UucHVzaChDZS55eXRleHQpLFcucHVzaChDZS55eWxsb2MpLGRlLnB1c2goR3RbMV0pLF90PW51bGwsUGU9Q2UueXlsZW5nLFU9Q2UueXl0ZXh0LEZlPUNlLnl5bGluZW5vLEZ0PUNlLnl5bGxvYzticmVhaztjYXNlIDI6aWYoUWU9dGhpcy5wcm9kdWN0aW9uc19bR3RbMV1dWzFdLHh0LiQ9Z2VbZ2UubGVuZ3RoLVFlXSx4dC5fJD17Zmlyc3RfbGluZTpXW1cubGVuZ3RoLShRZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOldbVy5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpXW1cubGVuZ3RoLShRZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpXW1cubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxOZSYmKHh0Ll8kLnJhbmdlPVtXW1cubGVuZ3RoLShRZXx8MSldLnJhbmdlWzBdLFdbVy5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxsbj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeHQsW1UsUGUsRmUsa2UueXksR3RbMV0sZ2UsV10uY29uY2F0KFNlKSksdHlwZW9mIGxuPCJ1IilyZXR1cm4gbG47UWUmJihkZT1kZS5zbGljZSgwLC0xKlFlKjIpLGdlPWdlLnNsaWNlKDAsLTEqUWUpLFc9Vy5zbGljZSgwLC0xKlFlKSksZGUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tHdFsxXV1bMF0pLGdlLnB1c2goeHQuJCksVy5wdXNoKHh0Ll8kKSxEdD14ZVtkZVtkZS5sZW5ndGgtMl1dW2RlW2RlLmxlbmd0aC0xXV0sZGUucHVzaChEdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LHBlPWZ1bmN0aW9uKCl7dmFyIGFlPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHNlLGRlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHNlLGRlKTtlbHNlIHRocm93IG5ldyBFcnJvcihzZSl9LHNldElucHV0OmZ1bmN0aW9uKG5lLHNlKXtyZXR1cm4gdGhpcy55eT1zZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9bmUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1uZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9bmUsdGhpcy5tYXRjaGVkKz1uZTt2YXIgc2U9bmUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBzZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksbmV9LHVucHV0OmZ1bmN0aW9uKG5lKXt2YXIgc2U9bmUubGVuZ3RoLGRlPW5lLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9bmUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXNlKSx0aGlzLm9mZnNldC09c2U7dmFyIFg9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksZGUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1kZS5sZW5ndGgtMSk7dmFyIGdlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpkZT8oZGUubGVuZ3RoPT09WC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK1hbWC5sZW5ndGgtZGUubGVuZ3RoXS5sZW5ndGgtZGVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1zZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtnZVswXSxnZVswXSt0aGlzLnl5bGVuZy1zZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKG5lKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobmUpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4obmUubGVuZ3RoPjIwPyIuLi4iOiIiKStuZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBuZT10aGlzLm1hdGNoO3JldHVybiBuZS5sZW5ndGg8MjAmJihuZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtbmUubGVuZ3RoKSksKG5lLnN1YnN0cigwLDIwKSsobmUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBuZT10aGlzLnBhc3RJbnB1dCgpLHNlPW5ldyBBcnJheShuZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBuZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArc2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKG5lLHNlKXt2YXIgZGUsWCxnZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZ2U9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZ2UueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksWD1uZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksWCYmKHRoaXMueXlsaW5lbm8rPVgubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46WD9YW1gubGVuZ3RoLTFdLmxlbmd0aC1YW1gubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rbmVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9bmVbMF0sdGhpcy5tYXRjaCs9bmVbMF0sdGhpcy5tYXRjaGVzPW5lLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKG5lWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1uZVswXSxkZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxzZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxkZSlyZXR1cm4gZGU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFcgaW4gZ2UpdGhpc1tXXT1nZVtXXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBuZSxzZSxkZSxYO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGdlPXRoaXMuX2N1cnJlbnRSdWxlcygpLFc9MDtXPGdlLmxlbmd0aDtXKyspaWYoZGU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tnZVtXXV0pLGRlJiYoIXNlfHxkZVswXS5sZW5ndGg+c2VbMF0ubGVuZ3RoKSl7aWYoc2U9ZGUsWD1XLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKG5lPXRoaXMudGVzdF9tYXRjaChkZSxnZVtXXSksbmUhPT0hMSlyZXR1cm4gbmU7aWYodGhpcy5fYmFja3RyYWNrKXtzZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBzZT8obmU9dGhpcy50ZXN0X21hdGNoKHNlLGdlW1hdKSxuZSE9PSExP25lOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgc2U9dGhpcy5uZXh0KCk7cmV0dXJuIHNlfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihzZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHNlKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgc2U9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gc2U+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihzZSl7cmV0dXJuIHNlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoc2V8fDApLHNlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbc2VdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHNlKXt0aGlzLmJlZ2luKHNlKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihzZSxkZSxYLGdlKXtzd2l0Y2goWCl7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxOTtjYXNlIDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDI6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDIxO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgNDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgNzpyZXR1cm4gMTM7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpicmVhaztjYXNlIDEwOnJldHVybiA1O2Nhc2UgMTE6cmV0dXJuIDQwO2Nhc2UgMTI6cmV0dXJuIDMyO2Nhc2UgMTM6cmV0dXJuIDM4O2Nhc2UgMTQ6cmV0dXJuIDQyO2Nhc2UgMTU6cmV0dXJuIDQzO2Nhc2UgMTY6cmV0dXJuIDQ0O2Nhc2UgMTc6cmV0dXJuIDQ1O2Nhc2UgMTg6cmV0dXJuIDM1O2Nhc2UgMTk6cmV0dXJuIDI4O2Nhc2UgMjA6cmV0dXJuIDI5O2Nhc2UgMjE6cmV0dXJuIDM3O2Nhc2UgMjI6cmV0dXJuIDMxO2Nhc2UgMjM6cmV0dXJuIDM0O2Nhc2UgMjQ6cmV0dXJuIDI2O2Nhc2UgMjU6cmV0dXJuIDk7Y2FzZSAyNjpyZXR1cm4gOTtjYXNlIDI3OnJldHVybiA4O2Nhc2UgMjg6cmV0dXJuIkNBUkVUIjtjYXNlIDI5OnRoaXMuYmVnaW4oIm9wdGlvbnMiKTticmVhaztjYXNlIDMwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDMxOnJldHVybiAxMjtjYXNlIDMyOnJldHVybiAzNjtjYXNlIDMzOnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMzQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzU6cmV0dXJuIDMzO2Nhc2UgMzY6cmV0dXJuIDMwO2Nhc2UgMzc6cmV0dXJuIDQ2O2Nhc2UgMzg6cmV0dXJuIDd9fSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oihccj9cbikrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpnaXRHcmFwaFxiKS9pLC9eKD86Y29tbWl0KD89XHN8JCkpL2ksL14oPzppZDopL2ksL14oPzp0eXBlOikvaSwvXig/Om1zZzopL2ksL14oPzpOT1JNQUxcYikvaSwvXig/OlJFVkVSU0VcYikvaSwvXig/OkhJR0hMSUdIVFxiKS9pLC9eKD86dGFnOikvaSwvXig/OmJyYW5jaCg/PVxzfCQpKS9pLC9eKD86b3JkZXI6KS9pLC9eKD86bWVyZ2UoPz1cc3wkKSkvaSwvXig/OmNoZXJyeS1waWNrKD89XHN8JCkpL2ksL14oPzpwYXJlbnQ6KS9pLC9eKD86Y2hlY2tvdXQoPz1cc3wkKSkvaSwvXig/OkxSXGIpL2ksL14oPzpUQlxiKS9pLC9eKD86OikvaSwvXig/OlxeKS9pLC9eKD86b3B0aW9uc1xyP1xuKS9pLC9eKD86WyBcclxuXHRdK2VuZFxiKS9pLC9eKD86W1xzXFNdKyg/PVsgXHJcblx0XStlbmQpKS9pLC9eKD86WyJdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbMC05XSsoPz1cc3wkKSkvaSwvXig/Olx3KFstXC4vXHddKlstXHddKT8pL2ksL14oPzokKS9pLC9eKD86XHMrKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNSw2XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxvcHRpb25zOntydWxlczpbMzAsMzFdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMzQsMzVdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMyLDMzLDM2LDM3LDM4LDM5XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGFlfSgpO29lLmxleGVyPXBlO2Z1bmN0aW9uIGJlKCl7dGhpcy55eT17fX1yZXR1cm4gYmUucHJvdG90eXBlPW9lLG9lLlBhcnNlcj1iZSxuZXcgYmV9KCk7S21lLnBhcnNlcj1LbWU7Y29uc3QgdHRuPUttZTtsZXQgb0o9cXQoKS5naXRHcmFwaC5tYWluQnJhbmNoTmFtZSxudG49cXQoKS5naXRHcmFwaC5tYWluQnJhbmNoT3JkZXIsYjE9e30sTnA9bnVsbCxPUj17fTtPUltvSl09e25hbWU6b0osb3JkZXI6bnRufTtsZXQgRjA9e307RjBbb0pdPU5wO2xldCBzZD1vSixxVWU9IkxSIixZQz0wO2Z1bmN0aW9uIFdtZSgpe3JldHVybiBtamUoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gcnRuKGkscyl7Y29uc3QgdT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpLnJlZHVjZSgoZCxwKT0+e2NvbnN0IHY9cyhwKTtyZXR1cm4gdVt2XXx8KHVbdl09ITAsZC5wdXNoKHApKSxkfSxbXSl9Y29uc3QgaXRuPWZ1bmN0aW9uKGkpe3FVZT1pfTtsZXQgSFVlPXt9O2NvbnN0IHN0bj1mdW5jdGlvbihpKXtYZS5kZWJ1Zygib3B0aW9ucyBzdHIiLGkpLGk9aSYmaS50cmltKCksaT1pfHwie30iO3RyeXtIVWU9SlNPTi5wYXJzZShpKX1jYXRjaChzKXtYZS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zIixzLm1lc3NhZ2UpfX0sYXRuPWZ1bmN0aW9uKCl7cmV0dXJuIEhVZX0sb3RuPWZ1bmN0aW9uKGkscyx1LGQpe1hlLmRlYnVnKCJFbnRlcmluZyBjb21taXQ6IixpLHMsdSxkKSxzPWNpLnNhbml0aXplVGV4dChzLHF0KCkpLGk9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSksZD1jaS5zYW5pdGl6ZVRleHQoZCxxdCgpKTtjb25zdCBwPXtpZDpzfHxZQysiLSIrV21lKCksbWVzc2FnZTppLHNlcTpZQysrLHR5cGU6dXx8VUQuTk9STUFMLHRhZzpkfHwiIixwYXJlbnRzOk5wPT1udWxsP1tdOltOcC5pZF0sYnJhbmNoOnNkfTtOcD1wLGIxW3AuaWRdPXAsRjBbc2RdPXAuaWQsWGUuZGVidWcoImluIHB1c2hDb21taXQgIitwLmlkKX0sY3RuPWZ1bmN0aW9uKGkscyl7aWYoaT1jaS5zYW5pdGl6ZVRleHQoaSxxdCgpKSxGMFtpXT09PXZvaWQgMClGMFtpXT1OcCE9bnVsbD9OcC5pZDpudWxsLE9SW2ldPXtuYW1lOmksb3JkZXI6cz9wYXJzZUludChzLDEwKTpudWxsfSxWVWUoaSksWGUuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpO2Vsc2V7bGV0IHU9bmV3IEVycm9yKCdUcnlpbmcgdG8gY3JlYXRlIGFuIGV4aXN0aW5nIGJyYW5jaC4gKEhlbHA6IEVpdGhlciB1c2UgYSBuZXcgbmFtZSBpZiB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgYnJhbmNoIG9yIHRyeSB1c2luZyAiY2hlY2tvdXQgJytpKyciKScpO3Rocm93IHUuaGFzaD17dGV4dDoiYnJhbmNoICIraSx0b2tlbjoiYnJhbmNoICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjaGVja291dCAnK2krJyInXX0sdX19LHV0bj1mdW5jdGlvbihpLHMsdSxkKXtpPWNpLnNhbml0aXplVGV4dChpLHF0KCkpLHM9Y2kuc2FuaXRpemVUZXh0KHMscXQoKSk7Y29uc3QgcD1iMVtGMFtzZF1dLHY9YjFbRjBbaV1dO2lmKHNkPT09aSl7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ2Fubm90IG1lcmdlIGEgYnJhbmNoIHRvIGl0c2VsZicpO3Rocm93IHkuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LHl9ZWxzZSBpZihwPT09dm9pZCAwfHwhcCl7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ3VycmVudCBicmFuY2ggKCcrc2QrIiloYXMgbm8gY29tbWl0cyIpO3Rocm93IHkuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjb21taXQiXX0seX1lbHNlIGlmKEYwW2ldPT09dm9pZCAwKXtsZXQgeT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCcmFuY2ggdG8gYmUgbWVyZ2VkICgnK2krIikgZG9lcyBub3QgZXhpc3QiKTt0aHJvdyB5Lmhhc2g9e3RleHQ6Im1lcmdlICIraSx0b2tlbjoibWVyZ2UgIitpLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiYnJhbmNoICIraV19LHl9ZWxzZSBpZih2PT09dm9pZCAwfHwhdil7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJytpKyIpIGhhcyBubyBjb21taXRzIik7dGhyb3cgeS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2ksdG9rZW46Im1lcmdlICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjb21taXQiJ119LHl9ZWxzZSBpZihwPT09dil7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQm90aCBicmFuY2hlcyBoYXZlIHNhbWUgaGVhZCcpO3Rocm93IHkuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LHl9ZWxzZSBpZihzJiZiMVtzXSE9PXZvaWQgMCl7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ29tbWl0IHdpdGggaWQ6JytzKyIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIElkIik7dGhyb3cgeS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2krcyt1K2QsdG9rZW46Im1lcmdlICIraStzK3UrZCxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIm1lcmdlICIraSsiICIrcysiX1VOSVFVRSAiK3UrIiAiK2RdfSx5fWNvbnN0IGI9e2lkOnN8fFlDKyItIitXbWUoKSxtZXNzYWdlOiJtZXJnZWQgYnJhbmNoICIraSsiIGludG8gIitzZCxzZXE6WUMrKyxwYXJlbnRzOltOcD09bnVsbD9udWxsOk5wLmlkLEYwW2ldXSxicmFuY2g6c2QsdHlwZTpVRC5NRVJHRSxjdXN0b21UeXBlOnUsY3VzdG9tSWQ6ISFzLHRhZzpkfHwiIn07TnA9YixiMVtiLmlkXT1iLEYwW3NkXT1iLmlkLFhlLmRlYnVnKEYwKSxYZS5kZWJ1ZygiaW4gbWVyZ2VCcmFuY2giKX0sbHRuPWZ1bmN0aW9uKGkscyx1LGQpe2lmKFhlLmRlYnVnKCJFbnRlcmluZyBjaGVycnlQaWNrOiIsaSxzLHUpLGk9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSkscz1jaS5zYW5pdGl6ZVRleHQocyxxdCgpKSx1PWNpLnNhbml0aXplVGV4dCh1LHF0KCkpLGQ9Y2kuc2FuaXRpemVUZXh0KGQscXQoKSksIWl8fGIxW2ldPT09dm9pZCAwKXtsZXQgYj1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5UGljayIuIFNvdXJjZSBjb21taXQgaWQgc2hvdWxkIGV4aXN0IGFuZCBwcm92aWRlZCcpO3Rocm93IGIuaGFzaD17dGV4dDoiY2hlcnJ5UGljayAiK2krIiAiK3MsdG9rZW46ImNoZXJyeVBpY2sgIitpKyIgIitzLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LGJ9bGV0IHA9YjFbaV0sdj1wLmJyYW5jaDtpZihkJiYhKEFycmF5LmlzQXJyYXkocC5wYXJlbnRzKSYmcC5wYXJlbnRzLmluY2x1ZGVzKGQpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHBhcmVudCBjb21taXQgaXMgbm90IGFuIGltbWVkaWF0ZSBwYXJlbnQgb2YgdGhlIGNoZXJyeS1waWNrZWQgY29tbWl0LiIpO2lmKHAudHlwZT09PVVELk1FUkdFJiYhZCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB1c2FnZSBvZiBjaGVycnktcGljazogSWYgdGhlIHNvdXJjZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIGFuIGltbWVkaWF0ZSBwYXJlbnQgY29tbWl0IG11c3QgYmUgc3BlY2lmaWVkLiIpO2lmKCFzfHxiMVtzXT09PXZvaWQgMCl7aWYodj09PXNkKXtsZXQgVD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5UGljayIuIFNvdXJjZSBjb21taXQgaXMgYWxyZWFkeSBvbiBjdXJyZW50IGJyYW5jaCcpO3Rocm93IFQuaGFzaD17dGV4dDoiY2hlcnJ5UGljayAiK2krIiAiK3MsdG9rZW46ImNoZXJyeVBpY2sgIitpKyIgIitzLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LFR9Y29uc3QgYj1iMVtGMFtzZF1dO2lmKGI9PT12b2lkIDB8fCFiKXtsZXQgVD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5LXBpY2siLiBDdXJyZW50IGJyYW5jaCAoJytzZCsiKWhhcyBubyBjb21taXRzIik7dGhyb3cgVC5oYXNoPXt0ZXh0OiJjaGVycnlQaWNrICIraSsiICIrcyx0b2tlbjoiY2hlcnJ5UGljayAiK2krIiAiK3MsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sVH1jb25zdCB5PXtpZDpZQysiLSIrV21lKCksbWVzc2FnZToiY2hlcnJ5LXBpY2tlZCAiK3ArIiBpbnRvICIrc2Qsc2VxOllDKysscGFyZW50czpbTnA9PW51bGw/bnVsbDpOcC5pZCxwLmlkXSxicmFuY2g6c2QsdHlwZTpVRC5DSEVSUllfUElDSyx0YWc6dT8/YGNoZXJyeS1waWNrOiR7cC5pZH0ke3AudHlwZT09PVVELk1FUkdFP2B8cGFyZW50OiR7ZH1gOiIifWB9O05wPXksYjFbeS5pZF09eSxGMFtzZF09eS5pZCxYZS5kZWJ1ZyhGMCksWGUuZGVidWcoImluIGNoZXJyeVBpY2siKX19LFZVZT1mdW5jdGlvbihpKXtpZihpPWNpLnNhbml0aXplVGV4dChpLHF0KCkpLEYwW2ldPT09dm9pZCAwKXtsZXQgcz1uZXcgRXJyb3IoJ1RyeWluZyB0byBjaGVja291dCBicmFuY2ggd2hpY2ggaXMgbm90IHlldCBjcmVhdGVkLiAoSGVscCB0cnkgdXNpbmcgImJyYW5jaCAnK2krJyIpJyk7dGhyb3cgcy5oYXNoPXt0ZXh0OiJjaGVja291dCAiK2ksdG9rZW46ImNoZWNrb3V0ICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJicmFuY2ggJytpKyciJ119LHN9ZWxzZXtzZD1pO2NvbnN0IHM9RjBbc2RdO05wPWIxW3NdfX07ZnVuY3Rpb24gVVVlKGkscyx1KXtjb25zdCBkPWkuaW5kZXhPZihzKTtkPT09LTE/aS5wdXNoKHUpOmkuc3BsaWNlKGQsMSx1KX1mdW5jdGlvbiBHVWUoaSl7Y29uc3Qgcz1pLnJlZHVjZSgocCx2KT0+cC5zZXE+di5zZXE/cDp2LGlbMF0pO2xldCB1PSIiO2kuZm9yRWFjaChmdW5jdGlvbihwKXtwPT09cz91Kz0iCSoiOnUrPSIJfCJ9KTtjb25zdCBkPVt1LHMuaWQscy5zZXFdO2ZvcihsZXQgcCBpbiBGMClGMFtwXT09PXMuaWQmJmQucHVzaChwKTtpZihYZS5kZWJ1ZyhkLmpvaW4oIiAiKSkscy5wYXJlbnRzJiZzLnBhcmVudHMubGVuZ3RoPT0yKXtjb25zdCBwPWIxW3MucGFyZW50c1swXV07VVVlKGkscyxwKSxpLnB1c2goYjFbcy5wYXJlbnRzWzFdXSl9ZWxzZXtpZihzLnBhcmVudHMubGVuZ3RoPT0wKXJldHVybjt7Y29uc3QgcD1iMVtzLnBhcmVudHNdO1VVZShpLHMscCl9fWk9cnRuKGkscD0+cC5pZCksR1VlKGkpfWNvbnN0IGh0bj1mdW5jdGlvbigpe1hlLmRlYnVnKGIxKTtjb25zdCBpPUtVZSgpWzBdO0dVZShbaV0pfSxmdG49ZnVuY3Rpb24oKXtiMT17fSxOcD1udWxsO2xldCBpPXF0KCkuZ2l0R3JhcGgubWFpbkJyYW5jaE5hbWUscz1xdCgpLmdpdEdyYXBoLm1haW5CcmFuY2hPcmRlcjtGMD17fSxGMFtpXT1udWxsLE9SPXt9LE9SW2ldPXtuYW1lOmksb3JkZXI6c30sc2Q9aSxZQz0wLFBnKCl9LGR0bj1mdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKE9SKS5tYXAoKHMsdSk9PnMub3JkZXIhPT1udWxsP3M6ey4uLnMsb3JkZXI6cGFyc2VGbG9hdChgMC4ke3V9YCwxMCl9KS5zb3J0KChzLHUpPT5zLm9yZGVyLXUub3JkZXIpLm1hcCgoe25hbWU6c30pPT4oe25hbWU6c30pKX0sZ3RuPWZ1bmN0aW9uKCl7cmV0dXJuIEYwfSxwdG49ZnVuY3Rpb24oKXtyZXR1cm4gYjF9LEtVZT1mdW5jdGlvbigpe2NvbnN0IGk9T2JqZWN0LmtleXMoYjEpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gYjFbc119KTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKHMpe1hlLmRlYnVnKHMuaWQpfSksaS5zb3J0KChzLHUpPT5zLnNlcS11LnNlcSksaX0sYnRuPWZ1bmN0aW9uKCl7cmV0dXJuIHNkfSxtdG49ZnVuY3Rpb24oKXtyZXR1cm4gcVVlfSx2dG49ZnVuY3Rpb24oKXtyZXR1cm4gTnB9LFVEPXtOT1JNQUw6MCxSRVZFUlNFOjEsSElHSExJR0hUOjIsTUVSR0U6MyxDSEVSUllfUElDSzo0fSx3dG49e2dldENvbmZpZzooKT0+cXQoKS5naXRHcmFwaCxzZXREaXJlY3Rpb246aXRuLHNldE9wdGlvbnM6c3RuLGdldE9wdGlvbnM6YXRuLGNvbW1pdDpvdG4sYnJhbmNoOmN0bixtZXJnZTp1dG4sY2hlcnJ5UGljazpsdG4sY2hlY2tvdXQ6VlVlLHByZXR0eVByaW50Omh0bixjbGVhcjpmdG4sZ2V0QnJhbmNoZXNBc09iakFycmF5OmR0bixnZXRCcmFuY2hlczpndG4sZ2V0Q29tbWl0czpwdG4sZ2V0Q29tbWl0c0FycmF5OktVZSxnZXRDdXJyZW50QnJhbmNoOmJ0bixnZXREaXJlY3Rpb246bXRuLGdldEhlYWQ6dnRuLHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwLHNldERpYWdyYW1UaXRsZTpjbSxnZXREaWFncmFtVGl0bGU6QXAsY29tbWl0VHlwZTpVRH07bGV0IE5SPXt9O2NvbnN0IGFkPXtOT1JNQUw6MCxSRVZFUlNFOjEsSElHSExJR0hUOjIsTUVSR0U6MyxDSEVSUllfUElDSzo0fSxYQz04O2xldCBIMj17fSxINz17fSxjSj1bXSxQUj0wLFIwPSJMUiI7Y29uc3QgeXRuPSgpPT57SDI9e30sSDc9e30sTlI9e30sUFI9MCxjSj1bXSxSMD0iTFIifSxXVWU9aT0+e2NvbnN0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtsZXQgdT1bXTt0eXBlb2YgaT09InN0cmluZyI/dT1pLnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6QXJyYXkuaXNBcnJheShpKT91PWk6dT1bXTtmb3IoY29uc3QgZCBvZiB1KXtjb25zdCBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Auc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikscC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikscC5zZXRBdHRyaWJ1dGUoIngiLCIwIikscC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IikscC50ZXh0Q29udGVudD1kLnRyaW0oKSxzLmFwcGVuZENoaWxkKHApfXJldHVybiBzfSx4dG49aT0+e2xldCBzPSIiLHU9MDtyZXR1cm4gaS5mb3JFYWNoKGQ9Pntjb25zdCBwPVIwPT09IlRCIj9IN1tkXS55Okg3W2RdLng7cD49dSYmKHM9ZCx1PXApfSksc3x8dm9pZCAwfSxZVWU9KGkscyx1KT0+e2NvbnN0IGQ9cXQoKS5naXRHcmFwaCxwPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtYnVsbGV0cyIpLHY9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1sYWJlbHMiKTtsZXQgYj0wO1IwPT09IlRCIiYmKGI9MzApO2NvbnN0IFQ9T2JqZWN0LmtleXMocykuc29ydCgoUixGKT0+c1tSXS5zZXEtc1tGXS5zZXEpLF89ZC5wYXJhbGxlbENvbW1pdHMsQT0xMCxQPTQwO1QuZm9yRWFjaChSPT57Y29uc3QgRj1zW1JdO2lmKF8paWYoRi5wYXJlbnRzLmxlbmd0aCl7Y29uc3QgaWU9eHRuKEYucGFyZW50cyk7Yj1SMD09PSJUQiI/SDdbaWVdLnkrUDpIN1tpZV0ueCtQfWVsc2UgYj0wLFIwPT09IlRCIiYmKGI9MzApO2NvbnN0IGo9YitBLEs9UjA9PT0iVEIiP2o6SDJbRi5icmFuY2hdLnBvcyxlZT1SMD09PSJUQiI/SDJbRi5icmFuY2hdLnBvczpqO2lmKHUpe2xldCBpZSxvZT1GLmN1c3RvbVR5cGUhPT12b2lkIDAmJkYuY3VzdG9tVHlwZSE9PSIiP0YuY3VzdG9tVHlwZTpGLnR5cGU7c3dpdGNoKG9lKXtjYXNlIGFkLk5PUk1BTDppZT0iY29tbWl0LW5vcm1hbCI7YnJlYWs7Y2FzZSBhZC5SRVZFUlNFOmllPSJjb21taXQtcmV2ZXJzZSI7YnJlYWs7Y2FzZSBhZC5ISUdITElHSFQ6aWU9ImNvbW1pdC1oaWdobGlnaHQiO2JyZWFrO2Nhc2UgYWQuTUVSR0U6aWU9ImNvbW1pdC1tZXJnZSI7YnJlYWs7Y2FzZSBhZC5DSEVSUllfUElDSzppZT0iY29tbWl0LWNoZXJyeS1waWNrIjticmVhaztkZWZhdWx0OmllPSJjb21taXQtbm9ybWFsIn1pZihvZT09PWFkLkhJR0hMSUdIVCl7Y29uc3QgcGU9cC5hcHBlbmQoInJlY3QiKTtwZS5hdHRyKCJ4IixlZS0xMCkscGUuYXR0cigieSIsSy0xMCkscGUuYXR0cigiaGVpZ2h0IiwyMCkscGUuYXR0cigid2lkdGgiLDIwKSxwZS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0YuaWR9IGNvbW1pdC1oaWdobGlnaHQke0gyW0YuYnJhbmNoXS5pbmRleCVYQ30gJHtpZX0tb3V0ZXJgKSxwLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGVlLTYpLmF0dHIoInkiLEstNikuYXR0cigiaGVpZ2h0IiwxMikuYXR0cigid2lkdGgiLDEyKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0YuaWR9IGNvbW1pdCR7SDJbRi5icmFuY2hdLmluZGV4JVhDfSAke2llfS1pbm5lcmApfWVsc2UgaWYob2U9PT1hZC5DSEVSUllfUElDSylwLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGVlKS5hdHRyKCJjeSIsSykuYXR0cigiciIsMTApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Ri5pZH0gJHtpZX1gKSxwLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGVlLTMpLmF0dHIoImN5IixLKzIpLmF0dHIoInIiLDIuNzUpLmF0dHIoImZpbGwiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtGLmlkfSAke2llfWApLHAuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZWUrMykuYXR0cigiY3kiLEsrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0YuaWR9ICR7aWV9YCkscC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsZWUrMykuYXR0cigieTEiLEsrMSkuYXR0cigieDIiLGVlKS5hdHRyKCJ5MiIsSy01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtGLmlkfSAke2llfWApLHAuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGVlLTMpLmF0dHIoInkxIixLKzEpLmF0dHIoIngyIixlZSkuYXR0cigieTIiLEstNSkuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Ri5pZH0gJHtpZX1gKTtlbHNle2NvbnN0IHBlPXAuYXBwZW5kKCJjaXJjbGUiKTtpZihwZS5hdHRyKCJjeCIsZWUpLHBlLmF0dHIoImN5IixLKSxwZS5hdHRyKCJyIixGLnR5cGU9PT1hZC5NRVJHRT85OjEwKSxwZS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0YuaWR9IGNvbW1pdCR7SDJbRi5icmFuY2hdLmluZGV4JVhDfWApLG9lPT09YWQuTUVSR0Upe2NvbnN0IGJlPXAuYXBwZW5kKCJjaXJjbGUiKTtiZS5hdHRyKCJjeCIsZWUpLGJlLmF0dHIoImN5IixLKSxiZS5hdHRyKCJyIiw2KSxiZS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2llfSAke0YuaWR9IGNvbW1pdCR7SDJbRi5icmFuY2hdLmluZGV4JVhDfWApfW9lPT09YWQuUkVWRVJTRSYmcC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTSAke2VlLTV9LCR7Sy01fUwke2VlKzV9LCR7Sys1fU0ke2VlLTV9LCR7Sys1fUwke2VlKzV9LCR7Sy01fWApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7aWV9ICR7Ri5pZH0gY29tbWl0JHtIMltGLmJyYW5jaF0uaW5kZXglWEN9YCl9fWlmKFIwPT09IlRCIj9IN1tGLmlkXT17eDplZSx5Omp9Okg3W0YuaWRdPXt4OmoseTpLfSx1KXtpZihGLnR5cGUhPT1hZC5DSEVSUllfUElDSyYmKEYuY3VzdG9tSWQmJkYudHlwZT09PWFkLk1FUkdFfHxGLnR5cGUhPT1hZC5NRVJHRSkmJmQuc2hvd0NvbW1pdExhYmVsKXtjb25zdCBwZT12LmFwcGVuZCgiZyIpLGJlPXBlLmluc2VydCgicmVjdCIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsLWJrZyIpLGFlPXBlLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLEsrMjUpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsIikudGV4dChGLmlkKTtsZXQgbmU9YWUubm9kZSgpLmdldEJCb3goKTtpZihiZS5hdHRyKCJ4IixqLW5lLndpZHRoLzItMikuYXR0cigieSIsSysxMy41KS5hdHRyKCJ3aWR0aCIsbmUud2lkdGgrMioyKS5hdHRyKCJoZWlnaHQiLG5lLmhlaWdodCsyKjIpLFIwPT09IlRCIiYmKGJlLmF0dHIoIngiLGVlLShuZS53aWR0aCs0KjQrNSkpLmF0dHIoInkiLEstMTIpLGFlLmF0dHIoIngiLGVlLShuZS53aWR0aCs0KjQpKS5hdHRyKCJ5IixLK25lLmhlaWdodC0xMikpLFIwIT09IlRCIiYmYWUuYXR0cigieCIsai1uZS53aWR0aC8yKSxkLnJvdGF0ZUNvbW1pdExhYmVsKWlmKFIwPT09IlRCIilhZS5hdHRyKCJ0cmFuc2Zvcm0iLCJyb3RhdGUoLTQ1LCAiK2VlKyIsICIrSysiKSIpLGJlLmF0dHIoInRyYW5zZm9ybSIsInJvdGF0ZSgtNDUsICIrZWUrIiwgIitLKyIpIik7ZWxzZXtsZXQgc2U9LTcuNS0obmUud2lkdGgrMTApLzI1KjkuNSxkZT0xMCtuZS53aWR0aC8yNSo4LjU7cGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrc2UrIiwgIitkZSsiKSByb3RhdGUoLTQ1LCAiK2IrIiwgIitLKyIpIil9fWlmKEYudGFnKXtjb25zdCBwZT12Lmluc2VydCgicG9seWdvbiIpLGJlPXYuYXBwZW5kKCJjaXJjbGUiKSxhZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLEstMTYpLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsIikudGV4dChGLnRhZyk7bGV0IG5lPWFlLm5vZGUoKS5nZXRCQm94KCk7YWUuYXR0cigieCIsai1uZS53aWR0aC8yKTtjb25zdCBzZT1uZS5oZWlnaHQvMixkZT1LLTE5LjI7cGUuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwtYmtnIikuYXR0cigicG9pbnRzIixgCiAgICAgICAgICAke2ItbmUud2lkdGgvMi00LzJ9LCR7ZGUrMn0KICAgICAgICAgICR7Yi1uZS53aWR0aC8yLTQvMn0sJHtkZS0yfQogICAgICAgICAgJHtqLW5lLndpZHRoLzItNH0sJHtkZS1zZS0yfQogICAgICAgICAgJHtqK25lLndpZHRoLzIrNH0sJHtkZS1zZS0yfQogICAgICAgICAgJHtqK25lLndpZHRoLzIrNH0sJHtkZStzZSsyfQogICAgICAgICAgJHtqLW5lLndpZHRoLzItNH0sJHtkZStzZSsyfWApLGJlLmF0dHIoImN4IixiLW5lLndpZHRoLzIrNC8yKS5hdHRyKCJjeSIsZGUpLmF0dHIoInIiLDEuNSkuYXR0cigiY2xhc3MiLCJ0YWctaG9sZSIpLFIwPT09IlRCIiYmKHBlLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAgICAgICAke2VlfSwke2IrMn0KICAgICAgICAgICAgJHtlZX0sJHtiLTJ9CiAgICAgICAgICAgICR7ZWUrQX0sJHtiLXNlLTJ9CiAgICAgICAgICAgICR7ZWUrQStuZS53aWR0aCs0fSwke2Itc2UtMn0KICAgICAgICAgICAgJHtlZStBK25lLndpZHRoKzR9LCR7YitzZSsyfQogICAgICAgICAgICAke2VlK0F9LCR7YitzZSsyfWApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK2VlKyIsIitiKyIpIiksYmUuYXR0cigiY3giLGVlKzQvMikuYXR0cigiY3kiLGIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK2VlKyIsIitiKyIpIiksYWUuYXR0cigieCIsZWUrNSkuYXR0cigieSIsYiszKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTQsMTQpIHJvdGF0ZSg0NSwgIitlZSsiLCIrYisiKSIpKX19Yis9UCtBLGI+UFImJihQUj1iKX0pfSxrdG49KGkscyx1LGQscCk9Pntjb25zdCBiPShSMD09PSJUQiI/dS54PGQueDp1Lnk8ZC55KT9zLmJyYW5jaDppLmJyYW5jaCx5PV89Pl8uYnJhbmNoPT09YixUPV89Pl8uc2VxPmkuc2VxJiZfLnNlcTxzLnNlcTtyZXR1cm4gT2JqZWN0LnZhbHVlcyhwKS5zb21lKF89PlQoXykmJnkoXykpfSxCUj0oaSxzLHU9MCk9Pntjb25zdCBkPWkrTWF0aC5hYnMoaS1zKS8yO2lmKHU+NSlyZXR1cm4gZDtpZihjSi5ldmVyeShiPT5NYXRoLmFicyhiLWQpPj0xMCkpcmV0dXJuIGNKLnB1c2goZCksZDtjb25zdCB2PU1hdGguYWJzKGktcyk7cmV0dXJuIEJSKGkscy12LzUsdSsxKX0sRXRuPShpLHMsdSxkKT0+e2NvbnN0IHA9SDdbcy5pZF0sdj1IN1t1LmlkXSxiPWt0bihzLHUscCx2LGQpO2xldCB5PSIiLFQ9IiIsXz0wLEE9MCxQPUgyW3UuYnJhbmNoXS5pbmRleDt1LnR5cGU9PT1hZC5NRVJHRSYmcy5pZCE9PXUucGFyZW50c1swXSYmKFA9SDJbcy5icmFuY2hdLmluZGV4KTtsZXQgUjtpZihiKXt5PSJBIDEwIDEwLCAwLCAwLCAwLCIsVD0iQSAxMCAxMCwgMCwgMCwgMSwiLF89MTAsQT0xMDtjb25zdCBGPXAueTx2Lnk/QlIocC55LHYueSk6QlIodi55LHAueSksaj1wLng8di54P0JSKHAueCx2LngpOkJSKHYueCxwLngpO1IwPT09IlRCIj9wLng8di54P1I9YE0gJHtwLnh9ICR7cC55fSBMICR7ai1ffSAke3AueX0gJHtUfSAke2p9ICR7cC55K0F9IEwgJHtqfSAke3YueS1ffSAke3l9ICR7aitBfSAke3YueX0gTCAke3YueH0gJHt2Lnl9YDooUD1IMltzLmJyYW5jaF0uaW5kZXgsUj1gTSAke3AueH0gJHtwLnl9IEwgJHtqK199ICR7cC55fSAke3l9ICR7an0gJHtwLnkrQX0gTCAke2p9ICR7di55LV99ICR7VH0gJHtqLUF9ICR7di55fSBMICR7di54fSAke3YueX1gKTpwLnk8di55P1I9YE0gJHtwLnh9ICR7cC55fSBMICR7cC54fSAke0YtX30gJHt5fSAke3AueCtBfSAke0Z9IEwgJHt2LngtX30gJHtGfSAke1R9ICR7di54fSAke0YrQX0gTCAke3YueH0gJHt2Lnl9YDooUD1IMltzLmJyYW5jaF0uaW5kZXgsUj1gTSAke3AueH0gJHtwLnl9IEwgJHtwLnh9ICR7RitffSAke1R9ICR7cC54K0F9ICR7Rn0gTCAke3YueC1ffSAke0Z9ICR7eX0gJHt2Lnh9ICR7Ri1BfSBMICR7di54fSAke3YueX1gKX1lbHNlIHk9IkEgMjAgMjAsIDAsIDAsIDAsIixUPSJBIDIwIDIwLCAwLCAwLCAxLCIsXz0yMCxBPTIwLFIwPT09IlRCIj8ocC54PHYueCYmKHUudHlwZT09PWFkLk1FUkdFJiZzLmlkIT09dS5wYXJlbnRzWzBdP1I9YE0gJHtwLnh9ICR7cC55fSBMICR7cC54fSAke3YueS1ffSAke3l9ICR7cC54K0F9ICR7di55fSBMICR7di54fSAke3YueX1gOlI9YE0gJHtwLnh9ICR7cC55fSBMICR7di54LV99ICR7cC55fSAke1R9ICR7di54fSAke3AueStBfSBMICR7di54fSAke3YueX1gKSxwLng+di54JiYoeT0iQSAyMCAyMCwgMCwgMCwgMCwiLFQ9IkEgMjAgMjAsIDAsIDAsIDEsIixfPTIwLEE9MjAsdS50eXBlPT09YWQuTUVSR0UmJnMuaWQhPT11LnBhcmVudHNbMF0/Uj1gTSAke3AueH0gJHtwLnl9IEwgJHtwLnh9ICR7di55LV99ICR7VH0gJHtwLngtQX0gJHt2Lnl9IEwgJHt2Lnh9ICR7di55fWA6Uj1gTSAke3AueH0gJHtwLnl9IEwgJHt2LngrX30gJHtwLnl9ICR7eX0gJHt2Lnh9ICR7cC55K0F9IEwgJHt2Lnh9ICR7di55fWApLHAueD09PXYueCYmKFI9YE0gJHtwLnh9ICR7cC55fSBMICR7di54fSAke3YueX1gKSk6KHAueTx2LnkmJih1LnR5cGU9PT1hZC5NRVJHRSYmcy5pZCE9PXUucGFyZW50c1swXT9SPWBNICR7cC54fSAke3AueX0gTCAke3YueC1ffSAke3AueX0gJHtUfSAke3YueH0gJHtwLnkrQX0gTCAke3YueH0gJHt2Lnl9YDpSPWBNICR7cC54fSAke3AueX0gTCAke3AueH0gJHt2LnktX30gJHt5fSAke3AueCtBfSAke3YueX0gTCAke3YueH0gJHt2Lnl9YCkscC55PnYueSYmKHUudHlwZT09PWFkLk1FUkdFJiZzLmlkIT09dS5wYXJlbnRzWzBdP1I9YE0gJHtwLnh9ICR7cC55fSBMICR7di54LV99ICR7cC55fSAke3l9ICR7di54fSAke3AueS1BfSBMICR7di54fSAke3YueX1gOlI9YE0gJHtwLnh9ICR7cC55fSBMICR7cC54fSAke3YueStffSAke1R9ICR7cC54K0F9ICR7di55fSBMICR7di54fSAke3YueX1gKSxwLnk9PT12LnkmJihSPWBNICR7cC54fSAke3AueX0gTCAke3YueH0gJHt2Lnl9YCkpO2kuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsUikuYXR0cigiY2xhc3MiLCJhcnJvdyBhcnJvdyIrUCVYQyl9LFR0bj0oaSxzKT0+e2NvbnN0IHU9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1hcnJvd3MiKTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGQ9Pntjb25zdCBwPXNbZF07cC5wYXJlbnRzJiZwLnBhcmVudHMubGVuZ3RoPjAmJnAucGFyZW50cy5mb3JFYWNoKHY9PntFdG4odSxzW3ZdLHAscyl9KX0pfSxDdG49KGkscyk9Pntjb25zdCB1PXF0KCkuZ2l0R3JhcGgsZD1pLmFwcGVuZCgiZyIpO3MuZm9yRWFjaCgocCx2KT0+e2NvbnN0IGI9diVYQyx5PUgyW3AubmFtZV0ucG9zLFQ9ZC5hcHBlbmQoImxpbmUiKTtULmF0dHIoIngxIiwwKSxULmF0dHIoInkxIix5KSxULmF0dHIoIngyIixQUiksVC5hdHRyKCJ5MiIseSksVC5hdHRyKCJjbGFzcyIsImJyYW5jaCBicmFuY2giK2IpLFIwPT09IlRCIiYmKFQuYXR0cigieTEiLDMwKSxULmF0dHIoIngxIix5KSxULmF0dHIoInkyIixQUiksVC5hdHRyKCJ4MiIseSkpLGNKLnB1c2goeSk7bGV0IF89cC5uYW1lO2NvbnN0IEE9V1VlKF8pLFA9ZC5pbnNlcnQoInJlY3QiKSxGPWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJicmFuY2hMYWJlbCIpLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwgYnJhbmNoLWxhYmVsIitiKTtGLm5vZGUoKS5hcHBlbmRDaGlsZChBKTtsZXQgaj1BLmdldEJCb3goKTtQLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWxCa2cgbGFiZWwiK2IpLmF0dHIoInJ4Iiw0KS5hdHRyKCJyeSIsNCkuYXR0cigieCIsLWoud2lkdGgtNC0odS5yb3RhdGVDb21taXRMYWJlbD09PSEwPzMwOjApKS5hdHRyKCJ5Iiwtai5oZWlnaHQvMis4KS5hdHRyKCJ3aWR0aCIsai53aWR0aCsxOCkuYXR0cigiaGVpZ2h0IixqLmhlaWdodCs0KSxGLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygtai53aWR0aC0xNC0odS5yb3RhdGVDb21taXRMYWJlbD09PSEwPzMwOjApKSsiLCAiKyh5LWouaGVpZ2h0LzItMSkrIikiKSxSMD09PSJUQiImJihQLmF0dHIoIngiLHktai53aWR0aC8yLTEwKS5hdHRyKCJ5IiwwKSxGLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh5LWoud2lkdGgvMi01KSsiLCAwKSIpKSxSMCE9PSJUQiImJlAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKC0xOSwgIisoeS1qLmhlaWdodC8yKSsiKSIpfSl9LFN0bj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOnR0bixkYjp3dG4scmVuZGVyZXI6e2RyYXc6ZnVuY3Rpb24oaSxzLHUsZCl7eXRuKCk7Y29uc3QgcD1xdCgpLHY9cC5naXRHcmFwaDtYZS5kZWJ1ZygiaW4gZ2l0Z3JhcGggcmVuZGVyZXIiLGkrYApgLCJpZDoiLHMsdSksTlI9ZC5kYi5nZXRDb21taXRzKCk7Y29uc3QgYj1kLmRiLmdldEJyYW5jaGVzQXNPYmpBcnJheSgpO1IwPWQuZGIuZ2V0RGlyZWN0aW9uKCk7Y29uc3QgeT1JcihgW2lkPSIke3N9Il1gKTtsZXQgVD0wO2IuZm9yRWFjaCgoXyxBKT0+e2NvbnN0IFA9V1VlKF8ubmFtZSksUj15LmFwcGVuZCgiZyIpLEY9Ui5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsIiksaj1GLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwgYnJhbmNoLWxhYmVsIik7ai5ub2RlKCkuYXBwZW5kQ2hpbGQoUCk7bGV0IEs9UC5nZXRCQm94KCk7SDJbXy5uYW1lXT17cG9zOlQsaW5kZXg6QX0sVCs9NTArKHYucm90YXRlQ29tbWl0TGFiZWw/NDA6MCkrKFIwPT09IlRCIj9LLndpZHRoLzI6MCksai5yZW1vdmUoKSxGLnJlbW92ZSgpLFIucmVtb3ZlKCl9KSxZVWUoeSxOUiwhMSksdi5zaG93QnJhbmNoZXMmJkN0bih5LGIpLFR0bih5LE5SKSxZVWUoeSxOUiwhMCksQW8uaW5zZXJ0VGl0bGUoeSwiZ2l0VGl0bGVUZXh0Iix2LnRpdGxlVG9wTWFyZ2luLGQuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLGUkZSh2b2lkIDAseSx2LmRpYWdyYW1QYWRkaW5nLHYudXNlTWF4V2lkdGg/P3AudXNlTWF4V2lkdGgpfX0sc3R5bGVzOmk9PmAKICAuY29tbWl0LWlkLAogIC5jb21taXQtbXNnLAogIC5icmFuY2gtbGFiZWwgewogICAgZmlsbDogbGlnaHRncmV5OwogICAgY29sb3I6IGxpZ2h0Z3JleTsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgfQogICR7WzAsMSwyLDMsNCw1LDYsN10ubWFwKHM9PmAKICAgICAgICAuYnJhbmNoLWxhYmVsJHtzfSB7IGZpbGw6ICR7aVsiZ2l0QnJhbmNoTGFiZWwiK3NdfTsgfQogICAgICAgIC5jb21taXQke3N9IHsgc3Ryb2tlOiAke2lbImdpdCIrc119OyBmaWxsOiAke2lbImdpdCIrc119OyB9CiAgICAgICAgLmNvbW1pdC1oaWdobGlnaHQke3N9IHsgc3Ryb2tlOiAke2lbImdpdEludiIrc119OyBmaWxsOiAke2lbImdpdEludiIrc119OyB9CiAgICAgICAgLmxhYmVsJHtzfSAgeyBmaWxsOiAke2lbImdpdCIrc119OyB9CiAgICAgICAgLmFycm93JHtzfSB7IHN0cm9rZTogJHtpWyJnaXQiK3NdfTsgfQogICAgICAgIGApLmpvaW4oYApgKX0KCiAgLmJyYW5jaCB7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICB9CiAgLmNvbW1pdC1sYWJlbCB7IGZvbnQtc2l6ZTogJHtpLmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke2kuY29tbWl0TGFiZWxDb2xvcn07fQogIC5jb21taXQtbGFiZWwtYmtnIHsgZm9udC1zaXplOiAke2kuY29tbWl0TGFiZWxGb250U2l6ZX07IGZpbGw6ICR7aS5jb21taXRMYWJlbEJhY2tncm91bmR9OyBvcGFjaXR5OiAwLjU7IH0KICAudGFnLWxhYmVsIHsgZm9udC1zaXplOiAke2kudGFnTGFiZWxGb250U2l6ZX07IGZpbGw6ICR7aS50YWdMYWJlbENvbG9yfTt9CiAgLnRhZy1sYWJlbC1ia2cgeyBmaWxsOiAke2kudGFnTGFiZWxCYWNrZ3JvdW5kfTsgc3Ryb2tlOiAke2kudGFnTGFiZWxCb3JkZXJ9OyB9CiAgLnRhZy1ob2xlIHsgZmlsbDogJHtpLnRleHRDb2xvcn07IH0KCiAgLmNvbW1pdC1tZXJnZSB7CiAgICBzdHJva2U6ICR7aS5wcmltYXJ5Q29sb3J9OwogICAgZmlsbDogJHtpLnByaW1hcnlDb2xvcn07CiAgfQogIC5jb21taXQtcmV2ZXJzZSB7CiAgICBzdHJva2U6ICR7aS5wcmltYXJ5Q29sb3J9OwogICAgZmlsbDogJHtpLnByaW1hcnlDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LW91dGVyIHsKICB9CiAgLmNvbW1pdC1oaWdobGlnaHQtaW5uZXIgewogICAgc3Ryb2tlOiAke2kucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7aS5wcmltYXJ5Q29sb3J9OwogIH0KCiAgLmFycm93IHsgc3Ryb2tlLXdpZHRoOiA4OyBzdHJva2UtbGluZWNhcDogcm91bmQ7IGZpbGw6IG5vbmV9CiAgLmdpdFRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgfQpgfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgWW1lPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oVyx4ZSxVLEZlKXtmb3IoVT1VfHx7fSxGZT1XLmxlbmd0aDtGZS0tO1VbV1tGZV1dPXhlKTtyZXR1cm4gVX0scz1bNiw4LDEwLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMwLDMyLDMzLDM1LDM3XSx1PVsxLDI1XSxkPVsxLDI2XSxwPVsxLDI3XSx2PVsxLDI4XSxiPVsxLDI5XSx5PVsxLDMwXSxUPVsxLDMxXSxfPVsxLDldLEE9WzEsMTBdLFA9WzEsMTFdLFI9WzEsMTJdLEY9WzEsMTNdLGo9WzEsMTRdLEs9WzEsMTVdLGVlPVsxLDE2XSxpZT1bMSwxOF0sb2U9WzEsMTldLHBlPVsxLDIwXSxiZT1bMSwyMV0sYWU9WzEsMjJdLG5lPVsxLDI0XSxzZT1bMSwzMl0sZGU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGdhbnR0OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxOTDoxMCx3ZWVrZGF5OjExLHdlZWtkYXlfbW9uZGF5OjEyLHdlZWtkYXlfdHVlc2RheToxMyx3ZWVrZGF5X3dlZG5lc2RheToxNCx3ZWVrZGF5X3RodXJzZGF5OjE1LHdlZWtkYXlfZnJpZGF5OjE2LHdlZWtkYXlfc2F0dXJkYXk6MTcsd2Vla2RheV9zdW5kYXk6MTgsZGF0ZUZvcm1hdDoxOSxpbmNsdXNpdmVFbmREYXRlczoyMCx0b3BBeGlzOjIxLGF4aXNGb3JtYXQ6MjIsdGlja0ludGVydmFsOjIzLGV4Y2x1ZGVzOjI0LGluY2x1ZGVzOjI1LHRvZGF5TWFya2VyOjI2LHRpdGxlOjI3LGFjY190aXRsZToyOCxhY2NfdGl0bGVfdmFsdWU6MjksYWNjX2Rlc2NyOjMwLGFjY19kZXNjcl92YWx1ZTozMSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjMyLHNlY3Rpb246MzMsY2xpY2tTdGF0ZW1lbnQ6MzQsdGFza1R4dDozNSx0YXNrRGF0YTozNixjbGljazozNyxjYWxsYmFja25hbWU6MzgsY2FsbGJhY2thcmdzOjM5LGhyZWY6NDAsY2xpY2tTdGF0ZW1lbnREZWJ1Zzo0MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiZ2FudHQiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJOTCIsMTI6IndlZWtkYXlfbW9uZGF5IiwxMzoid2Vla2RheV90dWVzZGF5IiwxNDoid2Vla2RheV93ZWRuZXNkYXkiLDE1OiJ3ZWVrZGF5X3RodXJzZGF5IiwxNjoid2Vla2RheV9mcmlkYXkiLDE3OiJ3ZWVrZGF5X3NhdHVyZGF5IiwxODoid2Vla2RheV9zdW5kYXkiLDE5OiJkYXRlRm9ybWF0IiwyMDoiaW5jbHVzaXZlRW5kRGF0ZXMiLDIxOiJ0b3BBeGlzIiwyMjoiYXhpc0Zvcm1hdCIsMjM6InRpY2tJbnRlcnZhbCIsMjQ6ImV4Y2x1ZGVzIiwyNToiaW5jbHVkZXMiLDI2OiJ0b2RheU1hcmtlciIsMjc6InRpdGxlIiwyODoiYWNjX3RpdGxlIiwyOToiYWNjX3RpdGxlX3ZhbHVlIiwzMDoiYWNjX2Rlc2NyIiwzMToiYWNjX2Rlc2NyX3ZhbHVlIiwzMjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6InNlY3Rpb24iLDM1OiJ0YXNrVHh0IiwzNjoidGFza0RhdGEiLDM3OiJjbGljayIsMzg6ImNhbGxiYWNrbmFtZSIsMzk6ImNhbGxiYWNrYXJncyIsNDA6ImhyZWYifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFszNCwyXSxbMzQsM10sWzM0LDNdLFszNCw0XSxbMzQsM10sWzM0LDRdLFszNCwyXSxbNDEsMl0sWzQxLDNdLFs0MSwzXSxbNDEsNF0sWzQxLDNdLFs0MSw0XSxbNDEsMl1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oeGUsVSxGZSxQZSxqZSxJZSxTZSl7dmFyIENlPUllLmxlbmd0aC0xO3N3aXRjaChqZSl7Y2FzZSAxOnJldHVybiBJZVtDZS0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzpJZVtDZS0xXS5wdXNoKEllW0NlXSksdGhpcy4kPUllW0NlLTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPUllW0NlXTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6UGUuc2V0V2Vla2RheSgibW9uZGF5Iik7YnJlYWs7Y2FzZSA5OlBlLnNldFdlZWtkYXkoInR1ZXNkYXkiKTticmVhaztjYXNlIDEwOlBlLnNldFdlZWtkYXkoIndlZG5lc2RheSIpO2JyZWFrO2Nhc2UgMTE6UGUuc2V0V2Vla2RheSgidGh1cnNkYXkiKTticmVhaztjYXNlIDEyOlBlLnNldFdlZWtkYXkoImZyaWRheSIpO2JyZWFrO2Nhc2UgMTM6UGUuc2V0V2Vla2RheSgic2F0dXJkYXkiKTticmVhaztjYXNlIDE0OlBlLnNldFdlZWtkYXkoInN1bmRheSIpO2JyZWFrO2Nhc2UgMTU6UGUuc2V0RGF0ZUZvcm1hdChJZVtDZV0uc3Vic3RyKDExKSksdGhpcy4kPUllW0NlXS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTY6UGUuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9SWVbQ2VdLnN1YnN0cigxOCk7YnJlYWs7Y2FzZSAxNzpQZS5Ub3BBeGlzKCksdGhpcy4kPUllW0NlXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxODpQZS5zZXRBeGlzRm9ybWF0KEllW0NlXS5zdWJzdHIoMTEpKSx0aGlzLiQ9SWVbQ2VdLnN1YnN0cigxMSk7YnJlYWs7Y2FzZSAxOTpQZS5zZXRUaWNrSW50ZXJ2YWwoSWVbQ2VdLnN1YnN0cigxMykpLHRoaXMuJD1JZVtDZV0uc3Vic3RyKDEzKTticmVhaztjYXNlIDIwOlBlLnNldEV4Y2x1ZGVzKEllW0NlXS5zdWJzdHIoOSkpLHRoaXMuJD1JZVtDZV0uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMjE6UGUuc2V0SW5jbHVkZXMoSWVbQ2VdLnN1YnN0cig5KSksdGhpcy4kPUllW0NlXS5zdWJzdHIoOSk7YnJlYWs7Y2FzZSAyMjpQZS5zZXRUb2RheU1hcmtlcihJZVtDZV0uc3Vic3RyKDEyKSksdGhpcy4kPUllW0NlXS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMjQ6UGUuc2V0RGlhZ3JhbVRpdGxlKEllW0NlXS5zdWJzdHIoNikpLHRoaXMuJD1JZVtDZV0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPUllW0NlXS50cmltKCksUGUuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDI2OmNhc2UgMjc6dGhpcy4kPUllW0NlXS50cmltKCksUGUuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDI4OlBlLmFkZFNlY3Rpb24oSWVbQ2VdLnN1YnN0cig4KSksdGhpcy4kPUllW0NlXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAzMDpQZS5hZGRUYXNrKEllW0NlLTFdLEllW0NlXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDMxOnRoaXMuJD1JZVtDZS0xXSxQZS5zZXRDbGlja0V2ZW50KEllW0NlLTFdLEllW0NlXSxudWxsKTticmVhaztjYXNlIDMyOnRoaXMuJD1JZVtDZS0yXSxQZS5zZXRDbGlja0V2ZW50KEllW0NlLTJdLEllW0NlLTFdLEllW0NlXSk7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9SWVbQ2UtMl0sUGUuc2V0Q2xpY2tFdmVudChJZVtDZS0yXSxJZVtDZS0xXSxudWxsKSxQZS5zZXRMaW5rKEllW0NlLTJdLEllW0NlXSk7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9SWVbQ2UtM10sUGUuc2V0Q2xpY2tFdmVudChJZVtDZS0zXSxJZVtDZS0yXSxJZVtDZS0xXSksUGUuc2V0TGluayhJZVtDZS0zXSxJZVtDZV0pO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPUllW0NlLTJdLFBlLnNldENsaWNrRXZlbnQoSWVbQ2UtMl0sSWVbQ2VdLG51bGwpLFBlLnNldExpbmsoSWVbQ2UtMl0sSWVbQ2UtMV0pO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPUllW0NlLTNdLFBlLnNldENsaWNrRXZlbnQoSWVbQ2UtM10sSWVbQ2UtMV0sSWVbQ2VdKSxQZS5zZXRMaW5rKEllW0NlLTNdLEllW0NlLTJdKTticmVhaztjYXNlIDM3OnRoaXMuJD1JZVtDZS0xXSxQZS5zZXRMaW5rKEllW0NlLTFdLEllW0NlXSk7YnJlYWs7Y2FzZSAzODpjYXNlIDQ0OnRoaXMuJD1JZVtDZS0xXSsiICIrSWVbQ2VdO2JyZWFrO2Nhc2UgMzk6Y2FzZSA0MDpjYXNlIDQyOnRoaXMuJD1JZVtDZS0yXSsiICIrSWVbQ2UtMV0rIiAiK0llW0NlXTticmVhaztjYXNlIDQxOmNhc2UgNDM6dGhpcy4kPUllW0NlLTNdKyIgIitJZVtDZS0yXSsiICIrSWVbQ2UtMV0rIiAiK0llW0NlXTticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShzLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6MTcsMTI6dSwxMzpkLDE0OnAsMTU6diwxNjpiLDE3OnksMTg6VCwxOTpfLDIwOkEsMjE6UCwyMjpSLDIzOkYsMjQ6aiwyNTpLLDI2OmVlLDI3OmllLDI4Om9lLDMwOnBlLDMyOmJlLDMzOmFlLDM0OjIzLDM1Om5lLDM3OnNlfSxpKHMsWzIsN10sezE6WzIsMV19KSxpKHMsWzIsM10pLHs5OjMzLDExOjE3LDEyOnUsMTM6ZCwxNDpwLDE1OnYsMTY6YiwxNzp5LDE4OlQsMTk6XywyMDpBLDIxOlAsMjI6UiwyMzpGLDI0OmosMjU6SywyNjplZSwyNzppZSwyODpvZSwzMDpwZSwzMjpiZSwzMzphZSwzNDoyMywzNTpuZSwzNzpzZX0saShzLFsyLDVdKSxpKHMsWzIsNl0pLGkocyxbMiwxNV0pLGkocyxbMiwxNl0pLGkocyxbMiwxN10pLGkocyxbMiwxOF0pLGkocyxbMiwxOV0pLGkocyxbMiwyMF0pLGkocyxbMiwyMV0pLGkocyxbMiwyMl0pLGkocyxbMiwyM10pLGkocyxbMiwyNF0pLHsyOTpbMSwzNF19LHszMTpbMSwzNV19LGkocyxbMiwyN10pLGkocyxbMiwyOF0pLGkocyxbMiwyOV0pLHszNjpbMSwzNl19LGkocyxbMiw4XSksaShzLFsyLDldKSxpKHMsWzIsMTBdKSxpKHMsWzIsMTFdKSxpKHMsWzIsMTJdKSxpKHMsWzIsMTNdKSxpKHMsWzIsMTRdKSx7Mzg6WzEsMzddLDQwOlsxLDM4XX0saShzLFsyLDRdKSxpKHMsWzIsMjVdKSxpKHMsWzIsMjZdKSxpKHMsWzIsMzBdKSxpKHMsWzIsMzFdLHszOTpbMSwzOV0sNDA6WzEsNDBdfSksaShzLFsyLDM3XSx7Mzg6WzEsNDFdfSksaShzLFsyLDMyXSx7NDA6WzEsNDJdfSksaShzLFsyLDMzXSksaShzLFsyLDM1XSx7Mzk6WzEsNDNdfSksaShzLFsyLDM0XSksaShzLFsyLDM2XSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oeGUsVSl7aWYoVS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKHhlKTtlbHNle3ZhciBGZT1uZXcgRXJyb3IoeGUpO3Rocm93IEZlLmhhc2g9VSxGZX19LHBhcnNlOmZ1bmN0aW9uKHhlKXt2YXIgVT10aGlzLEZlPVswXSxQZT1bXSxqZT1bbnVsbF0sSWU9W10sU2U9dGhpcy50YWJsZSxDZT0iIixrZT0wLEtlPTAsRnQ9MixOZT0xLGduPUllLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLF90PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksRXQ9e3l5Ont9fTtmb3IodmFyIEd0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksR3QpJiYoRXQueXlbR3RdPXRoaXMueXlbR3RdKTtfdC5zZXRJbnB1dCh4ZSxFdC55eSksRXQueXkubGV4ZXI9X3QsRXQueXkucGFyc2VyPXRoaXMsdHlwZW9mIF90Lnl5bGxvYz4idSImJihfdC55eWxsb2M9e30pO3ZhciBsbj1fdC55eWxsb2M7SWUucHVzaChsbik7dmFyIHh0PV90Lm9wdGlvbnMmJl90Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBFdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1FdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBQdCgpe3ZhciB6cztyZXR1cm4genM9UGUucG9wKCl8fF90LmxleCgpfHxOZSx0eXBlb2YgenMhPSJudW1iZXIiJiYoenMgaW5zdGFuY2VvZiBBcnJheSYmKFBlPXpzLHpzPVBlLnBvcCgpKSx6cz1VLnN5bWJvbHNfW3pzXXx8enMpLHpzfWZvcih2YXIgUWUsRHQsa3QsT24saHQ9e30senIseXQsamkseGk7Oyl7aWYoRHQ9RmVbRmUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbRHRdP2t0PXRoaXMuZGVmYXVsdEFjdGlvbnNbRHRdOigoUWU9PT1udWxsfHx0eXBlb2YgUWU+InUiKSYmKFFlPVB0KCkpLGt0PVNlW0R0XSYmU2VbRHRdW1FlXSksdHlwZW9mIGt0PiJ1Inx8IWt0Lmxlbmd0aHx8IWt0WzBdKXt2YXIgTWE9IiI7eGk9W107Zm9yKHpyIGluIFNlW0R0XSl0aGlzLnRlcm1pbmFsc19benJdJiZ6cj5GdCYmeGkucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3pyXSsiJyIpO190LnNob3dQb3NpdGlvbj9NYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhrZSsxKStgOgpgK190LnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGAreGkuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tRZV18fFFlKSsiJyI6TWE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoa2UrMSkrIjogVW5leHBlY3RlZCAiKyhRZT09TmU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bUWVdfHxRZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTWEse3RleHQ6X3QubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1FlXXx8UWUsbGluZTpfdC55eWxpbmVubyxsb2M6bG4sZXhwZWN0ZWQ6eGl9KX1pZihrdFswXWluc3RhbmNlb2YgQXJyYXkmJmt0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrRHQrIiwgdG9rZW46ICIrUWUpO3N3aXRjaChrdFswXSl7Y2FzZSAxOkZlLnB1c2goUWUpLGplLnB1c2goX3QueXl0ZXh0KSxJZS5wdXNoKF90Lnl5bGxvYyksRmUucHVzaChrdFsxXSksUWU9bnVsbCxLZT1fdC55eWxlbmcsQ2U9X3QueXl0ZXh0LGtlPV90Lnl5bGluZW5vLGxuPV90Lnl5bGxvYzticmVhaztjYXNlIDI6aWYoeXQ9dGhpcy5wcm9kdWN0aW9uc19ba3RbMV1dWzFdLGh0LiQ9amVbamUubGVuZ3RoLXl0XSxodC5fJD17Zmlyc3RfbGluZTpJZVtJZS5sZW5ndGgtKHl0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6SWVbSWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46SWVbSWUubGVuZ3RoLSh5dHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpJZVtJZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHh0JiYoaHQuXyQucmFuZ2U9W0llW0llLmxlbmd0aC0oeXR8fDEpXS5yYW5nZVswXSxJZVtJZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxPbj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoaHQsW0NlLEtlLGtlLEV0Lnl5LGt0WzFdLGplLEllXS5jb25jYXQoZ24pKSx0eXBlb2YgT248InUiKXJldHVybiBPbjt5dCYmKEZlPUZlLnNsaWNlKDAsLTEqeXQqMiksamU9amUuc2xpY2UoMCwtMSp5dCksSWU9SWUuc2xpY2UoMCwtMSp5dCkpLEZlLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba3RbMV1dWzBdKSxqZS5wdXNoKGh0LiQpLEllLnB1c2goaHQuXyQpLGppPVNlW0ZlW0ZlLmxlbmd0aC0yXV1bRmVbRmUubGVuZ3RoLTFdXSxGZS5wdXNoKGppKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sWD1mdW5jdGlvbigpe3ZhciBXPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKFUsRmUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoVSxGZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoVSl9LHNldElucHV0OmZ1bmN0aW9uKHhlLFUpe3JldHVybiB0aGlzLnl5PVV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXhlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB4ZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9eGUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXhlLHRoaXMubWF0Y2hlZCs9eGU7dmFyIFU9eGUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBVPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx4ZX0sdW5wdXQ6ZnVuY3Rpb24oeGUpe3ZhciBVPXhlLmxlbmd0aCxGZT14ZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXhlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1VKSx0aGlzLm9mZnNldC09VTt2YXIgUGU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksRmUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1GZS5sZW5ndGgtMSk7dmFyIGplPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpGZT8oRmUubGVuZ3RoPT09UGUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStQZVtQZS5sZW5ndGgtRmUubGVuZ3RoXS5sZW5ndGgtRmVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1VfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2plWzBdLGplWzBdK3RoaXMueXlsZW5nLVVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbih4ZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHhlKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB4ZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHhlLmxlbmd0aD4yMD8iLi4uIjoiIikreGUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgeGU9dGhpcy5tYXRjaDtyZXR1cm4geGUubGVuZ3RoPDIwJiYoeGUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXhlLmxlbmd0aCkpLCh4ZS5zdWJzdHIoMCwyMCkrKHhlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgeGU9dGhpcy5wYXN0SW5wdXQoKSxVPW5ldyBBcnJheSh4ZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB4ZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArVSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oeGUsVSl7dmFyIEZlLFBlLGplO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihqZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihqZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxQZT14ZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksUGUmJih0aGlzLnl5bGluZW5vKz1QZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpQZT9QZVtQZS5sZW5ndGgtMV0ubGVuZ3RoLVBlW1BlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3hlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXhlWzBdLHRoaXMubWF0Y2grPXhlWzBdLHRoaXMubWF0Y2hlcz14ZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh4ZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9eGVbMF0sRmU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsVSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxGZSlyZXR1cm4gRmU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIEllIGluIGplKXRoaXNbSWVdPWplW0llXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciB4ZSxVLEZlLFBlO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGplPXRoaXMuX2N1cnJlbnRSdWxlcygpLEllPTA7SWU8amUubGVuZ3RoO0llKyspaWYoRmU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tqZVtJZV1dKSxGZSYmKCFVfHxGZVswXS5sZW5ndGg+VVswXS5sZW5ndGgpKXtpZihVPUZlLFBlPUllLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKHhlPXRoaXMudGVzdF9tYXRjaChGZSxqZVtJZV0pLHhlIT09ITEpcmV0dXJuIHhlO2lmKHRoaXMuX2JhY2t0cmFjayl7VT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBVPyh4ZT10aGlzLnRlc3RfbWF0Y2goVSxqZVtQZV0pLHhlIT09ITE/eGU6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBVPXRoaXMubmV4dCgpO3JldHVybiBVfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihVKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goVSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gVT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKFUpe3JldHVybiBVPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoVXx8MCksVT49MD90aGlzLmNvbmRpdGlvblN0YWNrW1VdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKFUpe3RoaXMuYmVnaW4oVSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVSxGZSxQZSxqZSl7c3dpdGNoKFBlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksIm9wZW5fZGlyZWN0aXZlIjtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDI4O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzA7Y2FzZSA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA1OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpicmVhaztjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6cmV0dXJuIDEwO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzpicmVhaztjYXNlIDE0OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE2OnJldHVybiA0MDtjYXNlIDE3OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMTg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjA6cmV0dXJuIDM4O2Nhc2UgMjE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIDM5O2Nhc2UgMjM6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnJldHVybiAzNztjYXNlIDI2OnJldHVybiA0O2Nhc2UgMjc6cmV0dXJuIDE5O2Nhc2UgMjg6cmV0dXJuIDIwO2Nhc2UgMjk6cmV0dXJuIDIxO2Nhc2UgMzA6cmV0dXJuIDIyO2Nhc2UgMzE6cmV0dXJuIDIzO2Nhc2UgMzI6cmV0dXJuIDI1O2Nhc2UgMzM6cmV0dXJuIDI0O2Nhc2UgMzQ6cmV0dXJuIDI2O2Nhc2UgMzU6cmV0dXJuIDEyO2Nhc2UgMzY6cmV0dXJuIDEzO2Nhc2UgMzc6cmV0dXJuIDE0O2Nhc2UgMzg6cmV0dXJuIDE1O2Nhc2UgMzk6cmV0dXJuIDE2O2Nhc2UgNDA6cmV0dXJuIDE3O2Nhc2UgNDE6cmV0dXJuIDE4O2Nhc2UgNDI6cmV0dXJuImRhdGUiO2Nhc2UgNDM6cmV0dXJuIDI3O2Nhc2UgNDQ6cmV0dXJuImFjY0Rlc2NyaXB0aW9uIjtjYXNlIDQ1OnJldHVybiAzMztjYXNlIDQ2OnJldHVybiAzNTtjYXNlIDQ3OnJldHVybiAzNjtjYXNlIDQ4OnJldHVybiI6IjtjYXNlIDQ5OnJldHVybiA2O2Nhc2UgNTA6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86JSUoPyFceykqW15cbl0qKS9pLC9eKD86W15cfV0lJSpbXlxuXSopL2ksL14oPzolJSpbXlxuXSpbXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmhyZWZbXHNdK1siXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86Y2FsbFtcc10rKS9pLC9eKD86XChbXHNdKlwpKS9pLC9eKD86XCgpL2ksL14oPzpbXihdKikvaSwvXig/OlwpKS9pLC9eKD86W14pXSopL2ksL14oPzpjbGlja1tcc10rKS9pLC9eKD86W1xzXG5dKS9pLC9eKD86W15cc1xuXSopL2ksL14oPzpnYW50dFxiKS9pLC9eKD86ZGF0ZUZvcm1hdFxzW14jXG47XSspL2ksL14oPzppbmNsdXNpdmVFbmREYXRlc1xiKS9pLC9eKD86dG9wQXhpc1xiKS9pLC9eKD86YXhpc0Zvcm1hdFxzW14jXG47XSspL2ksL14oPzp0aWNrSW50ZXJ2YWxcc1teI1xuO10rKS9pLC9eKD86aW5jbHVkZXNcc1teI1xuO10rKS9pLC9eKD86ZXhjbHVkZXNcc1teI1xuO10rKS9pLC9eKD86dG9kYXlNYXJrZXJcc1teXG47XSspL2ksL14oPzp3ZWVrZGF5XHMrbW9uZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrdHVlc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3dlZG5lc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3RodXJzZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrZnJpZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrc2F0dXJkYXlcYikvaSwvXig/OndlZWtkYXlccytzdW5kYXlcYikvaSwvXig/OlxkXGRcZFxkLVxkXGQtXGRcZFxiKS9pLC9eKD86dGl0bGVcc1teXG5dKykvaSwvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvaSwvXig/OnNlY3Rpb25cc1teXG5dKykvaSwvXig/OlteOlxuXSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls2LDddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsyXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrYXJnczp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrbmFtZTp7cnVsZXM6WzE4LDE5LDIwXSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsxNSwxNl0saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzI0LDI1XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMyw1LDgsOSwxMCwxMSwxMiwxMywxNCwxNywyMywyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBXfSgpO2RlLmxleGVyPVg7ZnVuY3Rpb24gZ2UoKXt0aGlzLnl5PXt9fXJldHVybiBnZS5wcm90b3R5cGU9ZGUsZGUuUGFyc2VyPWdlLG5ldyBnZX0oKTtZbWUucGFyc2VyPVltZTtjb25zdCBfdG49WW1lO3ZhciBYVWU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihpLHMpeyhmdW5jdGlvbih1LGQpe2kuZXhwb3J0cz1kKCl9KShBZyxmdW5jdGlvbigpe3ZhciB1PSJkYXkiO3JldHVybiBmdW5jdGlvbihkLHAsdil7dmFyIGI9ZnVuY3Rpb24oXyl7cmV0dXJuIF8uYWRkKDQtXy5pc29XZWVrZGF5KCksdSl9LHk9cC5wcm90b3R5cGU7eS5pc29XZWVrWWVhcj1mdW5jdGlvbigpe3JldHVybiBiKHRoaXMpLnllYXIoKX0seS5pc29XZWVrPWZ1bmN0aW9uKF8pe2lmKCF0aGlzLiR1dGlscygpLnUoXykpcmV0dXJuIHRoaXMuYWRkKDcqKF8tdGhpcy5pc29XZWVrKCkpLHUpO3ZhciBBLFAsUixGLGo9Yih0aGlzKSxLPShBPXRoaXMuaXNvV2Vla1llYXIoKSxQPXRoaXMuJHUsUj0oUD92LnV0Yzp2KSgpLnllYXIoQSkuc3RhcnRPZigieWVhciIpLEY9NC1SLmlzb1dlZWtkYXkoKSxSLmlzb1dlZWtkYXkoKT40JiYoRis9NyksUi5hZGQoRix1KSk7cmV0dXJuIGouZGlmZihLLCJ3ZWVrIikrMX0seS5pc29XZWVrZGF5PWZ1bmN0aW9uKF8pe3JldHVybiB0aGlzLiR1dGlscygpLnUoXyk/dGhpcy5kYXkoKXx8Nzp0aGlzLmRheSh0aGlzLmRheSgpJTc/XzpfLTcpfTt2YXIgVD15LnN0YXJ0T2Y7eS5zdGFydE9mPWZ1bmN0aW9uKF8sQSl7dmFyIFA9dGhpcy4kdXRpbHMoKSxSPSEhUC51KEEpfHxBO3JldHVybiBQLnAoXyk9PT0iaXNvd2VlayI/Uj90aGlzLmRhdGUodGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKS5zdGFydE9mKCJkYXkiKTp0aGlzLmRhdGUodGhpcy5kYXRlKCktMS0odGhpcy5pc29XZWVrZGF5KCktMSkrNykuZW5kT2YoImRheSIpOlQuYmluZCh0aGlzKShfLEEpfX19KX0pKFhVZSk7dmFyIEF0bj1YVWUuZXhwb3J0cztjb25zdCBMdG49aEMoQXRuKTt2YXIgUVVlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxzKXsoZnVuY3Rpb24odSxkKXtpLmV4cG9ydHM9ZCgpfSkoQWcsZnVuY3Rpb24oKXt2YXIgdT17TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGQ9LyhcW1teW10qXF0pfChbLV86Ly4sKClcc10rKXwoQXxhfFlZWVl8WVk/fE1NP00/TT98RG98REQ/fGhoP3xISD98bW0/fHNzP3xTezEsM318enxaWj8pL2cscD0vXGRcZC8sdj0vXGRcZD8vLGI9L1xkKlteLV86LywoKVxzXGRdKy8seT17fSxUPWZ1bmN0aW9uKEspe3JldHVybihLPStLKSsoSz42OD8xOTAwOjJlMyl9LF89ZnVuY3Rpb24oSyl7cmV0dXJuIGZ1bmN0aW9uKGVlKXt0aGlzW0tdPStlZX19LEE9Wy9bKy1dXGRcZDo/KFxkXGQpP3xaLyxmdW5jdGlvbihLKXsodGhpcy56b25lfHwodGhpcy56b25lPXt9KSkub2Zmc2V0PWZ1bmN0aW9uKGVlKXtpZighZWV8fGVlPT09IloiKXJldHVybiAwO3ZhciBpZT1lZS5tYXRjaCgvKFsrLV18XGRcZCkvZyksb2U9NjAqaWVbMV0rKCtpZVsyXXx8MCk7cmV0dXJuIG9lPT09MD8wOmllWzBdPT09IisiPy1vZTpvZX0oSyl9XSxQPWZ1bmN0aW9uKEspe3ZhciBlZT15W0tdO3JldHVybiBlZSYmKGVlLmluZGV4T2Y/ZWU6ZWUucy5jb25jYXQoZWUuZikpfSxSPWZ1bmN0aW9uKEssZWUpe3ZhciBpZSxvZT15Lm1lcmlkaWVtO2lmKG9lKXtmb3IodmFyIHBlPTE7cGU8PTI0O3BlKz0xKWlmKEsuaW5kZXhPZihvZShwZSwwLGVlKSk+LTEpe2llPXBlPjEyO2JyZWFrfX1lbHNlIGllPUs9PT0oZWU/InBtIjoiUE0iKTtyZXR1cm4gaWV9LEY9e0E6W2IsZnVuY3Rpb24oSyl7dGhpcy5hZnRlcm5vb249UihLLCExKX1dLGE6W2IsZnVuY3Rpb24oSyl7dGhpcy5hZnRlcm5vb249UihLLCEwKX1dLFM6Wy9cZC8sZnVuY3Rpb24oSyl7dGhpcy5taWxsaXNlY29uZHM9MTAwKitLfV0sU1M6W3AsZnVuY3Rpb24oSyl7dGhpcy5taWxsaXNlY29uZHM9MTAqK0t9XSxTU1M6Wy9cZHszfS8sZnVuY3Rpb24oSyl7dGhpcy5taWxsaXNlY29uZHM9K0t9XSxzOlt2LF8oInNlY29uZHMiKV0sc3M6W3YsXygic2Vjb25kcyIpXSxtOlt2LF8oIm1pbnV0ZXMiKV0sbW06W3YsXygibWludXRlcyIpXSxIOlt2LF8oImhvdXJzIildLGg6W3YsXygiaG91cnMiKV0sSEg6W3YsXygiaG91cnMiKV0saGg6W3YsXygiaG91cnMiKV0sRDpbdixfKCJkYXkiKV0sREQ6W3AsXygiZGF5IildLERvOltiLGZ1bmN0aW9uKEspe3ZhciBlZT15Lm9yZGluYWwsaWU9Sy5tYXRjaCgvXGQrLyk7aWYodGhpcy5kYXk9aWVbMF0sZWUpZm9yKHZhciBvZT0xO29lPD0zMTtvZSs9MSllZShvZSkucmVwbGFjZSgvXFt8XF0vZywiIik9PT1LJiYodGhpcy5kYXk9b2UpfV0sTTpbdixfKCJtb250aCIpXSxNTTpbcCxfKCJtb250aCIpXSxNTU06W2IsZnVuY3Rpb24oSyl7dmFyIGVlPVAoIm1vbnRocyIpLGllPShQKCJtb250aHNTaG9ydCIpfHxlZS5tYXAoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5zbGljZSgwLDMpfSkpLmluZGV4T2YoSykrMTtpZihpZTwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPWllJTEyfHxpZX1dLE1NTU06W2IsZnVuY3Rpb24oSyl7dmFyIGVlPVAoIm1vbnRocyIpLmluZGV4T2YoSykrMTtpZihlZTwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPWVlJTEyfHxlZX1dLFk6Wy9bKy1dP1xkKy8sXygieWVhciIpXSxZWTpbcCxmdW5jdGlvbihLKXt0aGlzLnllYXI9VChLKX1dLFlZWVk6Wy9cZHs0fS8sXygieWVhciIpXSxaOkEsWlo6QX07ZnVuY3Rpb24gaihLKXt2YXIgZWUsaWU7ZWU9SyxpZT15JiZ5LmZvcm1hdHM7Zm9yKHZhciBvZT0oSz1lZS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTFRTP3xsezEsNH18THsxLDR9KS9nLGZ1bmN0aW9uKFgsZ2UsVyl7dmFyIHhlPVcmJlcudG9VcHBlckNhc2UoKTtyZXR1cm4gZ2V8fGllW1ddfHx1W1ddfHxpZVt4ZV0ucmVwbGFjZSgvKFxbW15cXV0rXSl8KE1NTU18TU18RER8ZGRkZCkvZyxmdW5jdGlvbihVLEZlLFBlKXtyZXR1cm4gRmV8fFBlLnNsaWNlKDEpfSl9KSkubWF0Y2goZCkscGU9b2UubGVuZ3RoLGJlPTA7YmU8cGU7YmUrPTEpe3ZhciBhZT1vZVtiZV0sbmU9RlthZV0sc2U9bmUmJm5lWzBdLGRlPW5lJiZuZVsxXTtvZVtiZV09ZGU/e3JlZ2V4OnNlLHBhcnNlcjpkZX06YWUucmVwbGFjZSgvXlxbfFxdJC9nLCIiKX1yZXR1cm4gZnVuY3Rpb24oWCl7Zm9yKHZhciBnZT17fSxXPTAseGU9MDtXPHBlO1crPTEpe3ZhciBVPW9lW1ddO2lmKHR5cGVvZiBVPT0ic3RyaW5nIil4ZSs9VS5sZW5ndGg7ZWxzZXt2YXIgRmU9VS5yZWdleCxQZT1VLnBhcnNlcixqZT1YLnNsaWNlKHhlKSxJZT1GZS5leGVjKGplKVswXTtQZS5jYWxsKGdlLEllKSxYPVgucmVwbGFjZShJZSwiIil9fXJldHVybiBmdW5jdGlvbihTZSl7dmFyIENlPVNlLmFmdGVybm9vbjtpZihDZSE9PXZvaWQgMCl7dmFyIGtlPVNlLmhvdXJzO0NlP2tlPDEyJiYoU2UuaG91cnMrPTEyKTprZT09PTEyJiYoU2UuaG91cnM9MCksZGVsZXRlIFNlLmFmdGVybm9vbn19KGdlKSxnZX19cmV0dXJuIGZ1bmN0aW9uKEssZWUsaWUpe2llLnAuY3VzdG9tUGFyc2VGb3JtYXQ9ITAsSyYmSy5wYXJzZVR3b0RpZ2l0WWVhciYmKFQ9Sy5wYXJzZVR3b0RpZ2l0WWVhcik7dmFyIG9lPWVlLnByb3RvdHlwZSxwZT1vZS5wYXJzZTtvZS5wYXJzZT1mdW5jdGlvbihiZSl7dmFyIGFlPWJlLmRhdGUsbmU9YmUudXRjLHNlPWJlLmFyZ3M7dGhpcy4kdT1uZTt2YXIgZGU9c2VbMV07aWYodHlwZW9mIGRlPT0ic3RyaW5nIil7dmFyIFg9c2VbMl09PT0hMCxnZT1zZVszXT09PSEwLFc9WHx8Z2UseGU9c2VbMl07Z2UmJih4ZT1zZVsyXSkseT10aGlzLiRsb2NhbGUoKSwhWCYmeGUmJih5PWllLkxzW3hlXSksdGhpcy4kZD1mdW5jdGlvbihqZSxJZSxTZSl7dHJ5e2lmKFsieCIsIlgiXS5pbmRleE9mKEllKT4tMSlyZXR1cm4gbmV3IERhdGUoKEllPT09IlgiPzFlMzoxKSpqZSk7dmFyIENlPWooSWUpKGplKSxrZT1DZS55ZWFyLEtlPUNlLm1vbnRoLEZ0PUNlLmRheSxOZT1DZS5ob3Vycyxnbj1DZS5taW51dGVzLF90PUNlLnNlY29uZHMsRXQ9Q2UubWlsbGlzZWNvbmRzLEd0PUNlLnpvbmUsbG49bmV3IERhdGUseHQ9RnR8fChrZXx8S2U/MTpsbi5nZXREYXRlKCkpLFB0PWtlfHxsbi5nZXRGdWxsWWVhcigpLFFlPTA7a2UmJiFLZXx8KFFlPUtlPjA/S2UtMTpsbi5nZXRNb250aCgpKTt2YXIgRHQ9TmV8fDAsa3Q9Z258fDAsT249X3R8fDAsaHQ9RXR8fDA7cmV0dXJuIEd0P25ldyBEYXRlKERhdGUuVVRDKFB0LFFlLHh0LER0LGt0LE9uLGh0KzYwKkd0Lm9mZnNldCoxZTMpKTpTZT9uZXcgRGF0ZShEYXRlLlVUQyhQdCxRZSx4dCxEdCxrdCxPbixodCkpOm5ldyBEYXRlKFB0LFFlLHh0LER0LGt0LE9uLGh0KX1jYXRjaHtyZXR1cm4gbmV3IERhdGUoIiIpfX0oYWUsZGUsbmUpLHRoaXMuaW5pdCgpLHhlJiZ4ZSE9PSEwJiYodGhpcy4kTD10aGlzLmxvY2FsZSh4ZSkuJEwpLFcmJmFlIT10aGlzLmZvcm1hdChkZSkmJih0aGlzLiRkPW5ldyBEYXRlKCIiKSkseT17fX1lbHNlIGlmKGRlIGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBVPWRlLmxlbmd0aCxGZT0xO0ZlPD1VO0ZlKz0xKXtzZVsxXT1kZVtGZS0xXTt2YXIgUGU9aWUuYXBwbHkodGhpcyxzZSk7aWYoUGUuaXNWYWxpZCgpKXt0aGlzLiRkPVBlLiRkLHRoaXMuJEw9UGUuJEwsdGhpcy5pbml0KCk7YnJlYWt9RmU9PT1VJiYodGhpcy4kZD1uZXcgRGF0ZSgiIikpfWVsc2UgcGUuY2FsbCh0aGlzLGJlKX19fSl9KShRVWUpO3ZhciBNdG49UVVlLmV4cG9ydHM7Y29uc3QgRHRuPWhDKE10bik7dmFyIEpVZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGkscyl7KGZ1bmN0aW9uKHUsZCl7aS5leHBvcnRzPWQoKX0pKEFnLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHUsZCl7dmFyIHA9ZC5wcm90b3R5cGUsdj1wLmZvcm1hdDtwLmZvcm1hdD1mdW5jdGlvbihiKXt2YXIgeT10aGlzLFQ9dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB2LmJpbmQodGhpcykoYik7dmFyIF89dGhpcy4kdXRpbHMoKSxBPShifHwiWVlZWS1NTS1ERFRISDptbTpzc1oiKS5yZXBsYWNlKC9cWyhbXlxdXSspXXxRfHdvfHd3fHd8V1d8V3x6enp8enxnZ2dnfEdHR0d8RG98WHx4fGt7MSwyfXxTL2csZnVuY3Rpb24oUCl7c3dpdGNoKFApe2Nhc2UiUSI6cmV0dXJuIE1hdGguY2VpbCgoeS4kTSsxKS8zKTtjYXNlIkRvIjpyZXR1cm4gVC5vcmRpbmFsKHkuJEQpO2Nhc2UiZ2dnZyI6cmV0dXJuIHkud2Vla1llYXIoKTtjYXNlIkdHR0ciOnJldHVybiB5Lmlzb1dlZWtZZWFyKCk7Y2FzZSJ3byI6cmV0dXJuIFQub3JkaW5hbCh5LndlZWsoKSwiVyIpO2Nhc2UidyI6Y2FzZSJ3dyI6cmV0dXJuIF8ucyh5LndlZWsoKSxQPT09InciPzE6MiwiMCIpO2Nhc2UiVyI6Y2FzZSJXVyI6cmV0dXJuIF8ucyh5Lmlzb1dlZWsoKSxQPT09IlciPzE6MiwiMCIpO2Nhc2UiayI6Y2FzZSJrayI6cmV0dXJuIF8ucyhTdHJpbmcoeS4kSD09PTA/MjQ6eS4kSCksUD09PSJrIj8xOjIsIjAiKTtjYXNlIlgiOnJldHVybiBNYXRoLmZsb29yKHkuJGQuZ2V0VGltZSgpLzFlMyk7Y2FzZSJ4IjpyZXR1cm4geS4kZC5nZXRUaW1lKCk7Y2FzZSJ6IjpyZXR1cm4iWyIreS5vZmZzZXROYW1lKCkrIl0iO2Nhc2Uienp6IjpyZXR1cm4iWyIreS5vZmZzZXROYW1lKCJsb25nIikrIl0iO2RlZmF1bHQ6cmV0dXJuIFB9fSk7cmV0dXJuIHYuYmluZCh0aGlzKShBKX19fSl9KShKVWUpO3ZhciBJdG49SlVlLmV4cG9ydHM7Y29uc3QgT3RuPWhDKEl0bik7TGcuZXh0ZW5kKEx0biksTGcuZXh0ZW5kKER0biksTGcuZXh0ZW5kKE90bik7bGV0IGk1PSIiLFhtZT0iIixRbWUsSm1lPSIiLEZSPVtdLFJSPVtdLFptZT17fSxldmU9W10sdUo9W10sR0Q9IiIsdHZlPSIiO2NvbnN0IFpVZT1bImFjdGl2ZSIsImRvbmUiLCJjcml0IiwibWlsZXN0b25lIl07bGV0IG52ZT1bXSxqUj0hMSxydmU9ITEsaXZlPSJzdW5kYXkiLHN2ZT0wO2NvbnN0IE50bj1mdW5jdGlvbigpe2V2ZT1bXSx1Sj1bXSxHRD0iIixudmU9W10sbEo9MCxvdmU9dm9pZCAwLGhKPXZvaWQgMCxtMT1bXSxpNT0iIixYbWU9IiIsdHZlPSIiLFFtZT12b2lkIDAsSm1lPSIiLEZSPVtdLFJSPVtdLGpSPSExLHJ2ZT0hMSxzdmU9MCxabWU9e30sUGcoKSxpdmU9InN1bmRheSJ9LFB0bj1mdW5jdGlvbihpKXtYbWU9aX0sQnRuPWZ1bmN0aW9uKCl7cmV0dXJuIFhtZX0sRnRuPWZ1bmN0aW9uKGkpe1FtZT1pfSxSdG49ZnVuY3Rpb24oKXtyZXR1cm4gUW1lfSxqdG49ZnVuY3Rpb24oaSl7Sm1lPWl9LCR0bj1mdW5jdGlvbigpe3JldHVybiBKbWV9LHp0bj1mdW5jdGlvbihpKXtpNT1pfSxxdG49ZnVuY3Rpb24oKXtqUj0hMH0sSHRuPWZ1bmN0aW9uKCl7cmV0dXJuIGpSfSxWdG49ZnVuY3Rpb24oKXtydmU9ITB9LFV0bj1mdW5jdGlvbigpe3JldHVybiBydmV9LEd0bj1mdW5jdGlvbihpKXt0dmU9aX0sS3RuPWZ1bmN0aW9uKCl7cmV0dXJuIHR2ZX0sV3RuPWZ1bmN0aW9uKCl7cmV0dXJuIGk1fSxZdG49ZnVuY3Rpb24oaSl7RlI9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sWHRuPWZ1bmN0aW9uKCl7cmV0dXJuIEZSfSxRdG49ZnVuY3Rpb24oaSl7UlI9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sSnRuPWZ1bmN0aW9uKCl7cmV0dXJuIFJSfSxadG49ZnVuY3Rpb24oKXtyZXR1cm4gWm1lfSxlbm49ZnVuY3Rpb24oaSl7R0Q9aSxldmUucHVzaChpKX0sdG5uPWZ1bmN0aW9uKCl7cmV0dXJuIGV2ZX0sbm5uPWZ1bmN0aW9uKCl7bGV0IGk9c0dlKCk7Y29uc3Qgcz0xMDtsZXQgdT0wO2Zvcig7IWkmJnU8czspaT1zR2UoKSx1Kys7cmV0dXJuIHVKPW0xLHVKfSxlR2U9ZnVuY3Rpb24oaSxzLHUsZCl7cmV0dXJuIGQuaW5jbHVkZXMoaS5mb3JtYXQocy50cmltKCkpKT8hMTppLmlzb1dlZWtkYXkoKT49NiYmdS5pbmNsdWRlcygid2Vla2VuZHMiKXx8dS5pbmNsdWRlcyhpLmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPyEwOnUuaW5jbHVkZXMoaS5mb3JtYXQocy50cmltKCkpKX0scm5uPWZ1bmN0aW9uKGkpe2l2ZT1pfSxpbm49ZnVuY3Rpb24oKXtyZXR1cm4gaXZlfSx0R2U9ZnVuY3Rpb24oaSxzLHUsZCl7aWYoIXUubGVuZ3RofHxpLm1hbnVhbEVuZFRpbWUpcmV0dXJuO2xldCBwO2kuc3RhcnRUaW1lIGluc3RhbmNlb2YgRGF0ZT9wPUxnKGkuc3RhcnRUaW1lKTpwPUxnKGkuc3RhcnRUaW1lLHMsITApLHA9cC5hZGQoMSwiZCIpO2xldCB2O2kuZW5kVGltZSBpbnN0YW5jZW9mIERhdGU/dj1MZyhpLmVuZFRpbWUpOnY9TGcoaS5lbmRUaW1lLHMsITApO2NvbnN0W2IseV09c25uKHAsdixzLHUsZCk7aS5lbmRUaW1lPWIudG9EYXRlKCksaS5yZW5kZXJFbmRUaW1lPXl9LHNubj1mdW5jdGlvbihpLHMsdSxkLHApe2xldCB2PSExLGI9bnVsbDtmb3IoO2k8PXM7KXZ8fChiPXMudG9EYXRlKCkpLHY9ZUdlKGksdSxkLHApLHYmJihzPXMuYWRkKDEsImQiKSksaT1pLmFkZCgxLCJkIik7cmV0dXJuW3MsYl19LGF2ZT1mdW5jdGlvbihpLHMsdSl7dT11LnRyaW0oKTtjb25zdCBwPS9eYWZ0ZXJccysoPzxpZHM+W1xkXHctIF0rKS8uZXhlYyh1KTtpZihwIT09bnVsbCl7bGV0IGI9bnVsbDtmb3IoY29uc3QgVCBvZiBwLmdyb3Vwcy5pZHMuc3BsaXQoIiAiKSl7bGV0IF89UUMoVCk7XyE9PXZvaWQgMCYmKCFifHxfLmVuZFRpbWU+Yi5lbmRUaW1lKSYmKGI9Xyl9aWYoYilyZXR1cm4gYi5lbmRUaW1lO2NvbnN0IHk9bmV3IERhdGU7cmV0dXJuIHkuc2V0SG91cnMoMCwwLDAsMCkseX1sZXQgdj1MZyh1LHMudHJpbSgpLCEwKTtpZih2LmlzVmFsaWQoKSlyZXR1cm4gdi50b0RhdGUoKTt7WGUuZGVidWcoIkludmFsaWQgZGF0ZToiK3UpLFhlLmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrcy50cmltKCkpO2NvbnN0IGI9bmV3IERhdGUodSk7aWYoYj09PXZvaWQgMHx8aXNOYU4oYi5nZXRUaW1lKCkpfHxiLmdldEZ1bGxZZWFyKCk8LTFlNHx8Yi5nZXRGdWxsWWVhcigpPjFlNCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0ZToiK3UpO3JldHVybiBifX0sbkdlPWZ1bmN0aW9uKGkpe2NvbnN0IHM9L14oXGQrKD86XC5cZCspPykoW01kaG1zd3ldfG1zKSQvLmV4ZWMoaS50cmltKCkpO3JldHVybiBzIT09bnVsbD9bTnVtYmVyLnBhcnNlRmxvYXQoc1sxXSksc1syXV06W05hTiwibXMiXX0sckdlPWZ1bmN0aW9uKGkscyx1LGQ9ITEpe3U9dS50cmltKCk7Y29uc3Qgdj0vXnVudGlsXHMrKD88aWRzPltcZFx3LSBdKykvLmV4ZWModSk7aWYodiE9PW51bGwpe2xldCBBPW51bGw7Zm9yKGNvbnN0IFIgb2Ygdi5ncm91cHMuaWRzLnNwbGl0KCIgIikpe2xldCBGPVFDKFIpO0YhPT12b2lkIDAmJighQXx8Ri5zdGFydFRpbWU8QS5zdGFydFRpbWUpJiYoQT1GKX1pZihBKXJldHVybiBBLnN0YXJ0VGltZTtjb25zdCBQPW5ldyBEYXRlO3JldHVybiBQLnNldEhvdXJzKDAsMCwwLDApLFB9bGV0IGI9TGcodSxzLnRyaW0oKSwhMCk7aWYoYi5pc1ZhbGlkKCkpcmV0dXJuIGQmJihiPWIuYWRkKDEsImQiKSksYi50b0RhdGUoKTtsZXQgeT1MZyhpKTtjb25zdFtULF9dPW5HZSh1KTtpZighTnVtYmVyLmlzTmFOKFQpKXtjb25zdCBBPXkuYWRkKFQsXyk7QS5pc1ZhbGlkKCkmJih5PUEpfXJldHVybiB5LnRvRGF0ZSgpfTtsZXQgbEo9MDtjb25zdCBLRD1mdW5jdGlvbihpKXtyZXR1cm4gaT09PXZvaWQgMD8obEo9bEorMSwidGFzayIrbEopOml9LGFubj1mdW5jdGlvbihpLHMpe2xldCB1O3Muc3Vic3RyKDAsMSk9PT0iOiI/dT1zLnN1YnN0cigxLHMubGVuZ3RoKTp1PXM7Y29uc3QgZD11LnNwbGl0KCIsIikscD17fTtjR2UoZCxwLFpVZSk7Zm9yKGxldCBiPTA7YjxkLmxlbmd0aDtiKyspZFtiXT1kW2JdLnRyaW0oKTtsZXQgdj0iIjtzd2l0Y2goZC5sZW5ndGgpe2Nhc2UgMTpwLmlkPUtEKCkscC5zdGFydFRpbWU9aS5lbmRUaW1lLHY9ZFswXTticmVhaztjYXNlIDI6cC5pZD1LRCgpLHAuc3RhcnRUaW1lPWF2ZSh2b2lkIDAsaTUsZFswXSksdj1kWzFdO2JyZWFrO2Nhc2UgMzpwLmlkPUtEKGRbMF0pLHAuc3RhcnRUaW1lPWF2ZSh2b2lkIDAsaTUsZFsxXSksdj1kWzJdO2JyZWFrfXJldHVybiB2JiYocC5lbmRUaW1lPXJHZShwLnN0YXJ0VGltZSxpNSx2LGpSKSxwLm1hbnVhbEVuZFRpbWU9TGcodiwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSx0R2UocCxpNSxSUixGUikpLHB9LG9ubj1mdW5jdGlvbihpLHMpe2xldCB1O3Muc3Vic3RyKDAsMSk9PT0iOiI/dT1zLnN1YnN0cigxLHMubGVuZ3RoKTp1PXM7Y29uc3QgZD11LnNwbGl0KCIsIikscD17fTtjR2UoZCxwLFpVZSk7Zm9yKGxldCB2PTA7djxkLmxlbmd0aDt2KyspZFt2XT1kW3ZdLnRyaW0oKTtzd2l0Y2goZC5sZW5ndGgpe2Nhc2UgMTpwLmlkPUtEKCkscC5zdGFydFRpbWU9e3R5cGU6InByZXZUYXNrRW5kIixpZDppfSxwLmVuZFRpbWU9e2RhdGE6ZFswXX07YnJlYWs7Y2FzZSAyOnAuaWQ9S0QoKSxwLnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6ZFswXX0scC5lbmRUaW1lPXtkYXRhOmRbMV19O2JyZWFrO2Nhc2UgMzpwLmlkPUtEKGRbMF0pLHAuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpkWzFdfSxwLmVuZFRpbWU9e2RhdGE6ZFsyXX07YnJlYWt9cmV0dXJuIHB9O2xldCBvdmUsaEosbTE9W107Y29uc3QgaUdlPXt9LGNubj1mdW5jdGlvbihpLHMpe2NvbnN0IHU9e3NlY3Rpb246R0QsdHlwZTpHRCxwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOnN9LHRhc2s6aSxjbGFzc2VzOltdfSxkPW9ubihoSixzKTt1LnJhdy5zdGFydFRpbWU9ZC5zdGFydFRpbWUsdS5yYXcuZW5kVGltZT1kLmVuZFRpbWUsdS5pZD1kLmlkLHUucHJldlRhc2tJZD1oSix1LmFjdGl2ZT1kLmFjdGl2ZSx1LmRvbmU9ZC5kb25lLHUuY3JpdD1kLmNyaXQsdS5taWxlc3RvbmU9ZC5taWxlc3RvbmUsdS5vcmRlcj1zdmUsc3ZlKys7Y29uc3QgcD1tMS5wdXNoKHUpO2hKPXUuaWQsaUdlW3UuaWRdPXAtMX0sUUM9ZnVuY3Rpb24oaSl7Y29uc3Qgcz1pR2VbaV07cmV0dXJuIG0xW3NdfSx1bm49ZnVuY3Rpb24oaSxzKXtjb25zdCB1PXtzZWN0aW9uOkdELHR5cGU6R0QsZGVzY3JpcHRpb246aSx0YXNrOmksY2xhc3NlczpbXX0sZD1hbm4ob3ZlLHMpO3Uuc3RhcnRUaW1lPWQuc3RhcnRUaW1lLHUuZW5kVGltZT1kLmVuZFRpbWUsdS5pZD1kLmlkLHUuYWN0aXZlPWQuYWN0aXZlLHUuZG9uZT1kLmRvbmUsdS5jcml0PWQuY3JpdCx1Lm1pbGVzdG9uZT1kLm1pbGVzdG9uZSxvdmU9dSx1Si5wdXNoKHUpfSxzR2U9ZnVuY3Rpb24oKXtjb25zdCBpPWZ1bmN0aW9uKHUpe2NvbnN0IGQ9bTFbdV07bGV0IHA9IiI7c3dpdGNoKG0xW3VdLnJhdy5zdGFydFRpbWUudHlwZSl7Y2FzZSJwcmV2VGFza0VuZCI6e2NvbnN0IHY9UUMoZC5wcmV2VGFza0lkKTtkLnN0YXJ0VGltZT12LmVuZFRpbWU7YnJlYWt9Y2FzZSJnZXRTdGFydERhdGUiOnA9YXZlKHZvaWQgMCxpNSxtMVt1XS5yYXcuc3RhcnRUaW1lLnN0YXJ0RGF0YSkscCYmKG0xW3VdLnN0YXJ0VGltZT1wKTticmVha31yZXR1cm4gbTFbdV0uc3RhcnRUaW1lJiYobTFbdV0uZW5kVGltZT1yR2UobTFbdV0uc3RhcnRUaW1lLGk1LG0xW3VdLnJhdy5lbmRUaW1lLmRhdGEsalIpLG0xW3VdLmVuZFRpbWUmJihtMVt1XS5wcm9jZXNzZWQ9ITAsbTFbdV0ubWFudWFsRW5kVGltZT1MZyhtMVt1XS5yYXcuZW5kVGltZS5kYXRhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLHRHZShtMVt1XSxpNSxSUixGUikpKSxtMVt1XS5wcm9jZXNzZWR9O2xldCBzPSEwO2Zvcihjb25zdFt1LGRdb2YgbTEuZW50cmllcygpKWkodSkscz1zJiZkLnByb2Nlc3NlZDtyZXR1cm4gc30sbG5uPWZ1bmN0aW9uKGkscyl7bGV0IHU9cztxdCgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiJiYodT1wOS5zYW5pdGl6ZVVybChzKSksaS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7UUMoZCkhPT12b2lkIDAmJihvR2UoZCwoKT0+e3dpbmRvdy5vcGVuKHUsIl9zZWxmIil9KSxabWVbZF09dSl9KSxhR2UoaSwiY2xpY2thYmxlIil9LGFHZT1mdW5jdGlvbihpLHMpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2xldCBkPVFDKHUpO2QhPT12b2lkIDAmJmQuY2xhc3Nlcy5wdXNoKHMpfSl9LGhubj1mdW5jdGlvbihpLHMsdSl7aWYocXQoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8cz09PXZvaWQgMClyZXR1cm47bGV0IGQ9W107aWYodHlwZW9mIHU9PSJzdHJpbmciKXtkPXUuc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCB2PTA7djxkLmxlbmd0aDt2Kyspe2xldCBiPWRbdl0udHJpbSgpO2IuY2hhckF0KDApPT09JyInJiZiLmNoYXJBdChiLmxlbmd0aC0xKT09PSciJyYmKGI9Yi5zdWJzdHIoMSxiLmxlbmd0aC0yKSksZFt2XT1ifX1kLmxlbmd0aD09PTAmJmQucHVzaChpKSxRQyhpKSE9PXZvaWQgMCYmb0dlKGksKCk9PntBby5ydW5GdW5jKHMsLi4uZCl9KX0sb0dlPWZ1bmN0aW9uKGkscyl7bnZlLnB1c2goZnVuY3Rpb24oKXtjb25zdCB1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtpfSJdYCk7dSE9PW51bGwmJnUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7cygpfSl9LGZ1bmN0aW9uKCl7Y29uc3QgdT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7aX0tdGV4dCJdYCk7dSE9PW51bGwmJnUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7cygpfSl9KX0sZm5uPXtnZXRDb25maWc6KCk9PnF0KCkuZ2FudHQsY2xlYXI6TnRuLHNldERhdGVGb3JtYXQ6enRuLGdldERhdGVGb3JtYXQ6V3RuLGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOnF0bixlbmREYXRlc0FyZUluY2x1c2l2ZTpIdG4sZW5hYmxlVG9wQXhpczpWdG4sdG9wQXhpc0VuYWJsZWQ6VXRuLHNldEF4aXNGb3JtYXQ6UHRuLGdldEF4aXNGb3JtYXQ6QnRuLHNldFRpY2tJbnRlcnZhbDpGdG4sZ2V0VGlja0ludGVydmFsOlJ0bixzZXRUb2RheU1hcmtlcjpqdG4sZ2V0VG9kYXlNYXJrZXI6JHRuLHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLHNldERpYWdyYW1UaXRsZTpjbSxnZXREaWFncmFtVGl0bGU6QXAsc2V0RGlzcGxheU1vZGU6R3RuLGdldERpc3BsYXlNb2RlOkt0bixzZXRBY2NEZXNjcmlwdGlvbjpTcCxnZXRBY2NEZXNjcmlwdGlvbjpfcCxhZGRTZWN0aW9uOmVubixnZXRTZWN0aW9uczp0bm4sZ2V0VGFza3M6bm5uLGFkZFRhc2s6Y25uLGZpbmRUYXNrQnlJZDpRQyxhZGRUYXNrT3JnOnVubixzZXRJbmNsdWRlczpZdG4sZ2V0SW5jbHVkZXM6WHRuLHNldEV4Y2x1ZGVzOlF0bixnZXRFeGNsdWRlczpKdG4sc2V0Q2xpY2tFdmVudDpmdW5jdGlvbihpLHMsdSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7aG5uKGQscyx1KX0pLGFHZShpLCJjbGlja2FibGUiKX0sc2V0TGluazpsbm4sZ2V0TGlua3M6WnRuLGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24oaSl7bnZlLmZvckVhY2goZnVuY3Rpb24ocyl7cyhpKX0pfSxwYXJzZUR1cmF0aW9uOm5HZSxpc0ludmFsaWREYXRlOmVHZSxzZXRXZWVrZGF5OnJubixnZXRXZWVrZGF5Omlubn07ZnVuY3Rpb24gY0dlKGkscyx1KXtsZXQgZD0hMDtmb3IoO2Q7KWQ9ITEsdS5mb3JFYWNoKGZ1bmN0aW9uKHApe2NvbnN0IHY9Il5cXHMqIitwKyJcXHMqJCIsYj1uZXcgUmVnRXhwKHYpO2lbMF0ubWF0Y2goYikmJihzW3BdPSEwLGkuc2hpZnQoMSksZD0hMCl9KX1jb25zdCBkbm49ZnVuY3Rpb24oKXtYZS5kZWJ1ZygiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbCIpfSx1R2U9e21vbmRheTpERix0dWVzZGF5OnhGZSx3ZWRuZXNkYXk6a0ZlLHRodXJzZGF5OnlDLGZyaWRheTpFRmUsc2F0dXJkYXk6VEZlLHN1bmRheTpNRn0sZ25uPShpLHMpPT57bGV0IHU9Wy4uLmldLm1hcCgoKT0+LTEvMCksZD1bLi4uaV0uc29ydCgodixiKT0+di5zdGFydFRpbWUtYi5zdGFydFRpbWV8fHYub3JkZXItYi5vcmRlcikscD0wO2Zvcihjb25zdCB2IG9mIGQpZm9yKGxldCBiPTA7Yjx1Lmxlbmd0aDtiKyspaWYodi5zdGFydFRpbWU+PXVbYl0pe3VbYl09di5lbmRUaW1lLHYub3JkZXI9YitzLGI+cCYmKHA9Yik7YnJlYWt9cmV0dXJuIHB9O2xldCBWNztjb25zdCBwbm49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpfdG4sZGI6Zm5uLHJlbmRlcmVyOntzZXRDb25mOmRubixkcmF3OmZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0IHA9cXQoKS5nYW50dCx2PXF0KCkuc2VjdXJpdHlMZXZlbDtsZXQgYjt2PT09InNhbmRib3giJiYoYj1JcigiI2kiK3MpKTtjb25zdCB5PUlyKHY9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksVD12PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsXz1ULmdldEVsZW1lbnRCeUlkKHMpO1Y3PV8ucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCxWNz09PXZvaWQgMCYmKFY3PTEyMDApLHAudXNlV2lkdGghPT12b2lkIDAmJihWNz1wLnVzZVdpZHRoKTtjb25zdCBBPWQuZGIuZ2V0VGFza3MoKTtsZXQgUD1bXTtmb3IoY29uc3QgZGUgb2YgQSlQLnB1c2goZGUudHlwZSk7UD1zZShQKTtjb25zdCBSPXt9O2xldCBGPTIqcC50b3BQYWRkaW5nO2lmKGQuZGIuZ2V0RGlzcGxheU1vZGUoKT09PSJjb21wYWN0Inx8cC5kaXNwbGF5TW9kZT09PSJjb21wYWN0Iil7Y29uc3QgZGU9e307Zm9yKGNvbnN0IGdlIG9mIEEpZGVbZ2Uuc2VjdGlvbl09PT12b2lkIDA/ZGVbZ2Uuc2VjdGlvbl09W2dlXTpkZVtnZS5zZWN0aW9uXS5wdXNoKGdlKTtsZXQgWD0wO2Zvcihjb25zdCBnZSBvZiBPYmplY3Qua2V5cyhkZSkpe2NvbnN0IFc9Z25uKGRlW2dlXSxYKSsxO1grPVcsRis9VyoocC5iYXJIZWlnaHQrcC5iYXJHYXApLFJbZ2VdPVd9fWVsc2V7Ris9QS5sZW5ndGgqKHAuYmFySGVpZ2h0K3AuYmFyR2FwKTtmb3IoY29uc3QgZGUgb2YgUClSW2RlXT1BLmZpbHRlcihYPT5YLnR5cGU9PT1kZSkubGVuZ3RofV8uc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrVjcrIiAiK0YpO2NvbnN0IGo9eS5zZWxlY3QoYFtpZD0iJHtzfSJdYCksSz1mTnQoKS5kb21haW4oW1dBdChBLGZ1bmN0aW9uKGRlKXtyZXR1cm4gZGUuc3RhcnRUaW1lfSksS0F0KEEsZnVuY3Rpb24oZGUpe3JldHVybiBkZS5lbmRUaW1lfSldKS5yYW5nZVJvdW5kKFswLFY3LXAubGVmdFBhZGRpbmctcC5yaWdodFBhZGRpbmddKTtmdW5jdGlvbiBlZShkZSxYKXtjb25zdCBnZT1kZS5zdGFydFRpbWUsVz1YLnN0YXJ0VGltZTtsZXQgeGU9MDtyZXR1cm4gZ2U+Vz94ZT0xOmdlPFcmJih4ZT0tMSkseGV9QS5zb3J0KGVlKSxpZShBLFY3LEYpLE5nKGosRixWNyxwLnVzZU1heFdpZHRoKSxqLmFwcGVuZCgidGV4dCIpLnRleHQoZC5kYi5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsVjcvMikuYXR0cigieSIscC50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKTtmdW5jdGlvbiBpZShkZSxYLGdlKXtjb25zdCBXPXAuYmFySGVpZ2h0LHhlPVcrcC5iYXJHYXAsVT1wLnRvcFBhZGRpbmcsRmU9cC5sZWZ0UGFkZGluZyxQZT1zRCgpLmRvbWFpbihbMCxQLmxlbmd0aF0pLnJhbmdlKFsiIzAwQjlGQSIsIiNGOTUwMDIiXSkuaW50ZXJwb2xhdGUoYkR0KTtwZSh4ZSxVLEZlLFgsZ2UsZGUsZC5kYi5nZXRFeGNsdWRlcygpLGQuZGIuZ2V0SW5jbHVkZXMoKSksYmUoRmUsVSxYLGdlKSxvZShkZSx4ZSxVLEZlLFcsUGUsWCksYWUoeGUsVSksbmUoRmUsVSxYLGdlKX1mdW5jdGlvbiBvZShkZSxYLGdlLFcseGUsVSxGZSl7Y29uc3QgamU9Wy4uLm5ldyBTZXQoZGUubWFwKGtlPT5rZS5vcmRlcikpXS5tYXAoa2U9PmRlLmZpbmQoS2U9PktlLm9yZGVyPT09a2UpKTtqLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoamUpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsZnVuY3Rpb24oa2UsS2Upe3JldHVybiBLZT1rZS5vcmRlcixLZSpYK2dlLTJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oKXtyZXR1cm4gRmUtcC5yaWdodFBhZGRpbmcvMn0pLmF0dHIoImhlaWdodCIsWCkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGtlKXtmb3IoY29uc3RbS2UsRnRdb2YgUC5lbnRyaWVzKCkpaWYoa2UudHlwZT09PUZ0KXJldHVybiJzZWN0aW9uIHNlY3Rpb24iK0tlJXAubnVtYmVyU2VjdGlvblN0eWxlcztyZXR1cm4ic2VjdGlvbiBzZWN0aW9uMCJ9KTtjb25zdCBJZT1qLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoZGUpLmVudGVyKCksU2U9ZC5kYi5nZXRMaW5rcygpO2lmKEllLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbihrZSl7cmV0dXJuIGtlLmlkfSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IixmdW5jdGlvbihrZSl7cmV0dXJuIGtlLm1pbGVzdG9uZT9LKGtlLnN0YXJ0VGltZSkrVysuNSooSyhrZS5lbmRUaW1lKS1LKGtlLnN0YXJ0VGltZSkpLS41KnhlOksoa2Uuc3RhcnRUaW1lKStXfSkuYXR0cigieSIsZnVuY3Rpb24oa2UsS2Upe3JldHVybiBLZT1rZS5vcmRlcixLZSpYK2dlfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKGtlKXtyZXR1cm4ga2UubWlsZXN0b25lP3hlOksoa2UucmVuZGVyRW5kVGltZXx8a2UuZW5kVGltZSktSyhrZS5zdGFydFRpbWUpfSkuYXR0cigiaGVpZ2h0Iix4ZSkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsZnVuY3Rpb24oa2UsS2Upe3JldHVybiBLZT1rZS5vcmRlciwoSyhrZS5zdGFydFRpbWUpK1crLjUqKEsoa2UuZW5kVGltZSktSyhrZS5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisoS2UqWCtnZSsuNSp4ZSkudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGtlKXtjb25zdCBLZT0idGFzayI7bGV0IEZ0PSIiO2tlLmNsYXNzZXMubGVuZ3RoPjAmJihGdD1rZS5jbGFzc2VzLmpvaW4oIiAiKSk7bGV0IE5lPTA7Zm9yKGNvbnN0W190LEV0XW9mIFAuZW50cmllcygpKWtlLnR5cGU9PT1FdCYmKE5lPV90JXAubnVtYmVyU2VjdGlvblN0eWxlcyk7bGV0IGduPSIiO3JldHVybiBrZS5hY3RpdmU/a2UuY3JpdD9nbis9IiBhY3RpdmVDcml0Ijpnbj0iIGFjdGl2ZSI6a2UuZG9uZT9rZS5jcml0P2duPSIgZG9uZUNyaXQiOmduPSIgZG9uZSI6a2UuY3JpdCYmKGduKz0iIGNyaXQiKSxnbi5sZW5ndGg9PT0wJiYoZ249IiB0YXNrIiksa2UubWlsZXN0b25lJiYoZ249IiBtaWxlc3RvbmUgIitnbiksZ24rPU5lLGduKz0iICIrRnQsS2UrZ259KSxJZS5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsZnVuY3Rpb24oa2Upe3JldHVybiBrZS5pZCsiLXRleHQifSkudGV4dChmdW5jdGlvbihrZSl7cmV0dXJuIGtlLnRhc2t9KS5hdHRyKCJmb250LXNpemUiLHAuZm9udFNpemUpLmF0dHIoIngiLGZ1bmN0aW9uKGtlKXtsZXQgS2U9SyhrZS5zdGFydFRpbWUpLEZ0PUsoa2UucmVuZGVyRW5kVGltZXx8a2UuZW5kVGltZSk7a2UubWlsZXN0b25lJiYoS2UrPS41KihLKGtlLmVuZFRpbWUpLUsoa2Uuc3RhcnRUaW1lKSktLjUqeGUpLGtlLm1pbGVzdG9uZSYmKEZ0PUtlK3hlKTtjb25zdCBOZT10aGlzLmdldEJCb3goKS53aWR0aDtyZXR1cm4gTmU+RnQtS2U/RnQrTmUrMS41KnAubGVmdFBhZGRpbmc+RmU/S2UrVy01OkZ0K1crNTooRnQtS2UpLzIrS2UrV30pLmF0dHIoInkiLGZ1bmN0aW9uKGtlLEtlKXtyZXR1cm4gS2U9a2Uub3JkZXIsS2UqWCtwLmJhckhlaWdodC8yKyhwLmZvbnRTaXplLzItMikrZ2V9KS5hdHRyKCJ0ZXh0LWhlaWdodCIseGUpLmF0dHIoImNsYXNzIixmdW5jdGlvbihrZSl7Y29uc3QgS2U9SyhrZS5zdGFydFRpbWUpO2xldCBGdD1LKGtlLmVuZFRpbWUpO2tlLm1pbGVzdG9uZSYmKEZ0PUtlK3hlKTtjb25zdCBOZT10aGlzLmdldEJCb3goKS53aWR0aDtsZXQgZ249IiI7a2UuY2xhc3Nlcy5sZW5ndGg+MCYmKGduPWtlLmNsYXNzZXMuam9pbigiICIpKTtsZXQgX3Q9MDtmb3IoY29uc3RbR3QsbG5db2YgUC5lbnRyaWVzKCkpa2UudHlwZT09PWxuJiYoX3Q9R3QlcC5udW1iZXJTZWN0aW9uU3R5bGVzKTtsZXQgRXQ9IiI7cmV0dXJuIGtlLmFjdGl2ZSYmKGtlLmNyaXQ/RXQ9ImFjdGl2ZUNyaXRUZXh0IitfdDpFdD0iYWN0aXZlVGV4dCIrX3QpLGtlLmRvbmU/a2UuY3JpdD9FdD1FdCsiIGRvbmVDcml0VGV4dCIrX3Q6RXQ9RXQrIiBkb25lVGV4dCIrX3Q6a2UuY3JpdCYmKEV0PUV0KyIgY3JpdFRleHQiK190KSxrZS5taWxlc3RvbmUmJihFdCs9IiBtaWxlc3RvbmVUZXh0IiksTmU+RnQtS2U/RnQrTmUrMS41KnAubGVmdFBhZGRpbmc+RmU/Z24rIiB0YXNrVGV4dE91dHNpZGVMZWZ0IHRhc2tUZXh0T3V0c2lkZSIrX3QrIiAiK0V0OmduKyIgdGFza1RleHRPdXRzaWRlUmlnaHQgdGFza1RleHRPdXRzaWRlIitfdCsiICIrRXQrIiB3aWR0aC0iK05lOmduKyIgdGFza1RleHQgdGFza1RleHQiK190KyIgIitFdCsiIHdpZHRoLSIrTmV9KSxxdCgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCIpe2xldCBrZTtrZT1JcigiI2kiK3MpO2NvbnN0IEtlPWtlLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O0llLmZpbHRlcihmdW5jdGlvbihGdCl7cmV0dXJuIFNlW0Z0LmlkXSE9PXZvaWQgMH0pLmVhY2goZnVuY3Rpb24oRnQpe3ZhciBOZT1LZS5xdWVyeVNlbGVjdG9yKCIjIitGdC5pZCksZ249S2UucXVlcnlTZWxlY3RvcigiIyIrRnQuaWQrIi10ZXh0Iik7Y29uc3QgX3Q9TmUucGFyZW50Tm9kZTt2YXIgRXQ9S2UuY3JlYXRlRWxlbWVudCgiYSIpO0V0LnNldEF0dHJpYnV0ZSgieGxpbms6aHJlZiIsU2VbRnQuaWRdKSxFdC5zZXRBdHRyaWJ1dGUoInRhcmdldCIsIl90b3AiKSxfdC5hcHBlbmRDaGlsZChFdCksRXQuYXBwZW5kQ2hpbGQoTmUpLEV0LmFwcGVuZENoaWxkKGduKX0pfX1mdW5jdGlvbiBwZShkZSxYLGdlLFcseGUsVSxGZSxQZSl7aWYoRmUubGVuZ3RoPT09MCYmUGUubGVuZ3RoPT09MClyZXR1cm47bGV0IGplLEllO2Zvcihjb25zdHtzdGFydFRpbWU6TmUsZW5kVGltZTpnbn1vZiBVKShqZT09PXZvaWQgMHx8TmU8amUpJiYoamU9TmUpLChJZT09PXZvaWQgMHx8Z24+SWUpJiYoSWU9Z24pO2lmKCFqZXx8IUllKXJldHVybjtpZihMZyhJZSkuZGlmZihMZyhqZSksInllYXIiKT41KXtYZS53YXJuKCJUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCB0aW1lIGlzIG1vcmUgdGhhbiA1IHllYXJzLiBUaGlzIHdpbGwgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzLiBTa2lwcGluZyBkcmF3aW5nIGV4Y2x1ZGUgZGF5cy4iKTtyZXR1cm59Y29uc3QgU2U9ZC5kYi5nZXREYXRlRm9ybWF0KCksQ2U9W107bGV0IGtlPW51bGwsS2U9TGcoamUpO2Zvcig7S2UudmFsdWVPZigpPD1JZTspZC5kYi5pc0ludmFsaWREYXRlKEtlLFNlLEZlLFBlKT9rZT9rZS5lbmQ9S2U6a2U9e3N0YXJ0OktlLGVuZDpLZX06a2UmJihDZS5wdXNoKGtlKSxrZT1udWxsKSxLZT1LZS5hZGQoMSwiZCIpO2ouYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShDZSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsZnVuY3Rpb24oTmUpe3JldHVybiJleGNsdWRlLSIrTmUuc3RhcnQuZm9ybWF0KCJZWVlZLU1NLUREIil9KS5hdHRyKCJ4IixmdW5jdGlvbihOZSl7cmV0dXJuIEsoTmUuc3RhcnQpK2dlfSkuYXR0cigieSIscC5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cigid2lkdGgiLGZ1bmN0aW9uKE5lKXtjb25zdCBnbj1OZS5lbmQuYWRkKDEsImRheSIpO3JldHVybiBLKGduKS1LKE5lLnN0YXJ0KX0pLmF0dHIoImhlaWdodCIseGUtWC1wLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS5hdHRyKCJ0cmFuc2Zvcm0tb3JpZ2luIixmdW5jdGlvbihOZSxnbil7cmV0dXJuKEsoTmUuc3RhcnQpK2dlKy41KihLKE5lLmVuZCktSyhOZS5zdGFydCkpKS50b1N0cmluZygpKyJweCAiKyhnbipkZSsuNSp4ZSkudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLCJleGNsdWRlLXJhbmdlIil9ZnVuY3Rpb24gYmUoZGUsWCxnZSxXKXtsZXQgeGU9ckx0KEspLnRpY2tTaXplKC1XK1grcC5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdChzWChkLmRiLmdldEF4aXNGb3JtYXQoKXx8cC5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7Y29uc3QgRmU9L14oWzEtOV1cZCopKG1pbGxpc2Vjb25kfHNlY29uZHxtaW51dGV8aG91cnxkYXl8d2Vla3xtb250aCkkLy5leGVjKGQuZGIuZ2V0VGlja0ludGVydmFsKCl8fHAudGlja0ludGVydmFsKTtpZihGZSE9PW51bGwpe2NvbnN0IFBlPUZlWzFdLGplPUZlWzJdLEllPWQuZGIuZ2V0V2Vla2RheSgpfHxwLndlZWtkYXk7c3dpdGNoKGplKXtjYXNlIm1pbGxpc2Vjb25kIjp4ZS50aWNrcyhhRC5ldmVyeShQZSkpO2JyZWFrO2Nhc2Uic2Vjb25kIjp4ZS50aWNrcyhiOS5ldmVyeShQZSkpO2JyZWFrO2Nhc2UibWludXRlIjp4ZS50aWNrcyhBRi5ldmVyeShQZSkpO2JyZWFrO2Nhc2UiaG91ciI6eGUudGlja3MoTEYuZXZlcnkoUGUpKTticmVhaztjYXNlImRheSI6eGUudGlja3ModkMuZXZlcnkoUGUpKTticmVhaztjYXNlIndlZWsiOnhlLnRpY2tzKHVHZVtJZV0uZXZlcnkoUGUpKTticmVhaztjYXNlIm1vbnRoIjp4ZS50aWNrcyhJRi5ldmVyeShQZSkpO2JyZWFrfX1pZihqLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JpZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2RlKyIsICIrKFctNTApKyIpIikuY2FsbCh4ZSkuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKCJzdHJva2UiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZHkiLCIxZW0iKSxkLmRiLnRvcEF4aXNFbmFibGVkKCl8fHAudG9wQXhpcyl7bGV0IFBlPW5MdChLKS50aWNrU2l6ZSgtVytYK3AuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoc1goZC5kYi5nZXRBeGlzRm9ybWF0KCl8fHAuYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO2lmKEZlIT09bnVsbCl7Y29uc3QgamU9RmVbMV0sSWU9RmVbMl0sU2U9ZC5kYi5nZXRXZWVrZGF5KCl8fHAud2Vla2RheTtzd2l0Y2goSWUpe2Nhc2UibWlsbGlzZWNvbmQiOlBlLnRpY2tzKGFELmV2ZXJ5KGplKSk7YnJlYWs7Y2FzZSJzZWNvbmQiOlBlLnRpY2tzKGI5LmV2ZXJ5KGplKSk7YnJlYWs7Y2FzZSJtaW51dGUiOlBlLnRpY2tzKEFGLmV2ZXJ5KGplKSk7YnJlYWs7Y2FzZSJob3VyIjpQZS50aWNrcyhMRi5ldmVyeShqZSkpO2JyZWFrO2Nhc2UiZGF5IjpQZS50aWNrcyh2Qy5ldmVyeShqZSkpO2JyZWFrO2Nhc2Uid2VlayI6UGUudGlja3ModUdlW1NlXS5ldmVyeShqZSkpO2JyZWFrO2Nhc2UibW9udGgiOlBlLnRpY2tzKElGLmV2ZXJ5KGplKSk7YnJlYWt9fWouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZGUrIiwgIitYKyIpIikuY2FsbChQZSkuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKCJzdHJva2UiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCl9fWZ1bmN0aW9uIGFlKGRlLFgpe2xldCBnZT0wO2NvbnN0IFc9T2JqZWN0LmtleXMoUikubWFwKHhlPT5beGUsUlt4ZV1dKTtqLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoVykuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24oeGUpe2NvbnN0IFU9eGVbMF0uc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpLEZlPS0oVS5sZW5ndGgtMSkvMixQZT1ULmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7UGUuc2V0QXR0cmlidXRlKCJkeSIsRmUrImVtIik7Zm9yKGNvbnN0W2plLEllXW9mIFUuZW50cmllcygpKXtjb25zdCBTZT1ULmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO1NlLnNldEF0dHJpYnV0ZSgiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLFNlLnNldEF0dHJpYnV0ZSgieCIsIjEwIiksamU+MCYmU2Uuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLFNlLnRleHRDb250ZW50PUllLFBlLmFwcGVuZENoaWxkKFNlKX1yZXR1cm4gUGV9KS5hdHRyKCJ4IiwxMCkuYXR0cigieSIsZnVuY3Rpb24oeGUsVSl7aWYoVT4wKWZvcihsZXQgRmU9MDtGZTxVO0ZlKyspcmV0dXJuIGdlKz1XW1UtMV1bMV0seGVbMV0qZGUvMitnZSpkZStYO2Vsc2UgcmV0dXJuIHhlWzFdKmRlLzIrWH0pLmF0dHIoImZvbnQtc2l6ZSIscC5zZWN0aW9uRm9udFNpemUpLmF0dHIoImNsYXNzIixmdW5jdGlvbih4ZSl7Zm9yKGNvbnN0W1UsRmVdb2YgUC5lbnRyaWVzKCkpaWYoeGVbMF09PT1GZSlyZXR1cm4ic2VjdGlvblRpdGxlIHNlY3Rpb25UaXRsZSIrVSVwLm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb25UaXRsZSJ9KX1mdW5jdGlvbiBuZShkZSxYLGdlLFcpe2NvbnN0IHhlPWQuZGIuZ2V0VG9kYXlNYXJrZXIoKTtpZih4ZT09PSJvZmYiKXJldHVybjtjb25zdCBVPWouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLEZlPW5ldyBEYXRlLFBlPVUuYXBwZW5kKCJsaW5lIik7UGUuYXR0cigieDEiLEsoRmUpK2RlKS5hdHRyKCJ4MiIsSyhGZSkrZGUpLmF0dHIoInkxIixwLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJ5MiIsVy1wLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRvZGF5IikseGUhPT0iIiYmUGUuYXR0cigic3R5bGUiLHhlLnJlcGxhY2UoLywvZywiOyIpKX1mdW5jdGlvbiBzZShkZSl7Y29uc3QgWD17fSxnZT1bXTtmb3IobGV0IFc9MCx4ZT1kZS5sZW5ndGg7Vzx4ZTsrK1cpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFgsZGVbV10pfHwoWFtkZVtXXV09ITAsZ2UucHVzaChkZVtXXSkpO3JldHVybiBnZX19fSxzdHlsZXM6aT0+YAogIC5tZXJtYWlkLW1haW4tZm9udCB7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSwgInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTsKICB9CgogIC5leGNsdWRlLXJhbmdlIHsKICAgIGZpbGw6ICR7aS5leGNsdWRlQmtnQ29sb3J9OwogIH0KCiAgLnNlY3Rpb24gewogICAgc3Ryb2tlOiBub25lOwogICAgb3BhY2l0eTogMC4yOwogIH0KCiAgLnNlY3Rpb24wIHsKICAgIGZpbGw6ICR7aS5zZWN0aW9uQmtnQ29sb3J9OwogIH0KCiAgLnNlY3Rpb24yIHsKICAgIGZpbGw6ICR7aS5zZWN0aW9uQmtnQ29sb3IyfTsKICB9CgogIC5zZWN0aW9uMSwKICAuc2VjdGlvbjMgewogICAgZmlsbDogJHtpLmFsdFNlY3Rpb25Ca2dDb2xvcn07CiAgICBvcGFjaXR5OiAwLjI7CiAgfQoKICAuc2VjdGlvblRpdGxlMCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlMSB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlMiB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlMyB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlIHsKICAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCAidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYpOwogIH0KCgogIC8qIEdyaWQgYW5kIGF4aXMgKi8KCiAgLmdyaWQgLnRpY2sgewogICAgc3Ryb2tlOiAke2kuZ3JpZENvbG9yfTsKICAgIG9wYWNpdHk6IDAuODsKICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICB9CgogIC5ncmlkIC50aWNrIHRleHQgewogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KCiAgLmdyaWQgcGF0aCB7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgfQoKCiAgLyogVG9kYXkgbGluZSAqLwoKICAudG9kYXkgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogJHtpLnRvZGF5TGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KCgogIC8qIFRhc2sgc3R5bGluZyAqLwoKICAvKiBEZWZhdWx0IHRhc2sgKi8KCiAgLnRhc2sgewogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLnRhc2tUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSwgInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTsKICB9CgogIC50YXNrVGV4dE91dHNpZGVSaWdodCB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9OwogICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7CiAgfQoKICAudGFza1RleHRPdXRzaWRlTGVmdCB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9OwogICAgdGV4dC1hbmNob3I6IGVuZDsKICB9CgoKICAvKiBTcGVjaWFsIGNhc2UgY2xpY2thYmxlICovCgogIC50YXNrLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAudGFza1RleHQuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZpbGw6ICR7aS50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgfQoKICAudGFza1RleHRPdXRzaWRlTGVmdC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHtpLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgogIC50YXNrVGV4dE91dHNpZGVSaWdodC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHtpLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgoKICAvKiBTcGVjaWZpYyB0YXNrIHNldHRpbmdzIGZvciB0aGUgc2VjdGlvbnMqLwoKICAudGFza1RleHQwLAogIC50YXNrVGV4dDEsCiAgLnRhc2tUZXh0MiwKICAudGFza1RleHQzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dENvbG9yfTsKICB9CgogIC50YXNrMCwKICAudGFzazEsCiAgLnRhc2syLAogIC50YXNrMyB7CiAgICBmaWxsOiAke2kudGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLnRhc2tCb3JkZXJDb2xvcn07CiAgfQoKICAudGFza1RleHRPdXRzaWRlMCwKICAudGFza1RleHRPdXRzaWRlMgogIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dE91dHNpZGVDb2xvcn07CiAgfQoKICAudGFza1RleHRPdXRzaWRlMSwKICAudGFza1RleHRPdXRzaWRlMyB7CiAgICBmaWxsOiAke2kudGFza1RleHRPdXRzaWRlQ29sb3J9OwogIH0KCgogIC8qIEFjdGl2ZSB0YXNrICovCgogIC5hY3RpdmUwLAogIC5hY3RpdmUxLAogIC5hY3RpdmUyLAogIC5hY3RpdmUzIHsKICAgIGZpbGw6ICR7aS5hY3RpdmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuYWN0aXZlVGFza0JvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmVUZXh0MCwKICAuYWN0aXZlVGV4dDEsCiAgLmFjdGl2ZVRleHQyLAogIC5hY3RpdmVUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKCiAgLyogQ29tcGxldGVkIHRhc2sgKi8KCiAgLmRvbmUwLAogIC5kb25lMSwKICAuZG9uZTIsCiAgLmRvbmUzIHsKICAgIHN0cm9rZTogJHtpLmRvbmVUYXNrQm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmRvbmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmRvbmVUZXh0MCwKICAuZG9uZVRleHQxLAogIC5kb25lVGV4dDIsCiAgLmRvbmVUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKCiAgLyogVGFza3Mgb24gdGhlIGNyaXRpY2FsIGxpbmUgKi8KCiAgLmNyaXQwLAogIC5jcml0MSwKICAuY3JpdDIsCiAgLmNyaXQzIHsKICAgIHN0cm9rZTogJHtpLmNyaXRCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kuY3JpdEJrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5hY3RpdmVDcml0MCwKICAuYWN0aXZlQ3JpdDEsCiAgLmFjdGl2ZUNyaXQyLAogIC5hY3RpdmVDcml0MyB7CiAgICBzdHJva2U6ICR7aS5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmFjdGl2ZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuZG9uZUNyaXQwLAogIC5kb25lQ3JpdDEsCiAgLmRvbmVDcml0MiwKICAuZG9uZUNyaXQzIHsKICAgIHN0cm9rZTogJHtpLmNyaXRCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kuZG9uZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7CiAgfQoKICAubWlsZXN0b25lIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSBzY2FsZSgwLjgsMC44KTsKICB9CgogIC5taWxlc3RvbmVUZXh0IHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB9CiAgLmRvbmVDcml0VGV4dDAsCiAgLmRvbmVDcml0VGV4dDEsCiAgLmRvbmVDcml0VGV4dDIsCiAgLmRvbmVDcml0VGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCiAgLmFjdGl2ZUNyaXRUZXh0MCwKICAuYWN0aXZlQ3JpdFRleHQxLAogIC5hY3RpdmVDcml0VGV4dDIsCiAgLmFjdGl2ZUNyaXRUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKICAudGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcnx8aS50ZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7CiAgfQpgfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgY3ZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24odixiLHksVCl7Zm9yKHk9eXx8e30sVD12Lmxlbmd0aDtULS07eVt2W1RdXT1iKTtyZXR1cm4geX0scz1bNiw5LDEwXSx1PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxpbmZvOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsc3RhdGVtZW50OjgsTkw6OSxzaG93SW5mbzoxMCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiaW5mbyIsNjoiRU9GIiw5OiJOTCIsMTA6InNob3dJbmZvIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDFdLFs3LDFdLFs4LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGIseSxULF8sQSxQLFIpe3N3aXRjaChQLmxlbmd0aC0xLEEpe2Nhc2UgMTpyZXR1cm4gXztjYXNlIDQ6YnJlYWs7Y2FzZSA2Ol8uc2V0SW5mbyghMCk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkocyxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6Niw5OlsxLDddLDEwOlsxLDhdfSx7MTpbMiwxXX0saShzLFsyLDNdKSxpKHMsWzIsNF0pLGkocyxbMiw1XSksaShzLFsyLDZdKV0sZGVmYXVsdEFjdGlvbnM6ezQ6WzIsMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oYix5KXtpZih5LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoYik7ZWxzZXt2YXIgVD1uZXcgRXJyb3IoYik7dGhyb3cgVC5oYXNoPXksVH19LHBhcnNlOmZ1bmN0aW9uKGIpe3ZhciB5PXRoaXMsVD1bMF0sXz1bXSxBPVtudWxsXSxQPVtdLFI9dGhpcy50YWJsZSxGPSIiLGo9MCxLPTAsZWU9MixpZT0xLG9lPVAuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscGU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxiZT17eXk6e319O2Zvcih2YXIgYWUgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxhZSkmJihiZS55eVthZV09dGhpcy55eVthZV0pO3BlLnNldElucHV0KGIsYmUueXkpLGJlLnl5LmxleGVyPXBlLGJlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBwZS55eWxsb2M+InUiJiYocGUueXlsbG9jPXt9KTt2YXIgbmU9cGUueXlsbG9jO1AucHVzaChuZSk7dmFyIHNlPXBlLm9wdGlvbnMmJnBlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBiZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1iZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBkZSgpe3ZhciBDZTtyZXR1cm4gQ2U9Xy5wb3AoKXx8cGUubGV4KCl8fGllLHR5cGVvZiBDZSE9Im51bWJlciImJihDZSBpbnN0YW5jZW9mIEFycmF5JiYoXz1DZSxDZT1fLnBvcCgpKSxDZT15LnN5bWJvbHNfW0NlXXx8Q2UpLENlfWZvcih2YXIgWCxnZSxXLHhlLFU9e30sRmUsUGUsamUsSWU7Oyl7aWYoZ2U9VFtULmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2dlXT9XPXRoaXMuZGVmYXVsdEFjdGlvbnNbZ2VdOigoWD09PW51bGx8fHR5cGVvZiBYPiJ1IikmJihYPWRlKCkpLFc9UltnZV0mJlJbZ2VdW1hdKSx0eXBlb2YgVz4idSJ8fCFXLmxlbmd0aHx8IVdbMF0pe3ZhciBTZT0iIjtJZT1bXTtmb3IoRmUgaW4gUltnZV0pdGhpcy50ZXJtaW5hbHNfW0ZlXSYmRmU+ZWUmJkllLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tGZV0rIiciKTtwZS5zaG93UG9zaXRpb24/U2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoaisxKStgOgpgK3BlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArSWUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tYXXx8WCkrIiciOlNlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGorMSkrIjogVW5leHBlY3RlZCAiKyhYPT1pZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tYXXx8WCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoU2Use3RleHQ6cGUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1hdfHxYLGxpbmU6cGUueXlsaW5lbm8sbG9jOm5lLGV4cGVjdGVkOkllfSl9aWYoV1swXWluc3RhbmNlb2YgQXJyYXkmJlcubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitnZSsiLCB0b2tlbjogIitYKTtzd2l0Y2goV1swXSl7Y2FzZSAxOlQucHVzaChYKSxBLnB1c2gocGUueXl0ZXh0KSxQLnB1c2gocGUueXlsbG9jKSxULnB1c2goV1sxXSksWD1udWxsLEs9cGUueXlsZW5nLEY9cGUueXl0ZXh0LGo9cGUueXlsaW5lbm8sbmU9cGUueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihQZT10aGlzLnByb2R1Y3Rpb25zX1tXWzFdXVsxXSxVLiQ9QVtBLmxlbmd0aC1QZV0sVS5fJD17Zmlyc3RfbGluZTpQW1AubGVuZ3RoLShQZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOlBbUC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpQW1AubGVuZ3RoLShQZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpQW1AubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxzZSYmKFUuXyQucmFuZ2U9W1BbUC5sZW5ndGgtKFBlfHwxKV0ucmFuZ2VbMF0sUFtQLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHhlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShVLFtGLEssaixiZS55eSxXWzFdLEEsUF0uY29uY2F0KG9lKSksdHlwZW9mIHhlPCJ1IilyZXR1cm4geGU7UGUmJihUPVQuc2xpY2UoMCwtMSpQZSoyKSxBPUEuc2xpY2UoMCwtMSpQZSksUD1QLnNsaWNlKDAsLTEqUGUpKSxULnB1c2godGhpcy5wcm9kdWN0aW9uc19bV1sxXV1bMF0pLEEucHVzaChVLiQpLFAucHVzaChVLl8kKSxqZT1SW1RbVC5sZW5ndGgtMl1dW1RbVC5sZW5ndGgtMV1dLFQucHVzaChqZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGQ9ZnVuY3Rpb24oKXt2YXIgdj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih5LFQpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoeSxUKTtlbHNlIHRocm93IG5ldyBFcnJvcih5KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oYix5KXtyZXR1cm4gdGhpcy55eT15fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1iLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1iLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1iLHRoaXMubWF0Y2hlZCs9Yjt2YXIgeT1iLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4geT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksYn0sdW5wdXQ6ZnVuY3Rpb24oYil7dmFyIHk9Yi5sZW5ndGgsVD1iLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Yit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgteSksdGhpcy5vZmZzZXQtPXk7dmFyIF89dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksVC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVQubGVuZ3RoLTEpO3ZhciBBPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpUPyhULmxlbmd0aD09PV8ubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStfW18ubGVuZ3RoLVQubGVuZ3RoXS5sZW5ndGgtVFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXl9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bQVswXSxBWzBdK3RoaXMueXlsZW5nLXldKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihiKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoYikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGIubGVuZ3RoPjIwPyIuLi4iOiIiKStiLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5tYXRjaDtyZXR1cm4gYi5sZW5ndGg8MjAmJihiKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1iLmxlbmd0aCkpLChiLnN1YnN0cigwLDIwKSsoYi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wYXN0SW5wdXQoKSx5PW5ldyBBcnJheShiLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGIrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK3krIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKGIseSl7dmFyIFQsXyxBO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihBPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEEueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksXz1iWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxfJiYodGhpcy55eWxpbmVubys9Xy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpfP19bXy5sZW5ndGgtMV0ubGVuZ3RoLV9bXy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitiWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWJbMF0sdGhpcy5tYXRjaCs9YlswXSx0aGlzLm1hdGNoZXM9Yix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShiWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1iWzBdLFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMseSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxUKXJldHVybiBUO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBQIGluIEEpdGhpc1tQXT1BW1BdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGIseSxULF87dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgQT10aGlzLl9jdXJyZW50UnVsZXMoKSxQPTA7UDxBLmxlbmd0aDtQKyspaWYoVD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0FbUF1dKSxUJiYoIXl8fFRbMF0ubGVuZ3RoPnlbMF0ubGVuZ3RoKSl7aWYoeT1ULF89UCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihiPXRoaXMudGVzdF9tYXRjaChULEFbUF0pLGIhPT0hMSlyZXR1cm4gYjtpZih0aGlzLl9iYWNrdHJhY2spe3k9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4geT8oYj10aGlzLnRlc3RfbWF0Y2goeSxBW19dKSxiIT09ITE/YjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5uZXh0KCk7cmV0dXJuIHl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHkpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh5KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiB5PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oeSl7cmV0dXJuIHk9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh5fHwwKSx5Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbeV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oeSl7dGhpcy5iZWdpbih5KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih5LFQsXyxBKXtzd2l0Y2goXyl7Y2FzZSAwOnJldHVybiA0O2Nhc2UgMTpyZXR1cm4gOTtjYXNlIDI6cmV0dXJuInNwYWNlIjtjYXNlIDM6cmV0dXJuIDEwO2Nhc2UgNDpyZXR1cm4gNjtjYXNlIDU6cmV0dXJuIlRYVCJ9fSxydWxlczpbL14oPzppbmZvXGIpL2ksL14oPzpbXHNcblxyXSspL2ksL14oPzpbXHNdKykvaSwvXig/OnNob3dJbmZvXGIpL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7SU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHZ9KCk7dS5sZXhlcj1kO2Z1bmN0aW9uIHAoKXt0aGlzLnl5PXt9fXJldHVybiBwLnByb3RvdHlwZT11LHUuUGFyc2VyPXAsbmV3IHB9KCk7Y3ZlLnBhcnNlcj1jdmU7Y29uc3QgYm5uPWN2ZSxsR2U9e2luZm86ITF9O2xldCB1dmU9bEdlLmluZm87Y29uc3QgbW5uPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6Ym5uLGRiOntjbGVhcjooKT0+e3V2ZT1sR2UuaW5mb30sc2V0SW5mbzppPT57dXZlPWl9LGdldEluZm86KCk9PnV2ZX0scmVuZGVyZXI6e2RyYXc6KGkscyx1KT0+e1hlLmRlYnVnKGByZW5kZXJpbmcgaW5mbyBkaWFncmFtCmAraSk7Y29uc3QgZD1yUihzKTtOZyhkLDEwMCw0MDAsITApLGQuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwzMikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChgdiR7dX1gKX19fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgbHZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24ocGUsYmUsYWUsbmUpe2ZvcihhZT1hZXx8e30sbmU9cGUubGVuZ3RoO25lLS07YWVbcGVbbmVdXT1iZSk7cmV0dXJuIGFlfSxzPVsxLDNdLHU9WzEsNF0sZD1bMSw1XSxwPVsxLDZdLHY9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjAsMjEsMjJdLGI9WzIsNF0seT1bMSw1LDEwLDEyLDE0LDE2LDE4LDE5LDIwLDIxLDIyXSxUPVsyMCwyMSwyMl0sXz1bMiw3XSxBPVsxLDEyXSxQPVsxLDEzXSxSPVsxLDE0XSxGPVsxLDE1XSxqPVsxLDE2XSxLPVsxLDE3XSxlZT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZW9sOjQsUElFOjUsZG9jdW1lbnQ6NixzaG93RGF0YTo3LGxpbmU6OCxzdGF0ZW1lbnQ6OSx0eHQ6MTAsdmFsdWU6MTEsdGl0bGU6MTIsdGl0bGVfdmFsdWU6MTMsYWNjX3RpdGxlOjE0LGFjY190aXRsZV92YWx1ZToxNSxhY2NfZGVzY3I6MTYsYWNjX2Rlc2NyX3ZhbHVlOjE3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTgsc2VjdGlvbjoxOSxORVdMSU5FOjIwLCI7IjoyMSxFT0Y6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6IlBJRSIsNzoic2hvd0RhdGEiLDEwOiJ0eHQiLDExOiJ2YWx1ZSIsMTI6InRpdGxlIiwxMzoidGl0bGVfdmFsdWUiLDE0OiJhY2NfdGl0bGUiLDE1OiJhY2NfdGl0bGVfdmFsdWUiLDE2OiJhY2NfZGVzY3IiLDE3OiJhY2NfZGVzY3JfdmFsdWUiLDE4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxOToic2VjdGlvbiIsMjA6Ik5FV0xJTkUiLDIxOiI7IiwyMjoiRU9GIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDNdLFs2LDBdLFs2LDJdLFs4LDJdLFs5LDBdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs0LDFdLFs0LDFdLFs0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGJlLGFlLG5lLHNlLGRlLFgsZ2Upe3ZhciBXPVgubGVuZ3RoLTE7c3dpdGNoKGRlKXtjYXNlIDM6c2Uuc2V0U2hvd0RhdGEoITApO2JyZWFrO2Nhc2UgNjp0aGlzLiQ9WFtXLTFdO2JyZWFrO2Nhc2UgODpzZS5hZGRTZWN0aW9uKFhbVy0xXSxzZS5jbGVhbnVwVmFsdWUoWFtXXSkpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9WFtXXS50cmltKCksc2Uuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9WFtXXS50cmltKCksc2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDExOmNhc2UgMTI6dGhpcy4kPVhbV10udHJpbSgpLHNlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMzpzZS5hZGRTZWN0aW9uKFhbV10uc3Vic3RyKDgpKSx0aGlzLiQ9WFtXXS5zdWJzdHIoOCk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTpzLDIwOnUsMjE6ZCwyMjpwfSx7MTpbM119LHszOjcsNDoyLDU6cywyMDp1LDIxOmQsMjI6cH0saSh2LGIsezY6OCw3OlsxLDldfSksaSh5LFsyLDE0XSksaSh5LFsyLDE1XSksaSh5LFsyLDE2XSksezE6WzIsMV19LGkoVCxfLHs4OjEwLDk6MTEsMTpbMiwyXSwxMDpBLDEyOlAsMTQ6UiwxNjpGLDE4OmosMTk6S30pLGkodixiLHs2OjE4fSksaSh2LFsyLDVdKSx7NDoxOSwyMDp1LDIxOmQsMjI6cH0sezExOlsxLDIwXX0sezEzOlsxLDIxXX0sezE1OlsxLDIyXX0sezE3OlsxLDIzXX0saShULFsyLDEyXSksaShULFsyLDEzXSksaShULF8sezg6MTAsOToxMSwxOlsyLDNdLDEwOkEsMTI6UCwxNDpSLDE2OkYsMTg6aiwxOTpLfSksaSh2LFsyLDZdKSxpKFQsWzIsOF0pLGkoVCxbMiw5XSksaShULFsyLDEwXSksaShULFsyLDExXSldLGRlZmF1bHRBY3Rpb25zOns3OlsyLDFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKGJlLGFlKXtpZihhZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKGJlKTtlbHNle3ZhciBuZT1uZXcgRXJyb3IoYmUpO3Rocm93IG5lLmhhc2g9YWUsbmV9fSxwYXJzZTpmdW5jdGlvbihiZSl7dmFyIGFlPXRoaXMsbmU9WzBdLHNlPVtdLGRlPVtudWxsXSxYPVtdLGdlPXRoaXMudGFibGUsVz0iIix4ZT0wLFU9MCxGZT0yLFBlPTEsamU9WC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxJZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFNlPXt5eTp7fX07Zm9yKHZhciBDZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LENlKSYmKFNlLnl5W0NlXT10aGlzLnl5W0NlXSk7SWUuc2V0SW5wdXQoYmUsU2UueXkpLFNlLnl5LmxleGVyPUllLFNlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBJZS55eWxsb2M+InUiJiYoSWUueXlsbG9jPXt9KTt2YXIga2U9SWUueXlsbG9jO1gucHVzaChrZSk7dmFyIEtlPUllLm9wdGlvbnMmJkllLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBTZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1TZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBGdCgpe3ZhciBrdDtyZXR1cm4ga3Q9c2UucG9wKCl8fEllLmxleCgpfHxQZSx0eXBlb2Yga3QhPSJudW1iZXIiJiYoa3QgaW5zdGFuY2VvZiBBcnJheSYmKHNlPWt0LGt0PXNlLnBvcCgpKSxrdD1hZS5zeW1ib2xzX1trdF18fGt0KSxrdH1mb3IodmFyIE5lLGduLF90LEV0LEd0PXt9LGxuLHh0LFB0LFFlOzspe2lmKGduPW5lW25lLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2duXT9fdD10aGlzLmRlZmF1bHRBY3Rpb25zW2duXTooKE5lPT09bnVsbHx8dHlwZW9mIE5lPiJ1IikmJihOZT1GdCgpKSxfdD1nZVtnbl0mJmdlW2duXVtOZV0pLHR5cGVvZiBfdD4idSJ8fCFfdC5sZW5ndGh8fCFfdFswXSl7dmFyIER0PSIiO1FlPVtdO2ZvcihsbiBpbiBnZVtnbl0pdGhpcy50ZXJtaW5hbHNfW2xuXSYmbG4+RmUmJlFlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tsbl0rIiciKTtJZS5zaG93UG9zaXRpb24/RHQ9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoeGUrMSkrYDoKYCtJZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1FlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bTmVdfHxOZSkrIiciOkR0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHhlKzEpKyI6IFVuZXhwZWN0ZWQgIisoTmU9PVBlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW05lXXx8TmUpKyInIiksdGhpcy5wYXJzZUVycm9yKER0LHt0ZXh0OkllLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tOZV18fE5lLGxpbmU6SWUueXlsaW5lbm8sbG9jOmtlLGV4cGVjdGVkOlFlfSl9aWYoX3RbMF1pbnN0YW5jZW9mIEFycmF5JiZfdC5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2duKyIsIHRva2VuOiAiK05lKTtzd2l0Y2goX3RbMF0pe2Nhc2UgMTpuZS5wdXNoKE5lKSxkZS5wdXNoKEllLnl5dGV4dCksWC5wdXNoKEllLnl5bGxvYyksbmUucHVzaChfdFsxXSksTmU9bnVsbCxVPUllLnl5bGVuZyxXPUllLnl5dGV4dCx4ZT1JZS55eWxpbmVubyxrZT1JZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKHh0PXRoaXMucHJvZHVjdGlvbnNfW190WzFdXVsxXSxHdC4kPWRlW2RlLmxlbmd0aC14dF0sR3QuXyQ9e2ZpcnN0X2xpbmU6WFtYLmxlbmd0aC0oeHR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpYW1gubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46WFtYLmxlbmd0aC0oeHR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46WFtYLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sS2UmJihHdC5fJC5yYW5nZT1bWFtYLmxlbmd0aC0oeHR8fDEpXS5yYW5nZVswXSxYW1gubGVuZ3RoLTFdLnJhbmdlWzFdXSksRXQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KEd0LFtXLFUseGUsU2UueXksX3RbMV0sZGUsWF0uY29uY2F0KGplKSksdHlwZW9mIEV0PCJ1IilyZXR1cm4gRXQ7eHQmJihuZT1uZS5zbGljZSgwLC0xKnh0KjIpLGRlPWRlLnNsaWNlKDAsLTEqeHQpLFg9WC5zbGljZSgwLC0xKnh0KSksbmUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tfdFsxXV1bMF0pLGRlLnB1c2goR3QuJCksWC5wdXNoKEd0Ll8kKSxQdD1nZVtuZVtuZS5sZW5ndGgtMl1dW25lW25lLmxlbmd0aC0xXV0sbmUucHVzaChQdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGllPWZ1bmN0aW9uKCl7dmFyIHBlPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKGFlLG5lKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGFlLG5lKTtlbHNlIHRocm93IG5ldyBFcnJvcihhZSl9LHNldElucHV0OmZ1bmN0aW9uKGJlLGFlKXtyZXR1cm4gdGhpcy55eT1hZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9YmUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1iZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9YmUsdGhpcy5tYXRjaGVkKz1iZTt2YXIgYWU9YmUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBhZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksYmV9LHVucHV0OmZ1bmN0aW9uKGJlKXt2YXIgYWU9YmUubGVuZ3RoLG5lPWJlLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9YmUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWFlKSx0aGlzLm9mZnNldC09YWU7dmFyIHNlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG5lLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bmUubGVuZ3RoLTEpO3ZhciBkZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bmU/KG5lLmxlbmd0aD09PXNlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrc2Vbc2UubGVuZ3RoLW5lLmxlbmd0aF0ubGVuZ3RoLW5lWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tYWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bZGVbMF0sZGVbMF0rdGhpcy55eWxlbmctYWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihiZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGJlKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBiZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGJlLmxlbmd0aD4yMD8iLi4uIjoiIikrYmUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5tYXRjaDtyZXR1cm4gYmUubGVuZ3RoPDIwJiYoYmUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWJlLmxlbmd0aCkpLChiZS5zdWJzdHIoMCwyMCkrKGJlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5wYXN0SW5wdXQoKSxhZT1uZXcgQXJyYXkoYmUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gYmUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2FlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihiZSxhZSl7dmFyIG5lLHNlLGRlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihkZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihkZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxzZT1iZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksc2UmJih0aGlzLnl5bGluZW5vKz1zZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpzZT9zZVtzZS5sZW5ndGgtMV0ubGVuZ3RoLXNlW3NlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2JlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWJlWzBdLHRoaXMubWF0Y2grPWJlWzBdLHRoaXMubWF0Y2hlcz1iZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShiZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9YmVbMF0sbmU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsYWUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbmUpcmV0dXJuIG5lO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBYIGluIGRlKXRoaXNbWF09ZGVbWF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgYmUsYWUsbmUsc2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgZGU9dGhpcy5fY3VycmVudFJ1bGVzKCksWD0wO1g8ZGUubGVuZ3RoO1grKylpZihuZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2RlW1hdXSksbmUmJighYWV8fG5lWzBdLmxlbmd0aD5hZVswXS5sZW5ndGgpKXtpZihhZT1uZSxzZT1YLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKGJlPXRoaXMudGVzdF9tYXRjaChuZSxkZVtYXSksYmUhPT0hMSlyZXR1cm4gYmU7aWYodGhpcy5fYmFja3RyYWNrKXthZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBhZT8oYmU9dGhpcy50ZXN0X21hdGNoKGFlLGRlW3NlXSksYmUhPT0hMT9iZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIGFlPXRoaXMubmV4dCgpO3JldHVybiBhZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oYWUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChhZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGFlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIGFlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oYWUpe3JldHVybiBhZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKGFlfHwwKSxhZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW2FlXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihhZSl7dGhpcy5iZWdpbihhZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oYWUsbmUsc2UsZGUpe3N3aXRjaChzZSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDIwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiB0aGlzLmJlZ2luKCJ0aXRsZSIpLDEyO2Nhc2UgNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJ0aXRsZV92YWx1ZSI7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxNDtjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE2O2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMTU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuInR4dCI7Y2FzZSAxNzpyZXR1cm4gNTtjYXNlIDE4OnJldHVybiA3O2Nhc2UgMTk6cmV0dXJuInZhbHVlIjtjYXNlIDIwOnJldHVybiAyMn19LHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/Oltcc10rKS9pLC9eKD86dGl0bGVcYikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpwaWVcYikvaSwvXig/OnNob3dEYXRhXGIpL2ksL14oPzo6W1xzXSpbXGRdKyg/OlwuW1xkXSspPykvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxMF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LHRpdGxlOntydWxlczpbNl0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxNSwxNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNyw5LDExLDE0LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHBlfSgpO2VlLmxleGVyPWllO2Z1bmN0aW9uIG9lKCl7dGhpcy55eT17fX1yZXR1cm4gb2UucHJvdG90eXBlPWVlLGVlLlBhcnNlcj1vZSxuZXcgb2V9KCk7bHZlLnBhcnNlcj1sdmU7Y29uc3Qgdm5uPWx2ZSxoR2U9c2gucGllLGZKPXtzZWN0aW9uczp7fSxzaG93RGF0YTohMSxjb25maWc6aEdlfTtsZXQgZEo9Zkouc2VjdGlvbnMsaHZlPWZKLnNob3dEYXRhO2NvbnN0IHdubj1zdHJ1Y3R1cmVkQ2xvbmUoaEdlKSx5bm49e2dldENvbmZpZzooKT0+c3RydWN0dXJlZENsb25lKHdubiksY2xlYXI6KCk9PntkSj1zdHJ1Y3R1cmVkQ2xvbmUoZkouc2VjdGlvbnMpLGh2ZT1mSi5zaG93RGF0YSxQZygpfSxzZXREaWFncmFtVGl0bGU6Y20sZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLGFkZFNlY3Rpb246KGkscyk9PntpPVlmKGkscXQoKSksZEpbaV09PT12b2lkIDAmJihkSltpXT1zLFhlLmRlYnVnKGBhZGRlZCBuZXcgc2VjdGlvbjogJHtpfSwgd2l0aCB2YWx1ZTogJHtzfWApKX0sZ2V0U2VjdGlvbnM6KCk9PmRKLGNsZWFudXBWYWx1ZTppPT4oaS5zdWJzdHJpbmcoMCwxKT09PSI6IiYmKGk9aS5zdWJzdHJpbmcoMSkudHJpbSgpKSxOdW1iZXIoaS50cmltKCkpKSxzZXRTaG93RGF0YTppPT57aHZlPWl9LGdldFNob3dEYXRhOigpPT5odmV9LHhubj1pPT5gCiAgLnBpZUNpcmNsZXsKICAgIHN0cm9rZTogJHtpLnBpZVN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aCA6ICR7aS5waWVTdHJva2VXaWR0aH07CiAgICBvcGFjaXR5IDogJHtpLnBpZU9wYWNpdHl9OwogIH0KICAucGllT3V0ZXJDaXJjbGV7CiAgICBzdHJva2U6ICR7aS5waWVPdXRlclN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHtpLnBpZU91dGVyU3Ryb2tlV2lkdGh9OwogICAgZmlsbDogbm9uZTsKICB9CiAgLnBpZVRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAke2kucGllVGl0bGVUZXh0U2l6ZX07CiAgICBmaWxsOiAke2kucGllVGl0bGVUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICB9CiAgLnNsaWNlIHsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmaWxsOiAke2kucGllU2VjdGlvblRleHRDb2xvcn07CiAgICBmb250LXNpemU6JHtpLnBpZVNlY3Rpb25UZXh0U2l6ZX07CiAgICAvLyBmaWxsOiB3aGl0ZTsKICB9CiAgLmxlZ2VuZCB0ZXh0IHsKICAgIGZpbGw6ICR7aS5waWVMZWdlbmRUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtpLnBpZUxlZ2VuZFRleHRTaXplfTsKICB9CmAsa25uPWk9Pntjb25zdCBzPU9iamVjdC5lbnRyaWVzKGkpLm1hcChkPT4oe2xhYmVsOmRbMF0sdmFsdWU6ZFsxXX0pKS5zb3J0KChkLHApPT5wLnZhbHVlLWQudmFsdWUpO3JldHVybiBTTnQoKS52YWx1ZShkPT5kLnZhbHVlKShzKX0sRW5uPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6dm5uLGRiOnlubixyZW5kZXJlcjp7ZHJhdzooaSxzLHUsZCk9PntYZS5kZWJ1ZyhgcmVuZGVyaW5nIHBpZSBjaGFydApgK2kpO2NvbnN0IHA9ZC5kYix2PXF0KCksYj1KRihwLmdldENvbmZpZygpLHYucGllKSx5PTQwLFQ9MTgsXz00LEE9NDUwLFA9QSxSPXJSKHMpLEY9Ui5hcHBlbmQoImciKSxqPXAuZ2V0U2VjdGlvbnMoKTtGLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1AvMisiLCIrQS8yKyIpIik7Y29uc3R7dGhlbWVWYXJpYWJsZXM6S309djtsZXRbZWVdPU5DKEsucGllT3V0ZXJTdHJva2VXaWR0aCk7ZWU/PyhlZT0yKTtjb25zdCBpZT1iLnRleHRQb3NpdGlvbixvZT1NYXRoLm1pbihQLEEpLzIteSxwZT1sRCgpLmlubmVyUmFkaXVzKDApLm91dGVyUmFkaXVzKG9lKSxiZT1sRCgpLmlubmVyUmFkaXVzKG9lKmllKS5vdXRlclJhZGl1cyhvZSppZSk7Ri5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCkuYXR0cigiciIsb2UrZWUvMikuYXR0cigiY2xhc3MiLCJwaWVPdXRlckNpcmNsZSIpO2NvbnN0IGFlPWtubihqKSxuZT1bSy5waWUxLEsucGllMixLLnBpZTMsSy5waWU0LEsucGllNSxLLnBpZTYsSy5waWU3LEsucGllOCxLLnBpZTksSy5waWUxMCxLLnBpZTExLEsucGllMTJdLHNlPV9GKG5lKTtGLnNlbGVjdEFsbCgibXlTbGljZXMiKS5kYXRhKGFlKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHBlKS5hdHRyKCJmaWxsIix4ZT0+c2UoeGUuZGF0YS5sYWJlbCkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIik7bGV0IGRlPTA7T2JqZWN0LmtleXMoaikuZm9yRWFjaCh4ZT0+e2RlKz1qW3hlXX0pLEYuc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEoYWUpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikudGV4dCh4ZT0+KHhlLmRhdGEudmFsdWUvZGUqMTAwKS50b0ZpeGVkKDApKyIlIikuYXR0cigidHJhbnNmb3JtIix4ZT0+InRyYW5zbGF0ZSgiK2JlLmNlbnRyb2lkKHhlKSsiKSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2xpY2UiKSxGLmFwcGVuZCgidGV4dCIpLnRleHQocC5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsMCkuYXR0cigieSIsLShBLTUwKS8yKS5hdHRyKCJjbGFzcyIsInBpZVRpdGxlVGV4dCIpO2NvbnN0IFg9Ri5zZWxlY3RBbGwoIi5sZWdlbmQiKS5kYXRhKHNlLmRvbWFpbigpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kIikuYXR0cigidHJhbnNmb3JtIiwoeGUsVSk9Pntjb25zdCBGZT1UK18sUGU9RmUqc2UuZG9tYWluKCkubGVuZ3RoLzIsamU9MTIqVCxJZT1VKkZlLVBlO3JldHVybiJ0cmFuc2xhdGUoIitqZSsiLCIrSWUrIikifSk7WC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIsVCkuYXR0cigiaGVpZ2h0IixUKS5zdHlsZSgiZmlsbCIsc2UpLnN0eWxlKCJzdHJva2UiLHNlKSxYLmRhdGEoYWUpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLFQrXykuYXR0cigieSIsVC1fKS50ZXh0KHhlPT57Y29uc3R7bGFiZWw6VSx2YWx1ZTpGZX09eGUuZGF0YTtyZXR1cm4gcC5nZXRTaG93RGF0YSgpP2Ake1V9IFske0ZlfV1gOlV9KTtjb25zdCBnZT1NYXRoLm1heCguLi5YLnNlbGVjdEFsbCgidGV4dCIpLm5vZGVzKCkubWFwKHhlPT4oeGU9PW51bGw/dm9pZCAwOnhlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKT8/MCkpLFc9UCt5K1QrXytnZTtSLmF0dHIoInZpZXdCb3giLGAwIDAgJHtXfSAke0F9YCksTmcoUixBLFcsYi51c2VNYXhXaWR0aCl9fSxzdHlsZXM6eG5ufX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgZnZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oX3QsRXQsR3QsbG4pe2ZvcihHdD1HdHx8e30sbG49X3QubGVuZ3RoO2xuLS07R3RbX3RbbG5dXT1FdCk7cmV0dXJuIEd0fSxzPVsxLDNdLHU9WzEsNF0sZD1bMSw1XSxwPVsxLDZdLHY9WzEsN10sYj1bMSw1LDEzLDE1LDE3LDE5LDIwLDI1LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM3LDM4LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwXSx5PVsxLDUsNiwxMywxNSwxNywxOSwyMCwyNSwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNywzOCw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0sVD1bMzIsMzMsMzRdLF89WzIsN10sQT1bMSwxM10sUD1bMSwxN10sUj1bMSwxOF0sRj1bMSwxOV0saj1bMSwyMF0sSz1bMSwyMV0sZWU9WzEsMjJdLGllPVsxLDIzXSxvZT1bMSwyNF0scGU9WzEsMjVdLGJlPVsxLDI2XSxhZT1bMSwyN10sbmU9WzEsMzBdLHNlPVsxLDMxXSxkZT1bMSwzMl0sWD1bMSwzM10sZ2U9WzEsMzRdLFc9WzEsMzVdLHhlPVsxLDM2XSxVPVsxLDM3XSxGZT1bMSwzOF0sUGU9WzEsMzldLGplPVsxLDQwXSxJZT1bMSw0MV0sU2U9WzEsNDJdLENlPVsxLDU3XSxrZT1bMSw1OF0sS2U9WzUsMjIsMjYsMzIsMzMsMzQsNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTFdLEZ0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxTUEFDRTo1LFFVQURSQU5UOjYsZG9jdW1lbnQ6NyxsaW5lOjgsc3RhdGVtZW50OjksYXhpc0RldGFpbHM6MTAscXVhZHJhbnREZXRhaWxzOjExLHBvaW50czoxMix0aXRsZToxMyx0aXRsZV92YWx1ZToxNCxhY2NfdGl0bGU6MTUsYWNjX3RpdGxlX3ZhbHVlOjE2LGFjY19kZXNjcjoxNyxhY2NfZGVzY3JfdmFsdWU6MTgsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxOSxzZWN0aW9uOjIwLHRleHQ6MjEscG9pbnRfc3RhcnQ6MjIscG9pbnRfeDoyMyxwb2ludF95OjI0LCJYLUFYSVMiOjI1LCJBWElTLVRFWFQtREVMSU1JVEVSIjoyNiwiWS1BWElTIjoyNyxRVUFEUkFOVF8xOjI4LFFVQURSQU5UXzI6MjksUVVBRFJBTlRfMzozMCxRVUFEUkFOVF80OjMxLE5FV0xJTkU6MzIsU0VNSTozMyxFT0Y6MzQsYWxwaGFOdW1Ub2tlbjozNSx0ZXh0Tm9UYWdzVG9rZW46MzYsU1RSOjM3LE1EX1NUUjozOCxhbHBoYU51bTozOSxQVU5DVFVBVElPTjo0MCxBTVA6NDEsTlVNOjQyLEFMUEhBOjQzLENPTU1BOjQ0LFBMVVM6NDUsRVFVQUxTOjQ2LE1VTFQ6NDcsRE9UOjQ4LEJSS1Q6NDksVU5ERVJTQ09SRTo1MCxNSU5VUzo1MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiU1BBQ0UiLDY6IlFVQURSQU5UIiwxMzoidGl0bGUiLDE0OiJ0aXRsZV92YWx1ZSIsMTU6ImFjY190aXRsZSIsMTY6ImFjY190aXRsZV92YWx1ZSIsMTc6ImFjY19kZXNjciIsMTg6ImFjY19kZXNjcl92YWx1ZSIsMTk6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDIwOiJzZWN0aW9uIiwyMjoicG9pbnRfc3RhcnQiLDIzOiJwb2ludF94IiwyNDoicG9pbnRfeSIsMjU6IlgtQVhJUyIsMjY6IkFYSVMtVEVYVC1ERUxJTUlURVIiLDI3OiJZLUFYSVMiLDI4OiJRVUFEUkFOVF8xIiwyOToiUVVBRFJBTlRfMiIsMzA6IlFVQURSQU5UXzMiLDMxOiJRVUFEUkFOVF80IiwzMjoiTkVXTElORSIsMzM6IlNFTUkiLDM0OiJFT0YiLDM3OiJTVFIiLDM4OiJNRF9TVFIiLDQwOiJQVU5DVFVBVElPTiIsNDE6IkFNUCIsNDI6Ik5VTSIsNDM6IkFMUEhBIiw0NDoiQ09NTUEiLDQ1OiJQTFVTIiw0NjoiRVFVQUxTIiw0NzoiTVVMVCIsNDg6IkRPVCIsNDk6IkJSS1QiLDUwOiJVTkRFUlNDT1JFIiw1MToiTUlOVVMifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzcsMF0sWzcsMl0sWzgsMl0sWzksMF0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzEyLDRdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMSwyXSxbMTEsMl0sWzExLDJdLFsxMSwyXSxbNCwxXSxbNCwxXSxbNCwxXSxbMjEsMV0sWzIxLDJdLFsyMSwxXSxbMjEsMV0sWzM5LDFdLFszOSwyXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNiwxXSxbMzYsMV0sWzM2LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEV0LEd0LGxuLHh0LFB0LFFlLER0KXt2YXIga3Q9UWUubGVuZ3RoLTE7c3dpdGNoKFB0KXtjYXNlIDEyOnRoaXMuJD1RZVtrdF0udHJpbSgpLHh0LnNldERpYWdyYW1UaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTM6dGhpcy4kPVFlW2t0XS50cmltKCkseHQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE0OmNhc2UgMTU6dGhpcy4kPVFlW2t0XS50cmltKCkseHQuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE2Onh0LmFkZFNlY3Rpb24oUWVba3RdLnN1YnN0cig4KSksdGhpcy4kPVFlW2t0XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxNzp4dC5hZGRQb2ludChRZVtrdC0zXSxRZVtrdC0xXSxRZVtrdF0pO2JyZWFrO2Nhc2UgMTg6eHQuc2V0WEF4aXNMZWZ0VGV4dChRZVtrdC0yXSkseHQuc2V0WEF4aXNSaWdodFRleHQoUWVba3RdKTticmVhaztjYXNlIDE5OlFlW2t0LTFdLnRleHQrPSIg4p+2ICIseHQuc2V0WEF4aXNMZWZ0VGV4dChRZVtrdC0xXSk7YnJlYWs7Y2FzZSAyMDp4dC5zZXRYQXhpc0xlZnRUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyMTp4dC5zZXRZQXhpc0JvdHRvbVRleHQoUWVba3QtMl0pLHh0LnNldFlBeGlzVG9wVGV4dChRZVtrdF0pO2JyZWFrO2Nhc2UgMjI6UWVba3QtMV0udGV4dCs9IiDin7YgIix4dC5zZXRZQXhpc0JvdHRvbVRleHQoUWVba3QtMV0pO2JyZWFrO2Nhc2UgMjM6eHQuc2V0WUF4aXNCb3R0b21UZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyNDp4dC5zZXRRdWFkcmFudDFUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyNTp4dC5zZXRRdWFkcmFudDJUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyNjp4dC5zZXRRdWFkcmFudDNUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyNzp4dC5zZXRRdWFkcmFudDRUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9e3RleHQ6UWVba3RdLHR5cGU6InRleHQifTticmVhaztjYXNlIDMyOnRoaXMuJD17dGV4dDpRZVtrdC0xXS50ZXh0KyIiK1FlW2t0XSx0eXBlOlFlW2t0LTFdLnR5cGV9O2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXt0ZXh0OlFlW2t0XSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9e3RleHQ6UWVba3RdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9UWVba3RdO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPVFlW2t0LTFdKyIiK1FlW2t0XTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OnMsNjp1LDMyOmQsMzM6cCwzNDp2fSx7MTpbM119LHszOjgsNDoyLDU6cyw2OnUsMzI6ZCwzMzpwLDM0OnZ9LHszOjksNDoyLDU6cyw2OnUsMzI6ZCwzMzpwLDM0OnZ9LGkoYixbMiw0XSx7NzoxMH0pLGkoeSxbMiwyOF0pLGkoeSxbMiwyOV0pLGkoeSxbMiwzMF0pLHsxOlsyLDFdfSx7MTpbMiwyXX0saShULF8sezg6MTEsOToxMiwxMDoxNCwxMToxNSwxMjoxNiwyMToyOCwzNToyOSwxOlsyLDNdLDU6QSwxMzpQLDE1OlIsMTc6RiwxOTpqLDIwOkssMjU6ZWUsMjc6aWUsMjg6b2UsMjk6cGUsMzA6YmUsMzE6YWUsMzc6bmUsMzg6c2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2V9KSxpKGIsWzIsNV0pLHs0OjQzLDMyOmQsMzM6cCwzNDp2fSxpKFQsXyx7MTA6MTQsMTE6MTUsMTI6MTYsMjE6MjgsMzU6MjksOTo0NCw1OkEsMTM6UCwxNTpSLDE3OkYsMTk6aiwyMDpLLDI1OmVlLDI3OmllLDI4Om9lLDI5OnBlLDMwOmJlLDMxOmFlLDM3Om5lLDM4OnNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlfSksaShULFsyLDldKSxpKFQsWzIsMTBdKSxpKFQsWzIsMTFdKSx7MTQ6WzEsNDVdfSx7MTY6WzEsNDZdfSx7MTg6WzEsNDddfSxpKFQsWzIsMTVdKSxpKFQsWzIsMTZdKSx7MjE6NDgsMzU6MjksMzc6bmUsMzg6c2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2V9LHsyMTo0OSwzNToyOSwzNzpuZSwzODpzZSw0MDpkZSw0MTpYLDQyOmdlLDQzOlcsNDQ6eGUsNDU6VSw0NjpGZSw0NzpQZSw0ODpqZSw0OTpJZSw1MDpTZX0sezIxOjUwLDM1OjI5LDM3Om5lLDM4OnNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlfSx7MjE6NTEsMzU6MjksMzc6bmUsMzg6c2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2V9LHsyMTo1MiwzNToyOSwzNzpuZSwzODpzZSw0MDpkZSw0MTpYLDQyOmdlLDQzOlcsNDQ6eGUsNDU6VSw0NjpGZSw0NzpQZSw0ODpqZSw0OTpJZSw1MDpTZX0sezIxOjUzLDM1OjI5LDM3Om5lLDM4OnNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlfSx7NTpDZSwyMjpbMSw1NF0sMzU6NTYsMzY6NTUsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2UsNTE6a2V9LGkoS2UsWzIsMzFdKSxpKEtlLFsyLDMzXSksaShLZSxbMiwzNF0pLGkoS2UsWzIsMzddKSxpKEtlLFsyLDM4XSksaShLZSxbMiwzOV0pLGkoS2UsWzIsNDBdKSxpKEtlLFsyLDQxXSksaShLZSxbMiw0Ml0pLGkoS2UsWzIsNDNdKSxpKEtlLFsyLDQ0XSksaShLZSxbMiw0NV0pLGkoS2UsWzIsNDZdKSxpKEtlLFsyLDQ3XSksaShiLFsyLDZdKSxpKFQsWzIsOF0pLGkoVCxbMiwxMl0pLGkoVCxbMiwxM10pLGkoVCxbMiwxNF0pLGkoVCxbMiwyMF0sezM2OjU1LDM1OjU2LDU6Q2UsMjY6WzEsNTldLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlLDUxOmtlfSksaShULFsyLDIzXSx7MzY6NTUsMzU6NTYsNTpDZSwyNjpbMSw2MF0sNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2UsNTE6a2V9KSxpKFQsWzIsMjRdLHszNjo1NSwzNTo1Niw1OkNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlLDUxOmtlfSksaShULFsyLDI1XSx7MzY6NTUsMzU6NTYsNTpDZSw0MDpkZSw0MTpYLDQyOmdlLDQzOlcsNDQ6eGUsNDU6VSw0NjpGZSw0NzpQZSw0ODpqZSw0OTpJZSw1MDpTZSw1MTprZX0pLGkoVCxbMiwyNl0sezM2OjU1LDM1OjU2LDU6Q2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2UsNTE6a2V9KSxpKFQsWzIsMjddLHszNjo1NSwzNTo1Niw1OkNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlLDUxOmtlfSksezIzOlsxLDYxXX0saShLZSxbMiwzMl0pLGkoS2UsWzIsNDhdKSxpKEtlLFsyLDQ5XSksaShLZSxbMiw1MF0pLGkoVCxbMiwxOV0sezM1OjI5LDIxOjYyLDM3Om5lLDM4OnNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlfSksaShULFsyLDIyXSx7MzU6MjksMjE6NjMsMzc6bmUsMzg6c2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2V9KSx7MjQ6WzEsNjRdfSxpKFQsWzIsMThdLHszNjo1NSwzNTo1Niw1OkNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlLDUxOmtlfSksaShULFsyLDIxXSx7MzY6NTUsMzU6NTYsNTpDZSw0MDpkZSw0MTpYLDQyOmdlLDQzOlcsNDQ6eGUsNDU6VSw0NjpGZSw0NzpQZSw0ODpqZSw0OTpJZSw1MDpTZSw1MTprZX0pLGkoVCxbMiwxN10pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwxXSw5OlsyLDJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKEV0LEd0KXtpZihHdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEV0KTtlbHNle3ZhciBsbj1uZXcgRXJyb3IoRXQpO3Rocm93IGxuLmhhc2g9R3QsbG59fSxwYXJzZTpmdW5jdGlvbihFdCl7dmFyIEd0PXRoaXMsbG49WzBdLHh0PVtdLFB0PVtudWxsXSxRZT1bXSxEdD10aGlzLnRhYmxlLGt0PSIiLE9uPTAsaHQ9MCx6cj0yLHl0PTEsamk9UWUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkseGk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxNYT17eXk6e319O2Zvcih2YXIgenMgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx6cykmJihNYS55eVt6c109dGhpcy55eVt6c10pO3hpLnNldElucHV0KEV0LE1hLnl5KSxNYS55eS5sZXhlcj14aSxNYS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgeGkueXlsbG9jPiJ1IiYmKHhpLnl5bGxvYz17fSk7dmFyIGFvPXhpLnl5bGxvYztRZS5wdXNoKGFvKTt2YXIgVHI9eGkub3B0aW9ucyYmeGkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIE1hLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPU1hLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEZuKCl7dmFyIFBhO3JldHVybiBQYT14dC5wb3AoKXx8eGkubGV4KCl8fHl0LHR5cGVvZiBQYSE9Im51bWJlciImJihQYSBpbnN0YW5jZW9mIEFycmF5JiYoeHQ9UGEsUGE9eHQucG9wKCkpLFBhPUd0LnN5bWJvbHNfW1BhXXx8UGEpLFBhfWZvcih2YXIgcW4sVW4sQXQsd3Qsb249e30sZm4sQW4sb28sam87Oyl7aWYoVW49bG5bbG4ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbVW5dP0F0PXRoaXMuZGVmYXVsdEFjdGlvbnNbVW5dOigocW49PT1udWxsfHx0eXBlb2YgcW4+InUiKSYmKHFuPUZuKCkpLEF0PUR0W1VuXSYmRHRbVW5dW3FuXSksdHlwZW9mIEF0PiJ1Inx8IUF0Lmxlbmd0aHx8IUF0WzBdKXt2YXIgJG89IiI7am89W107Zm9yKGZuIGluIER0W1VuXSl0aGlzLnRlcm1pbmFsc19bZm5dJiZmbj56ciYmam8ucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2ZuXSsiJyIpO3hpLnNob3dQb3NpdGlvbj8kbz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhPbisxKStgOgpgK3hpLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGAram8uam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1txbl18fHFuKSsiJyI6JG89IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoT24rMSkrIjogVW5leHBlY3RlZCAiKyhxbj09eXQ/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bcW5dfHxxbikrIiciKSx0aGlzLnBhcnNlRXJyb3IoJG8se3RleHQ6eGkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3FuXXx8cW4sbGluZTp4aS55eWxpbmVubyxsb2M6YW8sZXhwZWN0ZWQ6am99KX1pZihBdFswXWluc3RhbmNlb2YgQXJyYXkmJkF0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrVW4rIiwgdG9rZW46ICIrcW4pO3N3aXRjaChBdFswXSl7Y2FzZSAxOmxuLnB1c2gocW4pLFB0LnB1c2goeGkueXl0ZXh0KSxRZS5wdXNoKHhpLnl5bGxvYyksbG4ucHVzaChBdFsxXSkscW49bnVsbCxodD14aS55eWxlbmcsa3Q9eGkueXl0ZXh0LE9uPXhpLnl5bGluZW5vLGFvPXhpLnl5bGxvYzticmVhaztjYXNlIDI6aWYoQW49dGhpcy5wcm9kdWN0aW9uc19bQXRbMV1dWzFdLG9uLiQ9UHRbUHQubGVuZ3RoLUFuXSxvbi5fJD17Zmlyc3RfbGluZTpRZVtRZS5sZW5ndGgtKEFufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6UWVbUWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46UWVbUWUubGVuZ3RoLShBbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpRZVtRZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFRyJiYob24uXyQucmFuZ2U9W1FlW1FlLmxlbmd0aC0oQW58fDEpXS5yYW5nZVswXSxRZVtRZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx3dD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkob24sW2t0LGh0LE9uLE1hLnl5LEF0WzFdLFB0LFFlXS5jb25jYXQoamkpKSx0eXBlb2Ygd3Q8InUiKXJldHVybiB3dDtBbiYmKGxuPWxuLnNsaWNlKDAsLTEqQW4qMiksUHQ9UHQuc2xpY2UoMCwtMSpBbiksUWU9UWUuc2xpY2UoMCwtMSpBbikpLGxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQXRbMV1dWzBdKSxQdC5wdXNoKG9uLiQpLFFlLnB1c2gob24uXyQpLG9vPUR0W2xuW2xuLmxlbmd0aC0yXV1bbG5bbG4ubGVuZ3RoLTFdXSxsbi5wdXNoKG9vKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTmU9ZnVuY3Rpb24oKXt2YXIgX3Q9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oR3QsbG4pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoR3QsbG4pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEd0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oRXQsR3Qpe3JldHVybiB0aGlzLnl5PUd0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1FdCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRXQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUV0LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1FdCx0aGlzLm1hdGNoZWQrPUV0O3ZhciBHdD1FdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEd0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxFdH0sdW5wdXQ6ZnVuY3Rpb24oRXQpe3ZhciBHdD1FdC5sZW5ndGgsbG49RXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1FdCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtR3QpLHRoaXMub2Zmc2V0LT1HdDt2YXIgeHQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1sbi5sZW5ndGgtMSk7dmFyIFB0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpsbj8obG4ubGVuZ3RoPT09eHQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt4dFt4dC5sZW5ndGgtbG4ubGVuZ3RoXS5sZW5ndGgtbG5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1HdH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtQdFswXSxQdFswXSt0aGlzLnl5bGVuZy1HdF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKEV0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoRXQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIEV0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oRXQubGVuZ3RoPjIwPyIuLi4iOiIiKStFdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBFdD10aGlzLm1hdGNoO3JldHVybiBFdC5sZW5ndGg8MjAmJihFdCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtRXQubGVuZ3RoKSksKEV0LnN1YnN0cigwLDIwKSsoRXQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBFdD10aGlzLnBhc3RJbnB1dCgpLEd0PW5ldyBBcnJheShFdC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBFdCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArR3QrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKEV0LEd0KXt2YXIgbG4seHQsUHQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKFB0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFB0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHh0PUV0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx4dCYmKHRoaXMueXlsaW5lbm8rPXh0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnh0P3h0W3h0Lmxlbmd0aC0xXS5sZW5ndGgteHRbeHQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rRXRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9RXRbMF0sdGhpcy5tYXRjaCs9RXRbMF0sdGhpcy5tYXRjaGVzPUV0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEV0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1FdFswXSxsbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxHdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxsbilyZXR1cm4gbG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFFlIGluIFB0KXRoaXNbUWVdPVB0W1FlXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBFdCxHdCxsbix4dDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBQdD10aGlzLl9jdXJyZW50UnVsZXMoKSxRZT0wO1FlPFB0Lmxlbmd0aDtRZSsrKWlmKGxuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbUHRbUWVdXSksbG4mJighR3R8fGxuWzBdLmxlbmd0aD5HdFswXS5sZW5ndGgpKXtpZihHdD1sbix4dD1RZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihFdD10aGlzLnRlc3RfbWF0Y2gobG4sUHRbUWVdKSxFdCE9PSExKXJldHVybiBFdDtpZih0aGlzLl9iYWNrdHJhY2spe0d0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEd0PyhFdD10aGlzLnRlc3RfbWF0Y2goR3QsUHRbeHRdKSxFdCE9PSExP0V0OiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgR3Q9dGhpcy5uZXh0KCk7cmV0dXJuIEd0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihHdCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEd0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgR3Q9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gR3Q+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihHdCl7cmV0dXJuIEd0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoR3R8fDApLEd0Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbR3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEd0KXt0aGlzLmJlZ2luKEd0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihHdCxsbix4dCxQdCl7c3dpdGNoKHh0KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMzI7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMztjYXNlIDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTU7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiAyNTtjYXNlIDE0OnJldHVybiAyNztjYXNlIDE1OnJldHVybiAyNjtjYXNlIDE2OnJldHVybiAyODtjYXNlIDE3OnJldHVybiAyOTtjYXNlIDE4OnJldHVybiAzMDtjYXNlIDE5OnJldHVybiAzMTtjYXNlIDIwOnRoaXMuYmVnaW4oIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIk1EX1NUUiI7Y2FzZSAyMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnJldHVybiJTVFIiO2Nhc2UgMjY6cmV0dXJuIHRoaXMuYmVnaW4oInBvaW50X3N0YXJ0IiksMjI7Y2FzZSAyNzpyZXR1cm4gdGhpcy5iZWdpbigicG9pbnRfeCIpLDIzO2Nhc2UgMjg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInBvaW50X3kiKTticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjQ7Y2FzZSAzMTpyZXR1cm4gNjtjYXNlIDMyOnJldHVybiA0MztjYXNlIDMzOnJldHVybiJDT0xPTiI7Y2FzZSAzNDpyZXR1cm4gNDU7Y2FzZSAzNTpyZXR1cm4gNDQ7Y2FzZSAzNjpyZXR1cm4gNDY7Y2FzZSAzNzpyZXR1cm4gNDY7Y2FzZSAzODpyZXR1cm4gNDc7Y2FzZSAzOTpyZXR1cm4gNDk7Y2FzZSA0MDpyZXR1cm4gNTA7Y2FzZSA0MTpyZXR1cm4gNDg7Y2FzZSA0MjpyZXR1cm4gNDE7Y2FzZSA0MzpyZXR1cm4gNTE7Y2FzZSA0NDpyZXR1cm4gNDI7Y2FzZSA0NTpyZXR1cm4gNTtjYXNlIDQ2OnJldHVybiAzMztjYXNlIDQ3OnJldHVybiA0MDtjYXNlIDQ4OnJldHVybiAzNH19LHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OiAqeC1heGlzICopL2ksL14oPzogKnktYXhpcyAqKS9pLC9eKD86ICotLSs+ICopL2ksL14oPzogKnF1YWRyYW50LTEgKikvaSwvXig/OiAqcXVhZHJhbnQtMiAqKS9pLC9eKD86ICpxdWFkcmFudC0zICopL2ksL14oPzogKnF1YWRyYW50LTQgKikvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86XHMqOlxzKlxbXHMqKS9pLC9eKD86KDEpfCgwKC5cZCspPykpL2ksL14oPzpccypcXSAqKS9pLC9eKD86XHMqLFxzKikvaSwvXig/OigxKXwoMCguXGQrKT8pKS9pLC9eKD86ICpxdWFkcmFudENoYXJ0ICopL2ksL14oPzpbQS1aYS16XSspL2ksL14oPzo6KS9pLC9eKD86XCspL2ksL14oPzosKS9pLC9eKD86PSkvaSwvXig/Oj0pL2ksL14oPzpcKikvaSwvXig/OiMpL2ksL14oPzpbXF9dKS9pLC9eKD86XC4pL2ksL14oPzomKS9pLC9eKD86LSkvaSwvXig/OlswLTldKykvaSwvXig/OlxzKS9pLC9eKD86OykvaSwvXig/OlshIiMkJSYnKissLS5gP1xcXy9dKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7cG9pbnRfeTp7cnVsZXM6WzMwXSxpbmNsdXNpdmU6ITF9LHBvaW50X3g6e3J1bGVzOlsyOV0saW5jbHVzaXZlOiExfSxwb2ludF9zdGFydDp7cnVsZXM6WzI3LDI4XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI0LDI1XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIzLDI2LDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIF90fSgpO0Z0LmxleGVyPU5lO2Z1bmN0aW9uIGduKCl7dGhpcy55eT17fX1yZXR1cm4gZ24ucHJvdG90eXBlPUZ0LEZ0LlBhcnNlcj1nbixuZXcgZ259KCk7ZnZlLnBhcnNlcj1mdmU7Y29uc3QgVG5uPWZ2ZSxQcD1mMmUoKTtjbGFzcyBDbm57Y29uc3RydWN0b3IoKXt0aGlzLmNvbmZpZz10aGlzLmdldERlZmF1bHRDb25maWcoKSx0aGlzLnRoZW1lQ29uZmlnPXRoaXMuZ2V0RGVmYXVsdFRoZW1lQ29uZmlnKCksdGhpcy5kYXRhPXRoaXMuZ2V0RGVmYXVsdERhdGEoKX1nZXREZWZhdWx0RGF0YSgpe3JldHVybnt0aXRsZVRleHQ6IiIscXVhZHJhbnQxVGV4dDoiIixxdWFkcmFudDJUZXh0OiIiLHF1YWRyYW50M1RleHQ6IiIscXVhZHJhbnQ0VGV4dDoiIix4QXhpc0xlZnRUZXh0OiIiLHhBeGlzUmlnaHRUZXh0OiIiLHlBeGlzQm90dG9tVGV4dDoiIix5QXhpc1RvcFRleHQ6IiIscG9pbnRzOltdfX1nZXREZWZhdWx0Q29uZmlnKCl7dmFyIHMsdSxkLHAsdixiLHksVCxfLEEsUCxSLEYsaixLLGVlLGllLG9lO3JldHVybntzaG93WEF4aXM6ITAsc2hvd1lBeGlzOiEwLHNob3dUaXRsZTohMCxjaGFydEhlaWdodDooKHM9c2gucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOnMuY2hhcnRXaWR0aCl8fDUwMCxjaGFydFdpZHRoOigodT1zaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6dS5jaGFydEhlaWdodCl8fDUwMCx0aXRsZVBhZGRpbmc6KChkPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpkLnRpdGxlUGFkZGluZyl8fDEwLHRpdGxlRm9udFNpemU6KChwPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnRpdGxlRm9udFNpemUpfHwyMCxxdWFkcmFudFBhZGRpbmc6KCh2PXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp2LnF1YWRyYW50UGFkZGluZyl8fDUseEF4aXNMYWJlbFBhZGRpbmc6KChiPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzTGFiZWxQYWRkaW5nKXx8NSx5QXhpc0xhYmVsUGFkZGluZzooKHk9c2gucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOnkueUF4aXNMYWJlbFBhZGRpbmcpfHw1LHhBeGlzTGFiZWxGb250U2l6ZTooKFQ9c2gucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOlQueEF4aXNMYWJlbEZvbnRTaXplKXx8MTYseUF4aXNMYWJlbEZvbnRTaXplOigoXz1zaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Xy55QXhpc0xhYmVsRm9udFNpemUpfHwxNixxdWFkcmFudExhYmVsRm9udFNpemU6KChBPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpBLnF1YWRyYW50TGFiZWxGb250U2l6ZSl8fDE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6KChQPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpQLnF1YWRyYW50VGV4dFRvcFBhZGRpbmcpfHw1LHBvaW50VGV4dFBhZGRpbmc6KChSPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpSLnBvaW50VGV4dFBhZGRpbmcpfHw1LHBvaW50TGFiZWxGb250U2l6ZTooKEY9c2gucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOkYucG9pbnRMYWJlbEZvbnRTaXplKXx8MTIscG9pbnRSYWRpdXM6KChqPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpqLnBvaW50UmFkaXVzKXx8NSx4QXhpc1Bvc2l0aW9uOigoSz1zaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Sy54QXhpc1Bvc2l0aW9uKXx8InRvcCIseUF4aXNQb3NpdGlvbjooKGVlPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDplZS55QXhpc1Bvc2l0aW9uKXx8ImxlZnQiLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKGllPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDppZS5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwxLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKG9lPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpvZS5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwyfX1nZXREZWZhdWx0VGhlbWVDb25maWcoKXtyZXR1cm57cXVhZHJhbnQxRmlsbDpQcC5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6UHAucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOlBwLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDpQcC5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOlBwLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOlBwLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOlBwLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOlBwLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOlBwLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDpQcC5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOlBwLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6UHAucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50VGl0bGVGaWxsOlBwLnF1YWRyYW50VGl0bGVGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOlBwLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOlBwLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfX1jbGVhcigpe3RoaXMuY29uZmlnPXRoaXMuZ2V0RGVmYXVsdENvbmZpZygpLHRoaXMudGhlbWVDb25maWc9dGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKSx0aGlzLmRhdGE9dGhpcy5nZXREZWZhdWx0RGF0YSgpLFhlLmluZm8oImNsZWFyIGNhbGxlZCIpfXNldERhdGEocyl7dGhpcy5kYXRhPXsuLi50aGlzLmRhdGEsLi4uc319YWRkUG9pbnRzKHMpe3RoaXMuZGF0YS5wb2ludHM9Wy4uLnMsLi4udGhpcy5kYXRhLnBvaW50c119c2V0Q29uZmlnKHMpe1hlLnRyYWNlKCJzZXRDb25maWcgY2FsbGVkIHdpdGg6ICIscyksdGhpcy5jb25maWc9ey4uLnRoaXMuY29uZmlnLC4uLnN9fXNldFRoZW1lQ29uZmlnKHMpe1hlLnRyYWNlKCJzZXRUaGVtZUNvbmZpZyBjYWxsZWQgd2l0aDogIixzKSx0aGlzLnRoZW1lQ29uZmlnPXsuLi50aGlzLnRoZW1lQ29uZmlnLC4uLnN9fWNhbGN1bGF0ZVNwYWNlKHMsdSxkLHApe2NvbnN0IHY9dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUsYj17dG9wOnM9PT0idG9wIiYmdT92OjAsYm90dG9tOnM9PT0iYm90dG9tIiYmdT92OjB9LHk9dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsVD17bGVmdDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiJiZkP3k6MCxyaWdodDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09InJpZ2h0IiYmZD95OjB9LF89dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSt0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcqMixBPXt0b3A6cD9fOjB9LFA9dGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nK1QubGVmdCxSPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZytiLnRvcCtBLnRvcCxGPXRoaXMuY29uZmlnLmNoYXJ0V2lkdGgtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItVC5sZWZ0LVQucmlnaHQsaj10aGlzLmNvbmZpZy5jaGFydEhlaWdodC10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcqMi1iLnRvcC1iLmJvdHRvbS1BLnRvcCxLPUYvMixlZT1qLzI7cmV0dXJue3hBeGlzU3BhY2U6Yix5QXhpc1NwYWNlOlQsdGl0bGVTcGFjZTpBLHF1YWRyYW50U3BhY2U6e3F1YWRyYW50TGVmdDpQLHF1YWRyYW50VG9wOlIscXVhZHJhbnRXaWR0aDpGLHF1YWRyYW50SGFsZldpZHRoOksscXVhZHJhbnRIZWlnaHQ6aixxdWFkcmFudEhhbGZIZWlnaHQ6ZWV9fX1nZXRBeGlzTGFiZWxzKHMsdSxkLHApe2NvbnN0e3F1YWRyYW50U3BhY2U6dix0aXRsZVNwYWNlOmJ9PXAse3F1YWRyYW50SGFsZkhlaWdodDp5LHF1YWRyYW50SGVpZ2h0OlQscXVhZHJhbnRMZWZ0Ol8scXVhZHJhbnRIYWxmV2lkdGg6QSxxdWFkcmFudFRvcDpQLHF1YWRyYW50V2lkdGg6Un09dixGPSEhdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0LGo9ISF0aGlzLmRhdGEueUF4aXNUb3BUZXh0LEs9W107cmV0dXJuIHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0JiZ1JiZLLnB1c2goe3RleHQ6dGhpcy5kYXRhLnhBeGlzTGVmdFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCx4Ol8rKEY/QS8yOjApLHk6cz09PSJ0b3AiP3RoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK2IudG9wOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK1ArVCt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcsZm9udFNpemU6dGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOkY/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246MH0pLHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCYmdSYmSy5wdXNoKHt0ZXh0OnRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRYQXhpc1RleHRGaWxsLHg6XytBKyhGP0EvMjowKSx5OnM9PT0idG9wIj90aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytiLnRvcDp0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytQK1QrdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLGZvbnRTaXplOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpGPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOjB9KSx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0JiZkJiZLLnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytfK1IrdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6UCtULShqP3kvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6aj8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSx0aGlzLmRhdGEueUF4aXNUb3BUZXh0JiZkJiZLLnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzVG9wVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytfK1IrdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6UCt5LShqP3kvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6aj8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSxLfWdldFF1YWRyYW50cyhzKXtjb25zdHtxdWFkcmFudFNwYWNlOnV9PXMse3F1YWRyYW50SGFsZkhlaWdodDpkLHF1YWRyYW50TGVmdDpwLHF1YWRyYW50SGFsZldpZHRoOnYscXVhZHJhbnRUb3A6Yn09dSx5PVt7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQxVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OnArdix5OmIsd2lkdGg6dixoZWlnaHQ6ZCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50MlRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MlRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDpwLHk6Yix3aWR0aDp2LGhlaWdodDpkLGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJGaWxsfSx7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQzVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OnAseTpiK2Qsd2lkdGg6dixoZWlnaHQ6ZCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50NFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NFRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDpwK3YseTpiK2Qsd2lkdGg6dixoZWlnaHQ6ZCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQ0RmlsbH1dO2Zvcihjb25zdCBUIG9mIHkpVC50ZXh0Lng9VC54K1Qud2lkdGgvMix0aGlzLmRhdGEucG9pbnRzLmxlbmd0aD09PTA/KFQudGV4dC55PVQueStULmhlaWdodC8yLFQudGV4dC5ob3Jpem9udGFsUG9zPSJtaWRkbGUiKTooVC50ZXh0Lnk9VC55K3RoaXMuY29uZmlnLnF1YWRyYW50VGV4dFRvcFBhZGRpbmcsVC50ZXh0Lmhvcml6b250YWxQb3M9InRvcCIpO3JldHVybiB5fWdldFF1YWRyYW50UG9pbnRzKHMpe2NvbnN0e3F1YWRyYW50U3BhY2U6dX09cyx7cXVhZHJhbnRIZWlnaHQ6ZCxxdWFkcmFudExlZnQ6cCxxdWFkcmFudFRvcDp2LHF1YWRyYW50V2lkdGg6Yn09dSx5PXNEKCkuZG9tYWluKFswLDFdKS5yYW5nZShbcCxiK3BdKSxUPXNEKCkuZG9tYWluKFswLDFdKS5yYW5nZShbZCt2LHZdKTtyZXR1cm4gdGhpcy5kYXRhLnBvaW50cy5tYXAoQT0+KHt4OnkoQS54KSx5OlQoQS55KSxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRQb2ludEZpbGwscmFkaXVzOnRoaXMuY29uZmlnLnBvaW50UmFkaXVzLHRleHQ6e3RleHQ6QS50ZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50VGV4dEZpbGwseDp5KEEueCkseTpUKEEueSkrdGhpcy5jb25maWcucG9pbnRUZXh0UGFkZGluZyx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJ0b3AiLGZvbnRTaXplOnRoaXMuY29uZmlnLnBvaW50TGFiZWxGb250U2l6ZSxyb3RhdGlvbjowfX0pKX1nZXRCb3JkZXJzKHMpe2NvbnN0IHU9dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLzIse3F1YWRyYW50U3BhY2U6ZH09cyx7cXVhZHJhbnRIYWxmSGVpZ2h0OnAscXVhZHJhbnRIZWlnaHQ6dixxdWFkcmFudExlZnQ6YixxdWFkcmFudEhhbGZXaWR0aDp5LHF1YWRyYW50VG9wOlQscXVhZHJhbnRXaWR0aDpffT1kO3JldHVyblt7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiLXUseTE6VCx4MjpiK18rdSx5MjpUfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiK18seTE6VCt1LHgyOmIrXyx5MjpUK3YtdX0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6Yi11LHkxOlQrdix4MjpiK18rdSx5MjpUK3Z9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmIseTE6VCt1LHgyOmIseTI6VCt2LXV9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmIreSx5MTpUK3UseDI6Yit5LHkyOlQrdi11fSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiK3UseTE6VCtwLHgyOmIrXy11LHkyOlQrcH1dfWdldFRpdGxlKHMpe2lmKHMpcmV0dXJue3RleHQ6dGhpcy5kYXRhLnRpdGxlVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRUaXRsZUZpbGwsZm9udFNpemU6dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSxob3Jpem9udGFsUG9zOiJ0b3AiLHZlcnRpY2FsUG9zOiJjZW50ZXIiLHJvdGF0aW9uOjAseTp0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcseDp0aGlzLmNvbmZpZy5jaGFydFdpZHRoLzJ9fWJ1aWxkKCl7Y29uc3Qgcz10aGlzLmNvbmZpZy5zaG93WEF4aXMmJiEhKHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0fHx0aGlzLmRhdGEueEF4aXNSaWdodFRleHQpLHU9dGhpcy5jb25maWcuc2hvd1lBeGlzJiYhISh0aGlzLmRhdGEueUF4aXNUb3BUZXh0fHx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0KSxkPXRoaXMuY29uZmlnLnNob3dUaXRsZSYmISF0aGlzLmRhdGEudGl0bGVUZXh0LHA9dGhpcy5kYXRhLnBvaW50cy5sZW5ndGg+MD8iYm90dG9tIjp0aGlzLmNvbmZpZy54QXhpc1Bvc2l0aW9uLHY9dGhpcy5jYWxjdWxhdGVTcGFjZShwLHMsdSxkKTtyZXR1cm57cG9pbnRzOnRoaXMuZ2V0UXVhZHJhbnRQb2ludHModikscXVhZHJhbnRzOnRoaXMuZ2V0UXVhZHJhbnRzKHYpLGF4aXNMYWJlbHM6dGhpcy5nZXRBeGlzTGFiZWxzKHAscyx1LHYpLGJvcmRlckxpbmVzOnRoaXMuZ2V0Qm9yZGVycyh2KSx0aXRsZTp0aGlzLmdldFRpdGxlKGQpfX19Y29uc3QgU25uPXF0KCk7ZnVuY3Rpb24gVTcoaSl7cmV0dXJuIFlmKGkudHJpbSgpLFNubil9Y29uc3QgUmc9bmV3IENubjtmdW5jdGlvbiBfbm4oaSl7Umcuc2V0RGF0YSh7cXVhZHJhbnQxVGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gQW5uKGkpe1JnLnNldERhdGEoe3F1YWRyYW50MlRleHQ6VTcoaS50ZXh0KX0pfWZ1bmN0aW9uIExubihpKXtSZy5zZXREYXRhKHtxdWFkcmFudDNUZXh0OlU3KGkudGV4dCl9KX1mdW5jdGlvbiBNbm4oaSl7Umcuc2V0RGF0YSh7cXVhZHJhbnQ0VGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gRG5uKGkpe1JnLnNldERhdGEoe3hBeGlzTGVmdFRleHQ6VTcoaS50ZXh0KX0pfWZ1bmN0aW9uIElubihpKXtSZy5zZXREYXRhKHt4QXhpc1JpZ2h0VGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gT25uKGkpe1JnLnNldERhdGEoe3lBeGlzVG9wVGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gTm5uKGkpe1JnLnNldERhdGEoe3lBeGlzQm90dG9tVGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gUG5uKGkscyx1KXtSZy5hZGRQb2ludHMoW3t4OnMseTp1LHRleHQ6VTcoaS50ZXh0KX1dKX1mdW5jdGlvbiBCbm4oaSl7Umcuc2V0Q29uZmlnKHtjaGFydFdpZHRoOml9KX1mdW5jdGlvbiBGbm4oaSl7Umcuc2V0Q29uZmlnKHtjaGFydEhlaWdodDppfSl9ZnVuY3Rpb24gUm5uKCl7Y29uc3QgaT1xdCgpLHt0aGVtZVZhcmlhYmxlczpzLHF1YWRyYW50Q2hhcnQ6dX09aTtyZXR1cm4gdSYmUmcuc2V0Q29uZmlnKHUpLFJnLnNldFRoZW1lQ29uZmlnKHtxdWFkcmFudDFGaWxsOnMucXVhZHJhbnQxRmlsbCxxdWFkcmFudDJGaWxsOnMucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOnMucXVhZHJhbnQzRmlsbCxxdWFkcmFudDRGaWxsOnMucXVhZHJhbnQ0RmlsbCxxdWFkcmFudDFUZXh0RmlsbDpzLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOnMucXVhZHJhbnQyVGV4dEZpbGwscXVhZHJhbnQzVGV4dEZpbGw6cy5xdWFkcmFudDNUZXh0RmlsbCxxdWFkcmFudDRUZXh0RmlsbDpzLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOnMucXVhZHJhbnRQb2ludEZpbGwscXVhZHJhbnRQb2ludFRleHRGaWxsOnMucXVhZHJhbnRQb2ludFRleHRGaWxsLHF1YWRyYW50WEF4aXNUZXh0RmlsbDpzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6cy5xdWFkcmFudFlBeGlzVGV4dEZpbGwscXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw6cy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbDpzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50VGl0bGVGaWxsOnMucXVhZHJhbnRUaXRsZUZpbGx9KSxSZy5zZXREYXRhKHt0aXRsZVRleHQ6QXAoKX0pLFJnLmJ1aWxkKCl9Y29uc3Qgam5uPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6VG5uLGRiOntzZXRXaWR0aDpCbm4sc2V0SGVpZ2h0OkZubixzZXRRdWFkcmFudDFUZXh0Ol9ubixzZXRRdWFkcmFudDJUZXh0OkFubixzZXRRdWFkcmFudDNUZXh0OkxubixzZXRRdWFkcmFudDRUZXh0Ok1ubixzZXRYQXhpc0xlZnRUZXh0OkRubixzZXRYQXhpc1JpZ2h0VGV4dDpJbm4sc2V0WUF4aXNUb3BUZXh0Ok9ubixzZXRZQXhpc0JvdHRvbVRleHQ6Tm5uLGFkZFBvaW50OlBubixnZXRRdWFkcmFudERhdGE6Um5uLGNsZWFyOmZ1bmN0aW9uKCl7UmcuY2xlYXIoKSxQZygpfSxzZXRBY2NUaXRsZTpCZyxnZXRBY2NUaXRsZTpDcCxzZXREaWFncmFtVGl0bGU6Y20sZ2V0RGlhZ3JhbVRpdGxlOkFwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwfSxyZW5kZXJlcjp7ZHJhdzooaSxzLHUsZCk9Pnt2YXIgZGUsWCxnZTtmdW5jdGlvbiBwKFcpe3JldHVybiBXPT09InRvcCI/ImhhbmdpbmciOiJtaWRkbGUifWZ1bmN0aW9uIHYoVyl7cmV0dXJuIFc9PT0ibGVmdCI/InN0YXJ0IjoibWlkZGxlIn1mdW5jdGlvbiBiKFcpe3JldHVybmB0cmFuc2xhdGUoJHtXLnh9LCAke1cueX0pIHJvdGF0ZSgke1cucm90YXRpb258fDB9KWB9Y29uc3QgeT1xdCgpO1hlLmRlYnVnKGBSZW5kZXJpbmcgcXVhZHJhbnQgY2hhcnQKYCtpKTtjb25zdCBUPXkuc2VjdXJpdHlMZXZlbDtsZXQgXztUPT09InNhbmRib3giJiYoXz1JcigiI2kiK3MpKTtjb25zdCBQPUlyKFQ9PT0ic2FuZGJveCI/Xy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KGBbaWQ9IiR7c30iXWApLFI9UC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm1haW4iKSxGPSgoZGU9eS5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6ZGUuY2hhcnRXaWR0aCl8fDUwMCxqPSgoWD15LnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpYLmNoYXJ0SGVpZ2h0KXx8NTAwO05nKFAsaixGLCgoZ2U9eS5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Z2UudXNlTWF4V2lkdGgpfHwhMCksUC5hdHRyKCJ2aWV3Qm94IiwiMCAwICIrRisiICIraiksZC5kYi5zZXRIZWlnaHQoaiksZC5kYi5zZXRXaWR0aChGKTtjb25zdCBLPWQuZGIuZ2V0UXVhZHJhbnREYXRhKCksZWU9Ui5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50cyIpLGllPVIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJib3JkZXIiKSxvZT1SLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGF0YS1wb2ludHMiKSxwZT1SLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWxzIiksYmU9Ui5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpdGxlIik7Sy50aXRsZSYmYmUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZmlsbCIsSy50aXRsZS5maWxsKS5hdHRyKCJmb250LXNpemUiLEsudGl0bGUuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixwKEsudGl0bGUuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIix2KEsudGl0bGUudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLGIoSy50aXRsZSkpLnRleHQoSy50aXRsZS50ZXh0KSxLLmJvcmRlckxpbmVzJiZpZS5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKEsuYm9yZGVyTGluZXMpLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLFc9PlcueDEpLmF0dHIoInkxIixXPT5XLnkxKS5hdHRyKCJ4MiIsVz0+Vy54MikuYXR0cigieTIiLFc9PlcueTIpLnN0eWxlKCJzdHJva2UiLFc9Plcuc3Ryb2tlRmlsbCkuc3R5bGUoInN0cm9rZS13aWR0aCIsVz0+Vy5zdHJva2VXaWR0aCk7Y29uc3QgYWU9ZWUuc2VsZWN0QWxsKCJnLnF1YWRyYW50IikuZGF0YShLLnF1YWRyYW50cykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50Iik7YWUuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsVz0+Vy54KS5hdHRyKCJ5IixXPT5XLnkpLmF0dHIoIndpZHRoIixXPT5XLndpZHRoKS5hdHRyKCJoZWlnaHQiLFc9PlcuaGVpZ2h0KS5hdHRyKCJmaWxsIixXPT5XLmZpbGwpLGFlLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLFc9PlcudGV4dC5maWxsKS5hdHRyKCJmb250LXNpemUiLFc9PlcudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFc9PnAoVy50ZXh0Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsVz0+dihXLnRleHQudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLFc9PmIoVy50ZXh0KSkudGV4dChXPT5XLnRleHQudGV4dCkscGUuc2VsZWN0QWxsKCJnLmxhYmVsIikuZGF0YShLLmF4aXNMYWJlbHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoVz0+Vy50ZXh0KS5hdHRyKCJmaWxsIixXPT5XLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsVz0+Vy5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFc9PnAoVy5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLFc9PnYoVy52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsVz0+YihXKSk7Y29uc3Qgc2U9b2Uuc2VsZWN0QWxsKCJnLmRhdGEtcG9pbnQiKS5kYXRhKEsucG9pbnRzKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGF0YS1wb2ludCIpO3NlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLFc9PlcueCkuYXR0cigiY3kiLFc9PlcueSkuYXR0cigiciIsVz0+Vy5yYWRpdXMpLmF0dHIoImZpbGwiLFc9PlcuZmlsbCksc2UuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkudGV4dChXPT5XLnRleHQudGV4dCkuYXR0cigiZmlsbCIsVz0+Vy50ZXh0LmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsVz0+Vy50ZXh0LmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsVz0+cChXLnRleHQuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixXPT52KFcudGV4dC52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsVz0+YihXLnRleHQpKX19LHN0eWxlczooKT0+IiJ9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBkdmU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihQZSxqZSxJZSxTZSl7Zm9yKEllPUllfHx7fSxTZT1QZS5sZW5ndGg7U2UtLTtJZVtQZVtTZV1dPWplKTtyZXR1cm4gSWV9LHM9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjNdLHU9WzIsNl0sZD1bMSwzXSxwPVsxLDVdLHY9WzEsNl0sYj1bMSw3XSx5PVsxLDUsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjMsMzQsMzUsMzZdLFQ9WzEsMjVdLF89WzEsMjZdLEE9WzEsMjhdLFA9WzEsMjldLFI9WzEsMzBdLEY9WzEsMzFdLGo9WzEsMzJdLEs9WzEsMzNdLGVlPVsxLDM0XSxpZT1bMSwzNV0sb2U9WzEsMzZdLHBlPVsxLDM3XSxiZT1bMSw0M10sYWU9WzEsNDJdLG5lPVsxLDQ3XSxzZT1bMSw1MF0sZGU9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjMsMzQsMzUsMzZdLFg9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjMsMjQsMjYsMjcsMjgsMzQsMzUsMzZdLGdlPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDI0LDI2LDI3LDI4LDM0LDM1LDM2LDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwXSxXPVsxLDY0XSx4ZT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZW9sOjQsWFlDSEFSVDo1LGNoYXJ0Q29uZmlnOjYsZG9jdW1lbnQ6NyxDSEFSVF9PUklFTlRBVElPTjo4LHN0YXRlbWVudDo5LHRpdGxlOjEwLHRleHQ6MTEsWF9BWElTOjEyLHBhcnNlWEF4aXM6MTMsWV9BWElTOjE0LHBhcnNlWUF4aXM6MTUsTElORToxNixwbG90RGF0YToxNyxCQVI6MTgsYWNjX3RpdGxlOjE5LGFjY190aXRsZV92YWx1ZToyMCxhY2NfZGVzY3I6MjEsYWNjX2Rlc2NyX3ZhbHVlOjIyLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MjMsU1FVQVJFX0JSQUNFU19TVEFSVDoyNCxjb21tYVNlcGFyYXRlZE51bWJlcnM6MjUsU1FVQVJFX0JSQUNFU19FTkQ6MjYsTlVNQkVSX1dJVEhfREVDSU1BTDoyNyxDT01NQToyOCx4QXhpc0RhdGE6MjksYmFuZERhdGE6MzAsQVJST1dfREVMSU1JVEVSOjMxLGNvbW1hU2VwYXJhdGVkVGV4dHM6MzIseUF4aXNEYXRhOjMzLE5FV0xJTkU6MzQsU0VNSTozNSxFT0Y6MzYsYWxwaGFOdW06MzcsU1RSOjM4LE1EX1NUUjozOSxhbHBoYU51bVRva2VuOjQwLEFNUDo0MSxOVU06NDIsQUxQSEE6NDMsUExVUzo0NCxFUVVBTFM6NDUsTVVMVDo0NixET1Q6NDcsQlJLVDo0OCxNSU5VUzo0OSxVTkRFUlNDT1JFOjUwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJYWUNIQVJUIiw4OiJDSEFSVF9PUklFTlRBVElPTiIsMTA6InRpdGxlIiwxMjoiWF9BWElTIiwxNDoiWV9BWElTIiwxNjoiTElORSIsMTg6IkJBUiIsMTk6ImFjY190aXRsZSIsMjA6ImFjY190aXRsZV92YWx1ZSIsMjE6ImFjY19kZXNjciIsMjI6ImFjY19kZXNjcl92YWx1ZSIsMjM6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDI0OiJTUVVBUkVfQlJBQ0VTX1NUQVJUIiwyNjoiU1FVQVJFX0JSQUNFU19FTkQiLDI3OiJOVU1CRVJfV0lUSF9ERUNJTUFMIiwyODoiQ09NTUEiLDMxOiJBUlJPV19ERUxJTUlURVIiLDM0OiJORVdMSU5FIiwzNToiU0VNSSIsMzY6IkVPRiIsMzg6IlNUUiIsMzk6Ik1EX1NUUiIsNDE6IkFNUCIsNDI6Ik5VTSIsNDM6IkFMUEhBIiw0NDoiUExVUyIsNDU6IkVRVUFMUyIsNDY6Ik1VTFQiLDQ3OiJET1QiLDQ4OiJCUktUIiw0OToiTUlOVVMiLDUwOiJVTkRFUlNDT1JFIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDNdLFszLDJdLFszLDFdLFs2LDFdLFs3LDBdLFs3LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDNdLFs5LDJdLFs5LDNdLFs5LDJdLFs5LDJdLFs5LDFdLFsxNywzXSxbMjUsM10sWzI1LDFdLFsxMywxXSxbMTMsMl0sWzEzLDFdLFsyOSwxXSxbMjksM10sWzMwLDNdLFszMiwzXSxbMzIsMV0sWzE1LDFdLFsxNSwyXSxbMTUsMV0sWzMzLDNdLFs0LDFdLFs0LDFdLFs0LDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFszNywxXSxbMzcsMl0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGplLEllLFNlLENlLGtlLEtlLEZ0KXt2YXIgTmU9S2UubGVuZ3RoLTE7c3dpdGNoKGtlKXtjYXNlIDU6Q2Uuc2V0T3JpZW50YXRpb24oS2VbTmVdKTticmVhaztjYXNlIDk6Q2Uuc2V0RGlhZ3JhbVRpdGxlKEtlW05lXS50ZXh0LnRyaW0oKSk7YnJlYWs7Y2FzZSAxMjpDZS5zZXRMaW5lRGF0YSh7dGV4dDoiIix0eXBlOiJ0ZXh0In0sS2VbTmVdKTticmVhaztjYXNlIDEzOkNlLnNldExpbmVEYXRhKEtlW05lLTFdLEtlW05lXSk7YnJlYWs7Y2FzZSAxNDpDZS5zZXRCYXJEYXRhKHt0ZXh0OiIiLHR5cGU6InRleHQifSxLZVtOZV0pO2JyZWFrO2Nhc2UgMTU6Q2Uuc2V0QmFyRGF0YShLZVtOZS0xXSxLZVtOZV0pO2JyZWFrO2Nhc2UgMTY6dGhpcy4kPUtlW05lXS50cmltKCksQ2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OmNhc2UgMTg6dGhpcy4kPUtlW05lXS50cmltKCksQ2Uuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE5OnRoaXMuJD1LZVtOZS0xXTticmVhaztjYXNlIDIwOnRoaXMuJD1bTnVtYmVyKEtlW05lLTJdKSwuLi5LZVtOZV1dO2JyZWFrO2Nhc2UgMjE6dGhpcy4kPVtOdW1iZXIoS2VbTmVdKV07YnJlYWs7Y2FzZSAyMjpDZS5zZXRYQXhpc1RpdGxlKEtlW05lXSk7YnJlYWs7Y2FzZSAyMzpDZS5zZXRYQXhpc1RpdGxlKEtlW05lLTFdKTticmVhaztjYXNlIDI0OkNlLnNldFhBeGlzVGl0bGUoe3R5cGU6InRleHQiLHRleHQ6IiJ9KTticmVhaztjYXNlIDI1OkNlLnNldFhBeGlzQmFuZChLZVtOZV0pO2JyZWFrO2Nhc2UgMjY6Q2Uuc2V0WEF4aXNSYW5nZURhdGEoTnVtYmVyKEtlW05lLTJdKSxOdW1iZXIoS2VbTmVdKSk7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9S2VbTmUtMV07YnJlYWs7Y2FzZSAyODp0aGlzLiQ9W0tlW05lLTJdLC4uLktlW05lXV07YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9W0tlW05lXV07YnJlYWs7Y2FzZSAzMDpDZS5zZXRZQXhpc1RpdGxlKEtlW05lXSk7YnJlYWs7Y2FzZSAzMTpDZS5zZXRZQXhpc1RpdGxlKEtlW05lLTFdKTticmVhaztjYXNlIDMyOkNlLnNldFlBeGlzVGl0bGUoe3R5cGU6InRleHQiLHRleHQ6IiJ9KTticmVhaztjYXNlIDMzOkNlLnNldFlBeGlzUmFuZ2VEYXRhKE51bWJlcihLZVtOZS0yXSksTnVtYmVyKEtlW05lXSkpO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXt0ZXh0OktlW05lXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAzODp0aGlzLiQ9e3RleHQ6S2VbTmVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDM5OnRoaXMuJD17dGV4dDpLZVtOZV0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDQwOnRoaXMuJD1LZVtOZV07YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9S2VbTmUtMV0rIiIrS2VbTmVdO2JyZWFrfX0sdGFibGU6W2kocyx1LHszOjEsNDoyLDc6NCw1OmQsMzQ6cCwzNTp2LDM2OmJ9KSx7MTpbM119LGkocyx1LHs0OjIsNzo0LDM6OCw1OmQsMzQ6cCwzNTp2LDM2OmJ9KSxpKHMsdSx7NDoyLDc6NCw2OjksMzoxMCw1OmQsODpbMSwxMV0sMzQ6cCwzNTp2LDM2OmJ9KSx7MTpbMiw0XSw5OjEyLDEwOlsxLDEzXSwxMjpbMSwxNF0sMTQ6WzEsMTVdLDE2OlsxLDE2XSwxODpbMSwxN10sMTk6WzEsMThdLDIxOlsxLDE5XSwyMzpbMSwyMF19LGkoeSxbMiwzNF0pLGkoeSxbMiwzNV0pLGkoeSxbMiwzNl0pLHsxOlsyLDFdfSxpKHMsdSx7NDoyLDc6NCwzOjIxLDU6ZCwzNDpwLDM1OnYsMzY6Yn0pLHsxOlsyLDNdfSxpKHksWzIsNV0pLGkocyxbMiw3XSx7NDoyMiwzNDpwLDM1OnYsMzY6Yn0pLHsxMToyMywzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsxMTozOSwxMzozOCwyNDpiZSwyNzphZSwyOTo0MCwzMDo0MSwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsxMTo0NSwxNTo0NCwyNzpuZSwzMzo0NiwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsxMTo0OSwxNzo0OCwyNDpzZSwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsxMTo1MiwxNzo1MSwyNDpzZSwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsyMDpbMSw1M119LHsyMjpbMSw1NF19LGkoZGUsWzIsMThdKSx7MTpbMiwyXX0saShkZSxbMiw4XSksaShkZSxbMiw5XSksaShYLFsyLDM3XSx7NDA6NTUsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9KSxpKFgsWzIsMzhdKSxpKFgsWzIsMzldKSxpKGdlLFsyLDQwXSksaShnZSxbMiw0Ml0pLGkoZ2UsWzIsNDNdKSxpKGdlLFsyLDQ0XSksaShnZSxbMiw0NV0pLGkoZ2UsWzIsNDZdKSxpKGdlLFsyLDQ3XSksaShnZSxbMiw0OF0pLGkoZ2UsWzIsNDldKSxpKGdlLFsyLDUwXSksaShnZSxbMiw1MV0pLGkoZGUsWzIsMTBdKSxpKGRlLFsyLDIyXSx7MzA6NDEsMjk6NTYsMjQ6YmUsMjc6YWV9KSxpKGRlLFsyLDI0XSksaShkZSxbMiwyNV0pLHszMTpbMSw1N119LHsxMTo1OSwzMjo1OCwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LGkoZGUsWzIsMTFdKSxpKGRlLFsyLDMwXSx7MzM6NjAsMjc6bmV9KSxpKGRlLFsyLDMyXSksezMxOlsxLDYxXX0saShkZSxbMiwxMl0pLHsxNzo2MiwyNDpzZX0sezI1OjYzLDI3Old9LGkoZGUsWzIsMTRdKSx7MTc6NjUsMjQ6c2V9LGkoZGUsWzIsMTZdKSxpKGRlLFsyLDE3XSksaShnZSxbMiw0MV0pLGkoZGUsWzIsMjNdKSx7Mjc6WzEsNjZdfSx7MjY6WzEsNjddfSx7MjY6WzIsMjldLDI4OlsxLDY4XX0saShkZSxbMiwzMV0pLHsyNzpbMSw2OV19LGkoZGUsWzIsMTNdKSx7MjY6WzEsNzBdfSx7MjY6WzIsMjFdLDI4OlsxLDcxXX0saShkZSxbMiwxNV0pLGkoZGUsWzIsMjZdKSxpKGRlLFsyLDI3XSksezExOjU5LDMyOjcyLDM3OjI0LDM4OlQsMzk6Xyw0MDoyNyw0MTpBLDQyOlAsNDM6Uiw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZX0saShkZSxbMiwzM10pLGkoZGUsWzIsMTldKSx7MjU6NzMsMjc6V30sezI2OlsyLDI4XX0sezI2OlsyLDIwXX1dLGRlZmF1bHRBY3Rpb25zOns4OlsyLDFdLDEwOlsyLDNdLDIxOlsyLDJdLDcyOlsyLDI4XSw3MzpbMiwyMF19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oamUsSWUpe2lmKEllLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoamUpO2Vsc2V7dmFyIFNlPW5ldyBFcnJvcihqZSk7dGhyb3cgU2UuaGFzaD1JZSxTZX19LHBhcnNlOmZ1bmN0aW9uKGplKXt2YXIgSWU9dGhpcyxTZT1bMF0sQ2U9W10sa2U9W251bGxdLEtlPVtdLEZ0PXRoaXMudGFibGUsTmU9IiIsZ249MCxfdD0wLEV0PTIsR3Q9MSxsbj1LZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSx4dD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFB0PXt5eTp7fX07Zm9yKHZhciBRZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFFlKSYmKFB0Lnl5W1FlXT10aGlzLnl5W1FlXSk7eHQuc2V0SW5wdXQoamUsUHQueXkpLFB0Lnl5LmxleGVyPXh0LFB0Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiB4dC55eWxsb2M+InUiJiYoeHQueXlsbG9jPXt9KTt2YXIgRHQ9eHQueXlsbG9jO0tlLnB1c2goRHQpO3ZhciBrdD14dC5vcHRpb25zJiZ4dC5vcHRpb25zLnJhbmdlczt0eXBlb2YgUHQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9UHQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gT24oKXt2YXIgcW47cmV0dXJuIHFuPUNlLnBvcCgpfHx4dC5sZXgoKXx8R3QsdHlwZW9mIHFuIT0ibnVtYmVyIiYmKHFuIGluc3RhbmNlb2YgQXJyYXkmJihDZT1xbixxbj1DZS5wb3AoKSkscW49SWUuc3ltYm9sc19bcW5dfHxxbikscW59Zm9yKHZhciBodCx6cix5dCxqaSx4aT17fSxNYSx6cyxhbyxUcjs7KXtpZih6cj1TZVtTZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t6cl0/eXQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t6cl06KChodD09PW51bGx8fHR5cGVvZiBodD4idSIpJiYoaHQ9T24oKSkseXQ9RnRbenJdJiZGdFt6cl1baHRdKSx0eXBlb2YgeXQ+InUifHwheXQubGVuZ3RofHwheXRbMF0pe3ZhciBGbj0iIjtUcj1bXTtmb3IoTWEgaW4gRnRbenJdKXRoaXMudGVybWluYWxzX1tNYV0mJk1hPkV0JiZUci5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bTWFdKyInIik7eHQuc2hvd1Bvc2l0aW9uP0ZuPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGduKzEpK2A6CmAreHQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtUci5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2h0XXx8aHQpKyInIjpGbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhnbisxKSsiOiBVbmV4cGVjdGVkICIrKGh0PT1HdD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1todF18fGh0KSsiJyIpLHRoaXMucGFyc2VFcnJvcihGbix7dGV4dDp4dC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19baHRdfHxodCxsaW5lOnh0Lnl5bGluZW5vLGxvYzpEdCxleHBlY3RlZDpUcn0pfWlmKHl0WzBdaW5zdGFuY2VvZiBBcnJheSYmeXQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit6cisiLCB0b2tlbjogIitodCk7c3dpdGNoKHl0WzBdKXtjYXNlIDE6U2UucHVzaChodCksa2UucHVzaCh4dC55eXRleHQpLEtlLnB1c2goeHQueXlsbG9jKSxTZS5wdXNoKHl0WzFdKSxodD1udWxsLF90PXh0Lnl5bGVuZyxOZT14dC55eXRleHQsZ249eHQueXlsaW5lbm8sRHQ9eHQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZih6cz10aGlzLnByb2R1Y3Rpb25zX1t5dFsxXV1bMV0seGkuJD1rZVtrZS5sZW5ndGgtenNdLHhpLl8kPXtmaXJzdF9saW5lOktlW0tlLmxlbmd0aC0oenN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpLZVtLZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpLZVtLZS5sZW5ndGgtKHpzfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOktlW0tlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sa3QmJih4aS5fJC5yYW5nZT1bS2VbS2UubGVuZ3RoLSh6c3x8MSldLnJhbmdlWzBdLEtlW0tlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLGppPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh4aSxbTmUsX3QsZ24sUHQueXkseXRbMV0sa2UsS2VdLmNvbmNhdChsbikpLHR5cGVvZiBqaTwidSIpcmV0dXJuIGppO3pzJiYoU2U9U2Uuc2xpY2UoMCwtMSp6cyoyKSxrZT1rZS5zbGljZSgwLC0xKnpzKSxLZT1LZS5zbGljZSgwLC0xKnpzKSksU2UucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t5dFsxXV1bMF0pLGtlLnB1c2goeGkuJCksS2UucHVzaCh4aS5fJCksYW89RnRbU2VbU2UubGVuZ3RoLTJdXVtTZVtTZS5sZW5ndGgtMV1dLFNlLnB1c2goYW8pO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxVPWZ1bmN0aW9uKCl7dmFyIFBlPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKEllLFNlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEllLFNlKTtlbHNlIHRocm93IG5ldyBFcnJvcihJZSl9LHNldElucHV0OmZ1bmN0aW9uKGplLEllKXtyZXR1cm4gdGhpcy55eT1JZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9amUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIGplPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1qZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9amUsdGhpcy5tYXRjaGVkKz1qZTt2YXIgSWU9amUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBJZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksamV9LHVucHV0OmZ1bmN0aW9uKGplKXt2YXIgSWU9amUubGVuZ3RoLFNlPWplLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9amUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUllKSx0aGlzLm9mZnNldC09SWU7dmFyIENlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLFNlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09U2UubGVuZ3RoLTEpO3ZhciBrZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46U2U/KFNlLmxlbmd0aD09PUNlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrQ2VbQ2UubGVuZ3RoLVNlLmxlbmd0aF0ubGVuZ3RoLVNlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tSWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1ba2VbMF0sa2VbMF0rdGhpcy55eWxlbmctSWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihqZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGplKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBqZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGplLmxlbmd0aD4yMD8iLi4uIjoiIikramUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgamU9dGhpcy5tYXRjaDtyZXR1cm4gamUubGVuZ3RoPDIwJiYoamUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWplLmxlbmd0aCkpLChqZS5zdWJzdHIoMCwyMCkrKGplLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgamU9dGhpcy5wYXN0SW5wdXQoKSxJZT1uZXcgQXJyYXkoamUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gamUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0llKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihqZSxJZSl7dmFyIFNlLENlLGtlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihrZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihrZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxDZT1qZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksQ2UmJih0aGlzLnl5bGluZW5vKz1DZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpDZT9DZVtDZS5sZW5ndGgtMV0ubGVuZ3RoLUNlW0NlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2plWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWplWzBdLHRoaXMubWF0Y2grPWplWzBdLHRoaXMubWF0Y2hlcz1qZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShqZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9amVbMF0sU2U9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsSWUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksU2UpcmV0dXJuIFNlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBLZSBpbiBrZSl0aGlzW0tlXT1rZVtLZV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgamUsSWUsU2UsQ2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIga2U9dGhpcy5fY3VycmVudFJ1bGVzKCksS2U9MDtLZTxrZS5sZW5ndGg7S2UrKylpZihTZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2tlW0tlXV0pLFNlJiYoIUllfHxTZVswXS5sZW5ndGg+SWVbMF0ubGVuZ3RoKSl7aWYoSWU9U2UsQ2U9S2UsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoamU9dGhpcy50ZXN0X21hdGNoKFNlLGtlW0tlXSksamUhPT0hMSlyZXR1cm4gamU7aWYodGhpcy5fYmFja3RyYWNrKXtJZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBJZT8oamU9dGhpcy50ZXN0X21hdGNoKEllLGtlW0NlXSksamUhPT0hMT9qZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIEllPXRoaXMubmV4dCgpO3JldHVybiBJZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oSWUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChJZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIEllPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEllPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oSWUpe3JldHVybiBJZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEllfHwwKSxJZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0llXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihJZSl7dGhpcy5iZWdpbihJZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oSWUsU2UsQ2Usa2Upe3N3aXRjaChDZSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzNDtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzNDtjYXNlIDQ6cmV0dXJuIDM0O2Nhc2UgNTpicmVhaztjYXNlIDY6cmV0dXJuIDEwO2Nhc2UgNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY190aXRsZSIpLDE5O2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgOTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY19kZXNjciIpLDIxO2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDExOnRoaXMucHVzaFN0YXRlKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDpyZXR1cm4gNTtjYXNlIDE1OnJldHVybiA4O2Nhc2UgMTY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJheGlzX2RhdGEiKSwiWF9BWElTIjtjYXNlIDE3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYXhpc19kYXRhIiksIllfQVhJUyI7Y2FzZSAxODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImF4aXNfYmFuZF9kYXRhIiksMjQ7Y2FzZSAxOTpyZXR1cm4gMzE7Y2FzZSAyMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRhdGEiKSwxNjtjYXNlIDIxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZGF0YSIpLDE4O2Nhc2UgMjI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkYXRhX2lubmVyIiksMjQ7Y2FzZSAyMzpyZXR1cm4gMjc7Y2FzZSAyNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI2O2Nhc2UgMjU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjY6dGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgMjc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIlNUUiI7Y2FzZSAyOTpyZXR1cm4gMjQ7Y2FzZSAzMDpyZXR1cm4gMjY7Y2FzZSAzMTpyZXR1cm4gNDM7Y2FzZSAzMjpyZXR1cm4iQ09MT04iO2Nhc2UgMzM6cmV0dXJuIDQ0O2Nhc2UgMzQ6cmV0dXJuIDI4O2Nhc2UgMzU6cmV0dXJuIDQ1O2Nhc2UgMzY6cmV0dXJuIDQ2O2Nhc2UgMzc6cmV0dXJuIDQ4O2Nhc2UgMzg6cmV0dXJuIDUwO2Nhc2UgMzk6cmV0dXJuIDQ3O2Nhc2UgNDA6cmV0dXJuIDQxO2Nhc2UgNDE6cmV0dXJuIDQ5O2Nhc2UgNDI6cmV0dXJuIDQyO2Nhc2UgNDM6YnJlYWs7Y2FzZSA0NDpyZXR1cm4gMzU7Y2FzZSA0NTpyZXR1cm4gMzZ9fSxydWxlczpbL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzooXHI/XG4pKS9pLC9eKD86KFxyP1xuKSkvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86XHspL2ksL14oPzpbXlx9XSopL2ksL14oPzp4eWNoYXJ0LWJldGFcYikvaSwvXig/Oig/OnZlcnRpY2FsfGhvcml6b250YWwpKS9pLC9eKD86eC1heGlzXGIpL2ksL14oPzp5LWF4aXNcYikvaSwvXig/OlxbKS9pLC9eKD86LS0+KS9pLC9eKD86bGluZVxiKS9pLC9eKD86YmFyXGIpL2ksL14oPzpcWykvaSwvXig/OlsrLV0/KD86XGQrKD86XC5cZCspP3xcLlxkKykpL2ksL14oPzpcXSkvaSwvXig/Oig/OmBcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx7IHRoaXNcLnB1c2hTdGF0ZVwobWRfc3RyaW5nXCk7IFx9XG48bWRfc3RyaW5nPlwoXD86XChcPyFgIlwpXC5cKVwrICAgICAgICAgICAgICAgICAgXHsgcmV0dXJuIE1EX1NUUjsgXH1cbjxtZF9zdHJpbmc+XChcPzpgKSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86XFspL2ksL14oPzpcXSkvaSwvXig/OltBLVphLXpdKykvaSwvXig/OjopL2ksL14oPzpcKykvaSwvXig/OiwpL2ksL14oPzo9KS9pLC9eKD86XCopL2ksL14oPzojKS9pLC9eKD86W1xfXSkvaSwvXig/OlwuKS9pLC9eKD86JikvaSwvXig/Oi0pL2ksL14oPzpbMC05XSspL2ksL14oPzpccyspL2ksL14oPzo7KS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7ZGF0YV9pbm5lcjp7cnVsZXM6WzAsMSw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjMsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sZGF0YTp7cnVsZXM6WzAsMSwzLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyMiwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxheGlzX2JhbmRfZGF0YTp7cnVsZXM6WzAsMSw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sYXhpc19kYXRhOntydWxlczpbMCwxLDIsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIzLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxMF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LHRpdGxlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyNywyOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfX19O3JldHVybiBQZX0oKTt4ZS5sZXhlcj1VO2Z1bmN0aW9uIEZlKCl7dGhpcy55eT17fX1yZXR1cm4gRmUucHJvdG90eXBlPXhlLHhlLlBhcnNlcj1GZSxuZXcgRmV9KCk7ZHZlLnBhcnNlcj1kdmU7Y29uc3QgJG5uPWR2ZTtmdW5jdGlvbiBmR2UoaSl7cmV0dXJuIGkudHlwZT09PSJiYXIifWZ1bmN0aW9uIGRHZShpKXtyZXR1cm4gaS50eXBlPT09ImJhbmQifWZ1bmN0aW9uICRSKGkpe3JldHVybiBpLnR5cGU9PT0ibGluZWFyIn1jbGFzcyBnR2V7Y29uc3RydWN0b3Iocyl7dGhpcy5wYXJlbnRHcm91cD1zfWdldE1heERpbWVuc2lvbihzLHUpe2lmKCF0aGlzLnBhcmVudEdyb3VwKXJldHVybnt3aWR0aDpzLnJlZHVjZSgodixiKT0+TWF0aC5tYXgoYi5sZW5ndGgsdiksMCkqdSxoZWlnaHQ6dX07Y29uc3QgZD17d2lkdGg6MCxoZWlnaHQ6MH0scD10aGlzLnBhcmVudEdyb3VwLmFwcGVuZCgiZyIpLmF0dHIoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5hdHRyKCJmb250LXNpemUiLHUpO2Zvcihjb25zdCB2IG9mIHMpe2NvbnN0IGI9Ulp0KHAsMSx2KSx5PWI/Yi53aWR0aDp2Lmxlbmd0aCp1LFQ9Yj9iLmhlaWdodDp1O2Qud2lkdGg9TWF0aC5tYXgoZC53aWR0aCx5KSxkLmhlaWdodD1NYXRoLm1heChkLmhlaWdodCxUKX1yZXR1cm4gcC5yZW1vdmUoKSxkfX1jb25zdCBwR2U9LjcsYkdlPS4yO2NsYXNzIG1HZXtjb25zdHJ1Y3RvcihzLHUsZCxwKXt0aGlzLmF4aXNDb25maWc9cyx0aGlzLnRpdGxlPXUsdGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvcj1kLHRoaXMuYXhpc1RoZW1lQ29uZmlnPXAsdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5heGlzUG9zaXRpb249ImxlZnQiLHRoaXMuc2hvd1RpdGxlPSExLHRoaXMuc2hvd0xhYmVsPSExLHRoaXMuc2hvd1RpY2s9ITEsdGhpcy5zaG93QXhpc0xpbmU9ITEsdGhpcy5vdXRlclBhZGRpbmc9MCx0aGlzLnRpdGxlVGV4dEhlaWdodD0wLHRoaXMubGFiZWxUZXh0SGVpZ2h0PTAsdGhpcy5yYW5nZT1bMCwxMF0sdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5heGlzUG9zaXRpb249ImxlZnQifXNldFJhbmdlKHMpe3RoaXMucmFuZ2U9cyx0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0Inx8dGhpcy5heGlzUG9zaXRpb249PT0icmlnaHQiP3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1zWzFdLXNbMF06dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9c1sxXS1zWzBdLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpfWdldFJhbmdlKCl7cmV0dXJuW3RoaXMucmFuZ2VbMF0rdGhpcy5vdXRlclBhZGRpbmcsdGhpcy5yYW5nZVsxXS10aGlzLm91dGVyUGFkZGluZ119c2V0QXhpc1Bvc2l0aW9uKHMpe3RoaXMuYXhpc1Bvc2l0aW9uPXMsdGhpcy5zZXRSYW5nZSh0aGlzLnJhbmdlKX1nZXRUaWNrRGlzdGFuY2UoKXtjb25zdCBzPXRoaXMuZ2V0UmFuZ2UoKTtyZXR1cm4gTWF0aC5hYnMoc1swXS1zWzFdKS90aGlzLmdldFRpY2tWYWx1ZXMoKS5sZW5ndGh9Z2V0QXhpc091dGVyUGFkZGluZygpe3JldHVybiB0aGlzLm91dGVyUGFkZGluZ31nZXRMYWJlbERpbWVuc2lvbigpe3JldHVybiB0aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbih0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAocz0+cy50b1N0cmluZygpKSx0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSl9cmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKXtwR2UqdGhpcy5nZXRUaWNrRGlzdGFuY2UoKT50aGlzLm91dGVyUGFkZGluZyoyJiYodGhpcy5vdXRlclBhZGRpbmc9TWF0aC5mbG9vcihwR2UqdGhpcy5nZXRUaWNrRGlzdGFuY2UoKS8yKSksdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCl9Y2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KHMpe2xldCB1PXMuaGVpZ2h0O2lmKHRoaXMuYXhpc0NvbmZpZy5zaG93QXhpc0xpbmUmJnU+dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgmJih1LT10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCx0aGlzLnNob3dBeGlzTGluZT0hMCksdGhpcy5heGlzQ29uZmlnLnNob3dMYWJlbCl7Y29uc3QgZD10aGlzLmdldExhYmVsRGltZW5zaW9uKCkscD1iR2Uqcy53aWR0aDt0aGlzLm91dGVyUGFkZGluZz1NYXRoLm1pbihkLndpZHRoLzIscCk7Y29uc3Qgdj1kLmhlaWdodCt0aGlzLmF4aXNDb25maWcubGFiZWxQYWRkaW5nKjI7dGhpcy5sYWJlbFRleHRIZWlnaHQ9ZC5oZWlnaHQsdjw9dSYmKHUtPXYsdGhpcy5zaG93TGFiZWw9ITApfWlmKHRoaXMuYXhpc0NvbmZpZy5zaG93VGljayYmdT49dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgmJih0aGlzLnNob3dUaWNrPSEwLHUtPXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoKSx0aGlzLmF4aXNDb25maWcuc2hvd1RpdGxlJiZ0aGlzLnRpdGxlKXtjb25zdCBkPXRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFt0aGlzLnRpdGxlXSx0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSkscD1kLmhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI7dGhpcy50aXRsZVRleHRIZWlnaHQ9ZC5oZWlnaHQscDw9dSYmKHUtPXAsdGhpcy5zaG93VGl0bGU9ITApfXRoaXMuYm91bmRpbmdSZWN0LndpZHRoPXMud2lkdGgsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PXMuaGVpZ2h0LXV9Y2FsY3VsYXRlU3BhY2VJZkRyYXduVmVydGljYWwocyl7bGV0IHU9cy53aWR0aDtpZih0aGlzLmF4aXNDb25maWcuc2hvd0F4aXNMaW5lJiZ1PnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoJiYodS09dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgsdGhpcy5zaG93QXhpc0xpbmU9ITApLHRoaXMuYXhpc0NvbmZpZy5zaG93TGFiZWwpe2NvbnN0IGQ9dGhpcy5nZXRMYWJlbERpbWVuc2lvbigpLHA9YkdlKnMuaGVpZ2h0O3RoaXMub3V0ZXJQYWRkaW5nPU1hdGgubWluKGQuaGVpZ2h0LzIscCk7Y29uc3Qgdj1kLndpZHRoK3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcqMjt2PD11JiYodS09dix0aGlzLnNob3dMYWJlbD0hMCl9aWYodGhpcy5heGlzQ29uZmlnLnNob3dUaWNrJiZ1Pj10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aCYmKHRoaXMuc2hvd1RpY2s9ITAsdS09dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgpLHRoaXMuYXhpc0NvbmZpZy5zaG93VGl0bGUmJnRoaXMudGl0bGUpe2NvbnN0IGQ9dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvci5nZXRNYXhEaW1lbnNpb24oW3RoaXMudGl0bGVdLHRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplKSxwPWQuaGVpZ2h0K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcqMjt0aGlzLnRpdGxlVGV4dEhlaWdodD1kLmhlaWdodCxwPD11JiYodS09cCx0aGlzLnNob3dUaXRsZT0hMCl9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9cy53aWR0aC11LHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1zLmhlaWdodH1jYWxjdWxhdGVTcGFjZShzKXtyZXR1cm4gdGhpcy5heGlzUG9zaXRpb249PT0ibGVmdCJ8fHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Ij90aGlzLmNhbGN1bGF0ZVNwYWNlSWZEcmF3blZlcnRpY2FsKHMpOnRoaXMuY2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KHMpLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpLHt3aWR0aDp0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCxoZWlnaHQ6dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0fX1zZXRCb3VuZGluZ0JveFhZKHMpe3RoaXMuYm91bmRpbmdSZWN0Lng9cy54LHRoaXMuYm91bmRpbmdSZWN0Lnk9cy55fWdldERyYXdhYmxlRWxlbWVudHNGb3JMZWZ0QXhpcygpe2NvbnN0IHM9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IHU9dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO3MucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsImF4aXNsLWxpbmUiXSxkYXRhOlt7cGF0aDpgTSAke3V9LCR7dGhpcy5ib3VuZGluZ1JlY3QueX0gTCAke3V9LCR7dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9IGAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmcy5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsibGVmdC1heGlzIiwibGFiZWwiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcCh1PT4oe3RleHQ6dS50b1N0cmluZygpLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC0odGhpcy5zaG93TGFiZWw/dGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZzowKS0odGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKS0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCkseTp0aGlzLmdldFNjYWxlVmFsdWUodSksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6Im1pZGRsZSIsaG9yaXpvbnRhbFBvczoicmlnaHQifSkpfSksdGhpcy5zaG93VGljayl7Y29uc3QgdT10aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRoLSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKTtzLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKGQ9Pih7cGF0aDpgTSAke3V9LCR7dGhpcy5nZXRTY2FsZVZhbHVlKGQpfSBMICR7dS10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aH0sJHt0aGlzLmdldFNjYWxlVmFsdWUoZCl9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZzLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJ0aXRsZSJdLGRhdGE6W3t0ZXh0OnRoaXMudGl0bGUseDp0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC8yLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjoyNzAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksc31nZXREcmF3YWJsZUVsZW1lbnRzRm9yQm90dG9tQXhpcygpe2NvbnN0IHM9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IHU9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO3MucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImJvdHRvbS1heGlzIiwiYXhpcy1saW5lIl0sZGF0YTpbe3BhdGg6YE0gJHt0aGlzLmJvdW5kaW5nUmVjdC54fSwke3V9IEwgJHt0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRofSwke3V9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmF4aXNMaW5lQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGh9XX0pfWlmKHRoaXMuc2hvd0xhYmVsJiZzLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsImxhYmVsIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAodT0+KHt0ZXh0OnUudG9TdHJpbmcoKSx4OnRoaXMuZ2V0U2NhbGVWYWx1ZSh1KSx5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZysodGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKSsodGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn0pKX0pLHRoaXMuc2hvd1RpY2spe2NvbnN0IHU9dGhpcy5ib3VuZGluZ1JlY3QueSsodGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCk7cy5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsiYm90dG9tLWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKGQ9Pih7cGF0aDpgTSAke3RoaXMuZ2V0U2NhbGVWYWx1ZShkKX0sJHt1fSBMICR7dGhpcy5nZXRTY2FsZVZhbHVlKGQpfSwke3UrdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGh9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZzLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsInRpdGxlIl0sZGF0YTpbe3RleHQ6dGhpcy50aXRsZSx4OnRoaXMucmFuZ2VbMF0rKHRoaXMucmFuZ2VbMV0tdGhpcy5yYW5nZVswXSkvMix5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmctdGhpcy50aXRsZVRleHRIZWlnaHQsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksc31nZXREcmF3YWJsZUVsZW1lbnRzRm9yVG9wQXhpcygpe2NvbnN0IHM9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IHU9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgvMjtzLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJ0b3AtYXhpcyIsImF4aXMtbGluZSJdLGRhdGE6W3twYXRoOmBNICR7dGhpcy5ib3VuZGluZ1JlY3QueH0sJHt1fSBMICR7dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHt1fWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmcy5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsidG9wLWF4aXMiLCJsYWJlbCJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKHU9Pih7dGV4dDp1LnRvU3RyaW5nKCkseDp0aGlzLmdldFNjYWxlVmFsdWUodSkseTp0aGlzLmJvdW5kaW5nUmVjdC55Kyh0aGlzLnNob3dUaXRsZT90aGlzLnRpdGxlVGV4dEhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI6MCkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmxhYmVsQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifSkpfSksdGhpcy5zaG93VGljayl7Y29uc3QgdT10aGlzLmJvdW5kaW5nUmVjdC55O3MucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwidGlja3MiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChkPT4oe3BhdGg6YE0gJHt0aGlzLmdldFNjYWxlVmFsdWUoZCl9LCR7dSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApfSBMICR7dGhpcy5nZXRTY2FsZVZhbHVlKGQpfSwke3UrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoLSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKX1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy50aWNrV2lkdGh9KSl9KX1yZXR1cm4gdGhpcy5zaG93VGl0bGUmJnMucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwidGl0bGUiXSxkYXRhOlt7dGV4dDp0aGlzLnRpdGxlLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9XX0pLHN9Z2V0RHJhd2FibGVFbGVtZW50cygpe2lmKHRoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQiKXJldHVybiB0aGlzLmdldERyYXdhYmxlRWxlbWVudHNGb3JMZWZ0QXhpcygpO2lmKHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Iil0aHJvdyBFcnJvcigiRHJhd2luZyBvZiByaWdodCBheGlzIGlzIG5vdCBpbXBsZW1lbnRlZCIpO3JldHVybiB0aGlzLmF4aXNQb3NpdGlvbj09PSJib3R0b20iP3RoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvckJvdHRvbUF4aXMoKTp0aGlzLmF4aXNQb3NpdGlvbj09PSJ0b3AiP3RoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvclRvcEF4aXMoKTpbXX19Y2xhc3Mgem5uIGV4dGVuZHMgbUdle2NvbnN0cnVjdG9yKHMsdSxkLHAsdil7c3VwZXIocyxwLHYsdSksdGhpcy5jYXRlZ29yaWVzPWQsdGhpcy5zY2FsZT1xcGUoKS5kb21haW4odGhpcy5jYXRlZ29yaWVzKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfXNldFJhbmdlKHMpe3N1cGVyLnNldFJhbmdlKHMpfXJlY2FsY3VsYXRlU2NhbGUoKXt0aGlzLnNjYWxlPXFwZSgpLmRvbWFpbih0aGlzLmNhdGVnb3JpZXMpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSkucGFkZGluZ0lubmVyKDEpLnBhZGRpbmdPdXRlcigwKS5hbGlnbiguNSksWGUudHJhY2UoIkJhbmRBeGlzIGF4aXMgZmluYWwgY2F0ZWdvcmllcywgcmFuZ2U6ICIsdGhpcy5jYXRlZ29yaWVzLHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLmNhdGVnb3JpZXN9Z2V0U2NhbGVWYWx1ZShzKXtyZXR1cm4gdGhpcy5zY2FsZShzKXx8dGhpcy5nZXRSYW5nZSgpWzBdfX1jbGFzcyBxbm4gZXh0ZW5kcyBtR2V7Y29uc3RydWN0b3Iocyx1LGQscCx2KXtzdXBlcihzLHAsdix1KSx0aGlzLmRvbWFpbj1kLHRoaXMuc2NhbGU9c0QoKS5kb21haW4odGhpcy5kb21haW4pLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLnNjYWxlLnRpY2tzKCl9cmVjYWxjdWxhdGVTY2FsZSgpe2NvbnN0IHM9Wy4uLnRoaXMuZG9tYWluXTt0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0IiYmcy5yZXZlcnNlKCksdGhpcy5zY2FsZT1zRCgpLmRvbWFpbihzKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfWdldFNjYWxlVmFsdWUocyl7cmV0dXJuIHRoaXMuc2NhbGUocyl9fWZ1bmN0aW9uIHZHZShpLHMsdSxkKXtjb25zdCBwPW5ldyBnR2UoZCk7cmV0dXJuIGRHZShpKT9uZXcgem5uKHMsdSxpLmNhdGVnb3JpZXMsaS50aXRsZSxwKTpuZXcgcW5uKHMsdSxbaS5taW4saS5tYXhdLGkudGl0bGUscCl9Y2xhc3MgSG5ue2NvbnN0cnVjdG9yKHMsdSxkLHApe3RoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3I9cyx0aGlzLmNoYXJ0Q29uZmlnPXUsdGhpcy5jaGFydERhdGE9ZCx0aGlzLmNoYXJ0VGhlbWVDb25maWc9cCx0aGlzLmJvdW5kaW5nUmVjdD17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSx0aGlzLnNob3dDaGFydFRpdGxlPSExfXNldEJvdW5kaW5nQm94WFkocyl7dGhpcy5ib3VuZGluZ1JlY3QueD1zLngsdGhpcy5ib3VuZGluZ1JlY3QueT1zLnl9Y2FsY3VsYXRlU3BhY2Uocyl7Y29uc3QgdT10aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbihbdGhpcy5jaGFydERhdGEudGl0bGVdLHRoaXMuY2hhcnRDb25maWcudGl0bGVGb250U2l6ZSksZD1NYXRoLm1heCh1LndpZHRoLHMud2lkdGgpLHA9dS5oZWlnaHQrMip0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlUGFkZGluZztyZXR1cm4gdS53aWR0aDw9ZCYmdS5oZWlnaHQ8PXAmJnRoaXMuY2hhcnRDb25maWcuc2hvd1RpdGxlJiZ0aGlzLmNoYXJ0RGF0YS50aXRsZSYmKHRoaXMuYm91bmRpbmdSZWN0LndpZHRoPWQsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PXAsdGhpcy5zaG93Q2hhcnRUaXRsZT0hMCkse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtjb25zdCBzPVtdO3JldHVybiB0aGlzLnNob3dDaGFydFRpdGxlJiZzLnB1c2goe2dyb3VwVGV4dHM6WyJjaGFydC10aXRsZSJdLHR5cGU6InRleHQiLGRhdGE6W3tmb250U2l6ZTp0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlRm9udFNpemUsdGV4dDp0aGlzLmNoYXJ0RGF0YS50aXRsZSx2ZXJ0aWNhbFBvczoibWlkZGxlIixob3Jpem9udGFsUG9zOiJjZW50ZXIiLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQvMixmaWxsOnRoaXMuY2hhcnRUaGVtZUNvbmZpZy50aXRsZUNvbG9yLHJvdGF0aW9uOjB9XX0pLHN9fWZ1bmN0aW9uIFZubihpLHMsdSxkKXtjb25zdCBwPW5ldyBnR2UoZCk7cmV0dXJuIG5ldyBIbm4ocCxpLHMsdSl9Y2xhc3MgVW5ue2NvbnN0cnVjdG9yKHMsdSxkLHAsdil7dGhpcy5wbG90RGF0YT1zLHRoaXMueEF4aXM9dSx0aGlzLnlBeGlzPWQsdGhpcy5vcmllbnRhdGlvbj1wLHRoaXMucGxvdEluZGV4PXZ9Z2V0RHJhd2FibGVFbGVtZW50KCl7Y29uc3Qgcz10aGlzLnBsb3REYXRhLmRhdGEubWFwKGQ9Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUoZFswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKGRbMV0pXSk7bGV0IHU7cmV0dXJuIHRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/dT1rNygpLnkoZD0+ZFswXSkueChkPT5kWzFdKShzKTp1PWs3KCkueChkPT5kWzBdKS55KGQ9PmRbMV0pKHMpLHU/W3tncm91cFRleHRzOlsicGxvdCIsYGxpbmUtcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InBhdGgiLGRhdGE6W3twYXRoOnUsc3Ryb2tlRmlsbDp0aGlzLnBsb3REYXRhLnN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5wbG90RGF0YS5zdHJva2VXaWR0aH1dfV06W119fWNsYXNzIEdubntjb25zdHJ1Y3RvcihzLHUsZCxwLHYsYil7dGhpcy5iYXJEYXRhPXMsdGhpcy5ib3VuZGluZ1JlY3Q9dSx0aGlzLnhBeGlzPWQsdGhpcy55QXhpcz1wLHRoaXMub3JpZW50YXRpb249dix0aGlzLnBsb3RJbmRleD1ifWdldERyYXdhYmxlRWxlbWVudCgpe2NvbnN0IHM9dGhpcy5iYXJEYXRhLmRhdGEubWFwKHY9Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUodlswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKHZbMV0pXSksdT0uMDUsZD1NYXRoLm1pbih0aGlzLnhBeGlzLmdldEF4aXNPdXRlclBhZGRpbmcoKSoyLHRoaXMueEF4aXMuZ2V0VGlja0Rpc3RhbmNlKCkpKigxLXUpLHA9ZC8yO3JldHVybiB0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiP1t7Z3JvdXBUZXh0czpbInBsb3QiLGBiYXItcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InJlY3QiLGRhdGE6cy5tYXAodj0+KHt4OnRoaXMuYm91bmRpbmdSZWN0LngseTp2WzBdLXAsaGVpZ2h0OmQsd2lkdGg6dlsxXS10aGlzLmJvdW5kaW5nUmVjdC54LGZpbGw6dGhpcy5iYXJEYXRhLmZpbGwsc3Ryb2tlV2lkdGg6MCxzdHJva2VGaWxsOnRoaXMuYmFyRGF0YS5maWxsfSkpfV06W3tncm91cFRleHRzOlsicGxvdCIsYGJhci1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sdHlwZToicmVjdCIsZGF0YTpzLm1hcCh2PT4oe3g6dlswXS1wLHk6dlsxXSx3aWR0aDpkLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC12WzFdLGZpbGw6dGhpcy5iYXJEYXRhLmZpbGwsc3Ryb2tlV2lkdGg6MCxzdHJva2VGaWxsOnRoaXMuYmFyRGF0YS5maWxsfSkpfV19fWNsYXNzIEtubntjb25zdHJ1Y3RvcihzLHUsZCl7dGhpcy5jaGFydENvbmZpZz1zLHRoaXMuY2hhcnREYXRhPXUsdGhpcy5jaGFydFRoZW1lQ29uZmlnPWQsdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19c2V0QXhlcyhzLHUpe3RoaXMueEF4aXM9cyx0aGlzLnlBeGlzPXV9c2V0Qm91bmRpbmdCb3hYWShzKXt0aGlzLmJvdW5kaW5nUmVjdC54PXMueCx0aGlzLmJvdW5kaW5nUmVjdC55PXMueX1jYWxjdWxhdGVTcGFjZShzKXtyZXR1cm4gdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9cy53aWR0aCx0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9cy5oZWlnaHQse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtpZighKHRoaXMueEF4aXMmJnRoaXMueUF4aXMpKXRocm93IEVycm9yKCJBeGVzIG11c3QgYmUgcGFzc2VkIHRvIHJlbmRlciBQbG90cyIpO2NvbnN0IHM9W107Zm9yKGNvbnN0W3UsZF1vZiB0aGlzLmNoYXJ0RGF0YS5wbG90cy5lbnRyaWVzKCkpc3dpdGNoKGQudHlwZSl7Y2FzZSJsaW5lIjp7Y29uc3QgcD1uZXcgVW5uKGQsdGhpcy54QXhpcyx0aGlzLnlBeGlzLHRoaXMuY2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbix1KTtzLnB1c2goLi4ucC5nZXREcmF3YWJsZUVsZW1lbnQoKSl9YnJlYWs7Y2FzZSJiYXIiOntjb25zdCBwPW5ldyBHbm4oZCx0aGlzLmJvdW5kaW5nUmVjdCx0aGlzLnhBeGlzLHRoaXMueUF4aXMsdGhpcy5jaGFydENvbmZpZy5jaGFydE9yaWVudGF0aW9uLHUpO3MucHVzaCguLi5wLmdldERyYXdhYmxlRWxlbWVudCgpKX1icmVha31yZXR1cm4gc319ZnVuY3Rpb24gV25uKGkscyx1KXtyZXR1cm4gbmV3IEtubihpLHMsdSl9Y2xhc3MgWW5ue2NvbnN0cnVjdG9yKHMsdSxkLHApe3RoaXMuY2hhcnRDb25maWc9cyx0aGlzLmNoYXJ0RGF0YT11LHRoaXMuY29tcG9uZW50U3RvcmU9e3RpdGxlOlZubihzLHUsZCxwKSxwbG90OldubihzLHUsZCkseEF4aXM6dkdlKHUueEF4aXMscy54QXhpcyx7dGl0bGVDb2xvcjpkLnhBeGlzVGl0bGVDb2xvcixsYWJlbENvbG9yOmQueEF4aXNMYWJlbENvbG9yLHRpY2tDb2xvcjpkLnhBeGlzVGlja0NvbG9yLGF4aXNMaW5lQ29sb3I6ZC54QXhpc0xpbmVDb2xvcn0scCkseUF4aXM6dkdlKHUueUF4aXMscy55QXhpcyx7dGl0bGVDb2xvcjpkLnlBeGlzVGl0bGVDb2xvcixsYWJlbENvbG9yOmQueUF4aXNMYWJlbENvbG9yLHRpY2tDb2xvcjpkLnlBeGlzVGlja0NvbG9yLGF4aXNMaW5lQ29sb3I6ZC55QXhpc0xpbmVDb2xvcn0scCl9fWNhbGN1bGF0ZVZlcnRpY2FsU3BhY2UoKXtsZXQgcz10aGlzLmNoYXJ0Q29uZmlnLndpZHRoLHU9dGhpcy5jaGFydENvbmZpZy5oZWlnaHQsZD0wLHA9MCx2PU1hdGguZmxvb3Iocyp0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLGI9TWF0aC5mbG9vcih1KnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCkseT10aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnYsaGVpZ2h0OmJ9KTtzLT15LndpZHRoLHUtPXkuaGVpZ2h0LHk9dGhpcy5jb21wb25lbnRTdG9yZS50aXRsZS5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6dGhpcy5jaGFydENvbmZpZy53aWR0aCxoZWlnaHQ6dX0pLHA9eS5oZWlnaHQsdS09eS5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oImJvdHRvbSIpLHk9dGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6cyxoZWlnaHQ6dX0pLHUtPXkuaGVpZ2h0LHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJsZWZ0IikseT10aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpzLGhlaWdodDp1fSksZD15LndpZHRoLHMtPXkud2lkdGgscz4wJiYodis9cyxzPTApLHU+MCYmKGIrPXUsdT0wKSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnYsaGVpZ2h0OmJ9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0Qm91bmRpbmdCb3hYWSh7eDpkLHk6cH0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0UmFuZ2UoW2QsZCt2XSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OmQseTpwK2J9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFtwLHArYl0pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDowLHk6cH0pLHRoaXMuY2hhcnREYXRhLnBsb3RzLnNvbWUoVD0+ZkdlKFQpKSYmdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0JhcigpfWNhbGN1bGF0ZUhvcml6b250YWxTcGFjZSgpe2xldCBzPXRoaXMuY2hhcnRDb25maWcud2lkdGgsdT10aGlzLmNoYXJ0Q29uZmlnLmhlaWdodCxkPTAscD0wLHY9MCxiPU1hdGguZmxvb3Iocyp0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLHk9TWF0aC5mbG9vcih1KnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCksVD10aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmIsaGVpZ2h0Onl9KTtzLT1ULndpZHRoLHUtPVQuaGVpZ2h0LFQ9dGhpcy5jb21wb25lbnRTdG9yZS50aXRsZS5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6dGhpcy5jaGFydENvbmZpZy53aWR0aCxoZWlnaHQ6dX0pLGQ9VC5oZWlnaHQsdS09VC5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oImxlZnQiKSxUPXRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnMsaGVpZ2h0OnV9KSxzLT1ULndpZHRoLHA9VC53aWR0aCx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEF4aXNQb3NpdGlvbigidG9wIiksVD10aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpzLGhlaWdodDp1fSksdS09VC5oZWlnaHQsdj1kK1QuaGVpZ2h0LHM+MCYmKGIrPXMscz0wKSx1PjAmJih5Kz11LHU9MCksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpiLGhlaWdodDp5fSksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LnNldEJvdW5kaW5nQm94WFkoe3g6cCx5OnZ9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFtwLHArYl0pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDpwLHk6ZH0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0UmFuZ2UoW3Ysdit5XSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OjAseTp2fSksdGhpcy5jaGFydERhdGEucGxvdHMuc29tZShfPT5mR2UoXykpJiZ0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnJlY2FsY3VsYXRlT3V0ZXJQYWRkaW5nVG9EcmF3QmFyKCl9Y2FsY3VsYXRlU3BhY2UoKXt0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0T3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/dGhpcy5jYWxjdWxhdGVIb3Jpem9udGFsU3BhY2UoKTp0aGlzLmNhbGN1bGF0ZVZlcnRpY2FsU3BhY2UoKX1nZXREcmF3YWJsZUVsZW1lbnQoKXt0aGlzLmNhbGN1bGF0ZVNwYWNlKCk7Y29uc3Qgcz1bXTt0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0QXhlcyh0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMpO2Zvcihjb25zdCB1IG9mIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRTdG9yZSkpcy5wdXNoKC4uLnUuZ2V0RHJhd2FibGVFbGVtZW50cygpKTtyZXR1cm4gc319Y2xhc3MgWG5ue3N0YXRpYyBidWlsZChzLHUsZCxwKXtyZXR1cm4gbmV3IFlubihzLHUsZCxwKS5nZXREcmF3YWJsZUVsZW1lbnQoKX19bGV0IHpSPTAsd0dlLHFSPXhHZSgpLEhSPXlHZSgpLGVsPWtHZSgpLGd2ZT1IUi5wbG90Q29sb3JQYWxldHRlLnNwbGl0KCIsIikubWFwKGk9PmkudHJpbSgpKSxnSj0hMSxwdmU9ITE7ZnVuY3Rpb24geUdlKCl7Y29uc3QgaT1mMmUoKSxzPVZoKCk7cmV0dXJuIEpGKGkueHlDaGFydCxzLnRoZW1lVmFyaWFibGVzLnh5Q2hhcnQpfWZ1bmN0aW9uIHhHZSgpe2NvbnN0IGk9VmgoKTtyZXR1cm4gSkYoc2gueHlDaGFydCxpLnh5Q2hhcnQpfWZ1bmN0aW9uIGtHZSgpe3JldHVybnt5QXhpczp7dHlwZToibGluZWFyIix0aXRsZToiIixtaW46MS8wLG1heDotMS8wfSx4QXhpczp7dHlwZToiYmFuZCIsdGl0bGU6IiIsY2F0ZWdvcmllczpbXX0sdGl0bGU6IiIscGxvdHM6W119fWZ1bmN0aW9uIGJ2ZShpKXtjb25zdCBzPVZoKCk7cmV0dXJuIFlmKGkudHJpbSgpLHMpfWZ1bmN0aW9uIFFubihpKXt3R2U9aX1mdW5jdGlvbiBKbm4oaSl7aT09PSJob3Jpem9udGFsIj9xUi5jaGFydE9yaWVudGF0aW9uPSJob3Jpem9udGFsIjpxUi5jaGFydE9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCJ9ZnVuY3Rpb24gWm5uKGkpe2VsLnhBeGlzLnRpdGxlPWJ2ZShpLnRleHQpfWZ1bmN0aW9uIEVHZShpLHMpe2VsLnhBeGlzPXt0eXBlOiJsaW5lYXIiLHRpdGxlOmVsLnhBeGlzLnRpdGxlLG1pbjppLG1heDpzfSxnSj0hMH1mdW5jdGlvbiBlcm4oaSl7ZWwueEF4aXM9e3R5cGU6ImJhbmQiLHRpdGxlOmVsLnhBeGlzLnRpdGxlLGNhdGVnb3JpZXM6aS5tYXAocz0+YnZlKHMudGV4dCkpfSxnSj0hMH1mdW5jdGlvbiB0cm4oaSl7ZWwueUF4aXMudGl0bGU9YnZlKGkudGV4dCl9ZnVuY3Rpb24gbnJuKGkscyl7ZWwueUF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6ZWwueUF4aXMudGl0bGUsbWluOmksbWF4OnN9LHB2ZT0hMH1mdW5jdGlvbiBycm4oaSl7Y29uc3Qgcz1NYXRoLm1pbiguLi5pKSx1PU1hdGgubWF4KC4uLmkpLGQ9JFIoZWwueUF4aXMpP2VsLnlBeGlzLm1pbjoxLzAscD0kUihlbC55QXhpcyk/ZWwueUF4aXMubWF4Oi0xLzA7ZWwueUF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6ZWwueUF4aXMudGl0bGUsbWluOk1hdGgubWluKGQscyksbWF4Ok1hdGgubWF4KHAsdSl9fWZ1bmN0aW9uIFRHZShpKXtsZXQgcz1bXTtpZihpLmxlbmd0aD09PTApcmV0dXJuIHM7aWYoIWdKKXtjb25zdCB1PSRSKGVsLnhBeGlzKT9lbC54QXhpcy5taW46MS8wLGQ9JFIoZWwueEF4aXMpP2VsLnhBeGlzLm1heDotMS8wO0VHZShNYXRoLm1pbih1LDEpLE1hdGgubWF4KGQsaS5sZW5ndGgpKX1pZihwdmV8fHJybihpKSxkR2UoZWwueEF4aXMpJiYocz1lbC54QXhpcy5jYXRlZ29yaWVzLm1hcCgodSxkKT0+W3UsaVtkXV0pKSwkUihlbC54QXhpcykpe2NvbnN0IHU9ZWwueEF4aXMubWluLGQ9ZWwueEF4aXMubWF4LHA9KGQtdSsxKS9pLmxlbmd0aCx2PVtdO2ZvcihsZXQgYj11O2I8PWQ7Yis9cCl2LnB1c2goYCR7Yn1gKTtzPXYubWFwKChiLHkpPT5bYixpW3ldXSl9cmV0dXJuIHN9ZnVuY3Rpb24gQ0dlKGkpe3JldHVybiBndmVbaT09PTA/MDppJWd2ZS5sZW5ndGhdfWZ1bmN0aW9uIGlybihpLHMpe2NvbnN0IHU9VEdlKHMpO2VsLnBsb3RzLnB1c2goe3R5cGU6ImxpbmUiLHN0cm9rZUZpbGw6Q0dlKHpSKSxzdHJva2VXaWR0aDoyLGRhdGE6dX0pLHpSKyt9ZnVuY3Rpb24gc3JuKGkscyl7Y29uc3QgdT1UR2Uocyk7ZWwucGxvdHMucHVzaCh7dHlwZToiYmFyIixmaWxsOkNHZSh6UiksZGF0YTp1fSkselIrK31mdW5jdGlvbiBhcm4oKXtpZihlbC5wbG90cy5sZW5ndGg9PT0wKXRocm93IEVycm9yKCJObyBQbG90IHRvIHJlbmRlciwgcGxlYXNlIHByb3ZpZGUgYSBwbG90IHdpdGggc29tZSBkYXRhIik7cmV0dXJuIGVsLnRpdGxlPUFwKCksWG5uLmJ1aWxkKHFSLGVsLEhSLHdHZSl9ZnVuY3Rpb24gb3JuKCl7cmV0dXJuIEhSfWZ1bmN0aW9uIGNybigpe3JldHVybiBxUn1jb25zdCB1cm49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjokbm4sZGI6e2dldERyYXdhYmxlRWxlbTphcm4sY2xlYXI6ZnVuY3Rpb24oKXtQZygpLHpSPTAscVI9eEdlKCksZWw9a0dlKCksSFI9eUdlKCksZ3ZlPUhSLnBsb3RDb2xvclBhbGV0dGUuc3BsaXQoIiwiKS5tYXAoaT0+aS50cmltKCkpLGdKPSExLHB2ZT0hMX0sc2V0QWNjVGl0bGU6QmcsZ2V0QWNjVGl0bGU6Q3Asc2V0RGlhZ3JhbVRpdGxlOmNtLGdldERpYWdyYW1UaXRsZTpBcCxnZXRBY2NEZXNjcmlwdGlvbjpfcCxzZXRBY2NEZXNjcmlwdGlvbjpTcCxzZXRPcmllbnRhdGlvbjpKbm4sc2V0WEF4aXNUaXRsZTpabm4sc2V0WEF4aXNSYW5nZURhdGE6RUdlLHNldFhBeGlzQmFuZDplcm4sc2V0WUF4aXNUaXRsZTp0cm4sc2V0WUF4aXNSYW5nZURhdGE6bnJuLHNldExpbmVEYXRhOmlybixzZXRCYXJEYXRhOnNybixzZXRUbXBTVkdHOlFubixnZXRDaGFydFRoZW1lQ29uZmlnOm9ybixnZXRDaGFydENvbmZpZzpjcm59LHJlbmRlcmVyOntkcmF3OihpLHMsdSxkKT0+e2NvbnN0IHA9ZC5kYix2PXAuZ2V0Q2hhcnRUaGVtZUNvbmZpZygpLGI9cC5nZXRDaGFydENvbmZpZygpO2Z1bmN0aW9uIHkoZWUpe3JldHVybiBlZT09PSJ0b3AiPyJ0ZXh0LWJlZm9yZS1lZGdlIjoibWlkZGxlIn1mdW5jdGlvbiBUKGVlKXtyZXR1cm4gZWU9PT0ibGVmdCI/InN0YXJ0IjplZT09PSJyaWdodCI/ImVuZCI6Im1pZGRsZSJ9ZnVuY3Rpb24gXyhlZSl7cmV0dXJuYHRyYW5zbGF0ZSgke2VlLnh9LCAke2VlLnl9KSByb3RhdGUoJHtlZS5yb3RhdGlvbnx8MH0pYH1YZS5kZWJ1ZyhgUmVuZGVyaW5nIHh5Y2hhcnQgY2hhcnQKYCtpKTtjb25zdCBBPXJSKHMpLFA9QS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm1haW4iKSxSPVAuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLGIud2lkdGgpLmF0dHIoImhlaWdodCIsYi5oZWlnaHQpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpO05nKEEsYi5oZWlnaHQsYi53aWR0aCwhMCksQS5hdHRyKCJ2aWV3Qm94IixgMCAwICR7Yi53aWR0aH0gJHtiLmhlaWdodH1gKSxSLmF0dHIoImZpbGwiLHYuYmFja2dyb3VuZENvbG9yKSxwLnNldFRtcFNWR0coQS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm1lcm1haWQtdG1wLWdyb3VwIikpO2NvbnN0IEY9cC5nZXREcmF3YWJsZUVsZW0oKSxqPXt9O2Z1bmN0aW9uIEsoZWUpe2xldCBpZT1QLG9lPSIiO2Zvcihjb25zdFtwZV1vZiBlZS5lbnRyaWVzKCkpe2xldCBiZT1QO3BlPjAmJmpbb2VdJiYoYmU9altvZV0pLG9lKz1lZVtwZV0saWU9altvZV0saWV8fChpZT1qW29lXT1iZS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZWVbcGVdKSl9cmV0dXJuIGllfWZvcihjb25zdCBlZSBvZiBGKXtpZihlZS5kYXRhLmxlbmd0aD09PTApY29udGludWU7Y29uc3QgaWU9SyhlZS5ncm91cFRleHRzKTtzd2l0Y2goZWUudHlwZSl7Y2FzZSJyZWN0IjppZS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKGVlLmRhdGEpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsb2U9Pm9lLngpLmF0dHIoInkiLG9lPT5vZS55KS5hdHRyKCJ3aWR0aCIsb2U9Pm9lLndpZHRoKS5hdHRyKCJoZWlnaHQiLG9lPT5vZS5oZWlnaHQpLmF0dHIoImZpbGwiLG9lPT5vZS5maWxsKS5hdHRyKCJzdHJva2UiLG9lPT5vZS5zdHJva2VGaWxsKS5hdHRyKCJzdHJva2Utd2lkdGgiLG9lPT5vZS5zdHJva2VXaWR0aCk7YnJlYWs7Y2FzZSJ0ZXh0IjppZS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKGVlLmRhdGEpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZmlsbCIsb2U9Pm9lLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsb2U9Pm9lLmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsb2U9Pnkob2UudmVydGljYWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsb2U9PlQob2UuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsb2U9Pl8ob2UpKS50ZXh0KG9lPT5vZS50ZXh0KTticmVhaztjYXNlInBhdGgiOmllLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoZWUuZGF0YSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixvZT0+b2UucGF0aCkuYXR0cigiZmlsbCIsb2U9Pm9lLmZpbGw/b2UuZmlsbDoibm9uZSIpLmF0dHIoInN0cm9rZSIsb2U9Pm9lLnN0cm9rZUZpbGwpLmF0dHIoInN0cm9rZS13aWR0aCIsb2U9Pm9lLnN0cm9rZVdpZHRoKTticmVha319fX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBtdmU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihfdCxFdCxHdCxsbil7Zm9yKEd0PUd0fHx7fSxsbj1fdC5sZW5ndGg7bG4tLTtHdFtfdFtsbl1dPUV0KTtyZXR1cm4gR3R9LHM9WzEsM10sdT1bMSw0XSxkPVsxLDVdLHA9WzEsNl0sdj1bNSw2LDgsOSwxMSwxMywzMSwzMiwzMywzNCwzNSwzNiw0NCw2Miw2M10sYj1bMSwxOF0seT1bMiw3XSxUPVsxLDIyXSxfPVsxLDIzXSxBPVsxLDI0XSxQPVsxLDI1XSxSPVsxLDI2XSxGPVsxLDI3XSxqPVsxLDIwXSxLPVsxLDI4XSxlZT1bMSwyOV0saWU9WzYyLDYzXSxvZT1bNSw4LDksMTEsMTMsMzEsMzIsMzMsMzQsMzUsMzYsNDQsNTEsNTMsNjIsNjNdLHBlPVsxLDQ3XSxiZT1bMSw0OF0sYWU9WzEsNDldLG5lPVsxLDUwXSxzZT1bMSw1MV0sZGU9WzEsNTJdLFg9WzEsNTNdLGdlPVs1Myw1NF0sVz1bMSw2NF0seGU9WzEsNjBdLFU9WzEsNjFdLEZlPVsxLDYyXSxQZT1bMSw2M10samU9WzEsNjVdLEllPVsxLDY5XSxTZT1bMSw3MF0sQ2U9WzEsNjddLGtlPVsxLDY4XSxLZT1bNSw4LDksMTEsMTMsMzEsMzIsMzMsMzQsMzUsMzYsNDQsNjIsNjNdLEZ0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxkaXJlY3RpdmU6NCxORVdMSU5FOjUsUkQ6NixkaWFncmFtOjcsRU9GOjgsYWNjX3RpdGxlOjksYWNjX3RpdGxlX3ZhbHVlOjEwLGFjY19kZXNjcjoxMSxhY2NfZGVzY3JfdmFsdWU6MTIsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxMyxyZXF1aXJlbWVudERlZjoxNCxlbGVtZW50RGVmOjE1LHJlbGF0aW9uc2hpcERlZjoxNixyZXF1aXJlbWVudFR5cGU6MTcscmVxdWlyZW1lbnROYW1lOjE4LFNUUlVDVF9TVEFSVDoxOSxyZXF1aXJlbWVudEJvZHk6MjAsSUQ6MjEsQ09MT05TRVA6MjIsaWQ6MjMsVEVYVDoyNCx0ZXh0OjI1LFJJU0s6MjYscmlza0xldmVsOjI3LFZFUklGWU1USEQ6MjgsdmVyaWZ5VHlwZToyOSxTVFJVQ1RfU1RPUDozMCxSRVFVSVJFTUVOVDozMSxGVU5DVElPTkFMX1JFUVVJUkVNRU5UOjMyLElOVEVSRkFDRV9SRVFVSVJFTUVOVDozMyxQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDozNCxQSFlTSUNBTF9SRVFVSVJFTUVOVDozNSxERVNJR05fQ09OU1RSQUlOVDozNixMT1dfUklTSzozNyxNRURfUklTSzozOCxISUdIX1JJU0s6MzksVkVSSUZZX0FOQUxZU0lTOjQwLFZFUklGWV9ERU1PTlNUUkFUSU9OOjQxLFZFUklGWV9JTlNQRUNUSU9OOjQyLFZFUklGWV9URVNUOjQzLEVMRU1FTlQ6NDQsZWxlbWVudE5hbWU6NDUsZWxlbWVudEJvZHk6NDYsVFlQRTo0Nyx0eXBlOjQ4LERPQ1JFRjo0OSxyZWY6NTAsRU5EX0FSUk9XX0w6NTEscmVsYXRpb25zaGlwOjUyLExJTkU6NTMsRU5EX0FSUk9XX1I6NTQsQ09OVEFJTlM6NTUsQ09QSUVTOjU2LERFUklWRVM6NTcsU0FUSVNGSUVTOjU4LFZFUklGSUVTOjU5LFJFRklORVM6NjAsVFJBQ0VTOjYxLHVucVN0cmluZzo2MixxU3RyaW5nOjYzLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJORVdMSU5FIiw2OiJSRCIsODoiRU9GIiw5OiJhY2NfdGl0bGUiLDEwOiJhY2NfdGl0bGVfdmFsdWUiLDExOiJhY2NfZGVzY3IiLDEyOiJhY2NfZGVzY3JfdmFsdWUiLDEzOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxOToiU1RSVUNUX1NUQVJUIiwyMToiSUQiLDIyOiJDT0xPTlNFUCIsMjQ6IlRFWFQiLDI2OiJSSVNLIiwyODoiVkVSSUZZTVRIRCIsMzA6IlNUUlVDVF9TVE9QIiwzMToiUkVRVUlSRU1FTlQiLDMyOiJGVU5DVElPTkFMX1JFUVVJUkVNRU5UIiwzMzoiSU5URVJGQUNFX1JFUVVJUkVNRU5UIiwzNDoiUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQiLDM1OiJQSFlTSUNBTF9SRVFVSVJFTUVOVCIsMzY6IkRFU0lHTl9DT05TVFJBSU5UIiwzNzoiTE9XX1JJU0siLDM4OiJNRURfUklTSyIsMzk6IkhJR0hfUklTSyIsNDA6IlZFUklGWV9BTkFMWVNJUyIsNDE6IlZFUklGWV9ERU1PTlNUUkFUSU9OIiw0MjoiVkVSSUZZX0lOU1BFQ1RJT04iLDQzOiJWRVJJRllfVEVTVCIsNDQ6IkVMRU1FTlQiLDQ3OiJUWVBFIiw0OToiRE9DUkVGIiw1MToiRU5EX0FSUk9XX0wiLDUzOiJMSU5FIiw1NDoiRU5EX0FSUk9XX1IiLDU1OiJDT05UQUlOUyIsNTY6IkNPUElFUyIsNTc6IkRFUklWRVMiLDU4OiJTQVRJU0ZJRVMiLDU5OiJWRVJJRklFUyIsNjA6IlJFRklORVMiLDYxOiJUUkFDRVMiLDYyOiJ1bnFTdHJpbmciLDYzOiJxU3RyaW5nIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFszLDRdLFs0LDJdLFs0LDJdLFs0LDFdLFs3LDBdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFsxNCw1XSxbMjAsNV0sWzIwLDVdLFsyMCw1XSxbMjAsNV0sWzIwLDJdLFsyMCwxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMjcsMV0sWzI3LDFdLFsyNywxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzE1LDVdLFs0Niw1XSxbNDYsNV0sWzQ2LDJdLFs0NiwxXSxbMTYsNV0sWzE2LDVdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbMTgsMV0sWzE4LDFdLFsyMywxXSxbMjMsMV0sWzI1LDFdLFsyNSwxXSxbNDUsMV0sWzQ1LDFdLFs0OCwxXSxbNDgsMV0sWzUwLDFdLFs1MCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihFdCxHdCxsbix4dCxQdCxRZSxEdCl7dmFyIGt0PVFlLmxlbmd0aC0xO3N3aXRjaChQdCl7Y2FzZSA0OnRoaXMuJD1RZVtrdF0udHJpbSgpLHh0LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSA1OmNhc2UgNjp0aGlzLiQ9UWVba3RdLnRyaW0oKSx4dC5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMzp4dC5hZGRSZXF1aXJlbWVudChRZVtrdC0zXSxRZVtrdC00XSk7YnJlYWs7Y2FzZSAxNDp4dC5zZXROZXdSZXFJZChRZVtrdC0yXSk7YnJlYWs7Y2FzZSAxNTp4dC5zZXROZXdSZXFUZXh0KFFlW2t0LTJdKTticmVhaztjYXNlIDE2Onh0LnNldE5ld1JlcVJpc2soUWVba3QtMl0pO2JyZWFrO2Nhc2UgMTc6eHQuc2V0TmV3UmVxVmVyaWZ5TWV0aG9kKFFlW2t0LTJdKTticmVhaztjYXNlIDIwOnRoaXMuJD14dC5SZXF1aXJlbWVudFR5cGUuUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9eHQuUmVxdWlyZW1lbnRUeXBlLkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9eHQuUmVxdWlyZW1lbnRUeXBlLklOVEVSRkFDRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDIzOnRoaXMuJD14dC5SZXF1aXJlbWVudFR5cGUuUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9eHQuUmVxdWlyZW1lbnRUeXBlLlBIWVNJQ0FMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXh0LlJlcXVpcmVtZW50VHlwZS5ERVNJR05fQ09OU1RSQUlOVDticmVhaztjYXNlIDI2OnRoaXMuJD14dC5SaXNrTGV2ZWwuTE9XX1JJU0s7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9eHQuUmlza0xldmVsLk1FRF9SSVNLO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPXh0LlJpc2tMZXZlbC5ISUdIX1JJU0s7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9eHQuVmVyaWZ5VHlwZS5WRVJJRllfQU5BTFlTSVM7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9eHQuVmVyaWZ5VHlwZS5WRVJJRllfREVNT05TVFJBVElPTjticmVhaztjYXNlIDMxOnRoaXMuJD14dC5WZXJpZnlUeXBlLlZFUklGWV9JTlNQRUNUSU9OO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPXh0LlZlcmlmeVR5cGUuVkVSSUZZX1RFU1Q7YnJlYWs7Y2FzZSAzMzp4dC5hZGRFbGVtZW50KFFlW2t0LTNdKTticmVhaztjYXNlIDM0Onh0LnNldE5ld0VsZW1lbnRUeXBlKFFlW2t0LTJdKTticmVhaztjYXNlIDM1Onh0LnNldE5ld0VsZW1lbnREb2NSZWYoUWVba3QtMl0pO2JyZWFrO2Nhc2UgMzg6eHQuYWRkUmVsYXRpb25zaGlwKFFlW2t0LTJdLFFlW2t0XSxRZVtrdC00XSk7YnJlYWs7Y2FzZSAzOTp4dC5hZGRSZWxhdGlvbnNoaXAoUWVba3QtMl0sUWVba3QtNF0sUWVba3RdKTticmVhaztjYXNlIDQwOnRoaXMuJD14dC5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TO2JyZWFrO2Nhc2UgNDE6dGhpcy4kPXh0LlJlbGF0aW9uc2hpcHMuQ09QSUVTO2JyZWFrO2Nhc2UgNDI6dGhpcy4kPXh0LlJlbGF0aW9uc2hpcHMuREVSSVZFUzticmVhaztjYXNlIDQzOnRoaXMuJD14dC5SZWxhdGlvbnNoaXBzLlNBVElTRklFUzticmVhaztjYXNlIDQ0OnRoaXMuJD14dC5SZWxhdGlvbnNoaXBzLlZFUklGSUVTO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXh0LlJlbGF0aW9uc2hpcHMuUkVGSU5FUzticmVhaztjYXNlIDQ2OnRoaXMuJD14dC5SZWxhdGlvbnNoaXBzLlRSQUNFUzticmVha319LHRhYmxlOlt7MzoxLDQ6Miw2OnMsOTp1LDExOmQsMTM6cH0sezE6WzNdfSx7Mzo4LDQ6Miw1OlsxLDddLDY6cyw5OnUsMTE6ZCwxMzpwfSx7NTpbMSw5XX0sezEwOlsxLDEwXX0sezEyOlsxLDExXX0saSh2LFsyLDZdKSx7MzoxMiw0OjIsNjpzLDk6dSwxMTpkLDEzOnB9LHsxOlsyLDJdfSx7NDoxNyw1OmIsNzoxMyw4OnksOTp1LDExOmQsMTM6cCwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpULDMyOl8sMzM6QSwzNDpQLDM1OlIsMzY6Riw0NDpqLDYyOkssNjM6ZWV9LGkodixbMiw0XSksaSh2LFsyLDVdKSx7MTpbMiwxXX0sezg6WzEsMzBdfSx7NDoxNyw1OmIsNzozMSw4OnksOTp1LDExOmQsMTM6cCwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpULDMyOl8sMzM6QSwzNDpQLDM1OlIsMzY6Riw0NDpqLDYyOkssNjM6ZWV9LHs0OjE3LDU6Yiw3OjMyLDg6eSw5OnUsMTE6ZCwxMzpwLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOlQsMzI6XywzMzpBLDM0OlAsMzU6UiwzNjpGLDQ0OmosNjI6Syw2MzplZX0sezQ6MTcsNTpiLDc6MzMsODp5LDk6dSwxMTpkLDEzOnAsMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6VCwzMjpfLDMzOkEsMzQ6UCwzNTpSLDM2OkYsNDQ6aiw2MjpLLDYzOmVlfSx7NDoxNyw1OmIsNzozNCw4OnksOTp1LDExOmQsMTM6cCwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpULDMyOl8sMzM6QSwzNDpQLDM1OlIsMzY6Riw0NDpqLDYyOkssNjM6ZWV9LHs0OjE3LDU6Yiw3OjM1LDg6eSw5OnUsMTE6ZCwxMzpwLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOlQsMzI6XywzMzpBLDM0OlAsMzU6UiwzNjpGLDQ0OmosNjI6Syw2MzplZX0sezE4OjM2LDYyOlsxLDM3XSw2MzpbMSwzOF19LHs0NTozOSw2MjpbMSw0MF0sNjM6WzEsNDFdfSx7NTE6WzEsNDJdLDUzOlsxLDQzXX0saShpZSxbMiwyMF0pLGkoaWUsWzIsMjFdKSxpKGllLFsyLDIyXSksaShpZSxbMiwyM10pLGkoaWUsWzIsMjRdKSxpKGllLFsyLDI1XSksaShvZSxbMiw0OV0pLGkob2UsWzIsNTBdKSx7MTpbMiwzXX0sezg6WzIsOF19LHs4OlsyLDldfSx7ODpbMiwxMF19LHs4OlsyLDExXX0sezg6WzIsMTJdfSx7MTk6WzEsNDRdfSx7MTk6WzIsNDddfSx7MTk6WzIsNDhdfSx7MTk6WzEsNDVdfSx7MTk6WzIsNTNdfSx7MTk6WzIsNTRdfSx7NTI6NDYsNTU6cGUsNTY6YmUsNTc6YWUsNTg6bmUsNTk6c2UsNjA6ZGUsNjE6WH0sezUyOjU0LDU1OnBlLDU2OmJlLDU3OmFlLDU4Om5lLDU5OnNlLDYwOmRlLDYxOlh9LHs1OlsxLDU1XX0sezU6WzEsNTZdfSx7NTM6WzEsNTddfSxpKGdlLFsyLDQwXSksaShnZSxbMiw0MV0pLGkoZ2UsWzIsNDJdKSxpKGdlLFsyLDQzXSksaShnZSxbMiw0NF0pLGkoZ2UsWzIsNDVdKSxpKGdlLFsyLDQ2XSksezU0OlsxLDU4XX0sezU6VywyMDo1OSwyMTp4ZSwyNDpVLDI2OkZlLDI4OlBlLDMwOmplfSx7NTpJZSwzMDpTZSw0Njo2Niw0NzpDZSw0OTprZX0sezIzOjcxLDYyOkssNjM6ZWV9LHsyMzo3Miw2MjpLLDYzOmVlfSxpKEtlLFsyLDEzXSksezIyOlsxLDczXX0sezIyOlsxLDc0XX0sezIyOlsxLDc1XX0sezIyOlsxLDc2XX0sezU6VywyMDo3NywyMTp4ZSwyNDpVLDI2OkZlLDI4OlBlLDMwOmplfSxpKEtlLFsyLDE5XSksaShLZSxbMiwzM10pLHsyMjpbMSw3OF19LHsyMjpbMSw3OV19LHs1OkllLDMwOlNlLDQ2OjgwLDQ3OkNlLDQ5OmtlfSxpKEtlLFsyLDM3XSksaShLZSxbMiwzOF0pLGkoS2UsWzIsMzldKSx7MjM6ODEsNjI6Syw2MzplZX0sezI1OjgyLDYyOlsxLDgzXSw2MzpbMSw4NF19LHsyNzo4NSwzNzpbMSw4Nl0sMzg6WzEsODddLDM5OlsxLDg4XX0sezI5Ojg5LDQwOlsxLDkwXSw0MTpbMSw5MV0sNDI6WzEsOTJdLDQzOlsxLDkzXX0saShLZSxbMiwxOF0pLHs0ODo5NCw2MjpbMSw5NV0sNjM6WzEsOTZdfSx7NTA6OTcsNjI6WzEsOThdLDYzOlsxLDk5XX0saShLZSxbMiwzNl0pLHs1OlsxLDEwMF19LHs1OlsxLDEwMV19LHs1OlsyLDUxXX0sezU6WzIsNTJdfSx7NTpbMSwxMDJdfSx7NTpbMiwyNl19LHs1OlsyLDI3XX0sezU6WzIsMjhdfSx7NTpbMSwxMDNdfSx7NTpbMiwyOV19LHs1OlsyLDMwXX0sezU6WzIsMzFdfSx7NTpbMiwzMl19LHs1OlsxLDEwNF19LHs1OlsyLDU1XX0sezU6WzIsNTZdfSx7NTpbMSwxMDVdfSx7NTpbMiw1N119LHs1OlsyLDU4XX0sezU6VywyMDoxMDYsMjE6eGUsMjQ6VSwyNjpGZSwyODpQZSwzMDpqZX0sezU6VywyMDoxMDcsMjE6eGUsMjQ6VSwyNjpGZSwyODpQZSwzMDpqZX0sezU6VywyMDoxMDgsMjE6eGUsMjQ6VSwyNjpGZSwyODpQZSwzMDpqZX0sezU6VywyMDoxMDksMjE6eGUsMjQ6VSwyNjpGZSwyODpQZSwzMDpqZX0sezU6SWUsMzA6U2UsNDY6MTEwLDQ3OkNlLDQ5OmtlfSx7NTpJZSwzMDpTZSw0NjoxMTEsNDc6Q2UsNDk6a2V9LGkoS2UsWzIsMTRdKSxpKEtlLFsyLDE1XSksaShLZSxbMiwxNl0pLGkoS2UsWzIsMTddKSxpKEtlLFsyLDM0XSksaShLZSxbMiwzNV0pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwyXSwxMjpbMiwxXSwzMDpbMiwzXSwzMTpbMiw4XSwzMjpbMiw5XSwzMzpbMiwxMF0sMzQ6WzIsMTFdLDM1OlsyLDEyXSwzNzpbMiw0N10sMzg6WzIsNDhdLDQwOlsyLDUzXSw0MTpbMiw1NF0sODM6WzIsNTFdLDg0OlsyLDUyXSw4NjpbMiwyNl0sODc6WzIsMjddLDg4OlsyLDI4XSw5MDpbMiwyOV0sOTE6WzIsMzBdLDkyOlsyLDMxXSw5MzpbMiwzMl0sOTU6WzIsNTVdLDk2OlsyLDU2XSw5ODpbMiw1N10sOTk6WzIsNThdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKEV0LEd0KXtpZihHdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEV0KTtlbHNle3ZhciBsbj1uZXcgRXJyb3IoRXQpO3Rocm93IGxuLmhhc2g9R3QsbG59fSxwYXJzZTpmdW5jdGlvbihFdCl7dmFyIEd0PXRoaXMsbG49WzBdLHh0PVtdLFB0PVtudWxsXSxRZT1bXSxEdD10aGlzLnRhYmxlLGt0PSIiLE9uPTAsaHQ9MCx6cj0yLHl0PTEsamk9UWUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkseGk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxNYT17eXk6e319O2Zvcih2YXIgenMgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx6cykmJihNYS55eVt6c109dGhpcy55eVt6c10pO3hpLnNldElucHV0KEV0LE1hLnl5KSxNYS55eS5sZXhlcj14aSxNYS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgeGkueXlsbG9jPiJ1IiYmKHhpLnl5bGxvYz17fSk7dmFyIGFvPXhpLnl5bGxvYztRZS5wdXNoKGFvKTt2YXIgVHI9eGkub3B0aW9ucyYmeGkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIE1hLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPU1hLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEZuKCl7dmFyIFBhO3JldHVybiBQYT14dC5wb3AoKXx8eGkubGV4KCl8fHl0LHR5cGVvZiBQYSE9Im51bWJlciImJihQYSBpbnN0YW5jZW9mIEFycmF5JiYoeHQ9UGEsUGE9eHQucG9wKCkpLFBhPUd0LnN5bWJvbHNfW1BhXXx8UGEpLFBhfWZvcih2YXIgcW4sVW4sQXQsd3Qsb249e30sZm4sQW4sb28sam87Oyl7aWYoVW49bG5bbG4ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbVW5dP0F0PXRoaXMuZGVmYXVsdEFjdGlvbnNbVW5dOigocW49PT1udWxsfHx0eXBlb2YgcW4+InUiKSYmKHFuPUZuKCkpLEF0PUR0W1VuXSYmRHRbVW5dW3FuXSksdHlwZW9mIEF0PiJ1Inx8IUF0Lmxlbmd0aHx8IUF0WzBdKXt2YXIgJG89IiI7am89W107Zm9yKGZuIGluIER0W1VuXSl0aGlzLnRlcm1pbmFsc19bZm5dJiZmbj56ciYmam8ucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2ZuXSsiJyIpO3hpLnNob3dQb3NpdGlvbj8kbz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhPbisxKStgOgpgK3hpLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGAram8uam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1txbl18fHFuKSsiJyI6JG89IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoT24rMSkrIjogVW5leHBlY3RlZCAiKyhxbj09eXQ/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bcW5dfHxxbikrIiciKSx0aGlzLnBhcnNlRXJyb3IoJG8se3RleHQ6eGkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3FuXXx8cW4sbGluZTp4aS55eWxpbmVubyxsb2M6YW8sZXhwZWN0ZWQ6am99KX1pZihBdFswXWluc3RhbmNlb2YgQXJyYXkmJkF0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrVW4rIiwgdG9rZW46ICIrcW4pO3N3aXRjaChBdFswXSl7Y2FzZSAxOmxuLnB1c2gocW4pLFB0LnB1c2goeGkueXl0ZXh0KSxRZS5wdXNoKHhpLnl5bGxvYyksbG4ucHVzaChBdFsxXSkscW49bnVsbCxodD14aS55eWxlbmcsa3Q9eGkueXl0ZXh0LE9uPXhpLnl5bGluZW5vLGFvPXhpLnl5bGxvYzticmVhaztjYXNlIDI6aWYoQW49dGhpcy5wcm9kdWN0aW9uc19bQXRbMV1dWzFdLG9uLiQ9UHRbUHQubGVuZ3RoLUFuXSxvbi5fJD17Zmlyc3RfbGluZTpRZVtRZS5sZW5ndGgtKEFufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6UWVbUWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46UWVbUWUubGVuZ3RoLShBbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpRZVtRZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFRyJiYob24uXyQucmFuZ2U9W1FlW1FlLmxlbmd0aC0oQW58fDEpXS5yYW5nZVswXSxRZVtRZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx3dD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkob24sW2t0LGh0LE9uLE1hLnl5LEF0WzFdLFB0LFFlXS5jb25jYXQoamkpKSx0eXBlb2Ygd3Q8InUiKXJldHVybiB3dDtBbiYmKGxuPWxuLnNsaWNlKDAsLTEqQW4qMiksUHQ9UHQuc2xpY2UoMCwtMSpBbiksUWU9UWUuc2xpY2UoMCwtMSpBbikpLGxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQXRbMV1dWzBdKSxQdC5wdXNoKG9uLiQpLFFlLnB1c2gob24uXyQpLG9vPUR0W2xuW2xuLmxlbmd0aC0yXV1bbG5bbG4ubGVuZ3RoLTFdXSxsbi5wdXNoKG9vKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTmU9ZnVuY3Rpb24oKXt2YXIgX3Q9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oR3QsbG4pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoR3QsbG4pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEd0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oRXQsR3Qpe3JldHVybiB0aGlzLnl5PUd0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1FdCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRXQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUV0LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1FdCx0aGlzLm1hdGNoZWQrPUV0O3ZhciBHdD1FdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEd0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxFdH0sdW5wdXQ6ZnVuY3Rpb24oRXQpe3ZhciBHdD1FdC5sZW5ndGgsbG49RXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1FdCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtR3QpLHRoaXMub2Zmc2V0LT1HdDt2YXIgeHQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1sbi5sZW5ndGgtMSk7dmFyIFB0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpsbj8obG4ubGVuZ3RoPT09eHQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt4dFt4dC5sZW5ndGgtbG4ubGVuZ3RoXS5sZW5ndGgtbG5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1HdH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtQdFswXSxQdFswXSt0aGlzLnl5bGVuZy1HdF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKEV0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoRXQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIEV0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oRXQubGVuZ3RoPjIwPyIuLi4iOiIiKStFdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBFdD10aGlzLm1hdGNoO3JldHVybiBFdC5sZW5ndGg8MjAmJihFdCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtRXQubGVuZ3RoKSksKEV0LnN1YnN0cigwLDIwKSsoRXQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBFdD10aGlzLnBhc3RJbnB1dCgpLEd0PW5ldyBBcnJheShFdC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBFdCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArR3QrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKEV0LEd0KXt2YXIgbG4seHQsUHQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKFB0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFB0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHh0PUV0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx4dCYmKHRoaXMueXlsaW5lbm8rPXh0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnh0P3h0W3h0Lmxlbmd0aC0xXS5sZW5ndGgteHRbeHQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rRXRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9RXRbMF0sdGhpcy5tYXRjaCs9RXRbMF0sdGhpcy5tYXRjaGVzPUV0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEV0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1FdFswXSxsbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxHdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxsbilyZXR1cm4gbG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFFlIGluIFB0KXRoaXNbUWVdPVB0W1FlXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBFdCxHdCxsbix4dDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBQdD10aGlzLl9jdXJyZW50UnVsZXMoKSxRZT0wO1FlPFB0Lmxlbmd0aDtRZSsrKWlmKGxuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbUHRbUWVdXSksbG4mJighR3R8fGxuWzBdLmxlbmd0aD5HdFswXS5sZW5ndGgpKXtpZihHdD1sbix4dD1RZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihFdD10aGlzLnRlc3RfbWF0Y2gobG4sUHRbUWVdKSxFdCE9PSExKXJldHVybiBFdDtpZih0aGlzLl9iYWNrdHJhY2spe0d0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEd0PyhFdD10aGlzLnRlc3RfbWF0Y2goR3QsUHRbeHRdKSxFdCE9PSExP0V0OiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgR3Q9dGhpcy5uZXh0KCk7cmV0dXJuIEd0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihHdCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEd0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgR3Q9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gR3Q+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihHdCl7cmV0dXJuIEd0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoR3R8fDApLEd0Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbR3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEd0KXt0aGlzLmJlZ2luKEd0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihHdCxsbix4dCxQdCl7c3dpdGNoKHh0KXtjYXNlIDA6cmV0dXJuInRpdGxlIjtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDk7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAzOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxMTtjYXNlIDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDU6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIDU7Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6YnJlYWs7Y2FzZSAxMTpicmVhaztjYXNlIDEyOnJldHVybiA4O2Nhc2UgMTM6cmV0dXJuIDY7Y2FzZSAxNDpyZXR1cm4gMTk7Y2FzZSAxNTpyZXR1cm4gMzA7Y2FzZSAxNjpyZXR1cm4gMjI7Y2FzZSAxNzpyZXR1cm4gMjE7Y2FzZSAxODpyZXR1cm4gMjQ7Y2FzZSAxOTpyZXR1cm4gMjY7Y2FzZSAyMDpyZXR1cm4gMjg7Y2FzZSAyMTpyZXR1cm4gMzE7Y2FzZSAyMjpyZXR1cm4gMzI7Y2FzZSAyMzpyZXR1cm4gMzM7Y2FzZSAyNDpyZXR1cm4gMzQ7Y2FzZSAyNTpyZXR1cm4gMzU7Y2FzZSAyNjpyZXR1cm4gMzY7Y2FzZSAyNzpyZXR1cm4gMzc7Y2FzZSAyODpyZXR1cm4gMzg7Y2FzZSAyOTpyZXR1cm4gMzk7Y2FzZSAzMDpyZXR1cm4gNDA7Y2FzZSAzMTpyZXR1cm4gNDE7Y2FzZSAzMjpyZXR1cm4gNDI7Y2FzZSAzMzpyZXR1cm4gNDM7Y2FzZSAzNDpyZXR1cm4gNDQ7Y2FzZSAzNTpyZXR1cm4gNTU7Y2FzZSAzNjpyZXR1cm4gNTY7Y2FzZSAzNzpyZXR1cm4gNTc7Y2FzZSAzODpyZXR1cm4gNTg7Y2FzZSAzOTpyZXR1cm4gNTk7Y2FzZSA0MDpyZXR1cm4gNjA7Y2FzZSA0MTpyZXR1cm4gNjE7Y2FzZSA0MjpyZXR1cm4gNDc7Y2FzZSA0MzpyZXR1cm4gNDk7Y2FzZSA0NDpyZXR1cm4gNTE7Y2FzZSA0NTpyZXR1cm4gNTQ7Y2FzZSA0NjpyZXR1cm4gNTM7Y2FzZSA0Nzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDQ4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQ5OnJldHVybiJxU3RyaW5nIjtjYXNlIDUwOnJldHVybiBsbi55eXRleHQ9bG4ueXl0ZXh0LnRyaW0oKSw2Mn19LHJ1bGVzOlsvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OiQpL2ksL14oPzpyZXF1aXJlbWVudERpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OjwtKS9pLC9eKD86LT4pL2ksL14oPzotKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXHddW15cclxuXHtcPFw+XC1cPV0qKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzRdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMl0saW5jbHVzaXZlOiExfSx1bnFTdHJpbmc6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sdG9rZW46e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNDgsNDldLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDUwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIF90fSgpO0Z0LmxleGVyPU5lO2Z1bmN0aW9uIGduKCl7dGhpcy55eT17fX1yZXR1cm4gZ24ucHJvdG90eXBlPUZ0LEZ0LlBhcnNlcj1nbixuZXcgZ259KCk7bXZlLnBhcnNlcj1tdmU7Y29uc3QgbHJuPW12ZTtsZXQgdnZlPVtdLFYyPXt9LFZSPXt9LEY5PXt9LFVSPXt9O2NvbnN0IGhybj17UmVxdWlyZW1lbnRUeXBlOntSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In0sUmlza0xldmVsOntMT1dfUklTSzoiTG93IixNRURfUklTSzoiTWVkaXVtIixISUdIX1JJU0s6IkhpZ2gifSxWZXJpZnlUeXBlOntWRVJJRllfQU5BTFlTSVM6IkFuYWx5c2lzIixWRVJJRllfREVNT05TVFJBVElPTjoiRGVtb25zdHJhdGlvbiIsVkVSSUZZX0lOU1BFQ1RJT046Ikluc3BlY3Rpb24iLFZFUklGWV9URVNUOiJUZXN0In0sUmVsYXRpb25zaGlwczp7Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifSxnZXRDb25maWc6KCk9PnF0KCkucmVxLGFkZFJlcXVpcmVtZW50OihpLHMpPT4oVlJbaV09PT12b2lkIDAmJihWUltpXT17bmFtZTppLHR5cGU6cyxpZDpWMi5pZCx0ZXh0OlYyLnRleHQscmlzazpWMi5yaXNrLHZlcmlmeU1ldGhvZDpWMi52ZXJpZnlNZXRob2R9KSxWMj17fSxWUltpXSksZ2V0UmVxdWlyZW1lbnRzOigpPT5WUixzZXROZXdSZXFJZDppPT57VjIhPT12b2lkIDAmJihWMi5pZD1pKX0sc2V0TmV3UmVxVGV4dDppPT57VjIhPT12b2lkIDAmJihWMi50ZXh0PWkpfSxzZXROZXdSZXFSaXNrOmk9PntWMiE9PXZvaWQgMCYmKFYyLnJpc2s9aSl9LHNldE5ld1JlcVZlcmlmeU1ldGhvZDppPT57VjIhPT12b2lkIDAmJihWMi52ZXJpZnlNZXRob2Q9aSl9LHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLGFkZEVsZW1lbnQ6aT0+KFVSW2ldPT09dm9pZCAwJiYoVVJbaV09e25hbWU6aSx0eXBlOkY5LnR5cGUsZG9jUmVmOkY5LmRvY1JlZn0sWGUuaW5mbygiQWRkZWQgbmV3IHJlcXVpcmVtZW50OiAiLGkpKSxGOT17fSxVUltpXSksZ2V0RWxlbWVudHM6KCk9PlVSLHNldE5ld0VsZW1lbnRUeXBlOmk9PntGOSE9PXZvaWQgMCYmKEY5LnR5cGU9aSl9LHNldE5ld0VsZW1lbnREb2NSZWY6aT0+e0Y5IT09dm9pZCAwJiYoRjkuZG9jUmVmPWkpfSxhZGRSZWxhdGlvbnNoaXA6KGkscyx1KT0+e3Z2ZS5wdXNoKHt0eXBlOmksc3JjOnMsZHN0OnV9KX0sZ2V0UmVsYXRpb25zaGlwczooKT0+dnZlLGNsZWFyOigpPT57dnZlPVtdLFYyPXt9LFZSPXt9LEY5PXt9LFVSPXt9LFBnKCl9fSxmcm49aT0+YAoKICBtYXJrZXIgewogICAgZmlsbDogJHtpLnJlbGF0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke2kucmVsYXRpb25Db2xvcn07CiAgfQoKICBtYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICB9CgogIHN2ZyB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke2kuZm9udFNpemV9OwogIH0KCiAgLnJlcUJveCB7CiAgICBmaWxsOiAke2kucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogICAgc3Ryb2tlOiAke2kucmVxdWlyZW1lbnRCb3JkZXJDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7aS5yZXF1aXJlbWVudEJvcmRlclNpemV9OwogIH0KICAKICAucmVxVGl0bGUsIC5yZXFMYWJlbHsKICAgIGZpbGw6ICAke2kucmVxdWlyZW1lbnRUZXh0Q29sb3J9OwogIH0KICAucmVxTGFiZWxCb3ggewogICAgZmlsbDogJHtpLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogIH0KCiAgLnJlcS10aXRsZS1saW5lIHsKICAgIHN0cm9rZTogJHtpLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke2kucmVxdWlyZW1lbnRCb3JkZXJTaXplfTsKICB9CiAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgc3Ryb2tlOiAke2kucmVsYXRpb25Db2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIC5yZWxhdGlvbnNoaXBMYWJlbCB7CiAgICBmaWxsOiAke2kucmVsYXRpb25MYWJlbENvbG9yfTsKICB9CgpgLHd2ZT17Q09OVEFJTlM6ImNvbnRhaW5zIixBUlJPVzoiYXJyb3cifSxTR2U9e1JlcU1hcmtlcnM6d3ZlLGluc2VydExpbmVFbmRpbmdzOihpLHMpPT57bGV0IHU9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix3dmUuQ09OVEFJTlMrIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLHMubGluZV9oZWlnaHQvMikuYXR0cigibWFya2VyV2lkdGgiLHMubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIscy5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO3UuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIscy5saW5lX2hlaWdodC8yKS5hdHRyKCJjeSIscy5saW5lX2hlaWdodC8yKS5hdHRyKCJyIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImZpbGwiLCJub25lIiksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLHMubGluZV9oZWlnaHQpLmF0dHIoInkxIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInkyIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLHMubGluZV9oZWlnaHQpLmF0dHIoIngxIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIngyIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix3dmUuQVJST1crIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLHMubGluZV9oZWlnaHQpLmF0dHIoInJlZlkiLC41KnMubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlcldpZHRoIixzLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJIZWlnaHQiLHMubGluZV9oZWlnaHQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTTAsMAogICAgICBMJHtzLmxpbmVfaGVpZ2h0fSwke3MubGluZV9oZWlnaHQvMn0KICAgICAgTSR7cy5saW5lX2hlaWdodH0sJHtzLmxpbmVfaGVpZ2h0LzJ9CiAgICAgIEwwLCR7cy5saW5lX2hlaWdodH1gKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpfX07bGV0IFRmPXt9LF9HZT0wO2NvbnN0IEFHZT0oaSxzKT0+aS5pbnNlcnQoInJlY3QiLCIjIitzKS5hdHRyKCJjbGFzcyIsInJlcSByZXFCb3giKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsVGYucmVjdF9taW5fd2lkdGgrInB4IikuYXR0cigiaGVpZ2h0IixUZi5yZWN0X21pbl9oZWlnaHQrInB4IiksTEdlPShpLHMsdSk9PntsZXQgZD1UZi5yZWN0X21pbl93aWR0aC8yLHA9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCByZXFUaXRsZSIpLmF0dHIoImlkIixzKS5hdHRyKCJ4IixkKS5hdHRyKCJ5IixUZi5yZWN0X3BhZGRpbmcpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLHY9MDt1LmZvckVhY2goXz0+e3Y9PTA/cC5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixUZi5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsMCkudGV4dChfKTpwLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLFRmLnJlY3RfbWluX3dpZHRoLzIpLmF0dHIoImR5IixUZi5saW5lX2hlaWdodCouNzUpLnRleHQoXyksdisrfSk7bGV0IGI9MS41KlRmLnJlY3RfcGFkZGluZyx5PXYqVGYubGluZV9oZWlnaHQqLjc1LFQ9Yit5O3JldHVybiBpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwicmVxLXRpdGxlLWxpbmUiKS5hdHRyKCJ4MSIsIjAiKS5hdHRyKCJ4MiIsVGYucmVjdF9taW5fd2lkdGgpLmF0dHIoInkxIixUKS5hdHRyKCJ5MiIsVCkse3RpdGxlTm9kZTpwLHk6VH19LE1HZT0oaSxzLHUsZCk9PntsZXQgcD1pLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsIikuYXR0cigiaWQiLHMpLmF0dHIoIngiLFRmLnJlY3RfcGFkZGluZykuYXR0cigieSIsZCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJoYW5naW5nIiksdj0wO2NvbnN0IGI9MzA7bGV0IHk9W107cmV0dXJuIHUuZm9yRWFjaChUPT57bGV0IF89VC5sZW5ndGg7Zm9yKDtfPmImJnY8Mzspe2xldCBBPVQuc3Vic3RyaW5nKDAsYik7VD1ULnN1YnN0cmluZyhiLFQubGVuZ3RoKSxfPVQubGVuZ3RoLHlbeS5sZW5ndGhdPUEsdisrfWlmKHY9PTMpe2xldCBBPXlbeS5sZW5ndGgtMV07eVt5Lmxlbmd0aC0xXT1BLnN1YnN0cmluZygwLEEubGVuZ3RoLTQpKyIuLi4ifWVsc2UgeVt5Lmxlbmd0aF09VDt2PTB9KSx5LmZvckVhY2goVD0+e3AuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLFRmLnJlY3RfcGFkZGluZykuYXR0cigiZHkiLFRmLmxpbmVfaGVpZ2h0KS50ZXh0KFQpfSkscH0sZHJuPShpLHMsdSxkKT0+e2NvbnN0IHA9cy5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSx2PXMubm9kZSgpLmdldFBvaW50QXRMZW5ndGgocCouNSksYj0icmVsIitfR2U7X0dlKys7Y29uc3QgVD1pLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlbGF0aW9uc2hpcExhYmVsIikuYXR0cigiaWQiLGIpLmF0dHIoIngiLHYueCkuYXR0cigieSIsdi55KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikudGV4dChkKS5ub2RlKCkuZ2V0QkJveCgpO2kuaW5zZXJ0KCJyZWN0IiwiIyIrYikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWxCb3giKS5hdHRyKCJ4Iix2LngtVC53aWR0aC8yKS5hdHRyKCJ5Iix2LnktVC5oZWlnaHQvMikuYXR0cigid2lkdGgiLFQud2lkdGgpLmF0dHIoImhlaWdodCIsVC5oZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjg1JSIpfSxncm49ZnVuY3Rpb24oaSxzLHUsZCxwKXtjb25zdCB2PXUuZWRnZShXRChzLnNyYyksV0Qocy5kc3QpKSxiPWs3KCkueChmdW5jdGlvbihUKXtyZXR1cm4gVC54fSkueShmdW5jdGlvbihUKXtyZXR1cm4gVC55fSkseT1pLmluc2VydCgicGF0aCIsIiMiK2QpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGluZSIpLmF0dHIoImQiLGIodi5wb2ludHMpKS5hdHRyKCJmaWxsIiwibm9uZSIpO3MudHlwZT09cC5kYi5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TP3kuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrY2kuZ2V0VXJsKFRmLmFycm93TWFya2VyQWJzb2x1dGUpKyIjIitzLnR5cGUrIl9saW5lX2VuZGluZykiKTooeS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiMTAsNyIpLHkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2NpLmdldFVybChUZi5hcnJvd01hcmtlckFic29sdXRlKSsiIyIrU0dlLlJlcU1hcmtlcnMuQVJST1crIl9saW5lX2VuZGluZykiKSksZHJuKGkseSxUZixgPDwke3MudHlwZX0+PmApfSxwcm49KGkscyx1KT0+e09iamVjdC5rZXlzKGkpLmZvckVhY2goZD0+e2xldCBwPWlbZF07ZD1XRChkKSxYZS5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIsZCk7Y29uc3Qgdj11LmFwcGVuZCgiZyIpLmF0dHIoImlkIixkKSxiPSJyZXEtIitkLHk9QUdlKHYsYik7bGV0IFQ9TEdlKHYsZCsiX3RpdGxlIixbYDw8JHtwLnR5cGV9Pj5gLGAke3AubmFtZX1gXSk7TUdlKHYsZCsiX2JvZHkiLFtgSWQ6ICR7cC5pZH1gLGBUZXh0OiAke3AudGV4dH1gLGBSaXNrOiAke3Aucmlza31gLGBWZXJpZmljYXRpb246ICR7cC52ZXJpZnlNZXRob2R9YF0sVC55KTtjb25zdCBfPXkubm9kZSgpLmdldEJCb3goKTtzLnNldE5vZGUoZCx7d2lkdGg6Xy53aWR0aCxoZWlnaHQ6Xy5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOmR9KX0pfSxicm49KGkscyx1KT0+e09iamVjdC5rZXlzKGkpLmZvckVhY2goZD0+e2xldCBwPWlbZF07Y29uc3Qgdj1XRChkKSxiPXUuYXBwZW5kKCJnIikuYXR0cigiaWQiLHYpLHk9ImVsZW1lbnQtIit2LFQ9QUdlKGIseSk7bGV0IF89TEdlKGIseSsiX3RpdGxlIixbIjw8RWxlbWVudD4+IixgJHtkfWBdKTtNR2UoYix5KyJfYm9keSIsW2BUeXBlOiAke3AudHlwZXx8Ik5vdCBTcGVjaWZpZWQifWAsYERvYyBSZWY6ICR7cC5kb2NSZWZ8fCJOb25lIn1gXSxfLnkpO2NvbnN0IEE9VC5ub2RlKCkuZ2V0QkJveCgpO3Muc2V0Tm9kZSh2LHt3aWR0aDpBLndpZHRoLGhlaWdodDpBLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6dn0pfSl9LG1ybj0oaSxzKT0+KGkuZm9yRWFjaChmdW5jdGlvbih1KXtsZXQgZD1XRCh1LnNyYykscD1XRCh1LmRzdCk7cy5zZXRFZGdlKGQscCx7cmVsYXRpb25zaGlwOnV9KX0pLGkpLHZybj1mdW5jdGlvbihpLHMpe3Mubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3UhPT12b2lkIDAmJnMubm9kZSh1KSE9PXZvaWQgMCYmKGkuc2VsZWN0KCIjIit1KSxpLnNlbGVjdCgiIyIrdSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHMubm9kZSh1KS54LXMubm9kZSh1KS53aWR0aC8yKSsiLCIrKHMubm9kZSh1KS55LXMubm9kZSh1KS5oZWlnaHQvMikrIiApIikpfSl9LFdEPWk9PmkucmVwbGFjZSgvXHMvZywiIikucmVwbGFjZSgvXC4vZywiXyIpLHdybj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOmxybixkYjpocm4scmVuZGVyZXI6e2RyYXc6KGkscyx1LGQpPT57VGY9cXQoKS5yZXF1aXJlbWVudDtjb25zdCBwPVRmLnNlY3VyaXR5TGV2ZWw7bGV0IHY7cD09PSJzYW5kYm94IiYmKHY9SXIoIiNpIitzKSk7Y29uc3QgeT1JcihwPT09InNhbmRib3giP3Yubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdChgW2lkPScke3N9J11gKTtTR2UuaW5zZXJ0TGluZUVuZGluZ3MoeSxUZik7Y29uc3QgVD1uZXcgQjAoe211bHRpZ3JhcGg6ITEsY29tcG91bmQ6ITEsZGlyZWN0ZWQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpUZi5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7bGV0IF89ZC5kYi5nZXRSZXF1aXJlbWVudHMoKSxBPWQuZGIuZ2V0RWxlbWVudHMoKSxQPWQuZGIuZ2V0UmVsYXRpb25zaGlwcygpO3BybihfLFQseSksYnJuKEEsVCx5KSxtcm4oUCxUKSxxRChUKSx2cm4oeSxUKSxQLmZvckVhY2goZnVuY3Rpb24oZWUpe2dybih5LGVlLFQscyxkKX0pO2NvbnN0IFI9VGYucmVjdF9wYWRkaW5nLEY9eS5ub2RlKCkuZ2V0QkJveCgpLGo9Ri53aWR0aCtSKjIsSz1GLmhlaWdodCtSKjI7TmcoeSxLLGosVGYudXNlTWF4V2lkdGgpLHkuYXR0cigidmlld0JveCIsYCR7Ri54LVJ9ICR7Ri55LVJ9ICR7an0gJHtLfWApfX0sc3R5bGVzOmZybn19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIHl2ZT1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKHh0LFB0LFFlLER0KXtmb3IoUWU9UWV8fHt9LER0PXh0Lmxlbmd0aDtEdC0tO1FlW3h0W0R0XV09UHQpO3JldHVybiBRZX0scz1bMSwyXSx1PVsxLDNdLGQ9WzEsNF0scD1bMiw0XSx2PVsxLDldLGI9WzEsMTFdLHk9WzEsMTNdLFQ9WzEsMTRdLF89WzEsMTZdLEE9WzEsMTddLFA9WzEsMThdLFI9WzEsMjRdLEY9WzEsMjVdLGo9WzEsMjZdLEs9WzEsMjddLGVlPVsxLDI4XSxpZT1bMSwyOV0sb2U9WzEsMzBdLHBlPVsxLDMxXSxiZT1bMSwzMl0sYWU9WzEsMzNdLG5lPVsxLDM0XSxzZT1bMSwzNV0sZGU9WzEsMzZdLFg9WzEsMzddLGdlPVsxLDM4XSxXPVsxLDM5XSx4ZT1bMSw0MV0sVT1bMSw0Ml0sRmU9WzEsNDNdLFBlPVsxLDQ0XSxqZT1bMSw0NV0sSWU9WzEsNDZdLFNlPVsxLDQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw0OCw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sQ2U9WzQsNSwxNiw1MCw1Miw1M10sa2U9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sS2U9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sRnQ9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OCw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sTmU9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sZ249WzY4LDY5LDcwXSxfdD1bMSwxMjBdLEV0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTUEFDRTo0LE5FV0xJTkU6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGJveF9zZWN0aW9uOjEwLGJveF9saW5lOjExLHBhcnRpY2lwYW50X3N0YXRlbWVudDoxMixjcmVhdGU6MTMsYm94OjE0LHJlc3RPZkxpbmU6MTUsZW5kOjE2LHNpZ25hbDoxNyxhdXRvbnVtYmVyOjE4LE5VTToxOSxvZmY6MjAsYWN0aXZhdGU6MjEsYWN0b3I6MjIsZGVhY3RpdmF0ZToyMyxub3RlX3N0YXRlbWVudDoyNCxsaW5rc19zdGF0ZW1lbnQ6MjUsbGlua19zdGF0ZW1lbnQ6MjYscHJvcGVydGllc19zdGF0ZW1lbnQ6MjcsZGV0YWlsc19zdGF0ZW1lbnQ6MjgsdGl0bGU6MjksbGVnYWN5X3RpdGxlOjMwLGFjY190aXRsZTozMSxhY2NfdGl0bGVfdmFsdWU6MzIsYWNjX2Rlc2NyOjMzLGFjY19kZXNjcl92YWx1ZTozNCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM1LGxvb3A6MzYscmVjdDozNyxvcHQ6MzgsYWx0OjM5LGVsc2Vfc2VjdGlvbnM6NDAscGFyOjQxLHBhcl9zZWN0aW9uczo0MixwYXJfb3Zlcjo0Myxjcml0aWNhbDo0NCxvcHRpb25fc2VjdGlvbnM6NDUsYnJlYWs6NDYsb3B0aW9uOjQ3LGFuZDo0OCxlbHNlOjQ5LHBhcnRpY2lwYW50OjUwLEFTOjUxLHBhcnRpY2lwYW50X2FjdG9yOjUyLGRlc3Ryb3k6NTMsbm90ZTo1NCxwbGFjZW1lbnQ6NTUsdGV4dDI6NTYsb3Zlcjo1NyxhY3Rvcl9wYWlyOjU4LGxpbmtzOjU5LGxpbms6NjAscHJvcGVydGllczo2MSxkZXRhaWxzOjYyLHNwYWNlTGlzdDo2MywiLCI6NjQsbGVmdF9vZjo2NSxyaWdodF9vZjo2NixzaWduYWx0eXBlOjY3LCIrIjo2OCwiLSI6NjksQUNUT1I6NzAsU09MSURfT1BFTl9BUlJPVzo3MSxET1RURURfT1BFTl9BUlJPVzo3MixTT0xJRF9BUlJPVzo3MyxET1RURURfQVJST1c6NzQsU09MSURfQ1JPU1M6NzUsRE9UVEVEX0NST1NTOjc2LFNPTElEX1BPSU5UOjc3LERPVFRFRF9QT0lOVDo3OCxUWFQ6NzksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJORVdMSU5FIiw2OiJTRCIsMTM6ImNyZWF0ZSIsMTQ6ImJveCIsMTU6InJlc3RPZkxpbmUiLDE2OiJlbmQiLDE4OiJhdXRvbnVtYmVyIiwxOToiTlVNIiwyMDoib2ZmIiwyMToiYWN0aXZhdGUiLDIzOiJkZWFjdGl2YXRlIiwyOToidGl0bGUiLDMwOiJsZWdhY3lfdGl0bGUiLDMxOiJhY2NfdGl0bGUiLDMyOiJhY2NfdGl0bGVfdmFsdWUiLDMzOiJhY2NfZGVzY3IiLDM0OiJhY2NfZGVzY3JfdmFsdWUiLDM1OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNjoibG9vcCIsMzc6InJlY3QiLDM4OiJvcHQiLDM5OiJhbHQiLDQxOiJwYXIiLDQzOiJwYXJfb3ZlciIsNDQ6ImNyaXRpY2FsIiw0NjoiYnJlYWsiLDQ3OiJvcHRpb24iLDQ4OiJhbmQiLDQ5OiJlbHNlIiw1MDoicGFydGljaXBhbnQiLDUxOiJBUyIsNTI6InBhcnRpY2lwYW50X2FjdG9yIiw1MzoiZGVzdHJveSIsNTQ6Im5vdGUiLDU3OiJvdmVyIiw1OToibGlua3MiLDYwOiJsaW5rIiw2MToicHJvcGVydGllcyIsNjI6ImRldGFpbHMiLDY0OiIsIiw2NToibGVmdF9vZiIsNjY6InJpZ2h0X29mIiw2ODoiKyIsNjk6Ii0iLDcwOiJBQ1RPUiIsNzE6IlNPTElEX09QRU5fQVJST1ciLDcyOiJET1RURURfT1BFTl9BUlJPVyIsNzM6IlNPTElEX0FSUk9XIiw3NDoiRE9UVEVEX0FSUk9XIiw3NToiU09MSURfQ1JPU1MiLDc2OiJET1RURURfQ1JPU1MiLDc3OiJTT0xJRF9QT0lOVCIsNzg6IkRPVFRFRF9QT0lOVCIsNzk6IlRYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbMTAsMF0sWzEwLDJdLFsxMSwyXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDJdLFs5LDRdLFs5LDJdLFs5LDRdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs0NSwxXSxbNDUsNF0sWzQyLDFdLFs0Miw0XSxbNDAsMV0sWzQwLDRdLFsxMiw1XSxbMTIsM10sWzEyLDVdLFsxMiwzXSxbMTIsM10sWzI0LDRdLFsyNCw0XSxbMjUsM10sWzI2LDNdLFsyNywzXSxbMjgsM10sWzYzLDJdLFs2MywxXSxbNTgsM10sWzU4LDFdLFs1NSwxXSxbNTUsMV0sWzE3LDVdLFsxNyw1XSxbMTcsNF0sWzIyLDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzU2LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFB0LFFlLER0LGt0LE9uLGh0LHpyKXt2YXIgeXQ9aHQubGVuZ3RoLTE7c3dpdGNoKE9uKXtjYXNlIDM6cmV0dXJuIGt0LmFwcGx5KGh0W3l0XSksaHRbeXRdO2Nhc2UgNDpjYXNlIDk6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNTpjYXNlIDEwOmh0W3l0LTFdLnB1c2goaHRbeXRdKSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSA2OmNhc2UgNzpjYXNlIDExOmNhc2UgMTI6dGhpcy4kPWh0W3l0XTticmVhaztjYXNlIDg6Y2FzZSAxMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxNTpodFt5dF0udHlwZT0iY3JlYXRlUGFydGljaXBhbnQiLHRoaXMuJD1odFt5dF07YnJlYWs7Y2FzZSAxNjpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJib3hTdGFydCIsYm94RGF0YTprdC5wYXJzZUJveERhdGEoaHRbeXQtMl0pfSksaHRbeXQtMV0ucHVzaCh7dHlwZToiYm94RW5kIixib3hUZXh0Omh0W3l0LTJdfSksdGhpcy4kPWh0W3l0LTFdO2JyZWFrO2Nhc2UgMTg6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZUluZGV4Ok51bWJlcihodFt5dC0yXSksc2VxdWVuY2VJbmRleFN0ZXA6TnVtYmVyKGh0W3l0LTFdKSxzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDE5OnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VJbmRleDpOdW1iZXIoaHRbeXQtMV0pLHNlcXVlbmNlSW5kZXhTdGVwOjEsc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlVmlzaWJsZTohMSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjE6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIyOnRoaXMuJD17dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOmh0W3l0LTFdfTticmVhaztjYXNlIDIzOnRoaXMuJD17dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6aHRbeXQtMV19O2JyZWFrO2Nhc2UgMjk6a3Quc2V0RGlhZ3JhbVRpdGxlKGh0W3l0XS5zdWJzdHJpbmcoNikpLHRoaXMuJD1odFt5dF0uc3Vic3RyaW5nKDYpO2JyZWFrO2Nhc2UgMzA6a3Quc2V0RGlhZ3JhbVRpdGxlKGh0W3l0XS5zdWJzdHJpbmcoNykpLHRoaXMuJD1odFt5dF0uc3Vic3RyaW5nKDcpO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPWh0W3l0XS50cmltKCksa3Quc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDMyOmNhc2UgMzM6dGhpcy4kPWh0W3l0XS50cmltKCksa3Quc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDM0Omh0W3l0LTFdLnVuc2hpZnQoe3R5cGU6Imxvb3BTdGFydCIsbG9vcFRleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTJdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkxPT1BfU1RBUlR9KSxodFt5dC0xXS5wdXNoKHt0eXBlOiJsb29wRW5kIixsb29wVGV4dDpodFt5dC0yXSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkxPT1BfRU5EfSksdGhpcy4kPWh0W3l0LTFdO2JyZWFrO2Nhc2UgMzU6aHRbeXQtMV0udW5zaGlmdCh7dHlwZToicmVjdFN0YXJ0Iixjb2xvcjprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuUkVDVF9TVEFSVH0pLGh0W3l0LTFdLnB1c2goe3R5cGU6InJlY3RFbmQiLGNvbG9yOmt0LnBhcnNlTWVzc2FnZShodFt5dC0yXSksc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5SRUNUX0VORH0pLHRoaXMuJD1odFt5dC0xXTticmVhaztjYXNlIDM2Omh0W3l0LTFdLnVuc2hpZnQoe3R5cGU6Im9wdFN0YXJ0IixvcHRUZXh0Omt0LnBhcnNlTWVzc2FnZShodFt5dC0yXSksc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5PUFRfU1RBUlR9KSxodFt5dC0xXS5wdXNoKHt0eXBlOiJvcHRFbmQiLG9wdFRleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTJdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLk9QVF9FTkR9KSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSAzNzpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJhbHRTdGFydCIsYWx0VGV4dDprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQUxUX1NUQVJUfSksaHRbeXQtMV0ucHVzaCh7dHlwZToiYWx0RW5kIixzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkFMVF9FTkR9KSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSAzODpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuUEFSX1NUQVJUfSksaHRbeXQtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOmt0LkxJTkVUWVBFLlBBUl9FTkR9KSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSAzOTpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuUEFSX09WRVJfU1RBUlR9KSxodFt5dC0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD1odFt5dC0xXTticmVhaztjYXNlIDQwOmh0W3l0LTFdLnVuc2hpZnQoe3R5cGU6ImNyaXRpY2FsU3RhcnQiLGNyaXRpY2FsVGV4dDprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQ1JJVElDQUxfU1RBUlR9KSxodFt5dC0xXS5wdXNoKHt0eXBlOiJjcml0aWNhbEVuZCIsc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5DUklUSUNBTF9FTkR9KSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSA0MTpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJicmVha1N0YXJ0IixicmVha1RleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTJdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkJSRUFLX1NUQVJUfSksaHRbeXQtMV0ucHVzaCh7dHlwZToiYnJlYWtFbmQiLG9wdFRleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTJdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkJSRUFLX0VORH0pLHRoaXMuJD1odFt5dC0xXTticmVhaztjYXNlIDQzOnRoaXMuJD1odFt5dC0zXS5jb25jYXQoW3t0eXBlOiJvcHRpb24iLG9wdGlvblRleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTFdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTn0saHRbeXRdXSk7YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9aHRbeXQtM10uY29uY2F0KFt7dHlwZToiYW5kIixwYXJUZXh0Omt0LnBhcnNlTWVzc2FnZShodFt5dC0xXSksc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5QQVJfQU5EfSxodFt5dF1dKTticmVhaztjYXNlIDQ3OnRoaXMuJD1odFt5dC0zXS5jb25jYXQoW3t0eXBlOiJlbHNlIixhbHRUZXh0Omt0LnBhcnNlTWVzc2FnZShodFt5dC0xXSksc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5BTFRfRUxTRX0saHRbeXRdXSk7YnJlYWs7Y2FzZSA0ODpodFt5dC0zXS5kcmF3PSJwYXJ0aWNpcGFudCIsaHRbeXQtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLGh0W3l0LTNdLmRlc2NyaXB0aW9uPWt0LnBhcnNlTWVzc2FnZShodFt5dC0xXSksdGhpcy4kPWh0W3l0LTNdO2JyZWFrO2Nhc2UgNDk6aHRbeXQtMV0uZHJhdz0icGFydGljaXBhbnQiLGh0W3l0LTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSA1MDpodFt5dC0zXS5kcmF3PSJhY3RvciIsaHRbeXQtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLGh0W3l0LTNdLmRlc2NyaXB0aW9uPWt0LnBhcnNlTWVzc2FnZShodFt5dC0xXSksdGhpcy4kPWh0W3l0LTNdO2JyZWFrO2Nhc2UgNTE6aHRbeXQtMV0uZHJhdz0iYWN0b3IiLGh0W3l0LTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSA1MjpodFt5dC0xXS50eXBlPSJkZXN0cm95UGFydGljaXBhbnQiLHRoaXMuJD1odFt5dC0xXTticmVhaztjYXNlIDUzOnRoaXMuJD1baHRbeXQtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpodFt5dC0yXSxhY3RvcjpodFt5dC0xXS5hY3Rvcix0ZXh0Omh0W3l0XX1dO2JyZWFrO2Nhc2UgNTQ6aHRbeXQtMl09W10uY29uY2F0KGh0W3l0LTFdLGh0W3l0LTFdKS5zbGljZSgwLDIpLGh0W3l0LTJdWzBdPWh0W3l0LTJdWzBdLmFjdG9yLGh0W3l0LTJdWzFdPWh0W3l0LTJdWzFdLmFjdG9yLHRoaXMuJD1baHRbeXQtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDprdC5QTEFDRU1FTlQuT1ZFUixhY3RvcjpodFt5dC0yXS5zbGljZSgwLDIpLHRleHQ6aHRbeXRdfV07YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9W2h0W3l0LTFdLHt0eXBlOiJhZGRMaW5rcyIsYWN0b3I6aHRbeXQtMV0uYWN0b3IsdGV4dDpodFt5dF19XTticmVhaztjYXNlIDU2OnRoaXMuJD1baHRbeXQtMV0se3R5cGU6ImFkZEFMaW5rIixhY3RvcjpodFt5dC0xXS5hY3Rvcix0ZXh0Omh0W3l0XX1dO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPVtodFt5dC0xXSx7dHlwZToiYWRkUHJvcGVydGllcyIsYWN0b3I6aHRbeXQtMV0uYWN0b3IsdGV4dDpodFt5dF19XTticmVhaztjYXNlIDU4OnRoaXMuJD1baHRbeXQtMV0se3R5cGU6ImFkZERldGFpbHMiLGFjdG9yOmh0W3l0LTFdLmFjdG9yLHRleHQ6aHRbeXRdfV07YnJlYWs7Y2FzZSA2MTp0aGlzLiQ9W2h0W3l0LTJdLGh0W3l0XV07YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9aHRbeXRdO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPWt0LlBMQUNFTUVOVC5MRUZUT0Y7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9a3QuUExBQ0VNRU5ULlJJR0hUT0Y7YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9W2h0W3l0LTRdLGh0W3l0LTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOmh0W3l0LTRdLmFjdG9yLHRvOmh0W3l0LTFdLmFjdG9yLHNpZ25hbFR5cGU6aHRbeXQtM10sbXNnOmh0W3l0XSxhY3RpdmF0ZTohMH0se3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjpodFt5dC0xXX1dO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPVtodFt5dC00XSxodFt5dC0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpodFt5dC00XS5hY3Rvcix0bzpodFt5dC0xXS5hY3RvcixzaWduYWxUeXBlOmh0W3l0LTNdLG1zZzpodFt5dF19LHt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjpodFt5dC00XX1dO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPVtodFt5dC0zXSxodFt5dC0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpodFt5dC0zXS5hY3Rvcix0bzpodFt5dC0xXS5hY3RvcixzaWduYWxUeXBlOmh0W3l0LTJdLG1zZzpodFt5dF19XTticmVhaztjYXNlIDY4OnRoaXMuJD17dHlwZToiYWRkUGFydGljaXBhbnQiLGFjdG9yOmh0W3l0XX07YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9a3QuTElORVRZUEUuU09MSURfT1BFTjticmVhaztjYXNlIDcwOnRoaXMuJD1rdC5MSU5FVFlQRS5ET1RURURfT1BFTjticmVhaztjYXNlIDcxOnRoaXMuJD1rdC5MSU5FVFlQRS5TT0xJRDticmVhaztjYXNlIDcyOnRoaXMuJD1rdC5MSU5FVFlQRS5ET1RURUQ7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9a3QuTElORVRZUEUuU09MSURfQ1JPU1M7YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9a3QuTElORVRZUEUuRE9UVEVEX0NST1NTO2JyZWFrO2Nhc2UgNzU6dGhpcy4kPWt0LkxJTkVUWVBFLlNPTElEX1BPSU5UO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPWt0LkxJTkVUWVBFLkRPVFRFRF9QT0lOVDticmVhaztjYXNlIDc3OnRoaXMuJD1rdC5wYXJzZU1lc3NhZ2UoaHRbeXRdLnRyaW0oKS5zdWJzdHJpbmcoMSkpO2JyZWFrfX0sdGFibGU6W3szOjEsNDpzLDU6dSw2OmR9LHsxOlszXX0sezM6NSw0OnMsNTp1LDY6ZH0sezM6Niw0OnMsNTp1LDY6ZH0saShbMSw0LDUsMTMsMTQsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLHAsezc6N30pLHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM10sNDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTc6MTUsMTg6XywyMTpBLDIyOjQwLDIzOlAsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6UiwzMDpGLDMxOmosMzM6SywzNTplZSwzNjppZSwzNzpvZSwzODpwZSwzOTpiZSw0MTphZSw0MzpuZSw0NDpzZSw0NjpkZSw1MDpYLDUyOmdlLDUzOlcsNTQ6eGUsNTk6VSw2MDpGZSw2MTpQZSw2MjpqZSw3MDpJZX0saShTZSxbMiw1XSksezk6NDcsMTI6MTIsMTM6eSwxNDpULDE3OjE1LDE4Ol8sMjE6QSwyMjo0MCwyMzpQLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OlIsMzA6RiwzMTpqLDMzOkssMzU6ZWUsMzY6aWUsMzc6b2UsMzg6cGUsMzk6YmUsNDE6YWUsNDM6bmUsNDQ6c2UsNDY6ZGUsNTA6WCw1MjpnZSw1MzpXLDU0OnhlLDU5OlUsNjA6RmUsNjE6UGUsNjI6amUsNzA6SWV9LGkoU2UsWzIsN10pLGkoU2UsWzIsOF0pLGkoU2UsWzIsMTRdKSx7MTI6NDgsNTA6WCw1MjpnZSw1MzpXfSx7MTU6WzEsNDldfSx7NTpbMSw1MF19LHs1OlsxLDUzXSwxOTpbMSw1MV0sMjA6WzEsNTJdfSx7MjI6NTQsNzA6SWV9LHsyMjo1NSw3MDpJZX0sezU6WzEsNTZdfSx7NTpbMSw1N119LHs1OlsxLDU4XX0sezU6WzEsNTldfSx7NTpbMSw2MF19LGkoU2UsWzIsMjldKSxpKFNlLFsyLDMwXSksezMyOlsxLDYxXX0sezM0OlsxLDYyXX0saShTZSxbMiwzM10pLHsxNTpbMSw2M119LHsxNTpbMSw2NF19LHsxNTpbMSw2NV19LHsxNTpbMSw2Nl19LHsxNTpbMSw2N119LHsxNTpbMSw2OF19LHsxNTpbMSw2OV19LHsxNTpbMSw3MF19LHsyMjo3MSw3MDpJZX0sezIyOjcyLDcwOkllfSx7MjI6NzMsNzA6SWV9LHs2Nzo3NCw3MTpbMSw3NV0sNzI6WzEsNzZdLDczOlsxLDc3XSw3NDpbMSw3OF0sNzU6WzEsNzldLDc2OlsxLDgwXSw3NzpbMSw4MV0sNzg6WzEsODJdfSx7NTU6ODMsNTc6WzEsODRdLDY1OlsxLDg1XSw2NjpbMSw4Nl19LHsyMjo4Nyw3MDpJZX0sezIyOjg4LDcwOkllfSx7MjI6ODksNzA6SWV9LHsyMjo5MCw3MDpJZX0saShbNSw1MSw2NCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OV0sWzIsNjhdKSxpKFNlLFsyLDZdKSxpKFNlLFsyLDE1XSksaShDZSxbMiw5XSx7MTA6OTF9KSxpKFNlLFsyLDE3XSksezU6WzEsOTNdLDE5OlsxLDkyXX0sezU6WzEsOTRdfSxpKFNlLFsyLDIxXSksezU6WzEsOTVdfSx7NTpbMSw5Nl19LGkoU2UsWzIsMjRdKSxpKFNlLFsyLDI1XSksaShTZSxbMiwyNl0pLGkoU2UsWzIsMjddKSxpKFNlLFsyLDI4XSksaShTZSxbMiwzMV0pLGkoU2UsWzIsMzJdKSxpKGtlLHAsezc6OTd9KSxpKGtlLHAsezc6OTh9KSxpKGtlLHAsezc6OTl9KSxpKEtlLHAsezQwOjEwMCw3OjEwMX0pLGkoRnQscCx7NDI6MTAyLDc6MTAzfSksaShGdCxwLHs3OjEwMyw0MjoxMDR9KSxpKE5lLHAsezQ1OjEwNSw3OjEwNn0pLGkoa2UscCx7NzoxMDd9KSx7NTpbMSwxMDldLDUxOlsxLDEwOF19LHs1OlsxLDExMV0sNTE6WzEsMTEwXX0sezU6WzEsMTEyXX0sezIyOjExNSw2ODpbMSwxMTNdLDY5OlsxLDExNF0sNzA6SWV9LGkoZ24sWzIsNjldKSxpKGduLFsyLDcwXSksaShnbixbMiw3MV0pLGkoZ24sWzIsNzJdKSxpKGduLFsyLDczXSksaShnbixbMiw3NF0pLGkoZ24sWzIsNzVdKSxpKGduLFsyLDc2XSksezIyOjExNiw3MDpJZX0sezIyOjExOCw1ODoxMTcsNzA6SWV9LHs3MDpbMiw2M119LHs3MDpbMiw2NF19LHs1NjoxMTksNzk6X3R9LHs1NjoxMjEsNzk6X3R9LHs1NjoxMjIsNzk6X3R9LHs1NjoxMjMsNzk6X3R9LHs0OlsxLDEyNl0sNTpbMSwxMjhdLDExOjEyNSwxMjoxMjcsMTY6WzEsMTI0XSw1MDpYLDUyOmdlLDUzOld9LHs1OlsxLDEyOV19LGkoU2UsWzIsMTldKSxpKFNlLFsyLDIwXSksaShTZSxbMiwyMl0pLGkoU2UsWzIsMjNdKSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzEsMTMwXSwxNzoxNSwxODpfLDIxOkEsMjI6NDAsMjM6UCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpSLDMwOkYsMzE6aiwzMzpLLDM1OmVlLDM2OmllLDM3Om9lLDM4OnBlLDM5OmJlLDQxOmFlLDQzOm5lLDQ0OnNlLDQ2OmRlLDUwOlgsNTI6Z2UsNTM6Vyw1NDp4ZSw1OTpVLDYwOkZlLDYxOlBlLDYyOmplLDcwOkllfSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzEsMTMxXSwxNzoxNSwxODpfLDIxOkEsMjI6NDAsMjM6UCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpSLDMwOkYsMzE6aiwzMzpLLDM1OmVlLDM2OmllLDM3Om9lLDM4OnBlLDM5OmJlLDQxOmFlLDQzOm5lLDQ0OnNlLDQ2OmRlLDUwOlgsNTI6Z2UsNTM6Vyw1NDp4ZSw1OTpVLDYwOkZlLDYxOlBlLDYyOmplLDcwOkllfSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzEsMTMyXSwxNzoxNSwxODpfLDIxOkEsMjI6NDAsMjM6UCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpSLDMwOkYsMzE6aiwzMzpLLDM1OmVlLDM2OmllLDM3Om9lLDM4OnBlLDM5OmJlLDQxOmFlLDQzOm5lLDQ0OnNlLDQ2OmRlLDUwOlgsNTI6Z2UsNTM6Vyw1NDp4ZSw1OTpVLDYwOkZlLDYxOlBlLDYyOmplLDcwOkllfSx7MTY6WzEsMTMzXX0sezQ6diw1OmIsODo4LDk6MTAsMTI6MTIsMTM6eSwxNDpULDE2OlsyLDQ2XSwxNzoxNSwxODpfLDIxOkEsMjI6NDAsMjM6UCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpSLDMwOkYsMzE6aiwzMzpLLDM1OmVlLDM2OmllLDM3Om9lLDM4OnBlLDM5OmJlLDQxOmFlLDQzOm5lLDQ0OnNlLDQ2OmRlLDQ5OlsxLDEzNF0sNTA6WCw1MjpnZSw1MzpXLDU0OnhlLDU5OlUsNjA6RmUsNjE6UGUsNjI6amUsNzA6SWV9LHsxNjpbMSwxMzVdfSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzIsNDRdLDE3OjE1LDE4Ol8sMjE6QSwyMjo0MCwyMzpQLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OlIsMzA6RiwzMTpqLDMzOkssMzU6ZWUsMzY6aWUsMzc6b2UsMzg6cGUsMzk6YmUsNDE6YWUsNDM6bmUsNDQ6c2UsNDY6ZGUsNDg6WzEsMTM2XSw1MDpYLDUyOmdlLDUzOlcsNTQ6eGUsNTk6VSw2MDpGZSw2MTpQZSw2MjpqZSw3MDpJZX0sezE2OlsxLDEzN119LHsxNjpbMSwxMzhdfSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzIsNDJdLDE3OjE1LDE4Ol8sMjE6QSwyMjo0MCwyMzpQLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OlIsMzA6RiwzMTpqLDMzOkssMzU6ZWUsMzY6aWUsMzc6b2UsMzg6cGUsMzk6YmUsNDE6YWUsNDM6bmUsNDQ6c2UsNDY6ZGUsNDc6WzEsMTM5XSw1MDpYLDUyOmdlLDUzOlcsNTQ6eGUsNTk6VSw2MDpGZSw2MTpQZSw2MjpqZSw3MDpJZX0sezQ6diw1OmIsODo4LDk6MTAsMTI6MTIsMTM6eSwxNDpULDE2OlsxLDE0MF0sMTc6MTUsMTg6XywyMTpBLDIyOjQwLDIzOlAsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6UiwzMDpGLDMxOmosMzM6SywzNTplZSwzNjppZSwzNzpvZSwzODpwZSwzOTpiZSw0MTphZSw0MzpuZSw0NDpzZSw0NjpkZSw1MDpYLDUyOmdlLDUzOlcsNTQ6eGUsNTk6VSw2MDpGZSw2MTpQZSw2MjpqZSw3MDpJZX0sezE1OlsxLDE0MV19LGkoU2UsWzIsNDldKSx7MTU6WzEsMTQyXX0saShTZSxbMiw1MV0pLGkoU2UsWzIsNTJdKSx7MjI6MTQzLDcwOkllfSx7MjI6MTQ0LDcwOkllfSx7NTY6MTQ1LDc5Ol90fSx7NTY6MTQ2LDc5Ol90fSx7NTY6MTQ3LDc5Ol90fSx7NjQ6WzEsMTQ4XSw3OTpbMiw2Ml19LHs1OlsyLDU1XX0sezU6WzIsNzddfSx7NTpbMiw1Nl19LHs1OlsyLDU3XX0sezU6WzIsNThdfSxpKFNlLFsyLDE2XSksaShDZSxbMiwxMF0pLHsxMjoxNDksNTA6WCw1MjpnZSw1MzpXfSxpKENlLFsyLDEyXSksaShDZSxbMiwxM10pLGkoU2UsWzIsMThdKSxpKFNlLFsyLDM0XSksaShTZSxbMiwzNV0pLGkoU2UsWzIsMzZdKSxpKFNlLFsyLDM3XSksezE1OlsxLDE1MF19LGkoU2UsWzIsMzhdKSx7MTU6WzEsMTUxXX0saShTZSxbMiwzOV0pLGkoU2UsWzIsNDBdKSx7MTU6WzEsMTUyXX0saShTZSxbMiw0MV0pLHs1OlsxLDE1M119LHs1OlsxLDE1NF19LHs1NjoxNTUsNzk6X3R9LHs1NjoxNTYsNzk6X3R9LHs1OlsyLDY3XX0sezU6WzIsNTNdfSx7NTpbMiw1NF19LHsyMjoxNTcsNzA6SWV9LGkoQ2UsWzIsMTFdKSxpKEtlLHAsezc6MTAxLDQwOjE1OH0pLGkoRnQscCx7NzoxMDMsNDI6MTU5fSksaShOZSxwLHs3OjEwNiw0NToxNjB9KSxpKFNlLFsyLDQ4XSksaShTZSxbMiw1MF0pLHs1OlsyLDY1XX0sezU6WzIsNjZdfSx7Nzk6WzIsNjFdfSx7MTY6WzIsNDddfSx7MTY6WzIsNDVdfSx7MTY6WzIsNDNdfV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMV0sNjpbMiwyXSw4NTpbMiw2M10sODY6WzIsNjRdLDExOTpbMiw1NV0sMTIwOlsyLDc3XSwxMjE6WzIsNTZdLDEyMjpbMiw1N10sMTIzOlsyLDU4XSwxNDU6WzIsNjddLDE0NjpbMiw1M10sMTQ3OlsyLDU0XSwxNTU6WzIsNjVdLDE1NjpbMiw2Nl0sMTU3OlsyLDYxXSwxNTg6WzIsNDddLDE1OTpbMiw0NV0sMTYwOlsyLDQzXX0scGFyc2VFcnJvcjpmdW5jdGlvbihQdCxRZSl7aWYoUWUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShQdCk7ZWxzZXt2YXIgRHQ9bmV3IEVycm9yKFB0KTt0aHJvdyBEdC5oYXNoPVFlLER0fX0scGFyc2U6ZnVuY3Rpb24oUHQpe3ZhciBRZT10aGlzLER0PVswXSxrdD1bXSxPbj1bbnVsbF0saHQ9W10senI9dGhpcy50YWJsZSx5dD0iIixqaT0wLHhpPTAsTWE9Mix6cz0xLGFvPWh0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFRyPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksRm49e3l5Ont9fTtmb3IodmFyIHFuIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkscW4pJiYoRm4ueXlbcW5dPXRoaXMueXlbcW5dKTtUci5zZXRJbnB1dChQdCxGbi55eSksRm4ueXkubGV4ZXI9VHIsRm4ueXkucGFyc2VyPXRoaXMsdHlwZW9mIFRyLnl5bGxvYz4idSImJihUci55eWxsb2M9e30pO3ZhciBVbj1Uci55eWxsb2M7aHQucHVzaChVbik7dmFyIEF0PVRyLm9wdGlvbnMmJlRyLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBGbi55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1Gbi55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiB3dCgpe3ZhciBkYTtyZXR1cm4gZGE9a3QucG9wKCl8fFRyLmxleCgpfHx6cyx0eXBlb2YgZGEhPSJudW1iZXIiJiYoZGEgaW5zdGFuY2VvZiBBcnJheSYmKGt0PWRhLGRhPWt0LnBvcCgpKSxkYT1RZS5zeW1ib2xzX1tkYV18fGRhKSxkYX1mb3IodmFyIG9uLGZuLEFuLG9vLGpvPXt9LCRvLFBhLHdvLF9zOzspe2lmKGZuPUR0W0R0Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2ZuXT9Bbj10aGlzLmRlZmF1bHRBY3Rpb25zW2ZuXTooKG9uPT09bnVsbHx8dHlwZW9mIG9uPiJ1IikmJihvbj13dCgpKSxBbj16cltmbl0mJnpyW2ZuXVtvbl0pLHR5cGVvZiBBbj4idSJ8fCFBbi5sZW5ndGh8fCFBblswXSl7dmFyIHRsPSIiO19zPVtdO2ZvcigkbyBpbiB6cltmbl0pdGhpcy50ZXJtaW5hbHNfWyRvXSYmJG8+TWEmJl9zLnB1c2goIiciK3RoaXMudGVybWluYWxzX1skb10rIiciKTtUci5zaG93UG9zaXRpb24/dGw9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoamkrMSkrYDoKYCtUci5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK19zLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bb25dfHxvbikrIiciOnRsPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGppKzEpKyI6IFVuZXhwZWN0ZWQgIisob249PXpzPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW29uXXx8b24pKyInIiksdGhpcy5wYXJzZUVycm9yKHRsLHt0ZXh0OlRyLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tvbl18fG9uLGxpbmU6VHIueXlsaW5lbm8sbG9jOlVuLGV4cGVjdGVkOl9zfSl9aWYoQW5bMF1pbnN0YW5jZW9mIEFycmF5JiZBbi5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2ZuKyIsIHRva2VuOiAiK29uKTtzd2l0Y2goQW5bMF0pe2Nhc2UgMTpEdC5wdXNoKG9uKSxPbi5wdXNoKFRyLnl5dGV4dCksaHQucHVzaChUci55eWxsb2MpLER0LnB1c2goQW5bMV0pLG9uPW51bGwseGk9VHIueXlsZW5nLHl0PVRyLnl5dGV4dCxqaT1Uci55eWxpbmVubyxVbj1Uci55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKFBhPXRoaXMucHJvZHVjdGlvbnNfW0FuWzFdXVsxXSxqby4kPU9uW09uLmxlbmd0aC1QYV0sam8uXyQ9e2ZpcnN0X2xpbmU6aHRbaHQubGVuZ3RoLShQYXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmh0W2h0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmh0W2h0Lmxlbmd0aC0oUGF8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46aHRbaHQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxBdCYmKGpvLl8kLnJhbmdlPVtodFtodC5sZW5ndGgtKFBhfHwxKV0ucmFuZ2VbMF0saHRbaHQubGVuZ3RoLTFdLnJhbmdlWzFdXSksb289dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGpvLFt5dCx4aSxqaSxGbi55eSxBblsxXSxPbixodF0uY29uY2F0KGFvKSksdHlwZW9mIG9vPCJ1IilyZXR1cm4gb287UGEmJihEdD1EdC5zbGljZSgwLC0xKlBhKjIpLE9uPU9uLnNsaWNlKDAsLTEqUGEpLGh0PWh0LnNsaWNlKDAsLTEqUGEpKSxEdC5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0FuWzFdXVswXSksT24ucHVzaChqby4kKSxodC5wdXNoKGpvLl8kKSx3bz16cltEdFtEdC5sZW5ndGgtMl1dW0R0W0R0Lmxlbmd0aC0xXV0sRHQucHVzaCh3byk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEd0PWZ1bmN0aW9uKCl7dmFyIHh0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKFFlLER0KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFFlLER0KTtlbHNlIHRocm93IG5ldyBFcnJvcihRZSl9LHNldElucHV0OmZ1bmN0aW9uKFB0LFFlKXtyZXR1cm4gdGhpcy55eT1RZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9UHQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIFB0PXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1QdCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9UHQsdGhpcy5tYXRjaGVkKz1QdDt2YXIgUWU9UHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBRZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksUHR9LHVucHV0OmZ1bmN0aW9uKFB0KXt2YXIgUWU9UHQubGVuZ3RoLER0PVB0LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9UHQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVFlKSx0aGlzLm9mZnNldC09UWU7dmFyIGt0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLER0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09RHQubGVuZ3RoLTEpO3ZhciBPbj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46RHQ/KER0Lmxlbmd0aD09PWt0Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkra3Rba3QubGVuZ3RoLUR0Lmxlbmd0aF0ubGVuZ3RoLUR0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tUWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bT25bMF0sT25bMF0rdGhpcy55eWxlbmctUWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihQdCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFB0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBQdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFB0Lmxlbmd0aD4yMD8iLi4uIjoiIikrUHQuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgUHQ9dGhpcy5tYXRjaDtyZXR1cm4gUHQubGVuZ3RoPDIwJiYoUHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVB0Lmxlbmd0aCkpLChQdC5zdWJzdHIoMCwyMCkrKFB0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgUHQ9dGhpcy5wYXN0SW5wdXQoKSxRZT1uZXcgQXJyYXkoUHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gUHQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1FlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihQdCxRZSl7dmFyIER0LGt0LE9uO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihPbj17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihPbi55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxrdD1QdFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksa3QmJih0aGlzLnl5bGluZW5vKz1rdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjprdD9rdFtrdC5sZW5ndGgtMV0ubGVuZ3RoLWt0W2t0Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1B0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVB0WzBdLHRoaXMubWF0Y2grPVB0WzBdLHRoaXMubWF0Y2hlcz1QdCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShQdFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9UHRbMF0sRHQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsUWUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksRHQpcmV0dXJuIER0O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBodCBpbiBPbil0aGlzW2h0XT1PbltodF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgUHQsUWUsRHQsa3Q7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgT249dGhpcy5fY3VycmVudFJ1bGVzKCksaHQ9MDtodDxPbi5sZW5ndGg7aHQrKylpZihEdD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW09uW2h0XV0pLER0JiYoIVFlfHxEdFswXS5sZW5ndGg+UWVbMF0ubGVuZ3RoKSl7aWYoUWU9RHQsa3Q9aHQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUHQ9dGhpcy50ZXN0X21hdGNoKER0LE9uW2h0XSksUHQhPT0hMSlyZXR1cm4gUHQ7aWYodGhpcy5fYmFja3RyYWNrKXtRZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBRZT8oUHQ9dGhpcy50ZXN0X21hdGNoKFFlLE9uW2t0XSksUHQhPT0hMT9QdDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIFFlPXRoaXMubmV4dCgpO3JldHVybiBRZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oUWUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChRZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFFlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFFlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oUWUpe3JldHVybiBRZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFFlfHwwKSxRZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW1FlXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihRZSl7dGhpcy5iZWdpbihRZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oUWUsRHQsa3QsT24pe3N3aXRjaChrdCl7Y2FzZSAwOnJldHVybiA1O2Nhc2UgMTpicmVhaztjYXNlIDI6YnJlYWs7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiAxOTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwxNDtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTA7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDUyO2Nhc2UgMTA6cmV0dXJuIDEzO2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTM7Y2FzZSAxMjpyZXR1cm4gRHQueXl0ZXh0PUR0Lnl5dGV4dC50cmltKCksdGhpcy5iZWdpbigiQUxJQVMiKSw3MDtjYXNlIDEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oIkxJTkUiKSw1MTtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM2O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNztjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzg7Y2FzZSAxODpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM5O2Nhc2UgMTk6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0OTtjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDE7Y2FzZSAyMTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQzO2Nhc2UgMjI6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0ODtjYXNlIDIzOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDQ7Y2FzZSAyNDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ3O2Nhc2UgMjU6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0NjtjYXNlIDI2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTU7Y2FzZSAyNzpyZXR1cm4gMTY7Y2FzZSAyODpyZXR1cm4gNjU7Y2FzZSAyOTpyZXR1cm4gNjY7Y2FzZSAzMDpyZXR1cm4gNTk7Y2FzZSAzMTpyZXR1cm4gNjA7Y2FzZSAzMjpyZXR1cm4gNjE7Y2FzZSAzMzpyZXR1cm4gNjI7Y2FzZSAzNDpyZXR1cm4gNTc7Y2FzZSAzNTpyZXR1cm4gNTQ7Y2FzZSAzNjpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyMTtjYXNlIDM3OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIzO2Nhc2UgMzg6cmV0dXJuIDI5O2Nhc2UgMzk6cmV0dXJuIDMwO2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMxO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzMztjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0NDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA0NTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA0NzpyZXR1cm4gNjtjYXNlIDQ4OnJldHVybiAxODtjYXNlIDQ5OnJldHVybiAyMDtjYXNlIDUwOnJldHVybiA2NDtjYXNlIDUxOnJldHVybiA1O2Nhc2UgNTI6cmV0dXJuIER0Lnl5dGV4dD1EdC55eXRleHQudHJpbSgpLDcwO2Nhc2UgNTM6cmV0dXJuIDczO2Nhc2UgNTQ6cmV0dXJuIDc0O2Nhc2UgNTU6cmV0dXJuIDcxO2Nhc2UgNTY6cmV0dXJuIDcyO2Nhc2UgNTc6cmV0dXJuIDc1O2Nhc2UgNTg6cmV0dXJuIDc2O2Nhc2UgNTk6cmV0dXJuIDc3O2Nhc2UgNjA6cmV0dXJuIDc4O2Nhc2UgNjE6cmV0dXJuIDc5O2Nhc2UgNjI6cmV0dXJuIDY4O2Nhc2UgNjM6cmV0dXJuIDY5O2Nhc2UgNjQ6cmV0dXJuIDU7Y2FzZSA2NTpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86WzAtOV0rKD89WyBcbl0rKSkvaSwvXig/OmJveFxiKS9pLC9eKD86cGFydGljaXBhbnRcYikvaSwvXig/OmFjdG9yXGIpL2ksL14oPzpjcmVhdGVcYikvaSwvXig/OmRlc3Ryb3lcYikvaSwvXig/OlteXC0+OlxuLDtdKz8oW1wtXSpbXlwtPjpcbiw7XSs/KSo/KD89KCg/IVxuKVxzKSthcyg/IVxuKVxzfFsjXG47XXwkKSkvaSwvXig/OmFzXGIpL2ksL14oPzooPzopKS9pLC9eKD86bG9vcFxiKS9pLC9eKD86cmVjdFxiKS9pLC9eKD86b3B0XGIpL2ksL14oPzphbHRcYikvaSwvXig/OmVsc2VcYikvaSwvXig/OnBhclxiKS9pLC9eKD86cGFyX292ZXJcYikvaSwvXig/OmFuZFxiKS9pLC9eKD86Y3JpdGljYWxcYikvaSwvXig/Om9wdGlvblxiKS9pLC9eKD86YnJlYWtcYikvaSwvXig/Oig/Ols6XT8oPzpubyk/d3JhcCk/W14jXG47XSopL2ksL14oPzplbmRcYikvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzpsaW5rc1xiKS9pLC9eKD86bGlua1xiKS9pLC9eKD86cHJvcGVydGllc1xiKS9pLC9eKD86ZGV0YWlsc1xiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OnRpdGxlOlxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlcXVlbmNlRGlhZ3JhbVxiKS9pLC9eKD86YXV0b251bWJlclxiKS9pLC9eKD86b2ZmXGIpL2ksL14oPzosKS9pLC9eKD86OykvaSwvXig/OlteXCtcLT46XG4sO10rKCg/ISgteHwtLXh8LVwpfC0tXCkpKVtcLV0qW15cK1wtPjpcbiw7XSspKikvaSwvXig/Oi0+PikvaSwvXig/Oi0tPj4pL2ksL14oPzotPikvaSwvXig/Oi0tPikvaSwvXig/Oi1beF0pL2ksL14oPzotLVt4XSkvaSwvXig/Oi1bXCldKS9pLC9eKD86LS1bXCldKS9pLC9eKD86Oig/Oig/Om5vKT93cmFwKT9bXiNcbjtdKykvaSwvXig/OlwrKS9pLC9eKD86LSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNDUsNDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNDNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNDFdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOlsyLDMsMTJdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOlsyLDMsMTMsMTRdLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzIsMywyNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNCw1LDYsNyw4LDksMTAsMTEsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDIsNDQsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4geHR9KCk7RXQubGV4ZXI9R3Q7ZnVuY3Rpb24gbG4oKXt0aGlzLnl5PXt9fXJldHVybiBsbi5wcm90b3R5cGU9RXQsRXQuUGFyc2VyPWxuLG5ldyBsbn0oKTt5dmUucGFyc2VyPXl2ZTtjb25zdCB5cm49eXZlO2NsYXNzIHhybntjb25zdHJ1Y3RvcihzKXt0aGlzLmluaXQ9cyx0aGlzLnJlY29yZHM9dGhpcy5pbml0KCl9cmVzZXQoKXt0aGlzLnJlY29yZHM9dGhpcy5pbml0KCl9fWNvbnN0IERzPW5ldyB4cm4oKCk9Pih7cHJldkFjdG9yOnZvaWQgMCxhY3RvcnM6e30sY3JlYXRlZEFjdG9yczp7fSxkZXN0cm95ZWRBY3RvcnM6e30sYm94ZXM6W10sbWVzc2FnZXM6W10sbm90ZXM6W10sc2VxdWVuY2VOdW1iZXJzRW5hYmxlZDohMSx3cmFwRW5hYmxlZDp2b2lkIDAsY3VycmVudEJveDp2b2lkIDAsbGFzdENyZWF0ZWQ6dm9pZCAwLGxhc3REZXN0cm95ZWQ6dm9pZCAwfSkpLGtybj1mdW5jdGlvbihpKXtEcy5yZWNvcmRzLmJveGVzLnB1c2goe25hbWU6aS50ZXh0LHdyYXA6aS53cmFwPT09dm9pZCAwJiZKQygpfHwhIWkud3JhcCxmaWxsOmkuY29sb3IsYWN0b3JLZXlzOltdfSksRHMucmVjb3Jkcy5jdXJyZW50Qm94PURzLnJlY29yZHMuYm94ZXMuc2xpY2UoLTEpWzBdfSx4dmU9ZnVuY3Rpb24oaSxzLHUsZCl7bGV0IHA9RHMucmVjb3Jkcy5jdXJyZW50Qm94O2NvbnN0IHY9RHMucmVjb3Jkcy5hY3RvcnNbaV07aWYodil7aWYoRHMucmVjb3Jkcy5jdXJyZW50Qm94JiZ2LmJveCYmRHMucmVjb3Jkcy5jdXJyZW50Qm94IT09di5ib3gpdGhyb3cgbmV3IEVycm9yKCJBIHNhbWUgcGFydGljaXBhbnQgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCBpbiBvbmUgQm94OiAiK3YubmFtZSsiIGNhbid0IGJlIGluICciK3YuYm94Lm5hbWUrIicgYW5kIGluICciK0RzLnJlY29yZHMuY3VycmVudEJveC5uYW1lKyInIGF0IHRoZSBzYW1lIHRpbWUuIik7aWYocD12LmJveD92LmJveDpEcy5yZWNvcmRzLmN1cnJlbnRCb3gsdi5ib3g9cCx2JiZzPT09di5uYW1lJiZ1PT1udWxsKXJldHVybn0odT09bnVsbHx8dS50ZXh0PT1udWxsKSYmKHU9e3RleHQ6cyx3cmFwOm51bGwsdHlwZTpkfSksKGQ9PW51bGx8fHUudGV4dD09bnVsbCkmJih1PXt0ZXh0OnMsd3JhcDpudWxsLHR5cGU6ZH0pLERzLnJlY29yZHMuYWN0b3JzW2ldPXtib3g6cCxuYW1lOnMsZGVzY3JpcHRpb246dS50ZXh0LHdyYXA6dS53cmFwPT09dm9pZCAwJiZKQygpfHwhIXUud3JhcCxwcmV2QWN0b3I6RHMucmVjb3Jkcy5wcmV2QWN0b3IsbGlua3M6e30scHJvcGVydGllczp7fSxhY3RvckNudDpudWxsLHJlY3REYXRhOm51bGwsdHlwZTpkfHwicGFydGljaXBhbnQifSxEcy5yZWNvcmRzLnByZXZBY3RvciYmRHMucmVjb3Jkcy5hY3RvcnNbRHMucmVjb3Jkcy5wcmV2QWN0b3JdJiYoRHMucmVjb3Jkcy5hY3RvcnNbRHMucmVjb3Jkcy5wcmV2QWN0b3JdLm5leHRBY3Rvcj1pKSxEcy5yZWNvcmRzLmN1cnJlbnRCb3gmJkRzLnJlY29yZHMuY3VycmVudEJveC5hY3RvcktleXMucHVzaChpKSxEcy5yZWNvcmRzLnByZXZBY3Rvcj1pfSxFcm49aT0+e2xldCBzLHU9MDtmb3Iocz0wO3M8RHMucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGg7cysrKURzLnJlY29yZHMubWVzc2FnZXNbc10udHlwZT09PUtSLkFDVElWRV9TVEFSVCYmRHMucmVjb3Jkcy5tZXNzYWdlc1tzXS5mcm9tLmFjdG9yPT09aSYmdSsrLERzLnJlY29yZHMubWVzc2FnZXNbc10udHlwZT09PUtSLkFDVElWRV9FTkQmJkRzLnJlY29yZHMubWVzc2FnZXNbc10uZnJvbS5hY3Rvcj09PWkmJnUtLTtyZXR1cm4gdX0sVHJuPWZ1bmN0aW9uKGkscyx1LGQpe0RzLnJlY29yZHMubWVzc2FnZXMucHVzaCh7ZnJvbTppLHRvOnMsbWVzc2FnZTp1LnRleHQsd3JhcDp1LndyYXA9PT12b2lkIDAmJkpDKCl8fCEhdS53cmFwLGFuc3dlcjpkfSl9LEpmPWZ1bmN0aW9uKGkscyx1PXt0ZXh0OnZvaWQgMCx3cmFwOnZvaWQgMH0sZCxwPSExKXtpZihkPT09S1IuQUNUSVZFX0VORCYmRXJuKGkuYWN0b3IpPDEpe2xldCBiPW5ldyBFcnJvcigiVHJ5aW5nIHRvIGluYWN0aXZhdGUgYW4gaW5hY3RpdmUgcGFydGljaXBhbnQgKCIraS5hY3RvcisiKSIpO3Rocm93IGIuaGFzaD17dGV4dDoiLT4+LSIsdG9rZW46Ii0+Pi0iLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiJ0FDVElWRV9QQVJUSUNJUEFOVCciXX0sYn1yZXR1cm4gRHMucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtmcm9tOmksdG86cyxtZXNzYWdlOnUudGV4dCx3cmFwOnUud3JhcD09PXZvaWQgMCYmSkMoKXx8ISF1LndyYXAsdHlwZTpkLGFjdGl2YXRlOnB9KSwhMH0sQ3JuPWZ1bmN0aW9uKCl7cmV0dXJuIERzLnJlY29yZHMuYm94ZXMubGVuZ3RoPjB9LFNybj1mdW5jdGlvbigpe3JldHVybiBEcy5yZWNvcmRzLmJveGVzLnNvbWUoaT0+aS5uYW1lKX0sX3JuPWZ1bmN0aW9uKCl7cmV0dXJuIERzLnJlY29yZHMubWVzc2FnZXN9LEFybj1mdW5jdGlvbigpe3JldHVybiBEcy5yZWNvcmRzLmJveGVzfSxMcm49ZnVuY3Rpb24oKXtyZXR1cm4gRHMucmVjb3Jkcy5hY3RvcnN9LE1ybj1mdW5jdGlvbigpe3JldHVybiBEcy5yZWNvcmRzLmNyZWF0ZWRBY3RvcnN9LERybj1mdW5jdGlvbigpe3JldHVybiBEcy5yZWNvcmRzLmRlc3Ryb3llZEFjdG9yc30sR1I9ZnVuY3Rpb24oaSl7cmV0dXJuIERzLnJlY29yZHMuYWN0b3JzW2ldfSxJcm49ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoRHMucmVjb3Jkcy5hY3RvcnMpfSxPcm49ZnVuY3Rpb24oKXtEcy5yZWNvcmRzLnNlcXVlbmNlTnVtYmVyc0VuYWJsZWQ9ITB9LE5ybj1mdW5jdGlvbigpe0RzLnJlY29yZHMuc2VxdWVuY2VOdW1iZXJzRW5hYmxlZD0hMX0sUHJuPSgpPT5Ecy5yZWNvcmRzLnNlcXVlbmNlTnVtYmVyc0VuYWJsZWQsQnJuPWZ1bmN0aW9uKGkpe0RzLnJlY29yZHMud3JhcEVuYWJsZWQ9aX0sSkM9KCk9PkRzLnJlY29yZHMud3JhcEVuYWJsZWQhPT12b2lkIDA/RHMucmVjb3Jkcy53cmFwRW5hYmxlZDpxdCgpLnNlcXVlbmNlLndyYXAsRnJuPWZ1bmN0aW9uKCl7RHMucmVzZXQoKSxQZygpfSxScm49ZnVuY3Rpb24oaSl7Y29uc3Qgcz1pLnRyaW0oKSx1PXt0ZXh0OnMucmVwbGFjZSgvXjo/KD86bm8pP3dyYXA6LywiIikudHJpbSgpLHdyYXA6cy5tYXRjaCgvXjo/d3JhcDovKSE9PW51bGw/ITA6cy5tYXRjaCgvXjo/bm93cmFwOi8pIT09bnVsbD8hMTp2b2lkIDB9O3JldHVybiBYZS5kZWJ1ZygicGFyc2VNZXNzYWdlOiIsdSksdX0sanJuPWZ1bmN0aW9uKGkpe2NvbnN0IHM9aS5tYXRjaCgvXigoPzpyZ2JhP3xoc2xhPylccypcKC4qXCl8XHcqKSguKikkLyk7bGV0IHU9cyE9bnVsbCYmc1sxXT9zWzFdLnRyaW0oKToidHJhbnNwYXJlbnQiLGQ9cyE9bnVsbCYmc1syXT9zWzJdLnRyaW0oKTp2b2lkIDA7aWYod2luZG93JiZ3aW5kb3cuQ1NTKXdpbmRvdy5DU1Muc3VwcG9ydHMoImNvbG9yIix1KXx8KHU9InRyYW5zcGFyZW50IixkPWkudHJpbSgpKTtlbHNle2NvbnN0IHA9bmV3IE9wdGlvbigpLnN0eWxlO3AuY29sb3I9dSxwLmNvbG9yIT09dSYmKHU9InRyYW5zcGFyZW50IixkPWkudHJpbSgpKX1yZXR1cm57Y29sb3I6dSx0ZXh0OmQhPT12b2lkIDA/WWYoZC5yZXBsYWNlKC9eOj8oPzpubyk/d3JhcDovLCIiKSxxdCgpKTp2b2lkIDAsd3JhcDpkIT09dm9pZCAwP2QubWF0Y2goL146P3dyYXA6LykhPT1udWxsPyEwOmQubWF0Y2goL146P25vd3JhcDovKSE9PW51bGw/ITE6dm9pZCAwOnZvaWQgMH19LEtSPXtTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNSxBVVRPTlVNQkVSOjI2LENSSVRJQ0FMX1NUQVJUOjI3LENSSVRJQ0FMX09QVElPTjoyOCxDUklUSUNBTF9FTkQ6MjksQlJFQUtfU1RBUlQ6MzAsQlJFQUtfRU5EOjMxLFBBUl9PVkVSX1NUQVJUOjMyfSwkcm49e0ZJTExFRDowLE9QRU46MX0senJuPXtMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxER2U9ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9e2FjdG9yOmkscGxhY2VtZW50OnMsbWVzc2FnZTp1LnRleHQsd3JhcDp1LndyYXA9PT12b2lkIDAmJkpDKCl8fCEhdS53cmFwfSxwPVtdLmNvbmNhdChpLGkpO0RzLnJlY29yZHMubm90ZXMucHVzaChkKSxEcy5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2Zyb206cFswXSx0bzpwWzFdLG1lc3NhZ2U6dS50ZXh0LHdyYXA6dS53cmFwPT09dm9pZCAwJiZKQygpfHwhIXUud3JhcCx0eXBlOktSLk5PVEUscGxhY2VtZW50OnN9KX0sSUdlPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1HUihpKTt0cnl7bGV0IGQ9WWYocy50ZXh0LHF0KCkpO2Q9ZC5yZXBsYWNlKC8mYW1wOy9nLCImIiksZD1kLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKTtjb25zdCBwPUpTT04ucGFyc2UoZCk7a3ZlKHUscCl9Y2F0Y2goZCl7WGUuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0IixkKX19LHFybj1mdW5jdGlvbihpLHMpe2NvbnN0IHU9R1IoaSk7dHJ5e2NvbnN0IGI9e307bGV0IHk9WWYocy50ZXh0LHF0KCkpO3ZhciBkPXkuaW5kZXhPZigiQCIpO3k9eS5yZXBsYWNlKC8mYW1wOy9nLCImIikseT15LnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKTt2YXIgcD15LnNsaWNlKDAsZC0xKS50cmltKCksdj15LnNsaWNlKGQrMSkudHJpbSgpO2JbcF09dixrdmUodSxiKX1jYXRjaChiKXtYZS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHQiLGIpfX07ZnVuY3Rpb24ga3ZlKGkscyl7aWYoaS5saW5rcz09bnVsbClpLmxpbmtzPXM7ZWxzZSBmb3IobGV0IHUgaW4gcylpLmxpbmtzW3VdPXNbdV19Y29uc3QgT0dlPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1HUihpKTt0cnl7bGV0IGQ9WWYocy50ZXh0LHF0KCkpO2NvbnN0IHA9SlNPTi5wYXJzZShkKTtOR2UodSxwKX1jYXRjaChkKXtYZS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBwcm9wZXJ0aWVzIHRleHQiLGQpfX07ZnVuY3Rpb24gTkdlKGkscyl7aWYoaS5wcm9wZXJ0aWVzPT1udWxsKWkucHJvcGVydGllcz1zO2Vsc2UgZm9yKGxldCB1IGluIHMpaS5wcm9wZXJ0aWVzW3VdPXNbdV19ZnVuY3Rpb24gSHJuKCl7RHMucmVjb3Jkcy5jdXJyZW50Qm94PXZvaWQgMH1jb25zdCBQR2U9ZnVuY3Rpb24oaSxzKXtjb25zdCB1PUdSKGkpLGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocy50ZXh0KTt0cnl7Y29uc3QgcD1kLmlubmVySFRNTCx2PUpTT04ucGFyc2UocCk7di5wcm9wZXJ0aWVzJiZOR2UodSx2LnByb3BlcnRpZXMpLHYubGlua3MmJmt2ZSh1LHYubGlua3MpfWNhdGNoKHApe1hlLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGRldGFpbHMgdGV4dCIscCl9fSxWcm49ZnVuY3Rpb24oaSxzKXtpZihpIT09dm9pZCAwJiZpLnByb3BlcnRpZXMhPT12b2lkIDApcmV0dXJuIGkucHJvcGVydGllc1tzXX0sQkdlPWZ1bmN0aW9uKGkpe2lmKEFycmF5LmlzQXJyYXkoaSkpaS5mb3JFYWNoKGZ1bmN0aW9uKHMpe0JHZShzKX0pO2Vsc2Ugc3dpdGNoKGkudHlwZSl7Y2FzZSJzZXF1ZW5jZUluZGV4IjpEcy5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2Zyb206dm9pZCAwLHRvOnZvaWQgMCxtZXNzYWdlOntzdGFydDppLnNlcXVlbmNlSW5kZXgsc3RlcDppLnNlcXVlbmNlSW5kZXhTdGVwLHZpc2libGU6aS5zZXF1ZW5jZVZpc2libGV9LHdyYXA6ITEsdHlwZTppLnNpZ25hbFR5cGV9KTticmVhaztjYXNlImFkZFBhcnRpY2lwYW50Ijp4dmUoaS5hY3RvcixpLmFjdG9yLGkuZGVzY3JpcHRpb24saS5kcmF3KTticmVhaztjYXNlImNyZWF0ZVBhcnRpY2lwYW50IjppZihEcy5yZWNvcmRzLmFjdG9yc1tpLmFjdG9yXSl0aHJvdyBuZXcgRXJyb3IoIkl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlIGFjdG9ycyB3aXRoIHRoZSBzYW1lIGlkLCBldmVuIGlmIG9uZSBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZSBuZXh0IGlzIGNyZWF0ZWQuIFVzZSAnQVMnIGFsaWFzZXMgdG8gc2ltdWxhdGUgdGhlIGJlaGF2aW9yIik7RHMucmVjb3Jkcy5sYXN0Q3JlYXRlZD1pLmFjdG9yLHh2ZShpLmFjdG9yLGkuYWN0b3IsaS5kZXNjcmlwdGlvbixpLmRyYXcpLERzLnJlY29yZHMuY3JlYXRlZEFjdG9yc1tpLmFjdG9yXT1Ecy5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aDticmVhaztjYXNlImRlc3Ryb3lQYXJ0aWNpcGFudCI6RHMucmVjb3Jkcy5sYXN0RGVzdHJveWVkPWkuYWN0b3IsRHMucmVjb3Jkcy5kZXN0cm95ZWRBY3RvcnNbaS5hY3Rvcl09RHMucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGg7YnJlYWs7Y2FzZSJhY3RpdmVTdGFydCI6SmYoaS5hY3Rvcix2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhY3RpdmVFbmQiOkpmKGkuYWN0b3Isdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWRkTm90ZSI6REdlKGkuYWN0b3IsaS5wbGFjZW1lbnQsaS50ZXh0KTticmVhaztjYXNlImFkZExpbmtzIjpJR2UoaS5hY3RvcixpLnRleHQpO2JyZWFrO2Nhc2UiYWRkQUxpbmsiOnFybihpLmFjdG9yLGkudGV4dCk7YnJlYWs7Y2FzZSJhZGRQcm9wZXJ0aWVzIjpPR2UoaS5hY3RvcixpLnRleHQpO2JyZWFrO2Nhc2UiYWRkRGV0YWlscyI6UEdlKGkuYWN0b3IsaS50ZXh0KTticmVhaztjYXNlImFkZE1lc3NhZ2UiOmlmKERzLnJlY29yZHMubGFzdENyZWF0ZWQpe2lmKGkudG8hPT1Ecy5yZWNvcmRzLmxhc3RDcmVhdGVkKXRocm93IG5ldyBFcnJvcigiVGhlIGNyZWF0ZWQgcGFydGljaXBhbnQgIitEcy5yZWNvcmRzLmxhc3RDcmVhdGVkKyIgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGNyZWF0aW5nIG1lc3NhZ2UgYWZ0ZXIgaXRzIGRlY2xhcmF0aW9uLiBQbGVhc2UgY2hlY2sgdGhlIHNlcXVlbmNlIGRpYWdyYW0uIik7RHMucmVjb3Jkcy5sYXN0Q3JlYXRlZD12b2lkIDB9ZWxzZSBpZihEcy5yZWNvcmRzLmxhc3REZXN0cm95ZWQpe2lmKGkudG8hPT1Ecy5yZWNvcmRzLmxhc3REZXN0cm95ZWQmJmkuZnJvbSE9PURzLnJlY29yZHMubGFzdERlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBkZXN0cm95ZWQgcGFydGljaXBhbnQgIitEcy5yZWNvcmRzLmxhc3REZXN0cm95ZWQrIiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZGVzdHJveWluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLiIpO0RzLnJlY29yZHMubGFzdERlc3Ryb3llZD12b2lkIDB9SmYoaS5mcm9tLGkudG8saS5tc2csaS5zaWduYWxUeXBlLGkuYWN0aXZhdGUpO2JyZWFrO2Nhc2UiYm94U3RhcnQiOmtybihpLmJveERhdGEpO2JyZWFrO2Nhc2UiYm94RW5kIjpIcm4oKTticmVhaztjYXNlImxvb3BTdGFydCI6SmYodm9pZCAwLHZvaWQgMCxpLmxvb3BUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wRW5kIjpKZih2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdFN0YXJ0IjpKZih2b2lkIDAsdm9pZCAwLGkuY29sb3IsaS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RFbmQiOkpmKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6SmYodm9pZCAwLHZvaWQgMCxpLm9wdFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdEVuZCI6SmYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0IjpKZih2b2lkIDAsdm9pZCAwLGkuYWx0VGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiZWxzZSI6SmYodm9pZCAwLHZvaWQgMCxpLmFsdFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdEVuZCI6SmYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlInNldEFjY1RpdGxlIjpCZyhpLnRleHQpO2JyZWFrO2Nhc2UicGFyU3RhcnQiOkpmKHZvaWQgMCx2b2lkIDAsaS5wYXJUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbmQiOkpmKHZvaWQgMCx2b2lkIDAsaS5wYXJUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJwYXJFbmQiOkpmKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbFN0YXJ0IjpKZih2b2lkIDAsdm9pZCAwLGkuY3JpdGljYWxUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRpb24iOkpmKHZvaWQgMCx2b2lkIDAsaS5vcHRpb25UZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbEVuZCI6SmYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrU3RhcnQiOkpmKHZvaWQgMCx2b2lkIDAsaS5icmVha1RleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrRW5kIjpKZih2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrfX0sRkdlPXthZGRBY3Rvcjp4dmUsYWRkTWVzc2FnZTpUcm4sYWRkU2lnbmFsOkpmLGFkZExpbmtzOklHZSxhZGREZXRhaWxzOlBHZSxhZGRQcm9wZXJ0aWVzOk9HZSxhdXRvV3JhcDpKQyxzZXRXcmFwOkJybixlbmFibGVTZXF1ZW5jZU51bWJlcnM6T3JuLGRpc2FibGVTZXF1ZW5jZU51bWJlcnM6TnJuLHNob3dTZXF1ZW5jZU51bWJlcnM6UHJuLGdldE1lc3NhZ2VzOl9ybixnZXRBY3RvcnM6THJuLGdldENyZWF0ZWRBY3RvcnM6TXJuLGdldERlc3Ryb3llZEFjdG9yczpEcm4sZ2V0QWN0b3I6R1IsZ2V0QWN0b3JLZXlzOklybixnZXRBY3RvclByb3BlcnR5OlZybixnZXRBY2NUaXRsZTpDcCxnZXRCb3hlczpBcm4sZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldERpYWdyYW1UaXRsZTpjbSxnZXRDb25maWc6KCk9PnF0KCkuc2VxdWVuY2UsY2xlYXI6RnJuLHBhcnNlTWVzc2FnZTpScm4scGFyc2VCb3hEYXRhOmpybixMSU5FVFlQRTpLUixBUlJPV1RZUEU6JHJuLFBMQUNFTUVOVDp6cm4sYWRkTm90ZTpER2Usc2V0QWNjVGl0bGU6QmcsYXBwbHk6QkdlLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLGhhc0F0TGVhc3RPbmVCb3g6Q3JuLGhhc0F0TGVhc3RPbmVCb3hXaXRoVGl0bGU6U3JufSxVcm49aT0+YC5hY3RvciB7CiAgICBzdHJva2U6ICR7aS5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke2kuYWN0b3JCa2d9OwogIH0KCiAgdGV4dC5hY3RvciA+IHRzcGFuIHsKICAgIGZpbGw6ICR7aS5hY3RvclRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0b3ItbGluZSB7CiAgICBzdHJva2U6ICR7aS5hY3RvckxpbmVDb2xvcn07CiAgfQoKICAubWVzc2FnZUxpbmUwIHsKICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsKICAgIHN0cm9rZTogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTEgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke2kuc2lnbmFsQ29sb3J9OwogIH0KCiAgI2Fycm93aGVhZCBwYXRoIHsKICAgIGZpbGw6ICR7aS5zaWduYWxDb2xvcn07CiAgICBzdHJva2U6ICR7aS5zaWduYWxDb2xvcn07CiAgfQoKICAuc2VxdWVuY2VOdW1iZXIgewogICAgZmlsbDogJHtpLnNlcXVlbmNlTnVtYmVyQ29sb3J9OwogIH0KCiAgI3NlcXVlbmNlbnVtYmVyIHsKICAgIGZpbGw6ICR7aS5zaWduYWxDb2xvcn07CiAgfQoKICAjY3Jvc3NoZWFkIHBhdGggewogICAgZmlsbDogJHtpLnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlVGV4dCB7CiAgICBmaWxsOiAke2kuc2lnbmFsVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sYWJlbEJveCB7CiAgICBzdHJva2U6ICR7aS5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5sYWJlbEJveEJrZ0NvbG9yfTsKICB9CgogIC5sYWJlbFRleHQsIC5sYWJlbFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke2kubGFiZWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke2kubG9vcFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcExpbmUgewogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke2kubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgfQoKICAubm90ZSB7CiAgICAvL3N0cm9rZTogI2RlY2M5MzsKICAgIHN0cm9rZTogJHtpLm5vdGVCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kubm90ZUJrZ0NvbG9yfTsKICB9CgogIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4gewogICAgZmlsbDogJHtpLm5vdGVUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmFjdGl2YXRpb24wIHsKICAgIGZpbGw6ICR7aS5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMSB7CiAgICBmaWxsOiAke2kuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZhdGlvbjIgewogICAgZmlsbDogJHtpLmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7aS5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdG9yUG9wdXBNZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB9CgogIC5hY3RvclBvcHVwTWVudVBhbmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGZpbGw6ICR7aS5hY3RvckJrZ307CiAgICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4yKTsKICAgIGZpbHRlcjogZHJvcC1zaGFkb3coM3B4IDVweCAycHggcmdiKDAgMCAwIC8gMC40KSk7Cn0KICAuYWN0b3ItbWFuIGxpbmUgewogICAgc3Ryb2tlOiAke2kuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHtpLmFjdG9yQmtnfTsKICB9CiAgLmFjdG9yLW1hbiBjaXJjbGUsIGxpbmUgewogICAgc3Ryb2tlOiAke2kuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHtpLmFjdG9yQmtnfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KYCxaQz0xOCoyLFJHZT0iYWN0b3ItdG9wIixqR2U9ImFjdG9yLWJvdHRvbSIsRXZlPWZ1bmN0aW9uKGkscyl7cmV0dXJuIEFRKGkscyl9LEdybj1mdW5jdGlvbihpLHMsdSxkLHApe2lmKHMubGlua3M9PT12b2lkIDB8fHMubGlua3M9PT1udWxsfHxPYmplY3Qua2V5cyhzLmxpbmtzKS5sZW5ndGg9PT0wKXJldHVybntoZWlnaHQ6MCx3aWR0aDowfTtjb25zdCB2PXMubGlua3MsYj1zLmFjdG9yQ250LHk9cy5yZWN0RGF0YTt2YXIgVD0ibm9uZSI7cCYmKFQ9ImJsb2NrICFpbXBvcnRhbnQiKTtjb25zdCBfPWkuYXBwZW5kKCJnIik7Xy5hdHRyKCJpZCIsImFjdG9yIitiKyJfcG9wdXAiKSxfLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnUiKSxfLmF0dHIoImRpc3BsYXkiLFQpO3ZhciBBPSIiO3kuY2xhc3MhPT12b2lkIDAmJihBPSIgIit5LmNsYXNzKTtsZXQgUD15LndpZHRoPnU/eS53aWR0aDp1O2NvbnN0IFI9Xy5hcHBlbmQoInJlY3QiKTtpZihSLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnVQYW5lbCIrQSksUi5hdHRyKCJ4Iix5LngpLFIuYXR0cigieSIseS5oZWlnaHQpLFIuYXR0cigiZmlsbCIseS5maWxsKSxSLmF0dHIoInN0cm9rZSIseS5zdHJva2UpLFIuYXR0cigid2lkdGgiLFApLFIuYXR0cigiaGVpZ2h0Iix5LmhlaWdodCksUi5hdHRyKCJyeCIseS5yeCksUi5hdHRyKCJyeSIseS5yeSksdiE9bnVsbCl7dmFyIEY9MjA7Zm9yKGxldCBlZSBpbiB2KXt2YXIgaj1fLmFwcGVuZCgiYSIpLEs9cDkuc2FuaXRpemVVcmwodltlZV0pO2ouYXR0cigieGxpbms6aHJlZiIsSyksai5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKSx1aW4oZCkoZWUsaix5LngrMTAseS5oZWlnaHQrRixQLDIwLHtjbGFzczoiYWN0b3IifSxkKSxGKz0zMH19cmV0dXJuIFIuYXR0cigiaGVpZ2h0IixGKSx7aGVpZ2h0OnkuaGVpZ2h0K0Ysd2lkdGg6UH19LEtybj1mdW5jdGlvbihpKXtyZXR1cm4idmFyIHB1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIraSsiJyk7IGlmIChwdSAhPSBudWxsKSB7IHB1LnN0eWxlLmRpc3BsYXkgPSBwdS5zdHlsZS5kaXNwbGF5ID09ICdibG9jaycgPyAnbm9uZScgOiAnYmxvY2snOyB9In0scEo9YXN5bmMgZnVuY3Rpb24oaSxzLHU9bnVsbCl7bGV0IGQ9aS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKTtjb25zdCBwPWF3YWl0IENDKHMudGV4dCxWaCgpKSxiPWQuYXBwZW5kKCJ4aHRtbDpkaXYiKS5hdHRyKCJzdHlsZSIsIndpZHRoOiBmaXQtY29udGVudDsiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKS5odG1sKHApLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihkLmF0dHIoImhlaWdodCIsTWF0aC5yb3VuZChiLmhlaWdodCkpLmF0dHIoIndpZHRoIixNYXRoLnJvdW5kKGIud2lkdGgpKSxzLmNsYXNzPT09Im5vdGVUZXh0Iil7Y29uc3QgeT1pLm5vZGUoKS5maXJzdENoaWxkO3kuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGIuaGVpZ2h0KzIqcy50ZXh0TWFyZ2luKTtjb25zdCBUPXkuZ2V0QkJveCgpO2QuYXR0cigieCIsTWF0aC5yb3VuZChULngrVC53aWR0aC8yLWIud2lkdGgvMikpLmF0dHIoInkiLE1hdGgucm91bmQoVC55K1QuaGVpZ2h0LzItYi5oZWlnaHQvMikpfWVsc2UgaWYodSl7bGV0e3N0YXJ0eDp5LHN0b3B4OlQsc3RhcnR5Ol99PXU7aWYoeT5UKXtjb25zdCBBPXk7eT1ULFQ9QX1kLmF0dHIoIngiLE1hdGgucm91bmQoeStNYXRoLmFicyh5LVQpLzItYi53aWR0aC8yKSkscy5jbGFzcz09PSJsb29wVGV4dCI/ZC5hdHRyKCJ5IixNYXRoLnJvdW5kKF8pKTpkLmF0dHIoInkiLE1hdGgucm91bmQoXy1iLmhlaWdodCkpfXJldHVybltkXX0sWUQ9ZnVuY3Rpb24oaSxzKXtsZXQgdT0wLGQ9MDtjb25zdCBwPXMudGV4dC5zcGxpdChjaS5saW5lQnJlYWtSZWdleCksW3YsYl09TkMocy5mb250U2l6ZSk7bGV0IHk9W10sVD0wLF89KCk9PnMueTtpZihzLnZhbGlnbiE9PXZvaWQgMCYmcy50ZXh0TWFyZ2luIT09dm9pZCAwJiZzLnRleHRNYXJnaW4+MClzd2l0Y2gocy52YWxpZ24pe2Nhc2UidG9wIjpjYXNlInN0YXJ0IjpfPSgpPT5NYXRoLnJvdW5kKHMueStzLnRleHRNYXJnaW4pO2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6Xz0oKT0+TWF0aC5yb3VuZChzLnkrKHUrZCtzLnRleHRNYXJnaW4pLzIpO2JyZWFrO2Nhc2UiYm90dG9tIjpjYXNlImVuZCI6Xz0oKT0+TWF0aC5yb3VuZChzLnkrKHUrZCsyKnMudGV4dE1hcmdpbiktcy50ZXh0TWFyZ2luKTticmVha31pZihzLmFuY2hvciE9PXZvaWQgMCYmcy50ZXh0TWFyZ2luIT09dm9pZCAwJiZzLndpZHRoIT09dm9pZCAwKXN3aXRjaChzLmFuY2hvcil7Y2FzZSJsZWZ0IjpjYXNlInN0YXJ0IjpzLng9TWF0aC5yb3VuZChzLngrcy50ZXh0TWFyZ2luKSxzLmFuY2hvcj0ic3RhcnQiLHMuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixzLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6cy54PU1hdGgucm91bmQocy54K3Mud2lkdGgvMikscy5hbmNob3I9Im1pZGRsZSIscy5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLHMuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJyaWdodCI6Y2FzZSJlbmQiOnMueD1NYXRoLnJvdW5kKHMueCtzLndpZHRoLXMudGV4dE1hcmdpbikscy5hbmNob3I9ImVuZCIscy5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLHMuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWt9Zm9yKGxldFtBLFBdb2YgcC5lbnRyaWVzKCkpe3MudGV4dE1hcmdpbiE9PXZvaWQgMCYmcy50ZXh0TWFyZ2luPT09MCYmdiE9PXZvaWQgMCYmKFQ9QSp2KTtjb25zdCBSPWkuYXBwZW5kKCJ0ZXh0Iik7Ui5hdHRyKCJ4IixzLngpLFIuYXR0cigieSIsXygpKSxzLmFuY2hvciE9PXZvaWQgMCYmUi5hdHRyKCJ0ZXh0LWFuY2hvciIscy5hbmNob3IpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixzLmRvbWluYW50QmFzZWxpbmUpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIscy5hbGlnbm1lbnRCYXNlbGluZSkscy5mb250RmFtaWx5IT09dm9pZCAwJiZSLnN0eWxlKCJmb250LWZhbWlseSIscy5mb250RmFtaWx5KSxiIT09dm9pZCAwJiZSLnN0eWxlKCJmb250LXNpemUiLGIpLHMuZm9udFdlaWdodCE9PXZvaWQgMCYmUi5zdHlsZSgiZm9udC13ZWlnaHQiLHMuZm9udFdlaWdodCkscy5maWxsIT09dm9pZCAwJiZSLmF0dHIoImZpbGwiLHMuZmlsbCkscy5jbGFzcyE9PXZvaWQgMCYmUi5hdHRyKCJjbGFzcyIscy5jbGFzcykscy5keSE9PXZvaWQgMD9SLmF0dHIoImR5IixzLmR5KTpUIT09MCYmUi5hdHRyKCJkeSIsVCk7Y29uc3QgRj1QfHxoamU7aWYocy50c3Bhbil7Y29uc3Qgaj1SLmFwcGVuZCgidHNwYW4iKTtqLmF0dHIoIngiLHMueCkscy5maWxsIT09dm9pZCAwJiZqLmF0dHIoImZpbGwiLHMuZmlsbCksai50ZXh0KEYpfWVsc2UgUi50ZXh0KEYpO3MudmFsaWduIT09dm9pZCAwJiZzLnRleHRNYXJnaW4hPT12b2lkIDAmJnMudGV4dE1hcmdpbj4wJiYoZCs9KFIuX2dyb3Vwc3x8UilbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCx1PWQpLHkucHVzaChSKX1yZXR1cm4geX0sJEdlPWZ1bmN0aW9uKGkscyl7ZnVuY3Rpb24gdShwLHYsYix5LFQpe3JldHVybiBwKyIsIit2KyIgIisocCtiKSsiLCIrdisiICIrKHArYikrIiwiKyh2K3ktVCkrIiAiKyhwK2ItVCoxLjIpKyIsIisodit5KSsiICIrcCsiLCIrKHYreSl9Y29uc3QgZD1pLmFwcGVuZCgicG9seWdvbiIpO3JldHVybiBkLmF0dHIoInBvaW50cyIsdShzLngscy55LHMud2lkdGgscy5oZWlnaHQsNykpLGQuYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLHMueT1zLnkrcy5oZWlnaHQvMixZRChpLHMpLGR9O2xldCBzNT0tMTtjb25zdCB6R2U9KGkscyx1LGQpPT57aS5zZWxlY3QmJnUuZm9yRWFjaChwPT57Y29uc3Qgdj1zW3BdLGI9aS5zZWxlY3QoIiNhY3RvciIrdi5hY3RvckNudCk7IWQubWlycm9yQWN0b3JzJiZ2LnN0b3B5P2IuYXR0cigieTIiLHYuc3RvcHkrdi5oZWlnaHQvMik6ZC5taXJyb3JBY3RvcnMmJmIuYXR0cigieTIiLHYuc3RvcHkpfSl9LFdybj1hc3luYyBmdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPWQ/cy5zdG9weTpzLnN0YXJ0eSx2PXMueCtzLndpZHRoLzIsYj1wKzUseT1pLmFwcGVuZCgiZyIpLmxvd2VyKCk7dmFyIFQ9eTtkfHwoczUrKyxPYmplY3Qua2V5cyhzLmxpbmtzfHx7fSkubGVuZ3RoJiYhdS5mb3JjZU1lbnVzJiZULmF0dHIoIm9uY2xpY2siLEtybihgYWN0b3Ike3M1fV9wb3B1cGApKS5hdHRyKCJjdXJzb3IiLCJwb2ludGVyIiksVC5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIitzNSkuYXR0cigieDEiLHYpLmF0dHIoInkxIixiKS5hdHRyKCJ4MiIsdikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigiY2xhc3MiLCIyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKSxUPXkuYXBwZW5kKCJnIikscy5hY3RvckNudD1zNSxzLmxpbmtzIT1udWxsJiZULmF0dHIoImlkIiwicm9vdC0iK3M1KSk7Y29uc3QgXz1xQygpO3ZhciBBPSJhY3RvciI7cy5wcm9wZXJ0aWVzIT1udWxsJiZzLnByb3BlcnRpZXMuY2xhc3M/QT1zLnByb3BlcnRpZXMuY2xhc3M6Xy5maWxsPSIjZWFlYWVhIixkP0ErPWAgJHtqR2V9YDpBKz1gICR7UkdlfWAsXy54PXMueCxfLnk9cCxfLndpZHRoPXMud2lkdGgsXy5oZWlnaHQ9cy5oZWlnaHQsXy5jbGFzcz1BLF8ucng9MyxfLnJ5PTMsXy5uYW1lPXMubmFtZTtjb25zdCBQPUV2ZShULF8pO2lmKHMucmVjdERhdGE9XyxzLnByb3BlcnRpZXMhPW51bGwmJnMucHJvcGVydGllcy5pY29uKXtjb25zdCBGPXMucHJvcGVydGllcy5pY29uLnRyaW0oKTtGLmNoYXJBdCgwKT09PSJAIj9yVXQoVCxfLngrXy53aWR0aC0yMCxfLnkrMTAsRi5zdWJzdHIoMSkpOm5VdChULF8ueCtfLndpZHRoLTIwLF8ueSsxMCxGKX1hd2FpdCBUdmUodSxEdihzLmRlc2NyaXB0aW9uKSkocy5kZXNjcmlwdGlvbixULF8ueCxfLnksXy53aWR0aCxfLmhlaWdodCx7Y2xhc3M6ImFjdG9yIn0sdSk7bGV0IFI9cy5oZWlnaHQ7aWYoUC5ub2RlKXtjb25zdCBGPVAubm9kZSgpLmdldEJCb3goKTtzLmhlaWdodD1GLmhlaWdodCxSPUYuaGVpZ2h0fXJldHVybiBSfSxZcm49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD1kP3Muc3RvcHk6cy5zdGFydHksdj1zLngrcy53aWR0aC8yLGI9cCs4MDtpLmxvd2VyKCksZHx8KHM1KyssaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIitzNSkuYXR0cigieDEiLHYpLmF0dHIoInkxIixiKS5hdHRyKCJ4MiIsdikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigiY2xhc3MiLCIyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKSxzLmFjdG9yQ250PXM1KTtjb25zdCB5PWkuYXBwZW5kKCJnIik7bGV0IFQ9ImFjdG9yLW1hbiI7ZD9UKz1gICR7akdlfWA6VCs9YCAke1JHZX1gLHkuYXR0cigiY2xhc3MiLFQpLHkuYXR0cigibmFtZSIscy5uYW1lKTtjb25zdCBfPXFDKCk7Xy54PXMueCxfLnk9cCxfLmZpbGw9IiNlYWVhZWEiLF8ud2lkdGg9cy53aWR0aCxfLmhlaWdodD1zLmhlaWdodCxfLmNsYXNzPSJhY3RvciIsXy5yeD0zLF8ucnk9Myx5LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLXRvcnNvIitzNSkuYXR0cigieDEiLHYpLmF0dHIoInkxIixwKzI1KS5hdHRyKCJ4MiIsdikuYXR0cigieTIiLHArNDUpLHkuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3Rvci1tYW4tYXJtcyIrczUpLmF0dHIoIngxIix2LVpDLzIpLmF0dHIoInkxIixwKzMzKS5hdHRyKCJ4MiIsditaQy8yKS5hdHRyKCJ5MiIscCszMykseS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsdi1aQy8yKS5hdHRyKCJ5MSIscCs2MCkuYXR0cigieDIiLHYpLmF0dHIoInkyIixwKzQ1KSx5LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIix2KS5hdHRyKCJ5MSIscCs0NSkuYXR0cigieDIiLHYrWkMvMi0yKS5hdHRyKCJ5MiIscCs2MCk7Y29uc3QgQT15LmFwcGVuZCgiY2lyY2xlIik7QS5hdHRyKCJjeCIscy54K3Mud2lkdGgvMiksQS5hdHRyKCJjeSIscCsxMCksQS5hdHRyKCJyIiwxNSksQS5hdHRyKCJ3aWR0aCIscy53aWR0aCksQS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KTtjb25zdCBQPXkubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gcy5oZWlnaHQ9UC5oZWlnaHQsYXdhaXQgVHZlKHUsRHYocy5kZXNjcmlwdGlvbikpKHMuZGVzY3JpcHRpb24seSxfLngsXy55KzM1LF8ud2lkdGgsXy5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LHUpLHMuaGVpZ2h0fSxYcm49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7c3dpdGNoKHMudHlwZSl7Y2FzZSJhY3RvciI6cmV0dXJuIGF3YWl0IFlybihpLHMsdSxkKTtjYXNlInBhcnRpY2lwYW50IjpyZXR1cm4gYXdhaXQgV3JuKGkscyx1LGQpfX0sUXJuPWFzeW5jIGZ1bmN0aW9uKGkscyx1KXtjb25zdCBwPWkuYXBwZW5kKCJnIik7cUdlKHAscykscy5uYW1lJiZhd2FpdCBUdmUodSkocy5uYW1lLHAscy54LHMueSsocy50ZXh0TWF4SGVpZ2h0fHwwKS8yLHMud2lkdGgsMCx7Y2xhc3M6InRleHQifSx1KSxwLmxvd2VyKCl9LEpybj1mdW5jdGlvbihpKXtyZXR1cm4gaS5hcHBlbmQoImciKX0sWnJuPWZ1bmN0aW9uKGkscyx1LGQscCl7Y29uc3Qgdj1xQygpLGI9cy5hbmNob3JlZDt2Lng9cy5zdGFydHgsdi55PXMuc3RhcnR5LHYuY2xhc3M9ImFjdGl2YXRpb24iK3AlMyx2LndpZHRoPXMuc3RvcHgtcy5zdGFydHgsdi5oZWlnaHQ9dS1zLnN0YXJ0eSxFdmUoYix2KX0sZWluPWFzeW5jIGZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0e2JveE1hcmdpbjpwLGJveFRleHRNYXJnaW46dixsYWJlbEJveEhlaWdodDpiLGxhYmVsQm94V2lkdGg6eSxtZXNzYWdlRm9udEZhbWlseTpULG1lc3NhZ2VGb250U2l6ZTpfLG1lc3NhZ2VGb250V2VpZ2h0OkF9PWQsUD1pLmFwcGVuZCgiZyIpLFI9ZnVuY3Rpb24oSyxlZSxpZSxvZSl7cmV0dXJuIFAuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEspLmF0dHIoInkxIixlZSkuYXR0cigieDIiLGllKS5hdHRyKCJ5MiIsb2UpLmF0dHIoImNsYXNzIiwibG9vcExpbmUiKX07UihzLnN0YXJ0eCxzLnN0YXJ0eSxzLnN0b3B4LHMuc3RhcnR5KSxSKHMuc3RvcHgscy5zdGFydHkscy5zdG9weCxzLnN0b3B5KSxSKHMuc3RhcnR4LHMuc3RvcHkscy5zdG9weCxzLnN0b3B5KSxSKHMuc3RhcnR4LHMuc3RhcnR5LHMuc3RhcnR4LHMuc3RvcHkpLHMuc2VjdGlvbnMhPT12b2lkIDAmJnMuc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihLKXtSKHMuc3RhcnR4LEsueSxzLnN0b3B4LEsueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KTtsZXQgRj16YmUoKTtGLnRleHQ9dSxGLng9cy5zdGFydHgsRi55PXMuc3RhcnR5LEYuZm9udEZhbWlseT1ULEYuZm9udFNpemU9XyxGLmZvbnRXZWlnaHQ9QSxGLmFuY2hvcj0ibWlkZGxlIixGLnZhbGlnbj0ibWlkZGxlIixGLnRzcGFuPSExLEYud2lkdGg9eXx8NTAsRi5oZWlnaHQ9Ynx8MjAsRi50ZXh0TWFyZ2luPXYsRi5jbGFzcz0ibGFiZWxUZXh0IiwkR2UoUCxGKSxGPUhHZSgpLEYudGV4dD1zLnRpdGxlLEYueD1zLnN0YXJ0eCt5LzIrKHMuc3RvcHgtcy5zdGFydHgpLzIsRi55PXMuc3RhcnR5K3ArdixGLmFuY2hvcj0ibWlkZGxlIixGLnZhbGlnbj0ibWlkZGxlIixGLnRleHRNYXJnaW49dixGLmNsYXNzPSJsb29wVGV4dCIsRi5mb250RmFtaWx5PVQsRi5mb250U2l6ZT1fLEYuZm9udFdlaWdodD1BLEYud3JhcD0hMDtsZXQgaj1EdihGLnRleHQpP2F3YWl0IHBKKFAsRixzKTpZRChQLEYpO2lmKHMuc2VjdGlvblRpdGxlcyE9PXZvaWQgMCl7Zm9yKGNvbnN0W0ssZWVdb2YgT2JqZWN0LmVudHJpZXMocy5zZWN0aW9uVGl0bGVzKSlpZihlZS5tZXNzYWdlKXtGLnRleHQ9ZWUubWVzc2FnZSxGLng9cy5zdGFydHgrKHMuc3RvcHgtcy5zdGFydHgpLzIsRi55PXMuc2VjdGlvbnNbS10ueStwK3YsRi5jbGFzcz0ibG9vcFRleHQiLEYuYW5jaG9yPSJtaWRkbGUiLEYudmFsaWduPSJtaWRkbGUiLEYudHNwYW49ITEsRi5mb250RmFtaWx5PVQsRi5mb250U2l6ZT1fLEYuZm9udFdlaWdodD1BLEYud3JhcD1zLndyYXAsRHYoRi50ZXh0KT8ocy5zdGFydHk9cy5zZWN0aW9uc1tLXS55LGF3YWl0IHBKKFAsRixzKSk6WUQoUCxGKTtsZXQgaWU9TWF0aC5yb3VuZChqLm1hcChvZT0+KG9lLl9ncm91cHN8fG9lKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKG9lLHBlKT0+b2UrcGUpKTtzLnNlY3Rpb25zW0tdLmhlaWdodCs9aWUtKHArdil9fXJldHVybiBzLmhlaWdodD1NYXRoLnJvdW5kKHMuc3RvcHktcy5zdGFydHkpLFB9LHFHZT1mdW5jdGlvbihpLHMpe1RxZShpLHMpfSx0aW49ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiZGF0YWJhc2UiKS5hdHRyKCJmaWxsLXJ1bGUiLCJldmVub2RkIikuYXR0cigiY2xpcC1ydWxlIiwiZXZlbm9kZCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6Iil9LG5pbj1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSxyaW49ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY2xvY2siKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXoiKX0saWluPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDcuOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKX0sc2luPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTUuNSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sYWluPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0sb2luPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsNCkuYXR0cigicmVmWSIsNC41KS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHQiKS5hdHRyKCJkIiwiTSAxLDIgTCA2LDcgTSA2LDIgTCAxLDciKX0sSEdlPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOnZvaWQgMCxzdHlsZToiIzY2NiIsd2lkdGg6dm9pZCAwLGhlaWdodDp2b2lkIDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMCx2YWxpZ246dm9pZCAwfX0sY2luPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSxUdmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHYsYix5LFQsXyxBLFApe2NvbnN0IFI9Yi5hcHBlbmQoInRleHQiKS5hdHRyKCJ4Iix5K18vMikuYXR0cigieSIsVCtBLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh2KTtwKFIsUCl9ZnVuY3Rpb24gcyh2LGIseSxULF8sQSxQLFIpe2NvbnN0e2FjdG9yRm9udFNpemU6RixhY3RvckZvbnRGYW1pbHk6aixhY3RvckZvbnRXZWlnaHQ6S309UixbZWUsaWVdPU5DKEYpLG9lPXYuc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpO2ZvcihsZXQgcGU9MDtwZTxvZS5sZW5ndGg7cGUrKyl7Y29uc3QgYmU9cGUqZWUtZWUqKG9lLmxlbmd0aC0xKS8yLGFlPWIuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIseStfLzIpLmF0dHIoInkiLFQpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLGllKS5zdHlsZSgiZm9udC13ZWlnaHQiLEspLnN0eWxlKCJmb250LWZhbWlseSIsaik7YWUuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHkrXy8yKS5hdHRyKCJkeSIsYmUpLnRleHQob2VbcGVdKSxhZS5hdHRyKCJ5IixUK0EvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHAoYWUsUCl9fWZ1bmN0aW9uIHUodixiLHksVCxfLEEsUCxSKXtjb25zdCBGPWIuYXBwZW5kKCJzd2l0Y2giKSxLPUYuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIseSkuYXR0cigieSIsVCkuYXR0cigid2lkdGgiLF8pLmF0dHIoImhlaWdodCIsQSkuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7Sy5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh2KSxzKHYsRix5LFQsXyxBLFAsUikscChLLFApfWFzeW5jIGZ1bmN0aW9uIGQodixiLHksVCxfLEEsUCxSKXtjb25zdCBGPWF3YWl0IEhGKHYsVmgoKSksaj1iLmFwcGVuZCgic3dpdGNoIiksZWU9ai5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4Iix5K18vMi1GLndpZHRoLzIpLmF0dHIoInkiLFQrQS8yLUYuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixGLndpZHRoKS5hdHRyKCJoZWlnaHQiLEYuaGVpZ2h0KS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2VlLmFwcGVuZCgiZGl2Iikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS5odG1sKGF3YWl0IENDKHYsVmgoKSkpLHModixqLHksVCxfLEEsUCxSKSxwKGVlLFApfWZ1bmN0aW9uIHAodixiKXtmb3IoY29uc3QgeSBpbiBiKWIuaGFzT3duUHJvcGVydHkoeSkmJnYuYXR0cih5LGJbeV0pfXJldHVybiBmdW5jdGlvbih2LGI9ITEpe3JldHVybiBiP2Q6di50ZXh0UGxhY2VtZW50PT09ImZvIj91OnYudGV4dFBsYWNlbWVudD09PSJvbGQiP2k6c319KCksdWluPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaShwLHYsYix5LFQsXyxBKXtjb25zdCBQPXYuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYikuYXR0cigieSIseSkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS50ZXh0KHApO2QoUCxBKX1mdW5jdGlvbiBzKHAsdixiLHksVCxfLEEsUCl7Y29uc3R7YWN0b3JGb250U2l6ZTpSLGFjdG9yRm9udEZhbWlseTpGLGFjdG9yRm9udFdlaWdodDpqfT1QLEs9cC5zcGxpdChjaS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCBlZT0wO2VlPEsubGVuZ3RoO2VlKyspe2NvbnN0IGllPWVlKlItUiooSy5sZW5ndGgtMSkvMixvZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLHkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0Iikuc3R5bGUoImZvbnQtc2l6ZSIsUikuc3R5bGUoImZvbnQtd2VpZ2h0IixqKS5zdHlsZSgiZm9udC1mYW1pbHkiLEYpO29lLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiKS5hdHRyKCJkeSIsaWUpLnRleHQoS1tlZV0pLG9lLmF0dHIoInkiLHkrXy8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksZChvZSxBKX19ZnVuY3Rpb24gdShwLHYsYix5LFQsXyxBLFApe2NvbnN0IFI9di5hcHBlbmQoInN3aXRjaCIpLGo9Ui5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5Iix5KS5hdHRyKCJ3aWR0aCIsVCkuYXR0cigiaGVpZ2h0IixfKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtqLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHApLHMocCxSLGIseSxULF8sQSxQKSxkKGosQSl9ZnVuY3Rpb24gZChwLHYpe2Zvcihjb25zdCBiIGluIHYpdi5oYXNPd25Qcm9wZXJ0eShiKSYmcC5hdHRyKGIsdltiXSl9cmV0dXJuIGZ1bmN0aW9uKHApe3JldHVybiBwLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3U6cC50ZXh0UGxhY2VtZW50PT09Im9sZCI/aTpzfX0oKSxaZj17ZHJhd1JlY3Q6RXZlLGRyYXdUZXh0OllELGRyYXdMYWJlbDokR2UsZHJhd0FjdG9yOlhybixkcmF3Qm94OlFybixkcmF3UG9wdXA6R3JuLGFuY2hvckVsZW1lbnQ6SnJuLGRyYXdBY3RpdmF0aW9uOlpybixkcmF3TG9vcDplaW4sZHJhd0JhY2tncm91bmRSZWN0OnFHZSxpbnNlcnRBcnJvd0hlYWQ6aWluLGluc2VydEFycm93RmlsbGVkSGVhZDpzaW4saW5zZXJ0U2VxdWVuY2VOdW1iZXI6YWluLGluc2VydEFycm93Q3Jvc3NIZWFkOm9pbixpbnNlcnREYXRhYmFzZUljb246dGluLGluc2VydENvbXB1dGVySWNvbjpuaW4saW5zZXJ0Q2xvY2tJY29uOnJpbixnZXRUZXh0T2JqOkhHZSxnZXROb3RlUmVjdDpjaW4sZml4TGlmZUxpbmVIZWlnaHRzOnpHZSxzYW5pdGl6ZVVybDpwOS5zYW5pdGl6ZVVybH07bGV0IEVuPXt9O2NvbnN0IG5pPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGFjdGl2YXRpb25zOltdLG1vZGVsczp7Z2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsdGhpcy5hY3RvcnMubGVuZ3RoPT09MD9bMF06dGhpcy5hY3RvcnMubWFwKGk9PmkuaGVpZ2h0fHwwKSkrKHRoaXMubG9vcHMubGVuZ3RoPT09MD8wOnRoaXMubG9vcHMubWFwKGk9PmkuaGVpZ2h0fHwwKS5yZWR1Y2UoKGkscyk9PmkrcykpKyh0aGlzLm1lc3NhZ2VzLmxlbmd0aD09PTA/MDp0aGlzLm1lc3NhZ2VzLm1hcChpPT5pLmhlaWdodHx8MCkucmVkdWNlKChpLHMpPT5pK3MpKSsodGhpcy5ub3Rlcy5sZW5ndGg9PT0wPzA6dGhpcy5ub3Rlcy5tYXAoaT0+aS5oZWlnaHR8fDApLnJlZHVjZSgoaSxzKT0+aStzKSl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5hY3RvcnM9W10sdGhpcy5ib3hlcz1bXSx0aGlzLmxvb3BzPVtdLHRoaXMubWVzc2FnZXM9W10sdGhpcy5ub3Rlcz1bXX0sYWRkQm94OmZ1bmN0aW9uKGkpe3RoaXMuYm94ZXMucHVzaChpKX0sYWRkQWN0b3I6ZnVuY3Rpb24oaSl7dGhpcy5hY3RvcnMucHVzaChpKX0sYWRkTG9vcDpmdW5jdGlvbihpKXt0aGlzLmxvb3BzLnB1c2goaSl9LGFkZE1lc3NhZ2U6ZnVuY3Rpb24oaSl7dGhpcy5tZXNzYWdlcy5wdXNoKGkpfSxhZGROb3RlOmZ1bmN0aW9uKGkpe3RoaXMubm90ZXMucHVzaChpKX0sbGFzdEFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuYWN0b3JzLmxlbmd0aC0xXX0sbGFzdExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aC0xXX0sbGFzdE1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlc1t0aGlzLm1lc3NhZ2VzLmxlbmd0aC0xXX0sbGFzdE5vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Rlc1t0aGlzLm5vdGVzLmxlbmd0aC0xXX0sYWN0b3JzOltdLGJveGVzOltdLGxvb3BzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuYWN0aXZhdGlvbnM9W10sdGhpcy5tb2RlbHMuY2xlYXIoKSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTAsVUdlKHF0KCkpfSx1cGRhdGVWYWw6ZnVuY3Rpb24oaSxzLHUsZCl7aVtzXT09PXZvaWQgMD9pW3NdPXU6aVtzXT1kKHUsaVtzXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPXRoaXM7bGV0IHY9MDtmdW5jdGlvbiBiKHkpe3JldHVybiBmdW5jdGlvbihfKXt2Kys7Y29uc3QgQT1wLnNlcXVlbmNlSXRlbXMubGVuZ3RoLXYrMTtwLnVwZGF0ZVZhbChfLCJzdGFydHkiLHMtQSpFbi5ib3hNYXJnaW4sTWF0aC5taW4pLHAudXBkYXRlVmFsKF8sInN0b3B5IixkK0EqRW4uYm94TWFyZ2luLE1hdGgubWF4KSxwLnVwZGF0ZVZhbChuaS5kYXRhLCJzdGFydHgiLGktQSpFbi5ib3hNYXJnaW4sTWF0aC5taW4pLHAudXBkYXRlVmFsKG5pLmRhdGEsInN0b3B4Iix1K0EqRW4uYm94TWFyZ2luLE1hdGgubWF4KSx5IT09ImFjdGl2YXRpb24iJiYocC51cGRhdGVWYWwoXywic3RhcnR4IixpLUEqRW4uYm94TWFyZ2luLE1hdGgubWluKSxwLnVwZGF0ZVZhbChfLCJzdG9weCIsdStBKkVuLmJveE1hcmdpbixNYXRoLm1heCkscC51cGRhdGVWYWwobmkuZGF0YSwic3RhcnR5IixzLUEqRW4uYm94TWFyZ2luLE1hdGgubWluKSxwLnVwZGF0ZVZhbChuaS5kYXRhLCJzdG9weSIsZCtBKkVuLmJveE1hcmdpbixNYXRoLm1heCkpfX10aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaChiKCkpLHRoaXMuYWN0aXZhdGlvbnMuZm9yRWFjaChiKCJhY3RpdmF0aW9uIikpfSxpbnNlcnQ6ZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD1jaS5nZXRNaW4oaSx1KSx2PWNpLmdldE1heChpLHUpLGI9Y2kuZ2V0TWluKHMsZCkseT1jaS5nZXRNYXgocyxkKTt0aGlzLnVwZGF0ZVZhbChuaS5kYXRhLCJzdGFydHgiLHAsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKG5pLmRhdGEsInN0YXJ0eSIsYixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwobmkuZGF0YSwic3RvcHgiLHYsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKG5pLmRhdGEsInN0b3B5Iix5LE1hdGgubWF4KSx0aGlzLnVwZGF0ZUJvdW5kcyhwLGIsdix5KX0sbmV3QWN0aXZhdGlvbjpmdW5jdGlvbihpLHMsdSl7Y29uc3QgZD11W2kuZnJvbS5hY3Rvcl0scD1iSihpLmZyb20uYWN0b3IpLmxlbmd0aHx8MCx2PWQueCtkLndpZHRoLzIrKHAtMSkqRW4uYWN0aXZhdGlvbldpZHRoLzI7dGhpcy5hY3RpdmF0aW9ucy5wdXNoKHtzdGFydHg6dixzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcysyLHN0b3B4OnYrRW4uYWN0aXZhdGlvbldpZHRoLHN0b3B5OnZvaWQgMCxhY3RvcjppLmZyb20uYWN0b3IsYW5jaG9yZWQ6WmYuYW5jaG9yRWxlbWVudChzKX0pfSxlbmRBY3RpdmF0aW9uOmZ1bmN0aW9uKGkpe2NvbnN0IHM9dGhpcy5hY3RpdmF0aW9ucy5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIHUuYWN0b3J9KS5sYXN0SW5kZXhPZihpLmZyb20uYWN0b3IpO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShzLDEpWzBdfSxjcmVhdGVMb29wOmZ1bmN0aW9uKGk9e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxzKXtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOmkubWVzc2FnZSx3cmFwOmkud3JhcCx3aWR0aDppLndpZHRoLGhlaWdodDowLGZpbGw6c319LG5ld0xvb3A6ZnVuY3Rpb24oaT17bWVzc2FnZTp2b2lkIDAsd3JhcDohMSx3aWR0aDp2b2lkIDB9LHMpe3RoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcChpLHMpKX0sZW5kTG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LGlzTG9vcE92ZXJsYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aD90aGlzLnNlcXVlbmNlSXRlbXNbdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC0xXS5vdmVybGFwOiExfSxhZGRTZWN0aW9uVG9Mb29wOmZ1bmN0aW9uKGkpe2NvbnN0IHM9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO3Muc2VjdGlvbnM9cy5zZWN0aW9uc3x8W10scy5zZWN0aW9uVGl0bGVzPXMuc2VjdGlvblRpdGxlc3x8W10scy5zZWN0aW9ucy5wdXNoKHt5Om5pLmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxzLnNlY3Rpb25UaXRsZXMucHVzaChpKSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChzKX0sc2F2ZVZlcnRpY2FsUG9zOmZ1bmN0aW9uKCl7dGhpcy5pc0xvb3BPdmVybGFwKCkmJih0aGlzLnNhdmVkVmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyl9LHJlc2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXt0aGlzLmlzTG9vcE92ZXJsYXAoKSYmKHRoaXMudmVydGljYWxQb3M9dGhpcy5zYXZlZFZlcnRpY2FsUG9zKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKGkpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcytpLHRoaXMuZGF0YS5zdG9weT1jaS5nZXRNYXgodGhpcy5kYXRhLnN0b3B5LHRoaXMudmVydGljYWxQb3MpfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fX0sbGluPWFzeW5jIGZ1bmN0aW9uKGkscyl7bmkuYnVtcFZlcnRpY2FsUG9zKEVuLmJveE1hcmdpbikscy5oZWlnaHQ9RW4uYm94TWFyZ2luLHMuc3RhcnR5PW5pLmdldFZlcnRpY2FsUG9zKCk7Y29uc3QgdT1xQygpO3UueD1zLnN0YXJ0eCx1Lnk9cy5zdGFydHksdS53aWR0aD1zLndpZHRofHxFbi53aWR0aCx1LmNsYXNzPSJub3RlIjtjb25zdCBkPWkuYXBwZW5kKCJnIikscD1aZi5kcmF3UmVjdChkLHUpLHY9emJlKCk7di54PXMuc3RhcnR4LHYueT1zLnN0YXJ0eSx2LndpZHRoPXUud2lkdGgsdi5keT0iMWVtIix2LnRleHQ9cy5tZXNzYWdlLHYuY2xhc3M9Im5vdGVUZXh0Iix2LmZvbnRGYW1pbHk9RW4ubm90ZUZvbnRGYW1pbHksdi5mb250U2l6ZT1Fbi5ub3RlRm9udFNpemUsdi5mb250V2VpZ2h0PUVuLm5vdGVGb250V2VpZ2h0LHYuYW5jaG9yPUVuLm5vdGVBbGlnbix2LnRleHRNYXJnaW49RW4ubm90ZU1hcmdpbix2LnZhbGlnbj0iY2VudGVyIjtjb25zdCBiPUR2KHYudGV4dCk/YXdhaXQgcEooZCx2KTpZRChkLHYpLHk9TWF0aC5yb3VuZChiLm1hcChUPT4oVC5fZ3JvdXBzfHxUKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKFQsXyk9PlQrXykpO3AuYXR0cigiaGVpZ2h0Iix5KzIqRW4ubm90ZU1hcmdpbikscy5oZWlnaHQrPXkrMipFbi5ub3RlTWFyZ2luLG5pLmJ1bXBWZXJ0aWNhbFBvcyh5KzIqRW4ubm90ZU1hcmdpbikscy5zdG9weT1zLnN0YXJ0eSt5KzIqRW4ubm90ZU1hcmdpbixzLnN0b3B4PXMuc3RhcnR4K3Uud2lkdGgsbmkuaW5zZXJ0KHMuc3RhcnR4LHMuc3RhcnR5LHMuc3RvcHgscy5zdG9weSksbmkubW9kZWxzLmFkZE5vdGUocyl9LGVTPWk9Pih7Zm9udEZhbWlseTppLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOmkubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5tZXNzYWdlRm9udFdlaWdodH0pLFhEPWk9Pih7Zm9udEZhbWlseTppLm5vdGVGb250RmFtaWx5LGZvbnRTaXplOmkubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5ub3RlRm9udFdlaWdodH0pLEN2ZT1pPT4oe2ZvbnRGYW1pbHk6aS5hY3RvckZvbnRGYW1pbHksZm9udFNpemU6aS5hY3RvckZvbnRTaXplLGZvbnRXZWlnaHQ6aS5hY3RvckZvbnRXZWlnaHR9KTthc3luYyBmdW5jdGlvbiBoaW4oaSxzKXtuaS5idW1wVmVydGljYWxQb3MoMTApO2NvbnN0e3N0YXJ0eDp1LHN0b3B4OmQsbWVzc2FnZTpwfT1zLHY9Y2kuc3BsaXRCcmVha3MocCkubGVuZ3RoLGI9RHYocCkseT1iP2F3YWl0IEhGKHAscXQoKSk6QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocCxlUyhFbikpO2lmKCFiKXtjb25zdCBQPXkuaGVpZ2h0L3Y7cy5oZWlnaHQrPVAsbmkuYnVtcFZlcnRpY2FsUG9zKFApfWxldCBULF89eS5oZWlnaHQtMTA7Y29uc3QgQT15LndpZHRoO2lmKHU9PT1kKXtUPW5pLmdldFZlcnRpY2FsUG9zKCkrXyxFbi5yaWdodEFuZ2xlc3x8KF8rPUVuLmJveE1hcmdpbixUPW5pLmdldFZlcnRpY2FsUG9zKCkrXyksXys9MzA7Y29uc3QgUD1jaS5nZXRNYXgoQS8yLEVuLndpZHRoLzIpO25pLmluc2VydCh1LVAsbmkuZ2V0VmVydGljYWxQb3MoKS0xMCtfLGQrUCxuaS5nZXRWZXJ0aWNhbFBvcygpKzMwK18pfWVsc2UgXys9RW4uYm94TWFyZ2luLFQ9bmkuZ2V0VmVydGljYWxQb3MoKStfLG5pLmluc2VydCh1LFQtMTAsZCxUKTtyZXR1cm4gbmkuYnVtcFZlcnRpY2FsUG9zKF8pLHMuaGVpZ2h0Kz1fLHMuc3RvcHk9cy5zdGFydHkrcy5oZWlnaHQsbmkuaW5zZXJ0KHMuZnJvbUJvdW5kcyxzLnN0YXJ0eSxzLnRvQm91bmRzLHMuc3RvcHkpLFR9Y29uc3QgZmluPWFzeW5jIGZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0e3N0YXJ0eDpwLHN0b3B4OnYsc3RhcnR5OmIsbWVzc2FnZTp5LHR5cGU6VCxzZXF1ZW5jZUluZGV4Ol8sc2VxdWVuY2VWaXNpYmxlOkF9PXMsUD1Bby5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh5LGVTKEVuKSksUj16YmUoKTtSLng9cCxSLnk9YisxMCxSLndpZHRoPXYtcCxSLmNsYXNzPSJtZXNzYWdlVGV4dCIsUi5keT0iMWVtIixSLnRleHQ9eSxSLmZvbnRGYW1pbHk9RW4ubWVzc2FnZUZvbnRGYW1pbHksUi5mb250U2l6ZT1Fbi5tZXNzYWdlRm9udFNpemUsUi5mb250V2VpZ2h0PUVuLm1lc3NhZ2VGb250V2VpZ2h0LFIuYW5jaG9yPUVuLm1lc3NhZ2VBbGlnbixSLnZhbGlnbj0iY2VudGVyIixSLnRleHRNYXJnaW49RW4ud3JhcFBhZGRpbmcsUi50c3Bhbj0hMSxEdihSLnRleHQpP2F3YWl0IHBKKGksUix7c3RhcnR4OnAsc3RvcHg6dixzdGFydHk6dX0pOllEKGksUik7Y29uc3QgRj1QLndpZHRoO2xldCBqO3A9PT12P0VuLnJpZ2h0QW5nbGVzP2o9aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTSAgJHtwfSwke3V9IEggJHtwK2NpLmdldE1heChFbi53aWR0aC8yLEYvMil9IFYgJHt1KzI1fSBIICR7cH1gKTpqPWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gIitwKyIsIit1KyIgQyAiKyhwKzYwKSsiLCIrKHUtMTApKyIgIisocCs2MCkrIiwiKyh1KzMwKSsiICIrcCsiLCIrKHUrMjApKTooaj1pLmFwcGVuZCgibGluZSIpLGouYXR0cigieDEiLHApLGouYXR0cigieTEiLHUpLGouYXR0cigieDIiLHYpLGouYXR0cigieTIiLHUpKSxUPT09ZC5kYi5MSU5FVFlQRS5ET1RURUR8fFQ9PT1kLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8VD09PWQuZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UfHxUPT09ZC5kYi5MSU5FVFlQRS5ET1RURURfT1BFTj8oai5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMsIDMiKSxqLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUxIikpOmouYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTAiKTtsZXQgSz0iIjtFbi5hcnJvd01hcmtlckFic29sdXRlJiYoSz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxLPUsucmVwbGFjZSgvXCgvZywiXFwoIiksSz1LLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxqLmF0dHIoInN0cm9rZS13aWR0aCIsMiksai5hdHRyKCJzdHJva2UiLCJub25lIiksai5zdHlsZSgiZmlsbCIsIm5vbmUiKSwoVD09PWQuZGIuTElORVRZUEUuU09MSUR8fFQ9PT1kLmRiLkxJTkVUWVBFLkRPVFRFRCkmJmouYXR0cigibWFya2VyLWVuZCIsInVybCgiK0srIiNhcnJvd2hlYWQpIiksKFQ9PT1kLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5UfHxUPT09ZC5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQpJiZqLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitLKyIjZmlsbGVkLWhlYWQpIiksKFQ9PT1kLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTfHxUPT09ZC5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1MpJiZqLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitLKyIjY3Jvc3NoZWFkKSIpLChBfHxFbi5zaG93U2VxdWVuY2VOdW1iZXJzKSYmKGouYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrSysiI3NlcXVlbmNlbnVtYmVyKSIpLGkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscCkuYXR0cigieSIsdSs0KS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLCIxMnB4IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJjbGFzcyIsInNlcXVlbmNlTnVtYmVyIikudGV4dChfKSl9LGRpbj1hc3luYyBmdW5jdGlvbihpLHMsdSxkLHAsdixiKXtsZXQgeT0wLFQ9MCxfLEE9MDtmb3IoY29uc3QgUCBvZiBkKXtjb25zdCBSPXNbUF0sRj1SLmJveDtfJiZfIT1GJiYoYnx8bmkubW9kZWxzLmFkZEJveChfKSxUKz1Fbi5ib3hNYXJnaW4rXy5tYXJnaW4pLEYmJkYhPV8mJihifHwoRi54PXkrVCxGLnk9cCksVCs9Ri5tYXJnaW4pLFIud2lkdGg9Ui53aWR0aHx8RW4ud2lkdGgsUi5oZWlnaHQ9Y2kuZ2V0TWF4KFIuaGVpZ2h0fHxFbi5oZWlnaHQsRW4uaGVpZ2h0KSxSLm1hcmdpbj1SLm1hcmdpbnx8RW4uYWN0b3JNYXJnaW4sQT1jaS5nZXRNYXgoQSxSLmhlaWdodCksdVtSLm5hbWVdJiYoVCs9Ui53aWR0aC8yKSxSLng9eStULFIuc3RhcnR5PW5pLmdldFZlcnRpY2FsUG9zKCksbmkuaW5zZXJ0KFIueCxwLFIueCtSLndpZHRoLFIuaGVpZ2h0KSx5Kz1SLndpZHRoK1QsUi5ib3gmJihSLmJveC53aWR0aD15K0YubWFyZ2luLVIuYm94LngpLFQ9Ui5tYXJnaW4sXz1SLmJveCxuaS5tb2RlbHMuYWRkQWN0b3IoUil9XyYmIWImJm5pLm1vZGVscy5hZGRCb3goXyksbmkuYnVtcFZlcnRpY2FsUG9zKEEpfSxTdmU9YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7aWYoZCl7bGV0IHA9MDtuaS5idW1wVmVydGljYWxQb3MoRW4uYm94TWFyZ2luKjIpO2Zvcihjb25zdCB2IG9mIHUpe2NvbnN0IGI9c1t2XTtiLnN0b3B5fHwoYi5zdG9weT1uaS5nZXRWZXJ0aWNhbFBvcygpKTtjb25zdCB5PWF3YWl0IFpmLmRyYXdBY3RvcihpLGIsRW4sITApO3A9Y2kuZ2V0TWF4KHAseSl9bmkuYnVtcFZlcnRpY2FsUG9zKHArRW4uYm94TWFyZ2luKX1lbHNlIGZvcihjb25zdCBwIG9mIHUpe2NvbnN0IHY9c1twXTthd2FpdCBaZi5kcmF3QWN0b3IoaSx2LEVuLCExKX19LFZHZT1mdW5jdGlvbihpLHMsdSxkKXtsZXQgcD0wLHY9MDtmb3IoY29uc3QgYiBvZiB1KXtjb25zdCB5PXNbYl0sVD1taW4oeSksXz1aZi5kcmF3UG9wdXAoaSx5LFQsRW4sRW4uZm9yY2VNZW51cyxkKTtfLmhlaWdodD5wJiYocD1fLmhlaWdodCksXy53aWR0aCt5Lng+diYmKHY9Xy53aWR0aCt5LngpfXJldHVybnttYXhIZWlnaHQ6cCxtYXhXaWR0aDp2fX0sVUdlPWZ1bmN0aW9uKGkpe2lkKEVuLGkpLGkuZm9udEZhbWlseSYmKEVuLmFjdG9yRm9udEZhbWlseT1Fbi5ub3RlRm9udEZhbWlseT1Fbi5tZXNzYWdlRm9udEZhbWlseT1pLmZvbnRGYW1pbHkpLGkuZm9udFNpemUmJihFbi5hY3RvckZvbnRTaXplPUVuLm5vdGVGb250U2l6ZT1Fbi5tZXNzYWdlRm9udFNpemU9aS5mb250U2l6ZSksaS5mb250V2VpZ2h0JiYoRW4uYWN0b3JGb250V2VpZ2h0PUVuLm5vdGVGb250V2VpZ2h0PUVuLm1lc3NhZ2VGb250V2VpZ2h0PWkuZm9udFdlaWdodCl9LGJKPWZ1bmN0aW9uKGkpe3JldHVybiBuaS5hY3RpdmF0aW9ucy5maWx0ZXIoZnVuY3Rpb24ocyl7cmV0dXJuIHMuYWN0b3I9PT1pfSl9LEdHZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9c1tpXSxkPWJKKGkpLHA9ZC5yZWR1Y2UoZnVuY3Rpb24oYix5KXtyZXR1cm4gY2kuZ2V0TWluKGIseS5zdGFydHgpfSx1LngrdS53aWR0aC8yLTEpLHY9ZC5yZWR1Y2UoZnVuY3Rpb24oYix5KXtyZXR1cm4gY2kuZ2V0TWF4KGIseS5zdG9weCl9LHUueCt1LndpZHRoLzIrMSk7cmV0dXJuW3Asdl19O2Z1bmN0aW9uIGE1KGkscyx1LGQscCl7bmkuYnVtcFZlcnRpY2FsUG9zKHUpO2xldCB2PWQ7aWYocy5pZCYmcy5tZXNzYWdlJiZpW3MuaWRdKXtjb25zdCBiPWlbcy5pZF0ud2lkdGgseT1lUyhFbik7cy5tZXNzYWdlPUFvLndyYXBMYWJlbChgWyR7cy5tZXNzYWdlfV1gLGItMipFbi53cmFwUGFkZGluZyx5KSxzLndpZHRoPWIscy53cmFwPSEwO2NvbnN0IFQ9QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocy5tZXNzYWdlLHkpLF89Y2kuZ2V0TWF4KFQuaGVpZ2h0LEVuLmxhYmVsQm94SGVpZ2h0KTt2PWQrXyxYZS5kZWJ1ZyhgJHtffSAtICR7cy5tZXNzYWdlfWApfXAocyksbmkuYnVtcFZlcnRpY2FsUG9zKHYpfWZ1bmN0aW9uIGdpbihpLHMsdSxkLHAsdixiKXtmdW5jdGlvbiB5KF8sQSl7Xy54PHBbaS5mcm9tXS54PyhuaS5pbnNlcnQocy5zdG9weC1BLHMuc3RhcnR5LHMuc3RhcnR4LHMuc3RvcHkrXy5oZWlnaHQvMitFbi5ub3RlTWFyZ2luKSxzLnN0b3B4PXMuc3RvcHgrQSk6KG5pLmluc2VydChzLnN0YXJ0eCxzLnN0YXJ0eSxzLnN0b3B4K0Escy5zdG9weStfLmhlaWdodC8yK0VuLm5vdGVNYXJnaW4pLHMuc3RvcHg9cy5zdG9weC1BKX1mdW5jdGlvbiBUKF8sQSl7Xy54PHBbaS50b10ueD8obmkuaW5zZXJ0KHMuc3RhcnR4LUEscy5zdGFydHkscy5zdG9weCxzLnN0b3B5K18uaGVpZ2h0LzIrRW4ubm90ZU1hcmdpbikscy5zdGFydHg9cy5zdGFydHgrQSk6KG5pLmluc2VydChzLnN0b3B4LHMuc3RhcnR5LHMuc3RhcnR4K0Escy5zdG9weStfLmhlaWdodC8yK0VuLm5vdGVNYXJnaW4pLHMuc3RhcnR4PXMuc3RhcnR4LUEpfWlmKHZbaS50b109PWQpe2NvbnN0IF89cFtpLnRvXSxBPV8udHlwZT09ImFjdG9yIj9aQy8yKzM6Xy53aWR0aC8yKzM7eShfLEEpLF8uc3RhcnR5PXUtXy5oZWlnaHQvMixuaS5idW1wVmVydGljYWxQb3MoXy5oZWlnaHQvMil9ZWxzZSBpZihiW2kuZnJvbV09PWQpe2NvbnN0IF89cFtpLmZyb21dO2lmKEVuLm1pcnJvckFjdG9ycyl7Y29uc3QgQT1fLnR5cGU9PSJhY3RvciI/WkMvMjpfLndpZHRoLzI7VChfLEEpfV8uc3RvcHk9dS1fLmhlaWdodC8yLG5pLmJ1bXBWZXJ0aWNhbFBvcyhfLmhlaWdodC8yKX1lbHNlIGlmKGJbaS50b109PWQpe2NvbnN0IF89cFtpLnRvXTtpZihFbi5taXJyb3JBY3RvcnMpe2NvbnN0IEE9Xy50eXBlPT0iYWN0b3IiP1pDLzIrMzpfLndpZHRoLzIrMzt5KF8sQSl9Xy5zdG9weT11LV8uaGVpZ2h0LzIsbmkuYnVtcFZlcnRpY2FsUG9zKF8uaGVpZ2h0LzIpfX1jb25zdCBwaW49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3R7c2VjdXJpdHlMZXZlbDpwLHNlcXVlbmNlOnZ9PXF0KCk7RW49djtsZXQgYjtwPT09InNhbmRib3giJiYoYj1JcigiI2kiK3MpKTtjb25zdCB5PUlyKHA9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksVD1wPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7bmkuaW5pdCgpLFhlLmRlYnVnKGQuZGIpO2NvbnN0IF89cD09PSJzYW5kYm94Ij95LnNlbGVjdChgW2lkPSIke3N9Il1gKTpJcihgW2lkPSIke3N9Il1gKSxBPWQuZGIuZ2V0QWN0b3JzKCksUD1kLmRiLmdldENyZWF0ZWRBY3RvcnMoKSxSPWQuZGIuZ2V0RGVzdHJveWVkQWN0b3JzKCksRj1kLmRiLmdldEJveGVzKCk7bGV0IGo9ZC5kYi5nZXRBY3RvcktleXMoKTtjb25zdCBLPWQuZGIuZ2V0TWVzc2FnZXMoKSxlZT1kLmRiLmdldERpYWdyYW1UaXRsZSgpLGllPWQuZGIuaGFzQXRMZWFzdE9uZUJveCgpLG9lPWQuZGIuaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZSgpLHBlPWF3YWl0IGJpbihBLEssZCk7aWYoRW4uaGVpZ2h0PWF3YWl0IHZpbihBLHBlLEYpLFpmLmluc2VydENvbXB1dGVySWNvbihfKSxaZi5pbnNlcnREYXRhYmFzZUljb24oXyksWmYuaW5zZXJ0Q2xvY2tJY29uKF8pLGllJiYobmkuYnVtcFZlcnRpY2FsUG9zKEVuLmJveE1hcmdpbiksb2UmJm5pLmJ1bXBWZXJ0aWNhbFBvcyhGWzBdLnRleHRNYXhIZWlnaHQpKSxFbi5oaWRlVW51c2VkUGFydGljaXBhbnRzPT09ITApe2NvbnN0IFNlPW5ldyBTZXQ7Sy5mb3JFYWNoKENlPT57U2UuYWRkKENlLmZyb20pLFNlLmFkZChDZS50byl9KSxqPWouZmlsdGVyKENlPT5TZS5oYXMoQ2UpKX1hd2FpdCBkaW4oXyxBLFAsaiwwLEssITEpO2NvbnN0IGJlPWF3YWl0IHhpbihLLEEscGUsZCk7WmYuaW5zZXJ0QXJyb3dIZWFkKF8pLFpmLmluc2VydEFycm93Q3Jvc3NIZWFkKF8pLFpmLmluc2VydEFycm93RmlsbGVkSGVhZChfKSxaZi5pbnNlcnRTZXF1ZW5jZU51bWJlcihfKTtmdW5jdGlvbiBhZShTZSxDZSl7Y29uc3Qga2U9bmkuZW5kQWN0aXZhdGlvbihTZSk7a2Uuc3RhcnR5KzE4PkNlJiYoa2Uuc3RhcnR5PUNlLTYsQ2UrPTEyKSxaZi5kcmF3QWN0aXZhdGlvbihfLGtlLENlLEVuLGJKKFNlLmZyb20uYWN0b3IpLmxlbmd0aCksbmkuaW5zZXJ0KGtlLnN0YXJ0eCxDZS0xMCxrZS5zdG9weCxDZSl9bGV0IG5lPTEsc2U9MTtjb25zdCBkZT1bXSxYPVtdO2xldCBnZT0wO2Zvcihjb25zdCBTZSBvZiBLKXtsZXQgQ2Usa2UsS2U7c3dpdGNoKFNlLnR5cGUpe2Nhc2UgZC5kYi5MSU5FVFlQRS5OT1RFOm5pLnJlc2V0VmVydGljYWxQb3MoKSxrZT1TZS5ub3RlTW9kZWwsYXdhaXQgbGluKF8sa2UpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6bmkubmV3QWN0aXZhdGlvbihTZSxfLEEpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5BQ1RJVkVfRU5EOmFlKFNlLG5pLmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5MT09QX1NUQVJUOmE1KGJlLFNlLEVuLmJveE1hcmdpbixFbi5ib3hNYXJnaW4rRW4uYm94VGV4dE1hcmdpbixGdD0+bmkubmV3TG9vcChGdCkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5MT09QX0VORDpDZT1uaS5lbmRMb29wKCksYXdhaXQgWmYuZHJhd0xvb3AoXyxDZSwibG9vcCIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLlJFQ1RfU1RBUlQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luLEVuLmJveE1hcmdpbixGdD0+bmkubmV3TG9vcCh2b2lkIDAsRnQubWVzc2FnZSkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5SRUNUX0VORDpDZT1uaS5lbmRMb29wKCksWC5wdXNoKENlKSxuaS5tb2RlbHMuYWRkTG9vcChDZSksbmkuYnVtcFZlcnRpY2FsUG9zKENlLnN0b3B5LW5pLmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5PUFRfU1RBUlQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luLEVuLmJveE1hcmdpbitFbi5ib3hUZXh0TWFyZ2luLEZ0PT5uaS5uZXdMb29wKEZ0KSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLk9QVF9FTkQ6Q2U9bmkuZW5kTG9vcCgpLGF3YWl0IFpmLmRyYXdMb29wKF8sQ2UsIm9wdCIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9TVEFSVDphNShiZSxTZSxFbi5ib3hNYXJnaW4sRW4uYm94TWFyZ2luK0VuLmJveFRleHRNYXJnaW4sRnQ9Pm5pLm5ld0xvb3AoRnQpKTticmVhaztjYXNlIGQuZGIuTElORVRZUEUuQUxUX0VMU0U6YTUoYmUsU2UsRW4uYm94TWFyZ2luK0VuLmJveFRleHRNYXJnaW4sRW4uYm94TWFyZ2luLEZ0PT5uaS5hZGRTZWN0aW9uVG9Mb29wKEZ0KSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9FTkQ6Q2U9bmkuZW5kTG9vcCgpLGF3YWl0IFpmLmRyYXdMb29wKF8sQ2UsImFsdCIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9TVEFSVDpjYXNlIGQuZGIuTElORVRZUEUuUEFSX09WRVJfU1RBUlQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luLEVuLmJveE1hcmdpbitFbi5ib3hUZXh0TWFyZ2luLEZ0PT5uaS5uZXdMb29wKEZ0KSksbmkuc2F2ZVZlcnRpY2FsUG9zKCk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9BTkQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luK0VuLmJveFRleHRNYXJnaW4sRW4uYm94TWFyZ2luLEZ0PT5uaS5hZGRTZWN0aW9uVG9Mb29wKEZ0KSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9FTkQ6Q2U9bmkuZW5kTG9vcCgpLGF3YWl0IFpmLmRyYXdMb29wKF8sQ2UsInBhciIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFVVE9OVU1CRVI6bmU9U2UubWVzc2FnZS5zdGFydHx8bmUsc2U9U2UubWVzc2FnZS5zdGVwfHxzZSxTZS5tZXNzYWdlLnZpc2libGU/ZC5kYi5lbmFibGVTZXF1ZW5jZU51bWJlcnMoKTpkLmRiLmRpc2FibGVTZXF1ZW5jZU51bWJlcnMoKTticmVhaztjYXNlIGQuZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luLEVuLmJveE1hcmdpbitFbi5ib3hUZXh0TWFyZ2luLEZ0PT5uaS5uZXdMb29wKEZ0KSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTjphNShiZSxTZSxFbi5ib3hNYXJnaW4rRW4uYm94VGV4dE1hcmdpbixFbi5ib3hNYXJnaW4sRnQ9Pm5pLmFkZFNlY3Rpb25Ub0xvb3AoRnQpKTticmVhaztjYXNlIGQuZGIuTElORVRZUEUuQ1JJVElDQUxfRU5EOkNlPW5pLmVuZExvb3AoKSxhd2FpdCBaZi5kcmF3TG9vcChfLENlLCJjcml0aWNhbCIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkJSRUFLX1NUQVJUOmE1KGJlLFNlLEVuLmJveE1hcmdpbixFbi5ib3hNYXJnaW4rRW4uYm94VGV4dE1hcmdpbixGdD0+bmkubmV3TG9vcChGdCkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5CUkVBS19FTkQ6Q2U9bmkuZW5kTG9vcCgpLGF3YWl0IFpmLmRyYXdMb29wKF8sQ2UsImJyZWFrIixFbiksbmkuYnVtcFZlcnRpY2FsUG9zKENlLnN0b3B5LW5pLmdldFZlcnRpY2FsUG9zKCkpLG5pLm1vZGVscy5hZGRMb29wKENlKTticmVhaztkZWZhdWx0OnRyeXtLZT1TZS5tc2dNb2RlbCxLZS5zdGFydHk9bmkuZ2V0VmVydGljYWxQb3MoKSxLZS5zZXF1ZW5jZUluZGV4PW5lLEtlLnNlcXVlbmNlVmlzaWJsZT1kLmRiLnNob3dTZXF1ZW5jZU51bWJlcnMoKTtjb25zdCBGdD1hd2FpdCBoaW4oXyxLZSk7Z2luKFNlLEtlLEZ0LGdlLEEsUCxSKSxkZS5wdXNoKHttZXNzYWdlTW9kZWw6S2UsbGluZVN0YXJ0WTpGdH0pLG5pLm1vZGVscy5hZGRNZXNzYWdlKEtlKX1jYXRjaChGdCl7WGUuZXJyb3IoImVycm9yIHdoaWxlIGRyYXdpbmcgbWVzc2FnZSIsRnQpfX1bZC5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLGQuZGIuTElORVRZUEUuRE9UVEVEX09QRU4sZC5kYi5MSU5FVFlQRS5TT0xJRCxkLmRiLkxJTkVUWVBFLkRPVFRFRCxkLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLGQuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLGQuZGIuTElORVRZUEUuU09MSURfUE9JTlQsZC5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKFNlLnR5cGUpJiYobmU9bmUrc2UpLGdlKyt9WGUuZGVidWcoImNyZWF0ZWRBY3RvcnMiLFApLFhlLmRlYnVnKCJkZXN0cm95ZWRBY3RvcnMiLFIpLGF3YWl0IFN2ZShfLEEsaiwhMSk7Zm9yKGNvbnN0IFNlIG9mIGRlKWF3YWl0IGZpbihfLFNlLm1lc3NhZ2VNb2RlbCxTZS5saW5lU3RhcnRZLGQpO0VuLm1pcnJvckFjdG9ycyYmYXdhaXQgU3ZlKF8sQSxqLCEwKSxYLmZvckVhY2goU2U9PlpmLmRyYXdCYWNrZ3JvdW5kUmVjdChfLFNlKSksekdlKF8sQSxqLEVuKTtmb3IoY29uc3QgU2Ugb2YgbmkubW9kZWxzLmJveGVzKVNlLmhlaWdodD1uaS5nZXRWZXJ0aWNhbFBvcygpLVNlLnksbmkuaW5zZXJ0KFNlLngsU2UueSxTZS54K1NlLndpZHRoLFNlLmhlaWdodCksU2Uuc3RhcnR4PVNlLngsU2Uuc3RhcnR5PVNlLnksU2Uuc3RvcHg9U2Uuc3RhcnR4K1NlLndpZHRoLFNlLnN0b3B5PVNlLnN0YXJ0eStTZS5oZWlnaHQsU2Uuc3Ryb2tlPSJyZ2IoMCwwLDAsIDAuNSkiLGF3YWl0IFpmLmRyYXdCb3goXyxTZSxFbik7aWUmJm5pLmJ1bXBWZXJ0aWNhbFBvcyhFbi5ib3hNYXJnaW4pO2NvbnN0IFc9VkdlKF8sQSxqLFQpLHtib3VuZHM6eGV9PW5pLmdldEJvdW5kcygpO2xldCBVPXhlLnN0b3B5LXhlLnN0YXJ0eTtVPFcubWF4SGVpZ2h0JiYoVT1XLm1heEhlaWdodCk7bGV0IEZlPVUrMipFbi5kaWFncmFtTWFyZ2luWTtFbi5taXJyb3JBY3RvcnMmJihGZT1GZS1Fbi5ib3hNYXJnaW4rRW4uYm90dG9tTWFyZ2luQWRqKTtsZXQgUGU9eGUuc3RvcHgteGUuc3RhcnR4O1BlPFcubWF4V2lkdGgmJihQZT1XLm1heFdpZHRoKTtjb25zdCBqZT1QZSsyKkVuLmRpYWdyYW1NYXJnaW5YO2VlJiZfLmFwcGVuZCgidGV4dCIpLnRleHQoZWUpLmF0dHIoIngiLCh4ZS5zdG9weC14ZS5zdGFydHgpLzItMipFbi5kaWFncmFtTWFyZ2luWCkuYXR0cigieSIsLTI1KSxOZyhfLEZlLGplLEVuLnVzZU1heFdpZHRoKTtjb25zdCBJZT1lZT80MDowO18uYXR0cigidmlld0JveCIseGUuc3RhcnR4LUVuLmRpYWdyYW1NYXJnaW5YKyIgLSIrKEVuLmRpYWdyYW1NYXJnaW5ZK0llKSsiICIramUrIiAiKyhGZStJZSkpLFhlLmRlYnVnKCJtb2RlbHM6IixuaS5tb2RlbHMpfTthc3luYyBmdW5jdGlvbiBiaW4oaSxzLHUpe2NvbnN0IGQ9e307Zm9yKGNvbnN0IHAgb2YgcylpZihpW3AudG9dJiZpW3AuZnJvbV0pe2NvbnN0IHY9aVtwLnRvXTtpZihwLnBsYWNlbWVudD09PXUuZGIuUExBQ0VNRU5ULkxFRlRPRiYmIXYucHJldkFjdG9yfHxwLnBsYWNlbWVudD09PXUuZGIuUExBQ0VNRU5ULlJJR0hUT0YmJiF2Lm5leHRBY3Rvciljb250aW51ZTtjb25zdCBiPXAucGxhY2VtZW50IT09dm9pZCAwLHk9IWIsVD1iP1hEKEVuKTplUyhFbiksXz1wLndyYXA/QW8ud3JhcExhYmVsKHAubWVzc2FnZSxFbi53aWR0aC0yKkVuLndyYXBQYWRkaW5nLFQpOnAubWVzc2FnZSxQPShEdihfKT9hd2FpdCBIRihwLm1lc3NhZ2UscXQoKSk6QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoXyxUKSkud2lkdGgrMipFbi53cmFwUGFkZGluZzt5JiZwLmZyb209PT12Lm5leHRBY3Rvcj9kW3AudG9dPWNpLmdldE1heChkW3AudG9dfHwwLFApOnkmJnAuZnJvbT09PXYucHJldkFjdG9yP2RbcC5mcm9tXT1jaS5nZXRNYXgoZFtwLmZyb21dfHwwLFApOnkmJnAuZnJvbT09PXAudG8/KGRbcC5mcm9tXT1jaS5nZXRNYXgoZFtwLmZyb21dfHwwLFAvMiksZFtwLnRvXT1jaS5nZXRNYXgoZFtwLnRvXXx8MCxQLzIpKTpwLnBsYWNlbWVudD09PXUuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/ZFtwLmZyb21dPWNpLmdldE1heChkW3AuZnJvbV18fDAsUCk6cC5wbGFjZW1lbnQ9PT11LmRiLlBMQUNFTUVOVC5MRUZUT0Y/ZFt2LnByZXZBY3Rvcl09Y2kuZ2V0TWF4KGRbdi5wcmV2QWN0b3JdfHwwLFApOnAucGxhY2VtZW50PT09dS5kYi5QTEFDRU1FTlQuT1ZFUiYmKHYucHJldkFjdG9yJiYoZFt2LnByZXZBY3Rvcl09Y2kuZ2V0TWF4KGRbdi5wcmV2QWN0b3JdfHwwLFAvMikpLHYubmV4dEFjdG9yJiYoZFtwLmZyb21dPWNpLmdldE1heChkW3AuZnJvbV18fDAsUC8yKSkpfXJldHVybiBYZS5kZWJ1ZygibWF4TWVzc2FnZVdpZHRoUGVyQWN0b3I6IixkKSxkfWNvbnN0IG1pbj1mdW5jdGlvbihpKXtsZXQgcz0wO2NvbnN0IHU9Q3ZlKEVuKTtmb3IoY29uc3QgZCBpbiBpLmxpbmtzKXtjb25zdCB2PUFvLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGQsdSkud2lkdGgrMipFbi53cmFwUGFkZGluZysyKkVuLmJveE1hcmdpbjtzPHYmJihzPXYpfXJldHVybiBzfTthc3luYyBmdW5jdGlvbiB2aW4oaSxzLHUpe2xldCBkPTA7Zm9yKGNvbnN0IHYgb2YgT2JqZWN0LmtleXMoaSkpe2NvbnN0IGI9aVt2XTtiLndyYXAmJihiLmRlc2NyaXB0aW9uPUFvLndyYXBMYWJlbChiLmRlc2NyaXB0aW9uLEVuLndpZHRoLTIqRW4ud3JhcFBhZGRpbmcsQ3ZlKEVuKSkpO2NvbnN0IHk9RHYoYi5kZXNjcmlwdGlvbik/YXdhaXQgSEYoYi5kZXNjcmlwdGlvbixxdCgpKTpBby5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhiLmRlc2NyaXB0aW9uLEN2ZShFbikpO2Iud2lkdGg9Yi53cmFwP0VuLndpZHRoOmNpLmdldE1heChFbi53aWR0aCx5LndpZHRoKzIqRW4ud3JhcFBhZGRpbmcpLGIuaGVpZ2h0PWIud3JhcD9jaS5nZXRNYXgoeS5oZWlnaHQsRW4uaGVpZ2h0KTpFbi5oZWlnaHQsZD1jaS5nZXRNYXgoZCxiLmhlaWdodCl9Zm9yKGNvbnN0IHYgaW4gcyl7Y29uc3QgYj1pW3ZdO2lmKCFiKWNvbnRpbnVlO2NvbnN0IHk9aVtiLm5leHRBY3Rvcl07aWYoIXkpe2NvbnN0IFA9c1t2XStFbi5hY3Rvck1hcmdpbi1iLndpZHRoLzI7Yi5tYXJnaW49Y2kuZ2V0TWF4KFAsRW4uYWN0b3JNYXJnaW4pO2NvbnRpbnVlfWNvbnN0IF89c1t2XStFbi5hY3Rvck1hcmdpbi1iLndpZHRoLzIteS53aWR0aC8yO2IubWFyZ2luPWNpLmdldE1heChfLEVuLmFjdG9yTWFyZ2luKX1sZXQgcD0wO3JldHVybiB1LmZvckVhY2godj0+e2NvbnN0IGI9ZVMoRW4pO2xldCB5PXYuYWN0b3JLZXlzLnJlZHVjZSgoQSxQKT0+QSs9aVtQXS53aWR0aCsoaVtQXS5tYXJnaW58fDApLDApO3ktPTIqRW4uYm94VGV4dE1hcmdpbix2LndyYXAmJih2Lm5hbWU9QW8ud3JhcExhYmVsKHYubmFtZSx5LTIqRW4ud3JhcFBhZGRpbmcsYikpO2NvbnN0IFQ9QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnModi5uYW1lLGIpO3A9Y2kuZ2V0TWF4KFQuaGVpZ2h0LHApO2NvbnN0IF89Y2kuZ2V0TWF4KHksVC53aWR0aCsyKkVuLndyYXBQYWRkaW5nKTtpZih2Lm1hcmdpbj1Fbi5ib3hUZXh0TWFyZ2luLHk8Xyl7Y29uc3QgQT0oXy15KS8yO3YubWFyZ2luKz1BfX0pLHUuZm9yRWFjaCh2PT52LnRleHRNYXhIZWlnaHQ9cCksY2kuZ2V0TWF4KGQsRW4uaGVpZ2h0KX1jb25zdCB3aW49YXN5bmMgZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9c1tpLmZyb21dLngscD1zW2kudG9dLngsdj1pLndyYXAmJmkubWVzc2FnZTtsZXQgYj1EdihpLm1lc3NhZ2UpP2F3YWl0IEhGKGkubWVzc2FnZSxxdCgpKTpBby5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh2P0FvLndyYXBMYWJlbChpLm1lc3NhZ2UsRW4ud2lkdGgsWEQoRW4pKTppLm1lc3NhZ2UsWEQoRW4pKTtjb25zdCB5PXt3aWR0aDp2P0VuLndpZHRoOmNpLmdldE1heChFbi53aWR0aCxiLndpZHRoKzIqRW4ubm90ZU1hcmdpbiksaGVpZ2h0OjAsc3RhcnR4OnNbaS5mcm9tXS54LHN0b3B4OjAsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOmkubWVzc2FnZX07cmV0dXJuIGkucGxhY2VtZW50PT09dS5kYi5QTEFDRU1FTlQuUklHSFRPRj8oeS53aWR0aD12P2NpLmdldE1heChFbi53aWR0aCxiLndpZHRoKTpjaS5nZXRNYXgoc1tpLmZyb21dLndpZHRoLzIrc1tpLnRvXS53aWR0aC8yLGIud2lkdGgrMipFbi5ub3RlTWFyZ2luKSx5LnN0YXJ0eD1kKyhzW2kuZnJvbV0ud2lkdGgrRW4uYWN0b3JNYXJnaW4pLzIpOmkucGxhY2VtZW50PT09dS5kYi5QTEFDRU1FTlQuTEVGVE9GPyh5LndpZHRoPXY/Y2kuZ2V0TWF4KEVuLndpZHRoLGIud2lkdGgrMipFbi5ub3RlTWFyZ2luKTpjaS5nZXRNYXgoc1tpLmZyb21dLndpZHRoLzIrc1tpLnRvXS53aWR0aC8yLGIud2lkdGgrMipFbi5ub3RlTWFyZ2luKSx5LnN0YXJ0eD1kLXkud2lkdGgrKHNbaS5mcm9tXS53aWR0aC1Fbi5hY3Rvck1hcmdpbikvMik6aS50bz09PWkuZnJvbT8oYj1Bby5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh2P0FvLndyYXBMYWJlbChpLm1lc3NhZ2UsY2kuZ2V0TWF4KEVuLndpZHRoLHNbaS5mcm9tXS53aWR0aCksWEQoRW4pKTppLm1lc3NhZ2UsWEQoRW4pKSx5LndpZHRoPXY/Y2kuZ2V0TWF4KEVuLndpZHRoLHNbaS5mcm9tXS53aWR0aCk6Y2kuZ2V0TWF4KHNbaS5mcm9tXS53aWR0aCxFbi53aWR0aCxiLndpZHRoKzIqRW4ubm90ZU1hcmdpbikseS5zdGFydHg9ZCsoc1tpLmZyb21dLndpZHRoLXkud2lkdGgpLzIpOih5LndpZHRoPU1hdGguYWJzKGQrc1tpLmZyb21dLndpZHRoLzItKHArc1tpLnRvXS53aWR0aC8yKSkrRW4uYWN0b3JNYXJnaW4seS5zdGFydHg9ZDxwP2Qrc1tpLmZyb21dLndpZHRoLzItRW4uYWN0b3JNYXJnaW4vMjpwK3NbaS50b10ud2lkdGgvMi1Fbi5hY3Rvck1hcmdpbi8yKSx2JiYoeS5tZXNzYWdlPUFvLndyYXBMYWJlbChpLm1lc3NhZ2UseS53aWR0aC0yKkVuLndyYXBQYWRkaW5nLFhEKEVuKSkpLFhlLmRlYnVnKGBOTTpbJHt5LnN0YXJ0eH0sJHt5LnN0b3B4fSwke3kuc3RhcnR5fSwke3kuc3RvcHl9OiR7eS53aWR0aH0sJHt5LmhlaWdodH09JHtpLm1lc3NhZ2V9XWApLHl9LHlpbj1mdW5jdGlvbihpLHMsdSl7aWYoIVt1LmRiLkxJTkVUWVBFLlNPTElEX09QRU4sdS5kYi5MSU5FVFlQRS5ET1RURURfT1BFTix1LmRiLkxJTkVUWVBFLlNPTElELHUuZGIuTElORVRZUEUuRE9UVEVELHUuZGIuTElORVRZUEUuU09MSURfQ1JPU1MsdS5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1MsdS5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVCx1LmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVF0uaW5jbHVkZXMoaS50eXBlKSlyZXR1cm57fTtjb25zdFtkLHBdPUdHZShpLmZyb20scyksW3YsYl09R0dlKGkudG8scykseT1kPD12LFQ9eT9wOmQ7bGV0IF89eT92OmI7Y29uc3QgQT1NYXRoLmFicyh2LWIpPjIsUD1LPT55Py1LOks7aS5mcm9tPT09aS50bz9fPVQ6KGkuYWN0aXZhdGUmJiFBJiYoXys9UChFbi5hY3RpdmF0aW9uV2lkdGgvMi0xKSksW3UuZGIuTElORVRZUEUuU09MSURfT1BFTix1LmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOXS5pbmNsdWRlcyhpLnR5cGUpfHwoXys9UCgzKSkpO2NvbnN0IFI9W2QscCx2LGJdLEY9TWF0aC5hYnMoVC1fKTtpLndyYXAmJmkubWVzc2FnZSYmKGkubWVzc2FnZT1Bby53cmFwTGFiZWwoaS5tZXNzYWdlLGNpLmdldE1heChGKzIqRW4ud3JhcFBhZGRpbmcsRW4ud2lkdGgpLGVTKEVuKSkpO2NvbnN0IGo9QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaS5tZXNzYWdlLGVTKEVuKSk7cmV0dXJue3dpZHRoOmNpLmdldE1heChpLndyYXA/MDpqLndpZHRoKzIqRW4ud3JhcFBhZGRpbmcsRisyKkVuLndyYXBQYWRkaW5nLEVuLndpZHRoKSxoZWlnaHQ6MCxzdGFydHg6VCxzdG9weDpfLHN0YXJ0eTowLHN0b3B5OjAsbWVzc2FnZTppLm1lc3NhZ2UsdHlwZTppLnR5cGUsd3JhcDppLndyYXAsZnJvbUJvdW5kczpNYXRoLm1pbi5hcHBseShudWxsLFIpLHRvQm91bmRzOk1hdGgubWF4LmFwcGx5KG51bGwsUil9fSx4aW49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD17fSx2PVtdO2xldCBiLHksVDtmb3IoY29uc3QgXyBvZiBpKXtzd2l0Y2goXy5pZD1Bby5yYW5kb20oe2xlbmd0aDoxMH0pLF8udHlwZSl7Y2FzZSBkLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9TVEFSVDpjYXNlIGQuZGIuTElORVRZUEUuT1BUX1NUQVJUOmNhc2UgZC5kYi5MSU5FVFlQRS5QQVJfU1RBUlQ6Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUOmNhc2UgZC5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDpjYXNlIGQuZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6di5wdXNoKHtpZDpfLmlkLG1zZzpfLm1lc3NhZ2UsZnJvbTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0bzpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUix3aWR0aDowfSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9FTFNFOmNhc2UgZC5kYi5MSU5FVFlQRS5QQVJfQU5EOmNhc2UgZC5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046Xy5tZXNzYWdlJiYoYj12LnBvcCgpLHBbYi5pZF09YixwW18uaWRdPWIsdi5wdXNoKGIpKTticmVhaztjYXNlIGQuZGIuTElORVRZUEUuTE9PUF9FTkQ6Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9FTkQ6Y2FzZSBkLmRiLkxJTkVUWVBFLk9QVF9FTkQ6Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9FTkQ6Y2FzZSBkLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX0VORDpjYXNlIGQuZGIuTElORVRZUEUuQlJFQUtfRU5EOmI9di5wb3AoKSxwW2IuaWRdPWI7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDp7Y29uc3QgUD1zW18uZnJvbT9fLmZyb20uYWN0b3I6Xy50by5hY3Rvcl0sUj1iSihfLmZyb20/Xy5mcm9tLmFjdG9yOl8udG8uYWN0b3IpLmxlbmd0aCxGPVAueCtQLndpZHRoLzIrKFItMSkqRW4uYWN0aXZhdGlvbldpZHRoLzIsaj17c3RhcnR4OkYsc3RvcHg6RitFbi5hY3RpdmF0aW9uV2lkdGgsYWN0b3I6Xy5mcm9tLmFjdG9yLGVuYWJsZWQ6ITB9O25pLmFjdGl2YXRpb25zLnB1c2goail9YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6e2NvbnN0IFA9bmkuYWN0aXZhdGlvbnMubWFwKFI9PlIuYWN0b3IpLmxhc3RJbmRleE9mKF8uZnJvbS5hY3Rvcik7ZGVsZXRlIG5pLmFjdGl2YXRpb25zLnNwbGljZShQLDEpWzBdfWJyZWFrfV8ucGxhY2VtZW50IT09dm9pZCAwPyh5PWF3YWl0IHdpbihfLHMsZCksXy5ub3RlTW9kZWw9eSx2LmZvckVhY2goUD0+e2I9UCxiLmZyb209Y2kuZ2V0TWluKGIuZnJvbSx5LnN0YXJ0eCksYi50bz1jaS5nZXRNYXgoYi50byx5LnN0YXJ0eCt5LndpZHRoKSxiLndpZHRoPWNpLmdldE1heChiLndpZHRoLE1hdGguYWJzKGIuZnJvbS1iLnRvKSktRW4ubGFiZWxCb3hXaWR0aH0pKTooVD15aW4oXyxzLGQpLF8ubXNnTW9kZWw9VCxULnN0YXJ0eCYmVC5zdG9weCYmdi5sZW5ndGg+MCYmdi5mb3JFYWNoKFA9PntpZihiPVAsVC5zdGFydHg9PT1ULnN0b3B4KXtjb25zdCBSPXNbXy5mcm9tXSxGPXNbXy50b107Yi5mcm9tPWNpLmdldE1pbihSLngtVC53aWR0aC8yLFIueC1SLndpZHRoLzIsYi5mcm9tKSxiLnRvPWNpLmdldE1heChGLngrVC53aWR0aC8yLEYueCtSLndpZHRoLzIsYi50byksYi53aWR0aD1jaS5nZXRNYXgoYi53aWR0aCxNYXRoLmFicyhiLnRvLWIuZnJvbSkpLUVuLmxhYmVsQm94V2lkdGh9ZWxzZSBiLmZyb209Y2kuZ2V0TWluKFQuc3RhcnR4LGIuZnJvbSksYi50bz1jaS5nZXRNYXgoVC5zdG9weCxiLnRvKSxiLndpZHRoPWNpLmdldE1heChiLndpZHRoLFQud2lkdGgpLUVuLmxhYmVsQm94V2lkdGh9KSl9cmV0dXJuIG5pLmFjdGl2YXRpb25zPVtdLFhlLmRlYnVnKCJMb29wIHR5cGUgd2lkdGhzOiIscCkscH0sa2luPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6eXJuLGRiOkZHZSxyZW5kZXJlcjp7Ym91bmRzOm5pLGRyYXdBY3RvcnM6U3ZlLGRyYXdBY3RvcnNQb3B1cDpWR2Usc2V0Q29uZjpVR2UsZHJhdzpwaW59LHN0eWxlczpVcm4saW5pdDooe3dyYXA6aX0pPT57RkdlLnNldFdyYXAoaSl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgX3ZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oYW8sVHIsRm4scW4pe2ZvcihGbj1Gbnx8e30scW49YW8ubGVuZ3RoO3FuLS07Rm5bYW9bcW5dXT1Ucik7cmV0dXJuIEZufSxzPVsxLDE3XSx1PVsxLDE4XSxkPVsxLDE5XSxwPVsxLDM5XSx2PVsxLDQwXSxiPVsxLDI1XSx5PVsxLDIzXSxUPVsxLDI0XSxfPVsxLDMxXSxBPVsxLDMyXSxQPVsxLDMzXSxSPVsxLDM0XSxGPVsxLDM1XSxqPVsxLDM2XSxLPVsxLDI2XSxlZT1bMSwyN10saWU9WzEsMjhdLG9lPVsxLDI5XSxwZT1bMSw0M10sYmU9WzEsMzBdLGFlPVsxLDQyXSxuZT1bMSw0NF0sc2U9WzEsNDFdLGRlPVsxLDQ1XSxYPVsxLDldLGdlPVsxLDgsOV0sVz1bMSw1Nl0seGU9WzEsNTddLFU9WzEsNThdLEZlPVsxLDU5XSxQZT1bMSw2MF0samU9WzEsNjFdLEllPVsxLDYyXSxTZT1bMSw4LDksMzldLENlPVsxLDc0XSxrZT1bMSw4LDksMTIsMTMsMjEsMzcsMzksNDIsNTksNjAsNjEsNjIsNjMsNjQsNjUsNzAsNzJdLEtlPVsxLDgsOSwxMiwxMywxOSwyMSwzNywzOSw0Miw0Niw1OSw2MCw2MSw2Miw2Myw2NCw2NSw3MCw3Miw3NCw4MCw5NSw5Nyw5OF0sRnQ9WzEzLDc0LDgwLDk1LDk3LDk4XSxOZT1bMTMsNjQsNjUsNzQsODAsOTUsOTcsOThdLGduPVsxMyw1OSw2MCw2MSw2Miw2Myw3NCw4MCw5NSw5Nyw5OF0sX3Q9WzEsOTNdLEV0PVsxLDExMF0sR3Q9WzEsMTA4XSxsbj1bMSwxMDJdLHh0PVsxLDEwM10sUHQ9WzEsMTA0XSxRZT1bMSwxMDVdLER0PVsxLDEwNl0sa3Q9WzEsMTA3XSxPbj1bMSwxMDldLGh0PVsxLDgsOSwzNywzOSw0Ml0senI9WzEsOCw5LDIxXSx5dD1bMSw4LDksNzhdLGppPVsxLDgsOSwyMSw3Myw3NCw3OCw4MCw4MSw4Miw4Myw4NCw4NV0seGk9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxzdGF0ZW1lbnRzOjUsZ3JhcGhDb25maWc6NixDTEFTU19ESUFHUkFNOjcsTkVXTElORTo4LEVPRjo5LHN0YXRlbWVudDoxMCxjbGFzc0xhYmVsOjExLFNRUzoxMixTVFI6MTMsU1FFOjE0LG5hbWVzcGFjZU5hbWU6MTUsYWxwaGFOdW1Ub2tlbjoxNixjbGFzc05hbWU6MTcsY2xhc3NMaXRlcmFsTmFtZToxOCxHRU5FUklDVFlQRToxOSxyZWxhdGlvblN0YXRlbWVudDoyMCxMQUJFTDoyMSxuYW1lc3BhY2VTdGF0ZW1lbnQ6MjIsY2xhc3NTdGF0ZW1lbnQ6MjMsbWVtYmVyU3RhdGVtZW50OjI0LGFubm90YXRpb25TdGF0ZW1lbnQ6MjUsY2xpY2tTdGF0ZW1lbnQ6MjYsc3R5bGVTdGF0ZW1lbnQ6MjcsY3NzQ2xhc3NTdGF0ZW1lbnQ6Mjgsbm90ZVN0YXRlbWVudDoyOSxkaXJlY3Rpb246MzAsYWNjX3RpdGxlOjMxLGFjY190aXRsZV92YWx1ZTozMixhY2NfZGVzY3I6MzMsYWNjX2Rlc2NyX3ZhbHVlOjM0LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzUsbmFtZXNwYWNlSWRlbnRpZmllcjozNixTVFJVQ1RfU1RBUlQ6MzcsY2xhc3NTdGF0ZW1lbnRzOjM4LFNUUlVDVF9TVE9QOjM5LE5BTUVTUEFDRTo0MCxjbGFzc0lkZW50aWZpZXI6NDEsU1RZTEVfU0VQQVJBVE9SOjQyLG1lbWJlcnM6NDMsQ0xBU1M6NDQsQU5OT1RBVElPTl9TVEFSVDo0NSxBTk5PVEFUSU9OX0VORDo0NixNRU1CRVI6NDcsU0VQQVJBVE9SOjQ4LHJlbGF0aW9uOjQ5LE5PVEVfRk9SOjUwLG5vdGVUZXh0OjUxLE5PVEU6NTIsZGlyZWN0aW9uX3RiOjUzLGRpcmVjdGlvbl9idDo1NCxkaXJlY3Rpb25fcmw6NTUsZGlyZWN0aW9uX2xyOjU2LHJlbGF0aW9uVHlwZTo1NyxsaW5lVHlwZTo1OCxBR0dSRUdBVElPTjo1OSxFWFRFTlNJT046NjAsQ09NUE9TSVRJT046NjEsREVQRU5ERU5DWTo2MixMT0xMSVBPUDo2MyxMSU5FOjY0LERPVFRFRF9MSU5FOjY1LENBTExCQUNLOjY2LExJTks6NjcsTElOS19UQVJHRVQ6NjgsQ0xJQ0s6NjksQ0FMTEJBQ0tfTkFNRTo3MCxDQUxMQkFDS19BUkdTOjcxLEhSRUY6NzIsU1RZTEU6NzMsQUxQSEE6NzQsc3R5bGVzT3B0Ojc1LENTU0NMQVNTOjc2LHN0eWxlOjc3LENPTU1BOjc4LHN0eWxlQ29tcG9uZW50Ojc5LE5VTTo4MCxDT0xPTjo4MSxVTklUOjgyLFNQQUNFOjgzLEJSS1Q6ODQsUENUOjg1LGNvbW1lbnRUb2tlbjo4Nix0ZXh0VG9rZW46ODcsZ3JhcGhDb2RlVG9rZW5zOjg4LHRleHROb1RhZ3NUb2tlbjo4OSxUQUdTVEFSVDo5MCxUQUdFTkQ6OTEsIj09Ijo5MiwiLS0iOjkzLERFRkFVTFQ6OTQsTUlOVVM6OTUsa2V5d29yZHM6OTYsVU5JQ09ERV9URVhUOjk3LEJRVU9URV9TVFI6OTgsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDc6IkNMQVNTX0RJQUdSQU0iLDg6Ik5FV0xJTkUiLDk6IkVPRiIsMTI6IlNRUyIsMTM6IlNUUiIsMTQ6IlNRRSIsMTk6IkdFTkVSSUNUWVBFIiwyMToiTEFCRUwiLDMxOiJhY2NfdGl0bGUiLDMyOiJhY2NfdGl0bGVfdmFsdWUiLDMzOiJhY2NfZGVzY3IiLDM0OiJhY2NfZGVzY3JfdmFsdWUiLDM1OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNzoiU1RSVUNUX1NUQVJUIiwzOToiU1RSVUNUX1NUT1AiLDQwOiJOQU1FU1BBQ0UiLDQyOiJTVFlMRV9TRVBBUkFUT1IiLDQ0OiJDTEFTUyIsNDU6IkFOTk9UQVRJT05fU1RBUlQiLDQ2OiJBTk5PVEFUSU9OX0VORCIsNDc6Ik1FTUJFUiIsNDg6IlNFUEFSQVRPUiIsNTA6Ik5PVEVfRk9SIiw1MjoiTk9URSIsNTM6ImRpcmVjdGlvbl90YiIsNTQ6ImRpcmVjdGlvbl9idCIsNTU6ImRpcmVjdGlvbl9ybCIsNTY6ImRpcmVjdGlvbl9sciIsNTk6IkFHR1JFR0FUSU9OIiw2MDoiRVhURU5TSU9OIiw2MToiQ09NUE9TSVRJT04iLDYyOiJERVBFTkRFTkNZIiw2MzoiTE9MTElQT1AiLDY0OiJMSU5FIiw2NToiRE9UVEVEX0xJTkUiLDY2OiJDQUxMQkFDSyIsNjc6IkxJTksiLDY4OiJMSU5LX1RBUkdFVCIsNjk6IkNMSUNLIiw3MDoiQ0FMTEJBQ0tfTkFNRSIsNzE6IkNBTExCQUNLX0FSR1MiLDcyOiJIUkVGIiw3MzoiU1RZTEUiLDc0OiJBTFBIQSIsNzY6IkNTU0NMQVNTIiw3ODoiQ09NTUEiLDgwOiJOVU0iLDgxOiJDT0xPTiIsODI6IlVOSVQiLDgzOiJTUEFDRSIsODQ6IkJSS1QiLDg1OiJQQ1QiLDg4OiJncmFwaENvZGVUb2tlbnMiLDkwOiJUQUdTVEFSVCIsOTE6IlRBR0VORCIsOTI6Ij09Iiw5MzoiLS0iLDk0OiJERUZBVUxUIiw5NToiTUlOVVMiLDk2OiJrZXl3b3JkcyIsOTc6IlVOSUNPREVfVEVYVCIsOTg6IkJRVU9URV9TVFIifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMV0sWzQsMV0sWzYsNF0sWzUsMV0sWzUsMl0sWzUsM10sWzExLDNdLFsxNSwxXSxbMTUsMl0sWzE3LDFdLFsxNywxXSxbMTcsMl0sWzE3LDJdLFsxNywyXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzEwLDFdLFsyMiw0XSxbMjIsNV0sWzM2LDJdLFszOCwxXSxbMzgsMl0sWzM4LDNdLFsyMywxXSxbMjMsM10sWzIzLDRdLFsyMyw2XSxbNDEsMl0sWzQxLDNdLFsyNSw0XSxbNDMsMV0sWzQzLDJdLFsyNCwxXSxbMjQsMl0sWzI0LDFdLFsyNCwxXSxbMjAsM10sWzIwLDRdLFsyMCw0XSxbMjAsNV0sWzI5LDNdLFsyOSwyXSxbMzAsMV0sWzMwLDFdLFszMCwxXSxbMzAsMV0sWzQ5LDNdLFs0OSwyXSxbNDksMl0sWzQ5LDFdLFs1NywxXSxbNTcsMV0sWzU3LDFdLFs1NywxXSxbNTcsMV0sWzU4LDFdLFs1OCwxXSxbMjYsM10sWzI2LDRdLFsyNiwzXSxbMjYsNF0sWzI2LDRdLFsyNiw1XSxbMjYsM10sWzI2LDRdLFsyNiw0XSxbMjYsNV0sWzI2LDRdLFsyNiw1XSxbMjYsNV0sWzI2LDZdLFsyNywzXSxbMjgsM10sWzc1LDFdLFs3NSwzXSxbNzcsMV0sWzc3LDJdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs4NiwxXSxbODYsMV0sWzg3LDFdLFs4NywxXSxbODcsMV0sWzg3LDFdLFs4NywxXSxbODcsMV0sWzg3LDFdLFs4OSwxXSxbODksMV0sWzg5LDFdLFs4OSwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE4LDFdLFs1MSwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihUcixGbixxbixVbixBdCx3dCxvbil7dmFyIGZuPXd0Lmxlbmd0aC0xO3N3aXRjaChBdCl7Y2FzZSA4OnRoaXMuJD13dFtmbi0xXTticmVhaztjYXNlIDk6Y2FzZSAxMTpjYXNlIDEyOnRoaXMuJD13dFtmbl07YnJlYWs7Y2FzZSAxMDpjYXNlIDEzOnRoaXMuJD13dFtmbi0xXSt3dFtmbl07YnJlYWs7Y2FzZSAxNDpjYXNlIDE1OnRoaXMuJD13dFtmbi0xXSsifiIrd3RbZm5dKyJ+IjticmVhaztjYXNlIDE2OlVuLmFkZFJlbGF0aW9uKHd0W2ZuXSk7YnJlYWs7Y2FzZSAxNzp3dFtmbi0xXS50aXRsZT1Vbi5jbGVhbnVwTGFiZWwod3RbZm5dKSxVbi5hZGRSZWxhdGlvbih3dFtmbi0xXSk7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9d3RbZm5dLnRyaW0oKSxVbi5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTp0aGlzLiQ9d3RbZm5dLnRyaW0oKSxVbi5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzA6VW4uYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlKHd0W2ZuLTNdLHd0W2ZuLTFdKTticmVhaztjYXNlIDMxOlVuLmFkZENsYXNzZXNUb05hbWVzcGFjZSh3dFtmbi00XSx3dFtmbi0xXSk7YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9d3RbZm5dLFVuLmFkZE5hbWVzcGFjZSh3dFtmbl0pO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPVt3dFtmbl1dO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPVt3dFtmbi0xXV07YnJlYWs7Y2FzZSAzNTp3dFtmbl0udW5zaGlmdCh3dFtmbi0yXSksdGhpcy4kPXd0W2ZuXTticmVhaztjYXNlIDM3OlVuLnNldENzc0NsYXNzKHd0W2ZuLTJdLHd0W2ZuXSk7YnJlYWs7Y2FzZSAzODpVbi5hZGRNZW1iZXJzKHd0W2ZuLTNdLHd0W2ZuLTFdKTticmVhaztjYXNlIDM5OlVuLnNldENzc0NsYXNzKHd0W2ZuLTVdLHd0W2ZuLTNdKSxVbi5hZGRNZW1iZXJzKHd0W2ZuLTVdLHd0W2ZuLTFdKTticmVhaztjYXNlIDQwOnRoaXMuJD13dFtmbl0sVW4uYWRkQ2xhc3Mod3RbZm5dKTticmVhaztjYXNlIDQxOnRoaXMuJD13dFtmbi0xXSxVbi5hZGRDbGFzcyh3dFtmbi0xXSksVW4uc2V0Q2xhc3NMYWJlbCh3dFtmbi0xXSx3dFtmbl0pO2JyZWFrO2Nhc2UgNDI6VW4uYWRkQW5ub3RhdGlvbih3dFtmbl0sd3RbZm4tMl0pO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPVt3dFtmbl1dO2JyZWFrO2Nhc2UgNDQ6d3RbZm5dLnB1c2god3RbZm4tMV0pLHRoaXMuJD13dFtmbl07YnJlYWs7Y2FzZSA0NTpicmVhaztjYXNlIDQ2OlVuLmFkZE1lbWJlcih3dFtmbi0xXSxVbi5jbGVhbnVwTGFiZWwod3RbZm5dKSk7YnJlYWs7Y2FzZSA0NzpicmVhaztjYXNlIDQ4OmJyZWFrO2Nhc2UgNDk6dGhpcy4kPXtpZDE6d3RbZm4tMl0saWQyOnd0W2ZuXSxyZWxhdGlvbjp3dFtmbi0xXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDUwOnRoaXMuJD17aWQxOnd0W2ZuLTNdLGlkMjp3dFtmbl0scmVsYXRpb246d3RbZm4tMV0scmVsYXRpb25UaXRsZTE6d3RbZm4tMl0scmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDUxOnRoaXMuJD17aWQxOnd0W2ZuLTNdLGlkMjp3dFtmbl0scmVsYXRpb246d3RbZm4tMl0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOnd0W2ZuLTFdfTticmVhaztjYXNlIDUyOnRoaXMuJD17aWQxOnd0W2ZuLTRdLGlkMjp3dFtmbl0scmVsYXRpb246d3RbZm4tMl0scmVsYXRpb25UaXRsZTE6d3RbZm4tM10scmVsYXRpb25UaXRsZTI6d3RbZm4tMV19O2JyZWFrO2Nhc2UgNTM6VW4uYWRkTm90ZSh3dFtmbl0sd3RbZm4tMV0pO2JyZWFrO2Nhc2UgNTQ6VW4uYWRkTm90ZSh3dFtmbl0pO2JyZWFrO2Nhc2UgNTU6VW4uc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNTY6VW4uc2V0RGlyZWN0aW9uKCJCVCIpO2JyZWFrO2Nhc2UgNTc6VW4uc2V0RGlyZWN0aW9uKCJSTCIpO2JyZWFrO2Nhc2UgNTg6VW4uc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgNTk6dGhpcy4kPXt0eXBlMTp3dFtmbi0yXSx0eXBlMjp3dFtmbl0sbGluZVR5cGU6d3RbZm4tMV19O2JyZWFrO2Nhc2UgNjA6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6d3RbZm5dLGxpbmVUeXBlOnd0W2ZuLTFdfTticmVhaztjYXNlIDYxOnRoaXMuJD17dHlwZTE6d3RbZm4tMV0sdHlwZTI6Im5vbmUiLGxpbmVUeXBlOnd0W2ZuXX07YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjoibm9uZSIsbGluZVR5cGU6d3RbZm5dfTticmVhaztjYXNlIDYzOnRoaXMuJD1Vbi5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT047YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9VW4ucmVsYXRpb25UeXBlLkVYVEVOU0lPTjticmVhaztjYXNlIDY1OnRoaXMuJD1Vbi5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT047YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9VW4ucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k7YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9VW4ucmVsYXRpb25UeXBlLkxPTExJUE9QO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPVVuLmxpbmVUeXBlLkxJTkU7YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9VW4ubGluZVR5cGUuRE9UVEVEX0xJTkU7YnJlYWs7Y2FzZSA3MDpjYXNlIDc2OnRoaXMuJD13dFtmbi0yXSxVbi5zZXRDbGlja0V2ZW50KHd0W2ZuLTFdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA3MTpjYXNlIDc3OnRoaXMuJD13dFtmbi0zXSxVbi5zZXRDbGlja0V2ZW50KHd0W2ZuLTJdLHd0W2ZuLTFdKSxVbi5zZXRUb29sdGlwKHd0W2ZuLTJdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9d3RbZm4tMl0sVW4uc2V0TGluayh3dFtmbi0xXSx3dFtmbl0pO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPXd0W2ZuLTNdLFVuLnNldExpbmsod3RbZm4tMl0sd3RbZm4tMV0sd3RbZm5dKTticmVhaztjYXNlIDc0OnRoaXMuJD13dFtmbi0zXSxVbi5zZXRMaW5rKHd0W2ZuLTJdLHd0W2ZuLTFdKSxVbi5zZXRUb29sdGlwKHd0W2ZuLTJdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9d3RbZm4tNF0sVW4uc2V0TGluayh3dFtmbi0zXSx3dFtmbi0yXSx3dFtmbl0pLFVuLnNldFRvb2x0aXAod3RbZm4tM10sd3RbZm4tMV0pO2JyZWFrO2Nhc2UgNzg6dGhpcy4kPXd0W2ZuLTNdLFVuLnNldENsaWNrRXZlbnQod3RbZm4tMl0sd3RbZm4tMV0sd3RbZm5dKTticmVhaztjYXNlIDc5OnRoaXMuJD13dFtmbi00XSxVbi5zZXRDbGlja0V2ZW50KHd0W2ZuLTNdLHd0W2ZuLTJdLHd0W2ZuLTFdKSxVbi5zZXRUb29sdGlwKHd0W2ZuLTNdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA4MDp0aGlzLiQ9d3RbZm4tM10sVW4uc2V0TGluayh3dFtmbi0yXSx3dFtmbl0pO2JyZWFrO2Nhc2UgODE6dGhpcy4kPXd0W2ZuLTRdLFVuLnNldExpbmsod3RbZm4tM10sd3RbZm4tMV0sd3RbZm5dKTticmVhaztjYXNlIDgyOnRoaXMuJD13dFtmbi00XSxVbi5zZXRMaW5rKHd0W2ZuLTNdLHd0W2ZuLTFdKSxVbi5zZXRUb29sdGlwKHd0W2ZuLTNdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA4Mzp0aGlzLiQ9d3RbZm4tNV0sVW4uc2V0TGluayh3dFtmbi00XSx3dFtmbi0yXSx3dFtmbl0pLFVuLnNldFRvb2x0aXAod3RbZm4tNF0sd3RbZm4tMV0pO2JyZWFrO2Nhc2UgODQ6dGhpcy4kPXd0W2ZuLTJdLFVuLnNldENzc1N0eWxlKHd0W2ZuLTFdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA4NTpVbi5zZXRDc3NDbGFzcyh3dFtmbi0xXSx3dFtmbl0pO2JyZWFrO2Nhc2UgODY6dGhpcy4kPVt3dFtmbl1dO2JyZWFrO2Nhc2UgODc6d3RbZm4tMl0ucHVzaCh3dFtmbl0pLHRoaXMuJD13dFtmbi0yXTticmVhaztjYXNlIDg5OnRoaXMuJD13dFtmbi0xXSt3dFtmbl07YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6NCw3OlsxLDZdLDEwOjUsMTY6MzcsMTc6MjAsMTg6MzgsMjA6NywyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjc6MTMsMjg6MTQsMjk6MTUsMzA6MTYsMzE6cywzMzp1LDM1OmQsMzY6MjEsNDA6cCw0MToyMiw0NDp2LDQ1OmIsNDc6eSw0ODpULDUwOl8sNTI6QSw1MzpQLDU0OlIsNTU6Riw1NjpqLDY2OkssNjc6ZWUsNjk6aWUsNzM6b2UsNzQ6cGUsNzY6YmUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LHsxOlszXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXX0saShYLFsyLDVdLHs4OlsxLDQ2XX0pLHs4OlsxLDQ3XX0saShnZSxbMiwxNl0sezIxOlsxLDQ4XX0pLGkoZ2UsWzIsMThdKSxpKGdlLFsyLDE5XSksaShnZSxbMiwyMF0pLGkoZ2UsWzIsMjFdKSxpKGdlLFsyLDIyXSksaShnZSxbMiwyM10pLGkoZ2UsWzIsMjRdKSxpKGdlLFsyLDI1XSksaShnZSxbMiwyNl0pLHszMjpbMSw0OV19LHszNDpbMSw1MF19LGkoZ2UsWzIsMjldKSxpKGdlLFsyLDQ1XSx7NDk6NTEsNTc6NTQsNTg6NTUsMTM6WzEsNTJdLDIxOlsxLDUzXSw1OTpXLDYwOnhlLDYxOlUsNjI6RmUsNjM6UGUsNjQ6amUsNjU6SWV9KSx7Mzc6WzEsNjNdfSxpKFNlLFsyLDM2XSx7Mzc6WzEsNjVdLDQyOlsxLDY0XX0pLGkoZ2UsWzIsNDddKSxpKGdlLFsyLDQ4XSksezE2OjY2LDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlfSx7MTY6MzcsMTc6NjcsMTg6MzgsNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LHsxNjozNywxNzo2OCwxODozOCw3NDpwZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0sezE2OjM3LDE3OjY5LDE4OjM4LDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlLDk4OmRlfSx7NzQ6WzEsNzBdfSx7MTM6WzEsNzFdfSx7MTY6MzcsMTc6NzIsMTg6MzgsNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LHsxMzpDZSw1MTo3M30saShnZSxbMiw1NV0pLGkoZ2UsWzIsNTZdKSxpKGdlLFsyLDU3XSksaShnZSxbMiw1OF0pLGkoa2UsWzIsMTFdLHsxNjozNywxODozOCwxNzo3NSwxOTpbMSw3Nl0sNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9KSxpKGtlLFsyLDEyXSx7MTk6WzEsNzddfSksezE1Ojc4LDE2Ojc5LDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlfSx7MTY6MzcsMTc6ODAsMTg6MzgsNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LGkoS2UsWzIsMTEyXSksaShLZSxbMiwxMTNdKSxpKEtlLFsyLDExNF0pLGkoS2UsWzIsMTE1XSksaShbMSw4LDksMTIsMTMsMTksMjEsMzcsMzksNDIsNTksNjAsNjEsNjIsNjMsNjQsNjUsNzAsNzJdLFsyLDExNl0pLGkoWCxbMiw2XSx7MTA6NSwyMDo3LDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyNzoxMywyODoxNCwyOToxNSwzMDoxNiwxNzoyMCwzNjoyMSw0MToyMiwxNjozNywxODozOCw1OjgxLDMxOnMsMzM6dSwzNTpkLDQwOnAsNDQ6diw0NTpiLDQ3OnksNDg6VCw1MDpfLDUyOkEsNTM6UCw1NDpSLDU1OkYsNTY6aiw2NjpLLDY3OmVlLDY5OmllLDczOm9lLDc0OnBlLDc2OmJlLDgwOmFlLDk1Om5lLDk3OnNlLDk4OmRlfSksezU6ODIsMTA6NSwxNjozNywxNzoyMCwxODozOCwyMDo3LDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyNzoxMywyODoxNCwyOToxNSwzMDoxNiwzMTpzLDMzOnUsMzU6ZCwzNjoyMSw0MDpwLDQxOjIyLDQ0OnYsNDU6Yiw0Nzp5LDQ4OlQsNTA6Xyw1MjpBLDUzOlAsNTQ6Uiw1NTpGLDU2OmosNjY6Syw2NzplZSw2OTppZSw3MzpvZSw3NDpwZSw3NjpiZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0saShnZSxbMiwxN10pLGkoZ2UsWzIsMjddKSxpKGdlLFsyLDI4XSksezEzOlsxLDg0XSwxNjozNywxNzo4MywxODozOCw3NDpwZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0sezQ5Ojg1LDU3OjU0LDU4OjU1LDU5OlcsNjA6eGUsNjE6VSw2MjpGZSw2MzpQZSw2NDpqZSw2NTpJZX0saShnZSxbMiw0Nl0pLHs1ODo4Niw2NDpqZSw2NTpJZX0saShGdCxbMiw2Ml0sezU3Ojg3LDU5OlcsNjA6eGUsNjE6VSw2MjpGZSw2MzpQZX0pLGkoTmUsWzIsNjNdKSxpKE5lLFsyLDY0XSksaShOZSxbMiw2NV0pLGkoTmUsWzIsNjZdKSxpKE5lLFsyLDY3XSksaShnbixbMiw2OF0pLGkoZ24sWzIsNjldKSx7ODpbMSw4OV0sMjM6OTAsMzg6ODgsNDE6MjIsNDQ6dn0sezE2OjkxLDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlfSx7NDM6OTIsNDc6X3R9LHs0NjpbMSw5NF19LHsxMzpbMSw5NV19LHsxMzpbMSw5Nl19LHs3MDpbMSw5N10sNzI6WzEsOThdfSx7MjE6RXQsNzM6R3QsNzQ6bG4sNzU6OTksNzc6MTAwLDc5OjEwMSw4MDp4dCw4MTpQdCw4MjpRZSw4MzpEdCw4NDprdCw4NTpPbn0sezc0OlsxLDExMV19LHsxMzpDZSw1MToxMTJ9LGkoZ2UsWzIsNTRdKSxpKGdlLFsyLDExN10pLGkoa2UsWzIsMTNdKSxpKGtlLFsyLDE0XSksaShrZSxbMiwxNV0pLHszNzpbMiwzMl19LHsxNToxMTMsMTY6NzksMzc6WzIsOV0sNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2V9LGkoaHQsWzIsNDBdLHsxMToxMTQsMTI6WzEsMTE1XX0pLGkoWCxbMiw3XSksezk6WzEsMTE2XX0saSh6cixbMiw0OV0pLHsxNjozNywxNzoxMTcsMTg6MzgsNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LHsxMzpbMSwxMTldLDE2OjM3LDE3OjExOCwxODozOCw3NDpwZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0saShGdCxbMiw2MV0sezU3OjEyMCw1OTpXLDYwOnhlLDYxOlUsNjI6RmUsNjM6UGV9KSxpKEZ0LFsyLDYwXSksezM5OlsxLDEyMV19LHsyMzo5MCwzODoxMjIsNDE6MjIsNDQ6dn0sezg6WzEsMTIzXSwzOTpbMiwzM119LGkoU2UsWzIsMzddLHszNzpbMSwxMjRdfSksezM5OlsxLDEyNV19LHszOTpbMiw0M10sNDM6MTI2LDQ3Ol90fSx7MTY6MzcsMTc6MTI3LDE4OjM4LDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlLDk4OmRlfSxpKGdlLFsyLDcwXSx7MTM6WzEsMTI4XX0pLGkoZ2UsWzIsNzJdLHsxMzpbMSwxMzBdLDY4OlsxLDEyOV19KSxpKGdlLFsyLDc2XSx7MTM6WzEsMTMxXSw3MTpbMSwxMzJdfSksezEzOlsxLDEzM119LGkoZ2UsWzIsODRdLHs3ODpbMSwxMzRdfSksaSh5dCxbMiw4Nl0sezc5OjEzNSwyMTpFdCw3MzpHdCw3NDpsbiw4MDp4dCw4MTpQdCw4MjpRZSw4MzpEdCw4NDprdCw4NTpPbn0pLGkoamksWzIsODhdKSxpKGppLFsyLDkwXSksaShqaSxbMiw5MV0pLGkoamksWzIsOTJdKSxpKGppLFsyLDkzXSksaShqaSxbMiw5NF0pLGkoamksWzIsOTVdKSxpKGppLFsyLDk2XSksaShqaSxbMiw5N10pLGkoamksWzIsOThdKSxpKGdlLFsyLDg1XSksaShnZSxbMiw1M10pLHszNzpbMiwxMF19LGkoaHQsWzIsNDFdKSx7MTM6WzEsMTM2XX0sezE6WzIsNF19LGkoenIsWzIsNTFdKSxpKHpyLFsyLDUwXSksezE2OjM3LDE3OjEzNywxODozOCw3NDpwZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0saShGdCxbMiw1OV0pLGkoZ2UsWzIsMzBdKSx7Mzk6WzEsMTM4XX0sezIzOjkwLDM4OjEzOSwzOTpbMiwzNF0sNDE6MjIsNDQ6dn0sezQzOjE0MCw0NzpfdH0saShTZSxbMiwzOF0pLHszOTpbMiw0NF19LGkoZ2UsWzIsNDJdKSxpKGdlLFsyLDcxXSksaShnZSxbMiw3M10pLGkoZ2UsWzIsNzRdLHs2ODpbMSwxNDFdfSksaShnZSxbMiw3N10pLGkoZ2UsWzIsNzhdLHsxMzpbMSwxNDJdfSksaShnZSxbMiw4MF0sezEzOlsxLDE0NF0sNjg6WzEsMTQzXX0pLHsyMTpFdCw3MzpHdCw3NDpsbiw3NzoxNDUsNzk6MTAxLDgwOnh0LDgxOlB0LDgyOlFlLDgzOkR0LDg0Omt0LDg1Ok9ufSxpKGppLFsyLDg5XSksezE0OlsxLDE0Nl19LGkoenIsWzIsNTJdKSxpKGdlLFsyLDMxXSksezM5OlsyLDM1XX0sezM5OlsxLDE0N119LGkoZ2UsWzIsNzVdKSxpKGdlLFsyLDc5XSksaShnZSxbMiw4MV0pLGkoZ2UsWzIsODJdLHs2ODpbMSwxNDhdfSksaSh5dCxbMiw4N10sezc5OjEzNSwyMTpFdCw3MzpHdCw3NDpsbiw4MDp4dCw4MTpQdCw4MjpRZSw4MzpEdCw4NDprdCw4NTpPbn0pLGkoaHQsWzIsOF0pLGkoU2UsWzIsMzldKSxpKGdlLFsyLDgzXSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDM6WzIsMl0sNDpbMiwzXSw3ODpbMiwzMl0sMTEzOlsyLDEwXSwxMTY6WzIsNF0sMTI2OlsyLDQ0XSwxMzk6WzIsMzVdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKFRyLEZuKXtpZihGbi5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFRyKTtlbHNle3ZhciBxbj1uZXcgRXJyb3IoVHIpO3Rocm93IHFuLmhhc2g9Rm4scW59fSxwYXJzZTpmdW5jdGlvbihUcil7dmFyIEZuPXRoaXMscW49WzBdLFVuPVtdLEF0PVtudWxsXSx3dD1bXSxvbj10aGlzLnRhYmxlLGZuPSIiLEFuPTAsb289MCxqbz0yLCRvPTEsUGE9d3Quc2xpY2UuY2FsbChhcmd1bWVudHMsMSksd289T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxfcz17eXk6e319O2Zvcih2YXIgdGwgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx0bCkmJihfcy55eVt0bF09dGhpcy55eVt0bF0pO3dvLnNldElucHV0KFRyLF9zLnl5KSxfcy55eS5sZXhlcj13byxfcy55eS5wYXJzZXI9dGhpcyx0eXBlb2Ygd28ueXlsbG9jPiJ1IiYmKHdvLnl5bGxvYz17fSk7dmFyIGRhPXdvLnl5bGxvYzt3dC5wdXNoKGRhKTt2YXIgajA9d28ub3B0aW9ucyYmd28ub3B0aW9ucy5yYW5nZXM7dHlwZW9mIF9zLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPV9zLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIHBtKCl7dmFyIGdhO3JldHVybiBnYT1Vbi5wb3AoKXx8d28ubGV4KCl8fCRvLHR5cGVvZiBnYSE9Im51bWJlciImJihnYSBpbnN0YW5jZW9mIEFycmF5JiYoVW49Z2EsZ2E9VW4ucG9wKCkpLGdhPUZuLnN5bWJvbHNfW2dhXXx8Z2EpLGdhfWZvcih2YXIgTWwsWGMsQmMsamEsT3U9e30sU2EsUG8sRmMseGE7Oyl7aWYoWGM9cW5bcW4ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbWGNdP0JjPXRoaXMuZGVmYXVsdEFjdGlvbnNbWGNdOigoTWw9PT1udWxsfHx0eXBlb2YgTWw+InUiKSYmKE1sPXBtKCkpLEJjPW9uW1hjXSYmb25bWGNdW01sXSksdHlwZW9mIEJjPiJ1Inx8IUJjLmxlbmd0aHx8IUJjWzBdKXt2YXIgQmE9IiI7eGE9W107Zm9yKFNhIGluIG9uW1hjXSl0aGlzLnRlcm1pbmFsc19bU2FdJiZTYT5qbyYmeGEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1NhXSsiJyIpO3dvLnNob3dQb3NpdGlvbj9CYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhBbisxKStgOgpgK3dvLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGAreGEuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tNbF18fE1sKSsiJyI6QmE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoQW4rMSkrIjogVW5leHBlY3RlZCAiKyhNbD09JG8/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bTWxdfHxNbCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoQmEse3RleHQ6d28ubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW01sXXx8TWwsbGluZTp3by55eWxpbmVubyxsb2M6ZGEsZXhwZWN0ZWQ6eGF9KX1pZihCY1swXWluc3RhbmNlb2YgQXJyYXkmJkJjLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrWGMrIiwgdG9rZW46ICIrTWwpO3N3aXRjaChCY1swXSl7Y2FzZSAxOnFuLnB1c2goTWwpLEF0LnB1c2god28ueXl0ZXh0KSx3dC5wdXNoKHdvLnl5bGxvYykscW4ucHVzaChCY1sxXSksTWw9bnVsbCxvbz13by55eWxlbmcsZm49d28ueXl0ZXh0LEFuPXdvLnl5bGluZW5vLGRhPXdvLnl5bGxvYzticmVhaztjYXNlIDI6aWYoUG89dGhpcy5wcm9kdWN0aW9uc19bQmNbMV1dWzFdLE91LiQ9QXRbQXQubGVuZ3RoLVBvXSxPdS5fJD17Zmlyc3RfbGluZTp3dFt3dC5sZW5ndGgtKFBvfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6d3Rbd3QubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46d3Rbd3QubGVuZ3RoLShQb3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp3dFt3dC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGowJiYoT3UuXyQucmFuZ2U9W3d0W3d0Lmxlbmd0aC0oUG98fDEpXS5yYW5nZVswXSx3dFt3dC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxqYT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoT3UsW2ZuLG9vLEFuLF9zLnl5LEJjWzFdLEF0LHd0XS5jb25jYXQoUGEpKSx0eXBlb2YgamE8InUiKXJldHVybiBqYTtQbyYmKHFuPXFuLnNsaWNlKDAsLTEqUG8qMiksQXQ9QXQuc2xpY2UoMCwtMSpQbyksd3Q9d3Quc2xpY2UoMCwtMSpQbykpLHFuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQmNbMV1dWzBdKSxBdC5wdXNoKE91LiQpLHd0LnB1c2goT3UuXyQpLEZjPW9uW3FuW3FuLmxlbmd0aC0yXV1bcW5bcW4ubGVuZ3RoLTFdXSxxbi5wdXNoKEZjKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTWE9ZnVuY3Rpb24oKXt2YXIgYW89e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oRm4scW4pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRm4scW4pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEZuKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oVHIsRm4pe3JldHVybiB0aGlzLnl5PUZufHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1Ucix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgVHI9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVRyLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1Ucix0aGlzLm1hdGNoZWQrPVRyO3ZhciBGbj1Uci5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEZuPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxUcn0sdW5wdXQ6ZnVuY3Rpb24oVHIpe3ZhciBGbj1Uci5sZW5ndGgscW49VHIuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1Ucit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRm4pLHRoaXMub2Zmc2V0LT1Gbjt2YXIgVW49dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSkscW4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1xbi5sZW5ndGgtMSk7dmFyIEF0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpxbj8ocW4ubGVuZ3RoPT09VW4ubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStVbltVbi5sZW5ndGgtcW4ubGVuZ3RoXS5sZW5ndGgtcW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1Gbn0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtBdFswXSxBdFswXSt0aGlzLnl5bGVuZy1Gbl0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKFRyKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoVHIpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIFRyPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oVHIubGVuZ3RoPjIwPyIuLi4iOiIiKStUci5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBUcj10aGlzLm1hdGNoO3JldHVybiBUci5sZW5ndGg8MjAmJihUcis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtVHIubGVuZ3RoKSksKFRyLnN1YnN0cigwLDIwKSsoVHIubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBUcj10aGlzLnBhc3RJbnB1dCgpLEZuPW5ldyBBcnJheShUci5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBUcit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArRm4rIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKFRyLEZuKXt2YXIgcW4sVW4sQXQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEF0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEF0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFVuPVRyWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxVbiYmKHRoaXMueXlsaW5lbm8rPVVuLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlVuP1VuW1VuLmxlbmd0aC0xXS5sZW5ndGgtVW5bVW4ubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rVHJbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9VHJbMF0sdGhpcy5tYXRjaCs9VHJbMF0sdGhpcy5tYXRjaGVzPVRyLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFRyWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1UclswXSxxbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxGbix0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxxbilyZXR1cm4gcW47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHd0IGluIEF0KXRoaXNbd3RdPUF0W3d0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBUcixGbixxbixVbjt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBBdD10aGlzLl9jdXJyZW50UnVsZXMoKSx3dD0wO3d0PEF0Lmxlbmd0aDt3dCsrKWlmKHFuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbQXRbd3RdXSkscW4mJighRm58fHFuWzBdLmxlbmd0aD5GblswXS5sZW5ndGgpKXtpZihGbj1xbixVbj13dCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihUcj10aGlzLnRlc3RfbWF0Y2gocW4sQXRbd3RdKSxUciE9PSExKXJldHVybiBUcjtpZih0aGlzLl9iYWNrdHJhY2spe0ZuPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEZuPyhUcj10aGlzLnRlc3RfbWF0Y2goRm4sQXRbVW5dKSxUciE9PSExP1RyOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgRm49dGhpcy5uZXh0KCk7cmV0dXJuIEZufHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihGbil7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEZuKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgRm49dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gRm4+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihGbil7cmV0dXJuIEZuPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoRm58fDApLEZuPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbRm5dOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEZuKXt0aGlzLmJlZ2luKEZuKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihGbixxbixVbixBdCl7c3dpdGNoKFVuKXtjYXNlIDA6cmV0dXJuIDUzO2Nhc2UgMTpyZXR1cm4gNTQ7Y2FzZSAyOnJldHVybiA1NTtjYXNlIDM6cmV0dXJuIDU2O2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzMTtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMzO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6cmV0dXJuIDg7Y2FzZSAxNDpicmVhaztjYXNlIDE1OnJldHVybiA3O2Nhc2UgMTY6cmV0dXJuIDc7Y2FzZSAxNzpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSAxODp0aGlzLmJlZ2luKCJjYWxsYmFja19uYW1lIik7YnJlYWs7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2tfYXJncyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIDcwO2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDcxO2Nhc2UgMjQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIlNUUiI7Y2FzZSAyNjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI3OnJldHVybiA3MztjYXNlIDI4OnJldHVybiB0aGlzLmJlZ2luKCJuYW1lc3BhY2UiKSw0MDtjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksODtjYXNlIDMwOmJyZWFrO2Nhc2UgMzE6cmV0dXJuIHRoaXMuYmVnaW4oIm5hbWVzcGFjZS1ib2R5IiksMzc7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM5O2Nhc2UgMzM6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMzQ6cmV0dXJuIDg7Y2FzZSAzNTpicmVhaztjYXNlIDM2OnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDM3OnJldHVybiB0aGlzLmJlZ2luKCJjbGFzcyIpLDQ0O2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw4O2Nhc2UgMzk6YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwzOTtjYXNlIDQxOnJldHVybiB0aGlzLmJlZ2luKCJjbGFzcy1ib2R5IiksMzc7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM5O2Nhc2UgNDM6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgNDQ6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgNDU6cmV0dXJuIk9QRU5fSU5fU1RSVUNUIjtjYXNlIDQ2OmJyZWFrO2Nhc2UgNDc6cmV0dXJuIk1FTUJFUiI7Y2FzZSA0ODpyZXR1cm4gNzY7Y2FzZSA0OTpyZXR1cm4gNjY7Y2FzZSA1MDpyZXR1cm4gNjc7Y2FzZSA1MTpyZXR1cm4gNjk7Y2FzZSA1MjpyZXR1cm4gNTA7Y2FzZSA1MzpyZXR1cm4gNTI7Y2FzZSA1NDpyZXR1cm4gNDU7Y2FzZSA1NTpyZXR1cm4gNDY7Y2FzZSA1NjpyZXR1cm4gNzI7Y2FzZSA1Nzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1ODpyZXR1cm4iR0VORVJJQ1RZUEUiO2Nhc2UgNTk6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgNjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjE6cmV0dXJuIkJRVU9URV9TVFIiO2Nhc2UgNjI6dGhpcy5iZWdpbigiYnFzdHJpbmciKTticmVhaztjYXNlIDYzOnJldHVybiA2ODtjYXNlIDY0OnJldHVybiA2ODtjYXNlIDY1OnJldHVybiA2ODtjYXNlIDY2OnJldHVybiA2ODtjYXNlIDY3OnJldHVybiA2MDtjYXNlIDY4OnJldHVybiA2MDtjYXNlIDY5OnJldHVybiA2MjtjYXNlIDcwOnJldHVybiA2MjtjYXNlIDcxOnJldHVybiA2MTtjYXNlIDcyOnJldHVybiA1OTtjYXNlIDczOnJldHVybiA2MztjYXNlIDc0OnJldHVybiA2NDtjYXNlIDc1OnJldHVybiA2NTtjYXNlIDc2OnJldHVybiAyMTtjYXNlIDc3OnJldHVybiA0MjtjYXNlIDc4OnJldHVybiA5NTtjYXNlIDc5OnJldHVybiJET1QiO2Nhc2UgODA6cmV0dXJuIlBMVVMiO2Nhc2UgODE6cmV0dXJuIDgxO2Nhc2UgODI6cmV0dXJuIDc4O2Nhc2UgODM6cmV0dXJuIDg0O2Nhc2UgODQ6cmV0dXJuIDg0O2Nhc2UgODU6cmV0dXJuIDg1O2Nhc2UgODY6cmV0dXJuIkVRVUFMUyI7Y2FzZSA4NzpyZXR1cm4iRVFVQUxTIjtjYXNlIDg4OnJldHVybiA3NDtjYXNlIDg5OnJldHVybiAxMjtjYXNlIDkwOnJldHVybiAxNDtjYXNlIDkxOnJldHVybiJQVU5DVFVBVElPTiI7Y2FzZSA5MjpyZXR1cm4gODA7Y2FzZSA5MzpyZXR1cm4gOTc7Y2FzZSA5NDpyZXR1cm4gODM7Y2FzZSA5NTpyZXR1cm4gODM7Y2FzZSA5NjpyZXR1cm4gOX19LHJ1bGVzOlsvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OmNsYXNzRGlhZ3JhbS12MlxiKS8sL14oPzpjbGFzc0RpYWdyYW1cYikvLC9eKD86XFtcKlxdKS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsiXSkvLC9eKD86c3R5bGVcYikvLC9eKD86bmFtZXNwYWNlXGIpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzokKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpcW1wqXF0pLywvXig/OmNsYXNzXGIpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/Olt9XSkvLC9eKD86W3tdKS8sL14oPzpbfV0pLywvXig/OiQpLywvXig/OlxbXCpcXSkvLC9eKD86W3tdKS8sL14oPzpbXG5dKS8sL14oPzpbXnt9XG5dKikvLC9eKD86Y3NzQ2xhc3NcYikvLC9eKD86Y2FsbGJhY2tcYikvLC9eKD86bGlua1xiKS8sL14oPzpjbGlja1xiKS8sL14oPzpub3RlIGZvclxiKS8sL14oPzpub3RlXGIpLywvXig/Ojw8KS8sL14oPzo+PikvLC9eKD86aHJlZlxiKS8sL14oPzpbfl0pLywvXig/Oltefl0qKS8sL14oPzp+KS8sL14oPzpbYF0pLywvXig/OlteYF0rKS8sL14oPzpbYF0pLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86XHMqPFx8KS8sL14oPzpccypcfD4pLywvXig/OlxzKj4pLywvXig/OlxzKjwpLywvXig/OlxzKlwqKS8sL14oPzpccypvXGIpLywvXig/OlxzKlwoXCkpLywvXig/Oi0tKS8sL14oPzpcLlwuKS8sL14oPzo6ezF9W146XG47XSspLywvXig/Ojp7M30pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpcKykvLC9eKD86OikvLC9eKD86LCkvLC9eKD86IykvLC9eKD86IykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86XHcrKS8sL14oPzpcWykvLC9eKD86XF0pLywvXig/OlshIiMkJSYnKissLS5gP1xcL10pLywvXig/OlswLTldKykvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpccykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7Im5hbWVzcGFjZS1ib2R5Ijp7cnVsZXM6WzI2LDMyLDMzLDM0LDM1LDM2LDM3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LG5hbWVzcGFjZTp7cnVsZXM6WzI2LDI4LDI5LDMwLDMxLDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LCJjbGFzcy1ib2R5Ijp7cnVsZXM6WzI2LDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LGNsYXNzOntydWxlczpbMjYsMzgsMzksNDAsNDEsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTksNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyLDI2LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzksMjYsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTksNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTZdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNywyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxjYWxsYmFja19hcmdzOntydWxlczpbMjIsMjMsMjYsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTksNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTZdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tfbmFtZTp7cnVsZXM6WzE5LDIwLDIxLDI2LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOlsyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxnZW5lcmljOntydWxlczpbMjYsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTZdLGluY2x1c2l2ZTohMX0sYnFzdHJpbmc6e3J1bGVzOlsyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyNCwyNSwyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDI2LDI3LDI4LDM3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGFvfSgpO3hpLmxleGVyPU1hO2Z1bmN0aW9uIHpzKCl7dGhpcy55eT17fX1yZXR1cm4genMucHJvdG90eXBlPXhpLHhpLlBhcnNlcj16cyxuZXcgenN9KCk7X3ZlLnBhcnNlcj1fdmU7Y29uc3QgS0dlPV92ZSxXR2U9WyIjIiwiKyIsIn4iLCItIiwiIl07Y2xhc3MgWUdle2NvbnN0cnVjdG9yKHMsdSl7dGhpcy5tZW1iZXJUeXBlPXUsdGhpcy52aXNpYmlsaXR5PSIiLHRoaXMuY2xhc3NpZmllcj0iIjtjb25zdCBkPVlmKHMscXQoKSk7dGhpcy5wYXJzZU1lbWJlcihkKX1nZXREaXNwbGF5RGV0YWlscygpe2xldCBzPXRoaXMudmlzaWJpbGl0eStxRih0aGlzLmlkKTt0aGlzLm1lbWJlclR5cGU9PT0ibWV0aG9kIiYmKHMrPWAoJHtxRih0aGlzLnBhcmFtZXRlcnMudHJpbSgpKX0pYCx0aGlzLnJldHVyblR5cGUmJihzKz0iIDogIitxRih0aGlzLnJldHVyblR5cGUpKSkscz1zLnRyaW0oKTtjb25zdCB1PXRoaXMucGFyc2VDbGFzc2lmaWVyKCk7cmV0dXJue2Rpc3BsYXlUZXh0OnMsY3NzU3R5bGU6dX19cGFyc2VNZW1iZXIocyl7bGV0IHU9IiI7aWYodGhpcy5tZW1iZXJUeXBlPT09Im1ldGhvZCIpe2NvbnN0IGQ9LyhbIyt+LV0pPyguKylcKCguKilcKShbXHMkKl0pPyguKikoWyQqXSk/LyxwPXMubWF0Y2goZCk7aWYocCl7Y29uc3Qgdj1wWzFdP3BbMV0udHJpbSgpOiIiO2lmKFdHZS5pbmNsdWRlcyh2KSYmKHRoaXMudmlzaWJpbGl0eT12KSx0aGlzLmlkPXBbMl0udHJpbSgpLHRoaXMucGFyYW1ldGVycz1wWzNdP3BbM10udHJpbSgpOiIiLHU9cFs0XT9wWzRdLnRyaW0oKToiIix0aGlzLnJldHVyblR5cGU9cFs1XT9wWzVdLnRyaW0oKToiIix1PT09IiIpe2NvbnN0IGI9dGhpcy5yZXR1cm5UeXBlLnN1YnN0cmluZyh0aGlzLnJldHVyblR5cGUubGVuZ3RoLTEpO2IubWF0Y2goL1skKl0vKSYmKHU9Yix0aGlzLnJldHVyblR5cGU9dGhpcy5yZXR1cm5UeXBlLnN1YnN0cmluZygwLHRoaXMucmV0dXJuVHlwZS5sZW5ndGgtMSkpfX19ZWxzZXtjb25zdCBkPXMubGVuZ3RoLHA9cy5zdWJzdHJpbmcoMCwxKSx2PXMuc3Vic3RyaW5nKGQtMSk7V0dlLmluY2x1ZGVzKHApJiYodGhpcy52aXNpYmlsaXR5PXApLHYubWF0Y2goL1skKl0vKSYmKHU9diksdGhpcy5pZD1zLnN1YnN0cmluZyh0aGlzLnZpc2liaWxpdHk9PT0iIj8wOjEsdT09PSIiP2Q6ZC0xKX10aGlzLmNsYXNzaWZpZXI9dX1wYXJzZUNsYXNzaWZpZXIoKXtzd2l0Y2godGhpcy5jbGFzc2lmaWVyKXtjYXNlIioiOnJldHVybiJmb250LXN0eWxlOml0YWxpYzsiO2Nhc2UiJCI6cmV0dXJuInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IjtkZWZhdWx0OnJldHVybiIifX19Y29uc3QgbUo9ImNsYXNzSWQtIjtsZXQgQXZlPVtdLHhoPXt9LHZKPVtdLFhHZT0wLFI5PXt9LEx2ZT0wLFdSPVtdO2NvbnN0IHRTPWk9PmNpLnNhbml0aXplVGV4dChpLHF0KCkpLG5TPWZ1bmN0aW9uKGkpe2NvbnN0IHM9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSk7bGV0IHU9IiIsZD1zO2lmKHMuaW5kZXhPZigifiIpPjApe2NvbnN0IHA9cy5zcGxpdCgifiIpO2Q9dFMocFswXSksdT10UyhwWzFdKX1yZXR1cm57Y2xhc3NOYW1lOmQsdHlwZTp1fX0sRWluPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1jaS5zYW5pdGl6ZVRleHQoaSxxdCgpKTtzJiYocz10UyhzKSk7Y29uc3R7Y2xhc3NOYW1lOmR9PW5TKHUpO3hoW2RdLmxhYmVsPXN9LHdKPWZ1bmN0aW9uKGkpe2NvbnN0IHM9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSkse2NsYXNzTmFtZTp1LHR5cGU6ZH09blMocyk7aWYoT2JqZWN0Lmhhc093bih4aCx1KSlyZXR1cm47Y29uc3QgcD1jaS5zYW5pdGl6ZVRleHQodSxxdCgpKTt4aFtwXT17aWQ6cCx0eXBlOmQsbGFiZWw6cCxjc3NDbGFzc2VzOltdLG1ldGhvZHM6W10sbWVtYmVyczpbXSxhbm5vdGF0aW9uczpbXSxzdHlsZXM6W10sZG9tSWQ6bUorcCsiLSIrWEdlfSxYR2UrK30sUUdlPWZ1bmN0aW9uKGkpe2NvbnN0IHM9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSk7aWYocyBpbiB4aClyZXR1cm4geGhbc10uZG9tSWQ7dGhyb3cgbmV3IEVycm9yKCJDbGFzcyBub3QgZm91bmQ6ICIrcyl9LFRpbj1mdW5jdGlvbigpe0F2ZT1bXSx4aD17fSx2Sj1bXSxXUj1bXSxXUi5wdXNoKFpHZSksUjk9e30sTHZlPTAsUGcoKX0sQ2luPWZ1bmN0aW9uKGkpe3JldHVybiB4aFtpXX0sU2luPWZ1bmN0aW9uKCl7cmV0dXJuIHhofSxfaW49ZnVuY3Rpb24oKXtyZXR1cm4gQXZlfSxBaW49ZnVuY3Rpb24oKXtyZXR1cm4gdkp9LExpbj1mdW5jdGlvbihpKXtYZS5kZWJ1ZygiQWRkaW5nIHJlbGF0aW9uOiAiK0pTT04uc3RyaW5naWZ5KGkpKSx3SihpLmlkMSksd0ooaS5pZDIpLGkuaWQxPW5TKGkuaWQxKS5jbGFzc05hbWUsaS5pZDI9blMoaS5pZDIpLmNsYXNzTmFtZSxpLnJlbGF0aW9uVGl0bGUxPWNpLnNhbml0aXplVGV4dChpLnJlbGF0aW9uVGl0bGUxLnRyaW0oKSxxdCgpKSxpLnJlbGF0aW9uVGl0bGUyPWNpLnNhbml0aXplVGV4dChpLnJlbGF0aW9uVGl0bGUyLnRyaW0oKSxxdCgpKSxBdmUucHVzaChpKX0sTWluPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1uUyhpKS5jbGFzc05hbWU7eGhbdV0uYW5ub3RhdGlvbnMucHVzaChzKX0sSkdlPWZ1bmN0aW9uKGkscyl7d0ooaSk7Y29uc3QgdT1uUyhpKS5jbGFzc05hbWUsZD14aFt1XTtpZih0eXBlb2Ygcz09InN0cmluZyIpe2NvbnN0IHA9cy50cmltKCk7cC5zdGFydHNXaXRoKCI8PCIpJiZwLmVuZHNXaXRoKCI+PiIpP2QuYW5ub3RhdGlvbnMucHVzaCh0UyhwLnN1YnN0cmluZygyLHAubGVuZ3RoLTIpKSk6cC5pbmRleE9mKCIpIik+MD9kLm1ldGhvZHMucHVzaChuZXcgWUdlKHAsIm1ldGhvZCIpKTpwJiZkLm1lbWJlcnMucHVzaChuZXcgWUdlKHAsImF0dHJpYnV0ZSIpKX19LERpbj1mdW5jdGlvbihpLHMpe0FycmF5LmlzQXJyYXkocykmJihzLnJldmVyc2UoKSxzLmZvckVhY2godT0+SkdlKGksdSkpKX0sSWluPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT17aWQ6YG5vdGUke3ZKLmxlbmd0aH1gLGNsYXNzOnMsdGV4dDppfTt2Si5wdXNoKHUpfSxPaW49ZnVuY3Rpb24oaSl7cmV0dXJuIGkuc3RhcnRzV2l0aCgiOiIpJiYoaT1pLnN1YnN0cmluZygxKSksdFMoaS50cmltKCkpfSxNdmU9ZnVuY3Rpb24oaSxzKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbih1KXtsZXQgZD11O3VbMF0ubWF0Y2goL1xkLykmJihkPW1KK2QpLHhoW2RdIT09dm9pZCAwJiZ4aFtkXS5jc3NDbGFzc2VzLnB1c2gocyl9KX0sTmluPWZ1bmN0aW9uKGkscyl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odSl7cyE9PXZvaWQgMCYmKHhoW3VdLnRvb2x0aXA9dFMocykpfSl9LFBpbj1mdW5jdGlvbihpLHMpe3JldHVybiBzP1I5W3NdLmNsYXNzZXNbaV0udG9vbHRpcDp4aFtpXS50b29sdGlwfSxCaW49ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9cXQoKTtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihwKXtsZXQgdj1wO3BbMF0ubWF0Y2goL1xkLykmJih2PW1KK3YpLHhoW3ZdIT09dm9pZCAwJiYoeGhbdl0ubGluaz1Bby5mb3JtYXRVcmwocyxkKSxkLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/eGhbdl0ubGlua1RhcmdldD0iX3RvcCI6dHlwZW9mIHU9PSJzdHJpbmciP3hoW3ZdLmxpbmtUYXJnZXQ9dFModSk6eGhbdl0ubGlua1RhcmdldD0iX2JsYW5rIil9KSxNdmUoaSwiY2xpY2thYmxlIil9LEZpbj1mdW5jdGlvbihpLHMsdSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7UmluKGQscyx1KSx4aFtkXS5oYXZlQ2FsbGJhY2s9ITB9KSxNdmUoaSwiY2xpY2thYmxlIil9LFJpbj1mdW5jdGlvbihpLHMsdSl7Y29uc3QgZD1jaS5zYW5pdGl6ZVRleHQoaSxxdCgpKTtpZihxdCgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UifHxzPT09dm9pZCAwKXJldHVybjtjb25zdCB2PWQ7aWYoeGhbdl0hPT12b2lkIDApe2NvbnN0IGI9UUdlKHYpO2xldCB5PVtdO2lmKHR5cGVvZiB1PT0ic3RyaW5nIil7eT11LnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgVD0wO1Q8eS5sZW5ndGg7VCsrKXtsZXQgXz15W1RdLnRyaW0oKTtfLmNoYXJBdCgwKT09PSciJyYmXy5jaGFyQXQoXy5sZW5ndGgtMSk9PT0nIicmJihfPV8uc3Vic3RyKDEsXy5sZW5ndGgtMikpLHlbVF09X319eS5sZW5ndGg9PT0wJiZ5LnB1c2goYiksV1IucHVzaChmdW5jdGlvbigpe2NvbnN0IFQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke2J9Il1gKTtUIT09bnVsbCYmVC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtBby5ydW5GdW5jKHMsLi4ueSl9LCExKX0pfX0samluPWZ1bmN0aW9uKGkpe1dSLmZvckVhY2goZnVuY3Rpb24ocyl7cyhpKX0pfSwkaW49e0xJTkU6MCxET1RURURfTElORToxfSx6aW49e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjMsTE9MTElQT1A6NH0sWkdlPWZ1bmN0aW9uKGkpe2xldCBzPUlyKCIubWVybWFpZFRvb2x0aXAiKTsocy5fZ3JvdXBzfHxzKVswXVswXT09PW51bGwmJihzPUlyKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm1lcm1haWRUb29sdGlwIikuc3R5bGUoIm9wYWNpdHkiLDApKSxJcihpKS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtjb25zdCBwPUlyKHRoaXMpO2lmKHAuYXR0cigidGl0bGUiKT09PW51bGwpcmV0dXJuO2NvbnN0IGI9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtzLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxzLnRleHQocC5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrYi5sZWZ0KyhiLnJpZ2h0LWIubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWStiLnRvcC0xNCtkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCsicHgiKSxzLmh0bWwocy5odG1sKCkucmVwbGFjZSgvJmx0O2JyXC8mZ3Q7L2csIjxici8+IikpLHAuY2xhc3NlZCgiaG92ZXIiLCEwKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtzLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxJcih0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSl9O1dSLnB1c2goWkdlKTtsZXQgZUtlPSJUQiI7Y29uc3QgeUo9e3NldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldENvbmZpZzooKT0+cXQoKS5jbGFzcyxhZGRDbGFzczp3SixiaW5kRnVuY3Rpb25zOmppbixjbGVhcjpUaW4sZ2V0Q2xhc3M6Q2luLGdldENsYXNzZXM6U2luLGdldE5vdGVzOkFpbixhZGRBbm5vdGF0aW9uOk1pbixhZGROb3RlOklpbixnZXRSZWxhdGlvbnM6X2luLGFkZFJlbGF0aW9uOkxpbixnZXREaXJlY3Rpb246KCk9PmVLZSxzZXREaXJlY3Rpb246aT0+e2VLZT1pfSxhZGRNZW1iZXI6SkdlLGFkZE1lbWJlcnM6RGluLGNsZWFudXBMYWJlbDpPaW4sbGluZVR5cGU6JGluLHJlbGF0aW9uVHlwZTp6aW4sc2V0Q2xpY2tFdmVudDpGaW4sc2V0Q3NzQ2xhc3M6TXZlLHNldExpbms6QmluLGdldFRvb2x0aXA6UGluLHNldFRvb2x0aXA6TmluLGxvb2tVcERvbUlkOlFHZSxzZXREaWFncmFtVGl0bGU6Y20sZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldENsYXNzTGFiZWw6RWluLGFkZE5hbWVzcGFjZTpmdW5jdGlvbihpKXtSOVtpXT09PXZvaWQgMCYmKFI5W2ldPXtpZDppLGNsYXNzZXM6e30sY2hpbGRyZW46e30sZG9tSWQ6bUoraSsiLSIrTHZlfSxMdmUrKyl9LGFkZENsYXNzZXNUb05hbWVzcGFjZTpmdW5jdGlvbihpLHMpe2lmKFI5W2ldIT09dm9pZCAwKWZvcihjb25zdCB1IG9mIHMpe2NvbnN0e2NsYXNzTmFtZTpkfT1uUyh1KTt4aFtkXS5wYXJlbnQ9aSxSOVtpXS5jbGFzc2VzW2RdPXhoW2RdfX0sZ2V0TmFtZXNwYWNlOmZ1bmN0aW9uKGkpe3JldHVybiBSOVtpXX0sZ2V0TmFtZXNwYWNlczpmdW5jdGlvbigpe3JldHVybiBSOX0sc2V0Q3NzU3R5bGU6ZnVuY3Rpb24oaSxzKXtjb25zdCB1PXhoW2ldO2lmKCEoIXN8fCF1KSlmb3IoY29uc3QgZCBvZiBzKWQuaW5jbHVkZXMoIiwiKT91LnN0eWxlcy5wdXNoKC4uLmQuc3BsaXQoIiwiKSk6dS5zdHlsZXMucHVzaChkKX19LHRLZT1pPT5gZy5jbGFzc0dyb3VwIHRleHQgewogIGZpbGw6ICR7aS5ub2RlQm9yZGVyfHxpLmNsYXNzVGV4dH07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgZm9udC1zaXplOiAxMHB4OwoKICAudGl0bGUgewogICAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICB9Cgp9Cgoubm9kZUxhYmVsLCAuZWRnZUxhYmVsIHsKICBjb2xvcjogJHtpLmNsYXNzVGV4dH07Cn0KLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9Owp9Ci5sYWJlbCB0ZXh0IHsKICBmaWxsOiAke2kuY2xhc3NUZXh0fTsKfQouZWRnZUxhYmVsIC5sYWJlbCBzcGFuIHsKICBiYWNrZ3JvdW5kOiAke2kubWFpbkJrZ307Cn0KCi5jbGFzc1RpdGxlIHsKICBmb250LXdlaWdodDogYm9sZGVyOwp9Ci5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKCi5kaXZpZGVyIHsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCmcuY2xpY2thYmxlIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCmcuY2xhc3NHcm91cCByZWN0IHsKICBmaWxsOiAke2kubWFpbkJrZ307CiAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07Cn0KCmcuY2xhc3NHcm91cCBsaW5lIHsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5jbGFzc0xhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmNsYXNzTGFiZWwgLmxhYmVsIHsKICBmaWxsOiAke2kubm9kZUJvcmRlcn07CiAgZm9udC1zaXplOiAxMHB4Owp9CgoucmVsYXRpb24gewogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwogIGZpbGw6IG5vbmU7Cn0KCi5kYXNoZWQtbGluZXsKICBzdHJva2UtZGFzaGFycmF5OiAzOwp9CgouZG90dGVkLWxpbmV7CiAgc3Ryb2tlLWRhc2hhcnJheTogMSAyOwp9CgojY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2FnZ3JlZ2F0aW9uRW5kLCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wU3RhcnQsIC5sb2xsaXBvcCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wRW5kLCAubG9sbGlwb3AgewogIGZpbGw6ICR7aS5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5lZGdlVGVybWluYWxzIHsKICBmb250LXNpemU6IDExcHg7CiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7Cn0KCi5jbGFzc1RpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07Cn0KYDtsZXQgbktlPTA7Y29uc3QgcWluPWZ1bmN0aW9uKGkscyx1LGQscCl7Y29uc3Qgdj1mdW5jdGlvbihvZSl7c3dpdGNoKG9lKXtjYXNlIHAuZGIucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBwLmRiLnJlbGF0aW9uVHlwZS5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSBwLmRiLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2UgcC5kYi5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSI7Y2FzZSBwLmRiLnJlbGF0aW9uVHlwZS5MT0xMSVBPUDpyZXR1cm4ibG9sbGlwb3AifX07cy5wb2ludHM9cy5wb2ludHMuZmlsdGVyKG9lPT4hTnVtYmVyLmlzTmFOKG9lLnkpKTtjb25zdCBiPXMucG9pbnRzLHk9azcoKS54KGZ1bmN0aW9uKG9lKXtyZXR1cm4gb2UueH0pLnkoZnVuY3Rpb24ob2Upe3JldHVybiBvZS55fSkuY3VydmUoRkYpLFQ9aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIix5KGIpKS5hdHRyKCJpZCIsImVkZ2UiK25LZSkuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiIpO2xldCBfPSIiO2QuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKF89d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsXz1fLnJlcGxhY2UoL1woL2csIlxcKCIpLF89Xy5yZXBsYWNlKC9cKS9nLCJcXCkiKSksdS5yZWxhdGlvbi5saW5lVHlwZT09MSYmVC5hdHRyKCJjbGFzcyIsInJlbGF0aW9uIGRhc2hlZC1saW5lIiksdS5yZWxhdGlvbi5saW5lVHlwZT09MTAmJlQuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiBkb3R0ZWQtbGluZSIpLHUucmVsYXRpb24udHlwZTEhPT0ibm9uZSImJlQuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrXysiIyIrdih1LnJlbGF0aW9uLnR5cGUxKSsiU3RhcnQpIiksdS5yZWxhdGlvbi50eXBlMiE9PSJub25lIiYmVC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrXysiIyIrdih1LnJlbGF0aW9uLnR5cGUyKSsiRW5kKSIpO2xldCBBLFA7Y29uc3QgUj1zLnBvaW50cy5sZW5ndGg7bGV0IEY9QW8uY2FsY0xhYmVsUG9zaXRpb24ocy5wb2ludHMpO0E9Ri54LFA9Ri55O2xldCBqLEssZWUsaWU7aWYoUiUyIT09MCYmUj4xKXtsZXQgb2U9QW8uY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24odS5yZWxhdGlvbi50eXBlMSE9PSJub25lIixzLnBvaW50cyxzLnBvaW50c1swXSkscGU9QW8uY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24odS5yZWxhdGlvbi50eXBlMiE9PSJub25lIixzLnBvaW50cyxzLnBvaW50c1tSLTFdKTtYZS5kZWJ1ZygiY2FyZGluYWxpdHlfMV9wb2ludCAiK0pTT04uc3RyaW5naWZ5KG9lKSksWGUuZGVidWcoImNhcmRpbmFsaXR5XzJfcG9pbnQgIitKU09OLnN0cmluZ2lmeShwZSkpLGo9b2UueCxLPW9lLnksZWU9cGUueCxpZT1wZS55fWlmKHUudGl0bGUhPT12b2lkIDApe2NvbnN0IG9lPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjbGFzc0xhYmVsIikscGU9b2UuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoIngiLEEpLmF0dHIoInkiLFApLmF0dHIoImZpbGwiLCJyZWQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQodS50aXRsZSk7d2luZG93LmxhYmVsPXBlO2NvbnN0IGJlPXBlLm5vZGUoKS5nZXRCQm94KCk7b2UuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4IixiZS54LWQucGFkZGluZy8yKS5hdHRyKCJ5IixiZS55LWQucGFkZGluZy8yKS5hdHRyKCJ3aWR0aCIsYmUud2lkdGgrZC5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGJlLmhlaWdodCtkLnBhZGRpbmcpfVhlLmluZm8oIlJlbmRlcmluZyByZWxhdGlvbiAiK0pTT04uc3RyaW5naWZ5KHUpKSx1LnJlbGF0aW9uVGl0bGUxIT09dm9pZCAwJiZ1LnJlbGF0aW9uVGl0bGUxIT09Im5vbmUiJiZpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2FyZGluYWxpdHkiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInR5cGUxIikuYXR0cigieCIsaikuYXR0cigieSIsSykuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQodS5yZWxhdGlvblRpdGxlMSksdS5yZWxhdGlvblRpdGxlMiE9PXZvaWQgMCYmdS5yZWxhdGlvblRpdGxlMiE9PSJub25lIiYmaS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMiIpLmF0dHIoIngiLGVlKS5hdHRyKCJ5IixpZSkuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQodS5yZWxhdGlvblRpdGxlMiksbktlKyt9LEhpbj1mdW5jdGlvbihpLHMsdSxkKXtYZS5kZWJ1ZygiUmVuZGVyaW5nIGNsYXNzICIscyx1KTtjb25zdCBwPXMuaWQsdj17aWQ6cCxsYWJlbDpzLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LGI9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIsZC5kYi5sb29rVXBEb21JZChwKSkuYXR0cigiY2xhc3MiLCJjbGFzc0dyb3VwIik7bGV0IHk7cy5saW5rP3k9Yi5hcHBlbmQoInN2ZzphIikuYXR0cigieGxpbms6aHJlZiIscy5saW5rKS5hdHRyKCJ0YXJnZXQiLHMubGlua1RhcmdldCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsdS50ZXh0SGVpZ2h0K3UucGFkZGluZykuYXR0cigieCIsMCk6eT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLHUudGV4dEhlaWdodCt1LnBhZGRpbmcpLmF0dHIoIngiLDApO2xldCBUPSEwO3MuYW5ub3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihwZSl7Y29uc3QgYmU9eS5hcHBlbmQoInRzcGFuIikudGV4dCgiwqsiK3BlKyLCuyIpO1R8fGJlLmF0dHIoImR5Iix1LnRleHRIZWlnaHQpLFQ9ITF9KTtsZXQgXz1yS2Uocyk7Y29uc3QgQT15LmFwcGVuZCgidHNwYW4iKS50ZXh0KF8pLmF0dHIoImNsYXNzIiwidGl0bGUiKTtUfHxBLmF0dHIoImR5Iix1LnRleHRIZWlnaHQpO2NvbnN0IFA9eS5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodDtsZXQgUixGLGo7aWYocy5tZW1iZXJzLmxlbmd0aD4wKXtSPWIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIix1LnBhZGRpbmcrUCt1LmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLHUucGFkZGluZytQK3UuZGl2aWRlck1hcmdpbi8yKTtjb25zdCBwZT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHUucGFkZGluZykuYXR0cigieSIsUCt1LmRpdmlkZXJNYXJnaW4rdS50ZXh0SGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjbGFzcyIsImNsYXNzVGV4dCIpO1Q9ITAscy5tZW1iZXJzLmZvckVhY2goZnVuY3Rpb24oYmUpe2lLZShwZSxiZSxULHUpLFQ9ITF9KSxGPXBlLm5vZGUoKS5nZXRCQm94KCl9aWYocy5tZXRob2RzLmxlbmd0aD4wKXtqPWIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIix1LnBhZGRpbmcrUCt1LmRpdmlkZXJNYXJnaW4rRi5oZWlnaHQpLmF0dHIoInkyIix1LnBhZGRpbmcrUCt1LmRpdmlkZXJNYXJnaW4rRi5oZWlnaHQpO2NvbnN0IHBlPWIuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsdS5wYWRkaW5nKS5hdHRyKCJ5IixQKzIqdS5kaXZpZGVyTWFyZ2luK0YuaGVpZ2h0K3UudGV4dEhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY2xhc3MiLCJjbGFzc1RleHQiKTtUPSEwLHMubWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uKGJlKXtpS2UocGUsYmUsVCx1KSxUPSExfSl9Y29uc3QgSz1iLm5vZGUoKS5nZXRCQm94KCk7dmFyIGVlPSIgIjtzLmNzc0NsYXNzZXMubGVuZ3RoPjAmJihlZT1lZStzLmNzc0NsYXNzZXMuam9pbigiICIpKTtjb25zdCBvZT1iLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixLLndpZHRoKzIqdS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLEsuaGVpZ2h0K3UucGFkZGluZysuNSp1LmRpdmlkZXJNYXJnaW4pLmF0dHIoImNsYXNzIixlZSkubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4geS5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtwZS5zZXRBdHRyaWJ1dGUoIngiLChvZS1wZS5nZXRCQm94KCkud2lkdGgpLzIpfSkscy50b29sdGlwJiZ5Lmluc2VydCgidGl0bGUiKS50ZXh0KHMudG9vbHRpcCksUiYmUi5hdHRyKCJ4MiIsb2UpLGomJmouYXR0cigieDIiLG9lKSx2LndpZHRoPW9lLHYuaGVpZ2h0PUsuaGVpZ2h0K3UucGFkZGluZysuNSp1LmRpdmlkZXJNYXJnaW4sdn0scktlPWZ1bmN0aW9uKGkpe2xldCBzPWkuaWQ7cmV0dXJuIGkudHlwZSYmKHMrPSI8IitxRihpLnR5cGUpKyI+Iiksc30sVmluPWZ1bmN0aW9uKGkscyx1LGQpe1hlLmRlYnVnKCJSZW5kZXJpbmcgbm90ZSAiLHMsdSk7Y29uc3QgcD1zLmlkLHY9e2lkOnAsdGV4dDpzLnRleHQsd2lkdGg6MCxoZWlnaHQ6MH0sYj1pLmFwcGVuZCgiZyIpLmF0dHIoImlkIixwKS5hdHRyKCJjbGFzcyIsImNsYXNzR3JvdXAiKTtsZXQgeT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLHUudGV4dEhlaWdodCt1LnBhZGRpbmcpLmF0dHIoIngiLDApO2NvbnN0IFQ9SlNPTi5wYXJzZShgIiR7cy50ZXh0fSJgKS5zcGxpdChgCmApO1QuZm9yRWFjaChmdW5jdGlvbihSKXtYZS5kZWJ1ZyhgQWRkaW5nIGxpbmU6ICR7Un1gKSx5LmFwcGVuZCgidHNwYW4iKS50ZXh0KFIpLmF0dHIoImNsYXNzIiwidGl0bGUiKS5hdHRyKCJkeSIsdS50ZXh0SGVpZ2h0KX0pO2NvbnN0IF89Yi5ub2RlKCkuZ2V0QkJveCgpLFA9Yi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsXy53aWR0aCsyKnUucGFkZGluZykuYXR0cigiaGVpZ2h0IixfLmhlaWdodCtULmxlbmd0aCp1LnRleHRIZWlnaHQrdS5wYWRkaW5nKy41KnUuZGl2aWRlck1hcmdpbikubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4geS5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKFIpe1Iuc2V0QXR0cmlidXRlKCJ4IiwoUC1SLmdldEJCb3goKS53aWR0aCkvMil9KSx2LndpZHRoPVAsdi5oZWlnaHQ9Xy5oZWlnaHQrVC5sZW5ndGgqdS50ZXh0SGVpZ2h0K3UucGFkZGluZysuNSp1LmRpdmlkZXJNYXJnaW4sdn0saUtlPWZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0e2Rpc3BsYXlUZXh0OnAsY3NzU3R5bGU6dn09cy5nZXREaXNwbGF5RGV0YWlscygpLGI9aS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsZC5wYWRkaW5nKS50ZXh0KHApO3YhPT0iIiYmYi5hdHRyKCJzdHlsZSIscy5jc3NTdHlsZSksdXx8Yi5hdHRyKCJkeSIsZC50ZXh0SGVpZ2h0KX0sRHZlPXtnZXRDbGFzc1RpdGxlU3RyaW5nOnJLZSxkcmF3Q2xhc3M6SGluLGRyYXdFZGdlOnFpbixkcmF3Tm90ZTpWaW59O2xldCB4Sj17fTtjb25zdCBrSj0yMCxZUj1mdW5jdGlvbihpKXtjb25zdCBzPU9iamVjdC5lbnRyaWVzKHhKKS5maW5kKHU9PnVbMV0ubGFiZWw9PT1pKTtpZihzKXJldHVybiBzWzBdfSxVaW49ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxHaW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpLR2UsZGI6eUoscmVuZGVyZXI6e2RyYXc6ZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD1xdCgpLmNsYXNzO3hKPXt9LFhlLmluZm8oIlJlbmRlcmluZyBkaWFncmFtICIraSk7Y29uc3Qgdj1xdCgpLnNlY3VyaXR5TGV2ZWw7bGV0IGI7dj09PSJzYW5kYm94IiYmKGI9SXIoIiNpIitzKSk7Y29uc3QgeT1Jcih2PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLFQ9eS5zZWxlY3QoYFtpZD0nJHtzfSddYCk7VWluKFQpO2NvbnN0IF89bmV3IEIwKHttdWx0aWdyYXBoOiEwfSk7Xy5zZXRHcmFwaCh7aXNNdWx0aUdyYXBoOiEwfSksXy5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KTtjb25zdCBBPWQuZGIuZ2V0Q2xhc3NlcygpLFA9T2JqZWN0LmtleXMoQSk7Zm9yKGNvbnN0IG9lIG9mIFApe2NvbnN0IHBlPUFbb2VdLGJlPUR2ZS5kcmF3Q2xhc3MoVCxwZSxwLGQpO3hKW2JlLmlkXT1iZSxfLnNldE5vZGUoYmUuaWQsYmUpLFhlLmluZm8oIk9yZyBoZWlnaHQ6ICIrYmUuaGVpZ2h0KX1kLmRiLmdldFJlbGF0aW9ucygpLmZvckVhY2goZnVuY3Rpb24ob2Upe1hlLmluZm8oInRqb2hvIitZUihvZS5pZDEpK1lSKG9lLmlkMikrSlNPTi5zdHJpbmdpZnkob2UpKSxfLnNldEVkZ2UoWVIob2UuaWQxKSxZUihvZS5pZDIpLHtyZWxhdGlvbjpvZX0sb2UudGl0bGV8fCJERUZBVUxUIil9KSxkLmRiLmdldE5vdGVzKCkuZm9yRWFjaChmdW5jdGlvbihvZSl7WGUuZGVidWcoYEFkZGluZyBub3RlOiAke0pTT04uc3RyaW5naWZ5KG9lKX1gKTtjb25zdCBwZT1EdmUuZHJhd05vdGUoVCxvZSxwLGQpO3hKW3BlLmlkXT1wZSxfLnNldE5vZGUocGUuaWQscGUpLG9lLmNsYXNzJiZvZS5jbGFzcyBpbiBBJiZfLnNldEVkZ2Uob2UuaWQsWVIob2UuY2xhc3MpLHtyZWxhdGlvbjp7aWQxOm9lLmlkLGlkMjpvZS5jbGFzcyxyZWxhdGlvbjp7dHlwZTE6Im5vbmUiLHR5cGUyOiJub25lIixsaW5lVHlwZToxMH19fSwiREVGQVVMVCIpfSkscUQoXyksXy5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24ob2Upe29lIT09dm9pZCAwJiZfLm5vZGUob2UpIT09dm9pZCAwJiYoWGUuZGVidWcoIk5vZGUgIitvZSsiOiAiK0pTT04uc3RyaW5naWZ5KF8ubm9kZShvZSkpKSx5LnNlbGVjdCgiIyIrKGQuZGIubG9va1VwRG9tSWQob2UpfHxvZSkpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhfLm5vZGUob2UpLngtXy5ub2RlKG9lKS53aWR0aC8yKSsiLCIrKF8ubm9kZShvZSkueS1fLm5vZGUob2UpLmhlaWdodC8yKSsiICkiKSl9KSxfLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihvZSl7b2UhPT12b2lkIDAmJl8uZWRnZShvZSkhPT12b2lkIDAmJihYZS5kZWJ1ZygiRWRnZSAiK29lLnYrIiAtPiAiK29lLncrIjogIitKU09OLnN0cmluZ2lmeShfLmVkZ2Uob2UpKSksRHZlLmRyYXdFZGdlKFQsXy5lZGdlKG9lKSxfLmVkZ2Uob2UpLnJlbGF0aW9uLHAsZCkpfSk7Y29uc3Qgaj1ULm5vZGUoKS5nZXRCQm94KCksSz1qLndpZHRoK2tKKjIsZWU9ai5oZWlnaHQra0oqMjtOZyhULGVlLEsscC51c2VNYXhXaWR0aCk7Y29uc3QgaWU9YCR7ai54LWtKfSAke2oueS1rSn0gJHtLfSAke2VlfWA7WGUuZGVidWcoYHZpZXdCb3ggJHtpZX1gKSxULmF0dHIoInZpZXdCb3giLGllKX19LHN0eWxlczp0S2UsaW5pdDppPT57aS5jbGFzc3x8KGkuY2xhc3M9e30pLGkuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUseUouY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEl2ZT1pPT5jaS5zYW5pdGl6ZVRleHQoaSxxdCgpKTtsZXQgT3ZlPXtkaXZpZGVyTWFyZ2luOjEwLHBhZGRpbmc6NSx0ZXh0SGVpZ2h0OjEwLGN1cnZlOnZvaWQgMH07Y29uc3QgS2luPWZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0IHA9T2JqZWN0LmtleXMoaSk7WGUuaW5mbygia2V5czoiLHApLFhlLmluZm8oaSkscC5mb3JFYWNoKGZ1bmN0aW9uKHYpe3ZhciBfLEE7Y29uc3QgYj1pW3ZdLFQ9e3NoYXBlOiJyZWN0IixpZDpiLmlkLGRvbUlkOmIuZG9tSWQsbGFiZWxUZXh0Okl2ZShiLmlkKSxsYWJlbFN0eWxlOiIiLHN0eWxlOiJmaWxsOiBub25lOyBzdHJva2U6IGJsYWNrIixwYWRkaW5nOigoXz1xdCgpLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOl8ucGFkZGluZyk/PygoQT1xdCgpLmNsYXNzKT09bnVsbD92b2lkIDA6QS5wYWRkaW5nKX07cy5zZXROb2RlKGIuaWQsVCksc0tlKGIuY2xhc3NlcyxzLHUsZCxiLmlkKSxYZS5pbmZvKCJzZXROb2RlIixUKX0pfSxzS2U9ZnVuY3Rpb24oaSxzLHUsZCxwKXtjb25zdCB2PU9iamVjdC5rZXlzKGkpO1hlLmluZm8oImtleXM6Iix2KSxYZS5pbmZvKGkpLHYuZmlsdGVyKGI9PmlbYl0ucGFyZW50PT1wKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBqLEs7Y29uc3QgeT1pW2JdLFQ9eS5jc3NDbGFzc2VzLmpvaW4oIiAiKSxfPW9tKHkuc3R5bGVzKSxBPXkubGFiZWw/P3kuaWQsUD0wLFI9ImNsYXNzX2JveCIsRj17bGFiZWxTdHlsZTpfLmxhYmVsU3R5bGUsc2hhcGU6UixsYWJlbFRleHQ6SXZlKEEpLGNsYXNzRGF0YTp5LHJ4OlAscnk6UCxjbGFzczpULHN0eWxlOl8uc3R5bGUsaWQ6eS5pZCxkb21JZDp5LmRvbUlkLHRvb2x0aXA6ZC5kYi5nZXRUb29sdGlwKHkuaWQscCl8fCIiLGhhdmVDYWxsYmFjazp5LmhhdmVDYWxsYmFjayxsaW5rOnkubGluayx3aWR0aDp5LnR5cGU9PT0iZ3JvdXAiPzUwMDp2b2lkIDAsdHlwZTp5LnR5cGUscGFkZGluZzooKGo9cXQoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpqLnBhZGRpbmcpPz8oKEs9cXQoKS5jbGFzcyk9PW51bGw/dm9pZCAwOksucGFkZGluZyl9O3Muc2V0Tm9kZSh5LmlkLEYpLHAmJnMuc2V0UGFyZW50KHkuaWQscCksWGUuaW5mbygic2V0Tm9kZSIsRil9KX0sV2luPWZ1bmN0aW9uKGkscyx1LGQpe1hlLmluZm8oaSksaS5mb3JFYWNoKGZ1bmN0aW9uKHAsdil7dmFyIEssZWU7Y29uc3QgYj1wLHk9IiIsVD17bGFiZWxTdHlsZToiIixzdHlsZToiIn0sXz1iLnRleHQsQT0wLFA9Im5vdGUiLFI9e2xhYmVsU3R5bGU6VC5sYWJlbFN0eWxlLHNoYXBlOlAsbGFiZWxUZXh0Okl2ZShfKSxub3RlRGF0YTpiLHJ4OkEscnk6QSxjbGFzczp5LHN0eWxlOlQuc3R5bGUsaWQ6Yi5pZCxkb21JZDpiLmlkLHRvb2x0aXA6IiIsdHlwZToibm90ZSIscGFkZGluZzooKEs9cXQoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpLLnBhZGRpbmcpPz8oKGVlPXF0KCkuY2xhc3MpPT1udWxsP3ZvaWQgMDplZS5wYWRkaW5nKX07aWYocy5zZXROb2RlKGIuaWQsUiksWGUuaW5mbygic2V0Tm9kZSIsUiksIWIuY2xhc3N8fCEoYi5jbGFzcyBpbiBkKSlyZXR1cm47Y29uc3QgRj11K3Ysaj17aWQ6YGVkZ2VOb3RlJHtGfWAsY2xhc3NlczoicmVsYXRpb24iLHBhdHRlcm46ImRvdHRlZCIsYXJyb3doZWFkOiJub25lIixzdGFydExhYmVsUmlnaHQ6IiIsZW5kTGFiZWxMZWZ0OiIiLGFycm93VHlwZVN0YXJ0OiJub25lIixhcnJvd1R5cGVFbmQ6Im5vbmUiLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY3VydmU6T3YoT3ZlLmN1cnZlLGtwKX07cy5zZXRFZGdlKGIuaWQsYi5jbGFzcyxqLEYpfSl9LFlpbj1mdW5jdGlvbihpLHMpe2NvbnN0IHU9cXQoKS5mbG93Y2hhcnQ7bGV0IGQ9MDtpLmZvckVhY2goZnVuY3Rpb24ocCl7dmFyIGI7ZCsrO2NvbnN0IHY9e2NsYXNzZXM6InJlbGF0aW9uIixwYXR0ZXJuOnAucmVsYXRpb24ubGluZVR5cGU9PTE/ImRhc2hlZCI6InNvbGlkIixpZDpgaWRfJHtwLmlkMX1fJHtwLmlkMn1fJHtkfWAsYXJyb3doZWFkOnAudHlwZT09PSJhcnJvd19vcGVuIj8ibm9uZSI6Im5vcm1hbCIsc3RhcnRMYWJlbFJpZ2h0OnAucmVsYXRpb25UaXRsZTE9PT0ibm9uZSI/IiI6cC5yZWxhdGlvblRpdGxlMSxlbmRMYWJlbExlZnQ6cC5yZWxhdGlvblRpdGxlMj09PSJub25lIj8iIjpwLnJlbGF0aW9uVGl0bGUyLGFycm93VHlwZVN0YXJ0OmFLZShwLnJlbGF0aW9uLnR5cGUxKSxhcnJvd1R5cGVFbmQ6YUtlKHAucmVsYXRpb24udHlwZTIpLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY3VydmU6T3YodT09bnVsbD92b2lkIDA6dS5jdXJ2ZSxrcCl9O2lmKFhlLmluZm8odixwKSxwLnN0eWxlIT09dm9pZCAwKXtjb25zdCB5PW9tKHAuc3R5bGUpO3Yuc3R5bGU9eS5zdHlsZSx2LmxhYmVsU3R5bGU9eS5sYWJlbFN0eWxlfXAudGV4dD1wLnRpdGxlLHAudGV4dD09PXZvaWQgMD9wLnN0eWxlIT09dm9pZCAwJiYodi5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOih2LmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIix2LmxhYmVscG9zPSJjIiwoKGI9cXQoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpiLmh0bWxMYWJlbHMpPz9xdCgpLmh0bWxMYWJlbHM/KHYubGFiZWxUeXBlPSJodG1sIix2LmxhYmVsPSc8c3BhbiBjbGFzcz0iZWRnZUxhYmVsIj4nK3AudGV4dCsiPC9zcGFuPiIpOih2LmxhYmVsVHlwZT0idGV4dCIsdi5sYWJlbD1wLnRleHQucmVwbGFjZShjaS5saW5lQnJlYWtSZWdleCxgCmApLHAuc3R5bGU9PT12b2lkIDAmJih2LnN0eWxlPXYuc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksdi5sYWJlbFN0eWxlPXYubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSkscy5zZXRFZGdlKHAuaWQxLHAuaWQyLHYsZCl9KX0sWGluPWZ1bmN0aW9uKGkpe092ZT17Li4uT3ZlLC4uLml9fSxRaW49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7WGUuaW5mbygiRHJhd2luZyBjbGFzcyAtICIscyk7Y29uc3QgcD1xdCgpLmZsb3djaGFydD8/cXQoKS5jbGFzcyx2PXF0KCkuc2VjdXJpdHlMZXZlbDtYZS5pbmZvKCJjb25maWc6IixwKTtjb25zdCBiPShwPT1udWxsP3ZvaWQgMDpwLm5vZGVTcGFjaW5nKT8/NTAseT0ocD09bnVsbD92b2lkIDA6cC5yYW5rU3BhY2luZyk/PzUwLFQ9bmV3IEIwKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6ZC5kYi5nZXREaXJlY3Rpb24oKSxub2Rlc2VwOmIscmFua3NlcDp5LG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxfPWQuZGIuZ2V0TmFtZXNwYWNlcygpLEE9ZC5kYi5nZXRDbGFzc2VzKCksUD1kLmRiLmdldFJlbGF0aW9ucygpLFI9ZC5kYi5nZXROb3RlcygpO1hlLmluZm8oUCksS2luKF8sVCxzLGQpLHNLZShBLFQscyxkKSxZaW4oUCxUKSxXaW4oUixULFAubGVuZ3RoKzEsQSk7bGV0IEY7dj09PSJzYW5kYm94IiYmKEY9SXIoIiNpIitzKSk7Y29uc3Qgaj1Jcih2PT09InNhbmRib3giP0Yubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLEs9ai5zZWxlY3QoYFtpZD0iJHtzfSJdYCksZWU9ai5zZWxlY3QoIiMiK3MrIiBnIik7aWYoYXdhaXQgcW1lKGVlLFQsWyJhZ2dyZWdhdGlvbiIsImV4dGVuc2lvbiIsImNvbXBvc2l0aW9uIiwiZGVwZW5kZW5jeSIsImxvbGxpcG9wIl0sImNsYXNzRGlhZ3JhbSIscyksQW8uaW5zZXJ0VGl0bGUoSywiY2xhc3NUaXRsZVRleHQiLChwPT1udWxsP3ZvaWQgMDpwLnRpdGxlVG9wTWFyZ2luKT8/NSxkLmRiLmdldERpYWdyYW1UaXRsZSgpKSx5OShULEsscD09bnVsbD92b2lkIDA6cC5kaWFncmFtUGFkZGluZyxwPT1udWxsP3ZvaWQgMDpwLnVzZU1heFdpZHRoKSwhKHAhPW51bGwmJnAuaHRtbExhYmVscykpe2NvbnN0IGllPXY9PT0ic2FuZGJveCI/Ri5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudCxvZT1pZS5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrcysnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKTtmb3IoY29uc3QgcGUgb2Ygb2Upe2NvbnN0IGJlPXBlLmdldEJCb3goKSxhZT1pZS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO2FlLnNldEF0dHJpYnV0ZSgicngiLDApLGFlLnNldEF0dHJpYnV0ZSgicnkiLDApLGFlLnNldEF0dHJpYnV0ZSgid2lkdGgiLGJlLndpZHRoKSxhZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsYmUuaGVpZ2h0KSxwZS5pbnNlcnRCZWZvcmUoYWUscGUuZmlyc3RDaGlsZCl9fX07ZnVuY3Rpb24gYUtlKGkpe2xldCBzO3N3aXRjaChpKXtjYXNlIDA6cz0iYWdncmVnYXRpb24iO2JyZWFrO2Nhc2UgMTpzPSJleHRlbnNpb24iO2JyZWFrO2Nhc2UgMjpzPSJjb21wb3NpdGlvbiI7YnJlYWs7Y2FzZSAzOnM9ImRlcGVuZGVuY3kiO2JyZWFrO2Nhc2UgNDpzPSJsb2xsaXBvcCI7YnJlYWs7ZGVmYXVsdDpzPSJub25lIn1yZXR1cm4gc31jb25zdCBKaW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpLR2UsZGI6eUoscmVuZGVyZXI6e3NldENvbmY6WGluLGRyYXc6UWlufSxzdHlsZXM6dEtlLGluaXQ6aT0+e2kuY2xhc3N8fChpLmNsYXNzPXt9KSxpLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLHlKLmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgTnZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oSWUsU2UsQ2Usa2Upe2ZvcihDZT1DZXx8e30sa2U9SWUubGVuZ3RoO2tlLS07Q2VbSWVba2VdXT1TZSk7cmV0dXJuIENlfSxzPVsxLDJdLHU9WzEsM10sZD1bMSw0XSxwPVsyLDRdLHY9WzEsOV0sYj1bMSwxMV0seT1bMSwxNV0sVD1bMSwxNl0sXz1bMSwxN10sQT1bMSwxOF0sUD1bMSwzMF0sUj1bMSwxOV0sRj1bMSwyMF0saj1bMSwyMV0sSz1bMSwyMl0sZWU9WzEsMjNdLGllPVsxLDI1XSxvZT1bMSwyNl0scGU9WzEsMjddLGJlPVsxLDI4XSxhZT1bMSwyOV0sbmU9WzEsMzJdLHNlPVsxLDMzXSxkZT1bMSwzNF0sWD1bMSwzNV0sZ2U9WzEsMzFdLFc9WzEsNCw1LDE1LDE2LDE4LDIwLDIxLDIzLDI0LDI1LDI2LDI3LDI4LDMyLDM0LDM2LDM3LDQxLDQ0LDQ1LDQ2LDQ3LDUwXSx4ZT1bMSw0LDUsMTMsMTQsMTUsMTYsMTgsMjAsMjEsMjMsMjQsMjUsMjYsMjcsMjgsMzIsMzQsMzYsMzcsNDEsNDQsNDUsNDYsNDcsNTBdLFU9WzQsNSwxNSwxNiwxOCwyMCwyMSwyMywyNCwyNSwyNiwyNywyOCwzMiwzNCwzNiwzNyw0MSw0NCw0NSw0Niw0Nyw1MF0sRmU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNQQUNFOjQsTkw6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGNsYXNzRGVmU3RhdGVtZW50OjEwLGNzc0NsYXNzU3RhdGVtZW50OjExLGlkU3RhdGVtZW50OjEyLERFU0NSOjEzLCItLT4iOjE0LEhJREVfRU1QVFk6MTUsc2NhbGU6MTYsV0lEVEg6MTcsQ09NUE9TSVRfU1RBVEU6MTgsU1RSVUNUX1NUQVJUOjE5LFNUUlVDVF9TVE9QOjIwLFNUQVRFX0RFU0NSOjIxLEFTOjIyLElEOjIzLEZPUks6MjQsSk9JTjoyNSxDSE9JQ0U6MjYsQ09OQ1VSUkVOVDoyNyxub3RlOjI4LG5vdGVQb3NpdGlvbjoyOSxOT1RFX1RFWFQ6MzAsZGlyZWN0aW9uOjMxLGFjY190aXRsZTozMixhY2NfdGl0bGVfdmFsdWU6MzMsYWNjX2Rlc2NyOjM0LGFjY19kZXNjcl92YWx1ZTozNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM2LGNsYXNzRGVmOjM3LENMQVNTREVGX0lEOjM4LENMQVNTREVGX1NUWUxFT1BUUzozOSxERUZBVUxUOjQwLGNsYXNzOjQxLENMQVNTRU5USVRZX0lEUzo0MixTVFlMRUNMQVNTOjQzLGRpcmVjdGlvbl90Yjo0NCxkaXJlY3Rpb25fYnQ6NDUsZGlyZWN0aW9uX3JsOjQ2LGRpcmVjdGlvbl9scjo0Nyxlb2w6NDgsIjsiOjQ5LEVER0VfU1RBVEU6NTAsU1RZTEVfU0VQQVJBVE9SOjUxLGxlZnRfb2Y6NTIscmlnaHRfb2Y6NTMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJOTCIsNjoiU0QiLDEzOiJERVNDUiIsMTQ6Ii0tPiIsMTU6IkhJREVfRU1QVFkiLDE2OiJzY2FsZSIsMTc6IldJRFRIIiwxODoiQ09NUE9TSVRfU1RBVEUiLDE5OiJTVFJVQ1RfU1RBUlQiLDIwOiJTVFJVQ1RfU1RPUCIsMjE6IlNUQVRFX0RFU0NSIiwyMjoiQVMiLDIzOiJJRCIsMjQ6IkZPUksiLDI1OiJKT0lOIiwyNjoiQ0hPSUNFIiwyNzoiQ09OQ1VSUkVOVCIsMjg6Im5vdGUiLDMwOiJOT1RFX1RFWFQiLDMyOiJhY2NfdGl0bGUiLDMzOiJhY2NfdGl0bGVfdmFsdWUiLDM0OiJhY2NfZGVzY3IiLDM1OiJhY2NfZGVzY3JfdmFsdWUiLDM2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNzoiY2xhc3NEZWYiLDM4OiJDTEFTU0RFRl9JRCIsMzk6IkNMQVNTREVGX1NUWUxFT1BUUyIsNDA6IkRFRkFVTFQiLDQxOiJjbGFzcyIsNDI6IkNMQVNTRU5USVRZX0lEUyIsNDM6IlNUWUxFQ0xBU1MiLDQ0OiJkaXJlY3Rpb25fdGIiLDQ1OiJkaXJlY3Rpb25fYnQiLDQ2OiJkaXJlY3Rpb25fcmwiLDQ3OiJkaXJlY3Rpb25fbHIiLDQ5OiI7Iiw1MDoiRURHRV9TVEFURSIsNTE6IlNUWUxFX1NFUEFSQVRPUiIsNTI6ImxlZnRfb2YiLDUzOiJyaWdodF9vZiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwyXSxbOSwzXSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwxXSxbOSw0XSxbOSwzXSxbOSw2XSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSw0XSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTAsM10sWzEwLDNdLFsxMSwzXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbMzEsMV0sWzQ4LDFdLFs0OCwxXSxbMTIsMV0sWzEyLDFdLFsxMiwzXSxbMTIsM10sWzI5LDFdLFsyOSwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihTZSxDZSxrZSxLZSxGdCxOZSxnbil7dmFyIF90PU5lLmxlbmd0aC0xO3N3aXRjaChGdCl7Y2FzZSAzOnJldHVybiBLZS5zZXRSb290RG9jKE5lW190XSksTmVbX3RdO2Nhc2UgNDp0aGlzLiQ9W107YnJlYWs7Y2FzZSA1Ok5lW190XSE9Im5sIiYmKE5lW190LTFdLnB1c2goTmVbX3RdKSx0aGlzLiQ9TmVbX3QtMV0pO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPU5lW190XTticmVhaztjYXNlIDg6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMTp0aGlzLiQ9TmVbX3RdO2JyZWFrO2Nhc2UgMTI6Y29uc3QgeHQ9TmVbX3QtMV07eHQuZGVzY3JpcHRpb249S2UudHJpbUNvbG9uKE5lW190XSksdGhpcy4kPXh0O2JyZWFrO2Nhc2UgMTM6dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOk5lW190LTJdLHN0YXRlMjpOZVtfdF19O2JyZWFrO2Nhc2UgMTQ6Y29uc3QgUHQ9S2UudHJpbUNvbG9uKE5lW190XSk7dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOk5lW190LTNdLHN0YXRlMjpOZVtfdC0xXSxkZXNjcmlwdGlvbjpQdH07YnJlYWs7Y2FzZSAxODp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpOZVtfdC0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIixkb2M6TmVbX3QtMV19O2JyZWFrO2Nhc2UgMTk6dmFyIEV0PU5lW190XSxHdD1OZVtfdC0yXS50cmltKCk7aWYoTmVbX3RdLm1hdGNoKCI6Iikpe3ZhciBsbj1OZVtfdF0uc3BsaXQoIjoiKTtFdD1sblswXSxHdD1bR3QsbG5bMV1dfXRoaXMuJD17c3RtdDoic3RhdGUiLGlkOkV0LHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOkd0fTticmVhaztjYXNlIDIwOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOk5lW190LTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOk5lW190LTVdLGRvYzpOZVtfdC0xXX07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpOZVtfdF0sdHlwZToiZm9yayJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6TmVbX3RdLHR5cGU6ImpvaW4ifTticmVhaztjYXNlIDIzOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOk5lW190XSx0eXBlOiJjaG9pY2UifTticmVhaztjYXNlIDI0OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOktlLmdldERpdmlkZXJJZCgpLHR5cGU6ImRpdmlkZXIifTticmVhaztjYXNlIDI1OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOk5lW190LTFdLnRyaW0oKSxub3RlOntwb3NpdGlvbjpOZVtfdC0yXS50cmltKCksdGV4dDpOZVtfdF0udHJpbSgpfX07YnJlYWs7Y2FzZSAyODp0aGlzLiQ9TmVbX3RdLnRyaW0oKSxLZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjk6Y2FzZSAzMDp0aGlzLiQ9TmVbX3RdLnRyaW0oKSxLZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9e3N0bXQ6ImNsYXNzRGVmIixpZDpOZVtfdC0xXS50cmltKCksY2xhc3NlczpOZVtfdF0udHJpbSgpfTticmVhaztjYXNlIDMzOnRoaXMuJD17c3RtdDoiYXBwbHlDbGFzcyIsaWQ6TmVbX3QtMV0udHJpbSgpLHN0eWxlQ2xhc3M6TmVbX3RdLnRyaW0oKX07YnJlYWs7Y2FzZSAzNDpLZS5zZXREaXJlY3Rpb24oIlRCIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMzU6S2Uuc2V0RGlyZWN0aW9uKCJCVCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDM2OktlLnNldERpcmVjdGlvbigiUkwiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAzNzpLZS5zZXREaXJlY3Rpb24oIkxSIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9O2JyZWFrO2Nhc2UgNDA6Y2FzZSA0MTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpOZVtfdF0udHJpbSgpLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDQyOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOk5lW190LTJdLnRyaW0oKSxjbGFzc2VzOltOZVtfdF0udHJpbSgpXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpOZVtfdC0yXS50cmltKCksY2xhc3NlczpbTmVbX3RdLnRyaW0oKV0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9O2JyZWFrfX0sdGFibGU6W3szOjEsNDpzLDU6dSw2OmR9LHsxOlszXX0sezM6NSw0OnMsNTp1LDY6ZH0sezM6Niw0OnMsNTp1LDY6ZH0saShbMSw0LDUsMTUsMTYsMTgsMjEsMjMsMjQsMjUsMjYsMjcsMjgsMzIsMzQsMzYsMzcsNDEsNDQsNDUsNDYsNDcsNTBdLHAsezc6N30pLHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM10sNDp2LDU6Yiw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxNTp5LDE2OlQsMTg6XywyMTpBLDIzOlAsMjQ6UiwyNTpGLDI2OmosMjc6SywyODplZSwzMToyNCwzMjppZSwzNDpvZSwzNjpwZSwzNzpiZSw0MTphZSw0NDpuZSw0NTpzZSw0NjpkZSw0NzpYLDUwOmdlfSxpKFcsWzIsNV0pLHs5OjM2LDEwOjEyLDExOjEzLDEyOjE0LDE1OnksMTY6VCwxODpfLDIxOkEsMjM6UCwyNDpSLDI1OkYsMjY6aiwyNzpLLDI4OmVlLDMxOjI0LDMyOmllLDM0Om9lLDM2OnBlLDM3OmJlLDQxOmFlLDQ0Om5lLDQ1OnNlLDQ2OmRlLDQ3OlgsNTA6Z2V9LGkoVyxbMiw3XSksaShXLFsyLDhdKSxpKFcsWzIsOV0pLGkoVyxbMiwxMF0pLGkoVyxbMiwxMV0sezEzOlsxLDM3XSwxNDpbMSwzOF19KSxpKFcsWzIsMTVdKSx7MTc6WzEsMzldfSxpKFcsWzIsMTddLHsxOTpbMSw0MF19KSx7MjI6WzEsNDFdfSxpKFcsWzIsMjFdKSxpKFcsWzIsMjJdKSxpKFcsWzIsMjNdKSxpKFcsWzIsMjRdKSx7Mjk6NDIsMzA6WzEsNDNdLDUyOlsxLDQ0XSw1MzpbMSw0NV19LGkoVyxbMiwyN10pLHszMzpbMSw0Nl19LHszNTpbMSw0N119LGkoVyxbMiwzMF0pLHszODpbMSw0OF0sNDA6WzEsNDldfSx7NDI6WzEsNTBdfSxpKHhlLFsyLDQwXSx7NTE6WzEsNTFdfSksaSh4ZSxbMiw0MV0sezUxOlsxLDUyXX0pLGkoVyxbMiwzNF0pLGkoVyxbMiwzNV0pLGkoVyxbMiwzNl0pLGkoVyxbMiwzN10pLGkoVyxbMiw2XSksaShXLFsyLDEyXSksezEyOjUzLDIzOlAsNTA6Z2V9LGkoVyxbMiwxNl0pLGkoVSxwLHs3OjU0fSksezIzOlsxLDU1XX0sezIzOlsxLDU2XX0sezIyOlsxLDU3XX0sezIzOlsyLDQ0XX0sezIzOlsyLDQ1XX0saShXLFsyLDI4XSksaShXLFsyLDI5XSksezM5OlsxLDU4XX0sezM5OlsxLDU5XX0sezQzOlsxLDYwXX0sezIzOlsxLDYxXX0sezIzOlsxLDYyXX0saShXLFsyLDEzXSx7MTM6WzEsNjNdfSksezQ6diw1OmIsODo4LDk6MTAsMTA6MTIsMTE6MTMsMTI6MTQsMTU6eSwxNjpULDE4Ol8sMjA6WzEsNjRdLDIxOkEsMjM6UCwyNDpSLDI1OkYsMjY6aiwyNzpLLDI4OmVlLDMxOjI0LDMyOmllLDM0Om9lLDM2OnBlLDM3OmJlLDQxOmFlLDQ0Om5lLDQ1OnNlLDQ2OmRlLDQ3OlgsNTA6Z2V9LGkoVyxbMiwxOV0sezE5OlsxLDY1XX0pLHszMDpbMSw2Nl19LHsyMzpbMSw2N119LGkoVyxbMiwzMV0pLGkoVyxbMiwzMl0pLGkoVyxbMiwzM10pLGkoeGUsWzIsNDJdKSxpKHhlLFsyLDQzXSksaShXLFsyLDE0XSksaShXLFsyLDE4XSksaShVLHAsezc6Njh9KSxpKFcsWzIsMjVdKSxpKFcsWzIsMjZdKSx7NDp2LDU6Yiw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxNTp5LDE2OlQsMTg6XywyMDpbMSw2OV0sMjE6QSwyMzpQLDI0OlIsMjU6RiwyNjpqLDI3OkssMjg6ZWUsMzE6MjQsMzI6aWUsMzQ6b2UsMzY6cGUsMzc6YmUsNDE6YWUsNDQ6bmUsNDU6c2UsNDY6ZGUsNDc6WCw1MDpnZX0saShXLFsyLDIwXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDFdLDY6WzIsMl0sNDQ6WzIsNDRdLDQ1OlsyLDQ1XX0scGFyc2VFcnJvcjpmdW5jdGlvbihTZSxDZSl7aWYoQ2UucmVjb3ZlcmFibGUpdGhpcy50cmFjZShTZSk7ZWxzZXt2YXIga2U9bmV3IEVycm9yKFNlKTt0aHJvdyBrZS5oYXNoPUNlLGtlfX0scGFyc2U6ZnVuY3Rpb24oU2Upe3ZhciBDZT10aGlzLGtlPVswXSxLZT1bXSxGdD1bbnVsbF0sTmU9W10sZ249dGhpcy50YWJsZSxfdD0iIixFdD0wLEd0PTAsbG49Mix4dD0xLFB0PU5lLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFFlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksRHQ9e3l5Ont9fTtmb3IodmFyIGt0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksa3QpJiYoRHQueXlba3RdPXRoaXMueXlba3RdKTtRZS5zZXRJbnB1dChTZSxEdC55eSksRHQueXkubGV4ZXI9UWUsRHQueXkucGFyc2VyPXRoaXMsdHlwZW9mIFFlLnl5bGxvYz4idSImJihRZS55eWxsb2M9e30pO3ZhciBPbj1RZS55eWxsb2M7TmUucHVzaChPbik7dmFyIGh0PVFlLm9wdGlvbnMmJlFlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBEdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1EdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiB6cigpe3ZhciBBdDtyZXR1cm4gQXQ9S2UucG9wKCl8fFFlLmxleCgpfHx4dCx0eXBlb2YgQXQhPSJudW1iZXIiJiYoQXQgaW5zdGFuY2VvZiBBcnJheSYmKEtlPUF0LEF0PUtlLnBvcCgpKSxBdD1DZS5zeW1ib2xzX1tBdF18fEF0KSxBdH1mb3IodmFyIHl0LGppLHhpLE1hLHpzPXt9LGFvLFRyLEZuLHFuOzspe2lmKGppPWtlW2tlLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2ppXT94aT10aGlzLmRlZmF1bHRBY3Rpb25zW2ppXTooKHl0PT09bnVsbHx8dHlwZW9mIHl0PiJ1IikmJih5dD16cigpKSx4aT1nbltqaV0mJmduW2ppXVt5dF0pLHR5cGVvZiB4aT4idSJ8fCF4aS5sZW5ndGh8fCF4aVswXSl7dmFyIFVuPSIiO3FuPVtdO2ZvcihhbyBpbiBnbltqaV0pdGhpcy50ZXJtaW5hbHNfW2FvXSYmYW8+bG4mJnFuLnB1c2goIiciK3RoaXMudGVybWluYWxzX1thb10rIiciKTtRZS5zaG93UG9zaXRpb24/VW49IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoRXQrMSkrYDoKYCtRZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3FuLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beXRdfHx5dCkrIiciOlVuPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEV0KzEpKyI6IFVuZXhwZWN0ZWQgIisoeXQ9PXh0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3l0XXx8eXQpKyInIiksdGhpcy5wYXJzZUVycm9yKFVuLHt0ZXh0OlFlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t5dF18fHl0LGxpbmU6UWUueXlsaW5lbm8sbG9jOk9uLGV4cGVjdGVkOnFufSl9aWYoeGlbMF1pbnN0YW5jZW9mIEFycmF5JiZ4aS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2ppKyIsIHRva2VuOiAiK3l0KTtzd2l0Y2goeGlbMF0pe2Nhc2UgMTprZS5wdXNoKHl0KSxGdC5wdXNoKFFlLnl5dGV4dCksTmUucHVzaChRZS55eWxsb2MpLGtlLnB1c2goeGlbMV0pLHl0PW51bGwsR3Q9UWUueXlsZW5nLF90PVFlLnl5dGV4dCxFdD1RZS55eWxpbmVubyxPbj1RZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKFRyPXRoaXMucHJvZHVjdGlvbnNfW3hpWzFdXVsxXSx6cy4kPUZ0W0Z0Lmxlbmd0aC1Ucl0senMuXyQ9e2ZpcnN0X2xpbmU6TmVbTmUubGVuZ3RoLShUcnx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOk5lW05lLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOk5lW05lLmxlbmd0aC0oVHJ8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46TmVbTmUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxodCYmKHpzLl8kLnJhbmdlPVtOZVtOZS5sZW5ndGgtKFRyfHwxKV0ucmFuZ2VbMF0sTmVbTmUubGVuZ3RoLTFdLnJhbmdlWzFdXSksTWE9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHpzLFtfdCxHdCxFdCxEdC55eSx4aVsxXSxGdCxOZV0uY29uY2F0KFB0KSksdHlwZW9mIE1hPCJ1IilyZXR1cm4gTWE7VHImJihrZT1rZS5zbGljZSgwLC0xKlRyKjIpLEZ0PUZ0LnNsaWNlKDAsLTEqVHIpLE5lPU5lLnNsaWNlKDAsLTEqVHIpKSxrZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3hpWzFdXVswXSksRnQucHVzaCh6cy4kKSxOZS5wdXNoKHpzLl8kKSxGbj1nbltrZVtrZS5sZW5ndGgtMl1dW2tlW2tlLmxlbmd0aC0xXV0sa2UucHVzaChGbik7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LFBlPWZ1bmN0aW9uKCl7dmFyIEllPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKENlLGtlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKENlLGtlKTtlbHNlIHRocm93IG5ldyBFcnJvcihDZSl9LHNldElucHV0OmZ1bmN0aW9uKFNlLENlKXtyZXR1cm4gdGhpcy55eT1DZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9U2UsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIFNlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1TZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9U2UsdGhpcy5tYXRjaGVkKz1TZTt2YXIgQ2U9U2UubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBDZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksU2V9LHVucHV0OmZ1bmN0aW9uKFNlKXt2YXIgQ2U9U2UubGVuZ3RoLGtlPVNlLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9U2UrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUNlKSx0aGlzLm9mZnNldC09Q2U7dmFyIEtlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGtlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09a2UubGVuZ3RoLTEpO3ZhciBGdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46a2U/KGtlLmxlbmd0aD09PUtlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrS2VbS2UubGVuZ3RoLWtlLmxlbmd0aF0ubGVuZ3RoLWtlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tQ2V9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bRnRbMF0sRnRbMF0rdGhpcy55eWxlbmctQ2VdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihTZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFNlKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBTZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFNlLmxlbmd0aD4yMD8iLi4uIjoiIikrU2Uuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgU2U9dGhpcy5tYXRjaDtyZXR1cm4gU2UubGVuZ3RoPDIwJiYoU2UrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVNlLmxlbmd0aCkpLChTZS5zdWJzdHIoMCwyMCkrKFNlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgU2U9dGhpcy5wYXN0SW5wdXQoKSxDZT1uZXcgQXJyYXkoU2UubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gU2UrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0NlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihTZSxDZSl7dmFyIGtlLEtlLEZ0O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihGdD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihGdC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxLZT1TZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksS2UmJih0aGlzLnl5bGluZW5vKz1LZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpLZT9LZVtLZS5sZW5ndGgtMV0ubGVuZ3RoLUtlW0tlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1NlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVNlWzBdLHRoaXMubWF0Y2grPVNlWzBdLHRoaXMubWF0Y2hlcz1TZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShTZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9U2VbMF0sa2U9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsQ2UsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksa2UpcmV0dXJuIGtlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBOZSBpbiBGdCl0aGlzW05lXT1GdFtOZV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgU2UsQ2Usa2UsS2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgRnQ9dGhpcy5fY3VycmVudFJ1bGVzKCksTmU9MDtOZTxGdC5sZW5ndGg7TmUrKylpZihrZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0Z0W05lXV0pLGtlJiYoIUNlfHxrZVswXS5sZW5ndGg+Q2VbMF0ubGVuZ3RoKSl7aWYoQ2U9a2UsS2U9TmUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoU2U9dGhpcy50ZXN0X21hdGNoKGtlLEZ0W05lXSksU2UhPT0hMSlyZXR1cm4gU2U7aWYodGhpcy5fYmFja3RyYWNrKXtDZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBDZT8oU2U9dGhpcy50ZXN0X21hdGNoKENlLEZ0W0tlXSksU2UhPT0hMT9TZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIENlPXRoaXMubmV4dCgpO3JldHVybiBDZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oQ2Upe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChDZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIENlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIENlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oQ2Upe3JldHVybiBDZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKENlfHwwKSxDZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0NlXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihDZSl7dGhpcy5iZWdpbihDZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oQ2Usa2UsS2UsRnQpe3N3aXRjaChLZSl7Y2FzZSAwOnJldHVybiA0MDtjYXNlIDE6cmV0dXJuIDQ0O2Nhc2UgMjpyZXR1cm4gNDU7Y2FzZSAzOnJldHVybiA0NjtjYXNlIDQ6cmV0dXJuIDQ3O2Nhc2UgNTpicmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiA1O2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOmJyZWFrO2Nhc2UgMTI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE2O2Nhc2UgMTM6cmV0dXJuIDE3O2Nhc2UgMTQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMyO2Nhc2UgMTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNDtjYXNlIDE4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxOTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMTpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGIiksMzc7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksIkRFRkFVTFRfQ0xBU1NERUZfSUQiO2Nhc2UgMjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLDM4O2Nhc2UgMjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzOTtjYXNlIDI2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1MiKSw0MTtjYXNlIDI3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTX1NUWUxFIiksNDI7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQzO2Nhc2UgMjk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE2O2Nhc2UgMzA6cmV0dXJuIDE3O2Nhc2UgMzE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzI6dGhpcy5wdXNoU3RhdGUoIlNUQVRFIik7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGtlLnl5dGV4dD1rZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMzQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxrZS55eXRleHQ9a2UueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNTtjYXNlIDM1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksa2UueXl0ZXh0PWtlLnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI2O2Nhc2UgMzY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxrZS55eXRleHQ9a2UueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNDtjYXNlIDM3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksa2UueXl0ZXh0PWtlLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjU7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGtlLnl5dGV4dD1rZS55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNjtjYXNlIDM5OnJldHVybiA0NDtjYXNlIDQwOnJldHVybiA0NTtjYXNlIDQxOnJldHVybiA0NjtjYXNlIDQyOnJldHVybiA0NztjYXNlIDQzOnRoaXMucHVzaFN0YXRlKCJTVEFURV9TVFJJTkciKTticmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfSUQiKSwiQVMiO2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2Nhc2UgNDY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNDc6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDQ4OnJldHVybiAxODtjYXNlIDQ5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDE5O2Nhc2UgNTE6YnJlYWs7Y2FzZSA1MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDIwO2Nhc2UgNTM6YnJlYWs7Y2FzZSA1NDpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI4O2Nhc2UgNTU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDUyO2Nhc2UgNTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDUzO2Nhc2UgNTc6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSA1ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjtjYXNlIDU5OmJyZWFrO2Nhc2UgNjA6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA2MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSA2MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyMztjYXNlIDYzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksa2UueXl0ZXh0PWtlLnl5dGV4dC5zdWJzdHIoMikudHJpbSgpLDMwO2Nhc2UgNjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxrZS55eXRleHQ9a2UueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwzMDtjYXNlIDY1OnJldHVybiA2O2Nhc2UgNjY6cmV0dXJuIDY7Y2FzZSA2NzpyZXR1cm4gMTU7Y2FzZSA2ODpyZXR1cm4gNTA7Y2FzZSA2OTpyZXR1cm4gMjM7Y2FzZSA3MDpyZXR1cm4ga2UueXl0ZXh0PWtlLnl5dGV4dC50cmltKCksMTM7Y2FzZSA3MTpyZXR1cm4gMTQ7Y2FzZSA3MjpyZXR1cm4gMjc7Y2FzZSA3MzpyZXR1cm4gNTE7Y2FzZSA3NDpyZXR1cm4gNTtjYXNlIDc1OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OmRlZmF1bHRcYikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/Oltcc10rKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86Y2xhc3NEZWZccyspL2ksL14oPzpERUZBVUxUXHMrKS9pLC9eKD86XHcrXHMrKS9pLC9eKD86W15cbl0qKS9pLC9eKD86Y2xhc3NccyspL2ksL14oPzooXHcrKSsoKCxccypcdyspKikpL2ksL14oPzpbXlxuXSopL2ksL14oPzpzY2FsZVxzKykvaSwvXig/OlxkKykvaSwvXig/OlxzK3dpZHRoXGIpL2ksL14oPzpzdGF0ZVxzKykvaSwvXig/Oi4qPDxmb3JrPj4pL2ksL14oPzouKjw8am9pbj4+KS9pLC9eKD86Lio8PGNob2ljZT4+KS9pLC9eKD86LipcW1xbZm9ya1xdXF0pL2ksL14oPzouKlxbXFtqb2luXF1cXSkvaSwvXig/Oi4qXFtcW2Nob2ljZVxdXF0pL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86XHMqYXNccyspL2ksL14oPzpbXlxuXHtdKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cblxzXHtdKykvaSwvXig/OlxuKS9pLC9eKD86XHspL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/Olx9KS9pLC9eKD86W1xuXSkvaSwvXig/Om5vdGVccyspL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86IikvaSwvXig/OlxzKmFzXHMqKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXSopL2ksL14oPzpccypbXjpcblxzXC1dKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oltcc1xTXSo/ZW5kIG5vdGVcYikvaSwvXig/OnN0YXRlRGlhZ3JhbVxzKykvaSwvXig/OnN0YXRlRGlhZ3JhbS12MlxzKykvaSwvXig/OmhpZGUgZW1wdHkgZGVzY3JpcHRpb25cYikvaSwvXig/OlxbXCpcXSkvaSwvXig/OlteOlxuXHNcLVx7XSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzotLT4pL2ksL14oPzotLSkvaSwvXig/Ojo6OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntMSU5FOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOls5LDEwLDIyLDI2LDMyLDM5LDQwLDQxLDQyLDUxLDUyLDUzLDU0LDY4LDY5LDcwLDcxLDcyXSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEVfSUQ6e3J1bGVzOls2MV0saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFOntydWxlczpbNTgsNTksNjBdLGluY2x1c2l2ZTohMX0sTk9URV9URVhUOntydWxlczpbNjMsNjRdLGluY2x1c2l2ZTohMX0sTk9URV9JRDp7cnVsZXM6WzYyXSxpbmNsdXNpdmU6ITF9LE5PVEU6e3J1bGVzOls1NSw1Niw1N10saW5jbHVzaXZlOiExfSxDTEFTU19TVFlMRTp7cnVsZXM6WzI4XSxpbmNsdXNpdmU6ITF9LENMQVNTOntydWxlczpbMjddLGluY2x1c2l2ZTohMX0sQ0xBU1NERUZJRDp7cnVsZXM6WzI1XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGOntydWxlczpbMjMsMjRdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzIwLDIxXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzE4XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzE2XSxpbmNsdXNpdmU6ITF9LFNDQUxFOntydWxlczpbMTMsMTQsMzAsMzFdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEVfSUQ6e3J1bGVzOls0NV0saW5jbHVzaXZlOiExfSxTVEFURV9TVFJJTkc6e3J1bGVzOls0Niw0N10saW5jbHVzaXZlOiExfSxGT1JLX1NUQVRFOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFOntydWxlczpbOSwxMCwzMywzNCwzNSwzNiwzNywzOCw0Myw0NCw0OCw0OSw1MF0saW5jbHVzaXZlOiExfSxJRDp7cnVsZXM6WzksMTBdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw4LDEwLDExLDEyLDE1LDE3LDE5LDIyLDI2LDI5LDMyLDUwLDU0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDczLDc0LDc1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEllfSgpO0ZlLmxleGVyPVBlO2Z1bmN0aW9uIGplKCl7dGhpcy55eT17fX1yZXR1cm4gamUucHJvdG90eXBlPUZlLEZlLlBhcnNlcj1qZSxuZXcgamV9KCk7TnZlLnBhcnNlcj1OdmU7Y29uc3Qgb0tlPU52ZSxaaW49IkxSIixlc249IlRCIixFSj0ic3RhdGUiLFB2ZT0icmVsYXRpb24iLHRzbj0iY2xhc3NEZWYiLG5zbj0iYXBwbHlDbGFzcyIsWFI9ImRlZmF1bHQiLGNLZT0iZGl2aWRlciIsQnZlPSJbKl0iLHVLZT0ic3RhcnQiLGxLZT1CdmUsaEtlPSJlbmQiLGZLZT0iY29sb3IiLGRLZT0iZmlsbCIscnNuPSJiZ0ZpbGwiLGlzbj0iLCI7ZnVuY3Rpb24gZ0tlKCl7cmV0dXJue319bGV0IHBLZT1aaW4sVEo9W10sUVI9Z0tlKCk7Y29uc3QgYktlPSgpPT4oe3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fSk7bGV0IENKPXtyb290OmJLZSgpfSxqZz1DSi5yb290LEpSPTAsbUtlPTA7Y29uc3Qgc3NuPXtMSU5FOjAsRE9UVEVEX0xJTkU6MX0sYXNuPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxTSj1pPT5KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGkpKSxvc249aT0+e1hlLmluZm8oIlNldHRpbmcgcm9vdCBkb2MiLGkpLFRKPWl9LGNzbj0oKT0+VEosX0o9KGkscyx1KT0+e2lmKHMuc3RtdD09PVB2ZSlfSihpLHMuc3RhdGUxLCEwKSxfSihpLHMuc3RhdGUyLCExKTtlbHNlIGlmKHMuc3RtdD09PUVKJiYocy5pZD09PSJbKl0iPyhzLmlkPXU/aS5pZCsiX3N0YXJ0IjppLmlkKyJfZW5kIixzLnN0YXJ0PXUpOnMuaWQ9cy5pZC50cmltKCkpLHMuZG9jKXtjb25zdCBkPVtdO2xldCBwPVtdLHY7Zm9yKHY9MDt2PHMuZG9jLmxlbmd0aDt2KyspaWYocy5kb2Nbdl0udHlwZT09PWNLZSl7Y29uc3QgYj1TSihzLmRvY1t2XSk7Yi5kb2M9U0oocCksZC5wdXNoKGIpLHA9W119ZWxzZSBwLnB1c2gocy5kb2Nbdl0pO2lmKGQubGVuZ3RoPjAmJnAubGVuZ3RoPjApe2NvbnN0IGI9e3N0bXQ6RUosaWQ6YmplKCksdHlwZToiZGl2aWRlciIsZG9jOlNKKHApfTtkLnB1c2goU0ooYikpLHMuZG9jPWR9cy5kb2MuZm9yRWFjaChiPT5fSihzLGIsITApKX19LHVzbj0oKT0+KF9KKHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOlRKfSwhMCkse2lkOiJyb290Iixkb2M6VEp9KSxsc249aT0+e2xldCBzO2kuZG9jP3M9aS5kb2M6cz1pLFhlLmluZm8ocyksdktlKCEwKSxYZS5pbmZvKCJFeHRyYWN0IixzKSxzLmZvckVhY2godT0+e3N3aXRjaCh1LnN0bXQpe2Nhc2UgRUo6clModS5pZC50cmltKCksdS50eXBlLHUuZG9jLHUuZGVzY3JpcHRpb24sdS5ub3RlLHUuY2xhc3Nlcyx1LnN0eWxlcyx1LnRleHRTdHlsZXMpO2JyZWFrO2Nhc2UgUHZlOndLZSh1LnN0YXRlMSx1LnN0YXRlMix1LmRlc2NyaXB0aW9uKTticmVhaztjYXNlIHRzbjp5S2UodS5pZC50cmltKCksdS5jbGFzc2VzKTticmVhaztjYXNlIG5zbjokdmUodS5pZC50cmltKCksdS5zdHlsZUNsYXNzKTticmVha319KX0sclM9ZnVuY3Rpb24oaSxzPVhSLHU9bnVsbCxkPW51bGwscD1udWxsLHY9bnVsbCxiPW51bGwseT1udWxsKXtjb25zdCBUPWk9PW51bGw/dm9pZCAwOmkudHJpbSgpO2pnLnN0YXRlc1tUXT09PXZvaWQgMD8oWGUuaW5mbygiQWRkaW5nIHN0YXRlICIsVCxkKSxqZy5zdGF0ZXNbVF09e2lkOlQsZGVzY3JpcHRpb25zOltdLHR5cGU6cyxkb2M6dSxub3RlOnAsY2xhc3NlczpbXSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pOihqZy5zdGF0ZXNbVF0uZG9jfHwoamcuc3RhdGVzW1RdLmRvYz11KSxqZy5zdGF0ZXNbVF0udHlwZXx8KGpnLnN0YXRlc1tUXS50eXBlPXMpKSxkJiYoWGUuaW5mbygiU2V0dGluZyBzdGF0ZSBkZXNjcmlwdGlvbiIsVCxkKSx0eXBlb2YgZD09InN0cmluZyImJmp2ZShULGQudHJpbSgpKSx0eXBlb2YgZD09Im9iamVjdCImJmQuZm9yRWFjaChfPT5qdmUoVCxfLnRyaW0oKSkpKSxwJiYoamcuc3RhdGVzW1RdLm5vdGU9cCxqZy5zdGF0ZXNbVF0ubm90ZS50ZXh0PWNpLnNhbml0aXplVGV4dChqZy5zdGF0ZXNbVF0ubm90ZS50ZXh0LHF0KCkpKSx2JiYoWGUuaW5mbygiU2V0dGluZyBzdGF0ZSBjbGFzc2VzIixULHYpLCh0eXBlb2Ygdj09InN0cmluZyI/W3ZdOnYpLmZvckVhY2goQT0+JHZlKFQsQS50cmltKCkpKSksYiYmKFhlLmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixULGIpLCh0eXBlb2YgYj09InN0cmluZyI/W2JdOmIpLmZvckVhY2goQT0+eXNuKFQsQS50cmltKCkpKSkseSYmKFhlLmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixULGIpLCh0eXBlb2YgeT09InN0cmluZyI/W3ldOnkpLmZvckVhY2goQT0+eHNuKFQsQS50cmltKCkpKSl9LHZLZT1mdW5jdGlvbihpKXtDSj17cm9vdDpiS2UoKX0samc9Q0oucm9vdCxKUj0wLFFSPWdLZSgpLGl8fFBnKCl9LFpSPWZ1bmN0aW9uKGkpe3JldHVybiBqZy5zdGF0ZXNbaV19LGhzbj1mdW5jdGlvbigpe3JldHVybiBqZy5zdGF0ZXN9LGZzbj1mdW5jdGlvbigpe1hlLmluZm8oIkRvY3VtZW50cyA9ICIsQ0opfSxkc249ZnVuY3Rpb24oKXtyZXR1cm4gamcucmVsYXRpb25zfTtmdW5jdGlvbiBGdmUoaT0iIil7bGV0IHM9aTtyZXR1cm4gaT09PUJ2ZSYmKEpSKysscz1gJHt1S2V9JHtKUn1gKSxzfWZ1bmN0aW9uIFJ2ZShpPSIiLHM9WFIpe3JldHVybiBpPT09QnZlP3VLZTpzfWZ1bmN0aW9uIGdzbihpPSIiKXtsZXQgcz1pO3JldHVybiBpPT09bEtlJiYoSlIrKyxzPWAke2hLZX0ke0pSfWApLHN9ZnVuY3Rpb24gcHNuKGk9IiIscz1YUil7cmV0dXJuIGk9PT1sS2U/aEtlOnN9ZnVuY3Rpb24gYnNuKGkscyx1KXtsZXQgZD1GdmUoaS5pZC50cmltKCkpLHA9UnZlKGkuaWQudHJpbSgpLGkudHlwZSksdj1GdmUocy5pZC50cmltKCkpLGI9UnZlKHMuaWQudHJpbSgpLHMudHlwZSk7clMoZCxwLGkuZG9jLGkuZGVzY3JpcHRpb24saS5ub3RlLGkuY2xhc3NlcyxpLnN0eWxlcyxpLnRleHRTdHlsZXMpLHJTKHYsYixzLmRvYyxzLmRlc2NyaXB0aW9uLHMubm90ZSxzLmNsYXNzZXMscy5zdHlsZXMscy50ZXh0U3R5bGVzKSxqZy5yZWxhdGlvbnMucHVzaCh7aWQxOmQsaWQyOnYscmVsYXRpb25UaXRsZTpjaS5zYW5pdGl6ZVRleHQodSxxdCgpKX0pfWNvbnN0IHdLZT1mdW5jdGlvbihpLHMsdSl7aWYodHlwZW9mIGk9PSJvYmplY3QiKWJzbihpLHMsdSk7ZWxzZXtjb25zdCBkPUZ2ZShpLnRyaW0oKSkscD1SdmUoaSksdj1nc24ocy50cmltKCkpLGI9cHNuKHMpO3JTKGQscCksclModixiKSxqZy5yZWxhdGlvbnMucHVzaCh7aWQxOmQsaWQyOnYsdGl0bGU6Y2kuc2FuaXRpemVUZXh0KHUscXQoKSl9KX19LGp2ZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9amcuc3RhdGVzW2ldLGQ9cy5zdGFydHNXaXRoKCI6Iik/cy5yZXBsYWNlKCI6IiwiIikudHJpbSgpOnM7dS5kZXNjcmlwdGlvbnMucHVzaChjaS5zYW5pdGl6ZVRleHQoZCxxdCgpKSl9LG1zbj1mdW5jdGlvbihpKXtyZXR1cm4gaS5zdWJzdHJpbmcoMCwxKT09PSI6Ij9pLnN1YnN0cigyKS50cmltKCk6aS50cmltKCl9LHZzbj0oKT0+KG1LZSsrLCJkaXZpZGVyLWlkLSIrbUtlKSx5S2U9ZnVuY3Rpb24oaSxzPSIiKXtRUltpXT09PXZvaWQgMCYmKFFSW2ldPXtpZDppLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSk7Y29uc3QgdT1RUltpXTtzIT1udWxsJiZzLnNwbGl0KGlzbikuZm9yRWFjaChkPT57Y29uc3QgcD1kLnJlcGxhY2UoLyhbXjtdKik7LywiJDEiKS50cmltKCk7aWYoZC5tYXRjaChmS2UpKXtjb25zdCBiPXAucmVwbGFjZShkS2UscnNuKS5yZXBsYWNlKGZLZSxkS2UpO3UudGV4dFN0eWxlcy5wdXNoKGIpfXUuc3R5bGVzLnB1c2gocCl9KX0sd3NuPWZ1bmN0aW9uKCl7cmV0dXJuIFFSfSwkdmU9ZnVuY3Rpb24oaSxzKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbih1KXtsZXQgZD1aUih1KTtpZihkPT09dm9pZCAwKXtjb25zdCBwPXUudHJpbSgpO3JTKHApLGQ9WlIocCl9ZC5jbGFzc2VzLnB1c2gocyl9KX0seXNuPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1aUihpKTt1IT09dm9pZCAwJiZ1LnRleHRTdHlsZXMucHVzaChzKX0seHNuPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1aUihpKTt1IT09dm9pZCAwJiZ1LnRleHRTdHlsZXMucHVzaChzKX0sRzc9e2dldENvbmZpZzooKT0+cXQoKS5zdGF0ZSxhZGRTdGF0ZTpyUyxjbGVhcjp2S2UsZ2V0U3RhdGU6WlIsZ2V0U3RhdGVzOmhzbixnZXRSZWxhdGlvbnM6ZHNuLGdldENsYXNzZXM6d3NuLGdldERpcmVjdGlvbjooKT0+cEtlLGFkZFJlbGF0aW9uOndLZSxnZXREaXZpZGVySWQ6dnNuLHNldERpcmVjdGlvbjppPT57cEtlPWl9LGNsZWFudXBMYWJlbDptc24sbGluZVR5cGU6c3NuLHJlbGF0aW9uVHlwZTphc24sbG9nRG9jdW1lbnRzOmZzbixnZXRSb290RG9jOmNzbixzZXRSb290RG9jOm9zbixnZXRSb290RG9jVjI6dXNuLGV4dHJhY3Q6bHNuLHRyaW1Db2xvbjppPT5pJiZpWzBdPT09IjoiP2kuc3Vic3RyKDEpLnRyaW0oKTppLnRyaW0oKSxnZXRBY2NUaXRsZTpDcCxzZXRBY2NUaXRsZTpCZyxnZXRBY2NEZXNjcmlwdGlvbjpfcCxzZXRBY2NEZXNjcmlwdGlvbjpTcCxhZGRTdHlsZUNsYXNzOnlLZSxzZXRDc3NDbGFzczokdmUsYWRkRGVzY3JpcHRpb246anZlLHNldERpYWdyYW1UaXRsZTpjbSxnZXREaWFncmFtVGl0bGU6QXB9LHhLZT1pPT5gCmRlZnMgI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHsKICAgIGZpbGw6ICR7aS50cmFuc2l0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke2kudHJhbnNpdGlvbkNvbG9yfTsKICB9Cmcuc3RhdGVHcm91cCB0ZXh0IHsKICBmaWxsOiAke2kubm9kZUJvcmRlcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKfQpnLnN0YXRlR3JvdXAgdGV4dCB7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKCn0KZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICBmaWxsOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKfQoKZy5zdGF0ZUdyb3VwIHJlY3QgewogIGZpbGw6ICR7aS5tYWluQmtnfTsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKfQoKZy5zdGF0ZUdyb3VwIGxpbmUgewogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgoudHJhbnNpdGlvbiB7CiAgc3Ryb2tlOiAke2kudHJhbnNpdGlvbkNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7CiAgZmlsbDogbm9uZTsKfQoKLnN0YXRlR3JvdXAgLmNvbXBvc2l0IHsKICBmaWxsOiAke2kuYmFja2dyb3VuZH07CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZUdyb3VwIC5hbHQtY29tcG9zaXQgewogIGZpbGw6ICNlMGUwZTA7CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZS1ub3RlIHsKICBzdHJva2U6ICR7aS5ub3RlQm9yZGVyQ29sb3J9OwogIGZpbGw6ICR7aS5ub3RlQmtnQ29sb3J9OwoKICB0ZXh0IHsKICAgIGZpbGw6ICR7aS5ub3RlVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICB9Cn0KCi5zdGF0ZUxhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7CiAgZmlsbDogJHtpLmxhYmVsQmFja2dyb3VuZENvbG9yfTsKICBvcGFjaXR5OiAwLjU7Cn0KLmVkZ2VMYWJlbCAubGFiZWwgdGV4dCB7CiAgZmlsbDogJHtpLnRyYW5zaXRpb25MYWJlbENvbG9yfHxpLnRlcnRpYXJ5VGV4dENvbG9yfTsKfQoubGFiZWwgZGl2IC5lZGdlTGFiZWwgewogIGNvbG9yOiAke2kudHJhbnNpdGlvbkxhYmVsQ29sb3J8fGkudGVydGlhcnlUZXh0Q29sb3J9Owp9Cgouc3RhdGVMYWJlbCB0ZXh0IHsKICBmaWxsOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKICBmb250LXNpemU6IDEwcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7CiAgZmlsbDogJHtpLnNwZWNpYWxTdGF0ZUNvbG9yfTsKICBzdHJva2U6ICR7aS5zcGVjaWFsU3RhdGVDb2xvcn07Cn0KCi5ub2RlIC5mb3JrLWpvaW4gewogIGZpbGw6ICR7aS5zcGVjaWFsU3RhdGVDb2xvcn07CiAgc3Ryb2tlOiAke2kuc3BlY2lhbFN0YXRlQ29sb3J9Owp9Cgoubm9kZSBjaXJjbGUuc3RhdGUtZW5kIHsKICBmaWxsOiAke2kuaW5uZXJFbmRCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7aS5iYWNrZ3JvdW5kfTsKICBzdHJva2Utd2lkdGg6IDEuNQp9Ci5lbmQtc3RhdGUtaW5uZXIgewogIGZpbGw6ICR7aS5jb21wb3NpdGVCYWNrZ3JvdW5kfHxpLmJhY2tncm91bmR9OwogIC8vIHN0cm9rZTogJHtpLmJhY2tncm91bmR9OwogIHN0cm9rZS13aWR0aDogMS41Cn0KCi5ub2RlIHJlY3QgewogIGZpbGw6ICR7aS5zdGF0ZUJrZ3x8aS5tYWluQmtnfTsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoubm9kZSBwb2x5Z29uIHsKICBmaWxsOiAke2kubWFpbkJrZ307CiAgc3Ryb2tlOiAke2kuc3RhdGVCb3JkZXJ8fGkubm9kZUJvcmRlcn07OwogIHN0cm9rZS13aWR0aDogMXB4Owp9CiNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0IHsKICBmaWxsOiAke2kuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLmNsdXN0ZXItbGFiZWwsIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLXN0YXRlIC5kaXZpZGVyIHsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSAudGl0bGUtc3RhdGUgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHsKICBmaWxsOiAke2kuY29tcG9zaXRlQmFja2dyb3VuZHx8aS5iYWNrZ3JvdW5kfTsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IC5pbm5lciB7CiAgZmlsbDogJHtpLmFsdEJhY2tncm91bmQ/aS5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIgewogIHJ4OjA7CiAgcnk6MDsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmJhc2ljIHsKICByeDogNXB4OwogIHJ5OiA1cHg7Cn0KLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmRpdmlkZXIgewogIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwOwogIGZpbGw6ICR7aS5hbHRCYWNrZ3JvdW5kP2kuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiJ9Owp9Cgoubm90ZS1lZGdlIHsKICBzdHJva2UtZGFzaGFycmF5OiA1Owp9Cgouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHtpLm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHtpLm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIHRleHQgewogIGZpbGw6ICR7aS5ub3RlVGV4dENvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke2kubm90ZVRleHRDb2xvcn07Cn0KLnN0YXRlZGlhZ3JhbSAuZWRnZUxhYmVsIHsKICBjb2xvcjogcmVkOyAvLyAke2kubm90ZVRleHRDb2xvcn07Cn0KCiNkZXBlbmRlbmN5U3RhcnQsICNkZXBlbmRlbmN5RW5kIHsKICBmaWxsOiAke2kubGluZUNvbG9yfTsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLnN0YXRlZGlhZ3JhbVRpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07Cn0KYCx6dmU9e30sa3NuPShpLHMpPT57enZlW2ldPXN9LEVzbj1pPT56dmVbaV0sa0tlPSgpPT5PYmplY3Qua2V5cyh6dmUpLFRzbj17Z2V0OkVzbixzZXQ6a3NuLGtleXM6a0tlLHNpemU6KCk9PmtLZSgpLmxlbmd0aH0sQ3NuPWk9PmkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsInN0YXJ0LXN0YXRlIikuYXR0cigiciIscXQoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLHF0KCkuc3RhdGUucGFkZGluZytxdCgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeSIscXQoKS5zdGF0ZS5wYWRkaW5nK3F0KCkuc3RhdGUuc2l6ZVVuaXQpLFNzbj1pPT5pLmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzIikuYXR0cigieDEiLHF0KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDIiLHF0KCkuc3RhdGUudGV4dEhlaWdodCoyKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDApLF9zbj0oaSxzKT0+e2NvbnN0IHU9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKnF0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscXQoKS5zdGF0ZS50ZXh0SGVpZ2h0KzIqcXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLHF0KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KHMuaWQpLGQ9dS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHF0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsZC53aWR0aCsyKnF0KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixkLmhlaWdodCsyKnF0KCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLHF0KCkuc3RhdGUucmFkaXVzKSx1fSxBc249KGkscyk9Pntjb25zdCB1PWZ1bmN0aW9uKFIsRixqKXtjb25zdCBLPVIuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDIqcXQoKS5zdGF0ZS5wYWRkaW5nKS50ZXh0KEYpO2p8fEsuYXR0cigiZHkiLHF0KCkuc3RhdGUudGV4dEhlaWdodCl9LHA9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKnF0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscXQoKS5zdGF0ZS50ZXh0SGVpZ2h0KzEuMypxdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIscXQoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQocy5kZXNjcmlwdGlvbnNbMF0pLm5vZGUoKS5nZXRCQm94KCksdj1wLmhlaWdodCxiPWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5Iix2K3F0KCkuc3RhdGUucGFkZGluZyouNCtxdCgpLnN0YXRlLmRpdmlkZXJNYXJnaW4rcXQoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsInN0YXRlLWRlc2NyaXB0aW9uIik7bGV0IHk9ITAsVD0hMDtzLmRlc2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKFIpe3l8fCh1KGIsUixUKSxUPSExKSx5PSExfSk7Y29uc3QgXz1pLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixxdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkxIixxdCgpLnN0YXRlLnBhZGRpbmcrditxdCgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLHF0KCkuc3RhdGUucGFkZGluZyt2K3F0KCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJjbGFzcyIsImRlc2NyLWRpdmlkZXIiKSxBPWIubm9kZSgpLmdldEJCb3goKSxQPU1hdGgubWF4KEEud2lkdGgscC53aWR0aCk7cmV0dXJuIF8uYXR0cigieDIiLFArMypxdCgpLnN0YXRlLnBhZGRpbmcpLGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixxdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixQKzIqcXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLEEuaGVpZ2h0K3YrMipxdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4IixxdCgpLnN0YXRlLnJhZGl1cyksaX0sTHNuPShpLHMsdSk9Pntjb25zdCBkPXF0KCkuc3RhdGUucGFkZGluZyxwPTIqcXQoKS5zdGF0ZS5wYWRkaW5nLHY9aS5ub2RlKCkuZ2V0QkJveCgpLGI9di53aWR0aCx5PXYueCxUPWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIscXQoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKCJmb250LXNpemUiLHF0KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KHMuaWQpLEE9VC5ub2RlKCkuZ2V0QkJveCgpLndpZHRoK3A7bGV0IFA9TWF0aC5tYXgoQSxiKTtQPT09YiYmKFA9UCtwKTtsZXQgUjtjb25zdCBGPWkubm9kZSgpLmdldEJCb3goKTtzLmRvYyxSPXktZCxBPmImJihSPShiLVApLzIrZCksTWF0aC5hYnMoeS1GLngpPGQmJkE+YiYmKFI9eS0oQS1iKS8yKTtjb25zdCBqPTEtcXQoKS5zdGF0ZS50ZXh0SGVpZ2h0O3JldHVybiBpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLFIpLmF0dHIoInkiLGopLmF0dHIoImNsYXNzIix1PyJhbHQtY29tcG9zaXQiOiJjb21wb3NpdCIpLmF0dHIoIndpZHRoIixQKS5hdHRyKCJoZWlnaHQiLEYuaGVpZ2h0K3F0KCkuc3RhdGUudGV4dEhlaWdodCtxdCgpLnN0YXRlLnRpdGxlU2hpZnQrMSkuYXR0cigicngiLCIwIiksVC5hdHRyKCJ4IixSK2QpLEE8PWImJlQuYXR0cigieCIseSsoUC1wKS8yLUEvMitkKSxpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLFIpLmF0dHIoInkiLHF0KCkuc3RhdGUudGl0bGVTaGlmdC1xdCgpLnN0YXRlLnRleHRIZWlnaHQtcXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsUCkuYXR0cigiaGVpZ2h0IixxdCgpLnN0YXRlLnRleHRIZWlnaHQqMykuYXR0cigicngiLHF0KCkuc3RhdGUucmFkaXVzKSxpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLFIpLmF0dHIoInkiLHF0KCkuc3RhdGUudGl0bGVTaGlmdC1xdCgpLnN0YXRlLnRleHRIZWlnaHQtcXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsUCkuYXR0cigiaGVpZ2h0IixGLmhlaWdodCszKzIqcXQoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIscXQoKS5zdGF0ZS5yYWRpdXMpLGl9LE1zbj1pPT4oaS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLW91dGVyIikuYXR0cigiciIscXQoKS5zdGF0ZS5zaXplVW5pdCtxdCgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeCIscXQoKS5zdGF0ZS5wYWRkaW5nK3F0KCkuc3RhdGUuc2l6ZVVuaXQrcXQoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3kiLHF0KCkuc3RhdGUucGFkZGluZytxdCgpLnN0YXRlLnNpemVVbml0K3F0KCkuc3RhdGUubWluaVBhZGRpbmcpLGkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1pbm5lciIpLmF0dHIoInIiLHF0KCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixxdCgpLnN0YXRlLnBhZGRpbmcrcXQoKS5zdGF0ZS5zaXplVW5pdCsyKS5hdHRyKCJjeSIscXQoKS5zdGF0ZS5wYWRkaW5nK3F0KCkuc3RhdGUuc2l6ZVVuaXQrMikpLERzbj0oaSxzKT0+e2xldCB1PXF0KCkuc3RhdGUuZm9ya1dpZHRoLGQ9cXQoKS5zdGF0ZS5mb3JrSGVpZ2h0O2lmKHMucGFyZW50SWQpe2xldCBwPXU7dT1kLGQ9cH1yZXR1cm4gaS5hcHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiYmxhY2siKS5zdHlsZSgiZmlsbCIsImJsYWNrIikuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsZCkuYXR0cigieCIscXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixxdCgpLnN0YXRlLnBhZGRpbmcpfSxJc249KGkscyx1LGQpPT57bGV0IHA9MDtjb25zdCB2PWQuYXBwZW5kKCJ0ZXh0Iik7di5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLHYuYXR0cigiY2xhc3MiLCJub3RlVGV4dCIpO2xldCBiPWkucmVwbGFjZSgvXHJcbi9nLCI8YnIvPiIpO2I9Yi5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpO2NvbnN0IHk9Yi5zcGxpdChjaS5saW5lQnJlYWtSZWdleCk7bGV0IFQ9MS4yNSpxdCgpLnN0YXRlLm5vdGVNYXJnaW47Zm9yKGNvbnN0IF8gb2YgeSl7Y29uc3QgQT1fLnRyaW0oKTtpZihBLmxlbmd0aD4wKXtjb25zdCBQPXYuYXBwZW5kKCJ0c3BhbiIpO2lmKFAudGV4dChBKSxUPT09MCl7Y29uc3QgUj1QLm5vZGUoKS5nZXRCQm94KCk7VCs9Ui5oZWlnaHR9cCs9VCxQLmF0dHIoIngiLHMrcXQoKS5zdGF0ZS5ub3RlTWFyZ2luKSxQLmF0dHIoInkiLHUrcCsxLjI1KnF0KCkuc3RhdGUubm90ZU1hcmdpbil9fXJldHVybnt0ZXh0V2lkdGg6di5ub2RlKCkuZ2V0QkJveCgpLndpZHRoLHRleHRIZWlnaHQ6cH19LE9zbj0oaSxzKT0+e3MuYXR0cigiY2xhc3MiLCJzdGF0ZS1ub3RlIik7Y29uc3QgdT1zLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLHF0KCkuc3RhdGUucGFkZGluZyksZD1zLmFwcGVuZCgiZyIpLHt0ZXh0V2lkdGg6cCx0ZXh0SGVpZ2h0OnZ9PUlzbihpLDAsMCxkKTtyZXR1cm4gdS5hdHRyKCJoZWlnaHQiLHYrMipxdCgpLnN0YXRlLm5vdGVNYXJnaW4pLHUuYXR0cigid2lkdGgiLHArcXQoKS5zdGF0ZS5ub3RlTWFyZ2luKjIpLHV9LEVLZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9cy5pZCxkPXtpZDp1LGxhYmVsOnMuaWQsd2lkdGg6MCxoZWlnaHQ6MH0scD1pLmFwcGVuZCgiZyIpLmF0dHIoImlkIix1KS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtzLnR5cGU9PT0ic3RhcnQiJiZDc24ocCkscy50eXBlPT09ImVuZCImJk1zbihwKSwocy50eXBlPT09ImZvcmsifHxzLnR5cGU9PT0iam9pbiIpJiZEc24ocCxzKSxzLnR5cGU9PT0ibm90ZSImJk9zbihzLm5vdGUudGV4dCxwKSxzLnR5cGU9PT0iZGl2aWRlciImJlNzbihwKSxzLnR5cGU9PT0iZGVmYXVsdCImJnMuZGVzY3JpcHRpb25zLmxlbmd0aD09PTAmJl9zbihwLHMpLHMudHlwZT09PSJkZWZhdWx0IiYmcy5kZXNjcmlwdGlvbnMubGVuZ3RoPjAmJkFzbihwLHMpO2NvbnN0IHY9cC5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBkLndpZHRoPXYud2lkdGgrMipxdCgpLnN0YXRlLnBhZGRpbmcsZC5oZWlnaHQ9di5oZWlnaHQrMipxdCgpLnN0YXRlLnBhZGRpbmcsVHNuLnNldCh1LGQpLGR9O2xldCBUS2U9MDtjb25zdCBOc249ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9ZnVuY3Rpb24oVCl7c3dpdGNoKFQpe2Nhc2UgRzcucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBHNy5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2UgRzcucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBHNy5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fTtzLnBvaW50cz1zLnBvaW50cy5maWx0ZXIoVD0+IU51bWJlci5pc05hTihULnkpKTtjb25zdCBwPXMucG9pbnRzLHY9azcoKS54KGZ1bmN0aW9uKFQpe3JldHVybiBULnh9KS55KGZ1bmN0aW9uKFQpe3JldHVybiBULnl9KS5jdXJ2ZShGRiksYj1pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHYocCkpLmF0dHIoImlkIiwiZWRnZSIrVEtlKS5hdHRyKCJjbGFzcyIsInRyYW5zaXRpb24iKTtsZXQgeT0iIjtpZihxdCgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUmJih5PXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLHk9eS5yZXBsYWNlKC9cKC9nLCJcXCgiKSx5PXkucmVwbGFjZSgvXCkvZywiXFwpIikpLGIuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3krIiMiK2QoRzcucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpKyJFbmQpIiksdS50aXRsZSE9PXZvaWQgMCl7Y29uc3QgVD1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwic3RhdGVMYWJlbCIpLHt4Ol8seTpBfT1Bby5jYWxjTGFiZWxQb3NpdGlvbihzLnBvaW50cyksUD1jaS5nZXRSb3dzKHUudGl0bGUpO2xldCBSPTA7Y29uc3QgRj1bXTtsZXQgaj0wLEs9MDtmb3IobGV0IG9lPTA7b2U8PVAubGVuZ3RoO29lKyspe2NvbnN0IHBlPVQuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KFBbb2VdKS5hdHRyKCJ4IixfKS5hdHRyKCJ5IixBK1IpLGJlPXBlLm5vZGUoKS5nZXRCQm94KCk7aj1NYXRoLm1heChqLGJlLndpZHRoKSxLPU1hdGgubWluKEssYmUueCksWGUuaW5mbyhiZS54LF8sQStSKSxSPT09MCYmKFI9cGUubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsWGUuaW5mbygiVGl0bGUgaGVpZ2h0IixSLEEpKSxGLnB1c2gocGUpfWxldCBlZT1SKlAubGVuZ3RoO2lmKFAubGVuZ3RoPjEpe2NvbnN0IG9lPShQLmxlbmd0aC0xKSpSKi41O0YuZm9yRWFjaCgocGUsYmUpPT5wZS5hdHRyKCJ5IixBK2JlKlItb2UpKSxlZT1SKlAubGVuZ3RofWNvbnN0IGllPVQubm9kZSgpLmdldEJCb3goKTtULmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsXy1qLzItcXQoKS5zdGF0ZS5wYWRkaW5nLzIpLmF0dHIoInkiLEEtZWUvMi1xdCgpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIixqK3F0KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixlZStxdCgpLnN0YXRlLnBhZGRpbmcpLFhlLmluZm8oaWUpfVRLZSsrfTtsZXQgZ207Y29uc3QgcXZlPXt9LFBzbj1mdW5jdGlvbigpe30sQnNuPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sRnNuPWZ1bmN0aW9uKGkscyx1LGQpe2dtPXF0KCkuc3RhdGU7Y29uc3QgcD1xdCgpLnNlY3VyaXR5TGV2ZWw7bGV0IHY7cD09PSJzYW5kYm94IiYmKHY9SXIoIiNpIitzKSk7Y29uc3QgYj1JcihwPT09InNhbmRib3giP3Yubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLHk9cD09PSJzYW5kYm94Ij92Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O1hlLmRlYnVnKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK2kpO2NvbnN0IFQ9Yi5zZWxlY3QoYFtpZD0nJHtzfSddYCk7QnNuKFQpO2NvbnN0IF89ZC5kYi5nZXRSb290RG9jKCk7Q0tlKF8sVCx2b2lkIDAsITEsYix5LGQpO2NvbnN0IEE9Z20ucGFkZGluZyxQPVQubm9kZSgpLmdldEJCb3goKSxSPVAud2lkdGgrQSoyLEY9UC5oZWlnaHQrQSoyLGo9UioxLjc1O05nKFQsRixqLGdtLnVzZU1heFdpZHRoKSxULmF0dHIoInZpZXdCb3giLGAke1AueC1nbS5wYWRkaW5nfSAgJHtQLnktZ20ucGFkZGluZ30gYCtSKyIgIitGKX0sUnNuPWk9Pmk/aS5sZW5ndGgqZ20uZm9udFNpemVGYWN0b3I6MSxDS2U9KGkscyx1LGQscCx2LGIpPT57Y29uc3QgeT1uZXcgQjAoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KTtsZXQgVCxfPSEwO2ZvcihUPTA7VDxpLmxlbmd0aDtUKyspaWYoaVtUXS5zdG10PT09InJlbGF0aW9uIil7Xz0hMTticmVha311P3kuc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpfPzE6Z20uZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOl8/MTo1MCxpc011bHRpR3JhcGg6ITB9KTp5LnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOl8/MTpnbS5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6Xz8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSkseS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxiLmRiLmV4dHJhY3QoaSk7Y29uc3QgQT1iLmRiLmdldFN0YXRlcygpLFA9Yi5kYi5nZXRSZWxhdGlvbnMoKSxSPU9iamVjdC5rZXlzKEEpO2Zvcihjb25zdCBpZSBvZiBSKXtjb25zdCBvZT1BW2llXTt1JiYob2UucGFyZW50SWQ9dSk7bGV0IHBlO2lmKG9lLmRvYyl7bGV0IGJlPXMuYXBwZW5kKCJnIikuYXR0cigiaWQiLG9lLmlkKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtwZT1DS2Uob2UuZG9jLGJlLG9lLmlkLCFkLHAsdixiKTt7YmU9THNuKGJlLG9lLGQpO2xldCBhZT1iZS5ub2RlKCkuZ2V0QkJveCgpO3BlLndpZHRoPWFlLndpZHRoLHBlLmhlaWdodD1hZS5oZWlnaHQrZ20ucGFkZGluZy8yLHF2ZVtvZS5pZF09e3k6Z20uY29tcG9zaXRUaXRsZVNpemV9fX1lbHNlIHBlPUVLZShzLG9lKTtpZihvZS5ub3RlKXtjb25zdCBiZT17ZGVzY3JpcHRpb25zOltdLGlkOm9lLmlkKyItbm90ZSIsbm90ZTpvZS5ub3RlLHR5cGU6Im5vdGUifSxhZT1FS2UocyxiZSk7b2Uubm90ZS5wb3NpdGlvbj09PSJsZWZ0IG9mIj8oeS5zZXROb2RlKHBlLmlkKyItbm90ZSIsYWUpLHkuc2V0Tm9kZShwZS5pZCxwZSkpOih5LnNldE5vZGUocGUuaWQscGUpLHkuc2V0Tm9kZShwZS5pZCsiLW5vdGUiLGFlKSkseS5zZXRQYXJlbnQocGUuaWQscGUuaWQrIi1ncm91cCIpLHkuc2V0UGFyZW50KHBlLmlkKyItbm90ZSIscGUuaWQrIi1ncm91cCIpfWVsc2UgeS5zZXROb2RlKHBlLmlkLHBlKX1YZS5kZWJ1ZygiQ291bnQ9Iix5Lm5vZGVDb3VudCgpLHkpO2xldCBGPTA7UC5mb3JFYWNoKGZ1bmN0aW9uKGllKXtGKyssWGUuZGVidWcoIlNldHRpbmcgZWRnZSIsaWUpLHkuc2V0RWRnZShpZS5pZDEsaWUuaWQyLHtyZWxhdGlvbjppZSx3aWR0aDpSc24oaWUudGl0bGUpLGhlaWdodDpnbS5sYWJlbEhlaWdodCpjaS5nZXRSb3dzKGllLnRpdGxlKS5sZW5ndGgsbGFiZWxwb3M6ImMifSwiaWQiK0YpfSkscUQoeSksWGUuZGVidWcoIkdyYXBoIGFmdGVyIGxheW91dCIseS5ub2RlcygpKTtjb25zdCBqPXMubm9kZSgpO3kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGllKXtpZSE9PXZvaWQgMCYmeS5ub2RlKGllKSE9PXZvaWQgMD8oWGUud2FybigiTm9kZSAiK2llKyI6ICIrSlNPTi5zdHJpbmdpZnkoeS5ub2RlKGllKSkpLHAuc2VsZWN0KCIjIitqLmlkKyIgIyIraWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh5Lm5vZGUoaWUpLngteS5ub2RlKGllKS53aWR0aC8yKSsiLCIrKHkubm9kZShpZSkueSsocXZlW2llXT9xdmVbaWVdLnk6MCkteS5ub2RlKGllKS5oZWlnaHQvMikrIiApIikscC5zZWxlY3QoIiMiK2ouaWQrIiAjIitpZSkuYXR0cigiZGF0YS14LXNoaWZ0Iix5Lm5vZGUoaWUpLngteS5ub2RlKGllKS53aWR0aC8yKSx2LnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2ouaWQrIiAjIitpZSsiIC5kaXZpZGVyIikuZm9yRWFjaChwZT0+e2NvbnN0IGJlPXBlLnBhcmVudEVsZW1lbnQ7bGV0IGFlPTAsbmU9MDtiZSYmKGJlLnBhcmVudEVsZW1lbnQmJihhZT1iZS5wYXJlbnRFbGVtZW50LmdldEJCb3goKS53aWR0aCksbmU9cGFyc2VJbnQoYmUuZ2V0QXR0cmlidXRlKCJkYXRhLXgtc2hpZnQiKSwxMCksTnVtYmVyLmlzTmFOKG5lKSYmKG5lPTApKSxwZS5zZXRBdHRyaWJ1dGUoIngxIiwwLW5lKzgpLHBlLnNldEF0dHJpYnV0ZSgieDIiLGFlLW5lLTgpfSkpOlhlLmRlYnVnKCJObyBOb2RlICIraWUrIjogIitKU09OLnN0cmluZ2lmeSh5Lm5vZGUoaWUpKSl9KTtsZXQgSz1qLmdldEJCb3goKTt5LmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihpZSl7aWUhPT12b2lkIDAmJnkuZWRnZShpZSkhPT12b2lkIDAmJihYZS5kZWJ1ZygiRWRnZSAiK2llLnYrIiAtPiAiK2llLncrIjogIitKU09OLnN0cmluZ2lmeSh5LmVkZ2UoaWUpKSksTnNuKHMseS5lZGdlKGllKSx5LmVkZ2UoaWUpLnJlbGF0aW9uKSl9KSxLPWouZ2V0QkJveCgpO2NvbnN0IGVlPXtpZDp1fHwicm9vdCIsbGFiZWw6dXx8InJvb3QiLHdpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBlZS53aWR0aD1LLndpZHRoKzIqZ20ucGFkZGluZyxlZS5oZWlnaHQ9Sy5oZWlnaHQrMipnbS5wYWRkaW5nLFhlLmRlYnVnKCJEb2MgcmVuZGVyZWQiLGVlLHkpLGVlfSxqc249T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpvS2UsZGI6RzcscmVuZGVyZXI6e3NldENvbmY6UHNuLGRyYXc6RnNufSxzdHlsZXM6eEtlLGluaXQ6aT0+e2kuc3RhdGV8fChpLnN0YXRlPXt9KSxpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLEc3LmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxBSj0icmVjdCIsSHZlPSJyZWN0V2l0aFRpdGxlIiwkc249InN0YXJ0Iix6c249ImVuZCIscXNuPSJkaXZpZGVyIixIc249InJvdW5kZWRXaXRoVGl0bGUiLFZzbj0ibm90ZSIsVXNuPSJub3RlR3JvdXAiLFFEPSJzdGF0ZWRpYWdyYW0iLEdzbj1gJHtRRH0tc3RhdGVgLFNLZT0idHJhbnNpdGlvbiIsS3NuPSJub3RlIixXc249YCR7U0tlfSBub3RlLWVkZ2VgLFlzbj1gJHtRRH0tJHtLc259YCxYc249YCR7UUR9LWNsdXN0ZXJgLFFzbj1gJHtRRH0tY2x1c3Rlci1hbHRgLF9LZT0icGFyZW50IixBS2U9Im5vdGUiLEpzbj0ic3RhdGUiLFZ2ZT0iLS0tLSIsWnNuPWAke1Z2ZX0ke0FLZX1gLExLZT1gJHtWdmV9JHtfS2V9YCxNS2U9ImZpbGw6bm9uZSIsREtlPSJmaWxsOiAjMzMzIixJS2U9ImMiLE9LZT0idGV4dCIsTktlPSJub3JtYWwiO2xldCBMSj17fSxqOT0wO2NvbnN0IGVhbj1mdW5jdGlvbihpKXtjb25zdCBzPU9iamVjdC5rZXlzKGkpO2Zvcihjb25zdCB1IG9mIHMpaVt1XX0sdGFuPWZ1bmN0aW9uKGkscyl7cmV0dXJuIHMuZGIuZXh0cmFjdChzLmRiLmdldFJvb3REb2NWMigpKSxzLmRiLmdldENsYXNzZXMoKX07ZnVuY3Rpb24gbmFuKGkpe3JldHVybiBpPT1udWxsPyIiOmkuY2xhc3Nlcz9pLmNsYXNzZXMuam9pbigiICIpOiIifWZ1bmN0aW9uIFV2ZShpPSIiLHM9MCx1PSIiLGQ9VnZlKXtjb25zdCBwPXUhPT1udWxsJiZ1Lmxlbmd0aD4wP2Ake2R9JHt1fWA6IiI7cmV0dXJuYCR7SnNufS0ke2l9JHtwfS0ke3N9YH1jb25zdCBlaj0oaSxzLHUsZCxwLHYpPT57Y29uc3QgYj11LmlkLHk9bmFuKGRbYl0pO2lmKGIhPT0icm9vdCIpe2xldCBUPUFKO3Uuc3RhcnQ9PT0hMCYmKFQ9JHNuKSx1LnN0YXJ0PT09ITEmJihUPXpzbiksdS50eXBlIT09WFImJihUPXUudHlwZSksTEpbYl18fChMSltiXT17aWQ6YixzaGFwZTpULGRlc2NyaXB0aW9uOmNpLnNhbml0aXplVGV4dChiLHF0KCkpLGNsYXNzZXM6YCR7eX0gJHtHc259YH0pO2NvbnN0IF89TEpbYl07dS5kZXNjcmlwdGlvbiYmKEFycmF5LmlzQXJyYXkoXy5kZXNjcmlwdGlvbik/KF8uc2hhcGU9SHZlLF8uZGVzY3JpcHRpb24ucHVzaCh1LmRlc2NyaXB0aW9uKSk6Xy5kZXNjcmlwdGlvbi5sZW5ndGg+MD8oXy5zaGFwZT1IdmUsXy5kZXNjcmlwdGlvbj09PWI/Xy5kZXNjcmlwdGlvbj1bdS5kZXNjcmlwdGlvbl06Xy5kZXNjcmlwdGlvbj1bXy5kZXNjcmlwdGlvbix1LmRlc2NyaXB0aW9uXSk6KF8uc2hhcGU9QUosXy5kZXNjcmlwdGlvbj11LmRlc2NyaXB0aW9uKSxfLmRlc2NyaXB0aW9uPWNpLnNhbml0aXplVGV4dE9yQXJyYXkoXy5kZXNjcmlwdGlvbixxdCgpKSksXy5kZXNjcmlwdGlvbi5sZW5ndGg9PT0xJiZfLnNoYXBlPT09SHZlJiYoXy5zaGFwZT1BSiksIV8udHlwZSYmdS5kb2MmJihYZS5pbmZvKCJTZXR0aW5nIGNsdXN0ZXIgZm9yICIsYixHdmUodSkpLF8udHlwZT0iZ3JvdXAiLF8uZGlyPUd2ZSh1KSxfLnNoYXBlPXUudHlwZT09PWNLZT9xc246SHNuLF8uY2xhc3Nlcz1fLmNsYXNzZXMrIiAiK1hzbisiICIrKHY/UXNuOiIiKSk7Y29uc3QgQT17bGFiZWxTdHlsZToiIixzaGFwZTpfLnNoYXBlLGxhYmVsVGV4dDpfLmRlc2NyaXB0aW9uLGNsYXNzZXM6Xy5jbGFzc2VzLHN0eWxlOiIiLGlkOmIsZGlyOl8uZGlyLGRvbUlkOlV2ZShiLGo5KSx0eXBlOl8udHlwZSxwYWRkaW5nOjE1fTtpZihBLmNlbnRlckxhYmVsPSEwLHUubm90ZSl7Y29uc3QgUD17bGFiZWxTdHlsZToiIixzaGFwZTpWc24sbGFiZWxUZXh0OnUubm90ZS50ZXh0LGNsYXNzZXM6WXNuLHN0eWxlOiIiLGlkOmIrWnNuKyItIitqOSxkb21JZDpVdmUoYixqOSxBS2UpLHR5cGU6Xy50eXBlLHBhZGRpbmc6MTV9LFI9e2xhYmVsU3R5bGU6IiIsc2hhcGU6VXNuLGxhYmVsVGV4dDp1Lm5vdGUudGV4dCxjbGFzc2VzOl8uY2xhc3NlcyxzdHlsZToiIixpZDpiK0xLZSxkb21JZDpVdmUoYixqOSxfS2UpLHR5cGU6Imdyb3VwIixwYWRkaW5nOjB9O2o5Kys7Y29uc3QgRj1iK0xLZTtpLnNldE5vZGUoRixSKSxpLnNldE5vZGUoUC5pZCxQKSxpLnNldE5vZGUoYixBKSxpLnNldFBhcmVudChiLEYpLGkuc2V0UGFyZW50KFAuaWQsRik7bGV0IGo9YixLPVAuaWQ7dS5ub3RlLnBvc2l0aW9uPT09ImxlZnQgb2YiJiYoaj1QLmlkLEs9YiksaS5zZXRFZGdlKGosSyx7YXJyb3doZWFkOiJub25lIixhcnJvd1R5cGU6IiIsc3R5bGU6TUtlLGxhYmVsU3R5bGU6IiIsY2xhc3NlczpXc24sYXJyb3doZWFkU3R5bGU6REtlLGxhYmVscG9zOklLZSxsYWJlbFR5cGU6T0tlLHRoaWNrbmVzczpOS2V9KX1lbHNlIGkuc2V0Tm9kZShiLEEpfXMmJnMuaWQhPT0icm9vdCImJihYZS50cmFjZSgiU2V0dGluZyBub2RlICIsYiwiIHRvIGJlIGNoaWxkIG9mIGl0cyBwYXJlbnQgIixzLmlkKSxpLnNldFBhcmVudChiLHMuaWQpKSx1LmRvYyYmKFhlLnRyYWNlKCJBZGRpbmcgbm9kZXMgY2hpbGRyZW4gIikscmFuKGksdSx1LmRvYyxkLHAsIXYpKX0scmFuPShpLHMsdSxkLHAsdik9PntYZS50cmFjZSgiaXRlbXMiLHUpLHUuZm9yRWFjaChiPT57c3dpdGNoKGIuc3RtdCl7Y2FzZSBFSjplaihpLHMsYixkLHAsdik7YnJlYWs7Y2FzZSBYUjplaihpLHMsYixkLHAsdik7YnJlYWs7Y2FzZSBQdmU6e2VqKGkscyxiLnN0YXRlMSxkLHAsdiksZWooaSxzLGIuc3RhdGUyLGQscCx2KTtjb25zdCB5PXtpZDoiZWRnZSIrajksYXJyb3doZWFkOiJub3JtYWwiLGFycm93VHlwZUVuZDoiYXJyb3dfYmFyYiIsc3R5bGU6TUtlLGxhYmVsU3R5bGU6IiIsbGFiZWw6Y2kuc2FuaXRpemVUZXh0KGIuZGVzY3JpcHRpb24scXQoKSksYXJyb3doZWFkU3R5bGU6REtlLGxhYmVscG9zOklLZSxsYWJlbFR5cGU6T0tlLHRoaWNrbmVzczpOS2UsY2xhc3NlczpTS2V9O2kuc2V0RWRnZShiLnN0YXRlMS5pZCxiLnN0YXRlMi5pZCx5LGo5KSxqOSsrfWJyZWFrfX0pfSxHdmU9KGkscz1lc24pPT57bGV0IHU9cztpZihpLmRvYylmb3IobGV0IGQ9MDtkPGkuZG9jLmxlbmd0aDtkKyspe2NvbnN0IHA9aS5kb2NbZF07cC5zdG10PT09ImRpciImJih1PXAudmFsdWUpfXJldHVybiB1fSxpYW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpvS2UsZGI6RzcscmVuZGVyZXI6e3NldENvbmY6ZWFuLGdldENsYXNzZXM6dGFuLGRyYXc6YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7WGUuaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLHMpLExKPXt9LGQuZGIuZ2V0RGlyZWN0aW9uKCk7Y29uc3R7c2VjdXJpdHlMZXZlbDpwLHN0YXRlOnZ9PXF0KCksYj12Lm5vZGVTcGFjaW5nfHw1MCx5PXYucmFua1NwYWNpbmd8fDUwO1hlLmluZm8oZC5kYi5nZXRSb290RG9jVjIoKSksZC5kYi5leHRyYWN0KGQuZGIuZ2V0Um9vdERvY1YyKCkpLFhlLmluZm8oZC5kYi5nZXRSb290RG9jVjIoKSk7Y29uc3QgVD1kLmRiLmdldFN0YXRlcygpLF89bmV3IEIwKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6R3ZlKGQuZGIuZ2V0Um9vdERvY1YyKCkpLG5vZGVzZXA6YixyYW5rc2VwOnksbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2VqKF8sdm9pZCAwLGQuZGIuZ2V0Um9vdERvY1YyKCksVCxkLmRiLCEwKTtsZXQgQTtwPT09InNhbmRib3giJiYoQT1JcigiI2kiK3MpKTtjb25zdCBQPUlyKHA9PT0ic2FuZGJveCI/QS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksUj1QLnNlbGVjdChgW2lkPSIke3N9Il1gKSxGPVAuc2VsZWN0KCIjIitzKyIgZyIpO2F3YWl0IHFtZShGLF8sWyJiYXJiIl0sUUQscyk7Y29uc3Qgaj04O0FvLmluc2VydFRpdGxlKFIsInN0YXRlZGlhZ3JhbVRpdGxlVGV4dCIsdi50aXRsZVRvcE1hcmdpbixkLmRiLmdldERpYWdyYW1UaXRsZSgpKTtjb25zdCBLPVIubm9kZSgpLmdldEJCb3goKSxlZT1LLndpZHRoK2oqMixpZT1LLmhlaWdodCtqKjI7Ui5hdHRyKCJjbGFzcyIsUUQpO2NvbnN0IG9lPVIubm9kZSgpLmdldEJCb3goKTtOZyhSLGllLGVlLHYudXNlTWF4V2lkdGgpO2NvbnN0IHBlPWAke29lLngtan0gJHtvZS55LWp9ICR7ZWV9ICR7aWV9YDtYZS5kZWJ1Zyhgdmlld0JveCAke3BlfWApLFIuYXR0cigidmlld0JveCIscGUpO2NvbnN0IGJlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytzKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBhZSBvZiBiZSl7Y29uc3QgbmU9YWUuZ2V0QkJveCgpLHNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLEFKKTtzZS5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxzZS5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxzZS5zZXRBdHRyaWJ1dGUoIndpZHRoIixuZS53aWR0aCksc2Uuc2V0QXR0cmlidXRlKCJoZWlnaHQiLG5lLmhlaWdodCksYWUuaW5zZXJ0QmVmb3JlKHNlLGFlLmZpcnN0Q2hpbGQpfX19LHN0eWxlczp4S2UsaW5pdDppPT57aS5zdGF0ZXx8KGkuc3RhdGU9e30pLGkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsRzcuY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBLdmU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihQLFIsRixqKXtmb3IoRj1GfHx7fSxqPVAubGVuZ3RoO2otLTtGW1Bbal1dPVIpO3JldHVybiBGfSxzPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMThdLHU9WzEsOV0sZD1bMSwxMF0scD1bMSwxMV0sdj1bMSwxMl0sYj1bMSwxM10seT1bMSwxNF0sVD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsam91cm5leTo0LGRvY3VtZW50OjUsRU9GOjYsbGluZTo3LFNQQUNFOjgsc3RhdGVtZW50OjksTkVXTElORToxMCx0aXRsZToxMSxhY2NfdGl0bGU6MTIsYWNjX3RpdGxlX3ZhbHVlOjEzLGFjY19kZXNjcjoxNCxhY2NfZGVzY3JfdmFsdWU6MTUsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxNixzZWN0aW9uOjE3LHRhc2tOYW1lOjE4LHRhc2tEYXRhOjE5LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJqb3VybmV5Iiw2OiJFT0YiLDg6IlNQQUNFIiwxMDoiTkVXTElORSIsMTE6InRpdGxlIiwxMjoiYWNjX3RpdGxlIiwxMzoiYWNjX3RpdGxlX3ZhbHVlIiwxNDoiYWNjX2Rlc2NyIiwxNToiYWNjX2Rlc2NyX3ZhbHVlIiwxNjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTc6InNlY3Rpb24iLDE4OiJ0YXNrTmFtZSIsMTk6InRhc2tEYXRhIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDJdLFs3LDFdLFs3LDFdLFs3LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDJdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFIsRixqLEssZWUsaWUsb2Upe3ZhciBwZT1pZS5sZW5ndGgtMTtzd2l0Y2goZWUpe2Nhc2UgMTpyZXR1cm4gaWVbcGUtMV07Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6aWVbcGUtMV0ucHVzaChpZVtwZV0pLHRoaXMuJD1pZVtwZS0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1pZVtwZV07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4Oksuc2V0RGlhZ3JhbVRpdGxlKGllW3BlXS5zdWJzdHIoNikpLHRoaXMuJD1pZVtwZV0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9aWVbcGVdLnRyaW0oKSxLLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD1pZVtwZV0udHJpbSgpLEsuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDEyOksuYWRkU2VjdGlvbihpZVtwZV0uc3Vic3RyKDgpKSx0aGlzLiQ9aWVbcGVdLnN1YnN0cig4KTticmVhaztjYXNlIDEzOksuYWRkVGFzayhpZVtwZS0xXSxpZVtwZV0pLHRoaXMuJD0idGFzayI7YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkocyxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnUsMTI6ZCwxNDpwLDE2OnYsMTc6YiwxODp5fSxpKHMsWzIsN10sezE6WzIsMV19KSxpKHMsWzIsM10pLHs5OjE1LDExOnUsMTI6ZCwxNDpwLDE2OnYsMTc6YiwxODp5fSxpKHMsWzIsNV0pLGkocyxbMiw2XSksaShzLFsyLDhdKSx7MTM6WzEsMTZdfSx7MTU6WzEsMTddfSxpKHMsWzIsMTFdKSxpKHMsWzIsMTJdKSx7MTk6WzEsMThdfSxpKHMsWzIsNF0pLGkocyxbMiw5XSksaShzLFsyLDEwXSksaShzLFsyLDEzXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oUixGKXtpZihGLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoUik7ZWxzZXt2YXIgaj1uZXcgRXJyb3IoUik7dGhyb3cgai5oYXNoPUYsan19LHBhcnNlOmZ1bmN0aW9uKFIpe3ZhciBGPXRoaXMsaj1bMF0sSz1bXSxlZT1bbnVsbF0saWU9W10sb2U9dGhpcy50YWJsZSxwZT0iIixiZT0wLGFlPTAsbmU9MixzZT0xLGRlPWllLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFg9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxnZT17eXk6e319O2Zvcih2YXIgVyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFcpJiYoZ2UueXlbV109dGhpcy55eVtXXSk7WC5zZXRJbnB1dChSLGdlLnl5KSxnZS55eS5sZXhlcj1YLGdlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBYLnl5bGxvYz4idSImJihYLnl5bGxvYz17fSk7dmFyIHhlPVgueXlsbG9jO2llLnB1c2goeGUpO3ZhciBVPVgub3B0aW9ucyYmWC5vcHRpb25zLnJhbmdlczt0eXBlb2YgZ2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Z2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gRmUoKXt2YXIgX3Q7cmV0dXJuIF90PUsucG9wKCl8fFgubGV4KCl8fHNlLHR5cGVvZiBfdCE9Im51bWJlciImJihfdCBpbnN0YW5jZW9mIEFycmF5JiYoSz1fdCxfdD1LLnBvcCgpKSxfdD1GLnN5bWJvbHNfW190XXx8X3QpLF90fWZvcih2YXIgUGUsamUsSWUsU2UsQ2U9e30sa2UsS2UsRnQsTmU7Oyl7aWYoamU9altqLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2plXT9JZT10aGlzLmRlZmF1bHRBY3Rpb25zW2plXTooKFBlPT09bnVsbHx8dHlwZW9mIFBlPiJ1IikmJihQZT1GZSgpKSxJZT1vZVtqZV0mJm9lW2plXVtQZV0pLHR5cGVvZiBJZT4idSJ8fCFJZS5sZW5ndGh8fCFJZVswXSl7dmFyIGduPSIiO05lPVtdO2ZvcihrZSBpbiBvZVtqZV0pdGhpcy50ZXJtaW5hbHNfW2tlXSYma2U+bmUmJk5lLnB1c2goIiciK3RoaXMudGVybWluYWxzX1trZV0rIiciKTtYLnNob3dQb3NpdGlvbj9nbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhiZSsxKStgOgpgK1guc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtOZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1BlXXx8UGUpKyInIjpnbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhiZSsxKSsiOiBVbmV4cGVjdGVkICIrKFBlPT1zZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tQZV18fFBlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihnbix7dGV4dDpYLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tQZV18fFBlLGxpbmU6WC55eWxpbmVubyxsb2M6eGUsZXhwZWN0ZWQ6TmV9KX1pZihJZVswXWluc3RhbmNlb2YgQXJyYXkmJkllLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIramUrIiwgdG9rZW46ICIrUGUpO3N3aXRjaChJZVswXSl7Y2FzZSAxOmoucHVzaChQZSksZWUucHVzaChYLnl5dGV4dCksaWUucHVzaChYLnl5bGxvYyksai5wdXNoKEllWzFdKSxQZT1udWxsLGFlPVgueXlsZW5nLHBlPVgueXl0ZXh0LGJlPVgueXlsaW5lbm8seGU9WC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKEtlPXRoaXMucHJvZHVjdGlvbnNfW0llWzFdXVsxXSxDZS4kPWVlW2VlLmxlbmd0aC1LZV0sQ2UuXyQ9e2ZpcnN0X2xpbmU6aWVbaWUubGVuZ3RoLShLZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmllW2llLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmllW2llLmxlbmd0aC0oS2V8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46aWVbaWUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxVJiYoQ2UuXyQucmFuZ2U9W2llW2llLmxlbmd0aC0oS2V8fDEpXS5yYW5nZVswXSxpZVtpZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxTZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoQ2UsW3BlLGFlLGJlLGdlLnl5LEllWzFdLGVlLGllXS5jb25jYXQoZGUpKSx0eXBlb2YgU2U8InUiKXJldHVybiBTZTtLZSYmKGo9ai5zbGljZSgwLC0xKktlKjIpLGVlPWVlLnNsaWNlKDAsLTEqS2UpLGllPWllLnNsaWNlKDAsLTEqS2UpKSxqLnB1c2godGhpcy5wcm9kdWN0aW9uc19bSWVbMV1dWzBdKSxlZS5wdXNoKENlLiQpLGllLnB1c2goQ2UuXyQpLEZ0PW9lW2pbai5sZW5ndGgtMl1dW2pbai5sZW5ndGgtMV1dLGoucHVzaChGdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LF89ZnVuY3Rpb24oKXt2YXIgUD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihGLGope2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRixqKTtlbHNlIHRocm93IG5ldyBFcnJvcihGKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oUixGKXtyZXR1cm4gdGhpcy55eT1GfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1SLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBSPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1SLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1SLHRoaXMubWF0Y2hlZCs9Ujt2YXIgRj1SLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRj8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksUn0sdW5wdXQ6ZnVuY3Rpb24oUil7dmFyIEY9Ui5sZW5ndGgsaj1SLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Uit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRiksdGhpcy5vZmZzZXQtPUY7dmFyIEs9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksai5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWoubGVuZ3RoLTEpO3ZhciBlZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46aj8oai5sZW5ndGg9PT1LLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrS1tLLmxlbmd0aC1qLmxlbmd0aF0ubGVuZ3RoLWpbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1GfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2VlWzBdLGVlWzBdK3RoaXMueXlsZW5nLUZdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihSKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoUikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgUj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFIubGVuZ3RoPjIwPyIuLi4iOiIiKStSLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5tYXRjaDtyZXR1cm4gUi5sZW5ndGg8MjAmJihSKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1SLmxlbmd0aCkpLChSLnN1YnN0cigwLDIwKSsoUi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5wYXN0SW5wdXQoKSxGPW5ldyBBcnJheShSLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFIrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0YrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKFIsRil7dmFyIGosSyxlZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZWU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZWUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksSz1SWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxLJiYodGhpcy55eWxpbmVubys9Sy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpLP0tbSy5sZW5ndGgtMV0ubGVuZ3RoLUtbSy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitSWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVJbMF0sdGhpcy5tYXRjaCs9UlswXSx0aGlzLm1hdGNoZXM9Uix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShSWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1SWzBdLGo9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsRix0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxqKXJldHVybiBqO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBpZSBpbiBlZSl0aGlzW2llXT1lZVtpZV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgUixGLGosSzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBlZT10aGlzLl9jdXJyZW50UnVsZXMoKSxpZT0wO2llPGVlLmxlbmd0aDtpZSsrKWlmKGo9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tlZVtpZV1dKSxqJiYoIUZ8fGpbMF0ubGVuZ3RoPkZbMF0ubGVuZ3RoKSl7aWYoRj1qLEs9aWUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUj10aGlzLnRlc3RfbWF0Y2goaixlZVtpZV0pLFIhPT0hMSlyZXR1cm4gUjtpZih0aGlzLl9iYWNrdHJhY2spe0Y9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gRj8oUj10aGlzLnRlc3RfbWF0Y2goRixlZVtLXSksUiE9PSExP1I6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBGPXRoaXMubmV4dCgpO3JldHVybiBGfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihGKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goRil9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gRj4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKEYpe3JldHVybiBGPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoRnx8MCksRj49MD90aGlzLmNvbmRpdGlvblN0YWNrW0ZdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEYpe3RoaXMuYmVnaW4oRil9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oRixqLEssZWUpe3N3aXRjaChLKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMTA7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6cmV0dXJuIDQ7Y2FzZSA2OnJldHVybiAxMTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDEyO2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgOTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTQ7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTE6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTM6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTQ6cmV0dXJuIDE3O2Nhc2UgMTU6cmV0dXJuIDE4O2Nhc2UgMTY6cmV0dXJuIDE5O2Nhc2UgMTc6cmV0dXJuIjoiO2Nhc2UgMTg6cmV0dXJuIDY7Y2FzZSAxOTpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OmpvdXJuZXlcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c2VjdGlvblxzW14jOlxuO10rKS9pLC9eKD86W14jOlxuO10rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMTgsMTldLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gUH0oKTtULmxleGVyPV87ZnVuY3Rpb24gQSgpe3RoaXMueXk9e319cmV0dXJuIEEucHJvdG90eXBlPVQsVC5QYXJzZXI9QSxuZXcgQX0oKTtLdmUucGFyc2VyPUt2ZTtjb25zdCBzYW49S3ZlO2xldCBKRD0iIjtjb25zdCBXdmU9W10sdGo9W10sbmo9W10sYWFuPWZ1bmN0aW9uKCl7V3ZlLmxlbmd0aD0wLHRqLmxlbmd0aD0wLEpEPSIiLG5qLmxlbmd0aD0wLFBnKCl9LG9hbj1mdW5jdGlvbihpKXtKRD1pLFd2ZS5wdXNoKGkpfSxjYW49ZnVuY3Rpb24oKXtyZXR1cm4gV3ZlfSx1YW49ZnVuY3Rpb24oKXtsZXQgaT1QS2UoKTtjb25zdCBzPTEwMDtsZXQgdT0wO2Zvcig7IWkmJnU8czspaT1QS2UoKSx1Kys7cmV0dXJuIHRqLnB1c2goLi4ubmopLHRqfSxsYW49ZnVuY3Rpb24oKXtjb25zdCBpPVtdO3JldHVybiB0ai5mb3JFYWNoKHU9Pnt1LnBlb3BsZSYmaS5wdXNoKC4uLnUucGVvcGxlKX0pLFsuLi5uZXcgU2V0KGkpXS5zb3J0KCl9LGhhbj1mdW5jdGlvbihpLHMpe2NvbnN0IHU9cy5zdWJzdHIoMSkuc3BsaXQoIjoiKTtsZXQgZD0wLHA9W107dS5sZW5ndGg9PT0xPyhkPU51bWJlcih1WzBdKSxwPVtdKTooZD1OdW1iZXIodVswXSkscD11WzFdLnNwbGl0KCIsIikpO2NvbnN0IHY9cC5tYXAoeT0+eS50cmltKCkpLGI9e3NlY3Rpb246SkQsdHlwZTpKRCxwZW9wbGU6dix0YXNrOmksc2NvcmU6ZH07bmoucHVzaChiKX0sZmFuPWZ1bmN0aW9uKGkpe2NvbnN0IHM9e3NlY3Rpb246SkQsdHlwZTpKRCxkZXNjcmlwdGlvbjppLHRhc2s6aSxjbGFzc2VzOltdfTt0ai5wdXNoKHMpfSxQS2U9ZnVuY3Rpb24oKXtjb25zdCBpPWZ1bmN0aW9uKHUpe3JldHVybiBualt1XS5wcm9jZXNzZWR9O2xldCBzPSEwO2Zvcihjb25zdFt1LGRdb2YgbmouZW50cmllcygpKWkodSkscz1zJiZkLnByb2Nlc3NlZDtyZXR1cm4gc30sQktlPXtnZXRDb25maWc6KCk9PnF0KCkuam91cm5leSxjbGVhcjphYW4sc2V0RGlhZ3JhbVRpdGxlOmNtLGdldERpYWdyYW1UaXRsZTpBcCxzZXRBY2NUaXRsZTpCZyxnZXRBY2NUaXRsZTpDcCxzZXRBY2NEZXNjcmlwdGlvbjpTcCxnZXRBY2NEZXNjcmlwdGlvbjpfcCxhZGRTZWN0aW9uOm9hbixnZXRTZWN0aW9uczpjYW4sZ2V0VGFza3M6dWFuLGFkZFRhc2s6aGFuLGFkZFRhc2tPcmc6ZmFuLGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiBsYW4oKX19LGRhbj1pPT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgICBjb2xvcjogJHtpLnRleHRDb2xvcn07CiAgfQogIC5tb3V0aCB7CiAgICBzdHJva2U6ICM2NjY7CiAgfQoKICBsaW5lIHsKICAgIHN0cm9rZTogJHtpLnRleHRDb2xvcn0KICB9CgogIC5sZWdlbmQgewogICAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCB7CiAgICBmaWxsOiAjMzMzOwogIH0KICAubGFiZWwgewogICAgY29sb3I6ICR7aS50ZXh0Q29sb3J9CiAgfQoKICAuZmFjZSB7CiAgICAke2kuZmFjZUNvbG9yP2BmaWxsOiAke2kuZmFjZUNvbG9yfWA6ImZpbGw6ICNGRkY4REMifTsKICAgIHN0cm9rZTogIzk5OTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgIH0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CgogIC5jbHVzdGVyIHJlY3QgewogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC50YXNrLXR5cGUtMCwgLnNlY3Rpb24tdHlwZS0wICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGUwfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTEsIC5zZWN0aW9uLXR5cGUtMSAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlMX1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0yLCAuc2VjdGlvbi10eXBlLTIgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTJ9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMywgLnNlY3Rpb24tdHlwZS0zICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGUzfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTQsIC5zZWN0aW9uLXR5cGUtNCAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlNH1gOiIifTsKICB9CiAgLnRhc2stdHlwZS01LCAuc2VjdGlvbi10eXBlLTUgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTV9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNiwgLnNlY3Rpb24tdHlwZS02ICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGU2fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTcsIC5zZWN0aW9uLXR5cGUtNyAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlN31gOiIifTsKICB9CgogIC5hY3Rvci0wIHsKICAgICR7aS5hY3RvcjA/YGZpbGw6ICR7aS5hY3RvcjB9YDoiIn07CiAgfQogIC5hY3Rvci0xIHsKICAgICR7aS5hY3RvcjE/YGZpbGw6ICR7aS5hY3RvcjF9YDoiIn07CiAgfQogIC5hY3Rvci0yIHsKICAgICR7aS5hY3RvcjI/YGZpbGw6ICR7aS5hY3RvcjJ9YDoiIn07CiAgfQogIC5hY3Rvci0zIHsKICAgICR7aS5hY3RvcjM/YGZpbGw6ICR7aS5hY3RvcjN9YDoiIn07CiAgfQogIC5hY3Rvci00IHsKICAgICR7aS5hY3RvcjQ/YGZpbGw6ICR7aS5hY3RvcjR9YDoiIn07CiAgfQogIC5hY3Rvci01IHsKICAgICR7aS5hY3RvcjU/YGZpbGw6ICR7aS5hY3RvcjV9YDoiIn07CiAgfQpgLFl2ZT1mdW5jdGlvbihpLHMpe3JldHVybiBBUShpLHMpfSxnYW49ZnVuY3Rpb24oaSxzKXtjb25zdCBkPWkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIscy5jeCkuYXR0cigiY3kiLHMuY3kpLmF0dHIoImNsYXNzIiwiZmFjZSIpLmF0dHIoInIiLDE1KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLHA9aS5hcHBlbmQoImciKTtwLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHMuY3gtMTUvMykuYXR0cigiY3kiLHMuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLHAuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIscy5jeCsxNS8zKS5hdHRyKCJjeSIscy5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iik7ZnVuY3Rpb24gdihUKXtjb25zdCBfPWxEKCkuc3RhcnRBbmdsZShNYXRoLlBJLzIpLmVuZEFuZ2xlKDMqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtULmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixfKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitzLmN4KyIsIisocy5jeSsyKSsiKSIpfWZ1bmN0aW9uIGIoVCl7Y29uc3QgXz1sRCgpLnN0YXJ0QW5nbGUoMypNYXRoLlBJLzIpLmVuZEFuZ2xlKDUqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtULmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixfKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitzLmN4KyIsIisocy5jeSs3KSsiKSIpfWZ1bmN0aW9uIHkoVCl7VC5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIscy5jeC01KS5hdHRyKCJ5MSIscy5jeSs3KS5hdHRyKCJ4MiIscy5jeCs1KS5hdHRyKCJ5MiIscy5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfXJldHVybiBzLnNjb3JlPjM/dihwKTpzLnNjb3JlPDM/YihwKTp5KHApLGR9LEZLZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9aS5hcHBlbmQoImNpcmNsZSIpO3JldHVybiB1LmF0dHIoImN4IixzLmN4KSx1LmF0dHIoImN5IixzLmN5KSx1LmF0dHIoImNsYXNzIiwiYWN0b3ItIitzLnBvcyksdS5hdHRyKCJmaWxsIixzLmZpbGwpLHUuYXR0cigic3Ryb2tlIixzLnN0cm9rZSksdS5hdHRyKCJyIixzLnIpLHUuY2xhc3MhPT12b2lkIDAmJnUuYXR0cigiY2xhc3MiLHUuY2xhc3MpLHMudGl0bGUhPT12b2lkIDAmJnUuYXBwZW5kKCJ0aXRsZSIpLnRleHQocy50aXRsZSksdX0sUktlPWZ1bmN0aW9uKGkscyl7cmV0dXJuIHRVdChpLHMpfSxwYW49ZnVuY3Rpb24oaSxzKXtmdW5jdGlvbiB1KHAsdixiLHksVCl7cmV0dXJuIHArIiwiK3YrIiAiKyhwK2IpKyIsIit2KyIgIisocCtiKSsiLCIrKHYreS1UKSsiICIrKHArYi1UKjEuMikrIiwiKyh2K3kpKyIgIitwKyIsIisodit5KX1jb25zdCBkPWkuYXBwZW5kKCJwb2x5Z29uIik7ZC5hdHRyKCJwb2ludHMiLHUocy54LHMueSw1MCwyMCw3KSksZC5hdHRyKCJjbGFzcyIsImxhYmVsQm94Iikscy55PXMueStzLmxhYmVsTWFyZ2luLHMueD1zLngrLjUqcy5sYWJlbE1hcmdpbixSS2UoaSxzKX0sYmFuPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPWkuYXBwZW5kKCJnIikscD1xQygpO3AueD1zLngscC55PXMueSxwLmZpbGw9cy5maWxsLHAud2lkdGg9dS53aWR0aCpzLnRhc2tDb3VudCt1LmRpYWdyYW1NYXJnaW5YKihzLnRhc2tDb3VudC0xKSxwLmhlaWdodD11LmhlaWdodCxwLmNsYXNzPSJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrcy5udW0scC5yeD0zLHAucnk9MyxZdmUoZCxwKSwkS2UodSkocy50ZXh0LGQscC54LHAueSxwLndpZHRoLHAuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK3MubnVtfSx1LHMuY29sb3VyKX07bGV0IGpLZT0tMTtjb25zdCBtYW49ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9cy54K3Uud2lkdGgvMixwPWkuYXBwZW5kKCJnIik7aktlKys7Y29uc3Qgdj0zMDArNSozMDtwLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwidGFzayIraktlKS5hdHRyKCJ4MSIsZCkuYXR0cigieTEiLHMueSkuYXR0cigieDIiLGQpLmF0dHIoInkyIix2KS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksZ2FuKHAse2N4OmQsY3k6MzAwKyg1LXMuc2NvcmUpKjMwLHNjb3JlOnMuc2NvcmV9KTtjb25zdCBiPXFDKCk7Yi54PXMueCxiLnk9cy55LGIuZmlsbD1zLmZpbGwsYi53aWR0aD11LndpZHRoLGIuaGVpZ2h0PXUuaGVpZ2h0LGIuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrcy5udW0sYi5yeD0zLGIucnk9MyxZdmUocCxiKTtsZXQgeT1zLngrMTQ7cy5wZW9wbGUuZm9yRWFjaChUPT57Y29uc3QgXz1zLmFjdG9yc1tUXS5jb2xvcixBPXtjeDp5LGN5OnMueSxyOjcsZmlsbDpfLHN0cm9rZToiIzAwMCIsdGl0bGU6VCxwb3M6cy5hY3RvcnNbVF0ucG9zaXRpb259O0ZLZShwLEEpLHkrPTEwfSksJEtlKHUpKHMudGFzayxwLGIueCxiLnksYi53aWR0aCxiLmhlaWdodCx7Y2xhc3M6InRhc2sifSx1LHMuY29sb3VyKX0sdmFuPWZ1bmN0aW9uKGkscyl7VHFlKGkscyl9LCRLZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGkocCx2LGIseSxULF8sQSxQKXtjb25zdCBSPXYuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitULzIpLmF0dHIoInkiLHkrXy8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixQKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHApO2QoUixBKX1mdW5jdGlvbiBzKHAsdixiLHksVCxfLEEsUCxSKXtjb25zdHt0YXNrRm9udFNpemU6Rix0YXNrRm9udEZhbWlseTpqfT1QLEs9cC5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCBlZT0wO2VlPEsubGVuZ3RoO2VlKyspe2NvbnN0IGllPWVlKkYtRiooSy5sZW5ndGgtMSkvMixvZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrVC8yKS5hdHRyKCJ5Iix5KS5hdHRyKCJmaWxsIixSKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixGKS5zdHlsZSgiZm9udC1mYW1pbHkiLGopO29lLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiK1QvMikuYXR0cigiZHkiLGllKS50ZXh0KEtbZWVdKSxvZS5hdHRyKCJ5Iix5K18vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGQob2UsQSl9fWZ1bmN0aW9uIHUocCx2LGIseSxULF8sQSxQKXtjb25zdCBSPXYuYXBwZW5kKCJzd2l0Y2giKSxqPVIuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIseSkuYXR0cigid2lkdGgiLFQpLmF0dHIoImhlaWdodCIsXykuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2ouYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHApLHMocCxSLGIseSxULF8sQSxQKSxkKGosQSl9ZnVuY3Rpb24gZChwLHYpe2Zvcihjb25zdCBiIGluIHYpYiBpbiB2JiZwLmF0dHIoYix2W2JdKX1yZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIHAudGV4dFBsYWNlbWVudD09PSJmbyI/dTpwLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOnN9fSgpLHJqPXtkcmF3UmVjdDpZdmUsZHJhd0NpcmNsZTpGS2UsZHJhd1NlY3Rpb246YmFuLGRyYXdUZXh0OlJLZSxkcmF3TGFiZWw6cGFuLGRyYXdUYXNrOm1hbixkcmF3QmFja2dyb3VuZFJlY3Q6dmFuLGluaXRHcmFwaGljczpmdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX19LHdhbj1mdW5jdGlvbihpKXtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe01KW3VdPWlbdV19KX0sSzc9e307ZnVuY3Rpb24geWFuKGkpe2NvbnN0IHM9cXQoKS5qb3VybmV5O2xldCB1PTYwO09iamVjdC5rZXlzKEs3KS5mb3JFYWNoKGQ9Pntjb25zdCBwPUs3W2RdLmNvbG9yLHY9e2N4OjIwLGN5OnUscjo3LGZpbGw6cCxzdHJva2U6IiMwMDAiLHBvczpLN1tkXS5wb3NpdGlvbn07cmouZHJhd0NpcmNsZShpLHYpO2NvbnN0IGI9e3g6NDAseTp1KzcsZmlsbDoiIzY2NiIsdGV4dDpkLHRleHRNYXJnaW46cy5ib3hUZXh0TWFyZ2lufDV9O3JqLmRyYXdUZXh0KGksYiksdSs9MjB9KX1jb25zdCBNSj1xdCgpLmpvdXJuZXksaVM9TUoubGVmdE1hcmdpbix4YW49ZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD1xdCgpLmpvdXJuZXksdj1xdCgpLnNlY3VyaXR5TGV2ZWw7bGV0IGI7dj09PSJzYW5kYm94IiYmKGI9SXIoIiNpIitzKSk7Y29uc3QgeT1Jcih2PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpO3F2LmluaXQoKTtjb25zdCBUPXkuc2VsZWN0KCIjIitzKTtyai5pbml0R3JhcGhpY3MoVCk7Y29uc3QgXz1kLmRiLmdldFRhc2tzKCksQT1kLmRiLmdldERpYWdyYW1UaXRsZSgpLFA9ZC5kYi5nZXRBY3RvcnMoKTtmb3IoY29uc3QgaWUgaW4gSzcpZGVsZXRlIEs3W2llXTtsZXQgUj0wO1AuZm9yRWFjaChpZT0+e0s3W2llXT17Y29sb3I6cC5hY3RvckNvbG91cnNbUiVwLmFjdG9yQ29sb3Vycy5sZW5ndGhdLHBvc2l0aW9uOlJ9LFIrK30pLHlhbihUKSxxdi5pbnNlcnQoMCwwLGlTLE9iamVjdC5rZXlzKEs3KS5sZW5ndGgqNTApLGthbihULF8sMCk7Y29uc3QgRj1xdi5nZXRCb3VuZHMoKTtBJiZULmFwcGVuZCgidGV4dCIpLnRleHQoQSkuYXR0cigieCIsaVMpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KTtjb25zdCBqPUYuc3RvcHktRi5zdGFydHkrMipwLmRpYWdyYW1NYXJnaW5ZLEs9aVMrRi5zdG9weCsyKnAuZGlhZ3JhbU1hcmdpblg7TmcoVCxqLEsscC51c2VNYXhXaWR0aCksVC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsaVMpLmF0dHIoInkxIixwLmhlaWdodCo0KS5hdHRyKCJ4MiIsSy1pUy00KS5hdHRyKCJ5MiIscC5oZWlnaHQqNCkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKTtjb25zdCBlZT1BPzcwOjA7VC5hdHRyKCJ2aWV3Qm94IixgJHtGLnN0YXJ0eH0gLTI1ICR7S30gJHtqK2VlfWApLFQuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSxULmF0dHIoImhlaWdodCIsaitlZSsyNSl9LHF2PXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSx1cGRhdGVWYWw6ZnVuY3Rpb24oaSxzLHUsZCl7aVtzXT09PXZvaWQgMD9pW3NdPXU6aVtzXT1kKHUsaVtzXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPXF0KCkuam91cm5leSx2PXRoaXM7bGV0IGI9MDtmdW5jdGlvbiB5KFQpe3JldHVybiBmdW5jdGlvbihBKXtiKys7Y29uc3QgUD12LnNlcXVlbmNlSXRlbXMubGVuZ3RoLWIrMTt2LnVwZGF0ZVZhbChBLCJzdGFydHkiLHMtUCpwLmJveE1hcmdpbixNYXRoLm1pbiksdi51cGRhdGVWYWwoQSwic3RvcHkiLGQrUCpwLmJveE1hcmdpbixNYXRoLm1heCksdi51cGRhdGVWYWwocXYuZGF0YSwic3RhcnR4IixpLVAqcC5ib3hNYXJnaW4sTWF0aC5taW4pLHYudXBkYXRlVmFsKHF2LmRhdGEsInN0b3B4Iix1K1AqcC5ib3hNYXJnaW4sTWF0aC5tYXgpLFQhPT0iYWN0aXZhdGlvbiImJih2LnVwZGF0ZVZhbChBLCJzdGFydHgiLGktUCpwLmJveE1hcmdpbixNYXRoLm1pbiksdi51cGRhdGVWYWwoQSwic3RvcHgiLHUrUCpwLmJveE1hcmdpbixNYXRoLm1heCksdi51cGRhdGVWYWwocXYuZGF0YSwic3RhcnR5IixzLVAqcC5ib3hNYXJnaW4sTWF0aC5taW4pLHYudXBkYXRlVmFsKHF2LmRhdGEsInN0b3B5IixkK1AqcC5ib3hNYXJnaW4sTWF0aC5tYXgpKX19dGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2goeSgpKX0saW5zZXJ0OmZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0IHA9TWF0aC5taW4oaSx1KSx2PU1hdGgubWF4KGksdSksYj1NYXRoLm1pbihzLGQpLHk9TWF0aC5tYXgocyxkKTt0aGlzLnVwZGF0ZVZhbChxdi5kYXRhLCJzdGFydHgiLHAsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHF2LmRhdGEsInN0YXJ0eSIsYixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwocXYuZGF0YSwic3RvcHgiLHYsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHF2LmRhdGEsInN0b3B5Iix5LE1hdGgubWF4KSx0aGlzLnVwZGF0ZUJvdW5kcyhwLGIsdix5KX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKGkpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcytpLHRoaXMuZGF0YS5zdG9weT10aGlzLnZlcnRpY2FsUG9zfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sWHZlPU1KLnNlY3Rpb25GaWxscyx6S2U9TUouc2VjdGlvbkNvbG91cnMsa2FuPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPXF0KCkuam91cm5leTtsZXQgcD0iIjtjb25zdCB2PWQuaGVpZ2h0KjIrZC5kaWFncmFtTWFyZ2luWSxiPXUrdjtsZXQgeT0wLFQ9IiNDQ0MiLF89ImJsYWNrIixBPTA7Zm9yKGNvbnN0W1AsUl1vZiBzLmVudHJpZXMoKSl7aWYocCE9PVIuc2VjdGlvbil7VD1YdmVbeSVYdmUubGVuZ3RoXSxBPXklWHZlLmxlbmd0aCxfPXpLZVt5JXpLZS5sZW5ndGhdO2xldCBqPTA7Y29uc3QgSz1SLnNlY3Rpb247Zm9yKGxldCBpZT1QO2llPHMubGVuZ3RoJiZzW2llXS5zZWN0aW9uPT1LO2llKyspaj1qKzE7Y29uc3QgZWU9e3g6UCpkLnRhc2tNYXJnaW4rUCpkLndpZHRoK2lTLHk6NTAsdGV4dDpSLnNlY3Rpb24sZmlsbDpULG51bTpBLGNvbG91cjpfLHRhc2tDb3VudDpqfTtyai5kcmF3U2VjdGlvbihpLGVlLGQpLHA9Ui5zZWN0aW9uLHkrK31jb25zdCBGPVIucGVvcGxlLnJlZHVjZSgoaixLKT0+KEs3W0tdJiYoaltLXT1LN1tLXSksaikse30pO1IueD1QKmQudGFza01hcmdpbitQKmQud2lkdGgraVMsUi55PWIsUi53aWR0aD1kLmRpYWdyYW1NYXJnaW5YLFIuaGVpZ2h0PWQuZGlhZ3JhbU1hcmdpblksUi5jb2xvdXI9XyxSLmZpbGw9VCxSLm51bT1BLFIuYWN0b3JzPUYscmouZHJhd1Rhc2soaSxSLGQpLHF2Lmluc2VydChSLngsUi55LFIueCtSLndpZHRoK2QudGFza01hcmdpbiwzMDArNSozMCl9fSxxS2U9e3NldENvbmY6d2FuLGRyYXc6eGFufSxFYW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpzYW4sZGI6QktlLHJlbmRlcmVyOnFLZSxzdHlsZXM6ZGFuLGluaXQ6aT0+e3FLZS5zZXRDb25mKGkuam91cm5leSksQktlLmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxUYW49KGkscyx1KT0+e2NvbnN0e3BhcmVudEJ5SWQ6ZH09dSxwPW5ldyBTZXQ7bGV0IHY9aTtmb3IoO3Y7KXtpZihwLmFkZCh2KSx2PT09cylyZXR1cm4gdjt2PWRbdl19Zm9yKHY9czt2Oyl7aWYocC5oYXModikpcmV0dXJuIHY7dj1kW3ZdfXJldHVybiJyb290In07ZnVuY3Rpb24gREooaSl7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZHluYW1pY2FsbHkgcmVxdWlyZSAiJytpKyciLiBQbGVhc2UgY29uZmlndXJlIHRoZSBkeW5hbWljUmVxdWlyZVRhcmdldHMgb3IvYW5kIGlnbm9yZUR5bmFtaWNSZXF1aXJlcyBvcHRpb24gb2YgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMgYXBwcm9wcmlhdGVseSBmb3IgdGhpcyByZXF1aXJlIGNhbGwgdG8gd29yay4nKX12YXIgSEtlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxzKXsoZnVuY3Rpb24odSl7aS5leHBvcnRzPXUoKX0pKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdShkLHAsdil7ZnVuY3Rpb24gYihfLEEpe2lmKCFwW19dKXtpZighZFtfXSl7dmFyIFA9dHlwZW9mIERKPT0iZnVuY3Rpb24iJiZESjtpZighQSYmUClyZXR1cm4gUChfLCEwKTtpZih5KXJldHVybiB5KF8sITApO3ZhciBSPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK18rIiciKTt0aHJvdyBSLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFJ9dmFyIEY9cFtfXT17ZXhwb3J0czp7fX07ZFtfXVswXS5jYWxsKEYuZXhwb3J0cyxmdW5jdGlvbihqKXt2YXIgSz1kW19dWzFdW2pdO3JldHVybiBiKEt8fGopfSxGLEYuZXhwb3J0cyx1LGQscCx2KX1yZXR1cm4gcFtfXS5leHBvcnRzfWZvcih2YXIgeT10eXBlb2YgREo9PSJmdW5jdGlvbiImJkRKLFQ9MDtUPHYubGVuZ3RoO1QrKyliKHZbVF0pO3JldHVybiBifXJldHVybiB1fSgpKHsxOltmdW5jdGlvbih1LGQscCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gXyhBLFApe2Zvcih2YXIgUj0wO1I8UC5sZW5ndGg7UisrKXt2YXIgRj1QW1JdO0YuZW51bWVyYWJsZT1GLmVudW1lcmFibGV8fCExLEYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBGJiYoRi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsRi5rZXksRil9fXJldHVybiBmdW5jdGlvbihBLFAsUil7cmV0dXJuIFAmJl8oQS5wcm90b3R5cGUsUCksUiYmXyhBLFIpLEF9fSgpO2Z1bmN0aW9uIGIoXyxBKXtpZighKF8gaW5zdGFuY2VvZiBBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIF8oKXt2YXIgQT10aGlzLFA9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9LFI9UC5kZWZhdWx0TGF5b3V0T3B0aW9ucyxGPVI9PT12b2lkIDA/e306UixqPVAuYWxnb3JpdGhtcyxLPWo9PT12b2lkIDA/WyJsYXllcmVkIiwic3RyZXNzIiwibXJ0cmVlIiwicmFkaWFsIiwiZm9yY2UiLCJkaXNjbyIsInNwb3JlT3ZlcmxhcCIsInNwb3JlQ29tcGFjdGlvbiIsInJlY3RwYWNraW5nIl06aixlZT1QLndvcmtlckZhY3RvcnksaWU9UC53b3JrZXJVcmw7aWYoYih0aGlzLF8pLHRoaXMuZGVmYXVsdExheW91dE9wdGlvbnM9Rix0aGlzLmluaXRpYWxpemVkPSExLHR5cGVvZiBpZT4idSImJnR5cGVvZiBlZT4idSIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29uc3RydWN0IGFuIEVMSyB3aXRob3V0IGJvdGggJ3dvcmtlclVybCcgYW5kICd3b3JrZXJGYWN0b3J5Jy4iKTt2YXIgb2U9ZWU7dHlwZW9mIGllPCJ1IiYmdHlwZW9mIGVlPiJ1IiYmKG9lPWZ1bmN0aW9uKGFlKXtyZXR1cm4gbmV3IFdvcmtlcihhZSl9KTt2YXIgcGU9b2UoaWUpO2lmKHR5cGVvZiBwZS5wb3N0TWVzc2FnZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJDcmVhdGVkIHdvcmtlciBkb2VzIG5vdCBwcm92aWRlIHRoZSByZXF1aXJlZCAncG9zdE1lc3NhZ2UnIGZ1bmN0aW9uLiIpO3RoaXMud29ya2VyPW5ldyBUKHBlKSx0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJyZWdpc3RlciIsYWxnb3JpdGhtczpLfSkudGhlbihmdW5jdGlvbihiZSl7cmV0dXJuIEEuaW5pdGlhbGl6ZWQ9ITB9KS5jYXRjaChjb25zb2xlLmVycil9cmV0dXJuIHYoXyxbe2tleToibGF5b3V0Iix2YWx1ZTpmdW5jdGlvbihQKXt2YXIgUj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sRj1SLmxheW91dE9wdGlvbnMsaj1GPT09dm9pZCAwP3RoaXMuZGVmYXVsdExheW91dE9wdGlvbnM6RixLPVIubG9nZ2luZyxlZT1LPT09dm9pZCAwPyExOkssaWU9Ui5tZWFzdXJlRXhlY3V0aW9uVGltZSxvZT1pZT09PXZvaWQgMD8hMTppZTtyZXR1cm4gUD90aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJsYXlvdXQiLGdyYXBoOlAsbGF5b3V0T3B0aW9uczpqLG9wdGlvbnM6e2xvZ2dpbmc6ZWUsbWVhc3VyZUV4ZWN1dGlvblRpbWU6b2V9fSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIG1hbmRhdG9yeSBwYXJhbWV0ZXIgJ2dyYXBoJy4iKSl9fSx7a2V5OiJrbm93bkxheW91dEFsZ29yaXRobXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6ImFsZ29yaXRobXMifSl9fSx7a2V5OiJrbm93bkxheW91dE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6Im9wdGlvbnMifSl9fSx7a2V5OiJrbm93bkxheW91dENhdGVnb3JpZXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6ImNhdGVnb3JpZXMifSl9fSx7a2V5OiJ0ZXJtaW5hdGVXb3JrZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy53b3JrZXIudGVybWluYXRlKCl9fV0pLF99KCk7cC5kZWZhdWx0PXk7dmFyIFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBfKEEpe3ZhciBQPXRoaXM7aWYoYih0aGlzLF8pLEE9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIG1hbmRhdG9yeSBwYXJhbWV0ZXIgJ3dvcmtlcicuIik7dGhpcy5yZXNvbHZlcnM9e30sdGhpcy53b3JrZXI9QSx0aGlzLndvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oUil7c2V0VGltZW91dChmdW5jdGlvbigpe1AucmVjZWl2ZShQLFIpfSwwKX19cmV0dXJuIHYoXyxbe2tleToicG9zdE1lc3NhZ2UiLHZhbHVlOmZ1bmN0aW9uKFApe3ZhciBSPXRoaXMuaWR8fDA7dGhpcy5pZD1SKzEsUC5pZD1SO3ZhciBGPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGosSyl7Ri5yZXNvbHZlcnNbUl09ZnVuY3Rpb24oZWUsaWUpe2VlPyhGLmNvbnZlcnRHd3RTdHlsZUVycm9yKGVlKSxLKGVlKSk6aihpZSl9LEYud29ya2VyLnBvc3RNZXNzYWdlKFApfSl9fSx7a2V5OiJyZWNlaXZlIix2YWx1ZTpmdW5jdGlvbihQLFIpe3ZhciBGPVIuZGF0YSxqPVAucmVzb2x2ZXJzW0YuaWRdO2omJihkZWxldGUgUC5yZXNvbHZlcnNbRi5pZF0sRi5lcnJvcj9qKEYuZXJyb3IpOmoobnVsbCxGLmRhdGEpKX19LHtrZXk6InRlcm1pbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLndvcmtlci50ZXJtaW5hdGUmJnRoaXMud29ya2VyLnRlcm1pbmF0ZSgpfX0se2tleToiY29udmVydEd3dFN0eWxlRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKFApe2lmKFApe3ZhciBSPVAuX19qYXZhJGV4Y2VwdGlvbjtSJiYoUi5jYXVzZSYmUi5jYXVzZS5iYWNraW5nSnNPYmplY3QmJihQLmNhdXNlPVIuY2F1c2UuYmFja2luZ0pzT2JqZWN0LHRoaXMuY29udmVydEd3dFN0eWxlRXJyb3IoUC5jYXVzZSkpLGRlbGV0ZSBQLl9famF2YSRleGNlcHRpb24pfX19XSksX30oKX0se31dLDI6W2Z1bmN0aW9uKHUsZCxwKXsoZnVuY3Rpb24odil7KGZ1bmN0aW9uKCl7dmFyIGI7dHlwZW9mIHdpbmRvdzwidSI/Yj13aW5kb3c6dHlwZW9mIHY8InUiP2I9djp0eXBlb2Ygc2VsZjwidSImJihiPXNlbGYpO3ZhciB5O2Z1bmN0aW9uIFQoKXt9ZnVuY3Rpb24gXygpe31mdW5jdGlvbiBBKCl7fWZ1bmN0aW9uIFAoKXt9ZnVuY3Rpb24gUigpe31mdW5jdGlvbiBGKCl7fWZ1bmN0aW9uIGooKXt9ZnVuY3Rpb24gSygpe31mdW5jdGlvbiBlZSgpe31mdW5jdGlvbiBpZSgpe31mdW5jdGlvbiBvZSgpe31mdW5jdGlvbiBwZSgpe31mdW5jdGlvbiBiZSgpe31mdW5jdGlvbiBhZSgpe31mdW5jdGlvbiBuZSgpe31mdW5jdGlvbiBzZSgpe31mdW5jdGlvbiBkZSgpe31mdW5jdGlvbiBYKCl7fWZ1bmN0aW9uIGdlKCl7fWZ1bmN0aW9uIFcoKXt9ZnVuY3Rpb24geGUoKXt9ZnVuY3Rpb24gVSgpe31mdW5jdGlvbiBGZSgpe31mdW5jdGlvbiBQZSgpe31mdW5jdGlvbiBqZSgpe31mdW5jdGlvbiBJZSgpe31mdW5jdGlvbiBTZSgpe31mdW5jdGlvbiBDZSgpe31mdW5jdGlvbiBrZSgpe31mdW5jdGlvbiBLZSgpe31mdW5jdGlvbiBGdCgpe31mdW5jdGlvbiBOZSgpe31mdW5jdGlvbiBnbigpe31mdW5jdGlvbiBfdCgpe31mdW5jdGlvbiBFdCgpe31mdW5jdGlvbiBHdCgpe31mdW5jdGlvbiBsbigpe31mdW5jdGlvbiB4dCgpe31mdW5jdGlvbiBQdCgpe31mdW5jdGlvbiBRZSgpe31mdW5jdGlvbiBEdCgpe31mdW5jdGlvbiBrdCgpe31mdW5jdGlvbiBPbigpe31mdW5jdGlvbiBodCgpe31mdW5jdGlvbiB6cigpe31mdW5jdGlvbiB5dCgpe31mdW5jdGlvbiBqaSgpe31mdW5jdGlvbiB4aSgpe31mdW5jdGlvbiBNYSgpe31mdW5jdGlvbiB6cygpe31mdW5jdGlvbiBhbygpe31mdW5jdGlvbiBUcigpe31mdW5jdGlvbiBGbigpe31mdW5jdGlvbiBxbigpe31mdW5jdGlvbiBVbigpe31mdW5jdGlvbiBBdCgpe31mdW5jdGlvbiB3dCgpe31mdW5jdGlvbiBvbigpe31mdW5jdGlvbiBmbigpe31mdW5jdGlvbiBBbigpe31mdW5jdGlvbiBvbygpe31mdW5jdGlvbiBqbygpe31mdW5jdGlvbiAkbygpe31mdW5jdGlvbiBQYSgpe31mdW5jdGlvbiB3bygpe31mdW5jdGlvbiBfcygpe31mdW5jdGlvbiB0bCgpe31mdW5jdGlvbiBkYSgpe31mdW5jdGlvbiBqMCgpe31mdW5jdGlvbiBwbSgpe31mdW5jdGlvbiBNbCgpe31mdW5jdGlvbiBYYygpe31mdW5jdGlvbiBCYygpe31mdW5jdGlvbiBqYSgpe31mdW5jdGlvbiBPdSgpe31mdW5jdGlvbiBTYSgpe31mdW5jdGlvbiBQbygpe31mdW5jdGlvbiBGYygpe31mdW5jdGlvbiB4YSgpe31mdW5jdGlvbiBCYSgpe31mdW5jdGlvbiBnYSgpe31mdW5jdGlvbiBraCgpe31mdW5jdGlvbiBsdSgpe31mdW5jdGlvbiBvNSgpe31mdW5jdGlvbiBXaCgpe31mdW5jdGlvbiBvZCgpe31mdW5jdGlvbiBHZCgpe31mdW5jdGlvbiBjZCgpe31mdW5jdGlvbiBLZCgpe31mdW5jdGlvbiAkZygpe31mdW5jdGlvbiBhcygpe31mdW5jdGlvbiB3bigpe31mdW5jdGlvbiBacigpe31mdW5jdGlvbiBaaSgpe31mdW5jdGlvbiBudSgpe31mdW5jdGlvbiB2dSgpe31mdW5jdGlvbiBEbCgpe31mdW5jdGlvbiBZaCgpe31mdW5jdGlvbiB3MSgpe31mdW5jdGlvbiAkMCgpe31mdW5jdGlvbiBXaSgpe31mdW5jdGlvbiBCcygpe31mdW5jdGlvbiBRYSgpe31mdW5jdGlvbiBCaSgpe31mdW5jdGlvbiBOdSgpe31mdW5jdGlvbiBPdCgpe31mdW5jdGlvbiBXMygpe31mdW5jdGlvbiBLdCgpe31mdW5jdGlvbiB6MCgpe31mdW5jdGlvbiBCcCgpe31mdW5jdGlvbiBZMygpe31mdW5jdGlvbiAkOSgpe31mdW5jdGlvbiBjNSgpe31mdW5jdGlvbiBFaCgpe31mdW5jdGlvbiB6Zygpe31mdW5jdGlvbiBibSgpe31mdW5jdGlvbiB6OSgpe31mdW5jdGlvbiBtbSgpe31mdW5jdGlvbiB1NSgpe31mdW5jdGlvbiB5MSgpe31mdW5jdGlvbiB1ZCgpe31mdW5jdGlvbiBsZCgpe31mdW5jdGlvbiBxOSgpe31mdW5jdGlvbiBWdigpe31mdW5jdGlvbiBZNygpe31mdW5jdGlvbiBHMigpe31mdW5jdGlvbiBYNygpe31mdW5jdGlvbiBsNSgpe31mdW5jdGlvbiBYMygpe31mdW5jdGlvbiBGcCgpe31mdW5jdGlvbiBuSSgpe31mdW5jdGlvbiBjaCgpe31mdW5jdGlvbiBvUygpe31mdW5jdGlvbiBodSgpe31mdW5jdGlvbiAkSigpe31mdW5jdGlvbiB2bSgpe31mdW5jdGlvbiB6Sigpe31mdW5jdGlvbiBvaigpe31mdW5jdGlvbiBxSigpe31mdW5jdGlvbiBjaigpe31mdW5jdGlvbiBxMCgpe31mdW5jdGlvbiBRMygpe31mdW5jdGlvbiBjUygpe31mdW5jdGlvbiB1aigpe31mdW5jdGlvbiBLMigpe31mdW5jdGlvbiBKMygpe31mdW5jdGlvbiBISigpe31mdW5jdGlvbiB3bSgpe31mdW5jdGlvbiBWSigpe31mdW5jdGlvbiBVSigpe31mdW5jdGlvbiBRNygpe31mdW5jdGlvbiB1Uygpe31mdW5jdGlvbiBsaigpe31mdW5jdGlvbiBIOSgpe31mdW5jdGlvbiBHSigpe31mdW5jdGlvbiBWOSgpe31mdW5jdGlvbiBLSigpe31mdW5jdGlvbiBXSigpe31mdW5jdGlvbiBZSigpe31mdW5jdGlvbiBYSigpe31mdW5jdGlvbiBRSigpe31mdW5jdGlvbiBKSigpe31mdW5jdGlvbiBaSigpe31mdW5jdGlvbiBlWigpe31mdW5jdGlvbiB0Wigpe31mdW5jdGlvbiBuWigpe31mdW5jdGlvbiByWigpe31mdW5jdGlvbiBySSgpe31mdW5jdGlvbiBpWigpe31mdW5jdGlvbiBzWigpe31mdW5jdGlvbiBsUygpe31mdW5jdGlvbiBoaigpe31mdW5jdGlvbiBKNygpe31mdW5jdGlvbiBhWigpe31mdW5jdGlvbiBvWigpe31mdW5jdGlvbiBjWigpe31mdW5jdGlvbiB1Wigpe31mdW5jdGlvbiBsWigpe31mdW5jdGlvbiBoUygpe31mdW5jdGlvbiBpSSgpe31mdW5jdGlvbiBmaigpe31mdW5jdGlvbiBoNSgpe31mdW5jdGlvbiBmNSgpe31mdW5jdGlvbiBoWigpe31mdW5jdGlvbiB0MCgpe31mdW5jdGlvbiBaNygpe31mdW5jdGlvbiBmWigpe31mdW5jdGlvbiBVOSgpe31mdW5jdGlvbiBXZCgpe31mdW5jdGlvbiBkWigpe31mdW5jdGlvbiBnWigpe31mdW5jdGlvbiBwWigpe31mdW5jdGlvbiBkaigpe31mdW5jdGlvbiBiWigpe31mdW5jdGlvbiBmUygpe31mdW5jdGlvbiBkUygpe31mdW5jdGlvbiBnaigpe31mdW5jdGlvbiBzSSgpe31mdW5jdGlvbiBlOCgpe31mdW5jdGlvbiBtWigpe31mdW5jdGlvbiBwaigpe31mdW5jdGlvbiBiaigpe31mdW5jdGlvbiB2Wigpe31mdW5jdGlvbiB3Wigpe31mdW5jdGlvbiB5Wigpe31mdW5jdGlvbiB4Wigpe31mdW5jdGlvbiBrWigpe31mdW5jdGlvbiBFWigpe31mdW5jdGlvbiBZZCgpe31mdW5jdGlvbiBVdigpe31mdW5jdGlvbiBUWigpe31mdW5jdGlvbiBnUygpe31mdW5jdGlvbiBwUygpe31mdW5jdGlvbiBDWigpe31mdW5jdGlvbiBkNSgpe31mdW5jdGlvbiBHOSgpe31mdW5jdGlvbiBhSSgpe31mdW5jdGlvbiBaMygpe31mdW5jdGlvbiBLOSgpe31mdW5jdGlvbiBTWigpe31mdW5jdGlvbiBiUygpe31mdW5jdGlvbiBoZCgpe31mdW5jdGlvbiBtaigpe31mdW5jdGlvbiBvSSgpe31mdW5jdGlvbiBXOSgpe31mdW5jdGlvbiBjSSgpe31mdW5jdGlvbiB2aigpe31mdW5jdGlvbiBfWigpe31mdW5jdGlvbiB1SSgpe31mdW5jdGlvbiBBWigpe31mdW5jdGlvbiBMWigpe31mdW5jdGlvbiB3aigpe31mdW5jdGlvbiB0OCgpe31mdW5jdGlvbiB5aigpe31mdW5jdGlvbiBuOCgpe31mdW5jdGlvbiBNWigpe31mdW5jdGlvbiBsSSgpe31mdW5jdGlvbiBEWigpe31mdW5jdGlvbiBJWigpe31mdW5jdGlvbiBPWigpe31mdW5jdGlvbiBOWigpe31mdW5jdGlvbiB4aigpe31mdW5jdGlvbiBQWigpe31mdW5jdGlvbiBCWigpe31mdW5jdGlvbiBraigpe31mdW5jdGlvbiBGWigpe31mdW5jdGlvbiBSWigpe31mdW5jdGlvbiBqWigpe31mdW5jdGlvbiAkWigpe31mdW5jdGlvbiBFaigpe31mdW5jdGlvbiB6Wigpe31mdW5jdGlvbiBxWigpe31mdW5jdGlvbiBUaigpe31mdW5jdGlvbiBDaigpe31mdW5jdGlvbiBTaigpe31mdW5jdGlvbiBIWigpe31mdW5jdGlvbiBWWigpe31mdW5jdGlvbiBZOSgpe31mdW5jdGlvbiByOCgpe31mdW5jdGlvbiBtUygpe31mdW5jdGlvbiBVWigpe31mdW5jdGlvbiBoSSgpe31mdW5jdGlvbiB2Uygpe31mdW5jdGlvbiBmSSgpe31mdW5jdGlvbiBfaigpe31mdW5jdGlvbiBBaigpe31mdW5jdGlvbiBHWigpe31mdW5jdGlvbiBLWigpe31mdW5jdGlvbiBXWigpe31mdW5jdGlvbiBMaigpe31mdW5jdGlvbiBNaigpe31mdW5jdGlvbiBZWigpe31mdW5jdGlvbiBYWigpe31mdW5jdGlvbiBRWigpe31mdW5jdGlvbiBKWigpe31mdW5jdGlvbiBaWigpe31mdW5jdGlvbiBEaigpe31mdW5jdGlvbiBlZWUoKXt9ZnVuY3Rpb24gdGVlKCl7fWZ1bmN0aW9uIG5lZSgpe31mdW5jdGlvbiByZWUoKXt9ZnVuY3Rpb24gSWooKXt9ZnVuY3Rpb24gd1MoKXt9ZnVuY3Rpb24gaWVlKCl7fWZ1bmN0aW9uIHNlZSgpe31mdW5jdGlvbiBPaigpe31mdW5jdGlvbiBhZWUoKXt9ZnVuY3Rpb24gb2VlKCl7fWZ1bmN0aW9uIGNlZSgpe31mdW5jdGlvbiB1ZWUoKXt9ZnVuY3Rpb24gbGVlKCl7fWZ1bmN0aW9uIGhlZSgpe31mdW5jdGlvbiBOaigpe31mdW5jdGlvbiBmZWUoKXt9ZnVuY3Rpb24gUGooKXt9ZnVuY3Rpb24gZGVlKCl7fWZ1bmN0aW9uIGdlZSgpe31mdW5jdGlvbiBwZWUoKXt9ZnVuY3Rpb24geVMoKXt9ZnVuY3Rpb24gYmVlKCl7fWZ1bmN0aW9uIHhTKCl7fWZ1bmN0aW9uIG1lZSgpe31mdW5jdGlvbiBCaigpe31mdW5jdGlvbiBGaigpe31mdW5jdGlvbiBSaigpe31mdW5jdGlvbiBqaigpe31mdW5jdGlvbiBHdigpe31mdW5jdGlvbiAkaigpe31mdW5jdGlvbiB6aigpe31mdW5jdGlvbiBxaigpe31mdW5jdGlvbiBIaigpe31mdW5jdGlvbiB2ZWUoKXt9ZnVuY3Rpb24gaTgoKXt9ZnVuY3Rpb24gZEkoKXt9ZnVuY3Rpb24gZzUoKXt9ZnVuY3Rpb24gd2VlKCl7fWZ1bmN0aW9uIHllZSgpe31mdW5jdGlvbiBrUygpe31mdW5jdGlvbiBWaigpe31mdW5jdGlvbiB4ZWUoKXt9ZnVuY3Rpb24ga2VlKCl7fWZ1bmN0aW9uIEVlZSgpe31mdW5jdGlvbiBUZWUoKXt9ZnVuY3Rpb24gQ2VlKCl7fWZ1bmN0aW9uIFNlZSgpe31mdW5jdGlvbiBfZWUoKXt9ZnVuY3Rpb24gQWVlKCl7fWZ1bmN0aW9uIExlZSgpe31mdW5jdGlvbiBNZWUoKXt9ZnVuY3Rpb24gRVMoKXt9ZnVuY3Rpb24gVWooKXt9ZnVuY3Rpb24gRGVlKCl7fWZ1bmN0aW9uIEllZSgpe31mdW5jdGlvbiBPZWUoKXt9ZnVuY3Rpb24gTmVlKCl7fWZ1bmN0aW9uIFBlZSgpe31mdW5jdGlvbiBHaigpe31mdW5jdGlvbiBLaigpe31mdW5jdGlvbiBCZWUoKXt9ZnVuY3Rpb24gV2ooKXt9ZnVuY3Rpb24gWWooKXt9ZnVuY3Rpb24gRmVlKCl7fWZ1bmN0aW9uIFJlZSgpe31mdW5jdGlvbiBqZWUoKXt9ZnVuY3Rpb24gJGVlKCl7fWZ1bmN0aW9uIHplZSgpe31mdW5jdGlvbiBxZWUoKXt9ZnVuY3Rpb24gSGVlKCl7fWZ1bmN0aW9uIFZlZSgpe31mdW5jdGlvbiBnSSgpe31mdW5jdGlvbiBVZWUoKXt9ZnVuY3Rpb24gWDkoKXt9ZnVuY3Rpb24gWGooKXt9ZnVuY3Rpb24gR2VlKCl7fWZ1bmN0aW9uIEtlZSgpe31mdW5jdGlvbiBXZWUoKXt9ZnVuY3Rpb24gWWVlKCl7fWZ1bmN0aW9uIFhlZSgpe31mdW5jdGlvbiBRZWUoKXt9ZnVuY3Rpb24gSmVlKCl7fWZ1bmN0aW9uIFplZSgpe31mdW5jdGlvbiBldGUoKXt9ZnVuY3Rpb24gdHRlKCl7fWZ1bmN0aW9uIG50ZSgpe31mdW5jdGlvbiBydGUoKXt9ZnVuY3Rpb24gaXRlKCl7fWZ1bmN0aW9uIHN0ZSgpe31mdW5jdGlvbiBhdGUoKXt9ZnVuY3Rpb24gczgoKXt9ZnVuY3Rpb24gUWooKXt9ZnVuY3Rpb24gb3RlKCl7fWZ1bmN0aW9uIGN0ZSgpe31mdW5jdGlvbiB1dGUoKXt9ZnVuY3Rpb24gSmooKXt9ZnVuY3Rpb24gbHRlKCl7fWZ1bmN0aW9uIFRTKCl7fWZ1bmN0aW9uIGh0ZSgpe31mdW5jdGlvbiBmdGUoKXt9ZnVuY3Rpb24gZHRlKCl7fWZ1bmN0aW9uIGd0ZSgpe31mdW5jdGlvbiBwdGUoKXt9ZnVuY3Rpb24gYnRlKCl7fWZ1bmN0aW9uIG10ZSgpe31mdW5jdGlvbiB2dGUoKXt9ZnVuY3Rpb24gd3RlKCl7fWZ1bmN0aW9uIHl0ZSgpe31mdW5jdGlvbiBhOCgpe31mdW5jdGlvbiB4dGUoKXt9ZnVuY3Rpb24ga3RlKCl7fWZ1bmN0aW9uIEV0ZSgpe31mdW5jdGlvbiBUdGUoKXt9ZnVuY3Rpb24gQ3RlKCl7fWZ1bmN0aW9uIFN0ZSgpe31mdW5jdGlvbiBfdGUoKXt9ZnVuY3Rpb24gQXRlKCl7fWZ1bmN0aW9uIENTKCl7fWZ1bmN0aW9uIEx0ZSgpe31mdW5jdGlvbiBNdGUoKXt9ZnVuY3Rpb24gRHRlKCl7fWZ1bmN0aW9uIEl0ZSgpe31mdW5jdGlvbiBPdGUoKXt9ZnVuY3Rpb24gTnRlKCl7fWZ1bmN0aW9uIFB0ZSgpe31mdW5jdGlvbiBCdGUoKXt9ZnVuY3Rpb24gbzgoKXt9ZnVuY3Rpb24gWmooKXt9ZnVuY3Rpb24gRnRlKCl7fWZ1bmN0aW9uIHBJKCl7fWZ1bmN0aW9uIFJ0ZSgpe31mdW5jdGlvbiBqdGUoKXt9ZnVuY3Rpb24gJHRlKCl7fWZ1bmN0aW9uIHp0ZSgpe31mdW5jdGlvbiBxdGUoKXt9ZnVuY3Rpb24gSHRlKCl7fWZ1bmN0aW9uIFZ0ZSgpe31mdW5jdGlvbiBlJCgpe31mdW5jdGlvbiBVdGUoKXt9ZnVuY3Rpb24gdCQoKXt9ZnVuY3Rpb24gR3RlKCl7fWZ1bmN0aW9uIG4kKCl7fWZ1bmN0aW9uIHIkKCl7fWZ1bmN0aW9uIGkkKCl7fWZ1bmN0aW9uIEt0ZSgpe31mdW5jdGlvbiBXdGUoKXt9ZnVuY3Rpb24gcyQoKXt9ZnVuY3Rpb24gWXRlKCl7fWZ1bmN0aW9uIGEkKCl7fWZ1bmN0aW9uIFh0ZSgpe31mdW5jdGlvbiBRdGUoKXt9ZnVuY3Rpb24gYkkoKXt9ZnVuY3Rpb24gSnRlKCl7fWZ1bmN0aW9uIFp0ZSgpe31mdW5jdGlvbiBlbmUoKXt9ZnVuY3Rpb24gdG5lKCl7fWZ1bmN0aW9uIG5uZSgpe31mdW5jdGlvbiBvJCgpe31mdW5jdGlvbiBybmUoKXt9ZnVuY3Rpb24gaW5lKCl7fWZ1bmN0aW9uIHNuZSgpe31mdW5jdGlvbiBwd2UoKXt9ZnVuY3Rpb24gYW5lKCl7fWZ1bmN0aW9uIG9uZSgpe31mdW5jdGlvbiBjbmUoKXt9ZnVuY3Rpb24gdW5lKCl7fWZ1bmN0aW9uIGxuZSgpe31mdW5jdGlvbiBobmUoKXt9ZnVuY3Rpb24gZm5lKCl7fWZ1bmN0aW9uIGRuZSgpe31mdW5jdGlvbiBnbmUoKXt9ZnVuY3Rpb24gcG5lKCl7fWZ1bmN0aW9uIGJuZSgpe31mdW5jdGlvbiBtbmUoKXt9ZnVuY3Rpb24gdm5lKCl7fWZ1bmN0aW9uIHduZSgpe31mdW5jdGlvbiB5bmUoKXt9ZnVuY3Rpb24geG5lKCl7fWZ1bmN0aW9uIGZ1KCl7fWZ1bmN0aW9uIGtuZSgpe31mdW5jdGlvbiBTUygpe31mdW5jdGlvbiBSYygpe31mdW5jdGlvbiBQdSgpe31mdW5jdGlvbiBocygpe31mdW5jdGlvbiBtSSgpe31mdW5jdGlvbiBFbmUoKXt9ZnVuY3Rpb24gVG5lKCl7fWZ1bmN0aW9uIENuZSgpe31mdW5jdGlvbiBjOCgpe31mdW5jdGlvbiB5bSgpe31mdW5jdGlvbiBROSgpe31mdW5jdGlvbiBTbmUoKXt9ZnVuY3Rpb24gdkkoKXt9ZnVuY3Rpb24gX25lKCl7fWZ1bmN0aW9uIEFuZSgpe31mdW5jdGlvbiBMbmUoKXt9ZnVuY3Rpb24gYyQoKXt9ZnVuY3Rpb24gTW5lKCl7fWZ1bmN0aW9uIERuZSgpe31mdW5jdGlvbiB3SSgpe31mdW5jdGlvbiBJbmUoKXt9ZnVuY3Rpb24gdWgoKXt9ZnVuY3Rpb24gZ2woKXt9ZnVuY3Rpb24gdSQoKXt9ZnVuY3Rpb24gT25lKCl7fWZ1bmN0aW9uIE5uZSgpe31mdW5jdGlvbiBleSgpe31mdW5jdGlvbiBwNSgpe31mdW5jdGlvbiB0eSgpe31mdW5jdGlvbiBScCgpe31mdW5jdGlvbiB1OCgpe31mdW5jdGlvbiB5SSgpe31mdW5jdGlvbiBsJCgpe31mdW5jdGlvbiBoJCgpe31mdW5jdGlvbiBQbmUoKXt9ZnVuY3Rpb24geDEoKXt9ZnVuY3Rpb24gZiQoKXt9ZnVuY3Rpb24gbnkoKXt9ZnVuY3Rpb24gSjkoKXt9ZnVuY3Rpb24geEkoKXt9ZnVuY3Rpb24gbDgoKXt9ZnVuY3Rpb24gVzIoKXt9ZnVuY3Rpb24gZCQoKXt9ZnVuY3Rpb24gZyQoKXt9ZnVuY3Rpb24gcCQoKXt9ZnVuY3Rpb24gQm5lKCl7fWZ1bmN0aW9uIGg4KCl7fWZ1bmN0aW9uIHJ5KCl7fWZ1bmN0aW9uIGpwKCl7fWZ1bmN0aW9uIFkyKCl7fWZ1bmN0aW9uIGI1KCl7fWZ1bmN0aW9uIFo5KCl7fWZ1bmN0aW9uIF9TKCl7fWZ1bmN0aW9uIGtJKCl7fWZ1bmN0aW9uIEZuZSgpe31mdW5jdGlvbiBSbmUoKXt9ZnVuY3Rpb24gYiQoKXt9ZnVuY3Rpb24gbSQoKXt9ZnVuY3Rpb24gVXQoKXt9ZnVuY3Rpb24gZWsoKXt9ZnVuY3Rpb24gdiQoKXt9ZnVuY3Rpb24gdyQoKXt9ZnVuY3Rpb24gam5lKCl7fWZ1bmN0aW9uIHRrKCl7fWZ1bmN0aW9uIG5rKCl7fWZ1bmN0aW9uIHkkKCl7fWZ1bmN0aW9uICRuZSgpe31mdW5jdGlvbiB6bmUoKXt9ZnVuY3Rpb24gcW5lKCl7fWZ1bmN0aW9uIEhuZSgpe31mdW5jdGlvbiBWbmUoKXt9ZnVuY3Rpb24gVW5lKCl7fWZ1bmN0aW9uIEVJKCl7fWZ1bmN0aW9uIEduZSgpe31mdW5jdGlvbiBLbmUoKXt9ZnVuY3Rpb24geCQoKXt9ZnVuY3Rpb24gQVMoKXt9ZnVuY3Rpb24gV25lKCl7fWZ1bmN0aW9uIFRJKCl7fWZ1bmN0aW9uIHJrKCl7fWZ1bmN0aW9uIGlrKCl7fWZ1bmN0aW9uIHNrKCl7fWZ1bmN0aW9uIGskKCl7fWZ1bmN0aW9uIFluZSgpe31mdW5jdGlvbiBFJCgpe31mdW5jdGlvbiBUJCgpe31mdW5jdGlvbiBYbmUoKXt9ZnVuY3Rpb24gTFMoKXt9ZnVuY3Rpb24gWDIoKXt9ZnVuY3Rpb24gQyQoKXt9ZnVuY3Rpb24gUyQoKXt9ZnVuY3Rpb24gTVMoKXt9ZnVuY3Rpb24gUW5lKCl7fWZ1bmN0aW9uIG01KCl7fWZ1bmN0aW9uIF8kKCl7fWZ1bmN0aW9uIENJKCl7fWZ1bmN0aW9uIFFjKCl7fWZ1bmN0aW9uIFNJKCl7fWZ1bmN0aW9uIF9JKCl7fWZ1bmN0aW9uIERTKCl7fWZ1bmN0aW9uIEpuZSgpe31mdW5jdGlvbiBabmUoKXt9ZnVuY3Rpb24gSVMoKXt9ZnVuY3Rpb24gZXJlKCl7fWZ1bmN0aW9uIE9TKCl7fWZ1bmN0aW9uIE5TKCl7fWZ1bmN0aW9uIEgwKCl7fWZ1bmN0aW9uIEFJKCl7fWZ1bmN0aW9uIExJKCl7fWZ1bmN0aW9uIGY4KCl7fWZ1bmN0aW9uIHRyZSgpe31mdW5jdGlvbiBucmUoKXt9ZnVuY3Rpb24gcnJlKCl7fWZ1bmN0aW9uIGlyZSgpe31mdW5jdGlvbiBYZCgpe31mdW5jdGlvbiBQUygpe31mdW5jdGlvbiBkOCgpe31mdW5jdGlvbiBrMSgpe31mdW5jdGlvbiBBJCgpe31mdW5jdGlvbiBMJCgpe31mdW5jdGlvbiBNJCgpe31mdW5jdGlvbiBEJCgpe31mdW5jdGlvbiBJJCgpe31mdW5jdGlvbiBPJCgpe31mdW5jdGlvbiBWMCgpe31mdW5jdGlvbiBubCgpe31mdW5jdGlvbiBzcmUoKXt9ZnVuY3Rpb24gYXJlKCl7fWZ1bmN0aW9uIG9yZSgpe31mdW5jdGlvbiBybCgpe31mdW5jdGlvbiBCUygpe31mdW5jdGlvbiBOJCgpe31mdW5jdGlvbiBQJCgpe31mdW5jdGlvbiBnOCgpe31mdW5jdGlvbiBjcmUoKXt9ZnVuY3Rpb24gYWsoKXt9ZnVuY3Rpb24gdXJlKCl7fWZ1bmN0aW9uIEIkKCl7fWZ1bmN0aW9uIGxyZSgpe31mdW5jdGlvbiBocmUoKXt9ZnVuY3Rpb24gRlMoKXt9ZnVuY3Rpb24gRiQoKXt9ZnVuY3Rpb24gTUkoKXt9ZnVuY3Rpb24gUlMoKXt9ZnVuY3Rpb24gZnJlKCl7fWZ1bmN0aW9uIGRyZSgpe31mdW5jdGlvbiBESSgpe31mdW5jdGlvbiBqUygpe31mdW5jdGlvbiBFMSgpe31mdW5jdGlvbiBvaygpe31mdW5jdGlvbiBncmUoKXt9ZnVuY3Rpb24gY2soKXt9ZnVuY3Rpb24gSUkoKXt9ZnVuY3Rpb24geG0oKXt9ZnVuY3Rpb24gJFMoKXt9ZnVuY3Rpb24gT0koKXt9ZnVuY3Rpb24gVTAoKXt9ZnVuY3Rpb24gelMoKXt9ZnVuY3Rpb24gVDEoKXt9ZnVuY3Rpb24gQzEoKXt9ZnVuY3Rpb24gcHJlKCl7fWZ1bmN0aW9uIGJyZSgpe31mdW5jdGlvbiB2NSgpe31mdW5jdGlvbiB1aygpe31mdW5jdGlvbiBsaygpe31mdW5jdGlvbiBxUygpe31mdW5jdGlvbiBtcmUoKXt9ZnVuY3Rpb24gdnJlKCl7fWZ1bmN0aW9uIHA4KCl7fWZ1bmN0aW9uIFIkKCl7fWZ1bmN0aW9uIGokKCl7fWZ1bmN0aW9uIHdyZSgpe31mdW5jdGlvbiAkJCgpe31mdW5jdGlvbiB5cmUoKXt9ZnVuY3Rpb24geiQoKXt9ZnVuY3Rpb24gTkkoKXt9ZnVuY3Rpb24geHJlKCl7fWZ1bmN0aW9uIEhTKCl7fWZ1bmN0aW9uIGtyZSgpe31mdW5jdGlvbiBFcmUoKXt9ZnVuY3Rpb24gVHJlKCl7fWZ1bmN0aW9uIENyZSgpe31mdW5jdGlvbiBTcmUoKXt9ZnVuY3Rpb24gcSQoKXt9ZnVuY3Rpb24gX3JlKCl7fWZ1bmN0aW9uIEFyZSgpe31mdW5jdGlvbiBMcmUoKXt9ZnVuY3Rpb24gSCQoKXt9ZnVuY3Rpb24gTXJlKCl7fWZ1bmN0aW9uIERyZSgpe31mdW5jdGlvbiBWUygpe31mdW5jdGlvbiBJcmUoKXt9ZnVuY3Rpb24gT3JlKCl7fWZ1bmN0aW9uIE5yZSgpe31mdW5jdGlvbiBQcmUoKXt9ZnVuY3Rpb24gQnJlKCl7fWZ1bmN0aW9uIEZyZSgpe31mdW5jdGlvbiBWJCgpe31mdW5jdGlvbiBScmUoKXt9ZnVuY3Rpb24gVSQoKXt9ZnVuY3Rpb24ganJlKCl7fWZ1bmN0aW9uIFBJKCl7fWZ1bmN0aW9uICRyZSgpe31mdW5jdGlvbiBHJCgpe31mdW5jdGlvbiB6cmUoKXt9ZnVuY3Rpb24gSyQoKXt9ZnVuY3Rpb24gcXJlKCl7fWZ1bmN0aW9uIFckKCl7fWZ1bmN0aW9uIFkkKCl7fWZ1bmN0aW9uIFgkKCl7fWZ1bmN0aW9uIEJJKCl7fWZ1bmN0aW9uIHc1KCl7fWZ1bmN0aW9uIFVTKCl7fWZ1bmN0aW9uIFMxKCl7fWZ1bmN0aW9uIFEkKCl7fWZ1bmN0aW9uIGhrKCl7fWZ1bmN0aW9uIEZJKCl7fWZ1bmN0aW9uIEokKCl7fWZ1bmN0aW9uIGttKCl7fWZ1bmN0aW9uIFokKCl7fWZ1bmN0aW9uIEdTKCl7b18oKX1mdW5jdGlvbiBIcmUoKXtpTygpfWZ1bmN0aW9uIGV6KCl7ZFUoKX1mdW5jdGlvbiB0eigpe0xjZSgpfWZ1bmN0aW9uIG56KCl7SUEoKX1mdW5jdGlvbiBLUygpe1h4ZSgpfWZ1bmN0aW9uIFdTKCl7YjAoKX1mdW5jdGlvbiByeigpe2F4ZSgpfWZ1bmN0aW9uIGl6KCl7Vk4oKX1mdW5jdGlvbiBiOCgpe3NPKCl9ZnVuY3Rpb24gS3YoKXtPTygpfWZ1bmN0aW9uIGZrKCl7aGV0KCl9ZnVuY3Rpb24gc3ooKXtseCgpfWZ1bmN0aW9uIFZyZSgpeyR1dCgpfWZ1bmN0aW9uIGF6KCl7czdlKCl9ZnVuY3Rpb24gbTgoKXtBb3QoKX1mdW5jdGlvbiBSSSgpe2E3ZSgpfWZ1bmN0aW9uIG96KCl7bWx0KCl9ZnVuY3Rpb24gVXJlKCl7X290KCl9ZnVuY3Rpb24gY3ooKXtURSgpfWZ1bmN0aW9uIFlTKCl7ZWZ0KCl9ZnVuY3Rpb24gWFMoKXtaaHQoKX1mdW5jdGlvbiBqSSgpe0VjdCgpfWZ1bmN0aW9uIEdyZSgpe3RmdCgpfWZ1bmN0aW9uIEtyZSgpe0NiKCl9ZnVuY3Rpb24gV3JlKCl7ZXEoKX1mdW5jdGlvbiBZcmUoKXtZa2UoKX1mdW5jdGlvbiBYcmUoKXtOdCgpfWZ1bmN0aW9uIFFyZSgpe25mdCgpfWZ1bmN0aW9uIEpyZSgpe0xmdCgpfWZ1bmN0aW9uIFpyZSgpe0xvdCgpfWZ1bmN0aW9uIGVpZSgpe2VndCgpfWZ1bmN0aW9uIHRpZSgpe01vdCgpfWZ1bmN0aW9uIG5pZSgpe2dtdCgpfWZ1bmN0aW9uIHJpZSgpe185ZSgpfWZ1bmN0aW9uIGlpZSgpe3RwKCl9ZnVuY3Rpb24gc2llKCl7cDF0KCl9ZnVuY3Rpb24gdjgoKXtIYygpfWZ1bmN0aW9uIGFpZSgpe2pvdCgpfWZ1bmN0aW9uIGRrKCl7dXgoKX1mdW5jdGlvbiBDZigpe3VrZSgpfWZ1bmN0aW9uIG9pZSgpe1NiKCl9ZnVuY3Rpb24gZ2soKXtsa2UoKX1mdW5jdGlvbiBRUygpe3oxKCl9ZnVuY3Rpb24gY2llKCl7WU4oKX1mdW5jdGlvbiB1aWUoKXt0bGUoKX1mdW5jdGlvbiBsaWUoKXtsdWUoKX1mdW5jdGlvbiBTZigpe3BpdCgpfWZ1bmN0aW9uIGhpZSgpe1pIKCl9ZnVuY3Rpb24gZmllKCl7d1UoKX1mdW5jdGlvbiB1eigpe3BpKCl9ZnVuY3Rpb24gZGllKCl7UFYoKX1mdW5jdGlvbiBseigpe0I4ZSgpfWZ1bmN0aW9uIGh6KCl7bGNlKCl9ZnVuY3Rpb24gZnooKXt6VSgpfWZ1bmN0aW9uIGR6KCl7eGtlKCl9ZnVuY3Rpb24gbjAoZSl7bnIoZSl9ZnVuY3Rpb24gZ3ooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSlMoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gcHooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gYnooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZ2llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHBpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBteihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBiaWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdnooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gUTIoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbWllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHZpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiAkSShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB3aWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24geWllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHBrKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEoyKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHd6KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGJrKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHk1KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHpJKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHc4KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHFJKGUpe3RoaXMuYj1lfWZ1bmN0aW9uIHFnKGUpe3RoaXMuYz1lfWZ1bmN0aW9uIHhpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBpeShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5eihlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4eihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBISShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBWSShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBreihlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5OChlKXt0aGlzLmE9ZX1mdW5jdGlvbiBtayhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBraWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gRXooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gVHooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQ3ooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gU3ooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gamMoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdmsoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gd2soZSl7dGhpcy5hPWV9ZnVuY3Rpb24gJHAoKXt0aGlzLmE9W119ZnVuY3Rpb24gRWllKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gVGllKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gQ2llKGUsdCl7ZS5iPXR9ZnVuY3Rpb24gU2llKGUsdCl7ZS5iPXR9ZnVuY3Rpb24gX2llKGUsdCl7ZS5iPXR9ZnVuY3Rpb24gX3ooZSx0KXtlLmo9dH1mdW5jdGlvbiBid2UoZSx0KXtlLmc9dH1mdW5jdGlvbiBBeihlLHQpe2UuaT10fWZ1bmN0aW9uIEFpZShlLHQpe2UuYz10fWZ1bmN0aW9uIHg4KGUsdCl7ZS5jPXR9ZnVuY3Rpb24gbXdlKGUsdCl7ZS5kPXR9ZnVuY3Rpb24gazgoZSx0KXtlLmQ9dH1mdW5jdGlvbiB4KGUsdCl7ZS5rPXR9ZnVuY3Rpb24gbShlLHQpe2UuYz10fWZ1bmN0aW9uIGsoZSx0KXtlLmM9dH1mdW5jdGlvbiBTKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gTShlLHQpe2UuYT10fWZ1bmN0aW9uIE8oZSx0KXtlLmY9dH1mdW5jdGlvbiBOKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gJChlLHQpe2UuYj10fWZ1bmN0aW9uIEgoZSx0KXtlLmQ9dH1mdW5jdGlvbiBxKGUsdCl7ZS5pPXR9ZnVuY3Rpb24gWShlLHQpe2Uubz10fWZ1bmN0aW9uIFooZSx0KXtlLnI9dH1mdW5jdGlvbiBjZShlLHQpe2UuYT10fWZ1bmN0aW9uIHZlKGUsdCl7ZS5iPXR9ZnVuY3Rpb24gbWUoZSx0KXtlLmU9dH1mdW5jdGlvbiBMZShlLHQpe2UuZj10fWZ1bmN0aW9uIF9lKGUsdCl7ZS5nPXR9ZnVuY3Rpb24gRWUoZSx0KXtlLmU9dH1mdW5jdGlvbiBCZShlLHQpe2UuZj10fWZ1bmN0aW9uIFJlKGUsdCl7ZS5mPXR9ZnVuY3Rpb24gVmUoZSx0KXtlLmE9dH1mdW5jdGlvbiBjdChlLHQpe2UuYj10fWZ1bmN0aW9uIHN0KGUsdCl7ZS5uPXR9ZnVuY3Rpb24gWWUoZSx0KXtlLmE9dH1mdW5jdGlvbiBtdChlLHQpe2UuYz10fWZ1bmN0aW9uIEplKGUsdCl7ZS5jPXR9ZnVuY3Rpb24gTHQoZSx0KXtlLmM9dH1mdW5jdGlvbiBNdChlLHQpe2UuYT10fWZ1bmN0aW9uIHV0KGUsdCl7ZS5hPXR9ZnVuY3Rpb24gV3QoZSx0KXtlLmQ9dH1mdW5jdGlvbiBUdChlLHQpe2UuZD10fWZ1bmN0aW9uIF9uKGUsdCl7ZS5lPXR9ZnVuY3Rpb24gaG4oZSx0KXtlLmU9dH1mdW5jdGlvbiBZdChlLHQpe2UuZz10fWZ1bmN0aW9uIERuKGUsdCl7ZS5mPXR9ZnVuY3Rpb24gaXIoZSx0KXtlLmo9dH1mdW5jdGlvbiB2cihlLHQpe2UuYT10fWZ1bmN0aW9uIE5uKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gcHIoZSx0KXtlLmI9dH1mdW5jdGlvbiBFcihlKXtlLmI9ZS5hfWZ1bmN0aW9uIE1yKGUpe2UuYz1lLmQuZH1mdW5jdGlvbiBDcihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPcihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBXbihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBicihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBTcihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBOcihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBTaShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5cyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBwYShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNaShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBnaShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBmcyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBGcyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4cyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBScyhlKXt0aGlzLmI9ZX1mdW5jdGlvbiB5byhlKXt0aGlzLmI9ZX1mdW5jdGlvbiAkYShlKXt0aGlzLmI9ZX1mdW5jdGlvbiBEYShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBCbyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiB0cihlKXt0aGlzLmM9ZX1mdW5jdGlvbiBHKGUpe3RoaXMuYz1lfWZ1bmN0aW9uIEpuKGUpe3RoaXMuYz1lfWZ1bmN0aW9uIGtyKGUpe3RoaXMuZD1lfWZ1bmN0aW9uIGxyKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFZ0KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEhzKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHdyKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEVzKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGdvKGUpe3RoaXMuYT1lfWZ1bmN0aW9uICRjKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHphKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFNjKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGJhKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHhvKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGxoKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFdsKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFoyKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGViKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEcwKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHpwKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGZkKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFd2KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHN5KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEU4KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHg1KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFQ4KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFpTKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGs1KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFFkKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIF8xKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEpkKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFl2KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEVtKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEx6KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIExpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNaWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZV8oZSl7dGhpcy5hPWV9ZnVuY3Rpb24gRGllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIElpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBFNShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNeihlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5ayhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBVSShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB0XyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBEeihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBJeihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPaWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gcXAoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbl8oZSl7dGhpcy5hPWV9ZnVuY3Rpb24gR0koZSl7dGhpcy5hPWV9ZnVuY3Rpb24gVG0oZSl7dGhpcy5hPWV9ZnVuY3Rpb24gWmQoZSl7dGhpcy5lPWV9ZnVuY3Rpb24gVDUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24galdlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEM4KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHZ3ZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiAkV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24geldlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHFXZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBIV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gVldlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFVXZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBHV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gS1dlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFdXZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBZV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gWFdlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHd3ZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBRV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSldlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFpXZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBlWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG5ZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiByWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gaVllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHNZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBhWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gb1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGNZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB1WWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGhZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBmWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGdZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBwWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gYlllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG1ZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB2WWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gd1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHlZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4WWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24ga1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEVZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBUWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQ1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFNZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBfWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQVllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIExZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gRFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIElZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gTlllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFBZZShlKXt0aGlzLmM9ZX1mdW5jdGlvbiBCWWUoZSl7dGhpcy5iPWV9ZnVuY3Rpb24gRlllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFJZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBqWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gJFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHpZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBxWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFZZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBVWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gR1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEtZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBXWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gWVllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFhZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBRWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSlllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFpZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBlWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG5YZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiByWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gaVhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHNYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBhWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gb1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGNYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB1WGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSGcoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQzUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGhYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBmWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGdYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBwWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gYlhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG1YZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB2WGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gd1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHlYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4WGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24ga1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEVYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBUWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQ1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFNYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBfWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQVhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIExYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gRFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIElYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gTlhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFBYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPeihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBCWGUoZSl7dGhpcy5mPWV9ZnVuY3Rpb24gRlhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFJYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBqWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gJFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHpYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBxWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFZYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBVWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gR1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEtYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBXWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gWVhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFhYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBRWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSlhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFpYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBlUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdFFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG5RZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiByUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gaVFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHNRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBhUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gb1FlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGNRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB1UWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbFFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIE5pZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5d2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gVWkoZSl7dGhpcy5iPWV9ZnVuY3Rpb24gaFFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGZRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBkUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZ1FlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHBRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBiUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbVFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHZRZShlKXt0aGlzLmI9ZX1mdW5jdGlvbiB3UWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gS0koZSl7dGhpcy5hPWV9ZnVuY3Rpb24geVFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHhRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4d2UoZSl7dGhpcy5jPWV9ZnVuY3Rpb24gTnooZSl7dGhpcy5lPWV9ZnVuY3Rpb24gUHooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQnooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gUGllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGtRZShlKXt0aGlzLmQ9ZX1mdW5jdGlvbiBFUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24ga3dlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEV3ZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBYdihlKXt0aGlzLmU9ZX1mdW5jdGlvbiBEY24oKXt0aGlzLmE9MH1mdW5jdGlvbiBQcigpe05sKHRoaXMpfWZ1bmN0aW9uIGJ0KCl7WXNlKHRoaXMpfWZ1bmN0aW9uIEJpZSgpe2NhdCh0aGlzKX1mdW5jdGlvbiBUUWUoKXt9ZnVuY3Rpb24gUXYoKXt0aGlzLmM9TFBlfWZ1bmN0aW9uIENRZShlLHQpe2UuYis9dH1mdW5jdGlvbiBJY24oZSx0KXt0LldiKGUpfWZ1bmN0aW9uIE9jbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIE5jbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIFBjbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIEJjbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIEZjbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIHVlKGUpe3JldHVybiBlLmV9ZnVuY3Rpb24gUmNuKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gamNuKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gJGNuKCl7YzNlKCksd0luKCl9ZnVuY3Rpb24gemNuKGUpe2UuYi5PZihlLmUpfWZ1bmN0aW9uIFNRZShlKXtlLmI9bmV3IG5zZX1mdW5jdGlvbiByXyhlLHQpe2UuYj10LWUuYn1mdW5jdGlvbiBpXyhlLHQpe2UuYT10LWUuYX1mdW5jdGlvbiAkbihlLHQpe2UucHVzaCh0KX1mdW5jdGlvbiBfUWUoZSx0KXtlLnNvcnQodCl9ZnVuY3Rpb24gQVFlKGUsdCl7dC5qZChlLmEpfWZ1bmN0aW9uIHFjbihlLHQpe2xhKHQsZSl9ZnVuY3Rpb24gSGNuKGUsdCxuKXtlLllkKG4sdCl9ZnVuY3Rpb24gV0koZSx0KXtlLmU9dCx0LmI9ZX1mdW5jdGlvbiBUd2UoZSl7d2QoKSx0aGlzLmE9ZX1mdW5jdGlvbiBMUWUoZSl7d2QoKSx0aGlzLmE9ZX1mdW5jdGlvbiBNUWUoZSl7d2QoKSx0aGlzLmE9ZX1mdW5jdGlvbiBGaWUoZSl7d3coKSx0aGlzLmE9ZX1mdW5jdGlvbiBEUWUoZSl7WGsoKSxTMGUubGUoZSl9ZnVuY3Rpb24gQ3dlKCl7Q3dlPVUsbmV3IFByfWZ1bmN0aW9uIENtKCl7Sm50LmNhbGwodGhpcyl9ZnVuY3Rpb24gU3dlKCl7Sm50LmNhbGwodGhpcyl9ZnVuY3Rpb24gX3dlKCl7Q20uY2FsbCh0aGlzKX1mdW5jdGlvbiBSaWUoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIElRZSgpe0NtLmNhbGwodGhpcyl9ZnVuY3Rpb24gWUkoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHBsKCl7Q20uY2FsbCh0aGlzKX1mdW5jdGlvbiBTOCgpe0NtLmNhbGwodGhpcyl9ZnVuY3Rpb24gUXIoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFhoKCl7Q20uY2FsbCh0aGlzKX1mdW5jdGlvbiBPUWUoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIF9jKCl7Q20uY2FsbCh0aGlzKX1mdW5jdGlvbiBOUWUoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFBRZSgpe3RoaXMuYT10aGlzfWZ1bmN0aW9uIEZ6KCl7dGhpcy5CYnw9MjU2fWZ1bmN0aW9uIEJRZSgpe3RoaXMuYj1uZXcgVXR0fWZ1bmN0aW9uIGF5KGUsdCl7ZS5sZW5ndGg9dH1mdW5jdGlvbiBSeihlLHQpe3Z0KGUuYSx0KX1mdW5jdGlvbiBWY24oZSx0KXtKeGUoZS5jLHQpfWZ1bmN0aW9uIFVjbihlLHQpe25hKGUuYix0KX1mdW5jdGlvbiBHY24oZSx0KXtvVShlLmEsdCl9ZnVuY3Rpb24gS2NuKGUsdCl7RmNlKGUuYSx0KX1mdW5jdGlvbiB4ayhlLHQpe05pKGUuZSx0KX1mdW5jdGlvbiBfOChlKXtFVShlLmMsZS5iKX1mdW5jdGlvbiBXY24oZSx0KXtlLmtjKCkuTmIodCl9ZnVuY3Rpb24gQXdlKGUpe3RoaXMuYT0kNG4oZSl9ZnVuY3Rpb24gS3MoKXt0aGlzLmE9bmV3IFByfWZ1bmN0aW9uIEZRZSgpe3RoaXMuYT1uZXcgUHJ9ZnVuY3Rpb24gTHdlKCl7dGhpcy5hPW5ldyBuZXR9ZnVuY3Rpb24ganooKXt0aGlzLmE9bmV3IGJ0fWZ1bmN0aW9uIGppZSgpe3RoaXMuYT1uZXcgYnR9ZnVuY3Rpb24gTXdlKCl7dGhpcy5hPW5ldyBidH1mdW5jdGlvbiBfZigpe3RoaXMuYT1uZXcgcG19ZnVuY3Rpb24gU20oKXt0aGlzLmE9bmV3IE51dH1mdW5jdGlvbiBEd2UoKXt0aGlzLmE9bmV3IGJtfWZ1bmN0aW9uIEl3ZSgpe3RoaXMuYT1uZXcgU290fWZ1bmN0aW9uIE93ZSgpe3RoaXMuYT1uZXcgUnJ0fWZ1bmN0aW9uIFJRZSgpe3RoaXMuYT1uZXcgYnR9ZnVuY3Rpb24galFlKCl7dGhpcy5hPW5ldyBidH1mdW5jdGlvbiAkUWUoKXt0aGlzLmE9bmV3IGJ0fWZ1bmN0aW9uIE53ZSgpe3RoaXMuYT1uZXcgYnR9ZnVuY3Rpb24gelFlKCl7dGhpcy5kPW5ldyBidH1mdW5jdGlvbiBxUWUoKXt0aGlzLmE9bmV3IEdvdH1mdW5jdGlvbiBIUWUoKXt0aGlzLmE9bmV3IEtzfWZ1bmN0aW9uIFZRZSgpe3RoaXMuYT1uZXcgUHJ9ZnVuY3Rpb24gVVFlKCl7dGhpcy5iPW5ldyBQcn1mdW5jdGlvbiBHUWUoKXt0aGlzLmI9bmV3IGJ0fWZ1bmN0aW9uIFB3ZSgpe3RoaXMuZT1uZXcgYnR9ZnVuY3Rpb24gS1FlKCl7dGhpcy5hPW5ldyBLcmV9ZnVuY3Rpb24gV1FlKCl7dGhpcy5kPW5ldyBidH1mdW5jdGlvbiBZUWUoKXtRYXQuY2FsbCh0aGlzKX1mdW5jdGlvbiBYUWUoKXtRYXQuY2FsbCh0aGlzKX1mdW5jdGlvbiBRUWUoKXtidC5jYWxsKHRoaXMpfWZ1bmN0aW9uIEJ3ZSgpe193ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIEZ3ZSgpe2p6LmNhbGwodGhpcyl9ZnVuY3Rpb24gSlFlKCl7VnEuY2FsbCh0aGlzKX1mdW5jdGlvbiBaUWUoKXtOd2UuY2FsbCh0aGlzKX1mdW5jdGlvbiBzXygpe1RRZS5jYWxsKHRoaXMpfWZ1bmN0aW9uICRpZSgpe3NfLmNhbGwodGhpcyl9ZnVuY3Rpb24gQTgoKXtUUWUuY2FsbCh0aGlzKX1mdW5jdGlvbiBSd2UoKXtBOC5jYWxsKHRoaXMpfWZ1bmN0aW9uIGVKZSgpe3F3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHRKZSgpe3F3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIG5KZSgpe3F3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHJKZSgpe0h3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGFfKCl7V25lLmNhbGwodGhpcyl9ZnVuY3Rpb24gandlKCl7V25lLmNhbGwodGhpcyl9ZnVuY3Rpb24gYmwoKXtvcy5jYWxsKHRoaXMpfWZ1bmN0aW9uIGlKZSgpe3dKZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHNKZSgpe3dKZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGFKZSgpe1ByLmNhbGwodGhpcyl9ZnVuY3Rpb24gb0plKCl7UHIuY2FsbCh0aGlzKX1mdW5jdGlvbiBjSmUoKXtQci5jYWxsKHRoaXMpfWZ1bmN0aW9uIHppZSgpe3NmdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIHVKZSgpe0tzLmNhbGwodGhpcyl9ZnVuY3Rpb24gbEplKCl7RnouY2FsbCh0aGlzKX1mdW5jdGlvbiBxaWUoKXtreWUuY2FsbCh0aGlzKX1mdW5jdGlvbiAkd2UoKXtQci5jYWxsKHRoaXMpfWZ1bmN0aW9uIEhpZSgpe2t5ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFZpZSgpe1ByLmNhbGwodGhpcyl9ZnVuY3Rpb24gaEplKCl7UHIuY2FsbCh0aGlzKX1mdW5jdGlvbiB6d2UoKXttNS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGZKZSgpe3p3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGRKZSgpe201LmNhbGwodGhpcyl9ZnVuY3Rpb24gZ0plKCl7SiQuY2FsbCh0aGlzKX1mdW5jdGlvbiBxd2UoKXt0aGlzLmE9bmV3IEtzfWZ1bmN0aW9uIHBKZSgpe3RoaXMuYT1uZXcgUHJ9ZnVuY3Rpb24gYkplKCl7dGhpcy5hPW5ldyBidH1mdW5jdGlvbiBId2UoKXt0aGlzLmE9bmV3IFByfWZ1bmN0aW9uIEw4KCl7dGhpcy5hPW5ldyBvc31mdW5jdGlvbiBtSmUoKXt0aGlzLmo9bmV3IGJ0fWZ1bmN0aW9uIHZKZSgpe3RoaXMuYT1uZXcgYlplfWZ1bmN0aW9uIHdKZSgpe3RoaXMuYT1uZXcgUW5lfWZ1bmN0aW9uIFZ3ZSgpe3RoaXMuYT1uZXcgaHN9ZnVuY3Rpb24gb18oKXtvXz1VLHYwZT1uZXcgX31mdW5jdGlvbiBVaWUoKXtVaWU9VSx3MGU9bmV3IHhKZX1mdW5jdGlvbiBHaWUoKXtHaWU9VSx5MGU9bmV3IHlKZX1mdW5jdGlvbiB5SmUoKXtway5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIHhKZSgpe3BrLmNhbGwodGhpcywiIil9ZnVuY3Rpb24ga0plKGUpe0FodC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gRUplKGUpe0FodC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gVXdlKGUpe3Z6LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBHd2UoZSl7VVplLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBZY24oZSl7VVplLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBYY24oZSl7R3dlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBRY24oZSl7R3dlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBKY24oZSl7R3dlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBUSmUoZSl7VG9lLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBDSmUoZSl7VG9lLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBTSmUoZSl7YWl0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBfSmUoZSl7cDNlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBjXyhlKXtYei5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gS3dlKGUpe1h6LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBBSmUoZSl7WHouY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIFd3ZShlKXt5OW4uY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIFl3ZShlKXtXd2UuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIEFjKGUpe19zdC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gTEplKGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBNOCgpe3drLmNhbGwodGhpcyx7fSl9ZnVuY3Rpb24gTUplKCl7TUplPVUsZDZ0PW5ldyBXfWZ1bmN0aW9uICR6KCl7JHo9VSxFMGU9bmV3IEFudH1mdW5jdGlvbiBESmUoKXtESmU9VSxVU2U9bmV3IFR9ZnVuY3Rpb24gWHdlKCl7WHdlPVUsR1NlPW5ldyBhZX1mdW5jdGlvbiB6eigpe3p6PVUsTkw9bmV3IGRlfWZ1bmN0aW9uIEtpZShlKXtPaygpLHRoaXMuYT1lfWZ1bmN0aW9uIFdpZShlKXtFN2UoKSx0aGlzLmE9ZX1mdW5jdGlvbiBKdihlKXtJYWUoKSx0aGlzLmY9ZX1mdW5jdGlvbiBZaWUoZSl7SWFlKCksdGhpcy5mPWV9ZnVuY3Rpb24gSUplKGUpe2dpdCgpLHRoaXMuYT1lfWZ1bmN0aW9uIE9KZShlKXtlLmI9bnVsbCxlLmM9MH1mdW5jdGlvbiBaY24oZSx0KXtlLmU9dCxnYnQoZSx0KX1mdW5jdGlvbiBldW4oZSx0KXtlLmE9dCxva24oZSl9ZnVuY3Rpb24gWGllKGUsdCxuKXtlLmFbdC5nXT1ufWZ1bmN0aW9uIHR1bihlLHQsbil7azhuKG4sZSx0KX1mdW5jdGlvbiBudW4oZSx0KXtRZm4odC5pLGUubil9ZnVuY3Rpb24gTkplKGUsdCl7eHluKGUpLkNkKHQpfWZ1bmN0aW9uIHJ1bihlLHQpe2UuYS5lYygpLk1jKHQpfWZ1bmN0aW9uIFBKZShlLHQpe3JldHVybiBlLmctdC5nfWZ1bmN0aW9uIGl1bihlLHQpe3JldHVybiBlKmUvdH1mdW5jdGlvbiBSdChlKXtyZXR1cm4gbnIoZSksZX1mdW5jdGlvbiB6ZShlKXtyZXR1cm4gbnIoZSksZX1mdW5jdGlvbiBYSShlKXtyZXR1cm4gbnIoZSksZX1mdW5jdGlvbiBzdW4oZSl7cmV0dXJuIG5ldyB2ayhlKX1mdW5jdGlvbiBhdW4oZSl7cmV0dXJuIG5ldyB5eShlKX1mdW5jdGlvbiBRd2UoZSl7cmV0dXJuIG5yKGUpLGV9ZnVuY3Rpb24gb3VuKGUpe3JldHVybiBucihlKSxlfWZ1bmN0aW9uIHF6KGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiB0YyhlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gQkplKGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBRaWUoZSl7X3N0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBrayhlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gWW4oZSl7QWMuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIG5jKGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBGSmUoZSl7QWMuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIEQ4KGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBIcChlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gVnAoZSl7QWMuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIEk4KGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBkZChlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSmllKGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiByaShlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSWwoZSl7bnIoZSksdGhpcy5hPWV9ZnVuY3Rpb24gSndlKGUpe3JldHVybiBVbShlKSxlfWZ1bmN0aW9uIHVfKGUpe2w1ZShlLGUubGVuZ3RoKX1mdW5jdGlvbiBsXyhlKXtyZXR1cm4gZS5iPT1lLmN9ZnVuY3Rpb24gb3koZSl7cmV0dXJuISFlJiZlLmJ9ZnVuY3Rpb24gY3VuKGUpe3JldHVybiEhZSYmZS5rfWZ1bmN0aW9uIHV1bihlKXtyZXR1cm4hIWUmJmUuan1mdW5jdGlvbiBsdW4oZSx0LG4pe2UuYy5FZih0LG4pfWZ1bmN0aW9uIFJKZShlLHQpe2UuYmUodCksdC5hZShlKX1mdW5jdGlvbiBPOChlKXt3ZCgpLHRoaXMuYT1YcihlKX1mdW5jdGlvbiBaaWUoKXt0aGlzLmE9ZWkoWHIoQ28pKX1mdW5jdGlvbiBqSmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIGh1bigpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gWndlKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiAkSmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIGZ1bigpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gZHVuKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBIeigpe0h6PVUsWGsoKX1mdW5jdGlvbiBVcCgpe05yLmNhbGwodGhpcywiIil9ZnVuY3Rpb24gaF8oKXtOci5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIHRiKCl7TnIuY2FsbCh0aGlzLCIiKX1mdW5jdGlvbiBTNSgpe05yLmNhbGwodGhpcywiIil9ZnVuY3Rpb24gZTNlKGUpe3RjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiB0M2UoZSl7dGMuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIGdkKGUpe1luLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBFayhlKXskYS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gekplKGUpe0VrLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBlc2UoZSl7anEuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIHRzZShlKXtOeWUuY2FsbCh0aGlzLGUsMCl9ZnVuY3Rpb24gbnNlKCl7RzVlLmNhbGwodGhpcywxMiwzKX1mdW5jdGlvbiBsZShlLHQpe3JldHVybiB5b3QoZSx0KX1mdW5jdGlvbiBWeihlLHQpe3JldHVybiBqb2UoZSx0KX1mdW5jdGlvbiBndW4oZSx0KXtyZXR1cm4gZS5hLXQuYX1mdW5jdGlvbiBwdW4oZSx0KXtyZXR1cm4gZS5hLXQuYX1mdW5jdGlvbiBidW4oZSx0KXtyZXR1cm4gZS5hLXQuYX1mdW5jdGlvbiBtdW4oZSx0KXtyZXR1cm4gdCBpbiBlLmF9ZnVuY3Rpb24gcUplKGUpe3JldHVybiBlLmE/ZS5iOjB9ZnVuY3Rpb24gdnVuKGUpe3JldHVybiBlLmE/ZS5iOjB9ZnVuY3Rpb24gd3VuKGUsdCxuKXt0LkNkKGUuYVtuXSl9ZnVuY3Rpb24geXVuKGUsdCxuKXt0LlBlKGUuYVtuXSl9ZnVuY3Rpb24geHVuKGUsdCl7ZS5iPW5ldyBFbyh0KX1mdW5jdGlvbiBrdW4oZSx0KXtyZXR1cm4gZS5iPXQsZX1mdW5jdGlvbiBISmUoZSx0KXtyZXR1cm4gZS5jPXQsZX1mdW5jdGlvbiBWSmUoZSx0KXtyZXR1cm4gZS5mPXQsZX1mdW5jdGlvbiBFdW4oZSx0KXtyZXR1cm4gZS5nPXQsZX1mdW5jdGlvbiBuM2UoZSx0KXtyZXR1cm4gZS5hPXQsZX1mdW5jdGlvbiByM2UoZSx0KXtyZXR1cm4gZS5mPXQsZX1mdW5jdGlvbiBUdW4oZSx0KXtyZXR1cm4gZS5rPXQsZX1mdW5jdGlvbiBpM2UoZSx0KXtyZXR1cm4gZS5hPXQsZX1mdW5jdGlvbiBDdW4oZSx0KXtyZXR1cm4gZS5lPXQsZX1mdW5jdGlvbiBzM2UoZSx0KXtyZXR1cm4gZS5lPXQsZX1mdW5jdGlvbiBTdW4oZSx0KXtyZXR1cm4gZS5mPXQsZX1mdW5jdGlvbiBfdW4oZSx0KXtlLmI9ITAsZS5kPXR9ZnVuY3Rpb24gQXVuKGUsdCl7cmV0dXJuIGUuYi10LmJ9ZnVuY3Rpb24gTHVuKGUsdCl7cmV0dXJuIGUuZy10Lmd9ZnVuY3Rpb24gTXVuKGUsdCl7cmV0dXJuIGU/MDp0LTF9ZnVuY3Rpb24gVUplKGUsdCl7cmV0dXJuIGU/MDp0LTF9ZnVuY3Rpb24gRHVuKGUsdCl7cmV0dXJuIGU/dC0xOjB9ZnVuY3Rpb24gSXVuKGUsdCl7cmV0dXJuIGUucy10LnN9ZnVuY3Rpb24gT3VuKGUsdCl7cmV0dXJuIHQucmcoZSl9ZnVuY3Rpb24gWnYoZSx0KXtyZXR1cm4gZS5iPXQsZX1mdW5jdGlvbiBVeihlLHQpe3JldHVybiBlLmE9dCxlfWZ1bmN0aW9uIGV3KGUsdCl7cmV0dXJuIGUuYz10LGV9ZnVuY3Rpb24gdHcoZSx0KXtyZXR1cm4gZS5kPXQsZX1mdW5jdGlvbiBudyhlLHQpe3JldHVybiBlLmU9dCxlfWZ1bmN0aW9uIGEzZShlLHQpe3JldHVybiBlLmY9dCxlfWZ1bmN0aW9uIGZfKGUsdCl7cmV0dXJuIGUuYT10LGV9ZnVuY3Rpb24gVGsoZSx0KXtyZXR1cm4gZS5iPXQsZX1mdW5jdGlvbiBDayhlLHQpe3JldHVybiBlLmM9dCxlfWZ1bmN0aW9uIFF0KGUsdCl7cmV0dXJuIGUuYz10LGV9ZnVuY3Rpb24geW4oZSx0KXtyZXR1cm4gZS5iPXQsZX1mdW5jdGlvbiBKdChlLHQpe3JldHVybiBlLmQ9dCxlfWZ1bmN0aW9uIFp0KGUsdCl7cmV0dXJuIGUuZT10LGV9ZnVuY3Rpb24gTnVuKGUsdCl7cmV0dXJuIGUuZj10LGV9ZnVuY3Rpb24gZW4oZSx0KXtyZXR1cm4gZS5nPXQsZX1mdW5jdGlvbiB0bihlLHQpe3JldHVybiBlLmE9dCxlfWZ1bmN0aW9uIG5uKGUsdCl7cmV0dXJuIGUuaT10LGV9ZnVuY3Rpb24gcm4oZSx0KXtyZXR1cm4gZS5qPXQsZX1mdW5jdGlvbiBQdW4oZSx0KXtDYigpLE1jKHQsZSl9ZnVuY3Rpb24gQnVuKGUsdCxuKXtKZG4oZS5hLHQsbil9ZnVuY3Rpb24gR3ooZSl7ZGFlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBHSmUoZSl7dDVuLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBLSmUoZSl7QWF0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBvM2UoZSl7QWF0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBuYihlKXtMdy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gV0plKGUpe25vZS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gWUplKGUpe25vZS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gWEplKCl7YnllLmNhbGwodGhpcywiIil9ZnVuY3Rpb24gcWEoKXt0aGlzLmE9MCx0aGlzLmI9MH1mdW5jdGlvbiBRSmUoKXt0aGlzLmI9MCx0aGlzLmE9MH1mdW5jdGlvbiBKSmUoZSx0KXtlLmI9MCxNeShlLHQpfWZ1bmN0aW9uIFpKZShlLHQpe3JldHVybiBlLms9dCxlfWZ1bmN0aW9uIEZ1bihlLHQpe3JldHVybiBlLmo9dCxlfWZ1bmN0aW9uIFJ1bihlLHQpe2UuYz10LGUuYj0hMH1mdW5jdGlvbiBlWmUoKXtlWmU9VSxTNnQ9WThuKCl9ZnVuY3Rpb24gcmIoKXtyYj1VLHdfdD1hOG4oKX1mdW5jdGlvbiB0WmUoKXt0WmU9VSxMYT12eG4oKX1mdW5jdGlvbiBjM2UoKXtjM2U9VSxRYj1oRSgpfWZ1bmN0aW9uIFNrKCl7U2s9VSxBUGU9bzhuKCl9ZnVuY3Rpb24gblplKCl7blplPVUsckF0PWM4bigpfWZ1bmN0aW9uIHUzZSgpe3UzZT1VLHR1PWlrbigpfWZ1bmN0aW9uIEswKGUpe3JldHVybiBlLmUmJmUuZSgpfWZ1bmN0aW9uIHJaZShlKXtyZXR1cm4gZS5sfGUubTw8MjJ9ZnVuY3Rpb24gaVplKGUsdCl7cmV0dXJuIGUuYy5fYih0KX1mdW5jdGlvbiBzWmUoZSx0KXtyZXR1cm4gaTF0KGUuYix0KX1mdW5jdGlvbiByc2UoZSl7cmV0dXJuIGU/ZS5kOm51bGx9ZnVuY3Rpb24ganVuKGUpe3JldHVybiBlP2UuZzpudWxsfWZ1bmN0aW9uICR1bihlKXtyZXR1cm4gZT9lLmk6bnVsbH1mdW5jdGlvbiBfbShlKXtyZXR1cm4gR2coZSksZS5vfWZ1bmN0aW9uIF81KGUsdCl7cmV0dXJuIGUuYSs9dCxlfWZ1bmN0aW9uIGlzZShlLHQpe3JldHVybiBlLmErPXQsZX1mdW5jdGlvbiBHcChlLHQpe3JldHVybiBlLmErPXQsZX1mdW5jdGlvbiBydyhlLHQpe3JldHVybiBlLmErPXQsZX1mdW5jdGlvbiBsM2UoZSx0KXtmb3IoO2UuQmQodCk7KTt9ZnVuY3Rpb24gS3ooZSl7dGhpcy5hPW5ldyBOOChlKX1mdW5jdGlvbiBhWmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIG9aZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gY1plKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiB1WmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIGxaZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gaFplKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBLcChlKXt0aGlzLmE9bmV3IFBhZShlKX1mdW5jdGlvbiBmWmUoKXt0aGlzLmE9bmV3IFVBKEVJZSl9ZnVuY3Rpb24gZFplKCl7dGhpcy5iPW5ldyBVQShxRGUpfWZ1bmN0aW9uIGdaZSgpe3RoaXMuYT1uZXcgVUEoS0llKX1mdW5jdGlvbiBwWmUoKXt0aGlzLmI9bmV3IFVBKHBnZSl9ZnVuY3Rpb24gYlplKCl7dGhpcy5iPW5ldyBVQShwZ2UpfWZ1bmN0aW9uIFd6KGUpe3RoaXMuYT0wLHRoaXMuYj1lfWZ1bmN0aW9uIGgzZShlKXtHdnQoKSxJSW4odGhpcyxlKX1mdW5jdGlvbiBfayhlKXtyZXR1cm4gZmIoZSksZS5hfWZ1bmN0aW9uIFFJKGUpe3JldHVybiBlLmIhPWUuZC5jfWZ1bmN0aW9uIGYzZShlLHQpe3JldHVybiBlLmRbdC5wXX1mdW5jdGlvbiBtWmUoZSx0KXtyZXR1cm4gWUNuKGUsdCl9ZnVuY3Rpb24gZDNlKGUsdCxuKXtlLnNwbGljZSh0LG4pfWZ1bmN0aW9uIEE1KGUsdCl7Zm9yKDtlLlJlKHQpOyk7fWZ1bmN0aW9uIHZaZShlKXtlLmM/SWJ0KGUpOk9idChlKX1mdW5jdGlvbiB3WmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIHlaZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24geFplKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBrWmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIEVaZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gVFplKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBDWmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIFNaZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gX1plKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBBWmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIHp1bigpe3Rocm93IHVlKG5ldyBfYyl9ZnVuY3Rpb24gcXVuKCl7dGhyb3cgdWUobmV3IF9jKX1mdW5jdGlvbiBKSShlKXt0aGlzLmE9bmV3IExaZShlKX1mdW5jdGlvbiBMWmUoZSl7R3duKHRoaXMsZSxUOW4oKSl9ZnVuY3Rpb24gWkkoZSl7cmV0dXJuIWV8fG9hdChlKX1mdW5jdGlvbiBlTyhlKXtyZXR1cm4gbmRbZV0hPS0xfWZ1bmN0aW9uIEh1bigpe2FLIT0wJiYoYUs9MCksb0s9LTF9ZnVuY3Rpb24gTVplKCl7bTBlPT1udWxsJiYobTBlPVtdKX1mdW5jdGlvbiB0TyhlLHQpe3E1LmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEFrKGUsdCl7dE8uY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRFplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gSVplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gT1plKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTlplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gUFplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gQlplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gRlplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTGsoZSx0KXt0aGlzLmU9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBnM2UoZSx0KXt0aGlzLmI9ZSx0aGlzLmM9dH1mdW5jdGlvbiBSWmUoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBqWmUoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiAkWmUoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiB6WmUoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBxWmUoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBzc2UoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBIWmUoZSx0KXt0aGlzLmE9ZSx0aGlzLmY9dH1mdW5jdGlvbiBpdyhlLHQpe3RoaXMuZz1lLHRoaXMuaT10fWZ1bmN0aW9uIFVyKGUsdCl7dGhpcy5mPWUsdGhpcy5nPXR9ZnVuY3Rpb24gVlplKGUsdCl7dGhpcy5iPWUsdGhpcy5jPXR9ZnVuY3Rpb24gVVplKGUpe1R5ZShlLmRjKCkpLHRoaXMuYz1lfWZ1bmN0aW9uIFZ1bihlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEdaZShlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEtaZShlKXt0aGlzLmE9bChYcihlKSwxNSl9ZnVuY3Rpb24gcDNlKGUpe3RoaXMuYT1sKFhyKGUpLDE1KX1mdW5jdGlvbiBXWmUoZSl7dGhpcy5hPWwoWHIoZSksODUpfWZ1bmN0aW9uIFl6KGUpe3RoaXMuYj1sKFhyKGUpLDg1KX1mdW5jdGlvbiBYeihlKXt0aGlzLmI9bChYcihlKSw1MSl9ZnVuY3Rpb24gUXooKXt0aGlzLnE9bmV3IGIuRGF0ZX1mdW5jdGlvbiBhc2UoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBZWmUoZSx0KXtyZXR1cm4gSHUoZS5iLHQpfWZ1bmN0aW9uIG5PKGUsdCl7cmV0dXJuIGUuYi5IYyh0KX1mdW5jdGlvbiBYWmUoZSx0KXtyZXR1cm4gZS5iLkljKHQpfWZ1bmN0aW9uIFFaZShlLHQpe3JldHVybiBlLmIuUWModCl9ZnVuY3Rpb24gSlplKGUsdCl7cmV0dXJuIGUuYi5IYyh0KX1mdW5jdGlvbiBaWmUoZSx0KXtyZXR1cm4gZS5jLnVjKHQpfWZ1bmN0aW9uIGVldChlLHQpe3JldHVybiBQaShlLmMsdCl9ZnVuY3Rpb24gVzAoZSx0KXtyZXR1cm4gZS5hLl9iKHQpfWZ1bmN0aW9uIHRldChlLHQpe3JldHVybiBlPnQmJnQ8ckx9ZnVuY3Rpb24gZF8oZSl7cmV0dXJuIGUuZi5jK2UuaS5jfWZ1bmN0aW9uIFV1bihlKXtyZXR1cm4gR3N0KCksZT9mNnQ6aDZ0fWZ1bmN0aW9uIE44KGUpe3AwdC5jYWxsKHRoaXMsZSwwKX1mdW5jdGlvbiBuZXQoKXtQYWUuY2FsbCh0aGlzLG51bGwpfWZ1bmN0aW9uIFA4KGUpe3RoaXMuYz1lLHJodCh0aGlzKX1mdW5jdGlvbiBvcygpe2tudCh0aGlzKSxDaCh0aGlzKX1mdW5jdGlvbiBWZygpe1ZnPVUsbTZ0PW5ldyBGZX1mdW5jdGlvbiBNaygpe01rPVUsQVQ9bmV3IEllfWZ1bmN0aW9uIGN5KCl7Y3k9VSxJMGU9bmV3IEh0dH1mdW5jdGlvbiBKeigpe0p6PVUsQTZ0PW5ldyBWdHR9ZnVuY3Rpb24gRGsoKXtEaz1VLHdfZT1uZXcgUWV9ZnVuY3Rpb24gYjNlKCl7UG9lLmNhbGwodGhpcyxudWxsKX1mdW5jdGlvbiBBbSgpe0FtPVUseng9bmV3IGZufWZ1bmN0aW9uIElzKGUsdCl7ZmIoZSksZS5hLk5iKHQpfWZ1bmN0aW9uIEd1bihlLHQpe3JldHVybiBlLmEuWGModCl9ZnVuY3Rpb24gS3VuKGUsdCl7cmV0dXJuIGUuYS5ZYyh0KX1mdW5jdGlvbiBvc2UoZSx0KXtyZXR1cm4gZS5hLiRjKHQpfWZ1bmN0aW9uIGNzZShlLHQpe3JldHVybiBlLmEuX2ModCl9ZnVuY3Rpb24gV3VuKGUsdCl7cmV0dXJuIGUuR2ModCksZX1mdW5jdGlvbiBZdW4oZSx0KXtyZXR1cm4gS2EoZSx0KSxlfWZ1bmN0aW9uIFh1bihlLHQpe1Z1ZSh0dChlLmEpLHQpfWZ1bmN0aW9uIFF1bihlLHQpe1Z1ZSh0dChlLmEpLHQpfWZ1bmN0aW9uIHJldChlLHQpe3JldHVybiBlLkdjKHQpLGV9ZnVuY3Rpb24gSnVuKGUsdCl7cmV0dXJuIGUuYS5mPXQsZX1mdW5jdGlvbiBpZXQoZSx0KXtyZXR1cm4gZS5hLmQ9dCxlfWZ1bmN0aW9uIHNldChlLHQpe3JldHVybiBlLmEuZz10LGV9ZnVuY3Rpb24gYWV0KGUsdCl7cmV0dXJuIGUuYS5qPXQsZX1mdW5jdGlvbiByMChlLHQpe3JldHVybiBlLmEuYT10LGV9ZnVuY3Rpb24gaTAoZSx0KXtyZXR1cm4gZS5hLmQ9dCxlfWZ1bmN0aW9uIHMwKGUsdCl7cmV0dXJuIGUuYS5lPXQsZX1mdW5jdGlvbiBhMChlLHQpe3JldHVybiBlLmEuZz10LGV9ZnVuY3Rpb24gck8oZSx0KXtyZXR1cm4gZS5hLmY9dCxlfWZ1bmN0aW9uIFp1bihlKXtyZXR1cm4gZS5iPSExLGV9ZnVuY3Rpb24gb2V0KCl7b2V0PVUsUjZ0PW5ldyBQYX1mdW5jdGlvbiBaeigpe1p6PVUsRzBlPW5ldyBncnR9ZnVuY3Rpb24gbTNlKCl7bTNlPVUsazh0PW5ldyBtbX1mdW5jdGlvbiBjZXQoKXtjZXQ9VSxFOHQ9bmV3IEcyfWZ1bmN0aW9uIHYzZSgpe3YzZT1VLFQ4dD1uZXcgcHN0fWZ1bmN0aW9uIHczZSgpe3czZT1VLHBBZT1uZXcgRnB9ZnVuY3Rpb24gdWV0KCl7dWV0PVUsTzh0PW5ldyBxMH1mdW5jdGlvbiBnXygpe2dfPVUsUDh0PW5ldyBRM31mdW5jdGlvbiBpTygpe2lPPVUsajh0PW5ldyBsU31mdW5jdGlvbiBzTygpe3NPPVUsUjh0PW5ldyBxYX1mdW5jdGlvbiBoZXQoKXtoZXQ9VSxIOHQ9bmV3IFlkfWZ1bmN0aW9uIHBfKCl7cF89VSxROHQ9bmV3IHlTfWZ1bmN0aW9uIGVxKCl7ZXE9VSxJNj1uZXcgQ2VlfWZ1bmN0aW9uIHRxKCl7dHE9VSxYa3Q9bmV3ICRuZX1mdW5jdGlvbiBucSgpe25xPVUsYmdlPW5ldyBkZXR9ZnVuY3Rpb24gcnEoKXtycT1VLG1nZT1uZXcgZHJ0fWZ1bmN0aW9uIGJfKCl7Yl89VSxxQj1uZXcgZ2F0fWZ1bmN0aW9uIGZldCgpe0podCgpLHRoaXMuYz1uZXcgbnNlfWZ1bmN0aW9uIGRldCgpe1VyLmNhbGwodGhpcyxXM3QsMCl9ZnVuY3Rpb24gZWxuKGUsdCxuKXtyYyhlLmQsdC5mLG4pfWZ1bmN0aW9uIHRsbihlLHQsbixyKXtENm4oZSxyLHQsbil9ZnVuY3Rpb24gbmxuKGUsdCxuLHIpe25DbihyLGUsdCxuKX1mdW5jdGlvbiBybG4oZSx0LG4scil7SURuKHIsZSx0LG4pfWZ1bmN0aW9uIG1fKGUsdCl7aDIoZS5jLmMsdC5iLHQpfWZ1bmN0aW9uIHN3KGUsdCl7aDIoZS5jLmIsdC5jLHQpfWZ1bmN0aW9uIGlsbihlKXtyZXR1cm4gZS5lLmIrZS5mLmJ9ZnVuY3Rpb24gc2xuKGUpe3JldHVybiBlLmUuYStlLmYuYX1mdW5jdGlvbiBhbG4oZSl7cmV0dXJuIGUuYj9lLmI6ZS5hfWZ1bmN0aW9uIG9sbihlKXtyZXR1cm4oZS5jK2UuYSkvMn1mdW5jdGlvbiBnZXQoZSx0KXtyZXR1cm4gejduKGUuYSx0KX1mdW5jdGlvbiB2XyhlLHQpe3JldHVybiBlLmE9dC5nLGV9ZnVuY3Rpb24geTNlKCl7eTNlPVUsX1BlPW5ldyBoSmV9ZnVuY3Rpb24gcGV0KCl7cGV0PVUsal90PW5ldyBjSmV9ZnVuY3Rpb24gYXcoKXthdz1VLG1fdD1uZXcgem5lfWZ1bmN0aW9uIGJldCgpe2JldD1VLENfdD1uZXcgWW5lfWZ1bmN0aW9uIG1ldCgpe21ldD1VLFJfdD1uZXcgb0plfWZ1bmN0aW9uIGliKCl7aWI9VSxHZj1uZXcgJHdlfWZ1bmN0aW9uIGlxKCl7aXE9VSxrWT1uZXcgUHJ9ZnVuY3Rpb24gd18oKXt3Xz1VLHJwZT1uZXcgU250fWZ1bmN0aW9uIFdwKCl7V3A9VSxkRj1uZXcgX250fWZ1bmN0aW9uIHVzZSgpe3VzZT1VLFpfdD1uZXcgYnJlfWZ1bmN0aW9uIEZvKCl7Rm89VSx0QXQ9bmV3IHY1fWZ1bmN0aW9uIHNiKCl7c2I9VSx0bT1uZXcgWiR9ZnVuY3Rpb24geDNlKCl7eDNlPVUsUlBlPW5ldyBidH1mdW5jdGlvbiBzcShlKXtyZXR1cm4gbChlLDQ0KS5sZCgpfWZ1bmN0aW9uIGxzZShlKXtyZXR1cm4gZS5iPGUuZC5nYygpfWZ1bmN0aW9uIGNsbihlLHQpe3JldHVybiB0LnNwbGl0KGUpfWZ1bmN0aW9uIGhzZShlLHQpe3JldHVybiBpdShlLHQpPjB9ZnVuY3Rpb24gZnNlKGUsdCl7cmV0dXJuIGl1KGUsdCk8MH1mdW5jdGlvbiB2ZXQoZSx0KXtyZXR1cm4gQWFlKGUuYSx0KX1mdW5jdGlvbiB1bG4oZSx0KXt4b3QuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gazNlKGUpe0thZSgpLGFpdC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gRTNlKGUsdCl7Z3N0KGUsZS5sZW5ndGgsdCl9ZnVuY3Rpb24gYU8oZSx0KXtxc3QoZSxlLmxlbmd0aCx0KX1mdW5jdGlvbiB5XyhlLHQpe3JldHVybiBlLmEuZ2V0KHQpfWZ1bmN0aW9uIHdldChlLHQpe3JldHVybiBIdShlLmUsdCl9ZnVuY3Rpb24gVDNlKGUpe3JldHVybiBucihlKSwhMX1mdW5jdGlvbiBDM2UoZSl7dGhpcy5hPWwoWHIoZSksMjI5KX1mdW5jdGlvbiBhcShlKXtrbi5jYWxsKHRoaXMsZSwyMSl9ZnVuY3Rpb24gb3EoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBkc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB5ZXQoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBjcShlLHQpe3RoaXMuZD1lLHRoaXMuZT10fWZ1bmN0aW9uIHhldChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIGtldChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEVldChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIFRldChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEI4KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gQ2V0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gUzNlKGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gXzNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQTNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTDUoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBnc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBwc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBic2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB1cShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEwzZShlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIGxxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTTNlKGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gaHEoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBfZXQoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBEM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBtc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBvTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHhfKGUsdCxuKXtlLnNwbGljZSh0LDAsbil9ZnVuY3Rpb24gbGxuKGUsdCxuKXtlLk1iKG4pJiZ0LkNkKG4pfWZ1bmN0aW9uIGhsbihlLHQsbil7dC5QZShlLmEuWWUobikpfWZ1bmN0aW9uIGZsbihlLHQsbil7dC5EZChlLmEuWmUobikpfWZ1bmN0aW9uIGRsbihlLHQsbil7dC5DZChlLmEuS2IobikpfWZ1bmN0aW9uIGdsbihlLHQpe3JldHVybiB2bChlLmMsdCl9ZnVuY3Rpb24gcGxuKGUsdCl7cmV0dXJuIHZsKGUuZSx0KX1mdW5jdGlvbiBmcShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGRxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24ga18oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBJM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBXcyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGdxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQWV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTGV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTWV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gRGV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gSWV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gT2V0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTmV0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gUGV0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gTzNlKGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gSWsoZSx0KXt0aGlzLmM9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBCZXQoZSx0KXt0aGlzLmU9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBGZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBSZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBqZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiAkZXQoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiB6ZXQoZSx0KXt0aGlzLmI9dCx0aGlzLmM9ZX1mdW5jdGlvbiBwcShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGNPKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gdnNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTjNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRV8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB3c2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB5c2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB1TyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIFAzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHhzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIFRfKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQjNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQ18oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBTXyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHV5KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24ga3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRXNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRjNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gbE8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBNNShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIFRzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGJxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gaE8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBseShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIG1xKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gUjNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQ3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gU3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gX3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQXNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTHNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTXNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRHNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gcWV0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gajNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gSGV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gVmV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gVWV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gJDNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gejNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gR2V0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gYmxuKGUsdCl7cmV0dXJuIGprKCksdCE9ZX1mdW5jdGlvbiBmTyhlKXtyZXR1cm4gbXIoZS5hKSxlLmJ9ZnVuY3Rpb24gSXNlKGUpe3JldHVybiBFRW4oZSxlLmMpLGV9ZnVuY3Rpb24gS2V0KCl7cmV0dXJuIGVaZSgpLG5ldyBTNnR9ZnVuY3Rpb24gV2V0KCl7WXEoKSx0aGlzLmE9bmV3IGk0ZX1mdW5jdGlvbiBZZXQoKXtJVSgpLHRoaXMuYT1uZXcgS3N9ZnVuY3Rpb24gWGV0KCl7Zm9lKCksdGhpcy5iPW5ldyBLc31mdW5jdGlvbiBRZXQoZSx0KXt0aGlzLmI9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBKZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBaZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBldHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiB0dHQoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBxM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBIM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB2cShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIG93KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gT3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gd3EoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBWM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBVM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBkTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEczZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIE5zZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHlxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gUHNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQnNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRnNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gUnNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gSzNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24ganNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gVzNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gZ08oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiAkc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBZM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBwTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIFgzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIG50dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIHJ0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIGl0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIHN0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIFEzZShlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIGF0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIG90dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIGx0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gX18oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBiTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEY4KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQV8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBtTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHpzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHhxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTF8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBxc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBrcShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEQ1KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gdk8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBNXyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIERfKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gd08oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBFcShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEk1KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gSHNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gY3R0KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gVHEoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB1dHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBsdHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBodHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBmdHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBkdHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBndHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBjYShlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHB0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIGJ0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIG10dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHZ0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHd0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHl0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHh0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIGt0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIEV0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIFR0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIEN0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIFN0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIENxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gX3R0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gQXR0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gUjgoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBMdHQoZSx0KXt0aGlzLmY9ZSx0aGlzLmM9dH1mdW5jdGlvbiBKM2UoZSx0KXtyZXR1cm4gdmwoZS5nLHQpfWZ1bmN0aW9uIG1sbihlLHQpe3JldHVybiB2bCh0LmIsZSl9ZnVuY3Rpb24gTXR0KGUsdCl7cmV0dXJuIEtjZShlLmEsdCl9ZnVuY3Rpb24gdmxuKGUsdCl7cmV0dXJuLWUuYi5hZih0KX1mdW5jdGlvbiB3bG4oZSx0KXtlJiZraShsRixlLHQpfWZ1bmN0aW9uIFozZShlLHQpe2UuaT1udWxsLHhWKGUsdCl9ZnVuY3Rpb24geWxuKGUsdCxuKXt4Z3QodCxqdWUoZSxuKSl9ZnVuY3Rpb24geGxuKGUsdCxuKXt4Z3QodCxqdWUoZSxuKSl9ZnVuY3Rpb24ga2xuKGUsdCl7WFRuKGUuYSxsKHQsNTgpKX1mdW5jdGlvbiBEdHQoZSx0KXtHdm4oZS5hLGwodCwxMikpfWZ1bmN0aW9uIFNxKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gSXR0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gT3R0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTnR0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gUHR0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gQnR0KGUsdCl7dGhpcy5kPWUsdGhpcy5iPXR9ZnVuY3Rpb24gRnR0KGUsdCl7dGhpcy5lPWUsdGhpcy5hPXR9ZnVuY3Rpb24geU8oZSx0KXt0aGlzLmI9ZSx0aGlzLmM9dH1mdW5jdGlvbiBleWUoZSx0KXt0aGlzLmk9ZSx0aGlzLmc9dH1mdW5jdGlvbiB0eWUoZSx0KXt0aGlzLmQ9ZSx0aGlzLmU9dH1mdW5jdGlvbiBFbG4oZSx0KXtvd24obmV3IG9yKGUpLHQpfWZ1bmN0aW9uIF9xKGUpe3JldHVybiBGTihlLmMsZS5iKX1mdW5jdGlvbiBoYyhlKXtyZXR1cm4gZT9lLm1kKCk6bnVsbH1mdW5jdGlvbiBxZShlKXtyZXR1cm4gZT8/bnVsbH1mdW5jdGlvbiBJYShlKXtyZXR1cm4gdHlwZW9mIGU9PT1JbGV9ZnVuY3Rpb24gaHkoZSl7cmV0dXJuIHR5cGVvZiBlPT09Q3h9ZnVuY3Rpb24gZnkoZSl7cmV0dXJuIHR5cGVvZiBlPT09UWtlfWZ1bmN0aW9uIGN3KGUsdCl7cmV0dXJuIGl1KGUsdCk9PTB9ZnVuY3Rpb24gQXEoZSx0KXtyZXR1cm4gaXUoZSx0KT49MH1mdW5jdGlvbiBJXyhlLHQpe3JldHVybiBpdShlLHQpIT0wfWZ1bmN0aW9uIExxKGUsdCl7cmV0dXJuIFQzbihlLktjKCksdCl9ZnVuY3Rpb24gYWIoZSx0KXtyZXR1cm4gZS5SZCgpLlhiKHQpfWZ1bmN0aW9uIFJ0dChlKXtyZXR1cm4gUWwoZSksZS5kLmdjKCl9ZnVuY3Rpb24gTXEoZSl7cmV0dXJuIFZfKGU9PW51bGwpLGV9ZnVuY3Rpb24gT18oZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gWG8oZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gTl8oZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gd3UoZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gaGkoZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gbnllKGUsdCl7cmV0dXJuIGUuYSs9IiIrdCxlfWZ1bmN0aW9uIFRsbihlKXtyZXR1cm4iIisobnIoZSksZSl9ZnVuY3Rpb24ganR0KGUpe05sKHRoaXMpLGJBKHRoaXMsZSl9ZnVuY3Rpb24gJHR0KCl7VTVlKCksUTRlLmNhbGwodGhpcyl9ZnVuY3Rpb24genR0KGUsdCl7bjVlLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHF0dChlLHQpe241ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBEcShlLHQpe241ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBrbyhlLHQpe0NzKGUsdCxlLmMuYixlLmMpfWZ1bmN0aW9uIE81KGUsdCl7Q3MoZSx0LGUuYSxlLmEuYSl9ZnVuY3Rpb24gcnllKGUpe3JldHVybiBTbihlLDApLG51bGx9ZnVuY3Rpb24gSHR0KCl7dGhpcy5iPTAsdGhpcy5hPSExfWZ1bmN0aW9uIFZ0dCgpe3RoaXMuYj0wLHRoaXMuYT0hMX1mdW5jdGlvbiBVdHQoKXt0aGlzLmI9bmV3IE44KEF5KDEyKSl9ZnVuY3Rpb24gR3R0KCl7R3R0PVUseTd0PUtyKGV1ZSgpKX1mdW5jdGlvbiBLdHQoKXtLdHQ9VSxxOHQ9S3IocmJ0KCkpfWZ1bmN0aW9uIFd0dCgpe1d0dD1VLGhUdD1LcihCZnQoKSl9ZnVuY3Rpb24gaXllKCl7aXllPVUsQ3dlKCksS1NlPW5ldyBQcn1mdW5jdGlvbiBZMChlKXtyZXR1cm4gZS5hPTAsZS5iPTAsZX1mdW5jdGlvbiBZdHQoZSx0KXtyZXR1cm4gZS5hPXQuZysxLGV9ZnVuY3Rpb24gVnNlKGUsdCl7bXkuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gcG4oZSx0KXt2cy5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBONShlLHQpe2V5ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBYdHQoZSx0KXtUTy5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBVc2UoZSx0KXttRS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB3aShlLHQpe2lxKCksa2koa1ksZSx0KX1mdW5jdGlvbiBRdHQoZSx0KXtlLnEuc2V0VGltZShGbSh0KSl9ZnVuY3Rpb24gQ2xuKGUpe2IuY2xlYXJUaW1lb3V0KGUpfWZ1bmN0aW9uIFNsbihlKXtyZXR1cm4gWHIoZSksbmV3IFBfKGUpfWZ1bmN0aW9uIEp0dChlLHQpe3JldHVybiBxZShlKT09PXFlKHQpfWZ1bmN0aW9uIFp0dChlLHQpe3JldHVybiBlLmEuYS5hLmNjKHQpfWZ1bmN0aW9uIEdzZShlLHQpe3JldHVybiB0ZihlLmEsMCx0KX1mdW5jdGlvbiBzeWUoZSl7cmV0dXJuIExnbihsKGUsNzQpKX1mdW5jdGlvbiBqOChlKXtyZXR1cm4gdWEoKG5yKGUpLGUpKX1mdW5jdGlvbiBfbG4oZSl7cmV0dXJuIHVhKChucihlKSxlKSl9ZnVuY3Rpb24gZW50KGUpe3JldHVybiBxdShlLmwsZS5tLGUuaCl9ZnVuY3Rpb24gYXllKGUsdCl7cmV0dXJuIHJ1KGUuYSx0LmEpfWZ1bmN0aW9uIEFsbihlLHQpe3JldHVybiAkc3QoZS5hLHQuYSl9ZnVuY3Rpb24gTGxuKGUsdCl7cmV0dXJuIFlpKGUuYSx0LmEpfWZ1bmN0aW9uIHBkKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0KX1mdW5jdGlvbiBNbG4oZSx0KXtyZXR1cm4gZS5qW3QucF09PTJ9ZnVuY3Rpb24gdXcoZSx0KXtyZXR1cm4gZT09dD8wOmU/MTotMX1mdW5jdGlvbiBJcShlKXtyZXR1cm4gZTwxMD8iMCIrZToiIitlfWZ1bmN0aW9uIHdjKGUpe3JldHVybiB0eXBlb2YgZT09PVFrZX1mdW5jdGlvbiBEbG4oZSl7cmV0dXJuIGU9PXMzfHxlPT1vNH1mdW5jdGlvbiBJbG4oZSl7cmV0dXJuIGU9PXMzfHxlPT1hNH1mdW5jdGlvbiB0bnQoZSx0KXtyZXR1cm4gcnUoZS5nLHQuZyl9ZnVuY3Rpb24gb3llKGUpe3JldHVybiBnYyhlLmIuYixlLDApfWZ1bmN0aW9uIG5udCgpe3NILmNhbGwodGhpcywwLDAsMCwwKX1mdW5jdGlvbiBiZCgpe3dyLmNhbGwodGhpcyxuZXcgZTIpfWZ1bmN0aW9uIGN5ZShlLHQpe25FKGUsMCxlLmxlbmd0aCx0KX1mdW5jdGlvbiBPbG4oZSx0KXtyZXR1cm4gdnQoZS5hLHQpLHR9ZnVuY3Rpb24gTmxuKGUsdCl7cmV0dXJuIHUwKCksdC5hKz1lfWZ1bmN0aW9uIFBsbihlLHQpe3JldHVybiB1MCgpLHQuYSs9ZX1mdW5jdGlvbiBCbG4oZSx0KXtyZXR1cm4gdTAoKSx0LmMrPWV9ZnVuY3Rpb24gRmxuKGUsdCl7cmV0dXJuIHZ0KGUuYyx0KSxlfWZ1bmN0aW9uIHV5ZShlLHQpe3JldHVybiBEaChlLmEsdCksZX1mdW5jdGlvbiBybnQoZSl7dGhpcy5hPUtldCgpLHRoaXMuYj1lfWZ1bmN0aW9uIGludChlKXt0aGlzLmE9S2V0KCksdGhpcy5iPWV9ZnVuY3Rpb24gRW8oZSl7dGhpcy5hPWUuYSx0aGlzLmI9ZS5ifWZ1bmN0aW9uIFBfKGUpe3RoaXMuYT1lLEdTLmNhbGwodGhpcyl9ZnVuY3Rpb24gc250KGUpe3RoaXMuYT1lLEdTLmNhbGwodGhpcyl9ZnVuY3Rpb24gJDgoKXtlZi5jYWxsKHRoaXMsMCwwLDAsMCl9ZnVuY3Rpb24gT3EoZSl7cmV0dXJuIERoKG5ldyBYcyxlKX1mdW5jdGlvbiBhbnQoZSl7cmV0dXJuIEVIKGwoZSwxMjMpKX1mdW5jdGlvbiBoaChlKXtyZXR1cm4gZS52aCgpJiZlLndoKCl9ZnVuY3Rpb24gUDUoZSl7cmV0dXJuIGUhPVoxJiZlIT1XYn1mdW5jdGlvbiBVZyhlKXtyZXR1cm4gZT09dWN8fGU9PXZjfWZ1bmN0aW9uIEI1KGUpe3JldHVybiBlPT13Znx8ZT09UTF9ZnVuY3Rpb24gb250KGUpe3JldHVybiBlPT1HNnx8ZT09VTZ9ZnVuY3Rpb24gUmxuKGUsdCl7cmV0dXJuIHJ1KGUuZyx0LmcpfWZ1bmN0aW9uIGNudChlLHQpe3JldHVybiBuZXcgbUUodCxlKX1mdW5jdGlvbiBqbG4oZSx0KXtyZXR1cm4gbmV3IG1FKHQsZSl9ZnVuY3Rpb24gbHllKGUpe3JldHVybiBhZG4oZS5iLktjKCksZS5hKX1mdW5jdGlvbiBLc2UoZSx0KXtDRShlLHQpLGxFKGUsZS5EKX1mdW5jdGlvbiBXc2UoZSx0LG4pe2RWKGUsdCksZlYoZSxuKX1mdW5jdGlvbiBGNShlLHQsbil7RHcoZSx0KSxNdyhlLG4pfWZ1bmN0aW9uIFFoKGUsdCxuKXtVdShlLHQpLEd1KGUsbil9ZnVuY3Rpb24geE8oZSx0LG4pe2FFKGUsdCksY0UoZSxuKX1mdW5jdGlvbiBrTyhlLHQsbil7b0UoZSx0KSx1RShlLG4pfWZ1bmN0aW9uIHVudChlLHQsbil7R3llLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gaHllKGUpe0x0dC5jYWxsKHRoaXMsZSwhMCl9ZnVuY3Rpb24gbG50KCl7b3EuY2FsbCh0aGlzLCJUYWlsIiwzKX1mdW5jdGlvbiBobnQoKXtvcS5jYWxsKHRoaXMsIkhlYWQiLDEpfWZ1bmN0aW9uIG9iKGUpe0NkKCkseTNuLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBsdyhlKXtzSC5jYWxsKHRoaXMsZSxlLGUsZSl9ZnVuY3Rpb24gWXNlKGUpe2UuYz1XZSh3YSxSbiwxLDAsNSwxKX1mdW5jdGlvbiBmeWUoZSl7cmV0dXJuIGUuYiYmZ2xlKGUpLGUuYX1mdW5jdGlvbiBkeWUoZSl7cmV0dXJuIGUuYiYmZ2xlKGUpLGUuY31mdW5jdGlvbiAkbG4oZSx0KXtHMXx8KGUuYj10KX1mdW5jdGlvbiB6bG4oZSx0KXtyZXR1cm4gZVtlLmxlbmd0aF09dH1mdW5jdGlvbiBxbG4oZSx0KXtyZXR1cm4gZVtlLmxlbmd0aF09dH1mdW5jdGlvbiBIbG4oZSx0KXtyZXR1cm4gTHkodCxNMShlKSl9ZnVuY3Rpb24gVmxuKGUsdCl7cmV0dXJuIEx5KHQsTTEoZSkpfWZ1bmN0aW9uIFVsbihlLHQpe3JldHVybiB2VihVYWUoZS5kKSx0KX1mdW5jdGlvbiBHbG4oZSx0KXtyZXR1cm4gdlYoVWFlKGUuZyksdCl9ZnVuY3Rpb24gS2xuKGUsdCl7cmV0dXJuIHZWKFVhZShlLmopLHQpfWZ1bmN0aW9uIEhhKGUsdCl7dnMuY2FsbCh0aGlzLGUuYix0KX1mdW5jdGlvbiBXbG4oZSx0KXtxcihkdShlLmEpLElvdCh0KSl9ZnVuY3Rpb24gWWxuKGUsdCl7cXIoWGwoZS5hKSxPb3QodCkpfWZ1bmN0aW9uIFhsbihlLHQsbil7UWgobixuLmkrZSxuLmordCl9ZnVuY3Rpb24gZm50KGUsdCxuKXtUcyhlLmNbdC5nXSx0Lmcsbil9ZnVuY3Rpb24gUWxuKGUsdCxuKXtsKGUuYyw3MSkuR2kodCxuKX1mdW5jdGlvbiBYc2UoZSx0LG4pe3JldHVybiBUcyhlLHQsbiksbn1mdW5jdGlvbiBkbnQoZSl7VnUoZS5TZigpLG5ldyBNaWUoZSkpfWZ1bmN0aW9uIFI1KGUpe3JldHVybiBlIT1udWxsP2VzKGUpOjB9ZnVuY3Rpb24gSmxuKGUpe3JldHVybiBlPT1udWxsPzA6ZXMoZSl9ZnVuY3Rpb24gQl8oZSl7RGkoKSxYdi5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gZ250KGUpe3RoaXMuYT1lLF80ZS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gQTEoKXtBMT1VLGIuTWF0aC5sb2coMil9ZnVuY3Rpb24gSmgoKXtKaD1VLFNnPShiZXQoKSxDX3QpfWZ1bmN0aW9uIHBudCgpe3BudD1VLE1kZT1uZXcgTEEoVmdlKX1mdW5jdGlvbiBKcigpe0pyPVUsbmV3IGJudCxuZXcgYnR9ZnVuY3Rpb24gYm50KCl7bmV3IFByLG5ldyBQcixuZXcgUHJ9ZnVuY3Rpb24gWmxuKCl7dGhyb3cgdWUobmV3IEhwKFE1dCkpfWZ1bmN0aW9uIGVobigpe3Rocm93IHVlKG5ldyBIcChRNXQpKX1mdW5jdGlvbiB0aG4oKXt0aHJvdyB1ZShuZXcgSHAoSjV0KSl9ZnVuY3Rpb24gbmhuKCl7dGhyb3cgdWUobmV3IEhwKEo1dCkpfWZ1bmN0aW9uIFFzZShlKXt0aGlzLmE9ZSxZei5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSnNlKGUpe3RoaXMuYT1lLFl6LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBtbnQoZSx0KXt3dygpLHRoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHJobihlLHQpe1hyKHQpLFY1KGUpLkpjKG5ldyBpZSl9ZnVuY3Rpb24gVnMoZSx0KXtMYWUoZS5jLGUuYy5sZW5ndGgsdCl9ZnVuY3Rpb24gTGMoZSl7cmV0dXJuIGUuYTxlLmMuYy5sZW5ndGh9ZnVuY3Rpb24gZ3llKGUpe3JldHVybiBlLmE8ZS5jLmEubGVuZ3RofWZ1bmN0aW9uIHZudChlLHQpe3JldHVybiBlLmE/ZS5iOnQuV2UoKX1mdW5jdGlvbiBydShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6MH1mdW5jdGlvbiBweWUoZSx0KXtyZXR1cm4gaXUoZSx0KT4wP2U6dH1mdW5jdGlvbiBxdShlLHQsbil7cmV0dXJue2w6ZSxtOnQsaDpufX1mdW5jdGlvbiBpaG4oZSx0KXtlLmEhPW51bGwmJkR0dCh0LGUuYSl9ZnVuY3Rpb24gc2huKGUpe3BvKGUsbnVsbCksRmEoZSxudWxsKX1mdW5jdGlvbiBhaG4oZSx0LG4pe3JldHVybiBraShlLmcsbix0KX1mdW5jdGlvbiBqNShlLHQsbil7cmV0dXJuIFI4ZSh0LG4sZS5jKX1mdW5jdGlvbiBvaG4oZSx0LG4pe3JldHVybiBraShlLmssbix0KX1mdW5jdGlvbiBjaG4oZSx0LG4pe3JldHVybiBLTW4oZSx0LG4pLG59ZnVuY3Rpb24gdWhuKGUsdCl7cmV0dXJuIFNoKCksdC5uLmIrPWV9ZnVuY3Rpb24gd250KGUpe1I1ZS5jYWxsKHRoaXMpLHRoaXMuYj1lfWZ1bmN0aW9uIGJ5ZShlKXtyNGUuY2FsbCh0aGlzKSx0aGlzLmE9ZX1mdW5jdGlvbiB5bnQoKXtvcS5jYWxsKHRoaXMsIlJhbmdlIiwyKX1mdW5jdGlvbiBOcShlKXt0aGlzLmI9ZSx0aGlzLmE9bmV3IGJ0fWZ1bmN0aW9uIHhudChlKXt0aGlzLmI9bmV3IE51LHRoaXMuYT1lfWZ1bmN0aW9uIGtudChlKXtlLmE9bmV3IF90LGUuYz1uZXcgX3R9ZnVuY3Rpb24gRW50KGUpe2UuYT1uZXcgUHIsZS5kPW5ldyBQcn1mdW5jdGlvbiBUbnQoZSl7ZG9lKGUsbnVsbCksZ29lKGUsbnVsbCl9ZnVuY3Rpb24gQ250KGUsdCl7cmV0dXJuIFlNbihlLmEsdCxudWxsKX1mdW5jdGlvbiBsaG4oZSx0KXtyZXR1cm4ga2koZS5hLHQuYSx0KX1mdW5jdGlvbiBKYShlKXtyZXR1cm4gbmV3IGx0KGUuYSxlLmIpfWZ1bmN0aW9uIG15ZShlKXtyZXR1cm4gbmV3IGx0KGUuYyxlLmQpfWZ1bmN0aW9uIGhobihlKXtyZXR1cm4gbmV3IGx0KGUuYyxlLmQpfWZ1bmN0aW9uIEZfKGUsdCl7cmV0dXJuIG9NbihlLmMsZS5iLHQpfWZ1bmN0aW9uIERlKGUsdCl7cmV0dXJuIGUhPW51bGwmJml1ZShlLHQpfWZ1bmN0aW9uIFpzZShlLHQpe3JldHVybiBleW4oZS5LYygpLHQpIT0tMX1mdW5jdGlvbiBQcShlKXtyZXR1cm4gZS5PYigpP2UuUGIoKTpudWxsfWZ1bmN0aW9uIGZobihlKXt0aGlzLmI9KENuKCksbmV3IHRyKGUpKX1mdW5jdGlvbiB2eWUoZSl7dGhpcy5hPWUsUHIuY2FsbCh0aGlzKX1mdW5jdGlvbiBTbnQoKXtUTy5jYWxsKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBfbnQoKXtxcS5jYWxsKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBBbnQoKXtVci5jYWxsKHRoaXMsIklOU1RBTkNFIiwwKX1mdW5jdGlvbiBMbnQoKXtteGUoKSx0aGlzLmE9bmV3IFVBKGdBZSl9ZnVuY3Rpb24gTW50KGUpe3JldHVybiBJZihlLDAsZS5sZW5ndGgpfWZ1bmN0aW9uIGRobihlLHQpe3JldHVybiBuZXcgV250KGUuS2MoKSx0KX1mdW5jdGlvbiB3eWUoZSx0KXtyZXR1cm4gZS5hLkJjKHQpIT1udWxsfWZ1bmN0aW9uIERudChlLHQpeyRyKGUpLGUuR2MobCh0LDE1KSl9ZnVuY3Rpb24gZ2huKGUsdCxuKXtlLmMuYmQodCxsKG4sMTM2KSl9ZnVuY3Rpb24gcGhuKGUsdCxuKXtlLmMuVWkodCxsKG4sMTM2KSl9ZnVuY3Rpb24gSW50KGUsdCl7ZS5jJiYoJDRlKHQpLGlvdCh0KSl9ZnVuY3Rpb24gYmhuKGUsdCl7ZS5xLnNldEhvdXJzKHQpLFhBKGUsdCl9ZnVuY3Rpb24gbWhuKGUsdCl7ZHcodCxlLmEuYS5hLGUuYS5hLmIpfWZ1bmN0aW9uIHZobihlLHQsbixyKXtUcyhlLmFbdC5nXSxuLmcscil9ZnVuY3Rpb24gZWFlKGUsdCxuKXtyZXR1cm4gZS5hW3QuZ11bbi5nXX1mdW5jdGlvbiB3aG4oZSx0KXtyZXR1cm4gZS5lW3QuYy5wXVt0LnBdfWZ1bmN0aW9uIHlobihlLHQpe3JldHVybiBlLmNbdC5jLnBdW3QucF19ZnVuY3Rpb24gTDEoZSx0KXtyZXR1cm4gZS5hW3QuYy5wXVt0LnBdfWZ1bmN0aW9uIHhobihlLHQpe3JldHVybiBlLmpbdC5wXT1JVG4odCl9ZnVuY3Rpb24gdGFlKGUsdCl7cmV0dXJuIGUuYS5CYyh0KSE9bnVsbH1mdW5jdGlvbiBraG4oZSx0KXtyZXR1cm4gemUoR2UodC5hKSk8PWV9ZnVuY3Rpb24gRWhuKGUsdCl7cmV0dXJuIHplKEdlKHQuYSkpPj1lfWZ1bmN0aW9uIFRobihlLHQpe3JldHVybiBFNmUoZS5mLHQuUGcoKSl9ZnVuY3Rpb24gejgoZSx0KXtyZXR1cm4gZS5hKnQuYStlLmIqdC5ifWZ1bmN0aW9uIENobihlLHQpe3JldHVybiBlLmE8ZzRlKHQpPy0xOjF9ZnVuY3Rpb24gU2huKGUsdCl7cmV0dXJuIEU2ZShlLmIsdC5QZygpKX1mdW5jdGlvbiBfaG4oZSx0LG4pe3JldHVybiBuP3QhPTA6dCE9ZS0xfWZ1bmN0aW9uIE9udChlLHQsbil7ZS5hPXReMTUwMixlLmI9bl5oaGV9ZnVuY3Rpb24gQWhuKGUsdCxuKXtyZXR1cm4gZS5hPXQsZS5iPW4sZX1mdW5jdGlvbiBtZChlLHQpe3JldHVybiBlLmEqPXQsZS5iKj10LGV9ZnVuY3Rpb24gdnQoZSx0KXtyZXR1cm4gJG4oZS5jLHQpLCEwfWZ1bmN0aW9uIFJfKGUsdCxuKXtyZXR1cm4gVHMoZS5nLHQsbiksbn1mdW5jdGlvbiBZcyhlLHQsbil7Rk8uY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBCcShlLHQsbil7WXMuY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiB5eWUoZSx0LG4pe0pxLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gTm50KGUsdCxuKXtKcS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIFBudChlLHQsbil7eXllLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gbWwoZSx0LG4pe1lzLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gQm50KGUsdCxuKXtCcS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIHh5ZShlLHQsbil7Rk8uY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiAkNShlLHQsbil7Rk8uY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBGbnQoZSx0LG4pe3h5ZS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIEZxKGUpe2Uuaj1XZShhX2UsZHQsMzE5LDAsMCwxKX1mdW5jdGlvbiB6NSgpe3RoaXMuYT1XZSh3YSxSbiwxLDgsNSwxKX1mdW5jdGlvbiBreWUoKXt0aGlzLkJifD0yNTYsdGhpcy5CYnw9NTEyfWZ1bmN0aW9uIG9yKGUpe3RoaXMuaT1lLHRoaXMuZj10aGlzLmkuan1mdW5jdGlvbiBjYihlKXt0aGlzLmM9ZSx0aGlzLmE9dGhpcy5jLmF9ZnVuY3Rpb24gcTUoZSx0KXt0aGlzLmE9ZSxZei5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gRXllKGUsdCl7cmV0dXJuIFY0bihlLG5ldyB0Yix0KS5hfWZ1bmN0aW9uIFR5ZShlKXtpZighZSl0aHJvdyB1ZShuZXcgWUkpfWZ1bmN0aW9uIEN5ZShlKXtpZighZSl0aHJvdyB1ZShuZXcgcGwpfWZ1bmN0aW9uIFN5ZSgpe1N5ZT1VLFN5ZSgpLEw2dD1uZXcgbG59ZnVuY3Rpb24gUm50KCl7Um50PVUsdXNlKCksZUF0PW5ldyBken1mdW5jdGlvbiBPaygpe09rPVUsYl9lPW5ldyBLaWUobnVsbCl9ZnVuY3Rpb24gTGhuKGUpe1VPKGUsQzR0KSxBVShlLEtEbihlKSl9ZnVuY3Rpb24gam50KGUpe2UuYT1sKEtuKGUuYi5hLDQpLDEyOSl9ZnVuY3Rpb24gJG50KGUpe2UuYT1sKEtuKGUuYi5hLDQpLDEyOSl9ZnVuY3Rpb24gem50KGUpe2UuYi5RYigpLC0tZS5kLmYuZCxsSChlLmQpfWZ1bmN0aW9uIF95ZShlKXt0aGlzLmE9ZSxxZy5jYWxsKHRoaXMsZS5kKX1mdW5jdGlvbiBxbnQoZSx0KXt0aGlzLmE9ZSx0c2UuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEhudChlLHQpe3RoaXMuYT1lLHRzZS5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gVm50KGUsdCl7dGhpcy5hPWUsdHNlLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBBeWUoZSx0KXt0aGlzLmE9dCx0c2UuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIFVudChlLHQpe3RoaXMuYT10LFRvZS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gR250KGUsdCl7dGhpcy5hPWUsVG9lLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBLbnQoZSx0KXt0aGlzLmE9dCxYei5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gV250KGUsdCl7dGhpcy5hPXQsWHouY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIGRyKGUsdCl7cmV0dXJuIFhyKHQpLG5ldyBLbnQoZSx0KX1mdW5jdGlvbiBZbnQoZSx0KXtyZXR1cm4gbmV3IHlwdChlLmEsZS5iLHQpfWZ1bmN0aW9uIEx5ZShlLHQsbil7cmV0dXJuIGUuaW5kZXhPZih0LG4pfWZ1bmN0aW9uIFJxKGUsdCl7cmV0dXJuIGUubGFzdEluZGV4T2YodCl9ZnVuY3Rpb24gal8oZSl7cmV0dXJuIGU9PW51bGw/dWw6eGMoZSl9ZnVuY3Rpb24gTWhuKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5uYW1lfWZ1bmN0aW9uIERobihlKXtyZXR1cm4gZS5sK2UubSpMeCtlLmgqWm19ZnVuY3Rpb24gSWhuKGUpe3JldHVybiBRSShlLmEpP05vdChlKTpudWxsfWZ1bmN0aW9uIEFmKGUpe05yLmNhbGwodGhpcywobnIoZSksZSkpfWZ1bmN0aW9uIFRoKGUpe05yLmNhbGwodGhpcywobnIoZSksZSkpfWZ1bmN0aW9uIFhudChlKXtway5jYWxsKHRoaXMsbChYcihlKSwzNCkpfWZ1bmN0aW9uIFFudChlKXtway5jYWxsKHRoaXMsbChYcihlKSwzNCkpfWZ1bmN0aW9uIG5hZShlKXt3ci5jYWxsKHRoaXMsbmV3IEk2ZShlKSl9ZnVuY3Rpb24ganEoZSl7JGEuY2FsbCh0aGlzLGUpLHRoaXMuYT1lfWZ1bmN0aW9uIE15ZShlKXt5by5jYWxsKHRoaXMsZSksdGhpcy5hPWV9ZnVuY3Rpb24gRHllKGUpe0VrLmNhbGwodGhpcyxlKSx0aGlzLmE9ZX1mdW5jdGlvbiBKbnQoKXtGcSh0aGlzKSxTSCh0aGlzKSx0aGlzLmplKCl9ZnVuY3Rpb24gWm50KGUpe3RoaXMuYT1lLFJzLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBmaChlKXtyZXR1cm4gbXIoZS5hIT1udWxsKSxlLmF9ZnVuY3Rpb24gZXJ0KGUsdCl7cmV0dXJuIHZ0KHQuYSxlLmEpLGUuYX1mdW5jdGlvbiB0cnQoZSx0KXtyZXR1cm4gdnQodC5iLGUuYSksZS5hfWZ1bmN0aW9uIGh3KGUsdCl7cmV0dXJuIHZ0KHQuYSxlLmEpLGUuYX1mdW5jdGlvbiBFTyhlLHQsbil7cmV0dXJuIGhjZShlLHQsdCxuKSxlfWZ1bmN0aW9uICRxKGUsdCl7cmV0dXJuKytlLmIsdnQoZS5hLHQpfWZ1bmN0aW9uIEl5ZShlLHQpe3JldHVybisrZS5iLGFsKGUuYSx0KX1mdW5jdGlvbiBPaG4oZSx0KXtyZXR1cm4gWWkoZS5jLmQsdC5jLmQpfWZ1bmN0aW9uIE5obihlLHQpe3JldHVybiBZaShlLmMuYyx0LmMuYyl9ZnVuY3Rpb24gUGhuKGUsdCl7cmV0dXJuIFlpKGUubi5hLHQubi5hKX1mdW5jdGlvbiBpbChlLHQpe3JldHVybiBsKCRpKGUuYix0KSwxNSl9ZnVuY3Rpb24gQmhuKGUsdCl7cmV0dXJuIGUubi5iPShucih0KSx0KX1mdW5jdGlvbiBGaG4oZSx0KXtyZXR1cm4gZS5uLmI9KG5yKHQpLHQpfWZ1bmN0aW9uIHZsKGUsdCl7cmV0dXJuISF0JiZlLmJbdC5nXT09dH1mdW5jdGlvbiAkXyhlKXtyZXR1cm4gTGMoZS5hKXx8TGMoZS5iKX1mdW5jdGlvbiBmdyhlKXtyZXR1cm4gZS4kSHx8KGUuJEg9KytiT24pfWZ1bmN0aW9uIFJobihlKXtyZXR1cm4gZS5hIT1udWxsP2UuYTpudWxsfWZ1bmN0aW9uIGpobihlLHQpe3JldHVybiBZaShlLmUuYix0LmUuYil9ZnVuY3Rpb24gJGhuKGUsdCl7cmV0dXJuIFlpKGUuZS5hLHQuZS5hKX1mdW5jdGlvbiB6aG4oZSx0LG4pe3JldHVybiBGY3QoZSx0LG4sZS5iKX1mdW5jdGlvbiBPeWUoZSx0LG4pe3JldHVybiBGY3QoZSx0LG4sZS5jKX1mdW5jdGlvbiBxaG4oZSl7cmV0dXJuIHUwKCksISFlJiYhZS5kYygpfWZ1bmN0aW9uIG5ydCgpe3BfKCksdGhpcy5iPW5ldyBkWWUodGhpcyl9ZnVuY3Rpb24genEoKXt6cT1VLHBLPW5ldyB2cyhiM3QsMCl9ZnVuY3Rpb24gSG4oKXtIbj1VLFBiPSExLFNUPSEwfWZ1bmN0aW9uIFlwKGUpe3ZhciB0O3Q9ZS5hLGUuYT1lLmIsZS5iPXR9ZnVuY3Rpb24gVE8oZSx0KXt3XygpLHRoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHFxKGUsdCl7V3AoKSx0aGlzLmI9ZSx0aGlzLmM9dH1mdW5jdGlvbiByYWUoZSx0KXtJYWUoKSx0aGlzLmY9dCx0aGlzLmQ9ZX1mdW5jdGlvbiBOeWUoZSx0KXtrNmUodCxlKSx0aGlzLmQ9ZSx0aGlzLmM9dH1mdW5jdGlvbiBQeWUoZSx0KXtVOGUuY2FsbCh0aGlzLGUsdCxudWxsKX1mdW5jdGlvbiBycnQoZSx0LG4scil7cjVlLmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBxOChlKXt0aGlzLmQ9ZSxvci5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSDgoZSl7dGhpcy5jPWUsb3IuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIENPKGUpe3RoaXMuYz1lLHE4LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBIaG4oZSl7cmV0dXJuIG5ldyBUeSgzLGUpfWZ1bmN0aW9uIGVnKGUpe3JldHVybiBNaChlLFl5KSxuZXcgQnUoZSl9ZnVuY3Rpb24gaXJ0KGUpe3JldHVybiBYaygpLHBhcnNlSW50KGUpfHwtMX1mdW5jdGlvbiBWaG4oZSl7cmV0dXJuICR6KCksR3IoKGhvdCgpLG82dCksZSl9ZnVuY3Rpb24gTmsoZSx0LG4pe3JldHVybiBMeWUoZSxjbCh0KSxuKX1mdW5jdGlvbiBpYWUoZSx0KXtyZXR1cm4gbmV3IHJpdChlLGUuZ2MoKSx0KX1mdW5jdGlvbiBVaG4oZSx0KXtyZXR1cm4gT2FlKGUuYykuTWQoKS5YYih0KX1mdW5jdGlvbiBQayhlLHQsbil7dmFyIHI7cj1lLmZkKHQpLHIuUmIobil9ZnVuY3Rpb24gQnllKGUsdCxuKXtsKGhOKGUsdCksMjEpLkZjKG4pfWZ1bmN0aW9uIEdobihlLHQsbil7RmNlKGUuYSxuKSxvVShlLmEsdCl9ZnVuY3Rpb24gU08oZSl7RGUoZSwxNTgpJiZsKGUsMTU4KS5waSgpfWZ1bmN0aW9uIHNydChlKXtBNGUuY2FsbCh0aGlzLGUsbnVsbCxudWxsKX1mdW5jdGlvbiBzYWUoZSl7Y3koKSx0aGlzLmI9ZSx0aGlzLmE9ITB9ZnVuY3Rpb24gYXJ0KGUpe0p6KCksdGhpcy5iPWUsdGhpcy5hPSEwfWZ1bmN0aW9uIEJrKGUpe3JldHVybiBtcihlLmIhPTApLGUuYS5hLmN9ZnVuY3Rpb24gbzAoZSl7cmV0dXJuIG1yKGUuYiE9MCksZS5jLmIuY31mdW5jdGlvbiBLaG4oZSx0KXtyZXR1cm4gaGNlKGUsdCx0KzEsIiIpLGV9ZnVuY3Rpb24gbnMoZSx0KXtyZXR1cm4hIWUucSYmSHUoZS5xLHQpfWZ1bmN0aW9uIG9ydChlKXtyZXR1cm4gZS5iPWwoSTVlKGUuYSksNDQpfWZ1bmN0aW9uIFdobihlKXtyZXR1cm4gZS5mIT1udWxsP2UuZjoiIitlLmd9ZnVuY3Rpb24gYWFlKGUpe3JldHVybiBlLmYhPW51bGw/ZS5mOiIiK2UuZ31mdW5jdGlvbiBZaG4oZSx0KXtyZXR1cm4gZT4wP3QvKGUqZSk6dCoxMDB9ZnVuY3Rpb24gWGhuKGUsdCl7cmV0dXJuIGU+MD90KnQvZTp0KnQqMTAwfWZ1bmN0aW9uIGR5KGUsdCl7cmV0dXJuIGwoQjEoZS5hLHQpLDM0KX1mdW5jdGlvbiBRaG4oZSx0KXtyZXR1cm4gQ2IoKSx4bihlLHQuZSx0KX1mdW5jdGlvbiBKaG4oZSx0LG4pe3JldHVybiB0cSgpLG4uTWcoZSx0KX1mdW5jdGlvbiBaaG4oZSl7cmV0dXJuIHRwKCksZS5lLmErZS5mLmEvMn1mdW5jdGlvbiBlZm4oZSx0LG4pe3JldHVybiB0cCgpLG4uZS5hLWUqdH1mdW5jdGlvbiB0Zm4oZSl7cmV0dXJuIHRwKCksZS5lLmIrZS5mLmIvMn1mdW5jdGlvbiBuZm4oZSx0LG4pe3JldHVybiB0cCgpLG4uZS5iLWUqdH1mdW5jdGlvbiBjcnQoZSl7ZS5kPW5ldyBzcnQoZSksZS5lPW5ldyBQcn1mdW5jdGlvbiB1cnQoKXt0aGlzLmE9bmV3IEN3LHRoaXMuYj1uZXcgQ3d9ZnVuY3Rpb24gbHJ0KGUpe3RoaXMuYz1lLHRoaXMuYT0xLHRoaXMuYj0xfWZ1bmN0aW9uIGhydChlKXtNbGUoKSxTUWUodGhpcyksdGhpcy5GZihlKX1mdW5jdGlvbiByZm4oZSx0LG4pe1pIKCksZS5wZih0KSYmbi5DZChlKX1mdW5jdGlvbiBpZm4oZSx0LG4pe3JldHVybiB2dCh0LGsxdChlLG4pKX1mdW5jdGlvbiBkdyhlLHQsbil7cmV0dXJuIGUuYSs9dCxlLmIrPW4sZX1mdW5jdGlvbiBzZm4oZSx0LG4pe3JldHVybiBlLmEqPXQsZS5iKj1uLGV9ZnVuY3Rpb24gRnllKGUsdCl7cmV0dXJuIGUuYT10LmEsZS5iPXQuYixlfWZ1bmN0aW9uIEhxKGUpe3JldHVybiBlLmE9LWUuYSxlLmI9LWUuYixlfWZ1bmN0aW9uIHpfKGUsdCxuKXtyZXR1cm4gZS5hLT10LGUuYi09bixlfWZ1bmN0aW9uIGZydChlKXtvcy5jYWxsKHRoaXMpLGZBKHRoaXMsZSl9ZnVuY3Rpb24gZHJ0KCl7VXIuY2FsbCh0aGlzLCJHUk9XX1RSRUUiLDApfWZ1bmN0aW9uIGdydCgpe1VyLmNhbGwodGhpcywiUE9MWU9NSU5PIiwwKX1mdW5jdGlvbiBkaChlLHQsbil7eGwuY2FsbCh0aGlzLGUsdCxuLDIpfWZ1bmN0aW9uIGFmbihlLHQsbil7X0EoZHUoZS5hKSx0LElvdChuKSl9ZnVuY3Rpb24gcHJ0KGUsdCl7d18oKSxUTy5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBSeWUoZSx0KXtXcCgpLHFxLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGJydChlLHQpe1dwKCksUnllLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIG1ydChlLHQpe1dwKCkscXEuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gb2ZuKGUsdCl7cmV0dXJuIGUuYy5GYyhsKHQsMTM2KSl9ZnVuY3Rpb24gY2ZuKGUsdCxuKXtfQShYbChlLmEpLHQsT290KG4pKX1mdW5jdGlvbiB2cnQoZSl7dGhpcy5jPWUsVXUoZSwwKSxHdShlLDApfWZ1bmN0aW9uIG9hZShlLHQpe0poKCksY0guY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gd3J0KGUsdCl7SmgoKSxvYWUuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24ganllKGUsdCl7SmgoKSxvYWUuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gJHllKGUsdCl7SmgoKSxjSC5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB5cnQoZSx0KXtKaCgpLGp5ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB4cnQoZSx0KXtKaCgpLCR5ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBrcnQoZSx0KXtKaCgpLGNILmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHVmbihlLHQsbil7cmV0dXJuIHQuemwoZS5lLGUuYyxuKX1mdW5jdGlvbiBsZm4oZSx0LG4pe3JldHVybiB0LkFsKGUuZSxlLmMsbil9ZnVuY3Rpb24genllKGUsdCxuKXtyZXR1cm4gVlUobE4oZSx0KSxuKX1mdW5jdGlvbiBjYWUoZSx0KXtyZXR1cm4geWIoZS5lLGwodCw1NCkpfWZ1bmN0aW9uIGhmbihlKXtyZXR1cm4gZT09bnVsbD9udWxsOkJEbihlKX1mdW5jdGlvbiBmZm4oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDpMOW4oZSl9ZnVuY3Rpb24gZGZuKGUpe3JldHVybiBlPT1udWxsP251bGw6eGMoZSl9ZnVuY3Rpb24gZ2ZuKGUpe3JldHVybiBlPT1udWxsP251bGw6eGMoZSl9ZnVuY3Rpb24gQnQoZSl7cmV0dXJuIFZfKGU9PW51bGx8fGh5KGUpKSxlfWZ1bmN0aW9uIEdlKGUpe3JldHVybiBWXyhlPT1udWxsfHxmeShlKSksZX1mdW5jdGlvbiBlaShlKXtyZXR1cm4gVl8oZT09bnVsbHx8SWEoZSkpLGV9ZnVuY3Rpb24gR2coZSl7ZS5vPT1udWxsJiZvVG4oZSl9ZnVuY3Rpb24gcXllKGUpe2lmKCFlKXRocm93IHVlKG5ldyBZSSl9ZnVuY3Rpb24gcGZuKGUpe2lmKCFlKXRocm93IHVlKG5ldyBSaWUpfWZ1bmN0aW9uIG1yKGUpe2lmKCFlKXRocm93IHVlKG5ldyBfYyl9ZnVuY3Rpb24gZ3koZSl7aWYoIWUpdGhyb3cgdWUobmV3IHBsKX1mdW5jdGlvbiBFcnQoZSl7aWYoIWUpdGhyb3cgdWUobmV3IFhoKX1mdW5jdGlvbiBGaygpe0ZrPVUsZkY9bmV3IGlKZSxuZXcgc0plfWZ1bmN0aW9uIEg1KCl7SDU9VSxZNj1uZXcgVWkoInJvb3QiKX1mdW5jdGlvbiBIeWUoKXtzZnQuY2FsbCh0aGlzKSx0aGlzLkJifD1Jb31mdW5jdGlvbiBiZm4oZSx0KXt0aGlzLmQ9ZSxNcih0aGlzKSx0aGlzLmI9dH1mdW5jdGlvbiBWeWUoZSx0KXtQb2UuY2FsbCh0aGlzLGUpLHRoaXMuYT10fWZ1bmN0aW9uIFV5ZShlLHQpe1BvZS5jYWxsKHRoaXMsZSksdGhpcy5hPXR9ZnVuY3Rpb24gR3llKGUsdCxuKXtZSC5jYWxsKHRoaXMsZSx0LG4sbnVsbCl9ZnVuY3Rpb24gVHJ0KGUsdCxuKXtZSC5jYWxsKHRoaXMsZSx0LG4sbnVsbCl9ZnVuY3Rpb24gX08oZSx0KXt0aGlzLmM9ZSxMay5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBxXyhlLHQpe3RoaXMuYT1lLF9PLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEt5ZShlKXt0aGlzLnE9bmV3IGIuRGF0ZShGbShlKSl9ZnVuY3Rpb24gQ3J0KGUpe3JldHVybiBlPjg/MDplKzF9ZnVuY3Rpb24gU3J0KGUsdCl7RzF8fHZ0KGUuYSx0KX1mdW5jdGlvbiBtZm4oZSx0KXtyZXR1cm4gc08oKSxiRSh0LmQuaSxlKX1mdW5jdGlvbiB2Zm4oZSx0KXtyZXR1cm4gbHgoKSxuZXcgbm10KHQsZSl9ZnVuY3Rpb24gd2ZuKGUsdCxuKXtyZXR1cm4gZS5OZSh0LG4pPD0wP246dH1mdW5jdGlvbiB5Zm4oZSx0LG4pe3JldHVybiBlLk5lKHQsbik8PTA/dDpufWZ1bmN0aW9uIHhmbihlLHQpe3JldHVybiBsKEIxKGUuYix0KSwxNDMpfWZ1bmN0aW9uIGtmbihlLHQpe3JldHVybiBsKEIxKGUuYyx0KSwyMzMpfWZ1bmN0aW9uIHVhZShlKXtyZXR1cm4gbChqdChlLmEsZS5iKSwyOTQpfWZ1bmN0aW9uIF9ydChlKXtyZXR1cm4gbmV3IGx0KGUuYyxlLmQrZS5hKX1mdW5jdGlvbiBBcnQoZSl7cmV0dXJuIG5yKGUpLGU/MTIzMToxMjM3fWZ1bmN0aW9uIExydChlKXtyZXR1cm4gU2goKSxvbnQobChlLDIwMykpfWZ1bmN0aW9uIHB5KCl7cHk9VSxxX2U9dW4oKG1oKCksQ3YpKX1mdW5jdGlvbiBFZm4oZSx0KXt0LmE/X0VuKGUsdCk6dGFlKGUuYSx0LmIpfWZ1bmN0aW9uIEFPKGUsdCxuKXsrK2UuaixlLnRqKCksTm9lKGUsdCxuKX1mdW5jdGlvbiBNcnQoZSx0LG4peysrZS5qLGUucWoodCxlLlppKHQsbikpfWZ1bmN0aW9uIERydChlLHQsbil7dmFyIHI7cj1lLmZkKHQpLHIuUmIobil9ZnVuY3Rpb24gV3llKGUsdCxuKXtyZXR1cm4gbj1OaChlLHQsNixuKSxufWZ1bmN0aW9uIFl5ZShlLHQsbil7cmV0dXJuIG49TmgoZSx0LDMsbiksbn1mdW5jdGlvbiBYeWUoZSx0LG4pe3JldHVybiBuPU5oKGUsdCw5LG4pLG59ZnVuY3Rpb24gdmQoZSx0KXtyZXR1cm4gVU8odCx5RWUpLGUuZj10LGV9ZnVuY3Rpb24gUXllKGUsdCl7cmV0dXJuKHQmSWkpJWUuZC5sZW5ndGh9ZnVuY3Rpb24gSXJ0KGUsdCxuKXtyZXR1cm4gTWtlKGUuYyxlLmIsdCxuKX1mdW5jdGlvbiBPcnQoZSx0KXt0aGlzLmM9ZSxMdy5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gTnJ0KGUsdCl7dGhpcy5hPWUsdlFlLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBMTyhlLHQpe3RoaXMuYT1lLHZRZS5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gdnMoZSx0KXtVaS5jYWxsKHRoaXMsZSksdGhpcy5hPXR9ZnVuY3Rpb24gSnllKGUsdCl7eHdlLmNhbGwodGhpcyxlKSx0aGlzLmE9dH1mdW5jdGlvbiBsYWUoZSx0KXt4d2UuY2FsbCh0aGlzLGUpLHRoaXMuYT10fWZ1bmN0aW9uIFRmbihlKXtJOGUuY2FsbCh0aGlzLDAsMCksdGhpcy5mPWV9ZnVuY3Rpb24gUHJ0KGUsdCxuKXtyZXR1cm4gZS5hKz1JZih0LDAsbiksZX1mdW5jdGlvbiBNTyhlKXtyZXR1cm4hZS5hJiYoZS5hPW5ldyBnZSksZS5hfWZ1bmN0aW9uIFp5ZShlLHQpe3ZhciBuO3JldHVybiBuPWUuZSxlLmU9dCxufWZ1bmN0aW9uIGU0ZShlLHQpe3ZhciBuO3JldHVybiBuPXQsISFlLkZlKG4pfWZ1bmN0aW9uIENmbihlLHQpe3JldHVybiBIbigpLGU9PXQ/MDplPzE6LTF9ZnVuY3Rpb24gYnkoZSx0KXtlLmEuYmQoZS5iLHQpLCsrZS5iLGUuYz0tMX1mdW5jdGlvbiBETyhlKXtlLmI/RE8oZS5iKTplLmYuYy56YyhlLmUsZS5kKX1mdW5jdGlvbiBCcnQoZSl7TmwoZS5lKSxlLmQuYj1lLmQsZS5kLmE9ZS5kfWZ1bmN0aW9uIFNmbihlLHQsbil7QW0oKSxFaWUoZSx0LlZlKGUuYSxuKSl9ZnVuY3Rpb24gdDRlKGUsdCxuKXtyZXR1cm4gUTgoZSxsKHQsMjIpLG4pfWZ1bmN0aW9uIGMwKGUsdCl7cmV0dXJuIFZ6KG5ldyBBcnJheSh0KSxlKX1mdW5jdGlvbiBfZm4oZSl7cmV0dXJuIFlyKHViKGUsMzIpKV5ZcihlKX1mdW5jdGlvbiBoYWUoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSl9ZnVuY3Rpb24gQWZuKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5tZXNzYWdlfWZ1bmN0aW9uIExmbihlLHQsbil7cmV0dXJuIGUuYXBwbHkodCxuKX1mdW5jdGlvbiBNZm4oZSx0KXt2YXIgbjtuPWVbbGhlXSxuLmNhbGwoZSx0KX1mdW5jdGlvbiBEZm4oZSx0KXt2YXIgbjtuPWVbbGhlXSxuLmNhbGwoZSx0KX1mdW5jdGlvbiBJZm4oZSx0KXtyZXR1cm4gc08oKSwhYkUodC5kLmksZSl9ZnVuY3Rpb24gbjRlKGUsdCxuLHIpe3NILmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBGcnQoKXtWcS5jYWxsKHRoaXMpLHRoaXMuYT1uZXcgcWF9ZnVuY3Rpb24gcjRlKCl7dGhpcy5uPW5ldyBxYSx0aGlzLm89bmV3IHFhfWZ1bmN0aW9uIFJydCgpe3RoaXMuYj1uZXcgcWEsdGhpcy5jPW5ldyBidH1mdW5jdGlvbiBqcnQoKXt0aGlzLmE9bmV3IGJ0LHRoaXMuYj1uZXcgYnR9ZnVuY3Rpb24gJHJ0KCl7dGhpcy5hPW5ldyBibSx0aGlzLmI9bmV3IEJRZX1mdW5jdGlvbiBpNGUoKXt0aGlzLmI9bmV3IGUyLHRoaXMuYT1uZXcgZTJ9ZnVuY3Rpb24genJ0KCl7dGhpcy5iPW5ldyBLcyx0aGlzLmE9bmV3IEtzfWZ1bmN0aW9uIHFydCgpe3RoaXMuYj1uZXcgUHIsdGhpcy5hPW5ldyBQcn1mdW5jdGlvbiBIcnQoKXt0aGlzLmI9bmV3IGRaZSx0aGlzLmE9bmV3IENTfWZ1bmN0aW9uIFZydCgpe3RoaXMuYT1uZXcgV3JlLHRoaXMuYj1uZXcgQWVlfWZ1bmN0aW9uIFVydCgpe3RoaXMuYT1uZXcgYnQsdGhpcy5kPW5ldyBidH1mdW5jdGlvbiBWcSgpe3RoaXMubj1uZXcgQTgsdGhpcy5pPW5ldyAkOH1mdW5jdGlvbiBHcnQoZSl7dGhpcy5hPShNaChlLFl5KSxuZXcgQnUoZSkpfWZ1bmN0aW9uIEtydChlKXt0aGlzLmE9KE1oKGUsWXkpLG5ldyBCdShlKSl9ZnVuY3Rpb24gT2ZuKGUpe3JldHVybiBlPDEwMD9udWxsOm5ldyBuYihlKX1mdW5jdGlvbiBOZm4oZSx0KXtyZXR1cm4gZS5uLmE9KG5yKHQpLHQrMTApfWZ1bmN0aW9uIFBmbihlLHQpe3JldHVybiBlLm4uYT0obnIodCksdCsxMCl9ZnVuY3Rpb24gQmZuKGUsdCl7cmV0dXJuIHQ9PWV8fGpFKF9VKHQpLGUpfWZ1bmN0aW9uIFdydChlLHQpe3JldHVybiBraShlLmEsdCwiIik9PW51bGx9ZnVuY3Rpb24gRmZuKGUsdCl7dmFyIG47cmV0dXJuIG49dC5xaShlLmEpLG59ZnVuY3Rpb24gT2koZSx0KXtyZXR1cm4gZS5hKz10LmEsZS5iKz10LmIsZX1mdW5jdGlvbiBtYShlLHQpe3JldHVybiBlLmEtPXQuYSxlLmItPXQuYixlfWZ1bmN0aW9uIFJmbihlKXtyZXR1cm4gYXkoZS5qLmMsMCksZS5hPS0xLGV9ZnVuY3Rpb24gczRlKGUsdCxuKXtyZXR1cm4gbj1OaChlLHQsMTEsbiksbn1mdW5jdGlvbiBqZm4oZSx0LG4pe24hPW51bGwmJndWKHQscHVlKGUsbikpfWZ1bmN0aW9uICRmbihlLHQsbil7biE9bnVsbCYmeVYodCxwdWUoZSxuKSl9ZnVuY3Rpb24gVjgoZSx0LG4scil7bnQuY2FsbCh0aGlzLGUsdCxuLHIpfWZ1bmN0aW9uIGE0ZShlLHQsbixyKXtudC5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gWXJ0KGUsdCxuLHIpe2E0ZS5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gWHJ0KGUsdCxuLHIpe3BILmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBmYWUoZSx0LG4scil7cEguY2FsbCh0aGlzLGUsdCxuLHIpfWZ1bmN0aW9uIG80ZShlLHQsbixyKXtwSC5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gUXJ0KGUsdCxuLHIpe2ZhZS5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gYzRlKGUsdCxuLHIpe2ZhZS5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gTG4oZSx0LG4scil7bzRlLmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBKcnQoZSx0LG4scil7YzRlLmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBacnQoZSx0LG4scil7YTVlLmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBteShlLHQpe3RjLmNhbGwodGhpcyxDTCtlK2F2K3QpfWZ1bmN0aW9uIHU0ZShlLHQpe3JldHVybiBlLmprKCkud2koKS5yaShlLHQpfWZ1bmN0aW9uIGw0ZShlLHQpe3JldHVybiBlLmprKCkud2koKS50aShlLHQpfWZ1bmN0aW9uIGVpdChlLHQpe3JldHVybiBucihlKSxxZShlKT09PXFlKHQpfWZ1bmN0aW9uIHZuKGUsdCl7cmV0dXJuIG5yKGUpLHFlKGUpPT09cWUodCl9ZnVuY3Rpb24gemZuKGUsdCl7cmV0dXJuIGUuYi5CZChuZXcga2V0KGUsdCkpfWZ1bmN0aW9uIHFmbihlLHQpe3JldHVybiBlLmIuQmQobmV3IEVldChlLHQpKX1mdW5jdGlvbiB0aXQoZSx0KXtyZXR1cm4gZS5iLkJkKG5ldyBUZXQoZSx0KSl9ZnVuY3Rpb24gSGZuKGUsdCl7cmV0dXJuIGUuZT1sKGUuZC5LYih0KSwxNTkpfWZ1bmN0aW9uIGg0ZShlLHQsbil7cmV0dXJuIGUubGFzdEluZGV4T2YodCxuKX1mdW5jdGlvbiBWZm4oZSx0LG4pe3JldHVybiBZaShlW3QuYV0sZVtuLmFdKX1mdW5jdGlvbiBVZm4oZSx0KXtyZXR1cm4gcnQodCwoTnQoKSxUQiksZSl9ZnVuY3Rpb24gR2ZuKGUsdCl7cmV0dXJuIHJ1KHQuYS5kLnAsZS5hLmQucCl9ZnVuY3Rpb24gS2ZuKGUsdCl7cmV0dXJuIHJ1KGUuYS5kLnAsdC5hLmQucCl9ZnVuY3Rpb24gV2ZuKGUsdCl7cmV0dXJuIFlpKGUuYy1lLnMsdC5jLXQucyl9ZnVuY3Rpb24gWWZuKGUsdCl7cmV0dXJuIFlpKGUuYi5lLmEsdC5iLmUuYSl9ZnVuY3Rpb24gWGZuKGUsdCl7cmV0dXJuIFlpKGUuYy5lLmEsdC5jLmUuYSl9ZnVuY3Rpb24gbml0KGUpe3JldHVybiBlLmM/Z2MoZS5jLmEsZSwwKTotMX1mdW5jdGlvbiBVOChlKXtyZXR1cm4gZT09VHZ8fGU9PVRnfHxlPT1NdX1mdW5jdGlvbiBmNGUoZSx0KXt0aGlzLmM9ZSxqYWUuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gcml0KGUsdCxuKXt0aGlzLmE9ZSxOeWUuY2FsbCh0aGlzLHQsbil9ZnVuY3Rpb24gaWl0KGUpe3RoaXMuYz1lLERxLmNhbGwodGhpcyxFUCwwKX1mdW5jdGlvbiBzaXQoZSx0LG4pe3RoaXMuYz10LHRoaXMuYj1uLHRoaXMuYT1lfWZ1bmN0aW9uIElPKGUpe2prKCksdGhpcy5kPWUsdGhpcy5hPW5ldyB6NX1mdW5jdGlvbiBhaXQoZSl7d2QoKSx0aGlzLmE9KENuKCksbmV3IEVrKGUpKX1mdW5jdGlvbiBRZm4oZSx0KXtVZyhlLmYpP1pFbihlLHQpOk14bihlLHQpfWZ1bmN0aW9uIG9pdChlLHQpe2xkbi5jYWxsKHRoaXMsZSxlLmxlbmd0aCx0KX1mdW5jdGlvbiBKZm4oZSx0KXtHMXx8dCYmKGUuZD10KX1mdW5jdGlvbiBjaXQoZSx0KXtyZXR1cm4gRGUodCwxNSkmJkJidChlLmMsdCl9ZnVuY3Rpb24gWmZuKGUsdCxuKXtyZXR1cm4gbChlLmMsNzEpLldrKHQsbil9ZnVuY3Rpb24gVXEoZSx0LG4pe3JldHVybiBsKGUuYyw3MSkuWGsodCxuKX1mdW5jdGlvbiBlMG4oZSx0LG4pe3JldHVybiB1Zm4oZSxsKHQsMzQzKSxuKX1mdW5jdGlvbiBkNGUoZSx0LG4pe3JldHVybiBsZm4oZSxsKHQsMzQzKSxuKX1mdW5jdGlvbiB0MG4oZSx0LG4pe3JldHVybiBMZ3QoZSxsKHQsMzQzKSxuKX1mdW5jdGlvbiB1aXQoZSx0LG4pe3JldHVybiBIeG4oZSxsKHQsMzQzKSxuKX1mdW5jdGlvbiBIXyhlLHQpe3JldHVybiB0PT1udWxsP251bGw6T3koZS5iLHQpfWZ1bmN0aW9uIGc0ZShlKXtyZXR1cm4gZnkoZSk/KG5yKGUpLGUpOmUudWUoKX1mdW5jdGlvbiBHcShlKXtyZXR1cm4haXNOYU4oZSkmJiFpc0Zpbml0ZShlKX1mdW5jdGlvbiBkYWUoZSl7a250KHRoaXMpLENoKHRoaXMpLEthKHRoaXMsZSl9ZnVuY3Rpb24gT2woZSl7WXNlKHRoaXMpLE00ZSh0aGlzLmMsMCxlLlBjKCkpfWZ1bmN0aW9uIFpoKGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bn1mdW5jdGlvbiBsaXQoZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIGhpdChlLHQsbil7dGhpcy5kPWUsdGhpcy5iPW4sdGhpcy5hPXR9ZnVuY3Rpb24gZml0KGUpe3RoaXMuYT1lLFZnKCksWmMoRGF0ZS5ub3coKSl9ZnVuY3Rpb24gZGl0KGUpe3BoKGUuYSksTDZlKGUuYyxlLmIpLGUuYj1udWxsfWZ1bmN0aW9uIGdhZSgpe2dhZT1VLHBfZT1uZXcgRXQsXzZ0PW5ldyBHdH1mdW5jdGlvbiBnaXQoKXtnaXQ9VSxNX3Q9V2Uod2EsUm4sMSwwLDUsMSl9ZnVuY3Rpb24gcGl0KCl7cGl0PVUsV190PVdlKHdhLFJuLDEsMCw1LDEpfWZ1bmN0aW9uIHA0ZSgpe3A0ZT1VLFlfdD1XZSh3YSxSbiwxLDAsNSwxKX1mdW5jdGlvbiB3ZCgpe3dkPVUsbmV3IFR3ZSgoQ24oKSxDbigpLF9vKSl9ZnVuY3Rpb24gbjBuKGUpe3JldHVybiByRSgpLEdyKCh4bHQoKSxNNnQpLGUpfWZ1bmN0aW9uIHIwbihlKXtyZXR1cm4gRmwoKSxHcigoaGx0KCksQjZ0KSxlKX1mdW5jdGlvbiBpMG4oZSl7cmV0dXJuIFpWKCksR3IoKFhjdCgpLHE2dCksZSl9ZnVuY3Rpb24gczBuKGUpe3JldHVybiBhVigpLEdyKChRY3QoKSxINnQpLGUpfWZ1bmN0aW9uIGEwbihlKXtyZXR1cm4gUFUoKSxHcigoWGZ0KCksVjZ0KSxlKX1mdW5jdGlvbiBvMG4oZSl7cmV0dXJuIHQxKCksR3IoKHVsdCgpLEs2dCksZSl9ZnVuY3Rpb24gYzBuKGUpe3JldHVybiBCbCgpLEdyKChjbHQoKSxZNnQpLGUpfWZ1bmN0aW9uIHUwbihlKXtyZXR1cm4gb2woKSxHcigobGx0KCksUTZ0KSxlKX1mdW5jdGlvbiBsMG4oZSl7cmV0dXJuIFlVKCksR3IoKEd0dCgpLHk3dCksZSl9ZnVuY3Rpb24gaDBuKGUpe3JldHVybiBQdygpLEdyKChFbHQoKSxrN3QpLGUpfWZ1bmN0aW9uIGYwbihlKXtyZXR1cm4gYngoKSxHcigoQ2x0KCksVDd0KSxlKX1mdW5jdGlvbiBkMG4oZSl7cmV0dXJuIE5BKCksR3IoKFRsdCgpLF83dCksZSl9ZnVuY3Rpb24gZzBuKGUpe3JldHVybiBaeigpLEdyKChrY3QoKSxBN3QpLGUpfWZ1bmN0aW9uIHAwbihlKXtyZXR1cm4gb1YoKSxHcigoSmN0KCksVTd0KSxlKX1mdW5jdGlvbiBiMG4oZSl7cmV0dXJuIGxBKCksR3IoKGZsdCgpLG04dCksZSl9ZnVuY3Rpb24gbTBuKGUpe3JldHVybiB1bygpLEdyKChhaHQoKSx4OHQpLGUpfWZ1bmN0aW9uIHYwbihlKXtyZXR1cm4gd0UoKSxHcigoX2x0KCksUzh0KSxlKX1mdW5jdGlvbiB3MG4oZSl7cmV0dXJuIEttKCksR3IoKFNsdCgpLEk4dCksZSl9ZnVuY3Rpb24gYjRlKGUsdCl7aWYoIWUpdGhyb3cgdWUobmV3IFluKHQpKX1mdW5jdGlvbiBSayhlKXtpZighZSl0aHJvdyB1ZShuZXcgbmMoSmtlKSl9ZnVuY3Rpb24gcGFlKGUsdCl7aWYoZSE9dCl0aHJvdyB1ZShuZXcgWGgpfWZ1bmN0aW9uIGJpdChlLHQsbil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW59ZnVuY3Rpb24gbTRlKGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bn1mdW5jdGlvbiBtaXQoZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIEtxKGUsdCxuKXt0aGlzLmI9ZSx0aGlzLmE9dCx0aGlzLmM9bn1mdW5jdGlvbiB2NGUoZSx0LG4pe3RoaXMuYj1lLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIHc0ZShlLHQsbil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW59ZnVuY3Rpb24gV3EoZSx0LG4pe3RoaXMuZT10LHRoaXMuYj1lLHRoaXMuZD1ufWZ1bmN0aW9uIHZpdChlLHQsbil7dGhpcy5iPWUsdGhpcy5hPXQsdGhpcy5jPW59ZnVuY3Rpb24geTBuKGUsdCxuKXtyZXR1cm4gQW0oKSxlLmEuWWQodCxuKSx0fWZ1bmN0aW9uIGJhZShlKXt2YXIgdDtyZXR1cm4gdD1uZXcgTWwsdC5lPWUsdH1mdW5jdGlvbiB5NGUoZSl7dmFyIHQ7cmV0dXJuIHQ9bmV3IHpRZSx0LmI9ZSx0fWZ1bmN0aW9uIE9PKCl7T089VSxDSz1uZXcgcFosU0s9bmV3IGRqfWZ1bmN0aW9uIFlxKCl7WXE9VSxLOHQ9bmV3IFNaLEc4dD1uZXcgYlN9ZnVuY3Rpb24gdTAoKXt1MD1VLEo4dD1uZXcgaWVlLFo4dD1uZXcgc2VlfWZ1bmN0aW9uIHgwbihlKXtyZXR1cm4gT3coKSxHcigoSHV0KCksdXh0KSxlKX1mdW5jdGlvbiBrMG4oZSl7cmV0dXJuIHZvKCksR3IoKEt0dCgpLHE4dCksZSl9ZnVuY3Rpb24gRTBuKGUpe3JldHVybiBJVigpLEdyKChMbHQoKSxVOHQpLGUpfWZ1bmN0aW9uIFQwbihlKXtyZXR1cm4gUjEoKSxHcigoQWx0KCksbnh0KSxlKX1mdW5jdGlvbiBDMG4oZSl7cmV0dXJuIFJ5KCksR3IoKG9odCgpLGl4dCksZSl9ZnVuY3Rpb24gUzBuKGUpe3JldHVybiBPVSgpLEdyKChQZnQoKSxseHQpLGUpfWZ1bmN0aW9uIF8wbihlKXtyZXR1cm4geXgoKSxHcigoSWh0KCksaHh0KSxlKX1mdW5jdGlvbiBBMG4oZSl7cmV0dXJuIEpIKCksR3IoKHN1dCgpLGZ4dCksZSl9ZnVuY3Rpb24gTDBuKGUpe3JldHVybiBkQSgpLEdyKCh6dXQoKSxkeHQpLGUpfWZ1bmN0aW9uIE0wbihlKXtyZXR1cm4gcFYoKSxHcigocXV0KCksZ3h0KSxlKX1mdW5jdGlvbiBEMG4oZSl7cmV0dXJuIGwyKCksR3IoKGNodCgpLHB4dCksZSl9ZnVuY3Rpb24gSTBuKGUpe3JldHVybiBwTigpLEdyKCh0dXQoKSxieHQpLGUpfWZ1bmN0aW9uIE8wbihlKXtyZXR1cm4gekUoKSxHcigoUGh0KCksa3h0KSxlKX1mdW5jdGlvbiBOMG4oZSl7cmV0dXJuIEhvKCksR3IoKGYwdCgpLEV4dCksZSl9ZnVuY3Rpb24gUDBuKGUpe3JldHVybiB2RSgpLEdyKChVdXQoKSxUeHQpLGUpfWZ1bmN0aW9uIEIwbihlKXtyZXR1cm4gZXAoKSxHcigoR3V0KCksU3h0KSxlKX1mdW5jdGlvbiBGMG4oZSl7cmV0dXJuIHpIKCksR3IoKGV1dCgpLF94dCksZSl9ZnVuY3Rpb24gUjBuKGUpe3JldHVybiBXTigpLEdyKChOaHQoKSx4eHQpLGUpfWZ1bmN0aW9uIGowbihlKXtyZXR1cm4gVm0oKSxHcigoVnV0KCksdnh0KSxlKX1mdW5jdGlvbiAkMG4oZSl7cmV0dXJuIHlVKCksR3IoKE9odCgpLHd4dCksZSl9ZnVuY3Rpb24gejBuKGUpe3JldHVybiBjTigpLEdyKChudXQoKSx5eHQpLGUpfWZ1bmN0aW9uIHEwbihlKXtyZXR1cm4gaGYoKSxHcigobGh0KCksQXh0KSxlKX1mdW5jdGlvbiBIMG4oZSl7cmV0dXJuIHAyKCksR3IoKEtmdCgpLEprdCksZSl9ZnVuY3Rpb24gVjBuKGUpe3JldHVybiBFQSgpLEdyKChLdXQoKSxaa3QpLGUpfWZ1bmN0aW9uIFUwbihlKXtyZXR1cm4gQnkoKSxHcigoTWx0KCksZUV0KSxlKX1mdW5jdGlvbiBHMG4oZSl7cmV0dXJuIE9BKCksR3IoKHVodCgpLHRFdCksZSl9ZnVuY3Rpb24gSzBuKGUpe3JldHVybiBOZigpLEdyKChkMHQoKSxuRXQpLGUpfWZ1bmN0aW9uIFcwbihlKXtyZXR1cm4gRWQoKSxHcigoRGx0KCksckV0KSxlKX1mdW5jdGlvbiBZMG4oZSl7cmV0dXJuIGROKCksR3IoKHJ1dCgpLGlFdCksZSl9ZnVuY3Rpb24gWDBuKGUpe3JldHVybiBxbygpLEdyKChYdXQoKSxhRXQpLGUpfWZ1bmN0aW9uIFEwbihlKXtyZXR1cm4gTFYoKSxHcigoV3V0KCksb0V0KSxlKX1mdW5jdGlvbiBKMG4oZSl7cmV0dXJuIHlBKCksR3IoKFl1dCgpLGNFdCksZSl9ZnVuY3Rpb24gWjBuKGUpe3JldHVybiBTRSgpLEdyKChRdXQoKSx1RXQpLGUpfWZ1bmN0aW9uIGUxbihlKXtyZXR1cm4gZ1YoKSxHcigoSnV0KCksbEV0KSxlKX1mdW5jdGlvbiB0MW4oZSl7cmV0dXJuIE9WKCksR3IoKFp1dCgpLGhFdCksZSl9ZnVuY3Rpb24gbjFuKGUpe3JldHVybiBJdygpLEdyKChvbHQoKSxfRXQpLGUpfWZ1bmN0aW9uIHIxbihlKXtyZXR1cm4gb0EoKSxHcigoaXV0KCksSUV0KSxlKX1mdW5jdGlvbiBpMW4oZSl7cmV0dXJuIHhkKCksR3IoKGN1dCgpLGpFdCksZSl9ZnVuY3Rpb24gczFuKGUpe3JldHVybiBEMSgpLEdyKCh1dXQoKSx6RXQpLGUpfWZ1bmN0aW9uIGExbihlKXtyZXR1cm4gSjAoKSxHcigobHV0KCksblR0KSxlKX1mdW5jdGlvbiBvMW4oZSl7cmV0dXJuIFN3KCksR3IoKGh1dCgpLHVUdCksZSl9ZnVuY3Rpb24gYzFuKGUpe3JldHVybiB3eCgpLEdyKChSbHQoKSxsVHQpLGUpfWZ1bmN0aW9uIHUxbihlKXtyZXR1cm4gV0EoKSxHcigoV3R0KCksaFR0KSxlKX1mdW5jdGlvbiBsMW4oZSl7cmV0dXJuIHhBKCksR3IoKGVsdCgpLGZUdCksZSl9ZnVuY3Rpb24gaDFuKGUpe3JldHVybiBrQSgpLEdyKChGbHQoKSxQVHQpLGUpfWZ1bmN0aW9uIGYxbihlKXtyZXR1cm4gUkgoKSxHcigoYXV0KCksQlR0KSxlKX1mdW5jdGlvbiBkMW4oZSl7cmV0dXJuIGtWKCksR3IoKG91dCgpLHpUdCksZSl9ZnVuY3Rpb24gZzFuKGUpe3JldHVybiBiVSgpLEdyKChoaHQoKSxIVHQpLGUpfWZ1bmN0aW9uIHAxbihlKXtyZXR1cm4gTE4oKSxHcigodGx0KCksVVR0KSxlKX1mdW5jdGlvbiBiMW4oZSl7cmV0dXJuIGVWKCksR3IoKGZ1dCgpLFZUdCksZSl9ZnVuY3Rpb24gbTFuKGUpe3JldHVybiB1VSgpLEdyKChCbHQoKSxoQ3QpLGUpfWZ1bmN0aW9uIHYxbihlKXtyZXR1cm4gQVYoKSxHcigobmx0KCksZkN0KSxlKX1mdW5jdGlvbiB3MW4oZSl7cmV0dXJuIFdWKCksR3IoKHJsdCgpLGRDdCksZSl9ZnVuY3Rpb24geTFuKGUpe3JldHVybiBzVSgpLEdyKChpbHQoKSxwQ3QpLGUpfWZ1bmN0aW9uIHgxbihlKXtyZXR1cm4gcVYoKSxHcigoc2x0KCksdkN0KSxlKX1mdW5jdGlvbiBrMW4oZSl7cmV0dXJuIEdIKCksR3IoKGR1dCgpLGpDdCksZSl9ZnVuY3Rpb24gRTFuKGUpe3JldHVybiBkRSgpLEdyKChaY3QoKSx6OHQpLGUpfWZ1bmN0aW9uIFQxbihlKXtyZXR1cm4gWm4oKSxHcigoQmh0KCksQjh0KSxlKX1mdW5jdGlvbiBDMW4oZSl7cmV0dXJuIHRWKCksR3IoKGFsdCgpLCRDdCksZSl9ZnVuY3Rpb24gUzFuKGUpe3JldHVybiBmY2UoKSxHcigoZ3V0KCksekN0KSxlKX1mdW5jdGlvbiBfMW4oZSl7cmV0dXJuIFZBKCksR3IoKGZodCgpLEhDdCksZSl9ZnVuY3Rpb24gQTFuKGUpe3JldHVybiBucSgpLEdyKChNY3QoKSxVQ3QpLGUpfWZ1bmN0aW9uIEwxbihlKXtyZXR1cm4gUE4oKSxHcigoZ2x0KCksVkN0KSxlKX1mdW5jdGlvbiBNMW4oZSl7cmV0dXJuIHJxKCksR3IoKERjdCgpLEtDdCksZSl9ZnVuY3Rpb24gRDFuKGUpe3JldHVybiByTigpLEdyKChwdXQoKSxXQ3QpLGUpfWZ1bmN0aW9uIEkxbihlKXtyZXR1cm4gWE4oKSxHcigoZGh0KCksWUN0KSxlKX1mdW5jdGlvbiBPMW4oZSl7cmV0dXJuIGJfKCksR3IoKEljdCgpLGhTdCksZSl9ZnVuY3Rpb24gTjFuKGUpe3JldHVybiBDTigpLEdyKChidXQoKSxmU3QpLGUpfWZ1bmN0aW9uIFAxbihlKXtyZXR1cm4gcjEoKSxHcigocGh0KCksdlN0KSxlKX1mdW5jdGlvbiBCMW4oZSl7cmV0dXJuIGcyKCksR3IoKE9mdCgpLHlTdCksZSl9ZnVuY3Rpb24gRjFuKGUpe3JldHVybiBvZygpLEdyKChGaHQoKSx4U3QpLGUpfWZ1bmN0aW9uIFIxbihlKXtyZXR1cm4gWW0oKSxHcigoUmh0KCksX1N0KSxlKX1mdW5jdGlvbiBqMW4oZSl7cmV0dXJuIEpzKCksR3IoKGdodCgpLEdTdCksZSl9ZnVuY3Rpb24gJDFuKGUpe3JldHVybiBGMSgpLEdyKChwbHQoKSxLU3QpLGUpfWZ1bmN0aW9uIHoxbihlKXtyZXR1cm4gaXAoKSxHcigoamx0KCksV1N0KSxlKX1mdW5jdGlvbiBxMW4oZSl7cmV0dXJuIHZVKCksR3IoKGpodCgpLFlTdCksZSl9ZnVuY3Rpb24gSDFuKGUpe3JldHVybiBycCgpLEdyKChkbHQoKSxRU3QpLGUpfWZ1bmN0aW9uIFYxbihlKXtyZXR1cm4gSWgoKSxHcigoJGx0KCksWlN0KSxlKX1mdW5jdGlvbiBVMW4oZSl7cmV0dXJuIHF5KCksR3IoKFlmdCgpLGVfdCksZSl9ZnVuY3Rpb24gRzFuKGUpe3JldHVybiB0NigpLEdyKChiaHQoKSx0X3QpLGUpfWZ1bmN0aW9uIEsxbihlKXtyZXR1cm4gUmEoKSxHcigoJGh0KCksbl90KSxlKX1mdW5jdGlvbiBXMW4oZSl7cmV0dXJuIFJsKCksR3IoKHpodCgpLHJfdCksZSl9ZnVuY3Rpb24gWTFuKGUpe3JldHVybiBDdCgpLEdyKChtaHQoKSxpX3QpLGUpfWZ1bmN0aW9uIFgxbihlKXtyZXR1cm4gbWgoKSxHcigoemx0KCksdV90KSxlKX1mdW5jdGlvbiBRMW4oZSl7cmV0dXJuIFpsKCksR3IoKFdmdCgpLGxfdCksZSl9ZnVuY3Rpb24gSjFuKGUpe3JldHVybiBkeCgpLEdyKChibHQoKSxoX3QpLGUpfWZ1bmN0aW9uIFoxbihlLHQpe3JldHVybiBucihlKSxlKyhucih0KSx0KX1mdW5jdGlvbiBlZG4oZSl7cmV0dXJuIG1hZSgpLEdyKChtdXQoKSxmX3QpLGUpfWZ1bmN0aW9uIHRkbihlKXtyZXR1cm4gVlYoKSxHcigocWx0KCksZF90KSxlKX1mdW5jdGlvbiBuZG4oZSl7cmV0dXJuIE5WKCksR3IoKEhsdCgpLGJfdCksZSl9ZnVuY3Rpb24gamsoKXtqaz1VLCREZT0oQ3QoKSxlciksRFc9YXJ9ZnVuY3Rpb24gbWFlKCl7bWFlPVUsclBlPW5ldyBXaXQsaVBlPW5ldyBPc3R9ZnVuY3Rpb24gcmRuKGUpe3JldHVybiFlLmUmJihlLmU9bmV3IGJ0KSxlLmV9ZnVuY3Rpb24gdmFlKGUsdCl7dGhpcy5jPWUsdGhpcy5hPXQsdGhpcy5iPXQtZX1mdW5jdGlvbiB3aXQoZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIHdhZShlLHQsbil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW59ZnVuY3Rpb24geDRlKGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bn1mdW5jdGlvbiBrNGUoZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIHlpdChlLHQsbil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW59ZnVuY3Rpb24geGl0KGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bn1mdW5jdGlvbiBYcChlLHQsbil7dGhpcy5lPWUsdGhpcy5hPXQsdGhpcy5jPW59ZnVuY3Rpb24ga2l0KGUsdCxuKXtKaCgpLCQ1ZS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIHlhZShlLHQsbil7SmgoKSxFNWUuY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBFNGUoZSx0LG4pe0poKCksRTVlLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gVDRlKGUsdCxuKXtKaCgpLEU1ZS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIEVpdChlLHQsbil7SmgoKSx5YWUuY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBDNGUoZSx0LG4pe0poKCkseWFlLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gVGl0KGUsdCxuKXtKaCgpLEM0ZS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIENpdChlLHQsbil7SmgoKSxFNGUuY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBTaXQoZSx0LG4pe0poKCksVDRlLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24geGFlKGUpe3NILmNhbGwodGhpcyxlLmQsZS5jLGUuYSxlLmIpfWZ1bmN0aW9uIFM0ZShlKXtzSC5jYWxsKHRoaXMsZS5kLGUuYyxlLmEsZS5iKX1mdW5jdGlvbiBfNGUoZSl7dGhpcy5kPWUsTXIodGhpcyksdGhpcy5iPW5nbihlLmQpfWZ1bmN0aW9uIGlkbihlKXtyZXR1cm4gSEUoKSxHcigoTmZ0KCksTF90KSxlKX1mdW5jdGlvbiBOTyhlLHQpe3JldHVybiBYcihlKSxYcih0KSxuZXcgSVplKGUsdCl9ZnVuY3Rpb24gRzgoZSx0KXtyZXR1cm4gWHIoZSksWHIodCksbmV3IGppdChlLHQpfWZ1bmN0aW9uIHNkbihlLHQpe3JldHVybiBYcihlKSxYcih0KSxuZXcgJGl0KGUsdCl9ZnVuY3Rpb24gYWRuKGUsdCl7cmV0dXJuIFhyKGUpLFhyKHQpLG5ldyB6WmUoZSx0KX1mdW5jdGlvbiBrYWUoZSl7cmV0dXJuIG1yKGUuYiE9MCksYWYoZSxlLmEuYSl9ZnVuY3Rpb24gb2RuKGUpe3JldHVybiBtcihlLmIhPTApLGFmKGUsZS5jLmIpfWZ1bmN0aW9uIGNkbihlKXtyZXR1cm4hZS5jJiYoZS5jPW5ldyBYZCksZS5jfWZ1bmN0aW9uICRrKGUpe3ZhciB0O3JldHVybiB0PW5ldyBidCxHb2UodCxlKSx0fWZ1bmN0aW9uIHVkbihlKXt2YXIgdDtyZXR1cm4gdD1uZXcgS3MsR29lKHQsZSksdH1mdW5jdGlvbiBfaXQoZSl7dmFyIHQ7cmV0dXJuIHQ9bmV3IEx3ZSxzY2UodCxlKSx0fWZ1bmN0aW9uIFBPKGUpe3ZhciB0O3JldHVybiB0PW5ldyBvcyxzY2UodCxlKSx0fWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gVl8oZT09bnVsbHx8aXVlKGUsdCkpLGV9ZnVuY3Rpb24gbGRuKGUsdCxuKXtTc3QuY2FsbCh0aGlzLHQsbiksdGhpcy5hPWV9ZnVuY3Rpb24gQWl0KGUsdCl7dGhpcy5jPWUsdGhpcy5iPXQsdGhpcy5hPSExfWZ1bmN0aW9uIExpdCgpe3RoaXMuYT0iOyw7Iix0aGlzLmI9IiIsdGhpcy5jPSIifWZ1bmN0aW9uIE1pdChlLHQsbil7dGhpcy5iPWUsenR0LmNhbGwodGhpcyx0LG4pfWZ1bmN0aW9uIEE0ZShlLHQsbil7dGhpcy5jPWUsY3EuY2FsbCh0aGlzLHQsbil9ZnVuY3Rpb24gTDRlKGUsdCxuKXtJay5jYWxsKHRoaXMsZSx0KSx0aGlzLmI9bn1mdW5jdGlvbiBNNGUoZSx0LG4pe2s5ZShuLDAsZSx0LG4ubGVuZ3RoLCExKX1mdW5jdGlvbiB0ZyhlLHQsbixyLGEpe2UuYj10LGUuYz1uLGUuZD1yLGUuYT1hfWZ1bmN0aW9uIEQ0ZShlLHQsbixyLGEpe2UuZD10LGUuYz1uLGUuYT1yLGUuYj1hfWZ1bmN0aW9uIGhkbihlLHQpe3QmJihlLmI9dCxlLmE9KGZiKHQpLHQuYSkpfWZ1bmN0aW9uIEJPKGUsdCl7aWYoIWUpdGhyb3cgdWUobmV3IFluKHQpKX1mdW5jdGlvbiBLOChlLHQpe2lmKCFlKXRocm93IHVlKG5ldyBuYyh0KSl9ZnVuY3Rpb24gSTRlKGUsdCl7aWYoIWUpdGhyb3cgdWUobmV3IEJKZSh0KSl9ZnVuY3Rpb24gZmRuKGUsdCl7cmV0dXJuIGVxKCkscnUoZS5kLnAsdC5kLnApfWZ1bmN0aW9uIGRkbihlLHQpe3JldHVybiB0cCgpLFlpKGUuZS5iLHQuZS5iKX1mdW5jdGlvbiBnZG4oZSx0KXtyZXR1cm4gdHAoKSxZaShlLmUuYSx0LmUuYSl9ZnVuY3Rpb24gcGRuKGUsdCl7cmV0dXJuIHJ1KFVpdChlLmQpLFVpdCh0LmQpKX1mdW5jdGlvbiBYcShlLHQpe3JldHVybiB0JiZ5SChlLHQuZCk/dDpudWxsfWZ1bmN0aW9uIGJkbihlLHQpe3JldHVybiB0PT0oQ3QoKSxlcik/ZS5jOmUuZH1mdW5jdGlvbiBPNGUoZSl7cmV0dXJuIG1iKHBnbih3YyhlKT9NZihlKTplKSl9ZnVuY3Rpb24gbWRuKGUpe3JldHVybiBuZXcgbHQoZS5jK2UuYixlLmQrZS5hKX1mdW5jdGlvbiBEaXQoZSl7cmV0dXJuIGUhPW51bGwmJiFIY2UoZSwkTSx6TSl9ZnVuY3Rpb24gdmRuKGUsdCl7cmV0dXJuKHUxdChlKTw8NHx1MXQodCkpJlpzfWZ1bmN0aW9uIElpdChlLHQsbixyLGEpe2UuYz10LGUuZD1uLGUuYj1yLGUuYT1hfWZ1bmN0aW9uIE40ZShlKXt2YXIgdCxuO3Q9ZS5iLG49ZS5jLGUuYj1uLGUuYz10fWZ1bmN0aW9uIFA0ZShlKXt2YXIgdCxuO249ZS5kLHQ9ZS5hLGUuZD10LGUuYT1ufWZ1bmN0aW9uIHdkbihlLHQpe3ZhciBuO3JldHVybiBuPWUuYyxkN2UoZSx0KSxufWZ1bmN0aW9uIEI0ZShlLHQpe3JldHVybiB0PDA/ZS5nPS0xOmUuZz10LGV9ZnVuY3Rpb24gUXEoZSx0KXtyZXR1cm4gX3duKGUpLGUuYSo9dCxlLmIqPXQsZX1mdW5jdGlvbiBPaXQoZSx0LG4pe19odC5jYWxsKHRoaXMsdCxuKSx0aGlzLmQ9ZX1mdW5jdGlvbiBGTyhlLHQsbil7dHllLmNhbGwodGhpcyxlLHQpLHRoaXMuYz1ufWZ1bmN0aW9uIEpxKGUsdCxuKXt0eWUuY2FsbCh0aGlzLGUsdCksdGhpcy5jPW59ZnVuY3Rpb24gRjRlKGUpe3A0ZSgpLG01LmNhbGwodGhpcyksdGhpcy5jaShlKX1mdW5jdGlvbiBOaXQoKXtlRSgpLCRnbi5jYWxsKHRoaXMsKGliKCksR2YpKX1mdW5jdGlvbiBQaXQoZSl7cmV0dXJuIERpKCksbmV3IG5nKDAsZSl9ZnVuY3Rpb24gQml0KCl7Qml0PVUsc3BlPShDbigpLG5ldyBEYShjMGUpKX1mdW5jdGlvbiBacSgpe1pxPVUsbmV3IFc4ZSgoR2llKCkseTBlKSwoVWllKCksdzBlKSl9ZnVuY3Rpb24gRml0KCl7Rml0PVUsdF9lPVdlKHJvLGR0LDE3LDI1NiwwLDEpfWZ1bmN0aW9uIFJpdCgpe3RoaXMuYj16ZShHZShJdCgoYjAoKSxaMGUpKSkpfWZ1bmN0aW9uIEVhZShlKXt0aGlzLmI9ZSx0aGlzLmE9TW0odGhpcy5iLmEpLk9kKCl9ZnVuY3Rpb24gaml0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXQsR1MuY2FsbCh0aGlzKX1mdW5jdGlvbiAkaXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dCxHUy5jYWxsKHRoaXMpfWZ1bmN0aW9uIHppdChlLHQsbil7dGhpcy5hPWUsTjUuY2FsbCh0aGlzLHQsbil9ZnVuY3Rpb24gcWl0KGUsdCxuKXt0aGlzLmE9ZSxONS5jYWxsKHRoaXMsdCxuKX1mdW5jdGlvbiB6ayhlLHQsbil7dmFyIHI7cj1uZXcgeXkobiksZTEoZSx0LHIpfWZ1bmN0aW9uIFI0ZShlLHQsbil7dmFyIHI7cmV0dXJuIHI9ZVt0XSxlW3RdPW4scn1mdW5jdGlvbiBlSChlKXt2YXIgdDtyZXR1cm4gdD1lLnNsaWNlKCksam9lKHQsZSl9ZnVuY3Rpb24gdEgoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5uLGUuYS5iK3QuZCt0LmF9ZnVuY3Rpb24gSGl0KGUpe3ZhciB0O3JldHVybiB0PWUubixlLmUuYit0LmQrdC5hfWZ1bmN0aW9uIGo0ZShlKXt2YXIgdDtyZXR1cm4gdD1lLm4sZS5lLmErdC5iK3QuY31mdW5jdGlvbiAkNGUoZSl7ZS5hLmI9ZS5iLGUuYi5hPWUuYSxlLmE9ZS5iPW51bGx9ZnVuY3Rpb24gdWkoZSx0KXtyZXR1cm4gQ3MoZSx0LGUuYy5iLGUuYyksITB9ZnVuY3Rpb24geWRuKGUpe3JldHVybiBlLmE/ZS5hOlFhZShlKX1mdW5jdGlvbiB4ZG4oZSl7cmV0dXJuIHR4KCksY2coZSk9PWRzKEViKGUpKX1mdW5jdGlvbiBrZG4oZSl7cmV0dXJuIHR4KCksRWIoZSk9PWRzKGNnKGUpKX1mdW5jdGlvbiBndyhlLHQpe3JldHVybiBSQShlLG5ldyBJayh0LmEsdC5iKSl9ZnVuY3Rpb24gRWRuKGUsdCl7cmV0dXJuIGtIKCksZnVlKGUsdCksbmV3IGhhdChlLHQpfWZ1bmN0aW9uIFRkbihlLHQpe3JldHVybiBlLmM8dC5jPy0xOmUuYz09dC5jPzA6MX1mdW5jdGlvbiBWaXQoZSl7cmV0dXJuIGUuYi5jLmxlbmd0aC1lLmUuYy5sZW5ndGh9ZnVuY3Rpb24gVWl0KGUpe3JldHVybiBlLmUuYy5sZW5ndGgtZS5nLmMubGVuZ3RofWZ1bmN0aW9uIFRhZShlKXtyZXR1cm4gZS5lLmMubGVuZ3RoK2UuZy5jLmxlbmd0aH1mdW5jdGlvbiBSTyhlKXtyZXR1cm4gZT09MHx8aXNOYU4oZSk/ZTplPDA/LTE6MX1mdW5jdGlvbiBDZG4oZSl7cmV0dXJuIURvKGUpJiZlLmMuaS5jPT1lLmQuaS5jfWZ1bmN0aW9uIFNkbihlKXtyZXR1cm4gU2goKSwoQ3QoKSxKdSkuSGMoZS5qKX1mdW5jdGlvbiBfZG4oZSx0LG4pe3JldHVybiB0cCgpLG4uZS5hK24uZi5hK2UqdH1mdW5jdGlvbiBBZG4oZSx0LG4pe3JldHVybiB0cCgpLG4uZS5iK24uZi5iK2UqdH1mdW5jdGlvbiBMZG4oZSx0LG4pe3JldHVybiBraShlLmIsbChuLmIsMTgpLHQpfWZ1bmN0aW9uIE1kbihlLHQsbil7cmV0dXJuIGtpKGUuYixsKG4uYiwxOCksdCl9ZnVuY3Rpb24gRGRuKGUsdCxuKXttRG4oZS5hLGUuYixlLmMsbCh0LDE2Niksbil9ZnVuY3Rpb24gejRlKGUsdCxuLHIpe3o4ZS5jYWxsKHRoaXMsZSx0LG4sciwwLDApfWZ1bmN0aW9uIEdpdChlKXtwNGUoKSxGNGUuY2FsbCh0aGlzLGUpLHRoaXMuYT0tMX1mdW5jdGlvbiBLaXQoZSx0KXtTc3QuY2FsbCh0aGlzLHQsMTA0MCksdGhpcy5hPWV9ZnVuY3Rpb24gV2l0KCl7Y3R0LmNhbGwodGhpcywiQ09VTlRfQ0hJTERSRU4iLDApfWZ1bmN0aW9uIG5IKGUsdCl7eU8uY2FsbCh0aGlzLGUsdCksdGhpcy5hPXRoaXN9ZnVuY3Rpb24ga3MoZSx0KXt2YXIgbjtyZXR1cm4gbj1HYWUoZSx0KSxuLmk9MixufWZ1bmN0aW9uIHJIKGUsdCl7dmFyIG47cmV0dXJuKytlLmosbj1lLkNqKHQpLG59ZnVuY3Rpb24gZmkoZSx0LG4pe3JldHVybiBlLmE9LTEsQnllKGUsdC5nLG4pLGV9ZnVuY3Rpb24gSWRuKGUsdCl7cmV0dXJuIHZ0KGUsbmV3IGx0KHQuYSx0LmIpKX1mdW5jdGlvbiBZaXQoZSl7cmV0dXJuIHV4KCksV2UoUFcsSUcsNDAsZSwwLDEpfWZ1bmN0aW9uIFhpdChlKXtyZXR1cm4gZS5lLlJkKCkuZ2MoKSplLmMuUmQoKS5nYygpfWZ1bmN0aW9uIENhZShlLHQsbil7cmV0dXJuIG5ldyBzaXQocWduKGUpLl9lKCksbix0KX1mdW5jdGlvbiBPZG4oZSx0KXtnN2UoZSx0PT1udWxsP251bGw6KG5yKHQpLHQpKX1mdW5jdGlvbiBOZG4oZSx0KXtmN2UoZSx0PT1udWxsP251bGw6KG5yKHQpLHQpKX1mdW5jdGlvbiBQZG4oZSx0KXtmN2UoZSx0PT1udWxsP251bGw6KG5yKHQpLHQpKX1mdW5jdGlvbiBWXyhlKXtpZighZSl0aHJvdyB1ZShuZXcga2sobnVsbCkpfWZ1bmN0aW9uIHE0ZShlKXtpZihlLmMuZSE9ZS5hKXRocm93IHVlKG5ldyBYaCl9ZnVuY3Rpb24gSDRlKGUpe2lmKGUuZS5jIT1lLmIpdGhyb3cgdWUobmV3IFhoKX1mdW5jdGlvbiBpSChlKXtmb3IoWHIoZSk7ZS5PYigpOyllLlBiKCksZS5RYigpfWZ1bmN0aW9uIFNhZShlKXt3dygpLHRoaXMuYT0oQ24oKSxuZXcgRGEoWHIoZSkpKX1mdW5jdGlvbiBWNGUoZSl7dGhpcy5jPWUsdGhpcy5iPXRoaXMuYy5kLnZjKCkuS2MoKX1mdW5jdGlvbiBCZG4oZSl7ZS5hLmxkKCksbChlLmEubWQoKSwxNikuZ2MoKSxad2UoKX1mdW5jdGlvbiBRaXQoZSx0KXtyZXR1cm4gZS5hKz1JZih0LDAsdC5sZW5ndGgpLGV9ZnVuY3Rpb24ganQoZSx0KXtyZXR1cm4gU24odCxlLmMubGVuZ3RoKSxlLmNbdF19ZnVuY3Rpb24gSml0KGUsdCl7cmV0dXJuIFNuKHQsZS5hLmxlbmd0aCksZS5hW3RdfWZ1bmN0aW9uIEZkbihlLHQpe3JldHVybiBucih0KSx2Tih0LChucihlKSxlKSl9ZnVuY3Rpb24gUmRuKGUsdCl7cmV0dXJuIG5yKGUpLHZOKGUsKG5yKHQpLHQpKX1mdW5jdGlvbiBMbShlLHQsbixyLGEsbyl7cmV0dXJuIGtndChlLHQsbixyLGEsMCxvKX1mdW5jdGlvbiBqZG4oZSx0KXtyZXR1cm4gVHModCwwLFU0ZSh0WzBdLGFwKDEpKSl9ZnVuY3Rpb24gJGRuKGUsdCl7cmV0dXJuIGFwKGJvKGFwKGUuYSkuYSx0LmEpKX1mdW5jdGlvbiBVNGUoZSx0KXtyZXR1cm4gJGRuKGwoZSwxNjgpLGwodCwxNjgpKX1mdW5jdGlvbiBaaXQoKXtaaXQ9VSxuX2U9V2UocjMsZHQsMTY4LDI1NiwwLDEpfWZ1bmN0aW9uIGVzdCgpe2VzdD1VLHNfZT1XZShpMyxkdCwxOTEsMjU2LDAsMSl9ZnVuY3Rpb24gdHN0KCl7dHN0PVUsSlNlPVdlKGp4LGR0LDIyMiwyNTYsMCwxKX1mdW5jdGlvbiBuc3QoKXtuc3Q9VSxlX2U9V2UoUEwsZHQsMTgwLDEyOCwwLDEpfWZ1bmN0aW9uIEc0ZSgpe3RnKHRoaXMsITEsITEsITEsITEpfWZ1bmN0aW9uIEs0ZShlKXt3ci5jYWxsKHRoaXMsbmV3IGUyKSxLYSh0aGlzLGUpfWZ1bmN0aW9uIFVfKGUpe3RoaXMuYT1uZXcgTjgoZS5nYygpKSxLYSh0aGlzLGUpfWZ1bmN0aW9uIHJzdChlKXt0aGlzLmM9ZSx0aGlzLmE9bmV3IFA4KHRoaXMuYy5hKX1mdW5jdGlvbiBpc3QoZSl7dGhpcy5hPWUsdGhpcy5jPW5ldyBQcix1eW4odGhpcyl9ZnVuY3Rpb24gc3N0KCl7dGhpcy5kPW5ldyBsdCgwLDApLHRoaXMuZT1uZXcgS3N9ZnVuY3Rpb24gYm4oZSx0KXtBbSgpLFBvZS5jYWxsKHRoaXMsZSksdGhpcy5hPXR9ZnVuY3Rpb24gc0goZSx0LG4scil7RDRlKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gemRuKGUsdCxuKXtyZXR1cm4gcnUodC5kW2UuZ10sbi5kW2UuZ10pfWZ1bmN0aW9uIHFkbihlLHQsbil7cmV0dXJuIHJ1KGUuZFt0LnBdLGUuZFtuLnBdKX1mdW5jdGlvbiBIZG4oZSx0LG4pe3JldHVybiBydShlLmRbdC5wXSxlLmRbbi5wXSl9ZnVuY3Rpb24gVmRuKGUsdCxuKXtyZXR1cm4gcnUoZS5kW3QucF0sZS5kW24ucF0pfWZ1bmN0aW9uIFVkbihlLHQsbil7cmV0dXJuIHJ1KGUuZFt0LnBdLGUuZFtuLnBdKX1mdW5jdGlvbiBhSChlLHQsbil7cmV0dXJuIGIuTWF0aC5taW4obi9lLDEvdCl9ZnVuY3Rpb24gYXN0KGUsdCl7cmV0dXJuIGU/MDpiLk1hdGgubWF4KDAsdC0xKX1mdW5jdGlvbiBfYWUoZSx0KXtyZXR1cm4gZT09bnVsbD90PT1udWxsOnZuKGUsdCl9ZnVuY3Rpb24gR2RuKGUsdCl7cmV0dXJuIGU9PW51bGw/dD09bnVsbDpRVihlLHQpfWZ1bmN0aW9uIG9zdChlKXtyZXR1cm4gZS5xP2UucTooQ24oKSxDbigpLG1nKX1mdW5jdGlvbiBjc3QoZSl7cmV0dXJuIGUuYy1sKGp0KGUuYSxlLmIpLDI5NCkuYn1mdW5jdGlvbiBnaChlKXtyZXR1cm4gZS5jP2UuYy5mOmUuZS5ifWZ1bmN0aW9uIHdsKGUpe3JldHVybiBlLmM/ZS5jLmc6ZS5lLmF9ZnVuY3Rpb24gS2RuKGUsdCl7cmV0dXJuIGUuYT09bnVsbCYmSGJ0KGUpLGUuYVt0XX1mdW5jdGlvbiB1c3QoZSl7dmFyIHQ7cmV0dXJuIHQ9VGd0KGUpLHQ/dXN0KHQpOmV9ZnVuY3Rpb24gb0goZSx0KXtyZXR1cm4gRGkoKSxuZXcgZjVlKGUsdCl9ZnVuY3Rpb24gbmcoZSx0KXtEaSgpLFh2LmNhbGwodGhpcyxlKSx0aGlzLmE9dH1mdW5jdGlvbiBjSChlLHQpe0poKCksTnouY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIEdfKGUsdCxuKXt0aGlzLmE9ZSxZcy5jYWxsKHRoaXMsdCxuLDIpfWZ1bmN0aW9uIGxzdChlKXt0aGlzLmI9bmV3IG9zLHRoaXMuYT1lLHRoaXMuYz0tMX1mdW5jdGlvbiBoc3QoZSl7TnllLmNhbGwodGhpcywwLDApLHRoaXMuYT1lLHRoaXMuYj0wfWZ1bmN0aW9uIHVIKGUpe0x3LmNhbGwodGhpcyxlLmdjKCkpLEFzKHRoaXMsZSl9ZnVuY3Rpb24gbEgoZSl7ZS5iP2xIKGUuYik6ZS5kLmRjKCkmJmUuZi5jLkJjKGUuZSl9ZnVuY3Rpb24gVzRlKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLlRtPT09eGV9ZnVuY3Rpb24gQWFlKGUsdCl7cmV0dXJuIERlKHQsMjIpJiZ2bChlLGwodCwyMikpfWZ1bmN0aW9uIGZzdChlLHQpe3JldHVybiBEZSh0LDIyKSYma3duKGUsbCh0LDIyKSl9ZnVuY3Rpb24gem8oZSx0KXtyZXR1cm4gUjB0KGUsdCxKbW4oZSxlLmIuQ2UodCkpKX1mdW5jdGlvbiBXZG4oZSx0KXtyZXR1cm4gZS5hLmdldCh0KSE9PXZvaWQgMH1mdW5jdGlvbiBZNGUoZSl7cmV0dXJuIEpsKGUsMjYpKmlMK0psKGUsMjcpKnNMfWZ1bmN0aW9uIGRzdChlLHQpe3JldHVybiB6d24obmV3IHpzLG5ldyBaMihlKSx0KX1mdW5jdGlvbiBMYWUoZSx0LG4pe0IwdCgwLHQsZS5sZW5ndGgpLG5FKGUsMCx0LG4pfWZ1bmN0aW9uIHB3KGUsdCxuKXtFeSh0LGUuYy5sZW5ndGgpLHhfKGUuYyx0LG4pfWZ1bmN0aW9uIGhIKGUsdCxuKXt2YXIgcjtlJiYocj1lLmksci5jPXQsci5iPW4pfWZ1bmN0aW9uIGZIKGUsdCxuKXt2YXIgcjtlJiYocj1lLmksci5kPXQsci5hPW4pfWZ1bmN0aW9uIGdzdChlLHQsbil7dmFyIHI7Zm9yKHI9MDtyPHQ7KytyKWVbcl09bn1mdW5jdGlvbiBZZG4oZSx0KXt2YXIgbjtmb3Iobj0wO248dDsrK24pZVtuXT0tMX1mdW5jdGlvbiBycyhlLHQpe3ZhciBuO3JldHVybiBuPXVuKGUpLGo3ZShuLHQpLG59ZnVuY3Rpb24gWGRuKGUsdCl7cmV0dXJuIWUmJihlPVtdKSxlW2UubGVuZ3RoXT10LGV9ZnVuY3Rpb24gTWFlKGUsdCl7T2koZS5jLHQpLGUuYi5jKz10LmEsZS5iLmQrPXQuYn1mdW5jdGlvbiBRZG4oZSx0KXtNYWUoZSxtYShuZXcgbHQodC5hLHQuYiksZS5jKSl9ZnVuY3Rpb24gRGFlKGUsdCl7dGhpcy5iPW5ldyBvcyx0aGlzLmE9ZSx0aGlzLmM9dH1mdW5jdGlvbiBwc3QoKXt0aGlzLmI9bmV3IFgzLHRoaXMuYz1uZXcgWWF0KHRoaXMpfWZ1bmN0aW9uIFg0ZSgpe3RoaXMuZD1uZXcgZGEsdGhpcy5lPW5ldyBXYXQodGhpcyl9ZnVuY3Rpb24gUTRlKCl7VTVlKCksdGhpcy5mPW5ldyBvcyx0aGlzLmU9bmV3IG9zfWZ1bmN0aW9uIGJzdCgpe1NoKCksdGhpcy5rPW5ldyBQcix0aGlzLmQ9bmV3IEtzfWZ1bmN0aW9uIElhZSgpe0lhZT1VLHZfdD1uZXcgSGEoKHBpKCkscmgpLDApfWZ1bmN0aW9uIG1zdCgpe21zdD1VLHM2dD1uZXcgaHN0KFdlKHdhLFJuLDEsMCw1LDEpKX1mdW5jdGlvbiBKZG4oZSx0LG4pe3JldHVybiBuYShlLG5ldyBCOCh0LmEsbi5hKSl9ZnVuY3Rpb24gWmRuKGUsdCxuKXtyZXR1cm4tcnUoZS5mW3QucF0sZS5mW24ucF0pfWZ1bmN0aW9uIGVnbihlLHQsbil7STJ0KG4sZSwxKSx2dCh0LG5ldyBJZXQobixlKSl9ZnVuY3Rpb24gdGduKGUsdCxuKXtGQShuLGUsMSksdnQodCxuZXcgUGV0KG4sZSkpfWZ1bmN0aW9uIHZzdChlLHQsbil7dGhpcy5hPWUsQnEuY2FsbCh0aGlzLHQsbiwyMil9ZnVuY3Rpb24gd3N0KGUsdCxuKXt0aGlzLmE9ZSxCcS5jYWxsKHRoaXMsdCxuLDE0KX1mdW5jdGlvbiB5c3QoZSx0LG4scil7SmgoKSxpY3QuY2FsbCh0aGlzLGUsdCxuLHIpfWZ1bmN0aW9uIHhzdChlLHQsbixyKXtKaCgpLGljdC5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24geWwoZSx0LG4pe3JldHVybiBlLmE9LTEsQnllKGUsdC5nKzEsbiksZX1mdW5jdGlvbiBKNGUoZSx0LG4pe3JldHVybiBuPU5oKGUsbCh0LDU0KSw3LG4pLG59ZnVuY3Rpb24gWjRlKGUsdCxuKXtyZXR1cm4gbj1OaChlLGwodCw1NCksMyxuKSxufWZ1bmN0aW9uIFlyKGUpe3JldHVybiB3YyhlKT9lfDA6clplKGUpfWZ1bmN0aW9uIGtzdChlKXtyZXR1cm4gRGkoKSxuZXcgY29lKDEwLGUsMCl9ZnVuY3Rpb24gRXN0KGUpe3ZhciB0O3JldHVybiB0PWUuZix0fHwoZS5mPWUuRGMoKSl9ZnVuY3Rpb24gVzgoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5pLHR8fChlLmk9ZS5iYygpKX1mdW5jdGlvbiBkSChlKXtpZihlLmUuaiE9ZS5kKXRocm93IHVlKG5ldyBYaCl9ZnVuY3Rpb24gTW0oZSl7cmV0dXJuIGUuYz9lLmM6ZS5jPWUuU2QoKX1mdW5jdGlvbiBPYWUoZSl7cmV0dXJuIGUuZD9lLmQ6ZS5kPWUuVGQoKX1mdW5jdGlvbiBLXyhlLHQpe3JldHVybiBVNW4obE4oZSx0KSk/dC56aSgpOm51bGx9ZnVuY3Rpb24gbmduKGUpe3JldHVybiBEZShlLDE1KT9sKGUsMTUpLmVkKCk6ZS5LYygpfWZ1bmN0aW9uIGU1ZShlKXtyZXR1cm4gZS5RYyhXZSh3YSxSbiwxLGUuZ2MoKSw1LDEpKX1mdW5jdGlvbiBUc3QoZSl7cmV0dXJuIGUhPW51bGwmJlJhZShlKSYmZS5UbSE9PXhlfWZ1bmN0aW9uIHQ1ZShlKXtyZXR1cm4hQXJyYXkuaXNBcnJheShlKSYmZS5UbT09PXhlfWZ1bmN0aW9uIENzdChlLHQpe3JldHVybiBYcih0KSxlLmEuSmQodCkmJiFlLmIuSmQodCl9ZnVuY3Rpb24gcmduKGUsdCl7cmV0dXJuIHF1KGUubCZ0LmwsZS5tJnQubSxlLmgmdC5oKX1mdW5jdGlvbiBpZ24oZSx0KXtyZXR1cm4gcXUoZS5sfHQubCxlLm18dC5tLGUuaHx0LmgpfWZ1bmN0aW9uIHNnbihlLHQpe3JldHVybiBxdShlLmxedC5sLGUubV50Lm0sZS5oXnQuaCl9ZnVuY3Rpb24gbDAoZSx0KXtyZXR1cm4gbWIobnB0KHdjKGUpP01mKGUpOmUsdCkpfWZ1bmN0aW9uIGJ3KGUsdCl7cmV0dXJuIG1iKEQ5ZSh3YyhlKT9NZihlKTplLHQpKX1mdW5jdGlvbiB1YihlLHQpe3JldHVybiBtYigkOW4od2MoZSk/TWYoZSk6ZSx0KSl9ZnVuY3Rpb24gYWduKGUsdCl7cmV0dXJuIENmbigobnIoZSksZSksKG5yKHQpLHQpKX1mdW5jdGlvbiBOYWUoZSx0KXtyZXR1cm4gWWkoKG5yKGUpLGUpLChucih0KSx0KSl9ZnVuY3Rpb24gZ0goZSl7dGhpcy5iPW5ldyBCdSgxMSksdGhpcy5hPShFdygpLGUpfWZ1bmN0aW9uIGhyKGUpe3RoaXMuYT0obXN0KCksczZ0KSx0aGlzLmQ9bChYcihlKSw1MSl9ZnVuY3Rpb24gU3N0KGUsdCl7dGhpcy5jPTAsdGhpcy5kPWUsdGhpcy5iPXR8NjR8X2R9ZnVuY3Rpb24gbjVlKGUsdCl7dGhpcy5lPWUsdGhpcy5kPXQmNjQ/dHxfZDp0fWZ1bmN0aW9uIFBhZShlKXt0aGlzLmI9bnVsbCx0aGlzLmE9KEV3KCksZXx8ZF9lKX1mdW5jdGlvbiBfc3QoZSl7RnEodGhpcyksdGhpcy5nPWUsU0godGhpcyksdGhpcy5qZSgpfWZ1bmN0aW9uIERtKGUpe3NiKCksdGhpcy5hPTAsdGhpcy5iPWUtMSx0aGlzLmM9MX1mdW5jdGlvbiByNWUoZSx0LG4scil7dGhpcy5hPWUsWUguY2FsbCh0aGlzLGUsdCxuLHIpfWZ1bmN0aW9uIG9nbihlLHQsbil7ZS5hLk1iKG4pJiYoZS5iPSEwLHQuQ2QobikpfWZ1bmN0aW9uIGk1ZShlKXtlLmR8fChlLmQ9ZS5iLktjKCksZS5jPWUuYi5nYygpKX1mdW5jdGlvbiBxayhlLHQpe2lmKGU8MHx8ZT49dCl0aHJvdyB1ZShuZXcgQndlKX1mdW5jdGlvbiB2eShlLHQpe3JldHVybiBPTihlLChucih0KSxuZXcgeG8odCkpKX1mdW5jdGlvbiBZOChlLHQpe3JldHVybiBPTihlLChucih0KSxuZXcgbGgodCkpKX1mdW5jdGlvbiBBc3QoZSx0LG4pe3JldHVybiBYSW4oZSxsKHQsMTIpLGwobiwxMikpfWZ1bmN0aW9uIExzdChlKXtyZXR1cm4ga2woKSxsKGUsMTIpLmcuYy5sZW5ndGghPTB9ZnVuY3Rpb24gTXN0KGUpe3JldHVybiBrbCgpLGwoZSwxMikuZS5jLmxlbmd0aCE9MH1mdW5jdGlvbiBjZ24oZSx0KXtyZXR1cm4gbHgoKSxZaSh0LmEuby5hLGUuYS5vLmEpfWZ1bmN0aW9uIHVnbihlLHQpe3QuQmImZXUmJiFlLmEubyYmKGUuYS5vPXQpfWZ1bmN0aW9uIGxnbihlLHQpe3QuVWcoIkdlbmVyYWwgJ1JvdGF0b3IiLDEpLFREbihlKX1mdW5jdGlvbiBoZ24oZSx0LG4pe3QucWYobix6ZShHZShjcihlLmIsbikpKSplLmEpfWZ1bmN0aW9uIERzdChlLHQsbil7cmV0dXJuIGg2KCksZ0UoZSx0KSYmZ0UoZSxuKX1mdW5jdGlvbiBXXyhlKXtyZXR1cm4gUmwoKSwhZS5IYyh2cCkmJiFlLkhjKFliKX1mdW5jdGlvbiBmZ24oZSl7cmV0dXJuIGUuZT9fNmUoZS5lKTpudWxsfWZ1bmN0aW9uIFlfKGUpe3JldHVybiB3YyhlKT8iIitlOlBidChlKX1mdW5jdGlvbiBzNWUoZSl7dmFyIHQ7Zm9yKHQ9ZTt0LmY7KXQ9dC5mO3JldHVybiB0fWZ1bmN0aW9uIGRnbihlLHQsbil7cmV0dXJuIFRzKHQsMCxVNGUodFswXSxuWzBdKSksdH1mdW5jdGlvbiBRcChlLHQsbixyKXt2YXIgYTthPWUuaSxhLmk9dCxhLmE9bixhLmI9cn1mdW5jdGlvbiBudChlLHQsbixyKXtZcy5jYWxsKHRoaXMsZSx0LG4pLHRoaXMuYj1yfWZ1bmN0aW9uIF9hKGUsdCxuLHIsYSl7Rm9lLmNhbGwodGhpcyxlLHQsbixyLGEsLTEpfWZ1bmN0aW9uIFhfKGUsdCxuLHIsYSl7c04uY2FsbCh0aGlzLGUsdCxuLHIsYSwtMSl9ZnVuY3Rpb24gcEgoZSx0LG4scil7Rk8uY2FsbCh0aGlzLGUsdCxuKSx0aGlzLmI9cn1mdW5jdGlvbiBJc3QoZSl7THR0LmNhbGwodGhpcyxlLCExKSx0aGlzLmE9ITF9ZnVuY3Rpb24gT3N0KCl7Y3R0LmNhbGwodGhpcywiTE9PS0FIRUFEX0xBWU9VVCIsMSl9ZnVuY3Rpb24gTnN0KGUpe3RoaXMuYj1lLHE4LmNhbGwodGhpcyxlKSxqbnQodGhpcyl9ZnVuY3Rpb24gUHN0KGUpe3RoaXMuYj1lLENPLmNhbGwodGhpcyxlKSwkbnQodGhpcyl9ZnVuY3Rpb24gd3koZSx0LG4pe3RoaXMuYT1lLFY4LmNhbGwodGhpcyx0LG4sNSw2KX1mdW5jdGlvbiBhNWUoZSx0LG4scil7dGhpcy5iPWUsWXMuY2FsbCh0aGlzLHQsbixyKX1mdW5jdGlvbiBCc3QoZSx0KXt0aGlzLmI9ZSxxZy5jYWxsKHRoaXMsZS5iKSx0aGlzLmE9dH1mdW5jdGlvbiBGc3QoZSl7dGhpcy5hPXlkdChlLmEpLHRoaXMuYj1uZXcgT2woZS5iKX1mdW5jdGlvbiBvNWUoZSx0KXt3dygpLFZ1bi5jYWxsKHRoaXMsZSxSVihuZXcgSWwodCkpKX1mdW5jdGlvbiBiSChlLHQpe3JldHVybiBEaSgpLG5ldyBrNWUoZSx0LDApfWZ1bmN0aW9uIEJhZShlLHQpe3JldHVybiBEaSgpLG5ldyBrNWUoNixlLHQpfWZ1bmN0aW9uIFphKGUsdCl7Zm9yKG5yKHQpO2UuT2IoKTspdC5DZChlLlBiKCkpfWZ1bmN0aW9uIEh1KGUsdCl7cmV0dXJuIElhKHQpP3NvZShlLHQpOiEhem8oZS5mLHQpfWZ1bmN0aW9uIEZhZShlLHQpe3JldHVybiB0LlZoKCk/eWIoZS5iLGwodCw1NCkpOnR9ZnVuY3Rpb24gZ2duKGUsdCl7cmV0dXJuIHZuKGUuc3Vic3RyKDAsdC5sZW5ndGgpLHQpfWZ1bmN0aW9uIHJnKGUpe3JldHVybiBuZXcgaHIobmV3IEF5ZShlLmEubGVuZ3RoLGUuYSkpfWZ1bmN0aW9uIG1IKGUpe3JldHVybiBuZXcgbHQoZS5jK2UuYi8yLGUuZCtlLmEvMil9ZnVuY3Rpb24gcGduKGUpe3JldHVybiBxdSh+ZS5sJmVoLH5lLm0mZWgsfmUuaCZocCl9ZnVuY3Rpb24gUmFlKGUpe3JldHVybiB0eXBlb2YgZT09PXdQfHx0eXBlb2YgZT09PU9sZX1mdW5jdGlvbiBObChlKXtlLmY9bmV3IHJudChlKSxlLmk9bmV3IGludChlKSwrK2UuZ31mdW5jdGlvbiBSc3QoZSl7aWYoIWUpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gZS5kfWZ1bmN0aW9uIFg4KGUpe3ZhciB0O3JldHVybiB0PXdBKGUpLG1yKHQhPW51bGwpLHR9ZnVuY3Rpb24gYmduKGUpe3ZhciB0O3JldHVybiB0PUk0bihlKSxtcih0IT1udWxsKSx0fWZ1bmN0aW9uIEhrKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hLmdjKCksazZlKHQsbiksbi10fWZ1bmN0aW9uIG5hKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hLnpjKHQsZSksbj09bnVsbH1mdW5jdGlvbiBqTyhlLHQpe3JldHVybiBlLmEuemModCwoSG4oKSxQYikpPT1udWxsfWZ1bmN0aW9uIGM1ZShlKXtyZXR1cm4gbmV3IGJuKG51bGwseGduKGUsZS5sZW5ndGgpKX1mdW5jdGlvbiB1NWUoZSx0LG4pe3JldHVybiBzdnQoZSxsKHQsNDIpLGwobiwxNzYpKX1mdW5jdGlvbiBROChlLHQsbil7cmV0dXJuIGQwKGUuYSx0KSxSNGUoZS5iLHQuZyxuKX1mdW5jdGlvbiBtZ24oZSx0LG4pe3FrKG4sZS5hLmMubGVuZ3RoKSxyZihlLmEsbix0KX1mdW5jdGlvbiBIZShlLHQsbixyKXtCMHQodCxuLGUubGVuZ3RoKSx2Z24oZSx0LG4scil9ZnVuY3Rpb24gdmduKGUsdCxuLHIpe3ZhciBhO2ZvcihhPXQ7YTxuOysrYSllW2FdPXJ9ZnVuY3Rpb24gbDVlKGUsdCl7dmFyIG47Zm9yKG49MDtuPHQ7KytuKWVbbl09ITF9ZnVuY3Rpb24gSW0oZSx0LG4pe0NkKCksdGhpcy5lPWUsdGhpcy5kPXQsdGhpcy5hPW59ZnVuY3Rpb24gaDVlKGUsdCxuKXt0aGlzLmM9ZSx0aGlzLmE9dCxDbigpLHRoaXMuYj1ufWZ1bmN0aW9uIGphZShlLHQpe3RoaXMuZD1lLG9yLmNhbGwodGhpcyxlKSx0aGlzLmU9dH1mdW5jdGlvbiBYMChlLHQsbil7cmV0dXJuIEZ5bihlLHQuZyxuKSxkMChlLmMsdCksZX1mdW5jdGlvbiB3Z24oZSl7cmV0dXJuIHA2KGUsKEpzKCksdWMpKSxlLmQ9ITAsZX1mdW5jdGlvbiAkYWUoZSl7cmV0dXJuIWUuaiYmaXIoZSxFX24oZS5nLGUuYikpLGUuan1mdW5jdGlvbiBqc3QoZSl7ZS5hPW51bGwsZS5lPW51bGwsTmwoZS5iKSxlLmQ9MCwrK2UuY31mdW5jdGlvbiBRXyhlKXtneShlLmIhPS0xKSx0MihlLmMsZS5hPWUuYiksZS5iPS0xfWZ1bmN0aW9uIGY1ZShlLHQpe1h2LmNhbGwodGhpcywxKSx0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiB5Z24oZSx0KXtyZXR1cm4gZT4wP2IuTWF0aC5sb2coZS90KTotMTAwfWZ1bmN0aW9uICRzdChlLHQpe3JldHVybiBpdShlLHQpPDA/LTE6aXUoZSx0KT4wPzE6MH1mdW5jdGlvbiAkTyhlLHQpe0RudChlLERlKHQsMTYwKT90OmwodCwyMDM2KS5SbCgpKX1mdW5jdGlvbiBkNWUoZSx0KXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBEOCh0KSl9ZnVuY3Rpb24geGduKGUsdCl7cmV0dXJuIEV3bih0LGUubGVuZ3RoKSxuZXcgS2l0KGUsdCl9ZnVuY3Rpb24gZzVlKGUsdCl7cmV0dXJuIHQ/S2EoZSx0KTohMX1mdW5jdGlvbiBrZ24oKXtyZXR1cm4gJHooKSxoZShsZShhNnQsMSksaXQsNTQ5LDAsW0UwZV0pfWZ1bmN0aW9uIEpfKGUpe3JldHVybiBlLmU9PTA/ZTpuZXcgSW0oLWUuZSxlLmQsZS5hKX1mdW5jdGlvbiBFZ24oZSx0KXtyZXR1cm4gWWkoZS5jLmMrZS5jLmIsdC5jLmMrdC5jLmIpfWZ1bmN0aW9uIHpPKGUsdCl7Q3MoZS5kLHQsZS5iLmIsZS5iKSwrK2UuYSxlLmM9bnVsbH1mdW5jdGlvbiB6c3QoZSx0KXtyZXR1cm4gZS5jP3pzdChlLmMsdCk6dnQoZS5iLHQpLGV9ZnVuY3Rpb24gVGduKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1feShlLHQpLHhvZShlLHQsbikscn1mdW5jdGlvbiBxc3QoZSx0LG4pe3ZhciByO2ZvcihyPTA7cjx0OysrcilUcyhlLHIsbil9ZnVuY3Rpb24gSHN0KGUsdCxuLHIsYSl7Zm9yKDt0PG47KXJbYSsrXT1jbyhlLHQrKyl9ZnVuY3Rpb24gVmsoZSx0LG4scixhKXtMdWUoZSxsKCRpKHQuayxuKSwxNSksbixyLGEpfWZ1bmN0aW9uIG13KGUsdCl7SXMoZmMoZS5PYygpLG5ldyBGaiksbmV3IGtZZSh0KSl9ZnVuY3Rpb24gQ2duKGUsdCl7cmV0dXJuIFlpKGUuZS5hK2UuZi5hLHQuZS5hK3QuZi5hKX1mdW5jdGlvbiBTZ24oZSx0KXtyZXR1cm4gWWkoZS5lLmIrZS5mLmIsdC5lLmIrdC5mLmIpfWZ1bmN0aW9uIHphZShlKXtyZXR1cm4gYi5NYXRoLmFicyhlLmQuZS1lLmUuZSktZS5hfWZ1bmN0aW9uIF9nbihlKXtyZXR1cm4gZT09Z3M/ZUI6ZT09aWE/Ii1JTkYiOiIiK2V9ZnVuY3Rpb24gQWduKGUpe3JldHVybiBlPT1ncz9lQjplPT1pYT8iLUlORiI6IiIrZX1mdW5jdGlvbiBMZ24oZSl7cmV0dXJuIHR4KCksZHMoY2coZSkpPT1kcyhFYihlKSl9ZnVuY3Rpb24gTWduKGUsdCxuKXtyZXR1cm4gbChlLmMuaGQodCxsKG4sMTM2KSksNDQpfWZ1bmN0aW9uIERnbihlLHQpe0o4KGUsbmV3IHl5KHQuZiE9bnVsbD90LmY6IiIrdC5nKSl9ZnVuY3Rpb24gSWduKGUsdCl7SjgoZSxuZXcgeXkodC5mIT1udWxsP3QuZjoiIit0LmcpKX1mdW5jdGlvbiBBcyhlLHQpe3JldHVybiBlLlNpKCkmJih0PWJvdChlLHQpKSxlLkZpKHQpfWZ1bmN0aW9uIHFhZShlLHQpe3JldHVybiB0PWUuWWsobnVsbCx0KSxSZ3QoZSxudWxsLHQpfWZ1bmN0aW9uIE9nbihlLHQpeysrZS5qLEF1ZShlLGUuaSx0KSxuRW4oZSxsKHQsMzQzKSl9ZnVuY3Rpb24gcDVlKGUpe2U/RnhlKGUsKFZnKCksbTZ0KSk6RnBuKChWZygpLGUpKX1mdW5jdGlvbiB2dyhlKXt0aGlzLmQ9KG5yKGUpLGUpLHRoaXMuYT0wLHRoaXMuYz1FUH1mdW5jdGlvbiBIYWUoZSx0KXt0aGlzLmQ9VDRuKGUpLHRoaXMuYz10LHRoaXMuYT0uNSp0fWZ1bmN0aW9uIFZzdChlKXtSNWUuY2FsbCh0aGlzKSx0aGlzLmE9ZSx2dChlLmEsdGhpcyl9ZnVuY3Rpb24gVXN0KCl7ZTIuY2FsbCh0aGlzKSx0aGlzLmE9ITAsdGhpcy5iPSEwfWZ1bmN0aW9uIEdzdCgpe0dzdD1VLGg2dD1uZXcgamMoITEpLGY2dD1uZXcgamMoITApfWZ1bmN0aW9uIFpfKGUpe3ZhciB0O3JldHVybiB0PWUuZyx0fHwoZS5nPW5ldyB2eihlKSl9ZnVuY3Rpb24gdkgoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5rLHR8fChlLms9bmV3IFEyKGUpKX1mdW5jdGlvbiBiNWUoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5rLHR8fChlLms9bmV3IFEyKGUpKX1mdW5jdGlvbiBOZ24oZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5pLHR8fChlLmk9bmV3IHdpZShlKSl9ZnVuY3Rpb24gS3N0KGUpe3ZhciB0O3JldHVybiB0PWUuZix0fHwoZS5mPW5ldyBfeWUoZSkpfWZ1bmN0aW9uIFZhZShlKXt2YXIgdDtyZXR1cm4gdD1lLmosdHx8KGUuaj1uZXcga3ooZSkpfWZ1bmN0aW9uIFVhZShlKXt2YXIgdDtyZXR1cm4gdD1lLmQsdHx8KGUuZD1uZXcgSjIoZSkpfWZ1bmN0aW9uIFdzdChlLHQsbil7cmV0dXJuIERpKCksbmV3IEhvdChlLHQsbil9ZnVuY3Rpb24gWXN0KGUsdCl7cmV0dXJuIFpPKHQsZS5jLmIuYy5nYygpKSxuZXcgRFplKGUsdCl9ZnVuY3Rpb24gbTVlKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hLmdjKCksWk8odCxuKSxuLTEtdH1mdW5jdGlvbiBJKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1HYWUoZSx0KSxVaHQobixyKSxyfWZ1bmN0aW9uIEdhZShlLHQpe3ZhciBuO3JldHVybiBuPW5ldyBCN2Usbi5qPWUsbi5kPXQsbn1mdW5jdGlvbiBYcihlKXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBTOCk7cmV0dXJuIGV9ZnVuY3Rpb24geXkoZSl7aWYoZT09bnVsbCl0aHJvdyB1ZShuZXcgUzgpO3RoaXMuYT1lfWZ1bmN0aW9uIFhzdChlKXtDd2UoKSx0aGlzLmI9bmV3IGJ0LHRoaXMuYT1lLFNNbih0aGlzLGUpfWZ1bmN0aW9uIHY1ZShlKXt0aGlzLmI9ZSx0aGlzLmE9bChMZih0aGlzLmIuYS5lKSwyMjcpfWZ1bmN0aW9uIHd3KCl7d3c9VSx3ZCgpLHgwZT1uZXcgb29lKChDbigpLENuKCksX28pKX1mdW5jdGlvbiBLYWUoKXtLYWU9VSx3ZCgpLFZTZT1uZXcgazNlKChDbigpLENuKCksaEspKX1mdW5jdGlvbiBsYigpe2xiPVUsVm49dEVuKCksVG4oKSxPNCYmbjhuKCl9ZnVuY3Rpb24gd0goZSl7ZS5zPU5hTixlLmM9TmFOLHkydChlLGUuZSkseTJ0KGUsZS5qKX1mdW5jdGlvbiB5cihlKXtyZXR1cm4oZS5pPT1udWxsJiZTZChlKSxlLmkpLmxlbmd0aH1mdW5jdGlvbiBRc3QoZSx0KXtyZXR1cm4gbChNbShlLmEpLk1kKCkuWGIodCksNDQpLmxkKCl9ZnVuY3Rpb24gY3IoZSx0KXtyZXR1cm4gSWEodCk/eHUoZSx0KTpoYyh6byhlLmYsdCkpfWZ1bmN0aW9uIFBnbihlLHQpe3JldHVybiB0eCgpLGU9PWNnKHQpP0ViKHQpOmNnKHQpfWZ1bmN0aW9uIEJnbihlLHQsbixyKXtyZXR1cm4gbj09MHx8KG4tcikvbjxlLmV8fHQ+PWUuZ31mdW5jdGlvbiBUcyhlLHQsbil7cmV0dXJuIHBmbihuPT1udWxsfHxsQW4oZSxuKSksZVt0XT1ufWZ1bmN0aW9uIHc1ZShlLHQpe3JldHVybiBYbih0LGUubGVuZ3RoKzEpLGUuc3Vic3RyKHQpfWZ1bmN0aW9uIFdhZShlLHQpe2Zvcihucih0KTtlLmM8ZS5kOyllLlNlKHQsZS5jKyspfWZ1bmN0aW9uIHk1ZShlKXt0aGlzLmQ9ZSx0aGlzLmM9ZS5hLmQuYSx0aGlzLmI9ZS5hLmUuZ31mdW5jdGlvbiBKc3QoZSl7dGhpcy5jPWUsdGhpcy5hPW5ldyBvcyx0aGlzLmI9bmV3IG9zfWZ1bmN0aW9uIHl1KGUpe3RoaXMuYz1uZXcgcWEsdGhpcy5hPW5ldyBidCx0aGlzLmI9ZX1mdW5jdGlvbiBac3QoZSl7dGhpcy5iPW5ldyBidCx0aGlzLmE9bmV3IGJ0LHRoaXMuYz1lfWZ1bmN0aW9uIEZnbihlLHQsbil7bCh0LmIsNjgpLFZ1KHQuYSxuZXcgeDRlKGUsbix0KSl9ZnVuY3Rpb24gUmduKGUsdCl7cmV0dXJuIGx4KCksbChRbyhlLHQuZCksMTUpLkZjKHQpfWZ1bmN0aW9uIEo4KGUsdCl7dmFyIG47bj1lLmEubGVuZ3RoLF95KGUsbikseG9lKGUsbix0KX1mdW5jdGlvbiBlYXQoZSx0KXt2YXIgbjtuPWNvbnNvbGVbZV0sbi5jYWxsKGNvbnNvbGUsdCl9ZnVuY3Rpb24gdGF0KGUsdCl7dmFyIG47KytlLmosbj1lLkVqKCksZS5yaihlLlppKG4sdCkpfWZ1bmN0aW9uIFlhZShlLHQsbil7dmFyIHI7cmV0dXJuIHI9aWNlKGUsdCxuKSxza2UoZSxyKX1mdW5jdGlvbiB5dyhlKXtyZXR1cm4hZS5kJiYoZS5kPW5ldyBZcyhXbyxlLDEpKSxlLmR9ZnVuY3Rpb24gamduKGUpe3JldHVybiFlLmEmJihlLmE9bmV3IFlzKFhiLGUsNCkpLGUuYX1mdW5jdGlvbiBVayhlLHQpe3JldHVybiBlLmErPVN0cmluZy5mcm9tQ2hhckNvZGUodCksZX1mdW5jdGlvbiBoYihlLHQpe3JldHVybiBlLmErPVN0cmluZy5mcm9tQ2hhckNvZGUodCksZX1mdW5jdGlvbiB4NWUoZSx0LG4pe3RoaXMuYT1lLHh3ZS5jYWxsKHRoaXMsdCksdGhpcy5iPW59ZnVuY3Rpb24gbmF0KGUsdCxuKXt0aGlzLmE9ZSxyNmUuY2FsbCh0aGlzLDgsdCxudWxsLG4pfWZ1bmN0aW9uIGs1ZShlLHQsbil7WHYuY2FsbCh0aGlzLGUpLHRoaXMuYT10LHRoaXMuYj1ufWZ1bmN0aW9uIEU1ZShlLHQsbil7TnouY2FsbCh0aGlzLHQpLHRoaXMuYT1lLHRoaXMuYj1ufWZ1bmN0aW9uIHJhdChlKXt0aGlzLmM9ZSx0aGlzLmI9dGhpcy5jLmEsdGhpcy5hPXRoaXMuYy5lfWZ1bmN0aW9uICRnbihlKXt0aGlzLmE9KG5yKGxpKSxsaSksdGhpcy5iPWUsbmV3ICR3ZX1mdW5jdGlvbiBpYXQoZSl7TTVlKGUuYSksZS5iPVdlKHdhLFJuLDEsZS5iLmxlbmd0aCw1LDEpfWZ1bmN0aW9uIHBoKGUpe2d5KGUuYyE9LTEpLGUuZC5nZChlLmMpLGUuYj1lLmMsZS5jPS0xfWZ1bmN0aW9uIGVBKGUpe3JldHVybiBiLk1hdGguc3FydChlLmEqZS5hK2UuYiplLmIpfWZ1bmN0aW9uIHlIKGUsdCl7cmV0dXJuIHh1ZShlLmMsZS5mLHQsZS5iLGUuYSxlLmUsZS5kKX1mdW5jdGlvbiB4dyhlLHQpe3JldHVybiBxayh0LGUuYS5jLmxlbmd0aCksanQoZS5hLHQpfWZ1bmN0aW9uIHlkKGUsdCl7cmV0dXJuIHFlKGUpPT09cWUodCl8fGUhPW51bGwmJlBpKGUsdCl9ZnVuY3Rpb24gc2F0KGUpe3JldHVybiBEZShlLDEwMikmJihsKGUsMTkpLkJiJmV1KSE9MH1mdW5jdGlvbiBhYXQoZSl7cmV0dXJuIExmKGUpLERlKGUsNDg0KT9sKGUsNDg0KTp4YyhlKX1mdW5jdGlvbiBvYXQoZSl7cmV0dXJuIGU/ZS5kYygpOiFlLktjKCkuT2IoKX1mdW5jdGlvbiB6Z24oZSl7cmV0dXJuIFA0P3NvZShQNCxlKTohMX1mdW5jdGlvbiBxZ24oZSl7cmV0dXJuIDA+PWU/bmV3IGIzZTpLd24oZS0xKX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4hZS5hJiZlLmM/ZS5jLmI6ZS5hfWZ1bmN0aW9uIFQ1ZShlKXtyZXR1cm4gRGUoZSw2MTYpP2U6bmV3IG9vdChlKX1mdW5jdGlvbiBmYihlKXtlLmM/ZmIoZS5jKTooeGIoZSksZS5kPSEwKX1mdW5jdGlvbiB0QShlKXtlLmM/ZS5jLiRlKCk6KGUuZD0hMCxoQ24oZSkpfWZ1bmN0aW9uIGNhdChlKXtlLmI9ITEsZS5jPSExLGUuZD0hMSxlLmE9ITF9ZnVuY3Rpb24gdWF0KGUpe3ZhciB0LG47cmV0dXJuIHQ9ZS5jLmkuYyxuPWUuZC5pLmMsdD09bn1mdW5jdGlvbiBIZ24oZSx0KXt2YXIgbjtuPWUuSWgodCksbj49MD9lLmtpKG4pOmQ5ZShlLHQpfWZ1bmN0aW9uIGxhdChlLHQpe2UuYzwwfHxlLmIuYjxlLmM/a28oZS5iLHQpOmUuYS50Zih0KX1mdW5jdGlvbiBWZ24oZSx0KXtxcigoIWUuYSYmKGUuYT1uZXcgTE8oZSxlKSksZS5hKSx0KX1mdW5jdGlvbiBVZ24oZSx0KXtNYWUobCh0LmIsNjgpLGUpLFZ1KHQuYSxuZXcgTXooZSkpfWZ1bmN0aW9uIEdnbihlLHQpe3JldHVybiBydSh0LmouYy5sZW5ndGgsZS5qLmMubGVuZ3RoKX1mdW5jdGlvbiBLZ24oZSx0LG4pe3JldHVybiBoeCgpLG4uTGcoZSxsKHQubGQoKSwxNDkpKX1mdW5jdGlvbiBMZihlKXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBTOCk7cmV0dXJuIGV9ZnVuY3Rpb24gbnIoZSl7aWYoZT09bnVsbCl0aHJvdyB1ZShuZXcgUzgpO3JldHVybiBlfWZ1bmN0aW9uIFdnbihlKXtpZihlLnAhPTQpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5lfWZ1bmN0aW9uIFlnbihlKXtpZihlLnAhPTMpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5lfWZ1bmN0aW9uIFhnbihlKXtpZihlLnAhPTMpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5qfWZ1bmN0aW9uIFFnbihlKXtpZihlLnAhPTQpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5qfWZ1bmN0aW9uIEpnbihlKXtpZihlLnAhPTYpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5mfWZ1bmN0aW9uIFpnbihlKXtpZihlLnAhPTYpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5rfWZ1bmN0aW9uIEM1ZShlKXtyZXR1cm4hZS5iJiYoZS5iPW5ldyBQeihuZXcgVmllKSksZS5ifWZ1bmN0aW9uIGt3KGUpe3JldHVybiBlLmM9PS0yJiZMdChlLEd4bihlLmcsZS5iKSksZS5jfWZ1bmN0aW9uIEdrKGUsdCl7dmFyIG47cmV0dXJuIG49R2FlKCIiLGUpLG4ubj10LG4uaT0xLG59ZnVuY3Rpb24geEgoZSx0LG4scil7aXcuY2FsbCh0aGlzLGUsbiksdGhpcy5hPXQsdGhpcy5mPXJ9ZnVuY3Rpb24gUzVlKGUsdCxuLHIpe2l3LmNhbGwodGhpcyxlLHQpLHRoaXMuZD1uLHRoaXMuYT1yfWZ1bmN0aW9uIGhhdChlLHQpe2Zobi5jYWxsKHRoaXMsV3duKFhyKGUpLFhyKHQpKSksdGhpcy5hPXR9ZnVuY3Rpb24gWHMoKXttSmUuY2FsbCh0aGlzKSxheSh0aGlzLmouYywwKSx0aGlzLmE9LTF9ZnVuY3Rpb24gZmF0KCl7VnhlLmNhbGwodGhpcyxGZiwoU2soKSxBUGUpKSx4TG4odGhpcyl9ZnVuY3Rpb24gZGF0KCl7VnhlLmNhbGwodGhpcyxjdiwoblplKCksckF0KSksZk1uKHRoaXMpfWZ1bmN0aW9uIGdhdCgpe1VyLmNhbGwodGhpcywiREVMQVVOQVlfVFJJQU5HVUxBVElPTiIsMCl9ZnVuY3Rpb24gZXBuKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSl9ZnVuY3Rpb24ga2koZSx0LG4pe3JldHVybiBJYSh0KT9yYyhlLHQsbik6anUoZS5mLHQsbil9ZnVuY3Rpb24gXzVlKGUpe3JldHVybiBDbigpLGU/ZS5PZSgpOihFdygpLEV3KCksZ19lKX1mdW5jdGlvbiB0cG4oZSl7cmV0dXJuIE1oKGUsRmxlKSxjVihibyhibyg1LGUpLGUvMTB8MCkpfWZ1bmN0aW9uIHBhdChlLHQpe3JldHVybiBacSgpLG5ldyBXOGUobmV3IFFudChlKSxuZXcgWG50KHQpKX1mdW5jdGlvbiBrSCgpe2tIPVUsaTZ0PW5ldyBZd2UoaGUobGUodXYsMSksWFUsNDQsMCxbXSkpfWZ1bmN0aW9uIGJhdChlKXtyZXR1cm4hZS5kJiYoZS5kPW5ldyAkYShlLmMuQ2MoKSkpLGUuZH1mdW5jdGlvbiBLayhlKXtyZXR1cm4hZS5hJiYoZS5hPW5ldyB6SmUoZS5jLnZjKCkpKSxlLmF9ZnVuY3Rpb24gbWF0KGUpe3JldHVybiFlLmImJihlLmI9bmV3IEVrKGUuYy5lYygpKSksZS5ifWZ1bmN0aW9uIGlnKGUsdCl7Zm9yKDt0LS0gPjA7KWU9ZTw8MXwoZTwwPzE6MCk7cmV0dXJuIGV9ZnVuY3Rpb24gdmF0KGUsdCl7dmFyIG47cmV0dXJuIG49bmV3IHl1KGUpLCRuKHQuYyxuKSxufWZ1bmN0aW9uIHdhdChlLHQpe2UudS5IYygoUmwoKSx2cCkpJiZXa24oZSx0KSxmdm4oZSx0KX1mdW5jdGlvbiBKYyhlLHQpe3JldHVybiBxZShlKT09PXFlKHQpfHxlIT1udWxsJiZQaShlLHQpfWZ1bmN0aW9uIFFvKGUsdCl7cmV0dXJuIEFhZShlLmEsdCk/ZS5iW2wodCwyMikuZ106bnVsbH1mdW5jdGlvbiBucG4oKXtyZXR1cm4gWnooKSxoZShsZShVX2UsMSksaXQsNDg5LDAsW0cwZV0pfWZ1bmN0aW9uIHJwbigpe3JldHVybiBucSgpLGhlKGxlKHdPZSwxKSxpdCw0OTAsMCxbYmdlXSl9ZnVuY3Rpb24gaXBuKCl7cmV0dXJuIHJxKCksaGUobGUoR0N0LDEpLGl0LDU1OCwwLFttZ2VdKX1mdW5jdGlvbiBzcG4oKXtyZXR1cm4gYl8oKSxoZShsZSgkT2UsMSksaXQsNTM5LDAsW3FCXSl9ZnVuY3Rpb24gRUgoZSl7cmV0dXJuIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm59ZnVuY3Rpb24gWGFlKGUpe3JldHVybiFlLmMmJihlLmM9bmV3IG50KEhsLGUsOSw5KSksZS5jfWZ1bmN0aW9uIEE1ZShlKXtyZXR1cm4hZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuY31mdW5jdGlvbiBhcG4oZSl7cmV0dXJuIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmJ9ZnVuY3Rpb24gcU8oZSl7cmV0dXJuIGUuai5jLmxlbmd0aD0wLE01ZShlLmMpLFJmbihlLmEpLGV9ZnVuY3Rpb24gV2soZSl7cmV0dXJuIGUuZT09RVQmJmhuKGUsZTZuKGUuZyxlLmIpKSxlLmV9ZnVuY3Rpb24gSE8oZSl7cmV0dXJuIGUuZj09RVQmJkRuKGUsVTduKGUuZyxlLmIpKSxlLmZ9ZnVuY3Rpb24gRWkoZSx0LG4scil7cmV0dXJuIHFmdChlLHQsbiwhMSksalYoZSxyKSxlfWZ1bmN0aW9uIHlhdChlLHQpe3RoaXMuYj1lLGphZS5jYWxsKHRoaXMsZSx0KSxqbnQodGhpcyl9ZnVuY3Rpb24geGF0KGUsdCl7dGhpcy5iPWUsZjRlLmNhbGwodGhpcyxlLHQpLCRudCh0aGlzKX1mdW5jdGlvbiBuQShlKXt0aGlzLmQ9ZSx0aGlzLmE9dGhpcy5kLmIsdGhpcy5iPXRoaXMuZC5jfWZ1bmN0aW9uIEw1ZShlLHQpe3RoaXMuYj1lLHRoaXMuYz10LHRoaXMuYT1uZXcgUDgodGhpcy5iKX1mdW5jdGlvbiBjbyhlLHQpe3JldHVybiBYbih0LGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodCl9ZnVuY3Rpb24gb3BuKGUsdCl7YjhlKGUsemUobnAodCwieCIpKSx6ZShucCh0LCJ5IikpKX1mdW5jdGlvbiBjcG4oZSx0KXtiOGUoZSx6ZShucCh0LCJ4IikpLHplKG5wKHQsInkiKSkpfWZ1bmN0aW9uIEZpKGUsdCl7cmV0dXJuIHhiKGUpLG5ldyBibihlLG5ldyAkNmUodCxlLmEpKX1mdW5jdGlvbiBmYyhlLHQpe3JldHVybiB4YihlKSxuZXcgYm4oZSxuZXcgQzZlKHQsZS5hKSl9ZnVuY3Rpb24geHkoZSx0KXtyZXR1cm4geGIoZSksbmV3IFZ5ZShlLG5ldyBNdXQodCxlLmEpKX1mdW5jdGlvbiBUSChlLHQpe3JldHVybiB4YihlKSxuZXcgVXllKGUsbmV3IER1dCh0LGUuYSkpfWZ1bmN0aW9uIHVwbihlLHQpe3JldHVybiBuZXcgVWF0KGwoWHIoZSksNTApLGwoWHIodCksNTApKX1mdW5jdGlvbiBscG4oZSx0KXtyZXR1cm4gWWkoZS5kLmMrZS5kLmIvMix0LmQuYyt0LmQuYi8yKX1mdW5jdGlvbiBrYXQoZSx0LG4pe24uYT9HdShlLHQuYi1lLmYvMik6VXUoZSx0LmEtZS5nLzIpfWZ1bmN0aW9uIGhwbihlLHQpe3JldHVybiBZaShlLmcuYytlLmcuYi8yLHQuZy5jK3QuZy5iLzIpfWZ1bmN0aW9uIGZwbihlLHQpe3JldHVybiB3M2UoKSxZaSgobnIoZSksZSksKG5yKHQpLHQpKX1mdW5jdGlvbiBkcG4oZSl7cmV0dXJuIGUhPW51bGwmJm5PKEVZLGUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gTTVlKGUpe3ZhciB0O2Zvcih0PWUuS2MoKTt0Lk9iKCk7KXQuUGIoKSx0LlFiKCl9ZnVuY3Rpb24gVjUoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5iLCF0JiYoZS5iPXQ9bmV3IG1pZShlKSksdH1mdW5jdGlvbiBRYWUoZSl7dmFyIHQ7cmV0dXJuIHQ9UXduKGUpLHR8fG51bGx9ZnVuY3Rpb24gRWF0KGUsdCl7dmFyIG4scjtyZXR1cm4gbj1lL3Qscj11YShuKSxuPnImJisrcixyfWZ1bmN0aW9uIGdwbihlLHQsbil7dmFyIHI7cj1sKGUuZC5LYihuKSwxNTkpLHImJnIuTmIodCl9ZnVuY3Rpb24gcHBuKGUsdCxuKXttTG4oZS5hLG4pLFczbihuKSxSRW4oZS5iLG4pLFJMbih0LG4pfWZ1bmN0aW9uIENIKGUsdCxuLHIpe3RoaXMuYT1lLHRoaXMuYz10LHRoaXMuYj1uLHRoaXMuZD1yfWZ1bmN0aW9uIEQ1ZShlLHQsbixyKXt0aGlzLmM9ZSx0aGlzLmI9dCx0aGlzLmE9bix0aGlzLmQ9cn1mdW5jdGlvbiBUYXQoZSx0LG4scil7dGhpcy5jPWUsdGhpcy5iPXQsdGhpcy5kPW4sdGhpcy5hPXJ9ZnVuY3Rpb24gZWYoZSx0LG4scil7dGhpcy5jPWUsdGhpcy5kPXQsdGhpcy5iPW4sdGhpcy5hPXJ9ZnVuY3Rpb24gQ2F0KGUsdCxuLHIpe3RoaXMuYT1lLHRoaXMuZD10LHRoaXMuYz1uLHRoaXMuYj1yfWZ1bmN0aW9uIEphZShlLHQsbixyKXt0aGlzLmE9ZSx0aGlzLmU9dCx0aGlzLmQ9bix0aGlzLmM9cn1mdW5jdGlvbiBTYXQoZSx0LG4scil7dGhpcy5hPWUsdGhpcy5jPXQsdGhpcy5kPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gWmFlKGUsdCxuKXt0aGlzLmE9aUVlLHRoaXMuZD1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIFo4KGUsdCxuLHIpe1VyLmNhbGwodGhpcyxlLHQpLHRoaXMuYT1uLHRoaXMuYj1yfWZ1bmN0aW9uIF9hdChlLHQpe3RoaXMuZD0obnIoZSksZSksdGhpcy5hPTE2NDQ5LHRoaXMuYz10fWZ1bmN0aW9uIEFhdChlKXt0aGlzLmE9bmV3IGJ0LHRoaXMuZT1XZShWcixkdCw1MyxlLDAsMil9ZnVuY3Rpb24gYnBuKGUpe2UuVWcoIk5vIGNyb3NzaW5nIG1pbmltaXphdGlvbiIsMSksZS5WZygpfWZ1bmN0aW9uIExhdCgpe0FjLmNhbGwodGhpcywiVGhlcmUgaXMgbm8gbW9yZSBlbGVtZW50LiIpfWZ1bmN0aW9uIE1hdChlLHQsbixyKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bix0aGlzLmQ9cn1mdW5jdGlvbiBEYXQoZSx0LG4scil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW4sdGhpcy5kPXJ9ZnVuY3Rpb24gT20oZSx0LG4scil7dGhpcy5lPWUsdGhpcy5hPXQsdGhpcy5jPW4sdGhpcy5kPXJ9ZnVuY3Rpb24gSWF0KGUsdCxuLHIpe3RoaXMuYT1lLHRoaXMuYz10LHRoaXMuZD1uLHRoaXMuYj1yfWZ1bmN0aW9uIE9hdChlLHQsbixyKXtKaCgpLEl1dC5jYWxsKHRoaXMsdCxuLHIpLHRoaXMuYT1lfWZ1bmN0aW9uIE5hdChlLHQsbixyKXtKaCgpLEl1dC5jYWxsKHRoaXMsdCxuLHIpLHRoaXMuYT1lfWZ1bmN0aW9uIGVvZShlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1Wa2UoZSksYT10LnRpKG4sciksYX1mdW5jdGlvbiBLZyhlKXt2YXIgdCxuO3JldHVybiBuPSh0PW5ldyBRdix0KSxzRShuLGUpLG59ZnVuY3Rpb24gdG9lKGUpe3ZhciB0LG47cmV0dXJuIG49KHQ9bmV3IFF2LHQpLEt4ZShuLGUpLG59ZnVuY3Rpb24gbXBuKGUsdCl7dmFyIG47cmV0dXJuIG49Y3IoZS5mLHQpLFM3ZSh0LG4pLG51bGx9ZnVuY3Rpb24gUGF0KGUpe3JldHVybiFlLmImJihlLmI9bmV3IG50KGpzLGUsMTIsMykpLGUuYn1mdW5jdGlvbiBCYXQoZSl7cmV0dXJuIFZfKGU9PW51bGx8fFJhZShlKSYmZS5UbSE9PXhlKSxlfWZ1bmN0aW9uIFNIKGUpe3JldHVybiBlLm4mJihlLmUhPT1Gd3QmJmUuamUoKSxlLmo9bnVsbCksZX1mdW5jdGlvbiBZayhlKXtpZihRbChlLmQpLGUuZC5kIT1lLmMpdGhyb3cgdWUobmV3IFhoKX1mdW5jdGlvbiBJNWUoZSl7cmV0dXJuIG1yKGUuYjxlLmQuZ2MoKSksZS5kLlhiKGUuYz1lLmIrKyl9ZnVuY3Rpb24gQ2goZSl7ZS5hLmE9ZS5jLGUuYy5iPWUuYSxlLmEuYj1lLmMuYT1udWxsLGUuYj0wfWZ1bmN0aW9uIG5vZShlKXt0aGlzLmY9ZSx0aGlzLmM9dGhpcy5mLmUsZS5mPjAmJmdndCh0aGlzKX1mdW5jdGlvbiBGYXQoZSx0KXt0aGlzLmE9ZSxiZm4uY2FsbCh0aGlzLGUsbChlLmQsMTUpLmZkKHQpKX1mdW5jdGlvbiB2cG4oZSx0KXtyZXR1cm4gWWkod2woZSkqZ2goZSksd2wodCkqZ2godCkpfWZ1bmN0aW9uIHdwbihlLHQpe3JldHVybiBZaSh3bChlKSpnaChlKSx3bCh0KSpnaCh0KSl9ZnVuY3Rpb24geXBuKGUpe3JldHVybiBxdyhlKSYmUnQoQnQoYXQoZSwoTnQoKSxndikpKSl9ZnVuY3Rpb24geHBuKGUsdCl7cmV0dXJuIHhuKGUsbChRKHQsKE50KCksSFQpKSwxNyksdCl9ZnVuY3Rpb24ga3BuKGUsdCl7cmV0dXJuIGwoUShlLChmdCgpLFd4KSksMTUpLkZjKHQpLHR9ZnVuY3Rpb24gTzVlKGUsdCl7cmV0dXJuIGUuYj10LmIsZS5jPXQuYyxlLmQ9dC5kLGUuYT10LmEsZX1mdW5jdGlvbiBSYXQoZSx0LG4scil7dGhpcy5iPWUsdGhpcy5jPXIsRHEuY2FsbCh0aGlzLHQsbil9ZnVuY3Rpb24gRXBuKGUsdCxuKXtlLmk9MCxlLmU9MCx0IT1uJiZ4MHQoZSx0LG4pfWZ1bmN0aW9uIFRwbihlLHQsbil7ZS5pPTAsZS5lPTAsdCE9biYmazB0KGUsdCxuKX1mdW5jdGlvbiBDcG4oZSx0LG4pe3JldHVybiBwXygpLEo0bihsKGNyKGUuZSx0KSw1MjkpLG4pfWZ1bmN0aW9uIGV4KGUpe3ZhciB0O3JldHVybiB0PWUuZix0fHwoZS5mPW5ldyBMayhlLGUuYykpfWZ1bmN0aW9uIGphdChlLHQpe3JldHVybiBlNihlLmosdC5zLHQuYykrZTYodC5lLGUucyxlLmMpfWZ1bmN0aW9uICRhdChlLHQpe2UuZSYmIWUuZS5hJiYoQ1FlKGUuZSx0KSwkYXQoZS5lLHQpKX1mdW5jdGlvbiB6YXQoZSx0KXtlLmQmJiFlLmQuYSYmKENRZShlLmQsdCksemF0KGUuZCx0KSl9ZnVuY3Rpb24gU3BuKGUsdCl7cmV0dXJuLVlpKHdsKGUpKmdoKGUpLHdsKHQpKmdoKHQpKX1mdW5jdGlvbiBfcG4oZSl7cmV0dXJuIGwoZS5sZCgpLDE0OSkuUGcoKSsiOiIreGMoZS5tZCgpKX1mdW5jdGlvbiBxYXQoKXtOdWUodGhpcyxuZXcgZnopLHRoaXMud2I9KGxiKCksVm4pLFNrKCl9ZnVuY3Rpb24gSGF0KGUpe3RoaXMuYj1uZXcgYnQscmEodGhpcy5iLHRoaXMuYiksdGhpcy5hPWV9ZnVuY3Rpb24gTjVlKGUsdCl7bmV3IG9zLHRoaXMuYT1uZXcgYmwsdGhpcy5iPWUsdGhpcy5jPXR9ZnVuY3Rpb24gRXcoKXtFdz1VLGRfZT1uZXcgS2UsRDBlPW5ldyBLZSxnX2U9bmV3IEZ0fWZ1bmN0aW9uIENuKCl7Q249VSxfbz1uZXcgamUsbWc9bmV3IFNlLGhLPW5ldyBDZX1mdW5jdGlvbiBQNWUoKXtQNWU9VSxqNnQ9bmV3IHdvLHo2dD1uZXcgWDRlLCQ2dD1uZXcgX3N9ZnVuY3Rpb24gdHgoKXt0eD1VLHdLPW5ldyBidCxYMGU9bmV3IFByLFkwZT1uZXcgYnR9ZnVuY3Rpb24gX0goZSx0KXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBEOCh0KSk7cmV0dXJuIGV9ZnVuY3Rpb24gQUgoZSl7cmV0dXJuIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYX1mdW5jdGlvbiBxaShlKXtyZXR1cm4hZS5xJiYoZS5xPW5ldyBudChVZixlLDExLDEwKSksZS5xfWZ1bmN0aW9uIHR0KGUpe3JldHVybiFlLnMmJihlLnM9bmV3IG50KGRsLGUsMjEsMTcpKSxlLnN9ZnVuY3Rpb24gQXBuKGUpe3JldHVybiBYcihlKSxNZHQobmV3IGhyKGRyKGUuYS5LYygpLG5ldyBqKSkpfWZ1bmN0aW9uIExwbihlLHQpe3JldHVybiBiaChlKSxiaCh0KSxQSmUobChlLDIyKSxsKHQsMjIpKX1mdW5jdGlvbiBObShlLHQsbil7dmFyIHIsYTtyPWc0ZShuKSxhPW5ldyB2ayhyKSxlMShlLHQsYSl9ZnVuY3Rpb24gcm9lKGUsdCxuLHIsYSxvKXtzTi5jYWxsKHRoaXMsZSx0LG4scixhLG8/LTI6LTEpfWZ1bmN0aW9uIFZhdChlLHQsbixyKXt0eWUuY2FsbCh0aGlzLHQsbiksdGhpcy5iPWUsdGhpcy5hPXJ9ZnVuY3Rpb24gVWF0KGUsdCl7WGNuLmNhbGwodGhpcyxuZXcgUGFlKGUpKSx0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBCNWUoZSl7dGhpcy5iPWUsdGhpcy5jPWUsZS5lPW51bGwsZS5jPW51bGwsdGhpcy5hPTF9ZnVuY3Rpb24gTXBuKGUpe3UwKCk7dmFyIHQ7dD1sKGUuZywxMCksdC5uLmE9ZS5kLmMrdC5kLmJ9ZnVuY3Rpb24gWGsoKXtYaz1VO3ZhciBlLHQ7dD0hRjVuKCksZT1uZXcgc2UsUzBlPXQ/bmV3IG5lOmV9ZnVuY3Rpb24gaW9lKGUpe3JldHVybiBDbigpLERlKGUsNTkpP25ldyBlc2UoZSk6bmV3IGpxKGUpfWZ1bmN0aW9uIExIKGUpe3JldHVybiBEZShlLDE2KT9uZXcgVV8obChlLDE2KSk6dWRuKGUuS2MoKSl9ZnVuY3Rpb24gRHBuKGUpe3JldHVybiBuZXcgcW50KGUsZS5lLlJkKCkuZ2MoKSplLmMuUmQoKS5nYygpKX1mdW5jdGlvbiBJcG4oZSl7cmV0dXJuIG5ldyBIbnQoZSxlLmUuUmQoKS5nYygpKmUuYy5SZCgpLmdjKCkpfWZ1bmN0aW9uIEY1ZShlKXtyZXR1cm4gZSYmZS5oYXNoQ29kZT9lLmhhc2hDb2RlKCk6ZncoZSl9ZnVuY3Rpb24gc29lKGUsdCl7cmV0dXJuIHQ9PW51bGw/ISF6byhlLmYsbnVsbCk6V2RuKGUuaSx0KX1mdW5jdGlvbiBPcG4oZSx0KXt2YXIgbjtyZXR1cm4gbj13eWUoZS5hLHQpLG4mJih0LmQ9bnVsbCksbn1mdW5jdGlvbiBHYXQoZSx0LG4pe3JldHVybiBlLmY/ZS5mLmVmKHQsbik6ITF9ZnVuY3Rpb24gVk8oZSx0LG4scil7VHMoZS5jW3QuZ10sbi5nLHIpLFRzKGUuY1tuLmddLHQuZyxyKX1mdW5jdGlvbiBhb2UoZSx0LG4scil7VHMoZS5jW3QuZ10sdC5nLG4pLFRzKGUuYlt0LmddLHQuZyxyKX1mdW5jdGlvbiBOcG4oZSx0LG4pe3JldHVybiB6ZShHZShuLmEpKTw9ZSYmemUoR2Uobi5iKSk+PXR9ZnVuY3Rpb24gS2F0KGUsdCl7dGhpcy5nPWUsdGhpcy5kPWhlKGxlKHdnLDEpLG0yLDEwLDAsW3RdKX1mdW5jdGlvbiBXYXQoZSl7dGhpcy5jPWUsdGhpcy5iPW5ldyBLcChsKFhyKG5ldyB0bCksNTApKX1mdW5jdGlvbiBZYXQoZSl7dGhpcy5jPWUsdGhpcy5iPW5ldyBLcChsKFhyKG5ldyBsNSksNTApKX1mdW5jdGlvbiBYYXQoZSl7dGhpcy5iPWUsdGhpcy5hPW5ldyBLcChsKFhyKG5ldyBCaSksNTApKX1mdW5jdGlvbiBRYXQoKXt0aGlzLmI9bmV3IEtzLHRoaXMuZD1uZXcgb3MsdGhpcy5lPW5ldyBGd2V9ZnVuY3Rpb24gUjVlKCl7dGhpcy5jPW5ldyBxYSx0aGlzLmQ9bmV3IHFhLHRoaXMuZT1uZXcgcWF9ZnVuY3Rpb24gVHcoKXt0aGlzLmE9bmV3IGJsLHRoaXMuYj0oTWgoMyxZeSksbmV3IEJ1KDMpKX1mdW5jdGlvbiBKcChlLHQpe3RoaXMuZT1lLHRoaXMuYT13YSx0aGlzLmI9UWJ0KHQpLHRoaXMuYz10fWZ1bmN0aW9uIE1IKGUpe3RoaXMuYz1lLmMsdGhpcy5kPWUuZCx0aGlzLmI9ZS5iLHRoaXMuYT1lLmF9ZnVuY3Rpb24gSmF0KGUsdCxuLHIsYSxvKXt0aGlzLmE9ZSxKb2UuY2FsbCh0aGlzLHQsbixyLGEsbyl9ZnVuY3Rpb24gWmF0KGUsdCxuLHIsYSxvKXt0aGlzLmE9ZSxKb2UuY2FsbCh0aGlzLHQsbixyLGEsbyl9ZnVuY3Rpb24gZGIoZSx0LG4scixhLG8sZil7cmV0dXJuIG5ldyBFb2UoZS5lLHQsbixyLGEsbyxmKX1mdW5jdGlvbiBQcG4oZSx0LG4pe3JldHVybiBuPj0wJiZ2bihlLnN1YnN0cihuLHQubGVuZ3RoKSx0KX1mdW5jdGlvbiBlb3QoZSx0KXtyZXR1cm4gRGUodCwxNDkpJiZ2bihlLmIsbCh0LDE0OSkuUGcoKSl9ZnVuY3Rpb24gQnBuKGUsdCl7cmV0dXJuIGUuYT90LkdoKCkuS2MoKTpsKHQuR2goKSw3MSkuSWkoKX1mdW5jdGlvbiB0b3QoZSx0KXt2YXIgbjtyZXR1cm4gbj1lLmIuUWModCksWWN0KG4sZS5iLmdjKCkpLG59ZnVuY3Rpb24gVU8oZSx0KXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBEOCh0KSk7cmV0dXJuIGV9ZnVuY3Rpb24gZGMoZSl7cmV0dXJuIGUudXx8KFlsKGUpLGUudT1uZXcgTnJ0KGUsZSkpLGUudX1mdW5jdGlvbiBvb2UoZSl7dGhpcy5hPShDbigpLERlKGUsNTkpP25ldyBlc2UoZSk6bmV3IGpxKGUpKX1mdW5jdGlvbiBzbChlKXt2YXIgdDtyZXR1cm4gdD1sKEtuKGUsMTYpLDI5KSx0fHxlLmlpKCl9ZnVuY3Rpb24gREgoZSx0KXt2YXIgbjtyZXR1cm4gbj1fbShlLlJtKSx0PT1udWxsP246bisiOiAiK3R9ZnVuY3Rpb24gdGYoZSx0LG4pe3JldHVybiBHYSh0LG4sZS5sZW5ndGgpLGUuc3Vic3RyKHQsbi10KX1mdW5jdGlvbiBub3QoZSx0KXtWcS5jYWxsKHRoaXMpLFk2ZSh0aGlzKSx0aGlzLmE9ZSx0aGlzLmM9dH1mdW5jdGlvbiBGcG4oZSl7ZSYmREgoZSxlLmllKCkpfWZ1bmN0aW9uIFJwbihlKXtIeigpLGIuc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9LDApfWZ1bmN0aW9uIGpwbigpe3JldHVybiBaVigpLGhlKGxlKGtfZSwxKSxpdCw0MzYsMCxbajBlLHhfZV0pfWZ1bmN0aW9uICRwbigpe3JldHVybiBhVigpLGhlKGxlKFRfZSwxKSxpdCw0MzUsMCxbRV9lLCQwZV0pfWZ1bmN0aW9uIHpwbigpe3JldHVybiBvVigpLGhlKGxlKEpfZSwxKSxpdCw0MzIsMCxbUTBlLHlLXSl9ZnVuY3Rpb24gcXBuKCl7cmV0dXJuIGRFKCksaGUobGUoJDh0LDEpLGl0LDUxNywwLFtkQixoMWVdKX1mdW5jdGlvbiBIcG4oKXtyZXR1cm4gekgoKSxoZShsZShQTGUsMSksaXQsNDI5LDAsW3oxZSxOTGVdKX1mdW5jdGlvbiBWcG4oKXtyZXR1cm4gcE4oKSxoZShsZSh3TGUsMSksaXQsNDI4LDAsW1hLLHZMZV0pfWZ1bmN0aW9uIFVwbigpe3JldHVybiBKSCgpLGhlKGxlKGhMZSwxKSxpdCw0MzEsMCxbbExlLFMxZV0pfWZ1bmN0aW9uIEdwbigpe3JldHVybiBkTigpLGhlKGxlKF9EZSwxKSxpdCw0MzAsMCxba2RlLEVkZV0pfWZ1bmN0aW9uIEtwbigpe3JldHVybiBvQSgpLGhlKGxlKERFdCwxKSxpdCw1MzEsMCxbdU0sY01dKX1mdW5jdGlvbiBXcG4oKXtyZXR1cm4ga1YoKSxoZShsZShFSWUsMSksaXQsNTAxLDAsWyRXLFg2XSl9ZnVuY3Rpb24gWXBuKCl7cmV0dXJuIHhkKCksaGUobGUoUkV0LDEpLGl0LDUyMywwLFt3MyxUMl0pfWZ1bmN0aW9uIFhwbigpe3JldHVybiBEMSgpLGhlKGxlKCRFdCwxKSxpdCw1MjIsMCxbd3YsWTFdKX1mdW5jdGlvbiBRcG4oKXtyZXR1cm4gSjAoKSxoZShsZSh0VHQsMSksaXQsNTI4LDAsW0U0LHFiXSl9ZnVuY3Rpb24gSnBuKCl7cmV0dXJuIGNOKCksaGUobGUoa0xlLDEpLGl0LDQ4OCwwLFt4TGUsSktdKX1mdW5jdGlvbiBacG4oKXtyZXR1cm4gR0goKSxoZShsZShmT2UsMSksaXQsNDkxLDAsW2RnZSxoT2VdKX1mdW5jdGlvbiBlMm4oKXtyZXR1cm4gZmNlKCksaGUobGUodk9lLDEpLGl0LDQ5MiwwLFtiT2UsbU9lXSl9ZnVuY3Rpb24gdDJuKCl7cmV0dXJuIFJIKCksaGUobGUoa0llLDEpLGl0LDQzMywwLFtVZGUseEllXSl9ZnVuY3Rpb24gbjJuKCl7cmV0dXJuIGVWKCksaGUobGUoQ0llLDEpLGl0LDQzNCwwLFtUSWUsUWRlXSl9ZnVuY3Rpb24gcjJuKCl7cmV0dXJuIFN3KCksaGUobGUoY1R0LDEpLGl0LDQ2NSwwLFtIYixLNl0pfWZ1bmN0aW9uIGkybigpe3JldHVybiByTigpLGhlKGxlKHlPZSwxKSxpdCw0MzgsMCxbdmdlLFFXXSl9ZnVuY3Rpb24gczJuKCl7cmV0dXJuIENOKCksaGUobGUocU9lLDEpLGl0LDQzNywwLFtaVyx6T2VdKX1mdW5jdGlvbiBhMm4oKXtyZXR1cm4gbWFlKCksaGUobGUoZ1ksMSksaXQsMzQ3LDAsW3JQZSxpUGVdKX1mdW5jdGlvbiBJSChlLHQsbixyKXtyZXR1cm4gbj49MD9lLlVoKHQsbixyKTplLkNoKG51bGwsbixyKX1mdW5jdGlvbiBHTyhlKXtyZXR1cm4gZS5iLmI9PTA/ZS5hLnNmKCk6a2FlKGUuYil9ZnVuY3Rpb24gbzJuKGUpe2lmKGUucCE9NSl0aHJvdyB1ZShuZXcgcGwpO3JldHVybiBZcihlLmYpfWZ1bmN0aW9uIGMybihlKXtpZihlLnAhPTUpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gWXIoZS5rKX1mdW5jdGlvbiBqNWUoZSl7cmV0dXJuIHFlKGUuYSk9PT1xZSgobGNlKCksbnBlKSkmJmFNbihlKSxlLmF9ZnVuY3Rpb24gdTJuKGUsdCl7ZS5iPXQsZS5jPjAmJmUuYj4wJiYoZS5nPWFIKGUuYyxlLmIsZS5hKSl9ZnVuY3Rpb24gbDJuKGUsdCl7ZS5jPXQsZS5jPjAmJmUuYj4wJiYoZS5nPWFIKGUuYyxlLmIsZS5hKSl9ZnVuY3Rpb24gcm90KGUsdCl7Y2UodGhpcyxuZXcgbHQoZS5hLGUuYikpLHZlKHRoaXMsUE8odCkpfWZ1bmN0aW9uIEN3KCl7UWNuLmNhbGwodGhpcyxuZXcgTjgoQXkoMTIpKSksVHllKCEwKSx0aGlzLmE9Mn1mdW5jdGlvbiBjb2UoZSx0LG4pe0RpKCksWHYuY2FsbCh0aGlzLGUpLHRoaXMuYj10LHRoaXMuYT1ufWZ1bmN0aW9uICQ1ZShlLHQsbil7SmgoKSxOei5jYWxsKHRoaXMsdCksdGhpcy5hPWUsdGhpcy5iPW59ZnVuY3Rpb24gaW90KGUpe3ZhciB0O3Q9ZS5jLmQuYixlLmI9dCxlLmE9ZS5jLmQsdC5hPWUuYy5kLmI9ZX1mdW5jdGlvbiBoMm4oZSl7cmV0dXJuIGUuYj09MD9udWxsOihtcihlLmIhPTApLGFmKGUsZS5hLmEpKX1mdW5jdGlvbiB4dShlLHQpe3JldHVybiB0PT1udWxsP2hjKHpvKGUuZixudWxsKSk6eV8oZS5pLHQpfWZ1bmN0aW9uIHNvdChlLHQsbixyLGEpe3JldHVybiBuZXcgQnVlKGUsKHJFKCksUDBlKSx0LG4scixhKX1mdW5jdGlvbiBPSChlLHQpe3JldHVybiBHY3QodCksUHduKGUsV2UoVnIsZGksMjgsdCwxNSwxKSx0KX1mdW5jdGlvbiBOSChlLHQpe3JldHVybiBfSChlLCJzZXQxIiksX0godCwic2V0MiIpLG5ldyBHWmUoZSx0KX1mdW5jdGlvbiBmMm4oZSx0KXt2YXIgbj1DMGVbZS5jaGFyQ29kZUF0KDApXTtyZXR1cm4gbj8/ZX1mdW5jdGlvbiBhb3QoZSx0KXt2YXIgbixyO3JldHVybiBuPXQscj1uZXcgeHQsT3Z0KGUsbixyKSxyLmR9ZnVuY3Rpb24gdW9lKGUsdCxuLHIpe3ZhciBhO2E9bmV3IEZydCx0LmFbbi5nXT1hLFE4KGUuYixyLGEpfWZ1bmN0aW9uIGQybihlLHQpe3ZhciBuO3JldHVybiBuPUl3bihlLmYsdCksT2koSHEobiksZS5mLmQpfWZ1bmN0aW9uIEtPKGUpe3ZhciB0O0h3bihlLmEpLGRudChlLmEpLHQ9bmV3IGVfKGUuYSksUzhlKHQpfWZ1bmN0aW9uIGcybihlLHQpe3pidChlLCEwKSxWdShlLmUuUmYoKSxuZXcgdjRlKGUsITAsdCkpfWZ1bmN0aW9uIHAybihlLHQpe3JldHVybiB0eCgpLGU9PWRzKGNnKHQpKXx8ZT09ZHMoRWIodCkpfWZ1bmN0aW9uIGIybihlLHQpe3JldHVybiB0cCgpLGwoUSh0LChIYygpLCRkKSksMTcpLmE9PWV9ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGUsSWkpLC0yMTQ3NDgzNjQ4KXwwfWZ1bmN0aW9uIG9vdChlKXt0aGlzLmE9bChYcihlKSwyNzcpLHRoaXMuYj0oQ24oKSxuZXcgRHllKGUpKX1mdW5jdGlvbiBjb3QoZSx0LG4pe3RoaXMuaT1uZXcgYnQsdGhpcy5iPWUsdGhpcy5nPXQsdGhpcy5hPW59ZnVuY3Rpb24gejVlKGUsdCxuKXt0aGlzLmE9bmV3IGJ0LHRoaXMuZT1lLHRoaXMuZj10LHRoaXMuYz1ufWZ1bmN0aW9uIFBIKGUsdCxuKXt0aGlzLmM9bmV3IGJ0LHRoaXMuZT1lLHRoaXMuZj10LHRoaXMuYj1ufWZ1bmN0aW9uIHVvdChlKXtWcS5jYWxsKHRoaXMpLFk2ZSh0aGlzKSx0aGlzLmE9ZSx0aGlzLmM9ITB9ZnVuY3Rpb24gbTJuKGUpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlPWV8fHt9LG5ldyB0fWZ1bmN0aW9uIHYybihlKXtpZihlLkFlKCkpcmV0dXJuIG51bGw7dmFyIHQ9ZS5uO3JldHVybiBzS1t0XX1mdW5jdGlvbiBXTyhlKXtyZXR1cm4gZS5EYj4+MTYhPTM/bnVsbDpsKGUuQ2IsMjcpfWZ1bmN0aW9uIE0xKGUpe3JldHVybiBlLkRiPj4xNiE9OT9udWxsOmwoZS5DYiwyNyl9ZnVuY3Rpb24gbG90KGUpe3JldHVybiBlLkRiPj4xNiE9Nj9udWxsOmwoZS5DYiw3NCl9ZnVuY3Rpb24gU3coKXtTdz1VLEhiPW5ldyBIM2UoTXgsMCksSzY9bmV3IEgzZShEeCwxKX1mdW5jdGlvbiB4ZCgpe3hkPVUsdzM9bmV3ICQzZShEeCwwKSxUMj1uZXcgJDNlKE14LDEpfWZ1bmN0aW9uIEQxKCl7RDE9VSx3dj1uZXcgejNlKHdoZSwwKSxZMT1uZXcgejNlKCJVUCIsMSl9ZnVuY3Rpb24gaG90KCl7aG90PVUsbzZ0PUtyKCgkeigpLGhlKGxlKGE2dCwxKSxpdCw1NDksMCxbRTBlXSkpKX1mdW5jdGlvbiBmb3QoZSl7dmFyIHQ7cmV0dXJuIHQ9bmV3IEt6KEF5KGUubGVuZ3RoKSksajdlKHQsZSksdH1mdW5jdGlvbiBkb3QoZSx0KXtyZXR1cm4gZS5iKz10LmIsZS5jKz10LmMsZS5kKz10LmQsZS5hKz10LmEsZX1mdW5jdGlvbiB3Mm4oZSx0KXtyZXR1cm4gWmZ0KGUsdCk/KFlodChlKSwhMCk6ITF9ZnVuY3Rpb24gV2coZSx0KXtpZih0PT1udWxsKXRocm93IHVlKG5ldyBTOCk7cmV0dXJuIGo1bihlLHQpfWZ1bmN0aW9uIFlPKGUsdCl7dmFyIG47bj1lLnEuZ2V0SG91cnMoKSxlLnEuc2V0RGF0ZSh0KSxYQShlLG4pfWZ1bmN0aW9uIHE1ZShlLHQsbil7dmFyIHI7cj1lLkloKHQpLHI+PTA/ZS5iaShyLG4pOiQ5ZShlLHQsbil9ZnVuY3Rpb24gZ290KGUsdCl7dmFyIG47cmV0dXJuIG49ZS5JaCh0KSxuPj0wP2UuV2gobik6cXVlKGUsdCl9ZnVuY3Rpb24gcG90KGUsdCl7dmFyIG47Zm9yKFhyKHQpLG49ZS5hO247bj1uLmMpdC5ZZChuLmcsbi5pKX1mdW5jdGlvbiBsb2UoZSx0LG4pe3ZhciByO3I9dzB0KGUsdCxuKSxlLmI9bmV3IFRWKHIuYy5sZW5ndGgpfWZ1bmN0aW9uIFU1KGUsdCxuKXtCSCgpLGUmJmtpKFpnZSxlLHQpLGUmJmtpKGxGLGUsbil9ZnVuY3Rpb24geTJuKGUsdCl7cmV0dXJuIFlxKCksSG4oKSxsKHQuYSwxNykuYTxlfWZ1bmN0aW9uIHgybihlLHQpe3JldHVybiBZcSgpLEhuKCksbCh0LmIsMTcpLmE8ZX1mdW5jdGlvbiBob2UoZSx0KXtyZXR1cm4gYi5NYXRoLmFicyhlKTxiLk1hdGguYWJzKHQpP2U6dH1mdW5jdGlvbiBrMm4oZSl7cmV0dXJuIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYS5pPjB9ZnVuY3Rpb24gSDVlKGUpe3ZhciB0O3JldHVybiB0PWUuZCx0PWUuYmooZS5mKSxxcihlLHQpLHQuT2IoKX1mdW5jdGlvbiBib3QoZSx0KXt2YXIgbjtyZXR1cm4gbj1uZXcgSzRlKHQpLHpndChuLGUpLG5ldyBPbChuKX1mdW5jdGlvbiBFMm4oZSl7aWYoZS5wIT0wKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIElfKGUuZiwwKX1mdW5jdGlvbiBUMm4oZSl7aWYoZS5wIT0wKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIElfKGUuaywwKX1mdW5jdGlvbiBtb3QoZSl7cmV0dXJuIGUuRGI+PjE2IT03P251bGw6bChlLkNiLDI0MSl9ZnVuY3Rpb24gUWsoZSl7cmV0dXJuIGUuRGI+PjE2IT02P251bGw6bChlLkNiLDI0MSl9ZnVuY3Rpb24gdm90KGUpe3JldHVybiBlLkRiPj4xNiE9Nz9udWxsOmwoZS5DYiwxNjcpfWZ1bmN0aW9uIGRzKGUpe3JldHVybiBlLkRiPj4xNiE9MTE/bnVsbDpsKGUuQ2IsMjcpfWZ1bmN0aW9uIGt5KGUpe3JldHVybiBlLkRiPj4xNiE9MTc/bnVsbDpsKGUuQ2IsMjkpfWZ1bmN0aW9uIHdvdChlKXtyZXR1cm4gZS5EYj4+MTYhPTM/bnVsbDpsKGUuQ2IsMTU1KX1mdW5jdGlvbiBWNWUoZSl7dmFyIHQ7cmV0dXJuIHhiKGUpLHQ9bmV3IEtzLEZpKGUsbmV3IGs1KHQpKX1mdW5jdGlvbiB5b3QoZSx0KXt2YXIgbj1lLmE9ZS5hfHxbXTtyZXR1cm4gblt0XXx8KG5bdF09ZS52ZSh0KSl9ZnVuY3Rpb24gQzJuKGUsdCl7dmFyIG47bj1lLnEuZ2V0SG91cnMoKSxlLnEuc2V0TW9udGgodCksWEEoZSxuKX1mdW5jdGlvbiB4b3QoZSx0KXtGcSh0aGlzKSx0aGlzLmY9dCx0aGlzLmc9ZSxTSCh0aGlzKSx0aGlzLmplKCl9ZnVuY3Rpb24ga290KGUsdCl7dGhpcy5hPWUsdGhpcy5jPUphKHRoaXMuYSksdGhpcy5iPW5ldyBNSCh0KX1mdW5jdGlvbiBFb3QoZSx0LG4pe3RoaXMuYT10LHRoaXMuYz1lLHRoaXMuYj0oWHIobiksbmV3IE9sKG4pKX1mdW5jdGlvbiBUb3QoZSx0LG4pe3RoaXMuYT10LHRoaXMuYz1lLHRoaXMuYj0oWHIobiksbmV3IE9sKG4pKX1mdW5jdGlvbiBDb3QoZSl7dGhpcy5hPWUsdGhpcy5iPVdlKEFFdCxkdCwyMDQzLGUuZS5sZW5ndGgsMCwyKX1mdW5jdGlvbiBTb3QoKXt0aGlzLmE9bmV3IGJkLHRoaXMuZT1uZXcgS3MsdGhpcy5nPTAsdGhpcy5pPTB9ZnVuY3Rpb24gQkgoKXtCSD1VLFpnZT1uZXcgUHIsbEY9bmV3IFByLHdsbihDNnQsbmV3IExTKX1mdW5jdGlvbiBfb3QoKXtfb3Q9VSxmRXQ9eWwobmV3IFhzLCh1bygpLG1jKSwodm8oKSxnQikpfWZ1bmN0aW9uIFU1ZSgpe1U1ZT1VLGRFdD15bChuZXcgWHMsKHVvKCksbWMpLCh2bygpLGdCKSl9ZnVuY3Rpb24gQW90KCl7QW90PVUscEV0PXlsKG5ldyBYcywodW8oKSxtYyksKHZvKCksZ0IpKX1mdW5jdGlvbiBMb3QoKXtMb3Q9VSxPRXQ9ZmkobmV3IFhzLCh1bygpLG1jKSwodm8oKSx6TCkpfWZ1bmN0aW9uIFNoKCl7U2g9VSxCRXQ9ZmkobmV3IFhzLCh1bygpLG1jKSwodm8oKSx6TCkpfWZ1bmN0aW9uIE1vdCgpe01vdD1VLEZFdD1maShuZXcgWHMsKHVvKCksbWMpLCh2bygpLHpMKSl9ZnVuY3Rpb24gZm9lKCl7Zm9lPVUscUV0PWZpKG5ldyBYcywodW8oKSxtYyksKHZvKCksekwpKX1mdW5jdGlvbiByQShlLHQsbixyLGEsbyl7cmV0dXJuIG5ldyBaZyhlLmUsdCxlLkxqKCksbixyLGEsbyl9ZnVuY3Rpb24gcmMoZSx0LG4pe3JldHVybiB0PT1udWxsP2p1KGUuZixudWxsLG4pOkJ3KGUuaSx0LG4pfWZ1bmN0aW9uIHBvKGUsdCl7ZS5jJiZhbChlLmMuZyxlKSxlLmM9dCxlLmMmJnZ0KGUuYy5nLGUpfWZ1bmN0aW9uIFZhKGUsdCl7ZS5jJiZhbChlLmMuYSxlKSxlLmM9dCxlLmMmJnZ0KGUuYy5hLGUpfWZ1bmN0aW9uIE1jKGUsdCl7ZS5pJiZhbChlLmkuaixlKSxlLmk9dCxlLmkmJnZ0KGUuaS5qLGUpfWZ1bmN0aW9uIEZhKGUsdCl7ZS5kJiZhbChlLmQuZSxlKSxlLmQ9dCxlLmQmJnZ0KGUuZC5lLGUpfWZ1bmN0aW9uIGRvZShlLHQpe2UuYSYmYWwoZS5hLmssZSksZS5hPXQsZS5hJiZ2dChlLmEuayxlKX1mdW5jdGlvbiBnb2UoZSx0KXtlLmImJmFsKGUuYi5mLGUpLGUuYj10LGUuYiYmdnQoZS5iLmYsZSl9ZnVuY3Rpb24gRG90KGUsdCl7RmduKGUsZS5iLGUuYyksbChlLmIuYiw2OCksdCYmbCh0LmIsNjgpLmJ9ZnVuY3Rpb24gUzJuKGUsdCl7cmV0dXJuIFlpKGwoZS5jLDY1KS5jLmUuYixsKHQuYyw2NSkuYy5lLmIpfWZ1bmN0aW9uIF8ybihlLHQpe3JldHVybiBZaShsKGUuYyw2NSkuYy5lLmEsbCh0LmMsNjUpLmMuZS5hKX1mdW5jdGlvbiBBMm4oZSl7cmV0dXJuIE1jZSgpLEhuKCksbChlLmEsODYpLmQuZSE9MH1mdW5jdGlvbiBGSChlLHQpe0RlKGUuQ2IsMTg0KSYmKGwoZS5DYiwxODQpLnRiPW51bGwpLEZ1KGUsdCl9ZnVuY3Rpb24gcG9lKGUsdCl7RGUoZS5DYiw5MCkmJnp5KFlsKGwoZS5DYiw5MCkpLDQpLEZ1KGUsdCl9ZnVuY3Rpb24gTDJuKGUsdCl7bThlKGUsdCksRGUoZS5DYiw5MCkmJnp5KFlsKGwoZS5DYiw5MCkpLDIpfWZ1bmN0aW9uIE0ybihlLHQpe3ZhciBuLHI7bj10LmMscj1uIT1udWxsLHImJko4KGUsbmV3IHl5KHQuYykpfWZ1bmN0aW9uIElvdChlKXt2YXIgdCxuO3JldHVybiBuPShTaygpLHQ9bmV3IFF2LHQpLHNFKG4sZSksbn1mdW5jdGlvbiBPb3QoZSl7dmFyIHQsbjtyZXR1cm4gbj0oU2soKSx0PW5ldyBRdix0KSxzRShuLGUpLG59ZnVuY3Rpb24gTm90KGUpe2Zvcih2YXIgdDs7KWlmKHQ9ZS5QYigpLCFlLk9iKCkpcmV0dXJuIHR9ZnVuY3Rpb24gRDJuKGUsdCxuKXtyZXR1cm4gdnQoZS5hLChrSCgpLGZ1ZSh0LG4pLG5ldyBpdyh0LG4pKSksZX1mdW5jdGlvbiBrdShlLHQpe3JldHVybiBGbygpLFZvZSh0KT9uZXcgbkgodCxlKTpuZXcgeU8odCxlKX1mdW5jdGlvbiBYTyhlKXtyZXR1cm4gQ2QoKSxpdShlLDApPj0wP2tiKGUpOkpfKGtiKHIyKGUpKSl9ZnVuY3Rpb24gSTJuKGUpe3ZhciB0O3JldHVybiB0PWwoZUgoZS5iKSw5KSxuZXcgWmgoZS5hLHQsZS5jKX1mdW5jdGlvbiBQb3QoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKE95KGV4KGUuYSksdCksMTYpLG4/bi5nYygpOjB9ZnVuY3Rpb24gQm90KGUsdCxuKXt2YXIgcjtvMXQodCxuLGUuYy5sZW5ndGgpLHI9bi10LGQzZShlLmMsdCxyKX1mdW5jdGlvbiBacChlLHQsbil7bzF0KHQsbixlLmdjKCkpLHRoaXMuYz1lLHRoaXMuYT10LHRoaXMuYj1uLXR9ZnVuY3Rpb24gbngoZSl7dGhpcy5jPW5ldyBvcyx0aGlzLmI9ZS5iLHRoaXMuZD1lLmMsdGhpcy5hPWUuYX1mdW5jdGlvbiBib2UoZSl7dGhpcy5hPWIuTWF0aC5jb3MoZSksdGhpcy5iPWIuTWF0aC5zaW4oZSl9ZnVuY3Rpb24gUG0oZSx0LG4scil7dGhpcy5jPWUsdGhpcy5kPXIsZG9lKHRoaXMsdCksZ29lKHRoaXMsbil9ZnVuY3Rpb24gRzVlKGUsdCl7WWNuLmNhbGwodGhpcyxuZXcgTjgoQXkoZSkpKSxNaCh0LER3dCksdGhpcy5hPXR9ZnVuY3Rpb24gRm90KGUsdCxuKXtyZXR1cm4gbmV3IEJ1ZShlLChyRSgpLE4wZSksbnVsbCwhMSx0LG4pfWZ1bmN0aW9uIFJvdChlLHQsbil7cmV0dXJuIG5ldyBCdWUoZSwockUoKSxCMGUpLHQsbixudWxsLCExKX1mdW5jdGlvbiBPMm4oKXtyZXR1cm4gRmwoKSxoZShsZShvYywxKSxpdCwxMDgsMCxbeV9lLEVjLGk0XSl9ZnVuY3Rpb24gTjJuKCl7cmV0dXJuIG9sKCksaGUobGUoWDZ0LDEpLGl0LDQ3MiwwLFthMSxGYix3MF0pfWZ1bmN0aW9uIFAybigpe3JldHVybiBCbCgpLGhlKGxlKFc2dCwxKSxpdCw0NzEsMCxbRmQsQmIsdjBdKX1mdW5jdGlvbiBCMm4oKXtyZXR1cm4gdDEoKSxoZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKX1mdW5jdGlvbiBGMm4oKXtyZXR1cm4gbEEoKSxoZShsZShkQWUsMSksaXQsMzkxLDAsW3QxZSxlMWUsbjFlXSl9ZnVuY3Rpb24gUjJuKCl7cmV0dXJuIE93KCksaGUobGUobTFlLDEpLGl0LDM3MiwwLFtvMyxSYixhM10pfWZ1bmN0aW9uIGoybigpe3JldHVybiBkQSgpLGhlKGxlKGRMZSwxKSxpdCwzMjIsMCxbSEwsbUIsZkxlXSl9ZnVuY3Rpb24gJDJuKCl7cmV0dXJuIHBWKCksaGUobGUocExlLDEpLGl0LDM1MSwwLFtnTGUsWUssXzFlXSl9ZnVuY3Rpb24gejJuKCl7cmV0dXJuIFZtKCksaGUobGUobXh0LDEpLGl0LDQ2MCwwLFtNMWUsRlQsUDZdKX1mdW5jdGlvbiBxMm4oKXtyZXR1cm4gdkUoKSxoZShsZSgkMWUsMSksaXQsMjk5LDAsW1IxZSxqMWUsdkJdKX1mdW5jdGlvbiBIMm4oKXtyZXR1cm4gZXAoKSxoZShsZShDeHQsMSksaXQsMzExLDAsW3dCLEY2LFV4XSl9ZnVuY3Rpb24gVjJuKCl7cmV0dXJuIEVBKCksaGUobGUobURlLDEpLGl0LDM5MCwwLFtwZGUsYkRlLFNXXSl9ZnVuY3Rpb24gVTJuKCl7cmV0dXJuIHFvKCksaGUobGUoc0V0LDEpLGl0LDQ2MywwLFtzTSwkbCx6dV0pfWZ1bmN0aW9uIEcybigpe3JldHVybiBMVigpLGhlKGxlKE1EZSwxKSxpdCwzODcsMCxbQURlLFRkZSxMRGVdKX1mdW5jdGlvbiBLMm4oKXtyZXR1cm4geUEoKSxoZShsZShERGUsMSksaXQsMzQ5LDAsW1NkZSxDZGUsTUJdKX1mdW5jdGlvbiBXMm4oKXtyZXR1cm4gU0UoKSxoZShsZShPRGUsMSksaXQsMzUwLDAsW19kZSxJRGUsYU1dKX1mdW5jdGlvbiBZMm4oKXtyZXR1cm4gZ1YoKSxoZShsZShCRGUsMSksaXQsMzUyLDAsW1BEZSxBZGUsTkRlXSl9ZnVuY3Rpb24gWDJuKCl7cmV0dXJuIE9WKCksaGUobGUoRkRlLDEpLGl0LDM4OCwwLFtMZGUsWFQsazRdKX1mdW5jdGlvbiBRMm4oKXtyZXR1cm4gSXcoKSxoZShsZShTRXQsMSksaXQsNDY0LDAsW0RCLG9NLE1XXSl9ZnVuY3Rpb24gSTEoZSl7cmV0dXJuIEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbZS5pLm4sZS5uLGUuYV0pKX1mdW5jdGlvbiBKMm4oKXtyZXR1cm4geEEoKSxoZShsZShlSWUsMSksaXQsMzkyLDAsW1pEZSxJZGUsT0JdKX1mdW5jdGlvbiBqb3QoKXtqb3Q9VSxGVHQ9eWwobmV3IFhzLCh3eCgpLGhNKSwoV0EoKSxWRGUpKX1mdW5jdGlvbiBSSCgpe1JIPVUsVWRlPW5ldyBWM2UoIkRGUyIsMCkseEllPW5ldyBWM2UoIkJGUyIsMSl9ZnVuY3Rpb24gJG90KGUsdCxuKXt2YXIgcjtyPW5ldyBodGUsci5iPXQsci5hPW4sKyt0LmIsdnQoZS5kLHIpfWZ1bmN0aW9uIFoybihlLHQsbil7dmFyIHI7cj1uZXcgRW8obi5kKSxPaShyLGUpLGI4ZSh0LHIuYSxyLmIpfWZ1bmN0aW9uIGVibihlLHQpe09udChlLFlyKHZhKGJ3KHQsMjQpLFpVKSksWXIodmEodCxaVSkpKX1mdW5jdGlvbiBFeShlLHQpe2lmKGU8MHx8ZT50KXRocm93IHVlKG5ldyB0YyhkRWUrZStnRWUrdCkpfWZ1bmN0aW9uIFNuKGUsdCl7aWYoZTwwfHxlPj10KXRocm93IHVlKG5ldyB0YyhkRWUrZStnRWUrdCkpfWZ1bmN0aW9uIFhuKGUsdCl7aWYoZTwwfHxlPj10KXRocm93IHVlKG5ldyBlM2UoZEVlK2UrZ0VlK3QpKX1mdW5jdGlvbiBrbihlLHQpe3RoaXMuYj0obnIoZSksZSksdGhpcy5hPXQmWHk/dDp0fDY0fF9kfWZ1bmN0aW9uIEs1ZShlKXt2YXIgdDtyZXR1cm4geGIoZSksdD0oRXcoKSxFdygpLEQwZSksbFYoZSx0KX1mdW5jdGlvbiB0Ym4oZSx0LG4pe3ZhciByO3JldHVybiByPVpBKGUsdCwhMSksci5iPD10JiZyLmE8PW59ZnVuY3Rpb24gbmJuKCl7cmV0dXJuIHRWKCksaGUobGUocE9lLDEpLGl0LDQzOSwwLFtnZ2UsZ09lLGRPZV0pfWZ1bmN0aW9uIHJibigpe3JldHVybiBxVigpLGhlKGxlKFhJZSwxKSxpdCwzOTQsMCxbWUllLHVnZSxXSWVdKX1mdW5jdGlvbiBpYm4oKXtyZXR1cm4gV1YoKSxoZShsZShLSWUsMSksaXQsNDQ1LDAsW1JCLFZXLHJnZV0pfWZ1bmN0aW9uIHNibigpe3JldHVybiBzVSgpLGhlKGxlKGdDdCwxKSxpdCw0NTYsMCxbaWdlLGFnZSxzZ2VdKX1mdW5jdGlvbiBhYm4oKXtyZXR1cm4gTE4oKSxoZShsZShBSWUsMSksaXQsMzkzLDAsW3pXLFNJZSxfSWVdKX1mdW5jdGlvbiBvYm4oKXtyZXR1cm4gQVYoKSxoZShsZShHSWUsMSksaXQsMzAwLDAsW25nZSxVSWUsVkllXSl9ZnVuY3Rpb24gY2JuKCl7cmV0dXJuIHJwKCksaGUobGUoWU5lLDEpLGl0LDM0NiwwLFtvWSxBMixETV0pfWZ1bmN0aW9uIHVibigpe3JldHVybiBQTigpLGhlKGxlKHBnZSwxKSxpdCw0NDQsMCxbV1csWVcsWFddKX1mdW5jdGlvbiBsYm4oKXtyZXR1cm4gRjEoKSxoZShsZShGTmUsMSksaXQsMjc4LDAsW25DLF80LHJDXSl9ZnVuY3Rpb24gaGJuKCl7cmV0dXJuIGR4KCksaGUobGUoblBlLDEpLGl0LDI4MCwwLFt0UGUsTDQsZFldKX1mdW5jdGlvbiBfdyhlKXtyZXR1cm4gWHIoZSksRGUoZSwxNik/bmV3IE9sKGwoZSwxNikpOiRrKGUuS2MoKSl9ZnVuY3Rpb24gVzVlKGUsdCl7cmV0dXJuIGUmJmUuZXF1YWxzP2UuZXF1YWxzKHQpOnFlKGUpPT09cWUodCl9ZnVuY3Rpb24gdmEoZSx0KXtyZXR1cm4gbWIocmduKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIFEwKGUsdCl7cmV0dXJuIG1iKGlnbih3YyhlKT9NZihlKTplLHdjKHQpP01mKHQpOnQpKX1mdW5jdGlvbiBtb2UoZSx0KXtyZXR1cm4gbWIoc2duKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIGZibihlLHQpe3ZhciBuO3JldHVybiBuPShucihlKSxlKS5nLHF5ZSghIW4pLG5yKHQpLG4odCl9ZnVuY3Rpb24gem90KGUsdCl7dmFyIG4scjtyZXR1cm4gcj1IayhlLHQpLG49ZS5hLmZkKHIpLG5ldyBWWmUoZSxuKX1mdW5jdGlvbiBkYm4oZSl7cmV0dXJuIGUuRGI+PjE2IT02P251bGw6bChVdWUoZSksMjQxKX1mdW5jdGlvbiBnYm4oZSl7aWYoZS5wIT0yKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuZikmWnN9ZnVuY3Rpb24gcGJuKGUpe2lmKGUucCE9Mil0aHJvdyB1ZShuZXcgcGwpO3JldHVybiBZcihlLmspJlpzfWZ1bmN0aW9uIHJlKGUpe3JldHVybiBtcihlLmE8ZS5jLmMubGVuZ3RoKSxlLmI9ZS5hKyssZS5jLmNbZS5iXX1mdW5jdGlvbiBiYm4oZSx0KXtlLmI9ZS5ifHQuYixlLmM9ZS5jfHQuYyxlLmQ9ZS5kfHQuZCxlLmE9ZS5hfHQuYX1mdW5jdGlvbiBtYm4oZSx0KXt2YXIgbjtuPXplKEdlKGUuYS5vZigocGkoKSxpWSkpKSksbnd0KGUsdCxuKX1mdW5jdGlvbiBxb3QoZSx0KXtJbS5jYWxsKHRoaXMsMSwyLGhlKGxlKFZyLDEpLGRpLDI4LDE1LFtlLHRdKSl9ZnVuY3Rpb24gSG90KGUsdCxuKXtYdi5jYWxsKHRoaXMsMjUpLHRoaXMuYj1lLHRoaXMuYT10LHRoaXMuYz1ufWZ1bmN0aW9uIF9oKGUpe0RpKCksWHYuY2FsbCh0aGlzLGUpLHRoaXMuYz0hMSx0aGlzLmE9ITF9ZnVuY3Rpb24gdmJuKGUpe3JldHVybiBlLmE9PShlRSgpLF9ZKSYmdXQoZSxJU24oZS5nLGUuYikpLGUuYX1mdW5jdGlvbiByeChlKXtyZXR1cm4gZS5kPT0oZUUoKSxfWSkmJlR0KGUsREFuKGUuZyxlLmIpKSxlLmR9ZnVuY3Rpb24gd2JuKGUsdCl7cmV0dXJuIGhBKCksZS5jPT10LmM/WWkodC5kLGUuZCk6WWkodC5jLGUuYyl9ZnVuY3Rpb24geWJuKGUsdCl7cmV0dXJuIGhBKCksZS5jPT10LmM/WWkodC5kLGUuZCk6WWkoZS5jLHQuYyl9ZnVuY3Rpb24geGJuKGUsdCl7cmV0dXJuIGhBKCksZS5jPT10LmM/WWkoZS5kLHQuZCk6WWkoZS5jLHQuYyl9ZnVuY3Rpb24ga2JuKGUsdCl7cmV0dXJuIGhBKCksZS5jPT10LmM/WWkoZS5kLHQuZCk6WWkodC5jLGUuYyl9ZnVuY3Rpb24gWTVlKGUsdCl7cmV0dXJuIGZzdChlLmEsdCk/UjRlKGUuYixsKHQsMjIpLmcsbnVsbCk6bnVsbH1mdW5jdGlvbiBFYm4oZSl7cmV0dXJuIGJvKGwwKFpjKEpsKGUsMzIpKSwzMiksWmMoSmwoZSwzMikpKX1mdW5jdGlvbiBYNWUoZSl7cmV0dXJuIGUuYj09bnVsbHx8ZS5iLmxlbmd0aD09MD8ibl8iK2UuYToibl8iK2UuYn1mdW5jdGlvbiBCbShlKXtyZXR1cm4gZS5jPT1udWxsfHxlLmMubGVuZ3RoPT0wPyJuXyIrZS5nOiJuXyIrZS5jfWZ1bmN0aW9uIFZvdChlLHQpe3ZhciBuO2ZvcihuPWUrIiI7bi5sZW5ndGg8dDspbj0iMCIrbjtyZXR1cm4gbn1mdW5jdGlvbiBUYm4oZSx0KXt2YXIgbjtuPWwoY3IoZS5nLHQpLDYwKSxWdSh0LmQsbmV3IFJldChlLG4pKX1mdW5jdGlvbiBDYm4oZSx0KXt2YXIgbixyO3JldHVybiBuPUtkdChlKSxyPUtkdCh0KSxuPHI/LTE6bj5yPzE6MH1mdW5jdGlvbiBVb3QoZSx0KXt2YXIgbixyO3JldHVybiBuPSRvZSh0KSxyPW4sbChjcihlLmMsciksMTcpLmF9ZnVuY3Rpb24gdm9lKGUsdCxuKXt2YXIgcjtyPWUuZFt0LnBdLGUuZFt0LnBdPWUuZFtuLnBdLGUuZFtuLnBdPXJ9ZnVuY3Rpb24gU2JuKGUsdCxuKXt2YXIgcjtlLm4mJnQmJm4mJihyPW5ldyBLbmUsdnQoZS5lLHIpKX1mdW5jdGlvbiB3b2UoZSx0KXtpZihuYShlLmEsdCksdC5kKXRocm93IHVlKG5ldyBBYyhlM3QpKTt0LmQ9ZX1mdW5jdGlvbiBRNWUoZSx0KXt0aGlzLmE9bmV3IGJ0LHRoaXMuZD1uZXcgYnQsdGhpcy5mPWUsdGhpcy5jPXR9ZnVuY3Rpb24gR290KCl7dGhpcy5jPW5ldyBMbnQsdGhpcy5hPW5ldyBQdXQsdGhpcy5iPW5ldyBVUWUsdWV0KCl9ZnVuY3Rpb24gS290KCl7aHgoKSx0aGlzLmI9bmV3IFByLHRoaXMuYT1uZXcgUHIsdGhpcy5jPW5ldyBidH1mdW5jdGlvbiBXb3QoZSx0LG4pe3RoaXMuZD1lLHRoaXMuaj10LHRoaXMuZT1uLHRoaXMubz0tMSx0aGlzLnA9M31mdW5jdGlvbiBZb3QoZSx0LG4pe3RoaXMuZD1lLHRoaXMuaz10LHRoaXMuZj1uLHRoaXMubz0tMSx0aGlzLnA9NX1mdW5jdGlvbiBYb3QoZSx0LG4scixhLG8pe1E2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBRb3QoZSx0LG4scixhLG8pe0o2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBKb3QoZSx0LG4scixhLG8pe3A2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBab3QoZSx0LG4scixhLG8pe3Q3ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBlY3QoZSx0LG4scixhLG8pe2I2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiB0Y3QoZSx0LG4scixhLG8pe1o2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBuY3QoZSx0LG4scixhLG8pe2U3ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiByY3QoZSx0LG4scixhLG8pe202ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBpY3QoZSx0LG4scil7TnouY2FsbCh0aGlzLG4pLHRoaXMuYj1lLHRoaXMuYz10LHRoaXMuZD1yfWZ1bmN0aW9uIHNjdChlLHQpe3RoaXMuZj1lLHRoaXMuYT0oZUUoKSxTWSksdGhpcy5jPVNZLHRoaXMuYj10fWZ1bmN0aW9uIGFjdChlLHQpe3RoaXMuZz1lLHRoaXMuZD0oZUUoKSxfWSksdGhpcy5hPV9ZLHRoaXMuYj10fWZ1bmN0aW9uIEo1ZShlLHQpeyFlLmMmJihlLmM9bmV3IExzKGUsMCkpLEhVKGUuYywoR2koKSxITSksdCl9ZnVuY3Rpb24gX2JuKGUsdCl7cmV0dXJuIHVUbihlLHQsRGUodCwxMDIpJiYobCh0LDE5KS5CYiZJbykhPTApfWZ1bmN0aW9uIEFibihlLHQpe3JldHVybiAkc3QoWmMoZS5xLmdldFRpbWUoKSksWmModC5xLmdldFRpbWUoKSkpfWZ1bmN0aW9uIG9jdChlKXtyZXR1cm4gQ2FlKGUuZS5SZCgpLmdjKCkqZS5jLlJkKCkuZ2MoKSwxNixuZXcgcGllKGUpKX1mdW5jdGlvbiBMYm4oZSl7cmV0dXJuISFlLnUmJmR1KGUudS5hKS5pIT0wJiYhKGUubiYmY3VlKGUubikpfWZ1bmN0aW9uIE1ibihlKXtyZXR1cm4hIWUuYSYmWGwoZS5hLmEpLmkhPTAmJiEoZS5iJiZ1dWUoZS5iKSl9ZnVuY3Rpb24gWjVlKGUsdCl7cmV0dXJuIHQ9PTA/ISFlLm8mJmUuby5mIT0wOm51ZShlLHQpfWZ1bmN0aW9uIERibihlLHQsbil7dmFyIHI7cmV0dXJuIHI9bChlLlpiKCkueGModCksMTYpLCEhciYmci5IYyhuKX1mdW5jdGlvbiBjY3QoZSx0LG4pe3ZhciByO3JldHVybiByPWwoZS5aYigpLnhjKHQpLDE2KSwhIXImJnIuTWMobil9ZnVuY3Rpb24gdWN0KGUsdCl7dmFyIG47cmV0dXJuIG49MS10LGUuYVtuXT1FVihlLmFbbl0sbiksRVYoZSx0KX1mdW5jdGlvbiBsY3QoZSx0KXt2YXIgbixyO3JldHVybiByPXZhKGUsVm8pLG49bDAodCwzMiksUTAobixyKX1mdW5jdGlvbiBoY3QoZSx0LG4pe3ZhciByO3I9KFhyKGUpLG5ldyBPbChlKSksTzduKG5ldyBFb3Qocix0LG4pKX1mdW5jdGlvbiBRTyhlLHQsbil7dmFyIHI7cj0oWHIoZSksbmV3IE9sKGUpKSxON24obmV3IFRvdChyLHQsbikpfWZ1bmN0aW9uIHpjKGUsdCxuLHIsYSxvKXtyZXR1cm4gcWZ0KGUsdCxuLG8pLGM4ZShlLHIpLHU4ZShlLGEpLGV9ZnVuY3Rpb24gZmN0KGUsdCxuLHIpe3JldHVybiBlLmErPSIiK3RmKHQ9PW51bGw/dWw6eGModCksbixyKSxlfWZ1bmN0aW9uIFVhKGUsdCl7dGhpcy5hPWUsa3IuY2FsbCh0aGlzLGUpLEV5KHQsZS5nYygpKSx0aGlzLmI9dH1mdW5jdGlvbiBkY3QoZSl7dGhpcy5hPVdlKHdhLFJuLDEsUDdlKGIuTWF0aC5tYXgoOCxlKSk8PDEsNSwxKX1mdW5jdGlvbiBKTyhlKXtyZXR1cm4gbChqMShlLFdlKHdnLG0yLDEwLGUuYy5sZW5ndGgsMCwxKSksMTk5KX1mdW5jdGlvbiBrZChlKXtyZXR1cm4gbChqMShlLFdlKHUxZSxCaGUsMTgsZS5jLmxlbmd0aCwwLDEpKSw0ODMpfWZ1bmN0aW9uIGdjdChlKXtyZXR1cm4gZS5hP2UuZS5sZW5ndGg9PTA/ZS5hLmE6ZS5hLmErKCIiK2UuZSk6ZS5jfWZ1bmN0aW9uIGlBKGUpe2Zvcig7ZS5kPjAmJmUuYVstLWUuZF09PTA7KTtlLmFbZS5kKytdPT0wJiYoZS5lPTApfWZ1bmN0aW9uIHBjdChlKXtyZXR1cm4gbXIoZS5iLmIhPWUuZC5hKSxlLmM9ZS5iPWUuYi5iLC0tZS5hLGUuYy5jfWZ1bmN0aW9uIElibihlLHQsbil7ZS5hPXQsZS5jPW4sZS5iLmEuJGIoKSxDaChlLmQpLGF5KGUuZS5hLmMsMCl9ZnVuY3Rpb24gYmN0KGUsdCl7dmFyIG47ZS5lPW5ldyBWd2Usbj1IeSh0KSxWcyhuLGUuYyksTWJ0KGUsbiwwKX1mdW5jdGlvbiBRcyhlLHQsbixyKXt2YXIgYTthPW5ldyBKOSxhLmE9dCxhLmI9bixhLmM9cix1aShlLmEsYSl9ZnVuY3Rpb24gZ3QoZSx0LG4scil7dmFyIGE7YT1uZXcgSjksYS5hPXQsYS5iPW4sYS5jPXIsdWkoZS5iLGEpfWZ1bmN0aW9uIG1jdChlLHQsbil7aWYoZTwwfHx0PGV8fHQ+bil0aHJvdyB1ZShuZXcgdGMoVTluKGUsdCxuKSkpfWZ1bmN0aW9uIFpPKGUsdCl7aWYoZTwwfHxlPj10KXRocm93IHVlKG5ldyB0Yyhra24oZSx0KSkpO3JldHVybiBlfWZ1bmN0aW9uIE9ibihlKXtpZighKCJzdGFjayJpbiBlKSl0cnl7dGhyb3cgZX1jYXRjaHt9cmV0dXJuIGV9ZnVuY3Rpb24gRzUoZSl7cmV0dXJuIHBfKCksRGUoZS5nLDEwKT9sKGUuZywxMCk6bnVsbH1mdW5jdGlvbiBOYm4oZSl7cmV0dXJuIFY1KGUpLmRjKCk/ITE6KHJobihlLG5ldyBvZSksITApfWZ1bmN0aW9uIEZtKGUpe3ZhciB0O3JldHVybiB3YyhlKT8odD1lLHQ9PS0wPzA6dCk6WXZuKGUpfWZ1bmN0aW9uIHZjdChlLHQpe3JldHVybiBEZSh0LDQ0KT9ndWUoZS5hLGwodCw0NCkpOiExfWZ1bmN0aW9uIHdjdChlLHQpe3JldHVybiBEZSh0LDQ0KT9ndWUoZS5hLGwodCw0NCkpOiExfWZ1bmN0aW9uIHljdChlLHQpe3JldHVybiBEZSh0LDQ0KT9ndWUoZS5hLGwodCw0NCkpOiExfWZ1bmN0aW9uIGU2ZShlKXt2YXIgdDtyZXR1cm4gZmIoZSksdD1uZXcgTmUsQTUoZS5hLG5ldyB4NSh0KSksdH1mdW5jdGlvbiB0NmUoKXt2YXIgZSx0LG47cmV0dXJuIHQ9KG49KGU9bmV3IFF2LGUpLG4pLHZ0KFJQZSx0KSx0fWZ1bmN0aW9uIGpIKGUpe3ZhciB0O3JldHVybiBmYihlKSx0PW5ldyBnbixBNShlLmEsbmV3IFQ4KHQpKSx0fWZ1bmN0aW9uIFBibihlLHQpe3JldHVybiBlLmE8PWUuYj8odC5EZChlLmErKyksITApOiExfWZ1bmN0aW9uIHhjdChlKXtvY2UuY2FsbCh0aGlzLGUsKHJFKCksTzBlKSxudWxsLCExLG51bGwsITEpfWZ1bmN0aW9uIGtjdCgpe2tjdD1VLEE3dD1LcigoWnooKSxoZShsZShVX2UsMSksaXQsNDg5LDAsW0cwZV0pKSl9ZnVuY3Rpb24gRWN0KCl7RWN0PVUsakRlPXBhdChwdCgxKSxwdCg0KSksUkRlPXBhdChwdCgxKSxwdCgyKSl9ZnVuY3Rpb24gQmJuKGUsdCl7cmV0dXJuIG5ldyB3YWUodCx6XyhKYSh0LmUpLGUsZSksKEhuKCksITApKX1mdW5jdGlvbiAkSChlKXtyZXR1cm4gbmV3IEJ1KChNaChlLEZsZSksY1YoYm8oYm8oNSxlKSxlLzEwfDApKSkpfWZ1bmN0aW9uIEZibihlKXtyZXR1cm4gQ2FlKGUuZS5SZCgpLmdjKCkqZS5jLlJkKCkuZ2MoKSwyNzMsbmV3IGdpZShlKSl9ZnVuY3Rpb24gVGN0KGUpe3JldHVybiBsKGoxKGUsV2UoRjh0LEkzdCwxMixlLmMubGVuZ3RoLDAsMSkpLDIwNDIpfWZ1bmN0aW9uIFJibihlKXtyZXR1cm4gU2goKSwhRG8oZSkmJiEoIURvKGUpJiZlLmMuaS5jPT1lLmQuaS5jKX1mdW5jdGlvbiBqYm4oZSx0KXtyZXR1cm4gdXgoKSxsKFEodCwoSGMoKSxXNikpLDE3KS5hPj1lLmdjKCl9ZnVuY3Rpb24gc0EoZSx0KXt4SW4odCxlKSxONGUoZS5kKSxONGUobChRKGUsKE50KCksd1cpKSwyMTQpKX1mdW5jdGlvbiB5b2UoZSx0KXtrSW4odCxlKSxQNGUoZS5kKSxQNGUobChRKGUsKE50KCksd1cpKSwyMTQpKX1mdW5jdGlvbiAkYm4oZSx0LG4pe2UuZCYmYWwoZS5kLmUsZSksZS5kPXQsZS5kJiZwdyhlLmQuZSxuLGUpfWZ1bmN0aW9uIHpibihlLHQsbil7cmV0dXJuIG4uZi5jLmxlbmd0aD4wP3U1ZShlLmEsdCxuKTp1NWUoZS5iLHQsbil9ZnVuY3Rpb24gcWJuKGUsdCxuKXt2YXIgcjtyPXM2bigpO3RyeXtyZXR1cm4gTGZuKGUsdCxuKX1maW5hbGx5e05tbihyKX19ZnVuY3Rpb24gQXcoZSx0KXt2YXIgbixyO3JldHVybiBuPVdnKGUsdCkscj1udWxsLG4mJihyPW4ucGUoKSkscn1mdW5jdGlvbiBhQShlLHQpe3ZhciBuLHI7cmV0dXJuIG49V2coZSx0KSxyPW51bGwsbiYmKHI9bi5zZSgpKSxyfWZ1bmN0aW9uIEprKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1feShlLHQpLHI9bnVsbCxuJiYocj1uLnNlKCkpLHJ9ZnVuY3Rpb24gWWcoZSx0KXt2YXIgbixyO3JldHVybiBuPVdnKGUsdCkscj1udWxsLG4mJihyPWU5ZShuKSkscn1mdW5jdGlvbiBIYm4oZSx0LG4pe3ZhciByO3JldHVybiByPU5FKG4pLFJVKGUuZyxyLHQpLFJVKGUuaSx0LG4pLHR9ZnVuY3Rpb24gbjZlKGUsdCxuKXt0aGlzLmQ9bmV3IE9ZZSh0aGlzKSx0aGlzLmU9ZSx0aGlzLmk9dCx0aGlzLmY9bn1mdW5jdGlvbiBDY3QoZSx0LG4scil7dGhpcy5lPW51bGwsdGhpcy5jPWUsdGhpcy5kPXQsdGhpcy5hPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gU2N0KGUsdCxuLHIpe0VudCh0aGlzKSx0aGlzLmM9ZSx0aGlzLmU9dCx0aGlzLmY9bix0aGlzLmI9cn1mdW5jdGlvbiByNmUoZSx0LG4scil7dGhpcy5kPWUsdGhpcy5uPXQsdGhpcy5nPW4sdGhpcy5vPXIsdGhpcy5wPS0xfWZ1bmN0aW9uIF9jdChlLHQsbixyKXtyZXR1cm4gRGUobiw1OSk/bmV3IHJydChlLHQsbixyKTpuZXcgcjVlKGUsdCxuLHIpfWZ1bmN0aW9uIFprKGUpe3JldHVybiBEZShlLDE2KT9sKGUsMTYpLmRjKCk6IWUuS2MoKS5PYigpfWZ1bmN0aW9uIEFjdChlKXtpZihlLmUuZyE9ZS5iKXRocm93IHVlKG5ldyBYaCk7cmV0dXJuISFlLmMmJmUuZD4wfWZ1bmN0aW9uIEJyKGUpe3JldHVybiBtcihlLmIhPWUuZC5jKSxlLmM9ZS5iLGUuYj1lLmIuYSwrK2UuYSxlLmMuY31mdW5jdGlvbiBpNmUoZSx0KXtucih0KSxUcyhlLmEsZS5jLHQpLGUuYz1lLmMrMSZlLmEubGVuZ3RoLTEsWGR0KGUpfWZ1bmN0aW9uIGdiKGUsdCl7bnIodCksZS5iPWUuYi0xJmUuYS5sZW5ndGgtMSxUcyhlLmEsZS5iLHQpLFhkdChlKX1mdW5jdGlvbiBMY3QoZSl7dmFyIHQ7dD1lLkdoKCksdGhpcy5hPURlKHQsNzEpP2wodCw3MSkuSWkoKTp0LktjKCl9ZnVuY3Rpb24gVmJuKGUpe3JldHVybiBuZXcga24oTHduKGwoZS5hLm1kKCksMTYpLmdjKCksZS5hLmxkKCkpLDE2KX1mdW5jdGlvbiBNY3QoKXtNY3Q9VSxVQ3Q9S3IoKG5xKCksaGUobGUod09lLDEpLGl0LDQ5MCwwLFtiZ2VdKSkpfWZ1bmN0aW9uIERjdCgpe0RjdD1VLEtDdD1LcigocnEoKSxoZShsZShHQ3QsMSksaXQsNTU4LDAsW21nZV0pKSl9ZnVuY3Rpb24gSWN0KCl7SWN0PVUsaFN0PUtyKChiXygpLGhlKGxlKCRPZSwxKSxpdCw1MzksMCxbcUJdKSkpfWZ1bmN0aW9uIFVibigpe3JldHVybiBLbSgpLGhlKGxlKG1BZSwxKSxpdCwzODksMCxbYzQsYkFlLG8xZSxjMWVdKX1mdW5jdGlvbiBHYm4oKXtyZXR1cm4gckUoKSxoZShsZShmSywxKSxpdCwzMDQsMCxbTzBlLE4wZSxQMGUsQjBlXSl9ZnVuY3Rpb24gS2JuKCl7cmV0dXJuIGJ4KCksaGUobGUoRTd0LDEpLGl0LDMzMiwwLFthQixzQixvQixjQl0pfWZ1bmN0aW9uIFdibigpe3JldHVybiBOQSgpLGhlKGxlKFM3dCwxKSxpdCw0MDYsMCxbdUIsYkssbUssbEJdKX1mdW5jdGlvbiBZYm4oKXtyZXR1cm4gUHcoKSxoZShsZSh4N3QsMSksaXQsNDE3LDAsW2lCLHJCLFYwZSxVMGVdKX1mdW5jdGlvbiBYYm4oKXtyZXR1cm4gd0UoKSxoZShsZShDOHQsMSksaXQsNDE2LDAsW3MzLG80LGE0LE02XSl9ZnVuY3Rpb24gUWJuKCl7cmV0dXJuIFIxKCksaGUobGUodHh0LDEpLGl0LDQyMSwwLFtWeCxNVCxEVCxiMWVdKX1mdW5jdGlvbiBKYm4oKXtyZXR1cm4gSVYoKSxoZShsZShWOHQsMSksaXQsMzcxLDAsW3AxZSxISyxWSyxwQl0pfWZ1bmN0aW9uIFpibigpe3JldHVybiBCeSgpLGhlKGxlKG1kZSwxKSxpdCwyMDMsMCxbX1csYmRlLEc2LFU2XSl9ZnVuY3Rpb24gZW1uKCl7cmV0dXJuIEVkKCksaGUobGUoU0RlLDEpLGl0LDI4NCwwLFtFMixDRGUseWRlLHhkZV0pfWZ1bmN0aW9uIHRtbihlKXt2YXIgdDtyZXR1cm4gZS5qPT0oQ3QoKSxEcikmJih0PXYydChlKSx2bCh0LGFyKSl9ZnVuY3Rpb24gbm1uKGUsdCl7dmFyIG47bj10LmEscG8obix0LmMuZCksRmEobix0LmQuZCksRHkobi5hLGUubil9ZnVuY3Rpb24gczZlKGUsdCl7dmFyIG47cmV0dXJuIG49bChCMShlLmIsdCksNjcpLCFuJiYobj1uZXcgb3MpLG59ZnVuY3Rpb24gaXgoZSl7cmV0dXJuIHBfKCksRGUoZS5nLDE1NCk/bChlLmcsMTU0KTpudWxsfWZ1bmN0aW9uIHJtbihlKXtlLmE9bnVsbCxlLmU9bnVsbCxheShlLmIuYywwKSxheShlLmYuYywwKSxlLmM9bnVsbH1mdW5jdGlvbiB6SCgpe3pIPVUsejFlPW5ldyBGM2UoY1QsMCksTkxlPW5ldyBGM2UoIlRPUF9MRUZUIiwxKX1mdW5jdGlvbiBvQSgpe29BPVUsdU09bmV3IGozZSgiVVBQRVIiLDApLGNNPW5ldyBqM2UoIkxPV0VSIiwxKX1mdW5jdGlvbiBpbW4oZSx0KXtyZXR1cm4gejgobmV3IGx0KHQuZS5hK3QuZi5hLzIsdC5lLmIrdC5mLmIvMiksZSl9ZnVuY3Rpb24gT2N0KGUsdCl7cmV0dXJuIGwoZmgodnkobCgkaShlLmssdCksMTUpLk9jKCksSTYpKSwxMTMpfWZ1bmN0aW9uIE5jdChlLHQpe3JldHVybiBsKGZoKFk4KGwoJGkoZS5rLHQpLDE1KS5PYygpLEk2KSksMTEzKX1mdW5jdGlvbiBzbW4oKXtyZXR1cm4gd3goKSxoZShsZShxRGUsMSksaXQsNDA1LDAsW05XLGxNLGhNLGZNXSl9ZnVuY3Rpb24gYW1uKCl7cmV0dXJuIGtBKCksaGUobGUoeUllLDEpLGl0LDM1MywwLFtWZGUsalcsSGRlLHFkZV0pfWZ1bmN0aW9uIG9tbigpe3JldHVybiB1VSgpLGhlKGxlKEhJZSwxKSxpdCwzNTQsMCxbdGdlLHpJZSxxSWUsJEllXSl9ZnVuY3Rpb24gY21uKCl7cmV0dXJuIG1oKCksaGUobGUoQk0sMSksaXQsMzg2LDAsW2lGLEN2LHJGLEE0XSl9ZnVuY3Rpb24gdW1uKCl7cmV0dXJuIEloKCksaGUobGUoSlN0LDEpLGl0LDI5MSwwLFtlRixrZyxHYixaQl0pfWZ1bmN0aW9uIGxtbigpe3JldHVybiBpcCgpLGhlKGxlKFZnZSwxKSxpdCwyMjMsMCxbSGdlLEpCLGlDLHM5XSl9ZnVuY3Rpb24gaG1uKCl7cmV0dXJuIFZWKCksaGUobGUoY1BlLDEpLGl0LDMyMCwwLFtLZ2Usc1BlLG9QZSxhUGVdKX1mdW5jdGlvbiBmbW4oKXtyZXR1cm4gTlYoKSxoZShsZShwX3QsMSksaXQsNDE1LDAsW1dnZSxsUGUsdVBlLGhQZV0pfWZ1bmN0aW9uIGRtbihlKXtyZXR1cm4gQkgoKSxIdShaZ2UsZSk/bChjcihaZ2UsZSksMzQxKS5RZygpOm51bGx9ZnVuY3Rpb24gbmYoZSx0LG4pe3JldHVybiB0PDA/cXVlKGUsbik6bChuLDY5KS53aygpLkJrKGUsZS5oaSgpLHQpfWZ1bmN0aW9uIGdtbihlLHQsbil7dmFyIHI7cmV0dXJuIHI9TkUobiksUlUoZS5qLHIsdCksa2koZS5rLHQsbiksdH1mdW5jdGlvbiBwbW4oZSx0LG4pe3ZhciByO3JldHVybiByPU5FKG4pLFJVKGUuZCxyLHQpLGtpKGUuZSx0LG4pLHR9ZnVuY3Rpb24gUGN0KGUpe3ZhciB0LG47cmV0dXJuIHQ9KHJiKCksbj1uZXcgVEksbiksZSYmQVUodCxlKSx0fWZ1bmN0aW9uIGE2ZShlKXt2YXIgdDtyZXR1cm4gdD1lLmFqKGUuaSksZS5pPjAmJnB1KGUuZywwLHQsMCxlLmkpLHR9ZnVuY3Rpb24gQmN0KGUsdCl7dmFyIG47Zm9yKG49ZS5qLmMubGVuZ3RoO248dDtuKyspdnQoZS5qLGUuTmcoKSl9ZnVuY3Rpb24gRmN0KGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPXJbdC5nXVtuLmddLHplKEdlKFEoZS5hLGEpKSl9ZnVuY3Rpb24gUmN0KGUsdCl7aXEoKTt2YXIgbjtyZXR1cm4gbj1sKGNyKGtZLGUpLDU3KSwhbnx8bi5mayh0KX1mdW5jdGlvbiBibW4oZSl7aWYoZS5wIT0xKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuZik8PDI0Pj4yNH1mdW5jdGlvbiBtbW4oZSl7aWYoZS5wIT0xKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuayk8PDI0Pj4yNH1mdW5jdGlvbiB2bW4oZSl7aWYoZS5wIT03KXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuayk8PDE2Pj4xNn1mdW5jdGlvbiB3bW4oZSl7aWYoZS5wIT03KXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuZik8PDE2Pj4xNn1mdW5jdGlvbiBLNShlLHQpe3JldHVybiB0LmU9PTB8fGUuZT09MD9CTDooR0UoKSxRdWUoZSx0KSl9ZnVuY3Rpb24gamN0KGUsdCl7cmV0dXJuIHFlKHQpPT09cWUoZSk/Iih0aGlzIE1hcCkiOnQ9PW51bGw/dWw6eGModCl9ZnVuY3Rpb24geW1uKGUsdCxuKXtyZXR1cm4gTmFlKEdlKGhjKHpvKGUuZix0KSkpLEdlKGhjKHpvKGUuZixuKSkpKX1mdW5jdGlvbiB4bW4oZSx0LG4pe3ZhciByO3I9bChjcihlLmcsbiksNjApLHZ0KGUuYS5jLG5ldyBjYSh0LHIpKX1mdW5jdGlvbiAkY3QoZSx0LG4pe2UuaT0wLGUuZT0wLHQhPW4mJihrMHQoZSx0LG4pLHgwdChlLHQsbikpfWZ1bmN0aW9uIGttbihlLHQsbixyLGEpe3ZhciBvO289RVRuKGEsbixyKSx2dCh0LHBrbihhLG8pKSxhOW4oZSxhLHQpfWZ1bmN0aW9uIG82ZShlLHQsbixyLGEpe3RoaXMuaT1lLHRoaXMuYT10LHRoaXMuZT1uLHRoaXMuaj1yLHRoaXMuZj1hfWZ1bmN0aW9uIHpjdChlLHQpe1I1ZS5jYWxsKHRoaXMpLHRoaXMuYT1lLHRoaXMuYj10LHZ0KHRoaXMuYS5iLHRoaXMpfWZ1bmN0aW9uIHFjdChlKXt0aGlzLmI9bmV3IFByLHRoaXMuYz1uZXcgUHIsdGhpcy5kPW5ldyBQcix0aGlzLmE9ZX1mdW5jdGlvbiBIY3QoZSx0KXt2YXIgbjtyZXR1cm4gbj1uZXcgUzUsZS5HZChuKSxuLmErPSIuLiIsdC5IZChuKSxuLmF9ZnVuY3Rpb24gVmN0KGUsdCl7dmFyIG47Zm9yKG49dDtuOylkdyhlLG4uaSxuLmopLG49ZHMobik7cmV0dXJuIGV9ZnVuY3Rpb24gVWN0KGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1ORShuKSxraShlLmIscix0KSxraShlLmMsdCxuKSx0fWZ1bmN0aW9uIFhnKGUpe3ZhciB0O2Zvcih0PTA7ZS5PYigpOyllLlBiKCksdD1ibyh0LDEpO3JldHVybiBjVih0KX1mdW5jdGlvbiBzZyhlLHQpe0ZvKCk7dmFyIG47cmV0dXJuIG49bChlLDY5KS52aygpLGs5bihuLHQpLG4ueGwodCl9ZnVuY3Rpb24gRW1uKGUsdCxuKXtpZihuKXt2YXIgcj1uLm9lKCk7ZS5hW3RdPXIobil9ZWxzZSBkZWxldGUgZS5hW3RdfWZ1bmN0aW9uIGM2ZShlLHQpe3ZhciBuO249ZS5xLmdldEhvdXJzKCksZS5xLnNldEZ1bGxZZWFyKHQrTGIpLFhBKGUsbil9ZnVuY3Rpb24gVG1uKGUsdCl7cmV0dXJuIGwodD09bnVsbD9oYyh6byhlLmYsbnVsbCkpOnlfKGUuaSx0KSwyODgpfWZ1bmN0aW9uIHU2ZShlLHQpe3JldHVybiBlPT0oWm4oKSxQcykmJnQ9PVBzPzQ6ZT09UHN8fHQ9PVBzPzg6MzJ9ZnVuY3Rpb24gcUgoZSx0LG4pe3JldHVybiAkVShlLHQsbixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCl9ZnVuY3Rpb24gQ21uKGUsdCxuKXtyZXR1cm4gWEUoZSx0LG4sRGUodCwxMDIpJiYobCh0LDE5KS5CYiZJbykhPTApfWZ1bmN0aW9uIFNtbihlLHQsbil7cmV0dXJuIGJUbihlLHQsbixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCl9ZnVuY3Rpb24gbDZlKGUpe2UuYiE9ZS5jJiYoZS5hPVdlKHdhLFJuLDEsOCw1LDEpLGUuYj0wLGUuYz0wKX1mdW5jdGlvbiBjQShlKXtyZXR1cm4gbXIoZS5hPGUuYy5hLmxlbmd0aCksZS5iPWUuYSxyaHQoZSksZS5jLmJbZS5iXX1mdW5jdGlvbiBkdShlKXtyZXR1cm4gZS5ufHwoWWwoZSksZS5uPW5ldyB2c3QoZSxXbyxlKSxkYyhlKSksZS5ufWZ1bmN0aW9uIEdjdChlKXtpZihlPDApdGhyb3cgdWUobmV3IEZKZSgiTmVnYXRpdmUgYXJyYXkgc2l6ZTogIitlKSl9ZnVuY3Rpb24geG9lKGUsdCxuKXtpZihuKXt2YXIgcj1uLm9lKCk7bj1yKG4pfWVsc2Ugbj12b2lkIDA7ZS5hW3RdPW59ZnVuY3Rpb24gS2N0KGUsdCl7VEUoKTt2YXIgbjtyZXR1cm4gbj1lLmouZy10LmouZyxuIT0wP246MH1mdW5jdGlvbiBfbW4oZSx0KXtyZXR1cm4gVmcoKSxxcih0dChlLmEpLHQpfWZ1bmN0aW9uIEFtbihlLHQpe3JldHVybiBWZygpLHFyKHR0KGUuYSksdCl9ZnVuY3Rpb24gUWcoZSx0KXtDZCgpLEltLmNhbGwodGhpcyxlLDEsaGUobGUoVnIsMSksZGksMjgsMTUsW3RdKSl9ZnVuY3Rpb24gVHkoZSx0KXtEaSgpLFh2LmNhbGwodGhpcyxlKSx0aGlzLmE9dCx0aGlzLmM9LTEsdGhpcy5iPS0xfWZ1bmN0aW9uIEN5KGUsdCxuLHIpe1dvdC5jYWxsKHRoaXMsMSxuLHIpLHRoaXMuYz1lLHRoaXMuYj10fWZ1bmN0aW9uIGtvZShlLHQsbixyKXtZb3QuY2FsbCh0aGlzLDEsbixyKSx0aGlzLmM9ZSx0aGlzLmI9dH1mdW5jdGlvbiBFb2UoZSx0LG4scixhLG8sZil7Sm9lLmNhbGwodGhpcyx0LHIsYSxvLGYpLHRoaXMuYz1lLHRoaXMuYT1ufWZ1bmN0aW9uIFJtKGUsdCxuKXt0aGlzLmU9ZSx0aGlzLmE9d2EsdGhpcy5iPVFidCh0KSx0aGlzLmM9dCx0aGlzLmQ9bn1mdW5jdGlvbiBUb2UoZSl7dGhpcy5lPWUsdGhpcy5jPXRoaXMuZS5hLHRoaXMuYj10aGlzLmUuZyx0aGlzLmQ9dGhpcy5lLml9ZnVuY3Rpb24gaDZlKGUpe3RoaXMuZD1lLHRoaXMuYj10aGlzLmQuYS5lbnRyaWVzKCksdGhpcy5hPXRoaXMuYi5uZXh0KCl9ZnVuY3Rpb24gV2N0KGUpe3RoaXMuYz1lLHRoaXMuYT1sKE9mKGUpLDE1NiksdGhpcy5iPXRoaXMuYS5qaygpLndpKCl9ZnVuY3Rpb24gZTIoKXtQci5jYWxsKHRoaXMpLGNydCh0aGlzKSx0aGlzLmQuYj10aGlzLmQsdGhpcy5kLmE9dGhpcy5kfWZ1bmN0aW9uIENzKGUsdCxuLHIpe3ZhciBhO2E9bmV3IF90LGEuYz10LGEuYj1uLGEuYT1yLHIuYj1uLmE9YSwrK2UuYn1mdW5jdGlvbiBMbW4oZSx0KXt2YXIgbjtyZXR1cm4gbj10IT1udWxsP3h1KGUsdCk6aGMoem8oZS5mLHQpKSxNcShuKX1mdW5jdGlvbiBNbW4oZSx0KXt2YXIgbjtyZXR1cm4gbj10IT1udWxsP3h1KGUsdCk6aGMoem8oZS5mLHQpKSxNcShuKX1mdW5jdGlvbiB5YyhlLHQpe3ZhciBuO3JldHVybiB0LmIuS2IoVWx0KGUsdC5jLlhlKCksKG49bmV3IF8xKHQpLG4pKSl9ZnVuY3Rpb24gRG1uKGUsdCl7dmFyIG47cmV0dXJuIEdjdCh0KSxuPWUuc2xpY2UoMCx0KSxuLmxlbmd0aD10LGpvZShuLGUpfWZ1bmN0aW9uIFljdChlLHQpe3ZhciBuO2ZvcihuPTA7bjx0OysrbilUcyhlLG4sbmV3IGxyKGwoZVtuXSw0NCkpKX1mdW5jdGlvbiBJbW4oZSx0KXt2YXIgbjtmb3Iobj1lLmQtMTtuPj0wJiZlLmFbbl09PT10W25dO24tLSk7cmV0dXJuIG48MH1mdW5jdGlvbiBISChlKXt2YXIgdDtyZXR1cm4gZT9uZXcgSzRlKGUpOih0PW5ldyBiZCxzY2UodCxlKSx0KX1mdW5jdGlvbiBPbW4oZSx0KXt2YXIgbixyO3I9ITE7ZG8gbj1oMHQoZSx0KSxyPXJ8bjt3aGlsZShuKTtyZXR1cm4gcn1mdW5jdGlvbiBObW4oZSl7ZSYmYXduKChYd2UoKSxHU2UpKSwtLWFLLGUmJm9LIT0tMSYmKENsbihvSyksb0s9LTEpfWZ1bmN0aW9uIFZIKGUpe1J4ZSgpLE9udCh0aGlzLFlyKHZhKGJ3KGUsMjQpLFpVKSksWXIodmEoZSxaVSkpKX1mdW5jdGlvbiBYY3QoKXtYY3Q9VSxxNnQ9S3IoKFpWKCksaGUobGUoa19lLDEpLGl0LDQzNiwwLFtqMGUseF9lXSkpKX1mdW5jdGlvbiBRY3QoKXtRY3Q9VSxINnQ9S3IoKGFWKCksaGUobGUoVF9lLDEpLGl0LDQzNSwwLFtFX2UsJDBlXSkpKX1mdW5jdGlvbiBKY3QoKXtKY3Q9VSxVN3Q9S3IoKG9WKCksaGUobGUoSl9lLDEpLGl0LDQzMiwwLFtRMGUseUtdKSkpfWZ1bmN0aW9uIFpjdCgpe1pjdD1VLHo4dD1LcigoZEUoKSxoZShsZSgkOHQsMSksaXQsNTE3LDAsW2RCLGgxZV0pKSl9ZnVuY3Rpb24gZXV0KCl7ZXV0PVUsX3h0PUtyKCh6SCgpLGhlKGxlKFBMZSwxKSxpdCw0MjksMCxbejFlLE5MZV0pKSl9ZnVuY3Rpb24gdHV0KCl7dHV0PVUsYnh0PUtyKChwTigpLGhlKGxlKHdMZSwxKSxpdCw0MjgsMCxbWEssdkxlXSkpKX1mdW5jdGlvbiBudXQoKXtudXQ9VSx5eHQ9S3IoKGNOKCksaGUobGUoa0xlLDEpLGl0LDQ4OCwwLFt4TGUsSktdKSkpfWZ1bmN0aW9uIHJ1dCgpe3J1dD1VLGlFdD1LcigoZE4oKSxoZShsZShfRGUsMSksaXQsNDMwLDAsW2tkZSxFZGVdKSkpfWZ1bmN0aW9uIGl1dCgpe2l1dD1VLElFdD1Lcigob0EoKSxoZShsZShERXQsMSksaXQsNTMxLDAsW3VNLGNNXSkpKX1mdW5jdGlvbiBzdXQoKXtzdXQ9VSxmeHQ9S3IoKEpIKCksaGUobGUoaExlLDEpLGl0LDQzMSwwLFtsTGUsUzFlXSkpKX1mdW5jdGlvbiBhdXQoKXthdXQ9VSxCVHQ9S3IoKFJIKCksaGUobGUoa0llLDEpLGl0LDQzMywwLFtVZGUseEllXSkpKX1mdW5jdGlvbiBvdXQoKXtvdXQ9VSx6VHQ9S3IoKGtWKCksaGUobGUoRUllLDEpLGl0LDUwMSwwLFskVyxYNl0pKSl9ZnVuY3Rpb24gY3V0KCl7Y3V0PVUsakV0PUtyKCh4ZCgpLGhlKGxlKFJFdCwxKSxpdCw1MjMsMCxbdzMsVDJdKSkpfWZ1bmN0aW9uIHV1dCgpe3V1dD1VLHpFdD1LcigoRDEoKSxoZShsZSgkRXQsMSksaXQsNTIyLDAsW3d2LFkxXSkpKX1mdW5jdGlvbiBsdXQoKXtsdXQ9VSxuVHQ9S3IoKEowKCksaGUobGUodFR0LDEpLGl0LDUyOCwwLFtFNCxxYl0pKSl9ZnVuY3Rpb24gaHV0KCl7aHV0PVUsdVR0PUtyKChTdygpLGhlKGxlKGNUdCwxKSxpdCw0NjUsMCxbSGIsSzZdKSkpfWZ1bmN0aW9uIGZ1dCgpe2Z1dD1VLFZUdD1LcigoZVYoKSxoZShsZShDSWUsMSksaXQsNDM0LDAsW1RJZSxRZGVdKSkpfWZ1bmN0aW9uIGR1dCgpe2R1dD1VLGpDdD1LcigoR0goKSxoZShsZShmT2UsMSksaXQsNDkxLDAsW2RnZSxoT2VdKSkpfWZ1bmN0aW9uIGd1dCgpe2d1dD1VLHpDdD1LcigoZmNlKCksaGUobGUodk9lLDEpLGl0LDQ5MiwwLFtiT2UsbU9lXSkpKX1mdW5jdGlvbiBwdXQoKXtwdXQ9VSxXQ3Q9S3IoKHJOKCksaGUobGUoeU9lLDEpLGl0LDQzOCwwLFt2Z2UsUVddKSkpfWZ1bmN0aW9uIGJ1dCgpe2J1dD1VLGZTdD1LcigoQ04oKSxoZShsZShxT2UsMSksaXQsNDM3LDAsW1pXLHpPZV0pKSl9ZnVuY3Rpb24gbXV0KCl7bXV0PVUsZl90PUtyKChtYWUoKSxoZShsZShnWSwxKSxpdCwzNDcsMCxbclBlLGlQZV0pKSl9ZnVuY3Rpb24gUG1uKCl7cmV0dXJuIEpzKCksaGUobGUoTE0sMSksaXQsODgsMCxbSjEsdmMsdWMsUTEsd2ZdKX1mdW5jdGlvbiBCbW4oKXtyZXR1cm4gQ3QoKSxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pfWZ1bmN0aW9uIEZtbihlLHQsbil7cmV0dXJuIGwodD09bnVsbD9qdShlLmYsbnVsbCxuKTpCdyhlLmksdCxuKSwyODgpfWZ1bmN0aW9uIFJtbihlKXtyZXR1cm4oZS5rPT0oWm4oKSxQcyl8fGUuaz09VXMpJiZucyhlLChmdCgpLEtMKSl9ZnVuY3Rpb24gQ29lKGUpe3JldHVybiBlLmMmJmUuZD9YNWUoZS5jKSsiLT4iK1g1ZShlLmQpOiJlXyIrZncoZSl9ZnVuY3Rpb24gdG8oZSx0KXt2YXIgbixyO2Zvcihucih0KSxyPWUuS2MoKTtyLk9iKCk7KW49ci5QYigpLHQuQ2Qobil9ZnVuY3Rpb24gam1uKGUsdCl7dmFyIG47bj1uZXcgTTgsTm0obiwieCIsdC5hKSxObShuLCJ5Iix0LmIpLEo4KGUsbil9ZnVuY3Rpb24gJG1uKGUsdCl7dmFyIG47bj1uZXcgTTgsTm0obiwieCIsdC5hKSxObShuLCJ5Iix0LmIpLEo4KGUsbil9ZnVuY3Rpb24gdnV0KGUsdCl7dmFyIG47Zm9yKG49dDtuOylkdyhlLC1uLmksLW4uaiksbj1kcyhuKTtyZXR1cm4gZX1mdW5jdGlvbiBmNmUoZSx0KXt2YXIgbixyO2ZvcihuPXQscj0wO24+MDspcis9ZS5hW25dLG4tPW4mLW47cmV0dXJuIHJ9ZnVuY3Rpb24gcmYoZSx0LG4pe3ZhciByO3JldHVybiByPShTbih0LGUuYy5sZW5ndGgpLGUuY1t0XSksZS5jW3RdPW4scn1mdW5jdGlvbiBkNmUoZSx0LG4pe2UuYS5jLmxlbmd0aD0wLGhNbihlLHQsbiksZS5hLmMubGVuZ3RoPT0wfHxqX24oZSx0KX1mdW5jdGlvbiBlTihlKXtlLmk9MCxhTyhlLmIsbnVsbCksYU8oZS5jLG51bGwpLGUuYT1udWxsLGUuZT1udWxsLCsrZS5nfWZ1bmN0aW9uIFVIKCl7VUg9VSxHMT0hMCxJNnQ9ITEsTzZ0PSExLFA2dD0hMSxONnQ9ITF9ZnVuY3Rpb24gU29lKGUpe1VIKCksIUcxJiYodGhpcy5jPWUsdGhpcy5lPSEwLHRoaXMuYT1uZXcgYnQpfWZ1bmN0aW9uIHd1dChlLHQpe3RoaXMuYz0wLHRoaXMuYj10LHF0dC5jYWxsKHRoaXMsZSwxNzQ5MyksdGhpcy5hPXRoaXMuY31mdW5jdGlvbiB5dXQoZSl7a3d0KCksU1FlKHRoaXMpLHRoaXMuYT1uZXcgb3MsRzdlKHRoaXMsZSksdWkodGhpcy5hLGUpfWZ1bmN0aW9uIHh1dCgpe1lzZSh0aGlzKSx0aGlzLmI9bmV3IGx0KGdzLGdzKSx0aGlzLmE9bmV3IGx0KGlhLGlhKX1mdW5jdGlvbiBHSCgpe0dIPVUsZGdlPW5ldyBLM2UoSEVlLDApLGhPZT1uZXcgSzNlKCJUQVJHRVRfV0lEVEgiLDEpfWZ1bmN0aW9uIFc1KGUsdCl7cmV0dXJuKHhiKGUpLF9rKG5ldyBibihlLG5ldyAkNmUodCxlLmEpKSkpLkJkKHp4KX1mdW5jdGlvbiB6bW4oKXtyZXR1cm4gdW8oKSxoZShsZShnQWUsMSksaXQsMzY3LDAsW3kwLHZnLGJ1LF91LG1jXSl9ZnVuY3Rpb24gcW1uKCl7cmV0dXJuIFJ5KCksaGUobGUocnh0LDEpLGl0LDM3NSwwLFtiQixLSyxXSyxHSyxVS10pfWZ1bmN0aW9uIEhtbigpe3JldHVybiBsMigpLGhlKGxlKG1MZSwxKSxpdCwzNDgsMCxbQTFlLGJMZSxMMWUsQlQsUFRdKX1mdW5jdGlvbiBWbW4oKXtyZXR1cm4gT0EoKSxoZShsZSh3RGUsMSksaXQsMzIzLDAsW3ZEZSx2ZGUsd2RlLHJNLGlNXSl9ZnVuY3Rpb24gVW1uKCl7cmV0dXJuIGhmKCksaGUobGUoV0xlLDEpLGl0LDE3MSwwLFtFQixZTCwkYixYTCxkNF0pfWZ1bmN0aW9uIEdtbigpe3JldHVybiBiVSgpLGhlKGxlKHFUdCwxKSxpdCwzNjgsMCxbWWRlLEdkZSxYZGUsS2RlLFdkZV0pfWZ1bmN0aW9uIEttbigpe3JldHVybiBWQSgpLGhlKGxlKHFDdCwxKSxpdCwzNzMsMCxbUTYsZTkseE0seU0sekJdKX1mdW5jdGlvbiBXbW4oKXtyZXR1cm4gWE4oKSxoZShsZShUT2UsMSksaXQsMzI0LDAsW3hPZSx3Z2UsRU9lLHlnZSxrT2VdKX1mdW5jdGlvbiBZbW4oKXtyZXR1cm4gcjEoKSxoZShsZSh4ZywxKSxpdCwxNzAsMCxbUG4saGEsemQseXYsUzJdKX1mdW5jdGlvbiBYbW4oKXtyZXR1cm4gdDYoKSxoZShsZShPTSwxKSxpdCwyNTYsMCxbS2IsdEYsWE5lLElNLFFOZV0pfWZ1bmN0aW9uIFFtbihlKXtyZXR1cm4gSHooKSxmdW5jdGlvbigpe3JldHVybiBxYm4oZSx0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIERvKGUpe3JldHVybiFlLmN8fCFlLmQ/ITE6ISFlLmMuaSYmZS5jLmk9PWUuZC5pfWZ1bmN0aW9uIGc2ZShlLHQpe3JldHVybiBEZSh0LDE0Myk/dm4oZS5jLGwodCwxNDMpLmMpOiExfWZ1bmN0aW9uIFlsKGUpe3JldHVybiBlLnR8fChlLnQ9bmV3IGJRZShlKSxfQShuZXcgSUplKGUpLDAsZS50KSksZS50fWZ1bmN0aW9uIGt1dChlKXt0aGlzLmI9ZSxvci5jYWxsKHRoaXMsZSksdGhpcy5hPWwoS24odGhpcy5iLmEsNCksMTI5KX1mdW5jdGlvbiBFdXQoZSl7dGhpcy5iPWUsSDguY2FsbCh0aGlzLGUpLHRoaXMuYT1sKEtuKHRoaXMuYi5hLDQpLDEyOSl9ZnVuY3Rpb24gaDAoZSx0LG4scixhKXtPdXQuY2FsbCh0aGlzLHQscixhKSx0aGlzLmM9ZSx0aGlzLmI9bn1mdW5jdGlvbiBwNmUoZSx0LG4scixhKXtXb3QuY2FsbCh0aGlzLHQscixhKSx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiBiNmUoZSx0LG4scixhKXtZb3QuY2FsbCh0aGlzLHQscixhKSx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiBtNmUoZSx0LG4scixhKXtPdXQuY2FsbCh0aGlzLHQscixhKSx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiBfb2UoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKEIxKGUuZCx0KSwyMyksbnx8bChCMShlLmUsdCksMjMpfWZ1bmN0aW9uIFR1dChlLHQpe3ZhciBuLHI7cmV0dXJuIG49dC5sZCgpLHI9ZS5GZShuKSwhIXImJkpjKHIuZSx0Lm1kKCkpfWZ1bmN0aW9uIEN1dChlLHQpe3ZhciBuO3JldHVybiBuPXQubGQoKSxuZXcgaXcobixlLmUucGMobixsKHQubWQoKSwxNikpKX1mdW5jdGlvbiBKbW4oZSx0KXt2YXIgbjtyZXR1cm4gbj1lLmEuZ2V0KHQpLG4/P1dlKHdhLFJuLDEsMCw1LDEpfWZ1bmN0aW9uIFN1dChlKXt2YXIgdDtyZXR1cm4gdD1lLmxlbmd0aCx2bihzci5zdWJzdHIoc3IubGVuZ3RoLXQsdCksZSl9ZnVuY3Rpb24geHIoZSl7aWYoanIoZSkpcmV0dXJuIGUuYz1lLmEsZS5hLlBiKCk7dGhyb3cgdWUobmV3IF9jKX1mdW5jdGlvbiB2NmUoZSx0KXtyZXR1cm4gdD09MHx8ZS5lPT0wP2U6dD4wP3BidChlLHQpOmoxdChlLC10KX1mdW5jdGlvbiBzeChlLHQpe3JldHVybiB0PT0wfHxlLmU9PTA/ZTp0PjA/ajF0KGUsdCk6cGJ0KGUsLXQpfWZ1bmN0aW9uIHc2ZShlKXt1bG4uY2FsbCh0aGlzLGU9PW51bGw/dWw6eGMoZSksRGUoZSw4Mik/bChlLDgyKTpudWxsKX1mdW5jdGlvbiBfdXQoZSl7dmFyIHQ7cmV0dXJuIGUuY3x8KHQ9ZS5yLERlKHQsOTApJiYoZS5jPWwodCwyOSkpKSxlLmN9ZnVuY3Rpb24gQW9lKGUpe3ZhciB0O3JldHVybiB0PW5ldyBUdyxwYyh0LGUpLHJ0KHQsKE50KCksY2MpLG51bGwpLHR9ZnVuY3Rpb24gQXV0KGUpe3ZhciB0LG47cmV0dXJuIHQ9ZS5jLmksbj1lLmQuaSx0Lms9PShabigpLFVzKSYmbi5rPT1Vc31mdW5jdGlvbiBMb2UoZSl7dmFyIHQsbixyO3JldHVybiB0PWUmZWgsbj1lPj4yMiZlaCxyPWU8MD9ocDowLHF1KHQsbixyKX1mdW5jdGlvbiBabW4oZSl7dmFyIHQsbixyLGE7Zm9yKG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSx0QSh0KX1mdW5jdGlvbiBldm4oZSx0KXt2YXIgbixyO249bCh1NG4oZS5jLHQpLDE2KSxuJiYocj1uLmdjKCksbi4kYigpLGUuZC09cil9ZnVuY3Rpb24gTW9lKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1lLkloKHQpLHI+PTA/ZS5MaChyLG4sITApOkh3KGUsdCxuKX1mdW5jdGlvbiB0dm4oZSx0LG4pe3JldHVybiBZaSh6OChCRShlKSxKYSh0LmIpKSx6OChCRShlKSxKYShuLmIpKSl9ZnVuY3Rpb24gbnZuKGUsdCxuKXtyZXR1cm4gWWkoejgoQkUoZSksSmEodC5lKSksejgoQkUoZSksSmEobi5lKSkpfWZ1bmN0aW9uIHJ2bihlLHQpe3JldHVybiBiLk1hdGgubWluKHBiKHQuYSxlLmQuZC5jKSxwYih0LmIsZS5kLmQuYykpfWZ1bmN0aW9uIHROKGUsdCl7ZS5faShlLmkrMSksUl8oZSxlLmksZS5aaShlLmksdCkpLGUuTWkoZS5pKyssdCksZS5OaSgpfWZ1bmN0aW9uIHVBKGUpe3ZhciB0LG47KytlLmosdD1lLmcsbj1lLmksZS5nPW51bGwsZS5pPTAsZS5PaShuLHQpLGUuTmkoKX1mdW5jdGlvbiBMdXQoZSx0LG4pe3ZhciByO3I9bmV3IHZ5ZShlLmEpLGJBKHIsZS5hLmEpLGp1KHIuZix0LG4pLGUuYS5hPXJ9ZnVuY3Rpb24geTZlKGUsdCxuLHIpe3ZhciBhO2ZvcihhPTA7YTxnSzthKyspaEgoZS5hW2FdW3QuZ10sbixyW3QuZ10pfWZ1bmN0aW9uIHg2ZShlLHQsbixyKXt2YXIgYTtmb3IoYT0wO2E8cTBlO2ErKylmSChlLmFbdC5nXVthXSxuLHJbdC5nXSl9ZnVuY3Rpb24gJGkoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKGUuYy54Yyh0KSwxNiksIW4mJihuPWUuaWModCkpLGUucGModCxuKX1mdW5jdGlvbiBpdm4oZSl7dmFyIHQ7cmV0dXJuIHQ9KFhyKGUpLGU/bmV3IE9sKGUpOiRrKGUuS2MoKSkpLEpOKHQpLFJWKHQpfWZ1bmN0aW9uIE8xKGUpe3ZhciB0LG47cmV0dXJuIFhyKGUpLHQ9dHBuKGUubGVuZ3RoKSxuPW5ldyBCdSh0KSxqN2UobixlKSxufWZ1bmN0aW9uIERvZShlLHQsbixyKXt2YXIgYTtyZXR1cm4gYT1XZShWcixkaSwyOCx0LDE1LDEpLEN4bihhLGUsdCxuLHIpLGF9ZnVuY3Rpb24gazZlKGUsdCl7aWYoZTwwfHxlPnQpdGhyb3cgdWUobmV3IHRjKHU5ZShlLHQsImluZGV4IikpKTtyZXR1cm4gZX1mdW5jdGlvbiB0MihlLHQpe3ZhciBuO3JldHVybiBuPShTbih0LGUuYy5sZW5ndGgpLGUuY1t0XSksZDNlKGUuYyx0LDEpLG59ZnVuY3Rpb24gRTZlKGUsdCl7dmFyIG4scjtyZXR1cm4gbj0obnIoZSksZSkscj0obnIodCksdCksbj09cj8wOm48cj8tMToxfWZ1bmN0aW9uIFQ2ZShlKXt2YXIgdDtyZXR1cm4gdD1lLmUrZS5mLGlzTmFOKHQpJiZHcShlLmQpP2UuZDp0fWZ1bmN0aW9uIHN2bihlKXtyZXR1cm4gZS5lPTMsZS5kPWUuWWIoKSxlLmUhPTI/KGUuZT0wLCEwKTohMX1mdW5jdGlvbiBKZyhlLHQpe3JldHVybiBlLmE/aGkoZS5hLGUuYik6ZS5hPW5ldyBUaChlLmQpLE5fKGUuYSx0KSxlfWZ1bmN0aW9uIGF4KGUsdCl7cmV0dXJuIElhKHQpP3Q9PW51bGw/UzllKGUuZixudWxsKTpVZnQoZS5pLHQpOlM5ZShlLmYsdCl9ZnVuY3Rpb24gTXV0KGUsdCl7enR0LmNhbGwodGhpcyx0LnpkKCksdC55ZCgpJi02KSxucihlKSx0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBEdXQoZSx0KXtxdHQuY2FsbCh0aGlzLHQuemQoKSx0LnlkKCkmLTYpLG5yKGUpLHRoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEM2ZShlLHQpe0RxLmNhbGwodGhpcyx0LnpkKCksdC55ZCgpJi02KSxucihlKSx0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBJdXQoZSx0LG4pe056LmNhbGwodGhpcyxuKSx0aGlzLmI9ZSx0aGlzLmM9dCx0aGlzLmQ9KFdjZSgpLGlwZSl9ZnVuY3Rpb24gT3V0KGUsdCxuKXt0aGlzLmQ9ZSx0aGlzLms9dD8xOjAsdGhpcy5mPW4/MTowLHRoaXMubz0tMSx0aGlzLnA9MH1mdW5jdGlvbiBOMShlKXt0aGlzLmM9ZSx0aGlzLmE9bmV3IEcodGhpcy5jLmEpLHRoaXMuYj1uZXcgRyh0aGlzLmMuYil9ZnVuY3Rpb24gS0goKXt0aGlzLmU9bmV3IGJ0LHRoaXMuYz1uZXcgYnQsdGhpcy5kPW5ldyBidCx0aGlzLmI9bmV3IGJ0fWZ1bmN0aW9uIE51dCgpe3RoaXMuZz1uZXcgTXdlLHRoaXMuYj1uZXcgTXdlLHRoaXMuYT1uZXcgYnQsdGhpcy5rPW5ldyBidH1mdW5jdGlvbiBQdXQoKXt0aGlzLmE9bmV3IE53ZSx0aGlzLmI9bmV3IFpRZSx0aGlzLmQ9bmV3IGNoLHRoaXMuZT1uZXcgcUp9ZnVuY3Rpb24gQnV0KGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmM9dCx0aGlzLmQ9bix2dCh0LmUsdGhpcyksdnQobi5iLHRoaXMpfWZ1bmN0aW9uIFM2ZShlLHQsbil7dmFyIHIsYTtmb3Iocj0wLGE9MDthPHQubGVuZ3RoO2ErKylyKz1lLnRnKHRbYV0scixuKX1mdW5jdGlvbiBhdm4oZSx0KXt2YXIgbjtyZXR1cm4gbj1DTW4oZSx0KSxlLmI9bmV3IFRWKG4uYy5sZW5ndGgpLFZMbihlLG4pfWZ1bmN0aW9uIG92bihlLHQpe3ZhciBuO249ZS5xLmdldEhvdXJzKCkrKHQvNjB8MCksZS5xLnNldE1pbnV0ZXModCksWEEoZSxuKX1mdW5jdGlvbiBJb2UoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5iLHQuYj09MD9udWxsOmwoZmYodCwwKSw2NSkuYn1mdW5jdGlvbiBfNmUoZSl7aWYoZS5hKXtpZihlLmUpcmV0dXJuIF82ZShlLmUpfWVsc2UgcmV0dXJuIGU7cmV0dXJuIG51bGx9ZnVuY3Rpb24gY3ZuKGUsdCl7cmV0dXJuIGUucDx0LnA/MTplLnA+dC5wPy0xOjB9ZnVuY3Rpb24gRnV0KGUpe3ZhciB0O3JldHVybiBlLmF8fCh0PWUucixEZSh0LDE1NikmJihlLmE9bCh0LDE1NikpKSxlLmF9ZnVuY3Rpb24gdXZuKGUsdCxuKXt2YXIgcjtyZXR1cm4rK2UuZSwtLWUuZixyPWwoZS5kW3RdLmdkKG4pLDEzNiksci5tZCgpfWZ1bmN0aW9uIGx2bihlKXt2YXIgdCxuO3JldHVybiB0PWUubGQoKSxuPWwoZS5tZCgpLDE2KSxOTyhuLk5jKCksbmV3IGJpZSh0KSl9ZnVuY3Rpb24gUnV0KGUsdCl7cmV0dXJuIEh1KGUuYSx0KT8oYXgoZS5hLHQpLCEwKTohMX1mdW5jdGlvbiBveChlLHQsbil7cmV0dXJuIFpPKHQsZS5lLlJkKCkuZ2MoKSksWk8obixlLmMuUmQoKS5nYygpKSxlLmFbdF1bbl19ZnVuY3Rpb24gV0goZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1uLHZ0KGUudCx0aGlzKSx2dCh0LmksdGhpcyl9ZnVuY3Rpb24gWUgoZSx0LG4scil7dGhpcy5mPWUsdGhpcy5lPXQsdGhpcy5kPW4sdGhpcy5iPXIsdGhpcy5jPXI/ci5kOm51bGx9ZnVuY3Rpb24gbk4oKXt0aGlzLmI9bmV3IG9zLHRoaXMuYT1uZXcgb3MsdGhpcy5iPW5ldyBvcyx0aGlzLmE9bmV3IG9zfWZ1bmN0aW9uIGVFKCl7ZUU9VTt2YXIgZSx0O1NZPShTaygpLHQ9bmV3IEZ6LHQpLF9ZPShlPW5ldyB6aWUsZSl9ZnVuY3Rpb24gaHZuKGUpe3ZhciB0O3JldHVybiB4YihlKSx0PW5ldyBNaXQoZSxlLmEuZSxlLmEuZHw0KSxuZXcgVnllKGUsdCl9ZnVuY3Rpb24ganV0KGUpe3ZhciB0O2ZvcihmYihlKSx0PTA7ZS5hLkJkKG5ldyBBbik7KXQ9Ym8odCwxKTtyZXR1cm4gdH1mdW5jdGlvbiBYSChlLHQpe3JldHVybiBucih0KSxlLmM8ZS5kPyhlLlNlKHQsZS5jKyspLCEwKTohMX1mdW5jdGlvbiBCdShlKXtZc2UodGhpcyksQk8oZT49MCwiSW5pdGlhbCBjYXBhY2l0eSBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpfWZ1bmN0aW9uIFFIKCl7UUg9VSxrTT1uZXcgVWkoIm9yZy5lY2xpcHNlLmVsay5sYWJlbHMubGFiZWxNYW5hZ2VyIil9ZnVuY3Rpb24gJHV0KCl7JHV0PVUsc0xlPW5ldyB2cygic2VwYXJhdGVMYXllckNvbm5lY3Rpb25zIiwoSVYoKSxwMWUpKX1mdW5jdGlvbiBKMCgpe0owPVUsRTQ9bmV3IHEzZSgiUkVHVUxBUiIsMCkscWI9bmV3IHEzZSgiQ1JJVElDQUwiLDEpfWZ1bmN0aW9uIHJOKCl7ck49VSx2Z2U9bmV3IFkzZSgiRklYRUQiLDApLFFXPW5ldyBZM2UoIkNFTlRFUl9OT0RFIiwxKX1mdW5jdGlvbiBKSCgpe0pIPVUsbExlPW5ldyBOM2UoIlFVQURSQVRJQyIsMCksUzFlPW5ldyBOM2UoIlNDQU5MSU5FIiwxKX1mdW5jdGlvbiB6dXQoKXt6dXQ9VSxkeHQ9S3IoKGRBKCksaGUobGUoZExlLDEpLGl0LDMyMiwwLFtITCxtQixmTGVdKSkpfWZ1bmN0aW9uIHF1dCgpe3F1dD1VLGd4dD1LcigocFYoKSxoZShsZShwTGUsMSksaXQsMzUxLDAsW2dMZSxZSyxfMWVdKSkpfWZ1bmN0aW9uIEh1dCgpe0h1dD1VLHV4dD1LcigoT3coKSxoZShsZShtMWUsMSksaXQsMzcyLDAsW28zLFJiLGEzXSkpKX1mdW5jdGlvbiBWdXQoKXtWdXQ9VSx2eHQ9S3IoKFZtKCksaGUobGUobXh0LDEpLGl0LDQ2MCwwLFtNMWUsRlQsUDZdKSkpfWZ1bmN0aW9uIFV1dCgpe1V1dD1VLFR4dD1LcigodkUoKSxoZShsZSgkMWUsMSksaXQsMjk5LDAsW1IxZSxqMWUsdkJdKSkpfWZ1bmN0aW9uIEd1dCgpe0d1dD1VLFN4dD1LcigoZXAoKSxoZShsZShDeHQsMSksaXQsMzExLDAsW3dCLEY2LFV4XSkpKX1mdW5jdGlvbiBLdXQoKXtLdXQ9VSxaa3Q9S3IoKEVBKCksaGUobGUobURlLDEpLGl0LDM5MCwwLFtwZGUsYkRlLFNXXSkpKX1mdW5jdGlvbiBXdXQoKXtXdXQ9VSxvRXQ9S3IoKExWKCksaGUobGUoTURlLDEpLGl0LDM4NywwLFtBRGUsVGRlLExEZV0pKSl9ZnVuY3Rpb24gWXV0KCl7WXV0PVUsY0V0PUtyKCh5QSgpLGhlKGxlKEREZSwxKSxpdCwzNDksMCxbU2RlLENkZSxNQl0pKSl9ZnVuY3Rpb24gWHV0KCl7WHV0PVUsYUV0PUtyKChxbygpLGhlKGxlKHNFdCwxKSxpdCw0NjMsMCxbc00sJGwsenVdKSkpfWZ1bmN0aW9uIFF1dCgpe1F1dD1VLHVFdD1LcigoU0UoKSxoZShsZShPRGUsMSksaXQsMzUwLDAsW19kZSxJRGUsYU1dKSkpfWZ1bmN0aW9uIEp1dCgpe0p1dD1VLGxFdD1LcigoZ1YoKSxoZShsZShCRGUsMSksaXQsMzUyLDAsW1BEZSxBZGUsTkRlXSkpKX1mdW5jdGlvbiBadXQoKXtadXQ9VSxoRXQ9S3IoKE9WKCksaGUobGUoRkRlLDEpLGl0LDM4OCwwLFtMZGUsWFQsazRdKSkpfWZ1bmN0aW9uIGVsdCgpe2VsdD1VLGZUdD1LcigoeEEoKSxoZShsZShlSWUsMSksaXQsMzkyLDAsW1pEZSxJZGUsT0JdKSkpfWZ1bmN0aW9uIHRsdCgpe3RsdD1VLFVUdD1LcigoTE4oKSxoZShsZShBSWUsMSksaXQsMzkzLDAsW3pXLFNJZSxfSWVdKSkpfWZ1bmN0aW9uIG5sdCgpe25sdD1VLGZDdD1LcigoQVYoKSxoZShsZShHSWUsMSksaXQsMzAwLDAsW25nZSxVSWUsVkllXSkpKX1mdW5jdGlvbiBybHQoKXtybHQ9VSxkQ3Q9S3IoKFdWKCksaGUobGUoS0llLDEpLGl0LDQ0NSwwLFtSQixWVyxyZ2VdKSkpfWZ1bmN0aW9uIGlsdCgpe2lsdD1VLHBDdD1Lcigoc1UoKSxoZShsZShnQ3QsMSksaXQsNDU2LDAsW2lnZSxhZ2Usc2dlXSkpKX1mdW5jdGlvbiBzbHQoKXtzbHQ9VSx2Q3Q9S3IoKHFWKCksaGUobGUoWEllLDEpLGl0LDM5NCwwLFtZSWUsdWdlLFdJZV0pKSl9ZnVuY3Rpb24gYWx0KCl7YWx0PVUsJEN0PUtyKCh0VigpLGhlKGxlKHBPZSwxKSxpdCw0MzksMCxbZ2dlLGdPZSxkT2VdKSkpfWZ1bmN0aW9uIG9sdCgpe29sdD1VLF9FdD1LcigoSXcoKSxoZShsZShTRXQsMSksaXQsNDY0LDAsW0RCLG9NLE1XXSkpKX1mdW5jdGlvbiBjbHQoKXtjbHQ9VSxZNnQ9S3IoKEJsKCksaGUobGUoVzZ0LDEpLGl0LDQ3MSwwLFtGZCxCYix2MF0pKSl9ZnVuY3Rpb24gdWx0KCl7dWx0PVUsSzZ0PUtyKCh0MSgpLGhlKGxlKHM0LDEpLGl0LDIzNywwLFtHYywkdSxLY10pKSl9ZnVuY3Rpb24gbGx0KCl7bGx0PVUsUTZ0PUtyKChvbCgpLGhlKGxlKFg2dCwxKSxpdCw0NzIsMCxbYTEsRmIsdzBdKSkpfWZ1bmN0aW9uIGhsdCgpe2hsdD1VLEI2dD1LcigoRmwoKSxoZShsZShvYywxKSxpdCwxMDgsMCxbeV9lLEVjLGk0XSkpKX1mdW5jdGlvbiBmbHQoKXtmbHQ9VSxtOHQ9S3IoKGxBKCksaGUobGUoZEFlLDEpLGl0LDM5MSwwLFt0MWUsZTFlLG4xZV0pKSl9ZnVuY3Rpb24gZGx0KCl7ZGx0PVUsUVN0PUtyKChycCgpLGhlKGxlKFlOZSwxKSxpdCwzNDYsMCxbb1ksQTIsRE1dKSkpfWZ1bmN0aW9uIGdsdCgpe2dsdD1VLFZDdD1LcigoUE4oKSxoZShsZShwZ2UsMSksaXQsNDQ0LDAsW1dXLFlXLFhXXSkpKX1mdW5jdGlvbiBwbHQoKXtwbHQ9VSxLU3Q9S3IoKEYxKCksaGUobGUoRk5lLDEpLGl0LDI3OCwwLFtuQyxfNCxyQ10pKSl9ZnVuY3Rpb24gYmx0KCl7Ymx0PVUsaF90PUtyKChkeCgpLGhlKGxlKG5QZSwxKSxpdCwyODAsMCxbdFBlLEw0LGRZXSkpKX1mdW5jdGlvbiBQMShlLHQpe3JldHVybiFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxLY2UoZS5vLHQpfWZ1bmN0aW9uIGZ2bihlLHQpe3ZhciBuO2UuQyYmKG49bChRbyhlLmIsdCksMTI3KS5uLG4uZD1lLkMuZCxuLmE9ZS5DLmEpfWZ1bmN0aW9uIEE2ZShlKXt2YXIgdCxuLHIsYTthPWUuZCx0PWUuYSxuPWUuYixyPWUuYyxlLmQ9bixlLmE9cixlLmI9YSxlLmM9dH1mdW5jdGlvbiBkdm4oZSl7cmV0dXJuIWUuZyYmKGUuZz1uZXcgTVMpLCFlLmcuYiYmKGUuZy5iPW5ldyBmUWUoZSkpLGUuZy5ifWZ1bmN0aW9uIGlOKGUpe3JldHVybiFlLmcmJihlLmc9bmV3IE1TKSwhZS5nLmMmJihlLmcuYz1uZXcgcFFlKGUpKSxlLmcuY31mdW5jdGlvbiBndm4oZSl7cmV0dXJuIWUuZyYmKGUuZz1uZXcgTVMpLCFlLmcuZCYmKGUuZy5kPW5ldyBkUWUoZSkpLGUuZy5kfWZ1bmN0aW9uIHB2bihlKXtyZXR1cm4hZS5nJiYoZS5nPW5ldyBNUyksIWUuZy5hJiYoZS5nLmE9bmV3IGdRZShlKSksZS5nLmF9ZnVuY3Rpb24gYnZuKGUsdCxuLHIpe3JldHVybiBuJiYocj1uLlJoKHQsbXMobi5EaCgpLGUuYy51aygpKSxudWxsLHIpKSxyfWZ1bmN0aW9uIG12bihlLHQsbixyKXtyZXR1cm4gbiYmKHI9bi5UaCh0LG1zKG4uRGgoKSxlLmMudWsoKSksbnVsbCxyKSkscn1mdW5jdGlvbiBPb2UoZSx0LG4scil7dmFyIGE7cmV0dXJuIGE9V2UoVnIsZGksMjgsdCsxLDE1LDEpLHhBbihhLGUsdCxuLHIpLGF9ZnVuY3Rpb24gV2UoZSx0LG4scixhLG8pe3ZhciBmO3JldHVybiBmPXpkdChhLHIpLGEhPTEwJiZoZShsZShlLG8pLHQsbixhLGYpLGZ9ZnVuY3Rpb24gdnZuKGUsdCxuKXt2YXIgcixhO2ZvcihhPW5ldyBtRSh0LGUpLHI9MDtyPG47KytyKWlVKGEpO3JldHVybiBhfWZ1bmN0aW9uIE5vZShlLHQsbil7dmFyIHIsYTtpZihuIT1udWxsKWZvcihyPTA7cjx0OysrcilhPW5bcl0sZS5RaShyLGEpfWZ1bmN0aW9uIEw2ZShlLHQpe3ZhciBuO3JldHVybiBuPW5ldyB4dCxuLmM9ITAsbi5kPXQubWQoKSxPdnQoZSx0LmxkKCksbil9ZnVuY3Rpb24gd3ZuKGUsdCl7dmFyIG47bj1lLnEuZ2V0SG91cnMoKSsodC8zNjAwfDApLGUucS5zZXRTZWNvbmRzKHQpLFhBKGUsbil9ZnVuY3Rpb24gTTZlKGUsdCl7dmFyIG4scjtyZXR1cm4gbj10LHI9aW9lKCRrKG5ldyB6b2UoZSxuKSkpLGlIKG5ldyB6b2UoZSxuKSkscn1mdW5jdGlvbiB5dm4oZSx0KXt0LlVnKCJMYWJlbCBtYW5hZ2VtZW50IiwxKSxNcShRKGUsKFFIKCksa00pKSksdC5WZygpfWZ1bmN0aW9uIHh2bihlLHQsbixyKXtPbXQoZSx0LG4sWEUoZSx0LHIsRGUodCwxMDIpJiYobCh0LDE5KS5CYiZJbykhPTApKX1mdW5jdGlvbiBENmUoZSx0LG4pe2woZS5iLDY4KSxsKGUuYiw2OCksbChlLmIsNjgpLFZ1KGUuYSxuZXcgYml0KG4sdCxlKSl9ZnVuY3Rpb24gR2EoZSx0LG4pe2lmKGU8MHx8dD5ufHx0PGUpdGhyb3cgdWUobmV3IGUzZShlRytlK2ZFZSt0K3VFZStuKSl9ZnVuY3Rpb24gUG9lKGUpe2U/KHRoaXMuYz1lLHRoaXMuYj1udWxsKToodGhpcy5jPW51bGwsdGhpcy5iPW5ldyBidCl9ZnVuY3Rpb24gQm9lKGUsdCl7Y3EuY2FsbCh0aGlzLGUsdCksdGhpcy5hPVdlKGRPbixYVSw0NDcsMiwwLDEpLHRoaXMuYj0hMH1mdW5jdGlvbiBJNmUoZSl7cDB0LmNhbGwodGhpcyxlLDApLGNydCh0aGlzKSx0aGlzLmQuYj10aGlzLmQsdGhpcy5kLmE9dGhpcy5kfWZ1bmN0aW9uIE82ZShlKXt0aGlzLmU9ZSx0aGlzLmI9dGhpcy5lLmEuZW50cmllcygpLHRoaXMuYT1XZSh3YSxSbiwxLDAsNSwxKX1mdW5jdGlvbiBtbHQoKXttbHQ9VSxnRXQ9eWwoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxmMWUpKSxtYyxnQil9ZnVuY3Rpb24ga3ZuKCl7cmV0dXJuIHlVKCksaGUobGUoeUxlLDEpLGl0LDI4MywwLFtJMWUsRDFlLE4xZSxPMWUsUDFlLFFLXSl9ZnVuY3Rpb24gRXZuKCl7cmV0dXJuIFdOKCksaGUobGUoX0xlLDEpLGl0LDI4MSwwLFtaSyxUTGUsU0xlLEVMZSxDTGUsQjFlXSl9ZnVuY3Rpb24gVHZuKCl7cmV0dXJuIHpFKCksaGUobGUoT0xlLDEpLGl0LDI4MiwwLFtWTCxMTGUsSUxlLERMZSxNTGUsQUxlXSl9ZnVuY3Rpb24gQ3ZuKCl7cmV0dXJuIHl4KCksaGUobGUoTlQsMSksaXQsMjMyLDAsW09ULHFMLElULGg0LE42LE82XSl9ZnVuY3Rpb24gU3ZuKCl7cmV0dXJuIFpuKCksaGUobGUobDFlLDEpLGl0LDI3MywwLFtQcyxBYSxVcyxBdSxjdSxLMV0pfWZ1bmN0aW9uIF92bigpe3JldHVybiBSbCgpLGhlKGxlKGNZLDEpLGl0LDI3OSwwLFtZYix2cCxuRixQTSxOTSxhOV0pfWZ1bmN0aW9uIEF2bigpe3JldHVybiBSYSgpLGhlKGxlKEpOZSwxKSxpdCwxMDEsMCxbV2IsWjEsc0MsVHYsVGcsTXVdKX1mdW5jdGlvbiBMdm4oKXtyZXR1cm4gdlUoKSxoZShsZShITmUsMSksaXQsMzIxLDAsW1VnZSwkTmUscU5lLFJOZSx6TmUsak5lXSl9ZnVuY3Rpb24gTXZuKCl7cmV0dXJuIG9nKCksaGUobGUoS09lLDEpLGl0LDI1NSwwLFtTZ2UsSEIsVkIsblksZVksdFldKX1mdW5jdGlvbiBEdm4oKXtyZXR1cm4gWW0oKSxoZShsZShNZ2UsMSksaXQsMjk4LDAsW0xnZSxTTSxDTSxBZ2UsRU0sVE1dKX1mdW5jdGlvbiBONmUoZSl7dmFyIHQ7cmV0dXJuIWUuYSYmZS5iIT0tMSYmKHQ9ZS5jLkRoKCksZS5hPU1uKHQsZS5iKSksZS5hfWZ1bmN0aW9uIHFyKGUsdCl7cmV0dXJuIGUuU2koKSYmZS5IYyh0KT8hMTooZS5IaSh0KSwhMCl9ZnVuY3Rpb24gWjAoZSx0KXtyZXR1cm4gVU8odCwiSG9yaXpvbnRhbCBhbGlnbm1lbnQgY2Fubm90IGJlIG51bGwiKSxlLmI9dCxlfWZ1bmN0aW9uIHZsdChlLHQsbil7RGkoKTt2YXIgcjtyZXR1cm4gcj1fYihlLHQpLG4mJnImJnpnbihlKSYmKHI9bnVsbCkscn1mdW5jdGlvbiBQNmUoZSx0LG4pe3ZhciByO3I9ZS5iW24uYy5wXVtuLnBdLHIuYis9dC5iLHIuYys9dC5jLHIuYSs9dC5hLCsrci5hfWZ1bmN0aW9uIEI2ZShlLHQsbil7dmFyIHI7ZS5kW3QuZ109bixyPWUuZy5jLHJbdC5nXT1iLk1hdGgubWF4KHJbdC5nXSxuKzEpfWZ1bmN0aW9uIHBiKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1lLmEtdC5hLHI9ZS5iLXQuYixiLk1hdGguc3FydChuKm4rcipyKX1mdW5jdGlvbiBGNmUoZSx0KXt2YXIgbixyO2ZvcihyPXQuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMzYpLGNtdChlLG4sMCwwKX1mdW5jdGlvbiBuMihlLHQsbil7dmFyIHIsYTtmb3IoYT1lLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDM2KSxLRShyLHQsbil9ZnVuY3Rpb24gSXZuKGUpe3ZhciB0LG47Zm9yKG49UnIoZS5hLDApO24uYiE9bi5kLmM7KXQ9bChCcihuKSw2NSksYjllKHQpfWZ1bmN0aW9uIHdsdChlLHQpe3JldHVybiB3ZXQoZS5lLHQpfHxoMihlLmUsdCxuZXcgdWR0KHQpKSxsKEIxKGUuZSx0KSwxMTMpfWZ1bmN0aW9uIFBsKGUsdCxuLHIpe3JldHVybiBucihlKSxucih0KSxucihuKSxucihyKSxuZXcgaDVlKGUsdCxuZXcgUHQpfWZ1bmN0aW9uIHhsKGUsdCxuLHIpe3RoaXMuYWsoKSx0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bmV3IGE1ZSh0aGlzLHQsbixyKX1mdW5jdGlvbiBGb2UoZSx0LG4scixhLG8pe3I2ZS5jYWxsKHRoaXMsdCxyLGEsbyksdGhpcy5jPWUsdGhpcy5iPW59ZnVuY3Rpb24gc04oZSx0LG4scixhLG8pe3I2ZS5jYWxsKHRoaXMsdCxyLGEsbyksdGhpcy5jPWUsdGhpcy5hPW59ZnVuY3Rpb24gYU4oZSx0KXt2YXIgbixyLGE7cmV0dXJuIGE9ZS5yLHI9ZS5kLG49WkEoZSx0LCEwKSxuLmIhPWF8fG4uYSE9cn1mdW5jdGlvbiBvTihlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT0ocj1WRShlLmIsdCksciksYT9WVShsTihlLGEpLG4pOm51bGx9ZnVuY3Rpb24gT3ZuKGUsdCxuKXt2YXIgcixhLG87cj1XZyhlLG4pLGE9bnVsbCxyJiYoYT1lOWUocikpLG89YSxhZHQodCxuLG8pfWZ1bmN0aW9uIE52bihlLHQsbil7dmFyIHIsYSxvO3I9V2coZSxuKSxhPW51bGwsciYmKGE9ZTllKHIpKSxvPWEsYWR0KHQsbixvKX1mdW5jdGlvbiB0RShlLHQpe3ZhciBuO3JldHVybiBuPWUuSWgodCksbj49MD9lLkxoKG4sITAsITApOkh3KGUsdCwhMCl9ZnVuY3Rpb24gUHZuKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj13MHQoZSx0LG4pLGUuYj1uZXcgVFYoci5jLmxlbmd0aCksUTllKGUscil9ZnVuY3Rpb24gQnZuKGUpe2lmKGUuYjw9MCl0aHJvdyB1ZShuZXcgX2MpO3JldHVybi0tZS5iLGUuYS09ZS5jLmMscHQoZS5hKX1mdW5jdGlvbiBGdm4oZSl7dmFyIHQ7aWYoIWUuYSl0aHJvdyB1ZShuZXcgTGF0KTtyZXR1cm4gdD1lLmEsZS5hPWRzKGUuYSksdH1mdW5jdGlvbiBSdm4oZSl7Zm9yKDshZS5hOylpZighdGl0KGUuYyxuZXcgWlMoZSkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGN4KGUpe3ZhciB0O3JldHVybiBYcihlKSxEZShlLDIwNCk/KHQ9bChlLDIwNCksdCk6bmV3IHc4KGUpfWZ1bmN0aW9uIGp2bihlKXtaSCgpLGwoZS5vZigocGkoKSxTNCkpLDE4MSkuRmMoKFJsKCksbkYpKSxlLnFmKCRnZSxudWxsKX1mdW5jdGlvbiBaSCgpe1pIPVUscFN0PW5ldyBsJCxtU3Q9bmV3IGgkLGJTdD1feW4oKHBpKCksJGdlKSxwU3QsVWIsbVN0KX1mdW5jdGlvbiBlVigpe2VWPVUsVEllPW5ldyBHM2UoIkxFQUZfTlVNQkVSIiwwKSxRZGU9bmV3IEczZSgiTk9ERV9TSVpFIiwxKX1mdW5jdGlvbiBSb2UoZSl7ZS5hPVdlKFZyLGRpLDI4LGUuYisxLDE1LDEpLGUuYz1XZShWcixkaSwyOCxlLmIsMTUsMSksZS5kPTB9ZnVuY3Rpb24gJHZuKGUsdCl7ZS5hLk5lKHQuZCxlLmIpPjAmJih2dChlLmMsbmV3IEw0ZSh0LmMsdC5kLGUuZCkpLGUuYj10LmQpfWZ1bmN0aW9uIFI2ZShlLHQpe2lmKGUuZz09bnVsbHx8dD49ZS5pKXRocm93IHVlKG5ldyBWc2UodCxlLmkpKTtyZXR1cm4gZS5nW3RdfWZ1bmN0aW9uIHlsdChlLHQsbil7aWYoRUUoZSxuKSxuIT1udWxsJiYhZS5mayhuKSl0aHJvdyB1ZShuZXcgUmllKTtyZXR1cm4gbn1mdW5jdGlvbiBqb2UoZSx0KXtyZXR1cm4gZ04odCkhPTEwJiZoZShiaCh0KSx0LlNtLHQuX19lbGVtZW50VHlwZUlkJCxnTih0KSxlKSxlfWZ1bmN0aW9uIG5FKGUsdCxuLHIpe3ZhciBhO3I9KEV3KCkscnx8ZF9lKSxhPWUuc2xpY2UodCxuKSxsOWUoYSxlLHQsbiwtdCxyKX1mdW5jdGlvbiBzZihlLHQsbixyLGEpe3JldHVybiB0PDA/SHcoZSxuLHIpOmwobiw2OSkud2soKS55ayhlLGUuaGkoKSx0LHIsYSl9ZnVuY3Rpb24genZuKGUsdCl7cmV0dXJuIFlpKHplKEdlKFEoZSwoZnQoKSxsMykpKSksemUoR2UoUSh0LGwzKSkpKX1mdW5jdGlvbiB4bHQoKXt4bHQ9VSxNNnQ9S3IoKHJFKCksaGUobGUoZkssMSksaXQsMzA0LDAsW08wZSxOMGUsUDBlLEIwZV0pKSl9ZnVuY3Rpb24gckUoKXtyRT1VLE8wZT1uZXcgb3EoIkFsbCIsMCksTjBlPW5ldyBobnQsUDBlPW5ldyB5bnQsQjBlPW5ldyBsbnR9ZnVuY3Rpb24gQmwoKXtCbD1VLEZkPW5ldyBwc2UoTXgsMCksQmI9bmV3IHBzZShjVCwxKSx2MD1uZXcgcHNlKER4LDIpfWZ1bmN0aW9uIGtsdCgpe2tsdD1VLHpVKCksR1BlPWdzLHZBdD1pYSxLUGU9bmV3IHBhKGdzKSx3QXQ9bmV3IHBhKGlhKX1mdW5jdGlvbiBFbHQoKXtFbHQ9VSxrN3Q9S3IoKFB3KCksaGUobGUoeDd0LDEpLGl0LDQxNywwLFtpQixyQixWMGUsVTBlXSkpKX1mdW5jdGlvbiBUbHQoKXtUbHQ9VSxfN3Q9S3IoKE5BKCksaGUobGUoUzd0LDEpLGl0LDQwNiwwLFt1QixiSyxtSyxsQl0pKSl9ZnVuY3Rpb24gQ2x0KCl7Q2x0PVUsVDd0PUtyKChieCgpLGhlKGxlKEU3dCwxKSxpdCwzMzIsMCxbYUIsc0Isb0IsY0JdKSkpfWZ1bmN0aW9uIFNsdCgpe1NsdD1VLEk4dD1LcigoS20oKSxoZShsZShtQWUsMSksaXQsMzg5LDAsW2M0LGJBZSxvMWUsYzFlXSkpKX1mdW5jdGlvbiBfbHQoKXtfbHQ9VSxTOHQ9S3IoKHdFKCksaGUobGUoQzh0LDEpLGl0LDQxNiwwLFtzMyxvNCxhNCxNNl0pKSl9ZnVuY3Rpb24gQWx0KCl7QWx0PVUsbnh0PUtyKChSMSgpLGhlKGxlKHR4dCwxKSxpdCw0MjEsMCxbVngsTVQsRFQsYjFlXSkpKX1mdW5jdGlvbiBMbHQoKXtMbHQ9VSxVOHQ9S3IoKElWKCksaGUobGUoVjh0LDEpLGl0LDM3MSwwLFtwMWUsSEssVksscEJdKSkpfWZ1bmN0aW9uIE1sdCgpe01sdD1VLGVFdD1LcigoQnkoKSxoZShsZShtZGUsMSksaXQsMjAzLDAsW19XLGJkZSxHNixVNl0pKSl9ZnVuY3Rpb24gRGx0KCl7RGx0PVUsckV0PUtyKChFZCgpLGhlKGxlKFNEZSwxKSxpdCwyODQsMCxbRTIsQ0RlLHlkZSx4ZGVdKSkpfWZ1bmN0aW9uIGNOKCl7Y049VSx4TGU9bmV3IEIzZShJZCwwKSxKSz1uZXcgQjNlKCJJTVBST1ZFX1NUUkFJR0hUTkVTUyIsMSl9ZnVuY3Rpb24gSWx0KGUsdCl7dmFyIG4scjtyZXR1cm4gcj10L2UuYy5SZCgpLmdjKCl8MCxuPXQlZS5jLlJkKCkuZ2MoKSxveChlLHIsbil9ZnVuY3Rpb24gT2x0KGUpe3ZhciB0O2lmKGUubmwoKSlmb3IodD1lLmktMTt0Pj0wOy0tdClPZShlLHQpO3JldHVybiBhNmUoZSl9ZnVuY3Rpb24gajZlKGUpe3ZhciB0LG47aWYoIWUuYilyZXR1cm4gbnVsbDtmb3Iobj1lLmI7dD1uLmFbMF07KW49dDtyZXR1cm4gbn1mdW5jdGlvbiBObHQoZSl7dmFyIHQsbjtpZighZS5iKXJldHVybiBudWxsO2ZvcihuPWUuYjt0PW4uYVsxXTspbj10O3JldHVybiBufWZ1bmN0aW9uIHF2bihlKXtyZXR1cm4gRGUoZSwxODApPyIiK2woZSwxODApLmE6ZT09bnVsbD9udWxsOnhjKGUpfWZ1bmN0aW9uIEh2bihlKXtyZXR1cm4gRGUoZSwxODApPyIiK2woZSwxODApLmE6ZT09bnVsbD9udWxsOnhjKGUpfWZ1bmN0aW9uIFBsdChlLHQpe2lmKHQuYSl0aHJvdyB1ZShuZXcgQWMoZTN0KSk7bmEoZS5hLHQpLHQuYT1lLCFlLmomJihlLmo9dCl9ZnVuY3Rpb24gJDZlKGUsdCl7RHEuY2FsbCh0aGlzLHQuemQoKSx0LnlkKCkmLTE2NDQ5KSxucihlKSx0aGlzLmE9ZSx0aGlzLmM9dH1mdW5jdGlvbiBWdm4oZSx0KXtyZXR1cm4gbmV3IHdhZSh0LGR3KEphKHQuZSksdC5mLmErZSx0LmYuYitlKSwoSG4oKSwhMSkpfWZ1bmN0aW9uIFV2bihlLHQpe3JldHVybiBqaygpLHZ0KGUsbmV3IGNhKHQscHQodC5lLmMubGVuZ3RoK3QuZy5jLmxlbmd0aCkpKX1mdW5jdGlvbiBHdm4oZSx0KXtyZXR1cm4gamsoKSx2dChlLG5ldyBjYSh0LHB0KHQuZS5jLmxlbmd0aCt0LmcuYy5sZW5ndGgpKSl9ZnVuY3Rpb24gQmx0KCl7Qmx0PVUsaEN0PUtyKCh1VSgpLGhlKGxlKEhJZSwxKSxpdCwzNTQsMCxbdGdlLHpJZSxxSWUsJEllXSkpKX1mdW5jdGlvbiBGbHQoKXtGbHQ9VSxQVHQ9S3IoKGtBKCksaGUobGUoeUllLDEpLGl0LDM1MywwLFtWZGUsalcsSGRlLHFkZV0pKSl9ZnVuY3Rpb24gUmx0KCl7Umx0PVUsbFR0PUtyKCh3eCgpLGhlKGxlKHFEZSwxKSxpdCw0MDUsMCxbTlcsbE0saE0sZk1dKSkpfWZ1bmN0aW9uIGpsdCgpe2psdD1VLFdTdD1LcigoaXAoKSxoZShsZShWZ2UsMSksaXQsMjIzLDAsW0hnZSxKQixpQyxzOV0pKSl9ZnVuY3Rpb24gJGx0KCl7JGx0PVUsWlN0PUtyKChJaCgpLGhlKGxlKEpTdCwxKSxpdCwyOTEsMCxbZUYsa2csR2IsWkJdKSkpfWZ1bmN0aW9uIHpsdCgpe3psdD1VLHVfdD1LcigobWgoKSxoZShsZShCTSwxKSxpdCwzODYsMCxbaUYsQ3YsckYsQTRdKSkpfWZ1bmN0aW9uIHFsdCgpe3FsdD1VLGRfdD1LcigoVlYoKSxoZShsZShjUGUsMSksaXQsMzIwLDAsW0tnZSxzUGUsb1BlLGFQZV0pKSl9ZnVuY3Rpb24gSGx0KCl7SGx0PVUsYl90PUtyKChOVigpLGhlKGxlKHBfdCwxKSxpdCw0MTUsMCxbV2dlLGxQZSx1UGUsaFBlXSkpKX1mdW5jdGlvbiB0Vigpe3RWPVUsZ2dlPW5ldyBqc2Uodnl0LDApLGdPZT1uZXcganNlKGNDZSwxKSxkT2U9bmV3IGpzZShJZCwyKX1mdW5jdGlvbiBTeShlLHQsbixyLGEpe3JldHVybiBucihlKSxucih0KSxucihuKSxucihyKSxucihhKSxuZXcgaDVlKGUsdCxyKX1mdW5jdGlvbiBWbHQoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKGF4KGUuZSx0KSw0MDApLG4/KCQ0ZShuKSxuLmUpOm51bGx9ZnVuY3Rpb24gYWwoZSx0KXt2YXIgbjtyZXR1cm4gbj1nYyhlLHQsMCksbj09LTE/ITE6KHQyKGUsbiksITApfWZ1bmN0aW9uIFVsdChlLHQsbil7dmFyIHI7cmV0dXJuIGZiKGUpLHI9bmV3IG9uLHIuYT10LGUuYS5OYihuZXcgQ2V0KHIsbikpLHIuYX1mdW5jdGlvbiBLdm4oZSl7dmFyIHQ7cmV0dXJuIGZiKGUpLHQ9V2UoTmEsWm8sMjgsMCwxNSwxKSxBNShlLmEsbmV3IEU4KHQpKSx0fWZ1bmN0aW9uIHo2ZShlKXt2YXIgdDtpZighdGNlKGUpKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIGUuZT0xLHQ9ZS5kLGUuZD1udWxsLHR9ZnVuY3Rpb24gcjIoZSl7dmFyIHQ7cmV0dXJuIHdjKGUpJiYodD0wLWUsIWlzTmFOKHQpKT90Om1iKHhFKGUpKX1mdW5jdGlvbiBnYyhlLHQsbil7Zm9yKDtuPGUuYy5sZW5ndGg7KytuKWlmKEpjKHQsZS5jW25dKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiAkb2UoZSl7dmFyIHQsbjtyZXR1cm4gbj1sKGp0KGUuaiwwKSwxMiksdD1sKFEobiwoZnQoKSx6aSkpLDEyKSx0fWZ1bmN0aW9uIHpvZShlLHQpe3ZhciBuO3RoaXMuZj1lLHRoaXMuYj10LG49bChjcihlLmIsdCksMjYwKSx0aGlzLmM9bj9uLmI6bnVsbH1mdW5jdGlvbiBHbHQoKXt1MCgpLHRoaXMuYj1uZXcgUHIsdGhpcy5mPW5ldyBQcix0aGlzLmc9bmV3IFByLHRoaXMuZT1uZXcgUHJ9ZnVuY3Rpb24gblYoZSl7RnEodGhpcyksdGhpcy5nPWU/REgoZSxlLmllKCkpOm51bGwsdGhpcy5mPWUsU0godGhpcyksdGhpcy5qZSgpfWZ1bmN0aW9uIHFvZShlKXt2YXIgdDt0PWUuamooKSx0IT1udWxsJiZlLmQhPS0xJiZsKHQsOTQpLnhoKGUpLGUuaSYmZS5pLm9qKCl9ZnVuY3Rpb24gdU4oZSl7dmFyIHQ7Zm9yKHQ9ZS5wKzE7dDxlLmMuYS5jLmxlbmd0aDsrK3QpLS1sKGp0KGUuYy5hLHQpLDEwKS5wfWZ1bmN0aW9uIEtsdChlKXtneSghIWUuYykscGFlKGUuZi5nLGUuZCksZS5jLlFiKCksZS5jPW51bGwsZS5iPUw3ZShlKSxlLmQ9ZS5mLmd9ZnVuY3Rpb24gWGwoZSl7cmV0dXJuIGUuYnx8KGUuYj1uZXcgd3N0KGUsV28sZSksIWUuYSYmKGUuYT1uZXcgTE8oZSxlKSkpLGUuYn1mdW5jdGlvbiBsTihlLHQpe3ZhciBuLHI7cmV0dXJuIG49bCh0LDY5MCkscj1uLnhpKCksIXImJm4uQWkocj1uZXcgRnR0KGUsdCkpLHJ9ZnVuY3Rpb24gaWMoZSx0KXt2YXIgbixyO3JldHVybiBuPWwodCw2OTIpLHI9bi4kaygpLCFyJiZuLmNsKHI9bmV3IGFjdChlLHQpKSxyfWZ1bmN0aW9uIHE2ZShlLHQpe3BfKCk7dmFyIG4scjtyZXR1cm4gbj1peChlKSxyPWl4KHQpLCEhbiYmISFyJiYhbWR0KG4uayxyLmspfWZ1bmN0aW9uIHJWKGUsdCl7cmV0dXJuIEpjKHQsanQoZS5mLDApKXx8SmModCxqdChlLmYsMSkpfHxKYyh0LGp0KGUuZiwyKSl9ZnVuY3Rpb24gaE4oZSx0KXtpZih0PDApdGhyb3cgdWUobmV3IHRjKEl5dCt0KSk7cmV0dXJuIEJjdChlLHQrMSksanQoZS5qLHQpfWZ1bmN0aW9uIFdsdChlLHQsbixyKXtpZighZSl0aHJvdyB1ZShuZXcgWW4oS0EodCxoZShsZSh3YSwxKSxSbiwxLDUsW24scl0pKSkpfWZ1bmN0aW9uIFpnKGUsdCxuLHIsYSxvLGYpe0pvZS5jYWxsKHRoaXMsdCxyLGEsbyxmKSx0aGlzLmM9ZSx0aGlzLmI9bn1mdW5jdGlvbiBhZyhlLHQsbil7dmFyIHIsYTtmb3Iocj0xMCxhPTA7YTxuLTE7YSsrKXQ8ciYmKGUuYSs9IjAiKSxyKj0xMDtlLmErPXR9ZnVuY3Rpb24gaVYoZSl7dmFyIHQsbjtyZXR1cm4gbj1lLmxlbmd0aCx0PVdlKGtmLEFkLDI4LG4sMTUsMSksSHN0KGUsMCxuLHQsMCksdH1mdW5jdGlvbiBmTihlKXt0c3QoKTt2YXIgdCxuO3JldHVybiB0PWUrMTI4LG49SlNlW3RdLCFuJiYobj1KU2VbdF09bmV3IFNpKGUpKSxufWZ1bmN0aW9uIFlsdChlKXtyZXR1cm4gcGFlKGUuZC5hLmUuZyxlLmIpLG1yKGUuYyE9ZS5kLmEuZCksZS5hPWUuYyxlLmM9ZS5jLmEsZS5hfWZ1bmN0aW9uIFd2bihlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIElpO2Nhc2UgMTpyZXR1cm4tMTtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBZdm4oZSl7cmV0dXJuIGJ4ZShlLChpRSgpLFhTZSkpPDA/LURobih4RShlKSk6ZS5sK2UubSpMeCtlLmgqWm19ZnVuY3Rpb24gWGx0KGUpeyh0aGlzLnE/dGhpcy5xOihDbigpLENuKCksbWcpKS5BYyhlLnE/ZS5xOihDbigpLENuKCksbWcpKX1mdW5jdGlvbiBYdm4oZSx0KXtVOChsKGwoZS5mLDI3KS5vZigocGkoKSxfTSkpLDEwMSkpJiZyNW4oWGFlKGwoZS5mLDI3KSksdCl9ZnVuY3Rpb24gSG9lKGUsdCl7dmFyIG47cmV0dXJuIG49bXMoZS5kLHQpLG4+PTA/clUoZSxuLCEwLCEwKTpIdyhlLHQsITApfWZ1bmN0aW9uIEg2ZShlKXt2YXIgdDtyZXR1cm4gdD1qbShLbihlLDMyKSksdD09bnVsbCYmKEt1KGUpLHQ9am0oS24oZSwzMikpKSx0fWZ1bmN0aW9uIFY2ZShlKXt2YXIgdDtyZXR1cm4gZS5PaCgpfHwodD15cihlLkRoKCkpLWUuamkoKSxlLiRoKCkuTWsodCkpLGUuemgoKX1mdW5jdGlvbiBRbHQoZSx0KXtIX2U9bmV3IE90LEM3dD10LFJMPWUsbChSTC5iLDY4KSxENmUoUkwsSF9lLG51bGwpLGZ2dChSTCl9ZnVuY3Rpb24gbEEoKXtsQT1VLHQxZT1uZXcgbXNlKCJYWSIsMCksZTFlPW5ldyBtc2UoIlgiLDEpLG4xZT1uZXcgbXNlKCJZIiwyKX1mdW5jdGlvbiBvbCgpe29sPVUsYTE9bmV3IGJzZSgiVE9QIiwwKSxGYj1uZXcgYnNlKGNULDEpLHcwPW5ldyBic2UoeEVlLDIpfWZ1bmN0aW9uIGVwKCl7ZXA9VSx3Qj1uZXcgRXNlKElkLDApLEY2PW5ldyBFc2UoIlRPUCIsMSksVXg9bmV3IEVzZSh4RWUsMil9ZnVuY3Rpb24gZE4oKXtkTj1VLGtkZT1uZXcgUjNlKCJJTlBVVF9PUkRFUiIsMCksRWRlPW5ldyBSM2UoIlBPUlRfREVHUkVFIiwxKX1mdW5jdGlvbiBpRSgpe2lFPVUsV1NlPXF1KGVoLGVoLDUyNDI4NyksZzZ0PXF1KDAsMCxTUCksWVNlPUxvZSgxKSxMb2UoMiksWFNlPUxvZSgwKX1mdW5jdGlvbiBWb2UoZSl7dmFyIHQ7cmV0dXJuIGUuZCE9ZS5yJiYodD1PZihlKSxlLmU9ISF0JiZ0LmxrKCk9PWc1dCxlLmQ9dCksZS5lfWZ1bmN0aW9uIFVvZShlLHQsbil7dmFyIHI7cmV0dXJuIHI9ZS5nW3RdLFJfKGUsdCxlLlppKHQsbikpLGUuUmkodCxuLHIpLGUuTmkoKSxyfWZ1bmN0aW9uIHNWKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5kZCh0KSxuPj0wPyhlLmdkKG4pLCEwKTohMX1mdW5jdGlvbiBHb2UoZSx0KXt2YXIgbjtmb3IoWHIoZSksWHIodCksbj0hMTt0Lk9iKCk7KW49bnxlLkZjKHQuUGIoKSk7cmV0dXJuIG59ZnVuY3Rpb24gQjEoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKGNyKGUuZSx0KSw0MDApLG4/KEludChlLG4pLG4uZSk6bnVsbH1mdW5jdGlvbiBKbHQoZSl7dmFyIHQsbjtyZXR1cm4gdD1lLzYwfDAsbj1lJTYwLG49PTA/IiIrdDoiIit0KyI6IisoIiIrbil9ZnVuY3Rpb24gX3koZSx0KXt2YXIgbj1lLmFbdF0scj0odmNlKCksXzBlKVt0eXBlb2Ygbl07cmV0dXJuIHI/cihuKTpaN2UodHlwZW9mIG4pfWZ1bmN0aW9uIERjKGUsdCl7dmFyIG4scjtyZXR1cm4geGIoZSkscj1uZXcgQzZlKHQsZS5hKSxuPW5ldyBpaXQociksbmV3IGJuKGUsbil9ZnVuY3Rpb24gS29lKGUpe3ZhciB0O3JldHVybiB0PWUuYi5jLmxlbmd0aD09MD9udWxsOmp0KGUuYiwwKSx0IT1udWxsJiZyY2UoZSwwKSx0fWZ1bmN0aW9uIFF2bihlLHQpe3ZhciBuLHIsYTthPXQuYy5pLG49bChjcihlLmYsYSksNjApLHI9bi5kLmMtbi5lLmMsazdlKHQuYSxyLDApfWZ1bmN0aW9uIFU2ZShlLHQpe3ZhciBuO2ZvcigrK2UuZCwrK2UuY1t0XSxuPXQrMTtuPGUuYS5sZW5ndGg7KSsrZS5hW25dLG4rPW4mLW59ZnVuY3Rpb24gWmx0KGUsdCxuLHIpe0RpKCksWHYuY2FsbCh0aGlzLDI2KSx0aGlzLmM9ZSx0aGlzLmE9dCx0aGlzLmQ9bix0aGlzLmI9cn1mdW5jdGlvbiBlaHQoZSx0KXtmb3IoO3RbMF08ZS5sZW5ndGgmJnBkKGAgCVxyCmAsY2woY28oZSx0WzBdKSkpPj0wOykrK3RbMF19ZnVuY3Rpb24gSnZuKGUsdCl7VXUoZSx0PT1udWxsfHxHcSgobnIodCksdCkpfHxpc05hTigobnIodCksdCkpPzA6KG5yKHQpLHQpKX1mdW5jdGlvbiBadm4oZSx0KXtHdShlLHQ9PW51bGx8fEdxKChucih0KSx0KSl8fGlzTmFOKChucih0KSx0KSk/MDoobnIodCksdCkpfWZ1bmN0aW9uIGV3bihlLHQpe0R3KGUsdD09bnVsbHx8R3EoKG5yKHQpLHQpKXx8aXNOYU4oKG5yKHQpLHQpKT8wOihucih0KSx0KSl9ZnVuY3Rpb24gdHduKGUsdCl7TXcoZSx0PT1udWxsfHxHcSgobnIodCksdCkpfHxpc05hTigobnIodCksdCkpPzA6KG5yKHQpLHQpKX1mdW5jdGlvbiBud24oZSx0LG4pe3JldHVybiB6OChuZXcgbHQobi5lLmErbi5mLmEvMixuLmUuYituLmYuYi8yKSxlKT09KG5yKHQpLHQpfWZ1bmN0aW9uIHJ3bihlLHQpe3JldHVybiBEZSh0LDEwMikmJmwodCwxOSkuQmImSW8/bmV3IFVzZSh0LGUpOm5ldyBtRSh0LGUpfWZ1bmN0aW9uIGl3bihlLHQpe3JldHVybiBEZSh0LDEwMikmJmwodCwxOSkuQmImSW8/bmV3IFVzZSh0LGUpOm5ldyBtRSh0LGUpfWZ1bmN0aW9uIGdOKGUpe3JldHVybiBlLl9fZWxlbWVudFR5cGVDYXRlZ29yeSQ9PW51bGw/MTA6ZS5fX2VsZW1lbnRUeXBlQ2F0ZWdvcnkkfWZ1bmN0aW9uIHRodChlLHQpe3JldHVybiB0PT0oZ2FlKCksZ2FlKCksXzZ0KT9lLnRvTG9jYWxlTG93ZXJDYXNlKCk6ZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG5odChlKXtpZighZS5lKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIGUuYz1lLmE9ZS5lLGUuZT1lLmUuZSwtLWUuZCxlLmEuZn1mdW5jdGlvbiBHNmUoZSl7aWYoIWUuYyl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiBlLmU9ZS5hPWUuYyxlLmM9ZS5jLmMsKytlLmQsZS5hLmZ9ZnVuY3Rpb24gcmh0KGUpe3ZhciB0O2ZvcigrK2UuYSx0PWUuYy5hLmxlbmd0aDtlLmE8dDsrK2UuYSlpZihlLmMuYltlLmFdKXJldHVybn1mdW5jdGlvbiBzd24oZSl7dmFyIHQsbjtpZihlLmEpe249bnVsbDtkbyB0PWUuYSxlLmE9bnVsbCxuPWRwdCh0LG4pO3doaWxlKGUuYSk7ZS5hPW59fWZ1bmN0aW9uIGF3bihlKXt2YXIgdCxuO2lmKGUuYil7bj1udWxsO2RvIHQ9ZS5iLGUuYj1udWxsLG49ZHB0KHQsbik7d2hpbGUoZS5iKTtlLmI9bn19ZnVuY3Rpb24gb3duKGUsdCl7dmFyIG47Zm9yKG49MDtlLmUhPWUuaS5nYygpOylEZG4odCxncihlKSxwdChuKSksbiE9SWkmJisrbn1mdW5jdGlvbiBjd24oZSx0KXt2YXIgbjtyZXR1cm4gbj1GdyhlLmUuYyx0LmUuYyksbj09MD9ZaShlLmUuZCx0LmUuZCk6bn1mdW5jdGlvbiB1d24oZSx0KXt2YXIgbixyO2ZvcihyPXQuYyxuPXIrMTtuPD10LmY7bisrKWUuYVtuXT5lLmFbcl0mJihyPW4pO3JldHVybiByfWZ1bmN0aW9uIGlodChlKXt2YXIgdDtyZXR1cm4gdD1sKFEoZSwoZnQoKSxjMykpLDMxMyksdD90LmE9PWU6ITF9ZnVuY3Rpb24gc2h0KGUpe3ZhciB0O3JldHVybiB0PWwoUShlLChmdCgpLGMzKSksMzEzKSx0P3QuaT09ZTohMX1mdW5jdGlvbiBhaHQoKXthaHQ9VSx4OHQ9S3IoKHVvKCksaGUobGUoZ0FlLDEpLGl0LDM2NywwLFt5MCx2ZyxidSxfdSxtY10pKSl9ZnVuY3Rpb24gb2h0KCl7b2h0PVUsaXh0PUtyKChSeSgpLGhlKGxlKHJ4dCwxKSxpdCwzNzUsMCxbYkIsS0ssV0ssR0ssVUtdKSkpfWZ1bmN0aW9uIGNodCgpe2NodD1VLHB4dD1LcigobDIoKSxoZShsZShtTGUsMSksaXQsMzQ4LDAsW0ExZSxiTGUsTDFlLEJULFBUXSkpKX1mdW5jdGlvbiB1aHQoKXt1aHQ9VSx0RXQ9S3IoKE9BKCksaGUobGUod0RlLDEpLGl0LDMyMywwLFt2RGUsdmRlLHdkZSxyTSxpTV0pKSl9ZnVuY3Rpb24gbGh0KCl7bGh0PVUsQXh0PUtyKChoZigpLGhlKGxlKFdMZSwxKSxpdCwxNzEsMCxbRUIsWUwsJGIsWEwsZDRdKSkpfWZ1bmN0aW9uIGhodCgpe2hodD1VLEhUdD1LcigoYlUoKSxoZShsZShxVHQsMSksaXQsMzY4LDAsW1lkZSxHZGUsWGRlLEtkZSxXZGVdKSkpfWZ1bmN0aW9uIGZodCgpe2ZodD1VLEhDdD1LcigoVkEoKSxoZShsZShxQ3QsMSksaXQsMzczLDAsW1E2LGU5LHhNLHlNLHpCXSkpKX1mdW5jdGlvbiBkaHQoKXtkaHQ9VSxZQ3Q9S3IoKFhOKCksaGUobGUoVE9lLDEpLGl0LDMyNCwwLFt4T2Usd2dlLEVPZSx5Z2Usa09lXSkpKX1mdW5jdGlvbiBnaHQoKXtnaHQ9VSxHU3Q9S3IoKEpzKCksaGUobGUoTE0sMSksaXQsODgsMCxbSjEsdmMsdWMsUTEsd2ZdKSkpfWZ1bmN0aW9uIHBodCgpe3BodD1VLHZTdD1LcigocjEoKSxoZShsZSh4ZywxKSxpdCwxNzAsMCxbUG4saGEsemQseXYsUzJdKSkpfWZ1bmN0aW9uIGJodCgpe2JodD1VLHRfdD1LcigodDYoKSxoZShsZShPTSwxKSxpdCwyNTYsMCxbS2IsdEYsWE5lLElNLFFOZV0pKSl9ZnVuY3Rpb24gbWh0KCl7bWh0PVUsaV90PUtyKChDdCgpLGhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSkpKX1mdW5jdGlvbiBhVigpe2FWPVUsRV9lPW5ldyBBM2UoIkJZX1NJWkUiLDApLCQwZT1uZXcgQTNlKCJCWV9TSVpFX0FORF9TSEFQRSIsMSl9ZnVuY3Rpb24gb1YoKXtvVj1VLFEwZT1uZXcgRDNlKCJFQURFUyIsMCkseUs9bmV3IEQzZSgiRlJVQ0hURVJNQU5fUkVJTkdPTEQiLDEpfWZ1bmN0aW9uIHBOKCl7cE49VSxYSz1uZXcgUDNlKCJSRUFESU5HX0RJUkVDVElPTiIsMCksdkxlPW5ldyBQM2UoIlJPVEFUSU9OIiwxKX1mdW5jdGlvbiBoQSgpe2hBPVUsTDh0PW5ldyBuSSxNOHQ9bmV3ICRKLF84dD1uZXcgdm0sQTh0PW5ldyBodSxEOHQ9bmV3IHpKfWZ1bmN0aW9uIHZodChlKXt0aGlzLmI9bmV3IGJ0LHRoaXMuYT1uZXcgYnQsdGhpcy5jPW5ldyBidCx0aGlzLmQ9bmV3IGJ0LHRoaXMuZT1lfWZ1bmN0aW9uIHdodChlKXt0aGlzLmc9ZSx0aGlzLmY9bmV3IGJ0LHRoaXMuYT1iLk1hdGgubWluKHRoaXMuZy5jLmMsdGhpcy5nLmQuYyl9ZnVuY3Rpb24geWh0KGUsdCxuKXtWcS5jYWxsKHRoaXMpLFk2ZSh0aGlzKSx0aGlzLmE9ZSx0aGlzLmM9bix0aGlzLmI9dC5kLHRoaXMuZj10LmV9ZnVuY3Rpb24gbHduKGUsdCxuKXt2YXIgcixhO2ZvcihhPW5ldyBHKG4pO2EuYTxhLmMuYy5sZW5ndGg7KXI9cmUoYSksT3hlKGUsdCxyKX1mdW5jdGlvbiBlMShlLHQsbil7dmFyIHI7aWYodD09bnVsbCl0aHJvdyB1ZShuZXcgUzgpO3JldHVybiByPVdnKGUsdCksRW1uKGUsdCxuKSxyfWZ1bmN0aW9uIFdvZShlLHQpe3ZhciBuO3JldHVybiBuPWwoY3IoZS5hLHQpLDEzNyksbnx8KG49bmV3IEJzLGtpKGUuYSx0LG4pKSxufWZ1bmN0aW9uIE1uKGUsdCl7dmFyIG47cmV0dXJuIG49KGUuaT09bnVsbCYmU2QoZSksZS5pKSx0Pj0wJiZ0PG4ubGVuZ3RoP25bdF06bnVsbH1mdW5jdGlvbiBod24oZSx0KXt2YXIgbjtyZXR1cm4gbj10PjA/dC0xOnQsWkplKEZ1bihWaHQoQjRlKG5ldyBMOCxuKSxlLm4pLGUuaiksZS5rKX1mdW5jdGlvbiBzYyhlKXt2YXIgdCxuO249KHQ9bmV3IHFpZSx0KSxxcigoIWUucSYmKGUucT1uZXcgbnQoVWYsZSwxMSwxMCkpLGUucSksbil9ZnVuY3Rpb24gSzZlKGUpe3JldHVybihlLmkmMj8iaW50ZXJmYWNlICI6ZS5pJjE/IiI6ImNsYXNzICIpKyhHZyhlKSxlLm8pfWZ1bmN0aW9uIGNWKGUpe3JldHVybiBpdShlLElpKT4wP0lpOml1KGUsbG8pPDA/bG86WXIoZSl9ZnVuY3Rpb24gQXkoZSl7cmV0dXJuIGU8Mz8oTWgoZSxQd3QpLGUrMSk6ZTxyTD91YShlLy43NSsxKTpJaX1mdW5jdGlvbiB4aHQoZSx0KXtyZXR1cm4gbnIodCksaTVlKGUpLGUuZC5PYigpPyh0LkNkKGUuZC5QYigpKSwhMCk6ITF9ZnVuY3Rpb24gZnduKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1sKE95KGUuZCx0KSwxNiksbj8ocj10LGUuZS5wYyhyLG4pKTpudWxsfWZ1bmN0aW9uIGR3bihlLHQsbixyKXt2YXIgYTtlLmo9LTEsRTllKGUsdDllKGUsdCxuKSwoRm8oKSxhPWwodCw2OSkudmsoKSxhLnhsKHIpKSl9ZnVuY3Rpb24gZ3duKGUsdCl7cmV0dXJuIHV4KCksLXJ1KGwoUShlLChIYygpLFc2KSksMTcpLmEsbChRKHQsVzYpLDE3KS5hKX1mdW5jdGlvbiBraHQoZSx0KXtyZXR1cm4hIXBBKGUsdCxZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSl9ZnVuY3Rpb24gcHduKCl7cmV0dXJuIEhFKCksaGUobGUoeFksMSksaXQsMjQ1LDAsW0pnZSx3WSx5WSx2WSxRZ2UsbVksYlksWGdlXSl9ZnVuY3Rpb24gYnduKCl7cmV0dXJuIGcyKCksaGUobGUod1N0LDEpLGl0LDI4NSwwLFtWT2UseWEsVGMsSjYsZm8scHMsdDksWDFdKX1mdW5jdGlvbiBtd24oKXtyZXR1cm4gT1UoKSxoZShsZSh1TGUsMSksaXQsMjc2LDAsW3cxZSxrMWUsdjFlLEMxZSx4MWUseTFlLFQxZSxFMWVdKX1mdW5jdGlvbiB2d24oZSl7dmFyIHQ7cmV0dXJuIHQ9emUoR2UoUShlLChOdCgpLHgyKSkpKSx0PDAmJih0PTAscnQoZSx4Mix0KSksdH1mdW5jdGlvbiB1VihlLHQpe3ZhciBuLHI7Zm9yKHI9ZS5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSw3MikscnQobiwoZnQoKSxZeCksdCl9ZnVuY3Rpb24gd3duKGUsdCxuKXt2YXIgcjtyPWIuTWF0aC5tYXgoMCxlLmIvMi0uNSksRkEobixyLDEpLHZ0KHQsbmV3IExldChuLHIpKX1mdW5jdGlvbiB5d24oZSx0LG4pe3ZhciByO3JldHVybiByPWUuYS5lW2wodC5hLDEwKS5wXS1lLmEuZVtsKG4uYSwxMCkucF0sdWEoUk8ocikpfWZ1bmN0aW9uIGxWKGUsdCl7dmFyIG47cmV0dXJuIHhiKGUpLG49bmV3IFJhdChlLGUuYS56ZCgpLGUuYS55ZCgpfDQsdCksbmV3IGJuKGUsbil9ZnVuY3Rpb24gWW9lKGUpe3ZhciB0O2d5KCEhZS5jKSx0PWUuYy5hLGFmKGUuZCxlLmMpLGUuYj09ZS5jP2UuYj10Oi0tZS5hLGUuYz1udWxsfWZ1bmN0aW9uIEVodChlKXtyZXR1cm4gZS5hPj0tLjAxJiZlLmE8PUgxJiYoZS5hPTApLGUuYj49LS4wMSYmZS5iPD1IMSYmKGUuYj0wKSxlfWZ1bmN0aW9uIFk1KGUpe2g2KCk7dmFyIHQsbjtmb3Iobj1oQ2UsdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0+biYmKG49ZVt0XSk7cmV0dXJuIG59ZnVuY3Rpb24gVGh0KGUsdCl7dmFyIG47aWYobj1vUChlLkRoKCksdCksIW4pdGhyb3cgdWUobmV3IFluKE9iK3QrJGZlKSk7cmV0dXJuIG59ZnVuY3Rpb24gTHkoZSx0KXt2YXIgbjtmb3Iobj1lO2RzKG4pOylpZihuPWRzKG4pLG49PXQpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geHduKGUsdCl7dmFyIG4scixhO2ZvcihyPXQuYS5sZCgpLG49bCh0LmEubWQoKSwxNikuZ2MoKSxhPTA7YTxuO2ErKyllLkNkKHIpfWZ1bmN0aW9uIFZ1KGUsdCl7dmFyIG4scixhLG87Zm9yKG5yKHQpLHI9ZS5jLGE9MCxvPXIubGVuZ3RoO2E8bzsrK2Epbj1yW2FdLHQuQ2Qobil9ZnVuY3Rpb24gQ2h0KGUsdCxuLHIsYSxvKXt2YXIgZjtmPUFvZShyKSxwbyhmLGEpLEZhKGYsbykseG4oZS5hLHIsbmV3IEtxKGYsdCxuLmYpKX1mdW5jdGlvbiBTaHQoZSx0KXtIaShlLCh1ZygpLGNnZSksdC5mKSxIaShlLG1DdCx0LmUpLEhpKGUsb2dlLHQuZCksSGkoZSxiQ3QsdC5jKX1mdW5jdGlvbiBfaHQoZSx0KXt0aGlzLmE9bmV3IFByLHRoaXMuZT1uZXcgUHIsdGhpcy5iPShFQSgpLFNXKSx0aGlzLmM9ZSx0aGlzLmI9dH1mdW5jdGlvbiBBaHQoZSl7dGhpcy5kPWUsdGhpcy5jPWUuYy52YygpLktjKCksdGhpcy5iPW51bGwsdGhpcy5hPW51bGwsdGhpcy5lPSgkeigpLEUwZSl9ZnVuY3Rpb24gYWYoZSx0KXt2YXIgbjtyZXR1cm4gbj10LmMsdC5hLmI9dC5iLHQuYi5hPXQuYSx0LmE9dC5iPW51bGwsdC5jPW51bGwsLS1lLmIsbn1mdW5jdGlvbiBrd24oZSx0KXtyZXR1cm4gdCYmZS5iW3QuZ109PXQ/KFRzKGUuYix0LmcsbnVsbCksLS1lLmMsITApOiExfWZ1bmN0aW9uIEV3bihlLHQpe2lmKDA+ZXx8ZT50KXRocm93IHVlKG5ldyB0M2UoImZyb21JbmRleDogMCwgdG9JbmRleDogIitlK3VFZSt0KSl9ZnVuY3Rpb24gTHcoZSl7aWYoZTwwKXRocm93IHVlKG5ldyBZbigiSWxsZWdhbCBDYXBhY2l0eTogIitlKSk7dGhpcy5nPXRoaXMuYWooZSl9ZnVuY3Rpb24gVzZlKGUsdCl7cmV0dXJuIEExKCksZjAoQWIpLGIuTWF0aC5hYnMoZS10KTw9QWJ8fGU9PXR8fGlzTmFOKGUpJiZpc05hTih0KX1mdW5jdGlvbiBYb2UoZSx0KXt2YXIgbixyLGEsbztmb3Iocj1lLmQsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sTDEoZS5nLG4pLmE9dH1mdW5jdGlvbiBUd24oZSx0LG4pe3ZhciByLGEsbztmb3IoYT10W25dLHI9MDtyPGEubGVuZ3RoO3IrKylvPWFbcl0sZS5lW28uYy5wXVtvLnBdPXJ9ZnVuY3Rpb24gQ3duKGUpe3ZhciB0O2Zvcih0PTA7dDxlLmMubGVuZ3RoO3QrKykoU24odCxlLmMubGVuZ3RoKSxsKGUuY1t0XSwxMikpLnA9dH1mdW5jdGlvbiBTd24oZSl7dmFyIHQsbjtmb3IodD1lLmEuZC5qLG49ZS5jLmQuajt0IT1uOylkMChlLmIsdCksdD0kVih0KTtkMChlLmIsdCl9ZnVuY3Rpb24gX3duKGUpe3ZhciB0O3JldHVybiB0PWIuTWF0aC5zcXJ0KGUuYSplLmErZS5iKmUuYiksdD4wJiYoZS5hLz10LGUuYi89dCksZX1mdW5jdGlvbiBBaChlKXt2YXIgdDtyZXR1cm4gZS53P2UudzoodD1kYm4oZSksdCYmIXQuVmgoKSYmKGUudz10KSx0KX1mdW5jdGlvbiBzRShlLHQpe3ZhciBuLHI7cj1lLmEsbj1tNG4oZSx0LG51bGwpLHIhPXQmJiFlLmUmJihuPVpFKGUsdCxuKSksbiYmbi5vaigpfWZ1bmN0aW9uIExodChlLHQsbil7dmFyIHIsYTtyPXQ7ZG8gYT16ZShlLnBbci5wXSkrbixlLnBbci5wXT1hLHI9ZS5hW3IucF07d2hpbGUociE9dCl9ZnVuY3Rpb24gTWh0KGUsdCxuKXt2YXIgcj1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHIsYXJndW1lbnRzKX07cmV0dXJuIHQuYXBwbHkocixuKSxyfWZ1bmN0aW9uIEF3bihlKXt2YXIgdDtyZXR1cm4gZT09bnVsbD9udWxsOih0PWwoZSwxOTUpLCR4bih0LHQubGVuZ3RoKSl9ZnVuY3Rpb24gT2UoZSx0KXtpZihlLmc9PW51bGx8fHQ+PWUuaSl0aHJvdyB1ZShuZXcgVnNlKHQsZS5pKSk7cmV0dXJuIGUuV2kodCxlLmdbdF0pfWZ1bmN0aW9uIEx3bihlLHQpe0NuKCk7dmFyIG4scjtmb3Iocj1uZXcgYnQsbj0wO248ZTsrK24pJG4oci5jLHQpO3JldHVybiBuZXcgZXNlKHIpfWZ1bmN0aW9uIERodChlKXtyZXR1cm4geGIoZSksSzgoITAsIm4gbWF5IG5vdCBiZSBuZWdhdGl2ZSIpLG5ldyBibihlLG5ldyBhZnQoZS5hKSl9ZnVuY3Rpb24gWTZlKGUpe2UuYj0oQmwoKSxCYiksZS5mPShvbCgpLEZiKSxlLmQ9KE1oKDIsWXkpLG5ldyBCdSgyKSksZS5lPW5ldyBxYX1mdW5jdGlvbiBoVihlKXt0aGlzLmI9KFhyKGUpLG5ldyBPbChlKSksdGhpcy5hPW5ldyBidCx0aGlzLmQ9bmV3IGJ0LHRoaXMuZT1uZXcgcWF9ZnVuY3Rpb24gdDEoKXt0MT1VLEdjPW5ldyBnc2UoIkJFR0lOIiwwKSwkdT1uZXcgZ3NlKGNULDEpLEtjPW5ldyBnc2UoIkVORCIsMil9ZnVuY3Rpb24gRjEoKXtGMT1VLG5DPW5ldyB6c2UoY1QsMCksXzQ9bmV3IHpzZSgiSEVBRCIsMSksckM9bmV3IHpzZSgiVEFJTCIsMil9ZnVuY3Rpb24gdXgoKXt1eD1VLFJUdD1UZChUZChUZCh2XyhuZXcgWHMsKHd4KCksbE0pKSwoV0EoKSxEZGUpKSxHRGUpLFhEZSl9ZnVuY3Rpb24gdHAoKXt0cD1VLCRUdD1UZChUZChUZCh2XyhuZXcgWHMsKHd4KCksZk0pKSwoV0EoKSxXRGUpKSxIRGUpLEtEZSl9ZnVuY3Rpb24gSWh0KCl7SWh0PVUsaHh0PUtyKCh5eCgpLGhlKGxlKE5ULDEpLGl0LDIzMiwwLFtPVCxxTCxJVCxoNCxONixPNl0pKSl9ZnVuY3Rpb24gT2h0KCl7T2h0PVUsd3h0PUtyKCh5VSgpLGhlKGxlKHlMZSwxKSxpdCwyODMsMCxbSTFlLEQxZSxOMWUsTzFlLFAxZSxRS10pKSl9ZnVuY3Rpb24gTmh0KCl7Tmh0PVUseHh0PUtyKChXTigpLGhlKGxlKF9MZSwxKSxpdCwyODEsMCxbWkssVExlLFNMZSxFTGUsQ0xlLEIxZV0pKSl9ZnVuY3Rpb24gUGh0KCl7UGh0PVUsa3h0PUtyKCh6RSgpLGhlKGxlKE9MZSwxKSxpdCwyODIsMCxbVkwsTExlLElMZSxETGUsTUxlLEFMZV0pKSl9ZnVuY3Rpb24gQmh0KCl7Qmh0PVUsQjh0PUtyKChabigpLGhlKGxlKGwxZSwxKSxpdCwyNzMsMCxbUHMsQWEsVXMsQXUsY3UsSzFdKSkpfWZ1bmN0aW9uIEZodCgpe0ZodD1VLHhTdD1Lcigob2coKSxoZShsZShLT2UsMSksaXQsMjU1LDAsW1NnZSxIQixWQixuWSxlWSx0WV0pKSl9ZnVuY3Rpb24gUmh0KCl7Umh0PVUsX1N0PUtyKChZbSgpLGhlKGxlKE1nZSwxKSxpdCwyOTgsMCxbTGdlLFNNLENNLEFnZSxFTSxUTV0pKSl9ZnVuY3Rpb24gamh0KCl7amh0PVUsWVN0PUtyKCh2VSgpLGhlKGxlKEhOZSwxKSxpdCwzMjEsMCxbVWdlLCROZSxxTmUsUk5lLHpOZSxqTmVdKSkpfWZ1bmN0aW9uICRodCgpeyRodD1VLG5fdD1LcigoUmEoKSxoZShsZShKTmUsMSksaXQsMTAxLDAsW1diLFoxLHNDLFR2LFRnLE11XSkpKX1mdW5jdGlvbiB6aHQoKXt6aHQ9VSxyX3Q9S3IoKFJsKCksaGUobGUoY1ksMSksaXQsMjc5LDAsW1liLHZwLG5GLFBNLE5NLGE5XSkpKX1mdW5jdGlvbiBxaHQoKXtxaHQ9VSxnSz0odDEoKSxoZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKSkubGVuZ3RoLHEwZT1nS31mdW5jdGlvbiBNd24oKXtyZXR1cm4gcXkoKSxoZShsZShLbywxKSxpdCw5NSwwLFtFMCxtcCxUMCxTMCxFZyxxZixqaCxDMCx6Zl0pfWZ1bmN0aW9uIER3bihlLHQpe3JldHVybiBDYigpLHJ1KGUuYi5jLmxlbmd0aC1lLmUuYy5sZW5ndGgsdC5iLmMubGVuZ3RoLXQuZS5jLmxlbmd0aCl9ZnVuY3Rpb24gWDUoZSx0KXtyZXR1cm4gJHVuKGdBKGUsdCxZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSkpfWZ1bmN0aW9uIFg2ZShlLHQpe3JldHVybiBBMSgpLGYwKEFiKSxiLk1hdGguYWJzKGUtdCk8PUFifHxlPT10fHxpc05hTihlKSYmaXNOYU4odCl9ZnVuY3Rpb24gZlYoZSx0KXt2YXIgbjtuPWUuYixlLmI9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwxLG4sZS5iKSl9ZnVuY3Rpb24gYUUoZSx0KXt2YXIgbjtuPWUuYixlLmI9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwzLG4sZS5iKSl9ZnVuY3Rpb24gTXcoZSx0KXt2YXIgbjtuPWUuZixlLmY9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwzLG4sZS5mKSl9ZnVuY3Rpb24gRHcoZSx0KXt2YXIgbjtuPWUuZyxlLmc9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSw0LG4sZS5nKSl9ZnVuY3Rpb24gVXUoZSx0KXt2YXIgbjtuPWUuaSxlLmk9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSw1LG4sZS5pKSl9ZnVuY3Rpb24gR3UoZSx0KXt2YXIgbjtuPWUuaixlLmo9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSw2LG4sZS5qKSl9ZnVuY3Rpb24gb0UoZSx0KXt2YXIgbjtuPWUuaixlLmo9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwxLG4sZS5qKSl9ZnVuY3Rpb24gY0UoZSx0KXt2YXIgbjtuPWUuYyxlLmM9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSw0LG4sZS5jKSl9ZnVuY3Rpb24gdUUoZSx0KXt2YXIgbjtuPWUuayxlLms9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwyLG4sZS5rKSl9ZnVuY3Rpb24gZFYoZSx0KXt2YXIgbjtuPWUuYSxlLmE9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwwLG4sZS5hKSl9ZnVuY3Rpb24gaTIoZSx0KXt2YXIgbjtuPWUucyxlLnM9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcga29lKGUsNCxuLGUucykpfWZ1bmN0aW9uIE15KGUsdCl7dmFyIG47bj1lLnQsZS50PXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGtvZShlLDUsbixlLnQpKX1mdW5jdGlvbiBRb2UoZSx0KXt2YXIgbjtuPWUuZCxlLmQ9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcga29lKGUsMixuLGUuZCkpfWZ1bmN0aW9uIGxFKGUsdCl7dmFyIG47bj1lLkYsZS5GPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSw1LG4sdCkpfWZ1bmN0aW9uIGJOKGUsdCl7dmFyIG47cmV0dXJuIG49bChjcigoaXEoKSxrWSksZSksNTcpLG4/bi5nayh0KTpXZSh3YSxSbiwxLHQsNSwxKX1mdW5jdGlvbiBJd24oZSx0KXt2YXIgbjtyZXR1cm4gbj1tYShKYShsKGNyKGUuZyx0KSw4KSksbXllKGwoY3IoZS5mLHQpLDQ3MCkuYikpLG59ZnVuY3Rpb24gT3duKGUsdCl7dmFyIG4scixhO3JldHVybiBuPShyPShyYigpLGE9bmV3IHNrLGEpLHQmJlU5ZShyLHQpLHIpLGw3ZShuLGUpLG59ZnVuY3Rpb24gbnAoZSx0KXt2YXIgbixyO3JldHVybiBuPXQgaW4gZS5hLG4mJihyPVdnKGUsdCkucmUoKSxyKT9yLmE6bnVsbH1mdW5jdGlvbiBIaHQoZSx0LG4pe2lmKEVFKGUsbiksIWUua2woKSYmbiE9bnVsbCYmIWUuZmsobikpdGhyb3cgdWUobmV3IFJpZSk7cmV0dXJuIG59ZnVuY3Rpb24gVmh0KGUsdCl7cmV0dXJuIGUubj10LGUubj8oZS5mPW5ldyBidCxlLmU9bmV3IGJ0KTooZS5mPW51bGwsZS5lPW51bGwpLGV9ZnVuY3Rpb24gVWh0KGUsdCl7aWYoZSl7dC5uPWU7dmFyIG49djJuKHQpO2lmKCFuKXtzS1tlXT1bdF07cmV0dXJufW4uUm09dH19ZnVuY3Rpb24gam0oZSl7dmFyIHQ7cmV0dXJuIFZfKGU9PW51bGx8fEFycmF5LmlzQXJyYXkoZSkmJih0PWdOKGUpLCEodD49MTQmJnQ8PTE2KSkpLGV9ZnVuY3Rpb24gR3IoZSx0KXt2YXIgbjtyZXR1cm4gbnIodCksbj1lWyI6Iit0XSxCTyghIW4sIkVudW0gY29uc3RhbnQgdW5kZWZpbmVkOiAiK3QpLG59ZnVuY3Rpb24gRnIoZSx0LG4scixhLG8pe3ZhciBmO3JldHVybiBmPUdhZShlLHQpLFVodChuLGYpLGYuaT1hPzg6MCxmLmY9cixmLmU9YSxmLmc9byxmfWZ1bmN0aW9uIFE2ZShlLHQsbixyLGEpe3RoaXMuZD10LHRoaXMuaz1yLHRoaXMuZj1hLHRoaXMubz0tMSx0aGlzLnA9MSx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiBKNmUoZSx0LG4scixhKXt0aGlzLmQ9dCx0aGlzLms9cix0aGlzLmY9YSx0aGlzLm89LTEsdGhpcy5wPTIsdGhpcy5jPWUsdGhpcy5hPW59ZnVuY3Rpb24gWjZlKGUsdCxuLHIsYSl7dGhpcy5kPXQsdGhpcy5rPXIsdGhpcy5mPWEsdGhpcy5vPS0xLHRoaXMucD02LHRoaXMuYz1lLHRoaXMuYT1ufWZ1bmN0aW9uIGU3ZShlLHQsbixyLGEpe3RoaXMuZD10LHRoaXMuaz1yLHRoaXMuZj1hLHRoaXMubz0tMSx0aGlzLnA9Nyx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiB0N2UoZSx0LG4scixhKXt0aGlzLmQ9dCx0aGlzLmo9cix0aGlzLmU9YSx0aGlzLm89LTEsdGhpcy5wPTQsdGhpcy5jPWUsdGhpcy5hPW59ZnVuY3Rpb24gR2h0KGUsdCl7dmFyIG4scixhLG87Zm9yKHI9dCxhPTAsbz1yLmxlbmd0aDthPG87KythKW49clthXSxQbHQoZS5hLG4pO3JldHVybiBlfWZ1bmN0aW9uIExoKGUpe3ZhciB0LG4scixhO2ZvcihuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sWHIodCk7cmV0dXJuIG5ldyBzbnQoZSl9ZnVuY3Rpb24gbjdlKGUpe3ZhciB0O3JldHVybiB0PW1hKEphKGUuZC5kKSxlLmMuZCksUkUodCxlLmMuZS5hLGUuYy5lLmIpLE9pKHQsZS5jLmQpfWZ1bmN0aW9uIHI3ZShlKXt2YXIgdDtyZXR1cm4gdD1tYShKYShlLmMuZCksZS5kLmQpLFJFKHQsZS5kLmUuYSxlLmQuZS5iKSxPaSh0LGUuZC5kKX1mdW5jdGlvbiBOd24oZSl7dmFyIHQ9L2Z1bmN0aW9uKD86XHMrKFtcdyRdKykpP1xzKlwoLyxuPXQuZXhlYyhlKTtyZXR1cm4gbiYmblsxXXx8UmxlfWZ1bmN0aW9uIFB3bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT1lLmxlbmd0aCxyPWIuTWF0aC5taW4obixhKSxrOWUoZSwwLHQsMCxyLCEwKSx0fWZ1bmN0aW9uIEtodChlLHQsbil7dmFyIHIsYTtmb3IoYT10LktjKCk7YS5PYigpOylyPWwoYS5QYigpLDc0KSxuYShlLGwobi5LYihyKSwyNykpfWZ1bmN0aW9uIEJ3bihlLHQpe1U4KGwoUShsKGUuZSwxMCksKE50KCksTXMpKSwxMDEpKSYmKENuKCksVnMobChlLmUsMTApLmosdCkpfWZ1bmN0aW9uIEZ3bigpe3JldHVybiBQVSgpLGhlKGxlKCRfZSwxKSxpdCwyNTcsMCxbal9lLFBfZSxCX2UsTl9lLHowZSxSX2UsRl9lLE9fZSxJX2VdKX1mdW5jdGlvbiBSd24oKXtyZXR1cm4gcDIoKSxoZShsZShwRGUsMSksaXQsMjY1LDAsW2dkZSxmRGUsZERlLGRkZSxoRGUsZ0RlLENXLFdULFlUXSl9ZnVuY3Rpb24gSXcoKXtJdz1VLERCPW5ldyBEc2UoIkJBUllDRU5URVIiLDApLG9NPW5ldyBEc2UoSDN0LDEpLE1XPW5ldyBEc2UoVjN0LDIpfWZ1bmN0aW9uIGdWKCl7Z1Y9VSxQRGU9bmV3IExzZSgiTk8iLDApLEFkZT1uZXcgTHNlKEhFZSwxKSxORGU9bmV3IExzZSgiTE9PS19CQUNLIiwyKX1mdW5jdGlvbiBwVigpe3BWPVUsZ0xlPW5ldyB5c2UoIkFSRCIsMCksWUs9bmV3IHlzZSgiTVNEIiwxKSxfMWU9bmV3IHlzZSgiTUFOVUFMIiwyKX1mdW5jdGlvbiBxbygpe3FvPVUsc009bmV3IENzZShjTCwwKSwkbD1uZXcgQ3NlKCJJTlBVVCIsMSksenU9bmV3IENzZSgiT1VUUFVUIiwyKX1mdW5jdGlvbiBoRSgpe3JldHVybiBUZ2V8fChUZ2U9bmV3IFhidCxRNShUZ2UsaGUobGUoTDYsMSksUm4sMTM0LDAsW25ldyB1el0pKSksVGdlfWZ1bmN0aW9uIGYwKGUpe2lmKCEoZT49MCkpdGhyb3cgdWUobmV3IFluKCJ0b2xlcmFuY2UgKCIrZSsiKSBtdXN0IGJlID49IDAiKSk7cmV0dXJuIGV9ZnVuY3Rpb24gV2h0KGUsdCl7dmFyIG47cmV0dXJuIERlKHQsNDQpP2UuYy5NYyh0KToobj1LY2UoZSx0KSxZVihlLHQpLG4pfWZ1bmN0aW9uIEpvKGUsdCxuKXtyZXR1cm4gR20oZSx0KSxGdShlLG4pLGkyKGUsMCksTXkoZSwxKSx1MihlLCEwKSxjMihlLCEwKSxlfWZ1bmN0aW9uIG1OKGUsdCl7dmFyIG47aWYobj1lLmdjKCksdDwwfHx0Pm4pdGhyb3cgdWUobmV3IG15KHQsbikpO3JldHVybiBuZXcgZjRlKGUsdCl9ZnVuY3Rpb24gYlYoZSx0KXtlLmI9Yi5NYXRoLm1heChlLmIsdC5kKSxlLmUrPXQucisoZS5hLmMubGVuZ3RoPT0wPzA6ZS5jKSx2dChlLmEsdCl9ZnVuY3Rpb24gWWh0KGUpe2d5KGUuYz49MCksSDVuKGUuZCxlLmMpPDAmJihlLmE9ZS5hLTEmZS5kLmEubGVuZ3RoLTEsZS5iPWUuZC5jKSxlLmM9LTF9ZnVuY3Rpb24gbVYoZSl7dmFyIHQsbjtmb3Iobj1lLmMuQ2MoKS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSwxNiksdC4kYigpO2UuYy4kYigpLGUuZD0wfWZ1bmN0aW9uIGp3bihlKXt2YXIgdCxuLHIsYTtmb3Iobj1lLmEscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0scXN0KHQsdC5sZW5ndGgsbnVsbCl9ZnVuY3Rpb24gZkEoZSx0KXt2YXIgbixyLGEsbztmb3Iocj10LGE9MCxvPXIubGVuZ3RoO2E8bzsrK2Epbj1yW2FdLENzKGUsbixlLmMuYixlLmMpfWZ1bmN0aW9uIFhodChlLHQpe3ZhciBuLHI7Zm9yKG49MCxyPWUuZ2MoKTtuPHI7KytuKWlmKEpjKHQsZS5YYihuKSkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gaTdlKGUpe3ZhciB0LG47aWYoZT09MClyZXR1cm4gMzI7Zm9yKG49MCx0PTE7ISh0JmUpO3Q8PD0xKSsrbjtyZXR1cm4gbn1mdW5jdGlvbiBNaChlLHQpe2lmKGU8MCl0aHJvdyB1ZShuZXcgWW4odCsiIGNhbm5vdCBiZSBuZWdhdGl2ZSBidXQgd2FzOiAiK2UpKTtyZXR1cm4gZX1mdW5jdGlvbiAkd24oZSx0KXt0eXBlb2Ygd2luZG93PT09d1AmJnR5cGVvZiB3aW5kb3cuJGd3dD09PXdQJiYod2luZG93LiRnd3RbZV09dCl9ZnVuY3Rpb24gdlYoZSx0KXtyZXR1cm4ganVuKHBBKGUuYSx0LFlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpKSl9ZnVuY3Rpb24genduKGUsdCxuKXtyZXR1cm4gU3koZSxuZXcgZmQodCksbmV3IEF0LG5ldyBXdihuKSxoZShsZShvYywxKSxpdCwxMDgsMCxbXSkpfWZ1bmN0aW9uIHF3bigpe3JldHVybiBabCgpLGhlKGxlKGVQZSwxKSxpdCwyNjQsMCxbYUMsYUYsdVksRk0sbFksZlksaFksR2dlLHNGXSl9ZnVuY3Rpb24gUWh0KCl7UWh0PVUscDZ0PWhlKGxlKFZyLDEpLGRpLDI4LDE1LFswLDgsNCwxMiwyLDEwLDYsMTQsMSw5LDUsMTMsMywxMSw3LDE1XSl9ZnVuY3Rpb24gZEEoKXtkQT1VLEhMPW5ldyB3c2UoIkxBWUVSX1NXRUVQIiwwKSxtQj1uZXcgd3NlKCRoZSwxKSxmTGU9bmV3IHdzZShJZCwyKX1mdW5jdGlvbiBzN2UoKXtzN2U9VSxiRXQ9ZmkoZmkoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxENikpLHZnLGw0KSxidSx1NCl9ZnVuY3Rpb24gSmh0KCl7Smh0PVUsbUV0PWZpKGZpKGZpKG5ldyBYcywodW8oKSx5MCksKHZvKCksRDYpKSx2ZyxsNCksYnUsdTQpfWZ1bmN0aW9uIGE3ZSgpe2E3ZT1VLHZFdD1maShmaShmaShuZXcgWHMsKHVvKCkseTApLCh2bygpLEQ2KSksdmcsbDQpLGJ1LHU0KX1mdW5jdGlvbiBaaHQoKXtaaHQ9VSx3RXQ9ZmkoZmkoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxENikpLHZnLGw0KSxidSx1NCl9ZnVuY3Rpb24gZWZ0KCl7ZWZ0PVUseUV0PWZpKGZpKGZpKG5ldyBYcywodW8oKSx5MCksKHZvKCksRDYpKSx2ZyxsNCksYnUsdTQpfWZ1bmN0aW9uIHRmdCgpe3RmdD1VLHhFdD1maShmaShmaShuZXcgWHMsKHVvKCkseTApLCh2bygpLEQ2KSksdmcsbDQpLGJ1LHU0KX1mdW5jdGlvbiBuZnQoKXtuZnQ9VSxURXQ9eWwoZmkoZmkobmV3IFhzLCh1bygpLGJ1KSwodm8oKSxQSykpLF91LE1LKSxtYyxOSyl9ZnVuY3Rpb24gSHduKGUpe3ZhciB0LG47Zm9yKG49bmV3IEcoR2R0KGUpKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNjk1KSx0Ll9mKCl9ZnVuY3Rpb24gVnduKCl7TVplKCk7Zm9yKHZhciBlPW0wZSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKX1mdW5jdGlvbiByZnQoZSl7bTNlKCksdGhpcy5nPW5ldyBQcix0aGlzLmY9bmV3IFByLHRoaXMuYj1uZXcgUHIsdGhpcy5jPW5ldyBDdyx0aGlzLmk9ZX1mdW5jdGlvbiBvN2UoKXt0aGlzLmY9bmV3IHFhLHRoaXMuZD1uZXcgUndlLHRoaXMuYz1uZXcgcWEsdGhpcy5hPW5ldyBidCx0aGlzLmI9bmV3IGJ0fWZ1bmN0aW9uIGlmdChlLHQsbixyKXt0aGlzLmFrKCksdGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW51bGwsdGhpcy5jPW5ldyBacnQodGhpcyx0LG4scil9ZnVuY3Rpb24gSm9lKGUsdCxuLHIsYSl7dGhpcy5kPWUsdGhpcy5uPXQsdGhpcy5nPW4sdGhpcy5vPXIsdGhpcy5wPS0xLGF8fCh0aGlzLm89LTItci0xKX1mdW5jdGlvbiBzZnQoKXtreWUuY2FsbCh0aGlzKSx0aGlzLm49LTEsdGhpcy5nPW51bGwsdGhpcy5pPW51bGwsdGhpcy5qPW51bGwsdGhpcy5CYnw9bTB9ZnVuY3Rpb24gYWZ0KGUpe0RxLmNhbGwodGhpcyxlLkFkKDY0KT9weWUoMCxEZihlLnpkKCksMSkpOkVQLGUueWQoKSksdGhpcy5iPTEsdGhpcy5hPWV9ZnVuY3Rpb24gVXduKGUsdCl7cmV0dXJuIHV4KCksbChRKHQsKEhjKCksVzYpKSwxNykuYTxlLmdjKCkmJmwoUSh0LFc2KSwxNykuYT49MH1mdW5jdGlvbiBjN2UoZSx0KXtlLnI+MCYmZS5jPGUuciYmKGUuYys9dCxlLmkmJmUuaS5kPjAmJmUuZyE9MCYmYzdlKGUuaSx0L2UuciplLmkuZCkpfWZ1bmN0aW9uIHU3ZShlLHQpe3ZhciBuO249ZS5jLGUuYz10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMSxuLGUuYykpfWZ1bmN0aW9uIFpvZShlLHQpe3ZhciBuO249ZS5jLGUuYz10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsNCxuLGUuYykpfWZ1bmN0aW9uIGZFKGUsdCl7dmFyIG47bj1lLmssZS5rPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwyLG4sZS5rKSl9ZnVuY3Rpb24gZWNlKGUsdCl7dmFyIG47bj1lLkQsZS5EPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwyLG4sZS5EKSl9ZnVuY3Rpb24gd1YoZSx0KXt2YXIgbjtuPWUuZixlLmY9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDgsbixlLmYpKX1mdW5jdGlvbiB5VihlLHQpe3ZhciBuO249ZS5pLGUuaT10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsNyxuLGUuaSkpfWZ1bmN0aW9uIGw3ZShlLHQpe3ZhciBuO249ZS5hLGUuYT10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsOCxuLGUuYSkpfWZ1bmN0aW9uIGg3ZShlLHQpe3ZhciBuO249ZS5iLGUuYj10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMCxuLGUuYikpfWZ1bmN0aW9uIGY3ZShlLHQpe3ZhciBuO249ZS5iLGUuYj10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMCxuLGUuYikpfWZ1bmN0aW9uIGQ3ZShlLHQpe3ZhciBuO249ZS5jLGUuYz10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMSxuLGUuYykpfWZ1bmN0aW9uIGc3ZShlLHQpe3ZhciBuO249ZS5kLGUuZD10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMSxuLGUuZCkpfWZ1bmN0aW9uIEd3bihlLHQsbil7dmFyIHI7ZS5iPXQsZS5hPW4scj0oZS5hJjUxMik9PTUxMj9uZXcgZ0plOm5ldyBKJCxlLmM9YVNuKHIsZS5iLGUuYSl9ZnVuY3Rpb24gb2Z0KGUsdCl7cmV0dXJuIHVwKGUuZSx0KT8oRm8oKSxWb2UodCk/bmV3IG5IKHQsZSk6bmV3IHlPKHQsZSkpOm5ldyBQdHQodCxlKX1mdW5jdGlvbiBLd24oZSl7dmFyIHQsbjtyZXR1cm4gMD5lP25ldyBiM2U6KHQ9ZSsxLG49bmV3IHd1dCh0LGUpLG5ldyBVeWUobnVsbCxuKSl9ZnVuY3Rpb24gV3duKGUsdCl7Q24oKTt2YXIgbjtyZXR1cm4gbj1uZXcgTjgoMSksSWEoZSk/cmMobixlLHQpOmp1KG4uZixlLHQpLG5ldyB0cihuKX1mdW5jdGlvbiBZd24oZSx0KXt2YXIgbixyO3JldHVybiBuPWUuYyxyPXQuZVtlLnBdLHI+MD9sKGp0KG4uYSxyLTEpLDEwKTpudWxsfWZ1bmN0aW9uIFh3bihlLHQpe3ZhciBuLHI7cmV0dXJuIG49ZS5vK2UucCxyPXQubyt0LnAsbjxyPy0xOm49PXI/MDoxfWZ1bmN0aW9uIFF3bihlKXt2YXIgdDtyZXR1cm4gdD1RKGUsKGZ0KCksemkpKSxEZSh0LDE2Nyk/QzF0KGwodCwxNjcpKTpudWxsfWZ1bmN0aW9uIGNmdChlKXt2YXIgdDtyZXR1cm4gZT1iLk1hdGgubWF4KGUsMiksdD1QN2UoZSksZT50Pyh0PDw9MSx0PjA/dDpyTCk6dH1mdW5jdGlvbiB0Y2UoZSl7c3dpdGNoKEN5ZShlLmUhPTMpLGUuZSl7Y2FzZSAyOnJldHVybiExO2Nhc2UgMDpyZXR1cm4hMH1yZXR1cm4gc3ZuKGUpfWZ1bmN0aW9uIHVmdChlLHQpe3ZhciBuO3JldHVybiBEZSh0LDgpPyhuPWwodCw4KSxlLmE9PW4uYSYmZS5iPT1uLmIpOiExfWZ1bmN0aW9uIEp3bihlLHQpe3ZhciBuO249bmV3IE90LGwodC5iLDY4KSxsKHQuYiw2OCksbCh0LmIsNjgpLFZ1KHQuYSxuZXcgazRlKGUsbix0KSl9ZnVuY3Rpb24gbGZ0KGUsdCl7dmFyIG4scjtmb3Iocj10LnZjKCkuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksNDQpLEdOKGUsbi5sZCgpLG4ubWQoKSl9ZnVuY3Rpb24gcDdlKGUsdCl7dmFyIG47bj1lLmQsZS5kPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwxMSxuLGUuZCkpfWZ1bmN0aW9uIHhWKGUsdCl7dmFyIG47bj1lLmosZS5qPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwxMyxuLGUuaikpfWZ1bmN0aW9uIGI3ZShlLHQpe3ZhciBuO249ZS5iLGUuYj10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMjEsbixlLmIpKX1mdW5jdGlvbiBad24oZSx0KXsoVUgoKSxHMT9udWxsOnQuYykubGVuZ3RoPT0wJiZTcnQodCxuZXcgRHQpLHJjKGUuYSxHMT9udWxsOnQuYyx0KX1mdW5jdGlvbiBlM24oZSx0KXt0LlVnKCJIaWVyYXJjaGljYWwgcG9ydCBjb25zdHJhaW50IHByb2Nlc3NpbmciLDEpLHY2bihlKSxSSW4oZSksdC5WZygpfWZ1bmN0aW9uIE93KCl7T3c9VSxvMz1uZXcgdnNlKCJTVEFSVCIsMCksUmI9bmV3IHZzZSgiTUlERExFIiwxKSxhMz1uZXcgdnNlKCJFTkQiLDIpfWZ1bmN0aW9uIGtWKCl7a1Y9VSwkVz1uZXcgVTNlKCJQMV9OT0RFX1BMQUNFTUVOVCIsMCksWDY9bmV3IFUzZSgiUDJfRURHRV9ST1VUSU5HIiwxKX1mdW5jdGlvbiBiYigpe2JiPVUsSHg9bmV3IFVpKE5FZSksRUs9bmV3IFVpKEMzdCksJEw9bmV3IFVpKFMzdCksaEI9bmV3IFVpKF8zdCl9ZnVuY3Rpb24gTncoZSl7dmFyIHQ7cmV0dXJuIHBhZShlLmYuZyxlLmQpLG1yKGUuYiksZS5jPWUuYSx0PWwoZS5hLlBiKCksNDQpLGUuYj1MN2UoZSksdH1mdW5jdGlvbiBtN2UoZSl7dmFyIHQ7cmV0dXJuIGUuYj09bnVsbD8oV3AoKSxXcCgpLGRGKToodD1lLnVsKCk/ZS50bCgpOmUuc2woKSx0KX1mdW5jdGlvbiBoZnQoZSx0KXt2YXIgbjtyZXR1cm4gbj10PT1udWxsPy0xOmdjKGUuYix0LDApLG48MD8hMToocmNlKGUsbiksITApfWZ1bmN0aW9uIGQwKGUsdCl7dmFyIG47cmV0dXJuIG5yKHQpLG49dC5nLGUuYltuXT8hMTooVHMoZS5iLG4sdCksKytlLmMsITApfWZ1bmN0aW9uIEVWKGUsdCl7dmFyIG4scjtyZXR1cm4gbj0xLXQscj1lLmFbbl0sZS5hW25dPXIuYVt0XSxyLmFbdF09ZSxlLmI9ITAsci5iPSExLHJ9ZnVuY3Rpb24gdDNuKGUsdCl7dmFyIG4scjtmb3Iocj10LktjKCk7ci5PYigpOyluPWwoci5QYigpLDI3MiksZS5iPSEwLG5hKGUuZSxuKSxuLmI9ZX1mdW5jdGlvbiBuM24oZSx0KXt2YXIgbixyO3JldHVybiBuPWwoUShlLChOdCgpLHc0KSksOCkscj1sKFEodCx3NCksOCksWWkobi5iLHIuYil9ZnVuY3Rpb24gbmNlKGUsdCxuKXt2YXIgcixhLG87cmV0dXJuIG89dD4+NSxhPXQmMzEscj12YSh1YihlLm5bbl1bb10sWXIobDAoYSwxKSkpLDMpLHJ9ZnVuY3Rpb24gZmZ0KGUsdCxuKXt2YXIgcixhLG87Zm9yKG89ZS5hLmxlbmd0aC0xLGE9ZS5iLHI9MDtyPG47YT1hKzEmbywrK3IpVHModCxyLGUuYVthXSl9ZnVuY3Rpb24gcmNlKGUsdCl7dmFyIG47bj10MihlLmIsZS5iLmMubGVuZ3RoLTEpLHQ8ZS5iLmMubGVuZ3RoJiYocmYoZS5iLHQsbiksUHB0KGUsdCkpfWZ1bmN0aW9uIGRmdChlLHQpe3ZhciBuO3JldHVybiBuPWwoY3IoZS5jLHQpLDQ2Nyksbnx8KG49bmV3IFdRZSxuLmM9dCxraShlLmMsbi5jLG4pKSxufWZ1bmN0aW9uIHIzbihlLHQpe3ZhciBuLHI7cj1uZXcgYnQsbj10O2RvICRuKHIuYyxuKSxuPWwoY3IoZS5rLG4pLDE4KTt3aGlsZShuKTtyZXR1cm4gcn1mdW5jdGlvbiBpY2UoZSx0LG4pe3ZhciByO3JldHVybiByPW5ldyBidCxXOWUoZSx0LHIsbiwhMCwhMCksZS5iPW5ldyBUVihyLmMubGVuZ3RoKSxyfWZ1bmN0aW9uICRtKGUsdCl7dmFyIG4scjtmb3Iobj1lLlBjKCksbkUobiwwLG4ubGVuZ3RoLHQpLHI9MDtyPG4ubGVuZ3RoO3IrKyllLmhkKHIsbltyXSl9ZnVuY3Rpb24gdjdlKGUpe3ZhciB0LG47Zm9yKG49bmV3IG9yKGUpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwyNyksVXUodCwwKSxHdSh0LDApfWZ1bmN0aW9uIGdmdChlKXt0aGlzLmU9ZSx0aGlzLmQ9bmV3IEt6KEF5KFc4KHRoaXMuZSkuZ2MoKSkpLHRoaXMuYz10aGlzLmUuYSx0aGlzLmI9dGhpcy5lLmN9ZnVuY3Rpb24gVFYoZSl7dGhpcy5iPWUsdGhpcy5hPVdlKFZyLGRpLDI4LGUrMSwxNSwxKSx0aGlzLmM9V2UoVnIsZGksMjgsZSwxNSwxKSx0aGlzLmQ9MH1mdW5jdGlvbiBwZnQoZSx0LG4pe19odC5jYWxsKHRoaXMsdCxuKSx0aGlzLmQ9V2Uod2csbTIsMTAsZS5hLmMubGVuZ3RoLDAsMSksajEoZS5hLHRoaXMuZCl9ZnVuY3Rpb24gYmZ0KGUsdCxuKXtuNmUuY2FsbCh0aGlzLGUsdCxuKSx0aGlzLmE9bmV3IFByLHRoaXMuYj1uZXcgUHIsdGhpcy5kPW5ldyB6WWUodGhpcyl9ZnVuY3Rpb24gbWZ0KGUpe1g0ZS5jYWxsKHRoaXMpLHRoaXMuYj16ZShHZShRKGUsKE50KCkseDApKSkpLHRoaXMuYT1sKFEoZSxicCksMjIzKX1mdW5jdGlvbiBzY2UoZSx0KXt2YXIgbjtyZXR1cm4gRGUodCwxNik/KG49bCh0LDE2KSxlLkdjKG4pKTpHb2UoZSxsKFhyKHQpLDIwKS5LYygpKX1mdW5jdGlvbiBpM24oZSx0KXtJcyhGaShuZXcgYm4obnVsbCxuZXcga24obmV3IGJyKGUuYiksMSkpLG5ldyB1dHQoZSx0KSksbmV3IGh0dChlLHQpKX1mdW5jdGlvbiBzM24oZSx0KXt0LlVnKHEzdCwxKSxJcyhEYyhuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IEtKKSxuZXcgV0opLHQuVmcoKX1mdW5jdGlvbiBlcyhlKXtyZXR1cm4gSWEoZSk/czIoZSk6ZnkoZSk/ajgoZSk6aHkoZSk/QXJ0KGUpOnQ1ZShlKT9lLkhiKCk6VzRlKGUpP2Z3KGUpOkY1ZShlKX1mdW5jdGlvbiB2ZnQoZSl7dmFyIHQsbjtmb3Iobj1lLmMuYS5lYygpLktjKCk7bi5PYigpOyl0PWwobi5QYigpLDIxOSksTSh0LG5ldyBGc3QodC5mKSl9ZnVuY3Rpb24gdzdlKGUpe3ZhciB0LG47Zm9yKG49ZS5jLmEuZWMoKS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSwyMTkpLE8odCxuZXcgUWd0KHQuZSkpfWZ1bmN0aW9uIEZ1KGUsdCl7dmFyIG47bj1lLnpiLGUuemI9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDEsbixlLnpiKSl9ZnVuY3Rpb24gQ1YoZSx0KXt2YXIgbjtuPWUueGIsZS54Yj10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMyxuLGUueGIpKX1mdW5jdGlvbiBTVihlLHQpe3ZhciBuO249ZS55YixlLnliPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwyLG4sZS55YikpfWZ1bmN0aW9uIFNzKGUsdCl7dmFyIG4scjtuPShyPW5ldyB6aWUsciksbi5uPXQscXIoKCFlLnMmJihlLnM9bmV3IG50KGRsLGUsMjEsMTcpKSxlLnMpLG4pfWZ1bmN0aW9uIGlzKGUsdCl7dmFyIG4scjtyPShuPW5ldyBIeWUsbiksci5uPXQscXIoKCFlLnMmJihlLnM9bmV3IG50KGRsLGUsMjEsMTcpKSxlLnMpLHIpfWZ1bmN0aW9uIEthKGUsdCl7dmFyIG4scixhO2Zvcihucih0KSxuPSExLGE9dC5LYygpO2EuT2IoKTspcj1hLlBiKCksbj1ufGUuRmMocik7cmV0dXJuIG59ZnVuY3Rpb24gd2Z0KGUpe3ZhciB0LG4scjtmb3IodD0wLHI9ZS5LYygpO3IuT2IoKTspbj1yLlBiKCksdCs9biE9bnVsbD9lcyhuKTowLHQ9fn50O3JldHVybiB0fWZ1bmN0aW9uIGFjZShlLHQpe3ZhciBuPWUuYSxyPTA7Zm9yKHZhciBhIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShhKSYmKHRbcisrXT1hKTtyZXR1cm4gdH1mdW5jdGlvbiB5ZnQoZSl7dmFyIHQ7cmV0dXJuIGU9PTA/IlVUQyI6KGU8MD8oZT0tZSx0PSJVVEMrIik6dD0iVVRDLSIsdCtKbHQoZSkpfWZ1bmN0aW9uIHk3ZShlKXtyZXR1cm4gZS5hPDU0P2UuZjwwPy0xOmUuZj4wPzE6MDooIWUuYyYmKGUuYz1YTyhaYyhlLmYpKSksZS5jKS5lfWZ1bmN0aW9uIHhmdChlLHQpe3Q/ZS5CPT1udWxsJiYoZS5CPWUuRCxlLkQ9bnVsbCk6ZS5CIT1udWxsJiYoZS5EPWUuQixlLkI9bnVsbCl9ZnVuY3Rpb24gYTNuKGUsdCl7cmV0dXJuIHdFKCksZT09czMmJnQ9PW80fHxlPT1vNCYmdD09czN8fGU9PU02JiZ0PT1hNHx8ZT09YTQmJnQ9PU02fWZ1bmN0aW9uIG8zbihlLHQpe3JldHVybiB3RSgpLGU9PXMzJiZ0PT1hNHx8ZT09czMmJnQ9PU02fHxlPT1vNCYmdD09TTZ8fGU9PW80JiZ0PT1hNH1mdW5jdGlvbiBrZnQoZSx0KXtyZXR1cm4gQTEoKSxmMChIMSksYi5NYXRoLmFicygwLXQpPD1IMXx8dD09MHx8aXNOYU4oMCkmJmlzTmFOKHQpPzA6ZS90fWZ1bmN0aW9uIEVmdChlLHQpe3JldHVybiB6ZShHZShmaChPTihmYyhuZXcgYm4obnVsbCxuZXcga24oZS5jLmIsMTYpKSxuZXcgQVllKGUpKSx0KSkpKX1mdW5jdGlvbiB4N2UoZSx0KXtyZXR1cm4gemUoR2UoZmgoT04oZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuYy5iLDE2KSksbmV3IF9ZZShlKSksdCkpKSl9ZnVuY3Rpb24gYzNuKCl7cmV0dXJuIEhvKCksaGUobGUoRjFlLDEpLGl0LDI1OSwwLFtlVyx2ZixVTCx0VywkVCxCNixHTCxSVCxqVCxuV10pfWZ1bmN0aW9uIHUzbigpe3JldHVybiBOZigpLGhlKGxlKFREZSwxKSxpdCwyNDMsMCxbQVcsQUIsTEIseERlLGtEZSx5RGUsRURlLExXLHYzLHg0XSl9ZnVuY3Rpb24gbDNuKGUsdCl7dmFyIG47dC5VZygiR2VuZXJhbCBDb21wYWN0b3IiLDEpLG49cDVuKGwoYXQoZSwoU2IoKSxaZGUpKSwzOTMpKSxuLkNnKGUpfWZ1bmN0aW9uIGgzbihlLHQpe3ZhciBuLHI7cmV0dXJuIG49bChhdChlLChTYigpLHFXKSksMTcpLHI9bChhdCh0LHFXKSwxNykscnUobi5hLHIuYSl9ZnVuY3Rpb24gazdlKGUsdCxuKXt2YXIgcixhO2ZvcihhPVJyKGUsMCk7YS5iIT1hLmQuYzspcj1sKEJyKGEpLDgpLHIuYSs9dCxyLmIrPW47cmV0dXJuIGV9ZnVuY3Rpb24gZ0EoZSx0LG4pe3ZhciByO2ZvcihyPWUuYltuJmUuZl07cjtyPXIuYilpZihuPT1yLmEmJnlkKHQsci5nKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBwQShlLHQsbil7dmFyIHI7Zm9yKHI9ZS5jW24mZS5mXTtyO3I9ci5kKWlmKG49PXIuZiYmeWQodCxyLmkpKXJldHVybiByO3JldHVybiBudWxsfWZ1bmN0aW9uIGYzbihlLHQsbil7dmFyIHIsYSxvO2ZvcihyPTAsYT0wO2E8bjthKyspbz10W2FdLGVbYV09bzw8MXxyLHI9bz4+PjMxO3IhPTAmJihlW25dPXIpfWZ1bmN0aW9uIG9jZShlLHQsbixyLGEsbyl7dmFyIGY7dGhpcy5jPWUsZj1uZXcgYnQsdHhlKGUsZix0LGUuYixuLHIsYSxvKSx0aGlzLmE9bmV3IFVhKGYsMCl9ZnVuY3Rpb24gVGZ0KCl7dGhpcy5jPW5ldyBXeigwKSx0aGlzLmI9bmV3IFd6KGxDZSksdGhpcy5kPW5ldyBXeihoeXQpLHRoaXMuYT1uZXcgV3ooTGhlKX1mdW5jdGlvbiBvZihlLHQsbixyLGEsbyxmKXtVci5jYWxsKHRoaXMsZSx0KSx0aGlzLmQ9bix0aGlzLmU9cix0aGlzLmM9YSx0aGlzLmI9byx0aGlzLmE9TzEoZil9ZnVuY3Rpb24gT3MoZSx0LG4scixhLG8sZixnLHcsRSxDLEwsQil7cmV0dXJuIExwdChlLHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCKSwkY2UoZSwhMSksZX1mdW5jdGlvbiBkM24oZSl7cmV0dXJuIGUuYi5jLmkuaz09KFpuKCksVXMpP2woUShlLmIuYy5pLChmdCgpLHppKSksMTIpOmUuYi5jfWZ1bmN0aW9uIENmdChlKXtyZXR1cm4gZS5iLmQuaS5rPT0oWm4oKSxVcyk/bChRKGUuYi5kLmksKGZ0KCksemkpKSwxMik6ZS5iLmR9ZnVuY3Rpb24gZzNuKGUpe3ZhciB0O3JldHVybiB0PWpIKGUpLGN3KHQuYSwwKT8oSnooKSxKeigpLEE2dCk6KEp6KCksbmV3IGFydCh0LmIpKX1mdW5jdGlvbiBjY2UoZSl7dmFyIHQ7cmV0dXJuIHQ9ZTZlKGUpLGN3KHQuYSwwKT8oY3koKSxjeSgpLEkwZSk6KGN5KCksbmV3IHNhZSh0LmIpKX1mdW5jdGlvbiB1Y2UoZSl7dmFyIHQ7cmV0dXJuIHQ9ZTZlKGUpLGN3KHQuYSwwKT8oY3koKSxjeSgpLEkwZSk6KGN5KCksbmV3IHNhZSh0LmMpKX1mdW5jdGlvbiBTZnQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAyOnJldHVybiBDdCgpLGVyO2Nhc2UgNDpyZXR1cm4gQ3QoKSxhcjtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBfZnQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBDdCgpLERyO2Nhc2UgMzpyZXR1cm4gQ3QoKSxRbjtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBBZnQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcgTW5lO2Nhc2UgMTpyZXR1cm4gbmV3IERuZTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBseCgpe2x4PVUsZzFlPW5ldyB2cygiZWRnZWxhYmVsY2VudGVyZWRuZXNzYW5hbHlzaXMuaW5jbHVkZWxhYmVsIiwoSG4oKSxQYikpfWZ1bmN0aW9uIEU3ZSgpe0U3ZT1VLENFdD1UZChZdHQoZmkoZmkobmV3IFhzLCh1bygpLGJ1KSwodm8oKSxQSykpLF91LE1LKSxtYyksTkspfWZ1bmN0aW9uIExmdCgpe0xmdD1VLExFdD1UZChZdHQoZmkoZmkobmV3IFhzLCh1bygpLGJ1KSwodm8oKSxQSykpLF91LE1LKSxtYyksTkspfWZ1bmN0aW9uIGxjZSgpe2xjZT1VLHFNPW5ldyB1SmUsbnBlPWhlKGxlKGRsLDEpLFM2LDE3OSwwLFtdKSxYX3Q9aGUobGUoVWYsMSksTFNlLDYyLDAsW10pfWZ1bmN0aW9uIGRFKCl7ZEU9VSxkQj1uZXcgSTNlKCJUT19JTlRFUk5BTF9MVFIiLDApLGgxZT1uZXcgSTNlKCJUT19JTlBVVF9ESVJFQ1RJT04iLDEpfWZ1bmN0aW9uIGtsKCl7a2w9VSxFQWU9bmV3IEsyLHhBZT1uZXcgSjMsa0FlPW5ldyBISix5QWU9bmV3IHdtLFRBZT1uZXcgVkosQ0FlPW5ldyBVSn1mdW5jdGlvbiBwM24oZSx0KXt0LlVnKHEzdCwxKSxTOGUoWnVuKG5ldyBlXygoZ18oKSxuZXcgSmFlKGUsITEsITEsbmV3IGNTKSkpKSksdC5WZygpfWZ1bmN0aW9uIGIzbihlLHQsbil7bi5VZygiREZTIFRyZWVpZnlpbmcgcGhhc2UiLDEpLE81bihlLHQpLERDbihlLHQpLGUuYT1udWxsLGUuYj1udWxsLG4uVmcoKX1mdW5jdGlvbiB2TihlLHQpe3JldHVybiBIbigpLElhKGUpP0U2ZShlLGVpKHQpKTpmeShlKT9OYWUoZSxHZSh0KSk6aHkoZSk/YWduKGUsQnQodCkpOmUuRmQodCl9ZnVuY3Rpb24gYkEoZSx0KXt2YXIgbixyO2Zvcihucih0KSxyPXQudmMoKS5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSw0NCksZS56YyhuLmxkKCksbi5tZCgpKX1mdW5jdGlvbiBtM24oZSx0LG4pe3ZhciByO2ZvcihyPW4uS2MoKTtyLk9iKCk7KWlmKCFxSChlLHQsci5QYigpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB2M24oZSx0LG4scixhKXt2YXIgbztyZXR1cm4gbiYmKG89bXModC5EaCgpLGUuYyksYT1uLlJoKHQsLTEtKG89PS0xP3I6byksbnVsbCxhKSksYX1mdW5jdGlvbiB3M24oZSx0LG4scixhKXt2YXIgbztyZXR1cm4gbiYmKG89bXModC5EaCgpLGUuYyksYT1uLlRoKHQsLTEtKG89PS0xP3I6byksbnVsbCxhKSksYX1mdW5jdGlvbiBNZnQoZSl7dmFyIHQ7aWYoZS5iPT0tMil7aWYoZS5lPT0wKXQ9LTE7ZWxzZSBmb3IodD0wO2UuYVt0XT09MDt0KyspO2UuYj10fXJldHVybiBlLmJ9ZnVuY3Rpb24geTNuKGUpe2lmKG5yKGUpLGUubGVuZ3RoPT0wKXRocm93IHVlKG5ldyBnZCgiWmVybyBsZW5ndGggQmlnSW50ZWdlciIpKTtTX24odGhpcyxlKX1mdW5jdGlvbiBUN2UoZSl7dGhpcy5pPWUuZ2MoKSx0aGlzLmk+MCYmKHRoaXMuZz10aGlzLmFqKHRoaXMuaSsodGhpcy5pLzh8MCkrMSksZS5RYyh0aGlzLmcpKX1mdW5jdGlvbiBEZnQoZSx0LG4pe3RoaXMuZz1lLHRoaXMuZD10LHRoaXMuZT1uLHRoaXMuYT1uZXcgYnQsSWtuKHRoaXMpLENuKCksVnModGhpcy5hLG51bGwpfWZ1bmN0aW9uIEM3ZShlLHQpe3QucT1lLGUuZD1iLk1hdGgubWF4KGUuZCx0LnIpLGUuYis9dC5kKyhlLmEuYy5sZW5ndGg9PTA/MDplLmMpLHZ0KGUuYSx0KX1mdW5jdGlvbiBnRShlLHQpe3ZhciBuLHIsYSxvO3JldHVybiBhPWUuYyxuPWUuYytlLmIsbz1lLmQscj1lLmQrZS5hLHQuYT5hJiZ0LmE8biYmdC5iPm8mJnQuYjxyfWZ1bmN0aW9uIER5KGUsdCl7dmFyIG4scjtmb3Iocj1ScihlLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw4KSxuLmErPXQuYSxuLmIrPXQuYjtyZXR1cm4gZX1mdW5jdGlvbiB4M24oZSl7dmFyIHQsbixyO2ZvcihyPTAsbj1uZXcgRyhlLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwzMCksdC5wPXIsKytyfWZ1bmN0aW9uIGszbihlKXt2YXIgdCxuLHI7cmV0dXJuIGUuaj09KEN0KCksUW4pJiYodD12MnQoZSksbj12bCh0LGFyKSxyPXZsKHQsZXIpLHJ8fHImJm4pfWZ1bmN0aW9uIEUzbihlLHQpe3ZhciBuO3JldHVybiBuPSR4ZShlKSxtOWUobmV3IGx0KG4uYyxuLmQpLG5ldyBsdChuLmIsbi5hKSxlLk1mKCksdCxlLmFnKCkpfWZ1bmN0aW9uIFM3ZShlLHQpe3ZhciBuO249bCh0LDE5MCksTm0obiwieCIsZS5pKSxObShuLCJ5IixlLmopLE5tKG4sVWZlLGUuZyksTm0obixWZmUsZS5mKX1mdW5jdGlvbiBfVihlLHQpe3ZhciBuO0RlKHQsODUpPyhsKGUuYyw3OSkuR2soKSxuPWwodCw4NSksbGZ0KGUsbikpOmwoZS5jLDc5KS5XYih0KX1mdW5jdGlvbiBtQShlLHQpe3ZhciBuLHI7Zm9yKG5yKHQpLHI9ZS52YygpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDQ0KSx0LllkKG4ubGQoKSxuLm1kKCkpfWZ1bmN0aW9uIFQzbihlLHQpe3ZhciBuO2ZvcihYcih0KTtlLk9iKCk7KWlmKG49ZS5QYigpLCFBN2UobChuLDEwKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQzNuKCl7dmFyIGU7cmV0dXJuIEYwZXx8KEYwZT1uZXcgRlFlLGU9bmV3IFNvZSgiIiksJGxuKGUsKERrKCksd19lKSksWnduKEYwZSxlKSksRjBlfWZ1bmN0aW9uIElmdChlLHQpe3JldHVybiBTeShuZXcgZWIoZSksbmV3IEcwKHQpLG5ldyB6cCh0KSxuZXcgYW8saGUobGUob2MsMSksaXQsMTA4LDAsW10pKX1mdW5jdGlvbiBBVigpe0FWPVUsbmdlPW5ldyBQc2UoSWQsMCksVUllPW5ldyBQc2UoIlBPTEFSX0NPT1JESU5BVEUiLDEpLFZJZT1uZXcgUHNlKCJJRCIsMil9ZnVuY3Rpb24gTFYoKXtMVj1VLEFEZT1uZXcgU3NlKCJFUVVBTExZIiwwKSxUZGU9bmV3IFNzZShuRywxKSxMRGU9bmV3IFNzZSgiTk9SVEhfU09VVEgiLDIpfWZ1bmN0aW9uIHBFKCl7cEU9VSxqTD1uZXcgdnMoImRlYnVnU1ZHIiwoSG4oKSwhMSkpLFZfZT1uZXcgdnMoIm92ZXJsYXBzRXhpc3RlZCIsITApfWZ1bmN0aW9uIE9mdCgpe09mdD1VLHlTdD1LcigoZzIoKSxoZShsZSh3U3QsMSksaXQsMjg1LDAsW1ZPZSx5YSxUYyxKNixmbyxwcyx0OSxYMV0pKSl9ZnVuY3Rpb24gTmZ0KCl7TmZ0PVUsTF90PUtyKChIRSgpLGhlKGxlKHhZLDEpLGl0LDI0NSwwLFtKZ2Usd1kseVksdlksUWdlLG1ZLGJZLFhnZV0pKSl9ZnVuY3Rpb24gUGZ0KCl7UGZ0PVUsbHh0PUtyKChPVSgpLGhlKGxlKHVMZSwxKSxpdCwyNzYsMCxbdzFlLGsxZSx2MWUsQzFlLHgxZSx5MWUsVDFlLEUxZV0pKSl9ZnVuY3Rpb24gQmZ0KCl7cmV0dXJuIFdBKCksaGUobGUoQU9uLDEpLGl0LDI2MiwwLFtEZGUsR0RlLFhEZSxRRGUsWURlLFVEZSxKRGUsSERlLFdEZSxLRGUsVkRlXSl9ZnVuY3Rpb24gem0oZSx0LG4pe3ZhciByLGE7cmV0dXJuIGE9bChIXyhlLmQsdCksMTcpLHI9bChIXyhlLmIsbiksMTcpLCFhfHwhcj9udWxsOm94KGUsYS5hLHIuYSl9ZnVuY3Rpb24gRmZ0KGUsdCl7dmFyIG47cmV0dXJuIG49aWxlKGhFKCksZSksbj8oSGkodCwocGkoKSxhNyksbiksITApOiExfWZ1bmN0aW9uIFJmdChlKXtyZXR1cm4gcHkoKSxlLkEuSGMoKG1oKCksQTQpKSYmIWUuQi5IYygoWmwoKSxhRikpP04xdChlKTpudWxsfWZ1bmN0aW9uIGpmdCgpe3RoaXMuYT1sKEl0KChiMCgpLHhLKSksMTcpLmEsdGhpcy5jPXplKEdlKEl0KGtLKSkpLHRoaXMuYj16ZShHZShJdChKMGUpKSl9ZnVuY3Rpb24gcW0oZSl7dGhpcy5mPWUsdGhpcy5lPW5ldyBoNmUodGhpcy5mLmkpLHRoaXMuYT10aGlzLmUsdGhpcy5iPUw3ZSh0aGlzKSx0aGlzLmQ9dGhpcy5mLmd9ZnVuY3Rpb24gTHMoZSx0KXtKcS5jYWxsKHRoaXMsUV90LGUsdCksdGhpcy5iPXRoaXMsdGhpcy5hPVd1KGUuRGgoKSxNbih0aGlzLmUuRGgoKSx0aGlzLmMpKX1mdW5jdGlvbiBTM24oZSx0KXt2YXIgbixyO2ZvcihyPW5ldyBHKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDMwKSxlLmFbbi5wXT1zOW4obil9ZnVuY3Rpb24gRGgoZSx0KXt2YXIgbjtmb3Iobj0wO248dC5qLmMubGVuZ3RoO24rKylsKGhOKGUsbiksMjEpLkdjKGwoaE4odCxuKSwxNikpO3JldHVybiBlfWZ1bmN0aW9uIGhjZShlLHQsbixyKXt2YXIgYTthPWUuYS5sZW5ndGgsbj5hP249YTpYbih0LG4rMSksZS5hPXRmKGUuYSwwLHQpKygiIityKSt3NWUoZS5hLG4pfWZ1bmN0aW9uICRmdChlLHQpe2UuYT1ibyhlLmEsMSksZS5jPWIuTWF0aC5taW4oZS5jLHQpLGUuYj1iLk1hdGgubWF4KGUuYix0KSxlLmQ9Ym8oZS5kLHQpfWZ1bmN0aW9uIF8zbihlLHQpe3JldHVybiB0PGUuYi5nYygpP2woZS5iLlhiKHQpLDEwKTp0PT1lLmIuZ2MoKT9lLmE6bChqdChlLmUsdC1lLmIuZ2MoKS0xKSwxMCl9ZnVuY3Rpb24gQTNuKGUsdCxuKXtyZXR1cm4gWWkoejgoQkUoZSksbmV3IGx0KHQuZS5hLHQuZS5iKSksejgoQkUoZSksbmV3IGx0KG4uZS5hLG4uZS5iKSkpfWZ1bmN0aW9uIEwzbihlLHQsbil7cmV0dXJuIGU9PShJdygpLE1XKT9uZXcgSGVlOkpsKHQsMSkhPTA/bmV3IG8zZShuLmxlbmd0aCk6bmV3IEtKZShuLmxlbmd0aCl9ZnVuY3Rpb24gTmkoZSx0KXt2YXIgbixyLGE7aWYobj1lLnRoKCksbiE9bnVsbCYmZS53aCgpKWZvcihyPTAsYT1uLmxlbmd0aDtyPGE7KytyKW5bcl0uZGoodCl9ZnVuY3Rpb24gTTNuKGUsdCl7dmFyIG4scixhO2ZvcihuPWUuYy5YZSgpLGE9dC5LYygpO2EuT2IoKTspcj1hLlBiKCksZS5hLllkKG4scik7cmV0dXJuIGUuYi5LYihuKX1mdW5jdGlvbiBiRShlLHQpe3ZhciBuLHI7Zm9yKG49ZSxyPWVvKG4pLmU7cjspe2lmKG49cixuPT10KXJldHVybiEwO3I9ZW8obikuZX1yZXR1cm4hMX1mdW5jdGlvbiBtYihlKXt2YXIgdDtyZXR1cm4gdD1lLmgsdD09MD9lLmwrZS5tKkx4OnQ9PWhwP2UubCtlLm0qTHgtWm06ZX1mdW5jdGlvbiBEM24oZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9ZS5hLmZbdC5wXSxhPWUuYS5mW24ucF0scjxhPy0xOnI9PWE/MDoxfWZ1bmN0aW9uIEkzbihlLHQpe3ZhciBuLHI7Zm9yKHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDcyKSx2dChlLmQsbiksZTluKGUsbil9ZnVuY3Rpb24gTzNuKGUsdCl7dmFyIG47dC5VZygiRWRnZSBhbmQgbGF5ZXIgY29uc3RyYWludCBlZGdlIHJldmVyc2FsIiwxKSxuPXFTbihlKSx3RG4obiksdC5WZygpfWZ1bmN0aW9uIE4zbihlLHQpe3ZhciBuLHI7Zm9yKHI9bmV3IG9yKGUpO3IuZSE9ci5pLmdjKCk7KW49bChncihyKSwyNyksUWgobixuLmkrdC5iLG4uait0LmQpfWZ1bmN0aW9uIHpmdChlKXt2YXIgdDtlLmQ9PW51bGw/KCsrZS5lLGUuZj0wLFowdChudWxsKSk6KCsrZS5lLHQ9ZS5kLGUuZD1udWxsLGUuZj0wLFowdCh0KSl9ZnVuY3Rpb24gUDNuKGUpe3ZhciB0O2lmKGUuYT09ZS5iLmEpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gdD1lLmEsZS5jPXQsZS5hPWwoTGYoZS5hLmUpLDIyNyksdH1mdW5jdGlvbiBLbihlLHQpe3ZhciBuO3JldHVybiBlLkRiJnQ/KG49bXVlKGUsdCksbj09LTE/ZS5FYjpqbShlLkViKVtuXSk6bnVsbH1mdW5jdGlvbiBxYyhlLHQpe3ZhciBuLHI7cmV0dXJuIG49KHI9bmV3IGh6LHIpLG4uRz10LCFlLnJiJiYoZS5yYj1uZXcgd3koZSxsMSxlKSkscXIoZS5yYixuKSxufWZ1bmN0aW9uIFRpKGUsdCl7dmFyIG4scjtyZXR1cm4gbj0ocj1uZXcgRnosciksbi5HPXQsIWUucmImJihlLnJiPW5ldyB3eShlLGwxLGUpKSxxcihlLnJiLG4pLG59ZnVuY3Rpb24gcWZ0KGUsdCxuLHIpe0RlKGUuQ2IsMTg0KSYmKGwoZS5DYiwxODQpLnRiPW51bGwpLEZ1KGUsbiksdCYmSmtuKGUsdCksciYmZS5nbCghMCl9ZnVuY3Rpb24gSGZ0KGUsdCl7ZS5jJiYoc210KGUsdCwhMCksSXMobmV3IGJuKG51bGwsbmV3IGtuKHQsMTYpKSxuZXcgTlllKGUpKSksc210KGUsdCwhMSl9ZnVuY3Rpb24gQjNuKGUpe3BudCgpO3ZhciB0O3JldHVybiB2ZXQoTWRlLGUpfHwodD1uZXcgZHRlLHQuYT1lLHQ0ZShNZGUsZSx0KSksbChRbyhNZGUsZSksNjQ1KX1mdW5jdGlvbiBNVihlKXt2YXIgdDtpZihlLmc+MXx8ZS5PYigpKXJldHVybisrZS5hLGUuZz0wLHQ9ZS5pLGUuT2IoKSx0O3Rocm93IHVlKG5ldyBfYyl9ZnVuY3Rpb24gVmZ0KGUpe3N3aXRjaChlLmEuZyl7Y2FzZSAxOnJldHVybiBuZXcgWWV0O2Nhc2UgMzpyZXR1cm4gbmV3IFlkdDtkZWZhdWx0OnJldHVybiBuZXcgbmllfX1mdW5jdGlvbiBfN2UoZSx0KXtzd2l0Y2godCl7Y2FzZSAxOnJldHVybiEhZS5uJiZlLm4uaSE9MDtjYXNlIDI6cmV0dXJuIGUuayE9bnVsbH1yZXR1cm4gWjVlKGUsdCl9ZnVuY3Rpb24gWmMoZSl7cmV0dXJuIF9QPGUmJmU8Wm0/ZTwwP2IuTWF0aC5jZWlsKGUpOmIuTWF0aC5mbG9vcihlKTptYihsQ24oZSkpfWZ1bmN0aW9uIHdOKGUpe3ZhciB0O3JldHVybiBlPDEyOD8obnN0KCksdD1lX2VbZV0sIXQmJih0PWVfZVtlXT1uZXcgeXMoZSkpLHQpOm5ldyB5cyhlKX1mdW5jdGlvbiBGM24oZSx0KXt2YXIgbjt0cnl7dC5kZSgpfWNhdGNoKHIpe2lmKHI9YnMociksRGUociw4Mikpbj1yLCRuKGUuYyxuKTtlbHNlIHRocm93IHVlKHIpfX1mdW5jdGlvbiBNZihlKXt2YXIgdCxuLHIsYTtyZXR1cm4gYT1lLHI9MCxhPDAmJihhKz1abSxyPWhwKSxuPXVhKGEvTHgpLHQ9dWEoYS1uKkx4KSxxdSh0LG4scil9ZnVuY3Rpb24geU4oZSl7dmFyIHQsbixyO2ZvcihyPTAsbj1uZXcgUDgoZS5hKTtuLmE8bi5jLmEubGVuZ3RoOyl0PWNBKG4pLGUuYi5IYyh0KSYmKytyO3JldHVybiByfWZ1bmN0aW9uIFIzbihlKXt2YXIgdCxuLHI7Zm9yKHQ9MSxyPWUuS2MoKTtyLk9iKCk7KW49ci5QYigpLHQ9MzEqdCsobj09bnVsbD8wOmVzKG4pKSx0PX5+dDtyZXR1cm4gdH1mdW5jdGlvbiBwYyhlLHQpe3ZhciBuO3JldHVybiB0JiYobj10Lm5mKCksbi5kYygpfHwoZS5xP2JBKGUucSxuKTplLnE9bmV3IGp0dChuKSkpLGV9ZnVuY3Rpb24gVWZ0KGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hLmdldCh0KSxuPT09dm9pZCAwPysrZS5kOihEZm4oZS5hLHQpLC0tZS5jLCsrZS5iLmcpLG59ZnVuY3Rpb24gajNuKGUsdCl7dmFyIG4scixhO3JldHVybiBuPXQucC1lLnAsbj09MD8ocj1lLmYuYSplLmYuYixhPXQuZi5hKnQuZi5iLFlpKHIsYSkpOm59ZnVuY3Rpb24gJDNuKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1lLmoscj10LmosbiE9cj9uLmctci5nOmUucD09dC5wPzA6bj09KEN0KCksUW4pP2UucC10LnA6dC5wLWUucH1mdW5jdGlvbiB2QShlLHQsbixyLGEpe1RzKGUuY1t0LmddLG4uZyxyKSxUcyhlLmNbbi5nXSx0LmcsciksVHMoZS5iW3QuZ10sbi5nLGEpLFRzKGUuYltuLmddLHQuZyxhKX1mdW5jdGlvbiBIbShlLHQsbil7dGhpcy5iPShucihlKSxlKSx0aGlzLmQ9KG5yKHQpLHQpLHRoaXMuZT0obnIobiksbiksdGhpcy5jPXRoaXMuZCsoIiIrdGhpcy5lKX1mdW5jdGlvbiBtRShlLHQpe3RoaXMuYj1lLHRoaXMuZT10LHRoaXMuZD10LmosdGhpcy5mPShGbygpLGwoZSw2OSkueGsoKSksdGhpcy5rPVd1KHQuZS5EaCgpLGUpfWZ1bmN0aW9uIHhOKGUpe3RoaXMubj1uZXcgYnQsdGhpcy5lPW5ldyBvcyx0aGlzLmo9bmV3IG9zLHRoaXMuaz1uZXcgYnQsdGhpcy5mPW5ldyBidCx0aGlzLnA9ZX1mdW5jdGlvbiBHZnQoZSl7ZS5yPW5ldyBLcyxlLnc9bmV3IEtzLGUudD1uZXcgYnQsZS5pPW5ldyBidCxlLmQ9bmV3IEtzLGUuYT1uZXcgJDgsZS5jPW5ldyBQcn1mdW5jdGlvbiBQdygpe1B3PVUsaUI9bmV3IHVxKCJVUCIsMCksckI9bmV3IHVxKHdoZSwxKSxWMGU9bmV3IHVxKE14LDIpLFUwZT1uZXcgdXEoRHgsMyl9ZnVuY3Rpb24gdkUoKXt2RT1VLFIxZT1uZXcga3NlKCJPTkVfU0lERUQiLDApLGoxZT1uZXcga3NlKCJUV09fU0lERUQiLDEpLHZCPW5ldyBrc2UoIk9GRiIsMil9ZnVuY3Rpb24gZmNlKCl7ZmNlPVUsYk9lPW5ldyBXM2UoIkVRVUFMX0JFVFdFRU5fU1RSVUNUVVJFUyIsMCksbU9lPW5ldyBXM2UoIlRPX0FTUEVDVF9SQVRJTyIsMSl9ZnVuY3Rpb24gS2Z0KCl7S2Z0PVUsSmt0PUtyKChwMigpLGhlKGxlKHBEZSwxKSxpdCwyNjUsMCxbZ2RlLGZEZSxkRGUsZGRlLGhEZSxnRGUsQ1csV1QsWVRdKSkpfWZ1bmN0aW9uIFdmdCgpe1dmdD1VLGxfdD1LcigoWmwoKSxoZShsZShlUGUsMSksaXQsMjY0LDAsW2FDLGFGLHVZLEZNLGxZLGZZLGhZLEdnZSxzRl0pKSl9ZnVuY3Rpb24gWWZ0KCl7WWZ0PVUsZV90PUtyKChxeSgpLGhlKGxlKEtvLDEpLGl0LDk1LDAsW0UwLG1wLFQwLFMwLEVnLHFmLGpoLEMwLHpmXSkpKX1mdW5jdGlvbiBYZnQoKXtYZnQ9VSxWNnQ9S3IoKFBVKCksaGUobGUoJF9lLDEpLGl0LDI1NywwLFtqX2UsUF9lLEJfZSxOX2UsejBlLFJfZSxGX2UsT19lLElfZV0pKSl9ZnVuY3Rpb24gQTdlKGUpe3ZhciB0O3JldHVybiB0PWwoUShlLChmdCgpLFdjKSksNjQpLGUuaz09KFpuKCksVXMpJiYodD09KEN0KCksZXIpfHx0PT1hcil9ZnVuY3Rpb24gejNuKGUsdCxuKXt2YXIgcixhO2E9bChRKGUsKE50KCksY2MpKSw3NSksYSYmKHI9bmV3IGJsLEFjZShyLDAsYSksRHkocixuKSxLYSh0LHIpKX1mdW5jdGlvbiBEVihlLHQsbil7dmFyIHIsYSxvLGY7Zj1lbyhlKSxyPWYuZCxhPWYuYyxvPWUubix0JiYoby5hPW8uYS1yLmItYS5hKSxuJiYoby5iPW8uYi1yLmQtYS5iKX1mdW5jdGlvbiBxM24oZSx0KXt2YXIgbixyO3JldHVybiBuPWUuZi5jLmxlbmd0aCxyPXQuZi5jLmxlbmd0aCxuPHI/LTE6bj09cj8wOjF9ZnVuY3Rpb24gSDNuKGUpe3JldHVybiBlLmIuYy5sZW5ndGghPTAmJmwoanQoZS5iLDApLDcyKS5hP2woanQoZS5iLDApLDcyKS5hOlFhZShlKX1mdW5jdGlvbiBWM24oZSl7dmFyIHQ7aWYoZSl7aWYodD1lLHQuZGMoKSl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiB0LlhiKHQuZ2MoKS0xKX1yZXR1cm4gTm90KGUuS2MoKSl9ZnVuY3Rpb24gUWZ0KGUpe3ZhciB0O3JldHVybiBpdShlLDApPDAmJihlPU80ZShlKSksdD1Zcih1YihlLDMyKSksNjQtKHQhPTA/clAodCk6clAoWXIoZSkpKzMyKX1mdW5jdGlvbiBVM24oKXtyZXR1cm4gVUgoKSxHMT9uZXcgU29lKG51bGwpOnAydChDM24oKSwiY29tLmdvb2dsZS5jb21tb24uYmFzZS5TdHJpbmdzIil9ZnVuY3Rpb24gZGNlKGUsdCxuLHIpe3JldHVybiBuPT0xPyghZS5uJiYoZS5uPW5ldyBudChlYyxlLDEsNykpLFRvKGUubix0LHIpKTpXeGUoZSx0LG4scil9ZnVuY3Rpb24ga04oZSx0KXt2YXIgbixyO3JldHVybiByPShuPW5ldyBQUyxuKSxGdShyLHQpLHFyKCghZS5BJiYoZS5BPW5ldyBtbChadSxlLDcpKSxlLkEpLHIpLHJ9ZnVuY3Rpb24gRzNuKGUsdCxuKXt2YXIgcixhLG8sZjtyZXR1cm4gbz1udWxsLGY9dCxhPUF3KGYsV2ZlKSxyPW5ldyBwdHQoZSxuKSxvPShFOG4oci5hLHIuYixhKSxhKSxvfWZ1bmN0aW9uIGdjZShlKXt2YXIgdDtyZXR1cm4oIWUuYXx8IShlLkJiJjEpJiZlLmEuVmgoKSkmJih0PU9mKGUpLERlKHQsMTU2KSYmKGUuYT1sKHQsMTU2KSkpLGUuYX1mdW5jdGlvbiBFTihlLHQpe3ZhciBuLHI7Zm9yKG5yKHQpLHI9dC5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksIWUuSGMobikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gSzNuKGUsdCl7dmFyIG4scixhO3JldHVybiBuPWUubCt0Lmwscj1lLm0rdC5tKyhuPj4yMiksYT1lLmgrdC5oKyhyPj4yMikscXUobiZlaCxyJmVoLGEmaHApfWZ1bmN0aW9uIEpmdChlLHQpe3ZhciBuLHIsYTtyZXR1cm4gbj1lLmwtdC5sLHI9ZS5tLXQubSsobj4+MjIpLGE9ZS5oLXQuaCsocj4+MjIpLHF1KG4mZWgsciZlaCxhJmhwKX1mdW5jdGlvbiBXM24oZSl7dmFyIHQsbjtmb3IoekRuKGUpLG49bmV3IEcoZS5kKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTA1KSx0LmkmJkI5bih0KX1mdW5jdGlvbiBicyhlKXt2YXIgdDtyZXR1cm4gRGUoZSw4Mik/ZToodD1lJiZlLl9famF2YSRleGNlcHRpb24sdHx8KHQ9bmV3IFUwdChlKSxEUWUodCkpLHQpfWZ1bmN0aW9uIFROKGUpe2lmKERlKGUsMTkzKSlyZXR1cm4gbChlLDEyMyk7aWYoZSlyZXR1cm4gbnVsbDt0aHJvdyB1ZShuZXcgRDgoVDR0KSl9ZnVuY3Rpb24gTDdlKGUpe3JldHVybiBlLmEuT2IoKT8hMDplLmEhPWUuZT8hMTooZS5hPW5ldyBPNmUoZS5mLmYpLGUuYS5PYigpKX1mdW5jdGlvbiBaZnQoZSx0KXtpZih0PT1udWxsKXJldHVybiExO2Zvcig7ZS5hIT1lLmI7KWlmKFBpKHQsRlYoZSkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGUwdChlLHQpe3JldHVybiFlfHwhdHx8ZT09dD8hMTokMXQoZS5kLmMsdC5kLmMrdC5kLmIpJiYkMXQodC5kLmMsZS5kLmMrZS5kLmIpfWZ1bmN0aW9uIHJhKGUsdCl7dmFyIG4scjtyZXR1cm4gbj10LlBjKCkscj1uLmxlbmd0aCxyPT0wPyExOihNNGUoZS5jLGUuYy5sZW5ndGgsbiksITApfWZ1bmN0aW9uIFkzbihlLHQsbil7dmFyIHIsYTtmb3IoYT10LnZjKCkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksNDQpLGUueWMoci5sZCgpLHIubWQoKSxuKTtyZXR1cm4gZX1mdW5jdGlvbiBwY2UoZSl7dmFyIHQsbixyO2Zvcih0PW5ldyBvcyxyPVJyKGUuZCwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksNjUpLHVpKHQsbi5jKTtyZXR1cm4gdH1mdW5jdGlvbiB0MHQoZSx0KXt2YXIgbixyO2ZvcihyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDcyKSxydChuLChmdCgpLFl4KSx0KX1mdW5jdGlvbiBYM24oZSx0LG4pe3ZhciByLGE7Zm9yKGE9bmV3IEcoZS5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMjcpLFFoKHIsci5pK3Qsci5qK24pfWZ1bmN0aW9uIG4wdChlLHQpe2lmKCFlKXRocm93IHVlKG5ldyBZbihLQSgidmFsdWUgYWxyZWFkeSBwcmVzZW50OiAlcyIsaGUobGUod2EsMSksUm4sMSw1LFt0XSkpKSl9ZnVuY3Rpb24gUTNuKGUsdCxuLHIsYSl7cmV0dXJuIGg2KCksYi5NYXRoLm1pbihNdnQoZSx0LG4scixhKSxNdnQobixyLGUsdCxIcShuZXcgbHQoYS5hLGEuYikpKSl9ZnVuY3Rpb24gSjNuKGUsdCxuLHIpe2wobi5iLDY4KSxsKG4uYiw2OCksbChyLmIsNjgpLGwoci5iLDY4KSxsKHIuYiw2OCksVnUoci5hLG5ldyB4NGUoZSx0LHIpKX1mdW5jdGlvbiBaM24oZSx0KXtlLmQ9PShKcygpLHVjKXx8ZS5kPT13Zj9sKHQuYSw2MCkuYy5GYyhsKHQuYiw2MCkpOmwodC5iLDYwKS5jLkZjKGwodC5hLDYwKSl9ZnVuY3Rpb24gcjB0KGUsdCl7dmFyIG47cmV0dXJuIG49ZWcodC5hLmdjKCkpLElzKGxWKG5ldyBibihudWxsLG5ldyBrbih0LDEpKSxlLmkpLG5ldyBvdHQoZSxuKSksbn1mdW5jdGlvbiBpMHQoZSl7dmFyIHQsbjtyZXR1cm4gbj0odD1uZXcgUFMsdCksRnUobiwiVCIpLHFyKCghZS5kJiYoZS5kPW5ldyBtbChadSxlLDExKSksZS5kKSxuKSxufWZ1bmN0aW9uIE03ZShlKXt2YXIgdCxuLHIsYTtmb3IodD0xLG49MCxhPWUuZ2MoKTtuPGE7KytuKXI9ZS5WaShuKSx0PTMxKnQrKHI9PW51bGw/MDplcyhyKSk7cmV0dXJuIHR9ZnVuY3Rpb24gczB0KGUsdCxuLHIpe3ZhciBhO3JldHVybiBaTyh0LGUuZS5SZCgpLmdjKCkpLFpPKG4sZS5jLlJkKCkuZ2MoKSksYT1lLmFbdF1bbl0sVHMoZS5hW3RdLG4sciksYX1mdW5jdGlvbiBoZShlLHQsbixyLGEpe3JldHVybiBhLlJtPWUsYS5TbT10LGEuVG09eGUsYS5fX2VsZW1lbnRUeXBlSWQkPW4sYS5fX2VsZW1lbnRUeXBlQ2F0ZWdvcnkkPXIsYX1mdW5jdGlvbiBJVigpe0lWPVUscDFlPW5ldyBncShJZCwwKSxISz1uZXcgZ3EoVTN0LDEpLFZLPW5ldyBncShHM3QsMikscEI9bmV3IGdxKCJCT1RIIiwzKX1mdW5jdGlvbiBSMSgpe1IxPVUsVng9bmV3IHBxKGNULDApLE1UPW5ldyBwcShNeCwxKSxEVD1uZXcgcHEoRHgsMiksYjFlPW5ldyBwcSgiVE9QIiwzKX1mdW5jdGlvbiB3RSgpe3dFPVUsczM9bmV3IGZxKCJRMSIsMCksbzQ9bmV3IGZxKCJRNCIsMSksYTQ9bmV3IGZxKCJRMiIsMiksTTY9bmV3IGZxKCJRMyIsMyl9ZnVuY3Rpb24gT1YoKXtPVj1VLExkZT1uZXcgTXNlKCJPRkYiLDApLFhUPW5ldyBNc2UoIlNJTkdMRV9FREdFIiwxKSxrND1uZXcgTXNlKCJNVUxUSV9FREdFIiwyKX1mdW5jdGlvbiBDTigpe0NOPVUsWlc9bmV3IFgzZSgiTUlOSU1VTV9TUEFOTklOR19UUkVFIiwwKSx6T2U9bmV3IFgzZSgiTUFYSU1VTV9TUEFOTklOR19UUkVFIiwxKX1mdW5jdGlvbiBoeCgpe2h4PVUsZ1N0PW5ldyBleSxkU3Q9bmV3IE5uZX1mdW5jdGlvbiBEN2UoZSl7dmFyIHQsbjtyZXR1cm4gbj0ocmIoKSx0PW5ldyByayx0KSxlJiZxcigoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpLG4pLG59ZnVuY3Rpb24gYmNlKGUpe3ZhciB0LG4scixhO2ZvcihhPW5ldyBidCxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMjcpLHQ9SHkobikscmEoYSx0KTtyZXR1cm4gYX1mdW5jdGlvbiBleW4oZSx0KXt2YXIgbixyO2ZvcihfSCh0LCJwcmVkaWNhdGUiKSxyPTA7ZS5PYigpO3IrKylpZihuPWUuUGIoKSx0LkxiKG4pKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGZ4KGUsdCl7dmFyIG4scjtpZihyPTAsZTw2NCYmZTw9dClmb3IodD10PDY0P3Q6NjMsbj1lO248PXQ7bisrKXI9UTAocixsMCgxLG4pKTtyZXR1cm4gcn1mdW5jdGlvbiB0eW4oZSx0KXt2YXIgbixyO3JldHVybiBuPWUuYyxyPXQuZVtlLnBdLHI8bi5hLmMubGVuZ3RoLTE/bChqdChuLmEscisxKSwxMCk6bnVsbH1mdW5jdGlvbiBJN2UoZSl7Q24oKTt2YXIgdCxuLHI7Zm9yKHI9MCxuPWUuS2MoKTtuLk9iKCk7KXQ9bi5QYigpLHI9cisodCE9bnVsbD9lcyh0KTowKSxyPXJ8MDtyZXR1cm4gcn1mdW5jdGlvbiBueW4oZSl7dmFyIHQsbixyO3JldHVybiB0PWwoZS5lJiZlLmUoKSw5KSxyPShuPXQuc2xpY2UoKSxsKGpvZShuLHQpLDkpKSxuZXcgWmgodCxyLHQubGVuZ3RoKX1mdW5jdGlvbiBhMHQoZSx0LG4pe3ZhciByO05sKGUuYSksVnUobi5pLG5ldyBfWGUoZSkpLHI9bmV3IE5xKGwoY3IoZS5hLHQuYiksNjgpKSxYMXQoZSxyLHQpLG4uZj1yfWZ1bmN0aW9uIHJ5bihlKXt2YXIgdDtVdyhlLCEwKSx0PWIyLG5zKGUsKE50KCksVVQpKSYmKHQrPWwoUShlLFVUKSwxNykuYSkscnQoZSxVVCxwdCh0KSl9ZnVuY3Rpb24gaXluKGUpe3ZhciB0O3JldHVybiB0PW5ldyBYLHQuYT1lLHQuYj1neW4oZSksdC5jPVdlKHp0LGR0LDIsMiw2LDEpLHQuY1swXT15ZnQoZSksdC5jWzFdPXlmdChlKSx0fWZ1bmN0aW9uIG8wdChlKXt2YXIgdCxuLHI7cmV0dXJuIG49ZS5uLHI9ZS5vLHQ9ZS5kLG5ldyBlZihuLmEtdC5iLG4uYi10LmQsci5hKyh0LmIrdC5jKSxyLmIrKHQuZCt0LmEpKX1mdW5jdGlvbiBzeW4oZSx0KXtyZXR1cm4hZXx8IXR8fGU9PXQ/ITE6RncoZS5iLmMsdC5iLmMrdC5iLmIpPDAmJkZ3KHQuYi5jLGUuYi5jK2UuYi5iKTwwfWZ1bmN0aW9uIGMwdChlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuIEdiO2Nhc2UgMjpyZXR1cm4ga2c7Y2FzZSAzOnJldHVybiBaQjtkZWZhdWx0OnJldHVybiBlRn19ZnVuY3Rpb24gYXluKGUpe3N3aXRjaChsKFEoZSwoTnQoKSxRdSkpLDE3MSkuZyl7Y2FzZSAyOmNhc2UgNDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBTTihlLHQsbil7c3dpdGNoKG4uZyl7Y2FzZSAyOmUuYj10O2JyZWFrO2Nhc2UgMTplLmM9dDticmVhaztjYXNlIDQ6ZS5kPXQ7YnJlYWs7Y2FzZSAzOmUuYT10fX1mdW5jdGlvbiBPN2UoZSx0KXtzd2l0Y2godCl7Y2FzZSAwOiFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxlLm8uYy4kYigpO3JldHVybn1GdWUoZSx0KX1mdW5jdGlvbiBveW4oZSx0KXt2YXIgbixyO3JldHVybiBuPWwobChjcihlLmcsdC5hKSw0MikuYSw2OCkscj1sKGwoY3IoZS5nLHQuYiksNDIpLmEsNjgpLEJtdChuLHIpfWZ1bmN0aW9uIE43ZShlLHQsbil7dmFyIHI7aWYocj1lLmdjKCksdD5yKXRocm93IHVlKG5ldyBteSh0LHIpKTtyZXR1cm4gZS5TaSgpJiYobj1ib3QoZSxuKSksZS5FaSh0LG4pfWZ1bmN0aW9uIHlFKGUsdCxuLHIsYSl7dmFyIG8sZjtmb3IoZj1uO2Y8PWE7ZisrKWZvcihvPXQ7bzw9cjtvKyspcjYoZSxvLGYpfHxGVShlLG8sZiwhMCwhMSl9ZnVuY3Rpb24gY3luKGUpe2g2KCk7dmFyIHQsbixyO2ZvcihuPVdlKEVhLGR0LDgsMiwwLDEpLHI9MCx0PTA7dDwyO3QrKylyKz0uNSxuW3RdPXQ3bihyLGUpO3JldHVybiBufWZ1bmN0aW9uIHhFKGUpe3ZhciB0LG4scjtyZXR1cm4gdD1+ZS5sKzEmZWgsbj1+ZS5tKyh0PT0wPzE6MCkmZWgscj1+ZS5oKyh0PT0wJiZuPT0wPzE6MCkmaHAscXUodCxuLHIpfWZ1bmN0aW9uIFA3ZShlKXt2YXIgdDtpZihlPDApcmV0dXJuIGxvO2lmKGU9PTApcmV0dXJuIDA7Zm9yKHQ9ckw7ISh0JmUpO3Q+Pj0xKTtyZXR1cm4gdH1mdW5jdGlvbiBtY2UoZSx0LG4pe3JldHVybiBlPj0xMjg/ITE6ZTw2ND9JXyh2YShsMCgxLGUpLG4pLDApOklfKHZhKGwwKDEsZS02NCksdCksMCl9ZnVuY3Rpb24gX04oZSx0LG4pe3JldHVybiBuPT1udWxsPyghZS5xJiYoZS5xPW5ldyBQciksYXgoZS5xLHQpKTooIWUucSYmKGUucT1uZXcgUHIpLGtpKGUucSx0LG4pKSxlfWZ1bmN0aW9uIHJ0KGUsdCxuKXtyZXR1cm4gbj09bnVsbD8oIWUucSYmKGUucT1uZXcgUHIpLGF4KGUucSx0KSk6KCFlLnEmJihlLnE9bmV3IFByKSxraShlLnEsdCxuKSksZX1mdW5jdGlvbiB1MHQoZSl7dmFyIHQsbjtyZXR1cm4gbj1uZXcgS0gscGMobixlKSxydChuLChiYigpLEh4KSxlKSx0PW5ldyBQcixGQW4oZSxuLHQpLGhEbihlLG4sdCksbn1mdW5jdGlvbiBsMHQoZSl7dmFyIHQsbjtyZXR1cm4gdD1lLnQtZS5rW2Uuby5wXSplLmQrZS5qW2Uuby5wXT5lLmYsbj1lLnUrZS5lW2Uuby5wXSplLmQ+ZS5mKmUucyplLmQsdHx8bn1mdW5jdGlvbiBoMHQoZSx0KXt2YXIgbixyLGEsbztmb3Iobj0hMSxyPWUuYVt0XS5sZW5ndGgsbz0wO288ci0xO28rKylhPW8rMSxuPW58UDVuKGUsdCxvLGEpO3JldHVybiBufWZ1bmN0aW9uIHV5bihlKXt2YXIgdCxuLHIsYTtmb3Iobj1lLmEscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sdjB0KGUsdCwoQ3QoKSxEcikpLHYwdChlLHQsUW4pfWZ1bmN0aW9uIGYwdCgpe2YwdD1VLEV4dD1LcigoSG8oKSxoZShsZShGMWUsMSksaXQsMjU5LDAsW2VXLHZmLFVMLHRXLCRULEI2LEdMLFJULGpULG5XXSkpKX1mdW5jdGlvbiBkMHQoKXtkMHQ9VSxuRXQ9S3IoKE5mKCksaGUobGUoVERlLDEpLGl0LDI0MywwLFtBVyxBQixMQix4RGUsa0RlLHlEZSxFRGUsTFcsdjMseDRdKSkpfWZ1bmN0aW9uIFZtKCl7Vm09VSxNMWU9bmV3IHhzZShJZCwwKSxGVD1uZXcgeHNlKCJJTkNPTUlOR19PTkxZIiwxKSxQNj1uZXcgeHNlKCJPVVRHT0lOR19PTkxZIiwyKX1mdW5jdGlvbiB2Y2UoKXt2Y2U9VSxfMGU9e2Jvb2xlYW46VXVuLG51bWJlcjpzdW4sc3RyaW5nOmF1bixvYmplY3Q6SXB0LGZ1bmN0aW9uOklwdCx1bmRlZmluZWQ6amNufX1mdW5jdGlvbiBCN2UoKXt0aGlzLm89bnVsbCx0aGlzLms9bnVsbCx0aGlzLmo9bnVsbCx0aGlzLmQ9bnVsbCx0aGlzLmI9bnVsbCx0aGlzLm49bnVsbCx0aGlzLmE9bnVsbH1mdW5jdGlvbiBGN2UoZSx0KXt0aGlzLmM9ZSx0aGlzLmQ9dCx0aGlzLmI9dGhpcy5kL3RoaXMuYy5jLlJkKCkuZ2MoKXwwLHRoaXMuYT10aGlzLmQldGhpcy5jLmMuUmQoKS5nYygpfWZ1bmN0aW9uIGcwdChlLHQpe3RoaXMuYj1lLE41LmNhbGwodGhpcywobChPZSh0dCgobGIoKSxWbikubyksMTApLDE5KSx0LmkpLHQuZyksdGhpcy5hPShsY2UoKSxucGUpfWZ1bmN0aW9uIFI3ZShlLHQsbil7dGhpcy5xPW5ldyBiLkRhdGUsdGhpcy5xLnNldEZ1bGxZZWFyKGUrTGIsdCxuKSx0aGlzLnEuc2V0SG91cnMoMCwwLDAsMCksWEEodGhpcywwKX1mdW5jdGlvbiBwMHQoZSx0KXtCTyhlPj0wLCJOZWdhdGl2ZSBpbml0aWFsIGNhcGFjaXR5IiksQk8odD49MCwiTm9uLXBvc2l0aXZlIGxvYWQgZmFjdG9yIiksTmwodGhpcyl9ZnVuY3Rpb24gbHluKGUsdCxuLHIsYSl7dmFyIG8sZjtpZihmPWUubGVuZ3RoLG89bi5sZW5ndGgsdDwwfHxyPDB8fGE8MHx8dCthPmZ8fHIrYT5vKXRocm93IHVlKG5ldyBfd2UpfWZ1bmN0aW9uIGo3ZShlLHQpe0NuKCk7dmFyIG4scixhLG8sZjtmb3IoZj0hMSxyPXQsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sZj1mfGUuRmMobik7cmV0dXJuIGZ9ZnVuY3Rpb24gYjB0KGUsdCxuKXt2YXIgcixhO3JldHVybiByPW5ldyBCb2UodCxuKSxhPW5ldyB4dCxlLmI9eGJ0KGUsZS5iLHIsYSksYS5ifHwrK2UuYyxlLmIuYj0hMSxhLmR9ZnVuY3Rpb24gd0EoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5hW2UuYl0sdD09bnVsbD9udWxsOihUcyhlLmEsZS5iLG51bGwpLGUuYj1lLmIrMSZlLmEubGVuZ3RoLTEsdCl9ZnVuY3Rpb24gbTB0KGUpe3ZhciB0LG47cmV0dXJuIG49clAoZS5oKSxuPT0zMj8odD1yUChlLm0pLHQ9PTMyP3JQKGUubCkrMzI6dCsyMC0xMCk6bi0xMn1mdW5jdGlvbiAkN2UoZSl7dmFyIHQ7cmV0dXJuKCFlLmN8fCEoZS5CYiYxKSYmZS5jLkRiJjY0KSYmKHQ9T2YoZSksRGUodCw5MCkmJihlLmM9bCh0LDI5KSkpLGUuY31mdW5jdGlvbiB2YihlKXt2YXIgdCxuO2ZvcihuPW5ldyBHKGUuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNjApLHQuZC5jPS10LmQuYy10LmQuYjtWOWUoZSl9ZnVuY3Rpb24gd2IoZSl7dmFyIHQsbjtmb3Iobj1uZXcgRyhlLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSx0LmcuYz0tdC5nLmMtdC5nLmI7TVUoZSl9ZnVuY3Rpb24gdjB0KGUsdCxuKXt2YXIgcixhLG8sZjtmb3IoZj1UQSh0LG4pLG89MCxhPWYuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTIpLGtpKGUuYyxyLHB0KG8rKykpfWZ1bmN0aW9uIHcwdChlLHQsbil7dmFyIHI7cmV0dXJuIHI9bmV3IGJ0LFc5ZShlLHQsciwoQ3QoKSxhciksITAsITEpLFc5ZShlLG4scixlciwhMSwhMSkscn1mdW5jdGlvbiBJYyhlKXt2YXIgdCxuLHIsYSxvO2Zvcih0PW5ldyBxYSxyPWUsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sdC5hKz1uLmEsdC5iKz1uLmI7cmV0dXJuIHR9ZnVuY3Rpb24gd2NlKGUsdCxuKXt2YXIgcixhLG8sZjtyZXR1cm4gbz1udWxsLGY9dCxhPUF3KGYsImxhYmVscyIpLHI9bmV3IEN0dChlLG4pLG89KEtFbihyLmEsci5iLGEpLGEpLG99ZnVuY3Rpb24gaHluKGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPVA5ZShlLHQsbixyKSwhYSYmKGE9dzRuKGUsbixyKSxhJiYhZzYoZSx0LGEpKT9udWxsOmF9ZnVuY3Rpb24gZnluKGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPUI5ZShlLHQsbixyKSwhYSYmKGE9QmNlKGUsbixyKSxhJiYhZzYoZSx0LGEpKT9udWxsOmF9ZnVuY3Rpb24gZHluKGUsdCxuKXtpZihYcih0KSxuLk9iKCkpZm9yKG55ZSh0LGFhdChuLlBiKCkpKTtuLk9iKCk7KW55ZSh0LGUuYSksbnllKHQsYWF0KG4uUGIoKSkpO3JldHVybiB0fWZ1bmN0aW9uIHkwdChlLHQpe3ZhciBuO2ZvcihuPTA7bjxlLmEuYS5sZW5ndGg7bisrKWlmKCFsKEppdChlLmEsbiksMTc4KS5MYih0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBneW4oZSl7dmFyIHQ7cmV0dXJuIGU9PTA/IkV0Yy9HTVQiOihlPDA/KGU9LWUsdD0iRXRjL0dNVC0iKTp0PSJFdGMvR01UKyIsdCtKbHQoZSkpfWZ1bmN0aW9uIHo3ZShlKXt2YXIgdDtyZXR1cm4gZS5iPD0wPyExOih0PXBkKCJNTHlkaEhtc1NEa0siLGNsKGNvKGUuYywwKSkpLHQ+MXx8dD49MCYmZS5iPDMpfWZ1bmN0aW9uIHljZShlKXt2YXIgdCxuLHI7dD1+ZS5sKzEmZWgsbj1+ZS5tKyh0PT0wPzE6MCkmZWgscj1+ZS5oKyh0PT0wJiZuPT0wPzE6MCkmaHAsZS5sPXQsZS5tPW4sZS5oPXJ9ZnVuY3Rpb24gcTdlKGUpe0NuKCk7dmFyIHQsbixyO2ZvcihyPTEsbj1lLktjKCk7bi5PYigpOyl0PW4uUGIoKSxyPTMxKnIrKHQhPW51bGw/ZXModCk6MCkscj1yfDA7cmV0dXJuIHJ9ZnVuY3Rpb24gcHluKGUsdCxuLHIsYSl7dmFyIG87cmV0dXJuIG89RDllKGUsdCksbiYmeWNlKG8pLGEmJihlPWM3bihlLHQpLHI/TmI9eEUoZSk6TmI9cXUoZS5sLGUubSxlLmgpKSxvfWZ1bmN0aW9uIHgwdChlLHQsbil7ZS5nPVJ1ZShlLHQsKEN0KCksYXIpLGUuYiksZS5kPVJ1ZShlLG4sYXIsZS5iKSwhKGUuZy5jPT0wfHxlLmQuYz09MCkmJkpndChlKX1mdW5jdGlvbiBrMHQoZSx0LG4pe2UuZz1SdWUoZSx0LChDdCgpLGVyKSxlLmopLGUuZD1SdWUoZSxuLGVyLGUuaiksIShlLmcuYz09MHx8ZS5kLmM9PTApJiZKZ3QoZSl9ZnVuY3Rpb24gSDdlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgNzpyZXR1cm4hIWUuZSYmZS5lLmkhPTA7Y2FzZSA4OnJldHVybiEhZS5kJiZlLmQuaSE9MH1yZXR1cm4gXzhlKGUsdCl9ZnVuY3Rpb24gYnluKGUsdCl7c3dpdGNoKHQuZyl7Y2FzZSAwOkRlKGUuYiw2NDEpfHwoZS5iPW5ldyBqZnQpO2JyZWFrO2Nhc2UgMTpEZShlLmIsNjQyKXx8KGUuYj1uZXcgUml0KX19ZnVuY3Rpb24gRTB0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IE9uZTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihGRysoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIFQwdChlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBnbDtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihGRysoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIG15bihlLHQsbil7cmV0dXJuIV9rKEZpKG5ldyBibihudWxsLG5ldyBrbihlLmMsMTYpKSxuZXcgV2wobmV3IGx0dCh0LG4pKSkpLkJkKChBbSgpLHp4KSl9ZnVuY3Rpb24gQzB0KGUsdCl7cmV0dXJuIHo4KEJFKGwoUSh0LChIYygpLHkzKSksODgpKSxuZXcgbHQoZS5jLmUuYS1lLmIuZS5hLGUuYy5lLmItZS5iLmUuYikpPD0wfWZ1bmN0aW9uIHZ5bihlLHQpe2Zvcig7ZS5nPT1udWxsJiYhZS5jP0g1ZShlKTplLmc9PW51bGx8fGUuaSE9MCYmbChlLmdbZS5pLTFdLDUxKS5PYigpOylrbG4odCxDVShlKSl9ZnVuY3Rpb24gVW0oZSl7dmFyIHQsbjtmb3Iobj1uZXcgRyhlLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSx0LmYuJGIoKTtldW4oZS5iLGUpLGFidChlKX1mdW5jdGlvbiBBTihlKXt2YXIgdCxuLHI7Zm9yKHQ9bmV3IGJsLHI9UnIoZSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksOCksUGsodCwwLG5ldyBFbyhuKSk7cmV0dXJuIHR9ZnVuY3Rpb24ga0UoZSl7dmFyIHQ7cmV0dXJuIGZiKGUpLHQ9bmV3IG9uLGUuYS5CZCh0KT8oT2soKSxuZXcgS2llKG5yKHQuYSkpKTooT2soKSxPaygpLGJfZSl9ZnVuY3Rpb24gVjdlKGUsdCxuKXtzd2l0Y2godCl7Y2FzZSAwOiFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxfVihlLm8sbik7cmV0dXJufSR1ZShlLHQsbil9ZnVuY3Rpb24geGNlKGUsdCxuKXt0aGlzLmc9ZSx0aGlzLmU9bmV3IHFhLHRoaXMuZj1uZXcgcWEsdGhpcy5kPW5ldyBvcyx0aGlzLmI9bmV3IG9zLHRoaXMuYT10LHRoaXMuYz1ufWZ1bmN0aW9uIGtjZShlLHQsbixyKXt0aGlzLmI9bmV3IGJ0LHRoaXMubj1uZXcgYnQsdGhpcy5pPXIsdGhpcy5qPW4sdGhpcy5zPWUsdGhpcy50PXQsdGhpcy5yPTAsdGhpcy5kPTB9ZnVuY3Rpb24gRUUoZSx0KXtpZighZS5MaSgpJiZ0PT1udWxsKXRocm93IHVlKG5ldyBZbigiVGhlICdubyBudWxsJyBjb25zdHJhaW50IGlzIHZpb2xhdGVkIikpO3JldHVybiB0fWZ1bmN0aW9uIHMyKGUpe3ZhciB0LG47Zm9yKHQ9MCxuPTA7bjxlLmxlbmd0aDtuKyspdD0odDw8NSktdCsoWG4obixlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4pKXwwO3JldHVybiB0fWZ1bmN0aW9uIFMwdChlLHQpe3ZhciBuLHIsYTtmb3IoYT1lLmI7YTspe2lmKG49ZS5hLk5lKHQsYS5kKSxuPT0wKXJldHVybiBhO3I9bjwwPzA6MSxhPWEuYVtyXX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB3eW4oZSx0LG4pe3ZhciByLGE7cj0oSG4oKSwhIXN5ZShuKSksYT1sKHQueGMociksMTUpLGF8fChhPW5ldyBidCx0LnpjKHIsYSkpLGEuRmMobil9ZnVuY3Rpb24geXluKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1sKGF0KGUsKHoxKCksakIpKSwxNykuYSxyPWwoYXQodCxqQiksMTcpLmEsbj09cnx8bjxyPy0xOm4+cj8xOjB9ZnVuY3Rpb24geHluKGUpe3JldHVybiB2dChlLmMsKGh4KCksZ1N0KSksVzZlKGUuYSx6ZShHZShJdCgoR2NlKCksVFcpKSkpKT9uZXcgSG5lOm5ldyBPWGUoZSl9ZnVuY3Rpb24ga3luKGUpe2Zvcig7IWUuZHx8IWUuZC5PYigpOylpZihlLmImJiFsXyhlLmIpKWUuZD1sKFg4KGUuYiksNTEpO2Vsc2UgcmV0dXJuIG51bGw7cmV0dXJuIGUuZH1mdW5jdGlvbiBVN2UoZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBoeXQ7ZGVmYXVsdDpjYXNlIDI6cmV0dXJuIDA7Y2FzZSAzOnJldHVybiBMaGU7Y2FzZSA0OnJldHVybiBsQ2V9fWZ1bmN0aW9uIEV5bigpe0RpKCk7dmFyIGU7cmV0dXJuIGNwZXx8KGU9SGhuKF9iKCJNIiwhMCkpLGU9b0goX2IoIk0iLCExKSxlKSxjcGU9ZSxjcGUpfWZ1bmN0aW9uIE5WKCl7TlY9VSxXZ2U9bmV3IENxKCJFTEsiLDApLGxQZT1uZXcgQ3EoIkpTT04iLDEpLHVQZT1uZXcgQ3EoIkRPVCIsMiksaFBlPW5ldyBDcSgiU1ZHIiwzKX1mdW5jdGlvbiB5QSgpe3lBPVUsU2RlPW5ldyBfc2UoIlNUQUNLRUQiLDApLENkZT1uZXcgX3NlKCJSRVZFUlNFX1NUQUNLRUQiLDEpLE1CPW5ldyBfc2UoIlNFUVVFTkNFRCIsMil9ZnVuY3Rpb24geEEoKXt4QT1VLFpEZT1uZXcgT3NlKElkLDApLElkZT1uZXcgT3NlKCJNSURETEVfVE9fTUlERExFIiwxKSxPQj1uZXcgT3NlKCJBVk9JRF9PVkVSTEFQIiwyKX1mdW5jdGlvbiBURSgpe1RFPVUsb0xlPW5ldyBNWixjTGU9bmV3IGxJLFg4dD1uZXcgeWosWTh0PW5ldyBEWixXOHQ9bmV3IG44LGFMZT0obnIoVzh0KSxuZXcga2UpfWZ1bmN0aW9uIFBWKCl7UFY9VSxXTmU9bmV3IGx3KDE1KSxYU3Q9bmV3IEhhKChwaSgpLF8yKSxXTmUpLE1NPW45LFZOZT1MU3QsVU5lPWt2LEtOZT1pNyxHTmU9QzR9ZnVuY3Rpb24gUTUoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihyPXQsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sZj1uZXcgSnN0KGUpLG4uaGYoZiksWEFuKGYpO05sKGUuZil9ZnVuY3Rpb24gRWNlKGUsdCl7dmFyIG47cmV0dXJuIHQ9PT1lPyEwOkRlKHQsMjI5KT8obj1sKHQsMjI5KSxQaShlLlpiKCksbi5aYigpKSk6ITF9ZnVuY3Rpb24gRzdlKGUsdCl7cmV0dXJuIG5idChlLHQpPyh4bihlLmIsbChRKHQsKGZ0KCkscHApKSwyMSksdCksdWkoZS5hLHQpLCEwKTohMX1mdW5jdGlvbiBUeW4oZSl7dmFyIHQsbjt0PWwoUShlLChmdCgpLGpsKSksMTApLHQmJihuPXQuYyxhbChuLmEsdCksbi5hLmMubGVuZ3RoPT0wJiZhbChlbyh0KS5iLG4pKX1mdW5jdGlvbiBDeW4oZSx0KXtyZXR1cm4gbnMoZSwoZnQoKSxLaSkpJiZucyh0LEtpKT9sKFEodCxLaSksMTcpLmEtbChRKGUsS2kpLDE3KS5hOjB9ZnVuY3Rpb24gU3luKGUsdCl7cmV0dXJuIG5zKGUsKGZ0KCksS2kpKSYmbnModCxLaSk/bChRKGUsS2kpLDE3KS5hLWwoUSh0LEtpKSwxNykuYTowfWZ1bmN0aW9uIF8wdChlKXtyZXR1cm4gRzE/V2UoRDZ0LFh3dCw1ODEsMCwwLDEpOmwoajEoZS5hLFdlKEQ2dCxYd3QsNTgxLGUuYS5jLmxlbmd0aCwwLDEpKSw4NTYpfWZ1bmN0aW9uIF95bihlLHQsbixyKXtyZXR1cm4ga0goKSxuZXcgWXdlKGhlKGxlKHV2LDEpLFhVLDQ0LDAsWyhmdWUoZSx0KSxuZXcgaXcoZSx0KSksKGZ1ZShuLHIpLG5ldyBpdyhuLHIpKV0pKX1mdW5jdGlvbiBKNShlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT0ocj1uZXcgcWllLHIpLEpvKGEsdCxuKSxxcigoIWUucSYmKGUucT1uZXcgbnQoVWYsZSwxMSwxMCkpLGUucSksYSksYX1mdW5jdGlvbiBUY2UoZSl7dmFyIHQsbixyLGE7Zm9yKGE9Y2xuKFNfdCxlKSxuPWEubGVuZ3RoLHI9V2UoenQsZHQsMixuLDYsMSksdD0wO3Q8bjsrK3Qpclt0XT1hW3RdO3JldHVybiByfWZ1bmN0aW9uIEs3ZShlLHQpe3ZhciBuO3QqMisxPj1lLmIuYy5sZW5ndGh8fChLN2UoZSwyKnQrMSksbj0yKnQrMixuPGUuYi5jLmxlbmd0aCYmSzdlKGUsbiksUHB0KGUsdCkpfWZ1bmN0aW9uIEF5bihlLHQpe3ZhciBuLHI7Zm9yKHI9UnIoZSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksMjE5KSxuLmUubGVuZ3RoPjAmJih0LkNkKG4pLG4uaSYmQzRuKG4pKX1mdW5jdGlvbiBXN2UoZSx0LG4pe3ZhciByO2ZvcihyPW4tMTtyPj0wJiZlW3JdPT09dFtyXTtyLS0pO3JldHVybiByPDA/MDpmc2UodmEoZVtyXSxWbyksdmEodFtyXSxWbykpPy0xOjF9ZnVuY3Rpb24gQTB0KGUsdCxuKXt2YXIgcixhO3RoaXMuZz1lLHRoaXMuYz10LHRoaXMuYT10aGlzLHRoaXMuZD10aGlzLGE9Y2Z0KG4pLHI9V2UoYzZ0LFRQLDIyNyxhLDAsMSksdGhpcy5iPXJ9ZnVuY3Rpb24gQ2NlKGUsdCxuLHIsYSl7dmFyIG8sZjtmb3IoZj1uO2Y8PWE7ZisrKWZvcihvPXQ7bzw9cjtvKyspaWYocjYoZSxvLGYpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEx5bihlLHQpe3ZhciBuLHI7Zm9yKHI9ZS5aYigpLkNjKCkuS2MoKTtyLk9iKCk7KWlmKG49bChyLlBiKCksMTYpLG4uSGModCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTDB0KGUsdCxuKXt2YXIgcixhLG8sZjtmb3IobnIobiksZj0hMSxvPWUuZmQodCksYT1uLktjKCk7YS5PYigpOylyPWEuUGIoKSxvLlJiKHIpLGY9ITA7cmV0dXJuIGZ9ZnVuY3Rpb24gU2NlKGUsdCl7dmFyIG4scjtyZXR1cm4gcj1sKEtuKGUuYSw0KSwxMjkpLG49V2UoZXBlLHIwZSw0MjQsdCwwLDEpLHIhPW51bGwmJnB1KHIsMCxuLDAsci5sZW5ndGgpLG59ZnVuY3Rpb24gTTB0KGUsdCl7dmFyIG47cmV0dXJuIG49bmV3IGVsZSgoZS5mJjI1NikhPTAsZS5pLGUuYSxlLmQsKGUuZiYxNikhPTAsZS5qLGUuZyx0KSxlLmUhPW51bGx8fChuLmM9ZSksbn1mdW5jdGlvbiBNeW4oZSx0KXt2YXIgbjtyZXR1cm4gZT09PXQ/ITA6RGUodCw4NSk/KG49bCh0LDg1KSxReGUoTW0oZSksbi52YygpKSk6ITF9ZnVuY3Rpb24gRDB0KGUsdCxuKXt2YXIgcixhO2ZvcihhPW4uS2MoKTthLk9iKCk7KWlmKHI9bChhLlBiKCksNDQpLGUuQmUodCxyLm1kKCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEkwdChlLHQsbil7cmV0dXJuIGUuZFt0LnBdW24ucF18fChPNm4oZSx0LG4pLGUuZFt0LnBdW24ucF09ITAsZS5kW24ucF1bdC5wXT0hMCksZS5hW3QucF1bbi5wXX1mdW5jdGlvbiBEeW4oZSx0KXt2YXIgbjtyZXR1cm4hZXx8ZT09dHx8IW5zKHQsKGZ0KCksdTMpKT8hMToobj1sKFEodCwoZnQoKSx1MykpLDEwKSxuIT1lKX1mdW5jdGlvbiBfY2UoZSl7c3dpdGNoKGUuaSl7Y2FzZSAyOnJldHVybiEwO2Nhc2UgMTpyZXR1cm4hMTtjYXNlLTE6KytlLmM7ZGVmYXVsdDpyZXR1cm4gZS4kbCgpfX1mdW5jdGlvbiBPMHQoZSl7c3dpdGNoKGUuaSl7Y2FzZS0yOnJldHVybiEwO2Nhc2UtMTpyZXR1cm4hMTtjYXNlIDE6LS1lLmM7ZGVmYXVsdDpyZXR1cm4gZS5fbCgpfX1mdW5jdGlvbiBOMHQoZSl7eG90LmNhbGwodGhpcywiVGhlIGdpdmVuIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0IGZvciBpbmRpdmlkdWFsIHNwYWNpbmdzLiIsZSl9ZnVuY3Rpb24gSXluKGUsdCl7dmFyIG47dC5VZygiTWluIFNpemUgUHJlcHJvY2Vzc2luZyIsMSksbj1hOWUoZSksSGkoZSwodWcoKSxtTSksbi5hKSxIaShlLFVXLG4uYiksdC5WZygpfWZ1bmN0aW9uIE95bihlKXt2YXIgdCxuLHI7Zm9yKHQ9MCxyPVdlKEVhLGR0LDgsZS5iLDAsMSksbj1ScihlLDApO24uYiE9bi5kLmM7KXJbdCsrXT1sKEJyKG4pLDgpO3JldHVybiByfWZ1bmN0aW9uIEFjZShlLHQsbil7dmFyIHIsYSxvO2ZvcihyPW5ldyBvcyxvPVJyKG4sMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDgpLHVpKHIsbmV3IEVvKGEpKTtMMHQoZSx0LHIpfWZ1bmN0aW9uIE55bihlLHQpe3ZhciBuO3JldHVybiBuPWJvKGUsdCksZnNlKG1vZShlLHQpLDApfEFxKG1vZShlLG4pLDApP246Ym8oRVAsbW9lKHViKG4sNjMpLDEpKX1mdW5jdGlvbiBQeW4oZSx0KXt2YXIgbixyO3JldHVybiBuPWwoZS5kLkJjKHQpLDE2KSxuPyhyPWUuZS5oYygpLHIuR2MobiksZS5lLmQtPW4uZ2MoKSxuLiRiKCkscik6bnVsbH1mdW5jdGlvbiBQMHQoZSl7dmFyIHQ7aWYodD1lLmEuYy5sZW5ndGgsdD4wKXJldHVybiBxayh0LTEsZS5hLmMubGVuZ3RoKSx0MihlLmEsdC0xKTt0aHJvdyB1ZShuZXcgT1FlKX1mdW5jdGlvbiBCMHQoZSx0LG4pe2lmKGU+dCl0aHJvdyB1ZShuZXcgWW4oZUcrZStRd3QrdCkpO2lmKGU8MHx8dD5uKXRocm93IHVlKG5ldyB0M2UoZUcrZStmRWUrdCt1RWUrbikpfWZ1bmN0aW9uIENFKGUsdCl7ZS5EPT1udWxsJiZlLkIhPW51bGwmJihlLkQ9ZS5CLGUuQj1udWxsKSxlY2UoZSx0PT1udWxsP251bGw6KG5yKHQpLHQpKSxlLkMmJmUuaGwobnVsbCl9ZnVuY3Rpb24gQnluKGUsdCl7dmFyIG47bj1JdCgoR2NlKCksVFcpKSE9bnVsbCYmdC5TZygpIT1udWxsP3plKEdlKHQuU2coKSkpL3plKEdlKEl0KFRXKSkpOjEsa2koZS5iLHQsbil9ZnVuY3Rpb24gWTdlKGUsdCl7dmFyIG4scjtpZihyPWUuY1t0XSxyIT0wKWZvcihlLmNbdF09MCxlLmQtPXIsbj10KzE7bjxlLmEubGVuZ3RoOyllLmFbbl0tPXIsbis9biYtbn1mdW5jdGlvbiBJeShlKXt2YXIgdDsrK2UuaixlLmk9PTA/ZS5nPW51bGw6ZS5pPGUuZy5sZW5ndGgmJih0PWUuZyxlLmc9ZS5haihlLmkpLHB1KHQsMCxlLmcsMCxlLmkpKX1mdW5jdGlvbiBGeW4oZSx0LG4pe2lmKHQ8MCl0aHJvdyB1ZShuZXcgdGMoSXl0K3QpKTt0PGUuai5jLmxlbmd0aD9yZihlLmosdCxuKTooQmN0KGUsdCksdnQoZS5qLG4pKX1mdW5jdGlvbiBGMHQoZSl7aWYoIWUuYXx8IShlLmEuaSY4KSl0aHJvdyB1ZShuZXcgbmMoIkVudW1lcmF0aW9uIGNsYXNzIGV4cGVjdGVkIGZvciBsYXlvdXQgb3B0aW9uICIrZS5mKSl9ZnVuY3Rpb24gWDdlKGUpe3ZhciB0O3JldHVybiB0PSghZS5hJiYoZS5hPW5ldyBudCh3cCxlLDksNSkpLGUuYSksdC5pIT0wP2FsbihsKE9lKHQsMCksNjk0KSk6bnVsbH1mdW5jdGlvbiBSeW4oZSl7dmFyIHQ7Zm9yKFhyKGUpLGI0ZSghMCwibnVtYmVyVG9BZHZhbmNlIG11c3QgYmUgbm9ubmVnYXRpdmUiKSx0PTA7dDwwJiZqcihlKTt0KyspeHIoZSk7cmV0dXJuIHR9ZnVuY3Rpb24gTGNlKCl7TGNlPVUsS19lPShaeigpLEcwZSksR19lPW5ldyBwbihDRWUsS19lKSxMN3Q9bmV3IFVpKFNFZSksTTd0PW5ldyBVaShfRWUpLEQ3dD1uZXcgVWkoQUVlKX1mdW5jdGlvbiBrQSgpe2tBPVUsVmRlPW5ldyB3cSgkRWUsMCksalc9bmV3IHdxKGd5dCwxKSxIZGU9bmV3IHdxKCJGQU4iLDIpLHFkZT1uZXcgd3EoIkNPTlNUUkFJTlQiLDMpfWZ1bmN0aW9uIExOKCl7TE49VSx6Vz1uZXcgTnNlKElkLDApLFNJZT1uZXcgTnNlKCJSQURJQUxfQ09NUEFDVElPTiIsMSksX0llPW5ldyBOc2UoIldFREdFX0NPTVBBQ1RJT04iLDIpfWZ1bmN0aW9uIFNFKCl7U0U9VSxfZGU9bmV3IEFzZSgiQ09OU0VSVkFUSVZFIiwwKSxJRGU9bmV3IEFzZSgiQ09OU0VSVkFUSVZFX1NPRlQiLDEpLGFNPW5ldyBBc2UoIlNMT1BQWSIsMil9ZnVuY3Rpb24gRmwoKXtGbD1VLHlfZT1uZXcgZHNlKCJDT05DVVJSRU5UIiwwKSxFYz1uZXcgZHNlKCJJREVOVElUWV9GSU5JU0giLDEpLGk0PW5ldyBkc2UoIlVOT1JERVJFRCIsMil9ZnVuY3Rpb24gTWNlKCl7TWNlPVUsaTFlPWZvdChoZShsZShMTSwxKSxpdCw4OCwwLFsoSnMoKSx1YyksdmNdKSksczFlPWZvdChoZShsZShMTSwxKSxpdCw4OCwwLFt3ZixRMV0pKX1mdW5jdGlvbiBiaChlKXtyZXR1cm4gSWEoZSk/enQ6ZnkoZSk/dGE6aHkoZSk/TnM6dDVlKGUpfHxXNGUoZSk/ZS5SbTplLlJtfHxBcnJheS5pc0FycmF5KGUpJiZsZSh1NnQsMSl8fHU2dH1mdW5jdGlvbiBqeW4oZSl7cmV0dXJuIGU/ZS5pJjE/ZT09aWg/TnM6ZT09VnI/cm86ZT09QjQ/X1Q6ZT09TmE/dGE6ZT09bm0/cjM6ZT09aDc/aTM6ZT09QWw/ang6UEw6ZTpudWxsfWZ1bmN0aW9uIFo1KGUpe3JldHVybihlLmMhPWUuYi5ifHxlLmkhPWUuZy5iKSYmKGF5KGUuYS5jLDApLHJhKGUuYSxlLmIpLHJhKGUuYSxlLmcpLGUuYz1lLmIuYixlLmk9ZS5nLmIpLGUuYX1mdW5jdGlvbiAkeW4oZSx0KXt2YXIgbixyO2ZvcihuPWUuYS5sZW5ndGgtMTt0IT1lLmI7KXI9dC0xJm4sVHMoZS5hLHQsZS5hW3JdKSx0PXI7VHMoZS5hLGUuYixudWxsKSxlLmI9ZS5iKzEmbn1mdW5jdGlvbiB6eW4oZSx0KXt2YXIgbixyO2ZvcihuPWUuYS5sZW5ndGgtMSxlLmM9ZS5jLTEmbjt0IT1lLmM7KXI9dCsxJm4sVHMoZS5hLHQsZS5hW3JdKSx0PXI7VHMoZS5hLGUuYyxudWxsKX1mdW5jdGlvbiBRN2UoZSx0LG4pe3ZhciByLGE7cmV0dXJuIEV5KHQsZS5jLmxlbmd0aCkscj1uLlBjKCksYT1yLmxlbmd0aCxhPT0wPyExOihNNGUoZS5jLHQsciksITApfWZ1bmN0aW9uIFIwdChlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKGE9bixvPTAsZj1hLmxlbmd0aDtvPGY7KytvKWlmKHI9YVtvXSxlLmIuQmUodCxyLmxkKCkpKXJldHVybiByO3JldHVybiBudWxsfWZ1bmN0aW9uIE1OKGUpe3ZhciB0LG4scixhLG87Zm9yKG89MSxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sbz0zMSpvKyh0IT1udWxsP2VzKHQpOjApLG89b3wwO3JldHVybiBvfWZ1bmN0aW9uIEtyKGUpe3ZhciB0LG4scixhLG87Zm9yKHQ9e30scj1lLGE9MCxvPXIubGVuZ3RoO2E8bzsrK2Epbj1yW2FdLHRbIjoiKyhuLmYhPW51bGw/bi5mOiIiK24uZyldPW47cmV0dXJuIHR9ZnVuY3Rpb24gcXluKGUpe3ZhciB0LG47aWYoZT09bnVsbClyZXR1cm4gbnVsbDtmb3IodD0wLG49ZS5sZW5ndGg7dDxuO3QrKylpZighRGl0KGVbdF0pKXJldHVybiBlW3RdO3JldHVybiBudWxsfWZ1bmN0aW9uIERjZShlLHQpe3JldHVybiFlfHx0JiYhZS5qfHxEZShlLDEyNykmJmwoZSwxMjcpLmEuYj09MD8wOmUuamYoKX1mdW5jdGlvbiBCVihlLHQpe3JldHVybiFlfHx0JiYhZS5rfHxEZShlLDEyNykmJmwoZSwxMjcpLmEuYT09MD8wOmUua2YoKX1mdW5jdGlvbiBqMHQoZSx0KXtyZXR1cm4gbnMoZSwoZnQoKSxLaSkpJiZucyh0LEtpKT9ydShsKFEoZSxLaSksMTcpLmEsbChRKHQsS2kpLDE3KS5hKTowfWZ1bmN0aW9uICQwdChlKXt2YXIgdCxuLHI7Zm9yKHI9MCxuPW5ldyBocihkcihlLmEuS2MoKSxuZXcgaikpO2pyKG4pOyl0PWwoeHIobiksMTgpLHQuYy5pPT10LmQuaXx8KytyO3JldHVybiByfWZ1bmN0aW9uIHowdChlLHQpe3ZhciBuLHIsYTtmb3IoYT10LWUuZixyPW5ldyBHKGUuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDMxNSksQjF0KG4sbi5lLG4uZithKTtlLmY9dH1mdW5jdGlvbiBHbShlLHQpe3ZhciBuLHIsYTtyPWUuWWsodCxudWxsKSxhPW51bGwsdCYmKGE9KFNrKCksbj1uZXcgUXYsbiksc0UoYSxlLnIpKSxyPSQxKGUsYSxyKSxyJiZyLm9qKCl9ZnVuY3Rpb24gcTB0KGUsdCl7dmFyIG4scixhO249ZSxhPTA7ZG97aWYobj09dClyZXR1cm4gYTtpZihyPW4uZSwhcil0aHJvdyB1ZShuZXcgWUkpO249ZW8ociksKythfXdoaWxlKCEwKX1mdW5jdGlvbiBIeW4oZSl7dmFyIHQsbixyLGE7Zm9yKHI9ZS5iLmEsbj1yLmEuZWMoKS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSw1NjcpLGE9bmV3IEcydCh0LGUuZSxlLmYpLHZ0KGUuZyxhKX1mdW5jdGlvbiBWeW4oZSl7dmFyIHQ7cmV0dXJuIHQ9bmV3IHdodChlKSxRTyhlLmEsRDh0LG5ldyBJbChoZShsZShmQiwxKSxSbiwzODIsMCxbdF0pKSksdC5kJiZ2dCh0LmYsdC5kKSx0LmZ9ZnVuY3Rpb24gSDB0KGUsdCl7dmFyIG47Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlPT0oWG4obix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG4pKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBVeW4oZSx0KXtyZXR1cm4gdDxlLmxlbmd0aCYmKFhuKHQsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCh0KSE9NjMpJiYoWG4odCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KHQpIT0zNSl9ZnVuY3Rpb24gVjB0KGUsdCxuLHIpe0VudCh0aGlzKSx0aGlzLmM9V2Uod2csbTIsMTAsZS5hLmMubGVuZ3RoLDAsMSksdGhpcy5lPXQsajEoZS5hLHRoaXMuYyksdGhpcy5mPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gVTB0KGUpe0RKZSgpLEZxKHRoaXMpLFNIKHRoaXMpLHRoaXMuZT1lLGdidCh0aGlzLGUpLHRoaXMuZz1lPT1udWxsP3VsOnhjKGUpLHRoaXMuYT0iIix0aGlzLmI9ZSx0aGlzLmE9IiJ9ZnVuY3Rpb24gSjdlKCl7dGhpcy5hPW5ldyB3SSx0aGlzLmY9bmV3IHlYZSh0aGlzKSx0aGlzLmI9bmV3IHhYZSh0aGlzKSx0aGlzLmk9bmV3IGtYZSh0aGlzKSx0aGlzLmU9bmV3IEVYZSh0aGlzKX1mdW5jdGlvbiBHMHQoKXtKY24uY2FsbCh0aGlzLG5ldyBJNmUoQXkoMTYpKSksTWgoMixEd3QpLHRoaXMuYj0yLHRoaXMuYT1uZXcgUzVlKG51bGwsbnVsbCwwLG51bGwpLFdJKHRoaXMuYSx0aGlzLmEpfWZ1bmN0aW9uIFo3ZShlKXt0aHJvdyB2Y2UoKSx1ZShuZXcgTEplKCJVbmV4cGVjdGVkIHR5cGVvZiByZXN1bHQgJyIrZSsiJzsgcGxlYXNlIHJlcG9ydCB0aGlzIGJ1ZyB0byB0aGUgR1dUIHRlYW0iKSl9ZnVuY3Rpb24gSWNlKGUsdCxuKXtyZXR1cm4gYi5NYXRoLmFicyh0LWUpPE1HfHxiLk1hdGguYWJzKG4tZSk8TUc/ITA6dC1lPk1HP2Utbj5NRzpuLWU+TUd9ZnVuY3Rpb24gSzB0KGUsdCl7dmFyIG47Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlPT0oWG4obix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG4pKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBHeW4oZSl7dmFyIHQsbjtpZihlPT1udWxsKXJldHVybiExO2Zvcih0PTAsbj1lLmxlbmd0aDt0PG47dCsrKWlmKCFEaXQoZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZThlKGUsdCl7dmFyIG4scixhO3JldHVybiByPSExLG49dC5xLmQsdC5kPGUuYiYmKGE9SDllKHQucSxlLmIpLHQucS5kPmEmJihFZ3QodC5xLGEpLHI9biE9dC5xLmQpKSxyfWZ1bmN0aW9uIFcwdChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7cmV0dXJuIHc9dC5pLEU9dC5qLHI9ZS5mLGE9ci5pLG89ci5qLGY9dy1hLGc9RS1vLG49Yi5NYXRoLnNxcnQoZipmK2cqZyksbn1mdW5jdGlvbiB0OGUoZSx0KXt2YXIgbixyO3JldHVybiByPVhWKGUpLHJ8fChuPShrbGUoKSxQMnQodCkpLHI9bmV3IGtRZShuKSxxcihyLkVsKCksZSkpLHJ9ZnVuY3Rpb24gRE4oZSx0KXt2YXIgbixyO3JldHVybiBuPWwoZS5jLkJjKHQpLDE2KSxuPyhyPWUuaGMoKSxyLkdjKG4pLGUuZC09bi5nYygpLG4uJGIoKSxlLm1jKHIpKTplLmpjKCl9ZnVuY3Rpb24gS3luKGUsdCl7dmFyIG4scjtmb3Iocj1KbChlLmQsMSkhPTAsbj0hMDtuOyluPSExLG49dC5jLm1nKHQuZSxyKSxuPW58Y1AoZSx0LHIsITEpLHI9IXI7dzdlKGUpfWZ1bmN0aW9uIFkwdChlLHQsbixyKXt2YXIgYSxvO2UuYT10LG89cj8wOjEsZS5mPShhPW5ldyBjcHQoZS5jLGUuYSxuLG8pLG5ldyAkYnQobixlLmEsYSxlLmUsZS5iLGUuYz09KEl3KCksb00pKSl9ZnVuY3Rpb24gRlYoZSl7dmFyIHQ7cmV0dXJuIG1yKGUuYSE9ZS5iKSx0PWUuZC5hW2UuYV0sRXJ0KGUuYj09ZS5kLmMmJnQhPW51bGwpLGUuYz1lLmEsZS5hPWUuYSsxJmUuZC5hLmxlbmd0aC0xLHR9ZnVuY3Rpb24gWDB0KGUpe3ZhciB0O2lmKGUuYyE9MClyZXR1cm4gZS5jO2Zvcih0PTA7dDxlLmEubGVuZ3RoO3QrKyllLmM9ZS5jKjMzKyhlLmFbdF0mLTEpO3JldHVybiBlLmM9ZS5jKmUuZSxlLmN9ZnVuY3Rpb24gV3luKGUpe3ZhciB0O2lmKCEoZS5jLmM8MD9lLmE+PWUuYy5iOmUuYTw9ZS5jLmIpKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIHQ9ZS5hLGUuYSs9ZS5jLmMsKytlLmIscHQodCl9ZnVuY3Rpb24gT2NlKGUpe3ZhciB0O3JldHVybiB0PW5ldyBieWUoZS5hKSxwYyh0LGUpLHJ0KHQsKGZ0KCksemkpLGUpLHQuby5hPWUuZyx0Lm8uYj1lLmYsdC5uLmE9ZS5pLHQubi5iPWUuaix0fWZ1bmN0aW9uIE5jZShlKXtyZXR1cm4oQ3QoKSxobCkuSGMoZS5qKT96ZShHZShRKGUsKGZ0KCkselQpKSkpOkljKGhlKGxlKEVhLDEpLGR0LDgsMCxbZS5pLm4sZS5uLGUuYV0pKS5ifWZ1bmN0aW9uIFl5bihlKXt2YXIgdDtyZXR1cm4gdD1PcShURXQpLGwoUShlLChmdCgpLEx1KSksMjEpLkhjKChIbygpLCRUKSkmJmZpKHQsKHVvKCksYnUpLCh2bygpLFJLKSksdH1mdW5jdGlvbiBYeW4oZSl7dmFyIHQsbixyLGE7Zm9yKGE9bmV3IEtzLHI9bmV3IEcoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDI3KSx0PW1TbihuKSxLYShhLHQpO3JldHVybiBhfWZ1bmN0aW9uIFF5bihlKXt2YXIgdCxuO2ZvcihuPW5ldyBHKGUucik7bi5hPG4uYy5jLmxlbmd0aDspaWYodD1sKHJlKG4pLDEwKSxlLm5bdC5wXTw9MClyZXR1cm4gdDtyZXR1cm4gbnVsbH1mdW5jdGlvbiBKeW4oZSx0LG4pe3ZhciByLGE7Zm9yKGE9dC5hLmEuZWMoKS5LYygpO2EuT2IoKTspaWYocj1sKGEuUGIoKSw2MCksR2F0KGUscixuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBaeW4oZSx0LG4scil7dmFyIGEsbztmb3Iobz1lLktjKCk7by5PYigpOylhPWwoby5QYigpLDcyKSxhLm4uYT10LmErKHIuYS1hLm8uYSkvMixhLm4uYj10LmIsdC5iKz1hLm8uYitufWZ1bmN0aW9uIGU0bihlLHQsbil7dmFyIHI7cj1uZXcgYzJ0KGUsdCkseG4oZS5yLHQuYWcoKSxyKSxuJiYhV18oZS51KSYmKHIuYz1uZXcgdW90KGUuZCksVnUodC5SZigpLG5ldyBEaWUocikpKX1mdW5jdGlvbiBpdShlLHQpe3ZhciBuO3JldHVybiB3YyhlKSYmd2ModCkmJihuPWUtdCwhaXNOYU4obikpP246YnhlKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCl9ZnVuY3Rpb24gbjhlKGUsdCl7dmFyIG4scixhO2ZvcihhPTEsbj1lLHI9dD49MD90Oi10O3I+MDspciUyPT0wPyhuKj1uLHI9ci8yfDApOihhKj1uLHItPTEpO3JldHVybiB0PDA/MS9hOmF9ZnVuY3Rpb24gdDRuKGUsdCl7dmFyIG4scixhO2ZvcihhPTEsbj1lLHI9dD49MD90Oi10O3I+MDspciUyPT0wPyhuKj1uLHI9ci8yfDApOihhKj1uLHItPTEpO3JldHVybiB0PDA/MS9hOmF9ZnVuY3Rpb24geWIoZSx0KXt2YXIgbixyLGEsbztyZXR1cm4gbz0oYT1lP1hWKGUpOm51bGwsRHB0KChyPXQsYSYmYS5HbCgpLHIpKSksbz09dCYmKG49WFYoZSksbiYmbi5HbCgpKSxvfWZ1bmN0aW9uIFEwdChlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT1lLmYsZS5mPXQsZS5EYiY0JiYhKGUuRGImMSkmJihyPW5ldyBfYShlLDEsMCxhLHQpLG4/bi5uaihyKTpuPXIpLG59ZnVuY3Rpb24gSjB0KGUsdCxuKXt2YXIgcixhO3JldHVybiBhPWUuYixlLmI9dCxlLkRiJjQmJiEoZS5EYiYxKSYmKHI9bmV3IF9hKGUsMSwzLGEsdCksbj9uLm5qKHIpOm49ciksbn1mdW5jdGlvbiByOGUoZSx0LG4pe3ZhciByLGE7cmV0dXJuIGE9ZS5hLGUuYT10LGUuRGImNCYmIShlLkRiJjEpJiYocj1uZXcgX2EoZSwxLDEsYSx0KSxuP24ubmoocik6bj1yKSxufWZ1bmN0aW9uIFowdChlKXt2YXIgdCxuO2lmKGUhPW51bGwpZm9yKG49MDtuPGUubGVuZ3RoOysrbil0PWVbbl0sdCYmKGwodC5nLDM3OSksdC5pKX1mdW5jdGlvbiBuNG4oZSx0LG4scixhLG8sZixnKXt2YXIgdztmb3Iodz1uO288Zjspdz49cnx8dDxuJiZnLk5lKGVbdF0sZVt3XSk8PTA/VHMoYSxvKyssZVt0KytdKTpUcyhhLG8rKyxlW3crK10pfWZ1bmN0aW9uIHI0bihlLHQsbixyLGEpe3Q9PTB8fHI9PTB8fCh0PT0xP2Fbcl09WThlKGEsbixyLGVbMF0pOnI9PTE/YVt0XT1ZOGUoYSxlLHQsblswXSk6Q0VuKGUsbixhLHQscikpfWZ1bmN0aW9uIGk0bihlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKHI9bi9lLmdjKCksYT0wLGY9ZS5LYygpO2YuT2IoKTspbz1sKGYuUGIoKSwxODYpLHowdChvLG8uZityKmEpLHY4bihvLHQsciksKythfWZ1bmN0aW9uIHM0bihlKXt2YXIgdCxuLHI7Zm9yKHI9MCxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDE3Mikscj1iLk1hdGgubWF4KHIsdC5nKTtyZXR1cm4gcn1mdW5jdGlvbiBhNG4oZSl7dmFyIHQsbixyO2ZvcihyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDIxOSksdD1uLmMua2coKT9uLmY6bi5hLHQmJklMbih0LG4uail9ZnVuY3Rpb24gRUEoKXtFQT1VLHBkZT1uZXcgVHNlKCJEVU1NWV9OT0RFX09WRVIiLDApLGJEZT1uZXcgVHNlKCJEVU1NWV9OT0RFX1VOREVSIiwxKSxTVz1uZXcgVHNlKCJFUVVBTCIsMil9ZnVuY3Rpb24gZHgoKXtkeD1VLHRQZT1uZXcgSHNlKCJQQVJBTExFTF9OT0RFIiwwKSxMND1uZXcgSHNlKCJISUVSQVJDSElDQUxfTk9ERSIsMSksZFk9bmV3IEhzZSgiUk9PVF9OT0RFIiwyKX1mdW5jdGlvbiBycCgpe3JwPVUsb1k9bmV3IHFzZSgiSU5IRVJJVCIsMCksQTI9bmV3IHFzZSgiSU5DTFVERV9DSElMRFJFTiIsMSksRE09bmV3IHFzZSgiU0VQQVJBVEVfQ0hJTERSRU4iLDIpfWZ1bmN0aW9uIGk4ZShlLHQpe3N3aXRjaCh0KXtjYXNlIDE6IWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSwkcihlLm4pO3JldHVybjtjYXNlIDI6ZkUoZSxudWxsKTtyZXR1cm59TzdlKGUsdCl9ZnVuY3Rpb24gZTF0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IEFuZTtjYXNlIDE6cmV0dXJuIG5ldyBjJDtjYXNlIDI6cmV0dXJuIG5ldyBMbmU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gYTIoZSl7c3dpdGNoKHdkKCksZS5jKXtjYXNlIDA6cmV0dXJuIEthZSgpLFZTZTtjYXNlIDE6cmV0dXJuIG5ldyBPOChScHQobmV3IFA4KGUpKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IFNKZShlKX19ZnVuY3Rpb24gdDF0KGUpe3N3aXRjaCh3ZCgpLGUuZ2MoKSl7Y2FzZSAwOnJldHVybiBLYWUoKSxWU2U7Y2FzZSAxOnJldHVybiBuZXcgTzgoZS5LYygpLlBiKCkpO2RlZmF1bHQ6cmV0dXJuIG5ldyBrM2UoZSl9fWZ1bmN0aW9uIFJWKGUpe3ZhciB0O3N3aXRjaChlLmdjKCkpe2Nhc2UgMDpyZXR1cm4geDBlO2Nhc2UgMTpyZXR1cm4gbmV3IFNhZShYcihlLlhiKDApKSk7ZGVmYXVsdDpyZXR1cm4gdD1lLG5ldyBvb2UodCl9fWZ1bmN0aW9uIHB0KGUpe3ZhciB0LG47cmV0dXJuIGU+LTEyOSYmZTwxMjg/KEZpdCgpLHQ9ZSsxMjgsbj10X2VbdF0sIW4mJihuPXRfZVt0XT1uZXcgQ3IoZSkpLG4pOm5ldyBDcihlKX1mdW5jdGlvbiBfRShlKXt2YXIgdCxuO3JldHVybiBlPi0xMjkmJmU8MTI4Pyhlc3QoKSx0PWUrMTI4LG49c19lW3RdLCFuJiYobj1zX2VbdF09bmV3IFduKGUpKSxuKTpuZXcgV24oZSl9ZnVuY3Rpb24gbjF0KGUsdCl7dmFyIG47ZS5hLmMubGVuZ3RoPjAmJihuPWwoanQoZS5hLGUuYS5jLmxlbmd0aC0xKSw1NzkpLEc3ZShuLHQpKXx8dnQoZS5hLG5ldyB5dXQodCkpfWZ1bmN0aW9uIG80bihlKXt1MCgpO3ZhciB0LG47dD1lLmQuYy1lLmUuYyxuPWwoZS5nLDE1NCksVnUobi5iLG5ldyBwWWUodCkpLFZ1KG4uYyxuZXcgYlllKHQpKSx0byhuLmksbmV3IG1ZZSh0KSl9ZnVuY3Rpb24gcjF0KGUpe3ZhciB0O3JldHVybiB0PW5ldyB0Yix0LmErPSJWZXJ0aWNhbFNlZ21lbnQgIix3dSh0LGUuZSksdC5hKz0iICIsaGkodCxFeWUobmV3IFppZSxuZXcgRyhlLmspKSksdC5hfWZ1bmN0aW9uIFBjZShlLHQpe3ZhciBuLHIsYTtmb3Iobj0wLGE9T2MoZSx0KS5LYygpO2EuT2IoKTspcj1sKGEuUGIoKSwxMiksbis9UShyLChmdCgpLGpsKSkhPW51bGw/MTowO3JldHVybiBufWZ1bmN0aW9uIGU2KGUsdCxuKXt2YXIgcixhLG87Zm9yKHI9MCxvPVJyKGUsMCk7by5iIT1vLmQuYyYmKGE9emUoR2UoQnIobykpKSwhKGE+bikpOylhPj10JiYrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gaTF0KGUsdCl7WHIoZSk7dHJ5e3JldHVybiBlLl9iKHQpfWNhdGNoKG4pe2lmKG49YnMobiksRGUobiwyMTIpfHxEZShuLDE2OSkpcmV0dXJuITE7dGhyb3cgdWUobil9fWZ1bmN0aW9uIHM4ZShlLHQpe1hyKGUpO3RyeXtyZXR1cm4gZS5IYyh0KX1jYXRjaChuKXtpZihuPWJzKG4pLERlKG4sMjEyKXx8RGUobiwxNjkpKXJldHVybiExO3Rocm93IHVlKG4pfX1mdW5jdGlvbiBjNG4oZSx0KXtYcihlKTt0cnl7cmV0dXJuIGUuTWModCl9Y2F0Y2gobil7aWYobj1icyhuKSxEZShuLDIxMil8fERlKG4sMTY5KSlyZXR1cm4hMTt0aHJvdyB1ZShuKX19ZnVuY3Rpb24gT3koZSx0KXtYcihlKTt0cnl7cmV0dXJuIGUueGModCl9Y2F0Y2gobil7aWYobj1icyhuKSxEZShuLDIxMil8fERlKG4sMTY5KSlyZXR1cm4gbnVsbDt0aHJvdyB1ZShuKX19ZnVuY3Rpb24gdTRuKGUsdCl7WHIoZSk7dHJ5e3JldHVybiBlLkJjKHQpfWNhdGNoKG4pe2lmKG49YnMobiksRGUobiwyMTIpfHxEZShuLDE2OSkpcmV0dXJuIG51bGw7dGhyb3cgdWUobil9fWZ1bmN0aW9uIFRBKGUsdCl7c3dpdGNoKHQuZyl7Y2FzZSAyOmNhc2UgMTpyZXR1cm4gT2MoZSx0KTtjYXNlIDM6Y2FzZSA0OnJldHVybiBsZihPYyhlLHQpKX1yZXR1cm4gQ24oKSxDbigpLF9vfWZ1bmN0aW9uIENBKGUpe3ZhciB0O3JldHVybiBlLkRiJjY0P2cwKGUpOih0PW5ldyBBZihnMChlKSksdC5hKz0iIChuYW1lOiAiLFhvKHQsZS56YiksdC5hKz0iKSIsdC5hKX1mdW5jdGlvbiBsNG4oZSl7dmFyIHQ7cmV0dXJuIHQ9bChCMShlLmMuYywiIiksMjMzKSx0fHwodD1uZXcgbngoQ2soVGsobmV3IG55LCIiKSwiT3RoZXIiKSksaDIoZS5jLmMsIiIsdCkpLHR9ZnVuY3Rpb24gYThlKGUsdCxuKXt2YXIgcixhO3JldHVybiBhPWUuc2IsZS5zYj10LGUuRGImNCYmIShlLkRiJjEpJiYocj1uZXcgX2EoZSwxLDQsYSx0KSxuP24ubmoocik6bj1yKSxufWZ1bmN0aW9uIG84ZShlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT1lLnIsZS5yPXQsZS5EYiY0JiYhKGUuRGImMSkmJihyPW5ldyBfYShlLDEsOCxhLGUuciksbj9uLm5qKHIpOm49ciksbn1mdW5jdGlvbiBoNG4oZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9bmV3IFpnKGUuZSw0LDEzLChhPXQuYyxhfHwoVG4oKSx0ZCkpLG51bGwsZjIoZSx0KSwhMSksbj9uLm5qKHIpOm49cixufWZ1bmN0aW9uIGY0bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1uZXcgWmcoZS5lLDMsMTMsbnVsbCwoYT10LmMsYXx8KFRuKCksdGQpKSxmMihlLHQpLCExKSxuP24ubmoocik6bj1yLG59ZnVuY3Rpb24gbzIoZSx0KXt2YXIgbixyO3JldHVybiBuPWwodCw2OTEpLHI9bi5lbCgpLCFyJiZuLmZsKHI9RGUodCw5MCk/bmV3IEJ0dChlLGwodCwyOSkpOm5ldyBzY3QoZSxsKHQsMTU2KSkpLHJ9ZnVuY3Rpb24gSU4oZSx0LG4pe3ZhciByO2UuX2koZS5pKzEpLHI9ZS5aaSh0LG4pLHQhPWUuaSYmcHUoZS5nLHQsZS5nLHQrMSxlLmktdCksVHMoZS5nLHQsciksKytlLmksZS5NaSh0LG4pLGUuTmkoKX1mdW5jdGlvbiBkNG4oZSx0KXt2YXIgbjtyZXR1cm4gdC5hJiYobj10LmEuYS5sZW5ndGgsZS5hP2hpKGUuYSxlLmIpOmUuYT1uZXcgVGgoZS5kKSxmY3QoZS5hLHQuYSx0LmQubGVuZ3RoLG4pKSxlfWZ1bmN0aW9uIGc0bihlLHQpe3ZhciBuO2UuYz10LGUuYT13NW4odCksZS5hPDU0JiYoZS5mPShuPXQuZD4xP2xjdCh0LmFbMF0sdC5hWzFdKTpsY3QodC5hWzBdLDApLEZtKHQuZT4wP246cjIobikpKSl9ZnVuY3Rpb24gT04oZSx0KXt2YXIgbjtyZXR1cm4gbj1uZXcgb24sZS5hLkJkKG4pPyhPaygpLG5ldyBLaWUobnIoVWx0KGUsbi5hLHQpKSkpOihmYihlKSxPaygpLE9rKCksYl9lKX1mdW5jdGlvbiBzMXQoZSx0KXt2YXIgbjtlLmMubGVuZ3RoIT0wJiYobj1sKGoxKGUsV2Uod2csbTIsMTAsZS5jLmxlbmd0aCwwLDEpKSwxOTkpLGN5ZShuLG5ldyBVOSksSnB0KG4sdCkpfWZ1bmN0aW9uIGExdChlLHQpe3ZhciBuO2UuYy5sZW5ndGghPTAmJihuPWwoajEoZSxXZSh3ZyxtMiwxMCxlLmMubGVuZ3RoLDAsMSkpLDE5OSksY3llKG4sbmV3IFdkKSxKcHQobix0KSl9ZnVuY3Rpb24gUGkoZSx0KXtyZXR1cm4gSWEoZSk/dm4oZSx0KTpmeShlKT9laXQoZSx0KTpoeShlKT8obnIoZSkscWUoZSk9PT1xZSh0KSk6dDVlKGUpP2UuRmIodCk6VzRlKGUpP0p0dChlLHQpOlc1ZShlLHQpfWZ1bmN0aW9uIGNmKGUsdCxuKXtpZih0PDApZDllKGUsbik7ZWxzZXtpZighbi5yaygpKXRocm93IHVlKG5ldyBZbihPYituLnhlKCkra0wpKTtsKG4sNjkpLndrKCkuRWsoZSxlLmhpKCksdCl9fWZ1bmN0aW9uIG8xdChlLHQsbil7aWYoZTwwfHx0Pm4pdGhyb3cgdWUobmV3IHRjKGVHK2UrZkVlK3QrIiwgc2l6ZTogIituKSk7aWYoZT50KXRocm93IHVlKG5ldyBZbihlRytlK1F3dCt0KSl9ZnVuY3Rpb24gYzF0KGUpe3ZhciB0O3JldHVybiBlLkRiJjY0P2cwKGUpOih0PW5ldyBBZihnMChlKSksdC5hKz0iIChzb3VyY2U6ICIsWG8odCxlLmQpLHQuYSs9IikiLHQuYSl9ZnVuY3Rpb24gdTF0KGUpe3JldHVybiBlPj02NSYmZTw9NzA/ZS02NSsxMDplPj05NyYmZTw9MTAyP2UtOTcrMTA6ZT49NDgmJmU8PTU3P2UtNDg6MH1mdW5jdGlvbiBwNG4oZSl7WVUoKTt2YXIgdCxuLHIsYTtmb3Iobj1ldWUoKSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKWlmKHQ9bltyXSxnYyh0LmEsZSwwKSE9LTEpcmV0dXJuIHQ7cmV0dXJuIEgwZX1mdW5jdGlvbiBiNG4oZSx0KXt2YXIgbixyLGEsbztpZih0LmVqKGUuYSksbz1sKEtuKGUuYSw4KSwyMDM1KSxvIT1udWxsKWZvcihuPW8scj0wLGE9bi5sZW5ndGg7cjxhOysrciludWxsLlVtKCl9ZnVuY3Rpb24gYzIoZSx0KXt2YXIgbjtuPShlLkJiJjI1NikhPTAsdD9lLkJifD0yNTY6ZS5CYiY9LTI1NyxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgaDAoZSwxLDIsbix0KSl9ZnVuY3Rpb24gYzhlKGUsdCl7dmFyIG47bj0oZS5CYiYyNTYpIT0wLHQ/ZS5CYnw9MjU2OmUuQmImPS0yNTcsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSw4LG4sdCkpfWZ1bmN0aW9uIGpWKGUsdCl7dmFyIG47bj0oZS5CYiYyNTYpIT0wLHQ/ZS5CYnw9MjU2OmUuQmImPS0yNTcsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSw4LG4sdCkpfWZ1bmN0aW9uIHUyKGUsdCl7dmFyIG47bj0oZS5CYiY1MTIpIT0wLHQ/ZS5CYnw9NTEyOmUuQmImPS01MTMsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwzLG4sdCkpfWZ1bmN0aW9uIHU4ZShlLHQpe3ZhciBuO249KGUuQmImNTEyKSE9MCx0P2UuQmJ8PTUxMjplLkJiJj0tNTEzLGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBoMChlLDEsOSxuLHQpKX1mdW5jdGlvbiBtNG4oZSx0LG4pe3ZhciByLGE7cmV0dXJuIGE9ZS5hLGUuYT10LGUuRGImNCYmIShlLkRiJjEpJiYocj1uZXcgX2EoZSwxLDUsYSxlLmEpLG4/TXhlKG4scik6bj1yKSxufWZ1bmN0aW9uIFNBKGUsdCl7dmFyIG47cmV0dXJuIGUuYj09LTEmJmUuYSYmKG49ZS5hLnBrKCksZS5iPW4/ZS5jLkhoKGUuYS5MaigpLG4pOm1zKGUuYy5EaCgpLGUuYSkpLGUuYy55aChlLmIsdCl9ZnVuY3Rpb24gbDF0KGUsdCl7dmFyIG4scjtmb3Iocj1uZXcgb3IoZSk7ci5lIT1yLmkuZ2MoKTspaWYobj1sKGdyKHIpLDI5KSxxZSh0KT09PXFlKG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGw4ZShlKXt2YXIgdCxuO3JldHVybiB0PWUuayx0PT0oWm4oKSxVcyk/KG49bChRKGUsKGZ0KCksV2MpKSw2NCksbj09KEN0KCksUW4pfHxuPT1Ecik6ITF9ZnVuY3Rpb24gaDF0KGUpe3ZhciB0O3JldHVybiB0PWU2ZShlKSxjdyh0LmEsMCk/KGN5KCksY3koKSxJMGUpOihjeSgpLG5ldyBzYWUoaHNlKHQuYSwwKT9UNmUodCkvRm0odC5hKTowKSl9ZnVuY3Rpb24gTk4oZSx0KXt0aGlzLmU9dCx0aGlzLmE9UWZ0KGUpLHRoaXMuYTw1ND90aGlzLmY9Rm0oZSk6dGhpcy5jPShDZCgpLGl1KGUsMCk+PTA/a2IoZSk6Sl8oa2IocjIoZSkpKSl9ZnVuY3Rpb24gZjF0KGUsdCxuLHIsYSxvKXt0aGlzLmU9bmV3IGJ0LHRoaXMuZj0ocW8oKSxzTSksdnQodGhpcy5lLGUpLHRoaXMuZD10LHRoaXMuYT1uLHRoaXMuYj1yLHRoaXMuZj1hLHRoaXMuYz1vfWZ1bmN0aW9uIHY0bihlLHQsbil7ZS5uPUxtKG5tLFtkdCxhaGVdLFszNzYsMjhdLDE0LFtuLHVhKGIuTWF0aC5jZWlsKHQvMzIpKV0sMiksZS5vPXQsZS5wPW4sZS5qPXQtMT4+MSxlLms9bi0xPj4xfWZ1bmN0aW9uIGQxdChlKXtyZXR1cm4gZS09ZT4+MSYxNDMxNjU1NzY1LGU9KGU+PjImODU4OTkzNDU5KSsoZSY4NTg5OTM0NTkpLGU9KGU+PjQpK2UmMjUyNjQ1MTM1LGUrPWU+PjgsZSs9ZT4+MTYsZSY2M31mdW5jdGlvbiBnMXQoZSx0KXt2YXIgbixyO2ZvcihyPW5ldyBvcihlKTtyLmUhPXIuaS5nYygpOylpZihuPWwoZ3IociksMTQyKSxxZSh0KT09PXFlKG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHc0bihlLHQsbil7dmFyIHIsYSxvO3JldHVybiBvPShhPVZFKGUuYix0KSxhKSxvJiYocj1sKFZVKGxOKGUsbyksIiIpLDI5KSxyKT9QOWUoZSxyLHQsbik6bnVsbH1mdW5jdGlvbiBCY2UoZSx0LG4pe3ZhciByLGEsbztyZXR1cm4gbz0oYT1WRShlLmIsdCksYSksbyYmKHI9bChWVShsTihlLG8pLCIiKSwyOSkscik/QjllKGUscix0LG4pOm51bGx9ZnVuY3Rpb24geTRuKGUsdCl7dmFyIG47aWYobj1YNShlLmksdCksbj09bnVsbCl0aHJvdyB1ZShuZXcgZGQoIk5vZGUgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIFM3ZSh0LG4pLG51bGx9ZnVuY3Rpb24geDRuKGUsdCl7dmFyIG47aWYobj1vUChlLHQpLERlKG4sMzMxKSlyZXR1cm4gbChuLDM1KTt0aHJvdyB1ZShuZXcgWW4oT2IrdCsiJyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUiKSl9ZnVuY3Rpb24gX0EoZSx0LG4pe3ZhciByO2lmKHI9ZS5nYygpLHQ+cil0aHJvdyB1ZShuZXcgbXkodCxyKSk7aWYoZS5TaSgpJiZlLkhjKG4pKXRocm93IHVlKG5ldyBZbihXUCkpO2UuR2kodCxuKX1mdW5jdGlvbiBrNG4oZSx0KXt0LlVnKCJTb3J0IGVuZCBsYWJlbHMiLDEpLElzKEZpKERjKG5ldyBibihudWxsLG5ldyBrbihlLmIsMTYpKSxuZXcgaGopLG5ldyBKNyksbmV3IGFaKSx0LlZnKCl9ZnVuY3Rpb24gSnMoKXtKcz1VLEoxPW5ldyBtTyhjTCwwKSx2Yz1uZXcgbU8oRHgsMSksdWM9bmV3IG1PKE14LDIpLFExPW5ldyBtTyh3aGUsMyksd2Y9bmV3IG1PKCJVUCIsNCl9ZnVuY3Rpb24gUE4oKXtQTj1VLFdXPW5ldyAkc2UoIlAxX1NUUlVDVFVSRSIsMCksWVc9bmV3ICRzZSgiUDJfUFJPQ0VTU0lOR19PUkRFUiIsMSksWFc9bmV3ICRzZSgiUDNfRVhFQ1VUSU9OIiwyKX1mdW5jdGlvbiBwMXQoKXtwMXQ9VSxqVHQ9VGQoVGQodl8oVGQoVGQodl8oZmkobmV3IFhzLCh3eCgpLGxNKSwoV0EoKSxEZGUpKSxoTSksWURlKSxRRGUpLGZNKSxVRGUpLEpEZSl9ZnVuY3Rpb24gRTRuKGUpe3N3aXRjaChsKFEoZSwoZnQoKSxodikpLDMxMSkuZyl7Y2FzZSAxOnJ0KGUsaHYsKGVwKCksVXgpKTticmVhaztjYXNlIDI6cnQoZSxodiwoZXAoKSxGNikpfX1mdW5jdGlvbiBUNG4oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gbmV3IG5KZTtjYXNlIDE6cmV0dXJuIG5ldyBlSmU7Y2FzZSAyOnJldHVybiBuZXcgdEplO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFlJKX19ZnVuY3Rpb24gYjF0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMjpyZXR1cm4gdmM7Y2FzZSAxOnJldHVybiB1YztjYXNlIDQ6cmV0dXJuIFExO2Nhc2UgMzpyZXR1cm4gd2Y7ZGVmYXVsdDpyZXR1cm4gSjF9fWZ1bmN0aW9uIGg4ZShlLHQpe3N3aXRjaChlLmIuZyl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gdDtjYXNlIDI6Y2FzZSAzOnJldHVybiBuZXcgZWYodC5kLDAsdC5hLHQuYik7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gZjhlKGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gZXI7Y2FzZSAyOnJldHVybiBRbjtjYXNlIDM6cmV0dXJuIGFyO2Nhc2UgNDpyZXR1cm4gRHI7ZGVmYXVsdDpyZXR1cm4gUGN9fWZ1bmN0aW9uIEJOKGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gRHI7Y2FzZSAyOnJldHVybiBlcjtjYXNlIDM6cmV0dXJuIFFuO2Nhc2UgNDpyZXR1cm4gYXI7ZGVmYXVsdDpyZXR1cm4gUGN9fWZ1bmN0aW9uICRWKGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gYXI7Y2FzZSAyOnJldHVybiBEcjtjYXNlIDM6cmV0dXJuIGVyO2Nhc2UgNDpyZXR1cm4gUW47ZGVmYXVsdDpyZXR1cm4gUGN9fWZ1bmN0aW9uIGQ4ZShlLHQsbixyKXtzd2l0Y2godCl7Y2FzZSAxOnJldHVybiFlLm4mJihlLm49bmV3IG50KGVjLGUsMSw3KSksZS5uO2Nhc2UgMjpyZXR1cm4gZS5rfXJldHVybiBzeGUoZSx0LG4scil9ZnVuY3Rpb24gQUEoZSx0LG4pe3ZhciByLGE7cmV0dXJuIGUuUGooKT8oYT1lLlFqKCkscj1IdWUoZSx0LG4pLGUuSmooZS5Jaig3LHB0KG4pLHIsdCxhKSkscik6SHVlKGUsdCxuKX1mdW5jdGlvbiBGY2UoZSx0KXt2YXIgbixyLGE7ZS5kPT1udWxsPygrK2UuZSwtLWUuZik6KGE9dC5sZCgpLG49dC5CaSgpLHI9KG4mSWkpJWUuZC5sZW5ndGgsdXZuKGUscixqMnQoZSxyLG4sYSkpKX1mdW5jdGlvbiBBRShlLHQpe3ZhciBuO249KGUuQmImbTApIT0wLHQ/ZS5CYnw9bTA6ZS5CYiY9LTEwMjUsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwxMCxuLHQpKX1mdW5jdGlvbiBMRShlLHQpe3ZhciBuO249KGUuQmImWHkpIT0wLHQ/ZS5CYnw9WHk6ZS5CYiY9LTQwOTcsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwxMixuLHQpKX1mdW5jdGlvbiBNRShlLHQpe3ZhciBuO249KGUuQmImU2wpIT0wLHQ/ZS5CYnw9U2w6ZS5CYiY9LTgxOTMsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwxNSxuLHQpKX1mdW5jdGlvbiBERShlLHQpe3ZhciBuO249KGUuQmImcjQpIT0wLHQ/ZS5CYnw9cjQ6ZS5CYiY9LTIwNDksZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwxMSxuLHQpKX1mdW5jdGlvbiBDNG4oZSl7dmFyIHQ7ZS5nJiYodD1lLmMua2coKT9lLmY6ZS5hLFk5ZSh0LmEsZS5vLCEwKSxZOWUodC5hLGUubywhMSkscnQoZS5vLChOdCgpLE1zKSwoUmEoKSxUdikpKX1mdW5jdGlvbiBTNG4oZSl7dmFyIHQ7aWYoIWUuYSl0aHJvdyB1ZShuZXcgbmMoIkNhbm5vdCBvZmZzZXQgYW4gdW5hc3NpZ25lZCBjdXQuIikpO3Q9ZS5jLWUuYixlLmIrPXQsemF0KGUsdCksJGF0KGUsdCl9ZnVuY3Rpb24gXzRuKGUsdCl7dmFyIG47aWYobj1jcihlLmssdCksbj09bnVsbCl0aHJvdyB1ZShuZXcgZGQoIlBvcnQgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIFM3ZSh0LG4pLG51bGx9ZnVuY3Rpb24gQTRuKGUpe3ZhciB0LG47Zm9yKG49QjJ0KEFoKGUpKS5LYygpO24uT2IoKTspaWYodD1laShuLlBiKCkpLFlBKGUsdCkpcmV0dXJuIExtbigobWV0KCksUl90KSx0KTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBtMXQoZSl7dmFyIHQsbjtmb3Iobj1lLnAuYS5lYygpLktjKCk7bi5PYigpOylpZih0PWwobi5QYigpLDIxOCksdC5mJiZlLmJbdC5jXTwtMWUtMTApcmV0dXJuIHQ7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTDRuKGUpe3ZhciB0LG47Zm9yKG49aGIobmV3IHRiLDkxKSx0PSEwO2UuT2IoKTspdHx8KG4uYSs9Q28pLHQ9ITEsd3UobixlLlBiKCkpO3JldHVybihuLmErPSJdIixuKS5hfWZ1bmN0aW9uIE00bihlKXt2YXIgdCxuLHI7Zm9yKHQ9bmV3IGJ0LHI9bmV3IEcoZS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjAyKSxyYSh0LGwobi5DZigpLDE2KSk7cmV0dXJuIHR9ZnVuY3Rpb24gUmNlKGUsdCl7dmFyIG4scjtmb3Iocj1uZXcgRyh0KTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNDIpLGFsKGUuYi5iLG4uYiksT3BuKGwobi5hLDE5NCksbChuLmIsODYpKX1mdW5jdGlvbiBENG4oZSx0KXt2YXIgbjtyZXR1cm4gbj1ZaShlLmIuYyx0LmIuYyksbiE9MHx8KG49WWkoZS5hLmEsdC5hLmEpLG4hPTApP246WWkoZS5hLmIsdC5hLmIpfWZ1bmN0aW9uIFlpKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPT10P2U9PTA/WWkoMS9lLDEvdCk6MDppc05hTihlKT9pc05hTih0KT8wOjE6LTF9ZnVuY3Rpb24gSTRuKGUpe3ZhciB0O3JldHVybiB0PWUuYVtlLmMtMSZlLmEubGVuZ3RoLTFdLHQ9PW51bGw/bnVsbDooZS5jPWUuYy0xJmUuYS5sZW5ndGgtMSxUcyhlLmEsZS5jLG51bGwpLHQpfWZ1bmN0aW9uIE80bihlKXt2YXIgdCxuLHI7Zm9yKHI9MCxuPWUubGVuZ3RoLHQ9MDt0PG47dCsrKWVbdF09PTMyfHxlW3RdPT0xM3x8ZVt0XT09MTB8fGVbdF09PTl8fChlW3IrK109ZVt0XSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTjRuKGUsdCl7dmFyIG4scixhLG8sZjtmb3IoZj1XdShlLmUuRGgoKSx0KSxvPTAsbj1sKGUuZywxMjQpLGE9MDthPGUuaTsrK2Epcj1uW2FdLGYuYW0oci5MaygpKSYmKytvO3JldHVybiBvfWZ1bmN0aW9uIFA0bihlLHQsbil7dmFyIHIsYTtmb3IoYT1EZSh0LDEwMikmJmwodCwxOSkuQmImSW8/bmV3IFVzZSh0LGUpOm5ldyBtRSh0LGUpLHI9MDtyPG47KytyKWlVKGEpO3JldHVybiBhfWZ1bmN0aW9uIHYxdChlLHQsbil7dmFyIHIsYTtpZihlLmMpSHhlKGUuYyx0LG4pO2Vsc2UgZm9yKGE9bmV3IEcoZS5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTYzKSx2MXQocix0LG4pfWZ1bmN0aW9uIEI0bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1sKHQub2YoZS5hKSwzNCksYT1sKG4ub2YoZS5hKSwzNCksciE9bnVsbCYmYSE9bnVsbD92TihyLGEpOnIhPW51bGw/LTE6YSE9bnVsbD8xOjB9ZnVuY3Rpb24gZzhlKGUsdCl7dmFyIG4scixhO2Zvcihucih0KSxuPSExLHI9bmV3IEcoZSk7ci5hPHIuYy5jLmxlbmd0aDspYT1yZShyKSx0LkhjKGEpJiYoUV8ociksbj0hMCk7cmV0dXJuIG59ZnVuY3Rpb24gdW4oZSl7dmFyIHQsbixyLGE7cmV0dXJuIG49KHQ9bChLMCgocj1lLlJtLGE9ci5mLGE9PUhyP3I6YSkpLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpLGQwKG4sZSksbn1mdW5jdGlvbiB6VihlKXt2YXIgdCxuO3JldHVybiBuPWwoUShlLChOdCgpLFJoKSksODgpLG49PShKcygpLEoxKT8odD16ZShHZShRKGUsY1cpKSksdD49MT92YzpRMSk6bn1mdW5jdGlvbiBGNG4oZSl7c3dpdGNoKGwoUShlLChOdCgpLGJwKSksMjIzKS5nKXtjYXNlIDE6cmV0dXJuIG5ldyBUZWU7Y2FzZSAzOnJldHVybiBuZXcgTGVlO2RlZmF1bHQ6cmV0dXJuIG5ldyBFZWV9fWZ1bmN0aW9uIHhiKGUpe2lmKGUuYyl4YihlLmMpO2Vsc2UgaWYoZS5kKXRocm93IHVlKG5ldyBuYygiU3RyZWFtIGFscmVhZHkgdGVybWluYXRlZCwgY2FuJ3QgYmUgbW9kaWZpZWQgb3IgdXNlZCIpKX1mdW5jdGlvbiBCdyhlLHQsbil7dmFyIHI7cmV0dXJuIHI9ZS5hLmdldCh0KSxlLmEuc2V0KHQsbj09PXZvaWQgMD9udWxsOm4pLHI9PT12b2lkIDA/KCsrZS5jLCsrZS5iLmcpOisrZS5kLHJ9ZnVuY3Rpb24gUjRuKGUsdCxuKXt2YXIgcixhO2ZvcihhPWUuYS5lYygpLktjKCk7YS5PYigpOylpZihyPWwoYS5QYigpLDEwKSxFTihuLGwoanQodCxyLnApLDE2KSkpcmV0dXJuIHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcDhlKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj0wLHQmJihCNShlLmEpP3IrPXQuZi5hLzI6cis9dC5mLmIvMiksbiYmKEI1KGUuYSk/cis9bi5mLmEvMjpyKz1uLmYuYi8yKSxyfWZ1bmN0aW9uIGo0bihlLHQsbil7dmFyIHI7cj1uLCFyJiYocj1CNGUobmV3IEw4LDApKSxyLlVnKEwzdCwyKSxrZHQoZS5iLHQsci5laCgxKSksZU1uKGUsdCxyLmVoKDEpKSxySW4odCxyLmVoKDEpKSxyLlZnKCl9ZnVuY3Rpb24gYjhlKGUsdCxuKXt2YXIgcixhO3JldHVybiByPShyYigpLGE9bmV3IEFTLGEpLGRWKHIsdCksZlYocixuKSxlJiZxcigoIWUuYSYmKGUuYT1uZXcgWXMocWgsZSw1KSksZS5hKSxyKSxyfWZ1bmN0aW9uIGpjZShlKXt2YXIgdDtyZXR1cm4gZS5EYiY2ND9nMChlKToodD1uZXcgQWYoZzAoZSkpLHQuYSs9IiAoaWRlbnRpZmllcjogIixYbyh0LGUuayksdC5hKz0iKSIsdC5hKX1mdW5jdGlvbiAkY2UoZSx0KXt2YXIgbjtuPShlLkJiJmV1KSE9MCx0P2UuQmJ8PWV1OmUuQmImPS0zMjc2OSxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgaDAoZSwxLDE4LG4sdCkpfWZ1bmN0aW9uIG04ZShlLHQpe3ZhciBuO249KGUuQmImZXUpIT0wLHQ/ZS5CYnw9ZXU6ZS5CYiY9LTMyNzY5LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBoMChlLDEsMTgsbix0KSl9ZnVuY3Rpb24gSUUoZSx0KXt2YXIgbjtuPShlLkJiJl9kKSE9MCx0P2UuQmJ8PV9kOmUuQmImPS0xNjM4NSxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgaDAoZSwxLDE2LG4sdCkpfWZ1bmN0aW9uIHY4ZShlLHQpe3ZhciBuO249KGUuQmImSW8pIT0wLHQ/ZS5CYnw9SW86ZS5CYiY9LTY1NTM3LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBoMChlLDEsMjAsbix0KSl9ZnVuY3Rpb24gdzhlKGUpe3ZhciB0O3JldHVybiB0PVdlKGtmLEFkLDI4LDIsMTUsMSksZS09SW8sdFswXT0oZT4+MTApK0FQJlpzLHRbMV09KGUmMTAyMykrNTYzMjAmWnMsSWYodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiAkNG4oZSl7dmFyIHQ7cmV0dXJuIHQ9ankoZSksdD4zNDAyODIzNDY2Mzg1Mjg4NmUyMj9nczp0PC0zNDAyODIzNDY2Mzg1Mjg4NmUyMj9pYTp0fWZ1bmN0aW9uIGJvKGUsdCl7dmFyIG47cmV0dXJuIHdjKGUpJiZ3Yyh0KSYmKG49ZSt0LF9QPG4mJm48Wm0pP246bWIoSzNuKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIG1vKGUsdCl7dmFyIG47cmV0dXJuIHdjKGUpJiZ3Yyh0KSYmKG49ZSp0LF9QPG4mJm48Wm0pP246bWIocUxuKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIERmKGUsdCl7dmFyIG47cmV0dXJuIHdjKGUpJiZ3Yyh0KSYmKG49ZS10LF9QPG4mJm48Wm0pP246bWIoSmZ0KHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIE9jKGUsdCl7dmFyIG47cmV0dXJuIGUuaXx8ZjllKGUpLG49bChRbyhlLmcsdCksNDIpLG4/bmV3IFpwKGUuaixsKG4uYSwxNykuYSxsKG4uYiwxNykuYSk6KENuKCksQ24oKSxfbyl9ZnVuY3Rpb24gejRuKGUpe3JldHVybiBNY2UoKSxIbigpLCEhKHgxdChsKGUuYSw4NikuaixsKGUuYiw4OCkpfHxsKGUuYSw4NikuZC5lIT0wJiZ4MXQobChlLmEsODYpLmosbChlLmIsODgpKSl9ZnVuY3Rpb24gcTRuKGUsdCl7cmV0dXJuIHZuKHQuYiYmdC5jP0JtKHQuYikrIi0+IitCbSh0LmMpOiJlXyIrZXModCksZS5iJiZlLmM/Qm0oZS5iKSsiLT4iK0JtKGUuYyk6ImVfIitlcyhlKSl9ZnVuY3Rpb24gSDRuKGUsdCl7cmV0dXJuIHZuKHQuYiYmdC5jP0JtKHQuYikrIi0+IitCbSh0LmMpOiJlXyIrZXModCksZS5iJiZlLmM/Qm0oZS5iKSsiLT4iK0JtKGUuYyk6ImVfIitlcyhlKSl9ZnVuY3Rpb24gRncoZSx0KXtyZXR1cm4gQTEoKSxmMChBYiksYi5NYXRoLmFicyhlLXQpPD1BYnx8ZT09dHx8aXNOYU4oZSkmJmlzTmFOKHQpPzA6ZTx0Py0xOmU+dD8xOnV3KGlzTmFOKGUpLGlzTmFOKHQpKX1mdW5jdGlvbiBpcCgpe2lwPVUsSGdlPW5ldyB4cShjTCwwKSxKQj1uZXcgeHEoIlBPTFlMSU5FIiwxKSxpQz1uZXcgeHEoIk9SVEhPR09OQUwiLDIpLHM5PW5ldyB4cSgiU1BMSU5FUyIsMyl9ZnVuY3Rpb24gcVYoKXtxVj1VLFlJZT1uZXcgUnNlKCJBU1BFQ1RfUkFUSU9fRFJJVkVOIiwwKSx1Z2U9bmV3IFJzZSgiTUFYX1NDQUxFX0RSSVZFTiIsMSksV0llPW5ldyBSc2UoIkFSRUFfRFJJVkVOIiwyKX1mdW5jdGlvbiBWNG4oZSx0LG4pe3ZhciByO3RyeXtkeW4oZSx0LG4pfWNhdGNoKGEpe3Rocm93IGE9YnMoYSksRGUoYSw2MDYpPyhyPWEsdWUobmV3IHc2ZShyKSkpOnVlKGEpfXJldHVybiB0fWZ1bmN0aW9uIFU0bihlKXt2YXIgdCxuLHI7Zm9yKG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09bnVsbCl0aHJvdyB1ZShuZXcgRDgoImF0IGluZGV4ICIrbikpO3JldHVybiB0PWUsbmV3IElsKHQpfWZ1bmN0aW9uIHNwKGUpe3ZhciB0LG4scjtmb3IodD1uZXcgYnQscj1uZXcgRyhlLmopO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxMiksdnQodCxuLmIpO3JldHVybiBYcih0KSxuZXcgUF8odCl9ZnVuY3Rpb24ga2EoZSl7dmFyIHQsbixyO2Zvcih0PW5ldyBidCxyPW5ldyBHKGUuaik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDEyKSx2dCh0LG4uZSk7cmV0dXJuIFhyKHQpLG5ldyBQXyh0KX1mdW5jdGlvbiBxcyhlKXt2YXIgdCxuLHI7Zm9yKHQ9bmV3IGJ0LHI9bmV3IEcoZS5qKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTIpLHZ0KHQsbi5nKTtyZXR1cm4gWHIodCksbmV3IFBfKHQpfWZ1bmN0aW9uIEc0bihlLHQpe3ZhciBuLHIsYTtmb3IoYT1uZXcgUHIscj10LnZjKCkuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksNDQpLGtpKGEsbi5sZCgpLE0zbihlLGwobi5tZCgpLDE1KSkpO3JldHVybiBhfWZ1bmN0aW9uIEs0bihlKXt2YXIgdCxuO2ZvcihuPUJFbihBaChreShlKSkpLktjKCk7bi5PYigpOylpZih0PWVpKG4uUGIoKSksWUEoZSx0KSlyZXR1cm4gTW1uKChwZXQoKSxqX3QpLHQpO3JldHVybiBudWxsfWZ1bmN0aW9uIHpjZShlLHQpe3ZhciBuLHIsYTtmb3IoYT0wLHI9bCh0LktiKGUpLDIwKS5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSwxOCksUnQoQnQoUShuLChmdCgpLFcxKSkpKXx8KythO3JldHVybiBhfWZ1bmN0aW9uIHcxdChlKXt2YXIgdCxuLHIsYTtmb3IodD1uZXcgS3J0KGUuUmQoKS5nYygpKSxhPTAscj1jeChlLlJkKCkuS2MoKSk7ci5PYigpOyluPXIuUGIoKSxEMm4odCxuLHB0KGErKykpO3JldHVybiBNOW4odC5hKX1mdW5jdGlvbiBxY2UoZSx0LG4scil7dmFyIGEsbztyZXR1cm4gbnIociksbnIobiksYT1lLnhjKHQpLG89YT09bnVsbD9uOnJldChsKGEsMTUpLGwobiwxNikpLG89PW51bGw/ZS5CYyh0KTplLnpjKHQsbyksb31mdW5jdGlvbiBXNG4oZSx0LG4scil7dmFyIGEsbyxmO2ZvcihhPXQrMTthPG47KythKWZvcihvPWE7bz50JiZyLk5lKGVbby0xXSxlW29dKT4wOy0tbylmPWVbb10sVHMoZSxvLGVbby0xXSksVHMoZSxvLTEsZil9ZnVuY3Rpb24gc24oZSx0KXt2YXIgbixyLGEsbyxmO2lmKG49dC5mLGgyKGUuYy5kLG4sdCksdC5nIT1udWxsKWZvcihhPXQuZyxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSxoMihlLmMuZSxyLHQpfWZ1bmN0aW9uIHkxdChlLHQpe3ZhciBuLHI7Zm9yKG49UnIoZSwwKTtuLmIhPW4uZC5jOyl7aWYocj1YSShHZShCcihuKSkpLHI9PXQpcmV0dXJuO2lmKHI+dCl7cGN0KG4pO2JyZWFrfX16TyhuLHQpfWZ1bmN0aW9uIFk0bihlLHQpe3ZhciBuLHIsYTtyPUc1KHQpLGE9emUoR2UoUHkociwoTnQoKSx4MCkpKSksbj1iLk1hdGgubWF4KDAsYS8yLS41KSxGQSh0LG4sMSksdnQoZSxuZXcgTmV0KHQsbikpfWZ1bmN0aW9uIFg0bihlLHQsbil7dmFyIHI7bi5VZygiU3RyYWlnaHQgTGluZSBFZGdlIFJvdXRpbmciLDEpLG4uZGgodCx5Q2UpLHI9bChhdCh0LChINSgpLFk2KSksMjcpLHJ2dChlLHIpLG4uZGgodCxPRyl9ZnVuY3Rpb24geThlKGUsdCl7ZS5uLmMubGVuZ3RoPT0wJiZ2dChlLm4sbmV3IFBIKGUucyxlLnQsZS5pKSksdnQoZS5iLHQpLGV4ZShsKGp0KGUubixlLm4uYy5sZW5ndGgtMSksMjA5KSx0KSxqbXQoZSx0KX1mdW5jdGlvbiBMQShlKXt2YXIgdDt0aGlzLmE9KHQ9bChlLmUmJmUuZSgpLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpLHRoaXMuYj1XZSh3YSxSbiwxLHRoaXMuYS5hLmxlbmd0aCw1LDEpfWZ1bmN0aW9uIHhjKGUpe3ZhciB0O3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLlRtPT09eGU/X20oYmgoZSkpKyJAIisodD1lcyhlKT4+PjAsdC50b1N0cmluZygxNikpOmUudG9TdHJpbmcoKX1mdW5jdGlvbiBRNG4oZSx0KXtyZXR1cm4gZS5oPT1TUCYmZS5tPT0wJiZlLmw9PTA/KHQmJihOYj1xdSgwLDAsMCkpLGVudCgoaUUoKSxZU2UpKSk6KHQmJihOYj1xdShlLmwsZS5tLGUuaCkpLHF1KDAsMCwwKSl9ZnVuY3Rpb24gSjRuKGUsdCl7c3dpdGNoKHQuZyl7Y2FzZSAyOnJldHVybiBlLmI7Y2FzZSAxOnJldHVybiBlLmM7Y2FzZSA0OnJldHVybiBlLmQ7Y2FzZSAzOnJldHVybiBlLmE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24geDF0KGUsdCl7c3dpdGNoKHQuZyl7Y2FzZSAyOnJldHVybiBlLmI7Y2FzZSAxOnJldHVybiBlLmM7Y2FzZSA0OnJldHVybiBlLmQ7Y2FzZSAzOnJldHVybiBlLmE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24geDhlKGUsdCxuLHIpe3N3aXRjaCh0KXtjYXNlIDM6cmV0dXJuIGUuZjtjYXNlIDQ6cmV0dXJuIGUuZztjYXNlIDU6cmV0dXJuIGUuaTtjYXNlIDY6cmV0dXJuIGUuan1yZXR1cm4gZDhlKGUsdCxuLHIpfWZ1bmN0aW9uIEhWKGUsdCl7aWYodD09ZS5kKXJldHVybiBlLmU7aWYodD09ZS5lKXJldHVybiBlLmQ7dGhyb3cgdWUobmV3IFluKCJOb2RlICIrdCsiIG5vdCBwYXJ0IG9mIGVkZ2UgIitlKSl9ZnVuY3Rpb24gWjRuKGUsdCl7dmFyIG47aWYobj1vUChlLkRoKCksdCksRGUobiwxMDIpKXJldHVybiBsKG4sMTkpO3Rocm93IHVlKG5ldyBZbihPYit0KyInIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIpKX1mdW5jdGlvbiB1ZihlLHQsbixyKXtpZih0PDApJDllKGUsbixyKTtlbHNle2lmKCFuLnJrKCkpdGhyb3cgdWUobmV3IFluKE9iK24ueGUoKStrTCkpO2wobiw2OSkud2soKS5DayhlLGUuaGkoKSx0LHIpfX1mdW5jdGlvbiBRbChlKXt2YXIgdDtpZihlLmIpe2lmKFFsKGUuYiksZS5iLmQhPWUuYyl0aHJvdyB1ZShuZXcgWGgpfWVsc2UgZS5kLmRjKCkmJih0PWwoZS5mLmMueGMoZS5lKSwxNiksdCYmKGUuZD10KSl9ZnVuY3Rpb24gZTVuKGUpe3B5KCk7dmFyIHQsbixyLGE7Zm9yKHQ9ZS5vLmIscj1sKGwoJGkoZS5yLChDdCgpLERyKSksMjEpLDg3KS5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSwxMTcpLGE9bi5lLGEuYis9dH1mdW5jdGlvbiB0NW4oZSl7dmFyIHQsbixyO2Zvcih0aGlzLmE9bmV3IGJkLHI9bmV3IEcoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE2KSx0PW5ldyBzc3QsdDNuKHQsbiksbmEodGhpcy5hLHQpfWZ1bmN0aW9uIG41bihlLHQpe3ZhciBuLHIsYTtmb3Iocj1yX24oZSx0KSxhPXJbci5sZW5ndGgtMV0vMixuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXT49YSlyZXR1cm4gdC5jK247cmV0dXJuIHQuYyt0LmIuZ2MoKX1mdW5jdGlvbiByNW4oZSx0KXtGaygpO3ZhciBuLHIsYSxvO2ZvcihyPU9sdChlKSxhPXQsbkUociwwLHIubGVuZ3RoLGEpLG49MDtuPHIubGVuZ3RoO24rKylvPVY3bihlLHJbbl0sbiksbiE9byYmQUEoZSxuLG8pfWZ1bmN0aW9uIEhjZShlLHQsbil7dmFyIHIsYTtmb3Iocj0wLGE9ZS5sZW5ndGg7cjxhO3IrKylpZihtY2UoKFhuKHIsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChyKSksdCxuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpNW4oZSx0KXt2YXIgbixyO2ZvcihyPWUuZS5hLmVjKCkuS2MoKTtyLk9iKCk7KWlmKG49bChyLlBiKCksMjcyKSxoOW4odCxuLmQpfHx5a24odCxuLmQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGs4ZShlLHQsbixyLGEpe3ZhciBvLGYsZztmb3IoZj1hO3QuYiE9dC5jOylvPWwoWDgodCksMTApLGc9bChPYyhvLHIpLlhiKDApLDEyKSxlLmRbZy5wXT1mKyssJG4obi5jLGcpO3JldHVybiBmfWZ1bmN0aW9uIEU4ZShlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3Iocj0wLG49MCxvPXQsZj0wLGc9by5sZW5ndGg7ZjxnOysrZilhPW9bZl0sYT4wJiYocis9YSwrK24pO3JldHVybiBuPjEmJihyKz1lLmQqKG4tMSkpLHJ9ZnVuY3Rpb24gczVuKGUpe3ZhciB0LG4scixhLG87cmV0dXJuIG89anhlKGUpLG49WkkoZS5jKSxyPSFuLHImJihhPW5ldyAkcCxlMShvLCJrbm93bkxheW91dGVycyIsYSksdD1uZXcgdVFlKGEpLHRvKGUuYyx0KSksb31mdW5jdGlvbiBUOGUoZSl7dmFyIHQsbixyO2ZvcihyPW5ldyBVcCxyLmErPSJbIix0PTAsbj1lLmdjKCk7dDxuOylYbyhyLGpfKGUuVmkodCkpKSwrK3Q8biYmKHIuYSs9Q28pO3JldHVybiByLmErPSJdIixyLmF9ZnVuY3Rpb24gYTVuKGUpe3JldHVybiBlLmU9PW51bGw/ZTooIWUuYyYmKGUuYz1uZXcgZWxlKChlLmYmMjU2KSE9MCxlLmksZS5hLGUuZCwoZS5mJjE2KSE9MCxlLmosZS5nLG51bGwpKSxlLmMpfWZ1bmN0aW9uIG81bihlKXtyZXR1cm4gZS5rIT0oWm4oKSxQcyk/ITE6VzUobmV3IGJuKG51bGwsbmV3IHZ3KG5ldyBocihkcihxcyhlKS5hLktjKCksbmV3IGopKSkpLG5ldyBIail9ZnVuY3Rpb24gbGYoZSl7dmFyIHQsbjtyZXR1cm4gRGUoZSwzMDcpPyhuPWl2bihsKGUsMzA3KSksdD1uLHQpOkRlKGUsNDQxKT9sKGUsNDQxKS5hOkRlKGUsNTkpP25ldyBfSmUoZSk6bmV3IHAzZShlKX1mdW5jdGlvbiBjNW4oZSl7dmFyIHQ7cmV0dXJuIGU9PW51bGw/ITA6KHQ9ZS5sZW5ndGgsdD4wJiYoWG4odC0xLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodC0xKT09NTgpJiYhSGNlKGUsJE0sek0pKX1mdW5jdGlvbiBDOGUoZSx0KXt2YXIgbjtyZXR1cm4gcWUoZSk9PT1xZSh0KT8hMDpEZSh0LDkyKT8obj1sKHQsOTIpLGUuZT09bi5lJiZlLmQ9PW4uZCYmSW1uKGUsbi5hKSk6ITF9ZnVuY3Rpb24gZ3goZSl7c3dpdGNoKEN0KCksZS5nKXtjYXNlIDQ6cmV0dXJuIFFuO2Nhc2UgMTpyZXR1cm4gYXI7Y2FzZSAzOnJldHVybiBEcjtjYXNlIDI6cmV0dXJuIGVyO2RlZmF1bHQ6cmV0dXJuIFBjfX1mdW5jdGlvbiB1NW4oZSl7dmFyIHQsbjtpZihlLmIpcmV0dXJuIGUuYjtmb3Iobj1HMT9udWxsOmUuZDtuOyl7aWYodD1HMT9udWxsOm4uYix0KXJldHVybiB0O249RzE/bnVsbDpuLmR9cmV0dXJuIERrKCksd19lfWZ1bmN0aW9uIFM4ZShlKXt2YXIgdCxuLHI7Zm9yKHI9emUoR2UoZS5hLm9mKChwaSgpLGlZKSkpKSxuPW5ldyBHKGUuYS5TZigpKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNjk1KSxud3QoZSx0LHIpfWZ1bmN0aW9uIGw1bihlKXt2YXIgdCxuLHIsYTtmb3IodD0oZS5qPT1udWxsJiYoZS5qPShYaygpLGE9UzBlLm1lKGUpLEE4bihhKSkpLGUuaiksbj0wLHI9dC5sZW5ndGg7bjxyOysrbik7fWZ1bmN0aW9uIFZjZShlLHQpe3ZhciBuLHI7Zm9yKHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDQyKSx2dChlLmIuYixsKG4uYiw4NikpLHdvZShsKG4uYSwxOTQpLGwobi5iLDg2KSl9ZnVuY3Rpb24gaDVuKGUsdCxuKXt2YXIgcixhO2ZvcihhPWUuYS5iLHI9YS5jLmxlbmd0aDtyPG47cisrKXB3KGEsMCxuZXcgeXUoZS5hKSk7VmEodCxsKGp0KGEsYS5jLmxlbmd0aC1uKSwzMCkpLGUuYlt0LnBdPW59ZnVuY3Rpb24gZjVuKGUsdCxuLHIsYSl7U2goKSxwMChzMChpMChyMChhMChuZXcgX2YsMCksYS5kLmUtZSksdCksYS5kKSkscDAoczAoaTAocjAoYTAobmV3IF9mLDApLG4tYS5hLmUpLGEuYSkscikpfWZ1bmN0aW9uIGsxdChlLHQpe3ZhciBuO3JldHVybiBlLmQ/SHUoZS5iLHQpP2woY3IoZS5iLHQpLDQ3KToobj10LmRnKCksa2koZS5iLHQsbiksbik6dC5kZygpfWZ1bmN0aW9uIGQ1bihlKXt2YXIgdD1lLmU7ZnVuY3Rpb24gbihyKXtyZXR1cm4hcnx8ci5sZW5ndGg9PTA/IiI6IgkiK3Iuam9pbihgCglgKX1yZXR1cm4gdCYmKHQuc3RhY2t8fG4oZVtqbGVdKSl9ZnVuY3Rpb24gXzhlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4gZS5mIT0wO2Nhc2UgNDpyZXR1cm4gZS5nIT0wO2Nhc2UgNTpyZXR1cm4gZS5pIT0wO2Nhc2UgNjpyZXR1cm4gZS5qIT0wfXJldHVybiBfN2UoZSx0KX1mdW5jdGlvbiBFMXQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcga25lO2Nhc2UgMTpyZXR1cm4gbmV3IFB1O2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKEZoZSsoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIGc1bihlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBTUztjYXNlIDE6cmV0dXJuIG5ldyBSYztkZWZhdWx0OnRocm93IHVlKG5ldyBZbihFZmUrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiBwNW4oZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBuZXcgYm5lO2Nhc2UgMjpyZXR1cm4gbmV3IHVydDtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihFZmUrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiBUMXQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcgSHdlO2Nhc2UgMTpyZXR1cm4gbmV3IHJKZTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihGRysoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIFVjZSgpe1J4ZSgpO3ZhciBlLHQsbjtuPWZPbisrK0RhdGUubm93KCksZT11YShiLk1hdGguZmxvb3IobipNUCkpJlpVLHQ9dWEobi1lKmNFZSksdGhpcy5hPWVeMTUwMix0aGlzLmI9dF5oaGV9ZnVuY3Rpb24gaGYoKXtoZj1VLEVCPW5ldyBsTyhJZCwwKSxZTD1uZXcgbE8oIkZJUlNUIiwxKSwkYj1uZXcgbE8oVTN0LDIpLFhMPW5ldyBsTygiTEFTVCIsMyksZDQ9bmV3IGxPKEczdCw0KX1mdW5jdGlvbiBWVigpe1ZWPVUsS2dlPW5ldyBUcShjQ2UsMCksc1BlPW5ldyBUcSgiR1JPVVBfREVDIiwxKSxvUGU9bmV3IFRxKCJHUk9VUF9NSVhFRCIsMiksYVBlPW5ldyBUcSgiR1JPVVBfSU5DIiwzKX1mdW5jdGlvbiBiNW4oZSx0KXt2YXIgbixyLGEsbzt0JiYoYT1ucCh0LCJ4Iiksbj1uZXcgZVFlKGUpLG9FKG4uYSwobnIoYSksYSkpLG89bnAodCwieSIpLHI9bmV3IG5RZShlKSx1RShyLmEsKG5yKG8pLG8pKSl9ZnVuY3Rpb24gbTVuKGUsdCl7dmFyIG4scixhLG87dCYmKGE9bnAodCwieCIpLG49bmV3IGlRZShlKSxhRShuLmEsKG5yKGEpLGEpKSxvPW5wKHQsInkiKSxyPW5ldyBzUWUoZSksY0Uoci5hLChucihvKSxvKSkpfWZ1bmN0aW9uIHY1bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihhPW5ldyBCdSh0LmdjKCkpLHI9dC5LYygpO3IuT2IoKTspbj1yLlBiKCksbz1jbGUoZSxsKG4sNTgpKSxvJiYkbihhLmMsbyk7cmV0dXJuIGF9ZnVuY3Rpb24gTnkoZSx0LG4pe3ZhciByLGE7Zm9yKGE9ZS5LYygpO2EuT2IoKTspaWYocj1hLlBiKCkscWUodCk9PT1xZShyKXx8dCE9bnVsbCYmUGkodCxyKSlyZXR1cm4gbiYmYS5RYigpLCEwO3JldHVybiExfWZ1bmN0aW9uIEMxdChlKXt2YXIgdCxuLHI7cmV0dXJuIG49ZS5qaCgpLG4/KHQ9ZS5FaCgpLERlKHQsMTY3KSYmKHI9QzF0KGwodCwxNjcpKSxyIT1udWxsKT9yKyIuIituOm4pOm51bGx9ZnVuY3Rpb24gdzVuKGUpe3ZhciB0LG4scjtyZXR1cm4gZS5lPT0wPzA6KHQ9ZS5kPDw1LG49ZS5hW2UuZC0xXSxlLmU8MCYmKHI9TWZ0KGUpLHI9PWUuZC0xJiYoLS1uLG49bnwwKSksdC09clAobiksdCl9ZnVuY3Rpb24geTVuKGUpe3ZhciB0LG4scjtyZXR1cm4gZTxsSy5sZW5ndGg/bEtbZV06KG49ZT4+NSx0PWUmMzEscj1XZShWcixkaSwyOCxuKzEsMTUsMSkscltuXT0xPDx0LG5ldyBJbSgxLG4rMSxyKSl9ZnVuY3Rpb24gUzF0KGUsdCl7dmFyIG4scjtpZih0KXtmb3Iobj0wO248ZS5pOysrbilpZihyPWwoZS5nW25dLDM3OCksci5taih0KSlyZXR1cm4hMTtyZXR1cm4gcXIoZSx0KX1lbHNlIHJldHVybiExfWZ1bmN0aW9uIEE4ZShlLHQsbil7dmFyIHIsYTtpZigrK2UuaixuLmRjKCkpcmV0dXJuITE7Zm9yKGE9bi5LYygpO2EuT2IoKTspcj1hLlBiKCksZS5xaih0LGUuWmkodCxyKSksKyt0O3JldHVybiEwfWZ1bmN0aW9uIHg1bihlLHQsbixyKXt2YXIgYSxvO2lmKG89bi10LG88Mylmb3IoO288MzspZSo9MTAsKytvO2Vsc2V7Zm9yKGE9MTtvPjM7KWEqPTEwLC0tbztlPShlKyhhPj4xKSkvYXwwfXJldHVybiByLmk9ZSwhMH1mdW5jdGlvbiBtcyhlLHQpe3ZhciBuLHIsYTtpZihuPShlLmk9PW51bGwmJlNkKGUpLGUuaSkscj10LkxqKCksciE9LTEpe2ZvcihhPW4ubGVuZ3RoO3I8YTsrK3IpaWYobltyXT09dClyZXR1cm4gcn1yZXR1cm4tMX1mdW5jdGlvbiBrNW4oZSl7dmFyIHQsbixyLGEsbztmb3Iobj1sKGUuZyw2ODkpLHI9ZS5pLTE7cj49MDstLXIpZm9yKHQ9bltyXSxhPTA7YTxyOysrYSlpZihvPW5bYV0sSW10KGUsdCxvKSl7dngoZSxyKTticmVha319ZnVuY3Rpb24gTDhlKGUpe3ZhciB0LG4scixhO2Zvcih0PW5ldyAkcCxhPW5ldyB5byhlLmIuS2MoKSk7YS5iLk9iKCk7KXI9bChhLmIuUGIoKSw3MDEpLG49UjluKHIpLFRnbih0LHQuYS5sZW5ndGgsbik7cmV0dXJuIHQuYX1mdW5jdGlvbiBNOGUoZSl7dmFyIHQ7cmV0dXJuIWUuYyYmKGUuYz1uZXcga2gpLFZzKGUuZCxuZXcgbzUpLHhTbihlKSx0PWZTbihlKSxJcyhuZXcgYm4obnVsbCxuZXcga24oZS5kLDE2KSksbmV3IElpZShlKSksdH1mdW5jdGlvbiBFNW4oZSx0KXt0LlVnKCJFbmQgbGFiZWwgcG9zdC1wcm9jZXNzaW5nIiwxKSxJcyhGaShEYyhuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IGVaKSxuZXcgdFopLG5ldyBuWiksdC5WZygpfWZ1bmN0aW9uIEQ4ZShlKXtHY2UoKSx0aGlzLmM9TzEoaGUobGUoRE9uLDEpLFJuLDg0NSwwLFtYa3RdKSksdGhpcy5iPW5ldyBQcix0aGlzLmE9ZSxraSh0aGlzLmIsVFcsMSksVnUoUWt0LG5ldyBJWGUodGhpcykpfWZ1bmN0aW9uIF8xdChlLHQsbil7cWh0KCksSlFlLmNhbGwodGhpcyksdGhpcy5hPUxtKEc2dCxbZHQsd0VlXSxbNjAzLDIxN10sMCxbZ0sscTBlXSwyKSx0aGlzLmM9bmV3ICQ4LHRoaXMuZz1lLHRoaXMuZj10LHRoaXMuZD1ufWZ1bmN0aW9uIEk4ZShlLHQpe3RoaXMubj1MbShubSxbZHQsYWhlXSxbMzc2LDI4XSwxNCxbdCx1YShiLk1hdGguY2VpbChlLzMyKSldLDIpLHRoaXMubz1lLHRoaXMucD10LHRoaXMuaj1lLTE+PjEsdGhpcy5rPXQtMT4+MX1mdW5jdGlvbiBUNW4oZSl7WkgoKSxsKGUub2YoKHBpKCksVWIpKSwxODEpLkhjKChabCgpLGhZKSkmJihsKGUub2YoUzQpLDE4MSkuRmMoKFJsKCksYTkpKSxsKGUub2YoVWIpLDE4MSkuTWMoaFkpKX1mdW5jdGlvbiBBMXQoZSl7dmFyIHQsbjt0PWUuZD09KHl4KCksSVQpLG49THhlKGUpLHQmJiFufHwhdCYmbj9ydChlLmEsKE50KCksUmQpLChvZygpLFZCKSk6cnQoZS5hLChOdCgpLFJkKSwob2coKSxIQikpfWZ1bmN0aW9uIEdjZSgpe0djZT1VLHRxKCksVFc9KE50KCksbTMpLFFrdD1PMShoZShsZShDZ2UsMSksb0NlLDE0OSwwLFtTQix4MCxINixiMyx5NCxjZGUsR1QsS1QsdWRlLHRNLHE2LHZ2LFY2XSkpfWZ1bmN0aW9uIEM1bihlLHQpe3ZhciBuO3JldHVybiBuPWwoeWMoZSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSksbi5RYyhZaXQobi5nYygpKSl9ZnVuY3Rpb24gTDF0KGUsdCl7dmFyIG4scjtpZihyPW5ldyBiYShlLmEuYWQodCwhMCkpLHIuYS5nYygpPD0xKXRocm93IHVlKG5ldyBTOCk7cmV0dXJuIG49ci5hLmVjKCkuS2MoKSxuLlBiKCksbChuLlBiKCksNDApfWZ1bmN0aW9uIFM1bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj16ZShlLnBbdC5pLnBdKSt6ZShlLmRbdC5pLnBdKSt0Lm4uYit0LmEuYixhPXplKGUucFtuLmkucF0pK3plKGUuZFtuLmkucF0pK24ubi5iK24uYS5iLGEtcn1mdW5jdGlvbiBPOGUoZSx0KXt2YXIgbjtyZXR1cm4gZS5pPjAmJih0Lmxlbmd0aDxlLmkmJihuPWJOKGJoKHQpLmMsZS5pKSx0PW4pLHB1KGUuZywwLHQsMCxlLmkpKSx0Lmxlbmd0aD5lLmkmJlRzKHQsZS5pLG51bGwpLHR9ZnVuY3Rpb24gVVYoZSl7dmFyIHQ7cmV0dXJuIGUuRGImNjQ/Q0EoZSk6KHQ9bmV3IEFmKENBKGUpKSx0LmErPSIgKGluc3RhbmNlQ2xhc3NOYW1lOiAiLFhvKHQsZS5EKSx0LmErPSIpIix0LmEpfWZ1bmN0aW9uIEdWKGUpe3ZhciB0LG4scixhO2ZvcihhPTAsbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0PShYbihuLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobikpLHQ8NjQmJihhPVEwKGEsbDAoMSx0KSkpO3JldHVybiBhfWZ1bmN0aW9uIF81bihlLHQsbil7dmFyIHIsYTtmb3Iocj12YShuLFZvKSxhPTA7aXUociwwKSE9MCYmYTx0O2ErKylyPWJvKHIsdmEoZVthXSxWbykpLGVbYV09WXIocikscj1idyhyLDMyKTtyZXR1cm4gWXIocil9ZnVuY3Rpb24gRk4oZSx0KXt2YXIgbixyLGEsbztmb3Iobz1XdShlLmUuRGgoKSx0KSxuPWwoZS5nLDEyNCksYT0wO2E8ZS5pOysrYSlpZihyPW5bYV0sby5hbShyLkxrKCkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEtjZShlLHQpe3ZhciBuLHIsYTtyZXR1cm4gZS5mPjA/KGUuX2ooKSxyPXQ9PW51bGw/MDplcyh0KSxhPShyJklpKSVlLmQubGVuZ3RoLG49ajJ0KGUsYSxyLHQpLG4hPS0xKTohMX1mdW5jdGlvbiBNMXQoZSx0KXt2YXIgbixyO2UuYT1ibyhlLmEsMSksZS5jPWIuTWF0aC5taW4oZS5jLHQpLGUuYj1iLk1hdGgubWF4KGUuYix0KSxlLmQrPXQsbj10LWUuZixyPWUuZStuLGUuZj1yLWUuZS1uLGUuZT1yfWZ1bmN0aW9uIE44ZShlLHQpe3N3aXRjaCh0KXtjYXNlIDM6TXcoZSwwKTtyZXR1cm47Y2FzZSA0OkR3KGUsMCk7cmV0dXJuO2Nhc2UgNTpVdShlLDApO3JldHVybjtjYXNlIDY6R3UoZSwwKTtyZXR1cm59aThlKGUsdCl9ZnVuY3Rpb24gUncoZSx0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIEc4KGUuaiwoa2woKSx4QWUpKTtjYXNlIDI6cmV0dXJuIEc4KGUuaiwoa2woKSxFQWUpKTtkZWZhdWx0OnJldHVybiBDbigpLENuKCksX299fWZ1bmN0aW9uIFA4ZShlKXt3dygpO3ZhciB0O3N3aXRjaCh0PWUuUGMoKSx0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiB4MGU7Y2FzZSAxOnJldHVybiBuZXcgU2FlKFhyKHRbMF0pKTtkZWZhdWx0OnJldHVybiBuZXcgb29lKFU0bih0KSl9fWZ1bmN0aW9uIEQxdChlLHQpe2UuWGooKTt0cnl7ZS5kLmJkKGUuZSsrLHQpLGUuZj1lLmQuaixlLmc9LTF9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT91ZShuZXcgWGgpOnVlKG4pfX1mdW5jdGlvbiBXY2UoKXtXY2U9VSxpcGU9bmV3IE5TLE1QZT1uZXcgSDAsRFBlPW5ldyBBSSxJUGU9bmV3IExJLE9QZT1uZXcgZjgsTlBlPW5ldyB0cmUsUFBlPW5ldyBucmUsQlBlPW5ldyBycmUsRlBlPW5ldyBpcmV9ZnVuY3Rpb24gS1YoZSx0KXtpeWUoKTt2YXIgbixyO3JldHVybiBuPU1PKCh6eigpLHp6KCksTkwpKSxyPW51bGwsdD09biYmKHI9bCh4dShLU2UsZSksNjI0KSkscnx8KHI9bmV3IFhzdChlKSx0PT1uJiZyYyhLU2UsZSxyKSkscn1mdW5jdGlvbiBJMXQoZSl7QnkoKTt2YXIgdDtyZXR1cm4oZS5xP2UucTooQ24oKSxDbigpLG1nKSkuX2IoKE50KCksZzMpKT90PWwoUShlLGczKSwyMDMpOnQ9bChRKGVvKGUpLGVNKSwyMDMpLHR9ZnVuY3Rpb24gUHkoZSx0KXt2YXIgbixyO3JldHVybiByPW51bGwsbnMoZSwoTnQoKSxrVykpJiYobj1sKFEoZSxrVyksOTYpLG4ucGYodCkmJihyPW4ub2YodCkpKSxyPT1udWxsJiYocj1RKGVvKGUpLHQpKSxyfWZ1bmN0aW9uIE8xdChlLHQpe3ZhciBuLHIsYTtyZXR1cm4gRGUodCw0NCk/KG49bCh0LDQ0KSxyPW4ubGQoKSxhPU95KGUuUmMoKSxyKSx5ZChhLG4ubWQoKSkmJihhIT1udWxsfHxlLlJjKCkuX2IocikpKTohMX1mdW5jdGlvbiBuMShlLHQpe3ZhciBuLHIsYTtyZXR1cm4gZS5mPjAmJihlLl9qKCkscj10PT1udWxsPzA6ZXModCksYT0ociZJaSklZS5kLmxlbmd0aCxuPXk5ZShlLGEscix0KSxuKT9uLm1kKCk6bnVsbH1mdW5jdGlvbiBSdShlLHQsbil7dmFyIHIsYSxvO3JldHVybiBlLlBqKCk/KHI9ZS5pLG89ZS5RaigpLElOKGUscix0KSxhPWUuSWooMyxudWxsLHQscixvKSxuP24ubmooYSk6bj1hKTpJTihlLGUuaSx0KSxufWZ1bmN0aW9uIEE1bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1uZXcgWmcoZS5lLDQsMTAsKGE9dC5jLERlKGEsOTApP2woYSwyOSk6KFRuKCksS2YpKSxudWxsLGYyKGUsdCksITEpLG4/bi5uaihyKTpuPXIsbn1mdW5jdGlvbiBMNW4oZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9bmV3IFpnKGUuZSwzLDEwLG51bGwsKGE9dC5jLERlKGEsOTApP2woYSwyOSk6KFRuKCksS2YpKSxmMihlLHQpLCExKSxuP24ubmoocik6bj1yLG59ZnVuY3Rpb24gTjF0KGUpe3B5KCk7dmFyIHQ7cmV0dXJuIHQ9bmV3IEVvKGwoZS5lLm9mKChwaSgpLGk3KSksOCkpLGUuQi5IYygoWmwoKSxhQykpJiYodC5hPD0wJiYodC5hPTIwKSx0LmI8PTAmJih0LmI9MjApKSx0fWZ1bmN0aW9uIGtiKGUpe0NkKCk7dmFyIHQsbjtyZXR1cm4gbj1ZcihlKSx0PVlyKHViKGUsMzIpKSx0IT0wP25ldyBxb3Qobix0KTpuPjEwfHxuPDA/bmV3IFFnKDEsbik6eTZ0W25dfWZ1bmN0aW9uIFJOKGUsdCl7dmFyIG47cmV0dXJuIHdjKGUpJiZ3Yyh0KSYmKG49ZSV0LF9QPG4mJm48Wm0pP246bWIoKE5rZSh3YyhlKT9NZihlKTplLHdjKHQpP01mKHQpOnQsITApLE5iKSl9ZnVuY3Rpb24gTUEoZSx0KXt2YXIgbjtiRG4odCksbj1sKFEoZSwoTnQoKSxwVykpLDI4MyksbiYmcnQoZSxwVyxJN24obikpLFlwKGUuYyksWXAoZS5mKSxBNmUoZS5kKSxBNmUobChRKGUsd1cpLDIxNCkpfWZ1bmN0aW9uIE01bihlKXt2YXIgdCxuLHIsYTtmb3Iocj1ja24oZSksVnMocixqOHQpLGE9ZS5kLGEuYy5sZW5ndGg9MCxuPW5ldyBHKHIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSw0NjYpLHJhKGEsdC5iKX1mdW5jdGlvbiBZY2UoZSl7dmFyIHQ7ZS5jIT0wJiYodD1sKGp0KGUuYSxlLmIpLDI5NCksdC5iPT0xPygrK2UuYixlLmI8ZS5hLmMubGVuZ3RoJiZFcihsKGp0KGUuYSxlLmIpLDI5NCkpKTotLXQuYiwtLWUuYyl9ZnVuY3Rpb24gRDVuKGUpe3ZhciB0O3Q9ZS5hO2RvIHQ9bCh4cihuZXcgaHIoZHIocXModCkuYS5LYygpLG5ldyBqKSkpLDE4KS5kLmksdC5rPT0oWm4oKSxBYSkmJnZ0KGUuZSx0KTt3aGlsZSh0Lms9PShabigpLEFhKSl9ZnVuY3Rpb24gUDF0KGUpe3RoaXMuZT1XZShWcixkaSwyOCxlLmxlbmd0aCwxNSwxKSx0aGlzLmM9V2UoaWgscGcsMjgsZS5sZW5ndGgsMTYsMSksdGhpcy5iPVdlKGloLHBnLDI4LGUubGVuZ3RoLDE2LDEpLHRoaXMuZj0wfWZ1bmN0aW9uIEk1bihlKXt2YXIgdCxuO2ZvcihlLmo9V2UoTmEsWm8sMjgsZS5wLmMubGVuZ3RoLDE1LDEpLG49bmV3IEcoZS5wKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTApLGUualt0LnBdPXQuby5iL2UuaX1mdW5jdGlvbiBPNW4oZSx0KXt2YXIgbixyLGEsbztmb3Iobz10LmIuYixlLmE9bmV3IG9zLGUuYj1XZShWcixkaSwyOCxvLDE1LDEpLG49MCxhPVJyKHQuYiwwKTthLmIhPWEuZC5jOylyPWwoQnIoYSksNDApLHIuZz1uKyt9ZnVuY3Rpb24gQjF0KGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobz10LWUuZSxmPW4tZS5mLGE9bmV3IEcoZS5hKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTcyKSxxTihyLHIucytvLHIudCtmKTtlLmU9dCxlLmY9bn1mdW5jdGlvbiBqTihlLHQpe3ZhciBuLHI7Zm9yKHI9dC5sZW5ndGgsbj0wO248cjtuKz0yKUV1KGUsKFhuKG4sdC5sZW5ndGgpLHQuY2hhckNvZGVBdChuKSksKFhuKG4rMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG4rMSkpKX1mdW5jdGlvbiBONW4oZSx0KXt0LlVnKCJNaW4gU2l6ZSBQb3N0cHJvY2Vzc2luZyIsMSksSGkoZSwodWcoKSxUNCksYi5NYXRoLm1heCh6ZShHZShhdChlLFQ0KSkpLHplKEdlKGF0KGUsbU0pKSkpKSx0LlZnKCl9ZnVuY3Rpb24gQjhlKCl7QjhlPVUsWk5lPW5ldyBsdygxNSksYV90PW5ldyBIYSgocGkoKSxfMiksWk5lKSxjX3Q9bmV3IEhhKEV2LDE1KSxvX3Q9bmV3IEhhKHpnZSxwdCgwKSksc190PW5ldyBIYShaNixsVCl9ZnVuY3Rpb24gbWgoKXttaD1VLGlGPW5ldyBFcSgiUE9SVFMiLDApLEN2PW5ldyBFcSgiUE9SVF9MQUJFTFMiLDEpLHJGPW5ldyBFcSgiTk9ERV9MQUJFTFMiLDIpLEE0PW5ldyBFcSgiTUlOSU1VTV9TSVpFIiwzKX1mdW5jdGlvbiBXVigpe1dWPVUsUkI9bmV3IEJzZSgiUDFfV0lEVEhfQVBQUk9YSU1BVElPTiIsMCksVlc9bmV3IEJzZSgiUDJfUEFDS0lORyIsMSkscmdlPW5ldyBCc2UoIlAzX1dISVRFU1BBQ0VfRUxJTUlOQVRJT04iLDIpfWZ1bmN0aW9uIEYxdChlKXtpZihlLmI9PW51bGwpe2Zvcig7ZS5hLk9iKCk7KWlmKGUuYj1lLmEuUGIoKSwhbChlLmIsNTQpLkpoKCkpcmV0dXJuITA7cmV0dXJuIGUuYj1udWxsLCExfWVsc2UgcmV0dXJuITB9ZnVuY3Rpb24gT0UoZSx0LG4pe3ZhciByLGEsbztmb3IoYT1udWxsLG89ZS5iO287KXtpZihyPWUuYS5OZSh0LG8uZCksbiYmcj09MClyZXR1cm4gbztyPj0wP289by5hWzFdOihhPW8sbz1vLmFbMF0pfXJldHVybiBhfWZ1bmN0aW9uICROKGUsdCxuKXt2YXIgcixhLG87Zm9yKGE9bnVsbCxvPWUuYjtvOyl7aWYocj1lLmEuTmUodCxvLmQpLG4mJnI9PTApcmV0dXJuIG87cjw9MD9vPW8uYVswXTooYT1vLG89by5hWzFdKX1yZXR1cm4gYX1mdW5jdGlvbiBQNW4oZSx0LG4scil7dmFyIGEsbyxmO3JldHVybiBhPSExLFJNbihlLmYsbixyKSYmKHI2bihlLmYsZS5hW3RdW25dLGUuYVt0XVtyXSksbz1lLmFbdF0sZj1vW3JdLG9bcl09b1tuXSxvW25dPWYsYT0hMCksYX1mdW5jdGlvbiBSMXQoZSx0LG4pe3ZhciByLGEsbyxmO2ZvcihhPWwoY3IoZS5iLG4pLDE4Mykscj0wLGY9bmV3IEcodC5qKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTEzKSxhW28uZC5wXSYmKytyO3JldHVybiByfWZ1bmN0aW9uIEY4ZShlLHQsbil7dmFyIHIsYTtyPWwoeHUodUMsdCksMTIyKSxhPWwoeHUoS00sdCksMTIyKSxuPyhyYyh1QyxlLHIpLHJjKEtNLGUsYSkpOihyYyhLTSxlLHIpLHJjKHVDLGUsYSkpfWZ1bmN0aW9uIGoxdChlLHQpe3ZhciBuLHIsYSxvO3JldHVybiBuPXQ+PjUsdCY9MzEsYT1lLmQrbisodD09MD8wOjEpLHI9V2UoVnIsZGksMjgsYSwxNSwxKSxPeG4ocixlLmEsbix0KSxvPW5ldyBJbShlLmUsYSxyKSxpQShvKSxvfWZ1bmN0aW9uIEI1bihlLHQpe3ZhciBuLHIsYTtmb3Iocj1uZXcgaHIoZHIocXMoZSkuYS5LYygpLG5ldyBqKSk7anIocik7KWlmKG49bCh4cihyKSwxOCksYT1uLmQuaSxhLmM9PXQpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUjhlKGUsdCxuKXt2YXIgcixhLG8sZixnO3JldHVybiBmPWUuayxnPXQuayxyPW5bZi5nXVtnLmddLGE9R2UoUHkoZSxyKSksbz1HZShQeSh0LHIpKSxiLk1hdGgubWF4KChucihhKSxhKSwobnIobyksbykpfWZ1bmN0aW9uIEY1bigpe3JldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ+MD8oYi5FcnJvci5zdGFja1RyYWNlTGltaXQ9RXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTY0LCEwKToic3RhY2siaW4gbmV3IEVycm9yfWZ1bmN0aW9uIFI1bihlLHQpe3JldHVybiBBMSgpLEExKCksZjAoQWIpLChiLk1hdGguYWJzKGUtdCk8PUFifHxlPT10fHxpc05hTihlKSYmaXNOYU4odCk/MDplPHQ/LTE6ZT50PzE6dXcoaXNOYU4oZSksaXNOYU4odCkpKT4wfWZ1bmN0aW9uIGo4ZShlLHQpe3JldHVybiBBMSgpLEExKCksZjAoQWIpLChiLk1hdGguYWJzKGUtdCk8PUFifHxlPT10fHxpc05hTihlKSYmaXNOYU4odCk/MDplPHQ/LTE6ZT50PzE6dXcoaXNOYU4oZSksaXNOYU4odCkpKTwwfWZ1bmN0aW9uICQxdChlLHQpe3JldHVybiBBMSgpLEExKCksZjAoQWIpLChiLk1hdGguYWJzKGUtdCk8PUFifHxlPT10fHxpc05hTihlKSYmaXNOYU4odCk/MDplPHQ/LTE6ZT50PzE6dXcoaXNOYU4oZSksaXNOYU4odCkpKTw9MH1mdW5jdGlvbiBYY2UoZSx0KXtmb3IodmFyIG49MDshdFtuXXx8dFtuXT09IiI7KW4rKztmb3IodmFyIHI9dFtuKytdO248dC5sZW5ndGg7bisrKSF0W25dfHx0W25dPT0iInx8KHIrPWUrdFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gejF0KGUpe3ZhciB0LG47cmV0dXJuIHQ9bChLbihlLmEsNCksMTI5KSx0IT1udWxsPyhuPVdlKGVwZSxyMGUsNDI0LHQubGVuZ3RoLDAsMSkscHUodCwwLG4sMCx0Lmxlbmd0aCksbik6TV90fWZ1bmN0aW9uIHExdChlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKG89bmV3IGJ0LG49VGNlKGUpLHI9MCxhPW4ubGVuZ3RoO3I8YTsrK3IpdD1uW3JdLHZ0KG8sVHUodCwhMCkpO3JldHVybiBvfWZ1bmN0aW9uIEgxdChlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKG89bmV3IGJ0LG49VGNlKGUpLHI9MCxhPW4ubGVuZ3RoO3I8YTsrK3IpdD1uW3JdLHZ0KG8sVHUodCwhMCkpO3JldHVybiBvfWZ1bmN0aW9uIFYxdChlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKG89bmV3IGJ0LG49VGNlKGUpLHI9MCxhPW4ubGVuZ3RoO3I8YTsrK3IpdD1uW3JdLHZ0KG8sVHUodCwhMCkpO3JldHVybiBvfWZ1bmN0aW9uIFUxdChlLHQpe3ZhciBuLHIsYTtpZihlLmMpTXcoZS5jLHQpO2Vsc2UgZm9yKG49dC1naChlKSxhPW5ldyBHKGUuYSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE2MyksVTF0KHIsZ2gocikrbil9ZnVuY3Rpb24gRzF0KGUsdCl7dmFyIG4scixhO2lmKGUuYylEdyhlLmMsdCk7ZWxzZSBmb3Iobj10LXdsKGUpLGE9bmV3IEcoZS5kKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTYzKSxHMXQocix3bChyKStuKX1mdW5jdGlvbiBJZihlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKG89dCtuLEdhKHQsbyxlLmxlbmd0aCksZj0iIixhPXQ7YTxvOylyPWIuTWF0aC5taW4oYSsxZTQsbyksZis9ZXBuKGUuc2xpY2UoYSxyKSksYT1yO3JldHVybiBmfWZ1bmN0aW9uICQ4ZShlKXtzd2l0Y2goZS5nKXtjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgMTk6Y2FzZSAyMDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBsMigpe2wyPVUsQTFlPW5ldyB1TyhIRWUsMCksYkxlPW5ldyB1TyhXM3QsMSksTDFlPW5ldyB1TygkaGUsMiksQlQ9bmV3IHVPKCRFZSwzKSxQVD1uZXcgdU8oIkdSRUVEWV9NT0RFTF9PUkRFUiIsNCl9ZnVuY3Rpb24gRWQoKXtFZD1VLEUyPW5ldyBtcShJZCwwKSxDRGU9bmV3IG1xKCJOT0RFU19BTkRfRURHRVMiLDEpLHlkZT1uZXcgbXEoIlBSRUZFUl9FREdFUyIsMikseGRlPW5ldyBtcSgiUFJFRkVSX05PREVTIiwzKX1mdW5jdGlvbiB6OGUoZSx0LG4scixhLG8pe3RoaXMuYT1lLHRoaXMuYz10LHRoaXMuYj1uLHRoaXMuZj1yLHRoaXMuZD1hLHRoaXMuZT1vLHRoaXMuYz4wJiZ0aGlzLmI+MCYmKHRoaXMuZz1hSCh0aGlzLmMsdGhpcy5iLHRoaXMuYSkpfWZ1bmN0aW9uIGo1bihlLHQpe3ZhciBuPWUuYSxyO3Q9U3RyaW5nKHQpLG4uaGFzT3duUHJvcGVydHkodCkmJihyPW5bdF0pO3ZhciBhPSh2Y2UoKSxfMGUpW3R5cGVvZiByXSxvPWE/YShyKTpaN2UodHlwZW9mIHIpO3JldHVybiBvfWZ1bmN0aW9uIE5FKGUpe3ZhciB0LG4scjtpZihyPW51bGwsdD1QZCBpbiBlLmEsbj0hdCxuKXRocm93IHVlKG5ldyBkZCgiRXZlcnkgZWxlbWVudCBtdXN0IGhhdmUgYW4gaWQuIikpO3JldHVybiByPXh4KFdnKGUsUGQpKSxyfWZ1bmN0aW9uIGp3KGUpe3ZhciB0LG47Zm9yKG49ZnB0KGUpLHQ9bnVsbDtlLmM9PTI7KUxpKGUpLHR8fCh0PShEaSgpLERpKCksbmV3IEJfKDIpKSxRbSh0LG4pLG49dCksbi5KbShmcHQoZSkpO3JldHVybiBufWZ1bmN0aW9uIFlWKGUsdCl7dmFyIG4scixhO3JldHVybiBlLl9qKCkscj10PT1udWxsPzA6ZXModCksYT0ociZJaSklZS5kLmxlbmd0aCxuPXk5ZShlLGEscix0KSxuPyhXaHQoZSxuKSxuLm1kKCkpOm51bGx9ZnVuY3Rpb24gSzF0KGUsdCl7cmV0dXJuIGUuZT50LmU/MTplLmU8dC5lPy0xOmUuZD50LmQ/ZS5lOmUuZDx0LmQ/LXQuZTplLmUqVzdlKGUuYSx0LmEsZS5kKX1mdW5jdGlvbiBXMXQoZSl7cmV0dXJuIGU+PTQ4JiZlPDQ4K2IuTWF0aC5taW4oMTAsMTApP2UtNDg6ZT49OTcmJmU8OTc/ZS05NysxMDplPj02NSYmZTw2NT9lLTY1KzEwOi0xfWZ1bmN0aW9uICQ1bihlLHQpe2lmKHQuYz09ZSlyZXR1cm4gdC5kO2lmKHQuZD09ZSlyZXR1cm4gdC5jO3Rocm93IHVlKG5ldyBZbigiSW5wdXQgZWRnZSBpcyBub3QgY29ubmVjdGVkIHRvIHRoZSBpbnB1dCBwb3J0LiIpKX1mdW5jdGlvbiB6NW4oZSl7aWYoUVYod1QsZSkpcmV0dXJuIEhuKCksU1Q7aWYoUVYoRmZlLGUpKXJldHVybiBIbigpLFBiO3Rocm93IHVlKG5ldyBZbigiRXhwZWN0aW5nIHRydWUgb3IgZmFsc2UiKSl9ZnVuY3Rpb24gcThlKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSBJbGU6cmV0dXJuIHMyKGUpO2Nhc2UgUWtlOnJldHVybiBqOChlKTtjYXNlIEN4OnJldHVybiBBcnQoZSk7ZGVmYXVsdDpyZXR1cm4gZT09bnVsbD8wOmZ3KGUpfX1mdW5jdGlvbiBUZChlLHQpe2lmKGUuYTwwKXRocm93IHVlKG5ldyBuYygiRGlkIG5vdCBjYWxsIGJlZm9yZSguLi4pIG9yIGFmdGVyKC4uLikgYmVmb3JlIGNhbGxpbmcgYWRkKC4uLikuIikpO3JldHVybiBCeWUoZSxlLmEsdCksZX1mdW5jdGlvbiBIOGUoZSl7cmV0dXJuIEJIKCksRGUoZSwxNjIpP2woY3IobEYsQzZ0KSwyOTUpLlJnKGUpOkh1KGxGLGJoKGUpKT9sKGNyKGxGLGJoKGUpKSwyOTUpLlJnKGUpOm51bGx9ZnVuY3Rpb24gS3UoZSl7dmFyIHQsbjtyZXR1cm4gZS5EYiYzMnx8KG49KHQ9bChLbihlLDE2KSwyOSkseXIodHx8ZS5paSgpKS15cihlLmlpKCkpKSxuIT0wJiZweChlLDMyLFdlKHdhLFJuLDEsbiw1LDEpKSksZX1mdW5jdGlvbiBweChlLHQsbil7dmFyIHI7ZS5EYiZ0P249PW51bGw/VEVuKGUsdCk6KHI9bXVlKGUsdCkscj09LTE/ZS5FYj1uOlRzKGptKGUuRWIpLHIsbikpOm4hPW51bGwmJktDbihlLHQsbil9ZnVuY3Rpb24gcTVuKGUsdCxuLHIpe3ZhciBhLG87dC5jLmxlbmd0aCE9MCYmKGE9RlRuKG4sciksbz1Sa24odCksSXMobFYobmV3IGJuKG51bGwsbmV3IGtuKG8sMSkpLG5ldyBhOCksbmV3IENhdChlLG4sYSxyKSkpfWZ1bmN0aW9uIEg1bihlLHQpe3ZhciBuLHIsYSxvO3JldHVybiByPWUuYS5sZW5ndGgtMSxuPXQtZS5iJnIsbz1lLmMtdCZyLGE9ZS5jLWUuYiZyLEVydChuPGEpLG4+PW8/KHp5bihlLHQpLC0xKTooJHluKGUsdCksMSl9ZnVuY3Rpb24gWFYoZSl7dmFyIHQsbixyO2lmKHI9ZS5KaCgpLCFyKWZvcih0PTAsbj1lLlBoKCk7bjtuPW4uUGgoKSl7aWYoKyt0Pm9oZSlyZXR1cm4gbi5RaCgpO2lmKHI9bi5KaCgpLHJ8fG49PWUpYnJlYWt9cmV0dXJuIHJ9ZnVuY3Rpb24gWTF0KGUsdCl7dmFyIG47cmV0dXJuIHFlKHQpPT09cWUoZSk/ITA6IURlKHQsMjEpfHwobj1sKHQsMjEpLG4uZ2MoKSE9ZS5nYygpKT8hMTplLkljKG4pfWZ1bmN0aW9uIFY1bihlLHQpe3JldHVybiBlLmU8dC5lPy0xOmUuZT50LmU/MTplLmY8dC5mPy0xOmUuZj50LmY/MTplcyhlKS1lcyh0KX1mdW5jdGlvbiBRVihlLHQpe3JldHVybiBucihlKSx0PT1udWxsPyExOnZuKGUsdCk/ITA6ZS5sZW5ndGg9PXQubGVuZ3RoJiZ2bihlLnRvTG93ZXJDYXNlKCksdC50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBhcChlKXt2YXIgdCxuO3JldHVybiBpdShlLC0xMjkpPjAmJml1KGUsMTI4KTwwPyhaaXQoKSx0PVlyKGUpKzEyOCxuPW5fZVt0XSwhbiYmKG49bl9lW3RdPW5ldyBPcihlKSksbik6bmV3IE9yKGUpfWZ1bmN0aW9uIEttKCl7S209VSxjND1uZXcgZHEoSWQsMCksYkFlPW5ldyBkcSgiSU5TSURFX1BPUlRfU0lERV9HUk9VUFMiLDEpLG8xZT1uZXcgZHEoIkdST1VQX01PREVMX09SREVSIiwyKSxjMWU9bmV3IGRxKCRFZSwzKX1mdW5jdGlvbiBVNW4oZSl7dmFyIHQ7cmV0dXJuIGUuYnx8UnVuKGUsKHQ9RmZuKGUuZSxlLmEpLCF0fHwhdm4oRmZlLG4xKCghdC5iJiYodC5iPW5ldyBkaCgoVG4oKSxObyksWWMsdCkpLHQuYiksInF1YWxpZmllZCIpKSkpLGUuY31mdW5jdGlvbiBHNW4oZSx0KXt2YXIgbixyO2ZvcihuPShYbih0LGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodCkpLHI9dCsxO3I8ZS5sZW5ndGgmJihYbihyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocik9PW4pOykrK3I7cmV0dXJuIHItdH1mdW5jdGlvbiBLNW4oZSx0KXsoIXQmJmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQhPW51bGw/Y29uc29sZS5ncm91cENvbGxhcHNlZDpjb25zb2xlLmdyb3VwPz9jb25zb2xlLmxvZykuY2FsbChjb25zb2xlLGUpfWZ1bmN0aW9uIFc1bihlLHQsbixyKXtyPT1lLGwobi5iLDY4KSxsKG4uYiw2OCksbChyLmIsNjgpLGwoci5iLDY4KS5jLmIsRDZlKHIsdCxlKX1mdW5jdGlvbiBZNW4oZSl7dmFyIHQsbjtmb3IodD1uZXcgRyhlLmcpO3QuYTx0LmMuYy5sZW5ndGg7KWwocmUodCksNTY4KTtuPW5ldyBsYnQoZS5nLHplKGUuYSksZS5jKSxFRG4obiksZS5nPW4uYixlLmQ9bi5hfWZ1bmN0aW9uIFgxdChlLHQsbil7dmFyIHIsYSxvO2ZvcihvPW5ldyBHKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDIyNSkscj1uZXcgTnEobChjcihlLmEsYS5iKSw2OCkpLHZ0KHQuYSxyKSxYMXQoZSxyLGEpfWZ1bmN0aW9uIFg1bihlLHQsbil7dmFyIHIsYSxvO3JldHVybiByPWwoT2UoWGwoZS5hKSx0KSw4OSksbz0oYT1yLmMsYXx8KFRuKCksdGQpKSwoby5WaCgpP3liKGUuYixsKG8sNTQpKTpvKT09bj9qVShyKTpzRShyLG4pLG99ZnVuY3Rpb24gVjhlKGUsdCxuKXt0LmI9Yi5NYXRoLm1heCh0LmIsLW4uYSksdC5jPWIuTWF0aC5tYXgodC5jLG4uYS1lLmEpLHQuZD1iLk1hdGgubWF4KHQuZCwtbi5iKSx0LmE9Yi5NYXRoLm1heCh0LmEsbi5iLWUuYil9ZnVuY3Rpb24gVThlKGUsdCxuKXt0aGlzLmM9ZSx0aGlzLmY9bmV3IGJ0LHRoaXMuZT1uZXcgcWEsdGhpcy5qPW5ldyBHNGUsdGhpcy5uPW5ldyBHNGUsdGhpcy5iPXQsdGhpcy5nPW5ldyBlZih0LmMsdC5kLHQuYix0LmEpLHRoaXMuYT1ufWZ1bmN0aW9uIFFjZShlKXt2YXIgdCxuLHIsYTtmb3IodGhpcy5hPW5ldyBiZCx0aGlzLmQ9bmV3IEtzLHRoaXMuZT0wLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSwhdGhpcy5mJiYodGhpcy5mPXQpLHdvZSh0aGlzLHQpfWZ1bmN0aW9uIFExdChlKXtDZCgpLGUubGVuZ3RoPT0wPyh0aGlzLmU9MCx0aGlzLmQ9MSx0aGlzLmE9aGUobGUoVnIsMSksZGksMjgsMTUsWzBdKSk6KHRoaXMuZT0xLHRoaXMuZD1lLmxlbmd0aCx0aGlzLmE9ZSxpQSh0aGlzKSl9ZnVuY3Rpb24gREEoZSx0LG4pe0pRZS5jYWxsKHRoaXMpLHRoaXMuYT1XZShHNnQsd0VlLDIxNywodDEoKSxoZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKSkubGVuZ3RoLDAsMSksdGhpcy5iPWUsdGhpcy5kPXQsdGhpcy5jPW59ZnVuY3Rpb24gUTVuKGUpe3ZhciB0LG4scixhLG8sZjtmb3IoZj1sKFEoZSwoZnQoKSx6aSkpLDEyKSxydChmLHpULGUuaS5uLmIpLHQ9a2QoZS5lKSxyPXQsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sRmEobixmKX1mdW5jdGlvbiBKNW4oZSl7dmFyIHQsbixyLGEsbyxmO2ZvcihuPWwoUShlLChmdCgpLHppKSksMTIpLHJ0KG4selQsZS5pLm4uYiksdD1rZChlLmcpLGE9dCxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSxwbyhyLG4pfWZ1bmN0aW9uIFo1bihlLHQpe2ZvZSgpO3ZhciBuLHI7Zm9yKHI9bmV3IGhyKGRyKHNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKHIpOylpZihuPWwoeHIociksMTgpLG4uZC5pPT10fHxuLmMuaT09dClyZXR1cm4gbjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBKMXQoZSx0KXt2YXIgbixyO3JldHVybiBuPXQucWkoZS5hKSxuJiYocj1laShuMSgoIW4uYiYmKG4uYj1uZXcgZGgoKFRuKCksTm8pLFljLG4pKSxuLmIpLF9pKSksciE9bnVsbCk/cjp0LnhlKCl9ZnVuY3Rpb24gZTZuKGUsdCl7dmFyIG4scjtyZXR1cm4gbj10LnFpKGUuYSksbiYmKHI9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSxfaSkpLHIhPW51bGwpP3I6dC54ZSgpfWZ1bmN0aW9uIHQ2bihlLHQpe3ZhciBuLHI7cmV0dXJuIG49cnUoZS5hLmMucCx0LmEuYy5wKSxuIT0wP246KHI9cnUoZS5hLmQuaS5wLHQuYS5kLmkucCksciE9MD9yOnJ1KHQuYS5kLnAsZS5hLmQucCkpfWZ1bmN0aW9uIG42bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihyPTAsYT10LmdjKCk7cjxhOysrciluPXQuVGwociksRGUobiwxMDIpJiZsKG4sMTkpLkJiJmV1JiYobz10LlVsKHIpLG8hPW51bGwmJmNsZShlLGwobyw1OCkpKX1mdW5jdGlvbiBaMXQoZSx0KXt2YXIgbixyLGE7aWYodnQod0ssZSksdC5GYyhlKSxuPWwoY3IoWDBlLGUpLDIxKSxuKWZvcihhPW4uS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMjcpLGdjKHdLLHIsMCkhPS0xfHxaMXQocix0KX1mdW5jdGlvbiByNm4oZSx0LG4pe3ZhciByLGE7T3VlKGUuZSx0LG4sKEN0KCksZXIpKSxPdWUoZS5pLHQsbixhciksZS5hJiYoYT1sKFEodCwoZnQoKSx6aSkpLDEyKSxyPWwoUShuLHppKSwxMiksdm9lKGUuZyxhLHIpKX1mdW5jdGlvbiBlZHQoZSx0LG4pe3ZhciByLGEsbztyPXQuYy5wLG89dC5wLGUuYltyXVtvXT1uZXcgS2F0KGUsdCksbiYmKGUuYVtyXVtvXT1uZXcgUFllKHQpLGE9bChRKHQsKGZ0KCksdTMpKSwxMCksYSYmeG4oZS5kLGEsdCkpfWZ1bmN0aW9uIGk2bihlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIG89dC5qLGY9bi5qLG8hPWY/by5nLWYuZzoocj1lLmZbdC5wXSxhPWUuZltuLnBdLHI9PTAmJmE9PTA/MDpyPT0wPy0xOmE9PTA/MTpZaShyLGEpKX1mdW5jdGlvbiBzNm4oKXt2YXIgZTtyZXR1cm4gYUshPTAmJihlPURhdGUubm93KCksZS1sNnQ+MmUzJiYobDZ0PWUsb0s9Yi5zZXRUaW1lb3V0KEh1biwxMCkpKSxhSysrPT0wPyhzd24oKFh3ZSgpLEdTZSkpLCEwKTohMX1mdW5jdGlvbiBhNm4oZSx0LG4pe3ZhciByOyhJNnQ/KHU1bihlKSwhMCk6TzZ0fHxQNnQ/KERrKCksITApOk42dCYmKERrKCksITEpKSYmKHI9bmV3IGZpdCh0KSxyLmI9bixnOW4oZSxyKSl9ZnVuY3Rpb24gSmNlKGUsdCl7dmFyIG47bj0hZS5BLkhjKChtaCgpLEN2KSl8fGUucT09KFJhKCksTXUpLGUudS5IYygoUmwoKSx2cCkpP24/WURuKGUsdCk6VnZ0KGUsdCk6ZS51LkhjKFliKSYmKG4/cERuKGUsdCk6c3d0KGUsdCkpfWZ1bmN0aW9uIHRkdChlKXt2YXIgdDtxZShhdChlLChwaSgpLG43KSkpPT09cWUoKHJwKCksb1kpKSYmKGRzKGUpPyh0PWwoYXQoZHMoZSksbjcpLDM0NiksSGkoZSxuNyx0KSk6SGkoZSxuNyxETSkpfWZ1bmN0aW9uIG82bihlKXt2YXIgdCxuO3JldHVybiBucyhlLmQuaSwoTnQoKSxIVCkpPyh0PWwoUShlLmMuaSxIVCksMTcpLG49bChRKGUuZC5pLEhUKSwxNykscnUodC5hLG4uYSk+MCk6ITF9ZnVuY3Rpb24gbmR0KGUsdCxuKXtyZXR1cm4gbmV3IGVmKGIuTWF0aC5taW4oZS5hLHQuYSktbi8yLGIuTWF0aC5taW4oZS5iLHQuYiktbi8yLGIuTWF0aC5hYnMoZS5hLXQuYSkrbixiLk1hdGguYWJzKGUuYi10LmIpK24pfWZ1bmN0aW9uIHJkdChlKXt2YXIgdDt0aGlzLmQ9bmV3IGJ0LHRoaXMuaj1uZXcgcWEsdGhpcy5nPW5ldyBxYSx0PWUuZy5iLHRoaXMuZj1sKFEoZW8odCksKE50KCksUmgpKSw4OCksdGhpcy5lPXplKEdlKHRVKHQseTQpKSl9ZnVuY3Rpb24gaWR0KGUpe3RoaXMuZD1uZXcgYnQsdGhpcy5lPW5ldyBlMix0aGlzLmM9V2UoVnIsZGksMjgsKEN0KCksaGUobGUoT28sMSksYXUsNjQsMCxbUGMsUW4sYXIsRHIsZXJdKSkubGVuZ3RoLDE1LDEpLHRoaXMuYj1lfWZ1bmN0aW9uIEc4ZShlLHQsbil7dmFyIHI7c3dpdGNoKHI9bltlLmddW3RdLGUuZyl7Y2FzZSAxOmNhc2UgMzpyZXR1cm4gbmV3IGx0KDAscik7Y2FzZSAyOmNhc2UgNDpyZXR1cm4gbmV3IGx0KHIsMCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gc2R0KGUsdCxuKXt2YXIgcixhO2E9bChHTyh0LmYpLDIwNSk7dHJ5e2EucmYoZSxuKSxsYXQodC5mLGEpfWNhdGNoKG8pe3Rocm93IG89YnMobyksRGUobywxMDMpPyhyPW8sdWUocikpOnVlKG8pfX1mdW5jdGlvbiBhZHQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdztyZXR1cm4gcj1udWxsLGc9RmtlKGhFKCksdCksbz1udWxsLGcmJihhPW51bGwsdz1Qa2UoZyxuKSxmPW51bGwsdyE9bnVsbCYmKGY9ZS5xZihnLHcpKSxhPWYsbz1hKSxyPW8scn1mdW5jdGlvbiBaY2UoZSx0LG4scil7dmFyIGE7aWYoYT1lLmxlbmd0aCx0Pj1hKXJldHVybiBhO2Zvcih0PXQ+MD90OjA7dDxhJiYhbWNlKChYbih0LGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodCkpLG4scik7dCsrKTtyZXR1cm4gdH1mdW5jdGlvbiBqMShlLHQpe3ZhciBuLHI7Zm9yKHI9ZS5jLmxlbmd0aCx0Lmxlbmd0aDxyJiYodD1WeihuZXcgQXJyYXkociksdCkpLG49MDtuPHI7KytuKVRzKHQsbixlLmNbbl0pO3JldHVybiB0Lmxlbmd0aD5yJiZUcyh0LHIsbnVsbCksdH1mdW5jdGlvbiBvZHQoZSx0KXt2YXIgbixyO2ZvcihyPWUuYS5sZW5ndGgsdC5sZW5ndGg8ciYmKHQ9VnoobmV3IEFycmF5KHIpLHQpKSxuPTA7bjxyOysrbilUcyh0LG4sZS5hW25dKTtyZXR1cm4gdC5sZW5ndGg+ciYmVHModCxyLG51bGwpLHR9ZnVuY3Rpb24gUEUoZSx0KXt2YXIgbixyO2lmKCsrZS5qLHQhPW51bGwmJihuPShyPWUuYS5DYixEZShyLDk5KT9sKHIsOTkpLnRoKCk6bnVsbCksZkVuKHQsbikpKXtweChlLmEsNCxuKTtyZXR1cm59cHgoZS5hLDQsbCh0LDEyOSkpfWZ1bmN0aW9uIGM2bihlKXt2YXIgdDtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHQ9ZFRuKFR1KGUsITApKSx0PT1udWxsKXRocm93IHVlKG5ldyBKaWUoIkludmFsaWQgaGV4QmluYXJ5IHZhbHVlOiAnIitlKyInIikpO3JldHVybiB0fWZ1bmN0aW9uIEpWKGUsdCxuKXt2YXIgcjt0LmEubGVuZ3RoPjAmJih2dChlLmIsbmV3IEFpdCh0LmEsbikpLHI9dC5hLmxlbmd0aCwwPHI/dC5hPXRmKHQuYSwwLDApOjA+ciYmKHQuYSs9TW50KFdlKGtmLEFkLDI4LC1yLDE1LDEpKSkpfWZ1bmN0aW9uIGNkdChlLHQsbil7dmFyIHIsYSxvO2lmKCFuW3QuZF0pZm9yKG5bdC5kXT0hMCxhPW5ldyBHKFo1KHQpKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMjE4KSxvPUhWKHIsdCksY2R0KGUsbyxuKX1mdW5jdGlvbiBoMihlLHQsbil7dmFyIHIsYSxvO3JldHVybiBhPWwoY3IoZS5lLHQpLDQwMCksYT8obz1aeWUoYSxuKSxJbnQoZSxhKSxvKToocj1uZXcgQTRlKGUsdCxuKSxraShlLmUsdCxyKSxpb3QociksbnVsbCl9ZnVuY3Rpb24gdTZuKGUsdCxuLHIpe3ZhciBhLG8sZjtyZXR1cm4gYT1uZXcgWmcoZS5lLDEsMTMsKGY9dC5jLGZ8fChUbigpLHRkKSksKG89bi5jLG98fChUbigpLHRkKSksZjIoZSx0KSwhMSkscj9yLm5qKGEpOnI9YSxyfWZ1bmN0aW9uIGV1ZSgpe3JldHVybiBZVSgpLGhlKGxlKHc3dCwxKSxpdCwxNjQsMCxbbTd0LGI3dCx2N3QsYzd0LG83dCx1N3QsZjd0LGg3dCxsN3QscDd0LGc3dCxkN3Qsczd0LGk3dCxhN3Qsbjd0LHQ3dCxyN3QsWjZ0LEo2dCxlN3QsSDBlXSl9ZnVuY3Rpb24gQkUoZSl7c3dpdGNoKGUuZyl7Y2FzZSA0OnJldHVybiBuZXcgbHQoMCwtMSk7Y2FzZSAxOnJldHVybiBuZXcgbHQoMSwwKTtjYXNlIDI6cmV0dXJuIG5ldyBsdCgtMSwwKTtkZWZhdWx0OnJldHVybiBuZXcgbHQoMCwxKX19ZnVuY3Rpb24gdHVlKGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gSnMoKSx3ZjtjYXNlIDQ6cmV0dXJuIEpzKCksdWM7Y2FzZSAyOnJldHVybiBKcygpLHZjO2Nhc2UgMzpyZXR1cm4gSnMoKSxRMX1yZXR1cm4gSnMoKSxKMX1mdW5jdGlvbiBsNm4oZSl7dmFyIHQ7c3dpdGNoKHQ9ZS5oaihudWxsKSx0KXtjYXNlIDEwOnJldHVybiAwO2Nhc2UgMTU6cmV0dXJuIDE7Y2FzZSAxNDpyZXR1cm4gMjtjYXNlIDExOnJldHVybiAzO2Nhc2UgMjE6cmV0dXJuIDR9cmV0dXJuLTF9ZnVuY3Rpb24gcjEoKXtyMT1VLFBuPW5ldyBiTygiUEFSRU5UUyIsMCksaGE9bmV3IGJPKCJOT0RFUyIsMSksemQ9bmV3IGJPKCJFREdFUyIsMikseXY9bmV3IGJPKCJQT1JUUyIsMyksUzI9bmV3IGJPKCJMQUJFTFMiLDQpfWZ1bmN0aW9uIGg2bihlLHQsbil7dmFyIHI7c3dpdGNoKHI9bi5xLmdldEZ1bGxZZWFyKCktTGIrTGIscjwwJiYocj0tciksdCl7Y2FzZSAxOmUuYSs9cjticmVhaztjYXNlIDI6YWcoZSxyJTEwMCwyKTticmVhaztkZWZhdWx0OmFnKGUscix0KX19ZnVuY3Rpb24gUnIoZSx0KXt2YXIgbixyO2lmKEV5KHQsZS5iKSx0Pj1lLmI+PjEpZm9yKHI9ZS5jLG49ZS5iO24+dDstLW4pcj1yLmI7ZWxzZSBmb3Iocj1lLmEuYSxuPTA7bjx0OysrbilyPXIuYTtyZXR1cm4gbmV3IGhpdChlLHQscil9ZnVuY3Rpb24gWlYoKXtaVj1VLGowZT1uZXcgXzNlKCJOVU1fT0ZfRVhURVJOQUxfU0lERVNfVEhBTl9OVU1fT0ZfRVhURU5TSU9OU19MQVNUIiwwKSx4X2U9bmV3IF8zZSgiQ09STkVSX0NBU0VTX1RIQU5fU0lOR0xFX1NJREVfTEFTVCIsMSl9ZnVuY3Rpb24gdWR0KGUpe3RoaXMuYj1uZXcgYnQsdGhpcy5lPW5ldyBidCx0aGlzLmQ9ZSx0aGlzLmE9IV9rKEZpKG5ldyBibihudWxsLG5ldyB2dyhuZXcgTjEoZS5iKSkpLG5ldyBXbChuZXcgdmVlKSkpLkJkKChBbSgpLHp4KSl9ZnVuY3Rpb24gbGR0KGUsdCl7dmFyIG4scixhLG87Zm9yKG49MCxhPW5ldyBHKHQuYSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDEwKSxvPXIuby5hK3IuZC5jK3IuZC5iK2UuaixuPWIuTWF0aC5tYXgobixvKTtyZXR1cm4gbn1mdW5jdGlvbiBoZHQoZSx0KXt2YXIgbixyLGE7YT10LmQuaSxyPWEuaywhKHI9PShabigpLFBzKXx8cj09SzEpJiYobj1uZXcgaHIoZHIocXMoYSkuYS5LYygpLG5ldyBqKSksanIobikmJmtpKGUuayx0LGwoeHIobiksMTgpKSl9ZnVuY3Rpb24gZjZuKGUsdCl7cmV0dXJuIHRwKCksWWkoKGUuYS5iPT0wP25ldyBsdChlLmMuZS5hLGUuYy5lLmIpOmwoQmsoZS5hKSw4KSkuYiwodC5hLmI9PTA/bmV3IGx0KHQuYy5lLmEsdC5jLmUuYik6bChCayh0LmEpLDgpKS5iKX1mdW5jdGlvbiBkNm4oZSx0KXtyZXR1cm4gdHAoKSxZaSgoZS5hLmI9PTA/bmV3IGx0KGUuYy5lLmEsZS5jLmUuYik6bChCayhlLmEpLDgpKS5hLCh0LmEuYj09MD9uZXcgbHQodC5jLmUuYSx0LmMuZS5iKTpsKEJrKHQuYSksOCkpLmEpfWZ1bmN0aW9uIGc2bihlLHQpe3JldHVybiB0cCgpLFlpKChlLmEuYj09MD9uZXcgbHQoZS5iLmUuYSxlLmIuZS5iKTpsKG8wKGUuYSksOCkpLmEsKHQuYS5iPT0wP25ldyBsdCh0LmIuZS5hLHQuYi5lLmIpOmwobzAodC5hKSw4KSkuYSl9ZnVuY3Rpb24gcDZuKGUsdCl7cmV0dXJuIHRwKCksWWkoKGUuYS5iPT0wP25ldyBsdChlLmIuZS5hLGUuYi5lLmIpOmwobzAoZS5hKSw4KSkuYiwodC5hLmI9PTA/bmV3IGx0KHQuYi5lLmEsdC5iLmUuYik6bChvMCh0LmEpLDgpKS5iKX1mdW5jdGlvbiB0Nigpe3Q2PVUsS2I9bmV3IHZPKCJESVNUUklCVVRFRCIsMCksdEY9bmV3IHZPKCJKVVNUSUZJRUQiLDEpLFhOZT1uZXcgdk8oIkJFR0lOIiwyKSxJTT1uZXcgdk8oY1QsMyksUU5lPW5ldyB2TygiRU5EIiw0KX1mdW5jdGlvbiBudWUoZSx0KXt2YXIgbixyLGE7cmV0dXJuIHI9TW4oZS5EaCgpLHQpLG49dC1lLmppKCksbjwwPyhhPWUuSWgociksYT49MD9lLldoKGEpOnF1ZShlLHIpKTpuPDA/cXVlKGUscik6bChyLDY5KS53aygpLkJrKGUsZS5oaSgpLG4pfWZ1bmN0aW9uIGZkdChlKXt2YXIgdCxuLHI7Zm9yKHI9KCFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxlLm8pLG49ci5jLktjKCk7bi5lIT1uLmkuZ2MoKTspdD1sKG4uWWooKSw0NCksdC5tZCgpO3JldHVybiBpTihyKX1mdW5jdGlvbiBJdChlKXt2YXIgdDtpZihEZShlLmEsNCkpe2lmKHQ9SDhlKGUuYSksdD09bnVsbCl0aHJvdyB1ZShuZXcgbmMoTnl0K2UuYisiJy4gIitPeXQrKEdnKGhGKSxoRi5rKStKQ2UpKTtyZXR1cm4gdH1lbHNlIHJldHVybiBlLmF9ZnVuY3Rpb24gYjZuKGUsdCl7dmFyIG4scjtpZihlLmoubGVuZ3RoIT10LmoubGVuZ3RoKXJldHVybiExO2ZvcihuPTAscj1lLmoubGVuZ3RoO248cjtuKyspaWYoIXZuKGUualtuXSx0Lmpbbl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGdyKGUpe3ZhciB0O3RyeXtyZXR1cm4gdD1lLmkuWGIoZS5lKSxlLlhqKCksZS5nPWUuZSsrLHR9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT8oZS5YaigpLHVlKG5ldyBfYykpOnVlKG4pfX1mdW5jdGlvbiBydWUoZSl7dmFyIHQ7dHJ5e3JldHVybiB0PWUuYy5WaShlLmUpLGUuWGooKSxlLmc9ZS5lKyssdH1jYXRjaChuKXt0aHJvdyBuPWJzKG4pLERlKG4sNzcpPyhlLlhqKCksdWUobmV3IF9jKSk6dWUobil9fWZ1bmN0aW9uIGVVKGUpe3ZhciB0LG4scixhO2ZvcihhPTAsbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0PShYbihuLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobikpLHQ+PTY0JiZ0PDEyOCYmKGE9UTAoYSxsMCgxLHQtNjQpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gdFUoZSx0KXt2YXIgbixyO3JldHVybiByPW51bGwsbnMoZSwocGkoKSxyOSkpJiYobj1sKFEoZSxyOSksOTYpLG4ucGYodCkmJihyPW4ub2YodCkpKSxyPT1udWxsJiZlbyhlKSYmKHI9UShlbyhlKSx0KSkscn1mdW5jdGlvbiBtNm4oZSx0KXt2YXIgbjtyZXR1cm4gbj1sKFEoZSwoTnQoKSxjYykpLDc1KSxac2UodCxPOHQpP24/Q2gobik6KG49bmV3IGJsLHJ0KGUsY2MsbikpOm4mJnJ0KGUsY2MsbnVsbCksbn1mdW5jdGlvbiBJQSgpe0lBPVUsWF9lPShwaSgpLF9OZSksVzBlPW9OZSxJN3Q9WjYsWV9lPV8yLEI3dD0oZFUoKSxBX2UpLFA3dD1TX2UsRjd0PU1fZSxON3Q9Q19lLE83dD0oTGNlKCksR19lKSxLMGU9TDd0LFdfZT1NN3Qsdks9RDd0fWZ1bmN0aW9uIG5VKGUpe3N3aXRjaCh3M2UoKSx0aGlzLmM9bmV3IGJ0LHRoaXMuZD1lLGUuZyl7Y2FzZSAwOmNhc2UgMjp0aGlzLmE9XzVlKHBBZSksdGhpcy5iPWdzO2JyZWFrO2Nhc2UgMzpjYXNlIDE6dGhpcy5hPXBBZSx0aGlzLmI9aWF9fWZ1bmN0aW9uIHY2bihlKXt2YXIgdDtVOChsKFEoZSwoTnQoKSxNcykpLDEwMSkpJiYodD1lLmIsZTJ0KChTbigwLHQuYy5sZW5ndGgpLGwodC5jWzBdLDMwKSkpLGUydChsKGp0KHQsdC5jLmxlbmd0aC0xKSwzMCkpKX1mdW5jdGlvbiB3Nm4oZSx0KXt0LlVnKCJTZWxmLUxvb3AgcG9zdC1wcm9jZXNzaW5nIiwxKSxJcyhGaShGaShEYyhuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IFJaKSxuZXcgalopLG5ldyAkWiksbmV3IEVqKSx0LlZnKCl9ZnVuY3Rpb24gZGR0KGUsdCxuKXt2YXIgcixhO2lmKGUuYylVdShlLmMsZS5jLmkrdCksR3UoZS5jLGUuYy5qK24pO2Vsc2UgZm9yKGE9bmV3IEcoZS5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTYzKSxkZHQocix0LG4pfWZ1bmN0aW9uIHk2bihlKXt2YXIgdDtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHQ9c0luKFR1KGUsITApKSx0PT1udWxsKXRocm93IHVlKG5ldyBKaWUoIkludmFsaWQgYmFzZTY0QmluYXJ5IHZhbHVlOiAnIitlKyInIikpO3JldHVybiB0fWZ1bmN0aW9uIGZmKGUsdCl7dmFyIG47bj1lLmZkKHQpO3RyeXtyZXR1cm4gbi5QYigpfWNhdGNoKHIpe3Rocm93IHI9YnMociksRGUociwxMTIpP3VlKG5ldyB0YygiQ2FuJ3QgZ2V0IGVsZW1lbnQgIit0KSk6dWUocil9fWZ1bmN0aW9uIGdkdChlLHQpe3ZhciBuLHIsYTtmb3Iobj1lLm8sYT1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTE3KSxyLmUuYT1FN24ocixuLmEpLHIuZS5iPW4uYip6ZShHZShyLmIub2YocEspKSl9ZnVuY3Rpb24geDZuKGUsdCl7dmFyIG4scixhO2ZvcihhPW5ldyBCdSh0LmdjKCkpLHI9dC5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSwyOTMpLG4uYz09bi5mP3FFKGUsbixuLmMpOlY5bihlLG4pfHwkbihhLmMsbik7cmV0dXJuIGF9ZnVuY3Rpb24gcGR0KGUpe3ZhciB0O3JldHVybiB0PW5ldyB0Yix0LmErPSJuIixlLmshPShabigpLFBzKSYmaGkoaGkoKHQuYSs9IigiLHQpLGFhZShlLmspLnRvTG93ZXJDYXNlKCkpLCIpIiksaGkoKHQuYSs9Il8iLHQpLEhOKGUpKSx0LmF9ZnVuY3Rpb24gazZuKGUsdCl7dmFyIG4scixhLG87cmV0dXJuIGE9ZS5rLG49emUoR2UoUShlLChmdCgpLGwzKSkpKSxvPXQuayxyPXplKEdlKFEodCxsMykpKSxvIT0oWm4oKSxVcyk/LTE6YSE9VXM/MTpuPT1yPzA6bjxyPy0xOjF9ZnVuY3Rpb24gRTZuKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1sKGwoY3IoZS5nLHQuYSksNDIpLmEsNjgpLHI9bChsKGNyKGUuZyx0LmIpLDQyKS5hLDY4KSxwYih0LmEsdC5iKS1wYih0LmEsbXllKG4uYikpLXBiKHQuYixteWUoci5iKSl9ZnVuY3Rpb24gYmR0KGUsdCl7dmFyIG47c3dpdGNoKG49bChRbyhlLmIsdCksMTI3KS5uLHQuZyl7Y2FzZSAxOmUudD49MCYmKG4uZD1lLnQpO2JyZWFrO2Nhc2UgMzplLnQ+PTAmJihuLmE9ZS50KX1lLkMmJihuLmI9ZS5DLmIsbi5jPWUuQy5jKX1mdW5jdGlvbiBPQSgpe09BPVUsdkRlPW5ldyBoTyhjQ2UsMCksdmRlPW5ldyBoTygkaGUsMSksd2RlPW5ldyBoTygiTElORUFSX1NFR01FTlRTIiwyKSxyTT1uZXcgaE8oIkJSQU5ERVNfS09FUEYiLDMpLGlNPW5ldyBoTyhjeXQsNCl9ZnVuY3Rpb24gTkEoKXtOQT1VLHVCPW5ldyBocShuRywwKSxiSz1uZXcgaHEoeWhlLDEpLG1LPW5ldyBocSh4aGUsMiksbEI9bmV3IGhxKGtoZSwzKSx1Qi5hPSExLGJLLmE9ITAsbUsuYT0hMSxsQi5hPSEwfWZ1bmN0aW9uIGJ4KCl7Yng9VSxhQj1uZXcgbHEobkcsMCksc0I9bmV3IGxxKHloZSwxKSxvQj1uZXcgbHEoeGhlLDIpLGNCPW5ldyBscShraGUsMyksYUIuYT0hMSxzQi5hPSEwLG9CLmE9ITEsY0IuYT0hMH1mdW5jdGlvbiBteChlLHQsbixyKXt2YXIgYTtyZXR1cm4gbj49MD9lLlNoKHQsbixyKTooZS5QaCgpJiYocj0oYT1lLkZoKCksYT49MD9lLkFoKHIpOmUuUGgoKS5UaChlLC0xLWEsbnVsbCxyKSkpLGUuQ2godCxuLHIpKX1mdW5jdGlvbiBLOGUoZSx0KXtzd2l0Y2godCl7Y2FzZSA3OiFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksJHIoZS5lKTtyZXR1cm47Y2FzZSA4OiFlLmQmJihlLmQ9bmV3IExuKGpzLGUsOCw1KSksJHIoZS5kKTtyZXR1cm59TjhlKGUsdCl9ZnVuY3Rpb24gSGkoZSx0LG4pe3JldHVybiBuPT1udWxsPyghZS5vJiYoZS5vPW5ldyB4bCgoc3UoKSxDZyksTDIsZSwwKSksWVYoZS5vLHQpKTooIWUubyYmKGUubz1uZXcgeGwoKHN1KCksQ2cpLEwyLGUsMCkpLEdOKGUubyx0LG4pKSxlfWZ1bmN0aW9uIG1kdChlLHQpe0NuKCk7dmFyIG4scixhLG87Zm9yKG49ZSxvPXQsRGUoZSwyMSkmJiFEZSh0LDIxKSYmKG49dCxvPWUpLGE9bi5LYygpO2EuT2IoKTspaWYocj1hLlBiKCksby5IYyhyKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBUNm4oZSx0LG4scil7aWYodC5hPHIuYSlyZXR1cm4hMDtpZih0LmE9PXIuYSl7aWYodC5iPHIuYilyZXR1cm4hMDtpZih0LmI9PXIuYiYmZS5iPm4uYilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBpdWUoZSx0KXtyZXR1cm4gSWEoZSk/ISFyNnRbdF06ZS5TbT8hIWUuU21bdF06ZnkoZSk/ISFuNnRbdF06aHkoZSk/ISF0NnRbdF06ITF9ZnVuY3Rpb24gQzZuKGUpe3ZhciB0O3Q9ZS5hO2RvIHQ9bCh4cihuZXcgaHIoZHIoa2EodCkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmksdC5rPT0oWm4oKSxBYSkmJmUuYi5GYyh0KTt3aGlsZSh0Lms9PShabigpLEFhKSk7ZS5iPWxmKGUuYil9ZnVuY3Rpb24gdmR0KGUsdCl7dmFyIG4scixhO2ZvcihhPWUscj1uZXcgaHIoZHIoa2EodCkuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksbi5jLmkuYyYmKGE9Yi5NYXRoLm1heChhLG4uYy5pLmMucCkpO3JldHVybiBhfWZ1bmN0aW9uIFM2bihlLHQpe3ZhciBuLHIsYTtmb3IoYT0wLHI9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDExNyksYSs9bi5kLmQrbi5iLk1mKCkuYituLmQuYSxyLk9iKCkmJihhKz1lLncpO3JldHVybiBhfWZ1bmN0aW9uIF82bihlLHQpe3ZhciBuLHIsYTtmb3IoYT0wLHI9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDExNyksYSs9bi5kLmIrbi5iLk1mKCkuYStuLmQuYyxyLk9iKCkmJihhKz1lLncpO3JldHVybiBhfWZ1bmN0aW9uIHdkdChlKXt2YXIgdCxuLHIsYTtpZihyPTAsYT1IeShlKSxhLmMubGVuZ3RoPT0wKXJldHVybiAxO2ZvcihuPW5ldyBHKGEpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyNykscis9d2R0KHQpO3JldHVybiByfWZ1bmN0aW9uIEE2bihlKXt2YXIgdCxuLHI7Zm9yKHI9ZS5jLmEsZS5wPShYcihyKSxuZXcgT2wocikpLG49bmV3IEcocik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEwKSx0LnA9aGtuKHQpLmE7Q24oKSxWcyhlLnAsbmV3IHFlZSl9ZnVuY3Rpb24gTDZuKGUsdCxuKXt2YXIgcixhLG8sZjtyZXR1cm4gcj1lLmRkKHQpLHIhPS0xJiYoZS5QaigpPyhvPWUuUWooKSxmPXJIKGUsciksYT1lLklqKDQsZixudWxsLHIsbyksbj9uLm5qKGEpOm49YSk6ckgoZSxyKSksbn1mdW5jdGlvbiBUbyhlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIHI9ZS5kZCh0KSxyIT0tMSYmKGUuUGooKT8obz1lLlFqKCksZj12eChlLHIpLGE9ZS5Jaig0LGYsbnVsbCxyLG8pLG4/bi5uaihhKTpuPWEpOnZ4KGUscikpLG59ZnVuY3Rpb24gTTZuKGUsdCxuLHIpe3ZhciBhLG8sZjtuLlhoKHQpJiYoRm8oKSxWb2UodCk/KGE9bChuLk1oKHQpLDE2MCksbjZuKGUsYSkpOihvPShmPXQsZj9sKHIsNTQpLmdpKGYpOm51bGwpLG8mJkljbihuLk1oKHQpLG8pKSl9ZnVuY3Rpb24gclUoZSx0LG4scil7dmFyIGEsbyxmO3JldHVybiBvPU1uKGUuRGgoKSx0KSxhPXQtZS5qaSgpLGE8MD8oZj1lLkloKG8pLGY+PTA/ZS5MaChmLG4sITApOkh3KGUsbyxuKSk6bChvLDY5KS53aygpLnlrKGUsZS5oaSgpLGEsbixyKX1mdW5jdGlvbiBENm4oZSx0LG4scil7dmFyIGEsbztvPXQucGYoKHBpKCkscjcpKT9sKHQub2YocjcpLDIxKTplLmosYT1wNG4obyksYSE9KFlVKCksSDBlKSYmKG4mJiEkOGUoYSl8fEp4ZShnVG4oZSxhLHIpLHQpKX1mdW5jdGlvbiBJNm4oZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBQdygpLGlCO2Nhc2UgMzpyZXR1cm4gUHcoKSxyQjtjYXNlIDI6cmV0dXJuIFB3KCksVTBlO2Nhc2UgNDpyZXR1cm4gUHcoKSxWMGU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gTzZuKGUsdCxuKXtpZihlLmUpc3dpdGNoKGUuYil7Y2FzZSAxOkVwbihlLmMsdCxuKTticmVhaztjYXNlIDA6VHBuKGUuYyx0LG4pfWVsc2UgJGN0KGUuYyx0LG4pO2UuYVt0LnBdW24ucF09ZS5jLmksZS5hW24ucF1bdC5wXT1lLmMuZX1mdW5jdGlvbiB5ZHQoZSl7dmFyIHQsbjtpZihlPT1udWxsKXJldHVybiBudWxsO2ZvcihuPVdlKHdnLGR0LDE5OSxlLmxlbmd0aCwwLDIpLHQ9MDt0PG4ubGVuZ3RoO3QrKyluW3RdPWwoRG1uKGVbdF0sZVt0XS5sZW5ndGgpLDE5OSk7cmV0dXJuIG59ZnVuY3Rpb24gaVUoZSl7dmFyIHQ7aWYoX2NlKGUpKXJldHVybiBkSChlKSxlLnVsKCkmJih0PXpBKGUuZSxlLmIsZS5jLGUuYSxlLmopLGUuaj10KSxlLmc9ZS5hLCsrZS5hLCsrZS5jLGUuaT0wLGUuajt0aHJvdyB1ZShuZXcgX2MpfWZ1bmN0aW9uIE42bihlLHQpe3ZhciBuLHIsYSxvO3JldHVybiBvPWUubyxuPWUucCxvPG4/byo9bzpuKj1uLHI9bytuLG89dC5vLG49dC5wLG88bj9vKj1vOm4qPW4sYT1vK24scjxhPy0xOnI9PWE/MDoxfWZ1bmN0aW9uIGYyKGUsdCl7dmFyIG4scixhO2lmKGE9dGd0KGUsdCksYT49MClyZXR1cm4gYTtpZihlLm9sKCkpe2ZvcihyPTA7cjxlLmk7KytyKWlmKG49ZS5wbChsKGUuZ1tyXSw1OCkpLHFlKG4pPT09cWUodCkpcmV0dXJuIHJ9cmV0dXJuLTF9ZnVuY3Rpb24gbjYoZSx0LG4pe3ZhciByLGE7aWYoYT1lLmdjKCksdD49YSl0aHJvdyB1ZShuZXcgbXkodCxhKSk7aWYoZS5TaSgpJiYocj1lLmRkKG4pLHI+PTAmJnIhPXQpKXRocm93IHVlKG5ldyBZbihXUCkpO3JldHVybiBlLlhpKHQsbil9ZnVuY3Rpb24gVzhlKGUsdCl7aWYodGhpcy5hPWwoWHIoZSksMjUzKSx0aGlzLmI9bChYcih0KSwyNTMpLGUuRWQodCk+MHx8ZT09KFVpZSgpLHcwZSl8fHQ9PShHaWUoKSx5MGUpKXRocm93IHVlKG5ldyBZbigiSW52YWxpZCByYW5nZTogIitIY3QoZSx0KSkpfWZ1bmN0aW9uIHhkdChlKXt2YXIgdCxuO2Zvcih0aGlzLmI9bmV3IGJ0LHRoaXMuYz1lLHRoaXMuYT0hMSxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEwKSx0aGlzLmE9dGhpcy5hfHQuaz09KFpuKCksUHMpfWZ1bmN0aW9uIFA2bihlLHQpe3ZhciBuLHIsYTtmb3Iobj1odyhuZXcgU20sZSksYT1uZXcgRyh0KTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTI1KSxwMChzMChpMChhMChyMChuZXcgX2YsMCksMCksbikscikpO3JldHVybiBufWZ1bmN0aW9uIGtkdChlLHQsbil7bi5VZygiQ29tcG91bmQgZ3JhcGggcHJlcHJvY2Vzc29yIiwxKSxlLmE9bmV3IEN3LCR2dChlLHQsbnVsbCksTExuKGUsdCksWlRuKGUpLHJ0KHQsKGZ0KCksakxlKSxlLmEpLGUuYT1udWxsLE5sKGUuYiksbi5WZygpfWZ1bmN0aW9uIEVkdChlLHQsbil7dmFyIHIsYSxvO2ZvcihhPW5ldyBocihkcigodD9rYShlKTpxcyhlKSkuYS5LYygpLG5ldyBqKSk7anIoYSk7KXI9bCh4cihhKSwxOCksbz10P3IuYy5pOnIuZC5pLG8uaz09KFpuKCksY3UpJiZWYShvLG4pfWZ1bmN0aW9uIEI2bihlLHQpe3ZhciBuLHIsYTtmb3IodC5VZygiVW50cmVlaWZ5IiwxKSxuPWwoUShlLChRaSgpLHNJZSkpLDE1KSxhPW4uS2MoKTthLk9iKCk7KXI9bChhLlBiKCksNjUpLHVpKHIuYi5kLHIpLHVpKHIuYy5iLHIpO3QuVmcoKX1mdW5jdGlvbiBGNm4oZSl7dmFyIHQsbixyO2ZvcihyPWwoJGkoZS5hLChSeSgpLEtLKSksMTUpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDEwNSksdD1veGUobiksVmsoZSxuLHRbMF0sKE93KCksYTMpLDApLFZrKGUsbix0WzFdLG8zLDEpfWZ1bmN0aW9uIFI2bihlKXt2YXIgdCxuLHI7Zm9yKHI9bCgkaShlLmEsKFJ5KCksV0spKSwxNSkuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMTA1KSx0PW94ZShuKSxWayhlLG4sdFswXSwoT3coKSxhMyksMCksVmsoZSxuLHRbMV0sbzMsMSl9ZnVuY3Rpb24gQnkoKXtCeT1VLF9XPW5ldyBicShJZCwwKSxiZGU9bmV3IGJxKCJQT1JUX1BPU0lUSU9OIiwxKSxHNj1uZXcgYnEoIk5PREVfU0laRV9XSEVSRV9TUEFDRV9QRVJNSVRTIiwyKSxVNj1uZXcgYnEoIk5PREVfU0laRSIsMyl9ZnVuY3Rpb24gc1UoKXtzVT1VLGlnZT1uZXcgRnNlKCJJTlRFUkFDVElWRV9OT0RFX1JFT1JERVJFUiIsMCksYWdlPW5ldyBGc2UoIk1JTl9TSVpFX1BSRV9QUk9DRVNTT1IiLDEpLHNnZT1uZXcgRnNlKCJNSU5fU0laRV9QT1NUX1BST0NFU1NPUiIsMil9ZnVuY3Rpb24gb2coKXtvZz1VLFNnZT1uZXcgX18oIkFVVE9NQVRJQyIsMCksSEI9bmV3IF9fKE14LDEpLFZCPW5ldyBfXyhEeCwyKSxuWT1uZXcgX18oIlRPUCIsMyksZVk9bmV3IF9fKHhFZSw0KSx0WT1uZXcgX18oY1QsNSl9ZnVuY3Rpb24gWThlKGUsdCxuLHIpe0dFKCk7dmFyIGEsbztmb3IoYT0wLG89MDtvPG47bysrKWE9Ym8obW8odmEodFtvXSxWbyksdmEocixWbykpLHZhKFlyKGEpLFZvKSksZVtvXT1ZcihhKSxhPXViKGEsMzIpO3JldHVybiBZcihhKX1mdW5jdGlvbiBYOGUoZSx0LG4pe3ZhciByLGE7Zm9yKGE9MCxyPTA7cjxxMGU7cisrKWE9Yi5NYXRoLm1heChhLERjZShlLmFbdC5nXVtyXSxuKSk7cmV0dXJuIHQ9PSh0MSgpLCR1KSYmZS5iJiYoYT1iLk1hdGgubWF4KGEsZS5iLmIpKSxhfWZ1bmN0aW9uIGFVKGUsdCl7dmFyIG4scjtpZihxeWUodD4wKSwodCYtdCk9PXQpcmV0dXJuIHVhKHQqSmwoZSwzMSkqNDY1NjYxMjg3MzA3NzM5M2UtMjUpO2RvIG49SmwoZSwzMSkscj1uJXQ7d2hpbGUobi1yKyh0LTEpPDApO3JldHVybiB1YShyKX1mdW5jdGlvbiBqNm4oZSx0LG4pe3N3aXRjaChuLmcpe2Nhc2UgMTplLmE9dC5hLzIsZS5iPTA7YnJlYWs7Y2FzZSAyOmUuYT10LmEsZS5iPXQuYi8yO2JyZWFrO2Nhc2UgMzplLmE9dC5hLzIsZS5iPXQuYjticmVhaztjYXNlIDQ6ZS5hPTAsZS5iPXQuYi8yfX1mdW5jdGlvbiB6TihlLHQsbixyKXt2YXIgYSxvO2ZvcihhPXQ7YTxlLmMubGVuZ3RoO2ErKylpZihvPShTbihhLGUuYy5sZW5ndGgpLGwoZS5jW2FdLDEyKSksbi5NYihvKSkkbihyLmMsbyk7ZWxzZSByZXR1cm4gYTtyZXR1cm4gZS5jLmxlbmd0aH1mdW5jdGlvbiBzdWUoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gbmV3IFRmdDtjYXNlIDI6cmV0dXJuIG5ldyBWd2U7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oRWZlKyhlLmYhPW51bGw/ZS5mOiIiK2UuZykpKX19ZnVuY3Rpb24gcU4oZSx0LG4pe3ZhciByLGE7Zm9yKFgzbihlLHQtZS5zLG4tZS50KSxhPW5ldyBHKGUubik7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDIwOSksRWUocixyLmUrdC1lLnMpLEJlKHIsci5mK24tZS50KTtlLnM9dCxlLnQ9bn1mdW5jdGlvbiAkNm4oZSl7dmFyIHQsbixyLGEsbztmb3Iobj0wLGE9bmV3IEcoZS5hKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTI1KSxyLmQ9bisrO3JldHVybiB0PVl4bihlKSxvPW51bGwsdC5jLmxlbmd0aD4xJiYobz1QNm4oZSx0KSksb31mdW5jdGlvbiBUZHQoZSl7dmFyIHQ7cmV0dXJuIHQ9emUoR2UoYXQoZSwocGkoKSxRQikpKSkqYi5NYXRoLnNxcnQoKCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxlLmEpLmkpLG5ldyBsdCh0LHQvemUoR2UoYXQoZSxzWSkpKSl9ZnVuY3Rpb24gYXVlKGUpe3ZhciB0O3JldHVybiBlLmYmJmUuZi5WaCgpJiYodD1sKGUuZiw1NCksZS5mPWwoeWIoZSx0KSw4NCksZS5mIT10JiZlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSw5LDgsdCxlLmYpKSksZS5mfWZ1bmN0aW9uIG91ZShlKXt2YXIgdDtyZXR1cm4gZS5pJiZlLmkuVmgoKSYmKHQ9bChlLmksNTQpLGUuaT1sKHliKGUsdCksODQpLGUuaSE9dCYmZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsOSw3LHQsZS5pKSkpLGUuaX1mdW5jdGlvbiBSbyhlKXt2YXIgdDtyZXR1cm4gZS5iJiZlLmIuRGImNjQmJih0PWUuYixlLmI9bCh5YihlLHQpLDE5KSxlLmIhPXQmJmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDksMjEsdCxlLmIpKSksZS5ifWZ1bmN0aW9uIG9VKGUsdCl7dmFyIG4scixhO2UuZD09bnVsbD8oKytlLmUsKytlLmYpOihyPXQuQmkoKSxjQ24oZSxlLmYrMSksYT0ociZJaSklZS5kLmxlbmd0aCxuPWUuZFthXSwhbiYmKG49ZS5kW2FdPWUuZGsoKSksbi5GYyh0KSwrK2UuZil9ZnVuY3Rpb24gUThlKGUsdCxuKXt2YXIgcjtyZXR1cm4gdC50aygpPyExOnQuSWsoKSE9LTI/KHI9dC5paygpLHI9PW51bGw/bj09bnVsbDpQaShyLG4pKTp0LnFrKCk9PWUuZS5EaCgpJiZuPT1udWxsfWZ1bmN0aW9uIGNVKCl7dmFyIGU7TWgoMTYsUHd0KSxlPWNmdCgxNiksdGhpcy5iPVdlKGswZSxUUCwzMDMsZSwwLDEpLHRoaXMuYz1XZShrMGUsVFAsMzAzLGUsMCwxKSx0aGlzLmE9bnVsbCx0aGlzLmU9bnVsbCx0aGlzLmk9MCx0aGlzLmY9ZS0xLHRoaXMuZz0wfWZ1bmN0aW9uIG9wKGUpe3I0ZS5jYWxsKHRoaXMpLHRoaXMuaz0oWm4oKSxQcyksdGhpcy5qPShNaCg2LFl5KSxuZXcgQnUoNikpLHRoaXMuYj0oTWgoMixZeSksbmV3IEJ1KDIpKSx0aGlzLmQ9bmV3ICRpZSx0aGlzLmY9bmV3IFJ3ZSx0aGlzLmE9ZX1mdW5jdGlvbiB6Nm4oZSl7dmFyIHQsbjtlLmMubGVuZ3RoPD0xfHwodD1BYnQoZSwoQ3QoKSxEcikpLHBwdChlLGwodC5hLDE3KS5hLGwodC5iLDE3KS5hKSxuPUFidChlLGVyKSxwcHQoZSxsKG4uYSwxNykuYSxsKG4uYiwxNykuYSkpfWZ1bmN0aW9uIHE2bihlLHQsbil7dmFyIHIsYTtmb3IoYT1lLmEuYixyPWEuYy5sZW5ndGg7cjxuO3IrKylwdyhhLGEuYy5sZW5ndGgsbmV3IHl1KGUuYSkpO1ZhKHQsKFNuKG4tMSxhLmMubGVuZ3RoKSxsKGEuY1tuLTFdLDMwKSkpLGUuYlt0LnBdPW59ZnVuY3Rpb24gQ2R0KGUsdCl7dmFyIG4scixhO2ZvcihlLmJbdC5nXT0xLHI9UnIodC5kLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksYT1uLmMsZS5iW2EuZ109PTE/dWkoZS5hLG4pOmUuYlthLmddPT0yP2UuYlthLmddPTE6Q2R0KGUsYSl9ZnVuY3Rpb24gU2R0KGUsdCxuLHIpe3ZhciBhLG8sZjtmb3IoYT1sKCRpKHI/ZS5hOmUuYix0KSwyMSksZj1hLktjKCk7Zi5PYigpOylpZihvPWwoZi5QYigpLDI3KSxOVShlLG4sbykpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gY3VlKGUpe3ZhciB0LG47Zm9yKG49bmV3IG9yKGUpO24uZSE9bi5pLmdjKCk7KWlmKHQ9bChncihuKSw4OSksdC5lfHwoIXQuZCYmKHQuZD1uZXcgWXMoV28sdCwxKSksdC5kKS5pIT0wKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHV1ZShlKXt2YXIgdCxuO2ZvcihuPW5ldyBvcihlKTtuLmUhPW4uaS5nYygpOylpZih0PWwoZ3IobiksODkpLHQuZXx8KCF0LmQmJih0LmQ9bmV3IFlzKFdvLHQsMSkpLHQuZCkuaSE9MClyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBINm4oZSl7dmFyIHQsbixyO2Zvcih0PTAscj1uZXcgRyhlLmMuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDEwKSx0Kz1YZyhuZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSkpO3JldHVybiB0L2UuYy5hLmMubGVuZ3RofWZ1bmN0aW9uIGx1ZSgpe2x1ZT1VLGpPZT0odGxlKCksUE9lKSxST2U9bmV3IGx3KDgpLG5ldyBIYSgocGkoKSxfMiksUk9lKSxuZXcgSGEoRXYsOCksbFN0PU9PZSxCT2U9blN0LEZPZT1yU3QsdVN0PW5ldyBIYShHQiwoSG4oKSwhMSkpfWZ1bmN0aW9uIFY2bihlLHQsbil7dmFyIHI7bi5VZygiU2hyaW5raW5nIHRyZWUgY29tcGFjdGlvbiIsMSksUnQoQnQoUSh0LChwRSgpLGpMKSkpKT8oSnduKGUsdC5mKSxRbHQodC5mLChyPXQuYyxyKSkpOlFsdCh0LmYsdC5jKSxuLlZnKCl9ZnVuY3Rpb24gSjhlKGUsdCxuLHIpe3N3aXRjaCh0KXtjYXNlIDc6cmV0dXJuIWUuZSYmKGUuZT1uZXcgTG4oanMsZSw3LDQpKSxlLmU7Y2FzZSA4OnJldHVybiFlLmQmJihlLmQ9bmV3IExuKGpzLGUsOCw1KSksZS5kfXJldHVybiB4OGUoZSx0LG4scil9ZnVuY3Rpb24gaHVlKGUpe3ZhciB0O3JldHVybiBlLmEmJmUuYS5WaCgpJiYodD1sKGUuYSw1NCksZS5hPWwoeWIoZSx0KSwxNDIpLGUuYSE9dCYmZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsOSw1LHQsZS5hKSkpLGUuYX1mdW5jdGlvbiBXbShlKXtyZXR1cm4gZTw0OHx8ZT4xMDI/LTE6ZTw9NTc/ZS00ODplPDY1Py0xOmU8PTcwP2UtNjUrMTA6ZTw5Nz8tMTplLTk3KzEwfWZ1bmN0aW9uIGZ1ZShlLHQpe2lmKGU9PW51bGwpdGhyb3cgdWUobmV3IEQ4KCJudWxsIGtleSBpbiBlbnRyeTogbnVsbD0iK3QpKTtpZih0PT1udWxsKXRocm93IHVlKG5ldyBEOCgibnVsbCB2YWx1ZSBpbiBlbnRyeTogIitlKyI9bnVsbCIpKX1mdW5jdGlvbiBVNm4oZSx0KXtmb3IodmFyIG4scjtlLk9iKCk7KWlmKCF0Lk9iKCl8fChuPWUuUGIoKSxyPXQuUGIoKSwhKHFlKG4pPT09cWUocil8fG4hPW51bGwmJlBpKG4scikpKSlyZXR1cm4hMTtyZXR1cm4hdC5PYigpfWZ1bmN0aW9uIF9kdChlLHQpe3ZhciBuO3JldHVybiBuPWhlKGxlKE5hLDEpLFpvLDI4LDE1LFtEY2UoZS5hWzBdLHQpLERjZShlLmFbMV0sdCksRGNlKGUuYVsyXSx0KV0pLGUuZCYmKG5bMF09Yi5NYXRoLm1heChuWzBdLG5bMl0pLG5bMl09blswXSksbn1mdW5jdGlvbiBBZHQoZSx0KXt2YXIgbjtyZXR1cm4gbj1oZShsZShOYSwxKSxabywyOCwxNSxbQlYoZS5hWzBdLHQpLEJWKGUuYVsxXSx0KSxCVihlLmFbMl0sdCldKSxlLmQmJihuWzBdPWIuTWF0aC5tYXgoblswXSxuWzJdKSxuWzJdPW5bMF0pLG59ZnVuY3Rpb24gWjhlKGUsdCxuKXtVOChsKFEodCwoTnQoKSxNcykpLDEwMSkpfHwoZDZlKGUsdCxkMih0LG4pKSxkNmUoZSx0LGQyKHQsKEN0KCksRHIpKSksZDZlKGUsdCxkMih0LFFuKSksQ24oKSxWcyh0LmosbmV3IElZZShlKSkpfWZ1bmN0aW9uIExkdChlKXt2YXIgdCxuO2ZvcihlLmN8fGxNbihlKSxuPW5ldyBibCx0PW5ldyBHKGUuYSkscmUodCk7dC5hPHQuYy5jLmxlbmd0aDspdWkobixsKHJlKHQpLDQxOCkuYSk7cmV0dXJuIG1yKG4uYiE9MCksYWYobixuLmMuYiksbn1mdW5jdGlvbiBHNm4oZSx0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKGc9ZS5yK3QsZS5yKz10LGUuZCs9bixyPW4vZS5uLmMubGVuZ3RoLGE9MCxmPW5ldyBHKGUubik7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDIwOSksc1RuKG8sZyxyLGEpLCsrYX1mdW5jdGlvbiBLNm4oZSl7dmFyIHQsbixyO2ZvcihlLmIuYS4kYigpLGUuYT1XZShkSyxSbiw2MCxlLmMuYy5hLmIuYy5sZW5ndGgsMCwxKSx0PTAscj1uZXcgRyhlLmMuYy5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSw2MCksbi5mPXQrK31mdW5jdGlvbiBXNm4oZSl7dmFyIHQsbixyO2ZvcihlLmIuYS4kYigpLGUuYT1XZShyMWUsUm4sODYsZS5jLmEuYS5iLmMubGVuZ3RoLDAsMSksdD0wLHI9bmV3IEcoZS5jLmEuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksODYpLG4uaT10Kyt9ZnVuY3Rpb24gTWR0KGUpe3ZhciB0O2lmKHQ9UnluKGUpLCFqcihlKSl0aHJvdyB1ZShuZXcgdGMoInBvc2l0aW9uICgwKSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgcmVtYWluZWQgKCIrdCsiKSIpKTtyZXR1cm4geHIoZSl9ZnVuY3Rpb24gWTZuKGUsdCl7dmFyIG47cmV0dXJuIGUuYXx8KG49V2UoTmEsWm8sMjgsMCwxNSwxKSxBNShlLmIuYSxuZXcgc3kobikpLF9RZShuLE1odChQZS5wcm90b3R5cGUuTWUsUGUsW10pKSxlLmE9bmV3IG9pdChuLGUuZCkpLFhIKGUuYSx0KX1mdW5jdGlvbiBEZHQoZSx0LG4pe3ZhciByO3RyeXtyZXR1cm4gcjYoZSx0K2UuaixuK2Uuayl9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDc3KT8ocj1hLHVlKG5ldyB0YyhyLmcraUcrdCtDbytuKyIpLiIpKSk6dWUoYSl9fWZ1bmN0aW9uIFg2bihlLHQsbil7dmFyIHI7dHJ5e3JldHVybiBOZHQoZSx0K2UuaixuK2Uuayl9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDc3KT8ocj1hLHVlKG5ldyB0YyhyLmcraUcrdCtDbytuKyIpLiIpKSk6dWUoYSl9fWZ1bmN0aW9uIFE2bihlLHQsbil7dmFyIHI7dHJ5e3JldHVybiBQZHQoZSx0K2UuaixuK2Uuayl9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDc3KT8ocj1hLHVlKG5ldyB0YyhyLmcraUcrdCtDbytuKyIpLiIpKSk6dWUoYSl9fWZ1bmN0aW9uIElkdChlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuIEN0KCksZXI7Y2FzZSA0OnJldHVybiBDdCgpLFFuO2Nhc2UgMzpyZXR1cm4gQ3QoKSxhcjtjYXNlIDI6cmV0dXJuIEN0KCksRHI7ZGVmYXVsdDpyZXR1cm4gQ3QoKSxQY319ZnVuY3Rpb24gSjZuKGUsdCxuKXt0Lms9PShabigpLFBzKSYmbi5rPT1BYSYmKGUuZD1QY2UodCwoQ3QoKSxEcikpLGUuYj1QY2UodCxRbikpLG4uaz09UHMmJnQuaz09QWEmJihlLmQ9UGNlKG4sKEN0KCksUW4pKSxlLmI9UGNlKG4sRHIpKX1mdW5jdGlvbiBkdWUoZSx0KXt2YXIgbixyLGE7Zm9yKGE9T2MoZSx0KSxyPWEuS2MoKTtyLk9iKCk7KWlmKG49bChyLlBiKCksMTIpLFEobiwoZnQoKSxqbCkpIT1udWxsfHwkXyhuZXcgTjEobi5iKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gWjZuKGUsdCxuKXtuLlVnKCJMaW5lYXIgc2VnbWVudHMgbm9kZSBwbGFjZW1lbnQiLDEpLGUuYj1sKFEodCwoZnQoKSwkNikpLDMxMiksakluKGUsdCkscExuKGUsdCksT0xuKGUsdCksYkluKGUpLGUuYT1udWxsLGUuYj1udWxsLG4uVmcoKX1mdW5jdGlvbiBleGUoZSx0KXtyZXR1cm4gVXUodCxlLmUrZS5kKyhlLmMuYy5sZW5ndGg9PTA/MDplLmIpKSxHdSh0LGUuZiksZS5hPWIuTWF0aC5tYXgoZS5hLHQuZiksZS5kKz10LmcrKGUuYy5jLmxlbmd0aD09MD8wOmUuYiksdnQoZS5jLHQpLCEwfWZ1bmN0aW9uIGU3bihlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKGY9MCxyPW4vZS5hLmMubGVuZ3RoLG89bmV3IEcoZS5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTcyKSxxTihhLGEucyxhLnQrZipyKSxHNm4oYSxlLmQtYS5yK3QsciksKytmfWZ1bmN0aW9uIHQ3bihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3IoYT10Lmxlbmd0aC0xLGY9MCxnPTAscj0wO3I8PWE7cisrKW89dFtyXSxuPXc5bihhLHIpKm44ZSgxLWUsYS1yKSpuOGUoZSxyKSxmKz1vLmEqbixnKz1vLmIqbjtyZXR1cm4gbmV3IGx0KGYsZyl9ZnVuY3Rpb24gT2R0KGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobj10LmdjKCksZS5faShlLmkrbiksbz10LktjKCksZj1lLmksZS5pKz1uLHI9ZjtyPGUuaTsrK3IpYT1vLlBiKCksUl8oZSxyLGUuWmkocixhKSksZS5NaShyLGEpLGUuTmkoKTtyZXR1cm4gbiE9MH1mdW5jdGlvbiBuN24oZSx0LG4pe3ZhciByLGEsbztyZXR1cm4gZS5QaigpPyhyPWUuRWooKSxvPWUuUWooKSwrK2UuaixlLnFqKHIsZS5aaShyLHQpKSxhPWUuSWooMyxudWxsLHQscixvKSxuP24ubmooYSk6bj1hKTpNcnQoZSxlLkVqKCksdCksbn1mdW5jdGlvbiByN24oZSx0LG4pe3ZhciByLGEsbztyZXR1cm4gcj1sKE9lKGR1KGUuYSksdCksODkpLG89KGE9ci5jLERlKGEsOTApP2woYSwyOSk6KFRuKCksS2YpKSwoby5EYiY2ND95YihlLmIsbyk6byk9PW4/alUocik6c0UocixuKSxvfWZ1bmN0aW9uIGk3bihlKXt2YXIgdDtyZXR1cm4gZT09bnVsbD9udWxsOm5ldyBvYigodD1UdShlLCEwKSx0Lmxlbmd0aD4wJiYoWG4oMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsdC5sZW5ndGgrMSksdC5zdWJzdHIoMSkpOnQpKX1mdW5jdGlvbiBzN24oZSl7dmFyIHQ7cmV0dXJuIGU9PW51bGw/bnVsbDpuZXcgb2IoKHQ9VHUoZSwhMCksdC5sZW5ndGg+MCYmKFhuKDAsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLHQubGVuZ3RoKzEpLHQuc3Vic3RyKDEpKTp0KSl9ZnVuY3Rpb24gdHhlKGUsdCxuLHIsYSxvLGYsZyl7dmFyIHcsRTtyJiYodz1yLmFbMF0sdyYmdHhlKGUsdCxuLHcsYSxvLGYsZykseHVlKGUsbixyLmQsYSxvLGYsZykmJnQuRmMociksRT1yLmFbMV0sRSYmdHhlKGUsdCxuLEUsYSxvLGYsZykpfWZ1bmN0aW9uIHI2KGUsdCxuKXt0cnl7cmV0dXJuIGN3KG5jZShlLHQsbiksMSl9Y2F0Y2gocil7dGhyb3cgcj1icyhyKSxEZShyLDMzMyk/dWUobmV3IHRjKEVoZStlLm8rIioiK2UucCtUaGUrdCtDbytuK0NoZSkpOnVlKHIpfX1mdW5jdGlvbiBOZHQoZSx0LG4pe3RyeXtyZXR1cm4gY3cobmNlKGUsdCxuKSwwKX1jYXRjaChyKXt0aHJvdyByPWJzKHIpLERlKHIsMzMzKT91ZShuZXcgdGMoRWhlK2UubysiKiIrZS5wK1RoZSt0K0NvK24rQ2hlKSk6dWUocil9fWZ1bmN0aW9uIFBkdChlLHQsbil7dHJ5e3JldHVybiBjdyhuY2UoZSx0LG4pLDIpfWNhdGNoKHIpe3Rocm93IHI9YnMociksRGUociwzMzMpP3VlKG5ldyB0YyhFaGUrZS5vKyIqIitlLnArVGhlK3QrQ28rbitDaGUpKTp1ZShyKX19ZnVuY3Rpb24gQmR0KGUsdCl7aWYoZS5nPT0tMSl0aHJvdyB1ZShuZXcgcGwpO2UuWGooKTt0cnl7ZS5kLmhkKGUuZyx0KSxlLmY9ZS5kLmp9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT91ZShuZXcgWGgpOnVlKG4pfX1mdW5jdGlvbiBhN24oZSl7dmFyIHQsbixyLGEsbztmb3Iocj1uZXcgRyhlLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPWwocmUociksMzApLHQ9MCxvPW5ldyBHKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEwKSxhLnA9dCsrfWZ1bmN0aW9uIFBBKGUsdCl7dmFyIG4scixhLG87Zm9yKG89ZS5nYygpLHQubGVuZ3RoPG8mJih0PVZ6KG5ldyBBcnJheShvKSx0KSksYT10LHI9ZS5LYygpLG49MDtuPG87KytuKVRzKGEsbixyLlBiKCkpO3JldHVybiB0Lmxlbmd0aD5vJiZUcyh0LG8sbnVsbCksdH1mdW5jdGlvbiBvN24oZSx0KXt2YXIgbixyO2lmKHI9ZS5nYygpLHQ9PW51bGwpe2ZvcihuPTA7bjxyO24rKylpZihlLlhiKG4pPT1udWxsKXJldHVybiBufWVsc2UgZm9yKG49MDtuPHI7bisrKWlmKFBpKHQsZS5YYihuKSkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gZ3VlKGUsdCl7dmFyIG4scixhO3JldHVybiBuPXQubGQoKSxhPXQubWQoKSxyPWUueGMobiksISghKHFlKGEpPT09cWUocil8fGEhPW51bGwmJlBpKGEscikpfHxyPT1udWxsJiYhZS5fYihuKSl9ZnVuY3Rpb24gYzduKGUsdCl7dmFyIG4scixhO3JldHVybiB0PD0yMj8obj1lLmwmKDE8PHQpLTEscj1hPTApOnQ8PTQ0PyhuPWUubCxyPWUubSYoMTw8dC0yMiktMSxhPTApOihuPWUubCxyPWUubSxhPWUuaCYoMTw8dC00NCktMSkscXUobixyLGEpfWZ1bmN0aW9uIHU3bihlLHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gZS5mLm4uZCtlLnQ7Y2FzZSAzOnJldHVybiBlLmYubi5hK2UudDtjYXNlIDI6cmV0dXJuIGUuZi5uLmMrZS5zO2Nhc2UgNDpyZXR1cm4gZS5mLm4uYitlLnM7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gbDduKGUsdCl7dmFyIG4scjtzd2l0Y2gocj10LmMsbj10LmEsZS5iLmcpe2Nhc2UgMDpuLmQ9ZS5lLXIuYS1yLmQ7YnJlYWs7Y2FzZSAxOm4uZCs9ZS5lO2JyZWFrO2Nhc2UgMjpuLmM9ZS5lLXIuYS1yLmQ7YnJlYWs7Y2FzZSAzOm4uYz1lLmUrci5kfX1mdW5jdGlvbiBueGUoZSx0LG4scil7dmFyIGEsbzt0aGlzLmE9dCx0aGlzLmM9cixhPWUuYSxTaWUodGhpcyxuZXcgbHQoLWEuYywtYS5kKSksT2kodGhpcy5iLG4pLG89ci8yLHQuYT96Xyh0aGlzLmIsMCxvKTp6Xyh0aGlzLmIsbywwKSx2dChlLmMsdGhpcyl9ZnVuY3Rpb24gRmR0KGUsdCxuLHIpe3ZhciBhO3RoaXMuYz1lLHRoaXMuZD10LGE9bmV3IG9zLENzKGEsbixhLmMuYixhLmMpLHRoaXMuYT1hLHRoaXMuYj1sKFEociwoSGMoKSx5MykpLDg4KSx0aGlzLmU9emUoR2UoUShyLG1JZSkpKSxFd3QodGhpcyl9ZnVuY3Rpb24gdVUoKXt1VT1VLHRnZT1uZXcgeXEoSWQsMCksekllPW5ldyB5cShZM3QsMSkscUllPW5ldyB5cSgiRURHRV9MRU5HVEhfQllfUE9TSVRJT04iLDIpLCRJZT1uZXcgeXEoIkNST1NTSU5HX01JTklNSVpBVElPTl9CWV9QT1NJVElPTiIsMyl9ZnVuY3Rpb24gcHVlKGUsdCl7dmFyIG4scjtpZihuPWwoWDUoZS5nLHQpLDI3KSxuKXJldHVybiBuO2lmKHI9bChYNShlLmosdCksMTIzKSxyKXJldHVybiByO3Rocm93IHVlKG5ldyBkZCgiUmVmZXJlbmNlZCBzaGFwZSBkb2VzIG5vdCBleGlzdDogIit0KSl9ZnVuY3Rpb24gcnhlKGUsdCl7dmFyIG4scjtpZihEZSh0LDI1Mykpe3I9bCh0LDI1Myk7dHJ5e3JldHVybiBuPWUuRWQociksbj09MH1jYXRjaChhKXtpZihhPWJzKGEpLERlKGEsMjEyKSlyZXR1cm4hMTt0aHJvdyB1ZShhKX19cmV0dXJuITF9ZnVuY3Rpb24gaDduKGUsdCl7aWYoZS5jPT10KXJldHVybiBlLmQ7aWYoZS5kPT10KXJldHVybiBlLmM7dGhyb3cgdWUobmV3IFluKCJOb2RlICdvbmUnIG11c3QgYmUgZWl0aGVyIHNvdXJjZSBvciB0YXJnZXQgb2YgZWRnZSAnZWRnZScuIikpfWZ1bmN0aW9uIGY3bihlLHQpe2lmKGUuYy5pPT10KXJldHVybiBlLmQuaTtpZihlLmQuaT09dClyZXR1cm4gZS5jLmk7dGhyb3cgdWUobmV3IFluKCJOb2RlICIrdCsiIGlzIG5laXRoZXIgc291cmNlIG5vciB0YXJnZXQgb2YgZWRnZSAiK2UpKX1mdW5jdGlvbiBkN24oZSx0LG4pe24uVWcoIlNlbGYtTG9vcCBvcmRlcmluZyIsMSksSXMoZmMoRmkoRmkoRGMobmV3IGJuKG51bGwsbmV3IGtuKHQuYiwxNikpLG5ldyBOWiksbmV3IHhqKSxuZXcgUFopLG5ldyBCWiksbmV3IGlZZShlKSksbi5WZygpfWZ1bmN0aW9uIGc3bihlLHQpe3ZhciBuO3N3aXRjaCh0Lmcpe2Nhc2UgMjpjYXNlIDQ6bj1lLmEsZS5jLmQubi5iPG4uZC5uLmImJihuPWUuYyksUXAoZSx0LChSMSgpLGIxZSksbik7YnJlYWs7Y2FzZSAxOmNhc2UgMzpRcChlLHQsKFIxKCksVngpLG51bGwpfX1mdW5jdGlvbiBidWUoZSx0LG4scixhLG8pe3ZhciBmLGcsdyxFLEM7Zm9yKGY9ZzhuKHQsbixvKSxnPW49PShDdCgpLFFuKXx8bj09ZXI/LTE6MSxFPWVbbi5nXSxDPTA7QzxFLmxlbmd0aDtDKyspdz1FW0NdLHc+MCYmKHcrPWEpLEVbQ109ZixmKz1nKih3K3IpfWZ1bmN0aW9uIFJkdChlKXt2YXIgdCxuLHI7Zm9yKHI9ZS5mLGUubj1XZShOYSxabywyOCxyLDE1LDEpLGUuZD1XZShOYSxabywyOCxyLDE1LDEpLHQ9MDt0PHI7dCsrKW49bChqdChlLmMuYix0KSwzMCksZS5uW3RdPWxkdChlLG4pLGUuZFt0XT10YnQoZSxuKX1mdW5jdGlvbiBtdWUoZSx0KXt2YXIgbixyLGE7Zm9yKGE9MCxyPTI7cjx0O3I8PD0xKWUuRGImciYmKythO2lmKGE9PTApe2ZvcihuPXQ8PD0xO248PTEyODtuPDw9MSlpZihlLkRiJm4pcmV0dXJuIDA7cmV0dXJuLTF9ZWxzZSByZXR1cm4gYX1mdW5jdGlvbiBqZHQoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihmPVd1KGUuZS5EaCgpLHQpLG89bnVsbCxuPWwoZS5nLDEyNCksYT0wO2E8ZS5pOysrYSlyPW5bYV0sZi5hbShyLkxrKCkpJiYoIW8mJihvPW5ldyBYMikscXIobyxyKSk7byYmYXd0KGUsbyl9ZnVuY3Rpb24gJGR0KGUpe3ZhciB0LG4scjtpZighZSlyZXR1cm4gbnVsbDtpZihlLmRjKCkpcmV0dXJuIiI7Zm9yKHI9bmV3IFVwLG49ZS5LYygpO24uT2IoKTspdD1uLlBiKCksWG8ocixlaSh0KSksci5hKz0iICI7cmV0dXJuIEdzZShyLHIuYS5sZW5ndGgtMSl9ZnVuY3Rpb24gemR0KGUsdCl7dmFyIG49bmV3IEFycmF5KHQpLHI7c3dpdGNoKGUpe2Nhc2UgMTQ6Y2FzZSAxNTpyPTA7YnJlYWs7Y2FzZSAxNjpyPSExO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG59Zm9yKHZhciBhPTA7YTx0OysrYSluW2FdPXI7cmV0dXJuIG59ZnVuY3Rpb24gJHcoZSl7dmFyIHQsbixyO2ZvcihuPW5ldyBHKGUuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNjApLHQuYy4kYigpO1VnKGUuZCk/cj1lLmEuYzpyPWUuYS5kLFZ1KHIsbmV3IExpZShlKSksZS5jLmRmKGUpLHdidChlKX1mdW5jdGlvbiBxZHQoZSl7dmFyIHQsbixyLGE7Zm9yKG49bmV3IEcoZS5lLmMpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IodD1sKHJlKG4pLDI5MCksYT1uZXcgRyh0LmIpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSw0NTQpLEFrZShyKTtZcHQodCl9fWZ1bmN0aW9uIGxVKGUpe3ZhciB0LG4scixhLG87Zm9yKHI9MCxvPTAsYT0wLG49bmV3IEcoZS5hKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTcyKSxvPWIuTWF0aC5tYXgobyx0LnIpLHIrPXQuZCsoYT4wP2UuYzowKSwrK2E7ZS5iPXIsZS5kPW99ZnVuY3Rpb24gSGR0KGUsdCl7dmFyIG47cmV0dXJuIG49aGUobGUoTmEsMSksWm8sMjgsMTUsW1g4ZShlLCh0MSgpLEdjKSx0KSxYOGUoZSwkdSx0KSxYOGUoZSxLYyx0KV0pLGUuZiYmKG5bMF09Yi5NYXRoLm1heChuWzBdLG5bMl0pLG5bMl09blswXSksbn1mdW5jdGlvbiBwN24oZSx0LG4pe3ZhciByO3RyeXtGVShlLHQrZS5qLG4rZS5rLCExLCEwKX1jYXRjaChhKXt0aHJvdyBhPWJzKGEpLERlKGEsNzcpPyhyPWEsdWUobmV3IHRjKHIuZytpRyt0K0NvK24rIikuIikpKTp1ZShhKX19ZnVuY3Rpb24gYjduKGUsdCxuKXt2YXIgcjt0cnl7RlUoZSx0K2UuaixuK2UuaywhMCwhMSl9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDc3KT8ocj1hLHVlKG5ldyB0YyhyLmcraUcrdCtDbytuKyIpLiIpKSk6dWUoYSl9fWZ1bmN0aW9uIFZkdChlKXt2YXIgdDtucyhlLChOdCgpLGQzKSkmJih0PWwoUShlLGQzKSwyMSksdC5IYygocXkoKSxFMCkpPyh0Lk1jKEUwKSx0LkZjKFQwKSk6dC5IYyhUMCkmJih0Lk1jKFQwKSx0LkZjKEUwKSkpfWZ1bmN0aW9uIFVkdChlKXt2YXIgdDtucyhlLChOdCgpLGQzKSkmJih0PWwoUShlLGQzKSwyMSksdC5IYygocXkoKSxTMCkpPyh0Lk1jKFMwKSx0LkZjKHFmKSk6dC5IYyhxZikmJih0Lk1jKHFmKSx0LkZjKFMwKSkpfWZ1bmN0aW9uIHZ1ZShlLHQsbixyKXt2YXIgYSxvLGYsZztyZXR1cm4gZS5hPT1udWxsJiZ2OW4oZSx0KSxmPXQuYi5qLmMubGVuZ3RoLG89bi5kLnAsZz1yLmQucCxhPWctMSxhPDAmJihhPWYtMSksbzw9YT9lLmFbYV0tZS5hW29dOmUuYVtmLTFdLWUuYVtvXStlLmFbYV19ZnVuY3Rpb24gbTduKGUpe3ZhciB0LG47aWYoIWUuYilmb3IoZS5iPSRIKGwoZS5mLDI3KS5raCgpLmkpLG49bmV3IG9yKGwoZS5mLDI3KS5raCgpKTtuLmUhPW4uaS5nYygpOyl0PWwoZ3IobiksMTM1KSx2dChlLmIsbmV3IFlpZSh0KSk7cmV0dXJuIGUuYn1mdW5jdGlvbiB2N24oZSl7dmFyIHQsbjtpZighZS5lKWZvcihlLmU9JEgoWGFlKGwoZS5mLDI3KSkuaSksbj1uZXcgb3IoWGFlKGwoZS5mLDI3KSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwxMjMpLHZ0KGUuZSxuZXcgQlhlKHQpKTtyZXR1cm4gZS5lfWZ1bmN0aW9uIEdkdChlKXt2YXIgdCxuO2lmKCFlLmEpZm9yKGUuYT0kSChBSChsKGUuZiwyNykpLmkpLG49bmV3IG9yKEFIKGwoZS5mLDI3KSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwyNyksdnQoZS5hLG5ldyByYWUoZSx0KSk7cmV0dXJuIGUuYX1mdW5jdGlvbiB6dyhlKXt2YXIgdDtpZighZS5DJiYoZS5EIT1udWxsfHxlLkIhPW51bGwpKWlmKHQ9c0RuKGUpLHQpZS5obCh0KTtlbHNlIHRyeXtlLmhsKG51bGwpfWNhdGNoKG4pe2lmKG49YnMobiksIURlKG4sNjMpKXRocm93IHVlKG4pfXJldHVybiBlLkN9ZnVuY3Rpb24gdzduKGUpe3N3aXRjaChlLnEuZyl7Y2FzZSA1OmJndChlLChDdCgpLFFuKSksYmd0KGUsRHIpO2JyZWFrO2Nhc2UgNDp2dnQoZSwoQ3QoKSxRbikpLHZ2dChlLERyKTticmVhaztkZWZhdWx0OnhwdChlLChDdCgpLFFuKSkseHB0KGUsRHIpfX1mdW5jdGlvbiB5N24oZSl7c3dpdGNoKGUucS5nKXtjYXNlIDU6bWd0KGUsKEN0KCksYXIpKSxtZ3QoZSxlcik7YnJlYWs7Y2FzZSA0Ond2dChlLChDdCgpLGFyKSksd3Z0KGUsZXIpO2JyZWFrO2RlZmF1bHQ6a3B0KGUsKEN0KCksYXIpKSxrcHQoZSxlcil9fWZ1bmN0aW9uIGk2KGUsdCl7dmFyIG4scixhO2ZvcihhPW5ldyBxYSxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMzYpLEtFKG4sYS5hLDApLGEuYSs9bi5mLmErdCxhLmI9Yi5NYXRoLm1heChhLmIsbi5mLmIpO3JldHVybiBhLmI+MCYmKGEuYis9dCksYX1mdW5jdGlvbiBoVShlLHQpe3ZhciBuLHIsYTtmb3IoYT1uZXcgcWEscj1lLktjKCk7ci5PYigpOyluPWwoci5QYigpLDM2KSxLRShuLDAsYS5iKSxhLmIrPW4uZi5iK3QsYS5hPWIuTWF0aC5tYXgoYS5hLG4uZi5hKTtyZXR1cm4gYS5hPjAmJihhLmErPXQpLGF9ZnVuY3Rpb24gS2R0KGUpe3ZhciB0LG4scjtmb3Iocj1JaSxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEwKSxucyh0LChmdCgpLEtpKSkmJihyPWIuTWF0aC5taW4ocixsKFEodCxLaSksMTcpLmEpKTtyZXR1cm4gcn1mdW5jdGlvbiBXZHQoZSx0KXt2YXIgbixyO2lmKHQubGVuZ3RoPT0wKXJldHVybiAwO2ZvcihuPVlhZShlLmEsdFswXSwoQ3QoKSxlcikpLG4rPVlhZShlLmEsdFt0Lmxlbmd0aC0xXSxhcikscj0wO3I8dC5sZW5ndGg7cisrKW4rPXI5bihlLHIsdCk7cmV0dXJuIG59ZnVuY3Rpb24gWWR0KCl7R0EoKSx0aGlzLmM9bmV3IGJ0LHRoaXMuaT1uZXcgYnQsdGhpcy5lPW5ldyBiZCx0aGlzLmY9bmV3IGJkLHRoaXMuZz1uZXcgYmQsdGhpcy5qPW5ldyBidCx0aGlzLmE9bmV3IGJ0LHRoaXMuYj1uZXcgUHIsdGhpcy5rPW5ldyBQcn1mdW5jdGlvbiB3dWUoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09Nj9lLkNiLlRoKGUsNSx1MSx0KToocj1SbyhsKE1uKChuPWwoS24oZSwxNiksMjkpLG58fGUuaWkoKSksZS5EYj4+MTYpLDE5KSksZS5DYi5UaChlLHIubixyLmYsdCkpfWZ1bmN0aW9uIHg3bihlKXtYaygpO3ZhciB0PWUuZTtpZih0JiZ0LnN0YWNrKXt2YXIgbj10LnN0YWNrLHI9dCtgCmA7cmV0dXJuIG4uc3Vic3RyaW5nKDAsci5sZW5ndGgpPT1yJiYobj1uLnN1YnN0cmluZyhyLmxlbmd0aCkpLG4uc3BsaXQoYApgKX1yZXR1cm5bXX1mdW5jdGlvbiBrN24oZSl7dmFyIHQ7cmV0dXJuIHQ9KFFodCgpLHA2dCksdFtlPj4+MjhdfHRbZT4+MjQmMTVdPDw0fHRbZT4+MjAmMTVdPDw4fHRbZT4+MTYmMTVdPDwxMnx0W2U+PjEyJjE1XTw8MTZ8dFtlPj44JjE1XTw8MjB8dFtlPj40JjE1XTw8MjR8dFtlJjE1XTw8Mjh9ZnVuY3Rpb24gWGR0KGUpe3ZhciB0LG4scjtlLmI9PWUuYyYmKHI9ZS5hLmxlbmd0aCxuPVA3ZShiLk1hdGgubWF4KDgscikpPDwxLGUuYiE9MD8odD1jMChlLmEsbiksZmZ0KGUsdCxyKSxlLmE9dCxlLmI9MCk6YXkoZS5hLG4pLGUuYz1yKX1mdW5jdGlvbiBFN24oZSx0KXt2YXIgbjtyZXR1cm4gbj1lLmIsbi5wZigocGkoKSxyaCkpP24uYWcoKT09KEN0KCksZXIpPy1uLk1mKCkuYS16ZShHZShuLm9mKHJoKSkpOnQremUoR2Uobi5vZihyaCkpKTpuLmFnKCk9PShDdCgpLGVyKT8tbi5NZigpLmE6dH1mdW5jdGlvbiBITihlKXt2YXIgdDtyZXR1cm4gZS5iLmMubGVuZ3RoIT0wJiZsKGp0KGUuYiwwKSw3MikuYT9sKGp0KGUuYiwwKSw3MikuYToodD1RYWUoZSksdD8/IiIrKGUuYz9nYyhlLmMuYSxlLDApOi0xKSl9ZnVuY3Rpb24gZlUoZSl7dmFyIHQ7cmV0dXJuIGUuZi5jLmxlbmd0aCE9MCYmbChqdChlLmYsMCksNzIpLmE/bChqdChlLmYsMCksNzIpLmE6KHQ9UWFlKGUpLHQ/PyIiKyhlLmk/Z2MoZS5pLmosZSwwKTotMSkpfWZ1bmN0aW9uIFQ3bihlLHQpe3ZhciBuLHI7aWYodDwwfHx0Pj1lLmdjKCkpcmV0dXJuIG51bGw7Zm9yKG49dDtuPGUuZ2MoKTsrK24paWYocj1sKGUuWGIobiksMTMxKSxuPT1lLmdjKCktMXx8IXIubylyZXR1cm4gbmV3IGNhKHB0KG4pLHIpO3JldHVybiBudWxsfWZ1bmN0aW9uIEM3bihlLHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobz1lLmMsZz1uP3Q6ZSxyPW4/ZTp0LGE9Zy5wKzE7YTxyLnA7KythKWlmKGY9bChqdChvLmEsYSksMTApLCEoZi5rPT0oWm4oKSxLMSl8fFo3bihmKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gaXhlKGUpe3ZhciB0LG4scixhLG87Zm9yKG89MCxhPWlhLHI9MCxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDE3Miksbys9dC5yKyhyPjA/ZS5jOjApLGE9Yi5NYXRoLm1heChhLHQuZCksKytyO2UuZT1vLGUuYj1hfWZ1bmN0aW9uIFM3bihlKXt2YXIgdCxuO2lmKCFlLmIpZm9yKGUuYj0kSChsKGUuZiwxMjMpLmtoKCkuaSksbj1uZXcgb3IobChlLmYsMTIzKS5raCgpKTtuLmUhPW4uaS5nYygpOyl0PWwoZ3IobiksMTM1KSx2dChlLmIsbmV3IFlpZSh0KSk7cmV0dXJuIGUuYn1mdW5jdGlvbiBfN24oZSx0KXt2YXIgbixyLGE7aWYodC5kYygpKXJldHVybiBGaygpLEZrKCksZkY7Zm9yKG49bmV3IE9ydChlLHQuZ2MoKSksYT1uZXcgb3IoZSk7YS5lIT1hLmkuZ2MoKTspcj1ncihhKSx0LkhjKHIpJiZxcihuLHIpO3JldHVybiBufWZ1bmN0aW9uIHN4ZShlLHQsbixyKXtyZXR1cm4gdD09MD9yPyghZS5vJiYoZS5vPW5ldyB4bCgoc3UoKSxDZyksTDIsZSwwKSksZS5vKTooIWUubyYmKGUubz1uZXcgeGwoKHN1KCksQ2cpLEwyLGUsMCkpLGlOKGUubykpOnJVKGUsdCxuLHIpfWZ1bmN0aW9uIHl1ZShlKXt2YXIgdCxuO2lmKGUucmIpZm9yKHQ9MCxuPWUucmIuaTt0PG47Kyt0KVNPKE9lKGUucmIsdCkpO2lmKGUudmIpZm9yKHQ9MCxuPWUudmIuaTt0PG47Kyt0KVNPKE9lKGUudmIsdCkpO0tfKChFbCgpLGlvKSxlKSxlLkJifD0xfWZ1bmN0aW9uIHNzKGUsdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseil7cmV0dXJuIExwdChlLHQscixudWxsLGEsbyxmLGcsdyxFLEIsITAseiksbThlKGUsQyksRGUoZS5DYiw5MCkmJnp5KFlsKGwoZS5DYiw5MCkpLDIpLG4mJmI3ZShlLG4pLHY4ZShlLEwpLGV9ZnVuY3Rpb24gQTduKGUpe3ZhciB0LG47aWYoZT09bnVsbClyZXR1cm4gbnVsbDtuPTA7dHJ5e249T2goZSxsbyxJaSkmWnN9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDEzMCkpdD1pVihlKSxuPXRbMF07ZWxzZSB0aHJvdyB1ZShyKX1yZXR1cm4gd04obil9ZnVuY3Rpb24gTDduKGUpe3ZhciB0LG47aWYoZT09bnVsbClyZXR1cm4gbnVsbDtuPTA7dHJ5e249T2goZSxsbyxJaSkmWnN9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDEzMCkpdD1pVihlKSxuPXRbMF07ZWxzZSB0aHJvdyB1ZShyKX1yZXR1cm4gd04obil9ZnVuY3Rpb24gTTduKGUsdCl7dmFyIG4scixhO3JldHVybiBhPWUuaC10LmgsYTwwfHwobj1lLmwtdC5sLHI9ZS5tLXQubSsobj4+MjIpLGErPXI+PjIyLGE8MCk/ITE6KGUubD1uJmVoLGUubT1yJmVoLGUuaD1hJmhwLCEwKX1mdW5jdGlvbiB4dWUoZSx0LG4scixhLG8sZil7dmFyIGcsdztyZXR1cm4hKHQuVGUoKSYmKHc9ZS5hLk5lKG4sciksdzwwfHwhYSYmdz09MCl8fHQuVWUoKSYmKGc9ZS5hLk5lKG4sbyksZz4wfHwhZiYmZz09MCkpfWZ1bmN0aW9uIEQ3bihlLHQpe1RFKCk7dmFyIG47aWYobj1lLmouZy10LmouZyxuIT0wKXJldHVybiAwO3N3aXRjaChlLmouZyl7Y2FzZSAyOnJldHVybiB6Y2UodCxjTGUpLXpjZShlLGNMZSk7Y2FzZSA0OnJldHVybiB6Y2UoZSxvTGUpLXpjZSh0LG9MZSl9cmV0dXJuIDB9ZnVuY3Rpb24gSTduKGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gRDFlO2Nhc2UgMTpyZXR1cm4gSTFlO2Nhc2UgMjpyZXR1cm4gTzFlO2Nhc2UgMzpyZXR1cm4gTjFlO2Nhc2UgNDpyZXR1cm4gUUs7Y2FzZSA1OnJldHVybiBQMWU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gYWMoZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9KGE9bmV3IEhpZSxHbShhLHQpLEZ1KGEsbikscXIoKCFlLmMmJihlLmM9bmV3IG50KGszLGUsMTIsMTApKSxlLmMpLGEpLGEpLGkyKHIsMCksTXkociwxKSx1MihyLCEwKSxjMihyLCEwKSxyfWZ1bmN0aW9uIHZ4KGUsdCl7dmFyIG4scjtpZih0Pj1lLmkpdGhyb3cgdWUobmV3IFZzZSh0LGUuaSkpO3JldHVybisrZS5qLG49ZS5nW3RdLHI9ZS5pLXQtMSxyPjAmJnB1KGUuZyx0KzEsZS5nLHQsciksVHMoZS5nLC0tZS5pLG51bGwpLGUuUWkodCxuKSxlLk5pKCksbn1mdW5jdGlvbiBRZHQoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09MTc/ZS5DYi5UaChlLDIxLFZmLHQpOihyPVJvKGwoTW4oKG49bChLbihlLDE2KSwyOSksbnx8ZS5paSgpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gTzduKGUpe3ZhciB0LG4scixhO2ZvcihDbigpLFZzKGUuYyxlLmEpLGE9bmV3IEcoZS5jKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1yZShhKSxuPW5ldyBHKGUuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDY5MyksdC5iZihyKX1mdW5jdGlvbiBON24oZSl7dmFyIHQsbixyLGE7Zm9yKENuKCksVnMoZS5jLGUuYSksYT1uZXcgRyhlLmMpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPXJlKGEpLG49bmV3IEcoZS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMzgyKSx0LmJmKHIpfWZ1bmN0aW9uIFA3bihlKXt2YXIgdCxuLHIsYSxvO2ZvcihhPUlpLG89bnVsbCxyPW5ldyBHKGUuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDIxOCksbi5kLmpebi5lLmomJih0PW4uZS5lLW4uZC5lLW4uYSx0PGEmJihhPXQsbz1uKSk7cmV0dXJuIG99ZnVuY3Rpb24gYXhlKCl7YXhlPVUsbDh0PW5ldyBwbihQRWUsKEhuKCksITEpKSxvOHQ9bmV3IHBuKEJFZSwxMDApLGFBZT0obEEoKSx0MWUpLGM4dD1uZXcgcG4oRkVlLGFBZSksdTh0PW5ldyBwbihSRWUsRGQpLGg4dD1uZXcgcG4oakVlLHB0KElpKSl9ZnVuY3Rpb24gSmR0KGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO2ZvcihFPTAsYT1lLmFbdF0sbz0wLGY9YS5sZW5ndGg7bzxmOysrbylmb3Iocj1hW29dLEM9VEEocixuKSx3PUMuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLGtpKGUuZixnLHB0KEUrKykpfWZ1bmN0aW9uIEI3bihlLHQsbil7dmFyIHIsYSxvLGY7aWYobilmb3IoYT1uLmEubGVuZ3RoLHI9bmV3IERtKGEpLGY9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zi5PYigpOylvPWwoZi5QYigpLDE3KSx4bihlLHQseHgoX3kobixvLmEpKSl9ZnVuY3Rpb24gRjduKGUsdCxuKXt2YXIgcixhLG8sZjtpZihuKWZvcihhPW4uYS5sZW5ndGgscj1uZXcgRG0oYSksZj0oci5iLXIuYSkqci5jPDA/KHNiKCksdG0pOm5ldyBjYihyKTtmLk9iKCk7KW89bChmLlBiKCksMTcpLHhuKGUsdCx4eChfeShuLG8uYSkpKX1mdW5jdGlvbiBveGUoZSl7Q2IoKTt2YXIgdDtyZXR1cm4gdD1sKFBBKFc4KGUuayksV2UoT28sYXUsNjQsMiwwLDEpKSwxMjYpLG5FKHQsMCx0Lmxlbmd0aCxudWxsKSx0WzBdPT0oQ3QoKSxRbikmJnRbMV09PWVyJiYoVHModCwwLGVyKSxUcyh0LDEsUW4pKSx0fWZ1bmN0aW9uIFpkdChlLHQsbil7dmFyIHIsYSxvO3JldHVybiBhPUNDbihlLHQsbiksbz1ROWUoZSxhKSxSb2UoZS5iKSx2b2UoZSx0LG4pLENuKCksVnMoYSxuZXcgcVllKGUpKSxyPVE5ZShlLGEpLFJvZShlLmIpLHZvZShlLG4sdCksbmV3IGNhKHB0KG8pLHB0KHIpKX1mdW5jdGlvbiBlZ3QoKXtlZ3Q9VSxORXQ9ZmkobmV3IFhzLCh1bygpLG1jKSwodm8oKSx6TCkpLElXPW5ldyB2cygibGluZWFyU2VnbWVudHMuaW5wdXRQcmlvIixwdCgwKSksT1c9bmV3IHZzKCJsaW5lYXJTZWdtZW50cy5vdXRwdXRQcmlvIixwdCgwKSl9ZnVuY3Rpb24gd3goKXt3eD1VLE5XPW5ldyB2cSgiUDFfVFJFRUlGSUNBVElPTiIsMCksbE09bmV3IHZxKCJQMl9OT0RFX09SREVSSU5HIiwxKSxoTT1uZXcgdnEoIlAzX05PREVfUExBQ0VNRU5UIiwyKSxmTT1uZXcgdnEoIlA0X0VER0VfUk9VVElORyIsMyl9ZnVuY3Rpb24gUjduKGUpe3ZhciB0LG4scixhO2ZvcihuPTAsdD0wLGE9bmV3IG9yKGUpO2EuZSE9YS5pLmdjKCk7KXI9bChncihhKSwyNyksbj1iLk1hdGgubWF4KHIuZytyLmksbiksdD1iLk1hdGgubWF4KHIuZityLmosdCk7cmV0dXJuIG5ldyBsdChuLHQpfWZ1bmN0aW9uIGo3bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPTAscj1uZXcgRyhlKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMjcpLG8rPWIuTWF0aC5wb3cobi5nKm4uZi10LDIpO3JldHVybiBhPWIuTWF0aC5zcXJ0KG8vKGUuYy5sZW5ndGgtMSkpLGF9ZnVuY3Rpb24gSWgoKXtJaD1VLGVGPW5ldyBrcSgiVU5LTk9XTiIsMCksa2c9bmV3IGtxKCJBQk9WRSIsMSksR2I9bmV3IGtxKCJCRUxPVyIsMiksWkI9bmV3IGtxKCJJTkxJTkUiLDMpLG5ldyB2cygib3JnLmVjbGlwc2UuZWxrLmxhYmVsU2lkZSIsZUYpfWZ1bmN0aW9uIHRndChlLHQpe3ZhciBuO2lmKGUuWWkoKSYmdCE9bnVsbCl7Zm9yKG49MDtuPGUuaTsrK24paWYoUGkodCxlLmdbbl0pKXJldHVybiBufWVsc2UgZm9yKG49MDtuPGUuaTsrK24paWYocWUoZS5nW25dKT09PXFlKHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uICQ3bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gdC5jPT0ocW8oKSx6dSkmJm4uYz09JGw/LTE6dC5jPT0kbCYmbi5jPT16dT8xOihyPXEwdCh0LmEsZS5hKSxhPXEwdChuLmEsZS5hKSx0LmM9PXp1P2EtcjpyLWEpfWZ1bmN0aW9uIEZ5KGUsdCxuKXtpZihuJiYodDwwfHx0Pm4uYS5jLmxlbmd0aCkpdGhyb3cgdWUobmV3IFluKCJpbmRleCBtdXN0IGJlID49IDAgYW5kIDw9IGxheWVyIG5vZGUgY291bnQiKSk7ZS5jJiZhbChlLmMuYSxlKSxlLmM9bixuJiZwdyhuLmEsdCxlKX1mdW5jdGlvbiBuZ3QoZSx0KXt2YXIgbixyLGE7Zm9yKHI9bmV3IGhyKGRyKHNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKHIpOylyZXR1cm4gbj1sKHhyKHIpLDE4KSxhPWwodC5LYihuKSwxMCksbmV3IEpTKFhyKGEubi5iK2Euby5iLzIpKTtyZXR1cm4gb18oKSxvXygpLHYwZX1mdW5jdGlvbiByZ3QoZSx0KXt0aGlzLmM9bmV3IFByLHRoaXMuYT1lLHRoaXMuYj10LHRoaXMuZD1sKFEoZSwoZnQoKSwkNikpLDMxMikscWUoUShlLChOdCgpLEdNZSkpKT09PXFlKChjTigpLEpLKSk/dGhpcy5lPW5ldyBYUWU6dGhpcy5lPW5ldyBZUWV9ZnVuY3Rpb24gQkEoZSx0KXt2YXIgbixyO3JldHVybiByPW51bGwsZS5wZigocGkoKSxyOSkpJiYobj1sKGUub2YocjkpLDk2KSxuLnBmKHQpJiYocj1uLm9mKHQpKSkscj09bnVsbCYmZS5UZigpJiYocj1lLlRmKCkub2YodCkpLHI9PW51bGwmJihyPUl0KHQpKSxyfWZ1bmN0aW9uIGt1ZShlLHQpe3ZhciBuLHI7bj1lLmZkKHQpO3RyeXtyZXR1cm4gcj1uLlBiKCksbi5RYigpLHJ9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDExMik/dWUobmV3IHRjKCJDYW4ndCByZW1vdmUgZWxlbWVudCAiK3QpKTp1ZShhKX19ZnVuY3Rpb24gejduKGUsdCl7dmFyIG4scixhO2lmKHI9bmV3IFF6LGE9bmV3IFI3ZShyLnEuZ2V0RnVsbFllYXIoKS1MYixyLnEuZ2V0TW9udGgoKSxyLnEuZ2V0RGF0ZSgpKSxuPUpBbihlLHQsYSksbj09MHx8bjx0Lmxlbmd0aCl0aHJvdyB1ZShuZXcgWW4odCkpO3JldHVybiBhfWZ1bmN0aW9uIGN4ZShlLHQpe3ZhciBuLHIsYTtmb3IobnIodCkscXllKHQhPWUpLGE9ZS5iLmMubGVuZ3RoLHI9dC5LYygpO3IuT2IoKTspbj1yLlBiKCksdnQoZS5iLG5yKG4pKTtyZXR1cm4gYSE9ZS5iLmMubGVuZ3RoPyhLN2UoZSwwKSwhMCk6ITF9ZnVuY3Rpb24gVk4oKXtWTj1VLGxBZT0ocGkoKSxXQiksbmV3IEhhKERnZSwoSG4oKSwhMCkpLGQ4dD1rdixnOHQ9aTcscDh0PVViLGY4dD1yNyxmQWU9WUIsYjh0PVM0LHVBZT0oYXhlKCksbDh0KSxvQWU9Yzh0LGNBZT11OHQsaEFlPWg4dCxUSz1vOHR9ZnVuY3Rpb24gcTduKGUsdCl7aWYodD09ZS5jKXJldHVybiBlLmQ7aWYodD09ZS5kKXJldHVybiBlLmM7dGhyb3cgdWUobmV3IFluKCIncG9ydCcgbXVzdCBiZSBlaXRoZXIgdGhlIHNvdXJjZSBwb3J0IG9yIHRhcmdldCBwb3J0IG9mIHRoZSBlZGdlLiIpKX1mdW5jdGlvbiBIN24oZSx0LG4pe3ZhciByLGE7c3dpdGNoKGE9ZS5vLHI9ZS5kLHQuZyl7Y2FzZSAxOnJldHVybi1yLmQtbjtjYXNlIDM6cmV0dXJuIGEuYityLmErbjtjYXNlIDI6cmV0dXJuIGEuYStyLmMrbjtjYXNlIDQ6cmV0dXJuLXIuYi1uO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIHV4ZShlLHQsbixyKXt2YXIgYSxvLGYsZztmb3IoVmEodCxsKHIuWGIoMCksMzApKSxnPXIua2QoMSxyLmdjKCkpLG89bChuLktiKHQpLDIwKS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwxOCksZj1hLmMuaT09dD9hLmQuaTphLmMuaSx1eGUoZSxmLG4sZyl9ZnVuY3Rpb24gaWd0KGUpe3ZhciB0O3JldHVybiB0PW5ldyBQcixucyhlLChmdCgpLFcxZSkpP2woUShlLFcxZSksODUpOihJcyhGaShuZXcgYm4obnVsbCxuZXcga24oZS5qLDE2KSksbmV3IEdaKSxuZXcgdVllKHQpKSxydChlLFcxZSx0KSx0KX1mdW5jdGlvbiBzZ3QoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihyPTAsYT0wLG49MCxmPW5ldyBHKGUpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxODYpLHI9Yi5NYXRoLm1heChyLG8uZSksYSs9by5iKyhuPjA/dDowKSwrK247cmV0dXJuIG5ldyBsdChyLGEpfWZ1bmN0aW9uIGx4ZShlLHQpe3ZhciBuLHI7cmV0dXJuIGUuRGI+PjE2PT02P2UuQ2IuVGgoZSw2LGpzLHQpOihyPVJvKGwoTW4oKG49bChLbihlLDE2KSwyOSksbnx8KHN1KCkscFkpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gaHhlKGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTc/ZS5DYi5UaChlLDEsb0YsdCk6KHI9Um8obChNbigobj1sKEtuKGUsMTYpLDI5KSxufHwoc3UoKSxkUGUpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gZnhlKGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTk/ZS5DYi5UaChlLDksQWksdCk6KHI9Um8obChNbigobj1sKEtuKGUsMTYpLDI5KSxufHwoc3UoKSxwUGUpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gYWd0KGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTU/ZS5DYi5UaChlLDksVFksdCk6KHI9Um8obChNbigobj1sKEtuKGUsMTYpLDI5KSxufHwoVG4oKSxEMikpLGUuRGI+PjE2KSwxOSkpLGUuQ2IuVGgoZSxyLm4sci5mLHQpKX1mdW5jdGlvbiBvZ3QoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09Nz9lLkNiLlRoKGUsNix1MSx0KToocj1SbyhsKE1uKChuPWwoS24oZSwxNiksMjkpLG58fChUbigpLE8yKSksZS5EYj4+MTYpLDE5KSksZS5DYi5UaChlLHIubixyLmYsdCkpfWZ1bmN0aW9uIGR4ZShlLHQpe3ZhciBuLHI7cmV0dXJuIGUuRGI+PjE2PT0zP2UuQ2IuVGgoZSwwLHVGLHQpOihyPVJvKGwoTW4oKG49bChLbihlLDE2KSwyOSksbnx8KFRuKCksTTIpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gY2d0KCl7dGhpcy5hPW5ldyBUJCx0aGlzLmc9bmV3IGNVLHRoaXMuaj1uZXcgY1UsdGhpcy5iPW5ldyBQcix0aGlzLmQ9bmV3IGNVLHRoaXMuaT1uZXcgY1UsdGhpcy5rPW5ldyBQcix0aGlzLmM9bmV3IFByLHRoaXMuZT1uZXcgUHIsdGhpcy5mPW5ldyBQcn1mdW5jdGlvbiBWN24oZSx0LG4pe3ZhciByLGEsbztmb3IobjwwJiYobj0wKSxvPWUuaSxhPW47YTxvO2ErKylpZihyPU9lKGUsYSksdD09bnVsbCl7aWYocj09bnVsbClyZXR1cm4gYX1lbHNlIGlmKHFlKHQpPT09cWUocil8fFBpKHQscikpcmV0dXJuIGE7cmV0dXJuLTF9ZnVuY3Rpb24gVTduKGUsdCl7dmFyIG4scjtyZXR1cm4gbj10LnFpKGUuYSksbj8ocj1laShuMSgoIW4uYiYmKG4uYj1uZXcgZGgoKFRuKCksTm8pLFljLG4pKSxuLmIpLHRLKSksdm4oSlAscik/S18oZSxBaCh0LnFrKCkpKTpyKTpudWxsfWZ1bmN0aW9uIEZFKGUsdCl7dmFyIG4scjtpZih0KXtpZih0PT1lKXJldHVybiEwO2ZvcihuPTAscj1sKHQsNTQpLlBoKCk7ciYmciE9dDtyPXIuUGgoKSl7aWYoKytuPm9oZSlyZXR1cm4gRkUoZSxyKTtpZihyPT1lKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBHN24oZSl7c3dpdGNoKHpxKCksZS5xLmcpe2Nhc2UgNTpWcHQoZSwoQ3QoKSxRbikpLFZwdChlLERyKTticmVhaztjYXNlIDQ6VTJ0KGUsKEN0KCksUW4pKSxVMnQoZSxEcik7YnJlYWs7ZGVmYXVsdDpXdnQoZSwoQ3QoKSxRbikpLFd2dChlLERyKX19ZnVuY3Rpb24gSzduKGUpe3N3aXRjaCh6cSgpLGUucS5nKXtjYXNlIDU6dTJ0KGUsKEN0KCksYXIpKSx1MnQoZSxlcik7YnJlYWs7Y2FzZSA0OmdkdChlLChDdCgpLGFyKSksZ2R0KGUsZXIpO2JyZWFrO2RlZmF1bHQ6WXZ0KGUsKEN0KCksYXIpKSxZdnQoZSxlcil9fWZ1bmN0aW9uIFc3bihlKXt2YXIgdCxuO3Q9bChRKGUsKGIwKCksZTh0KSksMTcpLHQ/KG49dC5hLG49PTA/cnQoZSwoYmIoKSxFSyksbmV3IFVjZSk6cnQoZSwoYmIoKSxFSyksbmV3IFZIKG4pKSk6cnQoZSwoYmIoKSxFSyksbmV3IFZIKDEpKX1mdW5jdGlvbiBZN24oZSx0KXt2YXIgbjtzd2l0Y2gobj1lLmksdC5nKXtjYXNlIDE6cmV0dXJuLShlLm4uYitlLm8uYik7Y2FzZSAyOnJldHVybiBlLm4uYS1uLm8uYTtjYXNlIDM6cmV0dXJuIGUubi5iLW4uby5iO2Nhc2UgNDpyZXR1cm4tKGUubi5hK2Uuby5hKX1yZXR1cm4gMH1mdW5jdGlvbiBYN24oZSx0KXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIHQ9PShoZigpLCRiKT9ISzpWSztjYXNlIDE6cmV0dXJuIHQ9PShoZigpLCRiKT9ISzpwQjtjYXNlIDI6cmV0dXJuIHQ9PShoZigpLCRiKT9wQjpWSztkZWZhdWx0OnJldHVybiBwQn19ZnVuY3Rpb24gVU4oZSx0KXt2YXIgbixyLGE7Zm9yKGFsKGUuYSx0KSxlLmUtPXQucisoZS5hLmMubGVuZ3RoPT0wPzA6ZS5jKSxhPXhDZSxyPW5ldyBHKGUuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE3MiksYT1iLk1hdGgubWF4KGEsbi5kKTtlLmI9YX1mdW5jdGlvbiBneGUoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09Mz9lLkNiLlRoKGUsMTIsQWksdCk6KHI9Um8obChNbigobj1sKEtuKGUsMTYpLDI5KSxufHwoc3UoKSxmUGUpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gcHhlKGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTExP2UuQ2IuVGgoZSwxMCxBaSx0KToocj1SbyhsKE1uKChuPWwoS24oZSwxNiksMjkpLG58fChzdSgpLGdQZSkpLGUuRGI+PjE2KSwxOSkpLGUuQ2IuVGgoZSxyLm4sci5mLHQpKX1mdW5jdGlvbiB1Z3QoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09MTA/ZS5DYi5UaChlLDExLFZmLHQpOihyPVJvKGwoTW4oKG49bChLbihlLDE2KSwyOSksbnx8KFRuKCksSTIpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gbGd0KGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTEwP2UuQ2IuVGgoZSwxMixVZix0KToocj1SbyhsKE1uKChuPWwoS24oZSwxNiksMjkpLG58fChUbigpLE40KSksZS5EYj4+MTYpLDE5KSksZS5DYi5UaChlLHIubixyLmYsdCkpfWZ1bmN0aW9uIE9mKGUpe3ZhciB0O3JldHVybiEoZS5CYiYxKSYmZS5yJiZlLnIuVmgoKSYmKHQ9bChlLnIsNTQpLGUucj1sKHliKGUsdCksMTQyKSxlLnIhPXQmJmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDksOCx0LGUucikpKSxlLnJ9ZnVuY3Rpb24gRXVlKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1oZShsZShOYSwxKSxabywyOCwxNSxbenhlKGUsKHQxKCksR2MpLHQsbiksenhlKGUsJHUsdCxuKSx6eGUoZSxLYyx0LG4pXSksZS5mJiYoclswXT1iLk1hdGgubWF4KHJbMF0sclsyXSksclsyXT1yWzBdKSxyfWZ1bmN0aW9uIFE3bihlLHQpe3ZhciBuLHIsYTtpZihhPXg2bihlLHQpLGEuYy5sZW5ndGghPTApZm9yKFZzKGEsbmV3IHBTKSxuPWEuYy5sZW5ndGgscj0wO3I8bjtyKyspcUUoZSwoU24ocixhLmMubGVuZ3RoKSxsKGEuY1tyXSwyOTMpKSx5U24oZSxhLHIpKX1mdW5jdGlvbiBKN24oZSl7dmFyIHQsbixyLGE7Zm9yKGE9bCgkaShlLmEsKFJ5KCksVUspKSwxNSkuS2MoKTthLk9iKCk7KWZvcihyPWwoYS5QYigpLDEwNSksbj1XOChyLmspLktjKCk7bi5PYigpOyl0PWwobi5QYigpLDY0KSxWayhlLHIsdCwoT3coKSxSYiksMSl9ZnVuY3Rpb24gWjduKGUpe3ZhciB0LG47aWYoZS5rPT0oWm4oKSxBYSkpe2ZvcihuPW5ldyBocihkcihzcChlKS5hLktjKCksbmV3IGopKTtqcihuKTspaWYodD1sKHhyKG4pLDE4KSwhRG8odCkmJmUuYz09a3hlKHQsZSkuYylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBlOG4oZSl7dmFyIHQsbjtpZihlLms9PShabigpLEFhKSl7Zm9yKG49bmV3IGhyKGRyKHNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKG4pOylpZih0PWwoeHIobiksMTgpLCFEbyh0KSYmdC5jLmkuYz09dC5kLmkuYylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB0OG4oZSx0KXt2YXIgbixyLGEsbyxmO2lmKHQpZm9yKGE9dC5hLmxlbmd0aCxuPW5ldyBEbShhKSxmPShuLmItbi5hKSpuLmM8MD8oc2IoKSx0bSk6bmV3IGNiKG4pO2YuT2IoKTspbz1sKGYuUGIoKSwxNykscj1Kayh0LG8uYSksciYmUjJ0KGUscil9ZnVuY3Rpb24gbjhuKCl7eDNlKCk7dmFyIGUsdDtmb3IoSEluKChsYigpLFZuKSksT0luKFZuKSx5dWUoVm4pLExQZT0oVG4oKSx0ZCksdD1uZXcgRyhSUGUpO3QuYTx0LmMuYy5sZW5ndGg7KWU9bChyZSh0KSwyNDgpLFpFKGUsdGQsbnVsbCk7cmV0dXJuITB9ZnVuY3Rpb24gYnhlKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtyZXR1cm4gdz1lLmg+PjE5LEU9dC5oPj4xOSx3IT1FP0UtdzooYT1lLmgsZz10LmgsYSE9Zz9hLWc6KHI9ZS5tLGY9dC5tLHIhPWY/ci1mOihuPWUubCxvPXQubCxuLW8pKSl9ZnVuY3Rpb24gZFUoKXtkVT1VLERfZT0oUFUoKSx6MGUpLE1fZT1uZXcgcG4ocEVlLERfZSksTF9lPShhVigpLCQwZSksQV9lPW5ldyBwbihiRWUsTF9lKSxfX2U9KFpWKCksajBlKSxTX2U9bmV3IHBuKG1FZSxfX2UpLENfZT1uZXcgcG4odkVlLChIbigpLCEwKSl9ZnVuY3Rpb24gRkEoZSx0LG4pe3ZhciByLGE7cj10Km4sRGUoZS5nLDE1NCk/KGE9aXgoZSksYS5mLmQ/YS5mLmF8fChlLmQuYSs9citIMSk6KGUuZC5kLT1yK0gxLGUuZC5hKz1yK0gxKSk6RGUoZS5nLDEwKSYmKGUuZC5kLT1yLGUuZC5hKz0yKnIpfWZ1bmN0aW9uIGhndChlLHQsbil7dmFyIHIsYSxvLGYsZztmb3IoYT1lW24uZ10sZz1uZXcgRyh0LmQpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMDUpLG89Zi5pLG8mJm8uaT09biYmKHI9Zi5kW24uZ10sYVtyXT1iLk1hdGgubWF4KGFbcl0sby5qLmIpKX1mdW5jdGlvbiByOG4oZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihyPTAsYT0wLG49MCxmPW5ldyBHKHQuZCk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDMxNSksbFUobykscj1iLk1hdGgubWF4KHIsby5iKSxhKz1vLmQrKG4+MD9lLmI6MCksKytuO3QuYj1yLHQuZT1hfWZ1bmN0aW9uIGZndChlKXt2YXIgdCxuLHI7aWYocj1lLmIsdGV0KGUuaSxyLmxlbmd0aCkpe2ZvcihuPXIubGVuZ3RoKjIsZS5iPVdlKGswZSxUUCwzMDMsbiwwLDEpLGUuYz1XZShrMGUsVFAsMzAzLG4sMCwxKSxlLmY9bi0xLGUuaT0wLHQ9ZS5hO3Q7dD10LmMpZVAoZSx0LHQpOysrZS5nfX1mdW5jdGlvbiBpOG4oZSx0LG4scil7dmFyIGEsbyxmLGc7Zm9yKGE9MDthPHQubzthKyspZm9yKG89YS10LmorbixmPTA7Zjx0LnA7ZisrKWc9Zi10LmsrcixyNih0LGEsZik/UTZuKGUsbyxnKXx8cDduKGUsbyxnKTpQZHQodCxhLGYpJiYoRGR0KGUsbyxnKXx8YjduKGUsbyxnKSl9ZnVuY3Rpb24gUkEoZSx0KXtyZXR1cm4gZS5iLmE9Yi5NYXRoLm1pbihlLmIuYSx0LmMpLGUuYi5iPWIuTWF0aC5taW4oZS5iLmIsdC5kKSxlLmEuYT1iLk1hdGgubWF4KGUuYS5hLHQuYyksZS5hLmI9Yi5NYXRoLm1heChlLmEuYix0LmQpLCRuKGUuYyx0KSwhMH1mdW5jdGlvbiBzOG4oZSx0LG4pe3ZhciByO3I9dC5jLmksci5rPT0oWm4oKSxBYSk/KHJ0KGUsKGZ0KCksbzEpLGwoUShyLG8xKSwxMikpLHJ0KGUsJGYsbChRKHIsJGYpLDEyKSkpOihydChlLChmdCgpLG8xKSx0LmMpLHJ0KGUsJGYsbi5kKSl9ZnVuY3Rpb24gUkUoZSx0LG4pe2g2KCk7dmFyIHIsYSxvLGYsZyx3O3JldHVybiBmPXQvMixvPW4vMixyPWIuTWF0aC5hYnMoZS5hKSxhPWIuTWF0aC5hYnMoZS5iKSxnPTEsdz0xLHI+ZiYmKGc9Zi9yKSxhPm8mJih3PW8vYSksbWQoZSxiLk1hdGgubWluKGcsdykpLGV9ZnVuY3Rpb24gYThuKCl7elUoKTt2YXIgZSx0O3RyeXtpZih0PWwoU3hlKChpYigpLEdmKSx4VCksMjExMyksdClyZXR1cm4gdH1jYXRjaChuKXtpZihuPWJzKG4pLERlKG4sMTAzKSllPW4scDVlKChKcigpLGUpKTtlbHNlIHRocm93IHVlKG4pfXJldHVybiBuZXcgaWt9ZnVuY3Rpb24gbzhuKCl7elUoKTt2YXIgZSx0O3RyeXtpZih0PWwoU3hlKChpYigpLEdmKSxGZiksMjA0MCksdClyZXR1cm4gdH1jYXRjaChuKXtpZihuPWJzKG4pLERlKG4sMTAzKSllPW4scDVlKChKcigpLGUpKTtlbHNlIHRocm93IHVlKG4pfXJldHVybiBuZXcgZDh9ZnVuY3Rpb24gYzhuKCl7a2x0KCk7dmFyIGUsdDt0cnl7aWYodD1sKFN4ZSgoaWIoKSxHZiksY3YpLDIxMjIpLHQpcmV0dXJuIHR9Y2F0Y2gobil7aWYobj1icyhuKSxEZShuLDEwMykpZT1uLHA1ZSgoSnIoKSxlKSk7ZWxzZSB0aHJvdyB1ZShuKX1yZXR1cm4gbmV3IHVrfWZ1bmN0aW9uIHU4bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT1lLmUsZS5lPXQsZS5EYiY0JiYhKGUuRGImMSkmJihyPW5ldyBfYShlLDEsNCxhLHQpLG4/bi5uaihyKTpuPXIpLGEhPXQmJih0P249WkUoZSxTVShlLHQpLG4pOm49WkUoZSxlLmEsbikpLG59ZnVuY3Rpb24gZGd0KCl7UXouY2FsbCh0aGlzKSx0aGlzLmU9LTEsdGhpcy5hPSExLHRoaXMucD1sbyx0aGlzLms9LTEsdGhpcy5jPS0xLHRoaXMuYj0tMSx0aGlzLmc9ITEsdGhpcy5mPS0xLHRoaXMuaj0tMSx0aGlzLm49LTEsdGhpcy5pPS0xLHRoaXMuZD0tMSx0aGlzLm89bG99ZnVuY3Rpb24gbDhuKGUsdCl7dmFyIG4scixhO2lmKHI9ZS5iLmQuZCxlLmF8fChyKz1lLmIuZC5hKSxhPXQuYi5kLmQsdC5hfHwoYSs9dC5iLmQuYSksbj1ZaShyLGEpLG49PTApe2lmKCFlLmEmJnQuYSlyZXR1cm4tMTtpZighdC5hJiZlLmEpcmV0dXJuIDF9cmV0dXJuIG59ZnVuY3Rpb24gaDhuKGUsdCl7dmFyIG4scixhO2lmKHI9ZS5iLmIuZCxlLmF8fChyKz1lLmIuYi5hKSxhPXQuYi5iLmQsdC5hfHwoYSs9dC5iLmIuYSksbj1ZaShyLGEpLG49PTApe2lmKCFlLmEmJnQuYSlyZXR1cm4tMTtpZighdC5hJiZlLmEpcmV0dXJuIDF9cmV0dXJuIG59ZnVuY3Rpb24gZjhuKGUsdCl7dmFyIG4scixhO2lmKHI9ZS5iLmcuZCxlLmF8fChyKz1lLmIuZy5hKSxhPXQuYi5nLmQsdC5hfHwoYSs9dC5iLmcuYSksbj1ZaShyLGEpLG49PTApe2lmKCFlLmEmJnQuYSlyZXR1cm4tMTtpZighdC5hJiZlLmEpcmV0dXJuIDF9cmV0dXJuIG59ZnVuY3Rpb24gbXhlKCl7bXhlPVUsdjh0PXlsKGZpKGZpKGZpKG5ldyBYcywodW8oKSxfdSksKHZvKCksS0FlKSksX3UsV0FlKSxtYyxZQWUpLG1jLEJBZSkseTh0PWZpKGZpKG5ldyBYcyxfdSxMQWUpLF91LEZBZSksdzh0PXlsKG5ldyBYcyxtYyxqQWUpfWZ1bmN0aW9uIGQ4bihlKXt2YXIgdCxuLHIsYSxvO2Zvcih0PWwoUShlLChmdCgpLEtMKSksODUpLG89ZS5uLHI9dC5DYygpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDMxNCksYT1uLmksYS5jKz1vLmEsYS5kKz1vLmIsbi5jP0lidChuKTpPYnQobik7cnQoZSxLTCxudWxsKX1mdW5jdGlvbiBnOG4oZSx0LG4pe3ZhciByLGE7c3dpdGNoKGE9ZS5iLHI9YS5kLHQuZyl7Y2FzZSAxOnJldHVybi1yLmQtbjtjYXNlIDI6cmV0dXJuIGEuby5hK3IuYytuO2Nhc2UgMzpyZXR1cm4gYS5vLmIrci5hK247Y2FzZSA0OnJldHVybi1yLmItbjtkZWZhdWx0OnJldHVybi0xfX1mdW5jdGlvbiBwOG4oZSx0LG4pe3ZhciByLGE7Zm9yKG4uVWcoIkludGVyYWN0aXZlIG5vZGUgcGxhY2VtZW50IiwxKSxlLmE9bChRKHQsKGZ0KCksJDYpKSwzMTIpLGE9bmV3IEcodC5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMzApLG9TbihlLHIpO24uVmcoKX1mdW5jdGlvbiBiOG4oZSl7dmFyIHQsbixyLGEsbztpZihyPTAsYT15NixlLmIpZm9yKHQ9MDt0PDM2MDt0Kyspbj10Ki4wMTc0NTMyOTI1MTk5NDMyOTUsZ2tlKGUsZS5kLDAsMCxpdixuKSxvPWUuYi5EZyhlLmQpLG88YSYmKHI9bixhPW8pO2drZShlLGUuZCwwLDAsaXYscil9ZnVuY3Rpb24gbThuKGUsdCl7dmFyIG4scixhLG87Zm9yKG89bmV3IFByLHQuZT1udWxsLHQuZj1udWxsLHI9bmV3IEcodC5pKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjgpLGE9bChjcihlLmcsbi5hKSw0Miksbi5hPW1IKG4uYiksa2kobyxuLmEsYSk7ZS5nPW99ZnVuY3Rpb24gdjhuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKGE9dC1lLmUsbz1hL2UuZC5jLmxlbmd0aCxmPTAsdz1uZXcgRyhlLmQpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwzMTUpLHI9ZS5iLWcuYituLEIxdChnLGcuZStmKm8sZy5mKSxlN24oZyxvLHIpLCsrZn1mdW5jdGlvbiBnZ3QoZSl7dmFyIHQ7aWYoZS5mLl9qKCksZS5iIT0tMSl7aWYoKytlLmIsdD1lLmYuZFtlLmFdLGUuYjx0LmkpcmV0dXJuOysrZS5hfWZvcig7ZS5hPGUuZi5kLmxlbmd0aDsrK2UuYSlpZih0PWUuZi5kW2UuYV0sdCYmdC5pIT0wKXtlLmI9MDtyZXR1cm59ZS5iPS0xfWZ1bmN0aW9uIHc4bihlLHQpe3ZhciBuLHIsYTtmb3IoYT10LmMubGVuZ3RoLG49eGtuKGUsYT09MD8iIjooU24oMCx0LmMubGVuZ3RoKSxlaSh0LmNbMF0pKSkscj0xO3I8YSYmbjsrK3Ipbj1sKG4sNTQpLlpoKChTbihyLHQuYy5sZW5ndGgpLGVpKHQuY1tyXSkpKTtyZXR1cm4gbn1mdW5jdGlvbiBwZ3QoZSx0KXt2YXIgbixyO2ZvcihyPW5ldyBHKHQpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxMCksZS5jW24uYy5wXVtuLnBdLmE9WTRlKGUuaSksZS5jW24uYy5wXVtuLnBdLmQ9emUoZS5jW24uYy5wXVtuLnBdLmEpLGUuY1tuLmMucF1bbi5wXS5iPTF9ZnVuY3Rpb24geThuKGUsdCl7dmFyIG4scixhLG87Zm9yKG89MCxyPW5ldyBHKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxNjMpLG8rPWIuTWF0aC5wb3cod2wobikqZ2gobiktdCwyKTtyZXR1cm4gYT1iLk1hdGguc3FydChvLyhlLmMubGVuZ3RoLTEpKSxhfWZ1bmN0aW9uIGJndChlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPTAsYT1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTE3KSxvPWIuTWF0aC5tYXgobyxyLmUuYStyLmIuTWYoKS5hKTtuPWwoUW8oZS5iLHQpLDEyNyksbi5uLmI9MCxuLmEuYT1vfWZ1bmN0aW9uIG1ndChlLHQpe3ZhciBuLHIsYSxvO2ZvcihuPTAsbz1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTtvLk9iKCk7KWE9bChvLlBiKCksMTE3KSxuPWIuTWF0aC5tYXgobixhLmUuYithLmIuTWYoKS5iKTtyPWwoUW8oZS5iLHQpLDEyNyksci5uLmQ9MCxyLmEuYj1ufWZ1bmN0aW9uIHZndChlLHQsbixyKXt2YXIgYSxvLGY7cmV0dXJuIG89bl9uKGUsdCxuLHIpLGY9c2tlKGUsbyksT3VlKGUsdCxuLHIpLFJvZShlLmIpLENuKCksVnMobyxuZXcgSFllKGUpKSxhPXNrZShlLG8pLE91ZShlLG4sdCxyKSxSb2UoZS5iKSxuZXcgY2EocHQoZikscHQoYSkpfWZ1bmN0aW9uIHg4bihlLHQpe3ZhciBuO3QuVWcoIkRlbGF1bmF5IHRyaWFuZ3VsYXRpb24iLDEpLG49bmV3IGJ0LFZ1KGUuaSxuZXcgQ1hlKG4pKSxSdChCdChRKGUsKHBFKCksakwpKSkpLGUuZT9LYShlLmUsZnd0KG4pKTplLmU9Znd0KG4pLHQuVmcoKX1mdW5jdGlvbiBrOG4oZSx0LG4pe3ZhciByLGE7Zm9yKGtPKGUsZS5qK3QsZS5rK24pLGE9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBZcyhxaCxlLDUpKSxlLmEpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMzc3KSxXc2UocixyLmErdCxyLmIrbik7eE8oZSxlLmIrdCxlLmMrbil9ZnVuY3Rpb24gdnhlKGUsdCxuLHIpe3N3aXRjaChuKXtjYXNlIDc6cmV0dXJuIWUuZSYmKGUuZT1uZXcgTG4oanMsZSw3LDQpKSxSdShlLmUsdCxyKTtjYXNlIDg6cmV0dXJuIWUuZCYmKGUuZD1uZXcgTG4oanMsZSw4LDUpKSxSdShlLmQsdCxyKX1yZXR1cm4gTXVlKGUsdCxuLHIpfWZ1bmN0aW9uIHd4ZShlLHQsbixyKXtzd2l0Y2gobil7Y2FzZSA3OnJldHVybiFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksVG8oZS5lLHQscik7Y2FzZSA4OnJldHVybiFlLmQmJihlLmQ9bmV3IExuKGpzLGUsOCw1KSksVG8oZS5kLHQscil9cmV0dXJuIGRjZShlLHQsbixyKX1mdW5jdGlvbiBFOG4oZSx0LG4pe3ZhciByLGEsbyxmLGc7aWYobilmb3Iobz1uLmEubGVuZ3RoLHI9bmV3IERtKG8pLGc9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSxhPUprKG4sZi5hKSxhJiZIcHQoZSxhLHQpfWZ1bmN0aW9uIEdOKGUsdCxuKXt2YXIgcixhLG8sZixnO3JldHVybiBlLl9qKCksbz10PT1udWxsPzA6ZXModCksZS5mPjAmJihmPShvJklpKSVlLmQubGVuZ3RoLGE9eTllKGUsZixvLHQpLGEpPyhnPWEubmQobiksZyk6KHI9ZS5jayhvLHQsbiksZS5jLkZjKHIpLG51bGwpfWZ1bmN0aW9uIHl4ZShlLHQpe3ZhciBuLHIsYSxvO3N3aXRjaChvMihlLHQpLktsKCkpe2Nhc2UgMzpjYXNlIDI6e2ZvcihuPWQ2KHQpLGE9MCxvPW4uaTthPG87KythKWlmKHI9bChPZShuLGEpLDM1KSxrdyhpYyhlLHIpKT09NSlyZXR1cm4gcjticmVha319cmV0dXJuIG51bGx9ZnVuY3Rpb24gVDhuKGUpe3ZhciB0LG4scixhLG87aWYodGV0KGUuZixlLmIubGVuZ3RoKSlmb3Iocj1XZShjNnQsVFAsMjI3LGUuYi5sZW5ndGgqMiwwLDEpLGUuYj1yLGE9ci5sZW5ndGgtMSxuPWUuYTtuIT1lO249bi5fZCgpKW89bChuLDIyNyksdD1vLmQmYSxvLmE9clt0XSxyW3RdPW99ZnVuY3Rpb24gQzhuKGUpe3ZhciB0LG47cmV0dXJuIG49bChRKGUsKGZ0KCksTHUpKSwyMSksdD1PcShYRXQpLG4uSGMoKEhvKCksQjYpKSYmRGgodCxaRXQpLG4uSGMoR0wpJiZEaCh0LGVUdCksbi5IYyhSVCkmJkRoKHQsUUV0KSxuLkhjKGpUKSYmRGgodCxKRXQpLHR9ZnVuY3Rpb24geHhlKGUpe2lmKGU8MCl0aHJvdyB1ZShuZXcgWW4oIlRoZSBpbnB1dCBtdXN0IGJlIHBvc2l0aXZlIikpO3JldHVybiBlPFVPZS5sZW5ndGg/Rm0oVU9lW2VdKTpiLk1hdGguc3FydChpdiplKSoodDRuKGUsZSkvbjhlKDIuNzE4MjgxODI4NDU5MDQ1LGUpKX1mdW5jdGlvbiBqRShlLHQpe3ZhciBuO2lmKGUuWWkoKSYmdCE9bnVsbCl7Zm9yKG49MDtuPGUuaTsrK24paWYoUGkodCxlLmdbbl0pKXJldHVybiEwfWVsc2UgZm9yKG49MDtuPGUuaTsrK24paWYocWUoZS5nW25dKT09PXFlKHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFM4bihlLHQpe2lmKHQ9PW51bGwpe2Zvcig7ZS5hLk9iKCk7KWlmKGwoZS5hLlBiKCksNDQpLm1kKCk9PW51bGwpcmV0dXJuITB9ZWxzZSBmb3IoO2UuYS5PYigpOylpZihQaSh0LGwoZS5hLlBiKCksNDQpLm1kKCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIF84bihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gdD09PWU/ITA6RGUodCw2NzgpPyhhPWwodCwyMDQ2KSxZMXQoKHI9ZS5nLHJ8fChlLmc9bmV3ICRJKGUpKSksKG49YS5nLG58fChhLmc9bmV3ICRJKGEpKSkpKTohMX1mdW5jdGlvbiBBOG4oZSl7dmFyIHQsbixyLGE7Zm9yKHQ9ImdBIixuPSJ2eiIsYT1iLk1hdGgubWluKGUubGVuZ3RoLDUpLHI9YS0xO3I+PTA7ci0tKWlmKHZuKGVbcl0uZCx0KXx8dm4oZVtyXS5kLG4pKXtlLmxlbmd0aD49cisxJiZlLnNwbGljZSgwLHIrMSk7YnJlYWt9cmV0dXJuIGV9ZnVuY3Rpb24gS04oZSx0KXt2YXIgbjtyZXR1cm4gd2MoZSkmJndjKHQpJiYobj1lL3QsX1A8biYmbjxabSk/bjwwP2IuTWF0aC5jZWlsKG4pOmIuTWF0aC5mbG9vcihuKTptYihOa2Uod2MoZSk/TWYoZSk6ZSx3Yyh0KT9NZih0KTp0LCExKSl9ZnVuY3Rpb24ga3hlKGUsdCl7aWYodD09ZS5jLmkpcmV0dXJuIGUuZC5pO2lmKHQ9PWUuZC5pKXJldHVybiBlLmMuaTt0aHJvdyB1ZShuZXcgWW4oIidub2RlJyBtdXN0IGVpdGhlciBiZSB0aGUgc291cmNlIG5vZGUgb3IgdGFyZ2V0IG5vZGUgb2YgdGhlIGVkZ2UuIikpfWZ1bmN0aW9uIEw4bihlKXt2YXIgdCxuLHIsYTtpZihhPWwoUShlLChmdCgpLFJMZSkpLDM2KSxhKXtmb3Iocj1uZXcgcWEsdD1lbyhlLmMuaSk7dCE9YTspbj10LmUsdD1lbyhuKSxkdyhPaShPaShyLG4ubiksdC5jKSx0LmQuYix0LmQuZCk7cmV0dXJuIHJ9cmV0dXJuIFI4dH1mdW5jdGlvbiBNOG4oZSl7dmFyIHQ7dD1sKFEoZSwoZnQoKSxoMykpLDMzNyksSXMoRGMobmV3IGJuKG51bGwsbmV3IGtuKHQuZCwxNikpLG5ldyB6WiksbmV3IHJZZShlKSksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHQuZCwxNikpLG5ldyBxWiksbmV3IHNZZShlKSl9ZnVuY3Rpb24gVHVlKGUsdCl7dmFyIG4scixhLG87Zm9yKGE9dD9xcyhlKTprYShlKSxyPW5ldyBocihkcihhLmEuS2MoKSxuZXcgaikpO2pyKHIpOylpZihuPWwoeHIociksMTgpLG89a3hlKG4sZSksby5rPT0oWm4oKSxBYSkmJm8uYyE9ZS5jKXJldHVybiBvO3JldHVybiBudWxsfWZ1bmN0aW9uIEQ4bihlKXt2YXIgdCxuLHI7Zm9yKG49bmV3IEcoZS5wKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTApLHQuaz09KFpuKCksUHMpJiYocj10Lm8uYixlLmk9Yi5NYXRoLm1pbihlLmksciksZS5nPWIuTWF0aC5tYXgoZS5nLHIpKX1mdW5jdGlvbiB3Z3QoZSx0LG4pe3ZhciByLGEsbztmb3Iobz1uZXcgRyh0KTtvLmE8by5jLmMubGVuZ3RoOylyPWwocmUobyksMTApLGUuY1tyLmMucF1bci5wXS5lPSExO2ZvcihhPW5ldyBHKHQpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMCksJGtlKGUscixuKX1mdW5jdGlvbiBDdWUoZSx0LG4pe3ZhciByLGE7cj1lNih0Lmosbi5zLG4uYykrZTYobi5lLHQucyx0LmMpLGE9ZTYobi5qLHQucyx0LmMpK2U2KHQuZSxuLnMsbi5jKSxyPT1hP3I+MCYmKGUuYis9MixlLmErPXIpOihlLmIrPTEsZS5hKz1iLk1hdGgubWluKHIsYSkpfWZ1bmN0aW9uIHlndChlKXt2YXIgdDt0PWwoUShsKGZmKGUuYiwwKSw0MCksKEhjKCksZ0llKSksMTA3KSxydChlLChRaSgpLFFUKSxuZXcgbHQoMCwwKSksaG10KG5ldyBuTixlLHQuYit0LmMtemUoR2UoUShlLEJkZSkpKSx0LmQrdC5hLXplKEdlKFEoZSxGZGUpKSkpfWZ1bmN0aW9uIHhndChlLHQpe3ZhciBuLHI7aWYocj0hMSxJYSh0KSYmKHI9ITAsSjgoZSxuZXcgeXkoZWkodCkpKSkscnx8RGUodCwyNDIpJiYocj0hMCxKOChlLChuPWc0ZShsKHQsMjQyKSksbmV3IHZrKG4pKSkpLCFyKXRocm93IHVlKG5ldyBRaWUobVNlKSl9ZnVuY3Rpb24gSThuKGUsdCxuLHIpe3ZhciBhLG8sZjtyZXR1cm4gYT1uZXcgWmcoZS5lLDEsMTAsKGY9dC5jLERlKGYsOTApP2woZiwyOSk6KFRuKCksS2YpKSwobz1uLmMsRGUobyw5MCk/bChvLDI5KTooVG4oKSxLZikpLGYyKGUsdCksITEpLHI/ci5uaihhKTpyPWEscn1mdW5jdGlvbiBFeGUoZSl7dmFyIHQsbjtzd2l0Y2gobChRKGVvKGUpLChOdCgpLGpNZSkpLDQyOSkuZyl7Y2FzZSAwOnJldHVybiB0PWUubixuPWUubyxuZXcgbHQodC5hK24uYS8yLHQuYituLmIvMik7Y2FzZSAxOnJldHVybiBuZXcgRW8oZS5uKTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBXTigpe1dOPVUsWks9bmV3IENfKElkLDApLFRMZT1uZXcgQ18oIkxFRlRVUCIsMSksU0xlPW5ldyBDXygiUklHSFRVUCIsMiksRUxlPW5ldyBDXygiTEVGVERPV04iLDMpLENMZT1uZXcgQ18oIlJJR0hURE9XTiIsNCksQjFlPW5ldyBDXygiQkFMQU5DRUQiLDUpfWZ1bmN0aW9uIE84bihlLHQsbil7dmFyIHIsYSxvO2lmKHI9WWkoZS5hW3QucF0sZS5hW24ucF0pLHI9PTApe2lmKGE9bChRKHQsKGZ0KCksV3gpKSwxNSksbz1sKFEobixXeCksMTUpLGEuSGMobikpcmV0dXJuLTE7aWYoby5IYyh0KSlyZXR1cm4gMX1yZXR1cm4gcn1mdW5jdGlvbiBOOG4oZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBuZXcgdm5lO2Nhc2UgMjpyZXR1cm4gbmV3IHduZTtjYXNlIDM6cmV0dXJuIG5ldyBtbmU7Y2FzZSAwOnJldHVybiBudWxsO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKEVmZSsoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIFR4ZShlLHQsbil7c3dpdGNoKHQpe2Nhc2UgMTohZS5uJiYoZS5uPW5ldyBudChlYyxlLDEsNykpLCRyKGUubiksIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxBcyhlLm4sbChuLDE2KSk7cmV0dXJuO2Nhc2UgMjpmRShlLGVpKG4pKTtyZXR1cm59VjdlKGUsdCxuKX1mdW5jdGlvbiBDeGUoZSx0LG4pe3N3aXRjaCh0KXtjYXNlIDM6TXcoZSx6ZShHZShuKSkpO3JldHVybjtjYXNlIDQ6RHcoZSx6ZShHZShuKSkpO3JldHVybjtjYXNlIDU6VXUoZSx6ZShHZShuKSkpO3JldHVybjtjYXNlIDY6R3UoZSx6ZShHZShuKSkpO3JldHVybn1UeGUoZSx0LG4pfWZ1bmN0aW9uIGdVKGUsdCxuKXt2YXIgcixhLG87bz0ocj1uZXcgSGllLHIpLGE9JDEobyx0LG51bGwpLGEmJmEub2ooKSxGdShvLG4pLHFyKCghZS5jJiYoZS5jPW5ldyBudChrMyxlLDEyLDEwKSksZS5jKSxvKSxpMihvLDApLE15KG8sMSksdTIobywhMCksYzIobywhMCl9ZnVuY3Rpb24gU3hlKGUsdCl7dmFyIG4scixhO3JldHVybiBuPXlfKGUuaSx0KSxEZShuLDI0MSk/KGE9bChuLDI0MSksYS56aSgpPT1udWxsLGEud2koKSk6RGUobiw1MDcpPyhyPWwobiwyMDM3KSxhPXIuYixhKTpudWxsfWZ1bmN0aW9uIFA4bihlLHQsbixyKXt2YXIgYSxvO3JldHVybiBYcih0KSxYcihuKSxvPWwoSF8oZS5kLHQpLDE3KSxXbHQoISFvLCJSb3cgJXMgbm90IGluICVzIix0LGUuZSksYT1sKEhfKGUuYixuKSwxNyksV2x0KCEhYSwiQ29sdW1uICVzIG5vdCBpbiAlcyIsbixlLmMpLHMwdChlLG8uYSxhLmEscil9ZnVuY3Rpb24ga2d0KGUsdCxuLHIsYSxvLGYpe3ZhciBnLHcsRSxDLEw7aWYoQz1hW29dLEU9bz09Zi0xLGc9RT9yOjAsTD16ZHQoZyxDKSxyIT0xMCYmaGUobGUoZSxmLW8pLHRbb10sbltvXSxnLEwpLCFFKWZvcigrK28sdz0wO3c8QzsrK3cpTFt3XT1rZ3QoZSx0LG4scixhLG8sZik7cmV0dXJuIEx9ZnVuY3Rpb24gakEoZSl7aWYoZS5nPT0tMSl0aHJvdyB1ZShuZXcgcGwpO2UuWGooKTt0cnl7ZS5pLmdkKGUuZyksZS5mPWUuaS5qLGUuZzxlLmUmJi0tZS5lLGUuZz0tMX1jYXRjaCh0KXt0aHJvdyB0PWJzKHQpLERlKHQsNzcpP3VlKG5ldyBYaCk6dWUodCl9fWZ1bmN0aW9uIEI4bihlKXt2YXIgdCxuLHIsYTtmb3IoYT0tMSxyPTAsbj1uZXcgRyhlKTtuLmE8bi5jLmMubGVuZ3RoOyl7aWYodD1sKHJlKG4pLDI0OSksdC5jPT0ocW8oKSwkbCkpe2E9cj09MD8wOnItMTticmVha31lbHNlIHI9PWUuYy5sZW5ndGgtMSYmKGE9cik7cis9MX1yZXR1cm4gYX1mdW5jdGlvbiBGOG4oZSl7dmFyIHQsbixyLGE7Zm9yKGE9MCx0PTAscj1uZXcgRyhlLmMpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyNyksVXUobixlLmUrYSksR3UobixlLmYpLGErPW4uZytlLmIsdD1iLk1hdGgubWF4KHQsbi5mK2UuYik7ZS5kPWEtZS5iLGUuYT10LWUuYn1mdW5jdGlvbiBzNihlKXt2YXIgdCxuLHI7Zm9yKG49bmV3IEcoZS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSw2MCkscj10LmQuYyx0LmQuYz10LmQuZCx0LmQuZD1yLHI9dC5kLmIsdC5kLmI9dC5kLmEsdC5kLmE9cixyPXQuYi5hLHQuYi5hPXQuYi5iLHQuYi5iPXI7VjllKGUpfWZ1bmN0aW9uIGE2KGUpe3ZhciB0LG4scjtmb3Iobj1uZXcgRyhlLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSxyPXQuZy5jLHQuZy5jPXQuZy5kLHQuZy5kPXIscj10LmcuYix0LmcuYj10LmcuYSx0LmcuYT1yLHI9dC5lLmEsdC5lLmE9dC5lLmIsdC5lLmI9cjtNVShlKX1mdW5jdGlvbiBSOG4oZSl7dmFyIHQsbixyLGEsbztmb3Iobz1XOChlLmspLG49KEN0KCksaGUobGUoT28sMSksYXUsNjQsMCxbUGMsUW4sYXIsRHIsZXJdKSkscj0wLGE9bi5sZW5ndGg7cjxhOysrcilpZih0PW5bcl0sdCE9UGMmJiFvLkhjKHQpKXJldHVybiB0O3JldHVybiBudWxsfWZ1bmN0aW9uIFN1ZShlLHQpe3ZhciBuLHI7cmV0dXJuIHI9bChSaG4oa0UoRmkobmV3IGJuKG51bGwsbmV3IGtuKHQuaiwxNikpLG5ldyBNZWUpKSksMTIpLHImJihuPWwoanQoci5lLDApLDE4KSxuKT9sKFEobiwoZnQoKSxLaSkpLDE3KS5hOld2bihlLmIpfWZ1bmN0aW9uIGo4bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPW5ldyBHKHQuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwxMCksdV8oZS5kKSxyPW5ldyBocihkcihxcyhhKS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDE4KSx3MnQoZSxhLG4uZC5pKX1mdW5jdGlvbiAkOG4oZSx0KXt2YXIgbixyO2ZvcihhbChlLmIsdCkscj1uZXcgRyhlLm4pO3IuYTxyLmMuYy5sZW5ndGg7KWlmKG49bChyZShyKSwyMDkpLGdjKG4uYyx0LDApIT0tMSl7YWwobi5jLHQpLEY4bihuKSxuLmMuYy5sZW5ndGg9PTAmJmFsKGUubixuKTticmVha31abXQoZSl9ZnVuY3Rpb24gRWd0KGUsdCl7dmFyIG4scixhLG8sZjtmb3IoZj1lLmYsYT0wLG89MCxyPW5ldyBHKGUuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE3MikscU4obixlLmUsZiksYU4obix0KSxvPWIuTWF0aC5tYXgobyxuLnIpLGYrPW4uZCtlLmMsYT1mO2UuZD1vLGUuYj1hfWZ1bmN0aW9uIFRndChlKXt2YXIgdCxuO3JldHVybiBuPXNQKGUpLFprKG4pP251bGw6KHQ9KFhyKG4pLGwoTWR0KG5ldyBocihkcihuLmEuS2MoKSxuZXcgaikpKSw3NCkpLGJjKGwoT2UoKCF0LmImJih0LmI9bmV3IExuKF9yLHQsNCw3KSksdC5iKSwwKSw4NCkpKX1mdW5jdGlvbiBwVShlKXt2YXIgdDtyZXR1cm4gZS5vfHwodD1lLnVrKCksdD9lLm89bmV3IHg1ZShlLGUsbnVsbCk6ZS5hbCgpP2Uubz1uZXcgSnllKGUsbnVsbCk6a3coaWMoKEVsKCksaW8pLGUpKT09MT9lLm89bmV3IFdjdChlKTplLm89bmV3IGxhZShlLG51bGwpKSxlLm99ZnVuY3Rpb24gejhuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7bi5YaCh0KSYmKGE9KGY9dCxmP2wociw1NCkuZ2koZik6bnVsbCksYSYmKHc9bi5NaCh0KSxnPXQudCxnPjF8fGc9PS0xPyhvPWwodywxNSksYS5XYih2NW4oZSxvKSkpOmEuV2IoY2xlKGUsbCh3LDU4KSkpKSl9ZnVuY3Rpb24gcThuKGUsdCxuLHIpe01aZSgpO3ZhciBhPW0wZTtmdW5jdGlvbiBvKCl7Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aDtmKyspYVtmXSgpfWlmKGUpdHJ5e01BdChvKSgpfWNhdGNoKGYpe2UodCxmKX1lbHNlIE1BdChvKSgpfWZ1bmN0aW9uIEg4bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihhPShvPW5ldyBicihlLmIpLmEudmMoKS5LYygpLG5ldyBNaShvKSk7YS5hLk9iKCk7KWlmKHI9KG49bChhLmEuUGIoKSw0NCksbChuLmxkKCksMzQpKSxheWUodCxsKHIsMTcpKTwwKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFY4bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihhPShvPW5ldyBicihlLmIpLmEudmMoKS5LYygpLG5ldyBNaShvKSk7YS5hLk9iKCk7KWlmKHI9KG49bChhLmEuUGIoKSw0NCksbChuLmxkKCksMzQpKSxheWUodCxsKHIsMTcpKT4wKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFU4bihlKXt2YXIgdCxuLHIsYSxvO2ZvcihyPW5ldyBxbShuZXcgU3IoZS5iKS5hKTtyLmI7KW49TncociksdD1sKG4ubGQoKSwxMCksbz1sKGwobi5tZCgpLDQyKS5hLDEwKSxhPWwobChuLm1kKCksNDIpLmIsOCksT2koWTAodC5uKSxPaShKYShvLm4pLGEpKX1mdW5jdGlvbiBHOG4oZSl7c3dpdGNoKGwoUShlLmIsKE50KCksSU1lKSksMzg3KS5nKXtjYXNlIDE6SXMoZmMoRGMobmV3IGJuKG51bGwsbmV3IGtuKGUuZCwxNikpLG5ldyBkSSksbmV3IGc1KSxuZXcgd2VlKTticmVhaztjYXNlIDI6elNuKGUpO2JyZWFrO2Nhc2UgMDp3a24oZSl9fWZ1bmN0aW9uIEs4bihlLHQsbil7dmFyIHIsYSxvO2ZvcihyPW4sIXImJihyPW5ldyBMOCksci5VZygiTGF5b3V0IixlLmEuYy5sZW5ndGgpLG89bmV3IEcoZS5hKTtvLmE8by5jLmMubGVuZ3RoOyl7aWYoYT1sKHJlKG8pLDQ3KSxyLiRnKCkpcmV0dXJuO2EuS2YodCxyLmVoKDEpKX1yLlZnKCl9ZnVuY3Rpb24gWW0oKXtZbT1VLExnZT1uZXcgQV8oIlZfVE9QIiwwKSxTTT1uZXcgQV8oIlZfQ0VOVEVSIiwxKSxDTT1uZXcgQV8oIlZfQk9UVE9NIiwyKSxBZ2U9bmV3IEFfKCJIX0xFRlQiLDMpLEVNPW5ldyBBXygiSF9DRU5URVIiLDQpLFRNPW5ldyBBXygiSF9SSUdIVCIsNSl9ZnVuY3Rpb24gX3hlKGUpe3ZhciB0O3JldHVybiBlLkRiJjY0P1VWKGUpOih0PW5ldyBBZihVVihlKSksdC5hKz0iIChhYnN0cmFjdDogIixHcCh0LChlLkJiJjI1NikhPTApLHQuYSs9IiwgaW50ZXJmYWNlOiAiLEdwKHQsKGUuQmImNTEyKSE9MCksdC5hKz0iKSIsdC5hKX1mdW5jdGlvbiBXOG4oZSl7dmFyIHQ7ZS5jPT1udWxsJiYodD1xZShlLmIpPT09cWUoVVNlKT9udWxsOmUuYixlLmQ9dD09bnVsbD91bDpUc3QodCk/TWhuKEJhdCh0KSk6SWEodCk/bkVlOl9tKGJoKHQpKSxlLmE9ZS5hKyI6ICIrKFRzdCh0KT9BZm4oQmF0KHQpKTp0KyIiKSxlLmM9IigiK2UuZCsiKSAiK2UuYSl9ZnVuY3Rpb24gWThuKCl7ZnVuY3Rpb24gZSgpe3RyeXtyZXR1cm4gbmV3IE1hcCgpLmVudHJpZXMoKS5uZXh0KCkuZG9uZX1jYXRjaHtyZXR1cm4hMX19cmV0dXJuIHR5cGVvZiBNYXA9PT1PbGUmJk1hcC5wcm90b3R5cGUuZW50cmllcyYmZSgpP01hcDpQRG4oKX1mdW5jdGlvbiBYOG4oZSx0KXt2YXIgbixyLGEsbztmb3Iobz1uZXcgVWEoZS5lLDApLG49MDtvLmI8by5kLmdjKCk7KXtpZihyPXplKChtcihvLmI8by5kLmdjKCkpLEdlKG8uZC5YYihvLmM9by5iKyspKSkpLGE9ci10LGE+d2ZlKXJldHVybiBuO2E+LTFlLTYmJisrbn1yZXR1cm4gbn1mdW5jdGlvbiBBeGUoZSx0KXt2YXIgbjt0IT1lLmI/KG49bnVsbCxlLmImJihuPUlIKGUuYixlLC00LG4pKSx0JiYobj1teCh0LGUsLTQsbikpLG49SjB0KGUsdCxuKSxuJiZuLm9qKCkpOmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMyx0LHQpKX1mdW5jdGlvbiBDZ3QoZSx0KXt2YXIgbjt0IT1lLmY/KG49bnVsbCxlLmYmJihuPUlIKGUuZixlLC0xLG4pKSx0JiYobj1teCh0LGUsLTEsbikpLG49UTB0KGUsdCxuKSxuJiZuLm9qKCkpOmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMCx0LHQpKX1mdW5jdGlvbiBROG4oZSx0LG4scil7dmFyIGEsbyxmLGc7cmV0dXJuIGhoKGUuZSkmJihhPXQuTGsoKSxnPXQubWQoKSxvPW4ubWQoKSxmPWRiKGUsMSxhLGcsbyxhLkprKCk/WEUoZSxhLG8sRGUoYSwxMDIpJiYobChhLDE5KS5CYiZJbykhPTApOi0xLCEwKSxyP3IubmooZik6cj1mKSxyfWZ1bmN0aW9uIFNndChlKXt2YXIgdCxuLHI7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZihuPWwoZSwxNSksbi5kYygpKXJldHVybiIiO2ZvcihyPW5ldyBVcCx0PW4uS2MoKTt0Lk9iKCk7KVhvKHIsKEdpKCksZWkodC5QYigpKSkpLHIuYSs9IiAiO3JldHVybiBHc2UocixyLmEubGVuZ3RoLTEpfWZ1bmN0aW9uIF9ndChlKXt2YXIgdCxuLHI7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZihuPWwoZSwxNSksbi5kYygpKXJldHVybiIiO2ZvcihyPW5ldyBVcCx0PW4uS2MoKTt0Lk9iKCk7KVhvKHIsKEdpKCksZWkodC5QYigpKSkpLHIuYSs9IiAiO3JldHVybiBHc2UocixyLmEubGVuZ3RoLTEpfWZ1bmN0aW9uIEo4bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1lLmNbdC5jLnBdW3QucF0sYT1lLmNbbi5jLnBdW24ucF0sci5hIT1udWxsJiZhLmEhPW51bGw/TmFlKHIuYSxhLmEpOnIuYSE9bnVsbD8tMTphLmEhPW51bGw/MTowfWZ1bmN0aW9uIFo4bihlLHQsbil7cmV0dXJuIG4uVWcoIlRyZWUgbGF5b3V0IiwxKSxxTyhlLmIpLFgwKGUuYiwod3goKSxOVyksTlcpLFgwKGUuYixsTSxsTSksWDAoZS5iLGhNLGhNKSxYMChlLmIsZk0sZk0pLGUuYT1iUChlLmIsdCksSzhuKGUsdCxuLmVoKDEpKSxuLlZnKCksdH1mdW5jdGlvbiBleG4oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodClmb3Iobz10LmEubGVuZ3RoLG49bmV3IERtKG8pLGc9KG4uYi1uLmEpKm4uYzwwPyhzYigpLHRtKTpuZXcgY2Iobik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSxhPUprKHQsZi5hKSxyPW5ldyBHWGUoZSksY3BuKHIuYSxhKX1mdW5jdGlvbiB0eG4oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodClmb3Iobz10LmEubGVuZ3RoLG49bmV3IERtKG8pLGc9KG4uYi1uLmEpKm4uYzwwPyhzYigpLHRtKTpuZXcgY2Iobik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSxhPUprKHQsZi5hKSxyPW5ldyBGWGUoZSksb3BuKHIuYSxhKX1mdW5jdGlvbiBueG4oZSl7dmFyIHQ7aWYoZSE9bnVsbCYmZS5sZW5ndGg+MCYmY28oZSxlLmxlbmd0aC0xKT09MzMpdHJ5e3JldHVybiB0PVAydCh0ZihlLDAsZS5sZW5ndGgtMSkpLHQuZT09bnVsbH1jYXRjaChuKXtpZihuPWJzKG4pLCFEZShuLDMzKSl0aHJvdyB1ZShuKX1yZXR1cm4hMX1mdW5jdGlvbiByeG4oZSx0LG4pe3ZhciByLGEsbztzd2l0Y2gocj1lbyh0KSxhPXpWKHIpLG89bmV3IGd1LE1jKG8sdCksbi5nKXtjYXNlIDE6bGEobyxCTihneChhKSkpO2JyZWFrO2Nhc2UgMjpsYShvLGd4KGEpKX1yZXR1cm4gcnQobywoTnQoKSxtNCksR2UoUShlLG00KSkpLG99ZnVuY3Rpb24gTHhlKGUpe3ZhciB0LG47cmV0dXJuIHQ9bCh4cihuZXcgaHIoZHIoa2EoZS5hKS5hLktjKCksbmV3IGopKSksMTgpLG49bCh4cihuZXcgaHIoZHIocXMoZS5hKS5hLktjKCksbmV3IGopKSksMTgpLFJ0KEJ0KFEodCwoZnQoKSxXMSkpKSl8fFJ0KEJ0KFEobixXMSkpKX1mdW5jdGlvbiBSeSgpe1J5PVUsYkI9bmV3IGNPKCJPTkVfU0lERSIsMCksS0s9bmV3IGNPKCJUV09fU0lERVNfQ09STkVSIiwxKSxXSz1uZXcgY08oIlRXT19TSURFU19PUFBPU0lORyIsMiksR0s9bmV3IGNPKCJUSFJFRV9TSURFUyIsMyksVUs9bmV3IGNPKCJGT1VSX1NJREVTIiw0KX1mdW5jdGlvbiBBZ3QoZSx0KXt2YXIgbixyLGEsbztmb3Iobz1uZXcgYnQsYT0wLHI9dC5LYygpO3IuT2IoKTspe2ZvcihuPXB0KGwoci5QYigpLDE3KS5hK2EpO24uYTxlLmYmJiFLZG4oZSxuLmEpOyluPXB0KG4uYSsxKSwrK2E7aWYobi5hPj1lLmYpYnJlYWs7JG4oby5jLG4pfXJldHVybiBvfWZ1bmN0aW9uIGl4bihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKG89bmV3IEcodC5hKTtvLmE8by5jLmMubGVuZ3RoOylmb3IoYT1sKHJlKG8pLDEwKSxyPW5ldyBocihkcihrYShhKS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDE4KSxmPW4uYy5pLnAsZS5uW2ZdPWUubltmXS0xfWZ1bmN0aW9uIHN4bihlKXt2YXIgdCxuO2ZvcihuPW5ldyBHKGUuZS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMzApLGVEbihlLHQpO0lzKEZpKERjKERjKG5ldyBibihudWxsLG5ldyBrbihlLmUuYiwxNikpLG5ldyBydGUpLG5ldyBvdGUpLG5ldyBjdGUpLG5ldyByWGUoZSkpfWZ1bmN0aW9uIE14ZShlLHQpe3JldHVybiB0P2UubWoodCk/ITE6ZS5pP2UuaS5uaih0KTpEZSh0LDE1Mik/KGUuaT1sKHQsMTUyKSwhMCk6KGUuaT1uZXcgQyQsZS5pLm5qKHQpKTohMX1mdW5jdGlvbiBMZ3QoZSx0LG4pe3ZhciByLGEsbztyZXR1cm4gcj10LkxrKCksbz10Lm1kKCksYT1yLkprKCk/ZGIoZSwzLHIsbnVsbCxvLFhFKGUscixvLERlKHIsMTAyKSYmKGwociwxOSkuQmImSW8pIT0wKSwhMCk6ZGIoZSwxLHIsci5paygpLG8sLTEsITApLG4/bi5uaihhKTpuPWEsbn1mdW5jdGlvbiBheG4oZSl7aWYoZT1UdShlLCEwKSx2bih3VCxlKXx8dm4oIjEiLGUpKXJldHVybiBIbigpLFNUO2lmKHZuKEZmZSxlKXx8dm4oIjAiLGUpKXJldHVybiBIbigpLFBiO3Rocm93IHVlKG5ldyBKaWUoIkludmFsaWQgYm9vbGVhbiB2YWx1ZTogJyIrZSsiJyIpKX1mdW5jdGlvbiBEeGUoZSx0LG4pe3ZhciByLGEsbztmb3IoYT1lLnZjKCkuS2MoKTthLk9iKCk7KWlmKHI9bChhLlBiKCksNDQpLG89ci5sZCgpLHFlKHQpPT09cWUobyl8fHQhPW51bGwmJlBpKHQsbykpcmV0dXJuIG4mJihyPW5ldyBjcShyLmxkKCksci5tZCgpKSxhLlFiKCkpLHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gb3huKGUpe3B5KCk7dmFyIHQsbixyO2UuQi5IYygoWmwoKSx1WSkpJiYocj1lLmYuaSx0PW5ldyBNSChlLmEuYyksbj1uZXcgQTgsbi5iPXQuYy1yLmMsbi5kPXQuZC1yLmQsbi5jPXIuYytyLmItKHQuYyt0LmIpLG4uYT1yLmQrci5hLSh0LmQrdC5hKSxlLmUuJGYobikpfWZ1bmN0aW9uIE1ndChlLHQsbixyKXt2YXIgYSxvLGY7Zm9yKGY9Yi5NYXRoLm1pbihuLHptdChsKGUuYiw2OCksdCxuLHIpKSxvPW5ldyBHKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDIyNSksYSE9dCYmKGY9Yi5NYXRoLm1pbihmLE1ndChhLHQsZixyKSkpO3JldHVybiBmfWZ1bmN0aW9uIEl4ZShlKXt2YXIgdCxuLHIsYTtmb3IoYT1XZSh3ZyxkdCwxOTksZS5iLmMubGVuZ3RoLDAsMikscj1uZXcgVWEoZS5iLDApO3IuYjxyLmQuZ2MoKTspdD0obXIoci5iPHIuZC5nYygpKSxsKHIuZC5YYihyLmM9ci5iKyspLDMwKSksbj1yLmItMSxhW25dPUpPKHQuYSk7cmV0dXJuIGF9ZnVuY3Rpb24gT3hlKGUsdCxuKXt2YXIgcixhLG87cj1sKEIxKGUuYSxuKSwzNCksciE9bnVsbCYmKG89bChCMShlLmIsciksNjcpLE55KG8sbiwhMCkpLGE9bChCMShlLmIsdCksNjcpLGF8fChhPW5ldyBvcyxoMihlLmIsdCxhKSksQ3MoYSxuLGEuYy5iLGEuYyksaDIoZS5hLG4sdCl9ZnVuY3Rpb24gX3VlKGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7Zm9yKGY9Q3VuKGkzZSh5NGUoSTZuKG4pKSxyKSxIN24oZSxuLGEpKSx3PWQyKGUsbikuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLHRbZy5wXSYmKG89dFtnLnBdLmksdnQoZi5kLG5ldyBEYWUobyxoOGUoZixvKSkpKTtNOGUoZil9ZnVuY3Rpb24gTnhlKGUsdCl7dGhpcy5mPW5ldyBQcix0aGlzLmI9bmV3IFByLHRoaXMuaj1uZXcgUHIsdGhpcy5hPWUsdGhpcy5jPXQsdGhpcy5jPjAmJkpkdCh0aGlzLHRoaXMuYy0xLChDdCgpLGFyKSksdGhpcy5jPHRoaXMuYS5sZW5ndGgtMSYmSmR0KHRoaXMsdGhpcy5jKzEsKEN0KCksZXIpKX1mdW5jdGlvbiBjeG4oZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihvPW5ldyBHKHQuZCk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwxMDUpLGY9bChjcihlLmMsYSksMTE4KS5vLHI9bmV3IFA4KGEuYik7ci5hPHIuYy5hLmxlbmd0aDspbj1sKGNBKHIpLDY0KSxCNmUoYSxuLGYpfWZ1bmN0aW9uIFB4ZShlKXtlLmxlbmd0aD4wJiZlWzBdLmxlbmd0aD4wJiYodGhpcy5jPVJ0KEJ0KFEoZW8oZVswXVswXSksKGZ0KCksekxlKSkpKSksdGhpcy5hPVdlKGtFdCxkdCwyMTE3LGUubGVuZ3RoLDAsMiksdGhpcy5iPVdlKEVFdCxkdCwyMTE4LGUubGVuZ3RoLDAsMiksdGhpcy5kPW5ldyBHMHR9ZnVuY3Rpb24gdXhuKGUpe3JldHVybiBlLmMubGVuZ3RoPT0wPyExOihTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDE4KSkuYy5pLms9PShabigpLEFhKT8hMDpXNShmYyhuZXcgYm4obnVsbCxuZXcga24oZSwxNikpLG5ldyBXZWUpLG5ldyBZZWUpfWZ1bmN0aW9uIERndChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihnPUh5KHQpLG89dC5mLHc9dC5nLGY9Yi5NYXRoLnNxcnQobypvK3cqdyksYT0wLHI9bmV3IEcoZyk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDI3KSxhKz1EZ3QoZSxuKTtyZXR1cm4gYi5NYXRoLm1heChhLGYpfWZ1bmN0aW9uIFJhKCl7UmE9VSxXYj1uZXcgTV8oY0wsMCksWjE9bmV3IE1fKCJGUkVFIiwxKSxzQz1uZXcgTV8oIkZJWEVEX1NJREUiLDIpLFR2PW5ldyBNXygiRklYRURfT1JERVIiLDMpLFRnPW5ldyBNXygiRklYRURfUkFUSU8iLDQpLE11PW5ldyBNXygiRklYRURfUE9TIiw1KX1mdW5jdGlvbiBseG4oZSx0KXt2YXIgbixyLGE7aWYobj10LnFpKGUuYSksbil7Zm9yKGE9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSxSZikpLHI9MTtyPChFbCgpLHFQZSkubGVuZ3RoOysrcilpZih2bihxUGVbcl0sYSkpcmV0dXJuIHJ9cmV0dXJuIDB9ZnVuY3Rpb24gaHhuKGUpe3ZhciB0LG4scixhLG87aWYoZT09bnVsbClyZXR1cm4gdWw7Zm9yKG89bmV3IEhtKENvLCJbIiwiXSIpLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxKZyhvLCIiK3QpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gZnhuKGUpe3ZhciB0LG4scixhLG87aWYoZT09bnVsbClyZXR1cm4gdWw7Zm9yKG89bmV3IEhtKENvLCJbIiwiXSIpLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxKZyhvLCIiK3QpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gSWd0KGUpe3ZhciB0LG4scjtmb3Iocj1uZXcgSG0oQ28sInsiLCJ9Iiksbj1lLnZjKCkuS2MoKTtuLk9iKCk7KXQ9bChuLlBiKCksNDQpLEpnKHIsamN0KGUsdC5sZCgpKSsiPSIramN0KGUsdC5tZCgpKSk7cmV0dXJuIHIuYT9yLmUubGVuZ3RoPT0wP3IuYS5hOnIuYS5hKygiIityLmUpOnIuY31mdW5jdGlvbiBkeG4oZSl7Zm9yKHZhciB0LG4scixhOyFsXyhlLm8pOyluPWwoWDgoZS5vKSw0Mikscj1sKG4uYSwxMjUpLHQ9bChuLmIsMjE4KSxhPUhWKHQsciksdC5lPT1yPygkcShhLmcsdCksci5lPWEuZSt0LmEpOigkcShhLmIsdCksci5lPWEuZS10LmEpLHZ0KGUuZS5hLHIpfWZ1bmN0aW9uIEJ4ZShlLHQpe3ZhciBuLHIsYTtmb3Iobj1udWxsLGE9bCh0LktiKGUpLDIwKS5LYygpO2EuT2IoKTspaWYocj1sKGEuUGIoKSwxOCksIW4pbj1yLmMuaT09ZT9yLmQuaTpyLmMuaTtlbHNlIGlmKChyLmMuaT09ZT9yLmQuaTpyLmMuaSkhPW4pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gT2d0KGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobj1YMnQoZSwhMSx0KSxhPW5ldyBHKG4pO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMzIpLHIuZD09MD8oZG9lKHIsbnVsbCksZ29lKHIsbnVsbCkpOihvPXIuYSxmPXIuYixkb2UocixmKSxnb2UocixvKSl9ZnVuY3Rpb24gZ3huKGUpe3ZhciB0LG47cmV0dXJuIHQ9bmV3IFhzLERoKHQsclR0KSxuPWwoUShlLChmdCgpLEx1KSksMjEpLG4uSGMoKEhvKCksR0wpKSYmRGgodCxvVHQpLG4uSGMoUlQpJiZEaCh0LGlUdCksbi5IYyhCNikmJkRoKHQsYVR0KSxuLkhjKGpUKSYmRGgodCxzVHQpLHR9ZnVuY3Rpb24gRnhlKGUsdCxuKXt2YXIgcixhLG8sZixnO2ZvcihsNW4oZSksYT0oZS5rPT1udWxsJiYoZS5rPVdlKFQwZSxkdCw4MiwwLDAsMSkpLGUuayksbz0wLGY9YS5sZW5ndGg7bzxmOysrbylyPWFbb10sRnhlKHIpO2c9ZS5mLGcmJkZ4ZShnKX1mdW5jdGlvbiBweG4oZSl7dmFyIHQsbixyLGE7Zm9yKG5NbihlKSxuPW5ldyBocihkcihzcChlKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDE4KSxyPXQuYy5pPT1lLGE9cj90LmQ6dC5jLHI/RmEodCxudWxsKTpwbyh0LG51bGwpLHJ0KHQsKGZ0KCksVUxlKSxhKSxMRW4oZSxhLmkpfWZ1bmN0aW9uIGJ4bihlLHQsbixyKXt2YXIgYSxvO3N3aXRjaChvPXQuaSxhPW5bby5nXVtlLmRbby5nXV0sby5nKXtjYXNlIDE6YS09cit0LmouYix0LmcuYj1hO2JyZWFrO2Nhc2UgMzphKz1yLHQuZy5iPWE7YnJlYWs7Y2FzZSA0OmEtPXIrdC5qLmEsdC5nLmE9YTticmVhaztjYXNlIDI6YSs9cix0LmcuYT1hfX1mdW5jdGlvbiBteG4oZSl7dmFyIHQsbixyO2ZvcihuPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO24uZSE9bi5pLmdjKCk7KWlmKHQ9bChncihuKSwyNykscj1zUCh0KSwhanIobmV3IGhyKGRyKHIuYS5LYygpLG5ldyBqKSkpKXJldHVybiB0O3JldHVybiBudWxsfWZ1bmN0aW9uIGJVKCl7YlU9VSxZZGU9bmV3IGRPKCJPVkVSTEFQX1JFTU9WQUwiLDApLEdkZT1uZXcgZE8odnl0LDEpLFhkZT1uZXcgZE8oIlJPVEFUSU9OIiwyKSxLZGU9bmV3IGRPKCJHUkFQSF9TSVpFX0NBTENVTEFUSU9OIiwzKSxXZGU9bmV3IGRPKCJPVVRHT0lOR19FREdFX0FOR0xFUyIsNCl9ZnVuY3Rpb24gdnhuKCl7dmFyIGU7cmV0dXJuIF9fdD9sKFZFKChpYigpLEdmKSx4VCksMjExNSk6KGU9bChEZSh4dSgoaWIoKSxHZikseFQpLDU2OSk/eHUoR2YseFQpOm5ldyBrMnQsNTY5KSxfX3Q9ITAsJE1uKGUpLHJPbihlKSx5dWUoZSkscmMoR2YseFQsZSksZSl9ZnVuY3Rpb24gQXVlKGUsdCxuKXt2YXIgcixhO2lmKGUuaj09MClyZXR1cm4gbjtpZihhPWwoSGh0KGUsdCxuKSw3Nikscj1uLkxrKCksIXIucmsoKXx8IWUuYS5hbShyKSl0aHJvdyB1ZShuZXcgQWMoIkludmFsaWQgZW50cnkgZmVhdHVyZSAnIityLnFrKCkuemIrIi4iK3IueGUoKSsiJyIpKTtyZXR1cm4gYX1mdW5jdGlvbiB3eG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihnPWUuYSx3PTAsRT1nLmxlbmd0aDt3PEU7Kyt3KWZvcihmPWdbd10scj1mLGE9MCxvPXIubGVuZ3RoO2E8bzsrK2EpaWYobj1yW2FdLHFlKHQpPT09cWUobil8fHQhPW51bGwmJlBpKHQsbikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geXhuKGUpe3ZhciB0LG4scjtyZXR1cm4gaXUoZSwwKT49MD8obj1LTihlLEpVKSxyPVJOKGUsSlUpKToodD11YihlLDEpLG49S04odCw1ZTgpLHI9Uk4odCw1ZTgpLHI9Ym8obDAociwxKSx2YShlLDEpKSksUTAobDAociwzMiksdmEobixWbykpfWZ1bmN0aW9uIE5ndChlLHQsbil7dmFyIHIsYTtzd2l0Y2gocj0obXIodC5iIT0wKSxsKGFmKHQsdC5hLmEpLDgpKSxuLmcpe2Nhc2UgMDpyLmI9MDticmVhaztjYXNlIDI6ci5iPWUuZjticmVhaztjYXNlIDM6ci5hPTA7YnJlYWs7ZGVmYXVsdDpyLmE9ZS5nfXJldHVybiBhPVJyKHQsMCksek8oYSxyKSx0fWZ1bmN0aW9uIFBndChlLHQsbixyKXt2YXIgYSxvLGYsZyx3O3N3aXRjaCh3PWUuYixvPXQuZCxmPW8uaixnPUc4ZShmLHcuZFtmLmddLG4pLGE9T2koSmEoby5uKSxvLmEpLG8uai5nKXtjYXNlIDE6Y2FzZSAzOmcuYSs9YS5hO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6Zy5iKz1hLmJ9Q3MocixnLHIuYy5iLHIuYyl9ZnVuY3Rpb24geHhuKGUsdCxuKXt2YXIgcixhLG8sZjtmb3IoZj1nYyhlLmUsdCwwKSxvPW5ldyBQd2Usby5iPW4scj1uZXcgVWEoZS5lLGYpO3IuYjxyLmQuZ2MoKTspYT0obXIoci5iPHIuZC5nYygpKSxsKHIuZC5YYihyLmM9ci5iKyspLDEwKSksYS5wPW4sdnQoby5lLGEpLHBoKHIpO3JldHVybiBvfWZ1bmN0aW9uIGt4bihlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2ZvcihhPW51bGwsbz0wLGc9bmV3IEcodCk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDI3KSx3PWYuaStmLmcsZTxmLmorZi5mK3ImJihhP24uaS13PG4uaS1vJiYoYT1mKTphPWYsbz1hLmkrYS5nKTtyZXR1cm4gYT9vK3I6MH1mdW5jdGlvbiBFeG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdztmb3Iobz1udWxsLGE9MCxnPW5ldyBHKHQpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwyNyksdz1mLmorZi5mLGU8Zi5pK2YuZytyJiYobz9uLmotdzxuLmotYSYmKG89Zik6bz1mLGE9by5qK28uZik7cmV0dXJuIG8/YStyOjB9ZnVuY3Rpb24gVHhuKGUpe3ZhciB0LG4scjtmb3IodD0hMSxyPWUuYi5jLmxlbmd0aCxuPTA7bjxyO24rKyl6N2UobChqdChlLmIsbiksNDQzKSk/IXQmJm4rMTxyJiZ6N2UobChqdChlLmIsbisxKSw0NDMpKSYmKHQ9ITAsbChqdChlLmIsbiksNDQzKS5hPSEwKTp0PSExfWZ1bmN0aW9uIEN4bihlLHQsbixyLGEpe3ZhciBvLGY7Zm9yKG89MCxmPTA7ZjxhO2YrKylvPWJvKG8sRGYodmEodFtmXSxWbyksdmEocltmXSxWbykpKSxlW2ZdPVlyKG8pLG89YncobywzMik7Zm9yKDtmPG47ZisrKW89Ym8obyx2YSh0W2ZdLFZvKSksZVtmXT1ZcihvKSxvPWJ3KG8sMzIpfWZ1bmN0aW9uIFN4bihlLHQpe0dFKCk7dmFyIG4scjtmb3Iocj0oQ2QoKSx1Syksbj1lO3Q+MTt0Pj49MSl0JjEmJihyPUs1KHIsbikpLG4uZD09MT9uPUs1KG4sbik6bj1uZXcgUTF0KG1tdChuLmEsbi5kLFdlKFZyLGRpLDI4LG4uZDw8MSwxNSwxKSkpO3JldHVybiByPUs1KHIsbikscn1mdW5jdGlvbiBSeGUoKXtSeGU9VTt2YXIgZSx0LG4scjtmb3IobV9lPVdlKE5hLFpvLDI4LDI1LDE1LDEpLHZfZT1XZShOYSxabywyOCwzMywxNSwxKSxyPTE1MjU4Nzg5MDYyNWUtMTYsdD0zMjt0Pj0wO3QtLSl2X2VbdF09cixyKj0uNTtmb3Iobj0xLGU9MjQ7ZT49MDtlLS0pbV9lW2VdPW4sbio9LjV9ZnVuY3Rpb24gX3huKGUpe3ZhciB0LG47aWYoUnQoQnQoYXQoZSwoTnQoKSxiNCkpKSkpe2ZvcihuPW5ldyBocihkcihjcChlKS5hLktjKCksbmV3IGopKTtqcihuKTspaWYodD1sKHhyKG4pLDc0KSxxdyh0KSYmUnQoQnQoYXQodCxndikpKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBCZ3QoZSx0KXt2YXIgbixyLGE7bmEoZS5mLHQpJiYodC5iPWUscj10LmMsZ2MoZS5qLHIsMCkhPS0xfHx2dChlLmosciksYT10LmQsZ2MoZS5qLGEsMCkhPS0xfHx2dChlLmosYSksbj10LmEuYixuLmMubGVuZ3RoIT0wJiYoIWUuaSYmKGUuaT1uZXcgcmR0KGUpKSxJM24oZS5pLG4pKSl9ZnVuY3Rpb24gQXhuKGUpe3ZhciB0LG4scixhLG87cmV0dXJuIG49ZS5jLmQscj1uLmosYT1lLmQuZCxvPWEuaixyPT1vP24ucDxhLnA/MDoxOiRWKHIpPT1vPzA6ZjhlKHIpPT1vPzE6KHQ9ZS5iLHZsKHQuYiwkVihyKSk/MDoxKX1mdW5jdGlvbiBYbShlKXt2YXIgdDt0aGlzLmQ9bmV3IFByLHRoaXMuYz1lLmMsdGhpcy5lPWUuZCx0aGlzLmI9ZS5iLHRoaXMuZj1uZXcgbHN0KGUuZSksdGhpcy5hPWUuYSxlLmY/dGhpcy5nPWUuZjp0aGlzLmc9KHQ9bChLMCh4WSksOSksbmV3IFpoKHQsbChjMCh0LHQubGVuZ3RoKSw5KSwwKSl9ZnVuY3Rpb24gbVUoZSx0KXt2YXIgbixyLGEsbyxmLGc7YT1lLGY9YUEoYSwibGF5b3V0T3B0aW9ucyIpLCFmJiYoZj1hQShhLHA0dCkpLGYmJihnPWYscj1udWxsLGcmJihyPShvPWFjZShnLFdlKHp0LGR0LDIsMCw2LDEpKSxuZXcgYXNlKGcsbykpKSxyJiYobj1uZXcgRXR0KGcsdCksdG8ocixuKSkpfWZ1bmN0aW9uIGJjKGUpe2lmKERlKGUsMjA3KSlyZXR1cm4gbChlLDI3KTtpZihEZShlLDE5MykpcmV0dXJuIE0xKGwoZSwxMjMpKTt0aHJvdyB1ZShlP25ldyBIcCgiT25seSBzdXBwb3J0IG5vZGVzIGFuZCBwb3J0cy4iKTpuZXcgRDgoVDR0KSl9ZnVuY3Rpb24gTHhuKGUsdCxuLHIpe3JldHVybih0Pj0wJiZ2bihlLnN1YnN0cih0LDMpLCJHTVQiKXx8dD49MCYmdm4oZS5zdWJzdHIodCwzKSwiVVRDIikpJiYoblswXT10KzMpLG1rZShlLG4scil9ZnVuY3Rpb24gTXhuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobz1lLmcuYSxmPWUuZy5iLHI9bmV3IEcoZS5kKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNzIpLGE9bi5uLGEuYT1vLGUuaT09KEN0KCksUW4pP2EuYj1mK2Uuai5iLW4uby5iOmEuYj1mLE9pKGEsdCksbys9bi5vLmErZS5lfWZ1bmN0aW9uIEZndChlLHQsbil7aWYoZS5iKXRocm93IHVlKG5ldyBuYygiVGhlIHRhc2sgaXMgYWxyZWFkeSBkb25lLiIpKTtyZXR1cm4gZS5wIT1udWxsPyExOihlLnA9dCxlLnI9bixlLmsmJihlLm89KFZnKCksbW8oWmMoRGF0ZS5ub3coKSksYjIpKSksITApfWZ1bmN0aW9uIGp4ZShlKXt2YXIgdCxuLHIsYSxvLGYsZztyZXR1cm4gZz1uZXcgTTgsbj1lLlBnKCksYT1uIT1udWxsLGEmJnprKGcsUGQsZS5QZygpKSxyPWUueGUoKSxvPXIhPW51bGwsbyYmemsoZyxfaSxlLnhlKCkpLHQ9ZS5PZygpLGY9dCE9bnVsbCxmJiZ6ayhnLCJkZXNjcmlwdGlvbiIsZS5PZygpKSxnfWZ1bmN0aW9uIFJndChlLHQsbil7dmFyIHIsYSxvO3JldHVybiBvPWUucSxlLnE9dCxlLkRiJjQmJiEoZS5EYiYxKSYmKGE9bmV3IF9hKGUsMSw5LG8sdCksbj9uLm5qKGEpOm49YSksdD8ocj10LmMsciE9ZS5yJiYobj1lLllrKHIsbikpKTplLnImJihuPWUuWWsobnVsbCxuKSksbn1mdW5jdGlvbiBEeG4oZSx0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKG49KGc9dCxteChnLGUuZSwtMS1lLmMsbikpLGY9QzVlKGUuYSksbz0ocj1uZXcgcW0obmV3IFNyKGYuYSkuYSksbmV3IEJ6KHIpKTtvLmEuYjspYT1sKE53KG8uYSkubGQoKSw4OSksbj1aRShhLFNVKGEsZS5hKSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBJeG4oZSx0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKG49KGc9dCxJSChnLGUuZSwtMS1lLmMsbikpLGY9QzVlKGUuYSksbz0ocj1uZXcgcW0obmV3IFNyKGYuYSkuYSksbmV3IEJ6KHIpKTtvLmEuYjspYT1sKE53KG8uYSkubGQoKSw4OSksbj1aRShhLFNVKGEsZS5hKSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBPeG4oZSx0LG4scil7dmFyIGEsbyxmO2lmKHI9PTApcHUodCwwLGUsbixlLmxlbmd0aC1uKTtlbHNlIGZvcihmPTMyLXIsZVtlLmxlbmd0aC0xXT0wLG89ZS5sZW5ndGgtMTtvPm47by0tKWVbb118PXRbby1uLTFdPj4+ZixlW28tMV09dFtvLW4tMV08PHI7Zm9yKGE9MDthPG47YSsrKWVbYV09MH1mdW5jdGlvbiBOeG4oZSl7dmFyIHQsbixyLGEsbztmb3IodD0wLG49MCxvPWUuS2MoKTtvLk9iKCk7KXI9bChvLlBiKCksMTE3KSx0PWIuTWF0aC5tYXgodCxyLmQuYiksbj1iLk1hdGgubWF4KG4sci5kLmMpO2ZvcihhPWUuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTE3KSxyLmQuYj10LHIuZC5jPW59ZnVuY3Rpb24gUHhuKGUpe3ZhciB0LG4scixhLG87Zm9yKG49MCx0PTAsbz1lLktjKCk7by5PYigpOylyPWwoby5QYigpLDExNyksbj1iLk1hdGgubWF4KG4sci5kLmQpLHQ9Yi5NYXRoLm1heCh0LHIuZC5hKTtmb3IoYT1lLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDExNyksci5kLmQ9bixyLmQuYT10fWZ1bmN0aW9uIEx1ZShlLHQsbixyLGEpe3ZhciBvLGY7bz1sKHljKEZpKHQuT2MoKSxuZXcgamopLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxKTihvKSxmPWwoem0oZS5iLG4sciksMTUpLGE9PTA/Zi5jZCgwLG8pOmYuR2Mobyl9ZnVuY3Rpb24gQnhuKGUsdCxuKXtuLlVnKCJHcm93IFRyZWUiLDEpLGUuYj10LmYsUnQoQnQoUSh0LChwRSgpLGpMKSkpKT8oZS5jPW5ldyBPdCxEb3QoZSxudWxsKSk6ZS5jPW5ldyBPdCxlLmE9ITEsc2J0KGUsdC5mKSxydCh0LFZfZSwoSG4oKSwhIWUuYSkpLG4uVmcoKX1mdW5jdGlvbiAkeGUoZSl7dmFyIHQsbixyLGE7Zm9yKHQ9bnVsbCxhPW5ldyBHKGUuUmYoKSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4Nyksbj1uZXcgZWYoci5MZigpLmEsci5MZigpLmIsci5NZigpLmEsci5NZigpLmIpLHQ/JEEodCxuKTp0PW47cmV0dXJuIXQmJih0PW5ldyAkOCksdH1mdW5jdGlvbiBNdWUoZSx0LG4scil7dmFyIGEsbztyZXR1cm4gbj09MT8oIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxSdShlLm4sdCxyKSk6KG89bChNbigoYT1sKEtuKGUsMTYpLDI5KSxhfHxlLmlpKCkpLG4pLDY5KSxvLndrKCkuemsoZSxLdShlKSxuLXlyKGUuaWkoKSksdCxyKSl9ZnVuY3Rpb24gRHVlKGUsdCxuKXt2YXIgcixhLG8sZixnO2ZvcihyPW4uZ2MoKSxlLl9pKGUuaStyKSxnPWUuaS10LGc+MCYmcHUoZS5nLHQsZS5nLHQrcixnKSxmPW4uS2MoKSxlLmkrPXIsYT0wO2E8cjsrK2Epbz1mLlBiKCksUl8oZSx0LGUuWmkodCxvKSksZS5NaSh0LG8pLGUuTmkoKSwrK3Q7cmV0dXJuIHIhPTB9ZnVuY3Rpb24gJDEoZSx0LG4pe3ZhciByO3JldHVybiB0IT1lLnE/KGUucSYmKG49SUgoZS5xLGUsLTEwLG4pKSx0JiYobj1teCh0LGUsLTEwLG4pKSxuPVJndChlLHQsbikpOmUuRGImNCYmIShlLkRiJjEpJiYocj1uZXcgX2EoZSwxLDksdCx0KSxuP24ubmoocik6bj1yKSxufWZ1bmN0aW9uIEl1ZShlLHQsbixyKXtyZXR1cm4gYjRlKChuJl9kKT09MCwiZmxhdE1hcCBkb2VzIG5vdCBzdXBwb3J0IFNVQlNJWkVEIGNoYXJhY3RlcmlzdGljIiksYjRlKChuJjQpPT0wLCJmbGF0TWFwIGRvZXMgbm90IHN1cHBvcnQgU09SVEVEIGNoYXJhY3RlcmlzdGljIiksWHIoZSksWHIodCksbmV3IENjdChlLHQsbixyKX1mdW5jdGlvbiBGeG4oZSx0KXtkNWUodCwiQ2Fubm90IHN1cHByZXNzIGEgbnVsbCBleGNlcHRpb24uIiksQk8odCE9ZSwiRXhjZXB0aW9uIGNhbiBub3Qgc3VwcHJlc3MgaXRzZWxmLiIpLCFlLmkmJihlLms9PW51bGw/ZS5rPWhlKGxlKFQwZSwxKSxkdCw4MiwwLFt0XSk6ZS5rW2Uuay5sZW5ndGhdPXQpfWZ1bmN0aW9uIFJ4bihlLHQpe3ZhciBuO2lmKG49dG50KGUuYi5hZygpLHQuYi5hZygpKSxuIT0wKXJldHVybiBuO3N3aXRjaChlLmIuYWcoKS5nKXtjYXNlIDE6Y2FzZSAyOnJldHVybiBydShlLmIuTmYoKSx0LmIuTmYoKSk7Y2FzZSAzOmNhc2UgNDpyZXR1cm4gcnUodC5iLk5mKCksZS5iLk5mKCkpfXJldHVybiAwfWZ1bmN0aW9uIGp4bihlKXt2YXIgdCxuLHI7Zm9yKHI9ZS5lLmMubGVuZ3RoLGUuYT1MbShWcixbZHQsZGldLFs1MywyOF0sMTUsW3Iscl0sMiksbj1uZXcgRyhlLmMpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyOTApLGUuYVt0LmMuYV1bdC5kLmFdKz1sKFEodCwoYjAoKSxxeCkpLDE3KS5hfWZ1bmN0aW9uICR4bihlLHQpe3ZhciBuLHIsYSxvLGY7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtmb3IoZj1XZShrZixBZCwyOCwyKnQsMTUsMSkscj0wLGE9MDtyPHQ7KytyKW49ZVtyXT4+NCYxNSxvPWVbcl0mMTUsZlthKytdPWJQZVtuXSxmW2ErK109YlBlW29dO3JldHVybiBJZihmLDAsZi5sZW5ndGgpfWZ1bmN0aW9uIGNsKGUpe3ZhciB0LG47cmV0dXJuIGU+PUlvPyh0PUFQKyhlLUlvPj4xMCYxMDIzKSZacyxuPTU2MzIwKyhlLUlvJjEwMjMpJlpzLFN0cmluZy5mcm9tQ2hhckNvZGUodCkrKCIiK1N0cmluZy5mcm9tQ2hhckNvZGUobikpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKGUmWnMpfWZ1bmN0aW9uIHp4bihlLHQpe3B5KCk7dmFyIG4scixhLG87cmV0dXJuIGE9bChsKCRpKGUucix0KSwyMSksODcpLGEuZ2MoKT49Mj8ocj1sKGEuS2MoKS5QYigpLDExNyksbj1lLnUuSGMoKFJsKCksUE0pKSxvPWUudS5IYyhhOSksIXIuYSYmIW4mJihhLmdjKCk9PTJ8fG8pKTohMX1mdW5jdGlvbiBqZ3QoZSx0LG4scixhKXt2YXIgbyxmLGc7Zm9yKG89VGJ0KGUsdCxuLHIsYSksZz0hMTshbzspVFUoZSxhLCEwKSxnPSEwLG89VGJ0KGUsdCxuLHIsYSk7ZyYmVFUoZSxhLCExKSxmPWJjZShhKSxmLmMubGVuZ3RoIT0wJiYoZS5kJiZlLmQuR2coZiksamd0KGUsYSxuLHIsZikpfWZ1bmN0aW9uIHZVKCl7dlU9VSxVZ2U9bmV3IExfKElkLDApLCROZT1uZXcgTF8oIkRJUkVDVEVEIiwxKSxxTmU9bmV3IExfKCJVTkRJUkVDVEVEIiwyKSxSTmU9bmV3IExfKCJBU1NPQ0lBVElPTiIsMyksek5lPW5ldyBMXygiR0VORVJBTElaQVRJT04iLDQpLGpOZT1uZXcgTF8oIkRFUEVOREVOQ1kiLDUpfWZ1bmN0aW9uIHF4bihlLHQpe3ZhciBuO2lmKCFNMShlKSl0aHJvdyB1ZShuZXcgbmModDR0KSk7c3dpdGNoKG49TTEoZSksdC5nKXtjYXNlIDE6cmV0dXJuLShlLmorZS5mKTtjYXNlIDI6cmV0dXJuIGUuaS1uLmc7Y2FzZSAzOnJldHVybiBlLmotbi5mO2Nhc2UgNDpyZXR1cm4tKGUuaStlLmcpfXJldHVybiAwfWZ1bmN0aW9uIEh4bihlLHQsbil7dmFyIHIsYSxvO3JldHVybiByPXQuTGsoKSxvPXQubWQoKSxhPXIuSmsoKT9kYihlLDQscixvLG51bGwsWEUoZSxyLG8sRGUociwxMDIpJiYobChyLDE5KS5CYiZJbykhPTApLCEwKTpkYihlLHIudGsoKT8yOjEscixvLHIuaWsoKSwtMSwhMCksbj9uLm5qKGEpOm49YSxufWZ1bmN0aW9uICRFKGUsdCl7dmFyIG4scjtmb3IobnIodCkscj1lLmIuYy5sZW5ndGgsdnQoZS5iLHQpO3I+MDspe2lmKG49cixyPShyLTEpLzJ8MCxlLmEuTmUoanQoZS5iLHIpLHQpPD0wKXJldHVybiByZihlLmIsbix0KSwhMDtyZihlLmIsbixqdChlLmIscikpfXJldHVybiByZihlLmIscix0KSwhMH1mdW5jdGlvbiB6eGUoZSx0LG4scil7dmFyIGEsbztpZihhPTAsbilhPUJWKGUuYVtuLmddW3QuZ10scik7ZWxzZSBmb3Iobz0wO288Z0s7bysrKWE9Yi5NYXRoLm1heChhLEJWKGUuYVtvXVt0LmddLHIpKTtyZXR1cm4gdD09KHQxKCksJHUpJiZlLmImJihhPWIuTWF0aC5tYXgoYSxlLmIuYSkpLGF9ZnVuY3Rpb24gVnhuKGUsdCl7dmFyIG4scixhLG8sZixnO3JldHVybiBhPWUuaSxvPXQuaSwhYXx8IW98fGEuaSE9by5pfHxhLmk9PShDdCgpLGFyKXx8YS5pPT0oQ3QoKSxlcik/ITE6KGY9YS5nLmEsbj1mK2Euai5hLGc9by5nLmEscj1nK28uai5hLGY8PXImJm4+PWcpfWZ1bmN0aW9uICRndChlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBTbmU7Y2FzZSAxOnJldHVybiBuZXcgX25lO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKCJObyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSB3aWR0aCBhcHByb3hpbWF0b3IgIisoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIHF4ZShlLHQsbixyKXt2YXIgYTtpZihhPSExLElhKHIpJiYoYT0hMCx6ayh0LG4sZWkocikpKSxhfHxoeShyKSYmKGE9ITAscXhlKGUsdCxuLHIpKSxhfHxEZShyLDI0MikmJihhPSEwLE5tKHQsbixsKHIsMjQyKSkpLCFhKXRocm93IHVlKG5ldyBRaWUobVNlKSl9ZnVuY3Rpb24gVXhuKGUsdCl7dmFyIG4scixhO2lmKG49dC5xaShlLmEpLG4mJihhPW4xKCghbi5iJiYobi5iPW5ldyBkaCgoVG4oKSxObyksWWMsbikpLG4uYiksQmYpLGEhPW51bGwpKXtmb3Iocj0xO3I8KEVsKCksJFBlKS5sZW5ndGg7KytyKWlmKHZuKCRQZVtyXSxhKSlyZXR1cm4gcn1yZXR1cm4gMH1mdW5jdGlvbiBHeG4oZSx0KXt2YXIgbixyLGE7aWYobj10LnFpKGUuYSksbiYmKGE9bjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSxCZiksYSE9bnVsbCkpe2ZvcihyPTE7cjwoRWwoKSx6UGUpLmxlbmd0aDsrK3IpaWYodm4oelBlW3JdLGEpKXJldHVybiByfXJldHVybiAwfWZ1bmN0aW9uIHpndChlLHQpe3ZhciBuLHIsYSxvO2lmKG5yKHQpLG89ZS5hLmdjKCksbzx0LmdjKCkpZm9yKG49ZS5hLmVjKCkuS2MoKTtuLk9iKCk7KXI9bi5QYigpLHQuSGMocikmJm4uUWIoKTtlbHNlIGZvcihhPXQuS2MoKTthLk9iKCk7KXI9YS5QYigpLGUuYS5CYyhyKSE9bnVsbDtyZXR1cm4gbyE9ZS5hLmdjKCl9ZnVuY3Rpb24gcWd0KGUpe3ZhciB0LG47c3dpdGNoKG49SmEoSWMoaGUobGUoRWEsMSksZHQsOCwwLFtlLmkubixlLm4sZS5hXSkpKSx0PWUuaS5kLGUuai5nKXtjYXNlIDE6bi5iLT10LmQ7YnJlYWs7Y2FzZSAyOm4uYSs9dC5jO2JyZWFrO2Nhc2UgMzpuLmIrPXQuYTticmVhaztjYXNlIDQ6bi5hLT10LmJ9cmV0dXJuIG59ZnVuY3Rpb24gS3huKGUpe3ZhciB0O2Zvcih0PShseCgpLGwoeHIobmV3IGhyKGRyKGthKGUpLmEuS2MoKSxuZXcgaikpKSwxOCkuYy5pKTt0Lms9PShabigpLEFhKTspcnQodCwoZnQoKSxrQiksKEhuKCksITApKSx0PWwoeHIobmV3IGhyKGRyKGthKHQpLmEuS2MoKSxuZXcgaikpKSwxOCkuYy5pfWZ1bmN0aW9uIE91ZShlLHQsbixyKXt2YXIgYSxvLGYsZztmb3IoZz1UQSh0LHIpLGY9Zy5LYygpO2YuT2IoKTspYT1sKGYuUGIoKSwxMiksZS5kW2EucF09ZS5kW2EucF0rZS5jW24ucF07Zm9yKGc9VEEobixyKSxvPWcuS2MoKTtvLk9iKCk7KWE9bChvLlBiKCksMTIpLGUuZFthLnBdPWUuZFthLnBdLWUuY1t0LnBdfWZ1bmN0aW9uIEh4ZShlLHQsbil7dmFyIHIsYTtmb3IoYT1uZXcgb3IoKCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxlLmEpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMjcpLFFoKHIsci5pK3Qsci5qK24pO3RvKCghZS5iJiYoZS5iPW5ldyBudChqcyxlLDEyLDMpKSxlLmIpLG5ldyBmdHQodCxuKSl9ZnVuY3Rpb24gV3huKGUsdCxuLHIpe3ZhciBhLG87Zm9yKG89dCxhPW8uZD09bnVsbHx8ZS5hLk5lKG4uZCxvLmQpPjA/MTowO28uYVthXSE9bjspbz1vLmFbYV0sYT1lLmEuTmUobi5kLG8uZCk+MD8xOjA7by5hW2FdPXIsci5iPW4uYixyLmFbMF09bi5hWzBdLHIuYVsxXT1uLmFbMV0sbi5hWzBdPW51bGwsbi5hWzFdPW51bGx9ZnVuY3Rpb24gWXhuKGUpe3ZhciB0LG4scixhO2Zvcih0PW5ldyBidCxuPVdlKGloLHBnLDI4LGUuYS5jLmxlbmd0aCwxNiwxKSxsNWUobixuLmxlbmd0aCksYT1uZXcgRyhlLmEpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMjUpLG5bci5kXXx8KCRuKHQuYyxyKSxjZHQoZSxyLG4pKTtyZXR1cm4gdH1mdW5jdGlvbiBIZ3QoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihhPXQ9PTE/czFlOmkxZSxyPWEuYS5lYygpLktjKCk7ci5PYigpOylmb3Iobj1sKHIuUGIoKSw4OCksZj1sKCRpKGUuZi5jLG4pLDIxKS5LYygpO2YuT2IoKTspbz1sKGYuUGIoKSw0MiksYWwoZS5iLmIsby5iKSxhbChlLmIuYSxsKG8uYiw4NikuZCl9ZnVuY3Rpb24gWHhuKGUsdCl7dmFyIG47dC5VZygiSGllcmFyY2hpY2FsIHBvcnQgcG9zaXRpb24gcHJvY2Vzc2luZyIsMSksbj1lLmIsbi5jLmxlbmd0aD4wJiZkbXQoKFNuKDAsbi5jLmxlbmd0aCksbChuLmNbMF0sMzApKSxlKSxuLmMubGVuZ3RoPjEmJmRtdChsKGp0KG4sbi5jLmxlbmd0aC0xKSwzMCksZSksdC5WZygpfWZ1bmN0aW9uIFF4bihlKXtSbCgpO3ZhciB0LG47cmV0dXJuIHQ9cnModnAsaGUobGUoY1ksMSksaXQsMjc5LDAsW1liXSkpLCEoeU4oTkgodCxlKSk+MXx8KG49cnMoUE0saGUobGUoY1ksMSksaXQsMjc5LDAsW05NLGE5XSkpLHlOKE5IKG4sZSkpPjEpKX1mdW5jdGlvbiBWeGUoZSx0KXt2YXIgbjtuPXh1KChpYigpLEdmKSxlKSxEZShuLDUwNyk/cmMoR2YsZSxuZXcgT3R0KHRoaXMsdCkpOnJjKEdmLGUsdGhpcyksTnVlKHRoaXMsdCksdD09KFNrKCksQVBlKT8odGhpcy53Yj1sKHRoaXMsMjAzOCksbCh0LDIwNDApKTp0aGlzLndiPShsYigpLFZuKX1mdW5jdGlvbiBKeG4oZSl7dmFyIHQsbixyO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKHQ9bnVsbCxuPTA7bjxqTS5sZW5ndGg7KytuKXRyeXtyZXR1cm4gZ2V0KGpNW25dLGUpfWNhdGNoKGEpe2lmKGE9YnMoYSksRGUoYSwzMykpcj1hLHQ9cjtlbHNlIHRocm93IHVlKGEpfXRocm93IHVlKG5ldyBuVih0KSl9ZnVuY3Rpb24gVmd0KCl7Vmd0PVUsRTZ0PWhlKGxlKHp0LDEpLGR0LDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKSxUNnQ9aGUobGUoenQsMSksZHQsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIixfeCwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pfWZ1bmN0aW9uIFVndChlKXt2YXIgdCxuLHI7dD12bih0eXBlb2YgdCxnaGUpP251bGw6bmV3IG9vLHQmJihEaygpLG49KHI9OTAwLHI+PWIyPyJlcnJvciI6cj49OTAwPyJ3YXJuIjpyPj04MDA/ImluZm8iOiJsb2ciKSxlYXQobixlLmEpLGUuYiYmRzllKHQsbixlLmIsIkV4Y2VwdGlvbjogIiwhMCkpfWZ1bmN0aW9uIFEoZSx0KXt2YXIgbixyO3JldHVybiByPSghZS5xJiYoZS5xPW5ldyBQciksY3IoZS5xLHQpKSxyPz8obj10LlNnKCksRGUobiw0KSYmKG49PW51bGw/KCFlLnEmJihlLnE9bmV3IFByKSxheChlLnEsdCkpOighZS5xJiYoZS5xPW5ldyBQciksa2koZS5xLHQsbikpKSxuKX1mdW5jdGlvbiB1bygpe3VvPVUseTA9bmV3IG9PKCJQMV9DWUNMRV9CUkVBS0lORyIsMCksdmc9bmV3IG9PKCJQMl9MQVlFUklORyIsMSksYnU9bmV3IG9PKCJQM19OT0RFX09SREVSSU5HIiwyKSxfdT1uZXcgb08oIlA0X05PREVfUExBQ0VNRU5UIiwzKSxtYz1uZXcgb08oIlA1X0VER0VfUk9VVElORyIsNCl9ZnVuY3Rpb24gWnhuKGUsdCl7aEEoKTt2YXIgbjtpZihlLmM9PXQuYyl7aWYoZS5iPT10LmJ8fGEzbihlLmIsdC5iKSl7aWYobj1EbG4oZS5iKT8xOi0xLGUuYSYmIXQuYSlyZXR1cm4gbjtpZighZS5hJiZ0LmEpcmV0dXJuLW59cmV0dXJuIHJ1KGUuYi5nLHQuYi5nKX1lbHNlIHJldHVybiBZaShlLmMsdC5jKX1mdW5jdGlvbiBHZ3QoZSx0KXt2YXIgbixyLGE7aWYoR3hlKGUsdCkpcmV0dXJuITA7Zm9yKHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspaWYobj1sKHJlKHIpLDI3KSxhPVRndChuKSxOVShlLG4sYSl8fFcwdChlLG4pLWUuZzw9ZS5hKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFlOKCl7WU49VSxKVz0odGxlKCksUE9lKSxFZ2U9Y1N0LGtnZT1vU3QsQU9lPWlTdCx4Z2U9YVN0LF9PZT1uZXcgbHcoOCksUUN0PW5ldyBIYSgocGkoKSxfMiksX09lKSxKQ3Q9bmV3IEhhKEV2LDgpLFpDdD1PT2UsQ09lPWVTdCxTT2U9dFN0LFhDdD1uZXcgSGEoR0IsKEhuKCksITEpKX1mdW5jdGlvbiB3VSgpe3dVPVUsSk9lPW5ldyBsdygxNSksQ1N0PW5ldyBIYSgocGkoKSxfMiksSk9lKSxTU3Q9bmV3IEhhKEV2LDE1KSxaT2U9bmV3IEhhKFhCLHB0KDApKSxZT2U9SVN0LEVTdD1rdixUU3Q9VWIsV09lPW5ldyBIYShaNixQeXQpLFhPZT1XQixRT2U9aTcsX2dlPU1TdCxrU3Q9VUJ9ZnVuY3Rpb24gY2coZSl7aWYoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKS5pIT0xfHwoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLmkhPTEpdGhyb3cgdWUobmV3IFluKFhmZSkpO3JldHVybiBiYyhsKE9lKCghZS5iJiYoZS5iPW5ldyBMbihfcixlLDQsNykpLGUuYiksMCksODQpKX1mdW5jdGlvbiBLZ3QoZSl7aWYoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKS5pIT0xfHwoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLmkhPTEpdGhyb3cgdWUobmV3IFluKFhmZSkpO3JldHVybiBUTihsKE9lKCghZS5iJiYoZS5iPW5ldyBMbihfcixlLDQsNykpLGUuYiksMCksODQpKX1mdW5jdGlvbiBXZ3QoZSl7aWYoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKS5pIT0xfHwoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLmkhPTEpdGhyb3cgdWUobmV3IFluKFhmZSkpO3JldHVybiBUTihsKE9lKCghZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYyksMCksODQpKX1mdW5jdGlvbiBFYihlKXtpZigoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmkhPTF8fCghZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYykuaSE9MSl0aHJvdyB1ZShuZXcgWW4oWGZlKSk7cmV0dXJuIGJjKGwoT2UoKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKSwwKSw4NCkpfWZ1bmN0aW9uIFV4ZShlLHQsbil7dmFyIHIsYSxvO2lmKCsrZS5qLGE9ZS5FaigpLHQ+PWF8fHQ8MCl0aHJvdyB1ZShuZXcgdGMoUWZlK3QrYXYrYSkpO2lmKG4+PWF8fG48MCl0aHJvdyB1ZShuZXcgdGMoSmZlK24rYXYrYSkpO3JldHVybiB0IT1uP3I9KG89ZS5DaihuKSxlLnFqKHQsbyksbyk6cj1lLnhqKG4pLHJ9ZnVuY3Rpb24gWWd0KGUpe3ZhciB0LG4scjtpZihyPWUsZSlmb3IodD0wLG49ZS5FaCgpO247bj1uLkVoKCkpe2lmKCsrdD5vaGUpcmV0dXJuIFlndChuKTtpZihyPW4sbj09ZSl0aHJvdyB1ZShuZXcgbmMoIlRoZXJlIGlzIGEgY3ljbGUgaW4gdGhlIGNvbnRhaW5tZW50IGhpZXJhcmNoeSBvZiAiK2UpKX1yZXR1cm4gcn1mdW5jdGlvbiBUYihlKXt2YXIgdCxuLHI7Zm9yKHI9bmV3IEhtKENvLCJbIiwiXSIpLG49ZS5LYygpO24uT2IoKTspdD1uLlBiKCksSmcocixxZSh0KT09PXFlKGUpPyIodGhpcyBDb2xsZWN0aW9uKSI6dD09bnVsbD91bDp4Yyh0KSk7cmV0dXJuIHIuYT9yLmUubGVuZ3RoPT0wP3IuYS5hOnIuYS5hKygiIityLmUpOnIuY31mdW5jdGlvbiBHeGUoZSx0KXt2YXIgbixyO2lmKHI9ITEsdC5nYygpPDIpcmV0dXJuITE7Zm9yKG49MDtuPHQuZ2MoKTtuKyspbjx0LmdjKCktMT9yPXJ8TlUoZSxsKHQuWGIobiksMjcpLGwodC5YYihuKzEpLDI3KSk6cj1yfE5VKGUsbCh0LlhiKG4pLDI3KSxsKHQuWGIoMCksMjcpKTtyZXR1cm4gcn1mdW5jdGlvbiBYZ3QoZSx0KXt2YXIgbjt0IT1lLmE/KG49bnVsbCxlLmEmJihuPWwoZS5hLDU0KS5UaChlLDQsdTEsbikpLHQmJihuPWwodCw1NCkuUmgoZSw0LHUxLG4pKSxuPXI4ZShlLHQsbiksbiYmbi5vaigpKTplLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDEsdCx0KSl9ZnVuY3Rpb24gS3hlKGUsdCl7dmFyIG47dCE9ZS5lPyhlLmUmJlJ1dChDNWUoZS5lKSxlKSx0JiYoIXQuYiYmKHQuYj1uZXcgUHoobmV3IFZpZSkpLFdydCh0LmIsZSkpLG49dThuKGUsdCxudWxsKSxuJiZuLm9qKCkpOmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsNCx0LHQpKX1mdW5jdGlvbiBlOW4oZSx0KXt2YXIgbjtuPXQubyxVZyhlLmYpPyhlLmouYT1iLk1hdGgubWF4KGUuai5hLG4uYSksZS5qLmIrPW4uYixlLmQuYy5sZW5ndGg+MSYmKGUuai5iKz1lLmUpKTooZS5qLmErPW4uYSxlLmouYj1iLk1hdGgubWF4KGUuai5iLG4uYiksZS5kLmMubGVuZ3RoPjEmJihlLmouYSs9ZS5lKSl9ZnVuY3Rpb24gQ2IoKXtDYj1VLGF4dD1oZShsZShPbywxKSxhdSw2NCwwLFsoQ3QoKSxRbiksYXIsRHJdKSxzeHQ9aGUobGUoT28sMSksYXUsNjQsMCxbYXIsRHIsZXJdKSxveHQ9aGUobGUoT28sMSksYXUsNjQsMCxbRHIsZXIsUW5dKSxjeHQ9aGUobGUoT28sMSksYXUsNjQsMCxbZXIsUW4sYXJdKX1mdW5jdGlvbiB0OW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEM7aWYoZj1lLmMuZCxnPWUuZC5kLGYuaiE9Zy5qKWZvcihDPWUuYixhPWYuaix3PW51bGw7YSE9Zy5qOyl3PXQ9PTA/JFYoYSk6ZjhlKGEpLG89RzhlKGEsQy5kW2EuZ10sbiksRT1HOGUodyxDLmRbdy5nXSxuKSx1aShyLE9pKG8sRSkpLGE9d31mdW5jdGlvbiBuOW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdztyZXR1cm4gZj1aZHQoZS5hLHQsbiksZz1sKGYuYSwxNykuYSxvPWwoZi5iLDE3KS5hLHImJih3PWwoUSh0LChmdCgpLGpsKSksMTApLGE9bChRKG4samwpLDEwKSx3JiZhJiYoJGN0KGUuYix3LGEpLGcrPWUuYi5pLG8rPWUuYi5lKSksZz5vfWZ1bmN0aW9uIFFndChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7Zm9yKHRoaXMuYT15ZHQoZSksdGhpcy5iPW5ldyBidCxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcilmb3IodD1uW3JdLG89bmV3IGJ0LHZ0KHRoaXMuYixvKSxnPXQsdz0wLEU9Zy5sZW5ndGg7dzxFOysrdylmPWdbd10sdnQobyxuZXcgT2woZi5qKSl9ZnVuY3Rpb24gcjluKGUsdCxuKXt2YXIgcixhLG87cmV0dXJuIG89MCxyPW5bdF0sdDxuLmxlbmd0aC0xJiYoYT1uW3QrMV0sZS5iW3RdPyhvPWVPbihlLmQscixhKSxvKz1ZYWUoZS5hLHIsKEN0KCksYXIpKSxvKz1ZYWUoZS5hLGEsZXIpKTpvPVB2bihlLmEscixhKSksZS5jW3RdJiYobys9YXZuKGUuYSxyKSksb31mdW5jdGlvbiBpOW4oZSx0LG4scixhKXt2YXIgbyxmLGcsdztmb3Iodz1udWxsLGc9bmV3IEcocik7Zy5hPGcuYy5jLmxlbmd0aDspaWYoZj1sKHJlKGcpLDQ1MyksZiE9biYmZ2MoZi5lLGEsMCkhPS0xKXt3PWY7YnJlYWt9bz1Bb2UoYSkscG8obyxuLmIpLEZhKG8sdy5iKSx4bihlLmEsYSxuZXcgS3Eobyx0LG4uZikpfWZ1bmN0aW9uIHM5bihlKXt2YXIgdCxuLHIsYTtpZihCNShsKFEoZS5iLChOdCgpLFJoKSksODgpKSlyZXR1cm4gMDtmb3IodD0wLHI9bmV3IEcoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTApLG4uaz09KFpuKCksUHMpJiYoYT1uLm8uYSx0PWIuTWF0aC5tYXgodCxhKSk7cmV0dXJuIHR9ZnVuY3Rpb24gSmd0KGUpe2Zvcig7ZS5nLmMhPTAmJmUuZC5jIT0wOyl1YWUoZS5nKS5jPnVhZShlLmQpLmM/KGUuaSs9ZS5nLmMsWWNlKGUuZCkpOnVhZShlLmQpLmM+dWFlKGUuZykuYz8oZS5lKz1lLmQuYyxZY2UoZS5nKSk6KGUuaSs9Y3N0KGUuZyksZS5lKz1jc3QoZS5kKSxZY2UoZS5nKSxZY2UoZS5kKSl9ZnVuY3Rpb24gYTluKGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobz10LnEsZj10LnIsbmV3IFBtKChKMCgpLHFiKSx0LG8sMSksbmV3IFBtKHFiLG8sZiwxKSxhPW5ldyBHKG4pO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMTgpLHIhPW8mJnIhPXQmJnIhPWYmJihEa2UoZS5hLHIsdCksRGtlKGUuYSxyLGYpKX1mdW5jdGlvbiBaZ3QoZSx0LG4scil7ZS5hLmQ9Yi5NYXRoLm1pbih0LG4pLGUuYS5hPWIuTWF0aC5tYXgodCxyKS1lLmEuZCx0PG4/KGUuYj0uNSoodCtuKSxlLmc9eWZlKmUuYisuOSp0LGUuZj15ZmUqZS5iKy45Km4pOihlLmI9LjUqKHQrciksZS5nPXlmZSplLmIrLjkqcixlLmY9eWZlKmUuYisuOSp0KX1mdW5jdGlvbiBvOW4oZSl7dmFyIHQsbixyLGE7aWYoZS5iIT0wKXtmb3IodD1uZXcgb3MsYT1ScihlLDApO2EuYiE9YS5kLmM7KXI9bChCcihhKSw0MCksS2EodCxwY2UocikpLG49ci5lLG4uYT1sKFEociwoUWkoKSxQQikpLDE3KS5hLG4uYj1sKFEocixCQiksMTcpLmE7cmV0dXJuIHR9cmV0dXJuIG5ldyBvc31mdW5jdGlvbiBjOW4oZSl7c3dpdGNoKGwoUShlLChOdCgpLFF1KSksMTcxKS5nKXtjYXNlIDE6cnQoZSxRdSwoaGYoKSxYTCkpO2JyZWFrO2Nhc2UgMjpydChlLFF1LChoZigpLGQ0KSk7YnJlYWs7Y2FzZSAzOnJ0KGUsUXUsKGhmKCksWUwpKTticmVhaztjYXNlIDQ6cnQoZSxRdSwoaGYoKSwkYikpfX1mdW5jdGlvbiB1OW4oZSx0LG4pe3ZhciByO24uVWcoIlNlbGYtTG9vcCByb3V0aW5nIiwxKSxyPUY0bih0KSxNcShRKHQsKFFIKCksa00pKSksSXMoZmMoRmkoRmkoRGMobmV3IGJuKG51bGwsbmV3IGtuKHQuYiwxNikpLG5ldyBWWiksbmV3IFk5KSxuZXcgcjgpLG5ldyBtUyksbmV3IEFldChlLHIpKSxuLlZnKCl9ZnVuY3Rpb24gekUoKXt6RT1VLFZMPW5ldyBTXyhJZCwwKSxMTGU9bmV3IFNfKE14LDEpLElMZT1uZXcgU18oRHgsMiksRExlPW5ldyBTXygiTEVGVF9SSUdIVF9DT05TVFJBSU5UX0xPQ0tJTkciLDMpLE1MZT1uZXcgU18oIkxFRlRfUklHSFRfQ09OTkVDVElPTl9MT0NLSU5HIiw0KSxBTGU9bmV3IFNfKFkzdCw1KX1mdW5jdGlvbiBlcHQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFO2c9bi5hLzIsbz1uLmIvMixyPWIuTWF0aC5hYnModC5hLWUuYSksYT1iLk1hdGguYWJzKHQuYi1lLmIpLHc9MSxFPTEscj5nJiYodz1nL3IpLGE+byYmKEU9by9hKSxmPWIuTWF0aC5taW4odyxFKSxlLmErPWYqKHQuYS1lLmEpLGUuYis9ZioodC5iLWUuYil9ZnVuY3Rpb24gbDluKGUsdCxuLHIsYSl7dmFyIG8sZjtmb3IoZj0hMSxvPWwoanQobi5iLDApLDI3KTtqQW4oZSx0LG8scixhKSYmKGY9ITAsJDhuKG4sbyksbi5iLmMubGVuZ3RoIT0wKTspbz1sKGp0KG4uYiwwKSwyNyk7cmV0dXJuIG4uYi5jLmxlbmd0aD09MCYmVU4obi5qLG4pLGYmJmxVKHQucSksZn1mdW5jdGlvbiBoOW4oZSx0KXtoNigpO3ZhciBuLHIsYSxvO2lmKHQuYjwyKXJldHVybiExO2ZvcihvPVJyKHQsMCksbj1sKEJyKG8pLDgpLHI9bjtvLmIhPW8uZC5jOyl7aWYoYT1sKEJyKG8pLDgpLFh1ZShlLHIsYSkpcmV0dXJuITA7cj1hfXJldHVybiEhWHVlKGUscixuKX1mdW5jdGlvbiBXeGUoZSx0LG4scil7dmFyIGEsbztyZXR1cm4gbj09MD8oIWUubyYmKGUubz1uZXcgeGwoKHN1KCksQ2cpLEwyLGUsMCkpLFVxKGUubyx0LHIpKToobz1sKE1uKChhPWwoS24oZSwxNiksMjkpLGF8fGUuaWkoKSksbiksNjkpLG8ud2soKS5BayhlLEt1KGUpLG4teXIoZS5paSgpKSx0LHIpKX1mdW5jdGlvbiBOdWUoZSx0KXt2YXIgbjt0IT1lLnNiPyhuPW51bGwsZS5zYiYmKG49bChlLnNiLDU0KS5UaChlLDEsUk0sbikpLHQmJihuPWwodCw1NCkuUmgoZSwxLFJNLG4pKSxuPWE4ZShlLHQsbiksbiYmbi5vaigpKTplLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDQsdCx0KSl9ZnVuY3Rpb24gZjluKGUsdCl7dmFyIG4scixhLG87aWYodClhPW5wKHQsIngiKSxuPW5ldyBIWGUoZSksYUUobi5hLChucihhKSxhKSksbz1ucCh0LCJ5Iikscj1uZXcgVlhlKGUpLGNFKHIuYSwobnIobyksbykpO2Vsc2UgdGhyb3cgdWUobmV3IGRkKCJBbGwgZWRnZSBzZWN0aW9ucyBuZWVkIGFuIGVuZCBwb2ludC4iKSl9ZnVuY3Rpb24gZDluKGUsdCl7dmFyIG4scixhLG87aWYodClhPW5wKHQsIngiKSxuPW5ldyAkWGUoZSksb0Uobi5hLChucihhKSxhKSksbz1ucCh0LCJ5Iikscj1uZXcgelhlKGUpLHVFKHIuYSwobnIobyksbykpO2Vsc2UgdGhyb3cgdWUobmV3IGRkKCJBbGwgZWRnZSBzZWN0aW9ucyBuZWVkIGEgc3RhcnQgcG9pbnQuIikpfWZ1bmN0aW9uIGc5bihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihyPV8wdChlKSxvPTAsZz1yLmxlbmd0aDtvPGc7KytvKVVndCh0KTtmb3Iodz0hRzEmJmUuZT9HMT9udWxsOmUuZDpudWxsO3c7KXtmb3Iobj1fMHQodyksYT0wLGY9bi5sZW5ndGg7YTxmOysrYSlVZ3QodCk7dz0hRzEmJncuZT9HMT9udWxsOncuZDpudWxsfX1mdW5jdGlvbiB0cHQoZSx0KXt2YXIgbixyO3I9bChRKHQsKE50KCksTXMpKSwxMDEpLHJ0KHQsKGZ0KCksR0xlKSxyKSxuPXQuZSxuJiYoSXMobmV3IGJuKG51bGwsbmV3IGtuKG4uYSwxNikpLG5ldyBxcChlKSksSXMoRGMobmV3IGJuKG51bGwsbmV3IGtuKG4uYiwxNikpLG5ldyB1NSksbmV3IG5fKGUpKSl9ZnVuY3Rpb24gWm4oKXtabj1VLFBzPW5ldyBrXygiTk9STUFMIiwwKSxBYT1uZXcga18oIkxPTkdfRURHRSIsMSksVXM9bmV3IGtfKCJFWFRFUk5BTF9QT1JUIiwyKSxBdT1uZXcga18oIk5PUlRIX1NPVVRIX1BPUlQiLDMpLGN1PW5ldyBrXygiTEFCRUwiLDQpLEsxPW5ldyBrXygiQlJFQUtJTkdfUE9JTlQiLDUpfWZ1bmN0aW9uIHA5bihlKXt2YXIgdCxuLHIsYTtpZih0PSExLG5zKGUsKGZ0KCksS0wpKSlmb3Iobj1sKFEoZSxLTCksODUpLGE9bmV3IEcoZS5qKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTIpLFRUbihyKSYmKHR8fChGa24oZW8oZSkpLHQ9ITApLE01bihsKG4ueGMociksMzE0KSkpfWZ1bmN0aW9uIGI5bihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7cmV0dXJuIEU9anhlKGUpLG49ZS5lLG89biE9bnVsbCxvJiZ6ayhFLHpHLGUuZSksZz1lLmssZj0hIWcsZiYmemsoRSwidHlwZSIsYWFlKGUuaykpLHI9WkkoZS5qKSxhPSFyLGEmJih3PW5ldyAkcCxlMShFLFlmZSx3KSx0PW5ldyBsUWUodyksdG8oZS5qLHQpKSxFfWZ1bmN0aW9uIG05bihlKXt2YXIgdCxuLHIsYTtmb3IoYT1oYigoTWgoZS5nYygpLCJzaXplIiksbmV3IFM1KSwxMjMpLHI9ITAsbj1NbShlKS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSw0NCkscnx8KGEuYSs9Q28pLHI9ITEsd3UoaGIod3UoYSx0LmxkKCkpLDYxKSx0Lm1kKCkpO3JldHVybihhLmErPSJ9IixhKS5hfWZ1bmN0aW9uIG5wdChlLHQpe3ZhciBuLHIsYTtyZXR1cm4gdCY9NjMsdDwyMj8obj1lLmw8PHQscj1lLm08PHR8ZS5sPj4yMi10LGE9ZS5oPDx0fGUubT4+MjItdCk6dDw0ND8obj0wLHI9ZS5sPDx0LTIyLGE9ZS5tPDx0LTIyfGUubD4+NDQtdCk6KG49MCxyPTAsYT1lLmw8PHQtNDQpLHF1KG4mZWgsciZlaCxhJmhwKX1mdW5jdGlvbiBqeShlKXtpZihRU2U9PW51bGwmJihRU2U9bmV3IFJlZ0V4cCgiXlxccypbKy1dPyhOYU58SW5maW5pdHl8KChcXGQrXFwuP1xcZCopfChcXC5cXGQrKSkoW2VFXVsrLV0/XFxkKyk/W2REZkZdPylcXHMqJCIpKSwhUVNlLnRlc3QoZSkpdGhyb3cgdWUobmV3IGdkKFl3K2UrJyInKSk7cmV0dXJuIHBhcnNlRmxvYXQoZSl9ZnVuY3Rpb24gcnB0KGUsdCl7dmFyIG4scixhLG8sZjtmb3IoYT10PT0xP3MxZTppMWUscj1hLmEuZWMoKS5LYygpO3IuT2IoKTspZm9yKG49bChyLlBiKCksODgpLGY9bCgkaShlLmYuYyxuKSwyMSkuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksNDIpLHZ0KGUuYi5iLGwoby5iLDg2KSksdnQoZS5iLmEsbChvLmIsODYpLmQpfWZ1bmN0aW9uIHY5bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPXQuYi5qLGUuYT1XZShWcixkaSwyOCxvLmMubGVuZ3RoLDE1LDEpLGE9MCxyPTA7cjxvLmMubGVuZ3RoO3IrKyluPShTbihyLG8uYy5sZW5ndGgpLGwoby5jW3JdLDEyKSksbi5lLmMubGVuZ3RoPT0wJiZuLmcuYy5sZW5ndGg9PTA/YSs9MTphKz0zLGUuYVtyXT1hfWZ1bmN0aW9uIHlVKCl7eVU9VSxJMWU9bmV3IFRfKCJBTFdBWVNfVVAiLDApLEQxZT1uZXcgVF8oIkFMV0FZU19ET1dOIiwxKSxOMWU9bmV3IFRfKCJESVJFQ1RJT05fVVAiLDIpLE8xZT1uZXcgVF8oIkRJUkVDVElPTl9ET1dOIiwzKSxQMWU9bmV3IFRfKCJTTUFSVF9VUCIsNCksUUs9bmV3IFRfKCJTTUFSVF9ET1dOIiw1KX1mdW5jdGlvbiB3OW4oZSx0KXtpZihlPDB8fHQ8MCl0aHJvdyB1ZShuZXcgWW4oImsgYW5kIG4gbXVzdCBiZSBwb3NpdGl2ZSIpKTtpZih0PmUpdGhyb3cgdWUobmV3IFluKCJrIG11c3QgYmUgc21hbGxlciB0aGFuIG4iKSk7cmV0dXJuIHQ9PTB8fHQ9PWU/MTplPT0wPzA6eHhlKGUpLyh4eGUodCkqeHhlKGUtdCkpfWZ1bmN0aW9uIFl4ZShlLHQpe3ZhciBuLHIsYSxvO2ZvcihuPW5ldyBoeWUoZSk7bi5nPT1udWxsJiYhbi5jP0g1ZShuKTpuLmc9PW51bGx8fG4uaSE9MCYmbChuLmdbbi5pLTFdLDUxKS5PYigpOylpZihvPWwoQ1UobiksNTgpLERlKG8sMTY3KSlmb3Iocj1sKG8sMTY3KSxhPTA7YTx0Lmxlbmd0aDthKyspdFthXS5LZyhyKX1mdW5jdGlvbiBQdWUoZSl7dmFyIHQ7cmV0dXJuIGUuRGImNjQ/amNlKGUpOih0PW5ldyBBZihqY2UoZSkpLHQuYSs9IiAoaGVpZ2h0OiAiLF81KHQsZS5mKSx0LmErPSIsIHdpZHRoOiAiLF81KHQsZS5nKSx0LmErPSIsIHg6ICIsXzUodCxlLmkpLHQuYSs9IiwgeTogIixfNSh0LGUuaiksdC5hKz0iKSIsdC5hKX1mdW5jdGlvbiB5OW4oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKHQ9bmV3IGUyLHI9ZSxhPTAsbz1yLmxlbmd0aDthPG87KythKWlmKG49clthXSxmPVhyKG4ubGQoKSksZz1oMih0LGYsWHIobi5tZCgpKSksZyE9bnVsbCl0aHJvdyB1ZShuZXcgWW4oImR1cGxpY2F0ZSBrZXk6ICIrZikpO3RoaXMuYj0oQ24oKSxuZXcgdHIodCkpfWZ1bmN0aW9uIHg5bihlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIHVsO2ZvcihvPW5ldyBIbShDbywiWyIsIl0iKSxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sSmcobyxTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIFh4ZSgpe1h4ZT1VLFFfZT0ob1YoKSx5Syksajd0PW5ldyBwbihhRyxRX2UpLHB0KDEpLFI3dD1uZXcgcG4oSUVlLHB0KDMwMCkpLHB0KDApLHE3dD1uZXcgcG4oT0VlLHB0KDApKSxIN3Q9bmV3IHBuKERoZSxEZCksJDd0PW5ldyBwbihJaGUsNSksVjd0PXlLLHo3dD1RMGV9ZnVuY3Rpb24gazluKGUsdCl7dmFyIG47aWYodCE9bnVsbCYmIWUuYy5IaygpLmZrKHQpKXRocm93IG49RGUodCw1OCk/bCh0LDU4KS5EaCgpLnpiOl9tKGJoKHQpKSx1ZShuZXcga2soT2IrZS5jLnhlKCkrIidzIHR5cGUgJyIrZS5jLkhrKCkueGUoKSsiJyBkb2VzIG5vdCBwZXJtaXQgYSB2YWx1ZSBvZiB0eXBlICciK24rIiciKSl9ZnVuY3Rpb24gRTluKGUsdCxuKXt2YXIgcixhO2ZvcihhPW5ldyBVYShlLmIsMCk7YS5iPGEuZC5nYygpOylyPShtcihhLmI8YS5kLmdjKCkpLGwoYS5kLlhiKGEuYz1hLmIrKyksNzIpKSxxZShRKHIsKGZ0KCksVkxlKSkpPT09cWUodCkmJihuOWUoci5uLGVvKGUuYy5pKSxuKSxwaChhKSx2dCh0LmIscikpfWZ1bmN0aW9uIGlwdChlKXt2YXIgdCxuO3JldHVybiBuPWIuTWF0aC5zcXJ0KChlLms9PW51bGwmJihlLms9eDdlKGUsbmV3IEJlZSkpLHplKGUuaykvKGUuYiooZS5nPT1udWxsJiYoZS5nPUVmdChlLG5ldyBLaikpLHplKGUuZykpKSkpLHQ9WXIoWmMoYi5NYXRoLnJvdW5kKG4pKSksdD1iLk1hdGgubWluKHQsZS5mKSx0fWZ1bmN0aW9uIFQ5bigpe3ZhciBlLHQsbjtmb3IodD0wLGU9MDtlPDE7ZSsrKXtpZihuPUM5ZSgoWG4oZSwxKSwiWCIuY2hhckNvZGVBdChlKSkpLG49PTApdGhyb3cgdWUobmV3IHJpKChYbihlLDErMSksIlVua25vd24gT3B0aW9uOiAiKyJYIi5zdWJzdHIoZSkpKSk7dHw9bn1yZXR1cm4gdH1mdW5jdGlvbiBndSgpe2tsKCkscjRlLmNhbGwodGhpcyksdGhpcy5qPShDdCgpLFBjKSx0aGlzLmE9bmV3IHFhLG5ldyAkaWUsdGhpcy5mPShNaCgyLFl5KSxuZXcgQnUoMikpLHRoaXMuZT0oTWgoNCxZeSksbmV3IEJ1KDQpKSx0aGlzLmc9KE1oKDQsWXkpLG5ldyBCdSg0KSksdGhpcy5iPW5ldyBNZXQodGhpcy5lLHRoaXMuZyl9ZnVuY3Rpb24gQzluKGUsdCl7dmFyIG4scjtyZXR1cm4hKFJ0KEJ0KFEodCwoZnQoKSxXMSkpKSl8fChyPXQuYy5pLGU9PShoZigpLFlMKSYmci5rPT0oWm4oKSxjdSkpfHwobj1sKFEociwoTnQoKSxRdSkpLDE3MSksbj09JGIpKX1mdW5jdGlvbiBTOW4oZSx0KXt2YXIgbixyO3JldHVybiEoUnQoQnQoUSh0LChmdCgpLFcxKSkpKXx8KHI9dC5kLmksZT09KGhmKCksWEwpJiZyLms9PShabigpLGN1KSl8fChuPWwoUShyLChOdCgpLFF1KSksMTcxKSxuPT1kNCkpfWZ1bmN0aW9uIF85bihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihmPWUuZCx3PWUubyxnPW5ldyBlZigtZi5iLC1mLmQsZi5iK3cuYStmLmMsZi5kK3cuYitmLmEpLHI9dCxhPTAsbz1yLmxlbmd0aDthPG87KythKW49clthXSxuJiYkQShnLG4uaSk7Zi5iPS1nLmMsZi5kPS1nLmQsZi5jPWcuYi1mLmItdy5hLGYuYT1nLmEtZi5kLXcuYn1mdW5jdGlvbiBBOW4oZSx0KXtpZih0LmEpc3dpdGNoKGwoUSh0LmIsKGZ0KCksR0xlKSksMTAxKS5nKXtjYXNlIDA6Y2FzZSAxOkc4bih0KTtjYXNlIDI6SXMobmV3IGJuKG51bGwsbmV3IGtuKHQuZCwxNikpLG5ldyBraiksTUVuKGUuYSx0KX1lbHNlIElzKG5ldyBibihudWxsLG5ldyBrbih0LmQsMTYpKSxuZXcga2opfWZ1bmN0aW9uIFhOKCl7WE49VSx4T2U9bmV3IHBPKCJDRU5URVJfRElTVEFOQ0UiLDApLHdnZT1uZXcgcE8oIkNJUkNMRV9VTkRFUkxBUCIsMSksRU9lPW5ldyBwTygiUkVDVEFOR0xFX1VOREVSTEFQIiwyKSx5Z2U9bmV3IHBPKCJJTlZFUlRFRF9PVkVSTEFQIiwzKSxrT2U9bmV3IHBPKCJNSU5JTVVNX1JPT1RfRElTVEFOQ0UiLDQpfWZ1bmN0aW9uIEw5bihlKXtaOWUoKTt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKHI9ZS5sZW5ndGgsYT1yKjIsdD1XZShrZixBZCwyOCxhLDE1LDEpLG49MDtuPHI7bisrKW89ZVtuXSxvPDAmJihvKz0yNTYpLHRbbioyXT1MWVtvPj40XSx0W24qMisxXT1MWVtvJjE1XTtyZXR1cm4gSWYodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiBNOW4oZSl7a0goKTt2YXIgdCxuLHI7c3dpdGNoKHI9ZS5jLmxlbmd0aCxyKXtjYXNlIDA6cmV0dXJuIGk2dDtjYXNlIDE6cmV0dXJuIHQ9bChScHQobmV3IEcoZSkpLDQ0KSxFZG4odC5sZCgpLHQubWQoKSk7ZGVmYXVsdDpyZXR1cm4gbj1sKGoxKGUsV2UodXYsWFUsNDQsZS5jLmxlbmd0aCwwLDEpKSwxNzMpLG5ldyBXd2Uobil9fWZ1bmN0aW9uIEQ5bihlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKHQ9bmV3IHo1LG49bmV3IHo1LGdiKHQsZSksZ2IobixlKTtuLmIhPW4uYzspZm9yKGE9bChYOChuKSwzNiksZj1uZXcgRyhhLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMCksby5lJiYocj1vLmUsZ2IodCxyKSxnYihuLHIpKTtyZXR1cm4gdH1mdW5jdGlvbiBkMihlLHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gRzgoZS5qLChrbCgpLGtBZSkpO2Nhc2UgMjpyZXR1cm4gRzgoZS5qLChrbCgpLHlBZSkpO2Nhc2UgMzpyZXR1cm4gRzgoZS5qLChrbCgpLFRBZSkpO2Nhc2UgNDpyZXR1cm4gRzgoZS5qLChrbCgpLENBZSkpO2RlZmF1bHQ6cmV0dXJuIENuKCksQ24oKSxfb319ZnVuY3Rpb24gSTluKGUsdCl7dmFyIG4scixhO249YmRuKHQsZS5lKSxyPWwoY3IoZS5nLmYsbiksMTcpLmEsYT1lLmEuYy5sZW5ndGgtMSxlLmEuYy5sZW5ndGghPTAmJmwoanQoZS5hLGEpLDI5NCkuYz09cj8oKytsKGp0KGUuYSxhKSwyOTQpLmEsKytsKGp0KGUuYSxhKSwyOTQpLmIpOnZ0KGUuYSxuZXcgbHJ0KHIpKX1mdW5jdGlvbiBPOW4oZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9WVNuKGUsdCxuKSxyIT0wP3I6bnModCwoZnQoKSxLaSkpJiZucyhuLEtpKT8oYT1ydShsKFEodCxLaSksMTcpLmEsbChRKG4sS2kpLDE3KS5hKSxhPDA/bFAoZSx0LG4pOmE+MCYmbFAoZSxuLHQpLGEpOndFbihlLHQsbil9ZnVuY3Rpb24gU2IoKXtTYj1VLHVDdD0ocGkoKSxuOSksbEN0PUV2LHNDdD1rdixhQ3Q9aTcsb0N0PVViLGlDdD1yNyxOSWU9WUIsY0N0PVM0LEpkZT0odWtlKCksS1R0KSxaZGU9V1R0LEJJZT1KVHQsZWdlPXRDdCxGSWU9WlR0LFJJZT1lQ3QsUEllPVlUdCxxVz1YVHQsSFc9UVR0LEZCPW5DdCxqSWU9ckN0LE9JZT1HVHR9ZnVuY3Rpb24gc3B0KGUsdCl7dmFyIG4scixhLG8sZjtpZihlLmU8PXR8fHRibihlLGUuZyx0KSlyZXR1cm4gZS5nO2ZvcihvPWUucixyPWUuZyxmPWUucixhPShvLXIpLzIrcjtyKzE8bzspbj1aQShlLGEsITEpLG4uYjw9YSYmbi5hPD10PyhmPWEsbz1hKTpyPWEsYT0oby1yKS8yK3I7cmV0dXJuIGZ9ZnVuY3Rpb24gTjluKGUsdCxuKXt2YXIgcjtyPVNidChlLHQsITApLEZndChuLCJSZWN1cnNpdmUgR3JhcGggTGF5b3V0IixyKSxZeGUodCxoZShsZShIT2UsMSksUm4sNTM2LDAsW25ldyBoaWVdKSksUDEodCwocGkoKSxhNykpfHxZeGUodCxoZShsZShIT2UsMSksUm4sNTM2LDAsW25ldyBmJF0pKSxYa2UoZSx0LG51bGwsbiksYXB0KG4pfWZ1bmN0aW9uIGFwdChlKXt2YXIgdDtpZihlLnA9PW51bGwpdGhyb3cgdWUobmV3IG5jKCJUaGUgdGFzayBoYXMgbm90IGJlZ3VuIHlldC4iKSk7ZS5ifHwoZS5rJiYodD0oVmcoKSxtbyhaYyhEYXRlLm5vdygpKSxiMikpLGUucT1GbShEZih0LGUubykpKjFlLTkpLGUuYzxlLnImJmM3ZShlLGUuci1lLmMpLGUuYj0hMCl9ZnVuY3Rpb24gUU4oZSl7dmFyIHQsbixyO2ZvcihyPW5ldyBibCx1aShyLG5ldyBsdChlLmosZS5rKSksbj1uZXcgb3IoKCFlLmEmJihlLmE9bmV3IFlzKHFoLGUsNSkpLGUuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwzNzcpLHVpKHIsbmV3IGx0KHQuYSx0LmIpKTtyZXR1cm4gdWkocixuZXcgbHQoZS5iLGUuYykpLHJ9ZnVuY3Rpb24gUDluKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDO2lmKGEpZm9yKHc9YS5hLmxlbmd0aCxvPW5ldyBEbSh3KSxDPShvLmItby5hKSpvLmM8MD8oc2IoKSx0bSk6bmV3IGNiKG8pO0MuT2IoKTspRT1sKEMuUGIoKSwxNyksZz1KayhhLEUuYSksZj1uZXcgRGF0KGUsdCxuLHIpLHJBbihmLmEsZi5iLGYuYyxmLmQsZyl9ZnVuY3Rpb24gUXhlKGUsdCl7dmFyIG47aWYocWUoZSk9PT1xZSh0KSlyZXR1cm4hMDtpZihEZSh0LDIxKSl7bj1sKHQsMjEpO3RyeXtyZXR1cm4gZS5nYygpPT1uLmdjKCkmJmUuSWMobil9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDE2OSl8fERlKHIsMjEyKSlyZXR1cm4hMTt0aHJvdyB1ZShyKX19cmV0dXJuITF9ZnVuY3Rpb24gQnVlKGUsdCxuLHIsYSxvKXtzd2l0Y2godGhpcy5jPWUsdC5nKXtjYXNlIDI6aWYoZS5hLk5lKGEsbik8MCl0aHJvdyB1ZShuZXcgWW4obEVlK2ErWXd0K24pKTticmVhaztjYXNlIDE6ZS5hLk5lKGEsYSk7YnJlYWs7Y2FzZSAzOmUuYS5OZShuLG4pfXRoaXMuZj10LHRoaXMuYj1uLHRoaXMuYT1yLHRoaXMuZT1hLHRoaXMuZD1vfWZ1bmN0aW9uIEp4ZShlLHQpe3ZhciBuO3Z0KGUuZCx0KSxuPXQuTWYoKSxlLmM/KGUuZS5hPWIuTWF0aC5tYXgoZS5lLmEsbi5hKSxlLmUuYis9bi5iLGUuZC5jLmxlbmd0aD4xJiYoZS5lLmIrPWUuYSkpOihlLmUuYSs9bi5hLGUuZS5iPWIuTWF0aC5tYXgoZS5lLmIsbi5iKSxlLmQuYy5sZW5ndGg+MSYmKGUuZS5hKz1lLmEpKX1mdW5jdGlvbiBCOW4oZSl7dmFyIHQsbixyLGE7c3dpdGNoKGE9ZS5pLHQ9YS5iLHI9YS5qLG49YS5nLGEuYS5nKXtjYXNlIDA6bi5hPShlLmcuYi5vLmEtci5hKS8yO2JyZWFrO2Nhc2UgMTpuLmE9dC5kLm4uYSt0LmQuYS5hO2JyZWFrO2Nhc2UgMjpuLmE9dC5kLm4uYSt0LmQuYS5hLXIuYTticmVhaztjYXNlIDM6bi5iPXQuZC5uLmIrdC5kLmEuYn19ZnVuY3Rpb24gRjluKGUsdCxuKXt2YXIgcixhLG87Zm9yKGE9bmV3IGhyKGRyKHNwKG4pLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLCFEbyhyKSYmISghRG8ocikmJnIuYy5pLmM9PXIuZC5pLmMpJiYobz1ZMnQoZSxyLG4sbmV3IFFRZSksby5jLmxlbmd0aD4xJiYkbih0LmMsbykpfWZ1bmN0aW9uIG9wdChlLHQsbixyLGEpe2lmKHI8dHx8YTxuKXRocm93IHVlKG5ldyBZbigiVGhlIGhpZ2h4IG11c3QgYmUgYmlnZ2VyIHRoZW4gbG93eCBhbmQgdGhlIGhpZ2h5IG11c3QgYmUgYmlnZ2VyIHRoZW4gbG93eSIpKTtyZXR1cm4gZS5hPHQ/ZS5hPXQ6ZS5hPnImJihlLmE9ciksZS5iPG4/ZS5iPW46ZS5iPmEmJihlLmI9YSksZX1mdW5jdGlvbiBSOW4oZSl7aWYoRGUoZSwxNDMpKXJldHVybiBwQ24obChlLDE0MykpO2lmKERlKGUsMjMzKSlyZXR1cm4gczVuKGwoZSwyMzMpKTtpZihEZShlLDIzKSlyZXR1cm4gYjluKGwoZSwyMykpO3Rocm93IHVlKG5ldyBZbih2U2UrVGIobmV3IElsKGhlKGxlKHdhLDEpLFJuLDEsNSxbZV0pKSkpKX1mdW5jdGlvbiBqOW4oZSx0LG4scixhKXt2YXIgbyxmLGc7Zm9yKG89ITAsZj0wO2Y8cjtmKyspbz1vJm5bZl09PTA7aWYoYT09MClwdShuLHIsZSwwLHQpLGY9dDtlbHNle2ZvcihnPTMyLWEsbz1vJm5bZl08PGc9PTAsZj0wO2Y8dC0xO2YrKyllW2ZdPW5bZityXT4+PmF8bltmK3IrMV08PGc7ZVtmXT1uW2Yrcl0+Pj5hLCsrZn1yZXR1cm4gb31mdW5jdGlvbiBaeGUoZSx0LG4scil7dmFyIGEsbyxmO2lmKHQuaz09KFpuKCksQWEpKXtmb3Iobz1uZXcgaHIoZHIoa2EodCkuYS5LYygpLG5ldyBqKSk7anIobyk7KWlmKGE9bCh4cihvKSwxOCksZj1hLmMuaS5rLGY9PUFhJiZlLmMuYVthLmMuaS5jLnBdPT1yJiZlLmMuYVt0LmMucF09PW4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gJDluKGUsdCl7dmFyIG4scixhLG87cmV0dXJuIHQmPTYzLG49ZS5oJmhwLHQ8MjI/KG89bj4+PnQsYT1lLm0+PnR8bjw8MjItdCxyPWUubD4+dHxlLm08PDIyLXQpOnQ8NDQ/KG89MCxhPW4+Pj50LTIyLHI9ZS5tPj50LTIyfGUuaDw8NDQtdCk6KG89MCxhPTAscj1uPj4+dC00NCkscXUociZlaCxhJmVoLG8maHApfWZ1bmN0aW9uIGNwdChlLHQsbixyKXt2YXIgYTt0aGlzLmI9cix0aGlzLmU9ZT09KEl3KCksb00pLGE9dFtuXSx0aGlzLmQ9TG0oaWgsW2R0LHBnXSxbMTgzLDI4XSwxNixbYS5sZW5ndGgsYS5sZW5ndGhdLDIpLHRoaXMuYT1MbShWcixbZHQsZGldLFs1MywyOF0sMTUsW2EubGVuZ3RoLGEubGVuZ3RoXSwyKSx0aGlzLmM9bmV3IE54ZSh0LG4pfWZ1bmN0aW9uIHo5bihlKXt2YXIgdCxuLHI7Zm9yKGUuaz1uZXcgRzVlKChDdCgpLGhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSkpLmxlbmd0aCxlLmouYy5sZW5ndGgpLHI9bmV3IEcoZS5qKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTEzKSx0PW4uZC5qLHhuKGUuayx0LG4pO2UuZT10Q24oVzgoZS5rKSl9ZnVuY3Rpb24gdXB0KGUsdCl7dmFyIG4scixhO25hKGUuZCx0KSxuPW5ldyBBdGUsa2koZS5jLHQsbiksbi5mPU5jZSh0LmMpLG4uYT1OY2UodC5kKSxuLmQ9KEdBKCksYT10LmMuaS5rLGE9PShabigpLFBzKXx8YT09SzEpLG4uZT0ocj10LmQuaS5rLHI9PVBzfHxyPT1LMSksbi5iPXQuYy5qPT0oQ3QoKSxlciksbi5jPXQuZC5qPT1hcn1mdW5jdGlvbiBxOW4oZSl7dmFyIHQsbixyLGEsbztmb3Iobz1JaSxhPUlpLHI9bmV3IEcoWjUoZSkpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyMTgpLHQ9bi5lLmUtbi5kLmUsbi5lPT1lJiZ0PGE/YT10OnQ8byYmKG89dCk7cmV0dXJuIGE9PUlpJiYoYT0tMSksbz09SWkmJihvPS0xKSxuZXcgY2EocHQoYSkscHQobykpfWZ1bmN0aW9uIEg5bihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gYT15NixyPShOQSgpLHVCKSxhPWIuTWF0aC5hYnMoZS5iKSxuPWIuTWF0aC5hYnModC5mLWUuYiksbjxhJiYoYT1uLHI9bUspLG49Yi5NYXRoLmFicyhlLmEpLG48YSYmKGE9bixyPWxCKSxuPWIuTWF0aC5hYnModC5nLWUuYSksbjxhJiYoYT1uLHI9YkspLHJ9ZnVuY3Rpb24gVjluKGUsdCl7dmFyIG4scixhLG87Zm9yKG49dC5hLm8uYSxvPW5ldyBacChlbyh0LmEpLmIsdC5jLHQuZisxKSxhPW5ldyBrcihvKTthLmI8YS5kLmdjKCk7KWlmKHI9KG1yKGEuYjxhLmQuZ2MoKSksbChhLmQuWGIoYS5jPWEuYisrKSwzMCkpLHIuYy5hPj1uKXJldHVybiBxRShlLHQsci5wKSwhMDtyZXR1cm4hMX1mdW5jdGlvbiBvNihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEU7Zm9yKGY9bi5sZW5ndGgsbz0wLGE9LTEsRT10aHQoKFhuKHQsZS5sZW5ndGgrMSksZS5zdWJzdHIodCkpLChnYWUoKSxwX2UpKSxnPTA7ZzxmOysrZyl3PW5bZ10ubGVuZ3RoLHc+byYmZ2duKEUsdGh0KG5bZ10scF9lKSkmJihhPWcsbz13KTtyZXR1cm4gYT49MCYmKHJbMF09dCtvKSxhfWZ1bmN0aW9uIGxwdChlKXt2YXIgdDtyZXR1cm4gZS5EYiY2ND9QdWUoZSk6KHQ9bmV3IFRoKG9TZSksIWUuYXx8aGkoaGkoKHQuYSs9JyAiJyx0KSxlLmEpLCciJyksaGkocncoaGkocncoaGkocncoaGkocncoKHQuYSs9IiAoIix0KSxlLmkpLCIsIiksZS5qKSwiIHwgIiksZS5nKSwiLCIpLGUuZiksIikiKSx0LmEpfWZ1bmN0aW9uIGhwdChlLHQsbil7dmFyIHIsYSxvLGYsZztmb3IoZz1XdShlLmUuRGgoKSx0KSxhPWwoZS5nLDEyNCkscj0wLGY9MDtmPGUuaTsrK2YpaWYobz1hW2ZdLGcuYW0oby5MaygpKSl7aWYocj09bilyZXR1cm4gVnkoZSxmKSxGbygpLGwodCw2OSkueGsoKT9vOm8ubWQoKTsrK3J9dGhyb3cgdWUobmV3IHRjKENMK24rYXYrcikpfWZ1bmN0aW9uIGZwdChlKXt2YXIgdCxuLHI7aWYodD1lLmMsdD09Mnx8dD09N3x8dD09MSlyZXR1cm4gRGkoKSxEaSgpLFdNO2ZvcihyPUdrZShlKSxuPW51bGw7KHQ9ZS5jKSE9MiYmdCE9NyYmdCE9MTspbnx8KG49KERpKCksRGkoKSxuZXcgQl8oMSkpLFFtKG4scikscj1uKSxRbShuLEdrZShlKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gVTluKGUsdCxuKXtyZXR1cm4gZTwwfHxlPm4/dTllKGUsbiwic3RhcnQgaW5kZXgiKTp0PDB8fHQ+bj91OWUodCxuLCJlbmQgaW5kZXgiKTpLQSgiZW5kIGluZGV4ICglcykgbXVzdCBub3QgYmUgbGVzcyB0aGFuIHN0YXJ0IGluZGV4ICglcykiLGhlKGxlKHdhLDEpLFJuLDEsNSxbcHQodCkscHQoZSldKSl9ZnVuY3Rpb24gZHB0KGUsdCl7dmFyIG4scixhLG87Zm9yKHI9MCxhPWUubGVuZ3RoO3I8YTtyKyspe289ZVtyXTt0cnl7b1sxXT9vWzBdLlVtKCkmJih0PVhkbih0LG8pKTpvWzBdLlVtKCl9Y2F0Y2goZil7aWYoZj1icyhmKSxEZShmLDgyKSluPWYsSHooKSxScG4oRGUobiw0ODYpP2wobiw0ODYpLmtlKCk6bik7ZWxzZSB0aHJvdyB1ZShmKX19cmV0dXJuIHR9ZnVuY3Rpb24gcUUoZSx0LG4pe3ZhciByLGEsbztmb3IobiE9dC5jK3QuYi5nYygpJiZoTG4odC5hLF8zbih0LG4tdC5jKSksbz10LmEuYy5wLGUuYVtvXT1iLk1hdGgubWF4KGUuYVtvXSx0LmEuby5hKSxhPWwoUSh0LmEsKGZ0KCksV0wpKSwxNSkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksNzIpLHJ0KHIsZzFlLChIbigpLCEwKSl9ZnVuY3Rpb24gRzluKGUsdCl7dmFyIG4scixhO2E9RUNuKHQpLHJ0KHQsKGZ0KCksVTFlKSxhKSxhJiYocj1JaSx6byhlLmYsYSkmJihyPWwoaGMoem8oZS5mLGEpKSwxNykuYSksbj1sKGp0KHQuZywwKSwxOCksUnQoQnQoUShuLFcxKSkpfHxraShlLGEscHQoYi5NYXRoLm1pbihsKFEobixLaSksMTcpLmEscikpKSl9ZnVuY3Rpb24gZ3B0KGUsdCxuKXt2YXIgcixhLG8sZixnO2Zvcih0LnA9LTEsZz1Sdyh0LChxbygpLHp1KSkuS2MoKTtnLk9iKCk7KWZvcihmPWwoZy5QYigpLDEyKSxhPW5ldyBHKGYuZyk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSxvPXIuZC5pLHQhPW8mJihvLnA8MD9uLkZjKHIpOm8ucD4wJiZncHQoZSxvLG4pKTt0LnA9MH1mdW5jdGlvbiBYdChlKXt2YXIgdDt0aGlzLmM9bmV3IG9zLHRoaXMuZj1lLmUsdGhpcy5lPWUuZCx0aGlzLmk9ZS5nLHRoaXMuZD1lLmMsdGhpcy5iPWUuYix0aGlzLms9ZS5qLHRoaXMuYT1lLmEsZS5pP3RoaXMuaj1lLmk6dGhpcy5qPSh0PWwoSzAoeGcpLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpLHRoaXMuZz1lLmZ9ZnVuY3Rpb24gSzluKGUpe3ZhciB0LG4scixhO2Zvcih0PWhiKGhpKG5ldyBUaCgiUHJlZGljYXRlcy4iKSwiYW5kIiksNDApLG49ITAsYT1uZXcga3IoZSk7YS5iPGEuZC5nYygpOylyPShtcihhLmI8YS5kLmdjKCkpLGEuZC5YYihhLmM9YS5iKyspKSxufHwodC5hKz0iLCIpLHQuYSs9IiIrcixuPSExO3JldHVybih0LmErPSIpIix0KS5hfWZ1bmN0aW9uIHBwdChlLHQsbil7dmFyIHIsYSxvO2lmKCEobjw9dCsyKSlmb3IoYT0obi10KS8yfDAscj0wO3I8YTsrK3Ipbz0oU24odCtyLGUuYy5sZW5ndGgpLGwoZS5jW3Qrcl0sMTIpKSxyZihlLHQrciwoU24obi1yLTEsZS5jLmxlbmd0aCksbChlLmNbbi1yLTFdLDEyKSkpLFNuKG4tci0xLGUuYy5sZW5ndGgpLGUuY1tuLXItMV09b31mdW5jdGlvbiBXOW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7bz1lLmQucCxnPW8uZSx3PW8ucixlLmc9bmV3IElPKHcpLGY9ZS5kLm8uYy5wLHI9Zj4wP2dbZi0xXTpXZSh3ZyxtMiwxMCwwLDAsMSksYT1nW2ZdLEU9ZjxnLmxlbmd0aC0xP2dbZisxXTpXZSh3ZyxtMiwxMCwwLDAsMSksQz10PT1uLTEsQz9sb2UoZS5nLGEsRSk6bG9lKGUuZyxyLGEpfWZ1bmN0aW9uIGJwdChlKXt2YXIgdDt0aGlzLmo9bmV3IGJ0LHRoaXMuZj1uZXcgS3MsdGhpcy5iPSh0PWwoSzAoT28pLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpLHRoaXMuZD1XZShWcixkaSwyOCwoQ3QoKSxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pKS5sZW5ndGgsMTUsMSksdGhpcy5nPWV9ZnVuY3Rpb24gbXB0KGUsdCl7dmFyIG4scixhO2lmKHQuYy5sZW5ndGghPTApe2ZvcihuPUdndChlLHQpLGE9ITE7IW47KVRVKGUsdCwhMCksYT0hMCxuPUdndChlLHQpO2EmJlRVKGUsdCwhMSkscj1iY2UodCksZS5iJiZlLmIuR2cociksZS5hPVcwdChlLChTbigwLHQuYy5sZW5ndGgpLGwodC5jWzBdLDI3KSkpLG1wdChlLHIpfX1mdW5jdGlvbiBGdWUoZSx0KXt2YXIgbixyLGE7aWYocj1NbihlLkRoKCksdCksbj10LWUuamkoKSxuPDApaWYocilpZihyLnJrKCkpYT1lLkloKHIpLGE+PTA/ZS5raShhKTpkOWUoZSxyKTtlbHNlIHRocm93IHVlKG5ldyBZbihPYityLnhlKCkra0wpKTtlbHNlIHRocm93IHVlKG5ldyBZbihmNHQrdCtkNHQpKTtlbHNlIGNmKGUsbixyKX1mdW5jdGlvbiBlOWUoZSl7dmFyIHQsbjtpZihuPW51bGwsdD0hMSxEZShlLDIxMSkmJih0PSEwLG49bChlLDIxMSkuYSksdHx8RGUoZSwyNjMpJiYodD0hMCxuPSIiK2woZSwyNjMpLmEpLHR8fERlKGUsNDkzKSYmKHQ9ITAsbj0iIitsKGUsNDkzKS5hKSwhdCl0aHJvdyB1ZShuZXcgUWllKG1TZSkpO3JldHVybiBufWZ1bmN0aW9uIHQ5ZShlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2Zvcih3PVd1KGUuZS5EaCgpLHQpLHI9MCxnPWUuaSxhPWwoZS5nLDEyNCksZj0wO2Y8ZS5pOysrZilpZihvPWFbZl0sdy5hbShvLkxrKCkpKXtpZihuPT1yKXJldHVybiBmOysrcixnPWYrMX1pZihuPT1yKXJldHVybiBnO3Rocm93IHVlKG5ldyB0YyhDTCtuK2F2K3IpKX1mdW5jdGlvbiBZOW4oZSx0KXt2YXIgbixyLGEsbztpZihlLmYuYy5sZW5ndGg9PTApcmV0dXJuIG51bGw7Zm9yKG89bmV3ICQ4LHI9bmV3IEcoZS5mKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNzIpLGE9bi5vLG8uYj1iLk1hdGgubWF4KG8uYixhLmEpLG8uYSs9YS5iO3JldHVybiBvLmErPShlLmYuYy5sZW5ndGgtMSkqdCxvfWZ1bmN0aW9uIFg5bihlKXt2YXIgdCxuLHIsYTtmb3Iobj1uZXcgb3MsS2EobixlLm8pLHI9bmV3IEZ3ZTtuLmIhPTA7KXQ9bChuLmI9PTA/bnVsbDoobXIobi5iIT0wKSxhZihuLG4uYS5hKSksNTE1KSxhPXR3dChlLHQsITApLGEmJnZ0KHIuYSx0KTtmb3IoO3IuYS5jLmxlbmd0aCE9MDspdD1sKFAwdChyKSw1MTUpLHR3dChlLHQsITEpfWZ1bmN0aW9uIGcyKCl7ZzI9VSxWT2U9bmV3IEY4KGNMLDApLHlhPW5ldyBGOCgiQk9PTEVBTiIsMSksVGM9bmV3IEY4KCJJTlQiLDIpLEo2PW5ldyBGOCgiU1RSSU5HIiwzKSxmbz1uZXcgRjgoIkRPVUJMRSIsNCkscHM9bmV3IEY4KCJFTlVNIiw1KSx0OT1uZXcgRjgoIkVOVU1TRVQiLDYpLFgxPW5ldyBGOCgiT0JKRUNUIiw3KX1mdW5jdGlvbiAkQShlLHQpe3ZhciBuLHIsYSxvLGY7cj1iLk1hdGgubWluKGUuYyx0LmMpLG89Yi5NYXRoLm1pbihlLmQsdC5kKSxhPWIuTWF0aC5tYXgoZS5jK2UuYix0LmMrdC5iKSxmPWIuTWF0aC5tYXgoZS5kK2UuYSx0LmQrdC5hKSxhPHImJihuPXIscj1hLGE9biksZjxvJiYobj1vLG89ZixmPW4pLElpdChlLHIsbyxhLXIsZi1vKX1mdW5jdGlvbiB2cHQoZSx0KXt2YXIgbixyO2lmKGUuZil7Zm9yKDt0Lk9iKCk7KWlmKG49bCh0LlBiKCksNzYpLHI9bi5MaygpLERlKHIsMTAyKSYmbChyLDE5KS5CYiZldSYmKCFlLmV8fHIucGsoKSE9b0N8fHIuTGooKSE9MCkmJm4ubWQoKSE9bnVsbClyZXR1cm4gdC5VYigpLCEwO3JldHVybiExfWVsc2UgcmV0dXJuIHQuT2IoKX1mdW5jdGlvbiB3cHQoZSx0KXt2YXIgbixyO2lmKGUuZil7Zm9yKDt0LlNiKCk7KWlmKG49bCh0LlViKCksNzYpLHI9bi5MaygpLERlKHIsMTAyKSYmbChyLDE5KS5CYiZldSYmKCFlLmV8fHIucGsoKSE9b0N8fHIuTGooKSE9MCkmJm4ubWQoKSE9bnVsbClyZXR1cm4gdC5QYigpLCEwO3JldHVybiExfWVsc2UgcmV0dXJuIHQuU2IoKX1mdW5jdGlvbiBFbCgpe0VsPVUselBlPWhlKGxlKHp0LDEpLGR0LDIsNixbSVNlLFFQLFpHLEw1dCxlSyxhMGUsekddKSwkUGU9aGUobGUoenQsMSksZHQsMiw2LFtJU2UsImVtcHR5IixRUCxYUCwiZWxlbWVudE9ubHkiXSkscVBlPWhlKGxlKHp0LDEpLGR0LDIsNixbSVNlLCJwcmVzZXJ2ZSIsInJlcGxhY2UiLHMxXSksaW89bmV3IE5pdH1mdW5jdGlvbiBuOWUoZSx0LG4pe3ZhciByLGEsbztpZih0IT1uKXtyPXQ7ZG8gT2koZSxyLmMpLGE9ci5lLGEmJihvPXIuZCxkdyhlLG8uYixvLmQpLE9pKGUsYS5uKSxyPWVvKGEpKTt3aGlsZShhKTtyPW47ZG8gbWEoZSxyLmMpLGE9ci5lLGEmJihvPXIuZCx6XyhlLG8uYixvLmQpLG1hKGUsYS5uKSxyPWVvKGEpKTt3aGlsZShhKX19ZnVuY3Rpb24gUnVlKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYoci5mLmMrci5pLmM9PTApZm9yKGY9ZS5hW2UuY10sZz0wLHc9Zi5sZW5ndGg7Zzx3OysrZylvPWZbZ10sa2kocixvLG5ldyBEZnQoZSxvLG4pKTtyZXR1cm4gYT1sKGhjKHpvKHIuZix0KSksNjc3KSxhLmI9MCxhLmM9YS5mLGEuYz09MHx8RXIobChqdChhLmEsYS5iKSwyOTQpKSxhfWZ1bmN0aW9uIHl4KCl7eXg9VSxPVD1uZXcgRV8oIk1FRElBTl9MQVlFUiIsMCkscUw9bmV3IEVfKCJUQUlMX0xBWUVSIiwxKSxJVD1uZXcgRV8oIkhFQURfTEFZRVIiLDIpLGg0PW5ldyBFXygiU1BBQ0VfRUZGSUNJRU5UX0xBWUVSIiwzKSxONj1uZXcgRV8oIldJREVTVF9MQVlFUiIsNCksTzY9bmV3IEVfKCJDRU5URVJfTEFZRVIiLDUpfWZ1bmN0aW9uIHI5ZShlKXt2YXIgdCxuLHIsYTtmb3IoZS5lPTAsYT1ScihlLmYsMCk7YS5iIT1hLmQuYzspcj1sKEJyKGEpLDEwKSxyLnA+PWUuZC5iLmMubGVuZ3RoJiYodD1uZXcgeXUoZS5kKSx0LnA9ci5wLTEsdnQoZS5kLmIsdCksbj1uZXcgeXUoZS5kKSxuLnA9ci5wLHZ0KGUuZC5iLG4pKSxWYShyLGwoanQoZS5kLmIsci5wKSwzMCkpfWZ1bmN0aW9uIGk5ZShlLHQsbil7dmFyIHIsYSxvO2lmKCFlLmJbdC5nXSl7Zm9yKGUuYlt0LmddPSEwLHI9biwhciYmKHI9bmV3IG5OKSx1aShyLmIsdCksbz1lLmFbdC5nXS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSw2NSksYS5iIT10JiZpOWUoZSxhLmIsciksYS5jIT10JiZpOWUoZSxhLmMsciksdWkoci5hLGEpO3JldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIFE5bihlKXtzd2l0Y2goZS5nKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpyZXR1cm4gQ3QoKSxRbjtjYXNlIDM6Y2FzZSA0OmNhc2UgNTpyZXR1cm4gQ3QoKSxEcjtjYXNlIDY6Y2FzZSA3OmNhc2UgODpyZXR1cm4gQ3QoKSxlcjtjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOnJldHVybiBDdCgpLGFyO2RlZmF1bHQ6cmV0dXJuIEN0KCksUGN9fWZ1bmN0aW9uIEo5bihlLHQpe3ZhciBuO3JldHVybiBlLmMubGVuZ3RoPT0wPyExOihuPUkxdCgoU24oMCxlLmMubGVuZ3RoKSxsKGUuY1swXSwxOCkpLmMuaSksU2goKSxuPT0oQnkoKSxHNil8fG49PVU2PyEwOlc1KGZjKG5ldyBibihudWxsLG5ldyBrbihlLDE2KSksbmV3IFhlZSksbmV3IFhZZSh0KSkpfWZ1bmN0aW9uIGp1ZShlLHQpe2lmKERlKHQsMjA3KSlyZXR1cm4gR2xuKGUsbCh0LDI3KSk7aWYoRGUodCwxOTMpKXJldHVybiBLbG4oZSxsKHQsMTIzKSk7aWYoRGUodCw0NTIpKXJldHVybiBVbG4oZSxsKHQsMTY2KSk7dGhyb3cgdWUobmV3IFluKHZTZStUYihuZXcgSWwoaGUobGUod2EsMSksUm4sMSw1LFt0XSkpKSkpfWZ1bmN0aW9uIHlwdChlLHQsbil7dmFyIHIsYTtpZih0aGlzLmY9ZSxyPWwoY3IoZS5iLHQpLDI2MCksYT1yP3IuYTowLGs2ZShuLGEpLG4+PShhLzJ8MCkpZm9yKHRoaXMuZT1yP3IuYzpudWxsLHRoaXMuZD1hO24rKzxhOyluaHQodGhpcyk7ZWxzZSBmb3IodGhpcy5jPXI/ci5iOm51bGw7bi0tID4wOylHNmUodGhpcyk7dGhpcy5iPXQsdGhpcy5hPW51bGx9ZnVuY3Rpb24gWjluKGUsdCl7dmFyIG4scjt0LmE/T0NuKGUsdCk6KG49bChjc2UoZS5iLHQuYiksNjApLG4mJm49PWUuYVt0LmIuZl0mJm4uYSYmbi5hIT10LmIuYSYmbi5jLkZjKHQuYikscj1sKG9zZShlLmIsdC5iKSw2MCksciYmZS5hW3IuZl09PXQuYiYmci5hJiZyLmEhPXQuYi5hJiZ0LmIuYy5GYyhyKSx0YWUoZS5iLHQuYikpfWZ1bmN0aW9uIHhwdChlLHQpe3ZhciBuLHI7aWYobj1sKFFvKGUuYix0KSwxMjcpLGwobCgkaShlLnIsdCksMjEpLDg3KS5kYygpKXtuLm4uYj0wLG4ubi5jPTA7cmV0dXJufW4ubi5iPWUuQy5iLG4ubi5jPWUuQy5jLGUuQS5IYygobWgoKSxDdikpJiZLYnQoZSx0KSxyPV82bihlLHQpLEp1ZShlLHQpPT0odDYoKSxLYikmJihyKz0yKmUudyksbi5hLmE9cn1mdW5jdGlvbiBrcHQoZSx0KXt2YXIgbixyO2lmKG49bChRbyhlLmIsdCksMTI3KSxsKGwoJGkoZS5yLHQpLDIxKSw4NykuZGMoKSl7bi5uLmQ9MCxuLm4uYT0wO3JldHVybn1uLm4uZD1lLkMuZCxuLm4uYT1lLkMuYSxlLkEuSGMoKG1oKCksQ3YpKSYmV2J0KGUsdCkscj1TNm4oZSx0KSxKdWUoZSx0KT09KHQ2KCksS2IpJiYocis9MiplLncpLG4uYS5iPXJ9ZnVuY3Rpb24gZWtuKGUsdCl7dmFyIG4scixhLG87Zm9yKG89bmV3IGJ0LHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDY4KSx2dChvLG5ldyBNM2UobiwhMCkpLHZ0KG8sbmV3IE0zZShuLCExKSk7YT1uZXcgWGF0KGUpLGEuYS5hLiRiKCksaGN0KG8sZS5iLG5ldyBJbChoZShsZShGNnQsMSksUm4sNjkzLDAsW2FdKSkpfWZ1bmN0aW9uIEVwdChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7cmV0dXJuIHc9ZS5hLHo9ZS5iLEU9dC5hLFY9dC5iLEM9bi5hLEo9bi5iLEw9ci5hLHRlPXIuYixvPXcqVi16KkUsZj1DKnRlLUoqTCxhPSh3LUUpKihKLXRlKS0oei1WKSooQy1MKSxnPShvKihDLUwpLWYqKHctRSkpL2EsQj0obyooSi10ZSktZiooei1WKSkvYSxuZXcgbHQoZyxCKX1mdW5jdGlvbiB0a24oZSx0KXt2YXIgbixyLGE7dC5VZygiRW5kIGxhYmVsIHByZS1wcm9jZXNzaW5nIiwxKSxuPXplKEdlKFEoZSwoTnQoKSxINikpKSkscj16ZShHZShRKGUseTQpKSksYT1CNShsKFEoZSxSaCksODgpKSxJcyhEYyhuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IHJJKSxuZXcgbWl0KG4scixhKSksdC5WZygpfWZ1bmN0aW9uIHM5ZShlLHQpe3ZhciBuLHIsYTtpZighZS5kW3QucF0pe2ZvcihlLmRbdC5wXT0hMCxlLmFbdC5wXT0hMCxyPW5ldyBocihkcihxcyh0KS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDE4KSwhRG8obikmJihhPW4uZC5pLGUuYVthLnBdP3Z0KGUuYixuKTpzOWUoZSxhKSk7ZS5hW3QucF09ITF9fWZ1bmN0aW9uIFRwdChlLHQsbil7dmFyIHI7c3dpdGNoKHI9MCxsKFEodCwoTnQoKSxRdSkpLDE3MSkuZyl7Y2FzZSAyOnI9MiotbitlLmEsKytlLmE7YnJlYWs7Y2FzZSAxOnI9LW47YnJlYWs7Y2FzZSAzOnI9bjticmVhaztjYXNlIDQ6cj0yKm4rZS5iLCsrZS5ifXJldHVybiBucyh0LChmdCgpLEtpKSkmJihyKz1sKFEodCxLaSksMTcpLmEpLHJ9ZnVuY3Rpb24gQ3B0KGUsdCxuKXt2YXIgcixhLG87Zm9yKG4uemModCxlKSx2dChlLm4sdCksbz1lLnAuemcodCksdC5qPT1lLnAuQWcoKT95MXQoZS5lLG8pOnkxdChlLmosbyksd0goZSksYT1yZyhMaChoZShsZShGaCwxKSxSbiwyMCwwLFtuZXcgVDUodCksbmV3IEM4KHQpXSkpKTtqcihhKTspcj1sKHhyKGEpLDEyKSxuLl9iKHIpfHxDcHQoZSxyLG4pfWZ1bmN0aW9uIG5rbihlLHQsbil7dmFyIHIsYSxvO2ZvcihuLlVnKCJQcm9jZXNzb3Igc2V0IG5laWdoYm9ycyIsMSksZS5hPXQuYi5iPT0wPzE6dC5iLmIsYT1udWxsLHI9UnIodC5iLDApOyFhJiZyLmIhPXIuZC5jOylvPWwoQnIociksNDApLFJ0KEJ0KFEobywoUWkoKSxWYikpKSkmJihhPW8pO2EmJkxidChlLG5ldyBIZyhhKSxuKSxuLlZnKCl9ZnVuY3Rpb24gYTllKGUpe3ZhciB0LG4scjtyZXR1cm4gbj1sKGF0KGUsKHBpKCksa3YpKSwyMSksbi5IYygobWgoKSxBNCkpPyhyPWwoYXQoZSxVYiksMjEpLHQ9bmV3IEVvKGwoYXQoZSxpNyksOCkpLHIuSGMoKFpsKCksYUMpKSYmKHQuYTw9MCYmKHQuYT0yMCksdC5iPD0wJiYodC5iPTIwKSksdCk6bmV3IHFhfWZ1bmN0aW9uIG85ZShlKXt2YXIgdCxuLHI7aWYoIWUuYil7Zm9yKHI9bmV3IFpuZSxuPW5ldyBIOChKQShlKSk7bi5lIT1uLmkuZ2MoKTspdD1sKHJ1ZShuKSwxOSksdC5CYiZldSYmcXIocix0KTtJeShyKSxlLmI9bmV3IE41KChsKE9lKHR0KChsYigpLFZuKS5vKSw4KSwxOSksci5pKSxyLmcpLFlsKGUpLmImPS05fXJldHVybiBlLmJ9ZnVuY3Rpb24gJHkoZSl7dmFyIHQsbixyO2ZvcihuPWUubGVuZ3RoLHI9MDtyPG4mJihYbihyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocik8PTMyKTspKytyO2Zvcih0PW47dD5yJiYoWG4odC0xLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodC0xKTw9MzIpOyktLXQ7cmV0dXJuIHI+MHx8dDxuPyhHYShyLHQsZS5sZW5ndGgpLGUuc3Vic3RyKHIsdC1yKSk6ZX1mdW5jdGlvbiBya24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO3c9bChQQShXOCh0LmspLFdlKE9vLGF1LDY0LDIsMCwxKSksMTI2KSxFPXQuZyxuPU5jdCh0LHdbMF0pLGE9T2N0KHQsd1sxXSkscj12dWUoZSxFLG4sYSksbz1OY3QodCx3WzFdKSxnPU9jdCh0LHdbMF0pLGY9dnVlKGUsRSxvLGcpLHI8PWY/KHQuYT1uLHQuYz1hKToodC5hPW8sdC5jPWcpfWZ1bmN0aW9uIEpOKGUpe3ZhciB0O0NuKCk7dmFyIG4scixhLG8sZixnO2lmKERlKGUsNTkpKWZvcihvPTAsYT1lLmdjKCktMTtvPGE7KytvLC0tYSl0PWUuWGIobyksZS5oZChvLGUuWGIoYSkpLGUuaGQoYSx0KTtlbHNlIGZvcihuPWUuZWQoKSxmPWUuZmQoZS5nYygpKTtuLlRiKCk8Zi5WYigpOylyPW4uUGIoKSxnPWYuVWIoKSxuLldiKGcpLGYuV2Iocil9ZnVuY3Rpb24geFUoZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKGc9MCxvPW5ldyB6NSxnYihvLHQpO28uYiE9by5jOylmb3IoZj1sKFg4KG8pLDIxOSksZys9V2R0KGYuZCxmLmUpLGE9bmV3IEcoZi5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMzYpLG49bChqdChlLmIsci5wKSwyMTkpLG4uc3x8KGcrPXhVKGUsbikpO3JldHVybiBnfWZ1bmN0aW9uIFNwdChlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEU7aWYodClmb3IoZz10LktjKCk7Zy5PYigpOylmb3IoZj1sKGcuUGIoKSwxMCksRT1ya2UoZiwocW8oKSx6dSksbikuS2MoKTtFLk9iKCk7KXc9bChFLlBiKCksMTIpLG89bChoYyh6byhhLmYsdykpLDExOCksb3x8KG89bmV3IHhOKGUuZCksJG4oci5jLG8pLENwdChvLHcsYSkpfWZ1bmN0aW9uIF9wdChlLHQsbil7dmFyIHIsYTtHZnQodGhpcyksdD09KFN3KCksSGIpP25hKHRoaXMucixlLmMpOm5hKHRoaXMudyxlLmMpLG49PUhiP25hKHRoaXMucixlLmQpOm5hKHRoaXMudyxlLmQpLHVwdCh0aGlzLGUpLHI9TmNlKGUuYyksYT1OY2UoZS5kKSxaZ3QodGhpcyxyLGEsYSksdGhpcy5vPShHQSgpLGIuTWF0aC5hYnMoci1hKTwuMil9ZnVuY3Rpb24gQXB0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYoZz1sKEtuKGUuYSw4KSwyMDM1KSxnIT1udWxsKWZvcihhPWcsbz0wLGY9YS5sZW5ndGg7bzxmOysrbyludWxsLlVtKCk7cj1uLGUuYS5EYiYxfHwodz1uZXcgbmF0KGUsbix0KSxyLmRqKHcpKSxEZShyLDY4Nik/bChyLDY4NikuZmooZS5hKTpyLmNqKCk9PWUuYSYmci5laihudWxsKX1mdW5jdGlvbiBpa24oKXt2YXIgZTtyZXR1cm4geUF0P2woVkUoKGliKCksR2YpLGN2KSwyMDQ0KTooTkRuKCksZT1sKERlKHh1KChpYigpLEdmKSxjdiksNTk0KT94dShHZixjdik6bmV3IGRhdCw1OTQpLHlBdD0hMCx5SW4oZSksdE9uKGUpLGtpKCh5M2UoKSxfUGUpLGUsbmV3IGxrKSx5dWUoZSkscmMoR2YsY3YsZSksZSl9ZnVuY3Rpb24gc2tuKGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPW82KGUsbixoZShsZSh6dCwxKSxkdCwyLDYsW1FsZSxKbGUsWmxlLGVoZSx0aGUsbmhlLHJoZV0pLHQpLGE8MCYmKGE9bzYoZSxuLGhlKGxlKHp0LDEpLGR0LDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKSx0KSksYTwwPyExOihyLmQ9YSwhMCl9ZnVuY3Rpb24gYWtuKGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPW82KGUsbixoZShsZSh6dCwxKSxkdCwyLDYsW1FsZSxKbGUsWmxlLGVoZSx0aGUsbmhlLHJoZV0pLHQpLGE8MCYmKGE9bzYoZSxuLGhlKGxlKHp0LDEpLGR0LDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKSx0KSksYTwwPyExOihyLmQ9YSwhMCl9ZnVuY3Rpb24ganUoZSx0LG4pe3ZhciByLGEsbyxmO2lmKGY9ZS5iLkNlKHQpLGE9KHI9ZS5hLmdldChmKSxyPz9XZSh3YSxSbiwxLDAsNSwxKSksYS5sZW5ndGg9PTApZS5hLnNldChmLGEpO2Vsc2UgaWYobz1SMHQoZSx0LGEpLG8pcmV0dXJuIG8ubmQobik7cmV0dXJuIFRzKGEsYS5sZW5ndGgsbmV3IGNxKHQsbikpLCsrZS5jLCsrZS5iLmcsbnVsbH1mdW5jdGlvbiBva24oZSl7dmFyIHQsbixyO2Zvcih3VG4oZSkscj1uZXcgYnQsbj1uZXcgRyhlLmEuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksODYpLHZ0KHIsbmV3IE8zZSh0LCEwKSksdnQocixuZXcgTzNlKHQsITEpKTtXNm4oZS5jKSxRTyhyLGUuYixuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW2UuY10pKSksSUVuKGUpfWZ1bmN0aW9uIFpOKGUsdCl7dmFyIG4scixhO2ZvcihhPW5ldyBidCxyPW5ldyBHKGUuYy5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSw2MCksdC5MYihuKSYmKHZ0KGEsbmV3IFMzZShuLCEwKSksdnQoYSxuZXcgUzNlKG4sITEpKSk7SzZuKGUuZSksaGN0KGEsZS5kLG5ldyBJbChoZShsZShGNnQsMSksUm4sNjkzLDAsW2UuZV0pKSl9ZnVuY3Rpb24gY2tuKGUpe3ZhciB0LG4scixhO2ZvcihuPW5ldyBQcixhPW5ldyBHKGUuZCk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4NyksdD1sKHIub2YoKGZ0KCksS3gpKSwxOCksem8obi5mLHQpfHxraShuLHQsbmV3IEhhdCh0KSksdnQobChoYyh6byhuLmYsdCkpLDQ2NikuYixyKTtyZXR1cm4gbmV3IE9sKG5ldyBnaShuKSl9ZnVuY3Rpb24gdWtuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iocj1uZXcgZGN0KGUuai5jLmxlbmd0aCksbj1udWxsLG89bmV3IEcoZS5qKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTIpLGEuaiE9biYmKHIuYj09ci5jfHxIMnQocixuLHQpLGw2ZShyKSxuPWEuaiksZj1DMnQoYSksZiYmaTZlKHIsZik7ci5iPT1yLmN8fEgydChyLG4sdCl9ZnVuY3Rpb24gbGtuKGUsdCl7dmFyIG4scixhO2ZvcihyPW5ldyBVYShlLmIsMCk7ci5iPHIuZC5nYygpOyluPShtcihyLmI8ci5kLmdjKCkpLGwoci5kLlhiKHIuYz1yLmIrKyksNzIpKSxhPWwoUShuLChOdCgpLGpkKSksMjc4KSxhPT0oRjEoKSxfNCkmJihwaChyKSx2dCh0LmIsbiksbnMobiwoZnQoKSxLeCkpfHxydChuLEt4LGUpKX1mdW5jdGlvbiBoa24oZSl7dmFyIHQsbixyLGEsbztmb3IodD1YZyhuZXcgaHIoZHIocXMoZSkuYS5LYygpLG5ldyBqKSkpLGE9bmV3IGhyKGRyKGthKGUpLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLG49ci5jLmksbz1YZyhuZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSkpLHQ9Yi5NYXRoLm1heCh0LG8pO3JldHVybiBwdCh0KX1mdW5jdGlvbiBjOWUoZSx0LG4pe3ZhciByLGEsbztyPWwoYXQoZSwocGkoKSxVQikpLDIxKSxhPTAsbz0wLHQuYT5uLmEmJihyLkhjKChZbSgpLEVNKSk/YT0odC5hLW4uYSkvMjpyLkhjKFRNKSYmKGE9dC5hLW4uYSkpLHQuYj5uLmImJihyLkhjKChZbSgpLFNNKSk/bz0odC5iLW4uYikvMjpyLkhjKENNKSYmKG89dC5iLW4uYikpLEh4ZShlLGEsbyl9ZnVuY3Rpb24gTHB0KGUsdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIpe0RlKGUuQ2IsOTApJiZ6eShZbChsKGUuQ2IsOTApKSw0KSxGdShlLG4pLGUuZj1mLExFKGUsZyksREUoZSx3KSxBRShlLEUpLE1FKGUsQyksdTIoZSxMKSxJRShlLEIpLGMyKGUsITApLGkyKGUsYSksZS5aayhvKSxHbShlLHQpLHIhPW51bGwmJihlLmk9bnVsbCx4VihlLHIpKX1mdW5jdGlvbiB1OWUoZSx0LG4pe2lmKGU8MClyZXR1cm4gS0EoU3d0LGhlKGxlKHdhLDEpLFJuLDEsNSxbbixwdChlKV0pKTtpZih0PDApdGhyb3cgdWUobmV3IFluKF93dCt0KSk7cmV0dXJuIEtBKCIlcyAoJXMpIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBzaXplICglcykiLGhlKGxlKHdhLDEpLFJuLDEsNSxbbixwdChlKSxwdCh0KV0pKX1mdW5jdGlvbiBsOWUoZSx0LG4scixhLG8pe3ZhciBmLGcsdyxFO2lmKGY9ci1uLGY8Nyl7VzRuKHQsbixyLG8pO3JldHVybn1pZih3PW4rYSxnPXIrYSxFPXcrKGctdz4+MSksbDllKHQsZSx3LEUsLWEsbyksbDllKHQsZSxFLGcsLWEsbyksby5OZShlW0UtMV0sZVtFXSk8PTApe2Zvcig7bjxyOylUcyh0LG4rKyxlW3crK10pO3JldHVybn1uNG4oZSx3LEUsZyx0LG4scixvKX1mdW5jdGlvbiBma24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3Iodz10LmQsYT10LmIuaixnPW5ldyBHKHcpO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTA1KSxvPVdlKGloLHBnLDI4LGEuYy5sZW5ndGgsMTYsMSksa2koZS5iLGYsbyksbj1mLmEuZC5wLTEscj1mLmMuZC5wO24hPXI7KW49KG4rMSklYS5jLmxlbmd0aCxvW25dPSEwfWZ1bmN0aW9uIGRrbihlLHQpe2lmKHM3ZSgpLG5zKGUsKGZ0KCksS2kpKSYmbnModCxLaSkpcmV0dXJuIHJ1KGwoUShlLEtpKSwxNykuYSxsKFEodCxLaSksMTcpLmEpO3Rocm93IHVlKG5ldyBJOCgiVGhlIEJGIG1vZGVsIG9yZGVyIGxheWVyIGFzc2lnbmVyIHJlcXVpcmVzIGFsbCByZWFsIG5vZGVzIHRvIGhhdmUgYSBtb2RlbCBvcmRlci4iKSl9ZnVuY3Rpb24gZ2tuKGUsdCl7aWYoYTdlKCksbnMoZSwoZnQoKSxLaSkpJiZucyh0LEtpKSlyZXR1cm4gcnUobChRKGUsS2kpLDE3KS5hLGwoUSh0LEtpKSwxNykuYSk7dGhyb3cgdWUobmV3IEk4KCJUaGUgREYgbW9kZWwgb3JkZXIgbGF5ZXIgYXNzaWduZXIgcmVxdWlyZXMgYWxsIHJlYWwgbm9kZXMgdG8gaGF2ZSBhIG1vZGVsIG9yZGVyLiIpKX1mdW5jdGlvbiBwa24oZSx0KXtmb3IoZS5yPW5ldyB4TihlLnApLFooZS5yLGUpLEthKGUuci5qLGUuaiksQ2goZS5qKSx1aShlLmosdCksdWkoZS5yLmUsdCksd0goZSksd0goZS5yKTtlLmYuYy5sZW5ndGghPTA7KVRudChsKGp0KGUuZiwwKSwxMzIpKTtmb3IoO2Uuay5jLmxlbmd0aCE9MDspVG50KGwoanQoZS5rLDApLDEzMikpO3JldHVybiBlLnJ9ZnVuY3Rpb24gJHVlKGUsdCxuKXt2YXIgcixhLG87aWYoYT1NbihlLkRoKCksdCkscj10LWUuamkoKSxyPDApaWYoYSlpZihhLnJrKCkpbz1lLkloKGEpLG8+PTA/ZS5iaShvLG4pOiQ5ZShlLGEsbik7ZWxzZSB0aHJvdyB1ZShuZXcgWW4oT2IrYS54ZSgpK2tMKSk7ZWxzZSB0aHJvdyB1ZShuZXcgWW4oZjR0K3QrZDR0KSk7ZWxzZSB1ZihlLHIsYSxuKX1mdW5jdGlvbiBNcHQoZSl7dmFyIHQsbjtpZihlLmYpe2Zvcig7ZS5uPjA7KXtpZih0PWwoZS5rLlhiKGUubi0xKSw3Niksbj10LkxrKCksRGUobiwxMDIpJiZsKG4sMTkpLkJiJmV1JiYoIWUuZXx8bi5waygpIT1vQ3x8bi5MaigpIT0wKSYmdC5tZCgpIT1udWxsKXJldHVybiEwOy0tZS5ufXJldHVybiExfWVsc2UgcmV0dXJuIGUubj4wfWZ1bmN0aW9uIERwdChlKXt2YXIgdCxuLHIsYTtpZihuPWwoZSw1NCkuX2goKSxuKXRyeXtpZihyPW51bGwsdD1WRSgoaWIoKSxHZiksYm10KGE1bihuKSkpLHQmJihhPXQuYWkoKSxhJiYocj1hLkZsKG91bihuLmUpKSkpLHImJnIhPWUpcmV0dXJuIERwdChyKX1jYXRjaChvKXtpZihvPWJzKG8pLCFEZShvLDYzKSl0aHJvdyB1ZShvKX1yZXR1cm4gZX1mdW5jdGlvbiBia24oZSx0LG4pe3ZhciByLGEsbztuLlVnKCJSZW1vdmUgb3ZlcmxhcHMiLDEpLG4uZGgodCx5Q2UpLHI9bChhdCh0LChINSgpLFk2KSksMjcpLGUuZj1yLGUuYT1zdWUobChhdCh0LChTYigpLEZCKSksMzAwKSksYT1HZShhdCh0LChwaSgpLEV2KSkpLF9lKGUsKG5yKGEpLGEpKSxvPUh5KHIpLFJ2dChlLHQsbyxuKSxuLmRoKHQsT0cpfWZ1bmN0aW9uIG1rbihlKXt2YXIgdCxuLHI7aWYoUnQoQnQoYXQoZSwocGkoKSxLQikpKSkpe2ZvcihyPW5ldyBidCxuPW5ldyBocihkcihjcChlKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDc0KSxxdyh0KSYmUnQoQnQoYXQodCxPZ2UpKSkmJiRuKHIuYyx0KTtyZXR1cm4gcn1lbHNlIHJldHVybiBDbigpLENuKCksX299ZnVuY3Rpb24gSXB0KGUpe2lmKCFlKXJldHVybiBNSmUoKSxkNnQ7dmFyIHQ9ZS52YWx1ZU9mP2UudmFsdWVPZigpOmU7aWYodCE9PWUpe3ZhciBuPV8wZVt0eXBlb2YgdF07cmV0dXJuIG4/bih0KTpaN2UodHlwZW9mIHQpfWVsc2UgcmV0dXJuIGUgaW5zdGFuY2VvZiBBcnJheXx8ZSBpbnN0YW5jZW9mIGIuQXJyYXk/bmV3IFN6KGUpOm5ldyB3ayhlKX1mdW5jdGlvbiBPcHQoZSx0LG4pe3ZhciByLGEsbztzd2l0Y2gobz1lLm8scj1sKFFvKGUucCxuKSwyNTIpLGE9ci5pLGEuYj1uUChyKSxhLmE9dFAociksYS5iPWIuTWF0aC5tYXgoYS5iLG8uYSksYS5iPm8uYSYmIXQmJihhLmI9by5hKSxhLmM9LShhLmItby5hKS8yLG4uZyl7Y2FzZSAxOmEuZD0tYS5hO2JyZWFrO2Nhc2UgMzphLmQ9by5ifWhsZShyKSxmbGUocil9ZnVuY3Rpb24gTnB0KGUsdCxuKXt2YXIgcixhLG87c3dpdGNoKG89ZS5vLHI9bChRbyhlLnAsbiksMjUyKSxhPXIuaSxhLmI9blAociksYS5hPXRQKHIpLGEuYT1iLk1hdGgubWF4KGEuYSxvLmIpLGEuYT5vLmImJiF0JiYoYS5hPW8uYiksYS5kPS0oYS5hLW8uYikvMixuLmcpe2Nhc2UgNDphLmM9LWEuYjticmVhaztjYXNlIDI6YS5jPW8uYX1obGUociksZmxlKHIpfWZ1bmN0aW9uIHZrbihlLHQpe3ZhciBuLHIsYSxvLGY7aWYoIXQuZGMoKSl7aWYoYT1sKHQuWGIoMCksMTMxKSx0LmdjKCk9PTEpe2hidChlLGEsYSwxLDAsdCk7cmV0dXJufWZvcihuPTE7bjx0LmdjKCk7KShhLmp8fCFhLm8pJiYobz1UN24odCxuKSxvJiYocj1sKG8uYSwxNykuYSxmPWwoby5iLDEzMSksaGJ0KGUsYSxmLG4scix0KSxuPXIrMSxhPWYpKX19ZnVuY3Rpb24gd2tuKGUpe3ZhciB0LG4scixhLG8sZjtmb3IoZj1uZXcgT2woZS5kKSxWcyhmLG5ldyBpOCksdD0oT1UoKSxoZShsZSh1TGUsMSksaXQsMjc2LDAsW3cxZSxrMWUsdjFlLEMxZSx4MWUseTFlLFQxZSxFMWVdKSksbj0wLG89bmV3IEcoZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEwNSkscj10W24ldC5sZW5ndGhdLHZFbihhLHIpLCsrbn1mdW5jdGlvbiB5a24oZSx0KXtoNigpO3ZhciBuLHIsYSxvO2lmKHQuYjwyKXJldHVybiExO2ZvcihvPVJyKHQsMCksbj1sKEJyKG8pLDgpLHI9bjtvLmIhPW8uZC5jOyl7aWYoYT1sKEJyKG8pLDgpLCEoZ0UoZSxyKSYmZ0UoZSxhKSkpcmV0dXJuITE7cj1hfXJldHVybiEhKGdFKGUscikmJmdFKGUsbikpfWZ1bmN0aW9uIGg5ZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMO3JldHVybiBDPW51bGwsTD1lLGY9bnAoTCwieCIpLG49bmV3IFdYZSh0KSxKdm4obi5hLGYpLGc9bnAoTCwieSIpLHI9bmV3IFlYZSh0KSxadm4oci5hLGcpLHc9bnAoTCxVZmUpLGE9bmV3IFhYZSh0KSxld24oYS5hLHcpLEU9bnAoTCxWZmUpLG89bmV3IFFYZSh0KSxDPSh0d24oby5hLEUpLEUpLEN9ZnVuY3Rpb24genkoZSx0KXtWYnQoZSx0KSxlLmImMSYmKGUuYS5hPW51bGwpLGUuYiYyJiYoZS5hLmY9bnVsbCksZS5iJjQmJihlLmEuZz1udWxsLGUuYS5pPW51bGwpLGUuYiYxNiYmKGUuYS5kPW51bGwsZS5hLmU9bnVsbCksZS5iJjgmJihlLmEuYj1udWxsKSxlLmImMzImJihlLmEuaj1udWxsLGUuYS5jPW51bGwpfWZ1bmN0aW9uIHhrbihlLHQpe3ZhciBuLHIsYTtpZihhPTAsdC5sZW5ndGg+MCl0cnl7YT1PaCh0LGxvLElpKX1jYXRjaChvKXt0aHJvdyBvPWJzKG8pLERlKG8sMTMwKT8ocj1vLHVlKG5ldyBuVihyKSkpOnVlKG8pfXJldHVybiBuPSghZS5hJiYoZS5hPW5ldyBQaWUoZSkpLGUuYSksYTxuLmkmJmE+PTA/bChPZShuLGEpLDU4KTpudWxsfWZ1bmN0aW9uIGtrbihlLHQpe2lmKGU8MClyZXR1cm4gS0EoU3d0LGhlKGxlKHdhLDEpLFJuLDEsNSxbImluZGV4IixwdChlKV0pKTtpZih0PDApdGhyb3cgdWUobmV3IFluKF93dCt0KSk7cmV0dXJuIEtBKCIlcyAoJXMpIG11c3QgYmUgbGVzcyB0aGFuIHNpemUgKCVzKSIsaGUobGUod2EsMSksUm4sMSw1LFsiaW5kZXgiLHB0KGUpLHB0KHQpXSkpfWZ1bmN0aW9uIEVrbihlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIHVsO2ZvcihvPW5ldyBIbShDbywiWyIsIl0iKSxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sby5hP2hpKG8uYSxvLmIpOm8uYT1uZXcgVGgoby5kKSxOXyhvLmEsIiIrdCk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBUa24oZSl7dmFyIHQsbixyLGEsbztpZihlPT1udWxsKXJldHVybiB1bDtmb3Iobz1uZXcgSG0oQ28sIlsiLCJdIiksbj1lLHI9MCxhPW4ubGVuZ3RoO3I8YTsrK3IpdD1uW3JdLG8uYT9oaShvLmEsby5iKTpvLmE9bmV3IFRoKG8uZCksTl8oby5hLCIiK3QpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gQ2tuKGUpe3ZhciB0LG4scixhLG87aWYoZT09bnVsbClyZXR1cm4gdWw7Zm9yKG89bmV3IEhtKENvLCJbIiwiXSIpLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxvLmE/aGkoby5hLG8uYik6by5hPW5ldyBUaChvLmQpLE5fKG8uYSwiIit0KTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIFNrbihlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIHVsO2ZvcihvPW5ldyBIbShDbywiWyIsIl0iKSxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sby5hP2hpKG8uYSxvLmIpOm8uYT1uZXcgVGgoby5kKSxOXyhvLmEsIiIrdCk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBQcHQoZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKG49ZS5iLmMubGVuZ3RoLGE9anQoZS5iLHQpO3QqMisxPG4mJihyPShvPTIqdCsxLGY9bysxLGc9byxmPG4mJmUuYS5OZShqdChlLmIsZiksanQoZS5iLG8pKTwwJiYoZz1mKSxnKSwhKGUuYS5OZShhLGp0KGUuYixyKSk8MCkpOylyZihlLmIsdCxqdChlLmIscikpLHQ9cjtyZihlLmIsdCxhKX1mdW5jdGlvbiB6dWUoZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9bi5kLGE9bi5lLGUuZ1tyLmRdPD1lLmlbdC5kXSYmZS5pW3QuZF08PWUuaVtyLmRdJiZlLmdbYS5kXTw9ZS5pW3QuZF0mJmUuaVt0LmRdPD1lLmlbYS5kXT8hKGUuaVtyLmRdPGUuaVthLmRdKTplLmlbci5kXTxlLmlbYS5kXX1mdW5jdGlvbiBfa24oZSx0KXt2YXIgbjtpZihuPWwoUSh0LChOdCgpLEpMKSksMzIyKSxuIT1lKXRocm93IHVlKG5ldyBJOCgiVGhlIGhpZXJhcmNoeSBhd2FyZSBwcm9jZXNzb3IgIituKyIgaW4gY2hpbGQgbm9kZSAiK3QrIiBpcyBvbmx5IGFsbG93ZWQgaWYgdGhlIHJvb3Qgbm9kZSBzcGVjaWZpZXMgdGhlIHNhbWUgaGllcmFyY2hpY2FsIHByb2Nlc3Nvci4iKSl9ZnVuY3Rpb24gQWtuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iocj0oIXQucyYmKHQucz1uZXcgbnQoZGwsdCwyMSwxNykpLHQucyksbz1udWxsLGE9MCxmPXIuaTthPGY7KythKXN3aXRjaChuPWwoT2UocixhKSwxNzkpLGt3KGljKGUsbikpKXtjYXNlIDI6Y2FzZSAzOiFvJiYobz1uZXcgYnQpLCRuKG8uYyxuKX1yZXR1cm4gb3x8KENuKCksQ24oKSxfbyl9ZnVuY3Rpb24gQnB0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKHc9Z3Msbz1uZXcgRyhlYnQoZS5iKSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwxNzcpLGc9bmV3IEcoZWJ0KHQuYikpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxNzcpLHI9UTNuKGEuYSxhLmIsZi5hLGYuYixuKSx3PWIuTWF0aC5taW4odyxyKTtyZXR1cm4gd31mdW5jdGlvbiBsYShlLHQpe2lmKCF0KXRocm93IHVlKG5ldyBTOCk7aWYoZS5qPXQsIWUuZClzd2l0Y2goZS5qLmcpe2Nhc2UgMTplLmEuYT1lLm8uYS8yLGUuYS5iPTA7YnJlYWs7Y2FzZSAyOmUuYS5hPWUuby5hLGUuYS5iPWUuby5iLzI7YnJlYWs7Y2FzZSAzOmUuYS5hPWUuby5hLzIsZS5hLmI9ZS5vLmI7YnJlYWs7Y2FzZSA0OmUuYS5hPTAsZS5hLmI9ZS5vLmIvMn19ZnVuY3Rpb24gTGtuKGUsdCl7dmFyIG4scixhO3JldHVybiBEZSh0LmcsMTApJiZsKHQuZywxMCkuaz09KFpuKCksVXMpP2dzOihhPWl4KHQpLGE/Yi5NYXRoLm1heCgwLGUuYi8yLS41KToobj1HNSh0KSxuPyhyPXplKEdlKFB5KG4sKE50KCksbTMpKSkpLGIuTWF0aC5tYXgoMCxyLzItLjUpKTpncykpfWZ1bmN0aW9uIE1rbihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gRGUodC5nLDEwKSYmbCh0LmcsMTApLms9PShabigpLFVzKT9nczooYT1peCh0KSxhP2IuTWF0aC5tYXgoMCxlLmIvMi0uNSk6KG49RzUodCksbj8ocj16ZShHZShQeShuLChOdCgpLG0zKSkpKSxiLk1hdGgubWF4KDAsci8yLS41KSk6Z3MpKX1mdW5jdGlvbiBEa24oZSx0KXt1MCgpO3ZhciBuLHIsYSxvLGYsZztmb3Iobj1udWxsLGY9dC5LYygpO2YuT2IoKTspbz1sKGYuUGIoKSwxMzEpLCFvLm8mJihyPWhobihvLmEpLGE9bWRuKG8uYSksZz1uZXcgUUEocixhLG51bGwsbChvLmQuYS5lYygpLktjKCkuUGIoKSwxOCkpLHZ0KGcuYyxvLmEpLCRuKGUuYyxnKSxuJiZ2dChuLmQsZyksbj1nKX1mdW5jdGlvbiBJa24oZSl7dmFyIHQsbixyLGEsbyxmO2ZvcihmPVRBKGUuZCxlLmUpLG89Zi5LYygpO28uT2IoKTspZm9yKGE9bChvLlBiKCksMTIpLHI9ZS5lPT0oQ3QoKSxlcik/YS5lOmEuZyxuPW5ldyBHKHIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxOCksIURvKHQpJiZ0LmMuaS5jIT10LmQuaS5jJiYoSTluKGUsdCksKytlLmYsKytlLmMpfWZ1bmN0aW9uIEZwdChlLHQpe3ZhciBuLHI7aWYodC5kYygpKXJldHVybiBDbigpLENuKCksX287Zm9yKHI9bmV3IGJ0LHZ0KHIscHQobG8pKSxuPTE7bjxlLmY7KytuKWUuYT09bnVsbCYmSGJ0KGUpLGUuYVtuXSYmdnQocixwdChuKSk7cmV0dXJuIHIuYy5sZW5ndGg9PTE/KENuKCksQ24oKSxfbyk6KHZ0KHIscHQoSWkpKSxxQW4odCxyKSl9ZnVuY3Rpb24gT2tuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zj10LmMuaS5rIT0oWm4oKSxQcyksdz1mP3QuZDp0LmMsbj1xN24odCx3KS5pLGE9bChjcihlLmssdyksMTI1KSxyPWUuaVtuLnBdLmEsbml0KHcuaSk8KG4uYz9nYyhuLmMuYSxuLDApOi0xKT8obz1hLGc9cik6KG89cixnPWEpLHAwKHMwKGkwKGEwKHIwKG5ldyBfZiwwKSw0KSxvKSxnKSl9ZnVuY3Rpb24gTmtuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYobilmb3IoYT1uLmEubGVuZ3RoLHI9bmV3IERtKGEpLGc9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSx3PXB1ZShlLHh4KF95KG4sZi5hKSkpLHcmJihvPSghdC5iJiYodC5iPW5ldyBMbihfcix0LDQsNykpLHQuYikscXIobyx3KSl9ZnVuY3Rpb24gUGtuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYobilmb3IoYT1uLmEubGVuZ3RoLHI9bmV3IERtKGEpLGc9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSx3PXB1ZShlLHh4KF95KG4sZi5hKSkpLHcmJihvPSghdC5jJiYodC5jPW5ldyBMbihfcix0LDUsOCkpLHQuYykscXIobyx3KSl9ZnVuY3Rpb24gZVAoZSx0LG4pe3ZhciByLGE7cj10LmEmZS5mLHQuYj1lLmJbcl0sZS5iW3JdPXQsYT10LmYmZS5mLHQuZD1lLmNbYV0sZS5jW2FdPXQsbj8odC5lPW4uZSx0LmU/dC5lLmM9dDplLmE9dCx0LmM9bi5jLHQuYz90LmMuZT10OmUuZT10KToodC5lPWUuZSx0LmM9bnVsbCxlLmU/ZS5lLmM9dDplLmE9dCxlLmU9dCksKytlLmksKytlLmd9ZnVuY3Rpb24gUnB0KGUpe3ZhciB0LG4scjtpZih0PWUuUGIoKSwhZS5PYigpKXJldHVybiB0O2ZvcihyPXd1KGhpKG5ldyB0YiwiZXhwZWN0ZWQgb25lIGVsZW1lbnQgYnV0IHdhczogPCIpLHQpLG49MDtuPDQmJmUuT2IoKTtuKyspd3UoKHIuYSs9Q28sciksZS5QYigpKTt0aHJvdyBlLk9iKCkmJihyLmErPSIsIC4uLiIpLHIuYSs9Ij4iLHVlKG5ldyBZbihyLmEpKX1mdW5jdGlvbiBCa24oZSl7dmFyIHQsbjtyZXR1cm4gbj0tZS5hLHQ9aGUobGUoa2YsMSksQWQsMjgsMTUsWzQzLDQ4LDQ4LDQ4LDQ4XSksbjwwJiYodFswXT00NSxuPS1uKSx0WzFdPXRbMV0rKChuLzYwfDApLzEwfDApJlpzLHRbMl09dFsyXSsobi82MHwwKSUxMCZacyx0WzNdPXRbM10rKG4lNjAvMTB8MCkmWnMsdFs0XT10WzRdK24lMTAmWnMsSWYodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiBmOWUoZSl7dmFyIHQsbixyLGE7Zm9yKGUuZz1uZXcgTEEobChYcihPbyksMjk3KSkscj0wLG49KEN0KCksUW4pLHQ9MDt0PGUuai5jLmxlbmd0aDt0KyspYT1sKGp0KGUuaix0KSwxMiksYS5qIT1uJiYociE9dCYmUTgoZS5nLG4sbmV3IGNhKHB0KHIpLHB0KHQpKSksbj1hLmoscj10KTtROChlLmcsbixuZXcgY2EocHQocikscHQodCkpKX1mdW5jdGlvbiBGa24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKHI9MCxuPW5ldyBHKGUuYik7bi5hPG4uYy5jLmxlbmd0aDspZm9yKHQ9bChyZShuKSwzMCksbz1uZXcgRyh0LmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihhPWwocmUobyksMTApLGEucD1yKyssZz1uZXcgRyhhLmopO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMiksZi5wPXIrK31mdW5jdGlvbiBkOWUoZSx0KXt2YXIgbixyLGE7aWYoYT1nNigoRWwoKSxpbyksZS5EaCgpLHQpLGEpRm8oKSxsKGEsNjkpLnhrKCl8fChhPXJ4KGljKGlvLGEpKSkscj0obj1lLkloKGEpLGwobj49MD9lLkxoKG4sITAsITApOkh3KGUsYSwhMCksMTYwKSksbChyLDIyMCkuWmwodCk7ZWxzZSB0aHJvdyB1ZShuZXcgWW4oT2IrdC54ZSgpK2tMKSl9ZnVuY3Rpb24gZzllKGUpe3ZhciB0LG47cmV0dXJuIGU+LTB4ODAwMDAwMDAwMDAwJiZlPDB4ODAwMDAwMDAwMDAwP2U9PTA/MDoodD1lPDAsdCYmKGU9LWUpLG49dWEoYi5NYXRoLmZsb29yKGIuTWF0aC5sb2coZSkvLjY5MzE0NzE4MDU1OTk0NTMpKSwoIXR8fGUhPWIuTWF0aC5wb3coMixuKSkmJisrbixuKTpRZnQoWmMoZSkpfWZ1bmN0aW9uIFJrbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3Iobz1uZXcgYmQsbj1uZXcgRyhlKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTMyKSxmPXQuYSxnPXQuYiwhKG8uYS5fYihmKXx8by5hLl9iKGcpKSYmKGE9ZixyPWcsZi5lLmIrZi5qLmI+MiYmZy5lLmIrZy5qLmI8PTImJihhPWcscj1mKSxvLmEuemMoYSxvKSxhLnE9cik7cmV0dXJuIG99ZnVuY3Rpb24gamtuKGUsdCxuKXtuLlVnKCJFYWRlcyByYWRpYWwiLDEpLG4uZGgodCxPRyksZS5kPWwoYXQodCwoSDUoKSxZNikpLDI3KSxlLmM9emUoR2UoYXQodCwoU2IoKSxIVykpKSksZS5lPXN1ZShsKGF0KHQsRkIpLDMwMCkpLGUuYT1nNW4obChhdCh0LGpJZSksNDM0KSksZS5iPU44bihsKGF0KHQsUEllKSwzNTQpKSxiOG4oZSksbi5kaCh0LE9HKX1mdW5jdGlvbiAka24oZSx0KXtpZih0LlVnKCJUYXJnZXQgV2lkdGggU2V0dGVyIiwxKSxQMShlLCh6MSgpLGZnZSkpKUhpKGUsKHVnKCksVDQpLEdlKGF0KGUsZmdlKSkpO2Vsc2UgdGhyb3cgdWUobmV3IFZwKCJBIHRhcmdldCB3aWR0aCBoYXMgdG8gYmUgc2V0IGlmIHRoZSBUYXJnZXRXaWR0aFdpZHRoQXBwcm94aW1hdG9yIHNob3VsZCBiZSB1c2VkLiIpKTt0LlZnKCl9ZnVuY3Rpb24ganB0KGUsdCl7dmFyIG4scixhO3JldHVybiByPW5ldyBvcChlKSxwYyhyLHQpLHJ0KHIsKGZ0KCksYVcpLHQpLHJ0KHIsKE50KCksTXMpLChSYSgpLE11KSkscnQocixSZCwob2coKSx0WSkpLHgociwoWm4oKSxVcykpLG49bmV3IGd1LE1jKG4sciksbGEobiwoQ3QoKSxlcikpLGE9bmV3IGd1LE1jKGEsciksbGEoYSxhcikscn1mdW5jdGlvbiAkcHQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcgV2llKChJdygpLERCKSk7Y2FzZSAxOnJldHVybiBuZXcgUXJlO2Nhc2UgMjpyZXR1cm4gbmV3IEpyZTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgY3Jvc3NpbmcgbWluaW1pemVyICIrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiB6cHQoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihlLmNbdC5wXT0hMCx2dChlLmEsdCksZj1uZXcgRyh0LmopO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMTIpLHI9bmV3IE4xKG8uYik7TGMoci5hKXx8TGMoci5iKTspbj1sKExjKHIuYSk/cmUoci5hKTpyZShyLmIpLDE4KSxhPSQ1bihvLG4pLmksZS5jW2EucF18fHpwdChlLGEpfWZ1bmN0aW9uIHFwdChlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IoZj0wLG49bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDI3KSxnPXQuZyxhPXQuZixyPWIuTWF0aC5zcXJ0KGcqZythKmEpLGY9Yi5NYXRoLm1heChyLGYpLG89cXB0KHQpLGY9Yi5NYXRoLm1heChvLGYpO3JldHVybiBmfWZ1bmN0aW9uIFJsKCl7Umw9VSxZYj1uZXcgRF8oIk9VVFNJREUiLDApLHZwPW5ldyBEXygiSU5TSURFIiwxKSxuRj1uZXcgRF8oIk5FWFRfVE9fUE9SVF9JRl9QT1NTSUJMRSIsMiksUE09bmV3IERfKCJBTFdBWVNfU0FNRV9TSURFIiwzKSxOTT1uZXcgRF8oIkFMV0FZU19PVEhFUl9TQU1FX1NJREUiLDQpLGE5PW5ldyBEXygiU1BBQ0VfRUZGSUNJRU5UIiw1KX1mdW5jdGlvbiBIcHQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdztyZXR1cm4gcj1IYm4oZSwoYT0ocmIoKSxvPW5ldyBhXyxvKSxuJiZMVShhLG4pLGEpLHQpLGZFKHIsWWcodCxQZCkpLG1VKHQsciksZVRuKHQsciksaDllKHQsciksZj10LGc9QXcoZiwicG9ydHMiKSx3PW5ldyBTdHQoZSxyKSxSVG4ody5hLHcuYixnKSx3Y2UoZSx0LHIpLEczbihlLHQscikscn1mdW5jdGlvbiB6a24oZSl7dmFyIHQsbjtyZXR1cm4gbj0tZS5hLHQ9aGUobGUoa2YsMSksQWQsMjgsMTUsWzQzLDQ4LDQ4LDU4LDQ4LDQ4XSksbjwwJiYodFswXT00NSxuPS1uKSx0WzFdPXRbMV0rKChuLzYwfDApLzEwfDApJlpzLHRbMl09dFsyXSsobi82MHwwKSUxMCZacyx0WzRdPXRbNF0rKG4lNjAvMTB8MCkmWnMsdFs1XT10WzVdK24lMTAmWnMsSWYodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiBxa24oZSl7dmFyIHQ7cmV0dXJuIHQ9aGUobGUoa2YsMSksQWQsMjgsMTUsWzcxLDc3LDg0LDQ1LDQ4LDQ4LDU4LDQ4LDQ4XSksZTw9MCYmKHRbM109NDMsZT0tZSksdFs0XT10WzRdKygoZS82MHwwKS8xMHwwKSZacyx0WzVdPXRbNV0rKGUvNjB8MCklMTAmWnMsdFs3XT10WzddKyhlJTYwLzEwfDApJlpzLHRbOF09dFs4XStlJTEwJlpzLElmKHQsMCx0Lmxlbmd0aCl9ZnVuY3Rpb24gSGtuKGUpe3ZhciB0LG4scixhLG87aWYoZT09bnVsbClyZXR1cm4gdWw7Zm9yKG89bmV3IEhtKENvLCJbIiwiXSIpLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxvLmE/aGkoby5hLG8uYik6by5hPW5ldyBUaChvLmQpLE5fKG8uYSwiIitZXyh0KSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBwOWUoZSx0KXt2YXIgbixyLGE7Zm9yKGE9SWkscj1uZXcgRyhaNSh0KSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDIxOCksbi5mJiYhZS5jW24uY10mJihlLmNbbi5jXT0hMCxhPWIuTWF0aC5taW4oYSxwOWUoZSxIVihuLHQpKSkpO3JldHVybiBlLmlbdC5kXT1lLmosZS5nW3QuZF09Yi5NYXRoLm1pbihhLGUuaisrKSxlLmdbdC5kXX1mdW5jdGlvbiBWcHQoZSx0KXt2YXIgbixyLGE7Zm9yKGE9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDExNyksci5lLmI9KG49ci5iLG4ucGYoKHBpKCkscmgpKT9uLmFnKCk9PShDdCgpLFFuKT8tbi5NZigpLmItemUoR2Uobi5vZihyaCkpKTp6ZShHZShuLm9mKHJoKSkpOm4uYWcoKT09KEN0KCksUW4pPy1uLk1mKCkuYjowKX1mdW5jdGlvbiBWa24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG49ZHllKGUuZSksbz1tZCh6XyhKYShmeWUoZS5lKSksZS5kKmUuYSxlLmMqZS5iKSwtLjUpLHQ9bi5hLW8uYSxhPW4uYi1vLmIsZz0wO2c8ZS5jO2crKyl7Zm9yKHI9dCxmPTA7ZjxlLmQ7ZisrKWk1bihlLmUsbmV3IGVmKHIsYSxlLmEsZS5iKSkmJkZVKGUsZixnLCExLCEwKSxyKz1lLmE7YSs9ZS5ifX1mdW5jdGlvbiBiOWUoZSl7dmFyIHQsbixyLGEsbzt0PWUuYSxuPWUuYixhPWUuYyxyPW5ldyBsdChuLmUuYStuLmYuYS8yLG4uZS5iK24uZi5iLzIpLG89bmV3IGx0KGEuZS5hK2EuZi5hLzIsYS5lLmIrYS5mLmIvMiksQ3ModCxyLHQuYSx0LmEuYSksQ3ModCxvLHQuYy5iLHQuYyksZXB0KHIsbChmZih0LDEpLDgpLGUuYi5mKSxlcHQobyxsKGZmKHQsdC5iLTIpLDgpLGUuYy5mKX1mdW5jdGlvbiB4eChlKXt2YXIgdCxuO2lmKG49ITEsRGUoZSwyMTEpKXJldHVybiBuPSEwLGwoZSwyMTEpLmE7aWYoIW4mJkRlKGUsMjYzKSYmKHQ9bChlLDI2MykuYSUxPT0wLHQpKXJldHVybiBuPSEwLHB0KF9sbihsKGUsMjYzKS5hKSk7dGhyb3cgdWUobmV3IGRkKCJJZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGludGVnZXI6ICciK2UrIicuIikpfWZ1bmN0aW9uIFVrbihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3Iobz1udWxsLGE9bmV3IElzdCgoIWUuYSYmKGUuYT1uZXcgUGllKGUpKSxlLmEpKTt4OWUoYSk7KWlmKG49bChDVShhKSw1OCkscj0oZj1uLkRoKCksZz0oZDYoZiksZi5vKSwhZ3x8IW4uWGgoZyk/bnVsbDp1NGUoZ2NlKGcpLG4uTWgoZykpKSxyIT1udWxsJiZ2bihyLHQpKXtvPW47YnJlYWt9cmV0dXJuIG99ZnVuY3Rpb24gVXB0KGUsdCxuKXt2YXIgcixhLG8sZixnO2lmKE1oKG4sIm9jY3VycmVuY2VzIiksbj09MClyZXR1cm4gZz1sKE95KGV4KGUuYSksdCksMTYpLGc/Zy5nYygpOjA7aWYoZj1sKE95KGV4KGUuYSksdCksMTYpLCFmKXJldHVybiAwO2lmKG89Zi5nYygpLG4+PW8pZi4kYigpO2Vsc2UgZm9yKGE9Zi5LYygpLHI9MDtyPG47cisrKWEuUGIoKSxhLlFiKCk7cmV0dXJuIG99ZnVuY3Rpb24gR2tuKGUsdCxuKXt2YXIgcixhLG8sZjtyZXR1cm4gTWgobiwib2xkQ291bnQiKSxNaCgwLCJuZXdDb3VudCIpLHI9bChPeShleChlLmEpLHQpLDE2KSwocj9yLmdjKCk6MCk9PW4/KE1oKDAsImNvdW50IiksYT0obz1sKE95KGV4KGUuYSksdCksMTYpLG8/by5nYygpOjApLGY9LWEsZj4wP1p3ZSgpOmY8MCYmVXB0KGUsdCwtZiksITApOiExfWZ1bmN0aW9uIHRQKGUpe3ZhciB0LG4scixhLG8sZixnO2lmKGc9MCxlLmI9PTApe2ZvcihmPV9kdChlLCEwKSx0PTAscj1mLGE9MCxvPXIubGVuZ3RoO2E8bzsrK2Epbj1yW2FdLG4+MCYmKGcrPW4sKyt0KTt0PjEmJihnKz1lLmMqKHQtMSkpfWVsc2UgZz1xSmUoY2NlKHh5KEZpKGM1ZShlLmEpLG5ldyBqYSksbmV3IE91KSkpO3JldHVybiBnPjA/ZytlLm4uZCtlLm4uYTowfWZ1bmN0aW9uIG5QKGUpe3ZhciB0LG4scixhLG8sZixnO2lmKGc9MCxlLmI9PTApZz1xSmUoY2NlKHh5KEZpKGM1ZShlLmEpLG5ldyBYYyksbmV3IEJjKSkpO2Vsc2V7Zm9yKGY9QWR0KGUsITApLHQ9MCxyPWYsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sbj4wJiYoZys9biwrK3QpO3Q+MSYmKGcrPWUuYyoodC0xKSl9cmV0dXJuIGc+MD9nK2Uubi5iK2Uubi5jOjB9ZnVuY3Rpb24gS2tuKGUpe3ZhciB0LG47aWYoZS5jLmxlbmd0aCE9Mil0aHJvdyB1ZShuZXcgbmMoIk9yZGVyIG9ubHkgYWxsb3dlZCBmb3IgdHdvIHBhdGhzLiIpKTt0PShTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDE4KSksbj0oU24oMSxlLmMubGVuZ3RoKSxsKGUuY1sxXSwxOCkpLHQuZC5pIT1uLmMuaSYmKGUuYy5sZW5ndGg9MCwkbihlLmMsbiksJG4oZS5jLHQpKX1mdW5jdGlvbiBHcHQoZSx0LG4pe3ZhciByO2ZvcihGNShuLHQuZyx0LmYpLFFoKG4sdC5pLHQuaikscj0wO3I8KCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmk7cisrKUdwdChlLGwoT2UoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLHIpLDI3KSxsKE9lKCghbi5hJiYobi5hPW5ldyBudChBaSxuLDEwLDExKSksbi5hKSxyKSwyNykpfWZ1bmN0aW9uIFdrbihlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPWwoUW8oZS5iLHQpLDEyNyksbj1vLmEsYT1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTE3KSxyLmMmJihuLmE9Yi5NYXRoLm1heChuLmEsajRlKHIuYykpKTtpZihuLmE+MClzd2l0Y2godC5nKXtjYXNlIDI6by5uLmM9ZS5zO2JyZWFrO2Nhc2UgNDpvLm4uYj1lLnN9fWZ1bmN0aW9uIFlrbihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gbj1sKFEodCwoYjAoKSxxeCkpLDE3KS5hLWwoUShlLHF4KSwxNykuYSxuPT0wPyhyPW1hKEphKGwoUShlLChiYigpLGhCKSksOCkpLGwoUShlLCRMKSw4KSksYT1tYShKYShsKFEodCxoQiksOCkpLGwoUSh0LCRMKSw4KSksWWkoci5hKnIuYixhLmEqYS5iKSk6bn1mdW5jdGlvbiBYa24oZSx0KXt2YXIgbixyLGE7cmV0dXJuIG49bChRKHQsKEhjKCksUlcpKSwxNykuYS1sKFEoZSxSVyksMTcpLmEsbj09MD8ocj1tYShKYShsKFEoZSwoUWkoKSxOQikpLDgpKSxsKFEoZSxRVCksOCkpLGE9bWEoSmEobChRKHQsTkIpLDgpKSxsKFEodCxRVCksOCkpLFlpKHIuYSpyLmIsYS5hKmEuYikpOm59ZnVuY3Rpb24gS3B0KGUpe3ZhciB0LG47cmV0dXJuIG49bmV3IHRiLG4uYSs9ImVfIix0PUgzbihlKSx0IT1udWxsJiYobi5hKz0iIit0KSxlLmMmJmUuZCYmKGhpKChuLmErPSIgIixuKSxmVShlLmMpKSxoaSh3dSgobi5hKz0iWyIsbiksZS5jLmkpLCJdIiksaGkoKG4uYSs9UGhlLG4pLGZVKGUuZCkpLGhpKHd1KChuLmErPSJbIixuKSxlLmQuaSksIl0iKSksbi5hfWZ1bmN0aW9uIFdwdChlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBhaWU7Y2FzZSAxOnJldHVybiBuZXcgZGs7Y2FzZSAyOnJldHVybiBuZXcgc2llO2Nhc2UgMzpyZXR1cm4gbmV3IGlpZTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IHBoYXNlICIrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiBtOWUoZSx0LG4scixhKXt2YXIgbztzd2l0Y2gobz0wLGEuZyl7Y2FzZSAxOm89Yi5NYXRoLm1heCgwLHQuYitlLmItKG4uYityKSk7YnJlYWs7Y2FzZSAzOm89Yi5NYXRoLm1heCgwLC1lLmItcik7YnJlYWs7Y2FzZSAyOm89Yi5NYXRoLm1heCgwLC1lLmEtcik7YnJlYWs7Y2FzZSA0Om89Yi5NYXRoLm1heCgwLHQuYStlLmEtKG4uYStyKSl9cmV0dXJuIG99ZnVuY3Rpb24gUWtuKGUsdCxuKXt2YXIgcixhLG8sZixnO2lmKG4pZm9yKGE9bi5hLmxlbmd0aCxyPW5ldyBEbShhKSxnPShyLmItci5hKSpyLmM8MD8oc2IoKSx0bSk6bmV3IGNiKHIpO2cuT2IoKTspZj1sKGcuUGIoKSwxNyksbz1KayhuLGYuYSksaFNlIGluIG8uYXx8WWZlIGluIG8uYT9oX24oZSxvLHQpOk1JbihlLG8sdCksTGhuKGwoY3IoZS5iLE5FKG8pKSw3NCkpfWZ1bmN0aW9uIHY5ZShlKXt2YXIgdCxuO3N3aXRjaChlLmIpe2Nhc2UtMTpyZXR1cm4hMDtjYXNlIDA6cmV0dXJuIG49ZS50LG4+MXx8bj09LTE/KGUuYj0tMSwhMCk6KHQ9T2YoZSksdCYmKEZvKCksdC5saygpPT1nNXQpPyhlLmI9LTEsITApOihlLmI9MSwhMSkpO2RlZmF1bHQ6Y2FzZSAxOnJldHVybiExfX1mdW5jdGlvbiB3OWUoZSx0KXt2YXIgbixyLGEsbztpZihMaShlKSxlLmMhPTB8fGUuYSE9MTIzKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxCNHQpKSkpO2lmKG89dD09MTEyLHI9ZS5kLG49TmsoZS5pLDEyNSxyKSxuPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEY0dCkpKSk7cmV0dXJuIGE9dGYoZS5pLHIsbiksZS5kPW4rMSx2bHQoYSxvLChlLmUmNTEyKT09NTEyKX1mdW5jdGlvbiBZcHQoZSl7dmFyIHQsbixyLGEsbyxmLGc7aWYocj1lLmEuYy5sZW5ndGgscj4wKWZvcihmPWUuYy5kLGc9ZS5kLmQsYT1tZChtYShuZXcgbHQoZy5hLGcuYiksZiksMS8ocisxKSksbz1uZXcgbHQoZi5hLGYuYiksbj1uZXcgRyhlLmEpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyNTApLHQuZC5hPW8uYSthLmEsdC5kLmI9by5iK2EuYixPaShvLGEpfWZ1bmN0aW9uIEprbihlLHQpe3ZhciBuLHIsYTtpZighdCllY2UoZSxudWxsKSxsRShlLG51bGwpO2Vsc2UgaWYodC5pJjQpZm9yKHI9IltdIixuPXQuYzs7bj1uLmMpe2lmKCEobi5pJjQpKXthPVF3ZSgoR2cobiksbi5vK3IpKSxlY2UoZSxhKSxsRShlLGEpO2JyZWFrfXIrPSJbXSJ9ZWxzZSBhPVF3ZSgoR2codCksdC5vKSksZWNlKGUsYSksbEUoZSxhKTtlLmhsKHQpfWZ1bmN0aW9uIHpBKGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7cmV0dXJuIHc9Y2FlKGUsbChhLDU4KSkscWUodykhPT1xZShhKT8oZz1sKGUuZ1tuXSw3Niksbz1zZyh0LHcpLFJfKGUsbixBdWUoZSxuLG8pKSxoaChlLmUpJiYoZj1kYihlLDksby5MaygpLGEsdyxyLCExKSxNeGUoZixuZXcgWmcoZS5lLDksZS5jLGcsbyxyLCExKSkscW9lKGYpKSx3KTphfWZ1bmN0aW9uIFprbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2ZvcihyPWwoJGkoZS5jLHQpLDE1KSxhPWwoJGkoZS5jLG4pLDE1KSxvPXIuZmQoci5nYygpKSxmPWEuZmQoYS5nYygpKTtvLlNiKCkmJmYuU2IoKTspaWYoZz1sKG8uVWIoKSwxNyksdz1sKGYuVWIoKSwxNyksZyE9dylyZXR1cm4gcnUoZy5hLHcuYSk7cmV0dXJuIW8uT2IoKSYmIWYuT2IoKT8wOm8uT2IoKT8xOi0xfWZ1bmN0aW9uIGVFbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IoZz1lZyhlLmMubGVuZ3RoKSxhPW5ldyBHKGUpO2EuYTxhLmMuYy5sZW5ndGg7KXtmb3Iocj1sKHJlKGEpLDEwKSxmPW5ldyBLcyxvPXFzKHIpLG49bmV3IGhyKGRyKG8uYS5LYygpLG5ldyBqKSk7anIobik7KXQ9bCh4cihuKSwxOCksdC5jLmk9PXQuZC5pfHxuYShmLHQuZC5pKTskbihnLmMsZil9cmV0dXJuIGd9ZnVuY3Rpb24gWHB0KGUsdCl7dmFyIG4scixhO3RyeXtyZXR1cm4gYT1mYm4oZS5hLHQpLGF9Y2F0Y2gobyl7aWYobz1icyhvKSxEZShvLDMzKSl7dHJ5e2lmKHI9T2godCxsbyxJaSksbj1LMChlLmEpLHI+PTAmJnI8bi5sZW5ndGgpcmV0dXJuIG5bcl19Y2F0Y2goZil7aWYoZj1icyhmKSwhRGUoZiwxMzApKXRocm93IHVlKGYpfXJldHVybiBudWxsfWVsc2UgdGhyb3cgdWUobyl9fWZ1bmN0aW9uIHF1ZShlLHQpe3ZhciBuLHIsYTtpZihhPWc2KChFbCgpLGlvKSxlLkRoKCksdCksYSlyZXR1cm4gRm8oKSxsKGEsNjkpLnhrKCl8fChhPXJ4KGljKGlvLGEpKSkscj0obj1lLkloKGEpLGwobj49MD9lLkxoKG4sITAsITApOkh3KGUsYSwhMCksMTYwKSksbChyLDIyMCkuV2wodCk7dGhyb3cgdWUobmV3IFluKE9iK3QueGUoKSskZmUpKX1mdW5jdGlvbiB0RW4oKXt4M2UoKTt2YXIgZTtyZXR1cm4gSl90P2woVkUoKGliKCksR2YpLEZmKSwyMDM4KTood2kodXYsbmV3IE9JKSxYTW4oKSxlPWwoRGUoeHUoKGliKCksR2YpLEZmKSw1NjApP3h1KEdmLEZmKTpuZXcgZmF0LDU2MCksSl90PSEwLFFJbihlKSxpT24oZSksa2koKHkzZSgpLF9QZSksZSxuZXcgazEpLHJjKEdmLEZmLGUpLGUpfWZ1bmN0aW9uIG5FbihlLHQpe3ZhciBuLHIsYSxvO2Uuaj0tMSxoaChlLmUpPyhuPWUuaSxvPWUuaSE9MCx0TihlLHQpLHI9bmV3IFpnKGUuZSwzLGUuYyxudWxsLHQsbixvKSxhPXQuemwoZS5lLGUuYyxudWxsKSxhPUxndChlLHQsYSksYT8oYS5uaihyKSxhLm9qKCkpOk5pKGUuZSxyKSk6KHROKGUsdCksYT10LnpsKGUuZSxlLmMsbnVsbCksYSYmYS5vaigpKX1mdW5jdGlvbiBrVShlLHQpe3ZhciBuLHIsYTtpZihhPTAscj10WzBdLHI+PWUubGVuZ3RoKXJldHVybi0xO2ZvcihuPShYbihyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocikpO24+PTQ4JiZuPD01NyYmKGE9YSoxMCsobi00OCksKytyLCEocj49ZS5sZW5ndGgpKTspbj0oWG4ocixlLmxlbmd0aCksZS5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gcj50WzBdP3RbMF09cjphPS0xLGF9ZnVuY3Rpb24gckVuKGUpe3ZhciB0LG4scixhLG87cmV0dXJuIGE9bChlLmEsMTcpLmEsbz1sKGUuYiwxNykuYSxuPWEscj1vLHQ9Yi5NYXRoLm1heChiLk1hdGguYWJzKGEpLGIuTWF0aC5hYnMobykpLGE8PTAmJmE9PW8/KG49MCxyPW8tMSk6YT09LXQmJm8hPXQ/KG49byxyPWEsbz49MCYmKytuKToobj0tbyxyPWEpLG5ldyBjYShwdChuKSxwdChyKSl9ZnVuY3Rpb24gaUVuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3IoYT0wO2E8dC5vO2ErKylmb3Iobz1hLXQuaituLGY9MDtmPHQucDtmKyspaWYoZz1mLXQuaytyLHc9byxFPWcsdys9ZS5qLEUrPWUuayx3Pj0wJiZFPj0wJiZ3PGUubyYmRTxlLnAmJighTmR0KHQsYSxmKSYmRGR0KGUsbyxnKXx8cjYodCxhLGYpJiYhWDZuKGUsbyxnKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gc0VuKGUsdCxuKXt2YXIgcixhLG8sZixnO2Y9ZS5jLGc9ZS5kLG89SWMoaGUobGUoRWEsMSksZHQsOCwwLFtmLmkubixmLm4sZi5hXSkpLmIsYT0obytJYyhoZShsZShFYSwxKSxkdCw4LDAsW2cuaS5uLGcubixnLmFdKSkuYikvMixyPW51bGwsZi5qPT0oQ3QoKSxhcik/cj1uZXcgbHQodCtmLmkuYy5jLmErbixhKTpyPW5ldyBsdCh0LW4sYSksUGsoZS5hLDAscil9ZnVuY3Rpb24gcXcoZSl7dmFyIHQsbixyLGE7Zm9yKHQ9bnVsbCxyPXJnKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsWyghZS5iJiYoZS5iPW5ldyBMbihfcixlLDQsNykpLGUuYiksKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKV0pKSk7anIocik7KWlmKG49bCh4cihyKSw4NCksYT1iYyhuKSwhdCl0PWE7ZWxzZSBpZih0IT1hKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEh1ZShlLHQsbil7dmFyIHI7aWYoKytlLmosdD49ZS5pKXRocm93IHVlKG5ldyB0YyhRZmUrdCthditlLmkpKTtpZihuPj1lLmkpdGhyb3cgdWUobmV3IHRjKEpmZStuK2F2K2UuaSkpO3JldHVybiByPWUuZ1tuXSx0IT1uJiYodDxuP3B1KGUuZyx0LGUuZyx0KzEsbi10KTpwdShlLmcsbisxLGUuZyxuLHQtbiksVHMoZS5nLHQsciksZS5QaSh0LHIsbiksZS5OaSgpKSxyfWZ1bmN0aW9uIHhuKGUsdCxuKXt2YXIgcjtpZihyPWwoZS5jLnhjKHQpLDE2KSxyKXJldHVybiByLkZjKG4pPygrK2UuZCwhMCk6ITE7aWYocj1lLmljKHQpLHIuRmMobikpcmV0dXJuKytlLmQsZS5jLnpjKHQsciksITA7dGhyb3cgdWUobmV3IHc2ZSgiTmV3IENvbGxlY3Rpb24gdmlvbGF0ZWQgdGhlIENvbGxlY3Rpb24gc3BlYyIpKX1mdW5jdGlvbiByUChlKXt2YXIgdCxuLHI7cmV0dXJuIGU8MD8wOmU9PTA/MzI6KHI9LShlPj4xNiksdD1yPj4xNiYxNixuPTE2LXQsZT1lPj50LHI9ZS0yNTYsdD1yPj4xNiY4LG4rPXQsZTw8PXQscj1lLVh5LHQ9cj4+MTYmNCxuKz10LGU8PD10LHI9ZS1fZCx0PXI+PjE2JjIsbis9dCxlPDw9dCxyPWU+PjE0LHQ9ciZ+KHI+PjEpLG4rMi10KX1mdW5jdGlvbiBhRW4oZSl7dHgoKTt2YXIgdCxuLHIsYTtmb3Iod0s9bmV3IGJ0LFgwZT1uZXcgUHIsWTBlPW5ldyBidCx0PSghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSxYRG4odCksYT1uZXcgb3IodCk7YS5lIT1hLmkuZ2MoKTspcj1sKGdyKGEpLDI3KSxnYyh3SyxyLDApPT0tMSYmKG49bmV3IGJ0LHZ0KFkwZSxuKSxaMXQocixuKSk7cmV0dXJuIFkwZX1mdW5jdGlvbiBvRW4oZSx0LG4pe3ZhciByLGEsbyxmO2UuYT1uLmIuZCxEZSh0LDMyNik/KGE9bDYobCh0LDc0KSwhMSwhMSksbz1RTihhKSxyPW5ldyB0XyhlKSx0byhvLHIpLGRQKG8sYSksdC5vZigocGkoKSx4MykpIT1udWxsJiZ0byhsKHQub2YoeDMpLDc1KSxyKSk6KGY9bCh0LDQyMiksZi5yaChmLm5oKCkrZS5hLmEpLGYuc2goZi5vaCgpK2UuYS5iKSl9ZnVuY3Rpb24gY0VuKGUsdCl7dmFyIG4scixhO2ZvcihhPW5ldyBidCxyPVJyKHQuYSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksNjUpLG4uYy5nPT1lLmcmJnFlKFEobi5iLChIYygpLCRkKSkpIT09cWUoUShuLmMsJGQpKSYmIVc1KG5ldyBibihudWxsLG5ldyBrbihhLDE2KSksbmV3IGNYZShuKSkmJiRuKGEuYyxuKTtyZXR1cm4gVnMoYSxuZXcgTXRlKSxhfWZ1bmN0aW9uIFFwdChlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIERlKHQsMTUzKSYmRGUobiwxNTMpPyhvPWwodCwxNTMpLGY9bChuLDE1MyksZS5hW28uYV1bZi5hXStlLmFbZi5hXVtvLmFdKTpEZSh0LDI1MCkmJkRlKG4sMjUwKSYmKHI9bCh0LDI1MCksYT1sKG4sMjUwKSxyLmE9PWEuYSk/bChRKGEuYSwoYjAoKSxxeCkpLDE3KS5hOjB9ZnVuY3Rpb24gSnB0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtmb3IoRT16ZShHZShRKHQsKE50KCksdE0pKSkpLHc9ZVswXS5uLmErZVswXS5vLmErZVswXS5kLmMrRSxnPTE7ZzxlLmxlbmd0aDtnKyspcj1lW2ddLm4sYT1lW2ddLm8sbj1lW2ddLmQsbz1yLmEtbi5iLXcsbzwwJiYoci5hLT1vKSxmPXQuZixmLmE9Yi5NYXRoLm1heChmLmEsci5hK2EuYSksdz1yLmErYS5hK24uYytFfWZ1bmN0aW9uIHVFbihlLHQpe3ZhciBuLHIsYSxvLGYsZztyZXR1cm4gcj1sKGwoY3IoZS5nLHQuYSksNDIpLmEsNjgpLGE9bChsKGNyKGUuZyx0LmIpLDQyKS5hLDY4KSxvPXIuYixmPWEuYixuPVBMbihvLGYpLG4+PTA/bjooZz1lQShtYShuZXcgbHQoZi5jK2YuYi8yLGYuZCtmLmEvMiksbmV3IGx0KG8uYytvLmIvMixvLmQrby5hLzIpKSksLShUbXQobyxmKS0xKSpnKX1mdW5jdGlvbiBsRW4oZSx0LG4pe3ZhciByO0lzKG5ldyBibihudWxsLCghbi5hJiYobi5hPW5ldyBudChjcyxuLDYsNikpLG5ldyBrbihuLmEsMTYpKSksbmV3IGR0dChlLHQpKSxJcyhuZXcgYm4obnVsbCwoIW4ubiYmKG4ubj1uZXcgbnQoZWMsbiwxLDcpKSxuZXcga24obi5uLDE2KSkpLG5ldyBndHQoZSx0KSkscj1sKGF0KG4sKHBpKCkseDMpKSw3NSksciYmazdlKHIsZSx0KX1mdW5jdGlvbiBIdyhlLHQsbil7dmFyIHIsYSxvO2lmKG89ZzYoKEVsKCksaW8pLGUuRGgoKSx0KSxvKXJldHVybiBGbygpLGwobyw2OSkueGsoKXx8KG89cngoaWMoaW8sbykpKSxhPShyPWUuSWgobyksbChyPj0wP2UuTGgociwhMCwhMCk6SHcoZSxvLCEwKSwxNjApKSxsKGEsMjIwKS5TbCh0LG4pO3Rocm93IHVlKG5ldyBZbihPYit0LnhlKCkrJGZlKSl9ZnVuY3Rpb24geTllKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYoYT1lLmRbdF0sYSl7aWYobz1hLmcsdz1hLmksciE9bnVsbCl7Zm9yKGc9MDtnPHc7KytnKWlmKGY9bChvW2ddLDEzNiksZi5CaSgpPT1uJiZQaShyLGYubGQoKSkpcmV0dXJuIGZ9ZWxzZSBmb3IoZz0wO2c8dzsrK2cpaWYoZj1sKG9bZ10sMTM2KSxxZShmLmxkKCkpPT09cWUocikpcmV0dXJuIGZ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaEVuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iocj0oIXQucyYmKHQucz1uZXcgbnQoZGwsdCwyMSwxNykpLHQucyksbz1udWxsLGE9MCxmPXIuaTthPGY7KythKXN3aXRjaChuPWwoT2UocixhKSwxNzkpLGt3KGljKGUsbikpKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNjp7IW8mJihvPW5ldyBidCksJG4oby5jLG4pO2JyZWFrfX1yZXR1cm4gb3x8KENuKCksQ24oKSxfbyl9ZnVuY3Rpb24gaVAoZSx0KXt2YXIgbjtpZih0PDApdGhyb3cgdWUobmV3IHF6KCJOZWdhdGl2ZSBleHBvbmVudCIpKTtpZih0PT0wKXJldHVybiB1SztpZih0PT0xfHxDOGUoZSx1Syl8fEM4ZShlLEJMKSlyZXR1cm4gZTtpZighVDJ0KGUsMCkpe2ZvcihuPTE7IVQydChlLG4pOykrK247cmV0dXJuIEs1KHk1bihuKnQpLGlQKHY2ZShlLG4pLHQpKX1yZXR1cm4gU3huKGUsdCl9ZnVuY3Rpb24gZkVuKGUsdCl7dmFyIG4scixhO2lmKHFlKGUpPT09cWUodCkpcmV0dXJuITA7aWYoZT09bnVsbHx8dD09bnVsbHx8ZS5sZW5ndGghPXQubGVuZ3RoKXJldHVybiExO2ZvcihuPTA7bjxlLmxlbmd0aDsrK24paWYocj1lW25dLGE9dFtuXSwhKHFlKHIpPT09cWUoYSl8fHIhPW51bGwmJlBpKHIsYSkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFpwdChlKXt2M2UoKTt2YXIgdCxuLHI7Zm9yKHRoaXMuYj1UOHQsdGhpcy5jPShKcygpLEoxKSx0aGlzLmY9KGNldCgpLEU4dCksdGhpcy5hPWUsczNlKHRoaXMsbmV3IFg3KSxNVSh0aGlzKSxyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDg2KSxuLmR8fCh0PW5ldyBRY2UoaGUobGUocjFlLDEpLFJuLDg2LDAsW25dKSksdnQoZS5hLHQpKX1mdW5jdGlvbiBkRW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztpZighZXx8ZS5jLmxlbmd0aD09MClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgbm90KHQsIW4pLGE9bmV3IEcoZSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDcyKSxKeGUobywoZ18oKSxuZXcgWmQocikpKTtyZXR1cm4gZj1vLmksZi5hPSh3PW8ubixvLmUuYit3LmQrdy5hKSxmLmI9KGc9by5uLG8uZS5hK2cuYitnLmMpLG99ZnVuY3Rpb24gZTJ0KGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihnPUpPKGUuYSksY3llKGcsbmV3IHQwKSxuPW51bGwsYT1nLG89MCxmPWEubGVuZ3RoO288ZiYmKHI9YVtvXSxyLms9PShabigpLFVzKSk7KytvKXQ9bChRKHIsKGZ0KCksV2MpKSw2NCksISh0IT0oQ3QoKSxlcikmJnQhPWFyKSYmKG4mJmwoUShuLFd4KSwxNSkuRmMociksbj1yKX1mdW5jdGlvbiBnRW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFO3c9KFNuKHQsZS5jLmxlbmd0aCksbChlLmNbdF0sMzM5KSksdDIoZSx0KSx3LmIvMj49biYmKHI9dCxFPSh3LmMrdy5hKS8yLGY9RS1uLHcuYzw9RS1uJiYoYT1uZXcgdmFlKHcuYyxmKSxwdyhlLHIrKyxhKSksZz1FK24sZzw9dy5hJiYobz1uZXcgdmFlKGcsdy5hKSxFeShyLGUuYy5sZW5ndGgpLHhfKGUuYyxyLG8pKSl9ZnVuY3Rpb24gdDJ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYoIXQuZGMoKSl7Zm9yKGE9bmV3IG9zLHc9dC5LYygpO3cuT2IoKTspZm9yKGc9bCh3LlBiKCksNDApLGtpKGUuYSxwdChnLmcpLHB0KG4pKSxmPShyPVJyKG5ldyBIZyhnKS5hLmQsMCksbmV3IEM1KHIpKTtRSShmLmEpOylvPWwoQnIoZi5hKSw2NSkuYyxDcyhhLG8sYS5jLmIsYS5jKTt0MnQoZSxhLG4rMSl9fWZ1bmN0aW9uIHg5ZShlKXt2YXIgdDtpZighZS5jJiZlLmc9PW51bGwpZS5kPWUuYmooZS5mKSxxcihlLGUuZCksdD1lLmQ7ZWxzZXtpZihlLmc9PW51bGwpcmV0dXJuITA7aWYoZS5pPT0wKXJldHVybiExO3Q9bChlLmdbZS5pLTFdLDUxKX1yZXR1cm4gdD09ZS5iJiZudWxsLlZtPj1udWxsLlVtKCk/KENVKGUpLHg5ZShlKSk6dC5PYigpfWZ1bmN0aW9uIG4ydChlKXtpZih0aGlzLmE9ZSxlLmMuaS5rPT0oWm4oKSxVcykpdGhpcy5jPWUuYyx0aGlzLmQ9bChRKGUuYy5pLChmdCgpLFdjKSksNjQpO2Vsc2UgaWYoZS5kLmkuaz09VXMpdGhpcy5jPWUuZCx0aGlzLmQ9bChRKGUuZC5pLChmdCgpLFdjKSksNjQpO2Vsc2UgdGhyb3cgdWUobmV3IFluKCJFZGdlICIrZSsiIGlzIG5vdCBhbiBleHRlcm5hbCBlZGdlLiIpKX1mdW5jdGlvbiByMnQoZSx0KXt2YXIgbixyLGE7YT1lLmIsZS5iPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwzLGEsZS5iKSksdD90IT1lJiYoRnUoZSx0LnpiKSxRb2UoZSx0LmQpLG49KHI9dC5jLHI/P3QuemIpLFpvZShlLG49PW51bGx8fHZuKG4sdC56Yik/bnVsbDpuKSk6KEZ1KGUsbnVsbCksUW9lKGUsMCksWm9lKGUsbnVsbCkpfWZ1bmN0aW9uIGkydChlLHQpe3ZhciBuO3RoaXMuZT0od3coKSxYcihlKSx3dygpLFA4ZShlKSksdGhpcy5jPShYcih0KSxQOGUodCkpLFR5ZSh0aGlzLmUuUmQoKS5kYygpPT10aGlzLmMuUmQoKS5kYygpKSx0aGlzLmQ9dzF0KHRoaXMuZSksdGhpcy5iPXcxdCh0aGlzLmMpLG49TG0od2EsW2R0LFJuXSxbNSwxXSw1LFt0aGlzLmUuUmQoKS5nYygpLHRoaXMuYy5SZCgpLmdjKCldLDIpLHRoaXMuYT1uLGp3bih0aGlzKX1mdW5jdGlvbiBzMnQoZSl7IUMwZSYmKEMwZT1jSW4oKSk7dmFyIHQ9ZS5yZXBsYWNlKC9bXHgwMC1ceDFmXHhhZFx1MDYwMC1cdTA2MDNcdTA2ZGRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGItXHUyMDBmXHUyMDI4LVx1MjAyZVx1MjA2MC1cdTIwNjRcdTIwNmEtXHUyMDZmXHVmZWZmXHVmZmY5LVx1ZmZmYiJcXF0vZyxmdW5jdGlvbihuKXtyZXR1cm4gZjJuKG4pfSk7cmV0dXJuJyInK3QrJyInfWZ1bmN0aW9uIGs5ZShlLHQsbixyLGEsbyl7dmFyIGYsZyx3LEUsQztpZihhIT0wKWZvcihxZShlKT09PXFlKG4pJiYoZT1lLnNsaWNlKHQsdCthKSx0PTApLHc9bixnPXQsRT10K2E7ZzxFOylmPWIuTWF0aC5taW4oZysxZTQsRSksYT1mLWcsQz1lLnNsaWNlKGcsZiksQy5zcGxpY2UoMCwwLHIsbz9hOjApLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkodyxDKSxnPWYscis9YX1mdW5jdGlvbiBhMnQoZSl7UDVlKCk7dmFyIHQsbjtmb3IodGhpcy5iPWo2dCx0aGlzLmM9ejZ0LHRoaXMuZz0ob2V0KCksUjZ0KSx0aGlzLmQ9KEpzKCksSjEpLHRoaXMuYT1lLFY5ZSh0aGlzKSxuPW5ldyBHKGUuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDYwKSwhdC5hJiZlcnQoR2h0KG5ldyBJd2UsaGUobGUoZEssMSksUm4sNjAsMCxbdF0pKSxlKSx0LmU9bmV3IE1IKHQuZCl9ZnVuY3Rpb24gcEVuKGUpe3ZhciB0LG4scixhLG8sZjtmb3IoYT1lLmUuYy5sZW5ndGgscj1XZShtZixReSwxNSxhLDAsMSksZj1uZXcgRyhlLmUpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxNTMpLHJbby5hXT1uZXcgb3M7Zm9yKG49bmV3IEcoZS5jKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMjkwKSxyW3QuYy5hXS5GYyh0KSxyW3QuZC5hXS5GYyh0KTtyZXR1cm4gcn1mdW5jdGlvbiBiRW4oZSx0KXt2YXIgbixyLGEsbyxmO2lmKG49bChLbihlLmEsNCksMTI5KSxmPW49PW51bGw/MDpuLmxlbmd0aCx0Pj1mKXRocm93IHVlKG5ldyBteSh0LGYpKTtyZXR1cm4gYT1uW3RdLGY9PTE/cj1udWxsOihyPVdlKGVwZSxyMGUsNDI0LGYtMSwwLDEpLHB1KG4sMCxyLDAsdCksbz1mLXQtMSxvPjAmJnB1KG4sdCsxLHIsdCxvKSksUEUoZSxyKSxBcHQoZSx0LGEpLGF9ZnVuY3Rpb24gbzJ0KGUpe3ZhciB0LG47aWYoZS5mKXtmb3IoO2UubjxlLm87KXtpZih0PWwoZS5qP2Uuai4kaShlLm4pOmUuay5YYihlLm4pLDc2KSxuPXQuTGsoKSxEZShuLDEwMikmJmwobiwxOSkuQmImZXUmJighZS5lfHxuLnBrKCkhPW9DfHxuLkxqKCkhPTApJiZ0Lm1kKCkhPW51bGwpcmV0dXJuITA7KytlLm59cmV0dXJuITF9ZWxzZSByZXR1cm4gZS5uPGUub31mdW5jdGlvbiBreCgpe2t4PVUsdTk9bChPZSh0dCgodTNlKCksdHUpLnFiKSw2KSwzNSksYzk9bChPZSh0dCh0dS5xYiksMyksMzUpLGFwZT1sKE9lKHR0KHR1LnFiKSw0KSwzNSksb3BlPWwoT2UodHQodHUucWIpLDUpLDE5KSxwVSh1OSkscFUoYzkpLHBVKGFwZSkscFUob3BlKSxuQXQ9bmV3IElsKGhlKGxlKGRsLDEpLFM2LDE3OSwwLFt1OSxjOV0pKX1mdW5jdGlvbiBjMnQoZSx0KXt2YXIgbjt0aGlzLmQ9bmV3IHNfLHRoaXMuYj10LHRoaXMuZT1uZXcgRW8odC5MZigpKSxuPWUudS5IYygoUmwoKSxuRikpLGUudS5IYyh2cCk/ZS5EP3RoaXMuYT1uJiYhdC5iZygpOnRoaXMuYT0hMDplLnUuSGMoWWIpP24/dGhpcy5hPSEodC5VZigpLktjKCkuT2IoKXx8dC5XZigpLktjKCkuT2IoKSk6dGhpcy5hPSExOnRoaXMuYT0hMX1mdW5jdGlvbiB1MnQoZSx0KXt2YXIgbixyLGEsbztmb3Iobj1lLm8uYSxvPWwobCgkaShlLnIsdCksMjEpLDg3KS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwxMTcpLGEuZS5hPShyPWEuYixyLnBmKChwaSgpLHJoKSk/ci5hZygpPT0oQ3QoKSxlcik/LXIuTWYoKS5hLXplKEdlKHIub2YocmgpKSk6bit6ZShHZShyLm9mKHJoKSkpOnIuYWcoKT09KEN0KCksZXIpPy1yLk1mKCkuYTpuKX1mdW5jdGlvbiBsMnQoZSx0KXt2YXIgbixyLGEsbztuPWwoUShlLChOdCgpLFJoKSksODgpLG89bChhdCh0LFZUKSw2NCksYT1sKFEoZSxNcyksMTAxKSxhIT0oUmEoKSxaMSkmJmEhPVdiP289PShDdCgpLFBjKSYmKG89RWtlKHQsbiksbz09UGMmJihvPWd4KG4pKSk6KHI9bHZ0KHQpLHI+MD9vPWd4KG4pOm89Qk4oZ3gobikpKSxIaSh0LFZULG8pfWZ1bmN0aW9uIG1FbihlLHQpe3ZhciBuO3QuVWcoIlBhcnRpdGlvbiBwcmVwcm9jZXNzaW5nIiwxKSxuPWwoeWMoRmkoRGMoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYSwxNikpLG5ldyBBWiksbmV3IExaKSxuZXcgd2opLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxJcyhuLk9jKCksbmV3IHQ4KSx0LlZnKCl9ZnVuY3Rpb24gdkVuKGUsdCl7dmFyIG4scixhLG8sZjtmb3IoZj1lLmosdC5hIT10LmImJlZzKGYsbmV3IGtTKSxhPWYuYy5sZW5ndGgvMnwwLHI9MDtyPGE7cisrKW89KFNuKHIsZi5jLmxlbmd0aCksbChmLmNbcl0sMTEzKSksby5jJiZsYShvLmQsdC5hKTtmb3Iobj1hO248Zi5jLmxlbmd0aDtuKyspbz0oU24obixmLmMubGVuZ3RoKSxsKGYuY1tuXSwxMTMpKSxvLmMmJmxhKG8uZCx0LmIpfWZ1bmN0aW9uIHdFbihlLHQsbil7dmFyIHIsYSxvO3JldHVybiByPWUuY1t0LmMucF1bdC5wXSxhPWUuY1tuLmMucF1bbi5wXSxyLmEhPW51bGwmJmEuYSE9bnVsbD8obz1OYWUoci5hLGEuYSksbzwwP2xQKGUsdCxuKTpvPjAmJmxQKGUsbix0KSxvKTpyLmEhPW51bGw/KGxQKGUsdCxuKSwtMSk6YS5hIT1udWxsPyhsUChlLG4sdCksMSk6MH1mdW5jdGlvbiB5RW4oZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihhPXQuYi5iLGUuYT1XZShtZixReSwxNSxhLDAsMSksZS5iPVdlKGloLHBnLDI4LGEsMTYsMSksZj1Scih0LmIsMCk7Zi5iIT1mLmQuYzspbz1sKEJyKGYpLDQwKSxlLmFbby5nXT1uZXcgb3M7Zm9yKHI9UnIodC5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksZS5hW24uYi5nXS5GYyhuKSxlLmFbbi5jLmddLkZjKG4pfWZ1bmN0aW9uIGgydChlLHQpe3ZhciBuLHIsYSxvO2UuUGooKT8obj1lLkVqKCksbz1lLlFqKCksKytlLmosZS5xaihuLGUuWmkobix0KSkscj1lLklqKDMsbnVsbCx0LG4sbyksZS5NaigpPyhhPWUuTmoodCxudWxsKSxhPyhhLm5qKHIpLGEub2ooKSk6ZS5KaihyKSk6ZS5KaihyKSk6KHRhdChlLHQpLGUuTWooKSYmKGE9ZS5Oaih0LG51bGwpLGEmJmEub2ooKSkpfWZ1bmN0aW9uIEU5ZShlLHQsbil7dmFyIHIsYSxvO2UuUGooKT8obz1lLlFqKCksSU4oZSx0LG4pLHI9ZS5JaigzLG51bGwsbix0LG8pLGUuTWooKT8oYT1lLk5qKG4sbnVsbCksZS5UaigpJiYoYT1lLlVqKG4sYSkpLGE/KGEubmoociksYS5vaigpKTplLkpqKHIpKTplLkpqKHIpKTooSU4oZSx0LG4pLGUuTWooKSYmKGE9ZS5OaihuLG51bGwpLGEmJmEub2ooKSkpfWZ1bmN0aW9uIEVVKGUsdCl7dmFyIG4scixhLG8sZjtmb3IoZj1XdShlLmUuRGgoKSx0KSxhPW5ldyBYMixuPWwoZS5nLDEyNCksbz1lLmk7LS1vPj0wOylyPW5bb10sZi5hbShyLkxrKCkpJiZxcihhLHIpOyFhd3QoZSxhKSYmaGgoZS5lKSYmeGsoZSx0LkprKCk/ZGIoZSw2LHQsKENuKCksX28pLG51bGwsLTEsITEpOmRiKGUsdC50aygpPzI6MSx0LG51bGwsbnVsbCwtMSwhMSkpfWZ1bmN0aW9uIHhFbihlLHQpe3ZhciBuLHIsYSxvLGY7cmV0dXJuIGUuYT09KHpFKCksVkwpPyEwOihvPXQuYS5jLG49dC5hLmMrdC5hLmIsISh0LmomJihyPXQuQSxmPXIuYy5jLmEtci5vLmEvMixhPW8tKHIubi5hK3Iuby5hKSxhPmYpfHx0LnEmJihyPXQuQyxmPXIuYy5jLmEtci5vLmEvMixhPXIubi5hLW4sYT5mKSkpfWZ1bmN0aW9uIGYydChlKXtmb2UoKTt2YXIgdCxuLHIsYSxvLGYsZztmb3Iobj1uZXcgZTIsYT1uZXcgRyhlLmUuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwzMCksZj1uZXcgRyhyLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMCksZz1lLmdbby5wXSx0PWwoQjEobixnKSwxNSksdHx8KHQ9bmV3IGJ0LGgyKG4sZyx0KSksdC5GYyhvKTtyZXR1cm4gbn1mdW5jdGlvbiBkMnQoZSl7dmFyIHQ7cmV0dXJuIGUuRGImNjQ/ZzAoZSk6KHQ9bmV3IEFmKGcwKGUpKSx0LmErPSIgKHN0YXJ0WDogIixfNSh0LGUuaiksdC5hKz0iLCBzdGFydFk6ICIsXzUodCxlLmspLHQuYSs9IiwgZW5kWDogIixfNSh0LGUuYiksdC5hKz0iLCBlbmRZOiAiLF81KHQsZS5jKSx0LmErPSIsIGlkZW50aWZpZXI6ICIsWG8odCxlLmQpLHQuYSs9IikiLHQuYSl9ZnVuY3Rpb24gVDllKGUpe3ZhciB0O3JldHVybiBlLkRiJjY0P0NBKGUpOih0PW5ldyBBZihDQShlKSksdC5hKz0iIChvcmRlcmVkOiAiLEdwKHQsKGUuQmImMjU2KSE9MCksdC5hKz0iLCB1bmlxdWU6ICIsR3AodCwoZS5CYiY1MTIpIT0wKSx0LmErPSIsIGxvd2VyQm91bmQ6ICIsaXNlKHQsZS5zKSx0LmErPSIsIHVwcGVyQm91bmQ6ICIsaXNlKHQsZS50KSx0LmErPSIpIix0LmEpfWZ1bmN0aW9uIGcydChlLHQsbixyLGEsbyxmLGcpe3ZhciB3O3JldHVybiBEZShlLkNiLDkwKSYmenkoWWwobChlLkNiLDkwKSksNCksRnUoZSxuKSxlLmY9cixMRShlLGEpLERFKGUsbyksQUUoZSxmKSxNRShlLCExKSx1MihlLCEwKSxJRShlLGcpLGMyKGUsITApLGkyKGUsMCksZS5iPTAsTXkoZSwxKSx3PSQxKGUsdCxudWxsKSx3JiZ3Lm9qKCksJGNlKGUsITEpLGV9ZnVuY3Rpb24gcDJ0KGUsdCl7dmFyIG4scixhLG87cmV0dXJuIG49bCh4dShlLmEsdCksNTI1KSxufHwocj1uZXcgU29lKHQpLGE9KFVIKCksRzE/bnVsbDpyLmMpLG89dGYoYSwwLGIuTWF0aC5tYXgoMCxScShhLGNsKDQ2KSkpKSxKZm4ocixwMnQoZSxvKSksKEcxP251bGw6ci5jKS5sZW5ndGg9PTAmJlNydChyLG5ldyBEdCkscmMoZS5hLEcxP251bGw6ci5jLHIpLHIpfWZ1bmN0aW9uIGtFbihlLHQpe3ZhciBuO2UuYj10LGUuZz1uZXcgYnQsbj1TRW4oZS5iKSxlLmU9bixlLmY9bixlLmM9UnQoQnQoUShlLmIsKGRVKCksQ19lKSkpKSxlLmE9R2UoUShlLmIsKHBpKCksWjYpKSksZS5hPT1udWxsJiYoZS5hPTEpLHplKGUuYSk+MT9lLmUqPXplKGUuYSk6ZS5mLz16ZShlLmEpLEh5bihlKSxZNW4oZSksR1NuKGUpLHJ0KGUuYiwoSUEoKSx2SyksZS5nKX1mdW5jdGlvbiBiMnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdztmb3Iocj0wLHc9bix0fHwocj1uKihlLmMubGVuZ3RoLTEpLHcqPS0xKSxvPW5ldyBHKGUpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3IoYT1sKHJlKG8pLDEwKSxydChhLChOdCgpLFJkKSwob2coKSx0WSkpLGEuby5hPXIsZz1kMihhLChDdCgpLGFyKSkuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTIpLGYubi5hPXI7cis9d319ZnVuY3Rpb24gRXgoZSx0LG4pe3ZhciByLGEsbyxmLGcsdztyZXR1cm4gZz1lLnBsKG4pLGchPW4/KGY9ZS5nW3RdLHc9ZyxSXyhlLHQsZS5aaSh0LHcpKSxvPWYsZS5SaSh0LHcsbyksZS5hbCgpJiYocj1uLGE9ZS5PaihyLG51bGwpLCFsKGcsNTQpLlBoKCkmJihhPWUuTmoodyxhKSksYSYmYS5vaigpKSxoaChlLmUpJiZ4ayhlLGUuSWooOSxuLGcsdCwhMSkpLGcpOm59ZnVuY3Rpb24gRUVuKGUsdCl7dmFyIG4scixhLG87Zm9yKHI9bmV3IEcoZS5hLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxOTQpLG4uZz0hMDtmb3Iobz1uZXcgRyhlLmEuYik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDg2KSxhLms9UnQoQnQoZS5lLktiKG5ldyBjYShhLHQpKSkpLGEuZC5nPWEuZC5nJlJ0KEJ0KGUuZS5LYihuZXcgY2EoYSx0KSkpKTtyZXR1cm4gZX1mdW5jdGlvbiBtMnQoZSx0KXt2YXIgbixyO2lmKGUuYy5sZW5ndGghPTApe2lmKGUuYy5sZW5ndGg9PTIpVHgoKFNuKDAsZS5jLmxlbmd0aCksbChlLmNbMF0sMTApKSwoSWgoKSxrZykpLFR4KChTbigxLGUuYy5sZW5ndGgpLGwoZS5jWzFdLDEwKSksR2IpO2Vsc2UgZm9yKHI9bmV3IEcoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDEwKSxUeChuLHQpO2UuYy5sZW5ndGg9MH19ZnVuY3Rpb24gdjJ0KGUpe3ZhciB0LG4scixhLG87aWYobj0odD1sKEswKE9vKSw5KSxuZXcgWmgodCxsKGMwKHQsdC5sZW5ndGgpLDkpLDApKSxvPWwoUShlLChmdCgpLGpsKSksMTApLG8pZm9yKGE9bmV3IEcoby5qKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTIpLHFlKFEocix6aSkpPT09cWUoZSkmJiRfKG5ldyBOMShyLmIpKSYmZDAobixyLmopO3JldHVybiBufWZ1bmN0aW9uIHcydChlLHQsbil7dmFyIHIsYSxvLGYsZztpZighZS5kW24ucF0pe2ZvcihhPW5ldyBocihkcihxcyhuKS5hLktjKCksbmV3IGopKTtqcihhKTspe2ZvcihyPWwoeHIoYSksMTgpLGc9ci5kLmksZj1uZXcgaHIoZHIoa2EoZykuYS5LYygpLG5ldyBqKSk7anIoZik7KW89bCh4cihmKSwxOCksby5jLmk9PXQmJihlLmFbby5wXT0hMCk7dzJ0KGUsdCxnKX1lLmRbbi5wXT0hMH19ZnVuY3Rpb24gVEVuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7aWYocj1kMXQoZS5EYiYyNTQpLHI9PTEpZS5FYj1udWxsO2Vsc2UgaWYobz1qbShlLkViKSxyPT0yKWE9bXVlKGUsdCksZS5FYj1vW2E9PTA/MTowXTtlbHNle2ZvcihmPVdlKHdhLFJuLDEsci0xLDUsMSksbj0yLGc9MCx3PTA7bjw9MTI4O248PD0xKW49PXQ/KytnOmUuRGImbiYmKGZbdysrXT1vW2crK10pO2UuRWI9Zn1lLkRiJj1+dH1mdW5jdGlvbiBDOWUoZSl7dmFyIHQ7c3dpdGNoKHQ9MCxlKXtjYXNlIDEwNTp0PTI7YnJlYWs7Y2FzZSAxMDk6dD04O2JyZWFrO2Nhc2UgMTE1OnQ9NDticmVhaztjYXNlIDEyMDp0PTE2O2JyZWFrO2Nhc2UgMTE3OnQ9MzI7YnJlYWs7Y2FzZSAxMTk6dD02NDticmVhaztjYXNlIDcwOnQ9MjU2O2JyZWFrO2Nhc2UgNzI6dD0xMjg7YnJlYWs7Y2FzZSA4ODp0PTUxMjticmVhaztjYXNlIDQ0OnQ9bTB9cmV0dXJuIHR9ZnVuY3Rpb24gQ0VuKGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7aWYocWUoZSk9PT1xZSh0KSYmcj09YSl7bW10KGUscixuKTtyZXR1cm59Zm9yKGc9MDtnPHI7ZysrKXtmb3IoZj0wLG89ZVtnXSx3PTA7dzxhO3crKylmPWJvKGJvKG1vKHZhKG8sVm8pLHZhKHRbd10sVm8pKSx2YShuW2crd10sVm8pKSx2YShZcihmKSxWbykpLG5bZyt3XT1ZcihmKSxmPXViKGYsMzIpO25bZythXT1ZcihmKX19ZnVuY3Rpb24gU0VuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKEM9MCxFPTAsYT1lLmEsZz1hLmEuZ2MoKSxyPWEuYS5lYygpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDU2NyksdD0obi5iJiZnbGUobiksbi5hKSxMPXQuYSxmPXQuYixDKz1MK2YsRSs9TCpmO3JldHVybiB3PWIuTWF0aC5zcXJ0KDQwMCpnKkUtNCpFK0MqQykrQyxvPTIqKDEwMCpnLTEpLG89PTA/dzp3L299ZnVuY3Rpb24geTJ0KGUsdCl7dC5iIT0wJiYoaXNOYU4oZS5zKT9lLnM9emUoKG1yKHQuYiE9MCksR2UodC5hLmEuYykpKTplLnM9Yi5NYXRoLm1pbihlLnMsemUoKG1yKHQuYiE9MCksR2UodC5hLmEuYykpKSksaXNOYU4oZS5jKT9lLmM9emUoKG1yKHQuYiE9MCksR2UodC5jLmIuYykpKTplLmM9Yi5NYXRoLm1heChlLmMsemUoKG1yKHQuYiE9MCksR2UodC5jLmIuYykpKSkpfWZ1bmN0aW9uIHFBKGUpe3ZhciB0LG4scixhO2Zvcih0PW51bGwscj1yZyhMaChoZShsZShGaCwxKSxSbiwyMCwwLFsoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLCghZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYyldKSkpO2pyKHIpOylpZihuPWwoeHIociksODQpLGE9YmMobiksIXQpdD1kcyhhKTtlbHNlIGlmKHQhPWRzKGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFZ1ZShlLHQpe3ZhciBuLHIsYSxvO2UuUGooKT8obj1lLmksbz1lLlFqKCksdE4oZSx0KSxyPWUuSWooMyxudWxsLHQsbixvKSxlLk1qKCk/KGE9ZS5Oaih0LG51bGwpLGUuVGooKSYmKGE9ZS5Vaih0LGEpKSxhPyhhLm5qKHIpLGEub2ooKSk6ZS5KaihyKSk6ZS5KaihyKSk6KHROKGUsdCksZS5NaigpJiYoYT1lLk5qKHQsbnVsbCksYSYmYS5vaigpKSl9ZnVuY3Rpb24gX0VuKGUsdCl7dmFyIG4scixhLG87aWYobz1qTyhlLmEsdC5iKSwhbyl0aHJvdyB1ZShuZXcgbmMoIkludmFsaWQgaGl0Ym94ZXMgZm9yIHNjYW5saW5lIG92ZXJsYXAgY2FsY3VsYXRpb24uIikpO2ZvcihhPSExLHI9ZS5hLmEuZWMoKS5LYygpO3IuT2IoKTspaWYobj1sKHIuUGIoKSw2OCksc3luKHQuYixuKSlCdW4oZS5iLmEsdC5iLG4pLGE9ITA7ZWxzZSBpZihhKWJyZWFrfWZ1bmN0aW9uIEFFbihlKXt2YXIgdDtpZighZS5hKXRocm93IHVlKG5ldyBuYygiSURhdGFUeXBlIGNsYXNzIGV4cGVjdGVkIGZvciBsYXlvdXQgb3B0aW9uICIrZS5mKSk7aWYodD1kbW4oZS5hKSx0PT1udWxsKXRocm93IHVlKG5ldyBuYygiQ291bGRuJ3QgY3JlYXRlIG5ldyBpbnN0YW5jZSBvZiBwcm9wZXJ0eSAnIitlLmYrIicuICIrT3l0KyhHZyhoRiksaEYuaykrSkNlKSk7cmV0dXJuIGwodCw0MjMpfWZ1bmN0aW9uIFV1ZShlKXt2YXIgdCxuLHIsYSxvO3JldHVybiBvPWUuUGgoKSxvJiZvLlZoKCkmJihhPXliKGUsbyksYSE9byk/KG49ZS5GaCgpLHI9KHQ9ZS5GaCgpLHQ+PTA/ZS5BaChudWxsKTplLlBoKCkuVGgoZSwtMS10LG51bGwsbnVsbCkpLGUuQmgobChhLDU0KSxuKSxyJiZyLm9qKCksZS52aCgpJiZlLndoKCkmJm4+LTEmJk5pKGUsbmV3IF9hKGUsOSxuLG8sYSkpLGEpOm99ZnVuY3Rpb24gUzllKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobz1lLmIuQ2UodCkscj0obj1lLmEuZ2V0KG8pLG4/P1dlKHdhLFJuLDEsMCw1LDEpKSxmPTA7ZjxyLmxlbmd0aDtmKyspaWYoYT1yW2ZdLGUuYi5CZSh0LGEubGQoKSkpcmV0dXJuIHIubGVuZ3RoPT0xPyhyLmxlbmd0aD0wLE1mbihlLmEsbykpOnIuc3BsaWNlKGYsMSksLS1lLmMsKytlLmIuZyxhLm1kKCk7cmV0dXJuIG51bGx9ZnVuY3Rpb24geDJ0KGUpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKGY9MCxvPWUuZi5lLHI9MDtyPG8uYy5sZW5ndGg7KytyKWZvcihnPShTbihyLG8uYy5sZW5ndGgpLGwoby5jW3JdLDE1MykpLGE9cisxO2E8by5jLmxlbmd0aDsrK2Epdz0oU24oYSxvLmMubGVuZ3RoKSxsKG8uY1thXSwxNTMpKSxuPXBiKGcuZCx3LmQpLHQ9bi1lLmFbZy5hXVt3LmFdLGYrPWUuaVtnLmFdW3cuYV0qdCp0O3JldHVybiBmfWZ1bmN0aW9uIExFbihlLHQpe3ZhciBuO2lmKCFucyh0LChOdCgpLFF1KSkmJihuPVg3bihsKFEodCxzTGUpLDM3MSksbChRKGUsUXUpLDE3MSkpLHJ0KHQsc0xlLG4pLCFqcihuZXcgaHIoZHIoc3AodCkuYS5LYygpLG5ldyBqKSkpKSlzd2l0Y2gobi5nKXtjYXNlIDE6cnQodCxRdSwoaGYoKSxZTCkpO2JyZWFrO2Nhc2UgMjpydCh0LFF1LChoZigpLFhMKSl9fWZ1bmN0aW9uIE1FbihlLHQpe3ZhciBuO0hTbihlKSxlLmE9KG49bmV3IG5zZSxJcyhuZXcgYm4obnVsbCxuZXcga24odC5kLDE2KSksbmV3IEVZZShuKSksbiksc19uKGUsbChRKHQuYiwoTnQoKSxuZGUpKSwzNDkpKSxGNm4oZSksRkVuKGUpLEo3bihlKSxSNm4oZSksUUxuKGUsdCksSXMoRGMobmV3IGJuKG51bGwsb2N0KE5nbihlLmIpLmEpKSxuZXcgeFMpLG5ldyBtZWUpLHQuYT0hMSxlLmE9bnVsbH1mdW5jdGlvbiBfOWUoKXtfOWU9VSxnVHQ9bmV3IHBuKGZDZSwoSG4oKSwhMSkpLHBUdD1uZXcgcG4oZENlLDcpLHB0KDApLHdUdD1uZXcgcG4oZ0NlLHB0KDApKSxtVHQ9bmV3IHBuKHBDZSxwdCgtMSkpLGNJZT0oa0EoKSxWZGUpLHlUdD1uZXcgcG4oYkNlLGNJZSksYUllPSh4QSgpLE9CKSxiVHQ9bmV3IHBuKG1DZSxhSWUpLG9JZT0oUkgoKSxVZGUpLHZUdD1uZXcgcG4odkNlLG9JZSl9ZnVuY3Rpb24gazJ0KCl7VnhlLmNhbGwodGhpcyx4VCwocmIoKSx3X3QpKSx0aGlzLnA9bnVsbCx0aGlzLmE9bnVsbCx0aGlzLmY9bnVsbCx0aGlzLm49bnVsbCx0aGlzLmc9bnVsbCx0aGlzLmM9bnVsbCx0aGlzLmk9bnVsbCx0aGlzLmo9bnVsbCx0aGlzLmQ9bnVsbCx0aGlzLmI9bnVsbCx0aGlzLmU9bnVsbCx0aGlzLms9bnVsbCx0aGlzLm89bnVsbCx0aGlzLnM9bnVsbCx0aGlzLnE9ITEsdGhpcy5yPSExfWZ1bmN0aW9uIEhFKCl7SEU9VSxKZ2U9bmV3IFI4KFgzdCwwKSx3WT1uZXcgUjgoIklOU0lERV9TRUxGX0xPT1BTIiwxKSx5WT1uZXcgUjgoIk1VTFRJX0VER0VTIiwyKSx2WT1uZXcgUjgoIkVER0VfTEFCRUxTIiwzKSxRZ2U9bmV3IFI4KCJQT1JUUyIsNCksbVk9bmV3IFI4KCJDT01QT1VORCIsNSksYlk9bmV3IFI4KCJDTFVTVEVSUyIsNiksWGdlPW5ldyBSOCgiRElTQ09OTkVDVEVEIiw3KX1mdW5jdGlvbiBFMnQoZSx0LG4pe3ZhciByLGEsbztlLlBqKCk/KG89ZS5RaigpLCsrZS5qLGUucWoodCxlLlppKHQsbikpLHI9ZS5JaigzLG51bGwsbix0LG8pLGUuTWooKT8oYT1lLk5qKG4sbnVsbCksYT8oYS5uaihyKSxhLm9qKCkpOmUuSmoocikpOmUuSmoocikpOigrK2UuaixlLnFqKHQsZS5aaSh0LG4pKSxlLk1qKCkmJihhPWUuTmoobixudWxsKSxhJiZhLm9qKCkpKX1mdW5jdGlvbiBUMnQoZSx0KXt2YXIgbixyLGE7aWYodD09MClyZXR1cm4oZS5hWzBdJjEpIT0wO2lmKHQ8MCl0aHJvdyB1ZShuZXcgcXooIk5lZ2F0aXZlIGJpdCBhZGRyZXNzIikpO2lmKGE9dD4+NSxhPj1lLmQpcmV0dXJuIGUuZTwwO2lmKG49ZS5hW2FdLHQ9MTw8KHQmMzEpLGUuZTwwKXtpZihyPU1mdChlKSxhPHIpcmV0dXJuITE7cj09YT9uPS1uOm49fm59cmV0dXJuKG4mdCkhPTB9ZnVuY3Rpb24gREVuKGUsdCxuLHIpe3ZhciBhO2wobi5iLDY4KSxsKG4uYiw2OCksbChyLmIsNjgpLGwoci5iLDY4KSxhPW1hKEphKGwobi5iLDY4KS5jKSxsKHIuYiw2OCkuYyksUXEoYSxCcHQobChuLmIsNjgpLGwoci5iLDY4KSxhKSksbChyLmIsNjgpLGwoci5iLDY4KSxsKHIuYiw2OCkuYy5hK2EuYSxsKHIuYiw2OCkuYy5iK2EuYixsKHIuYiw2OCksVnUoci5hLG5ldyBrNGUoZSx0LHIpKX1mdW5jdGlvbiBBOWUoZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZihvPXQuZSxvKXtmb3Iobj1VdWUobykscj1sKGUuZyw2ODkpLGY9MDtmPGUuaTsrK2YpaWYodz1yW2ZdLGh1ZSh3KT09biYmKGE9KCF3LmQmJih3LmQ9bmV3IFlzKFdvLHcsMSkpLHcuZCksZz1sKG4uTWgoc2xlKG8sby5DYixvLkRiPj4xNikpLDE1KS5kZChvKSxnPGEuaSkpcmV0dXJuIEE5ZShlLGwoT2UoYSxnKSw4OSkpfXJldHVybiB0fWZ1bmN0aW9uIEQoZSx0LG4pe3ZhciByPXNLLGEsbz1yW2VdLGY9byBpbnN0YW5jZW9mIEFycmF5P29bMF06bnVsbDtvJiYhZj9oPW86KGg9KGE9dCYmdC5wcm90b3R5cGUsIWEmJihhPXNLW3RdKSxtMm4oYSkpLGguU209biwhdCYmKGguVG09eGUpLHJbZV09aCk7Zm9yKHZhciBnPTM7Zzxhcmd1bWVudHMubGVuZ3RoOysrZylhcmd1bWVudHNbZ10ucHJvdG90eXBlPWg7ZiYmKGguUm09Zil9ZnVuY3Rpb24ganIoZSl7Zm9yKHZhciB0OyFsKFhyKGUuYSksNTEpLk9iKCk7KXtpZihlLmQ9a3luKGUpLCFlLmQpcmV0dXJuITE7aWYoZS5hPWwoZS5kLlBiKCksNTEpLERlKGUuYSwzOCkpe2lmKHQ9bChlLmEsMzgpLGUuYT10LmEsIWUuYiYmKGUuYj1uZXcgejUpLGdiKGUuYixlLmQpLHQuYilmb3IoOyFsXyh0LmIpOylnYihlLmIsbChiZ24odC5iKSw1MSkpO2UuZD10LmR9fXJldHVybiEwfWZ1bmN0aW9uIEw5ZShlLHQpe3ZhciBuLHIsYSxvO2ZvcihhPTEsdC5qPSEwLG89bnVsbCxyPW5ldyBHKFo1KHQpKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMjE4KSxlLmNbbi5jXXx8KGUuY1tuLmNdPSEwLG89SFYobix0KSxuLmY/YSs9TDllKGUsbyk6IW8uaiYmbi5hPT1uLmUuZS1uLmQuZSYmKG4uZj0hMCxuYShlLnAsbiksYSs9TDllKGUsbykpKTtyZXR1cm4gYX1mdW5jdGlvbiBJRW4oZSl7dmFyIHQsbixyO2ZvcihuPW5ldyBHKGUuYS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSw4Nikscj0obnIoMCksMCkscj4wJiYoIShVZyhlLmEuYykmJnQubi5kKSYmIShCNShlLmEuYykmJnQubi5iKSYmKHQuZy5kKz1iLk1hdGgubWF4KDAsci8yLS41KSksIShVZyhlLmEuYykmJnQubi5hKSYmIShCNShlLmEuYykmJnQubi5jKSYmKHQuZy5hLT1yLTEpKX1mdW5jdGlvbiBDMnQoZSl7dmFyIHQsbixyLGEsbztpZihhPW5ldyBidCxvPXltdChlLGEpLHQ9bChRKGUsKGZ0KCksamwpKSwxMCksdClmb3Iocj1uZXcgRyh0LmopO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxMikscWUoUShuLHppKSk9PT1xZShlKSYmKG89Yi5NYXRoLm1heChvLHltdChuLGEpKSk7cmV0dXJuIGEuYy5sZW5ndGg9PTB8fHJ0KGUsUjYsbyksbyE9LTE/YTpudWxsfWZ1bmN0aW9uIFMydChlLHQsbil7dmFyIHIsYSxvLGYsZyx3O289bChqdCh0LmUsMCksMTgpLmMscj1vLmksYT1yLmssdz1sKGp0KG4uZywwKSwxOCkuZCxmPXcuaSxnPWYuayxhPT0oWm4oKSxBYSk/cnQoZSwoZnQoKSxvMSksbChRKHIsbzEpLDEyKSk6cnQoZSwoZnQoKSxvMSksbyksZz09QWE/cnQoZSwoZnQoKSwkZiksbChRKGYsJGYpLDEyKSk6cnQoZSwoZnQoKSwkZiksdyl9ZnVuY3Rpb24gTTllKGUpe3ZhciB0LG4scjt0aGlzLmM9ZSxyPWwoUShlLChOdCgpLFJoKSksODgpLHQ9emUoR2UoUShlLGNXKSkpLG49emUoR2UoUShlLGlEZSkpKSxyPT0oSnMoKSx1Yyl8fHI9PXZjfHxyPT1KMT90aGlzLmI9dCpuOnRoaXMuYj0xLyh0Km4pLHRoaXMuaj16ZShHZShRKGUsVjYpKSksdGhpcy5lPXplKEdlKFEoZSxtMykpKSx0aGlzLmY9ZS5iLmMubGVuZ3RofWZ1bmN0aW9uIEQ5ZShlLHQpe3ZhciBuLHIsYSxvLGY7cmV0dXJuIHQmPTYzLG49ZS5oLHI9KG4mU1ApIT0wLHImJihufD0tMTA0ODU3NiksdDwyMj8oZj1uPj50LG89ZS5tPj50fG48PDIyLXQsYT1lLmw+PnR8ZS5tPDwyMi10KTp0PDQ0PyhmPXI/aHA6MCxvPW4+PnQtMjIsYT1lLm0+PnQtMjJ8bjw8NDQtdCk6KGY9cj9ocDowLG89cj9laDowLGE9bj4+dC00NCkscXUoYSZlaCxvJmVoLGYmaHApfWZ1bmN0aW9uIEd1ZShlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKHRoaXMuYz1uZXcgYnQsdGhpcy5kPWUscj1ncyxhPWdzLHQ9aWEsbj1pYSxmPVJyKGUsMCk7Zi5iIT1mLmQuYzspbz1sKEJyKGYpLDgpLHI9Yi5NYXRoLm1pbihyLG8uYSksYT1iLk1hdGgubWluKGEsby5iKSx0PWIuTWF0aC5tYXgodCxvLmEpLG49Yi5NYXRoLm1heChuLG8uYik7dGhpcy5hPW5ldyBlZihyLGEsdC1yLG4tYSl9ZnVuY3Rpb24gXzJ0KGUsdCl7dmFyIG4scixhLG8sZixnO2ZvcihvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwzMCksZz1uZXcgRyhhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTApLGYuaz09KFpuKCksY3UpJiZUeChmLHQpLHI9bmV3IGhyKGRyKHFzKGYpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksMTgpLHQwdChuLHQpfWZ1bmN0aW9uIE9FbihlLHQpe3ZhciBuLHIsYTtmb3IodC5VZygiTGF5ZXIgY29uc3RyYWludCBwcmVwcm9jZXNzaW5nIiwxKSxuPW5ldyBidCxhPW5ldyBVYShlLmEsMCk7YS5iPGEuZC5nYygpOylyPShtcihhLmI8YS5kLmdjKCkpLGwoYS5kLlhiKGEuYz1hLmIrKyksMTApKSxheW4ocikmJihweG4ociksJG4obi5jLHIpLHBoKGEpKTtuLmMubGVuZ3RoPT0wfHxydChlLChmdCgpLEgxZSksbiksdC5WZygpfWZ1bmN0aW9uIE5FbihlKXt2YXIgdCxuO2ZvcihlLmU9V2UoVnIsZGksMjgsZS5wLmMubGVuZ3RoLDE1LDEpLGUuaz1XZShWcixkaSwyOCxlLnAuYy5sZW5ndGgsMTUsMSksbj1uZXcgRyhlLnApO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMCksZS5lW3QucF09WGcobmV3IGhyKGRyKGthKHQpLmEuS2MoKSxuZXcgaikpKSxlLmtbdC5wXT1YZyhuZXcgaHIoZHIocXModCkuYS5LYygpLG5ldyBqKSkpfWZ1bmN0aW9uIFBFbihlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKGE9MCxlLnE9bmV3IGJ0LHQ9bmV3IEtzLGY9bmV3IEcoZS5wKTtmLmE8Zi5jLmMubGVuZ3RoOyl7Zm9yKG89bChyZShmKSwxMCksby5wPWEscj1uZXcgaHIoZHIocXMobykuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksbmEodCxuLmQuaSk7dC5hLkJjKG8pIT1udWxsLHZ0KGUucSxuZXcgVV8odCkpLHQuYS4kYigpLCsrYX19ZnVuY3Rpb24gQTJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKGUuYS5mPjAmJkRlKHQsNDQpJiYoZS5hLl9qKCksRT1sKHQsNDQpLHc9RS5sZCgpLG89dz09bnVsbD8wOmVzKHcpLGY9UXllKGUuYSxvKSxuPWUuYS5kW2ZdLG4pKXtmb3Iocj1sKG4uZywzNzkpLEM9bi5pLGc9MDtnPEM7KytnKWlmKGE9cltnXSxhLkJpKCk9PW8mJmEuRmIoRSkpcmV0dXJuIEEydChlLEUpLCEwfXJldHVybiExfWZ1bmN0aW9uIEJFbihlKXt2YXIgdCxuLHIsYSxvLGYsZztpZih0PWUucWkoRmYpLHQmJihnPWVpKG4xKCghdC5iJiYodC5iPW5ldyBkaCgoVG4oKSxObyksWWMsdCkpLHQuYiksInNldHRpbmdEZWxlZ2F0ZXMiKSksZyE9bnVsbCkpe2ZvcihuPW5ldyBidCxhPUd5KGcsIlxcdysiKSxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSwkbihuLmMscik7cmV0dXJuIG59cmV0dXJuIENuKCksQ24oKSxfb31mdW5jdGlvbiBGRW4oZSl7dmFyIHQsbixyLGE7Zm9yKGE9bCgkaShlLmEsKFJ5KCksR0spKSwxNSkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTA1KSxuPSh0PVc4KHIuayksdC5IYygoQ3QoKSxRbikpP3QuSGMoYXIpP3QuSGMoRHIpP3QuSGMoZXIpP251bGw6YXh0OmN4dDpveHQ6c3h0KSxWayhlLHIsblswXSwoT3coKSxhMyksMCksVmsoZSxyLG5bMV0sUmIsMSksVmsoZSxyLG5bMl0sbzMsMSl9ZnVuY3Rpb24gUkVuKGUsdCl7dmFyIG4scjtuPXZfbih0KSxzU24oZSx0LG4pLE9ndChlLmEsbChRKGVvKHQuYiksKGZ0KCksWHgpKSwyMzQpKSwkX24oZSksY3huKGUsdCkscj1XZShWcixkaSwyOCx0LmIuai5jLmxlbmd0aCwxNSwxKSxTbGUoZSx0LChDdCgpLFFuKSxyLG4pLFNsZShlLHQsYXIscixuKSxTbGUoZSx0LERyLHIsbiksU2xlKGUsdCxlcixyLG4pLGUuYT1udWxsLGUuYz1udWxsLGUuYj1udWxsfWZ1bmN0aW9uIEk5ZShlLHQsbil7c3dpdGNoKHQpe2Nhc2UgNzohZS5lJiYoZS5lPW5ldyBMbihqcyxlLDcsNCkpLCRyKGUuZSksIWUuZSYmKGUuZT1uZXcgTG4oanMsZSw3LDQpKSxBcyhlLmUsbChuLDE2KSk7cmV0dXJuO2Nhc2UgODohZS5kJiYoZS5kPW5ldyBMbihqcyxlLDgsNSkpLCRyKGUuZCksIWUuZCYmKGUuZD1uZXcgTG4oanMsZSw4LDUpKSxBcyhlLmQsbChuLDE2KSk7cmV0dXJufUN4ZShlLHQsbil9ZnVuY3Rpb24gTzllKGUsdCl7dmFyIG4scixhLG8sZjtpZihxZSh0KT09PXFlKGUpKXJldHVybiEwO2lmKCFEZSh0LDE1KXx8KGY9bCh0LDE1KSxlLmdjKCkhPWYuZ2MoKSkpcmV0dXJuITE7Zm9yKG89Zi5LYygpLHI9ZS5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksYT1vLlBiKCksIShxZShuKT09PXFlKGEpfHxuIT1udWxsJiZQaShuLGEpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBqRW4oZSx0KXt2YXIgbixyLGEsbztmb3Iobz1sKHljKERjKERjKG5ldyBibihudWxsLG5ldyBrbih0LmIsMTYpKSxuZXcgZlMpLG5ldyBkUyksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLG8uSmMobmV3IGdqKSxuPTAsYT1vLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDEyKSxyLnA9PS0xJiZOOWUoZSxyLG4rKyl9ZnVuY3Rpb24gTDJ0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHRpZTtjYXNlIDE6cmV0dXJuIG5ldyBacmU7Y2FzZSAyOnJldHVybiBuZXcgZWllO2Nhc2UgMzpyZXR1cm4gbmV3IFhldDtjYXNlIDQ6cmV0dXJuIG5ldyBic3Q7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIG5vZGUgcGxhY2VyICIrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiBNMnQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcgUTRlO2Nhc2UgMTpyZXR1cm4gbmV3IFVyZTtjYXNlIDI6cmV0dXJuIG5ldyBvejtjYXNlIDM6cmV0dXJuIG5ldyBtODtjYXNlIDQ6cmV0dXJuIG5ldyAkdHQ7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGN5Y2xlIGJyZWFrZXIgIisoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uICRFbihlLHQpe3ZhciBuLHIsYSxvLGY7cj1uZXcgb3MsQ3Mocix0LHIuYy5iLHIuYyk7ZG8gZm9yKG49KG1yKHIuYiE9MCksbChhZihyLHIuYS5hKSw0MCkpLGUuYltuLmddPTEsbz1ScihuLmQsMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDY1KSxmPWEuYyxlLmJbZi5nXT09MT91aShlLmEsYSk6ZS5iW2YuZ109PTI/ZS5iW2YuZ109MTpDcyhyLGYsci5jLmIsci5jKTt3aGlsZShyLmIhPTApfWZ1bmN0aW9uIHpFbihlLHQsbil7dmFyIHI7cj1udWxsLHQmJihyPXQuZCksUkEoZSxuZXcgSWsodC5uLmEtci5iK24uYSx0Lm4uYi1yLmQrbi5iKSksUkEoZSxuZXcgSWsodC5uLmEtci5iK24uYSx0Lm4uYit0Lm8uYityLmErbi5iKSksUkEoZSxuZXcgSWsodC5uLmErdC5vLmErci5jK24uYSx0Lm4uYi1yLmQrbi5iKSksUkEoZSxuZXcgSWsodC5uLmErdC5vLmErci5jK24uYSx0Lm4uYit0Lm8uYityLmErbi5iKSl9ZnVuY3Rpb24gTjllKGUsdCxuKXt2YXIgcixhLG87Zm9yKHQucD1uLG89cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbmV3IFQ1KHQpLG5ldyBDOCh0KV0pKSk7anIobyk7KXI9bCh4cihvKSwxMiksci5wPT0tMSYmTjllKGUscixuKTtpZih0Lmkuaz09KFpuKCksQWEpKWZvcihhPW5ldyBHKHQuaS5qKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTIpLHIhPXQmJnIucD09LTEmJk45ZShlLHIsbil9ZnVuY3Rpb24gcUVuKGUsdCl7dmFyIG4scixhLG8sZixnO2ZvcihyPW5ldyBlMixmPUhIKG5ldyBJbChlLmcpKSxvPWYuYS5lYygpLktjKCk7by5PYigpOyl7aWYoYT1sKG8uUGIoKSwxMCksIWEpe3QuYmgoIlRoZXJlIGFyZSBubyBjbGFzc2VzIGluIGEgYmFsYW5jZWQgbGF5b3V0LiIpO2JyZWFrfWc9ZS5qW2EucF0sbj1sKEIxKHIsZyksMTUpLG58fChuPW5ldyBidCxoMihyLGcsbikpLG4uRmMoYSl9cmV0dXJuIHJ9ZnVuY3Rpb24gRDJ0KGUpe3ZhciB0LG4scixhLG87aWYoYT1sKHljKFY1ZShLNWUoZSkpLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxyPXk2LGEuZ2MoKT49Milmb3Iobj1hLktjKCksdD1HZShuLlBiKCkpO24uT2IoKTspbz10LHQ9R2Uobi5QYigpKSxyPWIuTWF0aC5taW4ociwobnIodCksdC0obnIobyksbykpKTtyZXR1cm4gcn1mdW5jdGlvbiBIRW4oZSx0KXt2YXIgbixyLGE7Zm9yKGE9bmV3IGJ0LHI9UnIodC5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksbi5iLmc9PWUuZyYmIXZuKG4uYi5jLERHKSYmcWUoUShuLmIsKEhjKCksJGQpKSkhPT1xZShRKG4uYywkZCkpJiYhVzUobmV3IGJuKG51bGwsbmV3IGtuKGEsMTYpKSxuZXcgdVhlKG4pKSYmJG4oYS5jLG4pO3JldHVybiBWcyhhLG5ldyBOdGUpLGF9ZnVuY3Rpb24gVkVuKGUsdCl7dmFyIG4scixhO2lmKHFlKHQpPT09cWUoWHIoZSkpKXJldHVybiEwO2lmKCFEZSh0LDE1KXx8KHI9bCh0LDE1KSxhPWUuZ2MoKSxhIT1yLmdjKCkpKXJldHVybiExO2lmKERlKHIsNTkpKXtmb3Iobj0wO248YTtuKyspaWYoIXlkKGUuWGIobiksci5YYihuKSkpcmV0dXJuITE7cmV0dXJuITB9ZWxzZSByZXR1cm4gVTZuKGUuS2MoKSxyLktjKCkpfWZ1bmN0aW9uIFVFbihlLHQsbixyLGEsbyl7dmFyIGYsZyx3LEU7Zm9yKGc9IV9rKEZpKGUuT2MoKSxuZXcgV2wobmV3IFV2KSkpLkJkKChBbSgpLHp4KSksZj1lLG89PShKcygpLHdmKSYmKGY9bGYoZikpLEU9Zi5LYygpO0UuT2IoKTspdz1sKEUuUGIoKSw3Miksdy5uLmE9dC5hLGc/dy5uLmI9dC5iKyhyLmItdy5vLmIpLzI6YT93Lm4uYj10LmI6dy5uLmI9dC5iK3IuYi13Lm8uYix0LmErPXcuby5hK259ZnVuY3Rpb24gR0VuKGUsdCl7dmFyIG4scixhLG8sZjtmb3IodC5VZygiUG9ydCBzaWRlIHByb2Nlc3NpbmciLDEpLGY9bmV3IEcoZS5hKTtmLmE8Zi5jLmMubGVuZ3RoOylhPWwocmUoZiksMTApLFVtdChhKTtmb3Iocj1uZXcgRyhlLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPWwocmUociksMzApLG89bmV3IEcobi5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTApLFVtdChhKTt0LlZnKCl9ZnVuY3Rpb24gS0VuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRTtpZihuKWZvcihvPW4uYS5sZW5ndGgscj1uZXcgRG0obyksZz0oci5iLXIuYSkqci5jPDA/KHNiKCksdG0pOm5ldyBjYihyKTtnLk9iKCk7KWY9bChnLlBiKCksMTcpLHc9SmsobixmLmEpLHcmJihFPU93bihZZyh3LEtmZSksdCksa2koZS5mLEUsdyksYT1QZCBpbiB3LmEsYSYmZkUoRSxZZyh3LFBkKSksbVUodyxFKSxoOWUodyxFKSl9ZnVuY3Rpb24gV0VuKGUsdCxuKXt2YXIgcixhLG8sZixnO2lmKGc9biwhZyYmKGc9QjRlKG5ldyBMOCwwKSksZy5VZyhMM3QsMSksX3Z0KGUuYyx0KSxmPUpNbihlLmEsdCksZi5nYygpPT0xKWN2dChsKGYuWGIoMCksMzYpLGcpO2Vsc2UgZm9yKG89MS9mLmdjKCksYT1mLktjKCk7YS5PYigpOyl7aWYocj1sKGEuUGIoKSwzNiksbi4kZygpKXJldHVybjtjdnQocixnLmVoKG8pKX1sdW4oZS5hLGYsdCksU1NuKHQpLGcuVmcoKX1mdW5jdGlvbiBJMnQoZSx0LG4pe3ZhciByLGEsbyxmLGc7aWYoYT1lLmYsIWEmJihhPWwoZS5hLmEuZWMoKS5LYygpLlBiKCksNjApKSxGQShhLHQsbiksZS5hLmEuZ2MoKSE9MSlmb3Iocj10Km4sZj1lLmEuYS5lYygpLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDYwKSxvIT1hJiYoZz1peChvKSxnLmYuZD8oby5kLmQrPXIrSDEsby5kLmEtPXIrSDEpOmcuZi5hJiYoby5kLmEtPXIrSDEpKX1mdW5jdGlvbiBLdWUoZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHo7cmV0dXJuIGY9bi1lLGc9ci10LG89Yi5NYXRoLmF0YW4yKGYsZyksdz1vK0xoZSxFPW8tTGhlLEM9YSpiLk1hdGguc2luKHcpK2UsQj1hKmIuTWF0aC5jb3ModykrdCxMPWEqYi5NYXRoLnNpbihFKStlLHo9YSpiLk1hdGguY29zKEUpK3QsTzEoaGUobGUoRWEsMSksZHQsOCwwLFtuZXcgbHQoQyxCKSxuZXcgbHQoTCx6KV0pKX1mdW5jdGlvbiBZRW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTDthPW4sQz10LG89QztkbyBvPWUuYVtvLnBdLGc9KEw9ZS5nW28ucF0semUoZS5wW0wucF0pK3plKGUuZFtvLnBdKS1vLmQuZCksdz1Zd24obyxyKSx3JiYoZj0oRT1lLmdbdy5wXSx6ZShlLnBbRS5wXSkremUoZS5kW3cucF0pK3cuby5iK3cuZC5hKSxhPWIuTWF0aC5taW4oYSxnLShmK2o1KGUuayxvLHcpKSkpO3doaWxlKEMhPW8pO3JldHVybiBhfWZ1bmN0aW9uIFhFbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMO2E9bixDPXQsbz1DO2RvIG89ZS5hW28ucF0sZj0oTD1lLmdbby5wXSx6ZShlLnBbTC5wXSkremUoZS5kW28ucF0pK28uby5iK28uZC5hKSx3PXR5bihvLHIpLHcmJihnPShFPWUuZ1t3LnBdLHplKGUucFtFLnBdKSt6ZShlLmRbdy5wXSktdy5kLmQpLGE9Yi5NYXRoLm1pbihhLGctKGYrajUoZS5rLG8sdykpKSk7d2hpbGUoQyE9byk7cmV0dXJuIGF9ZnVuY3Rpb24gTzJ0KGUsdCl7dmFyIG47aWYodC5VZygiRXF1YWwgV2hpdGVzcGFjZSBFbGltaW5hdG9yIiwxKSxQMShlLCh1ZygpLEdXKSkpaTRuKGwoYXQoZSxHVyksMTUpLHplKEdlKGF0KGUsWngpKSksKG49emUoR2UoYXQoZSxiTSkpKSx6ZShHZShhdChlLCh6MSgpLHdNKSkpKSxuKSk7ZWxzZSB0aHJvdyB1ZShuZXcgVnAoIlRoZSBncmFwaCBkb2VzIG5vdCBjb250YWluIHJvd3MuIikpO3QuVmcoKX1mdW5jdGlvbiBhdChlLHQpe3ZhciBuLHI7cmV0dXJuIHI9KCFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxuMShlLm8sdCkpLHI/PyhuPXQuU2coKSxEZShuLDQpJiYobj09bnVsbD8oIWUubyYmKGUubz1uZXcgeGwoKHN1KCksQ2cpLEwyLGUsMCkpLFlWKGUubyx0KSk6KCFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxHTihlLm8sdCxuKSkpLG4pfWZ1bmN0aW9uIHF5KCl7cXk9VSxFMD1uZXcgRDUoIkhfTEVGVCIsMCksbXA9bmV3IEQ1KCJIX0NFTlRFUiIsMSksVDA9bmV3IEQ1KCJIX1JJR0hUIiwyKSxTMD1uZXcgRDUoIlZfVE9QIiwzKSxFZz1uZXcgRDUoIlZfQ0VOVEVSIiw0KSxxZj1uZXcgRDUoIlZfQk9UVE9NIiw1KSxqaD1uZXcgRDUoIklOU0lERSIsNiksQzA9bmV3IEQ1KCJPVVRTSURFIiw3KSx6Zj1uZXcgRDUoIkhfUFJJT1JJVFkiLDgpfWZ1bmN0aW9uIFFFbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKCF0LmYpdGhyb3cgdWUobmV3IFluKCJUaGUgaW5wdXQgZWRnZSBpcyBub3QgYSB0cmVlIGVkZ2UuIikpO2ZvcihvPW51bGwsYT1JaSxyPW5ldyBHKGUuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDIxOCksZz1uLmQsdz1uLmUsenVlKGUsZyx0KSYmIXp1ZShlLHcsdCkmJihmPXcuZS1nLmUtbi5hLGY8YSYmKGE9ZixvPW4pKTtyZXR1cm4gb31mdW5jdGlvbiBKRW4oZSl7dmFyIHQsbixyLGEsbyxmO2lmKCEoZS5mLmUuYy5sZW5ndGg8PTEpKXt0PTAsYT14MnQoZSksbj1ncztkb3tmb3IodD4wJiYoYT1uKSxmPW5ldyBHKGUuZi5lKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTUzKSwhUnQoQnQoUShvLChWTigpLHVBZSkpKSkmJihyPWhBbihlLG8pLE9pKFkwKG8uZCkscikpO249eDJ0KGUpfXdoaWxlKCFCZ24oZSx0KyssYSxuKSl9fWZ1bmN0aW9uIFpFbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKG89ZS5nLmEsZj1lLmcuYixyPW5ldyBHKGUuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDcyKSxhPW4ubixlLmE9PShSMSgpLE1UKXx8ZS5pPT0oQ3QoKSxhcik/YS5hPW86ZS5hPT1EVHx8ZS5pPT0oQ3QoKSxlcik/YS5hPW8rZS5qLmEtbi5vLmE6YS5hPW8rKGUuai5hLW4uby5hKS8yLGEuYj1mLE9pKGEsdCksZis9bi5vLmIrZS5lfWZ1bmN0aW9uIGVUbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMO0U9ZSx3PWFBKEUsImluZGl2aWR1YWxTcGFjaW5ncyIpLHcmJihyPVAxKHQsKHBpKCkscjkpKSxmPSFyLGYmJihhPW5ldyBFSSxIaSh0LHI5LGEpKSxnPWwoYXQodCxyOSksMzg1KSxMPXcsbz1udWxsLEwmJihvPShDPWFjZShMLFdlKHp0LGR0LDIsMCw2LDEpKSxuZXcgYXNlKEwsQykpKSxvJiYobj1uZXcgVHR0KEwsZyksdG8obyxuKSkpfWZ1bmN0aW9uIHRUbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7cmV0dXJuIHc9bnVsbCxMPWUsQz1udWxsLChrNHQgaW4gTC5hfHxFNHQgaW4gTC5hfHwkRyBpbiBMLmEpJiYoRT1udWxsLEI9RDdlKHQpLGY9YUEoTCxrNHQpLG49bmV3IEtYZShCKSxiNW4obi5hLGYpLGc9YUEoTCxFNHQpLHI9bmV3IHJRZShCKSxtNW4oci5hLGcpLG89QXcoTCwkRyksYT1uZXcgYVFlKEIpLEU9KHR4bihhLmEsbyksbyksQz1FKSx3PUMsd31mdW5jdGlvbiBuVG4oZSx0KXt2YXIgbixyLGE7aWYodD09PWUpcmV0dXJuITA7aWYoRGUodCw1NTIpKXtpZihhPWwodCw4NDkpLGUuYS5kIT1hLmEuZHx8VjUoZSkuZ2MoKSE9VjUoYSkuZ2MoKSlyZXR1cm4hMTtmb3Iocj1WNShhKS5LYygpO3IuT2IoKTspaWYobj1sKHIuUGIoKSw0MjUpLFBvdChlLG4uYS5sZCgpKSE9bChuLmEubWQoKSwxNikuZ2MoKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiByVG4oZSl7dmFyIHQsbixyLGE7cmV0dXJuIHI9bChlLmEsMTcpLmEsYT1sKGUuYiwxNykuYSx0PXIsbj1hLHI9PTAmJmE9PTA/bi09MTpyPT0tMSYmYTw9MD8odD0wLG4tPTIpOnI8PTAmJmE+MD8odC09MSxuLT0xKTpyPj0wJiZhPDA/KHQrPTEsbis9MSk6cj4wJiZhPj0wPyh0LT0xLG4rPTEpOih0Kz0xLG4tPTEpLG5ldyBjYShwdCh0KSxwdChuKSl9ZnVuY3Rpb24gaVRuKGUsdCl7cmV0dXJuIGUuYzx0LmM/LTE6ZS5jPnQuYz8xOmUuYjx0LmI/LTE6ZS5iPnQuYj8xOmUuYSE9dC5hP2VzKGUuYSktZXModC5hKTplLmQ9PShvQSgpLHVNKSYmdC5kPT1jTT8tMTplLmQ9PWNNJiZ0LmQ9PXVNPzE6MH1mdW5jdGlvbiBOMnQoZSx0KXt2YXIgbixyLGEsbyxmO3JldHVybiBvPXQuYSxvLmMuaT09dC5iP2Y9by5kOmY9by5jLG8uYy5pPT10LmI/cj1vLmM6cj1vLmQsYT1TNW4oZS5hLGYsciksYT4wJiZhPHk2PyhuPVlFbihlLmEsci5pLGEsZS5jKSxMaHQoZS5hLHIuaSwtbiksbj4wKTphPDAmJi1hPHk2PyhuPVhFbihlLmEsci5pLC1hLGUuYyksTGh0KGUuYSxyLmksbiksbj4wKTohMX1mdW5jdGlvbiBzVG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTDtmb3IoYT0odC1lLmQpL2UuYy5jLmxlbmd0aCxvPTAsZS5hKz1uLGUuZD10LEw9bmV3IEcoZS5jKTtMLmE8TC5jLmMubGVuZ3RoOylDPWwocmUoTCksMjcpLEU9Qy5nLHc9Qy5mLFV1KEMsQy5pK28qYSksR3UoQyxDLmorcipuKSxEdyhDLEMuZythKSxNdyhDLGUuYSksKytvLGc9Qy5nLGY9Qy5mLGM5ZShDLG5ldyBsdChnLGYpLG5ldyBsdChFLHcpKX1mdW5jdGlvbiBhVG4oZSl7dmFyIHQsbixyLGEsbyxmLGc7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtmb3IoZz1lLmxlbmd0aCxhPShnKzEpLzJ8MCxmPVdlKEFsLEM2LDI4LGEsMTUsMSksZyUyIT0wJiYoZlstLWFdPW5rZSgoWG4oZy0xLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoZy0xKSkpKSxuPTAscj0wO248YTsrK24pdD1ua2UoY28oZSxyKyspKSxvPW5rZShjbyhlLHIrKykpLGZbbl09KHQ8PDR8byk8PDI0Pj4yNDtyZXR1cm4gZn1mdW5jdGlvbiBvVG4oZSl7aWYoZS56ZSgpKXt2YXIgdD1lLmM7dC5BZSgpP2Uubz0iWyIrdC5uOnQuemUoKT9lLm89IlsiK3QueGUoKTplLm89IltMIit0LnhlKCkrIjsiLGUuYj10LndlKCkrIltdIixlLms9dC55ZSgpKyJbXSI7cmV0dXJufXZhciBuPWUuaixyPWUuZDtyPXIuc3BsaXQoIi8iKSxlLm89WGNlKCIuIixbbixYY2UoIiQiLHIpXSksZS5iPVhjZSgiLiIsW24sWGNlKCIuIixyKV0pLGUuaz1yW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIGNUbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGY9bnVsbCxvPW5ldyBHKGUuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylpZihhPWwocmUobyksMTI1KSxhLmIuYS5jLmxlbmd0aD09YS5nLmEuYy5sZW5ndGgpe2ZvcihyPWEuZSxmPXE5bihhKSxuPWEuZS1sKGYuYSwxNykuYSsxO248YS5lK2woZi5iLDE3KS5hO24rKyl0W25dPHRbcl0mJihyPW4pO3Rbcl08dFthLmVdJiYoLS10W2EuZV0sKyt0W3JdLGEuZT1yKX19ZnVuY3Rpb24gV3VlKGUpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKGE9Z3Mscj1pYSxuPW5ldyBHKGUuZS5iKTtuLmE8bi5jLmMubGVuZ3RoOylmb3IodD1sKHJlKG4pLDMwKSxmPW5ldyBHKHQuYSk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDEwKSx3PXplKGUucFtvLnBdKSxnPXcremUoZS5iW2UuZ1tvLnBdLnBdKSxhPWIuTWF0aC5taW4oYSx3KSxyPWIuTWF0aC5tYXgocixnKTtyZXR1cm4gci1hfWZ1bmN0aW9uIFAydChlKXtrbGUoKTt2YXIgdCxuLHIsYTtyZXR1cm4gcj1wZChlLGNsKDM1KSksdD1yPT0tMT9lOihHYSgwLHIsZS5sZW5ndGgpLGUuc3Vic3RyKDAscikpLG49cj09LTE/bnVsbDooWG4ocisxLGUubGVuZ3RoKzEpLGUuc3Vic3RyKHIrMSkpLGE9VG1uKFNQZSx0KSxhP24hPW51bGwmJihhPU0wdChhLChucihuKSxuKSkpOihhPVVJbih0KSxGbW4oU1BlLHQsYSksbiE9bnVsbCYmKGE9TTB0KGEsbikpKSxhfWZ1bmN0aW9uIFA5ZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2ZvcihhPWhrZShlLHQpLGc9MCx3PWEuZ2MoKTtnPHc7KytnKWlmKG89bChhLlhiKGcpLDE3OSksdm4ocixXayhpYyhlLG8pKSkpe2lmKGY9SE8oaWMoZSxvKSksbj09bnVsbCl7aWYoZj09bnVsbClyZXR1cm4gb31lbHNlIGlmKHZuKG4sZikpcmV0dXJuIG99cmV0dXJuIG51bGx9ZnVuY3Rpb24gQjllKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7Zm9yKGE9YWxlKGUsdCksZz0wLHc9YS5nYygpO2c8dzsrK2cpaWYobz1sKGEuWGIoZyksMTc5KSx2bihyLFdrKGljKGUsbykpKSl7aWYoZj1ITyhpYyhlLG8pKSxuPT1udWxsKXtpZihmPT1udWxsKXJldHVybiBvfWVsc2UgaWYodm4obixmKSlyZXR1cm4gb31yZXR1cm4gbnVsbH1mdW5jdGlvbiB1VG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztpZihmPW5ldyBYMixnPVd1KGUuZS5EaCgpLHQpLHI9bChlLmcsMTI0KSxGbygpLGwodCw2OSkueGsoKSlmb3Iobz0wO288ZS5pOysrbylhPXJbb10sZy5hbShhLkxrKCkpJiZxcihmLGEpO2Vsc2UgZm9yKG89MDtvPGUuaTsrK28pYT1yW29dLGcuYW0oYS5MaygpKSYmKHc9YS5tZCgpLHFyKGYsbj96QShlLHQsbyxmLmksdyk6dykpO3JldHVybiBhNmUoZil9ZnVuY3Rpb24gQjJ0KGUpe3ZhciB0LG4scixhLG8sZixnO2lmKGUmJih0PWUucWkoRmYpLHQmJihmPWVpKG4xKCghdC5iJiYodC5iPW5ldyBkaCgoVG4oKSxObyksWWMsdCkpLHQuYiksImNvbnZlcnNpb25EZWxlZ2F0ZXMiKSksZiE9bnVsbCkpKXtmb3IoZz1uZXcgYnQscj1HeShmLCJcXHcrIiksYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sJG4oZy5jLG4pO3JldHVybiBnfXJldHVybiBDbigpLENuKCksX299ZnVuY3Rpb24gRjJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtmb3IoZj10PT0xP3MxZTppMWUsbz1mLmEuZWMoKS5LYygpO28uT2IoKTspZm9yKGE9bChvLlBiKCksODgpLHc9bCgkaShlLmYuYyxhKSwyMSkuS2MoKTt3Lk9iKCk7KXN3aXRjaChnPWwody5QYigpLDQyKSxyPWwoZy5iLDg2KSxFPWwoZy5hLDE5NCksbj1FLmMsYS5nKXtjYXNlIDI6Y2FzZSAxOnIuZy5kKz1uO2JyZWFrO2Nhc2UgNDpjYXNlIDM6ci5nLmMrPW59fWZ1bmN0aW9uIGxUbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKG49bmV3IExBKE5UKSxhPSh5eCgpLGhlKGxlKE5ULDEpLGl0LDIzMiwwLFtPVCxxTCxJVCxoNCxONixPNl0pKSxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSx0NGUobixyLG5ldyBidCk7cmV0dXJuIElzKGZjKEZpKERjKG5ldyBibihudWxsLG5ldyBrbihlLmIsMTYpKSxuZXcgVFopLG5ldyBnUyksbmV3IHRZZSh0KSksbmV3IG5ZZShuKSksbn1mdW5jdGlvbiBUVShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKG89dC5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwyNyksQz1hLmkrYS5nLzIsQj1hLmorYS5mLzIsdz1lLmYsZj13Lmkrdy5nLzIsZz13Lmordy5mLzIsRT1DLWYsTD1CLWcscj1iLk1hdGguc3FydChFKkUrTCpMKSxFKj1lLmUvcixMKj1lLmUvcixuPyhDLT1FLEItPUwpOihDKz1FLEIrPUwpLFV1KGEsQy1hLmcvMiksR3UoYSxCLWEuZi8yKX1mdW5jdGlvbiBjNihlKXt2YXIgdCxuLHI7aWYoIWUuYyYmZS5iIT1udWxsKXtmb3IodD1lLmIubGVuZ3RoLTQ7dD49MDt0LT0yKWZvcihuPTA7bjw9dDtuKz0yKShlLmJbbl0+ZS5iW24rMl18fGUuYltuXT09PWUuYltuKzJdJiZlLmJbbisxXT5lLmJbbiszXSkmJihyPWUuYltuKzJdLGUuYltuKzJdPWUuYltuXSxlLmJbbl09cixyPWUuYltuKzNdLGUuYltuKzNdPWUuYltuKzFdLGUuYltuKzFdPXIpO2UuYz0hMH19ZnVuY3Rpb24gaFRuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2ZvcihFPS0xLEM9MCxmPWUsZz0wLHc9Zi5sZW5ndGg7Zzx3OysrZyl7Zm9yKG89ZltnXSxuPW5ldyBPaXQoRT09LTE/ZVswXTplW0VdLHQsKEVBKCksU1cpKSxyPTA7cjxvLmxlbmd0aDtyKyspZm9yKGE9cisxO2E8by5sZW5ndGg7YSsrKW5zKG9bcl0sKGZ0KCksS2kpKSYmbnMob1thXSxLaSkmJmR3dChuLG9bcl0sb1thXSk+MCYmKytDOysrRX1yZXR1cm4gQ31mdW5jdGlvbiBnMChlKXt2YXIgdCxuO3JldHVybiBuPW5ldyBUaChfbShlLlJtKSksbi5hKz0iQCIsaGkobiwodD1lcyhlKT4+PjAsdC50b1N0cmluZygxNikpKSxlLlZoKCk/KG4uYSs9IiAoZVByb3h5VVJJOiAiLHd1KG4sZS5faCgpKSxlLktoKCkmJihuLmErPSIgZUNsYXNzOiAiLHd1KG4sZS5LaCgpKSksbi5hKz0iKSIpOmUuS2goKSYmKG4uYSs9IiAoZUNsYXNzOiAiLHd1KG4sZS5LaCgpKSxuLmErPSIpIiksbi5hfWZ1bmN0aW9uIEhBKGUpe3ZhciB0LG4scixhO2lmKGUuZSl0aHJvdyB1ZShuZXcgbmMoKEdnKFIwZSkscGhlK1IwZS5rK2JoZSkpKTtmb3IoZS5kPT0oSnMoKSxKMSkmJlVVKGUsdWMpLG49bmV3IEcoZS5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwzMTYpLHQuZz10Lmk7Zm9yKGE9bmV3IEcoZS5hLmIpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSw2MCksci5pPWlhO3JldHVybiBlLmIuY2YoZSksZX1mdW5jdGlvbiBmVG4oZSx0KXt2YXIgbixyLGEsbyxmO2lmKHQ8MiplLmIpdGhyb3cgdWUobmV3IFluKCJUaGUga25vdCB2ZWN0b3IgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byB0aW1lIHRoZSBkaW1lbnNpb24gZWxlbWVudHMuIikpO2ZvcihlLmY9MSxhPTA7YTxlLmI7YSsrKXZ0KGUuZSwwKTtmb3IoZj10KzEtMiplLmIsbj1mLG89MTtvPGY7bysrKXZ0KGUuZSxvL24pO2lmKGUuZClmb3Iocj0wO3I8ZS5iO3IrKyl2dChlLmUsMSl9ZnVuY3Rpb24gUjJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKEU9dCxDPWwodlYoVWFlKGUuaSksRSksMjcpLCFDKXRocm93IGE9WWcoRSxQZCksZz0iVW5hYmxlIHRvIGZpbmQgZWxrIG5vZGUgZm9yIGpzb24gb2JqZWN0ICciK2Esdz1nKyInIFBhbmljISIsdWUobmV3IGRkKHcpKTtvPUF3KEUsImVkZ2VzIiksbj1uZXcgYnR0KGUsQyksUWtuKG4uYSxuLmIsbyksZj1BdyhFLFdmZSkscj1uZXcgalhlKGUpLHQ4bihyLmEsZil9ZnVuY3Rpb24gajJ0KGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYociE9bnVsbCl7aWYoYT1lLmRbdF0sYSl7Zm9yKG89YS5nLHc9YS5pLGc9MDtnPHc7KytnKWlmKGY9bChvW2ddLDEzNiksZi5CaSgpPT1uJiZQaShyLGYubGQoKSkpcmV0dXJuIGd9fWVsc2UgaWYoYT1lLmRbdF0sYSl7Zm9yKG89YS5nLHc9YS5pLGc9MDtnPHc7KytnKWlmKGY9bChvW2ddLDEzNikscWUoZi5sZCgpKT09PXFlKHIpKXJldHVybiBnfXJldHVybi0xfWZ1bmN0aW9uIFZFKGUsdCl7dmFyIG4scixhO3JldHVybiBuPXQ9PW51bGw/aGMoem8oZS5mLG51bGwpKTp5XyhlLmksdCksRGUobiwyNDEpPyhhPWwobiwyNDEpLGEuemkoKT09bnVsbCxhKTpEZShuLDUwNyk/KHI9bChuLDIwMzcpLGE9ci5hLGEmJihhLnliPT1udWxsfHwodD09bnVsbD9qdShlLmYsbnVsbCxhKTpCdyhlLmksdCxhKSkpLGEpOm51bGx9ZnVuY3Rpb24gZFRuKGUpe1o5ZSgpO3ZhciB0LG4scixhLG8sZixnO2lmKGU9PW51bGx8fChhPWUubGVuZ3RoLGElMiE9MCkpcmV0dXJuIG51bGw7Zm9yKHQ9aVYoZSksbz1hLzJ8MCxuPVdlKEFsLEM2LDI4LG8sMTUsMSkscj0wO3I8bztyKyspe2lmKGY9R01bdFtyKjJdXSxmPT0tMXx8KGc9R01bdFtyKjIrMV1dLGc9PS0xKSlyZXR1cm4gbnVsbDtuW3JdPShmPDw0fGcpPDwyND4+MjR9cmV0dXJuIG59ZnVuY3Rpb24gZ1RuKGUsdCxuKXt2YXIgcixhLG87aWYoYT1sKFFvKGUuaSx0KSwzMTQpLCFhKWlmKGE9bmV3IHlodChlLmQsdCxuKSxROChlLmksdCxhKSwkOGUodCkpdmhuKGUuYSx0LmMsdC5iLGEpO2Vsc2Ugc3dpdGNoKG89UTluKHQpLHI9bChRbyhlLnAsbyksMjUyKSxvLmcpe2Nhc2UgMTpjYXNlIDM6YS5qPSEwLFhpZShyLHQuYixhKTticmVhaztjYXNlIDQ6Y2FzZSAyOmEuaz0hMCxYaWUocix0LmMsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gcFRuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2Zvcih3PWVnKGUuYy1lLmImZS5hLmxlbmd0aC0xKSxFPW51bGwsQz1udWxsLG89bmV3IG5BKGUpO28uYSE9by5iOylhPWwoRlYobyksMTApLG49KGc9bChRKGEsKGZ0KCksbzEpKSwxMiksZz9nLmk6bnVsbCkscj0oZj1sKFEoYSwkZiksMTIpLGY/Zi5pOm51bGwpLChFIT1ufHxDIT1yKSYmKG0ydCh3LHQpLEU9bixDPXIpLCRuKHcuYyxhKTttMnQodyx0KX1mdW5jdGlvbiBiVG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2lmKGc9bmV3IFgyLHc9V3UoZS5lLkRoKCksdCksYT1sKGUuZywxMjQpLEZvKCksbCh0LDY5KS54aygpKWZvcihmPTA7ZjxlLmk7KytmKW89YVtmXSx3LmFtKG8uTGsoKSkmJnFyKGcsbyk7ZWxzZSBmb3IoZj0wO2Y8ZS5pOysrZilvPWFbZl0sdy5hbShvLkxrKCkpJiYoRT1vLm1kKCkscXIoZyxyP3pBKGUsdCxmLGcuaSxFKTpFKSk7cmV0dXJuIE84ZShnLG4pfWZ1bmN0aW9uICQydChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7aWYoYT1lLmJbdC5wXSxhPj0wKXJldHVybiBhO2ZvcihvPTEsZz1uZXcgRyh0LmopO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTIpLHI9bmV3IEcoZi5nKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTgpLEU9bi5kLmksdCE9RSYmKHc9JDJ0KGUsRSksbz1iLk1hdGgubWF4KG8sdysxKSk7cmV0dXJuIGg1bihlLHQsbyksb31mdW5jdGlvbiB6MnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2lmKGE9ZS5iW3QucF0sYT49MClyZXR1cm4gYTtmb3Iobz0xLGc9bmV3IEcodC5qKTtnLmE8Zy5jLmMubGVuZ3RoOylmb3IoZj1sKHJlKGcpLDEyKSxyPW5ldyBHKGYuZSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE4KSxFPW4uYy5pLHQhPUUmJih3PXoydChlLEUpLG89Yi5NYXRoLm1heChvLHcrMSkpO3JldHVybiBxNm4oZSx0LG8pLG99ZnVuY3Rpb24gcTJ0KGUsdCxuKXt2YXIgcixhLG87Zm9yKHI9MTtyPGUuYy5sZW5ndGg7cisrKXtmb3Iobz0oU24ocixlLmMubGVuZ3RoKSxsKGUuY1tyXSwxMCkpLGE9cjthPjAmJnQuTmUoKFNuKGEtMSxlLmMubGVuZ3RoKSxsKGUuY1thLTFdLDEwKSksbyk+MDspcmYoZSxhLChTbihhLTEsZS5jLmxlbmd0aCksbChlLmNbYS0xXSwxMCkpKSwtLWE7U24oYSxlLmMubGVuZ3RoKSxlLmNbYV09b31uLmE9bmV3IFByLG4uYj1uZXcgUHJ9ZnVuY3Rpb24gbVRuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO2ZvcihDPShyPWwodC5lJiZ0LmUoKSw5KSxuZXcgWmgocixsKGMwKHIsci5sZW5ndGgpLDkpLDApKSx3PUd5KG4sIltcXFtcXF1cXHMsXSsiKSxvPXcsZj0wLGc9by5sZW5ndGg7ZjxnOysrZilpZihhPW9bZl0sJHkoYSkubGVuZ3RoIT0wKXtpZihFPVhwdChlLGEpLEU9PW51bGwpcmV0dXJuIG51bGw7ZDAoQyxsKEUsMjIpKX1yZXR1cm4gQ31mdW5jdGlvbiB2VG4oZSl7dmFyIHQsbixyLGE7Zm9yKGE9ZS5sZW5ndGgsdD1udWxsLHI9MDtyPGE7cisrKW49KFhuKHIsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChyKSkscGQoIi4qKz97WygpfFxcXiQiLGNsKG4pKT49MD8odHx8KHQ9bmV3IGhfLHI+MCYmWG8odCwoR2EoMCxyLGUubGVuZ3RoKSxlLnN1YnN0cigwLHIpKSkpLHQuYSs9IlxcIixVayh0LG4mWnMpKTp0JiZVayh0LG4mWnMpO3JldHVybiB0P3QuYTplfWZ1bmN0aW9uIHdUbihlKXt2YXIgdCxuLHI7Zm9yKG49bmV3IEcoZS5hLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSxyPShucigwKSwwKSxyPjAmJighKFVnKGUuYS5jKSYmdC5uLmQpJiYhKEI1KGUuYS5jKSYmdC5uLmIpJiYodC5nLmQtPWIuTWF0aC5tYXgoMCxyLzItLjUpKSwhKFVnKGUuYS5jKSYmdC5uLmEpJiYhKEI1KGUuYS5jKSYmdC5uLmMpJiYodC5nLmErPWIuTWF0aC5tYXgoMCxyLTEpKSl9ZnVuY3Rpb24gSDJ0KGUsdCxuKXt2YXIgcixhO2lmKChlLmMtZS5iJmUuYS5sZW5ndGgtMSk9PTIpdD09KEN0KCksUW4pfHx0PT1hcj8odVYobCh3QShlKSwxNSksKEloKCksa2cpKSx1VihsKHdBKGUpLDE1KSxHYikpOih1VihsKHdBKGUpLDE1KSwoSWgoKSxHYikpLHVWKGwod0EoZSksMTUpLGtnKSk7ZWxzZSBmb3IoYT1uZXcgbkEoZSk7YS5hIT1hLmI7KXI9bChGVihhKSwxNSksdVYocixuKX1mdW5jdGlvbiB5VG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoYT0kayhuZXcgeXdlKGUpKSxnPW5ldyBVYShhLGEuYy5sZW5ndGgpLG89JGsobmV3IHl3ZSh0KSksdz1uZXcgVWEobyxvLmMubGVuZ3RoKSxmPW51bGw7Zy5iPjAmJncuYj4wJiYobj0obXIoZy5iPjApLGwoZy5hLlhiKGcuYz0tLWcuYiksMjcpKSxyPShtcih3LmI+MCksbCh3LmEuWGIody5jPS0tdy5iKSwyNykpLG49PXIpOylmPW47cmV0dXJuIGZ9ZnVuY3Rpb24gVjJ0KGUsdCxuKXt2YXIgcixhLG8sZjtVb3QoZSx0KT5Vb3QoZSxuKT8ocj1PYyhuLChDdCgpLGFyKSksZS5kPXIuZGMoKT8wOlRhZShsKHIuWGIoMCksMTIpKSxmPU9jKHQsZXIpLGUuYj1mLmRjKCk/MDpUYWUobChmLlhiKDApLDEyKSkpOihhPU9jKG4sKEN0KCksZXIpKSxlLmQ9YS5kYygpPzA6VGFlKGwoYS5YYigwKSwxMikpLG89T2ModCxhciksZS5iPW8uZGMoKT8wOlRhZShsKG8uWGIoMCksMTIpKSl9ZnVuY3Rpb24gVTJ0KGUsdCl7dmFyIG4scixhLG87Zm9yKG49ZS5vLmEsbz1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTtvLk9iKCk7KWE9bChvLlBiKCksMTE3KSxhLmUuYT1uKnplKEdlKGEuYi5vZihwSykpKSxhLmUuYj0ocj1hLmIsci5wZigocGkoKSxyaCkpP3IuYWcoKT09KEN0KCksUW4pPy1yLk1mKCkuYi16ZShHZShyLm9mKHJoKSkpOnplKEdlKHIub2YocmgpKSk6ci5hZygpPT0oQ3QoKSxRbik/LXIuTWYoKS5iOjApfWZ1bmN0aW9uIHhUbihlLHQpe3ZhciBuLHIsYSxvO2Zvcih0LlVnKCJTZWxmLUxvb3AgcHJlLXByb2Nlc3NpbmciLDEpLHI9bmV3IEcoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTApLG81bihuKSYmKGE9KG89bmV3IGlkdChuKSxydChuLChmdCgpLGgzKSxvKSxVX24obyksbyksSXMoZmMoRGMobmV3IGJuKG51bGwsbmV3IGtuKGEuZCwxNikpLG5ldyBDaiksbmV3IFNqKSxuZXcgSFopLFJDbihhKSk7dC5WZygpfWZ1bmN0aW9uIGtUbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O3Q9ITAsYT1udWxsLG89bnVsbDtlOmZvcih3PW5ldyBHKGUuYSk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGc9bChyZSh3KSwxMCkscj1uZXcgaHIoZHIoa2EoZykuYS5LYygpLG5ldyBqKSk7anIocik7KXtpZihuPWwoeHIociksMTgpLGEmJmEhPWcpe3Q9ITE7YnJlYWsgZX1pZihhPWcsZj1uLmMuaSxvJiZvIT1mKXt0PSExO2JyZWFrIGV9bz1mfXJldHVybiB0fWZ1bmN0aW9uIEVUbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2ZvcihvPS0xLGc9LTEsZj0wO2Y8dC5jLmxlbmd0aCYmKGE9KFNuKGYsdC5jLmxlbmd0aCksbCh0LmNbZl0sMzM5KSksIShhLmM+ZS5jKSk7ZisrKWEuYT49ZS5zJiYobzwwJiYobz1mKSxnPWYpO3JldHVybiB3PShlLnMrZS5jKS8yLG8+PTAmJihyPXVfbihlLHQsbyxnKSx3PW9sbigoU24ocix0LmMubGVuZ3RoKSxsKHQuY1tyXSwzMzkpKSksZ0VuKHQscixuKSksd31mdW5jdGlvbiBXcihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7Zm9yKGY9KG89bmV3IENJLG8pLGc3ZShmLChucih0KSx0KSksRT0oIWYuYiYmKGYuYj1uZXcgZGgoKFRuKCksTm8pLFljLGYpKSxmLmIpLHc9MTt3PG4ubGVuZ3RoO3crPTIpR04oRSxuW3ctMV0sblt3XSk7Zm9yKHI9KCFlLkFiJiYoZS5BYj1uZXcgbnQobWksZSwwLDMpKSxlLkFiKSxnPTA7ZzwwOysrZylhPWpnbihsKE9lKHIsci5pLTEpLDU5OCkpLHI9YTtxcihyLGYpfWZ1bmN0aW9uIEcydChlLHQsbil7dmFyIHIsYSxvO2ZvcihUZm4uY2FsbCh0aGlzLG5ldyBidCksdGhpcy5hPXQsdGhpcy5iPW4sdGhpcy5lPWUscj0oZS5iJiZnbGUoZSksZS5hKSx0aGlzLmQ9RWF0KHIuYSx0aGlzLmEpLHRoaXMuYz1FYXQoci5iLHRoaXMuYiksdjRuKHRoaXMsdGhpcy5kLHRoaXMuYyksVmtuKHRoaXMpLG89dGhpcy5lLmUuYS5lYygpLktjKCk7by5PYigpOylhPWwoby5QYigpLDI3MiksYS5jLmMubGVuZ3RoPjAmJnNNbih0aGlzLGEpfWZ1bmN0aW9uIEY5ZShlLHQsbixyLGEsbyl7dmFyIGYsZyx3O2lmKCFhW3QuYV0pe2ZvcihhW3QuYV09ITAsZj1yLCFmJiYoZj1uZXcgS0gpLHZ0KGYuZSx0KSx3PW9bdC5hXS5LYygpO3cuT2IoKTspZz1sKHcuUGIoKSwyOTApLCEoZy5kPT1ufHxnLmM9PW4pJiYoZy5jIT10JiZGOWUoZSxnLmMsdCxmLGEsbyksZy5kIT10JiZGOWUoZSxnLmQsdCxmLGEsbyksdnQoZi5jLGcpLHJhKGYuZCxnLmIpKTtyZXR1cm4gZn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBUVG4oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKHQ9MCxhPW5ldyBHKGUuZSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSxuPVc1KG5ldyBibihudWxsLG5ldyBrbihyLmIsMTYpKSxuZXcgb1opLG4mJisrdDtmb3IoZj1uZXcgRyhlLmcpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxOCksZz1XNShuZXcgYm4obnVsbCxuZXcga24oby5iLDE2KSksbmV3IGNaKSxnJiYrK3Q7cmV0dXJuIHQ+PTJ9ZnVuY3Rpb24gQ1RuKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDO2ZvcihvPWUuYy5kLmosZj1sKGZmKG4sMCksOCksQz0xO0M8bi5iO0MrKylFPWwoZmYobixDKSw4KSxDcyhyLGYsci5jLmIsci5jKSxnPW1kKE9pKG5ldyBFbyhmKSxFKSwuNSksdz1tZChuZXcgYm9lKFU3ZShvKSksYSksT2koZyx3KSxDcyhyLGcsci5jLmIsci5jKSxmPUUsbz10PT0wPyRWKG8pOmY4ZShvKTt1aShyLChtcihuLmIhPTApLGwobi5jLmIuYyw4KSkpfWZ1bmN0aW9uIFNUbihlKXtxeSgpO3ZhciB0LG4scjtyZXR1cm4gbj1ycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtDMF0pKSwhKHlOKE5IKG4sZSkpPjF8fCh0PXJzKEUwLGhlKGxlKEtvLDEpLGl0LDk1LDAsW21wLFQwXSkpLHlOKE5IKHQsZSkpPjEpfHwocj1ycyhTMCxoZShsZShLbywxKSxpdCw5NSwwLFtFZyxxZl0pKSx5TihOSChyLGUpKT4xKSl9ZnVuY3Rpb24gUjllKGUsdCxuKXt2YXIgcixhLG87Zm9yKG89bmV3IEcoZS50KTtvLmE8by5jLmMubGVuZ3RoOylyPWwocmUobyksMjc0KSxyLmIuczwwJiZyLmM+MCYmKHIuYi5uLT1yLmMsci5iLm48PTAmJnIuYi51PjAmJnVpKHQsci5iKSk7Zm9yKGE9bmV3IEcoZS5pKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMjc0KSxyLmEuczwwJiZyLmM+MCYmKHIuYS51LT1yLmMsci5hLnU8PTAmJnIuYS5uPjAmJnVpKG4sci5hKSl9ZnVuY3Rpb24gQ1UoZSl7dmFyIHQsbixyLGEsbztpZihlLmc9PW51bGwmJihlLmQ9ZS5iaihlLmYpLHFyKGUsZS5kKSxlLmMpKXJldHVybiBvPWUuZixvO2lmKHQ9bChlLmdbZS5pLTFdLDUxKSxhPXQuUGIoKSxlLmU9dCxuPWUuYmooYSksbi5PYigpKWUuZD1uLHFyKGUsbik7ZWxzZSBmb3IoZS5kPW51bGw7IXQuT2IoKSYmKFRzKGUuZywtLWUuaSxudWxsKSxlLmkhPTApOylyPWwoZS5nW2UuaS0xXSw1MSksdD1yO3JldHVybiBhfWZ1bmN0aW9uIF9UbihlLHQpe3ZhciBuLHIsYSxvLGYsZztpZihyPXQsYT1yLkxrKCksdXAoZS5lLGEpKXtpZihhLlNpKCkmJnFIKGUsYSxyLm1kKCkpKXJldHVybiExfWVsc2UgZm9yKGc9V3UoZS5lLkRoKCksYSksbj1sKGUuZywxMjQpLG89MDtvPGUuaTsrK28paWYoZj1uW29dLGcuYW0oZi5MaygpKSlyZXR1cm4gUGkoZixyKT8hMToobChuNihlLG8sdCksNzYpLCEwKTtyZXR1cm4gcXIoZSx0KX1mdW5jdGlvbiBBVG4oZSx0LG4scil7dmFyIGEsbyxmLGc7Zm9yKGE9bmV3IG9wKGUpLHgoYSwoWm4oKSxjdSkpLHJ0KGEsKGZ0KCksemkpLHQpLHJ0KGEsV0wscikscnQoYSwoTnQoKSxNcyksKFJhKCksTXUpKSxydChhLG8xLHQuYykscnQoYSwkZix0LmQpLHlidCh0LGEpLGc9Yi5NYXRoLmZsb29yKG4vMiksZj1uZXcgRyhhLmopO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMiksby5uLmI9ZztyZXR1cm4gYX1mdW5jdGlvbiBLMnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKHQ9MCxyPW5ldyBHKGUuYSk7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49bChyZShyKSwxMCksbz1uZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSk7anIobyk7KWE9bCh4cihvKSwxOCksZT09YS5kLmkuYyYmYS5jLmo9PShDdCgpLGVyKSYmKGY9STEoYS5jKS5iLGc9STEoYS5kKS5iLHQ9Yi5NYXRoLm1heCh0LGIuTWF0aC5hYnMoZy1mKSkpO3JldHVybiB0fWZ1bmN0aW9uIFcydChlLHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobi5VZygiRUxLIEZvcmNlIiwxKSxSdChCdChhdCh0LChiMCgpLHRBZSkpKSl8fEtPKChyPW5ldyBZdigoYXcoKSxuZXcgSnYodCkpKSxyKSksZz11MHQodCksVzduKGcpLGJ5bihlLGwoUShnLGVBZSksNDMyKSksZj0kbXQoZS5hLGcpLG89Zi5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwyMzUpLHdBbihlLmIsYSxuLmVoKDEvZi5nYygpKSk7Zz1ld3QoZiksbHd0KGcpLG4uVmcoKX1mdW5jdGlvbiBqOWUoZSx0LG4pe3N3aXRjaChuLmcpe2Nhc2UgMTpyZXR1cm4gbmV3IGx0KHQuYSxiLk1hdGgubWluKGUuZC5iLHQuYikpO2Nhc2UgMjpyZXR1cm4gbmV3IGx0KGIuTWF0aC5tYXgoZS5jLmEsdC5hKSx0LmIpO2Nhc2UgMzpyZXR1cm4gbmV3IGx0KHQuYSxiLk1hdGgubWF4KGUuYy5iLHQuYikpO2Nhc2UgNDpyZXR1cm4gbmV3IGx0KGIuTWF0aC5taW4odC5hLGUuZC5hKSx0LmIpfXJldHVybiBuZXcgbHQodC5hLHQuYil9ZnVuY3Rpb24gc1AoZSl7dmFyIHQsbixyO2Zvcih0PWVnKDErKCFlLmMmJihlLmM9bmV3IG50KEhsLGUsOSw5KSksZS5jKS5pKSx2dCh0LCghZS5kJiYoZS5kPW5ldyBMbihqcyxlLDgsNSkpLGUuZCkpLHI9bmV3IG9yKCghZS5jJiYoZS5jPW5ldyBudChIbCxlLDksOSkpLGUuYykpO3IuZSE9ci5pLmdjKCk7KW49bChncihyKSwxMjMpLHZ0KHQsKCFuLmQmJihuLmQ9bmV3IExuKGpzLG4sOCw1KSksbi5kKSk7cmV0dXJuIFhyKHQpLG5ldyBQXyh0KX1mdW5jdGlvbiBjcChlKXt2YXIgdCxuLHI7Zm9yKHQ9ZWcoMSsoIWUuYyYmKGUuYz1uZXcgbnQoSGwsZSw5LDkpKSxlLmMpLmkpLHZ0KHQsKCFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksZS5lKSkscj1uZXcgb3IoKCFlLmMmJihlLmM9bmV3IG50KEhsLGUsOSw5KSksZS5jKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDEyMyksdnQodCwoIW4uZSYmKG4uZT1uZXcgTG4oanMsbiw3LDQpKSxuLmUpKTtyZXR1cm4gWHIodCksbmV3IFBfKHQpfWZ1bmN0aW9uIExUbihlKXt2YXIgdCxuLHIsYTtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHI9VHUoZSwhMCksYT1lQi5sZW5ndGgsdm4oci5zdWJzdHIoci5sZW5ndGgtYSxhKSxlQikpe2lmKG49ci5sZW5ndGgsbj09NCl7aWYodD0oWG4oMCxyLmxlbmd0aCksci5jaGFyQ29kZUF0KDApKSx0PT00MylyZXR1cm4gR1BlO2lmKHQ9PTQ1KXJldHVybiB2QXR9ZWxzZSBpZihuPT0zKXJldHVybiBHUGV9cmV0dXJuIGp5KHIpfWZ1bmN0aW9uIE1UbihlLHQpe3ZhciBuLHIsYSxvLGY7aWYodC5VZygiQnJlYWtpbmcgUG9pbnQgUHJvY2Vzc29yIiwxKSxkRG4oZSksUnQoQnQoUShlLChOdCgpLHVEZSkpKSkpe2ZvcihhPW5ldyBHKGUuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwzMCksbj0wLGY9bmV3IEcoci5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTApLG8ucD1uKys7Y0xuKGUpLGZidChlLCEwKSxmYnQoZSwhMSl9dC5WZygpfWZ1bmN0aW9uIERUbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEw9cj8oQ3QoKSxlcik6KEN0KCksYXIpLGE9ITEsdz10W25dLEU9MCxDPXcubGVuZ3RoO0U8QzsrK0UpZz13W0VdLCFVOChsKFEoZywoTnQoKSxNcykpLDEwMSkpJiYoZj1nLmUsQj0hT2MoZyxMKS5kYygpJiYhIWYsQiYmKG89SXhlKGYpLGUuYj1uZXcgTnhlKG8scj8wOm8ubGVuZ3RoLTEpKSxhPWF8dlNuKGUsZyxMLEIpKTtyZXR1cm4gYX1mdW5jdGlvbiBZMnQoZSx0LG4scil7dmFyIGEsbyxmO2lmKGY9a3hlKHQsbiksJG4oci5jLHQpLGUualtmLnBdPT0tMXx8ZS5qW2YucF09PTJ8fGUuYVt0LnBdKXJldHVybiByO2ZvcihlLmpbZi5wXT0tMSxvPW5ldyBocihkcihzcChmKS5hLktjKCksbmV3IGopKTtqcihvKTspaWYoYT1sKHhyKG8pLDE4KSwhKCEoIURvKGEpJiYhKCFEbyhhKSYmYS5jLmkuYz09YS5kLmkuYykpfHxhPT10KSlyZXR1cm4gWTJ0KGUsYSxmLHIpO3JldHVybiByfWZ1bmN0aW9uIElUbihlKXt2YXIgdCxuLHIsYTtmb3IodD0wLG49MCxhPW5ldyBHKGUuaik7YS5hPGEuYy5jLmxlbmd0aDspaWYocj1sKHJlKGEpLDEyKSx0PVlyKGJvKHQsanV0KEZpKG5ldyBibihudWxsLG5ldyBrbihyLmUsMTYpKSxuZXcgczgpKSkpLG49WXIoYm8obixqdXQoRmkobmV3IGJuKG51bGwsbmV3IGtuKHIuZywxNikpLG5ldyBRaikpKSksdD4xfHxuPjEpcmV0dXJuIDI7cmV0dXJuIHQrbj09MT8yOjB9ZnVuY3Rpb24gSmwoZSx0KXt2YXIgbixyLGEsbyxmLGc7cmV0dXJuIG89ZS5hKmhoZStlLmIqMTUwMixnPWUuYipoaGUrMTEsbj1iLk1hdGguZmxvb3IoZypNUCksbys9bixnLT1uKmNFZSxvJT1jRWUsZS5hPW8sZS5iPWcsdDw9MjQ/Yi5NYXRoLmZsb29yKGUuYSptX2VbdF0pOihhPWUuYSooMTw8dC0yNCksZj1iLk1hdGguZmxvb3IoZS5iKnZfZVt0XSkscj1hK2Yscj49MjE0NzQ4MzY0OCYmKHItPTQyOTQ5NjcyOTYpLHIpfWZ1bmN0aW9uIFgydChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7Zm9yKG89bmV3IGJ0LEU9bmV3IG9zLGY9bmV3IG9zLFlBbihlLEUsZix0KSxfTW4oZSxFLGYsdCxuKSx3PW5ldyBHKGUpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihnPWwocmUodyksMTE4KSxhPW5ldyBHKGcuayk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDEzMiksKCF0fHxyLmM9PShKMCgpLHFiKSkmJmcuZz5yLmIuZyYmJG4oby5jLHIpO3JldHVybiBvfWZ1bmN0aW9uIE9UbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2ZvcihnPWUuYyxmPShuLnE/bi5xOihDbigpLENuKCksbWcpKS52YygpLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDQ0KSxyPSFfayhGaShuZXcgYm4obnVsbCxuZXcga24oZywxNikpLG5ldyBXbChuZXcgYXR0KHQsbykpKSkuQmQoKEFtKCksengpKSxyJiYodz1vLm1kKCksRGUodyw0KSYmKGE9SDhlKHcpLGEhPW51bGwmJih3PWEpKSx0LnFmKGwoby5sZCgpLDE0OSksdykpfWZ1bmN0aW9uIE5UbihlLHQsbil7dmFyIHIsYTtpZihxTyhlLmIpLFgwKGUuYiwoUE4oKSxXVyksKGJfKCkscUIpKSxYMChlLmIsWVcsdC5nKSxYMChlLmIsWFcsdC5hKSxlLmE9YlAoZS5iLHQpLG4uVWcoIkNvbXBhY3Rpb24gYnkgc2hyaW5raW5nIGEgdHJlZSIsZS5hLmMubGVuZ3RoKSx0LmkuYy5sZW5ndGg+MSlmb3IoYT1uZXcgRyhlLmEpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSw0Nyksci5LZih0LG4uZWgoMSkpO24uVmcoKX1mdW5jdGlvbiAkOWUoZSx0LG4pe3ZhciByLGEsbztpZihvPWc2KChFbCgpLGlvKSxlLkRoKCksdCksbyl7aWYoRm8oKSwhbChvLDY5KS54aygpJiYobz1yeChpYyhpbyxvKSksIW8pKXRocm93IHVlKG5ldyBZbihPYit0LnhlKCkra0wpKTthPShyPWUuSWgobyksbChyPj0wP2UuTGgociwhMCwhMCk6SHcoZSxvLCEwKSwxNjApKSxsKGEsMjIwKS5YbCh0LG4pfWVsc2UgdGhyb3cgdWUobmV3IFluKE9iK3QueGUoKStrTCkpfWZ1bmN0aW9uIFNVKGUsdCl7dmFyIG4scixhLG8sZjtpZih0KXtmb3Iobz1EZShlLkNiLDkwKXx8RGUoZS5DYiwxMDIpLGY9IW8mJkRlKGUuQ2IsMzMxKSxyPW5ldyBvcigoIXQuYSYmKHQuYT1uZXcgR18odCxXbyx0KSksdC5hKSk7ci5lIT1yLmkuZ2MoKTspaWYobj1sKGdyKHIpLDg5KSxhPWpVKG4pLG8/RGUoYSw5MCk6Zj9EZShhLDE1Nik6YSlyZXR1cm4gYTtyZXR1cm4gbz8oVG4oKSxLZik6KFRuKCksdGQpfWVsc2UgcmV0dXJuIG51bGx9ZnVuY3Rpb24gUFRuKGUsdCl7dmFyIG4scixhLG87Zm9yKHQuVWcoIlJlc2l6ZSBjaGlsZCBncmFwaCB0byBmaXQgcGFyZW50LiIsMSkscj1uZXcgRyhlLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwzMCkscmEoZS5hLG4uYSksbi5hLmMubGVuZ3RoPTA7Zm9yKG89bmV3IEcoZS5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTApLFZhKGEsbnVsbCk7ZS5iLmMubGVuZ3RoPTAsdFNuKGUpLGUuZSYmSl9uKGUuZSxlKSx0LlZnKCl9ZnVuY3Rpb24gQlRuKGUsdCl7dmFyIG4scixhLG8sZjtmb3IodC5VZygiRWRnZSBqb2luaW5nIiwxKSxuPVJ0KEJ0KFEoZSwoTnQoKSxsZGUpKSkpLGE9bmV3IEcoZS5iKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1sKHJlKGEpLDMwKSxmPW5ldyBVYShyLmEsMCk7Zi5iPGYuZC5nYygpOylvPShtcihmLmI8Zi5kLmdjKCkpLGwoZi5kLlhiKGYuYz1mLmIrKyksMTApKSxvLms9PShabigpLEFhKSYmKENsZShvLG4pLHBoKGYpKTt0LlZnKCl9ZnVuY3Rpb24gRlRuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobj1uZXcgYnQsYT1EYyhuZXcgYm4obnVsbCxuZXcga24oZSwxNikpLG5ldyB4dGUpLG89RGMobmV3IGJuKG51bGwsbmV3IGtuKGUsMTYpKSxuZXcga3RlKSxmPUt2bihodm4oeHkoYkNuKGhlKGxlKHBPbiwxKSxSbiw4NDgsMCxbYSxvXSkpLG5ldyBFdGUpKSkscj0xO3I8Zi5sZW5ndGg7cisrKWZbcl0tZltyLTFdPj0yKnQmJnZ0KG4sbmV3IHZhZShmW3ItMV0rdCxmW3JdLXQpKTtyZXR1cm4gbn1mdW5jdGlvbiBSVG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7aWYobilmb3Iobz1uLmEubGVuZ3RoLHI9bmV3IERtKG8pLGc9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSxhPUprKG4sZi5hKSxhJiYodz1nbW4oZSwoRT0ocmIoKSxDPW5ldyBqd2UsQyksdCYmejllKEUsdCksRSksYSksZkUodyxZZyhhLFBkKSksbVUoYSx3KSxoOWUoYSx3KSx3Y2UoZSxhLHcpKX1mdW5jdGlvbiBfVShlKXt2YXIgdCxuLHIsYSxvLGY7aWYoIWUuail7aWYoZj1uZXcgSVMsdD1xTSxvPXQuYS56YyhlLHQpLG89PW51bGwpe2ZvcihyPW5ldyBvcihkYyhlKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDI5KSxhPV9VKG4pLEFzKGYsYSkscXIoZixuKTt0LmEuQmMoZSkhPW51bGx9SXkoZiksZS5qPW5ldyBONSgobChPZSh0dCgobGIoKSxWbikubyksMTEpLDE5KSxmLmkpLGYuZyksWWwoZSkuYiY9LTMzfXJldHVybiBlLmp9ZnVuY3Rpb24galRuKGUpe3ZhciB0LG4scixhO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYocj1UdShlLCEwKSxhPWVCLmxlbmd0aCx2bihyLnN1YnN0cihyLmxlbmd0aC1hLGEpLGVCKSl7aWYobj1yLmxlbmd0aCxuPT00KXtpZih0PShYbigwLHIubGVuZ3RoKSxyLmNoYXJDb2RlQXQoMCkpLHQ9PTQzKXJldHVybiBLUGU7aWYodD09NDUpcmV0dXJuIHdBdH1lbHNlIGlmKG49PTMpcmV0dXJuIEtQZX1yZXR1cm4gbmV3IEF3ZShyKX1mdW5jdGlvbiAkVG4oZSl7dmFyIHQsbixyO3JldHVybiBuPWUubCxuJm4tMXx8KHI9ZS5tLHImci0xKXx8KHQ9ZS5oLHQmdC0xKXx8dD09MCYmcj09MCYmbj09MD8tMTp0PT0wJiZyPT0wJiZuIT0wP2k3ZShuKTp0PT0wJiZyIT0wJiZuPT0wP2k3ZShyKSsyMjp0IT0wJiZyPT0wJiZuPT0wP2k3ZSh0KSs0NDotMX1mdW5jdGlvbiB1NihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGE9dC5hJmUuZixvPW51bGwscj1lLmJbYV07O3I9ci5iKXtpZihyPT10KXtvP28uYj10LmI6ZS5iW2FdPXQuYjticmVha31vPXJ9Zm9yKGY9dC5mJmUuZixvPW51bGwsbj1lLmNbZl07O249bi5kKXtpZihuPT10KXtvP28uZD10LmQ6ZS5jW2ZdPXQuZDticmVha31vPW59dC5lP3QuZS5jPXQuYzplLmE9dC5jLHQuYz90LmMuZT10LmU6ZS5lPXQuZSwtLWUuaSwrK2UuZ31mdW5jdGlvbiB6VG4oZSx0KXt2YXIgbjt0LmQ/dC5kLmI9dC5iOmUuYT10LmIsdC5iP3QuYi5kPXQuZDplLmU9dC5kLCF0LmUmJiF0LmM/KG49bChMZihsKGF4KGUuYix0LmEpLDI2MCkpLDI2MCksbi5hPTAsKytlLmMpOihuPWwoTGYobChjcihlLmIsdC5hKSwyNjApKSwyNjApLC0tbi5hLHQuZT90LmUuYz10LmM6bi5iPWwoTGYodC5jKSw1MTEpLHQuYz90LmMuZT10LmU6bi5jPWwoTGYodC5lKSw1MTEpKSwtLWUuZH1mdW5jdGlvbiBxVG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEM7Zm9yKG49ZS5vLHQ9ZS5wLGY9SWksYT1sbyxnPUlpLG89bG8sRT0wO0U8bjsrK0UpZm9yKEM9MDtDPHQ7KytDKXI2KGUsRSxDKSYmKGY9Yi5NYXRoLm1pbihmLEUpLGE9Yi5NYXRoLm1heChhLEUpLGc9Yi5NYXRoLm1pbihnLEMpLG89Yi5NYXRoLm1heChvLEMpKTtyZXR1cm4gdz1hLWYrMSxyPW8tZysxLG5ldyBTYXQocHQoZikscHQoZykscHQodykscHQocikpfWZ1bmN0aW9uIFl1ZShlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPW5ldyBVYShlLDApLG49KG1yKG8uYjxvLmQuZ2MoKSksbChvLmQuWGIoby5jPW8uYisrKSwxNDgpKTtvLmI8by5kLmdjKCk7KXI9KG1yKG8uYjxvLmQuZ2MoKSksbChvLmQuWGIoby5jPW8uYisrKSwxNDgpKSxhPW5ldyBMNGUoci5jLG4uZCx0KSxtcihvLmI+MCksby5hLlhiKG8uYz0tLW8uYiksYnkobyxhKSxtcihvLmI8by5kLmdjKCkpLG8uZC5YYihvLmM9by5iKyspLGEuYT0hMSxuPXJ9ZnVuY3Rpb24gUTJ0KGUpe3ZhciB0LG4scixhLG8sZjtmb3IoYT1sKFEoZSwoZnQoKSxyVykpLDEyKSxmPW5ldyBHKGUuaik7Zi5hPGYuYy5jLmxlbmd0aDspe2ZvcihvPWwocmUoZiksMTIpLHI9bmV3IEcoby5nKTtyLmE8ci5jLmMubGVuZ3RoOylyZXR1cm4gdD1sKHJlKHIpLDE4KSxGYSh0LGEpLG87Zm9yKG49bmV3IEcoby5lKTtuLmE8bi5jLmMubGVuZ3RoOylyZXR1cm4gdD1sKHJlKG4pLDE4KSxwbyh0LGEpLG99cmV0dXJuIG51bGx9ZnVuY3Rpb24gSjJ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKHc9bChkeShlLmEsdCksMTcpLmEsbj9PeGUoZS5hLHB0KHcrMSksdCk6T3hlKGUuYSxwdCh3LTEpLHQpLGY9bmV3IGJkLGE9bmV3IGhyKGRyKChuP3FzKHQpOmthKHQpKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDE4KSxuP289ci5kLmk6bz1yLmMuaSxxZShkeShlLmEsbykpPT09cWUoZHkoZS5hLHQpKSYmKGc9Zi5hLnpjKG8sZiksZz09bnVsbCk7cmV0dXJuIGZ9ZnVuY3Rpb24gSFRuKGUsdCxuKXt2YXIgcixhO3I9WmMobi5xLmdldFRpbWUoKSksaXUociwwKTwwPyhhPWIyLVlyKFJOKHIyKHIpLGIyKSksYT09YjImJihhPTApKTphPVlyKFJOKHIsYjIpKSx0PT0xPyhhPWIuTWF0aC5taW4oKGErNTApLzEwMHwwLDkpLGhiKGUsNDgrYSZacykpOnQ9PTI/KGE9Yi5NYXRoLm1pbigoYSs1KS8xMHwwLDk5KSxhZyhlLGEsMikpOihhZyhlLGEsMyksdD4zJiZhZyhlLDAsdC0zKSl9ZnVuY3Rpb24gVlRuKGUpe3ZhciB0LG4scixhO3JldHVybiBxZShRKGUsKE50KCkscDQpKSk9PT1xZSgocnAoKSxBMikpPyFlLmUmJnFlKFEoZSxUQikpIT09cWUoKHZFKCksdkIpKToocj1sKFEoZSxaMWUpLDI5OSksYT1SdChCdChRKGUsZWRlKSkpfHxxZShRKGUsSkwpKT09PXFlKChkQSgpLG1CKSksdD1sKFEoZSxTTWUpLDE3KS5hLG49ZS5hLmMubGVuZ3RoLCFhJiZyIT0odkUoKSx2QikmJih0PT0wfHx0Pm4pKX1mdW5jdGlvbiBVVG4oZSl7dmFyIHQsbjtmb3Iobj0wO248ZS5jLmxlbmd0aCYmIShWaXQoKFNuKG4sZS5jLmxlbmd0aCksbChlLmNbbl0sMTEzKSkpPjApO24rKyk7aWYobj4wJiZuPGUuYy5sZW5ndGgtMSlyZXR1cm4gbjtmb3IodD0wO3Q8ZS5jLmxlbmd0aCYmIShWaXQoKFNuKHQsZS5jLmxlbmd0aCksbChlLmNbdF0sMTEzKSkpPjApO3QrKyk7cmV0dXJuIHQ+MCYmbjxlLmMubGVuZ3RoLTE/dDplLmMubGVuZ3RoLzJ8MH1mdW5jdGlvbiBaMnQoZSx0KXt2YXIgbixyO2lmKHQhPWUuQ2J8fGUuRGI+PjE2IT02JiZ0KXtpZihGRShlLHQpKXRocm93IHVlKG5ldyBZbihFTCtkMnQoZSkpKTtyPW51bGwsZS5DYiYmKHI9KG49ZS5EYj4+MTYsbj49MD9seGUoZSxyKTplLkNiLlRoKGUsLTEtbixudWxsLHIpKSksdCYmKHI9bXgodCxlLDYscikpLHI9V3llKGUsdCxyKSxyJiZyLm9qKCl9ZWxzZSBlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDYsdCx0KSl9ZnVuY3Rpb24gQVUoZSx0KXt2YXIgbixyO2lmKHQhPWUuQ2J8fGUuRGI+PjE2IT0zJiZ0KXtpZihGRShlLHQpKXRocm93IHVlKG5ldyBZbihFTCtldnQoZSkpKTtyPW51bGwsZS5DYiYmKHI9KG49ZS5EYj4+MTYsbj49MD9neGUoZSxyKTplLkNiLlRoKGUsLTEtbixudWxsLHIpKSksdCYmKHI9bXgodCxlLDEyLHIpKSxyPVl5ZShlLHQsciksciYmci5vaigpfWVsc2UgZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwzLHQsdCkpfWZ1bmN0aW9uIHo5ZShlLHQpe3ZhciBuLHI7aWYodCE9ZS5DYnx8ZS5EYj4+MTYhPTkmJnQpe2lmKEZFKGUsdCkpdGhyb3cgdWUobmV3IFluKEVMK0pidChlKSkpO3I9bnVsbCxlLkNiJiYocj0obj1lLkRiPj4xNixuPj0wP2Z4ZShlLHIpOmUuQ2IuVGgoZSwtMS1uLG51bGwscikpKSx0JiYocj1teCh0LGUsOSxyKSkscj1YeWUoZSx0LHIpLHImJnIub2ooKX1lbHNlIGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsOSx0LHQpKX1mdW5jdGlvbiBVRShlKXt2YXIgdCxuLHIsYSxvO2lmKHI9T2YoZSksbz1lLmosbz09bnVsbCYmcilyZXR1cm4gZS5KaygpP251bGw6ci5paygpO2lmKERlKHIsMTU2KSl7aWYobj1yLmprKCksbiYmKGE9bi53aSgpLGEhPWUuaSkpe2lmKHQ9bChyLDE1NiksdC5uaygpKXRyeXtlLmc9YS50aSh0LG8pfWNhdGNoKGYpe2lmKGY9YnMoZiksRGUoZiw4MikpZS5nPW51bGw7ZWxzZSB0aHJvdyB1ZShmKX1lLmk9YX1yZXR1cm4gZS5nfXJldHVybiBudWxsfWZ1bmN0aW9uIGVidChlKXt2YXIgdDtyZXR1cm4gdD1uZXcgYnQsdnQodCxuZXcgQjgobmV3IGx0KGUuYyxlLmQpLG5ldyBsdChlLmMrZS5iLGUuZCkpKSx2dCh0LG5ldyBCOChuZXcgbHQoZS5jLGUuZCksbmV3IGx0KGUuYyxlLmQrZS5hKSkpLHZ0KHQsbmV3IEI4KG5ldyBsdChlLmMrZS5iLGUuZCtlLmEpLG5ldyBsdChlLmMrZS5iLGUuZCkpKSx2dCh0LG5ldyBCOChuZXcgbHQoZS5jK2UuYixlLmQrZS5hKSxuZXcgbHQoZS5jLGUuZCtlLmEpKSksdH1mdW5jdGlvbiBHVG4oZSl7dmFyIHQsbixyO2lmKGU9PW51bGwpcmV0dXJuIHVsO3RyeXtyZXR1cm4geGMoZSl9Y2F0Y2goYSl7aWYoYT1icyhhKSxEZShhLDEwMykpcmV0dXJuIHQ9YSxyPV9tKGJoKGUpKSsiQCIrKG49KFZnKCkscThlKGUpPj4+MCksbi50b1N0cmluZygxNikpLGE2bihVM24oKSwoRGsoKSwiRXhjZXB0aW9uIGR1cmluZyBsZW5pZW50Rm9ybWF0IGZvciAiK3IpLHQpLCI8IityKyIgdGhyZXcgIitfbSh0LlJtKSsiPiI7dGhyb3cgdWUoYSl9fWZ1bmN0aW9uIEtUbihlLHQsbil7dmFyIHIsYSxvO2ZvcihvPXQuYS5lYygpLktjKCk7by5PYigpOylhPWwoby5QYigpLDc0KSxyPWwoY3IoZS5iLGEpLDI3MiksIXImJihkcyhjZyhhKSk9PWRzKEViKGEpKT9OQ24oZSxhLG4pOmNnKGEpPT1kcyhFYihhKSk/Y3IoZS5jLGEpPT1udWxsJiZjcihlLmIsRWIoYSkpIT1udWxsJiZJdnQoZSxhLG4sITEpOmNyKGUuZCxhKT09bnVsbCYmY3IoZS5iLGNnKGEpKSE9bnVsbCYmSXZ0KGUsYSxuLCEwKSl9ZnVuY3Rpb24gV1RuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKGE9ZS5LYygpO2EuT2IoKTspZm9yKHI9bChhLlBiKCksMTApLGc9bmV3IGd1LE1jKGcsciksbGEoZywoQ3QoKSxhcikpLHJ0KGcsKGZ0KCksb1cpLChIbigpLCEwKSksZj10LktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDEwKSx3PW5ldyBndSxNYyh3LG8pLGxhKHcsZXIpLHJ0KHcsb1csITApLG49bmV3IFR3LHJ0KG4sb1csITApLHBvKG4sZyksRmEobix3KX1mdW5jdGlvbiBZVG4oZSx0LG4scil7dmFyIGEsbyxmLGc7YT1SMXQoZSx0LG4pLG89UjF0KGUsbix0KSxmPWwoY3IoZS5jLHQpLDExOCksZz1sKGNyKGUuYyxuKSwxMTgpLGE8bz9uZXcgUG0oKEowKCksRTQpLGYsZyxvLWEpOm88YT9uZXcgUG0oKEowKCksRTQpLGcsZixhLW8pOihhIT0wfHwhKCF0Lml8fCFuLmkpJiZyW3QuaS5jXVtuLmkuY10pJiYobmV3IFBtKChKMCgpLEU0KSxmLGcsMCksbmV3IFBtKEU0LGcsZiwwKSl9ZnVuY3Rpb24gdGJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKGE9MCxmPW5ldyBHKHQuYSk7Zi5hPGYuYy5jLmxlbmd0aDspZm9yKG89bChyZShmKSwxMCksYSs9by5vLmIrby5kLmErby5kLmQrZS5lLHI9bmV3IGhyKGRyKGthKG8pLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksMTgpLG4uYy5pLms9PShabigpLEF1KSYmKHc9bi5jLmksZz1sKFEodywoZnQoKSx6aSkpLDEwKSxhKz1nLm8uYitnLmQuYStnLmQuZCk7cmV0dXJuIGF9ZnVuY3Rpb24gVkEoKXtWQT1VLFE2PW5ldyBnTygiQ0FORElEQVRFX1BPU0lUSU9OX0xBU1RfUExBQ0VEX1JJR0hUIiwwKSxlOT1uZXcgZ08oIkNBTkRJREFURV9QT1NJVElPTl9MQVNUX1BMQUNFRF9CRUxPVyIsMSkseE09bmV3IGdPKCJDQU5ESURBVEVfUE9TSVRJT05fV0hPTEVfRFJBV0lOR19SSUdIVCIsMikseU09bmV3IGdPKCJDQU5ESURBVEVfUE9TSVRJT05fV0hPTEVfRFJBV0lOR19CRUxPVyIsMyksekI9bmV3IGdPKCJXSE9MRV9EUkFXSU5HIiw0KX1mdW5jdGlvbiBYVG4oZSx0KXtpZihEZSh0LDIwNykpcmV0dXJuIHk0bihlLGwodCwyNykpO2lmKERlKHQsMTkzKSlyZXR1cm4gXzRuKGUsbCh0LDEyMykpO2lmKERlKHQsMzY2KSlyZXR1cm4gbXBuKGUsbCh0LDEzNSkpO2lmKERlKHQsMzI2KSlyZXR1cm4gTkFuKGUsbCh0LDc0KSk7aWYodClyZXR1cm4gbnVsbDt0aHJvdyB1ZShuZXcgWW4odlNlK1RiKG5ldyBJbChoZShsZSh3YSwxKSxSbiwxLDUsW3RdKSkpKSl9ZnVuY3Rpb24gUVRuKGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihvPW5ldyBvcyxhPW5ldyBHKGUuZC5hKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTI1KSxyLmIuYS5jLmxlbmd0aD09MCYmQ3MobyxyLG8uYy5iLG8uYyk7aWYoby5iPjEpZm9yKHQ9aHcoKG49bmV3IFNtLCsrZS5iLG4pLGUuZCksZz1ScihvLDApO2cuYiE9Zy5kLmM7KWY9bChCcihnKSwxMjUpLHAwKHMwKGkwKGEwKHIwKG5ldyBfZiwxKSwwKSx0KSxmKSl9ZnVuY3Rpb24gSlRuKGUsdCxuKXt2YXIgcixhLG8sZixnO2ZvcihuLlVnKCJCcmVha2luZyBQb2ludCBSZW1vdmluZyIsMSksZS5hPWwoUSh0LChOdCgpLGJwKSksMjIzKSxvPW5ldyBHKHQuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwzMCksZz1uZXcgRyhfdyhhLmEpKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTApLGlodChmKSYmKHI9bChRKGYsKGZ0KCksYzMpKSwzMTMpLCFyLmQmJlV2dChlLHIpKTtuLlZnKCl9ZnVuY3Rpb24gTFUoZSx0KXt2YXIgbixyO2lmKHQhPWUuQ2J8fGUuRGI+PjE2IT0xMSYmdCl7aWYoRkUoZSx0KSl0aHJvdyB1ZShuZXcgWW4oRUwrb2tlKGUpKSk7cj1udWxsLGUuQ2ImJihyPShuPWUuRGI+PjE2LG4+PTA/cHhlKGUscik6ZS5DYi5UaChlLC0xLW4sbnVsbCxyKSkpLHQmJihyPW14KHQsZSwxMCxyKSkscj1zNGUoZSx0LHIpLHImJnIub2ooKX1lbHNlIGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMTEsdCx0KSl9ZnVuY3Rpb24gWlRuKGUpe3ZhciB0LG4scixhO2ZvcihyPW5ldyBxbShuZXcgU3IoZS5iKS5hKTtyLmI7KW49TncociksYT1sKG4ubGQoKSwxMiksdD1sKG4ubWQoKSwxMCkscnQodCwoZnQoKSx6aSksYSkscnQoYSxqbCx0KSxydChhLHhCLChIbigpLCEwKSksbGEoYSxsKFEodCxXYyksNjQpKSxRKHQsV2MpLHJ0KGEuaSwoTnQoKSxNcyksKFJhKCksc0MpKSxsKFEoZW8oYS5pKSxMdSksMjEpLkZjKChIbygpLCRUKSl9ZnVuY3Rpb24gZUNuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYobz0wLGY9MCxlLmMpZm9yKHc9bmV3IEcoZS5kLmkuaik7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDEyKSxvKz1nLmUuYy5sZW5ndGg7ZWxzZSBvPTE7aWYoZS5kKWZvcih3PW5ldyBHKGUuYy5pLmopO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMiksZis9Zy5nLmMubGVuZ3RoO2Vsc2UgZj0xO3JldHVybiBhPXVhKFJPKGYtbykpLHI9KG4rdCkvMisobi10KSooLjQqYSkscn1mdW5jdGlvbiB0Q24oZSl7UnkoKTt2YXIgdCxuO2lmKGUuSGMoKEN0KCksUGMpKSl0aHJvdyB1ZShuZXcgWW4oIlBvcnQgc2lkZXMgbXVzdCBub3QgY29udGFpbiBVTkRFRklORUQiKSk7c3dpdGNoKGUuZ2MoKSl7Y2FzZSAxOnJldHVybiBiQjtjYXNlIDI6cmV0dXJuIHQ9ZS5IYyhhcikmJmUuSGMoZXIpLG49ZS5IYyhRbikmJmUuSGMoRHIpLHR8fG4/V0s6S0s7Y2FzZSAzOnJldHVybiBHSztjYXNlIDQ6cmV0dXJuIFVLO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFh1ZShlLHQsbil7cmV0dXJuIGg2KCksZ0UoZSx0KSYmZ0UoZSxuKT8hMTpfbGUobmV3IGx0KGUuYyxlLmQpLG5ldyBsdChlLmMrZS5iLGUuZCksdCxuKXx8X2xlKG5ldyBsdChlLmMrZS5iLGUuZCksbmV3IGx0KGUuYytlLmIsZS5kK2UuYSksdCxuKXx8X2xlKG5ldyBsdChlLmMrZS5iLGUuZCtlLmEpLG5ldyBsdChlLmMsZS5kK2UuYSksdCxuKXx8X2xlKG5ldyBsdChlLmMsZS5kK2UuYSksbmV3IGx0KGUuYyxlLmQpLHQsbil9ZnVuY3Rpb24gcTllKGUsdCl7dmFyIG4scixhLG87aWYoIWUuZGMoKSl7Zm9yKG49MCxyPWUuZ2MoKTtuPHI7KytuKWlmKG89ZWkoZS5YYihuKSksbz09bnVsbD90PT1udWxsOnZuKG8uc3Vic3RyKDAsMyksIiEjIyIpP3QhPW51bGwmJihhPXQubGVuZ3RoLCF2bihvLnN1YnN0cihvLmxlbmd0aC1hLGEpLHQpfHxvLmxlbmd0aCE9dC5sZW5ndGgrMykmJiF2bihjdix0KTp2bihvLGMwZSkmJiF2bihjdix0KXx8dm4obyx0KSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBuQ24oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2ZvcihmPWUuai5jLmxlbmd0aCx3PVdlKHZPbix3RWUsMzE0LGYsMCwxKSxnPTA7ZzxmO2crKylvPWwoanQoZS5qLGcpLDEyKSxvLnA9Zyx3W2ddPWRFbihDMnQobyksbixyKTtmb3IoX0NuKGUsdyxuLHQsciksRT1uZXcgUHIsYT0wO2E8dy5sZW5ndGg7YSsrKXdbYV0mJmtpKEUsbChqdChlLmosYSksMTIpLHdbYV0pO0UuZi5jK0UuaS5jIT0wJiYocnQoZSwoZnQoKSxLTCksRSksXzluKGUsdykpfWZ1bmN0aW9uIHJDbihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3IodC5VZygiUGFydGl0aW9uIHBvc3Rwcm9jZXNzaW5nIiwxKSxyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49bChyZShyKSwzMCksbz1uZXcgRyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihhPWwocmUobyksMTApLGc9bmV3IEcoYS5qKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTIpLFJ0KEJ0KFEoZiwoZnQoKSxvVykpKSkmJlFfKGcpO3QuVmcoKX1mdW5jdGlvbiBpQ24oZSx0LG4pe3ZhciByLGEsbztmb3IoYT1uZXcgRyhlLmEuYik7YS5hPGEuYy5jLmxlbmd0aDspaWYocj1sKHJlKGEpLDYwKSxvPUc1KHIpLG8mJm8uaz09KFpuKCksVXMpKXN3aXRjaChsKFEobywoZnQoKSxXYykpLDY0KS5nKXtjYXNlIDQ6by5uLmE9dC5hO2JyZWFrO2Nhc2UgMjpvLm4uYT1uLmEtKG8uby5hK28uZC5jKTticmVhaztjYXNlIDE6by5uLmI9dC5iO2JyZWFrO2Nhc2UgMzpvLm4uYj1uLmItKG8uby5iK28uZC5hKX19ZnVuY3Rpb24gc0NuKGUsdCxuKXt2YXIgcixhLG87Zm9yKG4uVWcoIlByb2Nlc3NvciBkZXRlcm1pbmUgdGhlIGhlaWdodCBmb3IgZWFjaCBsZXZlbCIsMSksZS5hPXQuYi5iPT0wPzE6dC5iLmIsYT1udWxsLHI9UnIodC5iLDApOyFhJiZyLmIhPXIuZC5jOylvPWwoQnIociksNDApLFJ0KEJ0KFEobywoUWkoKSxWYikpKSkmJihhPW8pO2EmJlZtdChlLE8xKGhlKGxlKFBXLDEpLElHLDQwLDAsW2FdKSksbixsKFEodCwoSGMoKSx5MykpLDg4KSksbi5WZygpfWZ1bmN0aW9uIGFDbihlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKHI9KHJiKCksbz1uZXcgYV8sbyksYVAocixlKSxuPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwyNyksZj0oYT1uZXcgYV8sYSksTFUoZixyKSxGNShmLHQuZyx0LmYpLGZFKGYsdC5rKSxRaChmLHQuaSx0LmopLHFyKCghci5hJiYoci5hPW5ldyBudChBaSxyLDEwLDExKSksci5hKSxmKSxhUChmLHQpO3JldHVybiByfWZ1bmN0aW9uIG9DbihlLHQsbil7dmFyIHIsYSxvLGYsZztyZXR1cm4gYT1sKGF0KHQsKHdVKCksWk9lKSksMTcpLCFhJiYoYT1wdCgwKSksbz1sKGF0KG4sWk9lKSwxNyksIW8mJihvPXB0KDApKSxhLmE+by5hPy0xOmEuYTxvLmE/MTplLmEmJihyPVlpKHQuaixuLmopLHIhPTB8fChyPVlpKHQuaSxuLmkpLHIhPTApKT9yOihmPXQuZyp0LmYsZz1uLmcqbi5mLFlpKGYsZykpfWZ1bmN0aW9uIGNDbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMO2lmKCsrZS5lLHc9ZS5kPT1udWxsPzA6ZS5kLmxlbmd0aCx0Pncpe2ZvcihDPWUuZCxlLmQ9V2UodlBlLF9TZSw2NiwyKncrNCwwLDEpLG89MDtvPHc7KytvKWlmKEU9Q1tvXSxFKWZvcihyPUUuZyxMPUUuaSxnPTA7ZzxMOysrZylhPWwocltnXSwxMzYpLGY9UXllKGUsYS5CaSgpKSxuPWUuZFtmXSwhbiYmKG49ZS5kW2ZdPWUuZGsoKSksbi5GYyhhKTtyZXR1cm4hMH1lbHNlIHJldHVybiExfWZ1bmN0aW9uIHVDbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2lmKGE9bixvPWEuTGsoKSx1cChlLmUsbykpe2lmKG8uU2koKSl7Zm9yKHI9bChlLmcsMTI0KSxmPTA7ZjxlLmk7KytmKWlmKGc9cltmXSxQaShnLGEpJiZmIT10KXRocm93IHVlKG5ldyBZbihXUCkpfX1lbHNlIGZvcih3PVd1KGUuZS5EaCgpLG8pLHI9bChlLmcsMTI0KSxmPTA7ZjxlLmk7KytmKWlmKGc9cltmXSx3LmFtKGcuTGsoKSkpdGhyb3cgdWUobmV3IFluKFpQKSk7X0EoZSx0LG4pfWZ1bmN0aW9uIG5idChlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3Iobj1sKFEodCwoZnQoKSxwcCkpLDIxKSxmPWwoJGkoKE1sZSgpLFhpKSxuKSwyMSksZz1sKCRpKGJpLG4pLDIxKSxvPWYuS2MoKTtvLk9iKCk7KWlmKHI9bChvLlBiKCksMjEpLCFsKCRpKGUuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtmb3IoYT1nLktjKCk7YS5PYigpOylpZihyPWwoYS5QYigpLDIxKSwhbCgkaShlLmIsciksMTUpLmRjKCkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gSDllKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKGUuYS5jLmxlbmd0aD09MSlyZXR1cm4gc3B0KGwoanQoZS5hLDApLDE3MiksdCk7Zm9yKGY9czRuKGUpLHc9MCxFPWUuZCxvPWYsQz1lLmQsZz0oRS1vKS8yK287bysxPEU7KXtmb3Iodz0wLHI9bmV3IEcoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTcyKSx3Kz0oYT1aQShuLGcsITEpLGEuYSk7dzx0PyhDPWcsRT1nKTpvPWcsZz0oRS1vKS8yK299cmV0dXJuIEN9ZnVuY3Rpb24gYVAoZSx0KXt2YXIgbixyLGEsbyxmO2lmKCF0KXJldHVybiBlO2lmKERlKHQsMzQyKSlmb3IoYT1sKHQsMzQyKSxvPSghZS5vJiYoZS5vPW5ldyB4bCgoc3UoKSxDZyksTDIsZSwwKSksZS5vKSxyPWEuZ2goKS5jLktjKCk7ci5lIT1yLmkuZ2MoKTspbj1sKHIuWWooKSw0NCksZj1uLm1kKCksR04obyxsKG4ubGQoKSwxNDkpLGYpO2Vsc2UhZS5vJiYoZS5vPW5ldyB4bCgoc3UoKSxDZyksTDIsZSwwKSksbGZ0KGUubyx0Lm5mKCkpO3JldHVybiBlfWZ1bmN0aW9uIGxDbihlKXt2YXIgdCxuLHIsYSxvO3JldHVybiBpc05hTihlKT8oaUUoKSxYU2UpOmU8LTkyMjMzNzIwMzY4NTQ3NzZlMz8oaUUoKSxnNnQpOmU+PTkyMjMzNzIwMzY4NTQ3NzZlMz8oaUUoKSxXU2UpOihhPSExLGU8MCYmKGE9ITAsZT0tZSkscj0wLGU+PVptJiYocj11YShlL1ptKSxlLT1yKlptKSxuPTAsZT49THgmJihuPXVhKGUvTHgpLGUtPW4qTHgpLHQ9dWEoZSksbz1xdSh0LG4sciksYSYmeWNlKG8pLG8pfWZ1bmN0aW9uIGhDbihlKXt2YXIgdCxuLHIsYSxvO2lmKG89bmV3IGJ0LFZ1KGUuYixuZXcgSmQobykpLGUuYi5jLmxlbmd0aD0wLG8uYy5sZW5ndGghPTApe2Zvcih0PShTbigwLG8uYy5sZW5ndGgpLGwoby5jWzBdLDgyKSksbj0xLHI9by5jLmxlbmd0aDtuPHI7KytuKWE9KFNuKG4sby5jLmxlbmd0aCksbChvLmNbbl0sODIpKSxhIT10JiZGeG4odCxhKTtpZihEZSh0LDYzKSl0aHJvdyB1ZShsKHQsNjMpKTtpZihEZSh0LDI5NikpdGhyb3cgdWUobCh0LDI5NikpfX1mdW5jdGlvbiBmQ24oZSx0KXt2YXIgbixyLGEsbztmb3Iobj0hdHx8IWUudS5IYygoUmwoKSx2cCkpLG89MCxhPW5ldyBHKGUuZS5YZigpKTthLmE8YS5jLmMubGVuZ3RoOyl7aWYocj1sKHJlKGEpLDg1Miksci5hZygpPT0oQ3QoKSxQYykpdGhyb3cgdWUobmV3IFluKCJMYWJlbCBhbmQgbm9kZSBzaXplIGNhbGN1bGF0b3IgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHBvcnRzIHRoYXQgaGF2ZSBwb3J0IHNpZGVzIGFzc2lnbmVkLiIpKTtyLlFmKG8rKyksZTRuKGUscixuKX19ZnVuY3Rpb24gVjllKGUpe3ZhciB0LG4scixhLG87Zm9yKG49bmV3IEcoZS5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IodD1sKHJlKG4pLDMxNiksdC5qPW51bGwsbz10LmEuYS5lYygpLktjKCk7by5PYigpOylyPWwoby5QYigpLDYwKSxZMChyLmIpLCghdC5qfHxyLmQuYzx0LmouZC5jKSYmKHQuaj1yKTtmb3IoYT10LmEuYS5lYygpLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDYwKSxyLmIuYT1yLmQuYy10LmouZC5jLHIuYi5iPXIuZC5kLXQuai5kLmR9cmV0dXJuIGV9ZnVuY3Rpb24gTVUoZSl7dmFyIHQsbixyLGEsbztmb3Iobj1uZXcgRyhlLmEuYSk7bi5hPG4uYy5jLmxlbmd0aDspe2Zvcih0PWwocmUobiksMTk0KSx0LmY9bnVsbCxvPXQuYS5hLmVjKCkuS2MoKTtvLk9iKCk7KXI9bChvLlBiKCksODYpLFkwKHIuZSksKCF0LmZ8fHIuZy5jPHQuZi5nLmMpJiYodC5mPXIpO2ZvcihhPXQuYS5hLmVjKCkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksODYpLHIuZS5hPXIuZy5jLXQuZi5nLmMsci5lLmI9ci5nLmQtdC5mLmcuZH1yZXR1cm4gZX1mdW5jdGlvbiBkQ24oZSl7dmFyIHQsbixyO3JldHVybiBuPWwoZS5hLDE3KS5hLHI9bChlLmIsMTcpLmEsdD1iLk1hdGgubWF4KGIuTWF0aC5hYnMobiksYi5NYXRoLmFicyhyKSksbjx0JiZyPT0tdD9uZXcgY2EocHQobisxKSxwdChyKSk6bj09dCYmcjx0P25ldyBjYShwdChuKSxwdChyKzEpKTpuPj0tdCYmcj09dD9uZXcgY2EocHQobi0xKSxwdChyKSk6bmV3IGNhKHB0KG4pLHB0KHItMSkpfWZ1bmN0aW9uIHJidCgpe3JldHVybiB2bygpLGhlKGxlKEVPbiwxKSxpdCw4MSwwLFtQQWUsSUFlLEQ2LGYxZSxlTGUsREssekssbDQsSkFlLEhBZSxYQWUsdTQsWkFlLCRBZSx0TGUsU0FlLFBLLGQxZSxMSyxSSyxyTGUsRkssX0FlLFFBZSxpTGUsakssbkxlLE1LLEZBZSxXQWUsS0FlLHFLLE1BZSxBSyxPSyxMQWUsTFQsVUFlLHpBZSxZQWUsekwsT0FlLERBZSxHQWUscUFlLE5LLCRLLEFBZSxCSyxWQWUsSUssUkFlLEJBZSxnQixfSyxqQWUsTkFlXSl9ZnVuY3Rpb24gZ0NuKGUsdCxuKXtlLmQ9MCxlLmI9MCx0Lms9PShabigpLEF1KSYmbi5rPT1BdSYmbChRKHQsKGZ0KCksemkpKSwxMCk9PWwoUShuLHppKSwxMCkmJigkb2UodCkuaj09KEN0KCksUW4pP1YydChlLHQsbik6VjJ0KGUsbix0KSksdC5rPT1BdSYmbi5rPT1BYT8kb2UodCkuaj09KEN0KCksUW4pP2UuZD0xOmUuYj0xOm4uaz09QXUmJnQuaz09QWEmJigkb2Uobikuaj09KEN0KCksUW4pP2UuYj0xOmUuZD0xKSxKNm4oZSx0LG4pfWZ1bmN0aW9uIHBDbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMO3JldHVybiBMPWp4ZShlKSx0PWUuYSx3PXQhPW51bGwsdyYmemsoTCwiY2F0ZWdvcnkiLGUuYSksYT1aSShuZXcgYnIoZS5kKSksZj0hYSxmJiYoRT1uZXcgJHAsZTEoTCwia25vd25PcHRpb25zIixFKSxuPW5ldyBvUWUoRSksdG8obmV3IGJyKGUuZCksbikpLG89WkkoZS5nKSxnPSFvLGcmJihDPW5ldyAkcCxlMShMLCJzdXBwb3J0ZWRGZWF0dXJlcyIsQykscj1uZXcgY1FlKEMpLHRvKGUuZyxyKSksTH1mdW5jdGlvbiBiQ24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFO2ZvcihyPSExLHQ9MzM2LG49MCxvPW5ldyBHcnQoZS5sZW5ndGgpLGc9ZSx3PTAsRT1nLmxlbmd0aDt3PEU7Kyt3KWY9Z1t3XSxyPXJ8KHhiKGYpLCExKSxhPShmYihmKSxmLmEpLHZ0KG8uYSxYcihhKSksdCY9YS55ZCgpLG49TnluKG4sYS56ZCgpKTtyZXR1cm4gbChsKHpzdChuZXcgYm4obnVsbCxJdWUobmV3IGtuKCh3dygpLFA4ZShvLmEpKSwxNiksbmV3IGJlLHQsbikpLG5ldyBDeihlKSksNjg3KSw4NDgpfWZ1bmN0aW9uIG1DbihlLHQpe3ZhciBuO2UuZCYmKHQuYyE9ZS5lLmN8fG8zbihlLmUuYix0LmIpKSYmKHZ0KGUuZixlLmQpLGUuYT1lLmQuYytlLmQuYixlLmQ9bnVsbCxlLmU9bnVsbCksSWxuKHQuYik/ZS5jPXQ6ZS5iPXQsKHQuYj09KHdFKCksczMpJiYhdC5hfHx0LmI9PWE0JiZ0LmF8fHQuYj09TTYmJnQuYXx8dC5iPT1vNCYmIXQuYSkmJmUuYyYmZS5iJiYobj1uZXcgZWYoZS5hLGUuYy5kLHQuYy1lLmEsZS5iLmQtZS5jLmQpLGUuZD1uLGUuZT10KX1mdW5jdGlvbiBVQShlKXt2YXIgdDtpZihtSmUuY2FsbCh0aGlzKSx0aGlzLmk9bmV3IHlJLHRoaXMuZz1lLHRoaXMuZj1sKGUuZSYmZS5lKCksOSkubGVuZ3RoLHRoaXMuZj09MCl0aHJvdyB1ZShuZXcgWW4oIlRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIHBoYXNlIGluIHRoZSBwaGFzZSBlbnVtZXJhdGlvbi4iKSk7dGhpcy5jPSh0PWwoSzAodGhpcy5nKSw5KSxuZXcgWmgodCxsKGMwKHQsdC5sZW5ndGgpLDkpLDApKSx0aGlzLmE9bmV3IFhzLHRoaXMuYj1uZXcgUHJ9ZnVuY3Rpb24gVTllKGUsdCl7dmFyIG4scjtpZih0IT1lLkNifHxlLkRiPj4xNiE9NyYmdCl7aWYoRkUoZSx0KSl0aHJvdyB1ZShuZXcgWW4oRUwrbHB0KGUpKSk7cj1udWxsLGUuQ2ImJihyPShuPWUuRGI+PjE2LG4+PTA/aHhlKGUscik6ZS5DYi5UaChlLC0xLW4sbnVsbCxyKSkpLHQmJihyPWwodCw1NCkuUmgoZSwxLG9GLHIpKSxyPUo0ZShlLHQsciksciYmci5vaigpfWVsc2UgZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSw3LHQsdCkpfWZ1bmN0aW9uIGlidChlLHQpe3ZhciBuLHI7aWYodCE9ZS5DYnx8ZS5EYj4+MTYhPTMmJnQpe2lmKEZFKGUsdCkpdGhyb3cgdWUobmV3IFluKEVMK2MxdChlKSkpO3I9bnVsbCxlLkNiJiYocj0obj1lLkRiPj4xNixuPj0wP2R4ZShlLHIpOmUuQ2IuVGgoZSwtMS1uLG51bGwscikpKSx0JiYocj1sKHQsNTQpLlJoKGUsMCx1RixyKSkscj1aNGUoZSx0LHIpLHImJnIub2ooKX1lbHNlIGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMyx0LHQpKX1mdW5jdGlvbiBRdWUoZSx0KXtHRSgpO3ZhciBuLHIsYSxvLGYsZyx3LEUsQztyZXR1cm4gdC5kPmUuZCYmKGc9ZSxlPXQsdD1nKSx0LmQ8NjM/aVNuKGUsdCk6KGY9KGUuZCYtMik8PDQsRT12NmUoZSxmKSxDPXY2ZSh0LGYpLHI9bWxlKGUsc3goRSxmKSksYT1tbGUodCxzeChDLGYpKSx3PVF1ZShFLEMpLG49UXVlKHIsYSksbz1RdWUobWxlKEUsciksbWxlKGEsQykpLG89VGxlKFRsZShvLHcpLG4pLG89c3gobyxmKSx3PXN4KHcsZjw8MSksVGxlKFRsZSh3LG8pLG4pKX1mdW5jdGlvbiBwMigpe3AyPVUsZ2RlPW5ldyBNNShjeXQsMCksZkRlPW5ldyBNNSgiTE9OR0VTVF9QQVRIIiwxKSxkRGU9bmV3IE01KCJMT05HRVNUX1BBVEhfU09VUkNFIiwyKSxkZGU9bmV3IE01KCJDT0ZGTUFOX0dSQUhBTSIsMyksaERlPW5ldyBNNSgkaGUsNCksZ0RlPW5ldyBNNSgiU1RSRVRDSF9XSURUSCIsNSksQ1c9bmV3IE01KCJNSU5fV0lEVEgiLDYpLFdUPW5ldyBNNSgiQkZfTU9ERUxfT1JERVIiLDcpLFlUPW5ldyBNNSgiREZfTU9ERUxfT1JERVIiLDgpfWZ1bmN0aW9uIHZDbihlLHQsbil7dmFyIHIsYSxvLGYsZztmb3IoZj1UQShlLG4pLGc9V2Uod2csbTIsMTAsdC5sZW5ndGgsMCwxKSxyPTAsbz1mLktjKCk7by5PYigpOylhPWwoby5QYigpLDEyKSxSdChCdChRKGEsKGZ0KCkseEIpKSkpJiYoZ1tyKytdPWwoUShhLGpsKSwxMCkpO2lmKHI8dC5sZW5ndGgpdGhyb3cgdWUobmV3IG5jKCJFeHBlY3RlZCAiK3QubGVuZ3RoKyIgaGllcmFyY2hpY2FsIHBvcnRzLCBidXQgZm91bmQgb25seSAiK3IrIi4iKSk7cmV0dXJuIGd9ZnVuY3Rpb24gd0NuKGUsdCl7dmFyIG4scixhLG8sZixnO2lmKCFlLnRiKXtmb3Iobz0oIWUucmImJihlLnJiPW5ldyB3eShlLGwxLGUpKSxlLnJiKSxnPW5ldyBOOChvLmkpLGE9bmV3IG9yKG8pO2EuZSE9YS5pLmdjKCk7KXI9bChncihhKSwxNDIpLGY9ci54ZSgpLG49bChmPT1udWxsP2p1KGcuZixudWxsLHIpOkJ3KGcuaSxmLHIpLDE0MiksbiYmKGY9PW51bGw/anUoZy5mLG51bGwsbik6QncoZy5pLGYsbikpO2UudGI9Z31yZXR1cm4gbCh4dShlLnRiLHQpLDE0Mil9ZnVuY3Rpb24gb1AoZSx0KXt2YXIgbixyLGEsbyxmO2lmKChlLmk9PW51bGwmJlNkKGUpLGUuaSkubGVuZ3RoLCFlLnApe2ZvcihmPW5ldyBOOCgoMyplLmcuaS8yfDApKzEpLGE9bmV3IEg4KGUuZyk7YS5lIT1hLmkuZ2MoKTspcj1sKHJ1ZShhKSwxNzkpLG89ci54ZSgpLG49bChvPT1udWxsP2p1KGYuZixudWxsLHIpOkJ3KGYuaSxvLHIpLDE3OSksbiYmKG89PW51bGw/anUoZi5mLG51bGwsbik6QncoZi5pLG8sbikpO2UucD1mfXJldHVybiBsKHh1KGUucCx0KSwxNzkpfWZ1bmN0aW9uIEc5ZShlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEU7Zm9yKEs1bihyK0RIKG4sbi5pZSgpKSxhKSxlYXQodCxkNW4obikpLG89bi5mLG8mJkc5ZShlLHQsbywiQ2F1c2VkIGJ5OiAiLCExKSxnPShuLms9PW51bGwmJihuLms9V2UoVDBlLGR0LDgyLDAsMCwxKSksbi5rKSx3PTAsRT1nLmxlbmd0aDt3PEU7Kyt3KWY9Z1t3XSxHOWUoZSx0LGYsIlN1cHByZXNzZWQ6ICIsITEpO2NvbnNvbGUuZ3JvdXBFbmQhPW51bGwmJmNvbnNvbGUuZ3JvdXBFbmQuY2FsbChjb25zb2xlKX1mdW5jdGlvbiBjUChlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2Zvcih3PXQuZSxnPXcubGVuZ3RoLGY9dC5xLnVnKHcsbj8wOmctMSxuKSxhPXdbbj8wOmctMV0sZj1mfFVidChlLGEsbixyKSxvPW4/MTpnLTI7bj9vPGc6bz49MDtvKz1uPzE6LTEpZj1mfHQuYy5sZyh3LG8sbixyJiYhUnQoQnQoUSh0LmosKGZ0KCksamIpKSkpJiYhUnQoQnQoUSh0LmosKGZ0KCksajYpKSkpKSxmPWZ8dC5xLnVnKHcsbyxuKSxmPWZ8VWJ0KGUsd1tvXSxuLHIpO3JldHVybiBuYShlLmMsdCksZn1mdW5jdGlvbiBEVShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEM9VGN0KGUuaiksTD0wLEI9Qy5sZW5ndGg7TDxCOysrTCl7aWYoRT1DW0xdLG49PShxbygpLCRsKXx8bj09c00pZm9yKHc9a2QoRS5nKSxhPXcsbz0wLGY9YS5sZW5ndGg7bzxmOysrbylyPWFbb10sUzluKHQscikmJlV3KHIsITApO2lmKG49PXp1fHxuPT1zTSlmb3IoZz1rZChFLmUpLGE9ZyxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSxDOW4odCxyKSYmVXcociwhMCl9fWZ1bmN0aW9uIHlDbihlKXt2YXIgdCxuO3N3aXRjaCh0PW51bGwsbj1udWxsLFI4bihlKS5nKXtjYXNlIDE6dD0oQ3QoKSxhciksbj1lcjticmVhaztjYXNlIDI6dD0oQ3QoKSxEciksbj1RbjticmVhaztjYXNlIDM6dD0oQ3QoKSxlciksbj1hcjticmVhaztjYXNlIDQ6dD0oQ3QoKSxRbiksbj1Ecn1TKGUsbChmaChZOChsKCRpKGUuayx0KSwxNSkuT2MoKSxJNikpLDExMykpLGsoZSxsKGZoKHZ5KGwoJGkoZS5rLG4pLDE1KS5PYygpLEk2KSksMTEzKSl9ZnVuY3Rpb24geENuKGUpe3ZhciB0LG4scixhLG8sZjtpZihhPWwoanQoZS5qLDApLDEyKSxhLmUuYy5sZW5ndGgrYS5nLmMubGVuZ3RoPT0wKWUubi5hPTA7ZWxzZXtmb3IoZj0wLHI9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbmV3IFQ1KGEpLG5ldyBDOChhKV0pKSk7anIocik7KW49bCh4cihyKSwxMiksZis9bi5pLm4uYStuLm4uYStuLmEuYTt0PWwoUShlLChOdCgpLHAzKSksOCksbz10P3QuYTowLGUubi5hPWYvKGEuZS5jLmxlbmd0aCthLmcuYy5sZW5ndGgpLW99fWZ1bmN0aW9uIHNidChlLHQpe3ZhciBuLHIsYTtmb3Iocj1uZXcgRyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyMjUpLE1hZShsKG4uYiw2OCksbWEoSmEobCh0LmIsNjgpLmMpLGwodC5iLDY4KS5hKSksYT1UbXQobCh0LmIsNjgpLmIsbChuLmIsNjgpLmIpLGE+MSYmKGUuYT0hMCksUWRuKGwobi5iLDY4KSxPaShKYShsKHQuYiw2OCkuYyksbWQobWEoSmEobChuLmIsNjgpLmEpLGwodC5iLDY4KS5hKSxhKSkpLERvdChlLHQpLHNidChlLG4pfWZ1bmN0aW9uIGFidChlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3Iobz1uZXcgRyhlLmEuYSk7by5hPG8uYy5jLmxlbmd0aDspcj1sKHJlKG8pLDE5NCksci5lPTAsci5kLmEuJGIoKTtmb3IoYT1uZXcgRyhlLmEuYSk7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwxOTQpLG49ci5hLmEuZWMoKS5LYygpO24uT2IoKTspZm9yKHQ9bChuLlBiKCksODYpLGc9dC5mLktjKCk7Zy5PYigpOylmPWwoZy5QYigpLDg2KSxmLmQhPXImJihuYShyLmQsZiksKytmLmQuZSl9ZnVuY3Rpb24ga0NuKGUpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKHc9ZS5qLmMubGVuZ3RoLG49MCx0PXcsYT0yKncsZz1uZXcgRyhlLmopO2cuYTxnLmMuYy5sZW5ndGg7KXN3aXRjaChmPWwocmUoZyksMTIpLGYuai5nKXtjYXNlIDI6Y2FzZSA0OmYucD0tMTticmVhaztjYXNlIDE6Y2FzZSAzOnI9Zi5lLmMubGVuZ3RoLG89Zi5nLmMubGVuZ3RoLHI+MCYmbz4wP2YucD10Kys6cj4wP2YucD1uKys6bz4wP2YucD1hKys6Zi5wPW4rK31DbigpLFZzKGUuaixuZXcgVzkpfWZ1bmN0aW9uIEVDbihlKXt2YXIgdCxuO249bnVsbCx0PWwoanQoZS5nLDApLDE4KTtkb3tpZihuPXQuZC5pLG5zKG4sKGZ0KCksJGYpKSlyZXR1cm4gbChRKG4sJGYpLDEyKS5pO2lmKG4uayE9KFpuKCksUHMpJiZqcihuZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSkpKXQ9bCh4cihuZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSkpLDE4KTtlbHNlIGlmKG4uayE9UHMpcmV0dXJuIG51bGx9d2hpbGUobiYmbi5rIT0oWm4oKSxQcykpO3JldHVybiBufWZ1bmN0aW9uIFRDbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztmb3IoZz10LmosZj10Lmcsdz1sKGp0KGcsZy5jLmxlbmd0aC0xKSwxMTMpLEM9KFNuKDAsZy5jLmxlbmd0aCksbChnLmNbMF0sMTEzKSksRT12dWUoZSxmLHcsQyksbz0xO288Zy5jLmxlbmd0aDtvKyspbj0oU24oby0xLGcuYy5sZW5ndGgpLGwoZy5jW28tMV0sMTEzKSksYT0oU24obyxnLmMubGVuZ3RoKSxsKGcuY1tvXSwxMTMpKSxyPXZ1ZShlLGYsbixhKSxyPkUmJih3PW4sQz1hLEU9cik7dC5hPUMsdC5jPXd9ZnVuY3Rpb24gQ0NuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRTtmb3IoRT1uZXcgS3AobmV3IFVZZShlKSksZj1oZShsZShGOHQsMSksSTN0LDEyLDAsW3Qsbl0pLGc9MCx3PWYubGVuZ3RoO2c8dzsrK2cpZm9yKG89ZltnXSxFLmEuemMobywoSG4oKSxQYikpPT1udWxsLGE9bmV3IE4xKG8uYik7TGMoYS5hKXx8TGMoYS5iKTspcj1sKExjKGEuYSk/cmUoYS5hKTpyZShhLmIpLDE4KSxyLmM9PXIuZHx8ak8oRSxvPT1yLmM/ci5kOnIuYyk7cmV0dXJuIFhyKEUpLG5ldyBPbChFKX1mdW5jdGlvbiBwMChlKXtpZighZS5hLmR8fCFlLmEuZSl0aHJvdyB1ZShuZXcgbmMoKEdnKFU2dCksVTZ0LmsrIiBtdXN0IGhhdmUgYSBzb3VyY2UgYW5kIHRhcmdldCAiKyhHZyh6X2UpLHpfZS5rKSsiIHNwZWNpZmllZC4iKSkpO2lmKGUuYS5kPT1lLmEuZSl0aHJvdyB1ZShuZXcgbmMoIk5ldHdvcmsgc2ltcGxleCBkb2VzIG5vdCBzdXBwb3J0IHNlbGYtbG9vcHM6ICIrZS5hKyIgIitlLmEuZCsiICIrZS5hLmUpKTtyZXR1cm4gJHEoZS5hLmQuZyxlLmEpLCRxKGUuYS5lLmIsZS5hKSxlLmF9ZnVuY3Rpb24gU0NuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKHQuVWcoIkNvbnN0cmFpbnRzIFBvc3Rwcm9jZXNzb3IiLDEpLGY9MCxvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihhPWwocmUobyksMzApLHc9MCxnPSExLHI9bmV3IEcoYS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTApLG4uaz09KFpuKCksUHMpJiYoZz0hMCxydChuLChOdCgpLG1XKSxwdChmKSkscnQobixkVyxwdCh3KSksKyt3KTtnJiYrK2Z9dC5WZygpfWZ1bmN0aW9uIG9idChlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2lmKHI9MCx0LmIhPTAmJm4uYiE9MCl7bz1Scih0LDApLGY9UnIobiwwKSxnPXplKEdlKEJyKG8pKSksdz16ZShHZShCcihmKSkpLGE9ITA7ZG97aWYoZz53LWUuYiYmZzx3K2UuYilyZXR1cm4tMTtnPnctZS5hJiZnPHcrZS5hJiYrK3IsZzw9dyYmby5iIT1vLmQuYz9nPXplKEdlKEJyKG8pKSk6dzw9ZyYmZi5iIT1mLmQuYz93PXplKEdlKEJyKGYpKSk6YT0hMX13aGlsZShhKX1yZXR1cm4gcn1mdW5jdGlvbiBjYnQoZSx0KXt2YXIgbixyO3JldHVybiBxTyhlLmEpLFgwKGUuYSwoa1YoKSwkVyksJFcpLFgwKGUuYSxYNixYNikscj1uZXcgWHMsZmkocixYNiwoYlUoKSxZZGUpKSxxZShhdCh0LChTYigpLFpkZSkpKSE9PXFlKChMTigpLHpXKSkmJmZpKHIsWDYsR2RlKSxSdChCdChhdCh0LEJJZSkpKSYmZmkocixYNixYZGUpLGZpKHIsWDYsS2RlKSxSdChCdChhdCh0LFJJZSkpKSYmeWwocixYNixXZGUpLHV5ZShlLmEsciksbj1iUChlLmEsdCksbn1mdW5jdGlvbiBfQ24oZSx0LG4scixhKXt2YXIgbyxmLGcsdztmb3Iodz0obz1sKEswKE9vKSw5KSxuZXcgWmgobyxsKGMwKG8sby5sZW5ndGgpLDkpLDApKSxnPW5ldyBHKGUuaik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEyKSx0W2YucF0mJihaRG4oZix0W2YucF0sciksZDAodyxmLmopKTthPyhfdWUoZSx0LChDdCgpLGFyKSwyKm4sciksX3VlKGUsdCxlciwyKm4scikpOihfdWUoZSx0LChDdCgpLFFuKSwyKm4sciksX3VlKGUsdCxEciwyKm4scikpfWZ1bmN0aW9uIEFDbihlKXt2YXIgdCxuO2ZvcihuPW5ldyBocihkcihxcyhlKS5hLktjKCksbmV3IGopKTtqcihuKTspaWYodD1sKHhyKG4pLDE4KSx0LmQuaS5rIT0oWm4oKSxjdSkpdGhyb3cgdWUobmV3IFZwKGpoZStITihlKSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIExBU1QsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIG91dGdvaW5nIGVkZ2UgdGhhdCAgZG9lcyBub3QgZ28gdG8gYSBMQVNUX1NFUEFSQVRFIG5vZGUuIFRoYXQgbXVzdCBub3QgaGFwcGVuLiIpKX1mdW5jdGlvbiBMQ24oZSx0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKG4uVWcoIkxvbmdlc3QgcGF0aCBsYXllcmluZyIsMSksZS5hPXQsZz1lLmEuYSxlLmI9V2UoVnIsZGksMjgsZy5jLmxlbmd0aCwxNSwxKSxyPTAsZj1uZXcgRyhnKTtmLmE8Zi5jLmMubGVuZ3RoOylhPWwocmUoZiksMTApLGEucD1yLGUuYltyXT0tMSwrK3I7Zm9yKG89bmV3IEcoZyk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEwKSwkMnQoZSxhKTtnLmMubGVuZ3RoPTAsZS5hPW51bGwsZS5iPW51bGwsbi5WZygpfWZ1bmN0aW9uIE1DbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKHc9MCxDPW5ldyBHKGUuYSk7Qy5hPEMuYy5jLmxlbmd0aDspe2ZvcihFPWwocmUoQyksMTApLGc9MCxvPW5ldyBocihkcihrYShFKS5hLktjKCksbmV3IGopKTtqcihvKTspYT1sKHhyKG8pLDE4KSxMPUkxKGEuYykuYixCPUkxKGEuZCkuYixnPWIuTWF0aC5tYXgoZyxiLk1hdGguYWJzKEItTCkpO3c9Yi5NYXRoLm1heCh3LGcpfXJldHVybiBmPXIqYi5NYXRoLm1pbigxLHQvbikqdyxmfWZ1bmN0aW9uIERDbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGY9bChRKHQsKEhjKCksYkllKSksNDMzKSxvPVJyKHQuYiwwKTtvLmIhPW8uZC5jOylpZihhPWwoQnIobyksNDApLGUuYlthLmddPT0wKXtzd2l0Y2goZi5nKXtjYXNlIDA6Q2R0KGUsYSk7YnJlYWs7Y2FzZSAxOiRFbihlLGEpfWUuYlthLmddPTJ9Zm9yKHI9UnIoZS5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksTnkobi5iLmQsbiwhMCksTnkobi5jLmIsbiwhMCk7cnQodCwoUWkoKSxzSWUpLGUuYSl9ZnVuY3Rpb24gSzllKGUpe3ZhciB0O3JldHVybiB0PW5ldyBoXyxlJjI1NiYmKHQuYSs9IkYiKSxlJjEyOCYmKHQuYSs9IkgiKSxlJjUxMiYmKHQuYSs9IlgiKSxlJjImJih0LmErPSJpIiksZSY4JiYodC5hKz0ibSIpLGUmNCYmKHQuYSs9InMiKSxlJjMyJiYodC5hKz0idSIpLGUmNjQmJih0LmErPSJ3IiksZSYxNiYmKHQuYSs9IngiKSxlJm0wJiYodC5hKz0iLCIpLFF3ZSh0LmEpfWZ1bmN0aW9uIElDbihlLHQpe3ZhciBuLHIsYSxvLGYsZzt0LlVnKEF5dCwxKSxhPWwoYXQoZSwoejEoKSx2TSkpLDEwNyksbz0oIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSksZj1SN24obyksZz1iLk1hdGgubWF4KGYuYSx6ZShHZShhdChlLCh1ZygpLG1NKSkpKS0oYS5iK2EuYykpLHI9Yi5NYXRoLm1heChmLmIsemUoR2UoYXQoZSxVVykpKS0oYS5kK2EuYSkpLG49ci1mLmIsSGkoZSxiTSxuKSxIaShlLFp4LGcpLEhpKGUsWlQscituKSx0LlZnKCl9ZnVuY3Rpb24gV3UoZSx0KXtGbygpO3ZhciBuLHIsYSxvO3JldHVybiB0P3Q9PShHaSgpLG1BdCl8fCh0PT1zQXR8fHQ9PVN2fHx0PT1pQXQpJiZlIT1VUGU/bmV3IHFrZShlLHQpOihyPWwodCw2OTIpLG49ci4kaygpLG58fChXayhpYygoRWwoKSxpbyksdCkpLG49ci4kaygpKSxvPSghbi5pJiYobi5pPW5ldyBQciksbi5pKSxhPWwoaGMoem8oby5mLGUpKSwyMDQxKSwhYSYma2kobyxlLGE9bmV3IHFrZShlLHQpKSxhKTp0QXR9ZnVuY3Rpb24gT0NuKGUsdCl7dmFyIG4scjtpZihyPWpPKGUuYix0LmIpLCFyKXRocm93IHVlKG5ldyBuYygiSW52YWxpZCBoaXRib3hlcyBmb3Igc2NhbmxpbmUgY29uc3RyYWludCBjYWxjdWxhdGlvbi4iKSk7KGUwdCh0LmIsbChLdW4oZS5iLHQuYiksNjApKXx8ZTB0KHQuYixsKEd1bihlLmIsdC5iKSw2MCkpKSYmKFZnKCksU3RyaW5nLmZyb21DaGFyQ29kZSgxMCkpLGUuYVt0LmIuZl09bChjc2UoZS5iLHQuYiksNjApLG49bChvc2UoZS5iLHQuYiksNjApLG4mJihlLmFbbi5mXT10LmIpfWZ1bmN0aW9uIE5DbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihvPWw2KHQsITEsITEpLEU9UU4obyksTD16ZShHZShhdCh0LChJQSgpLFcwZSkpKSksYT12d3QoRSxMK2UuYSksQz1uZXcgR3VlKGEpLHBjKEMsdCksa2koZS5iLHQsQyksJG4obi5jLEMpLHc9KCF0Lm4mJih0Lm49bmV3IG50KGVjLHQsMSw3KSksdC5uKSxnPW5ldyBvcih3KTtnLmUhPWcuaS5nYygpOylmPWwoZ3IoZyksMTM1KSxyPXVQKGUsZiwhMCwwLDApLCRuKG4uYyxyKTtyZXR1cm4gQ31mdW5jdGlvbiBQQ24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoYT1uZXcgYnQsbj0wO248PWUuajtuKyspcj1uZXcgeXUodCksci5wPWUuai1uLCRuKGEuYyxyKTtmb3IoZz1uZXcgRyhlLnApO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMCksVmEoZixsKGp0KGEsZS5qLWUuZ1tmLnBdKSwzMCkpO2ZvcihvPW5ldyBHKGEpO28uYTxvLmMuYy5sZW5ndGg7KXc9bChyZShvKSwzMCksdy5hLmMubGVuZ3RoPT0wJiZRXyhvKTt0LmIuYy5sZW5ndGg9MCxyYSh0LmIsYSl9ZnVuY3Rpb24gQkNuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2Zvcih3PWwoUShlLChmdCgpLHppKSksMTIpLEU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFt3Lmkubix3Lm4sdy5hXSkpLmEsQz1lLmkubi5iLG49a2QoZS5lKSxhPW4sbz0wLGY9YS5sZW5ndGg7bzxmOysrbylyPWFbb10sRmEocix3KSxrbyhyLmEsbmV3IGx0KEUsQykpLHQmJihnPWwoUShyLChOdCgpLGNjKSksNzUpLGd8fChnPW5ldyBibCxydChyLGNjLGcpKSx1aShnLG5ldyBsdChFLEMpKSl9ZnVuY3Rpb24gRkNuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2ZvcihhPWwoUShlLChmdCgpLHppKSksMTIpLEU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFthLmkubixhLm4sYS5hXSkpLmEsQz1lLmkubi5iLG49a2QoZS5nKSxmPW4sZz0wLHc9Zi5sZW5ndGg7Zzx3OysrZylvPWZbZ10scG8obyxhKSxPNShvLmEsbmV3IGx0KEUsQykpLHQmJihyPWwoUShvLChOdCgpLGNjKSksNzUpLHJ8fChyPW5ldyBibCxydChvLGNjLHIpKSx1aShyLG5ldyBsdChFLEMpKSl9ZnVuY3Rpb24gUkNuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRTtpZihyPWUuYixvPXIuZSxmPVU4KGwoUShyLChOdCgpLE1zKSksMTAxKSksbj0hIW8mJmwoUShvLChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSksIShmfHxuKSlmb3IoRT0oZz1uZXcgZ2koZS5lKS5hLnZjKCkuS2MoKSxuZXcgZnMoZykpO0UuYS5PYigpOyl3PSh0PWwoRS5hLlBiKCksNDQpLGwodC5tZCgpLDExMykpLHcuYSYmKGE9dy5kLE1jKGEsbnVsbCksdy5jPSEwLGUuYT0hMCl9ZnVuY3Rpb24gakNuKGUsdCl7dmFyIG4scixhLG87Zm9yKHQuVWcoIlNlbWktSW50ZXJhY3RpdmUgQ3Jvc3NpbmcgTWluaW1pemF0aW9uIFByb2Nlc3NvciIsMSksbj0hMSxhPW5ldyBHKGUuYik7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDMwKSxvPU9OKGxWKEZpKEZpKG5ldyBibihudWxsLG5ldyBrbihyLmEsMTYpKSxuZXcgaEkpLG5ldyB2UyksbmV3IGZJKSxuZXcgX2opLG49bnxvLmEhPW51bGw7biYmcnQoZSwoZnQoKSx6TGUpLChIbigpLCEwKSksdC5WZygpfWZ1bmN0aW9uICRDbihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3IoZS5iPW5ldyBidCxlLmQ9bChRKHQsKGZ0KCksWHgpKSwyMzQpLGUuZT1FYm4oZS5kKSxvPW5ldyBvcyxhPU8xKGhlKGxlKE44dCwxKSxNM3QsMzYsMCxbdF0pKSxmPTA7ZjxhLmMubGVuZ3RoOylyPShTbihmLGEuYy5sZW5ndGgpLGwoYS5jW2ZdLDM2KSksci5wPWYrKyxuPW5ldyBFdnQocixlLmEsZS5iKSxyYShhLG4uYiksdnQoZS5iLG4pLG4ucyYmKGc9UnIobywwKSx6TyhnLG4pKTtyZXR1cm4gZS5jPW5ldyBLcyxvfWZ1bmN0aW9uIHpDbihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3IoZj1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksMTE3KSxuPW8uYz9qNGUoby5jKTowLG4+MD9vLmE/KGc9by5iLk1mKCkuYSxuPmcmJihhPShuLWcpLzIsby5kLmI9YSxvLmQuYz1hKSk6by5kLmM9ZS5zK246V18oZS51KSYmKHI9JHhlKG8uYiksci5jPDAmJihvLmQuYj0tci5jKSxyLmMrci5iPm8uYi5NZigpLmEmJihvLmQuYz1yLmMrci5iLW8uYi5NZigpLmEpKX1mdW5jdGlvbiBxQ24oZSx0KXt2YXIgbixyLGEsbyxmO2Y9bmV3IGJ0LG49dDtkbyBvPWwoY3IoZS5iLG4pLDEzMSksby5CPW4uYyxvLkQ9bi5kLCRuKGYuYyxvKSxuPWwoY3IoZS5rLG4pLDE4KTt3aGlsZShuKTtyZXR1cm4gcj0oU24oMCxmLmMubGVuZ3RoKSxsKGYuY1swXSwxMzEpKSxyLmo9ITAsci5BPWwoci5kLmEuZWMoKS5LYygpLlBiKCksMTgpLmMuaSxhPWwoanQoZixmLmMubGVuZ3RoLTEpLDEzMSksYS5xPSEwLGEuQz1sKGEuZC5hLmVjKCkuS2MoKS5QYigpLDE4KS5kLmksZn1mdW5jdGlvbiBIQ24oZSl7dmFyIHQsbjtpZih0PWwoZS5hLDE3KS5hLG49bChlLmIsMTcpLmEsdD49MCl7aWYodD09bilyZXR1cm4gbmV3IGNhKHB0KC10LTEpLHB0KC10LTEpKTtpZih0PT0tbilyZXR1cm4gbmV3IGNhKHB0KC10KSxwdChuKzEpKX1yZXR1cm4gYi5NYXRoLmFicyh0KT5iLk1hdGguYWJzKG4pP3Q8MD9uZXcgY2EocHQoLXQpLHB0KG4pKTpuZXcgY2EocHQoLXQpLHB0KG4rMSkpOm5ldyBjYShwdCh0KzEpLHB0KG4pKX1mdW5jdGlvbiBWQ24oZSl7dmFyIHQsbjtuPWwoUShlLChOdCgpLFF1KSksMTcxKSx0PWwoUShlLChmdCgpLGh2KSksMzExKSxuPT0oaGYoKSwkYik/KHJ0KGUsUXUsRUIpLHJ0KGUsaHYsKGVwKCksRjYpKSk6bj09ZDQ/KHJ0KGUsUXUsRUIpLHJ0KGUsaHYsKGVwKCksVXgpKSk6dD09KGVwKCksRjYpPyhydChlLFF1LCRiKSxydChlLGh2LHdCKSk6dD09VXgmJihydChlLFF1LGQ0KSxydChlLGh2LHdCKSl9ZnVuY3Rpb24gSVUoKXtJVT1VLElCPW5ldyBwdGUsWEV0PWZpKG5ldyBYcywodW8oKSxidSksKHZvKCksTEspKSxaRXQ9eWwoZmkobmV3IFhzLGJ1LEZLKSxtYyxCSyksZVR0PVRkKFRkKHZfKHlsKGZpKG5ldyBYcyx5MCx6SyksbWMsJEspLF91KSxqSykscUspLFFFdD15bChmaShmaShmaShuZXcgWHMsdmcsREspLF91LE9LKSxfdSxMVCksbWMsSUspLEpFdD15bChmaShmaShuZXcgWHMsX3UsTFQpLF91LEFLKSxtYyxfSyl9ZnVuY3Rpb24gR0EoKXtHQT1VLHJUdD1maSh5bChuZXcgWHMsKHVvKCksbWMpLCh2bygpLFJBZSkpLGJ1LExLKSxvVHQ9VGQoVGQodl8oeWwoZmkobmV3IFhzLHkwLHpLKSxtYywkSyksX3UpLGpLKSxxSyksaVR0PXlsKGZpKGZpKGZpKG5ldyBYcyx2ZyxESyksX3UsT0spLF91LExUKSxtYyxJSyksYVR0PWZpKGZpKG5ldyBYcyxidSxGSyksbWMsQkspLHNUdD15bChmaShmaShuZXcgWHMsX3UsTFQpLF91LEFLKSxtYyxfSyl9ZnVuY3Rpb24gVUNuKGUsdCxuLHIsYSl7dmFyIG8sZjsoIURvKHQpJiZ0LmMuaS5jPT10LmQuaS5jfHwhdWZ0KEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKSxuKSkmJiFEbyh0KSYmKHQuYz09YT9Qayh0LmEsMCxuZXcgRW8obikpOnVpKHQuYSxuZXcgRW8obikpLHImJiFXMChlLmEsbikmJihmPWwoUSh0LChOdCgpLGNjKSksNzUpLGZ8fChmPW5ldyBibCxydCh0LGNjLGYpKSxvPW5ldyBFbyhuKSxDcyhmLG8sZi5jLmIsZi5jKSxuYShlLmEsbykpKX1mdW5jdGlvbiB1YnQoZSx0KXt2YXIgbixyLGEsbztmb3Iobz1ZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSxuPW8mZS5iLmxlbmd0aC0xLGE9bnVsbCxyPWUuYltuXTtyO2E9cixyPXIuYSlpZihyLmQ9PW8mJnlkKHIuaSx0KSlyZXR1cm4gYT9hLmE9ci5hOmUuYltuXT1yLmEsUkplKGwoTGYoci5jKSw2MDQpLGwoTGYoci5mKSw2MDQpKSxXSShsKExmKHIuYiksMjI3KSxsKExmKHIuZSksMjI3KSksLS1lLmYsKytlLmUsITA7cmV0dXJuITF9ZnVuY3Rpb24gR0NuKGUpe3ZhciB0LG47Zm9yKG49bmV3IGhyKGRyKGthKGUpLmEuS2MoKSxuZXcgaikpO2pyKG4pOylpZih0PWwoeHIobiksMTgpLHQuYy5pLmshPShabigpLGN1KSl0aHJvdyB1ZShuZXcgVnAoamhlK0hOKGUpKyInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gRklSU1QsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIGluY29taW5nIGVkZ2UgdGhhdCAgZG9lcyBub3QgY29tZSBmcm9tIGEgRklSU1RfU0VQQVJBVEUgbm9kZS4gVGhhdCBtdXN0IG5vdCBoYXBwZW4uIikpfWZ1bmN0aW9uIEtDbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7aWYoYT1kMXQoZS5EYiYyNTQpLGE9PTApZS5FYj1uO2Vsc2V7aWYoYT09MSlnPVdlKHdhLFJuLDEsMiw1LDEpLG89bXVlKGUsdCksbz09MD8oZ1swXT1uLGdbMV09ZS5FYik6KGdbMF09ZS5FYixnWzFdPW4pO2Vsc2UgZm9yKGc9V2Uod2EsUm4sMSxhKzEsNSwxKSxmPWptKGUuRWIpLHI9Mix3PTAsRT0wO3I8PTEyODtyPDw9MSlyPT10P2dbRSsrXT1uOmUuRGImciYmKGdbRSsrXT1mW3crK10pO2UuRWI9Z31lLkRifD10fWZ1bmN0aW9uIGxidChlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKHRoaXMuYj1uZXcgYnQsYT0wLHI9MCxmPW5ldyBHKGUpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxNzYpLG4mJmVMbihvKSx2dCh0aGlzLmIsbyksYSs9by5vLHIrPW8ucDt0aGlzLmIuYy5sZW5ndGg+MCYmKG89bChqdCh0aGlzLmIsMCksMTc2KSxhKz1vLm8scis9by5wKSxhKj0yLHIqPTIsdD4xP2E9dWEoYi5NYXRoLmNlaWwoYSp0KSk6cj11YShiLk1hdGguY2VpbChyL3QpKSx0aGlzLmE9bmV3IEk4ZShhLHIpfWZ1bmN0aW9uIGhidChlLHQsbixyLGEsbyl7dmFyIGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7Zm9yKEM9cix0LmomJnQubz8oej1sKGNyKGUuZix0LkEpLDYwKSxKPXouZC5jK3ouZC5iLC0tQyk6Sj10LmEuYyt0LmEuYixMPWEsbi5xJiZuLm8/KHo9bChjcihlLmYsbi5DKSw2MCksRT16LmQuYywrK0wpOkU9bi5hLmMsdGU9RS1KLHc9Yi5NYXRoLm1heCgyLEwtQyksZz10ZS93LFY9SitnLEI9QztCPEw7KytCKWY9bChvLlhiKEIpLDEzMSksZmU9Zi5hLmIsZi5hLmM9Vi1mZS8yLFYrPWd9ZnVuY3Rpb24gZmJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQjthPXQ/bmV3IEllZTpuZXcgT2VlLG89ITE7ZG8gZm9yKG89ITEsRT10P2xmKGUuYik6ZS5iLHc9RS5LYygpO3cuT2IoKTspZm9yKGc9bCh3LlBiKCksMzApLEI9X3coZy5hKSx0fHxsZihCKSxMPW5ldyBHKEIpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxMCksYS5NYihDKSYmKHI9QyxuPWwoUShDLChmdCgpLGMzKSksMzEzKSxmPXQ/bi5iOm4uayxvPVJidChyLGYsdCwhMSkpO3doaWxlKG8pfWZ1bmN0aW9uIFc5ZShlLHQsbixyLGEsbyl7dmFyIGYsZyx3LEUsQyxMO2ZvcihFPW4uYy5sZW5ndGgsbyYmKGUuYz1XZShWcixkaSwyOCx0Lmxlbmd0aCwxNSwxKSksZj1hPzA6dC5sZW5ndGgtMTthP2Y8dC5sZW5ndGg6Zj49MDtmKz1hPzE6LTEpe2ZvcihnPXRbZl0sdz1yPT0oQ3QoKSxhcik/YT9PYyhnLHIpOmxmKE9jKGcscikpOmE/bGYoT2MoZyxyKSk6T2MoZyxyKSxvJiYoZS5jW2cucF09dy5nYygpKSxMPXcuS2MoKTtMLk9iKCk7KUM9bChMLlBiKCksMTIpLGUuZFtDLnBdPUUrKztyYShuLHcpfX1mdW5jdGlvbiBkYnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7Zm9yKG89emUoR2UoZS5iLktjKCkuUGIoKSkpLEU9emUoR2UoVjNuKHQuYikpKSxyPW1kKEphKGUuYSksRS1uKSxhPW1kKEphKHQuYSksbi1vKSxDPU9pKHIsYSksbWQoQywxLyhFLW8pKSx0aGlzLmE9Qyx0aGlzLmI9bmV3IGJ0LGc9ITAsZj1lLmIuS2MoKSxmLlBiKCk7Zi5PYigpOyl3PXplKEdlKGYuUGIoKSkpLGcmJnctbj53ZmUmJih0aGlzLmIuRmMobiksZz0hMSksdGhpcy5iLkZjKHcpO2cmJnRoaXMuYi5GYyhuKX1mdW5jdGlvbiBXQ24oZSl7dmFyIHQsbixyLGE7aWYoZl9uKGUsZS5uKSxlLmQuYy5sZW5ndGg+MCl7Zm9yKHVfKGUuYyk7TDllKGUsbChyZShuZXcgRyhlLmUuYSkpLDEyNSkpPGUuZS5hLmMubGVuZ3RoOyl7Zm9yKHQ9UDduKGUpLGE9dC5lLmUtdC5kLmUtdC5hLHQuZS5qJiYoYT0tYSkscj1uZXcgRyhlLmUuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDEyNSksbi5qJiYobi5lKz1hKTt1XyhlLmMpfXVfKGUuYykscDllKGUsbChyZShuZXcgRyhlLmUuYSkpLDEyNSkpLG12dChlKX19ZnVuY3Rpb24gWUNuKGUsdCl7aHgoKTt2YXIgbixyO2lmKG49X29lKGhFKCksdC5QZygpKSxuKXtpZihyPW4uaixEZShlLDIwNykpcmV0dXJuIGsybihsKGUsMjcpKT92bChyLChyMSgpLGhhKSl8fHZsKHIsUG4pOnZsKHIsKHIxKCksaGEpKTtpZihEZShlLDMyNikpcmV0dXJuIHZsKHIsKHIxKCksemQpKTtpZihEZShlLDE5MykpcmV0dXJuIHZsKHIsKHIxKCkseXYpKTtpZihEZShlLDM2NikpcmV0dXJuIHZsKHIsKHIxKCksUzIpKX1yZXR1cm4hMH1mdW5jdGlvbiBYQ24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztpZihhPW4sbz1hLkxrKCksdXAoZS5lLG8pKXtpZihvLlNpKCkpe2ZvcihyPWwoZS5nLDEyNCksZj0wO2Y8ZS5pOysrZilpZihnPXJbZl0sUGkoZyxhKSYmZiE9dCl0aHJvdyB1ZShuZXcgWW4oV1ApKX19ZWxzZSBmb3Iodz1XdShlLmUuRGgoKSxvKSxyPWwoZS5nLDEyNCksZj0wO2Y8ZS5pOysrZilpZihnPXJbZl0sdy5hbShnLkxrKCkpJiZmIT10KXRocm93IHVlKG5ldyBZbihaUCkpO3JldHVybiBsKG42KGUsdCxuKSw3Nil9ZnVuY3Rpb24gZ2J0KGUsdCl7aWYodCBpbnN0YW5jZW9mIE9iamVjdCl0cnl7aWYodC5fX2phdmEkZXhjZXB0aW9uPWUsbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zaWUiKSE9LTEmJiRkb2MuZG9jdW1lbnRNb2RlPDkpcmV0dXJuO3ZhciBuPWU7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCx7Y2F1c2U6e2dldDpmdW5jdGlvbigpe3ZhciByPW4uaGUoKTtyZXR1cm4gciYmci5mZSgpfX0sc3VwcHJlc3NlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2UoKX19fSl9Y2F0Y2h7fX1mdW5jdGlvbiBwYnQoZSx0KXt2YXIgbixyLGEsbyxmO2lmKHI9dD4+NSx0Jj0zMSxyPj1lLmQpcmV0dXJuIGUuZTwwPyhDZCgpLHc2dCk6KENkKCksQkwpO2lmKG89ZS5kLXIsYT1XZShWcixkaSwyOCxvKzEsMTUsMSksajluKGEsbyxlLmEscix0KSxlLmU8MCl7Zm9yKG49MDtuPHImJmUuYVtuXT09MDtuKyspO2lmKG48cnx8dD4wJiZlLmFbbl08PDMyLXQpe2ZvcihuPTA7bjxvJiZhW25dPT0tMTtuKyspYVtuXT0wO249PW8mJisrbywrK2Fbbl19fXJldHVybiBmPW5ldyBJbShlLmUsbyxhKSxpQShmKSxmfWZ1bmN0aW9uIGJidChlKXt2YXIgdCxuLHIsYTtyZXR1cm4gYT1NMShlKSxuPW5ldyB5ayhhKSxyPW5ldyBVSShhKSx0PW5ldyBidCxyYSh0LCghZS5kJiYoZS5kPW5ldyBMbihqcyxlLDgsNSkpLGUuZCkpLHJhKHQsKCFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksZS5lKSksbCh5YyhmYyhGaShuZXcgYm4obnVsbCxuZXcga24odCwxNikpLG4pLHIpLFN5KG5ldyB5dCxuZXcgamksbmV3IHFuLG5ldyBVbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksaTQpLEVjXSkpKSwyMSl9ZnVuY3Rpb24gUUNuKGUsdCl7dmFyIG47c3dpdGNoKG49bChRKGUsKE50KCkscFcpKSwyODMpLHQuVWcoIkxhYmVsIHNpZGUgc2VsZWN0aW9uICgiK24rIikiLDEpLG4uZyl7Y2FzZSAwOl8ydChlLChJaCgpLGtnKSk7YnJlYWs7Y2FzZSAxOl8ydChlLChJaCgpLEdiKSk7YnJlYWs7Y2FzZSAyOkdtdChlLChJaCgpLGtnKSk7YnJlYWs7Y2FzZSAzOkdtdChlLChJaCgpLEdiKSk7YnJlYWs7Y2FzZSA0OkNidChlLChJaCgpLGtnKSk7YnJlYWs7Y2FzZSA1OkNidChlLChJaCgpLEdiKSl9dC5WZygpfWZ1bmN0aW9uIHVwKGUsdCl7Rm8oKTt2YXIgbixyLGE7cmV0dXJuIHQuSmsoKT8hMDp0LklrKCk9PS0yP3Q9PShreCgpLHU5KXx8dD09Yzl8fHQ9PWFwZXx8dD09b3BlPyEwOihhPWUuRGgoKSxtcyhhLHQpPj0wPyExOihuPWc2KChFbCgpLGlvKSxhLHQpLG4/KHI9bi5JaygpLChyPjF8fHI9PS0xKSYma3coaWMoaW8sbikpIT0zKTohMCkpOiExfWZ1bmN0aW9uIEpDbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3O3JldHVybiBnPWJjKGwoT2UoKCF0LmImJih0LmI9bmV3IExuKF9yLHQsNCw3KSksdC5iKSwwKSw4NCkpLHc9YmMobChPZSgoIXQuYyYmKHQuYz1uZXcgTG4oX3IsdCw1LDgpKSx0LmMpLDApLDg0KSksZHMoZyk9PWRzKHcpfHxMeSh3LGcpP251bGw6KGY9V08odCksZj09bj9yOihvPWwoY3IoZS5hLGYpLDEwKSxvJiYoYT1vLmUsYSk/YTpudWxsKSl9ZnVuY3Rpb24gWkNuKGUsdCxuKXt2YXIgcixhLG8sZixnO2ZvcihuLlVnKCJMb25nZXN0IHBhdGggdG8gc291cmNlIGxheWVyaW5nIiwxKSxlLmE9dCxnPWUuYS5hLGUuYj1XZShWcixkaSwyOCxnLmMubGVuZ3RoLDE1LDEpLHI9MCxmPW5ldyBHKGcpO2YuYTxmLmMuYy5sZW5ndGg7KWE9bChyZShmKSwxMCksYS5wPXIsZS5iW3JdPS0xLCsrcjtmb3Iobz1uZXcgRyhnKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTApLHoydChlLGEpO2cuYy5sZW5ndGg9MCxlLmE9bnVsbCxlLmI9bnVsbCxuLlZnKCl9ZnVuY3Rpb24gWTllKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYocj1EdW4obixlLmxlbmd0aCksZj1lW3JdLG89VUplKG4sZi5sZW5ndGgpLGZbb10uaz09KFpuKCksVXMpKWZvcih3PXQuaixhPTA7YTx3LmMubGVuZ3RoO2ErKylnPShTbihhLHcuYy5sZW5ndGgpLGwody5jW2FdLDEyKSksKG4/Zy5qPT0oQ3QoKSxhcik6Zy5qPT0oQ3QoKSxlcikpJiZSdChCdChRKGcsKGZ0KCkseEIpKSkpJiYocmYodyxhLGwoUShmW29dLChmdCgpLHppKSksMTIpKSxvKz1uPzE6LTEpfWZ1bmN0aW9uIGVTbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7dC5VZygiR3JlZWR5IFdpZHRoIEFwcHJveGltYXRvciIsMSksbj16ZShHZShhdChlLCh6MSgpLEtXKSkpKSx3PWwoYXQoZSx2TSksMTA3KSxvPWwoYXQoZSxjT2UpLDM5NCksZj1SdChCdChhdChlLG9PZSkpKSxnPXplKEdlKGF0KGUsd00pKSksRT0oIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSksdjdlKEUpLGE9bmV3IHdpdChuLG8sZikscj1sX24oYSxFLGcsdyksSGkoZSwodWcoKSxUNCksci5jKSx0LlZnKCl9ZnVuY3Rpb24gbWJ0KGUpe2lmKGUuZz09bnVsbClzd2l0Y2goZS5wKXtjYXNlIDA6ZS5nPUUybihlKT8oSG4oKSxTVCk6KEhuKCksUGIpO2JyZWFrO2Nhc2UgMTplLmc9Zk4oYm1uKGUpKTticmVhaztjYXNlIDI6ZS5nPXdOKGdibihlKSk7YnJlYWs7Y2FzZSAzOmUuZz1ZZ24oZSk7YnJlYWs7Y2FzZSA0OmUuZz1uZXcgcGEoV2duKGUpKTticmVhaztjYXNlIDY6ZS5nPWFwKEpnbihlKSk7YnJlYWs7Y2FzZSA1OmUuZz1wdChvMm4oZSkpO2JyZWFrO2Nhc2UgNzplLmc9X0Uod21uKGUpKX1yZXR1cm4gZS5nfWZ1bmN0aW9uIFg5ZShlKXtpZihlLm49PW51bGwpc3dpdGNoKGUucCl7Y2FzZSAwOmUubj1UMm4oZSk/KEhuKCksU1QpOihIbigpLFBiKTticmVhaztjYXNlIDE6ZS5uPWZOKG1tbihlKSk7YnJlYWs7Y2FzZSAyOmUubj13TihwYm4oZSkpO2JyZWFrO2Nhc2UgMzplLm49WGduKGUpO2JyZWFrO2Nhc2UgNDplLm49bmV3IHBhKFFnbihlKSk7YnJlYWs7Y2FzZSA2OmUubj1hcChaZ24oZSkpO2JyZWFrO2Nhc2UgNTplLm49cHQoYzJuKGUpKTticmVhaztjYXNlIDc6ZS5uPV9FKHZtbihlKSl9cmV0dXJuIGUubn1mdW5jdGlvbiB2YnQoZSx0LG4scil7dmFyIGEsbyxmLGcsdztpZihnPShGbygpLGwodCw2OSkueGsoKSksdXAoZS5lLHQpKXtpZih0LlNpKCkmJiRVKGUsdCxyLERlKHQsMTAyKSYmKGwodCwxOSkuQmImSW8pIT0wKSl0aHJvdyB1ZShuZXcgWW4oV1ApKX1lbHNlIGZvcih3PVd1KGUuZS5EaCgpLHQpLGE9bChlLmcsMTI0KSxmPTA7ZjxlLmk7KytmKWlmKG89YVtmXSx3LmFtKG8uTGsoKSkpdGhyb3cgdWUobmV3IFluKFpQKSk7X0EoZSx0OWUoZSx0LG4pLGc/bChyLDc2KTpzZyh0LHIpKX1mdW5jdGlvbiB3YnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG89bmV3IEcoZS5hLmEpO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwzMTYpLHIuZz0wLHIuaT0wLHIuZS5hLiRiKCk7Zm9yKGE9bmV3IEcoZS5hLmEpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMzE2KSxuPXIuYS5hLmVjKCkuS2MoKTtuLk9iKCk7KWZvcih0PWwobi5QYigpLDYwKSxnPXQuYy5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSw2MCksZi5hIT1yJiYobmEoci5lLGYpLCsrZi5hLmcsKytmLmEuaSl9ZnVuY3Rpb24gdFNuKGUpe3ZhciB0LG4scixhLG87YT1sKFEoZSwoTnQoKSxidikpLDIxKSxvPWwoUShlLHhXKSwyMSksbj1uZXcgbHQoZS5mLmErZS5kLmIrZS5kLmMsZS5mLmIrZS5kLmQrZS5kLmEpLHQ9bmV3IEVvKG4pLGEuSGMoKG1oKCksQTQpKSYmKHI9bChRKGUscVQpLDgpLG8uSGMoKFpsKCksYUMpKSYmKHIuYTw9MCYmKHIuYT0yMCksci5iPD0wJiYoci5iPTIwKSksdC5hPWIuTWF0aC5tYXgobi5hLHIuYSksdC5iPWIuTWF0aC5tYXgobi5iLHIuYikpLHJMbihlLG4sdCl9ZnVuY3Rpb24gblNuKGUsdCl7dmFyIG4scixhO3QuYT8oak8oZS5iLHQuYiksZS5hW3QuYi5pXT1sKGNzZShlLmIsdC5iKSw4Niksbj1sKG9zZShlLmIsdC5iKSw4NiksbiYmKGUuYVtuLmldPXQuYikpOihyPWwoY3NlKGUuYix0LmIpLDg2KSxyJiZyPT1lLmFbdC5iLmldJiZyLmQmJnIuZCE9dC5iLmQmJnIuZi5GYyh0LmIpLGE9bChvc2UoZS5iLHQuYiksODYpLGEmJmUuYVthLmldPT10LmImJmEuZCYmYS5kIT10LmIuZCYmdC5iLmYuRmMoYSksdGFlKGUuYix0LmIpKX1mdW5jdGlvbiB5YnQoZSx0KXt2YXIgbixyLGEsbyxmLGc7cmV0dXJuIG89ZS5kLGc9emUoR2UoUShlLChOdCgpLHgyKSkpKSxnPDAmJihnPTAscnQoZSx4MixnKSksdC5vLmI9ZyxmPWIuTWF0aC5mbG9vcihnLzIpLHI9bmV3IGd1LGxhKHIsKEN0KCksZXIpKSxNYyhyLHQpLHIubi5iPWYsYT1uZXcgZ3UsbGEoYSxhciksTWMoYSx0KSxhLm4uYj1mLEZhKGUsciksbj1uZXcgVHcscGMobixlKSxydChuLGNjLG51bGwpLHBvKG4sYSksRmEobixvKSxiQW4odCxlLG4pLGxrbihlLG4pLG59ZnVuY3Rpb24gclNuKGUpe3ZhciB0LG47cmV0dXJuIG49bChRKGUsKGZ0KCksTHUpKSwyMSksdD1uZXcgWHMsbi5IYygoSG8oKSxVTCkpJiYoRGgodCxHRXQpLERoKHQsekRlKSksKG4uSGMoJFQpfHxSdChCdChRKGUsKE50KCksaWRlKSkpKSkmJihEaCh0LHpEZSksbi5IYyhCNikmJkRoKHQsV0V0KSksbi5IYyh2ZikmJkRoKHQsVUV0KSxuLkhjKEdMKSYmRGgodCxZRXQpLG4uSGModFcpJiZEaCh0LEtFdCksbi5IYyhSVCkmJkRoKHQsSEV0KSxuLkhjKGpUKSYmRGgodCxWRXQpLHR9ZnVuY3Rpb24gaVNuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQjtyZXR1cm4gcj1lLmQsbz10LmQsZz1yK28sdz1lLmUhPXQuZT8tMToxLGc9PTI/KEM9bW8odmEoZS5hWzBdLFZvKSx2YSh0LmFbMF0sVm8pKSxCPVlyKEMpLEw9WXIodWIoQywzMikpLEw9PTA/bmV3IFFnKHcsQik6bmV3IEltKHcsMixoZShsZShWciwxKSxkaSwyOCwxNSxbQixMXSkpKToobj1lLmEsYT10LmEsZj1XZShWcixkaSwyOCxnLDE1LDEpLHI0bihuLHIsYSxvLGYpLEU9bmV3IEltKHcsZyxmKSxpQShFKSxFKX1mdW5jdGlvbiB4YnQoZSx0LG4scil7dmFyIGEsbztpZih0KXtpZihhPWUuYS5OZShuLmQsdC5kKSxhPT0wKXJldHVybiByLmQ9WnllKHQsbi5lKSxyLmI9ITAsdDtvPWE8MD8wOjEsdC5hW29dPXhidChlLHQuYVtvXSxuLHIpLG95KHQuYVtvXSkmJihveSh0LmFbMS1vXSk/KHQuYj0hMCx0LmFbMF0uYj0hMSx0LmFbMV0uYj0hMSk6b3kodC5hW29dLmFbb10pP3Q9RVYodCwxLW8pOm95KHQuYVtvXS5hWzEtb10pJiYodD11Y3QodCwxLW8pKSl9ZWxzZSByZXR1cm4gbjtyZXR1cm4gdH1mdW5jdGlvbiBrYnQoZSx0LG4pe3ZhciByLGEsbyxmO2E9ZS5pLHI9ZS5uLHk2ZShlLCh0MSgpLEdjKSxhLmMrci5iLG4pLHk2ZShlLEtjLGEuYythLmItci5jLW5bMl0sbiksZj1hLmItci5iLXIuYyxuWzBdPjAmJihuWzBdKz1lLmQsZi09blswXSksblsyXT4wJiYoblsyXSs9ZS5kLGYtPW5bMl0pLG89Yi5NYXRoLm1heCgwLGYpLG5bMV09Yi5NYXRoLm1heChuWzFdLGYpLHk2ZShlLCR1LGEuYytyLmIrblswXS0oblsxXS1mKS8yLG4pLHQ9PSR1JiYoZS5jLmI9byxlLmMuYz1hLmMrci5iKyhvLWYpLzIpfWZ1bmN0aW9uIEVidCgpe3RoaXMuYz1XZShOYSxabywyOCwoQ3QoKSxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pKS5sZW5ndGgsMTUsMSksdGhpcy5iPVdlKE5hLFpvLDI4LGhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSkubGVuZ3RoLDE1LDEpLHRoaXMuYT1XZShOYSxabywyOCxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pLmxlbmd0aCwxNSwxKSxFM2UodGhpcy5jLGdzKSxFM2UodGhpcy5iLGlhKSxFM2UodGhpcy5hLGlhKX1mdW5jdGlvbiBFdShlLHQsbil7dmFyIHIsYSxvLGY7aWYodDw9bj8oYT10LG89bik6KGE9bixvPXQpLHI9MCxlLmI9PW51bGwpZS5iPVdlKFZyLGRpLDI4LDIsMTUsMSksZS5iWzBdPWEsZS5iWzFdPW8sZS5jPSEwO2Vsc2V7aWYocj1lLmIubGVuZ3RoLGUuYltyLTFdKzE9PWEpe2UuYltyLTFdPW87cmV0dXJufWY9V2UoVnIsZGksMjgscisyLDE1LDEpLHB1KGUuYiwwLGYsMCxyKSxlLmI9ZixlLmJbci0xXT49YSYmKGUuYz0hMSxlLmE9ITEpLGUuYltyKytdPWEsZS5iW3JdPW8sZS5jfHxjNihlKX19ZnVuY3Rpb24gc1NuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRTtmb3IoRT10LmQsZS5hPW5ldyBCdShFLmMubGVuZ3RoKSxlLmM9bmV3IFByLGc9bmV3IEcoRSk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEwNSksbz1uZXcgeE4obnVsbCksdnQoZS5hLG8pLGtpKGUuYyxmLG8pO2ZvcihlLmI9bmV3IFByLGZrbihlLHQpLHI9MDtyPEUuYy5sZW5ndGgtMTtyKyspZm9yKHc9bChqdCh0LmQsciksMTA1KSxhPXIrMTthPEUuYy5sZW5ndGg7YSsrKVlUbihlLHcsbChqdCh0LmQsYSksMTA1KSxuKX1mdW5jdGlvbiBIeShlKXt2YXIgdCxuLHIsYSxvO2ZvcihhPW5ldyBidCx0PW5ldyBVXygoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpLHI9bmV3IGhyKGRyKGNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksNzQpLERlKE9lKCghbi5iJiYobi5iPW5ldyBMbihfcixuLDQsNykpLG4uYiksMCksMTkzKXx8KG89YmMobChPZSgoIW4uYyYmKG4uYz1uZXcgTG4oX3Isbiw1LDgpKSxuLmMpLDApLDg0KSksdC5hLl9iKG8pfHwkbihhLmMsbykpO3JldHVybiBhfWZ1bmN0aW9uIGFTbihlLHQsbil7dmFyIHIsYSxvO2lmKGUuZT1uLGUuZD0wLGUuYj0wLGUuZj0xLGUuaT10LChlLmUmMTYpPT0xNiYmKGUuaT1iX24oZS5pKSksZS5qPWUuaS5sZW5ndGgsTGkoZSksbz1qdyhlKSxlLmQhPWUuail0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksXzR0KSkpKTtpZihlLmcpe2ZvcihyPTA7cjxlLmcuYS5jLmxlbmd0aDtyKyspaWYoYT1sKHh3KGUuZyxyKSw1OTIpLGUuZjw9YS5hKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxBNHQpKSkpO2UuZy5hLmMubGVuZ3RoPTB9cmV0dXJuIG99ZnVuY3Rpb24gb1NuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKG49aWEsZz0oWm4oKSxQcyksYT1uZXcgRyh0LmEpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMCksbz1yLmssbyE9UHMmJihmPUdlKFEociwoZnQoKSxITGUpKSksZj09bnVsbD8obj1iLk1hdGgubWF4KG4sMCksci5uLmI9bitPeWUoZS5hLG8sZykpOnIubi5iPShucihmKSxmKSksdz1PeWUoZS5hLG8sZyksci5uLmI8bit3K3IuZC5kJiYoci5uLmI9bit3K3IuZC5kKSxuPXIubi5iK3Iuby5iK3IuZC5hLGc9b31mdW5jdGlvbiBUYnQoZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEM7aWYoZS5kJiZlLmQuR2coYSksbz1sKGEuWGIoMCksMjcpLFNkdChlLG4sbywhMSl8fChmPWwoYS5YYihhLmdjKCktMSksMjcpLFNkdChlLHIsZiwhMCkpfHxHeGUoZSxhKSlyZXR1cm4hMDtmb3IoQz1hLktjKCk7Qy5PYigpOylmb3IoRT1sKEMuUGIoKSwyNyksdz10LktjKCk7dy5PYigpOylpZihnPWwody5QYigpLDI3KSxOVShlLEUsZykpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gY1NuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtCPXQuYy5sZW5ndGgsTD0oRT1lLkloKG4pLGwoRT49MD9lLkxoKEUsITEsITApOkh3KGUsbiwhMSksNjEpKTtlOmZvcihvPUwuS2MoKTtvLk9iKCk7KXtmb3IoYT1sKG8uUGIoKSw1OCksQz0wO0M8QjsrK0MpaWYoZj0oU24oQyx0LmMubGVuZ3RoKSxsKHQuY1tDXSw3NikpLHc9Zi5tZCgpLGc9Zi5MaygpLHI9YS5OaChnLCExKSx3PT1udWxsP3IhPW51bGw6IVBpKHcscikpY29udGludWUgZTtyZXR1cm4gYX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB1U24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IodC5VZygiQ29tbWVudCBwb3N0LXByb2Nlc3NpbmciLDEpLG89bmV3IEcoZS5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKGE9bChyZShvKSwzMCkscj1uZXcgYnQsZz1uZXcgRyhhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMCksdz1sKFEoZiwoZnQoKSxReCkpLDE1KSxuPWwoUShmLEd4KSwxNSksKHd8fG4pJiYoU0RuKGYsdyxuKSx3JiZyYShyLHcpLG4mJnJhKHIsbikpO3JhKGEuYSxyKX10LlZnKCl9ZnVuY3Rpb24gbFNuKGUsdCxuLHIpe3ZhciBhLG8sZixnO2ZvcihhPWwoZDIodCwoQ3QoKSxlcikpLktjKCkuUGIoKSwxMiksbz1sKGQyKHQsYXIpLktjKCkuUGIoKSwxMiksZz1uZXcgRyhlLmopO2cuYTxnLmMuYy5sZW5ndGg7KXtmb3IoZj1sKHJlKGcpLDEyKTtmLmUuYy5sZW5ndGghPTA7KUZhKGwoanQoZi5lLDApLDE4KSxhKTtmb3IoO2YuZy5jLmxlbmd0aCE9MDspcG8obChqdChmLmcsMCksMTgpLG8pfW58fHJ0KHQsKGZ0KCksbzEpLG51bGwpLHJ8fHJ0KHQsKGZ0KCksJGYpLG51bGwpfWZ1bmN0aW9uIGw2KGUsdCxuKXt2YXIgcixhO2lmKCghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSkuaT09MClyZXR1cm4gRDdlKGUpO2lmKHI9bChPZSgoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpLDApLDE2NiksdCYmKCRyKCghci5hJiYoci5hPW5ldyBZcyhxaCxyLDUpKSxyLmEpKSxvRShyLDApLHVFKHIsMCksYUUociwwKSxjRShyLDApKSxuKWZvcihhPSghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSk7YS5pPjE7KVZ5KGEsYS5pLTEpO3JldHVybiByfWZ1bmN0aW9uIENidChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihuPW5ldyB6NSxvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihhPWwocmUobyksMzApLHc9ITAscj0wLGc9bmV3IEcoYS5hKTtnLmE8Zy5jLmMubGVuZ3RoOylzd2l0Y2goZj1sKHJlKGcpLDEwKSxmLmsuZyl7Y2FzZSA0OisrcjtjYXNlIDE6aTZlKG4sZik7YnJlYWs7Y2FzZSAwOnVrbihmLHQpO2RlZmF1bHQ6bi5iPT1uLmN8fHBtdChuLHIsdywhMSx0KSx3PSExLHI9MH1uLmI9PW4uY3x8cG10KG4scix3LCEwLHQpfX1mdW5jdGlvbiBROWUoZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKG49MCxnPW5ldyBHKHQpO2cuYTxnLmMuYy5sZW5ndGg7KXtmb3IoZj1sKHJlKGcpLDEyKSxZN2UoZS5iLGUuZFtmLnBdKSxhPW5ldyBOMShmLmIpO0xjKGEuYSl8fExjKGEuYik7KXI9bChMYyhhLmEpP3JlKGEuYSk6cmUoYS5iKSwxOCksbz1mM2UoZSxmPT1yLmM/ci5kOnIuYyksbz5lLmRbZi5wXSYmKG4rPWY2ZShlLmIsbyksZ2IoZS5hLHB0KG8pKSk7Zm9yKDshbF8oZS5hKTspVTZlKGUuYixsKFg4KGUuYSksMTcpLmEpfXJldHVybiBufWZ1bmN0aW9uIGhTbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7Zm9yKGUuYT1uZXcgaTRlLEU9MCxhPTAscj1uZXcgRyhlLmkuYik7ci5hPHIuYy5jLmxlbmd0aDspe2Zvcih0PWwocmUociksMzApLHQucD1hLHc9bmV3IEcodC5hKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTApLGcucD1FLCsrRTsrK2F9Zm9yKG89ZS5yPT0oTmYoKSx2MyksZj1vP0s4dDpHOHQsbj1uZXcgRyhlLmkuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDMwKSxWcyh0LmEsZiksbHduKGUuYSxwdCh0LnApLHQuYSl9ZnVuY3Rpb24gU2J0KGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobz0oIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkuaSxhPW5ldyBvcigoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpO2EuZSE9YS5pLmdjKCk7KXI9bChncihhKSwyNyksKCFyLmEmJihyLmE9bmV3IG50KEFpLHIsMTAsMTEpKSxyLmEpLmk9PTB8fChvKz1TYnQoZSxyLCExKSk7aWYobilmb3IoZj1kcyh0KTtmOylvKz0oIWYuYSYmKGYuYT1uZXcgbnQoQWksZiwxMCwxMSkpLGYuYSkuaSxmPWRzKGYpO3JldHVybiBvfWZ1bmN0aW9uIFZ5KGUsdCl7dmFyIG4scixhLG87cmV0dXJuIGUuUGooKT8ocj1udWxsLGE9ZS5RaigpLGUuVGooKSYmKHI9ZS5WaihlLiRpKHQpLG51bGwpKSxuPWUuSWooNCxvPXZ4KGUsdCksbnVsbCx0LGEpLGUuTWooKSYmbyE9bnVsbCYmKHI9ZS5PaihvLHIpKSxyPyhyLm5qKG4pLHIub2ooKSk6ZS5KaihuKSxvKToobz12eChlLHQpLGUuTWooKSYmbyE9bnVsbCYmKHI9ZS5PaihvLG51bGwpLHImJnIub2ooKSksbyl9ZnVuY3Rpb24gZlNuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDO2ZvcihFPWUuYSx0PW5ldyBLcyx3PTAscj1uZXcgRyhlLmQpO3IuYTxyLmMuYy5sZW5ndGg7KXtmb3Iobj1sKHJlKHIpLDIyNiksQz0wLCRtKG4uYixuZXcgbHUpLGY9UnIobi5iLDApO2YuYiE9Zi5kLmM7KW89bChCcihmKSwyMjYpLHQuYS5fYihvKSYmKGE9bi5jLGc9by5jLEM8Zy5kK2cuYStFJiZDK2EuYStFPmcuZCYmKEM9Zy5kK2cuYStFKSk7bi5jLmQ9Qyx0LmEuemMobix0KSx3PWIuTWF0aC5tYXgodyxuLmMuZCtuLmMuYSl9cmV0dXJuIHd9ZnVuY3Rpb24gSG8oKXtIbz1VLGVXPW5ldyB1eSgiQ09NTUVOVFMiLDApLHZmPW5ldyB1eSgiRVhURVJOQUxfUE9SVFMiLDEpLFVMPW5ldyB1eSgiSFlQRVJFREdFUyIsMiksdFc9bmV3IHV5KCJIWVBFUk5PREVTIiwzKSwkVD1uZXcgdXkoIk5PTl9GUkVFX1BPUlRTIiw0KSxCNj1uZXcgdXkoIk5PUlRIX1NPVVRIX1BPUlRTIiw1KSxHTD1uZXcgdXkoWDN0LDYpLFJUPW5ldyB1eSgiQ0VOVEVSX0xBQkVMUyIsNyksalQ9bmV3IHV5KCJFTkRfTEFCRUxTIiw4KSxuVz1uZXcgdXkoIlBBUlRJVElPTlMiLDkpfWZ1bmN0aW9uIGRTbihlLHQsbixyLGEpe3JldHVybiByPDA/KHI9bzYoZSxhLGhlKGxlKHp0LDEpLGR0LDIsNixbJGxlLHpsZSxxbGUsSGxlLF94LFZsZSxVbGUsR2xlLEtsZSxXbGUsWWxlLFhsZV0pLHQpLHI8MCYmKHI9bzYoZSxhLGhlKGxlKHp0LDEpLGR0LDIsNixbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsX3gsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdKSx0KSkscjwwPyExOihuLms9ciwhMCkpOnI+MD8obi5rPXItMSwhMCk6ITF9ZnVuY3Rpb24gZ1NuKGUsdCxuLHIsYSl7cmV0dXJuIHI8MD8ocj1vNihlLGEsaGUobGUoenQsMSksZHQsMiw2LFskbGUsemxlLHFsZSxIbGUsX3gsVmxlLFVsZSxHbGUsS2xlLFdsZSxZbGUsWGxlXSksdCkscjwwJiYocj1vNihlLGEsaGUobGUoenQsMSksZHQsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIixfeCwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pLHQpKSxyPDA/ITE6KG4uaz1yLCEwKSk6cj4wPyhuLms9ci0xLCEwKTohMX1mdW5jdGlvbiBwU24oZSx0LG4scixhLG8pe3ZhciBmLGcsdyxFO2lmKGc9MzIscjwwKXtpZih0WzBdPj1lLmxlbmd0aHx8KGc9Y28oZSx0WzBdKSxnIT00MyYmZyE9NDUpfHwoKyt0WzBdLHI9a1UoZSx0KSxyPDApKXJldHVybiExO2c9PTQ1JiYocj0tcil9cmV0dXJuIGc9PTMyJiZ0WzBdLW49PTImJmEuYj09MiYmKHc9bmV3IFF6LEU9dy5xLmdldEZ1bGxZZWFyKCktTGIrTGItODAsZj1FJTEwMCxvLmE9cj09ZixyKz0oRS8xMDB8MCkqMTAwKyhyPGY/MTAwOjApKSxvLnA9ciwhMH1mdW5jdGlvbiBfYnQoZSx0KXt2YXIgbixyLGEsbyxmO2RzKGUpJiYoZj1sKFEodCwoTnQoKSxidikpLDE4MSkscWUoYXQoZSxNcykpPT09cWUoKFJhKCksV2IpKSYmSGkoZSxNcyxaMSkscj0oYXcoKSxuZXcgSnYoZHMoZSkpKSxvPW5ldyByYWUoZHMoZSk/bmV3IEp2KGRzKGUpKTpudWxsLGUpLGE9cXZ0KHIsbywhMSwhMCksZDAoZiwobWgoKSxBNCkpLG49bChRKHQscVQpLDgpLG4uYT1iLk1hdGgubWF4KGEuYSxuLmEpLG4uYj1iLk1hdGgubWF4KGEuYixuLmIpKX1mdW5jdGlvbiBiU24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztmb3IoZj1sKFEoZSwoZnQoKSxIMWUpKSwxNSkuS2MoKTtmLk9iKCk7KXtzd2l0Y2gobz1sKGYuUGIoKSwxMCksbChRKG8sKE50KCksUXUpKSwxNzEpLmcpe2Nhc2UgMjpWYShvLHQpO2JyZWFrO2Nhc2UgNDpWYShvLG4pfWZvcihhPW5ldyBocihkcihzcChvKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDE4KSwhKHIuYyYmci5kKSYmKGc9IXIuZCx3PWwoUShyLFVMZSksMTIpLGc/RmEocix3KTpwbyhyLHcpKX19ZnVuY3Rpb24gT1UoKXtPVT1VLHcxZT1uZXcgWjgobkcsMCwoQ3QoKSxRbiksUW4pLGsxZT1uZXcgWjgoeGhlLDEsRHIsRHIpLHYxZT1uZXcgWjgoeWhlLDIsYXIsYXIpLEMxZT1uZXcgWjgoa2hlLDMsZXIsZXIpLHgxZT1uZXcgWjgoIk5PUlRIX1dFU1RfQ09STkVSIiw0LGVyLFFuKSx5MWU9bmV3IFo4KCJOT1JUSF9FQVNUX0NPUk5FUiIsNSxRbixhciksVDFlPW5ldyBaOCgiU09VVEhfV0VTVF9DT1JORVIiLDYsRHIsZXIpLEUxZT1uZXcgWjgoIlNPVVRIX0VBU1RfQ09STkVSIiw3LGFyLERyKX1mdW5jdGlvbiBtU24oZSl7dmFyIHQsbixyLGEsbyxmO2ZvcihvPW5ldyBLcyx0PW5ldyBVXygoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpLGE9bmV3IGhyKGRyKGNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksNzQpLERlKE9lKCghci5iJiYoci5iPW5ldyBMbihfcixyLDQsNykpLHIuYiksMCksMTkzKXx8KGY9YmMobChPZSgoIXIuYyYmKHIuYz1uZXcgTG4oX3Isciw1LDgpKSxyLmMpLDApLDg0KSksdC5hLl9iKGYpfHwobj1vLmEuemMoZixvKSxuPT1udWxsKSk7cmV0dXJuIG99ZnVuY3Rpb24gaDYoKXtoNj1VLFVPZT1oZShsZShubSwxKSxhaGUsMjgsMTQsWzEsMSwyLDYsMjQsMTIwLDcyMCw1MDQwLDQwMzIwLDM2Mjg4MCwzNjI4ODAwLDM5OTE2ODAwLDQ3OTAwMTYwMCw2MjI3MDIwODAwLDg3MTc4MjkxMjAwLDEzMDc2NzQzNjhlMyx7bDozNTA2MTc2LG06Nzk0MDc3LGg6MX0se2w6ODg0NzM2LG06OTE2NDExLGg6MjB9LHtsOjMzNDIzMzYsbTozOTEyNDg5LGg6MzYzfSx7bDo1ODk4MjQsbTozMDM0MTM4LGg6NjkxNH0se2w6MzQwNzg3MixtOjE5NjI1MDYsaDoxMzgyOTR9XSksYi5NYXRoLnBvdygyLC02NSl9ZnVuY3Rpb24gR0UoKXtHRT1VO3ZhciBlLHQ7Zm9yKCR4PVdlKEE2LGR0LDkyLDMyLDAsMSksRkw9V2UoQTYsZHQsOTIsMzIsMCwxKSxlPTEsdD0wO3Q8PTE4O3QrKykkeFt0XT0oQ2QoKSxpdShlLDApPj0wP2tiKGUpOkpfKGtiKHIyKGUpKSkpLEZMW3RdPUFxKGwwKGUsdCksMCk/a2IobDAoZSx0KSk6Sl8oa2IocjIobDAoZSx0KSkpKSxlPW1vKGUsNSk7Zm9yKDt0PEZMLmxlbmd0aDt0KyspJHhbdF09SzUoJHhbdC0xXSwkeFsxXSksRkxbdF09SzUoRkxbdC0xXSwoQ2QoKSxNMGUpKX1mdW5jdGlvbiBBYnQoZSx0KXt2YXIgbixyLGEsbyxmO2lmKGUuYy5sZW5ndGg9PTApcmV0dXJuIG5ldyBjYShwdCgwKSxwdCgwKSk7Zm9yKG49KFNuKDAsZS5jLmxlbmd0aCksbChlLmNbMF0sMTIpKS5qLGY9MCxvPXQuZyxyPXQuZysxO2Y8ZS5jLmxlbmd0aC0xJiZuLmc8bzspKytmLG49KFNuKGYsZS5jLmxlbmd0aCksbChlLmNbZl0sMTIpKS5qO2ZvcihhPWY7YTxlLmMubGVuZ3RoLTEmJm4uZzxyOykrK2Esbj0oU24oZixlLmMubGVuZ3RoKSxsKGUuY1tmXSwxMikpLmo7cmV0dXJuIG5ldyBjYShwdChmKSxwdChhKSl9ZnVuY3Rpb24gdlNuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO3c9T2ModCxuKSwobj09KEN0KCksRHIpfHxuPT1lcikmJih3PWxmKHcpKSxmPSExO2RvIGZvcihhPSExLG89MDtvPHcuZ2MoKS0xO28rKylFPWwody5YYihvKSwxMiksZz1sKHcuWGIobysxKSwxMiksbjluKGUsRSxnLHIpJiYoZj0hMCx2b2UoZS5hLGwody5YYihvKSwxMiksbCh3LlhiKG8rMSksMTIpKSxDPWwody5YYihvKzEpLDEyKSx3LmhkKG8rMSxsKHcuWGIobyksMTIpKSx3LmhkKG8sQyksYT0hMCk7d2hpbGUoYSk7cmV0dXJuIGZ9ZnVuY3Rpb24gd1NuKGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobi5VZyhmeXQsMSksYT1sKHljKEZpKG5ldyBibihudWxsLG5ldyBrbih0LmIsMTYpKSxuZXcgR3RlKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSksdDJ0KGUsYSwwKSxmPVJyKHQuYiwwKTtmLmIhPWYuZC5jOylvPWwoQnIoZiksNDApLHI9Y3IoZS5hLHB0KG8uZykpIT1udWxsP2woY3IoZS5hLHB0KG8uZykpLDE3KS5hOjAscnQobywoSGMoKSwkZCkscHQocikpO24uVmcoKX1mdW5jdGlvbiBOVShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztyZXR1cm4gZz10LmktZS5nLzIsdz1uLmktZS5nLzIsRT10LmotZS5nLzIsQz1uLmotZS5nLzIsbz10LmcrZS5nLGY9bi5nK2UuZyxyPXQuZitlLmcsYT1uLmYrZS5nLGc8dytmJiZ3PGcmJkU8QythJiZDPEV8fHc8ZytvJiZnPHcmJkM8RStyJiZFPEN8fGc8dytmJiZ3PGcmJkU8QyYmQzxFK3I/ITA6dzxnK28mJmc8dyYmRTxDK2EmJkM8RX1mdW5jdGlvbiB5U24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihvPXQuYy5sZW5ndGgsZj0oU24obix0LmMubGVuZ3RoKSxsKHQuY1tuXSwyOTMpKSxnPWYuYS5vLmEsTD1mLmMsQj0wLEU9Zi5jO0U8PWYuZjtFKyspe2lmKGc8PWUuYVtFXSlyZXR1cm4gRTtmb3IoQz1lLmFbRV0sdz1udWxsLGE9bisxO2E8bzthKyspcj0oU24oYSx0LmMubGVuZ3RoKSxsKHQuY1thXSwyOTMpKSxyLmM8PUUmJnIuZj49RSYmKHc9cik7dyYmKEM9Yi5NYXRoLm1heChDLHcuYS5vLmEpKSxDPkImJihMPUUsQj1DKX1yZXR1cm4gTH1mdW5jdGlvbiB4U24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG89bmV3IEtwKGwoWHIobmV3IFdoKSw1MCkpLGc9aWEsbj1uZXcgRyhlLmQpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IodD1sKHJlKG4pLDIyNiksZz10LmMuYztvLmEuZ2MoKSE9MCYmKGY9bChvLmEuVGMoKSwyMjYpLGYuYy5jK2YuYy5iPGcpOylvLmEuQmMoZikhPW51bGw7Zm9yKGE9by5hLmVjKCkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMjI2KSx1aShyLmIsdCksdWkodC5iLHIpO28uYS56Yyh0LChIbigpLFBiKSk9PW51bGx9fWZ1bmN0aW9uIExidChlLHQsbil7dmFyIHIsYSxvLGYsZztpZighWmsodCkpe2ZvcihnPW4uZWgoKERlKHQsMTYpP2wodCwxNikuZ2MoKTpYZyh0LktjKCkpKS9lLmF8MCksZy5VZyhkeXQsMSksZj1uZXcgciQsbz1udWxsLGE9dC5LYygpO2EuT2IoKTspcj1sKGEuUGIoKSw0MCksZj1MaChoZShsZShGaCwxKSxSbiwyMCwwLFtmLG5ldyBIZyhyKV0pKSxvJiYocnQobywoUWkoKSxkVHQpLHIpLHJ0KHIsUmRlLG8pLElvZShyKT09SW9lKG8pJiYocnQobyxqZGUscikscnQocixCVyxvKSkpLG89cjtnLlZnKCksTGJ0KGUsZixuKX19ZnVuY3Rpb24ga1NuKGUsdCl7dmFyIG4scixhO2lmKHQ9PW51bGwpe2ZvcihyPSghZS5hJiYoZS5hPW5ldyBudCh3cCxlLDksNSkpLG5ldyBvcihlLmEpKTtyLmUhPXIuaS5nYygpOylpZihuPWwoZ3IociksNjk0KSxhPW4uYywoYT8/bi56Yik9PW51bGwpcmV0dXJuIG59ZWxzZSBmb3Iocj0oIWUuYSYmKGUuYT1uZXcgbnQod3AsZSw5LDUpKSxuZXcgb3IoZS5hKSk7ci5lIT1yLmkuZ2MoKTspaWYobj1sKGdyKHIpLDY5NCksdm4odCwoYT1uLmMsYT8/bi56YikpKXJldHVybiBuO3JldHVybiBudWxsfWZ1bmN0aW9uIEp1ZShlLHQpe3ZhciBuO3N3aXRjaChuPW51bGwsdC5nKXtjYXNlIDE6ZS5lLnBmKChwaSgpLEJnZSkpJiYobj1sKGUuZS5vZihCZ2UpLDI1NikpO2JyZWFrO2Nhc2UgMzplLmUucGYoKHBpKCksRmdlKSkmJihuPWwoZS5lLm9mKEZnZSksMjU2KSk7YnJlYWs7Y2FzZSAyOmUuZS5wZigocGkoKSxQZ2UpKSYmKG49bChlLmUub2YoUGdlKSwyNTYpKTticmVhaztjYXNlIDQ6ZS5lLnBmKChwaSgpLFJnZSkpJiYobj1sKGUuZS5vZihSZ2UpLDI1NikpfXJldHVybiFuJiYobj1sKGUuZS5vZigocGkoKSx5TmUpKSwyNTYpKSxufWZ1bmN0aW9uIE1idChlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2ZvcihhPW4sbz0wLGc9bmV3IEcodCk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDI3KSxIaShmLChTYigpLHFXKSxwdChhKyspKSx3PUh5KGYpLHI9Yi5NYXRoLmF0YW4yKGYuaitmLmYvMixmLmkrZi5nLzIpLHIrPXI8MD9pdjowLHI8Ljc4NTM5ODE2MzM5NzQ0ODN8fHI+a3l0P1ZzKHcsZS5iKTpyPD1reXQmJnI+RXl0P1ZzKHcsZS5kKTpyPD1FeXQmJnI+VHl0P1ZzKHcsZS5jKTpyPD1UeXQmJlZzKHcsZS5hKSxvPU1idChlLHcsbyk7cmV0dXJuIGF9ZnVuY3Rpb24gRGJ0KGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3IoYT0oci5jK3IuYSkvMixDaCh0LmopLHVpKHQuaixhKSxDaChuLmUpLHVpKG4uZSxhKSxFPW5ldyBRSmUsZz1uZXcgRyhlLmYpO2cuYTxnLmMuYy5sZW5ndGg7KW89bChyZShnKSwxMzIpLHc9by5hLEN1ZShFLHQsdyksQ3VlKEUsbix3KTtmb3IoZj1uZXcgRyhlLmspO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMzIpLHc9by5iLEN1ZShFLHQsdyksQ3VlKEUsbix3KTtyZXR1cm4gRS5iKz0yLEUuYSs9amF0KHQsZS5xKSxFLmErPWphdChlLnEsbiksRX1mdW5jdGlvbiBFU24oZSx0LG4pe3ZhciByO24uVWcoIlByb2Nlc3NvciBhcnJhbmdlIG5vZGUiLDEpLFJ0KEJ0KFEodCwoSGMoKSxsSWUpKSkpLHI9bChmaChrRShGaShuZXcgYm4obnVsbCxuZXcga24odC5iLDE2KSksbmV3IGFuZSkpKSw0MCksZS5hPWwoUSh0LHdJZSksMzUzKSxlLmE9PShrQSgpLEhkZSl8fGUuYT09alc/SHZ0KGUsbmV3IElsKGhlKGxlKFBXLDEpLElHLDQwLDAsW3JdKSksbi5laCgxKSk6ZS5hPT1xZGUmJm13dChlLG5ldyBJbChoZShsZShQVywxKSxJRyw0MCwwLFtyXSkpLG4uZWgoMSkpLG4uVmcoKX1mdW5jdGlvbiB6MSgpe3oxPVUsS1c9bmV3IEhhKChwaSgpLFo2KSwxLjMpLFBDdD1uZXcgSGEoQzQsKEhuKCksITEpKSxpT2U9bmV3IGx3KDE1KSx2TT1uZXcgSGEoXzIsaU9lKSx3TT1uZXcgSGEoRXYsMTUpLERDdD1VQixOQ3Q9a3YsQkN0PWk3LEZDdD1VYixPQ3Q9cjcsbGdlPVlCLFJDdD1TNCxjT2U9KGxrZSgpLEFDdCksb09lPV9DdCxmZ2U9TUN0LHVPZT1MQ3Qsck9lPVRDdCxoZ2U9RUN0LG5PZT1rQ3QsYU9lPVNDdCx0T2U9V0IsSUN0PU5nZSxqQj15Q3QsZU9lPXdDdCwkQj14Q3Qsc09lPUNDdH1mdW5jdGlvbiBJYnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG49ZS5pLHQ9ZS5uLGc9bi5kLGUuZj09KG9sKCksRmIpP2crPShuLmEtZS5lLmIpLzI6ZS5mPT13MCYmKGcrPW4uYS1lLmUuYiksYT1uZXcgRyhlLmQpO2EuYTxhLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj1sKHJlKGEpLDE4NyksZj1yLk1mKCksbz1uZXcgcWEsby5iPWcsZys9Zi5iK2UuYSxlLmIuZyl7Y2FzZSAwOm8uYT1uLmMrdC5iO2JyZWFrO2Nhc2UgMTpvLmE9bi5jK3QuYisobi5iLWYuYSkvMjticmVhaztjYXNlIDI6by5hPW4uYytuLmItdC5jLWYuYX1yLk9mKG8pfX1mdW5jdGlvbiBPYnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG49ZS5pLHQ9ZS5uLGc9bi5jLGUuYj09KEJsKCksQmIpP2crPShuLmItZS5lLmEpLzI6ZS5iPT12MCYmKGcrPW4uYi1lLmUuYSksYT1uZXcgRyhlLmQpO2EuYTxhLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj1sKHJlKGEpLDE4NyksZj1yLk1mKCksbz1uZXcgcWEsby5hPWcsZys9Zi5hK2UuYSxlLmYuZyl7Y2FzZSAwOm8uYj1uLmQrdC5kO2JyZWFrO2Nhc2UgMTpvLmI9bi5kK3QuZCsobi5hLWYuYikvMjticmVhaztjYXNlIDI6by5iPW4uZCtuLmEtdC5hLWYuYn1yLk9mKG8pfX1mdW5jdGlvbiBUU24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtDPW4uYS5jLGY9bi5hLmMrbi5hLmIsbz1sKGNyKG4uYyx0KSw0NjgpLHo9by5mLFY9by5hLHc9bmV3IGx0KEMseiksTD1uZXcgbHQoZixWKSxhPUMsbi5wfHwoYSs9ZS5jKSxhKz1uLkYrbi52KmUuYixFPW5ldyBsdChhLHopLEI9bmV3IGx0KGEsViksZkEodC5hLGhlKGxlKEVhLDEpLGR0LDgsMCxbdyxFXSkpLGc9bi5kLmEuZ2MoKT4xLGcmJihyPW5ldyBsdChhLG4uYiksdWkodC5hLHIpKSxmQSh0LmEsaGUobGUoRWEsMSksZHQsOCwwLFtCLExdKSl9ZnVuY3Rpb24gSjllKGUsdCxuKXt2YXIgcixhO2Zvcih0PGUuZC5iLmMubGVuZ3RoPyhlLmI9bChqdChlLmQuYix0KSwzMCksZS5hPWwoanQoZS5kLmIsdC0xKSwzMCksZS5jPXQpOihlLmE9bmV3IHl1KGUuZCksZS5hLnA9dC0xLHZ0KGUuZC5iLGUuYSksZS5iPW5ldyB5dShlLmQpLGUuYi5wPXQsdnQoZS5kLmIsZS5iKSxlLmM9dCksVmEobixlLmIpLGE9bmV3IGhyKGRyKGthKG4pLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLCFyLmMuaS5jJiZyLmMuaS5rPT0oWm4oKSxjdSkmJlZhKHIuYy5pLGUuYSl9ZnVuY3Rpb24gTmJ0KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSxqRyksIkVMSyBSYW5kb21pemVyIiksJ0Rpc3RyaWJ1dGVzIHRoZSBub2RlcyByYW5kb21seSBvbiB0aGUgcGxhbmUsIGxlYWRpbmcgdG8gdmVyeSBvYmZ1c2NhdGluZyBsYXlvdXRzLiBDYW4gYmUgdXNlZnVsIHRvIGRlbW9uc3RyYXRlIHRoZSBwb3dlciBvZiAicmVhbCIgbGF5b3V0IGFsZ29yaXRobXMuJyksbmV3IHckKSkpLGd0KGUsakcsWHcsWk5lKSxndChlLGpHLEp5LDE1KSxndChlLGpHLG9HLHB0KDApKSxndChlLGpHLE94LGxUKX1mdW5jdGlvbiBaOWUoKXtaOWU9VTt2YXIgZSx0LG4scixhLG87Zm9yKEdNPVdlKEFsLEM2LDI4LDI1NSwxNSwxKSxMWT1XZShrZixBZCwyOCwxNiwxNSwxKSx0PTA7dDwyNTU7dCsrKUdNW3RdPS0xO2ZvcihuPTU3O24+PTQ4O24tLSlHTVtuXT1uLTQ4PDwyND4+MjQ7Zm9yKHI9NzA7cj49NjU7ci0tKUdNW3JdPXItNjUrMTA8PDI0Pj4yNDtmb3IoYT0xMDI7YT49OTc7YS0tKUdNW2FdPWEtOTcrMTA8PDI0Pj4yNDtmb3Iobz0wO288MTA7bysrKUxZW29dPTQ4K28mWnM7Zm9yKGU9MTA7ZTw9MTU7ZSsrKUxZW2VdPTY1K2UtMTAmWnN9ZnVuY3Rpb24gQ1NuKGUsdCl7dC5VZygiUHJvY2VzcyBncmFwaCBib3VuZHMiLDEpLHJ0KGUsKFFpKCksQmRlKSxmTyh1Y2UoeHkobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyB6dGUpKSkpLHJ0KGUsRmRlLGZPKHVjZSh4eShuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IHF0ZSkpKSkscnQoZSxySWUsZk8oY2NlKHh5KG5ldyBibihudWxsLG5ldyBrbihlLmIsMTYpKSxuZXcgSHRlKSkpKSxydChlLGlJZSxmTyhjY2UoeHkobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyBWdGUpKSkpLHQuVmcoKX1mdW5jdGlvbiBTU24oZSl7dmFyIHQsbixyLGEsbzthPWwoUShlLChOdCgpLGJ2KSksMjEpLG89bChRKGUseFcpLDIxKSxuPW5ldyBsdChlLmYuYStlLmQuYitlLmQuYyxlLmYuYitlLmQuZCtlLmQuYSksdD1uZXcgRW8obiksYS5IYygobWgoKSxBNCkpJiYocj1sKFEoZSxxVCksOCksby5IYygoWmwoKSxhQykpJiYoci5hPD0wJiYoci5hPTIwKSxyLmI8PTAmJihyLmI9MjApKSx0LmE9Yi5NYXRoLm1heChuLmEsci5hKSx0LmI9Yi5NYXRoLm1heChuLmIsci5iKSksUnQoQnQoUShlLGFkZSkpKXx8bkxuKGUsbix0KX1mdW5jdGlvbiBfU24oZSx0KXt2YXIgbixyLGEsbztmb3Iobz1PYyh0LChDdCgpLERyKSkuS2MoKTtvLk9iKCk7KXI9bChvLlBiKCksMTIpLG49bChRKHIsKGZ0KCksamwpKSwxMCksbiYmcDAoczAoaTAoYTAocjAobmV3IF9mLDApLC4xKSxlLmlbdC5wXS5kKSxlLmlbbi5wXS5hKSk7Zm9yKGE9T2ModCxRbikuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTIpLG49bChRKHIsKGZ0KCksamwpKSwxMCksbiYmcDAoczAoaTAoYTAocjAobmV3IF9mLDApLC4xKSxlLmlbbi5wXS5kKSxlLmlbdC5wXS5hKSl9ZnVuY3Rpb24gWnVlKGUpe3ZhciB0LG4scixhLG8sZjtpZighZS5jKXtpZihmPW5ldyBRYyx0PXFNLG89dC5hLnpjKGUsdCksbz09bnVsbCl7Zm9yKHI9bmV3IG9yKGR1KGUpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksODkpLGE9alUobiksRGUoYSw5MCkmJkFzKGYsWnVlKGwoYSwyOSkpKSxxcihmLG4pO3QuYS5CYyhlKSE9bnVsbCx0LmEuZ2MoKT09MH1rNW4oZiksSXkoZiksZS5jPW5ldyBONSgobChPZSh0dCgobGIoKSxWbikubyksMTUpLDE5KSxmLmkpLGYuZyksWWwoZSkuYiY9LTMzfXJldHVybiBlLmN9ZnVuY3Rpb24gZWtlKGUpe3ZhciB0O2lmKGUuYyE9MTApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFZHKSkpKTtzd2l0Y2godD1lLmEsdCl7Y2FzZSAxMTA6dD0xMDticmVhaztjYXNlIDExNDp0PTEzO2JyZWFrO2Nhc2UgMTE2OnQ9OTticmVhaztjYXNlIDkyOmNhc2UgMTI0OmNhc2UgNDY6Y2FzZSA5NDpjYXNlIDQ1OmNhc2UgNjM6Y2FzZSA0MjpjYXNlIDQzOmNhc2UgMTIzOmNhc2UgMTI1OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDkxOmNhc2UgOTM6YnJlYWs7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfXJldHVybiB0fWZ1bmN0aW9uIFBidChlKXt2YXIgdCxuLHIsYSxvO2lmKGUubD09MCYmZS5tPT0wJiZlLmg9PTApcmV0dXJuIjAiO2lmKGUuaD09U1AmJmUubT09MCYmZS5sPT0wKXJldHVybiItOTIyMzM3MjAzNjg1NDc3NTgwOCI7aWYoZS5oPj4xOSlyZXR1cm4iLSIrUGJ0KHhFKGUpKTtmb3Iobj1lLHI9IiI7IShuLmw9PTAmJm4ubT09MCYmbi5oPT0wKTspe2lmKGE9TG9lKEpVKSxuPU5rZShuLGEsITApLHQ9IiIrclplKE5iKSwhKG4ubD09MCYmbi5tPT0wJiZuLmg9PTApKWZvcihvPTktdC5sZW5ndGg7bz4wO28tLSl0PSIwIit0O3I9dCtyfXJldHVybiByfWZ1bmN0aW9uIEFTbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IodD0hMSxuPTAsYT1uZXcgRyhlLmQuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwzMCksci5wPW4rKyxmPW5ldyBHKHIuYSk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDEwKSwhdCYmIVprKHNwKG8pKSYmKHQ9ITApO2c9cnMoKEpzKCksSjEpLGhlKGxlKExNLDEpLGl0LDg4LDAsW3VjLHZjXSkpLHR8fChkMChnLHdmKSxkMChnLFExKSksZS5hPW5ldyB2aHQoZyksTmwoZS5mKSxObChlLmIpLE5sKGUuZSksTmwoZS5nKX1mdW5jdGlvbiBMU24oKXtpZighT2JqZWN0LmNyZWF0ZXx8IU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKXJldHVybiExO3ZhciBlPSJfX3Byb3RvX18iLHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZih0W2VdIT09dm9pZCAwKXJldHVybiExO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpO3JldHVybiEobi5sZW5ndGghPTB8fCh0W2VdPTQyLHRbZV0hPT00Mil8fE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmxlbmd0aD09MCl9ZnVuY3Rpb24gTVNuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEw7Zm9yKHI9bi5jLGE9bi5kLGc9STEodC5jKSx3PUkxKHQuZCkscj09dC5jPyhnPWo5ZShlLGcsYSksdz1xZ3QodC5kKSk6KGc9cWd0KHQuYyksdz1qOWUoZSx3LGEpKSxFPW5ldyBHeih0LmEpLENzKEUsZyxFLmEsRS5hLmEpLENzKEUsdyxFLmMuYixFLmMpLGY9dC5jPT1yLEw9bmV3IGpRZSxvPTA7bzxFLmItMTsrK28pQz1uZXcgY2EobChmZihFLG8pLDgpLGwoZmYoRSxvKzEpLDgpKSxmJiZvPT0wfHwhZiYmbz09RS5iLTI/TC5iPUM6dnQoTC5hLEMpO3JldHVybiBMfWZ1bmN0aW9uIERTbihlLHQpe3ZhciBuLHIsYSxvO2lmKG89ZS5qLmctdC5qLmcsbyE9MClyZXR1cm4gbztpZihuPWwoUShlLChOdCgpLGsyKSksMTcpLHI9bChRKHQsazIpLDE3KSxuJiZyJiYoYT1uLmEtci5hLGEhPTApKXJldHVybiBhO3N3aXRjaChlLmouZyl7Y2FzZSAxOnJldHVybiBZaShlLm4uYSx0Lm4uYSk7Y2FzZSAyOnJldHVybiBZaShlLm4uYix0Lm4uYik7Y2FzZSAzOnJldHVybiBZaSh0Lm4uYSxlLm4uYSk7Y2FzZSA0OnJldHVybiBZaSh0Lm4uYixlLm4uYik7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgbmMoekVlKSl9fWZ1bmN0aW9uIHRrZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2lmKFhnKChPTygpLG5ldyBocihkcihzcCh0KS5hLktjKCksbmV3IGopKSkpPj1lLmF8fCFCeGUodCxuKSlyZXR1cm4tMTtpZihaayhsKHIuS2IodCksMjApKSlyZXR1cm4gMTtmb3IoYT0wLGY9bChyLktiKHQpLDIwKS5LYygpO2YuT2IoKTspaWYobz1sKGYuUGIoKSwxOCksdz1vLmMuaT09dD9vLmQuaTpvLmMuaSxnPXRrZShlLHcsbixyKSxnPT0tMXx8KGE9Yi5NYXRoLm1heChhLGcpLGE+ZS5jLTEpKXJldHVybi0xO3JldHVybiBhKzF9ZnVuY3Rpb24gQmJ0KGUsdCl7dmFyIG4scixhLG8sZixnO2lmKHFlKHQpPT09cWUoZSkpcmV0dXJuITA7aWYoIURlKHQsMTUpfHwocj1sKHQsMTUpLGc9ZS5nYygpLHIuZ2MoKSE9ZykpcmV0dXJuITE7aWYoZj1yLktjKCksZS5ZaSgpKXtmb3Iobj0wO248ZzsrK24paWYoYT1lLlZpKG4pLG89Zi5QYigpLGE9PW51bGw/byE9bnVsbDohUGkoYSxvKSlyZXR1cm4hMX1lbHNlIGZvcihuPTA7bjxnOysrbilpZihhPWUuVmkobiksbz1mLlBiKCkscWUoYSkhPT1xZShvKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBGYnQoZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYoZS5mPjApe2lmKGUuX2ooKSx0IT1udWxsKXtmb3Iobz0wO288ZS5kLmxlbmd0aDsrK28paWYobj1lLmRbb10sbil7Zm9yKHI9bChuLmcsMzc5KSxnPW4uaSxmPTA7ZjxnOysrZilpZihhPXJbZl0sUGkodCxhLm1kKCkpKXJldHVybiEwfX1lbHNlIGZvcihvPTA7bzxlLmQubGVuZ3RoOysrbylpZihuPWUuZFtvXSxuKXtmb3Iocj1sKG4uZywzNzkpLGc9bi5pLGY9MDtmPGc7KytmKWlmKGE9cltmXSxxZSh0KT09PXFlKGEubWQoKSkpcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIElTbihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gbj10LnFpKGUuYSksbiYmKGE9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSwiYWZmaWxpYXRpb24iKSksYSE9bnVsbCk/KHI9UnEoYSxjbCgzNSkpLHI9PS0xP0JjZShlLEtfKGUsQWgodC5xaygpKSksYSk6cj09MD9CY2UoZSxudWxsLChYbigxLGEubGVuZ3RoKzEpLGEuc3Vic3RyKDEpKSk6QmNlKGUsKEdhKDAscixhLmxlbmd0aCksYS5zdWJzdHIoMCxyKSksKFhuKHIrMSxhLmxlbmd0aCsxKSxhLnN1YnN0cihyKzEpKSkpOm51bGx9ZnVuY3Rpb24gT1NuKGUsdCxuKXt2YXIgcixhLG8sZjtuLlVnKCJPcnRob2dvbmFsbHkgcm91dGluZyBoaWVyYXJjaGljYWwgcG9ydCBlZGdlcyIsMSksZS5hPTAscj1BTG4odCksT01uKHQsciksbU1uKGUsdCxyKSxPRG4odCksYT1sKFEodCwoTnQoKSxNcykpLDEwMSksbz10LmIsanZ0KChTbigwLG8uYy5sZW5ndGgpLGwoby5jWzBdLDMwKSksYSx0KSxqdnQobChqdChvLG8uYy5sZW5ndGgtMSksMzApLGEsdCksZj10LmIsWW10KChTbigwLGYuYy5sZW5ndGgpLGwoZi5jWzBdLDMwKSkpLFltdChsKGp0KGYsZi5jLmxlbmd0aC0xKSwzMCkpLG4uVmcoKX1mdW5jdGlvbiBua2UoZSl7c3dpdGNoKGUpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6cmV0dXJuIGUtNDg8PDI0Pj4yNDtjYXNlIDk3OmNhc2UgOTg6Y2FzZSA5OTpjYXNlIDEwMDpjYXNlIDEwMTpjYXNlIDEwMjpyZXR1cm4gZS05NysxMDw8MjQ+PjI0O2Nhc2UgNjU6Y2FzZSA2NjpjYXNlIDY3OmNhc2UgNjg6Y2FzZSA2OTpjYXNlIDcwOnJldHVybiBlLTY1KzEwPDwyND4+MjQ7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgZ2QoIkludmFsaWQgaGV4YWRlY2ltYWwiKSl9fWZ1bmN0aW9uIFBVKCl7UFU9VSxqX2U9bmV3IEw1KCJTUElSQUwiLDApLFBfZT1uZXcgTDUoIkxJTkVfQllfTElORSIsMSksQl9lPW5ldyBMNSgiTUFOSEFUVEFOIiwyKSxOX2U9bmV3IEw1KCJKSVRURVIiLDMpLHowZT1uZXcgTDUoIlFVQURSQU5UU19MSU5FX0JZX0xJTkUiLDQpLFJfZT1uZXcgTDUoIlFVQURSQU5UU19NQU5IQVRUQU4iLDUpLEZfZT1uZXcgTDUoIlFVQURSQU5UU19KSVRURVIiLDYpLE9fZT1uZXcgTDUoIkNPTUJJTkVfTElORV9CWV9MSU5FX01BTkhBVFRBTiIsNyksSV9lPW5ldyBMNSgiQ09NQklORV9KSVRURVJfTUFOSEFUVEFOIiw4KX1mdW5jdGlvbiBSYnQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2Zvcih3PVR1ZShlLG4pLEU9VHVlKHQsbiksYT0hMTt3JiZFJiYocnx8QzduKHcsRSxuKSk7KWY9VHVlKHcsbiksZz1UdWUoRSxuKSx1Tih0KSx1TihlKSxvPXcuYyxDbGUodywhMSksQ2xlKEUsITEpLG4/KEZ5KHQsRS5wLG8pLHQucD1FLnAsRnkoZSx3LnArMSxvKSxlLnA9dy5wKTooRnkoZSx3LnAsbyksZS5wPXcucCxGeSh0LEUucCsxLG8pLHQucD1FLnApLFZhKHcsbnVsbCksVmEoRSxudWxsKSx3PWYsRT1nLGE9ITA7cmV0dXJuIGF9ZnVuY3Rpb24gamJ0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IEdyZTtjYXNlIDE6cmV0dXJuIG5ldyBYUztjYXNlIDM6cmV0dXJuIG5ldyBmZXQ7Y2FzZSA0OnJldHVybiBuZXcgemVlO2Nhc2UgNTpyZXR1cm4gbmV3IHpydDtjYXNlIDY6cmV0dXJuIG5ldyBqSTtjYXNlIDI6cmV0dXJuIG5ldyBZUztjYXNlIDc6cmV0dXJuIG5ldyBhejtjYXNlIDg6cmV0dXJuIG5ldyBSSTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5ZXJlciAiKyhlLmYhPW51bGw/ZS5mOiIiK2UuZykpKX19ZnVuY3Rpb24gTlNuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7Zm9yKGE9ITEsbz0hMSxnPW5ldyBHKHIuaik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEyKSxxZShRKGYsKGZ0KCksemkpKSk9PT1xZShuKSYmKGYuZy5jLmxlbmd0aD09MD9mLmUuYy5sZW5ndGg9PTB8fChhPSEwKTpvPSEwKTtyZXR1cm4gdz0wLGEmJmFebz93PW4uaj09KEN0KCksUW4pPy1lLmVbci5jLnBdW3IucF06dC1lLmVbci5jLnBdW3IucF06byYmYV5vP3c9ZS5lW3IuYy5wXVtyLnBdKzE6YSYmbyYmKHc9bi5qPT0oQ3QoKSxRbik/MDp0LzIpLHd9ZnVuY3Rpb24gZWxlKGUsdCxuLHIsYSxvLGYsZyl7dmFyIHcsRSxDO2Zvcih3PTAsdCE9bnVsbCYmKHdePXMyKHQudG9Mb3dlckNhc2UoKSkpLG4hPW51bGwmJih3Xj1zMihuKSksciE9bnVsbCYmKHdePXMyKHIpKSxmIT1udWxsJiYod149czIoZikpLGchPW51bGwmJih3Xj1zMihnKSksRT0wLEM9by5sZW5ndGg7RTxDO0UrKyl3Xj1zMihvW0VdKTtlP3d8PTI1Njp3Jj0tMjU3LGE/d3w9MTY6dyY9LTE3LHRoaXMuZj13LHRoaXMuaT10PT1udWxsP251bGw6KG5yKHQpLHQpLHRoaXMuYT1uLHRoaXMuZD1yLHRoaXMuaj1vLHRoaXMuZz1mLHRoaXMuZT1nfWZ1bmN0aW9uIHJrZShlLHQsbil7dmFyIHIsYTtzd2l0Y2goYT1udWxsLHQuZyl7Y2FzZSAxOmE9KGtsKCkseEFlKTticmVhaztjYXNlIDI6YT0oa2woKSxFQWUpfXN3aXRjaChyPW51bGwsbi5nKXtjYXNlIDE6cj0oa2woKSxrQWUpO2JyZWFrO2Nhc2UgMjpyPShrbCgpLHlBZSk7YnJlYWs7Y2FzZSAzOnI9KGtsKCksVEFlKTticmVhaztjYXNlIDQ6cj0oa2woKSxDQWUpfXJldHVybiBhJiZyP0c4KGUuaixuZXcgZ3oobmV3IElsKGhlKGxlKG9PbiwxKSxSbiwxNzgsMCxbbChYcihhKSwxNzgpLGwoWHIociksMTc4KV0pKSkpOihDbigpLENuKCksX28pfWZ1bmN0aW9uIFBTbihlKXt2YXIgdCxuLHI7c3dpdGNoKHQ9bChRKGUsKE50KCkscVQpKSw4KSxydChlLHFULG5ldyBsdCh0LmIsdC5hKSksbChRKGUsUmQpLDI1NSkuZyl7Y2FzZSAxOnJ0KGUsUmQsKG9nKCksblkpKTticmVhaztjYXNlIDI6cnQoZSxSZCwob2coKSxlWSkpO2JyZWFrO2Nhc2UgMzpydChlLFJkLChvZygpLEhCKSk7YnJlYWs7Y2FzZSA0OnJ0KGUsUmQsKG9nKCksVkIpKX0oZS5xP2UucTooQ24oKSxDbigpLG1nKSkuX2IodzQpJiYobj1sKFEoZSx3NCksOCkscj1uLmEsbi5hPW4uYixuLmI9cil9ZnVuY3Rpb24gJGJ0KGUsdCxuLHIsYSxvKXtpZih0aGlzLmI9bix0aGlzLmQ9YSxlPj10Lmxlbmd0aCl0aHJvdyB1ZShuZXcgdGMoIkdyZWVkeSBTd2l0Y2hEZWNpZGVyOiBGcmVlIGxheWVyIG5vdCBpbiBncmFwaC4iKSk7dGhpcy5jPXRbZV0sdGhpcy5lPW5ldyBJTyhyKSxpY2UodGhpcy5lLHRoaXMuYywoQ3QoKSxlcikpLHRoaXMuaT1uZXcgSU8ociksaWNlKHRoaXMuaSx0aGlzLmMsYXIpLHRoaXMuZj1uZXcgaXN0KHRoaXMuYyksdGhpcy5hPSFvJiZhLmkmJiFhLnMmJnRoaXMuY1swXS5rPT0oWm4oKSxVcyksdGhpcy5hJiZXOW4odGhpcyxlLHQubGVuZ3RoKX1mdW5jdGlvbiB6YnQoZSx0KXt2YXIgbixyLGEsbyxmLGc7bz0hZS5CLkhjKChabCgpLHNGKSksZj1lLkIuSGMoR2dlKSxlLmE9bmV3IF8xdChmLG8sZS5jKSxlLm4mJk81ZShlLmEubixlLm4pLFhpZShlLmcsKHQxKCksJHUpLGUuYSksdHx8KHI9bmV3IERBKDEsbyxlLmMpLHIubi5hPWUuayxROChlLnAsKEN0KCksUW4pLHIpLGE9bmV3IERBKDEsbyxlLmMpLGEubi5kPWUuayxROChlLnAsRHIsYSksZz1uZXcgREEoMCxvLGUuYyksZy5uLmM9ZS5rLFE4KGUucCxlcixnKSxuPW5ldyBEQSgwLG8sZS5jKSxuLm4uYj1lLmssUTgoZS5wLGFyLG4pKX1mdW5jdGlvbiBCU24oZSl7dmFyIHQsbixyO3N3aXRjaCh0PWwoUShlLmQsKE50KCksYnApKSwyMjMpLHQuZyl7Y2FzZSAyOm49VEluKGUpO2JyZWFrO2Nhc2UgMzpuPShyPW5ldyBidCxJcyhGaShmYyhEYyhEYyhuZXcgYm4obnVsbCxuZXcga24oZS5kLmIsMTYpKSxuZXcgZGVlKSxuZXcgZ2VlKSxuZXcgcGVlKSxuZXcgd1MpLG5ldyB4WWUocikpLHIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdWUobmV3IG5jKCJDb21wYWN0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yICIrdCsiIGVkZ2VzLiIpKX1HTG4oZSxuKSx0byhuZXcgYnIoZS5nKSxuZXcgd1llKGUpKX1mdW5jdGlvbiBGU24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZih0LlVnKCJQcm9jZXNzIGRpcmVjdGlvbnMiLDEpLG49bChRKGUsKEhjKCkseTMpKSw4OCksbiE9KEpzKCksUTEpKWZvcihhPVJyKGUuYiwwKTthLmIhPWEuZC5jOyl7c3dpdGNoKHI9bChCcihhKSw0MCksZz1sKFEociwoUWkoKSxQQikpLDE3KS5hLHc9bChRKHIsQkIpLDE3KS5hLG4uZyl7Y2FzZSA0OncqPS0xO2JyZWFrO2Nhc2UgMTpvPWcsZz13LHc9bzticmVhaztjYXNlIDI6Zj1nLGc9LXcsdz1mfXJ0KHIsUEIscHQoZykpLHJ0KHIsQkIscHQodykpfXQuVmcoKX1mdW5jdGlvbiBSU24oZSx0KXt2YXIgbjtyZXR1cm4gbj1uZXcgQnMsdCYmcGMobixsKGNyKGUuYSxvRiksOTYpKSxEZSh0LDQyMikmJnBjKG4sbChjcihlLmEsY0YpLDk2KSksRGUodCwzNjYpPyhwYyhuLGwoY3IoZS5hLGVjKSw5NikpLG4pOihEZSh0LDg0KSYmcGMobixsKGNyKGUuYSxfciksOTYpKSxEZSh0LDIwNyk/KHBjKG4sbChjcihlLmEsQWkpLDk2KSksbik6RGUodCwxOTMpPyhwYyhuLGwoY3IoZS5hLEhsKSw5NikpLG4pOihEZSh0LDMyNikmJnBjKG4sbChjcihlLmEsanMpLDk2KSksbikpfWZ1bmN0aW9uIGpTbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2Zvcih3PW5ldyB4dXQsZz1uZXcgRyhlLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWlmKGY9bChyZShnKSwxMCksZi5rIT0oWm4oKSxVcykpe2Zvcih6RW4odyxmLG5ldyBxYSksbz1uZXcgaHIoZHIocXMoZikuYS5LYygpLG5ldyBqKSk7anIobyk7KWlmKGE9bCh4cihvKSwxOCksIShhLmMuaS5rPT1Vc3x8YS5kLmkuaz09VXMpKWZvcihyPVJyKGEuYSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksOCksdD1uLFJBKHcsbmV3IElrKHQuYSx0LmIpKX1yZXR1cm4gd31mdW5jdGlvbiB0bGUoKXt0bGU9VSxQT2U9bmV3IFVpKE1mZSksTk9lPShiXygpLHFCKSxPT2U9bmV3IHBuKE9mZSxOT2UpLElPZT0oQ04oKSxaVyksY1N0PW5ldyBwbihHQ2UsSU9lKSxET2U9KFhOKCksd2dlKSxvU3Q9bmV3IHBuKEtDZSxET2UpLGlTdD1uZXcgcG4oRGZlLG51bGwpLE1PZT0ock4oKSxRVyksYVN0PW5ldyBwbihJZmUsTU9lKSxMT2U9KG5xKCksYmdlKSxlU3Q9bmV3IHBuKFdDZSxMT2UpLHRTdD1uZXcgcG4oWUNlLChIbigpLCExKSksblN0PW5ldyBwbihYQ2UscHQoNjQpKSxyU3Q9bmV3IHBuKFFDZSwhMCksc1N0PXZnZX1mdW5jdGlvbiBxYnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoZS5wPTEsYT1lLmMsTD1uZXcgYmQsQz1SdyhlLChxbygpLHp1KSkuS2MoKTtDLk9iKCk7KWZvcihFPWwoQy5QYigpLDEyKSxyPW5ldyBHKEUuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE4KSx3PW4uZC5pLGUhPXcmJihvPXcuYyxvLnA8PWEucCYmKGY9YS5wKzEsZj09dC5iLmMubGVuZ3RoPyhnPW5ldyB5dSh0KSxnLnA9Zix2dCh0LmIsZyksVmEodyxnKSk6KGc9bChqdCh0LmIsZiksMzApLFZhKHcsZykpLEwuYS56Yyh3LEwpKSk7cmV0dXJuIEx9ZnVuY3Rpb24gJFNuKGUsdCl7dmFyIG4scjtpZihuPWwoUShlLChRaSgpLE9kZSkpLDE1KSwhbnx8bi5nYygpPDEpcmV0dXJuIG51bGw7aWYobi5nYygpPT0xKXJldHVybiBsKG4uWGIoMCksNDApO3N3aXRjaChyPW51bGwsdC5nKXtjYXNlIDI6cj1sKGZoKFk4KG4uT2MoKSxuZXcgUnRlKSksNDApO2JyZWFrO2Nhc2UgMTpyPWwoZmgodnkobi5PYygpLG5ldyBvOCkpLDQwKTticmVhaztjYXNlIDQ6cj1sKGZoKFk4KG4uT2MoKSxuZXcgWmopKSw0MCk7YnJlYWs7Y2FzZSAzOnI9bChmaCh2eShuLk9jKCksbmV3IEZ0ZSkpLDQwKX1yZXR1cm4gcn1mdW5jdGlvbiBIYnQoZSl7dmFyIHQsbixyLGEsbyxmO2lmKGUuYT09bnVsbClpZihlLmE9V2UoaWgscGcsMjgsZS5jLmIuYy5sZW5ndGgsMTYsMSksZS5hWzBdPSExLG5zKGUuYywoTnQoKSxmZGUpKSlmb3Iocj1sKFEoZS5jLGZkZSksMTUpLG49ci5LYygpO24uT2IoKTspdD1sKG4uUGIoKSwxNykuYSx0PjAmJnQ8ZS5hLmxlbmd0aCYmKGUuYVt0XT0hMSk7ZWxzZSBmb3IoZj1uZXcgRyhlLmMuYiksZi5hPGYuYy5jLmxlbmd0aCYmcmUoZiksYT0xO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwzMCksZS5hW2ErK109a1RuKG8pfWZ1bmN0aW9uIHVnKCl7dWc9VSxiTT1uZXcgVWkoImFkZGl0aW9uYWxIZWlnaHQiKSxaVD1uZXcgVWkoImRyYXdpbmdIZWlnaHQiKSxaeD1uZXcgVWkoImRyYXdpbmdXaWR0aCIpLFVXPW5ldyBVaSgibWluSGVpZ2h0IiksbU09bmV3IFVpKCJtaW5XaWR0aCIpLEdXPW5ldyBVaSgicm93cyIpLFQ0PW5ldyBVaSgidGFyZ2V0V2lkdGgiKSxjZ2U9bmV3IHZzKCJtaW5Sb3dJbmNyZWFzZSIsMCksbUN0PW5ldyB2cygibWF4Um93SW5jcmVhc2UiLDApLG9nZT1uZXcgdnMoIm1pblJvd0RlY3JlYXNlIiwwKSxiQ3Q9bmV3IHZzKCJtYXhSb3dEZWNyZWFzZSIsMCl9ZnVuY3Rpb24gVmJ0KGUsdCl7dmFyIG4scixhLG87c3dpdGNoKGE9ZS5iLHQpe2Nhc2UgMTp7ZS5ifD0xLGUuYnw9NCxlLmJ8PTg7YnJlYWt9Y2FzZSAyOntlLmJ8PTIsZS5ifD00LGUuYnw9ODticmVha31jYXNlIDQ6e2UuYnw9MSxlLmJ8PTIsZS5ifD00LGUuYnw9ODticmVha31jYXNlIDM6e2UuYnw9MTYsZS5ifD04O2JyZWFrfWNhc2UgMDp7ZS5ifD0zMixlLmJ8PTE2LGUuYnw9OCxlLmJ8PTEsZS5ifD0yLGUuYnw9NDticmVha319aWYoZS5iIT1hJiZlLmMpZm9yKHI9bmV3IG9yKGUuYyk7ci5lIT1yLmkuZ2MoKTspbz1sKGdyKHIpLDQ4Miksbj1ZbChvKSx6eShuLHQpfWZ1bmN0aW9uIFVidChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihhPSExLGY9dCxnPTAsdz1mLmxlbmd0aDtnPHc7KytnKW89ZltnXSxSdCgoSG4oKSwhIW8uZSkpJiYhbChqdChlLmIsby5lLnApLDIxOSkucyYmKGE9YXwoRT1vLmUsQz1sKGp0KGUuYixFLnApLDIxOSksTD1DLmUsQj1VSmUobixMLmxlbmd0aCksej1MW0JdWzBdLHouaz09KFpuKCksVXMpP0xbQl09dkNuKG8sTFtCXSxuPyhDdCgpLGVyKTooQ3QoKSxhcikpOkMuYy5tZyhMLG4pLFY9Y1AoZSxDLG4sciksWTllKEMuZSxDLm8sbiksVikpO3JldHVybiBhfWZ1bmN0aW9uIEdidChlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKG89KCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmksYT1uZXcgb3IoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMjcpLHFlKGF0KHIsKHBpKCksbjcpKSkhPT1xZSgocnAoKSxETSkpJiYoZj1sKGF0KHQsYTcpLDE0Myksbj1sKGF0KHIsYTcpLDE0MyksKGY9PW58fGYmJmc2ZShmLG4pKSYmKCFyLmEmJihyLmE9bmV3IG50KEFpLHIsMTAsMTEpKSxyLmEpLmkhPTAmJihvKz1HYnQoZSxyKSkpO3JldHVybiBvfWZ1bmN0aW9uIHpTbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3Iocj0wLGc9MCxmPW5ldyBHKGUuZCk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDEwNSksYT1sKHljKEZpKG5ldyBibihudWxsLG5ldyBrbihvLmosMTYpKSxuZXcgVmopLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxuPW51bGwscjw9Zz8obj0oQ3QoKSxRbikscis9YS5nYygpKTpnPHImJihuPShDdCgpLERyKSxnKz1hLmdjKCkpLHQ9bixJcyhmYyhhLk9jKCksbmV3IHllZSksbmV3IFRZZSh0KSl9ZnVuY3Rpb24gcVNuKGUpe3ZhciB0LG4scixhLG87Zm9yKG89bmV3IEJ1KGUuYS5jLmxlbmd0aCksYT1uZXcgRyhlLmEpO2EuYTxhLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj1sKHJlKGEpLDEwKSxuPWwoUShyLChOdCgpLFF1KSksMTcxKSx0PW51bGwsbi5nKXtjYXNlIDE6Y2FzZSAyOnQ9KFZtKCksUDYpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dD0oVm0oKSxGVCl9dD8ocnQociwoZnQoKSxzVyksKFZtKCksUDYpKSx0PT1GVD9EVShyLG4sKHFvKCksJGwpKTp0PT1QNiYmRFUocixuLChxbygpLHp1KSkpOiRuKG8uYyxyKX1yZXR1cm4gb31mdW5jdGlvbiBIU24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3IoZS5iPW5ldyBpMnQobmV3IElsKChDdCgpLGhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSkpKSxuZXcgSWwoKE93KCksaGUobGUobTFlLDEpLGl0LDM3MiwwLFtvMyxSYixhM10pKSkpLGY9aGUobGUoT28sMSksYXUsNjQsMCxbUGMsUW4sYXIsRHIsZXJdKSxnPTAsdz1mLmxlbmd0aDtnPHc7KytnKWZvcihvPWZbZ10sbj1oZShsZShtMWUsMSksaXQsMzcyLDAsW28zLFJiLGEzXSkscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sUDhuKGUuYixvLHQsbmV3IGJ0KX1mdW5jdGlvbiBLYnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZihmPWwobCgkaShlLnIsdCksMjEpLDg3KSxnPWUudS5IYygoUmwoKSxZYikpLG49ZS51LkhjKFBNKSxyPWUudS5IYyhOTSksRT1lLnUuSGMoYTkpLEw9ZS5CLkhjKChabCgpLGZZKSksQz0hbiYmIXImJihFfHxmLmdjKCk9PTIpLHpDbihlLHQpLGE9bnVsbCx3PW51bGwsZyl7Zm9yKG89Zi5LYygpLGE9bChvLlBiKCksMTE3KSx3PWE7by5PYigpOyl3PWwoby5QYigpLDExNyk7YS5kLmI9MCx3LmQuYz0wLEMmJiFhLmEmJihhLmQuYz0wKX1MJiYoTnhuKGYpLGcmJihhLmQuYj0wLHcuZC5jPTApKX1mdW5jdGlvbiBXYnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZihmPWwobCgkaShlLnIsdCksMjEpLDg3KSxnPWUudS5IYygoUmwoKSxZYikpLG49ZS51LkhjKFBNKSxyPWUudS5IYyhOTSksdz1lLnUuSGMoYTkpLEw9ZS5CLkhjKChabCgpLGZZKSksRT0hbiYmIXImJih3fHxmLmdjKCk9PTIpLHVBbihlLHQpLEM9bnVsbCxhPW51bGwsZyl7Zm9yKG89Zi5LYygpLEM9bChvLlBiKCksMTE3KSxhPUM7by5PYigpOylhPWwoby5QYigpLDExNyk7Qy5kLmQ9MCxhLmQuYT0wLEUmJiFDLmEmJihDLmQuYT0wKX1MJiYoUHhuKGYpLGcmJihDLmQuZD0wLGEuZC5hPTApKX1mdW5jdGlvbiBZYnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7aWYoYT10LmssdC5wPj0wKXJldHVybiExO2lmKHQucD1uLmIsdnQobi5lLHQpLGE9PShabigpLEFhKXx8YT09QXUpe2ZvcihmPW5ldyBHKHQuaik7Zi5hPGYuYy5jLmxlbmd0aDspZm9yKG89bChyZShmKSwxMiksQz0ocj1uZXcgRyhuZXcgQzgobykuYS5nKSxuZXcgdndlKHIpKTtMYyhDLmEpOylpZihFPWwocmUoQy5hKSwxOCkuZCxnPUUuaSx3PWcuayx0LmMhPWcuYyYmKHc9PUFhfHx3PT1BdSkmJllidChlLGcsbikpcmV0dXJuITB9cmV0dXJuITB9ZnVuY3Rpb24gQlUoZSl7dmFyIHQ7cmV0dXJuIGUuRGImNjQ/VDllKGUpOih0PW5ldyBBZihUOWUoZSkpLHQuYSs9IiAoY2hhbmdlYWJsZTogIixHcCh0LChlLkJiJm0wKSE9MCksdC5hKz0iLCB2b2xhdGlsZTogIixHcCh0LChlLkJiJnI0KSE9MCksdC5hKz0iLCB0cmFuc2llbnQ6ICIsR3AodCwoZS5CYiZYeSkhPTApLHQuYSs9IiwgZGVmYXVsdFZhbHVlTGl0ZXJhbDogIixYbyh0LGUuaiksdC5hKz0iLCB1bnNldHRhYmxlOiAiLEdwKHQsKGUuQmImU2wpIT0wKSx0LmErPSIsIGRlcml2ZWQ6ICIsR3AodCwoZS5CYiZfZCkhPTApLHQuYSs9IikiLHQuYSl9ZnVuY3Rpb24gVlNuKGUsdCl7dmFyIG4scixhLG8sZjtyZXR1cm4gYT10LnFpKGUuYSksYSYmKHI9KCFhLmImJihhLmI9bmV3IGRoKChUbigpLE5vKSxZYyxhKSksYS5iKSxuPWVpKG4xKHIsaG8pKSxuIT1udWxsJiYobz1uLmxhc3RJbmRleE9mKCIjIiksZj1vPT0tMT96eWUoZSx0LmprKCksbik6bz09MD9vTihlLG51bGwsKFhuKDEsbi5sZW5ndGgrMSksbi5zdWJzdHIoMSkpKTpvTihlLChHYSgwLG8sbi5sZW5ndGgpLG4uc3Vic3RyKDAsbykpLChYbihvKzEsbi5sZW5ndGgrMSksbi5zdWJzdHIobysxKSkpLERlKGYsMTU2KSkpP2woZiwxNTYpOm51bGx9ZnVuY3Rpb24gVVNuKGUsdCl7dmFyIG4scixhLG8sZjtyZXR1cm4gcj10LnFpKGUuYSksciYmKG49KCFyLmImJihyLmI9bmV3IGRoKChUbigpLE5vKSxZYyxyKSksci5iKSxvPWVpKG4xKG4sbzBlKSksbyE9bnVsbCYmKGE9by5sYXN0SW5kZXhPZigiIyIpLGY9YT09LTE/enllKGUsdC5qaygpLG8pOmE9PTA/b04oZSxudWxsLChYbigxLG8ubGVuZ3RoKzEpLG8uc3Vic3RyKDEpKSk6b04oZSwoR2EoMCxhLG8ubGVuZ3RoKSxvLnN1YnN0cigwLGEpKSwoWG4oYSsxLG8ubGVuZ3RoKzEpLG8uc3Vic3RyKGErMSkpKSxEZShmLDE1NikpKT9sKGYsMTU2KTpudWxsfWZ1bmN0aW9uIEdTbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKGE9cVRuKGUuZCksZj1sKFEoZS5iLChJQSgpLFlfZSkpLDEwNyksZz1mLmIrZi5jLHc9Zi5kK2YuYSxDPWEuZC5hKmUuZStnLEU9YS5iLmEqZS5mK3csX2llKGUuYixuZXcgbHQoQyxFKSksQj1uZXcgRyhlLmcpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSw1NjgpLHQ9TC5nLWEuYS5hLG49TC5pLWEuYy5hLHI9T2koc2ZuKG5ldyBsdCh0LG4pLEwuYSxMLmIpLG1kKHpfKEphKGZ5ZShMLmUpKSxMLmQqTC5hLEwuYypMLmIpLC0uNSkpLG89ZHllKEwuZSksX3VuKEwuZSxtYShyLG8pKX1mdW5jdGlvbiBLU24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2Zvcih0LlVnKCJSZXN0b3JpbmcgcmV2ZXJzZWQgZWRnZXMiLDEpLHc9bmV3IEcoZS5iKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoZz1sKHJlKHcpLDMwKSxDPW5ldyBHKGcuYSk7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKEU9bChyZShDKSwxMCksQj1uZXcgRyhFLmopO0IuYTxCLmMuYy5sZW5ndGg7KWZvcihMPWwocmUoQiksMTIpLGY9a2QoTC5nKSxyPWYsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sUnQoQnQoUShuLChmdCgpLFcxKSkpKSYmVXcobiwhMSk7dC5WZygpfWZ1bmN0aW9uIFdTbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2Zvcih3PVdlKE5hLGR0LDEwOSwoQ3QoKSxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pKS5sZW5ndGgsMCwyKSxvPWhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSksZj0wLGc9by5sZW5ndGg7ZjxnOysrZilhPW9bZl0sd1thLmddPVdlKE5hLFpvLDI4LGUuY1thLmddLDE1LDEpO3JldHVybiBoZ3QodyxlLFFuKSxoZ3QodyxlLERyKSxidWUodyxlLFFuLHQsbixyKSxidWUodyxlLGFyLHQsbixyKSxidWUodyxlLERyLHQsbixyKSxidWUodyxlLGVyLHQsbixyKSx3fWZ1bmN0aW9uIFlTbihlLHQsbil7aWYoSHUoZS5hLHQpKXtpZihXMChsKGNyKGUuYSx0KSw0OSksbikpcmV0dXJuIDF9ZWxzZSBraShlLmEsdCxuZXcgS3MpO2lmKEh1KGUuYSxuKSl7aWYoVzAobChjcihlLmEsbiksNDkpLHQpKXJldHVybi0xfWVsc2Uga2koZS5hLG4sbmV3IEtzKTtpZihIdShlLmIsdCkpe2lmKFcwKGwoY3IoZS5iLHQpLDQ5KSxuKSlyZXR1cm4tMX1lbHNlIGtpKGUuYix0LG5ldyBLcyk7aWYoSHUoZS5iLG4pKXtpZihXMChsKGNyKGUuYixuKSw0OSksdCkpcmV0dXJuIDF9ZWxzZSBraShlLmIsbixuZXcgS3MpO3JldHVybiAwfWZ1bmN0aW9uIFhTbihlKXt2YXIgdCxuLHIsYSxvLGY7ZS5xPT0oUmEoKSxUZyl8fGUucT09TXV8fChhPWUuZi5uLmQrdEgobChRbyhlLmIsKEN0KCksUW4pKSwxMjcpKStlLmMsdD1lLmYubi5hK3RIKGwoUW8oZS5iLERyKSwxMjcpKStlLmMscj1sKFFvKGUuYixhciksMTI3KSxmPWwoUW8oZS5iLGVyKSwxMjcpLG89Yi5NYXRoLm1heCgwLHIubi5kLWEpLG89Yi5NYXRoLm1heChvLGYubi5kLWEpLG49Yi5NYXRoLm1heCgwLHIubi5hLXQpLG49Yi5NYXRoLm1heChuLGYubi5hLXQpLHIubi5kPW8sZi5uLmQ9byxyLm4uYT1uLGYubi5hPW4pfWZ1bmN0aW9uIGlrZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEU7aWYobj09bnVsbCl7Zm9yKGE9bChlLmcsMTI0KSxnPTA7ZzxlLmk7KytnKWlmKGY9YVtnXSxmLkxrKCk9PXQpcmV0dXJuIFRvKGUsZixyKX1yZXR1cm4gbz0oRm8oKSxsKHQsNjkpLnhrKCk/bChuLDc2KTpzZyh0LG4pKSxoaChlLmUpPyhFPSFGTihlLHQpLHI9UnUoZSxvLHIpLHc9dC5KaygpP2RiKGUsMyx0LG51bGwsbixYRShlLHQsbixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCksRSk6ZGIoZSwxLHQsdC5paygpLG4sLTEsRSkscj9yLm5qKHcpOnI9dyk6cj1SdShlLG8scikscn1mdW5jdGlvbiBYYnQoKXt0aGlzLmI9bmV3IGUyLHRoaXMuZD1uZXcgZTIsdGhpcy5lPW5ldyBlMix0aGlzLmM9bmV3IGUyLHRoaXMuYT1uZXcgUHIsdGhpcy5mPW5ldyBQcixVNShFYSxuZXcgUG5lLG5ldyB4SSksVTUoR09lLG5ldyBiNSxuZXcgWjkpLFU1KHZBZSxuZXcgX1MsbmV3IGtJKSxVNSh3QWUsbmV3IEZuZSxuZXcgUm5lKSxVNShnX3QsbmV3IGIkLG5ldyBtJCksVTUoY09uLG5ldyBsOCxuZXcgVzIpLFU1KGhPbixuZXcgZCQsbmV3IGckKSxVNSh1T24sbmV3IHAkLG5ldyBCbmUpLFU1KGxPbixuZXcgaDgsbmV3IHJ5KSxVNShnT24sbmV3IGpwLG5ldyBZMil9ZnVuY3Rpb24gS0EoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihlPWU9PW51bGw/dWw6KG5yKGUpLGUpLGE9MDthPHQubGVuZ3RoO2ErKyl0W2FdPUdUbih0W2FdKTtmb3Iobj1uZXcgUzUsZj0wLHI9MDtyPHQubGVuZ3RoJiYobz1lLmluZGV4T2YoIiVzIixmKSxvIT0tMSk7KW4uYSs9IiIrdGYoZT09bnVsbD91bDoobnIoZSksZSksZixvKSx3dShuLHRbcisrXSksZj1vKzI7aWYoZmN0KG4sZSxmLGUubGVuZ3RoKSxyPHQubGVuZ3RoKXtmb3Iobi5hKz0iIFsiLHd1KG4sdFtyKytdKTtyPHQubGVuZ3RoOyluLmErPUNvLHd1KG4sdFtyKytdKTtuLmErPSJdIn1yZXR1cm4gbi5hfWZ1bmN0aW9uIHNrZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihuPTAsdz1uZXcgRyh0KTt3LmE8dy5jLmMubGVuZ3RoOyl7Zm9yKGc9bChyZSh3KSwxMiksWTdlKGUuYixlLmRbZy5wXSksZj0wLGE9bmV3IE4xKGcuYik7TGMoYS5hKXx8TGMoYS5iKTspcj1sKExjKGEuYSk/cmUoYS5hKTpyZShhLmIpLDE4KSx1YXQocik/KG89ZjNlKGUsZz09ci5jP3IuZDpyLmMpLG8+ZS5kW2cucF0mJihuKz1mNmUoZS5iLG8pLGdiKGUuYSxwdChvKSkpKTorK2Y7Zm9yKG4rPWUuYi5kKmY7IWxfKGUuYSk7KVU2ZShlLmIsbChYOChlLmEpLDE3KS5hKX1yZXR1cm4gbn1mdW5jdGlvbiBRYnQoZSl7dmFyIHQsbixyLGEsbyxmO3JldHVybiBvPTAsdD1PZihlKSx0LmtrKCkmJihvfD00KSxlLkJiJlNsJiYob3w9MiksRGUoZSwxMDIpPyhuPWwoZSwxOSksYT1SbyhuKSxuLkJiJmV1JiYob3w9MzIpLGEmJih5cihreShhKSksb3w9OCxmPWEudCwoZj4xfHxmPT0tMSkmJihvfD0xNiksYS5CYiZldSYmKG98PTY0KSksbi5CYiZJbyYmKG98PXI0KSxvfD1tMCk6RGUodCw0NjkpP298PTUxMjoocj10LmtrKCksciYmci5pJjEmJihvfD0yNTYpKSxlLkJiJjUxMiYmKG98PTEyOCksb31mdW5jdGlvbiBRU24oZSx0KXt2YXIgbjtyZXR1cm4gZS5mPT1zcGU/KG49a3coaWMoKEVsKCksaW8pLHQpKSxlLmU/bj09NCYmdCE9KGt4KCksdTkpJiZ0IT0oa3goKSxjOSkmJnQhPShreCgpLGFwZSkmJnQhPShreCgpLG9wZSk6bj09Mik6ZS5kJiYoZS5kLkhjKHQpfHxlLmQuSGMocngoaWMoKEVsKCksaW8pLHQpKSl8fGUuZC5IYyhnNigoRWwoKSxpbyksZS5iLHQpKSk/ITA6ZS5mJiZxOWUoKEVsKCksZS5mKSxITyhpYyhpbyx0KSkpPyhuPWt3KGljKGlvLHQpKSxlLmU/bj09NDpuPT0yKTohMX1mdW5jdGlvbiBKU24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHo7Zm9yKEI9LTEsej0wLEU9ZSxDPTAsTD1FLmxlbmd0aDtDPEw7KytDKXtmb3Iodz1FW0NdLG89dyxmPTAsZz1vLmxlbmd0aDtmPGc7KytmKWZvcihhPW9bZl0sdD1uZXcgU2N0KEI9PS0xP2VbMF06ZVtCXSxsKFEoZW8oYSksKE50KCkseWcpKSwyODQpLGlndChhKSxSdChCdChRKGVvKGEpLFExZSkpKSksbj0wO248YS5qLmMubGVuZ3RoO24rKylmb3Iocj1uKzE7cjxhLmouYy5sZW5ndGg7cisrKUFzdCh0LGwoanQoYS5qLG4pLDEyKSxsKGp0KGEuaixyKSwxMikpPjAmJisrejsrK0J9cmV0dXJuIHp9ZnVuY3Rpb24gWlNuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEw7cmV0dXJuIGY9bChhdChuLChwaSgpLG45KSksOCksdz1mLmEsQz1mLmIrZSxhPWIuTWF0aC5hdGFuMihDLHcpLGE8MCYmKGErPWl2KSxhKz10LGE+aXYmJihhLT1pdiksZz1sKGF0KHIsbjkpLDgpLEU9Zy5hLEw9Zy5iK2Usbz1iLk1hdGguYXRhbjIoTCxFKSxvPDAmJihvKz1pdiksbys9dCxvPml2JiYoby09aXYpLEExKCksZjAoMWUtMTApLGIuTWF0aC5hYnMoYS1vKTw9MWUtMTB8fGE9PW98fGlzTmFOKGEpJiZpc05hTihvKT8wOmE8bz8tMTphPm8/MTp1dyhpc05hTihhKSxpc05hTihvKSl9ZnVuY3Rpb24gbmxlKGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihnPW5ldyBQcixyPW5ldyBHKGUuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyl0PWwocmUociksNjApLGtpKGcsdCxuZXcgYnQpO2ZvcihhPW5ldyBHKGUuYS5iKTthLmE8YS5jLmMubGVuZ3RoOylmb3IodD1sKHJlKGEpLDYwKSx0Lmk9aWEsZj10LmMuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksNjApLGwoaGMoem8oZy5mLG8pKSwxNSkuRmModCk7Zm9yKG49bmV3IEcoZS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSw2MCksdC5jLiRiKCksdC5jPWwoaGMoem8oZy5mLHQpKSwxNSk7d2J0KGUpfWZ1bmN0aW9uIHJsZShlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IoZz1uZXcgUHIscj1uZXcgRyhlLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspdD1sKHJlKHIpLDg2KSxraShnLHQsbmV3IGJ0KTtmb3IoYT1uZXcgRyhlLmEuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHQ9bChyZShhKSw4NiksdC5vPWlhLGY9dC5mLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDg2KSxsKGhjKHpvKGcuZixvKSksMTUpLkZjKHQpO2ZvcihuPW5ldyBHKGUuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksODYpLHQuZi4kYigpLHQuZj1sKGhjKHpvKGcuZix0KSksMTUpO2FidChlKX1mdW5jdGlvbiBlX24oZSx0LG4scil7dmFyIGEsbztmb3IoaThuKGUsdCxuLHIpLGJ3ZSh0LGUuai10LmorbiksQXoodCxlLmstdC5rK3IpLG89bmV3IEcodC5mKTtvLmE8by5jLmMubGVuZ3RoOylzd2l0Y2goYT1sKHJlKG8pLDMzNCksYS5hLmcpe2Nhc2UgMDp5RShlLHQuZythLmIuYSwwLHQuZythLmMuYSx0LmktMSk7YnJlYWs7Y2FzZSAxOnlFKGUsdC5nK3Qubyx0LmkrYS5iLmEsZS5vLTEsdC5pK2EuYy5hKTticmVhaztjYXNlIDI6eUUoZSx0LmcrYS5iLmEsdC5pK3QucCx0LmcrYS5jLmEsZS5wLTEpO2JyZWFrO2RlZmF1bHQ6eUUoZSwwLHQuaSthLmIuYSx0LmctMSx0LmkrYS5jLmEpfX1mdW5jdGlvbiB0X24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihvPW5ldyBidCx0LmIuYy5sZW5ndGg9MCxuPWwoeWMoSzVlKG5ldyBibihudWxsLG5ldyBrbihuZXcgYnIoZS5hLmIpLDEpKSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLGE9bi5LYygpO2EuT2IoKTspaWYocj1sKGEuUGIoKSwxNyksZj1zNmUoZS5hLHIpLGYuYiE9MClmb3IoZz1uZXcgeXUodCksJG4oby5jLGcpLGcucD1yLmEsRT1ScihmLDApO0UuYiE9RS5kLmM7KXc9bChCcihFKSwxMCksVmEodyxnKTtyYSh0LmIsbyl9ZnVuY3Rpb24gRlUoZSx0LG4scixhKXt2YXIgbyxmLGc7dHJ5e2lmKHQ+PWUubyl0aHJvdyB1ZShuZXcgQndlKTtnPXQ+PjUsZj10JjMxLG89bDAoMSxZcihsMChmLDEpKSksYT9lLm5bbl1bZ109UTAoZS5uW25dW2ddLG8pOmUubltuXVtnXT12YShlLm5bbl1bZ10sTzRlKG8pKSxvPWwwKG8sMSkscj9lLm5bbl1bZ109UTAoZS5uW25dW2ddLG8pOmUubltuXVtnXT12YShlLm5bbl1bZ10sTzRlKG8pKX1jYXRjaCh3KXt0aHJvdyB3PWJzKHcpLERlKHcsMzMzKT91ZShuZXcgdGMoRWhlK2UubysiKiIrZS5wK1RoZSt0K0NvK24rQ2hlKSk6dWUodyl9fWZ1bmN0aW9uIG5fbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEI9bmV3IEtwKG5ldyBWWWUoZSkpLGc9aGUobGUod2csMSksbTIsMTAsMCxbdCxuXSksdz0wLEU9Zy5sZW5ndGg7dzxFOysrdylmb3IoZj1nW3ddLEw9VEEoZixyKS5LYygpO0wuT2IoKTspZm9yKEM9bChMLlBiKCksMTIpLG89bmV3IE4xKEMuYik7TGMoby5hKXx8TGMoby5iKTspYT1sKExjKG8uYSk/cmUoby5hKTpyZShvLmIpLDE4KSxEbyhhKXx8KEIuYS56YyhDLChIbigpLFBiKSk9PW51bGwsdWF0KGEpJiZqTyhCLEM9PWEuYz9hLmQ6YS5jKSk7cmV0dXJuIFhyKEIpLG5ldyBPbChCKX1mdW5jdGlvbiBha2UoZSx0LG4scil7dmFyIGEsbyxmO3QmJihvPXplKEdlKFEodCwoUWkoKSxDMikpKSkrcixmPW4remUoR2UoUSh0LEZXKSkpLzIscnQodCxQQixwdChZcihaYyhiLk1hdGgucm91bmQobykpKSkpLHJ0KHQsQkIscHQoWXIoWmMoYi5NYXRoLnJvdW5kKGYpKSkpKSx0LmQuYj09MHx8YWtlKGUsbChQcSgoYT1ScihuZXcgSGcodCkuYS5kLDApLG5ldyBDNShhKSkpLDQwKSxuK3plKEdlKFEodCxGVykpKStlLmIscit6ZShHZShRKHQsSlQpKSkpLFEodCxqZGUpIT1udWxsJiZha2UoZSxsKFEodCxqZGUpLDQwKSxuLHIpKX1mdW5jdGlvbiByX24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2Zvcih3PWVvKHQuYSksYT16ZShHZShRKHcsKE50KCksdnYpKSkpKjIsQz16ZShHZShRKHcsVjYpKSksRT1iLk1hdGgubWF4KGEsQyksbz1XZShOYSxabywyOCx0LmYtdC5jKzEsMTUsMSkscj0tRSxuPTAsZz10LmIuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTApLHIrPWUuYVtmLmMucF0rRSxvW24rK109cjtmb3Iocis9ZS5hW3QuYS5jLnBdK0Usb1tuKytdPXIsQj1uZXcgRyh0LmUpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMCkscis9ZS5hW0wuYy5wXStFLG9bbisrXT1yO3JldHVybiBvfWZ1bmN0aW9uIGlfbihlLHQpe3ZhciBuLHIsYSxvO2lmKG89bChhdChlLChwaSgpLHM3KSksNjQpLmctbChhdCh0LHM3KSw2NCkuZyxvIT0wKXJldHVybiBvO2lmKG49bChhdChlLGpnZSksMTcpLHI9bChhdCh0LGpnZSksMTcpLG4mJnImJihhPW4uYS1yLmEsYSE9MCkpcmV0dXJuIGE7c3dpdGNoKGwoYXQoZSxzNyksNjQpLmcpe2Nhc2UgMTpyZXR1cm4gWWkoZS5pLHQuaSk7Y2FzZSAyOnJldHVybiBZaShlLmosdC5qKTtjYXNlIDM6cmV0dXJuIFlpKHQuaSxlLmkpO2Nhc2UgNDpyZXR1cm4gWWkodC5qLGUuaik7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgbmMoekVlKSl9fWZ1bmN0aW9uIG9rZShlKXt2YXIgdCxuLHI7cmV0dXJuIGUuRGImNjQ/UHVlKGUpOih0PW5ldyBUaChjU2UpLG49ZS5rLG4/aGkoaGkoKHQuYSs9JyAiJyx0KSxuKSwnIicpOighZS5uJiYoZS5uPW5ldyBudChlYyxlLDEsNykpLGUubi5pPjAmJihyPSghZS5uJiYoZS5uPW5ldyBudChlYyxlLDEsNykpLGwoT2UoZS5uLDApLDEzNSkpLmEsIXJ8fGhpKGhpKCh0LmErPScgIicsdCksciksJyInKSkpLGhpKHJ3KGhpKHJ3KGhpKHJ3KGhpKHJ3KCh0LmErPSIgKCIsdCksZS5pKSwiLCIpLGUuaiksIiB8ICIpLGUuZyksIiwiKSxlLmYpLCIpIiksdC5hKX1mdW5jdGlvbiBKYnQoZSl7dmFyIHQsbixyO3JldHVybiBlLkRiJjY0P1B1ZShlKToodD1uZXcgVGgodVNlKSxuPWUuayxuP2hpKGhpKCh0LmErPScgIicsdCksbiksJyInKTooIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm4uaT4wJiYocj0oIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxsKE9lKGUubiwwKSwxMzUpKS5hLCFyfHxoaShoaSgodC5hKz0nICInLHQpLHIpLCciJykpKSxoaShydyhoaShydyhoaShydyhoaShydygodC5hKz0iICgiLHQpLGUuaSksIiwiKSxlLmopLCIgfCAiKSxlLmcpLCIsIiksZS5mKSwiKSIpLHQuYSl9ZnVuY3Rpb24gc19uKGUsdCl7dmFyIG4scixhLG8sZjtmb3IodD09KHlBKCksQ2RlKSYmSk4obCgkaShlLmEsKFJ5KCksYkIpKSwxNSkpLGE9bCgkaShlLmEsKFJ5KCksYkIpKSwxNSkuS2MoKTthLk9iKCk7KXN3aXRjaChyPWwoYS5QYigpLDEwNSksbj1sKGp0KHIuaiwwKSwxMTMpLmQuaixvPW5ldyBPbChyLmopLFZzKG8sbmV3IFJqKSx0Lmcpe2Nhc2UgMjpMdWUoZSxvLG4sKE93KCksUmIpLDEpO2JyZWFrO2Nhc2UgMTpjYXNlIDA6Zj1VVG4obyksTHVlKGUsbmV3IFpwKG8sMCxmKSxuLChPdygpLFJiKSwwKSxMdWUoZSxuZXcgWnAobyxmLG8uYy5sZW5ndGgpLG4sUmIsMSl9fWZ1bmN0aW9uIGlsZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKHQ9PW51bGx8fHQubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKGE9bCh4dShlLmEsdCksMTQzKSwhYSl7Zm9yKHI9KGc9bmV3IGdpKGUuYikuYS52YygpLktjKCksbmV3IGZzKGcpKTtyLmEuT2IoKTspaWYobj0obz1sKHIuYS5QYigpLDQ0KSxsKG8ubWQoKSwxNDMpKSxmPW4uYyx3PXQubGVuZ3RoLHZuKGYuc3Vic3RyKGYubGVuZ3RoLXcsdyksdCkmJih0Lmxlbmd0aD09Zi5sZW5ndGh8fGNvKGYsZi5sZW5ndGgtdC5sZW5ndGgtMSk9PTQ2KSl7aWYoYSlyZXR1cm4gbnVsbDthPW59YSYmcmMoZS5hLHQsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gYV9uKGUsdCl7dmFyIG4scixhLG87cmV0dXJuIG49bmV3IGFzLHI9bCh5YyhmYyhuZXcgYm4obnVsbCxuZXcga24oZS5mLDE2KSksbiksU3kobmV3IHl0LG5ldyBqaSxuZXcgcW4sbmV3IFVuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxpNCksRWNdKSkpLDIxKSxhPXIuZ2MoKSxyPWwoeWMoZmMobmV3IGJuKG51bGwsbmV3IGtuKHQuZiwxNikpLG4pLFN5KG5ldyB5dCxuZXcgamksbmV3IHFuLG5ldyBVbixoZShsZShvYywxKSxpdCwxMDgsMCxbaTQsRWNdKSkpLDIxKSxvPXIuZ2MoKSxhPG8/LTE6YT09bz8wOjF9ZnVuY3Rpb24gWmJ0KGUpe3ZhciB0LG4scjtucyhlLChOdCgpLGQzKSkmJihyPWwoUShlLGQzKSwyMSksIXIuZGMoKSYmKG49KHQ9bChLMChLbyksOSksbmV3IFpoKHQsbChjMCh0LHQubGVuZ3RoKSw5KSwwKSksci5IYygocXkoKSxqaCkpP2QwKG4samgpOmQwKG4sQzApLHIuSGMoemYpfHxkMChuLHpmKSxyLkhjKEUwKT9kMChuLFMwKTpyLkhjKG1wKT9kMChuLEVnKTpyLkhjKFQwKSYmZDAobixxZiksci5IYyhTMCk/ZDAobixFMCk6ci5IYyhFZyk/ZDAobixtcCk6ci5IYyhxZikmJmQwKG4sVDApLHJ0KGUsZDMsbikpKX1mdW5jdGlvbiBvX24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKGE9bChRKGUsKGZ0KCksdTMpKSwxMCkscj1lLmosbj0oU24oMCxyLmMubGVuZ3RoKSxsKHIuY1swXSwxMikpLGY9bmV3IEcoYS5qKTtmLmE8Zi5jLmMubGVuZ3RoOylpZihvPWwocmUoZiksMTIpLHFlKG8pPT09cWUoUShuLHppKSkpe28uaj09KEN0KCksUW4pJiZlLnA+YS5wPyhsYShvLERyKSxvLmQmJihnPW8uby5iLHQ9by5hLmIsby5hLmI9Zy10KSk6by5qPT1EciYmYS5wPmUucCYmKGxhKG8sUW4pLG8uZCYmKGc9by5vLmIsdD1vLmEuYixvLmEuYj0tKGctdCkpKTticmVha31yZXR1cm4gYX1mdW5jdGlvbiB1UChlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMO2lmKCEoRGUodCwyMDcpfHxEZSh0LDM2Nil8fERlKHQsMTkzKSkpdGhyb3cgdWUobmV3IFluKCJNZXRob2Qgb25seSB3b3JrcyBmb3IgRWxrTm9kZS0sIEVsa0xhYmVsIGFuZCBFbGtQb3J0LW9iamVjdHMuIikpO3JldHVybiBmPWUuYS8yLHc9dC5pK3ItZixDPXQuaithLWYsRT13K3QuZytlLmEsTD1DK3QuZitlLmEsbz1uZXcgYmwsdWkobyxuZXcgbHQodyxDKSksdWkobyxuZXcgbHQodyxMKSksdWkobyxuZXcgbHQoRSxMKSksdWkobyxuZXcgbHQoRSxDKSksZz1uZXcgR3VlKG8pLHBjKGcsdCksbiYma2koZS5iLHQsZyksZ31mdW5jdGlvbiBLRShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKG89bmV3IGx0KHQsbiksQz1uZXcgRyhlLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihFPWwocmUoQyksMTApLE9pKEUubixvKSxCPW5ldyBHKEUuaik7Qi5hPEIuYy5jLmxlbmd0aDspZm9yKEw9bChyZShCKSwxMiksYT1uZXcgRyhMLmcpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMTgpLER5KHIuYSxvKSxmPWwoUShyLChOdCgpLGNjKSksNzUpLGYmJkR5KGYsbyksdz1uZXcgRyhyLmIpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSw3MiksT2koZy5uLG8pfWZ1bmN0aW9uIGNfbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKG89bmV3IGx0KHQsbiksQz1uZXcgRyhlLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihFPWwocmUoQyksMTApLE9pKEUubixvKSxCPW5ldyBHKEUuaik7Qi5hPEIuYy5jLmxlbmd0aDspZm9yKEw9bChyZShCKSwxMiksYT1uZXcgRyhMLmcpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMTgpLER5KHIuYSxvKSxmPWwoUShyLChOdCgpLGNjKSksNzUpLGYmJkR5KGYsbyksdz1uZXcgRyhyLmIpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSw3MiksT2koZy5uLG8pfWZ1bmN0aW9uIGVtdChlKXtpZigoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmk9PTApdGhyb3cgdWUobmV3IEk4KCJFZGdlcyBtdXN0IGhhdmUgYSBzb3VyY2UuIikpO2lmKCghZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYykuaT09MCl0aHJvdyB1ZShuZXcgSTgoIkVkZ2VzIG11c3QgaGF2ZSBhIHRhcmdldC4iKSk7aWYoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSwhKGUuYi5pPD0xJiYoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMuaTw9MSkpKXRocm93IHVlKG5ldyBJOCgiSHlwZXJlZGdlcyBhcmUgbm90IHN1cHBvcnRlZC4iKSl9ZnVuY3Rpb24gY2tlKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKEw9MCxvPW5ldyB6NSxnYihvLHQpO28uYiE9by5jOylmb3Iodz1sKFg4KG8pLDIxOSksRT0wLEM9bChRKHQuaiwoTnQoKSx5ZykpLDI4NCksZj16ZShHZShRKHQuaixoVykpKSxnPXplKEdlKFEodC5qLFRNZSkpKSxDIT0oRWQoKSxFMikmJihFKz1mKmhUbih3LmUsQyksRSs9ZypKU24ody5lKSksTCs9V2R0KHcuZCx3LmUpK0UsYT1uZXcgRyh3LmIpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwzNiksbj1sKGp0KGUuYixyLnApLDIxOSksbi5zfHwoTCs9eFUoZSxuKSk7cmV0dXJuIEx9ZnVuY3Rpb24gQ2QoKXtDZD1VO3ZhciBlO2Zvcih1Sz1uZXcgUWcoMSwxKSxNMGU9bmV3IFFnKDEsMTApLEJMPW5ldyBRZygwLDApLHc2dD1uZXcgUWcoLTEsMSkseTZ0PWhlKGxlKEE2LDEpLGR0LDkyLDAsW0JMLHVLLG5ldyBRZygxLDIpLG5ldyBRZygxLDMpLG5ldyBRZygxLDQpLG5ldyBRZygxLDUpLG5ldyBRZygxLDYpLG5ldyBRZygxLDcpLG5ldyBRZygxLDgpLG5ldyBRZygxLDkpLE0wZV0pLGxLPVdlKEE2LGR0LDkyLDMyLDAsMSksZT0wO2U8bEsubGVuZ3RoO2UrKylsS1tlXT1BcShsMCgxLGUpLDApP2tiKGwwKDEsZSkpOkpfKGtiKHIyKGwwKDEsZSkpKSl9ZnVuY3Rpb24gdG10KGUsdCxuLHIsYSxvLGYpe2lmKGUuYz1yLkxmKCkuYSxlLmQ9ci5MZigpLmIsYSYmKGUuYys9YS5MZigpLmEsZS5kKz1hLkxmKCkuYiksZS5iPXQuTWYoKS5hLGUuYT10Lk1mKCkuYiwhYSluP2UuYy09Zit0Lk1mKCkuYTplLmMrPXIuTWYoKS5hK2Y7ZWxzZSBzd2l0Y2goYS5hZygpLmcpe2Nhc2UgMDpjYXNlIDI6ZS5jKz1hLk1mKCkuYStmK28uYStmO2JyZWFrO2Nhc2UgNDplLmMtPWYrby5hK2YrdC5NZigpLmE7YnJlYWs7Y2FzZSAxOmUuYys9YS5NZigpLmErZixlLmQtPWYrby5iK2YrdC5NZigpLmI7YnJlYWs7Y2FzZSAzOmUuYys9YS5NZigpLmErZixlLmQrPWEuTWYoKS5iK2Yrby5iK2Z9fWZ1bmN0aW9uIG5tdChlLHQpe3ZhciBuLHI7Zm9yKHRoaXMuYj1uZXcgYnQsdGhpcy5lPW5ldyBidCx0aGlzLmE9ZSx0aGlzLmQ9dCxDNm4odGhpcyksRDVuKHRoaXMpLHRoaXMuYi5kYygpP3RoaXMuYz1lLmMucDp0aGlzLmM9bCh0aGlzLmIuWGIoMCksMTApLmMucCx0aGlzLmUuYy5sZW5ndGg9PTA/dGhpcy5mPWUuYy5wOnRoaXMuZj1sKGp0KHRoaXMuZSx0aGlzLmUuYy5sZW5ndGgtMSksMTApLmMucCxyPWwoUShlLChmdCgpLFdMKSksMTUpLktjKCk7ci5PYigpOylpZihuPWwoci5QYigpLDcyKSxucyhuLChOdCgpLGdXKSkpe3RoaXMuZD1sKFEobixnVyksMjMyKTticmVha319ZnVuY3Rpb24gV0UoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7Zm9yKHI9bChjcihlLmEsdCksNDkpLG89bChjcihlLmEsbiksNDkpLGE9bChjcihlLmUsdCksNDkpLGY9bChjcihlLmUsbiksNDkpLHIuYS56YyhuLHIpLGYuYS56Yyh0LGYpLEM9by5hLmVjKCkuS2MoKTtDLk9iKCk7KUU9bChDLlBiKCksMTApLHIuYS56YyhFLHIpLG5hKGwoY3IoZS5lLEUpLDQ5KSx0KSxLYShsKGNyKGUuZSxFKSw0OSksYSk7Zm9yKHc9YS5hLmVjKCkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTApLGYuYS56YyhnLGYpLG5hKGwoY3IoZS5hLGcpLDQ5KSxuKSxLYShsKGNyKGUuYSxnKSw0OSksbyl9ZnVuY3Rpb24gbFAoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7Zm9yKHI9bChjcihlLmEsdCksNDkpLG89bChjcihlLmEsbiksNDkpLGE9bChjcihlLmIsdCksNDkpLGY9bChjcihlLmIsbiksNDkpLHIuYS56YyhuLHIpLGYuYS56Yyh0LGYpLEM9by5hLmVjKCkuS2MoKTtDLk9iKCk7KUU9bChDLlBiKCksMTApLHIuYS56YyhFLHIpLG5hKGwoY3IoZS5iLEUpLDQ5KSx0KSxLYShsKGNyKGUuYixFKSw0OSksYSk7Zm9yKHc9YS5hLmVjKCkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTApLGYuYS56YyhnLGYpLG5hKGwoY3IoZS5hLGcpLDQ5KSxuKSxLYShsKGNyKGUuYSxnKSw0OSksbyl9ZnVuY3Rpb24gZGYoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7Zm9yKHI9bChjcihlLmEsdCksNDkpLG89bChjcihlLmEsbiksNDkpLGE9bChjcihlLmQsdCksNDkpLGY9bChjcihlLmQsbiksNDkpLHIuYS56YyhuLHIpLGYuYS56Yyh0LGYpLEM9by5hLmVjKCkuS2MoKTtDLk9iKCk7KUU9bChDLlBiKCksMTIpLHIuYS56YyhFLHIpLG5hKGwoY3IoZS5kLEUpLDQ5KSx0KSxLYShsKGNyKGUuZCxFKSw0OSksYSk7Zm9yKHc9YS5hLmVjKCkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLGYuYS56YyhnLGYpLG5hKGwoY3IoZS5hLGcpLDQ5KSxuKSxLYShsKGNyKGUuYSxnKSw0OSksbyl9ZnVuY3Rpb24gdV9uKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6LFY7aWYobz1uLG48cilmb3IoQj0oej1uZXcgeE4oZS5wKSxWPW5ldyB4TihlLnApLEthKHouZSxlLmUpLHoucT1lLnEsei5yPVYsd0goeiksS2EoVi5qLGUuaiksVi5yPXosd0goViksbmV3IGNhKHosVikpLEw9bChCLmEsMTE4KSxDPWwoQi5iLDExOCksYT0oU24obyx0LmMubGVuZ3RoKSxsKHQuY1tvXSwzMzkpKSxmPURidChlLEwsQyxhKSxFPW4rMTtFPD1yO0UrKylnPShTbihFLHQuYy5sZW5ndGgpLGwodC5jW0VdLDMzOSkpLHc9RGJ0KGUsTCxDLGcpLFQ2bihnLHcsYSxmKSYmKGE9ZyxmPXcsbz1FKTtyZXR1cm4gb31mdW5jdGlvbiBsX24oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoZj1sKE9lKHQsMCksMjcpLFV1KGYsMCksR3UoZiwwKSxCPW5ldyBidCwkbihCLmMsZiksZz1mLG89bmV3IHo0ZShlLmEsZi5nLGYuZiwoVkEoKSx6QikpLHo9MTt6PHQuaTt6KyspVj1sKE9lKHQseiksMjcpLHc9cGxlKGUsUTYsVixnLG8sQixuKSxFPXBsZShlLGU5LFYsZyxvLEIsbiksQz1wbGUoZSx4TSxWLGcsbyxCLG4pLEw9cGxlKGUseU0sVixnLG8sQixuKSxhPWpMbihlLHcsRSxDLEwsVixnLHIpLFV1KFYsYS5kKSxHdShWLGEuZSksUmUoYSx6Qiksbz1hLGc9ViwkbihCLmMsVik7cmV0dXJuIG99ZnVuY3Rpb24gaF9uKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtpZihDPW51bGwsQj10LEw9VWN0KGUsUGN0KG4pLEIpLGZFKEwsWWcoQixQZCkpLGY9QXcoQixoU2UpLHI9bmV3IG10dChlLEwpLE5rbihyLmEsci5iLGYpLGc9QXcoQixZZmUpLGE9bmV3IHZ0dChlLEwpLFBrbihhLmEsYS5iLGcpLCghTC5iJiYoTC5iPW5ldyBMbihfcixMLDQsNykpLEwuYikuaT09MHx8KCFMLmMmJihMLmM9bmV3IExuKF9yLEwsNSw4KSksTC5jKS5pPT0wKXRocm93IG89WWcoQixQZCksdz13NHQrbyxFPXcra1QsdWUobmV3IGRkKEUpKTtyZXR1cm4gbVUoQixMKSxwSW4oZSxCLEwpLEM9d2NlKGUsQixMKSxDfWZ1bmN0aW9uIGZfbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihhPVdlKFZyLGRpLDI4LGUuZS5hLmMubGVuZ3RoLDE1LDEpLGY9bmV3IEcoZS5lLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMjUpLGFbby5kXSs9by5iLmEuYy5sZW5ndGg7Zm9yKGc9UE8odCk7Zy5iIT0wOylmb3Iobz1sKGcuYj09MD9udWxsOihtcihnLmIhPTApLGFmKGcsZy5hLmEpKSwxMjUpLHI9Y3gobmV3IEcoby5nLmEpKTtyLk9iKCk7KW49bChyLlBiKCksMjE4KSx3PW4uZSx3LmU9Yi5NYXRoLm1heCh3LmUsby5lK24uYSksLS1hW3cuZF0sYVt3LmRdPT0wJiZDcyhnLHcsZy5jLmIsZy5jKX1mdW5jdGlvbiBybXQoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtmb3Iobj1sbyxhPUlpLGc9bmV3IEcoZS5lLmEpO2cuYTxnLmMuYy5sZW5ndGg7KW89bChyZShnKSwxMjUpLGE9Yi5NYXRoLm1pbihhLG8uZSksbj1iLk1hdGgubWF4KG4sby5lKTtmb3IodD1XZShWcixkaSwyOCxuLWErMSwxNSwxKSxmPW5ldyBHKGUuZS5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTI1KSxvLmUtPWEsKyt0W28uZV07aWYocj0wLGUuayE9bnVsbClmb3IoRT1lLmssQz0wLEw9RS5sZW5ndGg7QzxMJiYodz1FW0NdLHRbcisrXSs9dyx0Lmxlbmd0aCE9cik7KytDKTtyZXR1cm4gdH1mdW5jdGlvbiBkX24oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodC5VZygiRWRnZSByb3V0aW5nIiwxKSxhPWwoUShlLChIYygpLCRkZSkpLDM5MiksYT09KHhBKCksSWRlKSlJdm4oZSk7ZWxzZSBpZihhPT1PQilmb3IobChmaChrRShGaShuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IE90ZSkpKSw0MCksbz16ZShHZShRKGUsbUllKSkpLGY9emUoR2UoUShlLGZJZSkpKSxnPWwoUShlLHkzKSw4OCksdkluKGUsZyxvKSxZSW4oZSxnLG8sZiksWkluKGUsZyxvLGYpLHI9UnIoZS5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksbi5hLmI8MiYmYjllKG4pO3QuVmcoKX1mdW5jdGlvbiBpbXQoZSl7c3dpdGNoKGUuZCl7Y2FzZSA5OmNhc2UgODpyZXR1cm4hMDtjYXNlIDM6Y2FzZSA1OmNhc2UgNDpjYXNlIDY6cmV0dXJuITE7Y2FzZSA3OnJldHVybiBsKFg5ZShlKSwxNykuYT09ZS5vO2Nhc2UgMTpjYXNlIDI6e2lmKGUubz09LTIpcmV0dXJuITE7c3dpdGNoKGUucCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6Y2FzZSA2OmNhc2UgNTpjYXNlIDc6cmV0dXJuIGN3KGUuayxlLmYpO2Nhc2UgMzpjYXNlIDQ6cmV0dXJuIGUuaj09ZS5lO2RlZmF1bHQ6cmV0dXJuIGUubj09bnVsbD9lLmc9PW51bGw6UGkoZS5uLGUuZyl9fWRlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIGdfbihlLHQpe3ZhciBuLHIsYTtzd2l0Y2godC5VZygiQnJlYWtpbmcgUG9pbnQgSW5zZXJ0aW9uIiwxKSxyPW5ldyBNOWUoZSksbChRKGUsKE50KCksaGRlKSksMzUxKS5nKXtjYXNlIDI6YT1uZXcgV2o7YnJlYWs7Y2FzZSAwOmE9bmV3IEVTO2JyZWFrO2RlZmF1bHQ6YT1uZXcgWWp9aWYobj1hLm9nKGUsciksUnQoQnQoUShlLGNEZSkpKSYmKG49ck1uKGUsbikpLCFhLnBnKCkmJm5zKGUsRVcpKXN3aXRjaChsKFEoZSxFVyksMzUyKS5nKXtjYXNlIDI6bj1GcHQocixuKTticmVhaztjYXNlIDE6bj1BZ3QocixuKX1pZihuLmRjKCkpe3QuVmcoKTtyZXR1cm59RUluKGUsbiksdC5WZygpfWZ1bmN0aW9uIHNtdChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihvPW5ldyBCdSh0LmMubGVuZ3RoKSxFPW5ldyBHKHQpO0UuYTxFLmMuYy5sZW5ndGg7KWY9bChyZShFKSwxMCksdnQobyxlLmJbZi5jLnBdW2YucF0pO2ZvcihKTG4oZSxvLG4pLEw9bnVsbDtMPUhNbihvKTspSUFuKGUsbChMLmEsMjM5KSxsKEwuYiwyMzkpLG8pO2Zvcih0LmMubGVuZ3RoPTAsYT1uZXcgRyhvKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1sKHJlKGEpLDIzOSksZz1yLmQsdz0wLEM9Zy5sZW5ndGg7dzxDOysrdylmPWdbd10sJG4odC5jLGYpLGUuYVtmLmMucF1bZi5wXS5hPUwxKHIuZyxyLmRbMF0pLmF9ZnVuY3Rpb24gYW10KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSx5TCksIkVMSyBGaXhlZCIpLCJLZWVwcyB0aGUgY3VycmVudCBsYXlvdXQgYXMgaXQgaXMsIHdpdGhvdXQgYW55IGF1dG9tYXRpYyBtb2RpZmljYXRpb24uIE9wdGlvbmFsIGNvb3JkaW5hdGVzIGNhbiBiZSBnaXZlbiBmb3Igbm9kZXMgYW5kIGVkZ2UgYmVuZCBwb2ludHMuIiksbmV3IHYkKSkpLGd0KGUseUwsWHcsV05lKSxndChlLHlMLF9HLEl0KE1NKSksZ3QoZSx5TCx0U2UsSXQoVk5lKSksZ3QoZSx5TCx4NixJdChVTmUpKSxndChlLHlMLFB4LEl0KEtOZSkpLGd0KGUseUwsaFQsSXQoR05lKSl9ZnVuY3Rpb24gUlUoZSx0LG4pe3ZhciByLGEsbyxmLGc7aWYocj1ZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSxnPVlyKG1vKGZnLGlnKFlyKG1vKG49PW51bGw/MDplcyhuKSxkZykpLDE1KSkpLG89Z0EoZSx0LHIpLG8mJmc9PW8uZiYmeWQobixvLmkpKXJldHVybiBuO2lmKGY9cEEoZSxuLGcpLGYpdGhyb3cgdWUobmV3IFluKCJ2YWx1ZSBhbHJlYWR5IHByZXNlbnQ6ICIrbikpO3JldHVybiBhPW5ldyB4SCh0LHIsbixnKSxvPyh1NihlLG8pLGVQKGUsYSxvKSxvLmU9bnVsbCxvLmM9bnVsbCxvLmkpOihlUChlLGEsbnVsbCksZmd0KGUpLG51bGwpfWZ1bmN0aW9uIHBfbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO0M9bi5hLmMsZj1uLmEuYytuLmEuYixvPWwoY3Iobi5jLHQpLDQ2OCksej1vLmYsVj1vLmEsby5iP3c9bmV3IGx0KGYseik6dz1uZXcgbHQoQyx6KSxvLmM/TD1uZXcgbHQoQyxWKTpMPW5ldyBsdChmLFYpLGE9QyxuLnB8fChhKz1lLmMpLGErPW4uRituLnYqZS5iLEU9bmV3IGx0KGEseiksQj1uZXcgbHQoYSxWKSxmQSh0LmEsaGUobGUoRWEsMSksZHQsOCwwLFt3LEVdKSksZz1uLmQuYS5nYygpPjEsZyYmKHI9bmV3IGx0KGEsbi5iKSx1aSh0LmEscikpLGZBKHQuYSxoZShsZShFYSwxKSxkdCw4LDAsW0IsTF0pKX1mdW5jdGlvbiBOZigpe05mPVUsQVc9bmV3IGx5KElkLDApLEFCPW5ldyBseSgiTklLT0xPViIsMSksTEI9bmV3IGx5KCJOSUtPTE9WX1BJWEVMIiwyKSx4RGU9bmV3IGx5KCJOSUtPTE9WX0lNUFJPVkVEIiwzKSxrRGU9bmV3IGx5KCJOSUtPTE9WX0lNUFJPVkVEX1BJWEVMIiw0KSx5RGU9bmV3IGx5KCJEVU1NWU5PREVfUEVSQ0VOVEFHRSIsNSksRURlPW5ldyBseSgiTk9ERUNPVU5UX1BFUkNFTlRBR0UiLDYpLExXPW5ldyBseSgiTk9fQk9VTkRBUlkiLDcpLHYzPW5ldyBseSgiTU9ERUxfT1JERVJfTEVGVF9UT19SSUdIVCIsOCkseDQ9bmV3IGx5KCJNT0RFTF9PUkRFUl9SSUdIVF9UT19MRUZUIiw5KX1mdW5jdGlvbiBiX24oZSl7dmFyIHQsbixyLGEsbztmb3Iocj1lLmxlbmd0aCx0PW5ldyBoXyxvPTA7bzxyOylpZihuPWNvKGUsbysrKSwhKG49PTl8fG49PTEwfHxuPT0xMnx8bj09MTN8fG49PTMyKSl7aWYobj09MzUpe2Zvcig7bzxyJiYobj1jbyhlLG8rKyksIShuPT0xM3x8bj09MTApKTspO2NvbnRpbnVlfW49PTkyJiZvPHI/KGE9KFhuKG8sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChvKSkpPT0zNXx8YT09OXx8YT09MTB8fGE9PTEyfHxhPT0xM3x8YT09MzI/KFVrKHQsYSZacyksKytvKToodC5hKz0iXFwiLFVrKHQsYSZacyksKytvKTpVayh0LG4mWnMpfXJldHVybiB0LmF9ZnVuY3Rpb24gdWtlKCl7dWtlPVUsR1R0PW5ldyBwbihUQ2UsKEhuKCksITEpKSxYVHQ9bmV3IHBuKENDZSxwdCgwKSksUVR0PW5ldyBwbihTQ2UsMCksSlR0PW5ldyBwbihORywhMSksTEllPShMTigpLHpXKSxXVHQ9bmV3IHBuKFRmZSxMSWUpLHB0KDApLEtUdD1uZXcgcG4oQ2ZlLHB0KDEpKSxESWU9KEFWKCksbmdlKSxuQ3Q9bmV3IHBuKF9DZSxESWUpLElJZT0oZVYoKSxRZGUpLHJDdD1uZXcgcG4oQUNlLElJZSksTUllPSh1VSgpLHRnZSksWVR0PW5ldyBwbihMQ2UsTUllKSx0Q3Q9bmV3IHBuKFNmZSwwKSxaVHQ9bmV3IHBuKF9mZSwhMSksZUN0PW5ldyBwbihNQ2UsITEpfWZ1bmN0aW9uIG1fbihlLHQpe3ZhciBuLHIsYTtmb3Iocj1uZXcgRyh0KTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPWwocmUociksMjcpLHhuKGUuYSxuLG4pLHhuKGUuYixuLG4pLGE9SHkobiksYS5jLmxlbmd0aCE9MClmb3IoZS5kJiZlLmQuR2coYSkseG4oZS5hLG4sKFNuKDAsYS5jLmxlbmd0aCksbChhLmNbMF0sMjcpKSkseG4oZS5iLG4sbChqdChhLGEuYy5sZW5ndGgtMSksMjcpKTtiY2UoYSkuYy5sZW5ndGghPTA7KWE9YmNlKGEpLGUuZCYmZS5kLkdnKGEpLHhuKGUuYSxuLChTbigwLGEuYy5sZW5ndGgpLGwoYS5jWzBdLDI3KSkpLHhuKGUuYixuLGwoanQoYSxhLmMubGVuZ3RoLTEpLDI3KSl9ZnVuY3Rpb24gc2xlKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYodClpZihuPD0tMSl7aWYocj1Nbih0LkRoKCksLTEtbiksRGUociwxMDIpKXJldHVybiBsKHIsMTkpO2ZvcihmPWwodC5NaChyKSwxNjApLGc9MCx3PWYuZ2MoKTtnPHc7KytnKWlmKHFlKGYuVWwoZykpPT09cWUoZSkmJihhPWYuVGwoZyksRGUoYSwxMDIpJiYobz1sKGEsMTkpLG8uQmImZXUpKSlyZXR1cm4gbzt0aHJvdyB1ZShuZXcgbmMoIlRoZSBjb250YWlubWVudCBmZWF0dXJlIGNvdWxkIG5vdCBiZSBsb2NhdGVkIikpfWVsc2UgcmV0dXJuIFJvKGwoTW4oZS5EaCgpLG4pLDE5KSk7ZWxzZSByZXR1cm4gbnVsbH1mdW5jdGlvbiB2X24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEM7Zm9yKG49MCxnPW5ldyBHKGUuZCk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEwNSksZi5pJiYoZi5pLmM9bisrKTtmb3IodD1MbShpaCxbZHQscGddLFsxODMsMjhdLDE2LFtuLG5dLDIpLEM9ZS5kLGE9MDthPEMuYy5sZW5ndGg7YSsrKWlmKHc9KFNuKGEsQy5jLmxlbmd0aCksbChDLmNbYV0sMTA1KSksdy5pKWZvcihvPWErMTtvPEMuYy5sZW5ndGg7bysrKUU9KFNuKG8sQy5jLmxlbmd0aCksbChDLmNbb10sMTA1KSksRS5pJiYocj1WeG4odyxFKSx0W3cuaS5jXVtFLmkuY109cix0W0UuaS5jXVt3LmkuY109cik7cmV0dXJuIHR9ZnVuY3Rpb24gbGtlKCl7bGtlPVUsQ0N0PW5ldyBwbihPQ2UsKEhuKCksITEpKSxwdCgtMSksd0N0PW5ldyBwbihOQ2UscHQoLTEpKSxwdCgtMSkseUN0PW5ldyBwbihQQ2UscHQoLTEpKSx4Q3Q9bmV3IHBuKEJDZSwhMSksWkllPShHSCgpLGRnZSksTEN0PW5ldyBwbihGQ2UsWkllKSxNQ3Q9bmV3IHBuKFJDZSwtMSksSkllPShxVigpLHVnZSksQUN0PW5ldyBwbihqQ2UsSkllKSxfQ3Q9bmV3IHBuKCRDZSwhMCksUUllPSh0VigpLGdnZSksVEN0PW5ldyBwbih6Q2UsUUllKSxFQ3Q9bmV3IHBuKHFDZSwhMSkscHQoMSksa0N0PW5ldyBwbihIQ2UscHQoMSkpLFNDdD1uZXcgVWkoVkNlKX1mdW5jdGlvbiBXQSgpe1dBPVUsRGRlPW5ldyBvdygiUk9PVF9QUk9DIiwwKSxHRGU9bmV3IG93KCJGQU5fUFJPQyIsMSksWERlPW5ldyBvdygiTEVWRUxfUFJPQyIsMiksUURlPW5ldyBvdygiTkVJR0hCT1JTX1BST0MiLDMpLFlEZT1uZXcgb3coIkxFVkVMX0hFSUdIVCIsNCksVURlPW5ldyBvdygiRElSRUNUSU9OX1BST0MiLDUpLEpEZT1uZXcgb3coIk5PREVfUE9TSVRJT05fUFJPQyIsNiksSERlPW5ldyBvdygiQ09NUEFDVElPTl9QUk9DIiw3KSxXRGU9bmV3IG93KCJMRVZFTF9DT09SRFMiLDgpLEtEZT1uZXcgb3coIkdSQVBIX0JPVU5EU19QUk9DIiw5KSxWRGU9bmV3IG93KCJERVRSRUVJRllJTkdfUFJPQyIsMTApfWZ1bmN0aW9uIGhrZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihMPWRjKHQpLEU9bnVsbCxhPSExLGc9MCxDPWR1KEwuYSkuaTtnPEM7KytnKWY9bChtUChMLGcsKG89bChPZShkdShMLmEpLGcpLDg5KSx3PW8uYyxEZSh3LDkwKT9sKHcsMjkpOihUbigpLEtmKSkpLDI5KSxuPWhrZShlLGYpLG4uZGMoKXx8KEU/KGF8fChhPSEwLEU9bmV3IHVIKEUpKSxFLkdjKG4pKTpFPW4pO3JldHVybiByPUFrbihlLHQpLHIuZGMoKT9FfHwoQ24oKSxDbigpLF9vKTpFPyhhfHwoRT1uZXcgdUgoRSkpLEUuR2MociksRSk6cn1mdW5jdGlvbiBhbGUoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoTD1kYyh0KSxFPW51bGwscj0hMSxnPTAsQz1kdShMLmEpLmk7ZzxDOysrZylvPWwobVAoTCxnLChhPWwoT2UoZHUoTC5hKSxnKSw4OSksdz1hLmMsRGUodyw5MCk/bCh3LDI5KTooVG4oKSxLZikpKSwyOSksbj1hbGUoZSxvKSxuLmRjKCl8fChFPyhyfHwocj0hMCxFPW5ldyB1SChFKSksRS5HYyhuKSk6RT1uKTtyZXR1cm4gZj1oRW4oZSx0KSxmLmRjKCk/RXx8KENuKCksQ24oKSxfbyk6RT8ocnx8KEU9bmV3IHVIKEUpKSxFLkdjKGYpLEUpOmZ9ZnVuY3Rpb24gd19uKGUpe3ZhciB0LG4scixhO3I9ZS5vLHB5KCksZS5BLmRjKCl8fFBpKGUuQSxxX2UpP2E9ci5hOihhPW5QKGUuZiksZS5BLkhjKChtaCgpLHJGKSkmJiFlLkIuSGMoKFpsKCksRk0pKSYmKGE9Yi5NYXRoLm1heChhLG5QKGwoUW8oZS5wLChDdCgpLFFuKSksMjUyKSkpLGE9Yi5NYXRoLm1heChhLG5QKGwoUW8oZS5wLERyKSwyNTIpKSkpLHQ9UmZ0KGUpLHQmJihhPWIuTWF0aC5tYXgoYSx0LmEpKSksUnQoQnQoZS5lLlRmKCkub2YoKHBpKCksQzQpKSkpP3IuYT1iLk1hdGgubWF4KHIuYSxhKTpyLmE9YSxuPWUuZi5pLG4uYz0wLG4uYj1hLGhsZShlLmYpfWZ1bmN0aW9uIGhQKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYoRGUodCw3NikpcmV0dXJuIFRvKGUsdCxuKTtmb3IoZz1udWxsLG89bnVsbCxyPWwoZS5nLDEyNCksZj0wO2Y8ZS5pOysrZilpZihhPXJbZl0sUGkodCxhLm1kKCkpJiYobz1hLkxrKCksRGUobywxMDIpJiZsKG8sMTkpLkJiJmV1KSl7Zz1hO2JyZWFrfXJldHVybiBnJiYoaGgoZS5lKSYmKHc9by5KaygpP2RiKGUsNCxvLHQsbnVsbCxYRShlLG8sdCxEZShvLDEwMikmJihsKG8sMTkpLkJiJklvKSE9MCksITApOmRiKGUsby50aygpPzI6MSxvLHQsby5paygpLC0xLCEwKSxuP24ubmoodyk6bj13KSxuPWhQKGUsZyxuKSksbn1mdW5jdGlvbiB5X24oZSx0LG4pe3ZhciByLGEsbyxmO2lmKGY9V3UoZS5lLkRoKCksdCkscj1sKGUuZywxMjQpLEZvKCksbCh0LDY5KS54aygpKXtmb3Iobz0wO288ZS5pOysrbylpZihhPXJbb10sZi5hbShhLkxrKCkpJiZQaShhLG4pKXJldHVybiBWeShlLG8pLCEwfWVsc2UgaWYobiE9bnVsbCl7Zm9yKG89MDtvPGUuaTsrK28paWYoYT1yW29dLGYuYW0oYS5MaygpKSYmUGkobixhLm1kKCkpKXJldHVybiBWeShlLG8pLCEwfWVsc2UgZm9yKG89MDtvPGUuaTsrK28paWYoYT1yW29dLGYuYW0oYS5MaygpKSYmYS5tZCgpPT1udWxsKXJldHVybiBWeShlLG8pLCEwO3JldHVybiExfWZ1bmN0aW9uIHhfbihlLHQpe3ZhciBuLHIsYSxvLGY7aWYodC5VZygiTm9kZSBhbmQgUG9ydCBMYWJlbCBQbGFjZW1lbnQgYW5kIE5vZGUgU2l6aW5nIiwxKSxkbnQoKGdfKCksbmV3IEphZShlLCEwLCEwLG5ldyBrWikpKSxsKFEoZSwoZnQoKSxMdSkpLDIxKS5IYygoSG8oKSx2ZikpKWZvcihvPWwoUShlLChOdCgpLHY0KSksMjEpLGE9by5IYygoUmwoKSxuRikpLGY9UnQoQnQoUShlLEpNZSkpKSxyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDMwKSxJcyhGaShuZXcgYm4obnVsbCxuZXcga24obi5hLDE2KSksbmV3IEVaKSxuZXcgdml0KG8sYSxmKSk7dC5WZygpfWZ1bmN0aW9uIGtfbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGUuYz09bnVsbHx8ZS5jLmxlbmd0aDx0LmMubGVuZ3RoP2UuYz1XZShpaCxwZywyOCx0LmMubGVuZ3RoLDE2LDEpOnVfKGUuYyksZS5hPW5ldyBidCxyPTAsZj1uZXcgRyh0KTtmLmE8Zi5jLmMubGVuZ3RoOylhPWwocmUoZiksMTApLGEucD1yKys7Zm9yKG49bmV3IG9zLG89bmV3IEcodCk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEwKSxlLmNbYS5wXXx8KHpwdChlLGEpLG4uYj09MHx8KG1yKG4uYiE9MCksbChuLmEuYS5jLDE1KSkuZ2MoKTxlLmEuYy5sZW5ndGg/TzUobixlLmEpOmtvKG4sZS5hKSxlLmE9bmV3IGJ0KTtyZXR1cm4gbn1mdW5jdGlvbiBvbXQoZSl7c3coZSxuZXcgWG0obncoWnYodHcoZXcobmV3IHgxLG1UKSwiRUxLIFNQT3JFIE92ZXJsYXAgUmVtb3ZhbCIpLCdBIG5vZGUgb3ZlcmxhcCByZW1vdmFsIGFsZ29yaXRobSBwcm9wb3NlZCBieSBOYWNobWFuc29uIGV0IGFsLiBpbiAiTm9kZSBvdmVybGFwIHJlbW92YWwgYnkgZ3Jvd2luZyBhIHRyZWUiLicpLG5ldyB1aCkpKSxndChlLG1ULE1mZSxJdChqT2UpKSxndChlLG1ULFh3LFJPZSksZ3QoZSxtVCxKeSw4KSxndChlLG1ULE9mZSxJdChsU3QpKSxndChlLG1ULFhDZSxJdChCT2UpKSxndChlLG1ULFFDZSxJdChGT2UpKSxndChlLG1ULFZQLChIbigpLCExKSl9ZnVuY3Rpb24gRV9uKGUsdCl7dmFyIG4scixhLG8sZixnLHc7aWYobj10LnFpKGUuYSksbiYmKHc9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSxPU2UpKSx3IT1udWxsKSl7Zm9yKHI9bmV3IGJ0LG89R3kodywiXFx3IiksZj0wLGc9by5sZW5ndGg7ZjxnOysrZilhPW9bZl0sdm4oYSwiIyNvdGhlciIpP3Z0KHIsIiEjIyIrS18oZSxBaCh0LnFrKCkpKSk6dm4oYSwiIyNsb2NhbCIpP3IuYy5wdXNoKG51bGwpOnZuKGEsSlApP3Z0KHIsS18oZSxBaCh0LnFrKCkpKSk6JG4oci5jLGEpO3JldHVybiByfXJldHVybiBDbigpLENuKCksX299ZnVuY3Rpb24gY210KGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6O2ZvcihmPWR3KHQuYyxuLHIpLEw9bmV3IEcodC5hKTtMLmE8TC5jLmMubGVuZ3RoOyl7Zm9yKEM9bChyZShMKSwxMCksT2koQy5uLGYpLHo9bmV3IEcoQy5qKTt6LmE8ei5jLmMubGVuZ3RoOylmb3IoQj1sKHJlKHopLDEyKSxvPW5ldyBHKEIuZyk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwxOCksRHkoYS5hLGYpLGc9bChRKGEsKE50KCksY2MpKSw3NSksZyYmRHkoZyxmKSxFPW5ldyBHKGEuYik7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDcyKSxPaSh3Lm4sZik7dnQoZS5hLEMpLEMuYT1lfX1mdW5jdGlvbiBmUChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2lmKGUuZCl0aHJvdyB1ZShuZXcgbmMoKEdnKGExZSkscGhlK2ExZS5rK2JoZSkpKTtmb3IoZS5jPT0oSnMoKSxKMSkmJnA2KGUsdWMpLG49bmV3IEcoZS5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxOTQpLHQuZT0wO2ZvcihmPW5ldyBHKGUuYS5iKTtmLmE8Zi5jLmMubGVuZ3RoOylmb3Iobz1sKHJlKGYpLDg2KSxvLm89aWEsYT1vLmYuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksODYpLCsrci5kLmU7Zm9yKGtEbihlKSx3PW5ldyBHKGUuYS5iKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksODYpLGcuaz0hMDtyZXR1cm4gZX1mdW5jdGlvbiBUX24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihnPW5ldyBicHQoZSksbj1uZXcgb3MsQ3Mobix0LG4uYy5iLG4uYyk7bi5iIT0wOyl7Zm9yKHI9bChuLmI9PTA/bnVsbDoobXIobi5iIT0wKSxhZihuLG4uYS5hKSksMTEzKSxyLmQucD0xLGY9bmV3IEcoci5lKTtmLmE8Zi5jLmMubGVuZ3RoOylhPWwocmUoZiksMzQwKSxCZ3QoZyxhKSxFPWEuZCxFLmQucD09MCYmQ3MobixFLG4uYy5iLG4uYyk7Zm9yKG89bmV3IEcoci5iKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMzQwKSxCZ3QoZyxhKSx3PWEuYyx3LmQucD09MCYmQ3Mobix3LG4uYy5iLG4uYyl9cmV0dXJuIGd9ZnVuY3Rpb24gdW10KGUpe3ZhciB0LG4scixhLG87aWYocj16ZShHZShhdChlLChwaSgpLEZTdCkpKSksciE9MSlmb3IoRjUoZSxyKmUuZyxyKmUuZiksbj1TbG4oc2RuKCghZS5jJiYoZS5jPW5ldyBudChIbCxlLDksOSkpLGUuYyksbmV3IFZuZSkpLG89cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbKCFlLm4mJihlLm49bmV3IG50KGVjLGUsMSw3KSksZS5uKSwoIWUuYyYmKGUuYz1uZXcgbnQoSGwsZSw5LDkpKSxlLmMpLG5dKSkpO2pyKG8pOylhPWwoeHIobyksNDIyKSxhLnFoKHIqYS5uaCgpLHIqYS5vaCgpKSxhLnBoKHIqYS5taCgpLHIqYS5saCgpKSx0PWwoYS5vZihrTmUpLDgpLHQmJih0LmEqPXIsdC5iKj1yKX1mdW5jdGlvbiBma2UoZSx0LG4pe3ZhciByLGEsbyxmLGc7aWYoZj0oRm8oKSxsKHQsNjkpLnhrKCkpLHVwKGUuZSx0KSl7aWYodC5TaSgpJiYkVShlLHQsbixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCkpcmV0dXJuITF9ZWxzZSBmb3IoZz1XdShlLmUuRGgoKSx0KSxyPWwoZS5nLDEyNCksbz0wO288ZS5pOysrbylpZihhPXJbb10sZy5hbShhLkxrKCkpKXJldHVybihmP1BpKGEsbik6bj09bnVsbD9hLm1kKCk9PW51bGw6UGkobixhLm1kKCkpKT8hMToobChuNihlLG8sZj9sKG4sNzYpOnNnKHQsbikpLDc2KSwhMCk7cmV0dXJuIHFyKGUsZj9sKG4sNzYpOnNnKHQsbikpfWZ1bmN0aW9uIENfbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEI7Zm9yKGY9bmV3IEcoZS5iKTtmLmE8Zi5jLmMubGVuZ3RoOylmb3Iobz1sKHJlKGYpLDMwKSxCPUpPKG8uYSksRT1CLEM9MCxMPUUubGVuZ3RoO0M8TDsrK0Mpc3dpdGNoKHc9RVtDXSxsKFEodywoTnQoKSxRdSkpLDE3MSkuZyl7Y2FzZSAxOkdDbih3KSxWYSh3LHQpLEVkdCh3LCEwLHIpO2JyZWFrO2Nhc2UgMzpBQ24odyksVmEodyxuKSxFZHQodywhMSxhKX1mb3IoZz1uZXcgVWEoZS5iLDApO2cuYjxnLmQuZ2MoKTspKG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSwzMCkpLmEuYy5sZW5ndGg9PTAmJnBoKGcpfWZ1bmN0aW9uIFNfbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKHo9dC5sZW5ndGgsdz16LFhuKDAsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCgwKT09NDU/KEw9LTEsQj0xLC0teik6KEw9MSxCPTApLG89KGJsZSgpLGs2dClbMTBdLGE9ei9vfDAsdGU9eiVvLHRlIT0wJiYrK2EsZz1XZShWcixkaSwyOCxhLDE1LDEpLG49eDZ0WzhdLGY9MCxWPUIrKHRlPT0wP286dGUpLEo9QjtKPHc7Sj1WLFY9SitvKXI9T2goKEdhKEosVix0Lmxlbmd0aCksdC5zdWJzdHIoSixWLUopKSxsbyxJaSksRT0oR0UoKSxZOGUoZyxnLGYsbikpLEUrPV81bihnLGYsciksZ1tmKytdPUU7Qz1mLGUuZT1MLGUuZD1DLGUuYT1nLGlBKGUpfWZ1bmN0aW9uIF9fbihlLHQpe3ZhciBuLHIsYSxvO3JldHVybiBuPW5ldyB2dSxyPWwoeWMoZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuZiwxNikpLG4pLFN5KG5ldyB5dCxuZXcgamksbmV3IHFuLG5ldyBVbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksaTQpLEVjXSkpKSwyMSksYT1yLmdjKCkscj1sKHljKGZjKG5ldyBibihudWxsLG5ldyBrbih0LmYsMTYpKSxuKSxTeShuZXcgeXQsbmV3IGppLG5ldyBxbixuZXcgVW4saGUobGUob2MsMSksaXQsMTA4LDAsW2k0LEVjXSkpKSwyMSksbz1yLmdjKCksYT1hPT0xPzE6MCxvPW89PTE/MTowLGE8bz8tMTphPT1vPzA6MX1mdW5jdGlvbiBBX24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihnPWUuaSxhPVJ0KEJ0KFEoZywoTnQoKSxiNCkpKSksQz0wLHI9MCxFPW5ldyBHKGUuZyk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDE4KSxmPURvKHcpLG89ZiYmYSYmUnQoQnQoUSh3LGd2KSkpLEI9dy5kLmksZiYmbz8rK3I6ZiYmIW8/KytDOmVvKEIpLmU9PWc/KytyOisrQztmb3Iobj1uZXcgRyhlLmUpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxOCksZj1Ebyh0KSxvPWYmJmEmJlJ0KEJ0KFEodCxndikpKSxMPXQuYy5pLGYmJm8/KytDOmYmJiFvPysrcjplbyhMKS5lPT1nPysrQzorK3I7cmV0dXJuIEMtcn1mdW5jdGlvbiBmNihlLHQsbixyKXt0aGlzLmU9ZSx0aGlzLms9bChRKGUsKGZ0KCksJDYpKSwzMTIpLHRoaXMuZz1XZSh3ZyxtMiwxMCx0LDAsMSksdGhpcy5iPVdlKHRhLGR0LDM0NSx0LDcsMSksdGhpcy5hPVdlKHdnLG0yLDEwLHQsMCwxKSx0aGlzLmQ9V2UodGEsZHQsMzQ1LHQsNywxKSx0aGlzLmo9V2Uod2csbTIsMTAsdCwwLDEpLHRoaXMuaT1XZSh0YSxkdCwzNDUsdCw3LDEpLHRoaXMucD1XZSh0YSxkdCwzNDUsdCw3LDEpLHRoaXMubj1XZShOcyxkdCw0ODUsdCw4LDEpLGFPKHRoaXMubiwoSG4oKSwhMSkpLHRoaXMuZj1XZShOcyxkdCw0ODUsdCw4LDEpLGFPKHRoaXMuZiwhMCksdGhpcy5vPW4sdGhpcy5jPXJ9ZnVuY3Rpb24gbG10KGUsdCl7dmFyIG4scixhLG8sZixnO2lmKCF0LmRjKCkpaWYobCh0LlhiKDApLDI5MykuZD09KHl4KCksaDQpKVE3bihlLHQpO2Vsc2UgZm9yKHI9dC5LYygpO3IuT2IoKTspe3N3aXRjaChuPWwoci5QYigpLDI5Myksbi5kLmcpe2Nhc2UgNTpxRShlLG4sbjVuKGUsbikpO2JyZWFrO2Nhc2UgMDpxRShlLG4sKGY9bi5mLW4uYysxLGc9KGYtMSkvMnwwLG4uYytnKSk7YnJlYWs7Y2FzZSA0OnFFKGUsbix1d24oZSxuKSk7YnJlYWs7Y2FzZSAyOkExdChuKSxxRShlLG4sKG89THhlKG4pLG8/bi5jOm4uZikpO2JyZWFrO2Nhc2UgMTpBMXQobikscUUoZSxuLChhPUx4ZShuKSxhP24uZjpuLmMpKX1LeG4obi5hKX19ZnVuY3Rpb24gZGtlKGUsdCxuLHIpe3ZhciBhLG8sZjtyZXR1cm4gZj1uZXcgSFplKHQsbiksZS5hP3I/KGE9bChMZihsKGNyKGUuYix0KSwyNjApKSwyNjApLCsrYS5hLGYuZD1yLmQsZi5lPXIuZSxmLmI9cixmLmM9cixyLmU/ci5lLmM9ZjphLmI9ZixyLmQ/ci5kLmI9ZjplLmE9ZixyLmQ9ZixyLmU9Zik6KGwoTGYoZS5lKSw1MTEpLmI9ZixmLmQ9ZS5lLGUuZT1mLGE9bChjcihlLmIsdCksMjYwKSxhPygrK2EuYSxvPWEuYyxvLmM9ZixmLmU9byxhLmM9Zik6KGtpKGUuYix0LGE9bmV3IEI1ZShmKSksKytlLmMpKTooZS5hPWUuZT1mLGtpKGUuYix0LG5ldyBCNWUoZikpLCsrZS5jKSwrK2UuZCxmfWZ1bmN0aW9uIG9sZShlLHQpe3ZhciBuLHIsYSxvLGY7aWYodC5VZygiTmV0d29yayBzaW1wbGV4IiwxKSxlLmUuYS5jLmxlbmd0aDwxKXt0LlZnKCk7cmV0dXJufWZvcihvPW5ldyBHKGUuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTI1KSxhLmU9MDtmb3IoZj1lLmUuYS5jLmxlbmd0aD49NDAsZiYmbUFuKGUpLFNMbihlKSxXQ24oZSksbj1tMXQoZSkscj0wO24mJnI8ZS5mOylPX24oZSxuLFFFbihlLG4pKSxuPW0xdChlKSwrK3I7ZiYmZHhuKGUpLGUuYT9jVG4oZSxybXQoZSkpOnJtdChlKSxlLmI9bnVsbCxlLmQ9bnVsbCxlLnA9bnVsbCxlLmM9bnVsbCxlLmc9bnVsbCxlLmk9bnVsbCxlLm49bnVsbCxlLm89bnVsbCx0LlZnKCl9ZnVuY3Rpb24gTF9uKGUsdCl7dmFyIG4scixhLG8sZixnLHc7aWYoIXQuZSl7Zm9yKHQuZT0hMCxyPXQuZC5hLmVjKCkuS2MoKTtyLk9iKCk7KXtpZihuPWwoci5QYigpLDE4KSx0Lm8mJnQuZC5hLmdjKCk8PTEpe2Y9dC5hLmMsZz10LmEuYyt0LmEuYix3PW5ldyBsdChmKyhnLWYpLzIsdC5iKSx1aShsKHQuZC5hLmVjKCkuS2MoKS5QYigpLDE4KS5hLHcpO2NvbnRpbnVlfWlmKGE9bChjcih0LmMsbiksNDY4KSxhLmJ8fGEuYyl7cF9uKGUsbix0KTtjb250aW51ZX1vPWUuZD09KFNFKCksYU0pJiYoYS5kfHxhLmUpJiZ4RW4oZSx0KSYmdC5kLmEuZ2MoKTw9MSxvP25EbihuLHQpOlRTbihlLG4sdCl9dC5rJiZ0byh0LmQsbmV3IGg1KX19ZnVuY3Rpb24gZ2tlKGUsdCxuLHIsYSxvKXt2YXIgZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZTtmb3IoQj1vLGc9KHIrYSkvMitCLHRlPW4qYi5NYXRoLmNvcyhnKSxmZT1uKmIuTWF0aC5zaW4oZyksVGU9dGUtdC5nLzIsTWU9ZmUtdC5mLzIsVXUodCxUZSksR3UodCxNZSksTD1lLmEuRWcodCksSj0yKmIuTWF0aC5hY29zKG4vbitlLmMpLEo8YS1yPyh6PUovTCxmPShyK2EtSikvMik6KHo9KGEtcikvTCxmPXIpLFY9SHkodCksZS5lJiYoZS5lLkZnKGUuZCksZS5lLkdnKFYpKSxFPW5ldyBHKFYpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwyNyksQz1lLmEuRWcodyksZ2tlKGUsdyxuK2UuYyxmLGYreipDLG8pLGYrPXoqQ31mdW5jdGlvbiBNX24oZSx0LG4pe3ZhciByO3N3aXRjaChyPW4ucS5nZXRNb250aCgpLHQpe2Nhc2UgNTpoaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdKVtyXSk7YnJlYWs7Y2FzZSA0OmhpKGUsaGUobGUoenQsMSksZHQsMiw2LFskbGUsemxlLHFsZSxIbGUsX3gsVmxlLFVsZSxHbGUsS2xlLFdsZSxZbGUsWGxlXSlbcl0pO2JyZWFrO2Nhc2UgMzpoaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsX3gsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdKVtyXSk7YnJlYWs7ZGVmYXVsdDphZyhlLHIrMSx0KX19ZnVuY3Rpb24gRF9uKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQjtmb3Iodz1uZXcgbHQobixyKSxtYSh3LGwoUSh0LChiYigpLCRMKSksOCkpLEI9bmV3IEcodC5lKTtCLmE8Qi5jLmMubGVuZ3RoOylMPWwocmUoQiksMTUzKSxPaShMLmQsdyksdnQoZS5lLEwpO2ZvcihnPW5ldyBHKHQuYyk7Zy5hPGcuYy5jLmxlbmd0aDspe2ZvcihmPWwocmUoZyksMjkwKSxvPW5ldyBHKGYuYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDI1MCksT2koYS5kLHcpO3Z0KGUuYyxmKX1mb3IoQz1uZXcgRyh0LmQpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSw0NTQpLE9pKEUuZCx3KSx2dChlLmQsRSl9ZnVuY3Rpb24gcGtlKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtmb3Iodz1uZXcgRyh0LmopO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihnPWwocmUodyksMTIpLGE9bmV3IE4xKGcuYik7TGMoYS5hKXx8TGMoYS5iKTspcj1sKExjKGEuYSk/cmUoYS5hKTpyZShhLmIpLDE4KSxuPXIuYz09Zz9yLmQ6ci5jLG89bi5pLHQhPW8mJihFPWwoUShyLChOdCgpLFVUKSksMTcpLmEsRTwwJiYoRT0wKSxmPW8ucCxlLmJbZl09PTAmJihyLmQ9PW4/KGUuYVtmXS09RSsxLGUuYVtmXTw9MCYmZS5jW2ZdPjAmJnVpKGUuZixvKSk6KGUuY1tmXS09RSsxLGUuY1tmXTw9MCYmZS5hW2ZdPjAmJnVpKGUuZSxvKSkpKX1mdW5jdGlvbiBobXQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEM7Zm9yKHc9bmV3IGx0KG4sciksbWEodyxsKFEodCwoUWkoKSxRVCkpLDgpKSxDPVJyKHQuYiwwKTtDLmIhPUMuZC5jOylFPWwoQnIoQyksNDApLE9pKEUuZSx3KSx1aShlLmIsRSk7Zm9yKGc9bCh5YyhWNWUobmV3IGJuKG51bGwsbmV3IGtuKHQuYSwxNikpKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSkuS2MoKTtnLk9iKCk7KXtmb3IoZj1sKGcuUGIoKSw2NSksbz1ScihmLmEsMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDgpLGEuYSs9dy5hLGEuYis9dy5iO3VpKGUuYSxmKX19ZnVuY3Rpb24gYmtlKGUsdCl7dmFyIG4scixhLG87aWYoMDwoRGUoZSwxNik/bChlLDE2KS5nYygpOlhnKGUuS2MoKSkpKXtpZihhPXQsMTxhKXtmb3IoLS1hLG89bmV3IER0ZSxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksNDApLG89TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbyxuZXcgSGcobildKSk7cmV0dXJuIGJrZShvLGEpfWlmKGE8MCl7Zm9yKG89bmV3IEl0ZSxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksNDApLG89TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbyxuZXcgSGcobildKSk7aWYoMDwoRGUobywxNik/bChvLDE2KS5nYygpOlhnKG8uS2MoKSkpKXJldHVybiBia2UobyxhKX19cmV0dXJuIGwoUHEoZS5LYygpKSw0MCl9ZnVuY3Rpb24gSV9uKGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobi5VZygiUHJvY2Vzc29yIG9yZGVyIG5vZGVzIiwyKSxlLmI9emUoR2UoUSh0LChIYygpLHpkZSkpKSksZS5hPWwoUSh0LHkzKSw4OCksZS5hPT0oSnMoKSxKMSkmJihlLmE9UTEscnQodCx5MyxlLmEpKSxhPW5ldyBvcyxmPVJyKHQuYiwwKTtmLmIhPWYuZC5jOylvPWwoQnIoZiksNDApLFJ0KEJ0KFEobywoUWkoKSxWYikpKSkmJkNzKGEsbyxhLmMuYixhLmMpO3I9KG1yKGEuYiE9MCksbChhLmEuYS5jLDQwKSksb3Z0KGUsciksbi5maCgxKSxha2UoZSxyLDAtemUoR2UoUShyLChRaSgpLEZXKSkpKS8yLDApLG4uZmgoMSksbi5WZygpfWZ1bmN0aW9uIFpsKCl7Wmw9VSxhQz1uZXcgSTUoIkRFRkFVTFRfTUlOSU1VTV9TSVpFIiwwKSxhRj1uZXcgSTUoIk1JTklNVU1fU0laRV9BQ0NPVU5UU19GT1JfUEFERElORyIsMSksdVk9bmV3IEk1KCJDT01QVVRFX1BBRERJTkciLDIpLEZNPW5ldyBJNSgiT1VUU0lERV9OT0RFX0xBQkVMU19PVkVSSEFORyIsMyksbFk9bmV3IEk1KCJQT1JUU19PVkVSSEFORyIsNCksZlk9bmV3IEk1KCJVTklGT1JNX1BPUlRfU1BBQ0lORyIsNSksaFk9bmV3IEk1KCJTUEFDRV9FRkZJQ0lFTlRfUE9SVF9MQUJFTFMiLDYpLEdnZT1uZXcgSTUoIkZPUkNFX1RBQlVMQVJfTk9ERV9MQUJFTFMiLDcpLHNGPW5ldyBJNSgiQVNZTU1FVFJJQ0FMIiw4KX1mdW5jdGlvbiBjbGUoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2lmKHQpe2lmKG49KG89dC5EaCgpLG8/QWgobykud2koKS5zaShvKTpudWxsKSxuKXtmb3IoaDIoZSx0LG4pLGE9dC5EaCgpLHc9MCxFPShhLmk9PW51bGwmJlNkKGEpLGEuaSkubGVuZ3RoO3c8RTsrK3cpZz0ocj0oYS5pPT1udWxsJiZTZChhKSxhLmkpLHc+PTAmJnc8ci5sZW5ndGg/clt3XTpudWxsKSxnLnJrKCkmJiFnLnNrKCkmJihEZShnLDMzMSk/TTZuKGUsbChnLDM1KSx0LG4pOihmPWwoZywxOSksZi5CYiZldSYmejhuKGUsZix0LG4pKSk7dC5WaCgpJiZsKG4sNTQpLmVpKGwodCw1NCkuX2goKSl9cmV0dXJuIG59ZWxzZSByZXR1cm4gbnVsbH1mdW5jdGlvbiBPX24oZSx0LG4pe3ZhciByLGEsbztpZighdC5mKXRocm93IHVlKG5ldyBZbigiR2l2ZW4gbGVhdmUgZWRnZSBpcyBubyB0cmVlIGVkZ2UuIikpO2lmKG4uZil0aHJvdyB1ZShuZXcgWW4oIkdpdmVuIGVudGVyIGVkZ2UgaXMgYSB0cmVlIGVkZ2UgYWxyZWFkeS4iKSk7Zm9yKHQuZj0hMSx3eWUoZS5wLHQpLG4uZj0hMCxuYShlLnAsbikscj1uLmUuZS1uLmQuZS1uLmEsenVlKGUsbi5lLHQpfHwocj0tciksbz1uZXcgRyhlLmUuYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEyNSksenVlKGUsYSx0KXx8KGEuZSs9cik7ZS5qPTEsdV8oZS5jKSxwOWUoZSxsKHJlKG5ldyBHKGUuZS5hKSksMTI1KSksbXZ0KGUpfWZ1bmN0aW9uIGZtdChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIsejtpZihUd24oZSx0LG4pLG89dFtuXSx6PXI/KEN0KCksZXIpOihDdCgpLGFyKSxfaG4odC5sZW5ndGgsbixyKSl7Zm9yKGE9dFtyP24tMTpuKzFdLFM2ZShlLGEscj8ocW8oKSx6dSk6KHFvKCksJGwpKSx3PW8sQz0wLEI9dy5sZW5ndGg7QzxCOysrQylmPXdbQ10sWjhlKGUsZix6KTtmb3IoUzZlKGUsbyxyPyhxbygpLCRsKToocW8oKSx6dSkpLGc9YSxFPTAsTD1nLmxlbmd0aDtFPEw7KytFKWY9Z1tFXSxmLmV8fFo4ZShlLGYsQk4oeikpfWVsc2UgZm9yKGc9byxFPTAsTD1nLmxlbmd0aDtFPEw7KytFKWY9Z1tFXSxaOGUoZSxmLHopO3JldHVybiExfWZ1bmN0aW9uIE5fbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMO2ZvcihDbigpLFZzKGUsbmV3IHkkKSxnPW5ldyBVYShlLDApLEw9bmV3IGJ0LG89MDtnLmI8Zy5kLmdjKCk7KWY9KG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSwxNjMpKSxMLmMubGVuZ3RoIT0wJiZ3bChmKSpnaChmKT5vKjI/KEM9bmV3IGhWKEwpLEU9d2woZikvZ2goZiksdz1MbGUoQyx0LG5ldyBBOCxuLHIsYSxFKSxPaShZMChDLmUpLHcpLEwuYy5sZW5ndGg9MCxvPTAsJG4oTC5jLEMpLCRuKEwuYyxmKSxvPXdsKEMpKmdoKEMpK3dsKGYpKmdoKGYpKTooJG4oTC5jLGYpLG8rPXdsKGYpKmdoKGYpKTtyZXR1cm4gTH1mdW5jdGlvbiBkbXQoZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYoZz1sKFEodCwoTnQoKSxNcykpLDEwMSksZz09KFJhKCksVGcpfHxnPT1NdSlmb3IoYT1uZXcgbHQodC5mLmErdC5kLmIrdC5kLmMsdC5mLmIrdC5kLmQrdC5kLmEpLmIsZj1uZXcgRyhlLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMCksby5rPT0oWm4oKSxVcykmJihuPWwoUShvLChmdCgpLFdjKSksNjQpLCEobiE9KEN0KCksYXIpJiZuIT1lcikmJihyPXplKEdlKFEobyxsMykpKSxnPT1UZyYmKHIqPWEpLG8ubi5iPXItbChRKG8scDMpLDgpLmIsRFYobywhMSwhMCkpKX1mdW5jdGlvbiBQX24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtpZihoaChlLmUpKXtpZih0IT1uJiYoYT1sKGUuZywxMjQpLHo9YVtuXSxmPXouTGsoKSx1cChlLmUsZikpKXtmb3IoVj1XdShlLmUuRGgoKSxmKSx3PS0xLGc9LTEscj0wLEU9MCxMPXQ+bj90Om47RTw9TDsrK0UpRT09bj9nPXIrKzoobz1hW0VdLEM9Vi5hbShvLkxrKCkpLEU9PXQmJih3PUU9PUwmJiFDP3ItMTpyKSxDJiYrK3IpO3JldHVybiBCPWwoQUEoZSx0LG4pLDc2KSxnIT13JiZ4ayhlLG5ldyBzTihlLmUsNyxmLHB0KGcpLHoubWQoKSx3KSksQn19ZWxzZSByZXR1cm4gbChIdWUoZSx0LG4pLDc2KTtyZXR1cm4gbChBQShlLHQsbiksNzYpfWZ1bmN0aW9uIEJfbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2Zvcih0LlVnKCJQb3J0IG9yZGVyIHByb2Nlc3NpbmciLDEpLHc9bChRKGUsKE50KCksWk1lKSksNDMwKSxyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49bChyZShyKSwzMCksbz1uZXcgRyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwxMCksZj1sKFEoYSxNcyksMTAxKSxnPWEuaixmPT0oUmEoKSxUdil8fGY9PVRnfHxmPT1NdT8oQ24oKSxWcyhnLGFMZSkpOmYhPVoxJiZmIT1XYiYmKENuKCksVnMoZyxYOHQpLHo2bihnKSx3PT0oZE4oKSxFZGUpJiZWcyhnLFk4dCkpLGEuaT0hMCxmOWUoYSk7dC5WZygpfWZ1bmN0aW9uIEZfbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2Zvcih3PW5ldyBQcix0PW5ldyBqaWUsZj1lLktjKCk7Zi5PYigpOylhPWwoZi5QYigpLDEwKSxnPWh3KHJPKG5ldyBTbSxhKSx0KSxqdSh3LmYsYSxnKTtmb3Iobz1lLktjKCk7by5PYigpOylmb3IoYT1sKG8uUGIoKSwxMCkscj1uZXcgaHIoZHIocXMoYSkuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksIURvKG4pJiZwMChzMChpMChyMChhMChuZXcgX2YsYi5NYXRoLm1heCgxLGwoUShuLChOdCgpLGVEZSkpLDE3KS5hKSksMSksbChjcih3LG4uYy5pKSwxMjUpKSxsKGNyKHcsbi5kLmkpLDEyNSkpKTtyZXR1cm4gdH1mdW5jdGlvbiBnbXQoKXtnbXQ9VSxHRXQ9ZmkobmV3IFhzLCh1bygpLF91KSwodm8oKSxVQWUpKSx6RGU9ZmkobmV3IFhzLGJ1LExLKSxXRXQ9eWwoZmkobmV3IFhzLGJ1LEZLKSxtYyxCSyksVUV0PXlsKGZpKGZpKG5ldyBYcyxidSwkQWUpLF91LHpBZSksbWMscUFlKSxZRXQ9VGQoVGQodl8oeWwoZmkobmV3IFhzLHkwLHpLKSxtYywkSyksX3UpLGpLKSxxSyksS0V0PXlsKG5ldyBYcyxtYyxHQWUpLEhFdD15bChmaShmaShmaShuZXcgWHMsdmcsREspLF91LE9LKSxfdSxMVCksbWMsSUspLFZFdD15bChmaShmaShuZXcgWHMsX3UsTFQpLF91LEFLKSxtYyxfSyl9ZnVuY3Rpb24gUl9uKGUsdCxuLHIsYSxvKXt2YXIgZixnLHcsRSxDLEwsQjtmb3IoRT1tMHQodCktbTB0KGUpLGY9bnB0KHQsRSksdz1xdSgwLDAsMCk7RT49MCYmKGc9TTduKGUsZiksIShnJiYoRTwyMj93Lmx8PTE8PEU6RTw0ND93Lm18PTE8PEUtMjI6dy5ofD0xPDxFLTQ0LGUubD09MCYmZS5tPT0wJiZlLmg9PTApKSk7KUM9Zi5tLEw9Zi5oLEI9Zi5sLGYuaD1MPj4+MSxmLm09Qz4+PjF8KEwmMSk8PDIxLGYubD1CPj4+MXwoQyYxKTw8MjEsLS1FO3JldHVybiBuJiZ5Y2UodyksbyYmKHI/KE5iPXhFKGUpLGEmJihOYj1KZnQoTmIsKGlFKCksWVNlKSkpKTpOYj1xdShlLmwsZS5tLGUuaCkpLHd9ZnVuY3Rpb24gal9uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKEU9ZS5lW3QuYy5wXVt0LnBdKzEsdz10LmMuYS5jLmxlbmd0aCsxLGc9bmV3IEcoZS5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zm9yKGY9bChyZShnKSwxMiksTD0wLG89MCxhPXJnKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsW25ldyBUNShmKSxuZXcgQzgoZildKSkpO2pyKGEpOylyPWwoeHIoYSksMTIpLHIuaS5jPT10LmMmJihMKz13aG4oZSxyLmkpKzEsKytvKTtuPUwvbyxDPWYuaixDPT0oQ3QoKSxhcik/bjxFP2UuZltmLnBdPWUuYy1uOmUuZltmLnBdPWUuYisody1uKTpDPT1lciYmKG48RT9lLmZbZi5wXT1lLmIrbjplLmZbZi5wXT1lLmMtKHctbikpfX1mdW5jdGlvbiBPaChlLHQsbil7dmFyIHIsYSxvLGYsZztpZihlPT1udWxsKXRocm93IHVlKG5ldyBnZCh1bCkpO2ZvcihvPWUubGVuZ3RoLGY9bz4wJiYoWG4oMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00NXx8KFhuKDAsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCgwKT09NDMpKT8xOjAscj1mO3I8bztyKyspaWYoVzF0KChYbihyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocikpKT09LTEpdGhyb3cgdWUobmV3IGdkKFl3K2UrJyInKSk7aWYoZz1wYXJzZUludChlLDEwKSxhPWc8dCxpc05hTihnKSl0aHJvdyB1ZShuZXcgZ2QoWXcrZSsnIicpKTtpZihhfHxnPm4pdGhyb3cgdWUobmV3IGdkKFl3K2UrJyInKSk7cmV0dXJuIGd9ZnVuY3Rpb24gJF9uKGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihmPW5ldyBvcyxvPW5ldyBHKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDExOCksSChhLGEuZi5jLmxlbmd0aCkscShhLGEuay5jLmxlbmd0aCksYS5pPT0wJiYoYS5vPTAsQ3MoZixhLGYuYy5iLGYuYykpO2Zvcig7Zi5iIT0wOylmb3IoYT1sKGYuYj09MD9udWxsOihtcihmLmIhPTApLGFmKGYsZi5hLmEpKSwxMTgpLHI9YS5vKzEsbj1uZXcgRyhhLmYpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMzIpLGc9dC5hLFkoZyxiLk1hdGgubWF4KGcubyxyKSkscShnLGcuaS0xKSxnLmk9PTAmJkNzKGYsZyxmLmMuYixmLmMpfWZ1bmN0aW9uIHpfbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2ZvcihmPW5ldyBHKGUpO2YuYTxmLmMuYy5sZW5ndGg7KXtmb3Iobz1sKHJlKGYpLDc0KSxyPWJjKGwoT2UoKCFvLmImJihvLmI9bmV3IExuKF9yLG8sNCw3KSksby5iKSwwKSw4NCkpLGc9ci5pLHc9ci5qLGE9bChPZSgoIW8uYSYmKG8uYT1uZXcgbnQoY3Msbyw2LDYpKSxvLmEpLDApLDE2Niksa08oYSxhLmorZyxhLmsrdykseE8oYSxhLmIrZyxhLmMrdyksbj1uZXcgb3IoKCFhLmEmJihhLmE9bmV3IFlzKHFoLGEsNSkpLGEuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwzNzcpLFdzZSh0LHQuYStnLHQuYit3KTtrN2UobChhdChvLChwaSgpLHgzKSksNzUpLGcsdyl9fWZ1bmN0aW9uIFlFKGUpe3ZhciB0O3N3aXRjaChlKXtjYXNlIDEwMDpyZXR1cm4gYjYoT0wsITApO2Nhc2UgNjg6cmV0dXJuIGI2KE9MLCExKTtjYXNlIDExOTpyZXR1cm4gYjYoaDBlLCEwKTtjYXNlIDg3OnJldHVybiBiNihoMGUsITEpO2Nhc2UgMTE1OnJldHVybiBiNihmMGUsITApO2Nhc2UgODM6cmV0dXJuIGI2KGYwZSwhMSk7Y2FzZSA5OTpyZXR1cm4gYjYoZDBlLCEwKTtjYXNlIDY3OnJldHVybiBiNihkMGUsITEpO2Nhc2UgMTA1OnJldHVybiBiNihnMGUsITApO2Nhc2UgNzM6cmV0dXJuIGI2KGcwZSwhMSk7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgQWMoKHQ9ZSxHNXQrdC50b1N0cmluZygxNikpKSl9fWZ1bmN0aW9uIHFfbihlKXt2YXIgdCxuLHIsYSxvO3N3aXRjaChhPWwoanQoZS5hLDApLDEwKSx0PW5ldyBvcChlKSx2dChlLmEsdCksdC5vLmE9Yi5NYXRoLm1heCgxLGEuby5hKSx0Lm8uYj1iLk1hdGgubWF4KDEsYS5vLmIpLHQubi5hPWEubi5hLHQubi5iPWEubi5iLGwoUShhLChmdCgpLFdjKSksNjQpLmcpe2Nhc2UgNDp0Lm4uYSs9MjticmVhaztjYXNlIDE6dC5uLmIrPTI7YnJlYWs7Y2FzZSAyOnQubi5hLT0yO2JyZWFrO2Nhc2UgMzp0Lm4uYi09Mn1yZXR1cm4gcj1uZXcgZ3UsTWMocix0KSxuPW5ldyBUdyxvPWwoanQoYS5qLDApLDEyKSxwbyhuLG8pLEZhKG4sciksT2koWTAoci5uKSxvLm4pLE9pKFkwKHIuYSksby5hKSx0fWZ1bmN0aW9uIHBtdChlLHQsbixyLGEpe24mJighcnx8KGUuYy1lLmImZS5hLmxlbmd0aC0xKT4xKSYmdD09MSYmbChlLmFbZS5iXSwxMCkuaz09KFpuKCksY3UpP1R4KGwoZS5hW2UuYl0sMTApLChJaCgpLGtnKSk6ciYmKCFufHwoZS5jLWUuYiZlLmEubGVuZ3RoLTEpPjEpJiZ0PT0xJiZsKGUuYVtlLmMtMSZlLmEubGVuZ3RoLTFdLDEwKS5rPT0oWm4oKSxjdSk/VHgobChlLmFbZS5jLTEmZS5hLmxlbmd0aC0xXSwxMCksKEloKCksR2IpKTooZS5jLWUuYiZlLmEubGVuZ3RoLTEpPT0yPyhUeChsKHdBKGUpLDEwKSwoSWgoKSxrZykpLFR4KGwod0EoZSksMTApLEdiKSk6cFRuKGUsYSksbDZlKGUpfWZ1bmN0aW9uIEhfbihlLHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobz0wLGE9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7YS5lIT1hLmkuZ2MoKTspcj1sKGdyKGEpLDI3KSxmPSIiLCghci5uJiYoci5uPW5ldyBudChlYyxyLDEsNykpLHIubikuaT09MHx8KGY9bChPZSgoIXIubiYmKHIubj1uZXcgbnQoZWMsciwxLDcpKSxyLm4pLDApLDEzNSkuYSksZz1uZXcgeGNlKG8rKyx0LGYpLHBjKGcscikscnQoZywoUWkoKSxnTSksciksZy5lLmI9ci5qK3IuZi8yLGcuZi5hPWIuTWF0aC5tYXgoci5nLDEpLGcuZS5hPXIuaStyLmcvMixnLmYuYj1iLk1hdGgubWF4KHIuZiwxKSx1aSh0LmIsZyksanUobi5mLHIsZyl9ZnVuY3Rpb24gVl9uKGUpe3ZhciB0LG4scixhLG87cj1sKFEoZSwoZnQoKSx6aSkpLDI3KSxvPWwoYXQociwoTnQoKSxidikpLDE4MSkuSGMoKG1oKCksQ3YpKSxlLmV8fChhPWwoUShlLEx1KSwyMSksdD1uZXcgbHQoZS5mLmErZS5kLmIrZS5kLmMsZS5mLmIrZS5kLmQrZS5kLmEpLGEuSGMoKEhvKCksdmYpKT8oSGkocixNcywoUmEoKSxNdSkpLEd3KHIsdC5hLHQuYiwhMSwhMCkpOlJ0KEJ0KGF0KHIsYWRlKSkpfHxHdyhyLHQuYSx0LmIsITAsITApKSxvP0hpKHIsYnYsdW4oQ3YpKTpIaShyLGJ2LChuPWwoSzAoQk0pLDkpLG5ldyBaaChuLGwoYzAobixuLmxlbmd0aCksOSksMCkpKX1mdW5jdGlvbiBta2UoZSx0LG4pe3ZhciByLGEsbyxmO2lmKHRbMF0+PWUubGVuZ3RoKXJldHVybiBuLm89MCwhMDtzd2l0Y2goY28oZSx0WzBdKSl7Y2FzZSA0MzphPTE7YnJlYWs7Y2FzZSA0NTphPS0xO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG4ubz0wLCEwfWlmKCsrdFswXSxvPXRbMF0sZj1rVShlLHQpLGY9PTAmJnRbMF09PW8pcmV0dXJuITE7aWYodFswXTxlLmxlbmd0aCYmY28oZSx0WzBdKT09NTgpe2lmKHI9Zio2MCwrK3RbMF0sbz10WzBdLGY9a1UoZSx0KSxmPT0wJiZ0WzBdPT1vKXJldHVybiExO3IrPWZ9ZWxzZSByPWYscjwyNCYmdFswXS1vPD0yP3IqPTYwOnI9ciUxMDArKHIvMTAwfDApKjYwO3JldHVybiByKj1hLG4ubz0tciwhMH1mdW5jdGlvbiBVX24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFO2ZvcihmPW5ldyBidCxyPW5ldyBocihkcihxcyhlLmIpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksMTgpLERvKG4pJiZ2dChmLG5ldyBCdXQobix3bHQoZSxuLmMpLHdsdChlLG4uZCkpKTtmb3IoRT0obz1uZXcgZ2koZS5lKS5hLnZjKCkuS2MoKSxuZXcgZnMobykpO0UuYS5PYigpOylnPSh0PWwoRS5hLlBiKCksNDQpLGwodC5tZCgpLDExMykpLGcuZC5wPTA7Zm9yKHc9KGE9bmV3IGdpKGUuZSkuYS52YygpLktjKCksbmV3IGZzKGEpKTt3LmEuT2IoKTspZz0odD1sKHcuYS5QYigpLDQ0KSxsKHQubWQoKSwxMTMpKSxnLmQucD09MCYmdnQoZS5kLFRfbihlLGcpKX1mdW5jdGlvbiBHX24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG89TTEoZSksYT1uZXcgb3IoKCFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksZS5lKSk7YS5lIT1hLmkuZ2MoKTspaWYocj1sKGdyKGEpLDc0KSxnPWJjKGwoT2UoKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jKSwwKSw4NCkpLCFMeShnLG8pKXJldHVybiEwO2ZvcihuPW5ldyBvcigoIWUuZCYmKGUuZD1uZXcgTG4oanMsZSw4LDUpKSxlLmQpKTtuLmUhPW4uaS5nYygpOylpZih0PWwoZ3IobiksNzQpLGY9YmMobChPZSgoIXQuYiYmKHQuYj1uZXcgTG4oX3IsdCw0LDcpKSx0LmIpLDApLDg0KSksIUx5KGYsbykpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gS19uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2ZvcihmPW5ldyBHKHQuYik7Zi5hPGYuYy5jLmxlbmd0aDspZm9yKG89bChyZShmKSwzMCksRT1uZXcgRyhvLmEpO0UuYTxFLmMuYy5sZW5ndGg7KXtmb3Iodz1sKHJlKEUpLDEwKSxDPW5ldyBidCxnPTAscj1uZXcgaHIoZHIoa2EodykuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksIShEbyhuKXx8IURvKG4pJiZuLmMuaS5jPT1uLmQuaS5jKSYmKGE9bChRKG4sKE50KCksSngpKSwxNykuYSxhPmcmJihnPWEsQy5jLmxlbmd0aD0wKSxhPT1nJiZ2dChDLG5ldyBjYShuLmMuaSxuKSkpO0NuKCksVnMoQyxlLmMpLHB3KGUuYix3LnAsQyl9fWZ1bmN0aW9uIFdfbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztmb3IoZj1uZXcgRyh0LmIpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMzApLEU9bmV3IEcoby5hKTtFLmE8RS5jLmMubGVuZ3RoOyl7Zm9yKHc9bChyZShFKSwxMCksQz1uZXcgYnQsZz0wLHI9bmV3IGhyKGRyKHFzKHcpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksMTgpLCEoRG8obil8fCFEbyhuKSYmbi5jLmkuYz09bi5kLmkuYykmJihhPWwoUShuLChOdCgpLEp4KSksMTcpLmEsYT5nJiYoZz1hLEMuYy5sZW5ndGg9MCksYT09ZyYmdnQoQyxuZXcgY2Eobi5kLmksbikpKTtDbigpLFZzKEMsZS5jKSxwdyhlLmYsdy5wLEMpfX1mdW5jdGlvbiBZX24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2lmKEU9QnQoUSh0LChIYygpLE1UdCkpKSxFPT1udWxsfHwobnIoRSksRSkpe2Zvcih5RW4oZSx0KSxhPW5ldyBidCx3PVJyKHQuYiwwKTt3LmIhPXcuZC5jOylmPWwoQnIodyksNDApLG49aTllKGUsZixudWxsKSxuJiYocGMobix0KSwkbihhLmMsbikpO2lmKGUuYT1udWxsLGUuYj1udWxsLGEuYy5sZW5ndGg+MSlmb3Iocj1uZXcgRyhhKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj1sKHJlKHIpLDEyMSksbz0wLGc9UnIobi5iLDApO2cuYiE9Zy5kLmM7KWY9bChCcihnKSw0MCksZi5nPW8rKztyZXR1cm4gYX1yZXR1cm4gTzEoaGUobGUoX09uLDEpLGszdCwxMjEsMCxbdF0pKX1mdW5jdGlvbiBYX24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3Iodz1uZXcgYmwsdD1ScihlLDApLGc9bnVsbCxuPWwoQnIodCksOCksYT1sKEJyKHQpLDgpO3QuYiE9dC5kLmM7KWc9bixuPWEsYT1sKEJyKHQpLDgpLG89RWh0KG1hKG5ldyBsdChnLmEsZy5iKSxuKSksZj1FaHQobWEobmV3IGx0KGEuYSxhLmIpLG4pKSxyPTEwLHI9Yi5NYXRoLm1pbihyLGIuTWF0aC5hYnMoby5hK28uYikvMikscj1iLk1hdGgubWluKHIsYi5NYXRoLmFicyhmLmErZi5iKS8yKSxvLmE9Uk8oby5hKSpyLG8uYj1STyhvLmIpKnIsZi5hPVJPKGYuYSkqcixmLmI9Uk8oZi5iKSpyLHVpKHcsT2kobyxuKSksdWkodyxPaShmLG4pKTtyZXR1cm4gd31mdW5jdGlvbiBRX24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztpZihuLlVnKCJNaW5pbWl6ZSBDcm9zc2luZ3MgIitlLmEsMSkscj10LmIuYy5sZW5ndGg9PTB8fCFfayhGaShuZXcgYm4obnVsbCxuZXcga24odC5iLDE2KSksbmV3IFdsKG5ldyBWZWUpKSkuQmQoKEFtKCksengpKSx3PXQuYi5jLmxlbmd0aD09MSYmbChqdCh0LmIsMCksMzApLmEuYy5sZW5ndGg9PTEsbz1xZShRKHQsKE50KCkscDQpKSk9PT1xZSgocnAoKSxBMikpLHJ8fHcmJiFvKXtuLlZnKCk7cmV0dXJufWE9JENuKGUsdCksZj0oZz1sKGZmKGEsMCksMjE5KSxnLmMua2coKT9nLmMuZWcoKT9uZXcgalllKGUpOm5ldyAkWWUoZSk6bmV3IFJZZShlKSksQXluKGEsZiksYTRuKGUpLG4uVmcoKX1mdW5jdGlvbiBOaChlLHQsbixyKXt2YXIgYSxvLGYsZyx3O3JldHVybiBmPWUuUGgoKSx3PWUuSmgoKSxhPW51bGwsdz90JiYhKHNsZShlLHQsbikuQmImSW8pPyhyPVRvKHcuRWwoKSxlLHIpLGUuZGkobnVsbCksYT10LlFoKCkpOnc9bnVsbDooZiYmKHc9Zi5RaCgpKSx0JiYoYT10LlFoKCkpKSx3IT1hJiZ3JiZ3LklsKGUpLGc9ZS5GaCgpLGUuQmgodCxuKSx3IT1hJiZhJiZhLkhsKGUpLGUudmgoKSYmZS53aCgpJiYoZiYmZz49MCYmZyE9biYmKG89bmV3IF9hKGUsMSxnLGYsbnVsbCkscj9yLm5qKG8pOnI9byksbj49MCYmKG89bmV3IF9hKGUsMSxuLGc9PW4/ZjpudWxsLHQpLHI/ci5uaihvKTpyPW8pKSxyfWZ1bmN0aW9uIGJtdChlKXt2YXIgdCxuLHI7aWYoZS5iPT1udWxsKXtpZihyPW5ldyBVcCxlLmkhPW51bGwmJihYbyhyLGUuaSksci5hKz0iOiIpLGUuZiYyNTYpe2ZvcihlLmYmMjU2JiZlLmEhPW51bGwmJihkcG4oZS5pKXx8KHIuYSs9Ii8vIiksWG8ocixlLmEpKSxlLmQhPW51bGwmJihyLmErPSIvIixYbyhyLGUuZCkpLGUuZiYxNiYmKHIuYSs9Ii8iKSx0PTAsbj1lLmoubGVuZ3RoO3Q8bjt0KyspdCE9MCYmKHIuYSs9Ii8iKSxYbyhyLGUualt0XSk7ZS5nIT1udWxsJiYoci5hKz0iPyIsWG8ocixlLmcpKX1lbHNlIFhvKHIsZS5hKTtlLmUhPW51bGwmJihyLmErPSIjIixYbyhyLGUuZSkpLGUuYj1yLmF9cmV0dXJuIGUuYn1mdW5jdGlvbiBKX24oZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKGE9bmV3IEcodC5hKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTApLG89UShyLChmdCgpLHppKSksRGUobywxMikmJihmPWwobywxMiksZz1ObXQodCxyLGYuby5hLGYuby5iKSxmLm4uYT1nLmEsZi5uLmI9Zy5iLGxhKGYsbChRKHIsV2MpLDY0KSkpO249bmV3IGx0KHQuZi5hK3QuZC5iK3QuZC5jLHQuZi5iK3QuZC5kK3QuZC5hKSxsKFEodCwoZnQoKSxMdSkpLDIxKS5IYygoSG8oKSx2ZikpPyhydChlLChOdCgpLE1zKSwoUmEoKSxNdSkpLGwoUShlbyhlKSxMdSksMjEpLkZjKCRUKSxrdnQoZSxuLCExKSk6a3Z0KGUsbiwhMCl9ZnVuY3Rpb24gWl9uKGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7bz1uZXcgb3AoZSkseChvLChabigpLEF1KSkscnQobywoTnQoKSxNcyksKFJhKCksTXUpKSxydChvLChmdCgpLHppKSx0LmMuaSksZj1uZXcgZ3UscnQoZix6aSx0LmMpLGxhKGYsYSksTWMoZixvKSxydCh0LmMsamwsbyksZz1uZXcgb3AoZSkseChnLEF1KSxydChnLE1zLE11KSxydChnLHppLHQuZC5pKSx3PW5ldyBndSxydCh3LHppLHQuZCksbGEodyxhKSxNYyh3LGcpLHJ0KHQuZCxqbCxnKSxwbyh0LGYpLEZhKHQsdyksRXkoMCxuLmMubGVuZ3RoKSx4XyhuLmMsMCxvKSwkbihyLmMsZykscnQobyxpVyxwdCgxKSkscnQoZyxpVyxwdCgxKSl9ZnVuY3Rpb24gZUFuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYodz1ZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSxhPVlyKG1vKGZnLGlnKFlyKG1vKG49PW51bGw/MDplcyhuKSxkZykpLDE1KSkpLGc9cEEoZSx0LHcpLGY9Z0EoZSxuLGEpLGcmJmE9PWcuYSYmeWQobixnLmcpKXJldHVybiBuO2lmKGYmJiFyKXRocm93IHVlKG5ldyBZbigia2V5IGFscmVhZHkgcHJlc2VudDogIituKSk7cmV0dXJuIGcmJnU2KGUsZyksZiYmdTYoZSxmKSxvPW5ldyB4SChuLGEsdCx3KSxlUChlLG8sZiksZiYmKGYuZT1udWxsLGYuYz1udWxsKSxnJiYoZy5lPW51bGwsZy5jPW51bGwpLGZndChlKSxnP2cuZzpudWxsfWZ1bmN0aW9uIG1tdChlLHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobz0wO288dDtvKyspe2ZvcihyPTAsZz1vKzE7Zzx0O2crKylyPWJvKGJvKG1vKHZhKGVbb10sVm8pLHZhKGVbZ10sVm8pKSx2YShuW28rZ10sVm8pKSx2YShZcihyKSxWbykpLG5bbytnXT1ZcihyKSxyPXViKHIsMzIpO25bbyt0XT1ZcihyKX1mb3IoZjNuKG4sbix0PDwxKSxyPTAsYT0wLGY9MDthPHQ7KythLGYrKylyPWJvKGJvKG1vKHZhKGVbYV0sVm8pLHZhKGVbYV0sVm8pKSx2YShuW2ZdLFZvKSksdmEoWXIociksVm8pKSxuW2ZdPVlyKHIpLHI9dWIociwzMiksKytmLHI9Ym8ocix2YShuW2ZdLFZvKSksbltmXT1ZcihyKSxyPXViKHIsMzIpO3JldHVybiBufWZ1bmN0aW9uIHZtdChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztpZighWmsodCkpe2Zvcih3PXplKEdlKFB5KG4uYywoTnQoKSx0TSkpKSksRT1sKFB5KG4uYyxfQiksMTQwKSwhRSYmKEU9bmV3IHNfKSxyPW4uYSxhPW51bGwsZz10LktjKCk7Zy5PYigpOylmPWwoZy5QYigpLDEyKSxDPTAsYT8oQz13LEMrPWEuby5iKTpDPUUuZCxvPWh3KHJPKG5ldyBTbSxmKSxlLmYpLGtpKGUuayxmLG8pLHAwKHMwKGkwKHIwKGEwKG5ldyBfZiwwKSx1YShiLk1hdGguY2VpbChDKSkpLHIpLG8pKSxhPWYscj1vO3AwKHMwKGkwKHIwKGEwKG5ldyBfZiwwKSx1YShiLk1hdGguY2VpbChFLmErYS5vLmIpKSksciksbi5kKSl9fWZ1bmN0aW9uIHRBbihlLHQsbixyLGEsbyxmLGcpe3ZhciB3LEUsQyxMLEIsejtyZXR1cm4gej0hMSxCPW8tbi5zLEM9bi50LXQuZisoRT1aQShuLEIsITEpLEUuYSksci5nK2c+Qj8hMTooTD0odz1aQShyLEIsITEpLHcuYSksQytnK0w8PXQuYiYmKGFOKG4sby1uLnMpLG4uYz0hMCxhTihyLG8tbi5zKSxxTihyLG4ucyxuLnQrbi5kK2cpLHIuaz0hMCxDN2Uobi5xLHIpLHo9ITAsYSYmKGJWKHQsciksci5qPXQsZS5jLmxlbmd0aD5mJiYoVU4oKFNuKGYsZS5jLmxlbmd0aCksbChlLmNbZl0sMTg2KSksciksKFNuKGYsZS5jLmxlbmd0aCksbChlLmNbZl0sMTg2KSkuYS5jLmxlbmd0aD09MCYmdDIoZSxmKSkpKSx6KX1mdW5jdGlvbiBuQW4oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodC5VZygiUGFydGl0aW9uIG1pZHByb2Nlc3NpbmciLDEpLGE9bmV3IEN3LElzKEZpKG5ldyBibihudWxsLG5ldyBrbihlLmEsMTYpKSxuZXcgdmopLG5ldyBjWWUoYSkpLGEuZCE9MCl7Zm9yKGc9bCh5YyhLNWUoKG89YS5pLG5ldyBibihudWxsLChvfHwoYS5pPW5ldyBxNShhLGEuYykpKS5OYygpKSkpLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxyPWcuS2MoKSxuPWwoci5QYigpLDE3KTtyLk9iKCk7KWY9bChyLlBiKCksMTcpLFdUbihsKCRpKGEsbiksMjEpLGwoJGkoYSxmKSwyMSkpLG49Zjt0LlZnKCl9fWZ1bmN0aW9uIHdtdChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztpZih0LnA9PTApe2Zvcih0LnA9MSxmPW4sZnx8KGE9bmV3IGJ0LG89KHI9bChLMChPbyksOSksbmV3IFpoKHIsbChjMChyLHIubGVuZ3RoKSw5KSwwKSksZj1uZXcgY2EoYSxvKSksbChmLmEsMTUpLkZjKHQpLHQuaz09KFpuKCksVXMpJiZsKGYuYiwyMSkuRmMobChRKHQsKGZ0KCksV2MpKSw2NCkpLHc9bmV3IEcodC5qKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoZz1sKHJlKHcpLDEyKSxDPXJnKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsW25ldyBUNShnKSxuZXcgQzgoZyldKSkpO2pyKEMpOylFPWwoeHIoQyksMTIpLHdtdChlLEUuaSxmKTtyZXR1cm4gZn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBZQShlLHQpe3ZhciBuLHIsYSxvLGY7aWYoZS5BYil7aWYoZS5BYil7aWYoZj1lLkFiLmksZj4wKXtpZihhPWwoZS5BYi5nLDIwMzMpLHQ9PW51bGwpe2ZvcihvPTA7bzxmOysrbylpZihuPWFbb10sbi5kPT1udWxsKXJldHVybiBufWVsc2UgZm9yKG89MDtvPGY7KytvKWlmKG49YVtvXSx2bih0LG4uZCkpcmV0dXJuIG59fWVsc2UgaWYodD09bnVsbCl7Zm9yKHI9bmV3IG9yKGUuQWIpO3IuZSE9ci5pLmdjKCk7KWlmKG49bChncihyKSw1OTgpLG4uZD09bnVsbClyZXR1cm4gbn1lbHNlIGZvcihyPW5ldyBvcihlLkFiKTtyLmUhPXIuaS5nYygpOylpZihuPWwoZ3IociksNTk4KSx2bih0LG4uZCkpcmV0dXJuIG59cmV0dXJuIG51bGx9ZnVuY3Rpb24gckFuKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZTt6PXBtbihlLEQ3ZSh0KSxhKSxwN2UoeixZZyhhLFBkKSkseT1udWxsLFY9YSxKPWFBKFYsdjR0KSx0ZT1uZXcgUlhlKHopLGQ5bih0ZS5hLEopLGZlPWFBKFYsImVuZFBvaW50IiksVGU9bmV3IHFYZSh6KSxmOW4oVGUuYSxmZSksTWU9QXcoViwkRyksJGU9bmV3IFVYZSh6KSxleG4oJGUuYSxNZSksTD1ZZyhhLGdTZSksbz1uZXcgd3R0KGUseiksamZuKG8uYSxvLmIsTCksQj1ZZyhhLGRTZSksZj1uZXcgeXR0KGUseiksJGZuKGYuYSxmLmIsQiksRT1BdyhhLGJTZSksZz1uZXcgeHR0KG4seiksQjduKGcuYixnLmEsRSksQz1BdyhhLHBTZSksdz1uZXcga3R0KHIseiksRjduKHcuYix3LmEsQyl9ZnVuY3Rpb24gdmtlKGUsdCxuKXt2YXIgcixhLG8sZixnO3N3aXRjaChnPW51bGwsdC5nKXtjYXNlIDE6Zm9yKGE9bmV3IEcoZS5qKTthLmE8YS5jLmMubGVuZ3RoOylpZihyPWwocmUoYSksMTIpLFJ0KEJ0KFEociwoZnQoKSxWMWUpKSkpKXJldHVybiByO2c9bmV3IGd1LHJ0KGcsKGZ0KCksVjFlKSwoSG4oKSwhMCkpO2JyZWFrO2Nhc2UgMjpmb3IoZj1uZXcgRyhlLmopO2YuYTxmLmMuYy5sZW5ndGg7KWlmKG89bChyZShmKSwxMiksUnQoQnQoUShvLChmdCgpLEcxZSkpKSkpcmV0dXJuIG87Zz1uZXcgZ3UscnQoZywoZnQoKSxHMWUpLChIbigpLCEwKSl9cmV0dXJuIGcmJihNYyhnLGUpLGxhKGcsbiksajZuKGcubixlLm8sbikpLGd9ZnVuY3Rpb24geW10KGUsdCl7dmFyIG4scixhLG8sZixnO2ZvcihnPS0xLGY9bmV3IG9zLHI9bmV3IE4xKGUuYik7TGMoci5hKXx8TGMoci5iKTspe2ZvcihuPWwoTGMoci5hKT9yZShyLmEpOnJlKHIuYiksMTgpLGc9Yi5NYXRoLm1heChnLHplKEdlKFEobiwoTnQoKSx4MikpKSkpLG4uYz09ZT9JcyhGaShuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IGlaKSxuZXcgV1dlKGYpKTpJcyhGaShuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IHNaKSxuZXcgWVdlKGYpKSxvPVJyKGYsMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDcyKSxucyhhLChmdCgpLEt4KSl8fHJ0KGEsS3gsbik7cmEodCxmKSxDaChmKX1yZXR1cm4gZ31mdW5jdGlvbiBWdyhlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEU7Zz1hP3IuYjpyLmEsIVcwKGUuYSxyKSYmKEU9Zz5uLnMmJmc8bi5jLHc9ITEsbi5lLmIhPTAmJm4uai5iIT0wJiYodz13fChiLk1hdGguYWJzKGctemUoR2UoQmsobi5lKSkpKTxEZCYmYi5NYXRoLmFicyhnLXplKEdlKEJrKG4uaikpKSk8RGQpLHc9d3woYi5NYXRoLmFicyhnLXplKEdlKG8wKG4uZSkpKSk8RGQmJmIuTWF0aC5hYnMoZy16ZShHZShvMChuLmopKSkpPERkKSksKEV8fHcpJiYoZj1sKFEodCwoTnQoKSxjYykpLDc1KSxmfHwoZj1uZXcgYmwscnQodCxjYyxmKSksbz1uZXcgRW8ociksQ3MoZixvLGYuYy5iLGYuYyksbmEoZS5hLG8pKSl9ZnVuY3Rpb24gaUFuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO2lmKGlFbihlLHQsbixyKSlyZXR1cm4hMDtmb3IoZj1uZXcgRyh0LmYpO2YuYTxmLmMuYy5sZW5ndGg7KXtzd2l0Y2gobz1sKHJlKGYpLDMzNCksZz0hMSx3PWUuai10LmorbixFPXcrdC5vLEM9ZS5rLXQuaytyLGE9Qyt0LnAsby5hLmcpe2Nhc2UgMDpnPUNjZShlLHcrby5iLmEsMCx3K28uYy5hLEMtMSk7YnJlYWs7Y2FzZSAxOmc9Q2NlKGUsRSxDK28uYi5hLGUuby0xLEMrby5jLmEpO2JyZWFrO2Nhc2UgMjpnPUNjZShlLHcrby5iLmEsYSx3K28uYy5hLGUucC0xKTticmVhaztkZWZhdWx0Omc9Q2NlKGUsMCxDK28uYi5hLHctMSxDK28uYy5hKX1pZihnKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHNBbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihuLlVnKCJQcm9jZXNzb3Igc2V0IGNvb3JkaW5hdGVzIiwxKSxlLmE9dC5iLmI9PTA/MTp0LmIuYixFPW51bGwscj1Scih0LmIsMCk7IUUmJnIuYiE9ci5kLmM7KUw9bChCcihyKSw0MCksUnQoQnQoUShMLChRaSgpLFZiKSkpKSYmKEU9TCx3PUwuZSx3LmE9bChRKEwsUEIpLDE3KS5hLHcuYj1sKFEoTCxCQiksMTcpLmEpO2c9cGNlKEUpLEM9MTtkbyBnPW85bigoYT1nLG4uZWgoQyksYSkpLEM9Zy5iL2UuYXwwO3doaWxlKGcuYiE9MCk7Zm9yKGY9UnIodC5iLDApO2YuYiE9Zi5kLmM7KW89bChCcihmKSw0MCksbWEoby5lLG5ldyBsdChvLmYuYS8yLG8uZi5iLzIpKTtuLlZnKCl9ZnVuY3Rpb24gYUFuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO2ZvcihuLlVnKGZ5dCwxKSxObChlLmIpLE5sKGUuYSksZz1udWxsLG89UnIodC5iLDApOyFnJiZvLmIhPW8uZC5jOylFPWwoQnIobyksNDApLFJ0KEJ0KFEoRSwoUWkoKSxWYikpKSkmJihnPUUpO2Zvcih3PW5ldyBvcyxDcyh3LGcsdy5jLmIsdy5jKSxYdnQoZSx3KSxDPVJyKHQuYiwwKTtDLmIhPUMuZC5jOylFPWwoQnIoQyksNDApLGY9ZWkoUShFLChRaSgpLGRNKSkpLGE9eHUoZS5iLGYpIT1udWxsP2woeHUoZS5iLGYpLDE3KS5hOjAscnQoRSxQZGUscHQoYSkpLHI9MSsoeHUoZS5hLGYpIT1udWxsP2woeHUoZS5hLGYpLDE3KS5hOjApLHJ0KEUsbkllLHB0KHIpKTtuLlZnKCl9ZnVuY3Rpb24geG10KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSxlMyksIkVMSyBCb3giKSwiQWxnb3JpdGhtIGZvciBwYWNraW5nIG9mIHVuY29ubmVjdGVkIGJveGVzLCBpLmUuIGdyYXBocyB3aXRob3V0IGVkZ2VzLiIpLG5ldyBlaykpKSxndChlLGUzLFh3LEpPZSksZ3QoZSxlMyxKeSwxNSksZ3QoZSxlMyxOUCxwdCgwKSksZ3QoZSxlMyxaQ2UsSXQoWU9lKSksZ3QoZSxlMyx4NixJdChFU3QpKSxndChlLGUzLE54LEl0KFRTdCkpLGd0KGUsZTMsT3gsUHl0KSxndChlLGUzLGhMLEl0KFhPZSkpLGd0KGUsZTMsUHgsSXQoUU9lKSksZ3QoZSxlMyxlU2UsSXQoX2dlKSksZ3QoZSxlMyxTRyxJdChrU3QpKX1mdW5jdGlvbiBrbXQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYoYT1lLmksZj1hLm8uYSxvPWEuby5iLGY8PTAmJm88PTApcmV0dXJuIEN0KCksUGM7c3dpdGNoKEU9ZS5uLmEsQz1lLm4uYixnPWUuby5hLG49ZS5vLmIsdC5nKXtjYXNlIDI6Y2FzZSAxOmlmKEU8MClyZXR1cm4gQ3QoKSxlcjtpZihFK2c+ZilyZXR1cm4gQ3QoKSxhcjticmVhaztjYXNlIDQ6Y2FzZSAzOmlmKEM8MClyZXR1cm4gQ3QoKSxRbjtpZihDK24+bylyZXR1cm4gQ3QoKSxEcn1yZXR1cm4gdz0oRStnLzIpL2Yscj0oQytuLzIpL28sdytyPD0xJiZ3LXI8PTA/KEN0KCksZXIpOncrcj49MSYmdy1yPj0wPyhDdCgpLGFyKTpyPC41PyhDdCgpLFFuKTooQ3QoKSxEcil9ZnVuY3Rpb24gb0FuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3Iobj0hMSxDPXplKEdlKFEodCwoTnQoKSxtMykpKSksVj1BYipDLGE9bmV3IEcodC5iKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1sKHJlKGEpLDMwKSxFPW5ldyBHKHIuYSksbz1sKHJlKEUpLDEwKSxMPXM1ZShlLmFbby5wXSk7RS5hPEUuYy5jLmxlbmd0aDspZz1sKHJlKEUpLDEwKSxCPXM1ZShlLmFbZy5wXSksTCE9QiYmKHo9ajUoZS5iLG8sZyksZj1vLm4uYitvLm8uYitvLmQuYStMLmEreix3PWcubi5iLWcuZC5kK0IuYSxmPncrViYmKEo9TC5nK0IuZyxCLmE9KEIuZypCLmErTC5nKkwuYSkvSixCLmc9SixMLmY9QixuPSEwKSksbz1nLEw9QjtyZXR1cm4gbn1mdW5jdGlvbiBFbXQoZSx0LG4scixhLG8sZil7dmFyIGcsdyxFLEMsTCxCO2ZvcihCPW5ldyAkOCxFPXQuS2MoKTtFLk9iKCk7KWZvcihnPWwoRS5QYigpLDg1MyksTD1uZXcgRyhnLlJmKCkpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxODcpLHFlKEMub2YoKHBpKCksSWdlKSkpPT09cWUoKEYxKCksckMpKSYmKHRtdChCLEMsITEscixhLG8sZiksJEEoZSxCKSk7Zm9yKHc9bi5LYygpO3cuT2IoKTspZm9yKGc9bCh3LlBiKCksODUzKSxMPW5ldyBHKGcuUmYoKSk7TC5hPEwuYy5jLmxlbmd0aDspQz1sKHJlKEwpLDE4NykscWUoQy5vZigocGkoKSxJZ2UpKSk9PT1xZSgoRjEoKSxfNCkpJiYodG10KEIsQywhMCxyLGEsbyxmKSwkQShlLEIpKX1mdW5jdGlvbiBjQW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFO2ZvcihmPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO2YuZSE9Zi5pLmdjKCk7KWZvcihvPWwoZ3IoZiksMjcpLGE9bmV3IGhyKGRyKGNwKG8pLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksNzQpLCFxQShyKSYmIXFBKHIpJiYhcXcocikmJih3PWwoaGMoem8obi5mLG8pKSw0MCksRT1sKGNyKG4sYmMobChPZSgoIXIuYyYmKHIuYz1uZXcgTG4oX3Isciw1LDgpKSxyLmMpLDApLDg0KSkpLDQwKSx3JiZFJiYoZz1uZXcgTjVlKHcsRSkscnQoZywoUWkoKSxnTSkscikscGMoZyxyKSx1aSh3LmQsZyksdWkoRS5iLGcpLHVpKHQuYSxnKSkpfWZ1bmN0aW9uIHVBbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7Zm9yKHc9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7dy5PYigpOylnPWwody5QYigpLDExNyksYT1nLmM/SGl0KGcuYyk6MCxhPjA/Zy5hPyhFPWcuYi5NZigpLmIsYT5FJiYoZS52fHxnLmMuZC5jLmxlbmd0aD09MT8oZj0oYS1FKS8yLGcuZC5kPWYsZy5kLmE9Zik6KG49bChqdChnLmMuZCwwKSwxODcpLk1mKCkuYixyPShuLUUpLzIsZy5kLmQ9Yi5NYXRoLm1heCgwLHIpLGcuZC5hPWEtci1FKSkpOmcuZC5hPWUudCthOldfKGUudSkmJihvPSR4ZShnLmIpLG8uZDwwJiYoZy5kLmQ9LW8uZCksby5kK28uYT5nLmIuTWYoKS5iJiYoZy5kLmE9by5kK28uYS1nLmIuTWYoKS5iKSl9ZnVuY3Rpb24gYjAoKXtiMD1VLHF4PW5ldyBIYSgocGkoKSxYQikscHQoMSkpLGtLPW5ldyBIYShFdiw4MCksbjh0PW5ldyBIYShBTmUsNSksRzd0PW5ldyBIYShaNixsVCksZTh0PW5ldyBIYSh6Z2UscHQoMSkpLHQ4dD1uZXcgSGEocWdlLChIbigpLCEwKSksbkFlPW5ldyBsdyg1MCksSjd0PW5ldyBIYShfMixuQWUpLFpfZT1XQixyQWU9X00sSzd0PW5ldyBIYShEZ2UsITEpLHRBZT1ZQixYN3Q9QzQsUTd0PVViLFk3dD1rdixXN3Q9cjcsWjd0PVM0LGVBZT0oWHhlKCksajd0KSxaMGU9SDd0LHhLPVI3dCxKMGU9JDd0LGlBZT1xN3Qsczh0PUFNLGE4dD1hWSxpOHQ9UUIscjh0PXNZLHNBZT0oZHgoKSxMNCksbmV3IEhhKGk5LHNBZSl9ZnVuY3Rpb24gbEFuKGUsdCl7dmFyIG47c3dpdGNoKGdOKGUpKXtjYXNlIDY6cmV0dXJuIElhKHQpO2Nhc2UgNzpyZXR1cm4gZnkodCk7Y2FzZSA4OnJldHVybiBoeSh0KTtjYXNlIDM6cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJihuPWdOKHQpLCEobj49MTQmJm48PTE2KSk7Y2FzZSAxMTpyZXR1cm4gdCE9bnVsbCYmdHlwZW9mIHQ9PT1PbGU7Y2FzZSAxMjpyZXR1cm4gdCE9bnVsbCYmKHR5cGVvZiB0PT09d1B8fHR5cGVvZiB0PT1PbGUpO2Nhc2UgMDpyZXR1cm4gaXVlKHQsZS5fX2VsZW1lbnRUeXBlSWQkKTtjYXNlIDI6cmV0dXJuIFJhZSh0KSYmdC5UbSE9PXhlO2Nhc2UgMTpyZXR1cm4gUmFlKHQpJiZ0LlRtIT09eGV8fGl1ZSh0LGUuX19lbGVtZW50VHlwZUlkJCk7ZGVmYXVsdDpyZXR1cm4hMH19ZnVuY3Rpb24gVG10KGUsdCl7dmFyIG4scixhLG87cmV0dXJuIHI9Yi5NYXRoLm1pbihiLk1hdGguYWJzKGUuYy0odC5jK3QuYikpLGIuTWF0aC5hYnMoZS5jK2UuYi10LmMpKSxvPWIuTWF0aC5taW4oYi5NYXRoLmFicyhlLmQtKHQuZCt0LmEpKSxiLk1hdGguYWJzKGUuZCtlLmEtdC5kKSksbj1iLk1hdGguYWJzKGUuYytlLmIvMi0odC5jK3QuYi8yKSksbj5lLmIvMit0LmIvMnx8KGE9Yi5NYXRoLmFicyhlLmQrZS5hLzItKHQuZCt0LmEvMikpLGE+ZS5hLzIrdC5hLzIpPzE6bj09MCYmYT09MD8wOm49PTA/by9hKzE6YT09MD9yL24rMTpiLk1hdGgubWluKHIvbixvL2EpKzF9ZnVuY3Rpb24gaEFuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKG89MCxnPTAsdz0wLGE9bmV3IEcoZS5mLmUpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxNTMpLHQhPXImJihmPWUuaVt0LmFdW3IuYV0sbys9ZixuPXBiKHQuZCxyLmQpLG4+MCYmZS5kIT0obEEoKSxuMWUpJiYoZys9Ziooci5kLmErZS5hW3QuYV1bci5hXSoodC5kLmEtci5kLmEpL24pKSxuPjAmJmUuZCE9KGxBKCksZTFlKSYmKHcrPWYqKHIuZC5iK2UuYVt0LmFdW3IuYV0qKHQuZC5iLXIuZC5iKS9uKSkpO3N3aXRjaChlLmQuZyl7Y2FzZSAxOnJldHVybiBuZXcgbHQoZy9vLHQuZC5iKTtjYXNlIDI6cmV0dXJuIG5ldyBsdCh0LmQuYSx3L28pO2RlZmF1bHQ6cmV0dXJuIG5ldyBsdChnL28sdy9vKX19ZnVuY3Rpb24gQ210KGUpe3ZhciB0LG4scixhLG8sZjtmb3Iobj0oIWUuYSYmKGUuYT1uZXcgWXMocWgsZSw1KSksZS5hKS5pKzIsZj1uZXcgQnUobiksdnQoZixuZXcgbHQoZS5qLGUuaykpLElzKG5ldyBibihudWxsLCghZS5hJiYoZS5hPW5ldyBZcyhxaCxlLDUpKSxuZXcga24oZS5hLDE2KSkpLG5ldyBOWGUoZikpLHZ0KGYsbmV3IGx0KGUuYixlLmMpKSx0PTE7dDxmLmMubGVuZ3RoLTE7KXI9KFNuKHQtMSxmLmMubGVuZ3RoKSxsKGYuY1t0LTFdLDgpKSxhPShTbih0LGYuYy5sZW5ndGgpLGwoZi5jW3RdLDgpKSxvPShTbih0KzEsZi5jLmxlbmd0aCksbChmLmNbdCsxXSw4KSksci5hPT1hLmEmJmEuYT09by5hfHxyLmI9PWEuYiYmYS5iPT1vLmI/dDIoZix0KTorK3Q7cmV0dXJuIGZ9ZnVuY3Rpb24gU210KGUsdCl7VEUoKTt2YXIgbixyLGEsbyxmO2lmKGY9bChRKGUuaSwoTnQoKSxNcykpLDEwMSksbz1lLmouZy10LmouZyxvIT0wfHwhKGY9PShSYSgpLFR2KXx8Zj09VGd8fGY9PU11KSlyZXR1cm4gMDtpZihmPT0oUmEoKSxUdikmJihuPWwoUShlLGsyKSwxNykscj1sKFEodCxrMiksMTcpLG4mJnImJihhPW4uYS1yLmEsYSE9MCkpKXJldHVybiBhO3N3aXRjaChlLmouZyl7Y2FzZSAxOnJldHVybiBZaShlLm4uYSx0Lm4uYSk7Y2FzZSAyOnJldHVybiBZaShlLm4uYix0Lm4uYik7Y2FzZSAzOnJldHVybiBZaSh0Lm4uYSxlLm4uYSk7Y2FzZSA0OnJldHVybiBZaSh0Lm4uYixlLm4uYik7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgbmMoekVlKSl9fWZ1bmN0aW9uIF9tdChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihuPXRydChhZXQoaWV0KHNldChuZXcgT3dlLHQpLG5ldyBNSCh0LmUpKSxaOHQpLGUuYSksdC5qLmMubGVuZ3RoPT0wfHxQbHQobChqdCh0LmosMCksNjApLmEsbiksdz1uZXcgQmllLGtpKGUuZSxuLHcpLGY9bmV3IEtzLGc9bmV3IEtzLG89bmV3IEcodC5rKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTgpLG5hKGYsYS5jKSxuYShnLGEuZCk7cj1mLmEuZ2MoKS1nLmEuZ2MoKSxyPDA/KFNOKHcsITAsKEpzKCksdWMpKSxTTih3LCExLHZjKSk6cj4wJiYoU04odywhMSwoSnMoKSx1YykpLFNOKHcsITAsdmMpKSxWdSh0LmcsbmV3IGpldChlLG4pKSxraShlLmcsdCxuKX1mdW5jdGlvbiBBbXQoKXtBbXQ9VTt2YXIgZTtmb3Iocl9lPWhlKGxlKFZyLDEpLGRpLDI4LDE1LFstMSwtMSwzMCwxOSwxNSwxMywxMSwxMSwxMCw5LDksOCw4LDgsOCw3LDcsNyw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw1XSksQTBlPVdlKFZyLGRpLDI4LDM3LDE1LDEpLGI2dD1oZShsZShWciwxKSxkaSwyOCwxNSxbLTEsLTEsNjMsNDAsMzIsMjgsMjUsMjMsMjEsMjAsMTksMTksMTgsMTgsMTcsMTcsMTYsMTYsMTYsMTUsMTUsMTUsMTUsMTQsMTQsMTQsMTQsMTQsMTQsMTMsMTMsMTMsMTMsMTMsMTMsMTMsMTNdKSxpX2U9V2Uobm0sYWhlLDI4LDM3LDE0LDEpLGU9MjtlPD0zNjtlKyspQTBlW2VdPXVhKGIuTWF0aC5wb3coZSxyX2VbZV0pKSxpX2VbZV09S04oRVAsQTBlW2VdKX1mdW5jdGlvbiBmQW4oZSl7dmFyIHQ7aWYoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pIT0xKXRocm93IHVlKG5ldyBZbihuNHQrKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pKSk7cmV0dXJuIHQ9bmV3IGJsLFROKGwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCkpJiZLYSh0LGJ3dChlLFROKGwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCkpLCExKSksVE4obChPZSgoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLDApLDg0KSkmJkthKHQsYnd0KGUsVE4obChPZSgoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLDApLDg0KSksITApKSx0fWZ1bmN0aW9uIExtdChlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKHQuZD9hPWUuYS5jPT0oeGQoKSx3Myk/a2EodC5iKTpxcyh0LmIpOmE9ZS5hLmM9PSh4ZCgpLFQyKT9rYSh0LmIpOnFzKHQuYiksbz0hMSxyPW5ldyBocihkcihhLmEuS2MoKSxuZXcgaikpO2pyKHIpOylpZihuPWwoeHIociksMTgpLGY9UnQoZS5hLmZbZS5hLmdbdC5iLnBdLnBdKSwhKCFmJiYhRG8obikmJm4uYy5pLmM9PW4uZC5pLmMpJiYhKFJ0KGUuYS5uW2UuYS5nW3QuYi5wXS5wXSl8fFJ0KGUuYS5uW2UuYS5nW3QuYi5wXS5wXSkpJiYobz0hMCxXMChlLmIsZS5hLmdbZjduKG4sdC5iKS5wXSkpKXJldHVybiB0LmM9ITAsdC5hPW4sdDtyZXR1cm4gdC5jPW8sdC5hPW51bGwsdH1mdW5jdGlvbiB3a2UoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFO2lmKHI9bi5nYygpLHI9PTApcmV0dXJuITE7aWYoZS5QaigpKWlmKHc9ZS5RaigpLEE4ZShlLHQsbiksZj1yPT0xP2UuSWooMyxudWxsLG4uS2MoKS5QYigpLHQsdyk6ZS5Jaig1LG51bGwsbix0LHcpLGUuTWooKSl7Zm9yKGc9cjwxMDA/bnVsbDpuZXcgbmIociksbz10K3IsYT10O2E8bzsrK2EpRT1lLnhqKGEpLGc9ZS5OaihFLGcpLGc9ZztnPyhnLm5qKGYpLGcub2ooKSk6ZS5KaihmKX1lbHNlIGUuSmooZik7ZWxzZSBpZihBOGUoZSx0LG4pLGUuTWooKSl7Zm9yKGc9cjwxMDA/bnVsbDpuZXcgbmIociksbz10K3IsYT10O2E8bzsrK2EpZz1lLk5qKGUueGooYSksZyk7ZyYmZy5vaigpfXJldHVybiEwfWZ1bmN0aW9uIE1tdChlLHQsbil7dmFyIHIsYSxvLGYsZztyZXR1cm4gZS5QaigpPyhhPW51bGwsbz1lLlFqKCkscj1lLklqKDEsZz0oZj1lLkRqKHQsZS5aaSh0LG4pKSxmKSxuLHQsbyksZS5NaigpJiYhKGUuWWkoKSYmZz9QaShnLG4pOnFlKGcpPT09cWUobikpJiYoZyYmKGE9ZS5PaihnLGEpKSxhPWUuTmoobixhKSksYT8oYS5uaihyKSxhLm9qKCkpOmUuSmoociksZyk6KGc9KGY9ZS5Eaih0LGUuWmkodCxuKSksZiksZS5NaigpJiYhKGUuWWkoKSYmZz9QaShnLG4pOnFlKGcpPT09cWUobikpJiYoYT1udWxsLGcmJihhPWUuT2ooZyxudWxsKSksYT1lLk5qKG4sYSksYSYmYS5vaigpKSxnKX1mdW5jdGlvbiB5a2UoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYoZS5lPXQsZS5mPWwoUSh0LChiYigpLEVLKSksMjM0KSxqeG4odCksZS5kPWIuTWF0aC5tYXgodC5lLmMubGVuZ3RoKjE2K3QuYy5jLmxlbmd0aCwyNTYpLCFSdChCdChRKHQsKGIwKCksWl9lKSkpKSlmb3IoQz1lLmUuZS5jLmxlbmd0aCx3PW5ldyBHKHQuZSk7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDE1MyksRT1nLmQsRS5hPVk0ZShlLmYpKkMsRS5iPVk0ZShlLmYpKkM7Zm9yKG49dC5iLG89bmV3IEcodC5jKTtvLmE8by5jLmMubGVuZ3RoOylpZihhPWwocmUobyksMjkwKSxyPWwoUShhLGlBZSksMTcpLmEscj4wKXtmb3IoZj0wO2Y8cjtmKyspdnQobixuZXcgVnN0KGEpKTtZcHQoYSl9fWZ1bmN0aW9uIERtdChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKEI9bmV3IHl5KGUuWmcoKSksZTEodCxfaSxCKSxuJiYhZS5YZygpLmEuZGMoKSlmb3IoQz1uZXcgJHAsZTEodCwibG9ncyIsQyksZz0wLFY9bmV3IHlvKGUuWGcoKS5iLktjKCkpO1YuYi5PYigpOyl6PWVpKFYuYi5QYigpKSxMPW5ldyB5eSh6KSxfeShDLGcpLHhvZShDLGcsTCksKytnO2lmKHImJihFPW5ldyB2ayhlLldnKCkpLGUxKHQsImV4ZWN1dGlvblRpbWUiLEUpKSwhZS5ZZygpLmEuZGMoKSlmb3IoZj1uZXcgJHAsZTEodCxXZmUsZiksZz0wLG89bmV3IHlvKGUuWWcoKS5iLktjKCkpO28uYi5PYigpOylhPWwoby5iLlBiKCksODcxKSx3PW5ldyBNOCxfeShmLGcpLHhvZShmLGcsdyksRG10KGEsdyxuLHIpLCsrZ31mdW5jdGlvbiB4a2UoKXt4a2U9VSx1c2UoKSxMQXQ9bmV3IGttLGhlKGxlKG85LDIpLGR0LDM4MSwwLFtoZShsZShvOSwxKSxpSyw2MDAsMCxbbmV3IEpJKEI1dCldKV0pLGhlKGxlKG85LDIpLGR0LDM4MSwwLFtoZShsZShvOSwxKSxpSyw2MDAsMCxbbmV3IEpJKEZTZSldKV0pLGhlKGxlKG85LDIpLGR0LDM4MSwwLFtoZShsZShvOSwxKSxpSyw2MDAsMCxbbmV3IEpJKEY1dCldKSxoZShsZShvOSwxKSxpSyw2MDAsMCxbbmV3IEpJKEZTZSldKV0pLG5ldyBvYigiLTEiKSxoZShsZShvOSwyKSxkdCwzODEsMCxbaGUobGUobzksMSksaUssNjAwLDAsW25ldyBKSSgiXFxjKyIpXSldKSxuZXcgb2IoIjAiKSxuZXcgb2IoIjAiKSxuZXcgb2IoIjEiKSxuZXcgb2IoIjAiKSxuZXcgb2IoSDV0KX1mdW5jdGlvbiBkQW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IodC5VZygiSHlwZXJub2RlcyBwcm9jZXNzaW5nIiwxKSxhPW5ldyBHKGUuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwzMCksZz1uZXcgRyhyLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWlmKGY9bChyZShnKSwxMCksUnQoQnQoUShmLChOdCgpLGJXKSkpKSYmZi5qLmMubGVuZ3RoPD0yKXtmb3IoTD0wLEM9MCxuPTAsbz0wLEU9bmV3IEcoZi5qKTtFLmE8RS5jLmMubGVuZ3RoOylzd2l0Y2godz1sKHJlKEUpLDEyKSx3LmouZyl7Y2FzZSAxOisrTDticmVhaztjYXNlIDI6KytDO2JyZWFrO2Nhc2UgMzorK247YnJlYWs7Y2FzZSA0Oisrb31MPT0wJiZuPT0wJiZtSW4oZSxmLG88PUMpfXQuVmcoKX1mdW5jdGlvbiBnQW4oZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTDtmb3IoZj1uZXcgRyh0KTtmLmE8Zi5jLmMubGVuZ3RoOyl7aWYobz1sKHJlKGYpLDE4KSx3PW8uYyxuLmEuX2IodykpRT0oU3coKSxIYik7ZWxzZSBpZihyLmEuX2IodykpRT0oU3coKSxLNik7ZWxzZSB0aHJvdyB1ZShuZXcgWW4oIlNvdXJjZSBwb3J0IG11c3QgYmUgaW4gb25lIG9mIHRoZSBwb3J0IHNldHMuIikpO2lmKEM9by5kLG4uYS5fYihDKSlMPShTdygpLEhiKTtlbHNlIGlmKHIuYS5fYihDKSlMPShTdygpLEs2KTtlbHNlIHRocm93IHVlKG5ldyBZbigiVGFyZ2V0IHBvcnQgbXVzdCBiZSBpbiBvbmUgb2YgdGhlIHBvcnQgc2V0cy4iKSk7Zz1uZXcgX3B0KG8sRSxMKSxraShlLmIsbyxnKSwkbihhLmMsZyl9fWZ1bmN0aW9uIGpVKGUpe3ZhciB0LG47cmV0dXJuIGUuYyYmZS5jLlZoKCkmJihuPWwoZS5jLDU0KSxlLmM9bCh5YihlLG4pLDE0MiksZS5jIT1uJiYoZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsOSwyLG4sZS5jKSksRGUoZS5DYiw0MTEpP2UuRGI+PjE2PT0tMTUmJmUuQ2IuWWgoKSYmcW9lKG5ldyBGb2UoZS5DYiw5LDEzLG4sZS5jLGYyKFhsKGwoZS5DYiw2MikpLGUpKSk6RGUoZS5DYiw5MCkmJmUuRGI+PjE2PT0tMjMmJmUuQ2IuWWgoKSYmKHQ9ZS5jLERlKHQsOTApfHwodD0oVG4oKSxLZikpLERlKG4sOTApfHwobj0oVG4oKSxLZikpLHFvZShuZXcgRm9lKGUuQ2IsOSwxMCxuLHQsZjIoZHUobChlLkNiLDI5KSksZSkpKSkpKSxlLmN9ZnVuY3Rpb24gcEFuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEw7Zm9yKG4uVWcoIkh5cGVyZWRnZSBtZXJnaW5nIiwxKSxqRW4oZSx0KSx3PW5ldyBVYSh0LmIsMCk7dy5iPHcuZC5nYygpOylpZihnPShtcih3LmI8dy5kLmdjKCkpLGwody5kLlhiKHcuYz13LmIrKyksMzApKSxDPWcuYSxDLmMubGVuZ3RoIT0wKWZvcihyPW51bGwsYT1udWxsLG89bnVsbCxmPW51bGwsRT0wO0U8Qy5jLmxlbmd0aDtFKyspcj0oU24oRSxDLmMubGVuZ3RoKSxsKEMuY1tFXSwxMCkpLGE9ci5rLGE9PShabigpLEFhKSYmZj09QWEmJihMPWxMbihyLG8pLEwuYSYmKGxTbihyLG8sTC5iLEwuYyksU24oRSxDLmMubGVuZ3RoKSxkM2UoQy5jLEUsMSksLS1FLHI9byxhPWYpKSxvPXIsZj1hO24uVmcoKX1mdW5jdGlvbiBJbXQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtpZih0PT1uKXJldHVybiEwO2lmKHQ9QTllKGUsdCksbj1BOWUoZSxuKSxyPWh1ZSh0KSxyKXtpZihDPWh1ZShuKSxDIT1yKXJldHVybiBDPyh3PXIubWsoKSxWPUMubWsoKSx3PT1WJiZ3IT1udWxsKTohMTtpZihmPSghdC5kJiYodC5kPW5ldyBZcyhXbyx0LDEpKSx0LmQpLG89Zi5pLEI9KCFuLmQmJihuLmQ9bmV3IFlzKFdvLG4sMSkpLG4uZCksbz09Qi5pKXtmb3IoRT0wO0U8bzsrK0UpaWYoYT1sKE9lKGYsRSksODkpLEw9bChPZShCLEUpLDg5KSwhSW10KGUsYSxMKSlyZXR1cm4hMX1yZXR1cm4hMH1lbHNlIHJldHVybiBnPXQuZSx6PW4uZSxnPT16fWZ1bmN0aW9uIE9tdChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMO2lmKHVwKGUuZSx0KSl7Zm9yKEw9V3UoZS5lLkRoKCksdCksbz1sKGUuZywxMjQpLEM9bnVsbCx3PS0xLGc9LTEsYT0wLEU9MDtFPGUuaTsrK0UpZj1vW0VdLEwuYW0oZi5MaygpKSYmKGE9PW4mJih3PUUpLGE9PXImJihnPUUsQz1mLm1kKCkpLCsrYSk7aWYodz09LTEpdGhyb3cgdWUobmV3IHRjKFFmZStuK2F2K2EpKTtpZihnPT0tMSl0aHJvdyB1ZShuZXcgdGMoSmZlK3IrYXYrYSkpO3JldHVybiBBQShlLHcsZyksaGgoZS5lKSYmeGsoZSxkYihlLDcsdCxwdChyKSxDLG4sITApKSxDfWVsc2UgdGhyb3cgdWUobmV3IFluKCJUaGUgZmVhdHVyZSBtdXN0IGJlIG1hbnktdmFsdWVkIHRvIHN1cHBvcnQgbW92ZSIpKX1mdW5jdGlvbiBObXQoZSx0LG4scil7dmFyIGEsbyxmLGcsdztzd2l0Y2godz1uZXcgRW8odC5uKSx3LmErPXQuby5hLzIsdy5iKz10Lm8uYi8yLGc9emUoR2UoUSh0LChOdCgpLG00KSkpKSxvPWUuZixmPWUuZCxhPWUuYyxsKFEodCwoZnQoKSxXYykpLDY0KS5nKXtjYXNlIDE6dy5hKz1mLmIrYS5hLW4vMix3LmI9LXItZyx0Lm4uYj0tKGYuZCtnK2EuYik7YnJlYWs7Y2FzZSAyOncuYT1vLmErZi5iK2YuYytnLHcuYis9Zi5kK2EuYi1yLzIsdC5uLmE9by5hK2YuYytnLWEuYTticmVhaztjYXNlIDM6dy5hKz1mLmIrYS5hLW4vMix3LmI9by5iK2YuZCtmLmErZyx0Lm4uYj1vLmIrZi5hK2ctYS5iO2JyZWFrO2Nhc2UgNDp3LmE9LW4tZyx3LmIrPWYuZCthLmItci8yLHQubi5hPS0oZi5iK2crYS5hKX1yZXR1cm4gd31mdW5jdGlvbiBQbXQoZSl7dmFyIHQsbixyLGEsbyxmO3JldHVybiByPW5ldyBvN2UscGMocixlKSxxZShRKHIsKE50KCksUmgpKSk9PT1xZSgoSnMoKSxKMSkpJiZydChyLFJoLHpWKHIpKSxRKHIsKFFIKCksa00pKT09bnVsbCYmKGY9bChZZ3QoZSksMTY3KSxydChyLGtNLE1xKGYub2Yoa00pKSkpLHJ0KHIsKGZ0KCksemkpLGUpLHJ0KHIsTHUsKHQ9bChLMChGMWUpLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpKSxhPWdEbigoZHMoZSkmJihhdygpLG5ldyBKdihkcyhlKSkpLGF3KCksbmV3IHJhZShkcyhlKT9uZXcgSnYoZHMoZSkpOm51bGwsZSkpLHZjKSxvPWwoUShyLFdNZSksMTA3KSxuPXIuZCxkb3QobixvKSxkb3QobixhKSxyfWZ1bmN0aW9uIGJBbihlLHQsbil7dmFyIHIsYTtyPXQuYy5pLGE9bi5kLmksci5rPT0oWm4oKSxBYSk/KHJ0KGUsKGZ0KCksbzEpLGwoUShyLG8xKSwxMikpLHJ0KGUsJGYsbChRKHIsJGYpLDEyKSkscnQoZSxmNCxCdChRKHIsZjQpKSkpOnIuaz09Y3U/KHJ0KGUsKGZ0KCksbzEpLGwoUShyLG8xKSwxMikpLHJ0KGUsJGYsbChRKHIsJGYpLDEyKSkscnQoZSxmNCwoSG4oKSwhMCkpKTphLms9PWN1PyhydChlLChmdCgpLG8xKSxsKFEoYSxvMSksMTIpKSxydChlLCRmLGwoUShhLCRmKSwxMikpLHJ0KGUsZjQsKEhuKCksITApKSk6KHJ0KGUsKGZ0KCksbzEpLHQuYykscnQoZSwkZixuLmQpKX1mdW5jdGlvbiBtQW4oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKGUubz1uZXcgejUscj1uZXcgb3MsZj1uZXcgRyhlLmUuYSk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDEyNSksWjUobykuYy5sZW5ndGg9PTEmJkNzKHIsbyxyLmMuYixyLmMpO2Zvcig7ci5iIT0wOylvPWwoci5iPT0wP251bGw6KG1yKHIuYiE9MCksYWYocixyLmEuYSkpLDEyNSksWjUobykuYy5sZW5ndGghPTAmJih0PWwoanQoWjUobyksMCksMjE4KSxuPW8uZy5hLmMubGVuZ3RoPjAsZz1IVih0LG8pLEl5ZShuP2cuYjpnLmcsdCksWjUoZykuYy5sZW5ndGg9PTEmJkNzKHIsZyxyLmMuYixyLmMpLGE9bmV3IGNhKG8sdCksZ2IoZS5vLGEpLGFsKGUuZS5hLG8pKX1mdW5jdGlvbiBCbXQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdztyZXR1cm4gcj1iLk1hdGguYWJzKG1IKGUuYikuYS1tSCh0LmIpLmEpLGc9Yi5NYXRoLmFicyhtSChlLmIpLmItbUgodC5iKS5iKSxhPTAsdz0wLG49MSxmPTEscj5lLmIuYi8yK3QuYi5iLzImJihhPWIuTWF0aC5taW4oYi5NYXRoLmFicyhlLmIuYy0odC5iLmMrdC5iLmIpKSxiLk1hdGguYWJzKGUuYi5jK2UuYi5iLXQuYi5jKSksbj0xLWEvciksZz5lLmIuYS8yK3QuYi5hLzImJih3PWIuTWF0aC5taW4oYi5NYXRoLmFicyhlLmIuZC0odC5iLmQrdC5iLmEpKSxiLk1hdGguYWJzKGUuYi5kK2UuYi5hLXQuYi5kKSksZj0xLXcvZyksbz1iLk1hdGgubWluKG4sZiksKDEtbykqYi5NYXRoLnNxcnQocipyK2cqZyl9ZnVuY3Rpb24gdkFuKGUpe3ZhciB0LG4scixhO2ZvcihBbGUoZSxlLmUsZS5mLChTdygpLEhiKSwhMCxlLmMsZS5pKSxBbGUoZSxlLmUsZS5mLEhiLCExLGUuYyxlLmkpLEFsZShlLGUuZSxlLmYsSzYsITAsZS5jLGUuaSksQWxlKGUsZS5lLGUuZixLNiwhMSxlLmMsZS5pKSxnQW4oZSxlLmMsZS5lLGUuZixlLmkpLHI9bmV3IFVhKGUuaSwwKTtyLmI8ci5kLmdjKCk7KWZvcih0PShtcihyLmI8ci5kLmdjKCkpLGwoci5kLlhiKHIuYz1yLmIrKyksMTMxKSksYT1uZXcgVWEoZS5pLHIuYik7YS5iPGEuZC5nYygpOyluPShtcihhLmI8YS5kLmdjKCkpLGwoYS5kLlhiKGEuYz1hLmIrKyksMTMxKSksaU1uKHQsbik7X0luKGUuaSxsKFEoZS5kLChmdCgpLFh4KSksMjM0KSksek1uKGUuaSl9ZnVuY3Rpb24gdWxlKGUsdCl7dmFyIG4scjtpZih0IT1udWxsKXtpZihyPXp3KGUpLHIpaWYoci5pJjEpe2lmKHI9PWloKXJldHVybiBoeSh0KTtpZihyPT1WcilyZXR1cm4gRGUodCwxNyk7aWYocj09QjQpcmV0dXJuIERlKHQsMTYxKTtpZihyPT1BbClyZXR1cm4gRGUodCwyMjIpO2lmKHI9PWtmKXJldHVybiBEZSh0LDE4MCk7aWYocj09TmEpcmV0dXJuIGZ5KHQpO2lmKHI9PWg3KXJldHVybiBEZSh0LDE5MSk7aWYocj09bm0pcmV0dXJuIERlKHQsMTY4KX1lbHNlIHJldHVybiBpcSgpLG49bChjcihrWSxyKSw1NyksIW58fG4uZmsodCk7ZWxzZSBpZihEZSh0LDU4KSlyZXR1cm4gZS5kbChsKHQsNTgpKX1yZXR1cm4hMX1mdW5jdGlvbiBra2UoKXtra2U9VTt2YXIgZSx0LG4scixhLG8sZixnLHc7Zm9yKG5kPVdlKEFsLEM2LDI4LDI1NSwxNSwxKSxOMj1XZShrZixBZCwyOCw2NCwxNSwxKSx0PTA7dDwyNTU7dCsrKW5kW3RdPS0xO2ZvcihuPTkwO24+PTY1O24tLSluZFtuXT1uLTY1PDwyND4+MjQ7Zm9yKHI9MTIyO3I+PTk3O3ItLSluZFtyXT1yLTk3KzI2PDwyND4+MjQ7Zm9yKGE9NTc7YT49NDg7YS0tKW5kW2FdPWEtNDgrNTI8PDI0Pj4yNDtmb3IobmRbNDNdPTYyLG5kWzQ3XT02MyxvPTA7bzw9MjU7bysrKU4yW29dPTY1K28mWnM7Zm9yKGY9MjYsdz0wO2Y8PTUxOysrZix3KyspTjJbZl09OTcrdyZacztmb3IoZT01MixnPTA7ZTw9NjE7KytlLGcrKylOMltlXT00OCtnJlpzO04yWzYyXT00MyxOMls2M109NDd9ZnVuY3Rpb24gRm10KGUsdCl7dmFyIG4scixhLG8sZixnO3JldHVybiBhPXk3ZShlKSxnPXk3ZSh0KSxhPT1nP2UuZT09dC5lJiZlLmE8NTQmJnQuYTw1ND9lLmY8dC5mPy0xOmUuZj50LmY/MTowOihyPWUuZS10LmUsbj0oZS5kPjA/ZS5kOmIuTWF0aC5mbG9vcigoZS5hLTEpKlZ3dCkrMSktKHQuZD4wP3QuZDpiLk1hdGguZmxvb3IoKHQuYS0xKSpWd3QpKzEpLG4+cisxP2E6bjxyLTE/LWE6KG89KCFlLmMmJihlLmM9WE8oWmMoZS5mKSkpLGUuYyksZj0oIXQuYyYmKHQuYz1YTyhaYyh0LmYpKSksdC5jKSxyPDA/bz1LNShvLFdtdCgtcikpOnI+MCYmKGY9SzUoZixXbXQocikpKSxLMXQobyxmKSkpOmE8Zz8tMToxfWZ1bmN0aW9uIHdBbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztmb3Iobi5VZyhUM3QsMSksZS52Zih0KSxvPTA7ZS54ZihvKSYmIW4uJGcoKTspe2ZvcihlLndmKCksQz1yZyhMaChoZShsZShGaCwxKSxSbiwyMCwwLFt0LmUsdC5kLHQuYl0pKSk7anIoQyk7KWZvcih3PWwoeHIoQyksMzA5KSxnPXJnKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsW3QuZSx0LmQsdC5iXSkpKTtqcihnKTspZj1sKHhyKGcpLDMwOSksZiE9dyYmKGE9ZS51ZihmLHcpLGEmJk9pKHcuYyxhKSk7Zm9yKEU9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbdC5lLHQuZCx0LmJdKSkpO2pyKEUpOyl3PWwoeHIoRSksMzA5KSxyPXcuYyxvcHQociwtZS5kLC1lLmQsZS5kLGUuZCksT2kody5kLHIpLHIuYT0wLHIuYj0wOysrb31uLlZnKCl9ZnVuY3Rpb24geUFuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKGUuZGMoKSlyZXR1cm4gbmV3IHFhO2ZvcihFPTAsTD0wLGE9ZS5LYygpO2EuT2IoKTspcj1sKGEuUGIoKSwzNiksbz1yLmYsRT1iLk1hdGgubWF4KEUsby5hKSxMKz1vLmEqby5iO2ZvcihFPWIuTWF0aC5tYXgoRSxiLk1hdGguc3FydChMKSp6ZShHZShRKGwoZS5LYygpLlBiKCksMzYpLChOdCgpLGNXKSkpKSksQj0wLHo9MCx3PTAsbj10LGc9ZS5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSwzNiksQz1mLmYsQitDLmE+RSYmKEI9MCx6Kz13K3Qsdz0wKSxLRShmLEIseiksbj1iLk1hdGgubWF4KG4sQitDLmEpLHc9Yi5NYXRoLm1heCh3LEMuYiksQis9Qy5hK3Q7cmV0dXJuIG5ldyBsdChuK3Qseit3K3QpfWZ1bmN0aW9uIEVrZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKCFNMShlKSl0aHJvdyB1ZShuZXcgbmModDR0KSk7aWYocj1NMShlKSxvPXIuZyxhPXIuZixvPD0wJiZhPD0wKXJldHVybiBDdCgpLFBjO3N3aXRjaChnPWUuaSx3PWUuaix0Lmcpe2Nhc2UgMjpjYXNlIDE6aWYoZzwwKXJldHVybiBDdCgpLGVyO2lmKGcrZS5nPm8pcmV0dXJuIEN0KCksYXI7YnJlYWs7Y2FzZSA0OmNhc2UgMzppZih3PDApcmV0dXJuIEN0KCksUW47aWYodytlLmY+YSlyZXR1cm4gQ3QoKSxEcn1yZXR1cm4gZj0oZytlLmcvMikvbyxuPSh3K2UuZi8yKS9hLGYrbjw9MSYmZi1uPD0wPyhDdCgpLGVyKTpmK24+PTEmJmYtbj49MD8oQ3QoKSxhcik6bjwuNT8oQ3QoKSxRbik6KEN0KCksRHIpfWZ1bmN0aW9uIHhBbihlLHQsbixyLGEpe3ZhciBvLGY7aWYobz1ibyh2YSh0WzBdLFZvKSx2YShyWzBdLFZvKSksZVswXT1ZcihvKSxvPWJ3KG8sMzIpLG4+PWEpe2ZvcihmPTE7ZjxhO2YrKylvPWJvKG8sYm8odmEodFtmXSxWbyksdmEocltmXSxWbykpKSxlW2ZdPVlyKG8pLG89YncobywzMik7Zm9yKDtmPG47ZisrKW89Ym8obyx2YSh0W2ZdLFZvKSksZVtmXT1ZcihvKSxvPWJ3KG8sMzIpfWVsc2V7Zm9yKGY9MTtmPG47ZisrKW89Ym8obyxibyh2YSh0W2ZdLFZvKSx2YShyW2ZdLFZvKSkpLGVbZl09WXIobyksbz1idyhvLDMyKTtmb3IoO2Y8YTtmKyspbz1ibyhvLHZhKHJbZl0sVm8pKSxlW2ZdPVlyKG8pLG89YncobywzMil9aXUobywwKSE9MCYmKGVbZl09WXIobykpfWZ1bmN0aW9uIFV5KGUpe0RpKCk7dmFyIHQsbixyLGEsbyxmO2lmKGUuZSE9NCYmZS5lIT01KXRocm93IHVlKG5ldyBZbigiVG9rZW4jY29tcGxlbWVudFJhbmdlcygpOiBtdXN0IGJlIFJBTkdFOiAiK2UuZSkpO2ZvcihvPWUsYzYobyksZUwobykscj1vLmIubGVuZ3RoKzIsby5iWzBdPT0wJiYoci09Miksbj1vLmJbby5iLmxlbmd0aC0xXSxuPT1UVCYmKHItPTIpLGE9bmV3IF9oKDQpLGEuYj1XZShWcixkaSwyOCxyLDE1LDEpLGY9MCxvLmJbMF0+MCYmKGEuYltmKytdPTAsYS5iW2YrK109by5iWzBdLTEpLHQ9MTt0PG8uYi5sZW5ndGgtMjt0Kz0yKWEuYltmKytdPW8uYlt0XSsxLGEuYltmKytdPW8uYlt0KzFdLTE7cmV0dXJuIG4hPVRUJiYoYS5iW2YrK109bisxLGEuYltmXT1UVCksYS5hPSEwLGF9ZnVuY3Rpb24ga0FuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2Zvcih0LlVnKCJMYXllciBjb25zdHJhaW50IGVkZ2UgcmV2ZXJzYWwiLDEpLGY9bmV3IEcoZS5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7Zm9yKG89bChyZShmKSwzMCksQz0tMSxuPW5ldyBidCxFPUpPKG8uYSksYT0wO2E8RS5sZW5ndGg7YSsrKXI9bChRKEVbYV0sKGZ0KCksaHYpKSwzMTEpLEM9PS0xP3IhPShlcCgpLEY2KSYmKEM9YSk6cj09KGVwKCksRjYpJiYoVmEoRVthXSxudWxsKSxGeShFW2FdLEMrKyxvKSkscj09KGVwKCksVXgpJiYkbihuLmMsRVthXSk7Zm9yKHc9bmV3IEcobik7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDEwKSxWYShnLG51bGwpLFZhKGcsbyl9dC5WZygpfWZ1bmN0aW9uIGxsZShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztpZihyPW4uZ2MoKSxyPT0wKXJldHVybiExO2lmKGUuUGooKSlpZihFPWUuUWooKSxEdWUoZSx0LG4pLGY9cj09MT9lLklqKDMsbnVsbCxuLktjKCkuUGIoKSx0LEUpOmUuSWooNSxudWxsLG4sdCxFKSxlLk1qKCkpe2ZvcihnPXI8MTAwP251bGw6bmV3IG5iKHIpLG89dCtyLGE9dDthPG87KythKUM9ZS5nW2FdLGc9ZS5OaihDLGcpLGc9ZS5VaihDLGcpO2c/KGcubmooZiksZy5vaigpKTplLkpqKGYpfWVsc2UgZS5KaihmKTtlbHNlIGlmKER1ZShlLHQsbiksZS5NaigpKXtmb3IoZz1yPDEwMD9udWxsOm5ldyBuYihyKSxvPXQrcixhPXQ7YTxvOysrYSl3PWUuZ1thXSxnPWUuTmoodyxnKTtnJiZnLm9qKCl9cmV0dXJuITB9ZnVuY3Rpb24gRUFuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2Zvcih0LlVnKCJIaWVyYXJjaGljYWwgcG9ydCBkdW1teSBzaXplIHByb2Nlc3NpbmciLDEpLHc9bmV3IGJ0LEM9bmV3IGJ0LHI9emUoR2UoUShlLChOdCgpLHE2KSkpKSxuPXIqMixvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihhPWwocmUobyksMzApLHcuYy5sZW5ndGg9MCxDLmMubGVuZ3RoPTAsZz1uZXcgRyhhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMCksZi5rPT0oWm4oKSxVcykmJihFPWwoUShmLChmdCgpLFdjKSksNjQpLEU9PShDdCgpLFFuKT8kbih3LmMsZik6RT09RHImJiRuKEMuYyxmKSk7YjJ0KHcsITAsbiksYjJ0KEMsITEsbil9dC5WZygpfWZ1bmN0aW9uIFRrZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2ZvcihmPW5ldyBHKGUuayk7Zi5hPGYuYy5jLmxlbmd0aDspYT1sKHJlKGYpLDEzMiksKCFyfHxhLmM9PShKMCgpLHFiKSkmJih3PWEuYix3Lmc8MCYmYS5kPjAmJihIKHcsdy5kLWEuZCksYS5jPT0oSjAoKSxxYikmJk4odyx3LmEtYS5kKSx3LmQ8PTAmJncuaT4wJiZDcyh0LHcsdC5jLmIsdC5jKSkpO2ZvcihvPW5ldyBHKGUuZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEzMiksKCFyfHxhLmM9PShKMCgpLHFiKSkmJihnPWEuYSxnLmc8MCYmYS5kPjAmJihxKGcsZy5pLWEuZCksYS5jPT0oSjAoKSxxYikmJiQoZyxnLmItYS5kKSxnLmk8PTAmJmcuZD4wJiZDcyhuLGcsbi5jLmIsbi5jKSkpfWZ1bmN0aW9uIFRBbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIsejtmb3IoQ24oKSxWcyhlLG5ldyB0ayksZj1QTyhlKSx6PW5ldyBidCxCPW5ldyBidCxnPW51bGwsdz0wO2YuYiE9MDspbz1sKGYuYj09MD9udWxsOihtcihmLmIhPTApLGFmKGYsZi5hLmEpKSwxNjMpLCFnfHx3bChnKSpnaChnKS8yPHdsKG8pKmdoKG8pPyhnPW8sJG4oei5jLG8pKToodys9d2wobykqZ2gobyksJG4oQi5jLG8pLEIuYy5sZW5ndGg+MSYmKHc+d2woZykqZ2goZykvMnx8Zi5iPT0wKSYmKEw9bmV3IGhWKEIpLEM9d2woZykvZ2goZyksRT1MbGUoTCx0LG5ldyBBOCxuLHIsYSxDKSxPaShZMChMLmUpLEUpLGc9TCwkbih6LmMsTCksdz0wLEIuYy5sZW5ndGg9MCkpO3JldHVybiByYSh6LEIpLHp9ZnVuY3Rpb24gcHUoZSx0LG4scixhKXtWZygpO3ZhciBvLGYsZyx3LEUsQyxMO2lmKGQ1ZShlLCJzcmMiKSxkNWUobiwiZGVzdCIpLEw9YmgoZSksdz1iaChuKSxJNGUoKEwuaSY0KSE9MCwic3JjVHlwZSBpcyBub3QgYW4gYXJyYXkiKSxJNGUoKHcuaSY0KSE9MCwiZGVzdFR5cGUgaXMgbm90IGFuIGFycmF5IiksQz1MLmMsZj13LmMsSTRlKEMuaSYxP0M9PWY6KGYuaSYxKT09MCwiQXJyYXkgdHlwZXMgZG9uJ3QgbWF0Y2giKSxseW4oZSx0LG4scixhKSwhKEMuaSYxKSYmTCE9dylpZihFPWptKGUpLG89am0obikscWUoZSk9PT1xZShuKSYmdDxyKWZvcih0Kz1hLGc9cithO2ctLSA+cjspVHMobyxnLEVbLS10XSk7ZWxzZSBmb3IoZz1yK2E7cjxnOylUcyhvLHIrKyxFW3QrK10pO2Vsc2UgazllKGUsdCxuLHIsYSwhMCl9ZnVuY3Rpb24gUm10KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO3N3aXRjaCh0LlVnKCJCb3ggbGF5b3V0IiwyKSxhPVhJKEdlKGF0KGUsKHdVKCksU1N0KSkpKSxvPWwoYXQoZSxDU3QpLDEwNyksbj1SdChCdChhdChlLFlPZSkpKSxyPVJ0KEJ0KGF0KGUsWE9lKSkpLGwoYXQoZSxfZ2UpLDMyMCkuZyl7Y2FzZSAwOmY9KEM9bmV3IE9sKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSksQ24oKSxWcyhDLG5ldyBEWGUocikpLEMpLGc9YTllKGUpLHc9R2UoYXQoZSxXT2UpKSwodz09bnVsbHx8KG5yKHcpLHc8PTApKSYmKHc9MS4zKSxFPW5JbihmLGEsbyxnLmEsZy5iLG4sKG5yKHcpLHcpKSxHdyhlLEUuYSxFLmIsITEsITApO2JyZWFrO2RlZmF1bHQ6V0xuKGUsYSxvLG4pfXQuVmcoKX1mdW5jdGlvbiBDQW4oZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoQj1YOG4oZSxuKSx3PTA7dzx0O3crKyl7Zm9yKGJ5KGEsbiksej1uZXcgYnQsVj0obXIoci5iPHIuZC5nYygpKSxsKHIuZC5YYihyLmM9ci5iKyspLDQxOCkpLEM9Qit3O0M8ZS5iO0MrKylnPVYsVj0obXIoci5iPHIuZC5nYygpKSxsKHIuZC5YYihyLmM9ci5iKyspLDQxOCkpLHZ0KHosbmV3IGRidChnLFYsbikpO2ZvcihMPUIrdztMPGUuYjtMKyspbXIoci5iPjApLHIuYS5YYihyLmM9LS1yLmIpLEw+Qit3JiZwaChyKTtmb3IoZj1uZXcgRyh6KTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksNDE4KSxieShyLG8pO2lmKHc8dC0xKWZvcihFPUIrdztFPGUuYjtFKyspbXIoci5iPjApLHIuYS5YYihyLmM9LS1yLmIpfX1mdW5jdGlvbiBTQW4oKXtEaSgpO3ZhciBlLHQsbixyLGEsbztpZih1cGUpcmV0dXJuIHVwZTtmb3IoZT1uZXcgX2goNCksS3koZSxfYihwMGUsITApKSxuTChlLF9iKCJNIiwhMCkpLG5MKGUsX2IoIkMiLCEwKSksbz1uZXcgX2goNCkscj0wO3I8MTE7cisrKUV1KG8scixyKTtyZXR1cm4gdD1uZXcgX2goNCksS3kodCxfYigiTSIsITApKSxFdSh0LDQ0NDgsNDYwNyksRXUodCw2NTQzOCw2NTQzOSksYT1uZXcgQl8oMiksUW0oYSxlKSxRbShhLFdNKSxuPW5ldyBCXygyKSxuLkptKG9IKG8sX2IoIkwiLCEwKSkpLG4uSm0odCksbj1uZXcgVHkoMyxuKSxuPW5ldyBmNWUoYSxuKSx1cGU9bix1cGV9ZnVuY3Rpb24gR3koZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihuPW5ldyBSZWdFeHAodCwiZyIpLHc9V2UoenQsZHQsMiwwLDYsMSkscj0wLEU9ZSxvPW51bGw7OylpZihnPW4uZXhlYyhFKSxnPT1udWxsfHxFPT0iIil7d1tyXT1FO2JyZWFrfWVsc2UgZj1nLmluZGV4LHdbcl09KEdhKDAsZixFLmxlbmd0aCksRS5zdWJzdHIoMCxmKSksRT10ZihFLGYrZ1swXS5sZW5ndGgsRS5sZW5ndGgpLG4ubGFzdEluZGV4PTAsbz09RSYmKHdbcl09KEdhKDAsMSxFLmxlbmd0aCksRS5zdWJzdHIoMCwxKSksRT0oWG4oMSxFLmxlbmd0aCsxKSxFLnN1YnN0cigxKSkpLG89RSwrK3I7aWYoZS5sZW5ndGg+MCl7Zm9yKGE9dy5sZW5ndGg7YT4wJiZ3W2EtMV09PSIiOyktLWE7YTx3Lmxlbmd0aCYmKHcubGVuZ3RoPWEpfXJldHVybiB3fWZ1bmN0aW9uIEhjKCl7SGM9VSxwSWU9bmV3IGx3KDIwKSxnSWU9bmV3IEhhKChwaSgpLF8yKSxwSWUpLHpkZT1uZXcgSGEoRXYsMjApLG1JZT1uZXcgSGEoTE5lLDMpLHhUdD1uZXcgSGEoWjYsbFQpLFJXPW5ldyBIYShYQixwdCgxKSksTVR0PW5ldyBIYShxZ2UsKEhuKCksITApKSxsSWU9R0IsaEllPShKcygpLEoxKSx5Mz1uZXcgSGEoeHYsaEllKSxrVHQ9V0IsRVR0PU5nZSxDVHQ9a3YsU1R0PUM0LF9UdD1pNyxBVHQ9VWIsVFR0PXI3LGRJZT1ZQixMVHQ9UzQsd0llPShfOWUoKSx5VHQpLGJJZT12VHQsT1R0PUFNLE5UdD1hWSxJVHQ9UUIsRFR0PXNZLHZJZT0oZHgoKSxMNCksbmV3IEhhKGk5LHZJZSksVzY9bVR0LCRkZT1iVHQsJGQ9d1R0LHVJZT1nVHQsZkllPXBUdH1mdW5jdGlvbiBfQW4oZSl7dmFyIHQsbjtpZih0PWVpKGF0KGUsKHBpKCksZUMpKSksIUZmdCh0LGUpJiYhUDEoZSxhNykmJigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkuaSE9MHx8UnQoQnQoYXQoZSxLQikpKSkpaWYodD09bnVsbHx8JHkodCkubGVuZ3RoPT0wKXtpZighRmZ0KHNyLGUpKXRocm93IG49aGkoaGkobmV3IFRoKCJVbmFibGUgdG8gbG9hZCBkZWZhdWx0IGxheW91dCBhbGdvcml0aG0gIiksc3IpLCIgZm9yIHVuY29uZmlndXJlZCBub2RlICIpLEdVKGUsbiksdWUobmV3IFZwKG4uYSkpfWVsc2UgdGhyb3cgbj1oaShoaShuZXcgVGgoIkxheW91dCBhbGdvcml0aG0gJyIpLHQpLCInIG5vdCBmb3VuZCBmb3IgIiksR1UoZSxuKSx1ZShuZXcgVnAobi5hKSl9ZnVuY3Rpb24gaGxlKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKG49ZS5pLHQ9ZS5uLGUuYj09MClmb3Ioej1uLmMrdC5iLEI9bi5iLXQuYi10LmMsZj1lLmEsdz0wLEM9Zi5sZW5ndGg7dzxDOysrdylhPWZbd10saEgoYSx6LEIpO2Vsc2Ugcj1BZHQoZSwhMSksaEgoZS5hWzBdLG4uYyt0LmIsclswXSksaEgoZS5hWzJdLG4uYytuLmItdC5jLXJbMl0sclsyXSksTD1uLmItdC5iLXQuYyxyWzBdPjAmJihMLT1yWzBdK2UuYyxyWzBdKz1lLmMpLHJbMl0+MCYmKEwtPXJbMl0rZS5jKSxyWzFdPWIuTWF0aC5tYXgoclsxXSxMKSxoSChlLmFbMV0sbi5jK3QuYityWzBdLShyWzFdLUwpLzIsclsxXSk7Zm9yKG89ZS5hLGc9MCxFPW8ubGVuZ3RoO2c8RTsrK2cpYT1vW2ddLERlKGEsMzM2KSYmbChhLDMzNikubGYoKX1mdW5jdGlvbiBBQW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoTD1uZXcgZnRlLEwuZD0wLGY9bmV3IEcoZS5iKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMzApLEwuZCs9by5hLmMubGVuZ3RoO2ZvcihyPTAsYT0wLEwuYT1XZShWcixkaSwyOCxlLmIuYy5sZW5ndGgsMTUsMSksRT0wLEM9MCxMLmU9V2UoVnIsZGksMjgsTC5kLDE1LDEpLG49bmV3IEcoZS5iKTtuLmE8bi5jLmMubGVuZ3RoOylmb3IodD1sKHJlKG4pLDMwKSx0LnA9cisrLEwuYVt0LnBdPWErKyxDPTAsdz1uZXcgRyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMCksZy5wPUUrKyxMLmVbZy5wXT1DKys7cmV0dXJuIEwuYz1uZXcgaVhlKEwpLEwuYj1lZyhMLmQpLEtfbihMLGUpLEwuZj1lZyhMLmQpLFdfbihMLGUpLEx9ZnVuY3Rpb24gam10KGUsdCl7dmFyIG4scixhLG87Zm9yKG89bChqdChlLm4sZS5uLmMubGVuZ3RoLTEpLDIwOSkuZCxlLnA9Yi5NYXRoLm1pbihlLnAsdC5nKSxlLnI9Yi5NYXRoLm1heChlLnIsbyksZS5nPWIuTWF0aC5tYXgoZS5nLHQuZysoZS5iLmMubGVuZ3RoPT0xPzA6ZS5pKSksZS5vPWIuTWF0aC5taW4oZS5vLHQuZiksZS5lKz10LmYrKGUuYi5jLmxlbmd0aD09MT8wOmUuaSksZS5mPWIuTWF0aC5tYXgoZS5mLHQuZiksYT1lLm4uYy5sZW5ndGg+MD8oZS5uLmMubGVuZ3RoLTEpKmUuaTowLHI9bmV3IEcoZS5uKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMjA5KSxhKz1uLmE7ZS5kPWEsZS5hPWUuZS9lLmIuYy5sZW5ndGgtZS5pKigoZS5iLmMubGVuZ3RoLTEpL2UuYi5jLmxlbmd0aCksaXhlKGUuail9ZnVuY3Rpb24gJG10KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7aWYoQz1CdChRKHQsKGIwKCksdDh0KSkpLEM9PW51bGx8fChucihDKSxDKSl7Zm9yKEw9V2UoaWgscGcsMjgsdC5lLmMubGVuZ3RoLDE2LDEpLGY9cEVuKHQpLGE9bmV3IG9zLEU9bmV3IEcodC5lKTtFLmE8RS5jLmMubGVuZ3RoOylnPWwocmUoRSksMTUzKSxuPUY5ZShlLGcsbnVsbCxudWxsLEwsZiksbiYmKHBjKG4sdCksQ3MoYSxuLGEuYy5iLGEuYykpO2lmKGEuYj4xKWZvcihyPVJyKGEsMCk7ci5iIT1yLmQuYzspZm9yKG49bChCcihyKSwyMzUpLG89MCx3PW5ldyBHKG4uZSk7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDE1MyksZy5hPW8rKztyZXR1cm4gYX1yZXR1cm4gTzEoaGUobGUoeU9uLDEpLGszdCwyMzUsMCxbdF0pKX1mdW5jdGlvbiBTZChlKXt2YXIgdCxuLHIsYSxvLGYsZztpZighZS5nKXtpZihnPW5ldyBTSSx0PXFNLGY9dC5hLnpjKGUsdCksZj09bnVsbCl7Zm9yKHI9bmV3IG9yKGRjKGUpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksMjkpLEFzKGcsU2QobikpO3QuYS5CYyhlKSE9bnVsbCx0LmEuZ2MoKT09MH1mb3IoYT1nLmksbz0oIWUucyYmKGUucz1uZXcgbnQoZGwsZSwyMSwxNykpLG5ldyBvcihlLnMpKTtvLmUhPW8uaS5nYygpOysrYSlzdChsKGdyKG8pLDQ2MiksYSk7QXMoZywoIWUucyYmKGUucz1uZXcgbnQoZGwsZSwyMSwxNykpLGUucykpLEl5KGcpLGUuZz1uZXcgZzB0KGUsZyksZS5pPWwoZy5nLDI1NCksZS5pPT1udWxsJiYoZS5pPW5wZSksZS5wPW51bGwsWWwoZSkuYiY9LTV9cmV0dXJuIGUuZ31mdW5jdGlvbiBMQW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYobj10LnFpKGUuYSksbiYmKHc9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSwibWVtYmVyVHlwZXMiKSksdyE9bnVsbCkpe2ZvcihFPW5ldyBidCxvPUd5KHcsIlxcdyIpLGY9MCxnPW8ubGVuZ3RoO2Y8ZzsrK2YpYT1vW2ZdLHI9YS5sYXN0SW5kZXhPZigiIyIpLEM9cj09LTE/enllKGUsdC5qaygpLGEpOnI9PTA/b04oZSxudWxsLChYbigxLGEubGVuZ3RoKzEpLGEuc3Vic3RyKDEpKSk6b04oZSwoR2EoMCxyLGEubGVuZ3RoKSxhLnN1YnN0cigwLHIpKSwoWG4ocisxLGEubGVuZ3RoKzEpLGEuc3Vic3RyKHIrMSkpKSxEZShDLDE1NikmJnZ0KEUsbChDLDE1NikpO3JldHVybiBFfXJldHVybiBDbigpLENuKCksX299ZnVuY3Rpb24gZmxlKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7aWYocj1lLmksbj1lLm4sZS5iPT0wKXQ9X2R0KGUsITEpLGZIKGUuYVswXSxyLmQrbi5kLHRbMF0pLGZIKGUuYVsyXSxyLmQrci5hLW4uYS10WzJdLHRbMl0pLEI9ci5hLW4uZC1uLmEsTD1CLHRbMF0+MCYmKHRbMF0rPWUuYyxMLT10WzBdKSx0WzJdPjAmJihMLT10WzJdK2UuYyksdFsxXT1iLk1hdGgubWF4KHRbMV0sTCksZkgoZS5hWzFdLHIuZCtuLmQrdFswXS0odFsxXS1MKS8yLHRbMV0pO2Vsc2UgZm9yKFY9ci5kK24uZCx6PXIuYS1uLmQtbi5hLGY9ZS5hLHc9MCxDPWYubGVuZ3RoO3c8QzsrK3cpYT1mW3ddLGZIKGEsVix6KTtmb3Iobz1lLmEsZz0wLEU9by5sZW5ndGg7ZzxFOysrZylhPW9bZ10sRGUoYSwzMzYpJiZsKGEsMzM2KS5tZigpfWZ1bmN0aW9uIE1BbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQztmb3IoQz1XZShWcixkaSwyOCxlLmIuYy5sZW5ndGgrMSwxNSwxKSxFPW5ldyBLcyxyPTAsbz1uZXcgRyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3IoYT1sKHJlKG8pLDMwKSxDW3IrK109RS5hLmdjKCksdz1uZXcgRyhhLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihmPWwocmUodyksMTApLG49bmV3IGhyKGRyKHFzKGYpLmEuS2MoKSxuZXcgaikpO2pyKG4pOyl0PWwoeHIobiksMTgpLEUuYS56Yyh0LEUpO2ZvcihnPW5ldyBHKGEuYSk7Zy5hPGcuYy5jLmxlbmd0aDspZm9yKGY9bChyZShnKSwxMCksbj1uZXcgaHIoZHIoa2EoZikuYS5LYygpLG5ldyBqKSk7anIobik7KXQ9bCh4cihuKSwxOCksRS5hLkJjKHQpIT1udWxsfXJldHVybiBDfWZ1bmN0aW9uICRVKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYodz1XdShlLmUuRGgoKSx0KSxhPWwoZS5nLDEyNCksRm8oKSxsKHQsNjkpLnhrKCkpe2ZvcihmPTA7ZjxlLmk7KytmKWlmKG89YVtmXSx3LmFtKG8uTGsoKSkmJlBpKG8sbikpcmV0dXJuITB9ZWxzZSBpZihuIT1udWxsKXtmb3IoZz0wO2c8ZS5pOysrZylpZihvPWFbZ10sdy5hbShvLkxrKCkpJiZQaShuLG8ubWQoKSkpcmV0dXJuITA7aWYocil7Zm9yKGY9MDtmPGUuaTsrK2YpaWYobz1hW2ZdLHcuYW0oby5MaygpKSYmcWUobik9PT1xZShjYWUoZSxsKG8ubWQoKSw1OCkpKSlyZXR1cm4hMH19ZWxzZSBmb3IoZj0wO2Y8ZS5pOysrZilpZihvPWFbZl0sdy5hbShvLkxrKCkpJiZvLm1kKCk9PW51bGwpcmV0dXJuITE7cmV0dXJuITF9ZnVuY3Rpb24gREFuKGUsdCl7dmFyIG4scixhLG8sZixnO2lmKG49dC5xaShlLmEpLG4mJihnPWVpKG4xKCghbi5iJiYobi5iPW5ldyBkaCgoVG4oKSxObyksWWMsbikpLG4uYiksekcpKSxnIT1udWxsKSlzd2l0Y2goYT1ScShnLGNsKDM1KSkscj10LnFrKCksYT09LTE/KGY9S18oZSxBaChyKSksbz1nKTphPT0wPyhmPW51bGwsbz0oWG4oMSxnLmxlbmd0aCsxKSxnLnN1YnN0cigxKSkpOihmPShHYSgwLGEsZy5sZW5ndGgpLGcuc3Vic3RyKDAsYSkpLG89KFhuKGErMSxnLmxlbmd0aCsxKSxnLnN1YnN0cihhKzEpKSksa3coaWMoZSx0KSkpe2Nhc2UgMjpjYXNlIDM6cmV0dXJuIGh5bihlLHIsZixvKTtjYXNlIDA6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6cmV0dXJuIGZ5bihlLHIsZixvKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB6bXQoZSx0LG4scil7dmFyIGEsbyxmLGc7Zm9yKGc9bixmPW5ldyBHKHQuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2lmKG89bChyZShmKSwyMjUpLGE9bChvLmIsNjgpLEZ3KGUuYi5jLGEuYi5jK2EuYi5iKTw9MCYmRncoYS5iLmMsZS5iLmMrZS5iLmIpPD0wJiZGdyhlLmIuZCxhLmIuZCthLmIuYSk8PTAmJkZ3KGEuYi5kLGUuYi5kK2UuYi5hKTw9MCl7aWYoRncoYS5iLmMsZS5iLmMrZS5iLmIpPT0wJiZyLmE8MHx8RncoYS5iLmMrYS5iLmIsZS5iLmMpPT0wJiZyLmE+MHx8RncoYS5iLmQsZS5iLmQrZS5iLmEpPT0wJiZyLmI8MHx8RncoYS5iLmQrYS5iLmEsZS5iLmQpPT0wJiZyLmI+MCl7Zz0wO2JyZWFrfX1lbHNlIGc9Yi5NYXRoLm1pbihnLEJwdChlLGEscikpO2c9Yi5NYXRoLm1pbihnLHptdChlLG8sZyxyKSl9cmV0dXJuIGd9ZnVuY3Rpb24gZFAoZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZihlLmI8Mil0aHJvdyB1ZShuZXcgWW4oIlRoZSB2ZWN0b3IgY2hhaW4gbXVzdCBjb250YWluIGF0IGxlYXN0IGEgc291cmNlIGFuZCBhIHRhcmdldCBwb2ludC4iKSk7Zm9yKGE9KG1yKGUuYiE9MCksbChlLmEuYS5jLDgpKSxrTyh0LGEuYSxhLmIpLHc9bmV3IHE4KCghdC5hJiYodC5hPW5ldyBZcyhxaCx0LDUpKSx0LmEpKSxmPVJyKGUsMSk7Zi5hPGUuYi0xOylnPWwoQnIoZiksOCksdy5lIT13LmkuZ2MoKT9uPWwoZ3IodyksMzc3KToobj0ocmIoKSxyPW5ldyBBUyxyKSxEMXQodyxuKSksV3NlKG4sZy5hLGcuYik7Zm9yKDt3LmUhPXcuaS5nYygpOylncih3KSxqQSh3KTtvPShtcihlLmIhPTApLGwoZS5jLmIuYyw4KSkseE8odCxvLmEsby5iKX1mdW5jdGlvbiBxbXQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2lmKEU9V3UoZS5lLkRoKCksdCksZj1sKGUuZywxMjQpLHVwKGUuZSx0KSl7aWYodC5TaSgpJiYobz1YRShlLHQscixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCksbz49MCYmbyE9bikpdGhyb3cgdWUobmV3IFluKFdQKSk7Zm9yKGE9MCx3PTA7dzxlLmk7Kyt3KWlmKGc9Zlt3XSxFLmFtKGcuTGsoKSkpe2lmKGE9PW4pcmV0dXJuIGwobjYoZSx3LChGbygpLGwodCw2OSkueGsoKT9sKHIsNzYpOnNnKHQscikpKSw3Nik7KythfXRocm93IHVlKG5ldyB0YyhDTCtuK2F2K2EpKX1lbHNle2Zvcih3PTA7dzxlLmk7Kyt3KWlmKGc9Zlt3XSxFLmFtKGcuTGsoKSkpcmV0dXJuIEZvKCksbCh0LDY5KS54aygpP2c6Zy5tZCgpO3JldHVybiBudWxsfX1mdW5jdGlvbiBIbXQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7Zm9yKG49MCxhPW5ldyBHKChTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDEwNSkpLmcuYi5qKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTIpLHIucD1uKys7Zm9yKHQ9PShDdCgpLFFuKT9WcyhlLG5ldyB4ZWUpOlZzKGUsbmV3IGtlZSksZz0wLEM9ZS5jLmxlbmd0aC0xO2c8QzspZj0oU24oZyxlLmMubGVuZ3RoKSxsKGUuY1tnXSwxMDUpKSxFPShTbihDLGUuYy5sZW5ndGgpLGwoZS5jW0NdLDEwNSkpLG89dD09UW4/Zi5jOmYuYSx3PXQ9PVFuP0UuYTpFLmMsUXAoZix0LChSMSgpLERUKSxvKSxRcChFLHQsTVQsdyksKytnLC0tQztnPT1DJiZRcCgoU24oZyxlLmMubGVuZ3RoKSxsKGUuY1tnXSwxMDUpKSx0LChSMSgpLFZ4KSxudWxsKX1mdW5jdGlvbiBJQW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2ZvcihmPW5ldyB5dnQoZSx0LG4pLHc9bmV3IFVhKHIsMCksYT0hMTt3LmI8dy5kLmdjKCk7KWc9KG1yKHcuYjx3LmQuZ2MoKSksbCh3LmQuWGIody5jPXcuYisrKSwyMzkpKSxnPT10fHxnPT1uP3BoKHcpOiFhJiZ6ZShMMShnLmcsZy5kWzBdKS5hKT56ZShMMShmLmcsZi5kWzBdKS5hKT8obXIody5iPjApLHcuYS5YYih3LmM9LS13LmIpLGJ5KHcsZiksYT0hMCk6Zy5lJiZnLmUuZ2MoKT4wJiYobz0oIWcuZSYmKGcuZT1uZXcgYnQpLGcuZSkuTWModCksRT0oIWcuZSYmKGcuZT1uZXcgYnQpLGcuZSkuTWMobiksKG98fEUpJiYoKCFnLmUmJihnLmU9bmV3IGJ0KSxnLmUpLkZjKGYpLCsrZi5jKSk7YXx8JG4oci5jLGYpfWZ1bmN0aW9uIE9BbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7cmV0dXJuIEw9ZS5hLmkrZS5hLmcvMixCPWUuYS5pK2UuYS5nLzIsVj10LmkrdC5nLzIsdGU9dC5qK3QuZi8yLGc9bmV3IGx0KFYsdGUpLEU9bChhdCh0LChwaSgpLG45KSksOCksRS5hPUUuYStMLEUuYj1FLmIrQixvPShnLmItRS5iKS8oZy5hLUUuYSkscj1nLmItbypnLmEsSj1uLmkrbi5nLzIsZmU9bi5qK24uZi8yLHc9bmV3IGx0KEosZmUpLEM9bChhdChuLG45KSw4KSxDLmE9Qy5hK0wsQy5iPUMuYitCLGY9KHcuYi1DLmIpLyh3LmEtQy5hKSxhPXcuYi1mKncuYSx6PShyLWEpLyhmLW8pLEUuYTx6JiZnLmE8enx8ejxFLmEmJno8Zy5hPyExOiEoQy5hPHomJncuYTx6fHx6PEMuYSYmejx3LmEpfWZ1bmN0aW9uIE5BbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtpZihCPWwoY3IoZS5jLHQpLDE5MCksIUIpdGhyb3cgdWUobmV3IGRkKCJFZGdlIGRpZCBub3QgZXhpc3QgaW4gaW5wdXQuIikpO3JldHVybiBFPU5FKEIpLG89WkkoKCF0LmEmJih0LmE9bmV3IG50KGNzLHQsNiw2KSksdC5hKSksZz0hbyxnJiYoej1uZXcgJHAsbj1uZXcgeWl0KGUsRSx6KSxFbG4oKCF0LmEmJih0LmE9bmV3IG50KGNzLHQsNiw2KSksdC5hKSxuKSxlMShCLGZTZSx6KSksYT1QMSh0LChwaSgpLHgzKSksYSYmKEM9bChhdCh0LHgzKSw3NSksZj0hQ3x8b2F0KEMpLHc9IWYsdyYmKEw9bmV3ICRwLHI9bmV3IHRRZShMKSx0byhDLHIpLGUxKEIsImp1bmN0aW9uUG9pbnRzIixMKSkpLHprKEIsImNvbnRhaW5lciIsV08odCkuayksbnVsbH1mdW5jdGlvbiBWbXQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2lmKCFaayh0KSl7aWYoRT1uLmVoKChEZSh0LDE2KT9sKHQsMTYpLmdjKCk6WGcodC5LYygpKSkvZS5hfDApLEUuVWcoZHl0LDEpLHc9bmV3IHQkLGc9MCxyPT0oSnMoKSx1Yyl8fHI9PXZjKWZvcihmPXQuS2MoKTtmLk9iKCk7KWE9bChmLlBiKCksNDApLHc9TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbdyxuZXcgSGcoYSldKSksZzxhLmYuYSYmKGc9YS5mLmEpO2Vsc2UgZm9yKGY9dC5LYygpO2YuT2IoKTspYT1sKGYuUGIoKSw0MCksdz1MaChoZShsZShGaCwxKSxSbiwyMCwwLFt3LG5ldyBIZyhhKV0pKSxnPGEuZi5iJiYoZz1hLmYuYik7Zm9yKG89dC5LYygpO28uT2IoKTspYT1sKG8uUGIoKSw0MCkscnQoYSwoUWkoKSxGVyksZyk7RS5WZygpLFZtdChlLHcsbixyKX19ZnVuY3Rpb24gQ2tlKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1uLHRoaXMuZT1PMShoZShsZShtT24sMSksUm4sMTc3LDAsW25ldyBCOChlLHQpLG5ldyBCOCh0LG4pLG5ldyBCOChuLGUpXSkpLHRoaXMuZj1PMShoZShsZShFYSwxKSxkdCw4LDAsW2UsdCxuXSkpLHRoaXMuZD0ocj1tYShKYSh0aGlzLmIpLHRoaXMuYSksYT1tYShKYSh0aGlzLmMpLHRoaXMuYSksbz1tYShKYSh0aGlzLmMpLHRoaXMuYiksZj1yLmEqKHRoaXMuYS5hK3RoaXMuYi5hKStyLmIqKHRoaXMuYS5iK3RoaXMuYi5iKSxnPWEuYSoodGhpcy5hLmErdGhpcy5jLmEpK2EuYioodGhpcy5hLmIrdGhpcy5jLmIpLHc9Miooci5hKm8uYi1yLmIqby5hKSxFPShhLmIqZi1yLmIqZykvdyxDPShyLmEqZy1hLmEqZikvdyxuZXcgbHQoRSxDKSl9ZnVuY3Rpb24gVXcoZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKG89ZS5jLGY9ZS5kLHBvKGUsbnVsbCksRmEoZSxudWxsKSx0JiZSdChCdChRKGYsKGZ0KCksVjFlKSkpKT9wbyhlLHZrZShmLmksKHFvKCksenUpLChDdCgpLGFyKSkpOnBvKGUsZiksdCYmUnQoQnQoUShvLChmdCgpLEcxZSkpKSk/RmEoZSx2a2Uoby5pLChxbygpLCRsKSwoQ3QoKSxlcikpKTpGYShlLG8pLHI9bmV3IEcoZS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNzIpLGE9bChRKG4sKE50KCksamQpKSwyNzgpLGE9PShGMSgpLHJDKT9ydChuLGpkLF80KTphPT1fNCYmcnQobixqZCxyQyk7Zz1SdChCdChRKGUsKGZ0KCksVzEpKSkpLHJ0KGUsVzEsKEhuKCksIWcpKSxlLmE9QU4oZS5hKX1mdW5jdGlvbiBQQW4oZSx0KXt2YXIgbixyLGEsbyxmO3JldHVybiBuPUJFKGwoUSh0LChIYygpLHkzKSksODgpKSxlLmIuYj09MD9udWxsOihmPWwoeWMoZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyBQdGUpLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxvPWwoeWMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHQuYiwxNikpLG5ldyBhWGUoZikpLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFtFY10pKSksMTUpLGE9R2UoZmgodnkoZmMoby5PYygpLG5ldyBvWGUobikpLChFdygpLEV3KCksRDBlKSkpKSxyPWwoZmgoa0UoRmkoby5PYygpLG5ldyBldHQobixhKSkpKSw0MCkscil9ZnVuY3Rpb24gQkFuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtuPWh3KG5ldyBTbSxlLmYpLEU9ZS5pW3QuYy5pLnBdLHo9ZS5pW3QuZC5pLnBdLHc9dC5jLEI9dC5kLGc9dy5hLmIsTD1CLmEuYixFLmJ8fChnKz13Lm4uYiksei5ifHwoTCs9Qi5uLmIpLEM9dWEoYi5NYXRoLm1heCgwLGctTCkpLGY9dWEoYi5NYXRoLm1heCgwLEwtZykpLFY9KEo9Yi5NYXRoLm1heCgxLGwoUSh0LChOdCgpLEp4KSksMTcpLmEpLHRlPXU2ZSh0LmMuaS5rLHQuZC5pLmspLEoqdGUpLGE9cDAoczAoaTAocjAoYTAobmV3IF9mLFYpLGYpLG4pLGwoY3IoZS5rLHQuYyksMTI1KSkpLG89cDAoczAoaTAocjAoYTAobmV3IF9mLFYpLEMpLG4pLGwoY3IoZS5rLHQuZCksMTI1KSkpLHI9bmV3IEhldChhLG8pLGUuY1t0LnBdPXJ9ZnVuY3Rpb24gRkFuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKHI9MCxvPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO28uZSE9by5pLmdjKCk7KWE9bChncihvKSwyNyksZj0iIiwoIWEubiYmKGEubj1uZXcgbnQoZWMsYSwxLDcpKSxhLm4pLmk9PTB8fChmPWwoT2UoKCFhLm4mJihhLm49bmV3IG50KGVjLGEsMSw3KSksYS5uKSwwKSwxMzUpLmEpLGc9bmV3IHdudChmKSxwYyhnLGEpLHJ0KGcsKGJiKCksSHgpLGEpLGcuYT1yKyssZy5kLmE9YS5pK2EuZy8yLGcuZC5iPWEuaithLmYvMixnLmUuYT1iLk1hdGgubWF4KGEuZywxKSxnLmUuYj1iLk1hdGgubWF4KGEuZiwxKSx2dCh0LmUsZyksanUobi5mLGEsZyksdz1sKGF0KGEsKGIwKCksckFlKSksMTAxKSx3PT0oUmEoKSxXYikmJih3PVoxKX1mdW5jdGlvbiBSQW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdzt0LlVnKCJMYXllciBjb25zdHJhaW50IHBvc3Rwcm9jZXNzaW5nIiwxKSx3PWUuYix3LmMubGVuZ3RoIT0wJiYocj0oU24oMCx3LmMubGVuZ3RoKSxsKHcuY1swXSwzMCkpLGY9bChqdCh3LHcuYy5sZW5ndGgtMSksMzApLG49bmV3IHl1KGUpLG89bmV3IHl1KGUpLENfbihlLHIsZixuLG8pLG4uYS5jLmxlbmd0aD09MHx8KEV5KDAsdy5jLmxlbmd0aCkseF8ody5jLDAsbikpLG8uYS5jLmxlbmd0aD09MHx8JG4ody5jLG8pKSxucyhlLChmdCgpLEgxZSkpJiYoYT1uZXcgeXUoZSksZz1uZXcgeXUoZSksYlNuKGUsYSxnKSxhLmEuYy5sZW5ndGg9PTB8fChFeSgwLHcuYy5sZW5ndGgpLHhfKHcuYywwLGEpKSxnLmEuYy5sZW5ndGg9PTB8fCRuKHcuYyxnKSksdC5WZygpfWZ1bmN0aW9uIGdQKGUpe3ZhciB0LG4scjtzd2l0Y2goZSl7Y2FzZSA5MTpjYXNlIDkzOmNhc2UgNDU6Y2FzZSA5NDpjYXNlIDQ0OmNhc2UgOTI6cj0iXFwiK1N0cmluZy5mcm9tQ2hhckNvZGUoZSZacyk7YnJlYWs7Y2FzZSAxMjpyPSJcXGYiO2JyZWFrO2Nhc2UgMTA6cj0iXFxuIjticmVhaztjYXNlIDEzOnI9IlxcciI7YnJlYWs7Y2FzZSA5OnI9IlxcdCI7YnJlYWs7Y2FzZSAyNzpyPSJcXGUiO2JyZWFrO2RlZmF1bHQ6ZTwzMj8obj0odD1lPj4+MCwiMCIrdC50b1N0cmluZygxNikpLHI9IlxceCIrdGYobixuLmxlbmd0aC0yLG4ubGVuZ3RoKSk6ZT49SW8/KG49KHQ9ZT4+PjAsIjAiK3QudG9TdHJpbmcoMTYpKSxyPSJcXHYiK3RmKG4sbi5sZW5ndGgtNixuLmxlbmd0aCkpOnI9IiIrU3RyaW5nLmZyb21DaGFyQ29kZShlJlpzKX1yZXR1cm4gcn1mdW5jdGlvbiBVbXQoZSl7dmFyIHQsbixyO2lmKFA1KGwoUShlLChOdCgpLE1zKSksMTAxKSkpZm9yKG49bmV3IEcoZS5qKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTIpLHQuaj09KEN0KCksUGMpJiYocj1sKFEodCwoZnQoKSxqbCkpLDEwKSxyP2xhKHQsbChRKHIsV2MpLDY0KSk6dC5lLmMubGVuZ3RoLXQuZy5jLmxlbmd0aDwwP2xhKHQsYXIpOmxhKHQsZXIpKTtlbHNle2ZvcihuPW5ldyBHKGUuaik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEyKSxyPWwoUSh0LChmdCgpLGpsKSksMTApLHI/bGEodCxsKFEocixXYyksNjQpKTp0LmUuYy5sZW5ndGgtdC5nLmMubGVuZ3RoPDA/bGEodCwoQ3QoKSxhcikpOmxhKHQsKEN0KCksZXIpKTtydChlLE1zLChSYSgpLHNDKSl9fWZ1bmN0aW9uIFNrZShlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKHRoaXMuZT1uZXcgYnQsdGhpcy5hPW5ldyBidCxuPWUuYi0xO248MztuKyspUGsoZSwwLGwoZmYoZSwwKSw4KSk7aWYoZS5iPDQpdGhyb3cgdWUobmV3IFluKCJBdCAobGVhc3QgZGltZW5zaW9uICsgMSkgY29udHJvbCBwb2ludHMgYXJlIG5lY2Vzc2FyeSEiKSk7Zm9yKHRoaXMuYj0zLHRoaXMuZD0hMCx0aGlzLmM9ITEsZlRuKHRoaXMsZS5iK3RoaXMuYi0xKSxmPW5ldyBidCxvPW5ldyBHKHRoaXMuZSksdD0wO3Q8dGhpcy5iLTE7dCsrKXZ0KGYsR2UocmUobykpKTtmb3IoYT1ScihlLDApO2EuYiE9YS5kLmM7KXI9bChCcihhKSw4KSx2dChmLEdlKHJlKG8pKSksdnQodGhpcy5hLG5ldyByb3QocixmKSksU24oMCxmLmMubGVuZ3RoKSxmLmMuc3BsaWNlKDAsMSl9ZnVuY3Rpb24gR210KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2ZvcihvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwzMCksZz1uZXcgRyhhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTApLGYuaz09KFpuKCksY3UpJiYodz0oRT1sKHhyKG5ldyBocihkcihrYShmKS5hLktjKCksbmV3IGopKSksMTgpLEM9bCh4cihuZXcgaHIoZHIocXMoZikuYS5LYygpLG5ldyBqKSkpLDE4KSwhUnQoQnQoUShFLChmdCgpLFcxKSkpKXx8IVJ0KEJ0KFEoQyxXMSkpKT90OmMwdCh0KSksVHgoZix3KSkscj1uZXcgaHIoZHIocXMoZikuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksdz1SdChCdChRKG4sKGZ0KCksVzEpKSkpP2MwdCh0KTp0LHQwdChuLHcpfWZ1bmN0aW9uIGpBbihlLHQsbixyLGEpe3ZhciBvLGYsZztpZihuLmY+PXQubyYmbi5mPD10LmZ8fHQuYSouNTw9bi5mJiZ0LmEqMS41Pj1uLmYpe2lmKGY9bChqdCh0Lm4sdC5uLmMubGVuZ3RoLTEpLDIwOSksZi5lK2YuZCtuLmcrYTw9ciYmKG89bChqdCh0Lm4sdC5uLmMubGVuZ3RoLTEpLDIwOSksby5mLWUuZituLmY8PWUuYnx8ZS5hLmMubGVuZ3RoPT0xKSlyZXR1cm4geThlKHQsbiksITA7aWYodC5zK24uZzw9ciYmKHQudCt0LmQrbi5mK2E8PWUuYnx8ZS5hLmMubGVuZ3RoPT0xKSlyZXR1cm4gdnQodC5iLG4pLGc9bChqdCh0Lm4sdC5uLmMubGVuZ3RoLTEpLDIwOSksdnQodC5uLG5ldyBQSCh0LnMsZy5mK2cuYSt0LmksdC5pKSksZXhlKGwoanQodC5uLHQubi5jLmxlbmd0aC0xKSwyMDkpLG4pLGptdCh0LG4pLCEwfXJldHVybiExfWZ1bmN0aW9uIEttdChlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIGUuUGooKT8oYT1udWxsLG89ZS5RaigpLHI9ZS5JaigxLGY9VW9lKGUsdCxuKSxuLHQsbyksZS5NaigpJiYhKGUuWWkoKSYmZiE9bnVsbD9QaShmLG4pOnFlKGYpPT09cWUobikpPyhmIT1udWxsJiYoYT1lLk9qKGYsYSkpLGE9ZS5OaihuLGEpLGUuVGooKSYmKGE9ZS5XaihmLG4sYSkpLGE/KGEubmoociksYS5vaigpKTplLkpqKHIpKTooZS5UaigpJiYoYT1lLldqKGYsbixhKSksYT8oYS5uaihyKSxhLm9qKCkpOmUuSmoocikpLGYpOihmPVVvZShlLHQsbiksZS5NaigpJiYhKGUuWWkoKSYmZiE9bnVsbD9QaShmLG4pOnFlKGYpPT09cWUobikpJiYoYT1udWxsLGYhPW51bGwmJihhPWUuT2ooZixudWxsKSksYT1lLk5qKG4sYSksYSYmYS5vaigpKSxmKX1mdW5jdGlvbiAkQW4oZSx0KXt2YXIgbixyLGEsbyxmO2lmKHQuVWcoIlBhdGgtTGlrZSBHcmFwaCBXcmFwcGluZyIsMSksZS5iLmMubGVuZ3RoPT0wKXt0LlZnKCk7cmV0dXJufWlmKGE9bmV3IE05ZShlKSxmPShhLmk9PW51bGwmJihhLmk9eDdlKGEsbmV3IEdqKSksemUoYS5pKSphLmYpLG49Zi8oYS5pPT1udWxsJiYoYS5pPXg3ZShhLG5ldyBHaikpLHplKGEuaSkpLGEuYj5uKXt0LlZnKCk7cmV0dXJufXN3aXRjaChsKFEoZSwoTnQoKSxoZGUpKSwzNTEpLmcpe2Nhc2UgMjpvPW5ldyBXajticmVhaztjYXNlIDA6bz1uZXcgRVM7YnJlYWs7ZGVmYXVsdDpvPW5ldyBZan1pZihyPW8ub2coZSxhKSwhby5wZygpKXN3aXRjaChsKFEoZSxFVyksMzUyKS5nKXtjYXNlIDI6cj1GcHQoYSxyKTticmVhaztjYXNlIDE6cj1BZ3QoYSxyKX1CTG4oZSxhLHIpLHQuVmcoKX1mdW5jdGlvbiBYQShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7dCU9MjQsZS5xLmdldEhvdXJzKCkhPXQmJihyPW5ldyBiLkRhdGUoZS5xLmdldFRpbWUoKSksci5zZXREYXRlKHIuZ2V0RGF0ZSgpKzEpLGc9ZS5xLmdldFRpbWV6b25lT2Zmc2V0KCktci5nZXRUaW1lem9uZU9mZnNldCgpLGc+MCYmKHc9Zy82MHwwLEU9ZyU2MCxhPWUucS5nZXREYXRlKCksbj1lLnEuZ2V0SG91cnMoKSxuK3c+PTI0JiYrK2Esbz1uZXcgYi5EYXRlKGUucS5nZXRGdWxsWWVhcigpLGUucS5nZXRNb250aCgpLGEsdCt3LGUucS5nZXRNaW51dGVzKCkrRSxlLnEuZ2V0U2Vjb25kcygpLGUucS5nZXRNaWxsaXNlY29uZHMoKSksZS5xLnNldFRpbWUoby5nZXRUaW1lKCkpKSksZj1lLnEuZ2V0VGltZSgpLGUucS5zZXRUaW1lKGYrMzZlNSksZS5xLmdldEhvdXJzKCkhPXQmJmUucS5zZXRUaW1lKGYpfWZ1bmN0aW9uIHpBbihlLHQpe3ZhciBuLHIsYSxvO2lmKGVibihlLmQsZS5lKSxlLmMuYS4kYigpLHplKEdlKFEodC5qLChOdCgpLGhXKSkpKSE9MHx8emUoR2UoUSh0LmosaFcpKSkhPTApZm9yKG49eTYscWUoUSh0LmoseWcpKSE9PXFlKChFZCgpLEUyKSkmJnJ0KHQuaiwoZnQoKSxqYiksKEhuKCksITApKSxvPWwoUSh0Lmosbk0pLDE3KS5hLGE9MDthPG8mJihyPXRMbihlLHQpLCEocjxuJiYobj1yLHZmdChlKSxuPT0wKSkpO2ErKyk7ZWxzZSBmb3Iobj1JaSxxZShRKHQuaix5ZykpIT09cWUoKEVkKCksRTIpKSYmcnQodC5qLChmdCgpLGpiKSwoSG4oKSwhMCkpLG89bChRKHQuaixuTSksMTcpLmEsYT0wO2E8byYmKHI9Sm10KGUsdCksIShyPG4mJihuPXIsdmZ0KGUpLG49PTApKSk7YSsrKTt9ZnVuY3Rpb24gcUFuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtmb3IoZj1uZXcgYnQsZz0wLG49MCx3PTA7Zzx0LmMubGVuZ3RoLTEmJm48ZS5nYygpOyl7Zm9yKHI9bChlLlhiKG4pLDE3KS5hK3c7KFNuKGcrMSx0LmMubGVuZ3RoKSxsKHQuY1tnKzFdLDE3KSkuYTxyOykrK2c7Zm9yKEU9MCxvPXItKFNuKGcsdC5jLmxlbmd0aCksbCh0LmNbZ10sMTcpKS5hLGE9KFNuKGcrMSx0LmMubGVuZ3RoKSxsKHQuY1tnKzFdLDE3KSkuYS1yLG8+YSYmKytFLHZ0KGYsKFNuKGcrRSx0LmMubGVuZ3RoKSxsKHQuY1tnK0VdLDE3KSkpLHcrPShTbihnK0UsdC5jLmxlbmd0aCksbCh0LmNbZytFXSwxNykpLmEtciwrK247bjxlLmdjKCkmJmwoZS5YYihuKSwxNykuYSt3PD0oU24oZytFLHQuYy5sZW5ndGgpLGwodC5jW2crRV0sMTcpKS5hOykrK247Zys9MStFfXJldHVybiBmfWZ1bmN0aW9uIEhBbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGY9bmV3IGhyKGRyKGthKHQpLmEuS2MoKSxuZXcgaikpO2pyKGYpOylpZihvPWwoeHIoZiksMTgpLGUuZi5iPT0wPyhhPW8uYy5pLms9PShabigpLFBzKSYmISFvLmMuaS5jJiZvLmMuaS5jLnA9PWUuYyxqcihuZXcgaHIoZHIoa2Eoby5jLmkpLmEuS2MoKSxuZXcgaikpKT8obj1sKHhyKG5ldyBocihkcihrYShvLmMuaSkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmkuYyxyPW8uYy5pLms9PWN1JiYhIW4mJm4ucD09ZS5jKTpyPSExKTooYT1vLmMuaS5rPT0oWm4oKSxQcykmJm8uYy5pLnA9PWUuYyxyPW8uYy5pLms9PWN1JiZsKHhyKG5ldyBocihkcihrYShvLmMuaSkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmkucD09ZS5jKSxhfHxyKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFZBbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKEI9bmV3IGJ0LGZlPUhIKHIpLHRlPXQqZS5hLEw9MCxWPTAsbz1uZXcgS3MsZj1uZXcgS3MsZz1uZXcgYnQsVGU9MCxNZT0wLHo9MCxKPTAsRT0wLEM9MDtmZS5hLmdjKCkhPTA7KXc9UjRuKGZlLGEsZiksdyYmKGZlLmEuQmModykhPW51bGwsJG4oZy5jLHcpLG8uYS56Yyh3LG8pLFY9ZS5mW3cucF0sVGUrPWUuZVt3LnBdLVYqZS5iLEw9ZS5jW3cucF0sTWUrPUwqZS5iLEMrPVYqZS5iLEorPWUuZVt3LnBdKSwoIXd8fGZlLmEuZ2MoKT09MHx8VGU+PXRlJiZlLmVbdy5wXT5WKmUuYnx8TWU+PW4qdGUpJiYoJG4oQi5jLGcpLGc9bmV3IGJ0LEthKGYsbyksby5hLiRiKCksRS09Qyx6PWIuTWF0aC5tYXgoeixFKmUuYitKKSxFKz1NZSxUZT1NZSxNZT0wLEM9MCxKPTApO3JldHVybiBuZXcgY2EoeixCKX1mdW5jdGlvbiBkbGUoZSl7dmFyIHQsbixyLGEsbyxmLGc7aWYoIWUuZCl7aWYoZz1uZXcgSm5lLHQ9cU0sbz10LmEuemMoZSx0KSxvPT1udWxsKXtmb3Iocj1uZXcgb3IoZGMoZSkpO3IuZSE9ci5pLmdjKCk7KW49bChncihyKSwyOSksQXMoZyxkbGUobikpO3QuYS5CYyhlKSE9bnVsbCx0LmEuZ2MoKT09MH1mb3IoZj1nLmksYT0oIWUucSYmKGUucT1uZXcgbnQoVWYsZSwxMSwxMCkpLG5ldyBvcihlLnEpKTthLmUhPWEuaS5nYygpOysrZilsKGdyKGEpLDQxMSk7QXMoZywoIWUucSYmKGUucT1uZXcgbnQoVWYsZSwxMSwxMCkpLGUucSkpLEl5KGcpLGUuZD1uZXcgTjUoKGwoT2UodHQoKGxiKCksVm4pLm8pLDkpLDE5KSxnLmkpLGcuZyksZS5lPWwoZy5nLDY4OCksZS5lPT1udWxsJiYoZS5lPVhfdCksWWwoZSkuYiY9LTE3fXJldHVybiBlLmR9ZnVuY3Rpb24gWEUoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2lmKEU9V3UoZS5lLkRoKCksdCksdz0wLGE9bChlLmcsMTI0KSxGbygpLGwodCw2OSkueGsoKSl7Zm9yKGY9MDtmPGUuaTsrK2YpaWYobz1hW2ZdLEUuYW0oby5MaygpKSl7aWYoUGkobyxuKSlyZXR1cm4gdzsrK3d9fWVsc2UgaWYobiE9bnVsbCl7Zm9yKGc9MDtnPGUuaTsrK2cpaWYobz1hW2ddLEUuYW0oby5MaygpKSl7aWYoUGkobixvLm1kKCkpKXJldHVybiB3Oysrd31pZihyKXtmb3Iodz0wLGY9MDtmPGUuaTsrK2YpaWYobz1hW2ZdLEUuYW0oby5MaygpKSl7aWYocWUobik9PT1xZShjYWUoZSxsKG8ubWQoKSw1OCkpKSlyZXR1cm4gdzsrK3d9fX1lbHNlIGZvcihmPTA7ZjxlLmk7KytmKWlmKG89YVtmXSxFLmFtKG8uTGsoKSkpe2lmKG8ubWQoKT09bnVsbClyZXR1cm4gdzsrK3d9cmV0dXJuLTF9ZnVuY3Rpb24gVUFuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtpZihuLlhoKHQpJiYoQz0oej10LHo/bChyLDU0KS5naSh6KTpudWxsKSxDKSlpZihKPW4uTmgodCxlLmEpLFY9dC50LFY+MXx8Vj09LTEpaWYoTD1sKEosNzEpLEI9bChDLDcxKSxMLmRjKCkpQi4kYigpO2Vsc2UgZm9yKGY9ISFSbyh0KSxvPTAsZz1lLmE/TC5LYygpOkwuSWkoKTtnLk9iKCk7KUU9bChnLlBiKCksNTgpLGE9bChCMShlLEUpLDU4KSxhPyhmPyh3PUIuZGQoYSksdz09LTE/Qi5HaShvLGEpOm8hPXcmJkIuVWkobyxhKSk6Qi5HaShvLGEpLCsrbyk6ZS5iJiYhZiYmKEIuR2kobyxFKSwrK28pO2Vsc2UgSj09bnVsbD9DLldiKG51bGwpOihhPUIxKGUsSiksYT09bnVsbD9lLmImJiFSbyh0KSYmQy5XYihKKTpDLldiKGEpKX1mdW5jdGlvbiBHQW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihuPW5ldyBnWixhPW5ldyBocihkcihrYSh0KS5hLktjKCksbmV3IGopKTtqcihhKTspaWYocj1sKHhyKGEpLDE4KSwhRG8ocikmJihnPXIuYy5pLEJ4ZShnLFNLKSkpe2lmKEU9dGtlKGUsZyxTSyxDSyksRT09LTEpY29udGludWU7bi5iPWIuTWF0aC5tYXgobi5iLEUpLCFuLmEmJihuLmE9bmV3IGJ0KSx2dChuLmEsZyl9Zm9yKGY9bmV3IGhyKGRyKHFzKHQpLmEuS2MoKSxuZXcgaikpO2pyKGYpOylpZihvPWwoeHIoZiksMTgpLCFEbyhvKSYmKHc9by5kLmksQnhlKHcsQ0spKSl7aWYoRT10a2UoZSx3LENLLFNLKSxFPT0tMSljb250aW51ZTtuLmQ9Yi5NYXRoLm1heChuLmQsRSksIW4uYyYmKG4uYz1uZXcgYnQpLHZ0KG4uYyx3KX1yZXR1cm4gbn1mdW5jdGlvbiBLQW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEM7aWYobi5kLmkhPXQuaSl7Zm9yKGE9bmV3IG9wKGUpLHgoYSwoWm4oKSxBYSkpLHJ0KGEsKGZ0KCksemkpLG4pLHJ0KGEsKE50KCksTXMpLChSYSgpLE11KSksJG4oci5jLGEpLGY9bmV3IGd1LE1jKGYsYSksbGEoZiwoQ3QoKSxlcikpLGc9bmV3IGd1LE1jKGcsYSksbGEoZyxhciksQz1uLmQsRmEobixmKSxvPW5ldyBUdyxwYyhvLG4pLHJ0KG8sY2MsbnVsbCkscG8obyxnKSxGYShvLEMpLEU9bmV3IFVhKG4uYiwwKTtFLmI8RS5kLmdjKCk7KXc9KG1yKEUuYjxFLmQuZ2MoKSksbChFLmQuWGIoRS5jPUUuYisrKSw3MikpLHFlKFEodyxqZCkpPT09cWUoKEYxKCksXzQpKSYmKHJ0KHcsS3gsbikscGgoRSksdnQoby5iLHcpKTtTMnQoYSxmLGcpfX1mdW5jdGlvbiBXQW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEM7aWYobi5jLmkhPXQuaSlmb3IoYT1uZXcgb3AoZSkseChhLChabigpLEFhKSkscnQoYSwoZnQoKSx6aSksbikscnQoYSwoTnQoKSxNcyksKFJhKCksTXUpKSwkbihyLmMsYSksZj1uZXcgZ3UsTWMoZixhKSxsYShmLChDdCgpLGVyKSksZz1uZXcgZ3UsTWMoZyxhKSxsYShnLGFyKSxGYShuLGYpLG89bmV3IFR3LHBjKG8sbikscnQobyxjYyxudWxsKSxwbyhvLGcpLEZhKG8sdCksUzJ0KGEsZixnKSxFPW5ldyBVYShuLmIsMCk7RS5iPEUuZC5nYygpOyl3PShtcihFLmI8RS5kLmdjKCkpLGwoRS5kLlhiKEUuYz1FLmIrKyksNzIpKSxDPWwoUSh3LGpkKSwyNzgpLEM9PShGMSgpLF80KSYmKG5zKHcsS3gpfHxydCh3LEt4LG4pLHBoKEUpLHZ0KG8uYix3KSl9ZnVuY3Rpb24gV210KGUpe0dFKCk7dmFyIHQsbixyLGE7aWYodD11YShlKSxlPEZMLmxlbmd0aClyZXR1cm4gRkxbdF07aWYoZTw9NTApcmV0dXJuIGlQKChDZCgpLE0wZSksdCk7aWYoZTw9YjIpcmV0dXJuIHN4KGlQKCR4WzFdLHQpLHQpO2lmKGU+MWU2KXRocm93IHVlKG5ldyBxeigicG93ZXIgb2YgdGVuIHRvbyBiaWciKSk7aWYoZTw9SWkpcmV0dXJuIHN4KGlQKCR4WzFdLHQpLHQpO2ZvcihyPWlQKCR4WzFdLElpKSxhPXIsbj1aYyhlLUlpKSx0PXVhKGUlSWkpO2l1KG4sSWkpPjA7KWE9SzUoYSxyKSxuPURmKG4sSWkpO2ZvcihhPUs1KGEsaVAoJHhbMV0sdCkpLGE9c3goYSxJaSksbj1aYyhlLUlpKTtpdShuLElpKT4wOylhPXN4KGEsSWkpLG49RGYobixJaSk7cmV0dXJuIGE9c3goYSx0KSxhfWZ1bmN0aW9uIFltdChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQztmb3Iodz1uZXcgRyhlLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWlmKGc9bChyZSh3KSwxMCksZy5rPT0oWm4oKSxVcykmJihhPWwoUShnLChmdCgpLFdjKSksNjQpLGE9PShDdCgpLGFyKXx8YT09ZXIpKWZvcihyPW5ldyBocihkcihzcChnKS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDE4KSx0PW4uYSx0LmIhPTAmJihFPW4uYyxFLmk9PWcmJihvPShtcih0LmIhPTApLGwodC5hLmEuYyw4KSksby5iPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbRS5pLm4sRS5uLEUuYV0pKS5iKSxDPW4uZCxDLmk9PWcmJihmPShtcih0LmIhPTApLGwodC5jLmIuYyw4KSksZi5iPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbQy5pLm4sQy5uLEMuYV0pKS5iKSl9ZnVuY3Rpb24gUUEoZSx0LG4scil7dmFyIGEsbyxmO2lmKHRoaXMuaj1uZXcgYnQsdGhpcy5rPW5ldyBidCx0aGlzLmI9bmV3IGJ0LHRoaXMuYz1uZXcgYnQsdGhpcy5lPW5ldyAkOCx0aGlzLmk9bmV3IGJsLHRoaXMuZj1uZXcgQmllLHRoaXMuZD1uZXcgYnQsdGhpcy5nPW5ldyBidCx2dCh0aGlzLmIsZSksdnQodGhpcy5iLHQpLHRoaXMuZS5jPWIuTWF0aC5taW4oZS5hLHQuYSksdGhpcy5lLmQ9Yi5NYXRoLm1pbihlLmIsdC5iKSx0aGlzLmUuYj1iLk1hdGguYWJzKGUuYS10LmEpLHRoaXMuZS5hPWIuTWF0aC5hYnMoZS5iLXQuYiksYT1sKFEociwoTnQoKSxjYykpLDc1KSxhKWZvcihmPVJyKGEsMCk7Zi5iIT1mLmQuYzspbz1sKEJyKGYpLDgpLFg2ZShvLmEsZS5hKSYmdWkodGhpcy5pLG8pO24mJnZ0KHRoaXMuaixuKSx2dCh0aGlzLmsscil9ZnVuY3Rpb24gWUFuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO2ZvcihnPS0xLEM9bmV3IEcoZSk7Qy5hPEMuYy5jLmxlbmd0aDspRT1sKHJlKEMpLDExOCksRS5nPWctLSxhPVlyKGpIKFRIKEZpKG5ldyBibihudWxsLG5ldyBrbihFLmYsMTYpKSxuZXcgYnRlKSxuZXcgbXRlKSkuZCksbz1ZcihqSChUSChGaShuZXcgYm4obnVsbCxuZXcga24oRS5rLDE2KSksbmV3IHZ0ZSksbmV3IHd0ZSkpLmQpLGY9YSx3PW8scnx8KGY9WXIoakgoVEgobmV3IGJuKG51bGwsbmV3IGtuKEUuZiwxNikpLG5ldyB5dGUpKS5kKSx3PVlyKGpIKFRIKG5ldyBibihudWxsLG5ldyBrbihFLmssMTYpKSxuZXcgZ3RlKSkuZCkpLEUuZD1mLEUuYT1hLEUuaT13LEUuYj1vLHc9PTA/Q3MobixFLG4uYy5iLG4uYyk6Zj09MCYmQ3ModCxFLHQuYy5iLHQuYyl9ZnVuY3Rpb24gVHgoZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYoZS5rPT0oWm4oKSxjdSkmJihuPWUuaz09Y3UmJiFfayhGaShsKFEoZSwoZnQoKSxXTCkpLDE1KS5PYygpLG5ldyBXbChuZXcgdWopKSkuQmQoKEFtKCksengpKT8oSWgoKSxaQik6dCxydChlLChmdCgpLFl4KSxuKSxuIT0oSWgoKSxHYikpKWZvcihyPWwoUShlLHppKSwxOCksZz16ZShHZShRKHIsKE50KCkseDIpKSkpLGY9MCxuPT1rZz9mPWUuby5iLWIuTWF0aC5jZWlsKGcvMik6bj09WkImJihmPWIuTWF0aC5jZWlsKGUuby5iLXplKEdlKFEoZW8oZSksSDYpKSktZykvMixlLm8uYi09emUoR2UoUShlbyhlKSxINikpKSxlLm8uYi09Zyksbz1uZXcgRyhlLmopO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwxMiksYS5uLmI9Zn1mdW5jdGlvbiBYbXQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTDtmb3IoYT0hMCxmPW5ldyBHKGUuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2ZvcihvPWwocmUoZiksMzApLEU9aWEsQz1udWxsLHc9bmV3IEcoby5hKTt3LmE8dy5jLmMubGVuZ3RoOylpZihnPWwocmUodyksMTApLEw9emUodC5wW2cucF0pK3plKHQuZFtnLnBdKS1nLmQuZCxyPXplKHQucFtnLnBdKSt6ZSh0LmRbZy5wXSkrZy5vLmIrZy5kLmEsTD5FJiZyPkUpQz1nLEU9emUodC5wW2cucF0pK3plKHQuZFtnLnBdKStnLm8uYitnLmQuYTtlbHNle2E9ITEsbi5fZygpJiZuLmJoKCJiayBub2RlIHBsYWNlbWVudCBicmVha3Mgb24gIitnKyIgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBhZnRlciAiK0MpO2JyZWFrfWlmKCFhKWJyZWFrfXJldHVybiBuLl9nKCkmJm4uYmgodCsiIGlzIGZlYXNpYmxlOiAiK2EpLGF9ZnVuY3Rpb24gX2tlKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQjtpZihvPW5ldyBvcChlKSx4KG8sKFpuKCksQXUpKSxydChvLChOdCgpLE1zKSwoUmEoKSxNdSkpLGE9MCx0KXtmb3IoZj1uZXcgZ3UscnQoZiwoZnQoKSx6aSksdCkscnQobyx6aSx0LmkpLGxhKGYsKEN0KCksZXIpKSxNYyhmLG8pLEI9a2QodC5lKSxFPUIsQz0wLEw9RS5sZW5ndGg7QzxMOysrQyl3PUVbQ10sRmEodyxmKTtydCh0LGpsLG8pLCsrYX1pZihuKXtmb3IoZz1uZXcgZ3UscnQobywoZnQoKSx6aSksbi5pKSxydChnLHppLG4pLGxhKGcsKEN0KCksYXIpKSxNYyhnLG8pLEI9a2Qobi5nKSxFPUIsQz0wLEw9RS5sZW5ndGg7QzxMOysrQyl3PUVbQ10scG8odyxnKTtydChuLGpsLG8pLCsrYX1yZXR1cm4gcnQobywoZnQoKSxpVykscHQoYSkpLCRuKHIuYyxvKSxvfWZ1bmN0aW9uIFhBbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtmb3Iobj0oRT1uZXcgZ2koZS5jLmIpLmEudmMoKS5LYygpLG5ldyBmcyhFKSk7bi5hLk9iKCk7KXQ9KGc9bChuLmEuUGIoKSw0NCksbChnLm1kKCksMTQzKSksYT10LmEsYT09bnVsbCYmKGE9IiIpLHI9a2ZuKGUuYyxhKSwhciYmYS5sZW5ndGg9PTAmJihyPWw0bihlKSksciYmIU55KHIuYyx0LCExKSYmdWkoci5jLHQpO2ZvcihmPVJyKGUuYSwwKTtmLmIhPWYuZC5jOylvPWwoQnIoZiksNDg3KSxDPV9vZShlLmMsby5hKSx6PV9vZShlLmMsby5iKSxDJiZ6JiZ1aShDLmMsbmV3IGNhKHosby5jKSk7Zm9yKENoKGUuYSksQj1ScihlLmIsMCk7Qi5iIT1CLmQuYzspTD1sKEJyKEIpLDQ4NyksdD14Zm4oZS5jLEwuYSksdz1fb2UoZS5jLEwuYiksdCYmdyYmZWxuKHQsdyxMLmMpO0NoKGUuYil9ZnVuY3Rpb24gUUFuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6O289bmV3IHdrKGUpLGY9bmV3IGNndCxhPShlTihmLmcpLGVOKGYuaiksTmwoZi5iKSxlTihmLmQpLGVOKGYuaSksTmwoZi5rKSxObChmLmMpLE5sKGYuZSksej1IcHQoZixvLG51bGwpLFIydChmLG8pLHopLHQmJihFPW5ldyB3ayh0KSxnPWFMbihFKSxZeGUoYSxoZShsZShIT2UsMSksUm4sNTM2LDAsW2ddKSkpLEI9ITEsTD0hMSxuJiYoRT1uZXcgd2sobiksSEcgaW4gRS5hJiYoQj1XZyhFLEhHKS5xZSgpLmEpLFM0dCBpbiBFLmEmJihMPVdnKEUsUzR0KS5xZSgpLmEpKSxDPVpKZShWaHQobmV3IEw4LEIpLEwpLE45bihuZXcgdHksYSxDKSxIRyBpbiBvLmEmJmUxKG8sSEcsbnVsbCksKEJ8fEwpJiYodz1uZXcgTTgsRG10KEMsdyxCLEwpLGUxKG8sSEcsdykpLHI9bmV3IEpYZShmKSx2eW4obmV3IGh5ZShhKSxyKX1mdW5jdGlvbiBKQW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTDtmb3IoZj1uZXcgZGd0LEU9aGUobGUoVnIsMSksZGksMjgsMTUsWzBdKSxhPS0xLG89MCxyPTAsdz0wO3c8ZS5iLmMubGVuZ3RoOysrdylpZihDPWwoanQoZS5iLHcpLDQ0MyksQy5iPjApe2lmKGE8MCYmQy5hJiYoYT13LG89RVswXSxyPTApLGE+PTApe2lmKGc9Qy5iLHc9PWEmJihnLT1yKyssZz09MCkpcmV0dXJuIDA7aWYoIVp2dCh0LEUsQyxnLGYpKXt3PWEtMSxFWzBdPW87Y29udGludWV9fWVsc2UgaWYoYT0tMSwhWnZ0KHQsRSxDLDAsZikpcmV0dXJuIDB9ZWxzZXtpZihhPS0xLGNvKEMuYywwKT09MzIpe2lmKEw9RVswXSxlaHQodCxFKSxFWzBdPkwpY29udGludWV9ZWxzZSBpZihQcG4odCxDLmMsRVswXSkpe0VbMF0rPUMuYy5sZW5ndGg7Y29udGludWV9cmV0dXJuIDB9cmV0dXJuIEZEbihmLG4pP0VbMF06MH1mdW5jdGlvbiBaQW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihDPW5ldyBnSChuZXcgRHoobikpLGc9V2UoaWgscGcsMjgsZS5mLmUuYy5sZW5ndGgsMTYsMSksbDVlKGcsZy5sZW5ndGgpLG5bdC5hXT0wLEU9bmV3IEcoZS5mLmUpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxNTMpLHcuYSE9dC5hJiYoblt3LmFdPUlpKSxLOCgkRShDLHcpLGFUKTtmb3IoO0MuYi5jLmxlbmd0aCE9MDspZm9yKEw9bChLb2UoQyksMTUzKSxnW0wuYV09ITAsbz1ZbnQobmV3IHNzZShlLmIsTCksMCk7by5jOylhPWwoRzZlKG8pLDI5MCksQj1oN24oYSxMKSwhZ1tCLmFdJiYobnMoYSwoVk4oKSxUSykpP2Y9emUoR2UoUShhLFRLKSkpOmY9ZS5jLHI9bltMLmFdK2YscjxuW0IuYV0mJihuW0IuYV09cixoZnQoQyxCKSxLOCgkRShDLEIpLGFUKSkpfWZ1bmN0aW9uIGVMbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihmPWUubyxyPVdlKFZyLGRpLDI4LGYsMTUsMSksYT1XZShWcixkaSwyOCxmLDE1LDEpLG49ZS5wLHQ9V2UoVnIsZGksMjgsbiwxNSwxKSxvPVdlKFZyLGRpLDI4LG4sMTUsMSksRT0wO0U8ZjtFKyspe2ZvcihMPTA7TDxuJiYhcjYoZSxFLEwpOykrK0w7cltFXT1MfWZvcihDPTA7QzxmO0MrKyl7Zm9yKEw9bi0xO0w+PTAmJiFyNihlLEMsTCk7KS0tTDthW0NdPUx9Zm9yKHo9MDt6PG47eisrKXtmb3IoZz0wO2c8ZiYmIXI2KGUsZyx6KTspKytnO3Rbel09Z31mb3IoVj0wO1Y8bjtWKyspe2ZvcihnPWYtMTtnPj0wJiYhcjYoZSxnLFYpOyktLWc7b1tWXT1nfWZvcih3PTA7dzxmO3crKylmb3IoQj0wO0I8bjtCKyspdzxvW0JdJiZ3PnRbQl0mJkI8YVt3XSYmQj5yW3ddJiZGVShlLHcsQiwhMSwhMCl9ZnVuY3Rpb24gQWtlKGUpe3ZhciB0LG4scixhLG8sZixnLHc7bj1SdChCdChRKGUsKGIwKCksSzd0KSkpKSxvPWUuYS5jLmQsZz1lLmEuZC5kLG4/KGY9bWQobWEobmV3IGx0KGcuYSxnLmIpLG8pLC41KSx3PW1kKEphKGUuZSksLjUpLHQ9bWEoT2kobmV3IGx0KG8uYSxvLmIpLGYpLHcpLEZ5ZShlLmQsdCkpOihhPXplKEdlKFEoZS5hLG44dCkpKSxyPWUuZCxvLmE+PWcuYT9vLmI+PWcuYj8oci5hPWcuYSsoby5hLWcuYSkvMithLHIuYj1nLmIrKG8uYi1nLmIpLzItYS1lLmUuYik6KHIuYT1nLmErKG8uYS1nLmEpLzIrYSxyLmI9by5iKyhnLmItby5iKS8yK2EpOm8uYj49Zy5iPyhyLmE9by5hKyhnLmEtby5hKS8yK2Esci5iPWcuYisoby5iLWcuYikvMithKTooci5hPW8uYSsoZy5hLW8uYSkvMithLHIuYj1vLmIrKGcuYi1vLmIpLzItYS1lLmUuYikpfWZ1bmN0aW9uIEpBKGUpe3ZhciB0LG4scixhLG8sZixnLHc7aWYoIWUuZil7aWYodz1uZXcgX0ksZz1uZXcgX0ksdD1xTSxmPXQuYS56YyhlLHQpLGY9PW51bGwpe2ZvcihvPW5ldyBvcihkYyhlKSk7by5lIT1vLmkuZ2MoKTspYT1sKGdyKG8pLDI5KSxBcyh3LEpBKGEpKTt0LmEuQmMoZSkhPW51bGwsdC5hLmdjKCk9PTB9Zm9yKHI9KCFlLnMmJihlLnM9bmV3IG50KGRsLGUsMjEsMTcpKSxuZXcgb3IoZS5zKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDE3OSksRGUobiwxMDIpJiZxcihnLGwobiwxOSkpO0l5KGcpLGUucj1uZXcgeml0KGUsKGwoT2UodHQoKGxiKCksVm4pLm8pLDYpLDE5KSxnLmkpLGcuZyksQXModyxlLnIpLEl5KHcpLGUuZj1uZXcgTjUoKGwoT2UodHQoVm4ubyksNSksMTkpLHcuaSksdy5nKSxZbChlKS5iJj0tM31yZXR1cm4gZS5mfWZ1bmN0aW9uIFFtdChlKXtzdyhlLG5ldyBYbShudyhadih0dyhldyhuZXcgeDEsbnYpLCJFTEsgRGlzQ28iKSwiTGF5b3V0ZXIgZm9yIGFycmFuZ2luZyB1bmNvbm5lY3RlZCBzdWJncmFwaHMuIFRoZSBzdWJncmFwaHMgdGhlbXNlbHZlcyBhcmUsIGJ5IGRlZmF1bHQsIG5vdCBsYWlkIG91dC4iKSxuZXcgejApKSksZ3QoZSxudixfaGUsSXQoWF9lKSksZ3QoZSxudixBaGUsSXQoVzBlKSksZ3QoZSxudixPeCxJdChJN3QpKSxndChlLG52LFh3LEl0KFlfZSkpLGd0KGUsbnYsYkVlLEl0KEI3dCkpLGd0KGUsbnYsbUVlLEl0KFA3dCkpLGd0KGUsbnYscEVlLEl0KEY3dCkpLGd0KGUsbnYsdkVlLEl0KE43dCkpLGd0KGUsbnYsQ0VlLEl0KE83dCkpLGd0KGUsbnYsU0VlLEl0KEswZSkpLGd0KGUsbnYsX0VlLEl0KFdfZSkpLGd0KGUsbnYsQUVlLEl0KHZLKSl9ZnVuY3Rpb24gelUoKXt6VT1VLGJQZT1oZShsZShrZiwxKSxBZCwyOCwxNSxbNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjUsNjYsNjcsNjgsNjksNzBdKSxTX3Q9bmV3IFJlZ0V4cChgWyAJClxyXGZdK2ApO3RyeXtqTT1oZShsZShQT24sMSksUm4sMjExNCwwLFtuZXcgS0koKGl5ZSgpLEtWKCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1NaIixNTygoenooKSx6eigpLE5MKSkpKSksbmV3IEtJKEtWKCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1MiLE1PKE5MKSkpLG5ldyBLSShLVigieXl5eS1NTS1kZCdUJ0hIOm1tOnNzIixNTyhOTCkpKSxuZXcgS0koS1YoInl5eXktTU0tZGQnVCdISDptbSIsTU8oTkwpKSksbmV3IEtJKEtWKCJ5eXl5LU1NLWRkIixNTyhOTCkpKV0pfWNhdGNoKGUpe2lmKGU9YnMoZSksIURlKGUsODIpKXRocm93IHVlKGUpfX1mdW5jdGlvbiB0TG4oZSx0KXt2YXIgbixyLGEsbztpZihhPUpsKGUuZCwxKSE9MCxyPWNrZShlLHQpLHI9PTAmJlJ0KEJ0KFEodC5qLChmdCgpLGpiKSkpKSlyZXR1cm4gMDshUnQoQnQoUSh0LmosKGZ0KCksamIpKSkpJiYhUnQoQnQoUSh0LmosajYpKSl8fHFlKFEodC5qLChOdCgpLHlnKSkpPT09cWUoKEVkKCksRTIpKT90LmMubWcodC5lLGEpOmE9UnQoQnQoUSh0LmosamIpKSksY1AoZSx0LGEsITApLFJ0KEJ0KFEodC5qLGo2KSkpJiZydCh0LmosajYsKEhuKCksITEpKSxSdChCdChRKHQuaixqYikpKSYmKHJ0KHQuaixqYiwoSG4oKSwhMSkpLHJ0KHQuaixqNiwhMCkpLG49Y2tlKGUsdCk7ZG97aWYodzdlKGUpLG49PTApcmV0dXJuIDA7YT0hYSxvPW4sY1AoZSx0LGEsITEpLG49Y2tlKGUsdCl9d2hpbGUobz5uKTtyZXR1cm4gb31mdW5jdGlvbiBKbXQoZSx0KXt2YXIgbixyLGEsbztpZihhPUpsKGUuZCwxKSE9MCxyPXhVKGUsdCkscj09MCYmUnQoQnQoUSh0LmosKGZ0KCksamIpKSkpKXJldHVybiAwOyFSdChCdChRKHQuaiwoZnQoKSxqYikpKSkmJiFSdChCdChRKHQuaixqNikpKXx8cWUoUSh0LmosKE50KCkseWcpKSk9PT1xZSgoRWQoKSxFMikpP3QuYy5tZyh0LmUsYSk6YT1SdChCdChRKHQuaixqYikpKSxjUChlLHQsYSwhMCksUnQoQnQoUSh0LmosajYpKSkmJnJ0KHQuaixqNiwoSG4oKSwhMSkpLFJ0KEJ0KFEodC5qLGpiKSkpJiYocnQodC5qLGpiLChIbigpLCExKSkscnQodC5qLGo2LCEwKSksbj14VShlLHQpO2Rve2lmKHc3ZShlKSxuPT0wKXJldHVybiAwO2E9IWEsbz1uLGNQKGUsdCxhLCExKSxuPXhVKGUsdCl9d2hpbGUobz5uKTtyZXR1cm4gb31mdW5jdGlvbiBMa2UoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCO3JldHVybiB3PW1hKG5ldyBsdChuLmEsbi5iKSxlKSxFPXcuYSp0LmItdy5iKnQuYSxDPXQuYSpyLmItdC5iKnIuYSxMPSh3LmEqci5iLXcuYipyLmEpL0MsQj1FL0MsQz09MD9FPT0wPyhhPU9pKG5ldyBsdChuLmEsbi5iKSxtZChuZXcgbHQoci5hLHIuYiksLjUpKSxvPXBiKGUsYSksZj1wYihPaShuZXcgbHQoZS5hLGUuYiksdCksYSksZz1iLk1hdGguc3FydChyLmEqci5hK3IuYipyLmIpKi41LG88ZiYmbzw9Zz9uZXcgbHQoZS5hLGUuYik6Zjw9Zz9PaShuZXcgbHQoZS5hLGUuYiksdCk6bnVsbCk6bnVsbDpMPj0wJiZMPD0xJiZCPj0wJiZCPD0xP09pKG5ldyBsdChlLmEsZS5iKSxtZChuZXcgbHQodC5hLHQuYiksTCkpOm51bGx9ZnVuY3Rpb24gbkxuKGUsdCxuKXt2YXIgcixhLG8sZixnO2lmKHI9bChRKGUsKE50KCksSjFlKSksMjEpLG4uYT50LmEmJihyLkhjKChZbSgpLEVNKSk/ZS5jLmErPShuLmEtdC5hKS8yOnIuSGMoVE0pJiYoZS5jLmErPW4uYS10LmEpKSxuLmI+dC5iJiYoci5IYygoWW0oKSxTTSkpP2UuYy5iKz0obi5iLXQuYikvMjpyLkhjKENNKSYmKGUuYy5iKz1uLmItdC5iKSksbChRKGUsKGZ0KCksTHUpKSwyMSkuSGMoKEhvKCksdmYpKSYmKG4uYT50LmF8fG4uYj50LmIpKWZvcihnPW5ldyBHKGUuYSk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEwKSxmLms9PShabigpLFVzKSYmKGE9bChRKGYsV2MpLDY0KSxhPT0oQ3QoKSxhcik/Zi5uLmErPW4uYS10LmE6YT09RHImJihmLm4uYis9bi5iLXQuYikpO289ZS5kLGUuZi5hPW4uYS1vLmItby5jLGUuZi5iPW4uYi1vLmQtby5hfWZ1bmN0aW9uIHJMbihlLHQsbil7dmFyIHIsYSxvLGYsZztpZihyPWwoUShlLChOdCgpLEoxZSkpLDIxKSxuLmE+dC5hJiYoci5IYygoWW0oKSxFTSkpP2UuYy5hKz0obi5hLXQuYSkvMjpyLkhjKFRNKSYmKGUuYy5hKz1uLmEtdC5hKSksbi5iPnQuYiYmKHIuSGMoKFltKCksU00pKT9lLmMuYis9KG4uYi10LmIpLzI6ci5IYyhDTSkmJihlLmMuYis9bi5iLXQuYikpLGwoUShlLChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSkmJihuLmE+dC5hfHxuLmI+dC5iKSlmb3IoZj1uZXcgRyhlLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMCksby5rPT0oWm4oKSxVcykmJihhPWwoUShvLFdjKSw2NCksYT09KEN0KCksYXIpP28ubi5hKz1uLmEtdC5hOmE9PURyJiYoby5uLmIrPW4uYi10LmIpKTtnPWUuZCxlLmYuYT1uLmEtZy5iLWcuYyxlLmYuYj1uLmItZy5kLWcuYX1mdW5jdGlvbiBpTG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCO2Zvcih0PWYydChlKSxDPShnPW5ldyBicih0KS5hLnZjKCkuS2MoKSxuZXcgTWkoZykpO0MuYS5PYigpOyl7Zm9yKEU9KGE9bChDLmEuUGIoKSw0NCksbChhLmxkKCksMTApKSxMPTAsQj0wLEw9RS5kLmQsQj1FLm8uYitFLmQuYSxlLmRbRS5wXT0wLG49RTsobz1lLmFbbi5wXSkhPUU7KXI9WjVuKG4sbyksdz0wLGUuYz09KHhkKCksVDIpP3c9ci5kLm4uYityLmQuYS5iLXIuYy5uLmItci5jLmEuYjp3PXIuYy5uLmIrci5jLmEuYi1yLmQubi5iLXIuZC5hLmIsZj16ZShlLmRbbi5wXSkrdyxlLmRbby5wXT1mLEw9Yi5NYXRoLm1heChMLG8uZC5kLWYpLEI9Yi5NYXRoLm1heChCLGYrby5vLmIrby5kLmEpLG49bztuPUU7ZG8gZS5kW24ucF09emUoZS5kW24ucF0pK0wsbj1lLmFbbi5wXTt3aGlsZShuIT1FKTtlLmJbRS5wXT1MK0J9fWZ1bmN0aW9uIFpBKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtmb3Iobz0wLGY9ZS50LGE9MCxyPTAsdz0wLEI9MCxMPTAsbiYmKGUubi5jLmxlbmd0aD0wLHZ0KGUubixuZXcgUEgoZS5zLGUudCxlLmkpKSksZz0wLEM9bmV3IEcoZS5iKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksMjcpLG8rRS5nKyhnPjA/ZS5pOjApPnQmJnc+MCYmKG89MCxmKz13K2UuaSxhPWIuTWF0aC5tYXgoYSxCKSxyKz13K2UuaSx3PTAsQj0wLG4mJigrK0wsdnQoZS5uLG5ldyBQSChlLnMsZixlLmkpKSksZz0wKSxCKz1FLmcrKGc+MD9lLmk6MCksdz1iLk1hdGgubWF4KHcsRS5mKSxuJiZleGUobChqdChlLm4sTCksMjA5KSxFKSxvKz1FLmcrKGc+MD9lLmk6MCksKytnO3JldHVybiBhPWIuTWF0aC5tYXgoYSxCKSxyKz13LG4mJihlLnI9YSxlLmQ9cixpeGUoZS5qKSksbmV3IGVmKGUucyxlLnQsYSxyKX1mdW5jdGlvbiBnbGUoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihlLmI9ITEsTD1ncyx3PWlhLEI9Z3MsRT1pYSxyPWUuZS5hLmVjKCkuS2MoKTtyLk9iKCk7KWZvcihuPWwoci5QYigpLDI3MiksYT1uLmEsTD1iLk1hdGgubWluKEwsYS5jKSx3PWIuTWF0aC5tYXgodyxhLmMrYS5iKSxCPWIuTWF0aC5taW4oQixhLmQpLEU9Yi5NYXRoLm1heChFLGEuZCthLmEpLGY9bmV3IEcobi5jKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksNDA3KSx0PW8uYSx0LmE/KEM9YS5kK28uYi5iLGc9QytvLmMsQj1iLk1hdGgubWluKEIsQyksRT1iLk1hdGgubWF4KEUsZykpOihDPWEuYytvLmIuYSxnPUMrby5jLEw9Yi5NYXRoLm1pbihMLEMpLHc9Yi5NYXRoLm1heCh3LGcpKTtlLmE9bmV3IGx0KHctTCxFLUIpLGUuYz1uZXcgbHQoTCtlLmQuYSxCK2UuZC5iKX1mdW5jdGlvbiBkNihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2lmKCFlLmEpe2lmKGUubz1udWxsLHc9bmV3IG1RZShlKSx0PW5ldyBEUyxuPXFNLGc9bi5hLnpjKGUsbiksZz09bnVsbCl7Zm9yKGY9bmV3IG9yKGRjKGUpKTtmLmUhPWYuaS5nYygpOylvPWwoZ3IoZiksMjkpLEFzKHcsZDYobykpO24uYS5CYyhlKSE9bnVsbCxuLmEuZ2MoKT09MH1mb3IoYT0oIWUucyYmKGUucz1uZXcgbnQoZGwsZSwyMSwxNykpLG5ldyBvcihlLnMpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMTc5KSxEZShyLDMzMSkmJnFyKHQsbChyLDM1KSk7SXkodCksZS5rPW5ldyBxaXQoZSwobChPZSh0dCgobGIoKSxWbikubyksNyksMTkpLHQuaSksdC5nKSxBcyh3LGUuayksSXkodyksZS5hPW5ldyBONSgobChPZSh0dChWbi5vKSw0KSwxOSksdy5pKSx3LmcpLFlsKGUpLmImPS0yfXJldHVybiBlLmF9ZnVuY3Rpb24gTWtlKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO2lmKEM9V3UoZS5lLkRoKCksdCksYT0wLG89bChlLmcsMTI0KSx3PW51bGwsRm8oKSxsKHQsNjkpLnhrKCkpe2ZvcihnPTA7ZzxlLmk7KytnKWlmKGY9b1tnXSxDLmFtKGYuTGsoKSkpe2lmKFBpKGYsbikpe3c9ZjticmVha30rK2F9fWVsc2UgaWYobiE9bnVsbCl7Zm9yKGc9MDtnPGUuaTsrK2cpaWYoZj1vW2ddLEMuYW0oZi5MaygpKSl7aWYoUGkobixmLm1kKCkpKXt3PWY7YnJlYWt9KythfX1lbHNlIGZvcihnPTA7ZzxlLmk7KytnKWlmKGY9b1tnXSxDLmFtKGYuTGsoKSkpe2lmKGYubWQoKT09bnVsbCl7dz1mO2JyZWFrfSsrYX1yZXR1cm4gdyYmKGhoKGUuZSkmJihFPXQuSmsoKT9uZXcgRW9lKGUuZSw0LHQsbixudWxsLGEsITApOmRiKGUsdC50aygpPzI6MSx0LG4sdC5paygpLC0xLCEwKSxyP3IubmooRSk6cj1FKSxyPWhQKGUsdyxyKSkscn1mdW5jdGlvbiBwbGUoZSx0LG4scixhLG8sZil7dmFyIGcsdyxFLEMsTCxCLHosVixKO3N3aXRjaChWPTAsSj0wLHc9YS5jLGc9YS5iLEM9bi5mLHo9bi5nLHQuZyl7Y2FzZSAwOlY9ci5pK3IuZytmLGUuYz9KPUV4bihWLG8scixmKTpKPXIuaixCPWIuTWF0aC5tYXgodyxWK3opLEU9Yi5NYXRoLm1heChnLEorQyk7YnJlYWs7Y2FzZSAxOko9ci5qK3IuZitmLGUuYz9WPWt4bihKLG8scixmKTpWPXIuaSxCPWIuTWF0aC5tYXgodyxWK3opLEU9Yi5NYXRoLm1heChnLEorQyk7YnJlYWs7Y2FzZSAyOlY9dytmLEo9MCxCPXcrZit6LEU9Yi5NYXRoLm1heChnLEMpO2JyZWFrO2Nhc2UgMzpWPTAsSj1nK2YsQj1iLk1hdGgubWF4KHcseiksRT1nK2YrQzticmVhaztkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiSWxsZWdhbFBsYWNlbWVudE9wdGlvbi4iKSl9cmV0dXJuIEw9bmV3IHo4ZShlLmEsQixFLHQsVixKKSxMfWZ1bmN0aW9uIHNMbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7aWYoZz1lLmQsTD1sKFEoZSwoZnQoKSxReCkpLDE1KSx0PWwoUShlLEd4KSwxNSksISghTCYmIXQpKXtpZihvPXplKEdlKFB5KGUsKE50KCksb2RlKSkpKSxmPXplKEdlKFB5KGUsdERlKSkpLEI9MCxMKXtmb3IoRT0wLGE9TC5LYygpO2EuT2IoKTspcj1sKGEuUGIoKSwxMCksRT1iLk1hdGgubWF4KEUsci5vLmIpLEIrPXIuby5hO0IrPW8qKEwuZ2MoKS0xKSxnLmQrPUUrZn1pZihuPTAsdCl7Zm9yKEU9MCxhPXQuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTApLEU9Yi5NYXRoLm1heChFLHIuby5iKSxuKz1yLm8uYTtuKz1vKih0LmdjKCktMSksZy5hKz1FK2Z9dz1iLk1hdGgubWF4KEIsbiksdz5lLm8uYSYmKEM9KHctZS5vLmEpLzIsZy5iPWIuTWF0aC5tYXgoZy5iLEMpLGcuYz1iLk1hdGgubWF4KGcuYyxDKSl9fWZ1bmN0aW9uIGFMbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2ZvcihvPW5ldyBLb3QsRmxuKG8sKGh4KCksZFN0KSkscj0oYT1hY2UoZSxXZSh6dCxkdCwyLDAsNiwxKSksbmV3IGtyKG5ldyBJbChuZXcgYXNlKGUsYSkuYikpKTtyLmI8ci5kLmdjKCk7KW49KG1yKHIuYjxyLmQuZ2MoKSksZWkoci5kLlhiKHIuYz1yLmIrKykpKSxmPUZrZShRYixuKSxmJiYodD1XZyhlLG4pLHQudGUoKT9nPXQudGUoKS5hOnQucWUoKT9nPSIiK3QucWUoKS5hOnQucmUoKT9nPSIiK3QucmUoKS5hOmc9dC5JYigpLHc9UGtlKGYsZyksdyE9bnVsbCYmKCh2bChmLmosKHIxKCksaGEpKXx8dmwoZi5qLFBuKSkmJl9OKFdvZShvLEFpKSxmLHcpLHZsKGYuaix6ZCkmJl9OKFdvZShvLGpzKSxmLHcpLHZsKGYuaix5dikmJl9OKFdvZShvLEhsKSxmLHcpLHZsKGYuaixTMikmJl9OKFdvZShvLGVjKSxmLHcpKSk7cmV0dXJuIG99ZnVuY3Rpb24gcFAoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7aWYoYT1sKGUuZywxMjQpLHVwKGUuZSx0KSlyZXR1cm4gRm8oKSxsKHQsNjkpLnhrKCk/bmV3IG5IKHQsZSk6bmV3IHlPKHQsZSk7Zm9yKEU9V3UoZS5lLkRoKCksdCkscj0wLGc9MDtnPGUuaTsrK2cpe2lmKG89YVtnXSxmPW8uTGsoKSxFLmFtKGYpKXtpZihGbygpLGwodCw2OSkueGsoKSlyZXR1cm4gbztpZihmPT0oa3goKSx1OSl8fGY9PWM5KXtmb3Iodz1uZXcgVGgoeGMoby5tZCgpKSk7KytnPGUuaTspbz1hW2ddLGY9by5MaygpLChmPT11OXx8Zj09YzkpJiZoaSh3LHhjKG8ubWQoKSkpO3JldHVybiBsNGUobCh0LkhrKCksMTU2KSx3LmEpfWVsc2UgcmV0dXJuIEM9by5tZCgpLEMhPW51bGwmJm4mJkRlKHQsMTAyKSYmbCh0LDE5KS5CYiZJbyYmKEM9ekEoZSx0LGcscixDKSksQ30rK3J9cmV0dXJuIHQuaWsoKX1mdW5jdGlvbiBxVShlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEU7aWYodz1XdShlLmUuRGgoKSx0KSxvPWwoZS5nLDEyNCksdXAoZS5lLHQpKXtmb3IoYT0wLGc9MDtnPGUuaTsrK2cpaWYoZj1vW2ddLHcuYW0oZi5MaygpKSl7aWYoYT09bilyZXR1cm4gRm8oKSxsKHQsNjkpLnhrKCk/ZjooRT1mLm1kKCksRSE9bnVsbCYmciYmRGUodCwxMDIpJiZsKHQsMTkpLkJiJklvJiYoRT16QShlLHQsZyxhLEUpKSxFKTsrK2F9dGhyb3cgdWUobmV3IHRjKENMK24rYXYrYSkpfWVsc2V7Zm9yKGE9MCxnPTA7ZzxlLmk7KytnKXtpZihmPW9bZ10sdy5hbShmLkxrKCkpKXJldHVybiBGbygpLGwodCw2OSkueGsoKT9mOihFPWYubWQoKSxFIT1udWxsJiZyJiZEZSh0LDEwMikmJmwodCwxOSkuQmImSW8mJihFPXpBKGUsdCxnLGEsRSkpLEUpOysrYX1yZXR1cm4gdC5paygpfX1mdW5jdGlvbiBibGUoKXtibGU9VSx4NnQ9aGUobGUoVnIsMSksZGksMjgsMTUsW2xvLDExNjIyNjE0NjcsckwsMTIyMDcwMzEyNSwzNjI3OTcwNTYsMTk3NzMyNjc0MyxyTCwzODc0MjA0ODksSlUsMjE0MzU4ODgxLDQyOTk4MTY5Niw4MTU3MzA3MjEsMTQ3NTc4OTA1NiwxNzA4NTkzNzUsMjY4NDM1NDU2LDQxMDMzODY3Myw2MTIyMjAwMzIsODkzODcxNzM5LDEyOGU3LDE4MDEwODg1NDEsMTEzMzc5OTA0LDE0ODAzNTg4OSwxOTExMDI5NzYsMjQ0MTQwNjI1LDMwODkxNTc3NiwzODc0MjA0ODksNDgxODkwMzA0LDU5NDgyMzMyMSw3MjllNiw4ODc1MDM2ODEsckwsMTI5MTQ2Nzk2OSwxNTQ0ODA0NDE2LDE4MzgyNjU2MjUsNjA0NjYxNzZdKSxrNnQ9aGUobGUoVnIsMSksZGksMjgsMTUsWy0xLC0xLDMxLDE5LDE1LDEzLDExLDExLDEwLDksOSw4LDgsOCw4LDcsNyw3LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDVdKX1mdW5jdGlvbiBtbGUoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZihmPWUuZSx3PXQuZSx3PT0wKXJldHVybiBlO2lmKGY9PTApcmV0dXJuIHQuZT09MD90Om5ldyBJbSgtdC5lLHQuZCx0LmEpO2lmKG89ZS5kLGc9dC5kLG8rZz09MilyZXR1cm4gbj12YShlLmFbMF0sVm8pLHI9dmEodC5hWzBdLFZvKSxmPDAmJihuPXIyKG4pKSx3PDAmJihyPXIyKHIpKSxDZCgpLEFxKERmKG4sciksMCk/a2IoRGYobixyKSk6Sl8oa2IocjIoRGYobixyKSkpKTtpZihhPW8hPWc/bz5nPzE6LTE6VzdlKGUuYSx0LmEsbyksYT09LTEpTD0tdyxDPWY9PXc/RG9lKHQuYSxnLGUuYSxvKTpPb2UodC5hLGcsZS5hLG8pO2Vsc2UgaWYoTD1mLGY9PXcpe2lmKGE9PTApcmV0dXJuIENkKCksQkw7Qz1Eb2UoZS5hLG8sdC5hLGcpfWVsc2UgQz1Pb2UoZS5hLG8sdC5hLGcpO3JldHVybiBFPW5ldyBJbShMLEMubGVuZ3RoLEMpLGlBKEUpLEV9ZnVuY3Rpb24gb0xuKGUsdCl7dmFyIG4scixhLG87aWYobz1QbXQodCksIXQuYyYmKHQuYz1uZXcgbnQoSGwsdCw5LDkpKSxJcyhuZXcgYm4obnVsbCwoIXQuYyYmKHQuYz1uZXcgbnQoSGwsdCw5LDkpKSxuZXcga24odC5jLDE2KSkpLG5ldyAkV2UobykpLGE9bChRKG8sKGZ0KCksTHUpKSwyMSksWk1uKHQsYSksYS5IYygoSG8oKSx2ZikpKWZvcihyPW5ldyBvcigoIXQuYyYmKHQuYz1uZXcgbnQoSGwsdCw5LDkpKSx0LmMpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksMTIzKSxBRG4oZSx0LG8sbik7cmV0dXJuIGwoYXQodCwoTnQoKSxidikpLDE4MSkuZ2MoKSE9MCYmX2J0KHQsbyksUnQoQnQoUShvLFhNZSkpKSYmYS5GYyhuVyksbnMobyxDQikmJk5KZShuZXcgRDhlKHplKEdlKFEobyxDQikpKSksbykscWUoYXQodCxwNCkpPT09cWUoKHJwKCksQTIpKT9KSW4oZSx0LG8pOkJJbihlLHQsbyksb31mdW5jdGlvbiBjTG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3IoYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMzApLGY9bmV3IEcoX3coci5hKSk7Zi5hPGYuYy5jLmxlbmd0aDspaWYobz1sKHJlKGYpLDEwKSxzaHQobykmJihuPWwoUShvLChmdCgpLGMzKSksMzEzKSwhbi5nJiZuLmQpKWZvcih0PW4sdz1uLmQ7dzspUmJ0KHcuaSx3LmssITEsITApLHVOKHQuYSksdU4ody5pKSx1Tih3LmspLHVOKHcuYiksRmEody5jLHQuYy5kKSxGYSh0LmMsbnVsbCksVmEodC5hLG51bGwpLFZhKHcuaSxudWxsKSxWYSh3LmssbnVsbCksVmEody5iLG51bGwpLGc9bmV3IG82ZSh0Lmksdy5hLHQuZSx3Lmosdy5mKSxnLms9dC5rLGcubj10Lm4sZy5iPXQuYixnLmM9dy5jLGcuZz10LmcsZy5kPXcuZCxydCh0LmksYzMsZykscnQody5hLGMzLGcpLHc9dy5kLHQ9Z31mdW5jdGlvbiBUdShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYobz1lLmxlbmd0aCxvPT0wKXJldHVybiIiO2Zvcih3PVdlKGtmLEFkLDI4LG8sMTUsMSksR2EoMCxvLGUubGVuZ3RoKSxHYSgwLG8sdy5sZW5ndGgpLEhzdChlLDAsbyx3LDApLG49bnVsbCxnPXQsYT0wLGY9MDthPG87YSsrKXI9d1thXSxDd3QoKSxyPD0zMiYmeWVbcl0mMj9nPyghbiYmKG49bmV3IEFmKGUpKSxLaG4obixhLWYrKykpOihnPXQsciE9MzImJighbiYmKG49bmV3IEFmKGUpKSxoY2UobixhLWYsYS1mKzEsU3RyaW5nLmZyb21DaGFyQ29kZSgzMikpKSk6Zz0hMTtyZXR1cm4gZz9uPyhvPW4uYS5sZW5ndGgsbz4wP3RmKG4uYSwwLG8tMSk6IiIpOihHYSgwLG8tMSxlLmxlbmd0aCksZS5zdWJzdHIoMCxvLTEpKTpuP24uYTplfWZ1bmN0aW9uIHVMbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2Zvcih0LlVnKCJTb3J0IEJ5IElucHV0IE1vZGVsICIrUShlLChOdCgpLHlnKSksMSksYT0wLHI9bmV3IEcoZS5iKTtyLmE8ci5jLmMubGVuZ3RoOyl7Zm9yKG49bChyZShyKSwzMCksdz1hPT0wPzA6YS0xLGc9bChqdChlLmIsdyksMzApLGY9bmV3IEcobi5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTApLHFlKFEobyxNcykpIT09cWUoKFJhKCksVHYpKSYmcWUoUShvLE1zKSkhPT1xZShNdSkmJihDbigpLFZzKG8uaixuZXcgVjB0KGcsbChRKGUseWcpLDI4NCksaWd0KG8pLFJ0KEJ0KFEoZSxRMWUpKSkpKSx0LmJoKCJOb2RlICIrbysiIHBvcnRzOiAiK28uaikpO0NuKCksVnMobi5hLG5ldyBwZnQoZyxsKFEoZSx5ZyksMjg0KSxsKFEoZSxDTWUpLDM5MCkpKSx0LmJoKCJMYXllciAiK2ErIjogIituKSwrK2F9dC5WZygpfWZ1bmN0aW9uIEt5KGUsdCl7dmFyIG4scixhLG8sZjtpZihmPWwodCwxMzgpLGM2KGUpLGM2KGYpLGYuYiE9bnVsbCl7aWYoZS5jPSEwLGUuYj09bnVsbCl7ZS5iPVdlKFZyLGRpLDI4LGYuYi5sZW5ndGgsMTUsMSkscHUoZi5iLDAsZS5iLDAsZi5iLmxlbmd0aCk7cmV0dXJufWZvcihvPVdlKFZyLGRpLDI4LGUuYi5sZW5ndGgrZi5iLmxlbmd0aCwxNSwxKSxuPTAscj0wLGE9MDtuPGUuYi5sZW5ndGh8fHI8Zi5iLmxlbmd0aDspbj49ZS5iLmxlbmd0aD8ob1thKytdPWYuYltyKytdLG9bYSsrXT1mLmJbcisrXSk6cj49Zi5iLmxlbmd0aD8ob1thKytdPWUuYltuKytdLG9bYSsrXT1lLmJbbisrXSk6Zi5iW3JdPGUuYltuXXx8Zi5iW3JdPT09ZS5iW25dJiZmLmJbcisxXTxlLmJbbisxXT8ob1thKytdPWYuYltyKytdLG9bYSsrXT1mLmJbcisrXSk6KG9bYSsrXT1lLmJbbisrXSxvW2ErK109ZS5iW24rK10pO2UuYj1vfX1mdW5jdGlvbiBsTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtyZXR1cm4gbj1SdChCdChRKGUsKGZ0KCksZjQpKSkpLGc9UnQoQnQoUSh0LGY0KSkpLHI9bChRKGUsbzEpLDEyKSx3PWwoUSh0LG8xKSwxMiksYT1sKFEoZSwkZiksMTIpLEU9bChRKHQsJGYpLDEyKSxDPSEhciYmcj09dyxMPSEhYSYmYT09RSwhbiYmIWc/bmV3IHc0ZShsKHJlKG5ldyBHKGUuaikpLDEyKS5wPT1sKHJlKG5ldyBHKHQuaikpLDEyKS5wLEMsTCk6KG89KCFSdChCdChRKGUsZjQpKSl8fFJ0KEJ0KFEoZSxrQikpKSkmJighUnQoQnQoUSh0LGY0KSkpfHxSdChCdChRKHQsa0IpKSkpLGY9KCFSdChCdChRKGUsZjQpKSl8fCFSdChCdChRKGUsa0IpKSkpJiYoIVJ0KEJ0KFEodCxmNCkpKXx8IVJ0KEJ0KFEodCxrQikpKSksbmV3IHc0ZShDJiZvfHxMJiZmLEMsTCkpfWZ1bmN0aW9uIFptdChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2ZvcihyPTAsbj0wLHc9bmV3IG9zLHQ9MCxnPW5ldyBHKGUubik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDIwOSksZi5jLmMubGVuZ3RoPT0wP0NzKHcsZix3LmMuYix3LmMpOihyPWIuTWF0aC5tYXgocixmLmQpLG4rPWYuYSsodD4wP2UuaTowKSksKyt0O2ZvcihnOGUoZS5uLHcpLGUuZD1uLGUucj1yLGUuZz0wLGUuZj0wLGUuZT0wLGUubz1ncyxlLnA9Z3Msbz1uZXcgRyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwyNyksZS5wPWIuTWF0aC5taW4oZS5wLGEuZyksZS5nPWIuTWF0aC5tYXgoZS5nLGEuZyksZS5mPWIuTWF0aC5tYXgoZS5mLGEuZiksZS5vPWIuTWF0aC5taW4oZS5vLGEuZiksZS5lKz1hLmYrZS5pO2UuYT1lLmUvZS5iLmMubGVuZ3RoLWUuaSooKGUuYi5jLmxlbmd0aC0xKS9lLmIuYy5sZW5ndGgpLGl4ZShlLmopfWZ1bmN0aW9uIGV2dChlKXt2YXIgdCxuLHIsYTtyZXR1cm4gZS5EYiY2ND9qY2UoZSk6KHQ9bmV3IFRoKGFTZSkscj1lLmsscj9oaShoaSgodC5hKz0nICInLHQpLHIpLCciJyk6KCFlLm4mJihlLm49bmV3IG50KGVjLGUsMSw3KSksZS5uLmk+MCYmKGE9KCFlLm4mJihlLm49bmV3IG50KGVjLGUsMSw3KSksbChPZShlLm4sMCksMTM1KSkuYSwhYXx8aGkoaGkoKHQuYSs9JyAiJyx0KSxhKSwnIicpKSksbj0oIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSwhKGUuYi5pPD0xJiYoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMuaTw9MSkpKSxuP3QuYSs9IiBbIjp0LmErPSIgIixoaSh0LEV5ZShuZXcgWmllLG5ldyBvcihlLmIpKSksbiYmKHQuYSs9Il0iKSx0LmErPVBoZSxuJiYodC5hKz0iWyIpLGhpKHQsRXllKG5ldyBaaWUsbmV3IG9yKGUuYykpKSxuJiYodC5hKz0iXSIpLHQuYSl9ZnVuY3Rpb24gaExuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbjtmb3IoWmU9ZS5jLG90PXQuYyxuPWdjKFplLmEsZSwwKSxyPWdjKG90LmEsdCwwKSxNZT1sKFJ3KGUsKHFvKCksJGwpKS5LYygpLlBiKCksMTIpLGFuPWwoUncoZSx6dSkuS2MoKS5QYigpLDEyKSwkZT1sKFJ3KHQsJGwpLktjKCkuUGIoKSwxMiksQm49bChSdyh0LHp1KS5LYygpLlBiKCksMTIpLGZlPWtkKE1lLmUpLFN0PWtkKGFuLmcpLFRlPWtkKCRlLmUpLGNuPWtkKEJuLmcpLEZ5KGUscixvdCksZj1UZSxDPTAsVj1mLmxlbmd0aDtDPFY7KytDKWE9ZltDXSxGYShhLE1lKTtmb3IoZz1jbixMPTAsSj1nLmxlbmd0aDtMPEo7KytMKWE9Z1tMXSxwbyhhLGFuKTtmb3IoRnkodCxuLFplKSx3PWZlLEI9MCx0ZT13Lmxlbmd0aDtCPHRlOysrQilhPXdbQl0sRmEoYSwkZSk7Zm9yKG89U3QsRT0wLHo9by5sZW5ndGg7RTx6OysrRSlhPW9bRV0scG8oYSxCbil9ZnVuY3Rpb24gZkxuKGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihmPWwoYXQoZSwoSDUoKSxZNikpLDI3KSxyPW5ldyBvcigoIWYuZSYmKGYuZT1uZXcgTG4oanMsZiw3LDQpKSxmLmUpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksNzQpLGc9bmV3IGx0KGwoT2UoKCFuLmEmJihuLmE9bmV3IG50KGNzLG4sNiw2KSksbi5hKSwwKSwxNjYpLmosbChPZSgoIW4uYSYmKG4uYT1uZXcgbnQoY3Msbiw2LDYpKSxuLmEpLDApLDE2Nikuayksbz1uZXcgbHQobChPZSgoIW4uYSYmKG4uYT1uZXcgbnQoY3Msbiw2LDYpKSxuLmEpLDApLDE2NikuYixsKE9lKCghbi5hJiYobi5hPW5ldyBudChjcyxuLDYsNikpLG4uYSksMCksMTY2KS5jKSxhPW5ldyBsdChvLmEtZy5hLG8uYi1nLmIpLHQ9Yi5NYXRoLmF0YW4yKGEuYixhLmEpLGwoT2UoKCFuLmMmJihuLmM9bmV3IExuKF9yLG4sNSw4KSksbi5jKSwwKSw4NCkucWYoKFNiKCksZWdlKSx0KX1mdW5jdGlvbiBkTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7Zm9yKHQuVWcoIkludGVyYWN0aXZlIE5vZGUgUmVvcmRlcmVyIiwxKSxDPSghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSxnPW5ldyBidCxhPW5ldyBvcihDKTthLmUhPWEuaS5nYygpOyluPWwoZ3IoYSksMjcpLFAxKG4sKHoxKCksakIpKSYmJG4oZy5jLG4pO2ZvcihvPW5ldyBHKGcpO28uYTxvLmMuYy5sZW5ndGg7KW49bChyZShvKSwyNyksc1YoQyxuKTtmb3IoQ24oKSxWcyhnLG5ldyBFbmUpLGY9bmV3IEcoZyk7Zi5hPGYuYy5jLmxlbmd0aDspbj1sKHJlKGYpLDI3KSxFPWwoYXQobiwoejEoKSxqQikpLDE3KS5hLEU9Yi5NYXRoLm1pbihFLEMuaSksX0EoQyxFLG4pO2Zvcih3PTAscj1uZXcgb3IoQyk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDI3KSxIaShuLCh6MSgpLGVPZSkscHQodykpLCsrdzt0LlZnKCl9ZnVuY3Rpb24gRGtlKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO3JldHVybiBiLk1hdGguYWJzKHQucy10LmMpPERkfHxiLk1hdGguYWJzKG4ucy1uLmMpPERkPzA6KHI9b2J0KGUsdC5qLG4uZSksYT1vYnQoZSxuLmosdC5lKSxvPXI9PS0xfHxhPT0tMSxmPTAsbz8ocj09LTEmJihuZXcgUG0oKEowKCkscWIpLG4sdCwxKSwrK2YpLGE9PS0xJiYobmV3IFBtKChKMCgpLHFiKSx0LG4sMSksKytmKSk6KGc9ZTYodC5qLG4ucyxuLmMpLGcrPWU2KG4uZSx0LnMsdC5jKSx3PWU2KG4uaix0LnMsdC5jKSx3Kz1lNih0LmUsbi5zLG4uYyksRT1yKzE2KmcsQz1hKzE2KncsRTxDP25ldyBQbSgoSjAoKSxFNCksdCxuLEMtRSk6RT5DP25ldyBQbSgoSjAoKSxFNCksbix0LEUtQyk6RT4wJiZDPjAmJihuZXcgUG0oKEowKCksRTQpLHQsbiwwKSxuZXcgUG0oRTQsbix0LDApKSksZil9ZnVuY3Rpb24gZ0xuKGUsdCxuKXt2YXIgcixhLG87Zm9yKGUuYT1uZXcgYnQsbz1Scih0LmIsMCk7by5iIT1vLmQuYzspe2ZvcihhPWwoQnIobyksNDApO2woUShhLChIYygpLCRkKSksMTcpLmE+ZS5hLmMubGVuZ3RoLTE7KXZ0KGUuYSxuZXcgY2EoeTYsaENlKSk7cj1sKFEoYSwkZCksMTcpLmEsbj09KEpzKCksdWMpfHxuPT12Yz8oYS5lLmE8emUoR2UobChqdChlLmEsciksNDIpLmEpKSYmVmUobChqdChlLmEsciksNDIpLGEuZS5hKSxhLmUuYSthLmYuYT56ZShHZShsKGp0KGUuYSxyKSw0MikuYikpJiZjdChsKGp0KGUuYSxyKSw0MiksYS5lLmErYS5mLmEpKTooYS5lLmI8emUoR2UobChqdChlLmEsciksNDIpLmEpKSYmVmUobChqdChlLmEsciksNDIpLGEuZS5iKSxhLmUuYithLmYuYj56ZShHZShsKGp0KGUuYSxyKSw0MikuYikpJiZjdChsKGp0KGUuYSxyKSw0MiksYS5lLmIrYS5mLmIpKX19ZnVuY3Rpb24gdHZ0KGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO2lmKG89elYociksZz1SdChCdChRKHIsKE50KCksVk1lKSkpKSwoZ3x8UnQoQnQoUShlLGJXKSkpKSYmIVA1KGwoUShlLE1zKSwxMDEpKSlhPWd4KG8pLHc9dmtlKGUsbixuPT0ocW8oKSx6dSk/YTpCTihhKSk7ZWxzZSBzd2l0Y2godz1uZXcgZ3UsTWModyxlKSx0PyhDPXcubixDLmE9dC5hLWUubi5hLEMuYj10LmItZS5uLmIsb3B0KEMsMCwwLGUuby5hLGUuby5iKSxsYSh3LGttdCh3LG8pKSk6KGE9Z3gobyksbGEodyxuPT0ocW8oKSx6dSk/YTpCTihhKSkpLGY9bChRKHIsKGZ0KCksTHUpKSwyMSksRT13Lmosby5nKXtjYXNlIDI6Y2FzZSAxOihFPT0oQ3QoKSxRbil8fEU9PURyKSYmZi5GYygoSG8oKSxCNikpO2JyZWFrO2Nhc2UgNDpjYXNlIDM6KEU9PShDdCgpLGFyKXx8RT09ZXIpJiZmLkZjKChIbygpLEI2KSl9cmV0dXJuIHd9ZnVuY3Rpb24gbnZ0KGUsdCl7dmFyIG4scixhLG8sZixnO2ZvcihmPW5ldyBxbShuZXcgU3IoZS5mLmIpLmEpO2YuYjspe2lmKG89TncoZiksYT1sKG8ubGQoKSw2MDIpLHQ9PTEpe2lmKGEuQWYoKSE9KEpzKCksd2YpJiZhLkFmKCkhPVExKWNvbnRpbnVlfWVsc2UgaWYoYS5BZigpIT0oSnMoKSx1YykmJmEuQWYoKSE9dmMpY29udGludWU7c3dpdGNoKHI9bChsKG8ubWQoKSw0MikuYiw4NiksZz1sKGwoby5tZCgpLDQyKS5hLDE5NCksbj1nLmMsYS5BZigpLmcpe2Nhc2UgMjpyLmcuYz1lLmUuYSxyLmcuYj1iLk1hdGgubWF4KDEsci5nLmIrbik7YnJlYWs7Y2FzZSAxOnIuZy5jPXIuZy5jK24sci5nLmI9Yi5NYXRoLm1heCgxLHIuZy5iLW4pO2JyZWFrO2Nhc2UgNDpyLmcuZD1lLmUuYixyLmcuYT1iLk1hdGgubWF4KDEsci5nLmErbik7YnJlYWs7Y2FzZSAzOnIuZy5kPXIuZy5kK24sci5nLmE9Yi5NYXRoLm1heCgxLHIuZy5hLW4pfX19ZnVuY3Rpb24gcExuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3IoZz1XZShWcixkaSwyOCx0LmIuYy5sZW5ndGgsMTUsMSksRT1XZShsMWUsaXQsMjczLHQuYi5jLmxlbmd0aCwwLDEpLHc9V2Uod2csbTIsMTAsdC5iLmMubGVuZ3RoLDAsMSksTD1lLmEsQj0wLHo9TC5sZW5ndGg7Qjx6OysrQil7Zm9yKEM9TFtCXSxKPTAsZj1uZXcgRyhDLmUpO2YuYTxmLmMuYy5sZW5ndGg7KWE9bChyZShmKSwxMCkscj1veWUoYS5jKSwrK2dbcl0sVj16ZShHZShRKHQsKE50KCkseDApKSkpLGdbcl0+MCYmd1tyXSYmKFY9ajUoZS5iLHdbcl0sYSkpLEo9Yi5NYXRoLm1heChKLGEuYy5jLmIrVik7Zm9yKG89bmV3IEcoQy5lKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTApLGEubi5iPUorYS5kLmQsbj1hLmMsbi5jLmI9SithLmQuZCthLm8uYithLmQuYSxFW2djKG4uYi5iLG4sMCldPWEuayx3W2djKG4uYi5iLG4sMCldPWF9fWZ1bmN0aW9uIHJ2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKHI9bmV3IGhyKGRyKGNwKHQpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksNzQpLERlKE9lKCghbi5iJiYobi5iPW5ldyBMbihfcixuLDQsNykpLG4uYiksMCksMTkzKXx8KHc9YmMobChPZSgoIW4uYyYmKG4uYz1uZXcgTG4oX3Isbiw1LDgpKSxuLmMpLDApLDg0KSkscUEobil8fChmPXQuaSt0LmcvMixnPXQuait0LmYvMixDPXcuaSt3LmcvMixMPXcuait3LmYvMixCPW5ldyBxYSxCLmE9Qy1mLEIuYj1MLWcsbz1uZXcgbHQoQi5hLEIuYiksUkUobyx0LmcsdC5mKSxCLmEtPW8uYSxCLmItPW8uYixmPUMtQi5hLGc9TC1CLmIsRT1uZXcgbHQoQi5hLEIuYiksUkUoRSx3Lmcsdy5mKSxCLmEtPUUuYSxCLmItPUUuYixDPWYrQi5hLEw9ZytCLmIsYT1sNihuLCEwLCEwKSxvRShhLGYpLHVFKGEsZyksYUUoYSxDKSxjRShhLEwpLHJ2dChlLHcpKSl9ZnVuY3Rpb24gaXZ0KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSxKdyksIkVMSyBTUE9yRSBDb21wYWN0aW9uIiksIlNocmlua1RyZWUgaXMgYSBjb21wYWN0aW9uIGFsZ29yaXRobSB0aGF0IG1haW50YWlucyB0aGUgdG9wb2xvZ3kgb2YgYSBsYXlvdXQuIFRoZSByZWxvY2F0aW9uIG9mIGRpYWdyYW0gZWxlbWVudHMgaXMgYmFzZWQgb24gY29udHJhY3RpbmcgYSBzcGFubmluZyB0cmVlLiIpLG5ldyBJbmUpKSksZ3QoZSxKdyxNZmUsSXQoSlcpKSxndChlLEp3LEdDZSxJdChFZ2UpKSxndChlLEp3LEtDZSxJdChrZ2UpKSxndChlLEp3LERmZSxJdChBT2UpKSxndChlLEp3LElmZSxJdCh4Z2UpKSxndChlLEp3LFh3LF9PZSksZ3QoZSxKdyxKeSw4KSxndChlLEp3LE9mZSxJdChaQ3QpKSxndChlLEp3LFdDZSxJdChDT2UpKSxndChlLEp3LFlDZSxJdChTT2UpKSxndChlLEp3LFZQLChIbigpLCExKSl9ZnVuY3Rpb24gYkxuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKHQuVWcoIlNpbXBsZSBub2RlIHBsYWNlbWVudCIsMSksTD1sKFEoZSwoZnQoKSwkNikpLDMxMiksZz0wLG89bmV3IEcoZS5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHI9bChyZShvKSwzMCksZj1yLmMsZi5iPTAsbj1udWxsLEU9bmV3IEcoci5hKTtFLmE8RS5jLmMubGVuZ3RoOyl3PWwocmUoRSksMTApLG4mJihmLmIrPVI4ZSh3LG4sTC5jKSksZi5iKz13LmQuZCt3Lm8uYit3LmQuYSxuPXc7Zz1iLk1hdGgubWF4KGcsZi5iKX1mb3IoYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMzApLGY9ci5jLEM9KGctZi5iKS8yLG49bnVsbCxFPW5ldyBHKHIuYSk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDEwKSxuJiYoQys9UjhlKHcsbixMLmMpKSxDKz13LmQuZCx3Lm4uYj1DLEMrPXcuby5iK3cuZC5hLG49dzt0LlZnKCl9ZnVuY3Rpb24gbUxuKGUsdCl7dmFyIG4scixhLG87Zm9yKEN3bih0LmIuaiksSXMoZmMobmV3IGJuKG51bGwsbmV3IGtuKHQuZCwxNikpLG5ldyBTZWUpLG5ldyBfZWUpLG89bmV3IEcodC5kKTtvLmE8by5jLmMubGVuZ3RoOyl7c3dpdGNoKGE9bChyZShvKSwxMDUpLGEuZS5nKXtjYXNlIDA6bj1sKGp0KGEuaiwwKSwxMTMpLmQuaixTKGEsbChmaChZOChsKCRpKGEuayxuKSwxNSkuT2MoKSxJNikpLDExMykpLGsoYSxsKGZoKHZ5KGwoJGkoYS5rLG4pLDE1KS5PYygpLEk2KSksMTEzKSk7YnJlYWs7Y2FzZSAxOnI9b3hlKGEpLFMoYSxsKGZoKFk4KGwoJGkoYS5rLHJbMF0pLDE1KS5PYygpLEk2KSksMTEzKSksayhhLGwoZmgodnkobCgkaShhLmssclsxXSksMTUpLk9jKCksSTYpKSwxMTMpKTticmVhaztjYXNlIDI6cmtuKGUsYSk7YnJlYWs7Y2FzZSAzOnlDbihhKTticmVhaztjYXNlIDQ6VENuKGUsYSl9U3duKGEpfWUuYT1udWxsfWZ1bmN0aW9uIHZsZShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztyZXR1cm4gcj1lLmEubz09KEQxKCksWTEpP2dzOmlhLGc9TG10KGUsbmV3IFFldCh0LG4pKSwhZy5hJiZnLmM/KHVpKGUuZCxnKSxyKTpnLmE/KGE9Zy5hLmMsdz1nLmEuZCxuPyhFPWUuYS5jPT0oeGQoKSx3Myk/dzphLG89ZS5hLmM9PXczP2E6dyxmPWUuYS5nW28uaS5wXSxDPXplKGUuYS5wW2YucF0pK3plKGUuYS5kW28uaS5wXSkrby5uLmIrby5hLmItemUoZS5hLmRbRS5pLnBdKS1FLm4uYi1FLmEuYik6KEU9ZS5hLmM9PSh4ZCgpLFQyKT93OmEsbz1lLmEuYz09VDI/YTp3LEM9emUoZS5hLnBbZS5hLmdbby5pLnBdLnBdKSt6ZShlLmEuZFtvLmkucF0pK28ubi5iK28uYS5iLXplKGUuYS5kW0UuaS5wXSktRS5uLmItRS5hLmIpLGUuYS5uW2UuYS5nW2EuaS5wXS5wXT0oSG4oKSwhMCksZS5hLm5bZS5hLmdbdy5pLnBdLnBdPSEwLEMpOnJ9ZnVuY3Rpb24gdkxuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEw7aWYoci5nYygpPT0wKXJldHVybiExO2lmKHc9KEZvKCksbCh0LDY5KS54aygpKSxmPXc/cjpuZXcgTHcoci5nYygpKSx1cChlLmUsdCkpe2lmKHQuU2koKSlmb3IoQz1yLktjKCk7Qy5PYigpOylFPUMuUGIoKSwkVShlLHQsRSxEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCl8fChvPXNnKHQsRSksZi5GYyhvKSk7ZWxzZSBpZighdylmb3IoQz1yLktjKCk7Qy5PYigpOylFPUMuUGIoKSxvPXNnKHQsRSksZi5GYyhvKX1lbHNle2ZvcihMPVd1KGUuZS5EaCgpLHQpLGE9bChlLmcsMTI0KSxnPTA7ZzxlLmk7KytnKWlmKG89YVtnXSxMLmFtKG8uTGsoKSkpdGhyb3cgdWUobmV3IFluKFpQKSk7aWYoci5nYygpPjEpdGhyb3cgdWUobmV3IFluKFpQKSk7d3x8KG89c2codCxyLktjKCkuUGIoKSksZi5GYyhvKSl9cmV0dXJuIE43ZShlLHQ5ZShlLHQsbiksZil9ZnVuY3Rpb24gSFUoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7aWYodXAoZS5lLHQpKXc9KEZvKCksbCh0LDY5KS54aygpP25ldyBuSCh0LGUpOm5ldyB5Tyh0LGUpKSxFVSh3LmMsdy5iKSxGXyh3LGwobiwxNikpO2Vsc2V7Zm9yKEM9V3UoZS5lLkRoKCksdCkscj1sKGUuZywxMjQpLGY9MDtmPGUuaTsrK2YpaWYoYT1yW2ZdLG89YS5MaygpLEMuYW0obykpe2lmKG89PShreCgpLHU5KXx8bz09Yzkpe2ZvcihFPVE4ZShlLHQsbiksZz1mLEU/VnkoZSxmKTorK2Y7ZjxlLmk7KWE9cltmXSxvPWEuTGsoKSxvPT11OXx8bz09Yzk/VnkoZSxmKTorK2Y7RXx8bChuNihlLGcsc2codCxuKSksNzYpfWVsc2UgUThlKGUsdCxuKT9WeShlLGYpOmwobjYoZSxmLChGbygpLGwodCw2OSkueGsoKT9sKG4sNzYpOnNnKHQsbikpKSw3Nik7cmV0dXJufVE4ZShlLHQsbil8fHFyKGUsKEZvKCksbCh0LDY5KS54aygpP2wobiw3Nik6c2codCxuKSkpfX1mdW5jdGlvbiBzdnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7cmV0dXJuIFBpKG4sZS5iKXx8KGUuYj1uLG89bmV3IFdpLGY9bCh5YyhmYyhuZXcgYm4obnVsbCxuZXcga24obi5mLDE2KSksbyksU3kobmV3IHl0LG5ldyBqaSxuZXcgcW4sbmV3IFVuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxpNCksRWNdKSkpLDIxKSxlLmU9ITAsZS5mPSEwLGUuYz0hMCxlLmQ9ITAsYT1mLkhjKChieCgpLGFCKSkscj1mLkhjKG9CKSxhJiYhciYmKGUuZj0hMSksIWEmJnImJihlLmQ9ITEpLGE9Zi5IYyhzQikscj1mLkhjKGNCKSxhJiYhciYmKGUuYz0hMSksIWEmJnImJihlLmU9ITEpKSxDPWwoZS5hLlZlKHQsbiksNDIpLHc9bChDLmEsMTcpLmEsRT1sKEMuYiwxNykuYSxnPSExLHc8MD9lLmN8fChnPSEwKTplLmV8fChnPSEwKSxFPDA/ZS5kfHwoZz0hMCk6ZS5mfHwoZz0hMCksZz9zdnQoZSxDLG4pOkN9ZnVuY3Rpb24gd0xuKGUpe3ZhciB0LG4scixhO2E9ZS5vLHB5KCksZS5BLmRjKCl8fFBpKGUuQSxxX2UpP3Q9YS5iOih0PXRQKGUuZiksZS5BLkhjKChtaCgpLHJGKSkmJiFlLkIuSGMoKFpsKCksRk0pKSYmKHQ9Yi5NYXRoLm1heCh0LHRQKGwoUW8oZS5wLChDdCgpLGFyKSksMjUyKSkpLHQ9Yi5NYXRoLm1heCh0LHRQKGwoUW8oZS5wLGVyKSwyNTIpKSkpLG49UmZ0KGUpLG4mJih0PWIuTWF0aC5tYXgodCxuLmIpKSxlLkEuSGMoaUYpJiYoZS5xPT0oUmEoKSxUZyl8fGUucT09TXUpJiYodD1iLk1hdGgubWF4KHQsdEgobChRbyhlLmIsKEN0KCksYXIpKSwxMjcpKSksdD1iLk1hdGgubWF4KHQsdEgobChRbyhlLmIsZXIpLDEyNykpKSkpLFJ0KEJ0KGUuZS5UZigpLm9mKChwaSgpLEM0KSkpKT9hLmI9Yi5NYXRoLm1heChhLmIsdCk6YS5iPXQscj1lLmYuaSxyLmQ9MCxyLmE9dCxmbGUoZS5mKX1mdW5jdGlvbiBhdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKO2ZvcihMPTA7TDx0Lmxlbmd0aDtMKyspe2ZvcihnPWUuS2MoKTtnLk9iKCk7KW89bChnLlBiKCksMjMwKSxvLmhnKEwsdCk7Zm9yKEI9MDtCPHRbTF0ubGVuZ3RoO0IrKyl7Zm9yKHc9ZS5LYygpO3cuT2IoKTspbz1sKHcuUGIoKSwyMzApLG8uaWcoTCxCLHQpO2ZvcihKPXRbTF1bQl0uaix6PTA7ejxKLmMubGVuZ3RoO3orKyl7Zm9yKEU9ZS5LYygpO0UuT2IoKTspbz1sKEUuUGIoKSwyMzApLG8uamcoTCxCLHosdCk7Zm9yKFY9KFNuKHosSi5jLmxlbmd0aCksbChKLmNbel0sMTIpKSxuPTAsYT1uZXcgTjEoVi5iKTtMYyhhLmEpfHxMYyhhLmIpOylmb3Iocj1sKExjKGEuYSk/cmUoYS5hKTpyZShhLmIpLDE4KSxDPWUuS2MoKTtDLk9iKCk7KW89bChDLlBiKCksMjMwKSxvLmdnKEwsQix6LG4rKyxyLHQpfX19Zm9yKGY9ZS5LYygpO2YuT2IoKTspbz1sKGYuUGIoKSwyMzApLG8uZmcoKX1mdW5jdGlvbiB5TG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoZS5iPXplKEdlKFEodCwoTnQoKSxxNikpKSksZS5jPXplKEdlKFEodCx2dikpKSxlLmQ9bChRKHQscmRlKSwzNTApLGUuYT1sKFEodCxsVyksMjgyKSxhN24odCksZz1sKHljKEZpKEZpKERjKERjKG5ldyBibihudWxsLG5ldyBrbih0LmIsMTYpKSxuZXcgbFopLG5ldyBoUyksbmV3IGlJKSxuZXcgZmopLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxhPWcuS2MoKTthLk9iKCk7KW49bChhLlBiKCksMTgpLGY9bChRKG4sKGZ0KCksZnYpKSwxNSksZi5KYyhuZXcgWFdlKGUpKSxydChuLGZ2LG51bGwpO2ZvcihyPWcuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMTgpLHc9bChRKG4sKGZ0KCksS0xlKSksMTgpLG89bChRKG4sejYpLDE1KSxOSW4oZSxvLHcpLHJ0KG4sejYsbnVsbCl9ZnVuY3Rpb24gd2xlKGUsdCl7dmFyIG4scixhLG8sZixnLHc7aWYoZS5hKXtpZihnPWUuYS54ZSgpLHc9bnVsbCxnIT1udWxsP3QuYSs9IiIrZzooZj1lLmEubWsoKSxmIT1udWxsJiYobz1wZChmLGNsKDkxKSksbyE9LTE/KHc9KFhuKG8sZi5sZW5ndGgrMSksZi5zdWJzdHIobykpLHQuYSs9IiIrdGYoZj09bnVsbD91bDoobnIoZiksZiksMCxvKSk6dC5hKz0iIitmKSksZS5kJiZlLmQuaSE9MCl7Zm9yKGE9ITAsdC5hKz0iPCIscj1uZXcgb3IoZS5kKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksODkpLGE/YT0hMTp0LmErPUNvLHdsZShuLHQpO3QuYSs9Ij4ifXchPW51bGwmJih0LmErPSIiK3cpfWVsc2UgZS5lPyhnPWUuZS56YixnIT1udWxsJiYodC5hKz0iIitnKSk6KHQuYSs9Ij8iLGUuYj8odC5hKz0iIHN1cGVyICIsd2xlKGUuYix0KSk6ZS5mJiYodC5hKz0iIGV4dGVuZHMgIix3bGUoZS5mLHQpKSl9ZnVuY3Rpb24geExuKGUpe2UuYj1udWxsLGUuYT1udWxsLGUubz1udWxsLGUucT1udWxsLGUudj1udWxsLGUudz1udWxsLGUuQj1udWxsLGUucD1udWxsLGUuUT1udWxsLGUuUj1udWxsLGUuUz1udWxsLGUuVD1udWxsLGUuVT1udWxsLGUuVj1udWxsLGUuVz1udWxsLGUuYmI9bnVsbCxlLmViPW51bGwsZS5hYj1udWxsLGUuSD1udWxsLGUuZGI9bnVsbCxlLmM9bnVsbCxlLmQ9bnVsbCxlLmY9bnVsbCxlLm49bnVsbCxlLnI9bnVsbCxlLnM9bnVsbCxlLnU9bnVsbCxlLkc9bnVsbCxlLko9bnVsbCxlLmU9bnVsbCxlLmo9bnVsbCxlLmk9bnVsbCxlLmc9bnVsbCxlLms9bnVsbCxlLnQ9bnVsbCxlLkY9bnVsbCxlLkk9bnVsbCxlLkw9bnVsbCxlLk09bnVsbCxlLk89bnVsbCxlLlA9bnVsbCxlLiQ9bnVsbCxlLk49bnVsbCxlLlo9bnVsbCxlLmNiPW51bGwsZS5LPW51bGwsZS5EPW51bGwsZS5BPW51bGwsZS5DPW51bGwsZS5fPW51bGwsZS5mYj1udWxsLGUuWD1udWxsLGUuWT1udWxsLGUuZ2I9ITEsZS5oYj0hMX1mdW5jdGlvbiBrTG4oZSl7dmFyIHQsbixyLGE7aWYocj1EbGUoKCFlLmMmJihlLmM9WE8oWmMoZS5mKSkpLGUuYyksMCksZS5lPT0wfHxlLmE9PTAmJmUuZiE9LTEmJmUuZTwwKXJldHVybiByO2lmKHQ9eTdlKGUpPDA/MTowLG49ZS5lLGE9KHIubGVuZ3RoKzErYi5NYXRoLmFicyh1YShlLmUpKSxuZXcgUzUpLHQ9PTEmJihhLmErPSItIiksZS5lPjApaWYobi09ci5sZW5ndGgtdCxuPj0wKXtmb3IoYS5hKz0iMC4iO24+bHYubGVuZ3RoO24tPWx2Lmxlbmd0aClRaXQoYSxsdik7UHJ0KGEsbHYsdWEobikpLGhpKGEsKFhuKHQsci5sZW5ndGgrMSksci5zdWJzdHIodCkpKX1lbHNlIG49dC1uLGhpKGEsdGYocix0LHVhKG4pKSksYS5hKz0iLiIsaGkoYSx3NWUocix1YShuKSkpO2Vsc2V7Zm9yKGhpKGEsKFhuKHQsci5sZW5ndGgrMSksci5zdWJzdHIodCkpKTtuPC1sdi5sZW5ndGg7bis9bHYubGVuZ3RoKVFpdChhLGx2KTtQcnQoYSxsdix1YSgtbikpfXJldHVybiBhLmF9ZnVuY3Rpb24geWxlKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRTtyZXR1cm4hKGUuayE9KFpuKCksUHMpfHxlLmouYy5sZW5ndGg8PTF8fChvPWwoUShlLChOdCgpLE1zKSksMTAxKSxvPT0oUmEoKSxNdSkpfHwoYT0oQnkoKSwoZS5xP2UucTooQ24oKSxDbigpLG1nKSkuX2IoZzMpP3I9bChRKGUsZzMpLDIwMyk6cj1sKFEoZW8oZSksZU0pLDIwMyksciksYT09X1cpfHwhKGE9PUc2fHxhPT1VNikmJihmPXplKEdlKFB5KGUsdE0pKSksdD1sKFEoZSxfQiksMTQwKSwhdCYmKHQ9bmV3IG40ZShmLGYsZixmKSksRT1PYyhlLChDdCgpLGVyKSksdz10LmQrdC5hKyhFLmdjKCktMSkqZix3PmUuby5ifHwobj1PYyhlLGFyKSxnPXQuZCt0LmErKG4uZ2MoKS0xKSpmLGc+ZS5vLmIpKSl9ZnVuY3Rpb24gRUxuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTt0LlVnKCJPcnRob2dvbmFsIGVkZ2Ugcm91dGluZyIsMSksRT16ZShHZShRKGUsKE50KCksVjYpKSkpLG49emUoR2UoUShlLHE2KSkpLHI9emUoR2UoUShlLHZ2KSkpLEI9bmV3IEhhZSgwLG4pLHRlPTAsZj1uZXcgVWEoZS5iLDApLGc9bnVsbCxDPW51bGwsdz1udWxsLEw9bnVsbDtkbyBDPWYuYjxmLmQuZ2MoKT8obXIoZi5iPGYuZC5nYygpKSxsKGYuZC5YYihmLmM9Zi5iKyspLDMwKSk6bnVsbCxMPUM/Qy5hOm51bGwsZyYmKE9rZShnLHRlKSx0ZSs9Zy5jLmEpLEo9Zz90ZStyOnRlLFY9UmtlKEIsZSx3LEwsSiksYT0hZ3x8THEodywoSVUoKSxJQikpLG89IUN8fExxKEwsKElVKCksSUIpKSxWPjA/KHo9KFYtMSkqbixnJiYoeis9ciksQyYmKHorPXIpLHo8RSYmIWEmJiFvJiYoej1FKSx0ZSs9eik6IWEmJiFvJiYodGUrPUUpLGc9Qyx3PUw7d2hpbGUoQyk7ZS5mLmE9dGUsdC5WZygpfWZ1bmN0aW9uIFZVKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7aWYoQz1udWxsLGUuZCYmKEM9bCh4dShlLmQsdCksMTQyKSksIUMpe2lmKG89ZS5hLnZpKCksTD1vLmksIWUuZHx8ZF8oZS5kKSE9TCl7Zm9yKHc9bmV3IFByLGUuZCYmYkEodyxlLmQpLEU9dy5mLmMrdy5pLmMsZz1FO2c8TDsrK2cpcj1sKE9lKG8sZyksMTQyKSxhPW8yKGUuZSxyKS54ZSgpLG49bChhPT1udWxsP2p1KHcuZixudWxsLHIpOkJ3KHcuaSxhLHIpLDE0MiksbiYmbiE9ciYmKGE9PW51bGw/anUody5mLG51bGwsbik6Qncody5pLGEsbikpO2lmKHcuZi5jK3cuaS5jIT1MKWZvcihmPTA7ZjxFOysrZilyPWwoT2UobyxmKSwxNDIpLGE9bzIoZS5lLHIpLnhlKCksbj1sKGE9PW51bGw/anUody5mLG51bGwscik6Qncody5pLGEsciksMTQyKSxuJiZuIT1yJiYoYT09bnVsbD9qdSh3LmYsbnVsbCxuKTpCdyh3LmksYSxuKSk7ZS5kPXd9Qz1sKHh1KGUuZCx0KSwxNDIpfXJldHVybiBDfWZ1bmN0aW9uIHhsZShlLHQsbixyLGEsbyxmKXt2YXIgZyx3LEUsQyxMLEIsejtyZXR1cm4gTD1SdChCdChRKHQsKE50KCksVU1lKSkpKSxCPW51bGwsbz09KHFvKCksJGwpJiZyLmMuaT09bj9CPXIuYzpvPT16dSYmci5kLmk9PW4mJihCPXIuZCksRT1mLCFFfHwhTHx8Qj8oQz0oQ3QoKSxQYyksQj9DPUIuajpQNShsKFEobixNcyksMTAxKSkmJihDPW89PSRsP2VyOmFyKSx3PVRMbihlLHQsbixvLEMsciksZz1Bb2UoKGVvKG4pLHIpKSxvPT0kbD8ocG8oZyxsKGp0KHcuaiwwKSwxMikpLEZhKGcsYSkpOihwbyhnLGEpLEZhKGcsbChqdCh3LmosMCksMTIpKSksRT1uZXcgZjF0KHIsZyx3LGwoUSh3LChmdCgpLHppKSksMTIpLG8sIUIpKToodnQoRS5lLHIpLHo9Yi5NYXRoLm1heCh6ZShHZShRKEUuZCx4MikpKSx6ZShHZShRKHIseDIpKSkpLHJ0KEUuZCx4Mix6KSkseG4oZS5hLHIsbmV3IEtxKEUuZCx0LG8pKSxFfWZ1bmN0aW9uIGtsZSgpe2tsZT1VO3ZhciBlO1NQZT1uZXcgYUplLFBfdD1XZSh6dCxkdCwyLDAsNiwxKSxPX3Q9UTAoZngoMzMsNTgpLGZ4KDEsMjYpKSxOX3Q9UTAoZngoOTcsMTIyKSxmeCg2NSw5MCkpLHhQZT1meCg0OCw1NyksRF90PVEwKE9fdCwwKSxJX3Q9UTAoTl90LHhQZSksa1BlPVEwKFEwKDAsZngoMSw2KSksZngoMzMsMzgpKSxFUGU9UTAoUTAoeFBlLGZ4KDY1LDcwKSksZngoOTcsMTAyKSksQl90PVEwKERfdCxlVSgiLV8uIX4qJygpIikpLEZfdD1RMChJX3QsR1YoIi1fLiF+KicoKSIpKSxlVSh0NXQpLEdWKHQ1dCksUTAoQl90LGVVKCI7OkAmPSskLCIpKSxRMChGX3QsR1YoIjs6QCY9KyQsIikpLFRQZT1lVSgiOi8/IyIpLENQZT1HVigiOi8/IyIpLCRNPWVVKCIvPyMiKSx6TT1HVigiLz8jIiksZT1uZXcgS3MsZS5hLnpjKCJqYXIiLGUpLGUuYS56YygiemlwIixlKSxlLmEuemMoImFyY2hpdmUiLGUpLEVZPShDbigpLG5ldyBFayhlKSl9ZnVuY3Rpb24gVExuKGUsdCxuLHIsYSxvKXt2YXIgZixnLHcsRSxDLEw7cmV0dXJuIGY9bnVsbCxFPXI9PShxbygpLCRsKT9vLmM6by5kLHc9elYodCksRS5pPT1uPyhmPWwoY3IoZS5iLEUpLDEwKSxmfHwoZj12UChFLGwoUShuLChOdCgpLE1zKSksMTAxKSxhLEFfbihFKSxudWxsLEUubixFLm8sdyx0KSxydChmLChmdCgpLHppKSxFKSxraShlLmIsRSxmKSkpOihmPXZQKChDPW5ldyBCcyxMPXplKEdlKFEodCwoTnQoKSx4MCkpKSkvMixfTihDLG00LEwpLEMpLGwoUShuLE1zKSwxMDEpLGEscj09JGw/LTE6MSxudWxsLG5ldyBxYSxuZXcgbHQoMCwwKSx3LHQpLGc9cnhuKGYsbixyKSxydChmLChmdCgpLHppKSxnKSxraShlLmIsZyxmKSksbChRKHQsKGZ0KCksTHUpKSwyMSkuRmMoKEhvKCksdmYpKSxQNShsKFEodCwoTnQoKSxNcykpLDEwMSkpP3J0KHQsTXMsKFJhKCksc0MpKTpydCh0LE1zLChSYSgpLFoxKSksZn1mdW5jdGlvbiBRRShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2c9MCxWPTAsdz1PSChlLmcsZS5nLmxlbmd0aCksbz1lLmUsZj1lLmoscj1lLmIsYT1lLmM7ZG97Zm9yKHo9MCxDPW5ldyBHKGUucSk7Qy5hPEMuYy5jLmxlbmd0aDspRT1sKHJlKEMpLDEwKSxCPVN2dChlLEUpLG49ITAsKGUucj09KE5mKCksQUIpfHxlLnI9PUxCKSYmKG49UnQoQnQoQi5iKSkpLGwoQi5hLDE3KS5hPDAmJm4/KCsreix3PU9IKGUuZyxlLmcubGVuZ3RoKSxlLmU9ZS5lK2woQi5hLDE3KS5hLFYrPW8tZS5lLG89ZS5lK2woQi5hLDE3KS5hLGY9ZS5qLHI9X3coZS5iKSxhPV93KGUuYykpOihlLmc9T0godyx3Lmxlbmd0aCksZS5lPW8sZS5iPShYcihyKSxyP25ldyBPbChyKTokayhuZXcgRyhyKSkpLGUuYz0oWHIoYSksYT9uZXcgT2woYSk6JGsobmV3IEcoYSkpKSxlLmo9Zik7KytnLEw9eiE9MCYmUnQoQnQodC5LYihuZXcgY2EocHQoVikscHQoZykpKSkpfXdoaWxlKEwpfWZ1bmN0aW9uIENMbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW47cmV0dXJuIGY9ZS5mLEI9dC5mLGc9Zj09KFZBKCksZTkpfHxmPT15TSx6PUI9PWU5fHxCPT15TSx3PWY9PVE2fHxmPT14TSxWPUI9PVE2fHxCPT14TSxFPWY9PVE2fHxmPT1lOSxKPUI9PVE2fHxCPT1lOSxnJiZ6P2UuZj09eU0/ZTp0OncmJlY/ZS5mPT14TT9lOnQ6RSYmSj8oZj09UTY/KEw9ZSxDPXQpOihMPXQsQz1lKSxvPSh0ZT1uLmorbi5mLGZlPUwuZStyLmYsVGU9Yi5NYXRoLm1heCh0ZSxmZSksTWU9VGUtYi5NYXRoLm1pbihuLmosTC5lKSwkZT1MLmQrci5nLW4uaSwkZSpNZSksYT0oWmU9bi5pK24uZyxvdD1DLmQrci5nLFN0PWIuTWF0aC5tYXgoWmUsb3QpLGNuPVN0LWIuTWF0aC5taW4obi5pLEMuZCksYW49Qy5lK3IuZi1uLmosY24qYW4pLG88PWE/ZS5mPT1RNj9lOnQ6ZS5mPT1lOT9lOnQpOmV9ZnVuY3Rpb24gb3Z0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7aWYocnQodCwoUWkoKSxKVCksMCksdz1sKFEodCxCVyksNDApLHQuZC5iPT0wKXc/KEM9emUoR2UoUSh3LEMyKSkpK2UuYitwOGUoZSx3LHQpLHJ0KHQsQzIsQykpOnJ0KHQsQzIsMCk7ZWxzZXtmb3Iocj0obz1ScihuZXcgSGcodCkuYS5kLDApLG5ldyBDNShvKSk7UUkoci5hKTspbj1sKEJyKHIuYSksNjUpLmMsb3Z0KGUsbik7Zz1sKFBxKChmPVJyKG5ldyBIZyh0KS5hLmQsMCksbmV3IEM1KGYpKSksNDApLEw9bChJaG4oKGE9UnIobmV3IEhnKHQpLmEuZCwwKSxuZXcgQzUoYSkpKSw0MCksRT0oemUoR2UoUShMLEMyKSkpK3plKEdlKFEoZyxDMikpKSkvMix3PyhDPXplKEdlKFEodyxDMikpKStlLmIrcDhlKGUsdyx0KSxydCh0LEMyLEMpLHJ0KHQsSlQsemUoR2UoUSh0LEMyKSkpLUUpLEZNbihlLHQpKTpydCh0LEMyLEUpfX1mdW5jdGlvbiBTTG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoQz1lLmUuYS5jLmxlbmd0aCxmPW5ldyBHKGUuZS5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTI1KSxvLmo9ITE7Zm9yKGUuaT1XZShWcixkaSwyOCxDLDE1LDEpLGUuZz1XZShWcixkaSwyOCxDLDE1LDEpLGUubj1uZXcgYnQsYT0wLEw9bmV3IGJ0LHc9bmV3IEcoZS5lLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMjUpLGcuZD1hKyssZy5iLmEuYy5sZW5ndGg9PTAmJnZ0KGUubixnKSxyYShMLGcuZyk7Zm9yKHQ9MCxyPW5ldyBHKEwpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyMTgpLG4uYz10Kyssbi5mPSExO0U9TC5jLmxlbmd0aCxlLmI9PW51bGx8fGUuYi5sZW5ndGg8RT8oZS5iPVdlKE5hLFpvLDI4LEUsMTUsMSksZS5jPVdlKGloLHBnLDI4LEUsMTYsMSkpOnVfKGUuYyksZS5kPUwsZS5wPW5ldyBuYWUoQXkoZS5kLmMubGVuZ3RoKSksZS5qPTF9ZnVuY3Rpb24gX0xuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKCEodC5lLmMubGVuZ3RoPD0xKSl7Zm9yKGUuZj10LGUuZD1sKFEoZS5mLChWTigpLG9BZSkpLDM5MSksZS5nPWwoUShlLmYsaEFlKSwxNykuYSxlLmU9emUoR2UoUShlLmYsY0FlKSkpLGUuYz16ZShHZShRKGUuZixUSykpKSxqc3QoZS5iKSxhPW5ldyBHKGUuZi5jKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMjkwKSxka2UoZS5iLHIuYyxyLG51bGwpLGRrZShlLmIsci5kLHIsbnVsbCk7Zm9yKGc9ZS5mLmUuYy5sZW5ndGgsZS5hPUxtKE5hLFtkdCxab10sWzEwOSwyOF0sMTUsW2csZ10sMiksRT1uZXcgRyhlLmYuZSk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDE1MyksWkFuKGUsdyxlLmFbdy5hXSk7Zm9yKGUuaT1MbShOYSxbZHQsWm9dLFsxMDksMjhdLDE1LFtnLGddLDIpLG89MDtvPGc7KytvKWZvcihmPTA7ZjxnOysrZiluPWUuYVtvXVtmXSxDPTEvKG4qbiksZS5pW29dW2ZdPUN9fWZ1bmN0aW9uIGN2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtpZihnPXQuYWgoKSxnfHx0LlVnKFQzdCwxKSxuPWwoUShlLChmdCgpLEsxZSkpLDE1KSxmPTEvbi5nYygpLHQuX2coKSlmb3IodC5iaCgiRUxLIExheWVyZWQgdXNlcyB0aGUgZm9sbG93aW5nICIrbi5nYygpKyIgbW9kdWxlczoiKSx6PTAsQj1uLktjKCk7Qi5PYigpOylDPWwoQi5QYigpLDQ3KSxyPSh6PDEwPyIwIjoiIikreisrLHQuYmgoIiAgIFNsb3QgIityKyI6ICIrX20oYmgoQykpKTtmb3IoTD1uLktjKCk7TC5PYigpOyl7aWYoQz1sKEwuUGIoKSw0NyksdC4kZygpKXJldHVybjtDLktmKGUsdC5laChmKSl9Zm9yKG89bmV3IEcoZS5iKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMzApLHJhKGUuYSxhLmEpLGEuYS5jLmxlbmd0aD0wO2ZvcihFPW5ldyBHKGUuYSk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDEwKSxWYSh3LG51bGwpO2UuYi5jLmxlbmd0aD0wLGd8fHQuVmcoKX1mdW5jdGlvbiBBTG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYoRT1uZXcgYnQsIW5zKGUsKGZ0KCkscTFlKSkpcmV0dXJuIEU7Zm9yKHI9bChRKGUscTFlKSwxNSkuS2MoKTtyLk9iKCk7KXQ9bChyLlBiKCksMTApLFVMbih0LGUpLCRuKEUuYyx0KTtmb3Iobz1uZXcgRyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihhPWwocmUobyksMzApLGc9bmV3IEcoYS5hKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTApLGYuaz09KFpuKCksVXMpJiYodz1sKFEoZixhVyksMTApLHcmJihDPW5ldyBndSxNYyhDLGYpLEw9bChRKGYsV2MpLDY0KSxsYShDLEwpLEI9bChqdCh3LmosMCksMTIpLHo9bmV3IFR3LHBvKHosQyksRmEoeixCKSkpO2ZvcihuPW5ldyBHKEUpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMCksVmEodCxsKGp0KGUuYixlLmIuYy5sZW5ndGgtMSksMzApKTtyZXR1cm4gRX1mdW5jdGlvbiB1dnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTDtmb3IoTD1uZXcgYnQsQz1uZXcgUTVlKDAsbiksbz0wLGJWKEMsbmV3IGtjZSgwLDAsQyxuKSksYT0wLEU9bmV3IG9yKGUpO0UuZSE9RS5pLmdjKCk7KXc9bChncihFKSwyNykscj1sKGp0KEMuYSxDLmEuYy5sZW5ndGgtMSksMTcyKSxnPWErdy5nKyhsKGp0KEMuYSwwKSwxNzIpLmIuYy5sZW5ndGg9PTA/MDpuKSwoZz50fHxSdChCdChhdCh3LCh6MSgpLCRCKSkpKSkmJihhPTAsbys9Qy5iK24sJG4oTC5jLEMpLEM9bmV3IFE1ZShvLG4pLHI9bmV3IGtjZSgwLEMuZixDLG4pLGJWKEMsciksYT0wKSxyLmIuYy5sZW5ndGg9PTB8fCFSdChCdChhdChkcyh3KSwoejEoKSxoZ2UpKSkpJiYody5mPj1yLm8mJncuZjw9ci5mfHxyLmEqLjU8PXcuZiYmci5hKjEuNT49dy5mKT95OGUocix3KTooZj1uZXcga2NlKHIucytyLnIrbixDLmYsQyxuKSxiVihDLGYpLHk4ZShmLHcpKSxhPXcuaSt3Lmc7cmV0dXJuICRuKEwuYyxDKSxMfWZ1bmN0aW9uIGVMKGUpe3ZhciB0LG4scixhO2lmKCEoZS5iPT1udWxsfHxlLmIubGVuZ3RoPD0yKSYmIWUuYSl7Zm9yKHQ9MCxhPTA7YTxlLmIubGVuZ3RoOyl7Zm9yKHQhPWE/KGUuYlt0XT1lLmJbYSsrXSxlLmJbdCsxXT1lLmJbYSsrXSk6YSs9MixuPWUuYlt0KzFdO2E8ZS5iLmxlbmd0aCYmIShuKzE8ZS5iW2FdKTspaWYobisxPT1lLmJbYV0pZS5iW3QrMV09ZS5iW2ErMV0sbj1lLmJbdCsxXSxhKz0yO2Vsc2UgaWYobj49ZS5iW2ErMV0pYSs9MjtlbHNlIGlmKG48ZS5iW2ErMV0pZS5iW3QrMV09ZS5iW2ErMV0sbj1lLmJbdCsxXSxhKz0yO2Vsc2UgdGhyb3cgdWUobmV3IEFjKCJUb2tlbiNjb21wYWN0UmFuZ2VzKCk6IEludGVybmVsIEVycm9yOiBbIitlLmJbdF0rIiwiK2UuYlt0KzFdKyJdIFsiK2UuYlthXSsiLCIrZS5iW2ErMV0rIl0iKSk7dCs9Mn10IT1lLmIubGVuZ3RoJiYocj1XZShWcixkaSwyOCx0LDE1LDEpLHB1KGUuYiwwLHIsMCx0KSxlLmI9ciksZS5hPSEwfX1mdW5jdGlvbiBMTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoZj1XOChlLmEpLktjKCk7Zi5PYigpOyl7aWYobz1sKGYuUGIoKSwxOCksby5iLmMubGVuZ3RoPjApZm9yKHI9bmV3IE9sKGwoJGkoZS5hLG8pLDIxKSksQ24oKSxWcyhyLG5ldyBHSSh0KSksYT1uZXcgVWEoby5iLDApO2EuYjxhLmQuZ2MoKTspe3N3aXRjaChuPShtcihhLmI8YS5kLmdjKCkpLGwoYS5kLlhiKGEuYz1hLmIrKyksNzIpKSxnPS0xLGwoUShuLChOdCgpLGpkKSksMjc4KS5nKXtjYXNlIDE6Zz1yLmMubGVuZ3RoLTE7YnJlYWs7Y2FzZSAwOmc9QjhuKHIpO2JyZWFrO2Nhc2UgMjpnPTB9ZyE9LTEmJih3PShTbihnLHIuYy5sZW5ndGgpLGwoci5jW2ddLDI0OSkpLHZ0KHcuYi5iLG4pLGwoUShlbyh3LmIuYy5pKSwoZnQoKSxMdSkpLDIxKS5GYygoSG8oKSxqVCkpLGwoUShlbyh3LmIuYy5pKSxMdSksMjEpLkZjKFJUKSxwaChhKSxydChuLFZMZSxvKSl9cG8obyxudWxsKSxGYShvLG51bGwpfX1mdW5jdGlvbiBNTG4oZSx0KXt2YXIgbixyLGEsbztyZXR1cm4gbj1uZXcgR2Qscj1sKHljKGZjKG5ldyBibihudWxsLG5ldyBrbihlLmYsMTYpKSxuKSxTeShuZXcgeXQsbmV3IGppLG5ldyBxbixuZXcgVW4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLGk0KSxFY10pKSksMjEpLGE9ci5nYygpLGE9YT09Mj8xOjAsYT09MSYmY3coUk4obCh5YyhGaShyLkxjKCksbmV3IGNkKSxJZnQoYXAoMCksbmV3IFRyKSksMTY4KS5hLDIpLDApJiYoYT0wKSxyPWwoeWMoZmMobmV3IGJuKG51bGwsbmV3IGtuKHQuZiwxNikpLG4pLFN5KG5ldyB5dCxuZXcgamksbmV3IHFuLG5ldyBVbixoZShsZShvYywxKSxpdCwxMDgsMCxbaTQsRWNdKSkpLDIxKSxvPXIuZ2MoKSxvPW89PTI/MTowLG89PTEmJmN3KFJOKGwoeWMoRmkoci5MYygpLG5ldyBLZCksSWZ0KGFwKDApLG5ldyBUcikpLDE2OCkuYSwyKSwwKSYmKG89MCksYTxvPy0xOmE9PW8/MDoxfWZ1bmN0aW9uIGx2dChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKHQ9TTEoZSksbz1SdChCdChhdCh0LChOdCgpLGI0KSkpKSxDPTAsYT0wLEU9bmV3IG9yKCghZS5lJiYoZS5lPW5ldyBMbihqcyxlLDcsNCkpLGUuZSkpO0UuZSE9RS5pLmdjKCk7KXc9bChncihFKSw3NCksZz1xdyh3KSxmPWcmJm8mJlJ0KEJ0KGF0KHcsZ3YpKSksQj1iYyhsKE9lKCghdy5jJiYody5jPW5ldyBMbihfcix3LDUsOCkpLHcuYyksMCksODQpKSxnJiZmPysrYTpnJiYhZj8rK0M6ZHMoQik9PXR8fEI9PXQ/KythOisrQztmb3Iocj1uZXcgb3IoKCFlLmQmJihlLmQ9bmV3IExuKGpzLGUsOCw1KSksZS5kKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDc0KSxnPXF3KG4pLGY9ZyYmbyYmUnQoQnQoYXQobixndikpKSxMPWJjKGwoT2UoKCFuLmImJihuLmI9bmV3IExuKF9yLG4sNCw3KSksbi5iKSwwKSw4NCkpLGcmJmY/KytDOmcmJiFmPysrYTpkcyhMKT09dHx8TD09dD8rK0M6KythO3JldHVybiBDLWF9ZnVuY3Rpb24gRExuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKHQuVWcoIkVkZ2Ugc3BsaXR0aW5nIiwxKSxlLmIuYy5sZW5ndGg8PTIpe3QuVmcoKTtyZXR1cm59Zm9yKG89bmV3IFVhKGUuYiwwKSxmPShtcihvLmI8by5kLmdjKCkpLGwoby5kLlhiKG8uYz1vLmIrKyksMzApKTtvLmI8by5kLmdjKCk7KWZvcihhPWYsZj0obXIoby5iPG8uZC5nYygpKSxsKG8uZC5YYihvLmM9by5iKyspLDMwKSksdz1uZXcgRyhhLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihnPWwocmUodyksMTApLEM9bmV3IEcoZy5qKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxyPW5ldyBHKEUuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE4KSxCPW4uZCxMPUIuaS5jLEwhPWEmJkwhPWYmJnlidChuLCh6PW5ldyBvcChlKSx4KHosKFpuKCksQWEpKSxydCh6LChmdCgpLHppKSxuKSxydCh6LChOdCgpLE1zKSwoUmEoKSxNdSkpLFZhKHosZikseikpO3QuVmcoKX1mdW5jdGlvbiBJTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihDPW5ldyBidCxCPW5ldyBLcyxmPXQuYixhPTA7YTxmLmMubGVuZ3RoO2ErKyl7Zm9yKEU9KFNuKGEsZi5jLmxlbmd0aCksbChmLmNbYV0sMzApKS5hLEMuYy5sZW5ndGg9MCxvPTA7bzxFLmMubGVuZ3RoO28rKylnPWUuYVthXVtvXSxnLnA9byxnLms9PShabigpLEF1KSYmJG4oQy5jLGcpLHJmKGwoanQodC5iLGEpLDMwKS5hLG8sZyksZy5qLmMubGVuZ3RoPTAscmEoZy5qLGwobChqdChlLmIsYSksMTUpLlhiKG8pLDE2KSksVTgobChRKGcsKE50KCksTXMpKSwxMDEpKXx8cnQoZyxNcywoUmEoKSxUdikpO2ZvcihyPW5ldyBHKEMpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxMCksTD1vX24obiksQi5hLnpjKEwsQiksQi5hLnpjKG4sQil9Zm9yKHc9Qi5hLmVjKCkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTApLENuKCksVnMoZy5qLChURSgpLGFMZSkpLGcuaT0hMCxmOWUoZyl9ZnVuY3Rpb24gaHZ0KGUpe3ZhciB0LG4scixhLG87cmV0dXJuIGUuZyE9bnVsbD9lLmc6ZS5hPDMyPyhlLmc9UURuKFpjKGUuZiksdWEoZS5lKSksZS5nKTooYT1EbGUoKCFlLmMmJihlLmM9WE8oWmMoZS5mKSkpLGUuYyksMCksZS5lPT0wP2E6KHQ9KCFlLmMmJihlLmM9WE8oWmMoZS5mKSkpLGUuYykuZTwwPzI6MSxuPWEubGVuZ3RoLHI9LWUuZStuLXQsbz1uZXcgdGIsby5hKz0iIithLGUuZT4wJiZyPj0tNj9yPj0wP0VPKG8sbi11YShlLmUpLFN0cmluZy5mcm9tQ2hhckNvZGUoNDYpKTooaGNlKG8sdC0xLHQtMSwiMC4iKSxFTyhvLHQrMSxJZihsdiwwLC11YShyKS0xKSkpOihuLXQ+PTEmJihFTyhvLHQsU3RyaW5nLmZyb21DaGFyQ29kZSg0NikpLCsrbiksRU8obyxuLFN0cmluZy5mcm9tQ2hhckNvZGUoNjkpKSxyPjAmJkVPKG8sKytuLFN0cmluZy5mcm9tQ2hhckNvZGUoNDMpKSxFTyhvLCsrbiwiIitZXyhaYyhyKSkpKSxlLmc9by5hLGUuZykpfWZ1bmN0aW9uIE9MbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3Q7cj16ZShHZShRKHQsKE50KCksS01lKSkpKSxaZT1sKFEodCxuTSksMTcpLmEsQj00LGE9MyxvdD0yMC9aZSx6PSExLHc9MCxmPUlpO2Rve2ZvcihvPXchPTEsTD13IT0wLFN0PTAsdGU9ZS5hLFRlPTAsJGU9dGUubGVuZ3RoO1RlPCRlOysrVGUpVj10ZVtUZV0sVi5mPW51bGwseURuKGUsVixvLEwsciksU3QrPWIuTWF0aC5hYnMoVi5hKTtkbyBnPW9BbihlLHQpO3doaWxlKGcpO2ZvcihKPWUuYSxmZT0wLE1lPUoubGVuZ3RoO2ZlPE1lOysrZmUpaWYoVj1KW2ZlXSxuPXM1ZShWKS5hLG4hPTApZm9yKEM9bmV3IEcoVi5lKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksMTApLEUubi5iKz1uO3c9PTB8fHc9PTE/KC0tQixCPD0wJiYoU3Q8Znx8LUI+WmUpPyh3PTIsZj1JaSk6dz09MD8odz0xLGY9U3QpOih3PTAsZj1TdCkpOih6PVN0Pj1mfHxmLVN0PG90LGY9U3QseiYmLS1hKX13aGlsZSghKHomJmE8PTApKX1mdW5jdGlvbiBFbGUoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoVj1uZXcgUHIsbz1lLmEuZWMoKS5LYygpO28uT2IoKTspcj1sKG8uUGIoKSwxNzcpLGtpKFYscixuLmFmKHIpKTtmb3IoZj0oWHIoZSksZT9uZXcgT2woZSk6JGsoZS5hLmVjKCkuS2MoKSkpLFZzKGYsbmV3IEx6KFYpKSxnPUhIKGYpLHc9bmV3IE5xKHQpLHo9bmV3IFByLGp1KHouZix0LHcpO2cuYS5nYygpIT0wOyl7Zm9yKEU9bnVsbCxDPW51bGwsTD1udWxsLGE9Zy5hLmVjKCkuS2MoKTthLk9iKCk7KWlmKHI9bChhLlBiKCksMTc3KSx6ZShHZShoYyh6byhWLmYscikpKSk8PWdzKXtpZihIdSh6LHIuYSkmJiFIdSh6LHIuYikpe0M9ci5iLEw9ci5hLEU9cjticmVha31pZihIdSh6LHIuYikmJiFIdSh6LHIuYSkpe0M9ci5hLEw9ci5iLEU9cjticmVha319aWYoIUUpYnJlYWs7Qj1uZXcgTnEoQyksdnQobChoYyh6byh6LmYsTCkpLDIyNSkuYSxCKSxqdSh6LmYsQyxCKSxnLmEuQmMoRSkhPW51bGx9cmV0dXJuIHd9ZnVuY3Rpb24gTkxuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6O2ZvcihuLlVnKCJEZXB0aC1maXJzdCBjeWNsZSByZW1vdmFsIiwxKSxMPXQuYSxDPUwuYy5sZW5ndGgsZS5jPW5ldyBidCxlLmQ9V2UoaWgscGcsMjgsQywxNiwxKSxlLmE9V2UoaWgscGcsMjgsQywxNiwxKSxlLmI9bmV3IGJ0LGY9MCxFPW5ldyBHKEwpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxMCksdy5wPWYsWmsoa2EodykpJiZ2dChlLmMsdyksKytmO2Zvcih6PW5ldyBHKGUuYyk7ei5hPHouYy5jLmxlbmd0aDspQj1sKHJlKHopLDEwKSxzOWUoZSxCKTtmb3Iobz0wO288QztvKyspZS5kW29dfHwoZz0oU24obyxMLmMubGVuZ3RoKSxsKEwuY1tvXSwxMCkpLHM5ZShlLGcpKTtmb3IoYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxOCksVXcociwhMCkscnQodCwoZnQoKSx5QiksKEhuKCksITApKTtlLmM9bnVsbCxlLmQ9bnVsbCxlLmE9bnVsbCxlLmI9bnVsbCxuLlZnKCl9ZnVuY3Rpb24gUExuKGUsdCl7aDYoKTt2YXIgbixyLGEsbyxmLGc7cmV0dXJuIG89dC5jLShlLmMrZS5iKSxhPWUuYy0odC5jK3QuYiksZj1lLmQtKHQuZCt0LmEpLG49dC5kLShlLmQrZS5hKSxyPWIuTWF0aC5tYXgoYSxvKSxnPWIuTWF0aC5tYXgoZixuKSxBMSgpLGYwKE5kKSwoYi5NYXRoLmFicyhyKTw9TmR8fHI9PTB8fGlzTmFOKHIpJiZpc05hTigwKT8wOnI8MD8tMTpyPjA/MTp1dyhpc05hTihyKSxpc05hTigwKSkpPj0wXihmMChOZCksKGIuTWF0aC5hYnMoZyk8PU5kfHxnPT0wfHxpc05hTihnKSYmaXNOYU4oMCk/MDpnPDA/LTE6Zz4wPzE6dXcoaXNOYU4oZyksaXNOYU4oMCkpKT49MCk/Yi5NYXRoLm1heChnLHIpOihmMChOZCksKGIuTWF0aC5hYnMocik8PU5kfHxyPT0wfHxpc05hTihyKSYmaXNOYU4oMCk/MDpyPDA/LTE6cj4wPzE6dXcoaXNOYU4ociksaXNOYU4oMCkpKT4wP2IuTWF0aC5zcXJ0KGcqZytyKnIpOi1iLk1hdGguc3FydChnKmcrcipyKSl9ZnVuY3Rpb24gUW0oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodCl7aWYoIWUuYSYmKGUuYT1uZXcganopLGUuZT09Mil7UnooZS5hLHQpO3JldHVybn1pZih0LmU9PTEpe2ZvcihhPTA7YTx0LlBtKCk7YSsrKVFtKGUsdC5MbShhKSk7cmV0dXJufWlmKGc9ZS5hLmEuYy5sZW5ndGgsZz09MCl7UnooZS5hLHQpO3JldHVybn1pZihmPWwoeHcoZS5hLGctMSksMTIyKSwhKChmLmU9PTB8fGYuZT09MTApJiYodC5lPT0wfHx0LmU9PTEwKSkpe1J6KGUuYSx0KTtyZXR1cm59bz10LmU9PTA/Mjp0Lk1tKCkubGVuZ3RoLGYuZT09MD8obj1uZXcgaF8scj1mLkttKCkscj49SW8/WG8obix3OGUocikpOlVrKG4sciZacyksZj1uZXcgY29lKDEwLG51bGwsMCksbWduKGUuYSxmLGctMSkpOihuPShmLk1tKCkubGVuZ3RoK28sbmV3IGhfKSxYbyhuLGYuTW0oKSkpLHQuZT09MD8ocj10LkttKCkscj49SW8/WG8obix3OGUocikpOlVrKG4sciZacykpOlhvKG4sdC5NbSgpKSxsKGYsNTMwKS5iPW4uYX19ZnVuY3Rpb24gQkxuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtpZighbi5kYygpKXtmb3IoZz0wLEI9MCxyPW4uS2MoKSxWPWwoci5QYigpLDE3KS5hO2c8dC5mOyl7aWYoZz09ViYmKEI9MCxyLk9iKCk/Vj1sKHIuUGIoKSwxNykuYTpWPXQuZisxKSxnIT1CKXtmb3IodGU9bChqdChlLmIsZyksMzApLHo9bChqdChlLmIsQiksMzApLEo9X3codGUuYSksTD1uZXcgRyhKKTtMLmE8TC5jLmMubGVuZ3RoOylpZihDPWwocmUoTCksMTApLEZ5KEMsei5hLmMubGVuZ3RoLHopLEI9PTApZm9yKGY9X3coa2EoQykpLG89bmV3IEcoZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDE4KSxVdyhhLCEwKSxydChlLChmdCgpLHlCKSwoSG4oKSwhMCkpLGJ2dChlLGEsMSl9KytCLCsrZ31mb3Iodz1uZXcgVWEoZS5iLDApO3cuYjx3LmQuZ2MoKTspRT0obXIody5iPHcuZC5nYygpKSxsKHcuZC5YYih3LmM9dy5iKyspLDMwKSksRS5hLmMubGVuZ3RoPT0wJiZwaCh3KX19ZnVuY3Rpb24gRkxuKGUsdCxuKXt2YXIgcixhLG87aWYoYT1sKFEodCwoTnQoKSxsVykpLDI4MiksYSE9KHpFKCksVkwpKXtzd2l0Y2gobi5VZygiSG9yaXpvbnRhbCBDb21wYWN0aW9uIiwxKSxlLmE9dCxvPW5ldyBHbHQscj1uZXcgYTJ0KChvLmQ9dCxvLmM9bChRKG8uZCxicCksMjIzKSxBU24obyksUE1uKG8pLEJTbihvKSxvLmEpKSxFdW4ocixlLmIpLGwoUSh0LEVNZSksNDMxKS5nKXtjYXNlIDE6SEplKHIsbmV3IG1mdChlLmEpKTticmVhaztkZWZhdWx0OkhKZShyLChQNWUoKSwkNnQpKX1zd2l0Y2goYS5nKXtjYXNlIDE6SEEocik7YnJlYWs7Y2FzZSAyOkhBKFVVKHIsKEpzKCksdmMpKSk7YnJlYWs7Y2FzZSAzOkhBKFZKZShVVShIQShyKSwoSnMoKSx2YykpLG5ldyBJaikpO2JyZWFrO2Nhc2UgNDpIQShWSmUoVVUoSEEociksKEpzKCksdmMpKSxuZXcgZ1llKG8pKSk7YnJlYWs7Y2FzZSA1OkhBKGt1bihyLFE4dCkpfVVVKHIsKEpzKCksdWMpKSxyLmU9ITAsbERuKG8pLG4uVmcoKX19ZnVuY3Rpb24gUkxuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZTtmb3IoZj10LmIsQz1mLm8sdz1mLmQscj16ZShHZSh0VShmLChOdCgpLHgwKSkpKSxhPXplKEdlKHRVKGYsSDYpKSksRT16ZShHZSh0VShmLHVkZSkpKSxnPW5ldyAkaWUsRDRlKGcsdy5kLHcuYyx3LmEsdy5iKSxCPVdTbih0LHIsYSxFKSxmZT1uZXcgRyh0LmQpO2ZlLmE8ZmUuYy5jLmxlbmd0aDspe2Zvcih0ZT1sKHJlKGZlKSwxMDUpLFY9dGUuZi5hLmVjKCkuS2MoKTtWLk9iKCk7KXo9bChWLlBiKCksMzQwKSxvPXouYSxMPUF4bih6KSxuPShUZT1uZXcgYmwsUGd0KHosei5jLEIsVGUpLHQ5bih6LEwsQixUZSksUGd0KHosei5kLEIsVGUpLFRlKSxuPWUubmcoeixMLG4pLENoKG8uYSksS2Eoby5hLG4pLElzKG5ldyBibihudWxsLG5ldyBrbihuLDE2KSksbmV3ICRldChDLGcpKTtKPXRlLmksSiYmKGJ4bih0ZSxKLEIsYSksTWU9bmV3IEVvKEouZyksVjhlKEMsZyxNZSksT2koTWUsSi5qKSxWOGUoQyxnLE1lKSl9RDRlKHcsZy5kLGcuYyxnLmEsZy5iKX1mdW5jdGlvbiBqTG4oZSx0LG4scixhLG8sZixnKXt2YXIgdyxFLEMsTDtzd2l0Y2godz1PMShoZShsZShNT24sMSksUm4sMjM4LDAsW3QsbixyLGFdKSksTD1udWxsLGUuYi5nKXtjYXNlIDE6TD1PMShoZShsZShsT2UsMSksUm4sNTM1LDAsW25ldyB2SSxuZXcgeW0sbmV3IFE5XSkpO2JyZWFrO2Nhc2UgMDpMPU8xKGhlKGxlKGxPZSwxKSxSbiw1MzUsMCxbbmV3IFE5LG5ldyB5bSxuZXcgdkldKSk7YnJlYWs7Y2FzZSAyOkw9TzEoaGUobGUobE9lLDEpLFJuLDUzNSwwLFtuZXcgeW0sbmV3IHZJLG5ldyBROV0pKX1mb3IoQz1uZXcgRyhMKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksNTM1KSx3LmMubGVuZ3RoPjEmJih3PUUuSGcodyxlLmEsZykpO3JldHVybiB3LmMubGVuZ3RoPT0xP2woanQodyx3LmMubGVuZ3RoLTEpLDIzOCk6dy5jLmxlbmd0aD09Mj9DTG4oKFNuKDAsdy5jLmxlbmd0aCksbCh3LmNbMF0sMjM4KSksKFNuKDEsdy5jLmxlbmd0aCksbCh3LmNbMV0sMjM4KSksZixvKTpudWxsfWZ1bmN0aW9uICRMbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7Zm9yKG4uVWcoIkZpbmQgcm9vdHMiLDEpLGUuYS5jLmxlbmd0aD0wLGE9UnIodC5iLDApO2EuYiE9YS5kLmM7KXI9bChCcihhKSw0MCksci5iLmI9PTAmJihydChyLChRaSgpLFZiKSwoSG4oKSwhMCkpLHZ0KGUuYSxyKSk7c3dpdGNoKGUuYS5jLmxlbmd0aCl7Y2FzZSAwOm89bmV3IHhjZSgwLHQsIkRVTU1ZX1JPT1QiKSxydChvLChRaSgpLFZiKSwoSG4oKSwhMCkpLHJ0KG8sTmRlLCEwKSx1aSh0LmIsbyk7YnJlYWs7Y2FzZSAxOmJyZWFrO2RlZmF1bHQ6Zm9yKGY9bmV3IHhjZSgwLHQsREcpLHc9bmV3IEcoZS5hKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksNDApLEU9bmV3IE41ZShmLGcpLHJ0KEUsKFFpKCksTmRlKSwoSG4oKSwhMCkpLHVpKGYuYS5hLEUpLHVpKGYuZCxFKSx1aShnLmIsRSkscnQoZyxWYiwhMSk7cnQoZiwoUWkoKSxWYiksKEhuKCksITApKSxydChmLE5kZSwhMCksdWkodC5iLGYpfW4uVmcoKX1mdW5jdGlvbiBmdnQoZSl7dmFyIHQsbixyLGEsbyxmO2ZvcihWdShlLmEsbmV3IFFhKSxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDIyNSkscj1tYShKYShsKGUuYiw2OCkuYyksbCh0LmIsNjgpLmMpLEM3dD8oZj1sKGUuYiw2OCkuYixvPWwodC5iLDY4KS5iLGIuTWF0aC5hYnMoci5hKT49Yi5NYXRoLmFicyhyLmIpPyhyLmI9MCxvLmQrby5hPmYuZCYmby5kPGYuZCtmLmEmJlFxKHIsYi5NYXRoLm1heChmLmMtKG8uYytvLmIpLG8uYy0oZi5jK2YuYikpKSk6KHIuYT0wLG8uYytvLmI+Zi5jJiZvLmM8Zi5jK2YuYiYmUXEocixiLk1hdGgubWF4KGYuZC0oby5kK28uYSksby5kLShmLmQrZi5hKSkpKSk6UXEocixCbXQobChlLmIsNjgpLGwodC5iLDY4KSkpLGE9Yi5NYXRoLnNxcnQoci5hKnIuYStyLmIqci5iKSxhPU1ndChSTCx0LGEsciksUXEocixhKSxNYWUobCh0LmIsNjgpLHIpLFZ1KHQuYSxuZXcgTXoocikpLGwoUkwuYiw2OCksRDZlKFJMLEhfZSx0KX1mdW5jdGlvbiB6TG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoZS5mPW5ldyBqaWUsRT0wLGE9MCxmPW5ldyBHKGUuZS5iKTtmLmE8Zi5jLmMubGVuZ3RoOylmb3Iobz1sKHJlKGYpLDMwKSx3PW5ldyBHKG8uYSk7dy5hPHcuYy5jLmxlbmd0aDspe2ZvcihnPWwocmUodyksMTApLGcucD1FKysscj1uZXcgaHIoZHIocXMoZykuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksbi5wPWErKztmb3IodD15bGUoZyksQj1uZXcgRyhnLmopO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMiksdCYmKFY9TC5hLmIsViE9Yi5NYXRoLmZsb29yKFYpJiYoQz1WLUZtKFpjKGIuTWF0aC5yb3VuZChWKSkpLEwuYS5iLT1DKSksej1MLm4uYitMLmEuYix6IT1iLk1hdGguZmxvb3IoeikmJihDPXotRm0oWmMoYi5NYXRoLnJvdW5kKHopKSksTC5uLmItPUMpfWUuZz1FLGUuYj1hLGUuaT1XZShTT24sUm4sNDEyLEUsMCwxKSxlLmM9V2UoQ09uLFJuLDY1NSxhLDAsMSksZS5kLmEuJGIoKX1mdW5jdGlvbiAkcihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7aWYoZS5QaigpKWlmKHc9ZS5RaigpLGUuaT4wKXtpZih0PW5ldyBleWUoZS5pLGUuZyksbj1lLmksbz1uPDEwMD9udWxsOm5ldyBuYihuKSxlLlRqKCkpZm9yKHI9MDtyPGUuaTsrK3IpZj1lLmdbcl0sbz1lLlZqKGYsbyk7aWYodUEoZSksYT1uPT0xP2UuSWooNCxPZSh0LDApLG51bGwsMCx3KTplLklqKDYsdCxudWxsLC0xLHcpLGUuTWooKSl7Zm9yKHI9bmV3IEg4KHQpO3IuZSE9ci5pLmdjKCk7KW89ZS5PaihydWUociksbyk7bz8oby5uaihhKSxvLm9qKCkpOmUuSmooYSl9ZWxzZSBvPyhvLm5qKGEpLG8ub2ooKSk6ZS5KaihhKX1lbHNlIHVBKGUpLGUuSmooZS5Jaig2LChDbigpLF9vKSxudWxsLC0xLHcpKTtlbHNlIGlmKGUuTWooKSlpZihlLmk+MCl7Zm9yKGc9ZS5nLEU9ZS5pLHVBKGUpLG89RTwxMDA/bnVsbDpuZXcgbmIoRSkscj0wO3I8RTsrK3IpZj1nW3JdLG89ZS5PaihmLG8pO28mJm8ub2ooKX1lbHNlIHVBKGUpO2Vsc2UgdUEoZSl9ZnVuY3Rpb24gSWtlKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtmb3IoR2Z0KHRoaXMpLG49PShTdygpLEhiKT9uYSh0aGlzLnIsZSk6bmEodGhpcy53LGUpLEM9Z3MsRT1pYSxmPXQuYS5lYygpLktjKCk7Zi5PYigpOylhPWwoZi5QYigpLDQyKSxnPWwoYS5hLDQ2NSkscj1sKGEuYiwxOCksdz1yLmMsdz09ZSYmKHc9ci5kKSxnPT1IYj9uYSh0aGlzLnIsdyk6bmEodGhpcy53LHcpLEI9KEN0KCksaGwpLkhjKHcuaik/emUoR2UoUSh3LChmdCgpLHpUKSkpKTpJYyhoZShsZShFYSwxKSxkdCw4LDAsW3cuaS5uLHcubix3LmFdKSkuYixDPWIuTWF0aC5taW4oQyxCKSxFPWIuTWF0aC5tYXgoRSxCKTtmb3IoTD0oQ3QoKSxobCkuSGMoZS5qKT96ZShHZShRKGUsKGZ0KCkselQpKSkpOkljKGhlKGxlKEVhLDEpLGR0LDgsMCxbZS5pLm4sZS5uLGUuYV0pKS5iLFpndCh0aGlzLEwsQyxFKSxvPXQuYS5lYygpLktjKCk7by5PYigpOylhPWwoby5QYigpLDQyKSx1cHQodGhpcyxsKGEuYiwxOCkpO3RoaXMubz0hMX1mdW5jdGlvbiBxTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyO3JldHVybiBuPWUubCY4MTkxLHI9ZS5sPj4xM3woZS5tJjE1KTw8OSxhPWUubT4+NCY4MTkxLG89ZS5tPj4xN3woZS5oJjI1NSk8PDUsZj0oZS5oJjEwNDgzMjApPj44LGc9dC5sJjgxOTEsdz10Lmw+PjEzfCh0Lm0mMTUpPDw5LEU9dC5tPj40JjgxOTEsQz10Lm0+PjE3fCh0LmgmMjU1KTw8NSxMPSh0LmgmMTA0ODMyMCk+PjgsY249bipnLGFuPXIqZyxCbj1hKmcsam49bypnLHVyPWYqZyx3IT0wJiYoYW4rPW4qdyxCbis9cip3LGpuKz1hKncsdXIrPW8qdyksRSE9MCYmKEJuKz1uKkUsam4rPXIqRSx1cis9YSpFKSxDIT0wJiYoam4rPW4qQyx1cis9cipDKSxMIT0wJiYodXIrPW4qTCksej1jbiZlaCxWPShhbiY1MTEpPDwxMyxCPXorVix0ZT1jbj4+MjIsZmU9YW4+PjksVGU9KEJuJjI2MjE0Myk8PDQsTWU9KGpuJjMxKTw8MTcsSj10ZStmZStUZStNZSxaZT1Cbj4+MTgsb3Q9am4+PjUsU3Q9KHVyJjQwOTUpPDw4LCRlPVplK290K1N0LEorPUI+PjIyLEImPWVoLCRlKz1KPj4yMixKJj1laCwkZSY9aHAscXUoQixKLCRlKX1mdW5jdGlvbiBkdnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7aWYoZz1sKGp0KGUuaiwwKSwxMiksZy5nLmMubGVuZ3RoIT0wJiZnLmUuYy5sZW5ndGghPTApdGhyb3cgdWUobmV3IG5jKCJJbnRlcmFjdGl2ZSBsYXlvdXQgZG9lcyBub3Qgc3VwcG9ydCBOT1JUSC9TT1VUSCBwb3J0cyB3aXRoIGluY29taW5nIF9hbmRfIG91dGdvaW5nIGVkZ2VzLiIpKTtpZihnLmcuYy5sZW5ndGghPTApe2ZvcihvPWdzLG49bmV3IEcoZy5nKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTgpLGY9dC5kLmkscj1sKFEoZiwoTnQoKSx2VykpLDE0MCksbz1iLk1hdGgubWluKG8sZi5uLmEtci5iKTtyZXR1cm4gbmV3IEpTKFhyKG8pKX1pZihnLmUuYy5sZW5ndGghPTApe2ZvcihhPWlhLG49bmV3IEcoZy5lKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTgpLGY9dC5jLmkscj1sKFEoZiwoTnQoKSx2VykpLDE0MCksYT1iLk1hdGgubWF4KGEsZi5uLmErZi5vLmErci5jKTtyZXR1cm4gbmV3IEpTKFhyKGEpKX1yZXR1cm4gb18oKSxvXygpLHYwZX1mdW5jdGlvbiBndnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZihlLm9sKCkpe2lmKGUuaT40KWlmKGUuZmsodCkpe2lmKGUuYWwoKSl7aWYoYT1sKHQsNTQpLHI9YS5FaCgpLHc9cj09ZS5lJiYoZS5tbCgpP2EueWgoYS5GaCgpLGUuaWwoKSk9PWUuamwoKTotMS1hLkZoKCk9PWUuTGooKSksZS5ubCgpJiYhdyYmIXImJmEuSmgoKSl7Zm9yKG89MDtvPGUuaTsrK28paWYobj1lLnBsKGwoZS5nW29dLDU4KSkscWUobik9PT1xZSh0KSlyZXR1cm4hMH1yZXR1cm4gd31lbHNlIGlmKGUubWwoKSYmIWUubGwoKSl7aWYoZj1sKHQsNTgpLk1oKFJvKGwoZS5MaygpLDE5KSkpLHFlKGYpPT09cWUoZS5lKSlyZXR1cm4hMDtpZihmPT1udWxsfHwhbChmLDU4KS5WaCgpKXJldHVybiExfX1lbHNlIHJldHVybiExO2lmKGc9akUoZSx0KSxlLm5sKCkmJiFnKXtmb3Iobz0wO288ZS5pOysrbylpZihhPWUucGwobChlLmdbb10sNTgpKSxxZShhKT09PXFlKHQpKXJldHVybiEwfXJldHVybiBnfWVsc2UgcmV0dXJuIGpFKGUsdCl9ZnVuY3Rpb24gSExuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtmb3Iobi5VZygiSW50ZXJhY3RpdmUgY3ljbGUgYnJlYWtpbmciLDEpLEw9bmV3IGJ0LHo9bmV3IEcodC5hKTt6LmE8ei5jLmMubGVuZ3RoOylmb3IoQj1sKHJlKHopLDEwKSxCLnA9MSxWPUV4ZShCKS5hLEM9UncoQiwocW8oKSx6dSkpLktjKCk7Qy5PYigpOylmb3IoRT1sKEMuUGIoKSwxMiksbz1uZXcgRyhFLmcpO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwxOCksSj1yLmQuaSxKIT1CJiYodGU9RXhlKEopLmEsdGU8ViYmJG4oTC5jLHIpKTtmb3IoZj1uZXcgRyhMKTtmLmE8Zi5jLmMubGVuZ3RoOylyPWwocmUoZiksMTgpLFV3KHIsITApO2ZvcihMLmMubGVuZ3RoPTAsdz1uZXcgRyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMCksZy5wPjAmJmdwdChlLGcsTCk7Zm9yKGE9bmV3IEcoTCk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSxVdyhyLCEwKTtMLmMubGVuZ3RoPTAsbi5WZygpfWZ1bmN0aW9uIFZMbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztmb3Iobj0wLEM9bmV3IGJ0LGc9bmV3IEcodCk7Zy5hPGcuYy5jLmxlbmd0aDspe3N3aXRjaChmPWwocmUoZyksMTIpLFk3ZShlLmIsZS5kW2YucF0pLEMuYy5sZW5ndGg9MCxmLmkuay5nKXtjYXNlIDA6cj1sKFEoZiwoZnQoKSxqbCkpLDEwKSxWdShyLmosbmV3IEdZZShDKSk7YnJlYWs7Y2FzZSAxOmlobihrRShGaShuZXcgYm4obnVsbCxuZXcga24oZi5pLmosMTYpKSxuZXcgS1llKGYpKSksbmV3IFdZZShDKSk7YnJlYWs7Y2FzZSAzOmE9bChRKGYsKGZ0KCksemkpKSwxMiksdnQoQyxuZXcgY2EoYSxwdChmLmUuYy5sZW5ndGgrZi5nLmMubGVuZ3RoKSkpfWZvcihFPW5ldyBHKEMpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSw0Miksbz1mM2UoZSxsKHcuYSwxMikpLG8+ZS5kW2YucF0mJihuKz1mNmUoZS5iLG8pKmwody5iLDE3KS5hLGdiKGUuYSxwdChvKSkpO2Zvcig7IWxfKGUuYSk7KVU2ZShlLmIsbChYOChlLmEpLDE3KS5hKX1yZXR1cm4gbn1mdW5jdGlvbiBVTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZihDPWwoUShlLChmdCgpLFdjKSksNjQpLHI9bChqdChlLmosMCksMTIpLEM9PShDdCgpLFFuKT9sYShyLERyKTpDPT1EciYmbGEocixRbiksbChRKHQsKE50KCksYnYpKSwxODEpLkhjKChtaCgpLEN2KSkpe2lmKHc9emUoR2UoUShlLEdUKSkpLEU9emUoR2UoUShlLEtUKSkpLGY9emUoR2UoUShlLHk0KSkpLGc9bChRKHQsdjQpLDIxKSxnLkhjKChSbCgpLHZwKSkpZm9yKG49RSxMPWUuby5hLzItci5uLmEsbz1uZXcgRyhyLmYpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSw3MiksYS5uLmI9bixhLm4uYT1MLWEuby5hLzIsbis9YS5vLmIrZjtlbHNlIGlmKGcuSGMoWWIpKWZvcihvPW5ldyBHKHIuZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDcyKSxhLm4uYT13K2Uuby5hLXIubi5hO21ibihuZXcgZV8oKGdfKCksbmV3IEphZSh0LCExLCExLG5ldyBjUykpKSxuZXcgV3EobnVsbCxlLCExKSl9fWZ1bmN0aW9uIEdMbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztpZih0LmMubGVuZ3RoIT0wKXtmb3IoQ24oKSxMYWUodC5jLHQuYy5sZW5ndGgsbnVsbCksYT1uZXcgRyh0KSxyPWwocmUoYSksMTU0KTthLmE8YS5jLmMubGVuZ3RoOyluPWwocmUoYSksMTU0KSxYNmUoci5lLmMsbi5lLmMpJiYhKGo4ZShfcnQoci5lKS5iLG4uZS5kKXx8ajhlKF9ydChuLmUpLmIsci5lLmQpKT9yPShyYShyLmssbi5rKSxyYShyLmIsbi5iKSxyYShyLmMsbi5jKSxLYShyLmksbi5pKSxyYShyLmQsbi5kKSxyYShyLmosbi5qKSxvPWIuTWF0aC5taW4oci5lLmMsbi5lLmMpLGY9Yi5NYXRoLm1pbihyLmUuZCxuLmUuZCksZz1iLk1hdGgubWF4KHIuZS5jK3IuZS5iLG4uZS5jK24uZS5iKSx3PWctbyxFPWIuTWF0aC5tYXgoci5lLmQrci5lLmEsbi5lLmQrbi5lLmEpLEM9RS1mLElpdChyLmUsbyxmLHcsQyksYmJuKHIuZixuLmYpLCFyLmEmJihyLmE9bi5hKSxyYShyLmcsbi5nKSx2dChyLmcsbikscik6KF9tdChlLHIpLHI9bik7X210KGUscil9fWZ1bmN0aW9uIEtMbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmU7Zm9yKHc9bmV3IGJ0LG89bmV3IEcodC5hKTtvLmE8by5jLmMubGVuZ3RoOylmb3IoYT1sKHJlKG8pLDEwKSxnPW5ldyBHKGEuaik7Zy5hPGcuYy5jLmxlbmd0aDspe2ZvcihmPWwocmUoZyksMTIpLEM9bnVsbCxNZT1rZChmLmcpLCRlPTAsWmU9TWUubGVuZ3RoOyRlPFplOysrJGUpVGU9TWVbJGVdLGJFKFRlLmQuaSxuKXx8KGZlPXhsZShlLHQsbixUZSxUZS5jLChxbygpLHp1KSxDKSxmZSE9QyYmJG4ody5jLGZlKSxmZS5jJiYoQz1mZSkpO2ZvcihFPW51bGwsVj1rZChmLmUpLEo9MCx0ZT1WLmxlbmd0aDtKPHRlOysrSil6PVZbSl0sYkUoei5jLmksbil8fChmZT14bGUoZSx0LG4seix6LmQsKHFvKCksJGwpLEUpLGZlIT1FJiYkbih3LmMsZmUpLGZlLmMmJihFPWZlKSl9Zm9yKEI9bmV3IEcodyk7Qi5hPEIuYy5jLmxlbmd0aDspTD1sKHJlKEIpLDQ1MyksZ2ModC5hLEwuYSwwKSE9LTF8fHZ0KHQuYSxMLmEpLEwuYyYmJG4oci5jLEwpfWZ1bmN0aW9uIFdMbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKEw9bmV3IEVvKGwoYXQoZSwod1UoKSxRT2UpKSw4KSksTC5hPWIuTWF0aC5tYXgoTC5hLW4uYi1uLmMsMCksTC5iPWIuTWF0aC5tYXgoTC5iLW4uZC1uLmEsMCksYT1HZShhdChlLFdPZSkpLChhPT1udWxsfHwobnIoYSksYTw9MCkpJiYoYT0xLjMpLGc9bmV3IGJ0LFY9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7Vi5lIT1WLmkuZ2MoKTspej1sKGdyKFYpLDI3KSxmPW5ldyB2cnQoeiksJG4oZy5jLGYpO3N3aXRjaChCPWwoYXQoZSxfZ2UpLDMyMCksQi5nKXtjYXNlIDM6dGU9Tl9uKGcsdCxMLmEsTC5iLChFPXIsbnIoYSksRSkpO2JyZWFrO2Nhc2UgMTp0ZT1UQW4oZyx0LEwuYSxMLmIsKEM9cixucihhKSxDKSk7YnJlYWs7ZGVmYXVsdDp0ZT1YTG4oZyx0LEwuYSxMLmIsKHc9cixucihhKSx3KSl9bz1uZXcgaFYodGUpLEo9TGxlKG8sdCxuLEwuYSxMLmIsciwobnIoYSksYSkpLEd3KGUsSi5hLEouYiwhMSwhMCl9ZnVuY3Rpb24gWUxuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRTtpZihnPWUuaixnPT0oQ3QoKSxQYykmJnQhPShSYSgpLFoxKSYmdCE9KFJhKCksV2IpJiYoZz1rbXQoZSxuKSxsYShlLGcpLCEoZS5xP2UucTooQ24oKSxDbigpLG1nKSkuX2IoKE50KCksbTQpKSYmZyE9UGMmJihlLm4uYSE9MHx8ZS5uLmIhPTApJiZydChlLG00LFk3bihlLGcpKSksdD09KFJhKCksVGcpKXtzd2l0Y2goRT0wLGcuZyl7Y2FzZSAxOmNhc2UgMzpvPWUuaS5vLmEsbz4wJiYoRT1lLm4uYS9vKTticmVhaztjYXNlIDI6Y2FzZSA0OmE9ZS5pLm8uYixhPjAmJihFPWUubi5iL2EpfXJ0KGUsKGZ0KCksbDMpLEUpfWlmKHc9ZS5vLGY9ZS5hLHIpZi5hPXIuYSxmLmI9ci5iLGUuZD0hMDtlbHNlIGlmKHQhPVoxJiZ0IT1XYiYmZyE9UGMpc3dpdGNoKGcuZyl7Y2FzZSAxOmYuYT13LmEvMjticmVhaztjYXNlIDI6Zi5hPXcuYSxmLmI9dy5iLzI7YnJlYWs7Y2FzZSAzOmYuYT13LmEvMixmLmI9dy5iO2JyZWFrO2Nhc2UgNDpmLmI9dy5iLzJ9ZWxzZSBmLmE9dy5hLzIsZi5iPXcuYi8yfWZ1bmN0aW9uIHRMKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDO2lmKGUuUGooKSlpZihDPWUuRWooKSx3PWUuUWooKSxDPjApaWYodD1uZXcgVDdlKGUucGooKSksbj1DLG89bjwxMDA/bnVsbDpuZXcgbmIobiksQU8oZSxuLHQuZyksYT1uPT0xP2UuSWooNCxPZSh0LDApLG51bGwsMCx3KTplLklqKDYsdCxudWxsLC0xLHcpLGUuTWooKSl7Zm9yKHI9bmV3IG9yKHQpO3IuZSE9ci5pLmdjKCk7KW89ZS5PaihncihyKSxvKTtvPyhvLm5qKGEpLG8ub2ooKSk6ZS5KaihhKX1lbHNlIG8/KG8ubmooYSksby5vaigpKTplLkpqKGEpO2Vsc2UgQU8oZSxlLkVqKCksZS5GaigpKSxlLkpqKGUuSWooNiwoQ24oKSxfbyksbnVsbCwtMSx3KSk7ZWxzZSBpZihlLk1qKCkpaWYoQz1lLkVqKCksQz4wKXtmb3IoZz1lLkZqKCksRT1DLEFPKGUsQyxnKSxvPUU8MTAwP251bGw6bmV3IG5iKEUpLHI9MDtyPEU7KytyKWY9Z1tyXSxvPWUuT2ooZixvKTtvJiZvLm9qKCl9ZWxzZSBBTyhlLGUuRWooKSxlLkZqKCkpO2Vsc2UgQU8oZSxlLkVqKCksZS5GaigpKX1mdW5jdGlvbiBYTG4oZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2ZvcihnPVdlKE5hLFpvLDI4LGUuYy5sZW5ndGgsMTUsMSksQj1uZXcgZ0gobmV3IG5rKSxjeGUoQixlKSxFPTAsSj1uZXcgYnQ7Qi5iLmMubGVuZ3RoIT0wOylpZihmPWwoQi5iLmMubGVuZ3RoPT0wP251bGw6anQoQi5iLDApLDE2MyksRT4xJiZ3bChmKSpnaChmKS8yPmdbMF0pe2ZvcihvPTA7bzxKLmMubGVuZ3RoLTEmJndsKGYpKmdoKGYpLzI+Z1tvXTspKytvO1Y9bmV3IFpwKEosMCxvKzEpLEw9bmV3IGhWKFYpLEM9d2woZikvZ2goZiksdz1MbGUoTCx0LG5ldyBBOCxuLHIsYSxDKSxPaShZMChMLmUpLHcpLEs4KCRFKEIsTCksYVQpLHo9bmV3IFpwKEosbysxLEouYy5sZW5ndGgpLGN4ZShCLHopLEouYy5sZW5ndGg9MCxFPTAsZ3N0KGcsZy5sZW5ndGgsMCl9ZWxzZSB0ZT1CLmIuYy5sZW5ndGg9PTA/bnVsbDpqdChCLmIsMCksdGUhPW51bGwmJnJjZShCLDApLEU+MCYmKGdbRV09Z1tFLTFdKSxnW0VdKz13bChmKSpnaChmKSwrK0UsJG4oSi5jLGYpO3JldHVybiBKfWZ1bmN0aW9uIFFMbihlLHQpe3ZhciBuLHIsYSxvO249dC5iLG89bmV3IE9sKG4uaiksYT0wLHI9bi5qLHIuYy5sZW5ndGg9MCxtdyhsKHptKGUuYiwoQ3QoKSxRbiksKE93KCksbzMpKSwxNSksbiksYT16TihvLGEsbmV3IEd2LHIpLG13KGwoem0oZS5iLFFuLFJiKSwxNSksbiksYT16TihvLGEsbmV3IGJlZSxyKSxtdyhsKHptKGUuYixRbixhMyksMTUpLG4pLG13KGwoem0oZS5iLGFyLG8zKSwxNSksbiksbXcobCh6bShlLmIsYXIsUmIpLDE1KSxuKSxhPXpOKG8sYSxuZXcgJGosciksbXcobCh6bShlLmIsYXIsYTMpLDE1KSxuKSxtdyhsKHptKGUuYixEcixvMyksMTUpLG4pLGE9ek4obyxhLG5ldyB6aixyKSxtdyhsKHptKGUuYixEcixSYiksMTUpLG4pLGE9ek4obyxhLG5ldyBxaixyKSxtdyhsKHptKGUuYixEcixhMyksMTUpLG4pLG13KGwoem0oZS5iLGVyLG8zKSwxNSksbiksYT16TihvLGEsbmV3IEJqLHIpLG13KGwoem0oZS5iLGVyLFJiKSwxNSksbiksbXcobCh6bShlLmIsZXIsYTMpLDE1KSxuKX1mdW5jdGlvbiBKTG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7Zm9yKGc9bmV3IEcodCk7Zy5hPGcuYy5jLmxlbmd0aDspbz1sKHJlKGcpLDIzOSksby5lPW51bGwsby5jPTA7Zm9yKHc9bnVsbCxmPW5ldyBHKHQpO2YuYTxmLmMuYy5sZW5ndGg7KWlmKG89bChyZShmKSwyMzkpLEw9by5kWzBdLCEobiYmTC5rIT0oWm4oKSxQcykpKXtmb3Ioej1sKFEoTCwoZnQoKSxXeCkpLDE1KS5LYygpO3ouT2IoKTspQj1sKHouUGIoKSwxMCksKCFufHxCLms9PShabigpLFBzKSkmJigoIW8uZSYmKG8uZT1uZXcgYnQpLG8uZSkuRmMoZS5iW0IuYy5wXVtCLnBdKSwrK2UuYltCLmMucF1bQi5wXS5jKTtpZighbiYmTC5rPT0oWm4oKSxQcykpe2lmKHcpZm9yKEM9bCgkaShlLmQsdyksMjEpLktjKCk7Qy5PYigpOylmb3IoRT1sKEMuUGIoKSwxMCksYT1sKCRpKGUuZCxMKSwyMSkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTApLHJkbihlLmJbRS5jLnBdW0UucF0pLkZjKGUuYltyLmMucF1bci5wXSksKytlLmJbci5jLnBdW3IucF0uYzt3PUx9fX1mdW5jdGlvbiBaTG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2ZvcihuLlVnKCJNb2RlbCBvcmRlciBjeWNsZSBicmVha2luZyIsMSksZS5hPTAsZS5iPTAsej1uZXcgYnQsQz10LmEuYy5sZW5ndGgsRT1uZXcgRyh0LmEpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxMCksbnModywoZnQoKSxLaSkpJiYoQz1iLk1hdGgubWF4KEMsbChRKHcsS2kpLDE3KS5hKzEpKTtmb3IoSj1uZXcgRyh0LmEpO0ouYTxKLmMuYy5sZW5ndGg7KWZvcihWPWwocmUoSiksMTApLGY9VHB0KGUsVixDKSxCPVJ3KFYsKHFvKCksenUpKS5LYygpO0IuT2IoKTspZm9yKEw9bChCLlBiKCksMTIpLG89bmV3IEcoTC5nKTtvLmE8by5jLmMubGVuZ3RoOylyPWwocmUobyksMTgpLHRlPXIuZC5pLGc9VHB0KGUsdGUsQyksZzxmJiYkbih6LmMscik7Zm9yKGE9bmV3IEcoeik7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSxVdyhyLCEwKSxydCh0LChmdCgpLHlCKSwoSG4oKSwhMCkpO3ouYy5sZW5ndGg9MCxuLlZnKCl9ZnVuY3Rpb24gcHZ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtmb3IoZj10LmQsZz1uLmQ7Zi5hLWcuYT09MCYmZi5iLWcuYj09MDspdz0hMSxEZSh0LDI1MCkmJkRlKG4sMjUwKSYmIXc/KEU9bCh0LDI1MCkuYSxDPW1hKG5ldyBFbyhyN2UoRSkpLG43ZShFKSkscj0yLGE9bmV3IGx0KEMuYS9iLk1hdGguc3FydChDLmEqQy5hK0MuYipDLmIpKnIsLUMuYi9iLk1hdGguc3FydChDLmEqQy5hK0MuYipDLmIpKnIpLE9pKGYsYSksTD1sKG4sMjUwKS5hLEI9bWEobmV3IEVvKHI3ZShMKSksbjdlKEwpKSxyPUM9PUI/LTI6MixvPW5ldyBsdChCLmEvYi5NYXRoLnNxcnQoQi5hKkIuYStCLmIqQi5iKSpyLC0oQi5iL2IuTWF0aC5zcXJ0KEIuYSpCLmErQi5iKkIuYikpKnIpLE9pKGYsbyksdz0hMCk6KGYuYSs9SmwoZSwyNikqaUwrSmwoZSwyNykqc0wtLjUsZi5iKz1KbChlLDI2KSppTCtKbChlLDI3KSpzTC0uNSxnLmErPUpsKGUsMjYpKmlMK0psKGUsMjcpKnNMLS41LGcuYis9SmwoZSwyNikqaUwrSmwoZSwyNykqc0wtLjUpfWZ1bmN0aW9uIGVNbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKEU9RDluKHQpLEo9bChRKHQsKE50KCksSkwpKSwzMjIpLHRvKEUsbmV3IEl6KEopKSx0ZT1sKFEodCxUQiksMjk5KSx0byhFLG5ldyBPaWUodGUpKSxWPTAsQz1uZXcgYnQsbz1uZXcgbkEoRSk7by5hIT1vLmI7KWE9bChGVihvKSwzNiksX3Z0KGUuYyxhKSxCPWwoUShhLChmdCgpLEsxZSkpLDE1KSxWKz1CLmdjKCkscj1CLktjKCksdnQoQyxuZXcgY2EoYSxyKSk7Zm9yKG4uVWcoIlJlY3Vyc2l2ZSBoaWVyYXJjaGljYWwgbGF5b3V0IixWKSx6PWwobChqdChDLEMuYy5sZW5ndGgtMSksNDIpLmIsNTEpO3ouT2IoKTspZm9yKHc9bmV3IEcoQyk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGc9bChyZSh3KSw0MiksQj1sKGcuYiw1MSksZj1sKGcuYSwzNik7Qi5PYigpOylpZihMPWwoQi5QYigpLDQ3KSxEZShMLDUxNCkpe2lmKGYuZSlicmVhaztMLktmKGYsbi5laCgxKSk7YnJlYWt9ZWxzZSBMLktmKGYsbi5laCgxKSk7bi5WZygpfWZ1bmN0aW9uIHRNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEo7Zm9yKHQuVWcoIkxheWVyIHNpemUgY2FsY3VsYXRpb24iLDEpLEM9Z3MsRT1pYSxhPSExLGc9bmV3IEcoZS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylpZihmPWwocmUoZyksMzApLHc9Zi5jLHcuYT0wLHcuYj0wLGYuYS5jLmxlbmd0aCE9MCl7Zm9yKGE9ITAsQj1uZXcgRyhmLmEpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMCksVj1MLm8sej1MLmQsdy5hPWIuTWF0aC5tYXgody5hLFYuYSt6LmIrei5jKTtyPWwoanQoZi5hLDApLDEwKSxKPXIubi5iLXIuZC5kLHIuaz09KFpuKCksVXMpJiYoSi09bChRKGUsKE50KCksX0IpKSwxNDApLmQpLG89bChqdChmLmEsZi5hLmMubGVuZ3RoLTEpLDEwKSxuPW8ubi5iK28uby5iK28uZC5hLG8uaz09VXMmJihuKz1sKFEoZSwoTnQoKSxfQikpLDE0MCkuYSksdy5iPW4tSixDPWIuTWF0aC5taW4oQyxKKSxFPWIuTWF0aC5tYXgoRSxuKX1hfHwoQz0wLEU9MCksZS5mLmI9RS1DLGUuYy5iLT1DLHQuVmcoKX1mdW5jdGlvbiBPa2UoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2ZvcihvPTAsZj0wLEU9bmV3IEcoZS5hKTtFLmE8RS5jLmMubGVuZ3RoOylnPWwocmUoRSksMTApLG89Yi5NYXRoLm1heChvLGcuZC5iKSxmPWIuTWF0aC5tYXgoZixnLmQuYyk7Zm9yKHc9bmV3IEcoZS5hKTt3LmE8dy5jLmMubGVuZ3RoOyl7c3dpdGNoKGc9bChyZSh3KSwxMCksbj1sKFEoZywoTnQoKSxSZCkpLDI1NSksbi5nKXtjYXNlIDE6Vj0wO2JyZWFrO2Nhc2UgMjpWPTE7YnJlYWs7Y2FzZSA1OlY9LjU7YnJlYWs7ZGVmYXVsdDpmb3Iocj0wLEw9MCx6PW5ldyBHKGcuaik7ei5hPHouYy5jLmxlbmd0aDspQj1sKHJlKHopLDEyKSxCLmUuYy5sZW5ndGg9PTB8fCsrcixCLmcuYy5sZW5ndGg9PTB8fCsrTDtyK0w9PTA/Vj0uNTpWPUwvKHIrTCl9dGU9ZS5jLEM9Zy5vLmEsZmU9KHRlLmEtQykqVixWPi41P2ZlLT1mKjIqKFYtLjUpOlY8LjUmJihmZSs9byoyKiguNS1WKSksYT1nLmQuYixmZTxhJiYoZmU9YSksSj1nLmQuYyxmZT50ZS5hLUotQyYmKGZlPXRlLmEtSi1DKSxnLm4uYT10K2ZlfX1mdW5jdGlvbiBuTW4oZSl7dmFyIHQsbixyLGEsbztpZihyPWwoUShlLChOdCgpLFF1KSksMTcxKSxyPT0oaGYoKSwkYikpe2ZvcihuPW5ldyBocihkcihrYShlKS5hLktjKCksbmV3IGopKTtqcihuKTspaWYodD1sKHhyKG4pLDE4KSwhQXV0KHQpKXRocm93IHVlKG5ldyBWcChqaGUrSE4oZSkrIicgaGFzIGl0cyBsYXllciBjb25zdHJhaW50IHNldCB0byBGSVJTVF9TRVBBUkFURSwgYnV0IGhhcyBhdCBsZWFzdCBvbmUgaW5jb21pbmcgZWRnZS4gRklSU1RfU0VQQVJBVEUgbm9kZXMgbXVzdCBub3QgaGF2ZSBpbmNvbWluZyBlZGdlcy4iKSl9ZWxzZSBpZihyPT1kNCl7Zm9yKG89bmV3IGhyKGRyKHFzKGUpLmEuS2MoKSxuZXcgaikpO2pyKG8pOylpZihhPWwoeHIobyksMTgpLCFBdXQoYSkpdGhyb3cgdWUobmV3IFZwKGpoZStITihlKSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIExBU1RfU0VQQVJBVEUsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIG91dGdvaW5nIGVkZ2UuIExBU1RfU0VQQVJBVEUgbm9kZXMgbXVzdCBub3QgaGF2ZSBvdXRnb2luZyBlZGdlcy4iKSl9fWZ1bmN0aW9uIGJQKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7aWYoZS5lJiZlLmMuYzxlLmYpdGhyb3cgdWUobmV3IG5jKCJFeHBlY3RlZCAiK2UuZisiIHBoYXNlcyB0byBiZSBjb25maWd1cmVkOyBvbmx5IGZvdW5kICIrZS5jLmMpKTtmb3IoQz1sKEswKGUuZyksOSksej1lZyhlLmYpLG89QyxnPTAsRT1vLmxlbmd0aDtnPEU7KytnKXI9b1tnXSxMPWwoaE4oZSxyLmcpLDE4OCksTD92dCh6LGwoazF0KGUsTCksMTA2KSk6ei5jLnB1c2gobnVsbCk7Zm9yKFY9bmV3IFhzLElzKEZpKGZjKEZpKG5ldyBibihudWxsLG5ldyBrbih6LDE2KSksbmV3IFJwKSxuZXcgQVhlKHQpKSxuZXcgdTgpLG5ldyBMWGUoVikpLERoKFYsZS5hKSxuPW5ldyBidCxhPUMsZj0wLHc9YS5sZW5ndGg7Zjx3OysrZilyPWFbZl0scmEobixyMHQoZSxMSChsKGhOKFYsci5nKSwyMCkpKSksQj1sKGp0KHosci5nKSwxMDYpLEImJiRuKG4uYyxCKTtyZXR1cm4gcmEobixyMHQoZSxMSChsKGhOKFYsQ1tDLmxlbmd0aC0xXS5nKzEpLDIwKSkpKSxufWZ1bmN0aW9uIHJNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7Zm9yKEI9bmV3IGJ0LGE9bmV3IGJ0LEo9bnVsbCxnPXQuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTcpLG89bmV3IEJZZShmLmEpLCRuKGEuYyxvKSxKJiYoby5kPUosSi5lPW8pLEo9bztmb3IoTWU9TUFuKGUpLEM9MDtDPGEuYy5sZW5ndGg7KytDKXtmb3Ioej1udWxsLHRlPV82ZSgoU24oMCxhLmMubGVuZ3RoKSxsKGEuY1swXSw2NjEpKSksbj1udWxsLHI9Z3MsTD0xO0w8ZS5iLmMubGVuZ3RoOysrTClmZT10ZT9iLk1hdGguYWJzKHRlLmItTCk6Yi5NYXRoLmFicyhMLXouYikrMSxWPXo/Yi5NYXRoLmFicyhMLXouYik6ZmUrMSxWPGZlPyhFPXosdz1WKTooRT10ZSx3PWZlKSxUZT0oJGU9emUoR2UoUShlLChOdCgpLG9EZSkpKSksTWVbTF0rYi5NYXRoLnBvdyh3LCRlKSksVGU8ciYmKHI9VGUsbj1FLG4uYz1MKSx0ZSYmTD09dGUuYiYmKHo9dGUsdGU9ZmduKHRlKSk7biYmKHZ0KEIscHQobi5jKSksbi5hPSEwLFM0bihuKSl9cmV0dXJuIENuKCksTGFlKEIuYyxCLmMubGVuZ3RoLG51bGwpLEJ9ZnVuY3Rpb24gTmtlKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYodC5sPT0wJiZ0Lm09PTAmJnQuaD09MCl0aHJvdyB1ZShuZXcgcXooImRpdmlkZSBieSB6ZXJvIikpO2lmKGUubD09MCYmZS5tPT0wJiZlLmg9PTApcmV0dXJuIG4mJihOYj1xdSgwLDAsMCkpLHF1KDAsMCwwKTtpZih0Lmg9PVNQJiZ0Lm09PTAmJnQubD09MClyZXR1cm4gUTRuKGUsbik7aWYodz0hMSx0Lmg+PjE5JiYodD14RSh0KSx3PSF3KSxmPSRUbih0KSxvPSExLGE9ITEscj0hMSxlLmg9PVNQJiZlLm09PTAmJmUubD09MClpZihhPSEwLG89ITAsZj09LTEpZT1lbnQoKGlFKCksV1NlKSkscj0hMCx3PSF3O2Vsc2UgcmV0dXJuIGc9RDllKGUsZiksdyYmeWNlKGcpLG4mJihOYj1xdSgwLDAsMCkpLGc7ZWxzZSBlLmg+PjE5JiYobz0hMCxlPXhFKGUpLHI9ITAsdz0hdyk7cmV0dXJuIGYhPS0xP3B5bihlLGYsdyxvLG4pOmJ4ZShlLHQpPDA/KG4mJihvP05iPXhFKGUpOk5iPXF1KGUubCxlLm0sZS5oKSkscXUoMCwwLDApKTpSX24ocj9lOnF1KGUubCxlLm0sZS5oKSx0LHcsbyxhLG4pfWZ1bmN0aW9uIFRsZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKGY9ZS5lLHc9dC5lLGY9PTApcmV0dXJuIHQ7aWYodz09MClyZXR1cm4gZTtpZihvPWUuZCxnPXQuZCxvK2c9PTIpcmV0dXJuIG49dmEoZS5hWzBdLFZvKSxyPXZhKHQuYVswXSxWbyksZj09dz8oQz1ibyhuLHIpLFY9WXIoQyksej1Zcih1YihDLDMyKSksej09MD9uZXcgUWcoZixWKTpuZXcgSW0oZiwyLGhlKGxlKFZyLDEpLGRpLDI4LDE1LFtWLHpdKSkpOihDZCgpLEFxKGY8MD9EZihyLG4pOkRmKG4sciksMCk/a2IoZjwwP0RmKHIsbik6RGYobixyKSk6Sl8oa2IocjIoZjwwP0RmKHIsbik6RGYobixyKSkpKSk7aWYoZj09dylCPWYsTD1vPj1nP09vZShlLmEsbyx0LmEsZyk6T29lKHQuYSxnLGUuYSxvKTtlbHNle2lmKGE9byE9Zz9vPmc/MTotMTpXN2UoZS5hLHQuYSxvKSxhPT0wKXJldHVybiBDZCgpLEJMO2E9PTE/KEI9ZixMPURvZShlLmEsbyx0LmEsZykpOihCPXcsTD1Eb2UodC5hLGcsZS5hLG8pKX1yZXR1cm4gRT1uZXcgSW0oQixMLmxlbmd0aCxMKSxpQShFKSxFfWZ1bmN0aW9uIGlNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKCEoZS5nPnQuZnx8dC5nPmUuZikpe2ZvcihuPTAscj0wLGY9ZS53LmEuZWMoKS5LYygpO2YuT2IoKTspYT1sKGYuUGIoKSwxMiksSWNlKEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKS5iLHQuZyx0LmYpJiYrK247Zm9yKGc9ZS5yLmEuZWMoKS5LYygpO2cuT2IoKTspYT1sKGcuUGIoKSwxMiksSWNlKEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKS5iLHQuZyx0LmYpJiYtLW47Zm9yKHc9dC53LmEuZWMoKS5LYygpO3cuT2IoKTspYT1sKHcuUGIoKSwxMiksSWNlKEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKS5iLGUuZyxlLmYpJiYrK3I7Zm9yKG89dC5yLmEuZWMoKS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwxMiksSWNlKEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKS5iLGUuZyxlLmYpJiYtLXI7bjxyP25ldyBXSChlLHQsci1uKTpyPG4/bmV3IFdIKHQsZSxuLXIpOihuZXcgV0godCxlLDApLG5ldyBXSChlLHQsMCkpfX1mdW5jdGlvbiBzTW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO2ZvcihFPXQuYyxhPWR5ZShlLmUpLEw9bWQoel8oSmEoZnllKGUuZSkpLGUuZCplLmEsZS5jKmUuYiksLS41KSxuPWEuYS1MLmEscj1hLmItTC5iLGY9dC5hLG49Zi5jLW4scj1mLmQtcix3PW5ldyBHKEUpO3cuYTx3LmMuYy5sZW5ndGg7KXtzd2l0Y2goZz1sKHJlKHcpLDQwNyksQj1nLmIsej1uK0IuYSx0ZT1yK0IuYixWPXVhKHovZS5hKSxmZT11YSh0ZS9lLmIpLG89Zy5hLG8uZyl7Y2FzZSAwOkM9KGJ4KCksYUIpO2JyZWFrO2Nhc2UgMTpDPShieCgpLHNCKTticmVhaztjYXNlIDI6Qz0oYngoKSxvQik7YnJlYWs7ZGVmYXVsdDpDPShieCgpLGNCKX1vLmE/KFRlPXVhKCh0ZStnLmMpL2UuYiksdnQoZS5mLG5ldyBtNGUoQyxwdChmZSkscHQoVGUpKSksbz09KE5BKCksbEIpP3lFKGUsMCxmZSxWLFRlKTp5RShlLFYsZmUsZS5kLTEsVGUpKTooSj11YSgoeitnLmMpL2UuYSksdnQoZS5mLG5ldyBtNGUoQyxwdChWKSxwdChKKSkpLG89PShOQSgpLHVCKT95RShlLFYsMCxKLGZlKTp5RShlLFYsZmUsSixlLmMtMSkpfX1mdW5jdGlvbiBhTW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEM7Zm9yKHQ9bmV3IFNJLG49bmV3IFNJLEU9dm4oWFAsKGE9WUEoZS5iLGxpKSxhP2VpKG4xKCghYS5iJiYoYS5iPW5ldyBkaCgoVG4oKSxObyksWWMsYSkpLGEuYiksQmYpKTpudWxsKSksdz0wO3c8ZS5pOysrdylnPWwoZS5nW3ddLDE3OSksRGUoZywxMDIpPyhmPWwoZywxOSksZi5CYiZldT8oIShmLkJiJl9kKXx8IUUmJihvPVlBKGYsbGkpLChvP2VpKG4xKCghby5iJiYoby5iPW5ldyBkaCgoVG4oKSxObyksWWMsbykpLG8uYiksekcpKTpudWxsKT09bnVsbCkpJiZxcih0LGYpOihDPVJvKGYpLEMmJkMuQmImZXV8fCghKGYuQmImX2QpfHwhRSYmKHI9WUEoZixsaSksKHI/ZWkobjEoKCFyLmImJihyLmI9bmV3IGRoKChUbigpLE5vKSxZYyxyKSksci5iKSx6RykpOm51bGwpPT1udWxsKSkmJnFyKG4sZikpKTooRm8oKSxsKGcsNjkpLnhrKCkmJihnLnNrKCl8fChxcih0LGcpLHFyKG4sZykpKSk7SXkodCksSXkobiksZS5hPWwodC5nLDI1NCksbChuLmcsMjU0KX1mdW5jdGlvbiBnNihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2lmKG1zKHQsbik+PTApcmV0dXJuIG47c3dpdGNoKGt3KGljKGUsbikpKXtjYXNlIDI6e2lmKHZuKCIiLG8yKGUsbi5xaygpKS54ZSgpKSl7aWYodz1ITyhpYyhlLG4pKSxnPVdrKGljKGUsbikpLEM9UDllKGUsdCx3LGcpLEMpcmV0dXJuIEM7Zm9yKGE9aGtlKGUsdCksZj0wLEw9YS5nYygpO2Y8TDsrK2YpaWYoQz1sKGEuWGIoZiksMTc5KSxxOWUoJGFlKGljKGUsQykpLHcpKXJldHVybiBDfXJldHVybiBudWxsfWNhc2UgNDp7aWYodm4oIiIsbzIoZSxuLnFrKCkpLnhlKCkpKXtmb3Iocj1uO3I7cj12Ym4oaWMoZSxyKSkpaWYoRT1ITyhpYyhlLHIpKSxnPVdrKGljKGUscikpLEM9QjllKGUsdCxFLGcpLEMpcmV0dXJuIEM7aWYodz1ITyhpYyhlLG4pKSx2bihjdix3KSlyZXR1cm4geXhlKGUsdCk7Zm9yKG89YWxlKGUsdCksZj0wLEw9by5nYygpO2Y8TDsrK2YpaWYoQz1sKG8uWGIoZiksMTc5KSxxOWUoJGFlKGljKGUsQykpLHcpKXJldHVybiBDfXJldHVybiBudWxsfWRlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG9NbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztpZihuLmdjKCk9PTApcmV0dXJuITE7aWYoZz0oRm8oKSxsKHQsNjkpLnhrKCkpLG89Zz9uOm5ldyBMdyhuLmdjKCkpLHVwKGUuZSx0KSl7aWYodC5TaSgpKWZvcihFPW4uS2MoKTtFLk9iKCk7KXc9RS5QYigpLCRVKGUsdCx3LERlKHQsMTAyKSYmKGwodCwxOSkuQmImSW8pIT0wKXx8KGE9c2codCx3KSxvLkhjKGEpfHxvLkZjKGEpKTtlbHNlIGlmKCFnKWZvcihFPW4uS2MoKTtFLk9iKCk7KXc9RS5QYigpLGE9c2codCx3KSxvLkZjKGEpfWVsc2V7aWYobi5nYygpPjEpdGhyb3cgdWUobmV3IFluKFpQKSk7Zm9yKEM9V3UoZS5lLkRoKCksdCkscj1sKGUuZywxMjQpLGY9MDtmPGUuaTsrK2YpaWYoYT1yW2ZdLEMuYW0oYS5MaygpKSl7aWYobi5IYyhnP2E6YS5tZCgpKSlyZXR1cm4hMTtmb3IoRT1uLktjKCk7RS5PYigpOyl3PUUuUGIoKSxsKG42KGUsZixnP2wodyw3Nik6c2codCx3KSksNzYpO3JldHVybiEwfWd8fChhPXNnKHQsbi5LYygpLlBiKCkpLG8uRmMoYSkpfXJldHVybiBBcyhlLG8pfWZ1bmN0aW9uIGNNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztmb3IoQz1uZXcgb3MsZz0oRT1uZXcgZ2koZS5jKS5hLnZjKCkuS2MoKSxuZXcgZnMoRSkpO2cuYS5PYigpOylvPShhPWwoZy5hLlBiKCksNDQpLGwoYS5tZCgpLDQ2NykpLG8uYj09MCYmQ3MoQyxvLEMuYy5iLEMuYyk7Zm9yKDtDLmIhPTA7KWZvcihvPWwoQy5iPT0wP251bGw6KG1yKEMuYiE9MCksYWYoQyxDLmEuYSkpLDQ2Nyksby5hPT1udWxsJiYoby5hPTApLHI9bmV3IEcoby5kKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjYzKSxuLmIuYT09bnVsbD9uLmIuYT16ZShvLmEpK24uYTp0Lm89PShEMSgpLHd2KT9uLmIuYT1iLk1hdGgubWluKHplKG4uYi5hKSx6ZShvLmEpK24uYSk6bi5iLmE9Yi5NYXRoLm1heCh6ZShuLmIuYSksemUoby5hKStuLmEpLC0tbi5iLmIsbi5iLmI9PTAmJnVpKEMsbi5iKTtmb3IoZj0odz1uZXcgZ2koZS5jKS5hLnZjKCkuS2MoKSxuZXcgZnModykpO2YuYS5PYigpOylvPShhPWwoZi5hLlBiKCksNDQpLGwoYS5tZCgpLDQ2NykpLHQuaVtvLmMucF09by5hfWZ1bmN0aW9uIHVNbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihDPW4rdC5jLmMuYSx6PW5ldyBHKHQuaik7ei5hPHouYy5jLmxlbmd0aDspe2lmKEI9bChyZSh6KSwxMiksYT1JYyhoZShsZShFYSwxKSxkdCw4LDAsW0IuaS5uLEIubixCLmFdKSksdC5rPT0oWm4oKSxBdSkmJihnPWwoUShCLChmdCgpLHppKSksMTIpLGEuYT1JYyhoZShsZShFYSwxKSxkdCw4LDAsW2cuaS5uLGcubixnLmFdKSkuYSx0Lm4uYT1hLmEpLGY9bmV3IGx0KDAsYS5iKSxCLmo9PShDdCgpLGFyKSlmLmE9QztlbHNlIGlmKEIuaj09ZXIpZi5hPW47ZWxzZSBjb250aW51ZTtpZihWPWIuTWF0aC5hYnMoYS5hLWYuYSksIShWPD1yJiYhZThuKHQpKSlmb3Iobz1CLmcuYy5sZW5ndGgrQi5lLmMubGVuZ3RoPjEsRT1uZXcgTjEoQi5iKTtMYyhFLmEpfHxMYyhFLmIpOyl3PWwoTGMoRS5hKT9yZShFLmEpOnJlKEUuYiksMTgpLEw9dy5jPT1CP3cuZDp3LmMsYi5NYXRoLmFicyhJYyhoZShsZShFYSwxKSxkdCw4LDAsW0wuaS5uLEwubixMLmFdKSkuYi1mLmIpPjEmJlVDbihlLHcsZixvLEIpfX1mdW5jdGlvbiBsTW4oZSl7dmFyIHQsbixyLGEsbyxmO2lmKGE9bmV3IFVhKGUuZSwwKSxyPW5ldyBVYShlLmEsMCksZS5kKWZvcihuPTA7bjxlLmI7bisrKW1yKGEuYjxhLmQuZ2MoKSksYS5kLlhiKGEuYz1hLmIrKyk7ZWxzZSBmb3Iobj0wO248ZS5iLTE7bisrKW1yKGEuYjxhLmQuZ2MoKSksYS5kLlhiKGEuYz1hLmIrKykscGgoYSk7Zm9yKHQ9emUoKG1yKGEuYjxhLmQuZ2MoKSksR2UoYS5kLlhiKGEuYz1hLmIrKykpKSk7ZS5mLXQ+d2ZlOyl7Zm9yKG89dCxmPTA7Yi5NYXRoLmFicyh0LW8pPHdmZTspKytmLHQ9emUoKG1yKGEuYjxhLmQuZ2MoKSksR2UoYS5kLlhiKGEuYz1hLmIrKykpKSksbXIoci5iPHIuZC5nYygpKSxyLmQuWGIoci5jPXIuYisrKTtmPGUuYiYmKG1yKGEuYj4wKSxhLmEuWGIoYS5jPS0tYS5iKSxDQW4oZSxlLmItZixvLHIsYSksbXIoYS5iPGEuZC5nYygpKSxhLmQuWGIoYS5jPWEuYisrKSksbXIoci5iPjApLHIuYS5YYihyLmM9LS1yLmIpfWlmKCFlLmQpZm9yKG49MDtuPGUuYi0xO24rKyltcihhLmI8YS5kLmdjKCkpLGEuZC5YYihhLmM9YS5iKyspLHBoKGEpO2UuZD0hMCxlLmM9ITB9ZnVuY3Rpb24gR2koKXtHaT1VLFVQZT0odTNlKCksdHUpLmIsc0F0PWwoT2UodHQodHUuYiksMCksMzUpLFN2PWwoT2UodHQodHUuYiksMSksMzUpLGlBdD1sKE9lKHR0KHR1LmIpLDIpLDM1KSxjNz10dS5iYixsKE9lKHR0KHR1LmJiKSwwKSwzNSksbChPZSh0dCh0dS5iYiksMSksMzUpLHU3PXR1LmZiLEhNPWwoT2UodHQodHUuZmIpLDApLDM1KSxsKE9lKHR0KHR1LmZiKSwxKSwzNSksbChPZSh0dCh0dS5mYiksMiksMTkpLEMzPXR1LnFiLG1BdD1sKE9lKHR0KHR1LnFiKSwwKSwzNSksbChPZSh0dCh0dS5xYiksMSksMTkpLGwoT2UodHQodHUucWIpLDIpLDE5KSxiRj1sKE9lKHR0KHR1LnFiKSwzKSwzNSksbUY9bChPZSh0dCh0dS5xYiksNCksMzUpLFVNPWwoT2UodHQodHUucWIpLDYpLDM1KSxWTT1sKE9lKHR0KHR1LnFiKSw1KSwxOSksYUF0PXR1Lmosb0F0PXR1LmssY0F0PXR1LnEsdUF0PXR1LncsbEF0PXR1LkIsaEF0PXR1LkEsZkF0PXR1LkMsZEF0PXR1LkQsZ0F0PXR1Ll8scEF0PXR1LmNiLGJBdD10dS5oYn1mdW5jdGlvbiBoTW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7ZS5jPTAsZS5iPTAscj0yKnQuYy5hLmMubGVuZ3RoKzE7ZTpmb3IoTD1uLktjKCk7TC5PYigpOyl7aWYoQz1sKEwuUGIoKSwxMiksZz1DLmo9PShDdCgpLFFuKXx8Qy5qPT1Ecix6PTAsZyl7aWYoQj1sKFEoQywoZnQoKSxqbCkpLDEwKSwhQiljb250aW51ZTt6Kz1OU24oZSxyLEMsQil9ZWxzZXtmb3IoRT1uZXcgRyhDLmcpO0UuYTxFLmMuYy5sZW5ndGg7KWlmKHc9bChyZShFKSwxOCksYT13LmQsYS5pLmM9PXQuYyl7dnQoZS5hLEMpO2NvbnRpbnVlIGV9ZWxzZSB6Kz1lLmdbYS5wXTtmb3IoZj1uZXcgRyhDLmUpO2YuYTxmLmMuYy5sZW5ndGg7KWlmKG89bChyZShmKSwxOCksYT1vLmMsYS5pLmM9PXQuYyl7dnQoZS5hLEMpO2NvbnRpbnVlIGV9ZWxzZSB6LT1lLmdbYS5wXX1DLmUuYy5sZW5ndGgrQy5nLmMubGVuZ3RoPjA/KGUuZltDLnBdPXovKEMuZS5jLmxlbmd0aCtDLmcuYy5sZW5ndGgpLGUuYz1iLk1hdGgubWluKGUuYyxlLmZbQy5wXSksZS5iPWIuTWF0aC5tYXgoZS5iLGUuZltDLnBdKSk6ZyYmKGUuZltDLnBdPXopfX1mdW5jdGlvbiBmTW4oZSl7ZS5iPW51bGwsZS5iYj1udWxsLGUuZmI9bnVsbCxlLnFiPW51bGwsZS5hPW51bGwsZS5jPW51bGwsZS5kPW51bGwsZS5lPW51bGwsZS5mPW51bGwsZS5uPW51bGwsZS5NPW51bGwsZS5MPW51bGwsZS5RPW51bGwsZS5SPW51bGwsZS5LPW51bGwsZS5kYj1udWxsLGUuZWI9bnVsbCxlLmc9bnVsbCxlLmk9bnVsbCxlLmo9bnVsbCxlLms9bnVsbCxlLmdiPW51bGwsZS5vPW51bGwsZS5wPW51bGwsZS5xPW51bGwsZS5yPW51bGwsZS4kPW51bGwsZS5pYj1udWxsLGUuUz1udWxsLGUuVD1udWxsLGUudD1udWxsLGUucz1udWxsLGUudT1udWxsLGUudj1udWxsLGUudz1udWxsLGUuQj1udWxsLGUuQT1udWxsLGUuQz1udWxsLGUuRD1udWxsLGUuRj1udWxsLGUuRz1udWxsLGUuSD1udWxsLGUuST1udWxsLGUuSj1udWxsLGUuUD1udWxsLGUuWj1udWxsLGUuVT1udWxsLGUuVj1udWxsLGUuVz1udWxsLGUuWD1udWxsLGUuWT1udWxsLGUuXz1udWxsLGUuYWI9bnVsbCxlLmNiPW51bGwsZS5oYj1udWxsLGUubmI9bnVsbCxlLmxiPW51bGwsZS5tYj1udWxsLGUub2I9bnVsbCxlLnBiPW51bGwsZS5qYj1udWxsLGUua2I9bnVsbCxlLk49ITEsZS5PPSExfWZ1bmN0aW9uIGRNbihlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKG4uVWcoIkdyYXBoIHRyYW5zZm9ybWF0aW9uICgiK2UuYSsiKSIsMSksZj1fdyh0LmEpLG89bmV3IEcodC5iKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMzApLHJhKGYsYS5hKTtpZihyPWwoUSh0LChOdCgpLEFNZSkpLDQyOCkscj09KHBOKCksWEspKXN3aXRjaChsKFEodCxSaCksODgpLmcpe2Nhc2UgMjpzQSh0LGYpO2JyZWFrO2Nhc2UgMzpNQSh0LGYpO2JyZWFrO2Nhc2UgNDplLmE9PShkRSgpLGRCKT8oTUEodCxmKSx5b2UodCxmKSk6KHlvZSh0LGYpLE1BKHQsZikpfWVsc2UgaWYoZS5hPT0oZEUoKSxkQikpc3dpdGNoKGwoUSh0LFJoKSw4OCkuZyl7Y2FzZSAyOnNBKHQsZikseW9lKHQsZik7YnJlYWs7Y2FzZSAzOk1BKHQsZiksc0EodCxmKTticmVhaztjYXNlIDQ6c0EodCxmKSxNQSh0LGYpfWVsc2Ugc3dpdGNoKGwoUSh0LFJoKSw4OCkuZyl7Y2FzZSAyOnNBKHQsZikseW9lKHQsZik7YnJlYWs7Y2FzZSAzOnNBKHQsZiksTUEodCxmKTticmVhaztjYXNlIDQ6TUEodCxmKSxzQSh0LGYpfW4uVmcoKX1mdW5jdGlvbiBnTW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3Iobz1uZXcgRyhlLmEuYik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDg2KSxhLmIuYz1hLmcuYyxhLmIuZD1hLmcuZDtmb3Iodz1uZXcgbHQoZ3MsZ3MpLHQ9bmV3IGx0KGlhLGlhKSxyPW5ldyBHKGUuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksODYpLHcuYT1iLk1hdGgubWluKHcuYSxuLmcuYyksdy5iPWIuTWF0aC5taW4ody5iLG4uZy5kKSx0LmE9Yi5NYXRoLm1heCh0LmEsbi5nLmMrbi5nLmIpLHQuYj1iLk1hdGgubWF4KHQuYixuLmcuZCtuLmcuYSk7Zm9yKGc9dkgoZS5jKS5hLm5jKCk7Zy5PYigpOylmPWwoZy5QYigpLDQyKSxuPWwoZi5iLDg2KSx3LmE9Yi5NYXRoLm1pbih3LmEsbi5nLmMpLHcuYj1iLk1hdGgubWluKHcuYixuLmcuZCksdC5hPWIuTWF0aC5tYXgodC5hLG4uZy5jK24uZy5iKSx0LmI9Yi5NYXRoLm1heCh0LmIsbi5nLmQrbi5nLmEpO2UuZD1IcShuZXcgbHQody5hLHcuYikpLGUuZT1tYShuZXcgbHQodC5hLHQuYiksdyksZS5hLmEuYy5sZW5ndGg9MCxlLmEuYi5jLmxlbmd0aD0wfWZ1bmN0aW9uIHBNbihlKXtoQSgpO3ZhciB0LG4scixhLG8sZixnO2ZvcihnPW5ldyAkUWUsbj1uZXcgRyhlKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTQ4KSwoIWcuYnx8dC5jPj1nLmIuYykmJihnLmI9dCksKCFnLmN8fHQuYzw9Zy5jLmMpJiYoZy5kPWcuYyxnLmM9dCksKCFnLmV8fHQuZD49Zy5lLmQpJiYoZy5lPXQpLCghZy5mfHx0LmQ8PWcuZi5kKSYmKGcuZj10KTtyZXR1cm4gcj1uZXcgblUoKHdFKCksczMpKSxRTyhlLE04dCxuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW3JdKSkpLGY9bmV3IG5VKG80KSxRTyhlLEw4dCxuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW2ZdKSkpLGE9bmV3IG5VKGE0KSxRTyhlLEE4dCxuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW2FdKSkpLG89bmV3IG5VKE02KSxRTyhlLF84dCxuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW29dKSkpLFl1ZShyLmMsczMpLFl1ZShhLmMsYTQpLFl1ZShvLmMsTTYpLFl1ZShmLmMsbzQpLGcuYS5jLmxlbmd0aD0wLHJhKGcuYSxyLmMpLHJhKGcuYSxsZihhLmMpKSxyYShnLmEsby5jKSxyYShnLmEsbGYoZi5jKSksZ31mdW5jdGlvbiBiTW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IodC5VZyhBeXQsMSksej16ZShHZShhdChlLCh1ZygpLFQ0KSkpKSxmPXplKEdlKGF0KGUsKHoxKCksd00pKSkpLGc9bChhdChlLHZNKSwxMDcpLHY3ZSgoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpLEM9dXZ0KCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSx6LGYpLCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxFPW5ldyBHKEMpO0UuYTxFLmMuYy5sZW5ndGg7KWZvcih3PWwocmUoRSksMTg2KSxhPW5ldyBHKHcuYSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE3MiksQj1uZXcgejVlKHIucyxyLnQsemUoR2UoYXQoZSx3TSkpKSksQzdlKEIsciksdnQody5kLEIpO0w9c2d0KEMsZiksVj1iLk1hdGgubWF4KEwuYSx6ZShHZShhdChlLG1NKSkpLShnLmIrZy5jKSksbz1iLk1hdGgubWF4KEwuYix6ZShHZShhdChlLFVXKSkpLShnLmQrZy5hKSksbj1vLUwuYixIaShlLGJNLG4pLEhpKGUsWngsViksSGkoZSxaVCxvK24pLEhpKGUsR1csQyksdC5WZygpfWZ1bmN0aW9uIG1NbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEo7Zm9yKEU9bmV3IGJkLEM9bmV3IGJkLFY9bmV3IGJkLEo9bmV3IGJkLHc9emUoR2UoUSh0LChOdCgpLG0zKSkpKSxvPXplKEdlKFEodCx4MCkpKSxnPW5ldyBHKG4pO2cuYTxnLmMuYy5sZW5ndGg7KWlmKGY9bChyZShnKSwxMCksTD1sKFEoZiwoZnQoKSxXYykpLDY0KSxMPT0oQ3QoKSxRbikpZm9yKEMuYS56YyhmLEMpLGE9bmV3IGhyKGRyKGthKGYpLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLG5hKEUsci5jLmkpO2Vsc2UgaWYoTD09RHIpZm9yKEouYS56YyhmLEopLGE9bmV3IGhyKGRyKGthKGYpLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLG5hKFYsci5jLmkpO0UuYS5nYygpIT0wJiYoQj1uZXcgSGFlKDIsbyksej1Sa2UoQix0LEUsQywtdy10LmMuYiksej4wJiYoZS5hPXcrKHotMSkqbyx0LmMuYis9ZS5hLHQuZi5iKz1lLmEpKSxWLmEuZ2MoKSE9MCYmKEI9bmV3IEhhZSgxLG8pLHo9UmtlKEIsdCxWLEosdC5mLmIrdy10LmMuYiksej4wJiYodC5mLmIrPXcrKHotMSkqbykpfWZ1bmN0aW9uIGJ2dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7Zm9yKEM9emUoR2UoUShlLChOdCgpLGIzKSkpKSxyPXplKEdlKFEoZSxyRGUpKSksQj1uZXcgRUkscnQoQixiMyxDK3IpLEU9dCxmZT1FLmQsSj1FLmMuaSxUZT1FLmQuaSx0ZT1veWUoSi5jKSxNZT1veWUoVGUuYyksYT1uZXcgYnQsTD10ZTtMPD1NZTtMKyspZz1uZXcgb3AoZSkseChnLChabigpLEFhKSkscnQoZywoZnQoKSx6aSksRSkscnQoZyxNcywoUmEoKSxNdSkpLHJ0KGcsa1csQiksej1sKGp0KGUuYixMKSwzMCksTD09dGU/RnkoZyx6LmEuYy5sZW5ndGgtbix6KTpWYShnLHopLCRlPXplKEdlKFEoRSx4MikpKSwkZTwwJiYoJGU9MCxydChFLHgyLCRlKSksZy5vLmI9JGUsVj1iLk1hdGguZmxvb3IoJGUvMiksZj1uZXcgZ3UsbGEoZiwoQ3QoKSxlcikpLE1jKGYsZyksZi5uLmI9Vix3PW5ldyBndSxsYSh3LGFyKSxNYyh3LGcpLHcubi5iPVYsRmEoRSxmKSxvPW5ldyBUdyxwYyhvLEUpLHJ0KG8sY2MsbnVsbCkscG8obyx3KSxGYShvLGZlKSxzOG4oZyxFLG8pLCRuKGEuYyxvKSxFPW87cmV0dXJuIGF9ZnVuY3Rpb24gQ2xlKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZTtmb3Iodz1sKGQyKGUsKEN0KCksZXIpKS5LYygpLlBiKCksMTIpLmUsej1sKGQyKGUsYXIpLktjKCkuUGIoKSwxMikuZyxnPXcuYy5sZW5ndGgsTWU9STEobChqdChlLmosMCksMTIpKTtnLS0gPjA7KXtmb3IoSj0oU24oMCx3LmMubGVuZ3RoKSxsKHcuY1swXSwxOCkpLGE9KFNuKDAsei5jLmxlbmd0aCksbCh6LmNbMF0sMTgpKSxUZT1hLmQuZSxvPWdjKFRlLGEsMCksJGJuKEosYS5kLG8pLHBvKGEsbnVsbCksRmEoYSxudWxsKSxWPUouYSx0JiZ1aShWLG5ldyBFbyhNZSkpLHI9UnIoYS5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw4KSx1aShWLG5ldyBFbyhuKSk7Zm9yKGZlPUouYixCPW5ldyBHKGEuYik7Qi5hPEIuYy5jLmxlbmd0aDspTD1sKHJlKEIpLDcyKSwkbihmZS5jLEwpO2lmKHRlPWwoUShKLChOdCgpLGNjKSksNzUpLGY9bChRKGEsY2MpLDc1KSxmKWZvcih0ZXx8KHRlPW5ldyBibCxydChKLGNjLHRlKSksQz1ScihmLDApO0MuYiE9Qy5kLmM7KUU9bChCcihDKSw4KSx1aSh0ZSxuZXcgRW8oRSkpfX1mdW5jdGlvbiB2TW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2lmKEo9dC5iLmMubGVuZ3RoLCEoSjwzKSl7Zm9yKHo9V2UoVnIsZGksMjgsSiwxNSwxKSxMPTAsQz1uZXcgRyh0LmIpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSwzMCkseltMKytdPUUuYS5jLmxlbmd0aDtmb3IoQj1uZXcgVWEodC5iLDIpLHI9MTtyPEotMTtyKyspZm9yKG49KG1yKEIuYjxCLmQuZ2MoKSksbChCLmQuWGIoQi5jPUIuYisrKSwzMCkpLFY9bmV3IEcobi5hKSxvPTAsZz0wLHc9MDt3PHpbcisxXTt3KyspaWYoTWU9bChyZShWKSwxMCksdz09eltyKzFdLTF8fFp4ZShlLE1lLHIrMSxyKSl7Zm9yKGY9eltyXS0xLFp4ZShlLE1lLHIrMSxyKSYmKGY9ZS5jLmVbbChsKGwoanQoZS5jLmIsTWUucCksMTUpLlhiKDApLDQyKS5hLDEwKS5wXSk7Zzw9dzspe2lmKFRlPWwoanQobi5hLGcpLDEwKSwhWnhlKGUsVGUscisxLHIpKWZvcihmZT1sKGp0KGUuYy5iLFRlLnApLDE1KS5LYygpO2ZlLk9iKCk7KXRlPWwoZmUuUGIoKSw0MiksYT1lLmMuZVtsKHRlLmEsMTApLnBdLChhPG98fGE+ZikmJm5hKGUuYixsKHRlLmIsMTgpKTsrK2d9bz1mfX19ZnVuY3Rpb24gUGtlKGUsdCl7dmFyIG47aWYodD09bnVsbHx8dm4odCx1bCl8fHQubGVuZ3RoPT0wJiZlLmshPShnMigpLHQ5KSlyZXR1cm4gbnVsbDtzd2l0Y2goZS5rLmcpe2Nhc2UgMTpyZXR1cm4gUVYodCx3VCk/KEhuKCksU1QpOlFWKHQsRmZlKT8oSG4oKSxQYik6bnVsbDtjYXNlIDI6dHJ5e3JldHVybiBwdChPaCh0LGxvLElpKSl9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDEzMCkpcmV0dXJuIG51bGw7dGhyb3cgdWUocil9Y2FzZSA0OnRyeXtyZXR1cm4gankodCl9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDEzMCkpcmV0dXJuIG51bGw7dGhyb3cgdWUocil9Y2FzZSAzOnJldHVybiB0O2Nhc2UgNTpyZXR1cm4gRjB0KGUpLFhwdChlLHQpO2Nhc2UgNjpyZXR1cm4gRjB0KGUpLG1UbihlLGUuYSx0KTtjYXNlIDc6dHJ5e3JldHVybiBuPUFFbihlKSxuLmNnKHQpLG59Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDMzKSlyZXR1cm4gbnVsbDt0aHJvdyB1ZShyKX1kZWZhdWx0OnRocm93IHVlKG5ldyBuYygiSW52YWxpZCB0eXBlIHNldCBmb3IgdGhpcyBsYXlvdXQgb3B0aW9uLiIpKX19ZnVuY3Rpb24gQmtlKGUpe3ZhciB0O3N3aXRjaChlLmQpe2Nhc2UgMTp7aWYoZS5TaigpKXJldHVybiBlLm8hPS0yO2JyZWFrfWNhc2UgMjp7aWYoZS5TaigpKXJldHVybiBlLm89PS0yO2JyZWFrfWNhc2UgMzpjYXNlIDU6Y2FzZSA0OmNhc2UgNjpjYXNlIDc6cmV0dXJuIGUubz4tMjtkZWZhdWx0OnJldHVybiExfXN3aXRjaCh0PWUuUmooKSxlLnApe2Nhc2UgMDpyZXR1cm4gdCE9bnVsbCYmUnQoQnQodCkpIT1JXyhlLmssMCk7Y2FzZSAxOnJldHVybiB0IT1udWxsJiZsKHQsMjIyKS5hIT1ZcihlLmspPDwyND4+MjQ7Y2FzZSAyOnJldHVybiB0IT1udWxsJiZsKHQsMTgwKS5hIT0oWXIoZS5rKSZacyk7Y2FzZSA2OnJldHVybiB0IT1udWxsJiZJXyhsKHQsMTY4KS5hLGUuayk7Y2FzZSA1OnJldHVybiB0IT1udWxsJiZsKHQsMTcpLmEhPVlyKGUuayk7Y2FzZSA3OnJldHVybiB0IT1udWxsJiZsKHQsMTkxKS5hIT1ZcihlLmspPDwxNj4+MTY7Y2FzZSAzOnJldHVybiB0IT1udWxsJiZ6ZShHZSh0KSkhPWUuajtjYXNlIDQ6cmV0dXJuIHQhPW51bGwmJmwodCwxNjEpLmEhPWUuajtkZWZhdWx0OnJldHVybiB0PT1udWxsP2UubiE9bnVsbDohUGkodCxlLm4pfX1mdW5jdGlvbiBtUChlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIGUub2woKSYmZS5ubCgpJiYoZj1GYWUoZSxsKG4sNTgpKSxxZShmKSE9PXFlKG4pKT8oZS54aih0KSxlLkRqKHQseWx0KGUsdCxmKSksZS5hbCgpJiYobz0oYT1sKG4sNTQpLGUubWwoKT9lLmtsKCk/YS5UaChlLmIsUm8obChNbihzbChlLmIpLGUuTGooKSksMTkpKS5uLGwoTW4oc2woZS5iKSxlLkxqKCkpLkhrKCksMjkpLmtrKCksbnVsbCk6YS5UaChlLmIsbXMoYS5EaCgpLFJvKGwoTW4oc2woZS5iKSxlLkxqKCkpLDE5KSkpLG51bGwsbnVsbCk6YS5UaChlLmIsLTEtZS5MaigpLG51bGwsbnVsbCkpLCFsKGYsNTQpLlBoKCkmJihvPShyPWwoZiw1NCksZS5tbCgpP2Uua2woKT9yLlJoKGUuYixSbyhsKE1uKHNsKGUuYiksZS5MaigpKSwxOSkpLm4sbChNbihzbChlLmIpLGUuTGooKSkuSGsoKSwyOSkua2soKSxvKTpyLlJoKGUuYixtcyhyLkRoKCksUm8obChNbihzbChlLmIpLGUuTGooKSksMTkpKSksbnVsbCxvKTpyLlJoKGUuYiwtMS1lLkxqKCksbnVsbCxvKSkpLG8mJm8ub2ooKSksaGgoZS5iKSYmZS5KaihlLklqKDksbixmLHQsITEpKSxmKTpufWZ1bmN0aW9uIG12dChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQztmb3Iocj1uZXcgYnQsZj1uZXcgRyhlLmUuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2ZvcihhPWwocmUoZiksMTI1KSxDPTAsYS5rLmMubGVuZ3RoPTAsbj1uZXcgRyhaNShhKSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDIxOCksdC5mJiYodnQoYS5rLHQpLCsrQyk7Qz09MSYmJG4oci5jLGEpfWZvcihvPW5ldyBHKHIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihhPWwocmUobyksMTI1KTthLmsuYy5sZW5ndGg9PTE7KXtmb3IoRT1sKHJlKG5ldyBHKGEuaykpLDIxOCksZS5iW0UuY109RS5nLGc9RS5kLHc9RS5lLG49bmV3IEcoWjUoYSkpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyMTgpLFBpKHQsRSl8fCh0LmY/Zz09dC5kfHx3PT10LmU/ZS5iW0UuY10tPWUuYlt0LmNdLXQuZzplLmJbRS5jXSs9ZS5iW3QuY10tdC5nOmE9PWc/dC5kPT1hP2UuYltFLmNdKz10Lmc6ZS5iW0UuY10tPXQuZzp0LmQ9PWE/ZS5iW0UuY10tPXQuZzplLmJbRS5jXSs9dC5nKTthbChnLmssRSksYWwody5rLEUpLGc9PWE/YT1FLmU6YT1FLmR9fWZ1bmN0aW9uIHZ2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtpZihuPWwoUW8oZS5iLHQpLDEyNyksdz1sKGwoJGkoZS5yLHQpLDIxKSw4Nyksdy5kYygpKXtuLm4uYj0wLG4ubi5jPTA7cmV0dXJufWZvcihFPWUudS5IYygoUmwoKSx2cCkpLGY9MCxnPXcuS2MoKSxDPW51bGwsTD0wLEI9MDtnLk9iKCk7KXI9bChnLlBiKCksMTE3KSxhPXplKEdlKHIuYi5vZigoenEoKSxwSykpKSksbz1yLmIuTWYoKS5hLGUuQS5IYygobWgoKSxDdikpJiZLYnQoZSx0KSxDPyh6PUIrQy5kLmMrZS53K3IuZC5iLGY9Yi5NYXRoLm1heChmLChBMSgpLGYwKEgxKSxiLk1hdGguYWJzKEwtYSk8PUgxfHxMPT1hfHxpc05hTihMKSYmaXNOYU4oYSk/MDp6LyhhLUwpKSkpOmUuQyYmZS5DLmI+MCYmKGY9Yi5NYXRoLm1heChmLGtmdChlLkMuYityLmQuYixhKSkpLEM9cixMPWEsQj1vO2UuQyYmZS5DLmM+MCYmKHo9QitlLkMuYyxFJiYoeis9Qy5kLmMpLGY9Yi5NYXRoLm1heChmLChBMSgpLGYwKEgxKSxiLk1hdGguYWJzKEwtMSk8PUgxfHxMPT0xfHxpc05hTihMKSYmaXNOYU4oMSk/MDp6LygxLUwpKSkpLG4ubi5iPTAsbi5hLmE9Zn1mdW5jdGlvbiB3dnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYobj1sKFFvKGUuYix0KSwxMjcpLHc9bChsKCRpKGUucix0KSwyMSksODcpLHcuZGMoKSl7bi5uLmQ9MCxuLm4uYT0wO3JldHVybn1mb3IoRT1lLnUuSGMoKFJsKCksdnApKSxmPTAsZS5BLkhjKChtaCgpLEN2KSkmJldidChlLHQpLGc9dy5LYygpLEM9bnVsbCxCPTAsTD0wO2cuT2IoKTspcj1sKGcuUGIoKSwxMTcpLG89emUoR2Uoci5iLm9mKCh6cSgpLHBLKSkpKSxhPXIuYi5NZigpLmIsQz8oej1MK0MuZC5hK2UudytyLmQuZCxmPWIuTWF0aC5tYXgoZiwoQTEoKSxmMChIMSksYi5NYXRoLmFicyhCLW8pPD1IMXx8Qj09b3x8aXNOYU4oQikmJmlzTmFOKG8pPzA6ei8oby1CKSkpKTplLkMmJmUuQy5kPjAmJihmPWIuTWF0aC5tYXgoZixrZnQoZS5DLmQrci5kLmQsbykpKSxDPXIsQj1vLEw9YTtlLkMmJmUuQy5hPjAmJih6PUwrZS5DLmEsRSYmKHorPUMuZC5hKSxmPWIuTWF0aC5tYXgoZiwoQTEoKSxmMChIMSksYi5NYXRoLmFicyhCLTEpPD1IMXx8Qj09MXx8aXNOYU4oQikmJmlzTmFOKDEpPzA6ei8oMS1CKSkpKSxuLm4uZD0wLG4uYS5iPWZ9ZnVuY3Rpb24gd01uKGUsdCxuLHIsYSxvLGYsZyl7dmFyIHcsRSxDLEwsQix6LFYsSix0ZSxmZTtpZihWPSExLEU9SDllKG4ucSx0LmYrdC5iLW4ucS5mKSx6PXIuZj50LmImJmcsZmU9YS0obi5xLmUrRS1mKSxMPSh3PVpBKHIsZmUsITEpLHcuYSkseiYmTD5yLmYpcmV0dXJuITE7aWYoeil7Zm9yKEI9MCx0ZT1uZXcgRyh0LmQpO3RlLmE8dGUuYy5jLmxlbmd0aDspSj1sKHJlKHRlKSwzMTUpLEIrPUg5ZShKLHIuZikrZjtmZT1hLUJ9cmV0dXJuIGZlPHIuZ3x8KEM9bz09ZS5jLmxlbmd0aC0xJiZmZT49KFNuKG8sZS5jLmxlbmd0aCksbChlLmNbb10sMTg2KSkuZSwheiYmTD50LmImJiFDKT8hMTooKEN8fHp8fEw8PXQuYikmJihDJiZMPnQuYj8obi5kPUwsYU4obixzcHQobixMKSkpOihFZ3Qobi5xLEUpLG4uYz0hMCksYU4ocixhLShuLnMrbi5yKSkscU4ocixuLnEuZStuLnEuZCx0LmYpLGJWKHQsciksZS5jLmxlbmd0aD5vJiYoVU4oKFNuKG8sZS5jLmxlbmd0aCksbChlLmNbb10sMTg2KSksciksKFNuKG8sZS5jLmxlbmd0aCksbChlLmNbb10sMTg2KSkuYS5jLmxlbmd0aD09MCYmdDIoZSxvKSksVj0hMCksVil9ZnVuY3Rpb24geXZ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKHRoaXMuZz1lLGc9dC5kLmxlbmd0aCx3PW4uZC5sZW5ndGgsdGhpcy5kPVdlKHdnLG0yLDEwLGcrdywwLDEpLGY9MDtmPGc7ZisrKXRoaXMuZFtmXT10LmRbZl07Zm9yKG89MDtvPHc7bysrKXRoaXMuZFtnK29dPW4uZFtvXTtpZih0LmUpe2lmKHRoaXMuZT1QTyh0LmUpLHRoaXMuZS5NYyhuKSxuLmUpZm9yKGE9bi5lLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDIzOSksciE9dCYmKHRoaXMuZS5IYyhyKT8tLXIuYzp0aGlzLmUuRmMocikpfWVsc2Ugbi5lJiYodGhpcy5lPVBPKG4uZSksdGhpcy5lLk1jKHQpKTt0aGlzLmY9dC5mK24uZix0aGlzLmE9dC5hK24uYSx0aGlzLmE+MD9Yb2UodGhpcyx0aGlzLmYvdGhpcy5hKTpMMSh0LmcsdC5kWzBdKS5hIT1udWxsJiZMMShuLmcsbi5kWzBdKS5hIT1udWxsP1hvZSh0aGlzLCh6ZShMMSh0LmcsdC5kWzBdKS5hKSt6ZShMMShuLmcsbi5kWzBdKS5hKSkvMik6TDEodC5nLHQuZFswXSkuYSE9bnVsbD9Yb2UodGhpcyxMMSh0LmcsdC5kWzBdKS5hKTpMMShuLmcsbi5kWzBdKS5hIT1udWxsJiZYb2UodGhpcyxMMShuLmcsbi5kWzBdKS5hKX1mdW5jdGlvbiB5TW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoZS5hPW5ldyBac3QobnluKExNKSkscj1uZXcgRyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KXtmb3Iobj1sKHJlKHIpLDg1NSksZz1uZXcgUWNlKGhlKGxlKHIxZSwxKSxSbiw4NiwwLFtdKSksdnQoZS5hLmEsZyksRT1uZXcgRyhuLmQpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxMTYpLEM9bmV3IFB5ZShlLHcpLGprZShDLGwoUShuLmMsKGZ0KCkscHApKSwyMSkpLEh1KGUuZyxuKXx8KGtpKGUuZyxuLG5ldyBsdCh3LmMsdy5kKSksa2koZS5mLG4sQykpLHZ0KGUuYS5iLEMpLHdvZShnLEMpO2ZvcihmPW5ldyBHKG4uYik7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDYwMiksQz1uZXcgUHllKGUsby5EZigpKSxraShlLmIsbyxuZXcgY2EoZyxDKSksamtlKEMsbChRKG4uYywoZnQoKSxwcCkpLDIxKSksby5CZigpJiYoTD1uZXcgVThlKGUsby5CZigpLDEpLGprZShMLGwoUShuLmMscHApLDIxKSksYT1uZXcgUWNlKGhlKGxlKHIxZSwxKSxSbiw4NiwwLFtdKSksd29lKGEsTCkseG4oZS5jLG8uQWYoKSxuZXcgY2EoZyxMKSkpfXJldHVybiBlLmF9ZnVuY3Rpb24geHZ0KGUpe3ZhciB0O3RoaXMuYT1lLHQ9KFpuKCksaGUobGUobDFlLDEpLGl0LDI3MywwLFtQcyxBYSxVcyxBdSxjdSxLMV0pKS5sZW5ndGgsdGhpcy5iPUxtKENnZSxbZHQsb0NlXSxbNjAxLDE0OV0sMCxbdCx0XSwyKSx0aGlzLmM9TG0oQ2dlLFtkdCxvQ2VdLFs2MDEsMTQ5XSwwLFt0LHRdLDIpLGFvZSh0aGlzLFBzLChOdCgpLG0zKSxWNiksdkEodGhpcyxQcyxBYSxiMyx2diksVk8odGhpcyxQcyxBdSxiMyksVk8odGhpcyxQcyxVcyxiMyksdkEodGhpcyxQcyxjdSxtMyxWNiksYW9lKHRoaXMsQWEseDAscTYpLFZPKHRoaXMsQWEsQXUseDApLFZPKHRoaXMsQWEsVXMseDApLHZBKHRoaXMsQWEsY3UsYjMsdnYpLGZudCh0aGlzLEF1LHgwKSxWTyh0aGlzLEF1LFVzLHgwKSxWTyh0aGlzLEF1LGN1LGNkZSksZm50KHRoaXMsVXMsdE0pLHZBKHRoaXMsVXMsY3UsS1QsR1QpLGFvZSh0aGlzLGN1LHgwLHgwKSxhb2UodGhpcyxLMSx4MCxxNiksdkEodGhpcyxLMSxQcyxiMyx2diksdkEodGhpcyxLMSxjdSxiMyx2diksdkEodGhpcyxLMSxBYSxiMyx2dil9ZnVuY3Rpb24geE1uKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtpZihmPW4uTGsoKSxEZShmLDEwMikmJmwoZiwxOSkuQmImSW8mJihCPWwobi5tZCgpLDU0KSxKPXliKGUuZSxCKSxKIT1CKSl7aWYoQz1zZyhmLEopLFJfKGUsdCxBdWUoZSx0LEMpKSxMPW51bGwsaGgoZS5lKSYmKHI9ZzYoKEVsKCksaW8pLGUuZS5EaCgpLGYpLHIhPU1uKGUuZS5EaCgpLGUuYykpKXtmb3IodGU9V3UoZS5lLkRoKCksZiksZz0wLG89bChlLmcsMTI0KSx3PTA7dzx0OysrdylhPW9bd10sdGUuYW0oYS5MaygpKSYmKytnO0w9bmV3IEVvZShlLmUsOSxyLEIsSixnLCExKSxMLm5qKG5ldyBaZyhlLmUsOSxlLmMsbixDLHQsITEpKX1yZXR1cm4gVj1sKGYsMTkpLHo9Um8oViksej8oTD1CLlRoKGUuZSxtcyhCLkRoKCkseiksbnVsbCxMKSxMPWwoSiw1NCkuUmgoZS5lLG1zKEouRGgoKSx6KSxudWxsLEwpKTpWLkJiJmV1JiYoRT0tMS1tcyhlLmUuRGgoKSxWKSxMPUIuVGgoZS5lLEUsbnVsbCxudWxsKSwhbChKLDU0KS5QaCgpJiYoTD1sKEosNTQpLlJoKGUuZSxFLG51bGwsTCkpKSxMJiZMLm9qKCksQ31yZXR1cm4gbn1mdW5jdGlvbiBrTW4oZSl7dmFyIHQsbixyO2ZvcihRNShRYixoZShsZShMNiwxKSxSbiwxMzQsMCxbbmV3IHV6XSkpLG49bmV3IFN6KGUpLHI9MDtyPG4uYS5sZW5ndGg7KytyKXQ9X3kobixyKS50ZSgpLmEsdm4odCwibGF5ZXJlZCIpP1E1KFFiLGhlKGxlKEw2LDEpLFJuLDEzNCwwLFtuZXcgWXJlXSkpOnZuKHQsImZvcmNlIik/UTUoUWIsaGUobGUoTDYsMSksUm4sMTM0LDAsW25ldyBLU10pKTp2bih0LCJzdHJlc3MiKT9RNShRYixoZShsZShMNiwxKSxSbiwxMzQsMCxbbmV3IHJ6XSkpOnZuKHQsIm1ydHJlZSIpP1E1KFFiLGhlKGxlKEw2LDEpLFJuLDEzNCwwLFtuZXcgcmllXSkpOnZuKHQsInJhZGlhbCIpP1E1KFFiLGhlKGxlKEw2LDEpLFJuLDEzNCwwLFtuZXcgQ2ZdKSk6dm4odCwiZGlzY28iKT9RNShRYixoZShsZShMNiwxKSxSbiwxMzQsMCxbbmV3IGV6LG5ldyB0el0pKTp2bih0LCJzcG9yZU92ZXJsYXAiKXx8dm4odCwic3BvcmVDb21wYWN0aW9uIik/UTUoUWIsaGUobGUoTDYsMSksUm4sMTM0LDAsW25ldyB1aWVdKSk6dm4odCwicmVjdHBhY2tpbmciKSYmUTUoUWIsaGUobGUoTDYsMSksUm4sMTM0LDAsW25ldyBna10pKX1mdW5jdGlvbiBrdnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2lmKEI9bmV3IEVvKGUubyksZmU9dC5hL0IuYSxnPXQuYi9CLmIsSj10LmEtQi5hLG89dC5iLUIuYixuKWZvcihhPXFlKFEoZSwoTnQoKSxNcykpKT09PXFlKChSYSgpLE11KSksVj1uZXcgRyhlLmopO1YuYTxWLmMuYy5sZW5ndGg7KXN3aXRjaCh6PWwocmUoViksMTIpLHouai5nKXtjYXNlIDE6YXx8KHoubi5hKj1mZSk7YnJlYWs7Y2FzZSAyOnoubi5hKz1KLGF8fCh6Lm4uYio9Zyk7YnJlYWs7Y2FzZSAzOmF8fCh6Lm4uYSo9ZmUpLHoubi5iKz1vO2JyZWFrO2Nhc2UgNDphfHwoei5uLmIqPWcpfWZvcihFPW5ldyBHKGUuYik7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDcyKSxDPXcubi5hK3cuby5hLzIsTD13Lm4uYit3Lm8uYi8yLHRlPUMvQi5hLGY9TC9CLmIsdGUrZj49MSYmKHRlLWY+MCYmTD49MD8ody5uLmErPUosdy5uLmIrPW8qZik6dGUtZjwwJiZDPj0wJiYody5uLmErPUoqdGUsdy5uLmIrPW8pKTtlLm8uYT10LmEsZS5vLmI9dC5iLHJ0KGUsKE50KCksYnYpLChtaCgpLHI9bChLMChCTSksOSksbmV3IFpoKHIsbChjMChyLHIubGVuZ3RoKSw5KSwwKSkpfWZ1bmN0aW9uIEVNbihlLHQsbixyLGEsbyl7dmFyIGY7aWYoISh0PT1udWxsfHwhSGNlKHQsVFBlLENQZSkpKXRocm93IHVlKG5ldyBZbigiaW52YWxpZCBzY2hlbWU6ICIrdCkpO2lmKCFlJiYhKG4hPW51bGwmJnBkKG4sY2woMzUpKT09LTEmJm4ubGVuZ3RoPjAmJihYbigwLG4ubGVuZ3RoKSxuLmNoYXJDb2RlQXQoMCkhPTQ3KSkpdGhyb3cgdWUobmV3IFluKCJpbnZhbGlkIG9wYXF1ZVBhcnQ6ICIrbikpO2lmKGUmJiEodCE9bnVsbCYmbk8oRVksdC50b0xvd2VyQ2FzZSgpKSkmJiEobj09bnVsbHx8IUhjZShuLCRNLHpNKSkpdGhyb3cgdWUobmV3IFluKG41dCtuKSk7aWYoZSYmdCE9bnVsbCYmbk8oRVksdC50b0xvd2VyQ2FzZSgpKSYmIW54bihuKSl0aHJvdyB1ZShuZXcgWW4objV0K24pKTtpZighYzVuKHIpKXRocm93IHVlKG5ldyBZbigiaW52YWxpZCBkZXZpY2U6ICIrcikpO2lmKCFHeW4oYSkpdGhyb3cgZj1hPT1udWxsPyJpbnZhbGlkIHNlZ21lbnRzOiBudWxsIjoiaW52YWxpZCBzZWdtZW50OiAiK3F5bihhKSx1ZShuZXcgWW4oZikpO2lmKCEobz09bnVsbHx8cGQobyxjbCgzNSkpPT0tMSkpdGhyb3cgdWUobmV3IFluKCJpbnZhbGlkIHF1ZXJ5OiAiK28pKX1mdW5jdGlvbiBUTW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2lmKG4uVWcoIk5ldHdvcmsgc2ltcGxleCBsYXllcmluZyIsMSksZS5iPXQsZmU9bChRKHQsKE50KCksbk0pKSwxNykuYSo0LHRlPWUuYi5hLHRlLmMubGVuZ3RoPDEpe24uVmcoKTtyZXR1cm59Zm9yKG89a19uKGUsdGUpLEo9bnVsbCxhPVJyKG8sMCk7YS5iIT1hLmQuYzspe2ZvcihyPWwoQnIoYSksMTUpLGc9ZmUqdWEoYi5NYXRoLnNxcnQoci5nYygpKSksZj1GX24ociksb2xlKG4zZShUdW4ocjNlKGJhZShmKSxnKSxKKSwhMCksbi5laCgxKSksQj1lLmIuYixWPW5ldyBHKGYuYSk7Vi5hPFYuYy5jLmxlbmd0aDspe2Zvcih6PWwocmUoViksMTI1KTtCLmMubGVuZ3RoPD16LmU7KXB3KEIsQi5jLmxlbmd0aCxuZXcgeXUoZS5iKSk7Qz1sKHouZiwxMCksVmEoQyxsKGp0KEIsei5lKSwzMCkpfWlmKG8uYj4xKWZvcihKPVdlKFZyLGRpLDI4LGUuYi5iLmMubGVuZ3RoLDE1LDEpLEw9MCxFPW5ldyBHKGUuYi5iKTtFLmE8RS5jLmMubGVuZ3RoOyl3PWwocmUoRSksMzApLEpbTCsrXT13LmEuYy5sZW5ndGh9dGUuYy5sZW5ndGg9MCxlLmE9bnVsbCxlLmI9bnVsbCxlLmM9bnVsbCxuLlZnKCl9ZnVuY3Rpb24gQ01uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKEM9bmV3IGJ0LEw9bmV3IHo1LG89bnVsbCxhPTAscj0wO3I8dC5sZW5ndGg7KytyKXN3aXRjaChuPXRbcl0sRHluKG8sbikmJihhPWs4ZShlLEwsQyxEVyxhKSksbnMobiwoZnQoKSx1MykpJiYobz1sKFEobix1MyksMTApKSxuLmsuZyl7Y2FzZSAwOmZvcih3PWx5ZShHOChPYyhuLChDdCgpLFFuKSksbmV3IFhqKSk7dGNlKHcpOylmPWwoejZlKHcpLDEyKSxlLmRbZi5wXT1hKyssJG4oQy5jLGYpO2ZvcihhPWs4ZShlLEwsQyxEVyxhKSxFPWx5ZShHOChPYyhuLERyKSxuZXcgWGopKTt0Y2UoRSk7KWY9bCh6NmUoRSksMTIpLGUuZFtmLnBdPWErKywkbihDLmMsZik7YnJlYWs7Y2FzZSAzOk9jKG4sJERlKS5kYygpfHwoZj1sKE9jKG4sJERlKS5YYigwKSwxMiksZS5kW2YucF09YSsrLCRuKEMuYyxmKSksT2MobixEVykuZGMoKXx8Z2IoTCxuKTticmVhaztjYXNlIDE6Zm9yKGc9T2MobiwoQ3QoKSxlcikpLktjKCk7Zy5PYigpOylmPWwoZy5QYigpLDEyKSxlLmRbZi5wXT1hKyssJG4oQy5jLGYpO09jKG4sYXIpLkpjKG5ldyBxZXQoTCxuKSl9cmV0dXJuIGs4ZShlLEwsQyxEVyxhKSxDfWZ1bmN0aW9uIEZrZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKHQ9PW51bGx8fHQubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKG89bCh4dShlLmYsdCksMjMpLCFvKXtmb3IoYT0oej1uZXcgZ2koZS5kKS5hLnZjKCkuS2MoKSxuZXcgZnMoeikpO2EuYS5PYigpOylpZihuPShmPWwoYS5hLlBiKCksNDQpLGwoZi5tZCgpLDIzKSksZz1uLmYsVj10Lmxlbmd0aCx2bihnLnN1YnN0cihnLmxlbmd0aC1WLFYpLHQpJiYodC5sZW5ndGg9PWcubGVuZ3RofHxjbyhnLGcubGVuZ3RoLXQubGVuZ3RoLTEpPT00Nikpe2lmKG8pcmV0dXJuIG51bGw7bz1ufWlmKCFvKXtmb3Iocj0oQj1uZXcgZ2koZS5kKS5hLnZjKCkuS2MoKSxuZXcgZnMoQikpO3IuYS5PYigpOylpZihuPShmPWwoci5hLlBiKCksNDQpLGwoZi5tZCgpLDIzKSksTD1uLmcsTCE9bnVsbCl7Zm9yKHc9TCxFPTAsQz13Lmxlbmd0aDtFPEM7KytFKWlmKGc9d1tFXSxWPXQubGVuZ3RoLHZuKGcuc3Vic3RyKGcubGVuZ3RoLVYsViksdCkmJih0Lmxlbmd0aD09Zy5sZW5ndGh8fGNvKGcsZy5sZW5ndGgtdC5sZW5ndGgtMSk9PTQ2KSl7aWYobylyZXR1cm4gbnVsbDtvPW59fX1vJiZyYyhlLmYsdCxvKX1yZXR1cm4gb31mdW5jdGlvbiBTTW4oZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihuPW5ldyBTNSxmPSExLG89MDtvPHQubGVuZ3RoO28rKyl7aWYocj0oWG4obyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG8pKSxyPT0zMil7Zm9yKEpWKGUsbiwwKSxuLmErPSIgIixKVihlLG4sMCk7bysxPHQubGVuZ3RoJiYoWG4obysxLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobysxKT09MzIpOykrK287Y29udGludWV9aWYoZil7cj09Mzk/bysxPHQubGVuZ3RoJiYoWG4obysxLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobysxKT09MzkpPyhuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUociksKytvKTpmPSExOm4uYSs9U3RyaW5nLmZyb21DaGFyQ29kZShyKTtjb250aW51ZX1pZihwZCgiR3lNTGRrSG1zU0VjRGFoS3padiIsY2wocikpPjApe0pWKGUsbiwwKSxuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUociksYT1HNW4odCxvKSxKVihlLG4sYSksbys9YS0xO2NvbnRpbnVlfXI9PTM5P28rMTx0Lmxlbmd0aCYmKFhuKG8rMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG8rMSk9PTM5KT8obi5hKz0iJyIsKytvKTpmPSEwOm4uYSs9U3RyaW5nLmZyb21DaGFyQ29kZShyKX1KVihlLG4sMCksVHhuKGUpfWZ1bmN0aW9uIF9NbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKE1lPV9pdChlKSx3PW5ldyBidCxvPWUuYy5sZW5ndGgsRT1vLTEsQz1vKzE7TWUuYS5nYygpIT0wOyl7Zm9yKDtuLmIhPTA7KWZlPShtcihuLmIhPTApLGwoYWYobixuLmEuYSksMTE4KSksTWUuYS5CYyhmZSkhPW51bGwsZmUuZz1FLS0sVGtlKGZlLHQsbixyKTtmb3IoO3QuYiE9MDspVGU9KG1yKHQuYiE9MCksbChhZih0LHQuYS5hKSwxMTgpKSxNZS5hLkJjKFRlKSE9bnVsbCxUZS5nPUMrKyxUa2UoVGUsdCxuLHIpO2ZvcihnPWxvLEo9TWUuYS5lYygpLktjKCk7Si5PYigpOyl7aWYoVj1sKEouUGIoKSwxMTgpLCFyJiZWLmI+MCYmVi5hPD0wKXt3LmMubGVuZ3RoPTAsJG4ody5jLFYpO2JyZWFrfXo9Vi5pLVYuZCx6Pj1nJiYoej5nJiYody5jLmxlbmd0aD0wLGc9eiksJG4ody5jLFYpKX13LmMubGVuZ3RoIT0wJiYoZj1sKGp0KHcsYVUoYSx3LmMubGVuZ3RoKSksMTE4KSxNZS5hLkJjKGYpIT1udWxsLGYuZz1DKyssVGtlKGYsdCxuLHIpLHcuYy5sZW5ndGg9MCl9Zm9yKHRlPWUuYy5sZW5ndGgrMSxCPW5ldyBHKGUpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMTgpLEwuZzxvJiYoTC5nPUwuZyt0ZSl9ZnVuY3Rpb24gRXZ0KGUsdCxuKXt2YXIgcixhLG8sZjt0aGlzLmo9ZSx0aGlzLmU9SXhlKGUpLHRoaXMubz10aGlzLmouZSx0aGlzLmk9ISF0aGlzLm8sdGhpcy5wPXRoaXMuaT9sKGp0KG4sZW8odGhpcy5vKS5wKSwyMTkpOm51bGwsYT1sKFEoZSwoZnQoKSxMdSkpLDIxKSx0aGlzLmc9YS5IYygoSG8oKSx2ZikpLHRoaXMuYj1uZXcgYnQsdGhpcy5kPW5ldyBQMXQodGhpcy5lKSxmPWwoUSh0aGlzLmosWHgpLDIzNCksdGhpcy5xPUwzbih0LGYsdGhpcy5lKSx0aGlzLms9bmV3IENvdCh0aGlzKSxvPU8xKGhlKGxlKGV4dCwxKSxSbiwyMzAsMCxbdGhpcyx0aGlzLmQsdGhpcy5rLHRoaXMucV0pKSx0PT0oSXcoKSxEQikmJiFSdChCdChRKGUsKE50KCksZjMpKSkpPyhyPW5ldyBQeGUodGhpcy5lKSwkbihvLmMsciksdGhpcy5jPW5ldyBuNmUocixmLGwodGhpcy5xLDQxMykpKTp0PT1EQiYmUnQoQnQoUShlLChOdCgpLGYzKSkpKT8ocj1uZXcgUHhlKHRoaXMuZSksJG4oby5jLHIpLHRoaXMuYz1uZXcgYmZ0KHIsZixsKHRoaXMucSw0MTMpKSk6dGhpcy5jPW5ldyB6ZXQodCx0aGlzKSx2dChvLHRoaXMuYyksYXZ0KG8sdGhpcy5lKSx0aGlzLnM9Z0luKHRoaXMuayl9ZnVuY3Rpb24gQU1uKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtmb3Iobz1uZXcgYnQsRT1uZXcgRyhyKTtFLmE8RS5jLmMubGVuZ3RoOylpZihnPWwocmUoRSksNDUzKSxmPW51bGwsZy5mPT0ocW8oKSx6dSkpZm9yKFY9bmV3IEcoZy5lKTtWLmE8Vi5jLmMubGVuZ3RoOyl6PWwocmUoViksMTgpLHRlPXouZC5pLGVvKHRlKT09dD9DaHQoZSx0LGcseixnLmIsei5kKTohbnx8YkUodGUsbik/aTluKGUsdCxnLHIseik6KEI9eGxlKGUsdCxuLHosZy5iLHp1LGYpLEIhPWYmJiRuKG8uYyxCKSxCLmMmJihmPUIpKTtlbHNlIGZvcihMPW5ldyBHKGcuZSk7TC5hPEwuYy5jLmxlbmd0aDspaWYoQz1sKHJlKEwpLDE4KSxKPUMuYy5pLGVvKEopPT10KUNodChlLHQsZyxDLEMuYyxnLmIpO2Vsc2V7aWYoIW58fGJFKEosbikpY29udGludWU7Qj14bGUoZSx0LG4sQyxnLmIsJGwsZiksQiE9ZiYmJG4oby5jLEIpLEIuYyYmKGY9Qil9Zm9yKHc9bmV3IEcobyk7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDQ1MyksZ2ModC5hLGcuYSwwKSE9LTF8fHZ0KHQuYSxnLmEpLGcuYyYmJG4oYS5jLGcpfWZ1bmN0aW9uIFR2dChlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IodD0wLG89bmV3IEcoZS5iLmEpO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwxOTQpLHIuYj0wLHIuYz0wO2ZvcihycHQoZSwwKSxWY2UoZSxlLmcpLE1VKGUuYyksSndlKGUuYyksbj0oSnMoKSx1YyksZlAoSXNlKHA2KGZQKElzZShwNihmUChwNihlLmMsbikpLGIxdChuKSkpKSxuKSkpLHA2KGUuYyx1YyksUmNlKGUsZS5nKSxIZ3QoZSwwKSxudnQoZSwwKSxGMnQoZSwxKSxycHQoZSwxKSxWY2UoZSxlLmQpLE1VKGUuYyksZj1uZXcgRyhlLmIuYSk7Zi5hPGYuYy5jLmxlbmd0aDspcj1sKHJlKGYpLDE5NCksdCs9Yi5NYXRoLmFicyhyLmMpO2ZvcihnPW5ldyBHKGUuYi5hKTtnLmE8Zy5jLmMubGVuZ3RoOylyPWwocmUoZyksMTk0KSxyLmI9MCxyLmM9MDtmb3Iobj13ZixmUChJc2UocDYoZlAoSXNlKHA2KGZQKEp3ZShwNihlLmMsbikpKSxiMXQobikpKSksbikpKSxwNihlLmMsdWMpLFJjZShlLGUuZCksSGd0KGUsMSksbnZ0KGUsMSksRjJ0KGUsMCksSndlKGUuYyksYT1uZXcgRyhlLmIuYSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE5NCksdCs9Yi5NYXRoLmFicyhyLmMpO3JldHVybiB0fWZ1bmN0aW9uIExNbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7aWYoUnQoQnQoUShuLChOdCgpLGI0KSkpKSlmb3IoZz1uZXcgRyhuLmopO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTIpLEI9a2QoZi5nKSxFPUIsQz0wLEw9RS5sZW5ndGg7QzxMOysrQyl3PUVbQ10sbz13LmQuaT09bixhPW8mJlJ0KEJ0KFEodyxndikpKSxhJiYoVj13LmMsej1sKGNyKGUuYixWKSwxMCksenx8KHo9dlAoViwoUmEoKSxaMSksVi5qLC0xLG51bGwsbnVsbCxWLm8sbChRKHQsUmgpLDg4KSx0KSxydCh6LChmdCgpLHppKSxWKSxraShlLmIsVix6KSx2dCh0LmEseikpLHRlPXcuZCxKPWwoY3IoZS5iLHRlKSwxMCksSnx8KEo9dlAodGUsKFJhKCksWjEpLHRlLmosMSxudWxsLG51bGwsdGUubyxsKFEodCxSaCksODgpLHQpLHJ0KEosKGZ0KCksemkpLHRlKSxraShlLmIsdGUsSiksdnQodC5hLEopKSxyPUFvZSh3KSxwbyhyLGwoanQoei5qLDApLDEyKSksRmEocixsKGp0KEouaiwwKSwxMikpLHhuKGUuYSx3LG5ldyBLcShyLHQsKHFvKCksenUpKSksbChRKHQsKGZ0KCksTHUpKSwyMSkuRmMoKEhvKCksdmYpKSl9ZnVuY3Rpb24gTU1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQjtmb3IoYT1uZXcgRyhlLmEuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKG49bChyZShhKSwzMCksdz1uZXcgRyhuLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMCksdC5qW2cucF09Zyx0LmlbZy5wXT10Lm89PShEMSgpLFkxKT9pYTpncztmb3IoTmwoZS5jKSxmPWUuYS5iLHQuYz09KHhkKCksVDIpJiYoZj1sZihmKSksSWJuKGUuZSx0LGUuYiksYU8odC5wLG51bGwpLG89Zi5LYygpO28uT2IoKTspZm9yKG49bChvLlBiKCksMzApLEU9bi5hLHQubz09KEQxKCksWTEpJiYoRT1sZihFKSksQj1FLktjKCk7Qi5PYigpOylMPWwoQi5QYigpLDEwKSx0LmdbTC5wXT09TCYmb3d0KGUsTCx0KTtmb3IoY01uKGUsdCkscj1mLktjKCk7ci5PYigpOylmb3Iobj1sKHIuUGIoKSwzMCksQj1uZXcgRyhuLmEpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMCksdC5wW0wucF09dC5wW3QuZ1tMLnBdLnBdLEw9PXQuZ1tMLnBdJiYoQz16ZSh0LmlbdC5qW0wucF0ucF0pLCh0Lm89PShEMSgpLFkxKSYmQz5pYXx8dC5vPT13diYmQzxncykmJih0LnBbTC5wXT16ZSh0LnBbTC5wXSkrQykpO2UuZS54ZygpfWZ1bmN0aW9uIERNbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihuLlVnKCJMYWJlbCBkdW1teSBzd2l0Y2hpbmciLDEpLHI9bChRKHQsKE50KCksZ1cpKSwyMzIpLHgzbih0KSxhPWxUbih0LHIpLGUuYT1XZShOYSxabywyOCx0LmIuYy5sZW5ndGgsMTUsMSksZz0oeXgoKSxoZShsZShOVCwxKSxpdCwyMzIsMCxbT1QscUwsSVQsaDQsTjYsTzZdKSksQz0wLHo9Zy5sZW5ndGg7Qzx6OysrQylpZihvPWdbQ10sKG89PU42fHxvPT1PNnx8bz09aDQpJiYhbCh2bChhLmEsbyk/YS5iW28uZ106bnVsbCwxNSkuZGMoKSl7UzNuKGUsdCk7YnJlYWt9Zm9yKHc9aGUobGUoTlQsMSksaXQsMjMyLDAsW09ULHFMLElULGg0LE42LE82XSksTD0wLFY9dy5sZW5ndGg7TDxWOysrTClvPXdbTF0sbz09TjZ8fG89PU82fHxvPT1oNHx8bG10KGUsbCh2bChhLmEsbyk/YS5iW28uZ106bnVsbCwxNSkpO2ZvcihmPWhlKGxlKE5ULDEpLGl0LDIzMiwwLFtPVCxxTCxJVCxoNCxONixPNl0pLEU9MCxCPWYubGVuZ3RoO0U8QjsrK0Upbz1mW0VdLChvPT1ONnx8bz09TzZ8fG89PWg0KSYmbG10KGUsbCh2bChhLmEsbyk/YS5iW28uZ106bnVsbCwxNSkpO2UuYT1udWxsLG4uVmcoKX1mdW5jdGlvbiBDdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYoRT10LCEoRS5iPT1udWxsfHxlLmI9PW51bGwpKXtmb3IoYzYoZSksZUwoZSksYzYoRSksZUwoRSksbj1XZShWcixkaSwyOCxlLmIubGVuZ3RoK0UuYi5sZW5ndGgsMTUsMSksQz0wLHI9MCxmPTA7cjxlLmIubGVuZ3RoJiZmPEUuYi5sZW5ndGg7KWlmKGE9ZS5iW3JdLG89ZS5iW3IrMV0sZz1FLmJbZl0sdz1FLmJbZisxXSxvPGcpcis9MjtlbHNlIGlmKG8+PWcmJmE8PXcpZzw9YSYmbzw9dz8obltDKytdPWEsbltDKytdPW8scis9Mik6Zzw9YT8obltDKytdPWEsbltDKytdPXcsZS5iW3JdPXcrMSxmKz0yKTpvPD13PyhuW0MrK109ZyxuW0MrK109byxyKz0yKToobltDKytdPWcsbltDKytdPXcsZS5iW3JdPXcrMSk7ZWxzZSBpZih3PGEpZis9MjtlbHNlIHRocm93IHVlKG5ldyBBYygiVG9rZW4jaW50ZXJzZWN0UmFuZ2VzKCk6IEludGVybmFsIEVycm9yOiBbIitlLmJbcl0rIiwiK2UuYltyKzFdKyJdICYgWyIrRS5iW2ZdKyIsIitFLmJbZisxXSsiXSIpKTtmb3IoO3I8ZS5iLmxlbmd0aDspbltDKytdPWUuYltyKytdLG5bQysrXT1lLmJbcisrXTtlLmI9V2UoVnIsZGksMjgsQywxNSwxKSxwdShuLDAsZS5iLDAsQyl9fWZ1bmN0aW9uIElNbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IodD1uZXcgYnQsZS5nPW5ldyBidCxlLmQ9bmV3IGJ0LGY9bmV3IHFtKG5ldyBTcihlLmYuYikuYSk7Zi5iOylvPU53KGYpLHZ0KHQsbChsKG8ubWQoKSw0MikuYiw4NikpLFVnKGwoby5sZCgpLDYwMikuQWYoKSk/dnQoZS5kLGwoby5tZCgpLDQyKSk6dnQoZS5nLGwoby5tZCgpLDQyKSk7Zm9yKFZjZShlLGUuZCksVmNlKGUsZS5nKSxlLmM9bmV3IFpwdChlLmIpLFN1bihlLmMsKG0zZSgpLGs4dCkpLFJjZShlLGUuZCksUmNlKGUsZS5nKSxyYSh0LGUuYy5hLmIpLGUuZT1uZXcgbHQoZ3MsZ3MpLGUuYT1uZXcgbHQoaWEsaWEpLHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDg2KSxlLmUuYT1iLk1hdGgubWluKGUuZS5hLG4uZy5jKSxlLmUuYj1iLk1hdGgubWluKGUuZS5iLG4uZy5kKSxlLmEuYT1iLk1hdGgubWF4KGUuYS5hLG4uZy5jK24uZy5iKSxlLmEuYj1iLk1hdGgubWF4KGUuYS5iLG4uZy5kK24uZy5hKTtzM2UoZS5jLG5ldyBWdiksZz0wO2RvIGE9VHZ0KGUpLCsrZzt3aGlsZSgoZzwyfHxhPkFiKSYmZzwxMCk7czNlKGUuYyxuZXcgWTcpLFR2dChlKSx3Z24oZS5jKSxnTW4oZS5mKX1mdW5jdGlvbiBPTW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKO2ZvcihuPWwoUShlLChOdCgpLE1zKSksMTAxKSxmPWUuZixvPWUuZCxnPWYuYStvLmIrby5jLHc9MC1vLmQtZS5jLmIsQz1mLmIrby5kK28uYS1lLmMuYixFPW5ldyBidCxMPW5ldyBidCxhPW5ldyBHKHQpO2EuYTxhLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj1sKHJlKGEpLDEwKSxuLmcpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnhDbihyKTticmVhaztjYXNlIDQ6Qj1sKFEocixwMyksOCksej1CP0IuYTowLHIubi5hPWcqemUoR2UoUShyLChmdCgpLGwzKSkpKS16LERWKHIsITAsITEpO2JyZWFrO2Nhc2UgNTpWPWwoUShyLHAzKSw4KSxKPVY/Vi5hOjAsci5uLmE9emUoR2UoUShyLChmdCgpLGwzKSkpKS1KLERWKHIsITAsITEpLGYuYT1iLk1hdGgubWF4KGYuYSxyLm4uYStyLm8uYS8yKX1zd2l0Y2gobChRKHIsKGZ0KCksV2MpKSw2NCkuZyl7Y2FzZSAxOnIubi5iPXcsJG4oRS5jLHIpO2JyZWFrO2Nhc2UgMzpyLm4uYj1DLCRuKEwuYyxyKX19c3dpdGNoKG4uZyl7Y2FzZSAxOmNhc2UgMjpzMXQoRSxlKSxzMXQoTCxlKTticmVhaztjYXNlIDM6YTF0KEUsZSksYTF0KEwsZSl9fWZ1bmN0aW9uIE5NbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7c3dpdGNoKGUuay5nKXtjYXNlIDE6aWYocj1sKFEoZSwoZnQoKSx6aSkpLDE4KSxuPWwoUShyLHFMZSksNzUpLG4/UnQoQnQoUShyLFcxKSkpJiYobj1BTihuKSk6bj1uZXcgYmwsRT1sKFEoZSxvMSksMTIpLEUpe2lmKEM9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtFLmkubixFLm4sRS5hXSkpLHQ8PUMuYSlyZXR1cm4gQy5iO0NzKG4sQyxuLmEsbi5hLmEpfWlmKEw9bChRKGUsJGYpLDEyKSxMKXtpZihCPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbTC5pLm4sTC5uLEwuYV0pKSxCLmE8PXQpcmV0dXJuIEIuYjtDcyhuLEIsbi5jLmIsbi5jKX1pZihuLmI+PTIpe2Zvcih3PVJyKG4sMCksZj1sKEJyKHcpLDgpLGc9bChCcih3KSw4KTtnLmE8dCYmdy5iIT13LmQuYzspZj1nLGc9bChCcih3KSw4KTtyZXR1cm4gZi5iKyh0LWYuYSkvKGcuYS1mLmEpKihnLmItZi5iKX1icmVhaztjYXNlIDM6c3dpdGNoKG89bChRKGwoanQoZS5qLDApLDEyKSwoZnQoKSx6aSkpLDEyKSxhPW8uaSxvLmouZyl7Y2FzZSAxOnJldHVybiBhLm4uYjtjYXNlIDM6cmV0dXJuIGEubi5iK2Euby5ifX1yZXR1cm4gRXhlKGUpLmJ9ZnVuY3Rpb24gUE1uKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKGY9bmV3IEcoZS5kLmIpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMzApLHc9bmV3IEcoby5hKTt3LmE8dy5jLmMubGVuZ3RoOyl7aWYoZz1sKHJlKHcpLDEwKSxSdChCdChRKGcsKE50KCksUUwpKSkpJiYhWmsoc3AoZykpKXtyPWwoQXBuKHNwKGcpKSwxOCksQz1yLmMuaSxDPT1nJiYoQz1yLmQuaSksTD1uZXcgY2EoQyxtYShKYShnLm4pLEMubikpLGtpKGUuYixnLEwpO2NvbnRpbnVlfWE9bmV3IGVmKGcubi5hLWcuZC5iLGcubi5iLWcuZC5kLGcuby5hK2cuZC5iK2cuZC5jLGcuby5iK2cuZC5kK2cuZC5hKSx0PXRydChhZXQoaWV0KHNldChuZXcgT3dlLGcpLGEpLEo4dCksZS5hKSxlcnQoSnVuKEdodChuZXcgSXdlLGhlKGxlKGRLLDEpLFJuLDYwLDAsW3RdKSksdCksZS5hKSxFPW5ldyBCaWUsa2koZS5lLHQsRSksbj1YZyhuZXcgaHIoZHIoa2EoZykuYS5LYygpLG5ldyBqKSkpLVhnKG5ldyBocihkcihxcyhnKS5hLktjKCksbmV3IGopKSksbjwwP1NOKEUsITAsKEpzKCksdWMpKTpuPjAmJlNOKEUsITAsKEpzKCksdmMpKSxnLms9PShabigpLFVzKSYmY2F0KEUpLGtpKGUuZixnLHQpfX1mdW5jdGlvbiBCTW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlO2ZvcihhPWwoUShlLChRaSgpLGdNKSksMjcpLEU9SWksQz1JaSxnPWxvLHc9bG8sTWU9UnIoZS5iLDApO01lLmIhPU1lLmQuYzspZmU9bChCcihNZSksNDApLHo9ZmUuZSxWPWZlLmYsRT1iLk1hdGgubWluKEUsei5hLVYuYS8yKSxDPWIuTWF0aC5taW4oQyx6LmItVi5iLzIpLGc9Yi5NYXRoLm1heChnLHouYStWLmEvMiksdz1iLk1hdGgubWF4KHcsei5iK1YuYi8yKTtmb3IoQj1sKGF0KGEsKEhjKCksZ0llKSksMTA3KSxUZT1ScihlLmIsMCk7VGUuYiE9VGUuZC5jOylmZT1sKEJyKFRlKSw0MCksTD1RKGZlLGdNKSxEZShMLDIwNykmJihvPWwoTCwyNyksUWgobyxmZS5lLmEsZmUuZS5iKSxhUChvLGZlKSk7Zm9yKHRlPVJyKGUuYSwwKTt0ZS5iIT10ZS5kLmM7KUo9bChCcih0ZSksNjUpLHI9bChRKEosZ00pLDc0KSxyJiYodD1KLmEsbj1sNihyLCEwLCEwKSxkUCh0LG4pKTskZT1nLUUrKEIuYitCLmMpLGY9dy1DKyhCLmQrQi5hKSxSdChCdChhdChhLChwaSgpLEM0KSkpKXx8R3coYSwkZSxmLCExLCExKSxIaShhLHQ3LCRlLShCLmIrQi5jKSksSGkoYSxlNyxmLShCLmQrQi5hKSl9ZnVuY3Rpb24gU3Z0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKHc9ITAsYT0wLEU9ZS5nW3QucF0sQz10Lm8uYitlLm8sbj1lLmRbdC5wXVsyXSxyZihlLmIsRSxwdChsKGp0KGUuYixFKSwxNykuYS0xK24pKSxyZihlLmMsRSx6ZShHZShqdChlLmMsRSkpKS1DK24qZS5mKSwrK0UsRT49ZS5qPygrK2Uuaix2dChlLmIscHQoMSkpLHZ0KGUuYyxDKSk6KHI9ZS5kW3QucF1bMV0scmYoZS5iLEUscHQobChqdChlLmIsRSksMTcpLmErMS1yKSkscmYoZS5jLEUsemUoR2UoanQoZS5jLEUpKSkrQy1yKmUuZikpLChlLnI9PShOZigpLEFCKSYmKGwoanQoZS5iLEUpLDE3KS5hPmUua3x8bChqdChlLmIsRS0xKSwxNykuYT5lLmspfHxlLnI9PUxCJiYoemUoR2UoanQoZS5jLEUpKSk+ZS5ufHx6ZShHZShqdChlLmMsRS0xKSkpPmUubikpJiYodz0hMSksZj1uZXcgaHIoZHIoa2EodCkuYS5LYygpLG5ldyBqKSk7anIoZik7KW89bCh4cihmKSwxOCksZz1vLmMuaSxlLmdbZy5wXT09RSYmKEw9U3Z0KGUsZyksYT1hK2woTC5hLDE3KS5hLHc9dyYmUnQoQnQoTC5iKSkpO3JldHVybiBlLmdbdC5wXT1FLGE9YStlLmRbdC5wXVswXSxuZXcgY2EocHQoYSksKEhuKCksISF3KSl9ZnVuY3Rpb24gX3Z0KGUsdCl7dmFyIG4scixhLG8sZjtuPXplKEdlKFEodCwoTnQoKSx4MCkpKSksbjwyJiZydCh0LHgwLDIpLHI9bChRKHQsUmgpLDg4KSxyPT0oSnMoKSxKMSkmJnJ0KHQsUmgselYodCkpLGE9bChRKHQsVmt0KSwxNyksYS5hPT0wP3J0KHQsKGZ0KCksWHgpLG5ldyBVY2UpOnJ0KHQsKGZ0KCksWHgpLG5ldyBWSChhLmEpKSxvPUJ0KFEodCxaTCkpLG89PW51bGwmJnJ0KHQsWkwsKEhuKCkscWUoUSh0LGJwKSk9PT1xZSgoaXAoKSxpQykpKSksSXMobmV3IGJuKG51bGwsbmV3IGtuKHQuYSwxNikpLG5ldyBxcChlKSksSXMoRGMobmV3IGJuKG51bGwsbmV3IGtuKHQuYiwxNikpLG5ldyB1NSksbmV3IG5fKGUpKSxmPW5ldyB4dnQodCkscnQodCwoZnQoKSwkNiksZikscU8oZS5hKSxYMChlLmEsKHVvKCkseTApLGwoUSh0LGR2KSwxODgpKSxYMChlLmEsdmcsbChRKHQscHYpLDE4OCkpLFgwKGUuYSxidSxsKFEodCxKTCksMTg4KSksWDAoZS5hLF91LGwoUSh0LHlXKSwxODgpKSxYMChlLmEsbWMsQjNuKGwoUSh0LGJwKSwyMjMpKSksdXllKGUuYSxESW4odCkpLHJ0KHQsSzFlLGJQKGUuYSx0KSl9ZnVuY3Rpb24gUmtlKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZTtmb3IoTD1uZXcgUHIsZj1uZXcgYnQsU3B0KGUsbixlLmQuQWcoKSxmLEwpLFNwdChlLHIsZS5kLkJnKCksZixMKSxlLmI9LjIqKEo9RDJ0KERjKG5ldyBibihudWxsLG5ldyBrbihmLDE2KSksbmV3IFR0ZSkpLHRlPUQydChEYyhuZXcgYm4obnVsbCxuZXcga24oZiwxNikpLG5ldyBDdGUpKSxiLk1hdGgubWluKEosdGUpKSxvPTAsZz0wO2c8Zi5jLmxlbmd0aC0xO2crKylmb3Iodz0oU24oZyxmLmMubGVuZ3RoKSxsKGYuY1tnXSwxMTgpKSxWPWcrMTtWPGYuYy5sZW5ndGg7VisrKW8rPURrZShlLHcsKFNuKFYsZi5jLmxlbmd0aCksbChmLmNbVl0sMTE4KSkpO2ZvcihCPWwoUSh0LChmdCgpLFh4KSksMjM0KSxvPj0yJiYoZmU9WDJ0KGYsITAsQiksIWUuZSYmKGUuZT1uZXcgc1hlKGUpKSxxNW4oZS5lLGZlLGYsZS5iKSksT2d0KGYsQikscU1uKGYpLHo9LTEsQz1uZXcgRyhmKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksMTE4KSwhKGIuTWF0aC5hYnMoRS5zLUUuYyk8RGQpJiYoej1iLk1hdGgubWF4KHosRS5vKSxlLmQueWcoRSxhLGUuYykpO3JldHVybiBlLmQuYS5hLiRiKCkseisxfWZ1bmN0aW9uIEZNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7Zm9yKEw9bChQcSgoZj1ScihuZXcgSGcodCkuYS5kLDApLG5ldyBDNShmKSkpLDQwKSxWPUw/bChRKEwsKFFpKCksUmRlKSksNDApOm51bGwsYT0xO0wmJlY7KXtmb3Iodz0wLCRlPTAsbj1MLHI9VixnPTA7ZzxhO2crKyluPUlvZShuKSxyPUlvZShyKSwkZSs9emUoR2UoUShuLChRaSgpLEpUKSkpKSx3Kz16ZShHZShRKHIsSlQpKSk7aWYoTWU9emUoR2UoUShWLChRaSgpLEMyKSkpKSxUZT16ZShHZShRKEwsQzIpKSksQj1wOGUoZSxMLFYpLHo9TWUrdytlLmIrQi1UZS0kZSwwPHope2ZvcihFPXQsQz0wO0UmJkUhPXI7KSsrQyxFPWwoUShFLEJXKSw0MCk7aWYoRSlmb3IoZmU9ei9DLEU9dDtFIT1yOyl0ZT16ZShHZShRKEUsQzIpKSkreixydChFLEMyLHRlKSxKPXplKEdlKFEoRSxKVCkpKSt6LHJ0KEUsSlQsSiksei09ZmUsRT1sKFEoRSxCVyksNDApO2Vsc2UgcmV0dXJufSsrYSxMLmQuYj09MD9MPWJrZShuZXcgSGcodCksYSk6TD1sKFBxKChvPVJyKG5ldyBIZyhMKS5hLmQsMCksbmV3IEM1KG8pKSksNDApLFY9TD9sKFEoTCxSZGUpLDQwKTpudWxsfX1mdW5jdGlvbiBSTW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90O3JldHVybiBCPWUuY1t0XSx6PWUuY1tuXSxWPWwoUShCLChmdCgpLFd4KSksMTUpLCEhViYmVi5nYygpIT0wJiZWLkhjKHopfHwoSj1CLmshPShabigpLEFhKSYmei5rIT1BYSx0ZT1sKFEoQix1MyksMTApLGZlPWwoUSh6LHUzKSwxMCksVGU9dGUhPWZlLE1lPSEhdGUmJnRlIT1CfHwhIWZlJiZmZSE9eiwkZT1kdWUoQiwoQ3QoKSxRbikpLFplPWR1ZSh6LERyKSxNZT1NZXwoZHVlKEIsRHIpfHxkdWUoeixRbikpLG90PU1lJiZUZXx8JGV8fFplLEomJm90KXx8Qi5rPT0oWm4oKSxBdSkmJnouaz09UHN8fHouaz09KFpuKCksQXUpJiZCLms9PVBzPyExOihDPWUuY1t0XSxvPWUuY1tuXSxhPXZndChlLmUsQyxvLChDdCgpLGVyKSksdz12Z3QoZS5pLEMsbyxhciksZ0NuKGUuZixDLG8pLEU9STB0KGUuYixDLG8pK2woYS5hLDE3KS5hK2wody5hLDE3KS5hK2UuZi5kLGc9STB0KGUuYixvLEMpK2woYS5iLDE3KS5hK2wody5iLDE3KS5hK2UuZi5iLGUuYSYmKEw9bChRKEMsemkpLDEyKSxmPWwoUShvLHppKSwxMikscj1aZHQoZS5nLEwsZiksRSs9bChyLmEsMTcpLmEsZys9bChyLmIsMTcpLmEpLEU+Zyl9ZnVuY3Rpb24gQXZ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZTtmb3IoRT1ncyxDPWdzLGc9aWEsdz1pYSxCPW5ldyBHKHQuaSk7Qi5hPEIuYy5jLmxlbmd0aDspTD1sKHJlKEIpLDY4KSxhPWwobChjcihlLmcsTC5hKSw0MikuYiwyNyksUWgoYSxMLmIuYyxMLmIuZCksRT1iLk1hdGgubWluKEUsYS5pKSxDPWIuTWF0aC5taW4oQyxhLmopLGc9Yi5NYXRoLm1heChnLGEuaSthLmcpLHc9Yi5NYXRoLm1heCh3LGEuaithLmYpO2Zvcih6PWwoYXQoZS5jLChZTigpLFFDdCkpLDEwNyksR3coZS5jLGctRSsoei5iK3ouYyksdy1DKyh6LmQrei5hKSwhMCwhMCksSHhlKGUuYywtRSt6LmIsLUMrei5kKSxyPW5ldyBvcihQYXQoZS5jKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDc0KSxmPWw2KG4sITAsITApLFY9Y2cobiksdGU9RWIobiksSj1uZXcgbHQoVi5pK1YuZy8yLFYuaitWLmYvMiksbz1uZXcgbHQodGUuaSt0ZS5nLzIsdGUuait0ZS5mLzIpLGZlPW1hKG5ldyBsdChvLmEsby5iKSxKKSxSRShmZSxWLmcsVi5mKSxPaShKLGZlKSxUZT1tYShuZXcgbHQoSi5hLEouYiksbyksUkUoVGUsdGUuZyx0ZS5mKSxPaShvLFRlKSxrTyhmLEouYSxKLmIpLHhPKGYsby5hLG8uYil9ZnVuY3Rpb24gak1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7Zm9yKHQuVWcoIkxhYmVsIGR1bW15IHJlbW92YWwiLDEpLHI9emUoR2UoUShlLChOdCgpLEg2KSkpKSxhPXplKEdlKFEoZSx5NCkpKSxFPWwoUShlLFJoKSw4OCksdz1uZXcgRyhlLmIpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihnPWwocmUodyksMzApLEw9bmV3IFVhKGcuYSwwKTtMLmI8TC5kLmdjKCk7KUM9KG1yKEwuYjxMLmQuZ2MoKSksbChMLmQuWGIoTC5jPUwuYisrKSwxMCkpLEMuaz09KFpuKCksY3UpJiYoQj1sKFEoQywoZnQoKSx6aSkpLDE4KSxWPXplKEdlKFEoQix4MikpKSxmPXFlKFEoQyxZeCkpPT09cWUoKEloKCksR2IpKSxuPW5ldyBFbyhDLm4pLGYmJihuLmIrPVYrciksbz1uZXcgbHQoQy5vLmEsQy5vLmIrKEMuaz09Y3UmJiFfayhGaShsKFEoQyxXTCksMTUpLk9jKCksbmV3IFdsKG5ldyB1aikpKS5CZCgoQW0oKSx6eCkpPzA6LVYtcikpLHo9bChRKEMsV0wpLDE1KSxFPT0oSnMoKSx3Zil8fEU9PVExP1VFbih6LG4sYSxvLGYsRSk6WnluKHosbixhLG8pLHJhKEIuYix6KSxDbGUoQyxxZShRKGUsYnApKT09PXFlKChpcCgpLEpCKSkpLHBoKEwpKTt0LlZnKCl9ZnVuY3Rpb24gJE1uKGUpe2UucXx8KGUucT0hMCxlLnA9cWMoZSwwKSxlLmE9cWMoZSwxKSxpcyhlLmEsMCksZS5mPXFjKGUsMiksaXMoZS5mLDEpLFNzKGUuZiwyKSxlLm49cWMoZSwzKSxTcyhlLm4sMyksU3MoZS5uLDQpLFNzKGUubiw1KSxTcyhlLm4sNiksZS5nPXFjKGUsNCksaXMoZS5nLDcpLFNzKGUuZyw4KSxlLmM9cWMoZSw1KSxpcyhlLmMsNyksaXMoZS5jLDgpLGUuaT1xYyhlLDYpLGlzKGUuaSw5KSxpcyhlLmksMTApLGlzKGUuaSwxMSksaXMoZS5pLDEyKSxTcyhlLmksMTMpLGUuaj1xYyhlLDcpLGlzKGUuaiw5KSxlLmQ9cWMoZSw4KSxpcyhlLmQsMyksaXMoZS5kLDQpLGlzKGUuZCw1KSxpcyhlLmQsNiksU3MoZS5kLDcpLFNzKGUuZCw4KSxTcyhlLmQsOSksU3MoZS5kLDEwKSxlLmI9cWMoZSw5KSxTcyhlLmIsMCksU3MoZS5iLDEpLGUuZT1xYyhlLDEwKSxTcyhlLmUsMSksU3MoZS5lLDIpLFNzKGUuZSwzKSxTcyhlLmUsNCksaXMoZS5lLDUpLGlzKGUuZSw2KSxpcyhlLmUsNyksaXMoZS5lLDgpLGlzKGUuZSw5KSxpcyhlLmUsMTApLFNzKGUuZSwxMSksZS5rPXFjKGUsMTEpLFNzKGUuaywwKSxTcyhlLmssMSksZS5vPVRpKGUsMTIpLGUucz1UaShlLDEzKSl9ZnVuY3Rpb24gamtlKGUsdCl7dC5kYygpJiZ0ZyhlLmosITAsITAsITAsITApLFBpKHQsKEN0KCksXzApKSYmdGcoZS5qLCEwLCEwLCEwLCExKSxQaSh0LHlmKSYmdGcoZS5qLCExLCEwLCEwLCEwKSxQaSh0LCRoKSYmdGcoZS5qLCEwLCEwLCExLCEwKSxQaSh0LEhmKSYmdGcoZS5qLCEwLCExLCEwLCEwKSxQaSh0LHpsKSYmdGcoZS5qLCExLCEwLCEwLCExKSxQaSh0LHhmKSYmdGcoZS5qLCExLCEwLCExLCEwKSxQaSh0LHpoKSYmdGcoZS5qLCEwLCExLCExLCEwKSxQaSh0LEEwKSYmdGcoZS5qLCEwLCExLCEwLCExKSxQaSh0LGhsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LEp1KSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LGhsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LGxsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LGZsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LHFsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LER1KSYmdGcoZS5qLCEwLCEwLCEwLCEwKX1mdW5jdGlvbiBMdnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTDtpZihlLmEhPXQuamsoKSl0aHJvdyB1ZShuZXcgWW4oeVQrdC54ZSgpK3QzKSk7aWYocj1vMigoRWwoKSxpbyksdCkuSmwoKSxyKXJldHVybiByLmprKCkud2koKS5yaShyLG4pO2lmKGY9bzIoaW8sdCkuTGwoKSxmKXtpZihuPT1udWxsKXJldHVybiBudWxsO2lmKGc9bChuLDE1KSxnLmRjKCkpcmV0dXJuIiI7Zm9yKEw9bmV3IFVwLG89Zy5LYygpO28uT2IoKTspYT1vLlBiKCksWG8oTCxmLmprKCkud2koKS5yaShmLGEpKSxMLmErPSIgIjtyZXR1cm4gR3NlKEwsTC5hLmxlbmd0aC0xKX1pZihDPW8yKGlvLHQpLk1sKCksIUMuZGMoKSl7Zm9yKEU9Qy5LYygpO0UuT2IoKTspaWYodz1sKEUuUGIoKSwxNTYpLHcuZmsobikpdHJ5e2lmKEw9dy5qaygpLndpKCkucmkodyxuKSxMIT1udWxsKXJldHVybiBMfWNhdGNoKEIpe2lmKEI9YnMoQiksIURlKEIsMTAzKSl0aHJvdyB1ZShCKX10aHJvdyB1ZShuZXcgWW4oIkludmFsaWQgdmFsdWU6ICciK24rIicgZm9yIGRhdGF0eXBlIDoiK3QueGUoKSkpfXJldHVybiBsKHQsODQ3KS5vaygpLG49PW51bGw/bnVsbDpEZShuLDE4MCk/IiIrbChuLDE4MCkuYTpiaChuKT09Y0s/Q250KGpNWzBdLGwobiwyMDYpKTp4YyhuKX1mdW5jdGlvbiB6TW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEM7Zm9yKEU9bmV3IG9zLGc9bmV3IG9zLG89bmV3IEcoZSk7by5hPG8uYy5jLmxlbmd0aDspcj1sKHJlKG8pLDEzMSksci52PTAsci5uPXIuaS5jLmxlbmd0aCxyLnU9ci50LmMubGVuZ3RoLHIubj09MCYmQ3MoRSxyLEUuYy5iLEUuYyksci51PT0wJiZyLnIuYS5nYygpPT0wJiZDcyhnLHIsZy5jLmIsZy5jKTtmb3IoZj0tMTtFLmIhPTA7KWZvcihyPWwoa3VlKEUsMCksMTMxKSxuPW5ldyBHKHIudCk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDI3NCksQz10LmIsQy52PWIuTWF0aC5tYXgoQy52LHIudisxKSxmPWIuTWF0aC5tYXgoZixDLnYpLC0tQy5uLEMubj09MCYmQ3MoRSxDLEUuYy5iLEUuYyk7aWYoZj4tMSl7Zm9yKGE9UnIoZywwKTthLmIhPWEuZC5jOylyPWwoQnIoYSksMTMxKSxyLnY9Zjtmb3IoO2cuYiE9MDspZm9yKHI9bChrdWUoZywwKSwxMzEpLG49bmV3IEcoci5pKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMjc0KSx3PXQuYSx3LnIuYS5nYygpPT0wJiYody52PWIuTWF0aC5taW4ody52LHIudi0xKSwtLXcudSx3LnU9PTAmJkNzKGcsdyxnLmMuYixnLmMpKX19ZnVuY3Rpb24gcU1uKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDO2ZvcihFPW5ldyBidCxnPW5ldyBidCxmPW5ldyBHKGUpO2YuYTxmLmMuYy5sZW5ndGg7KWE9bChyZShmKSwxMTgpLEgoYSxhLmYuYy5sZW5ndGgpLHEoYSxhLmsuYy5sZW5ndGgpLGEuZD09MCYmJG4oRS5jLGEpLGEuaT09MCYmYS5lLmI9PTAmJiRuKGcuYyxhKTtmb3Iocj0tMTtFLmMubGVuZ3RoIT0wOylmb3IoYT1sKHQyKEUsMCksMTE4KSxuPW5ldyBHKGEuayk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEzMiksQz10LmIsWShDLGIuTWF0aC5tYXgoQy5vLGEubysxKSkscj1iLk1hdGgubWF4KHIsQy5vKSxIKEMsQy5kLTEpLEMuZD09MCYmJG4oRS5jLEMpO2lmKHI+LTEpe2ZvcihvPW5ldyBHKGcpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwxMTgpLGEubz1yO2Zvcig7Zy5jLmxlbmd0aCE9MDspZm9yKGE9bCh0MihnLDApLDExOCksbj1uZXcgRyhhLmYpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMzIpLHc9dC5hLCEody5lLmI+MCkmJihZKHcsYi5NYXRoLm1pbih3Lm8sYS5vLTEpKSxxKHcsdy5pLTEpLHcuaT09MCYmJG4oZy5jLHcpKX19ZnVuY3Rpb24gTXZ0KGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7cmV0dXJuIHc9Z3MsZj0hMSxnPUxrZShlLG1hKG5ldyBsdCh0LmEsdC5iKSxlKSxPaShuZXcgbHQobi5hLG4uYiksYSksbWEobmV3IGx0KHIuYSxyLmIpLG4pKSxvPSEhZyYmIShiLk1hdGguYWJzKGcuYS1lLmEpPD1adyYmYi5NYXRoLmFicyhnLmItZS5iKTw9Wnd8fGIuTWF0aC5hYnMoZy5hLXQuYSk8PVp3JiZiLk1hdGguYWJzKGcuYi10LmIpPD1adyksZz1Ma2UoZSxtYShuZXcgbHQodC5hLHQuYiksZSksbixhKSxnJiYoKGIuTWF0aC5hYnMoZy5hLWUuYSk8PVp3JiZiLk1hdGguYWJzKGcuYi1lLmIpPD1adyk9PShiLk1hdGguYWJzKGcuYS10LmEpPD1adyYmYi5NYXRoLmFicyhnLmItdC5iKTw9WncpfHxvP3c9Yi5NYXRoLm1pbih3LGVBKG1hKGcsbikpKTpmPSEwKSxnPUxrZShlLG1hKG5ldyBsdCh0LmEsdC5iKSxlKSxyLGEpLGcmJihmfHwoYi5NYXRoLmFicyhnLmEtZS5hKTw9WncmJmIuTWF0aC5hYnMoZy5iLWUuYik8PVp3KT09KGIuTWF0aC5hYnMoZy5hLXQuYSk8PVp3JiZiLk1hdGguYWJzKGcuYi10LmIpPD1adyl8fG8pJiYodz1iLk1hdGgubWluKHcsZUEobWEoZyxyKSkpKSx3fWZ1bmN0aW9uIER2dChlKXtzdyhlLG5ldyBYbShVeihudyhadih0dyhldyhuZXcgeDEsTWIpLEEzdCksIk1pbmltaXplcyB0aGUgc3RyZXNzIHdpdGhpbiBhIGxheW91dCB1c2luZyBzdHJlc3MgbWFqb3JpemF0aW9uLiBTdHJlc3MgZXhpc3RzIGlmIHRoZSBldWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiBhIHBhaXIgb2Ygbm9kZXMgZG9lc24ndCBtYXRjaCB0aGVpciBncmFwaCB0aGVvcmV0aWMgZGlzdGFuY2UsIHRoYXQgaXMsIHRoZSBzaG9ydGVzdCBwYXRoIGJldHdlZW4gdGhlIHR3byBub2Rlcy4gVGhlIG1ldGhvZCBhbGxvd3MgdG8gc3BlY2lmeSBpbmRpdmlkdWFsIGVkZ2UgbGVuZ3Rocy4iKSxuZXcgeTEpLFl1KSkpLGd0KGUsTWIsaEwsSXQobEFlKSksZ3QoZSxNYixjRywoSG4oKSwhMCkpLGd0KGUsTWIseDYsSXQoZDh0KSksZ3QoZSxNYixQeCxJdChnOHQpKSxndChlLE1iLE54LEl0KHA4dCkpLGd0KGUsTWIsZlQsSXQoZjh0KSksZ3QoZSxNYixmTCxJdChmQWUpKSxndChlLE1iLGRULEl0KGI4dCkpLGd0KGUsTWIsUEVlLEl0KHVBZSkpLGd0KGUsTWIsRkVlLEl0KG9BZSkpLGd0KGUsTWIsUkVlLEl0KGNBZSkpLGd0KGUsTWIsakVlLEl0KGhBZSkpLGd0KGUsTWIsQkVlLEl0KFRLKSl9ZnVuY3Rpb24gSE1uKGUpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKHQ9bnVsbCxyPW5ldyBHKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyMzkpLHplKEwxKG4uZyxuLmRbMF0pLmEpLG4uYj1udWxsLG4uZSYmbi5lLmdjKCk+MCYmbi5jPT0wJiYoIXQmJih0PW5ldyBidCksJG4odC5jLG4pKTtpZih0KWZvcig7dC5jLmxlbmd0aCE9MDspe2lmKG49bCh0Mih0LDApLDIzOSksbi5iJiZuLmIuYy5sZW5ndGg+MCl7Zm9yKG89KCFuLmImJihuLmI9bmV3IGJ0KSxuZXcgRyhuLmIpKTtvLmE8by5jLmMubGVuZ3RoOylpZihhPWwocmUobyksMjM5KSxYSShMMShhLmcsYS5kWzBdKS5hKT09WEkoTDEobi5nLG4uZFswXSkuYSkpe2lmKGdjKGUsYSwwKT5nYyhlLG4sMCkpcmV0dXJuIG5ldyBjYShhLG4pfWVsc2UgaWYoemUoTDEoYS5nLGEuZFswXSkuYSk+emUoTDEobi5nLG4uZFswXSkuYSkpcmV0dXJuIG5ldyBjYShhLG4pfWZvcihnPSghbi5lJiYobi5lPW5ldyBidCksbi5lKS5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSwyMzkpLHc9KCFmLmImJihmLmI9bmV3IGJ0KSxmLmIpLEV5KDAsdy5jLmxlbmd0aCkseF8ody5jLDAsbiksZi5jPT13LmMubGVuZ3RoJiYkbih0LmMsZil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gVk1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZTtmb3IodC5VZygiSW50ZXJhY3RpdmUgY3Jvc3NpbmcgbWluaW1pemF0aW9uIiwxKSxmPTAsbz1uZXcgRyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwzMCksci5wPWYrKztmb3IoQj1JeGUoZSksdGU9bmV3IG8zZShCLmxlbmd0aCksYXZ0KG5ldyBJbChoZShsZShleHQsMSksUm4sMjMwLDAsW3RlXSkpLEIpLEo9MCxmPTAsYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KXtmb3Iocj1sKHJlKGEpLDMwKSxuPTAsTD0wLEM9bmV3IEcoci5hKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Iodz1sKHJlKEMpLDEwKSx3Lm4uYT4wJiYobis9dy5uLmErdy5vLmEvMiwrK0wpLFY9bmV3IEcody5qKTtWLmE8Vi5jLmMubGVuZ3RoOyl6PWwocmUoViksMTIpLHoucD1KKys7Zm9yKEw+MCYmKG4vPUwpLGZlPVdlKE5hLFpvLDI4LHIuYS5jLmxlbmd0aCwxNSwxKSxnPTAsRT1uZXcgRyhyLmEpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxMCksdy5wPWcrKyxmZVt3LnBdPU5Nbih3LG4pLHcuaz09KFpuKCksQWEpJiZydCh3LChmdCgpLEhMZSksZmVbdy5wXSk7Q24oKSxWcyhyLmEsbmV3IEZZZShmZSkpLGZtdCh0ZSxCLGYsITApLCsrZn10LlZnKCl9ZnVuY3Rpb24gbkwoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYodC5lPT01KXtDdnQoZSx0KTtyZXR1cm59aWYoRT10LCEoRS5iPT1udWxsfHxlLmI9PW51bGwpKXtmb3IoYzYoZSksZUwoZSksYzYoRSksZUwoRSksbj1XZShWcixkaSwyOCxlLmIubGVuZ3RoK0UuYi5sZW5ndGgsMTUsMSksQz0wLHI9MCxmPTA7cjxlLmIubGVuZ3RoJiZmPEUuYi5sZW5ndGg7KWlmKGE9ZS5iW3JdLG89ZS5iW3IrMV0sZz1FLmJbZl0sdz1FLmJbZisxXSxvPGcpbltDKytdPWUuYltyKytdLG5bQysrXT1lLmJbcisrXTtlbHNlIGlmKG8+PWcmJmE8PXcpZzw9YSYmbzw9dz9yKz0yOmc8PWE/KGUuYltyXT13KzEsZis9Mik6bzw9dz8obltDKytdPWEsbltDKytdPWctMSxyKz0yKToobltDKytdPWEsbltDKytdPWctMSxlLmJbcl09dysxLGYrPTIpO2Vsc2UgaWYodzxhKWYrPTI7ZWxzZSB0aHJvdyB1ZShuZXcgQWMoIlRva2VuI3N1YnRyYWN0UmFuZ2VzKCk6IEludGVybmFsIEVycm9yOiBbIitlLmJbcl0rIiwiK2UuYltyKzFdKyJdIC0gWyIrRS5iW2ZdKyIsIitFLmJbZisxXSsiXSIpKTtmb3IoO3I8ZS5iLmxlbmd0aDspbltDKytdPWUuYltyKytdLG5bQysrXT1lLmJbcisrXTtlLmI9V2UoVnIsZGksMjgsQywxNSwxKSxwdShuLDAsZS5iLDAsQyl9fWZ1bmN0aW9uIEl2dChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKGc9bDYodCwhMSwhMSksZmU9UU4oZyksciYmKGZlPUFOKGZlKSksTWU9emUoR2UoYXQodCwoSUEoKSxXMGUpKSkpLHRlPShtcihmZS5iIT0wKSxsKGZlLmEuYS5jLDgpKSxMPWwoZmYoZmUsMSksOCksZmUuYj4yPyhDPW5ldyBidCxyYShDLG5ldyBacChmZSwxLGZlLmIpKSxvPXZ3dChDLE1lK2UuYSksVGU9bmV3IEd1ZShvKSxwYyhUZSx0KSwkbihuLmMsVGUpKTpyP1RlPWwoY3IoZS5iLGNnKHQpKSwyNzIpOlRlPWwoY3IoZS5iLEViKHQpKSwyNzIpLHc9Y2codCksciYmKHc9RWIodCkpLGY9SDluKHRlLHcpLEU9TWUrZS5hLGYuYT8oRSs9Yi5NYXRoLmFicyh0ZS5iLUwuYiksSj1uZXcgbHQoTC5hLChMLmIrdGUuYikvMikpOihFKz1iLk1hdGguYWJzKHRlLmEtTC5hKSxKPW5ldyBsdCgoTC5hK3RlLmEpLzIsTC5iKSkscj9raShlLmQsdCxuZXcgbnhlKFRlLGYsSixFKSk6a2koZS5jLHQsbmV3IG54ZShUZSxmLEosRSkpLGtpKGUuYix0LFRlKSxWPSghdC5uJiYodC5uPW5ldyBudChlYyx0LDEsNykpLHQubiksej1uZXcgb3IoVik7ei5lIT16LmkuZ2MoKTspQj1sKGdyKHopLDEzNSksYT11UChlLEIsITAsMCwwKSwkbihuLmMsYSl9ZnVuY3Rpb24gVU1uKGUpe3ZhciB0LG4scixhLG8sZixnO2lmKCFlLkEuZGMoKSl7aWYoZS5BLkhjKChtaCgpLGlGKSkmJihsKFFvKGUuYiwoQ3QoKSxRbikpLDEyNykuaz0hMCxsKFFvKGUuYixEciksMTI3KS5rPSEwLHQ9ZS5xIT0oUmEoKSxUZykmJmUucSE9TXUsX3oobChRbyhlLmIsYXIpLDEyNyksdCksX3oobChRbyhlLmIsZXIpLDEyNyksdCksX3ooZS5nLHQpLGUuQS5IYyhDdikmJihsKFFvKGUuYixRbiksMTI3KS5qPSEwLGwoUW8oZS5iLERyKSwxMjcpLmo9ITAsbChRbyhlLmIsYXIpLDEyNykuaz0hMCxsKFFvKGUuYixlciksMTI3KS5rPSEwLGUuZy5rPSEwKSksZS5BLkhjKHJGKSlmb3IoZS5hLmo9ITAsZS5hLms9ITAsZS5nLmo9ITAsZS5nLms9ITAsZz1lLkIuSGMoKFpsKCksRk0pKSxhPWV1ZSgpLG89MCxmPWEubGVuZ3RoO288ZjsrK28pcj1hW29dLG49bChRbyhlLmksciksMzE0KSxuJiYoJDhlKHIpPyhuLmo9ITAsbi5rPSEwKToobi5qPSFnLG4uaz0hZykpO2UuQS5IYyhBNCkmJmUuQi5IYygoWmwoKSxhRikpJiYoZS5nLmo9ITAsZS5nLmo9ITAsZS5hLmp8fChlLmEuaj0hMCxlLmEuaz0hMCxlLmEuZT0hMCkpfX1mdW5jdGlvbiBHTW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2ZvcihyPW5ldyBHKGUuZS5iKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj1sKHJlKHIpLDMwKSxvPW5ldyBHKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspaWYoYT1sKHJlKG8pLDEwKSx6PWUuaVthLnBdLEU9ei5hLmUsdz16LmQuZSxhLm4uYj1FLGZlPXctRS1hLm8uYix0PXlsZShhKSxCPShCeSgpLChhLnE/YS5xOihDbigpLENuKCksbWcpKS5fYigoTnQoKSxnMykpP0w9bChRKGEsZzMpLDIwMyk6TD1sKFEoZW8oYSksZU0pLDIwMyksTCksdCYmKEI9PUc2fHxCPT1VNikmJihhLm8uYis9ZmUpLHQmJihCPT1iZGV8fEI9PUc2fHxCPT1VNikpe2ZvcihKPW5ldyBHKGEuaik7Si5hPEouYy5jLmxlbmd0aDspVj1sKHJlKEopLDEyKSwoQ3QoKSxKdSkuSGMoVi5qKSYmKEM9bChjcihlLmssViksMTI1KSxWLm4uYj1DLmUtRSk7Zm9yKGc9bmV3IEcoYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksNzIpLHRlPWwoUShhLGQzKSwyMSksdGUuSGMoKHF5KCkscWYpKT9mLm4uYis9ZmU6dGUuSGMoRWcpJiYoZi5uLmIrPWZlLzIpOyhCPT1HNnx8Qj09VTYpJiZPYyhhLChDdCgpLERyKSkuSmMobmV3IFpZZShmZSkpfX1mdW5jdGlvbiBLTW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihFPW5ldyBidCx3PW5ldyBHKHQuYSk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGY9bChyZSh3KSwxMCksQj1PYyhmLChDdCgpLGFyKSkuS2MoKTtCLk9iKCk7KWZvcihMPWwoQi5QYigpLDEyKSxhPW5ldyBHKEwuZyk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSwhKCFEbyhyKSYmci5jLmkuYz09ci5kLmkuY3x8RG8ocil8fHIuZC5pLmMhPW4pJiYkbihFLmMscik7Zm9yKGc9bGYobi5hKS5LYygpO2cuT2IoKTspZm9yKGY9bChnLlBiKCksMTApLEI9T2MoZiwoQ3QoKSxlcikpLktjKCk7Qi5PYigpOylmb3IoTD1sKEIuUGIoKSwxMiksYT1uZXcgRyhMLmUpO2EuYTxhLmMuYy5sZW5ndGg7KWlmKHI9bChyZShhKSwxOCksISghRG8ocikmJnIuYy5pLmM9PXIuZC5pLmN8fERvKHIpfHxyLmMuaS5jIT10KSYmRS5jLmxlbmd0aCE9MCl7Zm9yKEM9bmV3IFVhKEUsRS5jLmxlbmd0aCksbz0obXIoQy5iPjApLGwoQy5hLlhiKEMuYz0tLUMuYiksMTgpKTtvIT1yJiZDLmI+MDspZS5hW28ucF09ITAsZS5hW3IucF09ITAsbz0obXIoQy5iPjApLGwoQy5hLlhiKEMuYz0tLUMuYiksMTgpKTtDLmI+MCYmcGgoQyl9fWZ1bmN0aW9uIE92dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIsejtpZighZS5iKXJldHVybiExO2ZvcihmPW51bGwsQj1udWxsLHc9bmV3IEJvZShudWxsLG51bGwpLGE9MSx3LmFbMV09ZS5iLEw9dztMLmFbYV07KUU9YSxnPUIsQj1MLEw9TC5hW2FdLHI9ZS5hLk5lKHQsTC5kKSxhPXI8MD8wOjEscj09MCYmKCFuLmN8fEpjKEwuZSxuLmQpKSYmKGY9TCksIShMJiZMLmIpJiYhb3koTC5hW2FdKSYmKG95KEwuYVsxLWFdKT9CPUIuYVtFXT1FVihMLGEpOm95KEwuYVsxLWFdKXx8KHo9Qi5hWzEtRV0seiYmKCFveSh6LmFbMS1FXSkmJiFveSh6LmFbRV0pPyhCLmI9ITEsei5iPSEwLEwuYj0hMCk6KG89Zy5hWzFdPT1CPzE6MCxveSh6LmFbRV0pP2cuYVtvXT11Y3QoQixFKTpveSh6LmFbMS1FXSkmJihnLmFbb109RVYoQixFKSksTC5iPWcuYVtvXS5iPSEwLGcuYVtvXS5hWzBdLmI9ITEsZy5hW29dLmFbMV0uYj0hMSkpKSk7cmV0dXJuIGYmJihuLmI9ITAsbi5kPWYuZSxMIT1mJiYoQz1uZXcgQm9lKEwuZCxMLmUpLFd4bihlLHcsZixDKSxCPT1mJiYoQj1DKSksQi5hW0IuYVsxXT09TD8xOjBdPUwuYVtMLmFbMF0/MDoxXSwtLWUuYyksZS5iPXcuYVsxXSxlLmImJihlLmIuYj0hMSksbi5ifWZ1bmN0aW9uIFdNbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKGE9bmV3IEcoZS5hLmEuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSw2MCksdz1yLmMuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksNjApLHIuYSE9Zy5hJiYoVWcoZS5hLmQpP0w9ZS5hLmcuZmYocixnKTpMPWUuYS5nLmdmKHIsZyksbz1yLmIuYStyLmQuYitMLWcuYi5hLG89Yi5NYXRoLmNlaWwobyksbz1iLk1hdGgubWF4KDAsbykscTZlKHIsZyk/KGY9aHcobmV3IFNtLGUuZCksRT11YShiLk1hdGguY2VpbChnLmIuYS1yLmIuYSkpLHQ9RS0oZy5iLmEtci5iLmEpLEM9aXgocikuYSxuPXIsQ3x8KEM9aXgoZykuYSx0PS10LG49ZyksQyYmKG4uYi5hLT10LEMubi5hLT10KSxwMChzMChpMChhMChyMChuZXcgX2YsYi5NYXRoLm1heCgwLEUpKSwxKSxmKSxlLmNbci5hLmRdKSkscDAoczAoaTAoYTAocjAobmV3IF9mLGIuTWF0aC5tYXgoMCwtRSkpLDEpLGYpLGUuY1tnLmEuZF0pKSk6KEI9MSwoRGUoci5nLDE1NCkmJkRlKGcuZywxMCl8fERlKGcuZywxNTQpJiZEZShyLmcsMTApKSYmKEI9MikscDAoczAoaTAoYTAocjAobmV3IF9mLHVhKG8pKSxCKSxlLmNbci5hLmRdKSxlLmNbZy5hLmRdKSkpKX1mdW5jdGlvbiBOdnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2lmKG4pZm9yKHI9LTEsQz1uZXcgVWEodCwwKTtDLmI8Qy5kLmdjKCk7KXtpZihnPShtcihDLmI8Qy5kLmdjKCkpLGwoQy5kLlhiKEMuYz1DLmIrKyksMTApKSxMPWUuY1tnLmMucF1bZy5wXS5hLEw9PW51bGwpe2ZvcihmPXIrMSxvPW5ldyBVYSh0LEMuYik7by5iPG8uZC5nYygpOylpZihCPXlobihlLChtcihvLmI8by5kLmdjKCkpLGwoby5kLlhiKG8uYz1vLmIrKyksMTApKSkuYSxCIT1udWxsKXtmPShucihCKSxCKTticmVha31MPShyK2YpLzIsZS5jW2cuYy5wXVtnLnBdLmE9TCxlLmNbZy5jLnBdW2cucF0uZD0obnIoTCksTCksZS5jW2cuYy5wXVtnLnBdLmI9MX1yPShucihMKSxMKX1lbHNle2ZvcihhPTAsRT1uZXcgRyh0KTtFLmE8RS5jLmMubGVuZ3RoOylnPWwocmUoRSksMTApLGUuY1tnLmMucF1bZy5wXS5hIT1udWxsJiYoYT1iLk1hdGgubWF4KGEsemUoZS5jW2cuYy5wXVtnLnBdLmEpKSk7Zm9yKGErPTIsdz1uZXcgRyh0KTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTApLGUuY1tnLmMucF1bZy5wXS5hPT1udWxsJiYoTD1KbChlLmksMjQpKk1QKmEtMSxlLmNbZy5jLnBdW2cucF0uYT1MLGUuY1tnLmMucF1bZy5wXS5kPUwsZS5jW2cuYy5wXVtnLnBdLmI9MSl9fWZ1bmN0aW9uIFlNbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcighbiYmKG49aXluKHQucS5nZXRUaW1lem9uZU9mZnNldCgpKSksYT0odC5xLmdldFRpbWV6b25lT2Zmc2V0KCktbi5hKSo2ZTQsZz1uZXcgS3llKGJvKFpjKHQucS5nZXRUaW1lKCkpLGEpKSx3PWcsZy5xLmdldFRpbWV6b25lT2Zmc2V0KCkhPXQucS5nZXRUaW1lem9uZU9mZnNldCgpJiYoYT4wP2EtPTg2NGU1OmErPTg2NGU1LHc9bmV3IEt5ZShibyhaYyh0LnEuZ2V0VGltZSgpKSxhKSkpLEM9bmV3IFM1LEU9ZS5hLmxlbmd0aCxvPTA7bzxFOylpZihyPWNvKGUuYSxvKSxyPj05NyYmcjw9MTIyfHxyPj02NSYmcjw9OTApe2ZvcihmPW8rMTtmPEUmJmNvKGUuYSxmKT09cjsrK2YpO1dJbihDLHIsZi1vLGcsdyxuKSxvPWZ9ZWxzZSBpZihyPT0zOSl7aWYoKytvLG88RSYmY28oZS5hLG8pPT0zOSl7Qy5hKz0iJyIsKytvO2NvbnRpbnVlfWZvcihMPSExOyFMOyl7Zm9yKGY9bztmPEUmJmNvKGUuYSxmKSE9Mzk7KSsrZjtpZihmPj1FKXRocm93IHVlKG5ldyBZbigiTWlzc2luZyB0cmFpbGluZyAnIikpO2YrMTxFJiZjbyhlLmEsZisxKT09Mzk/KytmOkw9ITAsaGkoQyx0ZihlLmEsbyxmKSksbz1mKzF9fWVsc2UgQy5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLCsrbztyZXR1cm4gQy5hfWZ1bmN0aW9uIFhNbigpe3dpKEQ0LG5ldyBvcmUpLHdpKG1pLG5ldyBocmUpLHdpKFZmLG5ldyBncmUpLHdpKGwxLG5ldyBVMCksd2kodHBlLG5ldyB6Uyksd2koVFksbmV3IFQxKSx3aSh3cCxuZXcgQzEpLHdpKFJNLG5ldyBwcmUpLHdpKHVGLG5ldyBBJCksd2koWWdlLG5ldyBMJCksd2koWGIsbmV3IE0kKSx3aShVZixuZXcgRCQpLHdpKHUxLG5ldyBJJCksd2koazMsbmV3IE8kKSx3aShJNCxuZXcgVjApLHdpKGRsLG5ldyBubCksd2koTTQsbmV3IHNyZSksd2koWWMsbmV3IGFyZSksd2koV28sbmV3IHJsKSx3aShadSxuZXcgQlMpLHdpKE5zLG5ldyBOJCksd2kobGUoQWwsMSksbmV3IFAkKSx3aShqeCxuZXcgZzgpLHdpKFBMLG5ldyBjcmUpLHdpKGNLLG5ldyBhayksd2kobkJlLG5ldyB1cmUpLHdpKHRhLG5ldyBCJCksd2kobVBlLG5ldyBscmUpLHdpKHlQZSxuZXcgRlMpLHdpKEhQZSxuZXcgRiQpLHdpKENZLG5ldyBNSSksd2koX1QsbmV3IFJTKSx3aShybyxuZXcgZnJlKSx3aShxU2UsbmV3IGRyZSksd2kocjMsbmV3IERJKSx3aShIU2UsbmV3IGpTKSx3aShqUGUsbmV3IEUxKSx3aShyQmUsbmV3IG9rKSx3aShpMyxuZXcgY2spLHdpKHp0LG5ldyBJSSksd2kod1BlLG5ldyB4bSksd2koaUJlLG5ldyAkUyl9ZnVuY3Rpb24gUHZ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKGU9PW51bGwpcmV0dXJuIHVsO2lmKHc9dC5hLnpjKGUsdCksdyE9bnVsbClyZXR1cm4iWy4uLl0iO2ZvcihuPW5ldyBIbShDbywiWyIsIl0iKSxhPWUsbz0wLGY9YS5sZW5ndGg7bzxmOysrbylyPWFbb10sciE9bnVsbCYmYmgocikuaSY0P0FycmF5LmlzQXJyYXkocikmJihDPWdOKHIpLCEoQz49MTQmJkM8PTE2KSk/dC5hLl9iKHIpPyhuLmE/aGkobi5hLG4uYik6bi5hPW5ldyBUaChuLmQpLE5fKG4uYSwiWy4uLl0iKSk6KGc9am0ociksRT1uZXcgVV8odCksSmcobixQdnQoZyxFKSkpOkRlKHIsMTgzKT9KZyhuLFNrbihsKHIsMTgzKSkpOkRlKHIsMTk1KT9KZyhuLGh4bihsKHIsMTk1KSkpOkRlKHIsMjAxKT9KZyhuLHg5bihsKHIsMjAxKSkpOkRlKHIsMjExMSk/SmcobixmeG4obChyLDIxMTEpKSk6RGUociw1Myk/SmcobixDa24obChyLDUzKSkpOkRlKHIsMzc2KT9KZyhuLEhrbihsKHIsMzc2KSkpOkRlKHIsODQ2KT9KZyhuLFRrbihsKHIsODQ2KSkpOkRlKHIsMTA5KSYmSmcobixFa24obChyLDEwOSkpKTpKZyhuLHI9PW51bGw/dWw6eGMocikpO3JldHVybiBuLmE/bi5lLmxlbmd0aD09MD9uLmEuYTpuLmEuYSsoIiIrbi5lKTpuLmN9ZnVuY3Rpb24gSkUoZSx0KXt2YXIgbixyLGEsbztvPWUuRix0PT1udWxsPyhlLkY9bnVsbCxDRShlLG51bGwpKTooZS5GPShucih0KSx0KSxyPXBkKHQsY2woNjApKSxyIT0tMT8oYT0oR2EoMCxyLHQubGVuZ3RoKSx0LnN1YnN0cigwLHIpKSxwZCh0LGNsKDQ2KSk9PS0xJiYhdm4oYSxDeCkmJiF2bihhLFNMKSYmIXZuKGEsR0cpJiYhdm4oYSxfTCkmJiF2bihhLEFMKSYmIXZuKGEsTEwpJiYhdm4oYSxNTCkmJiF2bihhLERMKSYmKGE9cDV0KSxuPVJxKHQsY2woNjIpKSxuIT0tMSYmKGErPSIiKyhYbihuKzEsdC5sZW5ndGgrMSksdC5zdWJzdHIobisxKSkpLENFKGUsYSkpOihhPXQscGQodCxjbCg0NikpPT0tMSYmKHI9cGQodCxjbCg5MSkpLHIhPS0xJiYoYT0oR2EoMCxyLHQubGVuZ3RoKSx0LnN1YnN0cigwLHIpKSksIXZuKGEsQ3gpJiYhdm4oYSxTTCkmJiF2bihhLEdHKSYmIXZuKGEsX0wpJiYhdm4oYSxBTCkmJiF2bihhLExMKSYmIXZuKGEsTUwpJiYhdm4oYSxETCk/KGE9cDV0LHIhPS0xJiYoYSs9IiIrKFhuKHIsdC5sZW5ndGgrMSksdC5zdWJzdHIocikpKSk6YT10KSxDRShlLGEpLGE9PXQmJihlLkY9ZS5EKSkpLGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsNSxvLHQpKX1mdW5jdGlvbiBCdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZih3PXQubGVuZ3RoLTEsZz0oWG4odyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHcpKSxnPT05Myl7aWYoZj1wZCh0LGNsKDkxKSksZj49MClyZXR1cm4gYT1aNG4oZSwoR2EoMSxmLHQubGVuZ3RoKSx0LnN1YnN0cigxLGYtMSkpKSxDPShHYShmKzEsdyx0Lmxlbmd0aCksdC5zdWJzdHIoZisxLHctKGYrMSkpKSxDSW4oZSxDLGEpfWVsc2V7aWYobj0tMSxaU2U9PW51bGwmJihaU2U9bmV3IFJlZ0V4cCgiXFxkIikpLFpTZS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZykpJiYobj1oNGUodCxjbCg0Niksdy0xKSxuPj0wKSl7cj1sKE1vZShlLFRodChlLChHYSgxLG4sdC5sZW5ndGgpLHQuc3Vic3RyKDEsbi0xKSkpLCExKSw2MSksRT0wO3RyeXtFPU9oKChYbihuKzEsdC5sZW5ndGgrMSksdC5zdWJzdHIobisxKSksbG8sSWkpfWNhdGNoKEIpe3Rocm93IEI9YnMoQiksRGUoQiwxMzApPyhvPUIsdWUobmV3IG5WKG8pKSk6dWUoQil9aWYoRTxyLmdjKCkpcmV0dXJuIEw9ci5YYihFKSxEZShMLDc2KSYmKEw9bChMLDc2KS5tZCgpKSxsKEwsNTgpfWlmKG48MClyZXR1cm4gbChNb2UoZSxUaHQoZSwoWG4oMSx0Lmxlbmd0aCsxKSx0LnN1YnN0cigxKSkpLCExKSw1OCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gUU1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3IodC5VZygiTGFiZWwgZHVtbXkgaW5zZXJ0aW9ucyIsMSksTD1uZXcgYnQsZj16ZShHZShRKGUsKE50KCksSDYpKSkpLEU9emUoR2UoUShlLHk0KSkpLEM9bChRKGUsUmgpLDg4KSx6PW5ldyBHKGUuYSk7ei5hPHouYy5jLmxlbmd0aDspZm9yKEI9bChyZSh6KSwxMCksbz1uZXcgaHIoZHIocXMoQikuYS5LYygpLG5ldyBqKSk7anIobyk7KWlmKGE9bCh4cihvKSwxOCksYS5jLmkhPWEuZC5pJiZac2UoYS5iLEg4dCkpe2ZvcihKPXZ3bihhKSxWPWVnKGEuYi5jLmxlbmd0aCksbj1BVG4oZSxhLEosViksJG4oTC5jLG4pLHI9bi5vLGc9bmV3IFVhKGEuYiwwKTtnLmI8Zy5kLmdjKCk7KXc9KG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSw3MikpLHFlKFEodyxqZCkpPT09cWUoKEYxKCksbkMpKSYmKEM9PShKcygpLHdmKXx8Qz09UTE/KHIuYSs9dy5vLmErRSxyLmI9Yi5NYXRoLm1heChyLmIsdy5vLmIpKTooci5hPWIuTWF0aC5tYXgoci5hLHcuby5hKSxyLmIrPXcuby5iK0UpLCRuKFYuYyx3KSxwaChnKSk7Qz09KEpzKCksd2YpfHxDPT1RMT8oci5hLT1FLHIuYis9ZitKKTpyLmIrPWYtRStKfXJhKGUuYSxMKSx0LlZnKCl9ZnVuY3Rpb24gSk1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7aWYoZS5jPWUuZSxWPUJ0KFEodCwoTnQoKSxVa3QpKSksej1WPT1udWxsfHwobnIoViksViksbz1sKFEodCwoZnQoKSxMdSkpLDIxKS5IYygoSG8oKSx2ZikpLGE9bChRKHQsTXMpLDEwMSksbj0hKGE9PShSYSgpLFR2KXx8YT09VGd8fGE9PU11KSx6JiYobnx8IW8pKXtmb3IoTD1uZXcgRyh0LmEpO0wuYTxMLmMuYy5sZW5ndGg7KUU9bChyZShMKSwxMCksRS5wPTA7Zm9yKEI9bmV3IGJ0LEM9bmV3IEcodC5hKTtDLmE8Qy5jLmMubGVuZ3RoOylpZihFPWwocmUoQyksMTApLHI9d210KGUsRSxudWxsKSxyKXtmb3Iodz1uZXcgbzdlLHBjKHcsdCkscnQodyxwcCxsKHIuYiwyMSkpLE81ZSh3LmQsdC5kKSxydCh3LHFULG51bGwpLGc9bChyLmEsMTUpLktjKCk7Zy5PYigpOylmPWwoZy5QYigpLDEwKSx2dCh3LmEsZiksZi5hPXc7Qi5GYyh3KX1vJiYocWUoUSh0LGc0KSk9PT1xZSgoS20oKSxvMWUpKT9lLmM9ZS5iOnFlKFEodCxnNCkpPT09cWUoYzFlKT9lLmM9ZS5kOmUuYz1lLmEpfWVsc2UgQj1uZXcgSWwoaGUobGUoTjh0LDEpLE0zdCwzNiwwLFt0XSkpO3JldHVybiBxZShRKHQsZzQpKSE9PXFlKChLbSgpLGM0KSkmJihDbigpLEIuamQobmV3IG9qKSksQn1mdW5jdGlvbiBaRShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7aWYoRT1lLmMsIXQmJih0PUxQZSksZS5jPXQsZS5EYiY0JiYhKGUuRGImMSkmJih3PW5ldyBfYShlLDEsMixFLGUuYyksbj9uLm5qKHcpOm49dyksRSE9dCl7aWYoRGUoZS5DYiwyOTIpKWUuRGI+PjE2PT0tMTA/bj1sKGUuQ2IsMjkyKS5Zayh0LG4pOmUuRGI+PjE2PT0tMTUmJighdCYmKHQ9KFRuKCksdGQpKSwhRSYmKEU9KFRuKCksdGQpKSxlLkNiLlloKCkmJih3PW5ldyBaZyhlLkNiLDEsMTMsRSx0LGYyKFhsKGwoZS5DYiw2MikpLGUpLCExKSxuP24ubmoodyk6bj13KSk7ZWxzZSBpZihEZShlLkNiLDkwKSllLkRiPj4xNj09LTIzJiYoRGUodCw5MCl8fCh0PShUbigpLEtmKSksRGUoRSw5MCl8fChFPShUbigpLEtmKSksZS5DYi5ZaCgpJiYodz1uZXcgWmcoZS5DYiwxLDEwLEUsdCxmMihkdShsKGUuQ2IsMjkpKSxlKSwhMSksbj9uLm5qKHcpOm49dykpO2Vsc2UgaWYoRGUoZS5DYiw0NTcpKWZvcihnPWwoZS5DYiw4NTApLGY9KCFnLmImJihnLmI9bmV3IFB6KG5ldyBWaWUpKSxnLmIpLG89KHI9bmV3IHFtKG5ldyBTcihmLmEpLmEpLG5ldyBCeihyKSk7by5hLmI7KWE9bChOdyhvLmEpLmxkKCksODkpLG49WkUoYSxTVShhLGcpLG4pfXJldHVybiBufWZ1bmN0aW9uIFpNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKGY9UnQoQnQoYXQoZSwoTnQoKSxiNCkpKSksQj1sKGF0KGUsdjQpLDIxKSx3PSExLEU9ITEsTD1uZXcgb3IoKCFlLmMmJihlLmM9bmV3IG50KEhsLGUsOSw5KSksZS5jKSk7TC5lIT1MLmkuZ2MoKSYmKCF3fHwhRSk7KXtmb3Iobz1sKGdyKEwpLDEyMyksZz0wLGE9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbKCFvLmQmJihvLmQ9bmV3IExuKGpzLG8sOCw1KSksby5kKSwoIW8uZSYmKG8uZT1uZXcgTG4oanMsbyw3LDQpKSxvLmUpXSkpKTtqcihhKSYmKHI9bCh4cihhKSw3NCksQz1mJiZxdyhyKSYmUnQoQnQoYXQocixndikpKSxuPWd2dCgoIXIuYiYmKHIuYj1uZXcgTG4oX3Isciw0LDcpKSxyLmIpLG8pP2U9PWRzKGJjKGwoT2UoKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jKSwwKSw4NCkpKTplPT1kcyhiYyhsKE9lKCghci5iJiYoci5iPW5ldyBMbihfcixyLDQsNykpLHIuYiksMCksODQpKSksISgoQ3x8bikmJigrK2csZz4xKSkpOyk7KGc+MHx8Qi5IYygoUmwoKSx2cCkpJiYoIW8ubiYmKG8ubj1uZXcgbnQoZWMsbywxLDcpKSxvLm4pLmk+MCkmJih3PSEwKSxnPjEmJihFPSEwKX13JiZ0LkZjKChIbygpLHZmKSksRSYmdC5GYygoSG8oKSxVTCkpfWZ1bmN0aW9uIEZ2dChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7aWYoQj1sKGF0KGUsKHBpKCksa3YpKSwyMSksQi5kYygpKXJldHVybiBudWxsO2lmKGc9MCxmPTAsQi5IYygobWgoKSxpRikpKXtmb3IoQz1sKGF0KGUsX00pLDEwMSkscj0yLG49MixhPTIsbz0yLHQ9ZHMoZSk/bChhdChkcyhlKSx4diksODgpOmwoYXQoZSx4diksODgpLEU9bmV3IG9yKCghZS5jJiYoZS5jPW5ldyBudChIbCxlLDksOSkpLGUuYykpO0UuZSE9RS5pLmdjKCk7KWlmKHc9bChncihFKSwxMjMpLEw9bChhdCh3LHM3KSw2NCksTD09KEN0KCksUGMpJiYoTD1Fa2Uodyx0KSxIaSh3LHM3LEwpKSxDPT0oUmEoKSxNdSkpc3dpdGNoKEwuZyl7Y2FzZSAxOnI9Yi5NYXRoLm1heChyLHcuaSt3LmcpO2JyZWFrO2Nhc2UgMjpuPWIuTWF0aC5tYXgobix3Lmordy5mKTticmVhaztjYXNlIDM6YT1iLk1hdGgubWF4KGEsdy5pK3cuZyk7YnJlYWs7Y2FzZSA0Om89Yi5NYXRoLm1heChvLHcuait3LmYpfWVsc2Ugc3dpdGNoKEwuZyl7Y2FzZSAxOnIrPXcuZysyO2JyZWFrO2Nhc2UgMjpuKz13LmYrMjticmVhaztjYXNlIDM6YSs9dy5nKzI7YnJlYWs7Y2FzZSA0Om8rPXcuZisyfWc9Yi5NYXRoLm1heChyLGEpLGY9Yi5NYXRoLm1heChuLG8pfXJldHVybiBHdyhlLGcsZiwhMCwhMCl9ZnVuY3Rpb24gU2xlKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZTtmb3IoVGU9bCh5YyhsVihGaShuZXcgYm4obnVsbCxuZXcga24odC5kLDE2KSksbmV3IENZZShuKSksbmV3IFNZZShuKSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLEw9SWksQz1sbyx3PW5ldyBHKHQuYi5qKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTIpLGcuaj09biYmKEw9Yi5NYXRoLm1pbihMLGcucCksQz1iLk1hdGgubWF4KEMsZy5wKSk7aWYoTD09SWkpZm9yKGY9MDtmPFRlLmdjKCk7ZisrKUI2ZShsKFRlLlhiKGYpLDEwNSksbixmKTtlbHNlIGZvcihNZT1XZShWcixkaSwyOCxhLmxlbmd0aCwxNSwxKSxZZG4oTWUsTWUubGVuZ3RoKSxmZT1UZS5LYygpO2ZlLk9iKCk7KXtmb3IodGU9bChmZS5QYigpLDEwNSksbz1sKGNyKGUuYix0ZSksMTgzKSxFPTAsSj1MO0o8PUM7SisrKW9bSl0mJihFPWIuTWF0aC5tYXgoRSxyW0pdKSk7aWYodGUuaSl7Zm9yKHo9dGUuaS5jLCRlPW5ldyBLcyxCPTA7QjxhLmxlbmd0aDtCKyspYVt6XVtCXSYmbmEoJGUscHQoTWVbQl0pKTtmb3IoO1cwKCRlLHB0KEUpKTspKytFfWZvcihCNmUodGUsbixFKSxWPUw7Vjw9QztWKyspb1tWXSYmKHJbVl09RSsxKTt0ZS5pJiYoTWVbdGUuaS5jXT1FKX19ZnVuY3Rpb24gZURuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3IoYT1udWxsLHI9bmV3IEcodC5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTApLHlsZShuKT9vPShnPWh3KHJPKG5ldyBTbSxuKSxlLmYpLHc9aHcock8obmV3IFNtLG4pLGUuZiksRT1uZXcgRDVlKG4sITAsZyx3KSxDPW4uby5iLEw9KEJ5KCksKG4ucT9uLnE6KENuKCksQ24oKSxtZykpLl9iKChOdCgpLGczKSk/Qj1sKFEobixnMyksMjAzKTpCPWwoUShlbyhuKSxlTSksMjAzKSxCKSx6PTFlNCxMPT1VNiYmKHo9MSksVj1wMChzMChpMChyMChhMChuZXcgX2YseiksdWEoYi5NYXRoLmNlaWwoQykpKSxnKSx3KSksTD09RzYmJm5hKGUuZCxWKSx2bXQoZSxsZihPYyhuLChDdCgpLGVyKSkpLEUpLHZtdChlLE9jKG4sYXIpLEUpLEUpOm89KEo9aHcock8obmV3IFNtLG4pLGUuZiksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKG4uaiwxNikpLG5ldyBRZWUpLG5ldyBWZXQoZSxKKSksbmV3IEQ1ZShuLCExLEosSikpLGUuaVtuLnBdPW8sYSYmKGY9YS5jLmQuYStqNShlLm4sYS5jLG4pK24uZC5kLGEuYnx8KGYrPWEuYy5vLmIpLHAwKHMwKGkwKGEwKHIwKG5ldyBfZix1YShiLk1hdGguY2VpbChmKSkpLDApLGEuZCksby5hKSkpLGE9b31mdW5jdGlvbiB0RG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHo7Zm9yKG89bmV3IG4ydCh0KSxMPU1TbihlLHQsbyksej1iLk1hdGgubWF4KHplKEdlKFEodCwoTnQoKSx4MikpKSksMSksQz1uZXcgRyhMLmEpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSw0Miksdz1uZHQobChFLmEsOCksbChFLmIsOCkseikseT0hMCx5PXkmZ3cobixuZXcgbHQody5jLHcuZCkpLHk9eSZndyhuLGR3KG5ldyBsdCh3LmMsdy5kKSx3LmIsMCkpLHk9eSZndyhuLGR3KG5ldyBsdCh3LmMsdy5kKSwwLHcuYSkpLHkmZ3cobixkdyhuZXcgbHQody5jLHcuZCksdy5iLHcuYSkpO3N3aXRjaChCPW8uZCxnPW5kdChsKEwuYi5hLDgpLGwoTC5iLmIsOCkseiksQj09KEN0KCksZXIpfHxCPT1hcj8oci5jW0IuZ109Yi5NYXRoLm1pbihyLmNbQi5nXSxnLmQpLHIuYltCLmddPWIuTWF0aC5tYXgoci5iW0IuZ10sZy5kK2cuYSkpOihyLmNbQi5nXT1iLk1hdGgubWluKHIuY1tCLmddLGcuYyksci5iW0IuZ109Yi5NYXRoLm1heChyLmJbQi5nXSxnLmMrZy5iKSksYT1pYSxmPW8uYy5pLmQsQi5nKXtjYXNlIDQ6YT1mLmM7YnJlYWs7Y2FzZSAyOmE9Zi5iO2JyZWFrO2Nhc2UgMTphPWYuYTticmVhaztjYXNlIDM6YT1mLmR9cmV0dXJuIHIuYVtCLmddPWIuTWF0aC5tYXgoci5hW0IuZ10sYSksb31mdW5jdGlvbiBuRG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO2c9bChjcih0LmMsZSksNDY4KSxUZT10LmEuYyx3PXQuYS5jK3QuYS5iLGFuPWcuZixCbj1nLmEsZj1hbjxCbixKPW5ldyBsdChUZSxhbiksTWU9bmV3IGx0KHcsQm4pLGE9KFRlK3cpLzIsdGU9bmV3IGx0KGEsYW4pLCRlPW5ldyBsdChhLEJuKSxvPWVDbihlLGFuLEJuKSxvdD1JMSh0LkIpLFN0PW5ldyBsdChhLG8pLGNuPUkxKHQuRCksbj1jeW4oaGUobGUoRWEsMSksZHQsOCwwLFtvdCxTdCxjbl0pKSx6PSExLGZlPXQuQi5pLGZlJiZmZS5jJiZnLmQmJihFPWYmJmZlLnA8ZmUuYy5hLmMubGVuZ3RoLTF8fCFmJiZmZS5wPjAsRT9FJiYoQj1mZS5wLGY/KytCOi0tQixMPWwoanQoZmUuYy5hLEIpLDEwKSxyPW8wdChMKSx6PSEoWHVlKHIsb3QsblswXSl8fERzdChyLG90LG5bMF0pKSk6ej0hMCksVj0hMSxaZT10LkQuaSxaZSYmWmUuYyYmZy5lJiYoQz1mJiZaZS5wPjB8fCFmJiZaZS5wPFplLmMuYS5jLmxlbmd0aC0xLEM/KEI9WmUucCxmPy0tQjorK0IsTD1sKGp0KFplLmMuYSxCKSwxMCkscj1vMHQoTCksVj0hKFh1ZShyLG5bMF0sY24pfHxEc3QocixuWzBdLGNuKSkpOlY9ITApLHomJlYmJnVpKGUuYSxTdCksenx8ZkEoZS5hLGhlKGxlKEVhLDEpLGR0LDgsMCxbSix0ZV0pKSxWfHxmQShlLmEsaGUobGUoRWEsMSksZHQsOCwwLFskZSxNZV0pKX1mdW5jdGlvbiByRG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO2Zvcih6PXQuYy5sZW5ndGgsQj0wLEw9bmV3IEcoZS5iKTtMLmE8TC5jLmMubGVuZ3RoOylpZihDPWwocmUoTCksMzApLGZlPUMuYSxmZS5jLmxlbmd0aCE9MCl7Zm9yKHRlPW5ldyBHKGZlKSxFPTAsVGU9bnVsbCxhPWwocmUodGUpLDEwKSxvPW51bGw7YTspe2lmKG89bChqdCh0LGEucCksMjYxKSxvLmM+PTApe2Zvcih3PW51bGwsZz1uZXcgVWEoQy5hLEUrMSk7Zy5iPGcuZC5nYygpJiYoZj0obXIoZy5iPGcuZC5nYygpKSxsKGcuZC5YYihnLmM9Zy5iKyspLDEwKSksdz1sKGp0KHQsZi5wKSwyNjEpLCEody5kPT1vLmQmJncuYzxvLmMpKTspdz1udWxsO3cmJihUZSYmKHJmKHIsYS5wLHB0KGwoanQocixhLnApLDE3KS5hLTEpKSxsKGp0KG4sVGUucCksMTUpLk1jKG8pKSxvPXh4bihvLGEseisrKSwkbih0LmMsbyksdnQobixuZXcgYnQpLFRlPyhsKGp0KG4sVGUucCksMTUpLkZjKG8pLHZ0KHIscHQoMSkpKTp2dChyLHB0KDApKSl9Vj1udWxsLHRlLmE8dGUuYy5jLmxlbmd0aCYmKFY9bChyZSh0ZSksMTApLEo9bChqdCh0LFYucCksMjYxKSxsKGp0KG4sYS5wKSwxNSkuRmMoSikscmYocixWLnAscHQobChqdChyLFYucCksMTcpLmErMSkpKSxvLmQ9QixvLmM9RSsrLFRlPWEsYT1WfSsrQn19ZnVuY3Rpb24gaURuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6O2lmKG89bChRKGUsKGZ0KCksemkpKSw3NCksISFvKXtmb3Iocj1lLmEsYT1uZXcgRW8obiksT2koYSxMOG4oZSkpLGJFKGUuZC5pLGUuYy5pKT8oQj1lLmMsTD1JYyhoZShsZShFYSwxKSxkdCw4LDAsW0IubixCLmFdKSksbWEoTCxuKSk6TD1JMShlLmMpLENzKHIsTCxyLmEsci5hLmEpLHo9STEoZS5kKSxRKGUsWTFlKSE9bnVsbCYmT2koeixsKFEoZSxZMWUpLDgpKSxDcyhyLHosci5jLmIsci5jKSxEeShyLGEpLGY9bDYobywhMCwhMCksd1YoZixsKE9lKCghby5iJiYoby5iPW5ldyBMbihfcixvLDQsNykpLG8uYiksMCksODQpKSx5VihmLGwoT2UoKCFvLmMmJihvLmM9bmV3IExuKF9yLG8sNSw4KSksby5jKSwwKSw4NCkpLGRQKHIsZiksQz1uZXcgRyhlLmIpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSw3MiksZz1sKFEoRSx6aSksMTM1KSxEdyhnLEUuby5hKSxNdyhnLEUuby5iKSxRaChnLEUubi5hK2EuYSxFLm4uYithLmIpLEhpKGcsKGx4KCksZzFlKSxCdChRKEUsZzFlKSkpO3c9bChRKGUsKE50KCksY2MpKSw3NSksdz8oRHkodyxhKSxIaShvLGNjLHcpKTpIaShvLGNjLG51bGwpLHQ9PShpcCgpLHM5KT9IaShvLGJwLHM5KTpIaShvLGJwLG51bGwpfX1mdW5jdGlvbiBSdnQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuO2lmKG4uYy5sZW5ndGghPTApe2ZvcihWPW5ldyBidCx6PW5ldyBHKG4pO3ouYTx6LmMuYy5sZW5ndGg7KUI9bChyZSh6KSwyNyksdnQoVixuZXcgbHQoQi5pLEIuaikpO2ZvcihyLmRoKHQsIkJlZm9yZSByZW1vdmluZyBvdmVybGFwcyIpO0d4ZShlLG4pOylUVShlLG4sITEpO2lmKHIuZGgodCwiQWZ0ZXIgcmVtb3Zpbmcgb3ZlcmxhcHMiKSxnPTAsdz0wLGE9bnVsbCxuLmMubGVuZ3RoIT0wJiYoYT0oU24oMCxuLmMubGVuZ3RoKSxsKG4uY1swXSwyNykpLGc9YS5pLShTbigwLFYuYy5sZW5ndGgpLGwoVi5jWzBdLDgpKS5hLHc9YS5qLShTbigwLFYuYy5sZW5ndGgpLGwoVi5jWzBdLDgpKS5iKSxmPWIuTWF0aC5zcXJ0KGcqZyt3KncpLEw9WHluKG4pLG89MSxMLmEuZ2MoKSE9MCl7Zm9yKEM9TC5hLmVjKCkuS2MoKTtDLk9iKCk7KUU9bChDLlBiKCksMjcpLEo9ZS5mLHRlPUouaStKLmcvMixmZT1KLmorSi5mLzIsVGU9RS5pK0UuZy8yLE1lPUUuaitFLmYvMiwkZT1UZS10ZSxaZT1NZS1mZSxvdD1iLk1hdGguc3FydCgkZSokZStaZSpaZSksU3Q9JGUvb3QsY249WmUvb3QsVXUoRSxFLmkrU3QqZiksR3UoRSxFLmorY24qZik7ci5kaCh0LCJDaGlsZCBtb3ZlbWVudCAiK28pLCsrb31lLmEmJmUuYS5HZyhuZXcgT2woTCkpLFJ2dChlLHQsbmV3IE9sKEwpLHIpfX1mdW5jdGlvbiBfbGUoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO3JldHVybiB3PWUsQz1tYShuZXcgbHQodC5hLHQuYiksZSksRT1uLEw9bWEobmV3IGx0KHIuYSxyLmIpLG4pLEI9dy5hLHRlPXcuYixWPUUuYSxUZT1FLmIsej1DLmEsZmU9Qy5iLEo9TC5hLE1lPUwuYixhPUoqZmUteipNZSxBMSgpLGYwKE5kKSxiLk1hdGguYWJzKDAtYSk8PU5kfHxhPT0wfHxpc05hTigwKSYmaXNOYU4oYSk/ITE6KGY9MS9hKigoQi1WKSpmZS0odGUtVGUpKnopLGc9MS9hKi0oLShCLVYpKk1lKyh0ZS1UZSkqSiksbz0oZjAoTmQpLChiLk1hdGguYWJzKDAtZik8PU5kfHxmPT0wfHxpc05hTigwKSYmaXNOYU4oZik/MDowPGY/LTE6MD5mPzE6dXcoaXNOYU4oMCksaXNOYU4oZikpKTwwJiYoZjAoTmQpLChiLk1hdGguYWJzKGYtMSk8PU5kfHxmPT0xfHxpc05hTihmKSYmaXNOYU4oMSk/MDpmPDE/LTE6Zj4xPzE6dXcoaXNOYU4oZiksaXNOYU4oMSkpKTwwKSYmKGYwKE5kKSwoYi5NYXRoLmFicygwLWcpPD1OZHx8Zz09MHx8aXNOYU4oMCkmJmlzTmFOKGcpPzA6MDxnPy0xOjA+Zz8xOnV3KGlzTmFOKDApLGlzTmFOKGcpKSk8MCkmJihmMChOZCksKGIuTWF0aC5hYnMoZy0xKTw9TmR8fGc9PTF8fGlzTmFOKGcpJiZpc05hTigxKT8wOmc8MT8tMTpnPjE/MTp1dyhpc05hTihnKSxpc05hTigxKSkpPDApKSxvKX1mdW5jdGlvbiBzRG4oZSl7dmFyIHQsbixyLGE7aWYobj1lLkQhPW51bGw/ZS5EOmUuQix0PXBkKG4sY2woOTEpKSx0IT0tMSl7cj0oR2EoMCx0LG4ubGVuZ3RoKSxuLnN1YnN0cigwLHQpKSxhPW5ldyBVcDtkbyBhLmErPSJbIjt3aGlsZSgodD1OayhuLDkxLCsrdCkpIT0tMSk7dm4ocixDeCk/YS5hKz0iWiI6dm4ocixTTCk/YS5hKz0iQiI6dm4ocixHRyk/YS5hKz0iQyI6dm4ocixfTCk/YS5hKz0iRCI6dm4ocixBTCk/YS5hKz0iRiI6dm4ocixMTCk/YS5hKz0iSSI6dm4ocixNTCk/YS5hKz0iSiI6dm4ocixETCk/YS5hKz0iUyI6KGEuYSs9IkwiLGEuYSs9IiIrcixhLmErPSI7Iik7dHJ5e3JldHVybiBudWxsfWNhdGNoKG8pe2lmKG89YnMobyksIURlKG8sNjMpKXRocm93IHVlKG8pfX1lbHNlIGlmKHBkKG4sY2woNDYpKT09LTEpe2lmKHZuKG4sQ3gpKXJldHVybiBpaDtpZih2bihuLFNMKSlyZXR1cm4gQWw7aWYodm4obixHRykpcmV0dXJuIGtmO2lmKHZuKG4sX0wpKXJldHVybiBOYTtpZih2bihuLEFMKSlyZXR1cm4gQjQ7aWYodm4obixMTCkpcmV0dXJuIFZyO2lmKHZuKG4sTUwpKXJldHVybiBubTtpZih2bihuLERMKSlyZXR1cm4gaDd9cmV0dXJuIG51bGx9ZnVuY3Rpb24gYURuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdDtmb3IoZS5lPXQsZz1hRW4odCksb3Q9bmV3IGJ0LHI9bmV3IEcoZyk7ci5hPHIuYy5jLmxlbmd0aDspe2ZvcihuPWwocmUociksMTUpLFN0PW5ldyBidCwkbihvdC5jLFN0KSx3PW5ldyBLcyxWPW4uS2MoKTtWLk9iKCk7KXtmb3Ioej1sKFYuUGIoKSwyNyksbz11UChlLHosITAsMCwwKSwkbihTdC5jLG8pLEo9ei5pLHRlPXouaixCPSghei5uJiYoei5uPW5ldyBudChlYyx6LDEsNykpLHoubiksTD1uZXcgb3IoQik7TC5lIT1MLmkuZ2MoKTspRT1sKGdyKEwpLDEzNSksYT11UChlLEUsITEsSix0ZSksJG4oU3QuYyxhKTtmb3IoWmU9KCF6LmMmJih6LmM9bmV3IG50KEhsLHosOSw5KSksei5jKSxUZT1uZXcgb3IoWmUpO1RlLmUhPVRlLmkuZ2MoKTspZm9yKGZlPWwoZ3IoVGUpLDEyMyksZj11UChlLGZlLCExLEosdGUpLCRuKFN0LmMsZiksTWU9ZmUuaStKLCRlPWZlLmordGUsQj0oIWZlLm4mJihmZS5uPW5ldyBudChlYyxmZSwxLDcpKSxmZS5uKSxDPW5ldyBvcihCKTtDLmUhPUMuaS5nYygpOylFPWwoZ3IoQyksMTM1KSxhPXVQKGUsRSwhMSxNZSwkZSksJG4oU3QuYyxhKTtLYSh3LExIKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsW2NwKHopLHNQKHopXSkpKSl9S1RuKGUsdyxTdCl9cmV0dXJuIGUuZj1uZXcgR0plKG90KSxwYyhlLmYsdCksZS5mfWZ1bmN0aW9uIG9EbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7Zm9yKEw9bmV3IHk1ZShuZXcgU2MoZSkpO0wuYyE9TC5kLmEuZDspZm9yKEM9WWx0KEwpLGc9bChDLmQsNTgpLHQ9bChDLmUsNTgpLGY9Zy5EaCgpLEo9MCwkZT0oZi5pPT1udWxsJiZTZChmKSxmLmkpLmxlbmd0aDtKPCRlOysrSilpZihFPShvPShmLmk9PW51bGwmJlNkKGYpLGYuaSksSj49MCYmSjxvLmxlbmd0aD9vW0pdOm51bGwpLEUucmsoKSYmIUUuc2soKSl7aWYoRGUoRSwxMDIpKXc9bChFLDE5KSwhKHcuQmImZXUpJiYob3Q9Um8odyksIShvdCYmb3QuQmImZXUpKSYmVUFuKGUsdyxnLHQpO2Vsc2UgaWYoRm8oKSxsKEUsNjkpLnhrKCkmJihuPShaZT1FLGwoWmU/bCh0LDU0KS5naShaZSk6bnVsbCwxNjApKSxuKSlmb3Ioej1sKGcuTWgoRSksMTYwKSxyPW4uZ2MoKSx0ZT0wLFY9ei5nYygpO3RlPFY7Kyt0ZSlpZihCPXouVGwodGUpLERlKEIsMTAyKSl7aWYoTWU9ei5VbCh0ZSksYT1CMShlLE1lKSxhPT1udWxsJiZNZSE9bnVsbCl7aWYoVGU9bChCLDE5KSwhZS5ifHxUZS5CYiZldXx8Um8oVGUpKWNvbnRpbnVlO2E9TWV9aWYoIW4uT2woQixhKSl7Zm9yKGZlPTA7ZmU8cjsrK2ZlKWlmKG4uVGwoZmUpPT1CJiZxZShuLlVsKGZlKSk9PT1xZShhKSl7bi5UaShuLmdjKCktMSxmZSksLS1yO2JyZWFrfX19ZWxzZSBuLk9sKHouVGwodGUpLHouVWwodGUpKX19ZnVuY3Rpb24gY0RuKGUsdCxuKXt2YXIgcjtpZihuLlVnKCJTdHJldGNoV2lkdGggbGF5ZXJpbmciLDEpLHQuYS5jLmxlbmd0aD09MCl7bi5WZygpO3JldHVybn1mb3IoZS5jPXQsZS50PTAsZS51PTAsZS5pPWdzLGUuZz1pYSxlLmQ9emUoR2UoUSh0LChOdCgpLHgwKSkpKSxBNm4oZSksUEVuKGUpLE5FbihlKSxEOG4oZSksSTVuKGUpLGUuaT1iLk1hdGgubWF4KDEsZS5pKSxlLmc9Yi5NYXRoLm1heCgxLGUuZyksZS5kPWUuZC9lLmksZS5mPWUuZy9lLmksZS5zPUg2bihlKSxyPW5ldyB5dShlLmMpLHZ0KGUuYy5iLHIpLGUucj1fdyhlLnApLGUubj1PSChlLmssZS5rLmxlbmd0aCk7ZS5yLmMubGVuZ3RoIT0wOyllLm89UXluKGUpLCFlLm98fGwwdChlKSYmZS5iLmEuZ2MoKSE9MD8oaXhuKGUscikscj1uZXcgeXUoZS5jKSx2dChlLmMuYixyKSxLYShlLmEsZS5iKSxlLmIuYS4kYigpLGUudD1lLnUsZS51PTApOmwwdChlKT8oZS5jLmIuYy5sZW5ndGg9MCxyPW5ldyB5dShlLmMpLHZ0KGUuYy5iLHIpLGUudD0wLGUudT0wLGUuYi5hLiRiKCksZS5hLmEuJGIoKSwrK2UuZixlLnI9X3coZS5wKSxlLm49T0goZS5rLGUuay5sZW5ndGgpKTooVmEoZS5vLHIpLGFsKGUucixlLm8pLG5hKGUuYixlLm8pLGUudD1lLnQtZS5rW2Uuby5wXSplLmQrZS5qW2Uuby5wXSxlLnUrPWUuZVtlLm8ucF0qZS5kKTt0LmEuYy5sZW5ndGg9MCxKTih0LmIpLG4uVmcoKX1mdW5jdGlvbiB1RG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoZS5qPVdlKFZyLGRpLDI4LGUuZywxNSwxKSxlLm89bmV3IGJ0LElzKERjKG5ldyBibihudWxsLG5ldyBrbihlLmUuYiwxNikpLG5ldyBpdGUpLG5ldyBlWGUoZSkpLGUuYT1XZShpaCxwZywyOCxlLmIsMTYsMSksT04obmV3IGJuKG51bGwsbmV3IGtuKGUuZS5iLDE2KSksbmV3IG5YZShlKSkscj0oTD1uZXcgYnQsSXMoRmkoRGMobmV3IGJuKG51bGwsbmV3IGtuKGUuZS5iLDE2KSksbmV3IGF0ZSksbmV3IHRYZShlKSksbmV3IFVldChlLEwpKSxMKSx3PW5ldyBHKHIpO3cuYTx3LmMuYy5sZW5ndGg7KWlmKGc9bChyZSh3KSw1MTUpLCEoZy5jLmxlbmd0aDw9MSkpe2lmKGcuYy5sZW5ndGg9PTIpe0trbihnKSx5bGUoKFNuKDAsZy5jLmxlbmd0aCksbChnLmNbMF0sMTgpKS5kLmkpfHx2dChlLm8sZyk7Y29udGludWV9aWYoISh1eG4oZyl8fEo5bihnLG5ldyBzdGUpKSlmb3IoRT1uZXcgRyhnKSxhPW51bGw7RS5hPEUuYy5jLmxlbmd0aDspdD1sKHJlKEUpLDE4KSxuPWUuY1t0LnBdLCFhfHxFLmE+PUUuYy5jLmxlbmd0aD9DPXU2ZSgoWm4oKSxQcyksQWEpOkM9dTZlKChabigpLEFhKSxBYSksQyo9MixvPW4uYS5nLG4uYS5nPWIuTWF0aC5tYXgobyxvKyhDLW8pKSxmPW4uYi5nLG4uYi5nPWIuTWF0aC5tYXgoZixmKyhDLWYpKSxhPXR9fWZ1bmN0aW9uIGxEbihlKXt2YXIgdCxuLHIsYTtmb3IoSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYS5iLDE2KSksbmV3IE9qKSxuZXcgYWVlKSxVOG4oZSksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYS5iLDE2KSksbmV3IG9lZSksbmV3IGNlZSksZS5jPT0oaXAoKSxzOSkmJihJcyhGaShEYyhuZXcgYm4obnVsbCxuZXcga24obmV3IGJyKGUuZiksMSkpLG5ldyB1ZWUpLG5ldyBsZWUpLG5ldyB2WWUoZSkpLElzKEZpKGZjKERjKERjKG5ldyBibihudWxsLG5ldyBrbihlLmQuYiwxNikpLG5ldyBoZWUpLG5ldyBOaiksbmV3IGZlZSksbmV3IFBqKSxuZXcgeVllKGUpKSksYT1uZXcgbHQoZ3MsZ3MpLHQ9bmV3IGx0KGlhLGlhKSxyPW5ldyBHKGUuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjApLGEuYT1iLk1hdGgubWluKGEuYSxuLmQuYyksYS5iPWIuTWF0aC5taW4oYS5iLG4uZC5kKSx0LmE9Yi5NYXRoLm1heCh0LmEsbi5kLmMrbi5kLmIpLHQuYj1iLk1hdGgubWF4KHQuYixuLmQuZCtuLmQuYSk7T2koWTAoZS5kLmMpLEhxKG5ldyBsdChhLmEsYS5iKSkpLE9pKFkwKGUuZC5mKSxtYShuZXcgbHQodC5hLHQuYiksYSkpLGlDbihlLGEsdCksTmwoZS5mKSxObChlLmIpLE5sKGUuZyksTmwoZS5lKSxlLmEuYS5jLmxlbmd0aD0wLGUuYS5iLmMubGVuZ3RoPTAsZS5hPW51bGwsZS5kPW51bGx9ZnVuY3Rpb24gVVUoZSx0KXt2YXIgbjtpZihlLmUpdGhyb3cgdWUobmV3IG5jKChHZyhSMGUpLHBoZStSMGUuaytiaGUpKSk7aWYoIXBsbihlLmEsdCkpdGhyb3cgdWUobmV3IEFjKG4zdCt0K3IzdCkpO2lmKHQ9PWUuZClyZXR1cm4gZTtzd2l0Y2gobj1lLmQsZS5kPXQsbi5nKXtjYXNlIDA6c3dpdGNoKHQuZyl7Y2FzZSAyOiR3KGUpO2JyZWFrO2Nhc2UgMTp2YihlKSwkdyhlKTticmVhaztjYXNlIDQ6czYoZSksJHcoZSk7YnJlYWs7Y2FzZSAzOnM2KGUpLHZiKGUpLCR3KGUpfWJyZWFrO2Nhc2UgMjpzd2l0Y2godC5nKXtjYXNlIDE6dmIoZSksbmxlKGUpO2JyZWFrO2Nhc2UgNDpzNihlKSwkdyhlKTticmVhaztjYXNlIDM6czYoZSksdmIoZSksJHcoZSl9YnJlYWs7Y2FzZSAxOnN3aXRjaCh0Lmcpe2Nhc2UgMjp2YihlKSxubGUoZSk7YnJlYWs7Y2FzZSA0OnZiKGUpLHM2KGUpLCR3KGUpO2JyZWFrO2Nhc2UgMzp2YihlKSxzNihlKSx2YihlKSwkdyhlKX1icmVhaztjYXNlIDQ6c3dpdGNoKHQuZyl7Y2FzZSAyOnM2KGUpLCR3KGUpO2JyZWFrO2Nhc2UgMTpzNihlKSx2YihlKSwkdyhlKTticmVhaztjYXNlIDM6dmIoZSksbmxlKGUpfWJyZWFrO2Nhc2UgMzpzd2l0Y2godC5nKXtjYXNlIDI6dmIoZSksczYoZSksJHcoZSk7YnJlYWs7Y2FzZSAxOnZiKGUpLHM2KGUpLHZiKGUpLCR3KGUpO2JyZWFrO2Nhc2UgNDp2YihlKSxubGUoZSl9fXJldHVybiBlfWZ1bmN0aW9uIHA2KGUsdCl7dmFyIG47aWYoZS5kKXRocm93IHVlKG5ldyBuYygoR2coYTFlKSxwaGUrYTFlLmsrYmhlKSkpO2lmKCFnbG4oZS5hLHQpKXRocm93IHVlKG5ldyBBYyhuM3QrdCtyM3QpKTtpZih0PT1lLmMpcmV0dXJuIGU7c3dpdGNoKG49ZS5jLGUuYz10LG4uZyl7Y2FzZSAwOnN3aXRjaCh0Lmcpe2Nhc2UgMjpVbShlKTticmVhaztjYXNlIDE6d2IoZSksVW0oZSk7YnJlYWs7Y2FzZSA0OmE2KGUpLFVtKGUpO2JyZWFrO2Nhc2UgMzphNihlKSx3YihlKSxVbShlKX1icmVhaztjYXNlIDI6c3dpdGNoKHQuZyl7Y2FzZSAxOndiKGUpLHJsZShlKTticmVhaztjYXNlIDQ6YTYoZSksVW0oZSk7YnJlYWs7Y2FzZSAzOmE2KGUpLHdiKGUpLFVtKGUpfWJyZWFrO2Nhc2UgMTpzd2l0Y2godC5nKXtjYXNlIDI6d2IoZSkscmxlKGUpO2JyZWFrO2Nhc2UgNDp3YihlKSxhNihlKSxVbShlKTticmVhaztjYXNlIDM6d2IoZSksYTYoZSksd2IoZSksVW0oZSl9YnJlYWs7Y2FzZSA0OnN3aXRjaCh0Lmcpe2Nhc2UgMjphNihlKSxVbShlKTticmVhaztjYXNlIDE6YTYoZSksd2IoZSksVW0oZSk7YnJlYWs7Y2FzZSAzOndiKGUpLHJsZShlKX1icmVhaztjYXNlIDM6c3dpdGNoKHQuZyl7Y2FzZSAyOndiKGUpLGE2KGUpLFVtKGUpO2JyZWFrO2Nhc2UgMTp3YihlKSxhNihlKSx3YihlKSxVbShlKTticmVhaztjYXNlIDQ6d2IoZSkscmxlKGUpfX1yZXR1cm4gZX1mdW5jdGlvbiBHVShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7aWYoRGUoZS5FaCgpLDE2Nyk/KEdVKGwoZS5FaCgpLDE2NyksdCksdC5hKz0iID4gIik6dC5hKz0iUm9vdCAiLG49ZS5EaCgpLnpiLHZuKG4uc3Vic3RyKDAsMyksIkVsayIpP2hpKHQsKFhuKDMsbi5sZW5ndGgrMSksbi5zdWJzdHIoMykpKTp0LmErPSIiK24sYT1lLmpoKCksYSl7aGkoKHQuYSs9IiAiLHQpLGEpO3JldHVybn1pZihEZShlLDM2NikmJihFPWwoZSwxMzUpLmEsRSkpe2hpKCh0LmErPSIgIix0KSxFKTtyZXR1cm59Zm9yKGY9bmV3IG9yKGUua2goKSk7Zi5lIT1mLmkuZ2MoKTspaWYobz1sKGdyKGYpLDEzNSksRT1vLmEsRSl7aGkoKHQuYSs9IiAiLHQpLEUpO3JldHVybn1pZihEZShlLDMyNikmJihyPWwoZSw3NCksIXIuYiYmKHIuYj1uZXcgTG4oX3Isciw0LDcpKSxyLmIuaSE9MCYmKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jLmkhPTApKSl7Zm9yKHQuYSs9IiAoIixnPW5ldyBxOCgoIXIuYiYmKHIuYj1uZXcgTG4oX3Isciw0LDcpKSxyLmIpKTtnLmUhPWcuaS5nYygpOylnLmU+MCYmKHQuYSs9Q28pLEdVKGwoZ3IoZyksMTY3KSx0KTtmb3IodC5hKz1QaGUsdz1uZXcgcTgoKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jKSk7dy5lIT13LmkuZ2MoKTspdy5lPjAmJih0LmErPUNvKSxHVShsKGdyKHcpLDE2NyksdCk7dC5hKz0iKSJ9fWZ1bmN0aW9uIGhEbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztmb3Iodz1uZXcgb3IoKCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxlLmEpKTt3LmUhPXcuaS5nYygpOylmb3IoZz1sKGdyKHcpLDI3KSxhPW5ldyBocihkcihjcChnKS5hLktjKCksbmV3IGopKTtqcihhKTspe2lmKHI9bCh4cihhKSw3NCksIXIuYiYmKHIuYj1uZXcgTG4oX3Isciw0LDcpKSwhKHIuYi5pPD0xJiYoIXIuYyYmKHIuYz1uZXcgTG4oX3Isciw1LDgpKSxyLmMuaTw9MSkpKXRocm93IHVlKG5ldyBJOCgiR3JhcGggbXVzdCBub3QgY29udGFpbiBoeXBlcmVkZ2VzLiIpKTtpZighcUEocikmJmchPWJjKGwoT2UoKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jKSwwKSw4NCkpKWZvcihFPW5ldyBqcnQscGMoRSxyKSxydChFLChiYigpLEh4KSxyKSxBaWUoRSxsKGhjKHpvKG4uZixnKSksMTUzKSksazgoRSxsKGNyKG4sYmMobChPZSgoIXIuYyYmKHIuYz1uZXcgTG4oX3Isciw1LDgpKSxyLmMpLDApLDg0KSkpLDE1MykpLHZ0KHQuYyxFKSxmPW5ldyBvcigoIXIubiYmKHIubj1uZXcgbnQoZWMsciwxLDcpKSxyLm4pKTtmLmUhPWYuaS5nYygpOylvPWwoZ3IoZiksMTM1KSxDPW5ldyB6Y3QoRSxvLmEpLHBjKEMsbykscnQoQyxIeCxvKSxDLmUuYT1iLk1hdGgubWF4KG8uZywxKSxDLmUuYj1iLk1hdGgubWF4KG8uZiwxKSxBa2UoQyksdnQodC5kLEMpfX1mdW5jdGlvbiBmRG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO3N3aXRjaChuLlVnKCJOb2RlIHByb21vdGlvbiBoZXVyaXN0aWMiLDEpLGUuaT10LGUucj1sKFEodCwoTnQoKSx6YikpLDI0MyksZS5yIT0oTmYoKSx2MykmJmUuciE9eDQ/akRuKGUpOmhTbihlKSxDPWwoUShlLmksSE1lKSwxNykuYSxvPW5ldyBoZCxlLnIuZyl7Y2FzZSAyOmNhc2UgMTpRRShlLG8pO2JyZWFrO2Nhc2UgMzpmb3IoZS5yPUxXLFFFKGUsbyksdz0wLGc9bmV3IEcoZS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTcpLHc9Yi5NYXRoLm1heCh3LGYuYSk7dz5lLmsmJihlLnI9QUIsUUUoZSxvKSk7YnJlYWs7Y2FzZSA0OmZvcihlLnI9TFcsUUUoZSxvKSxFPTAsYT1uZXcgRyhlLmMpO2EuYTxhLmMuYy5sZW5ndGg7KXI9R2UocmUoYSkpLEU9Yi5NYXRoLm1heChFLChucihyKSxyKSk7RT5lLm4mJihlLnI9TEIsUUUoZSxvKSk7YnJlYWs7Y2FzZSA2OkI9dWEoYi5NYXRoLmNlaWwoZS5nLmxlbmd0aCpDLzEwMCkpLFFFKGUsbmV3IGFZZShCKSk7YnJlYWs7Y2FzZSA1Okw9dWEoYi5NYXRoLmNlaWwoZS5lKkMvMTAwKSksUUUoZSxuZXcgb1llKEwpKTticmVhaztjYXNlIDg6eHd0KGUsITApO2JyZWFrO2Nhc2UgOTp4d3QoZSwhMSk7YnJlYWs7ZGVmYXVsdDpRRShlLG8pfWUuciE9djMmJmUuciE9eDQ/UENuKGUsdCk6dF9uKGUsdCksbi5WZygpfWZ1bmN0aW9uIGREbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKEw9ZS5iLEM9bmV3IFVhKEwsMCksYnkoQyxuZXcgeXUoZSkpLFRlPSExLGY9MTtDLmI8Qy5kLmdjKCk7KXtmb3IoRT0obXIoQy5iPEMuZC5nYygpKSxsKEMuZC5YYihDLmM9Qy5iKyspLDMwKSksSj0oU24oZixMLmMubGVuZ3RoKSxsKEwuY1tmXSwzMCkpLHRlPV93KEUuYSksZmU9dGUuYy5sZW5ndGgsVj1uZXcgRyh0ZSk7Vi5hPFYuYy5jLmxlbmd0aDspQj1sKHJlKFYpLDEwKSxWYShCLEopO2lmKFRlKXtmb3Ioej1sZih0ZSkuS2MoKTt6Lk9iKCk7KWZvcihCPWwoei5QYigpLDEwKSxvPW5ldyBHKF93KGthKEIpKSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDE4KSxVdyhhLCEwKSxydChlLChmdCgpLHlCKSwoSG4oKSwhMCkpLHI9YnZ0KGUsYSxmZSksbj1sKFEoQixjMyksMzEzKSxNZT1sKGp0KHIsci5jLmxlbmd0aC0xKSwxOCksbi5rPU1lLmMuaSxuLm49TWUsbi5iPWEuZC5pLG4uYz1hO1RlPSExfWVsc2UgdGUuYy5sZW5ndGghPTAmJih0PShTbigwLHRlLmMubGVuZ3RoKSxsKHRlLmNbMF0sMTApKSx0Lms9PShabigpLEsxKSYmKFRlPSEwLGY9LTEpKTsrK2Z9Zm9yKGc9bmV3IFVhKGUuYiwwKTtnLmI8Zy5kLmdjKCk7KXc9KG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSwzMCkpLHcuYS5jLmxlbmd0aD09MCYmcGgoZyl9ZnVuY3Rpb24gZ0RuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZTtmb3IoTD1uZXcgemtlKGUpLGcybihMLCEodD09KEpzKCksd2YpfHx0PT1RMSkpLEM9TC5hLEI9bmV3IEE4LGE9KHQxKCksaGUobGUoczQsMSksaXQsMjM3LDAsW0djLCR1LEtjXSkpLGY9MCx3PWEubGVuZ3RoO2Y8dzsrK2Ypbj1hW2ZdLEU9ZWFlKEMsR2MsbiksRSYmKEIuZD1iLk1hdGgubWF4KEIuZCxFLmpmKCkpKTtmb3Iocj1oZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKSxvPTAsZz1yLmxlbmd0aDtvPGc7KytvKW49cltvXSxFPWVhZShDLEtjLG4pLEUmJihCLmE9Yi5NYXRoLm1heChCLmEsRS5qZigpKSk7Zm9yKEo9aGUobGUoczQsMSksaXQsMjM3LDAsW0djLCR1LEtjXSksZmU9MCxNZT1KLmxlbmd0aDtmZTxNZTsrK2ZlKXo9SltmZV0sRT1lYWUoQyx6LEdjKSxFJiYoQi5iPWIuTWF0aC5tYXgoQi5iLEUua2YoKSkpO2ZvcihWPWhlKGxlKHM0LDEpLGl0LDIzNywwLFtHYywkdSxLY10pLHRlPTAsVGU9Vi5sZW5ndGg7dGU8VGU7Kyt0ZSl6PVZbdGVdLEU9ZWFlKEMseixLYyksRSYmKEIuYz1iLk1hdGgubWF4KEIuYyxFLmtmKCkpKTtyZXR1cm4gQi5kPjAmJihCLmQrPUMubi5kLEIuZCs9Qy5kKSxCLmE+MCYmKEIuYSs9Qy5uLmEsQi5hKz1DLmQpLEIuYj4wJiYoQi5iKz1DLm4uYixCLmIrPUMuZCksQi5jPjAmJihCLmMrPUMubi5jLEIuYys9Qy5kKSxCfWZ1bmN0aW9uIGp2dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihCPW4uZCxMPW4uYyxvPW5ldyBsdChuLmYuYStuLmQuYituLmQuYyxuLmYuYituLmQuZCtuLmQuYSksZj1vLmIsRT1uZXcgRyhlLmEpO0UuYTxFLmMuYy5sZW5ndGg7KWlmKGc9bChyZShFKSwxMCksZy5rPT0oWm4oKSxVcykpe3N3aXRjaChyPWwoUShnLChmdCgpLFdjKSksNjQpLGE9bChRKGcsJExlKSw4KSxDPWcubixyLmcpe2Nhc2UgMjpDLmE9bi5mLmErQi5jLUwuYTticmVhaztjYXNlIDQ6Qy5hPS1MLmEtQi5ifXN3aXRjaChWPTAsci5nKXtjYXNlIDI6Y2FzZSA0OnQ9PShSYSgpLFRnKT8oej16ZShHZShRKGcsbDMpKSksQy5iPW8uYip6LWwoUShnLChOdCgpLHAzKSksOCkuYixWPUMuYithLmIsRFYoZywhMSwhMCkpOnQ9PU11JiYoQy5iPXplKEdlKFEoZyxsMykpKS1sKFEoZywoTnQoKSxwMykpLDgpLmIsVj1DLmIrYS5iLERWKGcsITEsITApKX1mPWIuTWF0aC5tYXgoZixWKX1mb3Iobi5mLmIrPWYtby5iLHc9bmV3IEcoZS5hKTt3LmE8dy5jLmMubGVuZ3RoOylpZihnPWwocmUodyksMTApLGcuaz09KFpuKCksVXMpKXN3aXRjaChyPWwoUShnLChmdCgpLFdjKSksNjQpLEM9Zy5uLHIuZyl7Y2FzZSAxOkMuYj0tTC5iLUIuZDticmVhaztjYXNlIDM6Qy5iPW4uZi5iK0IuYS1MLmJ9fWZ1bmN0aW9uIHBEbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7aWYoQz1sKGwoJGkoZS5yLHQpLDIxKSw4NyksQy5nYygpPD0yfHx0PT0oQ3QoKSxhcil8fHQ9PShDdCgpLGVyKSl7c3d0KGUsdCk7cmV0dXJufWZvcihKPWUudS5IYygoUmwoKSxhOSkpLG49dD09KEN0KCksUW4pPyhQdygpLGlCKTooUHcoKSxyQiksZmU9dD09UW4/KG9sKCksdzApOihvbCgpLGExKSxyPWkzZSh5NGUobiksZS5zKSx0ZT10PT1Rbj9nczppYSxFPUMuS2MoKTtFLk9iKCk7KWc9bChFLlBiKCksMTE3KSwhKCFnLmN8fGcuYy5kLmMubGVuZ3RoPD0wKSYmKFY9Zy5iLk1mKCksej1nLmUsTD1nLmMsQj1MLmksQi5iPShvPUwubixMLmUuYStvLmIrby5jKSxCLmE9KGY9TC5uLEwuZS5iK2YuZCtmLmEpLEo/KEIuYz16LmEtKGE9TC5uLEwuZS5hK2EuYithLmMpLWUucyxKPSExKTpCLmM9ei5hK1YuYStlLnMsVU8oZmUseUVlKSxMLmY9ZmUsWjAoTCwoQmwoKSx2MCkpLHZ0KHIuZCxuZXcgRGFlKEIsaDhlKHIsQikpKSx0ZT10PT1Rbj9iLk1hdGgubWluKHRlLHouYik6Yi5NYXRoLm1heCh0ZSx6LmIrZy5iLk1mKCkuYikpO2Zvcih0ZSs9dD09UW4/LWUudDplLnQsTThlKChyLmU9dGUscikpLHc9Qy5LYygpO3cuT2IoKTspZz1sKHcuUGIoKSwxMTcpLCEoIWcuY3x8Zy5jLmQuYy5sZW5ndGg8PTApJiYoQj1nLmMuaSxCLmMtPWcuZS5hLEIuZC09Zy5lLmIpfWZ1bmN0aW9uICR2dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKGE9bmV3IGJ0LEo9bmV3IEcodC5hKTtKLmE8Si5jLmMubGVuZ3RoOylpZihWPWwocmUoSiksMTApLHo9Vi5lLHomJihyPSR2dChlLHosVikscmEoYSxyKSxMTW4oZSx6LFYpLGwoUSh6LChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSkpKWZvcihUZT1sKFEoViwoTnQoKSxNcykpLDEwMSksQj1sKFEoVix2NCksMTgxKS5IYygoUmwoKSx2cCkpLGZlPW5ldyBHKFYuaik7ZmUuYTxmZS5jLmMubGVuZ3RoOylmb3IodGU9bChyZShmZSksMTIpLG89bChjcihlLmIsdGUpLDEwKSxvfHwobz12UCh0ZSxUZSx0ZS5qLC0odGUuZS5jLmxlbmd0aC10ZS5nLmMubGVuZ3RoKSxudWxsLG5ldyBxYSx0ZS5vLGwoUSh6LFJoKSw4OCkseikscnQobyx6aSx0ZSksa2koZS5iLHRlLG8pLHZ0KHouYSxvKSksZj1sKGp0KG8uaiwwKSwxMiksQz1uZXcgRyh0ZS5mKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksNzIpLGc9bmV3IFhKZSxnLm8uYT1FLm8uYSxnLm8uYj1FLm8uYix2dChmLmYsZyksQnx8KE1lPXRlLmosTD0wLFdfKGwoUShWLHY0KSwyMSkpJiYoTD1tOWUoRS5uLEUubyx0ZS5vLDAsTWUpKSxUZT09KFJhKCksWjEpfHwoQ3QoKSxKdSkuSGMoTWUpP2cuby5hPUw6Zy5vLmI9TCk7cmV0dXJuIHc9bmV3IGJ0LEFNbihlLHQsbixhLHcpLG4mJktMbihlLHQsbix3KSx3fWZ1bmN0aW9uICRrZShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2lmKCFlLmNbdC5jLnBdW3QucF0uZSl7Zm9yKGUuY1t0LmMucF1bdC5wXS5lPSEwLGUuY1t0LmMucF1bdC5wXS5iPTAsZS5jW3QuYy5wXVt0LnBdLmQ9MCxlLmNbdC5jLnBdW3QucF0uYT1udWxsLEM9bmV3IEcodC5qKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxMPW4/bmV3IFQ1KEUpOm5ldyBDOChFKSx3PUwuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLGY9Zy5pLGYuYz09dC5jP2YhPXQmJigka2UoZSxmLG4pLGUuY1t0LmMucF1bdC5wXS5iKz1lLmNbZi5jLnBdW2YucF0uYixlLmNbdC5jLnBdW3QucF0uZCs9ZS5jW2YuYy5wXVtmLnBdLmQpOihlLmNbdC5jLnBdW3QucF0uZCs9ZS5nW2cucF0sKytlLmNbdC5jLnBdW3QucF0uYik7aWYobz1sKFEodCwoZnQoKSxCTGUpKSwxNSksbylmb3IoYT1vLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDEwKSx0LmM9PXIuYyYmKCRrZShlLHIsbiksZS5jW3QuYy5wXVt0LnBdLmIrPWUuY1tyLmMucF1bci5wXS5iLGUuY1t0LmMucF1bdC5wXS5kKz1lLmNbci5jLnBdW3IucF0uZCk7ZS5jW3QuYy5wXVt0LnBdLmI+MCYmKGUuY1t0LmMucF1bdC5wXS5kKz1KbChlLmksMjQpKk1QKi4wNzAwMDAwMDAyOTgwMjMyMi0uMDM1MDAwMDAwMTQ5MDExNjEsZS5jW3QuYy5wXVt0LnBdLmE9ZS5jW3QuYy5wXVt0LnBdLmQvZS5jW3QuYy5wXVt0LnBdLmIpfX1mdW5jdGlvbiBiRG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2ZvcihWPW5ldyBHKGUpO1YuYTxWLmMuYy5sZW5ndGg7KXtmb3Ioej1sKHJlKFYpLDEwKSxZcCh6Lm4pLFlwKHoubyksQTZlKHouZiksWmJ0KHopLFBTbih6KSx0ZT1uZXcgRyh6LmopO3RlLmE8dGUuYy5jLmxlbmd0aDspe2ZvcihKPWwocmUodGUpLDEyKSxZcChKLm4pLFlwKEouYSksWXAoSi5vKSxsYShKLElkdChKLmopKSxvPWwoUShKLChOdCgpLGsyKSksMTcpLG8mJnJ0KEosazIscHQoLW8uYSkpLGE9bmV3IEcoSi5nKTthLmE8YS5jLmMubGVuZ3RoOyl7Zm9yKHI9bChyZShhKSwxOCksbj1ScihyLmEsMCk7bi5iIT1uLmQuYzspdD1sKEJyKG4pLDgpLFlwKHQpO2lmKHc9bChRKHIsY2MpLDc1KSx3KWZvcihnPVJyKHcsMCk7Zy5iIT1nLmQuYzspZj1sKEJyKGcpLDgpLFlwKGYpO2ZvcihMPW5ldyBHKHIuYik7TC5hPEwuYy5jLmxlbmd0aDspRT1sKHJlKEwpLDcyKSxZcChFLm4pLFlwKEUubyl9Zm9yKEI9bmV3IEcoSi5mKTtCLmE8Qi5jLmMubGVuZ3RoOylFPWwocmUoQiksNzIpLFlwKEUubiksWXAoRS5vKX1mb3Ioei5rPT0oWm4oKSxVcykmJihydCh6LChmdCgpLFdjKSxJZHQobChRKHosV2MpLDY0KSkpLFZDbih6KSksQz1uZXcgRyh6LmIpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSw3MiksWmJ0KEUpLFlwKEUubyksWXAoRS5uKX19ZnVuY3Rpb24gbURuKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbix1cjtCbj1jcihlLmUsciksQm49PW51bGwmJihCbj1uZXcgTTgsej1sKEJuLDE5MCksVGU9dCsiX3MiLE1lPVRlK2EsQj1uZXcgeXkoTWUpLGUxKHosUGQsQikpLGFuPWwoQm4sMTkwKSxKOChuLGFuKSx1cj1uZXcgTTgsTm0odXIsIngiLHIuaiksTm0odXIsInkiLHIuayksZTEoYW4sdjR0LHVyKSxTdD1uZXcgTTgsTm0oU3QsIngiLHIuYiksTm0oU3QsInkiLHIuYyksZTEoYW4sImVuZFBvaW50IixTdCksTD1aSSgoIXIuYSYmKHIuYT1uZXcgWXMocWgsciw1KSksci5hKSksVj0hTCxWJiYob3Q9bmV3ICRwLG89bmV3IFpYZShvdCksdG8oKCFyLmEmJihyLmE9bmV3IFlzKHFoLHIsNSkpLHIuYSksbyksZTEoYW4sJEcsb3QpKSx3PWF1ZShyKSwkZT0hIXcsJGUmJnF4ZShlLmEsYW4sZ1NlLGp1ZShlLGF1ZShyKSkpLGZlPW91ZShyKSxaZT0hIWZlLFplJiZxeGUoZS5hLGFuLGRTZSxqdWUoZSxvdWUocikpKSxFPSghci5lJiYoci5lPW5ldyBMbihjcyxyLDEwLDkpKSxyLmUpLmk9PTAsSj0hRSxKJiYoY249bmV3ICRwLGY9bmV3IF90dChlLGNuKSx0bygoIXIuZSYmKHIuZT1uZXcgTG4oY3MsciwxMCw5KSksci5lKSxmKSxlMShhbixiU2UsY24pKSxDPSghci5nJiYoci5nPW5ldyBMbihjcyxyLDksMTApKSxyLmcpLmk9PTAsdGU9IUMsdGUmJihqbj1uZXcgJHAsZz1uZXcgQXR0KGUsam4pLHRvKCghci5nJiYoci5nPW5ldyBMbihjcyxyLDksMTApKSxyLmcpLGcpLGUxKGFuLHBTZSxqbikpfWZ1bmN0aW9uIHZEbihlKXtweSgpO3ZhciB0LG4scixhLG8sZixnO2ZvcihyPWUuZi5uLGY9YjVlKGUucikuYS5uYygpO2YuT2IoKTspe2lmKG89bChmLlBiKCksMTE3KSxhPTAsby5iLnBmKChwaSgpLHJoKSkmJihhPXplKEdlKG8uYi5vZihyaCkpKSxhPDApKXN3aXRjaChvLmIuYWcoKS5nKXtjYXNlIDE6ci5kPWIuTWF0aC5tYXgoci5kLC1hKTticmVhaztjYXNlIDM6ci5hPWIuTWF0aC5tYXgoci5hLC1hKTticmVhaztjYXNlIDI6ci5jPWIuTWF0aC5tYXgoci5jLC1hKTticmVhaztjYXNlIDQ6ci5iPWIuTWF0aC5tYXgoci5iLC1hKX1pZihXXyhlLnUpKXN3aXRjaCh0PUUzbihvLmIsYSksZz0hbChlLmUub2YoVWIpLDE4MSkuSGMoKFpsKCksc0YpKSxuPSExLG8uYi5hZygpLmcpe2Nhc2UgMTpuPXQ+ci5kLHIuZD1iLk1hdGgubWF4KHIuZCx0KSxnJiZuJiYoci5kPWIuTWF0aC5tYXgoci5kLHIuYSksci5hPXIuZCthKTticmVhaztjYXNlIDM6bj10PnIuYSxyLmE9Yi5NYXRoLm1heChyLmEsdCksZyYmbiYmKHIuYT1iLk1hdGgubWF4KHIuYSxyLmQpLHIuZD1yLmErYSk7YnJlYWs7Y2FzZSAyOm49dD5yLmMsci5jPWIuTWF0aC5tYXgoci5jLHQpLGcmJm4mJihyLmM9Yi5NYXRoLm1heChyLmIsci5jKSxyLmI9ci5jK2EpO2JyZWFrO2Nhc2UgNDpuPXQ+ci5iLHIuYj1iLk1hdGgubWF4KHIuYix0KSxnJiZuJiYoci5iPWIuTWF0aC5tYXgoci5iLHIuYyksci5jPXIuYithKX19fWZ1bmN0aW9uIHp2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztyZXR1cm4gRT0iIix0Lmxlbmd0aD09MD9lLm5lKGlFZSxSbGUsLTEsLTEpOihDPSR5KHQpLHZuKEMuc3Vic3RyKDAsMyksImF0ICIpJiYoQz0oWG4oMyxDLmxlbmd0aCsxKSxDLnN1YnN0cigzKSkpLEM9Qy5yZXBsYWNlKC9cWy4qP1xdL2csIiIpLGY9Qy5pbmRleE9mKCIoIiksZj09LTE/KGY9Qy5pbmRleE9mKCJAIiksZj09LTE/KEU9QyxDPSIiKTooRT0keSgoWG4oZisxLEMubGVuZ3RoKzEpLEMuc3Vic3RyKGYrMSkpKSxDPSR5KChHYSgwLGYsQy5sZW5ndGgpLEMuc3Vic3RyKDAsZikpKSkpOihuPUMuaW5kZXhPZigiKSIsZiksRT0oR2EoZisxLG4sQy5sZW5ndGgpLEMuc3Vic3RyKGYrMSxuLShmKzEpKSksQz0keSgoR2EoMCxmLEMubGVuZ3RoKSxDLnN1YnN0cigwLGYpKSkpLGY9cGQoQyxjbCg0NikpLGYhPS0xJiYoQz0oWG4oZisxLEMubGVuZ3RoKzEpLEMuc3Vic3RyKGYrMSkpKSwoQy5sZW5ndGg9PTB8fHZuKEMsIkFub255bW91cyBmdW5jdGlvbiIpKSYmKEM9UmxlKSxnPVJxKEUsY2woNTgpKSxhPWg0ZShFLGNsKDU4KSxnLTEpLHc9LTEscj0tMSxvPWlFZSxnIT0tMSYmYSE9LTEmJihvPShHYSgwLGEsRS5sZW5ndGgpLEUuc3Vic3RyKDAsYSkpLHc9aXJ0KChHYShhKzEsZyxFLmxlbmd0aCksRS5zdWJzdHIoYSsxLGctKGErMSkpKSkscj1pcnQoKFhuKGcrMSxFLmxlbmd0aCsxKSxFLnN1YnN0cihnKzEpKSkpLGUubmUobyxDLHcscikpfWZ1bmN0aW9uIHdEbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihFPW5ldyBHKGUpO0UuYTxFLmMuYy5sZW5ndGg7KXtzd2l0Y2godz1sKHJlKEUpLDEwKSxmPWwoUSh3LChOdCgpLFF1KSksMTcxKSxvPW51bGwsZi5nKXtjYXNlIDE6Y2FzZSAyOm89KFZtKCksUDYpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6bz0oVm0oKSxGVCl9aWYobylydCh3LChmdCgpLHNXKSwoVm0oKSxQNikpLG89PUZUP0RVKHcsZiwocW8oKSwkbCkpOm89PVA2JiZEVSh3LGYsKHFvKCksenUpKTtlbHNlIGlmKFA1KGwoUSh3LE1zKSwxMDEpKSYmdy5qLmMubGVuZ3RoIT0wKXtmb3IodD0hMCxMPW5ldyBHKHcuaik7TC5hPEwuYy5jLmxlbmd0aDspe2lmKEM9bChyZShMKSwxMiksIShDLmo9PShDdCgpLGFyKSYmQy5lLmMubGVuZ3RoLUMuZy5jLmxlbmd0aD4wfHxDLmo9PWVyJiZDLmUuYy5sZW5ndGgtQy5nLmMubGVuZ3RoPDApKXt0PSExO2JyZWFrfWZvcihhPW5ldyBHKEMuZyk7YS5hPGEuYy5jLmxlbmd0aDspaWYobj1sKHJlKGEpLDE4KSxnPWwoUShuLmQuaSxRdSksMTcxKSxnPT0oaGYoKSxYTCl8fGc9PWQ0KXt0PSExO2JyZWFrfWZvcihyPW5ldyBHKEMuZSk7ci5hPHIuYy5jLmxlbmd0aDspaWYobj1sKHJlKHIpLDE4KSxnPWwoUShuLmMuaSxRdSksMTcxKSxnPT0oaGYoKSxZTCl8fGc9PSRiKXt0PSExO2JyZWFrfX10JiZEVSh3LGYsKHFvKCksc00pKX19fWZ1bmN0aW9uIHlEbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7Zm9yKG90PTAsej0wLEw9bmV3IEcodC5lKTtMLmE8TC5jLmMubGVuZ3RoOyl7Zm9yKEM9bChyZShMKSwxMCksQj0wLGc9MCx3PW4/bChRKEMsSVcpLDE3KS5hOmxvLGZlPXI/bChRKEMsT1cpLDE3KS5hOmxvLEU9Yi5NYXRoLm1heCh3LGZlKSxNZT1uZXcgRyhDLmopO01lLmE8TWUuYy5jLmxlbmd0aDspe2lmKFRlPWwocmUoTWUpLDEyKSwkZT1DLm4uYitUZS5uLmIrVGUuYS5iLHIpZm9yKGY9bmV3IEcoVGUuZyk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDE4KSxKPW8uZCxWPUouaSx0IT1lLmFbVi5wXSYmKHRlPWIuTWF0aC5tYXgobChRKFYsSVcpLDE3KS5hLGwoUShWLE9XKSwxNykuYSksWmU9bChRKG8sKE50KCksSngpKSwxNykuYSxaZT49RSYmWmU+PXRlJiYoQis9Vi5uLmIrSi5uLmIrSi5hLmItJGUsKytnKSk7aWYobilmb3IoZj1uZXcgRyhUZS5lKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTgpLEo9by5jLFY9Si5pLHQhPWUuYVtWLnBdJiYodGU9Yi5NYXRoLm1heChsKFEoVixJVyksMTcpLmEsbChRKFYsT1cpLDE3KS5hKSxaZT1sKFEobywoTnQoKSxKeCkpLDE3KS5hLFplPj1FJiZaZT49dGUmJihCKz1WLm4uYitKLm4uYitKLmEuYi0kZSwrK2cpKX1nPjAmJihvdCs9Qi9nLCsreil9ej4wPyh0LmE9YSpvdC96LHQuZz16KToodC5hPTAsdC5nPTApfWZ1bmN0aW9uIHhEbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3Q7Zm9yKG89ZS5mLmIsQj1vLmEsQz1vLmIsVj1lLmUuZyx6PWUuZS5mLEY1KGUuZSxvLmEsby5iKSxvdD1CL1YsU3Q9Qy96LEU9bmV3IG9yKEVIKGUuZSkpO0UuZSE9RS5pLmdjKCk7KXc9bChncihFKSwxMzUpLFV1KHcsdy5pKm90KSxHdSh3LHcuaipTdCk7Zm9yKFRlPW5ldyBvcihYYWUoZS5lKSk7VGUuZSE9VGUuaS5nYygpOylmZT1sKGdyKFRlKSwxMjMpLCRlPWZlLmksWmU9ZmUuaiwkZT4wJiZVdShmZSwkZSpvdCksWmU+MCYmR3UoZmUsWmUqU3QpO2ZvcihtQShlLmIsbmV3IHpnKSx0PW5ldyBidCxnPW5ldyBxbShuZXcgU3IoZS5jKS5hKTtnLmI7KWY9TncoZykscj1sKGYubGQoKSw3NCksbj1sKGYubWQoKSw0MDcpLmEsYT1sNihyLCExLCExKSxMPU5ndChjZyhyKSxRTihhKSxuKSxkUChMLGEpLE1lPUtndChyKSxNZSYmZ2ModCxNZSwwKT09LTEmJigkbih0LmMsTWUpLGthdChNZSwobXIoTC5iIT0wKSxsKEwuYS5hLmMsOCkpLG4pKTtmb3IodGU9bmV3IHFtKG5ldyBTcihlLmQpLmEpO3RlLmI7KUo9TncodGUpLHI9bChKLmxkKCksNzQpLG49bChKLm1kKCksNDA3KS5hLGE9bDYociwhMSwhMSksTD1OZ3QoRWIociksQU4oUU4oYSkpLG4pLEw9QU4oTCksZFAoTCxhKSxNZT1XZ3QociksTWUmJmdjKHQsTWUsMCk9PS0xJiYoJG4odC5jLE1lKSxrYXQoTWUsKG1yKEwuYiE9MCksbChMLmMuYi5jLDgpKSxuKSl9ZnVuY3Rpb24gcXZ0KGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7cmV0dXJuIGc9bmV3IHprZSh0KSxmQ24oZyxyKSxhPSEwLGUmJmUucGYoKHBpKCkseHYpKSYmKG89bChlLm9mKChwaSgpLHh2KSksODgpLGE9bz09KEpzKCksSjEpfHxvPT11Y3x8bz09dmMpLHpidChnLCExKSxWdShnLmUuUmYoKSxuZXcgdjRlKGcsITEsYSkpLHVvZShnLGcuZiwodDEoKSxHYyksKEN0KCksUW4pKSx1b2UoZyxnLmYsS2MsRHIpLHVvZShnLGcuZyxHYyxlciksdW9lKGcsZy5nLEtjLGFyKSxiZHQoZyxRbiksYmR0KGcsRHIpLHdhdChnLGFyKSx3YXQoZyxlcikscHkoKSxmPWcuQS5IYygobWgoKSxBNCkpJiZnLkIuSGMoKFpsKCksYUYpKT9OMXQoZyk6bnVsbCxmJiZ4dW4oZy5hLGYpLHZEbihnKSx3N24oZykseTduKGcpLFVNbihnKSx3X24oZyksRzduKGcpLEpjZShnLFFuKSxKY2UoZyxEciksWFNuKGcpLHdMbihnKSxuJiYoZTVuKGcpLEs3bihnKSxKY2UoZyxhciksSmNlKGcsZXIpLHc9Zy5CLkhjKChabCgpLEZNKSksT3B0KGcsdyxRbiksT3B0KGcsdyxEciksTnB0KGcsdyxhciksTnB0KGcsdyxlciksSXMobmV3IGJuKG51bGwsbmV3IGtuKG5ldyBnaShnLmkpLDApKSxuZXcgRmMpLElzKEZpKG5ldyBibihudWxsLGI1ZShnLnIpLmEub2MoKSksbmV3IHhhKSxuZXcgQmEpLG94bihnKSxnLmUuUGYoZy5vKSxJcyhuZXcgYm4obnVsbCxiNWUoZy5yKS5hLm9jKCkpLG5ldyBnYSkpLGcub31mdW5jdGlvbiBrRG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKO2ZvcihFPWdzLHI9bmV3IEcoZS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KXQ9bChyZShyKSw4NiksRT1iLk1hdGgubWluKEUsdC5kLmYuZy5jK3QuZS5hKTtmb3Ioej1uZXcgb3MsZj1uZXcgRyhlLmEuYSk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDE5NCksby5pPUUsby5lPT0wJiZDcyh6LG8sei5jLmIsei5jKTtmb3IoO3ouYiE9MDspe2ZvcihvPWwoei5iPT0wP251bGw6KG1yKHouYiE9MCksYWYoeix6LmEuYSkpLDE5NCksYT1vLmYuZy5jLEI9by5hLmEuZWMoKS5LYygpO0IuT2IoKTspQz1sKEIuUGIoKSw4NiksSj1vLmkrQy5lLmEsQy5kLmd8fEMuZy5jPEo/Qy5vPUo6Qy5vPUMuZy5jO2ZvcihhLT1vLmYubyxvLmIrPWEsZS5jPT0oSnMoKSx2Yyl8fGUuYz09UTE/by5jKz1hOm8uYy09YSxMPW8uYS5hLmVjKCkuS2MoKTtMLk9iKCk7KWZvcihDPWwoTC5QYigpLDg2KSx3PUMuZi5LYygpO3cuT2IoKTspZz1sKHcuUGIoKSw4NiksVWcoZS5jKT9WPWUuZi55ZihDLGcpOlY9ZS5mLnpmKEMsZyksZy5kLmk9Yi5NYXRoLm1heChnLmQuaSxDLm8rQy5nLmIrVi1nLmUuYSksZy5rfHwoZy5kLmk9Yi5NYXRoLm1heChnLmQuaSxnLmcuYy1nLmUuYSkpLC0tZy5kLmUsZy5kLmU9PTAmJnVpKHosZy5kKX1mb3Iobj1uZXcgRyhlLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSx0LmcuYz10Lm99ZnVuY3Rpb24gRURuKGUpe3ZhciB0LG4scixhLG8sZixnLHc7c3dpdGNoKGc9ZS5iLHQ9ZS5hLGwoUShlLChkVSgpLEFfZSkpLDQzNSkuZyl7Y2FzZSAwOlZzKGcsbmV3IFZ0KG5ldyBacikpO2JyZWFrO2Nhc2UgMTpkZWZhdWx0OlZzKGcsbmV3IFZ0KG5ldyBaaSkpfXN3aXRjaChsKFEoZSxTX2UpLDQzNikuZyl7Y2FzZSAxOlZzKGcsbmV3IHduKSxWcyhnLG5ldyBudSksVnMoZyxuZXcgb2QpO2JyZWFrO2Nhc2UgMDpkZWZhdWx0OlZzKGcsbmV3IHduKSxWcyhnLG5ldyAkZyl9c3dpdGNoKGwoUShlLE1fZSksMjU3KS5nKXtjYXNlIDA6dz1uZXcgJDA7YnJlYWs7Y2FzZSAxOnc9bmV3IFloO2JyZWFrO2Nhc2UgMjp3PW5ldyB3MTticmVhaztjYXNlIDM6dz1uZXcgRGw7YnJlYWs7Y2FzZSA1Onc9bmV3IEU1KG5ldyB3MSk7YnJlYWs7Y2FzZSA0Onc9bmV3IEU1KG5ldyBZaCk7YnJlYWs7Y2FzZSA3Onc9bmV3IEwzZShuZXcgRTUobmV3IFloKSxuZXcgRTUobmV3IHcxKSk7YnJlYWs7Y2FzZSA4Onc9bmV3IEwzZShuZXcgRTUobmV3IERsKSxuZXcgRTUobmV3IHcxKSk7YnJlYWs7Y2FzZSA2OmRlZmF1bHQ6dz1uZXcgRTUobmV3IERsKX1mb3IoZj1uZXcgRyhnKTtmLmE8Zi5jLmMubGVuZ3RoOyl7Zm9yKG89bChyZShmKSwxNzYpLHI9MCxhPTAsbj1uZXcgY2EocHQocikscHQoYSkpO2lBbih0LG8scixhKTspbj1sKHcuVmUobixvKSw0Mikscj1sKG4uYSwxNykuYSxhPWwobi5iLDE3KS5hO2Vfbih0LG8scixhKX19ZnVuY3Rpb24gSHZ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdDtmb3Iobi5VZyhteXQsMSksQj0oUWkoKSxQZGUpLGUuYT09KGtBKCksalcpJiYoQj1uSWUpLEM9MCxDbigpLHQuamQobmV3IE5pZShCKSksbz10LmdjKCksZz10LmZkKHQuZ2MoKSksRT0hMDtFJiZnLlNiKCk7KVRlPWwoZy5VYigpLDQwKSxsKFEoVGUsQiksMTcpLmE9PTA/LS1vOkU9ITE7aWYob3Q9dC5rZCgwLG8pLGY9bmV3IGRhZShvdCksb3Q9dC5rZChvLHQuZ2MoKSksdz1uZXcgZGFlKG90KSxmLmI9PTApZm9yKEo9UnIodywwKTtKLmIhPUouZC5jOylWPWwoQnIoSiksNDApLHJ0KFYscE0scHQoQysrKSk7ZWxzZSBmb3IoTD1mLmIsWmU9UnIoZiwwKTtaZS5iIT1aZS5kLmM7KXtmb3IoJGU9bChCcihaZSksNDApLHJ0KCRlLHBNLHB0KEMrKykpLHI9cGNlKCRlKSxIdnQoZSxyLG4uZWgoMS9MfDApKSwkbShyLF81ZShuZXcgTmllKHBNKSkpLHo9bmV3IG9zLE1lPVJyKHIsMCk7TWUuYiE9TWUuZC5jOylmb3IoVGU9bChCcihNZSksNDApLGZlPVJyKCRlLmQsMCk7ZmUuYiE9ZmUuZC5jOyl0ZT1sKEJyKGZlKSw2NSksdGUuYz09VGUmJkNzKHosdGUsei5jLmIsei5jKTtmb3IoQ2goJGUuZCksS2EoJGUuZCx6KSxnPVJyKHcsdy5iKSxhPSRlLmQuYixFPSEwOzA8YSYmRSYmZy5TYigpOylUZT1sKGcuVWIoKSw0MCksbChRKFRlLEIpLDE3KS5hPT0wPyhydChUZSxwTSxwdChDKyspKSwtLWEsZy5RYigpKTpFPSExfW4uVmcoKX1mdW5jdGlvbiBURG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHo7Zm9yKEw9emUoR2UoYXQoZSwoU2IoKSxlZ2UpKSkpLFJ0KEJ0KGF0KGUsRkllKSkpJiYoQz1sKGF0KGUsKEg1KCksWTYpKSwyNyksbz1sKE9lKEE1ZShsKE9lKCghQy5lJiYoQy5lPW5ldyBMbihqcyxDLDcsNCkpLEMuZSksKCFDLmUmJihDLmU9bmV3IExuKGpzLEMsNyw0KSksQy5lKS5pLTEpLDc0KSksMCksMjcpLHI9bChPZShBNWUobChPZSgoIUMuZSYmKEMuZT1uZXcgTG4oanMsQyw3LDQpKSxDLmUpLDApLDc0KSksMCksMjcpLGY9bmV3IGx0KG8uaStvLmcvMixvLmorby5mLzIpLGE9bmV3IGx0KHIuaStyLmcvMixyLmorci5mLzIpLG49TCxuPD0wJiYobis9aXYpLEI9Yi5NYXRoLmFjb3MoKGYuYSphLmErZi5iKmEuYikvKGIuTWF0aC5zcXJ0KGYuYSpmLmErZi5iKmYuYikqYi5NYXRoLnNxcnQoYS5hKmEuYSthLmIqYS5iKSkpLEI8PTAmJihCKz1pdiksdD1iLk1hdGguYXRhbjIoZi5iLGYuYSksdDw9MCYmKHQrPWl2KSxMPWxDZS0odC1uK0IvMikpLHc9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7dy5lIT13LmkuZ2MoKTspZz1sKGdyKHcpLDI3KSxFPW5ldyBsdChnLmkrZy5nLzIsZy5qK2cuZi8yKSx6PUUuYSpiLk1hdGguY29zKEwpLUUuYipiLk1hdGguc2luKEwpLEUuYj1FLmEqYi5NYXRoLnNpbihMKStFLmIqYi5NYXRoLmNvcyhMKSxFLmE9eixRaChnLEUuYS1nLmcvMixFLmItZy5mLzIpfWZ1bmN0aW9uIENEbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKHQuVWcoIkludmVydGVkIHBvcnQgcHJlcHJvY2Vzc2luZyIsMSksQz1lLmIsRT1uZXcgVWEoQywwKSxuPW51bGwsTWU9bmV3IGJ0O0UuYjxFLmQuZ2MoKTspe2ZvcihUZT1uLG49KG1yKEUuYjxFLmQuZ2MoKSksbChFLmQuWGIoRS5jPUUuYisrKSwzMCkpLHo9bmV3IEcoTWUpO3ouYTx6LmMuYy5sZW5ndGg7KUw9bChyZSh6KSwxMCksVmEoTCxUZSk7Zm9yKE1lLmMubGVuZ3RoPTAsVj1uZXcgRyhuLmEpO1YuYTxWLmMuYy5sZW5ndGg7KWlmKEw9bChyZShWKSwxMCksTC5rPT0oWm4oKSxQcykmJlA1KGwoUShMLChOdCgpLE1zKSksMTAxKSkpe2ZvcihmZT1ya2UoTCwocW8oKSwkbCksKEN0KCksYXIpKS5LYygpO2ZlLk9iKCk7KWZvcihKPWwoZmUuUGIoKSwxMiksdz1KLmUsZz1sKGoxKHcsV2UodTFlLEJoZSwxOCx3LmMubGVuZ3RoLDAsMSkpLDQ4MyksYT1nLG89MCxmPWEubGVuZ3RoO288ZjsrK28pcj1hW29dLFdBbihlLEoscixNZSk7Zm9yKHRlPXJrZShMLHp1LGVyKS5LYygpO3RlLk9iKCk7KWZvcihKPWwodGUuUGIoKSwxMiksdz1KLmcsZz1sKGoxKHcsV2UodTFlLEJoZSwxOCx3LmMubGVuZ3RoLDAsMSkpLDQ4MyksYT1nLG89MCxmPWEubGVuZ3RoO288ZjsrK28pcj1hW29dLEtBbihlLEoscixNZSl9fWZvcihCPW5ldyBHKE1lKTtCLmE8Qi5jLmMubGVuZ3RoOylMPWwocmUoQiksMTApLFZhKEwsbik7dC5WZygpfWZ1bmN0aW9uIEFsZShlLHQsbixyLGEsbyxmKXt2YXIgZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKEI9bnVsbCxyPT0oU3coKSxIYik/Qj10OnI9PUs2JiYoQj1uKSxKPUIuYS5lYygpLktjKCk7Si5PYigpOyl7Zm9yKFY9bChKLlBiKCksMTIpLHRlPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbVi5pLm4sVi5uLFYuYV0pKS5iLE1lPW5ldyBLcyxnPW5ldyBLcyxFPW5ldyBOMShWLmIpO0xjKEUuYSl8fExjKEUuYik7KWlmKHc9bChMYyhFLmEpP3JlKEUuYSk6cmUoRS5iKSwxOCksUnQoQnQoUSh3LChmdCgpLFcxKSkpKT09YSYmZ2Mobyx3LDApIT0tMSl7aWYody5kPT1WP2ZlPXcuYzpmZT13LmQsVGU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtmZS5pLm4sZmUubixmZS5hXSkpLmIsYi5NYXRoLmFicyhUZS10ZSk8LjIpY29udGludWU7VGU8dGU/dC5hLl9iKGZlKT9uYShNZSxuZXcgY2EoSGIsdykpOm5hKE1lLG5ldyBjYShLNix3KSk6dC5hLl9iKGZlKT9uYShnLG5ldyBjYShIYix3KSk6bmEoZyxuZXcgY2EoSzYsdykpfWlmKE1lLmEuZ2MoKT4xKWZvcih6PW5ldyBJa2UoVixNZSxyKSx0byhNZSxuZXcgSmV0KGUseikpLCRuKGYuYyx6KSxMPU1lLmEuZWMoKS5LYygpO0wuT2IoKTspQz1sKEwuUGIoKSw0MiksYWwobyxDLmIpO2lmKGcuYS5nYygpPjEpZm9yKHo9bmV3IElrZShWLGcsciksdG8oZyxuZXcgWmV0KGUseikpLCRuKGYuYyx6KSxMPWcuYS5lYygpLktjKCk7TC5PYigpOylDPWwoTC5QYigpLDQyKSxhbChvLEMuYil9fWZ1bmN0aW9uIFNEbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7aWYoSj1lLm4sdGU9ZS5vLEI9ZS5kLEw9emUoR2UoUHkoZSwoTnQoKSxvZGUpKSkpLHQpe2ZvcihDPUwqKHQuZ2MoKS0xKSx6PTAsdz10LktjKCk7dy5PYigpOylmPWwody5QYigpLDEwKSxDKz1mLm8uYSx6PWIuTWF0aC5tYXgoeixmLm8uYik7Zm9yKGZlPUouYS0oQy10ZS5hKS8yLG89Si5iLUIuZCt6LHI9dGUuYS8odC5nYygpKzEpLGE9cixnPXQuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTApLGYubi5hPWZlLGYubi5iPW8tZi5vLmIsZmUrPWYuby5hK0wsRT1RMnQoZiksRS5uLmE9Zi5vLmEvMi1FLmEuYSxFLm4uYj1mLm8uYixWPWwoUShmLChmdCgpLHJXKSksMTIpLFYuZS5jLmxlbmd0aCtWLmcuYy5sZW5ndGg9PTEmJihWLm4uYT1hLVYuYS5hLFYubi5iPTAsTWMoVixlKSksYSs9cn1pZihuKXtmb3IoQz1MKihuLmdjKCktMSksej0wLHc9bi5LYygpO3cuT2IoKTspZj1sKHcuUGIoKSwxMCksQys9Zi5vLmEsej1iLk1hdGgubWF4KHosZi5vLmIpO2ZvcihmZT1KLmEtKEMtdGUuYSkvMixvPUouYit0ZS5iK0IuYS16LHI9dGUuYS8obi5nYygpKzEpLGE9cixnPW4uS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTApLGYubi5hPWZlLGYubi5iPW8sZmUrPWYuby5hK0wsRT1RMnQoZiksRS5uLmE9Zi5vLmEvMi1FLmEuYSxFLm4uYj0wLFY9bChRKGYsKGZ0KCksclcpKSwxMiksVi5lLmMubGVuZ3RoK1YuZy5jLmxlbmd0aD09MSYmKFYubi5hPWEtVi5hLmEsVi5uLmI9dGUuYixNYyhWLGUpKSxhKz1yfX1mdW5jdGlvbiBfRG4oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYobChRKHQsKGZ0KCksTHUpKSwyMSkuSGMoKEhvKCksdmYpKSl7Zm9yKGc9bmV3IEcodC5hKTtnLmE8Zy5jLmMubGVuZ3RoOylvPWwocmUoZyksMTApLG8uaz09KFpuKCksUHMpJiYoYT1sKFEobywoTnQoKSx2VykpLDE0MCksZS5jPWIuTWF0aC5taW4oZS5jLG8ubi5hLWEuYiksZS5hPWIuTWF0aC5tYXgoZS5hLG8ubi5hK28uby5hK2EuYyksZS5kPWIuTWF0aC5taW4oZS5kLG8ubi5iLWEuZCksZS5iPWIuTWF0aC5tYXgoZS5iLG8ubi5iK28uby5iK2EuYSkpO2ZvcihmPW5ldyBHKHQuYSk7Zi5hPGYuYy5jLmxlbmd0aDspaWYobz1sKHJlKGYpLDEwKSxvLmshPShabigpLFBzKSlzd2l0Y2goby5rLmcpe2Nhc2UgMjppZihyPWwoUShvLChOdCgpLFF1KSksMTcxKSxyPT0oaGYoKSwkYikpe28ubi5hPWUuYy0xMCxuZ3QobyxuZXcgYmopLkpiKG5ldyBRV2UobykpO2JyZWFrfWlmKHI9PWQ0KXtvLm4uYT1lLmErMTAsbmd0KG8sbmV3IHZaKS5KYihuZXcgSldlKG8pKTticmVha31pZihuPWwoUShvLGh2KSwzMTEpLG49PShlcCgpLEY2KSl7ZHZ0KG8pLkpiKG5ldyBaV2UobykpLG8ubi5iPWUuZC0xMDticmVha31pZihuPT1VeCl7ZHZ0KG8pLkpiKG5ldyBlWWUobykpLG8ubi5iPWUuYisxMDticmVha31icmVhaztkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiVGhlIG5vZGUgdHlwZSAiK28uaysiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICIra09uKSl9fX1mdW5jdGlvbiBBRG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2Zvcih3PW5ldyBsdChyLmkrci5nLzIsci5qK3IuZi8yKSx6PWx2dChyKSxWPWwoYXQodCwoTnQoKSxNcykpLDEwMSksdGU9bChhdChyLFZUKSw2NCksTXR0KGZkdChyKSxtNCl8fChyLmk9PTAmJnIuaj09MD9KPTA6Sj1xeG4ocix0ZSksSGkocixtNCxKKSksRT1uZXcgbHQodC5nLHQuZiksYT12UChyLFYsdGUseixFLHcsbmV3IGx0KHIuZyxyLmYpLGwoUShuLFJoKSw4OCksbikscnQoYSwoZnQoKSx6aSksciksbz1sKGp0KGEuaiwwKSwxMiksbShvLEdfbihyKSkscnQoYSx2NCwoUmwoKSx1bihZYikpKSxMPWwoYXQodCx2NCksMTgxKS5IYyh2cCksZz1uZXcgb3IoKCFyLm4mJihyLm49bmV3IG50KGVjLHIsMSw3KSksci5uKSk7Zy5lIT1nLmkuZ2MoKTspaWYoZj1sKGdyKGcpLDEzNSksIVJ0KEJ0KGF0KGYsbXYpKSkmJmYuYSYmKEI9T2NlKGYpLHZ0KG8uZixCKSwhTCkpc3dpdGNoKEM9MCxXXyhsKGF0KHQsdjQpLDIxKSkmJihDPW05ZShuZXcgbHQoZi5pLGYuaiksbmV3IGx0KGYuZyxmLmYpLG5ldyBsdChyLmcsci5mKSwwLHRlKSksdGUuZyl7Y2FzZSAyOmNhc2UgNDpCLm8uYT1DO2JyZWFrO2Nhc2UgMTpjYXNlIDM6Qi5vLmI9Q31ydChhLEdULEdlKGF0KGRzKHQpLEdUKSkpLHJ0KGEsS1QsR2UoYXQoZHModCksS1QpKSkscnQoYSx5NCxHZShhdChkcyh0KSx5NCkpKSx2dChuLmEsYSksa2koZS5hLHIsYSl9ZnVuY3Rpb24gTERuKGUsdCxuLHIsYSxvKXt2YXIgZixnLHcsRSxDLEw7Zm9yKEU9bmV3IGd1LHBjKEUsdCksbGEoRSxsKGF0KHQsKE50KCksVlQpKSw2NCkpLHJ0KEUsKGZ0KCksemkpLHQpLE1jKEUsbiksTD1FLm8sTC5hPXQuZyxMLmI9dC5mLEM9RS5uLEMuYT10LmksQy5iPXQuaixraShlLmEsdCxFKSxmPVc1KGZjKERjKG5ldyBibihudWxsLCghdC5lJiYodC5lPW5ldyBMbihqcyx0LDcsNCkpLG5ldyBrbih0LmUsMTYpKSksbmV3IGxqKSxuZXcgUTcpLG5ldyBxV2UodCkpLGZ8fChmPVc1KGZjKERjKG5ldyBibihudWxsLCghdC5kJiYodC5kPW5ldyBMbihqcyx0LDgsNSkpLG5ldyBrbih0LmQsMTYpKSksbmV3IEg5KSxuZXcgdVMpLG5ldyBIV2UodCkpKSxmfHwoZj1XNShuZXcgYm4obnVsbCwoIXQuZSYmKHQuZT1uZXcgTG4oanMsdCw3LDQpKSxuZXcga24odC5lLDE2KSkpLG5ldyBHSikpLHJ0KEUseEIsKEhuKCksISFmKSksWUxuKEUsbyxhLGwoYXQodCxwMyksOCkpLHc9bmV3IG9yKCghdC5uJiYodC5uPW5ldyBudChlYyx0LDEsNykpLHQubikpO3cuZSE9dy5pLmdjKCk7KWc9bChncih3KSwxMzUpLCFSdChCdChhdChnLG12KSkpJiZnLmEmJnZ0KEUuZixPY2UoZykpO3N3aXRjaChhLmcpe2Nhc2UgMjpjYXNlIDE6KEUuaj09KEN0KCksUW4pfHxFLmo9PURyKSYmci5GYygoSG8oKSxCNikpO2JyZWFrO2Nhc2UgNDpjYXNlIDM6KEUuaj09KEN0KCksYXIpfHxFLmo9PWVyKSYmci5GYygoSG8oKSxCNikpfXJldHVybiBFfWZ1bmN0aW9uIE1EbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm47Zm9yKE1lPTAsVj0wLHo9MCxCPTEsVGU9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7VGUuZSE9VGUuaS5nYygpOyl0ZT1sKGdyKFRlKSwyNyksQis9WGcobmV3IGhyKGRyKGNwKHRlKS5hLktjKCksbmV3IGopKSksY249dGUuZyxWPWIuTWF0aC5tYXgoVixjbiksTD10ZS5mLHo9Yi5NYXRoLm1heCh6LEwpLE1lKz1jbipMO2ZvcihKPSghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKS5pLGY9TWUrMipyKnIqQipKLG89Yi5NYXRoLnNxcnQoZiksdz1iLk1hdGgubWF4KG8qbixWKSxnPWIuTWF0aC5tYXgoby9uLHopLGZlPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO2ZlLmUhPWZlLmkuZ2MoKTspdGU9bChncihmZSksMjcpLGFuPWEuYisoSmwodCwyNikqaUwrSmwodCwyNykqc0wpKih3LXRlLmcpLEJuPWEuYisoSmwodCwyNikqaUwrSmwodCwyNykqc0wpKihnLXRlLmYpLFV1KHRlLGFuKSxHdSh0ZSxCbik7Zm9yKFN0PXcrKGEuYithLmMpLG90PWcrKGEuZCthLmEpLFplPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO1plLmUhPVplLmkuZ2MoKTspZm9yKCRlPWwoZ3IoWmUpLDI3KSxDPW5ldyBocihkcihjcCgkZSkuYS5LYygpLG5ldyBqKSk7anIoQyk7KUU9bCh4cihDKSw3NCkscUEoRSl8fFBJbihFLHQsU3Qsb3QpO1N0Kz1hLmIrYS5jLG90Kz1hLmQrYS5hLEd3KGUsU3Qsb3QsITEsITApfWZ1bmN0aW9uIHprZShlKXt2YXIgdDtpZih0aGlzLnI9dXBuKG5ldyBTYSxuZXcgUG8pLHRoaXMuYj1uZXcgTEEobChYcihPbyksMjk3KSksdGhpcy5wPW5ldyBMQShsKFhyKE9vKSwyOTcpKSx0aGlzLmk9bmV3IExBKGwoWHIodzd0KSwyOTcpKSx0aGlzLmU9ZSx0aGlzLm89bmV3IEVvKGUuTWYoKSksdGhpcy5EPWUuWWYoKXx8UnQoQnQoZS5vZigocGkoKSxLQikpKSksdGhpcy5BPWwoZS5vZigocGkoKSxrdikpLDIxKSx0aGlzLkI9bChlLm9mKFViKSwyMSksdGhpcy5xPWwoZS5vZihfTSksMTAxKSx0aGlzLnU9bChlLm9mKFM0KSwyMSksIVF4bih0aGlzLnUpKXRocm93IHVlKG5ldyBWcCgiSW52YWxpZCBwb3J0IGxhYmVsIHBsYWNlbWVudDogIit0aGlzLnUpKTtpZih0aGlzLnY9UnQoQnQoZS5vZihDTmUpKSksdGhpcy5qPWwoZS5vZihyNyksMjEpLCFTVG4odGhpcy5qKSl0aHJvdyB1ZShuZXcgVnAoIkludmFsaWQgbm9kZSBsYWJlbCBwbGFjZW1lbnQ6ICIrdGhpcy5qKSk7dGhpcy5uPWwoQkEoZSxmTmUpLDEwNyksdGhpcy5rPXplKEdlKEJBKGUsaVkpKSksdGhpcy5kPXplKEdlKEJBKGUsTU5lKSkpLHRoaXMudz16ZShHZShCQShlLFBOZSkpKSx0aGlzLnM9emUoR2UoQkEoZSxETmUpKSksdGhpcy50PXplKEdlKEJBKGUsSU5lKSkpLHRoaXMuQz1sKEJBKGUsT05lKSwxNDApLHRoaXMuYz0yKnRoaXMuZCx0PSF0aGlzLkIuSGMoKFpsKCksc0YpKSx0aGlzLmY9bmV3IERBKDAsdCwwKSx0aGlzLmc9bmV3IERBKDEsdCwwKSxYaWUodGhpcy5mLCh0MSgpLCR1KSx0aGlzLmcpfWZ1bmN0aW9uIEREbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7Zm9yKHQuVWcoIkNvbW1lbnQgcHJlLXByb2Nlc3NpbmciLDEpLG49MCx3PW5ldyBHKGUuYSk7dy5hPHcuYy5jLmxlbmd0aDspaWYoZz1sKHJlKHcpLDEwKSxSdChCdChRKGcsKE50KCksUUwpKSkpKXtmb3IoKytuLGE9MCxyPW51bGwsRT1udWxsLFY9bmV3IEcoZy5qKTtWLmE8Vi5jLmMubGVuZ3RoOylCPWwocmUoViksMTIpLGErPUIuZS5jLmxlbmd0aCtCLmcuYy5sZW5ndGgsQi5lLmMubGVuZ3RoPT0xJiYocj1sKGp0KEIuZSwwKSwxOCksRT1yLmMpLEIuZy5jLmxlbmd0aD09MSYmKHI9bChqdChCLmcsMCksMTgpLEU9ci5kKTtpZihhPT0xJiZFLmUuYy5sZW5ndGgrRS5nLmMubGVuZ3RoPT0xJiYhUnQoQnQoUShFLmksUUwpKSkpdUluKGcscixFLEUuaSksUV8odyk7ZWxzZXtmb3IoZmU9bmV3IGJ0LHo9bmV3IEcoZy5qKTt6LmE8ei5jLmMubGVuZ3RoOyl7Zm9yKEI9bChyZSh6KSwxMiksTD1uZXcgRyhCLmcpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxOCksQy5kLmcuYy5sZW5ndGg9PTB8fCRuKGZlLmMsQyk7Zm9yKGY9bmV3IEcoQi5lKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTgpLG8uYy5lLmMubGVuZ3RoPT0wfHwkbihmZS5jLG8pfWZvcih0ZT1uZXcgRyhmZSk7dGUuYTx0ZS5jLmMubGVuZ3RoOylKPWwocmUodGUpLDE4KSxVdyhKLCEwKX19dC5fZygpJiZ0LmJoKCJGb3VuZCAiK24rIiBjb21tZW50IGJveGVzIiksdC5WZygpfWZ1bmN0aW9uIHFrZShlLHQpe0JpdCgpO3ZhciBuLHIsYSxvLGYsZyx3O2lmKHRoaXMuYT1uZXcgdnllKHRoaXMpLHRoaXMuYj1lLHRoaXMuYz10LHRoaXMuZj0kYWUoaWMoKEVsKCksaW8pLHQpKSx0aGlzLmYuZGMoKSlpZigoZz15eGUoaW8sZSkpPT10KWZvcih0aGlzLmU9ITAsdGhpcy5kPW5ldyBidCx0aGlzLmY9bmV3IEUkLHRoaXMuZi5GYyhjdiksbChWVShsTihpbyxBaChlKSksIiIpLDI5KT09ZSYmdGhpcy5mLkZjKEtfKGlvLEFoKGUpKSksYT1hbGUoaW8sZSkuS2MoKTthLk9iKCk7KXN3aXRjaChyPWwoYS5QYigpLDE3OSksa3coaWMoaW8scikpKXtjYXNlIDQ6e3RoaXMuZC5GYyhyKTticmVha31jYXNlIDU6e3RoaXMuZi5HYygkYWUoaWMoaW8scikpKTticmVha319ZWxzZSBpZihGbygpLGwodCw2OSkueGsoKSlmb3IodGhpcy5lPSEwLHRoaXMuZj1udWxsLHRoaXMuZD1uZXcgYnQsZj0wLHc9KGUuaT09bnVsbCYmU2QoZSksZS5pKS5sZW5ndGg7Zjx3OysrZilmb3Iocj0obj0oZS5pPT1udWxsJiZTZChlKSxlLmkpLGY+PTAmJmY8bi5sZW5ndGg/bltmXTpudWxsKSxvPXJ4KGljKGlvLHIpKTtvO289cngoaWMoaW8sbykpKW89PXQmJnRoaXMuZC5GYyhyKTtlbHNlIGt3KGljKGlvLHQpKT09MSYmZz8odGhpcy5mPW51bGwsdGhpcy5kPShreCgpLG5BdCkpOih0aGlzLmY9bnVsbCx0aGlzLmU9ITAsdGhpcy5kPShDbigpLG5ldyBEYSh0KSkpO2Vsc2UgdGhpcy5lPWt3KGljKGlvLHQpKT09NSx0aGlzLmYuRmIoc3BlKSYmKHRoaXMuZj1zcGUpfWZ1bmN0aW9uIFZ2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihuPTAscj11N24oZSx0KSxCPWUucyx6PWUudCxFPWwobCgkaShlLnIsdCksMjEpLDg3KS5LYygpO0UuT2IoKTspaWYodz1sKEUuUGIoKSwxMTcpLCEoIXcuY3x8dy5jLmQuYy5sZW5ndGg8PTApKXtzd2l0Y2goVj13LmIuTWYoKSxnPXcuYi5wZigocGkoKSxyaCkpP3plKEdlKHcuYi5vZihyaCkpKTowLEM9dy5jLEw9Qy5pLEwuYj0oZj1DLm4sQy5lLmErZi5iK2YuYyksTC5hPShvPUMubixDLmUuYitvLmQrby5hKSx0Lmcpe2Nhc2UgMTpMLmM9dy5hPyhWLmEtTC5iKS8yOlYuYStCLEwuZD1WLmIrZytyLFowKEMsKEJsKCksQmIpKSx2ZChDLChvbCgpLGExKSk7YnJlYWs7Y2FzZSAzOkwuYz13LmE/KFYuYS1MLmIpLzI6Vi5hK0IsTC5kPS1nLXItTC5hLFowKEMsKEJsKCksQmIpKSx2ZChDLChvbCgpLHcwKSk7YnJlYWs7Y2FzZSAyOkwuYz0tZy1yLUwuYix3LmE/KGE9ZS52P0wuYTpsKGp0KEMuZCwwKSwxODcpLk1mKCkuYixMLmQ9KFYuYi1hKS8yKTpMLmQ9Vi5iK3osWjAoQywoQmwoKSx2MCkpLHZkKEMsKG9sKCksRmIpKTticmVhaztjYXNlIDQ6TC5jPVYuYStnK3Isdy5hPyhhPWUudj9MLmE6bChqdChDLmQsMCksMTg3KS5NZigpLmIsTC5kPShWLmItYSkvMik6TC5kPVYuYit6LFowKEMsKEJsKCksRmQpKSx2ZChDLChvbCgpLEZiKSl9KHQ9PShDdCgpLFFuKXx8dD09RHIpJiYobj1iLk1hdGgubWF4KG4sTC5hKSl9bj4wJiYobChRbyhlLmIsdCksMTI3KS5hLmI9bil9ZnVuY3Rpb24gSURuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtpZihCPXplKEdlKFEoZSwoTnQoKSxHVCkpKSksej16ZShHZShRKGUsS1QpKSksTD16ZShHZShRKGUseTQpKSksZz1lLm8sbz1sKGp0KGUuaiwwKSwxMiksZj1vLm4sSj1ZOW4obyxMKSwhIUope2lmKHQuSGMoKFJsKCksdnApKSlzd2l0Y2gobChRKGUsKGZ0KCksV2MpKSw2NCkuZyl7Y2FzZSAxOkouYz0oZy5hLUouYikvMi1mLmEsSi5kPXo7YnJlYWs7Y2FzZSAzOkouYz0oZy5hLUouYikvMi1mLmEsSi5kPS16LUouYTticmVhaztjYXNlIDI6biYmby5lLmMubGVuZ3RoPT0wJiZvLmcuYy5sZW5ndGg9PTA/KEM9cj9KLmE6bChqdChvLmYsMCksNzIpLm8uYixKLmQ9KGcuYi1DKS8yLWYuYik6Si5kPWcuYit6LWYuYixKLmM9LUItSi5iO2JyZWFrO2Nhc2UgNDpuJiZvLmUuYy5sZW5ndGg9PTAmJm8uZy5jLmxlbmd0aD09MD8oQz1yP0ouYTpsKGp0KG8uZiwwKSw3Mikuby5iLEouZD0oZy5iLUMpLzItZi5iKTpKLmQ9Zy5iK3otZi5iLEouYz1CfWVsc2UgaWYodC5IYyhZYikpc3dpdGNoKGwoUShlLChmdCgpLFdjKSksNjQpLmcpe2Nhc2UgMTpjYXNlIDM6Si5jPWYuYStCO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6biYmIW8uYz8oQz1yP0ouYTpsKGp0KG8uZiwwKSw3Mikuby5iLEouZD0oZy5iLUMpLzItZi5iKTpKLmQ9Zi5iK3p9Zm9yKGE9Si5kLEU9bmV3IEcoby5mKTtFLmE8RS5jLmMubGVuZ3RoOyl3PWwocmUoRSksNzIpLFY9dy5uLFYuYT1KLmMsVi5iPWEsYSs9dy5vLmIrTH19ZnVuY3Rpb24gT0RuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbjtmb3Iob3Q9bmV3IGJ0LFY9bmV3IEcoZS5iKTtWLmE8Vi5jLmMubGVuZ3RoOylmb3Ioej1sKHJlKFYpLDMwKSxmZT1uZXcgRyh6LmEpO2ZlLmE8ZmUuYy5jLmxlbmd0aDspaWYoSj1sKHJlKGZlKSwxMCksSi5rPT0oWm4oKSxVcykmJm5zKEosKGZ0KCksYVcpKSl7Zm9yKFRlPW51bGwsJGU9bnVsbCxNZT1udWxsLGFuPW5ldyBHKEouaik7YW4uYTxhbi5jLmMubGVuZ3RoOylzd2l0Y2goY249bChyZShhbiksMTIpLGNuLmouZyl7Y2FzZSA0OlRlPWNuO2JyZWFrO2Nhc2UgMjokZT1jbjticmVhaztkZWZhdWx0Ok1lPWNufWZvcihaZT1sKGp0KE1lLmcsMCksMTgpLEM9bmV3IEd6KFplLmEpLEU9bmV3IEVvKE1lLm4pLE9pKEUsSi5uKSxMPVJyKEMsMCksek8oTCxFKSxTdD1BTihaZS5hKSxCPW5ldyBFbyhNZS5uKSxPaShCLEoubiksQ3MoU3QsQixTdC5jLmIsU3QuYyksQm49bChRKEosYVcpLDEwKSxqbj1sKGp0KEJuLmosMCksMTIpLHc9bChqMShUZS5lLFdlKHUxZSxCaGUsMTgsMCwwLDEpKSw0ODMpLHI9dyxvPTAsZz1yLmxlbmd0aDtvPGc7KytvKXQ9cltvXSxGYSh0LGpuKSxBY2UodC5hLHQuYS5iLEMpO2Zvcih3PWtkKCRlLmcpLG49dyxhPTAsZj1uLmxlbmd0aDthPGY7KythKXQ9blthXSxwbyh0LGpuKSxBY2UodC5hLDAsU3QpO3BvKFplLG51bGwpLEZhKFplLG51bGwpLCRuKG90LmMsSil9Zm9yKHRlPW5ldyBHKG90KTt0ZS5hPHRlLmMuYy5sZW5ndGg7KUo9bChyZSh0ZSksMTApLFZhKEosbnVsbCl9ZnVuY3Rpb24gTkRuKCl7d2koZ0YsbmV3IHhyZSksd2koQVksbmV3IEgkKSx3aShwRixuZXcgUnJlKSx3aShWUGUsbmV3IFgkKSx3aSh6dCxuZXcgUzEpLHdpKGxlKEFsLDEpLG5ldyBRJCksd2koTnMsbmV3IGhrKSx3aShqeCxuZXcgRkkpLHdpKHp0LG5ldyBxUyksd2koenQsbmV3IG1yZSksd2koenQsbmV3IHZyZSksd2kodGEsbmV3IHA4KSx3aSh6dCxuZXcgUiQpLHdpKG1mLG5ldyBqJCksd2kobWYsbmV3IHdyZSksd2koenQsbmV3ICQkKSx3aShfVCxuZXcgeiQpLHdpKHp0LG5ldyBOSSksd2koenQsbmV3IEhTKSx3aSh6dCxuZXcga3JlKSx3aSh6dCxuZXcgRXJlKSx3aSh6dCxuZXcgVHJlKSx3aShsZShBbCwxKSxuZXcgQ3JlKSx3aSh6dCxuZXcgU3JlKSx3aSh6dCxuZXcgcSQpLHdpKG1mLG5ldyBfcmUpLHdpKG1mLG5ldyBBcmUpLHdpKHp0LG5ldyBMcmUpLHdpKHJvLG5ldyBNcmUpLHdpKHp0LG5ldyBEcmUpLHdpKHIzLG5ldyBWUyksd2koenQsbmV3IElyZSksd2koenQsbmV3IE9yZSksd2koenQsbmV3IE5yZSksd2koenQsbmV3IFByZSksd2kobWYsbmV3IEJyZSksd2kobWYsbmV3IEZyZSksd2koenQsbmV3IFYkKSx3aSh6dCxuZXcgVSQpLHdpKHp0LG5ldyBqcmUpLHdpKHp0LG5ldyBQSSksd2koenQsbmV3ICRyZSksd2koenQsbmV3IEckKSx3aShpMyxuZXcgenJlKSx3aSh6dCxuZXcgSyQpLHdpKHp0LG5ldyBxcmUpLHdpKHp0LG5ldyBXJCksd2koaTMsbmV3IFkkKSx3aShyMyxuZXcgQkkpLHdpKHp0LG5ldyB3NSksd2kocm8sbmV3IFVTKX1mdW5jdGlvbiBVdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtzd2l0Y2goQz1uZXcgYmwsZS5hLmcpe2Nhc2UgMzpCPWwoUSh0LmUsKGZ0KCksZnYpKSwxNSksej1sKFEodC5qLGZ2KSwxNSksVj1sKFEodC5mLGZ2KSwxNSksbj1sKFEodC5lLHo2KSwxNSkscj1sKFEodC5qLHo2KSwxNSksYT1sKFEodC5mLHo2KSwxNSksZj1uZXcgYnQscmEoZixCKSx6LkpjKG5ldyBQZWUpLHJhKGYsbGYoeikpLHJhKGYsViksbz1uZXcgYnQscmEobyxuKSxyYShvLGxmKHIpKSxyYShvLGEpLHJ0KHQuZixmdixmKSxydCh0LmYsejYsbykscnQodC5mLEtMZSx0LmYpLHJ0KHQuZSxmdixudWxsKSxydCh0LmUsejYsbnVsbCkscnQodC5qLGZ2LG51bGwpLHJ0KHQuaix6NixudWxsKTticmVhaztjYXNlIDE6S2EoQyx0LmUuYSksdWkoQyx0LmkubiksS2EoQyxsZih0LmouYSkpLHVpKEMsdC5hLm4pLEthKEMsdC5mLmEpO2JyZWFrO2RlZmF1bHQ6S2EoQyx0LmUuYSksS2EoQyxsZih0LmouYSkpLEthKEMsdC5mLmEpfUNoKHQuZi5hKSxLYSh0LmYuYSxDKSxwbyh0LmYsdC5lLmMpLGc9bChRKHQuZSwoTnQoKSxjYykpLDc1KSxFPWwoUSh0LmosY2MpLDc1KSx3PWwoUSh0LmYsY2MpLDc1KSwoZ3x8RXx8dykmJihMPW5ldyBibCxnNWUoTCx3KSxnNWUoTCxFKSxnNWUoTCxnKSxydCh0LmYsY2MsTCkpLHBvKHQuaixudWxsKSxGYSh0LmosbnVsbCkscG8odC5lLG51bGwpLEZhKHQuZSxudWxsKSxWYSh0LmEsbnVsbCksVmEodC5pLG51bGwpLHQuZyYmVXZ0KGUsdC5nKX1mdW5jdGlvbiBHdnQoKXtHdnQ9VTt2YXIgZSx0LG47Zm9yKG5ldyBOTigxLDApLG5ldyBOTigxMCwwKSxuZXcgTk4oMCwwKSx2NnQ9V2UoTDBlLGR0LDI0NywxMSwwLDEpLGx2PVdlKGtmLEFkLDI4LDEwMCwxNSwxKSxvX2U9aGUobGUoTmEsMSksWm8sMjgsMTUsWzEsNSwyNSwxMjUsNjI1LDMxMjUsMTU2MjUsNzgxMjUsMzkwNjI1LDE5NTMxMjUsOTc2NTYyNSw0ODgyODEyNSwyNDQxNDA2MjUsMTIyMDcwMzEyNSw2MTAzNTE1NjI1LDMwNTE3NTc4MTI1LDE1MjU4Nzg5MDYyNSw3NjI5Mzk0NTMxMjUsMzgxNDY5NzI2NTYyNSwxOTA3MzQ4NjMyODEyNSw5NTM2NzQzMTY0MDYyNSw0NzY4MzcxNTgyMDMxMjUsMHg4Nzg2NzgzMjZlYWM5XSksY19lPVdlKFZyLGRpLDI4LG9fZS5sZW5ndGgsMTUsMSksdV9lPWhlKGxlKE5hLDEpLFpvLDI4LDE1LFsxLDEwLDEwMCxiMiwxZTQsb2hlLDFlNiwxZTcsMWU4LEpVLDFlMTAsMWUxMSwxZTEyLDFlMTMsMWUxNCwxZTE1LDFlMTZdKSxsX2U9V2UoVnIsZGksMjgsdV9lLmxlbmd0aCwxNSwxKSxoX2U9V2UoTDBlLGR0LDI0NywxMSwwLDEpLGU9MDtlPGhfZS5sZW5ndGg7ZSsrKXY2dFtlXT1uZXcgTk4oZSwwKSxoX2VbZV09bmV3IE5OKDAsZSksbHZbZV09NDg7Zm9yKDtlPGx2Lmxlbmd0aDtlKyspbHZbZV09NDg7Zm9yKG49MDtuPGNfZS5sZW5ndGg7bisrKWNfZVtuXT1nOWUob19lW25dKTtmb3IodD0wO3Q8bF9lLmxlbmd0aDt0KyspbF9lW3RdPWc5ZSh1X2VbdF0pO0dFKCl9ZnVuY3Rpb24gUERuKCl7ZnVuY3Rpb24gZSgpe3RoaXMub2JqPXRoaXMuY3JlYXRlT2JqZWN0KCl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZU9iamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9ialt0XX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsbil7dGhpcy5vYmpbdF09bn0sZS5wcm90b3R5cGVbbGhlXT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5vYmpbdF19LGUucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5vYmopfSxlLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5rZXlzKCksbj10aGlzLHI9MDtyZXR1cm57bmV4dDpmdW5jdGlvbigpe2lmKHI+PXQubGVuZ3RoKXJldHVybntkb25lOiEwfTt2YXIgYT10W3IrK107cmV0dXJue3ZhbHVlOlthLG4uZ2V0KGEpXSxkb25lOiExfX19fSxMU24oKXx8KGUucHJvdG90eXBlLmNyZWF0ZU9iamVjdD1mdW5jdGlvbigpe3JldHVybnt9fSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub2JqWyI6Iit0XX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsbil7dGhpcy5vYmpbIjoiK3RdPW59LGUucHJvdG90eXBlW2xoZV09ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMub2JqWyI6Iit0XX0sZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzLm9iailuLmNoYXJDb2RlQXQoMCk9PTU4JiZ0LnB1c2gobi5zdWJzdHJpbmcoMSkpO3JldHVybiB0fSksZX1mdW5jdGlvbiBRaSgpe1FpPVUsZ009bmV3IFVpKE5FZSksbmV3IHZzKCJERVBUSCIscHQoMCkpLFBkZT1uZXcgdnMoIkZBTiIscHQoMCkpLG5JZT1uZXcgdnMoZ3l0LHB0KDApKSxWYj1uZXcgdnMoIlJPT1QiLChIbigpLCExKSksUmRlPW5ldyB2cygiTEVGVE5FSUdIQk9SIixudWxsKSxkVHQ9bmV3IHZzKCJSSUdIVE5FSUdIQk9SIixudWxsKSxCVz1uZXcgdnMoIkxFRlRTSUJMSU5HIixudWxsKSxqZGU9bmV3IHZzKCJSSUdIVFNJQkxJTkciLG51bGwpLE5kZT1uZXcgdnMoIkRVTU1ZIiwhMSksbmV3IHZzKCJMRVZFTCIscHQoMCkpLHNJZT1uZXcgdnMoIlJFTU9WQUJMRV9FREdFUyIsbmV3IG9zKSxQQj1uZXcgdnMoIlhDT09SIixwdCgwKSksQkI9bmV3IHZzKCJZQ09PUiIscHQoMCkpLEZXPW5ldyB2cygiTEVWRUxIRUlHSFQiLDApLGMxPW5ldyB2cygiTEVWRUxNSU4iLDApLGswPW5ldyB2cygiTEVWRUxNQVgiLDApLEJkZT1uZXcgdnMoIkdSQVBIX1hNSU4iLDApLEZkZT1uZXcgdnMoIkdSQVBIX1lNSU4iLDApLHJJZT1uZXcgdnMoIkdSQVBIX1hNQVgiLDApLGlJZT1uZXcgdnMoIkdSQVBIX1lNQVgiLDApLHRJZT1uZXcgdnMoIkNPTVBBQ1RfTEVWRUxfQVNDRU5TSU9OIiwhMSksT2RlPW5ldyB2cygiQ09NUEFDVF9DT05TVFJBSU5UUyIsbmV3IGJ0KSxkTT1uZXcgdnMoIklEIiwiIikscE09bmV3IHZzKCJQT1NJVElPTiIscHQoMCkpLEMyPW5ldyB2cygiUFJFTElNIiwwKSxKVD1uZXcgdnMoIk1PRElGSUVSIiwwKSxRVD1uZXcgVWkoUzN0KSxOQj1uZXcgVWkoXzN0KX1mdW5jdGlvbiBCRG4oZSl7a2tlKCk7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYoTD1lLmxlbmd0aCo4LEw9PTApcmV0dXJuIiI7Zm9yKGc9TCUyNCx6PUwvMjR8MCxCPWchPTA/eisxOnosbz1udWxsLG89V2Uoa2YsQWQsMjgsQio0LDE1LDEpLEU9MCxDPTAsdD0wLG49MCxyPTAsZj0wLGE9MCx3PTA7dzx6O3crKyl0PWVbYSsrXSxuPWVbYSsrXSxyPWVbYSsrXSxDPShuJjE1KTw8MjQ+PjI0LEU9KHQmMyk8PDI0Pj4yNCxWPXQmLTEyOD8odD4+Ml4xOTIpPDwyND4+MjQ6dD4+Mjw8MjQ+PjI0LEo9biYtMTI4PyhuPj40XjI0MCk8PDI0Pj4yNDpuPj40PDwyND4+MjQsdGU9ciYtMTI4PyhyPj42XjI1Mik8PDI0Pj4yNDpyPj42PDwyND4+MjQsb1tmKytdPU4yW1ZdLG9bZisrXT1OMltKfEU8PDRdLG9bZisrXT1OMltDPDwyfHRlXSxvW2YrK109TjJbciY2M107cmV0dXJuIGc9PTg/KHQ9ZVthXSxFPSh0JjMpPDwyND4+MjQsVj10Ji0xMjg/KHQ+PjJeMTkyKTw8MjQ+PjI0OnQ+PjI8PDI0Pj4yNCxvW2YrK109TjJbVl0sb1tmKytdPU4yW0U8PDRdLG9bZisrXT02MSxvW2YrK109NjEpOmc9PTE2JiYodD1lW2FdLG49ZVthKzFdLEM9KG4mMTUpPDwyND4+MjQsRT0odCYzKTw8MjQ+PjI0LFY9dCYtMTI4Pyh0Pj4yXjE5Mik8PDI0Pj4yNDp0Pj4yPDwyND4+MjQsSj1uJi0xMjg/KG4+PjReMjQwKTw8MjQ+PjI0Om4+PjQ8PDI0Pj4yNCxvW2YrK109TjJbVl0sb1tmKytdPU4yW0p8RTw8NF0sb1tmKytdPU4yW0M8PDJdLG9bZisrXT02MSksSWYobywwLG8ubGVuZ3RoKX1mdW5jdGlvbiBGRG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZihlLmU9PTAmJmUucD4wJiYoZS5wPS0oZS5wLTEpKSxlLnA+bG8mJmM2ZSh0LGUucC1MYiksZj10LnEuZ2V0RGF0ZSgpLFlPKHQsMSksZS5rPj0wJiZDMm4odCxlLmspLGUuYz49MD9ZTyh0LGUuYyk6ZS5rPj0wPyh3PW5ldyBSN2UodC5xLmdldEZ1bGxZZWFyKCktTGIsdC5xLmdldE1vbnRoKCksMzUpLHI9MzUtdy5xLmdldERhdGUoKSxZTyh0LGIuTWF0aC5taW4ocixmKSkpOllPKHQsZiksZS5mPDAmJihlLmY9dC5xLmdldEhvdXJzKCkpLGUuYj4wJiZlLmY8MTImJihlLmYrPTEyKSxiaG4odCxlLmY9PTI0JiZlLmc/MDplLmYpLGUuaj49MCYmb3ZuKHQsZS5qKSxlLm4+PTAmJnd2bih0LGUubiksZS5pPj0wJiZRdHQodCxibyhtbyhLTihaYyh0LnEuZ2V0VGltZSgpKSxiMiksYjIpLGUuaSkpLGUuYSYmKGE9bmV3IFF6LGM2ZShhLGEucS5nZXRGdWxsWWVhcigpLUxiLTgwKSxmc2UoWmModC5xLmdldFRpbWUoKSksWmMoYS5xLmdldFRpbWUoKSkpJiZjNmUodCxhLnEuZ2V0RnVsbFllYXIoKS1MYisxMDApKSxlLmQ+PTApe2lmKGUuYz09LTEpbj0oNytlLmQtdC5xLmdldERheSgpKSU3LG4+MyYmKG4tPTcpLGc9dC5xLmdldE1vbnRoKCksWU8odCx0LnEuZ2V0RGF0ZSgpK24pLHQucS5nZXRNb250aCgpIT1nJiZZTyh0LHQucS5nZXREYXRlKCkrKG4+MD8tNzo3KSk7ZWxzZSBpZih0LnEuZ2V0RGF5KCkhPWUuZClyZXR1cm4hMX1yZXR1cm4gZS5vPmxvJiYobz10LnEuZ2V0VGltZXpvbmVPZmZzZXQoKSxRdHQodCxibyhaYyh0LnEuZ2V0VGltZSgpKSwoZS5vLW8pKjYwKmIyKSkpLCEwfWZ1bmN0aW9uIEt2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7aWYoYT1RKHQsKGZ0KCksemkpKSwhIURlKGEsMjA3KSl7Zm9yKFY9bChhLDI3KSxKPXQuZSxCPW5ldyBFbyh0LmMpLG89dC5kLEIuYSs9by5iLEIuYis9by5kLCRlPWwoYXQoViwoTnQoKSx4VykpLDE4MSksdmwoJGUsKFpsKCksdVkpKSYmKHo9bChhdChWLFdNZSksMTA3KSxUaWUoeixvLmEpLG13ZSh6LG8uZCksQ2llKHosby5iKSx4OCh6LG8uYykpLG49bmV3IGJ0LEM9bmV3IEcodC5hKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Iodz1sKHJlKEMpLDEwKSxEZShRKHcsemkpLDIwNyk/SERuKHcsQik6RGUoUSh3LHppKSwxOTMpJiYhSiYmKHI9bChRKHcsemkpLDEyMyksVGU9Tm10KHQsdyxyLmcsci5mKSxRaChyLFRlLmEsVGUuYikpLGZlPW5ldyBHKHcuaik7ZmUuYTxmZS5jLmMubGVuZ3RoOyl0ZT1sKHJlKGZlKSwxMiksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHRlLmcsMTYpKSxuZXcgVldlKHcpKSxuZXcgVVdlKG4pKTtpZihKKWZvcihmZT1uZXcgRyhKLmopO2ZlLmE8ZmUuYy5jLmxlbmd0aDspdGU9bChyZShmZSksMTIpLElzKEZpKG5ldyBibihudWxsLG5ldyBrbih0ZS5nLDE2KSksbmV3IEdXZShKKSksbmV3IEtXZShuKSk7Zm9yKE1lPWwoYXQoVixicCksMjIzKSxnPW5ldyBHKG4pO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxOCksaURuKGYsTWUsQik7Zm9yKFZfbih0KSxFPW5ldyBHKHQuYSk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDEwKSxMPXcuZSxMJiZLdnQoZSxMKX19ZnVuY3Rpb24gV3Z0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKCFsKGwoJGkoZS5yLHQpLDIxKSw4NykuZGMoKSl7aWYoZj1sKFFvKGUuYix0KSwxMjcpLHc9Zi5pLGc9Zi5uLEM9SnVlKGUsdCkscj13LmItZy5iLWcuYyxhPWYuYS5hLG89dy5jK2cuYix6PWUudywoQz09KHQ2KCksS2IpfHxDPT10RikmJmwobCgkaShlLnIsdCksMjEpLDg3KS5nYygpPT0xJiYoYT1DPT1LYj9hLTIqZS53OmEsQz1JTSkscjxhJiYhZS5CLkhjKChabCgpLGxZKSkpQz09S2I/KHorPShyLWEpLyhsKGwoJGkoZS5yLHQpLDIxKSw4NykuZ2MoKSsxKSxvKz16KTp6Kz0oci1hKS8obChsKCRpKGUucix0KSwyMSksODcpLmdjKCktMSk7ZWxzZSBzd2l0Y2gocjxhJiYoYT1DPT1LYj9hLTIqZS53OmEsQz1JTSksQy5nKXtjYXNlIDM6bys9KHItYSkvMjticmVhaztjYXNlIDQ6bys9ci1hO2JyZWFrO2Nhc2UgMDpuPShyLWEpLyhsKGwoJGkoZS5yLHQpLDIxKSw4NykuZ2MoKSsxKSx6Kz1iLk1hdGgubWF4KDAsbiksbys9ejticmVhaztjYXNlIDE6bj0oci1hKS8obChsKCRpKGUucix0KSwyMSksODcpLmdjKCktMSkseis9Yi5NYXRoLm1heCgwLG4pfWZvcihCPWwobCgkaShlLnIsdCksMjEpLDg3KS5LYygpO0IuT2IoKTspTD1sKEIuUGIoKSwxMTcpLEwuZS5hPW8rTC5kLmIsTC5lLmI9KEU9TC5iLEUucGYoKHBpKCkscmgpKT9FLmFnKCk9PShDdCgpLFFuKT8tRS5NZigpLmItemUoR2UoRS5vZihyaCkpKTp6ZShHZShFLm9mKHJoKSkpOkUuYWcoKT09KEN0KCksUW4pPy1FLk1mKCkuYjowKSxvKz1MLmQuYitMLmIuTWYoKS5hK0wuZC5jK3p9fWZ1bmN0aW9uIFl2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKCFsKGwoJGkoZS5yLHQpLDIxKSw4NykuZGMoKSl7aWYoZj1sKFFvKGUuYix0KSwxMjcpLHc9Zi5pLGc9Zi5uLEw9SnVlKGUsdCkscj13LmEtZy5kLWcuYSxhPWYuYS5iLG89dy5kK2cuZCxWPWUudyxFPWUuby5hLChMPT0odDYoKSxLYil8fEw9PXRGKSYmbChsKCRpKGUucix0KSwyMSksODcpLmdjKCk9PTEmJihhPUw9PUtiP2EtMiplLnc6YSxMPUlNKSxyPGEmJiFlLkIuSGMoKFpsKCksbFkpKSlMPT1LYj8oVis9KHItYSkvKGwobCgkaShlLnIsdCksMjEpLDg3KS5nYygpKzEpLG8rPVYpOlYrPShyLWEpLyhsKGwoJGkoZS5yLHQpLDIxKSw4NykuZ2MoKS0xKTtlbHNlIHN3aXRjaChyPGEmJihhPUw9PUtiP2EtMiplLnc6YSxMPUlNKSxMLmcpe2Nhc2UgMzpvKz0oci1hKS8yO2JyZWFrO2Nhc2UgNDpvKz1yLWE7YnJlYWs7Y2FzZSAwOm49KHItYSkvKGwobCgkaShlLnIsdCksMjEpLDg3KS5nYygpKzEpLFYrPWIuTWF0aC5tYXgoMCxuKSxvKz1WO2JyZWFrO2Nhc2UgMTpuPShyLWEpLyhsKGwoJGkoZS5yLHQpLDIxKSw4NykuZ2MoKS0xKSxWKz1iLk1hdGgubWF4KDAsbil9Zm9yKHo9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7ei5PYigpOylCPWwoei5QYigpLDExNyksQi5lLmE9KEM9Qi5iLEMucGYoKHBpKCkscmgpKT9DLmFnKCk9PShDdCgpLGVyKT8tQy5NZigpLmEtemUoR2UoQy5vZihyaCkpKTpFK3plKEdlKEMub2YocmgpKSk6Qy5hZygpPT0oQ3QoKSxlcik/LUMuTWYoKS5hOkUpLEIuZS5iPW8rQi5kLmQsbys9Qi5kLmQrQi5iLk1mKCkuYitCLmQuYStWfX1mdW5jdGlvbiBSRG4oZSx0KXt2YXIgbixyLGEsbyxmO2Zvcih0LlVnKCJQcm9jZXNzb3IgZGV0ZXJtaW5lIHRoZSBjb29yZHMgZm9yIGVhY2ggbGV2ZWwiLDEpLHI9bmV3IGJ0LGY9UnIoZS5iLDApO2YuYiE9Zi5kLmM7KXtmb3IoYT1sKEJyKGYpLDQwKTtsKFEoYSwoSGMoKSwkZCkpLDE3KS5hPnIuYy5sZW5ndGgtMTspdnQocixuZXcgY2EoeTYsaENlKSk7bj1sKFEoYSwkZCksMTcpLmEsVWcobChRKGUseTMpLDg4KSk/KGEuZS5hPHplKEdlKChTbihuLHIuYy5sZW5ndGgpLGwoci5jW25dLDQyKSkuYSkpJiZWZSgoU24obixyLmMubGVuZ3RoKSxsKHIuY1tuXSw0MikpLGEuZS5hKSxhLmUuYSthLmYuYT56ZShHZSgoU24obixyLmMubGVuZ3RoKSxsKHIuY1tuXSw0MikpLmIpKSYmY3QoKFNuKG4sci5jLmxlbmd0aCksbChyLmNbbl0sNDIpKSxhLmUuYSthLmYuYSkpOihhLmUuYjx6ZShHZSgoU24obixyLmMubGVuZ3RoKSxsKHIuY1tuXSw0MikpLmEpKSYmVmUoKFNuKG4sci5jLmxlbmd0aCksbChyLmNbbl0sNDIpKSxhLmUuYiksYS5lLmIrYS5mLmI+emUoR2UoKFNuKG4sci5jLmxlbmd0aCksbChyLmNbbl0sNDIpKS5iKSkmJmN0KChTbihuLHIuYy5sZW5ndGgpLGwoci5jW25dLDQyKSksYS5lLmIrYS5mLmIpKX1mb3Iobz1ScihlLmIsMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDQwKSxuPWwoUShhLChIYygpLCRkKSksMTcpLmEscnQoYSwoUWkoKSxjMSksR2UoKFNuKG4sci5jLmxlbmd0aCksbChyLmNbbl0sNDIpKS5hKSkscnQoYSxrMCxHZSgoU24obixyLmMubGVuZ3RoKSxsKHIuY1tuXSw0MikpLmIpKTt0LlZnKCl9ZnVuY3Rpb24gakRuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3IoZS5vPXplKEdlKFEoZS5pLChOdCgpLG0zKSkpKSxlLmY9emUoR2UoUShlLmksdnYpKSksZS5qPWUuaS5iLmMubGVuZ3RoLGc9ZS5qLTEsQj0wLGUuaz0wLGUubj0wLGUuYj1PMShXZShybyxkdCwxNyxlLmosMCwxKSksZS5jPU8xKFdlKHRhLGR0LDM0NSxlLmosNywxKSksZj1uZXcgRyhlLmkuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2ZvcihhPWwocmUoZiksMzApLGEucD1nLEw9bmV3IEcoYS5hKTtMLmE8TC5jLmMubGVuZ3RoOylDPWwocmUoTCksMTApLEMucD1CLCsrQjstLWd9Zm9yKGUuZz1XZShWcixkaSwyOCxCLDE1LDEpLGUuZD1MbShWcixbZHQsZGldLFs1MywyOF0sMTUsW0IsM10sMiksZS5wPW5ldyBidCxlLnE9bmV3IGJ0LHQ9MCxlLmU9MCxvPW5ldyBHKGUuaS5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKGE9bChyZShvKSwzMCksZz1hLnAscj0wLEo9MCx3PWEuYS5jLmxlbmd0aCxFPTAsTD1uZXcgRyhhLmEpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxMCksQj1DLnAsZS5nW0JdPUMuYy5wLEUrPUMuby5iK2UubyxuPVhnKG5ldyBocihkcihrYShDKS5hLktjKCksbmV3IGopKSksVj1YZyhuZXcgaHIoZHIocXMoQykuYS5LYygpLG5ldyBqKSkpLGUuZFtCXVswXT1WLW4sZS5kW0JdWzFdPW4sZS5kW0JdWzJdPVYscis9bixKKz1WLG4+MCYmdnQoZS5xLEMpLHZ0KGUucCxDKTt0LT1yLHo9dyt0LEUrPXQqZS5mLHJmKGUuYixnLHB0KHopKSxyZihlLmMsZyxFKSxlLms9Yi5NYXRoLm1heChlLmsseiksZS5uPWIuTWF0aC5tYXgoZS5uLEUpLGUuZSs9dCx0Kz1KfX1mdW5jdGlvbiBDdCgpe0N0PVU7dmFyIGU7UGM9bmV3IHdPKGNMLDApLFFuPW5ldyB3TyhuRywxKSxhcj1uZXcgd08oeWhlLDIpLERyPW5ldyB3Tyh4aGUsMyksZXI9bmV3IHdPKGtoZSw0KSxlZD0oQ24oKSxuZXcgRWsoKGU9bChLMChPbyksOSksbmV3IFpoKGUsbChjMChlLGUubGVuZ3RoKSw5KSwwKSkpKSxfMD1hMihycyhRbixoZShsZShPbywxKSxhdSw2NCwwLFtdKSkpLHlmPWEyKHJzKGFyLGhlKGxlKE9vLDEpLGF1LDY0LDAsW10pKSksJGg9YTIocnMoRHIsaGUobGUoT28sMSksYXUsNjQsMCxbXSkpKSxIZj1hMihycyhlcixoZShsZShPbywxKSxhdSw2NCwwLFtdKSkpLGhsPWEyKHJzKFFuLGhlKGxlKE9vLDEpLGF1LDY0LDAsW0RyXSkpKSxKdT1hMihycyhhcixoZShsZShPbywxKSxhdSw2NCwwLFtlcl0pKSksQTA9YTIocnMoUW4saGUobGUoT28sMSksYXUsNjQsMCxbZXJdKSkpLHpsPWEyKHJzKFFuLGhlKGxlKE9vLDEpLGF1LDY0LDAsW2FyXSkpKSx6aD1hMihycyhEcixoZShsZShPbywxKSxhdSw2NCwwLFtlcl0pKSkseGY9YTIocnMoYXIsaGUobGUoT28sMSksYXUsNjQsMCxbRHJdKSkpLHFsPWEyKHJzKFFuLGhlKGxlKE9vLDEpLGF1LDY0LDAsW2FyLGVyXSkpKSxsbD1hMihycyhhcixoZShsZShPbywxKSxhdSw2NCwwLFtEcixlcl0pKSksZmw9YTIocnMoUW4saGUobGUoT28sMSksYXUsNjQsMCxbRHIsZXJdKSkpLF9sPWEyKHJzKFFuLGhlKGxlKE9vLDEpLGF1LDY0LDAsW2FyLERyXSkpKSxEdT1hMihycyhRbixoZShsZShPbywxKSxhdSw2NCwwLFthcixEcixlcl0pKSl9ZnVuY3Rpb24gJERuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdDtmb3IodC5VZyhLM3QsMSksSj1uZXcgYnQsb3Q9bmV3IGJ0LEU9bmV3IEcoZS5iKTtFLmE8RS5jLmMubGVuZ3RoOylmb3Iodz1sKHJlKEUpLDMwKSxmZT0tMSxWPUpPKHcuYSksTD1WLEI9MCx6PUwubGVuZ3RoO0I8ejsrK0IpaWYoQz1MW0JdLCsrZmUsISEoQy5rPT0oWm4oKSxQcykmJlA1KGwoUShDLChOdCgpLE1zKSksMTAxKSkpKXtmb3IoVTgobChRKEMsKE50KCksTXMpKSwxMDEpKXx8a0NuKEMpLHJ0KEMsKGZ0KCksdTMpLEMpLEouYy5sZW5ndGg9MCxvdC5jLmxlbmd0aD0wLG49bmV3IGJ0LCRlPW5ldyBvcyxzY2UoJGUsZDIoQywoQ3QoKSxRbikpKSx1d3QoZSwkZSxKLG90LG4pLGc9ZmUsU3Q9QyxvPW5ldyBHKEopO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwxMCksRnkocixnLHcpLCsrZmUscnQocix1MyxDKSxmPWwoanQoci5qLDApLDEyKSx0ZT1sKFEoZix6aSksMTIpLFJ0KEJ0KFEodGUsWDFlKSkpfHxsKFEocixXeCksMTUpLkZjKFN0KTtmb3IoQ2goJGUpLE1lPWQyKEMsRHIpLktjKCk7TWUuT2IoKTspVGU9bChNZS5QYigpLDEyKSxDcygkZSxUZSwkZS5hLCRlLmEuYSk7Zm9yKHV3dChlLCRlLG90LG51bGwsbiksWmU9QyxhPW5ldyBHKG90KTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTApLEZ5KHIsKytmZSx3KSxydChyLHUzLEMpLGY9bChqdChyLmosMCksMTIpLHRlPWwoUShmLHppKSwxMiksUnQoQnQoUSh0ZSxYMWUpKSl8fGwoUShaZSxXeCksMTUpLkZjKHIpO24uYy5sZW5ndGg9PTB8fHJ0KEMsQkxlLG4pfXQuVmcoKX1mdW5jdGlvbiBYdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2lmKHQuYiE9MCl7Zm9yKHo9bmV3IG9zLGc9bnVsbCxWPW51bGwscj11YShiLk1hdGguZmxvb3IoYi5NYXRoLmxvZyh0LmIpKmIuTWF0aC5MT0cxMEUpKzEpLHc9MCxNZT1Scih0LDApO01lLmIhPU1lLmQuYzspZm9yKGZlPWwoQnIoTWUpLDQwKSxxZShWKSE9PXFlKFEoZmUsKFFpKCksZE0pKSkmJihWPWVpKFEoZmUsZE0pKSx3PTApLFYhPW51bGw/Zz1WK1ZvdCh3Kysscik6Zz1Wb3QodysrLHIpLHJ0KGZlLGRNLGcpLHRlPShhPVJyKG5ldyBIZyhmZSkuYS5kLDApLG5ldyBDNShhKSk7UUkodGUuYSk7KUo9bChCcih0ZS5hKSw2NSkuYyxDcyh6LEosei5jLmIsei5jKSxydChKLGRNLGcpO2ZvcihCPW5ldyBQcixmPTA7ZjxnLmxlbmd0aC1yO2YrKylmb3IoVGU9UnIodCwwKTtUZS5iIT1UZS5kLmM7KWZlPWwoQnIoVGUpLDQwKSxFPXRmKGVpKFEoZmUsKFFpKCksZE0pKSksMCxmKzEpLG49KEU9PW51bGw/aGMoem8oQi5mLG51bGwpKTp5XyhCLmksRSkpIT1udWxsP2woRT09bnVsbD9oYyh6byhCLmYsbnVsbCkpOnlfKEIuaSxFKSwxNykuYSsxOjEscmMoQixFLHB0KG4pKTtmb3IoTD1uZXcgcW0obmV3IFNyKEIpLmEpO0wuYjspQz1OdyhMKSxvPXB0KGNyKGUuYSxDLmxkKCkpIT1udWxsP2woY3IoZS5hLEMubGQoKSksMTcpLmE6MCkscmMoZS5hLGVpKEMubGQoKSkscHQobChDLm1kKCksMTcpLmErby5hKSksbz1sKGNyKGUuYixDLmxkKCkpLDE3KSwoIW98fG8uYTxsKEMubWQoKSwxNykuYSkmJnJjKGUuYixlaShDLmxkKCkpLGwoQy5tZCgpLDE3KSk7WHZ0KGUseil9fWZ1bmN0aW9uIHpEbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKG49bnVsbCx3PW51bGwsYT1sKFEoZS5iLChOdCgpLG5kZSkpLDM0OSksYT09KHlBKCksTUIpJiYobj1uZXcgYnQsdz1uZXcgYnQpLGc9bmV3IEcoZS5kKTtnLmE8Zy5jLmMubGVuZ3RoOylpZihmPWwocmUoZyksMTA1KSxvPWYuaSwhIW8pc3dpdGNoKGYuZS5nKXtjYXNlIDA6dD1sKGNBKG5ldyBQOChmLmIpKSw2NCksYT09TUImJnQ9PShDdCgpLFFuKT8kbihuLmMsZik6YT09TUImJnQ9PShDdCgpLERyKT8kbih3LmMsZik6ZzduKGYsdCk7YnJlYWs7Y2FzZSAxOkU9Zi5hLmQuaixDPWYuYy5kLmosRT09KEN0KCksUW4pP1FwKGYsUW4sKFIxKCksTVQpLGYuYSk6Qz09UW4/UXAoZixRbiwoUjEoKSxEVCksZi5jKTpFPT1Ecj9RcChmLERyLChSMSgpLERUKSxmLmEpOkM9PURyJiZRcChmLERyLChSMSgpLE1UKSxmLmMpO2JyZWFrO2Nhc2UgMjpjYXNlIDM6cj1mLmIsdmwociwoQ3QoKSxRbikpP3ZsKHIsRHIpP3ZsKHIsZXIpP3ZsKHIsYXIpfHxRcChmLFFuLChSMSgpLERUKSxmLmMpOlFwKGYsUW4sKFIxKCksTVQpLGYuYSk6UXAoZixRbiwoUjEoKSxWeCksbnVsbCk6UXAoZixEciwoUjEoKSxWeCksbnVsbCk7YnJlYWs7Y2FzZSA0Okw9Zi5hLmQuaixCPWYuYS5kLmosTD09KEN0KCksUW4pfHxCPT1Rbj9RcChmLERyLChSMSgpLFZ4KSxudWxsKTpRcChmLFFuLChSMSgpLFZ4KSxudWxsKX1uJiYobi5jLmxlbmd0aD09MHx8SG10KG4sKEN0KCksUW4pKSx3LmMubGVuZ3RoPT0wfHxIbXQodywoQ3QoKSxEcikpKX1mdW5jdGlvbiBxRG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2ZvcihuLlVnKCJCcmVhZHRoIGZpcnN0IG1vZGVsIG9yZGVyIGxheWVyaW5nIiwxKSxlLmE9dCx0ZT1uZXcgYnQsSj1uZXcgRyhlLmEuYSk7Si5hPEouYy5jLmxlbmd0aDspej1sKHJlKEopLDEwKSx6Lms9PShabigpLFBzKSYmJG4odGUuYyx6KTtmb3IoQ24oKSxWcyh0ZSxuZXcgamVlKSx3PSEwLGE9bmV3IHl1KGUuYSkscj1udWxsLHZ0KGUuYS5iLGEpLFY9bmV3IEcodGUpO1YuYTxWLmMuYy5sZW5ndGg7KWlmKHo9bChyZShWKSwxMCksdylWYSh6LGEpLHc9ITE7ZWxzZXtmb3IoZz1uZXcgaHIoZHIoa2EoeikuYS5LYygpLG5ldyBqKSk7anIoZyk7KW89bCh4cihnKSwxOCksKG8uYy5pLms9PShabigpLFBzKSYmby5jLmkuYz09YXx8by5jLmkuaz09Y3UmJmwoeHIobmV3IGhyKGRyKGthKG8uYy5pKS5hLktjKCksbmV3IGopKSksMTgpLmMuaS5jPT1hKSYmKHI9bmV3IHl1KGUuYSksdnQoZS5hLmIsciksYT1uZXcgeXUoZS5hKSx2dChlLmEuYixhKSk7Zm9yKGY9bmV3IGhyKGRyKGthKHopLmEuS2MoKSxuZXcgaikpO2pyKGYpOylvPWwoeHIoZiksMTgpLG8uYy5pLms9PShabigpLGN1KSYmIW8uYy5pLmMmJlZhKG8uYy5pLHIpO1ZhKHosYSl9Zm9yKGUuYS5hLmMubGVuZ3RoPTAsZmU9bmV3IGJ0LEw9bmV3IEcoZS5hLmIpO0wuYTxMLmMuYy5sZW5ndGg7KUU9bChyZShMKSwzMCksRS5hLmMubGVuZ3RoPT0wJiYkbihmZS5jLEUpO2ZvcihnOGUoZS5hLmIsZmUpLEI9MCxDPW5ldyBHKGUuYS5iKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksMzApLEUucD1CLCsrQjtuLlZnKCl9ZnVuY3Rpb24gSERuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3Iocj1sKFEoZSwoZnQoKSx6aSkpLDI3KSxWPWwoUShlLChOdCgpLGRXKSksMTcpLmEsbz1sKFEoZSxtVyksMTcpLmEsSGkocixkVyxwdChWKSksSGkocixtVyxwdChvKSksVXUocixlLm4uYSt0LmEpLEd1KHIsZS5uLmIrdC5iKSwobChhdChyLGJ2KSwxODEpLmdjKCkhPTB8fGUuZXx8cWUoUShlbyhlKSx5VykpPT09cWUoKE9BKCksaU0pKSYmb250KChCeSgpLChlLnE/ZS5xOihDbigpLENuKCksbWcpKS5fYihnMyk/Qj1sKFEoZSxnMyksMjAzKTpCPWwoUShlbyhlKSxlTSksMjAzKSxCKSkpJiYoRHcocixlLm8uYSksTXcocixlLm8uYikpLEw9bmV3IEcoZS5qKTtMLmE8TC5jLmMubGVuZ3RoOylFPWwocmUoTCksMTIpLEo9UShFLHppKSxEZShKLDE5MykmJihhPWwoSiwxMjMpLFFoKGEsRS5uLmEsRS5uLmIpLEhpKGEsVlQsRS5qKSk7Zm9yKHo9bChRKGUsZDMpLDE4MSkuZ2MoKSE9MCx3PW5ldyBHKGUuYik7dy5hPHcuYy5jLmxlbmd0aDspZj1sKHJlKHcpLDcyKSwoenx8bChRKGYsZDMpLDE4MSkuZ2MoKSE9MCkmJihuPWwoUShmLHppKSwxMzUpLEY1KG4sZi5vLmEsZi5vLmIpLFFoKG4sZi5uLmEsZi5uLmIpKTtpZighV18obChRKGUsdjQpLDIxKSkpZm9yKEM9bmV3IEcoZS5qKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxnPW5ldyBHKEUuZik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDcyKSxuPWwoUShmLHppKSwxMzUpLER3KG4sZi5vLmEpLE13KG4sZi5vLmIpLFFoKG4sZi5uLmEsZi5uLmIpfWZ1bmN0aW9uIFZEbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW47Zm9yKHQuVWcoIkNhbGN1bGF0ZSBHcmFwaCBTaXplIiwxKSx0LmRoKGUseUNlKSxMPXk2LEI9eTYsRT14Q2UsQz14Q2UsSj1uZXcgb3IoKCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxlLmEpKTtKLmUhPUouaS5nYygpOyl6PWwoZ3IoSiksMjcpLFRlPXouaSxNZT16LmosYW49ei5nLGc9ei5mLHc9bChhdCh6LChwaSgpLHRDKSksMTQwKSxMPWIuTWF0aC5taW4oTCxUZS13LmIpLEI9Yi5NYXRoLm1pbihCLE1lLXcuZCksRT1iLk1hdGgubWF4KEUsVGUrYW4rdy5jKSxDPWIuTWF0aC5tYXgoQyxNZStnK3cuYSk7Zm9yKGZlPWwoYXQoZSwocGkoKSxfMikpLDEwNyksdGU9bmV3IGx0KEwtZmUuYixCLWZlLmQpLGNuPUUtTCsoZmUuYitmZS5jKSxmPUMtQisoZmUuZCtmZS5hKSxSdChCdChhdChlLChTYigpLE9JZSkpKSkmJigkZT1sKGF0KGUsKEg1KCksWTYpKSwyNyksWmU9bChhdCgkZSx0QyksMTQwKSxvdD0kZS5pKyRlLmcvMisoWmUuYitaZS5jKS8yLXRlLmEsU3Q9JGUuaiskZS5mLzIrKFplLmQrWmUuYSkvMi10ZS5iLGE9Y24tb3Qsbz1mLVN0LGE8Y24vMj8obj1hLW90LGNuKz1uLHRlLmEtPW4pOihuPW90LWEsY24rPW4pLG88Zi8yPyhyPW8tU3QsZis9cix0ZS5iLT1yKToocj1TdC1vLGYrPXIpKSxWPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO1YuZSE9Vi5pLmdjKCk7KXo9bChncihWKSwyNyksVXUoeix6LmktdGUuYSksR3Uoeix6LmotdGUuYik7UnQoQnQoYXQoZSxDNCkpKXx8KER3KGUsY24pLE13KGUsZikpLEhpKGUsdDcsY24tKGZlLmIrZmUuYykpLEhpKGUsZTcsZi0oZmUuZCtmZS5hKSksdC5kaChlLE9HKX1mdW5jdGlvbiBVRG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYoZS5lLmEuJGIoKSxlLmYuYS4kYigpLGUuYy5jLmxlbmd0aD0wLGUuaS5jLmxlbmd0aD0wLGUuZy5hLiRiKCksdClmb3IoZj1uZXcgRyh0LmEpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMTApLEw9ZDIobywoQ3QoKSxhcikpLktjKCk7TC5PYigpOylmb3IoQz1sKEwuUGIoKSwxMiksbmEoZS5lLEMpLGE9bmV3IEcoQy5nKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTgpLCFEbyhyKSYmKHZ0KGUuYyxyKSxoZHQoZSxyKSxnPXIuYy5pLmssKGc9PShabigpLFBzKXx8Zz09QXV8fGc9PVVzfHxnPT1LMSkmJnZ0KGUuaixyKSx6PXIuZCxCPXouaS5jLEI9PW4/bmEoZS5mLHopOkI9PXQ/bmEoZS5lLHopOmFsKGUuYyxyKSk7aWYobilmb3IoZj1uZXcgRyhuLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtmb3Iobz1sKHJlKGYpLDEwKSxFPW5ldyBHKG8uaik7RS5hPEUuYy5jLmxlbmd0aDspZm9yKHc9bChyZShFKSwxMiksYT1uZXcgRyh3LmcpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxOCksRG8ocikmJm5hKGUuZyxyKTtmb3IoTD1kMihvLChDdCgpLGVyKSkuS2MoKTtMLk9iKCk7KWZvcihDPWwoTC5QYigpLDEyKSxuYShlLmYsQyksYT1uZXcgRyhDLmcpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxOCksIURvKHIpJiYodnQoZS5jLHIpLGhkdChlLHIpLGc9ci5jLmkuaywoZz09KFpuKCksUHMpfHxnPT1BdXx8Zz09VXN8fGc9PUsxKSYmdnQoZS5qLHIpLHo9ci5kLEI9ei5pLmMsQj09bj9uYShlLmYseik6Qj09dD9uYShlLmUseik6YWwoZS5jLHIpKX19ZnVuY3Rpb24gR0RuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZTtmb3Iobi5VZygiUG9seWxpbmUgZWRnZSByb3V0aW5nIiwxKSx0ZT16ZShHZShRKHQsKE50KCksRE1lKSkpKSx6PXplKEdlKFEodCxWNikpKSxhPXplKEdlKFEodCxxNikpKSxyPWIuTWF0aC5taW4oMSxhL3opLE1lPTAsdz0wLHQuYi5jLmxlbmd0aCE9MCYmKCRlPUsydChsKGp0KHQuYiwwKSwzMCkpLE1lPS40KnIqJGUpLGc9bmV3IFVhKHQuYiwwKTtnLmI8Zy5kLmdjKCk7KXtmb3IoZj0obXIoZy5iPGcuZC5nYygpKSxsKGcuZC5YYihnLmM9Zy5iKyspLDMwKSksbz1McShmLElCKSxvJiZNZT4wJiYoTWUtPXopLE9rZShmLE1lKSxDPTAsQj1uZXcgRyhmLmEpO0IuYTxCLmMuYy5sZW5ndGg7KXtmb3IoTD1sKHJlKEIpLDEwKSxFPTAsSj1uZXcgaHIoZHIocXMoTCkuYS5LYygpLG5ldyBqKSk7anIoSik7KVY9bCh4cihKKSwxOCksZmU9STEoVi5jKS5iLFRlPUkxKFYuZCkuYixmPT1WLmQuaS5jJiYhRG8oVikmJihzRW4oVixNZSwuNCpyKmIuTWF0aC5hYnMoZmUtVGUpKSxWLmMuaj09KEN0KCksZXIpJiYoZmU9MCxUZT0wKSksRT1iLk1hdGgubWF4KEUsYi5NYXRoLmFicyhUZS1mZSkpO3N3aXRjaChMLmsuZyl7Y2FzZSAwOmNhc2UgNDpjYXNlIDE6Y2FzZSAzOmNhc2UgNTp1TW4oZSxMLE1lLHRlKX1DPWIuTWF0aC5tYXgoQyxFKX1nLmI8Zy5kLmdjKCkmJigkZT1LMnQoKG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSwzMCkpKSxDPWIuTWF0aC5tYXgoQywkZSksbXIoZy5iPjApLGcuYS5YYihnLmM9LS1nLmIpKSx3PS40KnIqQywhbyYmZy5iPGcuZC5nYygpJiYodys9eiksTWUrPWYuYy5hK3d9ZS5hLmEuJGIoKSx0LmYuYT1NZSxuLlZnKCl9ZnVuY3Rpb24gS0RuKGUpe3ZhciB0LG4scixhLG87c3dpdGNoKFVPKGUsQzR0KSwoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmkrKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKS5pKXtjYXNlIDA6dGhyb3cgdWUobmV3IFluKCJUaGUgZWRnZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHNvdXJjZSBvciB0YXJnZXQuIikpO2Nhc2UgMTpyZXR1cm4oIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmk9PTA/ZHMoYmMobChPZSgoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLDApLDg0KSkpOmRzKGJjKGwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCkpKX1pZigoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmk9PTEmJighZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYykuaT09MSl7aWYoYT1iYyhsKE9lKCghZS5iJiYoZS5iPW5ldyBMbihfcixlLDQsNykpLGUuYiksMCksODQpKSxvPWJjKGwoT2UoKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKSwwKSw4NCkpLGRzKGEpPT1kcyhvKSlyZXR1cm4gZHMoYSk7aWYoYT09ZHMobykpcmV0dXJuIGE7aWYobz09ZHMoYSkpcmV0dXJuIG99Zm9yKHI9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpXSkpKSx0PWJjKGwoeHIociksODQpKTtqcihyKTspaWYobj1iYyhsKHhyKHIpLDg0KSksbiE9dCYmIUx5KG4sdCkpe2lmKGRzKG4pPT1kcyh0KSl0PWRzKG4pO2Vsc2UgaWYodD15VG4odCxuKSwhdClyZXR1cm4gbnVsbH1yZXR1cm4gdH1mdW5jdGlvbiBIa2UoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2lmKEI9dC5sZW5ndGgsQj4wJiYodz0oWG4oMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApKSx3IT02NCkpe2lmKHc9PTM3JiYoTD10Lmxhc3RJbmRleE9mKCIlIiksRT0hMSxMIT0wJiYoTD09Qi0xfHwoRT0oWG4oTCsxLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoTCsxKT09NDYpKSkpKXtpZihmPShHYSgxLEwsdC5sZW5ndGgpLHQuc3Vic3RyKDEsTC0xKSksTWU9dm4oIiUiLGYpP251bGw6VmtlKGYpLHI9MCxFKXRyeXtyPU9oKChYbihMKzIsdC5sZW5ndGgrMSksdC5zdWJzdHIoTCsyKSksbG8sSWkpfWNhdGNoKCRlKXt0aHJvdyAkZT1icygkZSksRGUoJGUsMTMwKT8oZz0kZSx1ZShuZXcgblYoZykpKTp1ZSgkZSl9Zm9yKHRlPW03ZShlLkdoKCkpO3RlLk9iKCk7KWlmKFY9TVYodGUpLERlKFYsNTE5KSYmKGE9bChWLDU5OCksVGU9YS5kLChNZT09bnVsbD9UZT09bnVsbDp2bihNZSxUZSkpJiZyLS09PTApKXJldHVybiBhO3JldHVybiBudWxsfWlmKEM9dC5sYXN0SW5kZXhPZigiLiIpLHo9Qz09LTE/dDooR2EoMCxDLHQubGVuZ3RoKSx0LnN1YnN0cigwLEMpKSxuPTAsQyE9LTEpdHJ5e249T2goKFhuKEMrMSx0Lmxlbmd0aCsxKSx0LnN1YnN0cihDKzEpKSxsbyxJaSl9Y2F0Y2goJGUpe2lmKCRlPWJzKCRlKSxEZSgkZSwxMzApKXo9dDtlbHNlIHRocm93IHVlKCRlKX1mb3Ioej12bigiJSIseik/bnVsbDpWa2UoeiksSj1tN2UoZS5HaCgpKTtKLk9iKCk7KWlmKFY9TVYoSiksRGUoViwxOTcpJiYobz1sKFYsMTk3KSxmZT1vLnhlKCksKHo9PW51bGw/ZmU9PW51bGw6dm4oeixmZSkpJiZuLS09PTApKXJldHVybiBvO3JldHVybiBudWxsfXJldHVybiBCdnQoZSx0KX1mdW5jdGlvbiBXRG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO2ZvcihDPW5ldyBQcix3PW5ldyBDdyxyPW5ldyBHKGUuYS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWlmKHQ9bChyZShyKSw2MCksRT1HNSh0KSxFKWp1KEMuZixFLHQpO2Vsc2UgaWYoVGU9aXgodCksVGUpZm9yKG89bmV3IEcoVGUuayk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDE4KSx4bih3LGEsdCk7Zm9yKG49bmV3IEcoZS5hLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspaWYodD1sKHJlKG4pLDYwKSxFPUc1KHQpLEUpe2ZvcihnPW5ldyBocihkcihxcyhFKS5hLktjKCksbmV3IGopKTtqcihnKTspaWYoZj1sKHhyKGcpLDE4KSwhRG8oZikmJihWPWYuYyxmZT1mLmQsISgoQ3QoKSxobCkuSGMoZi5jLmopJiZobC5IYyhmLmQuaikpKSl7aWYoSj1sKGNyKEMsZi5kLmkpLDYwKSxwMChzMChpMChhMChyMChuZXcgX2YsMCksMTAwKSxlLmNbdC5hLmRdKSxlLmNbSi5hLmRdKSksVi5qPT1lciYmTHN0KChrbCgpLFYpKSl7Zm9yKEI9bCgkaSh3LGYpLDIxKS5LYygpO0IuT2IoKTspaWYoTD1sKEIuUGIoKSw2MCksTC5kLmM8dC5kLmMpe2lmKHo9ZS5jW0wuYS5kXSx0ZT1lLmNbdC5hLmRdLHo9PXRlKWNvbnRpbnVlO3AwKHMwKGkwKGEwKHIwKG5ldyBfZiwxKSwxMDApLHopLHRlKSl9fWlmKGZlLmo9PWFyJiZNc3QoKGtsKCksZmUpKSl7Zm9yKEI9bCgkaSh3LGYpLDIxKS5LYygpO0IuT2IoKTspaWYoTD1sKEIuUGIoKSw2MCksTC5kLmM+dC5kLmMpe2lmKHo9ZS5jW3QuYS5kXSx0ZT1lLmNbTC5hLmRdLHo9PXRlKWNvbnRpbnVlO3AwKHMwKGkwKGEwKHIwKG5ldyBfZiwxKSwxMDApLHopLHRlKSl9fX19fWZ1bmN0aW9uIFlEbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7aWYoQj1sKGwoJGkoZS5yLHQpLDIxKSw4NyksdD09KEN0KCksYXIpfHx0PT1lcil7VnZ0KGUsdCk7cmV0dXJufWZvcihvPXQ9PVFuPyhQdygpLHJCKTooUHcoKSxpQiksJGU9dD09UW4/KG9sKCksYTEpOihvbCgpLHcwKSxuPWwoUW8oZS5iLHQpLDEyNykscj1uLmksYT1yLmMrWTUoaGUobGUoTmEsMSksWm8sMjgsMTUsW24ubi5iLGUuQy5iLGUua10pKSxmZT1yLmMrci5iLVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtuLm4uYyxlLkMuYyxlLmtdKSksZj1pM2UoeTRlKG8pLGUudCksVGU9dD09UW4/aWE6Z3MsTD1CLktjKCk7TC5PYigpOylFPWwoTC5QYigpLDExNyksISghRS5jfHxFLmMuZC5jLmxlbmd0aDw9MCkmJih0ZT1FLmIuTWYoKSxKPUUuZSx6PUUuYyxWPXouaSxWLmI9KHc9ei5uLHouZS5hK3cuYit3LmMpLFYuYT0oZz16Lm4sei5lLmIrZy5kK2cuYSksVU8oJGUseUVlKSx6LmY9JGUsWjAoeiwoQmwoKSx2MCkpLFYuYz1KLmEtKFYuYi10ZS5hKS8yLFplPWIuTWF0aC5taW4oYSxKLmEpLG90PWIuTWF0aC5tYXgoZmUsSi5hK3RlLmEpLFYuYzxaZT9WLmM9WmU6Vi5jK1YuYj5vdCYmKFYuYz1vdC1WLmIpLHZ0KGYuZCxuZXcgRGFlKFYsaDhlKGYsVikpKSxUZT10PT1Rbj9iLk1hdGgubWF4KFRlLEouYitFLmIuTWYoKS5iKTpiLk1hdGgubWluKFRlLEouYikpO2ZvcihUZSs9dD09UW4/ZS50Oi1lLnQsTWU9TThlKChmLmU9VGUsZikpLE1lPjAmJihsKFFvKGUuYix0KSwxMjcpLmEuYj1NZSksQz1CLktjKCk7Qy5PYigpOylFPWwoQy5QYigpLDExNyksISghRS5jfHxFLmMuZC5jLmxlbmd0aDw9MCkmJihWPUUuYy5pLFYuYy09RS5lLmEsVi5kLT1FLmUuYil9ZnVuY3Rpb24gWERuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6O2Zvcih0PW5ldyBQcix3PW5ldyBvcihlKTt3LmUhPXcuaS5nYygpOyl7Zm9yKGc9bChncih3KSwyNyksbj1uZXcgS3Msa2koWDBlLGcsbiksej1uZXcgQnAsYT1sKHljKG5ldyBibihudWxsLG5ldyB2dyhuZXcgaHIoZHIoc1AoZykuYS5LYygpLG5ldyBqKSkpKSxkc3QoeixQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSksODUpLEtodChuLGwoYS54YygoSG4oKSwhMCkpLDE2KSxuZXcgWTMpLHI9bCh5YyhGaShsKGEueGMoITEpLDE1KS5MYygpLG5ldyAkOSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksZj1yLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDc0KSxCPUtndChvKSxCJiYoRT1sKGhjKHpvKHQuZixCKSksMjEpLEV8fChFPWJidChCKSxqdSh0LmYsQixFKSksS2EobixFKSk7Zm9yKGE9bCh5YyhuZXcgYm4obnVsbCxuZXcgdncobmV3IGhyKGRyKGNwKGcpLmEuS2MoKSxuZXcgaikpKSksZHN0KHosUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSksODUpLEtodChuLGwoYS54YyghMCksMTYpLG5ldyBjNSkscj1sKHljKEZpKGwoYS54YyghMSksMTUpLkxjKCksbmV3IEVoKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbRWNdKSkpLDE1KSxMPXIuS2MoKTtMLk9iKCk7KUM9bChMLlBiKCksNzQpLEI9V2d0KEMpLEImJihFPWwoaGMoem8odC5mLEIpKSwyMSksRXx8KEU9YmJ0KEIpLGp1KHQuZixCLEUpKSxLYShuLEUpKX19ZnVuY3Rpb24gUURuKGUsdCl7YmxlKCk7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtpZih3PWl1KGUsMCk8MCx3JiYoZT1yMihlKSksaXUoZSwwKT09MClzd2l0Y2godCl7Y2FzZSAwOnJldHVybiIwIjtjYXNlIDE6cmV0dXJuIHNUO2Nhc2UgMjpyZXR1cm4iMC4wMCI7Y2FzZSAzOnJldHVybiIwLjAwMCI7Y2FzZSA0OnJldHVybiIwLjAwMDAiO2Nhc2UgNTpyZXR1cm4iMC4wMDAwMCI7Y2FzZSA2OnJldHVybiIwLjAwMDAwMCI7ZGVmYXVsdDpyZXR1cm4gej1uZXcgdGIsdDwwP3ouYSs9IjBFKyI6ei5hKz0iMEUiLHouYSs9dD09bG8/IjIxNDc0ODM2NDgiOiIiKy10LHouYX1DPTE4LEw9V2Uoa2YsQWQsMjgsQysxLDE1LDEpLG49QyxKPWU7ZG8gRT1KLEo9S04oSiwxMCksTFstLW5dPVlyKGJvKDQ4LERmKEUsbW8oSiwxMCkpKSkmWnM7d2hpbGUoaXUoSiwwKSE9MCk7aWYoYT1EZihEZihEZihDLG4pLHQpLDEpLHQ9PTApcmV0dXJuIHcmJihMWy0tbl09NDUpLElmKEwsbixDLW4pO2lmKHQ+MCYmaXUoYSwtNik+PTApe2lmKGl1KGEsMCk+PTApe2ZvcihvPW4rWXIoYSksZz1DLTE7Zz49bztnLS0pTFtnKzFdPUxbZ107cmV0dXJuIExbKytvXT00Nix3JiYoTFstLW5dPTQ1KSxJZihMLG4sQy1uKzEpfWZvcihmPTI7ZnNlKGYsYm8ocjIoYSksMSkpO2YrKylMWy0tbl09NDg7cmV0dXJuIExbLS1uXT00NixMWy0tbl09NDgsdyYmKExbLS1uXT00NSksSWYoTCxuLEMtbil9cmV0dXJuIFY9bisxLHI9QyxCPW5ldyBTNSx3JiYoQi5hKz0iLSIpLHItVj49MT8oaGIoQixMW25dKSxCLmErPSIuIixCLmErPUlmKEwsbisxLEMtbi0xKSk6Qi5hKz1JZihMLG4sQy1uKSxCLmErPSJFIixpdShhLDApPjAmJihCLmErPSIrIiksQi5hKz0iIitZXyhhKSxCLmF9ZnVuY3Rpb24gR3coZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90O2lmKHRlPW5ldyBsdChlLmcsZS5mKSxKPWE5ZShlKSxKLmE9Yi5NYXRoLm1heChKLmEsdCksSi5iPWIuTWF0aC5tYXgoSi5iLG4pLG90PUouYS90ZS5hLEM9Si5iL3RlLmIsJGU9Si5hLXRlLmEsdz1KLmItdGUuYixyKWZvcihmPWRzKGUpP2woYXQoZHMoZSksKHBpKCkseHYpKSw4OCk6bChhdChlLChwaSgpLHh2KSksODgpLGc9cWUoYXQoZSwocGkoKSxfTSkpKT09PXFlKChSYSgpLE11KSksVGU9bmV3IG9yKCghZS5jJiYoZS5jPW5ldyBudChIbCxlLDksOSkpLGUuYykpO1RlLmUhPVRlLmkuZ2MoKTspc3dpdGNoKGZlPWwoZ3IoVGUpLDEyMyksTWU9bChhdChmZSxzNyksNjQpLE1lPT0oQ3QoKSxQYykmJihNZT1Fa2UoZmUsZiksSGkoZmUsczcsTWUpKSxNZS5nKXtjYXNlIDE6Z3x8VXUoZmUsZmUuaSpvdCk7YnJlYWs7Y2FzZSAyOlV1KGZlLGZlLmkrJGUpLGd8fEd1KGZlLGZlLmoqQyk7YnJlYWs7Y2FzZSAzOmd8fFV1KGZlLGZlLmkqb3QpLEd1KGZlLGZlLmordyk7YnJlYWs7Y2FzZSA0Omd8fEd1KGZlLGZlLmoqQyl9aWYoRjUoZSxKLmEsSi5iKSxhKWZvcihCPW5ldyBvcigoIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm4pKTtCLmUhPUIuaS5nYygpOylMPWwoZ3IoQiksMTM1KSx6PUwuaStMLmcvMixWPUwuaitMLmYvMixaZT16L3RlLmEsRT1WL3RlLmIsWmUrRT49MSYmKFplLUU+MCYmVj49MD8oVXUoTCxMLmkrJGUpLEd1KEwsTC5qK3cqRSkpOlplLUU8MCYmej49MCYmKFV1KEwsTC5pKyRlKlplKSxHdShMLEwuait3KSkpO3JldHVybiBIaShlLChwaSgpLGt2KSwobWgoKSxvPWwoSzAoQk0pLDkpLG5ldyBaaChvLGwoYzAobyxvLmxlbmd0aCksOSksMCkpKSxuZXcgbHQob3QsQyl9ZnVuY3Rpb24gUXZ0KGUpe3N3KGUsbmV3IFhtKFV6KG53KFp2KHR3KGV3KG5ldyB4MSxnZiksIkVMSyBSYWRpYWwiKSwnQSByYWRpYWwgbGF5b3V0IHByb3ZpZGVyIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBhbGdvcml0aG0gb2YgUGV0ZXIgRWFkZXMgcHVibGlzaGVkIGluICJEcmF3aW5nIGZyZWUgdHJlZXMuIiwgcHVibGlzaGVkIGJ5IEludGVybmF0aW9uYWwgSW5zdGl0dXRlIGZvciBBZHZhbmNlZCBTdHVkeSBvZiBTb2NpYWwgSW5mb3JtYXRpb24gU2NpZW5jZSwgRnVqaXRzdSBMaW1pdGVkIGluIDE5OTEuIFRoZSByYWRpYWwgbGF5b3V0ZXIgdGFrZXMgYSB0cmVlIGFuZCBwbGFjZXMgdGhlIG5vZGVzIGluIHJhZGlhbCBvcmRlciBhcm91bmQgdGhlIHJvb3QuIFRoZSBub2RlcyBvZiB0aGUgc2FtZSB0cmVlIGxldmVsIGFyZSBwbGFjZWQgb24gdGhlIHNhbWUgcmFkaXVzLicpLG5ldyBmdSksZ2YpKSksZ3QoZSxnZixfRyxJdCh1Q3QpKSxndChlLGdmLEp5LEl0KGxDdCkpLGd0KGUsZ2YseDYsSXQoc0N0KSksZ3QoZSxnZixQeCxJdChhQ3QpKSxndChlLGdmLE54LEl0KG9DdCkpLGd0KGUsZ2YsZlQsSXQoaUN0KSksZ3QoZSxnZixmTCxJdChOSWUpKSxndChlLGdmLGRULEl0KGNDdCkpLGd0KGUsZ2YsQ2ZlLEl0KEpkZSkpLGd0KGUsZ2YsVGZlLEl0KFpkZSkpLGd0KGUsZ2YsTkcsSXQoQkllKSksZ3QoZSxnZixTZmUsSXQoZWdlKSksZ3QoZSxnZixfZmUsSXQoRkllKSksZ3QoZSxnZixNQ2UsSXQoUkllKSksZ3QoZSxnZixMQ2UsSXQoUEllKSksZ3QoZSxnZixDQ2UsSXQocVcpKSxndChlLGdmLFNDZSxJdChIVykpLGd0KGUsZ2YsX0NlLEl0KEZCKSksZ3QoZSxnZixBQ2UsSXQoakllKSksZ3QoZSxnZixUQ2UsSXQoT0llKSl9ZnVuY3Rpb24gS1UoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtpZihlPT1udWxsKXRocm93IHVlKG5ldyBnZCh1bCkpO2lmKEU9ZSxvPWUubGVuZ3RoLHc9ITEsbz4wJiYodD0oWG4oMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApKSwodD09NDV8fHQ9PTQzKSYmKGU9KFhuKDEsZS5sZW5ndGgrMSksZS5zdWJzdHIoMSkpLC0tbyx3PXQ9PTQ1KSksbz09MCl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtmb3IoO2UubGVuZ3RoPjAmJihYbigwLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoMCk9PTQ4KTspZT0oWG4oMSxlLmxlbmd0aCsxKSxlLnN1YnN0cigxKSksLS1vO2lmKG8+KEFtdCgpLGI2dClbMTBdKXRocm93IHVlKG5ldyBnZChZdytFKyciJykpO2ZvcihhPTA7YTxvO2ErKylpZihXMXQoKFhuKGEsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChhKSkpPT0tMSl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtmb3IoTD0wLGY9cl9lWzEwXSxDPUEwZVsxMF0sZz1yMihpX2VbMTBdKSxuPSEwLHI9byVmLHI+MCYmKEw9LXBhcnNlSW50KChHYSgwLHIsZS5sZW5ndGgpLGUuc3Vic3RyKDAscikpLDEwKSxlPShYbihyLGUubGVuZ3RoKzEpLGUuc3Vic3RyKHIpKSxvLT1yLG49ITEpO28+PWY7KXtpZihyPXBhcnNlSW50KChHYSgwLGYsZS5sZW5ndGgpLGUuc3Vic3RyKDAsZikpLDEwKSxlPShYbihmLGUubGVuZ3RoKzEpLGUuc3Vic3RyKGYpKSxvLT1mLG4pbj0hMTtlbHNle2lmKGl1KEwsZyk8MCl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtMPW1vKEwsQyl9TD1EZihMLHIpfWlmKGl1KEwsMCk+MCl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtpZighdyYmKEw9cjIoTCksaXUoTCwwKTwwKSl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtyZXR1cm4gTH1mdW5jdGlvbiBWa2UoZSl7a2xlKCk7dmFyIHQsbixyLGEsbyxmLGcsdztpZihlPT1udWxsKXJldHVybiBudWxsO2lmKGE9cGQoZSxjbCgzNykpLGE8MClyZXR1cm4gZTtmb3Iodz1uZXcgVGgoKEdhKDAsYSxlLmxlbmd0aCksZS5zdWJzdHIoMCxhKSkpLHQ9V2UoQWwsQzYsMjgsNCwxNSwxKSxnPTAscj0wLGY9ZS5sZW5ndGg7YTxmO2ErKylpZihYbihhLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoYSk9PTM3JiZlLmxlbmd0aD5hKzImJm1jZSgoWG4oYSsxLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoYSsxKSksa1BlLEVQZSkmJm1jZSgoWG4oYSsyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoYSsyKSksa1BlLEVQZSkpaWYobj12ZG4oKFhuKGErMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGErMSkpLChYbihhKzIsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChhKzIpKSksYSs9MixyPjA/KG4mMTkyKT09MTI4P3RbZysrXT1uPDwyND4+MjQ6cj0wOm4+PTEyOCYmKChuJjIyNCk9PTE5Mj8odFtnKytdPW48PDI0Pj4yNCxyPTIpOihuJjI0MCk9PTIyND8odFtnKytdPW48PDI0Pj4yNCxyPTMpOihuJjI0OCk9PTI0MCYmKHRbZysrXT1uPDwyND4+MjQscj00KSkscj4wKXtpZihnPT1yKXtzd2l0Y2goZyl7Y2FzZSAyOntoYih3LCgodFswXSYzMSk8PDZ8dFsxXSY2MykmWnMpO2JyZWFrfWNhc2UgMzp7aGIodywoKHRbMF0mMTUpPDwxMnwodFsxXSY2Myk8PDZ8dFsyXSY2MykmWnMpO2JyZWFrfX1nPTAscj0wfX1lbHNle2ZvcihvPTA7bzxnOysrbyloYih3LHRbb10mWnMpO2c9MCx3LmErPVN0cmluZy5mcm9tQ2hhckNvZGUobil9ZWxzZXtmb3Iobz0wO288ZzsrK28paGIodyx0W29dJlpzKTtnPTAsaGIodywoWG4oYSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGEpKSl9cmV0dXJuIHcuYX1mdW5jdGlvbiBKdnQoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtpZih6PWRzKGJjKGwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCkpKSxWPWRzKGJjKGwoT2UoKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKSwwKSw4NCkpKSxMPXo9PVYsZz1uZXcgcWEsdD1sKGF0KGUsKFBWKCksVk5lKSksNzUpLHQmJnQuYj49Mil7aWYoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pPT0wKW49KHJiKCksYT1uZXcgcmssYSkscXIoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKSxuKTtlbHNlIGlmKCghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSkuaT4xKWZvcihCPW5ldyBxOCgoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpKTtCLmUhPUIuaS5nYygpOylqQShCKTtkUCh0LGwoT2UoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKSwwKSwxNjYpKX1pZihMKWZvcihyPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpKTtyLmUhPXIuaS5nYygpOylmb3Iobj1sKGdyKHIpLDE2NiksRT1uZXcgb3IoKCFuLmEmJihuLmE9bmV3IFlzKHFoLG4sNSkpLG4uYSkpO0UuZSE9RS5pLmdjKCk7KXc9bChncihFKSwzNzcpLGcuYT1iLk1hdGgubWF4KGcuYSx3LmEpLGcuYj1iLk1hdGgubWF4KGcuYix3LmIpO2ZvcihmPW5ldyBvcigoIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm4pKTtmLmUhPWYuaS5nYygpOylvPWwoZ3IoZiksMTM1KSxDPWwoYXQobyxNTSksOCksQyYmUWgobyxDLmEsQy5iKSxMJiYoZy5hPWIuTWF0aC5tYXgoZy5hLG8uaStvLmcpLGcuYj1iLk1hdGgubWF4KGcuYixvLmorby5mKSk7cmV0dXJuIGd9ZnVuY3Rpb24gWnZ0KGUsdCxuLHIsYSl7dmFyIG8sZixnO2lmKGVodChlLHQpLGY9dFswXSxvPWNvKG4uYywwKSxnPS0xLHo3ZShuKSlpZihyPjApe2lmKGYrcj5lLmxlbmd0aClyZXR1cm4hMTtnPWtVKChHYSgwLGYrcixlLmxlbmd0aCksZS5zdWJzdHIoMCxmK3IpKSx0KX1lbHNlIGc9a1UoZSx0KTtzd2l0Y2gobyl7Y2FzZSA3MTpyZXR1cm4gZz1vNihlLGYsaGUobGUoenQsMSksZHQsMiw2LFtSd3Qsand0XSksdCksYS5lPWcsITA7Y2FzZSA3NzpyZXR1cm4gZFNuKGUsdCxhLGcsZik7Y2FzZSA3NjpyZXR1cm4gZ1NuKGUsdCxhLGcsZik7Y2FzZSA2OTpyZXR1cm4gc2tuKGUsdCxmLGEpO2Nhc2UgOTk6cmV0dXJuIGFrbihlLHQsZixhKTtjYXNlIDk3OnJldHVybiBnPW82KGUsZixoZShsZSh6dCwxKSxkdCwyLDYsWyJBTSIsIlBNIl0pLHQpLGEuYj1nLCEwO2Nhc2UgMTIxOnJldHVybiBwU24oZSx0LGYsZyxuLGEpO2Nhc2UgMTAwOnJldHVybiBnPD0wPyExOihhLmM9ZywhMCk7Y2FzZSA4MzpyZXR1cm4gZzwwPyExOng1bihnLGYsdFswXSxhKTtjYXNlIDEwNDpnPT0xMiYmKGc9MCk7Y2FzZSA3NTpjYXNlIDcyOnJldHVybiBnPDA/ITE6KGEuZj1nLGEuZz0hMSwhMCk7Y2FzZSAxMDc6cmV0dXJuIGc8MD8hMTooYS5mPWcsYS5nPSEwLCEwKTtjYXNlIDEwOTpyZXR1cm4gZzwwPyExOihhLmo9ZywhMCk7Y2FzZSAxMTU6cmV0dXJuIGc8MD8hMTooYS5uPWcsITApO2Nhc2UgOTA6aWYoZjxlLmxlbmd0aCYmKFhuKGYsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChmKT09OTApKXJldHVybisrdFswXSxhLm89MCwhMDtjYXNlIDEyMjpjYXNlIDExODpyZXR1cm4gTHhuKGUsZix0LGEpO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEpEbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY247Zm9yKE1lPXQuYy5sZW5ndGgsYT1uZXcgZjYoZS5hLG4sbnVsbCxudWxsKSxjbj1XZShOYSxabywyOCxNZSwxNSwxKSxKPVdlKE5hLFpvLDI4LE1lLDE1LDEpLFY9V2UoTmEsWm8sMjgsTWUsMTUsMSksdGU9MCxnPTA7ZzxNZTtnKyspSltnXT1JaSxWW2ddPWxvO2Zvcih3PTA7dzxNZTt3KyspZm9yKHI9KFNuKHcsdC5jLmxlbmd0aCksbCh0LmNbd10sMTg1KSksY25bd109V3VlKHIpLGNuW3RlXT5jblt3XSYmKHRlPXcpLEw9bmV3IEcoZS5hLmIpO0wuYTxMLmMuYy5sZW5ndGg7KWZvcihDPWwocmUoTCksMzApLFRlPW5ldyBHKEMuYSk7VGUuYTxUZS5jLmMubGVuZ3RoOylmZT1sKHJlKFRlKSwxMCksb3Q9emUoci5wW2ZlLnBdKSt6ZShyLmRbZmUucF0pLEpbd109Yi5NYXRoLm1pbihKW3ddLG90KSxWW3ddPWIuTWF0aC5tYXgoVlt3XSxvdCtmZS5vLmIpO2ZvcihTdD1XZShOYSxabywyOCxNZSwxNSwxKSxFPTA7RTxNZTtFKyspKFNuKEUsdC5jLmxlbmd0aCksbCh0LmNbRV0sMTg1KSkubz09KEQxKCksd3YpP1N0W0VdPUpbdGVdLUpbRV06U3RbRV09Vlt0ZV0tVltFXTtmb3Iobz1XZShOYSxabywyOCxNZSwxNSwxKSx6PW5ldyBHKGUuYS5iKTt6LmE8ei5jLmMubGVuZ3RoOylmb3IoQj1sKHJlKHopLDMwKSxaZT1uZXcgRyhCLmEpO1plLmE8WmUuYy5jLmxlbmd0aDspe2ZvcigkZT1sKHJlKFplKSwxMCksZj0wO2Y8TWU7ZisrKW9bZl09emUoKFNuKGYsdC5jLmxlbmd0aCksbCh0LmNbZl0sMTg1KSkucFskZS5wXSkremUoKFNuKGYsdC5jLmxlbmd0aCksbCh0LmNbZl0sMTg1KSkuZFskZS5wXSkrU3RbZl07X1FlKG8sTWh0KFBlLnByb3RvdHlwZS5NZSxQZSxbXSkpLGEucFskZS5wXT0ob1sxXStvWzJdKS8yLGEuZFskZS5wXT0wfXJldHVybiBhfWZ1bmN0aW9uIFpEbihlLHQsbil7dmFyIHIsYSxvLGYsZztzd2l0Y2gocj10Lmksbz1lLmkubyxhPWUuaS5kLGc9ZS5uLGY9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtnLGUuYV0pKSxlLmouZyl7Y2FzZSAxOnZkKHQsKG9sKCksdzApKSxyLmQ9LWEuZC1uLXIuYSxsKGwoanQodC5kLDApLDE4Nykub2YoKGZ0KCksWXgpKSwyOTEpPT0oSWgoKSxrZyk/KFowKHQsKEJsKCksdjApKSxyLmM9Zi5hLXplKEdlKFEoZSxSNikpKS1uLXIuYik6KFowKHQsKEJsKCksRmQpKSxyLmM9Zi5hK3plKEdlKFEoZSxSNikpKStuKTticmVhaztjYXNlIDI6WjAodCwoQmwoKSxGZCkpLHIuYz1vLmErYS5jK24sbChsKGp0KHQuZCwwKSwxODcpLm9mKChmdCgpLFl4KSksMjkxKT09KEloKCksa2cpPyh2ZCh0LChvbCgpLHcwKSksci5kPWYuYi16ZShHZShRKGUsUjYpKSktbi1yLmEpOih2ZCh0LChvbCgpLGExKSksci5kPWYuYit6ZShHZShRKGUsUjYpKSkrbik7YnJlYWs7Y2FzZSAzOnZkKHQsKG9sKCksYTEpKSxyLmQ9by5iK2EuYStuLGwobChqdCh0LmQsMCksMTg3KS5vZigoZnQoKSxZeCkpLDI5MSk9PShJaCgpLGtnKT8oWjAodCwoQmwoKSx2MCkpLHIuYz1mLmEtemUoR2UoUShlLFI2KSkpLW4tci5iKTooWjAodCwoQmwoKSxGZCkpLHIuYz1mLmEremUoR2UoUShlLFI2KSkpK24pO2JyZWFrO2Nhc2UgNDpaMCh0LChCbCgpLHYwKSksci5jPS1hLmItbi1yLmIsbChsKGp0KHQuZCwwKSwxODcpLm9mKChmdCgpLFl4KSksMjkxKT09KEloKCksa2cpPyh2ZCh0LChvbCgpLHcwKSksci5kPWYuYi16ZShHZShRKGUsUjYpKSktbi1yLmEpOih2ZCh0LChvbCgpLGExKSksci5kPWYuYit6ZShHZShRKGUsUjYpKSkrbil9fWZ1bmN0aW9uIGVJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEo7Zm9yKG4uVWcoeXl0LDEpLCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSxyPXplKEdlKGF0KHQsKHoxKCksS1cpKSkpLEM9emUoR2UoYXQodCx3TSkpKSxCPWwoYXQodCx2TSksMTA3KSx6PW5ldyBRM2UocixDKSxvPXd3dCh6LHQsQiksU2h0KHQseiksZz1sKGF0KHQsbk9lKSwxNykuYTtnPjE7KXtpZihhPWFDbih0KSxMPW8uZyxWPWwoYXQodCx2TSksMTA3KSxKPXplKEdlKGF0KHQsS1cpKSksKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmk+MSYmemUoR2UoYXQodCwodWcoKSxjZ2UpKSkpIT1ncyYmKG8uYysoVi5iK1YuYykpLyhvLmIrKFYuZCtWLmEpKTxKP0hpKGEsKHVnKCksVDQpLHplKEdlKGF0KHQsVDQpKSkremUoR2UoYXQodCxjZ2UpKSkpOighdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKS5pPjEmJnplKEdlKGF0KHQsKHVnKCksb2dlKSkpKSE9Z3MmJihvLmMrKFYuYitWLmMpKS8oby5iKyhWLmQrVi5hKSk+SiYmSGkoYSwodWcoKSxUNCksYi5NYXRoLm1heCh6ZShHZShhdCh0LG1NKSkpLHplKEdlKGF0KGEsVDQpKSktemUoR2UoYXQodCxvZ2UpKSkpKSx6PW5ldyBRM2UocixDKSx3PXd3dCh6LGEsQiksRT13LmcsRT49TCYmRT09RSl7Zm9yKGY9MDtmPCghYS5hJiYoYS5hPW5ldyBudChBaSxhLDEwLDExKSksYS5hKS5pO2YrKylHcHQoZSxsKE9lKCghYS5hJiYoYS5hPW5ldyBudChBaSxhLDEwLDExKSksYS5hKSxmKSwyNyksbChPZSgoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSksZiksMjcpKTtTaHQodCx6KSxsMm4obyx3LmMpLHUybihvLHcuYil9LS1nfUhpKHQsKHVnKCksWlQpLG8uYiksSGkodCxaeCxvLmMpLG4uVmcoKX1mdW5jdGlvbiB0SW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO2Zvcih0LlVnKCJJbnRlcmFjdGl2ZSBub2RlIGxheWVyaW5nIiwxKSxuPW5ldyBidCxCPW5ldyBHKGUuYSk7Qi5hPEIuYy5jLmxlbmd0aDspe2ZvcihDPWwocmUoQiksMTApLHc9Qy5uLmEsZz13K0Muby5hLGc9Yi5NYXRoLm1heCh3KzEsZyksVGU9bmV3IFVhKG4sMCkscj1udWxsO1RlLmI8VGUuZC5nYygpOylpZih0ZT0obXIoVGUuYjxUZS5kLmdjKCkpLGwoVGUuZC5YYihUZS5jPVRlLmIrKyksNTc4KSksdGUuYz49Zyl7bXIoVGUuYj4wKSxUZS5hLlhiKFRlLmM9LS1UZS5iKTticmVha31lbHNlIHRlLmE+dyYmKHI/KHJhKHIuYix0ZS5iKSxyLmE9Yi5NYXRoLm1heChyLmEsdGUuYSkscGgoVGUpKToodnQodGUuYixDKSx0ZS5jPWIuTWF0aC5taW4odGUuYyx3KSx0ZS5hPWIuTWF0aC5tYXgodGUuYSxnKSxyPXRlKSk7cnx8KHI9bmV3IEdRZSxyLmM9dyxyLmE9ZyxieShUZSxyKSx2dChyLmIsQykpfWZvcihmPWUuYixFPTAsZmU9bmV3IEcobik7ZmUuYTxmZS5jLmMubGVuZ3RoOylmb3IodGU9bChyZShmZSksNTc4KSxhPW5ldyB5dShlKSxhLnA9RSsrLCRuKGYuYyxhKSx6PW5ldyBHKHRlLmIpO3ouYTx6LmMuYy5sZW5ndGg7KUM9bChyZSh6KSwxMCksVmEoQyxhKSxDLnA9MDtmb3IoTD1uZXcgRyhlLmEpO0wuYTxMLmMuYy5sZW5ndGg7KWlmKEM9bChyZShMKSwxMCksQy5wPT0wKWZvcihKPXFidChDLGUpO0ouYS5nYygpIT0wOylWPWwoSi5hLmVjKCkuS2MoKS5QYigpLDEwKSxKLmEuQmMoVikhPW51bGwsS2EoSixxYnQoVixlKSk7Zm9yKG89bmV3IFVhKGYsMCk7by5iPG8uZC5nYygpOykobXIoby5iPG8uZC5nYygpKSxsKG8uZC5YYihvLmM9by5iKyspLDMwKSkuYS5jLmxlbmd0aD09MCYmcGgobyk7ZS5hLmMubGVuZ3RoPTAsdC5WZygpfWZ1bmN0aW9uIG5JbihlLHQsbixyLGEsbyxmKXt2YXIgZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2ksd3M7Zm9yKHo9MCxCbj0wLHc9bmV3IEcoZSk7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDI3KSxGdnQoZyksej1iLk1hdGgubWF4KHosZy5nKSxCbis9Zy5nKmcuZjtmb3IoVj1Cbi9lLmMubGVuZ3RoLGFuPWo3bihlLFYpLEJuKz1lLmMubGVuZ3RoKmFuLHo9Yi5NYXRoLm1heCh6LGIuTWF0aC5zcXJ0KEJuKmYpKStuLmIsb2k9bi5iLHdzPW4uZCxCPTAsQz1uLmIrbi5jLGNuPW5ldyBvcyx1aShjbixwdCgwKSksb3Q9bmV3IG9zLEU9bmV3IFVhKGUsMCk7RS5iPEUuZC5nYygpOylnPShtcihFLmI8RS5kLmdjKCkpLGwoRS5kLlhiKEUuYz1FLmIrKyksMjcpKSx1cj1nLmcsTD1nLmYsb2krdXI+eiYmKG8mJihrbyhvdCxCKSxrbyhjbixwdChFLmItMSkpKSxvaT1uLmIsd3MrPUIrdCxCPTAsQz1iLk1hdGgubWF4KEMsbi5iK24uYyt1cikpLFV1KGcsb2kpLEd1KGcsd3MpLEM9Yi5NYXRoLm1heChDLG9pK3VyK24uYyksQj1iLk1hdGgubWF4KEIsTCksb2krPXVyK3Q7aWYoQz1iLk1hdGgubWF4KEMsciksam49d3MrQituLmEsam48YSYmKEIrPWEtam4sam49YSksbylmb3Iob2k9bi5iLEU9bmV3IFVhKGUsMCksa28oY24scHQoZS5jLmxlbmd0aCkpLFN0PVJyKGNuLDApLGZlPWwoQnIoU3QpLDE3KS5hLGtvKG90LEIpLFplPVJyKG90LDApLCRlPTA7RS5iPEUuZC5nYygpOylFLmI9PWZlJiYob2k9bi5iLCRlPXplKEdlKEJyKFplKSkpLGZlPWwoQnIoU3QpLDE3KS5hKSxnPShtcihFLmI8RS5kLmdjKCkpLGwoRS5kLlhiKEUuYz1FLmIrKyksMjcpKSxUZT1nLmYsTXcoZywkZSksSj0kZSxFLmI9PWZlJiYodGU9Qy1vaS1uLmMsTWU9Zy5nLER3KGcsdGUpLGM5ZShnLG5ldyBsdCh0ZSxKKSxuZXcgbHQoTWUsVGUpKSksb2krPWcuZyt0O3JldHVybiBuZXcgbHQoQyxqbil9ZnVuY3Rpb24gckluKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbjtmb3IodC5VZygiQ29tcG91bmQgZ3JhcGggcG9zdHByb2Nlc3NvciIsMSksbj1SdChCdChRKGUsKE50KCksbGRlKSkpKSxnPWwoUShlLChmdCgpLGpMZSkpLDIyOSksQz1uZXcgS3MsZmU9Zy5lYygpLktjKCk7ZmUuT2IoKTspe2Zvcih0ZT1sKGZlLlBiKCksMTgpLGY9bmV3IE9sKGcuY2ModGUpKSxDbigpLFZzKGYsbmV3IEdJKGUpKSxaZT1kM24oKFNuKDAsZi5jLmxlbmd0aCksbChmLmNbMF0sMjQ5KSkpLFN0PUNmdChsKGp0KGYsZi5jLmxlbmd0aC0xKSwyNDkpKSxNZT1aZS5pLGJFKFN0LmksTWUpP1RlPU1lLmU6VGU9ZW8oTWUpLEw9bTZuKHRlLGYpLENoKHRlLmEpLEI9bnVsbCxvPW5ldyBHKGYpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwyNDkpLEo9bmV3IHFhLG45ZShKLGEuYSxUZSksej1hLmIscj1uZXcgYmwsQWNlKHIsMCx6LmEpLER5KHIsSiksJGU9bmV3IEVvKEkxKHouYykpLG90PW5ldyBFbyhJMSh6LmQpKSxPaSgkZSxKKSxPaShvdCxKKSxCJiYoci5iPT0wP1Y9b3Q6Vj0obXIoci5iIT0wKSxsKHIuYS5hLmMsOCkpLGNuPWIuTWF0aC5hYnMoQi5hLVYuYSk+RGQsYW49Yi5NYXRoLmFicyhCLmItVi5iKT5EZCwoIW4mJmNuJiZhbnx8biYmKGNufHxhbikpJiZ1aSh0ZS5hLCRlKSksS2EodGUuYSxyKSxyLmI9PTA/Qj0kZTpCPShtcihyLmIhPTApLGwoci5jLmIuYyw4KSksejNuKHosTCxKKSxDZnQoYSk9PVN0JiYoZW8oU3QuaSkhPWEuYSYmKEo9bmV3IHFhLG45ZShKLGVvKFN0LmkpLFRlKSkscnQodGUsWTFlLEopKSxFOW4oeix0ZSxUZSksQy5hLnpjKHosQyk7cG8odGUsWmUpLEZhKHRlLFN0KX1mb3IoRT1DLmEuZWMoKS5LYygpO0UuT2IoKTspdz1sKEUuUGIoKSwxOCkscG8odyxudWxsKSxGYSh3LG51bGwpO3QuVmcoKX1mdW5jdGlvbiBpSW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihhPWwoUShlLChIYygpLHkzKSksODgpLEM9YT09KEpzKCksdWMpfHxhPT12Yz9RMTp2YyxuPWwoeWMoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyBwSSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLHc9bCh5YyhmYyhuLk9jKCksbmV3IGRYZSh0KSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksdy5HYyhsKHljKGZjKG4uT2MoKSxuZXcgZ1hlKHQpKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbRWNdKSkpLDE2KSksdy5qZChuZXcgcFhlKEMpKSxCPW5ldyBLcChuZXcgYlhlKGEpKSxyPW5ldyBQcixnPXcuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMjQwKSxFPWwoZi5hLDQwKSxSdChCdChmLmMpKT8oQi5hLnpjKEUsKEhuKCksUGIpKT09bnVsbCxuZXcgYmEoQi5hLlpjKEUsITEpKS5hLmdjKCk+MCYma2kocixFLGwobmV3IGJhKEIuYS5aYyhFLCExKSkuYS5WYygpLDQwKSksbmV3IGJhKEIuYS5hZChFLCEwKSkuYS5nYygpPjEmJmtpKHIsTDF0KEIsRSksRSkpOihuZXcgYmEoQi5hLlpjKEUsITEpKS5hLmdjKCk+MCYmKG89bChuZXcgYmEoQi5hLlpjKEUsITEpKS5hLlZjKCksNDApLHFlKG8pPT09cWUoaGMoem8oci5mLEUpKSkmJmwoUShFLChRaSgpLE9kZSkpLDE1KS5GYyhvKSksbmV3IGJhKEIuYS5hZChFLCEwKSkuYS5nYygpPjEmJihMPUwxdChCLEUpLHFlKGhjKHpvKHIuZixMKSkpPT09cWUoRSkmJmwoUShMLChRaSgpLE9kZSkpLDE1KS5GYyhFKSksQi5hLkJjKEUpIT1udWxsKX1mdW5jdGlvbiBld3QoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlO2lmKGUuZ2MoKT09MSlyZXR1cm4gbChlLlhiKDApLDIzNSk7aWYoZS5nYygpPD0wKXJldHVybiBuZXcgS0g7Zm9yKGE9ZS5LYygpO2EuT2IoKTspe2ZvcihuPWwoYS5QYigpLDIzNSksVj0wLEM9SWksTD1JaSx3PWxvLEU9bG8sej1uZXcgRyhuLmUpO3ouYTx6LmMuYy5sZW5ndGg7KUI9bChyZSh6KSwxNTMpLFYrPWwoUShCLChiMCgpLHF4KSksMTcpLmEsQz1iLk1hdGgubWluKEMsQi5kLmEtQi5lLmEvMiksTD1iLk1hdGgubWluKEwsQi5kLmItQi5lLmIvMiksdz1iLk1hdGgubWF4KHcsQi5kLmErQi5lLmEvMiksRT1iLk1hdGgubWF4KEUsQi5kLmIrQi5lLmIvMik7cnQobiwoYjAoKSxxeCkscHQoVikpLHJ0KG4sKGJiKCksJEwpLG5ldyBsdChDLEwpKSxydChuLGhCLG5ldyBsdCh3LEUpKX1mb3IoQ24oKSxlLmpkKG5ldyB6OSksSj1uZXcgS0gscGMoSixsKGUuWGIoMCksOTYpKSxnPTAsVGU9MCxvPWUuS2MoKTtvLk9iKCk7KW49bChvLlBiKCksMjM1KSx0ZT1tYShKYShsKFEobiwoYmIoKSxoQikpLDgpKSxsKFEobiwkTCksOCkpLGc9Yi5NYXRoLm1heChnLHRlLmEpLFRlKz10ZS5hKnRlLmI7Zm9yKGc9Yi5NYXRoLm1heChnLGIuTWF0aC5zcXJ0KFRlKSp6ZShHZShRKEosKGIwKCksRzd0KSkpKSksZmU9emUoR2UoUShKLGtLKSkpLE1lPTAsJGU9MCxmPTAsdD1mZSxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMjM1KSx0ZT1tYShKYShsKFEobiwoYmIoKSxoQikpLDgpKSxsKFEobiwkTCksOCkpLE1lK3RlLmE+ZyYmKE1lPTAsJGUrPWYrZmUsZj0wKSxEX24oSixuLE1lLCRlKSx0PWIuTWF0aC5tYXgodCxNZSt0ZS5hKSxmPWIuTWF0aC5tYXgoZix0ZS5iKSxNZSs9dGUuYStmZTtyZXR1cm4gSn1mdW5jdGlvbiBzSW4oZSl7a2tlKCk7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKGU9PW51bGx8fChvPWlWKGUpLFY9TzRuKG8pLFYlNCE9MCkpcmV0dXJuIG51bGw7aWYoSj1WLzR8MCxKPT0wKXJldHVybiBXZShBbCxDNiwyOCwwLDE1LDEpO2ZvcihMPW51bGwsdD0wLG49MCxyPTAsYT0wLGY9MCxnPTAsdz0wLEU9MCx6PTAsQj0wLEM9MCxMPVdlKEFsLEM2LDI4LEoqMywxNSwxKTt6PEotMTt6Kyspe2lmKCFlTyhmPW9bQysrXSl8fCFlTyhnPW9bQysrXSl8fCFlTyh3PW9bQysrXSl8fCFlTyhFPW9bQysrXSkpcmV0dXJuIG51bGw7dD1uZFtmXSxuPW5kW2ddLHI9bmRbd10sYT1uZFtFXSxMW0IrK109KHQ8PDJ8bj4+NCk8PDI0Pj4yNCxMW0IrK109KChuJjE1KTw8NHxyPj4yJjE1KTw8MjQ+PjI0LExbQisrXT0ocjw8NnxhKTw8MjQ+PjI0fXJldHVybiFlTyhmPW9bQysrXSl8fCFlTyhnPW9bQysrXSk/bnVsbDoodD1uZFtmXSxuPW5kW2ddLHc9b1tDKytdLEU9b1tDKytdLG5kW3ddPT0tMXx8bmRbRV09PS0xP3c9PTYxJiZFPT02MT9uJjE1P251bGw6KHRlPVdlKEFsLEM2LDI4LHoqMysxLDE1LDEpLHB1KEwsMCx0ZSwwLHoqMyksdGVbQl09KHQ8PDJ8bj4+NCk8PDI0Pj4yNCx0ZSk6dyE9NjEmJkU9PTYxPyhyPW5kW3ddLHImMz9udWxsOih0ZT1XZShBbCxDNiwyOCx6KjMrMiwxNSwxKSxwdShMLDAsdGUsMCx6KjMpLHRlW0IrK109KHQ8PDJ8bj4+NCk8PDI0Pj4yNCx0ZVtCXT0oKG4mMTUpPDw0fHI+PjImMTUpPDwyND4+MjQsdGUpKTpudWxsOihyPW5kW3ddLGE9bmRbRV0sTFtCKytdPSh0PDwyfG4+PjQpPDwyND4+MjQsTFtCKytdPSgobiYxNSk8PDR8cj4+MiYxNSk8PDI0Pj4yNCxMW0IrK109KHI8PDZ8YSk8PDI0Pj4yNCxMKSl9ZnVuY3Rpb24gYUluKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZTtmb3IodC5VZyhLM3QsMSksVj1sKFEoZSwoTnQoKSxicCkpLDIyMyksYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMzApLEU9Sk8oci5hKSxmPUUsZz0wLHc9Zi5sZW5ndGg7Zzx3OysrZylpZihvPWZbZ10sby5rPT0oWm4oKSxBdSkpe2lmKFY9PShpcCgpLHM5KSlmb3IoTD1uZXcgRyhvLmopO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxMiksQy5lLmMubGVuZ3RoPT0wfHxRNW4oQyksQy5nLmMubGVuZ3RoPT0wfHxKNW4oQyk7ZWxzZSBpZihEZShRKG8sKGZ0KCksemkpKSwxOCkpdGU9bChRKG8semkpLDE4KSxmZT1sKGQyKG8sKEN0KCksZXIpKS5LYygpLlBiKCksMTIpLFRlPWwoZDIobyxhcikuS2MoKS5QYigpLDEyKSxNZT1sKFEoZmUsemkpLDEyKSwkZT1sKFEoVGUsemkpLDEyKSxwbyh0ZSwkZSksRmEodGUsTWUpLFplPW5ldyBFbyhUZS5pLm4pLFplLmE9SWMoaGUobGUoRWEsMSksZHQsOCwwLFskZS5pLm4sJGUubiwkZS5hXSkpLmEsdWkodGUuYSxaZSksWmU9bmV3IEVvKGZlLmkubiksWmUuYT1JYyhoZShsZShFYSwxKSxkdCw4LDAsW01lLmkubixNZS5uLE1lLmFdKSkuYSx1aSh0ZS5hLFplKTtlbHNle2lmKG8uai5jLmxlbmd0aD49Mil7Zm9yKEo9ITAsQj1uZXcgRyhvLmopLG49bChyZShCKSwxMiksej1udWxsO0IuYTxCLmMuYy5sZW5ndGg7KWlmKHo9bixuPWwocmUoQiksMTIpLCFQaShRKHosemkpLFEobix6aSkpKXtKPSExO2JyZWFrfX1lbHNlIEo9ITE7Zm9yKEw9bmV3IEcoby5qKTtMLmE8TC5jLmMubGVuZ3RoOylDPWwocmUoTCksMTIpLEMuZS5jLmxlbmd0aD09MHx8QkNuKEMsSiksQy5nLmMubGVuZ3RoPT0wfHxGQ24oQyxKKX1WYShvLG51bGwpfXQuVmcoKX1mdW5jdGlvbiBvSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplO2ZvcihnPW5ldyBHKGUuYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylmb3Iobz1sKHJlKGcpLDMwKSxNZT1uZXcgRyhvLmEpO01lLmE8TWUuYy5jLmxlbmd0aDspVGU9bChyZShNZSksMTApLHQuZ1tUZS5wXT1UZSx0LmFbVGUucF09VGUsdC5kW1RlLnBdPTA7Zm9yKHc9ZS5hLmIsdC5jPT0oeGQoKSxUMikmJih3PWxmKHcpKSxmPXcuS2MoKTtmLk9iKCk7KWZvcihvPWwoZi5QYigpLDMwKSx6PS0xLEI9by5hLHQubz09KEQxKCksWTEpJiYoej1JaSxCPWxmKEIpKSxaZT1CLktjKCk7WmUuT2IoKTspaWYoJGU9bChaZS5QYigpLDEwKSxMPW51bGwsdC5jPT1UMj9MPWwoanQoZS5iLmYsJGUucCksMTUpOkw9bChqdChlLmIuYiwkZS5wKSwxNSksTC5nYygpPjApaWYocj1MLmdjKCksRT11YShiLk1hdGguZmxvb3IoKHIrMSkvMikpLTEsYT11YShiLk1hdGguY2VpbCgocisxKS8yKSktMSx0Lm89PVkxKWZvcihDPWE7Qz49RTtDLS0pdC5hWyRlLnBdPT0kZSYmKEo9bChMLlhiKEMpLDQyKSxWPWwoSi5hLDEwKSwhVzAobixKLmIpJiZ6PmUuYi5lW1YucF0mJih0LmFbVi5wXT0kZSx0LmdbJGUucF09dC5nW1YucF0sdC5hWyRlLnBdPXQuZ1skZS5wXSx0LmZbdC5nWyRlLnBdLnBdPShIbigpLCEhKFJ0KHQuZlt0LmdbJGUucF0ucF0pJiRlLms9PShabigpLEFhKSkpLHo9ZS5iLmVbVi5wXSkpO2Vsc2UgZm9yKEM9RTtDPD1hO0MrKyl0LmFbJGUucF09PSRlJiYoZmU9bChMLlhiKEMpLDQyKSx0ZT1sKGZlLmEsMTApLCFXMChuLGZlLmIpJiZ6PGUuYi5lW3RlLnBdJiYodC5hW3RlLnBdPSRlLHQuZ1skZS5wXT10LmdbdGUucF0sdC5hWyRlLnBdPXQuZ1skZS5wXSx0LmZbdC5nWyRlLnBdLnBdPShIbigpLCEhKFJ0KHQuZlt0LmdbJGUucF0ucF0pJiRlLms9PShabigpLEFhKSkpLHo9ZS5iLmVbdGUucF0pKX1mdW5jdGlvbiB0d3QoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuO3JldHVybiBNZT1lLmNbKFNuKDAsdC5jLmxlbmd0aCksbCh0LmNbMF0sMTgpKS5wXSxTdD1lLmNbKFNuKDEsdC5jLmxlbmd0aCksbCh0LmNbMV0sMTgpKS5wXSxNZS5hLmUuZS1NZS5hLmEtKE1lLmIuZS5lLU1lLmIuYSk9PTAmJlN0LmEuZS5lLVN0LmEuYS0oU3QuYi5lLmUtU3QuYi5hKT09MHx8KGZlPU1lLmIuZS5mLCFEZShmZSwxMCkpPyExOih0ZT1sKGZlLDEwKSxaZT1lLmlbdGUucF0sb3Q9dGUuYz9nYyh0ZS5jLmEsdGUsMCk6LTEsbz1ncyxvdD4wJiYoYT1sKGp0KHRlLmMuYSxvdC0xKSwxMCksZj1lLmlbYS5wXSxjbj1iLk1hdGguY2VpbChqNShlLm4sYSx0ZSkpLG89WmUuYS5lLXRlLmQuZC0oZi5hLmUrYS5vLmIrYS5kLmEpLWNuKSxFPWdzLG90PHRlLmMuYS5jLmxlbmd0aC0xJiYodz1sKGp0KHRlLmMuYSxvdCsxKSwxMCksQz1lLmlbdy5wXSxjbj1iLk1hdGguY2VpbChqNShlLm4sdyx0ZSkpLEU9Qy5hLmUtdy5kLmQtKFplLmEuZSt0ZS5vLmIrdGUuZC5hKS1jbiksbiYmKEExKCksZjAoTmQpLGIuTWF0aC5hYnMoby1FKTw9TmR8fG89PUV8fGlzTmFOKG8pJiZpc05hTihFKSk/ITA6KHI9emFlKE1lLmEpLGc9LXphZShNZS5iKSxMPS16YWUoU3QuYSksVGU9emFlKFN0LmIpLEo9TWUuYS5lLmUtTWUuYS5hLShNZS5iLmUuZS1NZS5iLmEpPjAmJlN0LmEuZS5lLVN0LmEuYS0oU3QuYi5lLmUtU3QuYi5hKTwwLFY9TWUuYS5lLmUtTWUuYS5hLShNZS5iLmUuZS1NZS5iLmEpPDAmJlN0LmEuZS5lLVN0LmEuYS0oU3QuYi5lLmUtU3QuYi5hKT4wLHo9TWUuYS5lLmUrTWUuYi5hPFN0LmIuZS5lK1N0LmEuYSxCPU1lLmEuZS5lK01lLmIuYT5TdC5iLmUuZStTdC5hLmEsJGU9MCwhSiYmIVYmJihCP28rTD4wPyRlPUw6RS1yPjAmJigkZT1yKTp6JiYobytnPjA/JGU9ZzpFLVRlPjAmJigkZT1UZSkpKSxaZS5hLmUrPSRlLFplLmImJihaZS5kLmUrPSRlKSwhMSkpfWZ1bmN0aW9uIG53dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7aWYocj1uZXcgZWYodC5MZigpLmEsdC5MZigpLmIsdC5NZigpLmEsdC5NZigpLmIpLGE9bmV3ICQ4LGUuYylmb3IoZj1uZXcgRyh0LlJmKCkpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxODcpLGEuYz1vLkxmKCkuYSt0LkxmKCkuYSxhLmQ9by5MZigpLmIrdC5MZigpLmIsYS5iPW8uTWYoKS5hLGEuYT1vLk1mKCkuYiwkQShyLGEpO2ZvcihFPW5ldyBHKHQuWGYoKSk7RS5hPEUuYy5jLmxlbmd0aDspe2lmKHc9bChyZShFKSw4NTIpLEM9dy5MZigpLmErdC5MZigpLmEsTD13LkxmKCkuYit0LkxmKCkuYixlLmUmJihhLmM9QyxhLmQ9TCxhLmI9dy5NZigpLmEsYS5hPXcuTWYoKS5iLCRBKHIsYSkpLGUuZClmb3IoZj1uZXcgRyh3LlJmKCkpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxODcpLGEuYz1vLkxmKCkuYStDLGEuZD1vLkxmKCkuYitMLGEuYj1vLk1mKCkuYSxhLmE9by5NZigpLmIsJEEocixhKTtpZihlLmIpe2lmKEI9bmV3IGx0KC1uLC1uKSxsKHQub2YoKHBpKCksUzQpKSwxODEpLkhjKChSbCgpLFliKSkpZm9yKGY9bmV3IEcody5SZigpKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTg3KSxCLmErPW8uTWYoKS5hK24sQi5iKz1vLk1mKCkuYituO0IuYT1iLk1hdGgubWF4KEIuYSwwKSxCLmI9Yi5NYXRoLm1heChCLmIsMCksRW10KHIsdy5XZigpLHcuVWYoKSx0LHcsQixuKX19ZS5iJiZFbXQocix0LldmKCksdC5VZigpLHQsbnVsbCxudWxsLG4pLGc9bmV3IHhhZSh0LlZmKCkpLGcuZD1iLk1hdGgubWF4KDAsdC5MZigpLmItci5kKSxnLmE9Yi5NYXRoLm1heCgwLHIuZCtyLmEtKHQuTGYoKS5iK3QuTWYoKS5iKSksZy5iPWIuTWF0aC5tYXgoMCx0LkxmKCkuYS1yLmMpLGcuYz1iLk1hdGgubWF4KDAsci5jK3IuYi0odC5MZigpLmErdC5NZigpLmEpKSx0LlpmKGcpfWZ1bmN0aW9uIGNJbigpe3ZhciBlPVsiXFx1MDAwMCIsIlxcdTAwMDEiLCJcXHUwMDAyIiwiXFx1MDAwMyIsIlxcdTAwMDQiLCJcXHUwMDA1IiwiXFx1MDAwNiIsIlxcdTAwMDciLCJcXGIiLCJcXHQiLCJcXG4iLCJcXHUwMDBCIiwiXFxmIiwiXFxyIiwiXFx1MDAwRSIsIlxcdTAwMEYiLCJcXHUwMDEwIiwiXFx1MDAxMSIsIlxcdTAwMTIiLCJcXHUwMDEzIiwiXFx1MDAxNCIsIlxcdTAwMTUiLCJcXHUwMDE2IiwiXFx1MDAxNyIsIlxcdTAwMTgiLCJcXHUwMDE5IiwiXFx1MDAxQSIsIlxcdTAwMUIiLCJcXHUwMDFDIiwiXFx1MDAxRCIsIlxcdTAwMUUiLCJcXHUwMDFGIl07cmV0dXJuIGVbMzRdPSdcXCInLGVbOTJdPSJcXFxcIixlWzE3M109IlxcdTAwYWQiLGVbMTUzNl09IlxcdTA2MDAiLGVbMTUzN109IlxcdTA2MDEiLGVbMTUzOF09IlxcdTA2MDIiLGVbMTUzOV09IlxcdTA2MDMiLGVbMTc1N109IlxcdTA2ZGQiLGVbMTgwN109IlxcdTA3MGYiLGVbNjA2OF09IlxcdTE3YjQiLGVbNjA2OV09IlxcdTE3YjUiLGVbODIwM109IlxcdTIwMGIiLGVbODIwNF09IlxcdTIwMGMiLGVbODIwNV09IlxcdTIwMGQiLGVbODIwNl09IlxcdTIwMGUiLGVbODIwN109IlxcdTIwMGYiLGVbODIzMl09IlxcdTIwMjgiLGVbODIzM109IlxcdTIwMjkiLGVbODIzNF09IlxcdTIwMmEiLGVbODIzNV09IlxcdTIwMmIiLGVbODIzNl09IlxcdTIwMmMiLGVbODIzN109IlxcdTIwMmQiLGVbODIzOF09IlxcdTIwMmUiLGVbODI4OF09IlxcdTIwNjAiLGVbODI4OV09IlxcdTIwNjEiLGVbODI5MF09IlxcdTIwNjIiLGVbODI5MV09IlxcdTIwNjMiLGVbODI5Ml09IlxcdTIwNjQiLGVbODI5OF09IlxcdTIwNmEiLGVbODI5OV09IlxcdTIwNmIiLGVbODMwMF09IlxcdTIwNmMiLGVbODMwMV09IlxcdTIwNmQiLGVbODMwMl09IlxcdTIwNmUiLGVbODMwM109IlxcdTIwNmYiLGVbNjUyNzldPSJcXHVmZWZmIixlWzY1NTI5XT0iXFx1ZmZmOSIsZVs2NTUzMF09IlxcdWZmZmEiLGVbNjU1MzFdPSJcXHVmZmZiIixlfWZ1bmN0aW9uIHJ3dChlKXtzdyhlLG5ldyBYbShhM2UoVXoobncoWnYodHcoZXcobmV3IHgxLFl1KSwiRUxLIEZvcmNlIiksIkZvcmNlLWJhc2VkIGFsZ29yaXRobSBwcm92aWRlZCBieSB0aGUgRWNsaXBzZSBMYXlvdXQgS2VybmVsLiBJbXBsZW1lbnRzIG1ldGhvZHMgdGhhdCBmb2xsb3cgcGh5c2ljYWwgYW5hbG9naWVzIGJ5IHNpbXVsYXRpbmcgZm9yY2VzIHRoYXQgbW92ZSB0aGUgbm9kZXMgaW50byBhIGJhbGFuY2VkIGRpc3RyaWJ1dGlvbi4gQ3VycmVudGx5IHRoZSBvcmlnaW5hbCBFYWRlcyBtb2RlbCBhbmQgdGhlIEZydWNodGVybWFuIC0gUmVpbmdvbGQgbW9kZWwgYXJlIHN1cHBvcnRlZC4iKSxuZXcgbGQpLFl1KSxycygoSEUoKSx5WSksaGUobGUoeFksMSksaXQsMjQ1LDAsW3ZZXSkpKSkpLGd0KGUsWXUsTlAscHQoMSkpLGd0KGUsWXUsSnksODApLGd0KGUsWXUsT2hlLDUpLGd0KGUsWXUsT3gsbFQpLGd0KGUsWXUsb0cscHQoMSkpLGd0KGUsWXUsbEwsKEhuKCksITApKSxndChlLFl1LFh3LG5BZSksZ3QoZSxZdSxoTCxJdChaX2UpKSxndChlLFl1LE5oZSxJdChyQWUpKSxndChlLFl1LGNHLCExKSxndChlLFl1LGZMLEl0KHRBZSkpLGd0KGUsWXUsaFQsSXQoWDd0KSksZ3QoZSxZdSxOeCxJdChRN3QpKSxndChlLFl1LHg2LEl0KFk3dCkpLGd0KGUsWXUsZlQsSXQoVzd0KSksZ3QoZSxZdSxkVCxJdChaN3QpKSxndChlLFl1LGFHLEl0KGVBZSkpLGd0KGUsWXUsRGhlLEl0KFowZSkpLGd0KGUsWXUsSUVlLEl0KHhLKSksZ3QoZSxZdSxJaGUsSXQoSjBlKSksZ3QoZSxZdSxPRWUsSXQoaUFlKSksZ3QoZSxZdSxQUCxJdChzOHQpKSxndChlLFl1LEJQLEl0KGE4dCkpLGd0KGUsWXUsRlAsSXQoaTh0KSksZ3QoZSxZdSxSUCxJdChyOHQpKSxndChlLFl1LFF3LHNBZSl9ZnVuY3Rpb24gX2IoZSx0KXtEaSgpO3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKGRfKHVDKT09MCl7Zm9yKEw9V2UoQk9uLGR0LDEyMix4QXQubGVuZ3RoLDAsMSksZj0wO2Y8TC5sZW5ndGg7ZisrKUxbZl09bmV3IF9oKDQpO2ZvcihyPW5ldyBoXyxvPTA7bzxXUGUubGVuZ3RoO28rKyl7aWYoQz1uZXcgX2goNCksbzw4ND8oZz1vKjIsej0oWG4oZyxiMGUubGVuZ3RoKSxiMGUuY2hhckNvZGVBdChnKSksQj0oWG4oZysxLGIwZS5sZW5ndGgpLGIwZS5jaGFyQ29kZUF0KGcrMSkpLEV1KEMseixCKSk6KGc9KG8tODQpKjIsRXUoQyxZUGVbZ10sWVBlW2crMV0pKSx3PVdQZVtvXSx2bih3LCJTcGVjaWFscyIpJiZFdShDLDY1NTIwLDY1NTMzKSx2bih3LFk1dCkmJihFdShDLDk4MzA0MCwxMDQ4NTczKSxFdShDLDEwNDg1NzYsMTExNDEwOSkpLHJjKHVDLHcsQykscmMoS00sdyxVeShDKSksRT1yLmEubGVuZ3RoLDA8RT9yLmE9dGYoci5hLDAsMCk6MD5FJiYoci5hKz1NbnQoV2Uoa2YsQWQsMjgsLUUsMTUsMSkpKSxyLmErPSJJcyIscGQodyxjbCgzMikpPj0wKWZvcihhPTA7YTx3Lmxlbmd0aDthKyspWG4oYSx3Lmxlbmd0aCksdy5jaGFyQ29kZUF0KGEpIT0zMiYmVWsociwoWG4oYSx3Lmxlbmd0aCksdy5jaGFyQ29kZUF0KGEpKSk7ZWxzZSByLmErPSIiK3c7RjhlKHIuYSx3LCEwKX1GOGUocDBlLCJDbiIsITEpLEY4ZSgkU2UsIkNuIiwhMCksbj1uZXcgX2goNCksRXUobiwwLFRUKSxyYyh1QywiQUxMIixuKSxyYyhLTSwiQUxMIixVeShuKSksIVA0JiYoUDQ9bmV3IFByKSxyYyhQNCxwMGUscDBlKSwhUDQmJihQND1uZXcgUHIpLHJjKFA0LCRTZSwkU2UpLCFQNCYmKFA0PW5ldyBQcikscmMoUDQsIkFMTCIsIkFMTCIpfXJldHVybiBWPWwoeHUodD91QzpLTSxlKSwxMzgpLFZ9ZnVuY3Rpb24gaXd0KGUpe3N3KGUsbmV3IFhtKGEzZShVeihudyhadih0dyhldyhuZXcgeDEsWHUpLCJFTEsgTXIuIFRyZWUiKSwiVHJlZS1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gQ29tcHV0ZXMgYSBzcGFubmluZyB0cmVlIG9mIHRoZSBpbnB1dCBncmFwaCBhbmQgYXJyYW5nZXMgYWxsIG5vZGVzIGFjY29yZGluZyB0byB0aGUgcmVzdWx0aW5nIHBhcmVudC1jaGlsZHJlbiBoaWVyYXJjaHkuIEkgcGl0eSB0aGUgZm9vbCB3aG8gZG9lc24ndCB1c2UgTXIuIFRyZWUgTGF5b3V0LiIpLG5ldyBXdGUpLGJ5dCksdW4oKEhFKCksWGdlKSkpKSksZ3QoZSxYdSxYdyxwSWUpLGd0KGUsWHUsSnksMjApLGd0KGUsWHUsZGZlLDMpLGd0KGUsWHUsT3gsbFQpLGd0KGUsWHUsTlAscHQoMSkpLGd0KGUsWHUsbEwsKEhuKCksITApKSxndChlLFh1LFZQLEl0KGxJZSkpLGd0KGUsWHUsZ2ZlLGhJZSksZ3QoZSxYdSxoTCxJdChrVHQpKSxndChlLFh1LEFHLEl0KEVUdCkpLGd0KGUsWHUseDYsSXQoQ1R0KSksZ3QoZSxYdSxoVCxJdChTVHQpKSxndChlLFh1LFB4LEl0KF9UdCkpLGd0KGUsWHUsTngsSXQoQVR0KSksZ3QoZSxYdSxmVCxJdChUVHQpKSxndChlLFh1LGZMLEl0KGRJZSkpLGd0KGUsWHUsZFQsSXQoTFR0KSksZ3QoZSxYdSxiQ2UsSXQod0llKSksZ3QoZSxYdSx2Q2UsSXQoYkllKSksZ3QoZSxYdSxQUCxJdChPVHQpKSxndChlLFh1LEJQLEl0KE5UdCkpLGd0KGUsWHUsRlAsSXQoSVR0KSksZ3QoZSxYdSxSUCxJdChEVHQpKSxndChlLFh1LFF3LHZJZSksZ3QoZSxYdSxwQ2UsSXQoVzYpKSxndChlLFh1LG1DZSxJdCgkZGUpKSxndChlLFh1LGdDZSxJdCgkZCkpLGd0KGUsWHUsZkNlLEl0KHVJZSkpLGd0KGUsWHUsZENlLEl0KGZJZSkpfWZ1bmN0aW9uIHN3dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEU9bChsKCRpKGUucix0KSwyMSksODcpLGY9enhuKGUsdCksbj1lLnUuSGMoKFJsKCksTk0pKSx3PUUuS2MoKTt3Lk9iKCk7KWlmKGc9bCh3LlBiKCksMTE3KSwhKCFnLmN8fGcuYy5kLmMubGVuZ3RoPD0wKSl7c3dpdGNoKEI9Zy5iLk1mKCksQz1nLmMsTD1DLmksTC5iPShvPUMubixDLmUuYStvLmIrby5jKSxMLmE9KGE9Qy5uLEMuZS5iK2EuZCthLmEpLHQuZyl7Y2FzZSAxOmcuYT8oTC5jPShCLmEtTC5iKS8yLFowKEMsKEJsKCksQmIpKSk6Znx8bj8oTC5jPS1MLmItZS5zLFowKEMsKEJsKCksdjApKSk6KEwuYz1CLmErZS5zLFowKEMsKEJsKCksRmQpKSksTC5kPS1MLmEtZS50LHZkKEMsKG9sKCksdzApKTticmVhaztjYXNlIDM6Zy5hPyhMLmM9KEIuYS1MLmIpLzIsWjAoQywoQmwoKSxCYikpKTpmfHxuPyhMLmM9LUwuYi1lLnMsWjAoQywoQmwoKSx2MCkpKTooTC5jPUIuYStlLnMsWjAoQywoQmwoKSxGZCkpKSxMLmQ9Qi5iK2UudCx2ZChDLChvbCgpLGExKSk7YnJlYWs7Y2FzZSAyOmcuYT8ocj1lLnY/TC5hOmwoanQoQy5kLDApLDE4NykuTWYoKS5iLEwuZD0oQi5iLXIpLzIsdmQoQywob2woKSxGYikpKTpmfHxuPyhMLmQ9LUwuYS1lLnQsdmQoQywob2woKSx3MCkpKTooTC5kPUIuYitlLnQsdmQoQywob2woKSxhMSkpKSxMLmM9Qi5hK2UucyxaMChDLChCbCgpLEZkKSk7YnJlYWs7Y2FzZSA0OmcuYT8ocj1lLnY/TC5hOmwoanQoQy5kLDApLDE4NykuTWYoKS5iLEwuZD0oQi5iLXIpLzIsdmQoQywob2woKSxGYikpKTpmfHxuPyhMLmQ9LUwuYS1lLnQsdmQoQywob2woKSx3MCkpKTooTC5kPUIuYitlLnQsdmQoQywob2woKSxhMSkpKSxMLmM9LUwuYi1lLnMsWjAoQywoQmwoKSx2MCkpfWY9ITF9fWZ1bmN0aW9uIHVJbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGU7aWYoQj0hMSxMPSExLFA1KGwoUShyLChOdCgpLE1zKSksMTAxKSkpe2Y9ITEsZz0hMTtlOmZvcihWPW5ldyBHKHIuaik7Vi5hPFYuYy5jLmxlbmd0aDspZm9yKHo9bChyZShWKSwxMiksdGU9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbmV3IFQ1KHopLG5ldyBDOCh6KV0pKSk7anIodGUpOylpZihKPWwoeHIodGUpLDEyKSwhUnQoQnQoUShKLmksUUwpKSkpe2lmKHouaj09KEN0KCksUW4pKXtmPSEwO2JyZWFrIGV9aWYoei5qPT1Ecil7Zz0hMDticmVhayBlfX1CPWcmJiFmLEw9ZiYmIWd9aWYoIUImJiFMJiZyLmIuYy5sZW5ndGghPTApe2ZvcihDPTAsRT1uZXcgRyhyLmIpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSw3MiksQys9dy5uLmIrdy5vLmIvMjtDLz1yLmIuYy5sZW5ndGgsVGU9Qz49ci5vLmIvMn1lbHNlIFRlPSFMO1RlPyhmZT1sKFEociwoZnQoKSxReCkpLDE1KSxmZT9CP289ZmU6KGE9bChRKHIsR3gpLDE1KSxhP2ZlLmdjKCk8PWEuZ2MoKT9vPWZlOm89YToobz1uZXcgYnQscnQocixHeCxvKSkpOihvPW5ldyBidCxydChyLFF4LG8pKSk6KGE9bChRKHIsKGZ0KCksR3gpKSwxNSksYT9MP289YTooZmU9bChRKHIsUXgpLDE1KSxmZT9hLmdjKCk8PWZlLmdjKCk/bz1hOm89ZmU6KG89bmV3IGJ0LHJ0KHIsUXgsbykpKToobz1uZXcgYnQscnQocixHeCxvKSkpLG8uRmMoZSkscnQoZSwoZnQoKSxyVyksbiksdC5kPT1uPyhGYSh0LG51bGwpLG4uZS5jLmxlbmd0aCtuLmcuYy5sZW5ndGg9PTAmJk1jKG4sbnVsbCksVHluKG4pKToocG8odCxudWxsKSxuLmUuYy5sZW5ndGgrbi5nLmMubGVuZ3RoPT0wJiZNYyhuLG51bGwpKSxDaCh0LmEpfWZ1bmN0aW9uIGxJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2ksd3M7Zm9yKG4uVWcoIk1pbldpZHRoIGxheWVyaW5nIiwxKSx6PXQuYixTdD10LmEsd3M9bChRKHQsKE50KCksek1lKSksMTcpLmEsZz1sKFEodCxxTWUpLDE3KS5hLGUuYj16ZShHZShRKHQseDApKSksZS5kPWdzLCRlPW5ldyBHKFN0KTskZS5hPCRlLmMuYy5sZW5ndGg7KVRlPWwocmUoJGUpLDEwKSxUZS5rPT0oWm4oKSxQcykmJihCbj1UZS5vLmIsZS5kPWIuTWF0aC5taW4oZS5kLEJuKSk7Zm9yKGUuZD1iLk1hdGgubWF4KDEsZS5kKSxjbj1TdC5jLmxlbmd0aCxlLmM9V2UoVnIsZGksMjgsY24sMTUsMSksZS5mPVdlKFZyLGRpLDI4LGNuLDE1LDEpLGUuZT1XZShOYSxabywyOCxjbiwxNSwxKSxFPTAsZS5hPTAsWmU9bmV3IEcoU3QpO1plLmE8WmUuYy5jLmxlbmd0aDspVGU9bChyZShaZSksMTApLFRlLnA9RSsrLGUuY1tUZS5wXT0kMHQoa2EoVGUpKSxlLmZbVGUucF09JDB0KHFzKFRlKSksZS5lW1RlLnBdPVRlLm8uYi9lLmQsZS5hKz1lLmVbVGUucF07Zm9yKGUuYi89ZS5kLGUuYS89Y24sb3Q9ZUVuKFN0KSxWcyhTdCxfNWUobmV3IERZZShlKSkpLEo9Z3MsVj1JaSxmPW51bGwsb2k9d3MsdXI9d3Msbz1nLGE9Zyx3czwwJiYob2k9bChqRGUuYS5JZCgpLDE3KS5hLHVyPWwoakRlLmIuSWQoKSwxNykuYSksZzwwJiYobz1sKFJEZS5hLklkKCksMTcpLmEsYT1sKFJEZS5iLklkKCksMTcpLmEpLGpuPW9pO2puPD11cjtqbisrKWZvcihyPW87cjw9YTtyKyspYW49VkFuKGUsam4scixTdCxvdCksZmU9emUoR2UoYW4uYSkpLEI9bChhbi5iLDE1KSx0ZT1CLmdjKCksKGZlPEp8fGZlPT1KJiZ0ZTxWKSYmKEo9ZmUsVj10ZSxmPUIpO2ZvcihMPWYuS2MoKTtMLk9iKCk7KXtmb3IoQz1sKEwuUGIoKSwxNSksdz1uZXcgeXUodCksTWU9Qy5LYygpO01lLk9iKCk7KVRlPWwoTWUuUGIoKSwxMCksVmEoVGUsdyk7JG4oei5jLHcpfUpOKHopLFN0LmMubGVuZ3RoPTAsbi5WZygpfWZ1bmN0aW9uIGhJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXI7aWYobi5VZygiU3BsaW5lIGVkZ2Ugcm91dGluZyIsMSksdC5iLmMubGVuZ3RoPT0wKXt0LmYuYT0wLG4uVmcoKTtyZXR1cm59VGU9emUoR2UoUSh0LChOdCgpLFY2KSkpKSxnPXplKEdlKFEodCx2dikpKSxmPXplKEdlKFEodCxxNikpKSxmZT1sKFEodCxyZGUpLDM1MCksY249ZmU9PShTRSgpLGFNKSxTdD16ZShHZShRKHQsT01lKSkpLGUuZD10LGUuai5jLmxlbmd0aD0wLGUuYS5jLmxlbmd0aD0wLE5sKGUuayksdz1sKGp0KHQuYiwwKSwzMCksQz1McSh3LmEsKElVKCksSUIpKSxWPWwoanQodC5iLHQuYi5jLmxlbmd0aC0xKSwzMCksTD1McShWLmEsSUIpLEo9bmV3IEcodC5iKSx0ZT1udWxsLHVyPTA7ZG97Zm9yKE1lPUouYTxKLmMuYy5sZW5ndGg/bChyZShKKSwzMCk6bnVsbCxVRG4oZSx0ZSxNZSksdkFuKGUpLGFuPXZ1bihnM24oVEgoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuaSwxNikpLG5ldyBTdGUpLG5ldyBfdGUpKSksam49MCwkZT11cixCPSF0ZXx8QyYmdGU9PXcsej0hTWV8fEwmJk1lPT1WLGFuPjA/KEU9MCx0ZSYmKEUrPWcpLEUrPShhbi0xKSpmLE1lJiYoRSs9ZyksY24mJk1lJiYoRT1iLk1hdGgubWF4KEUsTUNuKE1lLGYsVGUsU3QpKSksRTxUZSYmIUImJiF6JiYoam49KFRlLUUpLzIsRT1UZSksJGUrPUUpOiFCJiYheiYmKCRlKz1UZSksTWUmJk9rZShNZSwkZSksb3Q9bmV3IEcoZS5pKTtvdC5hPG90LmMuYy5sZW5ndGg7KVplPWwocmUob3QpLDEzMSksWmUuYS5jPXVyLFplLmEuYj0kZS11cixaZS5GPWpuLFplLnA9IXRlO3JhKGUuYSxlLmkpLHVyPSRlLE1lJiYodXIrPU1lLmMuYSksdGU9TWUsQj16fXdoaWxlKE1lKTtmb3IoYT1uZXcgRyhlLmopO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxOCksbz1yM24oZSxyKSxydChyLChmdCgpLHo2KSxvKSxCbj1xQ24oZSxyKSxydChyLGZ2LEJuKTt0LmYuYT11cixlLmQ9bnVsbCxuLlZnKCl9ZnVuY3Rpb24gZkluKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbjtmb3IoZS5iPXQsZS5hPWwoUSh0LChOdCgpLFBNZSkpLDE3KS5hLGUuYz1sKFEodCxGTWUpLDE3KS5hLGUuYz09MCYmKGUuYz1JaSksdGU9bmV3IFVhKHQuYiwwKTt0ZS5iPHRlLmQuZ2MoKTspe2ZvcihKPShtcih0ZS5iPHRlLmQuZ2MoKSksbCh0ZS5kLlhiKHRlLmM9dGUuYisrKSwzMCkpLGc9bmV3IGJ0LEM9LTEsJGU9LTEsTWU9bmV3IEcoSi5hKTtNZS5hPE1lLmMuYy5sZW5ndGg7KVRlPWwocmUoTWUpLDEwKSxYZygoT08oKSxuZXcgaHIoZHIoc3AoVGUpLmEuS2MoKSxuZXcgaikpKSk+PWUuYSYmKHI9R0FuKGUsVGUpLEM9Yi5NYXRoLm1heChDLHIuYiksJGU9Yi5NYXRoLm1heCgkZSxyLmQpLHZ0KGcsbmV3IGNhKFRlLHIpKSk7Zm9yKGNuPW5ldyBidCxFPTA7RTxDOysrRSlwdyhjbiwwLChtcih0ZS5iPjApLHRlLmEuWGIodGUuYz0tLXRlLmIpLGFuPW5ldyB5dShlLmIpLGJ5KHRlLGFuKSxtcih0ZS5iPHRlLmQuZ2MoKSksdGUuZC5YYih0ZS5jPXRlLmIrKyksYW4pKTtmb3IoZj1uZXcgRyhnKTtmLmE8Zi5jLmMubGVuZ3RoOylpZihhPWwocmUoZiksNDIpLHo9bChhLmIsNTgwKS5hLCEheilmb3IoQj1uZXcgRyh6KTtCLmE8Qi5jLmMubGVuZ3RoOylMPWwocmUoQiksMTApLHV4ZShlLEwsQ0ssY24pO2ZvcihuPW5ldyBidCx3PTA7dzwkZTsrK3cpdnQobiwoQm49bmV3IHl1KGUuYiksYnkodGUsQm4pLEJuKSk7Zm9yKG89bmV3IEcoZyk7by5hPG8uYy5jLmxlbmd0aDspaWYoYT1sKHJlKG8pLDQyKSxTdD1sKGEuYiw1ODApLmMsISFTdClmb3Iob3Q9bmV3IEcoU3QpO290LmE8b3QuYy5jLmxlbmd0aDspWmU9bChyZShvdCksMTApLHV4ZShlLFplLFNLLG4pfWZvcihmZT1uZXcgVWEodC5iLDApO2ZlLmI8ZmUuZC5nYygpOylWPShtcihmZS5iPGZlLmQuZ2MoKSksbChmZS5kLlhiKGZlLmM9ZmUuYisrKSwzMCkpLFYuYS5jLmxlbmd0aD09MCYmcGgoZmUpfWZ1bmN0aW9uIGF3dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7aWYoSj1lLmkhPTAsTWU9ITEsZmU9bnVsbCxoaChlLmUpKXtpZihDPXQuZ2MoKSxDPjApe2ZvcihCPUM8MTAwP251bGw6bmV3IG5iKEMpLEU9bmV3IFQ3ZSh0KSxWPUUuZyxmZT1XZShWcixkaSwyOCxDLDE1LDEpLHI9MCwkZT1uZXcgTHcoQyksYT0wO2E8ZS5pOysrYSl7Zz1lLmdbYV0sej1nO2U6Zm9yKFRlPTA7VGU8MjsrK1RlKXtmb3Iodz1DOy0tdz49MDspaWYoeiE9bnVsbD9QaSh6LFZbd10pOnFlKHopPT09cWUoVlt3XSkpe2ZlLmxlbmd0aDw9ciYmKHRlPWZlLGZlPVdlKFZyLGRpLDI4LDIqZmUubGVuZ3RoLDE1LDEpLHB1KHRlLDAsZmUsMCxyKSksZmVbcisrXT1hLHFyKCRlLFZbd10pO2JyZWFrIGV9aWYoej16LHFlKHopPT09cWUoZykpYnJlYWt9fWlmKEU9JGUsVj0kZS5nLEM9cixyPmZlLmxlbmd0aCYmKHRlPWZlLGZlPVdlKFZyLGRpLDI4LHIsMTUsMSkscHUodGUsMCxmZSwwLHIpKSxyPjApe2ZvcihNZT0hMCxvPTA7bzxyOysrbyl6PVZbb10sQj11aXQoZSxsKHosNzYpLEIpO2ZvcihmPXI7LS1mPj0wOyl2eChlLGZlW2ZdKTtpZihyIT1DKXtmb3IoYT1DOy0tYT49cjspdngoRSxhKTt0ZT1mZSxmZT1XZShWcixkaSwyOCxyLDE1LDEpLHB1KHRlLDAsZmUsMCxyKX10PUV9fX1lbHNlIGZvcih0PV83bihlLHQpLGE9ZS5pOy0tYT49MDspdC5IYyhlLmdbYV0pJiYodngoZSxhKSxNZT0hMCk7aWYoTWUpe2lmKGZlIT1udWxsKXtmb3Iobj10LmdjKCksTD1uPT0xP3JBKGUsNCx0LktjKCkuUGIoKSxudWxsLGZlWzBdLEopOnJBKGUsNix0LGZlLGZlWzBdLEopLEI9bjwxMDA/bnVsbDpuZXcgbmIobiksYT10LktjKCk7YS5PYigpOyl6PWEuUGIoKSxCPWQ0ZShlLGwoeiw3NiksQik7Qj8oQi5uaihMKSxCLm9qKCkpOk5pKGUuZSxMKX1lbHNle2ZvcihCPU9mbih0LmdjKCkpLGE9dC5LYygpO2EuT2IoKTspej1hLlBiKCksQj1kNGUoZSxsKHosNzYpLEIpO0ImJkIub2ooKX1yZXR1cm4hMH1lbHNlIHJldHVybiExfWZ1bmN0aW9uIGRJbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKG49bmV3IHhkdCh0KSxuLmF8fHFfbih0KSxFPWpTbih0KSx3PW5ldyBDdyx0ZT1uZXcgRWJ0LEo9bmV3IEcodC5hKTtKLmE8Si5jLmMubGVuZ3RoOylmb3IoVj1sKHJlKEopLDEwKSxhPW5ldyBocihkcihxcyhWKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDE4KSwoci5jLmkuaz09KFpuKCksVXMpfHxyLmQuaS5rPT1VcykmJihDPXREbihlLHIsRSx0ZSkseG4odyx0dWUoQy5kKSxDLmEpKTtmb3IoZj1uZXcgYnQsTWU9bChRKG4uYywoZnQoKSxwcCkpLDIxKS5LYygpO01lLk9iKCk7KXtzd2l0Y2goVGU9bChNZS5QYigpLDY0KSx6PXRlLmNbVGUuZ10sQj10ZS5iW1RlLmddLGc9dGUuYVtUZS5nXSxvPW51bGwsZmU9bnVsbCxUZS5nKXtjYXNlIDQ6bz1uZXcgZWYoZS5kLmEseixFLmIuYS1lLmQuYSxCLXopLGZlPW5ldyBlZihlLmQuYSx6LGcsQi16KSxndyhFLG5ldyBsdChvLmMrby5iLG8uZCkpLGd3KEUsbmV3IGx0KG8uYytvLmIsby5kK28uYSkpO2JyZWFrO2Nhc2UgMjpvPW5ldyBlZihFLmEuYSx6LGUuYy5hLUUuYS5hLEIteiksZmU9bmV3IGVmKGUuYy5hLWcseixnLEIteiksZ3coRSxuZXcgbHQoby5jLG8uZCkpLGd3KEUsbmV3IGx0KG8uYyxvLmQrby5hKSk7YnJlYWs7Y2FzZSAxOm89bmV3IGVmKHosZS5kLmIsQi16LEUuYi5iLWUuZC5iKSxmZT1uZXcgZWYoeixlLmQuYixCLXosZyksZ3coRSxuZXcgbHQoby5jLG8uZCtvLmEpKSxndyhFLG5ldyBsdChvLmMrby5iLG8uZCtvLmEpKTticmVhaztjYXNlIDM6bz1uZXcgZWYoeixFLmEuYixCLXosZS5jLmItRS5hLmIpLGZlPW5ldyBlZih6LGUuYy5iLWcsQi16LGcpLGd3KEUsbmV3IGx0KG8uYyxvLmQpKSxndyhFLG5ldyBsdChvLmMrby5iLG8uZCkpfW8mJihMPW5ldyBIUWUsTC5kPVRlLEwuYj1vLEwuYz1mZSxMLmE9TEgobCgkaSh3LHR1ZShUZSkpLDIxKSksJG4oZi5jLEwpKX1yZXR1cm4gcmEobi5iLGYpLG4uZD1WeW4ocE1uKEUpKSxufWZ1bmN0aW9uIG93dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEo7aWYobi5wW3QucF09PW51bGwpe2c9ITAsbi5wW3QucF09MCxmPXQsSj1uLm89PShEMSgpLHd2KT9pYTpncztkbyBhPWUuYi5lW2YucF0sbz1mLmMuYS5jLmxlbmd0aCxuLm89PXd2JiZhPjB8fG4ubz09WTEmJmE8by0xPyh3PW51bGwsRT1udWxsLG4ubz09WTE/dz1sKGp0KGYuYy5hLGErMSksMTApOnc9bChqdChmLmMuYSxhLTEpLDEwKSxFPW4uZ1t3LnBdLG93dChlLEUsbiksSj1lLmUud2coSix0LGYpLG4ualt0LnBdPT10JiYobi5qW3QucF09bi5qW0UucF0pLG4ualt0LnBdPT1uLmpbRS5wXT8oVj1qNShlLmQsZix3KSxuLm89PVkxPyhyPXplKG4ucFt0LnBdKSxMPXplKG4ucFtFLnBdKSt6ZShuLmRbdy5wXSktdy5kLmQtVi1mLmQuYS1mLm8uYi16ZShuLmRbZi5wXSksZz8oZz0hMSxuLnBbdC5wXT1iLk1hdGgubWluKEwsSikpOm4ucFt0LnBdPWIuTWF0aC5taW4ocixiLk1hdGgubWluKEwsSikpKToocj16ZShuLnBbdC5wXSksTD16ZShuLnBbRS5wXSkremUobi5kW3cucF0pK3cuby5iK3cuZC5hK1YrZi5kLmQtemUobi5kW2YucF0pLGc/KGc9ITEsbi5wW3QucF09Yi5NYXRoLm1heChMLEopKTpuLnBbdC5wXT1iLk1hdGgubWF4KHIsYi5NYXRoLm1heChMLEopKSkpOihWPXplKEdlKFEoZS5hLChOdCgpLG0zKSkpKSx6PWRmdChlLG4ualt0LnBdKSxDPWRmdChlLG4ualtFLnBdKSxuLm89PVkxPyhCPXplKG4ucFt0LnBdKSt6ZShuLmRbZi5wXSkrZi5vLmIrZi5kLmErVi0oemUobi5wW0UucF0pK3plKG4uZFt3LnBdKS13LmQuZCksJG90KHosQyxCKSk6KEI9emUobi5wW3QucF0pK3plKG4uZFtmLnBdKS1mLmQuZC16ZShuLnBbRS5wXSktemUobi5kW3cucF0pLXcuby5iLXcuZC5hLVYsJG90KHosQyxCKSkpKTpKPWUuZS53ZyhKLHQsZiksZj1uLmFbZi5wXTt3aGlsZShmIT10KTtVY24oZS5lLHQpfX1mdW5jdGlvbiBnSW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuO2lmKG49emUoR2UoUShlLmEuaiwoTnQoKSxfTWUpKSkpLG48LTF8fCFlLmEuaXx8VTgobChRKGUuYS5vLE1zKSwxMDEpKXx8T2MoZS5hLm8sKEN0KCksYXIpKS5nYygpPDImJk9jKGUuYS5vLGVyKS5nYygpPDIpcmV0dXJuITA7aWYoZS5hLmMua2coKSlyZXR1cm4hMTtmb3IoWmU9MCwkZT0wLE1lPW5ldyBidCx3PWUuYS5lLEU9MCxDPXcubGVuZ3RoO0U8QzsrK0Upe2ZvcihnPXdbRV0sQj1nLHo9MCxKPUIubGVuZ3RoO3o8SjsrK3ope2lmKEw9Qlt6XSxMLms9PShabigpLEF1KSl7JG4oTWUuYyxMKTtjb250aW51ZX1mb3Iocj1lLmJbTC5jLnBdW0wucF0sTC5rPT1Vcz8oci5iPTEsbChRKEwsKGZ0KCksemkpKSwxMikuaj09KEN0KCksYXIpJiYoJGUrPXIuYSkpOihhbj1PYyhMLChDdCgpLGVyKSksYW4uZGMoKXx8IVpzZShhbixuZXcgWDkpP3IuYz0xOihhPU9jKEwsYXIpLChhLmRjKCl8fCFac2UoYSxuZXcgVWVlKSkmJihaZSs9ci5hKSkpLGY9bmV3IGhyKGRyKHFzKEwpLmEuS2MoKSxuZXcgaikpO2pyKGYpOylvPWwoeHIoZiksMTgpLFplKz1yLmMsJGUrPXIuYixjbj1vLmQuaSxQNmUoZSxyLGNuKTtmb3IoZmU9TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbT2MoTCwoQ3QoKSxRbikpLE9jKEwsRHIpXSkpLFN0PW5ldyBocihuZXcgQXllKGZlLmEubGVuZ3RoLGZlLmEpKTtqcihTdCk7KW90PWwoeHIoU3QpLDEyKSxUZT1sKFEob3QsKGZ0KCksamwpKSwxMCksVGUmJihaZSs9ci5jLCRlKz1yLmIsUDZlKGUscixUZSkpfWZvcihWPW5ldyBHKE1lKTtWLmE8Vi5jLmMubGVuZ3RoOylmb3IoTD1sKHJlKFYpLDEwKSxyPWUuYltMLmMucF1bTC5wXSxmPW5ldyBocihkcihxcyhMKS5hLktjKCksbmV3IGopKTtqcihmKTspbz1sKHhyKGYpLDE4KSxaZSs9ci5jLCRlKz1yLmIsY249by5kLmksUDZlKGUscixjbik7TWUuYy5sZW5ndGg9MH1yZXR1cm4gdD1aZSskZSx0ZT10PT0wP2dzOihaZS0kZSkvdCx0ZT49bn1mdW5jdGlvbiBwSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyO2ZvcihNZT10LFRlPW5ldyBDdywkZT1uZXcgQ3csQz1BdyhNZSxmU2UpLHI9bmV3IE1hdChlLG4sVGUsJGUpLFA5bihyLmEsci5iLHIuYyxyLmQsQyksdz0oU3Q9VGUuaSxTdHx8KFRlLmk9bmV3IHE1KFRlLFRlLmMpKSksYW49dy5LYygpO2FuLk9iKCk7KWZvcihjbj1sKGFuLlBiKCksMTY2KSxhPWwoJGkoVGUsY24pLDIxKSxKPWEuS2MoKTtKLk9iKCk7KWlmKFY9Si5QYigpLFplPWwoWDUoZS5kLFYpLDE2NiksWmUpZz0oIWNuLmUmJihjbi5lPW5ldyBMbihjcyxjbiwxMCw5KSksY24uZSkscXIoZyxaZSk7ZWxzZSB0aHJvdyBmPVlnKE1lLFBkKSxCPXk0dCtWK3g0dCtmLHo9QitrVCx1ZShuZXcgZGQoeikpO2ZvcihFPShvdD0kZS5pLG90fHwoJGUuaT1uZXcgcTUoJGUsJGUuYykpKSxqbj1FLktjKCk7am4uT2IoKTspZm9yKEJuPWwoam4uUGIoKSwxNjYpLG89bCgkaSgkZSxCbiksMjEpLGZlPW8uS2MoKTtmZS5PYigpOylpZih0ZT1mZS5QYigpLFplPWwoWDUoZS5kLHRlKSwxNjYpLFplKUw9KCFCbi5nJiYoQm4uZz1uZXcgTG4oY3MsQm4sOSwxMCkpLEJuLmcpLHFyKEwsWmUpO2Vsc2UgdGhyb3cgZj1ZZyhNZSxQZCksQj15NHQrdGUreDR0K2Ysej1CK2tULHVlKG5ldyBkZCh6KSk7IW4uYiYmKG4uYj1uZXcgTG4oX3Isbiw0LDcpKSxuLmIuaSE9MCYmKCFuLmMmJihuLmM9bmV3IExuKF9yLG4sNSw4KSksbi5jLmkhPTApJiYoIW4uYiYmKG4uYj1uZXcgTG4oX3Isbiw0LDcpKSxuLmIuaTw9MSYmKCFuLmMmJihuLmM9bmV3IExuKF9yLG4sNSw4KSksbi5jLmk8PTEpKSYmKCFuLmEmJihuLmE9bmV3IG50KGNzLG4sNiw2KSksbi5hKS5pPT0xJiYodXI9bChPZSgoIW4uYSYmKG4uYT1uZXcgbnQoY3Msbiw2LDYpKSxuLmEpLDApLDE2NiksIWF1ZSh1cikmJiFvdWUodXIpJiYod1YodXIsbChPZSgoIW4uYiYmKG4uYj1uZXcgTG4oX3Isbiw0LDcpKSxuLmIpLDApLDg0KSkseVYodXIsbChPZSgoIW4uYyYmKG4uYz1uZXcgTG4oX3Isbiw1LDgpKSxuLmMpLDApLDg0KSkpKX1mdW5jdGlvbiBiSW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO2ZvcihNZT1lLmEsJGU9MCxaZT1NZS5sZW5ndGg7JGU8WmU7KyskZSl7Zm9yKFRlPU1lWyRlXSxFPUlpLEM9SWksVj1uZXcgRyhUZS5lKTtWLmE8Vi5jLmMubGVuZ3RoOylCPWwocmUoViksMTApLGY9Qi5jP2djKEIuYy5hLEIsMCk6LTEsZj4wPyhMPWwoanQoQi5jLmEsZi0xKSwxMCksY249ajUoZS5iLEIsTCksdGU9Qi5uLmItQi5kLmQtKEwubi5iK0wuby5iK0wuZC5hK2NuKSk6dGU9Qi5uLmItQi5kLmQsRT1iLk1hdGgubWluKHRlLEUpLGY8Qi5jLmEuYy5sZW5ndGgtMT8oTD1sKGp0KEIuYy5hLGYrMSksMTApLGNuPWo1KGUuYixCLEwpLGZlPUwubi5iLUwuZC5kLShCLm4uYitCLm8uYitCLmQuYStjbikpOmZlPTIqQi5uLmIsQz1iLk1hdGgubWluKGZlLEMpO2Zvcih3PUlpLG89ITEsYT1sKGp0KFRlLmUsMCksMTApLEJuPW5ldyBHKGEuaik7Qm4uYTxCbi5jLmMubGVuZ3RoOylmb3IoYW49bChyZShCbiksMTIpLEo9YS5uLmIrYW4ubi5iK2FuLmEuYixyPW5ldyBHKGFuLmUpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxOCksb3Q9bi5jLHQ9b3QuaS5uLmIrb3Qubi5iK290LmEuYi1KLGIuTWF0aC5hYnModCk8Yi5NYXRoLmFicyh3KSYmYi5NYXRoLmFicyh0KTwodDwwP0U6QykmJih3PXQsbz0hMCk7Zm9yKGc9bChqdChUZS5lLFRlLmUuYy5sZW5ndGgtMSksMTApLFN0PW5ldyBHKGcuaik7U3QuYTxTdC5jLmMubGVuZ3RoOylmb3Iob3Q9bChyZShTdCksMTIpLEo9Zy5uLmIrb3Qubi5iK290LmEuYixyPW5ldyBHKG90LmcpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxOCksYW49bi5kLHQ9YW4uaS5uLmIrYW4ubi5iK2FuLmEuYi1KLGIuTWF0aC5hYnModCk8Yi5NYXRoLmFicyh3KSYmYi5NYXRoLmFicyh0KTwodDwwP0U6QykmJih3PXQsbz0hMCk7aWYobyYmdyE9MClmb3Ioej1uZXcgRyhUZS5lKTt6LmE8ei5jLmMubGVuZ3RoOylCPWwocmUoeiksMTApLEIubi5iKz13fX1mdW5jdGlvbiBtSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2lmKHI9bmV3IGJ0LGE9SWksbz1JaSxmPUlpLG4pZm9yKGE9ZS5mLmEsSj1uZXcgRyh0LmopO0ouYTxKLmMuYy5sZW5ndGg7KWZvcihWPWwocmUoSiksMTIpLHc9bmV3IEcoVi5nKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTgpLGcuYS5iIT0wJiYoQz1sKEJrKGcuYSksOCksQy5hPGEmJihvPWEtQy5hLGY9SWksci5jLmxlbmd0aD0wLGE9Qy5hKSxDLmE8PWEmJigkbihyLmMsZyksZy5hLmI+MSYmKGY9Yi5NYXRoLm1pbihmLGIuTWF0aC5hYnMobChmZihnLmEsMSksOCkuYi1DLmIpKSkpKTtlbHNlIGZvcihKPW5ldyBHKHQuaik7Si5hPEouYy5jLmxlbmd0aDspZm9yKFY9bChyZShKKSwxMiksdz1uZXcgRyhWLmUpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxOCksZy5hLmIhPTAmJihCPWwobzAoZy5hKSw4KSxCLmE+YSYmKG89Qi5hLWEsZj1JaSxyLmMubGVuZ3RoPTAsYT1CLmEpLEIuYT49YSYmKCRuKHIuYyxnKSxnLmEuYj4xJiYoZj1iLk1hdGgubWluKGYsYi5NYXRoLmFicyhsKGZmKGcuYSxnLmEuYi0yKSw4KS5iLUIuYikpKSkpO2lmKHIuYy5sZW5ndGghPTAmJm8+dC5vLmEvMiYmZj50Lm8uYi8yKXtmb3Ioej1uZXcgZ3UsTWMoeix0KSxsYSh6LChDdCgpLFFuKSksei5uLmE9dC5vLmEvMixmZT1uZXcgZ3UsTWMoZmUsdCksbGEoZmUsRHIpLGZlLm4uYT10Lm8uYS8yLGZlLm4uYj10Lm8uYix3PW5ldyBHKHIpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxOCksbj8oRT1sKGthZShnLmEpLDgpLHRlPWcuYS5iPT0wP0kxKGcuZCk6bChCayhnLmEpLDgpLHRlLmI+PUUuYj9wbyhnLGZlKTpwbyhnLHopKTooRT1sKG9kbihnLmEpLDgpLHRlPWcuYS5iPT0wP0kxKGcuYyk6bChvMChnLmEpLDgpLHRlLmI+PUUuYj9GYShnLGZlKTpGYShnLHopKSxMPWwoUShnLChOdCgpLGNjKSksNzUpLEwmJk55KEwsRSwhMCk7dC5uLmE9YS10Lm8uYS8yfX1mdW5jdGlvbiB2SW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihnPVJyKGUuYiwwKTtnLmIhPWcuZC5jOylpZihmPWwoQnIoZyksNDApLCF2bihmLmMsREcpKWZvcihFPUhFbihmLGUpLHQ9PShKcygpLHVjKXx8dD09dmM/VnMoRSxuZXcgZW5lKTpWcyhFLG5ldyB0bmUpLHc9RS5jLmxlbmd0aCxyPTA7cjx3O3IrKylDPShTbihyLEUuYy5sZW5ndGgpLGwoRS5jW3JdLDY1KSkuYyx2bihDLmMsIm4xMSIpLCEoUnQoQnQoUShmLChRaSgpLHRJZSkpKSkmJiFDMHQoKFNuKHIsRS5jLmxlbmd0aCksbChFLmNbcl0sNjUpKSxlKSkmJihhPXc9PTE/LjU6KHIrMSkvKHcrMSksdD09dWM/KG89emUoR2UoUShmLGMxKSkpLEI9Zi5lLmIrZi5mLmIqYSxPNSgoU24ocixFLmMubGVuZ3RoKSxsKEUuY1tyXSw2NSkpLmEsbmV3IGx0KGIuTWF0aC5taW4obyxmLmUuYS1uKSxCKSksTzUoKFNuKHIsRS5jLmxlbmd0aCksbChFLmNbcl0sNjUpKS5hLG5ldyBsdChmLmUuYSxCKSkpOnQ9PXZjPyhvPXplKEdlKFEoZixrMCkpKStuLEI9Zi5lLmIrZi5mLmIqYSxPNSgoU24ocixFLmMubGVuZ3RoKSxsKEUuY1tyXSw2NSkpLmEsbmV3IGx0KG8sQikpLE81KChTbihyLEUuYy5sZW5ndGgpLGwoRS5jW3JdLDY1KSkuYSxuZXcgbHQoZi5lLmErZi5mLmEsQikpKTp0PT13Zj8obz16ZShHZShRKGYsYzEpKSksTD1mLmUuYStmLmYuYSphLE81KChTbihyLEUuYy5sZW5ndGgpLGwoRS5jW3JdLDY1KSkuYSxuZXcgbHQoTCxiLk1hdGgubWluKGYuZS5iLW4sbykpKSxPNSgoU24ocixFLmMubGVuZ3RoKSxsKEUuY1tyXSw2NSkpLmEsbmV3IGx0KEwsZi5lLmIpKSk6KG89emUoR2UoUShmLGswKSkpK24sTD1mLmUuYStmLmYuYSphLE81KChTbihyLEUuYy5sZW5ndGgpLGwoRS5jW3JdLDY1KSkuYSxuZXcgbHQoTCxvKSksTzUoKFNuKHIsRS5jLmxlbmd0aCksbChFLmNbcl0sNjUpKS5hLG5ldyBsdChMLGYuZS5iK2YuZi5iKSkpKX1mdW5jdGlvbiB2UChlLHQsbixyLGEsbyxmLGcsdyl7dmFyIEUsQyxMLEIseixWLEo7c3dpdGNoKHo9bixDPW5ldyBvcCh3KSx4KEMsKFpuKCksVXMpKSxydChDLChmdCgpLCRMZSksZikscnQoQywoTnQoKSxNcyksKFJhKCksTXUpKSxKPXplKEdlKGUub2YobTQpKSkscnQoQyxtNCxKKSxMPW5ldyBndSxNYyhMLEMpLHQhPVoxJiZ0IT1XYnx8KHI+PTA/ej1neChnKTp6PUJOKGd4KGcpKSxlLnFmKFZULHopKSxFPW5ldyBxYSxCPSExLGUucGYocDMpPyhGeWUoRSxsKGUub2YocDMpLDgpKSxCPSEwKTpBaG4oRSxmLmEvMixmLmIvMiksei5nKXtjYXNlIDQ6cnQoQyxRdSwoaGYoKSwkYikpLHJ0KEMsc1csKFZtKCksUDYpKSxDLm8uYj1mLmIsSjwwJiYoQy5vLmE9LUopLGxhKEwsKEN0KCksYXIpKSxCfHwoRS5hPWYuYSksRS5hLT1mLmE7YnJlYWs7Y2FzZSAyOnJ0KEMsUXUsKGhmKCksZDQpKSxydChDLHNXLChWbSgpLEZUKSksQy5vLmI9Zi5iLEo8MCYmKEMuby5hPS1KKSxsYShMLChDdCgpLGVyKSksQnx8KEUuYT0wKTticmVhaztjYXNlIDE6cnQoQyxodiwoZXAoKSxGNikpLEMuby5hPWYuYSxKPDAmJihDLm8uYj0tSiksbGEoTCwoQ3QoKSxEcikpLEJ8fChFLmI9Zi5iKSxFLmItPWYuYjticmVhaztjYXNlIDM6cnQoQyxodiwoZXAoKSxVeCkpLEMuby5hPWYuYSxKPDAmJihDLm8uYj0tSiksbGEoTCwoQ3QoKSxRbikpLEJ8fChFLmI9MCl9aWYoRnllKEwubixFKSxydChDLHAzLEUpLHQ9PVR2fHx0PT1UZ3x8dD09TXUpe2lmKFY9MCx0PT1UdiYmZS5wZihrMikpc3dpdGNoKHouZyl7Y2FzZSAxOmNhc2UgMjpWPWwoZS5vZihrMiksMTcpLmE7YnJlYWs7Y2FzZSAzOmNhc2UgNDpWPS1sKGUub2YoazIpLDE3KS5hfWVsc2Ugc3dpdGNoKHouZyl7Y2FzZSA0OmNhc2UgMjpWPW8uYix0PT1UZyYmKFYvPWEuYik7YnJlYWs7Y2FzZSAxOmNhc2UgMzpWPW8uYSx0PT1UZyYmKFYvPWEuYSl9cnQoQyxsMyxWKX1yZXR1cm4gcnQoQyxXYyx6KSxDfWZ1bmN0aW9uIHdJbigpe2MzZSgpO2Z1bmN0aW9uIGUocil7dmFyIGE9dGhpczt0aGlzLmRpc3BhdGNoPWZ1bmN0aW9uKG8pe3ZhciBmPW8uZGF0YTtzd2l0Y2goZi5jbWQpe2Nhc2UiYWxnb3JpdGhtcyI6dmFyIGc9TDhlKChDbigpLG5ldyAkYShuZXcgZ2koUWIuYikpKSk7ci5wb3N0TWVzc2FnZSh7aWQ6Zi5pZCxkYXRhOmd9KTticmVhaztjYXNlImNhdGVnb3JpZXMiOnZhciB3PUw4ZSgoQ24oKSxuZXcgJGEobmV3IGdpKFFiLmMpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmYuaWQsZGF0YTp3fSk7YnJlYWs7Y2FzZSJvcHRpb25zIjp2YXIgRT1MOGUoKENuKCksbmV3ICRhKG5ldyBnaShRYi5kKSkpKTtyLnBvc3RNZXNzYWdlKHtpZDpmLmlkLGRhdGE6RX0pO2JyZWFrO2Nhc2UicmVnaXN0ZXIiOmtNbihmLmFsZ29yaXRobXMpLHIucG9zdE1lc3NhZ2Uoe2lkOmYuaWR9KTticmVhaztjYXNlImxheW91dCI6UUFuKGYuZ3JhcGgsZi5sYXlvdXRPcHRpb25zfHx7fSxmLm9wdGlvbnN8fHt9KSxyLnBvc3RNZXNzYWdlKHtpZDpmLmlkLGRhdGE6Zi5ncmFwaH0pO2JyZWFrfX0sdGhpcy5zYXZlRGlzcGF0Y2g9ZnVuY3Rpb24obyl7dHJ5e2EuZGlzcGF0Y2gobyl9Y2F0Y2goZil7ci5wb3N0TWVzc2FnZSh7aWQ6by5kYXRhLmlkLGVycm9yOmZ9KX19fWZ1bmN0aW9uIHQocil7dmFyIGE9dGhpczt0aGlzLmRpc3BhdGNoZXI9bmV3IGUoe3Bvc3RNZXNzYWdlOmZ1bmN0aW9uKG8pe2Eub25tZXNzYWdlKHtkYXRhOm99KX19KSx0aGlzLnBvc3RNZXNzYWdlPWZ1bmN0aW9uKG8pe3NldFRpbWVvdXQoZnVuY3Rpb24oKXthLmRpc3BhdGNoZXIuc2F2ZURpc3BhdGNoKHtkYXRhOm99KX0sMCl9fWlmKHR5cGVvZiBkb2N1bWVudD09PWdoZSYmdHlwZW9mIHNlbGYhPT1naGUpe3ZhciBuPW5ldyBlKHNlbGYpO3NlbGYub25tZXNzYWdlPW4uc2F2ZURpc3BhdGNofWVsc2UgdHlwZW9mIGQhPT1naGUmJmQuZXhwb3J0cyYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxkLmV4cG9ydHM9e2RlZmF1bHQ6dCxXb3JrZXI6dH0pfWZ1bmN0aW9uIGN3dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEM9bmV3IG9wKG4pLHBjKEMsdCkscnQoQywoZnQoKSx6aSksdCksQy5vLmE9dC5nLEMuby5iPXQuZixDLm4uYT10LmksQy5uLmI9dC5qLHZ0KG4uYSxDKSxraShlLmEsdCxDKSwoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmkhPTB8fFJ0KEJ0KGF0KHQsKE50KCksYjQpKSkpKSYmcnQoQyxGTGUsKEhuKCksITApKSxFPWwoUShuLEx1KSwyMSksTD1sKFEoQywoTnQoKSxNcykpLDEwMSksTD09KFJhKCksV2IpP3J0KEMsTXMsWjEpOkwhPVoxJiZFLkZjKChIbygpLCRUKSksQj0wLHI9bChRKG4sUmgpLDg4KSx3PW5ldyBvcigoIXQuYyYmKHQuYz1uZXcgbnQoSGwsdCw5LDkpKSx0LmMpKTt3LmUhPXcuaS5nYygpOylnPWwoZ3IodyksMTIzKSxhPWRzKHQpLChxZShhdChhLHlnKSkhPT1xZSgoRWQoKSxFMikpfHxxZShhdChhLGR2KSk9PT1xZSgobDIoKSxCVCkpfHxxZShhdChhLGR2KSk9PT1xZSgobDIoKSxQVCkpfHxSdChCdChhdChhLGYzKSkpfHxxZShhdChhLGc0KSkhPT1xZSgoS20oKSxjNCkpfHxxZShhdChhLHpiKSk9PT1xZSgoTmYoKSx2MykpfHxxZShhdChhLHpiKSk9PT1xZSgoTmYoKSx4NCkpfHxxZShhdChhLHB2KSk9PT1xZSgocDIoKSxXVCkpfHxxZShhdChhLHB2KSk9PT1xZSgocDIoKSxZVCkpKSYmIVJ0KEJ0KGF0KHQsZlcpKSkmJkhpKGcsS2kscHQoQisrKSksUnQoQnQoYXQoZyxtdikpKXx8TERuKGUsZyxDLEUscixMKTtmb3IoZj1uZXcgb3IoKCF0Lm4mJih0Lm49bmV3IG50KGVjLHQsMSw3KSksdC5uKSk7Zi5lIT1mLmkuZ2MoKTspbz1sKGdyKGYpLDEzNSksIVJ0KEJ0KGF0KG8sbXYpKSkmJm8uYSYmdnQoQy5iLE9jZShvKSk7cmV0dXJuIFJ0KEJ0KFEoQyxRTCkpKSYmRS5GYygoSG8oKSxlVykpLFJ0KEJ0KFEoQyxiVykpKSYmKEUuRmMoKEhvKCksdFcpKSxFLkZjKFVMKSxydChDLE1zLFoxKSksQ31mdW5jdGlvbiBMbGUoZSx0LG4scixhLG8sZil7dmFyIGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzO2ZvcihKPTAsQm49MCxFPW5ldyBHKGUuYik7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDE2Myksdy5jJiZGdnQody5jKSxKPWIuTWF0aC5tYXgoSix3bCh3KSksQm4rPXdsKHcpKmdoKHcpO2Zvcih0ZT1Cbi9lLmIuYy5sZW5ndGgsYW49eThuKGUuYix0ZSksQm4rPWUuYi5jLmxlbmd0aCphbixKPWIuTWF0aC5tYXgoSixiLk1hdGguc3FydChCbipmKSkrbi5iLG9pPW4uYix3cz1uLmQsej0wLEw9bi5iK24uYyxjbj1uZXcgb3MsdWkoY24scHQoMCkpLG90PW5ldyBvcyxDPW5ldyBVYShlLmIsMCksVj1udWxsLGc9bmV3IGJ0O0MuYjxDLmQuZ2MoKTspdz0obXIoQy5iPEMuZC5nYygpKSxsKEMuZC5YYihDLmM9Qy5iKyspLDE2MykpLHVyPXdsKHcpLEI9Z2godyksb2krdXI+SiYmKG8mJihrbyhvdCx6KSxrbyhjbixwdChDLmItMSkpLHZ0KGUuZCxWKSxnLmMubGVuZ3RoPTApLG9pPW4uYix3cys9eit0LHo9MCxMPWIuTWF0aC5tYXgoTCxuLmIrbi5jK3VyKSksJG4oZy5jLHcpLGRkdCh3LG9pLHdzKSxMPWIuTWF0aC5tYXgoTCxvaSt1cituLmMpLHo9Yi5NYXRoLm1heCh6LEIpLG9pKz11cit0LFY9dztpZihyYShlLmEsZyksdnQoZS5kLGwoanQoZyxnLmMubGVuZ3RoLTEpLDE2MykpLEw9Yi5NYXRoLm1heChMLHIpLGpuPXdzK3orbi5hLGpuPGEmJih6Kz1hLWpuLGpuPWEpLG8pZm9yKG9pPW4uYixDPW5ldyBVYShlLmIsMCksa28oY24scHQoZS5iLmMubGVuZ3RoKSksU3Q9UnIoY24sMCksVGU9bChCcihTdCksMTcpLmEsa28ob3QseiksWmU9UnIob3QsMCksJGU9MDtDLmI8Qy5kLmdjKCk7KUMuYj09VGUmJihvaT1uLmIsJGU9emUoR2UoQnIoWmUpKSksVGU9bChCcihTdCksMTcpLmEpLHc9KG1yKEMuYjxDLmQuZ2MoKSksbChDLmQuWGIoQy5jPUMuYisrKSwxNjMpKSxVMXQodywkZSksQy5iPT1UZSYmKGZlPUwtb2ktbi5jLE1lPXdsKHcpLEcxdCh3LGZlKSx2MXQodywoZmUtTWUpLzIsMCkpLG9pKz13bCh3KSt0O3JldHVybiBuZXcgbHQoTCxqbil9ZnVuY3Rpb24geUluKGUpe2UuTnx8KGUuTj0hMCxlLmI9cWMoZSwwKSxTcyhlLmIsMCksU3MoZS5iLDEpLFNzKGUuYiwyKSxlLmJiPXFjKGUsMSksU3MoZS5iYiwwKSxTcyhlLmJiLDEpLGUuZmI9cWMoZSwyKSxTcyhlLmZiLDMpLFNzKGUuZmIsNCksaXMoZS5mYiw1KSxlLnFiPXFjKGUsMyksU3MoZS5xYiwwKSxpcyhlLnFiLDEpLGlzKGUucWIsMiksU3MoZS5xYiwzKSxTcyhlLnFiLDQpLGlzKGUucWIsNSksU3MoZS5xYiw2KSxlLmE9VGkoZSw0KSxlLmM9VGkoZSw1KSxlLmQ9VGkoZSw2KSxlLmU9VGkoZSw3KSxlLmY9VGkoZSw4KSxlLmc9VGkoZSw5KSxlLmk9VGkoZSwxMCksZS5qPVRpKGUsMTEpLGUuaz1UaShlLDEyKSxlLm49VGkoZSwxMyksZS5vPVRpKGUsMTQpLGUucD1UaShlLDE1KSxlLnE9VGkoZSwxNiksZS5zPVRpKGUsMTcpLGUucj1UaShlLDE4KSxlLnQ9VGkoZSwxOSksZS51PVRpKGUsMjApLGUudj1UaShlLDIxKSxlLnc9VGkoZSwyMiksZS5CPVRpKGUsMjMpLGUuQT1UaShlLDI0KSxlLkM9VGkoZSwyNSksZS5EPVRpKGUsMjYpLGUuRj1UaShlLDI3KSxlLkc9VGkoZSwyOCksZS5IPVRpKGUsMjkpLGUuSj1UaShlLDMwKSxlLkk9VGkoZSwzMSksZS5LPVRpKGUsMzIpLGUuTT1UaShlLDMzKSxlLkw9VGkoZSwzNCksZS5QPVRpKGUsMzUpLGUuUT1UaShlLDM2KSxlLlI9VGkoZSwzNyksZS5TPVRpKGUsMzgpLGUuVD1UaShlLDM5KSxlLlU9VGkoZSw0MCksZS5WPVRpKGUsNDEpLGUuWD1UaShlLDQyKSxlLlc9VGkoZSw0MyksZS5ZPVRpKGUsNDQpLGUuWj1UaShlLDQ1KSxlLiQ9VGkoZSw0NiksZS5fPVRpKGUsNDcpLGUuYWI9VGkoZSw0OCksZS5jYj1UaShlLDQ5KSxlLmRiPVRpKGUsNTApLGUuZWI9VGkoZSw1MSksZS5nYj1UaShlLDUyKSxlLmhiPVRpKGUsNTMpLGUuaWI9VGkoZSw1NCksZS5qYj1UaShlLDU1KSxlLmtiPVRpKGUsNTYpLGUubGI9VGkoZSw1NyksZS5tYj1UaShlLDU4KSxlLm5iPVRpKGUsNTkpLGUub2I9VGkoZSw2MCksZS5wYj1UaShlLDYxKSl9ZnVuY3Rpb24geEluKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZTtpZihUZT0wLHQuZi5hPT0wKWZvcih0ZT1uZXcgRyhlKTt0ZS5hPHRlLmMuYy5sZW5ndGg7KVY9bChyZSh0ZSksMTApLFRlPWIuTWF0aC5tYXgoVGUsVi5uLmErVi5vLmErVi5kLmMpO2Vsc2UgVGU9dC5mLmEtdC5jLmE7Zm9yKFRlLT10LmMuYSxKPW5ldyBHKGUpO0ouYTxKLmMuYy5sZW5ndGg7KXtzd2l0Y2goVj1sKHJlKEopLDEwKSxpXyhWLm4sVGUtVi5vLmEpLE40ZShWLmYpLFZkdChWKSwoVi5xP1YucTooQ24oKSxDbigpLG1nKSkuX2IoKE50KCksdzQpKSYmaV8obChRKFYsdzQpLDgpLFRlLVYuby5hKSxsKFEoVixSZCksMjU1KS5nKXtjYXNlIDE6cnQoVixSZCwob2coKSxWQikpO2JyZWFrO2Nhc2UgMjpydChWLFJkLChvZygpLEhCKSl9Zm9yKGZlPVYubywkZT1uZXcgRyhWLmopOyRlLmE8JGUuYy5jLmxlbmd0aDspe2ZvcihNZT1sKHJlKCRlKSwxMiksaV8oTWUubixmZS5hLU1lLm8uYSksaV8oTWUuYSxNZS5vLmEpLGxhKE1lLFNmdChNZS5qKSksZj1sKFEoTWUsazIpLDE3KSxmJiZydChNZSxrMixwdCgtZi5hKSksbz1uZXcgRyhNZS5nKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKGE9bChyZShvKSwxOCkscj1ScihhLmEsMCk7ci5iIT1yLmQuYzspbj1sKEJyKHIpLDgpLG4uYT1UZS1uLmE7aWYoRT1sKFEoYSxjYyksNzUpLEUpZm9yKHc9UnIoRSwwKTt3LmIhPXcuZC5jOylnPWwoQnIodyksOCksZy5hPVRlLWcuYTtmb3IoQj1uZXcgRyhhLmIpO0IuYTxCLmMuYy5sZW5ndGg7KUM9bChyZShCKSw3MiksaV8oQy5uLFRlLUMuby5hKX1mb3Ioej1uZXcgRyhNZS5mKTt6LmE8ei5jLmMubGVuZ3RoOylDPWwocmUoeiksNzIpLGlfKEMubixNZS5vLmEtQy5vLmEpfWZvcihWLms9PShabigpLFVzKSYmKHJ0KFYsKGZ0KCksV2MpLFNmdChsKFEoVixXYyksNjQpKSksYzluKFYpKSxMPW5ldyBHKFYuYik7TC5hPEwuYy5jLmxlbmd0aDspQz1sKHJlKEwpLDcyKSxWZHQoQyksaV8oQy5uLGZlLmEtQy5vLmEpfX1mdW5jdGlvbiBrSW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlO2lmKFRlPTAsdC5mLmI9PTApZm9yKHRlPW5ldyBHKGUpO3RlLmE8dGUuYy5jLmxlbmd0aDspVj1sKHJlKHRlKSwxMCksVGU9Yi5NYXRoLm1heChUZSxWLm4uYitWLm8uYitWLmQuYSk7ZWxzZSBUZT10LmYuYi10LmMuYjtmb3IoVGUtPXQuYy5iLEo9bmV3IEcoZSk7Si5hPEouYy5jLmxlbmd0aDspe3N3aXRjaChWPWwocmUoSiksMTApLHJfKFYubixUZS1WLm8uYiksUDRlKFYuZiksVWR0KFYpLChWLnE/Vi5xOihDbigpLENuKCksbWcpKS5fYigoTnQoKSx3NCkpJiZyXyhsKFEoVix3NCksOCksVGUtVi5vLmIpLGwoUShWLFJkKSwyNTUpLmcpe2Nhc2UgMzpydChWLFJkLChvZygpLGVZKSk7YnJlYWs7Y2FzZSA0OnJ0KFYsUmQsKG9nKCksblkpKX1mb3IoZmU9Vi5vLCRlPW5ldyBHKFYuaik7JGUuYTwkZS5jLmMubGVuZ3RoOyl7Zm9yKE1lPWwocmUoJGUpLDEyKSxyXyhNZS5uLGZlLmItTWUuby5iKSxyXyhNZS5hLE1lLm8uYiksbGEoTWUsX2Z0KE1lLmopKSxmPWwoUShNZSxrMiksMTcpLGYmJnJ0KE1lLGsyLHB0KC1mLmEpKSxvPW5ldyBHKE1lLmcpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3IoYT1sKHJlKG8pLDE4KSxyPVJyKGEuYSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksOCksbi5iPVRlLW4uYjtpZihFPWwoUShhLGNjKSw3NSksRSlmb3Iodz1ScihFLDApO3cuYiE9dy5kLmM7KWc9bChCcih3KSw4KSxnLmI9VGUtZy5iO2ZvcihCPW5ldyBHKGEuYik7Qi5hPEIuYy5jLmxlbmd0aDspQz1sKHJlKEIpLDcyKSxyXyhDLm4sVGUtQy5vLmIpfWZvcih6PW5ldyBHKE1lLmYpO3ouYTx6LmMuYy5sZW5ndGg7KUM9bChyZSh6KSw3Mikscl8oQy5uLE1lLm8uYi1DLm8uYil9Zm9yKFYuaz09KFpuKCksVXMpJiYocnQoViwoZnQoKSxXYyksX2Z0KGwoUShWLFdjKSw2NCkpKSxFNG4oVikpLEw9bmV3IEcoVi5iKTtMLmE8TC5jLmMubGVuZ3RoOylDPWwocmUoTCksNzIpLFVkdChDKSxyXyhDLm4sZmUuYi1DLm8uYil9fWZ1bmN0aW9uIEVJbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2k7Zm9yKFRlPW5ldyBVYShlLmIsMCksQz10LktjKCksVj0wLEU9bChDLlBiKCksMTcpLmEsWmU9MCxuPW5ldyBLcyxTdD1uZXcgYmQ7VGUuYjxUZS5kLmdjKCk7KXtmb3IoZmU9KG1yKFRlLmI8VGUuZC5nYygpKSxsKFRlLmQuWGIoVGUuYz1UZS5iKyspLDMwKSksJGU9bmV3IEcoZmUuYSk7JGUuYTwkZS5jLmMubGVuZ3RoOyl7Zm9yKE1lPWwocmUoJGUpLDEwKSx6PW5ldyBocihkcihxcyhNZSkuYS5LYygpLG5ldyBqKSk7anIoeik7KUw9bCh4cih6KSwxOCksU3QuYS56YyhMLFN0KTtmb3IoQj1uZXcgaHIoZHIoa2EoTWUpLmEuS2MoKSxuZXcgaikpO2pyKEIpOylMPWwoeHIoQiksMTgpLFN0LmEuQmMoTCkhPW51bGx9aWYoVisxPT1FKXtmb3IoYT1uZXcgeXUoZSksYnkoVGUsYSksbz1uZXcgeXUoZSksYnkoVGUsbyksYW49U3QuYS5lYygpLktjKCk7YW4uT2IoKTspY249bChhbi5QYigpLDE4KSxuLmEuX2IoY24pfHwoKytaZSxuLmEuemMoY24sbikpLGY9bmV3IG9wKGUpLHJ0KGYsKE50KCksTXMpLChSYSgpLHNDKSksVmEoZixhKSx4KGYsKFpuKCksSzEpKSxKPW5ldyBndSxNYyhKLGYpLGxhKEosKEN0KCksZXIpKSxCbj1uZXcgZ3UsTWMoQm4sZiksbGEoQm4sYXIpLHI9bmV3IG9wKGUpLHJ0KHIsTXMsc0MpLFZhKHIsbykseChyLEsxKSx0ZT1uZXcgZ3UsTWModGUsciksbGEodGUsZXIpLGpuPW5ldyBndSxNYyhqbixyKSxsYShqbixhciksb3Q9bmV3IFR3LHBvKG90LGNuLmMpLEZhKG90LEopLHJ0KG90LChmdCgpLEtpKSxsKFEoY24sS2kpLDE3KSksb2k9bmV3IFR3LHBvKG9pLEJuKSxGYShvaSx0ZSkscnQob2ksS2ksbChRKGNuLEtpKSwxNykpLHBvKGNuLGpuKSxnPW5ldyBvNmUoZixyLG90LG9pLGNuKSxydChmLGMzLGcpLHJ0KHIsYzMsZyksdXI9b3QuYy5pLHVyLms9PUsxJiYodz1sKFEodXIsYzMpLDMxMyksdy5kPWcsZy5nPXcpO2lmKEMuT2IoKSlFPWwoQy5QYigpLDE3KS5hO2Vsc2UgYnJlYWt9KytWfXJldHVybiBwdChaZSl9ZnVuY3Rpb24gVEluKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtmb3IoSj1uZXcgYnQsQj1uZXcgRyhlLmQuYik7Qi5hPEIuYy5jLmxlbmd0aDspZm9yKEw9bChyZShCKSwzMCksVj1uZXcgRyhMLmEpO1YuYTxWLmMuYy5sZW5ndGg7KXtmb3Ioej1sKHJlKFYpLDEwKSxhPWwoY3IoZS5mLHopLDYwKSx3PW5ldyBocihkcihxcyh6KS5hLktjKCksbmV3IGopKTtqcih3KTspaWYoZj1sKHhyKHcpLDE4KSxyPVJyKGYuYSwwKSxFPSEwLEM9bnVsbCxyLmIhPXIuZC5jKXtmb3IodD1sKEJyKHIpLDgpLG49bnVsbCxmLmMuaj09KEN0KCksUW4pJiYodGU9bmV3IFFBKHQsbmV3IGx0KHQuYSxhLmQuZCksYSxmKSx0ZS5mLmE9ITAsdGUuYT1mLmMsJG4oSi5jLHRlKSksZi5jLmo9PURyJiYodGU9bmV3IFFBKHQsbmV3IGx0KHQuYSxhLmQuZCthLmQuYSksYSxmKSx0ZS5mLmQ9ITAsdGUuYT1mLmMsJG4oSi5jLHRlKSk7ci5iIT1yLmQuYzspbj1sKEJyKHIpLDgpLFg2ZSh0LmIsbi5iKXx8KEM9bmV3IFFBKHQsbixudWxsLGYpLCRuKEouYyxDKSxFJiYoRT0hMSxuLmI8YS5kLmQ/Qy5mLmE9ITA6bi5iPmEuZC5kK2EuZC5hP0MuZi5kPSEwOihDLmYuZD0hMCxDLmYuYT0hMCkpKSxyLmIhPXIuZC5jJiYodD1uKTtDJiYobz1sKGNyKGUuZixmLmQuaSksNjApLHQuYjxvLmQuZD9DLmYuYT0hMDp0LmI+by5kLmQrby5kLmE/Qy5mLmQ9ITA6KEMuZi5kPSEwLEMuZi5hPSEwKSl9Zm9yKGc9bmV3IGhyKGRyKGthKHopLmEuS2MoKSxuZXcgaikpO2pyKGcpOylmPWwoeHIoZyksMTgpLGYuYS5iIT0wJiYodD1sKG8wKGYuYSksOCksZi5kLmo9PShDdCgpLFFuKSYmKHRlPW5ldyBRQSh0LG5ldyBsdCh0LmEsYS5kLmQpLGEsZiksdGUuZi5hPSEwLHRlLmE9Zi5kLCRuKEouYyx0ZSkpLGYuZC5qPT1EciYmKHRlPW5ldyBRQSh0LG5ldyBsdCh0LmEsYS5kLmQrYS5kLmEpLGEsZiksdGUuZi5kPSEwLHRlLmE9Zi5kLCRuKEouYyx0ZSkpKX1yZXR1cm4gSn1mdW5jdGlvbiBDSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2Zvcih3PW5ldyBidCxMPXQubGVuZ3RoLGY9JDdlKG4pLEU9MDtFPEw7KytFKXtzd2l0Y2goQz1MeWUodCxjbCg2MSksRSkscj14NG4oZiwoR2EoRSxDLHQubGVuZ3RoKSx0LnN1YnN0cihFLEMtRSkpKSxhPWdjZShyKSxvPWEuamsoKS53aSgpLGNvKHQsKytDKSl7Y2FzZSAzOTp7Zz1Oayh0LDM5LCsrQyksdnQodyxuZXcgU3Eocixlb2UoKEdhKEMsZyx0Lmxlbmd0aCksdC5zdWJzdHIoQyxnLUMpKSxvLGEpKSksRT1nKzE7YnJlYWt9Y2FzZSAzNDp7Zz1Oayh0LDM0LCsrQyksdnQodyxuZXcgU3Eocixlb2UoKEdhKEMsZyx0Lmxlbmd0aCksdC5zdWJzdHIoQyxnLUMpKSxvLGEpKSksRT1nKzE7YnJlYWt9Y2FzZSA5MTp7Qj1uZXcgYnQsdnQodyxuZXcgU3EocixCKSk7ZTpmb3IoOzspe3N3aXRjaChjbyh0LCsrQykpe2Nhc2UgMzk6e2c9TmsodCwzOSwrK0MpLHZ0KEIsZW9lKChHYShDLGcsdC5sZW5ndGgpLHQuc3Vic3RyKEMsZy1DKSksbyxhKSksQz1nKzE7YnJlYWt9Y2FzZSAzNDp7Zz1Oayh0LDM0LCsrQyksdnQoQixlb2UoKEdhKEMsZyx0Lmxlbmd0aCksdC5zdWJzdHIoQyxnLUMpKSxvLGEpKSxDPWcrMTticmVha31jYXNlIDExMDp7aWYoKytDLHQuaW5kZXhPZigidWxsIixDKT09QylCLmMucHVzaChudWxsKTtlbHNlIHRocm93IHVlKG5ldyBBYyhoNHQpKTtDKz0zO2JyZWFrfX1pZihDPEwpc3dpdGNoKFhuKEMsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChDKSl7Y2FzZSA0NDpicmVhaztjYXNlIDkzOmJyZWFrIGU7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgQWMoIkV4cGVjdGluZyAsIG9yIF0iKSl9ZWxzZSBicmVha31FPUMrMTticmVha31jYXNlIDExMDp7aWYoKytDLHQuaW5kZXhPZigidWxsIixDKT09Qyl2dCh3LG5ldyBTcShyLG51bGwpKTtlbHNlIHRocm93IHVlKG5ldyBBYyhoNHQpKTtFPUMrMzticmVha319aWYoRTxMKXtpZihYbihFLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoRSkhPTQ0KXRocm93IHVlKG5ldyBBYygiRXhwZWN0aW5nICwiKSl9ZWxzZSBicmVha31yZXR1cm4gY1NuKGUsdyxuKX1mdW5jdGlvbiBTSW4oZSl7dmFyIHQsbixyLGEsbztzd2l0Y2godD1lLmMsbz1udWxsLHQpe2Nhc2UgNjpyZXR1cm4gZS5FbSgpO2Nhc2UgMTM6cmV0dXJuIGUuRm0oKTtjYXNlIDIzOnJldHVybiBlLndtKCk7Y2FzZSAyMjpyZXR1cm4gZS5CbSgpO2Nhc2UgMTg6cmV0dXJuIGUueW0oKTtjYXNlIDg6TGkoZSksbz0oRGkoKSxYUGUpO2JyZWFrO2Nhc2UgOTpyZXR1cm4gZS5lbSghMCk7Y2FzZSAxOTpyZXR1cm4gZS5mbSgpO2Nhc2UgMTA6c3dpdGNoKGUuYSl7Y2FzZSAxMDA6Y2FzZSA2ODpjYXNlIDExOTpjYXNlIDg3OmNhc2UgMTE1OmNhc2UgODM6cmV0dXJuIG89ZS5kbShlLmEpLExpKGUpLG87Y2FzZSAxMDE6Y2FzZSAxMDI6Y2FzZSAxMTA6Y2FzZSAxMTQ6Y2FzZSAxMTY6Y2FzZSAxMTc6Y2FzZSAxMTg6Y2FzZSAxMjA6bj1lLmNtKCksbjxJbz9vPShEaSgpLERpKCksbmV3IG5nKDAsbikpOm89a3N0KHc4ZShuKSk7YnJlYWs7Y2FzZSA5OTpyZXR1cm4gZS5vbSgpO2Nhc2UgNjc6cmV0dXJuIGUuam0oKTtjYXNlIDEwNTpyZXR1cm4gZS5ybSgpO2Nhc2UgNzM6cmV0dXJuIGUua20oKTtjYXNlIDEwMzpyZXR1cm4gZS5wbSgpO2Nhc2UgODg6cmV0dXJuIGUubG0oKTtjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gZS5nbSgpO2Nhc2UgODA6Y2FzZSAxMTI6aWYobz13OWUoZSxlLmEpLCFvKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx0MGUpKSkpO2JyZWFrO2RlZmF1bHQ6bz1QaXQoZS5hKX1MaShlKTticmVhaztjYXNlIDA6aWYoZS5hPT05M3x8ZS5hPT0xMjN8fGUuYT09MTI1KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx4U2UpKSkpO289UGl0KGUuYSkscj1lLmEsTGkoZSksKHImNjQ1MTIpPT1BUCYmZS5jPT0wJiYoZS5hJjY0NTEyKT09NTYzMjAmJihhPVdlKGtmLEFkLDI4LDIsMTUsMSksYVswXT1yJlpzLGFbMV09ZS5hJlpzLG89QmFlKGtzdChJZihhLDAsYS5sZW5ndGgpKSwwKSxMaShlKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCkseFNlKSkpKX1yZXR1cm4gb31mdW5jdGlvbiBfSW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuO2Zvcihhbj1uZXcgb3Msb3Q9bmV3IG9zLHRlPS0xLHc9bmV3IEcoZSk7dy5hPHcuYy5jLmxlbmd0aDspe2ZvcihmPWwocmUodyksMTMxKSxmLnM9dGUtLSxDPTAsTWU9MCxvPW5ldyBHKGYudCk7by5hPG8uYy5jLmxlbmd0aDspcj1sKHJlKG8pLDI3NCksTWUrPXIuYztmb3IoYT1uZXcgRyhmLmkpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwyNzQpLEMrPXIuYztmLm49QyxmLnU9TWUsTWU9PTA/Q3Mob3QsZixvdC5jLmIsb3QuYyk6Qz09MCYmQ3MoYW4sZixhbi5jLmIsYW4uYyl9Zm9yKGpuPUhIKGUpLEw9ZS5jLmxlbmd0aCxKPUwrMSxmZT1MLTEsej1uZXcgYnQ7am4uYS5nYygpIT0wOyl7Zm9yKDtvdC5iIT0wOylaZT0obXIob3QuYiE9MCksbChhZihvdCxvdC5hLmEpLDEzMSkpLGpuLmEuQmMoWmUpIT1udWxsLFplLnM9ZmUtLSxSOWUoWmUsYW4sb3QpO2Zvcig7YW4uYiE9MDspU3Q9KG1yKGFuLmIhPTApLGwoYWYoYW4sYW4uYS5hKSwxMzEpKSxqbi5hLkJjKFN0KSE9bnVsbCxTdC5zPUorKyxSOWUoU3QsYW4sb3QpO2ZvcihWPWxvLEU9am4uYS5lYygpLktjKCk7RS5PYigpOylmPWwoRS5QYigpLDEzMSksVGU9Zi51LWYubixUZT49ViYmKFRlPlYmJih6LmMubGVuZ3RoPTAsVj1UZSksJG4oei5jLGYpKTt6LmMubGVuZ3RoIT0wJiYoQj1sKGp0KHosYVUodCx6LmMubGVuZ3RoKSksMTMxKSxqbi5hLkJjKEIpIT1udWxsLEIucz1KKyssUjllKEIsYW4sb3QpLHouYy5sZW5ndGg9MCl9Zm9yKCRlPWUuYy5sZW5ndGgrMSxnPW5ldyBHKGUpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMzEpLGYuczxMJiYoZi5zKz0kZSk7Zm9yKGNuPW5ldyBHKGUpO2NuLmE8Y24uYy5jLmxlbmd0aDspZm9yKFN0PWwocmUoY24pLDEzMSksbj1uZXcgVWEoU3QudCwwKTtuLmI8bi5kLmdjKCk7KXI9KG1yKG4uYjxuLmQuZ2MoKSksbChuLmQuWGIobi5jPW4uYisrKSwyNzQpKSxCbj1yLmIsU3Qucz5Cbi5zJiYocGgobiksYWwoQm4uaSxyKSxyLmM+MCYmKHIuYT1Cbix2dChCbi50LHIpLHIuYj1TdCx2dChTdC5pLHIpKSl9ZnVuY3Rpb24gdXd0KGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbjtmb3IoSj1uZXcgQnUodC5iKSwkZT1uZXcgQnUodC5iKSxCPW5ldyBCdSh0LmIpLGNuPW5ldyBCdSh0LmIpLHRlPW5ldyBCdSh0LmIpLFN0PVJyKHQsMCk7U3QuYiE9U3QuZC5jOylmb3IoWmU9bChCcihTdCksMTIpLGc9bmV3IEcoWmUuZyk7Zy5hPGcuYy5jLmxlbmd0aDspaWYobz1sKHJlKGcpLDE4KSxvLmMuaT09by5kLmkpe2lmKFplLmo9PW8uZC5qKXskbihjbi5jLG8pO2NvbnRpbnVlfWVsc2UgaWYoWmUuaj09KEN0KCksUW4pJiZvLmQuaj09RHIpeyRuKHRlLmMsbyk7Y29udGludWV9fWZvcih3PW5ldyBHKHRlKTt3LmE8dy5jLmMubGVuZ3RoOylvPWwocmUodyksMTgpLFpfbihlLG8sbixyLChDdCgpLGFyKSk7Zm9yKGY9bmV3IEcoY24pO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxOCksYW49bmV3IG9wKGUpLHgoYW4sKFpuKCksQXUpKSxydChhbiwoTnQoKSxNcyksKFJhKCksTXUpKSxydChhbiwoZnQoKSx6aSksbyksQm49bmV3IGd1LHJ0KEJuLHppLG8uZCksbGEoQm4sKEN0KCksZXIpKSxNYyhCbixhbiksam49bmV3IGd1LHJ0KGpuLHppLG8uYyksbGEoam4sYXIpLE1jKGpuLGFuKSxydChvLmMsamwsYW4pLHJ0KG8uZCxqbCxhbikscG8obyxudWxsKSxGYShvLG51bGwpLCRuKG4uYyxhbikscnQoYW4saVcscHQoMikpO2ZvcihvdD1Scih0LDApO290LmIhPW90LmQuYzspWmU9bChCcihvdCksMTIpLEU9WmUuZS5jLmxlbmd0aD4wLGZlPVplLmcuYy5sZW5ndGg+MCxFJiZmZT8kbihCLmMsWmUpOkU/JG4oSi5jLFplKTpmZSYmJG4oJGUuYyxaZSk7Zm9yKFY9bmV3IEcoSik7Vi5hPFYuYy5jLmxlbmd0aDspej1sKHJlKFYpLDEyKSx2dChhLF9rZShlLHosbnVsbCxuKSk7Zm9yKE1lPW5ldyBHKCRlKTtNZS5hPE1lLmMuYy5sZW5ndGg7KVRlPWwocmUoTWUpLDEyKSx2dChhLF9rZShlLG51bGwsVGUsbikpO2ZvcihMPW5ldyBHKEIpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxMiksdnQoYSxfa2UoZSxDLEMsbikpfWZ1bmN0aW9uIFVrZShlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKEI9Z3Msej1ncyxDPTAsTD0wLHc9bmV3IGJ0LGc9bmV3IG9yKCghZS5iJiYoZS5iPW5ldyBudChqcyxlLDEyLDMpKSxlLmIpKTtnLmUhPWcuaS5nYygpOylvPWwoZ3IoZyksNzQpLHc9TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbdywoIW8ubiYmKG8ubj1uZXcgbnQoZWMsbywxLDcpKSxvLm4pXSkpO2ZvcihNZT1yZyhMaChoZShsZShGaCwxKSxSbiwyMCwwLFsoIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm4pLCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSx3XSkpKTtqcihNZSk7KVRlPWwoeHIoTWUpLDQyMiksRT1sKFRlLm9mKChwaSgpLHRDKSksMTQwKSxCPlRlLm5oKCktRS5iJiYoQj1UZS5uaCgpLUUuYiksej5UZS5vaCgpLUUuZCYmKHo9VGUub2goKS1FLmQpLEM8VGUubmgoKStUZS5taCgpK0UuYyYmKEM9VGUubmgoKStUZS5taCgpK0UuYyksTDxUZS5vaCgpK1RlLmxoKCkrRS5hJiYoTD1UZS5vaCgpK1RlLmxoKCkrRS5hKTtmb3IoZj1uZXcgb3IoKCFlLmImJihlLmI9bmV3IG50KGpzLGUsMTIsMykpLGUuYikpO2YuZSE9Zi5pLmdjKCk7KWZvcihvPWwoZ3IoZiksNzQpLGZlPW5ldyBvcigoIW8uYSYmKG8uYT1uZXcgbnQoY3Msbyw2LDYpKSxvLmEpKTtmZS5lIT1mZS5pLmdjKCk7KWZvcih0ZT1sKGdyKGZlKSwxNjYpLFY9dGUuaixyPXRlLmIsSj10ZS5rLGE9dGUuYyxCPWIuTWF0aC5taW4oQixWKSxCPWIuTWF0aC5taW4oQixyKSxDPWIuTWF0aC5tYXgoQyxWKSxDPWIuTWF0aC5tYXgoQyxyKSx6PWIuTWF0aC5taW4oeixKKSx6PWIuTWF0aC5taW4oeixhKSxMPWIuTWF0aC5tYXgoTCxKKSxMPWIuTWF0aC5tYXgoTCxhKSxuPW5ldyBvcigoIXRlLmEmJih0ZS5hPW5ldyBZcyhxaCx0ZSw1KSksdGUuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwzNzcpLEI9Yi5NYXRoLm1pbihCLHQuYSksQz1iLk1hdGgubWF4KEMsdC5hKSx6PWIuTWF0aC5taW4oeix0LmIpLEw9Yi5NYXRoLm1heChMLHQuYik7SGkoZSwocGkoKSx0NyksQy1CKSxIaShlLGU3LEwteil9ZnVuY3Rpb24gQUluKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEw7aWYobi5VZygiTmV0d29yayBzaW1wbGV4IG5vZGUgcGxhY2VtZW50IiwxKSxlLmU9dCxlLm49bChRKHQsKGZ0KCksJDYpKSwzMTIpLHpMbihlKSxzeG4oZSksSXMoRGMobmV3IGJuKG51bGwsbmV3IGtuKGUuZS5iLDE2KSksbmV3IEplZSksbmV3IEpZZShlKSksSXMoRmkoRGMoRmkoRGMobmV3IGJuKG51bGwsbmV3IGtuKGUuZS5iLDE2KSksbmV3IHV0ZSksbmV3IEpqKSxuZXcgbHRlKSxuZXcgVFMpLG5ldyBRWWUoZSkpLFJ0KEJ0KFEoZS5lLChOdCgpLFpMKSkpKSYmKGY9bi5laCgxKSxmLlVnKCJTdHJhaWdodCBFZGdlcyBQcmUtUHJvY2Vzc2luZyIsMSksdURuKGUpLGYuVmcoKSksJDZuKGUuZiksbz1sKFEodCxuTSksMTcpLmEqZS5mLmEuYy5sZW5ndGgsb2xlKG4zZShyM2UoYmFlKGUuZiksbyksITEpLG4uZWgoMSkpLGUuZC5hLmdjKCkhPTApe2ZvcihmPW4uZWgoMSksZi5VZygiRmxleGlibGUgV2hlcmUgU3BhY2UgUHJvY2Vzc2luZyIsMSksZz1sKGZoKFk4KGZjKG5ldyBibihudWxsLG5ldyBrbihlLmYuYSwxNikpLG5ldyBaZWUpLG5ldyBHZWUpKSwxNykuYSx3PWwoZmgodnkoZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuZi5hLDE2KSksbmV3IGV0ZSksbmV3IEtlZSkpLDE3KS5hLEU9dy1nLEM9aHcobmV3IFNtLGUuZiksTD1odyhuZXcgU20sZS5mKSxwMChzMChpMChyMChhMChuZXcgX2YsMmU0KSxFKSxDKSxMKSksSXMoRmkoRmkoYzVlKGUuaSksbmV3IHR0ZSksbmV3IG50ZSksbmV3IFRhdChnLEMsRSxMKSksYT1lLmQuYS5lYygpLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDIxOCksci5nPTE7b2xlKG4zZShyM2UoYmFlKGUuZiksbyksITEpLGYuZWgoMSkpLGYuVmcoKX1SdChCdChRKHQsWkwpKSkmJihmPW4uZWgoMSksZi5VZygiU3RyYWlnaHQgRWRnZXMgUG9zdC1Qcm9jZXNzaW5nIiwxKSxYOW4oZSksZi5WZygpKSxHTW4oZSksZS5lPW51bGwsZS5mPW51bGwsZS5pPW51bGwsZS5jPW51bGwsTmwoZS5rKSxlLmo9bnVsbCxlLmE9bnVsbCxlLm89bnVsbCxlLmQuYS4kYigpLG4uVmcoKX1mdW5jdGlvbiBMSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2ZvcihuLlVnKCJEZXB0aCBmaXJzdCBtb2RlbCBvcmRlciBsYXllcmluZyIsMSksZS5kPXQsdGU9bmV3IGJ0LEo9bmV3IEcoZS5kLmEpO0ouYTxKLmMuYy5sZW5ndGg7KXo9bChyZShKKSwxMCksei5rPT0oWm4oKSxQcykmJiRuKHRlLmMseik7Zm9yKENuKCksVnModGUsbmV3ICRlZSksZj0hMCxlLmI9bmV3IHl1KGUuZCksZS5hPW51bGwsdnQoZS5kLmIsZS5iKSxlLmIucD0wLGUuYz0wLGUuZj1uZXcgb3MsVj1uZXcgRyh0ZSk7Vi5hPFYuYy5jLmxlbmd0aDspaWYoej1sKHJlKFYpLDEwKSxmKVZhKHosZS5iKSxmPSExO2Vsc2UgaWYoSEFuKGUseikpaWYoQj1lLmMsQj12ZHQoQix6KSxyPUIrMixDPUItZS5jLGUuZi5iPT0wKUo5ZShlLHIseik7ZWxzZSBpZihDPjApe2ZvcihNZT1ScihlLmYsMCk7TWUuYiE9TWUuZC5jOylUZT1sKEJyKE1lKSwxMCksVGUucCs9Qi1lLmU7cjllKGUpLENoKGUuZiksSjllKGUscix6KX1lbHNle2Zvcih1aShlLmYseiksei5wPXIsZS5lPWIuTWF0aC5tYXgoZS5lLHIpLG89bmV3IGhyKGRyKGthKHopLmEuS2MoKSxuZXcgaikpO2pyKG8pOylhPWwoeHIobyksMTgpLCFhLmMuaS5jJiZhLmMuaS5rPT0oWm4oKSxjdSkmJih1aShlLmYsYS5jLmkpLGEuYy5pLnA9ci0xKTtlLmM9cn1lbHNlIHI5ZShlKSxDaChlLmYpLHI9MCxqcihuZXcgaHIoZHIoa2EoeikuYS5LYygpLG5ldyBqKSkpPyhCPTAsQj12ZHQoQix6KSxyPUIrMixKOWUoZSxyLHopKToodWkoZS5mLHopLHoucD0wLGUuZT1iLk1hdGgubWF4KGUuZSwwKSxlLmI9bChqdChlLmQuYiwwKSwzMCksZS5jPTApO2ZvcihlLmYuYj09MHx8cjllKGUpLGUuZC5hLmMubGVuZ3RoPTAsZmU9bmV3IGJ0LEU9bmV3IEcoZS5kLmIpO0UuYTxFLmMuYy5sZW5ndGg7KWc9bChyZShFKSwzMCksZy5hLmMubGVuZ3RoPT0wJiYkbihmZS5jLGcpO2ZvcihnOGUoZS5kLmIsZmUpLEw9MCx3PW5ldyBHKGUuZC5iKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMzApLGcucD1MLCsrTDtuLlZnKCl9ZnVuY3Rpb24gTUluKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbix1cixvaSx3cyxWbCxsYztpZihCbj1udWxsLHVyPXQsam49VWN0KGUsUGN0KG4pLHVyKSxmRShqbixZZyh1cixQZCkpLG9pPWwoWDUoZS5nLHh4KFdnKHVyLEhmZSkpKSwyNyksQj1XZyh1ciwic291cmNlUG9ydCIpLHI9bnVsbCxCJiYocj14eChCKSksd3M9bChYNShlLmosciksMTIzKSwhb2kpdGhyb3cgZz1ORSh1ciksVj0iQW4gZWRnZSBtdXN0IGhhdmUgYSBzb3VyY2Ugbm9kZSAoZWRnZSBpZDogJyIrZyxKPVYra1QsdWUobmV3IGRkKEopKTtpZih3cyYmIXlkKE0xKHdzKSxvaSkpdGhyb3cgdz1ZZyh1cixQZCksdGU9IlRoZSBzb3VyY2UgcG9ydCBvZiBhbiBlZGdlIG11c3QgYmUgYSBwb3J0IG9mIHRoZSBlZGdlJ3Mgc291cmNlIG5vZGUgKGVkZ2UgaWQ6ICciK3csZmU9dGUra1QsdWUobmV3IGRkKGZlKSk7aWYoY249KCFqbi5iJiYoam4uYj1uZXcgTG4oX3Isam4sNCw3KSksam4uYiksbz1udWxsLHdzP289d3M6bz1vaSxxcihjbixvKSxWbD1sKFg1KGUuZyx4eChXZyh1cix3U2UpKSksMjcpLHo9V2codXIsInRhcmdldFBvcnQiKSxhPW51bGwseiYmKGE9eHgoeikpLGxjPWwoWDUoZS5qLGEpLDEyMyksIVZsKXRocm93IEw9TkUodXIpLFRlPSJBbiBlZGdlIG11c3QgaGF2ZSBhIHRhcmdldCBub2RlIChlZGdlIGlkOiAnIitMLE1lPVRlK2tULHVlKG5ldyBkZChNZSkpO2lmKGxjJiYheWQoTTEobGMpLFZsKSl0aHJvdyBFPVlnKHVyLFBkKSwkZT0iVGhlIHRhcmdldCBwb3J0IG9mIGFuIGVkZ2UgbXVzdCBiZSBhIHBvcnQgb2YgdGhlIGVkZ2UncyB0YXJnZXQgbm9kZSAoZWRnZSBpZDogJyIrRSxaZT0kZStrVCx1ZShuZXcgZGQoWmUpKTtpZihhbj0oIWpuLmMmJihqbi5jPW5ldyBMbihfcixqbiw1LDgpKSxqbi5jKSxmPW51bGwsbGM/Zj1sYzpmPVZsLHFyKGFuLGYpLCgham4uYiYmKGpuLmI9bmV3IExuKF9yLGpuLDQsNykpLGpuLmIpLmk9PTB8fCgham4uYyYmKGpuLmM9bmV3IExuKF9yLGpuLDUsOCkpLGpuLmMpLmk9PTApdGhyb3cgQz1ZZyh1cixQZCksb3Q9dzR0K0MsU3Q9b3Qra1QsdWUobmV3IGRkKFN0KSk7cmV0dXJuIG1VKHVyLGpuKSx0VG4odXIsam4pLEJuPXdjZShlLHVyLGpuKSxCbn1mdW5jdGlvbiBsd3QoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzO2Zvcih6PWwoUShlLChiYigpLEh4KSksMjcpLE1lPUlpLCRlPUlpLGZlPWxvLFRlPWxvLG90PW5ldyBHKGUuZSk7b3QuYTxvdC5jLmMubGVuZ3RoOylaZT1sKHJlKG90KSwxNTMpLGpuPVplLmQsdXI9WmUuZSxNZT1iLk1hdGgubWluKE1lLGpuLmEtdXIuYS8yKSwkZT1iLk1hdGgubWluKCRlLGpuLmItdXIuYi8yKSxmZT1iLk1hdGgubWF4KGZlLGpuLmErdXIuYS8yKSxUZT1iLk1hdGgubWF4KFRlLGpuLmIrdXIuYi8yKTtmb3Iobj1uZXcgRyhlLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyNTApLGpuPXQuZCx1cj10LmUsTWU9Yi5NYXRoLm1pbihNZSxqbi5hLXVyLmEvMiksJGU9Yi5NYXRoLm1pbigkZSxqbi5iLXVyLmIvMiksZmU9Yi5NYXRoLm1heChmZSxqbi5hK3VyLmEvMiksVGU9Yi5NYXRoLm1heChUZSxqbi5iK3VyLmIvMik7Zm9yKEJuPWwoYXQoeiwoYjAoKSxKN3QpKSwxMDcpLGFuPW5ldyBsdChCbi5iLU1lLEJuLmQtJGUpLEU9bmV3IEcoZS5lKTtFLmE8RS5jLmMubGVuZ3RoOyl3PWwocmUoRSksMTUzKSxjbj1RKHcsSHgpLERlKGNuLDIwNykmJihKPWwoY24sMjcpLFN0PU9pKG5ldyBFbyh3LmQpLGFuKSxRaChKLFN0LmEtSi5nLzIsU3QuYi1KLmYvMikpO2ZvcihvPW5ldyBHKGUuYyk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDI5MCksTD1sKFEoYSxIeCksNzQpLEI9bDYoTCwhMCwhMCksb2k9bmV3IEVvKG43ZShhKSksT2kob2ksYW4pLGtPKEIsb2kuYSxvaS5iKSxWdShhLmEsbmV3IF9ldChhbixCKSkscj1uZXcgRW8ocjdlKGEpKSxPaShyLGFuKSx4TyhCLHIuYSxyLmIpO2ZvcihnPW5ldyBHKGUuZCk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDQ1NCksVj1sKFEoZixIeCksMTM1KSx0ZT1PaShuZXcgRW8oZi5kKSxhbiksUWgoVix0ZS5hLHRlLmIpO3dzPWZlLU1lKyhCbi5iK0JuLmMpLEM9VGUtJGUrKEJuLmQrQm4uYSksUnQoQnQoYXQoeiwocGkoKSxDNCkpKSl8fEd3KHosd3MsQywhMSwhMCksSGkoeix0Nyx3cy0oQm4uYitCbi5jKSksSGkoeixlNyxDLShCbi5kK0JuLmEpKX1mdW5jdGlvbiBod3QoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO3JldHVybiBMPXlBbihpbChlLChDdCgpLGVkKSksdCksVj1pNihpbChlLF8wKSx0KSwkZT1pNihpbChlLCRoKSx0KSxjbj1oVShpbChlLEhmKSx0KSxCPWhVKGlsKGUseWYpLHQpLFRlPWk2KGlsKGUsQTApLHQpLEo9aTYoaWwoZSx6bCksdCksb3Q9aTYoaWwoZSx6aCksdCksWmU9aTYoaWwoZSx4ZiksdCksYW49aFUoaWwoZSxKdSksdCksZmU9aTYoaWwoZSxobCksdCksTWU9aTYoaWwoZSxxbCksdCksU3Q9aTYoaWwoZSxsbCksdCksQm49aFUoaWwoZSxmbCksdCksej1oVShpbChlLF9sKSx0KSx0ZT1pNihpbChlLER1KSx0KSxuPVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtUZS5hLGNuLmEsb3QuYSxCbi5hXSkpLHI9WTUoaGUobGUoTmEsMSksWm8sMjgsMTUsW1YuYSxMLmEsJGUuYSx0ZS5hXSkpLGE9ZmUuYSxvPVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtKLmEsQi5hLFplLmEsei5hXSkpLEU9WTUoaGUobGUoTmEsMSksWm8sMjgsMTUsW1RlLmIsVi5iLEouYixNZS5iXSkpLHc9WTUoaGUobGUoTmEsMSksWm8sMjgsMTUsW2NuLmIsTC5iLEIuYix0ZS5iXSkpLEM9YW4uYixnPVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtvdC5iLCRlLmIsWmUuYixTdC5iXSkpLG4yKGlsKGUsZWQpLG4rYSxFK0MpLG4yKGlsKGUsRHUpLG4rYSxFK0MpLG4yKGlsKGUsXzApLG4rYSwwKSxuMihpbChlLCRoKSxuK2EsRStDK3cpLG4yKGlsKGUsSGYpLDAsRStDKSxuMihpbChlLHlmKSxuK2ErcixFK0MpLG4yKGlsKGUsemwpLG4rYStyLDApLG4yKGlsKGUsemgpLDAsRStDK3cpLG4yKGlsKGUseGYpLG4rYStyLEUrQyt3KSxuMihpbChlLEp1KSwwLEUpLG4yKGlsKGUsaGwpLG4sMCksbjIoaWwoZSxsbCksMCxFK0MrdyksbjIoaWwoZSxfbCksbithK3IsMCksZj1uZXcgcWEsZi5hPVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtuK3IrYStvLGFuLmEsTWUuYSxTdC5hXSkpLGYuYj1ZNShoZShsZShOYSwxKSxabywyOCwxNSxbRSt3K0MrZyxmZS5iLEJuLmIsei5iXSkpLGZ9ZnVuY3Rpb24gZnd0KGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbjtmb3IoVGU9bmV3IGx0KGdzLGdzKSx0PW5ldyBsdChpYSxpYSksY249bmV3IEcoZSk7Y24uYTxjbi5jLmMubGVuZ3RoOylTdD1sKHJlKGNuKSw4KSxUZS5hPWIuTWF0aC5taW4oVGUuYSxTdC5hKSxUZS5iPWIuTWF0aC5taW4oVGUuYixTdC5iKSx0LmE9Yi5NYXRoLm1heCh0LmEsU3QuYSksdC5iPWIuTWF0aC5tYXgodC5iLFN0LmIpO2ZvcihCPW5ldyBsdCh0LmEtVGUuYSx0LmItVGUuYiksRT1uZXcgbHQoVGUuYS01MCxUZS5iLUIuYS01MCksQz1uZXcgbHQoVGUuYS01MCx0LmIrQi5hKzUwKSxMPW5ldyBsdCh0LmErQi5iLzIrNTAsVGUuYitCLmIvMiksej1uZXcgQ2tlKEUsQyxMKSxvdD1uZXcgS3Msbz1uZXcgYnQsbj1uZXcgYnQsb3QuYS56Yyh6LG90KSxCbj1uZXcgRyhlKTtCbi5hPEJuLmMuYy5sZW5ndGg7KXtmb3IoYW49bChyZShCbiksOCksby5jLmxlbmd0aD0wLFplPW90LmEuZWMoKS5LYygpO1plLk9iKCk7KU1lPWwoWmUuUGIoKSwzMTcpLHI9TWUuZCxwYihyLE1lLmEpLEZ3KHBiKE1lLmQsYW4pLHBiKE1lLmQsTWUuYSkpPDAmJiRuKG8uYyxNZSk7Zm9yKG4uYy5sZW5ndGg9MCwkZT1uZXcgRyhvKTskZS5hPCRlLmMuYy5sZW5ndGg7KWZvcihNZT1sKHJlKCRlKSwzMTcpLHRlPW5ldyBHKE1lLmUpO3RlLmE8dGUuYy5jLmxlbmd0aDspe2ZvcihWPWwocmUodGUpLDE3NyksZj0hMCx3PW5ldyBHKG8pO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwzMTcpLGchPU1lJiYoSmMoVixqdChnLmUsMCkpfHxKYyhWLGp0KGcuZSwxKSl8fEpjKFYsanQoZy5lLDIpKSkmJihmPSExKTtmJiYkbihuLmMsVil9Zm9yKHpndChvdCxvKSx0byhvdCxuZXcgam8pLEo9bmV3IEcobik7Si5hPEouYy5jLmxlbmd0aDspVj1sKHJlKEopLDE3NyksbmEob3QsbmV3IENrZShhbixWLmEsVi5iKSl9Zm9yKGZlPW5ldyBLcyx0byhvdCxuZXcgRW0oZmUpKSxhPWZlLmEuZWMoKS5LYygpO2EuT2IoKTspVj1sKGEuUGIoKSwxNzcpLChyVih6LFYuYSl8fHJWKHosVi5iKSkmJmEuUWIoKTtyZXR1cm4gdG8oZmUsbmV3ICRvKSxmZX1mdW5jdGlvbiBzdSgpe3N1PVUsdFplKCksVF90PUxhLmEsbChPZSh0dChMYS5hKSwwKSwxOSksa190PUxhLmYsbChPZSh0dChMYS5mKSwwKSwxOSksbChPZSh0dChMYS5mKSwxKSwzNSksRV90PUxhLm4sbChPZSh0dChMYS5uKSwwKSwzNSksbChPZSh0dChMYS5uKSwxKSwzNSksbChPZSh0dChMYS5uKSwyKSwzNSksbChPZSh0dChMYS5uKSwzKSwzNSksZFBlPUxhLmcsbChPZSh0dChMYS5nKSwwKSwxOSksbChPZSh0dChMYS5nKSwxKSwzNSkseF90PUxhLmMsbChPZSh0dChMYS5jKSwwKSwxOSksbChPZSh0dChMYS5jKSwxKSwxOSksZ1BlPUxhLmksbChPZSh0dChMYS5pKSwwKSwxOSksbChPZSh0dChMYS5pKSwxKSwxOSksbChPZSh0dChMYS5pKSwyKSwxOSksbChPZSh0dChMYS5pKSwzKSwxOSksbChPZSh0dChMYS5pKSw0KSwzNSkscFBlPUxhLmosbChPZSh0dChMYS5qKSwwKSwxOSksZlBlPUxhLmQsbChPZSh0dChMYS5kKSwwKSwxOSksbChPZSh0dChMYS5kKSwxKSwxOSksbChPZSh0dChMYS5kKSwyKSwxOSksbChPZSh0dChMYS5kKSwzKSwxOSksbChPZSh0dChMYS5kKSw0KSwzNSksbChPZSh0dChMYS5kKSw1KSwzNSksbChPZSh0dChMYS5kKSw2KSwzNSksbChPZSh0dChMYS5kKSw3KSwzNSkseV90PUxhLmIsbChPZSh0dChMYS5iKSwwKSwzNSksbChPZSh0dChMYS5iKSwxKSwzNSkscFk9TGEuZSxsKE9lKHR0KExhLmUpLDApLDM1KSxsKE9lKHR0KExhLmUpLDEpLDM1KSxsKE9lKHR0KExhLmUpLDIpLDM1KSxsKE9lKHR0KExhLmUpLDMpLDM1KSxsKE9lKHR0KExhLmUpLDQpLDE5KSxsKE9lKHR0KExhLmUpLDUpLDE5KSxsKE9lKHR0KExhLmUpLDYpLDE5KSxsKE9lKHR0KExhLmUpLDcpLDE5KSxsKE9lKHR0KExhLmUpLDgpLDE5KSxsKE9lKHR0KExhLmUpLDkpLDE5KSxsKE9lKHR0KExhLmUpLDEwKSwzNSksQ2c9TGEuayxsKE9lKHR0KExhLmspLDApLDM1KSxsKE9lKHR0KExhLmspLDEpLDM1KX1mdW5jdGlvbiBHa2UoZSl7dmFyIHQsbixyLGEsbztzd2l0Y2godD1lLmMsdCl7Y2FzZSAxMTpyZXR1cm4gZS52bSgpO2Nhc2UgMTI6cmV0dXJuIGUueG0oKTtjYXNlIDE0OnJldHVybiBlLnptKCk7Y2FzZSAxNTpyZXR1cm4gZS5DbSgpO2Nhc2UgMTY6cmV0dXJuIGUuQW0oKTtjYXNlIDE3OnJldHVybiBlLkRtKCk7Y2FzZSAyMTpyZXR1cm4gTGkoZSksRGkoKSxEaSgpLFdNO2Nhc2UgMTA6c3dpdGNoKGUuYSl7Y2FzZSA2NTpyZXR1cm4gZS5obSgpO2Nhc2UgOTA6cmV0dXJuIGUubW0oKTtjYXNlIDEyMjpyZXR1cm4gZS50bSgpO2Nhc2UgOTg6cmV0dXJuIGUubm0oKTtjYXNlIDY2OnJldHVybiBlLmltKCk7Y2FzZSA2MDpyZXR1cm4gZS5zbSgpO2Nhc2UgNjI6cmV0dXJuIGUucW0oKX19c3dpdGNoKG89U0luKGUpLHQ9ZS5jLHQpe2Nhc2UgMzpyZXR1cm4gZS5JbShvKTtjYXNlIDQ6cmV0dXJuIGUuR20obyk7Y2FzZSA1OnJldHVybiBlLkhtKG8pO2Nhc2UgMDppZihlLmE9PTEyMyYmZS5kPGUuail7aWYoYT1lLmQscj0wLG49LTEsKHQ9Y28oZS5pLGErKykpPj00OCYmdDw9NTcpe2ZvcihyPXQtNDg7YTxlLmomJih0PWNvKGUuaSxhKyspKT49NDgmJnQ8PTU3OylpZihyPXIqMTArdC00OCxyPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLENTZSkpKSl9ZWxzZSB0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksSzR0KSkpKTtpZihuPXIsdD09NDQpe2lmKGE+PWUuail0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksWTR0KSkpKTtpZigodD1jbyhlLmksYSsrKSk+PTQ4JiZ0PD01Nyl7Zm9yKG49dC00ODthPGUuaiYmKHQ9Y28oZS5pLGErKykpPj00OCYmdDw9NTc7KWlmKG49bioxMCt0LTQ4LG48MCl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksQ1NlKSkpKTtpZihyPm4pdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFg0dCkpKSl9ZWxzZSBuPS0xfWlmKHQhPTEyNSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksVzR0KSkpKTtlLmJtKGEpPyhvPShEaSgpLERpKCksbmV3IFR5KDksbykpLGUuZD1hKzEpOihvPShEaSgpLERpKCksbmV3IFR5KDMsbykpLGUuZD1hKSxvLk9tKHIpLG8uTm0obiksTGkoZSl9fXJldHVybiBvfWZ1bmN0aW9uIERJbihlKXt2YXIgdCxuLHIsYSxvO3N3aXRjaChuPWwoUShlLChmdCgpLEx1KSksMjEpLHQ9T3Eodjh0KSxhPWwoUShlLChOdCgpLHA0KSksMzQ2KSxhPT0ocnAoKSxBMikmJkRoKHQsdzh0KSxSdChCdChRKGUsaWRlKSkpP2ZpKHQsKHVvKCkseTApLCh2bygpLGQxZSkpOmZpKHQsKHVvKCksYnUpLCh2bygpLGQxZSkpLFEoZSwoUUgoKSxrTSkpIT1udWxsJiZEaCh0LHk4dCksKFJ0KEJ0KFEoZSxSTWUpKSl8fFJ0KEJ0KFEoZSxOTWUpKSkpJiZ5bCh0LCh1bygpLG1jKSwodm8oKSxPQWUpKSxsKFEoZSxSaCksODgpLmcpe2Nhc2UgMjpjYXNlIDM6Y2FzZSA0OnlsKGZpKHQsKHVvKCkseTApLCh2bygpLFBBZSkpLG1jLE5BZSl9c3dpdGNoKG4uSGMoKEhvKCksZVcpKSYmeWwoZmkoZmkodCwodW8oKSx5MCksKHZvKCksSUFlKSksX3UsTUFlKSxtYyxEQWUpLHFlKFEoZSx6YikpIT09cWUoKE5mKCksQVcpKSYmZmkodCwodW8oKSxidSksKHZvKCksWEFlKSksbi5IYyhuVykmJihmaSh0LCh1bygpLHkwKSwodm8oKSxlTGUpKSxmaSh0LHZnLEpBZSksZmkodCxidSxaQWUpKSxxZShRKGUsbFcpKSE9PXFlKCh6RSgpLFZMKSkmJnFlKFEoZSxicCkpIT09cWUoKGlwKCksSkIpKSYmeWwodCwodW8oKSxtYyksKHZvKCksVkFlKSksUnQoQnQoUShlLEJNZSkpKSYmZmkodCwodW8oKSxidSksKHZvKCksSEFlKSksUnQoQnQoUShlLGVkZSkpKSYmZmkodCwodW8oKSxidSksKHZvKCksdExlKSksVlRuKGUpJiYocWUoUShlLHA0KSk9PT1xZShBMik/cj1sKFEoZSxUQiksMjk5KTpyPWwoUShlLFoxZSksMjk5KSxvPXI9PSh2RSgpLFIxZSk/KHZvKCksUUFlKToodm8oKSxpTGUpLGZpKHQsKHVvKCksX3UpLG8pKSxsKFEoZSxsRGUpLDM4OCkuZyl7Y2FzZSAxOmZpKHQsKHVvKCksX3UpLCh2bygpLG5MZSkpO2JyZWFrO2Nhc2UgMjp5bChmaShmaSh0LCh1bygpLGJ1KSwodm8oKSxTQWUpKSxfdSxfQWUpLG1jLEFBZSl9cmV0dXJuIHFlKFEoZSx5ZykpIT09cWUoKEVkKCksRTIpKSYmZmkodCwodW8oKSxidSksKHZvKCksckxlKSksdH1mdW5jdGlvbiBkd3QoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2lmKEh1KGUuYSx0KSl7aWYoVzAobChjcihlLmEsdCksNDkpLG4pKXJldHVybiAxfWVsc2Uga2koZS5hLHQsbmV3IEtzKTtpZihIdShlLmEsbikpe2lmKFcwKGwoY3IoZS5hLG4pLDQ5KSx0KSlyZXR1cm4tMX1lbHNlIGtpKGUuYSxuLG5ldyBLcyk7aWYoSHUoZS5lLHQpKXtpZihXMChsKGNyKGUuZSx0KSw0OSksbikpcmV0dXJuLTF9ZWxzZSBraShlLmUsdCxuZXcgS3MpO2lmKEh1KGUuZSxuKSl7aWYoVzAobChjcihlLmEsbiksNDkpLHQpKXJldHVybiAxfWVsc2Uga2koZS5lLG4sbmV3IEtzKTtpZihlLmM9PShFZCgpLHlkZSl8fCFucyh0LChmdCgpLEtpKSl8fCFucyhuLChmdCgpLEtpKSkpe2ZvcihMPW51bGwsRT1uZXcgRyh0LmopO0UuYTxFLmMuYy5sZW5ndGg7KWc9bChyZShFKSwxMiksZy5lLmMubGVuZ3RoPT0wfHxsKGp0KGcuZSwwKSwxOCkuYy5pLmMhPXQuYyYmKEw9bChqdChnLmUsMCksMTgpLmMpO2Zvcih6PW51bGwsdz1uZXcgRyhuLmopO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMiksZy5lLmMubGVuZ3RoPT0wfHxsKGp0KGcuZSwwKSwxOCkuYy5pLmMhPW4uYyYmKHo9bChqdChnLmUsMCksMTgpLmMpO2lmKEwmJnope2lmKEM9TC5pLEI9ei5pLEMmJkM9PUIpe2ZvcihKPW5ldyBHKEMuaik7Si5hPEouYy5jLmxlbmd0aDspe2lmKFY9bChyZShKKSwxMiksVj09TClyZXR1cm4gV0UoZSxuLHQpLC0xO2lmKFY9PXopcmV0dXJuIFdFKGUsdCxuKSwxfXJldHVybiBydShTdWUoZSx0KSxTdWUoZSxuKSl9Zm9yKGZlPWUuZCxUZT0wLE1lPWZlLmxlbmd0aDtUZTxNZTsrK1RlKXtpZih0ZT1mZVtUZV0sdGU9PUMpcmV0dXJuIFdFKGUsbix0KSwtMTtpZih0ZT09QilyZXR1cm4gV0UoZSx0LG4pLDF9fWlmKCFucyh0LChmdCgpLEtpKSl8fCFucyhuLEtpKSlyZXR1cm4gYT1TdWUoZSx0KSxmPVN1ZShlLG4pLGE+Zj9XRShlLHQsbik6V0UoZSxuLHQpLGE8Zj8tMTphPmY/MTowfXJldHVybiByPWwoUSh0LChmdCgpLEtpKSksMTcpLmEsbz1sKFEobixLaSksMTcpLmEscj5vP1dFKGUsdCxuKTpXRShlLG4sdCkscjxvPy0xOnI+bz8xOjB9ZnVuY3Rpb24gS3coZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKG49PW51bGwpcmV0dXJuIG51bGw7aWYoZS5hIT10LmprKCkpdGhyb3cgdWUobmV3IFluKHlUK3QueGUoKSt0MykpO2lmKERlKHQsNDY5KSl7aWYodGU9a1NuKGwodCw2ODUpLG4pLCF0ZSl0aHJvdyB1ZShuZXcgWW4oemZlK24rIicgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRvciBvZiAnIit0LnhlKCkrIiciKSk7cmV0dXJuIHRlfXN3aXRjaChvMigoRWwoKSxpbyksdCkuTmwoKSl7Y2FzZSAyOntuPVR1KG4sITEpO2JyZWFrfWNhc2UgMzp7bj1UdShuLCEwKTticmVha319aWYocj1vMihpbyx0KS5KbCgpLHIpcmV0dXJuIHIuamsoKS53aSgpLnRpKHIsbik7aWYoQj1vMihpbyx0KS5MbCgpLEIpe2Zvcih0ZT1uZXcgYnQsRT1UY2UobiksQz0wLEw9RS5sZW5ndGg7QzxMOysrQyl3PUVbQ10sdnQodGUsQi5qaygpLndpKCkudGkoQix3KSk7cmV0dXJuIHRlfWlmKEo9bzIoaW8sdCkuTWwoKSwhSi5kYygpKXtmb3IoVj1KLktjKCk7Vi5PYigpOyl7ej1sKFYuUGIoKSwxNTYpO3RyeXtpZih0ZT16LmprKCkud2koKS50aSh6LG4pLHRlIT1udWxsKXJldHVybiB0ZX1jYXRjaChmZSl7aWYoZmU9YnMoZmUpLCFEZShmZSw2MykpdGhyb3cgdWUoZmUpfX10aHJvdyB1ZShuZXcgWW4oemZlK24rIicgZG9lcyBub3QgbWF0Y2ggYW55IG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gZGF0YXR5cGUgJyIrdC54ZSgpKyInIikpfWlmKGwodCw4NDcpLm9rKCksYT1qeW4odC5raygpKSwhYSlyZXR1cm4gbnVsbDtpZihhPT1QTCl7Zj0wO3RyeXtmPU9oKG4sbG8sSWkpJlpzfWNhdGNoKGZlKXtpZihmZT1icyhmZSksRGUoZmUsMTMwKSlvPWlWKG4pLGY9b1swXTtlbHNlIHRocm93IHVlKGZlKX1yZXR1cm4gd04oZil9aWYoYT09Y0spe2ZvcihnPTA7ZzxqTS5sZW5ndGg7KytnKXRyeXtyZXR1cm4gZ2V0KGpNW2ddLG4pfWNhdGNoKGZlKXtpZihmZT1icyhmZSksIURlKGZlLDMzKSl0aHJvdyB1ZShmZSl9dGhyb3cgdWUobmV3IFluKHpmZStuKyInIGlzIG5vdCBhIGRhdGUgZm9ybWF0dGVkIHN0cmluZyBvZiB0aGUgZm9ybSB5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1NaIG9yIGEgdmFsaWQgc3Vic2V0IHRoZXJlb2YiKSl9dGhyb3cgdWUobmV3IFluKHpmZStuKyInIGlzIGludmFsaWQuICIpKX1mdW5jdGlvbiBNbGUoKXtNbGU9VSxYaT1uZXcgQ3cseG4oWGksKEN0KCksZWQpLER1KSx4bihYaSxIZixEdSkseG4oWGksSGYsZmwpLHhuKFhpLHlmLF9sKSx4bihYaSx5ZixEdSkseG4oWGksXzAsRHUpLHhuKFhpLF8wLHFsKSx4bihYaSwkaCxsbCkseG4oWGksJGgsRHUpLHhuKFhpLGhsLEp1KSx4bihYaSxobCxEdSkseG4oWGksaGwscWwpLHhuKFhpLGhsLGxsKSx4bihYaSxKdSxobCkseG4oWGksSnUsZmwpLHhuKFhpLEp1LF9sKSx4bihYaSxKdSxEdSkseG4oWGksQTAsQTApLHhuKFhpLEEwLHFsKSx4bihYaSxBMCxmbCkseG4oWGksemwsemwpLHhuKFhpLHpsLHFsKSx4bihYaSx6bCxfbCkseG4oWGksemgsemgpLHhuKFhpLHpoLGxsKSx4bihYaSx6aCxmbCkseG4oWGkseGYseGYpLHhuKFhpLHhmLGxsKSx4bihYaSx4ZixfbCkseG4oWGkscWwsXzApLHhuKFhpLHFsLGhsKSx4bihYaSxxbCxBMCkseG4oWGkscWwsemwpLHhuKFhpLHFsLER1KSx4bihYaSxxbCxxbCkseG4oWGkscWwsZmwpLHhuKFhpLHFsLF9sKSx4bihYaSxsbCwkaCkseG4oWGksbGwsaGwpLHhuKFhpLGxsLHpoKSx4bihYaSxsbCx4ZikseG4oWGksbGwsbGwpLHhuKFhpLGxsLGZsKSx4bihYaSxsbCxfbCkseG4oWGksbGwsRHUpLHhuKFhpLGZsLEhmKSx4bihYaSxmbCxKdSkseG4oWGksZmwsQTApLHhuKFhpLGZsLHpoKSx4bihYaSxmbCxxbCkseG4oWGksZmwsbGwpLHhuKFhpLGZsLGZsKSx4bihYaSxmbCxEdSkseG4oWGksX2wseWYpLHhuKFhpLF9sLEp1KSx4bihYaSxfbCx6bCkseG4oWGksX2wseGYpLHhuKFhpLF9sLHFsKSx4bihYaSxfbCxsbCkseG4oWGksX2wsX2wpLHhuKFhpLF9sLER1KSx4bihYaSxEdSxlZCkseG4oWGksRHUsSGYpLHhuKFhpLER1LHlmKSx4bihYaSxEdSxfMCkseG4oWGksRHUsJGgpLHhuKFhpLER1LGhsKSx4bihYaSxEdSxKdSkseG4oWGksRHUscWwpLHhuKFhpLER1LGxsKSx4bihYaSxEdSxmbCkseG4oWGksRHUsX2wpLHhuKFhpLER1LER1KX1mdW5jdGlvbiBLa2UoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuO2ZvcihlLmQ9bmV3IGx0KGdzLGdzKSxlLmM9bmV3IGx0KGlhLGlhKSxCPXQuS2MoKTtCLk9iKCk7KWZvcihDPWwoQi5QYigpLDM2KSxNZT1uZXcgRyhDLmEpO01lLmE8TWUuYy5jLmxlbmd0aDspVGU9bChyZShNZSksMTApLGUuZC5hPWIuTWF0aC5taW4oZS5kLmEsVGUubi5hLVRlLmQuYiksZS5kLmI9Yi5NYXRoLm1pbihlLmQuYixUZS5uLmItVGUuZC5kKSxlLmMuYT1iLk1hdGgubWF4KGUuYy5hLFRlLm4uYStUZS5vLmErVGUuZC5jKSxlLmMuYj1iLk1hdGgubWF4KGUuYy5iLFRlLm4uYitUZS5vLmIrVGUuZC5hKTtmb3IoZz1uZXcgUlFlLEw9dC5LYygpO0wuT2IoKTspQz1sKEwuUGIoKSwzNikscj1kSW4oZSxDKSx2dChnLmEsciksci5hPXIuYXwhbChRKHIuYywoZnQoKSxwcCkpLDIxKS5kYygpO2ZvcihlLmI9KE1jZSgpLGNuPW5ldyBxOSxjbi5mPW5ldyByZnQobiksY24uYj15TW4oY24uZixnKSxjbiksSU1uKChWPWUuYixuZXcgTDgsVikpLGUuZT1uZXcgcWEsZS5hPWUuYi5mLmUsZj1uZXcgRyhnLmEpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihhPWwocmUoZiksODU1KSwkZT1kMm4oZS5iLGEpLGNfbihhLmMsJGUuYSwkZS5iKSx0ZT1uZXcgRyhhLmMuYSk7dGUuYTx0ZS5jLmMubGVuZ3RoOylKPWwocmUodGUpLDEwKSxKLms9PShabigpLFVzKSYmKGZlPWo5ZShlLEoubixsKFEoSiwoZnQoKSxXYykpLDY0KSksT2koWTAoSi5uKSxmZSkpO2ZvcihvPW5ldyBHKGcuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSw4NTUpLEU9bmV3IEcoTTRuKGEpKTtFLmE8RS5jLmMubGVuZ3RoOylmb3Iodz1sKHJlKEUpLDE4KSxTdD1uZXcgR3oody5hKSxQayhTdCwwLEkxKHcuYykpLHVpKFN0LEkxKHcuZCkpLHo9bnVsbCxvdD1ScihTdCwwKTtvdC5iIT1vdC5kLmM7KXtpZihaZT1sKEJyKG90KSw4KSwheil7ej1aZTtjb250aW51ZX1XNmUoei5hLFplLmEpPyhlLmUuYT1iLk1hdGgubWluKGUuZS5hLHouYSksZS5hLmE9Yi5NYXRoLm1heChlLmEuYSx6LmEpKTpXNmUoei5iLFplLmIpJiYoZS5lLmI9Yi5NYXRoLm1pbihlLmUuYix6LmIpLGUuYS5iPWIuTWF0aC5tYXgoZS5hLmIsei5iKSksej1aZX1IcShlLmUpLE9pKGUuYSxlLmUpfWZ1bmN0aW9uIElJbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7aWYobj0wLGY9MCxvPXQubGVuZ3RoLGc9bnVsbCxFPW5ldyBTNSxmPG8mJihYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZik9PTQzKSYmKCsrZiwrK24sZjxvJiYoWG4oZix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGYpPT00M3x8KFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKT09NDUpKSkpdGhyb3cgdWUobmV3IGdkKFl3K3QrJyInKSk7Zm9yKDtmPG8mJihYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZikhPTQ2KSYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKSE9MTAxKSYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKSE9NjkpOykrK2Y7aWYoRS5hKz0iIit0Zih0PT1udWxsP3VsOihucih0KSx0KSxuLGYpLGY8byYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKT09NDYpKXtmb3IoKytmLG49ZjtmPG8mJihYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZikhPTEwMSkmJihYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZikhPTY5KTspKytmO2UuZT1mLW4sRS5hKz0iIit0Zih0PT1udWxsP3VsOihucih0KSx0KSxuLGYpfWVsc2UgZS5lPTA7aWYoZjxvJiYoWG4oZix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGYpPT0xMDF8fChYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZik9PTY5KSkmJigrK2Ysbj1mLGY8byYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKT09NDMpJiYoKytmLGY8byYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKSE9NDUpJiYrK24pLGc9KEdhKG4sbyx0Lmxlbmd0aCksdC5zdWJzdHIobixvLW4pKSxlLmU9ZS5lLU9oKGcsbG8sSWkpLGUuZSE9dWEoZS5lKSkpdGhyb3cgdWUobmV3IGdkKCJTY2FsZSBvdXQgb2YgcmFuZ2UuIikpO2lmKHc9RS5hLHcubGVuZ3RoPDE2KXtpZihlLmY9KGZfZT09bnVsbCYmKGZfZT1uZXcgUmVnRXhwKCJeWystXT9cXGQqJCIsImkiKSksZl9lLnRlc3Qodyk/cGFyc2VJbnQodywxMCk6TmFOKSxpc05hTihlLmYpKXRocm93IHVlKG5ldyBnZChZdyt0KyciJykpO2UuYT1nOWUoZS5mKX1lbHNlIGc0bihlLG5ldyBvYih3KSk7Zm9yKGUuZD1FLmEubGVuZ3RoLGE9MDthPEUuYS5sZW5ndGgmJihyPWNvKEUuYSxhKSwhKHIhPTQ1JiZyIT00OCkpOysrYSktLWUuZDtlLmQ9PTAmJihlLmQ9MSl9ZnVuY3Rpb24gT0luKGUpe1dyKGUuYixGZixoZShsZSh6dCwxKSxkdCwyLDYsW24zLCJDb25zaXN0ZW50VHJhbnNpZW50Il0pKSxXcihlLmEsRmYsaGUobGUoenQsMSksZHQsMiw2LFtuMywiV2VsbEZvcm1lZFNvdXJjZVVSSSJdKSksV3IoZS5vLEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIkludGVyZmFjZUlzQWJzdHJhY3QgQXRNb3N0T25lSUQgVW5pcXVlRmVhdHVyZU5hbWVzIFVuaXF1ZU9wZXJhdGlvblNpZ25hdHVyZXMgTm9DaXJjdWxhclN1cGVyVHlwZXMgV2VsbEZvcm1lZE1hcEVudHJ5Q2xhc3MgQ29uc2lzdGVudFN1cGVyVHlwZXMgRGlzam9pbnRGZWF0dXJlQW5kT3BlcmF0aW9uU2lnbmF0dXJlcyJdKSksV3IoZS5wLEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIldlbGxGb3JtZWRJbnN0YW5jZVR5cGVOYW1lIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyJdKSksV3IoZS52LEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIlVuaXF1ZUVudW1lcmF0b3JOYW1lcyBVbmlxdWVFbnVtZXJhdG9yTGl0ZXJhbHMiXSkpLFdyKGUuUixGZixoZShsZSh6dCwxKSxkdCwyLDYsW24zLCJXZWxsRm9ybWVkTmFtZSJdKSksV3IoZS5ULEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIlVuaXF1ZVBhcmFtZXRlck5hbWVzIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyBOb1JlcGVhdGluZ1ZvaWQiXSkpLFdyKGUuVSxGZixoZShsZSh6dCwxKSxkdCwyLDYsW24zLCJXZWxsRm9ybWVkTnNVUkkgV2VsbEZvcm1lZE5zUHJlZml4IFVuaXF1ZVN1YnBhY2thZ2VOYW1lcyBVbmlxdWVDbGFzc2lmaWVyTmFtZXMgVW5pcXVlTnNVUklzIl0pKSxXcihlLlcsRmYsaGUobGUoenQsMSksZHQsMiw2LFtuMywiQ29uc2lzdGVudE9wcG9zaXRlIFNpbmdsZUNvbnRhaW5lciBDb25zaXN0ZW50S2V5cyBDb25zaXN0ZW50VW5pcXVlIENvbnNpc3RlbnRDb250YWluZXIiXSkpLFdyKGUuYmIsRmYsaGUobGUoenQsMSksZHQsMiw2LFtuMywiVmFsaWREZWZhdWx0VmFsdWVMaXRlcmFsIl0pKSxXcihlLmViLEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIlZhbGlkTG93ZXJCb3VuZCBWYWxpZFVwcGVyQm91bmQgQ29uc2lzdGVudEJvdW5kcyBWYWxpZFR5cGUiXSkpLFdyKGUuSCxGZixoZShsZSh6dCwxKSxkdCwyLDYsW24zLCJDb25zaXN0ZW50VHlwZSBDb25zaXN0ZW50Qm91bmRzIENvbnNpc3RlbnRBcmd1bWVudHMiXSkpfWZ1bmN0aW9uIE5JbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW47aWYoIXQuZGMoKSl7aWYoYT1uZXcgYmwsZz1ufHxsKHQuWGIoMCksMTgpLFY9Zy5jLEdBKCksQj1WLmkuaywhKEI9PShabigpLFBzKXx8Qj09QXV8fEI9PVVzfHxCPT1LMSkpdGhyb3cgdWUobmV3IFluKCJUaGUgdGFyZ2V0IG5vZGUgb2YgdGhlIGVkZ2UgbXVzdCBiZSBhIG5vcm1hbCBub2RlIG9yIGEgbm9ydGhTb3V0aFBvcnQuIikpO2ZvcihrbyhhLEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbVi5pLm4sVi5uLFYuYV0pKSksKEN0KCksaGwpLkhjKFYuaikmJih0ZT16ZShHZShRKFYsKGZ0KCkselQpKSkpLEw9bmV3IGx0KEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbVi5pLm4sVi5uLFYuYV0pKS5hLHRlKSxDcyhhLEwsYS5jLmIsYS5jKSksQz1udWxsLHI9ITEsdz10LktjKCk7dy5PYigpOylmPWwody5QYigpLDE4KSxvPWYuYSxvLmIhPTAmJihyPyhFPW1kKE9pKEMsKG1yKG8uYiE9MCksbChvLmEuYS5jLDgpKSksLjUpLENzKGEsRSxhLmMuYixhLmMpLHI9ITEpOnI9ITAsQz1KYSgobXIoby5iIT0wKSxsKG8uYy5iLmMsOCkpKSxLYShhLG8pLENoKG8pKTtKPWcuZCxobC5IYyhKLmopJiYodGU9emUoR2UoUShKLChmdCgpLHpUKSkpKSxMPW5ldyBsdChJYyhoZShsZShFYSwxKSxkdCw4LDAsW0ouaS5uLEoubixKLmFdKSkuYSx0ZSksQ3MoYSxMLGEuYy5iLGEuYykpLGtvKGEsSWMoaGUobGUoRWEsMSksZHQsOCwwLFtKLmkubixKLm4sSi5hXSkpKSxlLmQ9PShTRSgpLF9kZSkmJihmZT0obXIoYS5iIT0wKSxsKGEuYS5hLmMsOCkpLFRlPWwoZmYoYSwxKSw4KSxNZT1uZXcgYm9lKFU3ZShWLmopKSxNZS5hKj01LE1lLmIqPTUsJGU9bWEobmV3IGx0KFRlLmEsVGUuYiksZmUpLFplPW5ldyBsdChob2UoTWUuYSwkZS5hKSxob2UoTWUuYiwkZS5iKSksT2koWmUsZmUpLG90PVJyKGEsMSksek8ob3QsWmUpLFN0PShtcihhLmIhPTApLGwoYS5jLmIuYyw4KSksY249bChmZihhLGEuYi0yKSw4KSxNZT1uZXcgYm9lKFU3ZShKLmopKSxNZS5hKj01LE1lLmIqPTUsJGU9bWEobmV3IGx0KGNuLmEsY24uYiksU3QpLGFuPW5ldyBsdChob2UoTWUuYSwkZS5hKSxob2UoTWUuYiwkZS5iKSksT2koYW4sU3QpLFBrKGEsYS5iLTEsYW4pKSx6PW5ldyBTa2UoYSksS2EoZy5hLExkdCh6KSl9fWZ1bmN0aW9uIFBJbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2ksd3MsVmwsbGMsSGgsZjcsUDIsTDAsTTA7aWYoTWU9bChPZSgoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLDApLDg0KSxaZT1NZS5uaCgpLG90PU1lLm9oKCksJGU9TWUubWgoKS8yLEo9TWUubGgoKS8yLERlKE1lLDE5MykmJihUZT1sKE1lLDEyMyksWmUrPU0xKFRlKS5pLFplKz1NMShUZSkuaSksWmUrPSRlLG90Kz1KLGpuPWwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCksb2k9am4ubmgoKSx3cz1qbi5vaCgpLHVyPWpuLm1oKCkvMixTdD1qbi5saCgpLzIsRGUoam4sMTkzKSYmKEJuPWwoam4sMTIzKSxvaSs9TTEoQm4pLmksb2krPU0xKEJuKS5pKSxvaSs9dXIsd3MrPVN0LCghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSkuaT09MClnPShyYigpLEU9bmV3IHJrLEUpLHFyKCghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSksZyk7ZWxzZSBpZigoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpLmk+MSlmb3IoVj1uZXcgcTgoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKSk7Vi5lIT1WLmkuZ2MoKTspakEoVik7Zm9yKGY9bChPZSgoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpLDApLDE2NiksdGU9b2ksb2k+WmUrJGU/dGU9WmUrJGU6b2k8WmUtJGUmJih0ZT1aZS0kZSksZmU9d3Msd3M+b3QrSj9mZT1vdCtKOndzPG90LUomJihmZT1vdC1KKSx0ZT5aZS0kZSYmdGU8WmUrJGUmJmZlPm90LUomJmZlPG90K0omJih0ZT1aZSskZSksb0UoZix0ZSksdUUoZixmZSksY249WmUsWmU+b2krdXI/Y249b2krdXI6WmU8b2ktdXImJihjbj1vaS11ciksYW49b3Qsb3Q+d3MrU3Q/YW49d3MrU3Q6b3Q8d3MtU3QmJihhbj13cy1TdCksY24+b2ktdXImJmNuPG9pK3VyJiZhbj53cy1TdCYmYW48d3MrU3QmJihhbj13cytTdCksYUUoZixjbiksY0UoZixhbiksJHIoKCFmLmEmJihmLmE9bmV3IFlzKHFoLGYsNSkpLGYuYSkpLG89YVUodCw1KSxNZT09am4mJisrbyxIaD1jbi10ZSxMMD1hbi1mZSxWbD1iLk1hdGguc3FydChIaCpIaCtMMCpMMCksTD1WbCouMjAwMDAwMDAyOTgwMjMyMjQsZjc9SGgvKG8rMSksTTA9TDAvKG8rMSksbGM9dGUsUDI9ZmUsQz0wO0M8bztDKyspbGMrPWY3LFAyKz1NMCxCPWxjK0psKHQsMjQpKk1QKkwtTC8yLEI8MD9CPTE6Qj5uJiYoQj1uLTEpLHo9UDIrSmwodCwyNCkqTVAqTC1MLzIsejwwP3o9MTp6PnImJih6PXItMSksYT0ocmIoKSx3PW5ldyBBUyx3KSxkVihhLEIpLGZWKGEseikscXIoKCFmLmEmJihmLmE9bmV3IFlzKHFoLGYsNSkpLGYuYSksYSl9ZnVuY3Rpb24gZ3d0KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSx0aCksIkVMSyBSZWN0YW5nbGUgUGFja2luZyIpLCJBbGdvcml0aG0gZm9yIHBhY2tpbmcgb2YgdW5jb25uZWN0ZWQgYm94ZXMsIGkuZS4gZ3JhcGhzIHdpdGhvdXQgZWRnZXMuIFRoZSBnaXZlbiBvcmRlciBvZiB0aGUgYm94ZXMgaXMgYWx3YXlzIHByZXNlcnZlZCBhbmQgdGhlIG1haW4gcmVhZGluZyBkaXJlY3Rpb24gb2YgdGhlIGJveGVzIGlzIGxlZnQgdG8gcmlnaHQuIFRoZSBhbGdvcml0aG0gaXMgZGl2aWRlZCBpbnRvIHR3byBwaGFzZXMuIE9uZSBwaGFzZSBhcHByb3hpbWF0ZXMgdGhlIHdpZHRoIGluIHdoaWNoIHRoZSByZWN0YW5nbGVzIGNhbiBiZSBwbGFjZWQuIFRoZSBuZXh0IHBoYXNlIHBsYWNlcyB0aGUgcmVjdGFuZ2xlcyBpbiByb3dzIHVzaW5nIHRoZSBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgd2lkdGggYXMgYm91bmRpbmcgd2lkdGggYW5kIGJ1bmRsZXMgcmVjdGFuZ2xlcyB3aXRoIGEgc2ltaWxhciBoZWlnaHQgaW4gYmxvY2tzLiBBIGNvbXBhY3Rpb24gc3RlcCByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nLiBGaW5hbGx5LCB0aGUgcmVjdGFuZ2xlcyBhcmUgZXhwYW5kZWQgdG8gZmlsbCB0aGVpciBib3VuZGluZyBib3ggYW5kIGVsaW1pbmF0ZSBlbXB0eSB1bnVzZWQgc3BhY2VzLiIpLG5ldyBjOCkpKSxndChlLHRoLE94LDEuMyksZ3QoZSx0aCxoVCwoSG4oKSwhMSkpLGd0KGUsdGgsWHcsaU9lKSxndChlLHRoLEp5LDE1KSxndChlLHRoLFNHLEl0KERDdCkpLGd0KGUsdGgseDYsSXQoTkN0KSksZ3QoZSx0aCxQeCxJdChCQ3QpKSxndChlLHRoLE54LEl0KEZDdCkpLGd0KGUsdGgsZlQsSXQoT0N0KSksZ3QoZSx0aCxmTCxJdChsZ2UpKSxndChlLHRoLGRULEl0KFJDdCkpLGd0KGUsdGgsakNlLEl0KGNPZSkpLGd0KGUsdGgsJENlLEl0KG9PZSkpLGd0KGUsdGgsUkNlLEl0KGZnZSkpLGd0KGUsdGgsRkNlLEl0KHVPZSkpLGd0KGUsdGgsekNlLEl0KHJPZSkpLGd0KGUsdGgscUNlLEl0KGhnZSkpLGd0KGUsdGgsSENlLEl0KG5PZSkpLGd0KGUsdGgsVkNlLEl0KGFPZSkpLGd0KGUsdGgsaEwsSXQodE9lKSksZ3QoZSx0aCxBRyxJdChJQ3QpKSxndChlLHRoLFBDZSxJdChqQikpLGd0KGUsdGgsTkNlLEl0KGVPZSkpLGd0KGUsdGgsQkNlLEl0KCRCKSksZ3QoZSx0aCxPQ2UsSXQoc09lKSl9ZnVuY3Rpb24gRGxlKGUsdCl7YmxlKCk7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbix1cixvaTtpZihjbj1lLmUsVj1lLmQsYT1lLmEsY249PTApc3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4iMCI7Y2FzZSAxOnJldHVybiBzVDtjYXNlIDI6cmV0dXJuIjAuMDAiO2Nhc2UgMzpyZXR1cm4iMC4wMDAiO2Nhc2UgNDpyZXR1cm4iMC4wMDAwIjtjYXNlIDU6cmV0dXJuIjAuMDAwMDAiO2Nhc2UgNjpyZXR1cm4iMC4wMDAwMDAiO2RlZmF1bHQ6cmV0dXJuIG90PW5ldyB0Yix0PDA/b3QuYSs9IjBFKyI6b3QuYSs9IjBFIixvdC5hKz0tdCxvdC5hfWlmKE1lPVYqMTArMSs3LCRlPVdlKGtmLEFkLDI4LE1lKzEsMTUsMSksbj1NZSxWPT0xKWlmKGc9YVswXSxnPDApe29pPXZhKGcsVm8pO2RvIEo9b2ksb2k9S04ob2ksMTApLCRlWy0tbl09NDgrWXIoRGYoSixtbyhvaSwxMCkpKSZaczt3aGlsZShpdShvaSwwKSE9MCl9ZWxzZXtvaT1nO2RvIEo9b2ksb2k9b2kvMTB8MCwkZVstLW5dPTQ4KyhKLW9pKjEwKSZaczt3aGlsZShvaSE9MCl9ZWxzZXtCbj1XZShWcixkaSwyOCxWLDE1LDEpLHVyPVYscHUoYSwwLEJuLDAsdXIpO2U6Zm9yKDs7KXtmb3IoU3Q9MCxFPXVyLTE7RT49MDtFLS0pam49Ym8obDAoU3QsMzIpLHZhKEJuW0VdLFZvKSksZmU9eXhuKGpuKSxCbltFXT1ZcihmZSksU3Q9WXIoYncoZmUsMzIpKTtUZT1ZcihTdCksdGU9bjtkbyAkZVstLW5dPTQ4K1RlJTEwJlpzO3doaWxlKChUZT1UZS8xMHwwKSE9MCYmbiE9MCk7Zm9yKHI9OS10ZStuLHc9MDt3PHImJm4+MDt3KyspJGVbLS1uXT00ODtmb3IoTD11ci0xO0JuW0xdPT0wO0wtLSlpZihMPT0wKWJyZWFrIGU7dXI9TCsxfWZvcig7JGVbbl09PTQ4OykrK259aWYoej1jbjwwLGY9TWUtbi10LTEsdD09MClyZXR1cm4geiYmKCRlWy0tbl09NDUpLElmKCRlLG4sTWUtbik7aWYodD4wJiZmPj0tNil7aWYoZj49MCl7Zm9yKEM9bitmLEI9TWUtMTtCPj1DO0ItLSkkZVtCKzFdPSRlW0JdO3JldHVybiAkZVsrK0NdPTQ2LHomJigkZVstLW5dPTQ1KSxJZigkZSxuLE1lLW4rMSl9Zm9yKEw9MjtMPC1mKzE7TCsrKSRlWy0tbl09NDg7cmV0dXJuICRlWy0tbl09NDYsJGVbLS1uXT00OCx6JiYoJGVbLS1uXT00NSksSWYoJGUsbixNZS1uKX1yZXR1cm4gYW49bisxLG89TWUsWmU9bmV3IFM1LHomJihaZS5hKz0iLSIpLG8tYW4+PTE/KGhiKFplLCRlW25dKSxaZS5hKz0iLiIsWmUuYSs9SWYoJGUsbisxLE1lLW4tMSkpOlplLmErPUlmKCRlLG4sTWUtbiksWmUuYSs9IkUiLGY+MCYmKFplLmErPSIrIiksWmUuYSs9IiIrZixaZS5hfWZ1bmN0aW9uIHB3dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7c3dpdGNoKGUuYz10LGUuZz1uZXcgUHIsbj0oYXcoKSxuZXcgSnYoZS5jKSkscj1uZXcgZV8obiksUzhlKHIpLE1lPWVpKGF0KGUuYywoWU4oKSxBT2UpKSksdz1sKGF0KGUuYyxrZ2UpLDMyNCksWmU9bChhdChlLmMsRWdlKSw0MzcpLGY9bChhdChlLmMsQ09lKSw0OTApLCRlPWwoYXQoZS5jLHhnZSksNDM4KSxlLmo9emUoR2UoYXQoZS5jLEpDdCkpKSxnPWUuYSx3Lmcpe2Nhc2UgMDpnPWUuYTticmVhaztjYXNlIDE6Zz1lLmI7YnJlYWs7Y2FzZSAyOmc9ZS5pO2JyZWFrO2Nhc2UgMzpnPWUuZTticmVhaztjYXNlIDQ6Zz1lLmY7YnJlYWs7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oRkcrKHcuZiE9bnVsbD93LmY6IiIrdy5nKSkpfWlmKGUuZD1uZXcgY290KGcsWmUsZikscnQoZS5kLChwRSgpLGpMKSxCdChhdChlLmMsWEN0KSkpLGUuZC5jPVJ0KEJ0KGF0KGUuYyxTT2UpKSksQUgoZS5jKS5pPT0wKXJldHVybiBlLmQ7Zm9yKEw9bmV3IG9yKEFIKGUuYykpO0wuZSE9TC5pLmdjKCk7KXtmb3IoQz1sKGdyKEwpLDI3KSx6PUMuZy8yLEI9Qy5mLzIsb3Q9bmV3IGx0KEMuaSt6LEMuaitCKTtIdShlLmcsb3QpOylkdyhvdCwoYi5NYXRoLnJhbmRvbSgpLS41KSpEZCwoYi5NYXRoLnJhbmRvbSgpLS41KSpEZCk7Sj1sKGF0KEMsKHBpKCksdEMpKSwxNDApLHRlPW5ldyBrb3Qob3QsbmV3IGVmKG90LmEtei1lLmovMi1KLmIsb3QuYi1CLWUuai8yLUouZCxDLmcrZS5qKyhKLmIrSi5jKSxDLmYrZS5qKyhKLmQrSi5hKSkpLHZ0KGUuZC5pLHRlKSxraShlLmcsb3QsbmV3IGNhKHRlLEMpKX1zd2l0Y2goJGUuZyl7Y2FzZSAwOmlmKE1lPT1udWxsKWUuZC5kPWwoanQoZS5kLmksMCksNjgpO2Vsc2UgZm9yKFRlPW5ldyBHKGUuZC5pKTtUZS5hPFRlLmMuYy5sZW5ndGg7KXRlPWwocmUoVGUpLDY4KSxWPWwobChjcihlLmcsdGUuYSksNDIpLmIsMjcpLmpoKCksViE9bnVsbCYmdm4oVixNZSkmJihlLmQuZD10ZSk7YnJlYWs7Y2FzZSAxOmZvcihhPW5ldyBsdChlLmMuZyxlLmMuZiksYS5hKj0uNSxhLmIqPS41LGR3KGEsZS5jLmksZS5jLmopLG89Z3MsZmU9bmV3IEcoZS5kLmkpO2ZlLmE8ZmUuYy5jLmxlbmd0aDspdGU9bChyZShmZSksNjgpLEU9cGIodGUuYSxhKSxFPG8mJihvPUUsZS5kLmQ9dGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKEZHKygkZS5mIT1udWxsPyRlLmY6IiIrJGUuZykpKX1yZXR1cm4gZS5kfWZ1bmN0aW9uIEJJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKEI9MCxhPW5ldyBvcigoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpO2EuZSE9YS5pLmdjKCk7KXI9bChncihhKSwyNyksUnQoQnQoYXQociwoTnQoKSxtdikpKSl8fChDPWRzKHIpLChxZShhdChDLHlnKSkhPT1xZSgoRWQoKSxFMikpfHxxZShhdChDLGR2KSk9PT1xZSgobDIoKSxCVCkpfHxxZShhdChDLGR2KSk9PT1xZSgobDIoKSxQVCkpfHxSdChCdChhdChDLGYzKSkpfHxxZShhdChDLGc0KSkhPT1xZSgoS20oKSxjNCkpfHxxZShhdChDLHpiKSk9PT1xZSgoTmYoKSx2MykpfHxxZShhdChDLHpiKSk9PT1xZSgoTmYoKSx4NCkpfHxxZShhdChDLHB2KSk9PT1xZSgocDIoKSxXVCkpfHxxZShhdChDLHB2KSk9PT1xZSgocDIoKSxZVCkpKSYmIVJ0KEJ0KGF0KHIsZlcpKSkmJihIaShyLChmdCgpLEtpKSxwdChCKSksKytCKSxjd3QoZSxyLG4pKTtmb3IoQj0wLEU9bmV3IG9yKCghdC5iJiYodC5iPW5ldyBudChqcyx0LDEyLDMpKSx0LmIpKTtFLmUhPUUuaS5nYygpOylnPWwoZ3IoRSksNzQpLChxZShhdCh0LChOdCgpLHlnKSkpIT09cWUoKEVkKCksRTIpKXx8cWUoYXQodCxkdikpPT09cWUoKGwyKCksQlQpKXx8cWUoYXQodCxkdikpPT09cWUoKGwyKCksUFQpKXx8UnQoQnQoYXQodCxmMykpKXx8cWUoYXQodCxnNCkpIT09cWUoKEttKCksYzQpKXx8cWUoYXQodCx6YikpPT09cWUoKE5mKCksdjMpKXx8cWUoYXQodCx6YikpPT09cWUoKE5mKCkseDQpKXx8cWUoYXQodCxwdikpPT09cWUoKHAyKCksV1QpKXx8cWUoYXQodCxwdikpPT09cWUoKHAyKCksWVQpKSkmJihIaShnLChmdCgpLEtpKSxwdChCKSksKytCKSxKPWNnKGcpLHRlPUViKGcpLEw9UnQoQnQoYXQoSixiNCkpKSxWPSFSdChCdChhdChnLG12KSkpLHo9TCYmcXcoZykmJlJ0KEJ0KGF0KGcsZ3YpKSksbz1kcyhKKT09dCYmZHMoSik9PWRzKHRlKSxmPShkcyhKKT09dCYmdGU9PXQpXihkcyh0ZSk9PXQmJko9PXQpLFYmJiF6JiYoZnx8bykmJldrZShlLGcsdCxuKTtpZihkcyh0KSlmb3Iodz1uZXcgb3IoUGF0KGRzKHQpKSk7dy5lIT13LmkuZ2MoKTspZz1sKGdyKHcpLDc0KSxKPWNnKGcpLEo9PXQmJnF3KGcpJiYoej1SdChCdChhdChKLChOdCgpLGI0KSkpKSYmUnQoQnQoYXQoZyxndikpKSx6JiZXa2UoZSxnLHQsbikpfWZ1bmN0aW9uIEZJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2ksd3MsVmwsbGMsSGg7Zm9yKG4uVWcoIkdyZWVkeSBjeWNsZSByZW1vdmFsIiwxKSxNZT10LmEsSGg9TWUuYy5sZW5ndGgsZS5hPVdlKFZyLGRpLDI4LEhoLDE1LDEpLGUuYz1XZShWcixkaSwyOCxIaCwxNSwxKSxlLmI9V2UoVnIsZGksMjgsSGgsMTUsMSksRT0wLGZlPW5ldyBHKE1lKTtmZS5hPGZlLmMuYy5sZW5ndGg7KXtmb3IoSj1sKHJlKGZlKSwxMCksSi5wPUUsYW49bmV3IEcoSi5qKTthbi5hPGFuLmMuYy5sZW5ndGg7KXtmb3Iob3Q9bChyZShhbiksMTIpLGc9bmV3IEcob3QuZSk7Zy5hPGcuYy5jLmxlbmd0aDspcj1sKHJlKGcpLDE4KSxyLmMuaSE9SiYmKHVyPWwoUShyLChOdCgpLFVUKSksMTcpLmEsZS5hW0VdKz11cj4wP3VyKzE6MSk7Zm9yKGY9bmV3IEcob3QuZyk7Zi5hPGYuYy5jLmxlbmd0aDspcj1sKHJlKGYpLDE4KSxyLmQuaSE9SiYmKHVyPWwoUShyLChOdCgpLFVUKSksMTcpLmEsZS5jW0VdKz11cj4wP3VyKzE6MSl9ZS5jW0VdPT0wP3VpKGUuZSxKKTplLmFbRV09PTAmJnVpKGUuZixKKSwrK0V9Zm9yKFY9LTEsej0xLEw9bmV3IGJ0LGUuZD1sKFEodCwoZnQoKSxYeCkpLDIzNCk7SGg+MDspe2Zvcig7ZS5lLmIhPTA7KXdzPWwoa2FlKGUuZSksMTApLGUuYlt3cy5wXT1WLS0scGtlKGUsd3MpLC0tSGg7Zm9yKDtlLmYuYiE9MDspVmw9bChrYWUoZS5mKSwxMCksZS5iW1ZsLnBdPXorKyxwa2UoZSxWbCksLS1IaDtpZihIaD4wKXtmb3IoQj1sbyxUZT1uZXcgRyhNZSk7VGUuYTxUZS5jLmMubGVuZ3RoOylKPWwocmUoVGUpLDEwKSxlLmJbSi5wXT09MCYmKCRlPWUuY1tKLnBdLWUuYVtKLnBdLCRlPj1CJiYoJGU+QiYmKEwuYy5sZW5ndGg9MCxCPSRlKSwkbihMLmMsSikpKTtDPWUuc2coTCksZS5iW0MucF09eisrLHBrZShlLEMpLC0tSGh9fWZvcihvaT1NZS5jLmxlbmd0aCsxLEU9MDtFPE1lLmMubGVuZ3RoO0UrKyllLmJbRV08MCYmKGUuYltFXSs9b2kpO2Zvcih0ZT1uZXcgRyhNZSk7dGUuYTx0ZS5jLmMubGVuZ3RoOylmb3IoSj1sKHJlKHRlKSwxMCksam49VGN0KEouaiksU3Q9am4sY249MCxCbj1TdC5sZW5ndGg7Y248Qm47Kytjbilmb3Iob3Q9U3RbY25dLFplPWtkKG90LmcpLGE9WmUsbz0wLHc9YS5sZW5ndGg7bzx3OysrbylyPWFbb10sbGM9ci5kLmkucCxlLmJbSi5wXT5lLmJbbGNdJiYoVXcociwhMCkscnQodCx5QiwoSG4oKSwhMCkpKTtlLmE9bnVsbCxlLmM9bnVsbCxlLmI9bnVsbCxDaChlLmYpLENoKGUuZSksbi5WZygpfWZ1bmN0aW9uIGJ3dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7Zm9yKFplPWwoT2UoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKSwwKSwxNjYpLEM9bmV3IGJsLCRlPW5ldyBQcixvdD1DbXQoWmUpLGp1KCRlLmYsWmUsb3QpLEI9bmV3IFByLHI9bmV3IG9zLFY9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbKCF0LmQmJih0LmQ9bmV3IExuKGpzLHQsOCw1KSksdC5kKSwoIXQuZSYmKHQuZT1uZXcgTG4oanMsdCw3LDQpKSx0LmUpXSkpKTtqcihWKTspe2lmKHo9bCh4cihWKSw3NCksKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pIT0xKXRocm93IHVlKG5ldyBZbihuNHQrKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pKSk7eiE9ZSYmKHRlPWwoT2UoKCF6LmEmJih6LmE9bmV3IG50KGNzLHosNiw2KSksei5hKSwwKSwxNjYpLENzKHIsdGUsci5jLmIsci5jKSxKPWwoaGMoem8oJGUuZix0ZSkpLDEzKSxKfHwoSj1DbXQodGUpLGp1KCRlLmYsdGUsSikpLEw9bj9tYShuZXcgRW8obChqdChvdCxvdC5jLmxlbmd0aC0xKSw4KSksbChqdChKLEouYy5sZW5ndGgtMSksOCkpOm1hKG5ldyBFbygoU24oMCxvdC5jLmxlbmd0aCksbChvdC5jWzBdLDgpKSksKFNuKDAsSi5jLmxlbmd0aCksbChKLmNbMF0sOCkpKSxqdShCLmYsdGUsTCkpfWlmKHIuYiE9MClmb3IoZmU9bChqdChvdCxuP290LmMubGVuZ3RoLTE6MCksOCksRT0xO0U8b3QuYy5sZW5ndGg7RSsrKXtmb3IoVGU9bChqdChvdCxuP290LmMubGVuZ3RoLTEtRTpFKSw4KSxhPVJyKHIsMCk7YS5iIT1hLmQuYzspdGU9bChCcihhKSwxNjYpLEo9bChoYyh6bygkZS5mLHRlKSksMTMpLEouYy5sZW5ndGg8PUU/WW9lKGEpOihNZT1PaShuZXcgRW8obChqdChKLG4/Si5jLmxlbmd0aC0xLUU6RSksOCkpLGwoaGMoem8oQi5mLHRlKSksOCkpLChUZS5hIT1NZS5hfHxUZS5iIT1NZS5iKSYmKG89VGUuYS1mZS5hLGc9VGUuYi1mZS5iLGY9TWUuYS1mZS5hLHc9TWUuYi1mZS5iLGYqZz09dypvJiYobz09MHx8aXNOYU4obyk/bzpvPDA/LTE6MSk9PShmPT0wfHxpc05hTihmKT9mOmY8MD8tMToxKSYmKGc9PTB8fGlzTmFOKGcpP2c6ZzwwPy0xOjEpPT0odz09MHx8aXNOYU4odyk/dzp3PDA/LTE6MSk/KGIuTWF0aC5hYnMobyk8Yi5NYXRoLmFicyhmKXx8Yi5NYXRoLmFicyhnKTxiLk1hdGguYWJzKHcpKSYmQ3MoQyxUZSxDLmMuYixDLmMpOkU+MSYmQ3MoQyxmZSxDLmMuYixDLmMpLFlvZShhKSkpO2ZlPVRlfXJldHVybiBDfWZ1bmN0aW9uIG13dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm47Zm9yKG4uVWcobXl0LDEpLEJuPWwoeWMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHQsMTYpKSxuZXcgb25lKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSksQz1sKHljKEZpKG5ldyBibihudWxsLG5ldyBrbih0LDE2KSksbmV3IHZYZSh0KSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksVj1sKHljKEZpKG5ldyBibihudWxsLG5ldyBrbih0LDE2KSksbmV3IG1YZSh0KSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksSj1XZShQVyxJRyw0MCx0LmdjKCksMCwxKSxmPTA7ZjxDLmdjKCk7ZisrKWE9bChDLlhiKGYpLDQwKSxhbj1sKFEoYSwoSGMoKSxXNikpLDE3KS5hLGFuPj0wJiZhbjxDLmdjKCkmJiFKW2FuXSYmKEpbYW5dPWEsQy5nZChmKSwtLWYpO2ZvcihnPTA7ZzxDLmdjKCk7ZysrKWZvcihhPWwoQy5YYihnKSw0MCksYW49bChRKGEsKEhjKCksVzYpKSwxNykuYSxCPTA7O0IrKyl7aWYoej1hbitCLHo8Si5sZW5ndGgmJno+PTAmJiFKW3pdKXtKW3pdPWEsQy5nZChnKSwtLWc7YnJlYWt9aWYoej1hbi1CLHo8Si5sZW5ndGgmJno+PTAmJiFKW3pdKXtKW3pdPWEsQy5nZChnKSwtLWc7YnJlYWt9fWZvcihWLmpkKG5ldyBjbmUpLHc9Si5sZW5ndGgtMTt3Pj0wO3ctLSkhSlt3XSYmIVYuZGMoKSYmKEpbd109bChWLlhiKDApLDQwKSxWLmdkKDApKTtmb3IoRT0wO0U8Si5sZW5ndGg7RSsrKSFKW0VdJiYhQm4uZGMoKSYmKEpbRV09bChCbi5YYigwKSw0MCksQm4uZ2QoMCkpO2ZvcihvPTA7bzxKLmxlbmd0aDtvKyspcnQoSltvXSwoUWkoKSxwTSkscHQobykpO2ZvcihMPWwoQzVuKEZpKG5ldyBibihudWxsLG5ldyBrbih0LDE2KSksbmV3IHVuZSkpLDUzNCksb3Q9TCxTdD0wLGNuPW90Lmxlbmd0aDtTdDxjbjsrK1N0KXtmb3IoWmU9b3RbU3RdLHI9cGNlKFplKSxtd3QoZSxyLG4uZWgoMS9MLmxlbmd0aHwwKSksQ24oKSwkbShyLG5ldyBOaWUoKFFpKCkscE0pKSksdGU9bmV3IG9zLCRlPVJyKHIsMCk7JGUuYiE9JGUuZC5jOylmb3IoTWU9bChCcigkZSksNDApLFRlPVJyKFplLmQsMCk7VGUuYiE9VGUuZC5jOylmZT1sKEJyKFRlKSw2NSksZmUuYz09TWUmJkNzKHRlLGZlLHRlLmMuYix0ZS5jKTtDaChaZS5kKSxLYShaZS5kLHRlKX1uLlZnKCl9ZnVuY3Rpb24gdnd0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZTtmb3Iocj1uZXcgYnQsZz1uZXcgYnQsdGU9dC8yLHo9ZS5nYygpLGE9bChlLlhiKDApLDgpLGZlPWwoZS5YYigxKSw4KSxWPUt1ZShhLmEsYS5iLGZlLmEsZmUuYix0ZSksdnQociwoU24oMCxWLmMubGVuZ3RoKSxsKFYuY1swXSw4KSkpLHZ0KGcsKFNuKDEsVi5jLmxlbmd0aCksbChWLmNbMV0sOCkpKSxFPTI7RTx6O0UrKylKPWEsYT1mZSxmZT1sKGUuWGIoRSksOCksVj1LdWUoYS5hLGEuYixKLmEsSi5iLHRlKSx2dChyLChTbigxLFYuYy5sZW5ndGgpLGwoVi5jWzFdLDgpKSksdnQoZywoU24oMCxWLmMubGVuZ3RoKSxsKFYuY1swXSw4KSkpLFY9S3VlKGEuYSxhLmIsZmUuYSxmZS5iLHRlKSx2dChyLChTbigwLFYuYy5sZW5ndGgpLGwoVi5jWzBdLDgpKSksdnQoZywoU24oMSxWLmMubGVuZ3RoKSxsKFYuY1sxXSw4KSkpO2ZvcihWPUt1ZShmZS5hLGZlLmIsYS5hLGEuYix0ZSksdnQociwoU24oMSxWLmMubGVuZ3RoKSxsKFYuY1sxXSw4KSkpLHZ0KGcsKFNuKDAsVi5jLmxlbmd0aCksbChWLmNbMF0sOCkpKSxuPW5ldyBibCxmPW5ldyBidCx1aShuLChTbigwLHIuYy5sZW5ndGgpLGwoci5jWzBdLDgpKSksQz0xO0M8ci5jLmxlbmd0aC0yO0MrPTIpbz0oU24oQyxyLmMubGVuZ3RoKSxsKHIuY1tDXSw4KSksQj1FcHQoKFNuKEMtMSxyLmMubGVuZ3RoKSxsKHIuY1tDLTFdLDgpKSxvLChTbihDKzEsci5jLmxlbmd0aCksbChyLmNbQysxXSw4KSksKFNuKEMrMixyLmMubGVuZ3RoKSxsKHIuY1tDKzJdLDgpKSksIWlzRmluaXRlKEIuYSl8fCFpc0Zpbml0ZShCLmIpP0NzKG4sbyxuLmMuYixuLmMpOkNzKG4sQixuLmMuYixuLmMpO2Zvcih1aShuLGwoanQocixyLmMubGVuZ3RoLTEpLDgpKSx2dChmLChTbigwLGcuYy5sZW5ndGgpLGwoZy5jWzBdLDgpKSksTD0xO0w8Zy5jLmxlbmd0aC0yO0wrPTIpbz0oU24oTCxnLmMubGVuZ3RoKSxsKGcuY1tMXSw4KSksQj1FcHQoKFNuKEwtMSxnLmMubGVuZ3RoKSxsKGcuY1tMLTFdLDgpKSxvLChTbihMKzEsZy5jLmxlbmd0aCksbChnLmNbTCsxXSw4KSksKFNuKEwrMixnLmMubGVuZ3RoKSxsKGcuY1tMKzJdLDgpKSksIWlzRmluaXRlKEIuYSl8fCFpc0Zpbml0ZShCLmIpPyRuKGYuYyxvKTokbihmLmMsQik7Zm9yKHZ0KGYsbChqdChnLGcuYy5sZW5ndGgtMSksOCkpLHc9Zi5jLmxlbmd0aC0xO3c+PTA7dy0tKXVpKG4sKFNuKHcsZi5jLmxlbmd0aCksbChmLmNbd10sOCkpKTtyZXR1cm4gbn1mdW5jdGlvbiB3d3QoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlO2ZvcihNZT16ZShHZShhdCh0LCh1ZygpLFQ0KSkpKSx6PXplKEdlKGF0KHQsbU0pKSksQj16ZShHZShhdCh0LFVXKSkpLHY3ZSgoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpLGZlPXV2dCgoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSksTWUsZS5iKSx0ZT0wO3RlPGZlLmMubGVuZ3RoO3RlKyspaWYodz0oU24odGUsZmUuYy5sZW5ndGgpLGwoZmUuY1t0ZV0sMTg2KSksdGUhPTAmJihWPShTbih0ZS0xLGZlLmMubGVuZ3RoKSxsKGZlLmNbdGUtMV0sMTg2KSksejB0KHcsVi5mK1YuYitlLmIpKSxKPSRJbih0ZSxmZSxNZSxlLmIsUnQoQnQoYXQodCwoejEoKSxoZ2UpKSkpKSxSdChCdChKLmIpKSl7Zm9yKG89bmV3IEcody5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTcyKSxhLmM9ITEsYS5rPSExLFptdChhKTt3LmQ9bmV3IGJ0LHcuZT1NZSwtLXRlfWVsc2UgaWYocjhuKGUsdyksdGUrMTxmZS5jLmxlbmd0aCYmKGUuZT1iLk1hdGgubWF4KHcuZStlLmIrbChqdCgoU24odGUrMSxmZS5jLmxlbmd0aCksbChmZS5jW3RlKzFdLDE4NikpLmEsMCksMTcyKS5yLU1lLGUuYyksZS5mPWIuTWF0aC5taW4ody5lK2UuYitsKGp0KChTbih0ZSsxLGZlLmMubGVuZ3RoKSxsKGZlLmNbdGUrMV0sMTg2KSkuYSwwKSwxNzIpLnItTWUsZS5kKSx3LmQuYy5sZW5ndGghPTAmJihlLmM9Yi5NYXRoLm1heChlLmMsbChqdCh3LmQsdy5kLmMubGVuZ3RoLTEpLDMxNSkuZCsody5kLmMubGVuZ3RoPD0xPzA6ZS5iKSksZS5kPWIuTWF0aC5taW4oZS5jLGwoanQody5kLHcuZC5jLmxlbmd0aC0xKSwzMTUpLmQrKHcuZC5jLmxlbmd0aDw9MT8wOmUuYikpKSksZmUuYy5sZW5ndGg9PTEpZm9yKEw9bChqdCh3LmQsdy5kLmMubGVuZ3RoLTEpLDMxNSksQz1sKGp0KEwuYSxMLmEuYy5sZW5ndGgtMSksMTcyKSxnPW5ldyBHKEMubik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDIwOSksZS5jPWIuTWF0aC5tYXgoZS5jLEMuci1mLmQpLGUuZD1iLk1hdGgubWluKGUuZCxDLnItZi5kKSxlLmU9Yi5NYXRoLm1heChlLmUsZi5kK2UuYiksZS5mPWIuTWF0aC5taW4oZS5mLGYuZCtlLmIpO3JldHVybiBUZT1zZ3QoZmUsZS5iKSwkZT1iLk1hdGgubWF4KFRlLmEsei0obi5iK24uYykpLEU9Yi5NYXRoLm1heChUZS5iLEItKG4uZCtuLmEpKSxyPUUtVGUuYixIaSh0LGJNLHIpLEhpKHQsR1csZmUpLG5ldyB6NGUoZS5hLCRlLFRlLmIrciwoVkEoKSx6QikpfWZ1bmN0aW9uIFJJbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXI7aWYoU3Q9bChRKGUsKE50KCksTXMpKSwxMDEpLFN0IT0oUmEoKSxaMSkmJlN0IT1XYil7Zm9yKFY9ZS5iLHo9Vi5jLmxlbmd0aCxDPW5ldyBCdSgoTWgoeisyLEZsZSksY1YoYm8oYm8oNSx6KzIpLCh6KzIpLzEwfDApKSkpLEo9bmV3IEJ1KChNaCh6KzIsRmxlKSxjVihibyhibyg1LHorMiksKHorMikvMTB8MCkpKSksdnQoQyxuZXcgUHIpLHZ0KEMsbmV3IFByKSx2dChKLG5ldyBidCksdnQoSixuZXcgYnQpLG90PW5ldyBidCx0PTA7dDx6O3QrKylmb3Iobj0oU24odCxWLmMubGVuZ3RoKSxsKFYuY1t0XSwzMCkpLGNuPShTbih0LEMuYy5sZW5ndGgpLGwoQy5jW3RdLDg1KSksdGU9bmV3IFByLCRuKEMuYyx0ZSksQm49KFNuKHQsSi5jLmxlbmd0aCksbChKLmNbdF0sMTUpKSxUZT1uZXcgYnQsJG4oSi5jLFRlKSxhPW5ldyBHKG4uYSk7YS5hPGEuYy5jLmxlbmd0aDspe2lmKHI9bChyZShhKSwxMCksbDhlKHIpKXskbihvdC5jLHIpO2NvbnRpbnVlfWZvcihFPW5ldyBocihkcihrYShyKS5hLktjKCksbmV3IGopKTtqcihFKTspZz1sKHhyKEUpLDE4KSxqbj1nLmMuaSxsOGUoam4pJiYoYW49bChjbi54YyhRKGpuLChmdCgpLHppKSkpLDEwKSxhbnx8KGFuPWpwdChlLGpuKSxjbi56YyhRKGpuLHppKSxhbiksQm4uRmMoYW4pKSxwbyhnLGwoanQoYW4uaiwxKSwxMikpKTtmb3Iodz1uZXcgaHIoZHIocXMocikuYS5LYygpLG5ldyBqKSk7anIodyk7KWc9bCh4cih3KSwxOCksdXI9Zy5kLmksbDhlKHVyKSYmKGZlPWwoY3IodGUsUSh1ciwoZnQoKSx6aSkpKSwxMCksZmV8fChmZT1qcHQoZSx1ciksa2kodGUsUSh1cix6aSksZmUpLCRuKFRlLmMsZmUpKSxGYShnLGwoanQoZmUuaiwwKSwxMikpKX1mb3IoTD0wO0w8Si5jLmxlbmd0aDtMKyspaWYoTWU9KFNuKEwsSi5jLmxlbmd0aCksbChKLmNbTF0sMTUpKSwhTWUuZGMoKSlmb3IoQj1udWxsLEw9PTA/KEI9bmV3IHl1KGUpLEV5KDAsVi5jLmxlbmd0aCkseF8oVi5jLDAsQikpOkw9PUMuYy5sZW5ndGgtMT8oQj1uZXcgeXUoZSksJG4oVi5jLEIpKTpCPShTbihMLTEsVi5jLmxlbmd0aCksbChWLmNbTC0xXSwzMCkpLGY9TWUuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksMTApLFZhKG8sQik7Zm9yKFplPW5ldyBHKG90KTtaZS5hPFplLmMuYy5sZW5ndGg7KSRlPWwocmUoWmUpLDEwKSxWYSgkZSxudWxsKTtydChlLChmdCgpLHExZSksb3QpfX1mdW5jdGlvbiBqSW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzLFZsLGxjO2Zvcih3cz1uZXcgYnQsVj1uZXcgRyh0LmIpO1YuYTxWLmMuYy5sZW5ndGg7KWZvcihCPWwocmUoViksMzApLFplPW5ldyBHKEIuYSk7WmUuYTxaZS5jLmMubGVuZ3RoOyl7Zm9yKCRlPWwocmUoWmUpLDEwKSwkZS5wPS0xLEw9bG8sY249bG8sQm49bmV3IEcoJGUuaik7Qm4uYTxCbi5jLmMubGVuZ3RoOyl7Zm9yKGFuPWwocmUoQm4pLDEyKSxhPW5ldyBHKGFuLmUpO2EuYTxhLmMuYy5sZW5ndGg7KW49bChyZShhKSwxOCksam49bChRKG4sKE50KCksSngpKSwxNykuYSxMPWIuTWF0aC5tYXgoTCxqbik7Zm9yKHI9bmV3IEcoYW4uZyk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE4KSxqbj1sKFEobiwoTnQoKSxKeCkpLDE3KS5hLGNuPWIuTWF0aC5tYXgoY24sam4pfXJ0KCRlLElXLHB0KEwpKSxydCgkZSxPVyxwdChjbikpfWZvcihmZT0wLHo9bmV3IEcodC5iKTt6LmE8ei5jLmMubGVuZ3RoOylmb3IoQj1sKHJlKHopLDMwKSxaZT1uZXcgRyhCLmEpO1plLmE8WmUuYy5jLmxlbmd0aDspJGU9bChyZShaZSksMTApLCRlLnA8MCYmKG9pPW5ldyBQd2Usb2kuYj1mZSsrLFlidChlLCRlLG9pKSwkbih3cy5jLG9pKSk7Zm9yKFN0PWVnKHdzLmMubGVuZ3RoKSxDPWVnKHdzLmMubGVuZ3RoKSxmPTA7Zjx3cy5jLmxlbmd0aDtmKyspdnQoU3QsbmV3IGJ0KSx2dChDLHB0KDApKTtmb3IockRuKHQsd3MsU3QsQyksVmw9bChqMSh3cyxXZShQRXQsbHl0LDI2MSx3cy5jLmxlbmd0aCwwLDEpKSw4NTQpLG90PWwoajEoU3QsV2UobWYsUXksMTUsU3QuYy5sZW5ndGgsMCwxKSksMTk4KSxFPVdlKFZyLGRpLDI4LEMuYy5sZW5ndGgsMTUsMSksZz0wO2c8RS5sZW5ndGg7ZysrKUVbZ109KFNuKGcsQy5jLmxlbmd0aCksbChDLmNbZ10sMTcpKS5hO2ZvcihUZT0wLE1lPW5ldyBidCx3PTA7dzxWbC5sZW5ndGg7dysrKUVbd109PTAmJiRuKE1lLmMsVmxbd10pO2Zvcih0ZT1XZShWcixkaSwyOCxWbC5sZW5ndGgsMTUsMSk7TWUuYy5sZW5ndGghPTA7KWZvcihvaT1sKHQyKE1lLDApLDI2MSksdGVbb2kuYl09VGUrKzshb3Rbb2kuYl0uZGMoKTspbGM9bChvdFtvaS5iXS5nZCgwKSwyNjEpLC0tRVtsYy5iXSxFW2xjLmJdPT0wJiYkbihNZS5jLGxjKTtmb3IoZS5hPVdlKFBFdCxseXQsMjYxLFZsLmxlbmd0aCwwLDEpLG89MDtvPFZsLmxlbmd0aDtvKyspZm9yKEo9Vmxbb10sdXI9dGVbb10sZS5hW3VyXT1KLEouYj11cixaZT1uZXcgRyhKLmUpO1plLmE8WmUuYy5jLmxlbmd0aDspJGU9bChyZShaZSksMTApLCRlLnA9dXI7cmV0dXJuIGUuYX1mdW5jdGlvbiAkSW4oZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2ZvcihKPSExLHc9ITEsQj1lKzEsVj0oU24oZSx0LmMubGVuZ3RoKSxsKHQuY1tlXSwxODYpKSxnPVYuYSxFPW51bGwsZj0wO2Y8Vi5hLmMubGVuZ3RoO2YrKylpZihvPShTbihmLGcuYy5sZW5ndGgpLGwoZy5jW2ZdLDE3MikpLCFvLmMpe2lmKG8uYi5jLmxlbmd0aD09MCl7VmcoKSxVTihWLG8pLC0tZixKPSEwO2NvbnRpbnVlfWlmKG8ua3x8KEUmJmxVKEUpLEU9bmV3IHo1ZShFP0UuZStFLmQrcjowLFYuZixyKSxxTihvLEUuZStFLmQsVi5mKSx2dChWLmQsRSksQzdlKEUsbyksby5rPSEwKSxDPW51bGwsQz0oZmU9bnVsbCxmPFYuYS5jLmxlbmd0aC0xP2ZlPWwoanQoVi5hLGYrMSksMTcyKTpCPHQuYy5sZW5ndGgmJihTbihCLHQuYy5sZW5ndGgpLGwodC5jW0JdLDE4NikpLmEuYy5sZW5ndGghPTAmJihmZT1sKGp0KChTbihCLHQuYy5sZW5ndGgpLGwodC5jW0JdLDE4NikpLmEsMCksMTcyKSksZmUpLHRlPSExLEMmJih0ZT0hUGkoQy5qLFYpKSxDKXtpZihDLmIuYy5sZW5ndGghPTAmJiFSdChCdChsKGp0KEMuYiwwKSwyNykub2YoKHoxKCksJEIpKSkpKWFOKG8sbi1vLnMpLGxVKG8ucSksSj1KfGw5bihWLG8sQyxuLHIpO2Vsc2V7VU4oVixDKTticmVha31pZihDLmIuYy5sZW5ndGg9PTApZm9yKHQuYy5sZW5ndGg+QiYmVU4oKFNuKEIsdC5jLmxlbmd0aCksbCh0LmNbQl0sMTg2KSksQyksQz1udWxsO3QuYy5sZW5ndGg+QiYmKFNuKEIsdC5jLmxlbmd0aCksbCh0LmNbQl0sMTg2KSkuYS5jLmxlbmd0aD09MDspYWwodCwoU24oQix0LmMubGVuZ3RoKSx0LmNbQl0pKTtpZighQyl7LS1mO2NvbnRpbnVlfWlmKCFSdChCdChsKGp0KEMuYiwwKSwyNykub2YoKHoxKCksJEIpKSkpJiZ0QW4odCxWLG8sQyx0ZSxuLEIscikpe0o9ITA7Y29udGludWV9aWYodGUpe2lmKHo9Vi5iLEw9Qy5mLCFSdChCdChsKGp0KEMuYiwwKSwyNykub2YoJEIpKSkmJndNbih0LFYsbyxDLG4sQixyLGEpKXtpZihKPSEwLHo8TCl7dz0hMCxDLmo9VjticmVha31jb250aW51ZX1lbHNlIGlmKGU4ZShWLG8pKXtvLmM9ITAsSj0hMDtjb250aW51ZX19ZWxzZSBpZihlOGUoVixvKSl7by5jPSEwLEo9ITA7Y29udGludWV9aWYoSiljb250aW51ZX1pZihlOGUoVixvKSl7by5jPSEwLEo9ITAsQyYmKEMuaz0hMSk7Y29udGludWV9ZWxzZSBsVShvLnEpfXJldHVybiBuZXcgY2EoKEhuKCksISFKKSwhIXcpfWZ1bmN0aW9uIE50KCl7TnQ9VSxvZGU9KHBpKCksUlN0KSx0RGU9alN0LFNCPV9OZSx4MD0kU3QsSDY9QU5lLGIzPUxOZSx5ND1NTmUsR1Q9RE5lLEtUPUlOZSxjZGU9aVksbTM9RXYsdWRlPXpTdCx0TT1QTmUsa1c9cjksQ0I9KFlrZSgpLHRrdCkscTY9bmt0LHZ2PXJrdCxWNj1pa3QsSGt0PW5ldyBIYShYQixwdCgwKSksVVQ9Sjl0LGVEZT1aOXQsSng9ZWt0LGxEZT1Ta3QsckRlPW9rdCxpRGU9bGt0LGhkZT1ta3Qsc0RlPWRrdCxhRGU9cGt0LEVXPU1rdCxmZGU9X2t0LGNEZT1ra3Qsb0RlPXlrdCx1RGU9VGt0LGczPUc5dCxlTT1LOXQscmRlPWw5dCxPTWU9Zjl0LFdrdD1BTSxZa3Q9YVksS2t0PVFCLEdrdD1zWSxuRGU9KGR4KCksTDQpLG5ldyBIYShpOSxuRGUpLFlNZT1uZXcgbHcoMTIpLFdNZT1uZXcgSGEoXzIsWU1lKSxNTWU9KGlwKCksaUMpLGJwPW5ldyBIYShzTmUsTU1lKSxtND1uZXcgSGEocmgsMCksVmt0PW5ldyBIYSh6Z2UscHQoMSkpLGNXPW5ldyBIYShaNixsVCksbXY9clksTXM9X00sVlQ9czcsQmt0PUdCLFJkPUFTdCxwND1uNyxVa3Q9bmV3IEhhKHFnZSwoSG4oKSwhMCkpLGI0PUtCLGd2PU9nZSxidj1rdix4Vz1VYixhZGU9QzQsTE1lPShKcygpLEoxKSxSaD1uZXcgSGEoeHYsTE1lKSxkMz1yNyx3Vz1mTmUsdjQ9UzQscWt0PSRnZSxKTWU9Q05lLFFNZT0odDYoKSx0RiksbmV3IEhhKHlOZSxRTWUpLGprdD1CZ2UsJGt0PUZnZSx6a3Q9UmdlLFJrdD1QZ2UsbGRlPWFrdCxwdj1OOXQsemI9Tzl0LG5NPXNrdCxRdT1TOXQsZHY9bjl0LEpMPXQ5dCxmMz0keHQsU01lPXp4dCxaMWU9VXh0LFRCPXF4dCxlZGU9Wnh0LFZNZT1QOXQsVU1lPUI5dCxqTWU9eTl0LHlXPVg5dCxzZGU9ajl0LGlkZT1wOXQsS01lPVY5dCxJTWU9Yzl0LG5kZT11OXQsSjFlPVVCLEdNZT1GOXQsbFc9SXh0LEVNZT1EeHQsdVc9TXh0LEJNZT12OXQsUE1lPW05dCxGTWU9dzl0LHFUPWk3LGNjPXgzLHgyPW9OZSxqZD1JZ2UsdGRlPURnZSxfTWU9S3h0LGsyPWpnZSxRTD1EU3QsYlc9T1N0LHAzPWtOZSxYTWU9TlN0LEhUPVBTdCx6TWU9QTl0LHFNZT1NOXQsdzQ9bjksWDFlPUx4dCxITWU9STl0LHBXPXM5dCxnVz1pOXQsdlc9dEMsJE1lPUU5dCxaTD16OXQsX0I9T05lLEFNZT1yOXQsWk1lPVE5dCxETWU9YTl0LE9rdD1ZeHQsTmt0PVh4dCxGa3Q9Qzl0LFBrdD1ReHQsUk1lPU5nZSxtVz1fOXQsZFc9Snh0LHlnPWp4dCxDTWU9Qnh0LGhXPU54dCxUTWU9UHh0LGZXPUZ4dCxnND1PeHQsUTFlPVJ4dCxOTWU9Yjl0fWZ1bmN0aW9uIExpKGUpe3ZhciB0LG4scjtpZihlLmQ+PWUuail7ZS5hPS0xLGUuYz0xO3JldHVybn1pZih0PWNvKGUuaSxlLmQrKyksZS5hPXQsZS5iPT0xKXtzd2l0Y2godCl7Y2FzZSA5MjppZihyPTEwLGUuZD49ZS5qKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxWRykpKSk7ZS5hPWNvKGUuaSxlLmQrKyk7YnJlYWs7Y2FzZSA0NTooZS5lJjUxMik9PTUxMiYmZS5kPGUuaiYmY28oZS5pLGUuZCk9PTkxPygrK2UuZCxyPTI0KTpyPTA7YnJlYWs7Y2FzZSA5MTppZigoZS5lJjUxMikhPTUxMiYmZS5kPGUuaiYmY28oZS5pLGUuZCk9PTU4KXsrK2UuZCxyPTIwO2JyZWFrfWRlZmF1bHQ6KHQmNjQ1MTIpPT1BUCYmZS5kPGUuaiYmKG49Y28oZS5pLGUuZCksKG4mNjQ1MTIpPT01NjMyMCYmKGUuYT1JbysodC1BUDw8MTApK24tNTYzMjAsKytlLmQpKSxyPTB9ZS5jPXI7cmV0dXJufXN3aXRjaCh0KXtjYXNlIDEyNDpyPTI7YnJlYWs7Y2FzZSA0MjpyPTM7YnJlYWs7Y2FzZSA0MzpyPTQ7YnJlYWs7Y2FzZSA2MzpyPTU7YnJlYWs7Y2FzZSA0MTpyPTc7YnJlYWs7Y2FzZSA0NjpyPTg7YnJlYWs7Y2FzZSA5MTpyPTk7YnJlYWs7Y2FzZSA5NDpyPTExO2JyZWFrO2Nhc2UgMzY6cj0xMjticmVhaztjYXNlIDQwOmlmKHI9NixlLmQ+PWUuanx8Y28oZS5pLGUuZCkhPTYzKWJyZWFrO2lmKCsrZS5kPj1lLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGUwZSkpKSk7c3dpdGNoKHQ9Y28oZS5pLGUuZCsrKSx0KXtjYXNlIDU4OnI9MTM7YnJlYWs7Y2FzZSA2MTpyPTE0O2JyZWFrO2Nhc2UgMzM6cj0xNTticmVhaztjYXNlIDkxOnI9MTk7YnJlYWs7Y2FzZSA2MjpyPTE4O2JyZWFrO2Nhc2UgNjA6aWYoZS5kPj1lLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGUwZSkpKSk7aWYodD1jbyhlLmksZS5kKyspLHQ9PTYxKXI9MTY7ZWxzZSBpZih0PT0zMylyPTE3O2Vsc2UgdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEw0dCkpKSk7YnJlYWs7Y2FzZSAzNTpmb3IoO2UuZDxlLmomJih0PWNvKGUuaSxlLmQrKyksdCE9NDEpOyk7aWYodCE9NDEpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLE00dCkpKSk7cj0yMTticmVhaztkZWZhdWx0OmlmKHQ9PTQ1fHw5Nzw9dCYmdDw9MTIyfHw2NTw9dCYmdDw9OTApey0tZS5kLHI9MjI7YnJlYWt9ZWxzZSBpZih0PT00MCl7cj0yMzticmVha310aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksZTBlKSkpKX1icmVhaztjYXNlIDkyOmlmKHI9MTAsZS5kPj1lLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFZHKSkpKTtlLmE9Y28oZS5pLGUuZCsrKTticmVhaztkZWZhdWx0OnI9MH1lLmM9cn1mdW5jdGlvbiB6SW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKG4uVWcoIlByb2Nlc3MgY29tcGFjdGlvbiIsMSksISFSdChCdChRKHQsKEhjKCksdUllKSkpKSl7Zm9yKGE9bChRKHQseTMpLDg4KSx6PXplKEdlKFEodCx6ZGUpKSksZ0xuKGUsdCxhKSxpSW4odCx6LzIvMiksVj10LmIsJG0oVixuZXcgbFhlKGEpKSxFPVJyKFYsMCk7RS5iIT1FLmQuYzspaWYodz1sKEJyKEUpLDQwKSwhUnQoQnQoUSh3LChRaSgpLFZiKSkpKSl7aWYocj0kU24odyxhKSxKPVBBbih3LHQpLEw9MCxCPTAscilzd2l0Y2godGU9ci5lLGEuZyl7Y2FzZSAyOkw9dGUuYS16LXcuZi5hLEouZS5hLXotdy5mLmE8TCYmKEw9Si5lLmEtei13LmYuYSksQj1MK3cuZi5hO2JyZWFrO2Nhc2UgMTpMPXRlLmErci5mLmEreixKLmUuYSt6PkwmJihMPUouZS5hK0ouZi5hK3opLEI9TCt3LmYuYTticmVhaztjYXNlIDQ6TD10ZS5iLXotdy5mLmIsSi5lLmItei13LmYuYjxMJiYoTD1KLmUuYi16LXcuZi5iKSxCPUwrdy5mLmI7YnJlYWs7Y2FzZSAzOkw9dGUuYityLmYuYit6LEouZS5iK3o+TCYmKEw9Si5lLmIrSi5mLmIreiksQj1MK3cuZi5ifWVsc2UgaWYoSilzd2l0Y2goYS5nKXtjYXNlIDI6TD1KLmUuYS16LXcuZi5hLEI9TCt3LmYuYTticmVhaztjYXNlIDE6TD1KLmUuYStKLmYuYSt6LEI9TCt3LmYuYTticmVhaztjYXNlIDQ6TD1KLmUuYi16LXcuZi5iLEI9TCt3LmYuYjticmVhaztjYXNlIDM6TD1KLmUuYitKLmYuYit6LEI9TCt3LmYuYn1xZShRKHQsJGRlKSk9PT1xZSgoeEEoKSxPQikpPyhvPUwsZj1CLGc9a0UoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYSwxNikpLG5ldyB0dHQobyxmKSkpLGcuYSE9bnVsbD9hPT0oSnMoKSx1Yyl8fGE9PXZjP3cuZS5hPUw6dy5lLmI9TDooYT09KEpzKCksdWMpfHxhPT13Zj9nPWtFKEZpKERodChuZXcgYm4obnVsbCxuZXcga24oZS5hLDE2KSkpLG5ldyBoWGUobykpKTpnPWtFKEZpKERodChuZXcgYm4obnVsbCxuZXcga24oZS5hLDE2KSkpLG5ldyBmWGUobykpKSxnLmEhPW51bGwmJihhPT11Y3x8YT09dmM/dy5lLmE9emUoR2UoKG1yKGcuYSE9bnVsbCksbChnLmEsNDIpKS5hKSk6dy5lLmI9emUoR2UoKG1yKGcuYSE9bnVsbCksbChnLmEsNDIpKS5hKSkpKSxnLmEhPW51bGwmJihDPWdjKGUuYSwobXIoZy5hIT1udWxsKSxnLmEpLDApLEM+MCYmQyE9bChRKHcsJGQpLDE3KS5hJiYocnQodyx0SWUsKEhuKCksITApKSxydCh3LCRkLHB0KEMpKSkpKTphPT0oSnMoKSx1Yyl8fGE9PXZjP3cuZS5hPUw6dy5lLmI9TH1uLlZnKCl9fWZ1bmN0aW9uIHl3dChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7Zm9yKGUuYj0xLExpKGUpLHQ9bnVsbCxlLmM9PTAmJmUuYT09OTQ/KExpKGUpLHQ9KERpKCksRGkoKSxuZXcgX2goNCkpLEV1KHQsMCxUVCksZz1uZXcgX2goNCkpOmc9KERpKCksRGkoKSxuZXcgX2goNCkpLGE9ITA7KEU9ZS5jKSE9MTspe2lmKEU9PTAmJmUuYT09OTMmJiFhKXt0JiYobkwodCxnKSxnPXQpO2JyZWFrfWlmKG49ZS5hLHI9ITEsRT09MTApc3dpdGNoKG4pe2Nhc2UgMTAwOmNhc2UgNjg6Y2FzZSAxMTk6Y2FzZSA4NzpjYXNlIDExNTpjYXNlIDgzOkt5KGcsWUUobikpLHI9ITA7YnJlYWs7Y2FzZSAxMDU6Y2FzZSA3MzpjYXNlIDk5OmNhc2UgNjc6bj0oS3koZyxZRShuKSksLTEpLG48MCYmKHI9ITApO2JyZWFrO2Nhc2UgMTEyOmNhc2UgODA6aWYodz13OWUoZSxuKSwhdyl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksdDBlKSkpKTtLeShnLHcpLHI9ITA7YnJlYWs7ZGVmYXVsdDpuPWVrZShlKX1lbHNlIGlmKEU9PTI0JiYhYSl7aWYodCYmKG5MKHQsZyksZz10KSxvPXl3dChlKSxuTChnLG8pLGUuYyE9MHx8ZS5hIT05Myl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksajR0KSkpKTticmVha31pZihMaShlKSwhcil7aWYoRT09MCl7aWYobj09OTEpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEVTZSkpKSk7aWYobj09OTMpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFRTZSkpKSk7aWYobj09NDUmJiFhJiZlLmEhPTkzKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxuMGUpKSkpfWlmKGUuYyE9MHx8ZS5hIT00NXx8bj09NDUmJmEpRXUoZyxuLG4pO2Vsc2V7aWYoTGkoZSksKEU9ZS5jKT09MSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksVUcpKSkpO2lmKEU9PTAmJmUuYT09OTMpRXUoZyxuLG4pLEV1KGcsNDUsNDUpO2Vsc2V7aWYoRT09MCYmZS5hPT05M3x8RT09MjQpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG4wZSkpKSk7aWYoZj1lLmEsRT09MCl7aWYoZj09OTEpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEVTZSkpKSk7aWYoZj09OTMpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFRTZSkpKSk7aWYoZj09NDUpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG4wZSkpKSl9ZWxzZSBFPT0xMCYmKGY9ZWtlKGUpKTtpZihMaShlKSxuPmYpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHE0dCkpKSk7RXUoZyxuLGYpfX19YT0hMX1pZihlLmM9PTEpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFVHKSkpKTtyZXR1cm4gYzYoZyksZUwoZyksZS5iPTAsTGkoZSksZ31mdW5jdGlvbiBxSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplO2lmKG4uVWcoIkNvZmZtYW4tR3JhaGFtIExheWVyaW5nIiwxKSx0LmEuYy5sZW5ndGg9PTApe24uVmcoKTtyZXR1cm59Zm9yKFplPWwoUSh0LChOdCgpLCRNZSkpLDE3KS5hLHc9MCxmPTAsQj1uZXcgRyh0LmEpO0IuYTxCLmMuYy5sZW5ndGg7KWZvcihMPWwocmUoQiksMTApLEwucD13Kyssbz1uZXcgaHIoZHIocXMoTCkuYS5LYygpLG5ldyBqKSk7anIobyk7KWE9bCh4cihvKSwxOCksYS5wPWYrKztmb3IoZS5kPVdlKGloLHBnLDI4LHcsMTYsMSksZS5hPVdlKGloLHBnLDI4LGYsMTYsMSksZS5iPVdlKFZyLGRpLDI4LHcsMTUsMSksZS5lPVdlKFZyLGRpLDI4LHcsMTUsMSksZS5mPVdlKFZyLGRpLDI4LHcsMTUsMSksbVYoZS5jKSxqOG4oZSx0KSxWPW5ldyBnSChuZXcgTFllKGUpKSwkZT1uZXcgRyh0LmEpOyRlLmE8JGUuYy5jLmxlbmd0aDspe2ZvcihUZT1sKHJlKCRlKSwxMCksbz1uZXcgaHIoZHIoa2EoVGUpLmEuS2MoKSxuZXcgaikpO2pyKG8pOylhPWwoeHIobyksMTgpLGUuYVthLnBdfHwrK2UuYltUZS5wXTtlLmJbVGUucF09PTAmJks4KCRFKFYsVGUpLGFUKX1mb3IoZz0wO1YuYi5jLmxlbmd0aCE9MDspZm9yKFRlPWwoS29lKFYpLDEwKSxlLmZbVGUucF09ZysrLG89bmV3IGhyKGRyKHFzKFRlKS5hLktjKCksbmV3IGopKTtqcihvKTspYT1sKHhyKG8pLDE4KSwhZS5hW2EucF0mJih0ZT1hLmQuaSwtLWUuYlt0ZS5wXSx4bihlLmMsdGUscHQoZS5mW1RlLnBdKSksZS5iW3RlLnBdPT0wJiZLOCgkRShWLHRlKSxhVCkpO2Zvcih6PW5ldyBnSChuZXcgTVllKGUpKSxNZT1uZXcgRyh0LmEpO01lLmE8TWUuYy5jLmxlbmd0aDspe2ZvcihUZT1sKHJlKE1lKSwxMCksbz1uZXcgaHIoZHIocXMoVGUpLmEuS2MoKSxuZXcgaikpO2pyKG8pOylhPWwoeHIobyksMTgpLGUuYVthLnBdfHwrK2UuZVtUZS5wXTtlLmVbVGUucF09PTAmJks4KCRFKHosVGUpLGFUKX1mb3IoQz1uZXcgYnQscj12YXQodCxDKTt6LmIuYy5sZW5ndGghPTA7KWZvcihmZT1sKEtvZSh6KSwxMCksKHIuYS5jLmxlbmd0aD49WmV8fCFCNW4oZmUscikpJiYocj12YXQodCxDKSksVmEoZmUsciksbz1uZXcgaHIoZHIoa2EoZmUpLmEuS2MoKSxuZXcgaikpO2pyKG8pOylhPWwoeHIobyksMTgpLCFlLmFbYS5wXSYmKEo9YS5jLmksLS1lLmVbSi5wXSxlLmVbSi5wXT09MCYmSzgoJEUoeixKKSxhVCkpO2ZvcihFPUMuYy5sZW5ndGgtMTtFPj0wOy0tRSl2dCh0LmIsKFNuKEUsQy5jLmxlbmd0aCksbChDLmNbRV0sMzApKSk7dC5hLmMubGVuZ3RoPTAsbi5WZygpfWZ1bmN0aW9uIHh3dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7JGU9ITE7ZG8gZm9yKCRlPSExLG89dD9uZXcgYnIoZS5hLmIpLmEuZ2MoKS0yOjE7dD9vPj0wOm88bmV3IGJyKGUuYS5iKS5hLmdjKCk7bys9dD8tMToxKWZvcihhPXM2ZShlLmEscHQobykpLHo9MDt6PGEuYjt6KyspaWYoTD1sKGZmKGEseiksMTApLCEhbnMoTCwoZnQoKSxLaSkpJiYhKEg4bihlLmEscHQobykpJiZlLnI9PShOZigpLHYzKXx8VjhuKGUuYSxwdChvKSkmJmUucj09KE5mKCkseDQpKSl7Zm9yKE1lPSEwLGZlPTA7ZmU8YS5iO2ZlKyspdGU9bChmZihhLGZlKSwxMCksbnModGUsS2kpJiYodCYmbChRKEwsS2kpLDE3KS5hPGwoUSh0ZSxLaSksMTcpLmF8fCF0JiZsKFEoTCxLaSksMTcpLmE+bChRKHRlLEtpKSwxNykuYSkmJihNZT0hMSk7aWYoTWUpe2Zvcih3PXQ/bysxOm8tMSxnPXM2ZShlLmEscHQodykpLGY9ITEsVGU9ITAscj0hMSxDPVJyKGcsMCk7Qy5iIT1DLmQuYzspRT1sKEJyKEMpLDEwKSxucyhFLEtpKT9FLnAhPUwucCYmKGY9ZnwodD9sKFEoRSxLaSksMTcpLmE8bChRKEwsS2kpLDE3KS5hOmwoUShFLEtpKSwxNykuYT5sKFEoTCxLaSksMTcpLmEpLFRlPSExKTohZiYmVGUmJkUuaz09KFpuKCksY3UpJiYocj0hMCx0P0I9bCh4cihuZXcgaHIoZHIoa2EoRSkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmk6Qj1sKHhyKG5ldyBocihkcihxcyhFKS5hLktjKCksbmV3IGopKSksMTgpLmQuaSxCPT1MJiYodD9uPWwoeHIobmV3IGhyKGRyKHFzKEUpLmEuS2MoKSxuZXcgaikpKSwxOCkuZC5pOm49bCh4cihuZXcgaHIoZHIoa2EoRSkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmksKHQ/bChkeShlLmEsbiksMTcpLmEtbChkeShlLmEsQiksMTcpLmE6bChkeShlLmEsQiksMTcpLmEtbChkeShlLmEsbiksMTcpLmEpPD0yJiYoVGU9ITEpKSk7aWYociYmVGUmJih0P249bCh4cihuZXcgaHIoZHIocXMoTCkuYS5LYygpLG5ldyBqKSkpLDE4KS5kLmk6bj1sKHhyKG5ldyBocihkcihrYShMKS5hLktjKCksbmV3IGopKSksMTgpLmMuaSwodD9sKGR5KGUuYSxuKSwxNykuYS1sKGR5KGUuYSxMKSwxNykuYTpsKGR5KGUuYSxMKSwxNykuYS1sKGR5KGUuYSxuKSwxNykuYSk8PTImJm4uaz09KFpuKCksUHMpJiYoVGU9ITEpKSxmfHxUZSl7Zm9yKEo9SjJ0KGUsTCx0KTtKLmEuZ2MoKSE9MDspVj1sKEouYS5lYygpLktjKCkuUGIoKSwxMCksSi5hLkJjKFYpIT1udWxsLEthKEosSjJ0KGUsVix0KSk7LS16LCRlPSEwfX19d2hpbGUoJGUpfWZ1bmN0aW9uIEhJbihlKXtXcihlLmMsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjZGVjaW1hbCJdKSksV3IoZS5kLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2ludGVnZXIiXSkpLFdyKGUuZSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW2hvLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNib29sZWFuIl0pKSxXcihlLmYsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiRUJvb2xlYW4iLF9pLCJFQm9vbGVhbjpPYmplY3QiXSkpLFdyKGUuaSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW2hvLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNieXRlIl0pKSxXcihlLmcsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjaGV4QmluYXJ5Il0pKSxXcihlLmosbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiRUJ5dGUiLF9pLCJFQnl0ZTpPYmplY3QiXSkpLFdyKGUubixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW2hvLCJFQ2hhciIsX2ksIkVDaGFyOk9iamVjdCJdKSksV3IoZS50LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2RvdWJsZSJdKSksV3IoZS51LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sIkVEb3VibGUiLF9pLCJFRG91YmxlOk9iamVjdCJdKSksV3IoZS5GLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2Zsb2F0Il0pKSxXcihlLkcsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiRUZsb2F0IixfaSwiRUZsb2F0Ok9iamVjdCJdKSksV3IoZS5JLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2ludCJdKSksV3IoZS5KLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sIkVJbnQiLF9pLCJFSW50Ok9iamVjdCJdKSksV3IoZS5OLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2xvbmciXSkpLFdyKGUuTyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW2hvLCJFTG9uZyIsX2ksIkVMb25nOk9iamVjdCJdKSksV3IoZS5aLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3Nob3J0Il0pKSxXcihlLiQsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiRVNob3J0IixfaSwiRVNob3J0Ok9iamVjdCJdKSksV3IoZS5fLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyJdKSl9ZnVuY3Rpb24gVkluKGUsdCxuLHIsYSxvLGYpe3ZhciBnLHcsRSxDLEwsQix6LFY7cmV0dXJuIEI9bChyLmEsMTcpLmEsej1sKHIuYiwxNykuYSxMPWUuYixWPWUuYyxnPTAsQz0wLHQ9PShKcygpLHVjKXx8dD09dmM/KEM9Zk8oaDF0KHh5KGZjKG5ldyBibihudWxsLG5ldyBrbihuLmIsMTYpKSxuZXcgbG5lKSxuZXcgWXRlKSkpLEwuZS5iK0wuZi5iLzI+Qz8oRT0rK3osZz16ZShHZShmaCh2eShmYyhuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IGl0dChhLEUpKSxuZXcgYSQpKSkpKToodz0rK0IsZz16ZShHZShmaChZOChmYyhuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IHN0dChhLHcpKSxuZXcgWHRlKSkpKSkpOihDPWZPKGgxdCh4eShmYyhuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IFp0ZSksbmV3IHMkKSkpLEwuZS5hK0wuZi5hLzI+Qz8oRT0rK3osZz16ZShHZShmaCh2eShmYyhuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IG50dChhLEUpKSxuZXcgUXRlKSkpKSk6KHc9KytCLGc9emUoR2UoZmgoWTgoZmMobmV3IGJuKG51bGwsbmV3IGtuKG4uYiwxNikpLG5ldyBydHQoYSx3KSksbmV3IGJJKSkpKSkpLHQ9PXVjPyhrbyhlLmEsbmV3IGx0KHplKEdlKFEoTCwoUWkoKSxjMSkpKSktYSxnKSksa28oZS5hLG5ldyBsdChWLmUuYStWLmYuYSthK28sZykpLGtvKGUuYSxuZXcgbHQoVi5lLmErVi5mLmErYStvLFYuZS5iK1YuZi5iLzIpKSxrbyhlLmEsbmV3IGx0KFYuZS5hK1YuZi5hLFYuZS5iK1YuZi5iLzIpKSk6dD09dmM/KGtvKGUuYSxuZXcgbHQoemUoR2UoUShMLChRaSgpLGswKSkpKSthLEwuZS5iK0wuZi5iLzIpKSxrbyhlLmEsbmV3IGx0KEwuZS5hK0wuZi5hK2EsZykpLGtvKGUuYSxuZXcgbHQoVi5lLmEtYS1vLGcpKSxrbyhlLmEsbmV3IGx0KFYuZS5hLWEtbyxWLmUuYitWLmYuYi8yKSksa28oZS5hLG5ldyBsdChWLmUuYSxWLmUuYitWLmYuYi8yKSkpOnQ9PXdmPyhrbyhlLmEsbmV3IGx0KGcsemUoR2UoUShMLChRaSgpLGMxKSkpKS1hKSksa28oZS5hLG5ldyBsdChnLFYuZS5iK1YuZi5iK2ErbykpLGtvKGUuYSxuZXcgbHQoVi5lLmErVi5mLmEvMixWLmUuYitWLmYuYithK28pKSxrbyhlLmEsbmV3IGx0KFYuZS5hK1YuZi5hLzIsVi5lLmIrVi5mLmIrYSkpKTooZS5hLmI9PTB8fChsKG8wKGUuYSksOCkuYj16ZShHZShRKEwsKFFpKCksazApKSkpK2EqbChmLmIsMTcpLmEpLGtvKGUuYSxuZXcgbHQoZyx6ZShHZShRKEwsKFFpKCksazApKSkpK2EqbChmLmIsMTcpLmEpKSxrbyhlLmEsbmV3IGx0KGcsVi5lLmItYSpsKGYuYSwxNykuYS1vKSkpLG5ldyBjYShwdChCKSxwdCh6KSl9ZnVuY3Rpb24gVUluKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKGY9ITAsTD1udWxsLHI9bnVsbCxhPW51bGwsdD0hMSx6PVBfdCxFPW51bGwsbz1udWxsLGc9MCx3PVpjZShlLGcsVFBlLENQZSksdzxlLmxlbmd0aCYmKFhuKHcsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCh3KT09NTgpJiYoTD0oR2EoZyx3LGUubGVuZ3RoKSxlLnN1YnN0cihnLHctZykpLGc9dysxKSxuPUwhPW51bGwmJm5PKEVZLEwudG9Mb3dlckNhc2UoKSksbil7aWYodz1lLmxhc3RJbmRleE9mKCIhLyIpLHc9PS0xKXRocm93IHVlKG5ldyBZbigibm8gYXJjaGl2ZSBzZXBhcmF0b3IiKSk7Zj0hMCxyPXRmKGUsZywrK3cpLGc9d31lbHNlIGc+PTAmJnZuKGUuc3Vic3RyKGcsMiksIi8vIik/KGcrPTIsdz1aY2UoZSxnLCRNLHpNKSxyPShHYShnLHcsZS5sZW5ndGgpLGUuc3Vic3RyKGcsdy1nKSksZz13KTpMIT1udWxsJiYoZz09ZS5sZW5ndGh8fChYbihnLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoZykhPTQ3KSkmJihmPSExLHc9THllKGUsY2woMzUpLGcpLHc9PS0xJiYodz1lLmxlbmd0aCkscj0oR2EoZyx3LGUubGVuZ3RoKSxlLnN1YnN0cihnLHctZykpLGc9dyk7aWYoIW4mJmc8ZS5sZW5ndGgmJihYbihnLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoZyk9PTQ3KSYmKHc9WmNlKGUsZysxLCRNLHpNKSxDPShHYShnKzEsdyxlLmxlbmd0aCksZS5zdWJzdHIoZysxLHctKGcrMSkpKSxDLmxlbmd0aD4wJiZjbyhDLEMubGVuZ3RoLTEpPT01OCYmKGE9QyxnPXcpKSxnPGUubGVuZ3RoJiYoWG4oZyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGcpPT00NykmJigrK2csdD0hMCksZzxlLmxlbmd0aCYmKFhuKGcsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChnKSE9NjMpJiYoWG4oZyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGcpIT0zNSkpe2ZvcihCPW5ldyBidDtnPGUubGVuZ3RoJiYoWG4oZyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGcpIT02MykmJihYbihnLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoZykhPTM1KTspdz1aY2UoZSxnLCRNLHpNKSx2dChCLChHYShnLHcsZS5sZW5ndGgpLGUuc3Vic3RyKGcsdy1nKSkpLGc9dyxnPGUubGVuZ3RoJiYoWG4oZyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGcpPT00NykmJihVeW4oZSwrK2cpfHxCLmMucHVzaCgiIikpO3o9V2UoenQsZHQsMixCLmMubGVuZ3RoLDYsMSksajEoQix6KX1yZXR1cm4gZzxlLmxlbmd0aCYmKFhuKGcsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChnKT09NjMpJiYodz1OayhlLDM1LCsrZyksdz09LTEmJih3PWUubGVuZ3RoKSxFPShHYShnLHcsZS5sZW5ndGgpLGUuc3Vic3RyKGcsdy1nKSksZz13KSxnPGUubGVuZ3RoJiYobz13NWUoZSwrK2cpKSxFTW4oZixMLHIsYSx6LEUpLG5ldyBlbGUoZixMLHIsYSx0LHosRSxvKX1mdW5jdGlvbiBrd3QoKXtrd3Q9VSxNbGUoKSxiaT1uZXcgQ3cseG4oYmksKEN0KCksXzApLGVkKSx4bihiaSxIZixlZCkseG4oYmksemwsZWQpLHhuKGJpLEEwLGVkKSx4bihiaSxmbCxlZCkseG4oYmkscWwsZWQpLHhuKGJpLEEwLF8wKSx4bihiaSxlZCx5ZikseG4oYmksXzAseWYpLHhuKGJpLEhmLHlmKSx4bihiaSx6bCx5ZikseG4oYmksaGwseWYpLHhuKGJpLEEwLHlmKSx4bihiaSxmbCx5ZikseG4oYmkscWwseWYpLHhuKGJpLEp1LHlmKSx4bihiaSxlZCwkaCkseG4oYmksXzAsJGgpLHhuKGJpLHlmLCRoKSx4bihiaSxIZiwkaCkseG4oYmksemwsJGgpLHhuKGJpLGhsLCRoKSx4bihiaSxBMCwkaCkseG4oYmksSnUsJGgpLHhuKGJpLHpoLCRoKSx4bihiaSxmbCwkaCkseG4oYmksX2wsJGgpLHhuKGJpLHFsLCRoKSx4bihiaSxfMCxIZikseG4oYmksemwsSGYpLHhuKGJpLEEwLEhmKSx4bihiaSxxbCxIZikseG4oYmksXzAsemwpLHhuKGJpLEhmLHpsKSx4bihiaSxBMCx6bCkseG4oYmksemwsemwpLHhuKGJpLGZsLHpsKSx4bihiaSxlZCx4ZikseG4oYmksXzAseGYpLHhuKGJpLHlmLHhmKSx4bihiaSwkaCx4ZikseG4oYmksSGYseGYpLHhuKGJpLHpsLHhmKSx4bihiaSxobCx4ZikseG4oYmksQTAseGYpLHhuKGJpLHpoLHhmKSx4bihiaSxKdSx4ZikseG4oYmkscWwseGYpLHhuKGJpLGZsLHhmKSx4bihiaSxEdSx4ZikseG4oYmksZWQsemgpLHhuKGJpLF8wLHpoKSx4bihiaSx5Zix6aCkseG4oYmksSGYsemgpLHhuKGJpLHpsLHpoKSx4bihiaSxobCx6aCkseG4oYmksQTAsemgpLHhuKGJpLEp1LHpoKSx4bihiaSxxbCx6aCkseG4oYmksX2wsemgpLHhuKGJpLER1LHpoKSx4bihiaSxfMCxKdSkseG4oYmksSGYsSnUpLHhuKGJpLHpsLEp1KSx4bihiaSxBMCxKdSkseG4oYmksemgsSnUpLHhuKGJpLHFsLEp1KSx4bihiaSxmbCxKdSkseG4oYmksZWQsbGwpLHhuKGJpLF8wLGxsKSx4bihiaSx5ZixsbCkseG4oYmksSGYsbGwpLHhuKGJpLHpsLGxsKSx4bihiaSxobCxsbCkseG4oYmksQTAsbGwpLHhuKGJpLEp1LGxsKSx4bihiaSxxbCxsbCkseG4oYmksXzAsZmwpLHhuKGJpLHlmLGZsKSx4bihiaSwkaCxmbCkseG4oYmksemwsZmwpLHhuKGJpLGVkLF9sKSx4bihiaSxfMCxfbCkseG4oYmksJGgsX2wpLHhuKGJpLEhmLF9sKSx4bihiaSx6bCxfbCkseG4oYmksaGwsX2wpLHhuKGJpLEEwLF9sKSx4bihiaSxBMCxEdSkseG4oYmksemwsRHUpLHhuKGJpLEp1LGVkKSx4bihiaSxKdSxIZikseG4oYmksSnUseWYpLHhuKGJpLGhsLGVkKSx4bihiaSxobCxfMCkseG4oYmksaGwsJGgpfWZ1bmN0aW9uIEdJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7c3dpdGNoKG4uVWcoIkJyYW5kZXMgJiBLb2VwZiBub2RlIHBsYWNlbWVudCIsMSksZS5hPXQsZS5jPUFBbih0KSxyPWwoUSh0LChOdCgpLHNkZSkpLDI4MSksej1SdChCdChRKHQsWkwpKSksZS5kPXI9PShXTigpLFpLKSYmIXp8fHI9PUIxZSx2TW4oZSx0KSxaZT1udWxsLG90PW51bGwsZmU9bnVsbCxUZT1udWxsLHRlPShNaCg0LFl5KSxuZXcgQnUoNCkpLGwoUSh0LHNkZSksMjgxKS5nKXtjYXNlIDM6ZmU9bmV3IGY2KHQsZS5jLmQsKEQxKCksd3YpLCh4ZCgpLFQyKSksJG4odGUuYyxmZSk7YnJlYWs7Y2FzZSAxOlRlPW5ldyBmNih0LGUuYy5kLChEMSgpLFkxKSwoeGQoKSxUMikpLCRuKHRlLmMsVGUpO2JyZWFrO2Nhc2UgNDpaZT1uZXcgZjYodCxlLmMuZCwoRDEoKSx3diksKHhkKCksdzMpKSwkbih0ZS5jLFplKTticmVhaztjYXNlIDI6b3Q9bmV3IGY2KHQsZS5jLmQsKEQxKCksWTEpLCh4ZCgpLHczKSksJG4odGUuYyxvdCk7YnJlYWs7ZGVmYXVsdDpmZT1uZXcgZjYodCxlLmMuZCwoRDEoKSx3diksKHhkKCksVDIpKSxUZT1uZXcgZjYodCxlLmMuZCxZMSxUMiksWmU9bmV3IGY2KHQsZS5jLmQsd3YsdzMpLG90PW5ldyBmNih0LGUuYy5kLFkxLHczKSwkbih0ZS5jLFplKSwkbih0ZS5jLG90KSwkbih0ZS5jLGZlKSwkbih0ZS5jLFRlKX1mb3IoYT1uZXcgR2V0KHQsZS5jKSxnPW5ldyBHKHRlKTtnLmE8Zy5jLmMubGVuZ3RoOylvPWwocmUoZyksMTg1KSxvSW4oYSxvLGUuYiksaUxuKG8pO2ZvcihCPW5ldyByZ3QodCxlLmMpLHc9bmV3IEcodGUpO3cuYTx3LmMuYy5sZW5ndGg7KW89bChyZSh3KSwxODUpLE1NbihCLG8pO2lmKG4uX2coKSlmb3IoRT1uZXcgRyh0ZSk7RS5hPEUuYy5jLmxlbmd0aDspbz1sKHJlKEUpLDE4NSksbi5iaChvKyIgc2l6ZSBpcyAiK1d1ZShvKSk7aWYoTD1udWxsLGUuZCYmKEM9SkRuKGUsdGUsZS5jLmQpLFhtdCh0LEMsbikmJihMPUMpKSwhTClmb3IoRT1uZXcgRyh0ZSk7RS5hPEUuYy5jLmxlbmd0aDspbz1sKHJlKEUpLDE4NSksWG10KHQsbyxuKSYmKCFMfHxXdWUoTCk+V3VlKG8pKSYmKEw9byk7Zm9yKCFMJiYoTD0oU24oMCx0ZS5jLmxlbmd0aCksbCh0ZS5jWzBdLDE4NSkpKSxKPW5ldyBHKHQuYik7Si5hPEouYy5jLmxlbmd0aDspZm9yKFY9bChyZShKKSwzMCksJGU9bmV3IEcoVi5hKTskZS5hPCRlLmMuYy5sZW5ndGg7KU1lPWwocmUoJGUpLDEwKSxNZS5uLmI9emUoTC5wW01lLnBdKSt6ZShMLmRbTWUucF0pO2ZvcihuLl9nKCkmJihuLmJoKCJDaG9zZW4gbm9kZSBwbGFjZW1lbnQ6ICIrTCksbi5iaCgiQmxvY2tzOiAiK2YydChMKSksbi5iaCgiQ2xhc3NlczogIitxRW4oTCxuKSksbi5iaCgiTWFya2VkIGVkZ2VzOiAiK2UuYikpLGY9bmV3IEcodGUpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxODUpLG8uZz1udWxsLG8uYj1udWxsLG8uYT1udWxsLG8uZD1udWxsLG8uaj1udWxsLG8uaT1udWxsLG8ucD1udWxsO3JtbihlLmMpLGUuYi5hLiRiKCksbi5WZygpfWZ1bmN0aW9uIEtJbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXI7aWYoZS5jLmxlbmd0aD09MSlyZXR1cm4geWd0KChTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDEyMSkpKSxTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDEyMSk7aWYoZS5jLmxlbmd0aDw9MClyZXR1cm4gbmV3IG5OO2Zvcih3PW5ldyBHKGUpO3cuYTx3LmMuYy5sZW5ndGg7KXtmb3IoZj1sKHJlKHcpLDEyMSksVGU9MCxWPUlpLEo9SWksQj1sbyx6PWxvLGZlPVJyKGYuYiwwKTtmZS5iIT1mZS5kLmM7KXRlPWwoQnIoZmUpLDQwKSxUZSs9bChRKHRlLChIYygpLFJXKSksMTcpLmEsVj1iLk1hdGgubWluKFYsdGUuZS5hKSxKPWIuTWF0aC5taW4oSix0ZS5lLmIpLEI9Yi5NYXRoLm1heChCLHRlLmUuYSt0ZS5mLmEpLHo9Yi5NYXRoLm1heCh6LHRlLmUuYit0ZS5mLmIpO3J0KGYsKEhjKCksUlcpLHB0KFRlKSkscnQoZiwoUWkoKSxRVCksbmV3IGx0KFYsSikpLHJ0KGYsTkIsbmV3IGx0KEIseikpfWZvcihDbigpLFZzKGUsbmV3IEx0ZSksWmU9bmV3IG5OLHBjKFplLChTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDk2KSkpLEw9MCxCbj0wLEU9bmV3IEcoZSk7RS5hPEUuYy5jLmxlbmd0aDspZj1sKHJlKEUpLDEyMSksb3Q9bWEoSmEobChRKGYsKFFpKCksTkIpKSw4KSksbChRKGYsUVQpLDgpKSxMPWIuTWF0aC5tYXgoTCxvdC5hKSxCbis9b3QuYSpvdC5iO2ZvcihMPWIuTWF0aC5tYXgoTCxiLk1hdGguc3FydChCbikqemUoR2UoUShaZSwoSGMoKSx4VHQpKSkpKSxTdD16ZShHZShRKFplLHpkZSkpKSxqbj0wLHVyPTAsQz0wLHQ9U3QsZz1uZXcgRyhlKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTIxKSxvdD1tYShKYShsKFEoZiwoUWkoKSxOQikpLDgpKSxsKFEoZixRVCksOCkpLGpuK290LmE+TCYmKGpuPTAsdXIrPUMrU3QsQz0wKSxobXQoWmUsZixqbix1ciksdD1iLk1hdGgubWF4KHQsam4rb3QuYSksQz1iLk1hdGgubWF4KEMsb3QuYiksam4rPW90LmErU3Q7Zm9yKCRlPW5ldyBQcixuPW5ldyBQcixhbj1uZXcgRyhlKTthbi5hPGFuLmMuYy5sZW5ndGg7KWZvcihjbj1sKHJlKGFuKSwxMjEpLHI9UnQoQnQoUShjbiwocGkoKSxHQikpKSksTWU9Y24ucT9jbi5xOm1nLG89TWUudmMoKS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSw0NCksSHUoJGUsYS5sZCgpKT9xZShsKGEubGQoKSwxNDkpLlNnKCkpIT09cWUoYS5tZCgpKSYmKHImJkh1KG4sYS5sZCgpKT8oVmcoKSwiIitsKGEubGQoKSwxNDkpLlBnKCkpOihraSgkZSxsKGEubGQoKSwxNDkpLGEubWQoKSkscnQoWmUsbChhLmxkKCksMTQ5KSxhLm1kKCkpLHImJmtpKG4sbChhLmxkKCksMTQ5KSxhLm1kKCkpKSk6KGtpKCRlLGwoYS5sZCgpLDE0OSksYS5tZCgpKSxydChaZSxsKGEubGQoKSwxNDkpLGEubWQoKSkpO3JldHVybiB5Z3QoWmUpLFplfWZ1bmN0aW9uIFdVKGUsdCl7c3dpdGNoKGUuZSl7Y2FzZSAwOmNhc2UgMjpjYXNlIDQ6Y2FzZSA2OmNhc2UgNDI6Y2FzZSA0NDpjYXNlIDQ2OmNhc2UgNDg6Y2FzZSA4OmNhc2UgMTA6Y2FzZSAxMjpjYXNlIDE0OmNhc2UgMTY6Y2FzZSAxODpjYXNlIDIwOmNhc2UgMjI6Y2FzZSAyNDpjYXNlIDI2OmNhc2UgMjg6Y2FzZSAzMDpjYXNlIDMyOmNhc2UgMzQ6Y2FzZSAzNjpjYXNlIDM4OnJldHVybiBuZXcgVmF0KGUuYixlLmEsdCxlLmMpO2Nhc2UgMTpyZXR1cm4gbmV3IEJxKGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDQzOnJldHVybiBuZXcgQm50KGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDM6cmV0dXJuIG5ldyBZcyhlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSA0NTpyZXR1cm4gbmV3IG1sKGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDQxOnJldHVybiBuZXcgeGwobChPZihlLmMpLDI5KSxlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSA1MDpyZXR1cm4gbmV3IGlmdChsKE9mKGUuYyksMjkpLGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDU6cmV0dXJuIG5ldyBhNGUoZS5hLHQsbXModC5EaCgpLGUuYyksZS5kLm4pO2Nhc2UgNDc6cmV0dXJuIG5ldyBZcnQoZS5hLHQsbXModC5EaCgpLGUuYyksZS5kLm4pO2Nhc2UgNzpyZXR1cm4gbmV3IG50KGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDQ5OnJldHVybiBuZXcgVjgoZS5hLHQsbXModC5EaCgpLGUuYyksZS5kLm4pO2Nhc2UgOTpyZXR1cm4gbmV3IFBudChlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSAxMTpyZXR1cm4gbmV3IE5udChlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSAxMzpyZXR1cm4gbmV3IHl5ZShlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSAxNTpyZXR1cm4gbmV3IEpxKGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDE3OnJldHVybiBuZXcgRm50KGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDE5OnJldHVybiBuZXcgJDUoZS5hLHQsbXModC5EaCgpLGUuYykpO2Nhc2UgMjE6cmV0dXJuIG5ldyB4eWUoZS5hLHQsbXModC5EaCgpLGUuYykpO2Nhc2UgMjM6cmV0dXJuIG5ldyBGTyhlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSAyNTpyZXR1cm4gbmV3IEpydChlLmEsdCxtcyh0LkRoKCksZS5jKSxlLmQubik7Y2FzZSAyNzpyZXR1cm4gbmV3IExuKGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDI5OnJldHVybiBuZXcgUXJ0KGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDMxOnJldHVybiBuZXcgWHJ0KGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDMzOnJldHVybiBuZXcgYzRlKGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDM1OnJldHVybiBuZXcgbzRlKGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDM3OnJldHVybiBuZXcgZmFlKGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDM5OnJldHVybiBuZXcgcEgoZS5hLHQsbXModC5EaCgpLGUuYyksZS5kLm4pO2Nhc2UgNDA6cmV0dXJuIG5ldyBMcyh0LG1zKHQuRGgoKSxlLmMpKTtkZWZhdWx0OnRocm93IHVlKG5ldyBBYygiVW5rbm93biBmZWF0dXJlIHN0eWxlOiAiK2UuZSkpfX1mdW5jdGlvbiBFd3QoZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3Iobz0wLGE9ZS5hLmIsdz1ScihlLmEsMCk7dy5iIT13LmQuYzspe2lmKGc9bChCcih3KSwyNDApLGY9KG8rMSkvKGErMSksIWUuYyYmIWUuZClyZXR1cm47ZS5jJiYhZS5kPyhlLmc9ITAsZS5iPT0oSnMoKSx1Yyk/KHI9ZS5jLmUuYitlLmMuZi5iK2UuZSoobysxKSx0PW5ldyBsdCh6ZShHZShRKGUuYywoUWkoKSxrMCkpKSkrZS5lLHIpLG49bmV3IGx0KHplKEdlKFEoZS5jLGMxKSkpLWUuZSxyKSk6ZS5iPT12Yz8ocj1lLmMuZS5iK2UuYy5mLmIrZS5lKihvKzEpLHQ9bmV3IGx0KHplKEdlKFEoZS5jLChRaSgpLGMxKSkpKS1lLmUsciksbj1uZXcgbHQoemUoR2UoUShlLmMsazApKSkrZS5lLHIpKTplLmI9PXdmPyhyPWUuYy5lLmErZS5jLmYuYStlLmUqKG8rMSksdD1uZXcgbHQocix6ZShHZShRKGUuYywoUWkoKSxrMCkpKSkrZS5lKSxuPW5ldyBsdChyLHplKEdlKFEoZS5jLGMxKSkpLWUuZSkpOihyPWUuYy5lLmErZS5jLmYuYStlLmUqKG8rMSksdD1uZXcgbHQocix6ZShHZShRKGUuYywoUWkoKSxjMSkpKSktZS5lKSxuPW5ldyBsdChyLHplKEdlKFEoZS5jLGswKSkpK2UuZSkpKTplLmMmJmUuZD9lLmI9PShKcygpLHVjKT8ocj1lLmQuZS5iKmYrKGUuYy5lLmIrZS5jLmYuYikqKDEtZiksdD1uZXcgbHQoemUoR2UoUShlLmMsKFFpKCksazApKSkpK2UuZSxyKSxuPW5ldyBsdCh6ZShHZShRKGUuYyxjMSkpKS1lLmUscikpOmUuYj09dmM/KHI9ZS5kLmUuYipmKyhlLmMuZS5iK2UuYy5mLmIpKigxLWYpLHQ9bmV3IGx0KHplKEdlKFEoZS5jLChRaSgpLGMxKSkpKS1lLmUsciksbj1uZXcgbHQoemUoR2UoUShlLmMsazApKSkrZS5lLHIpKTplLmI9PXdmPyhyPWUuZC5lLmEqZisoZS5jLmUuYStlLmMuZi5hKSooMS1mKSx0PW5ldyBsdChyLHplKEdlKFEoZS5jLChRaSgpLGswKSkpKStlLmUpLG49bmV3IGx0KHIsemUoR2UoUShlLmMsYzEpKSktZS5lKSk6KHI9ZS5kLmUuYSpmKyhlLmMuZS5hK2UuYy5mLmEpKigxLWYpLHQ9bmV3IGx0KHIsemUoR2UoUShlLmMsKFFpKCksYzEpKSkpLWUuZSksbj1uZXcgbHQocix6ZShHZShRKGUuYyxrMCkpKStlLmUpKTooZS5mPSEwLGUuYj09KEpzKCksdWMpPyhyPWUuZC5lLmItZS5lKihvKzEpLHQ9bmV3IGx0KHplKEdlKFEoZS5kLChRaSgpLGswKSkpKStlLmUsciksbj1uZXcgbHQoemUoR2UoUShlLmQsYzEpKSktZS5lLHIpKTplLmI9PXZjPyhyPWUuZC5lLmItZS5lKihvKzEpLHQ9bmV3IGx0KHplKEdlKFEoZS5kLChRaSgpLGMxKSkpKS1lLmUsciksbj1uZXcgbHQoemUoR2UoUShlLmQsazApKSkrZS5lLHIpKTplLmI9PXdmPyhyPWUuZC5lLmEtZS5lKihvKzEpLHQ9bmV3IGx0KHIsemUoR2UoUShlLmQsKFFpKCksazApKSkpK2UuZSksbj1uZXcgbHQocix6ZShHZShRKGUuZCxjMSkpKS1lLmUpKToocj1lLmQuZS5hLWUuZSoobysxKSx0PW5ldyBsdChyLHplKEdlKFEoZS5kLChRaSgpLGMxKSkpKS1lLmUpLG49bmV3IGx0KHIsemUoR2UoUShlLmQsazApKSkrZS5lKSkpLGwoZy5hLDgpLmE9dC5hLGwoZy5hLDgpLmI9dC5iLGcuYi5hPW4uYSxnLmIuYj1uLmIsKytvfX1mdW5jdGlvbiBXSW4oZSx0LG4scixhLG8pe3ZhciBmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO3N3aXRjaCh0KXtjYXNlIDcxOmc9ci5xLmdldEZ1bGxZZWFyKCktTGI+PS0xOTAwPzE6MCxuPj00P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFtSd3Qsand0XSlbZ10pOmhpKGUsaGUobGUoenQsMSksZHQsMiw2LFsiQkMiLCJBRCJdKVtnXSk7YnJlYWs7Y2FzZSAxMjE6aDZuKGUsbixyKTticmVhaztjYXNlIDc3Ok1fbihlLG4scik7YnJlYWs7Y2FzZSAxMDc6dz1hLnEuZ2V0SG91cnMoKSx3PT0wP2FnKGUsMjQsbik6YWcoZSx3LG4pO2JyZWFrO2Nhc2UgODM6SFRuKGUsbixhKTticmVhaztjYXNlIDY5OkM9ci5xLmdldERheSgpLG49PTU/aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0pW0NdKTpuPT00P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFtRbGUsSmxlLFpsZSxlaGUsdGhlLG5oZSxyaGVdKVtDXSk6aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSlbQ10pO2JyZWFrO2Nhc2UgOTc6YS5xLmdldEhvdXJzKCk+PTEyJiZhLnEuZ2V0SG91cnMoKTwyND9oaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIkFNIiwiUE0iXSlbMV0pOmhpKGUsaGUobGUoenQsMSksZHQsMiw2LFsiQU0iLCJQTSJdKVswXSk7YnJlYWs7Y2FzZSAxMDQ6TD1hLnEuZ2V0SG91cnMoKSUxMixMPT0wP2FnKGUsMTIsbik6YWcoZSxMLG4pO2JyZWFrO2Nhc2UgNzU6Qj1hLnEuZ2V0SG91cnMoKSUxMixhZyhlLEIsbik7YnJlYWs7Y2FzZSA3Mjp6PWEucS5nZXRIb3VycygpLGFnKGUseixuKTticmVhaztjYXNlIDk5OlY9ci5xLmdldERheSgpLG49PTU/aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0pW1ZdKTpuPT00P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFtRbGUsSmxlLFpsZSxlaGUsdGhlLG5oZSxyaGVdKVtWXSk6bj09Mz9oaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKVtWXSk6YWcoZSxWLDEpO2JyZWFrO2Nhc2UgNzY6Sj1yLnEuZ2V0TW9udGgoKSxuPT01P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0pW0pdKTpuPT00P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFskbGUsemxlLHFsZSxIbGUsX3gsVmxlLFVsZSxHbGUsS2xlLFdsZSxZbGUsWGxlXSlbSl0pOm49PTM/aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLF94LCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSlbSl0pOmFnKGUsSisxLG4pO2JyZWFrO2Nhc2UgODE6dGU9ci5xLmdldE1vbnRoKCkvM3wwLG48ND9oaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIlExIiwiUTIiLCJRMyIsIlE0Il0pW3RlXSk6aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyIxc3QgcXVhcnRlciIsIjJuZCBxdWFydGVyIiwiM3JkIHF1YXJ0ZXIiLCI0dGggcXVhcnRlciJdKVt0ZV0pO2JyZWFrO2Nhc2UgMTAwOmZlPXIucS5nZXREYXRlKCksYWcoZSxmZSxuKTticmVhaztjYXNlIDEwOTpFPWEucS5nZXRNaW51dGVzKCksYWcoZSxFLG4pO2JyZWFrO2Nhc2UgMTE1OmY9YS5xLmdldFNlY29uZHMoKSxhZyhlLGYsbik7YnJlYWs7Y2FzZSAxMjI6bjw0P2hpKGUsby5jWzBdKTpoaShlLG8uY1sxXSk7YnJlYWs7Y2FzZSAxMTg6aGkoZSxvLmIpO2JyZWFrO2Nhc2UgOTA6bjwzP2hpKGUsQmtuKG8pKTpuPT0zP2hpKGUsemtuKG8pKTpoaShlLHFrbihvLmEpKTticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIFdrZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2k7aWYoZW10KHQpLHc9bChPZSgoIXQuYiYmKHQuYj1uZXcgTG4oX3IsdCw0LDcpKSx0LmIpLDApLDg0KSxDPWwoT2UoKCF0LmMmJih0LmM9bmV3IExuKF9yLHQsNSw4KSksdC5jKSwwKSw4NCksZz1iYyh3KSxFPWJjKEMpLGY9KCF0LmEmJih0LmE9bmV3IG50KGNzLHQsNiw2KSksdC5hKS5pPT0wP251bGw6bChPZSgoIXQuYSYmKHQuYT1uZXcgbnQoY3MsdCw2LDYpKSx0LmEpLDApLDE2NiksU3Q9bChjcihlLmEsZyksMTApLGpuPWwoY3IoZS5hLEUpLDEwKSxjbj1udWxsLHVyPW51bGwsRGUodywxOTMpJiYob3Q9bChjcihlLmEsdyksMzA1KSxEZShvdCwxMik/Y249bChvdCwxMik6RGUob3QsMTApJiYoU3Q9bChvdCwxMCksY249bChqdChTdC5qLDApLDEyKSkpLERlKEMsMTkzKSYmKEJuPWwoY3IoZS5hLEMpLDMwNSksRGUoQm4sMTIpP3VyPWwoQm4sMTIpOkRlKEJuLDEwKSYmKGpuPWwoQm4sMTApLHVyPWwoanQoam4uaiwwKSwxMikpKSwhU3R8fCFqbil0aHJvdyB1ZShuZXcgSTgoIlRoZSBzb3VyY2Ugb3IgdGhlIHRhcmdldCBvZiBlZGdlICIrdCsiIGNvdWxkIG5vdCBiZSBmb3VuZC4gVGhpcyB1c3VhbGx5IGhhcHBlbnMgd2hlbiBhbiBlZGdlIGNvbm5lY3RzIGEgbm9kZSBsYWlkIG91dCBieSBFTEsgTGF5ZXJlZCB0byBhIG5vZGUgaW4gYW5vdGhlciBsZXZlbCBvZiBoaWVyYXJjaHkgbGFpZCBvdXQgYnkgZWl0aGVyIGFub3RoZXIgaW5zdGFuY2Ugb2YgRUxLIExheWVyZWQgb3IgYW5vdGhlciBsYXlvdXQgYWxnb3JpdGhtIGFsbHRvZ2V0aGVyLiBUaGUgZm9ybWVyIGNhbiBiZSBzb2x2ZWQgYnkgc2V0dGluZyB0aGUgaGllcmFyY2h5SGFuZGxpbmcgb3B0aW9uIHRvIElOQ0xVREVfQ0hJTERSRU4uIikpO2ZvcihKPW5ldyBUdyxwYyhKLHQpLHJ0KEosKGZ0KCksemkpLHQpLHJ0KEosKE50KCksY2MpLG51bGwpLHo9bChRKHIsTHUpLDIxKSxTdD09am4mJnouRmMoKEhvKCksR0wpKSxjbnx8KFplPShxbygpLHp1KSxhbj1udWxsLGYmJlA1KGwoUShTdCxNcyksMTAxKSkmJihhbj1uZXcgbHQoZi5qLGYuayksVmN0KGFuLFdPKHQpKSx2dXQoYW4sbiksTHkoRSxnKSYmKFplPSRsLE9pKGFuLFN0Lm4pKSksY249dHZ0KFN0LGFuLFplLHIpKSx1cnx8KFplPShxbygpLCRsKSxvaT1udWxsLGYmJlA1KGwoUShqbixNcyksMTAxKSkmJihvaT1uZXcgbHQoZi5iLGYuYyksVmN0KG9pLFdPKHQpKSx2dXQob2ksbikpLHVyPXR2dChqbixvaSxaZSxlbyhqbikpKSxwbyhKLGNuKSxGYShKLHVyKSwoY24uZS5jLmxlbmd0aD4xfHxjbi5nLmMubGVuZ3RoPjF8fHVyLmUuYy5sZW5ndGg+MXx8dXIuZy5jLmxlbmd0aD4xKSYmei5GYygoSG8oKSxVTCkpLEI9bmV3IG9yKCghdC5uJiYodC5uPW5ldyBudChlYyx0LDEsNykpLHQubikpO0IuZSE9Qi5pLmdjKCk7KWlmKEw9bChncihCKSwxMzUpLCFSdChCdChhdChMLG12KSkpJiZMLmEpc3dpdGNoKHRlPU9jZShMKSx2dChKLmIsdGUpLGwoUSh0ZSxqZCksMjc4KS5nKXtjYXNlIDE6Y2FzZSAyOnouRmMoKEhvKCksalQpKTticmVhaztjYXNlIDA6ei5GYygoSG8oKSxSVCkpLHJ0KHRlLGpkLChGMSgpLG5DKSl9aWYobz1sKFEocixKTCksMzIyKSxmZT1sKFEocix5VyksMzIzKSxhPW89PShkQSgpLG1CKXx8ZmU9PShPQSgpLHZkZSksZiYmKCFmLmEmJihmLmE9bmV3IFlzKHFoLGYsNSkpLGYuYSkuaSE9MCYmYSl7Zm9yKFRlPVFOKGYpLFY9bmV3IGJsLCRlPVJyKFRlLDApOyRlLmIhPSRlLmQuYzspTWU9bChCcigkZSksOCksdWkoVixuZXcgRW8oTWUpKTtydChKLHFMZSxWKX1yZXR1cm4gSn1mdW5jdGlvbiBZSW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzO2Zvcihhbj0wLEJuPTAsU3Q9bmV3IFByLFplPWwoZmgodnkoZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyBKdGUpLG5ldyBzbmUpKSwxNykuYSsxLGNuPVdlKFZyLGRpLDI4LFplLDE1LDEpLHRlPVdlKFZyLGRpLDI4LFplLDE1LDEpLEo9MDtKPFplO0orKyljbltKXT0wLHRlW0pdPTA7Zm9yKHc9bCh5YyhWNWUobmV3IGJuKG51bGwsbmV3IGtuKGUuYSwxNikpKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSksQz13LktjKCk7Qy5PYigpOylpZihFPWwoQy5QYigpLDY1KSx1cj1sKFEoRS5iLChIYygpLCRkKSksMTcpLmEsd3M9bChRKEUuYywkZCksMTcpLmEsJGU9d3MtdXIsJGU+MSlmb3IoZz11cisxO2c8d3M7ZysrKXtpZihMPWcsb3Q9bCh5YyhGaShuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IHdYZShMKSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksVj0wLHQ9PShKcygpLHVjKXx8dD09dmMpe2ZvcihvdC5qZChuZXcgcm5lKSxWPTA7VjxvdC5nYygpJiYoZmU9KGctdXIpLyh3cy11ciksIShsKG90LlhiKFYpLDQwKS5lLmI+RS5iLmUuYiooMS1mZSkrRS5jLmUuYipmZSkpO1YrKyk7aWYob3QuZ2MoKT4wJiYob2k9RS5hLmI9PTA/SmEoRS5iLmUpOmwobzAoRS5hKSw4KSxNZT1PaShKYShsKG90LlhiKG90LmdjKCktMSksNDApLmUpLGwob3QuWGIob3QuZ2MoKS0xKSw0MCkuZiksQj1PaShKYShsKG90LlhiKDApLDQwKS5lKSxsKG90LlhiKDApLDQwKS5mKSxWPj1vdC5nYygpLTEmJm9pLmI+TWUuYiYmRS5jLmUuYj5NZS5ifHxWPD0wJiZvaS5iPEIuYSYmRS5jLmUuYjxCLmIpKWNvbnRpbnVlfWVsc2V7Zm9yKG90LmpkKG5ldyBpbmUpLFY9MDtWPG90LmdjKCkmJihmZT0oZy11cikvKHdzLXVyKSwhKGwob3QuWGIoViksNDApLmUuYT5FLmIuZS5hKigxLWZlKStFLmMuZS5hKmZlKSk7VisrKTtpZihvdC5nYygpPjAmJihvaT1FLmEuYj09MD9KYShFLmIuZSk6bChvMChFLmEpLDgpLE1lPU9pKEphKGwob3QuWGIob3QuZ2MoKS0xKSw0MCkuZSksbChvdC5YYihvdC5nYygpLTEpLDQwKS5mKSxCPU9pKEphKGwob3QuWGIoMCksNDApLmUpLGwob3QuWGIoMCksNDApLmYpLFY+PW90LmdjKCktMSYmb2kuYT5NZS5hJiZFLmMuZS5hPk1lLmF8fFY8PTAmJm9pLmE8Qi5hJiZFLmMuZS5hPEIuYSkpY29udGludWV9YT1uZXcgcWEsbz1uZXcgcWEsdWkoRS5hLGEpLHVpKEUuYSxvKSxmPW5ldyB3YWUoYSxvLEUpLFRlPVEwKGwwKGcsMzIpLHZhKFYsVm8pKSxIdShTdCxhcChUZSkpPyh6PWwoY3IoU3QsYXAoVGUpKSw2NzUpLHVpKHouYSxmKSxVZyh6LmIpPyRtKHouYSxuZXcgaG5lKTokbSh6LmEsbmV3IGZuZSksRXd0KHopKTooej1uZXcgRmR0KFY9PTA/bnVsbDpsKG90LlhiKFYtMSksNDApLFY9PW90LmdjKCk/bnVsbDpsKG90LlhiKFYpLDQwKSxmLGUpLGtpKFN0LGFwKFRlKSx6KSksdD09dWN8fHQ9PXZjPyh6LmYmJnouZC5lLmI8PXplKEdlKFEoZSwoUWkoKSxGZGUpKSkpJiYrK2FuLHouZyYmei5jLmUuYit6LmMuZi5iPj16ZShHZShRKGUsKFFpKCksaUllKSkpKSYmKytCbik6KHouZiYmei5kLmUuYTw9emUoR2UoUShlLChRaSgpLEJkZSkpKSkmJisrYW4sei5nJiZ6LmMuZS5hK3ouYy5mLmE+PXplKEdlKFEoZSwoUWkoKSxySWUpKSkpJiYrK0JuKX1lbHNlICRlPT0wP2I5ZShFKTokZTwwJiYoKytjblt1cl0sKyt0ZVt3c10sam49VkluKEUsdCxlLG5ldyBjYShwdChhbikscHQoQm4pKSxuLHIsbmV3IGNhKHB0KHRlW3dzXSkscHQoY25bdXJdKSkpLGFuPWwoam4uYSwxNykuYSxCbj1sKGpuLmIsMTcpLmEpfWZ1bmN0aW9uIFhJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGU7aWYocj10LHc9bixlLmImJnIuaj09KEN0KCksZXIpJiZ3Lmo9PShDdCgpLGVyKSYmKFRlPXIscj13LHc9VGUpLEh1KGUuYSxyKSl7aWYoVzAobChjcihlLmEsciksNDkpLHcpKXJldHVybiAxfWVsc2Uga2koZS5hLHIsbmV3IEtzKTtpZihIdShlLmEsdykpe2lmKFcwKGwoY3IoZS5hLHcpLDQ5KSxyKSlyZXR1cm4tMX1lbHNlIGtpKGUuYSx3LG5ldyBLcyk7aWYoSHUoZS5kLHIpKXtpZihXMChsKGNyKGUuZCxyKSw0OSksdykpcmV0dXJuLTF9ZWxzZSBraShlLmQscixuZXcgS3MpO2lmKEh1KGUuZCx3KSl7aWYoVzAobChjcihlLmEsdyksNDkpLHIpKXJldHVybiAxfWVsc2Uga2koZS5kLHcsbmV3IEtzKTtpZihyLmohPXcuailyZXR1cm4gZmU9UmxuKHIuaix3LmopLGZlPT0tMT9kZihlLHcscik6ZGYoZSxyLHcpLGZlO2lmKHIuZS5jLmxlbmd0aCE9MCYmdy5lLmMubGVuZ3RoIT0wKXtpZihlLmImJihmZT1qMHQocix3KSxmZSE9MCkpcmV0dXJuIGZlPT0tMT9kZihlLHcscik6ZmU9PTEmJmRmKGUscix3KSxmZTtpZihvPWwoanQoci5lLDApLDE4KS5jLmksQz1sKGp0KHcuZSwwKSwxOCkuYy5pLG89PUMpcmV0dXJuIGE9bChRKGwoanQoci5lLDApLDE4KSwoZnQoKSxLaSkpLDE3KS5hLEU9bChRKGwoanQody5lLDApLDE4KSxLaSksMTcpLmEsYT5FP2RmKGUscix3KTpkZihlLHcsciksYTxFPy0xOmE+RT8xOjA7Zm9yKFY9ZS5jLEo9MCx0ZT1WLmxlbmd0aDtKPHRlOysrSil7aWYoej1WW0pdLHo9PW8pcmV0dXJuIGRmKGUscix3KSwxO2lmKHo9PUMpcmV0dXJuIGRmKGUsdyxyKSwtMX19cmV0dXJuIHIuZy5jLmxlbmd0aCE9MCYmdy5nLmMubGVuZ3RoIT0wPyhnPWwoUShyLChmdCgpLFUxZSkpLDEwKSxCPWwoUSh3LFUxZSksMTApLGUuZT09KEVkKCkseGRlKSYmZyYmQiYmbnMoZyxLaSkmJm5zKEIsS2kpPyhhPWwoUShnLEtpKSwxNykuYSxFPWwoUShCLEtpKSwxNykuYSxhPkU/ZGYoZSxyLHcpOmRmKGUsdyxyKSxhPEU/LTE6YT5FPzE6MCk6ZS5iJiYoZmU9ajB0KHIsdyksZmUhPTApPyhmZT09LTE/ZGYoZSx3LHIpOmZlPT0xJiZkZihlLHIsdyksZmUpOihmPTAsTD0wLG5zKGwoanQoci5nLDApLDE4KSxLaSkmJihmPWwoUShsKGp0KHIuZywwKSwxOCksS2kpLDE3KS5hKSxucyhsKGp0KHcuZywwKSwxOCksS2kpJiYoTD1sKFEobChqdChyLmcsMCksMTgpLEtpKSwxNykuYSksZyYmZz09Qj9SdChCdChRKGwoanQoci5nLDApLDE4KSxXMSkpKSYmIVJ0KEJ0KFEobChqdCh3LmcsMCksMTgpLFcxKSkpPyhkZihlLHIsdyksMSk6IVJ0KEJ0KFEobChqdChyLmcsMCksMTgpLFcxKSkpJiZSdChCdChRKGwoanQody5nLDApLDE4KSxXMSkpKT8oZGYoZSx3LHIpLC0xKTooZj5MP2RmKGUscix3KTpkZihlLHcsciksZjxMPy0xOmY+TD8xOjApOihlLmYmJihlLmYuX2IoZykmJihmPWwoZS5mLnhjKGcpLDE3KS5hKSxlLmYuX2IoQikmJihMPWwoZS5mLnhjKEIpLDE3KS5hKSksZj5MP2RmKGUscix3KTpkZihlLHcsciksZjxMPy0xOmY+TD8xOjApKSk6ci5lLmMubGVuZ3RoIT0wJiZ3LmcuYy5sZW5ndGghPTA/KGRmKGUscix3KSwxKTpyLmcuYy5sZW5ndGghPTAmJncuZS5jLmxlbmd0aCE9MD8oZGYoZSx3LHIpLC0xKTpucyhyLChmdCgpLEtpKSkmJm5zKHcsS2kpPyhhPWwoUShyLEtpKSwxNykuYSxFPWwoUSh3LEtpKSwxNykuYSxhPkU/ZGYoZSxyLHcpOmRmKGUsdyxyKSxhPEU/LTE6YT5FPzE6MCk6KGRmKGUsdyxyKSwtMSl9ZnVuY3Rpb24gUUluKGUpe2UuZ2J8fChlLmdiPSEwLGUuYj1xYyhlLDApLFNzKGUuYiwxOCksaXMoZS5iLDE5KSxlLmE9cWMoZSwxKSxTcyhlLmEsMSksaXMoZS5hLDIpLGlzKGUuYSwzKSxpcyhlLmEsNCksaXMoZS5hLDUpLGUubz1xYyhlLDIpLFNzKGUubyw4KSxTcyhlLm8sOSksaXMoZS5vLDEwKSxpcyhlLm8sMTEpLGlzKGUubywxMiksaXMoZS5vLDEzKSxpcyhlLm8sMTQpLGlzKGUubywxNSksaXMoZS5vLDE2KSxpcyhlLm8sMTcpLGlzKGUubywxOCksaXMoZS5vLDE5KSxpcyhlLm8sMjApLGlzKGUubywyMSksaXMoZS5vLDIyKSxpcyhlLm8sMjMpLHNjKGUubyksc2MoZS5vKSxzYyhlLm8pLHNjKGUubyksc2MoZS5vKSxzYyhlLm8pLHNjKGUubyksc2MoZS5vKSxzYyhlLm8pLHNjKGUubyksZS5wPXFjKGUsMyksU3MoZS5wLDIpLFNzKGUucCwzKSxTcyhlLnAsNCksU3MoZS5wLDUpLGlzKGUucCw2KSxpcyhlLnAsNyksc2MoZS5wKSxzYyhlLnApLGUucT1xYyhlLDQpLFNzKGUucSw4KSxlLnY9cWMoZSw1KSxpcyhlLnYsOSksc2MoZS52KSxzYyhlLnYpLHNjKGUudiksZS53PXFjKGUsNiksU3MoZS53LDIpLFNzKGUudywzKSxTcyhlLncsNCksaXMoZS53LDUpLGUuQj1xYyhlLDcpLGlzKGUuQiwxKSxzYyhlLkIpLHNjKGUuQiksc2MoZS5CKSxlLlE9cWMoZSw4KSxpcyhlLlEsMCksc2MoZS5RKSxlLlI9cWMoZSw5KSxTcyhlLlIsMSksZS5TPXFjKGUsMTApLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLGUuVD1xYyhlLDExKSxpcyhlLlQsMTApLGlzKGUuVCwxMSksaXMoZS5ULDEyKSxpcyhlLlQsMTMpLGlzKGUuVCwxNCksc2MoZS5UKSxzYyhlLlQpLGUuVT1xYyhlLDEyKSxTcyhlLlUsMiksU3MoZS5VLDMpLGlzKGUuVSw0KSxpcyhlLlUsNSksaXMoZS5VLDYpLGlzKGUuVSw3KSxzYyhlLlUpLGUuVj1xYyhlLDEzKSxpcyhlLlYsMTApLGUuVz1xYyhlLDE0KSxTcyhlLlcsMTgpLFNzKGUuVywxOSksU3MoZS5XLDIwKSxpcyhlLlcsMjEpLGlzKGUuVywyMiksaXMoZS5XLDIzKSxlLmJiPXFjKGUsMTUpLFNzKGUuYmIsMTApLFNzKGUuYmIsMTEpLFNzKGUuYmIsMTIpLFNzKGUuYmIsMTMpLFNzKGUuYmIsMTQpLFNzKGUuYmIsMTUpLFNzKGUuYmIsMTYpLGlzKGUuYmIsMTcpLHNjKGUuYmIpLHNjKGUuYmIpLGUuZWI9cWMoZSwxNiksU3MoZS5lYiwyKSxTcyhlLmViLDMpLFNzKGUuZWIsNCksU3MoZS5lYiw1KSxTcyhlLmViLDYpLFNzKGUuZWIsNyksaXMoZS5lYiw4KSxpcyhlLmViLDkpLGUuYWI9cWMoZSwxNyksU3MoZS5hYiwwKSxTcyhlLmFiLDEpLGUuSD1xYyhlLDE4KSxpcyhlLkgsMCksaXMoZS5ILDEpLGlzKGUuSCwyKSxpcyhlLkgsMyksaXMoZS5ILDQpLGlzKGUuSCw1KSxzYyhlLkgpLGUuZGI9cWMoZSwxOSksaXMoZS5kYiwyKSxlLmM9VGkoZSwyMCksZS5kPVRpKGUsMjEpLGUuZT1UaShlLDIyKSxlLmY9VGkoZSwyMyksZS5pPVRpKGUsMjQpLGUuZz1UaShlLDI1KSxlLmo9VGkoZSwyNiksZS5rPVRpKGUsMjcpLGUubj1UaShlLDI4KSxlLnI9VGkoZSwyOSksZS5zPVRpKGUsMzApLGUudD1UaShlLDMxKSxlLnU9VGkoZSwzMiksZS5mYj1UaShlLDMzKSxlLkE9VGkoZSwzNCksZS5DPVRpKGUsMzUpLGUuRD1UaShlLDM2KSxlLkY9VGkoZSwzNyksZS5HPVRpKGUsMzgpLGUuST1UaShlLDM5KSxlLko9VGkoZSw0MCksZS5MPVRpKGUsNDEpLGUuTT1UaShlLDQyKSxlLk49VGkoZSw0MyksZS5PPVRpKGUsNDQpLGUuUD1UaShlLDQ1KSxlLlg9VGkoZSw0NiksZS5ZPVRpKGUsNDcpLGUuWj1UaShlLDQ4KSxlLiQ9VGkoZSw0OSksZS5fPVRpKGUsNTApLGUuY2I9VGkoZSw1MSksZS5LPVRpKGUsNTIpKX1mdW5jdGlvbiBKSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyO2ZvcihmPW5ldyBvcyxvdD1sKFEobiwoTnQoKSxSaCkpLDg4KSxKPTAsS2EoZiwoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpO2YuYiE9MDspQz1sKGYuYj09MD9udWxsOihtcihmLmIhPTApLGFmKGYsZi5hLmEpKSwyNyksRT1kcyhDKSwocWUoYXQoRSx5ZykpIT09cWUoKEVkKCksRTIpKXx8cWUoYXQoRSxkdikpPT09cWUoKGwyKCksQlQpKXx8cWUoYXQoRSxkdikpPT09cWUoKGwyKCksUFQpKXx8UnQoQnQoYXQoRSxmMykpKXx8cWUoYXQoRSxnNCkpIT09cWUoKEttKCksYzQpKXx8cWUoYXQoRSx6YikpPT09cWUoKE5mKCksdjMpKXx8cWUoYXQoRSx6YikpPT09cWUoKE5mKCkseDQpKXx8cWUoYXQoRSxwdikpPT09cWUoKHAyKCksV1QpKXx8cWUoYXQoRSxwdikpPT09cWUoKHAyKCksWVQpKSkmJiFSdChCdChhdChDLGZXKSkpJiZIaShDLChmdCgpLEtpKSxwdChKKyspKSxmZT0hUnQoQnQoYXQoQyxtdikpKSxmZSYmKEI9KCFDLmEmJihDLmE9bmV3IG50KEFpLEMsMTAsMTEpKSxDLmEpLmkhPTAsVj1feG4oQyksej1xZShhdChDLHA0KSk9PT1xZSgocnAoKSxBMikpLHVyPSFQMShDLChwaSgpLGVDKSl8fFN1dChlaShhdChDLGVDKSkpLCRlPW51bGwsdXImJnomJihCfHxWKSYmKCRlPVBtdChDKSxydCgkZSxSaCxvdCksbnMoJGUsQ0IpJiZOSmUobmV3IEQ4ZSh6ZShHZShRKCRlLENCKSkpKSwkZSksbChhdChDLGJ2KSwxODEpLmdjKCkhPTAmJihMPSRlLElzKG5ldyBibihudWxsLCghQy5jJiYoQy5jPW5ldyBudChIbCxDLDksOSkpLG5ldyBrbihDLmMsMTYpKSksbmV3IHpXZShMKSksX2J0KEMsJGUpKSksU3Q9bixjbj1sKGNyKGUuYSxkcyhDKSksMTApLGNuJiYoU3Q9Y24uZSksTWU9Y3d0KGUsQyxTdCksJGUmJihNZS5lPSRlLCRlLmU9TWUsS2EoZiwoIUMuYSYmKEMuYT1uZXcgbnQoQWksQywxMCwxMSkpLEMuYSkpKSk7Zm9yKEo9MCxDcyhmLHQsZi5jLmIsZi5jKTtmLmIhPTA7KXtmb3Iobz1sKGYuYj09MD9udWxsOihtcihmLmIhPTApLGFmKGYsZi5hLmEpKSwyNyksdz1uZXcgb3IoKCFvLmImJihvLmI9bmV3IG50KGpzLG8sMTIsMykpLG8uYikpO3cuZSE9dy5pLmdjKCk7KWc9bChncih3KSw3NCksZW10KGcpLChxZShhdCh0LHlnKSkhPT1xZSgoRWQoKSxFMikpfHxxZShhdCh0LGR2KSk9PT1xZSgobDIoKSxCVCkpfHxxZShhdCh0LGR2KSk9PT1xZSgobDIoKSxQVCkpfHxSdChCdChhdCh0LGYzKSkpfHxxZShhdCh0LGc0KSkhPT1xZSgoS20oKSxjNCkpfHxxZShhdCh0LHpiKSk9PT1xZSgoTmYoKSx2MykpfHxxZShhdCh0LHpiKSk9PT1xZSgoTmYoKSx4NCkpfHxxZShhdCh0LHB2KSk9PT1xZSgocDIoKSxXVCkpfHxxZShhdCh0LHB2KSk9PT1xZSgocDIoKSxZVCkpKSYmSGkoZywoZnQoKSxLaSkscHQoSisrKSksQm49YmMobChPZSgoIWcuYiYmKGcuYj1uZXcgTG4oX3IsZyw0LDcpKSxnLmIpLDApLDg0KSksam49YmMobChPZSgoIWcuYyYmKGcuYz1uZXcgTG4oX3IsZyw1LDgpKSxnLmMpLDApLDg0KSksIShSdChCdChhdChnLG12KSkpfHxSdChCdChhdChCbixtdikpKXx8UnQoQnQoYXQoam4sbXYpKSkpJiYodGU9cXcoZykmJlJ0KEJ0KGF0KEJuLGI0KSkpJiZSdChCdChhdChnLGd2KSkpLFplPW8sdGV8fEx5KGpuLEJuKT9aZT1CbjpMeShCbixqbikmJihaZT1qbiksU3Q9bixjbj1sKGNyKGUuYSxaZSksMTApLGNuJiYoU3Q9Y24uZSksVGU9V2tlKGUsZyxaZSxTdCkscnQoVGUsKGZ0KCksUkxlKSxKQ24oZSxnLHQsbikpKTtpZih6PXFlKGF0KG8scDQpKT09PXFlKChycCgpLEEyKSkseilmb3IoYT1uZXcgb3IoKCFvLmEmJihvLmE9bmV3IG50KEFpLG8sMTAsMTEpKSxvLmEpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMjcpLHVyPSFQMShyLChwaSgpLGVDKSl8fFN1dChlaShhdChyLGVDKSkpLGFuPXFlKGF0KHIscDQpKT09PXFlKEEyKSx1ciYmYW4mJkNzKGYscixmLmMuYixmLmMpfX1mdW5jdGlvbiBmdCgpe2Z0PVU7dmFyIGUsdDt6aT1uZXcgVWkoTkVlKSxSTGU9bmV3IFVpKCJjb29yZGluYXRlT3JpZ2luIiksSzFlPW5ldyBVaSgicHJvY2Vzc29ycyIpLEZMZT1uZXcgdnMoImNvbXBvdW5kTm9kZSIsKEhuKCksITEpKSx4Qj1uZXcgdnMoImluc2lkZUNvbm5lY3Rpb25zIiwhMSkscUxlPW5ldyBVaSgib3JpZ2luYWxCZW5kcG9pbnRzIiksSExlPW5ldyBVaSgib3JpZ2luYWxEdW1teU5vZGVQb3NpdGlvbiIpLFZMZT1uZXcgVWkoIm9yaWdpbmFsTGFiZWxFZGdlIiksV0w9bmV3IFVpKCJyZXByZXNlbnRlZExhYmVscyIpLEtMPW5ldyBVaSgiZW5kTGFiZWxzIiksS3g9bmV3IFVpKCJlbmRMYWJlbC5vcmlnaW4iKSxZeD1uZXcgdnMoImxhYmVsU2lkZSIsKEloKCksZUYpKSxSNj1uZXcgdnMoIm1heEVkZ2VUaGlja25lc3MiLDApLFcxPW5ldyB2cygicmV2ZXJzZWQiLCExKSxYeD1uZXcgVWkoQzN0KSxvMT1uZXcgdnMoImxvbmdFZGdlU291cmNlIixudWxsKSwkZj1uZXcgdnMoImxvbmdFZGdlVGFyZ2V0IixudWxsKSxmND1uZXcgdnMoImxvbmdFZGdlSGFzTGFiZWxEdW1taWVzIiwhMSksa0I9bmV3IHZzKCJsb25nRWRnZUJlZm9yZUxhYmVsRHVtbXkiLCExKSxzVz1uZXcgdnMoImVkZ2VDb25zdHJhaW50IiwoVm0oKSxNMWUpKSx1Mz1uZXcgVWkoImluTGF5ZXJMYXlvdXRVbml0IiksaHY9bmV3IHZzKCJpbkxheWVyQ29uc3RyYWludCIsKGVwKCksd0IpKSxXeD1uZXcgdnMoImluTGF5ZXJTdWNjZXNzb3JDb25zdHJhaW50IixuZXcgYnQpLHpMZT1uZXcgdnMoImluTGF5ZXJTdWNjZXNzb3JDb25zdHJhaW50QmV0d2Vlbk5vbkR1bW1pZXMiLCExKSxqbD1uZXcgVWkoInBvcnREdW1teSIpLGlXPW5ldyB2cygiY3Jvc3NpbmdIaW50IixwdCgwKSksTHU9bmV3IHZzKCJncmFwaFByb3BlcnRpZXMiLCh0PWwoSzAoRjFlKSw5KSxuZXcgWmgodCxsKGMwKHQsdC5sZW5ndGgpLDkpLDApKSksV2M9bmV3IHZzKCJleHRlcm5hbFBvcnRTaWRlIiwoQ3QoKSxQYykpLCRMZT1uZXcgdnMoImV4dGVybmFsUG9ydFNpemUiLG5ldyBxYSkscTFlPW5ldyBVaSgiZXh0ZXJuYWxQb3J0UmVwbGFjZWREdW1taWVzIiksYVc9bmV3IFVpKCJleHRlcm5hbFBvcnRSZXBsYWNlZER1bW15IikscHA9bmV3IHZzKCJleHRlcm5hbFBvcnRDb25uZWN0aW9ucyIsKGU9bChLMChPbyksOSksbmV3IFpoKGUsbChjMChlLGUubGVuZ3RoKSw5KSwwKSkpLGwzPW5ldyB2cyhiM3QsMCksQkxlPW5ldyBVaSgiYmFyeWNlbnRlckFzc29jaWF0ZXMiKSxReD1uZXcgVWkoIlRvcFNpZGVDb21tZW50cyIpLEd4PW5ldyBVaSgiQm90dG9tU2lkZUNvbW1lbnRzIiksclc9bmV3IFVpKCJDb21tZW50Q29ubmVjdGlvblBvcnQiKSxWMWU9bmV3IHZzKCJpbnB1dENvbGxlY3QiLCExKSxHMWU9bmV3IHZzKCJvdXRwdXRDb2xsZWN0IiwhMSkseUI9bmV3IHZzKCJjeWNsaWMiLCExKSxqTGU9bmV3IFVpKCJjcm9zc0hpZXJhcmNoeU1hcCIpLFkxZT1uZXcgVWkoInRhcmdldE9mZnNldCIpLG5ldyB2cygic3BsaW5lTGFiZWxTaXplIixuZXcgcWEpLCQ2PW5ldyBVaSgic3BhY2luZ3MiKSxvVz1uZXcgdnMoInBhcnRpdGlvbkNvbnN0cmFpbnQiLCExKSxjMz1uZXcgVWkoImJyZWFraW5nUG9pbnQuaW5mbyIpLEtMZT1uZXcgVWkoInNwbGluZXMuc3Vydml2aW5nRWRnZSIpLGZ2PW5ldyBVaSgic3BsaW5lcy5yb3V0ZS5zdGFydCIpLHo2PW5ldyBVaSgic3BsaW5lcy5lZGdlQ2hhaW4iKSxHTGU9bmV3IFVpKCJvcmlnaW5hbFBvcnRDb25zdHJhaW50cyIpLGgzPW5ldyBVaSgic2VsZkxvb3BIb2xkZXIiKSx6VD1uZXcgVWkoInNwbGluZXMubnNQb3J0WSIpLEtpPW5ldyBVaSgibW9kZWxPcmRlciIpLFUxZT1uZXcgVWkoImxvbmdFZGdlVGFyZ2V0Tm9kZSIpLGpiPW5ldyB2cyhRM3QsITEpLGo2PW5ldyB2cyhRM3QsITEpLEgxZT1uZXcgVWkoImxheWVyQ29uc3RyYWludHMuaGlkZGVuTm9kZXMiKSxVTGU9bmV3IFVpKCJsYXllckNvbnN0cmFpbnRzLm9wcG9zaWRlUG9ydCIpLFcxZT1uZXcgVWkoInRhcmdldE5vZGUubW9kZWxPcmRlciIpfWZ1bmN0aW9uIFpJbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihMPVJyKGUuYiwwKTtMLmIhPUwuZC5jOylpZihDPWwoQnIoTCksNDApLCF2bihDLmMsREcpKWZvcihvPWwoeWMobmV3IGJuKG51bGwsbmV3IGtuKGNFbihDLGUpLDE2KSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLHQ9PShKcygpLHVjKXx8dD09dmM/by5qZChuZXcgbm5lKTpvLmpkKG5ldyBvJCksVj1vLmdjKCksYT0wO2E8VjthKyspZj1WPT0xPy41OigxK2EpLyhWKzEpLHQ9PXVjPyhFPXplKEdlKFEoQywoUWkoKSxrMCkpKSksQy5lLmErQy5mLmErcjxFP2tvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoRStuLEMuZS5iK0MuZi5iKmYpKTpsKG8uWGIoYSksNjUpLmEuYj4wJiYoZz1sKG8wKGwoby5YYihhKSw2NSkuYSksOCkuYSxCPUMuZS5hK0MuZi5hLzIsdz1sKG8wKGwoby5YYihhKSw2NSkuYSksOCkuYix6PUMuZS5iK0MuZi5iLzIscj4wJiZiLk1hdGguYWJzKHcteikvKGIuTWF0aC5hYnMoZy1CKS80MCk+NTAmJih6Pnc/a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYStyLzUuMyxDLmUuYitDLmYuYipmLXIvMikpOmtvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmErci81LjMsQy5lLmIrQy5mLmIqZityLzIpKSkpLGtvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmEsQy5lLmIrQy5mLmIqZikpKTp0PT12Yz8oRT16ZShHZShRKEMsKFFpKCksYzEpKSkpLEMuZS5hLXI+RT9rbyhsKG8uWGIoYSksNjUpLmEsbmV3IGx0KEUtbixDLmUuYitDLmYuYipmKSk6bChvLlhiKGEpLDY1KS5hLmI+MCYmKGc9bChvMChsKG8uWGIoYSksNjUpLmEpLDgpLmEsQj1DLmUuYStDLmYuYS8yLHc9bChvMChsKG8uWGIoYSksNjUpLmEpLDgpLmIsej1DLmUuYitDLmYuYi8yLHI+MCYmYi5NYXRoLmFicyh3LXopLyhiLk1hdGguYWJzKGctQikvNDApPjUwJiYoej53P2tvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmEtci81LjMsQy5lLmIrQy5mLmIqZi1yLzIpKTprbyhsKG8uWGIoYSksNjUpLmEsbmV3IGx0KEMuZS5hLXIvNS4zLEMuZS5iK0MuZi5iKmYrci8yKSkpKSxrbyhsKG8uWGIoYSksNjUpLmEsbmV3IGx0KEMuZS5hLEMuZS5iK0MuZi5iKmYpKSk6dD09d2Y/KEU9emUoR2UoUShDLChRaSgpLGswKSkpKSxDLmUuYitDLmYuYityPEU/a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmLEUrbikpOmwoby5YYihhKSw2NSkuYS5iPjAmJihnPWwobzAobChvLlhiKGEpLDY1KS5hKSw4KS5hLEI9Qy5lLmErQy5mLmEvMix3PWwobzAobChvLlhiKGEpLDY1KS5hKSw4KS5iLHo9Qy5lLmIrQy5mLmIvMixyPjAmJmIuTWF0aC5hYnMoZy1CKS8oYi5NYXRoLmFicyh3LXopLzQwKT41MCYmKEI+Zz9rbyhsKG8uWGIoYSksNjUpLmEsbmV3IGx0KEMuZS5hK0MuZi5hKmYtci8yLEMuZS5iK3IvNS4zK0MuZi5iKSk6a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmK3IvMixDLmUuYityLzUuMytDLmYuYikpKSksa28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmLEMuZS5iK0MuZi5iKSkpOihFPXplKEdlKFEoQywoUWkoKSxjMSkpKSksQzB0KGwoby5YYihhKSw2NSksZSk/a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmLGwobzAobChvLlhiKGEpLDY1KS5hKSw4KS5iKSk6Qy5lLmItcj5FP2tvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmEqZixFLW4pKTpsKG8uWGIoYSksNjUpLmEuYj4wJiYoZz1sKG8wKGwoby5YYihhKSw2NSkuYSksOCkuYSxCPUMuZS5hK0MuZi5hLzIsdz1sKG8wKGwoby5YYihhKSw2NSkuYSksOCkuYix6PUMuZS5iK0MuZi5iLzIscj4wJiZiLk1hdGguYWJzKGctQikvKGIuTWF0aC5hYnMody16KS80MCk+NTAmJihCPmc/a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmLXIvMixDLmUuYi1yLzUuMykpOmtvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmEqZityLzIsQy5lLmItci81LjMpKSkpLGtvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmEqZixDLmUuYikpKX1mdW5jdGlvbiBwaSgpe3BpPVU7dmFyIGUsdDtlQz1uZXcgVWkoQnl0KSxhNz1uZXcgVWkoRnl0KSxlTmU9KG9nKCksU2dlKSxBU3Q9bmV3IHBuKHFUZSxlTmUpLFo2PW5ldyBwbihPeCxudWxsKSxMU3Q9bmV3IFVpKHRTZSksbk5lPShZbSgpLHJzKExnZSxoZShsZShNZ2UsMSksaXQsMjk4LDAsW0FnZV0pKSksVUI9bmV3IHBuKFNHLG5OZSksR0I9bmV3IHBuKFZQLChIbigpLCExKSksck5lPShKcygpLEoxKSx4dj1uZXcgcG4oZ2ZlLHJOZSksYU5lPShpcCgpLEhnZSksc05lPW5ldyBwbihIUCxhTmUpLElTdD1uZXcgcG4oWkNlLCExKSx1TmU9KHJwKCksb1kpLG43PW5ldyBwbihDRyx1TmUpLHZOZT1uZXcgbHcoMTIpLF8yPW5ldyBwbihYdyx2TmUpLFdCPW5ldyBwbihoTCwhMSksTmdlPW5ldyBwbihBRywhMSksWUI9bmV3IHBuKGZMLCExKSxFTmU9KFJhKCksV2IpLF9NPW5ldyBwbihOaGUsRU5lKSxuOT1uZXcgVWkoX0cpLFhCPW5ldyBVaShOUCksemdlPW5ldyBVaShvRykscWdlPW5ldyBVaShsTCksbE5lPW5ldyBibCx4Mz1uZXcgcG4oWlRlLGxOZSksRFN0PW5ldyBwbihuQ2UsITEpLE9TdD1uZXcgcG4ockNlLCExKSxoTmU9bmV3IHNfLHRDPW5ldyBwbihzQ2UsaE5lKSxyWT1uZXcgcG4oJFRlLCExKSxGU3Q9bmV3IHBuKFJ5dCwxKSx0Nz1uZXcgVWkoanl0KSxlNz1uZXcgVWkoJHl0KSxBTT1uZXcgcG4oUFAsITEpLG5ldyBwbih6eXQsITApLHB0KDApLG5ldyBwbihxeXQscHQoMTAwKSksbmV3IHBuKEh5dCwhMSkscHQoMCksbmV3IHBuKFZ5dCxwdCg0ZTMpKSxwdCgwKSxuZXcgcG4oVXl0LHB0KDQwMCkpLG5ldyBwbihHeXQsITEpLG5ldyBwbihLeXQsITEpLG5ldyBwbihXeXQsITApLG5ldyBwbihZeXQsITEpLHROZT0oVlYoKSxLZ2UpLE1TdD1uZXcgcG4oZVNlLHROZSksUlN0PW5ldyBwbihMVGUsMTApLGpTdD1uZXcgcG4oTVRlLDEwKSxfTmU9bmV3IHBuKF9oZSwyMCksJFN0PW5ldyBwbihEVGUsMTApLEFOZT1uZXcgcG4oT2hlLDIpLExOZT1uZXcgcG4oZGZlLDEwKSxNTmU9bmV3IHBuKElUZSwwKSxpWT1uZXcgcG4oUFRlLDUpLEROZT1uZXcgcG4oT1RlLDEpLElOZT1uZXcgcG4oTlRlLDEpLEV2PW5ldyBwbihKeSwyMCkselN0PW5ldyBwbihCVGUsMTApLFBOZT1uZXcgcG4oRlRlLDEwKSxyOT1uZXcgVWkoUlRlKSxOTmU9bmV3IG5udCxPTmU9bmV3IHBuKGFDZSxOTmUpLFBTdD1uZXcgVWkoYmZlKSx3TmU9ITEsTlN0PW5ldyBwbihwZmUsd05lKSxkTmU9bmV3IGx3KDUpLGZOZT1uZXcgcG4oVVRlLGROZSksZ05lPShxeSgpLHQ9bChLMChLbyksOSksbmV3IFpoKHQsbChjMCh0LHQubGVuZ3RoKSw5KSwwKSkscjc9bmV3IHBuKGZULGdOZSkseE5lPSh0NigpLEtiKSx5TmU9bmV3IHBuKFdUZSx4TmUpLEJnZT1uZXcgVWkoWVRlKSxGZ2U9bmV3IFVpKFhUZSksUmdlPW5ldyBVaShRVGUpLFBnZT1uZXcgVWkoSlRlKSxwTmU9KGU9bChLMChCTSksOSksbmV3IFpoKGUsbChjMChlLGUubGVuZ3RoKSw5KSwwKSksa3Y9bmV3IHBuKHg2LHBOZSksbU5lPXVuKChabCgpLGFDKSksVWI9bmV3IHBuKE54LG1OZSksYk5lPW5ldyBsdCgwLDApLGk3PW5ldyBwbihQeCxiTmUpLEM0PW5ldyBwbihoVCwhMSksaU5lPShGMSgpLG5DKSxJZ2U9bmV3IHBuKGVDZSxpTmUpLERnZT1uZXcgcG4oY0csITEpLHB0KDEpLG5ldyBwbihYeXQsbnVsbCksa05lPW5ldyBVaShpQ2UpLGpnZT1uZXcgVWkodENlKSxTTmU9KEN0KCksUGMpLHM3PW5ldyBwbih6VGUsU05lKSxyaD1uZXcgVWkoalRlKSxUTmU9KFJsKCksdW4oWWIpKSxTND1uZXcgcG4oZFQsVE5lKSwkZ2U9bmV3IHBuKEdUZSwhMSksQ05lPW5ldyBwbihLVGUsITApLGFZPW5ldyBwbihCUCwxKSxCTmU9bmV3IHBuKG5TZSxudWxsKSxRQj1uZXcgcG4oRlAsMTUwKSxzWT1uZXcgcG4oUlAsMS40MTQpLGk5PW5ldyBwbihRdyxudWxsKSxxU3Q9bmV3IHBuKHJTZSwxKSxLQj1uZXcgcG4oSFRlLCExKSxPZ2U9bmV3IHBuKFZUZSwhMSksb05lPW5ldyBwbihBaGUsMSksY05lPSh2VSgpLFVnZSksbmV3IHBuKFF5dCxjTmUpLEJTdD0hMCxWU3Q9KGR4KCksTDQpLFVTdD1MNCxIU3Q9TDR9ZnVuY3Rpb24gdm8oKXt2bz1VLFBBZT1uZXcgV3MoIkRJUkVDVElPTl9QUkVQUk9DRVNTT1IiLDApLElBZT1uZXcgV3MoIkNPTU1FTlRfUFJFUFJPQ0VTU09SIiwxKSxENj1uZXcgV3MoIkVER0VfQU5EX0xBWUVSX0NPTlNUUkFJTlRfRURHRV9SRVZFUlNFUiIsMiksZjFlPW5ldyBXcygiSU5URVJBQ1RJVkVfRVhURVJOQUxfUE9SVF9QT1NJVElPTkVSIiwzKSxlTGU9bmV3IFdzKCJQQVJUSVRJT05fUFJFUFJPQ0VTU09SIiw0KSxESz1uZXcgV3MoIkxBQkVMX0RVTU1ZX0lOU0VSVEVSIiw1KSx6Sz1uZXcgV3MoIlNFTEZfTE9PUF9QUkVQUk9DRVNTT1IiLDYpLGw0PW5ldyBXcygiTEFZRVJfQ09OU1RSQUlOVF9QUkVQUk9DRVNTT1IiLDcpLEpBZT1uZXcgV3MoIlBBUlRJVElPTl9NSURQUk9DRVNTT1IiLDgpLEhBZT1uZXcgV3MoIkhJR0hfREVHUkVFX05PREVfTEFZRVJfUFJPQ0VTU09SIiw5KSxYQWU9bmV3IFdzKCJOT0RFX1BST01PVElPTiIsMTApLHU0PW5ldyBXcygiTEFZRVJfQ09OU1RSQUlOVF9QT1NUUFJPQ0VTU09SIiwxMSksWkFlPW5ldyBXcygiUEFSVElUSU9OX1BPU1RQUk9DRVNTT1IiLDEyKSwkQWU9bmV3IFdzKCJISUVSQVJDSElDQUxfUE9SVF9DT05TVFJBSU5UX1BST0NFU1NPUiIsMTMpLHRMZT1uZXcgV3MoIlNFTUlfSU5URVJBQ1RJVkVfQ1JPU1NNSU5fUFJPQ0VTU09SIiwxNCksU0FlPW5ldyBXcygiQlJFQUtJTkdfUE9JTlRfSU5TRVJURVIiLDE1KSxQSz1uZXcgV3MoIkxPTkdfRURHRV9TUExJVFRFUiIsMTYpLGQxZT1uZXcgV3MoIlBPUlRfU0lERV9QUk9DRVNTT1IiLDE3KSxMSz1uZXcgV3MoIklOVkVSVEVEX1BPUlRfUFJPQ0VTU09SIiwxOCksUks9bmV3IFdzKCJQT1JUX0xJU1RfU09SVEVSIiwxOSksckxlPW5ldyBXcygiU09SVF9CWV9JTlBVVF9PUkRFUl9PRl9NT0RFTCIsMjApLEZLPW5ldyBXcygiTk9SVEhfU09VVEhfUE9SVF9QUkVQUk9DRVNTT1IiLDIxKSxfQWU9bmV3IFdzKCJCUkVBS0lOR19QT0lOVF9QUk9DRVNTT1IiLDIyKSxRQWU9bmV3IFdzKEgzdCwyMyksaUxlPW5ldyBXcyhWM3QsMjQpLGpLPW5ldyBXcygiU0VMRl9MT09QX1BPUlRfUkVTVE9SRVIiLDI1KSxuTGU9bmV3IFdzKCJTSU5HTEVfRURHRV9HUkFQSF9XUkFQUEVSIiwyNiksTUs9bmV3IFdzKCJJTl9MQVlFUl9DT05TVFJBSU5UX1BST0NFU1NPUiIsMjcpLEZBZT1uZXcgV3MoIkVORF9OT0RFX1BPUlRfTEFCRUxfTUFOQUdFTUVOVF9QUk9DRVNTT1IiLDI4KSxXQWU9bmV3IFdzKCJMQUJFTF9BTkRfTk9ERV9TSVpFX1BST0NFU1NPUiIsMjkpLEtBZT1uZXcgV3MoIklOTkVSTU9TVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMCkscUs9bmV3IFdzKCJTRUxGX0xPT1BfUk9VVEVSIiwzMSksTUFlPW5ldyBXcygiQ09NTUVOVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMiksQUs9bmV3IFdzKCJFTkRfTEFCRUxfUFJFUFJPQ0VTU09SIiwzMyksT0s9bmV3IFdzKCJMQUJFTF9EVU1NWV9TV0lUQ0hFUiIsMzQpLExBZT1uZXcgV3MoIkNFTlRFUl9MQUJFTF9NQU5BR0VNRU5UX1BST0NFU1NPUiIsMzUpLExUPW5ldyBXcygiTEFCRUxfU0lERV9TRUxFQ1RPUiIsMzYpLFVBZT1uZXcgV3MoIkhZUEVSRURHRV9EVU1NWV9NRVJHRVIiLDM3KSx6QWU9bmV3IFdzKCJISUVSQVJDSElDQUxfUE9SVF9EVU1NWV9TSVpFX1BST0NFU1NPUiIsMzgpLFlBZT1uZXcgV3MoIkxBWUVSX1NJWkVfQU5EX0dSQVBIX0hFSUdIVF9DQUxDVUxBVE9SIiwzOSksekw9bmV3IFdzKCJISUVSQVJDSElDQUxfUE9SVF9QT1NJVElPTl9QUk9DRVNTT1IiLDQwKSxPQWU9bmV3IFdzKCJDT05TVFJBSU5UU19QT1NUUFJPQ0VTU09SIiw0MSksREFlPW5ldyBXcygiQ09NTUVOVF9QT1NUUFJPQ0VTU09SIiw0MiksR0FlPW5ldyBXcygiSFlQRVJOT0RFX1BST0NFU1NPUiIsNDMpLHFBZT1uZXcgV3MoIkhJRVJBUkNISUNBTF9QT1JUX09SVEhPR09OQUxfRURHRV9ST1VURVIiLDQ0KSxOSz1uZXcgV3MoIkxPTkdfRURHRV9KT0lORVIiLDQ1KSwkSz1uZXcgV3MoIlNFTEZfTE9PUF9QT1NUUFJPQ0VTU09SIiw0NiksQUFlPW5ldyBXcygiQlJFQUtJTkdfUE9JTlRfUkVNT1ZFUiIsNDcpLEJLPW5ldyBXcygiTk9SVEhfU09VVEhfUE9SVF9QT1NUUFJPQ0VTU09SIiw0OCksVkFlPW5ldyBXcygiSE9SSVpPTlRBTF9DT01QQUNUT1IiLDQ5KSxJSz1uZXcgV3MoIkxBQkVMX0RVTU1ZX1JFTU9WRVIiLDUwKSxSQWU9bmV3IFdzKCJGSU5BTF9TUExJTkVfQkVORFBPSU5UU19DQUxDVUxBVE9SIiw1MSksQkFlPW5ldyBXcygiRU5EX0xBQkVMX1NPUlRFUiIsNTIpLGdCPW5ldyBXcygiUkVWRVJTRURfRURHRV9SRVNUT1JFUiIsNTMpLF9LPW5ldyBXcygiRU5EX0xBQkVMX1BPU1RQUk9DRVNTT1IiLDU0KSxqQWU9bmV3IFdzKCJISUVSQVJDSElDQUxfTk9ERV9SRVNJWkVSIiw1NSksTkFlPW5ldyBXcygiRElSRUNUSU9OX1BPU1RQUk9DRVNTT1IiLDU2KX1mdW5jdGlvbiBZa2UoKXtZa2U9VSxpTWU9KHBOKCksWEspLHI5dD1uZXcgcG4oVkVlLGlNZSkscDl0PW5ldyBwbihVRWUsKEhuKCksITEpKSxsTWU9KHpIKCksejFlKSx5OXQ9bmV3IHBuKGZHLGxNZSksUDl0PW5ldyBwbihHRWUsITEpLEI5dD1uZXcgcG4oS0VlLCEwKSxMeHQ9bmV3IHBuKFdFZSwhMSksdk1lPShkTigpLGtkZSksUTl0PW5ldyBwbihZRWUsdk1lKSxwdCgxKSxza3Q9bmV3IHBuKFhFZSxwdCg3KSksYWt0PW5ldyBwbihRRWUsITEpLGI5dD1uZXcgcG4oSkVlLCExKSxyTWU9KGwyKCksQTFlKSxuOXQ9bmV3IHBuKHpoZSxyTWUpLGRNZT0ocDIoKSxnZGUpLE45dD1uZXcgcG4ocVAsZE1lKSxoTWU9KGhmKCksRUIpLFM5dD1uZXcgcG4oWkVlLGhNZSkscHQoLTEpLEM5dD1uZXcgcG4oZVRlLG51bGwpLHB0KC0xKSxfOXQ9bmV3IHBuKHRUZSxwdCgtMSkpLHB0KC0xKSxBOXQ9bmV3IHBuKHFoZSxwdCg0KSkscHQoLTEpLE05dD1uZXcgcG4oSGhlLHB0KDIpKSxmTWU9KE5mKCksQVcpLE85dD1uZXcgcG4oVmhlLGZNZSkscHQoMCksSTl0PW5ldyBwbihVaGUscHQoMCkpLEU5dD1uZXcgcG4oR2hlLHB0KElpKSksbk1lPShkQSgpLEhMKSx0OXQ9bmV3IHBuKHBMLG5NZSksJHh0PW5ldyBwbihuVGUsITEpLEt4dD1uZXcgcG4oS2hlLC4xKSxaeHQ9bmV3IHBuKFdoZSwhMSksWXh0PW5ldyBwbihyVGUsbnVsbCksWHh0PW5ldyBwbihpVGUsbnVsbCkscHQoLTEpLFF4dD1uZXcgcG4oc1RlLG51bGwpLHB0KC0xKSxKeHQ9bmV3IHBuKGFUZSxwdCgtMSkpLHB0KDApLHp4dD1uZXcgcG4ob1RlLHB0KDQwKSksdE1lPSh2RSgpLGoxZSksVXh0PW5ldyBwbihZaGUsdE1lKSxlTWU9dkIscXh0PW5ldyBwbihkRyxlTWUpLG1NZT0oT0EoKSxyTSksWDl0PW5ldyBwbihrNixtTWUpLHo5dD1uZXcgVWkoZ0cpLGdNZT0oY04oKSxKSyksRjl0PW5ldyBwbihYaGUsZ01lKSxwTWU9KFdOKCksWkspLGo5dD1uZXcgcG4oUWhlLHBNZSksVjl0PW5ldyBwbihKaGUsLjMpLEc5dD1uZXcgVWkoWmhlKSxiTWU9KEJ5KCksX1cpLEs5dD1uZXcgcG4oZWZlLGJNZSksb01lPShMVigpLFRkZSksYzl0PW5ldyBwbihjVGUsb01lKSxjTWU9KHlBKCksU2RlKSx1OXQ9bmV3IHBuKHVUZSxjTWUpLHVNZT0oU0UoKSxhTSksbDl0PW5ldyBwbihwRyx1TWUpLGY5dD1uZXcgcG4oYkcsLjIpLGE5dD1uZXcgcG4odGZlLDIpLHRrdD1uZXcgcG4obFRlLG51bGwpLHJrdD1uZXcgcG4oaFRlLDEwKSxua3Q9bmV3IHBuKGZUZSwxMCksaWt0PW5ldyBwbihkVGUsMjApLHB0KDApLEo5dD1uZXcgcG4oZ1RlLHB0KDApKSxwdCgwKSxaOXQ9bmV3IHBuKHBUZSxwdCgwKSkscHQoMCksZWt0PW5ldyBwbihiVGUscHQoMCkpLE14dD1uZXcgcG4obmZlLCExKSxYTGU9KHpFKCksVkwpLEl4dD1uZXcgcG4obVRlLFhMZSksWUxlPShKSCgpLFMxZSksRHh0PW5ldyBwbih2VGUsWUxlKSx2OXQ9bmV3IHBuKG1HLCExKSxwdCgwKSxtOXQ9bmV3IHBuKHJmZSxwdCgxNikpLHB0KDApLHc5dD1uZXcgcG4oaWZlLHB0KDUpKSx4TWU9KE9WKCksTGRlKSxTa3Q9bmV3IHBuKGZwLHhNZSksb2t0PW5ldyBwbih2RywxMCksbGt0PW5ldyBwbih3RywxKSx5TWU9KHBWKCksWUspLG1rdD1uZXcgcG4oYkwseU1lKSxka3Q9bmV3IFVpKHNmZSksd01lPXB0KDEpLHB0KDApLHBrdD1uZXcgcG4oYWZlLHdNZSksa01lPShnVigpLEFkZSksTWt0PW5ldyBwbih5RyxrTWUpLF9rdD1uZXcgVWkoeEcpLGtrdD1uZXcgcG4oa0csITApLHlrdD1uZXcgcG4oRUcsMiksVGt0PW5ldyBwbihvZmUsITApLGFNZT0oeVUoKSxRSyksczl0PW5ldyBwbih3VGUsYU1lKSxzTWU9KHl4KCksT1QpLGk5dD1uZXcgcG4oeVRlLHNNZSksWkxlPShFZCgpLEUyKSxqeHQ9bmV3IHBuKFRHLFpMZSksUnh0PW5ldyBwbih4VGUsITEpLEZ4dD1uZXcgcG4oa1RlLCExKSxRTGU9KEttKCksYzQpLE94dD1uZXcgcG4oY2ZlLFFMZSksSkxlPShFQSgpLHBkZSksQnh0PW5ldyBwbihFVGUsSkxlKSxOeHQ9bmV3IHBuKHVmZSwwKSxQeHQ9bmV3IHBuKGxmZSwwKSxrOXQ9TDFlLHg5dD1tQixMOXQ9Q1csRDl0PUNXLFQ5dD1kZGUsV3h0PShycCgpLEEyKSxlOXQ9SEwsR3h0PUhMLEh4dD1ITCxWeHQ9QTIscTl0PWlNLEg5dD1yTSxSOXQ9ck0sJDl0PXJNLFU5dD13ZGUsWTl0PWlNLFc5dD1pTSxoOXQ9KGlwKCksczkpLGQ5dD1zOSxnOXQ9YU0sbzl0PUpCLGNrdD1YVCx1a3Q9azQsaGt0PVhULGZrdD1rNCx2a3Q9WFQsd2t0PWs0LGdrdD1fMWUsYmt0PVlLLERrdD1YVCxJa3Q9azQsQWt0PVhULExrdD1rNCxFa3Q9azQseGt0PWs0LENrdD1rNH1mdW5jdGlvbiBlT24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzLFZsLGxjLEhoLGY3LFAyLEwwLE0wLF92LGg5LHJtLGY5LHFkLF9nLFMzLGQ5LGQ3LEhkLEF2LHlwLElBdCxzQmUsXzMsWU0sbHBlLGc5LFhNLEY0LFFNLGhwZSxPQXQ7Zm9yKHNCZT0wLG9pPXQsbGM9MCxQMj1vaS5sZW5ndGg7bGM8UDI7KytsYylmb3Ioam49b2lbbGNdLF9nPW5ldyBHKGpuLmopO19nLmE8X2cuYy5jLmxlbmd0aDspe2ZvcihxZD1sKHJlKF9nKSwxMiksZDk9MCxnPW5ldyBHKHFkLmcpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxOCksam4uYyE9Zi5kLmkuYyYmKytkOTtkOT4wJiYoZS5hW3FkLnBdPXNCZSsrKX1mb3IoWE09MCx3cz1uLEhoPTAsTDA9d3MubGVuZ3RoO0hoPEwwOysrSGgpe2Zvcihqbj13c1tIaF0sTTA9MCxfZz1uZXcgRyhqbi5qKTtfZy5hPF9nLmMuYy5sZW5ndGgmJihxZD1sKHJlKF9nKSwxMikscWQuaj09KEN0KCksUW4pKTspZm9yKGc9bmV3IEcocWQuZSk7Zy5hPGcuYy5jLmxlbmd0aDspaWYoZj1sKHJlKGcpLDE4KSxqbi5jIT1mLmMuaS5jKXsrK00wO2JyZWFrfWZvcihoOT0wLGQ3PW5ldyBVYShqbi5qLGpuLmouYy5sZW5ndGgpO2Q3LmI+MDspe2ZvcihxZD0obXIoZDcuYj4wKSxsKGQ3LmEuWGIoZDcuYz0tLWQ3LmIpLDEyKSksZDk9MCxnPW5ldyBHKHFkLmUpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxOCksam4uYyE9Zi5jLmkuYyYmKytkOTtkOT4wJiYocWQuaj09KEN0KCksUW4pPyhlLmFbcWQucF09WE0sKytYTSk6KGUuYVtxZC5wXT1YTStNMCtoOSwrK2g5KSl9WE0rPWg5fWZvcihTMz1uZXcgUHIsVj1uZXcgYmQsdXI9dCxWbD0wLGY3PXVyLmxlbmd0aDtWbDxmNzsrK1ZsKWZvcihqbj11cltWbF0sbHBlPW5ldyBHKGpuLmopO2xwZS5hPGxwZS5jLmMubGVuZ3RoOylmb3IoWU09bChyZShscGUpLDEyKSxnPW5ldyBHKFlNLmcpO2cuYTxnLmMuYy5sZW5ndGg7KWlmKGY9bChyZShnKSwxOCksUU09Zi5kLGpuLmMhPVFNLmkuYylpZihfMz1sKGhjKHpvKFMzLmYsWU0pKSw0NzgpLEY0PWwoaGMoem8oUzMuZixRTSkpLDQ3OCksIV8zJiYhRjQpej1uZXcgVXJ0LFYuYS56Yyh6LFYpLHZ0KHouYSxmKSx2dCh6LmQsWU0pLGp1KFMzLmYsWU0seiksdnQoei5kLFFNKSxqdShTMy5mLFFNLHopO2Vsc2UgaWYoIV8zKXZ0KEY0LmEsZiksdnQoRjQuZCxZTSksanUoUzMuZixZTSxGNCk7ZWxzZSBpZighRjQpdnQoXzMuYSxmKSx2dChfMy5kLFFNKSxqdShTMy5mLFFNLF8zKTtlbHNlIGlmKF8zPT1GNCl2dChfMy5hLGYpO2Vsc2V7Zm9yKHZ0KF8zLmEsZiksZjk9bmV3IEcoRjQuZCk7ZjkuYTxmOS5jLmMubGVuZ3RoOylybT1sKHJlKGY5KSwxMiksanUoUzMuZixybSxfMyk7cmEoXzMuYSxGNC5hKSxyYShfMy5kLEY0LmQpLFYuYS5CYyhGNCkhPW51bGx9Zm9yKEo9bChQQShWLFdlKFRPbix7MzoxLDQ6MSw1OjEsMjA0NToxfSw0NzgsVi5hLmdjKCksMCwxKSksMjA0NSksQm49dFswXS5jLElBdD1uWzBdLmMsQz1KLEw9MCxCPUMubGVuZ3RoO0w8QjsrK0wpZm9yKEU9Q1tMXSxFLmU9c0JlLEUuZj1YTSxfZz1uZXcgRyhFLmQpO19nLmE8X2cuYy5jLmxlbmd0aDspcWQ9bChyZShfZyksMTIpLEhkPWUuYVtxZC5wXSxxZC5pLmM9PUJuPyhIZDxFLmUmJihFLmU9SGQpLEhkPkUuYiYmKEUuYj1IZCkpOnFkLmkuYz09SUF0JiYoSGQ8RS5mJiYoRS5mPUhkKSxIZD5FLmMmJihFLmM9SGQpKTtmb3IobkUoSiwwLEoubGVuZ3RoLG51bGwpLGc5PVdlKFZyLGRpLDI4LEoubGVuZ3RoLDE1LDEpLHI9V2UoVnIsZGksMjgsWE0rMSwxNSwxKSxmZT0wO2ZlPEoubGVuZ3RoO2ZlKyspZzlbZmVdPUpbZmVdLmYscltnOVtmZV1dPTE7Zm9yKG89MCxUZT0wO1RlPHIubGVuZ3RoO1RlKyspcltUZV09PTE/cltUZV09bzotLW87Zm9yKEF2PTAsTWU9MDtNZTxnOS5sZW5ndGg7TWUrKylnOVtNZV0rPXJbZzlbTWVdXSxBdj1iLk1hdGgubWF4KEF2LGc5W01lXSsxKTtmb3Iodz0xO3c8QXY7KXcqPTI7Zm9yKE9BdD0yKnctMSx3LT0xLGhwZT1XZShWcixkaSwyOCxPQXQsMTUsMSksYT0wLGNuPTA7Y248ZzkubGVuZ3RoO2NuKyspZm9yKFN0PWc5W2NuXSt3LCsraHBlW1N0XTtTdD4wOylTdCUyPjAmJihhKz1ocGVbU3QrMV0pLFN0PShTdC0xKS8yfDAsKytocGVbU3RdO2Zvcihhbj1XZShNRXQsUm4sMzc0LEoubGVuZ3RoKjIsMCwxKSwkZT0wOyRlPEoubGVuZ3RoOyRlKyspYW5bMiokZV09bmV3IENIKEpbJGVdLEpbJGVdLmUsSlskZV0uYiwob0EoKSx1TSkpLGFuWzIqJGUrMV09bmV3IENIKEpbJGVdLEpbJGVdLmIsSlskZV0uZSxjTSk7Zm9yKG5FKGFuLDAsYW4ubGVuZ3RoLG51bGwpLF92PTAsWmU9MDtaZTxhbi5sZW5ndGg7WmUrKylzd2l0Y2goYW5bWmVdLmQuZyl7Y2FzZSAwOisrX3Y7YnJlYWs7Y2FzZSAxOi0tX3YsYSs9X3Z9Zm9yKHlwPVdlKE1FdCxSbiwzNzQsSi5sZW5ndGgqMiwwLDEpLG90PTA7b3Q8Si5sZW5ndGg7b3QrKyl5cFsyKm90XT1uZXcgQ0goSltvdF0sSltvdF0uZixKW290XS5jLChvQSgpLHVNKSkseXBbMipvdCsxXT1uZXcgQ0goSltvdF0sSltvdF0uYyxKW290XS5mLGNNKTtmb3IobkUoeXAsMCx5cC5sZW5ndGgsbnVsbCksX3Y9MCx0ZT0wO3RlPHlwLmxlbmd0aDt0ZSsrKXN3aXRjaCh5cFt0ZV0uZC5nKXtjYXNlIDA6KytfdjticmVhaztjYXNlIDE6LS1fdixhKz1fdn1yZXR1cm4gYX1mdW5jdGlvbiBEaSgpe0RpPVUsV009bmV3IFh2KDcpLFFQZT1uZXcgbmcoOCw5NCksbmV3IG5nKDgsNjQpLEpQZT1uZXcgbmcoOCwzNiksRUF0PW5ldyBuZyg4LDY1KSxUQXQ9bmV3IG5nKDgsMTIyKSxDQXQ9bmV3IG5nKDgsOTApLF9BdD1uZXcgbmcoOCw5OCksa0F0PW5ldyBuZyg4LDY2KSxTQXQ9bmV3IG5nKDgsNjApLEFBdD1uZXcgbmcoOCw2MiksWFBlPW5ldyBYdigxMSksTVk9bmV3IF9oKDQpLEV1KE1ZLDQ4LDU3KSxsQz1uZXcgX2goNCksRXUobEMsNDgsNTcpLEV1KGxDLDY1LDkwKSxFdShsQyw5NSw5NSksRXUobEMsOTcsMTIyKSxsOT1uZXcgX2goNCksRXUobDksOSw5KSxFdShsOSwxMCwxMCksRXUobDksMTIsMTIpLEV1KGw5LDEzLDEzKSxFdShsOSwzMiwzMiksWlBlPVV5KE1ZKSx0QmU9VXkobEMpLGVCZT1VeShsOSksdUM9bmV3IFByLEtNPW5ldyBQcix4QXQ9aGUobGUoenQsMSksZHQsMiw2LFsiQ24iLCJMdSIsIkxsIiwiTHQiLCJMbSIsIkxvIiwiTW4iLCJNZSIsIk1jIiwiTmQiLCJObCIsIk5vIiwiWnMiLCJabCIsIlpwIiwiQ2MiLCJDZiIsbnVsbCwiQ28iLCJDcyIsIlBkIiwiUHMiLCJQZSIsIlBjIiwiUG8iLCJTbSIsIlNjIiwiU2siLCJTbyIsIlBpIiwiUGYiLCJMIiwiTSIsIk4iLCJaIiwiQyIsIlAiLCJTIl0pLFdQZT1oZShsZSh6dCwxKSxkdCwyLDYsWyJCYXNpYyBMYXRpbiIsIkxhdGluLTEgU3VwcGxlbWVudCIsIkxhdGluIEV4dGVuZGVkLUEiLCJMYXRpbiBFeHRlbmRlZC1CIiwiSVBBIEV4dGVuc2lvbnMiLCJTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMiLCJDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MiLCJHcmVlayIsIkN5cmlsbGljIiwiQXJtZW5pYW4iLCJIZWJyZXciLCJBcmFiaWMiLCJTeXJpYWMiLCJUaGFhbmEiLCJEZXZhbmFnYXJpIiwiQmVuZ2FsaSIsIkd1cm11a2hpIiwiR3VqYXJhdGkiLCJPcml5YSIsIlRhbWlsIiwiVGVsdWd1IiwiS2FubmFkYSIsIk1hbGF5YWxhbSIsIlNpbmhhbGEiLCJUaGFpIiwiTGFvIiwiVGliZXRhbiIsIk15YW5tYXIiLCJHZW9yZ2lhbiIsIkhhbmd1bCBKYW1vIiwiRXRoaW9waWMiLCJDaGVyb2tlZSIsIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MiLCJPZ2hhbSIsIlJ1bmljIiwiS2htZXIiLCJNb25nb2xpYW4iLCJMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsIiwiR3JlZWsgRXh0ZW5kZWQiLCJHZW5lcmFsIFB1bmN0dWF0aW9uIiwiU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzIiwiQ3VycmVuY3kgU3ltYm9scyIsIkNvbWJpbmluZyBNYXJrcyBmb3IgU3ltYm9scyIsIkxldHRlcmxpa2UgU3ltYm9scyIsIk51bWJlciBGb3JtcyIsIkFycm93cyIsIk1hdGhlbWF0aWNhbCBPcGVyYXRvcnMiLCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCIsIkNvbnRyb2wgUGljdHVyZXMiLCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiIsIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiLCJCb3ggRHJhd2luZyIsIkJsb2NrIEVsZW1lbnRzIiwiR2VvbWV0cmljIFNoYXBlcyIsIk1pc2NlbGxhbmVvdXMgU3ltYm9scyIsIkRpbmdiYXRzIiwiQnJhaWxsZSBQYXR0ZXJucyIsIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50IiwiS2FuZ3hpIFJhZGljYWxzIiwiSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyIsIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiIsIkhpcmFnYW5hIiwiS2F0YWthbmEiLCJCb3BvbW9mbyIsIkhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8iLCJLYW5idW4iLCJCb3BvbW9mbyBFeHRlbmRlZCIsIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiLCJDSksgQ29tcGF0aWJpbGl0eSIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiLCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIiwiWWkgU3lsbGFibGVzIiwiWWkgUmFkaWNhbHMiLCJIYW5ndWwgU3lsbGFibGVzIixZNXQsIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiLCJBbHBoYWJldGljIFByZXNlbnRhdGlvbiBGb3JtcyIsIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSIsIkNvbWJpbmluZyBIYWxmIE1hcmtzIiwiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiLCJTbWFsbCBGb3JtIFZhcmlhbnRzIiwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIiwiU3BlY2lhbHMiLCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyIsIk9sZCBJdGFsaWMiLCJHb3RoaWMiLCJEZXNlcmV0IiwiQnl6YW50aW5lIE11c2ljYWwgU3ltYm9scyIsIk11c2ljYWwgU3ltYm9scyIsIk1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scyIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIiLCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQiLCJUYWdzIl0pLFlQZT1oZShsZShWciwxKSxkaSwyOCwxNSxbNjYzMDQsNjYzNTEsNjYzNTIsNjYzODMsNjY1NjAsNjY2MzksMTE4Nzg0LDExOTAzOSwxMTkwNDAsMTE5Mjk1LDExOTgwOCwxMjA4MzEsMTMxMDcyLDE3Mzc4MiwxOTQ1NjAsMTk1MTAzLDkxNzUwNCw5MTc2MzFdKX1mdW5jdGlvbiBZVSgpe1lVPVUsbTd0PW5ldyBvZigiT1VUX1RfTCIsMCwoQmwoKSxGZCksKG9sKCksdzApLCh0MSgpLEdjKSxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycygocXkoKSxDMCksaGUobGUoS28sMSksaXQsOTUsMCxbUzAsRTBdKSldKSksYjd0PW5ldyBvZigiT1VUX1RfQyIsMSxCYix3MCxHYywkdSxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtTMCxtcF0pKSxycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtTMCxtcCx6Zl0pKV0pKSx2N3Q9bmV3IG9mKCJPVVRfVF9SIiwyLHYwLHcwLEdjLEtjLGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKEMwLGhlKGxlKEtvLDEpLGl0LDk1LDAsW1MwLFQwXSkpXSkpLGM3dD1uZXcgb2YoIk9VVF9CX0wiLDMsRmQsYTEsS2MsR2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbcWYsRTBdKSldKSksbzd0PW5ldyBvZigiT1VUX0JfQyIsNCxCYixhMSxLYywkdSxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtxZixtcF0pKSxycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtxZixtcCx6Zl0pKV0pKSx1N3Q9bmV3IG9mKCJPVVRfQl9SIiw1LHYwLGExLEtjLEtjLGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKEMwLGhlKGxlKEtvLDEpLGl0LDk1LDAsW3FmLFQwXSkpXSkpLGY3dD1uZXcgb2YoIk9VVF9MX1QiLDYsdjAsYTEsR2MsR2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbRTAsUzAsemZdKSldKSksaDd0PW5ldyBvZigiT1VUX0xfQyIsNyx2MCxGYiwkdSxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtFMCxFZ10pKSxycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtFMCxFZyx6Zl0pKV0pKSxsN3Q9bmV3IG9mKCJPVVRfTF9CIiw4LHYwLHcwLEtjLEdjLGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKEMwLGhlKGxlKEtvLDEpLGl0LDk1LDAsW0UwLHFmLHpmXSkpXSkpLHA3dD1uZXcgb2YoIk9VVF9SX1QiLDksRmQsYTEsR2MsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbVDAsUzAsemZdKSldKSksZzd0PW5ldyBvZigiT1VUX1JfQyIsMTAsRmQsRmIsJHUsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbVDAsRWddKSkscnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbVDAsRWcsemZdKSldKSksZDd0PW5ldyBvZigiT1VUX1JfQiIsMTEsRmQsdzAsS2MsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbVDAscWYsemZdKSldKSksczd0PW5ldyBvZigiSU5fVF9MIiwxMixGZCxhMSxHYyxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtTMCxFMF0pKSxycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtTMCxFMCx6Zl0pKV0pKSxpN3Q9bmV3IG9mKCJJTl9UX0MiLDEzLEJiLGExLEdjLCR1LGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW1MwLG1wXSkpLHJzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW1MwLG1wLHpmXSkpXSkpLGE3dD1uZXcgb2YoIklOX1RfUiIsMTQsdjAsYTEsR2MsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbUzAsVDBdKSkscnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbUzAsVDAsemZdKSldKSksbjd0PW5ldyBvZigiSU5fQ19MIiwxNSxGZCxGYiwkdSxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtFZyxFMF0pKSxycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtFZyxFMCx6Zl0pKV0pKSx0N3Q9bmV3IG9mKCJJTl9DX0MiLDE2LEJiLEZiLCR1LCR1LGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW0VnLG1wXSkpLHJzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW0VnLG1wLHpmXSkpXSkpLHI3dD1uZXcgb2YoIklOX0NfUiIsMTcsdjAsRmIsJHUsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbRWcsVDBdKSkscnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbRWcsVDAsemZdKSldKSksWjZ0PW5ldyBvZigiSU5fQl9MIiwxOCxGZCx3MCxLYyxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtxZixFMF0pKSxycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtxZixFMCx6Zl0pKV0pKSxKNnQ9bmV3IG9mKCJJTl9CX0MiLDE5LEJiLHcwLEtjLCR1LGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW3FmLG1wXSkpLHJzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW3FmLG1wLHpmXSkpXSkpLGU3dD1uZXcgb2YoIklOX0JfUiIsMjAsdjAsdzAsS2MsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbcWYsVDBdKSkscnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbcWYsVDAsemZdKSldKSksSDBlPW5ldyBvZihjTCwyMSxudWxsLG51bGwsbnVsbCxudWxsLGhlKGxlKGpmLDEpLFJuLDIxLDAsW10pKX1mdW5jdGlvbiBUbigpe1RuPVUsTzQ9KGxiKCksVm4pLmIsbChPZSh0dChWbi5iKSwwKSwzNSksbChPZSh0dChWbi5iKSwxKSwxOSksTTI9Vm4uYSxsKE9lKHR0KFZuLmEpLDApLDM1KSxsKE9lKHR0KFZuLmEpLDEpLDE5KSxsKE9lKHR0KFZuLmEpLDIpLDE5KSxsKE9lKHR0KFZuLmEpLDMpLDE5KSxsKE9lKHR0KFZuLmEpLDQpLDE5KSxKYj1Wbi5vLGwoT2UodHQoVm4ubyksMCksMzUpLGwoT2UodHQoVm4ubyksMSksMzUpLHpfdD1sKE9lKHR0KFZuLm8pLDIpLDE5KSxsKE9lKHR0KFZuLm8pLDMpLDE5KSxsKE9lKHR0KFZuLm8pLDQpLDE5KSxsKE9lKHR0KFZuLm8pLDUpLDE5KSxsKE9lKHR0KFZuLm8pLDYpLDE5KSxsKE9lKHR0KFZuLm8pLDcpLDE5KSxsKE9lKHR0KFZuLm8pLDgpLDE5KSxsKE9lKHR0KFZuLm8pLDkpLDE5KSxsKE9lKHR0KFZuLm8pLDEwKSwxOSksbChPZSh0dChWbi5vKSwxMSksMTkpLGwoT2UodHQoVm4ubyksMTIpLDE5KSxsKE9lKHR0KFZuLm8pLDEzKSwxOSksbChPZSh0dChWbi5vKSwxNCksMTkpLGwoT2UodHQoVm4ubyksMTUpLDE5KSxsKE9lKHFpKFZuLm8pLDApLDYyKSxsKE9lKHFpKFZuLm8pLDEpLDYyKSxsKE9lKHFpKFZuLm8pLDIpLDYyKSxsKE9lKHFpKFZuLm8pLDMpLDYyKSxsKE9lKHFpKFZuLm8pLDQpLDYyKSxsKE9lKHFpKFZuLm8pLDUpLDYyKSxsKE9lKHFpKFZuLm8pLDYpLDYyKSxsKE9lKHFpKFZuLm8pLDcpLDYyKSxsKE9lKHFpKFZuLm8pLDgpLDYyKSxsKE9lKHFpKFZuLm8pLDkpLDYyKSwkX3Q9Vm4ucCxsKE9lKHR0KFZuLnApLDApLDM1KSxsKE9lKHR0KFZuLnApLDEpLDM1KSxsKE9lKHR0KFZuLnApLDIpLDM1KSxsKE9lKHR0KFZuLnApLDMpLDM1KSxsKE9lKHR0KFZuLnApLDQpLDE5KSxsKE9lKHR0KFZuLnApLDUpLDE5KSxsKE9lKHFpKFZuLnApLDApLDYyKSxsKE9lKHFpKFZuLnApLDEpLDYyKSxxX3Q9Vm4ucSxsKE9lKHR0KFZuLnEpLDApLDM1KSxaYj1Wbi52LGwoT2UodHQoVm4udiksMCksMTkpLGwoT2UocWkoVm4udiksMCksNjIpLGwoT2UocWkoVm4udiksMSksNjIpLGwoT2UocWkoVm4udiksMiksNjIpLEQyPVZuLncsbChPZSh0dChWbi53KSwwKSwzNSksbChPZSh0dChWbi53KSwxKSwzNSksbChPZSh0dChWbi53KSwyKSwzNSksbChPZSh0dChWbi53KSwzKSwxOSksZW09Vm4uQixsKE9lKHR0KFZuLkIpLDApLDE5KSxsKE9lKHFpKFZuLkIpLDApLDYyKSxsKE9lKHFpKFZuLkIpLDEpLDYyKSxsKE9lKHFpKFZuLkIpLDIpLDYyKSxIX3Q9Vm4uUSxsKE9lKHR0KFZuLlEpLDApLDE5KSxsKE9lKHFpKFZuLlEpLDApLDYyKSxWX3Q9Vm4uUixsKE9lKHR0KFZuLlIpLDApLDM1KSxLZj1Wbi5TLGwoT2UocWkoVm4uUyksMCksNjIpLGwoT2UocWkoVm4uUyksMSksNjIpLGwoT2UocWkoVm4uUyksMiksNjIpLGwoT2UocWkoVm4uUyksMyksNjIpLGwoT2UocWkoVm4uUyksNCksNjIpLGwoT2UocWkoVm4uUyksNSksNjIpLGwoT2UocWkoVm4uUyksNiksNjIpLGwoT2UocWkoVm4uUyksNyksNjIpLGwoT2UocWkoVm4uUyksOCksNjIpLGwoT2UocWkoVm4uUyksOSksNjIpLGwoT2UocWkoVm4uUyksMTApLDYyKSxsKE9lKHFpKFZuLlMpLDExKSw2MiksbChPZShxaShWbi5TKSwxMiksNjIpLGwoT2UocWkoVm4uUyksMTMpLDYyKSxsKE9lKHFpKFZuLlMpLDE0KSw2MiksSTI9Vm4uVCxsKE9lKHR0KFZuLlQpLDApLDE5KSxsKE9lKHR0KFZuLlQpLDIpLDE5KSxVX3Q9bChPZSh0dChWbi5UKSwzKSwxOSksbChPZSh0dChWbi5UKSw0KSwxOSksbChPZShxaShWbi5UKSwwKSw2MiksbChPZShxaShWbi5UKSwxKSw2MiksbChPZSh0dChWbi5UKSwxKSwxOSksTzI9Vm4uVSxsKE9lKHR0KFZuLlUpLDApLDM1KSxsKE9lKHR0KFZuLlUpLDEpLDM1KSxsKE9lKHR0KFZuLlUpLDIpLDE5KSxsKE9lKHR0KFZuLlUpLDMpLDE5KSxsKE9lKHR0KFZuLlUpLDQpLDE5KSxsKE9lKHR0KFZuLlUpLDUpLDE5KSxsKE9lKHFpKFZuLlUpLDApLDYyKSxOND1Wbi5WLGwoT2UodHQoVm4uViksMCksMTkpLG83PVZuLlcsbChPZSh0dChWbi5XKSwwKSwzNSksbChPZSh0dChWbi5XKSwxKSwzNSksbChPZSh0dChWbi5XKSwyKSwzNSksbChPZSh0dChWbi5XKSwzKSwxOSksbChPZSh0dChWbi5XKSw0KSwxOSksbChPZSh0dChWbi5XKSw1KSwxOSksR190PVZuLmJiLGwoT2UodHQoVm4uYmIpLDApLDM1KSxsKE9lKHR0KFZuLmJiKSwxKSwzNSksbChPZSh0dChWbi5iYiksMiksMzUpLGwoT2UodHQoVm4uYmIpLDMpLDM1KSxsKE9lKHR0KFZuLmJiKSw0KSwzNSksbChPZSh0dChWbi5iYiksNSksMzUpLGwoT2UodHQoVm4uYmIpLDYpLDM1KSxsKE9lKHR0KFZuLmJiKSw3KSwxOSksbChPZShxaShWbi5iYiksMCksNjIpLGwoT2UocWkoVm4uYmIpLDEpLDYyKSxLX3Q9Vm4uZWIsbChPZSh0dChWbi5lYiksMCksMzUpLGwoT2UodHQoVm4uZWIpLDEpLDM1KSxsKE9lKHR0KFZuLmViKSwyKSwzNSksbChPZSh0dChWbi5lYiksMyksMzUpLGwoT2UodHQoVm4uZWIpLDQpLDM1KSxsKE9lKHR0KFZuLmViKSw1KSwzNSksbChPZSh0dChWbi5lYiksNiksMTkpLGwoT2UodHQoVm4uZWIpLDcpLDE5KSxObz1Wbi5hYixsKE9lKHR0KFZuLmFiKSwwKSwzNSksbChPZSh0dChWbi5hYiksMSksMzUpLEUzPVZuLkgsbChPZSh0dChWbi5IKSwwKSwxOSksbChPZSh0dChWbi5IKSwxKSwxOSksbChPZSh0dChWbi5IKSwyKSwxOSksbChPZSh0dChWbi5IKSwzKSwxOSksbChPZSh0dChWbi5IKSw0KSwxOSksbChPZSh0dChWbi5IKSw1KSwxOSksbChPZShxaShWbi5IKSwwKSw2MiksVDM9Vm4uZGIsbChPZSh0dChWbi5kYiksMCksMTkpLHRkPVZuLk19ZnVuY3Rpb24gdE9uKGUpe3ZhciB0O2UuT3x8KGUuTz0hMCxGdShlLCJ0eXBlIiksQ1YoZSwiZWNvcmUueG1sLnR5cGUiKSxTVihlLGN2KSx0PWwoVkUoKGliKCksR2YpLGN2KSwyMDQ0KSxxcihkYyhlLmZiKSxlLmIpLHpjKGUuYixnRiwiQW55VHlwZSIsITEsITEsITApLE9zKGwoT2UodHQoZS5iKSwwKSwzNSksZS53Yi5ELFhQLG51bGwsMCwtMSxnRiwhMSwhMSwhMCwhMSwhMSwhMSksT3MobChPZSh0dChlLmIpLDEpLDM1KSxlLndiLkQsImFueSIsbnVsbCwwLC0xLGdGLCEwLCEwLCEwLCExLCExLCEwKSxPcyhsKE9lKHR0KGUuYiksMiksMzUpLGUud2IuRCwiYW55QXR0cmlidXRlIixudWxsLDAsLTEsZ0YsITEsITEsITAsITEsITEsITEpLHpjKGUuYmIsQVksTTV0LCExLCExLCEwKSxPcyhsKE9lKHR0KGUuYmIpLDApLDM1KSxlLmdiLCJkYXRhIixudWxsLDAsMSxBWSwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmJiKSwxKSwzNSksZS5nYix3U2UsbnVsbCwxLDEsQVksITEsITEsITAsITEsITAsITEpLHpjKGUuZmIscEYsRDV0LCExLCExLCEwKSxPcyhsKE9lKHR0KGUuZmIpLDApLDM1KSx0LmdiLCJyYXdWYWx1ZSIsbnVsbCwwLDEscEYsITAsITAsITAsITEsITAsITApLE9zKGwoT2UodHQoZS5mYiksMSksMzUpLHQuYSxUTCxudWxsLDAsMSxwRiwhMCwhMCwhMCwhMSwhMCwhMCksc3MobChPZSh0dChlLmZiKSwyKSwxOSksZS53Yi5xLG51bGwsImluc3RhbmNlVHlwZSIsMSwxLHBGLCExLCExLCEwLCExLCExLCExLCExKSx6YyhlLnFiLFZQZSxJNXQsITEsITEsITApLE9zKGwoT2UodHQoZS5xYiksMCksMzUpLGUud2IuRCxYUCxudWxsLDAsLTEsbnVsbCwhMSwhMSwhMCwhMSwhMSwhMSksc3MobChPZSh0dChlLnFiKSwxKSwxOSksZS53Yi5hYixudWxsLCJ4TUxOU1ByZWZpeE1hcCIsMCwtMSxudWxsLCEwLCExLCEwLCEwLCExLCExLCExKSxzcyhsKE9lKHR0KGUucWIpLDIpLDE5KSxlLndiLmFiLG51bGwsInhTSVNjaGVtYUxvY2F0aW9uIiwwLC0xLG51bGwsITAsITEsITAsITAsITEsITEsITEpLE9zKGwoT2UodHQoZS5xYiksMyksMzUpLGUuZ2IsImNEQVRBIixudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksT3MobChPZSh0dChlLnFiKSw0KSwzNSksZS5nYiwiY29tbWVudCIsbnVsbCwwLC0yLG51bGwsITAsITAsITAsITEsITEsITApLHNzKGwoT2UodHQoZS5xYiksNSksMTkpLGUuYmIsbnVsbCxVNXQsMCwtMixudWxsLCEwLCEwLCEwLCEwLCExLCExLCEwKSxPcyhsKE9lKHR0KGUucWIpLDYpLDM1KSxlLmdiLEtmZSxudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksRWkoZS5hLHdhLCJBbnlTaW1wbGVUeXBlIiwhMCksRWkoZS5jLHp0LCJBbnlVUkkiLCEwKSxFaShlLmQsbGUoQWwsMSksIkJhc2U2NEJpbmFyeSIsITApLEVpKGUuZSxpaCwiQm9vbGVhbiIsITApLEVpKGUuZixOcywiQm9vbGVhbk9iamVjdCIsITApLEVpKGUuZyxBbCwiQnl0ZSIsITApLEVpKGUuaSxqeCwiQnl0ZU9iamVjdCIsITApLEVpKGUuaix6dCwiRGF0ZSIsITApLEVpKGUuayx6dCwiRGF0ZVRpbWUiLCEwKSxFaShlLm4sTDBlLCJEZWNpbWFsIiwhMCksRWkoZS5vLE5hLCJEb3VibGUiLCEwKSxFaShlLnAsdGEsIkRvdWJsZU9iamVjdCIsITApLEVpKGUucSx6dCwiRHVyYXRpb24iLCEwKSxFaShlLnMsbWYsIkVOVElUSUVTIiwhMCksRWkoZS5yLG1mLCJFTlRJVElFU0Jhc2UiLCEwKSxFaShlLnQsenQsUFNlLCEwKSxFaShlLnUsQjQsIkZsb2F0IiwhMCksRWkoZS52LF9ULCJGbG9hdE9iamVjdCIsITApLEVpKGUudyx6dCwiR0RheSIsITApLEVpKGUuQix6dCwiR01vbnRoIiwhMCksRWkoZS5BLHp0LCJHTW9udGhEYXkiLCEwKSxFaShlLkMsenQsIkdZZWFyIiwhMCksRWkoZS5ELHp0LCJHWWVhck1vbnRoIiwhMCksRWkoZS5GLGxlKEFsLDEpLCJIZXhCaW5hcnkiLCEwKSxFaShlLkcsenQsIklEIiwhMCksRWkoZS5ILHp0LCJJRFJFRiIsITApLEVpKGUuSixtZiwiSURSRUZTIiwhMCksRWkoZS5JLG1mLCJJRFJFRlNCYXNlIiwhMCksRWkoZS5LLFZyLCJJbnQiLCEwKSxFaShlLk0sQTYsIkludGVnZXIiLCEwKSxFaShlLkwscm8sIkludE9iamVjdCIsITApLEVpKGUuUCx6dCwiTGFuZ3VhZ2UiLCEwKSxFaShlLlEsbm0sIkxvbmciLCEwKSxFaShlLlIscjMsIkxvbmdPYmplY3QiLCEwKSxFaShlLlMsenQsIk5hbWUiLCEwKSxFaShlLlQsenQsckssITApLEVpKGUuVSxBNiwiTmVnYXRpdmVJbnRlZ2VyIiwhMCksRWkoZS5WLHp0LFJTZSwhMCksRWkoZS5YLG1mLCJOTVRPS0VOUyIsITApLEVpKGUuVyxtZiwiTk1UT0tFTlNCYXNlIiwhMCksRWkoZS5ZLEE2LCJOb25OZWdhdGl2ZUludGVnZXIiLCEwKSxFaShlLlosQTYsIk5vblBvc2l0aXZlSW50ZWdlciIsITApLEVpKGUuJCx6dCwiTm9ybWFsaXplZFN0cmluZyIsITApLEVpKGUuXyx6dCwiTk9UQVRJT04iLCEwKSxFaShlLmFiLHp0LCJQb3NpdGl2ZUludGVnZXIiLCEwKSxFaShlLmNiLHp0LCJRTmFtZSIsITApLEVpKGUuZGIsaDcsIlNob3J0IiwhMCksRWkoZS5lYixpMywiU2hvcnRPYmplY3QiLCEwKSxFaShlLmdiLHp0LG5FZSwhMCksRWkoZS5oYix6dCwiVGltZSIsITApLEVpKGUuaWIsenQsIlRva2VuIiwhMCksRWkoZS5qYixoNywiVW5zaWduZWRCeXRlIiwhMCksRWkoZS5rYixpMywiVW5zaWduZWRCeXRlT2JqZWN0IiwhMCksRWkoZS5sYixubSwiVW5zaWduZWRJbnQiLCEwKSxFaShlLm1iLHIzLCJVbnNpZ25lZEludE9iamVjdCIsITApLEVpKGUubmIsQTYsIlVuc2lnbmVkTG9uZyIsITApLEVpKGUub2IsVnIsIlVuc2lnbmVkU2hvcnQiLCEwKSxFaShlLnBiLHJvLCJVbnNpZ25lZFNob3J0T2JqZWN0IiwhMCksdDhlKGUsY3YpLG5PbihlKSl9ZnVuY3Rpb24gWGtlKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbix1cixvaSx3cyxWbCxsYyxIaCxmNyxQMixMMCxNMCxfdixoOSxybSxmOSxxZCxfZyxTMyxkOSxkNyxIZCxBdix5cDtpZihyLiRnKCl8fFJ0KEJ0KGF0KHQsKHBpKCksclkpKSkpKXJldHVybiBDbigpLENuKCksX287aWYoU3Q9KCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmkhPTAsYW49bWtuKHQpLGNuPSFhbi5kYygpLFN0fHxjbil7aWYoYT1sKGF0KHQsYTcpLDE0MyksIWEpdGhyb3cgdWUobmV3IFZwKCJSZXNvbHZlZCBhbGdvcml0aG0gaXMgbm90IHNldDsgYXBwbHkgYSBMYXlvdXRBbGdvcml0aG1SZXNvbHZlciBiZWZvcmUgY29tcHV0aW5nIGxheW91dC4iKSk7aWYoZDc9SjNlKGEsKEhFKCksd1kpKSx0ZHQodCksIVN0JiZjbiYmIWQ3KXJldHVybiBDbigpLENuKCksX287aWYoTWU9bmV3IGJ0LHFlKGF0KHQsbjcpKT09PXFlKChycCgpLEEyKSkmJihKM2UoYSxtWSl8fEozZShhLGJZKSkpe2lmKFJ0KEJ0KGF0KHQsQU0pKSkpdGhyb3cgdWUobmV3IFZwKCJUb3Bkb3duIGxheW91dCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIGhpZXJhcmNoeSBoYW5kbGluZy4iKSk7Zm9yKGY3PUdidChlLHQpLFAyPW5ldyBvcyxLYShQMiwoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpO1AyLmIhPTA7KWxjPWwoUDIuYj09MD9udWxsOihtcihQMi5iIT0wKSxhZihQMixQMi5hLmEpKSwyNyksdGR0KGxjKSxkOT1xZShhdChsYyxuNykpPT09cWUoRE0pLGQ5fHxQMShsYyxlQykmJiFnNmUoYSxhdChsYyxhNykpPyh0ZT1Ya2UoZSxsYyxuLHIpLHJhKE1lLHRlKSxIaShsYyxuNyxETSksdW10KGxjKSk6S2EoUDIsKCFsYy5hJiYobGMuYT1uZXcgbnQoQWksbGMsMTAsMTEpKSxsYy5hKSl9ZWxzZXtpZihmNz0oIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkuaSxSdChCdChhdCh0LEFNKSkpKXtpZihIZD1yLmVoKDEpLEhkLlVnKER5dCwxKSxhdCh0LGk5KT09bnVsbCl0aHJvdyB1ZShuZXcgVnAodC5rKyIgaGFzIG5vdCBiZWVuIGFzc2lnbmVkIGEgdG9wLWRvd24gbm9kZSB0eXBlLiIpKTtpZihsKGF0KHQsaTkpLDI4MCk9PShkeCgpLEw0KXx8bChhdCh0LGk5KSwyODApPT1kWSlmb3IoVGU9bmV3IG9yKCghdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKSk7VGUuZSE9VGUuaS5nYygpOylmZT1sKGdyKFRlKSwyNyksVmw9bChhdChmZSxhNyksMTQzKSwoIWZlLmEmJihmZS5hPW5ldyBudChBaSxmZSwxMCwxMSkpLGZlLmEpLmk+MCYmR08oVmwuZiksYXQoZmUsQk5lKSE9bnVsbCYmKGc9bChhdChmZSxCTmUpLDM0NyksUzM9Zy5UZyhmZSksRjUoZmUsYi5NYXRoLm1heChmZS5nLFMzLmEpLGIuTWF0aC5tYXgoZmUuZixTMy5iKSkpO2lmKEwwPWwoYXQodCxfMiksMTA3KSx6PXQuZy0oTDAuYitMMC5jKSxCPXQuZi0oTDAuZCtMMC5hKSxIZC5iaCgiQXZhaWxhYmxlIENoaWxkIEFyZWE6ICgiK3orInwiK0IrIikiKSxIaSh0LFo2LHovQiksc2R0KHQsYSxyLmVoKGY3KSksbChhdCh0LGk5KSwyODApPT1kWSYmKFVrZSh0KSxGNSh0LEwwLmIremUoR2UoYXQodCx0NykpKStMMC5jLEwwLmQremUoR2UoYXQodCxlNykpKStMMC5hKSksSGQuYmgoIkV4ZWN1dGVkIGxheW91dCBhbGdvcml0aG06ICIrZWkoYXQodCxlQykpKyIgb24gbm9kZSAiK3QuayksbChhdCh0LGk5KSwyODApPT1MNCl7aWYoejwwfHxCPDApdGhyb3cgdWUobmV3IFZwKCJUaGUgc2l6ZSBkZWZpbmVkIGJ5IHRoZSBwYXJlbnQgcGFyYWxsZWwgbm9kZSBpcyB0b28gc21hbGwgZm9yIHRoZSBzcGFjZSBwcm92aWRlZCBieSB0aGUgcGFkZGluZ3Mgb2YgdGhlIGNoaWxkIGhpZXJhcmNoaWNhbCBub2RlLiAiK3QuaykpO2ZvcihQMSh0LHQ3KXx8UDEodCxlNyl8fFVrZSh0KSxKPXplKEdlKGF0KHQsdDcpKSksVj16ZShHZShhdCh0LGU3KSkpLEhkLmJoKCJEZXNpcmVkIENoaWxkIEFyZWE6ICgiK0orInwiK1YrIikiKSxfdj16L0osaDk9Qi9WLE0wPWIuTWF0aC5taW4oX3YsYi5NYXRoLm1pbihoOSx6ZShHZShhdCh0LHFTdCkpKSkpLEhpKHQsYVksTTApLEhkLmJoKHQuaysiIC0tIExvY2FsIFNjYWxlIEZhY3RvciAoWHxZKTogKCIrX3YrInwiK2g5KyIpIiksJGU9bChhdCh0LFVCKSwyMSksbz0wLGY9MCxNMDxfdiYmKCRlLkhjKChZbSgpLEVNKSk/bz0oei8yLUoqTTAvMikvTTA6JGUuSGMoVE0pJiYobz0oei1KKk0wKS9NMCkpLE0wPGg5JiYoJGUuSGMoKFltKCksU00pKT9mPShCLzItVipNMC8yKS9NMDokZS5IYyhDTSkmJihmPShCLVYqTTApL00wKSksQXY9bysoTDAuYi9NMC1MMC5iKSx5cD1mKyhMMC5kL00wLUwwLmQpLEhkLmJoKCJTaGlmdDogKCIrQXYrInwiK3lwKyIpIiksSGg9bmV3IG9yKCghdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKSk7SGguZSE9SGguaS5nYygpOylsYz1sKGdyKEhoKSwyNyksVXUobGMsbGMuaStBdiksR3UobGMsbGMuait5cCk7Zm9yKG90PW5ldyBvcigoIXQuYiYmKHQuYj1uZXcgbnQoanMsdCwxMiwzKSksdC5iKSk7b3QuZSE9b3QuaS5nYygpOyl7Zm9yKFplPWwoZ3Iob3QpLDc0KSxmOT1uZXcgb3IoKCFaZS5hJiYoWmUuYT1uZXcgbnQoY3MsWmUsNiw2KSksWmUuYSkpO2Y5LmUhPWY5LmkuZ2MoKTspZm9yKHJtPWwoZ3IoZjkpLDE2Niksa08ocm0scm0uaitBdixybS5rK3lwKSx4TyhybSxybS5iK0F2LHJtLmMreXApLEU9bmV3IG9yKCghcm0uYSYmKHJtLmE9bmV3IFlzKHFoLHJtLDUpKSxybS5hKSk7RS5lIT1FLmkuZ2MoKTspdz1sKGdyKEUpLDM3NyksV3NlKHcsdy5hK0F2LHcuYit5cCk7Zm9yKHdzPW5ldyBvcigoIVplLm4mJihaZS5uPW5ldyBudChlYyxaZSwxLDcpKSxaZS5uKSk7d3MuZSE9d3MuaS5nYygpOylvaT1sKGdyKHdzKSwxMzUpLFFoKG9pLG9pLmkrQXYsb2kuait5cCk7Zm9yKHVyPWwoYXQoWmUseDMpLDc1KSxqbj1Scih1ciwwKTtqbi5iIT1qbi5kLmM7KUJuPWwoQnIoam4pLDgpLEJuLmErPUF2LEJuLmIrPXlwO0hpKFplLHgzLHVyKX19SGQuVmcoKX1mb3IoTD1uZXcgb3IoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpKTtMLmUhPUwuaS5nYygpOylDPWwoZ3IoTCksMjcpLHRlPVhrZShlLEMsbixyKSxyYShNZSx0ZSksdW10KEMpfWlmKHIuJGcoKSlyZXR1cm4gQ24oKSxDbigpLF9vO2ZvcihfZz1uZXcgRyhNZSk7X2cuYTxfZy5jLmMubGVuZ3RoOylxZD1sKHJlKF9nKSw3NCksSGkocWQsclksKEhuKCksITApKTtyZXR1cm4gUnQoQnQoYXQodCxBTSkpKXx8c2R0KHQsYSxyLmVoKGY3KSksel9uKE1lKSxjbiYmZDc/YW46KENuKCksQ24oKSxfbyl9ZWxzZSByZXR1cm4gQ24oKSxDbigpLF9vfWZ1bmN0aW9uIGI2KGUsdCl7dmFyIG4scjtyZXR1cm4gbDd8fChsNz1uZXcgUHIsY0M9bmV3IFByLHI9KERpKCksRGkoKSxuZXcgX2goNCkpLGpOKHIsYAkKXHJcciAgYCkscmMobDcsZjBlLHIpLHJjKGNDLGYwZSxVeShyKSkscj1uZXcgX2goNCksak4ocixLNXQpLHJjKGw3LE9MLHIpLHJjKGNDLE9MLFV5KHIpKSxyPW5ldyBfaCg0KSxqTihyLEs1dCkscmMobDcsT0wscikscmMoY0MsT0wsVXkocikpLHI9bmV3IF9oKDQpLGpOKHIsVzV0KSxLeShyLGwoeHUobDcsT0wpLDEyMikpLHJjKGw3LGgwZSxyKSxyYyhjQyxoMGUsVXkocikpLHI9bmV3IF9oKDQpLGpOKHIsIi0uMDpBWl9fYXrCt8K3w4DDlsOYw7bDuMSxxLTEvsWBxYjFisW+xoDHg8eNx7DHtMe1x7rIl8mQyqjKu8uBy5DLkcyAzYXNoM2hzobOis6MzozOjs6hzqPPjs+Qz5bPms+az5zPnM+ez57PoM+gz6LPs9CB0IzQjtGP0ZHRnNGe0oHSg9KG0pDThNOH04jTi9OM05DTq9Ou07XTuNO51LHVltWZ1ZnVodaG1pHWodaj1rnWu9a91r/Wv9eB14LXhNeE15DXqtew17LYodi62YDZktmg2anZsNq32rravtuA247bkNuT25XbqNuq263bsNu54KSB4KSD4KSF4KS54KS84KWN4KWR4KWU4KWY4KWj4KWm4KWv4KaB4KaD4KaF4KaM4KaP4KaQ4KaT4Kao4Kaq4Kaw4Kay4Kay4Ka24Ka54Ka84Ka84Ka+4KeE4KeH4KeI4KeL4KeN4KeX4KeX4Kec4Ked4Kef4Kej4Kem4Kex4KiC4KiC4KiF4KiK4KiP4KiQ4KiT4Kio4Kiq4Kiw4Kiy4Kiz4Ki14Ki24Ki44Ki54Ki84Ki84Ki+4KmC4KmH4KmI4KmL4KmN4KmZ4Kmc4Kme4Kme4Kmm4Km04KqB4KqD4KqF4KqL4KqN4KqN4KqP4KqR4KqT4Kqo4Kqq4Kqw4Kqy4Kqz4Kq14Kq54Kq84KuF4KuH4KuJ4KuL4KuN4Kug4Kug4Kum4Kuv4KyB4KyD4KyF4KyM4KyP4KyQ4KyT4Kyo4Kyq4Kyw4Kyy4Kyz4Ky24Ky54Ky84K2D4K2H4K2I4K2L4K2N4K2W4K2X4K2c4K2d4K2f4K2h4K2m4K2v4K6C4K6D4K6F4K6K4K6O4K6Q4K6S4K6V4K6Z4K6a4K6c4K6c4K6e4K6f4K6j4K6k4K6o4K6q4K6u4K614K634K654K6+4K+C4K+G4K+I4K+K4K+N4K+X4K+X4K+n4K+v4LCB4LCD4LCF4LCM4LCO4LCQ4LCS4LCo4LCq4LCz4LC14LC54LC+4LGE4LGG4LGI4LGK4LGN4LGV4LGW4LGg4LGh4LGm4LGv4LKC4LKD4LKF4LKM4LKO4LKQ4LKS4LKo4LKq4LKz4LK14LK54LK+4LOE4LOG4LOI4LOK4LON4LOV4LOW4LOe4LOe4LOg4LOh4LOm4LOv4LSC4LSD4LSF4LSM4LSO4LSQ4LSS4LSo4LSq4LS54LS+4LWD4LWG4LWI4LWK4LWN4LWX4LWX4LWg4LWh4LWm4LWv4LiB4Liu4Liw4Li64LmA4LmO4LmQ4LmZ4LqB4LqC4LqE4LqE4LqH4LqI4LqK4LqK4LqN4LqN4LqU4LqX4LqZ4Lqf4Lqh4Lqj4Lql4Lql4Lqn4Lqn4Lqq4Lqr4Lqt4Lqu4Lqw4Lq54Lq74Lq94LuA4LuE4LuG4LuG4LuI4LuN4LuQ4LuZ4LyY4LyZ4Lyg4Lyp4Ly14Ly14Ly34Ly34Ly54Ly54Ly+4L2H4L2J4L2p4L2x4L6E4L6G4L6L4L6Q4L6V4L6X4L6X4L6Z4L6t4L6x4L634L654L654YKg4YOF4YOQ4YO24YSA4YSA4YSC4YSD4YSF4YSH4YSJ4YSJ4YSL4YSM4YSO4YSS4YS84YS84YS+4YS+4YWA4YWA4YWM4YWM4YWO4YWO4YWQ4YWQ4YWU4YWV4YWZ4YWZ4YWf4YWh4YWj4YWj4YWl4YWl4YWn4YWn4YWp4YWp4YWt4YWu4YWy4YWz4YW14YW14Yae4Yae4Yao4Yao4Yar4Yar4Yau4Yav4Ya34Ya44Ya64Ya64Ya84YeC4Yer4Yer4Yew4Yew4Ye54Ye54biA4bqb4bqg4bu54byA4byV4byY4byd4byg4b2F4b2I4b2N4b2Q4b2X4b2Z4b2Z4b2b4b2b4b2d4b2d4b2f4b294b6A4b604b624b684b6+4b6+4b+C4b+E4b+G4b+M4b+Q4b+T4b+W4b+b4b+g4b+s4b+y4b+04b+24b+84oOQ4oOc4oOh4oOh4oSm4oSm4oSq4oSr4oSu4oSu4oaA4oaC44CF44CF44CH44CH44Ch44Cv44Cx44C144GB44KU44KZ44Ka44Kd44Ke44Kh44O644O844O+44SF44Ss5LiA6b6l6rCA7Z6jIikscmMobDcsZDBlLHIpLHJjKGNDLGQwZSxVeShyKSkscj1uZXcgX2goNCksak4ocixXNXQpLEV1KHIsOTUsOTUpLEV1KHIsNTgsNTgpLHJjKGw3LGcwZSxyKSxyYyhjQyxnMGUsVXkocikpKSxuPWwoeHUodD9sNzpjQyxlKSwxMzgpLG59ZnVuY3Rpb24gVHd0KGUpe3N3KGUsbmV3IFhtKGEzZShVeihudyhadih0dyhldyhuZXcgeDEsc3IpLCJFTEsgTGF5ZXJlZCIpLCJMYXllci1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gQXJyYW5nZXMgYXMgbWFueSBlZGdlcyBhcyBwb3NzaWJsZSBpbnRvIG9uZSBkaXJlY3Rpb24gYnkgcGxhY2luZyBub2RlcyBpbnRvIHN1YnNlcXVlbnQgbGF5ZXJzLiBUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGRpZmZlcmVudCByb3V0aW5nIHN0eWxlcyAoc3RyYWlnaHQsIG9ydGhvZ29uYWwsIHNwbGluZXMpOyBpZiBvcnRob2dvbmFsIHJvdXRpbmcgaXMgc2VsZWN0ZWQsIGFyYml0cmFyeSBwb3J0IGNvbnN0cmFpbnRzIGFyZSByZXNwZWN0ZWQsIHRodXMgZW5hYmxpbmcgdGhlIGxheW91dCBvZiBibG9jayBkaWFncmFtcyBzdWNoIGFzIGFjdG9yLW9yaWVudGVkIG1vZGVscyBvciBjaXJjdWl0IHNjaGVtYXRpY3MuIEZ1cnRoZXJtb3JlLCBmdWxsIGxheW91dCBvZiBjb21wb3VuZCBncmFwaHMgd2l0aCBjcm9zcy1oaWVyYXJjaHkgZWRnZXMgaXMgc3VwcG9ydGVkIHdoZW4gdGhlIHJlc3BlY3RpdmUgb3B0aW9uIGlzIGFjdGl2YXRlZCBvbiB0aGUgdG9wIGxldmVsLiIpLG5ldyBSZWUpLHNyKSxycygoSEUoKSxKZ2UpLGhlKGxlKHhZLDEpLGl0LDI0NSwwLFt3WSx5WSx2WSxRZ2UsbVksYlldKSkpKSksZ3QoZSxzcixMVGUsSXQob2RlKSksZ3QoZSxzcixNVGUsSXQodERlKSksZ3QoZSxzcixfaGUsSXQoU0IpKSxndChlLHNyLERUZSxJdCh4MCkpLGd0KGUsc3IsT2hlLEl0KEg2KSksZ3QoZSxzcixkZmUsSXQoYjMpKSxndChlLHNyLElUZSxJdCh5NCkpLGd0KGUsc3IsT1RlLEl0KEdUKSksZ3QoZSxzcixOVGUsSXQoS1QpKSxndChlLHNyLFBUZSxJdChjZGUpKSxndChlLHNyLEp5LEl0KG0zKSksZ3QoZSxzcixCVGUsSXQodWRlKSksZ3QoZSxzcixGVGUsSXQodE0pKSxndChlLHNyLFJUZSxJdChrVykpLGd0KGUsc3IsbFRlLEl0KENCKSksZ3QoZSxzcixmVGUsSXQocTYpKSxndChlLHNyLGhUZSxJdCh2dikpLGd0KGUsc3IsZFRlLEl0KFY2KSksZ3QoZSxzcixOUCxwdCgwKSksZ3QoZSxzcixnVGUsSXQoVVQpKSxndChlLHNyLHBUZSxJdChlRGUpKSxndChlLHNyLGJUZSxJdChKeCkpLGd0KGUsc3IsZnAsSXQobERlKSksZ3QoZSxzcix2RyxJdChyRGUpKSxndChlLHNyLHdHLEl0KGlEZSkpLGd0KGUsc3IsYkwsSXQoaGRlKSksZ3QoZSxzcixzZmUsSXQoc0RlKSksZ3QoZSxzcixhZmUsSXQoYURlKSksZ3QoZSxzcix5RyxJdChFVykpLGd0KGUsc3IseEcsSXQoZmRlKSksZ3QoZSxzcixrRyxJdChjRGUpKSxndChlLHNyLEVHLEl0KG9EZSkpLGd0KGUsc3Isb2ZlLEl0KHVEZSkpLGd0KGUsc3IsWmhlLEl0KGczKSksZ3QoZSxzcixlZmUsSXQoZU0pKSxndChlLHNyLHBHLEl0KHJkZSkpLGd0KGUsc3IsYkcsSXQoT01lKSksZ3QoZSxzcixQUCxJdChXa3QpKSxndChlLHNyLEJQLEl0KFlrdCkpLGd0KGUsc3IsRlAsSXQoS2t0KSksZ3QoZSxzcixSUCxJdChHa3QpKSxndChlLHNyLFF3LG5EZSksZ3QoZSxzcixYdyxZTWUpLGd0KGUsc3IsSFAsTU1lKSxndChlLHNyLGpUZSwwKSxndChlLHNyLG9HLHB0KDEpKSxndChlLHNyLE94LGxUKSxndChlLHNyLCRUZSxJdChtdikpLGd0KGUsc3IsTmhlLEl0KE1zKSksZ3QoZSxzcix6VGUsSXQoVlQpKSxndChlLHNyLFZQLEl0KEJrdCkpLGd0KGUsc3IscVRlLEl0KFJkKSksZ3QoZSxzcixDRyxJdChwNCkpLGd0KGUsc3IsbEwsKEhuKCksITApKSxndChlLHNyLEhUZSxJdChiNCkpLGd0KGUsc3IsVlRlLEl0KGd2KSksZ3QoZSxzcix4NixJdChidikpLGd0KGUsc3IsTngsSXQoeFcpKSxndChlLHNyLGhULEl0KGFkZSkpLGd0KGUsc3IsZ2ZlLExNZSksZ3QoZSxzcixmVCxJdChkMykpLGd0KGUsc3IsVVRlLEl0KHdXKSksZ3QoZSxzcixkVCxJdCh2NCkpLGd0KGUsc3IsR1RlLEl0KHFrdCkpLGd0KGUsc3IsS1RlLEl0KEpNZSkpLGd0KGUsc3IsV1RlLFFNZSksZ3QoZSxzcixZVGUsSXQoamt0KSksZ3QoZSxzcixYVGUsSXQoJGt0KSksZ3QoZSxzcixRVGUsSXQoemt0KSksZ3QoZSxzcixKVGUsSXQoUmt0KSksZ3QoZSxzcixRRWUsSXQobGRlKSksZ3QoZSxzcixxUCxJdChwdikpLGd0KGUsc3IsVmhlLEl0KHpiKSksZ3QoZSxzcixYRWUsSXQobk0pKSxndChlLHNyLFpFZSxJdChRdSkpLGd0KGUsc3IsemhlLEl0KGR2KSksZ3QoZSxzcixwTCxJdChKTCkpLGd0KGUsc3IsblRlLEl0KGYzKSksZ3QoZSxzcixvVGUsSXQoU01lKSksZ3QoZSxzcixZaGUsSXQoWjFlKSksZ3QoZSxzcixkRyxJdChUQikpLGd0KGUsc3IsV2hlLEl0KGVkZSkpLGd0KGUsc3IsR0VlLEl0KFZNZSkpLGd0KGUsc3IsS0VlLEl0KFVNZSkpLGd0KGUsc3IsZkcsSXQoak1lKSksZ3QoZSxzcixrNixJdCh5VykpLGd0KGUsc3IsUWhlLEl0KHNkZSkpLGd0KGUsc3IsVUVlLEl0KGlkZSkpLGd0KGUsc3IsSmhlLEl0KEtNZSkpLGd0KGUsc3IsY1RlLEl0KElNZSkpLGd0KGUsc3IsdVRlLEl0KG5kZSkpLGd0KGUsc3IsU0csSXQoSjFlKSksZ3QoZSxzcixYaGUsSXQoR01lKSksZ3QoZSxzcixtVGUsSXQobFcpKSxndChlLHNyLHZUZSxJdChFTWUpKSxndChlLHNyLG5mZSxJdCh1VykpLGd0KGUsc3IsbUcsSXQoQk1lKSksZ3QoZSxzcixyZmUsSXQoUE1lKSksZ3QoZSxzcixpZmUsSXQoRk1lKSksZ3QoZSxzcixQeCxJdChxVCkpLGd0KGUsc3IsWlRlLEl0KGNjKSksZ3QoZSxzcixBaGUsSXQoeDIpKSxndChlLHNyLGVDZSxJdChqZCkpLGd0KGUsc3IsY0csSXQodGRlKSksZ3QoZSxzcixLaGUsSXQoX01lKSksZ3QoZSxzcix0Q2UsSXQoazIpKSxndChlLHNyLG5DZSxJdChRTCkpLGd0KGUsc3IsckNlLEl0KGJXKSksZ3QoZSxzcixpQ2UsSXQocDMpKSxndChlLHNyLHBmZSxJdChYTWUpKSxndChlLHNyLGJmZSxJdChIVCkpLGd0KGUsc3IscWhlLEl0KHpNZSkpLGd0KGUsc3IsSGhlLEl0KHFNZSkpLGd0KGUsc3IsX0csSXQodzQpKSxndChlLHNyLFdFZSxJdChYMWUpKSxndChlLHNyLFVoZSxJdChITWUpKSxndChlLHNyLHdUZSxJdChwVykpLGd0KGUsc3IseVRlLEl0KGdXKSksZ3QoZSxzcixzQ2UsSXQodlcpKSxndChlLHNyLEdoZSxJdCgkTWUpKSxndChlLHNyLGdHLEl0KFpMKSksZ3QoZSxzcixhQ2UsSXQoX0IpKSxndChlLHNyLFZFZSxJdChBTWUpKSxndChlLHNyLFlFZSxJdChaTWUpKSxndChlLHNyLHRmZSxJdChETWUpKSxndChlLHNyLHJUZSxJdChPa3QpKSxndChlLHNyLGlUZSxJdChOa3QpKSxndChlLHNyLGVUZSxJdChGa3QpKSxndChlLHNyLHNUZSxJdChQa3QpKSxndChlLHNyLEFHLEl0KFJNZSkpLGd0KGUsc3IsdFRlLEl0KG1XKSksZ3QoZSxzcixhVGUsSXQoZFcpKSxndChlLHNyLFRHLEl0KHlnKSksZ3QoZSxzcixFVGUsSXQoQ01lKSksZ3QoZSxzcix1ZmUsSXQoaFcpKSxndChlLHNyLGxmZSxJdChUTWUpKSxndChlLHNyLGtUZSxJdChmVykpLGd0KGUsc3IsY2ZlLEl0KGc0KSksZ3QoZSxzcix4VGUsSXQoUTFlKSksZ3QoZSxzcixKRWUsSXQoTk1lKSl9ZnVuY3Rpb24gbk9uKGUpe1dyKGUuYSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJhbnlTaW1wbGVUeXBlIl0pKSxXcihlLmIsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiYW55VHlwZSIsQmYsWFBdKSksV3IobChPZSh0dChlLmIpLDApLDM1KSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW0JmLGEwZSxfaSwiOm1peGVkIl0pKSxXcihsKE9lKHR0KGUuYiksMSksMzUpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsYTBlLE9TZSxjMGUsX2ksIjoxIixPNXQsImxheCJdKSksV3IobChPZSh0dChlLmIpLDIpLDM1KSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW0JmLEw1dCxPU2UsYzBlLF9pLCI6MiIsTzV0LCJsYXgiXSkpLFdyKGUuYyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJhbnlVUkkiLFJmLHMxXSkpLFdyKGUuZCxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJiYXNlNjRCaW5hcnkiLFJmLHMxXSkpLFdyKGUuZSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLEN4LFJmLHMxXSkpLFdyKGUuZixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJib29sZWFuOk9iamVjdCIsaG8sQ3hdKSksV3IoZS5nLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksU0xdKSksV3IoZS5pLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImJ5dGU6T2JqZWN0IixobyxTTF0pKSxXcihlLmosbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiZGF0ZSIsUmYsczFdKSksV3IoZS5rLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImRhdGVUaW1lIixSZixzMV0pKSxXcihlLm4sbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiZGVjaW1hbCIsUmYsczFdKSksV3IoZS5vLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksX0wsUmYsczFdKSksV3IoZS5wLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImRvdWJsZTpPYmplY3QiLGhvLF9MXSkpLFdyKGUucSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJkdXJhdGlvbiIsUmYsczFdKSksV3IoZS5zLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksIkVOVElUSUVTIixobyxONXQsTlNlLCIxIl0pKSxXcihlLnIsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSxONXQsbzBlLFBTZV0pKSxXcihlLnQsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSxQU2UsaG8scktdKSksV3IoZS51LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksQUwsUmYsczFdKSksV3IoZS52LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImZsb2F0Ok9iamVjdCIsaG8sQUxdKSksV3IoZS53LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImdEYXkiLFJmLHMxXSkpLFdyKGUuQixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJnTW9udGgiLFJmLHMxXSkpLFdyKGUuQSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJnTW9udGhEYXkiLFJmLHMxXSkpLFdyKGUuQyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJnWWVhciIsUmYsczFdKSksV3IoZS5ELGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImdZZWFyTW9udGgiLFJmLHMxXSkpLFdyKGUuRixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJoZXhCaW5hcnkiLFJmLHMxXSkpLFdyKGUuRyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJJRCIsaG8scktdKSksV3IoZS5ILGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksIklEUkVGIixobyxyS10pKSxXcihlLkosbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiSURSRUZTIixobyxQNXQsTlNlLCIxIl0pKSxXcihlLkksbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSxQNXQsbzBlLCJJRFJFRiJdKSksV3IoZS5LLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksTExdKSksV3IoZS5NLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksQlNlXSkpLFdyKGUuTCxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJpbnQ6T2JqZWN0IixobyxMTF0pKSxXcihlLlAsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwibGFuZ3VhZ2UiLGhvLHUwZSxsMGUsQjV0XSkpLFdyKGUuUSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLE1MXSkpLFdyKGUuUixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJsb25nOk9iamVjdCIsaG8sTUxdKSksV3IoZS5TLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksIk5hbWUiLGhvLHUwZSxsMGUsRlNlXSkpLFdyKGUuVCxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLHJLLGhvLCJOYW1lIixsMGUsRjV0XSkpLFdyKGUuVSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJuZWdhdGl2ZUludGVnZXIiLGhvLFI1dCx0QiwiLTEiXSkpLFdyKGUuVixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLFJTZSxobyx1MGUsbDBlLCJcXGMrIl0pKSxXcihlLlgsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiTk1UT0tFTlMiLGhvLGo1dCxOU2UsIjEiXSkpLFdyKGUuVyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLGo1dCxvMGUsUlNlXSkpLFdyKGUuWSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLGpTZSxobyxCU2UsbkIsIjAiXSkpLFdyKGUuWixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLFI1dCxobyxCU2UsdEIsIjAiXSkpLFdyKGUuJCxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCQ1dCxobyxJbGUsUmYsInJlcGxhY2UiXSkpLFdyKGUuXyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJOT1RBVElPTiIsUmYsczFdKSksV3IoZS5hYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJwb3NpdGl2ZUludGVnZXIiLGhvLGpTZSxuQiwiMSJdKSksV3IoZS5iYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25fLl90eXBlIixCZiwiZW1wdHkiXSkpLFdyKGwoT2UodHQoZS5iYiksMCksMzUpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsWkcsX2ksImRhdGEiXSkpLFdyKGwoT2UodHQoZS5iYiksMSksMzUpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsWkcsX2ksd1NlXSkpLFdyKGUuY2IsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiUU5hbWUiLFJmLHMxXSkpLFdyKGUuZGIsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSxETF0pKSxXcihlLmViLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksInNob3J0Ok9iamVjdCIsaG8sRExdKSksV3IoZS5mYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJzaW1wbGVBbnlUeXBlIixCZixRUF0pKSxXcihsKE9lKHR0KGUuZmIpLDApLDM1KSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCI6MyIsQmYsUVBdKSksV3IobChPZSh0dChlLmZiKSwxKSwzNSksbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiOjQiLEJmLFFQXSkpLFdyKGwoT2UodHQoZS5mYiksMiksMTkpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksIjo1IixCZixRUF0pKSxXcihlLmdiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksSWxlLFJmLCJwcmVzZXJ2ZSJdKSksV3IoZS5oYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJ0aW1lIixSZixzMV0pKSxXcihlLmliLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksdTBlLGhvLCQ1dCxSZixzMV0pKSxXcihlLmpiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksejV0LHRCLCIyNTUiLG5CLCIwIl0pKSxXcihlLmtiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksInVuc2lnbmVkQnl0ZTpPYmplY3QiLGhvLHo1dF0pKSxXcihlLmxiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2kscTV0LHRCLCI0Mjk0OTY3Mjk1IixuQiwiMCJdKSksV3IoZS5tYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJ1bnNpZ25lZEludDpPYmplY3QiLGhvLHE1dF0pKSxXcihlLm5iLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksInVuc2lnbmVkTG9uZyIsaG8salNlLHRCLEg1dCxuQiwiMCJdKSksV3IoZS5vYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLFY1dCx0QiwiNjU1MzUiLG5CLCIwIl0pKSxXcihlLnBiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksInVuc2lnbmVkU2hvcnQ6T2JqZWN0IixobyxWNXRdKSksV3IoZS5xYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCIiLEJmLFhQXSkpLFdyKGwoT2UodHQoZS5xYiksMCksMzUpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsYTBlLF9pLCI6bWl4ZWQiXSkpLFdyKGwoT2UodHQoZS5xYiksMSksMTkpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsWkcsX2ksInhtbG5zOnByZWZpeCJdKSksV3IobChPZSh0dChlLnFiKSwyKSwxOSksbGksaGUobGUoenQsMSksZHQsMiw2LFtCZixaRyxfaSwieHNpOnNjaGVtYUxvY2F0aW9uIl0pKSxXcihsKE9lKHR0KGUucWIpLDMpLDM1KSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW0JmLGVLLF9pLCJjREFUQSIsdEssSlBdKSksV3IobChPZSh0dChlLnFiKSw0KSwzNSksbGksaGUobGUoenQsMSksZHQsMiw2LFtCZixlSyxfaSwiY29tbWVudCIsdEssSlBdKSksV3IobChPZSh0dChlLnFiKSw1KSwxOSksbGksaGUobGUoenQsMSksZHQsMiw2LFtCZixlSyxfaSxVNXQsdEssSlBdKSksV3IobChPZSh0dChlLnFiKSw2KSwzNSksbGksaGUobGUoenQsMSksZHQsMiw2LFtCZixlSyxfaSxLZmUsdEssSlBdKSl9ZnVuY3Rpb24gYWkoZSl7cmV0dXJuIHZuKCJfVUlfRU1GRGlhZ25vc3RpY19tYXJrZXIiLGUpPyJFTUYgUHJvYmxlbSI6dm4oIl9VSV9DaXJjdWxhckNvbnRhaW5tZW50X2RpYWdub3N0aWMiLGUpPyJBbiBvYmplY3QgbWF5IG5vdCBjaXJjdWxhcmx5IGNvbnRhaW4gaXRzZWxmIjp2bihfNHQsZSk/Ildyb25nIGNoYXJhY3Rlci4iOnZuKEE0dCxlKT8iSW52YWxpZCByZWZlcmVuY2UgbnVtYmVyLiI6dm4oVkcsZSk/IkEgY2hhcmFjdGVyIGlzIHJlcXVpcmVkIGFmdGVyIFxcLiI6dm4oZTBlLGUpPyInPycgaXMgbm90IGV4cGVjdGVkLiAgJyg/Oicgb3IgJyg/PScgb3IgJyg/IScgb3IgJyg/PCcgb3IgJyg/Iycgb3IgJyg/Pic/Ijp2bihMNHQsZSk/IicoPzwnIG9yICcoPzwhJyBpcyBleHBlY3RlZC4iOnZuKE00dCxlKT8iQSBjb21tZW50IGlzIG5vdCB0ZXJtaW5hdGVkLiI6dm4ob3YsZSk/IicpJyBpcyBleHBlY3RlZC4iOnZuKHlTZSxlKT8iVW5leHBlY3RlZCBlbmQgb2YgdGhlIHBhdHRlcm4gaW4gYSBtb2RpZmllciBncm91cC4iOnZuKEQ0dCxlKT8iJzonIGlzIGV4cGVjdGVkLiI6dm4oSTR0LGUpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNvbmRpdGlvbmFsIGdyb3VwLiI6dm4oTzR0LGUpPyJBIGJhY2sgcmVmZXJlbmNlIG9yIGFuIGFuY2hvciBvciBhIGxvb2thaGVhZCBvciBhIGxvb2stYmVoaW5kIGlzIGV4cGVjdGVkIGluIGEgY29uZGl0aW9uYWwgcGF0dGVybi4iOnZuKE40dCxlKT8iVGhlcmUgYXJlIG1vcmUgdGhhbiB0aHJlZSBjaG9pY2VzIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAuIjp2bihQNHQsZSk/IkEgY2hhcmFjdGVyIGluIFUrMDA0MC1VKzAwNWYgbXVzdCBmb2xsb3cgXFxjLiI6dm4oQjR0LGUpPyJBICd7JyBpcyByZXF1aXJlZCBiZWZvcmUgYSBjaGFyYWN0ZXIgY2F0ZWdvcnkuIjp2bihGNHQsZSk/IkEgcHJvcGVydHkgbmFtZSBpcyBub3QgY2xvc2VkIGJ5ICd9Jy4iOnZuKHhTZSxlKT8iVW5leHBlY3RlZCBtZXRhIGNoYXJhY3Rlci4iOnZuKHQwZSxlKT8iVW5rbm93biBwcm9wZXJ0eS4iOnZuKGtTZSxlKT8iQSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3MgbXVzdCBiZSBjbG9zZWQgYnkgJzpdJy4iOnZuKFVHLGUpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNoYXJhY3RlciBjbGFzcy4iOnZuKFI0dCxlKT8iVW5rbm93biBuYW1lIGZvciBhIFBPU0lYIGNoYXJhY3RlciBjbGFzcy4iOnZuKCJwYXJzZXIuY2MuNCIsZSk/IictJyBpcyBpbnZhbGlkIGhlcmUuIjp2bihqNHQsZSk/IiddJyBpcyBleHBlY3RlZC4iOnZuKEVTZSxlKT8iJ1snIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxbJy4iOnZuKFRTZSxlKT8iJ10nIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxdJy4iOnZuKG4wZSxlKT8iJy0nIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIHJhbmdlLiBXcml0ZSAnXFwtJy4iOnZuKCQ0dCxlKT8iJ1snIGlzIGV4cGVjdGVkLiI6dm4oejR0LGUpPyInKScgb3IgJy1bJyBvciAnK1snIG9yICcmWycgaXMgZXhwZWN0ZWQuIjp2bihxNHQsZSk/IlRoZSByYW5nZSBlbmQgY29kZSBwb2ludCBpcyBsZXNzIHRoYW4gdGhlIHN0YXJ0IGNvZGUgcG9pbnQuIjp2bih3MixlKT8iSW52YWxpZCBVbmljb2RlIGhleCBub3RhdGlvbi4iOnZuKEg0dCxlKT8iT3ZlcmZsb3cgaW4gYSBoZXggbm90YXRpb24uIjp2bihWNHQsZSk/IidcXHh7JyBtdXN0IGJlIGNsb3NlZCBieSAnfScuIjp2bihVNHQsZSk/IkludmFsaWQgVW5pY29kZSBjb2RlIHBvaW50LiI6dm4oRzR0LGUpPyJBbiBhbmNob3IgbXVzdCBub3QgYmUgaGVyZS4iOnZuKGJmLGUpPyJUaGlzIGV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBvcHRpb24gc2V0dGluZy4iOnZuKEs0dCxlKT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IGlzIGV4cGVjdGVkLiI6dm4oVzR0LGUpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEludmFsaWQgcXVhbnRpdHkgb3IgYSAnfScgaXMgbWlzc2luZy4iOnZuKFk0dCxlKT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IG9yICd9JyBpcyBleHBlY3RlZC4iOnZuKFg0dCxlKT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIG1pbiBxdWFudGl0eSBtdXN0IGJlIDw9IGEgbWF4IHF1YW50aXR5LiI6dm4oQ1NlLGUpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEEgcXVhbnRpdHkgdmFsdWUgb3ZlcmZsb3cuIjp2bigiX1VJX1BhY2thZ2VSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsZSk/IkVjb3JlIFBhY2thZ2UgUmVnaXN0cnkgZm9yIEdlbmVyYXRlZCBQYWNrYWdlcyI6dm4oIl9VSV9EeW5hbWljUGFja2FnZVJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50IixlKT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBmb3IgRHluYW1pYyBQYWNrYWdlcyI6dm4oIl9VSV9GYWN0b3J5UmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLGUpPyJFY29yZSBGYWN0b3J5IE92ZXJyaWRlIFJlZ2lzdHJ5Ijp2bigiX1VJX1VSSUV4dGVuc2lvblBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50IixlKT8iVVJJIEV4dGVuc2lvbiBQYXJzZXIgUmVnaXN0cnkiOnZuKCJfVUlfVVJJUHJvdG9jb2xQYXJzZXJSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsZSk/IlVSSSBQcm90b2NvbCBQYXJzZXIgUmVnaXN0cnkiOnZuKCJfVUlfVVJJQ29udGVudFBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50IixlKT8iVVJJIENvbnRlbnQgUGFyc2VyIFJlZ2lzdHJ5Ijp2bigiX1VJX0NvbnRlbnRIYW5kbGVyUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLGUpPyJDb250ZW50IEhhbmRsZXIgUmVnaXN0cnkiOnZuKCJfVUlfVVJJTWFwcGluZ1JlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50IixlKT8iVVJJIENvbnZlcnRlciBNYXBwaW5nIFJlZ2lzdHJ5Ijp2bigiX1VJX1BhY2thZ2VSZWdpc3RyeUltcGxlbWVudGF0aW9uX2V4dGVuc2lvbnBvaW50IixlKT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBJbXBsZW1lbnRhdGlvbiI6dm4oIl9VSV9WYWxpZGF0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsZSk/IlZhbGlkYXRpb24gRGVsZWdhdGUgUmVnaXN0cnkiOnZuKCJfVUlfU2V0dGluZ0RlbGVnYXRlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLGUpPyJGZWF0dXJlIFNldHRpbmcgRGVsZWdhdGUgRmFjdG9yeSBSZWdpc3RyeSI6dm4oIl9VSV9JbnZvY2F0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsZSk/Ik9wZXJhdGlvbiBJbnZvY2F0aW9uIERlbGVnYXRlIEZhY3RvcnkgUmVnaXN0cnkiOnZuKCJfVUlfRUNsYXNzSW50ZXJmYWNlTm90QWJzdHJhY3RfZGlhZ25vc3RpYyIsZSk/IkEgY2xhc3MgdGhhdCBpcyBhbiBpbnRlcmZhY2UgbXVzdCBhbHNvIGJlIGFic3RyYWN0Ijp2bigiX1VJX0VDbGFzc05vQ2lyY3VsYXJTdXBlclR5cGVzX2RpYWdub3N0aWMiLGUpPyJBIGNsYXNzIG1heSBub3QgYmUgYSBzdXBlciB0eXBlIG9mIGl0c2VsZiI6dm4oIl9VSV9FQ2xhc3NOb3RXZWxsRm9ybWVkTWFwRW50cnlOb0luc3RhbmNlQ2xhc3NOYW1lX2RpYWdub3N0aWMiLGUpPyJBIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBhIG1hcCBlbnRyeSBjbGFzcyBtdXN0IGhhdmUgaW5zdGFuY2UgY2xhc3MgbmFtZSAnamF2YS51dGlsLk1hcCRFbnRyeSciOnZuKCJfVUlfRVJlZmVyZW5jZU9wcG9zaXRlT2ZPcHBvc2l0ZUluY29uc2lzdGVudF9kaWFnbm9zdGljIixlKT8iVGhlIG9wcG9zaXRlIG9mIHRoZSBvcHBvc2l0ZSBtYXkgbm90IGJlIGEgcmVmZXJlbmNlIGRpZmZlcmVudCBmcm9tIHRoaXMgb25lIjp2bigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZU5vdEZlYXR1cmVPZlR5cGVfZGlhZ25vc3RpYyIsZSk/IlRoZSBvcHBvc2l0ZSBtdXN0IGJlIGEgZmVhdHVyZSBvZiB0aGUgcmVmZXJlbmNlJ3MgdHlwZSI6dm4oIl9VSV9FUmVmZXJlbmNlVHJhbnNpZW50T3Bwb3NpdGVOb3RUcmFuc2llbnRfZGlhZ25vc3RpYyIsZSk/IlRoZSBvcHBvc2l0ZSBvZiBhIHRyYW5zaWVudCByZWZlcmVuY2UgbXVzdCBiZSB0cmFuc2llbnQgaWYgaXQgaXMgcHJveHkgcmVzb2x2aW5nIjp2bigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZUJvdGhDb250YWlubWVudF9kaWFnbm9zdGljIixlKT8iVGhlIG9wcG9zaXRlIG9mIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIG11c3Qgbm90IGJlIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIjp2bigiX1VJX0VSZWZlcmVuY2VDb25zaXN0ZW50VW5pcXVlX2RpYWdub3N0aWMiLGUpPyJBIGNvbnRhaW5tZW50IG9yIGJpZGlyZWN0aW9uYWwgcmVmZXJlbmNlIG11c3QgYmUgdW5pcXVlIGlmIGl0cyB1cHBlciBib3VuZCBpcyBkaWZmZXJlbnQgZnJvbSAxIjp2bigiX1VJX0VUeXBlZEVsZW1lbnROb1R5cGVfZGlhZ25vc3RpYyIsZSk/IlRoZSB0eXBlZCBlbGVtZW50IG11c3QgaGF2ZSBhIHR5cGUiOnZuKCJfVUlfRUF0dHJpYnV0ZU5vRGF0YVR5cGVfZGlhZ25vc3RpYyIsZSk/IlRoZSBnZW5lcmljIGF0dHJpYnV0ZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgY2xhc3MiOnZuKCJfVUlfRVJlZmVyZW5jZU5vQ2xhc3NfZGlhZ25vc3RpYyIsZSk/IlRoZSBnZW5lcmljIHJlZmVyZW5jZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgZGF0YSB0eXBlIjp2bigiX1VJX0VHZW5lcmljVHlwZU5vVHlwZVBhcmFtZXRlckFuZENsYXNzaWZpZXJfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIGNhbid0IHJlZmVyIHRvIGJvdGggYSB0eXBlIHBhcmFtZXRlciBhbmQgYSBjbGFzc2lmaWVyIjp2bigiX1VJX0VHZW5lcmljVHlwZU5vQ2xhc3NfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyBzdXBlciB0eXBlIG11c3QgcmVmZXIgdG8gYSBjbGFzcyI6dm4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIGluIHRoaXMgY29udGV4dCBtdXN0IHJlZmVyIHRvIGEgY2xhc3NpZmllciBvciBhIHR5cGUgcGFyYW1ldGVyIjp2bigiX1VJX0VHZW5lcmljVHlwZUJvdW5kc09ubHlGb3JUeXBlQXJndW1lbnRfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGJvdW5kcyBvbmx5IHdoZW4gdXNlZCBhcyBhIHR5cGUgYXJndW1lbnQiOnZuKCJfVUlfRUdlbmVyaWNUeXBlTm9VcHBlckFuZExvd2VyQm91bmRfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIG11c3Qgbm90IGhhdmUgYm90aCBhIGxvd2VyIGFuZCBhbiB1cHBlciBib3VuZCI6dm4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJBbmRCb3VuZF9kaWFnbm9zdGljIixlKT8iQSBnZW5lcmljIHR5cGUgd2l0aCBib3VuZHMgbXVzdCBub3QgYWxzbyByZWZlciB0byBhIHR5cGUgcGFyYW1ldGVyIG9yIGNsYXNzaWZpZXIiOnZuKCJfVUlfRUdlbmVyaWNUeXBlTm9Bcmd1bWVudHNfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGFyZ3VtZW50cyBvbmx5IGlmIGl0IHJlZmVycyB0byBhIGNsYXNzaWZpZXIiOnZuKCJfVUlfRUdlbmVyaWNUeXBlT3V0T2ZTY29wZVR5cGVQYXJhbWV0ZXJfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIG1heSBvbmx5IHJlZmVyIHRvIGEgdHlwZSBwYXJhbWV0ZXIgdGhhdCBpcyBpbiBzY29wZSI6ZX1mdW5jdGlvbiByT24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKO2Uucnx8KGUucj0hMCxGdShlLCJncmFwaCIpLENWKGUsImdyYXBoIiksU1YoZSx4VCksa04oZS5vLCJUIikscXIoZGMoZS5hKSxlLnApLHFyKGRjKGUuZiksZS5hKSxxcihkYyhlLm4pLGUuZikscXIoZGMoZS5nKSxlLm4pLHFyKGRjKGUuYyksZS5uKSxxcihkYyhlLmkpLGUuYykscXIoZGMoZS5qKSxlLmMpLHFyKGRjKGUuZCksZS5mKSxxcihkYyhlLmUpLGUuYSksemMoZS5wLHdPbixtM3QsITAsITAsITEpLFY9SjUoZS5wLGUucCwic2V0UHJvcGVydHkiKSxKPWkwdChWKSxFPUtnKGUubyksQz0obj0ocj1uZXcgUXYsciksbikscXIoKCFFLmQmJihFLmQ9bmV3IFlzKFdvLEUsMSkpLEUuZCksQyksTD10b2UoSiksQXhlKEMsTCksZ1UoVixFLGxTZSksRT10b2UoSiksZ1UoVixFLFRMKSxWPUo1KGUucCxudWxsLCJnZXRQcm9wZXJ0eSIpLEo9aTB0KFYpLEU9S2coZS5vKSxDPXRvZShKKSxxcigoIUUuZCYmKEUuZD1uZXcgWXMoV28sRSwxKSksRS5kKSxDKSxnVShWLEUsbFNlKSxFPXRvZShKKSx6PSQxKFYsRSxudWxsKSx6JiZ6Lm9qKCksVj1KNShlLnAsZS53Yi5lLCJoYXNQcm9wZXJ0eSIpLEU9S2coZS5vKSxDPShhPShvPW5ldyBRdixvKSxhKSxxcigoIUUuZCYmKEUuZD1uZXcgWXMoV28sRSwxKSksRS5kKSxDKSxnVShWLEUsbFNlKSxWPUo1KGUucCxlLnAsImNvcHlQcm9wZXJ0aWVzIiksYWMoVixlLnAsSGZlKSxWPUo1KGUucCxudWxsLCJnZXRBbGxQcm9wZXJ0aWVzIiksRT1LZyhlLndiLlApLEM9S2coZS5vKSxxcigoIUUuZCYmKEUuZD1uZXcgWXMoV28sRSwxKSksRS5kKSxDKSxMPShmPShnPW5ldyBRdixnKSxmKSxxcigoIUMuZCYmKEMuZD1uZXcgWXMoV28sQywxKSksQy5kKSxMKSxDPUtnKGUud2IuTSkscXIoKCFFLmQmJihFLmQ9bmV3IFlzKFdvLEUsMSkpLEUuZCksQyksQj0kMShWLEUsbnVsbCksQiYmQi5vaigpLHpjKGUuYSxvQyxyNHQsITAsITEsITApLHNzKGwoT2UodHQoZS5hKSwwKSwxOSksZS5rLG51bGwscDR0LDAsLTEsb0MsITEsITEsITAsITAsITEsITEsITEpLHpjKGUuZixvRixzNHQsITAsITEsITApLHNzKGwoT2UodHQoZS5mKSwwKSwxOSksZS5nLGwoT2UodHQoZS5nKSwwKSwxOSksImxhYmVscyIsMCwtMSxvRiwhMSwhMSwhMCwhMCwhMSwhMSwhMSksT3MobChPZSh0dChlLmYpLDEpLDM1KSxlLndiLl8sYjR0LG51bGwsMCwxLG9GLCExLCExLCEwLCExLCEwLCExKSx6YyhlLm4sY0YsIkVsa1NoYXBlIiwhMCwhMSwhMCksT3MobChPZSh0dChlLm4pLDApLDM1KSxlLndiLnQsVmZlLHNULDEsMSxjRiwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLm4pLDEpLDM1KSxlLndiLnQsVWZlLHNULDEsMSxjRiwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLm4pLDIpLDM1KSxlLndiLnQsIngiLHNULDEsMSxjRiwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLm4pLDMpLDM1KSxlLndiLnQsInkiLHNULDEsMSxjRiwhMSwhMSwhMCwhMSwhMCwhMSksVj1KNShlLm4sbnVsbCwic2V0RGltZW5zaW9ucyIpLGFjKFYsZS53Yi50LFVmZSksYWMoVixlLndiLnQsVmZlKSxWPUo1KGUubixudWxsLCJzZXRMb2NhdGlvbiIpLGFjKFYsZS53Yi50LCJ4IiksYWMoVixlLndiLnQsInkiKSx6YyhlLmcsZWMsb1NlLCExLCExLCEwKSxzcyhsKE9lKHR0KGUuZyksMCksMTkpLGUuZixsKE9lKHR0KGUuZiksMCksMTkpLEdmZSwwLDEsZWMsITEsITEsITAsITEsITEsITEsITEpLE9zKGwoT2UodHQoZS5nKSwxKSwzNSksZS53Yi5fLEtmZSwiIiwwLDEsZWMsITEsITEsITAsITEsITAsITEpLHpjKGUuYyxfcixhNHQsITAsITEsITApLHNzKGwoT2UodHQoZS5jKSwwKSwxOSksZS5kLGwoT2UodHQoZS5kKSwxKSwxOSksIm91dGdvaW5nRWRnZXMiLDAsLTEsX3IsITEsITEsITAsITEsITAsITEsITEpLHNzKGwoT2UodHQoZS5jKSwxKSwxOSksZS5kLGwoT2UodHQoZS5kKSwyKSwxOSksImluY29taW5nRWRnZXMiLDAsLTEsX3IsITEsITEsITAsITEsITAsITEsITEpLHpjKGUuaSxBaSxjU2UsITEsITEsITApLHNzKGwoT2UodHQoZS5pKSwwKSwxOSksZS5qLGwoT2UodHQoZS5qKSwwKSwxOSksInBvcnRzIiwwLC0xLEFpLCExLCExLCEwLCEwLCExLCExLCExKSxzcyhsKE9lKHR0KGUuaSksMSksMTkpLGUuaSxsKE9lKHR0KGUuaSksMiksMTkpLFdmZSwwLC0xLEFpLCExLCExLCEwLCEwLCExLCExLCExKSxzcyhsKE9lKHR0KGUuaSksMiksMTkpLGUuaSxsKE9lKHR0KGUuaSksMSksMTkpLEdmZSwwLDEsQWksITEsITEsITAsITEsITEsITEsITEpLHNzKGwoT2UodHQoZS5pKSwzKSwxOSksZS5kLGwoT2UodHQoZS5kKSwwKSwxOSksImNvbnRhaW5lZEVkZ2VzIiwwLC0xLEFpLCExLCExLCEwLCEwLCExLCExLCExKSxPcyhsKE9lKHR0KGUuaSksNCksMzUpLGUud2IuZSxtNHQsbnVsbCwwLDEsQWksITAsITAsITEsITEsITAsITApLHpjKGUuaixIbCx1U2UsITEsITEsITApLHNzKGwoT2UodHQoZS5qKSwwKSwxOSksZS5pLGwoT2UodHQoZS5pKSwwKSwxOSksR2ZlLDAsMSxIbCwhMSwhMSwhMCwhMSwhMSwhMSwhMSksemMoZS5kLGpzLGFTZSwhMSwhMSwhMCksc3MobChPZSh0dChlLmQpLDApLDE5KSxlLmksbChPZSh0dChlLmkpLDMpLDE5KSwiY29udGFpbmluZ05vZGUiLDAsMSxqcywhMSwhMSwhMCwhMSwhMSwhMSwhMSksc3MobChPZSh0dChlLmQpLDEpLDE5KSxlLmMsbChPZSh0dChlLmMpLDApLDE5KSxoU2UsMCwtMSxqcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksc3MobChPZSh0dChlLmQpLDIpLDE5KSxlLmMsbChPZSh0dChlLmMpLDEpLDE5KSxZZmUsMCwtMSxqcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksc3MobChPZSh0dChlLmQpLDMpLDE5KSxlLmUsbChPZSh0dChlLmUpLDUpLDE5KSxmU2UsMCwtMSxqcywhMSwhMSwhMCwhMCwhMSwhMSwhMSksT3MobChPZSh0dChlLmQpLDQpLDM1KSxlLndiLmUsImh5cGVyZWRnZSIsbnVsbCwwLDEsanMsITAsITAsITEsITEsITAsITApLE9zKGwoT2UodHQoZS5kKSw1KSwzNSksZS53Yi5lLG00dCxudWxsLDAsMSxqcywhMCwhMCwhMSwhMSwhMCwhMCksT3MobChPZSh0dChlLmQpLDYpLDM1KSxlLndiLmUsInNlbGZsb29wIixudWxsLDAsMSxqcywhMCwhMCwhMSwhMSwhMCwhMCksT3MobChPZSh0dChlLmQpLDcpLDM1KSxlLndiLmUsImNvbm5lY3RlZCIsbnVsbCwwLDEsanMsITAsITAsITEsITEsITAsITApLHpjKGUuYixxaCxpNHQsITEsITEsITApLE9zKGwoT2UodHQoZS5iKSwwKSwzNSksZS53Yi50LCJ4IixzVCwxLDEscWgsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iKSwxKSwzNSksZS53Yi50LCJ5IixzVCwxLDEscWgsITEsITEsITAsITEsITAsITEpLFY9SjUoZS5iLG51bGwsInNldCIpLGFjKFYsZS53Yi50LCJ4IiksYWMoVixlLndiLnQsInkiKSx6YyhlLmUsY3MsbzR0LCExLCExLCEwKSxPcyhsKE9lKHR0KGUuZSksMCksMzUpLGUud2IudCwic3RhcnRYIixudWxsLDAsMSxjcywhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmUpLDEpLDM1KSxlLndiLnQsInN0YXJ0WSIsbnVsbCwwLDEsY3MsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5lKSwyKSwzNSksZS53Yi50LCJlbmRYIixudWxsLDAsMSxjcywhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmUpLDMpLDM1KSxlLndiLnQsImVuZFkiLG51bGwsMCwxLGNzLCExLCExLCEwLCExLCEwLCExKSxzcyhsKE9lKHR0KGUuZSksNCksMTkpLGUuYixudWxsLCRHLDAsLTEsY3MsITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5lKSw1KSwxOSksZS5kLGwoT2UodHQoZS5kKSwzKSwxOSksR2ZlLDAsMSxjcywhMSwhMSwhMCwhMSwhMSwhMSwhMSksc3MobChPZSh0dChlLmUpLDYpLDE5KSxlLmMsbnVsbCxkU2UsMCwxLGNzLCExLCExLCEwLCExLCEwLCExLCExKSxzcyhsKE9lKHR0KGUuZSksNyksMTkpLGUuYyxudWxsLGdTZSwwLDEsY3MsITEsITEsITAsITEsITAsITEsITEpLHNzKGwoT2UodHQoZS5lKSw4KSwxOSksZS5lLGwoT2UodHQoZS5lKSw5KSwxOSkscFNlLDAsLTEsY3MsITEsITEsITAsITEsITAsITEsITEpLHNzKGwoT2UodHQoZS5lKSw5KSwxOSksZS5lLGwoT2UodHQoZS5lKSw4KSwxOSksYlNlLDAsLTEsY3MsITEsITEsITAsITEsITAsITEsITEpLE9zKGwoT2UodHQoZS5lKSwxMCksMzUpLGUud2IuXyxiNHQsbnVsbCwwLDEsY3MsITEsITEsITAsITEsITAsITEpLFY9SjUoZS5lLG51bGwsInNldFN0YXJ0TG9jYXRpb24iKSxhYyhWLGUud2IudCwieCIpLGFjKFYsZS53Yi50LCJ5IiksVj1KNShlLmUsbnVsbCwic2V0RW5kTG9jYXRpb24iKSxhYyhWLGUud2IudCwieCIpLGFjKFYsZS53Yi50LCJ5IiksemMoZS5rLHV2LCJFbGtQcm9wZXJ0eVRvVmFsdWVNYXBFbnRyeSIsITEsITEsITEpLEU9S2coZS5vKSxDPSh3PSh0PW5ldyBRdix0KSx3KSxxcigoIUUuZCYmKEUuZD1uZXcgWXMoV28sRSwxKSksRS5kKSxDKSxnMnQobChPZSh0dChlLmspLDApLDM1KSxFLCJrZXkiLHV2LCExLCExLCEwLCExKSxPcyhsKE9lKHR0KGUuayksMSksMzUpLGUucyxUTCxudWxsLDAsMSx1diwhMSwhMSwhMCwhMSwhMCwhMSksRWkoZS5vLENnZSwiSVByb3BlcnR5IiwhMCksRWkoZS5zLHdhLCJQcm9wZXJ0eVZhbHVlIiwhMCksdDhlKGUseFQpKX1mdW5jdGlvbiBDd3QoKXtDd3Q9VSx5ZT1XZShBbCxDNiwyOCxJbywxNSwxKSx5ZVs5XT0zNSx5ZVsxMF09MTkseWVbMTNdPTE5LHllWzMyXT01MSx5ZVszM109NDkseWVbMzRdPTMzLEhlKHllLDM1LDM4LDQ5KSx5ZVszOF09MSxIZSh5ZSwzOSw0NSw0OSksSGUoeWUsNDUsNDcsLTcxKSx5ZVs0N109NDksSGUoeWUsNDgsNTgsLTcxKSx5ZVs1OF09NjEseWVbNTldPTQ5LHllWzYwXT0xLHllWzYxXT00OSx5ZVs2Ml09MzMsSGUoeWUsNjMsNjUsNDkpLEhlKHllLDY1LDkxLC0zKSxIZSh5ZSw5MSw5MywzMykseWVbOTNdPTEseWVbOTRdPTMzLHllWzk1XT0tMyx5ZVs5Nl09MzMsSGUoeWUsOTcsMTIzLC0zKSxIZSh5ZSwxMjMsMTgzLDMzKSx5ZVsxODNdPS04NyxIZSh5ZSwxODQsMTkyLDMzKSxIZSh5ZSwxOTIsMjE1LC0xOSkseWVbMjE1XT0zMyxIZSh5ZSwyMTYsMjQ3LC0xOSkseWVbMjQ3XT0zMyxIZSh5ZSwyNDgsMzA2LC0xOSksSGUoeWUsMzA2LDMwOCwzMyksSGUoeWUsMzA4LDMxOSwtMTkpLEhlKHllLDMxOSwzMjEsMzMpLEhlKHllLDMyMSwzMjksLTE5KSx5ZVszMjldPTMzLEhlKHllLDMzMCwzODMsLTE5KSx5ZVszODNdPTMzLEhlKHllLDM4NCw0NTIsLTE5KSxIZSh5ZSw0NTIsNDYxLDMzKSxIZSh5ZSw0NjEsNDk3LC0xOSksSGUoeWUsNDk3LDUwMCwzMyksSGUoeWUsNTAwLDUwMiwtMTkpLEhlKHllLDUwMiw1MDYsMzMpLEhlKHllLDUwNiw1MzYsLTE5KSxIZSh5ZSw1MzYsNTkyLDMzKSxIZSh5ZSw1OTIsNjgxLC0xOSksSGUoeWUsNjgxLDY5OSwzMyksSGUoeWUsNjk5LDcwNiwtMTkpLEhlKHllLDcwNiw3MjAsMzMpLEhlKHllLDcyMCw3MjIsLTg3KSxIZSh5ZSw3MjIsNzY4LDMzKSxIZSh5ZSw3NjgsODM4LC04NyksSGUoeWUsODM4LDg2NCwzMyksSGUoeWUsODY0LDg2NiwtODcpLEhlKHllLDg2Niw5MDIsMzMpLHllWzkwMl09LTE5LHllWzkwM109LTg3LEhlKHllLDkwNCw5MDcsLTE5KSx5ZVs5MDddPTMzLHllWzkwOF09LTE5LHllWzkwOV09MzMsSGUoeWUsOTEwLDkzMCwtMTkpLHllWzkzMF09MzMsSGUoeWUsOTMxLDk3NSwtMTkpLHllWzk3NV09MzMsSGUoeWUsOTc2LDk4MywtMTkpLEhlKHllLDk4Myw5ODYsMzMpLHllWzk4Nl09LTE5LHllWzk4N109MzMseWVbOTg4XT0tMTkseWVbOTg5XT0zMyx5ZVs5OTBdPS0xOSx5ZVs5OTFdPTMzLHllWzk5Ml09LTE5LHllWzk5M109MzMsSGUoeWUsOTk0LDEwMTIsLTE5KSxIZSh5ZSwxMDEyLDEwMjUsMzMpLEhlKHllLDEwMjUsMTAzNywtMTkpLHllWzEwMzddPTMzLEhlKHllLDEwMzgsMTEwNCwtMTkpLHllWzExMDRdPTMzLEhlKHllLDExMDUsMTExNywtMTkpLHllWzExMTddPTMzLEhlKHllLDExMTgsMTE1NCwtMTkpLHllWzExNTRdPTMzLEhlKHllLDExNTUsMTE1OSwtODcpLEhlKHllLDExNTksMTE2OCwzMyksSGUoeWUsMTE2OCwxMjIxLC0xOSksSGUoeWUsMTIyMSwxMjIzLDMzKSxIZSh5ZSwxMjIzLDEyMjUsLTE5KSxIZSh5ZSwxMjI1LDEyMjcsMzMpLEhlKHllLDEyMjcsMTIyOSwtMTkpLEhlKHllLDEyMjksMTIzMiwzMyksSGUoeWUsMTIzMiwxMjYwLC0xOSksSGUoeWUsMTI2MCwxMjYyLDMzKSxIZSh5ZSwxMjYyLDEyNzAsLTE5KSxIZSh5ZSwxMjcwLDEyNzIsMzMpLEhlKHllLDEyNzIsMTI3NCwtMTkpLEhlKHllLDEyNzQsMTMyOSwzMyksSGUoeWUsMTMyOSwxMzY3LC0xOSksSGUoeWUsMTM2NywxMzY5LDMzKSx5ZVsxMzY5XT0tMTksSGUoeWUsMTM3MCwxMzc3LDMzKSxIZSh5ZSwxMzc3LDE0MTUsLTE5KSxIZSh5ZSwxNDE1LDE0MjUsMzMpLEhlKHllLDE0MjUsMTQ0MiwtODcpLHllWzE0NDJdPTMzLEhlKHllLDE0NDMsMTQ2NiwtODcpLHllWzE0NjZdPTMzLEhlKHllLDE0NjcsMTQ3MCwtODcpLHllWzE0NzBdPTMzLHllWzE0NzFdPS04Nyx5ZVsxNDcyXT0zMyxIZSh5ZSwxNDczLDE0NzUsLTg3KSx5ZVsxNDc1XT0zMyx5ZVsxNDc2XT0tODcsSGUoeWUsMTQ3NywxNDg4LDMzKSxIZSh5ZSwxNDg4LDE1MTUsLTE5KSxIZSh5ZSwxNTE1LDE1MjAsMzMpLEhlKHllLDE1MjAsMTUyMywtMTkpLEhlKHllLDE1MjMsMTU2OSwzMyksSGUoeWUsMTU2OSwxNTk1LC0xOSksSGUoeWUsMTU5NSwxNjAwLDMzKSx5ZVsxNjAwXT0tODcsSGUoeWUsMTYwMSwxNjExLC0xOSksSGUoeWUsMTYxMSwxNjE5LC04NyksSGUoeWUsMTYxOSwxNjMyLDMzKSxIZSh5ZSwxNjMyLDE2NDIsLTg3KSxIZSh5ZSwxNjQyLDE2NDgsMzMpLHllWzE2NDhdPS04NyxIZSh5ZSwxNjQ5LDE3MjAsLTE5KSxIZSh5ZSwxNzIwLDE3MjIsMzMpLEhlKHllLDE3MjIsMTcyNywtMTkpLHllWzE3MjddPTMzLEhlKHllLDE3MjgsMTc0MywtMTkpLHllWzE3NDNdPTMzLEhlKHllLDE3NDQsMTc0OCwtMTkpLHllWzE3NDhdPTMzLHllWzE3NDldPS0xOSxIZSh5ZSwxNzUwLDE3NjUsLTg3KSxIZSh5ZSwxNzY1LDE3NjcsLTE5KSxIZSh5ZSwxNzY3LDE3NjksLTg3KSx5ZVsxNzY5XT0zMyxIZSh5ZSwxNzcwLDE3NzQsLTg3KSxIZSh5ZSwxNzc0LDE3NzYsMzMpLEhlKHllLDE3NzYsMTc4NiwtODcpLEhlKHllLDE3ODYsMjMwNSwzMyksSGUoeWUsMjMwNSwyMzA4LC04NykseWVbMjMwOF09MzMsSGUoeWUsMjMwOSwyMzYyLC0xOSksSGUoeWUsMjM2MiwyMzY0LDMzKSx5ZVsyMzY0XT0tODcseWVbMjM2NV09LTE5LEhlKHllLDIzNjYsMjM4MiwtODcpLEhlKHllLDIzODIsMjM4NSwzMyksSGUoeWUsMjM4NSwyMzg5LC04NyksSGUoeWUsMjM4OSwyMzkyLDMzKSxIZSh5ZSwyMzkyLDI0MDIsLTE5KSxIZSh5ZSwyNDAyLDI0MDQsLTg3KSxIZSh5ZSwyNDA0LDI0MDYsMzMpLEhlKHllLDI0MDYsMjQxNiwtODcpLEhlKHllLDI0MTYsMjQzMywzMyksSGUoeWUsMjQzMywyNDM2LC04NykseWVbMjQzNl09MzMsSGUoeWUsMjQzNywyNDQ1LC0xOSksSGUoeWUsMjQ0NSwyNDQ3LDMzKSxIZSh5ZSwyNDQ3LDI0NDksLTE5KSxIZSh5ZSwyNDQ5LDI0NTEsMzMpLEhlKHllLDI0NTEsMjQ3MywtMTkpLHllWzI0NzNdPTMzLEhlKHllLDI0NzQsMjQ4MSwtMTkpLHllWzI0ODFdPTMzLHllWzI0ODJdPS0xOSxIZSh5ZSwyNDgzLDI0ODYsMzMpLEhlKHllLDI0ODYsMjQ5MCwtMTkpLEhlKHllLDI0OTAsMjQ5MiwzMykseWVbMjQ5Ml09LTg3LHllWzI0OTNdPTMzLEhlKHllLDI0OTQsMjUwMSwtODcpLEhlKHllLDI1MDEsMjUwMywzMyksSGUoeWUsMjUwMywyNTA1LC04NyksSGUoeWUsMjUwNSwyNTA3LDMzKSxIZSh5ZSwyNTA3LDI1MTAsLTg3KSxIZSh5ZSwyNTEwLDI1MTksMzMpLHllWzI1MTldPS04NyxIZSh5ZSwyNTIwLDI1MjQsMzMpLEhlKHllLDI1MjQsMjUyNiwtMTkpLHllWzI1MjZdPTMzLEhlKHllLDI1MjcsMjUzMCwtMTkpLEhlKHllLDI1MzAsMjUzMiwtODcpLEhlKHllLDI1MzIsMjUzNCwzMyksSGUoeWUsMjUzNCwyNTQ0LC04NyksSGUoeWUsMjU0NCwyNTQ2LC0xOSksSGUoeWUsMjU0NiwyNTYyLDMzKSx5ZVsyNTYyXT0tODcsSGUoeWUsMjU2MywyNTY1LDMzKSxIZSh5ZSwyNTY1LDI1NzEsLTE5KSxIZSh5ZSwyNTcxLDI1NzUsMzMpLEhlKHllLDI1NzUsMjU3NywtMTkpLEhlKHllLDI1NzcsMjU3OSwzMyksSGUoeWUsMjU3OSwyNjAxLC0xOSkseWVbMjYwMV09MzMsSGUoeWUsMjYwMiwyNjA5LC0xOSkseWVbMjYwOV09MzMsSGUoeWUsMjYxMCwyNjEyLC0xOSkseWVbMjYxMl09MzMsSGUoeWUsMjYxMywyNjE1LC0xOSkseWVbMjYxNV09MzMsSGUoeWUsMjYxNiwyNjE4LC0xOSksSGUoeWUsMjYxOCwyNjIwLDMzKSx5ZVsyNjIwXT0tODcseWVbMjYyMV09MzMsSGUoeWUsMjYyMiwyNjI3LC04NyksSGUoeWUsMjYyNywyNjMxLDMzKSxIZSh5ZSwyNjMxLDI2MzMsLTg3KSxIZSh5ZSwyNjMzLDI2MzUsMzMpLEhlKHllLDI2MzUsMjYzOCwtODcpLEhlKHllLDI2MzgsMjY0OSwzMyksSGUoeWUsMjY0OSwyNjUzLC0xOSkseWVbMjY1M109MzMseWVbMjY1NF09LTE5LEhlKHllLDI2NTUsMjY2MiwzMyksSGUoeWUsMjY2MiwyNjc0LC04NyksSGUoeWUsMjY3NCwyNjc3LC0xOSksSGUoeWUsMjY3NywyNjg5LDMzKSxIZSh5ZSwyNjg5LDI2OTIsLTg3KSx5ZVsyNjkyXT0zMyxIZSh5ZSwyNjkzLDI3MDAsLTE5KSx5ZVsyNzAwXT0zMyx5ZVsyNzAxXT0tMTkseWVbMjcwMl09MzMsSGUoeWUsMjcwMywyNzA2LC0xOSkseWVbMjcwNl09MzMsSGUoeWUsMjcwNywyNzI5LC0xOSkseWVbMjcyOV09MzMsSGUoeWUsMjczMCwyNzM3LC0xOSkseWVbMjczN109MzMsSGUoeWUsMjczOCwyNzQwLC0xOSkseWVbMjc0MF09MzMsSGUoeWUsMjc0MSwyNzQ2LC0xOSksSGUoeWUsMjc0NiwyNzQ4LDMzKSx5ZVsyNzQ4XT0tODcseWVbMjc0OV09LTE5LEhlKHllLDI3NTAsMjc1OCwtODcpLHllWzI3NThdPTMzLEhlKHllLDI3NTksMjc2MiwtODcpLHllWzI3NjJdPTMzLEhlKHllLDI3NjMsMjc2NiwtODcpLEhlKHllLDI3NjYsMjc4NCwzMykseWVbMjc4NF09LTE5LEhlKHllLDI3ODUsMjc5MCwzMyksSGUoeWUsMjc5MCwyODAwLC04NyksSGUoeWUsMjgwMCwyODE3LDMzKSxIZSh5ZSwyODE3LDI4MjAsLTg3KSx5ZVsyODIwXT0zMyxIZSh5ZSwyODIxLDI4MjksLTE5KSxIZSh5ZSwyODI5LDI4MzEsMzMpLEhlKHllLDI4MzEsMjgzMywtMTkpLEhlKHllLDI4MzMsMjgzNSwzMyksSGUoeWUsMjgzNSwyODU3LC0xOSkseWVbMjg1N109MzMsSGUoeWUsMjg1OCwyODY1LC0xOSkseWVbMjg2NV09MzMsSGUoeWUsMjg2NiwyODY4LC0xOSksSGUoeWUsMjg2OCwyODcwLDMzKSxIZSh5ZSwyODcwLDI4NzQsLTE5KSxIZSh5ZSwyODc0LDI4NzYsMzMpLHllWzI4NzZdPS04Nyx5ZVsyODc3XT0tMTksSGUoeWUsMjg3OCwyODg0LC04NyksSGUoeWUsMjg4NCwyODg3LDMzKSxIZSh5ZSwyODg3LDI4ODksLTg3KSxIZSh5ZSwyODg5LDI4OTEsMzMpLEhlKHllLDI4OTEsMjg5NCwtODcpLEhlKHllLDI4OTQsMjkwMiwzMyksSGUoeWUsMjkwMiwyOTA0LC04NyksSGUoeWUsMjkwNCwyOTA4LDMzKSxIZSh5ZSwyOTA4LDI5MTAsLTE5KSx5ZVsyOTEwXT0zMyxIZSh5ZSwyOTExLDI5MTQsLTE5KSxIZSh5ZSwyOTE0LDI5MTgsMzMpLEhlKHllLDI5MTgsMjkyOCwtODcpLEhlKHllLDI5MjgsMjk0NiwzMyksSGUoeWUsMjk0NiwyOTQ4LC04NykseWVbMjk0OF09MzMsSGUoeWUsMjk0OSwyOTU1LC0xOSksSGUoeWUsMjk1NSwyOTU4LDMzKSxIZSh5ZSwyOTU4LDI5NjEsLTE5KSx5ZVsyOTYxXT0zMyxIZSh5ZSwyOTYyLDI5NjYsLTE5KSxIZSh5ZSwyOTY2LDI5NjksMzMpLEhlKHllLDI5NjksMjk3MSwtMTkpLHllWzI5NzFdPTMzLHllWzI5NzJdPS0xOSx5ZVsyOTczXT0zMyxIZSh5ZSwyOTc0LDI5NzYsLTE5KSxIZSh5ZSwyOTc2LDI5NzksMzMpLEhlKHllLDI5NzksMjk4MSwtMTkpLEhlKHllLDI5ODEsMjk4NCwzMyksSGUoeWUsMjk4NCwyOTg3LC0xOSksSGUoeWUsMjk4NywyOTkwLDMzKSxIZSh5ZSwyOTkwLDI5OTgsLTE5KSx5ZVsyOTk4XT0zMyxIZSh5ZSwyOTk5LDMwMDIsLTE5KSxIZSh5ZSwzMDAyLDMwMDYsMzMpLEhlKHllLDMwMDYsMzAxMSwtODcpLEhlKHllLDMwMTEsMzAxNCwzMyksSGUoeWUsMzAxNCwzMDE3LC04NykseWVbMzAxN109MzMsSGUoeWUsMzAxOCwzMDIyLC04NyksSGUoeWUsMzAyMiwzMDMxLDMzKSx5ZVszMDMxXT0tODcsSGUoeWUsMzAzMiwzMDQ3LDMzKSxIZSh5ZSwzMDQ3LDMwNTYsLTg3KSxIZSh5ZSwzMDU2LDMwNzMsMzMpLEhlKHllLDMwNzMsMzA3NiwtODcpLHllWzMwNzZdPTMzLEhlKHllLDMwNzcsMzA4NSwtMTkpLHllWzMwODVdPTMzLEhlKHllLDMwODYsMzA4OSwtMTkpLHllWzMwODldPTMzLEhlKHllLDMwOTAsMzExMywtMTkpLHllWzMxMTNdPTMzLEhlKHllLDMxMTQsMzEyNCwtMTkpLHllWzMxMjRdPTMzLEhlKHllLDMxMjUsMzEzMCwtMTkpLEhlKHllLDMxMzAsMzEzNCwzMyksSGUoeWUsMzEzNCwzMTQxLC04NykseWVbMzE0MV09MzMsSGUoeWUsMzE0MiwzMTQ1LC04NykseWVbMzE0NV09MzMsSGUoeWUsMzE0NiwzMTUwLC04NyksSGUoeWUsMzE1MCwzMTU3LDMzKSxIZSh5ZSwzMTU3LDMxNTksLTg3KSxIZSh5ZSwzMTU5LDMxNjgsMzMpLEhlKHllLDMxNjgsMzE3MCwtMTkpLEhlKHllLDMxNzAsMzE3NCwzMyksSGUoeWUsMzE3NCwzMTg0LC04NyksSGUoeWUsMzE4NCwzMjAyLDMzKSxIZSh5ZSwzMjAyLDMyMDQsLTg3KSx5ZVszMjA0XT0zMyxIZSh5ZSwzMjA1LDMyMTMsLTE5KSx5ZVszMjEzXT0zMyxIZSh5ZSwzMjE0LDMyMTcsLTE5KSx5ZVszMjE3XT0zMyxIZSh5ZSwzMjE4LDMyNDEsLTE5KSx5ZVszMjQxXT0zMyxIZSh5ZSwzMjQyLDMyNTIsLTE5KSx5ZVszMjUyXT0zMyxIZSh5ZSwzMjUzLDMyNTgsLTE5KSxIZSh5ZSwzMjU4LDMyNjIsMzMpLEhlKHllLDMyNjIsMzI2OSwtODcpLHllWzMyNjldPTMzLEhlKHllLDMyNzAsMzI3MywtODcpLHllWzMyNzNdPTMzLEhlKHllLDMyNzQsMzI3OCwtODcpLEhlKHllLDMyNzgsMzI4NSwzMyksSGUoeWUsMzI4NSwzMjg3LC04NyksSGUoeWUsMzI4NywzMjk0LDMzKSx5ZVszMjk0XT0tMTkseWVbMzI5NV09MzMsSGUoeWUsMzI5NiwzMjk4LC0xOSksSGUoeWUsMzI5OCwzMzAyLDMzKSxIZSh5ZSwzMzAyLDMzMTIsLTg3KSxIZSh5ZSwzMzEyLDMzMzAsMzMpLEhlKHllLDMzMzAsMzMzMiwtODcpLHllWzMzMzJdPTMzLEhlKHllLDMzMzMsMzM0MSwtMTkpLHllWzMzNDFdPTMzLEhlKHllLDMzNDIsMzM0NSwtMTkpLHllWzMzNDVdPTMzLEhlKHllLDMzNDYsMzM2OSwtMTkpLHllWzMzNjldPTMzLEhlKHllLDMzNzAsMzM4NiwtMTkpLEhlKHllLDMzODYsMzM5MCwzMyksSGUoeWUsMzM5MCwzMzk2LC04NyksSGUoeWUsMzM5NiwzMzk4LDMzKSxIZSh5ZSwzMzk4LDM0MDEsLTg3KSx5ZVszNDAxXT0zMyxIZSh5ZSwzNDAyLDM0MDYsLTg3KSxIZSh5ZSwzNDA2LDM0MTUsMzMpLHllWzM0MTVdPS04NyxIZSh5ZSwzNDE2LDM0MjQsMzMpLEhlKHllLDM0MjQsMzQyNiwtMTkpLEhlKHllLDM0MjYsMzQzMCwzMyksSGUoeWUsMzQzMCwzNDQwLC04NyksSGUoeWUsMzQ0MCwzNTg1LDMzKSxIZSh5ZSwzNTg1LDM2MzEsLTE5KSx5ZVszNjMxXT0zMyx5ZVszNjMyXT0tMTkseWVbMzYzM109LTg3LEhlKHllLDM2MzQsMzYzNiwtMTkpLEhlKHllLDM2MzYsMzY0MywtODcpLEhlKHllLDM2NDMsMzY0OCwzMyksSGUoeWUsMzY0OCwzNjU0LC0xOSksSGUoeWUsMzY1NCwzNjYzLC04NykseWVbMzY2M109MzMsSGUoeWUsMzY2NCwzNjc0LC04NyksSGUoeWUsMzY3NCwzNzEzLDMzKSxIZSh5ZSwzNzEzLDM3MTUsLTE5KSx5ZVszNzE1XT0zMyx5ZVszNzE2XT0tMTksSGUoeWUsMzcxNywzNzE5LDMzKSxIZSh5ZSwzNzE5LDM3MjEsLTE5KSx5ZVszNzIxXT0zMyx5ZVszNzIyXT0tMTksSGUoeWUsMzcyMywzNzI1LDMzKSx5ZVszNzI1XT0tMTksSGUoeWUsMzcyNiwzNzMyLDMzKSxIZSh5ZSwzNzMyLDM3MzYsLTE5KSx5ZVszNzM2XT0zMyxIZSh5ZSwzNzM3LDM3NDQsLTE5KSx5ZVszNzQ0XT0zMyxIZSh5ZSwzNzQ1LDM3NDgsLTE5KSx5ZVszNzQ4XT0zMyx5ZVszNzQ5XT0tMTkseWVbMzc1MF09MzMseWVbMzc1MV09LTE5LEhlKHllLDM3NTIsMzc1NCwzMyksSGUoeWUsMzc1NCwzNzU2LC0xOSkseWVbMzc1Nl09MzMsSGUoeWUsMzc1NywzNzU5LC0xOSkseWVbMzc1OV09MzMseWVbMzc2MF09LTE5LHllWzM3NjFdPS04NyxIZSh5ZSwzNzYyLDM3NjQsLTE5KSxIZSh5ZSwzNzY0LDM3NzAsLTg3KSx5ZVszNzcwXT0zMyxIZSh5ZSwzNzcxLDM3NzMsLTg3KSx5ZVszNzczXT0tMTksSGUoeWUsMzc3NCwzNzc2LDMzKSxIZSh5ZSwzNzc2LDM3ODEsLTE5KSx5ZVszNzgxXT0zMyx5ZVszNzgyXT0tODcseWVbMzc4M109MzMsSGUoeWUsMzc4NCwzNzkwLC04NyksSGUoeWUsMzc5MCwzNzkyLDMzKSxIZSh5ZSwzNzkyLDM4MDIsLTg3KSxIZSh5ZSwzODAyLDM4NjQsMzMpLEhlKHllLDM4NjQsMzg2NiwtODcpLEhlKHllLDM4NjYsMzg3MiwzMyksSGUoeWUsMzg3MiwzODgyLC04NyksSGUoeWUsMzg4MiwzODkzLDMzKSx5ZVszODkzXT0tODcseWVbMzg5NF09MzMseWVbMzg5NV09LTg3LHllWzM4OTZdPTMzLHllWzM4OTddPS04NyxIZSh5ZSwzODk4LDM5MDIsMzMpLEhlKHllLDM5MDIsMzkwNCwtODcpLEhlKHllLDM5MDQsMzkxMiwtMTkpLHllWzM5MTJdPTMzLEhlKHllLDM5MTMsMzk0NiwtMTkpLEhlKHllLDM5NDYsMzk1MywzMyksSGUoeWUsMzk1MywzOTczLC04NykseWVbMzk3M109MzMsSGUoeWUsMzk3NCwzOTgwLC04NyksSGUoeWUsMzk4MCwzOTg0LDMzKSxIZSh5ZSwzOTg0LDM5OTAsLTg3KSx5ZVszOTkwXT0zMyx5ZVszOTkxXT0tODcseWVbMzk5Ml09MzMsSGUoeWUsMzk5Myw0MDE0LC04NyksSGUoeWUsNDAxNCw0MDE3LDMzKSxIZSh5ZSw0MDE3LDQwMjQsLTg3KSx5ZVs0MDI0XT0zMyx5ZVs0MDI1XT0tODcsSGUoeWUsNDAyNiw0MjU2LDMzKSxIZSh5ZSw0MjU2LDQyOTQsLTE5KSxIZSh5ZSw0Mjk0LDQzMDQsMzMpLEhlKHllLDQzMDQsNDM0MywtMTkpLEhlKHllLDQzNDMsNDM1MiwzMykseWVbNDM1Ml09LTE5LHllWzQzNTNdPTMzLEhlKHllLDQzNTQsNDM1NiwtMTkpLHllWzQzNTZdPTMzLEhlKHllLDQzNTcsNDM2MCwtMTkpLHllWzQzNjBdPTMzLHllWzQzNjFdPS0xOSx5ZVs0MzYyXT0zMyxIZSh5ZSw0MzYzLDQzNjUsLTE5KSx5ZVs0MzY1XT0zMyxIZSh5ZSw0MzY2LDQzNzEsLTE5KSxIZSh5ZSw0MzcxLDQ0MTIsMzMpLHllWzQ0MTJdPS0xOSx5ZVs0NDEzXT0zMyx5ZVs0NDE0XT0tMTkseWVbNDQxNV09MzMseWVbNDQxNl09LTE5LEhlKHllLDQ0MTcsNDQyOCwzMykseWVbNDQyOF09LTE5LHllWzQ0MjldPTMzLHllWzQ0MzBdPS0xOSx5ZVs0NDMxXT0zMyx5ZVs0NDMyXT0tMTksSGUoeWUsNDQzMyw0NDM2LDMzKSxIZSh5ZSw0NDM2LDQ0MzgsLTE5KSxIZSh5ZSw0NDM4LDQ0NDEsMzMpLHllWzQ0NDFdPS0xOSxIZSh5ZSw0NDQyLDQ0NDcsMzMpLEhlKHllLDQ0NDcsNDQ1MCwtMTkpLHllWzQ0NTBdPTMzLHllWzQ0NTFdPS0xOSx5ZVs0NDUyXT0zMyx5ZVs0NDUzXT0tMTkseWVbNDQ1NF09MzMseWVbNDQ1NV09LTE5LHllWzQ0NTZdPTMzLHllWzQ0NTddPS0xOSxIZSh5ZSw0NDU4LDQ0NjEsMzMpLEhlKHllLDQ0NjEsNDQ2MywtMTkpLEhlKHllLDQ0NjMsNDQ2NiwzMyksSGUoeWUsNDQ2Niw0NDY4LC0xOSkseWVbNDQ2OF09MzMseWVbNDQ2OV09LTE5LEhlKHllLDQ0NzAsNDUxMCwzMykseWVbNDUxMF09LTE5LEhlKHllLDQ1MTEsNDUyMCwzMykseWVbNDUyMF09LTE5LEhlKHllLDQ1MjEsNDUyMywzMykseWVbNDUyM109LTE5LEhlKHllLDQ1MjQsNDUyNiwzMyksSGUoeWUsNDUyNiw0NTI4LC0xOSksSGUoeWUsNDUyOCw0NTM1LDMzKSxIZSh5ZSw0NTM1LDQ1MzcsLTE5KSx5ZVs0NTM3XT0zMyx5ZVs0NTM4XT0tMTkseWVbNDUzOV09MzMsSGUoeWUsNDU0MCw0NTQ3LC0xOSksSGUoeWUsNDU0Nyw0NTg3LDMzKSx5ZVs0NTg3XT0tMTksSGUoeWUsNDU4OCw0NTkyLDMzKSx5ZVs0NTkyXT0tMTksSGUoeWUsNDU5Myw0NjAxLDMzKSx5ZVs0NjAxXT0tMTksSGUoeWUsNDYwMiw3NjgwLDMzKSxIZSh5ZSw3NjgwLDc4MzYsLTE5KSxIZSh5ZSw3ODM2LDc4NDAsMzMpLEhlKHllLDc4NDAsNzkzMCwtMTkpLEhlKHllLDc5MzAsNzkzNiwzMyksSGUoeWUsNzkzNiw3OTU4LC0xOSksSGUoeWUsNzk1OCw3OTYwLDMzKSxIZSh5ZSw3OTYwLDc5NjYsLTE5KSxIZSh5ZSw3OTY2LDc5NjgsMzMpLEhlKHllLDc5NjgsODAwNiwtMTkpLEhlKHllLDgwMDYsODAwOCwzMyksSGUoeWUsODAwOCw4MDE0LC0xOSksSGUoeWUsODAxNCw4MDE2LDMzKSxIZSh5ZSw4MDE2LDgwMjQsLTE5KSx5ZVs4MDI0XT0zMyx5ZVs4MDI1XT0tMTkseWVbODAyNl09MzMseWVbODAyN109LTE5LHllWzgwMjhdPTMzLHllWzgwMjldPS0xOSx5ZVs4MDMwXT0zMyxIZSh5ZSw4MDMxLDgwNjIsLTE5KSxIZSh5ZSw4MDYyLDgwNjQsMzMpLEhlKHllLDgwNjQsODExNywtMTkpLHllWzgxMTddPTMzLEhlKHllLDgxMTgsODEyNSwtMTkpLHllWzgxMjVdPTMzLHllWzgxMjZdPS0xOSxIZSh5ZSw4MTI3LDgxMzAsMzMpLEhlKHllLDgxMzAsODEzMywtMTkpLHllWzgxMzNdPTMzLEhlKHllLDgxMzQsODE0MSwtMTkpLEhlKHllLDgxNDEsODE0NCwzMyksSGUoeWUsODE0NCw4MTQ4LC0xOSksSGUoeWUsODE0OCw4MTUwLDMzKSxIZSh5ZSw4MTUwLDgxNTYsLTE5KSxIZSh5ZSw4MTU2LDgxNjAsMzMpLEhlKHllLDgxNjAsODE3MywtMTkpLEhlKHllLDgxNzMsODE3OCwzMyksSGUoeWUsODE3OCw4MTgxLC0xOSkseWVbODE4MV09MzMsSGUoeWUsODE4Miw4MTg5LC0xOSksSGUoeWUsODE4OSw4NDAwLDMzKSxIZSh5ZSw4NDAwLDg0MTMsLTg3KSxIZSh5ZSw4NDEzLDg0MTcsMzMpLHllWzg0MTddPS04NyxIZSh5ZSw4NDE4LDg0ODYsMzMpLHllWzg0ODZdPS0xOSxIZSh5ZSw4NDg3LDg0OTAsMzMpLEhlKHllLDg0OTAsODQ5MiwtMTkpLEhlKHllLDg0OTIsODQ5NCwzMykseWVbODQ5NF09LTE5LEhlKHllLDg0OTUsODU3NiwzMyksSGUoeWUsODU3Niw4NTc5LC0xOSksSGUoeWUsODU3OSwxMjI5MywzMykseWVbMTIyOTNdPS04Nyx5ZVsxMjI5NF09MzMseWVbMTIyOTVdPS0xOSxIZSh5ZSwxMjI5NiwxMjMyMSwzMyksSGUoeWUsMTIzMjEsMTIzMzAsLTE5KSxIZSh5ZSwxMjMzMCwxMjMzNiwtODcpLHllWzEyMzM2XT0zMyxIZSh5ZSwxMjMzNywxMjM0MiwtODcpLEhlKHllLDEyMzQyLDEyMzUzLDMzKSxIZSh5ZSwxMjM1MywxMjQzNywtMTkpLEhlKHllLDEyNDM3LDEyNDQxLDMzKSxIZSh5ZSwxMjQ0MSwxMjQ0MywtODcpLEhlKHllLDEyNDQzLDEyNDQ1LDMzKSxIZSh5ZSwxMjQ0NSwxMjQ0NywtODcpLEhlKHllLDEyNDQ3LDEyNDQ5LDMzKSxIZSh5ZSwxMjQ0OSwxMjUzOSwtMTkpLHllWzEyNTM5XT0zMyxIZSh5ZSwxMjU0MCwxMjU0MywtODcpLEhlKHllLDEyNTQzLDEyNTQ5LDMzKSxIZSh5ZSwxMjU0OSwxMjU4OSwtMTkpLEhlKHllLDEyNTg5LDE5OTY4LDMzKSxIZSh5ZSwxOTk2OCw0MDg3MCwtMTkpLEhlKHllLDQwODcwLDQ0MDMyLDMzKSxIZSh5ZSw0NDAzMiw1NTIwNCwtMTkpLEhlKHllLDU1MjA0LEFQLDMzKSxIZSh5ZSw1NzM0NCw2NTUzNCwzMyl9ZnVuY3Rpb24gaU9uKGUpe3ZhciB0LG4scixhLG8sZixnO2UuaGJ8fChlLmhiPSEwLEZ1KGUsImVjb3JlIiksQ1YoZSwiZWNvcmUiKSxTVihlLEZmKSxrTihlLmZiLCJFIiksa04oZS5MLCJUIiksa04oZS5QLCJLIiksa04oZS5QLCJWIiksa04oZS5jYiwiRSIpLHFyKGRjKGUuYiksZS5iYikscXIoZGMoZS5hKSxlLlEpLHFyKGRjKGUubyksZS5wKSxxcihkYyhlLnApLGUuUikscXIoZGMoZS5xKSxlLnApLHFyKGRjKGUudiksZS5xKSxxcihkYyhlLncpLGUuUikscXIoZGMoZS5CKSxlLlEpLHFyKGRjKGUuUiksZS5RKSxxcihkYyhlLlQpLGUuZWIpLHFyKGRjKGUuVSksZS5SKSxxcihkYyhlLlYpLGUuZWIpLHFyKGRjKGUuVyksZS5iYikscXIoZGMoZS5iYiksZS5lYikscXIoZGMoZS5lYiksZS5SKSxxcihkYyhlLmRiKSxlLlIpLHpjKGUuYixENCxhNXQsITEsITEsITApLE9zKGwoT2UodHQoZS5iKSwwKSwzNSksZS5lLCJpRCIsbnVsbCwwLDEsRDQsITEsITEsITAsITEsITAsITEpLHNzKGwoT2UodHQoZS5iKSwxKSwxOSksZS5xLG51bGwsImVBdHRyaWJ1dGVUeXBlIiwxLDEsRDQsITAsITAsITEsITEsITAsITEsITApLHpjKGUuYSxtaSxyNXQsITEsITEsITApLE9zKGwoT2UodHQoZS5hKSwwKSwzNSksZS5fLEhmZSxudWxsLDAsMSxtaSwhMSwhMSwhMCwhMSwhMCwhMSksc3MobChPZSh0dChlLmEpLDEpLDE5KSxlLmFiLG51bGwsImRldGFpbHMiLDAsLTEsbWksITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5hKSwyKSwxOSksZS5RLGwoT2UodHQoZS5RKSwwKSwxOSksImVNb2RlbEVsZW1lbnQiLDAsMSxtaSwhMCwhMSwhMCwhMSwhMSwhMSwhMSksc3MobChPZSh0dChlLmEpLDMpLDE5KSxlLlMsbnVsbCwiY29udGVudHMiLDAsLTEsbWksITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5hKSw0KSwxOSksZS5TLG51bGwsInJlZmVyZW5jZXMiLDAsLTEsbWksITEsITEsITAsITEsITAsITEsITEpLHpjKGUubyxWZiwiRUNsYXNzIiwhMSwhMSwhMCksT3MobChPZSh0dChlLm8pLDApLDM1KSxlLmUsImFic3RyYWN0IixudWxsLDAsMSxWZiwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLm8pLDEpLDM1KSxlLmUsImludGVyZmFjZSIsbnVsbCwwLDEsVmYsITEsITEsITAsITEsITAsITEpLHNzKGwoT2UodHQoZS5vKSwyKSwxOSksZS5vLG51bGwsImVTdXBlclR5cGVzIiwwLC0xLFZmLCExLCExLCEwLCExLCEwLCEwLCExKSxzcyhsKE9lKHR0KGUubyksMyksMTkpLGUuVCxsKE9lKHR0KGUuVCksMCksMTkpLCJlT3BlcmF0aW9ucyIsMCwtMSxWZiwhMSwhMSwhMCwhMCwhMSwhMSwhMSksc3MobChPZSh0dChlLm8pLDQpLDE5KSxlLmIsbnVsbCwiZUFsbEF0dHJpYnV0ZXMiLDAsLTEsVmYsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5vKSw1KSwxOSksZS5XLG51bGwsImVBbGxSZWZlcmVuY2VzIiwwLC0xLFZmLCEwLCEwLCExLCExLCEwLCExLCEwKSxzcyhsKE9lKHR0KGUubyksNiksMTkpLGUuVyxudWxsLCJlUmVmZXJlbmNlcyIsMCwtMSxWZiwhMCwhMCwhMSwhMSwhMCwhMSwhMCksc3MobChPZSh0dChlLm8pLDcpLDE5KSxlLmIsbnVsbCwiZUF0dHJpYnV0ZXMiLDAsLTEsVmYsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5vKSw4KSwxOSksZS5XLG51bGwsImVBbGxDb250YWlubWVudHMiLDAsLTEsVmYsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5vKSw5KSwxOSksZS5ULG51bGwsImVBbGxPcGVyYXRpb25zIiwwLC0xLFZmLCEwLCEwLCExLCExLCEwLCExLCEwKSxzcyhsKE9lKHR0KGUubyksMTApLDE5KSxlLmJiLG51bGwsImVBbGxTdHJ1Y3R1cmFsRmVhdHVyZXMiLDAsLTEsVmYsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5vKSwxMSksMTkpLGUubyxudWxsLCJlQWxsU3VwZXJUeXBlcyIsMCwtMSxWZiwhMCwhMCwhMSwhMSwhMCwhMSwhMCksc3MobChPZSh0dChlLm8pLDEyKSwxOSksZS5iLG51bGwsImVJREF0dHJpYnV0ZSIsMCwxLFZmLCEwLCEwLCExLCExLCExLCExLCEwKSxzcyhsKE9lKHR0KGUubyksMTMpLDE5KSxlLmJiLGwoT2UodHQoZS5iYiksNyksMTkpLCJlU3RydWN0dXJhbEZlYXR1cmVzIiwwLC0xLFZmLCExLCExLCEwLCEwLCExLCExLCExKSxzcyhsKE9lKHR0KGUubyksMTQpLDE5KSxlLkgsbnVsbCwiZUdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLFZmLCExLCExLCEwLCEwLCExLCEwLCExKSxzcyhsKE9lKHR0KGUubyksMTUpLDE5KSxlLkgsbnVsbCwiZUFsbEdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLFZmLCEwLCEwLCExLCExLCEwLCExLCEwKSxnPUpvKGwoT2UocWkoZS5vKSwwKSw2MiksZS5lLCJpc1N1cGVyVHlwZU9mIiksYWMoZyxlLm8sInNvbWVDbGFzcyIpLEpvKGwoT2UocWkoZS5vKSwxKSw2MiksZS5JLCJnZXRGZWF0dXJlQ291bnQiKSxnPUpvKGwoT2UocWkoZS5vKSwyKSw2MiksZS5iYix2NXQpLGFjKGcsZS5JLCJmZWF0dXJlSUQiKSxnPUpvKGwoT2UocWkoZS5vKSwzKSw2MiksZS5JLHc1dCksYWMoZyxlLmJiLElMKSxnPUpvKGwoT2UocWkoZS5vKSw0KSw2MiksZS5iYix2NXQpLGFjKGcsZS5fLCJmZWF0dXJlTmFtZSIpLEpvKGwoT2UocWkoZS5vKSw1KSw2MiksZS5JLCJnZXRPcGVyYXRpb25Db3VudCIpLGc9Sm8obChPZShxaShlLm8pLDYpLDYyKSxlLlQsImdldEVPcGVyYXRpb24iKSxhYyhnLGUuSSwib3BlcmF0aW9uSUQiKSxnPUpvKGwoT2UocWkoZS5vKSw3KSw2MiksZS5JLHk1dCksYWMoZyxlLlQsRFNlKSxnPUpvKGwoT2UocWkoZS5vKSw4KSw2MiksZS5ULCJnZXRPdmVycmlkZSIpLGFjKGcsZS5ULERTZSksZz1KbyhsKE9lKHFpKGUubyksOSksNjIpLGUuSCwiZ2V0RmVhdHVyZVR5cGUiKSxhYyhnLGUuYmIsSUwpLHpjKGUucCxsMSxvNXQsITAsITEsITApLE9zKGwoT2UodHQoZS5wKSwwKSwzNSksZS5fLCJpbnN0YW5jZUNsYXNzTmFtZSIsbnVsbCwwLDEsbDEsITEsITAsITAsITAsITAsITEpLHQ9S2coZS5MKSxuPXQ2ZSgpLHFyKCghdC5kJiYodC5kPW5ldyBZcyhXbyx0LDEpKSx0LmQpLG4pLGcydChsKE9lKHR0KGUucCksMSksMzUpLHQsImluc3RhbmNlQ2xhc3MiLGwxLCEwLCEwLCExLCEwKSxPcyhsKE9lKHR0KGUucCksMiksMzUpLGUuTSx4NXQsbnVsbCwwLDEsbDEsITAsITAsITEsITEsITAsITApLE9zKGwoT2UodHQoZS5wKSwzKSwzNSksZS5fLCJpbnN0YW5jZVR5cGVOYW1lIixudWxsLDAsMSxsMSwhMSwhMCwhMCwhMCwhMCwhMSksc3MobChPZSh0dChlLnApLDQpLDE5KSxlLlUsbChPZSh0dChlLlUpLDMpLDE5KSwiZVBhY2thZ2UiLDAsMSxsMSwhMCwhMSwhMSwhMSwhMCwhMSwhMSksc3MobChPZSh0dChlLnApLDUpLDE5KSxlLmRiLG51bGwsazV0LDAsLTEsbDEsITEsITEsITAsITAsITAsITEsITEpLGc9Sm8obChPZShxaShlLnApLDApLDYyKSxlLmUsRTV0KSxhYyhnLGUuTSx3UCksSm8obChPZShxaShlLnApLDEpLDYyKSxlLkksImdldENsYXNzaWZpZXJJRCIpLHpjKGUucSx0cGUsIkVEYXRhVHlwZSIsITEsITEsITApLE9zKGwoT2UodHQoZS5xKSwwKSwzNSksZS5lLCJzZXJpYWxpemFibGUiLHdULDAsMSx0cGUsITEsITEsITAsITEsITAsITEpLHpjKGUudixUWSwiRUVudW0iLCExLCExLCEwKSxzcyhsKE9lKHR0KGUudiksMCksMTkpLGUudyxsKE9lKHR0KGUudyksMyksMTkpLCJlTGl0ZXJhbHMiLDAsLTEsVFksITEsITEsITAsITAsITEsITEsITEpLGc9Sm8obChPZShxaShlLnYpLDApLDYyKSxlLncsVDV0KSxhYyhnLGUuXyxfaSksZz1KbyhsKE9lKHFpKGUudiksMSksNjIpLGUudyxUNXQpLGFjKGcsZS5JLFRMKSxnPUpvKGwoT2UocWkoZS52KSwyKSw2MiksZS53LCJnZXRFRW51bUxpdGVyYWxCeUxpdGVyYWwiKSxhYyhnLGUuXywibGl0ZXJhbCIpLHpjKGUudyx3cCxjNXQsITEsITEsITApLE9zKGwoT2UodHQoZS53KSwwKSwzNSksZS5JLFRMLG51bGwsMCwxLHdwLCExLCExLCEwLCExLCEwLCExKSxPcyhsKE9lKHR0KGUudyksMSksMzUpLGUuQSwiaW5zdGFuY2UiLG51bGwsMCwxLHdwLCEwLCExLCEwLCExLCEwLCExKSxPcyhsKE9lKHR0KGUudyksMiksMzUpLGUuXywibGl0ZXJhbCIsbnVsbCwwLDEsd3AsITEsITEsITAsITEsITAsITEpLHNzKGwoT2UodHQoZS53KSwzKSwxOSksZS52LGwoT2UodHQoZS52KSwwKSwxOSksImVFbnVtIiwwLDEsd3AsITAsITEsITEsITEsITEsITEsITEpLHpjKGUuQixSTSwiRUZhY3RvcnkiLCExLCExLCEwKSxzcyhsKE9lKHR0KGUuQiksMCksMTkpLGUuVSxsKE9lKHR0KGUuVSksMiksMTkpLCJlUGFja2FnZSIsMSwxLFJNLCEwLCExLCEwLCExLCExLCExLCExKSxnPUpvKGwoT2UocWkoZS5CKSwwKSw2MiksZS5TLCJjcmVhdGUiKSxhYyhnLGUubywiZUNsYXNzIiksZz1KbyhsKE9lKHFpKGUuQiksMSksNjIpLGUuTSwiY3JlYXRlRnJvbVN0cmluZyIpLGFjKGcsZS5xLCJlRGF0YVR5cGUiKSxhYyhnLGUuXywibGl0ZXJhbFZhbHVlIiksZz1KbyhsKE9lKHFpKGUuQiksMiksNjIpLGUuXywiY29udmVydFRvU3RyaW5nIiksYWMoZyxlLnEsImVEYXRhVHlwZSIpLGFjKGcsZS5NLCJpbnN0YW5jZVZhbHVlIiksemMoZS5RLHVGLGM0dCwhMCwhMSwhMCksc3MobChPZSh0dChlLlEpLDApLDE5KSxlLmEsbChPZSh0dChlLmEpLDIpLDE5KSwiZUFubm90YXRpb25zIiwwLC0xLHVGLCExLCExLCEwLCEwLCExLCExLCExKSxnPUpvKGwoT2UocWkoZS5RKSwwKSw2MiksZS5hLCJnZXRFQW5ub3RhdGlvbiIpLGFjKGcsZS5fLEhmZSksemMoZS5SLFlnZSx1NHQsITAsITEsITApLE9zKGwoT2UodHQoZS5SKSwwKSwzNSksZS5fLF9pLG51bGwsMCwxLFlnZSwhMSwhMSwhMCwhMSwhMCwhMSksemMoZS5TLFhiLCJFT2JqZWN0IiwhMSwhMSwhMCksSm8obChPZShxaShlLlMpLDApLDYyKSxlLm8sImVDbGFzcyIpLEpvKGwoT2UocWkoZS5TKSwxKSw2MiksZS5lLCJlSXNQcm94eSIpLEpvKGwoT2UocWkoZS5TKSwyKSw2MiksZS5YLCJlUmVzb3VyY2UiKSxKbyhsKE9lKHFpKGUuUyksMyksNjIpLGUuUywiZUNvbnRhaW5lciIpLEpvKGwoT2UocWkoZS5TKSw0KSw2MiksZS5iYiwiZUNvbnRhaW5pbmdGZWF0dXJlIiksSm8obChPZShxaShlLlMpLDUpLDYyKSxlLlcsImVDb250YWlubWVudEZlYXR1cmUiKSxnPUpvKGwoT2UocWkoZS5TKSw2KSw2MiksbnVsbCwiZUNvbnRlbnRzIiksdD1LZyhlLmZiKSxuPUtnKGUuUykscXIoKCF0LmQmJih0LmQ9bmV3IFlzKFdvLHQsMSkpLHQuZCksbiksYT0kMShnLHQsbnVsbCksYSYmYS5vaigpLGc9Sm8obChPZShxaShlLlMpLDcpLDYyKSxudWxsLCJlQWxsQ29udGVudHMiKSx0PUtnKGUuY2IpLG49S2coZS5TKSxxcigoIXQuZCYmKHQuZD1uZXcgWXMoV28sdCwxKSksdC5kKSxuKSxvPSQxKGcsdCxudWxsKSxvJiZvLm9qKCksZz1KbyhsKE9lKHFpKGUuUyksOCksNjIpLG51bGwsImVDcm9zc1JlZmVyZW5jZXMiKSx0PUtnKGUuZmIpLG49S2coZS5TKSxxcigoIXQuZCYmKHQuZD1uZXcgWXMoV28sdCwxKSksdC5kKSxuKSxmPSQxKGcsdCxudWxsKSxmJiZmLm9qKCksZz1KbyhsKE9lKHFpKGUuUyksOSksNjIpLGUuTSwiZUdldCIpLGFjKGcsZS5iYixJTCksZz1KbyhsKE9lKHFpKGUuUyksMTApLDYyKSxlLk0sImVHZXQiKSxhYyhnLGUuYmIsSUwpLGFjKGcsZS5lLCJyZXNvbHZlIiksZz1KbyhsKE9lKHFpKGUuUyksMTEpLDYyKSxudWxsLCJlU2V0IiksYWMoZyxlLmJiLElMKSxhYyhnLGUuTSwibmV3VmFsdWUiKSxnPUpvKGwoT2UocWkoZS5TKSwxMiksNjIpLGUuZSwiZUlzU2V0IiksYWMoZyxlLmJiLElMKSxnPUpvKGwoT2UocWkoZS5TKSwxMyksNjIpLG51bGwsImVVbnNldCIpLGFjKGcsZS5iYixJTCksZz1KbyhsKE9lKHFpKGUuUyksMTQpLDYyKSxlLk0sImVJbnZva2UiKSxhYyhnLGUuVCxEU2UpLHQ9S2coZS5mYiksbj10NmUoKSxxcigoIXQuZCYmKHQuZD1uZXcgWXMoV28sdCwxKSksdC5kKSxuKSxnVShnLHQsImFyZ3VtZW50cyIpLFZnbihnLGUuSyksemMoZS5ULFVmLGw1dCwhMSwhMSwhMCksc3MobChPZSh0dChlLlQpLDApLDE5KSxlLm8sbChPZSh0dChlLm8pLDMpLDE5KSxDNXQsMCwxLFVmLCEwLCExLCExLCExLCExLCExLCExKSxzcyhsKE9lKHR0KGUuVCksMSksMTkpLGUuZGIsbnVsbCxrNXQsMCwtMSxVZiwhMSwhMSwhMCwhMCwhMCwhMSwhMSksc3MobChPZSh0dChlLlQpLDIpLDE5KSxlLlYsbChPZSh0dChlLlYpLDApLDE5KSwiZVBhcmFtZXRlcnMiLDAsLTEsVWYsITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5UKSwzKSwxOSksZS5wLG51bGwsImVFeGNlcHRpb25zIiwwLC0xLFVmLCExLCExLCEwLCExLCEwLCEwLCExKSxzcyhsKE9lKHR0KGUuVCksNCksMTkpLGUuSCxudWxsLCJlR2VuZXJpY0V4Y2VwdGlvbnMiLDAsLTEsVWYsITEsITEsITAsITAsITEsITAsITEpLEpvKGwoT2UocWkoZS5UKSwwKSw2MiksZS5JLHk1dCksZz1KbyhsKE9lKHFpKGUuVCksMSksNjIpLGUuZSwiaXNPdmVycmlkZU9mIiksYWMoZyxlLlQsInNvbWVPcGVyYXRpb24iKSx6YyhlLlUsdTEsIkVQYWNrYWdlIiwhMSwhMSwhMCksT3MobChPZSh0dChlLlUpLDApLDM1KSxlLl8sIm5zVVJJIixudWxsLDAsMSx1MSwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLlUpLDEpLDM1KSxlLl8sIm5zUHJlZml4IixudWxsLDAsMSx1MSwhMSwhMSwhMCwhMSwhMCwhMSksc3MobChPZSh0dChlLlUpLDIpLDE5KSxlLkIsbChPZSh0dChlLkIpLDApLDE5KSwiZUZhY3RvcnlJbnN0YW5jZSIsMSwxLHUxLCEwLCExLCEwLCExLCExLCExLCExKSxzcyhsKE9lKHR0KGUuVSksMyksMTkpLGUucCxsKE9lKHR0KGUucCksNCksMTkpLCJlQ2xhc3NpZmllcnMiLDAsLTEsdTEsITEsITEsITAsITAsITAsITEsITEpLHNzKGwoT2UodHQoZS5VKSw0KSwxOSksZS5VLGwoT2UodHQoZS5VKSw1KSwxOSksImVTdWJwYWNrYWdlcyIsMCwtMSx1MSwhMSwhMSwhMCwhMCwhMCwhMSwhMSksc3MobChPZSh0dChlLlUpLDUpLDE5KSxlLlUsbChPZSh0dChlLlUpLDQpLDE5KSwiZVN1cGVyUGFja2FnZSIsMCwxLHUxLCEwLCExLCExLCExLCEwLCExLCExKSxnPUpvKGwoT2UocWkoZS5VKSwwKSw2MiksZS5wLCJnZXRFQ2xhc3NpZmllciIpLGFjKGcsZS5fLF9pKSx6YyhlLlYsazMsaDV0LCExLCExLCEwKSxzcyhsKE9lKHR0KGUuViksMCksMTkpLGUuVCxsKE9lKHR0KGUuVCksMiksMTkpLCJlT3BlcmF0aW9uIiwwLDEsazMsITAsITEsITEsITEsITEsITEsITEpLHpjKGUuVyxJNCxmNXQsITEsITEsITApLE9zKGwoT2UodHQoZS5XKSwwKSwzNSksZS5lLCJjb250YWlubWVudCIsbnVsbCwwLDEsSTQsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5XKSwxKSwzNSksZS5lLCJjb250YWluZXIiLG51bGwsMCwxLEk0LCEwLCEwLCExLCExLCEwLCEwKSxPcyhsKE9lKHR0KGUuVyksMiksMzUpLGUuZSwicmVzb2x2ZVByb3hpZXMiLHdULDAsMSxJNCwhMSwhMSwhMCwhMSwhMCwhMSksc3MobChPZSh0dChlLlcpLDMpLDE5KSxlLlcsbnVsbCwiZU9wcG9zaXRlIiwwLDEsSTQsITEsITEsITAsITEsITAsITEsITEpLHNzKGwoT2UodHQoZS5XKSw0KSwxOSksZS5vLG51bGwsImVSZWZlcmVuY2VUeXBlIiwxLDEsSTQsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5XKSw1KSwxOSksZS5iLG51bGwsImVLZXlzIiwwLC0xLEk0LCExLCExLCEwLCExLCEwLCExLCExKSx6YyhlLmJiLGRsLHM1dCwhMCwhMSwhMCksT3MobChPZSh0dChlLmJiKSwwKSwzNSksZS5lLCJjaGFuZ2VhYmxlIix3VCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iYiksMSksMzUpLGUuZSwidm9sYXRpbGUiLG51bGwsMCwxLGRsLCExLCExLCEwLCExLCEwLCExKSxPcyhsKE9lKHR0KGUuYmIpLDIpLDM1KSxlLmUsInRyYW5zaWVudCIsbnVsbCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iYiksMyksMzUpLGUuXywiZGVmYXVsdFZhbHVlTGl0ZXJhbCIsbnVsbCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iYiksNCksMzUpLGUuTSx4NXQsbnVsbCwwLDEsZGwsITAsITAsITEsITEsITAsITApLE9zKGwoT2UodHQoZS5iYiksNSksMzUpLGUuZSwidW5zZXR0YWJsZSIsbnVsbCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iYiksNiksMzUpLGUuZSwiZGVyaXZlZCIsbnVsbCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLHNzKGwoT2UodHQoZS5iYiksNyksMTkpLGUubyxsKE9lKHR0KGUubyksMTMpLDE5KSxDNXQsMCwxLGRsLCEwLCExLCExLCExLCExLCExLCExKSxKbyhsKE9lKHFpKGUuYmIpLDApLDYyKSxlLkksdzV0KSxnPUpvKGwoT2UocWkoZS5iYiksMSksNjIpLG51bGwsImdldENvbnRhaW5lckNsYXNzIiksdD1LZyhlLkwpLG49dDZlKCkscXIoKCF0LmQmJih0LmQ9bmV3IFlzKFdvLHQsMSkpLHQuZCksbikscj0kMShnLHQsbnVsbCksciYmci5vaigpLHpjKGUuZWIsTTQsaTV0LCEwLCExLCEwKSxPcyhsKE9lKHR0KGUuZWIpLDApLDM1KSxlLmUsIm9yZGVyZWQiLHdULDAsMSxNNCwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmViKSwxKSwzNSksZS5lLCJ1bmlxdWUiLHdULDAsMSxNNCwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmViKSwyKSwzNSksZS5JLCJsb3dlckJvdW5kIixudWxsLDAsMSxNNCwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmViKSwzKSwzNSksZS5JLCJ1cHBlckJvdW5kIiwiMSIsMCwxLE00LCExLCExLCEwLCExLCEwLCExKSxPcyhsKE9lKHR0KGUuZWIpLDQpLDM1KSxlLmUsIm1hbnkiLG51bGwsMCwxLE00LCEwLCEwLCExLCExLCEwLCEwKSxPcyhsKE9lKHR0KGUuZWIpLDUpLDM1KSxlLmUsInJlcXVpcmVkIixudWxsLDAsMSxNNCwhMCwhMCwhMSwhMSwhMCwhMCksc3MobChPZSh0dChlLmViKSw2KSwxOSksZS5wLG51bGwsImVUeXBlIiwwLDEsTTQsITEsITAsITAsITEsITAsITAsITEpLHNzKGwoT2UodHQoZS5lYiksNyksMTkpLGUuSCxudWxsLCJlR2VuZXJpY1R5cGUiLDAsMSxNNCwhMSwhMCwhMCwhMCwhMSwhMCwhMSksemMoZS5hYix1diwiRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiLCExLCExLCExKSxPcyhsKE9lKHR0KGUuYWIpLDApLDM1KSxlLl8sImtleSIsbnVsbCwwLDEsdXYsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5hYiksMSksMzUpLGUuXyxUTCxudWxsLDAsMSx1diwhMSwhMSwhMCwhMSwhMCwhMSksemMoZS5ILFdvLHU1dCwhMSwhMSwhMCksc3MobChPZSh0dChlLkgpLDApLDE5KSxlLkgsbnVsbCwiZVVwcGVyQm91bmQiLDAsMSxXbywhMSwhMSwhMCwhMCwhMSwhMSwhMSksc3MobChPZSh0dChlLkgpLDEpLDE5KSxlLkgsbnVsbCwiZVR5cGVBcmd1bWVudHMiLDAsLTEsV28sITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5IKSwyKSwxOSksZS5wLG51bGwsImVSYXdUeXBlIiwxLDEsV28sITAsITEsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5IKSwzKSwxOSksZS5ILG51bGwsImVMb3dlckJvdW5kIiwwLDEsV28sITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5IKSw0KSwxOSksZS5kYixudWxsLCJlVHlwZVBhcmFtZXRlciIsMCwxLFdvLCExLCExLCEwLCExLCExLCExLCExKSxzcyhsKE9lKHR0KGUuSCksNSksMTkpLGUucCxudWxsLCJlQ2xhc3NpZmllciIsMCwxLFdvLCExLCExLCEwLCExLCEwLCExLCExKSxnPUpvKGwoT2UocWkoZS5IKSwwKSw2MiksZS5lLEU1dCksYWMoZyxlLk0sd1ApLHpjKGUuZGIsWnUsZDV0LCExLCExLCEwKSxzcyhsKE9lKHR0KGUuZGIpLDApLDE5KSxlLkgsbnVsbCwiZUJvdW5kcyIsMCwtMSxadSwhMSwhMSwhMCwhMCwhMSwhMSwhMSksRWkoZS5jLEwwZSwiRUJpZ0RlY2ltYWwiLCEwKSxFaShlLmQsQTYsIkVCaWdJbnRlZ2VyIiwhMCksRWkoZS5lLGloLCJFQm9vbGVhbiIsITApLEVpKGUuZixOcywiRUJvb2xlYW5PYmplY3QiLCEwKSxFaShlLmksQWwsIkVCeXRlIiwhMCksRWkoZS5nLGxlKEFsLDEpLCJFQnl0ZUFycmF5IiwhMCksRWkoZS5qLGp4LCJFQnl0ZU9iamVjdCIsITApLEVpKGUuayxrZiwiRUNoYXIiLCEwKSxFaShlLm4sUEwsIkVDaGFyYWN0ZXJPYmplY3QiLCEwKSxFaShlLnIsY0ssIkVEYXRlIiwhMCksRWkoZS5zLG5CZSwiRURpYWdub3N0aWNDaGFpbiIsITEpLEVpKGUudCxOYSwiRURvdWJsZSIsITApLEVpKGUudSx0YSwiRURvdWJsZU9iamVjdCIsITApLEVpKGUuZmIsbVBlLCJFRUxpc3QiLCExKSxFaShlLkEseVBlLCJFRW51bWVyYXRvciIsITEpLEVpKGUuQyxIUGUsIkVGZWF0dXJlTWFwIiwhMSksRWkoZS5ELENZLCJFRmVhdHVyZU1hcEVudHJ5IiwhMSksRWkoZS5GLEI0LCJFRmxvYXQiLCEwKSxFaShlLkcsX1QsIkVGbG9hdE9iamVjdCIsITApLEVpKGUuSSxWciwiRUludCIsITApLEVpKGUuSixybywiRUludGVnZXJPYmplY3QiLCEwKSxFaShlLkwscVNlLCJFSmF2YUNsYXNzIiwhMCksRWkoZS5NLHdhLCJFSmF2YU9iamVjdCIsITApLEVpKGUuTixubSwiRUxvbmciLCEwKSxFaShlLk8scjMsIkVMb25nT2JqZWN0IiwhMCksRWkoZS5QLEhTZSwiRU1hcCIsITEpLEVpKGUuWCxqUGUsIkVSZXNvdXJjZSIsITEpLEVpKGUuWSxyQmUsIkVSZXNvdXJjZVNldCIsITEpLEVpKGUuWixoNywiRVNob3J0IiwhMCksRWkoZS4kLGkzLCJFU2hvcnRPYmplY3QiLCEwKSxFaShlLl8senQsIkVTdHJpbmciLCEwKSxFaShlLmNiLHdQZSwiRVRyZWVJdGVyYXRvciIsITEpLEVpKGUuSyxpQmUsIkVJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIiwhMSksdDhlKGUsRmYpKX12YXIgd1A9Im9iamVjdCIsQ3g9ImJvb2xlYW4iLFFrZT0ibnVtYmVyIixJbGU9InN0cmluZyIsT2xlPSJmdW5jdGlvbiIsSWk9MjE0NzQ4MzY0NyxWYz0iamF2YS5sYW5nIix5UD17MzoxfSx4UD0iY29tLmdvb2dsZS5jb21tb24uYmFzZSIsQ289IiwgIixTd3Q9IiVzICglcykgbXVzdCBub3QgYmUgbmVnYXRpdmUiLFJuPXszOjEsNDoxLDU6MX0sX3d0PSJuZWdhdGl2ZSBzaXplOiAiLEprZT0ibm8gY2FsbHMgdG8gbmV4dCgpIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gcmVtb3ZlKCkiLEF3dD0iT3B0aW9uYWwub2YoIix1bD0ibnVsbCIsZVQ9ezIwNDoxLDUxOjF9LGRuPSJjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0Iix0VD17MjA0OjEsNTE6MSwxMjg6MX0sSm09ezIyOToxLDM6MX0sT2E9ezUxOjF9LExyPSJqYXZhLnV0aWwiLFd3PXs4NToxfSxXeT17MjA6MSwzMToxLDE2OjF9LHExPTIwNjMsVGw9ezIwOjEsMzE6MSwxNjoxLDIxOjF9LFprZT17ODU6MSwxMzk6MSwxMzM6MX0sTHd0PXsyMDoxLDMxOjEsMTY6MSwyMToxLDg3OjF9LGVFZT17MjA6MSwzMToxLDE2OjEsMjc3OjEsMjE6MSw4NzoxfSxsZz17NTE6MSwxMjg6MX0sTmxlPXszNTg6MSw0NDoxfSxNd3Q9IkFic3RyYWN0TWFwRW50cnkiLER3dD0iZXhwZWN0ZWRWYWx1ZXNQZXJLZXkiLGR0PXszOjEsNjoxLDQ6MSw1OjF9LF9kPTE2Mzg0LFBoPXsxNTk6MX0sZnI9ezQxOjF9LGtQPXsyMDI6MX0sRVA9e2w6NDE5NDMwMyxtOjQxOTQzMDMsaDo1MjQyODd9LFBsZT17MjUzOjEsMzoxLDM0OjF9LEl3dD0icmFuZ2UgdW5ib3VuZGVkIG9uIHRoaXMgc2lkZSIsaGc9ezIwOjF9LE93dD17MjA6MSwxNjoxfSx0RWU9ezM6MSwyMDoxLDMxOjEsMTY6MX0sblQ9ezMwNzoxLDM6MSwyMDoxLDMxOjEsMTY6MSwxNToxLDU5OjF9LFhVPXszOjEsNDoxLDU6MSwxNzM6MX0sclQ9ezM6MSw4NToxfSxCbGU9ezIwOjEsMTY6MSwyMToxfSxTeD17MzoxLDIwOjEsMzE6MSwxNjoxLDIxOjF9LE53dD17MjA6MSwxNjoxLDIxOjEsODc6MX0sZmc9NDYxODQ1OTA3LGRnPS04NjIwNDg5NDMsVFA9ezM6MSw2OjEsNDoxLDU6MSwxNzM6MX0sUHd0PSJleHBlY3RlZFNpemUiLG0wPTEwMjQsckw9MTA3Mzc0MTgyNCxZeT0iaW5pdGlhbEFycmF5U2l6ZSIsaXQ9ezM6MSw2OjEsNDoxLDk6MSw1OjF9LGlUPXsyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjF9LEZsZT0iYXJyYXlTaXplIixCd3Q9ezIwOjEsMzE6MSw1NjoxLDE2OjEsMTU6MSw1OToxfSx0aT17NDY6MX0sUVU9ezM4MDoxfSxBYj0xZS00LGxvPS0yMTQ3NDgzNjQ4LEZ3dD0iX19ub2luaXRfXyIsbHA9ezM6MSwxMDM6MSw2MzoxLDgyOjF9LENQPSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5pbXBsIixuRWU9IlN0cmluZyIsckVlPSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudCIsUmxlPSJhbm9ueW1vdXMiLGpsZT0iZm5TdGFjayIsaUVlPSJVbmtub3duIixBZD17MjAxOjEsMzoxLDQ6MX0sYjI9MWUzLFpzPTY1NTM1LCRsZT0iSmFudWFyeSIsemxlPSJGZWJydWFyeSIscWxlPSJNYXJjaCIsSGxlPSJBcHJpbCIsX3g9Ik1heSIsVmxlPSJKdW5lIixVbGU9Ikp1bHkiLEdsZT0iQXVndXN0IixLbGU9IlNlcHRlbWJlciIsV2xlPSJPY3RvYmVyIixZbGU9Ik5vdmVtYmVyIixYbGU9IkRlY2VtYmVyIixMYj0xOTAwLGRpPXs1MzoxLDM6MSw0OjF9LFJ3dD0iQmVmb3JlIENocmlzdCIsand0PSJBbm5vIERvbWluaSIsUWxlPSJTdW5kYXkiLEpsZT0iTW9uZGF5IixabGU9IlR1ZXNkYXkiLGVoZT0iV2VkbmVzZGF5Iix0aGU9IlRodXJzZGF5IixuaGU9IkZyaWRheSIscmhlPSJTYXR1cmRheSIsc0VlPSJjb20uZ29vZ2xlLmd3dC5pMThuLnNoYXJlZCIsJHd0PSJEYXRlVGltZUZvcm1hdCIsaWhlPSJjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudCIsend0PSJEZWZhdWx0RGF0ZVRpbWVGb3JtYXRJbmZvIixxd3Q9ezM6MSw0OjEsMzQ6MSwyMDY6MX0sQXg9ImNvbS5nb29nbGUuZ3d0Lmpzb24uY2xpZW50IixlaD00MTk0MzAzLGhwPTEwNDg1NzUsU1A9NTI0Mjg4LEx4PTQxOTQzMDQsWm09MTc1OTIxODYwNDQ0MTYsSlU9MWU5LF9QPS0xNzU5MjE4NjA0NDQxNixhRWU9ImphdmEuaW8iLHNoZT17MzoxLDEwMzoxLDc3OjEsNjM6MSw4MjoxfSxId3Q9ezM6MSwyOTY6MSw4MjoxfSxZdz0nRm9yIGlucHV0IHN0cmluZzogIicsZ3M9MS8wLGlhPS0xLzAsWHk9NDA5NixhaGU9ezM6MSw0OjEsMzc2OjF9LHNyPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZCIsSW89NjU1MzYsQVA9NTUyOTYsWm89ezEwOToxLDM6MSw0OjF9LG9oZT0xZTUsVnd0PS4zMDEwMjk5OTU2NjM5ODEyLFZvPTQyOTQ5NjcyOTUsc1Q9IjAuMCIsY2hlPXs0NDoxfSxhVD0iVW5hYmxlIHRvIGFkZCBlbGVtZW50IHRvIHF1ZXVlIixVd3Q9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTM6MSwxNjoxLDE1OjEsNTk6MX0sR3d0PXszOjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjF9LEt3dD17MjA6MSwxNjoxLDE1OjF9LHVoZT17MzoxLDUwOjF9LExQPXsxODk6MX0sbTY9ezM6MSw0OjEsODU6MX0sb0VlPXszOjEsNDoxLDIwOjEsMzE6MSwxNjoxLDQ5OjEsMjE6MX0sbGhlPSJkZWxldGUiLGlMPTE0OTAxMTYxMTkzODQ3NjU2ZS0yNCxzTD0xMTEwMjIzMDI0NjI1MTU2NWUtMzIsaGhlPTE1NTI1NDg1LE1QPTU5NjA0NjQ0Nzc1MzkwNjNlLTIzLGNFZT0xNjc3NzIxNixaVT0xNjc3NzIxNSx1RWU9IiwgbGVuZ3RoOiAiLFd3dD17MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNTk6MX0sbEVlPSJzdWJNYXA6ICIsWXd0PSIgbGVzcyB0aGFuICIsZmhlPXszOjEsMzQ6MSwyMjoxLDMwNDoxfSxkaGU9ImphdmEudXRpbC5mdW5jdGlvbiIsYUw9ImphdmEudXRpbC5sb2dnaW5nIixYd3Q9ezM6MSw0OjEsNToxLDg1NjoxfSxnaGU9InVuZGVmaW5lZCIsc2E9ImphdmEudXRpbC5zdHJlYW0iLGhFZT17NTMzOjEsNjg3OjF9LGVHPSJmcm9tSW5kZXg6ICIsUXd0PSIgPiB0b0luZGV4OiAiLGZFZT0iLCB0b0luZGV4OiAiLGRFZT0iSW5kZXg6ICIsZ0VlPSIsIFNpemU6ICIsb1Q9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uIixpaT17NTA6MX0sSnd0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uIixad3Q9IlNjYW5saW5lL0V2ZW50SGFuZGxlciIsZ2c9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLmNvbXBhY3Rpb24ub25lZCIsZTN0PSJDTm9kZSBiZWxvbmdzIHRvIGFub3RoZXIgQ0dyb3VwLiIsdDN0PSJJU3BhY2luZ3NIYW5kbGVyLzEiLHBoZT0iVGhlICIsYmhlPSIgaW5zdGFuY2UgaGFzIGJlZW4gZmluaXNoZWQgYWxyZWFkeS4iLG4zdD0iVGhlIGRpcmVjdGlvbiAiLHIzdD0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIENHcmFwaCBpbnN0YW5jZS4iLGkzdD0iT25lRGltZW5zaW9uYWxDb21wYWN0b3IiLHMzdD0iT25lRGltZW5zaW9uYWxDb21wYWN0b3IvbGFtYmRhJDAkVHlwZSIsYTN0PSJRdWFkcnVwbGV0IixvM3Q9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IiLGMzdD0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9Db25zdHJhaW50c1NjYW5saW5lSGFuZGxlciIsdTN0PSJTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yL0NvbnN0cmFpbnRzU2NhbmxpbmVIYW5kbGVyL2xhbWJkYSQwJFR5cGUiLGwzdD0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9UaW1lc3RhbXAiLGgzdD0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9sYW1iZGEkMCRUeXBlIixMZD17MTc4OjEsNDY6MX0sbWhlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uLm9wdGlvbnMiLE5jPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5kYXRhIixwRWU9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8udHJhdmVyc2FsU3RyYXRlZ3kiLGJFZT0ib3JnLmVjbGlwc2UuZWxrLnBvbHlvbWluby5sb3dMZXZlbFNvcnQiLG1FZT0ib3JnLmVjbGlwc2UuZWxrLnBvbHlvbWluby5oaWdoTGV2ZWxTb3J0Iix2RWU9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8uZmlsbCIsUGY9ezEzNDoxfSx2aGU9InBvbHlvbWlubyIsb0w9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5ldHdvcmtzaW1wbGV4IixwZz17MTgzOjEsMzoxLDQ6MX0sZjN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZyIsZXY9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5vZGVzcGFjaW5nLmNlbGxzeXN0ZW0iLGNUPSJDRU5URVIiLGQzdD17MjE3OjEsMzM2OjF9LHdFZT17MzoxLDQ6MSw1OjEsNjAzOjF9LE14PSJMRUZUIixEeD0iUklHSFQiLHlFZT0iVmVydGljYWwgYWxpZ25tZW50IGNhbm5vdCBiZSBudWxsIix4RWU9IkJPVFRPTSIsdEc9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5vZGVzcGFjaW5nLmludGVybmFsIixjTD0iVU5ERUZJTkVEIixIMT0uMDEsRFA9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5vZGVzcGFjaW5nLmludGVybmFsLmFsZ29yaXRobSIsZzN0PSJMYWJlbFBsYWNlci9sYW1iZGEkMCRUeXBlIixwM3Q9IkxhYmVsUGxhY2VyL2xhbWJkYSQxJFR5cGUiLGIzdD0icG9ydFJhdGlvT3JQb3NpdGlvbiIsdVQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm92ZXJsYXBzIix3aGU9IkRPV04iLE1kPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5wb2x5b21pbm8iLG5HPSJOT1JUSCIseWhlPSJFQVNUIix4aGU9IlNPVVRIIixraGU9IldFU1QiLHJHPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5wb2x5b21pbm8uc3RydWN0dXJlcyIsa0VlPSJEaXJlY3Rpb24iLEVoZT0iR3JpZCBpcyBvbmx5IG9mIHNpemUgIixUaGU9Ii4gUmVxdWVzdGVkIHBvaW50ICgiLENoZT0iKSBpcyBvdXQgb2YgYm91bmRzLiIsaUc9IiBHaXZlbiBjZW50ZXIgYmFzZWQgY29vcmRpbmF0ZXMgd2VyZSAoIixJUD0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLnByb3BlcnRpZXMiLG0zdD0iSVByb3BlcnR5SG9sZGVyIixFRWU9ezM6MSw5NjoxLDEzNzoxfSxJeD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24uc3BvcmUiLHYzdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24udXRpbHMiLHR2PXsyMDU6MX0sdjY9Im9yZy5lY2xpcHNlLmVsay5jb3JlIix3M3Q9IkNvbm5lY3RlZCBDb21wb25lbnRzIENvbXBhY3Rpb24iLHkzdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjbyIsc0c9Im9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28uZ3JhcGgiLFNoZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjby5vcHRpb25zIixURWU9IkNvbXBhY3Rpb25TdHJhdGVneSIsQ0VlPSJvcmcuZWNsaXBzZS5lbGsuZGlzY28uY29tcG9uZW50Q29tcGFjdGlvbi5zdHJhdGVneSIsU0VlPSJvcmcuZWNsaXBzZS5lbGsuZGlzY28uY29tcG9uZW50Q29tcGFjdGlvbi5jb21wb25lbnRMYXlvdXRBbGdvcml0aG0iLF9FZT0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmRlYnVnLmRpc2NvR3JhcGgiLEFFZT0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmRlYnVnLmRpc2NvUG9seXMiLHgzdD0iY29tcG9uZW50Q29tcGFjdGlvbiIsbnY9Im9yZy5lY2xpcHNlLmVsay5kaXNjbyIsX2hlPSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5jb21wb25lbnRDb21wb25lbnQiLEFoZT0ib3JnLmVjbGlwc2UuZWxrLmVkZ2UudGhpY2tuZXNzIixPeD0ib3JnLmVjbGlwc2UuZWxrLmFzcGVjdFJhdGlvIixYdz0ib3JnLmVjbGlwc2UuZWxrLnBhZGRpbmciLHc2PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmRpc2NvLnRyYW5zZm9ybSIsTGhlPTEuNTcwNzk2MzI2Nzk0ODk2Nix5Nj0xNzk3NjkzMTM0ODYyMzE1N2UyOTIsUXk9ezM6MSw0OjEsNToxLDE5ODoxfSxrM3Q9ezM6MSw2OjEsNDoxLDU6MSwxMDA6MSwxMTU6MX0sTWhlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmZvcmNlIixMRWU9IkNvbXBvbmVudHNQcm9jZXNzb3IiLEUzdD0iQ29tcG9uZW50c1Byb2Nlc3Nvci8xIixNRWU9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDAkVHlwZSIsT1A9Im9yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2UuZ3JhcGgiLFQzdD0iQ29tcG9uZW50IExheW91dCIsREVlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmZvcmNlLm1vZGVsIixhRz0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlLm1vZGVsIixJRWU9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5pdGVyYXRpb25zIixPRWU9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5yZXB1bHNpdmVQb3dlciIsRGhlPSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UudGVtcGVyYXR1cmUiLERkPS4wMDEsSWhlPSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UucmVwdWxzaW9uIix1TD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5vcHRpb25zIixsVD0xLjYwMDAwMDAyMzg0MTg1OCxZdT0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlIixOUD0ib3JnLmVjbGlwc2UuZWxrLnByaW9yaXR5IixKeT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubm9kZU5vZGUiLE9oZT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZUxhYmVsIixvRz0ib3JnLmVjbGlwc2UuZWxrLnJhbmRvbVNlZWQiLGxMPSJvcmcuZWNsaXBzZS5lbGsuc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzIixoTD0ib3JnLmVjbGlwc2UuZWxrLmludGVyYWN0aXZlIixOaGU9Im9yZy5lY2xpcHNlLmVsay5wb3J0Q29uc3RyYWludHMiLGNHPSJvcmcuZWNsaXBzZS5lbGsuZWRnZUxhYmVscy5pbmxpbmUiLGZMPSJvcmcuZWNsaXBzZS5lbGsub21pdE5vZGVNaWNyb0xheW91dCIsaFQ9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5maXhlZEdyYXBoU2l6ZSIsTng9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5vcHRpb25zIix4Nj0ib3JnLmVjbGlwc2UuZWxrLm5vZGVTaXplLmNvbnN0cmFpbnRzIixmVD0ib3JnLmVjbGlwc2UuZWxrLm5vZGVMYWJlbHMucGxhY2VtZW50IixkVD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMucGxhY2VtZW50IixQUD0ib3JnLmVjbGlwc2UuZWxrLnRvcGRvd25MYXlvdXQiLEJQPSJvcmcuZWNsaXBzZS5lbGsudG9wZG93bi5zY2FsZUZhY3RvciIsRlA9Im9yZy5lY2xpcHNlLmVsay50b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVXaWR0aCIsUlA9Im9yZy5lY2xpcHNlLmVsay50b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVBc3BlY3RSYXRpbyIsUXc9Im9yZy5lY2xpcHNlLmVsay50b3Bkb3duLm5vZGVUeXBlIixORWU9Im9yaWdpbiIsQzN0PSJyYW5kb20iLFMzdD0iYm91bmRpbmdCb3gudXBMZWZ0IixfM3Q9ImJvdW5kaW5nQm94Lmxvd1JpZ2h0IixQRWU9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MuZml4ZWQiLEJFZT0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5kZXNpcmVkRWRnZUxlbmd0aCIsRkVlPSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmRpbWVuc2lvbiIsUkVlPSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmVwc2lsb24iLGpFZT0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5pdGVyYXRpb25MaW1pdCIsTWI9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MiLEEzdD0iRUxLIFN0cmVzcyIsUHg9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5taW5pbXVtIix1Rz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5zdHJlc3MiLEwzdD0iTGF5ZXJlZCBsYXlvdXQiLEJ4PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQiLGpQPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcGFjdGlvbi5jb21wb25lbnRzIixkTD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBhY3Rpb24ub25lZCIsbEc9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLm9uZWQuYWxncyIscnY9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLnJlY3RodWxsIixWMT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBvbmVudHMiLElkPSJOT05FIiwkRWU9Ik1PREVMX09SREVSIixhdT17MzoxLDY6MSw0OjEsOToxLDU6MSwxMjY6MX0sTTN0PXszOjEsNjoxLDQ6MSw1OjEsMTUwOjEsMTAwOjEsMTE1OjF9LGhHPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcG91bmQiLHRzPXs0NzoxfSxDdT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmdyYXBoIixQaGU9IiAtPiAiLEQzdD0iTm90IHN1cHBvcnRlZCBieSBMR3JhcGgiLHpFZT0iUG9ydCBzaWRlIGlzIHVuZGVmaW5lZCIsQmhlPXszOjEsNjoxLDQ6MSw1OjEsNDgzOjEsMTUwOjEsMTAwOjEsMTE1OjF9LG0yPXszOjEsNjoxLDQ6MSw1OjEsMTUwOjEsMTk5OjEsMjEwOjEsMTAwOjEsMTE1OjF9LEkzdD17MzoxLDY6MSw0OjEsNToxLDE1MDoxLDIwNDI6MSwyMTA6MSwxMDA6MSwxMTU6MX0sTzN0PWAoW3siJyAJXHIKYCxOM3Q9YCldfSInIAlccgpgLFAzdD0iVGhlIGdpdmVuIHN0cmluZyBjb250YWlucyBwYXJ0cyB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgYXMgbnVtYmVycy4iLCRQPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5tYXRoIixCM3Q9ezM6MSw0OjEsMTQwOjEsMjE0OjEsNDIzOjF9LEYzdD17MzoxLDQ6MSwxMDc6MSwyMTQ6MSw0MjM6MX0sdjI9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5ncmFwaC50cmFuc2Zvcm0iLFIzdD0iRWxrR3JhcGhJbXBvcnRlciIsajN0PSJFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQxJFR5cGUiLCQzdD0iRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMiRUeXBlIix6M3Q9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDQkVHlwZSIscnI9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUiLHEzdD0iTm9kZSBtYXJnaW4gY2FsY3VsYXRpb24iLEgzdD0iT05FX1NJREVEX0dSRUVEWV9TV0lUQ0giLFYzdD0iVFdPX1NJREVEX0dSRUVEWV9TV0lUQ0giLEZoZT0iTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IHByb2Nlc3NvciAiLFJoZT0iSW50ZXJtZWRpYXRlUHJvY2Vzc29yU3RyYXRlZ3kiLGpoZT0iTm9kZSAnIixVM3Q9IkZJUlNUX1NFUEFSQVRFIixHM3Q9IkxBU1RfU0VQQVJBVEUiLEszdD0iT2RkIHBvcnQgc2lkZSBwcm9jZXNzaW5nIixhYT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5jb21wYWN0aW9uIixnTD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5ncmVlZHlzd2l0Y2giLGJnPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlci5jb3VudGluZyIselA9ezIzMDoxfSxGeD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5sb29wcyIsQmg9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUubG9vcHMub3JkZXJpbmciLERiPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLmxvb3BzLnJvdXRpbmciLHFFZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5wcmVzZXJ2ZW9yZGVyIixPZD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS53cmFwcGluZyIsb3U9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5vcHRpb25zIiwkaGU9IklOVEVSQUNUSVZFIixIRWU9IkdSRUVEWSIsVzN0PSJERVBUSF9GSVJTVCIsWTN0PSJFREdFX0xFTkdUSCIsWDN0PSJTRUxGX0xPT1BTIixRM3Q9ImZpcnN0VHJ5V2l0aEluaXRpYWxPcmRlciIsVkVlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5kaXJlY3Rpb25Db25ncnVlbmN5IixVRWU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmZlZWRiYWNrRWRnZXMiLGZHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5pbnRlcmFjdGl2ZVJlZmVyZW5jZVBvaW50IixHRWU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm1lcmdlRWRnZXMiLEtFZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubWVyZ2VIaWVyYXJjaHlFZGdlcyIsV0VlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5hbGxvd05vbkZsb3dQb3J0c1RvU3dpdGNoU2lkZXMiLFlFZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQucG9ydFNvcnRpbmdTdHJhdGVneSIsWEVlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC50aG9yb3VnaG5lc3MiLFFFZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQudW5uZWNlc3NhcnlCZW5kcG9pbnRzIixKRWU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmdlbmVyYXRlUG9zaXRpb25BbmRMYXllcklkcyIsemhlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jeWNsZUJyZWFraW5nLnN0cmF0ZWd5IixxUD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcuc3RyYXRlZ3kiLFpFZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubGF5ZXJDb25zdHJhaW50IixlVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLmxheWVyQ2hvaWNlQ29uc3RyYWludCIsdFRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5sYXllcklkIixxaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm1pbldpZHRoLnVwcGVyQm91bmRPbldpZHRoIixIaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm1pbldpZHRoLnVwcGVyTGF5ZXJFc3RpbWF0aW9uU2NhbGluZ0ZhY3RvciIsVmhlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5ub2RlUHJvbW90aW9uLnN0cmF0ZWd5IixVaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm5vZGVQcm9tb3Rpb24ubWF4SXRlcmF0aW9ucyIsR2hlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5jb2ZmbWFuR3JhaGFtLmxheWVyQm91bmQiLHBMPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5zdHJhdGVneSIsblRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5mb3JjZU5vZGVNb2RlbE9yZGVyIixLaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmhpZXJhcmNoaWNhbFN3ZWVwaW5lc3MiLFdoZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uc2VtaUludGVyYWN0aXZlIixyVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmluTGF5ZXJQcmVkT2YiLGlUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uaW5MYXllclN1Y2NPZiIsc1RlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5wb3NpdGlvbkNob2ljZUNvbnN0cmFpbnQiLGFUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24ucG9zaXRpb25JZCIsb1RlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2guYWN0aXZhdGlvblRocmVzaG9sZCIsWWhlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2gudHlwZSIsZEc9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaEhpZXJhcmNoaWNhbC50eXBlIixrNj0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5zdHJhdGVneSIsZ0c9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuZmF2b3JTdHJhaWdodEVkZ2VzIixYaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuYmsuZWRnZVN0cmFpZ2h0ZW5pbmciLFFoZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5iay5maXhlZEFsaWdubWVudCIsSmhlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub2RlUGxhY2VtZW50LmxpbmVhclNlZ21lbnRzLmRlZmxlY3Rpb25EYW1wZW5pbmciLFpoZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkiLGVmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkuZGVmYXVsdCIsY1RlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcERpc3RyaWJ1dGlvbiIsdVRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcE9yZGVyaW5nIixwRz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5tb2RlIixiRz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5zbG9wcHkubGF5ZXJTcGFjaW5nRmFjdG9yIix0ZmU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VSb3V0aW5nLnBvbHlsaW5lLnNsb3BlZEVkZ2Vab25lV2lkdGgiLGxUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5iYXNlVmFsdWUiLGhUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnMiLGZUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlRWRnZUJldHdlZW5MYXllcnMiLGRUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5ub2RlTm9kZUJldHdlZW5MYXllcnMiLGdUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQucHJpb3JpdHkuZGlyZWN0aW9uIixwVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnByaW9yaXR5LnNob3J0bmVzcyIsYlRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5wcmlvcml0eS5zdHJhaWdodG5lc3MiLG5mZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5jb25uZWN0ZWRDb21wb25lbnRzIixtVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbXBhY3Rpb24ucG9zdENvbXBhY3Rpb24uc3RyYXRlZ3kiLHZUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbi5jb25zdHJhaW50cyIsbUc9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmhpZ2hEZWdyZWVOb2Rlcy50cmVhdG1lbnQiLHJmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaGlnaERlZ3JlZU5vZGVzLnRocmVzaG9sZCIsaWZlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5oaWdoRGVncmVlTm9kZXMudHJlZUhlaWdodCIsZnA9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnN0cmF0ZWd5Iix2Rz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuYWRkaXRpb25hbEVkZ2VTcGFjaW5nIix3Rz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY29ycmVjdGlvbkZhY3RvciIsYkw9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcuc3RyYXRlZ3kiLHNmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY3V0dGluZy5jdXRzIixhZmU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcubXNkLmZyZWVkb20iLHlHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy52YWxpZGlmeS5zdHJhdGVneSIseEc9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnZhbGlkaWZ5LmZvcmJpZGRlbkluZGljZXMiLGtHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuaW1wcm92ZUN1dHMiLEVHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuZGlzdGFuY2VQZW5hbHR5IixvZmU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLm11bHRpRWRnZS5pbXByb3ZlV3JhcHBlZEVkZ2VzIix3VGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VMYWJlbHMuc2lkZVNlbGVjdGlvbiIseVRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlTGFiZWxzLmNlbnRlckxhYmVsUGxhY2VtZW50U3RyYXRlZ3kiLFRHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuc3RyYXRlZ3kiLHhUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLnBvcnRNb2RlbE9yZGVyIixrVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbnNpZGVyTW9kZWxPcmRlci5ub01vZGVsT3JkZXIiLGNmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmNvbXBvbmVudHMiLEVUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmxvbmdFZGdlU3RyYXRlZ3kiLHVmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmNyb3NzaW5nQ291bnRlck5vZGVJbmZsdWVuY2UiLGxmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmNyb3NzaW5nQ291bnRlclBvcnRJbmZsdWVuY2UiLGhmZT0ibGF5ZXJpbmciLEozdD0ibGF5ZXJpbmcubWluV2lkdGgiLFozdD0ibGF5ZXJpbmcubm9kZVByb21vdGlvbiIsZ1Q9ImNyb3NzaW5nTWluaW1pemF0aW9uIixDRz0ib3JnLmVjbGlwc2UuZWxrLmhpZXJhcmNoeUhhbmRsaW5nIixleXQ9ImNyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaCIsdHl0PSJub2RlUGxhY2VtZW50IixueXQ9Im5vZGVQbGFjZW1lbnQuYmsiLHJ5dD0iZWRnZVJvdXRpbmciLEhQPSJvcmcuZWNsaXBzZS5lbGsuZWRnZVJvdXRpbmciLFUxPSJzcGFjaW5nIixUVGU9InByaW9yaXR5IixDVGU9ImNvbXBhY3Rpb24iLGl5dD0iY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbiIsc3l0PSJTcGVjaWZpZXMgd2hldGhlciBhbmQgaG93IHBvc3QtcHJvY2VzcyBjb21wYWN0aW9uIGlzIGFwcGxpZWQuIixTVGU9ImhpZ2hEZWdyZWVOb2RlcyIsX1RlPSJ3cmFwcGluZyIsYXl0PSJ3cmFwcGluZy5jdXR0aW5nIixveXQ9IndyYXBwaW5nLnZhbGlkaWZ5IixBVGU9IndyYXBwaW5nLm11bHRpRWRnZSIsZmZlPSJlZGdlTGFiZWxzIixtTD0iY29uc2lkZXJNb2RlbE9yZGVyIixMVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmNvbW1lbnRDb21tZW50IixNVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmNvbW1lbnROb2RlIixEVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmVkZ2VFZGdlIixkZmU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmVkZ2VOb2RlIixJVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsTGFiZWwiLE9UZT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubGFiZWxQb3J0SG9yaXpvbnRhbCIsTlRlPSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbFBvcnRWZXJ0aWNhbCIsUFRlPSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbE5vZGUiLEJUZT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubm9kZVNlbGZMb29wIixGVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLnBvcnRQb3J0IixSVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmluZGl2aWR1YWwiLGpUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnQuYm9yZGVyT2Zmc2V0IiwkVGU9Im9yZy5lY2xpcHNlLmVsay5ub0xheW91dCIselRlPSJvcmcuZWNsaXBzZS5lbGsucG9ydC5zaWRlIixWUD0ib3JnLmVjbGlwc2UuZWxrLmRlYnVnTW9kZSIscVRlPSJvcmcuZWNsaXBzZS5lbGsuYWxpZ25tZW50IixIVGU9Im9yZy5lY2xpcHNlLmVsay5pbnNpZGVTZWxmTG9vcHMuYWN0aXZhdGUiLFZUZT0ib3JnLmVjbGlwc2UuZWxrLmluc2lkZVNlbGZMb29wcy55byIsZ2ZlPSJvcmcuZWNsaXBzZS5lbGsuZGlyZWN0aW9uIixVVGU9Im9yZy5lY2xpcHNlLmVsay5ub2RlTGFiZWxzLnBhZGRpbmciLEdUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMubmV4dFRvUG9ydElmUG9zc2libGUiLEtUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMudHJlYXRBc0dyb3VwIixXVGU9Im9yZy5lY2xpcHNlLmVsay5wb3J0QWxpZ25tZW50LmRlZmF1bHQiLFlUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQubm9ydGgiLFhUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQuc291dGgiLFFUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQud2VzdCIsSlRlPSJvcmcuZWNsaXBzZS5lbGsucG9ydEFsaWdubWVudC5lYXN0IixTRz0ib3JnLmVjbGlwc2UuZWxrLmNvbnRlbnRBbGlnbm1lbnQiLFpUZT0ib3JnLmVjbGlwc2UuZWxrLmp1bmN0aW9uUG9pbnRzIixlQ2U9Im9yZy5lY2xpcHNlLmVsay5lZGdlTGFiZWxzLnBsYWNlbWVudCIsdENlPSJvcmcuZWNsaXBzZS5lbGsucG9ydC5pbmRleCIsbkNlPSJvcmcuZWNsaXBzZS5lbGsuY29tbWVudEJveCIsckNlPSJvcmcuZWNsaXBzZS5lbGsuaHlwZXJub2RlIixpQ2U9Im9yZy5lY2xpcHNlLmVsay5wb3J0LmFuY2hvciIscGZlPSJvcmcuZWNsaXBzZS5lbGsucGFydGl0aW9uaW5nLmFjdGl2YXRlIixiZmU9Im9yZy5lY2xpcHNlLmVsay5wYXJ0aXRpb25pbmcucGFydGl0aW9uIixfRz0ib3JnLmVjbGlwc2UuZWxrLnBvc2l0aW9uIixzQ2U9Im9yZy5lY2xpcHNlLmVsay5tYXJnaW5zIixhQ2U9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLnBvcnRzU3Vycm91bmRpbmciLEFHPSJvcmcuZWNsaXBzZS5lbGsuaW50ZXJhY3RpdmVMYXlvdXQiLFVjPSJvcmcuZWNsaXBzZS5lbGsuY29yZS51dGlsIixvQ2U9ezM6MSw0OjEsNToxLDYwMToxfSxjeXQ9Ik5FVFdPUktfU0lNUExFWCIsY0NlPSJTSU1QTEUiLFVvPXsxMDY6MSw0NzoxfSxMRz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAxY3ljbGVzIixkcD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAybGF5ZXJzIix1Q2U9ezQxMzoxLDIzMDoxfSx1eXQ9ezg0NjoxLDM6MSw0OjF9LENsPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlciIsR289Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNG5vZGVzIixseXQ9ezM6MSw0OjEsNToxLDg1NDoxfSxOZD0xZS01LEliPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDRub2Rlcy5iayIsbWZlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcyIsaTE9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNWVkZ2VzLm9ydGhvZ29uYWwiLHZmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnA1ZWRnZXMub3J0aG9nb25hbC5kaXJlY3Rpb24iLHdmZT0xZS02LFp5PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcy5zcGxpbmVzIix5ZmU9LjA5OTk5OTk5OTk5OTk5OTk4LE1HPTFlLTgsaHl0PTQuNzEyMzg4OTgwMzg0NjksbENlPTMuMTQxNTkyNjUzNTg5NzkzLGdwPSJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZSIseGZlPS4xMDAwMDAwMDE0OTAxMTYxMixERz0iU1VQRVJfUk9PVCIsdkw9Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLmdyYXBoIixoQ2U9LTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixTdT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUuaW50ZXJtZWRpYXRlIixmeXQ9IlByb2Nlc3NvciBjb21wdXRlIGZhbm91dCIsSUc9ezM6MSw2OjEsNDoxLDU6MSw1MzQ6MSwxMDA6MSwxMTU6MX0sZHl0PSJTZXQgbmVpZ2hib3JzIGluIGxldmVsIixVUD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUub3B0aW9ucyIsZ3l0PSJERVNDRU5EQU5UUyIsZkNlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLmNvbXBhY3Rpb24iLGRDZT0ib3JnLmVjbGlwc2UuZWxrLm1ydHJlZS5lZGdlRW5kVGV4dHVyZUxlbmd0aCIsZ0NlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLnRyZWVMZXZlbCIscENlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLnBvc2l0aW9uQ29uc3RyYWludCIsYkNlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLndlaWdodGluZyIsbUNlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLmVkZ2VSb3V0aW5nTW9kZSIsdkNlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLnNlYXJjaE9yZGVyIixweXQ9IlBvc2l0aW9uIENvbnN0cmFpbnQiLFh1PSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlIixieXQ9Im9yZy5lY2xpcHNlLmVsay50cmVlIixteXQ9IlByb2Nlc3NvciBhcnJhbmdlIGxldmVsIixwVD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDJvcmRlciIsdmg9Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLnA0cm91dGUiLHdDZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwiLGl2PTYuMjgzMTg1MzA3MTc5NTg2LHlDZT0iQmVmb3JlIix4Q2U9NWUtMzI0LE9HPSJBZnRlciIsa0NlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUiLHZ5dD0iQ09NUEFDVElPTiIsa2ZlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUuY29tcGFjdGlvbiIsd3l0PXszOjEsNDoxLDU6MSwxMDA6MX0sRUNlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUub3B0aW1pemF0aW9uIixFZmU9Ik5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheW91dCBvcHRpb24gIix3TD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwub3B0aW9ucyIsVENlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNlbnRlck9uUm9vdCIsQ0NlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLm9yZGVySWQiLFNDZT0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5yYWRpdXMiLE5HPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnJvdGF0ZSIsVGZlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3RvciIsQ2ZlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3Rpb25TdGVwU2l6ZSIsX0NlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnNvcnRlciIsQUNlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLndlZGdlQ3JpdGVyaWEiLExDZT0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5vcHRpbWl6YXRpb25Dcml0ZXJpYSIsU2ZlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnJvdGF0aW9uLnRhcmdldEFuZ2xlIixfZmU9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwucm90YXRpb24uY29tcHV0ZUFkZGl0aW9uYWxXZWRnZVNwYWNlIixNQ2U9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwucm90YXRpb24ub3V0Z29pbmdFZGdlQW5nbGVzIix5eXQ9IkNvbXBhY3Rpb24iLERDZT0icm90YXRpb24iLGdmPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsIix4eXQ9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLnAxcG9zaXRpb24ud2VkZ2UiLElDZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuc29ydGluZyIsa3l0PTUuNDk3Nzg3MTQzNzgyMTM4LEV5dD0zLjkyNjk5MDgxNjk4NzI0MTQsVHl0PTIuMzU2MTk0NDkwMTkyMzQ1LEN5dD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZyIsUEc9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcuaW50ZXJtZWRpYXRlIixBZmU9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcub3B0aW9ucyIsT0NlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcudHJ5Ym94IixOQ2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5jdXJyZW50UG9zaXRpb24iLFBDZT0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLmRlc2lyZWRQb3NpdGlvbiIsQkNlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcuaW5OZXdSb3ciLEZDZT0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLndpZHRoQXBwcm94aW1hdGlvbi5zdHJhdGVneSIsUkNlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcud2lkdGhBcHByb3hpbWF0aW9uLnRhcmdldFdpZHRoIixqQ2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy53aWR0aEFwcHJveGltYXRpb24ub3B0aW1pemF0aW9uR29hbCIsJENlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcud2lkdGhBcHByb3hpbWF0aW9uLmxhc3RQbGFjZVNoaWZ0Iix6Q2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5wYWNraW5nLnN0cmF0ZWd5IixxQ2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5wYWNraW5nLmNvbXBhY3Rpb24ucm93SGVpZ2h0UmVldmFsdWF0aW9uIixIQ2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5wYWNraW5nLmNvbXBhY3Rpb24uaXRlcmF0aW9ucyIsVkNlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcud2hpdGVTcGFjZUVsaW1pbmF0aW9uLnN0cmF0ZWd5IixMZmU9IndpZHRoQXBwcm94aW1hdGlvbiIsU3l0PSJDb21wYWN0aW9uIFN0cmF0ZWd5IixfeXQ9InBhY2tpbmcuY29tcGFjdGlvbiIsdGg9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZyIsYlQ9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcucDF3aWR0aGFwcHJveGltYXRpb24iLEJHPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLnAycGFja2luZyIsQXl0PSJObyBDb21wYWN0aW9uIixVQ2U9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcucDN3aGl0ZXNwYWNlZWxpbWluYXRpb24iLEdQPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLnV0aWwiLEZHPSJObyBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgZm9yICIsZTQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUiLHQ0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLm9wdGlvbnMiLEp3PSJvcmcuZWNsaXBzZS5lbGsuc3BvcmVDb21wYWN0aW9uIixNZmU9Im9yZy5lY2xpcHNlLmVsay51bmRlcmx5aW5nTGF5b3V0QWxnb3JpdGhtIixHQ2U9Im9yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIudHJlZUNvbnN0cnVjdGlvbiIsS0NlPSJvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnNwYW5uaW5nVHJlZUNvc3RGdW5jdGlvbiIsRGZlPSJvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnByZWZlcnJlZFJvb3QiLElmZT0ib3JnLmVjbGlwc2UuZWxrLnByb2Nlc3NpbmdPcmRlci5yb290U2VsZWN0aW9uIixPZmU9Im9yZy5lY2xpcHNlLmVsay5zdHJ1Y3R1cmUuc3RydWN0dXJlRXh0cmFjdGlvblN0cmF0ZWd5IixXQ2U9Im9yZy5lY2xpcHNlLmVsay5jb21wYWN0aW9uLmNvbXBhY3Rpb25TdHJhdGVneSIsWUNlPSJvcmcuZWNsaXBzZS5lbGsuY29tcGFjdGlvbi5vcnRob2dvbmFsIixYQ2U9Im9yZy5lY2xpcHNlLmVsay5vdmVybGFwUmVtb3ZhbC5tYXhJdGVyYXRpb25zIixRQ2U9Im9yZy5lY2xpcHNlLmVsay5vdmVybGFwUmVtb3ZhbC5ydW5TY2FubGluZSIsTmZlPSJwcm9jZXNzaW5nT3JkZXIiLEx5dD0ib3ZlcmxhcFJlbW92YWwiLG1UPSJvcmcuZWNsaXBzZS5lbGsuc3BvcmVPdmVybGFwIixNeXQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUucDFzdHJ1Y3R1cmUiLFBmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5wMnByb2Nlc3NpbmdvcmRlciIsQmZlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLnAzZXhlY3V0aW9uIixEeXQ9IlRvcGRvd24gTGF5b3V0IixJeXQ9IkludmFsaWQgaW5kZXg6ICIsdlQ9Im9yZy5lY2xpcHNlLmVsay5jb3JlLmFsZyIsRTY9ezM0MToxfSxuND17Mjk1OjF9LE95dD0iTWFrZSBzdXJlIGl0cyB0eXBlIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgIixKQ2U9IiB1dGlsaXR5IGNsYXNzLiIsd1Q9InRydWUiLEZmZT0iZmFsc2UiLE55dD0iQ291bGRuJ3QgY2xvbmUgcHJvcGVydHkgJyIsWnc9LjA1LG5oPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5vcHRpb25zIixQeXQ9MS4yOTk5OTk5NTIzMTYyODQyLGUzPSJvcmcuZWNsaXBzZS5lbGsuYm94IixaQ2U9Im9yZy5lY2xpcHNlLmVsay5leHBhbmROb2RlcyIsZVNlPSJvcmcuZWNsaXBzZS5lbGsuYm94LnBhY2tpbmdNb2RlIixCeXQ9Im9yZy5lY2xpcHNlLmVsay5hbGdvcml0aG0iLEZ5dD0ib3JnLmVjbGlwc2UuZWxrLnJlc29sdmVkQWxnb3JpdGhtIix0U2U9Im9yZy5lY2xpcHNlLmVsay5iZW5kUG9pbnRzIixzT249Im9yZy5lY2xpcHNlLmVsay5sYWJlbE1hbmFnZXIiLFJ5dD0ib3JnLmVjbGlwc2UuZWxrLnNjYWxlRmFjdG9yIixqeXQ9Im9yZy5lY2xpcHNlLmVsay5jaGlsZEFyZWFXaWR0aCIsJHl0PSJvcmcuZWNsaXBzZS5lbGsuY2hpbGRBcmVhSGVpZ2h0Iix6eXQ9Im9yZy5lY2xpcHNlLmVsay5hbmltYXRlIixxeXQ9Im9yZy5lY2xpcHNlLmVsay5hbmltVGltZUZhY3RvciIsSHl0PSJvcmcuZWNsaXBzZS5lbGsubGF5b3V0QW5jZXN0b3JzIixWeXQ9Im9yZy5lY2xpcHNlLmVsay5tYXhBbmltVGltZSIsVXl0PSJvcmcuZWNsaXBzZS5lbGsubWluQW5pbVRpbWUiLEd5dD0ib3JnLmVjbGlwc2UuZWxrLnByb2dyZXNzQmFyIixLeXQ9Im9yZy5lY2xpcHNlLmVsay52YWxpZGF0ZUdyYXBoIixXeXQ9Im9yZy5lY2xpcHNlLmVsay52YWxpZGF0ZU9wdGlvbnMiLFl5dD0ib3JnLmVjbGlwc2UuZWxrLnpvb21Ub0ZpdCIsYU9uPSJvcmcuZWNsaXBzZS5lbGsuZm9udC5uYW1lIixYeXQ9Im9yZy5lY2xpcHNlLmVsay5mb250LnNpemUiLG5TZT0ib3JnLmVjbGlwc2UuZWxrLnRvcGRvd24uc2l6ZUFwcHJveGltYXRvciIsclNlPSJvcmcuZWNsaXBzZS5lbGsudG9wZG93bi5zY2FsZUNhcCIsUXl0PSJvcmcuZWNsaXBzZS5lbGsuZWRnZS50eXBlIixKeXQ9InBhcnRpdGlvbmluZyIsWnl0PSJub2RlTGFiZWxzIixSRz0icG9ydEFsaWdubWVudCIsUmZlPSJub2RlU2l6ZSIsamZlPSJwb3J0IixpU2U9InBvcnRMYWJlbHMiLEtQPSJ0b3Bkb3duIixlNHQ9Imluc2lkZVNlbGZMb29wcyIseUw9Im9yZy5lY2xpcHNlLmVsay5maXhlZCIsakc9Im9yZy5lY2xpcHNlLmVsay5yYW5kb20iLHNTZT17MzoxLDM0OjEsMjI6MSwzNDc6MX0sdDR0PSJwb3J0IG11c3QgaGF2ZSBhIHBhcmVudCBub2RlIHRvIGNhbGN1bGF0ZSB0aGUgcG9ydCBzaWRlIixuNHQ9IlRoZSBlZGdlIG5lZWRzIHRvIGhhdmUgZXhhY3RseSBvbmUgZWRnZSBzZWN0aW9uLiBGb3VuZDogIix4TD0ib3JnLmVjbGlwc2UuZWxrLmNvcmUudXRpbC5hZGFwdGVycyIscGY9Im9yZy5lY2xpcHNlLmVtZi5lY29yZSIsVDY9Im9yZy5lY2xpcHNlLmVsay5ncmFwaCIscjR0PSJFTWFwUHJvcGVydHlIb2xkZXIiLGk0dD0iRWxrQmVuZFBvaW50IixzNHQ9IkVsa0dyYXBoRWxlbWVudCIsYTR0PSJFbGtDb25uZWN0YWJsZVNoYXBlIixhU2U9IkVsa0VkZ2UiLG80dD0iRWxrRWRnZVNlY3Rpb24iLGM0dD0iRU1vZGVsRWxlbWVudCIsdTR0PSJFTmFtZWRFbGVtZW50IixvU2U9IkVsa0xhYmVsIixjU2U9IkVsa05vZGUiLHVTZT0iRWxrUG9ydCIsbDR0PXs5NDoxLDkzOjF9LFJ4PSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsIixPYj0iVGhlIGZlYXR1cmUgJyIsa0w9IicgaXMgbm90IGEgdmFsaWQgY2hhbmdlYWJsZSBmZWF0dXJlIixoNHQ9IkV4cGVjdGluZyBudWxsIiwkZmU9IicgaXMgbm90IGEgdmFsaWQgZmVhdHVyZSIsZjR0PSJUaGUgZmVhdHVyZSBJRCIsZDR0PSIgaXMgbm90IGEgdmFsaWQgZmVhdHVyZSBJRCIsZXU9MzI3NjgsZzR0PXsxMTA6MSw5NDoxLDkzOjEsNTg6MSw1NDoxLDk5OjF9LEduPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbCIsc3Y9Im9yZy5lY2xpcHNlLmVsay5ncmFwaC5pbXBsIixFTD0iUmVjdXJzaXZlIGNvbnRhaW5tZW50IG5vdCBhbGxvd2VkIGZvciAiLHlUPSJUaGUgZGF0YXR5cGUgJyIsdDM9IicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIsemZlPSJUaGUgdmFsdWUgJyIsQzY9ezE5NToxLDM6MSw0OjF9LHFmZT0iVGhlIGNsYXNzICciLHhUPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2Vsay9FbGtHcmFwaCIsbFNlPSJwcm9wZXJ0eSIsVEw9InZhbHVlIixIZmU9InNvdXJjZSIscDR0PSJwcm9wZXJ0aWVzIixiNHQ9ImlkZW50aWZpZXIiLFZmZT0iaGVpZ2h0IixVZmU9IndpZHRoIixHZmU9InBhcmVudCIsS2ZlPSJ0ZXh0IixXZmU9ImNoaWxkcmVuIixtNHQ9ImhpZXJhcmNoaWNhbCIsaFNlPSJzb3VyY2VzIixZZmU9InRhcmdldHMiLGZTZT0ic2VjdGlvbnMiLCRHPSJiZW5kUG9pbnRzIixkU2U9Im91dGdvaW5nU2hhcGUiLGdTZT0iaW5jb21pbmdTaGFwZSIscFNlPSJvdXRnb2luZ1NlY3Rpb25zIixiU2U9ImluY29taW5nU2VjdGlvbnMiLFNvPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwiLG1TZT0iU2V2ZXJlIGltcGxlbWVudGF0aW9uIGVycm9yIGluIHRoZSBKc29uIHRvIEVsa0dyYXBoIGltcG9ydGVyLiIsUGQ9ImlkIixubz0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLmpzb24iLHZTZT0iVW5oYW5kbGVkIHBhcmFtZXRlciB0eXBlczogIix2NHQ9InN0YXJ0UG9pbnQiLHc0dD0iQW4gZWRnZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHNvdXJjZSBhbmQgb25lIHRhcmdldCAoZWRnZSBpZDogJyIsa1Q9IicpLiIseTR0PSJSZWZlcmVuY2VkIGVkZ2Ugc2VjdGlvbiBkb2VzIG5vdCBleGlzdDogIix4NHQ9IiAoZWRnZSBpZDogJyIsd1NlPSJ0YXJnZXQiLGs0dD0ic291cmNlUG9pbnQiLEU0dD0idGFyZ2V0UG9pbnQiLHpHPSJncm91cCIsX2k9Im5hbWUiLFQ0dD0iY29ubmVjdGFibGVTaGFwZSBjYW5ub3QgYmUgbnVsbCIsQzR0PSJlZGdlIGNhbm5vdCBiZSBudWxsIixYZmU9IlBhc3NlZCBlZGdlIGlzIG5vdCAnc2ltcGxlJy4iLHFHPSJvcmcuZWNsaXBzZS5lbGsuZ3JhcGgudXRpbCIsV1A9IlRoZSAnbm8gZHVwbGljYXRlcycgY29uc3RyYWludCBpcyB2aW9sYXRlZCIsUWZlPSJ0YXJnZXRJbmRleD0iLGF2PSIsIHNpemU9IixKZmU9InNvdXJjZUluZGV4PSIsQmQ9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjF9LFpmZT17MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDUxOjEsMTU6MSw1OToxLDcwOjEsNjY6MSw2MToxLDU5NjoxfSxIRz0ibG9nZ2luZyIsUzR0PSJtZWFzdXJlRXhlY3V0aW9uVGltZSIsXzR0PSJwYXJzZXIucGFyc2UuMSIsQTR0PSJwYXJzZXIucGFyc2UuMiIsVkc9InBhcnNlci5uZXh0LjEiLGUwZT0icGFyc2VyLm5leHQuMiIsTDR0PSJwYXJzZXIubmV4dC4zIixNNHQ9InBhcnNlci5uZXh0LjQiLG92PSJwYXJzZXIuZmFjdG9yLjEiLHlTZT0icGFyc2VyLmZhY3Rvci4yIixENHQ9InBhcnNlci5mYWN0b3IuMyIsSTR0PSJwYXJzZXIuZmFjdG9yLjQiLE80dD0icGFyc2VyLmZhY3Rvci41IixONHQ9InBhcnNlci5mYWN0b3IuNiIsUDR0PSJwYXJzZXIuYXRvbS4xIixCNHQ9InBhcnNlci5hdG9tLjIiLEY0dD0icGFyc2VyLmF0b20uMyIseFNlPSJwYXJzZXIuYXRvbS40Iix0MGU9InBhcnNlci5hdG9tLjUiLGtTZT0icGFyc2VyLmNjLjEiLFVHPSJwYXJzZXIuY2MuMiIsUjR0PSJwYXJzZXIuY2MuMyIsajR0PSJwYXJzZXIuY2MuNSIsRVNlPSJwYXJzZXIuY2MuNiIsVFNlPSJwYXJzZXIuY2MuNyIsbjBlPSJwYXJzZXIuY2MuOCIsJDR0PSJwYXJzZXIub3BlLjEiLHo0dD0icGFyc2VyLm9wZS4yIixxNHQ9InBhcnNlci5vcGUuMyIsdzI9InBhcnNlci5kZXNjYXBlLjEiLEg0dD0icGFyc2VyLmRlc2NhcGUuMiIsVjR0PSJwYXJzZXIuZGVzY2FwZS4zIixVNHQ9InBhcnNlci5kZXNjYXBlLjQiLEc0dD0icGFyc2VyLmRlc2NhcGUuNSIsYmY9InBhcnNlci5wcm9jZXNzLjEiLEs0dD0icGFyc2VyLnF1YW50aWZpZXIuMSIsVzR0PSJwYXJzZXIucXVhbnRpZmllci4yIixZNHQ9InBhcnNlci5xdWFudGlmaWVyLjMiLFg0dD0icGFyc2VyLnF1YW50aWZpZXIuNCIsQ1NlPSJwYXJzZXIucXVhbnRpZmllci41IixRNHQ9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5IixTU2U9ezQyNDoxLDY4NjoxfSxKNHQ9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDcwOjEsNjE6MX0sWVA9ezM3ODoxLDE1MjoxfSxDTD0iaW5kZXg9IixyMGU9ezM6MSw0OjEsNToxLDEyOToxfSxaNHQ9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2MToxfSxfU2U9ezM6MSw2OjEsNDoxLDU6MSwxOTg6MX0sZTV0PXszOjEsNDoxLDU6MSwxNzM6MSwzNzk6MX0sdDV0PSI7Lz86QCY9KyQsIixuNXQ9ImludmFsaWQgYXV0aG9yaXR5OiAiLHI1dD0iRUFubm90YXRpb24iLGk1dD0iRVR5cGVkRWxlbWVudCIsczV0PSJFU3RydWN0dXJhbEZlYXR1cmUiLGE1dD0iRUF0dHJpYnV0ZSIsbzV0PSJFQ2xhc3NpZmllciIsYzV0PSJFRW51bUxpdGVyYWwiLHU1dD0iRUdlbmVyaWNUeXBlIixsNXQ9IkVPcGVyYXRpb24iLGg1dD0iRVBhcmFtZXRlciIsZjV0PSJFUmVmZXJlbmNlIixkNXQ9IkVUeXBlUGFyYW1ldGVyIix1cz0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwiLGkwZT17Nzk6MX0sQVNlPXszOjEsMjA6MSwxNjoxLDE1OjEsNjE6MSw1OTc6MSw3OToxLDcxOjEsOTc6MX0sZzV0PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwJEVudHJ5IixTbD04MTkyLHI0PTIwNDgsU0w9ImJ5dGUiLEdHPSJjaGFyIixfTD0iZG91YmxlIixBTD0iZmxvYXQiLExMPSJpbnQiLE1MPSJsb25nIixETD0ic2hvcnQiLHA1dD0iamF2YS5sYW5nLk9iamVjdCIsUzY9ezM6MSw0OjEsNToxLDI1NDoxfSxMU2U9ezM6MSw0OjEsNToxLDY4ODoxfSxiNXQ9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjEsNzE6MX0sa2M9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjEsNzk6MSw3MToxLDk3OjF9LFhQPSJtaXhlZCIsbGk9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSIsQmY9ImtpbmQiLG01dD17MzoxLDQ6MSw1OjEsNjg5OjF9LE1TZT17MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNzA6MSw2MToxLDc5OjEsNzE6MSw5NzoxfSxLRz17MjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDYxOjEsNzE6MX0sV0c9ezUxOjEsMTI4OjEsMjg3OjF9LFlHPXs3NjoxLDM0MzoxfSxYRz0iVGhlIHZhbHVlIG9mIHR5cGUgJyIsUUc9IicgbXVzdCBiZSBvZiB0eXBlICciLF82PTEzNTIsRmY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiLEpHPS0zMjc2OCxuMz0iY29uc3RyYWludHMiLGhvPSJiYXNlVHlwZSIsdjV0PSJnZXRFU3RydWN0dXJhbEZlYXR1cmUiLHc1dD0iZ2V0RmVhdHVyZUlEIixJTD0iZmVhdHVyZSIseTV0PSJnZXRPcGVyYXRpb25JRCIsRFNlPSJvcGVyYXRpb24iLHg1dD0iZGVmYXVsdFZhbHVlIixrNXQ9ImVUeXBlUGFyYW1ldGVycyIsRTV0PSJpc0luc3RhbmNlIixUNXQ9ImdldEVFbnVtTGl0ZXJhbCIsQzV0PSJlQ29udGFpbmluZ0NsYXNzIix5aT17NTc6MX0sUzV0PXszOjEsNDoxLDU6MSwxMjQ6MX0sXzV0PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UiLEE1dD17OTQ6MSw5MzoxLDU5OToxLDIwMzQ6MX0sczBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbCIsSVNlPSJ1bnNwZWNpZmllZCIsUVA9InNpbXBsZSIsWkc9ImF0dHJpYnV0ZSIsTDV0PSJhdHRyaWJ1dGVXaWxkY2FyZCIsZUs9ImVsZW1lbnQiLGEwZT0iZWxlbWVudFdpbGRjYXJkIixzMT0iY29sbGFwc2UiLG8wZT0iaXRlbVR5cGUiLHRLPSJuYW1lc3BhY2UiLEpQPSIjI3RhcmdldE5hbWVzcGFjZSIsUmY9IndoaXRlU3BhY2UiLE9TZT0id2lsZGNhcmRzIixjdj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIixjMGU9IiMjYW55IixFVD0idW5pbml0aWFsaXplZCIsWlA9IlRoZSBtdWx0aXBsaWNpdHkgY29uc3RyYWludCBpcyB2aW9sYXRlZCIsbks9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZSIsTTV0PSJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLEQ1dD0iU2ltcGxlQW55VHlwZSIsSTV0PSJYTUxUeXBlRG9jdW1lbnRSb290IixlYT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmltcGwiLGVCPSJJTkYiLE81dD0icHJvY2Vzc2luZyIsTjV0PSJFTlRJVElFU18uX2Jhc2UiLE5TZT0ibWluTGVuZ3RoIixQU2U9IkVOVElUWSIscks9Ik5DTmFtZSIsUDV0PSJJRFJFRlNfLl9iYXNlIixCU2U9ImludGVnZXIiLHUwZT0idG9rZW4iLGwwZT0icGF0dGVybiIsQjV0PSJbYS16QS1aXXsxLDh9KC1bYS16QS1aMC05XXsxLDh9KSoiLEZTZT0iXFxpXFxjKiIsRjV0PSJbXFxpLVs6XV1bXFxjLVs6XV0qIixSNXQ9Im5vblBvc2l0aXZlSW50ZWdlciIsdEI9Im1heEluY2x1c2l2ZSIsUlNlPSJOTVRPS0VOIixqNXQ9Ik5NVE9LRU5TXy5fYmFzZSIsalNlPSJub25OZWdhdGl2ZUludGVnZXIiLG5CPSJtaW5JbmNsdXNpdmUiLCQ1dD0ibm9ybWFsaXplZFN0cmluZyIsejV0PSJ1bnNpZ25lZEJ5dGUiLHE1dD0idW5zaWduZWRJbnQiLEg1dD0iMTg0NDY3NDQwNzM3MDk1NTE2MTUiLFY1dD0idW5zaWduZWRTaG9ydCIsVTV0PSJwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLHkyPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuaW50ZXJuYWwiLFRUPTExMTQxMTEsRzV0PSJJbnRlcm5hbCBFcnJvcjogc2hvcnRoYW5kczogXFx1IixPTD0ieG1sOmlzRGlnaXQiLGgwZT0ieG1sOmlzV29yZCIsZjBlPSJ4bWw6aXNTcGFjZSIsZDBlPSJ4bWw6aXNOYW1lQ2hhciIsZzBlPSJ4bWw6aXNJbml0aWFsTmFtZUNoYXIiLEs1dD0iMDnZoNmp27DbueClpuClr+CnpuCnr+CppuCpr+CrpuCrr+CtpuCtr+Cvp+Cvr+CxpuCxr+CzpuCzr+C1puC1r+C5kOC5meC7kOC7meC8oOC8qSIsVzV0PSJBWmF6w4DDlsOYw7bDuMSxxLTEvsWBxYjFisW+xoDHg8eNx7DHtMe1x7rIl8mQyqjKu8uBzobOhs6IzorOjM6Mzo7Ooc6jz47PkM+Wz5rPms+cz5zPns+ez6DPoM+iz7PQgdCM0I7Rj9GR0ZzRntKB0pDThNOH04jTi9OM05DTq9Ou07XTuNO51LHVltWZ1ZnVodaG15DXqtew17LYodi62YHZitmx2rfautq+24DbjtuQ25PblduV26XbpuCkheCkueCkveCkveClmOCloeCmheCmjOCmj+CmkOCmk+CmqOCmquCmsOCmsuCmsuCmtuCmueCnnOCnneCnn+CnoeCnsOCnseCoheCoiuCoj+CokOCok+CoqOCoquCosOCosuCos+CoteCotuCouOCoueCpmeCpnOCpnuCpnuCpsuCptOCqheCqi+CqjeCqjeCqj+CqkeCqk+CqqOCqquCqsOCqsuCqs+CqteCqueCqveCqveCroOCroOCsheCsjOCsj+CskOCsk+CsqOCsquCssOCssuCss+CstuCsueCsveCsveCtnOCtneCtn+CtoeCuheCuiuCujuCukOCukuCuleCumeCumuCunOCunOCunuCun+Cuo+CupOCuqOCuquCuruCuteCut+CuueCwheCwjOCwjuCwkOCwkuCwqOCwquCws+CwteCwueCxoOCxoeCyheCyjOCyjuCykOCykuCyqOCyquCys+CyteCyueCznuCznuCzoOCzoeC0heC0jOC0juC0kOC0kuC0qOC0quC0ueC1oOC1oeC4geC4ruC4sOC4sOC4suC4s+C5gOC5heC6geC6guC6hOC6hOC6h+C6iOC6iuC6iuC6jeC6jeC6lOC6l+C6meC6n+C6oeC6o+C6peC6peC6p+C6p+C6quC6q+C6reC6ruC6sOC6sOC6suC6s+C6veC6veC7gOC7hOC9gOC9h+C9ieC9qeGCoOGDheGDkOGDtuGEgOGEgOGEguGEg+GEheGEh+GEieGEieGEi+GEjOGEjuGEkuGEvOGEvOGEvuGEvuGFgOGFgOGFjOGFjOGFjuGFjuGFkOGFkOGFlOGFleGFmeGFmeGFn+GFoeGFo+GFo+GFpeGFpeGFp+GFp+GFqeGFqeGFreGFruGFsuGFs+GFteGFteGGnuGGnuGGqOGGqOGGq+GGq+GGruGGr+GGt+GGuOGGuuGGuuGGvOGHguGHq+GHq+GHsOGHsOGHueGHueG4gOG6m+G6oOG7ueG8gOG8leG8mOG8neG8oOG9heG9iOG9jeG9kOG9l+G9meG9meG9m+G9m+G9neG9neG9n+G9veG+gOG+tOG+tuG+vOG+vuG+vuG/guG/hOG/huG/jOG/kOG/k+G/luG/m+G/oOG/rOG/suG/tOG/tuG/vOKEpuKEpuKEquKEq+KEruKEruKGgOKGguOAh+OAh+OAoeOAqeOBgeOClOOCoeODuuOEheOErOS4gOm+peqwgO2eoyIsWTV0PSJQcml2YXRlIFVzZSIscDBlPSJBU1NJR05FRCIsYjBlPSJcMH/CgMO/xIDFv8aAyY/JkMqvyrDLv8yAza/NsM+/0IDTv9Sw1o/WkNe/2IDbv9yA3Y/egN6/4KSA4KW/4KaA4Ke/4KiA4Km/4KqA4Ku/4KyA4K2/4K6A4K+/4LCA4LG/4LKA4LO/4LSA4LW/4LaA4Le/4LiA4Lm/4LqA4Lu/4LyA4L+/4YCA4YKf4YKg4YO/4YSA4Ye/4YiA4Y2/4Y6g4Y+/4ZCA4Zm/4ZqA4Zqf4Zqg4Zu/4Z6A4Z+/4aCA4aKv4biA4bu/4byA4b+/4oCA4oGv4oGw4oKf4oKg4oOP4oOQ4oO/4oSA4oWP4oWQ4oaP4oaQ4oe/4oiA4ou/4oyA4o+/4pCA4pC/4pGA4pGf4pGg4pO/4pSA4pW/4paA4paf4pag4pe/4piA4pu/4pyA4p6/4qCA4qO/4rqA4ru/4ryA4r+f4r+w4r+/44CA44C/44GA44Kf44Kg44O/44SA44Sv44Sw44aP44aQ44af44ag44a/44iA44u/44yA44+/45CA5La15LiA6b+/6oCA6pKP6pKQ6pOP6rCA7Z6j7oCA76O/76SA76u/76yA762P762Q77e/77ig77iv77iw77mP77mQ77mv77mw77u+XHVGRUZGXHVGRUZG77yA77+vIiwkU2U9IlVOQVNTSUdORUQiLENUPXszOjEsMTIyOjF9LFg1dD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLnV0aWwiLGlLPXszOjEsNDoxLDU6MSwzODE6MX0selNlPSJvcmcuZWNsaXBzZS54dGV4dC54YmFzZS5saWIiLFE1dD0iQ2Fubm90IGFkZCBlbGVtZW50cyB0byBhIFJhbmdlIixKNXQ9IkNhbm5vdCBzZXQgZWxlbWVudHMgaW4gYSBSYW5nZSIsWjV0PSJDYW5ub3QgcmVtb3ZlIGVsZW1lbnRzIGZyb20gYSBSYW5nZSIsZTZ0PSJ1c2VyLmFnZW50IixoLHNLLG0wZTtiLmdvb2c9Yi5nb29nfHx7fSxiLmdvb2cuZ2xvYmFsPWIuZ29vZy5nbG9iYWx8fGIsc0s9e30sRCgxLG51bGwse30sVCksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gSnR0KHRoaXMsdCl9LGguR2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SbX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBmdyh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBfbShiaCh0aGlzKSkrIkAiKyh0PWVzKHRoaXMpPj4+MCx0LnRvU3RyaW5nKDE2KSl9LGguZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkZiKGUpfSxoLmhhc2hDb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGIoKX0saC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkliKCl9O3ZhciB0NnQsbjZ0LHI2dDtEKDI5NywxLHsyOTc6MSwyMTI0OjF9LEI3ZSksaC52ZT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1uZXcgQjdlLG4uaT00LHQ+MT9uLmM9eW90KHRoaXMsdC0xKTpuLmM9dGhpcyxufSxoLndlPWZ1bmN0aW9uKCl7cmV0dXJuIEdnKHRoaXMpLHRoaXMuYn0saC54ZT1mdW5jdGlvbigpe3JldHVybiBfbSh0aGlzKX0saC55ZT1mdW5jdGlvbigpe3JldHVybiBHZyh0aGlzKSx0aGlzLmt9LGguemU9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5pJjQpIT0wfSxoLkFlPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaSYxKSE9MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiBLNmUodGhpcyl9LGguaT0wO3ZhciB3YT1JKFZjLCJPYmplY3QiLDEpLHFTZT1JKFZjLCJDbGFzcyIsMjk3KTtEKDIwOTYsMSx5UCksSSh4UCwiT3B0aW9uYWwiLDIwOTYpLEQoMTE5MSwyMDk2LHlQLF8pLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT10aGlzfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIDIwNDA3MzIzMzJ9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iT3B0aW9uYWwuYWJzZW50KCkifSxoLkpiPWZ1bmN0aW9uKHQpe3JldHVybiBYcih0KSxvXygpLHYwZX07dmFyIHYwZTtJKHhQLCJBYnNlbnQiLDExOTEpLEQoNjM2LDEse30sWmllKSxJKHhQLCJKb2luZXIiLDYzNik7dmFyIG9Pbj1rcyh4UCwiUHJlZGljYXRlIik7RCg1ODksMSx7MTc4OjEsNTg5OjEsMzoxLDQ2OjF9LGd6KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB5MHQodGhpcyx0KX0saC5MYj1mdW5jdGlvbih0KXtyZXR1cm4geTB0KHRoaXMsdCl9LGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNTg5KT8obj1sKHQsNTg5KSxPOWUodGhpcy5hLG4uYSkpOiExfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHE3ZSh0aGlzLmEpKzMwNjY1NDI1Mn0saC5JYj1mdW5jdGlvbigpe3JldHVybiBLOW4odGhpcy5hKX0sSSh4UCwiUHJlZGljYXRlcy9BbmRQcmVkaWNhdGUiLDU4OSksRCg0MTksMjA5Nix7NDE5OjEsMzoxfSxKUyksaC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCw0MTkpPyhuPWwodCw0MTkpLFBpKHRoaXMuYSxuLmEpKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiAxNTAyNDc2NTcyK2VzKHRoaXMuYSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gQXd0K3RoaXMuYSsiKSJ9LGguSmI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBKUyhfSCh0LktiKHRoaXMuYSksInRoZSBGdW5jdGlvbiBwYXNzZWQgdG8gT3B0aW9uYWwudHJhbnNmb3JtKCkgbXVzdCBub3QgcmV0dXJuIG51bGwuIikpfSxJKHhQLCJQcmVzZW50Iiw0MTkpLEQoMjA0LDEsZVQpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5RYj1mdW5jdGlvbigpe2pKZSgpfSxJKGRuLCJVbm1vZGlmaWFibGVJdGVyYXRvciIsMjA0KSxEKDIwNzYsMjA0LHRUKSxoLlFiPWZ1bmN0aW9uKCl7akplKCl9LGguUmI9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5XYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKGRuLCJVbm1vZGlmaWFibGVMaXN0SXRlcmF0b3IiLDIwNzYpLEQoMzk5LDIwNzYsdFQpLGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPHRoaXMuZH0saC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmM+MH0saC5QYj1mdW5jdGlvbigpe2lmKHRoaXMuYz49dGhpcy5kKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIHRoaXMuWGIodGhpcy5jKyspfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30saC5VYj1mdW5jdGlvbigpe2lmKHRoaXMuYzw9MCl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiB0aGlzLlhiKC0tdGhpcy5jKX0saC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMtMX0saC5jPTAsaC5kPTAsSShkbiwiQWJzdHJhY3RJbmRleGVkTGlzdEl0ZXJhdG9yIiwzOTkpLEQoNzEzLDIwNCxlVCksaC5PYj1mdW5jdGlvbigpe3JldHVybiB0Y2UodGhpcyl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gejZlKHRoaXMpfSxoLmU9MSxJKGRuLCJBYnN0cmFjdEl0ZXJhdG9yIiw3MTMpLEQoMjA4NCwxLHsyMjk6MX0pLGguWmI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmYsdHx8KHRoaXMuZj10aGlzLmFjKCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBFY2UodGhpcyx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLlpiKCkpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2MoKT09MH0saC5lYz1mdW5jdGlvbigpe3JldHVybiBXOCh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLlpiKCkpfSxJKGRuLCJBYnN0cmFjdE11bHRpbWFwIiwyMDg0KSxEKDc0MiwyMDg0LEptKSxoLiRiPWZ1bmN0aW9uKCl7bVYodGhpcyl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIGlaZSh0aGlzLHQpfSxoLmFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMayh0aGlzLHRoaXMuYyl9LGguaWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGMoKX0saC5iYz1mdW5jdGlvbigpe3JldHVybiBuZXcgcTUodGhpcyx0aGlzLmMpfSxoLmpjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWModGhpcy5oYygpKX0saC5rYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRUplKHRoaXMpfSxoLmxjPWZ1bmN0aW9uKCl7cmV0dXJuIEl1ZSh0aGlzLmMudmMoKS5OYygpLG5ldyBQLDY0LHRoaXMuZCl9LGguY2M9ZnVuY3Rpb24odCl7cmV0dXJuICRpKHRoaXMsdCl9LGguZmM9ZnVuY3Rpb24odCl7cmV0dXJuIEROKHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLm1jPWZ1bmN0aW9uKHQpe3JldHVybiBDbigpLG5ldyAkYSh0KX0saC5uYz1mdW5jdGlvbigpe3JldHVybiBuZXcga0plKHRoaXMpfSxoLm9jPWZ1bmN0aW9uKCl7cmV0dXJuIEl1ZSh0aGlzLmMuQ2MoKS5OYygpLG5ldyBBLDY0LHRoaXMuZCl9LGgucGM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IFlIKHRoaXMsdCxuLG51bGwpfSxoLmQ9MCxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAiLDc0MiksRCgxNjk2LDc0MixKbSksaC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgQnUodGhpcy5hKX0saC5qYz1mdW5jdGlvbigpe3JldHVybiBDbigpLENuKCksX299LGguY2M9ZnVuY3Rpb24odCl7cmV0dXJuIGwoJGkodGhpcyx0KSwxNSl9LGguZmM9ZnVuY3Rpb24odCl7cmV0dXJuIGwoRE4odGhpcyx0KSwxNSl9LGguWmI9ZnVuY3Rpb24oKXtyZXR1cm4gZXgodGhpcyl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIEVjZSh0aGlzLHQpfSxoLnFjPWZ1bmN0aW9uKHQpe3JldHVybiBsKCRpKHRoaXMsdCksMTUpfSxoLnJjPWZ1bmN0aW9uKHQpe3JldHVybiBsKEROKHRoaXMsdCksMTUpfSxoLm1jPWZ1bmN0aW9uKHQpe3JldHVybiBpb2UobCh0LDE1KSl9LGgucGM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gX2N0KHRoaXMsdCxsKG4sMTUpLG51bGwpfSxJKGRuLCJBYnN0cmFjdExpc3RNdWx0aW1hcCIsMTY5NiksRCg3NDgsMSxPYSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5PYigpfHx0aGlzLmUuT2IoKX0saC5QYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmUuT2IoKXx8KHQ9bCh0aGlzLmMuUGIoKSw0NCksdGhpcy5iPXQubGQoKSx0aGlzLmE9bCh0Lm1kKCksMTYpLHRoaXMuZT10aGlzLmEuS2MoKSksdGhpcy5zYyh0aGlzLmIsdGhpcy5lLlBiKCkpfSxoLlFiPWZ1bmN0aW9uKCl7dGhpcy5lLlFiKCksbChMZih0aGlzLmEpLDE2KS5kYygpJiZ0aGlzLmMuUWIoKSwtLXRoaXMuZC5kfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvSXRyIiw3NDgpLEQoMTEyOSw3NDgsT2Esa0plKSxoLnNjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG59LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC8xIiwxMTI5KSxEKDExMzAsMSx7fSxBKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTYpLk5jKCl9LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC8xbWV0aG9kcmVmJHNwbGl0ZXJhdG9yJFR5cGUiLDExMzApLEQoMTEzMSw3NDgsT2EsRUplKSxoLnNjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBpdyh0LG4pfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMiIsMTEzMSk7dmFyIEhTZT1rcyhMciwiTWFwIik7RCgyMDY1LDEsV3cpLGgud2M9ZnVuY3Rpb24odCl7bUEodGhpcyx0KX0saC55Yz1mdW5jdGlvbih0LG4scil7cmV0dXJuIHFjZSh0aGlzLHQsbixyKX0saC4kYj1mdW5jdGlvbigpe3RoaXMudmMoKS4kYigpfSxoLnRjPWZ1bmN0aW9uKHQpe3JldHVybiBndWUodGhpcyx0KX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4hIUR4ZSh0aGlzLHQsITEpfSxoLnVjPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtmb3Iocj10aGlzLnZjKCkuS2MoKTtyLk9iKCk7KWlmKG49bChyLlBiKCksNDQpLGE9bi5tZCgpLHFlKHQpPT09cWUoYSl8fHQhPW51bGwmJlBpKHQsYSkpcmV0dXJuITA7cmV0dXJuITF9LGguRmI9ZnVuY3Rpb24odCl7dmFyIG4scixhO2lmKHQ9PT10aGlzKXJldHVybiEwO2lmKCFEZSh0LDg1KXx8KGE9bCh0LDg1KSx0aGlzLmdjKCkhPWEuZ2MoKSkpcmV0dXJuITE7Zm9yKHI9YS52YygpLktjKCk7ci5PYigpOylpZihuPWwoci5QYigpLDQ0KSwhdGhpcy50YyhuKSlyZXR1cm4hMTtyZXR1cm4hMH0saC54Yz1mdW5jdGlvbih0KXtyZXR1cm4gaGMoRHhlKHRoaXMsdCwhMSkpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEk3ZSh0aGlzLnZjKCkpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2MoKT09MH0saC5lYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYnIodGhpcyl9LGguemM9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgSHAoIlB1dCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbWFwIikpfSxoLkFjPWZ1bmN0aW9uKHQpe2JBKHRoaXMsdCl9LGguQmM9ZnVuY3Rpb24odCl7cmV0dXJuIGhjKER4ZSh0aGlzLHQsITApKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZjKCkuZ2MoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBJZ3QodGhpcyl9LGguQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGdpKHRoaXMpfSxJKExyLCJBYnN0cmFjdE1hcCIsMjA2NSksRCgyMDg1LDIwNjUsV3cpLGguYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFl6KHRoaXMpfSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIEVzdCh0aGlzKX0saC5lYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuZyx0fHwodGhpcy5nPXRoaXMuYmMoKSl9LGguQ2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmksdHx8KHRoaXMuaT1uZXcgV1plKHRoaXMpKX0sSShkbiwiTWFwcy9WaWV3Q2FjaGluZ0Fic3RyYWN0TWFwIiwyMDg1KSxEKDQwMiwyMDg1LFd3LExrKSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiBmd24odGhpcyx0KX0saC5CYz1mdW5jdGlvbih0KXtyZXR1cm4gUHluKHRoaXMsdCl9LGguJGI9ZnVuY3Rpb24oKXt0aGlzLmQ9PXRoaXMuZS5jP3RoaXMuZS4kYigpOmlIKG5ldyBWNGUodGhpcykpfSxoLl9iPWZ1bmN0aW9uKHQpe3JldHVybiBpMXQodGhpcy5kLHQpfSxoLkVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBweih0aGlzKX0saC5EYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVjKCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fHxQaSh0aGlzLmQsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXModGhpcy5kKX0saC5lYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUuZWMoKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmQuZ2MoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmQpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAiLDQwMik7dmFyIEZoPWtzKFZjLCJJdGVyYWJsZSIpO0QoMzEsMSxXeSksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2MoKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywwKX0saC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYm4obnVsbCx0aGlzLk5jKCkpfSxoLkZjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBIcCgiQWRkIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBjb2xsZWN0aW9uIikpfSxoLkdjPWZ1bmN0aW9uKHQpe3JldHVybiBLYSh0aGlzLHQpfSxoLiRiPWZ1bmN0aW9uKCl7TTVlKHRoaXMpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBOeSh0aGlzLHQsITEpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiBFTih0aGlzLHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2MoKT09MH0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gTnkodGhpcyx0LCEwKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBlNWUodGhpcyl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIFBBKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVGIodGhpcyl9LEkoTHIsIkFic3RyYWN0Q29sbGVjdGlvbiIsMzEpO3ZhciBqZj1rcyhMciwiU2V0Iik7RChxMSwzMSxUbCksaC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywxKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gWTF0KHRoaXMsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSTdlKHRoaXMpfSxJKExyLCJBYnN0cmFjdFNldCIscTEpLEQoMjA2OCxxMSxUbCksSShkbiwiU2V0cy9JbXByb3ZlZEFic3RyYWN0U2V0IiwyMDY4KSxEKDIwNjksMjA2OCxUbCksaC4kYj1mdW5jdGlvbigpe3RoaXMuUmMoKS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBPMXQodGhpcyx0KX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJjKCkuZGMoKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdGhpcy5IYyh0KSYmRGUodCw0NCk/KG49bCh0LDQ0KSx0aGlzLlJjKCkuZWMoKS5NYyhuLmxkKCkpKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJjKCkuZ2MoKX0sSShkbiwiTWFwcy9FbnRyeVNldCIsMjA2OSksRCgxMTI3LDIwNjksVGwscHopLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHM4ZSh0aGlzLmEuZC52YygpLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWNGUodGhpcy5hKX0saC5SYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHM4ZSh0aGlzLmEuZC52YygpLHQpPyhuPWwoTGYobCh0LDQ0KSksNDQpLGV2bih0aGlzLmEuZSxuLmxkKCkpLCEwKTohMX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBOTyh0aGlzLmEuZC52YygpLk5jKCksbmV3IGJ6KHRoaXMuYSkpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBFbnRyaWVzIiwxMTI3KSxEKDExMjgsMSx7fSxieiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gQ3V0KHRoaXMuYSxsKHQsNDQpKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0FzTWFwL0FzTWFwRW50cmllcy8wbWV0aG9kcmVmJHdyYXBFbnRyeSRUeXBlIiwxMTI4KSxEKDc0NiwxLE9hLFY0ZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bCh0aGlzLmIuUGIoKSw0NCksdGhpcy5hPWwodC5tZCgpLDE2KSxDdXQodGhpcy5jLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5PYigpfSxoLlFiPWZ1bmN0aW9uKCl7UmsoISF0aGlzLmEpLHRoaXMuYi5RYigpLHRoaXMuYy5lLmQtPXRoaXMuYS5nYygpLHRoaXMuYS4kYigpLHRoaXMuYT1udWxsfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBJdGVyYXRvciIsNzQ2KSxEKDU0MiwyMDY4LFRsLFl6KSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5iLiRiKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYi5fYih0KX0saC5KYz1mdW5jdGlvbih0KXtYcih0KSx0aGlzLmIud2MobmV3IHh6KHQpKX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZGMoKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgY18odGhpcy5iLnZjKCkuS2MoKSl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYi5fYih0KT8odGhpcy5iLkJjKHQpLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZ2MoKX0sSShkbiwiTWFwcy9LZXlTZXQiLDU0MiksRCgzMjcsNTQyLFRsLHE1KSxoLiRiPWZ1bmN0aW9uKCl7dmFyIHQ7aUgoKHQ9dGhpcy5iLnZjKCkuS2MoKSxuZXcgZzNlKHRoaXMsdCkpKX0saC5JYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5iLmVjKCkuSWModCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fHxQaSh0aGlzLmIuZWMoKSx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLmIuZWMoKSl9LGguS2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIudmMoKS5LYygpLG5ldyBnM2UodGhpcyx0KX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbixyO3JldHVybiByPTAsbj1sKHRoaXMuYi5CYyh0KSwxNiksbiYmKHI9bi5nYygpLG4uJGIoKSx0aGlzLmEuZC09cikscj4wfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5lYygpLk5jKCl9LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9LZXlTZXQiLDMyNyksRCg3NDcsMSxPYSxnM2UpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuT2IoKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9bCh0aGlzLmMuUGIoKSw0NCksdGhpcy5hLmxkKCl9LGguUWI9ZnVuY3Rpb24oKXt2YXIgdDtSayghIXRoaXMuYSksdD1sKHRoaXMuYS5tZCgpLDE2KSx0aGlzLmMuUWIoKSx0aGlzLmIuYS5kLT10LmdjKCksdC4kYigpLHRoaXMuYT1udWxsfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvS2V5U2V0LzEiLDc0NyksRCg1MDMsNDAyLHs4NToxLDEzMzoxfSxfTyksaC5iYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNjKCl9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5VYygpfSxoLlNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0Tyh0aGlzLmMsdGhpcy5XYygpKX0saC5UYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLldjKCkuVGMoKX0saC5VYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuYix0fHwodGhpcy5iPXRoaXMuU2MoKSl9LGguVmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5XYygpLlZjKCl9LGguV2M9ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmQsMTMzKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1NvcnRlZEFzTWFwIiw1MDMpLEQoNDQ2LDUwMyxaa2UscV8pLGguYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFrKHRoaXMuYSxsKGwodGhpcy5kLDEzMyksMTM5KSl9LGguU2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFrKHRoaXMuYSxsKGwodGhpcy5kLDEzMyksMTM5KSl9LGguZWM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIsbCh0fHwodGhpcy5iPW5ldyBBayh0aGlzLmEsbChsKHRoaXMuZCwxMzMpLDEzOSkpKSwyNzcpfSxoLlVjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5iLGwodHx8KHRoaXMuYj1uZXcgQWsodGhpcy5hLGwobCh0aGlzLmQsMTMzKSwxMzkpKSksMjc3KX0saC5XYz1mdW5jdGlvbigpe3JldHVybiBsKGwodGhpcy5kLDEzMyksMTM5KX0saC5YYz1mdW5jdGlvbih0KXtyZXR1cm4gbChsKHRoaXMuZCwxMzMpLDEzOSkuWGModCl9LGguWWM9ZnVuY3Rpb24odCl7cmV0dXJuIGwobCh0aGlzLmQsMTMzKSwxMzkpLlljKHQpfSxoLlpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBxXyh0aGlzLmEsbChsKHRoaXMuZCwxMzMpLDEzOSkuWmModCxuKSl9LGguJGM9ZnVuY3Rpb24odCl7cmV0dXJuIGwobCh0aGlzLmQsMTMzKSwxMzkpLiRjKHQpfSxoLl9jPWZ1bmN0aW9uKHQpe3JldHVybiBsKGwodGhpcy5kLDEzMyksMTM5KS5fYyh0KX0saC5hZD1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcgcV8odGhpcy5hLGwobCh0aGlzLmQsMTMzKSwxMzkpLmFkKHQsbikpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvTmF2aWdhYmxlQXNNYXAiLDQ0NiksRCg1MDIsMzI3LEx3dCx0TyksaC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZWMoKS5OYygpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvU29ydGVkS2V5U2V0Iiw1MDIpLEQoNDAxLDUwMixlRWUsQWspLEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9OYXZpZ2FibGVLZXlTZXQiLDQwMSksRCg1NTEsMzEsV3ksWUgpLGguRmM9ZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gUWwodGhpcykscj10aGlzLmQuZGMoKSxuPXRoaXMuZC5GYyh0KSxuJiYoKyt0aGlzLmYuZCxyJiZETyh0aGlzKSksbn0saC5HYz1mdW5jdGlvbih0KXt2YXIgbixyLGE7cmV0dXJuIHQuZGMoKT8hMTooYT0oUWwodGhpcyksdGhpcy5kLmdjKCkpLG49dGhpcy5kLkdjKHQpLG4mJihyPXRoaXMuZC5nYygpLHRoaXMuZi5kKz1yLWEsYT09MCYmRE8odGhpcykpLG4pfSxoLiRiPWZ1bmN0aW9uKCl7dmFyIHQ7dD0oUWwodGhpcyksdGhpcy5kLmdjKCkpLHQhPTAmJih0aGlzLmQuJGIoKSx0aGlzLmYuZC09dCxsSCh0aGlzKSl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIFFsKHRoaXMpLHRoaXMuZC5IYyh0KX0saC5JYz1mdW5jdGlvbih0KXtyZXR1cm4gUWwodGhpcyksdGhpcy5kLkljKHQpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dGhpcz8hMDooUWwodGhpcyksUGkodGhpcy5kLHQpKX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSxlcyh0aGlzLmQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIFFsKHRoaXMpLG5ldyBfNGUodGhpcyl9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIFFsKHRoaXMpLG49dGhpcy5kLk1jKHQpLG4mJigtLXRoaXMuZi5kLGxIKHRoaXMpKSxufSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIFJ0dCh0aGlzKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSx0aGlzLmQuTmMoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSx4Yyh0aGlzLmQpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZENvbGxlY3Rpb24iLDU1MSk7dmFyIG1mPWtzKExyLCJMaXN0Iik7RCg3NDQsNTUxLHsyMDoxLDMxOjEsMTY6MSwxNToxfSxyNWUpLGguamQ9ZnVuY3Rpb24odCl7JG0odGhpcyx0KX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSx0aGlzLmQuTmMoKX0saC5iZD1mdW5jdGlvbih0LG4pe3ZhciByO1FsKHRoaXMpLHI9dGhpcy5kLmRjKCksbCh0aGlzLmQsMTUpLmJkKHQsbiksKyt0aGlzLmEuZCxyJiZETyh0aGlzKX0saC5jZD1mdW5jdGlvbih0LG4pe3ZhciByLGEsbztyZXR1cm4gbi5kYygpPyExOihvPShRbCh0aGlzKSx0aGlzLmQuZ2MoKSkscj1sKHRoaXMuZCwxNSkuY2QodCxuKSxyJiYoYT10aGlzLmQuZ2MoKSx0aGlzLmEuZCs9YS1vLG89PTAmJkRPKHRoaXMpKSxyKX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gUWwodGhpcyksbCh0aGlzLmQsMTUpLlhiKHQpfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybiBRbCh0aGlzKSxsKHRoaXMuZCwxNSkuZGQodCl9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gUWwodGhpcyksbmV3IGdudCh0aGlzKX0saC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gUWwodGhpcyksbmV3IEZhdCh0aGlzLHQpfSxoLmdkPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBRbCh0aGlzKSxuPWwodGhpcy5kLDE1KS5nZCh0KSwtLXRoaXMuYS5kLGxIKHRoaXMpLG59LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUWwodGhpcyksbCh0aGlzLmQsMTUpLmhkKHQsbil9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUWwodGhpcyksX2N0KHRoaXMuYSx0aGlzLmUsbCh0aGlzLmQsMTUpLmtkKHQsbiksdGhpcy5iP3RoaXMuYjp0aGlzKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRMaXN0Iiw3NDQpLEQoMTEyNiw3NDQsezIwOjEsMzE6MSwxNjoxLDE1OjEsNTk6MX0scnJ0KSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvUmFuZG9tQWNjZXNzV3JhcHBlZExpc3QiLDExMjYpLEQoNjI4LDEsT2EsXzRlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gWWsodGhpcyksdGhpcy5iLk9iKCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gWWsodGhpcyksdGhpcy5iLlBiKCl9LGguUWI9ZnVuY3Rpb24oKXt6bnQodGhpcyl9LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkQ29sbGVjdGlvbi9XcmFwcGVkSXRlcmF0b3IiLDYyOCksRCg3NDUsNjI4LGxnLGdudCxGYXQpLGguUWI9ZnVuY3Rpb24oKXt6bnQodGhpcyl9LGguUmI9ZnVuY3Rpb24odCl7dmFyIG47bj1SdHQodGhpcy5hKT09MCwoWWsodGhpcyksbCh0aGlzLmIsMTI4KSkuUmIodCksKyt0aGlzLmEuYS5kLG4mJkRPKHRoaXMuYSl9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4oWWsodGhpcyksbCh0aGlzLmIsMTI4KSkuU2IoKX0saC5UYj1mdW5jdGlvbigpe3JldHVybihZayh0aGlzKSxsKHRoaXMuYiwxMjgpKS5UYigpfSxoLlViPWZ1bmN0aW9uKCl7cmV0dXJuKFlrKHRoaXMpLGwodGhpcy5iLDEyOCkpLlViKCl9LGguVmI9ZnVuY3Rpb24oKXtyZXR1cm4oWWsodGhpcyksbCh0aGlzLmIsMTI4KSkuVmIoKX0saC5XYj1mdW5jdGlvbih0KXsoWWsodGhpcyksbCh0aGlzLmIsMTI4KSkuV2IodCl9LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkTGlzdC9XcmFwcGVkTGlzdEl0ZXJhdG9yIiw3NDUpLEQoNzQzLDU1MSxMd3QsR3llKSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIFFsKHRoaXMpLHRoaXMuZC5OYygpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZFNvcnRlZFNldCIsNzQzKSxEKDExMjUsNzQzLGVFZSx1bnQpLEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkTmF2aWdhYmxlU2V0IiwxMTI1KSxEKDExMjQsNTUxLFRsLFRydCksaC5OYz1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSx0aGlzLmQuTmMoKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRTZXQiLDExMjQpLEQoMTEzMywxLHt9LFApLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGx2bihsKHQsNDQpKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL2xhbWJkYSQxJFR5cGUiLDExMzMpLEQoMTEzMiwxLHt9LGJpZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGl3KHRoaXMuYSx0KX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL2xhbWJkYSQyJFR5cGUiLDExMzIpO3ZhciB1dj1rcyhMciwiTWFwL0VudHJ5Iik7RCgzNTgsMSxObGUpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNDQpPyhuPWwodCw0NCkseWQodGhpcy5sZCgpLG4ubGQoKSkmJnlkKHRoaXMubWQoKSxuLm1kKCkpKTohMX0saC5IYj1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIHQ9dGhpcy5sZCgpLG49dGhpcy5tZCgpLCh0PT1udWxsPzA6ZXModCkpXihuPT1udWxsPzA6ZXMobikpfSxoLm5kPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZCgpKyI9Iit0aGlzLm1kKCl9LEkoZG4sTXd0LDM1OCksRCgyMDg2LDMxLFd5KSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5vZCgpLiRiKCl9LGguSGM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNDQpPyhuPWwodCw0NCksRGJuKHRoaXMub2QoKSxuLmxkKCksbi5tZCgpKSk6ITF9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNDQpPyhuPWwodCw0NCksY2N0KHRoaXMub2QoKSxuLmxkKCksbi5tZCgpKSk6ITF9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZCgpLmR9LEkoZG4sIk11bHRpbWFwcy9FbnRyaWVzIiwyMDg2KSxEKDc0OSwyMDg2LFd5LHZ6KSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5rYygpfSxoLm9kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGMoKX0sSShkbiwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyaWVzIiw3NDkpLEQoNzUwLDc0OSxUbCxVd2UpLGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxjKCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIFF4ZSh0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHdmdCh0aGlzKX0sSShkbiwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyeVNldCIsNzUwKSxEKDc1MSwzMSxXeSxRMiksaC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBMeW4odGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5uYygpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5vYygpfSxJKGRuLCJBYnN0cmFjdE11bHRpbWFwL1ZhbHVlcyIsNzUxKSxEKDIwODcsMzEsezg0OToxLDIwOjEsMzE6MSwxNjoxfSksaC5KYz1mdW5jdGlvbih0KXtYcih0KSxWNSh0aGlzKS5KYyhuZXcga2llKHQpKX0saC5OYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PVY1KHRoaXMpLk5jKCksSXVlKHQsbmV3IHBlLDY0fHQueWQoKSYxMjk2LHRoaXMuYS5kKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gWndlKCksITB9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIFhyKHRoaXMpLFhyKHQpLERlKHQsNTUyKT9OYm4obCh0LDg0OSkpOiF0LmRjKCkmJkdvZSh0aGlzLHQuS2MoKSl9LGguSGM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49bChPeShleCh0aGlzLmEpLHQpLDE2KSwobj9uLmdjKCk6MCk+MH0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gblRuKHRoaXMsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXMoVjUodGhpcykpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIFY1KHRoaXMpLmRjKCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIFVwdCh0aGlzLHQsMSk+MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4YyhWNSh0aGlzKSl9LEkoZG4sIkFic3RyYWN0TXVsdGlzZXQiLDIwODcpLEQoMjA4OSwyMDY4LFRsKSxoLiRiPWZ1bmN0aW9uKCl7bVYodGhpcy5hLmEpfSxoLkhjPWZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIERlKHQsNTA0KT8ocj1sKHQsNDI1KSxsKHIuYS5tZCgpLDE2KS5nYygpPD0wPyExOihuPVBvdCh0aGlzLmEsci5hLmxkKCkpLG49PWwoci5hLm1kKCksMTYpLmdjKCkpKTohMX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbztyZXR1cm4gRGUodCw1MDQpJiYocj1sKHQsNDI1KSxuPXIuYS5sZCgpLGE9bChyLmEubWQoKSwxNikuZ2MoKSxhIT0wKT8obz10aGlzLmEsR2tuKG8sbixhKSk6ITF9LEkoZG4sIk11bHRpc2V0cy9FbnRyeVNldCIsMjA4OSksRCgxMTM5LDIwODksVGwsbWllKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBSmUoRXN0KGV4KHRoaXMuYS5hKSkuS2MoKSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gZXgodGhpcy5hLmEpLmdjKCl9LEkoZG4sIkFic3RyYWN0TXVsdGlzZXQvRW50cnlTZXQiLDExMzkpLEQoNjI3LDc0MixKbSksaC5oYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBkKCl9LGguamM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xZCgpfSxoLmNjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJkKHQpfSxoLmZjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNkKHQpfSxoLlpiPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5mLHR8fCh0aGlzLmY9dGhpcy5hYygpKX0saC5xZD1mdW5jdGlvbigpe3JldHVybiBDbigpLENuKCksaEt9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIEVjZSh0aGlzLHQpfSxoLnJkPWZ1bmN0aW9uKHQpe3JldHVybiBsKCRpKHRoaXMsdCksMjEpfSxoLnNkPWZ1bmN0aW9uKHQpe3JldHVybiBsKEROKHRoaXMsdCksMjEpfSxoLm1jPWZ1bmN0aW9uKHQpe3JldHVybiBDbigpLG5ldyBFayhsKHQsMjEpKX0saC5wYz1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcgVHJ0KHRoaXMsdCxsKG4sMjEpKX0sSShkbiwiQWJzdHJhY3RTZXRNdWx0aW1hcCIsNjI3KSxEKDE3MjMsNjI3LEptKSxoLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLcCh0aGlzLmIpfSxoLnBkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLcCh0aGlzLmIpfSxoLmpjPWZ1bmN0aW9uKCl7cmV0dXJuIFQ1ZShuZXcgS3AodGhpcy5iKSl9LGgucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gVDVlKG5ldyBLcCh0aGlzLmIpKX0saC5jYz1mdW5jdGlvbih0KXtyZXR1cm4gbChsKCRpKHRoaXMsdCksMjEpLDg3KX0saC5yZD1mdW5jdGlvbih0KXtyZXR1cm4gbChsKCRpKHRoaXMsdCksMjEpLDg3KX0saC5mYz1mdW5jdGlvbih0KXtyZXR1cm4gbChsKEROKHRoaXMsdCksMjEpLDg3KX0saC5zZD1mdW5jdGlvbih0KXtyZXR1cm4gbChsKEROKHRoaXMsdCksMjEpLDg3KX0saC5tYz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyNzcpP1Q1ZShsKHQsMjc3KSk6KENuKCksbmV3IER5ZShsKHQsODcpKSl9LGguWmI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmYsdHx8KHRoaXMuZj1EZSh0aGlzLmMsMTM5KT9uZXcgcV8odGhpcyxsKHRoaXMuYywxMzkpKTpEZSh0aGlzLmMsMTMzKT9uZXcgX08odGhpcyxsKHRoaXMuYywxMzMpKTpuZXcgTGsodGhpcyx0aGlzLmMpKX0saC5wYz1mdW5jdGlvbih0LG4pe3JldHVybiBEZShuLDI3Nyk/bmV3IHVudCh0aGlzLHQsbChuLDI3NykpOm5ldyBHeWUodGhpcyx0LGwobiw4NykpfSxJKGRuLCJBYnN0cmFjdFNvcnRlZFNldE11bHRpbWFwIiwxNzIzKSxEKDE3MjQsMTcyMyxKbSksaC5aYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuZixsKGwodHx8KHRoaXMuZj1EZSh0aGlzLmMsMTM5KT9uZXcgcV8odGhpcyxsKHRoaXMuYywxMzkpKTpEZSh0aGlzLmMsMTMzKT9uZXcgX08odGhpcyxsKHRoaXMuYywxMzMpKTpuZXcgTGsodGhpcyx0aGlzLmMpKSwxMzMpLDEzOSl9LGguZWM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmksbChsKHR8fCh0aGlzLmk9RGUodGhpcy5jLDEzOSk/bmV3IEFrKHRoaXMsbCh0aGlzLmMsMTM5KSk6RGUodGhpcy5jLDEzMyk/bmV3IHRPKHRoaXMsbCh0aGlzLmMsMTMzKSk6bmV3IHE1KHRoaXMsdGhpcy5jKSksODcpLDI3Nyl9LGguYmM9ZnVuY3Rpb24oKXtyZXR1cm4gRGUodGhpcy5jLDEzOSk/bmV3IEFrKHRoaXMsbCh0aGlzLmMsMTM5KSk6RGUodGhpcy5jLDEzMyk/bmV3IHRPKHRoaXMsbCh0aGlzLmMsMTMzKSk6bmV3IHE1KHRoaXMsdGhpcy5jKX0sSShkbiwiQWJzdHJhY3RTb3J0ZWRLZXlTb3J0ZWRTZXRNdWx0aW1hcCIsMTcyNCksRCgyMTA5LDEsezIwNDY6MX0pLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIF84bih0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIEk3ZSgodD10aGlzLmcsdHx8KHRoaXMuZz1uZXcgJEkodGhpcykpKSl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gSWd0KCh0PXRoaXMuZix0fHwodGhpcy5mPW5ldyBfeWUodGhpcykpKSl9LEkoZG4sIkFic3RyYWN0VGFibGUiLDIxMDkpLEQoNjc5LHExLFRsLCRJKSxoLiRiPWZ1bmN0aW9uKCl7JEplKCl9LGguSGM9ZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gRGUodCw0NzkpPyhuPWwodCw2OTcpLHI9bChPeShLc3QodGhpcy5hKSxhYihuLmMuZSxuLmIpKSw4NSksISFyJiZzOGUoci52YygpLG5ldyBpdyhhYihuLmMuYyxuLmEpLG94KG4uYyxuLmIsbi5hKSkpKTohMX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBEcG4odGhpcy5hKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbixyO3JldHVybiBEZSh0LDQ3OSk/KG49bCh0LDY5Nykscj1sKE95KEtzdCh0aGlzLmEpLGFiKG4uYy5lLG4uYikpLDg1KSwhIXImJmM0bihyLnZjKCksbmV3IGl3KGFiKG4uYy5jLG4uYSksb3gobi5jLG4uYixuLmEpKSkpOiExfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIFhpdCh0aGlzLmEpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIEZibih0aGlzLmEpfSxJKGRuLCJBYnN0cmFjdFRhYmxlL0NlbGxTZXQiLDY3OSksRCgyMDI1LDMxLFd5LHdpZSksaC4kYj1mdW5jdGlvbigpeyRKZSgpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB3eG4odGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIElwbih0aGlzLmEpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIFhpdCh0aGlzLmEpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG9jdCh0aGlzLmEpfSxJKGRuLCJBYnN0cmFjdFRhYmxlL1ZhbHVlcyIsMjAyNSksRCgxNjk3LDE2OTYsSm0pLEkoZG4sIkFycmF5TGlzdE11bHRpbWFwR3d0U2VyaWFsaXphdGlvbkRlcGVuZGVuY2llcyIsMTY5NyksRCg1MjAsMTY5NyxKbSxuc2UsRzVlKSxoLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCdSh0aGlzLmEpfSxoLmE9MCxJKGRuLCJBcnJheUxpc3RNdWx0aW1hcCIsNTIwKSxEKDY3OCwyMTA5LHs2Nzg6MSwyMDQ2OjEsMzoxfSxpMnQpLEkoZG4sIkFycmF5VGFibGUiLDY3OCksRCgyMDIxLDM5OSx0VCxxbnQpLGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGN2UodGhpcy5hLHQpfSxJKGRuLCJBcnJheVRhYmxlLzEiLDIwMjEpLEQoMjAyMiwxLHt9LGdpZSksaC50ZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEY3ZSh0aGlzLmEsdCl9LEkoZG4sIkFycmF5VGFibGUvMW1ldGhvZHJlZiRnZXRDZWxsJFR5cGUiLDIwMjIpLEQoMjExMCwxLHs2OTc6MX0pLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9PT10aGlzPyEwOkRlKHQsNDc5KT8obj1sKHQsNjk3KSx5ZChhYih0aGlzLmMuZSx0aGlzLmIpLGFiKG4uYy5lLG4uYikpJiZ5ZChhYih0aGlzLmMuYyx0aGlzLmEpLGFiKG4uYy5jLG4uYSkpJiZ5ZChveCh0aGlzLmMsdGhpcy5iLHRoaXMuYSksb3gobi5jLG4uYixuLmEpKSk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gTU4oaGUobGUod2EsMSksUm4sMSw1LFthYih0aGlzLmMuZSx0aGlzLmIpLGFiKHRoaXMuYy5jLHRoaXMuYSksb3godGhpcy5jLHRoaXMuYix0aGlzLmEpXSkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK2FiKHRoaXMuYy5lLHRoaXMuYikrIiwiK2FiKHRoaXMuYy5jLHRoaXMuYSkrIik9IitveCh0aGlzLmMsdGhpcy5iLHRoaXMuYSl9LEkoZG4sIlRhYmxlcy9BYnN0cmFjdENlbGwiLDIxMTApLEQoNDc5LDIxMTAsezQ3OToxLDY5NzoxfSxGN2UpLGguYT0wLGguYj0wLGguZD0wLEkoZG4sIkFycmF5VGFibGUvMiIsNDc5KSxEKDIwMjQsMSx7fSxwaWUpLGgudGQ9ZnVuY3Rpb24odCl7cmV0dXJuIElsdCh0aGlzLmEsdCl9LEkoZG4sIkFycmF5VGFibGUvMm1ldGhvZHJlZiRnZXRWYWx1ZSRUeXBlIiwyMDI0KSxEKDIwMjMsMzk5LHRULEhudCksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gSWx0KHRoaXMuYSx0KX0sSShkbiwiQXJyYXlUYWJsZS8zIiwyMDIzKSxEKDIwNzcsMjA2NSxXdyksaC4kYj1mdW5jdGlvbigpe2lIKHRoaXMua2MoKSl9LGgudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHl6KHRoaXMpfSxoLmxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfYXQodGhpcy5rYygpLHRoaXMuZ2MoKSl9LEkoZG4sIk1hcHMvSXRlcmF0b3JCYXNlZEFic3RyYWN0TWFwIiwyMDc3KSxEKDg0MiwyMDc3LFd3KSxoLiRiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gc1plKHRoaXMuYyx0KX0saC5rYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVm50KHRoaXMsdGhpcy5jLmIuYy5nYygpKX0saC5sYz1mdW5jdGlvbigpe3JldHVybiBDYWUodGhpcy5jLmIuYy5nYygpLDE2LG5ldyBteih0aGlzKSl9LGgueGM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49bChIXyh0aGlzLmMsdCksMTcpLG4/dGhpcy52ZChuLmEpOm51bGx9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5kYygpfSxoLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIE9hZSh0aGlzLmMpfSxoLnpjPWZ1bmN0aW9uKHQsbil7dmFyIHI7aWYocj1sKEhfKHRoaXMuYyx0KSwxNyksIXIpdGhyb3cgdWUobmV3IFluKHRoaXMudWQoKSsiICIrdCsiIG5vdCBpbiAiK09hZSh0aGlzLmMpKSk7cmV0dXJuIHRoaXMud2Qoci5hLG4pfSxoLkJjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5nYygpfSxJKGRuLCJBcnJheVRhYmxlL0FycmF5TWFwIiw4NDIpLEQoMjAyMCwxLHt9LG16KSxoLnRkPWZ1bmN0aW9uKHQpe3JldHVybiBZc3QodGhpcy5hLHQpfSxJKGRuLCJBcnJheVRhYmxlL0FycmF5TWFwLzBtZXRob2RyZWYkZ2V0RW50cnkkVHlwZSIsMjAyMCksRCgyMDE4LDM1OCxObGUsRFplKSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIFVobih0aGlzLmEsdGhpcy5iKX0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEudmQodGhpcy5iKX0saC5uZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLndkKHRoaXMuYix0KX0saC5iPTAsSShkbiwiQXJyYXlUYWJsZS9BcnJheU1hcC8xIiwyMDE4KSxEKDIwMTksMzk5LHRULFZudCksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gWXN0KHRoaXMuYSx0KX0sSShkbiwiQXJyYXlUYWJsZS9BcnJheU1hcC8yIiwyMDE5KSxEKDIwMTcsODQyLFd3LEJzdCksaC51ZD1mdW5jdGlvbigpe3JldHVybiJDb2x1bW4ifSxoLnZkPWZ1bmN0aW9uKHQpe3JldHVybiBveCh0aGlzLmIsdGhpcy5hLHQpfSxoLndkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHMwdCh0aGlzLmIsdGhpcy5hLHQsbil9LGguYT0wLEkoZG4sIkFycmF5VGFibGUvUm93IiwyMDE3KSxEKDg0Myw4NDIsV3csX3llKSxoLnZkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnN0KHRoaXMuYSx0KX0saC56Yz1mdW5jdGlvbih0LG4pe3JldHVybiBsKG4sODUpLGZ1bigpfSxoLndkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGwobiw4NSksZHVuKCl9LGgudWQ9ZnVuY3Rpb24oKXtyZXR1cm4iUm93In0sSShkbiwiQXJyYXlUYWJsZS9Sb3dNYXAiLDg0MyksRCgxMTU3LDEsUGgsSVplKSxoLkFkPWZ1bmN0aW9uKHQpe3JldHVybih0aGlzLmEueWQoKSYtMjYyJnQpIT0wfSxoLnlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS55ZCgpJi0yNjJ9LGguemQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnpkKCl9LGguTmI9ZnVuY3Rpb24odCl7dGhpcy5hLk5iKG5ldyBOWmUodCx0aGlzLmIpKX0saC5CZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLkJkKG5ldyBPWmUodCx0aGlzLmIpKX0sSShkbiwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xIiwxMTU3KSxEKDExNTgsMSxmcixPWmUpLGguQ2Q9ZnVuY3Rpb24odCl7dGhpcy5hLkNkKHRoaXMuYi5LYih0KSl9LEkoZG4sIkNvbGxlY3RTcGxpdGVyYXRvcnMvMS9sYW1iZGEkMCRUeXBlIiwxMTU4KSxEKDExNTksMSxmcixOWmUpLGguQ2Q9ZnVuY3Rpb24odCl7dGhpcy5hLkNkKHRoaXMuYi5LYih0KSl9LEkoZG4sIkNvbGxlY3RTcGxpdGVyYXRvcnMvMS9sYW1iZGEkMSRUeXBlIiwxMTU5KSxEKDExNTQsMSxQaCxzaXQpLGguQWQ9ZnVuY3Rpb24odCl7cmV0dXJuKCgxNjQ2NHx0aGlzLmIpJnQpIT0wfSxoLnlkPWZ1bmN0aW9uKCl7cmV0dXJuIDE2NDY0fHRoaXMuYn0saC56ZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuemQoKX0saC5OYj1mdW5jdGlvbih0KXt0aGlzLmEuUWUobmV3IEJaZSh0LHRoaXMuYykpfSxoLkJkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuUmUobmV3IFBaZSh0LHRoaXMuYykpfSxoLmI9MCxJKGRuLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFXaXRoQ2hhcmFjdGVyaXN0aWNzIiwxMTU0KSxEKDExNTUsMSxrUCxQWmUpLGguRGQ9ZnVuY3Rpb24odCl7dGhpcy5hLkNkKHRoaXMuYi50ZCh0KSl9LEkoZG4sIkNvbGxlY3RTcGxpdGVyYXRvcnMvMVdpdGhDaGFyYWN0ZXJpc3RpY3MvbGFtYmRhJDAkVHlwZSIsMTE1NSksRCgxMTU2LDEsa1AsQlplKSxoLkRkPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZCh0aGlzLmIudGQodCkpfSxJKGRuLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFXaXRoQ2hhcmFjdGVyaXN0aWNzL2xhbWJkYSQxJFR5cGUiLDExNTYpLEQoMTE1MCwxLFBoKSxoLkFkPWZ1bmN0aW9uKHQpe3JldHVybih0aGlzLmEmdCkhPTB9LGgueWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLnpkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSYmKHRoaXMuYj1weWUodGhpcy5iLHRoaXMuZS56ZCgpKSkscHllKHRoaXMuYiwwKX0saC5OYj1mdW5jdGlvbih0KXt0aGlzLmUmJih0aGlzLmUuTmIodCksdGhpcy5lPW51bGwpLHRoaXMuYy5OYihuZXcgRlplKHRoaXMsdCkpLHRoaXMuYj0wfSxoLkJkPWZ1bmN0aW9uKHQpe2Zvcig7Oyl7aWYodGhpcy5lJiZ0aGlzLmUuQmQodCkpcmV0dXJuIElfKHRoaXMuYixFUCkmJih0aGlzLmI9RGYodGhpcy5iLDEpKSwhMDtpZih0aGlzLmU9bnVsbCwhdGhpcy5jLkJkKG5ldyB5aWUodGhpcykpKXJldHVybiExfX0saC5hPTAsaC5iPTAsSShkbiwiQ29sbGVjdFNwbGl0ZXJhdG9ycy9GbGF0TWFwU3BsaXRlcmF0b3IiLDExNTApLEQoMTE1MiwxLGZyLHlpZSksaC5DZD1mdW5jdGlvbih0KXtIZm4odGhpcy5hLHQpfSxJKGRuLCJDb2xsZWN0U3BsaXRlcmF0b3JzL0ZsYXRNYXBTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMTUyKSxEKDExNTMsMSxmcixGWmUpLGguQ2Q9ZnVuY3Rpb24odCl7Z3BuKHRoaXMuYSx0aGlzLmIsdCl9LEkoZG4sIkNvbGxlY3RTcGxpdGVyYXRvcnMvRmxhdE1hcFNwbGl0ZXJhdG9yL2xhbWJkYSQxJFR5cGUiLDExNTMpLEQoMTE1MSwxMTUwLFBoLENjdCksSShkbiwiQ29sbGVjdFNwbGl0ZXJhdG9ycy9GbGF0TWFwU3BsaXRlcmF0b3JPZk9iamVjdCIsMTE1MSksRCgyNTMsMSxQbGUpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuRWQobCh0LDI1MykpfSxoLkVkPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PT0oR2llKCkseTBlKT8xOnQ9PShVaWUoKSx3MGUpPy0xOihuPShacSgpLHZOKHRoaXMuYSx0LmEpKSxuIT0wP246RGUodGhpcyw1MjYpPT1EZSh0LDUyNik/MDpEZSh0aGlzLDUyNik/MTotMSl9LGguSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiByeGUodGhpcyx0KX0sSShkbiwiQ3V0IiwyNTMpLEQoMTgyMywyNTMsUGxlLHhKZSksaC5FZD1mdW5jdGlvbih0KXtyZXR1cm4gdD09dGhpcz8wOjF9LGguR2Q9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFN3ZSl9LGguSGQ9ZnVuY3Rpb24odCl7dC5hKz0iK+KInikifSxoLklkPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IG5jKEl3dCkpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFZnKCkscThlKHRoaXMpfSxoLkpkPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIiviiJ4ifTt2YXIgdzBlO0koZG4sIkN1dC9BYm92ZUFsbCIsMTgyMyksRCg1MjYsMjUzLHsyNTM6MSw1MjY6MSwzOjEsMzQ6MX0sWG50KSxoLkdkPWZ1bmN0aW9uKHQpe3d1KCh0LmErPSIoIix0KSx0aGlzLmEpfSxoLkhkPWZ1bmN0aW9uKHQpe2hiKHd1KHQsdGhpcy5hKSw5Myl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm5+ZXModGhpcy5hKX0saC5KZD1mdW5jdGlvbih0KXtyZXR1cm4gWnEoKSx2Tih0aGlzLmEsdCk8MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiIvIit0aGlzLmErIlxcIn0sSShkbiwiQ3V0L0Fib3ZlVmFsdWUiLDUyNiksRCgxODIyLDI1MyxQbGUseUplKSxoLkVkPWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzPzA6LTF9LGguR2Q9ZnVuY3Rpb24odCl7dC5hKz0iKC3iiJ4ifSxoLkhkPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBTd2UpfSxoLklkPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IG5jKEl3dCkpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFZnKCkscThlKHRoaXMpfSxoLkpkPWZ1bmN0aW9uKHQpe3JldHVybiEwfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIi3iiJ4ifTt2YXIgeTBlO0koZG4sIkN1dC9CZWxvd0FsbCIsMTgyMiksRCgxODI0LDI1MyxQbGUsUW50KSxoLkdkPWZ1bmN0aW9uKHQpe3d1KCh0LmErPSJbIix0KSx0aGlzLmEpfSxoLkhkPWZ1bmN0aW9uKHQpe2hiKHd1KHQsdGhpcy5hKSw0MSl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXModGhpcy5hKX0saC5KZD1mdW5jdGlvbih0KXtyZXR1cm4gWnEoKSx2Tih0aGlzLmEsdCk8PTB9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iXFwiK3RoaXMuYSsiLyJ9LEkoZG4sIkN1dC9CZWxvd1ZhbHVlIiwxODI0KSxEKDU0NywxLGhnKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gTDRuKGwoX0godGhpcywidXNlIE9wdGlvbmFsLm9yTnVsbCgpIGluc3RlYWQgb2YgT3B0aW9uYWwub3IobnVsbCkiKSwyMCkuS2MoKSl9LEkoZG4sIkZsdWVudEl0ZXJhYmxlIiw1NDcpLEQoNDQyLDU0NyxoZyxQXyksaC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgaHIoZHIodGhpcy5hLktjKCksbmV3IGopKX0sSShkbiwiRmx1ZW50SXRlcmFibGUvMiIsNDQyKSxEKDEwNTksNTQ3LGhnLHNudCksaC5LYz1mdW5jdGlvbigpe3JldHVybiByZyh0aGlzKX0sSShkbiwiRmx1ZW50SXRlcmFibGUvMyIsMTA1OSksRCg3MjQsMzk5LHRULEF5ZSksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hW3RdLktjKCl9LEkoZG4sIkZsdWVudEl0ZXJhYmxlLzMvMSIsNzI0KSxEKDIwNzAsMSx7fSksaC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLktkKCkuYil9LEkoZG4sIkZvcndhcmRpbmdPYmplY3QiLDIwNzApLEQoMjA3MSwyMDcwLE93dCksaC5LZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkxkKCl9LGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLk9jKCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMCl9LGguT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJuKG51bGwsdGhpcy5OYygpKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5MZCgpLG9aZSgpfSxoLkdjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkxkKCksY1plKCl9LGguJGI9ZnVuY3Rpb24oKXt0aGlzLkxkKCksdVplKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuTGQoKS5IYyh0KX0saC5JYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5MZCgpLkljKHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTGQoKS5iLmRjKCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MZCgpLktjKCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuTGQoKSxsWmUoKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkxkKCkuYi5nYygpfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTGQoKS5QYygpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkxkKCkuUWModCl9LEkoZG4sIkZvcndhcmRpbmdDb2xsZWN0aW9uIiwyMDcxKSxEKDIwNzgsMzEsdEVlKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2QoKX0saC5GYz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLkdjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguTWQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmMsdHx8KHRoaXMuYz10aGlzLk5kKCkpfSxoLiRiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9bnVsbCYmTnkodGhpcyx0LCExKX0saC5OZD1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmdjKCkpe2Nhc2UgMDpyZXR1cm4gd3coKSx3dygpLHgwZTtjYXNlIDE6cmV0dXJuIHd3KCksbmV3IFNhZShYcih0aGlzLk9kKCkuUGIoKSkpO2RlZmF1bHQ6cmV0dXJuIG5ldyBvNWUodGhpcyx0aGlzLlBjKCkpfX0saC5NYz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKGRuLCJJbW11dGFibGVDb2xsZWN0aW9uIiwyMDc4KSxEKDcyNywyMDc4LHRFZSxUd2UpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gY3godGhpcy5hLktjKCkpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZ0aGlzLmEuSGModCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5JYyh0KX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZGMoKX0saC5PZD1mdW5jdGlvbigpe3JldHVybiBjeCh0aGlzLmEuS2MoKSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLlBjKCl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5RYyh0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmEpfSxJKGRuLCJGb3J3YXJkaW5nSW1tdXRhYmxlQ29sbGVjdGlvbiIsNzI3KSxEKDMwNywyMDc4LG5UKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2QoKX0saC5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLlBkKDApfSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLlBkKHQpfSxoLmpkPWZ1bmN0aW9uKHQpeyRtKHRoaXMsdCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMTYpfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuUWQodCxuKX0saC5iZD1mdW5jdGlvbih0LG4pe3Rocm93IHVlKG5ldyBRcil9LGguY2Q9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxoLk1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIFZFbih0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFIzbih0aGlzKX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD8tMTpvN24odGhpcyx0KX0saC5PZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLlBkKDApfSxoLlBkPWZ1bmN0aW9uKHQpe3JldHVybiBpYWUodGhpcyx0KX0saC5nZD1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLmhkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5RZD1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiBSVigocj1uZXcgS1plKHRoaXMpLG5ldyBacChyLHQsbikpKX07dmFyIHgwZTtJKGRuLCJJbW11dGFibGVMaXN0IiwzMDcpLEQoMjEwNSwzMDcsblQpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gY3godGhpcy5SZCgpLktjKCkpfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFJWKHRoaXMuUmQoKS5rZCh0LG4pKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9bnVsbCYmdGhpcy5SZCgpLkhjKHQpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLlJkKCkuSWModCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIFBpKHRoaXMuUmQoKSx0KX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gYWIodGhpcyx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLlJkKCkpfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLlJkKCkuZGQodCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZCgpLmRjKCl9LGguT2Q9ZnVuY3Rpb24oKXtyZXR1cm4gY3godGhpcy5SZCgpLktjKCkpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmQoKS5nYygpfSxoLlFkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFJWKHRoaXMuUmQoKS5rZCh0LG4pKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJkKCkuUWMoV2Uod2EsUm4sMSx0aGlzLlJkKCkuZ2MoKSw1LDEpKX0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5SZCgpLlFjKHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHhjKHRoaXMuUmQoKSl9LEkoZG4sIkZvcndhcmRpbmdJbW11dGFibGVMaXN0IiwyMTA1KSxEKDcyOSwxLHJUKSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIE1tKHRoaXMpfSxoLndjPWZ1bmN0aW9uKHQpe21BKHRoaXMsdCl9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gT2FlKHRoaXMpfSxoLnljPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcWNlKHRoaXMsdCxuLHIpfSxoLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVmQoKX0saC4kYj1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGModCkhPW51bGx9LGgudWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuVmQoKS5IYyh0KX0saC5UZD1mdW5jdGlvbigpe3JldHVybiBuZXcgTFFlKHRoaXMpfSxoLlVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNUWUodGhpcyl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIE15bih0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIE1tKHRoaXMpLkhiKCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYygpPT0wfSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGh1bigpfSxoLkJjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gbTluKHRoaXMpfSxoLlZkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZT90aGlzLmU6dGhpcy5lPXRoaXMuVWQoKX0saC5jPW51bGwsaC5kPW51bGwsaC5lPW51bGw7dmFyIGk2dDtJKGRuLCJJbW11dGFibGVNYXAiLDcyOSksRCg3MzAsNzI5LHJUKSxoLl9iPWZ1bmN0aW9uKHQpe3JldHVybiBzWmUodGhpcyx0KX0saC51Yz1mdW5jdGlvbih0KXtyZXR1cm4gWlplKHRoaXMuYix0KX0saC5TZD1mdW5jdGlvbigpe3JldHVybiB0MXQobmV3IHZpZSh0aGlzKSl9LGguVGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdDF0KG1hdCh0aGlzLmIpKX0saC5VZD1mdW5jdGlvbigpe3JldHVybiB3ZCgpLG5ldyBUd2UoYmF0KHRoaXMuYikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBlZXQodGhpcy5iLHQpfSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiBIXyh0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGVzKHRoaXMuYi5jKX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYy5kYygpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5jLmdjKCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4geGModGhpcy5iLmMpfSxJKGRuLCJGb3J3YXJkaW5nSW1tdXRhYmxlTWFwIiw3MzApLEQoMjA3MiwyMDcxLEJsZSksaC5LZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLldkKCl9LGguTGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5XZCgpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbih0aGlzLDEpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dGhpc3x8dGhpcy5XZCgpLkZiKHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuV2QoKS5IYigpfSxJKGRuLCJGb3J3YXJkaW5nU2V0IiwyMDcyKSxEKDEwODUsMjA3MixCbGUsdmllKSxoLktkPWZ1bmN0aW9uKCl7cmV0dXJuIEtrKHRoaXMuYS5iKX0saC5MZD1mdW5jdGlvbigpe3JldHVybiBLayh0aGlzLmEuYil9LGguSGM9ZnVuY3Rpb24odCl7aWYoRGUodCw0NCkmJmwodCw0NCkubGQoKT09bnVsbClyZXR1cm4hMTt0cnl7cmV0dXJuIEpaZShLayh0aGlzLmEuYiksdCl9Y2F0Y2gobil7aWYobj1icyhuKSxEZShuLDIxMikpcmV0dXJuITE7dGhyb3cgdWUobil9fSxoLldkPWZ1bmN0aW9uKCl7cmV0dXJuIEtrKHRoaXMuYS5iKX0saC5RYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10b3QoS2sodGhpcy5hLmIpLHQpLEtrKHRoaXMuYS5iKS5iLmdjKCk8bi5sZW5ndGgmJlRzKG4sS2sodGhpcy5hLmIpLmIuZ2MoKSxudWxsKSxufSxJKGRuLCJGb3J3YXJkaW5nSW1tdXRhYmxlTWFwLzEiLDEwODUpLEQoMjA3OSwyMDc4LFN4KSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2QoKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywxKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gUXhlKHRoaXMsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gd2Z0KHRoaXMpfSxJKGRuLCJJbW11dGFibGVTZXQiLDIwNzkpLEQoNzE5LDIwNzksU3gpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gY3gobmV3IHlvKHRoaXMuYS5iLktjKCkpKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9bnVsbCYmbk8odGhpcy5hLHQpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiBYWmUodGhpcy5hLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGVzKHRoaXMuYS5iKX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYi5kYygpfSxoLk9kPWZ1bmN0aW9uKCl7cmV0dXJuIGN4KG5ldyB5byh0aGlzLmEuYi5LYygpKSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmIuZ2MoKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYi5QYygpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBRWmUodGhpcy5hLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHhjKHRoaXMuYS5iKX0sSShkbiwiRm9yd2FyZGluZ0ltbXV0YWJsZVNldCIsNzE5KSxEKDIwNzMsMjA3MixOd3QpLGguS2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5XZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGFxKHRoaXMpfSxJKGRuLCJGb3J3YXJkaW5nU29ydGVkU2V0IiwyMDczKSxEKDU0MywyMDc3LHJULGNVKSxoLkFjPWZ1bmN0aW9uKHQpe2JBKHRoaXMsdCl9LGguQ2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmQsbmV3IFFzZSh0fHwodGhpcy5kPW5ldyBKMih0aGlzKSkpfSxoLiRiPWZ1bmN0aW9uKCl7ZU4odGhpcyl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuISFnQSh0aGlzLHQsWXIobW8oZmcsaWcoWXIobW8odD09bnVsbD8wOmVzKHQpLGRnKSksMTUpKSkpfSxoLnVjPWZ1bmN0aW9uKHQpe3JldHVybiBraHQodGhpcyx0KX0saC5rYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVW50KHRoaXMsdGhpcyl9LGgud2M9ZnVuY3Rpb24odCl7cG90KHRoaXMsdCl9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIFg1KHRoaXMsdCl9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEpzZSh0aGlzKX0saC56Yz1mdW5jdGlvbih0LG4pe3JldHVybiBSVSh0aGlzLHQsbil9LGguQmM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49Z0EodGhpcyx0LFlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpKSxuPyh1Nih0aGlzLG4pLG4uZT1udWxsLG4uYz1udWxsLG4uaSk6bnVsbH0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGgueGQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmQsbmV3IFFzZSh0fHwodGhpcy5kPW5ldyBKMih0aGlzKSkpfSxoLmY9MCxoLmc9MCxoLmk9MCxJKGRuLCJIYXNoQmlNYXAiLDU0MyksRCg1NDQsMSxPYSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEFjdCh0aGlzKX0saC5QYj1mdW5jdGlvbigpe3ZhciB0O2lmKCFBY3QodGhpcykpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gdD1sKExmKHRoaXMuYyksMzAzKSx0aGlzLmM9dC5jLHRoaXMuZj10LC0tdGhpcy5kLHRoaXMuWGQodCl9LGguUWI9ZnVuY3Rpb24oKXtpZih0aGlzLmUuZyE9dGhpcy5iKXRocm93IHVlKG5ldyBYaCk7aWYoIXRoaXMuZil0aHJvdyB1ZShuZXcgbmMoSmtlKSk7dTYodGhpcy5lLHRoaXMuZiksdGhpcy5iPXRoaXMuZS5nLHRoaXMuZj1udWxsfSxoLmI9MCxoLmQ9MCxoLmY9bnVsbCxJKGRuLCJIYXNoQmlNYXAvSXRyIiw1NDQpLEQoMTAyMyw1NDQsT2EsVW50KSxoLlhkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUlplKHRoaXMsdCl9LEkoZG4sIkhhc2hCaU1hcC8xIiwxMDIzKSxEKG0wLDM1OCxObGUsUlplKSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nfSxoLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxoLm5kPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtyZXR1cm4gcj10aGlzLmEuaSxhPVlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpLGE9PXRoaXMuYS5mJiYocWUodCk9PT1xZShyKXx8dCE9bnVsbCYmUGkodCxyKSk/dDoobjB0KCFwQSh0aGlzLmIuYSx0LGEpLHQpLHU2KHRoaXMuYi5hLHRoaXMuYSksbj1uZXcgeEgodGhpcy5hLmcsdGhpcy5hLmEsdCxhKSxlUCh0aGlzLmIuYSxuLHRoaXMuYSksdGhpcy5hLmU9bnVsbCx0aGlzLmEuYz1udWxsLHRoaXMuYi5iPXRoaXMuYi5hLmcsdGhpcy5iLmY9PXRoaXMuYSYmKHRoaXMuYi5mPW4pLHRoaXMuYT1uLHIpfSxJKGRuLCJIYXNoQmlNYXAvMS9NYXBFbnRyeSIsbTApLEQoMjQ2LDM1OCx7MzU4OjEsMjQ2OjEsMzoxLDQ0OjF9LGl3KSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGgubmQ9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0sSShkbiwiSW1tdXRhYmxlRW50cnkiLDI0NiksRCgzMDMsMjQ2LHszNTg6MSwzMDM6MSwyNDY6MSwzOjEsNDQ6MX0seEgpLGguYT0wLGguZj0wO3ZhciBrMGU9SShkbiwiSGFzaEJpTWFwL0JpRW50cnkiLDMwMyk7RCg2MTksMjA3NyxyVCxKMiksaC5BYz1mdW5jdGlvbih0KXtiQSh0aGlzLHQpfSxoLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKc2UodGhpcy5hKX0saC4kYj1mdW5jdGlvbigpe2VOKHRoaXMuYSl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIGtodCh0aGlzLmEsdCl9LGgua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEdudCh0aGlzLHRoaXMuYSl9LGgud2M9ZnVuY3Rpb24odCl7WHIodCkscG90KHRoaXMuYSxuZXcgd3oodCkpfSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiB2Vih0aGlzLHQpfSxoLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRc2UodGhpcyl9LGguemM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZUFuKHRoaXMuYSx0LG4sITEpfSxoLkJjPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXBBKHRoaXMuYSx0LFlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpKSxuPyh1Nih0aGlzLmEsbiksbi5lPW51bGwsbi5jPW51bGwsbi5nKTpudWxsfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxoLnhkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKc2UodGhpcy5hKX0sSShkbiwiSGFzaEJpTWFwL0ludmVyc2UiLDYxOSksRCgxMDIwLDU0NCxPYSxHbnQpLGguWGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBqWmUodGhpcyx0KX0sSShkbiwiSGFzaEJpTWFwL0ludmVyc2UvMSIsMTAyMCksRCgxMDIxLDM1OCxObGUsalplKSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxoLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nfSxoLm5kPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtyZXR1cm4gYT10aGlzLmEuZyxuPVlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpLG49PXRoaXMuYS5hJiYocWUodCk9PT1xZShhKXx8dCE9bnVsbCYmUGkodCxhKSk/dDoobjB0KCFnQSh0aGlzLmIuYS5hLHQsbiksdCksdTYodGhpcy5iLmEuYSx0aGlzLmEpLHI9bmV3IHhIKHQsbix0aGlzLmEuaSx0aGlzLmEuZiksdGhpcy5hPXIsZVAodGhpcy5iLmEuYSxyLG51bGwpLHRoaXMuYi5iPXRoaXMuYi5hLmEuZyxhKX0sSShkbiwiSGFzaEJpTWFwL0ludmVyc2UvMS9JbnZlcnNlRW50cnkiLDEwMjEpLEQoNjIwLDU0MixUbCxRc2UpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRKZSh0aGlzLmEuYSl9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49cEEodGhpcy5hLmEsdCxZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSksbj8odTYodGhpcy5hLmEsbiksITApOiExfSxJKGRuLCJIYXNoQmlNYXAvSW52ZXJzZS9JbnZlcnNlS2V5U2V0Iiw2MjApLEQoMTAxOSw1NDQsT2EsVEplKSxoLlhkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lml9LEkoZG4sIkhhc2hCaU1hcC9JbnZlcnNlL0ludmVyc2VLZXlTZXQvMSIsMTAxOSksRCgxMDIyLDEse30sd3opLGguWWQ9ZnVuY3Rpb24odCxuKXtIY24odGhpcy5hLHQsbil9LEkoZG4sIkhhc2hCaU1hcC9JbnZlcnNlL2xhbWJkYSQwJFR5cGUiLDEwMjIpLEQoNjE4LDU0MixUbCxKc2UpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENKZSh0aGlzLmEpfSxoLk1jPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPWdBKHRoaXMuYSx0LFlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpKSxuPyh1Nih0aGlzLmEsbiksbi5lPW51bGwsbi5jPW51bGwsITApOiExfSxJKGRuLCJIYXNoQmlNYXAvS2V5U2V0Iiw2MTgpLEQoMTAxOCw1NDQsT2EsQ0plKSxoLlhkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmd9LEkoZG4sIkhhc2hCaU1hcC9LZXlTZXQvMSIsMTAxOCksRCgxMTIzLDYyNyxKbSksSShkbiwiSGFzaE11bHRpbWFwR3d0U2VyaWFsaXphdGlvbkRlcGVuZGVuY2llcyIsMTEyMyksRCgyNzEsMTEyMyxKbSxDdyksaC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgS3ooQXkodGhpcy5hKSl9LGgucGQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEt6KEF5KHRoaXMuYSkpfSxoLmE9MixJKGRuLCJIYXNoTXVsdGltYXAiLDI3MSksRCgyMDk3LDMwNyxuVCksaC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5aZCgpLkhjKHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmQoKS5kYygpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmQoKS5nYygpfSxJKGRuLCJJbW11dGFibGVBc0xpc3QiLDIwOTcpLEQoMjAzMCw3MzAsclQpLGguVmQ9ZnVuY3Rpb24oKXtyZXR1cm4gd2QoKSxuZXcgTzgodGhpcy5hKX0saC5DYz1mdW5jdGlvbigpe3JldHVybiB3ZCgpLG5ldyBPOCh0aGlzLmEpfSxoLnhkPWZ1bmN0aW9uKCl7cmV0dXJuIHdkKCksbmV3IE84KHRoaXMuYSl9LEkoZG4sIkltbXV0YWJsZUJpTWFwIiwyMDMwKSxEKDIwNzUsMSx7fSksSShkbiwiSW1tdXRhYmxlQ29sbGVjdGlvbi9CdWlsZGVyIiwyMDc1KSxEKDEwMzUsNzE5LFN4LFNKZSksSShkbiwiSW1tdXRhYmxlRW51bVNldCIsMTAzNSksRCg5ODAsMzk5LHRULHJpdCksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLlhiKHQpfSxJKGRuLCJJbW11dGFibGVMaXN0LzEiLDk4MCksRCg5NzksMjA3NSx7fSxHcnQpLEkoZG4sIkltbXV0YWJsZUxpc3QvQnVpbGRlciIsOTc5KSxEKDYyMywyMDQsZVQsYmspLGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmEuUGIoKSw0NCkubGQoKX0sSShkbiwiSW1tdXRhYmxlTWFwLzEiLDYyMyksRCgxMDU0LDEse30sUiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQ0KS5sZCgpfSxJKGRuLCJJbW11dGFibGVNYXAvMm1ldGhvZHJlZiRnZXRLZXkkVHlwZSIsMTA1NCksRCgxMDUzLDEse30sS3J0KSxJKGRuLCJJbW11dGFibGVNYXAvQnVpbGRlciIsMTA1MyksRCgyMDk4LDIwNzksU3gpLGguTWQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIsdHx8KHRoaXMuYj1uZXcgRmllKHRoaXMpKX0saC5OZD1mdW5jdGlvbigpe3JldHVybiBuZXcgbzVlKHRoaXMsUEEodGhpcyxXZSh3YSxSbiwxLHRoaXMuZ2MoKSw1LDEpKSl9LEkoZG4sIkltbXV0YWJsZVNldC9DYWNoaW5nQXNMaXN0IiwyMDk4KSxEKDIwOTksMjA5OCxTeCksaC5LYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PU1tKHRoaXMuYSkuT2QoKSxuZXcgYmsodCl9LGguTmQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZpZSh0aGlzKX0saC5KYz1mdW5jdGlvbih0KXt2YXIgbixyO2ZvcihYcih0KSxyPXRoaXMuZ2MoKSxuPTA7bjxyO24rKyl0LkNkKGwoTW0odGhpcy5hKS5NZCgpLlhiKG4pLDQ0KS5sZCgpKX0saC5PZD1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuYixpYWUodHx8KHRoaXMuYj1uZXcgRmllKHRoaXMpKSwwKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBDYWUodGhpcy5nYygpLDEyOTYsbmV3IHpJKHRoaXMpKX0sSShkbiwiSW5kZXhlZEltbXV0YWJsZVNldCIsMjA5OSksRCgxMjMwLDIwOTksU3gsTFFlKSxoLktjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9TW0odGhpcy5hKS5PZCgpLG5ldyBiayh0KX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLl9iKHQpfSxoLkpjPWZ1bmN0aW9uKHQpe1hyKHQpLG1BKHRoaXMuYSxuZXcgeTUodCkpfSxoLk9kPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9TW0odGhpcy5hKS5PZCgpLG5ldyBiayh0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBOTyhNbSh0aGlzLmEpLk5jKCksbmV3IFIpfSxJKGRuLCJJbW11dGFibGVNYXBLZXlTZXQiLDEyMzApLEQoMTIzMSwxLHt9LHk1KSxoLllkPWZ1bmN0aW9uKHQsbil7d2QoKSx0aGlzLmEuQ2QodCl9LEkoZG4sIkltbXV0YWJsZU1hcEtleVNldC9sYW1iZGEkMCRUeXBlIiwxMjMxKSxEKDEyMjcsMjA3OCx0RWUsTVFlKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFYWUodGhpcyl9LGguTWQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1NbSh0aGlzLmEpLk1kKCksbmV3IG1udCh0aGlzLHQpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZTOG4obmV3IEVhZSh0aGlzKSx0KX0saC5PZD1mdW5jdGlvbigpe3JldHVybiBuZXcgRWFlKHRoaXMpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIE5PKE1tKHRoaXMuYSkuTmMoKSxuZXcgRil9LEkoZG4sIkltbXV0YWJsZU1hcFZhbHVlcyIsMTIyNyksRCgxMjI4LDEse30sRiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQ0KS5tZCgpfSxJKGRuLCJJbW11dGFibGVNYXBWYWx1ZXMvMG1ldGhvZHJlZiRnZXRWYWx1ZSRUeXBlIiwxMjI4KSxEKDYzNywyMDQsZVQsRWFlKSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5PYigpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5hLlBiKCksNDQpLm1kKCl9LEkoZG4sIkltbXV0YWJsZU1hcFZhbHVlcy8xIiw2MzcpLEQoMTIyOSwyMDk3LG5ULG1udCksaC5aZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodGhpcy5iLlhiKHQpLDQ0KS5tZCgpfSxJKGRuLCJJbW11dGFibGVNYXBWYWx1ZXMvMiIsMTIyOSksRCgxMjMyLDEse30sekkpLGgudGQ9ZnVuY3Rpb24odCl7cmV0dXJuIFFzdCh0aGlzLmEsdCl9LEkoZG4sIkluZGV4ZWRJbW11dGFibGVTZXQvMG1ldGhvZHJlZiRnZXQkVHlwZSIsMTIzMiksRCg2MzgsMjA5NyxuVCxGaWUpLGguWmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiBRc3QodGhpcy5hLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5hLmdjKCl9LEkoZG4sIkluZGV4ZWRJbW11dGFibGVTZXQvMSIsNjM4KSxEKDQzLDEse30saiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDIwKS5LYygpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShkbiwiSXRlcmFibGVzLzEwIiw0MyksRCgxMDU1LDU0NyxoZyxqaXQpLGguSmM9ZnVuY3Rpb24odCl7WHIodCksdGhpcy5iLkpjKG5ldyAkWmUodGhpcy5hLHQpKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBseWUodGhpcyl9LEkoZG4sIkl0ZXJhYmxlcy80IiwxMDU1KSxEKDEwNTYsMSxmciwkWmUpLGguQ2Q9ZnVuY3Rpb24odCl7bGxuKHRoaXMuYix0aGlzLmEsdCl9LEkoZG4sIkl0ZXJhYmxlcy80L2xhbWJkYSQwJFR5cGUiLDEwNTYpLEQoMTA1Nyw1NDcsaGcsJGl0KSxoLkpjPWZ1bmN0aW9uKHQpe1hyKHQpLHRvKHRoaXMuYSxuZXcgcVplKHQsdGhpcy5iKSl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gZHIobmV3IG9yKHRoaXMuYSksdGhpcy5iKX0sSShkbiwiSXRlcmFibGVzLzUiLDEwNTcpLEQoMTA1OCwxLGZyLHFaZSksaC5DZD1mdW5jdGlvbih0KXt0aGlzLmEuQ2QoYW50KHQpKX0sSShkbiwiSXRlcmFibGVzLzUvbGFtYmRhJDAkVHlwZSIsMTA1OCksRCgxMDg3LDIwNCxlVCx3OCksaC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuUGIoKX0sSShkbiwiSXRlcmF0b3JzLzEiLDEwODcpLEQoMTA4OCw3MTMsZVQselplKSxoLlliPWZ1bmN0aW9uKCl7Zm9yKHZhciB0O3RoaXMuYi5PYigpOylpZih0PXRoaXMuYi5QYigpLHRoaXMuYS5MYih0KSlyZXR1cm4gdDtyZXR1cm4gdGhpcy5lPTIsbnVsbH0sSShkbiwiSXRlcmF0b3JzLzUiLDEwODgpLEQoNDk3LDEsT2EpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuT2IoKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkKHRoaXMuYi5QYigpKX0saC5RYj1mdW5jdGlvbigpe3RoaXMuYi5RYigpfSxJKGRuLCJUcmFuc2Zvcm1lZEl0ZXJhdG9yIiw0OTcpLEQoMTA4OSw0OTcsT2EsS250KSxoLiRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuS2IodCl9LEkoZG4sIkl0ZXJhdG9ycy82IiwxMDg5KSxEKDczMiwyMDQsZVQscUkpLGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5hfSxoLlBiPWZ1bmN0aW9uKCl7aWYodGhpcy5hKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIHRoaXMuYT0hMCx0aGlzLmJ9LGguYT0hMSxJKGRuLCJJdGVyYXRvcnMvOSIsNzMyKSxEKDEwODYsMzk5LHRULGhzdCksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hW3RoaXMuYit0XX0saC5iPTA7dmFyIHM2dDtJKGRuLCJJdGVyYXRvcnMvQXJyYXlJdHIiLDEwODYpLEQoMzgsMSx7Mzg6MSw1MToxfSxociksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGpyKHRoaXMpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHhyKHRoaXMpfSxoLlFiPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYyl0aHJvdyB1ZShuZXcgbmMoSmtlKSk7dGhpcy5jLlFiKCksdGhpcy5jPW51bGx9LEkoZG4sIkl0ZXJhdG9ycy9Db25jYXRlbmF0ZWRJdGVyYXRvciIsMzgpLEQoMjIsMSx7MzoxLDM0OjEsMjI6MX0pLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFBKZSh0aGlzLGwodCwyMikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5IYj1mdW5jdGlvbigpe3JldHVybiBmdyh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBhYWUodGhpcyl9LGguZz0wO3ZhciBIcj1JKFZjLCJFbnVtIiwyMik7RCg1NDksMjIsezU0OToxLDM6MSwzNDoxLDIyOjEsNTE6MX0sQW50KSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5QYj1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBfYyl9LGguUWI9ZnVuY3Rpb24oKXtSayghMSl9O3ZhciBFMGUsYTZ0PUZyKGRuLCJJdGVyYXRvcnMvRW1wdHlNb2RpZmlhYmxlSXRlcmF0b3IiLDU0OSxIcixrZ24sVmhuKSxvNnQ7RCgxOTA3LDYyNyxKbSksSShkbiwiTGlua2VkSGFzaE11bHRpbWFwR3d0U2VyaWFsaXphdGlvbkRlcGVuZGVuY2llcyIsMTkwNyksRCgxOTA4LDE5MDcsSm0sRzB0KSxoLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuYWUoQXkodGhpcy5iKSl9LGguJGI9ZnVuY3Rpb24oKXttVih0aGlzKSxXSSh0aGlzLmEsdGhpcy5hKX0saC5wZD1mdW5jdGlvbigpe3JldHVybiBuZXcgbmFlKEF5KHRoaXMuYikpfSxoLmljPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQTB0KHRoaXMsdCx0aGlzLmIpfSxoLmtjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2NWUodGhpcyl9LGgubGM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gbmV3IGtuKCh0PXRoaXMuZyxsKHR8fCh0aGlzLmc9bmV3IFV3ZSh0aGlzKSksMjEpKSwxNyl9LGguZWM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmksdHx8KHRoaXMuaT1uZXcgcTUodGhpcyx0aGlzLmMpKX0saC5uYz1mdW5jdGlvbigpe3JldHVybiBuZXcgS3dlKG5ldyB2NWUodGhpcykpfSxoLm9jPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIE5PKG5ldyBrbigodD10aGlzLmcsbCh0fHwodGhpcy5nPW5ldyBVd2UodGhpcykpLDIxKSksMTcpLG5ldyBLKX0saC5iPTIsSShkbiwiTGlua2VkSGFzaE11bHRpbWFwIiwxOTA4KSxEKDE5MTEsMSx7fSxLKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsNDQpLm1kKCl9LEkoZG4sIkxpbmtlZEhhc2hNdWx0aW1hcC8wbWV0aG9kcmVmJGdldFZhbHVlJFR5cGUiLDE5MTEpLEQoODM0LDEsT2EsdjVlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gUDNuKHRoaXMpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSE9dGhpcy5iLmF9LGguUWI9ZnVuY3Rpb24oKXtSayghIXRoaXMuYyksY2N0KHRoaXMuYix0aGlzLmMuZyx0aGlzLmMuaSksdGhpcy5jPW51bGx9LEkoZG4sIkxpbmtlZEhhc2hNdWx0aW1hcC8xIiw4MzQpLEQoMjI3LDI0Nix7MzU4OjEsMjQ2OjEsMjI3OjEsNjA0OjEsMzoxLDQ0OjF9LFM1ZSksaC5fZD1mdW5jdGlvbigpe3JldHVybiBsKExmKHRoaXMuZiksNjA0KX0saC5hZT1mdW5jdGlvbih0KXt0aGlzLmM9dH0saC5iZT1mdW5jdGlvbih0KXt0aGlzLmY9dH0saC5kPTA7dmFyIGM2dD1JKGRuLCJMaW5rZWRIYXNoTXVsdGltYXAvVmFsdWVFbnRyeSIsMjI3KTtEKDE5MDksMjA2OCx7NjA0OjEsMjA6MSwzMToxLDE2OjEsMjE6MX0sQTB0KSxoLkZjPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGY9WXIobW8oZmcsaWcoWXIobW8odD09bnVsbD8wOmVzKHQpLGRnKSksMTUpKSksbj1mJnRoaXMuYi5sZW5ndGgtMSxvPXRoaXMuYltuXSxyPW87cjtyPXIuYSlpZihyLmQ9PWYmJnlkKHIuaSx0KSlyZXR1cm4hMTtyZXR1cm4gYT1uZXcgUzVlKHRoaXMuYyx0LGYsbyksUkplKHRoaXMuZCxhKSxhLmY9dGhpcyx0aGlzLmQ9YSxXSShsKExmKHRoaXMuZy5hLmIpLDIyNyksYSksV0koYSx0aGlzLmcuYSksdGhpcy5iW25dPWEsKyt0aGlzLmYsKyt0aGlzLmUsVDhuKHRoaXMpLCEwfSxoLiRiPWZ1bmN0aW9uKCl7dmFyIHQsbjtmb3IoYU8odGhpcy5iLG51bGwpLHRoaXMuZj0wLHQ9dGhpcy5hO3QhPXRoaXM7dD10Ll9kKCkpbj1sKHQsMjI3KSxXSShsKExmKG4uYiksMjI3KSxsKExmKG4uZSksMjI3KSk7dGhpcy5hPXRoaXMsdGhpcy5kPXRoaXMsKyt0aGlzLmV9LGguSGM9ZnVuY3Rpb24odCl7dmFyIG4scjtmb3Iocj1ZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSxuPXRoaXMuYltyJnRoaXMuYi5sZW5ndGgtMV07bjtuPW4uYSlpZihuLmQ9PXImJnlkKG4uaSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0saC5KYz1mdW5jdGlvbih0KXt2YXIgbjtmb3IoWHIodCksbj10aGlzLmE7biE9dGhpcztuPW4uX2QoKSl0LkNkKGwobiwyMjcpLmkpfSxoLl9kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgcmF0KHRoaXMpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiB1YnQodGhpcyx0KX0saC5hZT1mdW5jdGlvbih0KXt0aGlzLmQ9dH0saC5iZT1mdW5jdGlvbih0KXt0aGlzLmE9dH0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGguZT0wLGguZj0wLEkoZG4sIkxpbmtlZEhhc2hNdWx0aW1hcC9WYWx1ZVNldCIsMTkwOSksRCgxOTEwLDEsT2EscmF0KSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gcTRlKHRoaXMpLHRoaXMuYiE9dGhpcy5jfSxoLlBiPWZ1bmN0aW9uKCl7dmFyIHQsbjtpZihxNGUodGhpcyksdGhpcy5iPT10aGlzLmMpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gdD1sKHRoaXMuYiwyMjcpLG49dC5pLHRoaXMuZD10LHRoaXMuYj1sKExmKHQuZiksNjA0KSxufSxoLlFiPWZ1bmN0aW9uKCl7cTRlKHRoaXMpLFJrKCEhdGhpcy5kKSx1YnQodGhpcy5jLHRoaXMuZC5pKSx0aGlzLmE9dGhpcy5jLmUsdGhpcy5kPW51bGx9LGguYT0wLEkoZG4sIkxpbmtlZEhhc2hNdWx0aW1hcC9WYWx1ZVNldC8xIiwxOTEwKSxEKDc4MCwyMDg0LEptLFV0dCksaC5aYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuZix0fHwodGhpcy5mPW5ldyBDM2UodGhpcykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBFY2UodGhpcyx0KX0saC5jYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHNzZSh0aGlzLHQpfSxoLmZjPWZ1bmN0aW9uKHQpe3JldHVybiBNNmUodGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe2pzdCh0aGlzKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gWVplKHRoaXMsdCl9LGguYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEMzZSh0aGlzKX0saC5iYz1mdW5jdGlvbigpe3JldHVybiBuZXcgeGllKHRoaXMpfSxoLnFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgc3NlKHRoaXMsdCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5hfSxoLnJjPWZ1bmN0aW9uKHQpe3JldHVybiBNNmUodGhpcyx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguYz0wLGguZD0wLEkoZG4sIkxpbmtlZExpc3RNdWx0aW1hcCIsNzgwKSxEKDU2LDMxLGlUKSxoLmpkPWZ1bmN0aW9uKHQpeyRtKHRoaXMsdCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMTYpfSxoLmJkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IEhwKCJBZGQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYmQodGhpcy5nYygpLHQpLCEwfSxoLmNkPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvO2ZvcihucihuKSxyPSExLG89bi5LYygpO28uT2IoKTspYT1vLlBiKCksdGhpcy5iZCh0KyssYSkscj0hMDtyZXR1cm4gcn0saC4kYj1mdW5jdGlvbigpe3RoaXMuY2UoMCx0aGlzLmdjKCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBPOWUodGhpcyx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBxN2UodGhpcyl9LGguZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIFhodCh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrcih0aGlzKX0saC5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZkKDApfSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVWEodGhpcyx0KX0saC5nZD1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgSHAoIlJlbW92ZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbGlzdCIpKX0saC5jZT1mdW5jdGlvbih0LG4pe3ZhciByLGE7Zm9yKGE9dGhpcy5mZCh0KSxyPXQ7cjxuOysrcilhLlBiKCksYS5RYigpfSxoLmhkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IEhwKCJTZXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IFpwKHRoaXMsdCxuKX0saC5qPTAsSShMciwiQWJzdHJhY3RMaXN0Iiw1NiksRCgyMDYyLDU2LGlUKSxoLmJkPWZ1bmN0aW9uKHQsbil7UGsodGhpcyx0LG4pfSxoLmNkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEwwdCh0aGlzLHQsbil9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIGZmKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZCgwKX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4ga3VlKHRoaXMsdCl9LGguaGQ9ZnVuY3Rpb24odCxuKXt2YXIgcixhO3I9dGhpcy5mZCh0KTt0cnl7cmV0dXJuIGE9ci5QYigpLHIuV2IobiksYX1jYXRjaChvKXt0aHJvdyBvPWJzKG8pLERlKG8sMTEyKT91ZShuZXcgdGMoIkNhbid0IHNldCBlbGVtZW50ICIrdCkpOnVlKG8pfX0sSShMciwiQWJzdHJhY3RTZXF1ZW50aWFsTGlzdCIsMjA2MiksRCg2NDYsMjA2MixpVCxzc2UpLGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFludCh0aGlzLHQpfSxoLmdjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bChjcih0aGlzLmEuYix0aGlzLmIpLDI2MCksdD90LmE6MH0sSShkbiwiTGlua2VkTGlzdE11bHRpbWFwLzEiLDY0NiksRCgxMzE2LDIwNjgsVGwseGllKSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBZWmUodGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnZnQodGhpcy5hKX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4hTTZlKHRoaXMuYSx0KS5hLmRjKCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gZF8odGhpcy5hLmIpfSxJKGRuLCJMaW5rZWRMaXN0TXVsdGltYXAvMUtleVNldEltcGwiLDEzMTYpLEQoMTMxNSwxLE9hLGdmdCksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEg0ZSh0aGlzKSwhIXRoaXMuY30saC5QYj1mdW5jdGlvbigpe2lmKEg0ZSh0aGlzKSwhdGhpcy5jKXRocm93IHVlKG5ldyBfYyk7dGhpcy5hPXRoaXMuYyxuYSh0aGlzLmQsdGhpcy5hLmEpO2RvIHRoaXMuYz10aGlzLmMuYjt3aGlsZSh0aGlzLmMmJiFuYSh0aGlzLmQsdGhpcy5jLmEpKTtyZXR1cm4gdGhpcy5hLmF9LGguUWI9ZnVuY3Rpb24oKXtINGUodGhpcyksUmsoISF0aGlzLmEpLGlIKG5ldyB6b2UodGhpcy5lLHRoaXMuYS5hKSksdGhpcy5hPW51bGwsdGhpcy5iPXRoaXMuZS5jfSxoLmI9MCxJKGRuLCJMaW5rZWRMaXN0TXVsdGltYXAvRGlzdGluY3RLZXlJdGVyYXRvciIsMTMxNSksRCgyNjAsMSx7MjYwOjF9LEI1ZSksaC5hPTAsSShkbiwiTGlua2VkTGlzdE11bHRpbWFwL0tleUxpc3QiLDI2MCksRCg1MTEsMzU4LHszNTg6MSw1MTE6MSw0NDoxfSxIWmUpLGgubGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC5uZD1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10aGlzLmYsdGhpcy5mPXQsbn0sSShkbiwiTGlua2VkTGlzdE11bHRpbWFwL05vZGUiLDUxMSksRCg1NjYsMSxsZyx6b2UseXB0KSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUmI9ZnVuY3Rpb24odCl7dGhpcy5lPWRrZSh0aGlzLmYsdGhpcy5iLHQsdGhpcy5jKSwrK3RoaXMuZCx0aGlzLmE9bnVsbH0saC5PYj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jfSxoLlNiPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmV9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gRzZlKHRoaXMpfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0saC5VYj1mdW5jdGlvbigpe3JldHVybiBuaHQodGhpcyl9LGguVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kLTF9LGguUWI9ZnVuY3Rpb24oKXtSayghIXRoaXMuYSksdGhpcy5hIT10aGlzLmM/KHRoaXMuZT10aGlzLmEuZSwtLXRoaXMuZCk6dGhpcy5jPXRoaXMuYS5jLHpUbih0aGlzLmYsdGhpcy5hKSx0aGlzLmE9bnVsbH0saC5XYj1mdW5jdGlvbih0KXtDeWUoISF0aGlzLmEpLHRoaXMuYS5mPXR9LGguZD0wLEkoZG4sIkxpbmtlZExpc3RNdWx0aW1hcC9WYWx1ZUZvcktleUl0ZXJhdG9yIiw1NjYpLEQoMTAzMSw1NixpVCksaC5iZD1mdW5jdGlvbih0LG4pe3RoaXMuYS5iZCh0LG4pfSxoLmNkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuYS5jZCh0LG4pfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuSGModCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5YYih0KX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLmdkKHQpfSxoLmhkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuYS5oZCh0LG4pfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxJKGRuLCJMaXN0cy9BYnN0cmFjdExpc3RXcmFwcGVyIiwxMDMxKSxEKDEwMzIsMTAzMSxCd3QpLEkoZG4sIkxpc3RzL1JhbmRvbUFjY2Vzc0xpc3RXcmFwcGVyIiwxMDMyKSxEKDEwMzQsMTAzMixCd3QsS1plKSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuZmQodCl9LEkoZG4sIkxpc3RzLzEiLDEwMzQpLEQoNDQxLDU2LHs0NDE6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjF9LHAzZSksaC5iZD1mdW5jdGlvbih0LG4pe3RoaXMuYS5iZChIayh0aGlzLHQpLG4pfSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5YYihtNWUodGhpcyx0KSl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gem90KHRoaXMsMCl9LGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHpvdCh0aGlzLHQpfSxoLmdkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuZ2QobTVlKHRoaXMsdCkpfSxoLmNlPWZ1bmN0aW9uKHQsbil7KG1jdCh0LG4sdGhpcy5hLmdjKCkpLGxmKHRoaXMuYS5rZChIayh0aGlzLG4pLEhrKHRoaXMsdCkpKSkuJGIoKX0saC5oZD1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmEuaGQobTVlKHRoaXMsdCksbil9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbWN0KHQsbix0aGlzLmEuZ2MoKSksbGYodGhpcy5hLmtkKEhrKHRoaXMsbiksSGsodGhpcyx0KSkpfSxJKGRuLCJMaXN0cy9SZXZlcnNlTGlzdCIsNDQxKSxEKDEwMzAsNDQxLHs0NDE6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNTk6MX0sX0plKSxJKGRuLCJMaXN0cy9SYW5kb21BY2Nlc3NSZXZlcnNlTGlzdCIsMTAzMCksRCgxMDMzLDEsbGcsVlplKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUmI9ZnVuY3Rpb24odCl7dGhpcy5jLlJiKHQpLHRoaXMuYy5VYigpLHRoaXMuYT0hMX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuU2IoKX0saC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuT2IoKX0saC5QYj1mdW5jdGlvbigpe2lmKCF0aGlzLmMuU2IoKSl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiB0aGlzLmE9ITAsdGhpcy5jLlViKCl9LGguVGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGsodGhpcy5iLHRoaXMuYy5UYigpKX0saC5VYj1mdW5jdGlvbigpe2lmKCF0aGlzLmMuT2IoKSl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiB0aGlzLmE9ITAsdGhpcy5jLlBiKCl9LGguVmI9ZnVuY3Rpb24oKXtyZXR1cm4gSGsodGhpcy5iLHRoaXMuYy5UYigpKS0xfSxoLlFiPWZ1bmN0aW9uKCl7UmsodGhpcy5hKSx0aGlzLmMuUWIoKSx0aGlzLmE9ITF9LGguV2I9ZnVuY3Rpb24odCl7Q3llKHRoaXMuYSksdGhpcy5jLldiKHQpfSxoLmE9ITEsSShkbiwiTGlzdHMvUmV2ZXJzZUxpc3QvMSIsMTAzMyksRCg0NDAsNDk3LE9hLGNfKSxoLiRkPWZ1bmN0aW9uKHQpe3JldHVybiBzcSh0KX0sSShkbiwiTWFwcy8xIiw0NDApLEQoNzEyLDQ5NyxPYSxLd2UpLGguJGQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCw0NCkubWQoKX0sSShkbiwiTWFwcy8yIiw3MTIpLEQoOTc1LDQ5NyxPYSxXbnQpLGguJGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpdyh0LFp0dCh0aGlzLmEsdCkpfSxJKGRuLCJNYXBzLzMiLDk3NSksRCg5NzIsMjA2OSxUbCx5eiksaC5KYz1mdW5jdGlvbih0KXtXY24odGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5rYygpfSxoLlJjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGMoKX0sSShkbiwiTWFwcy9JdGVyYXRvckJhc2VkQWJzdHJhY3RNYXAvMSIsOTcyKSxEKDk3MywxLHt9LHh6KSxoLllkPWZ1bmN0aW9uKHQsbil7dGhpcy5hLkNkKHQpfSxJKGRuLCJNYXBzL0tleVNldC9sYW1iZGEkMCRUeXBlIiw5NzMpLEQoOTcxLDMxLFd5LFdaZSksaC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEudWModCl9LGguSmM9ZnVuY3Rpb24odCl7WHIodCksdGhpcy5hLndjKG5ldyBpeSh0KSl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEt3ZSh0aGlzLmEudmMoKS5LYygpKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbixyO3RyeXtyZXR1cm4gTnkodGhpcyx0LCEwKX1jYXRjaChhKXtpZihhPWJzKGEpLERlKGEsNDgpKXtmb3Iocj10aGlzLmEudmMoKS5LYygpO3IuT2IoKTspaWYobj1sKHIuUGIoKSw0NCkseWQodCxuLm1kKCkpKXJldHVybiB0aGlzLmEuQmMobi5sZCgpKSwhMDtyZXR1cm4hMX1lbHNlIHRocm93IHVlKGEpfX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sSShkbiwiTWFwcy9WYWx1ZXMiLDk3MSksRCg5NzQsMSx7fSxpeSksaC5ZZD1mdW5jdGlvbih0LG4pe3RoaXMuYS5DZChuKX0sSShkbiwiTWFwcy9WYWx1ZXMvbGFtYmRhJDAkVHlwZSIsOTc0KSxEKDc1MiwyMDg1LFd3LEMzZSksaC54Yz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLl9iKHQpP3RoaXMuYS5jYyh0KTpudWxsfSxoLkJjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuX2IodCk/dGhpcy5hLmZjKHQpOm51bGx9LGguJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLl9iKHQpfSxoLkVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBISSh0aGlzKX0saC5EYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVjKCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuZ2MoKX0sSShkbiwiTXVsdGltYXBzL0FzTWFwIiw3NTIpLEQoMTEzNCwyMDY5LFRsLEhJKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIGRobih0aGlzLmEuYS5lYygpLG5ldyBWSSh0aGlzKSl9LGguUmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLk1jPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBPMXQodGhpcyx0KT8obj1sKExmKGwodCw0NCkpLDQ0KSxydW4odGhpcy5hLG4ubGQoKSksITApOiExfSxJKGRuLCJNdWx0aW1hcHMvQXNNYXAvRW50cnlTZXQiLDExMzQpLEQoMTEzOCwxLHt9LFZJKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBadHQodGhpcyx0KX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkoZG4sIk11bHRpbWFwcy9Bc01hcC9FbnRyeVNldC8xIiwxMTM4KSxEKDU1MiwyMDg3LHs1NTI6MSw4NDk6MSwyMDoxLDMxOjEsMTY6MX0sa3opLGguJGI9ZnVuY3Rpb24oKXttVih0aGlzLmEpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBpWmUodGhpcy5hLHQpfSxoLkpjPWZ1bmN0aW9uKHQpe1hyKHQpLHRvKFpfKHRoaXMuYSksbmV3IG1rKHQpKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgY18oWl8odGhpcy5hKS5hLmtjKCkpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIE5PKFpfKHRoaXMuYSkuTmMoKSxuZXcgZWUpfSxJKGRuLCJNdWx0aW1hcHMvS2V5cyIsNTUyKSxEKDExMzYsMSx7fSxlZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQ0KS5sZCgpfSxJKGRuLCJNdWx0aW1hcHMvS2V5cy8wbWV0aG9kcmVmJGdldEtleSRUeXBlIiwxMTM2KSxEKDExMzUsNDk3LE9hLEFKZSksaC4kZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHk4KGwodCw0NCkpfSxJKGRuLCJNdWx0aW1hcHMvS2V5cy8xIiwxMTM1KSxEKDIwODgsMSx7NDI1OjF9KSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBEZSh0LDUwNCk/KG49bCh0LDQyNSksbCh0aGlzLmEubWQoKSwxNikuZ2MoKT09bChuLmEubWQoKSwxNikuZ2MoKSYmeWQodGhpcy5hLmxkKCksbi5hLmxkKCkpKTohMX0saC5IYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuYS5sZCgpLCh0PT1udWxsPzA6ZXModCkpXmwodGhpcy5hLm1kKCksMTYpLmdjKCl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiBuPWpfKHRoaXMuYS5sZCgpKSx0PWwodGhpcy5hLm1kKCksMTYpLmdjKCksdD09MT9uOm4rIiB4ICIrdH0sSShkbiwiTXVsdGlzZXRzL0Fic3RyYWN0RW50cnkiLDIwODgpLEQoNTA0LDIwODgsezUwNDoxLDQyNToxfSx5OCksSShkbiwiTXVsdGltYXBzL0tleXMvMS8xIiw1MDQpLEQoMTEzNywxLGZyLG1rKSxoLkNkPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZChsKHQsNDQpLmxkKCkpfSxJKGRuLCJNdWx0aW1hcHMvS2V5cy9sYW1iZGEkMSRUeXBlIiwxMTM3KSxEKDExNDAsMSxmcixpZSksaC5DZD1mdW5jdGlvbih0KXtCZG4obCh0LDQyNSkpfSxJKGRuLCJNdWx0aXNldC9sYW1iZGEkMCRUeXBlIiwxMTQwKSxEKDc1MywxLGZyLGtpZSksaC5DZD1mdW5jdGlvbih0KXt4d24odGhpcy5hLGwodCw0MjUpKX0sSShkbiwiTXVsdGlzZXQvbGFtYmRhJDEkVHlwZSIsNzUzKSxEKDExNDEsMSx7fSxvZSksSShkbiwiTXVsdGlzZXRzLzBtZXRob2RyZWYkYWRkJFR5cGUiLDExNDEpLEQoNzU0LDEse30scGUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIFZibihsKHQsNDI1KSl9LEkoZG4sIk11bHRpc2V0cy9sYW1iZGEkMSRUeXBlIiw3NTQpLEQoMjEwNiwxLHlQKSxJKGRuLCJSYW5nZUd3dFNlcmlhbGl6YXRpb25EZXBlbmRlbmNpZXMiLDIxMDYpLEQoNTIxLDIxMDYsezE3ODoxLDUyMToxLDM6MSw0NjoxfSxXOGUpLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIENzdCh0aGlzLGwodCwzNCkpfSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBDc3QodGhpcyxsKHQsMzQpKX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCw1MjEpPyhuPWwodCw1MjEpLHJ4ZSh0aGlzLmEsbi5hKSYmcnhlKHRoaXMuYixuLmIpKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuSGIoKSozMSt0aGlzLmIuSGIoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBIY3QodGhpcy5hLHRoaXMuYil9LEkoZG4sIlJhbmdlIiw1MjEpLEQoNjU0LDIwOTcsblQsbzVlKSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiBpYWUodGhpcy5iLHQpfSxoLlpkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gYWIodGhpcy5iLHQpfSxoLlBkPWZ1bmN0aW9uKHQpe3JldHVybiBpYWUodGhpcy5iLHQpfSxJKGRuLCJSZWd1bGFySW1tdXRhYmxlQXNMaXN0Iiw2NTQpLEQoNjU2LDIxMDUsblQsb29lKSxoLlJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sSShkbiwiUmVndWxhckltbXV0YWJsZUxpc3QiLDY1NiksRCg1NDgsNzMwLHJULFd3ZSxZd2UpLEkoZG4sIlJlZ3VsYXJJbW11dGFibGVNYXAiLDU0OCksRCg3MzEsNzE5LFN4LGszZSk7dmFyIFZTZTtJKGRuLCJSZWd1bGFySW1tdXRhYmxlU2V0Iiw3MzEpLEQoMjA3NCxxMSxUbCksaC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTDVlKHRoaXMuYSx0aGlzLmIpfSxoLkZjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguR2M9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC4kYj1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguTWM9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0sSShkbiwiU2V0cy9TZXRWaWV3IiwyMDc0KSxEKDk3NiwyMDc0LFRsLEdaZSksaC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTDVlKHRoaXMuYSx0aGlzLmIpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBBYWUodGhpcy5hLHQpJiZ0aGlzLmIuSGModCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIEVOKHRoaXMuYSx0KSYmdGhpcy5iLkljKHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIG1kdCh0aGlzLmIsdGhpcy5hKX0saC5MYz1mdW5jdGlvbigpe3JldHVybiBGaShuZXcgYm4obnVsbCxuZXcga24odGhpcy5hLDEpKSxuZXcgVHoodGhpcy5iKSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4geU4odGhpcyl9LGguT2M9ZnVuY3Rpb24oKXtyZXR1cm4gRmkobmV3IGJuKG51bGwsbmV3IGtuKHRoaXMuYSwxKSksbmV3IEV6KHRoaXMuYikpfSxJKGRuLCJTZXRzLzIiLDk3NiksRCg5NzcsMSx0aSxFeiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLkhjKHQpfSxJKGRuLCJTZXRzLzIvMG1ldGhvZHJlZiRjb250YWlucyRUeXBlIiw5NzcpLEQoNzE0LDcxMyxlVCxMNWUpLGguWWI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ7Z3llKHRoaXMuYSk7KWlmKHQ9Y0EodGhpcy5hKSx0aGlzLmMuSGModCkpcmV0dXJuIHQ7cmV0dXJuIHRoaXMuZT0yLG51bGx9LEkoZG4sIlNldHMvMi8xIiw3MTQpLEQoOTc4LDEsdGksVHopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5IYyh0KX0sSShkbiwiU2V0cy8yLzFtZXRob2RyZWYkY29udGFpbnMkVHlwZSIsOTc4KSxEKDYxNiwyMDczLHs2MTY6MSwzOjEsMjA6MSwxNjoxLDI3NzoxLDIxOjEsODc6MX0sb290KSxoLktkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5MZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGguV2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkpjPWZ1bmN0aW9uKHQpe3RoaXMuYS5KYyh0KX0saC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuTGMoKX0saC5PYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2MoKX0sSShkbiwiU2V0cy9Vbm1vZGlmaWFibGVOYXZpZ2FibGVTZXQiLDYxNiksRCgyMDMxLDIwMzAsclQsaGF0KSxoLlZkPWZ1bmN0aW9uKCl7cmV0dXJuIHdkKCksbmV3IE84KHRoaXMuYSl9LGguQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gd2QoKSxuZXcgTzgodGhpcy5hKX0saC54ZD1mdW5jdGlvbigpe3JldHVybiB3ZCgpLG5ldyBPOCh0aGlzLmEpfSxJKGRuLCJTaW5nbGV0b25JbW11dGFibGVCaU1hcCIsMjAzMSksRCg2NTcsMjEwNSxuVCxTYWUpLGguUmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxJKGRuLCJTaW5nbGV0b25JbW11dGFibGVMaXN0Iiw2NTcpLEQoMzYzLDIwNzksU3gsTzgpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFJKHRoaXMuYSl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIFBpKHRoaXMuYSx0KX0saC5PZD1mdW5jdGlvbigpe3JldHVybiBuZXcgcUkodGhpcy5hKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiAxfSxJKGRuLCJTaW5nbGV0b25JbW11dGFibGVTZXQiLDM2MyksRCgxMTQ4LDEse30sYmUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxNTkpfSxJKGRuLCJTdHJlYW1zL2xhbWJkYSQwJFR5cGUiLDExNDgpLEQoMTE0OSwxLFFVLEN6KSxoLmRlPWZ1bmN0aW9uKCl7Wm1uKHRoaXMuYSl9LEkoZG4sIlN0cmVhbXMvbGFtYmRhJDEkVHlwZSIsMTE0OSksRCgxNzI1LDE3MjQsSm0sVWF0KSxoLlpiPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5mLGwobCh0fHwodGhpcy5mPURlKHRoaXMuYywxMzkpP25ldyBxXyh0aGlzLGwodGhpcy5jLDEzOSkpOkRlKHRoaXMuYywxMzMpP25ldyBfTyh0aGlzLGwodGhpcy5jLDEzMykpOm5ldyBMayh0aGlzLHRoaXMuYykpLDEzMyksMTM5KX0saC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgS3AodGhpcy5iKX0saC5wZD1mdW5jdGlvbigpe3JldHVybiBuZXcgS3AodGhpcy5iKX0saC5lYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuaSxsKGwodHx8KHRoaXMuaT1EZSh0aGlzLmMsMTM5KT9uZXcgQWsodGhpcyxsKHRoaXMuYywxMzkpKTpEZSh0aGlzLmMsMTMzKT9uZXcgdE8odGhpcyxsKHRoaXMuYywxMzMpKTpuZXcgcTUodGhpcyx0aGlzLmMpKSw4NyksMjc3KX0saC5hYz1mdW5jdGlvbigpe3JldHVybiBEZSh0aGlzLmMsMTM5KT9uZXcgcV8odGhpcyxsKHRoaXMuYywxMzkpKTpEZSh0aGlzLmMsMTMzKT9uZXcgX08odGhpcyxsKHRoaXMuYywxMzMpKTpuZXcgTGsodGhpcyx0aGlzLmMpfSxoLmljPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsJiZ0aGlzLmEuTmUodCx0KSxuZXcgS3AodGhpcy5iKX0sSShkbiwiVHJlZU11bHRpbWFwIiwxNzI1KSxEKDgyLDEsezM6MSw4MjoxfSksaC5lZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEVycm9yKHQpfSxoLmZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0saC5nZT1mdW5jdGlvbigpe3ZhciB0LG4scjtmb3Iocj0odGhpcy5rPT1udWxsJiYodGhpcy5rPVdlKFQwZSxkdCw4MiwwLDAsMSkpLHRoaXMuayksbj1XZSh3YSxSbiwxLHIubGVuZ3RoLDUsMSksdD0wO3Q8ci5sZW5ndGg7dCsrKW5bdF09clt0XS5lO3JldHVybiBufSxoLmhlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC5pZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGguamU9ZnVuY3Rpb24oKXtaY24odGhpcyxPYm4odGhpcy5lZShESCh0aGlzLHRoaXMuZykpKSksRFFlKHRoaXMpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIERIKHRoaXMsdGhpcy5pZSgpKX0saC5lPUZ3dCxoLmk9ITEsaC5uPSEwO3ZhciBUMGU9SShWYywiVGhyb3dhYmxlIiw4Mik7RCgxMDMsODIsezM6MSwxMDM6MSw4MjoxfSksSShWYywiRXhjZXB0aW9uIiwxMDMpLEQoNjMsMTAzLGxwLENtLEFjKSxJKFZjLCJSdW50aW1lRXhjZXB0aW9uIiw2MyksRCg2MDcsNjMsbHApLEkoVmMsIkpzRXhjZXB0aW9uIiw2MDcpLEQoODc1LDYwNyxscCksSShDUCwiSmF2YVNjcmlwdEV4Y2VwdGlvbkJhc2UiLDg3NSksRCg0ODYsODc1LHs0ODY6MSwzOjEsMTAzOjEsNjM6MSw4MjoxfSxVMHQpLGguaWU9ZnVuY3Rpb24oKXtyZXR1cm4gVzhuKHRoaXMpLHRoaXMuY30saC5rZT1mdW5jdGlvbigpe3JldHVybiBxZSh0aGlzLmIpPT09cWUoVVNlKT9udWxsOnRoaXMuYn07dmFyIFVTZTtJKHJFZSwiSmF2YVNjcmlwdEV4Y2VwdGlvbiIsNDg2KTt2YXIgdTZ0PUkockVlLCJKYXZhU2NyaXB0T2JqZWN0JCIsMCksQzBlO0QoMjA0NywxLHt9KSxJKHJFZSwiU2NoZWR1bGVyIiwyMDQ3KTt2YXIgYUs9MCxsNnQ9MCxvSz0tMTtEKDkwMiwyMDQ3LHt9LGFlKTt2YXIgR1NlO0koQ1AsIlNjaGVkdWxlckltcGwiLDkwMik7dmFyIFMwZTtEKDIwNTgsMSx7fSksSShDUCwiU3RhY2tUcmFjZUNyZWF0b3IvQ29sbGVjdG9yIiwyMDU4KSxEKDg3NiwyMDU4LHt9LG5lKSxoLmxlPWZ1bmN0aW9uKHQpe3ZhciBuPXt9LHI9W107dFtqbGVdPXI7Zm9yKHZhciBhPWFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyO2E7KXt2YXIgbz0oWGsoKSxhLm5hbWV8fChhLm5hbWU9TnduKGEudG9TdHJpbmcoKSkpKTtyLnB1c2gobyk7dmFyIGY9IjoiK28sZz1uW2ZdO2lmKGcpe3ZhciB3LEU7Zm9yKHc9MCxFPWcubGVuZ3RoO3c8RTt3KyspaWYoZ1t3XT09PWEpcmV0dXJufShnfHwobltmXT1bXSkpLnB1c2goYSksYT1hLmNhbGxlcn19LGgubWU9ZnVuY3Rpb24odCl7dmFyIG4scixhLG87Zm9yKGE9KFhrKCksdCYmdFtqbGVdP3RbamxlXTpbXSkscj1hLmxlbmd0aCxvPVdlKGFfZSxkdCwzMTksciwwLDEpLG49MDtuPHI7bisrKW9bbl09bmV3IFphZShhW25dLG51bGwsLTEpO3JldHVybiBvfSxJKENQLCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JMZWdhY3kiLDg3NiksRCgyMDU5LDIwNTgse30pLGgubGU9ZnVuY3Rpb24odCl7fSxoLm5lPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiBuZXcgWmFlKG4sdCsiQCIrYSxyPDA/LTE6cil9LGgubWU9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnO2lmKG89eDduKHQpLGY9V2UoYV9lLGR0LDMxOSwwLDAsMSksbj0wLGE9by5sZW5ndGgsYT09MClyZXR1cm4gZjtmb3IoZz16dnQodGhpcyxvWzBdKSx2bihnLmQsUmxlKXx8KGZbbisrXT1nKSxyPTE7cjxhO3IrKylmW24rK109enZ0KHRoaXMsb1tyXSk7cmV0dXJuIGZ9LEkoQ1AsIlN0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3Rvck1vZGVybiIsMjA1OSksRCg4NzcsMjA1OSx7fSxzZSksaC5uZT1mdW5jdGlvbih0LG4scixhKXtyZXR1cm4gbmV3IFphZShuLHQsLTEpfSxJKENQLCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JNb2Rlcm5Ob1NvdXJjZU1hcCIsODc3KSxEKDEwNjQsMSx7fSksSShzRWUsJHd0LDEwNjQpLEQoNjI0LDEwNjQsezYyNDoxfSxYc3QpO3ZhciBLU2U7SShpaGUsJHd0LDYyNCksRCgyMTAxLDEse30pLEkoc0VlLHp3dCwyMTAxKSxEKDIxMDIsMjEwMSx7fSksSShpaGUsend0LDIxMDIpLEQoMTEyMCwxLHt9LGRlKTt2YXIgTkw7SShpaGUsIkxvY2FsZUluZm8iLDExMjApLEQoMjAyNywxLHt9LFgpLGguYT0wLEkoaWhlLCJUaW1lWm9uZSIsMjAyNyksRCgxMjkzLDIxMDIse30sZ2UpLEkoImNvbS5nb29nbGUuZ3d0LmkxOG4uY2xpZW50LmltcGwuY2xkciIsIkRhdGVUaW1lRm9ybWF0SW5mb0ltcGwiLDEyOTMpLEQoNDQzLDEsezQ0MzoxfSxBaXQpLGguYT0hMSxoLmI9MCxJKHNFZSwiRGF0ZVRpbWVGb3JtYXQvUGF0dGVyblBhcnQiLDQ0MyksRCgyMDYsMSxxd3QsUXosUjdlLEt5ZSksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gQWJuKHRoaXMsbCh0LDIwNikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDIwNikmJmN3KFpjKHRoaXMucS5nZXRUaW1lKCkpLFpjKGwodCwyMDYpLnEuZ2V0VGltZSgpKSl9LGguSGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1aYyh0aGlzLnEuZ2V0VGltZSgpKSxZcihtb2UodCx1Yih0LDMyKSkpfSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQsbixyO3JldHVybiByPS10aGlzLnEuZ2V0VGltZXpvbmVPZmZzZXQoKSx0PShyPj0wPyIrIjoiIikrKHIvNjB8MCksbj1JcShiLk1hdGguYWJzKHIpJTYwKSwoVmd0KCksRTZ0KVt0aGlzLnEuZ2V0RGF5KCldKyIgIitUNnRbdGhpcy5xLmdldE1vbnRoKCldKyIgIitJcSh0aGlzLnEuZ2V0RGF0ZSgpKSsiICIrSXEodGhpcy5xLmdldEhvdXJzKCkpKyI6IitJcSh0aGlzLnEuZ2V0TWludXRlcygpKSsiOiIrSXEodGhpcy5xLmdldFNlY29uZHMoKSkrIiBHTVQiK3QrbisiICIrdGhpcy5xLmdldEZ1bGxZZWFyKCl9O3ZhciBjSz1JKExyLCJEYXRlIiwyMDYpO0QoMjAxNSwyMDYscXd0LGRndCksaC5hPSExLGguYj0wLGguYz0wLGguZD0wLGguZT0wLGguZj0wLGguZz0hMSxoLmk9MCxoLmo9MCxoLms9MCxoLm49MCxoLm89MCxoLnA9MCxJKCJjb20uZ29vZ2xlLmd3dC5pMThuLnNoYXJlZC5pbXBsIiwiRGF0ZVJlY29yZCIsMjAxNSksRCgyMDY0LDEse30pLGgucGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5xZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLnJlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGguc2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC50ZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxJKEF4LCJKU09OVmFsdWUiLDIwNjQpLEQoMjIxLDIwNjQsezIyMToxfSwkcCxTeiksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyMjEpP1c1ZSh0aGlzLmEsbCh0LDIyMSkuYSk6ITF9LGgub2U9ZnVuY3Rpb24oKXtyZXR1cm4gQmNufSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEY1ZSh0aGlzLmEpfSxoLnBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuLHI7Zm9yKHI9bmV3IFRoKCJbIiksbj0wLHQ9dGhpcy5hLmxlbmd0aDtuPHQ7bisrKW4+MCYmKHIuYSs9IiwiKSx3dShyLF95KHRoaXMsbikpO3JldHVybiByLmErPSJdIixyLmF9LEkoQXgsIkpTT05BcnJheSIsMjIxKSxEKDQ5MywyMDY0LHs0OTM6MX0samMpLGgub2U9ZnVuY3Rpb24oKXtyZXR1cm4gRmNufSxoLnFlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gSG4oKSwiIit0aGlzLmF9LGguYT0hMTt2YXIgaDZ0LGY2dDtJKEF4LCJKU09OQm9vbGVhbiIsNDkzKSxEKDk5Nyw2MyxscCxMSmUpLEkoQXgsIkpTT05FeGNlcHRpb24iLDk5NyksRCgxMDM2LDIwNjQse30sVyksaC5vZT1mdW5jdGlvbigpe3JldHVybiBSY259LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdWx9O3ZhciBkNnQ7SShBeCwiSlNPTk51bGwiLDEwMzYpLEQoMjYzLDIwNjQsezI2MzoxfSx2ayksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyNjMpP3RoaXMuYT09bCh0LDI2MykuYTohMX0saC5vZT1mdW5jdGlvbigpe3JldHVybiBOY259LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gajgodGhpcy5hKX0saC5yZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSsiIn0saC5hPTAsSShBeCwiSlNPTk51bWJlciIsMjYzKSxEKDE5MCwyMDY0LHsxOTA6MX0sTTgsd2spLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTkwKT9XNWUodGhpcy5hLGwodCwxOTApLmEpOiExfSxoLm9lPWZ1bmN0aW9uKCl7cmV0dXJuIFBjbn0saC5IYj1mdW5jdGlvbigpe3JldHVybiBGNWUodGhpcy5hKX0saC5zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKGc9bmV3IFRoKCJ7IiksdD0hMCxmPWFjZSh0aGlzLFdlKHp0LGR0LDIsMCw2LDEpKSxyPWYsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sdD90PSExOmcuYSs9Q28saGkoZyxzMnQobikpLGcuYSs9IjoiLHd1KGcsV2codGhpcyxuKSk7cmV0dXJuIGcuYSs9In0iLGcuYX0sSShBeCwiSlNPTk9iamVjdCIsMTkwKSxEKDYwNSxxMSxUbCxhc2UpLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpJiZtdW4odGhpcy5hLGVpKHQpKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcga3IobmV3IElsKHRoaXMuYikpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5sZW5ndGh9LEkoQXgsIkpTT05PYmplY3QvMSIsNjA1KTt2YXIgXzBlO0QoMjExLDIwNjQsezIxMToxfSx5eSksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyMTEpP3ZuKHRoaXMuYSxsKHQsMjExKS5hKTohMX0saC5vZT1mdW5jdGlvbigpe3JldHVybiBPY259LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gczIodGhpcy5hKX0saC50ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHMydCh0aGlzLmEpfSxJKEF4LCJKU09OU3RyaW5nIiwyMTEpO3ZhciBOYixXU2UsZzZ0LFlTZSxYU2U7RCgyMDYwLDEsezUzMzoxfSksSShhRWUsIk91dHB1dFN0cmVhbSIsMjA2MCksRCgyMDYxLDIwNjAsezUzMzoxfSksSShhRWUsIkZpbHRlck91dHB1dFN0cmVhbSIsMjA2MSksRCg4NzgsMjA2MSx7NTMzOjF9LEZlKSxJKGFFZSwiUHJpbnRTdHJlYW0iLDg3OCksRCg0MjcsMSx7NDg0OjF9KSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sSShWYywiQWJzdHJhY3RTdHJpbmdCdWlsZGVyIiw0MjcpLEQoNTM4LDYzLGxwLHF6KSxJKFZjLCJBcml0aG1ldGljRXhjZXB0aW9uIiw1MzgpLEQoNzcsNjMsc2hlLF93ZSx0YyksSShWYywiSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsNzcpLEQoMzMzLDc3LHszOjEsMzMzOjEsMTAzOjEsNzc6MSw2MzoxLDgyOjF9LEJ3ZSx0M2UpLEkoVmMsIkFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsMzMzKSxEKDUzNyw2MyxscCxSaWUsQkplKSxJKFZjLCJBcnJheVN0b3JlRXhjZXB0aW9uIiw1MzcpLEQoMjk2LDgyLEh3dCxRaWUpLEkoVmMsIkVycm9yIiwyOTYpLEQoMjAwLDI5NixId3QsU3dlLHc2ZSksSShWYywiQXNzZXJ0aW9uRXJyb3IiLDIwMCksdDZ0PXszOjEsNDg1OjEsMzQ6MX07dmFyIFBiLFNULE5zPUkoVmMsIkJvb2xlYW4iLDQ4NSk7RCgyNDIsMSx7MzoxLDI0MjoxfSk7dmFyIFFTZTtJKFZjLCJOdW1iZXIiLDI0MiksRCgyMjIsMjQyLHszOjEsMjIyOjEsMzQ6MSwyNDI6MX0sU2kpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGd1bih0aGlzLGwodCwyMjIpKX0saC51ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjIyKSYmbCh0LDIyMikuYT09dGhpcy5hfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0saC5hPTA7dmFyIGp4PUkoVmMsIkJ5dGUiLDIyMiksSlNlO0QoMTgwLDEsezM6MSwxODA6MSwzNDoxfSx5cyksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gcHVuKHRoaXMsbCh0LDE4MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE4MCkmJmwodCwxODApLmE9PXRoaXMuYX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmEpfSxoLmE9MDt2YXIgWlNlLFBMPUkoVmMsIkNoYXJhY3RlciIsMTgwKSxlX2U7RCgyMTIsNjMsezM6MSwyMTI6MSwxMDM6MSw2MzoxLDgyOjF9LElRZSxrayksSShWYywiQ2xhc3NDYXN0RXhjZXB0aW9uIiwyMTIpLG42dD17MzoxLDM0OjEsMzQ1OjEsMjQyOjF9O3ZhciB0YT1JKFZjLCJEb3VibGUiLDM0NSk7RCgxNjEsMjQyLHszOjEsMzQ6MSwxNjE6MSwyNDI6MX0scGEsQXdlKSxoLkZkPWZ1bmN0aW9uKHQpe3JldHVybiBMbG4odGhpcyxsKHQsMTYxKSl9LGgudWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE2MSkmJmVpdCh0aGlzLmEsbCh0LDE2MSkuYSl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdWEodGhpcy5hKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0saC5hPTA7dmFyIF9UPUkoVmMsIkZsb2F0IiwxNjEpO0QoMzMsNjMsezM6MSwxMDM6MSwzMzoxLDYzOjEsODI6MX0sWUksWW4sTjB0KSxJKFZjLCJJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLDMzKSxEKDczLDYzLGxwLHBsLG5jKSxJKFZjLCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iLDczKSxEKDE3LDI0Mix7MzoxLDM0OjEsMTc6MSwyNDI6MX0sQ3IpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGF5ZSh0aGlzLGwodCwxNykpfSxoLnVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNykmJmwodCwxNykuYT09dGhpcy5hfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0saC5hPTA7dmFyIHJvPUkoVmMsIkludGVnZXIiLDE3KSx0X2UscDZ0O0QoMTY4LDI0Mix7MzoxLDM0OjEsMTY4OjEsMjQyOjF9LE9yKSxoLkZkPWZ1bmN0aW9uKHQpe3JldHVybiBBbG4odGhpcyxsKHQsMTY4KSl9LGgudWU9ZnVuY3Rpb24oKXtyZXR1cm4gRm0odGhpcy5hKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNjgpJiZjdyhsKHQsMTY4KS5hLHRoaXMuYSl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gX2ZuKHRoaXMuYSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iIitZXyh0aGlzLmEpfSxoLmE9MDt2YXIgcjM9SShWYywiTG9uZyIsMTY4KSxuX2U7RCgyMTQwLDEse30pLEQoMTkwNCw2MyxscCxGSmUpLEkoVmMsIk5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9uIiwxOTA0KSxEKDE2OSw2MDcsezM6MSwxMDM6MSwxNjk6MSw2MzoxLDgyOjF9LFM4LEQ4KSxoLmVlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVHlwZUVycm9yKHQpfSxJKFZjLCJOdWxsUG9pbnRlckV4Y2VwdGlvbiIsMTY5KTt2YXIgcl9lLEEwZSxiNnQsaV9lO0QoMTMwLDMzLHszOjEsMTAzOjEsMzM6MSwxMzA6MSw2MzoxLDgyOjF9LGdkKSxJKFZjLCJOdW1iZXJGb3JtYXRFeGNlcHRpb24iLDEzMCksRCgxOTEsMjQyLHszOjEsMzQ6MSwyNDI6MSwxOTE6MX0sV24pLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGJ1bih0aGlzLGwodCwxOTEpKX0saC51ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTkxKSYmbCh0LDE5MSkuYT09dGhpcy5hfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0saC5hPTA7dmFyIGkzPUkoVmMsIlNob3J0IiwxOTEpLHNfZTtEKDMxOSwxLHszOjEsMzE5OjF9LFphZSksaC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCwzMTkpPyhuPWwodCwzMTkpLHRoaXMuYz09bi5jJiZ0aGlzLmQ9PW4uZCYmdGhpcy5hPT1uLmEmJnRoaXMuYj09bi5iKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBNTihoZShsZSh3YSwxKSxSbiwxLDUsW3B0KHRoaXMuYyksdGhpcy5hLHRoaXMuZCx0aGlzLmJdKSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIuIit0aGlzLmQrIigiKyh0aGlzLmIhPW51bGw/dGhpcy5iOiJVbmtub3duIFNvdXJjZSIpKyh0aGlzLmM+PTA/IjoiK3RoaXMuYzoiIikrIikifSxoLmM9MDt2YXIgYV9lPUkoVmMsIlN0YWNrVHJhY2VFbGVtZW50IiwzMTkpO3I2dD17MzoxLDQ4NDoxLDM0OjEsMjoxfTt2YXIgenQ9SShWYyxuRWUsMik7RCgxMTEsNDI3LHs0ODQ6MX0sVXAsaF8sQWYpLEkoVmMsIlN0cmluZ0J1ZmZlciIsMTExKSxEKDEwNCw0MjcsezQ4NDoxfSx0YixTNSxUaCksSShWYywiU3RyaW5nQnVpbGRlciIsMTA0KSxEKDcwMiw3NyxzaGUsZTNlKSxJKFZjLCJTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiw3MDIpLEQoMjE0NSwxLHt9KTt2YXIgbTZ0O0QoNDgsNjMsezM6MSwxMDM6MSw2MzoxLDgyOjEsNDg6MX0sUXIsSHApLEkoVmMsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIiw0OCksRCgyNDcsMjQyLHszOjEsMzQ6MSwyNDI6MSwyNDc6MX0sTk4saDNlKSxoLkZkPWZ1bmN0aW9uKHQpe3JldHVybiBGbXQodGhpcyxsKHQsMjQ3KSl9LGgudWU9ZnVuY3Rpb24oKXtyZXR1cm4gankoaHZ0KHRoaXMpKX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdGhpcz09PXQ/ITA6RGUodCwyNDcpPyhuPWwodCwyNDcpLHRoaXMuZT09bi5lJiZGbXQodGhpcyxuKT09MCk6ITF9LGguSGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5iIT0wP3RoaXMuYjp0aGlzLmE8NTQ/KHQ9WmModGhpcy5mKSx0aGlzLmI9WXIodmEodCwtMSkpLHRoaXMuYj0zMyp0aGlzLmIrWXIodmEoYncodCwzMiksLTEpKSx0aGlzLmI9MTcqdGhpcy5iK3VhKHRoaXMuZSksdGhpcy5iKToodGhpcy5iPTE3KlgwdCh0aGlzLmMpK3VhKHRoaXMuZSksdGhpcy5iKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBodnQodGhpcyl9LGguYT0wLGguYj0wLGguZD0wLGguZT0wLGguZj0wO3ZhciB2NnQsbHYsb19lLGNfZSx1X2UsbF9lLGhfZSxmX2UsTDBlPUkoImphdmEubWF0aCIsIkJpZ0RlY2ltYWwiLDI0Nyk7RCg5MiwyNDIsezM6MSwzNDoxLDI0MjoxLDkyOjF9LFFnLHFvdCxJbSxRMXQsb2IpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIEsxdCh0aGlzLGwodCw5MikpfSxoLnVlPWZ1bmN0aW9uKCl7cmV0dXJuIGp5KERsZSh0aGlzLDApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gQzhlKHRoaXMsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gWDB0KHRoaXMpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIERsZSh0aGlzLDApfSxoLmI9LTIsaC5jPTAsaC5kPTAsaC5lPTA7dmFyIHc2dCx1Syx5NnQsTTBlLGxLLEJMLEE2PUkoImphdmEubWF0aCIsIkJpZ0ludGVnZXIiLDkyKSx4NnQsazZ0LCR4LEZMO0QoNDk4LDIwNjUsV3cpLGguJGI9ZnVuY3Rpb24oKXtObCh0aGlzKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gSHUodGhpcyx0KX0saC51Yz1mdW5jdGlvbih0KXtyZXR1cm4gRDB0KHRoaXMsdCx0aGlzLmkpfHxEMHQodGhpcyx0LHRoaXMuZil9LGgudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNyKHRoaXMpfSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiBjcih0aGlzLHQpfSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGtpKHRoaXMsdCxuKX0saC5CYz1mdW5jdGlvbih0KXtyZXR1cm4gYXgodGhpcyx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiBkXyh0aGlzKX0saC5nPTAsSShMciwiQWJzdHJhY3RIYXNoTWFwIiw0OTgpLEQoMjY3LHExLFRsLFNyKSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHZjdCh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxbSh0aGlzLmEpfSxoLk1jPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB2Y3QodGhpcyx0KT8obj1sKHQsNDQpLmxkKCksdGhpcy5hLkJjKG4pLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sSShMciwiQWJzdHJhY3RIYXNoTWFwL0VudHJ5U2V0IiwyNjcpLEQoMjY4LDEsT2EscW0pLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiBOdyh0aGlzKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGguUWI9ZnVuY3Rpb24oKXtLbHQodGhpcyl9LGguYj0hMSxoLmQ9MCxJKExyLCJBYnN0cmFjdEhhc2hNYXAvRW50cnlTZXRJdGVyYXRvciIsMjY4KSxEKDQyNiwxLE9hLGtyKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gbHNlKHRoaXMpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEk1ZSh0aGlzKX0saC5RYj1mdW5jdGlvbigpe3BoKHRoaXMpfSxoLmI9MCxoLmM9LTEsSShMciwiQWJzdHJhY3RMaXN0L0l0ZXJhdG9ySW1wbCIsNDI2KSxEKDk4LDQyNixsZyxVYSksaC5RYj1mdW5jdGlvbigpe3BoKHRoaXMpfSxoLlJiPWZ1bmN0aW9uKHQpe2J5KHRoaXMsdCl9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPjB9LGguVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlViPWZ1bmN0aW9uKCl7cmV0dXJuIG1yKHRoaXMuYj4wKSx0aGlzLmEuWGIodGhpcy5jPS0tdGhpcy5iKX0saC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmItMX0saC5XYj1mdW5jdGlvbih0KXtneSh0aGlzLmMhPS0xKSx0aGlzLmEuaGQodGhpcy5jLHQpfSxJKExyLCJBYnN0cmFjdExpc3QvTGlzdEl0ZXJhdG9ySW1wbCIsOTgpLEQoMjQ0LDU2LGlULFpwKSxoLmJkPWZ1bmN0aW9uKHQsbil7RXkodCx0aGlzLmIpLHRoaXMuYy5iZCh0aGlzLmErdCxuKSwrK3RoaXMuYn0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gU24odCx0aGlzLmIpLHRoaXMuYy5YYih0aGlzLmErdCl9LGguZ2Q9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIFNuKHQsdGhpcy5iKSxuPXRoaXMuYy5nZCh0aGlzLmErdCksLS10aGlzLmIsbn0saC5oZD1mdW5jdGlvbih0LG4pe3JldHVybiBTbih0LHRoaXMuYiksdGhpcy5jLmhkKHRoaXMuYSt0LG4pfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5hPTAsaC5iPTAsSShMciwiQWJzdHJhY3RMaXN0L1N1Ykxpc3QiLDI0NCksRCgyNjYscTEsVGwsYnIpLGguJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLl9iKHQpfSxoLktjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5hLnZjKCkuS2MoKSxuZXcgTWkodCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5fYih0KT8odGhpcy5hLkJjKHQpLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sSShMciwiQWJzdHJhY3RNYXAvMSIsMjY2KSxEKDU0MSwxLE9hLE1pKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGguUGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1sKHRoaXMuYS5QYigpLDQ0KSx0LmxkKCl9LGguUWI9ZnVuY3Rpb24oKXt0aGlzLmEuUWIoKX0sSShMciwiQWJzdHJhY3RNYXAvMS8xIiw1NDEpLEQoMjMxLDMxLFd5LGdpKSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS51Yyh0KX0saC5LYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuYS52YygpLktjKCksbmV3IGZzKHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxJKExyLCJBYnN0cmFjdE1hcC8yIiwyMzEpLEQoMzAxLDEsT2EsZnMpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0saC5QYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PWwodGhpcy5hLlBiKCksNDQpLHQubWQoKX0saC5RYj1mdW5jdGlvbigpe3RoaXMuYS5RYigpfSxJKExyLCJBYnN0cmFjdE1hcC8yLzEiLDMwMSksRCg0OTQsMSx7NDk0OjEsNDQ6MX0pLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNDQpPyhuPWwodCw0NCksSmModGhpcy5kLG4ubGQoKSkmJkpjKHRoaXMuZSxuLm1kKCkpKTohMX0saC5sZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFI1KHRoaXMuZCleUjUodGhpcy5lKX0saC5uZD1mdW5jdGlvbih0KXtyZXR1cm4gWnllKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kKyI9Iit0aGlzLmV9LEkoTHIsIkFic3RyYWN0TWFwL0Fic3RyYWN0RW50cnkiLDQ5NCksRCgzOTcsNDk0LHs0OTQ6MSwzOTc6MSw0NDoxfSxjcSksSShMciwiQWJzdHJhY3RNYXAvU2ltcGxlRW50cnkiLDM5NyksRCgyMDgyLDEsY2hlKSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBEZSh0LDQ0KT8obj1sKHQsNDQpLEpjKHRoaXMubGQoKSxuLmxkKCkpJiZKYyh0aGlzLm1kKCksbi5tZCgpKSk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUjUodGhpcy5sZCgpKV5SNSh0aGlzLm1kKCkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGQoKSsiPSIrdGhpcy5tZCgpfSxJKExyLE13dCwyMDgyKSxEKDIwOTAsMjA2NSxaa2UpLGguWGM9ZnVuY3Rpb24odCl7cmV0dXJuIHJzZSh0aGlzLkVlKHQpKX0saC50Yz1mdW5jdGlvbih0KXtyZXR1cm4gVHV0KHRoaXMsdCl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIGU0ZSh0aGlzLHQpfSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBScyh0aGlzKX0saC5UYz1mdW5jdGlvbigpe3JldHVybiBSc3QodGhpcy5HZSgpKX0saC5ZYz1mdW5jdGlvbih0KXtyZXR1cm4gcnNlKHRoaXMuSGUodCkpfSxoLnhjPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXQsaGModGhpcy5GZShuKSl9LGguJGM9ZnVuY3Rpb24odCl7cmV0dXJuIHJzZSh0aGlzLkllKHQpKX0saC5lYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRnModGhpcyl9LGguVmM9ZnVuY3Rpb24oKXtyZXR1cm4gUnN0KHRoaXMuSmUoKSl9LGguX2M9ZnVuY3Rpb24odCl7cmV0dXJuIHJzZSh0aGlzLktlKHQpKX0sSShMciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAiLDIwOTApLEQoNjI5LHExLFRsLFJzKSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDQ0KSYmVHV0KHRoaXMuYixsKHQsNDQpKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuRGUoKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCw0NCk/KG49bCh0LDQ0KSx0aGlzLmIuTGUobikpOiExfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5nYygpfSxJKExyLCJBYnN0cmFjdE5hdmlnYWJsZU1hcC9FbnRyeVNldCIsNjI5KSxEKDExNDYscTEsZUVlLEZzKSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhcSh0aGlzKX0saC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBlNGUodGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5hLnZjKCkuYi5EZSgpLG5ldyB4cyh0KX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gZTRlKHRoaXMuYSx0KT8odGhpcy5hLkJjKHQpLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sSShMciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvTmF2aWdhYmxlS2V5U2V0IiwxMTQ2KSxEKDExNDcsMSxPYSx4cyksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGxzZSh0aGlzLmEuYSl9LGguUGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1vcnQodGhpcy5hKSx0LmxkKCl9LGguUWI9ZnVuY3Rpb24oKXtkaXQodGhpcy5hKX0sSShMciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvTmF2aWdhYmxlS2V5U2V0LzEiLDExNDcpLEQoMjEwMywzMSxXeSksaC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gSzgoJEUodGhpcyx0KSxhVCksITB9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIG5yKHQpLEJPKHQhPXRoaXMsIkNhbid0IGFkZCBhIHF1ZXVlIHRvIGl0c2VsZiIpLEthKHRoaXMsdCl9LGguJGI9ZnVuY3Rpb24oKXtmb3IoO0tvZSh0aGlzKSE9bnVsbDspO30sSShMciwiQWJzdHJhY3RRdWV1ZSIsMjEwMyksRCgzMTAsMzEsezQ6MSwyMDoxLDMxOjEsMTY6MX0sejUsZGN0KSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiBpNmUodGhpcyx0KSwhMH0saC4kYj1mdW5jdGlvbigpe2w2ZSh0aGlzKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gWmZ0KG5ldyBuQSh0aGlzKSx0KX0saC5kYz1mdW5jdGlvbigpe3JldHVybiBsXyh0aGlzKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgbkEodGhpcyl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHcybihuZXcgbkEodGhpcyksdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLXRoaXMuYiZ0aGlzLmEubGVuZ3RoLTF9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMjcyKX0saC5RYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10aGlzLmMtdGhpcy5iJnRoaXMuYS5sZW5ndGgtMSx0Lmxlbmd0aDxuJiYodD1WeihuZXcgQXJyYXkobiksdCkpLGZmdCh0aGlzLHQsbiksdC5sZW5ndGg+biYmVHModCxuLG51bGwpLHR9LGguYj0wLGguYz0wLEkoTHIsIkFycmF5RGVxdWUiLDMxMCksRCg0NTksMSxPYSxuQSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSE9dGhpcy5ifSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEZWKHRoaXMpfSxoLlFiPWZ1bmN0aW9uKCl7WWh0KHRoaXMpfSxoLmE9MCxoLmI9MCxoLmM9LTEsSShMciwiQXJyYXlEZXF1ZS9JdGVyYXRvckltcGwiLDQ1OSksRCgxMyw1NixVd3QsYnQsQnUsT2wpLGguYmQ9ZnVuY3Rpb24odCxuKXtwdyh0aGlzLHQsbil9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIHZ0KHRoaXMsdCl9LGguY2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUTdlKHRoaXMsdCxuKX0saC5HYz1mdW5jdGlvbih0KXtyZXR1cm4gcmEodGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe2F5KHRoaXMuYywwKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gZ2ModGhpcyx0LDApIT0tMX0saC5KYz1mdW5jdGlvbih0KXtWdSh0aGlzLHQpfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiBqdCh0aGlzLHQpfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybiBnYyh0aGlzLHQsMCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmxlbmd0aD09MH0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzKX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4gdDIodGhpcyx0KX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gYWwodGhpcyx0KX0saC5jZT1mdW5jdGlvbih0LG4pe0JvdCh0aGlzLHQsbil9LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcmYodGhpcyx0LG4pfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5sZW5ndGh9LGguamQ9ZnVuY3Rpb24odCl7VnModGhpcyx0KX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBlSCh0aGlzLmMpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBqMSh0aGlzLHQpfTt2YXIgY09uPUkoTHIsIkFycmF5TGlzdCIsMTMpO0QoNywxLE9hLEcpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiBMYyh0aGlzKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiByZSh0aGlzKX0saC5RYj1mdW5jdGlvbigpe1FfKHRoaXMpfSxoLmE9MCxoLmI9LTEsSShMciwiQXJyYXlMaXN0LzEiLDcpLEQoMjExMixiLkZ1bmN0aW9uLHt9LFBlKSxoLk1lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFlpKHQsbil9LEQoMTUxLDU2LEd3dCxJbCksaC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gWGh0KHRoaXMsdCkhPS0xfSxoLkpjPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO2Zvcihucih0KSxyPXRoaXMuYSxhPTAsbz1yLmxlbmd0aDthPG87KythKW49clthXSx0LkNkKG4pfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiBKaXQodGhpcyx0KX0saC5oZD1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByPShTbih0LHRoaXMuYS5sZW5ndGgpLHRoaXMuYVt0XSksVHModGhpcy5hLHQsbikscn0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGVuZ3RofSxoLmpkPWZ1bmN0aW9uKHQpe0xhZSh0aGlzLmEsdGhpcy5hLmxlbmd0aCx0KX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBvZHQodGhpcyxXZSh3YSxSbiwxLHRoaXMuYS5sZW5ndGgsNSwxKSl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIG9kdCh0aGlzLHQpfSxJKExyLCJBcnJheXMvQXJyYXlMaXN0IiwxNTEpO3ZhciBfbyxtZyxoSztEKDk1Myw1NixHd3QsamUpLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHJ5ZSh0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBDbigpLE1rKCksQVR9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oKSxNaygpLEFUfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LEkoTHIsIkNvbGxlY3Rpb25zL0VtcHR5TGlzdCIsOTUzKSxEKDk1NCwxLGxnLEllKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUmI9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiExfSxoLlNiPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguUGI9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgX2MpfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGguVWI9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgX2MpfSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGguUWI9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcGwpfSxoLldiPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBwbCl9O3ZhciBBVDtJKExyLCJDb2xsZWN0aW9ucy9FbXB0eUxpc3RJdGVyYXRvciIsOTU0KSxEKDk1NiwyMDY1LHJULFNlKSxoLl9iPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLnVjPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksaEt9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oKSxoS30saC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxoLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksX299LEkoTHIsIkNvbGxlY3Rpb25zL0VtcHR5TWFwIiw5NTYpLEQoOTU1LHExLFN4LENlKSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksTWsoKSxBVH0saC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxJKExyLCJDb2xsZWN0aW9ucy9FbXB0eVNldCIsOTU1KSxEKDYwOCw1Nix7MzoxLDIwOjEsMzE6MSw1NjoxLDE2OjEsMTU6MX0sRGEpLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIEpjKHRoaXMuYSx0KX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gU24odCwxKSx0aGlzLmF9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sSShMciwiQ29sbGVjdGlvbnMvU2luZ2xldG9uTGlzdCIsNjA4KSxEKDM4NCwxLE93dCwkYSksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBibihudWxsLHRoaXMuTmMoKSl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMCl9LGguT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJuKG51bGwsdGhpcy5OYygpKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gb1plKCl9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIGNaZSgpfSxoLiRiPWZ1bmN0aW9uKCl7dVplKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIG5PKHRoaXMsdCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIFhaZSh0aGlzLHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5kYygpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB5byh0aGlzLmIuS2MoKSl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIGxaZSgpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5nYygpfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5QYygpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBRWmUodGhpcyx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmIpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVDb2xsZWN0aW9uIiwzODQpLEQoMzgzLDEsT2EseW8pLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuT2IoKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuUGIoKX0saC5RYj1mdW5jdGlvbigpe2haZSgpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVDb2xsZWN0aW9uSXRlcmF0b3IiLDM4MyksRCg1NDAsMzg0LEt3dCxqcSksaC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywxNil9LGguYmQ9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxoLmNkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gUGkodGhpcy5hLHQpfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuWGIodCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXModGhpcy5hKX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLmRkKHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kYygpfSxoLmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNeWUodGhpcy5hLmZkKDApKX0saC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE15ZSh0aGlzLmEuZmQodCkpfSxoLmdkPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguaGQ9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxoLmpkPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IGpxKHRoaXMuYS5rZCh0LG4pKX0sSShMciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTGlzdCIsNTQwKSxEKDcwNSwzODMsbGcsTXllKSxoLlFiPWZ1bmN0aW9uKCl7aFplKCl9LGguUmI9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuU2IoKX0saC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVGIoKX0saC5VYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVWIoKX0saC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVmIoKX0saC5XYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVMaXN0SXRlcmF0b3IiLDcwNSksRCg2MDksMSxXdyx0ciksaC53Yz1mdW5jdGlvbih0KXttQSh0aGlzLHQpfSxoLnljPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcWNlKHRoaXMsdCxuLHIpfSxoLiRiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jLl9iKHQpfSxoLnVjPWZ1bmN0aW9uKHQpe3JldHVybiBaWmUodGhpcyx0KX0saC52Yz1mdW5jdGlvbigpe3JldHVybiBLayh0aGlzKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gZWV0KHRoaXMsdCl9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYy54Yyh0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLmMpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5kYygpfSxoLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG1hdCh0aGlzKX0saC56Yz1mdW5jdGlvbih0LG4pe3Rocm93IHVlKG5ldyBRcil9LGguQmM9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuZ2MoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmMpfSxoLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIGJhdCh0aGlzKX0sSShMciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTWFwIiw2MDkpLEQoMzk2LDM4NCxCbGUsRWspLGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIFBpKHRoaXMuYix0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLmIpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVTZXQiLDM5NiksRCg5NTcsMzk2LEJsZSx6SmUpLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIEpaZSh0aGlzLHQpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmIuSWModCl9LGguS2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIuS2MoKSxuZXcgQm8odCl9LGguUGM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIuUGMoKSxZY3QodCx0Lmxlbmd0aCksdH0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gdG90KHRoaXMsdCl9LEkoTHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZU1hcC9Vbm1vZGlmaWFibGVFbnRyeVNldCIsOTU3KSxEKDk1OCwxLE9hLEJvKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGxyKGwodGhpcy5hLlBiKCksNDQpKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0saC5RYj1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LEkoTHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZU1hcC9Vbm1vZGlmaWFibGVFbnRyeVNldC8xIiw5NTgpLEQoNzAzLDEsY2hlLGxyKSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuRmIodCl9LGgubGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxkKCl9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLm1kKCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLkhiKCl9LGgubmQ9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmEpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAvVW5tb2RpZmlhYmxlRW50cnlTZXQvVW5tb2RpZmlhYmxlRW50cnkiLDcwMyksRCg2MTAsNTQwLHsyMDoxLDE2OjEsMTU6MSw1OToxfSxlc2UpLEkoTHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVJhbmRvbUFjY2Vzc0xpc3QiLDYxMCksRCg3MDQsMzk2LE53dCxEeWUpLGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGFxKHRoaXMpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBQaSh0aGlzLmEsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXModGhpcy5hKX0sSShMciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlU29ydGVkU2V0Iiw3MDQpLEQoODU4LDEsdWhlLGtlKSxoLk5lPWZ1bmN0aW9uKHQsbil7dmFyIHI7cmV0dXJuIHI9S2N0KGwodCwxMiksbChuLDEyKSksciE9MD9yOlNtdChsKHQsMTIpLGwobiwxMikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoTHIsIkNvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsODU4KTt2YXIgZF9lLEQwZSxnX2U7RCg3NjksMSx1aGUsS2UpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUmRuKGwodCwzNCksbChuLDM0KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIEV3KCksZ19lfSxJKExyLCJDb21wYXJhdG9ycy9OYXR1cmFsT3JkZXJDb21wYXJhdG9yIiw3NjkpLEQoMTIyNiwxLHVoZSxGdCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBGZG4obCh0LDM0KSxsKG4sMzQpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gRXcoKSxEMGV9LEkoTHIsIkNvbXBhcmF0b3JzL1JldmVyc2VOYXR1cmFsT3JkZXJDb21wYXJhdG9yIiwxMjI2KSxEKDUyLDEsdWhlLFZ0KSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmEuTmUobix0KX0saC5PZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LEkoTHIsIkNvbXBhcmF0b3JzL1JldmVyc2VkQ29tcGFyYXRvciIsNTIpLEQoMTc1LDYzLGxwLFhoKSxJKExyLCJDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uIiwxNzUpO3ZhciBFNnQsVDZ0O0QoMTk0OCwxLExQLE5lKSxoLlBlPWZ1bmN0aW9uKHQpe00xdCh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkRvdWJsZVN1bW1hcnlTdGF0aXN0aWNzW2NvdW50ID0gIitZXyh0aGlzLmEpKyIsIGF2ZyA9ICIrKGhzZSh0aGlzLmEsMCk/VDZlKHRoaXMpL0ZtKHRoaXMuYSk6MCkrIiwgbWluID0gIit0aGlzLmMrIiwgbWF4ID0gIit0aGlzLmIrIiwgc3VtID0gIitUNmUodGhpcykrIl0ifSxoLmE9MCxoLmI9aWEsaC5jPWdzLGguZD0wLGguZT0wLGguZj0wLEkoTHIsIkRvdWJsZVN1bW1hcnlTdGF0aXN0aWNzIiwxOTQ4KSxEKDE4NjgsNjMsbHAsT1FlKSxJKExyLCJFbXB0eVN0YWNrRXhjZXB0aW9uIiwxODY4KSxEKDQ2MSwyMDY1LFd3LExBKSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ0ZSh0aGlzLHQsbil9LGguJGI9ZnVuY3Rpb24oKXtpYXQodGhpcyl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIHZldCh0aGlzLHQpfSxoLnVjPWZ1bmN0aW9uKHQpe3ZhciBuLHI7Zm9yKHI9bmV3IFA4KHRoaXMuYSk7ci5hPHIuYy5hLmxlbmd0aDspaWYobj1jQShyKSxKYyh0LHRoaXMuYltuLmddKSlyZXR1cm4hMDtyZXR1cm4hMX0saC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgSHModGhpcyl9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIFFvKHRoaXMsdCl9LGguQmM9ZnVuY3Rpb24odCl7cmV0dXJuIFk1ZSh0aGlzLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jfSxJKExyLCJFbnVtTWFwIiw0NjEpLEQoMTM0MCxxMSxUbCxIcyksaC4kYj1mdW5jdGlvbigpe2lhdCh0aGlzLmEpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB3Y3QodGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgcnN0KHRoaXMuYSl9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHdjdCh0aGlzLHQpPyhuPWwodCw0NCkubGQoKSxZNWUodGhpcy5hLG4pLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYS5jfSxJKExyLCJFbnVtTWFwL0VudHJ5U2V0IiwxMzQwKSxEKDEzNDEsMSxPYSxyc3QpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI9Y0EodGhpcy5hKSxuZXcgeWV0KHRoaXMuYyx0aGlzLmIpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGd5ZSh0aGlzLmEpfSxoLlFiPWZ1bmN0aW9uKCl7Z3koISF0aGlzLmIpLFk1ZSh0aGlzLmMsdGhpcy5iKSx0aGlzLmI9bnVsbH0sSShMciwiRW51bU1hcC9FbnRyeVNldEl0ZXJhdG9yIiwxMzQxKSxEKDEzNDIsMjA4MixjaGUseWV0KSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYlt0aGlzLmEuZ119LGgubmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFI0ZSh0aGlzLmIuYix0aGlzLmEuZyx0KX0sSShMciwiRW51bU1hcC9NYXBFbnRyeSIsMTM0MiksRCgxODEscTEsezIwOjEsMzE6MSwxNjoxLDE4MToxLDIxOjF9KTt2YXIgQzZ0PUkoTHIsIkVudW1TZXQiLDE4MSk7RCgxNjIsMTgxLHsyMDoxLDMxOjEsMTY6MSwxODE6MSwxNjI6MSwyMToxfSxaaCksaC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gZDAodGhpcyxsKHQsMjIpKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gQWFlKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFA4KHRoaXMpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiBmc3QodGhpcyx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguYz0wLEkoTHIsIkVudW1TZXQvRW51bVNldEltcGwiLDE2MiksRCgzNTYsMSxPYSxQOCksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGNBKHRoaXMpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGd5ZSh0aGlzKX0saC5RYj1mdW5jdGlvbigpe2d5KHRoaXMuYiE9LTEpLFRzKHRoaXMuYy5iLHRoaXMuYixudWxsKSwtLXRoaXMuYy5jLHRoaXMuYj0tMX0saC5hPS0xLGguYj0tMSxJKExyLCJFbnVtU2V0L0VudW1TZXRJbXBsL0l0ZXJhdG9ySW1wbCIsMzU2KSxEKDQ1LDQ5OCxtNixQcixOOCxqdHQpLGguQmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcWUodCk9PT1xZShuKXx8dCE9bnVsbCYmUGkodCxuKX0saC5DZT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdD09bnVsbD8wOihuPWVzKHQpLG58MCl9LEkoTHIsIkhhc2hNYXAiLDQ1KSxEKDQ5LHExLG9FZSxLcyxLeixVXyksaC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gbmEodGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBXMCh0aGlzLHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpPT0wfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5lYygpLktjKCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHd5ZSh0aGlzLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfTt2YXIgdU9uPUkoTHIsIkhhc2hTZXQiLDQ5KTtEKDE4OTcsMSxrUCxnbiksaC5EZD1mdW5jdGlvbih0KXskZnQodGhpcyx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJJbnRTdW1tYXJ5U3RhdGlzdGljc1tjb3VudCA9ICIrWV8odGhpcy5hKSsiLCBhdmcgPSAiKyhoc2UodGhpcy5hLDApP0ZtKHRoaXMuZCkvRm0odGhpcy5hKTowKSsiLCBtaW4gPSAiK3RoaXMuYysiLCBtYXggPSAiK3RoaXMuYisiLCBzdW0gPSAiK1lfKHRoaXMuZCkrIl0ifSxoLmE9MCxoLmI9bG8saC5jPUlpLGguZD0wLEkoTHIsIkludFN1bW1hcnlTdGF0aXN0aWNzIiwxODk3KSxEKDEwNjIsMSxoZyxybnQpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTzZlKHRoaXMpfSxoLmM9MCxJKExyLCJJbnRlcm5hbEhhc2hDb2RlTWFwIiwxMDYyKSxEKDcyNiwxLE9hLE82ZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZD10aGlzLmFbdGhpcy5jKytdLHRoaXMuZH0saC5PYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmM8dGhpcy5hLmxlbmd0aD8hMDoodD10aGlzLmIubmV4dCgpLHQuZG9uZT8hMToodGhpcy5hPXQudmFsdWVbMV0sdGhpcy5jPTAsITApKX0saC5RYj1mdW5jdGlvbigpe1M5ZSh0aGlzLmUsdGhpcy5kLmxkKCkpLHRoaXMuYyE9MCYmLS10aGlzLmN9LGguYz0wLGguZD1udWxsLEkoTHIsIkludGVybmFsSGFzaENvZGVNYXAvMSIsNzI2KTt2YXIgUzZ0O0QoMTA2MCwxLGhnLGludCksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoNmUodGhpcyl9LGguYz0wLGguZD0wLEkoTHIsIkludGVybmFsU3RyaW5nTWFwIiwxMDYwKSxEKDcyNSwxLE9hLGg2ZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYz10aGlzLmEsdGhpcy5hPXRoaXMuYi5uZXh0KCksbmV3IGxpdCh0aGlzLmQsdGhpcy5jLHRoaXMuZC5kKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiF0aGlzLmEuZG9uZX0saC5RYj1mdW5jdGlvbigpe1VmdCh0aGlzLmQsdGhpcy5jLnZhbHVlWzBdKX0sSShMciwiSW50ZXJuYWxTdHJpbmdNYXAvMSIsNzI1KSxEKDEwNjEsMjA4MixjaGUsbGl0KSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi52YWx1ZVswXX0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZCE9dGhpcy5jP3lfKHRoaXMuYSx0aGlzLmIudmFsdWVbMF0pOnRoaXMuYi52YWx1ZVsxXX0saC5uZD1mdW5jdGlvbih0KXtyZXR1cm4gQncodGhpcy5hLHRoaXMuYi52YWx1ZVswXSx0KX0saC5jPTAsSShMciwiSW50ZXJuYWxTdHJpbmdNYXAvMiIsMTA2MSksRCgyMTUsNDUsbTYsZTIsSTZlKSxoLiRiPWZ1bmN0aW9uKCl7QnJ0KHRoaXMpfSxoLl9iPWZ1bmN0aW9uKHQpe3JldHVybiB3ZXQodGhpcyx0KX0saC51Yz1mdW5jdGlvbih0KXt2YXIgbjtmb3Iobj10aGlzLmQuYTtuIT10aGlzLmQ7KXtpZihKYyhuLmUsdCkpcmV0dXJuITA7bj1uLmF9cmV0dXJuITF9LGgudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNjKHRoaXMpfSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiBCMSh0aGlzLHQpfSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGgyKHRoaXMsdCxuKX0saC5CYz1mdW5jdGlvbih0KXtyZXR1cm4gVmx0KHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gZF8odGhpcy5lKX0saC5jPSExLEkoTHIsIkxpbmtlZEhhc2hNYXAiLDIxNSksRCg0MDAsMzk3LHs0OTQ6MSwzOTc6MSw0MDA6MSw0NDoxfSxzcnQsQTRlKSxJKExyLCJMaW5rZWRIYXNoTWFwL0NoYWluRW50cnkiLDQwMCksRCg3MTUscTEsVGwsU2MpLGguJGI9ZnVuY3Rpb24oKXtCcnQodGhpcy5hKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4geWN0KHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHk1ZSh0aGlzKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4geWN0KHRoaXMsdCk/KG49bCh0LDQ0KS5sZCgpLFZsdCh0aGlzLmEsbiksITApOiExfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIGRfKHRoaXMuYS5lKX0sSShMciwiTGlua2VkSGFzaE1hcC9FbnRyeVNldCIsNzE1KSxEKDcxNiwxLE9hLHk1ZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIFlsdCh0aGlzKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMhPXRoaXMuZC5hLmR9LGguUWI9ZnVuY3Rpb24oKXtneSghIXRoaXMuYSkscGFlKHRoaXMuZC5hLmUuZyx0aGlzLmIpLCQ0ZSh0aGlzLmEpLGF4KHRoaXMuZC5hLmUsdGhpcy5hLmQpLHRoaXMuYj10aGlzLmQuYS5lLmcsdGhpcy5hPW51bGx9LGguYj0wLEkoTHIsIkxpbmtlZEhhc2hNYXAvRW50cnlTZXQvRW50cnlJdGVyYXRvciIsNzE2KSxEKDE3NCw0OSxvRWUsYmQsbmFlLEs0ZSk7dmFyIGxPbj1JKExyLCJMaW5rZWRIYXNoU2V0IiwxNzQpO0QoNjcsMjA2Mix7MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDY3OjEsMTU6MX0sb3MsZGFlKSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiB1aSh0aGlzLHQpfSxoLiRiPWZ1bmN0aW9uKCl7Q2godGhpcyl9LGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFJyKHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLmI9MDt2YXIgaE9uPUkoTHIsIkxpbmtlZExpc3QiLDY3KTtEKDk4MSwxLGxnLGhpdCksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlJiPWZ1bmN0aW9uKHQpe3pPKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gUUkodGhpcyl9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmIhPXRoaXMuZC5hfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEJyKHRoaXMpfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5VYj1mdW5jdGlvbigpe3JldHVybiBwY3QodGhpcyl9LGguVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLTF9LGguUWI9ZnVuY3Rpb24oKXtZb2UodGhpcyl9LGguV2I9ZnVuY3Rpb24odCl7Z3koISF0aGlzLmMpLHRoaXMuYy5jPXR9LGguYT0wLGguYz1udWxsLEkoTHIsIkxpbmtlZExpc3QvTGlzdEl0ZXJhdG9ySW1wbCIsOTgxKSxEKDYxNywxLHt9LF90KSxJKExyLCJMaW5rZWRMaXN0L05vZGUiLDYxNyksRCgyMDU3LDEse30pO3ZhciBwX2UsXzZ0O0koTHIsIkxvY2FsZSIsMjA1NyksRCg4NzMsMjA1Nyx7fSxFdCksaC5JYj1mdW5jdGlvbigpe3JldHVybiIifSxJKExyLCJMb2NhbGUvMSIsODczKSxEKDg3NCwyMDU3LHt9LEd0KSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuInVua25vd24ifSxJKExyLCJMb2NhbGUvNCIsODc0KSxEKDExMiw2Myx7MzoxLDEwMzoxLDYzOjEsODI6MSwxMTI6MX0sX2MsTGF0KSxJKExyLCJOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIiwxMTIpLEQoNDc1LDEsezQ3NToxfSxLaWUpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9PT10aGlzPyEwOkRlKHQsNDc1KT8obj1sKHQsNDc1KSxKYyh0aGlzLmEsbi5hKSk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUjUodGhpcy5hKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEhPW51bGw/QXd0K2pfKHRoaXMuYSkrIikiOiJPcHRpb25hbC5lbXB0eSgpIn07dmFyIGJfZTtJKExyLCJPcHRpb25hbCIsNDc1KSxEKDQxNCwxLHs0MTQ6MX0sSHR0LHNhZSksaC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdD09PXRoaXM/ITA6RGUodCw0MTQpPyhuPWwodCw0MTQpLHRoaXMuYT09bi5hJiZZaSh0aGlzLmIsbi5iKT09MCk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hP3VhKHRoaXMuYik6MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/Ik9wdGlvbmFsRG91YmxlLm9mKCIrKCIiK3RoaXMuYikrIikiOiJPcHRpb25hbERvdWJsZS5lbXB0eSgpIn0saC5hPSExLGguYj0wO3ZhciBJMGU7SShMciwiT3B0aW9uYWxEb3VibGUiLDQxNCksRCg1MjQsMSx7NTI0OjF9LFZ0dCxhcnQpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9PT10aGlzPyEwOkRlKHQsNTI0KT8obj1sKHQsNTI0KSx0aGlzLmE9PW4uYSYmcnUodGhpcy5iLG4uYik9PTApOiExfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT90aGlzLmI6MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/Ik9wdGlvbmFsSW50Lm9mKCIrKCIiK3RoaXMuYikrIikiOiJPcHRpb25hbEludC5lbXB0eSgpIn0saC5hPSExLGguYj0wO3ZhciBBNnQ7SShMciwiT3B0aW9uYWxJbnQiLDUyNCksRCg1MTAsMjEwMyxXeSxnSCksaC5HYz1mdW5jdGlvbih0KXtyZXR1cm4gY3hlKHRoaXMsdCl9LGguJGI9ZnVuY3Rpb24oKXtheSh0aGlzLmIuYywwKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4odD09bnVsbD8tMTpnYyh0aGlzLmIsdCwwKSkhPS0xfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKbih0aGlzKX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gaGZ0KHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmMubGVuZ3RofSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbih0aGlzLDI1Nil9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gZUgodGhpcy5iLmMpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBqMSh0aGlzLmIsdCl9LEkoTHIsIlByaW9yaXR5UXVldWUiLDUxMCksRCgxMjk2LDEsT2EsSm4pLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE8dGhpcy5jLmIuYy5sZW5ndGh9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbXIodGhpcy5hPHRoaXMuYy5iLmMubGVuZ3RoKSx0aGlzLmI9dGhpcy5hKyssanQodGhpcy5jLmIsdGhpcy5iKX0saC5RYj1mdW5jdGlvbigpe2d5KHRoaXMuYiE9LTEpLHJjZSh0aGlzLmMsdGhpcy5hPXRoaXMuYiksdGhpcy5iPS0xfSxoLmE9MCxoLmI9LTEsSShMciwiUHJpb3JpdHlRdWV1ZS8xIiwxMjk2KSxEKDIzNCwxLHsyMzQ6MX0sVWNlLFZIKSxoLmE9MCxoLmI9MDt2YXIgbV9lLHZfZSxmT249MDtJKExyLCJSYW5kb20iLDIzNCksRCgyNSwxLFBoLGtuLHZ3LF9hdCksaC5BZD1mdW5jdGlvbih0KXtyZXR1cm4odGhpcy5hJnQpIT0wfSxoLnlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC56ZD1mdW5jdGlvbigpe3JldHVybiBpNWUodGhpcyksdGhpcy5jfSxoLk5iPWZ1bmN0aW9uKHQpe2k1ZSh0aGlzKSx0aGlzLmQuTmIodCl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHhodCh0aGlzLHQpfSxoLmE9MCxoLmM9MCxJKExyLCJTcGxpdGVyYXRvcnMvSXRlcmF0b3JTcGxpdGVyYXRvciIsMjUpLEQoNDk1LDI1LFBoLGFxKSxJKExyLCJTb3J0ZWRTZXQvMSIsNDk1KSxEKDYxMSwxLExQLGdvKSxoLlBlPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZCh0KX0sSShMciwiU3BsaXRlcmF0b3IvT2ZEb3VibGUvMG1ldGhvZHJlZiRhY2NlcHQkVHlwZSIsNjExKSxEKDYxMiwxLExQLEVzKSxoLlBlPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZCh0KX0sSShMciwiU3BsaXRlcmF0b3IvT2ZEb3VibGUvMW1ldGhvZHJlZiRhY2NlcHQkVHlwZSIsNjEyKSxEKDYxMywxLGtQLCRjKSxoLkRkPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZChwdCh0KSl9LEkoTHIsIlNwbGl0ZXJhdG9yL09mSW50LzJtZXRob2RyZWYkYWNjZXB0JFR5cGUiLDYxMyksRCg2MTQsMSxrUCx6YSksaC5EZD1mdW5jdGlvbih0KXt0aGlzLmEuQ2QocHQodCkpfSxJKExyLCJTcGxpdGVyYXRvci9PZkludC8zbWV0aG9kcmVmJGFjY2VwdCRUeXBlIiw2MTQpLEQoNjI1LDEsUGgpLGguTmI9ZnVuY3Rpb24odCl7bDNlKHRoaXMsdCl9LGguQWQ9ZnVuY3Rpb24odCl7cmV0dXJuKHRoaXMuZCZ0KSE9MH0saC55ZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguemQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxoLmQ9MCxoLmU9MCxJKExyLCJTcGxpdGVyYXRvcnMvQmFzZVNwbGl0ZXJhdG9yIiw2MjUpLEQoNzM2LDYyNSxQaCksaC5RZT1mdW5jdGlvbih0KXtBNSh0aGlzLHQpfSxoLk5iPWZ1bmN0aW9uKHQpe0RlKHQsMTg5KT9BNSh0aGlzLGwodCwxODkpKTpBNSh0aGlzLG5ldyBFcyh0KSl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTg5KT90aGlzLlJlKGwodCwxODkpKTp0aGlzLlJlKG5ldyBnbyh0KSl9LEkoTHIsIlNwbGl0ZXJhdG9ycy9BYnN0cmFjdERvdWJsZVNwbGl0ZXJhdG9yIiw3MzYpLEQoNzM1LDYyNSxQaCksaC5RZT1mdW5jdGlvbih0KXtBNSh0aGlzLHQpfSxoLk5iPWZ1bmN0aW9uKHQpe0RlKHQsMjAyKT9BNSh0aGlzLGwodCwyMDIpKTpBNSh0aGlzLG5ldyB6YSh0KSl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjAyKT90aGlzLlJlKGwodCwyMDIpKTp0aGlzLlJlKG5ldyAkYyh0KSl9LEkoTHIsIlNwbGl0ZXJhdG9ycy9BYnN0cmFjdEludFNwbGl0ZXJhdG9yIiw3MzUpLEQoNTAwLDYyNSxQaCksSShMciwiU3BsaXRlcmF0b3JzL0Fic3RyYWN0U3BsaXRlcmF0b3IiLDUwMCksRCg3MDYsMSxQaCksaC5OYj1mdW5jdGlvbih0KXtsM2UodGhpcyx0KX0saC5BZD1mdW5jdGlvbih0KXtyZXR1cm4odGhpcy5iJnQpIT0wfSxoLnlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC56ZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmQtdGhpcy5jfSxoLmI9MCxoLmM9MCxoLmQ9MCxJKExyLCJTcGxpdGVyYXRvcnMvQmFzZUFycmF5U3BsaXRlcmF0b3IiLDcwNiksRCg5NjAsNzA2LFBoLEtpdCksaC5TZT1mdW5jdGlvbih0LG4pe3d1bih0aGlzLGwodCw0MSksbil9LGguTmI9ZnVuY3Rpb24odCl7V2FlKHRoaXMsdCl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFhIKHRoaXMsdCl9LEkoTHIsIlNwbGl0ZXJhdG9ycy9BcnJheVNwbGl0ZXJhdG9yIiw5NjApLEQoNzA3LDcwNixQaCxvaXQpLGguU2U9ZnVuY3Rpb24odCxuKXt5dW4odGhpcyxsKHQsMTg5KSxuKX0saC5RZT1mdW5jdGlvbih0KXtXYWUodGhpcyx0KX0saC5OYj1mdW5jdGlvbih0KXtEZSh0LDE4OSk/V2FlKHRoaXMsbCh0LDE4OSkpOldhZSh0aGlzLG5ldyBFcyh0KSl9LGguUmU9ZnVuY3Rpb24odCl7cmV0dXJuIFhIKHRoaXMsdCl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTg5KT9YSCh0aGlzLGwodCwxODkpKTpYSCh0aGlzLG5ldyBnbyh0KSl9LEkoTHIsIlNwbGl0ZXJhdG9ycy9Eb3VibGVBcnJheVNwbGl0ZXJhdG9yIiw3MDcpLEQoMjA2NiwxLFBoKSxoLk5iPWZ1bmN0aW9uKHQpe2wzZSh0aGlzLHQpfSxoLkFkPWZ1bmN0aW9uKHQpe3JldHVybigxNjQ0OCZ0KSE9MH0saC55ZD1mdW5jdGlvbigpe3JldHVybiAxNjQ0OH0saC56ZD1mdW5jdGlvbigpe3JldHVybiAwfTt2YXIgTDZ0O0koTHIsIlNwbGl0ZXJhdG9ycy9FbXB0eVNwbGl0ZXJhdG9yIiwyMDY2KSxEKDk1OSwyMDY2LFBoLGxuKSxoLlFlPWZ1bmN0aW9uKHQpe24wKHQpfSxoLk5iPWZ1bmN0aW9uKHQpe0RlKHQsMjAyKT9uMChsKHQsMjAyKSk6bjAobmV3IHphKHQpKX0saC5SZT1mdW5jdGlvbih0KXtyZXR1cm4gVDNlKHQpfSxoLkJkPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDIwMik/VDNlKGwodCwyMDIpKTpUM2UobmV3ICRjKHQpKX0sSShMciwiU3BsaXRlcmF0b3JzL0VtcHR5U3BsaXRlcmF0b3IvT2ZJbnQiLDk1OSksRCg1ODgsNTYsV3d0LGp6KSxoLmJkPWZ1bmN0aW9uKHQsbil7cWsodCx0aGlzLmEuYy5sZW5ndGgrMSkscHcodGhpcy5hLHQsbil9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIHZ0KHRoaXMuYSx0KX0saC5jZD1mdW5jdGlvbih0LG4pe3JldHVybiBxayh0LHRoaXMuYS5jLmxlbmd0aCsxKSxRN2UodGhpcy5hLHQsbil9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIHJhKHRoaXMuYSx0KX0saC4kYj1mdW5jdGlvbigpe2F5KHRoaXMuYS5jLDApfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBnYyh0aGlzLmEsdCwwKSE9LTF9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIEVOKHRoaXMuYSx0KX0saC5KYz1mdW5jdGlvbih0KXtWdSh0aGlzLmEsdCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHFrKHQsdGhpcy5hLmMubGVuZ3RoKSxqdCh0aGlzLmEsdCl9LGguZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIGdjKHRoaXMuYSx0LDApfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jLmxlbmd0aD09MH0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmEpfSxoLmdkPWZ1bmN0aW9uKHQpe3JldHVybiBxayh0LHRoaXMuYS5jLmxlbmd0aCksdDIodGhpcy5hLHQpfSxoLmNlPWZ1bmN0aW9uKHQsbil7Qm90KHRoaXMuYSx0LG4pfSxoLmhkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHFrKHQsdGhpcy5hLmMubGVuZ3RoKSxyZih0aGlzLmEsdCxuKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYy5sZW5ndGh9LGguamQ9ZnVuY3Rpb24odCl7VnModGhpcy5hLHQpfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBacCh0aGlzLmEsdCxuKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBlSCh0aGlzLmEuYyl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIGoxKHRoaXMuYSx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBUYih0aGlzLmEpfSxJKExyLCJWZWN0b3IiLDU4OCksRCg4MjQsNTg4LFd3dCxGd2UpLEkoTHIsIlN0YWNrIiw4MjQpLEQoMjEzLDEsezIxMzoxfSxIbSksaC5JYj1mdW5jdGlvbigpe3JldHVybiBnY3QodGhpcyl9LEkoTHIsIlN0cmluZ0pvaW5lciIsMjEzKSxEKDU1MywyMDkwLHszOjEsODU6MSwxMzk6MSwxMzM6MX0sbmV0LFBhZSksaC4kYj1mdW5jdGlvbigpe09KZSh0aGlzKX0saC5EZT1mdW5jdGlvbigpe3JldHVybiBuZXcgeGN0KHRoaXMpfSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBabnQodGhpcyl9LGguRWU9ZnVuY3Rpb24odCl7cmV0dXJuIE9FKHRoaXMsdCwhMCl9LGguRmU9ZnVuY3Rpb24odCl7cmV0dXJuIFMwdCh0aGlzLHQpfSxoLkdlPWZ1bmN0aW9uKCl7cmV0dXJuIGo2ZSh0aGlzKX0saC5IZT1mdW5jdGlvbih0KXtyZXR1cm4gJE4odGhpcyx0LCEwKX0saC5JZT1mdW5jdGlvbih0KXtyZXR1cm4gT0UodGhpcyx0LCExKX0saC5KZT1mdW5jdGlvbigpe3JldHVybiBObHQodGhpcyl9LGguS2U9ZnVuY3Rpb24odCl7cmV0dXJuICROKHRoaXMsdCwhMSl9LGguWmM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRm90KHRoaXMsdCxuKX0saC56Yz1mdW5jdGlvbih0LG4pe3JldHVybiBiMHQodGhpcyx0LG4pfSxoLkJjPWZ1bmN0aW9uKHQpe3JldHVybiBhb3QodGhpcyx0KX0saC5MZT1mdW5jdGlvbih0KXtyZXR1cm4gTDZlKHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLmFkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFJvdCh0aGlzLHQsbil9LGguYz0wLEkoTHIsIlRyZWVNYXAiLDU1MyksRCg1NTQsMSxPYSx4Y3Qsb2NlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gb3J0KHRoaXMpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGxzZSh0aGlzLmEpfSxoLlFiPWZ1bmN0aW9uKCl7ZGl0KHRoaXMpfSxJKExyLCJUcmVlTWFwL0VudHJ5SXRlcmF0b3IiLDU1NCksRCgxMTQyLDYyOSxUbCxabnQpLGguJGI9ZnVuY3Rpb24oKXtPSmUodGhpcy5hKX0sSShMciwiVHJlZU1hcC9FbnRyeVNldCIsMTE0MiksRCg0NDcsMzk3LHs0OTQ6MSwzOTc6MSw0NDoxLDQ0NzoxfSxCb2UpLGguYj0hMTt2YXIgZE9uPUkoTHIsIlRyZWVNYXAvTm9kZSIsNDQ3KTtEKDYzMCwxLHt9LHh0KSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIlN0YXRlOiBtdj0iK3RoaXMuYysiIHZhbHVlPSIrdGhpcy5kKyIgZG9uZT0iK3RoaXMuYSsiIGZvdW5kPSIrdGhpcy5ifSxoLmE9ITEsaC5iPSExLGguYz0hMSxJKExyLCJUcmVlTWFwL1N0YXRlIiw2MzApLEQoNjMxLDIwOTAsWmtlLEJ1ZSksaC5EZT1mdW5jdGlvbigpe3JldHVybiBuZXcgb2NlKHRoaXMuYyx0aGlzLmYsdGhpcy5iLHRoaXMuYSx0aGlzLmUsdGhpcy5kKX0saC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgUnModGhpcyl9LGguRWU9ZnVuY3Rpb24odCl7cmV0dXJuIFhxKHRoaXMsT0UodGhpcy5jLHQsITApKX0saC5GZT1mdW5jdGlvbih0KXtyZXR1cm4gWHEodGhpcyxTMHQodGhpcy5jLHQpKX0saC5HZT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmYuVGUoKT90aGlzLmE/dD1PRSh0aGlzLmMsdGhpcy5iLCEwKTp0PU9FKHRoaXMuYyx0aGlzLmIsITEpOnQ9ajZlKHRoaXMuYyksdCYmeUgodGhpcyx0LmQpP3Q6bnVsbH0saC5IZT1mdW5jdGlvbih0KXtyZXR1cm4gWHEodGhpcywkTih0aGlzLmMsdCwhMCkpfSxoLkllPWZ1bmN0aW9uKHQpe3JldHVybiBYcSh0aGlzLE9FKHRoaXMuYyx0LCExKSl9LGguSmU9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5mLlVlKCk/dGhpcy5kP3Q9JE4odGhpcy5jLHRoaXMuZSwhMCk6dD0kTih0aGlzLmMsdGhpcy5lLCExKTp0PU5sdCh0aGlzLmMpLHQmJnlIKHRoaXMsdC5kKT90Om51bGx9LGguS2U9ZnVuY3Rpb24odCl7cmV0dXJuIFhxKHRoaXMsJE4odGhpcy5jLHQsITEpKX0saC5aYz1mdW5jdGlvbih0LG4pe2lmKHRoaXMuZi5VZSgpJiZ0aGlzLmMuYS5OZSh0LHRoaXMuZSk+MCl0aHJvdyB1ZShuZXcgWW4obEVlK3QrIiBncmVhdGVyIHRoYW4gIit0aGlzLmUpKTtyZXR1cm4gdGhpcy5mLlRlKCk/c290KHRoaXMuYyx0aGlzLmIsdGhpcy5hLHQsbik6Rm90KHRoaXMuYyx0LG4pfSxoLnpjPWZ1bmN0aW9uKHQsbil7aWYoIXh1ZSh0aGlzLmMsdGhpcy5mLHQsdGhpcy5iLHRoaXMuYSx0aGlzLmUsdGhpcy5kKSl0aHJvdyB1ZShuZXcgWW4odCsiIG91dHNpZGUgdGhlIHJhbmdlICIrdGhpcy5iKyIgdG8gIit0aGlzLmUpKTtyZXR1cm4gYjB0KHRoaXMuYyx0LG4pfSxoLkJjPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXQseHVlKHRoaXMuYyx0aGlzLmYsbix0aGlzLmIsdGhpcy5hLHRoaXMuZSx0aGlzLmQpP2FvdCh0aGlzLmMsbik6bnVsbH0saC5MZT1mdW5jdGlvbih0KXtyZXR1cm4geUgodGhpcyx0LmxkKCkpJiZMNmUodGhpcy5jLHQpfSxoLmdjPWZ1bmN0aW9uKCl7dmFyIHQsbixyO2lmKHRoaXMuZi5UZSgpP3RoaXMuYT9uPU9FKHRoaXMuYyx0aGlzLmIsITApOm49T0UodGhpcy5jLHRoaXMuYiwhMSk6bj1qNmUodGhpcy5jKSwhKG4mJnlIKHRoaXMsbi5kKSYmbikpcmV0dXJuIDA7Zm9yKHQ9MCxyPW5ldyBvY2UodGhpcy5jLHRoaXMuZix0aGlzLmIsdGhpcy5hLHRoaXMuZSx0aGlzLmQpO2xzZShyLmEpO3IuYj1sKEk1ZShyLmEpLDQ0KSkrK3Q7cmV0dXJuIHR9LGguYWQ9ZnVuY3Rpb24odCxuKXtpZih0aGlzLmYuVGUoKSYmdGhpcy5jLmEuTmUodCx0aGlzLmIpPDApdGhyb3cgdWUobmV3IFluKGxFZSt0K1l3dCt0aGlzLmIpKTtyZXR1cm4gdGhpcy5mLlVlKCk/c290KHRoaXMuYyx0LG4sdGhpcy5lLHRoaXMuZCk6Um90KHRoaXMuYyx0LG4pfSxoLmE9ITEsaC5kPSExLEkoTHIsIlRyZWVNYXAvU3ViTWFwIiw2MzEpLEQoMzA0LDIyLGZoZSxvcSksaC5UZT1mdW5jdGlvbigpe3JldHVybiExfSxoLlVlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O3ZhciBPMGUsTjBlLFAwZSxCMGUsZks9RnIoTHIsIlRyZWVNYXAvU3ViTWFwVHlwZSIsMzA0LEhyLEdibixuMG4pO0QoMTE0MywzMDQsZmhlLGhudCksaC5VZT1mdW5jdGlvbigpe3JldHVybiEwfSxGcihMciwiVHJlZU1hcC9TdWJNYXBUeXBlLzEiLDExNDMsZkssbnVsbCxudWxsKSxEKDExNDQsMzA0LGZoZSx5bnQpLGguVGU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5VZT1mdW5jdGlvbigpe3JldHVybiEwfSxGcihMciwiVHJlZU1hcC9TdWJNYXBUeXBlLzIiLDExNDQsZkssbnVsbCxudWxsKSxEKDExNDUsMzA0LGZoZSxsbnQpLGguVGU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRnIoTHIsIlRyZWVNYXAvU3ViTWFwVHlwZS8zIiwxMTQ1LGZLLG51bGwsbnVsbCk7dmFyIE02dDtEKDE1NyxxMSx7MzoxLDIwOjEsMzE6MSwxNjoxLDI3NzoxLDIxOjEsODc6MSwxNTc6MX0sTHdlLEtwLGJhKSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhcSh0aGlzKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gak8odGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuX2IodCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuS2MoKX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gdGFlKHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9O3ZhciBnT249SShMciwiVHJlZVNldCIsMTU3KTtEKDEwODIsMSx7fSx4byksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiB3Zm4odGhpcy5hLHQsbil9LEkoZGhlLCJCaW5hcnlPcGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDgyKSxEKDEwODMsMSx7fSxsaCksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiB5Zm4odGhpcy5hLHQsbil9LEkoZGhlLCJCaW5hcnlPcGVyYXRvci9sYW1iZGEkMSRUeXBlIiwxMDgzKSxEKDk1MiwxLHt9LFB0KSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxJKGRoZSwiRnVuY3Rpb24vbGFtYmRhJDAkVHlwZSIsOTUyKSxEKDM5NSwxLHRpLFdsKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiF0aGlzLmEuTWIodCl9LEkoZGhlLCJQcmVkaWNhdGUvbGFtYmRhJDIkVHlwZSIsMzk1KSxEKDU4MSwxLHs1ODE6MX0pO3ZhciBENnQ9SShhTCwiSGFuZGxlciIsNTgxKTtEKDIxMDcsMSx5UCksaC54ZT1mdW5jdGlvbigpe3JldHVybiJEVU1NWSJ9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54ZSgpfTt2YXIgd19lO0koYUwsIkxldmVsIiwyMTA3KSxEKDE3MDYsMjEwNyx5UCxRZSksaC54ZT1mdW5jdGlvbigpe3JldHVybiJJTkZPIn0sSShhTCwiTGV2ZWwvTGV2ZWxJbmZvIiwxNzA2KSxEKDE4NDMsMSx7fSxGUWUpO3ZhciBGMGU7SShhTCwiTG9nTWFuYWdlciIsMTg0MyksRCgxODk2LDEseVAsZml0KSxoLmI9bnVsbCxJKGFMLCJMb2dSZWNvcmQiLDE4OTYpLEQoNTI1LDEsezUyNToxfSxTb2UpLGguZT0hMTt2YXIgSTZ0PSExLE82dD0hMSxHMT0hMSxONnQ9ITEsUDZ0PSExO0koYUwsIkxvZ2dlciIsNTI1KSxEKDgzNSw1ODEsezU4MToxfSxEdCksSShhTCwiU2ltcGxlQ29uc29sZUxvZ0hhbmRsZXIiLDgzNSksRCgxMDgsMjIsezM6MSwzNDoxLDIyOjEsMTA4OjF9LGRzZSk7dmFyIHlfZSxFYyxpNCxvYz1GcihzYSwiQ29sbGVjdG9yL0NoYXJhY3RlcmlzdGljcyIsMTA4LEhyLE8ybixyMG4pLEI2dDtEKDc1OCwxLHt9LGg1ZSksSShzYSwiQ29sbGVjdG9ySW1wbCIsNzU4KSxEKDEwNzQsMSx7fSxrdCksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiBkNG4obCh0LDIxMyksbChuLDIxMykpfSxJKHNhLCJDb2xsZWN0b3JzLzEwbWV0aG9kcmVmJG1lcmdlJFR5cGUiLDEwNzQpLEQoMTA3NSwxLHt9LE9uKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBnY3QobCh0LDIxMykpfSxJKHNhLCJDb2xsZWN0b3JzLzExbWV0aG9kcmVmJHRvU3RyaW5nJFR5cGUiLDEwNzUpLEQoMTA3NiwxLHt9LFoyKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBIbigpLCEhc3llKHQpfSxJKHNhLCJDb2xsZWN0b3JzLzEybWV0aG9kcmVmJHRlc3QkVHlwZSIsMTA3NiksRCgxNDQsMSx7fSxodCksaC5ZZD1mdW5jdGlvbih0LG4pe2wodCwxNikuRmMobil9LEkoc2EsIkNvbGxlY3RvcnMvMjBtZXRob2RyZWYkYWRkJFR5cGUiLDE0NCksRCgxNDYsMSx7fSx6ciksaC5YZT1mdW5jdGlvbigpe3JldHVybiBuZXcgYnR9LEkoc2EsIkNvbGxlY3RvcnMvMjFtZXRob2RyZWYkY3RvciRUeXBlIiwxNDYpLEQoMzU5LDEse30seXQpLGguWGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEtzfSxJKHNhLCJDb2xsZWN0b3JzLzIzbWV0aG9kcmVmJGN0b3IkVHlwZSIsMzU5KSxEKDM2MCwxLHt9LGppKSxoLllkPWZ1bmN0aW9uKHQsbil7bmEobCh0LDQ5KSxuKX0sSShzYSwiQ29sbGVjdG9ycy8yNG1ldGhvZHJlZiRhZGQkVHlwZSIsMzYwKSxEKDEwNjksMSx7fSx4aSksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiByZXQobCh0LDE1KSxsKG4sMTYpKX0sSShzYSwiQ29sbGVjdG9ycy80bWV0aG9kcmVmJGFkZEFsbCRUeXBlIiwxMDY5KSxEKDEwNzMsMSx7fSxNYSksaC5ZZD1mdW5jdGlvbih0LG4pe0pnKGwodCwyMTMpLGwobiw0ODQpKX0sSShzYSwiQ29sbGVjdG9ycy85bWV0aG9kcmVmJGFkZCRUeXBlIiwxMDczKSxEKDEwNzIsMSx7fSxMaXQpLGguWGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEhtKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMTUkVHlwZSIsMTA3MiksRCgxMDc3LDEse30senMpLGguWGU9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgZTIsaDIodCwoSG4oKSwhMSksbmV3IGJ0KSxoMih0LCEwLG5ldyBidCksdH0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMjIkVHlwZSIsMTA3NyksRCgxMDc4LDEse30sZWIpLGguWGU9ZnVuY3Rpb24oKXtyZXR1cm4gaGUobGUod2EsMSksUm4sMSw1LFt0aGlzLmFdKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMjUkVHlwZSIsMTA3OCksRCgxMDc5LDEse30sRzApLGguWWQ9ZnVuY3Rpb24odCxuKXtqZG4odGhpcy5hLGptKHQpKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMjYkVHlwZSIsMTA3OSksRCgxMDgwLDEse30senApLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZGduKHRoaXMuYSxqbSh0KSxqbShuKSl9LEkoc2EsIkNvbGxlY3RvcnMvbGFtYmRhJDI3JFR5cGUiLDEwODApLEQoMTA4MSwxLHt9LGFvKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBqbSh0KVswXX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMjgkVHlwZSIsMTA4MSksRCg3MjgsMSx7fSxUciksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiBVNGUodCxuKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkNCRUeXBlIiw3MjgpLEQoMTQ1LDEse30sRm4pLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gV3VuKGwodCwxNiksbChuLDE2KSl9LEkoc2EsIkNvbGxlY3RvcnMvbGFtYmRhJDQyJFR5cGUiLDE0NSksRCgzNjEsMSx7fSxxbiksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiBZdW4obCh0LDQ5KSxsKG4sNDkpKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkNTAkVHlwZSIsMzYxKSxEKDM2MiwxLHt9LFVuKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsNDkpfSxJKHNhLCJDb2xsZWN0b3JzL2xhbWJkYSQ1MSRUeXBlIiwzNjIpLEQoMTA2OCwxLHt9LGZkKSxoLllkPWZ1bmN0aW9uKHQsbil7d3luKHRoaXMuYSxsKHQsODUpLG4pfSxJKHNhLCJDb2xsZWN0b3JzL2xhbWJkYSQ3JFR5cGUiLDEwNjgpLEQoMTA3MCwxLHt9LEF0KSxoLlZlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFkzbihsKHQsODUpLGwobiw4NSksbmV3IHhpKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkOCRUeXBlIiwxMDcwKSxEKDEwNzEsMSx7fSxXdiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gRzRuKHRoaXMuYSxsKHQsODUpKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkOSRUeXBlIiwxMDcxKSxEKDU1MCwxLHt9KSxoLiRlPWZ1bmN0aW9uKCl7dEEodGhpcyl9LGguZD0hMSxJKHNhLCJUZXJtaW5hdGFibGVTdHJlYW0iLDU1MCksRCg4MjcsNTUwLGhFZSxWeWUpLGguJGU9ZnVuY3Rpb24oKXt0QSh0aGlzKX0sSShzYSwiRG91YmxlU3RyZWFtSW1wbCIsODI3KSxEKDE4NDcsNzM2LFBoLE1pdCksaC5SZT1mdW5jdGlvbih0KXtyZXR1cm4gWTZuKHRoaXMsbCh0LDE4OSkpfSxoLmE9bnVsbCxJKHNhLCJEb3VibGVTdHJlYW1JbXBsLzIiLDE4NDcpLEQoMTg0OCwxLExQLHN5KSxoLlBlPWZ1bmN0aW9uKHQpe3Fsbih0aGlzLmEsdCl9LEkoc2EsIkRvdWJsZVN0cmVhbUltcGwvMi9sYW1iZGEkMCRUeXBlIiwxODQ4KSxEKDE4NDUsMSxMUCxFOCksaC5QZT1mdW5jdGlvbih0KXt6bG4odGhpcy5hLHQpfSxJKHNhLCJEb3VibGVTdHJlYW1JbXBsL2xhbWJkYSQwJFR5cGUiLDE4NDUpLEQoMTg0NiwxLExQLHg1KSxoLlBlPWZ1bmN0aW9uKHQpe00xdCh0aGlzLmEsdCl9LEkoc2EsIkRvdWJsZVN0cmVhbUltcGwvbGFtYmRhJDIkVHlwZSIsMTg0NiksRCgxMzk3LDczNSxQaCx3dXQpLGguUmU9ZnVuY3Rpb24odCl7cmV0dXJuIFBibih0aGlzLGwodCwyMDIpKX0saC5hPTAsaC5iPTAsaC5jPTAsSShzYSwiSW50U3RyZWFtLzUiLDEzOTcpLEQoODA2LDU1MCxoRWUsVXllKSxoLiRlPWZ1bmN0aW9uKCl7dEEodGhpcyl9LGguX2U9ZnVuY3Rpb24oKXtyZXR1cm4gZmIodGhpcyksdGhpcy5hfSxJKHNhLCJJbnRTdHJlYW1JbXBsIiw4MDYpLEQoODA3LDU1MCxoRWUsYjNlKSxoLiRlPWZ1bmN0aW9uKCl7dEEodGhpcyl9LGguX2U9ZnVuY3Rpb24oKXtyZXR1cm4gZmIodGhpcyksU3llKCksTDZ0fSxJKHNhLCJJbnRTdHJlYW1JbXBsL0VtcHR5Iiw4MDcpLEQoMTY4NywxLGtQLFQ4KSxoLkRkPWZ1bmN0aW9uKHQpeyRmdCh0aGlzLmEsdCl9LEkoc2EsIkludFN0cmVhbUltcGwvbGFtYmRhJDQkVHlwZSIsMTY4Nyk7dmFyIHBPbj1rcyhzYSwiU3RyZWFtIik7RCgyNiw1NTAsezUzMzoxLDY4NzoxLDg0ODoxfSxibiksaC4kZT1mdW5jdGlvbigpe3RBKHRoaXMpfTt2YXIgeng7SShzYSwiU3RyZWFtSW1wbCIsMjYpLEQoMTEwMiw1MDAsUGgsaWl0KSxoLkJkPWZ1bmN0aW9uKHQpe2Zvcig7UnZuKHRoaXMpOyl7aWYodGhpcy5hLkJkKHQpKXJldHVybiEwO3RBKHRoaXMuYiksdGhpcy5iPW51bGwsdGhpcy5hPW51bGx9cmV0dXJuITF9LEkoc2EsIlN0cmVhbUltcGwvMSIsMTEwMiksRCgxMTAzLDEsZnIsWlMpLGguQ2Q9ZnVuY3Rpb24odCl7aGRuKHRoaXMuYSxsKHQsODQ4KSl9LEkoc2EsIlN0cmVhbUltcGwvMS9sYW1iZGEkMCRUeXBlIiwxMTAzKSxEKDExMDQsMSx0aSxrNSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbmEodGhpcy5hLHQpfSxJKHNhLCJTdHJlYW1JbXBsLzFtZXRob2RyZWYkYWRkJFR5cGUiLDExMDQpLEQoMTEwNSw1MDAsUGgsUmF0KSxoLkJkPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0aGlzLmF8fChuPW5ldyBidCx0aGlzLmIuYS5OYihuZXcgUWQobikpLENuKCksVnMobix0aGlzLmMpLHRoaXMuYT1uZXcga24obiwxNikpLHhodCh0aGlzLmEsdCl9LGguYT1udWxsLEkoc2EsIlN0cmVhbUltcGwvNSIsMTEwNSksRCgxMTA2LDEsZnIsUWQpLGguQ2Q9ZnVuY3Rpb24odCl7dnQodGhpcy5hLHQpfSxJKHNhLCJTdHJlYW1JbXBsLzUvMm1ldGhvZHJlZiRhZGQkVHlwZSIsMTEwNiksRCg3MzcsNTAwLFBoLCQ2ZSksaC5CZD1mdW5jdGlvbih0KXtmb3IodGhpcy5iPSExOyF0aGlzLmImJnRoaXMuYy5CZChuZXcgeGV0KHRoaXMsdCkpOyk7cmV0dXJuIHRoaXMuYn0saC5iPSExLEkoc2EsIlN0cmVhbUltcGwvRmlsdGVyU3BsaXRlcmF0b3IiLDczNyksRCgxMDk2LDEsZnIseGV0KSxoLkNkPWZ1bmN0aW9uKHQpe29nbih0aGlzLmEsdGhpcy5iLHQpfSxJKHNhLCJTdHJlYW1JbXBsL0ZpbHRlclNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwOTYpLEQoMTA5MSw3MzYsUGgsTXV0KSxoLlJlPWZ1bmN0aW9uKHQpe3JldHVybiB6Zm4odGhpcyxsKHQsMTg5KSl9LEkoc2EsIlN0cmVhbUltcGwvTWFwVG9Eb3VibGVTcGxpdGVyYXRvciIsMTA5MSksRCgxMDk1LDEsZnIsa2V0KSxoLkNkPWZ1bmN0aW9uKHQpe2hsbih0aGlzLmEsdGhpcy5iLHQpfSxJKHNhLCJTdHJlYW1JbXBsL01hcFRvRG91YmxlU3BsaXRlcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTA5NSksRCgxMDkwLDczNSxQaCxEdXQpLGguUmU9ZnVuY3Rpb24odCl7cmV0dXJuIHFmbih0aGlzLGwodCwyMDIpKX0sSShzYSwiU3RyZWFtSW1wbC9NYXBUb0ludFNwbGl0ZXJhdG9yIiwxMDkwKSxEKDEwOTQsMSxmcixFZXQpLGguQ2Q9ZnVuY3Rpb24odCl7ZmxuKHRoaXMuYSx0aGlzLmIsdCl9LEkoc2EsIlN0cmVhbUltcGwvTWFwVG9JbnRTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDk0KSxEKDczNCw1MDAsUGgsQzZlKSxoLkJkPWZ1bmN0aW9uKHQpe3JldHVybiB0aXQodGhpcyx0KX0sSShzYSwiU3RyZWFtSW1wbC9NYXBUb09ialNwbGl0ZXJhdG9yIiw3MzQpLEQoMTA5MywxLGZyLFRldCksaC5DZD1mdW5jdGlvbih0KXtkbG4odGhpcy5hLHRoaXMuYix0KX0sSShzYSwiU3RyZWFtSW1wbC9NYXBUb09ialNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwOTMpLEQoMTA5Miw1MDAsUGgsYWZ0KSxoLkJkPWZ1bmN0aW9uKHQpe2Zvcig7aHNlKHRoaXMuYiwwKTspe2lmKCF0aGlzLmEuQmQobmV3IHd0KSlyZXR1cm4hMTt0aGlzLmI9RGYodGhpcy5iLDEpfXJldHVybiB0aGlzLmEuQmQodCl9LGguYj0wLEkoc2EsIlN0cmVhbUltcGwvU2tpcFNwbGl0ZXJhdG9yIiwxMDkyKSxEKDEwOTcsMSxmcix3dCksaC5DZD1mdW5jdGlvbih0KXt9LEkoc2EsIlN0cmVhbUltcGwvU2tpcFNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwOTcpLEQoNjI2LDEsZnIsb24pLGguQ2Q9ZnVuY3Rpb24odCl7RWllKHRoaXMsdCl9LEkoc2EsIlN0cmVhbUltcGwvVmFsdWVDb25zdW1lciIsNjI2KSxEKDEwOTgsMSxmcixmbiksaC5DZD1mdW5jdGlvbih0KXtBbSgpfSxJKHNhLCJTdHJlYW1JbXBsL2xhbWJkYSQwJFR5cGUiLDEwOTgpLEQoMTA5OSwxLGZyLEFuKSxoLkNkPWZ1bmN0aW9uKHQpe0FtKCl9LEkoc2EsIlN0cmVhbUltcGwvbGFtYmRhJDEkVHlwZSIsMTA5OSksRCgxMTAwLDEse30sXzEpLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4geTBuKHRoaXMuYSx0LG4pfSxJKHNhLCJTdHJlYW1JbXBsL2xhbWJkYSQ0JFR5cGUiLDExMDApLEQoMTEwMSwxLGZyLENldCksaC5DZD1mdW5jdGlvbih0KXtTZm4odGhpcy5iLHRoaXMuYSx0KX0sSShzYSwiU3RyZWFtSW1wbC9sYW1iZGEkNSRUeXBlIiwxMTAxKSxEKDExMDcsMSxmcixKZCksaC5DZD1mdW5jdGlvbih0KXtGM24odGhpcy5hLGwodCwzODApKX0sSShzYSwiVGVybWluYXRhYmxlU3RyZWFtL2xhbWJkYSQwJFR5cGUiLDExMDcpLEQoMjE0MiwxLHt9KSxEKDIwMTQsMSx7fSxvbyksSSgiamF2YWVtdWwuaW50ZXJuYWwiLCJDb25zb2xlTG9nZ2VyIiwyMDE0KTt2YXIgYk9uPTA7RCgyMTM0LDEse30pLEQoMTgzMCwxLGZyLGpvKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwzMTcpfSxJKG9ULCJCb3d5ZXJXYXRzb25Ucmlhbmd1bGF0aW9uL2xhbWJkYSQwJFR5cGUiLDE4MzApLEQoMTgzMSwxLGZyLEVtKSxoLkNkPWZ1bmN0aW9uKHQpe0thKHRoaXMuYSxsKHQsMzE3KS5lKX0sSShvVCwiQm93eWVyV2F0c29uVHJpYW5ndWxhdGlvbi9sYW1iZGEkMSRUeXBlIiwxODMxKSxEKDE4MzIsMSxmciwkbyksaC5DZD1mdW5jdGlvbih0KXtsKHQsMTc3KX0sSShvVCwiQm93eWVyV2F0c29uVHJpYW5ndWxhdGlvbi9sYW1iZGEkMiRUeXBlIiwxODMyKSxEKDE4MjcsMSxpaSxMeiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB5bW4odGhpcy5hLGwodCwxNzcpLGwobiwxNzcpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKG9ULCJOYWl2ZU1pblNUL2xhbWJkYSQwJFR5cGUiLDE4MjcpLEQoNDQ5LDEse30sWXYpLEkob1QsIk5vZGVNaWNyb0xheW91dCIsNDQ5KSxEKDE3NywxLHsxNzc6MX0sQjgpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsMTc3KT8obj1sKHQsMTc3KSxKYyh0aGlzLmEsbi5hKSYmSmModGhpcy5iLG4uYil8fEpjKHRoaXMuYSxuLmIpJiZKYyh0aGlzLmIsbi5hKSk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUjUodGhpcy5hKStSNSh0aGlzLmIpfTt2YXIgbU9uPUkob1QsIlRFZGdlIiwxNzcpO0QoMzE3LDEsezMxNzoxfSxDa2UpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsMzE3KT8obj1sKHQsMzE3KSxyVih0aGlzLG4uYSkmJnJWKHRoaXMsbi5iKSYmclYodGhpcyxuLmMpKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBSNSh0aGlzLmEpK1I1KHRoaXMuYikrUjUodGhpcy5jKX0sSShvVCwiVFRyaWFuZ2xlIiwzMTcpLEQoMjI1LDEsezIyNToxfSxOcSksSShvVCwiVHJlZSIsMjI1KSxEKDEyMTgsMSx7fSxFb3QpLEkoSnd0LCJTY2FubGluZSIsMTIxOCk7dmFyIEY2dD1rcyhKd3QsWnd0KTtEKDE3NTgsMSx7fSx2aHQpLEkoZ2csIkNHcmFwaCIsMTc1OCksRCgzMTYsMSx7MzE2OjF9LFNvdCksaC5iPTAsaC5jPTAsaC5kPTAsaC5nPTAsaC5pPTAsaC5rPWlhLEkoZ2csIkNHcm91cCIsMzE2KSxEKDgzMCwxLHt9LEl3ZSksSShnZywiQ0dyb3VwL0NHcm91cEJ1aWxkZXIiLDgzMCksRCg2MCwxLHs2MDoxfSxScnQpLGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5qP2VpKHRoaXMuai5LYih0aGlzKSk6KEdnKGRLKSxkSy5vKyJAIisodD1mdyh0aGlzKT4+PjAsdC50b1N0cmluZygxNikpKX0saC5mPTAsaC5pPWlhO3ZhciBkSz1JKGdnLCJDTm9kZSIsNjApO0QoODI5LDEse30sT3dlKSxJKGdnLCJDTm9kZS9DTm9kZUJ1aWxkZXIiLDgyOSk7dmFyIFI2dDtEKDE1OTAsMSx7fSxQYSksaC5mZj1mdW5jdGlvbih0LG4pe3JldHVybiAwfSxoLmdmPWZ1bmN0aW9uKHQsbil7cmV0dXJuIDB9LEkoZ2csdDN0LDE1OTApLEQoMTg1MywxLHt9LHdvKSxoLmNmPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKEM9Z3MsYT1uZXcgRyh0LmEuYik7YS5hPGEuYy5jLmxlbmd0aDspbj1sKHJlKGEpLDYwKSxDPWIuTWF0aC5taW4oQyxuLmEuai5kLmMrbi5iLmEpO2ZvcihWPW5ldyBvcyxnPW5ldyBHKHQuYS5hKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMzE2KSxmLms9QyxmLmc9PTAmJkNzKFYsZixWLmMuYixWLmMpO2Zvcig7Vi5iIT0wOyl7Zm9yKGY9bChWLmI9PTA/bnVsbDoobXIoVi5iIT0wKSxhZihWLFYuYS5hKSksMzE2KSxvPWYuai5kLmMsej1mLmEuYS5lYygpLktjKCk7ei5PYigpOylMPWwoei5QYigpLDYwKSx0ZT1mLmsrTC5iLmEsIUp5bih0LGYsdC5kKXx8TC5kLmM8dGU/TC5pPXRlOkwuaT1MLmQuYztmb3Ioby09Zi5qLmksZi5iKz1vLHQuZD09KEpzKCksdmMpfHx0LmQ9PVExP2YuYys9bzpmLmMtPW8sQj1mLmEuYS5lYygpLktjKCk7Qi5PYigpOylmb3IoTD1sKEIuUGIoKSw2MCksRT1MLmMuS2MoKTtFLk9iKCk7KXc9bChFLlBiKCksNjApLFVnKHQuZCk/Sj10LmcuZmYoTCx3KTpKPXQuZy5nZihMLHcpLHcuYS5rPWIuTWF0aC5tYXgody5hLmssTC5pK0wuZC5iK0otdy5iLmEpLEdhdCh0LHcsdC5kKSYmKHcuYS5rPWIuTWF0aC5tYXgody5hLmssdy5kLmMtdy5iLmEpKSwtLXcuYS5nLHcuYS5nPT0wJiZ1aShWLHcuYSl9Zm9yKHI9bmV3IEcodC5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSw2MCksbi5kLmM9bi5pfSxJKGdnLCJMb25nZXN0UGF0aENvbXBhY3Rpb24iLDE4NTMpLEQoMTc1NiwxLHt9LGEydCksaC5lPSExO3ZhciBqNnQsJDZ0LHo2dCxSMGU9SShnZyxpM3QsMTc1Nik7RCgxNzU3LDEsZnIsTGllKSxoLkNkPWZ1bmN0aW9uKHQpe1ozbih0aGlzLmEsbCh0LDQyKSl9LEkoZ2csczN0LDE3NTcpLEQoMTg1NCwxLHt9LF9zKSxoLmRmPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihyPW5ldyBHKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjApLG4uYy4kYigpO2ZvcihvPW5ldyBHKHQuYS5iKTtvLmE8by5jLmMubGVuZ3RoOylmb3IoYT1sKHJlKG8pLDYwKSxnPW5ldyBHKHQuYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksNjApLGEhPWYmJihhLmEmJmEuYT09Zi5hfHwoVWcodC5kKT93PXQuZy5nZihhLGYpOnc9dC5nLmZmKGEsZiksKGYuZC5jPmEuZC5jfHxhLmQuYz09Zi5kLmMmJmEuZC5iPGYuZC5iKSYmUjVuKGYuZC5kK2YuZC5hK3csYS5kLmQpJiZqOGUoZi5kLmQsYS5kLmQrYS5kLmErdykmJmEuYy5GYyhmKSkpfSxJKGdnLCJRdWFkcmF0aWNDb25zdHJhaW50Q2FsY3VsYXRpb24iLDE4NTQpLEQoNTI5LDEsezUyOToxfSxCaWUpLGguYT0hMSxoLmI9ITEsaC5jPSExLGguZD0hMSxJKGdnLGEzdCw1MjkpLEQoODE3LDEse30sWDRlKSxoLmRmPWZ1bmN0aW9uKHQpe3RoaXMuYz10LFpOKHRoaXMsbmV3IGowKX0sSShnZyxvM3QsODE3KSxEKDE3ODQsMSx7NjkzOjF9LFdhdCksaC5iZj1mdW5jdGlvbih0KXtaOW4odGhpcyxsKHQsNDczKSl9LEkoZ2csYzN0LDE3ODQpLEQoMTc4NSwxLGlpLHRsKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGxwbihsKHQsNjApLGwobiw2MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZ2csdTN0LDE3ODUpLEQoNDczLDEsezQ3MzoxfSxTM2UpLGguYT0hMSxJKGdnLGwzdCw0NzMpLEQoMTc4NiwxLGlpLGRhKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGw4bihsKHQsNDczKSxsKG4sNDczKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShnZyxoM3QsMTc4NiksRCgxNzg3LDEsTGQsajApLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCw2MCksITB9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsNjApLCEwfSxJKGdnLCJTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yL2xhbWJkYSQxJFR5cGUiLDE3ODcpLEQoNDM2LDIyLHszOjEsMzQ6MSwyMjoxLDQzNjoxfSxfM2UpO3ZhciB4X2UsajBlLGtfZT1GcihtaGUsIkhpZ2hMZXZlbFNvcnRpbmdDcml0ZXJpb24iLDQzNixIcixqcG4saTBuKSxxNnQ7RCg0MzUsMjIsezM6MSwzNDoxLDIyOjEsNDM1OjF9LEEzZSk7dmFyIEVfZSwkMGUsVF9lPUZyKG1oZSwiTG93TGV2ZWxTb3J0aW5nQ3JpdGVyaW9uIiw0MzUsSHIsJHBuLHMwbiksSDZ0LEw2PWtzKE5jLCJJTGF5b3V0TWV0YURhdGFQcm92aWRlciIpO0QoODY0LDEsUGYsZXopLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBFZSksdmhlKSwiUG9seW9taW5vIFRyYXZlcnNhbCBTdHJhdGVneSIpLCJUcmF2ZXJzYWwgc3RyYXRlZ3kgZm9yIHRyeWluZyBkaWZmZXJlbnQgY2FuZGlkYXRlIHBvc2l0aW9ucyBmb3IgcG9seW9taW5vZXMuIiksRF9lKSwoZzIoKSxwcykpLCRfZSksdW4oKHIxKCksUG4pKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsYkVlKSx2aGUpLCJQb2x5b21pbm8gU2Vjb25kYXJ5IFNvcnRpbmcgQ3JpdGVyaW9uIiksIlBvc3NpYmxlIHNlY29uZGFyeSBzb3J0aW5nIGNyaXRlcmlhIGZvciB0aGUgcHJvY2Vzc2luZyBvcmRlciBvZiBwb2x5b21pbm9lcy4gVGhleSBhcmUgdXNlZCB3aGVuIHBvbHlvbWlub2VzIGFyZSBlcXVhbCBhY2NvcmRpbmcgdG8gdGhlIHByaW1hcnkgc29ydGluZyBjcml0ZXJpb24gSGlnaExldmVsU29ydGluZ0NyaXRlcmlvbi4iKSxMX2UpLHBzKSxUX2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsbUVlKSx2aGUpLCJQb2x5b21pbm8gUHJpbWFyeSBTb3J0aW5nIENyaXRlcmlvbiIpLCJQb3NzaWJsZSBwcmltYXJ5IHNvcnRpbmcgY3JpdGVyaWEgZm9yIHRoZSBwcm9jZXNzaW5nIG9yZGVyIG9mIHBvbHlvbWlub2VzLiIpLF9fZSkscHMpLGtfZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCx2RWUpLHZoZSksIkZpbGwgUG9seW9taW5vZXMiKSwiVXNlIHRoZSBQcm9maWxlIEZpbGwgYWxnb3JpdGhtIHRvIGZpbGwgcG9seW9taW5vZXMgdG8gcHJldmVudCBzbWFsbCBwb2x5b21pbm9lcyBmcm9tIGJlaW5nIHBsYWNlZCBpbnNpZGUgb2YgYmlnIHBvbHlvbWlub2VzIHdpdGggbGFyZ2UgaG9sZXMuIE1pZ2h0IGluY3JlYXNlIHBhY2tpbmcgYXJlYS4iKSwoSG4oKSwhMCkpLHlhKSxOcyksdW4oUG4pKSkpfTt2YXIgQ19lLFNfZSxfX2UsQV9lLExfZSxNX2UsRF9lO0kobWhlLCJQb2x5b21pbm9PcHRpb25zIiw4NjQpLEQoMjU3LDIyLHszOjEsMzQ6MSwyMjoxLDI1NzoxfSxMNSk7dmFyIElfZSxPX2UsTl9lLFBfZSxCX2UsRl9lLHowZSxSX2Usal9lLCRfZT1GcihtaGUsIlRyYXZlcnNhbFN0cmF0ZWd5IiwyNTcsSHIsRnduLGEwbiksVjZ0O0QoMjE4LDEsezIxODoxfSxwbSksaC5JYj1mdW5jdGlvbigpe3JldHVybiJORWRnZVtpZD0iK3RoaXMuYisiIHc9Iit0aGlzLmcrIiBkPSIrdGhpcy5hKyJdIn0saC5hPTEsaC5iPTAsaC5jPTAsaC5mPSExLGguZz0wO3ZhciBVNnQ9SShvTCwiTkVkZ2UiLDIxOCk7RCgxODIsMSx7fSxfZiksSShvTCwiTkVkZ2UvTkVkZ2VCdWlsZGVyIiwxODIpLEQoNjYyLDEse30samllKSxJKG9MLCJOR3JhcGgiLDY2MiksRCgxMjUsMSx7MTI1OjF9LE51dCksaC5jPS0xLGguZD0wLGguZT0wLGguaT0tMSxoLmo9ITE7dmFyIHpfZT1JKG9MLCJOTm9kZSIsMTI1KTtEKDgwOCwxLEt3dCxNd2UpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5MYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24odGhpcywxNikpfSxoLmpkPWZ1bmN0aW9uKHQpeyRtKHRoaXMsdCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMTYpfSxoLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbih0aGlzLDE2KSl9LGguYmQ9ZnVuY3Rpb24odCxuKXsrK3RoaXMuYixwdyh0aGlzLmEsdCxuKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gJHEodGhpcyx0KX0saC5jZD1mdW5jdGlvbih0LG4pe3JldHVybisrdGhpcy5iLFE3ZSh0aGlzLmEsdCxuKX0saC5HYz1mdW5jdGlvbih0KXtyZXR1cm4rK3RoaXMuYixyYSh0aGlzLmEsdCl9LGguJGI9ZnVuY3Rpb24oKXsrK3RoaXMuYixheSh0aGlzLmEuYywwKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gZ2ModGhpcy5hLHQsMCkhPS0xfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiBFTih0aGlzLmEsdCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIGp0KHRoaXMuYSx0KX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gZ2ModGhpcy5hLHQsMCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RoPT0wfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIGN4KG5ldyBHKHRoaXMuYSkpfSxoLmVkPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5mZD1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLmdkPWZ1bmN0aW9uKHQpe3JldHVybisrdGhpcy5iLHQyKHRoaXMuYSx0KX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gSXllKHRoaXMsdCl9LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4rK3RoaXMuYixyZih0aGlzLmEsdCxuKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYy5sZW5ndGh9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IFpwKHRoaXMuYSx0LG4pfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGVIKHRoaXMuYS5jKX0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gajEodGhpcy5hLHQpfSxoLmI9MCxJKG9MLCJOTm9kZS9DaGFuZ2VBd2FyZUFycmF5TGlzdCIsODA4KSxEKDI3NSwxLHt9LFNtKSxJKG9MLCJOTm9kZS9OTm9kZUJ1aWxkZXIiLDI3NSksRCgxNjk1LDEse30sTWwpLGguYT0hMSxoLmY9SWksaC5qPTAsSShvTCwiTmV0d29ya1NpbXBsZXgiLDE2OTUpLEQoMTMxNCwxLGZyLE1pZSksaC5DZD1mdW5jdGlvbih0KXtxdnQodGhpcy5hLGwodCw2OTUpLCEwLCExKX0sSShmM3QsIk5vZGVMYWJlbEFuZFNpemVDYWxjdWxhdG9yL2xhbWJkYSQwJFR5cGUiLDEzMTQpLEQoNTY1LDEse30sZV8pLGguYj0hMCxoLmM9ITAsaC5kPSEwLGguZT0hMCxJKGYzdCwiTm9kZU1hcmdpbkNhbGN1bGF0b3IiLDU2NSksRCgyMTcsMSx7MjE3OjF9KSxoLmo9ITEsaC5rPSExO3ZhciBHNnQ9SShldiwiQ2VsbCIsMjE3KTtEKDEyNywyMTcsezEyNzoxLDIxNzoxfSxGcnQpLGguamY9ZnVuY3Rpb24oKXtyZXR1cm4gdEgodGhpcyl9LGgua2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLm4sdGhpcy5hLmErdC5iK3QuY30sSShldiwiQXRvbWljQ2VsbCIsMTI3KSxEKDIzNywyMix7MzoxLDM0OjEsMjI6MSwyMzc6MX0sZ3NlKTt2YXIgR2MsJHUsS2MsczQ9RnIoZXYsIkNvbnRhaW5lckFyZWEiLDIzNyxIcixCMm4sbzBuKSxLNnQ7RCgzMzYsMjE3LGQzdCksSShldiwiQ29udGFpbmVyQ2VsbCIsMzM2KSxEKDE1MzgsMzM2LGQzdCxfMXQpLGguamY9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD0wLHRoaXMuZT90aGlzLmI/dD10aGlzLmIuYjp0aGlzLmFbMV1bMV0mJih0PXRoaXMuYVsxXVsxXS5qZigpKTp0PUU4ZSh0aGlzLEhkdCh0aGlzLCEwKSksdD4wP3QrdGhpcy5uLmQrdGhpcy5uLmE6MH0saC5rZj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG87aWYobz0wLHRoaXMuZSl0aGlzLmI/bz10aGlzLmIuYTp0aGlzLmFbMV1bMV0mJihvPXRoaXMuYVsxXVsxXS5rZigpKTtlbHNlIGlmKHRoaXMuZylvPUU4ZSh0aGlzLEV1ZSh0aGlzLG51bGwsITApKTtlbHNlIGZvcihuPSh0MSgpLGhlKGxlKHM0LDEpLGl0LDIzNywwLFtHYywkdSxLY10pKSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxvPWIuTWF0aC5tYXgobyxFOGUodGhpcyxFdWUodGhpcyx0LCEwKSkpO3JldHVybiBvPjA/byt0aGlzLm4uYit0aGlzLm4uYzowfSxoLmxmPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbztpZih0aGlzLmcpZm9yKHQ9RXVlKHRoaXMsbnVsbCwhMSkscj0odDEoKSxoZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKSksYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sa2J0KHRoaXMsbix0KTtlbHNlIGZvcihyPSh0MSgpLGhlKGxlKHM0LDEpLGl0LDIzNywwLFtHYywkdSxLY10pKSxhPTAsbz1yLmxlbmd0aDthPG87KythKW49clthXSx0PUV1ZSh0aGlzLG4sITEpLGtidCh0aGlzLG4sdCl9LGgubWY9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYTtuPXRoaXMuaSx0PXRoaXMubixhPUhkdCh0aGlzLCExKSx4NmUodGhpcywodDEoKSxHYyksbi5kK3QuZCxhKSx4NmUodGhpcyxLYyxuLmQrbi5hLXQuYS1hWzJdLGEpLHI9bi5hLXQuZC10LmEsYVswXT4wJiYoYVswXSs9dGhpcy5kLHItPWFbMF0pLGFbMl0+MCYmKGFbMl0rPXRoaXMuZCxyLT1hWzJdKSx0aGlzLmMuYT1iLk1hdGgubWF4KDAsciksdGhpcy5jLmQ9bi5kK3QuZCsodGhpcy5jLmEtcikvMixhWzFdPWIuTWF0aC5tYXgoYVsxXSxyKSx4NmUodGhpcywkdSxuLmQrdC5kK2FbMF0tKGFbMV0tcikvMixhKX0saC5iPW51bGwsaC5kPTAsaC5lPSExLGguZj0hMSxoLmc9ITE7dmFyIHEwZT0wLGdLPTA7SShldiwiR3JpZENvbnRhaW5lckNlbGwiLDE1MzgpLEQoNDcxLDIyLHszOjEsMzQ6MSwyMjoxLDQ3MToxfSxwc2UpO3ZhciBCYixGZCx2MCxXNnQ9RnIoZXYsIkhvcml6b250YWxMYWJlbEFsaWdubWVudCIsNDcxLEhyLFAybixjMG4pLFk2dDtEKDMxNCwyMTcsezIxNzoxLDMxNDoxfSx1b3QseWh0LG5vdCksaC5qZj1mdW5jdGlvbigpe3JldHVybiBIaXQodGhpcyl9LGgua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gajRlKHRoaXMpfSxoLmE9MCxoLmM9ITE7dmFyIHZPbj1JKGV2LCJMYWJlbENlbGwiLDMxNCk7RCgyNTIsMzM2LHsyMTc6MSwzMzY6MSwyNTI6MX0sREEpLGguamY9ZnVuY3Rpb24oKXtyZXR1cm4gdFAodGhpcyl9LGgua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gblAodGhpcyl9LGgubGY9ZnVuY3Rpb24oKXtobGUodGhpcyl9LGgubWY9ZnVuY3Rpb24oKXtmbGUodGhpcyl9LGguYj0wLGguYz0wLGguZD0hMSxJKGV2LCJTdHJpcENvbnRhaW5lckNlbGwiLDI1MiksRCgxNjkxLDEsdGksWGMpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGN1bihsKHQsMjE3KSl9LEkoZXYsIlN0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMCRUeXBlIiwxNjkxKSxEKDE2OTIsMSx7fSxCYyksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDIxNykua2YoKX0sSShldiwiU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQxJFR5cGUiLDE2OTIpLEQoMTY5MywxLHRpLGphKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB1dW4obCh0LDIxNykpfSxJKGV2LCJTdHJpcENvbnRhaW5lckNlbGwvbGFtYmRhJDIkVHlwZSIsMTY5MyksRCgxNjk0LDEse30sT3UpLGguWWU9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwyMTcpLmpmKCl9LEkoZXYsIlN0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMyRUeXBlIiwxNjk0KSxEKDQ3MiwyMix7MzoxLDM0OjEsMjI6MSw0NzI6MX0sYnNlKTt2YXIgdzAsRmIsYTEsWDZ0PUZyKGV2LCJWZXJ0aWNhbExhYmVsQWxpZ25tZW50Iiw0NzIsSHIsTjJuLHUwbiksUTZ0O0QoODAwLDEse30semtlKSxoLmM9MCxoLmQ9MCxoLms9MCxoLnM9MCxoLnQ9MCxoLnY9ITEsaC53PTAsaC5EPSExLEkodEcsIk5vZGVDb250ZXh0Iiw4MDApLEQoMTUzNiwxLGlpLFNhKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRudChsKHQsNjQpLGwobiw2NCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodEcsIk5vZGVDb250ZXh0LzBtZXRob2RyZWYkY29tcGFyZVBvcnRTaWRlcyRUeXBlIiwxNTM2KSxEKDE1MzcsMSxpaSxQbyksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBSeG4obCh0LDExNyksbChuLDExNykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodEcsIk5vZGVDb250ZXh0LzFtZXRob2RyZWYkY29tcGFyZVBvcnRDb250ZXh0cyRUeXBlIiwxNTM3KSxEKDE2NCwyMix7MzoxLDM0OjEsMjI6MSwxNjQ6MX0sb2YpO3ZhciBKNnQsWjZ0LGU3dCx0N3Qsbjd0LHI3dCxpN3Qsczd0LGE3dCxvN3QsYzd0LHU3dCxsN3QsaDd0LGY3dCxkN3QsZzd0LHA3dCxiN3QsbTd0LHY3dCxIMGUsdzd0PUZyKHRHLCJOb2RlTGFiZWxMb2NhdGlvbiIsMTY0LEhyLGV1ZSxsMG4pLHk3dDtEKDExNywxLHsxMTc6MX0sYzJ0KSxoLmE9ITEsSSh0RywiUG9ydENvbnRleHQiLDExNyksRCgxNTQxLDEsZnIsRmMpLGguQ2Q9ZnVuY3Rpb24odCl7dlplKGwodCwzMTQpKX0sSShEUCxnM3QsMTU0MSksRCgxNTQyLDEsdGkseGEpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuISFsKHQsMTE3KS5jfSxJKERQLHAzdCwxNTQyKSxEKDE1NDMsMSxmcixCYSksaC5DZD1mdW5jdGlvbih0KXt2WmUobCh0LDExNykuYyl9LEkoRFAsIkxhYmVsUGxhY2VyL2xhbWJkYSQyJFR5cGUiLDE1NDMpO3ZhciBxX2U7RCgxNTQwLDEsZnIsZ2EpLGguQ2Q9ZnVuY3Rpb24odCl7cHkoKSx6Y24obCh0LDExNykpfSxJKERQLCJOb2RlTGFiZWxBbmRTaXplVXRpbGl0aWVzL2xhbWJkYSQwJFR5cGUiLDE1NDApLEQoODAxLDEsZnIsdjRlKSxoLkNkPWZ1bmN0aW9uKHQpe3Rsbih0aGlzLmIsdGhpcy5jLHRoaXMuYSxsKHQsMTg3KSl9LGguYT0hMSxoLmM9ITEsSShEUCwiTm9kZUxhYmVsQ2VsbENyZWF0b3IvbGFtYmRhJDAkVHlwZSIsODAxKSxEKDE1MzksMSxmcixEaWUpLGguQ2Q9ZnVuY3Rpb24odCl7VmNuKHRoaXMuYSxsKHQsMTg3KSl9LEkoRFAsIlBvcnRDb250ZXh0Q3JlYXRvci9sYW1iZGEkMCRUeXBlIiwxNTM5KTt2YXIgcEs7RCgxOTAyLDEse30sa2gpLEkodVQsIkdyZWVkeVJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIiLDE5MDIpLEQoMTkwMywxLGlpLGx1KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE9obihsKHQsMjI2KSxsKG4sMjI2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh1VCwiR3JlZWR5UmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci8wbWV0aG9kcmVmJGNvbXBhcmVCeVlDb29yZGluYXRlJFR5cGUiLDE5MDMpLEQoMTg0OSwxLHt9LHpRZSksaC5hPTUsaC5lPTAsSSh1VCwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3ZlciIsMTg0OSksRCgxODUwLDEsaWksbzUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTmhuKGwodCwyMjYpLGwobiwyMjYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHVULCJSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyLzBtZXRob2RyZWYkY29tcGFyZUxlZnRSZWN0YW5nbGVCb3JkZXJzJFR5cGUiLDE4NTApLEQoMTg1MiwxLGlpLFdoKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEVnbihsKHQsMjI2KSxsKG4sMjI2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh1VCwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci8xbWV0aG9kcmVmJGNvbXBhcmVSaWdodFJlY3RhbmdsZUJvcmRlcnMkVHlwZSIsMTg1MiksRCg0MTcsMjIsezM6MSwzNDoxLDIyOjEsNDE3OjF9LHVxKTt2YXIgckIsVjBlLFUwZSxpQix4N3Q9RnIodVQsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvT3ZlcmxhcFJlbW92YWxEaXJlY3Rpb24iLDQxNyxIcixZYm4saDBuKSxrN3Q7RCgyMjYsMSx7MjI2OjF9LERhZSksSSh1VCwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9SZWN0YW5nbGVOb2RlIiwyMjYpLEQoMTg1MSwxLGZyLElpZSksaC5DZD1mdW5jdGlvbih0KXtsN24odGhpcy5hLGwodCwyMjYpKX0sSSh1VCwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9sYW1iZGEkMSRUeXBlIiwxODUxKSxEKDEzMjMsMSxpaSxvZCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBNTG4obCh0LDE3NiksbChuLDE3NikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoTWQsIlBvbHlvbWlub0NvbXBhY3Rvci9Db3JuZXJDYXNlc0dyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMjMpLEQoMTMyNiwxLHt9LEdkKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzM0KS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEzMjYpLEQoMTMyNywxLHRpLGNkKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzMyKS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQxJFR5cGUiLDEzMjcpLEQoMTMyOCwxLHRpLEtkKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzMyKS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQyJFR5cGUiLDEzMjgpLEQoMTMyMSwxLGlpLCRnKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGFfbihsKHQsMTc2KSxsKG4sMTc2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShNZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uRGlyZWN0aW9uc0NvbXBhcmF0b3IiLDEzMjEpLEQoMTMyNCwxLHt9LGFzKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzM0KS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluTnVtT2ZFeHRlbnNpb25EaXJlY3Rpb25zQ29tcGFyYXRvci9sYW1iZGEkMCRUeXBlIiwxMzI0KSxEKDc4MSwxLGlpLHduKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHEzbihsKHQsMTc2KSxsKG4sMTc2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShNZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uc0NvbXBhcmF0b3IiLDc4MSksRCgxMzE5LDEsaWksWnIpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWHduKGwodCwzMzApLGwobiwzMzApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvciIsMTMxOSksRCgxMzIwLDEsaWksWmkpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTjZuKGwodCwzMzApLGwobiwzMzApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvcldpdGhTaGFwZSIsMTMyMCksRCgxMzIyLDEsaWksbnUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gX19uKGwodCwxNzYpLGwobiwxNzYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMjIpLEQoMTMyNSwxLHt9LHZ1KSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzM0KS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTMyNSksRCg3ODIsMSx7fSxMM2UpLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gemJuKHRoaXMsbCh0LDQyKSxsKG4sMTc2KSl9LEkoTWQsIlN1Y2Nlc3NvckNvbWJpbmF0aW9uIiw3ODIpLEQoNjQ5LDEse30sRGwpLGguVmU9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gckVuKChyPWwodCw0MiksbChuLDE3NikscikpfSxJKE1kLCJTdWNjZXNzb3JKaXR0ZXIiLDY0OSksRCg2NDgsMSx7fSxZaCksaC5WZT1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiBIQ24oKHI9bCh0LDQyKSxsKG4sMTc2KSxyKSl9LEkoTWQsIlN1Y2Nlc3NvckxpbmVCeUxpbmUiLDY0OCksRCg1NzMsMSx7fSx3MSksaC5WZT1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByVG4oKHI9bCh0LDQyKSxsKG4sMTc2KSxyKSl9LEkoTWQsIlN1Y2Nlc3Nvck1hbmhhdHRhbiIsNTczKSxEKDEzNDQsMSx7fSwkMCksaC5WZT1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiBkQ24oKHI9bCh0LDQyKSxsKG4sMTc2KSxyKSl9LEkoTWQsIlN1Y2Nlc3Nvck1heE5vcm1XaW5kaW5nSW5NYXRoUG9zU2Vuc2UiLDEzNDQpLEQoNDA5LDEse30sRTUpLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdTVlKHRoaXMsdCxuKX0saC5jPSExLGguZD0hMSxoLmU9ITEsaC5mPSExLEkoTWQsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMiLDQwOSksRCgxMzQ1LDEse30sV2kpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzMzQpLmF9LEkoTWQsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMvbGFtYmRhJDAkVHlwZSIsMTM0NSksRCgzMzIsMjIsezM6MSwzNDoxLDIyOjEsMzMyOjF9LGxxKSxoLmE9ITE7dmFyIHNCLGFCLG9CLGNCLEU3dD1GcihyRyxrRWUsMzMyLEhyLEtibixmMG4pLFQ3dDtEKDEzMTcsMSx7fSksaC5JYj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtmb3Iocj0iICIsdD1wdCgwKSxvPTA7bzx0aGlzLm87bysrKXIrPSIiK3QuYSx0PXB0KENydCh0LmEpKTtmb3Iocis9YApgLHQ9cHQoMCksZj0wO2Y8dGhpcy5wO2YrKyl7Zm9yKHIrPSIiK3QuYSx0PXB0KENydCh0LmEpKSxhPTA7YTx0aGlzLm87YSsrKW49bmNlKHRoaXMsYSxmKSxpdShuLDApPT0wP3IrPSJfIjppdShuLDEpPT0wP3IrPSJYIjpyKz0iMCI7cis9YApgfXJldHVybiB0ZihyLDAsci5sZW5ndGgtMSl9LGgubz0wLGgucD0wLEkockcsIlR3b0JpdEdyaWQiLDEzMTcpLEQoMzMwLDEzMTcsezMzMDoxfSxJOGUpLGguaj0wLGguaz0wLEkockcsIlBsYW5hckdyaWQiLDMzMCksRCgxNzYsMzMwLHszMzA6MSwxNzY6MX0pLGguZz0wLGguaT0wLEkockcsIlBvbHlvbWlubyIsMTc2KTt2YXIgd09uPWtzKElQLG0zdCk7RCgxMzcsMSxFRWUsQnMpLGgucWY9ZnVuY3Rpb24odCxuKXtyZXR1cm4gX04odGhpcyx0LG4pfSxoLm5mPWZ1bmN0aW9uKCl7cmV0dXJuIG9zdCh0aGlzKX0saC5vZj1mdW5jdGlvbih0KXtyZXR1cm4gUSh0aGlzLHQpfSxoLnBmPWZ1bmN0aW9uKHQpe3JldHVybiBucyh0aGlzLHQpfSxJKElQLCJNYXBQcm9wZXJ0eUhvbGRlciIsMTM3KSxEKDEzMTgsMTM3LEVFZSxsYnQpLEkockcsIlBvbHlvbWlub2VzIiwxMzE4KTt2YXIgQzd0PSExLFJMLEhfZTtEKDE4MjgsMSxmcixRYSksaC5DZD1mdW5jdGlvbih0KXtmdnQobCh0LDIyNSkpfSxJKEl4LCJEZXB0aEZpcnN0Q29tcGFjdGlvbi8wbWV0aG9kcmVmJGNvbXBhY3RUcmVlJFR5cGUiLDE4MjgpLEQoODI1LDEsZnIsTXopLGguQ2Q9ZnVuY3Rpb24odCl7VWduKHRoaXMuYSxsKHQsMjI1KSl9LEkoSXgsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQxJFR5cGUiLDgyNSksRCgxODI5LDEsZnIsYml0KSxoLkNkPWZ1bmN0aW9uKHQpe1c1bih0aGlzLmEsdGhpcy5iLHRoaXMuYyxsKHQsMjI1KSl9LEkoSXgsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQyJFR5cGUiLDE4MjkpO3ZhciBqTCxWX2U7RCg2OCwxLHs2ODoxfSxrb3QpLEkoSXgsIk5vZGUiLDY4KSxEKDEyMTQsMSx7fSx4bnQpLEkoSXgsIlNjYW5saW5lT3ZlcmxhcENoZWNrIiwxMjE0KSxEKDEyMTUsMSx7NjkzOjF9LFhhdCksaC5iZj1mdW5jdGlvbih0KXtFZm4odGhpcyxsKHQsNDUxKSl9LEkoSXgsIlNjYW5saW5lT3ZlcmxhcENoZWNrL092ZXJsYXBzU2NhbmxpbmVIYW5kbGVyIiwxMjE1KSxEKDEyMTYsMSxpaSxCaSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBENG4obCh0LDY4KSxsKG4sNjgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKEl4LCJTY2FubGluZU92ZXJsYXBDaGVjay9PdmVybGFwc1NjYW5saW5lSGFuZGxlci9sYW1iZGEkMCRUeXBlIiwxMjE2KSxEKDQ1MSwxLHs0NTE6MX0sTTNlKSxoLmE9ITEsSShJeCwiU2NhbmxpbmVPdmVybGFwQ2hlY2svVGltZXN0YW1wIiw0NTEpLEQoMTIxNywxLGlpLE51KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGg4bihsKHQsNDUxKSxsKG4sNDUxKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShJeCwiU2NhbmxpbmVPdmVybGFwQ2hlY2svbGFtYmRhJDAkVHlwZSIsMTIxNyksRCg1NTcsMSx7fSxPdCksSSh2M3QsIlNWR0ltYWdlIiw1NTcpLEQoMzM0LDEsezMzNDoxfSxtNGUpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hK0NvK3RoaXMuYitDbyt0aGlzLmMrIikifSxJKHYzdCwiVW5pcXVlVHJpcGxlIiwzMzQpLEQoMjA1LDEsdHYpLEkodjYsIkFic3RyYWN0TGF5b3V0UHJvdmlkZXIiLDIwNSksRCgxMTE0LDIwNSx0dixXMyksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmO3N3aXRjaChuLlVnKHczdCwxKSx0aGlzLmE9emUoR2UoYXQodCwoSUEoKSxYX2UpKSkpLFAxKHQsSzBlKSYmKG89ZWkoYXQodCxLMGUpKSxyPWlsZShoRSgpLG8pLHImJihhPWwoR08oci5mKSwyMDUpLGEucmYodCxuLmVoKDEpKSkpLGY9bmV3IHFjdCh0aGlzLmEpLHRoaXMuYj1hRG4oZix0KSxsKGF0KHQsKExjZSgpLEdfZSkpLDQ4OSkuZyl7Y2FzZSAwOmtFbihuZXcgS3QsdGhpcy5iKSxIaSh0LHZLLFEodGhpcy5iLHZLKSk7YnJlYWs7ZGVmYXVsdDpWZygpfXhEbihmKSxIaSh0LFdfZSx0aGlzLmIpLG4uVmcoKX0saC5hPTAsSSh5M3QsIkRpc0NvTGF5b3V0UHJvdmlkZXIiLDExMTQpLEQoMTIwOCwxLHt9LEt0KSxoLmM9ITEsaC5lPTAsaC5mPTAsSSh5M3QsIkRpc0NvUG9seW9taW5vQ29tcGFjdG9yIiwxMjA4KSxEKDU2NywxLHs1Njc6MX0sc3N0KSxoLmI9ITAsSShzRywiRENDb21wb25lbnQiLDU2NyksRCg0MDYsMjIsezM6MSwzNDoxLDIyOjEsNDA2OjF9LGhxKSxoLmE9ITE7dmFyIGJLLHVCLG1LLGxCLFM3dD1GcihzRywiRENEaXJlY3Rpb24iLDQwNixIcixXYm4sZDBuKSxfN3Q7RCgyNzIsMTM3LHszOjEsMjcyOjEsOTY6MSwxMzc6MX0sR3VlKSxJKHNHLCJEQ0VsZW1lbnQiLDI3MiksRCg0MDcsMSx7NDA3OjF9LG54ZSksaC5jPTAsSShzRywiRENFeHRlbnNpb24iLDQwNyksRCg3NjIsMTM3LEVFZSxHSmUpLEkoc0csIkRDR3JhcGgiLDc2MiksRCg0ODksMjIsezM6MSwzNDoxLDIyOjEsNDg5OjF9LGdydCk7dmFyIEcwZSxVX2U9RnIoU2hlLFRFZSw0ODksSHIsbnBuLGcwbiksQTd0O0QoODY1LDEsUGYsdHopLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LENFZSkseDN0KSwiQ29ubmVjdGVkIENvbXBvbmVudHMgQ29tcGFjdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgcGFja2luZyBkaWZmZXJlbnQgY29ubmVjdGVkIGNvbXBvbmVudHMgaW4gb3JkZXIgdG8gc2F2ZSBzcGFjZSBhbmQgZW5oYW5jZSByZWFkYWJpbGl0eSBvZiBhIGdyYXBoLiIpLEtfZSksKGcyKCkscHMpKSxVX2UpLHVuKChyMSgpLFBuKSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LFNFZSkseDN0KSwiQ29ubmVjdGVkIENvbXBvbmVudHMgTGF5b3V0IEFsZ29yaXRobSIpLCJBIGxheW91dCBhbGdvcml0aG0gdGhhdCBpcyB0byBiZSBhcHBsaWVkIHRvIGVhY2ggY29ubmVjdGVkIGNvbXBvbmVudCBiZWZvcmUgdGhlIGNvbXBvbmVudHMgdGhlbXNlbHZlcyBhcmUgY29tcGFjdGVkLiBJZiB1bnNwZWNpZmllZCwgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY29tcG9uZW50cycgbm9kZXMgYXJlIG5vdCBhbHRlcmVkLiIpLEo2KSx6dCksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxfRWUpLCJkZWJ1ZyIpLCJEQ0dyYXBoIiksIkFjY2VzcyB0byB0aGUgRENHcmFwaCBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIiksWDEpLHdhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LEFFZSksImRlYnVnIiksIkxpc3Qgb2YgUG9seW9taW5vZXMiKSwiQWNjZXNzIHRvIHRoZSBwb2x5b21pbm9lcyBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIiksWDEpLHdhKSx1bihQbikpKSksUW10KChuZXcgbnosdCkpfTt2YXIgTDd0LEdfZSxLX2UsTTd0LEQ3dDtJKFNoZSwiRGlzQ29NZXRhRGF0YVByb3ZpZGVyIiw4NjUpLEQoMTAxMCwxLFBmLG56KSxoLmhmPWZ1bmN0aW9uKHQpe1FtdCh0KX07dmFyIEk3dCxLMGUsTzd0LFdfZSx2SyxXMGUsWV9lLE43dCxQN3QsQjd0LEY3dCxYX2U7SShTaGUsIkRpc0NvT3B0aW9ucyIsMTAxMCksRCgxMDExLDEse30sejApLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgVzMsdH0saC50Zj1mdW5jdGlvbih0KXt9LEkoU2hlLCJEaXNDb09wdGlvbnMvRGlzY29GYWN0b3J5IiwxMDExKSxEKDU2OCwxNzYsezMzMDoxLDE3NjoxLDU2ODoxfSxHMnQpLGguYT0wLGguYj0wLGguYz0wLGguZD0wLEkoIm9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28uc3RydWN0dXJlcyIsIkRDUG9seW9taW5vIiw1NjgpO3ZhciBZMGUsWDBlLHdLO0QoMTI4NiwxLHRpLEJwKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBzeWUodCl9LEkodzYsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxMjg2KSxEKDEyODcsMSx7fSxZMyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gdHgoKSxjZyhsKHQsNzQpKX0sSSh3NiwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDEyODcpLEQoMTI4OCwxLHRpLCQ5KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB4ZG4obCh0LDc0KSl9LEkodzYsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxMjg4KSxEKDEyODksMSx7fSxjNSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gdHgoKSxFYihsKHQsNzQpKX0sSSh3NiwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQzJFR5cGUiLDEyODkpLEQoMTI5MCwxLHRpLEVoKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBrZG4obCh0LDc0KSl9LEkodzYsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkNCRUeXBlIiwxMjkwKSxEKDEyOTEsMSx0aSx5ayksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gcDJuKHRoaXMuYSxsKHQsNzQpKX0sSSh3NiwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQ1JFR5cGUiLDEyOTEpLEQoMTI5MiwxLHt9LFVJKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBQZ24odGhpcy5hLGwodCw3NCkpfSxJKHc2LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDYkVHlwZSIsMTI5MiksRCgxMjA1LDEse30scWN0KSxoLmE9MCxJKHc2LCJFbGtHcmFwaFRyYW5zZm9ybWVyIiwxMjA1KSxEKDEyMDYsMSx7fSx6ZyksaC5ZZD1mdW5jdGlvbih0LG4pe29Fbih0aGlzLGwodCwxNjcpLGwobiwyNzIpKX0sSSh3NiwiRWxrR3JhcGhUcmFuc2Zvcm1lci9PZmZzZXRBcHBsaWVyIiwxMjA2KSxEKDEyMDcsMSxmcix0XyksaC5DZD1mdW5jdGlvbih0KXttaG4odGhpcyxsKHQsOCkpfSxJKHc2LCJFbGtHcmFwaFRyYW5zZm9ybWVyL09mZnNldEFwcGxpZXIvT2ZmU2V0VG9DaGFpbkFwcGxpZXIiLDEyMDcpLEQoNzYwLDEse30sYm0pLEkoTWhlLExFZSw3NjApLEQoMTE5NSwxLGlpLHo5KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFlrbihsKHQsMjM1KSxsKG4sMjM1KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShNaGUsRTN0LDExOTUpLEQoMTE5NiwxLGZyLF9ldCksaC5DZD1mdW5jdGlvbih0KXtaMm4odGhpcy5iLHRoaXMuYSxsKHQsMjUwKSl9LEkoTWhlLE1FZSwxMTk2KSxEKDczOCwyMDUsdHYsRHdlKSxoLnJmPWZ1bmN0aW9uKHQsbil7VzJ0KHRoaXMsdCxuKX0sSShNaGUsIkZvcmNlTGF5b3V0UHJvdmlkZXIiLDczOCksRCgzMDksMTM3LHszOjEsMzA5OjEsOTY6MSwxMzc6MX0pLEkoT1AsIkZQYXJ0aWNsZSIsMzA5KSxEKDI1MCwzMDksezM6MSwyNTA6MSwzMDk6MSw5NjoxLDEzNzoxfSxWc3QpLGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5hPyh0PWdjKHRoaXMuYS5hLHRoaXMsMCksdD49MD8iYiIrdCsiWyIrQ29lKHRoaXMuYSkrIl0iOiJiWyIrQ29lKHRoaXMuYSkrIl0iKToiYl8iK2Z3KHRoaXMpfSxJKE9QLCJGQmVuZHBvaW50IiwyNTApLEQoMjkwLDEzNyx7MzoxLDI5MDoxLDk2OjEsMTM3OjF9LGpydCksaC5JYj1mdW5jdGlvbigpe3JldHVybiBDb2UodGhpcyl9LEkoT1AsIkZFZGdlIiwyOTApLEQoMjM1LDEzNyx7MzoxLDIzNToxLDk2OjEsMTM3OjF9LEtIKTt2YXIgeU9uPUkoT1AsIkZHcmFwaCIsMjM1KTtEKDQ1NCwzMDksezM6MSw0NTQ6MSwzMDk6MSw5NjoxLDEzNzoxfSx6Y3QpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPT1udWxsfHx0aGlzLmIubGVuZ3RoPT0wPyJsWyIrQ29lKHRoaXMuYSkrIl0iOiJsXyIrdGhpcy5ifSxJKE9QLCJGTGFiZWwiLDQ1NCksRCgxNTMsMzA5LHszOjEsMTUzOjEsMzA5OjEsOTY6MSwxMzc6MX0sd250KSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFg1ZSh0aGlzKX0saC5hPTAsSShPUCwiRk5vZGUiLDE1MyksRCgyMTAwLDEse30pLGgudmY9ZnVuY3Rpb24odCl7eWtlKHRoaXMsdCl9LGgud2Y9ZnVuY3Rpb24oKXtxZHQodGhpcyl9LGguZD0wLEkoREVlLCJBYnN0cmFjdEZvcmNlTW9kZWwiLDIxMDApLEQoNjQxLDIxMDAsezY0MToxfSxqZnQpLGgudWY9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZixnO3JldHVybiBwdnQodGhpcy5mLHQsbiksbz1tYShKYShuLmQpLHQuZCksZz1iLk1hdGguc3FydChvLmEqby5hK28uYipvLmIpLGE9Yi5NYXRoLm1heCgwLGctZUEodC5lKS8yLWVBKG4uZSkvMikscj1RcHQodGhpcy5lLHQsbikscj4wP2Y9LXlnbihhLHRoaXMuYykqcjpmPVlobihhLHRoaXMuYikqbChRKHQsKGIwKCkscXgpKSwxNykuYSxtZChvLGYvZyksb30saC52Zj1mdW5jdGlvbih0KXt5a2UodGhpcyx0KSx0aGlzLmE9bChRKHQsKGIwKCkseEspKSwxNykuYSx0aGlzLmM9emUoR2UoUSh0LGtLKSkpLHRoaXMuYj16ZShHZShRKHQsSjBlKSkpfSxoLnhmPWZ1bmN0aW9uKHQpe3JldHVybiB0PHRoaXMuYX0saC5hPTAsaC5iPTAsaC5jPTAsSShERWUsIkVhZGVzTW9kZWwiLDY0MSksRCg2NDIsMjEwMCx7NjQyOjF9LFJpdCksaC51Zj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGc7cmV0dXJuIHB2dCh0aGlzLmYsdCxuKSxvPW1hKEphKG4uZCksdC5kKSxnPWIuTWF0aC5zcXJ0KG8uYSpvLmErby5iKm8uYiksYT1iLk1hdGgubWF4KDAsZy1lQSh0LmUpLzItZUEobi5lKS8yKSxmPVhobihhLHRoaXMuYSkqbChRKHQsKGIwKCkscXgpKSwxNykuYSxyPVFwdCh0aGlzLmUsdCxuKSxyPjAmJihmLT1pdW4oYSx0aGlzLmEpKnIpLG1kKG8sZip0aGlzLmIvZyksb30saC52Zj1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoeWtlKHRoaXMsdCksdGhpcy5iPXplKEdlKFEodCwoYjAoKSxaMGUpKSkpLHRoaXMuYz10aGlzLmIvbChRKHQseEspLDE3KS5hLGE9dC5lLmMubGVuZ3RoLGY9MCxvPTAsdz1uZXcgRyh0LmUpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxNTMpLGYrPWcuZS5hLG8rPWcuZS5iO249ZipvLHI9emUoR2UoUSh0LGtLKSkpKkgxLHRoaXMuYT1iLk1hdGguc3FydChuLygyKmEpKSpyfSxoLndmPWZ1bmN0aW9uKCl7cWR0KHRoaXMpLHRoaXMuYi09dGhpcy5jfSxoLnhmPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmI+MH0saC5hPTAsaC5iPTAsaC5jPTAsSShERWUsIkZydWNodGVybWFuUmVpbmdvbGRNb2RlbCIsNjQyKSxEKDg2MCwxLFBmLEtTKSxoLmhmPWZ1bmN0aW9uKHQpe3NuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxhRyksIiIpLCJGb3JjZSBNb2RlbCIpLCJEZXRlcm1pbmVzIHRoZSBtb2RlbCBmb3IgZm9yY2UgY2FsY3VsYXRpb24uIiksUV9lKSwoZzIoKSxwcykpLEpfZSksdW4oKHIxKCksUG4pKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsSUVlKSwiIiksIkl0ZXJhdGlvbnMiKSwiVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9uIHRoZSBmb3JjZSBtb2RlbC4iKSxwdCgzMDApKSxUYykscm8pLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsT0VlKSwiIiksIlJlcHVsc2l2ZSBQb3dlciIpLCJEZXRlcm1pbmVzIGhvdyBtYW55IGJlbmQgcG9pbnRzIGFyZSBhZGRlZCB0byB0aGUgZWRnZTsgc3VjaCBiZW5kIHBvaW50cyBhcmUgcmVnYXJkZWQgYXMgcmVwZWxsaW5nIHBhcnRpY2xlcyBpbiB0aGUgZm9yY2UgbW9kZWwiKSxwdCgwKSksVGMpLHJvKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LERoZSksIiIpLCJGUiBUZW1wZXJhdHVyZSIpLCJUaGUgdGVtcGVyYXR1cmUgaXMgdXNlZCBhcyBhIHNjYWxpbmcgZmFjdG9yIGZvciBwYXJ0aWNsZSBkaXNwbGFjZW1lbnRzLiIpLERkKSxmbyksdGEpLHVuKFBuKSkpKSxRcyh0LERoZSxhRyxWN3QpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxJaGUpLCIiKSwiRWFkZXMgUmVwdWxzaW9uIiksIkZhY3RvciBmb3IgcmVwdWxzaXZlIGZvcmNlcyBpbiBFYWRlcycgbW9kZWwuIiksNSksZm8pLHRhKSx1bihQbikpKSksUXModCxJaGUsYUcsejd0KSxyd3QoKG5ldyBXUyx0KSl9O3ZhciBSN3Qsajd0LFFfZSwkN3Qsejd0LHE3dCxIN3QsVjd0O0kodUwsIkZvcmNlTWV0YURhdGFQcm92aWRlciIsODYwKSxEKDQzMiwyMix7MzoxLDM0OjEsMjI6MSw0MzI6MX0sRDNlKTt2YXIgUTBlLHlLLEpfZT1Gcih1TCwiRm9yY2VNb2RlbFN0cmF0ZWd5Iiw0MzIsSHIsenBuLHAwbiksVTd0O0QoYjIsMSxQZixXUyksaC5oZj1mdW5jdGlvbih0KXtyd3QodCl9O3ZhciBHN3QsSzd0LFpfZSx4SyxlQWUsVzd0LFk3dCxYN3QsUTd0LHRBZSxKN3QsbkFlLHJBZSxaN3QscXgsZTh0LEowZSxpQWUsdDh0LG44dCxrSyxaMGUscjh0LGk4dCxzOHQsc0FlLGE4dDtJKHVMLCJGb3JjZU9wdGlvbnMiLGIyKSxEKDEwMDEsMSx7fSxsZCksaC5zZj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PW5ldyBEd2UsdH0saC50Zj1mdW5jdGlvbih0KXt9LEkodUwsIkZvcmNlT3B0aW9ucy9Gb3JjZUZhY3RvcnkiLDEwMDEpO3ZhciBoQiwkTCxIeCxFSztEKDg2MSwxLFBmLHJ6KSxoLmhmPWZ1bmN0aW9uKHQpe3NuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxQRWUpLCIiKSwiRml4ZWQgUG9zaXRpb24iKSwiUHJldmVudCB0aGF0IHRoZSBub2RlIGlzIG1vdmVkIGJ5IHRoZSBsYXlvdXQgYWxnb3JpdGhtLiIpLChIbigpLCExKSksKGcyKCkseWEpKSxOcyksdW4oKHIxKCksaGEpKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsQkVlKSwiIiksIkRlc2lyZWQgRWRnZSBMZW5ndGgiKSwiRWl0aGVyIHNwZWNpZmllZCBmb3IgcGFyZW50IG5vZGVzIG9yIGZvciBpbmRpdmlkdWFsIGVkZ2VzLCB3aGVyZSB0aGUgbGF0dGVyIHRha2VzIGhpZ2hlciBwcmVjZWRlbmNlLiIpLDEwMCksZm8pLHRhKSxycyhQbixoZShsZSh4ZywxKSxpdCwxNzAsMCxbemRdKSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEZFZSksIiIpLCJMYXlvdXQgRGltZW5zaW9uIiksIkRpbWVuc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIHRvIGJlIGFsdGVyZWQgZHVyaW5nIGxheW91dC4iKSxhQWUpLHBzKSxkQWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsUkVlKSwiIiksIlN0cmVzcyBFcHNpbG9uIiksIlRlcm1pbmF0aW9uIGNyaXRlcmlvbiBmb3IgdGhlIGl0ZXJhdGl2ZSBwcm9jZXNzLiIpLERkKSxmbyksdGEpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsakVlKSwiIiksIkl0ZXJhdGlvbiBMaW1pdCIpLCJNYXhpbXVtIG51bWJlciBvZiBwZXJmb3JtZWQgaXRlcmF0aW9ucy4gVGFrZXMgaGlnaGVyIHByZWNlZGVuY2UgdGhhbiAnZXBzaWxvbicuIikscHQoSWkpKSxUYykscm8pLHVuKFBuKSkpKSxEdnQoKG5ldyBpeix0KSl9O3ZhciBvOHQsYzh0LGFBZSx1OHQsbDh0LGg4dDtJKHVMLCJTdHJlc3NNZXRhRGF0YVByb3ZpZGVyIiw4NjEpLEQoMTAwNCwxLFBmLGl6KSxoLmhmPWZ1bmN0aW9uKHQpe0R2dCh0KX07dmFyIFRLLG9BZSxjQWUsdUFlLGxBZSxoQWUsZjh0LGQ4dCxnOHQscDh0LGZBZSxiOHQ7SSh1TCwiU3RyZXNzT3B0aW9ucyIsMTAwNCksRCgxMDA1LDEse30seTEpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgJHJ0LHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKHVMLCJTdHJlc3NPcHRpb25zL1N0cmVzc0ZhY3RvcnkiLDEwMDUpLEQoMTExMCwyMDUsdHYsJHJ0KSxoLnJmPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobi5VZyhBM3QsMSksUnQoQnQoYXQodCwoVk4oKSxsQWUpKSkpP1J0KEJ0KGF0KHQsZkFlKSkpfHxLTygocj1uZXcgWXYoKGF3KCksbmV3IEp2KHQpKSkscikpOlcydChuZXcgRHdlLHQsbi5laCgxKSksbz11MHQodCksYT0kbXQodGhpcy5hLG8pLGc9YS5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSwyMzUpLCEoZi5lLmMubGVuZ3RoPD0xKSYmKF9Mbih0aGlzLmIsZiksSkVuKHRoaXMuYiksVnUoZi5kLG5ldyB1ZCkpO289ZXd0KGEpLGx3dChvKSxuLlZnKCl9LEkodUcsIlN0cmVzc0xheW91dFByb3ZpZGVyIiwxMTEwKSxEKDExMTEsMSxmcix1ZCksaC5DZD1mdW5jdGlvbih0KXtBa2UobCh0LDQ1NCkpfSxJKHVHLCJTdHJlc3NMYXlvdXRQcm92aWRlci9sYW1iZGEkMCRUeXBlIiwxMTExKSxEKDEwMDIsMSx7fSxCUWUpLGguYz0wLGguZT0wLGguZz0wLEkodUcsIlN0cmVzc01ham9yaXphdGlvbiIsMTAwMiksRCgzOTEsMjIsezM6MSwzNDoxLDIyOjEsMzkxOjF9LG1zZSk7dmFyIGUxZSx0MWUsbjFlLGRBZT1Gcih1RywiU3RyZXNzTWFqb3JpemF0aW9uL0RpbWVuc2lvbiIsMzkxLEhyLEYybixiMG4pLG04dDtEKDEwMDMsMSxpaSxEeiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBWZm4odGhpcy5hLGwodCwxNTMpLGwobiwxNTMpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHVHLCJTdHJlc3NNYWpvcml6YXRpb24vbGFtYmRhJDAkVHlwZSIsMTAwMyksRCgxMTkyLDEse30sR290KSxJKEJ4LCJFbGtMYXllcmVkIiwxMTkyKSxEKDExOTMsMSxmcixJeiksaC5DZD1mdW5jdGlvbih0KXtfa24odGhpcy5hLGwodCwzNikpfSxJKEJ4LCJFbGtMYXllcmVkL2xhbWJkYSQwJFR5cGUiLDExOTMpLEQoMTE5NCwxLGZyLE9pZSksaC5DZD1mdW5jdGlvbih0KXtVZm4odGhpcy5hLGwodCwzNikpfSxJKEJ4LCJFbGtMYXllcmVkL2xhbWJkYSQxJFR5cGUiLDExOTQpLEQoMTI4MSwxLHt9LExudCk7dmFyIHY4dCx3OHQseTh0O0koQngsIkdyYXBoQ29uZmlndXJhdG9yIiwxMjgxKSxEKDc3MCwxLGZyLHFwKSxoLkNkPWZ1bmN0aW9uKHQpe3RwdCh0aGlzLmEsbCh0LDEwKSl9LEkoQngsIkdyYXBoQ29uZmlndXJhdG9yL2xhbWJkYSQwJFR5cGUiLDc3MCksRCg3NzEsMSx7fSx1NSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbXhlKCksbmV3IGJuKG51bGwsbmV3IGtuKGwodCwzMCkuYSwxNikpfSxJKEJ4LCJHcmFwaENvbmZpZ3VyYXRvci9sYW1iZGEkMSRUeXBlIiw3NzEpLEQoNzcyLDEsZnIsbl8pLGguQ2Q9ZnVuY3Rpb24odCl7dHB0KHRoaXMuYSxsKHQsMTApKX0sSShCeCwiR3JhcGhDb25maWd1cmF0b3IvbGFtYmRhJDIkVHlwZSIsNzcyKSxEKDExMDksMjA1LHR2LHFRZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByO3I9b0xuKG5ldyBWUWUsdCkscWUoYXQodCwoTnQoKSxwNCkpKT09PXFlKChycCgpLEEyKSk/ajRuKHRoaXMuYSxyLG4pOldFbih0aGlzLmEscixuKSxuLiRnKCl8fEt2dChuZXcgYjgscil9LEkoQngsIkxheWVyZWRMYXlvdXRQcm92aWRlciIsMTEwOSksRCgzNjcsMjIsezM6MSwzNDoxLDIyOjEsMzY3OjF9LG9PKTt2YXIgeTAsdmcsYnUsX3UsbWMsZ0FlPUZyKEJ4LCJMYXllcmVkUGhhc2VzIiwzNjcsSHIsem1uLG0wbikseDh0O0QoMTcxNywxLHt9LHJmdCksaC5pPTA7dmFyIGs4dDtJKGpQLCJDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lciIsMTcxNyk7dmFyIEU4dDtEKDE3MTgsMSx7fSxtbSksaC55Zj1mdW5jdGlvbih0LG4pe3JldHVybiBiLk1hdGgubWluKHQuYSE9bnVsbD96ZSh0LmEpOnQuYy5pLG4uYSE9bnVsbD96ZShuLmEpOm4uYy5pKX0saC56Zj1mdW5jdGlvbih0LG4pe3JldHVybiBiLk1hdGgubWluKHQuYSE9bnVsbD96ZSh0LmEpOnQuYy5pLG4uYSE9bnVsbD96ZShuLmEpOm4uYy5pKX0sSShqUCwiQ29tcG9uZW50c1RvQ0dyYXBoVHJhbnNmb3JtZXIvMSIsMTcxOCksRCg4NiwxLHs4NjoxfSksaC5pPTAsaC5rPSEwLGgubz1pYTt2YXIgcjFlPUkoZEwsIkNOb2RlIiw4Nik7RCg0NzAsODYsezQ3MDoxLDg2OjF9LFB5ZSxVOGUpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iIn0sSShqUCwiQ29tcG9uZW50c1RvQ0dyYXBoVHJhbnNmb3JtZXIvQ1JlY3ROb2RlIiw0NzApLEQoMTY4OCwxLHt9LHE5KTt2YXIgaTFlLHMxZTtJKGpQLCJPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uIiwxNjg4KSxEKDE2ODksMSx7fSxWdiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gQTJuKGwodCw0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShqUCwiT25lRGltZW5zaW9uYWxDb21wb25lbnRzQ29tcGFjdGlvbi9sYW1iZGEkMCRUeXBlIiwxNjg5KSxEKDE2OTAsMSx7fSxZNyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gejRuKGwodCw0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShqUCwiT25lRGltZW5zaW9uYWxDb21wb25lbnRzQ29tcGFjdGlvbi9sYW1iZGEkMSRUeXBlIiwxNjkwKSxEKDE3MjAsMSx7fSxac3QpLEkoZEwsIkNHcmFwaCIsMTcyMCksRCgxOTQsMSx7MTk0OjF9LFFjZSksaC5iPTAsaC5jPTAsaC5lPTAsaC5nPSEwLGguaT1pYSxJKGRMLCJDR3JvdXAiLDE5NCksRCgxNzE5LDEse30sRzIpLGgueWY9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYi5NYXRoLm1heCh0LmEhPW51bGw/emUodC5hKTp0LmMuaSxuLmEhPW51bGw/emUobi5hKTpuLmMuaSl9LGguemY9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYi5NYXRoLm1heCh0LmEhPW51bGw/emUodC5hKTp0LmMuaSxuLmEhPW51bGw/emUobi5hKTpuLmMuaSl9LEkoZEwsdDN0LDE3MTkpLEQoMTcyMSwxLHt9LFpwdCksaC5kPSExO3ZhciBUOHQsYTFlPUkoZEwsaTN0LDE3MjEpO0QoMTcyMiwxLHt9LFg3KSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB2M2UoKSxIbigpLGwobCh0LDQyKS5hLDg2KS5kLmUhPTB9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKGRMLHMzdCwxNzIyKSxEKDgzMywxLHt9LEc0ZSksaC5hPSExLGguYj0hMSxoLmM9ITEsaC5kPSExLEkoZEwsYTN0LDgzMyksRCgxODk4LDEse30scHN0KSxJKGxHLG8zdCwxODk4KTt2YXIgZkI9a3MocnYsWnd0KTtEKDE4OTksMSx7MzgyOjF9LFlhdCksaC5iZj1mdW5jdGlvbih0KXtuU24odGhpcyxsKHQsNDc2KSl9LEkobEcsYzN0LDE4OTkpLEQoTGIsMSxpaSxsNSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBocG4obCh0LDg2KSxsKG4sODYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGxHLHUzdCxMYiksRCg0NzYsMSx7NDc2OjF9LE8zZSksaC5hPSExLEkobEcsbDN0LDQ3NiksRCgxOTAxLDEsaWksWDMpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZjhuKGwodCw0NzYpLGwobiw0NzYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGxHLGgzdCwxOTAxKSxEKDE0OCwxLHsxNDg6MX0sSWssTDRlKSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PT1udWxsfHx4T24hPWJoKHQpPyExOihuPWwodCwxNDgpLEpjKHRoaXMuYyxuLmMpJiZKYyh0aGlzLmQsbi5kKSl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gTU4oaGUobGUod2EsMSksUm4sMSw1LFt0aGlzLmMsdGhpcy5kXSkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK3RoaXMuYytDbyt0aGlzLmQrKHRoaXMuYT8iY3giOiIiKSt0aGlzLmIrIikifSxoLmE9ITAsaC5jPTAsaC5kPTA7dmFyIHhPbj1JKHJ2LCJQb2ludCIsMTQ4KTtEKDQxNiwyMix7MzoxLDM0OjEsMjI6MSw0MTY6MX0sZnEpO3ZhciBzMyxhNCxNNixvNCxDOHQ9RnIocnYsIlBvaW50L1F1YWRyYW50Iiw0MTYsSHIsWGJuLHYwbiksUzh0O0QoMTcwOCwxLHt9LCRRZSksaC5iPW51bGwsaC5jPW51bGwsaC5kPW51bGwsaC5lPW51bGwsaC5mPW51bGw7dmFyIF84dCxBOHQsTDh0LE04dCxEOHQ7SShydiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsIiwxNzA4KSxEKDU4MywxLHszODI6MX0sblUpLGguYmY9ZnVuY3Rpb24odCl7JHZuKHRoaXMsbCh0LDE0OCkpfSxoLmI9MDt2YXIgcEFlO0kocnYsIlJlY3RpbGluZWFyQ29udmV4SHVsbC9NYXhpbWFsRWxlbWVudHNFdmVudEhhbmRsZXIiLDU4MyksRCgxNzEwLDEsaWksRnApLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnBuKEdlKHQpLEdlKG4pKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvTWF4aW1hbEVsZW1lbnRzRXZlbnRIYW5kbGVyL2xhbWJkYSQwJFR5cGUiLDE3MTApLEQoMTcwOSwxLHszODI6MX0sd2h0KSxoLmJmPWZ1bmN0aW9uKHQpe21Dbih0aGlzLGwodCwxNDgpKX0saC5hPTAsaC5iPW51bGwsaC5jPW51bGwsaC5kPW51bGwsaC5lPW51bGwsSShydiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsL1JlY3RhbmdsZUV2ZW50SGFuZGxlciIsMTcwOSksRCgxNzExLDEsaWksbkkpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4geWJuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDAkVHlwZSIsMTcxMSksRCgxNzEyLDEsaWksJEopLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4geGJuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDEkVHlwZSIsMTcxMiksRCgxNzEzLDEsaWksdm0pLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gd2JuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDIkVHlwZSIsMTcxMyksRCgxNzE0LDEsaWksaHUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4ga2JuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDMkVHlwZSIsMTcxNCksRCgxNzE1LDEsaWksekopLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWnhuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDQkVHlwZSIsMTcxNSksRCgxNzE2LDEse30sVG90KSxJKHJ2LCJTY2FubGluZSIsMTcxNiksRCgyMTA0LDEse30pLEkoVjEsIkFic3RyYWN0R3JhcGhQbGFjZXIiLDIxMDQpLEQoMzM1LDEsezMzNToxfSxocnQpLGguRmY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuR2YodCk/KHhuKHRoaXMuYixsKFEodCwoZnQoKSxwcCkpLDIxKSx0KSwhMCk6ITF9LGguR2Y9ZnVuY3Rpb24odCl7dmFyIG4scixhLG87Zm9yKG49bChRKHQsKGZ0KCkscHApKSwyMSksbz1sKCRpKFhpLG4pLDIxKSxhPW8uS2MoKTthLk9iKCk7KWlmKHI9bChhLlBiKCksMjEpLCFsKCRpKHRoaXMuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtyZXR1cm4hMH07dmFyIFhpO0koVjEsIkNvbXBvbmVudEdyb3VwIiwzMzUpLEQoNzc5LDIxMDQse30sTndlKSxoLkhmPWZ1bmN0aW9uKHQpe3ZhciBuLHI7Zm9yKHI9bmV3IEcodGhpcy5hKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPWwocmUociksMzM1KSxuLkZmKHQpKXJldHVybjt2dCh0aGlzLmEsbmV3IGhydCh0KSl9LGguRWY9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtpZih0aGlzLmEuYy5sZW5ndGg9MCxuLmEuYy5sZW5ndGg9MCx0LmRjKCkpe24uZi5hPTAsbi5mLmI9MDtyZXR1cm59Zm9yKGc9bCh0LlhiKDApLDM2KSxwYyhuLGcpLG89dC5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwzNiksdGhpcy5IZihhKTtmb3IoSj1uZXcgcWEsZj16ZShHZShRKGcsKE50KCksU0IpKSkpLEM9bmV3IEcodGhpcy5hKTtDLmE8Qy5jLmMubGVuZ3RoOyl3PWwocmUoQyksMzM1KSxMPWh3dCh3LGYpLG4yKHZIKHcuYiksSi5hLEouYiksSi5hKz1MLmEsSi5iKz1MLmI7aWYobi5mLmE9Si5hLWYsbi5mLmI9Si5iLWYsUnQoQnQoUShnLHVXKSkpJiZxZShRKGcsYnApKT09PXFlKChpcCgpLGlDKSkpe2ZvcihWPXQuS2MoKTtWLk9iKCk7KUI9bChWLlBiKCksMzYpLEtFKEIsQi5jLmEsQi5jLmIpO2ZvcihyPW5ldyBvUyxLa2Uocix0LGYpLHo9dC5LYygpO3ouT2IoKTspQj1sKHouUGIoKSwzNiksT2koWTAoQi5jKSxyLmUpO09pKFkwKG4uZiksci5hKX1mb3IoRT1uZXcgRyh0aGlzLmEpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwzMzUpLEY2ZShuLHZIKHcuYikpfSxJKFYxLCJDb21wb25lbnRHcm91cEdyYXBoUGxhY2VyIiw3NzkpLEQoMTMxMiw3Nzkse30sWlFlKSxoLkhmPWZ1bmN0aW9uKHQpe24xdCh0aGlzLHQpfSxoLkVmPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7aWYodGhpcy5hLmMubGVuZ3RoPTAsbi5hLmMubGVuZ3RoPTAsdC5kYygpKXtuLmYuYT0wLG4uZi5iPTA7cmV0dXJufWZvcihnPWwodC5YYigwKSwzNikscGMobixnKSxvPXQuS2MoKTtvLk9iKCk7KWE9bChvLlBiKCksMzYpLG4xdCh0aGlzLGEpO2ZvcigkZT1uZXcgcWEsTWU9bmV3IHFhLHRlPW5ldyBxYSxKPW5ldyBxYSxmPXplKEdlKFEoZywoTnQoKSxTQikpKSksQz1uZXcgRyh0aGlzLmEpO0MuYTxDLmMuYy5sZW5ndGg7KXtpZih3PWwocmUoQyksMzM1KSxVZyhsKFEobiwocGkoKSx4dikpLDg4KSkpe2Zvcih0ZS5hPSRlLmEsVGU9bmV3IGNfKFpfKFZhZSh3LmIpLmEpLmEua2MoKSk7VGUuYi5PYigpOylpZihmZT1sKHNxKFRlLmIuUGIoKSksMjEpLGZlLkhjKChDdCgpLFFuKSkpe3RlLmE9TWUuYTticmVha319ZWxzZSBpZihCNShsKFEobix4diksODgpKSl7Zm9yKHRlLmI9JGUuYixUZT1uZXcgY18oWl8oVmFlKHcuYikuYSkuYS5rYygpKTtUZS5iLk9iKCk7KWlmKGZlPWwoc3EoVGUuYi5QYigpKSwyMSksZmUuSGMoKEN0KCksZXIpKSl7dGUuYj1NZS5iO2JyZWFrfX1pZihMPWh3dChsKHcsNTc5KSxmKSxuMih2SCh3LmIpLHRlLmEsdGUuYiksVWcobChRKG4seHYpLDg4KSkpe2ZvcihNZS5hPXRlLmErTC5hLEouYT1iLk1hdGgubWF4KEouYSxNZS5hKSxUZT1uZXcgY18oWl8oVmFlKHcuYikuYSkuYS5rYygpKTtUZS5iLk9iKCk7KWlmKGZlPWwoc3EoVGUuYi5QYigpKSwyMSksZmUuSGMoKEN0KCksRHIpKSl7JGUuYT10ZS5hK0wuYTticmVha31NZS5iPXRlLmIrTC5iLHRlLmI9TWUuYixKLmI9Yi5NYXRoLm1heChKLmIsdGUuYil9ZWxzZSBpZihCNShsKFEobix4diksODgpKSl7Zm9yKE1lLmI9dGUuYitMLmIsSi5iPWIuTWF0aC5tYXgoSi5iLE1lLmIpLFRlPW5ldyBjXyhaXyhWYWUody5iKS5hKS5hLmtjKCkpO1RlLmIuT2IoKTspaWYoZmU9bChzcShUZS5iLlBiKCkpLDIxKSxmZS5IYygoQ3QoKSxhcikpKXskZS5iPXRlLmIrTC5iO2JyZWFrfU1lLmE9dGUuYStMLmEsdGUuYT1NZS5hLEouYT1iLk1hdGgubWF4KEouYSx0ZS5hKX19aWYobi5mLmE9Si5hLWYsbi5mLmI9Si5iLWYsUnQoQnQoUShnLHVXKSkpJiZxZShRKGcsYnApKT09PXFlKChpcCgpLGlDKSkpe2ZvcihWPXQuS2MoKTtWLk9iKCk7KUI9bChWLlBiKCksMzYpLEtFKEIsQi5jLmEsQi5jLmIpO2ZvcihyPW5ldyBvUyxLa2Uocix0LGYpLHo9dC5LYygpO3ouT2IoKTspQj1sKHouUGIoKSwzNiksT2koWTAoQi5jKSxyLmUpO09pKFkwKG4uZiksci5hKX1mb3IoRT1uZXcgRyh0aGlzLmEpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwzMzUpLEY2ZShuLHZIKHcuYikpfSxJKFYxLCJDb21wb25lbnRHcm91cE1vZGVsT3JkZXJHcmFwaFBsYWNlciIsMTMxMiksRCgzODksMjIsezM6MSwzNDoxLDIyOjEsMzg5OjF9LGRxKTt2YXIgbzFlLGJBZSxjMWUsYzQsbUFlPUZyKFYxLCJDb21wb25lbnRPcmRlcmluZ1N0cmF0ZWd5IiwzODksSHIsVWJuLHcwbiksSTh0O0QoNjU5LDEse30sb1MpLEkoVjEsIkNvbXBvbmVudHNDb21wYWN0b3IiLDY1OSksRCgxNTMzLDEzLFV3dCx4dXQpLGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIFJBKHRoaXMsbCh0LDE0OCkpfSxJKFYxLCJDb21wb25lbnRzQ29tcGFjdG9yL0h1bGxwb2ludHMiLDE1MzMpLEQoMTUzMCwxLHs4NTU6MX0seGR0KSxoLmE9ITEsSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbENvbXBvbmVudCIsMTUzMCksRCgxNTI5LDEsaGcsUlFlKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEcodGhpcy5hKX0sSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbENvbm5lY3RlZENvbXBvbmVudHMiLDE1MjkpLEQoMTUzMiwxLHs2MDI6MX0sbjJ0KSxoLkJmPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGguQ2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLkFmPWZ1bmN0aW9uKCl7cmV0dXJuIHR1ZSh0aGlzLmQpfSxoLkRmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbEV4dGVybmFsRXh0ZW5zaW9uIiwxNTMyKSxEKDE1MzEsMSx7NjAyOjF9LEhRZSksaC5DZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguQWY9ZnVuY3Rpb24oKXtyZXR1cm4gdHVlKHRoaXMuZCl9LGguQmY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLkRmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbFVuaW9uRXh0ZXJuYWxFeHRlbnNpb24iLDE1MzEpLEQoMTUzNSwxLHt9LEVidCksSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9PdXRlclNlZ21lbnRzIiwxNTM1KSxEKDE1MzQsMSx7fSxqUWUpLEkoVjEsIkNvbXBvbmVudHNDb21wYWN0b3IvU2VnbWVudHMiLDE1MzQpLEQoMTI4MiwxLHt9LFB1dCksSShWMSxMRWUsMTI4MiksRCgxMjgzLDEsaWksb2opLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQ2JuKGwodCwzNiksbChuLDM2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShWMSwiQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxMjgzKSxEKDU3OSwzMzUsezMzNToxLDU3OToxfSx5dXQpLGguRmY9ZnVuY3Rpb24odCl7cmV0dXJuIEc3ZSh0aGlzLHQpfSxoLkdmPWZ1bmN0aW9uKHQpe3JldHVybiBuYnQodGhpcyx0KX07dmFyIGJpO0koVjEsIk1vZGVsT3JkZXJDb21wb25lbnRHcm91cCIsNTc5KSxEKDEzMTAsMjEwNCx7fSxxSiksaC5FZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYodC5nYygpPT0xKXtCPWwodC5YYigwKSwzNiksQiE9biYmKG4uYS5jLmxlbmd0aD0wLGNtdChuLEIsMCwwKSxwYyhuLEIpLE81ZShuLmQsQi5kKSxuLmYuYT1CLmYuYSxuLmYuYj1CLmYuYik7cmV0dXJufWVsc2UgaWYodC5kYygpKXtuLmEuYy5sZW5ndGg9MCxuLmYuYT0wLG4uZi5iPTA7cmV0dXJufWZvcih0aGlzLkpmKHQsbiksbz1sKHQuWGIoMCksMzYpLG4uYS5jLmxlbmd0aD0wLHBjKG4sbyksQz0wLHo9MCxnPXQuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMzYpLEw9Zi5mLEM9Yi5NYXRoLm1heChDLEwuYSkseis9TC5hKkwuYjtpZihDPWIuTWF0aC5tYXgoQyxiLk1hdGguc3FydCh6KSp6ZShHZShRKG4sKE50KCksY1cpKSkpKSxhPXplKEdlKFEobixTQikpKSx0aGlzLklmKHQsbixDLGEpLFJ0KEJ0KFEobyx1VykpKSl7Zm9yKHI9bmV3IG9TLEtrZShyLHQsYSksRT10LktjKCk7RS5PYigpOyl3PWwoRS5QYigpLDM2KSxPaShZMCh3LmMpLHIuZSk7T2koWTAobi5mKSxyLmEpfUY2ZShuLHQpfSxoLklmPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEI7Zm9yKEw9MCxCPTAsdz0wLG89YSxnPXQuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMzYpLEM9Zi5mLEwrQy5hPnImJihMPTAsQis9dythLHc9MCksRT1mLmMsS0UoZixMK0UuYSxCK0UuYiksWTAoRSksbz1iLk1hdGgubWF4KG8sTCtDLmEpLHc9Yi5NYXRoLm1heCh3LEMuYiksTCs9Qy5hK2E7bi5mLmE9byxuLmYuYj1CK3d9LGguSmY9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZixnO2lmKHFlKFEobiwoTnQoKSxnNCkpKT09PXFlKChLbSgpLGM0KSkpe2ZvcihhPXQuS2MoKTthLk9iKCk7KXtmb3Iocj1sKGEuUGIoKSwzNiksZz0wLGY9bmV3IEcoci5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTApLGcrPWwoUShvLEhrdCksMTcpLmE7ci5wPWd9Q24oKSx0LmpkKG5ldyBjail9fSxJKFYxLCJTaW1wbGVSb3dHcmFwaFBsYWNlciIsMTMxMCksRCgxMzEzLDEzMTAse30sY2gpLGguSWY9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFY7Zm9yKHo9MCxWPTAsdz0wLG89YSxFPW51bGwsQj0wLGc9dC5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSwzNiksTD1mLmYsKHorTC5hPnImJiFsKFEoZiwoZnQoKSxwcCkpLDIxKS5IYygoQ3QoKSxRbikpfHxFJiZsKFEoRSwoZnQoKSxwcCkpLDIxKS5IYygoQ3QoKSxhcikpfHxsKFEoZiwoZnQoKSxwcCkpLDIxKS5IYygoQ3QoKSxlcikpKSYmKHo9QixWKz13K2Esdz0wKSxDPWYuYyxsKFEoZiwoZnQoKSxwcCkpLDIxKS5IYygoQ3QoKSxRbikpJiYoej1vK2EpLEtFKGYseitDLmEsVitDLmIpLG89Yi5NYXRoLm1heChvLHorTC5hKSxsKFEoZixwcCksMjEpLkhjKERyKSYmKEI9Yi5NYXRoLm1heChCLHorTC5hK2EpKSxZMChDKSx3PWIuTWF0aC5tYXgodyxMLmIpLHorPUwuYSthLEU9ZjtuLmYuYT1vLG4uZi5iPVYrd30saC5KZj1mdW5jdGlvbih0LG4pe30sSShWMSwiTW9kZWxPcmRlclJvd0dyYXBoUGxhY2VyIiwxMzEzKSxEKDEzMTEsMSxpaSxjaiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBqM24obCh0LDM2KSxsKG4sMzYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKFYxLCJTaW1wbGVSb3dHcmFwaFBsYWNlci8xIiwxMzExKTt2YXIgTzh0O0QoMTI4MCwxLExkLHEwKSxoLkxiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPWwoUShsKHQsMjQ5KS5iLChOdCgpLGNjKSksNzUpLCEhbiYmbi5iIT0wfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1sKFEobCh0LDI0OSkuYiwoTnQoKSxjYykpLDc1KSwhIW4mJm4uYiE9MH0sSShoRywiQ29tcG91bmRHcmFwaFBvc3Rwcm9jZXNzb3IvMSIsMTI4MCksRCgxMjc5LDEsdHMsVVFlKSxoLktmPWZ1bmN0aW9uKHQsbil7a2R0KHRoaXMsbCh0LDM2KSxuKX0sSShoRywiQ29tcG91bmRHcmFwaFByZXByb2Nlc3NvciIsMTI3OSksRCg0NTMsMSx7NDUzOjF9LGYxdCksaC5jPSExLEkoaEcsIkNvbXBvdW5kR3JhcGhQcmVwcm9jZXNzb3IvRXh0ZXJuYWxQb3J0Iiw0NTMpLEQoMjQ5LDEsezI0OToxfSxLcSksaC5JYj1mdW5jdGlvbigpe3JldHVybiBhYWUodGhpcy5jKSsiOiIrS3B0KHRoaXMuYil9LEkoaEcsIkNyb3NzSGllcmFyY2h5RWRnZSIsMjQ5KSxEKDc3NywxLGlpLEdJKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuICQ3bih0aGlzLGwodCwyNDkpLGwobiwyNDkpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGhHLCJDcm9zc0hpZXJhcmNoeUVkZ2VDb21wYXJhdG9yIiw3NzcpLEQoMzA1LDEzNyx7MzoxLDMwNToxLDk2OjEsMTM3OjF9KSxoLnA9MCxJKEN1LCJMR3JhcGhFbGVtZW50IiwzMDUpLEQoMTgsMzA1LHszOjEsMTg6MSwzMDU6MSw5NjoxLDEzNzoxfSxUdyksaC5JYj1mdW5jdGlvbigpe3JldHVybiBLcHQodGhpcyl9O3ZhciB1MWU9SShDdSwiTEVkZ2UiLDE4KTtEKDM2LDMwNSx7MzoxLDIwOjEsMzY6MSwzMDU6MSw5NjoxLDEzNzoxfSxvN2UpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmIpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5jLmxlbmd0aD09MD8iRy11bmxheWVyZWQiK1RiKHRoaXMuYSk6dGhpcy5hLmMubGVuZ3RoPT0wPyJHLWxheWVyZWQiK1RiKHRoaXMuYik6IkdbbGF5ZXJsZXNzIitUYih0aGlzLmEpKyIsIGxheWVycyIrVGIodGhpcy5iKSsiXSJ9O3ZhciBOOHQ9SShDdSwiTEdyYXBoIiwzNiksUDh0O0QoNjY2LDEse30pLGguTGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLm59LGgub2Y9ZnVuY3Rpb24odCl7cmV0dXJuIFEodGhpcy5lLHQpfSxoLk1mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZS5vfSxoLk5mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZS5wfSxoLnBmPWZ1bmN0aW9uKHQpe3JldHVybiBucyh0aGlzLmUsdCl9LGguT2Y9ZnVuY3Rpb24odCl7dGhpcy5lLm4uYT10LmEsdGhpcy5lLm4uYj10LmJ9LGguUGY9ZnVuY3Rpb24odCl7dGhpcy5lLm8uYT10LmEsdGhpcy5lLm8uYj10LmJ9LGguUWY9ZnVuY3Rpb24odCl7dGhpcy5lLnA9dH0sSShDdSwiTEdyYXBoQWRhcHRlcnMvQWJzdHJhY3RMU2hhcGVBZGFwdGVyIiw2NjYpLEQoNDc0LDEsezg1MzoxfSxUbSksaC5SZj1mdW5jdGlvbigpe3ZhciB0LG47aWYoIXRoaXMuYilmb3IodGhpcy5iPWVnKHRoaXMuYS5iLmMubGVuZ3RoKSxuPW5ldyBHKHRoaXMuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNzIpLHZ0KHRoaXMuYixuZXcgWmQodCkpO3JldHVybiB0aGlzLmJ9LGguYj1udWxsLEkoQ3UsIkxHcmFwaEFkYXB0ZXJzL0xFZGdlQWRhcHRlciIsNDc0KSxEKDY2NSwxLHt9LEphZSksaC5TZj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtpZighdGhpcy5iKXtmb3IodGhpcy5iPW5ldyBidCxhPW5ldyBHKHRoaXMuYS5iKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1sKHJlKGEpLDMwKSxmPW5ldyBHKHIuYSk7Zi5hPGYuYy5jLmxlbmd0aDspaWYobz1sKHJlKGYpLDEwKSx0aGlzLmMuTWIobykmJih2dCh0aGlzLmIsbmV3IFdxKHRoaXMsbyx0aGlzLmUpKSx0aGlzLmQpKXtpZihucyhvLChmdCgpLFF4KSkpZm9yKG49bChRKG8sUXgpLDE1KS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSwxMCksdnQodGhpcy5iLG5ldyBXcSh0aGlzLHQsITEpKTtpZihucyhvLEd4KSlmb3Iobj1sKFEobyxHeCksMTUpLktjKCk7bi5PYigpOyl0PWwobi5QYigpLDEwKSx2dCh0aGlzLmIsbmV3IFdxKHRoaXMsdCwhMSkpfX1yZXR1cm4gdGhpcy5ifSxoLkxmPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IEhwKEQzdCkpfSxoLm9mPWZ1bmN0aW9uKHQpe3JldHVybiBRKHRoaXMuYSx0KX0saC5NZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZn0saC5OZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEucH0saC5wZj1mdW5jdGlvbih0KXtyZXR1cm4gbnModGhpcy5hLHQpfSxoLk9mPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBIcChEM3QpKX0saC5QZj1mdW5jdGlvbih0KXt0aGlzLmEuZi5hPXQuYSx0aGlzLmEuZi5iPXQuYn0saC5RZj1mdW5jdGlvbih0KXt0aGlzLmEucD10fSxoLmI9bnVsbCxoLmQ9ITEsaC5lPSExLEkoQ3UsIkxHcmFwaEFkYXB0ZXJzL0xHcmFwaEFkYXB0ZXIiLDY2NSksRCg1ODUsNjY2LHsxODc6MX0sWmQpLEkoQ3UsIkxHcmFwaEFkYXB0ZXJzL0xMYWJlbEFkYXB0ZXIiLDU4NSksRCg1ODQsNjY2LHs2OTU6MX0sV3EpLGguVGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlVmPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksQ24oKSxfb30saC5SZj1mdW5jdGlvbigpe3ZhciB0LG47aWYoIXRoaXMuYSlmb3IodGhpcy5hPWVnKGwodGhpcy5lLDEwKS5iLmMubGVuZ3RoKSxuPW5ldyBHKGwodGhpcy5lLDEwKS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNzIpLHZ0KHRoaXMuYSxuZXcgWmQodCkpO3JldHVybiB0aGlzLmF9LGguVmY9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1sKHRoaXMuZSwxMCkuZCxuZXcgbjRlKHQuZCx0LmMsdC5hLHQuYil9LGguV2Y9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oKSxDbigpLF9vfSxoLlhmPWZ1bmN0aW9uKCl7dmFyIHQsbjtpZighdGhpcy5jKWZvcih0aGlzLmM9ZWcobCh0aGlzLmUsMTApLmouYy5sZW5ndGgpLG49bmV3IEcobCh0aGlzLmUsMTApLmopO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMiksdnQodGhpcy5jLG5ldyBCZXQodCx0aGlzLmQpKTtyZXR1cm4gdGhpcy5jfSxoLllmPWZ1bmN0aW9uKCl7cmV0dXJuIFJ0KEJ0KFEobCh0aGlzLmUsMTApLChmdCgpLEZMZSkpKSl9LGguWmY9ZnVuY3Rpb24odCl7bCh0aGlzLmUsMTApLmQuYj10LmIsbCh0aGlzLmUsMTApLmQuZD10LmQsbCh0aGlzLmUsMTApLmQuYz10LmMsbCh0aGlzLmUsMTApLmQuYT10LmF9LGguJGY9ZnVuY3Rpb24odCl7bCh0aGlzLmUsMTApLmYuYj10LmIsbCh0aGlzLmUsMTApLmYuZD10LmQsbCh0aGlzLmUsMTApLmYuYz10LmMsbCh0aGlzLmUsMTApLmYuYT10LmF9LGguX2Y9ZnVuY3Rpb24oKXtCd24odGhpcywoZ18oKSxQOHQpKX0saC5hPW51bGwsaC5iPW51bGwsaC5jPW51bGwsaC5kPSExLEkoQ3UsIkxHcmFwaEFkYXB0ZXJzL0xOb2RlQWRhcHRlciIsNTg0KSxEKDE3ODgsNjY2LHs4NTI6MX0sQmV0KSxoLlVmPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmLGcsdztpZih0aGlzLmQmJmwodGhpcy5lLDEyKS5pLms9PShabigpLEF1KSlyZXR1cm4gQ24oKSxDbigpLF9vO2lmKCF0aGlzLmEpe2Zvcih0aGlzLmE9bmV3IGJ0LHI9bmV3IEcobCh0aGlzLmUsMTIpLmUpO3IuYTxyLmMuYy5sZW5ndGg7KXQ9bChyZShyKSwxOCksdnQodGhpcy5hLG5ldyBUbSh0KSk7aWYodGhpcy5kJiYoYT1sKFEobCh0aGlzLmUsMTIpLChmdCgpLGpsKSksMTApLGEpKWZvcihuPW5ldyBocihkcihrYShhKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDE4KSx2dCh0aGlzLmEsbmV3IFRtKHQpKTtpZihucyhsKHRoaXMuZSwxMikuaSwoZnQoKSxoMykpJiYoZz1sKFEobCh0aGlzLmUsMTIpLmksaDMpLDMzNyksdz1sKEIxKGcuZSx0aGlzLmUpLDExMyksdykpZm9yKGY9bmV3IEcody5iKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMzQwKSx2dCh0aGlzLmEsbmV3IFRtKG8uYSkpfXJldHVybiB0aGlzLmF9LGguUmY9ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKCF0aGlzLmIpZm9yKHRoaXMuYj1lZyhsKHRoaXMuZSwxMikuZi5jLmxlbmd0aCksbj1uZXcgRyhsKHRoaXMuZSwxMikuZik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDcyKSx2dCh0aGlzLmIsbmV3IFpkKHQpKTtyZXR1cm4gdGhpcy5ifSxoLldmPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmLGcsdztpZih0aGlzLmQmJmwodGhpcy5lLDEyKS5pLms9PShabigpLEF1KSlyZXR1cm4gQ24oKSxDbigpLF9vO2lmKCF0aGlzLmMpe2Zvcih0aGlzLmM9bmV3IGJ0LHI9bmV3IEcobCh0aGlzLmUsMTIpLmcpO3IuYTxyLmMuYy5sZW5ndGg7KXQ9bChyZShyKSwxOCksdnQodGhpcy5jLG5ldyBUbSh0KSk7aWYodGhpcy5kJiYoYT1sKFEobCh0aGlzLmUsMTIpLChmdCgpLGpsKSksMTApLGEpKWZvcihuPW5ldyBocihkcihxcyhhKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDE4KSx2dCh0aGlzLmMsbmV3IFRtKHQpKTtpZihucyhsKHRoaXMuZSwxMikuaSwoZnQoKSxoMykpJiYoZz1sKFEobCh0aGlzLmUsMTIpLmksaDMpLDMzNyksdz1sKEIxKGcuZSx0aGlzLmUpLDExMyksdykpZm9yKGY9bmV3IEcody5lKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMzQwKSx2dCh0aGlzLmMsbmV3IFRtKG8uYSkpfXJldHVybiB0aGlzLmN9LGguYWc9ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmUsMTIpLmp9LGguYmc9ZnVuY3Rpb24oKXtyZXR1cm4gUnQoQnQoUShsKHRoaXMuZSwxMiksKGZ0KCkseEIpKSkpfSxoLmE9bnVsbCxoLmI9bnVsbCxoLmM9bnVsbCxoLmQ9ITEsSShDdSwiTEdyYXBoQWRhcHRlcnMvTFBvcnRBZGFwdGVyIiwxNzg4KSxEKDE3ODksMSxpaSxRMyksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBEU24obCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKEN1LCJMR3JhcGhBZGFwdGVycy9Qb3J0Q29tcGFyYXRvciIsMTc4OSksRCg4MTgsMSx0aSxjUyksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEwKSxnXygpLCEwfSxJKEN1LCJMR3JhcGhBZGFwdGVycy9sYW1iZGEkMCRUeXBlIiw4MTgpLEQoNDA0LDMwNSx7MzoxLDMwNToxLDQwNDoxLDk2OjEsMTM3OjF9KSxJKEN1LCJMU2hhcGUiLDQwNCksRCg3Miw0MDQsezM6MSwzMDU6MSw3MjoxLDQwNDoxLDk2OjEsMTM3OjF9LFhKZSxieWUpLGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD15ZG4odGhpcyksdD09bnVsbD8ibGFiZWwiOiJsXyIrdH0sSShDdSwiTExhYmVsIiw3MiksRCgyMTQsMSx7MzoxLDQ6MSwyMTQ6MSw0MjM6MX0pLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsMjE0KT8obj1sKHQsMjE0KSx0aGlzLmQ9PW4uZCYmdGhpcy5hPT1uLmEmJnRoaXMuYj09bi5iJiZ0aGlzLmM9PW4uYyk6ITF9LGguSGI9ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiB0PWo4KHRoaXMuYik8PDE2LHR8PWo4KHRoaXMuYSkmWnMsbj1qOCh0aGlzLmMpPDwxNixufD1qOCh0aGlzLmQpJlpzLHRebn0saC5jZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihmPTA7Zjx0Lmxlbmd0aCYmSDB0KChYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZikpLE8zdCk7KSsrZjtmb3Iobj10Lmxlbmd0aDtuPjAmJkgwdCgoWG4obi0xLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobi0xKSksTjN0KTspLS1uO2lmKGY8bil7TD1HeSgoR2EoZixuLHQubGVuZ3RoKSx0LnN1YnN0cihmLG4tZikpLCIsfDsiKTt0cnl7Zm9yKHc9TCxFPTAsQz13Lmxlbmd0aDtFPEM7KytFKXtpZihnPXdbRV0sbz1HeShnLCI9Iiksby5sZW5ndGghPTIpdGhyb3cgdWUobmV3IFluKCJFeHBlY3RpbmcgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycy4iKSk7YT0keShvWzBdKSxCPWp5KCR5KG9bMV0pKSx2bihhLCJ0b3AiKT90aGlzLmQ9Qjp2bihhLCJsZWZ0Iik/dGhpcy5iPUI6dm4oYSwiYm90dG9tIik/dGhpcy5hPUI6dm4oYSwicmlnaHQiKSYmKHRoaXMuYz1CKX19Y2F0Y2goeil7dGhyb3cgej1icyh6KSxEZSh6LDEzMCk/KHI9eix1ZShuZXcgWW4oUDN0K3IpKSk6dWUoeil9fX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJbdG9wPSIrdGhpcy5kKyIsbGVmdD0iK3RoaXMuYisiLGJvdHRvbT0iK3RoaXMuYSsiLHJpZ2h0PSIrdGhpcy5jKyJdIn0saC5hPTAsaC5iPTAsaC5jPTAsaC5kPTAsSSgkUCwiU3BhY2luZyIsMjE0KSxEKDE0MCwyMTQsQjN0LHNfLG5udCxuNGUseGFlKTt2YXIgdkFlPUkoJFAsIkVsa01hcmdpbiIsMTQwKTtEKDY2MCwxNDAsQjN0LCRpZSksSShDdSwiTE1hcmdpbiIsNjYwKSxEKDEwLDQwNCx7MzoxLDMwNToxLDEwOjEsNDA0OjEsOTY6MSwxMzc6MX0sb3ApLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gcGR0KHRoaXMpfSxoLmk9ITE7dmFyIHdnPUkoQ3UsIkxOb2RlIiwxMCk7RCgyNzMsMjIsezM6MSwzNDoxLDIyOjEsMjczOjF9LGtfKTt2YXIgSzEsVXMsY3UsQWEsUHMsQXUsbDFlPUZyKEN1LCJMTm9kZS9Ob2RlVHlwZSIsMjczLEhyLFN2bixUMW4pLEI4dDtEKDc3NSwxLHRpLHVqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBSdChCdChRKGwodCw3MiksKE50KCksdGRlKSkpKX0sSShDdSwiTE5vZGUvbGFtYmRhJDAkVHlwZSIsNzc1KSxEKDEwNywyMTQsRjN0LEE4LGx3LFM0ZSk7dmFyIHdBZT1JKCRQLCJFbGtQYWRkaW5nIiwxMDcpO0QoNzc4LDEwNyxGM3QsUndlKSxJKEN1LCJMUGFkZGluZyIsNzc4KSxEKDEyLDQwNCx7MzoxLDMwNToxLDEyOjEsNDA0OjEsOTY6MSwxMzc6MX0sZ3UpLGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuLHI7cmV0dXJuIHQ9bmV3IHRiLGhpKCh0LmErPSJwXyIsdCksZlUodGhpcykpLHRoaXMuaSYmaGkod3UoKHQuYSs9IlsiLHQpLHRoaXMuaSksIl0iKSx0aGlzLmUuYy5sZW5ndGg9PTEmJnRoaXMuZy5jLmxlbmd0aD09MCYmbChqdCh0aGlzLmUsMCksMTgpLmMhPXRoaXMmJihuPWwoanQodGhpcy5lLDApLDE4KS5jLGhpKCh0LmErPSIgPDwgIix0KSxmVShuKSksaGkod3UoKHQuYSs9IlsiLHQpLG4uaSksIl0iKSksdGhpcy5lLmMubGVuZ3RoPT0wJiZ0aGlzLmcuYy5sZW5ndGg9PTEmJmwoanQodGhpcy5nLDApLDE4KS5kIT10aGlzJiYocj1sKGp0KHRoaXMuZywwKSwxOCkuZCxoaSgodC5hKz0iID4+ICIsdCksZlUocikpLGhpKHd1KCh0LmErPSJbIix0KSxyLmkpLCJdIikpLHQuYX0saC5jPSEwLGguZD0hMTt2YXIgeUFlLHhBZSxrQWUsRUFlLFRBZSxDQWUsRjh0PUkoQ3UsIkxQb3J0IiwxMik7RCg0MDgsMSxoZyxUNSksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bmV3IEcodGhpcy5hLmUpLG5ldyBqV2UodCl9LEkoQ3UsIkxQb3J0LzEiLDQwOCksRCgxMzA5LDEsT2EsaldlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbChyZSh0aGlzLmEpLDE4KS5jfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIExjKHRoaXMuYSl9LGguUWI9ZnVuY3Rpb24oKXtRXyh0aGlzLmEpfSxJKEN1LCJMUG9ydC8xLzEiLDEzMDkpLEQoMzY5LDEsaGcsQzgpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PW5ldyBHKHRoaXMuYS5nKSxuZXcgdndlKHQpfSxJKEN1LCJMUG9ydC8yIiwzNjkpLEQoNzc2LDEsT2EsdndlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbChyZSh0aGlzLmEpLDE4KS5kfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIExjKHRoaXMuYSl9LGguUWI9ZnVuY3Rpb24oKXtRXyh0aGlzLmEpfSxJKEN1LCJMUG9ydC8yLzEiLDc3NiksRCgxMzAyLDEsaGcsTWV0KSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE4xKHRoaXMpfSxJKEN1LCJMUG9ydC9Db21iaW5lSXRlciIsMTMwMiksRCgyMDgsMSxPYSxOMSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlFiPWZ1bmN0aW9uKCl7YVplKCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gJF8odGhpcyl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gTGModGhpcy5hKT9yZSh0aGlzLmEpOnJlKHRoaXMuYil9LEkoQ3UsIkxQb3J0L0NvbWJpbmVJdGVyLzEiLDIwOCksRCgxMzAzLDEsTGQsSzIpLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIExzdCh0KX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGtsKCksbCh0LDEyKS5nLmMubGVuZ3RoIT0wfSxJKEN1LCJMUG9ydC9sYW1iZGEkMCRUeXBlIiwxMzAzKSxEKDEzMDQsMSxMZCxKMyksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4gTXN0KHQpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4ga2woKSxsKHQsMTIpLmUuYy5sZW5ndGghPTB9LEkoQ3UsIkxQb3J0L2xhbWJkYSQxJFR5cGUiLDEzMDQpLEQoMTMwNSwxLExkLEhKKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBrbCgpLGwodCwxMikuaj09KEN0KCksUW4pfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4ga2woKSxsKHQsMTIpLmo9PShDdCgpLFFuKX0sSShDdSwiTFBvcnQvbGFtYmRhJDIkVHlwZSIsMTMwNSksRCgxMzA2LDEsTGQsd20pLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIGtsKCksbCh0LDEyKS5qPT0oQ3QoKSxhcil9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBrbCgpLGwodCwxMikuaj09KEN0KCksYXIpfSxJKEN1LCJMUG9ydC9sYW1iZGEkMyRUeXBlIiwxMzA2KSxEKDEzMDcsMSxMZCxWSiksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4ga2woKSxsKHQsMTIpLmo9PShDdCgpLERyKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGtsKCksbCh0LDEyKS5qPT0oQ3QoKSxEcil9LEkoQ3UsIkxQb3J0L2xhbWJkYSQ0JFR5cGUiLDEzMDcpLEQoMTMwOCwxLExkLFVKKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBrbCgpLGwodCwxMikuaj09KEN0KCksZXIpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4ga2woKSxsKHQsMTIpLmo9PShDdCgpLGVyKX0sSShDdSwiTFBvcnQvbGFtYmRhJDUkVHlwZSIsMTMwOCksRCgzMCwzMDUsezM6MSwyMDoxLDMwNToxLDMwOjEsOTY6MSwxMzc6MX0seXUpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmEpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkxfIitnYyh0aGlzLmIuYix0aGlzLDApK1RiKHRoaXMuYSl9LEkoQ3UsIkxheWVyIiwzMCksRCgxMzMwLDEse30sVlFlKSxJKHYyLFIzdCwxMzMwKSxEKDEzMzQsMSx7fSxRNyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gYmMobCh0LDg0KSl9LEkodjIsIkVsa0dyYXBoSW1wb3J0ZXIvMG1ldGhvZHJlZiRjb25uZWN0YWJsZVNoYXBlVG9Ob2RlJFR5cGUiLDEzMzQpLEQoMTMzNywxLHt9LHVTKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBiYyhsKHQsODQpKX0sSSh2MiwiRWxrR3JhcGhJbXBvcnRlci8xbWV0aG9kcmVmJGNvbm5lY3RhYmxlU2hhcGVUb05vZGUkVHlwZSIsMTMzNyksRCgxMzMxLDEsZnIsJFdlKSxoLkNkPWZ1bmN0aW9uKHQpe2wydCh0aGlzLmEsbCh0LDEyMykpfSxJKHYyLE1FZSwxMzMxKSxEKDEzMzIsMSxmcix6V2UpLGguQ2Q9ZnVuY3Rpb24odCl7bDJ0KHRoaXMuYSxsKHQsMTIzKSl9LEkodjIsajN0LDEzMzIpLEQoMTMzMywxLHt9LGxqKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24oQTVlKGwodCw3NCkpLDE2KSl9LEkodjIsJDN0LDEzMzMpLEQoMTMzNSwxLHRpLHFXZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gSGxuKHRoaXMuYSxsKHQsMjcpKX0sSSh2Mix6M3QsMTMzNSksRCgxMzM2LDEse30sSDkpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihhcG4obCh0LDc0KSksMTYpKX0sSSh2MiwiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkNSRUeXBlIiwxMzM2KSxEKDEzMzgsMSx0aSxIV2UpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIFZsbih0aGlzLmEsbCh0LDI3KSl9LEkodjIsIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDckVHlwZSIsMTMzOCksRCgxMzM5LDEsdGksR0opLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHlwbihsKHQsNzQpKX0sSSh2MiwiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkOCRUeXBlIiwxMzM5KSxEKDEyOTcsMSx7fSxiOCk7dmFyIFI4dDtJKHYyLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyIiwxMjk3KSxEKDEyOTgsMSx0aSxWV2UpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIElmbih0aGlzLmEsbCh0LDE4KSl9LEkodjIsIkVsa0dyYXBoTGF5b3V0VHJhbnNmZXJyZXIvbGFtYmRhJDAkVHlwZSIsMTI5OCksRCgxMjk5LDEsZnIsVVdlKSxoLkNkPWZ1bmN0aW9uKHQpe3NPKCksdnQodGhpcy5hLGwodCwxOCkpfSxJKHYyLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyL2xhbWJkYSQxJFR5cGUiLDEyOTkpLEQoMTMwMCwxLHRpLEdXZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbWZuKHRoaXMuYSxsKHQsMTgpKX0sSSh2MiwiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMiRUeXBlIiwxMzAwKSxEKDEzMDEsMSxmcixLV2UpLGguQ2Q9ZnVuY3Rpb24odCl7c08oKSx2dCh0aGlzLmEsbCh0LDE4KSl9LEkodjIsIkVsa0dyYXBoTGF5b3V0VHJhbnNmZXJyZXIvbGFtYmRhJDMkVHlwZSIsMTMwMSksRCg4MTksMSx7fSxpNGUpLEkocnIsIkJpTGlua2VkSGFzaE11bHRpTWFwIiw4MTkpLEQoMTU1MCwxLHRzLFY5KSxoLktmPWZ1bmN0aW9uKHQsbil7czNuKGwodCwzNiksbil9LEkocnIsIkNvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvciIsMTU1MCksRCgxNTUxLDEse30sS0opLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiQ29tbWVudE5vZGVNYXJnaW5DYWxjdWxhdG9yL2xhbWJkYSQwJFR5cGUiLDE1NTEpLEQoMTU1MiwxLGZyLFdKKSxoLkNkPWZ1bmN0aW9uKHQpe3NMbihsKHQsMTApKX0sSShyciwiQ29tbWVudE5vZGVNYXJnaW5DYWxjdWxhdG9yL2xhbWJkYSQxJFR5cGUiLDE1NTIpLEQoMTU1MywxLHRzLFlKKSxoLktmPWZ1bmN0aW9uKHQsbil7dVNuKGwodCwzNiksbil9LEkocnIsIkNvbW1lbnRQb3N0cHJvY2Vzc29yIiwxNTUzKSxEKDE1NTQsMSx0cyxYSiksaC5LZj1mdW5jdGlvbih0LG4pe0REbihsKHQsMzYpLG4pfSxJKHJyLCJDb21tZW50UHJlcHJvY2Vzc29yIiwxNTU0KSxEKDE1NTUsMSx0cyxRSiksaC5LZj1mdW5jdGlvbih0LG4pe1NDbihsKHQsMzYpLG4pfSxJKHJyLCJDb25zdHJhaW50c1Bvc3Rwcm9jZXNzb3IiLDE1NTUpLEQoMTU1NiwxLHRzLEpKKSxoLktmPWZ1bmN0aW9uKHQsbil7TzNuKGwodCwzNiksbil9LEkocnIsIkVkZ2VBbmRMYXllckNvbnN0cmFpbnRFZGdlUmV2ZXJzZXIiLDE1NTYpLEQoMTU1NywxLHRzLFpKKSxoLktmPWZ1bmN0aW9uKHQsbil7RTVuKGwodCwzNiksbil9LEkocnIsIkVuZExhYmVsUG9zdHByb2Nlc3NvciIsMTU1NyksRCgxNTU4LDEse30sZVopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiRW5kTGFiZWxQb3N0cHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1NTgpLEQoMTU1OSwxLHRpLHRaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBSbW4obCh0LDEwKSl9LEkocnIsIkVuZExhYmVsUG9zdHByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNTU5KSxEKDE1NjAsMSxmcixuWiksaC5DZD1mdW5jdGlvbih0KXtkOG4obCh0LDEwKSl9LEkocnIsIkVuZExhYmVsUG9zdHByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNTYwKSxEKDE1NjEsMSx0cyxyWiksaC5LZj1mdW5jdGlvbih0LG4pe3RrbihsKHQsMzYpLG4pfSxJKHJyLCJFbmRMYWJlbFByZXByb2Nlc3NvciIsMTU2MSksRCgxNTYyLDEse30sckkpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTU2MiksRCgxNTYzLDEsZnIsbWl0KSxoLkNkPWZ1bmN0aW9uKHQpe25sbih0aGlzLmEsdGhpcy5iLHRoaXMuYyxsKHQsMTApKX0saC5hPTAsaC5iPTAsaC5jPSExLEkocnIsIkVuZExhYmVsUHJlcHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1NjMpLEQoMTU2NCwxLHRpLGlaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBxZShRKGwodCw3MiksKE50KCksamQpKSk9PT1xZSgoRjEoKSxyQykpfSxJKHJyLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNTY0KSxEKDE1NjUsMSxmcixXV2UpLGguQ2Q9ZnVuY3Rpb24odCl7dWkodGhpcy5hLGwodCw3MikpfSxJKHJyLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlIiwxNTY1KSxEKDE1NjYsMSx0aSxzWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gcWUoUShsKHQsNzIpLChOdCgpLGpkKSkpPT09cWUoKEYxKCksXzQpKX0sSShyciwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDQkVHlwZSIsMTU2NiksRCgxNTY3LDEsZnIsWVdlKSxoLkNkPWZ1bmN0aW9uKHQpe3VpKHRoaXMuYSxsKHQsNzIpKX0sSShyciwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDUkVHlwZSIsMTU2NyksRCgxNjE1LDEsdHMsSHJlKSxoLktmPWZ1bmN0aW9uKHQsbil7azRuKGwodCwzNiksbil9O3ZhciBqOHQ7SShyciwiRW5kTGFiZWxTb3J0ZXIiLDE2MTUpLEQoMTYxNiwxLGlpLGxTKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ2bihsKHQsNDY2KSxsKG4sNDY2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShyciwiRW5kTGFiZWxTb3J0ZXIvMSIsMTYxNiksRCg0NjYsMSx7NDY2OjF9LEhhdCksSShyciwiRW5kTGFiZWxTb3J0ZXIvTGFiZWxHcm91cCIsNDY2KSxEKDE2MTcsMSx7fSxoaiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gaU8oKSxuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkocnIsIkVuZExhYmVsU29ydGVyL2xhbWJkYSQwJFR5cGUiLDE2MTcpLEQoMTYxOCwxLHRpLEo3KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBpTygpLGwodCwxMCkuaz09KFpuKCksUHMpfSxJKHJyLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMSRUeXBlIiwxNjE4KSxEKDE2MTksMSxmcixhWiksaC5DZD1mdW5jdGlvbih0KXtwOW4obCh0LDEwKSl9LEkocnIsIkVuZExhYmVsU29ydGVyL2xhbWJkYSQyJFR5cGUiLDE2MTkpLEQoMTYyMCwxLHRpLG9aKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBpTygpLHFlKFEobCh0LDcyKSwoTnQoKSxqZCkpKT09PXFlKChGMSgpLF80KSl9LEkocnIsIkVuZExhYmVsU29ydGVyL2xhbWJkYSQzJFR5cGUiLDE2MjApLEQoMTYyMSwxLHRpLGNaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBpTygpLHFlKFEobCh0LDcyKSwoTnQoKSxqZCkpKT09PXFlKChGMSgpLHJDKSl9LEkocnIsIkVuZExhYmVsU29ydGVyL2xhbWJkYSQ0JFR5cGUiLDE2MjEpLEQoMTU2OCwxLHRzLHVaKSxoLktmPWZ1bmN0aW9uKHQsbil7eUxuKHRoaXMsbCh0LDM2KSl9LGguYj0wLGguYz0wLEkocnIsIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IiLDE1NjgpLEQoMTU2OSwxLHt9LGxaKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkocnIsIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZSIsMTU2OSksRCgxNTcwLDEse30saFMpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyB2dyhuZXcgaHIoZHIocXMobCh0LDEwKSkuYS5LYygpLG5ldyBqKSkpKX0sSShyciwiRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlIiwxNTcwKSxEKDE1NzEsMSx0aSxpSSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4hRG8obCh0LDE4KSl9LEkocnIsIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDIkVHlwZSIsMTU3MSksRCgxNTcyLDEsdGksZmopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIG5zKGwodCwxOCksKGZ0KCksZnYpKX0sSShyciwiRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkMyRUeXBlIiwxNTcyKSxEKDE1NzMsMSxmcixYV2UpLGguQ2Q9ZnVuY3Rpb24odCl7TF9uKHRoaXMuYSxsKHQsMTMxKSl9LEkocnIsIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDQkVHlwZSIsMTU3MyksRCgxNTc0LDEsZnIsaDUpLGguQ2Q9ZnVuY3Rpb24odCl7Sk4obCh0LDE4KS5hKX0sSShyciwiRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkNSRUeXBlIiwxNTc0KSxEKDgwMywxLHRzLHd3ZSksaC5LZj1mdW5jdGlvbih0LG4pe2RNbih0aGlzLGwodCwzNiksbil9LEkocnIsIkdyYXBoVHJhbnNmb3JtZXIiLDgwMyksRCg1MTcsMjIsezM6MSwzNDoxLDIyOjEsNTE3OjF9LEkzZSk7dmFyIGgxZSxkQiwkOHQ9RnIocnIsIkdyYXBoVHJhbnNmb3JtZXIvTW9kZSIsNTE3LEhyLHFwbixFMW4pLHo4dDtEKDE1NzUsMSx0cyxmNSksaC5LZj1mdW5jdGlvbih0LG4pe1BUbihsKHQsMzYpLG4pfSxJKHJyLCJIaWVyYXJjaGljYWxOb2RlUmVzaXppbmdQcm9jZXNzb3IiLDE1NzUpLEQoMTU3NiwxLHRzLGhaKSxoLktmPWZ1bmN0aW9uKHQsbil7ZTNuKGwodCwzNiksbil9LEkocnIsIkhpZXJhcmNoaWNhbFBvcnRDb25zdHJhaW50UHJvY2Vzc29yIiwxNTc2KSxEKDE1NzcsMSxpaSx0MCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBrNm4obCh0LDEwKSxsKG4sMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJIaWVyYXJjaGljYWxQb3J0Q29uc3RyYWludFByb2Nlc3Nvci9Ob2RlQ29tcGFyYXRvciIsMTU3NyksRCgxNTc4LDEsdHMsWjcpLGguS2Y9ZnVuY3Rpb24odCxuKXtFQW4obCh0LDM2KSxuKX0sSShyciwiSGllcmFyY2hpY2FsUG9ydER1bW15U2l6ZVByb2Nlc3NvciIsMTU3OCksRCgxNTc5LDEsdHMsZlopLGguS2Y9ZnVuY3Rpb24odCxuKXtPU24odGhpcyxsKHQsMzYpLG4pfSxoLmE9MCxJKHJyLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIiLDE1NzkpLEQoMTU4MCwxLGlpLFU5KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFBobihsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkocnIsIkhpZXJhcmNoaWNhbFBvcnRPcnRob2dvbmFsRWRnZVJvdXRlci8xIiwxNTgwKSxEKDE1ODEsMSxpaSxXZCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB6dm4obCh0LDEwKSxsKG4sMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIvMiIsMTU4MSksRCgxNTgyLDEsdHMsZFopLGguS2Y9ZnVuY3Rpb24odCxuKXtYeG4obCh0LDM2KSxuKX0sSShyciwiSGllcmFyY2hpY2FsUG9ydFBvc2l0aW9uUHJvY2Vzc29yIiwxNTgyKSxEKDE1ODMsMSx0cyxLdiksaC5LZj1mdW5jdGlvbih0LG4pe2ZJbih0aGlzLGwodCwzNikpfSxoLmE9MCxoLmM9MDt2YXIgQ0ssU0s7SShyciwiSGlnaERlZ3JlZU5vZGVMYXllcmluZ1Byb2Nlc3NvciIsMTU4MyksRCg1ODAsMSx7NTgwOjF9LGdaKSxoLmI9LTEsaC5kPS0xLEkocnIsIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvSGlnaERlZ3JlZU5vZGVJbmZvcm1hdGlvbiIsNTgwKSxEKDE1ODQsMSx7fSxwWiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gT08oKSxrYShsKHQsMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkocnIsIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTU4NCksRCgxNTg1LDEse30sZGopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIE9PKCkscXMobCh0LDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKHJyLCJIaWdoRGVncmVlTm9kZUxheWVyaW5nUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1ODUpLEQoMTU5MSwxLHRzLGJaKSxoLktmPWZ1bmN0aW9uKHQsbil7cEFuKHRoaXMsbCh0LDM2KSxuKX0sSShyciwiSHlwZXJlZGdlRHVtbXlNZXJnZXIiLDE1OTEpLEQoODA0LDEse30sdzRlKSxoLmE9ITEsaC5iPSExLGguYz0hMSxJKHJyLCJIeXBlcmVkZ2VEdW1teU1lcmdlci9NZXJnZVN0YXRlIiw4MDQpLEQoMTU5MiwxLHt9LGZTKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkocnIsIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQwJFR5cGUiLDE1OTIpLEQoMTU5MywxLHt9LGRTKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDEwKS5qLDE2KSl9LEkocnIsIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQxJFR5cGUiLDE1OTMpLEQoMTU5NCwxLGZyLGdqKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwxMikucD0tMX0sSShyciwiSHlwZXJlZGdlRHVtbXlNZXJnZXIvbGFtYmRhJDIkVHlwZSIsMTU5NCksRCgxNTk1LDEsdHMsc0kpLGguS2Y9ZnVuY3Rpb24odCxuKXtkQW4obCh0LDM2KSxuKX0sSShyciwiSHlwZXJub2Rlc1Byb2Nlc3NvciIsMTU5NSksRCgxNTk2LDEsdHMsZTgpLGguS2Y9ZnVuY3Rpb24odCxuKXtrQW4obCh0LDM2KSxuKX0sSShyciwiSW5MYXllckNvbnN0cmFpbnRQcm9jZXNzb3IiLDE1OTYpLEQoMTU5NywxLHRzLG1aKSxoLktmPWZ1bmN0aW9uKHQsbil7cDNuKGwodCwzNiksbil9LEkocnIsIklubmVybW9zdE5vZGVNYXJnaW5DYWxjdWxhdG9yIiwxNTk3KSxEKDE1OTgsMSx0cyxwaiksaC5LZj1mdW5jdGlvbih0LG4pe19Ebih0aGlzLGwodCwzNikpfSxoLmE9aWEsaC5iPWlhLGguYz1ncyxoLmQ9Z3M7dmFyIGtPbj1JKHJyLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIiLDE1OTgpO0QoMTU5OSwxLHt9LGJqKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTgpLmQuaX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkocnIsIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMCRUeXBlIiwxNTk5KSxEKDE2MDAsMSx7fSxRV2UpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIEJobih0aGlzLmEsR2UodCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShyciwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQxJFR5cGUiLDE2MDApLEQoMTYwMSwxLHt9LHZaKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTgpLmMuaX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkocnIsIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMiRUeXBlIiwxNjAxKSxEKDE2MDIsMSx7fSxKV2UpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIEZobih0aGlzLmEsR2UodCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShyciwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQzJFR5cGUiLDE2MDIpLEQoMTYwMywxLHt9LFpXZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gTmZuKHRoaXMuYSxHZSh0KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKHJyLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDQkVHlwZSIsMTYwMyksRCgxNjA0LDEse30sZVllKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBQZm4odGhpcy5hLEdlKHQpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkocnIsIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkNSRUeXBlIiwxNjA0KSxEKDgxLDIyLHszOjEsMzQ6MSwyMjoxLDgxOjEsMTk2OjF9LFdzKSxoLmRnPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZyl7Y2FzZSAxNTpyZXR1cm4gbmV3IFVqO2Nhc2UgMjI6cmV0dXJuIG5ldyBEZWU7Y2FzZSA0NzpyZXR1cm4gbmV3IE5lZTtjYXNlIDI4OmNhc2UgMzU6cmV0dXJuIG5ldyBDWjtjYXNlIDMyOnJldHVybiBuZXcgVjk7Y2FzZSA0MjpyZXR1cm4gbmV3IFlKO2Nhc2UgMTpyZXR1cm4gbmV3IFhKO2Nhc2UgNDE6cmV0dXJuIG5ldyBRSjtjYXNlIDU2OnJldHVybiBuZXcgd3dlKChkRSgpLGRCKSk7Y2FzZSAwOnJldHVybiBuZXcgd3dlKChkRSgpLGgxZSkpO2Nhc2UgMjpyZXR1cm4gbmV3IEpKO2Nhc2UgNTQ6cmV0dXJuIG5ldyBaSjtjYXNlIDMzOnJldHVybiBuZXcgclo7Y2FzZSA1MTpyZXR1cm4gbmV3IHVaO2Nhc2UgNTU6cmV0dXJuIG5ldyBmNTtjYXNlIDEzOnJldHVybiBuZXcgaFo7Y2FzZSAzODpyZXR1cm4gbmV3IFo3O2Nhc2UgNDQ6cmV0dXJuIG5ldyBmWjtjYXNlIDQwOnJldHVybiBuZXcgZFo7Y2FzZSA5OnJldHVybiBuZXcgS3Y7Y2FzZSA0OTpyZXR1cm4gbmV3IG5ydDtjYXNlIDM3OnJldHVybiBuZXcgYlo7Y2FzZSA0MzpyZXR1cm4gbmV3IHNJO2Nhc2UgMjc6cmV0dXJuIG5ldyBlODtjYXNlIDMwOnJldHVybiBuZXcgbVo7Y2FzZSAzOnJldHVybiBuZXcgcGo7Y2FzZSAxODpyZXR1cm4gbmV3IHlaO2Nhc2UgMjk6cmV0dXJuIG5ldyB4WjtjYXNlIDU6cmV0dXJuIG5ldyBmaztjYXNlIDUwOnJldHVybiBuZXcgd1o7Y2FzZSAzNDpyZXR1cm4gbmV3IHN6O2Nhc2UgMzY6cmV0dXJuIG5ldyBkNTtjYXNlIDUyOnJldHVybiBuZXcgSHJlO2Nhc2UgMTE6cmV0dXJuIG5ldyBHOTtjYXNlIDc6cmV0dXJuIG5ldyBWcmU7Y2FzZSAzOTpyZXR1cm4gbmV3IGFJO2Nhc2UgNDU6cmV0dXJuIG5ldyBaMztjYXNlIDE2OnJldHVybiBuZXcgSzk7Y2FzZSAxMDpyZXR1cm4gbmV3IFdldDtjYXNlIDQ4OnJldHVybiBuZXcgbWo7Y2FzZSAyMTpyZXR1cm4gbmV3IG9JO2Nhc2UgMjM6cmV0dXJuIG5ldyBXaWUoKEl3KCksb00pKTtjYXNlIDg6cmV0dXJuIG5ldyBjSTtjYXNlIDEyOnJldHVybiBuZXcgX1o7Y2FzZSA0OnJldHVybiBuZXcgdUk7Y2FzZSAxOTpyZXR1cm4gbmV3IGN6O2Nhc2UgMTc6cmV0dXJuIG5ldyBJWjtjYXNlIDUzOnJldHVybiBuZXcgT1o7Y2FzZSA2OnJldHVybiBuZXcgVGo7Y2FzZSAyNTpyZXR1cm4gbmV3IEtRZTtjYXNlIDQ2OnJldHVybiBuZXcgRlo7Y2FzZSAzMTpyZXR1cm4gbmV3IFZydDtjYXNlIDE0OnJldHVybiBuZXcgVVo7Y2FzZSAyNjpyZXR1cm4gbmV3IEZlZTtjYXNlIDIwOnJldHVybiBuZXcgQWo7Y2FzZSAyNDpyZXR1cm4gbmV3IFdpZSgoSXcoKSxNVykpO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKEZoZSsodGhpcy5mIT1udWxsP3RoaXMuZjoiIit0aGlzLmcpKSl9fTt2YXIgU0FlLF9BZSxBQWUsTEFlLE1BZSxEQWUsSUFlLE9BZSxOQWUsUEFlLEQ2LF9LLEFLLEJBZSxGQWUsUkFlLGpBZSwkQWUsekFlLHFBZSx6TCxIQWUsVkFlLFVBZSxHQWUsS0FlLGYxZSxMSyxNSyxXQWUsREssSUssT0ssTFQsdTQsbDQsWUFlLE5LLFBLLFhBZSxCSyxGSyxRQWUsSkFlLFpBZSxlTGUsUkssZDFlLGdCLGpLLCRLLHpLLHFLLHRMZSxuTGUsckxlLGlMZSxFT249RnIocnIsUmhlLDgxLEhyLHJidCxrMG4pLHE4dDtEKDE2MDUsMSx0cyx5WiksaC5LZj1mdW5jdGlvbih0LG4pe0NEbihsKHQsMzYpLG4pfSxJKHJyLCJJbnZlcnRlZFBvcnRQcm9jZXNzb3IiLDE2MDUpLEQoMTYwNiwxLHRzLHhaKSxoLktmPWZ1bmN0aW9uKHQsbil7eF9uKGwodCwzNiksbil9LEkocnIsIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IiLDE2MDYpLEQoMTYwNywxLHRpLGtaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTApLms9PShabigpLFBzKX0sSShyciwiTGFiZWxBbmROb2RlU2l6ZVByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjA3KSxEKDE2MDgsMSx0aSxFWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEwKS5rPT0oWm4oKSxVcyl9LEkocnIsIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTYwOCksRCgxNjA5LDEsZnIsdml0KSxoLkNkPWZ1bmN0aW9uKHQpe3Jsbih0aGlzLmIsdGhpcy5hLHRoaXMuYyxsKHQsMTApKX0saC5hPSExLGguYz0hMSxJKHJyLCJMYWJlbEFuZE5vZGVTaXplUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE2MDkpLEQoMTYxMCwxLHRzLGZrKSxoLktmPWZ1bmN0aW9uKHQsbil7UU1uKGwodCwzNiksbil9O3ZhciBIOHQ7SShyciwiTGFiZWxEdW1teUluc2VydGVyIiwxNjEwKSxEKDE2MTEsMSxMZCxZZCksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4gcWUoUShsKHQsNzIpLChOdCgpLGpkKSkpPT09cWUoKEYxKCksbkMpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHFlKFEobCh0LDcyKSwoTnQoKSxqZCkpKT09PXFlKChGMSgpLG5DKSl9LEkocnIsIkxhYmVsRHVtbXlJbnNlcnRlci8xIiwxNjExKSxEKDE2MTIsMSx0cyx3WiksaC5LZj1mdW5jdGlvbih0LG4pe2pNbihsKHQsMzYpLG4pfSxJKHJyLCJMYWJlbER1bW15UmVtb3ZlciIsMTYxMiksRCgxNjEzLDEsdGksVXYpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIFJ0KEJ0KFEobCh0LDcyKSwoTnQoKSx0ZGUpKSkpfSxJKHJyLCJMYWJlbER1bW15UmVtb3Zlci9sYW1iZGEkMCRUeXBlIiwxNjEzKSxEKDEzNzgsMSx0cyxzeiksaC5LZj1mdW5jdGlvbih0LG4pe0RNbih0aGlzLGwodCwzNiksbil9LGguYT1udWxsO3ZhciBnMWU7SShyciwiTGFiZWxEdW1teVN3aXRjaGVyIiwxMzc4KSxEKDI5MywxLHsyOTM6MX0sbm10KSxoLmM9MCxoLmQ9bnVsbCxoLmY9MCxJKHJyLCJMYWJlbER1bW15U3dpdGNoZXIvTGFiZWxEdW1teUluZm8iLDI5MyksRCgxMzc5LDEse30sVFopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGx4KCksbmV3IGJuKG51bGwsbmV3IGtuKGwodCwzMCkuYSwxNikpfSxJKHJyLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDAkVHlwZSIsMTM3OSksRCgxMzgwLDEsdGksZ1MpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGx4KCksbCh0LDEwKS5rPT0oWm4oKSxjdSl9LEkocnIsIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMSRUeXBlIiwxMzgwKSxEKDEzODEsMSx7fSx0WWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHZmbih0aGlzLmEsbCh0LDEwKSl9LEkocnIsIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMiRUeXBlIiwxMzgxKSxEKDEzODIsMSxmcixuWWUpLGguQ2Q9ZnVuY3Rpb24odCl7UmduKHRoaXMuYSxsKHQsMjkzKSl9LEkocnIsIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMyRUeXBlIiwxMzgyKSxEKDEzODMsMSxpaSxwUyksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBjZ24obCh0LDI5MyksbChuLDI5MykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkocnIsIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkNCRUeXBlIiwxMzgzKSxEKDgwMiwxLHRzLENaKSxoLktmPWZ1bmN0aW9uKHQsbil7eXZuKGwodCwzNiksbil9LEkocnIsIkxhYmVsTWFuYWdlbWVudFByb2Nlc3NvciIsODAyKSxEKDE2MTQsMSx0cyxkNSksaC5LZj1mdW5jdGlvbih0LG4pe1FDbihsKHQsMzYpLG4pfSxJKHJyLCJMYWJlbFNpZGVTZWxlY3RvciIsMTYxNCksRCgxNjIyLDEsdHMsRzkpLGguS2Y9ZnVuY3Rpb24odCxuKXtSQW4obCh0LDM2KSxuKX0sSShyciwiTGF5ZXJDb25zdHJhaW50UG9zdHByb2Nlc3NvciIsMTYyMiksRCgxNjIzLDEsdHMsVnJlKSxoLktmPWZ1bmN0aW9uKHQsbil7T0VuKGwodCwzNiksbil9O3ZhciBzTGU7SShyciwiTGF5ZXJDb25zdHJhaW50UHJlcHJvY2Vzc29yIiwxNjIzKSxEKDM3MSwyMix7MzoxLDM0OjEsMjI6MSwzNzE6MX0sZ3EpO3ZhciBwQixISyxWSyxwMWUsVjh0PUZyKHJyLCJMYXllckNvbnN0cmFpbnRQcmVwcm9jZXNzb3IvSGlkZGVuTm9kZUNvbm5lY3Rpb25zIiwzNzEsSHIsSmJuLEUwbiksVTh0O0QoMTYyNCwxLHRzLGFJKSxoLktmPWZ1bmN0aW9uKHQsbil7dE1uKGwodCwzNiksbil9LEkocnIsIkxheWVyU2l6ZUFuZEdyYXBoSGVpZ2h0Q2FsY3VsYXRvciIsMTYyNCksRCgxNjI1LDEsdHMsWjMpLGguS2Y9ZnVuY3Rpb24odCxuKXtCVG4obCh0LDM2KSxuKX0sSShyciwiTG9uZ0VkZ2VKb2luZXIiLDE2MjUpLEQoMTYyNiwxLHRzLEs5KSxoLktmPWZ1bmN0aW9uKHQsbil7RExuKGwodCwzNiksbil9LEkocnIsIkxvbmdFZGdlU3BsaXR0ZXIiLDE2MjYpLEQoMTYyNywxLHRzLFdldCksaC5LZj1mdW5jdGlvbih0LG4pe2ZEbih0aGlzLGwodCwzNiksbil9LGguZT0wLGguZj0wLGguaj0wLGguaz0wLGgubj0wLGgubz0wO3ZhciBHOHQsSzh0O0kocnIsIk5vZGVQcm9tb3Rpb24iLDE2MjcpLEQoMTYyOCwxLGlpLFNaKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEN5bihsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkocnIsIk5vZGVQcm9tb3Rpb24vMSIsMTYyOCksRCgxNjI5LDEsaWksYlMpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gU3luKGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShyciwiTm9kZVByb21vdGlvbi8yIiwxNjI5KSxEKDE2MzAsMSx7fSxoZCksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQyKSxZcSgpLEhuKCksITB9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKHJyLCJOb2RlUHJvbW90aW9uL2xhbWJkYSQwJFR5cGUiLDE2MzApLEQoMTYzMSwxLHt9LGFZZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4geDJuKHRoaXMuYSxsKHQsNDIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguYT0wLEkocnIsIk5vZGVQcm9tb3Rpb24vbGFtYmRhJDEkVHlwZSIsMTYzMSksRCgxNjMyLDEse30sb1llKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB5Mm4odGhpcy5hLGwodCw0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5hPTAsSShyciwiTm9kZVByb21vdGlvbi9sYW1iZGEkMiRUeXBlIiwxNjMyKSxEKDE2MzMsMSx0cyxtaiksaC5LZj1mdW5jdGlvbih0LG4pe2FJbihsKHQsMzYpLG4pfSxJKHJyLCJOb3J0aFNvdXRoUG9ydFBvc3Rwcm9jZXNzb3IiLDE2MzMpLEQoMTYzNCwxLHRzLG9JKSxoLktmPWZ1bmN0aW9uKHQsbil7JERuKGwodCwzNiksbil9LEkocnIsIk5vcnRoU291dGhQb3J0UHJlcHJvY2Vzc29yIiwxNjM0KSxEKDE2MzUsMSxpaSxXOSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiAkM24obCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJOb3J0aFNvdXRoUG9ydFByZXByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjM1KSxEKDE2MzYsMSx0cyxjSSksaC5LZj1mdW5jdGlvbih0LG4pe25BbihsKHQsMzYpLG4pfSxJKHJyLCJQYXJ0aXRpb25NaWRwcm9jZXNzb3IiLDE2MzYpLEQoMTYzNywxLHRpLHZqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBucyhsKHQsMTApLChOdCgpLEhUKSl9LEkocnIsIlBhcnRpdGlvbk1pZHByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjM3KSxEKDE2MzgsMSxmcixjWWUpLGguQ2Q9ZnVuY3Rpb24odCl7eHBuKHRoaXMuYSxsKHQsMTApKX0sSShyciwiUGFydGl0aW9uTWlkcHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2MzgpLEQoMTYzOSwxLHRzLF9aKSxoLktmPWZ1bmN0aW9uKHQsbil7ckNuKGwodCwzNiksbil9LEkocnIsIlBhcnRpdGlvblBvc3Rwcm9jZXNzb3IiLDE2MzkpLEQoMTY0MCwxLHRzLHVJKSxoLktmPWZ1bmN0aW9uKHQsbil7bUVuKGwodCwzNiksbil9LEkocnIsIlBhcnRpdGlvblByZXByb2Nlc3NvciIsMTY0MCksRCgxNjQxLDEsdGksQVopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIG5zKGwodCwxMCksKE50KCksSFQpKX0sSShyciwiUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE2NDEpLEQoMTY0MiwxLHt9LExaKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcgdncobmV3IGhyKGRyKHFzKGwodCwxMCkpLmEuS2MoKSxuZXcgaikpKSl9LEkocnIsIlBhcnRpdGlvblByZXByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNjQyKSxEKDE2NDMsMSx0aSx3aiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbzZuKGwodCwxOCkpfSxJKHJyLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTY0MyksRCgxNjQ0LDEsZnIsdDgpLGguQ2Q9ZnVuY3Rpb24odCl7cnluKGwodCwxOCkpfSxJKHJyLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTY0NCksRCgxNjQ1LDEsdHMsY3opLGguS2Y9ZnVuY3Rpb24odCxuKXtCX24obCh0LDM2KSxuKX07dmFyIGFMZSxXOHQsWTh0LFg4dCxvTGUsY0xlO0kocnIsIlBvcnRMaXN0U29ydGVyIiwxNjQ1KSxEKDE2NDgsMSxpaSx5aiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBLY3QobCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJQb3J0TGlzdFNvcnRlci9sYW1iZGEkMCRUeXBlIiwxNjQ4KSxEKDE2NTAsMSxpaSxuOCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBTbXQobCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJQb3J0TGlzdFNvcnRlci9sYW1iZGEkMSRUeXBlIiwxNjUwKSxEKDE2NDYsMSx7fSxNWiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gVEUoKSxsKHQsMTIpLmV9LEkocnIsIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQyJFR5cGUiLDE2NDYpLEQoMTY0NywxLHt9LGxJKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBURSgpLGwodCwxMikuZ30sSShyciwiUG9ydExpc3RTb3J0ZXIvbGFtYmRhJDMkVHlwZSIsMTY0NyksRCgxNjQ5LDEsaWksRFopLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRDduKGwodCwxMiksbChuLDEyKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShyciwiUG9ydExpc3RTb3J0ZXIvbGFtYmRhJDQkVHlwZSIsMTY0OSksRCgxNjUxLDEsdHMsSVopLGguS2Y9ZnVuY3Rpb24odCxuKXtHRW4obCh0LDM2KSxuKX0sSShyciwiUG9ydFNpZGVQcm9jZXNzb3IiLDE2NTEpLEQoMTY1MiwxLHRzLE9aKSxoLktmPWZ1bmN0aW9uKHQsbil7S1NuKGwodCwzNiksbil9LEkocnIsIlJldmVyc2VkRWRnZVJlc3RvcmVyIiwxNjUyKSxEKDE2NTcsMSx0cyxLUWUpLGguS2Y9ZnVuY3Rpb24odCxuKXtkN24odGhpcyxsKHQsMzYpLG4pfSxJKHJyLCJTZWxmTG9vcFBvcnRSZXN0b3JlciIsMTY1NyksRCgxNjU4LDEse30sTlopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDAkVHlwZSIsMTY1OCksRCgxNjU5LDEsdGkseGopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMCkuaz09KFpuKCksUHMpfSxJKHJyLCJTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMSRUeXBlIiwxNjU5KSxEKDE2NjAsMSx0aSxQWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbnMobCh0LDEwKSwoZnQoKSxoMykpfSxJKHJyLCJTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMiRUeXBlIiwxNjYwKSxEKDE2NjEsMSx7fSxCWiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbChRKGwodCwxMCksKGZ0KCksaDMpKSwzMzcpfSxJKHJyLCJTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMyRUeXBlIiwxNjYxKSxEKDE2NjIsMSxmcixpWWUpLGguQ2Q9ZnVuY3Rpb24odCl7QTluKHRoaXMuYSxsKHQsMzM3KSl9LEkocnIsIlNlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQ0JFR5cGUiLDE2NjIpLEQoODA1LDEsZnIsa2opLGguQ2Q9ZnVuY3Rpb24odCl7ejluKGwodCwxMDUpKX0sSShyciwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDUkVHlwZSIsODA1KSxEKDE2NjMsMSx0cyxGWiksaC5LZj1mdW5jdGlvbih0LG4pe3c2bihsKHQsMzYpLG4pfSxJKHJyLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IiLDE2NjMpLEQoMTY2NCwxLHt9LFJaKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkocnIsIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjY0KSxEKDE2NjUsMSx0aSxqWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEwKS5rPT0oWm4oKSxQcyl9LEkocnIsIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNjY1KSxEKDE2NjYsMSx0aSwkWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbnMobCh0LDEwKSwoZnQoKSxoMykpfSxJKHJyLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTY2NiksRCgxNjY3LDEsZnIsRWopLGguQ2Q9ZnVuY3Rpb24odCl7TThuKGwodCwxMCkpfSxJKHJyLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTY2NyksRCgxNjY4LDEse30selopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMTA1KS5mLDEpKX0sSShyciwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ0JFR5cGUiLDE2NjgpLEQoMTY2OSwxLGZyLHJZZSksaC5DZD1mdW5jdGlvbih0KXtubW4odGhpcy5hLGwodCwzNDApKX0sSShyciwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ1JFR5cGUiLDE2NjkpLEQoMTY3MCwxLHRpLHFaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiEhbCh0LDEwNSkuaX0sSShyciwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ2JFR5cGUiLDE2NzApLEQoMTY3MSwxLGZyLHNZZSksaC5DZD1mdW5jdGlvbih0KXtudW4odGhpcy5hLGwodCwxMDUpKX0sSShyciwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ3JFR5cGUiLDE2NzEpLEQoMTY1MywxLHRzLFRqKSxoLktmPWZ1bmN0aW9uKHQsbil7eFRuKGwodCwzNiksbil9LEkocnIsIlNlbGZMb29wUHJlUHJvY2Vzc29yIiwxNjUzKSxEKDE2NTQsMSx7fSxDaiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKGwodCwxMDUpLmYsMSkpfSxJKHJyLCJTZWxmTG9vcFByZVByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjU0KSxEKDE2NTUsMSx7fSxTaiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM0MCkuYX0sSShyciwiU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTY1NSksRCgxNjU2LDEsZnIsSFopLGguQ2Q9ZnVuY3Rpb24odCl7c2huKGwodCwxOCkpfSxJKHJyLCJTZWxmTG9vcFByZVByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNjU2KSxEKDE2NzIsMSx0cyxWcnQpLGguS2Y9ZnVuY3Rpb24odCxuKXt1OW4odGhpcyxsKHQsMzYpLG4pfSxJKHJyLCJTZWxmTG9vcFJvdXRlciIsMTY3MiksRCgxNjczLDEse30sVlopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDAkVHlwZSIsMTY3MyksRCgxNjc0LDEsdGksWTkpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMCkuaz09KFpuKCksUHMpfSxJKHJyLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkMSRUeXBlIiwxNjc0KSxEKDE2NzUsMSx0aSxyOCksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbnMobCh0LDEwKSwoZnQoKSxoMykpfSxJKHJyLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkMiRUeXBlIiwxNjc1KSxEKDE2NzYsMSx7fSxtUyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbChRKGwodCwxMCksKGZ0KCksaDMpKSwzMzcpfSxJKHJyLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkMyRUeXBlIiwxNjc2KSxEKDE2NzcsMSxmcixBZXQpLGguQ2Q9ZnVuY3Rpb24odCl7cHBuKHRoaXMuYSx0aGlzLmIsbCh0LDMzNykpfSxJKHJyLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkNCRUeXBlIiwxNjc3KSxEKDE2NzgsMSx0cyxVWiksaC5LZj1mdW5jdGlvbih0LG4pe2pDbihsKHQsMzYpLG4pfSxJKHJyLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3NvciIsMTY3OCksRCgxNjc5LDEsdGksaEkpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMCkuaz09KFpuKCksUHMpfSxJKHJyLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjc5KSxEKDE2ODAsMSx0aSx2UyksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gb3N0KGwodCwxMCkpLl9iKChOdCgpLHc0KSl9LEkocnIsIlNlbWlJbnRlcmFjdGl2ZUNyb3NzTWluUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2ODApLEQoMTY4MSwxLGlpLGZJKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG4zbihsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkocnIsIlNlbWlJbnRlcmFjdGl2ZUNyb3NzTWluUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE2ODEpLEQoMTY4MiwxLHt9LF9qKSxoLlZlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGtwbihsKHQsMTApLGwobiwxMCkpfSxJKHJyLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlIiwxNjgyKSxEKDE2ODQsMSx0cyxBaiksaC5LZj1mdW5jdGlvbih0LG4pe3VMbihsKHQsMzYpLG4pfSxJKHJyLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yIiwxNjg0KSxEKDE2ODUsMSx0aSxHWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEyKS5nLmMubGVuZ3RoIT0wfSxJKHJyLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE2ODUpLEQoMTY4NiwxLGZyLHVZZSksaC5DZD1mdW5jdGlvbih0KXtHOW4odGhpcy5hLGwodCwxMikpfSxJKHJyLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2ODYpLEQoMTc1OSw4MTcse30sbWZ0KSxoLmRmPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO3N3aXRjaCh0aGlzLmM9dCx0aGlzLmEuZyl7Y2FzZSAyOm49bmV3IGJ0LElzKEZpKG5ldyBibihudWxsLG5ldyBrbih0aGlzLmMuYS5iLDE2KSksbmV3IHJlZSksbmV3IEZldCh0aGlzLG4pKSxaTih0aGlzLG5ldyBXWiksVnUobixuZXcgTGopLG4uYy5sZW5ndGg9MCxJcyhGaShuZXcgYm4obnVsbCxuZXcga24odGhpcy5jLmEuYiwxNikpLG5ldyBNaiksbmV3IGhZZShuKSksWk4odGhpcyxuZXcgWVopLFZ1KG4sbmV3IFhaKSxuLmMubGVuZ3RoPTAscj12bnQodWNlKHh5KG5ldyBibihudWxsLG5ldyBrbih0aGlzLmMuYS5iLDE2KSksbmV3IGZZZSh0aGlzKSkpLG5ldyBRWiksSXMobmV3IGJuKG51bGwsbmV3IGtuKHRoaXMuYy5hLmEsMTYpKSxuZXcgRGV0KHIsbikpLFpOKHRoaXMsbmV3IFpaKSxWdShuLG5ldyBEaiksbi5jLmxlbmd0aD0wO2JyZWFrO2Nhc2UgMzphPW5ldyBidCxaTih0aGlzLG5ldyBLWiksbz12bnQodWNlKHh5KG5ldyBibihudWxsLG5ldyBrbih0aGlzLmMuYS5iLDE2KSksbmV3IGxZZSh0aGlzKSkpLG5ldyBKWiksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHRoaXMuYy5hLmIsMTYpKSxuZXcgZWVlKSxuZXcgT2V0KG8sYSkpLFpOKHRoaXMsbmV3IHRlZSksVnUoYSxuZXcgbmVlKSxhLmMubGVuZ3RoPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgTlFlKX19LGguYj0wLEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uIiwxNzU5KSxEKDE3NjAsMSxMZCxLWiksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUobCh0LDYwKS5nLDE1NCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBEZShsKHQsNjApLmcsMTU0KX0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDAkVHlwZSIsMTc2MCksRCgxNzYxLDEse30sbFllKSxoLlllPWZ1bmN0aW9uKHQpe3JldHVybiBMa24odGhpcy5hLGwodCw2MCkpfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMSRUeXBlIiwxNzYxKSxEKDE3NjksMSxRVSxMZXQpLGguZGU9ZnVuY3Rpb24oKXtGQSh0aGlzLmEsdGhpcy5iLC0xKX0saC5iPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEwJFR5cGUiLDE3NjkpLEQoMTc3MSwxLExkLFdaKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBEZShsKHQsNjApLmcsMTU0KX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKGwodCw2MCkuZywxNTQpfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTEkVHlwZSIsMTc3MSksRCgxNzcyLDEsZnIsTGopLGguQ2Q9ZnVuY3Rpb24odCl7bCh0LDM4MCkuZGUoKX0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEyJFR5cGUiLDE3NzIpLEQoMTc3MywxLHRpLE1qKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBEZShsKHQsNjApLmcsMTApfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTMkVHlwZSIsMTc3MyksRCgxNzc1LDEsZnIsaFllKSxoLkNkPWZ1bmN0aW9uKHQpe1k0bih0aGlzLmEsbCh0LDYwKSl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNCRUeXBlIiwxNzc1KSxEKDE3NzQsMSxRVSxOZXQpLGguZGU9ZnVuY3Rpb24oKXtGQSh0aGlzLmIsdGhpcy5hLC0xKX0saC5hPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE1JFR5cGUiLDE3NzQpLEQoMTc3NiwxLExkLFlaKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBEZShsKHQsNjApLmcsMTApfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUobCh0LDYwKS5nLDEwKX0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE2JFR5cGUiLDE3NzYpLEQoMTc3NywxLGZyLFhaKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwzODApLmRlKCl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNyRUeXBlIiwxNzc3KSxEKDE3NzgsMSx7fSxmWWUpLGguWWU9ZnVuY3Rpb24odCl7cmV0dXJuIE1rbih0aGlzLmEsbCh0LDYwKSl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxOCRUeXBlIiwxNzc4KSxEKDE3NzksMSx7fSxRWiksaC5XZT1mdW5jdGlvbigpe3JldHVybiAwfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTkkVHlwZSIsMTc3OSksRCgxNzYyLDEse30sSlopLGguV2U9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIkVHlwZSIsMTc2MiksRCgxNzgxLDEsZnIsRGV0KSxoLkNkPWZ1bmN0aW9uKHQpe2Vnbih0aGlzLmEsdGhpcy5iLGwodCwzMTYpKX0saC5hPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIwJFR5cGUiLDE3ODEpLEQoMTc4MCwxLFFVLElldCksaC5kZT1mdW5jdGlvbigpe0kydCh0aGlzLmEsdGhpcy5iLC0xKX0saC5iPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIxJFR5cGUiLDE3ODApLEQoMTc4MiwxLExkLFpaKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsNjApLCEwfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDYwKSwhMH0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIyJFR5cGUiLDE3ODIpLEQoMTc4MywxLGZyLERqKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwzODApLmRlKCl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQyMyRUeXBlIiwxNzgzKSxEKDE3NjMsMSx0aSxlZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKGwodCw2MCkuZywxMCl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQzJFR5cGUiLDE3NjMpLEQoMTc2NSwxLGZyLE9ldCksaC5DZD1mdW5jdGlvbih0KXt0Z24odGhpcy5hLHRoaXMuYixsKHQsNjApKX0saC5hPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDQkVHlwZSIsMTc2NSksRCgxNzY0LDEsUVUsUGV0KSxoLmRlPWZ1bmN0aW9uKCl7RkEodGhpcy5iLHRoaXMuYSwtMSl9LGguYT0wLEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ1JFR5cGUiLDE3NjQpLEQoMTc2NiwxLExkLHRlZSksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDYwKSwhMH0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCw2MCksITB9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ2JFR5cGUiLDE3NjYpLEQoMTc2NywxLGZyLG5lZSksaC5DZD1mdW5jdGlvbih0KXtsKHQsMzgwKS5kZSgpfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkNyRUeXBlIiwxNzY3KSxEKDE3NjgsMSx0aSxyZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKGwodCw2MCkuZywxNTQpfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkOCRUeXBlIiwxNzY4KSxEKDE3NzAsMSxmcixGZXQpLGguQ2Q9ZnVuY3Rpb24odCl7d3duKHRoaXMuYSx0aGlzLmIsbCh0LDYwKSl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ5JFR5cGUiLDE3NzApLEQoMTU4NiwxLHRzLG5ydCksaC5LZj1mdW5jdGlvbih0LG4pe0ZMbih0aGlzLGwodCwzNiksbil9O3ZhciBROHQ7SShhYSwiSG9yaXpvbnRhbEdyYXBoQ29tcGFjdG9yIiwxNTg2KSxEKDE1ODcsMSx7fSxkWWUpLGguZmY9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG87cmV0dXJuIHE2ZSh0LG4pfHwocj1HNSh0KSxhPUc1KG4pLHImJnIuaz09KFpuKCksVXMpfHxhJiZhLms9PShabigpLFVzKSk/MDoobz1sKFEodGhpcy5hLmEsKGZ0KCksJDYpKSwzMTIpLHpobihvLHI/ci5rOihabigpLEFhKSxhP2EuazooWm4oKSxBYSkpKX0saC5nZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbztyZXR1cm4gcTZlKHQsbik/MToocj1HNSh0KSxhPUc1KG4pLG89bChRKHRoaXMuYS5hLChmdCgpLCQ2KSksMzEyKSxPeWUobyxyP3IuazooWm4oKSxBYSksYT9hLms6KFpuKCksQWEpKSl9LEkoYWEsIkhvcml6b250YWxHcmFwaENvbXBhY3Rvci8xIiwxNTg3KSxEKDE1ODgsMSx7fSxJaiksaC5lZj1mdW5jdGlvbih0LG4pe3JldHVybiBwXygpLHQuYS5pPT0wfSxJKGFhLCJIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvbGFtYmRhJDAkVHlwZSIsMTU4OCksRCgxNTg5LDEse30sZ1llKSxoLmVmPWZ1bmN0aW9uKHQsbil7cmV0dXJuIENwbih0aGlzLmEsdCxuKX0sSShhYSwiSG9yaXpvbnRhbEdyYXBoQ29tcGFjdG9yL2xhbWJkYSQxJFR5cGUiLDE1ODkpLEQoMTczMCwxLHt9LEdsdCk7dmFyIEo4dCxaOHQ7SShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lciIsMTczMCksRCgxNzM4LDEsdGksd1MpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPW51bGx9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvMG1ldGhvZHJlZiRub25OdWxsJFR5cGUiLDE3MzgpLEQoMTczMSwxLHt9LGllZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gdTAoKSx4YyhRKGwobCh0LDYwKS5nLDEwKSwoZnQoKSx6aSkpKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMCRUeXBlIiwxNzMxKSxEKDE3MzIsMSx7fSxzZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCkscjF0KGwobCh0LDYwKS5nLDE1NCkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxJFR5cGUiLDE3MzIpLEQoMTc0MSwxLHRpLE9qKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB1MCgpLERlKGwodCw2MCkuZywxMCl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEwJFR5cGUiLDE3NDEpLEQoMTc0MiwxLGZyLGFlZSksaC5DZD1mdW5jdGlvbih0KXtNcG4obCh0LDYwKSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDExJFR5cGUiLDE3NDIpLEQoMTc0MywxLHRpLG9lZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gdTAoKSxEZShsKHQsNjApLmcsMTU0KX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTIkVHlwZSIsMTc0MyksRCgxNzQ3LDEsZnIsY2VlKSxoLkNkPWZ1bmN0aW9uKHQpe280bihsKHQsNjApKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTMkVHlwZSIsMTc0NyksRCgxNzQ0LDEsZnIscFllKSxoLkNkPWZ1bmN0aW9uKHQpe05sbih0aGlzLmEsbCh0LDgpKX0saC5hPTAsSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTQkVHlwZSIsMTc0NCksRCgxNzQ1LDEsZnIsYlllKSxoLkNkPWZ1bmN0aW9uKHQpe0Jsbih0aGlzLmEsbCh0LDExNikpfSxoLmE9MCxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNSRUeXBlIiwxNzQ1KSxEKDE3NDYsMSxmcixtWWUpLGguQ2Q9ZnVuY3Rpb24odCl7UGxuKHRoaXMuYSxsKHQsOCkpfSxoLmE9MCxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNiRUeXBlIiwxNzQ2KSxEKDE3NDgsMSx7fSx1ZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksbmV3IGJuKG51bGwsbmV3IHZ3KG5ldyBocihkcihxcyhsKHQsMTApKS5hLktjKCksbmV3IGopKSkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNyRUeXBlIiwxNzQ4KSxEKDE3NDksMSx0aSxsZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksRG8obCh0LDE4KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDE4JFR5cGUiLDE3NDkpLEQoMTc1MCwxLGZyLHZZZSksaC5DZD1mdW5jdGlvbih0KXtRdm4odGhpcy5hLGwodCwxOCkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxOSRUeXBlIiwxNzUwKSxEKDE3MzQsMSxmcix3WWUpLGguQ2Q9ZnVuY3Rpb24odCl7VGJuKHRoaXMuYSxsKHQsMTU0KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIkVHlwZSIsMTczNCksRCgxNzUxLDEse30saGVlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB1MCgpLG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjAkVHlwZSIsMTc1MSksRCgxNzUyLDEse30sTmopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksbmV3IGJuKG51bGwsbmV3IHZ3KG5ldyBocihkcihxcyhsKHQsMTApKS5hLktjKCksbmV3IGopKSkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMSRUeXBlIiwxNzUyKSxEKDE3NTMsMSx7fSxmZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksbChRKGwodCwxOCksKGZ0KCksZnYpKSwxNSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIyJFR5cGUiLDE3NTMpLEQoMTc1NCwxLHRpLFBqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBxaG4obCh0LDE1KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIzJFR5cGUiLDE3NTQpLEQoMTc1NSwxLGZyLHlZZSksaC5DZD1mdW5jdGlvbih0KXt2a24odGhpcy5hLGwodCwxNSkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyNCRUeXBlIiwxNzU1KSxEKDE3MzMsMSxmcixSZXQpLGguQ2Q9ZnVuY3Rpb24odCl7eG1uKHRoaXMuYSx0aGlzLmIsbCh0LDE1NCkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQzJFR5cGUiLDE3MzMpLEQoMTczNSwxLHt9LGRlZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gdTAoKSxuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDQkVHlwZSIsMTczNSksRCgxNzM2LDEse30sZ2VlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB1MCgpLG5ldyBibihudWxsLG5ldyB2dyhuZXcgaHIoZHIocXMobCh0LDEwKSkuYS5LYygpLG5ldyBqKSkpKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkNSRUeXBlIiwxNzM2KSxEKDE3MzcsMSx7fSxwZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksbChRKGwodCwxOCksKGZ0KCksZnYpKSwxNSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDYkVHlwZSIsMTczNyksRCgxNzM5LDEsZnIseFllKSxoLkNkPWZ1bmN0aW9uKHQpe0Rrbih0aGlzLmEsbCh0LDE1KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDgkVHlwZSIsMTczOSksRCgxNzQwLDEsZnIsamV0KSxoLkNkPWZ1bmN0aW9uKHQpe2Fobih0aGlzLmEsdGhpcy5iLGwodCwxNTQpKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkOSRUeXBlIiwxNzQwKSxEKDE3MjksMSx7fSx5UyksaC5jZj1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmO2Zvcih0aGlzLmE9dCx0aGlzLmQ9bmV3IGppZSx0aGlzLmM9V2Uoel9lLFJuLDEyNSx0aGlzLmEuYS5hLmMubGVuZ3RoLDAsMSksdGhpcy5iPTAscj1uZXcgRyh0aGlzLmEuYS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMzE2KSxuLmQ9dGhpcy5iLGY9aHcock8obmV3IFNtLG4pLHRoaXMuZCksdGhpcy5jW3RoaXMuYl09ZiwrK3RoaXMuYjtmb3IoV01uKHRoaXMpLFdEbih0aGlzKSxRVG4odGhpcyksb2xlKGJhZSh0aGlzLmQpLG5ldyBMOCksbz1uZXcgRyh0aGlzLmEuYS5iKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksNjApLGEuZC5jPXRoaXMuY1thLmEuZF0uZSthLmIuYX0saC5iPTAsSShhYSwiTmV0d29ya1NpbXBsZXhDb21wYWN0aW9uIiwxNzI5KSxEKDE1NCwxLHszNDoxLDE1NDoxfSxRQSksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gY3duKHRoaXMsbCh0LDE1NCkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHIxdCh0aGlzKX0sSShhYSwiVmVydGljYWxTZWdtZW50IiwxNTQpLEQoODQxLDEse30sTnhlKSxoLmM9MCxoLmU9MCxoLmk9MCxJKGdMLCJCZXR3ZWVuTGF5ZXJFZGdlVHdvTm9kZUNyb3NzaW5nc0NvdW50ZXIiLDg0MSksRCg2NzcsMSx7Njc3OjF9LERmdCksaC5JYj1mdW5jdGlvbigpe3JldHVybiJBZGphY2VuY3lMaXN0IFtub2RlPSIrdGhpcy5kKyIsIGFkamFjZW5jaWVzPSAiK3RoaXMuYSsiXSJ9LGguYj0wLGguYz0wLGguZj0wLEkoZ0wsIkJldHdlZW5MYXllckVkZ2VUd29Ob2RlQ3Jvc3NpbmdzQ291bnRlci9BZGphY2VuY3lMaXN0Iiw2NzcpLEQoMjk0LDEsezM0OjEsMjk0OjF9LGxydCksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gVGRuKHRoaXMsbCh0LDI5NCkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkFkamFjZW5jeSBbcG9zaXRpb249Iit0aGlzLmMrIiwgY2FyZGluYWxpdHk9Iit0aGlzLmErIiwgY3VycmVudENhcmRpbmFsaXR5PSIrdGhpcy5iKyJdIn0saC5hPTAsaC5iPTAsaC5jPTAsSShnTCwiQmV0d2VlbkxheWVyRWRnZVR3b05vZGVDcm9zc2luZ3NDb3VudGVyL0FkamFjZW5jeUxpc3QvQWRqYWNlbmN5IiwyOTQpLEQoMjAyNiwxLHt9LGNwdCksaC5iPTAsaC5lPSExLEkoZ0wsIkNyb3NzaW5nTWF0cml4RmlsbGVyIiwyMDI2KTt2YXIgZXh0PWtzKGJnLCJJSW5pdGlhbGl6YWJsZSIpO0QoMTg2NywxLHpQLHpldCksaC5nZz1mdW5jdGlvbih0LG4scixhLG8sZil7fSxoLmlnPWZ1bmN0aW9uKHQsbixyKXt9LGguZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jIT0oSXcoKSxvTSl9LGguZmc9ZnVuY3Rpb24oKXt0aGlzLmU9V2UoVnIsZGksMjgsdGhpcy5kLDE1LDEpfSxoLmhnPWZ1bmN0aW9uKHQsbil7blt0XVswXS5jLnA9dH0saC5qZz1mdW5jdGlvbih0LG4scixhKXsrK3RoaXMuZH0saC5rZz1mdW5jdGlvbigpe3JldHVybiEwfSxoLmxnPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiBZMHQodGhpcyx0LG4sciksT21uKHRoaXMsbil9LGgubWc9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gcj1NdW4obix0Lmxlbmd0aCksWTB0KHRoaXMsdCxyLG4pLGgwdCh0aGlzLHIpfSxoLmQ9MCxJKGdMLCJHcmVlZHlTd2l0Y2hIZXVyaXN0aWMiLDE4NjcpLEQoMjAyOSwxLHt9LGlzdCksaC5iPTAsaC5kPTAsSShnTCwiTm9ydGhTb3V0aEVkZ2VOZWlnaGJvdXJpbmdOb2RlQ3Jvc3NpbmdzQ291bnRlciIsMjAyOSksRCgyMDE2LDEse30sJGJ0KSxoLmE9ITEsSShnTCwiU3dpdGNoRGVjaWRlciIsMjAxNiksRCgxMDUsMSx7MTA1OjF9LGJwdCksaC5hPW51bGwsaC5jPW51bGwsaC5pPW51bGwsSShGeCwiU2VsZkh5cGVyTG9vcCIsMTA1KSxEKDIwMTMsMSx7fSxyZHQpLGguYz0wLGguZT0wLEkoRngsIlNlbGZIeXBlckxvb3BMYWJlbHMiLDIwMTMpLEQoNDIxLDIyLHszOjEsMzQ6MSwyMjoxLDQyMToxfSxwcSk7dmFyIFZ4LE1ULERULGIxZSx0eHQ9RnIoRngsIlNlbGZIeXBlckxvb3BMYWJlbHMvQWxpZ25tZW50Iiw0MjEsSHIsUWJuLFQwbiksbnh0O0QoMzQwLDEsezM0MDoxfSxCdXQpLEkoRngsIlNlbGZMb29wRWRnZSIsMzQwKSxEKDMzNywxLHszMzc6MX0saWR0KSxoLmE9ITEsSShGeCwiU2VsZkxvb3BIb2xkZXIiLDMzNyksRCgxNzkwLDEsdGksSGopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERvKGwodCwxOCkpfSxJKEZ4LCJTZWxmTG9vcEhvbGRlci9sYW1iZGEkMCRUeXBlIiwxNzkwKSxEKDExMywxLHsxMTM6MX0sdWR0KSxoLmE9ITEsaC5jPSExLEkoRngsIlNlbGZMb29wUG9ydCIsMTEzKSxEKDE4NTUsMSx0aSx2ZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERvKGwodCwxOCkpfSxJKEZ4LCJTZWxmTG9vcFBvcnQvbGFtYmRhJDAkVHlwZSIsMTg1NSksRCgzNzUsMjIsezM6MSwzNDoxLDIyOjEsMzc1OjF9LGNPKTt2YXIgVUssYkIsR0ssS0ssV0sscnh0PUZyKEZ4LCJTZWxmTG9vcFR5cGUiLDM3NSxIcixxbW4sQzBuKSxpeHQ7RCgxNzk4LDEse30sS3JlKTt2YXIgc3h0LGF4dCxveHQsY3h0O0koQmgsIlBvcnRSZXN0b3JlciIsMTc5OCksRCgzNzIsMjIsezM6MSwzNDoxLDIyOjEsMzcyOjF9LHZzZSk7dmFyIGEzLFJiLG8zLG0xZT1GcihCaCwiUG9ydFJlc3RvcmVyL1BvcnRTaWRlQXJlYSIsMzcyLEhyLFIybix4MG4pLHV4dDtEKDE3OTksMSx7fSx4UyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gQ2IoKSxsKHQsMTUpLk9jKCl9LEkoQmgsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMCRUeXBlIiwxNzk5KSxEKDE4MDAsMSxmcixtZWUpLGguQ2Q9ZnVuY3Rpb24odCl7Q2IoKSxsKHQsMTEzKS5jPSExfSxJKEJoLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDEkVHlwZSIsMTgwMCksRCgxODA5LDEsdGksQmopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIENiKCksbCh0LDEyKS5qPT0oQ3QoKSxlcil9LEkoQmgsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMTAkVHlwZSIsMTgwOSksRCgxODEwLDEse30sRmopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIENiKCksbCh0LDExMykuZH0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQxMSRUeXBlIiwxODEwKSxEKDE4MTEsMSxmcixrWWUpLGguQ2Q9ZnVuY3Rpb24odCl7UHVuKHRoaXMuYSxsKHQsMTIpKX0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQxMiRUeXBlIiwxODExKSxEKDE4MDEsMSxmcixFWWUpLGguQ2Q9ZnVuY3Rpb24odCl7UWhuKHRoaXMuYSxsKHQsMTA1KSl9LEkoQmgsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMiRUeXBlIiwxODAxKSxEKDE4MDIsMSxpaSxSaiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBEd24obCh0LDExMyksbChuLDExMykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoQmgsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMyRUeXBlIiwxODAyKSxEKDE4MDMsMSx0aSxqaiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gQ2IoKSxsKHQsMTEzKS5jfSxJKEJoLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDQkVHlwZSIsMTgwMyksRCgxODA0LDEsdGksR3YpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGszbihsKHQsMTIpKX0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ1JFR5cGUiLDE4MDQpLEQoMTgwNSwxLHRpLGJlZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gQ2IoKSxsKHQsMTIpLmo9PShDdCgpLFFuKX0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ2JFR5cGUiLDE4MDUpLEQoMTgwNiwxLHRpLCRqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBDYigpLGwodCwxMikuaj09KEN0KCksYXIpfSxJKEJoLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDckVHlwZSIsMTgwNiksRCgxODA3LDEsdGksemopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRtbihsKHQsMTIpKX0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ4JFR5cGUiLDE4MDcpLEQoMTgwOCwxLHRpLHFqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBDYigpLGwodCwxMikuaj09KEN0KCksRHIpfSxJKEJoLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDkkVHlwZSIsMTgwOCksRCgyNzYsMjIsezM6MSwzNDoxLDIyOjEsMjc2OjF9LFo4KTt2YXIgdjFlLHcxZSx5MWUseDFlLGsxZSxFMWUsVDFlLEMxZSx1TGU9RnIoQmgsIlBvcnRTaWRlQXNzaWduZXIvVGFyZ2V0IiwyNzYsSHIsbXduLFMwbiksbHh0O0QoMTc5MSwxLHt9LGRJKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBGaShuZXcgYm4obnVsbCxuZXcga24obCh0LDEwNSkuaiwxNikpLG5ldyBWail9LEkoQmgsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDEkVHlwZSIsMTc5MSksRCgxNzkyLDEse30sZzUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMTMpLmR9LEkoQmgsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDIkVHlwZSIsMTc5MiksRCgxNzkzLDEsZnIsd2VlKSxoLkNkPWZ1bmN0aW9uKHQpe2xhKGwodCwxMiksKEN0KCksUW4pKX0sSShCaCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkMyRUeXBlIiwxNzkzKSxEKDE3OTQsMSx7fSx5ZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMTMpLmR9LEkoQmgsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDQkVHlwZSIsMTc5NCksRCgxNzk1LDEsZnIsVFllKSxoLkNkPWZ1bmN0aW9uKHQpe3Fjbih0aGlzLmEsbCh0LDEyKSl9LEkoQmgsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDUkVHlwZSIsMTc5NSksRCgxNzk2LDEsaWksaTgpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gR2duKGwodCwxMDUpLGwobiwxMDUpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKEJoLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ2JFR5cGUiLDE3OTYpLEQoMTc5NywxLGlpLGtTKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHBkbihsKHQsMTEzKSxsKG4sMTEzKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShCaCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkNyRUeXBlIiwxNzk3KSxEKDgyMCwxLHRpLFZqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTEzKS5jfSxJKEJoLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ4JFR5cGUiLDgyMCksRCgyMTA4LDEse30pLEkoRGIsIkFic3RyYWN0U2VsZkxvb3BSb3V0ZXIiLDIxMDgpLEQoMTgxNiwxLGlpLHhlZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBLZm4obCh0LDEwNSksbChuLDEwNSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoRGIsZzN0LDE4MTYpLEQoMTgxNywxLGlpLGtlZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBHZm4obCh0LDEwNSksbChuLDEwNSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoRGIscDN0LDE4MTcpLEQoMTg1NiwyMTA4LHt9LEVlZSksaC5uZz1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJ9LEkoRGIsIk9ydGhvZ29uYWxTZWxmTG9vcFJvdXRlciIsMTg1NiksRCgxODU4LDEsZnIsJGV0KSxoLkNkPWZ1bmN0aW9uKHQpe1Y4ZSh0aGlzLmIsdGhpcy5hLGwodCw4KSl9LEkoRGIsIk9ydGhvZ29uYWxTZWxmTG9vcFJvdXRlci9sYW1iZGEkMCRUeXBlIiwxODU4KSxEKDE4NTcsMTg1Nix7fSxUZWUpLGgubmc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87cmV0dXJuIGE9dC5jLmQsUGsociwwLE9pKEphKGEubiksYS5hKSksbz10LmQuZCx1aShyLE9pKEphKG8ubiksby5hKSksWF9uKHIpfSxJKERiLCJQb2x5bGluZVNlbGZMb29wUm91dGVyIiwxODU3KSxEKDE4MTIsMSx7fSxXcmUpLGguYT1udWxsO3ZhciBJNjtJKERiLCJSb3V0aW5nRGlyZWN0b3IiLDE4MTIpLEQoMTgxMywxLGlpLENlZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBmZG4obCh0LDExMyksbChuLDExMykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoRGIsIlJvdXRpbmdEaXJlY3Rvci9sYW1iZGEkMCRUeXBlIiwxODEzKSxEKDE4MTQsMSx7fSxTZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGVxKCksbCh0LDEwNSkuan0sSShEYiwiUm91dGluZ0RpcmVjdG9yL2xhbWJkYSQxJFR5cGUiLDE4MTQpLEQoMTgxNSwxLGZyLF9lZSksaC5DZD1mdW5jdGlvbih0KXtlcSgpLGwodCwxNSkuamQoSTYpfSxJKERiLCJSb3V0aW5nRGlyZWN0b3IvbGFtYmRhJDIkVHlwZSIsMTgxNSksRCgxODE4LDEse30sQWVlKSxJKERiLCJSb3V0aW5nU2xvdEFzc2lnbmVyIiwxODE4KSxEKDE4MTksMSx0aSxDWWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIG1sbih0aGlzLmEsbCh0LDEwNSkpfSxJKERiLCJSb3V0aW5nU2xvdEFzc2lnbmVyL2xhbWJkYSQwJFR5cGUiLDE4MTkpLEQoMTgyMCwxLGlpLFNZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB6ZG4odGhpcy5hLGwodCwxMDUpLGwobiwxMDUpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKERiLCJSb3V0aW5nU2xvdEFzc2lnbmVyL2xhbWJkYSQxJFR5cGUiLDE4MjApLEQoMTg1OSwxODU2LHt9LExlZSksaC5uZz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGc7cmV0dXJuIGE9emUoR2UodFUodC5iLmcuYiwoTnQoKSxINikpKSksZz1uZXcgZnJ0KGhlKGxlKEVhLDEpLGR0LDgsMCxbKGY9dC5jLmQsT2kobmV3IEVvKGYubiksZi5hKSldKSksQ1RuKHQsbixyLGcsYSksdWkoZywobz10LmQuZCxPaShuZXcgRW8oby5uKSxvLmEpKSksTGR0KG5ldyBTa2UoZykpfSxJKERiLCJTcGxpbmVTZWxmTG9vcFJvdXRlciIsMTg1OSksRCg1ODYsMSxpaSxwZnQsT2l0KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGR3dCh0aGlzLGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShxRWUsIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvciIsNTg2KSxEKDE4MjEsMSx0aSxNZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMikuZS5jLmxlbmd0aCE9MH0sSShxRWUsIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkMCRUeXBlIiwxODIxKSxEKDgyMSwxLGlpLFYwdCxTY3QpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQXN0KHRoaXMsdCxuKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxoLmI9ITEsSShxRWUsIk1vZGVsT3JkZXJQb3J0Q29tcGFyYXRvciIsODIxKSxEKDgxNSwxLHt9LEVTKSxoLm9nPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGY7Zm9yKG89aXB0KG4pLHI9bmV3IGJ0LGY9bi5mL28sYT0xO2E8bzsrK2EpdnQocixwdChZcihaYyhiLk1hdGgucm91bmQoYSpmKSkpKSk7cmV0dXJuIHJ9LGgucGc9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShPZCwiQVJEQ3V0SW5kZXhIZXVyaXN0aWMiLDgxNSksRCgxNTQ0LDEsdHMsVWopLGguS2Y9ZnVuY3Rpb24odCxuKXtnX24obCh0LDM2KSxuKX0sSShPZCwiQnJlYWtpbmdQb2ludEluc2VydGVyIiwxNTQ0KSxEKDMxMywxLHszMTM6MX0sbzZlKSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bmV3IHRiLHQuYSs9IkJQSW5mb1siLHQuYSs9YAoJc3RhcnQ9YCx3dSh0LHRoaXMuaSksdC5hKz1gCgllbmQ9YCx3dSh0LHRoaXMuYSksdC5hKz1gCglub2RlU3RhcnRFZGdlPWAsd3UodCx0aGlzLmUpLHQuYSs9YAoJc3RhcnRFbmRFZGdlPWAsd3UodCx0aGlzLmopLHQuYSs9YAoJb3JpZ2luYWxFZGdlPWAsd3UodCx0aGlzLmYpLHQuYSs9YAoJc3RhcnRJbkxheWVyRHVtbXk9YCx3dSh0LHRoaXMuayksdC5hKz1gCglzdGFydEluTGF5ZXJFZGdlPWAsd3UodCx0aGlzLm4pLHQuYSs9YAoJZW5kSW5MYXllckR1bW15PWAsd3UodCx0aGlzLmIpLHQuYSs9YAoJZW5kSW5MYXllckVkZ2U9YCx3dSh0LHRoaXMuYyksdC5hfSxJKE9kLCJCcmVha2luZ1BvaW50SW5zZXJ0ZXIvQlBJbmZvIiwzMTMpLEQoNjYxLDEsezY2MToxfSxCWWUpLGguYT0hMSxoLmI9MCxoLmM9MCxJKE9kLCJCcmVha2luZ1BvaW50SW5zZXJ0ZXIvQ3V0Iiw2NjEpLEQoMTU0NSwxLHRzLERlZSksaC5LZj1mdW5jdGlvbih0LG4pe01UbihsKHQsMzYpLG4pfSxJKE9kLCJCcmVha2luZ1BvaW50UHJvY2Vzc29yIiwxNTQ1KSxEKDE1NDYsMSx0aSxJZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGlodChsKHQsMTApKX0sSShPZCwiQnJlYWtpbmdQb2ludFByb2Nlc3Nvci8wbWV0aG9kcmVmJGlzRW5kJFR5cGUiLDE1NDYpLEQoMTU0NywxLHRpLE9lZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gc2h0KGwodCwxMCkpfSxJKE9kLCJCcmVha2luZ1BvaW50UHJvY2Vzc29yLzFtZXRob2RyZWYkaXNTdGFydCRUeXBlIiwxNTQ3KSxEKDE1NDgsMSx0cyxOZWUpLGguS2Y9ZnVuY3Rpb24odCxuKXtKVG4odGhpcyxsKHQsMzYpLG4pfSxJKE9kLCJCcmVha2luZ1BvaW50UmVtb3ZlciIsMTU0OCksRCgxNTQ5LDEsZnIsUGVlKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwxMzEpLms9ITB9LEkoT2QsIkJyZWFraW5nUG9pbnRSZW1vdmVyL2xhbWJkYSQwJFR5cGUiLDE1NDkpLEQoODExLDEse30sTTllKSxoLmI9MCxoLmU9MCxoLmY9MCxoLmo9MCxJKE9kLCJHcmFwaFN0YXRzIiw4MTEpLEQoODEyLDEse30sR2opLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYi5NYXRoLm1heCh6ZShHZSh0KSksemUoR2UobikpKX0sSShPZCwiR3JhcGhTdGF0cy8wbWV0aG9kcmVmJG1heCRUeXBlIiw4MTIpLEQoODEzLDEse30sS2opLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYi5NYXRoLm1heCh6ZShHZSh0KSksemUoR2UobikpKX0sSShPZCwiR3JhcGhTdGF0cy8ybWV0aG9kcmVmJG1heCRUeXBlIiw4MTMpLEQoMTcyNiwxLHt9LEJlZSksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiBaMW4oR2UodCksR2UobikpfSxJKE9kLCJHcmFwaFN0YXRzL2xhbWJkYSQxJFR5cGUiLDE3MjYpLEQoMTcyNywxLHt9LF9ZZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbGR0KHRoaXMuYSxsKHQsMzApKX0sSShPZCwiR3JhcGhTdGF0cy9sYW1iZGEkMiRUeXBlIiwxNzI3KSxEKDE3MjgsMSx7fSxBWWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHRidCh0aGlzLmEsbCh0LDMwKSl9LEkoT2QsIkdyYXBoU3RhdHMvbGFtYmRhJDYkVHlwZSIsMTcyOCksRCg4MTQsMSx7fSxXaiksaC5vZz1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByPWwoUSh0LChOdCgpLHNEZSkpLDE1KSxyfHwoQ24oKSxDbigpLF9vKX0saC5wZz1mdW5jdGlvbigpe3JldHVybiExfSxJKE9kLCJJQ3V0SW5kZXhDYWxjdWxhdG9yL01hbnVhbEN1dEluZGV4Q2FsY3VsYXRvciIsODE0KSxEKDgxNiwxLHt9LFlqKSxoLm9nPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmU7Zm9yKFplPShuLm49PW51bGwmJlJkdChuKSxuLm4pLEU9KG4uZD09bnVsbCYmUmR0KG4pLG4uZCksJGU9V2UoTmEsWm8sMjgsWmUubGVuZ3RoLDE1LDEpLCRlWzBdPVplWzBdLFRlPVplWzBdLEM9MTtDPFplLmxlbmd0aDtDKyspJGVbQ109JGVbQy0xXStaZVtDXSxUZSs9WmVbQ107Zm9yKG89aXB0KG4pLTEsZz1sKFEodCwoTnQoKSxhRGUpKSwxNykuYSxhPWlhLHI9bmV3IGJ0LHo9Yi5NYXRoLm1heCgwLG8tZyk7ejw9Yi5NYXRoLm1pbihuLmYtMSxvK2cpO3orKyl7aWYodGU9VGUvKHorMSksZmU9MCxMPTEsZj1uZXcgYnQsTWU9aWEsQj0wLHc9MCxKPUVbMF0sej09MClNZT1UZSx3PShuLmc9PW51bGwmJihuLmc9RWZ0KG4sbmV3IEtqKSksemUobi5nKSk7ZWxzZXtmb3IoO0w8bi5mOykkZVtMLTFdLWZlPj10ZSYmKHZ0KGYscHQoTCkpLE1lPWIuTWF0aC5tYXgoTWUsJGVbTC0xXS1CKSx3Kz1KLGZlKz0kZVtMLTFdLWZlLEI9JGVbTC0xXSxKPUVbTF0pLEo9Yi5NYXRoLm1heChKLEVbTF0pLCsrTDt3Kz1KfVY9Yi5NYXRoLm1pbigxL01lLDEvbi5iL3cpLFY+YSYmKGE9VixyPWYpfXJldHVybiByfSxoLnBnPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoT2QsIk1TREN1dEluZGV4SGV1cmlzdGljIiw4MTYpLEQoMTY4MywxLHRzLEZlZSksaC5LZj1mdW5jdGlvbih0LG4peyRBbihsKHQsMzYpLG4pfSxJKE9kLCJTaW5nbGVFZGdlR3JhcGhXcmFwcGVyIiwxNjgzKSxEKDIzMiwyMix7MzoxLDM0OjEsMjI6MSwyMzI6MX0sRV8pO3ZhciBPNixJVCxPVCxoNCxxTCxONixOVD1GcihvdSwiQ2VudGVyRWRnZUxhYmVsUGxhY2VtZW50U3RyYXRlZ3kiLDIzMixIcixDdm4sXzBuKSxoeHQ7RCg0MzEsMjIsezM6MSwzNDoxLDIyOjEsNDMxOjF9LE4zZSk7dmFyIGxMZSxTMWUsaExlPUZyKG91LCJDb25zdHJhaW50Q2FsY3VsYXRpb25TdHJhdGVneSIsNDMxLEhyLFVwbixBMG4pLGZ4dDtEKDMyMiwyMix7MzoxLDM0OjEsMjI6MSwzMjI6MSwxODg6MSwxOTY6MX0sd3NlKSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuICRwdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiAkcHQodGhpcyl9O3ZhciBtQixITCxmTGUsZExlPUZyKG91LCJDcm9zc2luZ01pbmltaXphdGlvblN0cmF0ZWd5IiwzMjIsSHIsajJuLEwwbiksZHh0O0QoMzUxLDIyLHszOjEsMzQ6MSwyMjoxLDM1MToxfSx5c2UpO3ZhciBnTGUsXzFlLFlLLHBMZT1GcihvdSwiQ3V0dGluZ1N0cmF0ZWd5IiwzNTEsSHIsJDJuLE0wbiksZ3h0O0QoMzQ4LDIyLHszOjEsMzQ6MSwyMjoxLDM0ODoxLDE4ODoxLDE5NjoxfSx1TyksaC5kZz1mdW5jdGlvbigpe3JldHVybiBNMnQodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gTTJ0KHRoaXMpfTt2YXIgYkxlLEExZSxQVCxMMWUsQlQsbUxlPUZyKG91LCJDeWNsZUJyZWFraW5nU3RyYXRlZ3kiLDM0OCxIcixIbW4sRDBuKSxweHQ7RCg0MjgsMjIsezM6MSwzNDoxLDIyOjEsNDI4OjF9LFAzZSk7dmFyIFhLLHZMZSx3TGU9RnIob3UsIkRpcmVjdGlvbkNvbmdydWVuY3kiLDQyOCxIcixWcG4sSTBuKSxieHQ7RCg0NjAsMjIsezM6MSwzNDoxLDIyOjEsNDYwOjF9LHhzZSk7dmFyIEZULE0xZSxQNixteHQ9RnIob3UsIkVkZ2VDb25zdHJhaW50Iiw0NjAsSHIsejJuLGowbiksdnh0O0QoMjgzLDIyLHszOjEsMzQ6MSwyMjoxLDI4MzoxfSxUXyk7dmFyIEQxZSxJMWUsTzFlLE4xZSxRSyxQMWUseUxlPUZyKG91LCJFZGdlTGFiZWxTaWRlU2VsZWN0aW9uIiwyODMsSHIsa3ZuLCQwbiksd3h0O0QoNDg4LDIyLHszOjEsMzQ6MSwyMjoxLDQ4ODoxfSxCM2UpO3ZhciBKSyx4TGUsa0xlPUZyKG91LCJFZGdlU3RyYWlnaHRlbmluZ1N0cmF0ZWd5Iiw0ODgsSHIsSnBuLHowbikseXh0O0QoMjgxLDIyLHszOjEsMzQ6MSwyMjoxLDI4MToxfSxDXyk7dmFyIEIxZSxFTGUsVExlLFpLLENMZSxTTGUsX0xlPUZyKG91LCJGaXhlZEFsaWdubWVudCIsMjgxLEhyLEV2bixSMG4pLHh4dDtEKDI4MiwyMix7MzoxLDM0OjEsMjI6MSwyODI6MX0sU18pO3ZhciBBTGUsTExlLE1MZSxETGUsVkwsSUxlLE9MZT1GcihvdSwiR3JhcGhDb21wYWN0aW9uU3RyYXRlZ3kiLDI4MixIcixUdm4sTzBuKSxreHQ7RCgyNTksMjIsezM6MSwzNDoxLDIyOjEsMjU5OjF9LHV5KTt2YXIgUlQsZVcsalQsdmYsVUwsdFcsJFQsQjYsblcsR0wsRjFlPUZyKG91LCJHcmFwaFByb3BlcnRpZXMiLDI1OSxIcixjM24sTjBuKSxFeHQ7RCgyOTksMjIsezM6MSwzNDoxLDIyOjEsMjk5OjF9LGtzZSk7dmFyIHZCLFIxZSxqMWUsJDFlPUZyKG91LCJHcmVlZHlTd2l0Y2hUeXBlIiwyOTksSHIscTJuLFAwbiksVHh0O0QoMzExLDIyLHszOjEsMzQ6MSwyMjoxLDMxMToxfSxFc2UpO3ZhciBVeCx3QixGNixDeHQ9RnIob3UsIkluTGF5ZXJDb25zdHJhaW50IiwzMTEsSHIsSDJuLEIwbiksU3h0O0QoNDI5LDIyLHszOjEsMzQ6MSwyMjoxLDQyOToxfSxGM2UpO3ZhciB6MWUsTkxlLFBMZT1GcihvdSwiSW50ZXJhY3RpdmVSZWZlcmVuY2VQb2ludCIsNDI5LEhyLEhwbixGMG4pLF94dCxCTGUsR3gsYzMsclcsRkxlLFJMZSxpVyxqTGUseUIsc1csS0wsS3gscHAscTFlLGFXLFdjLCRMZSxqYixMdSxIMWUsVjFlLHhCLGh2LHUzLFd4LHpMZSxZeCxrQixmNCxvMSwkZixVMWUsUjYsS2ksemkscUxlLEhMZSxWTGUsVUxlLEdMZSxHMWUsb1csamwsbDMsSzFlLFh4LFdMLFcxLGo2LGgzLCQ2LHo2LHpULGZ2LEtMZSxXMWUsWTFlLFF4O0QoMTcxLDIyLHszOjEsMzQ6MSwyMjoxLDE3MToxfSxsTyk7dmFyIFlMLCRiLFhMLGQ0LEVCLFdMZT1GcihvdSwiTGF5ZXJDb25zdHJhaW50IiwxNzEsSHIsVW1uLHEwbiksQXh0O0QoODU5LDEsUGYsWXJlKSxoLmhmPWZ1bmN0aW9uKHQpe3NuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxWRWUpLCIiKSwiRGlyZWN0aW9uIENvbmdydWVuY3kiKSwiU3BlY2lmaWVzIGhvdyBkcmF3aW5ncyBvZiB0aGUgc2FtZSBncmFwaCB3aXRoIGRpZmZlcmVudCBsYXlvdXQgZGlyZWN0aW9ucyBjb21wYXJlIHRvIGVhY2ggb3RoZXI6IGVpdGhlciBhIG5hdHVyYWwgcmVhZGluZyBkaXJlY3Rpb24gaXMgcHJlc2VydmVkIG9yIHRoZSBkcmF3aW5ncyBhcmUgcm90YXRlZCB2ZXJzaW9ucyBvZiBlYWNoIG90aGVyLiIpLGlNZSksKGcyKCkscHMpKSx3TGUpLHVuKChyMSgpLFBuKSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFVFZSksIiIpLCJGZWVkYmFjayBFZGdlcyIpLCJXaGV0aGVyIGZlZWRiYWNrIGVkZ2VzIHNob3VsZCBiZSBoaWdobGlnaHRlZCBieSByb3V0aW5nIGFyb3VuZCB0aGUgbm9kZXMuIiksKEhuKCksITEpKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZkcpLCIiKSwiSW50ZXJhY3RpdmUgUmVmZXJlbmNlIFBvaW50IiksIkRldGVybWluZXMgd2hpY2ggcG9pbnQgb2YgYSBub2RlIGlzIGNvbnNpZGVyZWQgYnkgaW50ZXJhY3RpdmUgbGF5b3V0IHBoYXNlcy4iKSxsTWUpLHBzKSxQTGUpLHVuKFBuKSkpKSxRcyh0LGZHLHpoZSxrOXQpLFFzKHQsZkcscEwseDl0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsR0VlKSwiIiksIk1lcmdlIEVkZ2VzIiksIkVkZ2VzIHRoYXQgaGF2ZSBubyBwb3J0cyBhcmUgbWVyZ2VkIHNvIHRoZXkgdG91Y2ggdGhlIGNvbm5lY3RlZCBub2RlcyBhdCB0aGUgc2FtZSBwb2ludHMuIFdoZW4gdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQsIG9uZSBwb3J0IGlzIGNyZWF0ZWQgZm9yIGVhY2ggZWRnZSBkaXJlY3RseSBjb25uZWN0ZWQgdG8gYSBub2RlLiBXaGVuIGl0IGlzIGVuYWJsZWQsIGFsbCBzdWNoIGluY29taW5nIGVkZ2VzIHNoYXJlIGFuIGlucHV0IHBvcnQsIGFuZCBhbGwgb3V0Z29pbmcgZWRnZXMgc2hhcmUgYW4gb3V0cHV0IHBvcnQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxLRWUpLCIiKSwiTWVyZ2UgSGllcmFyY2h5LUNyb3NzaW5nIEVkZ2VzIiksIklmIGhpZXJhcmNoaWNhbCBsYXlvdXQgaXMgYWN0aXZlLCBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMgdXNlIGFzIGZldyBoaWVyYXJjaGljYWwgcG9ydHMgYXMgcG9zc2libGUuIFRoZXkgYXJlIGJyb2tlbiBieSB0aGUgYWxnb3JpdGhtLCB3aXRoIGhpZXJhcmNoaWNhbCBwb3J0cyBpbnNlcnRlZCBhcyByZXF1aXJlZC4gVXN1YWxseSwgb25lIHN1Y2ggcG9ydCBpcyBjcmVhdGVkIGZvciBlYWNoIGVkZ2UgYXQgZWFjaCBoaWVyYXJjaHkgY3Jvc3NpbmcgcG9pbnQuIFdpdGggdGhpcyBvcHRpb24gc2V0IHRvIHRydWUsIHdlIHRyeSB0byBjcmVhdGUgYXMgZmV3IGhpZXJhcmNoaWNhbCBwb3J0cyBhcyBwb3NzaWJsZSBpbiB0aGUgcHJvY2Vzcy4gSW4gcGFydGljdWxhciwgYWxsIGVkZ2VzIHRoYXQgZm9ybSBhIGh5cGVyZWRnZSBjYW4gc2hhcmUgYSBwb3J0LiIpLCEwKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChOdW4obm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFdFZSksIiIpLCJBbGxvdyBOb24tRmxvdyBQb3J0cyBUbyBTd2l0Y2ggU2lkZXMiKSwiU3BlY2lmaWVzIHdoZXRoZXIgbm9uLWZsb3cgcG9ydHMgbWF5IHN3aXRjaCBzaWRlcyBpZiB0aGVpciBub2RlJ3MgcG9ydCBjb25zdHJhaW50cyBhcmUgZWl0aGVyIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIuIEEgbm9uLWZsb3cgcG9ydCBpcyBhIHBvcnQgb24gYSBzaWRlIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGxheW91dCBmbG93LiBGb3IgaW5zdGFuY2UsIGdpdmVuIGEgbGVmdC10by1yaWdodCBsYXlvdXQgZGlyZWN0aW9uLCBub3J0aCBhbmQgc291dGggcG9ydHMgd291bGQgYmUgY29uc2lkZXJlZCBub24tZmxvdyBwb3J0cy4gRnVydGhlciBub3RlIHRoYXQgdGhlIHVuZGVybHlpbmcgY3JpdGVyaXVtIHdoZXRoZXIgdG8gc3dpdGNoIHNpZGVzIG9yIG5vdCBzb2xlbHkgcmVsaWVzIG9uIHRoZSBtaW5pbWl6YXRpb24gb2YgZWRnZSBjcm9zc2luZ3MuIEhlbmNlLCBlZGdlIGxlbmd0aCBhbmQgb3RoZXIgYWVzdGhldGljcyBjcml0ZXJpYSBhcmUgbm90IGFkZHJlc3NlZC4iKSwhMSkseWEpLE5zKSx1bih5dikpLGhlKGxlKHp0LDEpLGR0LDIsNixbIm9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vcnRoT3JTb3V0aFBvcnQiXSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFlFZSksIiIpLCJQb3J0IFNvcnRpbmcgU3RyYXRlZ3kiKSwiT25seSByZWxldmFudCBmb3Igbm9kZXMgd2l0aCBGSVhFRF9TSURFIHBvcnQgY29uc3RyYWludHMuIERldGVybWluZXMgdGhlIHdheSBhIG5vZGUncyBwb3J0cyBhcmUgZGlzdHJpYnV0ZWQgb24gdGhlIHNpZGVzIG9mIGEgbm9kZSBpZiB0aGVpciBvcmRlciBpcyBub3QgcHJlc2NyaWJlZC4gVGhlIG9wdGlvbiBpcyBzZXQgb24gcGFyZW50IG5vZGVzLiIpLHZNZSkscHMpLF9EZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxYRWUpLCIiKSwiVGhvcm91Z2huZXNzIiksIkhvdyBtdWNoIGVmZm9ydCBzaG91bGQgYmUgc3BlbnQgdG8gcHJvZHVjZSBhIG5pY2UgbGF5b3V0LiIpLHB0KDcpKSxUYykscm8pLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsUUVlKSwiIiksIkFkZCBVbm5lY2Vzc2FyeSBCZW5kcG9pbnRzIiksIkFkZHMgYmVuZCBwb2ludHMgZXZlbiBpZiBhbiBlZGdlIGRvZXMgbm90IGNoYW5nZSBkaXJlY3Rpb24uIElmIHRydWUsIGVhY2ggbG9uZyBlZGdlIGR1bW15IHdpbGwgY29udHJpYnV0ZSBhIGJlbmQgcG9pbnQgdG8gaXRzIGVkZ2VzIGFuZCBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMgd2lsbCBhbHdheXMgZ2V0IGEgYmVuZCBwb2ludCB3aGVyZSB0aGV5IGNyb3NzIGhpZXJhcmNoeSBib3VuZGFyaWVzLiBCeSBkZWZhdWx0LCBiZW5kIHBvaW50cyBhcmUgb25seSBhZGRlZCB3aGVyZSBhbiBlZGdlIGNoYW5nZXMgZGlyZWN0aW9uLiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsSkVlKSwiIiksIkdlbmVyYXRlIFBvc2l0aW9uIGFuZCBMYXllciBJRHMiKSwiSWYgZW5hYmxlZCBwb3NpdGlvbiBpZCBhbmQgbGF5ZXIgaWQgYXJlIGdlbmVyYXRlZCwgd2hpY2ggYXJlIHVzdWFsbHkgb25seSB1c2VkIGludGVybmFsbHkgd2hlbiBzZXR0aW5nIHRoZSBpbnRlcmFjdGl2ZUxheW91dCBvcHRpb24uIFRoaXMgb3B0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgb24gdGhlIHJvb3Qgbm9kZS4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHpoZSksImN5Y2xlQnJlYWtpbmciKSwiQ3ljbGUgQnJlYWtpbmcgU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIGN5Y2xlIGJyZWFraW5nLiBDeWNsZSBicmVha2luZyBsb29rcyBmb3IgY3ljbGVzIGluIHRoZSBncmFwaCBhbmQgZGV0ZXJtaW5lcyB3aGljaCBlZGdlcyB0byByZXZlcnNlIHRvIGJyZWFrIHRoZSBjeWNsZXMuIFJldmVyc2VkIGVkZ2VzIHdpbGwgZW5kIHVwIHBvaW50aW5nIHRvIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2YgcmVndWxhciBlZGdlcyAodGhhdCBpcywgcmV2ZXJzZWQgZWRnZXMgd2lsbCBwb2ludCBsZWZ0IGlmIGVkZ2VzIHVzdWFsbHkgcG9pbnQgcmlnaHQpLiIpLHJNZSkscHMpLG1MZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxxUCksaGZlKSwiTm9kZSBMYXllcmluZyBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3Igbm9kZSBsYXllcmluZy4iKSxkTWUpLHBzKSxwRGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWkVlKSxoZmUpLCJMYXllciBDb25zdHJhaW50IiksIkRldGVybWluZXMgYSBjb25zdHJhaW50IG9uIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5vZGUgcmVnYXJkaW5nIHRoZSBsYXllcmluZy4iKSxoTWUpLHBzKSxXTGUpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZVRlKSxoZmUpLCJMYXllciBDaG9pY2UgQ29uc3RyYWludCIpLCJBbGxvd3MgdG8gc2V0IGEgY29uc3RyYWludCByZWdhcmRpbmcgdGhlIGxheWVyIHBsYWNlbWVudCBvZiBhIG5vZGUuIExldCBpIGJlIHRoZSB2YWx1ZSBvZiB0ZWggY29uc3RyYWludC4gQXNzdW1lZCB0aGUgZHJhd2luZyBoYXMgbiBsYXllcnMgYW5kIGkgPCBuLiBJZiBzZXQgdG8gaSwgaXQgZXhwcmVzc2VzIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHBsYWNlZCBpbiBpLXRoIGxheWVyLiBTaG91bGQgaT49biBiZSB0cnVlIHRoZW4gdGhlIG5vZGUgaXMgcGxhY2VkIGluIHRoZSBsYXN0IGxheWVyIG9mIHRoZSBkcmF3aW5nLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IHBhcnQgb2YgYW55IG9mIEVMSyBMYXllcmVkJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBidXQgaXMgb25seSBldmFsdWF0ZWQgYXMgcGFydCBvZiB0aGUgYEludGVyYWN0aXZlTGF5ZXJlZEdyYXBoVmlzaXRvcmAsIHdoaWNoIG11c3QgYmUgYXBwbGllZCBtYW51YWxseSBvciB1c2VkIHZpYSB0aGUgYERpYWdyYW1MYXlvdXRFbmdpbmUuIiksbnVsbCksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHRUZSksaGZlKSwiTGF5ZXIgSUQiKSwiTGF5ZXIgaWRlbnRpZmllciB0aGF0IHdhcyBjYWxjdWxhdGVkIGJ5IEVMSyBMYXllcmVkIGZvciBhIG5vZGUuIFRoaXMgaXMgb25seSBnZW5lcmF0ZWQgaWYgaW50ZXJhY3RpdmVMYXlvdCBvciBnZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMgaXMgc2V0LiIpLHB0KC0xKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHFoZSksSjN0KSwiVXBwZXIgQm91bmQgT24gV2lkdGggW01pbldpZHRoIExheWVyZXJdIiksIkRlZmluZXMgYSBsb29zZSB1cHBlciBib3VuZCBvbiB0aGUgd2lkdGggb2YgdGhlIE1pbldpZHRoIGxheWVyZXIuIElmIHNldCB0byAnLTEnIG11bHRpcGxlIHZhbHVlcyBhcmUgdGVzdGVkIGFuZCB0aGUgYmVzdCByZXN1bHQgaXMgc2VsZWN0ZWQuIikscHQoNCkpLFRjKSxybyksdW4oUG4pKSkpLFFzKHQscWhlLHFQLEw5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEhoZSksSjN0KSwiVXBwZXIgTGF5ZXIgRXN0aW1hdGlvbiBTY2FsaW5nIEZhY3RvciBbTWluV2lkdGggTGF5ZXJlcl0iKSwiTXVsdGlwbGllZCB3aXRoIFVwcGVyIEJvdW5kIE9uIFdpZHRoIGZvciBkZWZpbmluZyBhbiB1cHBlciBib3VuZCBvbiB0aGUgd2lkdGggb2YgbGF5ZXJzIHdoaWNoIGhhdmVuJ3QgYmVlbiBkZXRlcm1pbmVkIHlldCwgYnV0IHdob3NlIG1heGltdW0gd2lkdGggaGFkIGJlZW4gKHJvdWdobHkpIGVzdGltYXRlZCBieSB0aGUgTWluV2lkdGggYWxnb3JpdGhtLiBDb21wZW5zYXRlcyBmb3IgdG9vIGhpZ2ggZXN0aW1hdGlvbnMuIElmIHNldCB0byAnLTEnIG11bHRpcGxlIHZhbHVlcyBhcmUgdGVzdGVkIGFuZCB0aGUgYmVzdCByZXN1bHQgaXMgc2VsZWN0ZWQuIikscHQoMikpLFRjKSxybyksdW4oUG4pKSkpLFFzKHQsSGhlLHFQLEQ5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFZoZSksWjN0KSwiTm9kZSBQcm9tb3Rpb24gU3RyYXRlZ3kiKSwiUmVkdWNlcyBudW1iZXIgb2YgZHVtbXkgbm9kZXMgYWZ0ZXIgbGF5ZXJpbmcgcGhhc2UgKGlmIHBvc3NpYmxlKS4iKSxmTWUpLHBzKSxURGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsVWhlKSxaM3QpLCJNYXggTm9kZSBQcm9tb3Rpb24gSXRlcmF0aW9ucyIpLCJMaW1pdHMgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIGZvciBub2RlIHByb21vdGlvbi4iKSxwdCgwKSksVGMpLHJvKSx1bihQbikpKSksUXModCxVaGUsVmhlLG51bGwpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxHaGUpLCJsYXllcmluZy5jb2ZmbWFuR3JhaGFtIiksIkxheWVyIEJvdW5kIiksIlRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyBhbGxvd2VkIHBlciBsYXllci4iKSxwdChJaSkpLFRjKSxybyksdW4oUG4pKSkpLFFzKHQsR2hlLHFQLFQ5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBMKSxnVCksIkNyb3NzaW5nIE1pbmltaXphdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgY3Jvc3NpbmcgbWluaW1pemF0aW9uLiIpLG5NZSkscHMpLGRMZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxuVGUpLGdUKSwiRm9yY2UgTm9kZSBNb2RlbCBPcmRlciIpLCJUaGUgbm9kZSBvcmRlciBnaXZlbiBieSB0aGUgbW9kZWwgZG9lcyBub3QgY2hhbmdlIHRvIHByb2R1Y2UgYSBiZXR0ZXIgbGF5b3V0LiBFLmcuIGlmIG5vZGUgQSBpcyBiZWZvcmUgbm9kZSBCIGluIHRoZSBtb2RlbCB0aGlzIGlzIG5vdCBjaGFuZ2VkIGR1cmluZyBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBub2RlIG1vZGVsIG9yZGVyIGlzIGFscmVhZHkgcmVzcGVjdGVkIGJlZm9yZSBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHNldHRpbmcgY29uc2lkZXJNb2RlbE9yZGVyLnN0cmF0ZWd5IHRvIE5PREVTX0FORF9FREdFUy4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEtoZSksZ1QpLCJIaWVyYXJjaGljYWwgU3dlZXBpbmVzcyIpLCJIb3cgbGlrZWx5IGl0IGlzIHRvIHVzZSBjcm9zcy1oaWVyYXJjaHkgKDEpIHZzIGJvdHRvbS11cCAoLTEpLiIpLC4xKSxmbyksdGEpLHVuKFBuKSkpKSxRcyh0LEtoZSxDRyxXeHQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxXaGUpLGdUKSwiU2VtaS1JbnRlcmFjdGl2ZSBDcm9zc2luZyBNaW5pbWl6YXRpb24iKSwiUHJlc2VydmVzIHRoZSBvcmRlciBvZiBub2RlcyB3aXRoaW4gYSBsYXllciBidXQgc3RpbGwgbWluaW1pemVzIGNyb3NzaW5ncyBiZXR3ZWVuIGVkZ2VzIGNvbm5lY3RpbmcgbG9uZyBlZGdlIGR1bW1pZXMuIERlcml2ZXMgdGhlIGRlc2lyZWQgb3JkZXIgZnJvbSBwb3NpdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSAnb3JnLmVjbGlwc2UuZWxrLnBvc2l0aW9uJyBsYXlvdXQgb3B0aW9uLiBSZXF1aXJlcyBhIGNyb3NzaW5nIG1pbmltaXphdGlvbiBzdHJhdGVneSB0aGF0IGlzIGFibGUgdG8gcHJvY2VzcyAnaW4tbGF5ZXInIGNvbnN0cmFpbnRzLiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxRcyh0LFdoZSxwTCxlOXQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxyVGUpLGdUKSwiSW4gTGF5ZXIgUHJlZGVjZXNzb3Igb2YiKSwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgd2hpY2ggc3BlY2lmaWVzIG9mIHdoaWNoIG5vZGUgdGhlIGN1cnJlbnQgbm9kZSBpcyB0aGUgcHJlZGVjZXNzb3IuIElmIHNldCB0byAncycgdGhlbiB0aGUgbm9kZSBpcyB0aGUgcHJlZGVjZXNzb3Igb2YgJ3MnIGFuZCBpcyBpbiB0aGUgc2FtZSBsYXllciIpLG51bGwpLEo2KSx6dCksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxpVGUpLGdUKSwiSW4gTGF5ZXIgU3VjY2Vzc29yIG9mIiksIkFsbG93cyB0byBzZXQgYSBjb25zdHJhaW50IHdoaWNoIHNwZWNpZmllcyBvZiB3aGljaCBub2RlIHRoZSBjdXJyZW50IG5vZGUgaXMgdGhlIHN1Y2Nlc3Nvci4gSWYgc2V0IHRvICdzJyB0aGVuIHRoZSBub2RlIGlzIHRoZSBzdWNjZXNzb3Igb2YgJ3MnIGFuZCBpcyBpbiB0aGUgc2FtZSBsYXllciIpLG51bGwpLEo2KSx6dCksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxzVGUpLGdUKSwiUG9zaXRpb24gQ2hvaWNlIENvbnN0cmFpbnQiKSwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgcmVnYXJkaW5nIHRoZSBwb3NpdGlvbiBwbGFjZW1lbnQgb2YgYSBub2RlIGluIGEgbGF5ZXIuIEFzc3VtZWQgdGhlIGxheWVyIGluIHdoaWNoIHRoZSBub2RlIHBsYWNlZCBpbmNsdWRlcyBuIG90aGVyIG5vZGVzIGFuZCBpIDwgbi4gSWYgc2V0IHRvIGksIGl0IGV4cHJlc3NlcyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSBwbGFjZWQgYXQgdGhlIGktdGggcG9zaXRpb24uIFNob3VsZCBpPj1uIGJlIHRydWUgdGhlbiB0aGUgbm9kZSBpcyBwbGFjZWQgYXQgdGhlIGxhc3QgcG9zaXRpb24gaW4gdGhlIGxheWVyLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IHBhcnQgb2YgYW55IG9mIEVMSyBMYXllcmVkJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBidXQgaXMgb25seSBldmFsdWF0ZWQgYXMgcGFydCBvZiB0aGUgYEludGVyYWN0aXZlTGF5ZXJlZEdyYXBoVmlzaXRvcmAsIHdoaWNoIG11c3QgYmUgYXBwbGllZCBtYW51YWxseSBvciB1c2VkIHZpYSB0aGUgYERpYWdyYW1MYXlvdXRFbmdpbmUuIiksbnVsbCksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGFUZSksZ1QpLCJQb3NpdGlvbiBJRCIpLCJQb3NpdGlvbiB3aXRoaW4gYSBsYXllciB0aGF0IHdhcyBkZXRlcm1pbmVkIGJ5IEVMSyBMYXllcmVkIGZvciBhIG5vZGUuIFRoaXMgaXMgb25seSBnZW5lcmF0ZWQgaWYgaW50ZXJhY3RpdmVMYXlvdCBvciBnZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMgaXMgc2V0LiIpLHB0KC0xKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG9UZSksZXl0KSwiR3JlZWR5IFN3aXRjaCBBY3RpdmF0aW9uIFRocmVzaG9sZCIpLCJCeSBkZWZhdWx0IGl0IGlzIGRlY2lkZWQgYXV0b21hdGljYWxseSBpZiB0aGUgZ3JlZWR5IHN3aXRjaCBpcyBhY3RpdmF0ZWQgb3Igbm90LiBUaGUgZGVjaXNpb24gaXMgYmFzZWQgb24gd2hldGhlciB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgZ3JhcGggKHdpdGhvdXQgZHVtbXkgbm9kZXMpIGlzIHNtYWxsZXIgdGhhbiB0aGUgdmFsdWUgb2YgdGhpcyBvcHRpb24uIEEgJzAnIGVuZm9yY2VzIHRoZSBhY3RpdmF0aW9uLiIpLHB0KDQwKSksVGMpLHJvKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFloZSksZXl0KSwiR3JlZWR5IFN3aXRjaCBDcm9zc2luZyBNaW5pbWl6YXRpb24iKSwiR3JlZWR5IFN3aXRjaCBzdHJhdGVneSBmb3IgY3Jvc3NpbmcgbWluaW1pemF0aW9uLiBUaGUgZ3JlZWR5IHN3aXRjaCBoZXVyaXN0aWMgaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHJlZ3VsYXIgY3Jvc3NpbmcgbWluaW1pemF0aW9uIGFzIGEgcG9zdC1wcm9jZXNzb3IuIE5vdGUgdGhhdCBpZiAnaGllcmFyY2h5SGFuZGxpbmcnIGlzIHNldCB0byAnSU5DTFVERV9DSElMRFJFTicsIHRoZSAnZ3JlZWR5U3dpdGNoSGllcmFyY2hpY2FsLnR5cGUnIG9wdGlvbiBtdXN0IGJlIHVzZWQuIiksdE1lKSxwcyksJDFlKSx1bihQbikpKSksUXModCxZaGUscEwsR3h0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZEcpLCJjcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2hIaWVyYXJjaGljYWwiKSwiR3JlZWR5IFN3aXRjaCBDcm9zc2luZyBNaW5pbWl6YXRpb24gKGhpZXJhcmNoaWNhbCkiKSwiQWN0aXZhdGVzIHRoZSBncmVlZHkgc3dpdGNoIGhldXJpc3RpYyBpbiBjYXNlIGhpZXJhcmNoaWNhbCBsYXlvdXQgaXMgdXNlZC4gVGhlIGRpZmZlcmVuY2VzIHRvIHRoZSBub24taGllcmFyY2hpY2FsIGNhc2UgKHNlZSAnZ3JlZWR5U3dpdGNoLnR5cGUnKSBhcmU6IDEpIGdyZWVkeSBzd2l0Y2ggaXMgaW5hY3RpdmUgYnkgZGVmYXVsdCwgMykgb25seSB0aGUgb3B0aW9uIHZhbHVlIHNldCBvbiB0aGUgbm9kZSBhdCB3aGljaCBoaWVyYXJjaGljYWwgbGF5b3V0IHN0YXJ0cyBpcyByZWxldmFudCwgYW5kIDIpIGlmIGl0J3MgYWN0aXZhdGVkIGJ5IHRoZSB1c2VyLCBpdCBwcm9wZXJseSBhZGRyZXNzZXMgaGllcmFyY2h5LWNyb3NzaW5nIGVkZ2VzLiIpLGVNZSkscHMpLCQxZSksdW4oUG4pKSkpLFFzKHQsZEcscEwsSHh0KSxRcyh0LGRHLENHLFZ4dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGs2KSx0eXQpLCJOb2RlIFBsYWNlbWVudCBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3Igbm9kZSBwbGFjZW1lbnQuIiksbU1lKSxwcyksd0RlKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LGdHKSx0eXQpLCJGYXZvciBTdHJhaWdodCBFZGdlcyBPdmVyIEJhbGFuY2luZyIpLCJGYXZvciBzdHJhaWdodCBlZGdlcyBvdmVyIGEgYmFsYW5jZWQgbm9kZSBwbGFjZW1lbnQuIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGRldGVybWluZWQgYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGUgdXNlZCAnZWRnZVJvdXRpbmcnLiBGb3IgYW4gb3J0aG9nb25hbCBzdHlsZSBpdCBpcyBzZXQgdG8gdHJ1ZSwgZm9yIGFsbCBvdGhlciBzdHlsZXMgdG8gZmFsc2UuIikseWEpLE5zKSx1bihQbikpKSksUXModCxnRyxrNixxOXQpLFFzKHQsZ0csazYsSDl0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWGhlKSxueXQpLCJCSyBFZGdlIFN0cmFpZ2h0ZW5pbmciKSwiU3BlY2lmaWVzIHdoZXRoZXIgdGhlIEJyYW5kZXMgS29lcGYgbm9kZSBwbGFjZXIgdHJpZXMgdG8gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBzdHJhaWdodCBlZGdlcyBhdCB0aGUgZXhwZW5zZSBvZiBkaWFncmFtIHNpemUuIFRoZXJlIGlzIGEgc3VidGxlIGRpZmZlcmVuY2UgdG8gdGhlICdmYXZvclN0cmFpZ2h0RWRnZXMnIG9wdGlvbiwgd2hpY2ggZGVjaWRlcyB3aGV0aGVyIGEgYmFsYW5jZWQgcGxhY2VtZW50IG9mIHRoZSBub2RlcyBpcyBkZXNpcmVkLCBvciBub3QuIEluIGJrIHRlcm1zIHRoaXMgbWVhbnMgY29tYmluaW5nIHRoZSBmb3VyIGFsaWdubWVudHMgaW50byBhIHNpbmdsZSBiYWxhbmNlZCBvbmUsIG9yIG5vdC4gVGhpcyBvcHRpb24gb24gdGhlIG90aGVyIGhhbmQgdHJpZXMgdG8gc3RyYWlnaHRlbiBhZGRpdGlvbmFsIGVkZ2VzIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgZWFjaCBvZiB0aGUgZm91ciBhbGlnbm1lbnRzLiIpLGdNZSkscHMpLGtMZSksdW4oUG4pKSkpLFFzKHQsWGhlLGs2LFI5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFFoZSksbnl0KSwiQksgRml4ZWQgQWxpZ25tZW50IiksIlRlbGxzIHRoZSBCSyBub2RlIHBsYWNlciB0byB1c2UgYSBjZXJ0YWluIGFsaWdubWVudCAob3V0IG9mIGl0cyBmb3VyKSBpbnN0ZWFkIG9mIHRoZSBvbmUgcHJvZHVjaW5nIHRoZSBzbWFsbGVzdCBoZWlnaHQsIG9yIHRoZSBjb21iaW5hdGlvbiBvZiBhbGwgZm91ci4iKSxwTWUpLHBzKSxfTGUpLHVuKFBuKSkpKSxRcyh0LFFoZSxrNiwkOXQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxKaGUpLCJub2RlUGxhY2VtZW50LmxpbmVhclNlZ21lbnRzIiksIkxpbmVhciBTZWdtZW50cyBEZWZsZWN0aW9uIERhbXBlbmluZyIpLCJEYW1wZW5zIHRoZSBtb3ZlbWVudCBvZiBub2RlcyB0byBrZWVwIHRoZSBkaWFncmFtIGZyb20gZ2V0dGluZyB0b28gbGFyZ2UuIiksLjMpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsSmhlLGs2LFU5dCksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LFpoZSksIm5vZGVQbGFjZW1lbnQubmV0d29ya1NpbXBsZXgiKSwiTm9kZSBGbGV4aWJpbGl0eSIpLCJBaW1zIGF0IHNob3J0ZXIgYW5kIHN0cmFpZ2h0ZXIgZWRnZXMuIFR3byBjb25maWd1cmF0aW9ucyBhcmUgcG9zc2libGU6IChhKSBhbGxvdyBwb3J0cyB0byBtb3ZlIGZyZWVseSBvbiB0aGUgc2lkZSB0aGV5IGFyZSBhc3NpZ25lZCB0byAodGhlIG9yZGVyIGlzIGFsd2F5cyBkZWZpbmVkIGJlZm9yZWhhbmQpLCAoYikgYWRkaXRpb25hbGx5IGFsbG93IHRvIGVubGFyZ2UgYSBub2RlIHdoZXJldmVyIGl0IGhlbHBzLiBJZiB0aGlzIG9wdGlvbiBpcyBub3QgY29uZmlndXJlZCBmb3IgYSBub2RlLCB0aGUgJ25vZGVGbGV4aWJpbGl0eS5kZWZhdWx0JyB2YWx1ZSBpcyB1c2VkLCB3aGljaCBpcyBzcGVjaWZpZWQgZm9yIHRoZSBub2RlJ3MgcGFyZW50LiIpLHBzKSxtZGUpLHVuKGhhKSkpKSxRcyh0LFpoZSxrNixZOXQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxlZmUpLCJub2RlUGxhY2VtZW50Lm5ldHdvcmtTaW1wbGV4Lm5vZGVGbGV4aWJpbGl0eSIpLCJOb2RlIEZsZXhpYmlsaXR5IERlZmF1bHQiKSwiRGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ25vZGVGbGV4aWJpbGl0eScgb3B0aW9uIGZvciB0aGUgY2hpbGRyZW4gb2YgYSBoaWVyYXJjaGljYWwgbm9kZS4iKSxiTWUpLHBzKSxtZGUpLHVuKFBuKSkpKSxRcyh0LGVmZSxrNixXOXQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxjVGUpLHJ5dCksIlNlbGYtTG9vcCBEaXN0cmlidXRpb24iKSwiQWx0ZXIgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgbG9vcHMgYXJvdW5kIHRoZSBub2RlLiBJdCBvbmx5IHRha2VzIGVmZmVjdCBmb3IgUG9ydENvbnN0cmFpbnRzLkZSRUUuIiksb01lKSxwcyksTURlKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHVUZSkscnl0KSwiU2VsZi1Mb29wIE9yZGVyaW5nIiksIkFsdGVyIHRoZSBvcmRlcmluZyBvZiB0aGUgbG9vcHMgdGhleSBjYW4gZWl0aGVyIGJlIHN0YWNrZWQgb3Igc2VxdWVuY2VkLiBJdCBvbmx5IHRha2VzIGVmZmVjdCBmb3IgUG9ydENvbnN0cmFpbnRzLkZSRUUuIiksY01lKSxwcyksRERlKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBHKSwiZWRnZVJvdXRpbmcuc3BsaW5lcyIpLCJTcGxpbmUgUm91dGluZyBNb2RlIiksIlNwZWNpZmllcyB0aGUgd2F5IGNvbnRyb2wgcG9pbnRzIGFyZSBhc3NlbWJsZWQgZm9yIGVhY2ggaW5kaXZpZHVhbCBlZGdlLiBDT05TRVJWQVRJVkUgZW5zdXJlcyB0aGF0IGVkZ2VzIGFyZSBwcm9wZXJseSByb3V0ZWQgYXJvdW5kIHRoZSBub2RlcyBidXQgZmVlbHMgcmF0aGVyIG9ydGhvZ29uYWwgYXQgdGltZXMuIFNMT1BQWSB1c2VzIGZld2VyIGNvbnRyb2wgcG9pbnRzIHRvIG9idGFpbiBjdXJ2aWVyIGVkZ2Ugcm91dGVzIGJ1dCBtYXkgcmVzdWx0IGluIGVkZ2VzIG92ZXJsYXBwaW5nIG5vZGVzLiIpLHVNZSkscHMpLE9EZSksdW4oUG4pKSkpLFFzKHQscEcsSFAsaDl0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsYkcpLCJlZGdlUm91dGluZy5zcGxpbmVzLnNsb3BweSIpLCJTbG9wcHkgU3BsaW5lIExheWVyIFNwYWNpbmcgRmFjdG9yIiksIlNwYWNpbmcgZmFjdG9yIGZvciByb3V0aW5nIGFyZWEgYmV0d2VlbiBsYXllcnMgd2hlbiB1c2luZyBzbG9wcHkgc3BsaW5lIHJvdXRpbmcuIiksLjIpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsYkcsSFAsZDl0KSxRcyh0LGJHLHBHLGc5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHRmZSksImVkZ2VSb3V0aW5nLnBvbHlsaW5lIiksIlNsb3BlZCBFZGdlIFpvbmUgV2lkdGgiKSwiV2lkdGggb2YgdGhlIHN0cmlwIHRvIHRoZSBsZWZ0IGFuZCB0byB0aGUgcmlnaHQgb2YgZWFjaCBsYXllciB3aGVyZSB0aGUgcG9seWxpbmUgZWRnZSByb3V0ZXIgaXMgYWxsb3dlZCB0byByZWZyYWluIGZyb20gZW5zdXJpbmcgdGhhdCBlZGdlcyBhcmUgcm91dGVkIGhvcml6b250YWxseS4gVGhpcyBwcmV2ZW50cyBhd2t3YXJkIGJlbmQgcG9pbnRzIGZvciBub2RlcyB0aGF0IGV4dGVudCBhbG1vc3QgdG8gdGhlIGVkZ2Ugb2YgdGhlaXIgbGF5ZXIuIiksMiksZm8pLHRhKSx1bihQbikpKSksUXModCx0ZmUsSFAsbzl0KSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsbFRlKSxVMSksIlNwYWNpbmcgQmFzZSBWYWx1ZSIpLCJBbiBvcHRpb25hbCBiYXNlIHZhbHVlIGZvciBhbGwgb3RoZXIgbGF5b3V0IG9wdGlvbnMgb2YgdGhlICdzcGFjaW5nJyBncm91cC4gSXQgY2FuIGJlIHVzZWQgdG8gY29udmVuaWVudGx5IGFsdGVyIHRoZSBvdmVyYWxsICdzcGFjaW91c25lc3MnIG9mIHRoZSBkcmF3aW5nLiBXaGVuZXZlciBhbiBleHBsaWNpdCB2YWx1ZSBpcyBzZXQgZm9yIHRoZSBvdGhlciBsYXlvdXQgb3B0aW9ucywgdGhpcyBiYXNlIHZhbHVlIHdpbGwgaGF2ZSBubyBlZmZlY3QuIFRoZSBiYXNlIHZhbHVlIGlzIG5vdCBpbmhlcml0ZWQsIGkuZS4gaXQgbXVzdCBiZSBzZXQgZm9yIGVhY2ggaGllcmFyY2hpY2FsIG5vZGUuIiksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGhUZSksVTEpLCJFZGdlIE5vZGUgQmV0d2VlbiBMYXllcnMgU3BhY2luZyIpLCJUaGUgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBub2RlcyBhbmQgZWRnZXMgdGhhdCBhcmUgcm91dGVkIG5leHQgdG8gdGhlIG5vZGUncyBsYXllci4gRm9yIHRoZSBzcGFjaW5nIGJldHdlZW4gbm9kZXMgYW5kIGVkZ2VzIHRoYXQgY3Jvc3MgdGhlIG5vZGUncyBsYXllciAnc3BhY2luZy5lZGdlTm9kZScgaXMgdXNlZC4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGZUZSksVTEpLCJFZGdlIEVkZ2UgQmV0d2VlbiBMYXllciBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gcGFpcnMgb2YgZWRnZXMgdGhhdCBhcmUgcm91dGVkIGJldHdlZW4gdGhlIHNhbWUgcGFpciBvZiBsYXllcnMuIE5vdGUgdGhhdCAnc3BhY2luZy5lZGdlRWRnZScgaXMgdXNlZCBmb3IgdGhlIHNwYWNpbmcgYmV0d2VlbiBwYWlycyBvZiBlZGdlcyBjcm9zc2luZyB0aGUgc2FtZSBsYXllci4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGRUZSksVTEpLCJOb2RlIE5vZGUgQmV0d2VlbiBMYXllcnMgU3BhY2luZyIpLCJUaGUgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhbnkgcGFpciBvZiBub2RlcyBvZiB0d28gYWRqYWNlbnQgbGF5ZXJzLiBOb3RlIHRoYXQgJ3NwYWNpbmcubm9kZU5vZGUnIGlzIHVzZWQgZm9yIHRoZSBzcGFjaW5nIGJldHdlZW4gbm9kZXMgd2l0aGluIHRoZSBsYXllciBpdHNlbGYuIiksMjApLGZvKSx0YSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxnVGUpLFRUZSksIkRpcmVjdGlvbiBQcmlvcml0eSIpLCJEZWZpbmVzIGhvdyBpbXBvcnRhbnQgaXQgaXMgdG8gaGF2ZSBhIGNlcnRhaW4gZWRnZSBwb2ludCBpbnRvIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG92ZXJhbGwgbGF5b3V0LiBUaGlzIG9wdGlvbiBpcyBldmFsdWF0ZWQgZHVyaW5nIHRoZSBjeWNsZSBicmVha2luZyBwaGFzZS4iKSxwdCgwKSksVGMpLHJvKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBUZSksVFRlKSwiU2hvcnRuZXNzIFByaW9yaXR5IiksIkRlZmluZXMgaG93IGltcG9ydGFudCBpdCBpcyB0byBrZWVwIGFuIGVkZ2UgYXMgc2hvcnQgYXMgcG9zc2libGUuIFRoaXMgb3B0aW9uIGlzIGV2YWx1YXRlZCBkdXJpbmcgdGhlIGxheWVyaW5nIHBoYXNlLiIpLHB0KDApKSxUYykscm8pLHVuKHpkKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsYlRlKSxUVGUpLCJTdHJhaWdodG5lc3MgUHJpb3JpdHkiKSwiRGVmaW5lcyBob3cgaW1wb3J0YW50IGl0IGlzIHRvIGtlZXAgYW4gZWRnZSBzdHJhaWdodCwgaS5lLiBhbGlnbmVkIHdpdGggb25lIG9mIHRoZSB0d28gYXhlcy4gVGhpcyBvcHRpb24gaXMgZXZhbHVhdGVkIGR1cmluZyBub2RlIHBsYWNlbWVudC4iKSxwdCgwKSksVGMpLHJvKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG5mZSksQ1RlKSx3M3QpLCJUcmllcyB0byBmdXJ0aGVyIGNvbXBhY3QgY29tcG9uZW50cyAoZGlzY29ubmVjdGVkIHN1Yi1ncmFwaHMpLiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxRcyh0LG5mZSxsTCwhMCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG1UZSksaXl0KSwiUG9zdCBDb21wYWN0aW9uIFN0cmF0ZWd5Iiksc3l0KSxYTGUpLHBzKSxPTGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsdlRlKSxpeXQpLCJQb3N0IENvbXBhY3Rpb24gQ29uc3RyYWludCBDYWxjdWxhdGlvbiIpLHN5dCksWUxlKSxwcyksaExlKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG1HKSxTVGUpLCJIaWdoIERlZ3JlZSBOb2RlIFRyZWF0bWVudCIpLCJNYWtlcyByb29tIGFyb3VuZCBoaWdoIGRlZ3JlZSBub2RlcyB0byBwbGFjZSBsZWFmcyBhbmQgdHJlZXMuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxyZmUpLFNUZSksIkhpZ2ggRGVncmVlIE5vZGUgVGhyZXNob2xkIiksIldoZXRoZXIgYSBub2RlIGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBhIGhpZ2ggZGVncmVlLiIpLHB0KDE2KSksVGMpLHJvKSx1bihQbikpKSksUXModCxyZmUsbUcsITApLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxpZmUpLFNUZSksIkhpZ2ggRGVncmVlIE5vZGUgTWF4aW11bSBUcmVlIEhlaWdodCIpLCJNYXhpbXVtIGhlaWdodCBvZiBhIHN1YnRyZWUgY29ubmVjdGVkIHRvIGEgaGlnaCBkZWdyZWUgbm9kZSB0byBiZSBtb3ZlZCB0byBzZXBhcmF0ZSBsYXllcnMuIikscHQoNSkpLFRjKSxybyksdW4oUG4pKSkpLFFzKHQsaWZlLG1HLCEwKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZnApLF9UZSksIkdyYXBoIFdyYXBwaW5nIFN0cmF0ZWd5IiksIkZvciBjZXJ0YWluIGdyYXBocyBhbmQgY2VydGFpbiBwcmVzY3JpYmVkIGRyYXdpbmcgYXJlYXMgaXQgbWF5IGJlIGRlc2lyYWJsZSB0byBzcGxpdCB0aGUgbGFpZCBvdXQgZ3JhcGggaW50byBjaHVua3MgdGhhdCBhcmUgcGxhY2VkIHNpZGUgYnkgc2lkZS4gVGhlIGVkZ2VzIHRoYXQgY29ubmVjdCBkaWZmZXJlbnQgY2h1bmtzIGFyZSAnd3JhcHBlZCcgYXJvdW5kIGZyb20gdGhlIGVuZCBvZiBvbmUgY2h1bmsgdG8gdGhlIHN0YXJ0IG9mIHRoZSBvdGhlciBjaHVuay4gVGhlIHBvaW50cyBiZXR3ZWVuIHRoZSBjaHVua3MgYXJlIHJlZmVycmVkIHRvIGFzICdjdXRzJy4iKSx4TWUpLHBzKSxGRGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsdkcpLF9UZSksIkFkZGl0aW9uYWwgV3JhcHBlZCBFZGdlcyBTcGFjaW5nIiksIlRvIHZpc3VhbGx5IHNlcGFyYXRlIGVkZ2VzIHRoYXQgYXJlIHdyYXBwZWQgZnJvbSByZWd1bGFybHkgcm91dGVkIGVkZ2VzIGFuIGFkZGl0aW9uYWwgc3BhY2luZyB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm0gb2YgdGhpcyBsYXlvdXQgb3B0aW9uLiBUaGUgc3BhY2luZyBpcyBhZGRlZCB0byB0aGUgcmVndWxhciBlZGdlTm9kZSBzcGFjaW5nLiIpLDEwKSxmbyksdGEpLHVuKFBuKSkpKSxRcyh0LHZHLGZwLGNrdCksUXModCx2RyxmcCx1a3QpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCx3RyksX1RlKSwiQ29ycmVjdGlvbiBGYWN0b3IgZm9yIFdyYXBwaW5nIiksIkF0IHRpbWVzIGFuZCBmb3IgY2VydGFpbiB0eXBlcyBvZiBncmFwaHMgdGhlIGV4ZWN1dGVkIHdyYXBwaW5nIG1heSBwcm9kdWNlIHJlc3VsdHMgdGhhdCBhcmUgY29uc2lzdGVudGx5IGJpYXNlZCBpbiB0aGUgc2FtZSBmYXNoaW9uOiBlaXRoZXIgd3JhcHBpbmcgdG8gb2Z0ZW4gb3IgdG8gcmFyZWx5LiBUaGlzIGZhY3RvciBjYW4gYmUgdXNlZCB0byBjb3JyZWN0IHRoZSBiaWFzLiBJbnRlcm5hbGx5LCBpdCBpcyBzaW1wbHkgbXVsdGlwbGllZCB3aXRoIHRoZSAnYXNwZWN0IHJhdGlvJyBsYXlvdXQgb3B0aW9uLiIpLDEpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsd0csZnAsaGt0KSxRcyh0LHdHLGZwLGZrdCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGJMKSxheXQpLCJDdXR0aW5nIFN0cmF0ZWd5IiksIlRoZSBzdHJhdGVneSBieSB3aGljaCB0aGUgbGF5ZXIgaW5kZXhlcyBhcmUgZGV0ZXJtaW5lZCBhdCB3aGljaCB0aGUgbGF5ZXJpbmcgY3J1bWJsZXMgaW50byBjaHVua3MuIikseU1lKSxwcykscExlKSx1bihQbikpKSksUXModCxiTCxmcCx2a3QpLFFzKHQsYkwsZnAsd2t0KSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsc2ZlKSxheXQpLCJNYW51YWxseSBTcGVjaWZpZWQgQ3V0cyIpLCJBbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSBoZXIgb3duIGN1dHMgZm9yIGEgY2VydGFpbiBncmFwaC4iKSxYMSksbWYpLHVuKFBuKSkpKSxRcyh0LHNmZSxiTCxna3QpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxhZmUpLCJ3cmFwcGluZy5jdXR0aW5nLm1zZCIpLCJNU0QgRnJlZWRvbSIpLCJUaGUgTVNEIGN1dHRpbmcgc3RyYXRlZ3kgc3RhcnRzIHdpdGggYW4gaW5pdGlhbCBndWVzcyBvbiB0aGUgbnVtYmVyIG9mIGNodW5rcyB0aGUgZ3JhcGggc2hvdWxkIGJlIHNwbGl0IGludG8uIFRoZSBmcmVlZG9tIHNwZWNpZmllcyBob3cgbXVjaCB0aGUgc3RyYXRlZ3kgbWF5IGRldmlhdGUgZnJvbSB0aGlzIGd1ZXNzLiBFLmcuIGlmIGFuIGluaXRpYWwgbnVtYmVyIG9mIDMgaXMgY29tcHV0ZWQsIGEgZnJlZWRvbSBvZiAxIGFsbG93cyAyLCAzLCBhbmQgNCBjdXRzLiIpLHdNZSksVGMpLHJvKSx1bihQbikpKSksUXModCxhZmUsYkwsYmt0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQseUcpLG95dCksIlZhbGlkaWZpY2F0aW9uIFN0cmF0ZWd5IiksIldoZW4gd3JhcHBpbmcgZ3JhcGhzLCBvbmUgY2FuIHNwZWNpZnkgaW5kaWNlcyB0aGF0IGFyZSBub3QgYWxsb3dlZCBhcyBzcGxpdCBwb2ludHMuIFRoZSB2YWxpZGlmaWNhdGlvbiBzdHJhdGVneSBtYWtlcyBzdXJlIGV2ZXJ5IGNvbXB1dGVkIHNwbGl0IHBvaW50IGlzIGFsbG93ZWQuIiksa01lKSxwcyksQkRlKSx1bihQbikpKSksUXModCx5RyxmcCxEa3QpLFFzKHQseUcsZnAsSWt0KSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQseEcpLG95dCksIlZhbGlkIEluZGljZXMgZm9yIFdyYXBwaW5nIiksbnVsbCksWDEpLG1mKSx1bihQbikpKSksUXModCx4RyxmcCxBa3QpLFFzKHQseEcsZnAsTGt0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsa0cpLEFUZSksIkltcHJvdmUgQ3V0cyIpLCJGb3IgZ2VuZXJhbCBncmFwaHMgaXQgaXMgaW1wb3J0YW50IHRoYXQgbm90IHRvbyBtYW55IGVkZ2VzIHdyYXAgYmFja3dhcmRzLiBUaHVzIGEgY29tcHJvbWlzZSBiZXR3ZWVuIGV2ZW5seS1kaXN0cmlidXRlZCBjdXRzIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIGN1dCBlZGdlcyBpcyBzb3VnaHQuIiksITApLHlhKSxOcyksdW4oUG4pKSkpLFFzKHQsa0csZnAsRWt0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsRUcpLEFUZSksIkRpc3RhbmNlIFBlbmFsdHkgV2hlbiBJbXByb3ZpbmcgQ3V0cyIpLG51bGwpLDIpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsRUcsZnAseGt0KSxRcyh0LEVHLGtHLCEwKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsb2ZlKSxBVGUpLCJJbXByb3ZlIFdyYXBwZWQgRWRnZXMiKSwiVGhlIGluaXRpYWwgd3JhcHBpbmcgaXMgcGVyZm9ybWVkIGluIGEgdmVyeSBzaW1wbGUgd2F5LiBBcyBhIGNvbnNlcXVlbmNlLCBlZGdlcyB0aGF0IHdyYXAgZnJvbSBvbmUgY2h1bmsgdG8gYW5vdGhlciBtYXkgYmUgdW5uZWNlc3NhcmlseSBsb25nLiBBY3RpdmF0aW5nIHRoaXMgb3B0aW9uIHRyaWVzIHRvIHNob3J0ZW4gc3VjaCBlZGdlcy4iKSwhMCkseWEpLE5zKSx1bihQbikpKSksUXModCxvZmUsZnAsQ2t0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsd1RlKSxmZmUpLCJFZGdlIExhYmVsIFNpZGUgU2VsZWN0aW9uIiksIk1ldGhvZCB0byBkZWNpZGUgb24gZWRnZSBsYWJlbCBzaWRlcy4iKSxhTWUpLHBzKSx5TGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQseVRlKSxmZmUpLCJFZGdlIENlbnRlciBMYWJlbCBQbGFjZW1lbnQgU3RyYXRlZ3kiKSwiRGV0ZXJtaW5lcyBpbiB3aGljaCBsYXllciBjZW50ZXIgbGFiZWxzIG9mIGxvbmcgZWRnZXMgc2hvdWxkIGJlIHBsYWNlZC4iKSxzTWUpLHBzKSxOVCkscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW1MyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxURyksbUwpLCJDb25zaWRlciBNb2RlbCBPcmRlciIpLCJQcmVzZXJ2ZXMgdGhlIG9yZGVyIG9mIG5vZGVzIGFuZCBlZGdlcyBpbiB0aGUgbW9kZWwgZmlsZSBpZiB0aGlzIGRvZXMgbm90IGxlYWQgdG8gYWRkaXRpb25hbCBlZGdlIGNyb3NzaW5ncy4gRGVwZW5kaW5nIG9uIHRoZSBzdHJhdGVneSB0aGlzIGlzIG5vdCBhbHdheXMgcG9zc2libGUgc2luY2UgdGhlIG5vZGUgYW5kIGVkZ2Ugb3JkZXIgbWlnaHQgYmUgY29uZmxpY3RpbmcuIiksWkxlKSxwcyksU0RlKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHhUZSksbUwpLCJDb25zaWRlciBQb3J0IE9yZGVyIiksIklmIGRpc2FibGVkIHRoZSBwb3J0IG9yZGVyIG9mIG91dHB1dCBwb3J0cyBpcyBkZXJpdmVkIGZyb20gdGhlIGVkZ2Ugb3JkZXIgYW5kIGlucHV0IHBvcnRzIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIGluY29taW5nIGNvbm5lY3Rpb25zLiBJZiBlbmFibGVkIGFsbCBwb3J0cyBhcmUgb3JkZXJlZCBieSB0aGUgcG9ydCBtb2RlbCBvcmRlci4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGtUZSksbUwpLCJObyBNb2RlbCBPcmRlciIpLCJTZXQgb24gYSBub2RlIHRvIG5vdCBzZXQgYSBtb2RlbCBvcmRlciBmb3IgdGhpcyBub2RlIGV2ZW4gdGhvdWdoIGl0IGlzIGEgcmVhbCBub2RlLiIpLCExKSx5YSksTnMpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsY2ZlKSxtTCksIkNvbnNpZGVyIE1vZGVsIE9yZGVyIGZvciBDb21wb25lbnRzIiksIklmIHNldCB0byBOT05FIHRoZSB1c3VhbCBvcmRlcmluZyBzdHJhdGVneSAoYnkgY3VtdWxhdGl2ZSBub2RlIHByaW9yaXR5IGFuZCBzaXplIG9mIG5vZGVzKSBpcyB1c2VkLiBJTlNJREVfUE9SVF9TSURFUyBvcmRlcnMgdGhlIGNvbXBvbmVudHMgd2l0aCBleHRlcm5hbCBwb3J0cyBvbmx5IGluc2lkZSB0aGUgZ3JvdXBzIHdpdGggdGhlIHNhbWUgcG9ydCBzaWRlLiBGT1JDRV9NT0RFTF9PUkRFUiBlbmZvcmNlcyB0aGUgbW9kZSBvcmRlciBvbiBjb21wb25lbnRzLiBUaGlzIG9wdGlvbiBtaWdodCBwcm9kdWNlIGJhZCBhbGlnbm1lbnRzIGFuZCBzdWIgb3B0aW1hbCBkcmF3aW5ncyBpbiB0ZXJtcyBvZiB1c2VkIGFyZWEgc2luY2UgdGhlIG9yZGVyaW5nIHNob3VsZCBiZSByZXNwZWN0ZWQuIiksUUxlKSxwcyksbUFlKSx1bihQbikpKSksUXModCxjZmUsbEwsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEVUZSksbUwpLCJMb25nIEVkZ2UgT3JkZXJpbmcgU3RyYXRlZ3kiKSwiSW5kaWNhdGVzIHdoZXRoZXIgbG9uZyBlZGdlcyBhcmUgc29ydGVkIHVuZGVyLCBvdmVyLCBvciBlcXVhbCB0byBub2RlcyB0aGF0IGhhdmUgbm8gY29ubmVjdGlvbiB0byBhIHByZXZpb3VzIGxheWVyIGluIGEgbGVmdC10by1yaWdodCBvciByaWdodC10by1sZWZ0IGxheW91dC4gVW5kZXIgYW5kIG92ZXIgY2hhbmdlcyB0byByaWdodCBhbmQgbGVmdCBpbiBhIHZlcnRpY2FsIGxheW91dC4iKSxKTGUpLHBzKSxtRGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsdWZlKSxtTCksIkNyb3NzaW5nIENvdW50ZXIgTm9kZSBPcmRlciBJbmZsdWVuY2UiKSwiSW5kaWNhdGVzIHdpdGggd2hhdCBwZXJjZW50YWdlICgxIGZvciAxMDAlKSB2aW9sYXRpb25zIG9mIHRoZSBub2RlIG1vZGVsIG9yZGVyIGFyZSB3ZWlnaHRlZCBhZ2FpbnN0IHRoZSBjcm9zc2luZ3MgZS5nLiBhIHZhbHVlIG9mIDAuNSBtZWFucyB0d28gbW9kZWwgb3JkZXIgdmlvbGF0aW9ucyBhcmUgYXMgaW1wb3J0YW50IGFzIG9uIGVkZ2UgY3Jvc3NpbmcuIFRoaXMgYWxsb3dzIHNvbWUgZWRnZSBjcm9zc2luZ3MgaW4gZmF2b3Igb2YgcHJlc2VydmluZyB0aGUgbW9kZWwgb3JkZXIuIEl0IGlzIGFkdmlzZWQgdG8gc2V0IHRoaXMgdmFsdWUgdG8gYSB2ZXJ5IHNtYWxsIHBvc2l0aXZlIHZhbHVlIChlLmcuIDAuMDAxKSB0byBoYXZlIG1pbmltYWwgY3Jvc3NpbmcgYW5kIGEgb3B0aW1hbCBub2RlIG9yZGVyLiBEZWZhdWx0cyB0byBubyBpbmZsdWVuY2UgKDApLiIpLDApLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsdWZlLFRHLG51bGwpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxsZmUpLG1MKSwiQ3Jvc3NpbmcgQ291bnRlciBQb3J0IE9yZGVyIEluZmx1ZW5jZSIpLCJJbmRpY2F0ZXMgd2l0aCB3aGF0IHBlcmNlbnRhZ2UgKDEgZm9yIDEwMCUpIHZpb2xhdGlvbnMgb2YgdGhlIHBvcnQgbW9kZWwgb3JkZXIgYXJlIHdlaWdodGVkIGFnYWluc3QgdGhlIGNyb3NzaW5ncyBlLmcuIGEgdmFsdWUgb2YgMC41IG1lYW5zIHR3byBtb2RlbCBvcmRlciB2aW9sYXRpb25zIGFyZSBhcyBpbXBvcnRhbnQgYXMgb24gZWRnZSBjcm9zc2luZy4gVGhpcyBhbGxvd3Mgc29tZSBlZGdlIGNyb3NzaW5ncyBpbiBmYXZvciBvZiBwcmVzZXJ2aW5nIHRoZSBtb2RlbCBvcmRlci4gSXQgaXMgYWR2aXNlZCB0byBzZXQgdGhpcyB2YWx1ZSB0byBhIHZlcnkgc21hbGwgcG9zaXRpdmUgdmFsdWUgKGUuZy4gMC4wMDEpIHRvIGhhdmUgbWluaW1hbCBjcm9zc2luZyBhbmQgYSBvcHRpbWFsIHBvcnQgb3JkZXIuIERlZmF1bHRzIHRvIG5vIGluZmx1ZW5jZSAoMCkuIiksMCksZm8pLHRhKSx1bihQbikpKSksUXModCxsZmUsVEcsbnVsbCksVHd0KChuZXcgWHJlLHQpKX07dmFyIEx4dCxNeHQsRHh0LFlMZSxJeHQsWExlLE94dCxRTGUsTnh0LFB4dCxCeHQsSkxlLEZ4dCxSeHQsanh0LFpMZSwkeHQsenh0LHF4dCxlTWUsSHh0LFZ4dCxVeHQsdE1lLEd4dCxLeHQsV3h0LFl4dCxYeHQsUXh0LEp4dCxaeHQsZTl0LHQ5dCxuTWUsbjl0LHJNZSxyOXQsaU1lLGk5dCxzTWUsczl0LGFNZSxhOXQsbzl0LGM5dCxvTWUsdTl0LGNNZSxsOXQsdU1lLGg5dCxmOXQsZDl0LGc5dCxwOXQsYjl0LG05dCx2OXQsdzl0LHk5dCxsTWUseDl0LGs5dCxFOXQsVDl0LEM5dCxTOXQsaE1lLF85dCxBOXQsTDl0LE05dCxEOXQsSTl0LE85dCxmTWUsTjl0LGRNZSxQOXQsQjl0LEY5dCxnTWUsUjl0LGo5dCxwTWUsJDl0LHo5dCxxOXQsSDl0LFY5dCxVOXQsRzl0LEs5dCxiTWUsVzl0LFk5dCxYOXQsbU1lLFE5dCx2TWUsSjl0LFo5dCxla3QsdGt0LG5rdCxya3QsaWt0LHNrdCxha3Qsb2t0LGNrdCx1a3QsbGt0LGhrdCxma3QsZGt0LGdrdCxwa3Qsd01lLGJrdCxta3QseU1lLHZrdCx3a3QseWt0LHhrdCxra3QsRWt0LFRrdCxDa3QsU2t0LHhNZSxfa3QsQWt0LExrdCxNa3Qsa01lLERrdCxJa3Q7SShvdSwiTGF5ZXJlZE1ldGFEYXRhUHJvdmlkZXIiLDg1OSksRCg5OTgsMSxQZixYcmUpLGguaGY9ZnVuY3Rpb24odCl7VHd0KHQpfTt2YXIgUmQsWDFlLGNXLFFMLHVXLEVNZSxsVyxnNCxoVyxUTWUsQ01lLGZXLFExZSx5ZyxKMWUsZjMsU01lLFRCLFoxZSxfTWUsT2t0LE5rdCxQa3QsZFcsZWRlLEpMLGR2LEJrdCxSaCxBTWUsTE1lLGdXLHRkZSxqZCxwVyxicCxNTWUsRE1lLElNZSxuZGUscmRlLE9NZSx4MixpZGUsTk1lLHA0LFBNZSxCTWUsRk1lLGJXLGI0LGd2LFJNZSxqTWUsY2MsJE1lLEZrdCxRdSxtVyx6TWUscU1lLEhNZSx6Yixwdix2VyxWTWUsVU1lLHdXLGQzLEdNZSxzZGUsWkwsS01lLGczLGVNLHlXLGJ2LGFkZSxxVCx4VyxtdixXTWUsWU1lLFhNZSxIVCxRTWUsUmt0LGprdCwka3Qsemt0LHAzLG00LE1zLGsyLHFrdCx2NCxKTWUsVlQsWk1lLHc0LEhrdCxVVCxlRGUsSngsVmt0LFVrdCxDQixvZGUsdERlLFNCLHgwLHE2LEg2LGIzLHZ2LGtXLHk0LGNkZSxHVCxLVCxtMyxWNix1ZGUsX0IsdE0sbk0sR2t0LEtrdCxXa3QsbkRlLFlrdCxsZGUsckRlLGlEZSxzRGUsYURlLGhkZSxvRGUsY0RlLHVEZSxsRGUsZmRlLEVXO0kob3UsIkxheWVyZWRPcHRpb25zIiw5OTgpLEQoOTk5LDEse30sUmVlKSxoLnNmPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bmV3IHFRZSx0fSxoLnRmPWZ1bmN0aW9uKHQpe30sSShvdSwiTGF5ZXJlZE9wdGlvbnMvTGF5ZXJlZEZhY3RvcnkiLDk5OSksRCgxMzkxLDEse30pLGguYT0wO3ZhciBYa3Q7SShVYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIiLDEzOTEpLEQoNzkyLDEzOTEse30sRDhlKTt2YXIgVFcsUWt0O0kob3UsIkxheWVyZWRTcGFjaW5ncy9MYXllcmVkU3BhY2luZ3NCdWlsZGVyIiw3OTIpLEQoMjY1LDIyLHszOjEsMzQ6MSwyMjoxLDI2NToxLDE4ODoxLDE5NjoxfSxNNSksaC5kZz1mdW5jdGlvbigpe3JldHVybiBqYnQodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gamJ0KHRoaXMpfTt2YXIgV1QsZGRlLFlULGhEZSxmRGUsZERlLENXLGdkZSxnRGUscERlPUZyKG91LCJMYXllcmluZ1N0cmF0ZWd5IiwyNjUsSHIsUnduLEgwbiksSmt0O0QoMzkwLDIyLHszOjEsMzQ6MSwyMjoxLDM5MDoxfSxUc2UpO3ZhciBwZGUsYkRlLFNXLG1EZT1GcihvdSwiTG9uZ0VkZ2VPcmRlcmluZ1N0cmF0ZWd5IiwzOTAsSHIsVjJuLFYwbiksWmt0O0QoMjAzLDIyLHszOjEsMzQ6MSwyMjoxLDIwMzoxfSxicSk7dmFyIFU2LEc2LF9XLGJkZSxtZGU9RnIob3UsIk5vZGVGbGV4aWJpbGl0eSIsMjAzLEhyLFpibixVMG4pLGVFdDtEKDMyMywyMix7MzoxLDM0OjEsMjI6MSwzMjM6MSwxODg6MSwxOTY6MX0saE8pLGguZGc9ZnVuY3Rpb24oKXtyZXR1cm4gTDJ0KHRoaXMpfSxoLnFnPWZ1bmN0aW9uKCl7cmV0dXJuIEwydCh0aGlzKX07dmFyIHJNLHZkZSx3ZGUsaU0sdkRlLHdEZT1GcihvdSwiTm9kZVBsYWNlbWVudFN0cmF0ZWd5IiwzMjMsSHIsVm1uLEcwbiksdEV0O0QoMjQzLDIyLHszOjEsMzQ6MSwyMjoxLDI0MzoxfSxseSk7dmFyIHlEZSx2Myx4NCxBQix4RGUsa0RlLExCLEVEZSxBVyxMVyxURGU9RnIob3UsIk5vZGVQcm9tb3Rpb25TdHJhdGVneSIsMjQzLEhyLHUzbixLMG4pLG5FdDtEKDI4NCwyMix7MzoxLDM0OjEsMjI6MSwyODQ6MX0sbXEpO3ZhciBDRGUsRTIseWRlLHhkZSxTRGU9RnIob3UsIk9yZGVyaW5nU3RyYXRlZ3kiLDI4NCxIcixlbW4sVzBuKSxyRXQ7RCg0MzAsMjIsezM6MSwzNDoxLDIyOjEsNDMwOjF9LFIzZSk7dmFyIGtkZSxFZGUsX0RlPUZyKG91LCJQb3J0U29ydGluZ1N0cmF0ZWd5Iiw0MzAsSHIsR3BuLFkwbiksaUV0O0QoNDYzLDIyLHszOjEsMzQ6MSwyMjoxLDQ2MzoxfSxDc2UpO3ZhciAkbCx6dSxzTSxzRXQ9RnIob3UsIlBvcnRUeXBlIiw0NjMsSHIsVTJuLFgwbiksYUV0O0QoMzg3LDIyLHszOjEsMzQ6MSwyMjoxLDM4NzoxfSxTc2UpO3ZhciBBRGUsVGRlLExEZSxNRGU9RnIob3UsIlNlbGZMb29wRGlzdHJpYnV0aW9uU3RyYXRlZ3kiLDM4NyxIcixHMm4sUTBuKSxvRXQ7RCgzNDksMjIsezM6MSwzNDoxLDIyOjEsMzQ5OjF9LF9zZSk7dmFyIENkZSxNQixTZGUsRERlPUZyKG91LCJTZWxmTG9vcE9yZGVyaW5nU3RyYXRlZ3kiLDM0OSxIcixLMm4sSjBuKSxjRXQ7RCgzMTIsMSx7MzEyOjF9LHh2dCksSShvdSwiU3BhY2luZ3MiLDMxMiksRCgzNTAsMjIsezM6MSwzNDoxLDIyOjEsMzUwOjF9LEFzZSk7dmFyIF9kZSxJRGUsYU0sT0RlPUZyKG91LCJTcGxpbmVSb3V0aW5nTW9kZSIsMzUwLEhyLFcybixaMG4pLHVFdDtEKDM1MiwyMix7MzoxLDM0OjEsMjI6MSwzNTI6MX0sTHNlKTt2YXIgQWRlLE5EZSxQRGUsQkRlPUZyKG91LCJWYWxpZGlmeVN0cmF0ZWd5IiwzNTIsSHIsWTJuLGUxbiksbEV0O0QoMzg4LDIyLHszOjEsMzQ6MSwyMjoxLDM4ODoxfSxNc2UpO3ZhciBrNCxMZGUsWFQsRkRlPUZyKG91LCJXcmFwcGluZ1N0cmF0ZWd5IiwzODgsSHIsWDJuLHQxbiksaEV0O0QoMTM5OCwxLFVvLFVyZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSxmRXR9LGguS2Y9ZnVuY3Rpb24odCxuKXtOTG4odGhpcyxsKHQsMzYpLG4pfTt2YXIgZkV0O0koTEcsIkRlcHRoRmlyc3RDeWNsZUJyZWFrZXIiLDEzOTgpLEQoNzkzLDEsVW8sUTRlKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLGRFdH0saC5LZj1mdW5jdGlvbih0LG4pe0ZJbih0aGlzLGwodCwzNiksbil9LGguc2c9ZnVuY3Rpb24odCl7cmV0dXJuIGwoanQodCxhVSh0aGlzLmQsdC5jLmxlbmd0aCkpLDEwKX07dmFyIGRFdDtJKExHLCJHcmVlZHlDeWNsZUJyZWFrZXIiLDc5MyksRCgxNDAxLDc5MyxVbywkdHQpLGguc2c9ZnVuY3Rpb24odCl7dmFyIG4scixhLG87Zm9yKG89bnVsbCxuPUlpLGE9bmV3IEcodCk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDEwKSxucyhyLChmdCgpLEtpKSkmJmwoUShyLEtpKSwxNykuYTxuJiYobj1sKFEocixLaSksMTcpLmEsbz1yKTtyZXR1cm4gb3x8bChqdCh0LGFVKHRoaXMuZCx0LmMubGVuZ3RoKSksMTApfSxJKExHLCJHcmVlZHlNb2RlbE9yZGVyQ3ljbGVCcmVha2VyIiwxNDAxKSxEKDEzOTksMSxVbyxveiksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSxnRXR9LGguS2Y9ZnVuY3Rpb24odCxuKXtITG4odGhpcyxsKHQsMzYpLG4pfTt2YXIgZ0V0O0koTEcsIkludGVyYWN0aXZlQ3ljbGVCcmVha2VyIiwxMzk5KSxEKDE0MDAsMSxVbyxtOCksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSxwRXR9LGguS2Y9ZnVuY3Rpb24odCxuKXtaTG4odGhpcyxsKHQsMzYpLG4pfSxoLmE9MCxoLmI9MDt2YXIgcEV0O0koTEcsIk1vZGVsT3JkZXJDeWNsZUJyZWFrZXIiLDE0MDApLEQoMTQxMywxLFVvLGF6KSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLGJFdH0saC5LZj1mdW5jdGlvbih0LG4pe3FEbih0aGlzLGwodCwzNiksbil9O3ZhciBiRXQ7SShkcCwiQnJlYWR0aEZpcnN0TW9kZWxPcmRlckxheWVyZXIiLDE0MTMpLEQoMTQxNCwxLGlpLGplZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBka24obCh0LDEwKSxsKG4sMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGRwLCJCcmVhZHRoRmlyc3RNb2RlbE9yZGVyTGF5ZXJlci9sYW1iZGEkMCRUeXBlIiwxNDE0KSxEKDE0MDQsMSxVbyxmZXQpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzNiksbUV0fSxoLktmPWZ1bmN0aW9uKHQsbil7cUluKHRoaXMsbCh0LDM2KSxuKX07dmFyIG1FdDtJKGRwLCJDb2ZmbWFuR3JhaGFtTGF5ZXJlciIsMTQwNCksRCgxNDA1LDEsaWksTFllKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFprbih0aGlzLmEsbCh0LDEwKSxsKG4sMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGRwLCJDb2ZmbWFuR3JhaGFtTGF5ZXJlci8wbWV0aG9kcmVmJGNvbXBhcmVOb2Rlc0luVG9wbyRUeXBlIiwxNDA1KSxEKDE0MDYsMSxpaSxNWWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWmRuKHRoaXMuYSxsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZHAsIkNvZmZtYW5HcmFoYW1MYXllcmVyL2xhbWJkYSQxJFR5cGUiLDE0MDYpLEQoMTQxNSwxLFVvLFJJKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLHZFdH0saC5LZj1mdW5jdGlvbih0LG4pe0xJbih0aGlzLGwodCwzNiksbil9LGguYz0wLGguZT0wO3ZhciB2RXQ7SShkcCwiRGVwdGhGaXJzdE1vZGVsT3JkZXJMYXllcmVyIiwxNDE1KSxEKDE0MTYsMSxpaSwkZWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZ2tuKGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShkcCwiRGVwdGhGaXJzdE1vZGVsT3JkZXJMYXllcmVyL2xhbWJkYSQwJFR5cGUiLDE0MTYpLEQoMTQwNywxLFVvLHplZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSxmaShmaShmaShuZXcgWHMsKHVvKCkseTApLCh2bygpLGYxZSkpLHZnLGw0KSxidSx1NCl9LGguS2Y9ZnVuY3Rpb24odCxuKXt0SW4obCh0LDM2KSxuKX0sSShkcCwiSW50ZXJhY3RpdmVMYXllcmVyIiwxNDA3KSxEKDU3OCwxLHs1Nzg6MX0sR1FlKSxoLmE9MCxoLmM9MCxJKGRwLCJJbnRlcmFjdGl2ZUxheWVyZXIvTGF5ZXJTcGFuIiw1NzgpLEQoMTQwMywxLFVvLFhTKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLHdFdH0saC5LZj1mdW5jdGlvbih0LG4pe0xDbih0aGlzLGwodCwzNiksbil9O3ZhciB3RXQ7SShkcCwiTG9uZ2VzdFBhdGhMYXllcmVyIiwxNDAzKSxEKDE0MTIsMSxVbyxZUyksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSx5RXR9LGguS2Y9ZnVuY3Rpb24odCxuKXtaQ24odGhpcyxsKHQsMzYpLG4pfTt2YXIgeUV0O0koZHAsIkxvbmdlc3RQYXRoU291cmNlTGF5ZXJlciIsMTQxMiksRCgxNDEwLDEsVW8sakkpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzNiksZmkoZmkoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxENikpLHZnLGw0KSxidSx1NCl9LGguS2Y9ZnVuY3Rpb24odCxuKXtsSW4odGhpcyxsKHQsMzYpLG4pfSxoLmE9MCxoLmI9MCxoLmQ9MDt2YXIgUkRlLGpEZTtJKGRwLCJNaW5XaWR0aExheWVyZXIiLDE0MTApLEQoMTQxMSwxLGlpLERZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBEM24odGhpcyxsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZHAsIk1pbldpZHRoTGF5ZXJlci9NaW5PdXRnb2luZ0VkZ2VzQ29tcGFyYXRvciIsMTQxMSksRCgxNDAyLDEsVW8sR3JlKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLHhFdH0saC5LZj1mdW5jdGlvbih0LG4pe1RNbih0aGlzLGwodCwzNiksbil9O3ZhciB4RXQ7SShkcCwiTmV0d29ya1NpbXBsZXhMYXllcmVyIiwxNDAyKSxEKDE0MDgsMSxVbyx6cnQpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzNiksZmkoZmkoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxENikpLHZnLGw0KSxidSx1NCl9LGguS2Y9ZnVuY3Rpb24odCxuKXtjRG4odGhpcyxsKHQsMzYpLG4pfSxoLmQ9MCxoLmY9MCxoLmc9MCxoLmk9MCxoLnM9MCxoLnQ9MCxoLnU9MCxJKGRwLCJTdHJldGNoV2lkdGhMYXllcmVyIiwxNDA4KSxEKDE0MDksMSxpaSxxZWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gY3ZuKGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShkcCwiU3RyZXRjaFdpZHRoTGF5ZXJlci8xIiwxNDA5KSxEKDQxMywxLHVDZSksaC5nZz1mdW5jdGlvbih0LG4scixhLG8sZil7fSxoLnVnPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gZm10KHRoaXMsdCxuLHIpfSxoLmZnPWZ1bmN0aW9uKCl7dGhpcy5nPVdlKEI0LHV5dCwyOCx0aGlzLmQsMTUsMSksdGhpcy5mPVdlKEI0LHV5dCwyOCx0aGlzLmQsMTUsMSl9LGguaGc9ZnVuY3Rpb24odCxuKXt0aGlzLmVbdF09V2UoVnIsZGksMjgsblt0XS5sZW5ndGgsMTUsMSl9LGguaWc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO2E9clt0XVtuXSxhLnA9bix0aGlzLmVbdF1bbl09bn0saC5qZz1mdW5jdGlvbih0LG4scixhKXtsKGp0KGFbdF1bbl0uaixyKSwxMikucD10aGlzLmQrK30saC5iPTAsaC5jPTAsaC5kPTAsSShDbCwiQWJzdHJhY3RCYXJ5Y2VudGVyUG9ydERpc3RyaWJ1dG9yIiw0MTMpLEQoMTY5OCwxLGlpLElZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBpNm4odGhpcy5hLGwodCwxMiksbChuLDEyKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShDbCwiQWJzdHJhY3RCYXJ5Y2VudGVyUG9ydERpc3RyaWJ1dG9yL2xhbWJkYSQwJFR5cGUiLDE2OTgpLEQoODMyLDEselAsbjZlKSxoLmdnPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXt9LGguaWc9ZnVuY3Rpb24odCxuLHIpe30saC5qZz1mdW5jdGlvbih0LG4scixhKXt9LGguZWc9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5mZz1mdW5jdGlvbigpe3RoaXMuYz10aGlzLmUuYSx0aGlzLmc9dGhpcy5mLmd9LGguaGc9ZnVuY3Rpb24odCxuKXtuW3RdWzBdLmMucD10fSxoLmtnPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgudmc9ZnVuY3Rpb24odCxuLHIsYSl7cj9wZ3QodGhpcyx0KTood2d0KHRoaXMsdCxhKSxOdnQodGhpcyx0LG4pKSx0LmMubGVuZ3RoPjEmJihSdChCdChRKGVvKChTbigwLHQuYy5sZW5ndGgpLGwodC5jWzBdLDEwKSkpLChOdCgpLGYzKSkpKT9xMnQodCx0aGlzLmQsbCh0aGlzLDY2OSkpOihDbigpLFZzKHQsdGhpcy5kKSksSGZ0KHRoaXMuZSx0KSl9LGgubGc9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEw7Zm9yKG4hPWFzdChyLHQubGVuZ3RoKSYmKGY9dFtuLShyPzE6LTEpXSxTNmUodGhpcy5mLGYscj8ocW8oKSx6dSk6KHFvKCksJGwpKSksbz10W25dWzBdLEw9IWF8fG8uaz09KFpuKCksVXMpLEM9TzEodFtuXSksdGhpcy52ZyhDLEwsITEsciksZz0wLEU9bmV3IEcoQyk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDEwKSx0W25dW2crK109dztyZXR1cm4hMX0saC5tZz1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKGc9YXN0KG4sdC5sZW5ndGgpLGY9TzEodFtnXSksdGhpcy52ZyhmLCExLCEwLG4pLHI9MCxvPW5ldyBHKGYpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwxMCksdFtnXVtyKytdPWE7cmV0dXJuITF9LEkoQ2wsIkJhcnljZW50ZXJIZXVyaXN0aWMiLDgzMiksRCg2NjcsMSx7NjY3OjF9LFBZZSksaC5JYj1mdW5jdGlvbigpe3JldHVybiJCYXJ5Y2VudGVyU3RhdGUgW25vZGU9Iit0aGlzLmMrIiwgc3VtbWVkV2VpZ2h0PSIrdGhpcy5kKyIsIGRlZ3JlZT0iK3RoaXMuYisiLCBiYXJ5Y2VudGVyPSIrdGhpcy5hKyIsIHZpc2l0ZWQ9Iit0aGlzLmUrIl0ifSxoLmI9MCxoLmQ9MCxoLmU9ITE7dmFyIGtFdD1JKENsLCJCYXJ5Y2VudGVySGV1cmlzdGljL0JhcnljZW50ZXJTdGF0ZSIsNjY3KTtEKDE4NjUsMSxpaSxPWWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gSjhuKHRoaXMuYSxsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoQ2wsIkJhcnljZW50ZXJIZXVyaXN0aWMvbGFtYmRhJDAkVHlwZSIsMTg2NSksRCg4MzEsMSx6UCxQeGUpLGguZmc9ZnVuY3Rpb24oKXt9LGguZ2c9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe30saC5qZz1mdW5jdGlvbih0LG4scixhKXt9LGguaGc9ZnVuY3Rpb24odCxuKXt0aGlzLmFbdF09V2Uoa0V0LHszOjEsNDoxLDU6MSwyMTE3OjF9LDY2NyxuW3RdLmxlbmd0aCwwLDEpLHRoaXMuYlt0XT1XZShFRXQsezM6MSw0OjEsNToxLDIxMTg6MX0sMjM5LG5bdF0ubGVuZ3RoLDAsMSl9LGguaWc9ZnVuY3Rpb24odCxuLHIpe2VkdCh0aGlzLHJbdF1bbl0sITApfSxoLmM9ITEsSShDbCwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlciIsODMxKSxEKDIzOSwxLHsyMzk6MX0sS2F0LHl2dCksaC5JYj1mdW5jdGlvbigpe3ZhciB0LG47Zm9yKG49bmV3IHRiLG4uYSs9IlsiLHQ9MDt0PHRoaXMuZC5sZW5ndGg7dCsrKWhpKG4scGR0KHRoaXMuZFt0XSkpLEwxKHRoaXMuZyx0aGlzLmRbMF0pLmEhPW51bGwmJmhpKGhpKChuLmErPSI8IixuKSxUbG4oTDEodGhpcy5nLHRoaXMuZFswXSkuYSkpLCI+IiksdDx0aGlzLmQubGVuZ3RoLTEmJihuLmErPUNvKTtyZXR1cm4obi5hKz0iXSIsbikuYX0saC5hPTAsaC5jPTAsaC5mPTA7dmFyIEVFdD1JKENsLCJGb3JzdGVyQ29uc3RyYWludFJlc29sdmVyL0NvbnN0cmFpbnRHcm91cCIsMjM5KTtEKDE4NjAsMSxmcixOWWUpLGguQ2Q9ZnVuY3Rpb24odCl7ZWR0KHRoaXMuYSxsKHQsMTApLCExKX0sSShDbCwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlci9sYW1iZGEkMCRUeXBlIiwxODYwKSxEKDIxOSwxLHsyMTk6MSwyMzA6MX0sRXZ0KSxoLmdnPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXt9LGguaGc9ZnVuY3Rpb24odCxuKXt9LGguZmc9ZnVuY3Rpb24oKXt0aGlzLnI9V2UoVnIsZGksMjgsdGhpcy5uLDE1LDEpfSxoLmlnPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO289clt0XVtuXSxhPW8uZSxhJiZ2dCh0aGlzLmIsYSl9LGguamc9ZnVuY3Rpb24odCxuLHIsYSl7Kyt0aGlzLm59LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gUHZ0KHRoaXMuZSxuZXcgS3MpfSxoLmc9ITEsaC5pPSExLGgubj0wLGgucz0hMSxJKENsLCJHcmFwaEluZm9Ib2xkZXIiLDIxOSksRCgxOTA1LDEselAsSGVlKSxoLmdnPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXt9LGguaGc9ZnVuY3Rpb24odCxuKXt9LGguamc9ZnVuY3Rpb24odCxuLHIsYSl7fSxoLnVnPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gciYmbj4wP2xvZSh0aGlzLmEsdFtuLTFdLHRbbl0pOiFyJiZuPHQubGVuZ3RoLTE/bG9lKHRoaXMuYSx0W25dLHRbbisxXSk6aWNlKHRoaXMuYSx0W25dLHI/KEN0KCksZXIpOihDdCgpLGFyKSksRFRuKHRoaXMsdCxuLHIpfSxoLmZnPWZ1bmN0aW9uKCl7dGhpcy5kPVdlKFZyLGRpLDI4LHRoaXMuYywxNSwxKSx0aGlzLmE9bmV3IElPKHRoaXMuZCl9LGguaWc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO2E9clt0XVtuXSx0aGlzLmMrPWEuai5jLmxlbmd0aH0saC5jPTAsSShDbCwiR3JlZWR5UG9ydERpc3RyaWJ1dG9yIiwxOTA1KSxEKDE0MjEsMSxVbyxRcmUpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIFl5bihsKHQsMzYpKX0saC5LZj1mdW5jdGlvbih0LG4pe1ZNbihsKHQsMzYpLG4pfTt2YXIgVEV0O0koQ2wsIkludGVyYWN0aXZlQ3Jvc3NpbmdNaW5pbWl6ZXIiLDE0MjEpLEQoMTQyMiwxLGlpLEZZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBPOG4odGhpcyxsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoQ2wsIkludGVyYWN0aXZlQ3Jvc3NpbmdNaW5pbWl6ZXIvMSIsMTQyMiksRCg1MTQsMSx7NTE0OjEsMTA2OjEsNDc6MX0sV2llKSxoLnJnPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBsKHQsMzYpLG49T3EoQ0V0KSxmaShuLCh1bygpLGJ1KSwodm8oKSxSSykpLG59LGguS2Y9ZnVuY3Rpb24odCxuKXtRX24odGhpcyxsKHQsMzYpLG4pfSxoLmU9MDt2YXIgQ0V0O0koQ2wsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplciIsNTE0KSxEKDE0MTgsMSxmcixSWWUpLGguQ2Q9ZnVuY3Rpb24odCl7ekFuKHRoaXMuYSxsKHQsMjE5KSl9LEkoQ2wsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci8wbWV0aG9kcmVmJGNvbXBhcmVEaWZmZXJlbnRSYW5kb21pemVkTGF5b3V0cyRUeXBlIiwxNDE4KSxEKDE0MTksMSxmcixqWWUpLGguQ2Q9ZnVuY3Rpb24odCl7S3luKHRoaXMuYSxsKHQsMjE5KSl9LEkoQ2wsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci8xbWV0aG9kcmVmJG1pbmltaXplQ3Jvc3NpbmdzTm9Db3VudGVyJFR5cGUiLDE0MTkpLEQoMTQyMCwxLGZyLCRZZSksaC5DZD1mdW5jdGlvbih0KXtKbXQodGhpcy5hLGwodCwyMTkpKX0sSShDbCwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyLzJtZXRob2RyZWYkbWluaW1pemVDcm9zc2luZ3NXaXRoQ291bnRlciRUeXBlIiwxNDIwKSxEKDQ2NCwyMix7MzoxLDM0OjEsMjI6MSw0NjQ6MX0sRHNlKTt2YXIgREIsb00sTVcsU0V0PUZyKENsLCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvQ3Jvc3NNaW5UeXBlIiw0NjQsSHIsUTJuLG4xbiksX0V0O0QoMTQxNywxLHRpLFZlZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gRTdlKCksbCh0LDMwKS5hLmMubGVuZ3RoPT0wfSxJKENsLCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvbGFtYmRhJDAkVHlwZSIsMTQxNyksRCgxODYyLDEselAsQ290KSxoLmZnPWZ1bmN0aW9uKCl7fSxoLmdnPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXt9LGguamc9ZnVuY3Rpb24odCxuLHIsYSl7fSxoLmhnPWZ1bmN0aW9uKHQsbil7blt0XVswXS5jLnA9dCx0aGlzLmJbdF09V2UoQUV0LHszOjEsNDoxLDU6MSwyMDQzOjF9LDY2OCxuW3RdLmxlbmd0aCwwLDEpfSxoLmlnPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTthPXJbdF1bbl0sYS5wPW4sVHModGhpcy5iW3RdLG4sbmV3IGdJKX0sSShDbCwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyIiwxODYyKSxEKDY2OCwxLHs2Njg6MX0sZ0kpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTm9kZUluZm8gW2Nvbm5lY3RlZEVkZ2VzPSIrdGhpcy5hKyIsIGhpZXJhcmNoaWNhbEluZmx1ZW5jZT0iK3RoaXMuYisiLCByYW5kb21JbmZsdWVuY2U9Iit0aGlzLmMrIl0ifSxoLmE9MCxoLmI9MCxoLmM9MDt2YXIgQUV0PUkoQ2wsIkxheWVyU3dlZXBUeXBlRGVjaWRlci9Ob2RlSW5mbyIsNjY4KTtEKDE4NjMsMSxMZCxVZWUpLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuICRfKG5ldyBOMShsKHQsMTIpLmIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuICRfKG5ldyBOMShsKHQsMTIpLmIpKX0sSShDbCwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyL2xhbWJkYSQwJFR5cGUiLDE4NjMpLEQoMTg2NCwxLExkLFg5KSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiAkXyhuZXcgTjEobCh0LDEyKS5iKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiAkXyhuZXcgTjEobCh0LDEyKS5iKSl9LEkoQ2wsIkxheWVyU3dlZXBUeXBlRGVjaWRlci9sYW1iZGEkMSRUeXBlIiwxODY0KSxEKDE5MDYsNDEzLHVDZSxLSmUpLGgudGc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQjtzd2l0Y2goQz10aGlzLmcsci5nKXtjYXNlIDE6e2ZvcihhPTAsbz0wLEU9bmV3IEcodC5qKTtFLmE8RS5jLmMubGVuZ3RoOylnPWwocmUoRSksMTIpLGcuZS5jLmxlbmd0aCE9MCYmKCsrYSxnLmo9PShDdCgpLFFuKSYmKytvKTtmb3IoZj1uK28sQj1uK2Esdz1Sdyh0LChxbygpLCRsKSkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLGcuaj09KEN0KCksUW4pPyhDW2cucF09ZiwtLWYpOihDW2cucF09QiwtLUIpO3JldHVybiBhfWNhc2UgMjp7Zm9yKEw9MCx3PVJ3KHQsKHFvKCksenUpKS5LYygpO3cuT2IoKTspZz1sKHcuUGIoKSwxMiksKytMLENbZy5wXT1uK0w7cmV0dXJuIEx9ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWUkpfX0sSShDbCwiTGF5ZXJUb3RhbFBvcnREaXN0cmlidXRvciIsMTkwNiksRCg2NjksODMyLHs2Njk6MSwyMzA6MX0sYmZ0KSxoLnZnPWZ1bmN0aW9uKHQsbixyLGEpe3I/cGd0KHRoaXMsdCk6KHdndCh0aGlzLHQsYSksTnZ0KHRoaXMsdCxuKSksdC5jLmxlbmd0aD4xJiYoUnQoQnQoUShlbygoU24oMCx0LmMubGVuZ3RoKSxsKHQuY1swXSwxMCkpKSwoTnQoKSxmMykpKSk/cTJ0KHQsdGhpcy5kLHRoaXMpOihDbigpLFZzKHQsdGhpcy5kKSksUnQoQnQoUShlbygoU24oMCx0LmMubGVuZ3RoKSxsKHQuY1swXSwxMCkpKSxmMykpKXx8SGZ0KHRoaXMuZSx0KSl9LEkoQ2wsIk1vZGVsT3JkZXJCYXJ5Y2VudGVySGV1cmlzdGljIiw2NjkpLEQoMTg2NiwxLGlpLHpZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBPOW4odGhpcy5hLGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShDbCwiTW9kZWxPcmRlckJhcnljZW50ZXJIZXVyaXN0aWMvbGFtYmRhJDAkVHlwZSIsMTg2NiksRCgxNDIzLDEsVW8sSnJlKSxoLnJnPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBsKHQsMzYpLG49T3EoTEV0KSxmaShuLCh1bygpLGJ1KSwodm8oKSxSSykpLG59LGguS2Y9ZnVuY3Rpb24odCxuKXticG4oKGwodCwzNiksbikpfTt2YXIgTEV0O0koQ2wsIk5vQ3Jvc3NpbmdNaW5pbWl6ZXIiLDE0MjMpLEQoODA5LDQxMyx1Q2UsbzNlKSxoLnRnPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO3N3aXRjaChCPXRoaXMuZyxyLmcpe2Nhc2UgMTp7Zm9yKG89MCxmPTAsTD1uZXcgRyh0LmopO0wuYTxMLmMuYy5sZW5ndGg7KUU9bChyZShMKSwxMiksRS5lLmMubGVuZ3RoIT0wJiYoKytvLEUuaj09KEN0KCksUW4pJiYrK2YpO2ZvcihhPTEvKG8rMSksZz1uK2YqYSxWPW4rMS1hLEM9UncodCwocW8oKSwkbCkpLktjKCk7Qy5PYigpOylFPWwoQy5QYigpLDEyKSxFLmo9PShDdCgpLFFuKT8oQltFLnBdPWcsZy09YSk6KEJbRS5wXT1WLFYtPWEpO2JyZWFrfWNhc2UgMjp7Zm9yKHc9MCxMPW5ldyBHKHQuaik7TC5hPEwuYy5jLmxlbmd0aDspRT1sKHJlKEwpLDEyKSxFLmcuYy5sZW5ndGg9PTB8fCsrdztmb3IoYT0xLyh3KzEpLHo9bithLEM9UncodCwocW8oKSx6dSkpLktjKCk7Qy5PYigpOylFPWwoQy5QYigpLDEyKSxCW0UucF09eix6Kz1hO2JyZWFrfWRlZmF1bHQ6dGhyb3cgdWUobmV3IFluKCJQb3J0IHR5cGUgaXMgdW5kZWZpbmVkIikpfXJldHVybiAxfSxJKENsLCJOb2RlUmVsYXRpdmVQb3J0RGlzdHJpYnV0b3IiLDgwOSksRCg4MjIsMSx7fSxGc3QsUWd0KSxJKENsLCJTd2VlcENvcHkiLDgyMiksRCgxODYxLDEselAsUDF0KSxoLmhnPWZ1bmN0aW9uKHQsbil7fSxoLmZnPWZ1bmN0aW9uKCl7dmFyIHQ7dD1XZShWcixkaSwyOCx0aGlzLmYsMTUsMSksdGhpcy5kPW5ldyBZWWUodCksdGhpcy5hPW5ldyBJTyh0KX0saC5nZz1mdW5jdGlvbih0LG4scixhLG8sZil7dmFyIGc7Zz1sKGp0KGZbdF1bbl0uaixyKSwxMiksby5jPT1nJiZvLmMuaS5jPT1vLmQuaS5jJiYrK3RoaXMuZVt0XX0saC5pZz1mdW5jdGlvbih0LG4scil7dmFyIGE7YT1yW3RdW25dLHRoaXMuY1t0XT10aGlzLmNbdF18YS5rPT0oWm4oKSxBdSl9LGguamc9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIG87bz1sKGp0KGFbdF1bbl0uaixyKSwxMiksby5wPXRoaXMuZisrLG8uZy5jLmxlbmd0aCtvLmUuYy5sZW5ndGg+MSYmKG8uaj09KEN0KCksYXIpP3RoaXMuYlt0XT0hMDpvLmo9PWVyJiZ0PjAmJih0aGlzLmJbdC0xXT0hMCkpfSxoLmY9MCxJKGJnLCJBbGxDcm9zc2luZ3NDb3VudGVyIiwxODYxKSxEKDU5NSwxLHt9LFRWKSxoLmI9MCxoLmQ9MCxJKGJnLCJCaW5hcnlJbmRleGVkVHJlZSIsNTk1KSxEKDUzMiwxLHt9LElPKTt2YXIgJERlLERXO0koYmcsIkNyb3NzaW5nc0NvdW50ZXIiLDUzMiksRCgxOTUwLDEsaWkscVllKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHFkbih0aGlzLmEsbCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGJnLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQwJFR5cGUiLDE5NTApLEQoMTk1MSwxLGlpLEhZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBIZG4odGhpcy5hLGwodCwxMiksbChuLDEyKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShiZywiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkMSRUeXBlIiwxOTUxKSxEKDE5NTIsMSxpaSxWWWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gVmRuKHRoaXMuYSxsKHQsMTIpLGwobiwxMikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoYmcsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDIkVHlwZSIsMTk1MiksRCgxOTUzLDEsaWksVVllKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFVkbih0aGlzLmEsbCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGJnLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQzJFR5cGUiLDE5NTMpLEQoMTk1NCwxLGZyLEdZZSksaC5DZD1mdW5jdGlvbih0KXtVdm4odGhpcy5hLGwodCwxMikpfSxJKGJnLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ0JFR5cGUiLDE5NTQpLEQoMTk1NSwxLHRpLEtZZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gYmxuKHRoaXMuYSxsKHQsMTIpKX0sSShiZywiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkNSRUeXBlIiwxOTU1KSxEKDE5NTYsMSxmcixXWWUpLGguQ2Q9ZnVuY3Rpb24odCl7RHR0KHRoaXMsdCl9LEkoYmcsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDYkVHlwZSIsMTk1NiksRCgxOTU3LDEsZnIscWV0KSxoLkNkPWZ1bmN0aW9uKHQpe3ZhciBuO2prKCksZ2IodGhpcy5iLChuPXRoaXMuYSxsKHQsMTIpLG4pKX0sSShiZywiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkNyRUeXBlIiwxOTU3KSxEKDgzOSwxLExkLFhqKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBqaygpLG5zKGwodCwxMiksKGZ0KCksamwpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGprKCksbnMobCh0LDEyKSwoZnQoKSxqbCkpfSxJKGJnLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ4JFR5cGUiLDgzOSksRCgxOTQ5LDEse30sWVllKSxJKGJnLCJIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyIiwxOTQ5KSxEKDQ3OCwxLHszNDoxLDQ3ODoxfSxVcnQpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFY1bih0aGlzLGwodCw0NzgpKX0saC5iPTAsaC5jPTAsaC5lPTAsaC5mPTA7dmFyIFRPbj1JKGJnLCJIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyL0h5cGVyZWRnZSIsNDc4KTtEKDM3NCwxLHszNDoxLDM3NDoxfSxDSCksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gaVRuKHRoaXMsbCh0LDM3NCkpfSxoLmI9MCxoLmM9MDt2YXIgTUV0PUkoYmcsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIvSHlwZXJlZGdlQ29ybmVyIiwzNzQpO0QoNTMxLDIyLHszOjEsMzQ6MSwyMjoxLDUzMToxfSxqM2UpO3ZhciBjTSx1TSxERXQ9RnIoYmcsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIvSHlwZXJlZGdlQ29ybmVyL1R5cGUiLDUzMSxIcixLcG4scjFuKSxJRXQ7RCgxNDI1LDEsVW8sWnJlKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKFEobCh0LDM2KSwoZnQoKSxMdSkpLDIxKS5IYygoSG8oKSx2ZikpP09FdDpudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7cDhuKHRoaXMsbCh0LDM2KSxuKX07dmFyIE9FdDtJKEdvLCJJbnRlcmFjdGl2ZU5vZGVQbGFjZXIiLDE0MjUpLEQoMTQyNiwxLFVvLGVpZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbChRKGwodCwzNiksKGZ0KCksTHUpKSwyMSkuSGMoKEhvKCksdmYpKT9ORXQ6bnVsbH0saC5LZj1mdW5jdGlvbih0LG4pe1o2bih0aGlzLGwodCwzNiksbil9O3ZhciBORXQsSVcsT1c7SShHbywiTGluZWFyU2VnbWVudHNOb2RlUGxhY2VyIiwxNDI2KSxEKDI2MSwxLHszNDoxLDI2MToxfSxQd2UpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIEF1bih0aGlzLGwodCwyNjEpKX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCwyNjEpPyhuPWwodCwyNjEpLHRoaXMuYj09bi5iKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4ibHMiK1RiKHRoaXMuZSl9LGguYT0wLGguYj0wLGguYz0tMSxoLmQ9LTEsaC5nPTA7dmFyIFBFdD1JKEdvLCJMaW5lYXJTZWdtZW50c05vZGVQbGFjZXIvTGluZWFyU2VnbWVudCIsMjYxKTtEKDE0MjgsMSxVbyxic3QpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwoUShsKHQsMzYpLChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSk/QkV0Om51bGx9LGguS2Y9ZnVuY3Rpb24odCxuKXtBSW4odGhpcyxsKHQsMzYpLG4pfSxoLmI9MCxoLmc9MDt2YXIgQkV0O0koR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyIiwxNDI4KSxEKDE0NDcsMSxpaSxHZWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcnUobCh0LDE3KS5hLGwobiwxNykuYSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvMG1ldGhvZHJlZiRjb21wYXJlJFR5cGUiLDE0NDcpLEQoMTQ0OSwxLGlpLEtlZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBydShsKHQsMTcpLmEsbChuLDE3KS5hKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci8xbWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTQ0OSksRCg2NTUsMSx7NjU1OjF9LEhldCk7dmFyIENPbj1JKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9FZGdlUmVwIiw2NTUpO0QoNDEyLDEsezQxMjoxfSxENWUpLGguYj0hMTt2YXIgU09uPUkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL05vZGVSZXAiLDQxMik7RCg1MTUsMTMsezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTM6MSwxNjoxLDE1OjEsNTk6MSw1MTU6MX0sUVFlKSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoIiw1MTUpLEQoMTQyOSwxLHt9LFdlZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDE4KS5kLmkua30sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMCRUeXBlIiwxNDI5KSxEKDE0MzAsMSx0aSxZZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwyNzMpPT0oWm4oKSxBYSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL1BhdGgvbGFtYmRhJDEkVHlwZSIsMTQzMCksRCgxNDMxLDEse30sWGVlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTgpLmQuaX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMiRUeXBlIiwxNDMxKSxEKDE0MzIsMSx0aSxYWWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIExydChJMXQobCh0LDEwKSkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQzJFR5cGUiLDE0MzIpLEQoMTQzMywxLHRpLFFlZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gU2RuKGwodCwxMikpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMCRUeXBlIiwxNDMzKSxEKDE0MzQsMSxmcixWZXQpLGguQ2Q9ZnVuY3Rpb24odCl7b2huKHRoaXMuYSx0aGlzLmIsbCh0LDEyKSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxJFR5cGUiLDE0MzQpLEQoMTQ0MywxLGZyLFFZZSksaC5DZD1mdW5jdGlvbih0KXtPa24odGhpcy5hLGwodCwxOCkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTAkVHlwZSIsMTQ0MyksRCgxNDQ0LDEse30sSmVlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDExJFR5cGUiLDE0NDQpLEQoMTQ0NSwxLGZyLEpZZSksaC5DZD1mdW5jdGlvbih0KXtfU24odGhpcy5hLGwodCwxMCkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTIkVHlwZSIsMTQ0NSksRCgxNDQ2LDEse30sWmVlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLHB0KGwodCwxMjUpLmUpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTMkVHlwZSIsMTQ0NiksRCgxNDQ4LDEse30sZXRlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLHB0KGwodCwxMjUpLmUpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTUkVHlwZSIsMTQ0OCksRCgxNDUwLDEsdGksdHRlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLGwodCw0MTIpLmMuaz09KFpuKCksUHMpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTckVHlwZSIsMTQ1MCksRCgxNDUxLDEsdGksbnRlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLGwodCw0MTIpLmMuai5jLmxlbmd0aD4xfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTgkVHlwZSIsMTQ1MSksRCgxNDUyLDEsZnIsVGF0KSxoLkNkPWZ1bmN0aW9uKHQpe2Y1bih0aGlzLmMsdGhpcy5iLHRoaXMuZCx0aGlzLmEsbCh0LDQxMikpfSxoLmM9MCxoLmQ9MCxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTkkVHlwZSIsMTQ1MiksRCgxNDM1LDEse30scnRlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIkVHlwZSIsMTQzNSksRCgxNDUzLDEsZnIsWlllKSxoLkNkPWZ1bmN0aW9uKHQpe3Vobih0aGlzLmEsbCh0LDEyKSl9LGguYT0wLEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMCRUeXBlIiwxNDUzKSxEKDE0NTQsMSx7fSxpdGUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIFNoKCksbmV3IGJuKG51bGwsbmV3IGtuKGwodCwzMCkuYSwxNikpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjEkVHlwZSIsMTQ1NCksRCgxNDU1LDEsZnIsZVhlKSxoLkNkPWZ1bmN0aW9uKHQpe3hobih0aGlzLmEsbCh0LDEwKSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMiRUeXBlIiwxNDU1KSxEKDE0NTYsMSx0aSxzdGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIExydCh0KX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIzJFR5cGUiLDE0NTYpLEQoMTQ1NywxLHt9LGF0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSxuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNCRUeXBlIiwxNDU3KSxEKDE0NTgsMSx0aSx0WGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIE1sbih0aGlzLmEsbCh0LDEwKSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNSRUeXBlIiwxNDU4KSxEKDE0NTksMSxmcixVZXQpLGguQ2Q9ZnVuY3Rpb24odCl7RjluKHRoaXMuYSx0aGlzLmIsbCh0LDEwKSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNiRUeXBlIiwxNDU5KSxEKDE0NjAsMSx0aSxzOCksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSwhRG8obCh0LDE4KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNyRUeXBlIiwxNDYwKSxEKDE0NjEsMSx0aSxRaiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSwhRG8obCh0LDE4KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyOCRUeXBlIiwxNDYxKSxEKDE0NjIsMSx7fSxuWGUpLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gY2huKHRoaXMuYSxsKHQsMzApLGwobiwzMCkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjkkVHlwZSIsMTQ2MiksRCgxNDM2LDEse30sb3RlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLG5ldyBibihudWxsLG5ldyB2dyhuZXcgaHIoZHIocXMobCh0LDEwKSkuYS5LYygpLG5ldyBqKSkpKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDMkVHlwZSIsMTQzNiksRCgxNDM3LDEsdGksY3RlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLFJibihsKHQsMTgpKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDQkVHlwZSIsMTQzNyksRCgxNDM4LDEsZnIsclhlKSxoLkNkPWZ1bmN0aW9uKHQpe0JBbih0aGlzLmEsbCh0LDE4KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ1JFR5cGUiLDE0MzgpLEQoMTQzOSwxLHt9LHV0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSxuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ2JFR5cGUiLDE0MzkpLEQoMTQ0MCwxLHRpLEpqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLGwodCwxMCkuaz09KFpuKCksUHMpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkNyRUeXBlIiwxNDQwKSxEKDE0NDEsMSx7fSxsdGUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIFNoKCksbmV3IGJuKG51bGwsbmV3IHZ3KG5ldyBocihkcihzcChsKHQsMTApKS5hLktjKCksbmV3IGopKSkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkOCRUeXBlIiwxNDQxKSxEKDE0NDIsMSx0aSxUUyksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSxDZG4obCh0LDE4KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ5JFR5cGUiLDE0NDIpLEQoMTQyNCwxLFVvLHRpZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbChRKGwodCwzNiksKGZ0KCksTHUpKSwyMSkuSGMoKEhvKCksdmYpKT9GRXQ6bnVsbH0saC5LZj1mdW5jdGlvbih0LG4pe2JMbihsKHQsMzYpLG4pfTt2YXIgRkV0O0koR28sIlNpbXBsZU5vZGVQbGFjZXIiLDE0MjQpLEQoMTg1LDEsezE4NToxfSxmNiksaC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PSIiLHRoaXMuYz09KHhkKCksdzMpP3QrPUR4OnRoaXMuYz09VDImJih0Kz1NeCksdGhpcy5vPT0oRDEoKSx3dik/dCs9d2hlOnRoaXMubz09WTE/dCs9IlVQIjp0Kz0iQkFMQU5DRUQiLHR9LEkoSWIsIkJLQWxpZ25lZExheW91dCIsMTg1KSxEKDUyMywyMix7MzoxLDM0OjEsMjI6MSw1MjM6MX0sJDNlKTt2YXIgVDIsdzMsUkV0PUZyKEliLCJCS0FsaWduZWRMYXlvdXQvSERpcmVjdGlvbiIsNTIzLEhyLFlwbixpMW4pLGpFdDtEKDUyMiwyMix7MzoxLDM0OjEsMjI6MSw1MjI6MX0sejNlKTt2YXIgd3YsWTEsJEV0PUZyKEliLCJCS0FsaWduZWRMYXlvdXQvVkRpcmVjdGlvbiIsNTIyLEhyLFhwbixzMW4pLHpFdDtEKDE2OTksMSx7fSxHZXQpLEkoSWIsIkJLQWxpZ25lciIsMTY5OSksRCgxNzAyLDEse30scmd0KSxJKEliLCJCS0NvbXBhY3RvciIsMTcwMiksRCg2NjMsMSx7NjYzOjF9LGh0ZSksaC5hPTAsSShJYiwiQktDb21wYWN0b3IvQ2xhc3NFZGdlIiw2NjMpLEQoNDY3LDEsezQ2NzoxfSxXUWUpLGguYT1udWxsLGguYj0wLEkoSWIsIkJLQ29tcGFjdG9yL0NsYXNzTm9kZSIsNDY3KSxEKDE0MjcsMSxVbyxYZXQpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwoUShsKHQsMzYpLChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSk/cUV0Om51bGx9LGguS2Y9ZnVuY3Rpb24odCxuKXtHSW4odGhpcyxsKHQsMzYpLG4pfSxoLmQ9ITE7dmFyIHFFdDtJKEliLCJCS05vZGVQbGFjZXIiLDE0MjcpLEQoMTcwMCwxLHt9LGZ0ZSksaC5kPTAsSShJYiwiTmVpZ2hib3Job29kSW5mb3JtYXRpb24iLDE3MDApLEQoMTcwMSwxLGlpLGlYZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB5d24odGhpcyxsKHQsNDIpLGwobiw0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoSWIsIk5laWdoYm9yaG9vZEluZm9ybWF0aW9uL05laWdoYm9yQ29tcGFyYXRvciIsMTcwMSksRCg4MjMsMSx7fSksSShJYiwiVGhyZXNob2xkU3RyYXRlZ3kiLDgyMyksRCgxODI1LDgyMyx7fSxZUWUpLGgud2c9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLmEubz09KEQxKCksWTEpP2dzOmlhfSxoLnhnPWZ1bmN0aW9uKCl7fSxJKEliLCJUaHJlc2hvbGRTdHJhdGVneS9OdWxsVGhyZXNob2xkU3RyYXRlZ3kiLDE4MjUpLEQoNTg3LDEsezU4NzoxfSxRZXQpLGguYz0hMSxoLmQ9ITEsSShJYiwiVGhyZXNob2xkU3RyYXRlZ3kvUG9zdHByb2Nlc3NhYmxlIiw1ODcpLEQoMTgyNiw4MjMse30sWFFlKSxoLndnPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGY7cmV0dXJuIG89bj09cixhPXRoaXMuYS5hW3IucF09PW4sb3x8YT8oZj10LHRoaXMuYS5jPT0oeGQoKSx3Myk/KG8mJihmPXZsZSh0aGlzLG4sITApKSwhaXNOYU4oZikmJiFpc0Zpbml0ZShmKSYmYSYmKGY9dmxlKHRoaXMsciwhMSkpKToobyYmKGY9dmxlKHRoaXMsbiwhMCkpLCFpc05hTihmKSYmIWlzRmluaXRlKGYpJiZhJiYoZj12bGUodGhpcyxyLCExKSkpLGYpOnR9LGgueGc9ZnVuY3Rpb24oKXtmb3IodmFyIHQsbixyLGEsbzt0aGlzLmQuYiE9MDspbz1sKGgybih0aGlzLmQpLDU4NyksYT1MbXQodGhpcyxvKSxhLmEmJih0PWEuYSxyPVJ0KHRoaXMuYS5mW3RoaXMuYS5nW28uYi5wXS5wXSksISghciYmIURvKHQpJiZ0LmMuaS5jPT10LmQuaS5jKSYmKG49TjJ0KHRoaXMsbyksbnx8T2xuKHRoaXMuZSxvKSkpO2Zvcig7dGhpcy5lLmEuYy5sZW5ndGghPTA7KU4ydCh0aGlzLGwoUDB0KHRoaXMuZSksNTg3KSl9LEkoSWIsIlRocmVzaG9sZFN0cmF0ZWd5L1NpbXBsZVRocmVzaG9sZFN0cmF0ZWd5IiwxODI2KSxEKDY0NSwxLHs2NDU6MSwxODg6MSwxOTY6MX0sZHRlKSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuIFZmdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiBWZnQodGhpcyl9O3ZhciBNZGU7SShtZmUsIkVkZ2VSb3V0ZXJGYWN0b3J5Iiw2NDUpLEQoMTQ4NSwxLFVvLG5pZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gclNuKGwodCwzNikpfSxoLktmPWZ1bmN0aW9uKHQsbil7RUxuKGwodCwzNiksbil9O3ZhciBIRXQsVkV0LFVFdCxHRXQsS0V0LHpEZSxXRXQsWUV0O0kobWZlLCJPcnRob2dvbmFsRWRnZVJvdXRlciIsMTQ4NSksRCgxNDc4LDEsVW8sWWV0KSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBDOG4obCh0LDM2KSl9LGguS2Y9ZnVuY3Rpb24odCxuKXtHRG4odGhpcyxsKHQsMzYpLG4pfTt2YXIgWEV0LFFFdCxKRXQsWkV0LElCLGVUdDtJKG1mZSwiUG9seWxpbmVFZGdlUm91dGVyIiwxNDc4KSxEKDE0NzksMSxMZCxwdGUpLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIEE3ZShsKHQsMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIEE3ZShsKHQsMTApKX0sSShtZmUsIlBvbHlsaW5lRWRnZVJvdXRlci8xIiwxNDc5KSxEKDE4NzIsMSx0aSxidGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMzIpLmM9PShKMCgpLHFiKX0sSShpMSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMCRUeXBlIiwxODcyKSxEKDE4NzMsMSx7fSxtdGUpLGguWmU9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMzIpLmR9LEkoaTEsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDEkVHlwZSIsMTg3MyksRCgxODc0LDEsdGksdnRlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTMyKS5jPT0oSjAoKSxxYil9LEkoaTEsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDIkVHlwZSIsMTg3NCksRCgxODc1LDEse30sd3RlKSxoLlplPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTMyKS5kfSxJKGkxLCJIeXBlckVkZ2VDeWNsZURldGVjdG9yL2xhbWJkYSQzJFR5cGUiLDE4NzUpLEQoMTg3NiwxLHt9LHl0ZSksaC5aZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEzMikuZH0sSShpMSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkNCRUeXBlIiwxODc2KSxEKDE4NzcsMSx7fSxndGUpLGguWmU9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMzIpLmR9LEkoaTEsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDUkVHlwZSIsMTg3NyksRCgxMTgsMSx7MzQ6MSwxMTg6MX0seE4pLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIEx1bih0aGlzLGwodCwxMTgpKX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCwxMTgpPyhuPWwodCwxMTgpLHRoaXMuZz09bi5nKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYTtmb3IodD1uZXcgVGgoInsiKSxhPW5ldyBHKHRoaXMubik7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDEyKSxuPUhOKHIuaSksbj09bnVsbCYmKG49Im4iK25pdChyLmkpKSx0LmErPSIiK24sYS5hPGEuYy5jLmxlbmd0aCYmKHQuYSs9IiwiKTtyZXR1cm4gdC5hKz0ifSIsdC5hfSxoLmE9MCxoLmI9MCxoLmM9TmFOLGguZD0wLGguZz0wLGguaT0wLGgubz0wLGgucz1OYU4sSShpMSwiSHlwZXJFZGdlU2VnbWVudCIsMTE4KSxEKDEzMiwxLHsxMzI6MX0sUG0pLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyItPiIrdGhpcy5iKyIgKCIrV2huKHRoaXMuYykrIikifSxoLmQ9MCxJKGkxLCJIeXBlckVkZ2VTZWdtZW50RGVwZW5kZW5jeSIsMTMyKSxEKDUyOCwyMix7MzoxLDM0OjEsMjI6MSw1Mjg6MX0scTNlKTt2YXIgcWIsRTQsdFR0PUZyKGkxLCJIeXBlckVkZ2VTZWdtZW50RGVwZW5kZW5jeS9EZXBlbmRlbmN5VHlwZSIsNTI4LEhyLFFwbixhMW4pLG5UdDtEKDE4NzgsMSx7fSxzWGUpLEkoaTEsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlciIsMTg3OCksRCgxODc5LDEse30sUUplKSxoLmE9MCxoLmI9MCxJKGkxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvQXJlYVJhdGluZyIsMTg3OSksRCgzMzksMSx7MzM5OjF9LHZhZSksaC5hPTAsaC5iPTAsaC5jPTAsSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL0ZyZWVBcmVhIiwzMzkpLEQoMTg4MCwxLGlpLGE4KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFdmbihsKHQsMTE4KSxsKG4sMTE4KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQwJFR5cGUiLDE4ODApLEQoMTg4MSwxLGZyLENhdCksaC5DZD1mdW5jdGlvbih0KXtrbW4odGhpcy5hLHRoaXMuZCx0aGlzLmMsdGhpcy5iLGwodCwxMTgpKX0saC5iPTAsSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQxJFR5cGUiLDE4ODEpLEQoMTg4MiwxLHt9LHh0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKGwodCwxMTgpLmUsMTYpKX0sSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQyJFR5cGUiLDE4ODIpLEQoMTg4MywxLHt9LGt0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKGwodCwxMTgpLmosMTYpKX0sSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQzJFR5cGUiLDE4ODMpLEQoMTg4NCwxLHt9LEV0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gemUoR2UodCkpfSxJKGkxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDQkVHlwZSIsMTg4NCksRCg2NjQsMSx7fSxIYWUpLGguYT0wLGguYj0wLGguYz0wLEkoaTEsIk9ydGhvZ29uYWxSb3V0aW5nR2VuZXJhdG9yIiw2NjQpLEQoMTcwMywxLHt9LFR0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKGwodCwxMTgpLmUsMTYpKX0sSShpMSwiT3J0aG9nb25hbFJvdXRpbmdHZW5lcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTcwMyksRCgxNzA0LDEse30sQ3RlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDExOCkuaiwxNikpfSxJKGkxLCJPcnRob2dvbmFsUm91dGluZ0dlbmVyYXRvci9sYW1iZGEkMSRUeXBlIiwxNzA0KSxEKDY3MCwxLHt9KSxJKHZmZSwiQmFzZVJvdXRpbmdEaXJlY3Rpb25TdHJhdGVneSIsNjcwKSxEKDE4NzAsNjcwLHt9LGVKZSksaC55Zz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKCEodC5yJiYhdC5xKSlmb3IoTD1uK3QubypyLEM9bmV3IEcodC5uKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxCPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbRS5pLm4sRS5uLEUuYV0pKS5hLHc9bmV3IEcoRS5nKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTgpLERvKGcpfHwoSj1nLmQsdGU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtKLmkubixKLm4sSi5hXSkpLmEsYi5NYXRoLmFicyhCLXRlKT5EZCYmKGY9TCxvPXQsYT1uZXcgbHQoQixmKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMSksej10LnIseiYmKFY9emUoR2UoZmYoei5lLDApKSksYT1uZXcgbHQoVixmKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMSksZj1uK3oubypyLG89eixhPW5ldyBsdChWLGYpLHVpKGcuYSxhKSxWdyh0aGlzLGcsbyxhLCExKSksYT1uZXcgbHQodGUsZiksdWkoZy5hLGEpLFZ3KHRoaXMsZyxvLGEsITEpKSl9LGguemc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaS5uLmErdC5uLmErdC5hLmF9LGguQWc9ZnVuY3Rpb24oKXtyZXR1cm4gQ3QoKSxEcn0saC5CZz1mdW5jdGlvbigpe3JldHVybiBDdCgpLFFufSxJKHZmZSwiTm9ydGhUb1NvdXRoUm91dGluZ1N0cmF0ZWd5IiwxODcwKSxEKDE4NzEsNjcwLHt9LHRKZSksaC55Zz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKCEodC5yJiYhdC5xKSlmb3IoTD1uLXQubypyLEM9bmV3IEcodC5uKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxCPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbRS5pLm4sRS5uLEUuYV0pKS5hLHc9bmV3IEcoRS5nKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTgpLERvKGcpfHwoSj1nLmQsdGU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtKLmkubixKLm4sSi5hXSkpLmEsYi5NYXRoLmFicyhCLXRlKT5EZCYmKGY9TCxvPXQsYT1uZXcgbHQoQixmKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMSksej10LnIseiYmKFY9emUoR2UoZmYoei5lLDApKSksYT1uZXcgbHQoVixmKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMSksZj1uLXoubypyLG89eixhPW5ldyBsdChWLGYpLHVpKGcuYSxhKSxWdyh0aGlzLGcsbyxhLCExKSksYT1uZXcgbHQodGUsZiksdWkoZy5hLGEpLFZ3KHRoaXMsZyxvLGEsITEpKSl9LGguemc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaS5uLmErdC5uLmErdC5hLmF9LGguQWc9ZnVuY3Rpb24oKXtyZXR1cm4gQ3QoKSxRbn0saC5CZz1mdW5jdGlvbigpe3JldHVybiBDdCgpLERyfSxJKHZmZSwiU291dGhUb05vcnRoUm91dGluZ1N0cmF0ZWd5IiwxODcxKSxEKDE4NjksNjcwLHt9LG5KZSksaC55Zz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKCEodC5yJiYhdC5xKSlmb3IoTD1uK3QubypyLEM9bmV3IEcodC5uKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxCPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbRS5pLm4sRS5uLEUuYV0pKS5iLHc9bmV3IEcoRS5nKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTgpLERvKGcpfHwoSj1nLmQsdGU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtKLmkubixKLm4sSi5hXSkpLmIsYi5NYXRoLmFicyhCLXRlKT5EZCYmKGY9TCxvPXQsYT1uZXcgbHQoZixCKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMCksej10LnIseiYmKFY9emUoR2UoZmYoei5lLDApKSksYT1uZXcgbHQoZixWKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMCksZj1uK3oubypyLG89eixhPW5ldyBsdChmLFYpLHVpKGcuYSxhKSxWdyh0aGlzLGcsbyxhLCEwKSksYT1uZXcgbHQoZix0ZSksdWkoZy5hLGEpLFZ3KHRoaXMsZyxvLGEsITApKSl9LGguemc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaS5uLmIrdC5uLmIrdC5hLmJ9LGguQWc9ZnVuY3Rpb24oKXtyZXR1cm4gQ3QoKSxhcn0saC5CZz1mdW5jdGlvbigpe3JldHVybiBDdCgpLGVyfSxJKHZmZSwiV2VzdFRvRWFzdFJvdXRpbmdTdHJhdGVneSIsMTg2OSksRCg4MjgsMSx7fSxTa2UpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVGIodGhpcy5hKX0saC5iPTAsaC5jPSExLGguZD0hMSxoLmY9MCxJKFp5LCJOdWJTcGxpbmUiLDgyOCksRCg0MTgsMSx7NDE4OjF9LGRidCxyb3QpLEkoWnksIk51YlNwbGluZS9Qb2xhckNQIiw0MTgpLEQoMTQ4MCwxLFVvLFlkdCksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gZ3huKGwodCwzNikpfSxoLktmPWZ1bmN0aW9uKHQsbil7aEluKHRoaXMsbCh0LDM2KSxuKX07dmFyIHJUdCxpVHQsc1R0LGFUdCxvVHQ7SShaeSwiU3BsaW5lRWRnZVJvdXRlciIsMTQ4MCksRCgyNzQsMSx7Mjc0OjF9LFdIKSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSsiIC0+KCIrdGhpcy5jKyIpICIrdGhpcy5ifSxoLmM9MCxJKFp5LCJTcGxpbmVFZGdlUm91dGVyL0RlcGVuZGVuY3kiLDI3NCksRCg0NjUsMjIsezM6MSwzNDoxLDIyOjEsNDY1OjF9LEgzZSk7dmFyIEhiLEs2LGNUdD1GcihaeSwiU3BsaW5lRWRnZVJvdXRlci9TaWRlVG9Qcm9jZXNzIiw0NjUsSHIscjJuLG8xbiksdVR0O0QoMTQ4MSwxLHRpLFN0ZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gR0EoKSwhbCh0LDEzMSkub30sSShaeSwiU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMCRUeXBlIiwxNDgxKSxEKDE0ODIsMSx7fSxfdGUpLGguWmU9ZnVuY3Rpb24odCl7cmV0dXJuIEdBKCksbCh0LDEzMSkudisxfSxJKFp5LCJTcGxpbmVFZGdlUm91dGVyL2xhbWJkYSQxJFR5cGUiLDE0ODIpLEQoMTQ4MywxLGZyLEpldCksaC5DZD1mdW5jdGlvbih0KXtMZG4odGhpcy5hLHRoaXMuYixsKHQsNDIpKX0sSShaeSwiU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMiRUeXBlIiwxNDgzKSxEKDE0ODQsMSxmcixaZXQpLGguQ2Q9ZnVuY3Rpb24odCl7TWRuKHRoaXMuYSx0aGlzLmIsbCh0LDQyKSl9LEkoWnksIlNwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDMkVHlwZSIsMTQ4NCksRCgxMzEsMSx7MzQ6MSwxMzE6MX0sX3B0LElrZSksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gSXVuKHRoaXMsbCh0LDEzMSkpfSxoLmI9MCxoLmU9ITEsaC5mPTAsaC5nPTAsaC5qPSExLGguaz0hMSxoLm49MCxoLm89ITEsaC5wPSExLGgucT0hMSxoLnM9MCxoLnU9MCxoLnY9MCxoLkY9MCxJKFp5LCJTcGxpbmVTZWdtZW50IiwxMzEpLEQoNDY4LDEsezQ2ODoxfSxBdGUpLGguYT0wLGguYj0hMSxoLmM9ITEsaC5kPSExLGguZT0hMSxoLmY9MCxJKFp5LCJTcGxpbmVTZWdtZW50L0VkZ2VJbmZvcm1hdGlvbiIsNDY4KSxEKDExOTgsMSx7fSxDUyksSShncCxMRWUsMTE5OCksRCgxMTk5LDEsaWksTHRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFhrbihsKHQsMTIxKSxsKG4sMTIxKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShncCxFM3QsMTE5OSksRCgxMTk3LDEse30sZFplKSxJKGdwLCJNclRyZWUiLDExOTcpLEQoNDA1LDIyLHszOjEsMzQ6MSwyMjoxLDQwNToxLDE4ODoxLDE5NjoxfSx2cSksaC5kZz1mdW5jdGlvbigpe3JldHVybiBXcHQodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gV3B0KHRoaXMpfTt2YXIgTlcsbE0saE0sZk0scURlPUZyKGdwLCJUcmVlTGF5b3V0UGhhc2VzIiw0MDUsSHIsc21uLGMxbiksbFR0O0QoMTExMiwyMDUsdHYsSHJ0KSxoLnJmPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztmb3IoUnQoQnQoYXQodCwoSGMoKSxkSWUpKSkpfHxLTygocj1uZXcgWXYoKGF3KCksbmV3IEp2KHQpKSkscikpLGc9bi5laCh4ZmUpLGcuVWcoImJ1aWxkIHRHcmFwaCIsMSksdz0oRT1uZXcgbk4scGMoRSx0KSxydChFLChRaSgpLGdNKSx0KSxDPW5ldyBQcixIX24odCxFLEMpLGNBbih0LEUsQyksRSksZy5WZygpLGc9bi5laCh4ZmUpLGcuVWcoIlNwbGl0IGdyYXBoIiwxKSxmPVlfbih0aGlzLmEsdyksZy5WZygpLG89bmV3IEcoZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEyMSksWjhuKHRoaXMuYixhLG4uZWgoLjU5OTk5OTk5NDAzOTUzNTUvZi5jLmxlbmd0aCkpO2c9bi5laCh4ZmUpLGcuVWcoIlBhY2sgY29tcG9uZW50cyIsMSksdz1LSW4oZiksZy5WZygpLGc9bi5laCh4ZmUpLGcuVWcoIkFwcGx5IGxheW91dCByZXN1bHRzIiwxKSxCTW4odyksZy5WZygpfSxJKGdwLCJUcmVlTGF5b3V0UHJvdmlkZXIiLDExMTIpLEQoMTg5NCwxLGhnLER0ZSksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksTWsoKSxBVH0sSShncCwiVHJlZVV0aWwvMSIsMTg5NCksRCgxODk1LDEsaGcsSXRlKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oKSxNaygpLEFUfSxJKGdwLCJUcmVlVXRpbC8yIiwxODk1KSxEKDE4ODUsMSx0aSxPdGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIFJ0KEJ0KFEobCh0LDQwKSwoUWkoKSxWYikpKSl9LEkoZ3AsIlRyZWVVdGlsL2xhbWJkYSQwJFR5cGUiLDE4ODUpLEQoMTg5MSwxLHRpLGFYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLkhjKGwodCw0MCkpfSxJKGdwLCJUcmVlVXRpbC9sYW1iZGEkMTAkVHlwZSIsMTg5MSksRCgxODkyLDEse30sb1hlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBpbW4odGhpcy5hLGwodCw0MCkpfSxJKGdwLCJUcmVlVXRpbC9sYW1iZGEkMTEkVHlwZSIsMTg5MiksRCgxODkzLDEsdGksZXR0KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBud24odGhpcy5hLHRoaXMuYixsKHQsNDApKX0sSShncCwiVHJlZVV0aWwvbGFtYmRhJDEyJFR5cGUiLDE4OTMpLEQoMTg4NiwxLHRpLGNYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gcTRuKHRoaXMuYSxsKHQsNjUpKX0sSShncCwiVHJlZVV0aWwvbGFtYmRhJDMkVHlwZSIsMTg4NiksRCgxODg3LDEsaWksTXRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFlmbihsKHQsNjUpLGwobiw2NSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZ3AsIlRyZWVVdGlsL2xhbWJkYSQ0JFR5cGUiLDE4ODcpLEQoMTg4OCwxLHRpLHVYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gSDRuKHRoaXMuYSxsKHQsNjUpKX0sSShncCwiVHJlZVV0aWwvbGFtYmRhJDckVHlwZSIsMTg4OCksRCgxODg5LDEsaWksTnRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFhmbihsKHQsNjUpLGwobiw2NSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZ3AsIlRyZWVVdGlsL2xhbWJkYSQ4JFR5cGUiLDE4ODkpLEQoMTg5MCwxLHt9LFB0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDY1KS5ifSxJKGdwLCJUcmVlVXRpbC9sYW1iZGEkOSRUeXBlIiwxODkwKSxEKDUwOCwxMzcsezM6MSw1MDg6MSw5NjoxLDEzNzoxfSksaC5nPTAsSSh2TCwiVEdyYXBoRWxlbWVudCIsNTA4KSxEKDY1LDUwOCx7MzoxLDY1OjEsNTA4OjEsOTY6MSwxMzc6MX0sTjVlKSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYiYmdGhpcy5jP0JtKHRoaXMuYikrIi0+IitCbSh0aGlzLmMpOiJlXyIrZXModGhpcyl9LEkodkwsIlRFZGdlIiw2NSksRCgxMjEsMTM3LHszOjEsMTIxOjEsOTY6MSwxMzc6MX0sbk4pLGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvO2ZvcihvPW51bGwsYT1Scih0aGlzLmIsMCk7YS5iIT1hLmQuYzspcj1sKEJyKGEpLDQwKSxvKz0oci5jPT1udWxsfHxyLmMubGVuZ3RoPT0wPyJuXyIrci5nOiJuXyIrci5jKStgCmA7Zm9yKG49UnIodGhpcy5hLDApO24uYiE9bi5kLmM7KXQ9bChCcihuKSw2NSksbys9KHQuYiYmdC5jP0JtKHQuYikrIi0+IitCbSh0LmMpOiJlXyIrZXModCkpK2AKYDtyZXR1cm4gb307dmFyIF9Pbj1JKHZMLCJUR3JhcGgiLDEyMSk7RCg2NDMsNTA4LHszOjEsNTA4OjEsNjQzOjEsOTY6MSwxMzc6MX0pLEkodkwsIlRTaGFwZSIsNjQzKSxEKDQwLDY0Myx7MzoxLDUwODoxLDQwOjEsNjQzOjEsOTY6MSwxMzc6MX0seGNlKSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIEJtKHRoaXMpfTt2YXIgUFc9SSh2TCwiVE5vZGUiLDQwKTtEKDIzNiwxLGhnLEhnKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1Scih0aGlzLmEuZCwwKSxuZXcgQzUodCl9LEkodkwsIlROb2RlLzIiLDIzNiksRCgzMjksMSxPYSxDNSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGwoQnIodGhpcy5hKSw2NSkuY30saC5PYj1mdW5jdGlvbigpe3JldHVybiBRSSh0aGlzLmEpfSxoLlFiPWZ1bmN0aW9uKCl7WW9lKHRoaXMuYSl9LEkodkwsIlROb2RlLzIvMSIsMzI5KSxEKDE5MjMsMSx0cyxCdGUpLGguS2Y9ZnVuY3Rpb24odCxuKXt6SW4odGhpcyxsKHQsMTIxKSxuKX0sSShTdSwiQ29tcGFjdGlvblByb2Nlc3NvciIsMTkyMyksRCgxOTI0LDEsaWksbFhlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEEzbih0aGlzLmEsbCh0LDQwKSxsKG4sNDApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKFN1LCJDb21wYWN0aW9uUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE5MjQpLEQoMTkyNSwxLHRpLHR0dCksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gTnBuKHRoaXMuYix0aGlzLmEsbCh0LDQyKSl9LGguYT0wLGguYj0wLEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTkyNSksRCgxOTM0LDEsaWksbzgpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQ2duKGwodCw0MCksbChuLDQwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkMTAkVHlwZSIsMTkzNCksRCgxOTM1LDEsaWksWmopLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gamhuKGwodCw0MCksbChuLDQwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkMTEkVHlwZSIsMTkzNSksRCgxOTM2LDEsaWksRnRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFNnbihsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDEyJFR5cGUiLDE5MzYpLEQoMTkyNiwxLHRpLGhYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4ga2huKHRoaXMuYSxsKHQsNDIpKX0saC5hPTAsSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxOTI2KSxEKDE5MjcsMSx0aSxmWGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIEVobih0aGlzLmEsbCh0LDQyKSl9LGguYT0wLEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTkyNyksRCgxOTI4LDEsdGkscEkpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCw0MCkuYy5pbmRleE9mKERHKT09LTF9LEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDQkVHlwZSIsMTkyOCksRCgxOTI5LDEse30sZFhlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBCYm4odGhpcy5hLGwodCw0MCkpfSxoLmE9MCxJKFN1LCJDb21wYWN0aW9uUHJvY2Vzc29yL2xhbWJkYSQ1JFR5cGUiLDE5MjkpLEQoMTkzMCwxLHt9LGdYZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gVnZuKHRoaXMuYSxsKHQsNDApKX0saC5hPTAsSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkNiRUeXBlIiwxOTMwKSxEKDE5MzEsMSxpaSxwWGUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdHZuKHRoaXMuYSxsKHQsMjQwKSxsKG4sMjQwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkNyRUeXBlIiwxOTMxKSxEKDE5MzIsMSxpaSxiWGUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnZuKHRoaXMuYSxsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDgkVHlwZSIsMTkzMiksRCgxOTMzLDEsaWksUnRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuICRobihsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDkkVHlwZSIsMTkzMyksRCgxOTIxLDEsdHMsanRlKSxoLktmPWZ1bmN0aW9uKHQsbil7RlNuKGwodCwxMjEpLG4pfSxJKFN1LCJEaXJlY3Rpb25Qcm9jZXNzb3IiLDE5MjEpLEQoMTkxMywxLHRzLHFydCksaC5LZj1mdW5jdGlvbih0LG4pe2FBbih0aGlzLGwodCwxMjEpLG4pfSxJKFN1LCJGYW5Qcm9jZXNzb3IiLDE5MTMpLEQoMTkzNywxLHRzLCR0ZSksaC5LZj1mdW5jdGlvbih0LG4pe0NTbihsKHQsMTIxKSxuKX0sSShTdSwiR3JhcGhCb3VuZHNQcm9jZXNzb3IiLDE5MzcpLEQoMTkzOCwxLHt9LHp0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQwKS5lLmF9LEkoU3UsIkdyYXBoQm91bmRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE5MzgpLEQoMTkzOSwxLHt9LHF0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQwKS5lLmJ9LEkoU3UsIkdyYXBoQm91bmRzUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE5MzkpLEQoMTk0MCwxLHt9LEh0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gc2xuKGwodCw0MCkpfSxJKFN1LCJHcmFwaEJvdW5kc1Byb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxOTQwKSxEKDE5NDEsMSx7fSxWdGUpLGguWWU9ZnVuY3Rpb24odCl7cmV0dXJuIGlsbihsKHQsNDApKX0sSShTdSwiR3JhcGhCb3VuZHNQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTk0MSksRCgyNjIsMjIsezM6MSwzNDoxLDIyOjEsMjYyOjEsMTk2OjF9LG93KSxoLmRnPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZyl7Y2FzZSAwOnJldHVybiBuZXcgYkplO2Nhc2UgMTpyZXR1cm4gbmV3IHFydDtjYXNlIDI6cmV0dXJuIG5ldyBwSmU7Y2FzZSAzOnJldHVybiBuZXcgbiQ7Y2FzZSA0OnJldHVybiBuZXcgVXRlO2Nhc2UgODpyZXR1cm4gbmV3IGUkO2Nhc2UgNTpyZXR1cm4gbmV3IGp0ZTtjYXNlIDY6cmV0dXJuIG5ldyBpJDtjYXNlIDc6cmV0dXJuIG5ldyBCdGU7Y2FzZSA5OnJldHVybiBuZXcgJHRlO2Nhc2UgMTA6cmV0dXJuIG5ldyBLdGU7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oRmhlKyh0aGlzLmYhPW51bGw/dGhpcy5mOiIiK3RoaXMuZykpKX19O3ZhciBIRGUsVkRlLFVEZSxHRGUsS0RlLFdEZSxZRGUsWERlLFFEZSxKRGUsRGRlLEFPbj1GcihTdSxSaGUsMjYyLEhyLEJmdCx1MW4pLGhUdDtEKDE5MjAsMSx0cyxlJCksaC5LZj1mdW5jdGlvbih0LG4pe1JEbihsKHQsMTIxKSxuKX0sSShTdSwiTGV2ZWxDb29yZGluYXRlc1Byb2Nlc3NvciIsMTkyMCksRCgxOTE4LDEsdHMsVXRlKSxoLktmPWZ1bmN0aW9uKHQsbil7c0NuKHRoaXMsbCh0LDEyMSksbil9LGguYT0wLEkoU3UsIkxldmVsSGVpZ2h0UHJvY2Vzc29yIiwxOTE4KSxEKDE5MTksMSxoZyx0JCksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksTWsoKSxBVH0sSShTdSwiTGV2ZWxIZWlnaHRQcm9jZXNzb3IvMSIsMTkxOSksRCgxOTE0LDEsdHMscEplKSxoLktmPWZ1bmN0aW9uKHQsbil7d1NuKHRoaXMsbCh0LDEyMSksbil9LEkoU3UsIkxldmVsUHJvY2Vzc29yIiwxOTE0KSxEKDE5MTUsMSx0aSxHdGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIFJ0KEJ0KFEobCh0LDQwKSwoUWkoKSxWYikpKSl9LEkoU3UsIkxldmVsUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE5MTUpLEQoMTkxNiwxLHRzLG4kKSxoLktmPWZ1bmN0aW9uKHQsbil7bmtuKHRoaXMsbCh0LDEyMSksbil9LGguYT0wLEkoU3UsIk5laWdoYm9yc1Byb2Nlc3NvciIsMTkxNiksRCgxOTE3LDEsaGcsciQpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBDbigpLE1rKCksQVR9LEkoU3UsIk5laWdoYm9yc1Byb2Nlc3Nvci8xIiwxOTE3KSxEKDE5MjIsMSx0cyxpJCksaC5LZj1mdW5jdGlvbih0LG4pe3NBbih0aGlzLGwodCwxMjEpLG4pfSxoLmE9MCxJKFN1LCJOb2RlUG9zaXRpb25Qcm9jZXNzb3IiLDE5MjIpLEQoMTkxMiwxLHRzLGJKZSksaC5LZj1mdW5jdGlvbih0LG4peyRMbih0aGlzLGwodCwxMjEpLG4pfSxJKFN1LCJSb290UHJvY2Vzc29yIiwxOTEyKSxEKDE5NDIsMSx0cyxLdGUpLGguS2Y9ZnVuY3Rpb24odCxuKXtCNm4obCh0LDEyMSksbil9LEkoU3UsIlVudHJlZWlmeWVyIiwxOTQyKSxEKDM5MiwyMix7MzoxLDM0OjEsMjI6MSwzOTI6MX0sT3NlKTt2YXIgT0IsSWRlLFpEZSxlSWU9RnIoVVAsIkVkZ2VSb3V0aW5nTW9kZSIsMzkyLEhyLEoybixsMW4pLGZUdCxOQixRVCxPZGUsdEllLG5JZSxOZGUsUGRlLHJJZSxCZGUsaUllLEZkZSxkTSxSZGUsQlcsRlcsazAsYzEsSlQsZ00scE0sQzIsc0llLGRUdCxqZGUsVmIsUEIsQkI7RCg4NjIsMSxQZixyaWUpLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGZDZSksIiIpLHB5dCksIlR1cm5zIG9uIFRyZWUgY29tcGFjdGlvbiB3aGljaCBkZWNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIHdob2xlIHRyZWUgYnkgcGxhY2luZyBub2RlcyBvZiBtdWx0aXBsZSBsZXZlbHMgaW4gb25lIGxhcmdlIGxldmVsIiksKEhuKCksITEpKSwoZzIoKSx5YSkpLE5zKSx1bigocjEoKSxQbikpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxkQ2UpLCIiKSwiRWRnZSBFbmQgVGV4dHVyZSBMZW5ndGgiKSwiU2hvdWxkIGJlIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0dXJlIGF0IHRoZSBlbmQgb2YgYW4gZWRnZS4gVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSBFZGdlIFJvdXRpbmcuIiksNyksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGdDZSksIiIpLCJUcmVlIExldmVsIiksIlRoZSBpbmRleCBmb3IgdGhlIHRyZWUgbGV2ZWwgdGhlIG5vZGUgaXMgaW4iKSxwdCgwKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBDZSksIiIpLHB5dCksIldoZW4gc2V0IHRvIGEgcG9zaXRpdmUgbnVtYmVyIHRoaXMgb3B0aW9uIHdpbGwgZm9yY2UgdGhlIGFsZ29yaXRobSB0byBwbGFjZSB0aGUgbm9kZSB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIHdpdGhpbiB0aGUgdHJlZXMgbGF5ZXIgaWYgd2VpZ2h0aW5nIGlzIHNldCB0byBjb25zdHJhaW50IikscHQoLTEpKSxUYykscm8pLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsYkNlKSwiIiksIldlaWdodGluZyBvZiBOb2RlcyIpLCJXaGljaCB3ZWlnaHRpbmcgdG8gdXNlIHdoZW4gY29tcHV0aW5nIGEgbm9kZSBvcmRlci4iKSxjSWUpLHBzKSx5SWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsbUNlKSwiIiksIkVkZ2UgUm91dGluZyBNb2RlIiksIkNob29zZXMgYW4gRWRnZSBSb3V0aW5nIGFsZ29yaXRobS4iKSxhSWUpLHBzKSxlSWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsdkNlKSwiIiksIlNlYXJjaCBPcmRlciIpLCJXaGljaCBzZWFyY2ggb3JkZXIgdG8gdXNlIHdoZW4gY29tcHV0aW5nIGEgc3Bhbm5pbmcgdHJlZS4iKSxvSWUpLHBzKSxrSWUpLHVuKFBuKSkpKSxpd3QoKG5ldyB2OCx0KSl9O3ZhciBnVHQscFR0LGJUdCxhSWUsbVR0LHZUdCxvSWUsd1R0LHlUdCxjSWU7SShVUCwiTXJUcmVlTWV0YURhdGFQcm92aWRlciIsODYyKSxEKDEwMDYsMSxQZix2OCksaC5oZj1mdW5jdGlvbih0KXtpd3QodCl9O3ZhciB4VHQsdUllLGxJZSx5MyxoSWUsZkllLCRkZSxrVHQsRVR0LFRUdCxDVHQsU1R0LF9UdCxBVHQsZEllLGdJZSxwSWUsTFR0LFc2LFJXLGJJZSxNVHQsbUllLHpkZSxEVHQsSVR0LE9UdCx2SWUsTlR0LCRkLHdJZTtJKFVQLCJNclRyZWVPcHRpb25zIiwxMDA2KSxEKDEwMDcsMSx7fSxXdGUpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgSHJ0LHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKFVQLCJNclRyZWVPcHRpb25zL01ydHJlZUZhY3RvcnkiLDEwMDcpLEQoMzUzLDIyLHszOjEsMzQ6MSwyMjoxLDM1MzoxfSx3cSk7dmFyIHFkZSxqVyxIZGUsVmRlLHlJZT1GcihVUCwiT3JkZXJXZWlnaHRpbmciLDM1MyxIcixhbW4saDFuKSxQVHQ7RCg0MzMsMjIsezM6MSwzNDoxLDIyOjEsNDMzOjF9LFYzZSk7dmFyIHhJZSxVZGUsa0llPUZyKFVQLCJUcmVlaWZ5aW5nT3JkZXIiLDQzMyxIcix0Mm4sZjFuKSxCVHQ7RCgxNDg2LDEsVW8sYWllKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTIxKSxGVHR9LGguS2Y9ZnVuY3Rpb24odCxuKXtiM24odGhpcyxsKHQsMTIxKSxuKX07dmFyIEZUdDtJKCJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZS5wMXRyZWVpZnkiLCJERlNUcmVlaWZ5ZXIiLDE0ODYpLEQoMTQ4NywxLFVvLGRrKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTIxKSxSVHR9LGguS2Y9ZnVuY3Rpb24odCxuKXtFU24odGhpcyxsKHQsMTIxKSxuKX07dmFyIFJUdDtJKHBULCJOb2RlT3JkZXJlciIsMTQ4NyksRCgxNDk0LDEse30scHdlKSxoLnRkPWZ1bmN0aW9uKHQpe3JldHVybiBZaXQodCl9LEkocFQsIk5vZGVPcmRlcmVyLzBtZXRob2RyZWYkbGFtYmRhJDYkVHlwZSIsMTQ5NCksRCgxNDg4LDEsdGksYW5lKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB1eCgpLFJ0KEJ0KFEobCh0LDQwKSwoUWkoKSxWYikpKSl9LEkocFQsIk5vZGVPcmRlcmVyL2xhbWJkYSQwJFR5cGUiLDE0ODgpLEQoMTQ4OSwxLHRpLG9uZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gdXgoKSxsKFEobCh0LDQwKSwoSGMoKSxXNikpLDE3KS5hPDB9LEkocFQsIk5vZGVPcmRlcmVyL2xhbWJkYSQxJFR5cGUiLDE0ODkpLEQoMTQ5MCwxLHRpLHZYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gVXduKHRoaXMuYSxsKHQsNDApKX0sSShwVCwiTm9kZU9yZGVyZXIvbGFtYmRhJDIkVHlwZSIsMTQ5MCksRCgxNDkxLDEsdGksbVhlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBqYm4odGhpcy5hLGwodCw0MCkpfSxJKHBULCJOb2RlT3JkZXJlci9sYW1iZGEkMyRUeXBlIiwxNDkxKSxEKDE0OTIsMSxpaSxjbmUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZ3duKGwodCw0MCksbChuLDQwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShwVCwiTm9kZU9yZGVyZXIvbGFtYmRhJDQkVHlwZSIsMTQ5MiksRCgxNDkzLDEsdGksdW5lKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB1eCgpLGwoUShsKHQsNDApLChRaSgpLFBkZSkpLDE3KS5hIT0wfSxJKHBULCJOb2RlT3JkZXJlci9sYW1iZGEkNSRUeXBlIiwxNDkzKSxEKDE0OTUsMSxVbyxzaWUpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMjEpLGpUdH0saC5LZj1mdW5jdGlvbih0LG4pe0lfbih0aGlzLGwodCwxMjEpLG4pfSxoLmI9MDt2YXIgalR0O0koIm9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLnAzcGxhY2UiLCJOb2RlUGxhY2VyIiwxNDk1KSxEKDE0OTYsMSxVbyxpaWUpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMjEpLCRUdH0saC5LZj1mdW5jdGlvbih0LG4pe2RfbihsKHQsMTIxKSxuKX07dmFyICRUdCxMT249SSh2aCwiRWRnZVJvdXRlciIsMTQ5Nik7RCgxNDk4LDEsaWksc25lKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHJ1KGwodCwxNykuYSxsKG4sMTcpLmEpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvMG1ldGhvZHJlZiRjb21wYXJlJFR5cGUiLDE0OTgpLEQoMTUwMywxLHt9LFl0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gemUoR2UodCkpfSxJKHZoLCJFZGdlUm91dGVyLzFtZXRob2RyZWYkZG91YmxlVmFsdWUkVHlwZSIsMTUwMyksRCgxNTA1LDEsaWksYSQpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWWkoemUoR2UodCkpLHplKEdlKG4pKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci8ybWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTUwNSksRCgxNTA3LDEsaWksWHRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFlpKHplKEdlKHQpKSx6ZShHZShuKSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvM21ldGhvZHJlZiRjb21wYXJlJFR5cGUiLDE1MDcpLEQoMTUwOSwxLHt9LHMkKSxoLlllPWZ1bmN0aW9uKHQpe3JldHVybiB6ZShHZSh0KSl9LEkodmgsIkVkZ2VSb3V0ZXIvNG1ldGhvZHJlZiRkb3VibGVWYWx1ZSRUeXBlIiwxNTA5KSxEKDE1MTEsMSxpaSxRdGUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWWkoemUoR2UodCkpLHplKEdlKG4pKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci81bWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTUxMSksRCgxNTEzLDEsaWksYkkpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWWkoemUoR2UodCkpLHplKEdlKG4pKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci82bWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTUxMyksRCgxNDk3LDEse30sSnRlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB0cCgpLGwoUShsKHQsNDApLChIYygpLCRkKSksMTcpfSxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQwJFR5cGUiLDE0OTcpLEQoMTUwOCwxLHt9LFp0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gWmhuKGwodCw0MCkpfSxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQxMSRUeXBlIiwxNTA4KSxEKDE1MTAsMSx7fSxudHQpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIF9kbih0aGlzLmIsdGhpcy5hLGwodCw0MCkpfSxoLmE9MCxoLmI9MCxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQxMyRUeXBlIiwxNTEwKSxEKDE1MTIsMSx7fSxydHQpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGVmbih0aGlzLmIsdGhpcy5hLGwodCw0MCkpfSxoLmE9MCxoLmI9MCxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQxNSRUeXBlIiwxNTEyKSxEKDE1MTQsMSxpaSxlbmUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZjZuKGwodCw2NSksbChuLDY1KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci9sYW1iZGEkMTckVHlwZSIsMTUxNCksRCgxNTE1LDEsaWksdG5lKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGQ2bihsKHQsNjUpLGwobiw2NSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDE4JFR5cGUiLDE1MTUpLEQoMTUxNiwxLGlpLG5uZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBwNm4obCh0LDY1KSxsKG4sNjUpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQxOSRUeXBlIiwxNTE2KSxEKDE0OTksMSx0aSx3WGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGIybih0aGlzLmEsbCh0LDQwKSl9LGguYT0wLEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDIkVHlwZSIsMTQ5OSksRCgxNTE3LDEsaWksbyQpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZzZuKGwodCw2NSksbChuLDY1KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci9sYW1iZGEkMjAkVHlwZSIsMTUxNyksRCgxNTAwLDEsaWkscm5lKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGRkbihsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDMkVHlwZSIsMTUwMCksRCgxNTAxLDEsaWksaW5lKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGdkbihsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDQkVHlwZSIsMTUwMSksRCgxNTAyLDEse30sbG5lKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB0Zm4obCh0LDQwKSl9LEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDUkVHlwZSIsMTUwMiksRCgxNTA0LDEse30saXR0KSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBBZG4odGhpcy5iLHRoaXMuYSxsKHQsNDApKX0saC5hPTAsaC5iPTAsSSh2aCwiRWRnZVJvdXRlci9sYW1iZGEkNyRUeXBlIiwxNTA0KSxEKDE1MDYsMSx7fSxzdHQpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5mbih0aGlzLmIsdGhpcy5hLGwodCw0MCkpfSxoLmE9MCxoLmI9MCxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQ5JFR5cGUiLDE1MDYpLEQoNjc1LDEsezY3NToxfSxGZHQpLGguZT0wLGguZj0hMSxoLmc9ITEsSSh2aCwiTXVsdGlMZXZlbEVkZ2VOb2RlTm9kZUdhcCIsNjc1KSxEKDE5NDMsMSxpaSxobmUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUzJuKGwodCwyNDApLGwobiwyNDApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHZoLCJNdWx0aUxldmVsRWRnZU5vZGVOb2RlR2FwL2xhbWJkYSQwJFR5cGUiLDE5NDMpLEQoMTk0NCwxLGlpLGZuZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBfMm4obCh0LDI0MCksbChuLDI0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIk11bHRpTGV2ZWxFZGdlTm9kZU5vZGVHYXAvbGFtYmRhJDEkVHlwZSIsMTk0NCk7dmFyIFk2O0QoNTAxLDIyLHszOjEsMzQ6MSwyMjoxLDUwMToxLDE4ODoxLDE5NjoxfSxVM2UpLGguZGc9ZnVuY3Rpb24oKXtyZXR1cm4gRTF0KHRoaXMpfSxoLnFnPWZ1bmN0aW9uKCl7cmV0dXJuIEUxdCh0aGlzKX07dmFyICRXLFg2LEVJZT1Gcih3Q2UsIlJhZGlhbExheW91dFBoYXNlcyIsNTAxLEhyLFdwbixkMW4pLHpUdDtEKDExMTMsMjA1LHR2LGZaZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdztpZihyPWNidCh0aGlzLHQpLG4uVWcoIlJhZGlhbCBsYXlvdXQiLHIuYy5sZW5ndGgpLFJ0KEJ0KGF0KHQsKFNiKCksTkllKSkpKXx8S08oKGE9bmV3IFl2KChhdygpLG5ldyBKdih0KSkpLGEpKSx3PW14bih0KSxIaSh0LChINSgpLFk2KSx3KSwhdyl0aHJvdyB1ZShuZXcgWW4oIlRoZSBnaXZlbiBncmFwaCBpcyBub3QgYSB0cmVlISIpKTtmb3Iobz16ZShHZShhdCh0LEhXKSkpLG89PTAmJihvPXFwdCh0KSksSGkodCxIVyxvKSxnPW5ldyBHKGNidCh0aGlzLHQpKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksNDcpLGYuS2YodCxuLmVoKDEpKTtuLlZnKCl9LEkod0NlLCJSYWRpYWxMYXlvdXRQcm92aWRlciIsMTExMyksRCg1NTYsMSxpaSxXeiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBaU24odGhpcy5hLHRoaXMuYixsKHQsMjcpLGwobiwyNykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LGguYT0wLGguYj0wLEkod0NlLCJSYWRpYWxVdGlsL2xhbWJkYSQwJFR5cGUiLDU1NiksRCgxMzk1LDEsdHMsZG5lKSxoLktmPWZ1bmN0aW9uKHQsbil7VkRuKGwodCwyNyksbil9LEkoa0NlLCJDYWxjdWxhdGVHcmFwaFNpemUiLDEzOTUpLEQoMTM5NiwxLHRzLGduZSksaC5LZj1mdW5jdGlvbih0LG4pe2ZMbihsKHQsMjcpKX0sSShrQ2UsIkVkZ2VBbmdsZUNhbGN1bGF0b3IiLDEzOTYpLEQoMzY4LDIyLHszOjEsMzQ6MSwyMjoxLDM2ODoxLDE5NjoxfSxkTyksaC5kZz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHluZTtjYXNlIDE6cmV0dXJuIG5ldyBwbmU7Y2FzZSAyOnJldHVybiBuZXcgeG5lO2Nhc2UgMzpyZXR1cm4gbmV3IGRuZTtjYXNlIDQ6cmV0dXJuIG5ldyBnbmU7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oRmhlKyh0aGlzLmYhPW51bGw/dGhpcy5mOiIiK3RoaXMuZykpKX19O3ZhciBHZGUsS2RlLFdkZSxZZGUsWGRlLHFUdD1GcihrQ2UsUmhlLDM2OCxIcixHbW4sZzFuKSxIVHQ7RCg2NTMsMSx7fSksaC5lPTEsaC5nPTAsSShrZmUsIkFic3RyYWN0UmFkaXVzRXh0ZW5zaW9uQ29tcGFjdGlvbiIsNjUzKSxEKDE4MzQsNjUzLHt9LHVydCksaC5DZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7Zm9yKHRoaXMuYz1sKGF0KHQsKEg1KCksWTYpKSwyNyksTGUodGhpcyx0aGlzLmMpLHRoaXMuZD1zdWUobChhdCh0LChTYigpLEZCKSksMzAwKSksRT1sKGF0KHQsSmRlKSwxNyksRSYmbWUodGhpcyxFLmEpLHc9R2UoYXQodCwocGkoKSxFdikpKSxfZSh0aGlzLChucih3KSx3KSksQz1IeSh0aGlzLmMpLHRoaXMuZCYmdGhpcy5kLkdnKEMpLG1fbih0aGlzLEMpLGc9bmV3IElsKGhlKGxlKEFpLDEpLHd5dCwyNywwLFt0aGlzLmNdKSkscj0wO3I8MjtyKyspZm9yKG49MDtuPEMuYy5sZW5ndGg7bisrKW89bmV3IElsKGhlKGxlKEFpLDEpLHd5dCwyNywwLFsoU24obixDLmMubGVuZ3RoKSxsKEMuY1tuXSwyNykpXSkpLGY9bjxDLmMubGVuZ3RoLTE/KFNuKG4rMSxDLmMubGVuZ3RoKSxsKEMuY1tuKzFdLDI3KSk6KFNuKDAsQy5jLmxlbmd0aCksbChDLmNbMF0sMjcpKSxhPW49PTA/bChqdChDLEMuYy5sZW5ndGgtMSksMjcpOihTbihuLTEsQy5jLmxlbmd0aCksbChDLmNbbi0xXSwyNykpLGpndCh0aGlzLChTbihuLEMuYy5sZW5ndGgpLGwoQy5jW25dLDI3KSxnKSxhLGYsbyl9LEkoa2ZlLCJBbm51bHVzV2VkZ2VDb21wYWN0aW9uIiwxODM0KSxEKDEzOTMsMSx0cyxwbmUpLGguS2Y9ZnVuY3Rpb24odCxuKXtsM24obCh0LDI3KSxuKX0sSShrZmUsIkdlbmVyYWxDb21wYWN0b3IiLDEzOTMpLEQoMTgzMyw2NTMse30sYm5lKSxoLkNnPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO3I9bChhdCh0LChINSgpLFk2KSksMjcpLHRoaXMuZj1yLHRoaXMuYj1zdWUobChhdCh0LChTYigpLEZCKSksMzAwKSksbz1sKGF0KHQsSmRlKSwxNyksbyYmbWUodGhpcyxvLmEpLGE9R2UoYXQodCwocGkoKSxFdikpKSxfZSh0aGlzLChucihhKSxhKSksbj1IeShyKSx0aGlzLmImJnRoaXMuYi5HZyhuKSxtcHQodGhpcyxuKX0saC5hPTAsSShrZmUsIlJhZGlhbENvbXBhY3Rpb24iLDE4MzMpLEQoMTg0MiwxLHt9LG1uZSksaC5EZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKHRoaXMuYT10LG49MCxnPUh5KHQpLGE9MCxmPW5ldyBHKGcpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMjcpLCsrYSxyPWE7cjxnLmMubGVuZ3RoO3IrKylPQW4odGhpcyxvLChTbihyLGcuYy5sZW5ndGgpLGwoZy5jW3JdLDI3KSkpJiYobis9MSk7cmV0dXJuIG59LEkoRUNlLCJDcm9zc2luZ01pbmltaXphdGlvblBvc2l0aW9uIiwxODQyKSxEKDE4NDAsMSx7fSx2bmUpLGguRGc9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7Zm9yKGE9MCxyPW5ldyBocihkcihjcCh0KS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDc0KSx3PWJjKGwoT2UoKCFuLmMmJihuLmM9bmV3IExuKF9yLG4sNSw4KSksbi5jKSwwKSw4NCkpLEM9dy5pK3cuZy8yLEw9dy5qK3cuZi8yLG89dC5pK3QuZy8yLGY9dC5qK3QuZi8yLEI9bmV3IHFhLEIuYT1DLW8sQi5iPUwtZixnPW5ldyBsdChCLmEsQi5iKSxSRShnLHQuZyx0LmYpLEIuYS09Zy5hLEIuYi09Zy5iLG89Qy1CLmEsZj1MLUIuYixFPW5ldyBsdChCLmEsQi5iKSxSRShFLHcuZyx3LmYpLEIuYS09RS5hLEIuYi09RS5iLEM9bytCLmEsTD1mK0IuYix6PUMtbyxWPUwtZixhKz1iLk1hdGguc3FydCh6KnorVipWKTtyZXR1cm4gYX0sSShFQ2UsIkVkZ2VMZW5ndGhPcHRpbWl6YXRpb24iLDE4NDApLEQoMTg0MSwxLHt9LHduZSksaC5EZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihhPTAscj1uZXcgaHIoZHIoY3AodCkuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSw3NCksdz1iYyhsKE9lKCghbi5jJiYobi5jPW5ldyBMbihfcixuLDUsOCkpLG4uYyksMCksODQpKSxFPXcuaSt3LmcvMixDPXcuait3LmYvMixvPWwoYXQodywocGkoKSxuOSkpLDgpLGY9dC5pK28uYSt0LmcvMixnPXQuaitvLmIrdC5mLEw9RS1mLEI9Qy1nLGErPWIuTWF0aC5zcXJ0KEwqTCtCKkIpO3JldHVybiBhfSxJKEVDZSwiRWRnZUxlbmd0aFBvc2l0aW9uT3B0aW1pemF0aW9uIiwxODQxKSxEKDEzOTIsNjUzLHRzLHluZSksaC5LZj1mdW5jdGlvbih0LG4pe2Jrbih0aGlzLGwodCwyNyksbil9LEkoIm9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZS5vdmVybGFwcyIsIlJhZGl1c0V4dGVuc2lvbk92ZXJsYXBSZW1vdmFsIiwxMzkyKSxEKDEzOTQsMSx0cyx4bmUpLGguS2Y9ZnVuY3Rpb24odCxuKXtsZ24obCh0LDI3KSxuKX0sSSgib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuaW50ZXJtZWRpYXRlLnJvdGF0aW9uIiwiR2VuZXJhbFJvdGF0b3IiLDEzOTQpLEQoNDM0LDIyLHszOjEsMzQ6MSwyMjoxLDQzNDoxfSxHM2UpO3ZhciBUSWUsUWRlLENJZT1Gcih3TCwiQW5udWx1c1dlZGdlQ3JpdGVyaWEiLDQzNCxIcixuMm4sYjFuKSxWVHQ7RCgzOTMsMjIsezM6MSwzNDoxLDIyOjEsMzkzOjF9LE5zZSk7dmFyIHpXLFNJZSxfSWUsQUllPUZyKHdMLFRFZSwzOTMsSHIsYWJuLHAxbiksVVR0O0QoODYzLDEsUGYsQ2YpLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFRDZSksIiIpLCJDZW50ZXIgT24gUm9vdCIpLCJDZW50ZXJzIHRoZSBsYXlvdXQgb24gdGhlIHJvb3Qgb2YgdGhlIHRyZWUgaS5lLiBzbyB0aGF0IHRoZSBjZW50cmFsIG5vZGUgaXMgYWxzbyB0aGUgY2VudGVyIG5vZGUgb2YgdGhlIGZpbmFsIGxheW91dC4gVGhpcyBpbnRyb2R1Y2VzIGFkZGl0aW9uYWwgd2hpdGVzcGFjZS4iKSwoSG4oKSwhMSkpLChnMigpLHlhKSksTnMpLHVuKChyMSgpLFBuKSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LENDZSksIiIpLCJPcmRlciBJRCIpLCJUaGUgaWQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIG9yZGVyIGZvciBub2RlcyBvZiBvbmUgcmFkaXVzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNvcnQgdGhlbSBpbiB0aGUgbGF5ZXIgYWNjb3JkaW5nbHkuIikscHQoMCkpLFRjKSxybyksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxTQ2UpLCIiKSwiUmFkaXVzIiksIlRoZSByYWRpdXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCByYWRpdXMgZm9yIHRoZSByYWRpYWwgbGF5b3V0ZXIuIiksMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE5HKSwiIiksIlJvdGF0ZSIpLCJUaGUgcm90YXRlIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgYSByb3RhdGlvbiBvZiB0aGUgbGF5b3V0IHNob3VsZCBiZSBwZXJmb3JtZWQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxUZmUpLCIiKSx5eXQpLCJXaXRoIHRoZSBjb21wYWN0ZXIgb3B0aW9uIGl0IGNhbiBiZSBkZXRlcm1pbmVkIGhvdyBjb21wYWN0aW9uIG9uIHRoZSBncmFwaCBpcyBkb25lLiBJdCBjYW4gYmUgY2hvc2VuIGJldHdlZW4gbm9uZSwgdGhlIHJhZGlhbCBjb21wYWN0aW9uIG9yIHRoZSBjb21wYWN0aW9uIG9mIHdlZGdlcyBzZXBhcmF0ZWx5LiIpLExJZSkscHMpLEFJZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxDZmUpLCIiKSwiQ29tcGFjdGlvbiBTdGVwIFNpemUiKSwiRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHN0ZXBzIHdpdGggd2hpY2ggdGhlIGNvbXBhY3Rpb24gaXMgZG9uZS4gU3RlcCBzaXplIDEgY29ycmVsYXRlcyB0byBhIGNvbXBhY3Rpb24gb2YgMSBwaXhlbCBwZXIgSXRlcmF0aW9uLiIpLHB0KDEpKSxUYykscm8pLHVuKFBuKSkpKSxRcyh0LENmZSxUZmUsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LF9DZSksIiIpLCJTb3J0ZXIiKSwiU29ydCB0aGUgbm9kZXMgcGVyIHJhZGl1cyBhY2NvcmRpbmcgdG8gdGhlIHNvcnRpbmcgYWxnb3JpdGhtLiBUaGUgc3RyYXRlZ2llcyBhcmUgbm9uZSwgYnkgdGhlIGdpdmVuIG9yZGVyIGlkLCBvciBzb3J0aW5nIHRoZW0gYnkgcG9sYXIgY29vcmRpbmF0ZXMuIiksREllKSxwcyksR0llKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEFDZSksIiIpLCJBbm51bHVzIFdlZGdlIENyaXRlcmlhIiksIkRldGVybWluZSBob3cgdGhlIHdlZGdlIGZvciB0aGUgbm9kZSBwbGFjZW1lbnQgaXMgY2FsY3VsYXRlZC4gSXQgY2FuIGJlIGNob3NlbiBiZXR3ZWVuIHdlZGdlIGRldGVybWluYXRpb24gYnkgdGhlIG51bWJlciBvZiBsZWF2ZXMgb3IgYnkgdGhlIG1heGltdW0gc3VtIG9mIGRpYWdvbmFscy4iKSxJSWUpLHBzKSxDSWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsTENlKSwiIiksIlRyYW5zbGF0aW9uIE9wdGltaXphdGlvbiIpLCJGaW5kIHRoZSBvcHRpbWFsIHRyYW5zbGF0aW9uIG9mIHRoZSBub2RlcyBvZiB0aGUgZmlyc3QgcmFkaWkgYWNjb3JkaW5nIHRvIHRoaXMgY3JpdGVyaWEuIEZvciBleGFtcGxlIGVkZ2UgY3Jvc3NpbmdzIGNhbiBiZSBtaW5pbWl6ZWQuIiksTUllKSxwcyksSEllKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFNmZSksRENlKSwiVGFyZ2V0IEFuZ2xlIiksIlRoZSBhbmdsZSBpbiByYWRpYW5zIHRoYXQgdGhlIGxheW91dCBzaG91bGQgYmUgcm90YXRlZCB0byBhZnRlciBsYXlvdXQuIiksMCksZm8pLHRhKSx1bihQbikpKSksUXModCxTZmUsTkcsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LF9mZSksRENlKSwiQWRkaXRpb25hbCBXZWRnZSBTcGFjZSIpLCJJZiBzZXQgdG8gdHJ1ZSwgbW9kaWZpZXMgdGhlIHRhcmdldCBhbmdsZSBieSByb3RhdGluZyBmdXJ0aGVyIHN1Y2ggdGhhdCBzcGFjZSBpcyBsZWZ0IGZvciBhbiBlZGdlIHRvIHBhc3MgaW4gYmV0d2VlbiB0aGUgbm9kZXMuIFRoaXMgb3B0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0b3AtZG93biBsYXlvdXQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLFFzKHQsX2ZlLE5HLG51bGwpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxNQ2UpLERDZSksIk91dGdvaW5nIEVkZ2UgQW5nbGVzIiksIkNhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgYW5nbGUgb2YgY29ubmVjdGVkIG5vZGVzIHRvIGxlYXZlIHNwYWNlIGZvciBhbiBpbmNvbWluZyBlZGdlLiBUaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdG9wLWRvd24gbGF5b3V0LiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxRdnQoKG5ldyBvaWUsdCkpfTt2YXIgR1R0LEtUdCxXVHQsTEllLFlUdCxNSWUsWFR0LFFUdCxKVHQsWlR0LGVDdCx0Q3QsbkN0LERJZSxyQ3QsSUllO0kod0wsIlJhZGlhbE1ldGFEYXRhUHJvdmlkZXIiLDg2MyksRCgxMDA4LDEsUGYsb2llKSxoLmhmPWZ1bmN0aW9uKHQpe1F2dCh0KX07dmFyIE9JZSxKZGUsWmRlLGlDdCxzQ3QsYUN0LG9DdCxOSWUsUEllLHFXLGNDdCx1Q3QsSFcsQkllLEZJZSxSSWUsZWdlLEZCLGxDdCxqSWU7SSh3TCwiUmFkaWFsT3B0aW9ucyIsMTAwOCksRCgxMDA5LDEse30sZnUpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgZlplLHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKHdMLCJSYWRpYWxPcHRpb25zL1JhZGlhbEZhY3RvcnkiLDEwMDkpLEQoMzU0LDIyLHszOjEsMzQ6MSwyMjoxLDM1NDoxfSx5cSk7dmFyICRJZSx6SWUscUllLHRnZSxISWU9RnIod0wsIlJhZGlhbFRyYW5zbGF0aW9uU3RyYXRlZ3kiLDM1NCxIcixvbW4sbTFuKSxoQ3Q7RCgzMDAsMjIsezM6MSwzNDoxLDIyOjEsMzAwOjF9LFBzZSk7dmFyIFZJZSxuZ2UsVUllLEdJZT1Gcih3TCwiU29ydGluZ1N0cmF0ZWd5IiwzMDAsSHIsb2JuLHYxbiksZkN0O0QoMTQ3NiwxLFVvLGtuZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDI3KSxudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7amtuKHRoaXMsbCh0LDI3KSxuKX0saC5jPTAsSSgib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwucDFwb3NpdGlvbiIsIkVhZGVzUmFkaWFsIiwxNDc2KSxEKDE4MzgsMSx7fSxTUyksaC5FZz1mdW5jdGlvbih0KXtyZXR1cm4gd2R0KHQpfSxJKHh5dCwiQW5udWx1c1dlZGdlQnlMZWFmcyIsMTgzOCksRCgxODM5LDEse30sUmMpLGguRWc9ZnVuY3Rpb24odCl7cmV0dXJuIERndCh0aGlzLHQpfSxJKHh5dCwiQW5udWx1c1dlZGdlQnlOb2RlU3BhY2UiLDE4MzkpLEQoMTQ3NywxLFVvLFB1KSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMjcpLG51bGx9LGguS2Y9ZnVuY3Rpb24odCxuKXtYNG4odGhpcyxsKHQsMjcpLG4pfSxJKCJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5wMnJvdXRpbmciLCJTdHJhaWdodExpbmVFZGdlUm91dGVyIiwxNDc3KSxEKDgyNiwxLHt9LFZ3ZSksaC5GZz1mdW5jdGlvbih0KXt9LGguR2c9ZnVuY3Rpb24odCl7QVFlKHRoaXMsdCl9LEkoSUNlLCJJRFNvcnRlciIsODI2KSxEKDE4MzcsMSxpaSxocyksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBoM24obCh0LDI3KSxsKG4sMjcpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKElDZSwiSURTb3J0ZXIvbGFtYmRhJDAkVHlwZSIsMTgzNyksRCgxODM2LDEse30sVGZ0KSxoLkZnPWZ1bmN0aW9uKHQpe2JjdCh0aGlzLHQpfSxoLkdnPWZ1bmN0aW9uKHQpe3ZhciBuO3QuZGMoKXx8KHRoaXMuZXx8KG49dXN0KGwodC5YYigwKSwyNykpLGJjdCh0aGlzLG4pKSxBUWUodGhpcy5lLHQpKX0sSShJQ2UsIlBvbGFyQ29vcmRpbmF0ZVNvcnRlciIsMTgzNiksRCg0NDUsMjIsezM6MSwzNDoxLDIyOjEsNDQ1OjF9LEJzZSk7dmFyIFJCLFZXLHJnZSxLSWU9RnIoQ3l0LCJSZWN0UGFja2luZ0xheW91dFBoYXNlcyIsNDQ1LEhyLGlibix3MW4pLGRDdDtEKDExMTgsMjA1LHR2LGdaZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO2lmKG4uVWcoIlJlY3RhbmdsZSBQYWNraW5nIiwxKSxCPWwoYXQodCwoejEoKSx2TSkpLDEwNyksRT1SdChCdChhdCh0LFBDdCkpKSxMPXplKEdlKGF0KHQsd00pKSksYW49UnQoQnQoYXQodCxzT2UpKSksJGU9KCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLFJ0KEJ0KGF0KHQsbGdlKSkpfHxLTygobz1uZXcgWXYoKGF3KCksbmV3IEp2KHQpKSksbykpLGNuPSExLGFuJiYkZS5pPj0zKWZvcihvdD1sKE9lKCRlLDApLDI3KSxTdD1sKE9lKCRlLDEpLDI3KSxmPTA7ZisyPCRlLmk7KWlmKFplPW90LG90PVN0LFN0PWwoT2UoJGUsZisyKSwyNyksWmUuZj49b3QuZitTdC5mK0x8fFN0LmY+PVplLmYrb3QuZitMKXtjbj0hMDticmVha31lbHNlKytmO2Vsc2UgY249ITA7aWYoIWNuKXtmb3Ioej0kZS5pLHc9bmV3IG9yKCRlKTt3LmUhPXcuaS5nYygpOylnPWwoZ3IodyksMjcpLEhpKGcsKHBpKCksWEIpLHB0KHopKSwtLXo7Um10KHQsbmV3IEw4KSxuLlZnKCk7cmV0dXJufWZvcihyPShxTyh0aGlzLmEpLFgwKHRoaXMuYSwoV1YoKSxSQiksbChhdCh0LHVPZSksMTg4KSksWDAodGhpcy5hLFZXLGwoYXQodCxyT2UpLDE4OCkpLFgwKHRoaXMuYSxyZ2UsbChhdCh0LGFPZSksMTg4KSksdXllKHRoaXMuYSwoQm49bmV3IFhzLGZpKEJuLFJCLChzVSgpLGFnZSkpLGZpKEJuLFZXLHNnZSksUnQoQnQoYXQodCx0T2UpKSkmJmZpKEJuLFJCLGlnZSksQm4pKSxiUCh0aGlzLmEsdCkpLEM9MS9yLmMubGVuZ3RoLEo9bmV3IEcocik7Si5hPEouYy5jLmxlbmd0aDspe2lmKFY9bChyZShKKSw0Nyksbi4kZygpKXJldHVybjtWLktmKHQsbi5laChDKSl9Zm9yKGZlPTAsdGU9MCxNZT1uZXcgb3IoJGUpO01lLmUhPU1lLmkuZ2MoKTspVGU9bChncihNZSksMjcpLGZlPWIuTWF0aC5tYXgoZmUsVGUuaStUZS5nKSx0ZT1iLk1hdGgubWF4KHRlLFRlLmorVGUuZik7YzllKHQsbmV3IGx0KHplKEdlKGF0KHQsKHVnKCksWngpKSkpLHplKEdlKGF0KHQsWlQpKSkpLG5ldyBsdChmZSx0ZSkpLE4zbigkZSxCKSxFfHxHdyh0LHplKEdlKGF0KHQsWngpKSkrKEIuYitCLmMpLHplKEdlKGF0KHQsWlQpKSkrKEIuZCtCLmEpLCExLCEwKSxSdChCdChhdCh0LGxnZSkpKXx8S08oKGE9bmV3IFl2KChhdygpLG5ldyBKdih0KSkpLGEpKSxuLlZnKCl9LEkoQ3l0LCJSZWN0UGFja2luZ0xheW91dFByb3ZpZGVyIiwxMTE4KSxEKDE1MTgsMSx0cyxtSSksaC5LZj1mdW5jdGlvbih0LG4pe2RMbihsKHQsMjcpLG4pfSxJKFBHLCJJbnRlcmFjdGl2ZU5vZGVSZW9yZGVyZXIiLDE1MTgpLEQoMTUxOSwxLGlpLEVuZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB5eW4obCh0LDI3KSxsKG4sMjcpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKFBHLCJJbnRlcmFjdGl2ZU5vZGVSZW9yZGVyZXIvbGFtYmRhJDAkVHlwZSIsMTUxOSksRCg0NTYsMjIsezM6MSwzNDoxLDIyOjEsNDU2OjEsMTk2OjF9LEZzZSksaC5kZz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IG1JO2Nhc2UgMTpyZXR1cm4gbmV3IENuZTtjYXNlIDI6cmV0dXJuIG5ldyBUbmV9cmV0dXJuIG51bGx9O3ZhciBpZ2Usc2dlLGFnZSxnQ3Q9RnIoUEcsUmhlLDQ1NixIcixzYm4seTFuKSxwQ3Q7RCgxNTIxLDEsdHMsVG5lKSxoLktmPWZ1bmN0aW9uKHQsbil7TjVuKGwodCwyNyksbil9LEkoUEcsIk1pblNpemVQb3N0UHJvY2Vzc29yIiwxNTIxKSxEKDE1MjAsMSx0cyxDbmUpLGguS2Y9ZnVuY3Rpb24odCxuKXtJeW4obCh0LDI3KSxuKX0sSShQRywiTWluU2l6ZVByZVByb2Nlc3NvciIsMTUyMCk7dmFyIGJNLFpULFp4LGJDdCxtQ3QsVVcsb2dlLGNnZSxtTSxHVyxUNDtEKDM5NCwyMix7MzoxLDM0OjEsMjI6MSwzOTQ6MX0sUnNlKTt2YXIgV0llLFlJZSx1Z2UsWEllPUZyKEFmZSwiT3B0aW1pemF0aW9uR29hbCIsMzk0LEhyLHJibix4MW4pLHZDdDtEKDg2NywxLFBmLGdrKSxoLmhmPWZ1bmN0aW9uKHQpe3NuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxPQ2UpLCIiKSwiVHJ5IGJveCBsYXlvdXQgZmlyc3QiKSwiV2hldGhlciBvbmUgc2hvdWxkIGNoZWNrIHdoZXRoZXIgdGhlIHJlZ2lvbnMgYXJlIHN0YWNrYWJsZSB0byBzZWUgd2hldGhlciBib3ggbGF5b3V0IHdvdWxkIGRvIHRoZSBqb2IuIEZvciBleGFtcGxlLCBub2RlcyB3aXRoIHRoZSBzYW1lIGhlaWdodCBhcmUgbm90IHN0YWNrYWJsZSBpbnNpZGUgYSByb3cuIFRoZXJlZm9yZSwgYm94IGxheW91dCB3aWxsIHBlcmZvcm0gYmV0dGVyIGFuZCBmYXN0ZXIuIiksKEhuKCksITEpKSwoZzIoKSx5YSkpLE5zKSx1bigocjEoKSxQbikpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxOQ2UpLCIiKSwiQ3VycmVudCBwb3NpdGlvbiBvZiBhIG5vZGUgaW4gdGhlIG9yZGVyIG9mIG5vZGVzIiksIlRoZSByZWN0YW5nbGVzIGFyZSBvcmRlcmVkLiBOb3JtYWxseSBhY2NvcmRpbmcgdG8gdGhlaXIgZGVmaW5pdGlvbiB0aGUgdGhlIG1vZGVsLiBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgYSBub2RlLiIpLHB0KC0xKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFBDZSksIiIpLCJEZXNpcmVkIGluZGV4IG9mIG5vZGUiKSwiVGhlIHJlY3RhbmdsZXMgYXJlIG9yZGVyZWQuIE5vcm1hbGx5IGFjY29yZGluZyB0byB0aGVpciBkZWZpbml0aW9uIHRoZSB0aGUgbW9kZWwuIFRoaXMgb3B0aW9uIGFsbG93cyB0byBzcGVjaWZ5IGEgZGVzaXJlZCBwb3NpdGlvbiB0aGF0IGhhcyBwcmVmZXJlbmNlIG92ZXIgdGhlIG9yaWdpbmFsIHBvc2l0aW9uLiIpLHB0KC0xKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEJDZSksIiIpLCJJbiBuZXcgUm93IiksIklmIHNldCB0byB0cnVlIHRoaXMgbm9kZSBiZWdpbnMgaW4gYSBuZXcgcm93LiBDb25zZXF1ZW50bHkgdGhpcyBub2RlIGNhbm5vdCBiZSBtb3ZlZCBpbiBhIHByZXZpb3VzIGxheWVyIGR1cmluZyBjb21wYWN0aW9uLiBXaWR0aCBhcHByb3hpbWF0aW9uIGRvZXMgZG9lcyBub3QgdGFrZSB0aGlzIGludG8gYWNjb3VudC4iKSwhMSkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEZDZSksTGZlKSwiV2lkdGggQXBwcm94aW1hdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgZmluZGluZyBhbiBpbml0aWFsIHdpZHRoIG9mIHRoZSBkcmF3aW5nLiIpLFpJZSkscHMpLGZPZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxSQ2UpLExmZSksIlRhcmdldCBXaWR0aCIpLCJPcHRpb24gdG8gcGxhY2UgdGhlIHJlY3RhbmdsZXMgaW4gdGhlIGdpdmVuIHRhcmdldCB3aWR0aCBpbnN0ZWFkIG9mIGFwcHJveGltYXRpbmcgdGhlIHdpZHRoIHVzaW5nIHRoZSBkZXNpcmVkIGFzcGVjdCByYXRpby4gVGhlIHBhZGRpbmcgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMuIE1lYW5pbmcgYSBkcmF3aW5nIHdpbGwgaGF2ZSB3aWR0aCBvZiB0YXJnZXR3aWR0aCArIGhvcml6b250YWwgcGFkZGluZy4iKSwtMSksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGpDZSksTGZlKSwiT3B0aW1pemF0aW9uIEdvYWwiKSwiT3B0aW1pemF0aW9uIGdvYWwgZm9yIGFwcHJveGltYXRpb24gb2YgdGhlIGJvdW5kaW5nIGJveCBnaXZlbiBieSB0aGUgZmlyc3QgaXRlcmF0aW9uLiBEZXRlcm1pbmVzIHdoZXRoZXIgbGF5b3V0IGlzIHNvcnRlZCBieSB0aGUgbWF4aW11bSBzY2FsaW5nLCBhc3BlY3QgcmF0aW8sIG9yIGFyZWEuIERlcGVuZGluZyBvbiB0aGUgc3RyYXRlZ3kgdGhlIGFzcGVjdCByYXRpbyBtaWdodCBiZSBuZWFybHkgaWdub3JlZC4iKSxKSWUpLHBzKSxYSWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsJENlKSxMZmUpLCJTaGlmdCBMYXN0IFBsYWNlZC4iKSwiV2hlbiBwbGFjaW5nIGEgcmVjdGFuZ2xlIGJlaGluZCBvciBiZWxvdyB0aGUgbGFzdCBwbGFjZWQgcmVjdGFuZ2xlIGluIHRoZSBmaXJzdCBpdGVyYXRpb24sIGl0IGlzIHNvbWV0aW1lcyBwb3NzaWJsZSB0byBzaGlmdCB0aGUgcmVjdGFuZ2xlIGZ1cnRoZXIgdG8gdGhlIGxlZnQgb3IgcmlnaHQsIHJlc3VsdGluZyBpbiBsZXNzIHdoaXRlc3BhY2UuIFRydWUgKGRlZmF1bHQpIGVuYWJsZXMgdGhlIHNoaWZ0IGFuZCBmYWxzZSBkaXNhYmxlcyBpdC4gRGlzYWJsaW5nIHRoZSBzaGlmdCBwcm9kdWNlcyBhIGdyZWF0ZXIgYXBwcm94aW1hdGVkIGFyZWEgYnkgdGhlIGZpcnN0IGl0ZXJhdGlvbiBhbmQgYSBsYXlvdXQsIHdoZW4gdXNpbmcgT05MWSB0aGUgZmlyc3QgaXRlcmF0aW9uIChkZWZhdWx0IG5vdCB0aGUgY2FzZSksIHdoZXJlIGl0IGlzIHNvbWV0aW1lcyBpbXBvc3NpYmxlIHRvIGltcGxlbWVudCBhIHNpemUgdHJhbnNmb3JtYXRpb24gb2YgcmVjdGFuZ2xlcyB0aGF0IHdpbGwgZmlsbCB0aGUgYm91bmRpbmcgYm94IGFuZCBlbGltaW5hdGUgZW1wdHkgc3BhY2VzLiIpLCEwKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsekNlKSwicGFja2luZyIpLFN5dCksIlN0cmF0ZWd5IGZvciBmaW5kaW5nIGFuIGluaXRpYWwgcGxhY2VtZW50IG9uIG5vZGVzLiIpLFFJZSkscHMpLHBPZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxxQ2UpLF95dCksIlJvdyBIZWlnaHQgUmVldmFsdWF0aW9uIiksIkR1cmluZyB0aGUgY29tcGFjdGlvbiBzdGVwIHRoZSBoZWlnaHQgb2YgYSByb3cgaXMgbm9ybWFsbHkgbm90IGNoYW5nZWQuIElmIHRoaXMgb3B0aW9ucyBpcyBzZXQsIHRoZSBibG9ja3Mgb2Ygb3RoZXIgcm93cyBtaWdodCBiZSBhZGRlZCBpZiB0aGV5IGV4Y2VlZCB0aGUgcm93IGhlaWdodC4gSWYgdGhpcyBpcyB0aGUgY2FzZSB0aGUgd2hvbGUgcm93IGhhcyB0byBiZSBwYWNrZWQgYWdhaW4gdG8gYmUgb3B0aW1hbCByZWdhcmRpbmcgdGhlIG5ldyByb3cgaGVpZ2h0LiBUaGlzIG9wdGlvbiBzaG91bGQsIHRoZXJlZm9yZSwgYmUgdXNlZCB3aXRoIGNhcmUgc2luY2UgaXQgbWlnaHQgYmUgY29tcHV0YXRpb24gaGVhdnkuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxIQ2UpLF95dCksIkNvbXBhY3Rpb24gaXRlcmF0aW9ucyIpLCJEZWZpbmVzIHRoZSBudW1iZXIgb2YgY29tcGFjdGlvbiBpdGVyYXRpb25zLiBFLmcuIGlmIHNldCB0byAyIHRoZSB3aWR0aCBpcyBpbml0aWFsbHkgYXBwcm94aW1hdGVkLCB0aGVuIHRoZSBkcmF3aW5nIGlzIGNvbXBhY3RlZCBhbmQgYmFzZWQgb24gdGhlIHJlc3VsdGluZyBkcmF3aW5nIHRoZSB0YXJnZXQgd2lkdGggaXMgZGVjcmVhc2VkIG9yIGluY3JlYXNlZCBhbmQgYSBzZWNvbmQgY29tcGFjdGlvbiBzdGVwIGlzIGV4ZWN1dGVkIGFuZCB0aGUgcmVzdWx0IGNvbXBhcmVkIHRvIHRoZSBmaXJzdCBvbmUuIFRoZSBiZXN0IHJ1biBpcyB1c2VkIGJhc2VkIG9uIHRoZSBzY2FsZSBtZWFzdXJlLiIpLHB0KDEpKSxUYykscm8pLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsVkNlKSwid2hpdGVTcGFjZUVsaW1pbmF0aW9uIiksIldoaXRlIFNwYWNlIEFwcHJveGltYXRpb24gU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIGV4cGFuZGluZyBub2RlcyBzdWNoIHRoYXQgd2hpdGVzcGFjZSBpbiB0aGUgcGFyZW50IGlzIGVsaW1pbmF0ZWQuIikscHMpLHZPZSksdW4oUG4pKSkpLGd3dCgobmV3IFFTLHQpKX07dmFyIHdDdCx5Q3QseEN0LGtDdCxFQ3QsVEN0LFFJZSxDQ3QsU0N0LF9DdCxBQ3QsSkllLExDdCxaSWUsTUN0O0koQWZlLCJSZWN0UGFja2luZ01ldGFEYXRhUHJvdmlkZXIiLDg2NyksRCgxMDE2LDEsUGYsUVMpLGguaGY9ZnVuY3Rpb24odCl7Z3d0KHQpfTt2YXIgS1csREN0LGVPZSxqQix0T2UsSUN0LCRCLE9DdCxOQ3QsUEN0LEJDdCxGQ3QsbGdlLG5PZSxoZ2Usck9lLHZNLGlPZSxSQ3Qsd00sc09lLGFPZSxvT2UsY09lLHVPZSxmZ2U7SShBZmUsIlJlY3RQYWNraW5nT3B0aW9ucyIsMTAxNiksRCgxMDE3LDEse30sYzgpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgZ1plLHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKEFmZSwiUmVjdFBhY2tpbmdPcHRpb25zL1JlY3RwYWNraW5nRmFjdG9yeSIsMTAxNyksRCgxNzA1LDEse30sd2l0KSxoLmE9MCxoLmM9ITEsSShiVCwiQXJlYUFwcHJveGltYXRpb24iLDE3MDUpO3ZhciBsT2U9a3MoYlQsIkJlc3RDYW5kaWRhdGVGaWx0ZXIiKTtEKDY3MywxLHs1MzU6MX0seW0pLGguSGc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3IoRT1uZXcgYnQsZj1ncyx3PW5ldyBHKHQpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwyMzgpLGY9Yi5NYXRoLm1pbihmLChnLmMrKHIuYityLmMpKSooZy5iKyhyLmQrci5hKSkpO2ZvcihvPW5ldyBHKHQpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwyMzgpLChhLmMrKHIuYityLmMpKSooYS5iKyhyLmQrci5hKSk9PWYmJiRuKEUuYyxhKTtyZXR1cm4gRX0sSShiVCwiQXJlYUZpbHRlciIsNjczKSxEKDY3NCwxLHs1MzU6MX0sUTkpLGguSGc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3Iodz1uZXcgYnQsRT1ncyxnPW5ldyBHKHQpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwyMzgpLEU9Yi5NYXRoLm1pbihFLGIuTWF0aC5hYnMoKGYuYysoci5iK3IuYykpLyhmLmIrKHIuZCtyLmEpKS1uKSk7Zm9yKG89bmV3IEcodCk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDIzOCksYi5NYXRoLmFicygoYS5jKyhyLmIrci5jKSkvKGEuYisoci5kK3IuYSkpLW4pPT1FJiYkbih3LmMsYSk7cmV0dXJuIHd9LEkoYlQsIkFzcGVjdFJhdGlvRmlsdGVyIiw2NzQpLEQoMTQ2OSwxLFVvLFNuZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDI3KSxudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7ZVNuKGwodCwyNyksbil9LEkoYlQsIkdyZWVkeVdpZHRoQXBwcm94aW1hdG9yIiwxNDY5KSxEKDY3MiwxLHs1MzU6MX0sdkkpLGguSGc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3IoRT1uZXcgYnQsZj1pYSx3PW5ldyBHKHQpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwyMzgpLGY9Yi5NYXRoLm1heChmLGFIKGcuYysoci5iK3IuYyksZy5iKyhyLmQrci5hKSxnLmEpKTtmb3Iobz1uZXcgRyh0KTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMjM4KSxhSChhLmMrKHIuYityLmMpLGEuYisoci5kK3IuYSksYS5hKT09ZiYmJG4oRS5jLGEpO3JldHVybiBFfSxJKGJULCJTY2FsZU1lYXN1cmVGaWx0ZXIiLDY3MiksRCgxNDcwLDEsVW8sX25lKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMjcpLG51bGx9LGguS2Y9ZnVuY3Rpb24odCxuKXska24obCh0LDI3KSxuKX0sSShiVCwiVGFyZ2V0V2lkdGhXaWR0aEFwcHJveGltYXRvciIsMTQ3MCksRCg0OTEsMjIsezM6MSwzNDoxLDIyOjEsNDkxOjEsMTg4OjEsMTk2OjF9LEszZSksaC5kZz1mdW5jdGlvbigpe3JldHVybiAkZ3QodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gJGd0KHRoaXMpfTt2YXIgZGdlLGhPZSxmT2U9RnIoYlQsIldpZHRoQXBwcm94aW1hdGlvblN0cmF0ZWd5Iiw0OTEsSHIsWnBuLGsxbiksakN0O0QoMTQ3MSwxLFVvLEFuZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDI3KSxudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7ZUluKHRoaXMsbCh0LDI3KSxuKX0sSShCRywiQ29tcGFjdG9yIiwxNDcxKSxEKDE0NzMsMSxVbyxMbmUpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwyNyksbnVsbH0saC5LZj1mdW5jdGlvbih0LG4pe0lDbihsKHQsMjcpLG4pfSxJKEJHLCJOb1BsYWNlbWVudCIsMTQ3MyksRCg0MzksMjIsezM6MSwzNDoxLDIyOjEsNDM5OjEsMTg4OjEsMTk2OjF9LGpzZSksaC5kZz1mdW5jdGlvbigpe3JldHVybiBlMXQodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gZTF0KHRoaXMpfTt2YXIgZ2dlLGRPZSxnT2UscE9lPUZyKEJHLCJQYWNraW5nU3RyYXRlZ3kiLDQzOSxIcixuYm4sQzFuKSwkQ3Q7RCg4MTAsMSx7fSxRM2UpLGguYT0wLGguYj0wLGguYz0wLGguZD1ncyxoLmU9MCxoLmY9Z3MsSShCRywiUm93RmlsbGluZ0FuZENvbXBhY3Rpb24iLDgxMCksRCgxNDcyLDEsVW8sYyQpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwyNyksbnVsbH0saC5LZj1mdW5jdGlvbih0LG4pe2JNbihsKHQsMjcpLG4pfSxJKEJHLCJTaW1wbGVQbGFjZW1lbnQiLDE0NzIpLEQoMTQ3NCwxLFVvLE1uZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDI3KSxudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7dGhpcy5JZyhsKHQsMjcpLG4pfSxoLklnPWZ1bmN0aW9uKHQsbil7TzJ0KHQsbil9LEkoVUNlLCJFcXVhbFdoaXRlc3BhY2VFbGltaW5hdG9yIiwxNDc0KSxEKDE0NzUsMTQ3NCxVbyxEbmUpLGguSWc9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZixnO24uVWcoIlRvIEFzcGVjdCBSYXRpbyBXaGl0ZXNhcGNlIEVsaW1pbmF0b3IiLDEpLGc9emUoR2UoYXQodCwodWcoKSxaeCkpKSksZj16ZShHZShhdCh0LFpUKSkpLG89emUoR2UoYXQodCwoejEoKSxLVykpKSkscj16ZShHZShhdCh0LGJNKSkpLGE9Zy9mLGE8bz8oZz1mKm8sSGkodCxaeCxnKSk6KHIrPWcvby1mLEhpKHQsYk0sciksSGkodCxaVCxmK3IpKSxPMnQodCxuKSxuLlZnKCl9LEkoVUNlLCJUb0FzcGVjdHJhdGlvTm9kZUV4cGFuZGVyIiwxNDc1KSxEKDQ5MiwyMix7MzoxLDM0OjEsMjI6MSw0OTI6MSwxODg6MSwxOTY6MX0sVzNlKSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuIEFmdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiBBZnQodGhpcyl9O3ZhciBiT2UsbU9lLHZPZT1GcihVQ2UsIldoaXRlU3BhY2VFbGltaW5hdGlvblN0cmF0ZWd5Iiw0OTIsSHIsZTJuLFMxbiksekN0O0QoMTcyLDEsezE3MjoxfSxrY2UpLGguYT0wLGguYz0hMSxoLmQ9MCxoLmU9MCxoLmY9MCxoLmc9MCxoLmk9MCxoLms9ITEsaC5vPWdzLGgucD1ncyxoLnI9MCxoLnM9MCxoLnQ9MCxJKEdQLCJCbG9jayIsMTcyKSxEKDIwOSwxLHsyMDk6MX0sUEgpLGguYT0wLGguYj0wLGguZD0wLGguZT0wLGguZj0wLEkoR1AsIkJsb2NrUm93IiwyMDkpLEQoMzE1LDEsezMxNToxfSx6NWUpLGguYj0wLGguYz0wLGguZD0wLGguZT0wLGguZj0wLEkoR1AsIkJsb2NrU3RhY2siLDMxNSksRCgyMzgsMSx7MjM4OjF9LHo0ZSx6OGUpLGguYT0wLGguYj0wLGguYz0wLGguZD0wLGguZT0wLGguZz0wO3ZhciBNT249SShHUCwiRHJhd2luZ0RhdGEiLDIzOCk7RCgzNzMsMjIsezM6MSwzNDoxLDIyOjEsMzczOjF9LGdPKTt2YXIgZTksUTYseU0seE0sekIscUN0PUZyKEdQLCJEcmF3aW5nRGF0YURlc2NyaXB0b3IiLDM3MyxIcixLbW4sXzFuKSxIQ3Q7RCgxODYsMSx7MTg2OjF9LFE1ZSksaC5iPTAsaC5jPTAsaC5lPTAsaC5mPTAsSShHUCwiUmVjdFJvdyIsMTg2KSxEKDc2MywxLHt9LEo3ZSksaC5qPTAsSShlNCxSM3QsNzYzKSxEKDEyMDksMSx7fSx3SSksaC5hZj1mdW5jdGlvbih0KXtyZXR1cm4gcGIodC5hLHQuYil9LEkoZTQsTUVlLDEyMDkpLEQoMTIxMCwxLHt9LHlYZSksaC5hZj1mdW5jdGlvbih0KXtyZXR1cm4gcnZuKHRoaXMuYSx0KX0sSShlNCxqM3QsMTIxMCksRCgxMjExLDEse30seFhlKSxoLmFmPWZ1bmN0aW9uKHQpe3JldHVybiBFNm4odGhpcy5hLHQpfSxJKGU0LCQzdCwxMjExKSxEKDEyMTIsMSx7fSxrWGUpLGguYWY9ZnVuY3Rpb24odCl7cmV0dXJuIG95bih0aGlzLmEsdCl9LEkoZTQsIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDMkVHlwZSIsMTIxMiksRCgxMjEzLDEse30sRVhlKSxoLmFmPWZ1bmN0aW9uKHQpe3JldHVybiB1RW4odGhpcy5hLHQpfSxJKGU0LHozdCwxMjEzKSxEKDExMTUsMjA1LHR2LHBaZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoUDEodCwoWU4oKSxKVykpJiYoVj1laShhdCh0LChsdWUoKSxqT2UpKSksZj1pbGUoaEUoKSxWKSxmJiYoZz1sKEdPKGYuZiksMjA1KSxnLnJmKHQsbi5laCgxKSkpKSxIaSh0LHhnZSwock4oKSxRVykpLEhpKHQsa2dlLChYTigpLHlnZSkpLEhpKHQsRWdlLChDTigpLFpXKSksdz1sKGF0KHQsKGx1ZSgpLEJPZSkpLDE3KS5hLG4uVWcoIk92ZXJsYXAgcmVtb3ZhbCIsMSksUnQoQnQoYXQodCx1U3QpKSksRT1uZXcgS3MsQz1uZXcgVFhlKEUpLGE9bmV3IEo3ZSxyPXB3dChhLHQpLEw9ITAsbz0wO288dyYmTDspe2lmKFJ0KEJ0KGF0KHQsRk9lKSkpKXtpZihFLmEuJGIoKSxla24obmV3IHhudChDKSxyLmkpLEUuYS5nYygpPT0wKWJyZWFrO3IuZT1FfWZvcihxTyh0aGlzLmIpLFgwKHRoaXMuYiwoUE4oKSxXVyksKGJfKCkscUIpKSxYMCh0aGlzLmIsWVcsci5nKSxYMCh0aGlzLmIsWFcsKHJxKCksbWdlKSksdGhpcy5hPWJQKHRoaXMuYixyKSx6PW5ldyBHKHRoaXMuYSk7ei5hPHouYy5jLmxlbmd0aDspQj1sKHJlKHopLDQ3KSxCLktmKHIsbi5laCgxKSk7bThuKGEsciksTD1SdChCdChRKHIsKHBFKCksVl9lKSkpKSwrK299QXZ0KGEsciksbi5WZygpfSxJKGU0LCJPdmVybGFwUmVtb3ZhbExheW91dFByb3ZpZGVyIiwxMTE1KSxEKDExMTYsMSx7fSxUWGUpLEkoZTQsIk92ZXJsYXBSZW1vdmFsTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZSIsMTExNiksRCg0NDQsMjIsezM6MSwzNDoxLDIyOjEsNDQ0OjF9LCRzZSk7dmFyIFdXLFlXLFhXLHBnZT1GcihlNCwiU1BPckVQaGFzZXMiLDQ0NCxIcix1Ym4sTDFuKSxWQ3Q7RCgxMjE5LDEse30sYlplKSxJKGU0LCJTaHJpbmtUcmVlIiwxMjE5KSxEKDExMTcsMjA1LHR2LHZKZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGc7UDEodCwoWU4oKSxKVykpJiYoZz1laShhdCh0LEpXKSksbz1pbGUoaEUoKSxnKSxvJiYoZj1sKEdPKG8uZiksMjA1KSxmLnJmKHQsbi5laCgxKSkpKSxhPW5ldyBKN2Uscj1wd3QoYSx0KSxOVG4odGhpcy5hLHIsbi5laCgxKSksQXZ0KGEscil9LEkoZTQsIlNocmlua1RyZWVMYXlvdXRQcm92aWRlciIsMTExNyksRCgzMDYsMTM3LHszOjEsMzA2OjEsOTY6MSwxMzc6MX0sY290KSxoLmM9ITEsSSgib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5ncmFwaCIsIkdyYXBoIiwzMDYpLEQoNDkwLDIyLHszOjEsMzQ6MSwyMjoxLDQ5MDoxLDE4ODoxLDE5NjoxfSxkZXQpLGguZGc9ZnVuY3Rpb24oKXtyZXR1cm4gRTB0KHRoaXMpfSxoLnFnPWZ1bmN0aW9uKCl7cmV0dXJuIEUwdCh0aGlzKX07dmFyIGJnZSx3T2U9RnIodDQsVEVlLDQ5MCxIcixycG4sQTFuKSxVQ3Q7RCg1NTgsMjIsezM6MSwzNDoxLDIyOjEsNTU4OjEsMTg4OjEsMTk2OjF9LGRydCksaC5kZz1mdW5jdGlvbigpe3JldHVybiBuZXcgdSR9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUkfTt2YXIgbWdlLEdDdD1Gcih0NCwiT3ZlcmxhcFJlbW92YWxTdHJhdGVneSIsNTU4LEhyLGlwbixNMW4pLEtDdDtEKDQzOCwyMix7MzoxLDM0OjEsMjI6MSw0Mzg6MX0sWTNlKTt2YXIgUVcsdmdlLHlPZT1Gcih0NCwiUm9vdFNlbGVjdGlvbiIsNDM4LEhyLGkybixEMW4pLFdDdDtEKDMyNCwyMix7MzoxLDM0OjEsMjI6MSwzMjQ6MX0scE8pO3ZhciB4T2Usd2dlLHlnZSxrT2UsRU9lLFRPZT1Gcih0NCwiU3Bhbm5pbmdUcmVlQ29zdEZ1bmN0aW9uIiwzMjQsSHIsV21uLEkxbiksWUN0O0QoMTAxNCwxLFBmLGNpZSksaC5oZj1mdW5jdGlvbih0KXtpdnQodCl9O3ZhciBDT2UsU09lLFhDdCxRQ3QsX09lLEFPZSx4Z2Usa2dlLEVnZSxKQ3QsWkN0LEpXO0kodDQsIlNwb3JlQ29tcGFjdGlvbk9wdGlvbnMiLDEwMTQpLEQoMTAxNSwxLHt9LEluZSksaC5zZj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PW5ldyB2SmUsdH0saC50Zj1mdW5jdGlvbih0KXt9LEkodDQsIlNwb3JlQ29tcGFjdGlvbk9wdGlvbnMvU3BvcmVDb21wYWN0aW9uRmFjdG9yeSIsMTAxNSksRCg4NjYsMSxQZix1aWUpLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LE1mZSksIiIpLCJVbmRlcmx5aW5nIExheW91dCBBbGdvcml0aG0iKSwiQSBsYXlvdXQgYWxnb3JpdGhtIHRoYXQgaXMgYXBwbGllZCB0byB0aGUgZ3JhcGggYmVmb3JlIGl0IGlzIGNvbXBhY3RlZC4gSWYgdGhpcyBpcyBudWxsLCBub3RoaW5nIGlzIGFwcGxpZWQgYmVmb3JlIGNvbXBhY3Rpb24uIiksKGcyKCksSjYpKSx6dCksdW4oKHIxKCksUG4pKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsT2ZlKSwic3RydWN0dXJlIiksIlN0cnVjdHVyZSBFeHRyYWN0aW9uIFN0cmF0ZWd5IiksIlRoaXMgb3B0aW9uIGRlZmluZXMgd2hhdCBraW5kIG9mIHRyaWFuZ3VsYXRpb24gb3Igb3RoZXIgcGFydGl0aW9uaW5nIG9mIHRoZSBwbGFuZSBpcyBhcHBsaWVkIHRvIHRoZSB2ZXJ0aWNlcy4iKSxOT2UpLHBzKSwkT2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsR0NlKSxOZmUpLCJUcmVlIENvbnN0cnVjdGlvbiBTdHJhdGVneSIpLCJXaGV0aGVyIGEgbWluaW11bSBzcGFubmluZyB0cmVlIG9yIGEgbWF4aW11bSBzcGFubmluZyB0cmVlIHNob3VsZCBiZSBjb25zdHJ1Y3RlZC4iKSxJT2UpLHBzKSxxT2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsS0NlKSxOZmUpLCJDb3N0IEZ1bmN0aW9uIGZvciBTcGFubmluZyBUcmVlIiksIlRoZSBjb3N0IGZ1bmN0aW9uIGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBzcGFubmluZyB0cmVlLiIpLERPZSkscHMpLFRPZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxEZmUpLE5mZSksIlJvb3Qgbm9kZSBmb3Igc3Bhbm5pbmcgdHJlZSBjb25zdHJ1Y3Rpb24iKSwiVGhlIGlkZW50aWZpZXIgb2YgdGhlIG5vZGUgdGhhdCBpcyBwcmVmZXJyZWQgYXMgdGhlIHJvb3Qgb2YgdGhlIHNwYW5uaW5nIHRyZWUuIElmIHRoaXMgaXMgbnVsbCwgdGhlIGZpcnN0IG5vZGUgaXMgY2hvc2VuLiIpLG51bGwpLEo2KSx6dCksdW4oUG4pKSkpLFFzKHQsRGZlLElmZSxzU3QpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxJZmUpLE5mZSksIlJvb3Qgc2VsZWN0aW9uIGZvciBzcGFubmluZyB0cmVlIiksIlRoaXMgc2V0cyB0aGUgbWV0aG9kIHVzZWQgdG8gc2VsZWN0IGEgcm9vdCBub2RlIGZvciB0aGUgY29uc3RydWN0aW9uIG9mIGEgc3Bhbm5pbmcgdHJlZSIpLE1PZSkscHMpLHlPZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxXQ2UpLENUZSksU3l0KSwiVGhpcyBvcHRpb24gZGVmaW5lcyBob3cgdGhlIGNvbXBhY3Rpb24gaXMgYXBwbGllZC4iKSxMT2UpLHBzKSx3T2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWUNlKSxDVGUpLCJPcnRob2dvbmFsIENvbXBhY3Rpb24iKSwiUmVzdHJpY3RzIHRoZSB0cmFuc2xhdGlvbiBvZiBub2RlcyB0byBvcnRob2dvbmFsIGRpcmVjdGlvbnMgaW4gdGhlIGNvbXBhY3Rpb24gcGhhc2UuIiksKEhuKCksITEpKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWENlKSxMeXQpLCJVcHBlciBsaW1pdCBmb3IgaXRlcmF0aW9ucyBvZiBvdmVybGFwIHJlbW92YWwiKSxudWxsKSxwdCg2NCkpLFRjKSxybyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxRQ2UpLEx5dCksIldoZXRoZXIgdG8gcnVuIGEgc3VwcGxlbWVudGFyeSBzY2FubGluZSBvdmVybGFwIGNoZWNrLiIpLG51bGwpLCEwKSx5YSksTnMpLHVuKFBuKSkpKSxvbXQoKG5ldyBsaWUsdCkpLGl2dCgobmV3IGNpZSx0KSl9O3ZhciBlU3QsTE9lLHRTdCxuU3QsclN0LGlTdCxzU3QsYVN0LE1PZSxvU3QsRE9lLGNTdCxJT2UsT09lLE5PZSxQT2U7SSh0NCwiU3BvcmVNZXRhRGF0YVByb3ZpZGVyIiw4NjYpLEQoMTAxMiwxLFBmLGxpZSksaC5oZj1mdW5jdGlvbih0KXtvbXQodCl9O3ZhciB1U3QsQk9lLEZPZSxST2UsbFN0LGpPZTtJKHQ0LCJTcG9yZU92ZXJsYXBSZW1vdmFsT3B0aW9ucyIsMTAxMiksRCgxMDEzLDEse30sdWgpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgcFplLHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKHQ0LCJTcG9yZU92ZXJsYXBSZW1vdmFsT3B0aW9ucy9TcG9yZU92ZXJsYXBGYWN0b3J5IiwxMDEzKSxEKDUzOSwyMix7MzoxLDM0OjEsMjI6MSw1Mzk6MSwxODg6MSwxOTY6MX0sZ2F0KSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuIFQwdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiBUMHQodGhpcyl9O3ZhciBxQiwkT2U9RnIodDQsIlN0cnVjdHVyZUV4dHJhY3Rpb25TdHJhdGVneSIsNTM5LEhyLHNwbixPMW4pLGhTdDtEKDQzNywyMix7MzoxLDM0OjEsMjI6MSw0Mzc6MSwxODg6MSwxOTY6MX0sWDNlKSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuIFQxdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiBUMXQodGhpcyl9O3ZhciB6T2UsWlcscU9lPUZyKHQ0LCJUcmVlQ29uc3RydWN0aW9uU3RyYXRlZ3kiLDQzNyxIcixzMm4sTjFuKSxmU3Q7RCgxNDYzLDEsVW8sZ2wpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzMDYpLG5ldyBYc30saC5LZj1mdW5jdGlvbih0LG4pe3g4bihsKHQsMzA2KSxuKX0sSShNeXQsIkRlbGF1bmF5VHJpYW5ndWxhdGlvblBoYXNlIiwxNDYzKSxEKDE0NjQsMSxmcixDWGUpLGguQ2Q9ZnVuY3Rpb24odCl7dnQodGhpcy5hLGwodCw2OCkuYSl9LEkoTXl0LCJEZWxhdW5heVRyaWFuZ3VsYXRpb25QaGFzZS9sYW1iZGEkMCRUeXBlIiwxNDY0KSxEKDc5NCwxLFVvLEh3ZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDMwNiksbmV3IFhzfSxoLktmPWZ1bmN0aW9uKHQsbil7dGhpcy5KZyhsKHQsMzA2KSxuKX0saC5KZz1mdW5jdGlvbih0LG4pe3ZhciByLGEsbztuLlVnKCJNaW5pbXVtIHNwYW5uaW5nIHRyZWUgY29uc3RydWN0aW9uIiwxKSx0LmQ/YT10LmQuYTphPWwoanQodC5pLDApLDY4KS5hLFJ0KEJ0KFEodCwocEUoKSxqTCkpKSk/bz1FbGUodC5lLGEsKHI9dC5iLHIpKTpvPUVsZSh0LmUsYSx0LmIpLGEwdCh0aGlzLG8sdCksbi5WZygpfSxJKFBmZSwiTWluU1RQaGFzZSIsNzk0KSxEKDE0NjYsNzk0LFVvLHJKZSksaC5KZz1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmO24uVWcoIk1heGltdW0gc3Bhbm5pbmcgdHJlZSBjb25zdHJ1Y3Rpb24iLDEpLHI9bmV3IFNYZSh0KSx0LmQ/bz10LmQuYzpvPWwoanQodC5pLDApLDY4KS5jLFJ0KEJ0KFEodCwocEUoKSxqTCkpKSk/Zj1FbGUodC5lLG8sKGE9cixhKSk6Zj1FbGUodC5lLG8sciksYTB0KHRoaXMsZix0KSxuLlZnKCl9LEkoUGZlLCJNYXhTVFBoYXNlIiwxNDY2KSxEKDE0NjcsMSx7fSxTWGUpLGguYWY9ZnVuY3Rpb24odCl7cmV0dXJuIHZsbih0aGlzLmEsdCl9LEkoUGZlLCJNYXhTVFBoYXNlL2xhbWJkYSQwJFR5cGUiLDE0NjcpLEQoMTQ2NSwxLGZyLF9YZSksaC5DZD1mdW5jdGlvbih0KXtsaG4odGhpcy5hLGwodCw2OCkpfSxJKFBmZSwiTWluU1RQaGFzZS9sYW1iZGEkMCRUeXBlIiwxNDY1KSxEKDc5NiwxLFVvLHUkKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzA2KSxuZXcgWHN9LGguS2Y9ZnVuY3Rpb24odCxuKXtCeG4odGhpcyxsKHQsMzA2KSxuKX0saC5hPSExLEkoQmZlLCJHcm93VHJlZVBoYXNlIiw3OTYpLEQoNzk3LDEsZnIseDRlKSxoLkNkPWZ1bmN0aW9uKHQpe0ozbih0aGlzLmEsdGhpcy5iLHRoaXMuYyxsKHQsMjI1KSl9LEkoQmZlLCJHcm93VHJlZVBoYXNlL2xhbWJkYSQwJFR5cGUiLDc5NyksRCgxNDY4LDEsVW8sT25lKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzA2KSxuZXcgWHN9LGguS2Y9ZnVuY3Rpb24odCxuKXtWNm4odGhpcyxsKHQsMzA2KSxuKX0sSShCZmUsIlNocmlua1RyZWVDb21wYWN0aW9uUGhhc2UiLDE0NjgpLEQoNzk1LDEsZnIsazRlKSxoLkNkPWZ1bmN0aW9uKHQpe0RFbih0aGlzLmEsdGhpcy5iLHRoaXMuYyxsKHQsMjI1KSl9LEkoQmZlLCJTaHJpbmtUcmVlQ29tcGFjdGlvblBoYXNlL2xhbWJkYSQwJFR5cGUiLDc5NSk7dmFyIEhPZT1rcyhVYywiSUdyYXBoRWxlbWVudFZpc2l0b3IiKTtEKDg3MiwxLHs1MzY6MX0sS290KSxoLktnPWZ1bmN0aW9uKHQpe3ZhciBuO249UlNuKHRoaXMsdCkscGMobixsKGNyKHRoaXMuYix0KSw5NikpLE9Ubih0aGlzLHQsbil9O3ZhciBkU3QsZ1N0O0kodjYsIkxheW91dENvbmZpZ3VyYXRvciIsODcyKTt2YXIgRE9uPWtzKHY2LCJMYXlvdXRDb25maWd1cmF0b3IvSVByb3BlcnR5SG9sZGVyT3B0aW9uRmlsdGVyIik7RCg5NDQsMSx7MjAzMjoxfSxObmUpLGguTGc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gaHgoKSwhdC5wZihuKX0sSSh2NiwiTGF5b3V0Q29uZmlndXJhdG9yL2xhbWJkYSQwJFR5cGUiLDk0NCksRCg5NDMsMSx7ODQ1OjF9LGV5KSxoLk1nPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGh4KCksIXQucGYobil9LEkodjYsIkxheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMSRUeXBlIiw5NDMpLEQoOTQ1LDEsezIwMzI6MX0scDUpLGguTGc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbVplKHQsbil9LEkodjYsIkxheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMiRUeXBlIiw5NDUpLEQoOTQ2LDEsdGksYXR0KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBLZ24odGhpcy5hLHRoaXMuYixsKHQsMjAzMikpfSxJKHY2LCJMYXlvdXRDb25maWd1cmF0b3IvbGFtYmRhJDMkVHlwZSIsOTQ2KSxEKDg2OSwxLHt9LHR5KSxJKHY2LCJSZWN1cnNpdmVHcmFwaExheW91dEVuZ2luZSIsODY5KSxEKDIyNCw2MyxscCxOUWUsVnApLEkodjYsIlVuc3VwcG9ydGVkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiIsMjI0KSxEKDM3MCw2MyxscCxJOCksSSh2NiwiVW5zdXBwb3J0ZWRHcmFwaEV4Y2VwdGlvbiIsMzcwKSxEKDc2MSwxLHt9KSxJKFVjLCJBYnN0cmFjdFJhbmRvbUxpc3RBY2Nlc3NvciIsNzYxKSxEKDQ1MCw3NjEse30sVUEpLGguTmc9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5kPSEwLGguZT0hMCxoLmY9MCxJKHZULCJBbGdvcml0aG1Bc3NlbWJsZXIiLDQ1MCksRCgxMjAwLDEsdGksUnApLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuISFsKHQsMTA2KX0sSSh2VCwiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQwJFR5cGUiLDEyMDApLEQoMTIwMSwxLHt9LEFYZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gT3VuKHRoaXMuYSxsKHQsMTA2KSl9LEkodlQsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMSRUeXBlIiwxMjAxKSxEKDEyMDIsMSx0aSx1OCksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4hIWwodCw4MCl9LEkodlQsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMiRUeXBlIiwxMjAyKSxEKDEyMDMsMSxmcixMWGUpLGguQ2Q9ZnVuY3Rpb24odCl7RGgodGhpcy5hLGwodCw4MCkpfSxJKHZULCJBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDMkVHlwZSIsMTIwMyksRCgxMjA0LDEsZnIsb3R0KSxoLkNkPWZ1bmN0aW9uKHQpe2lmbih0aGlzLmEsdGhpcy5iLGwodCwxOTYpKX0sSSh2VCwiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQ0JFR5cGUiLDEyMDQpLEQoMTM0MywxLGlpLHlJKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIExwbihsKHQsMTk2KSxsKG4sMTk2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2VCwiRW51bUJhc2VkRmFjdG9yeUNvbXBhcmF0b3IiLDEzNDMpLEQoODAsNzYxLHs4MDoxfSxYcyksaC5OZz1mdW5jdGlvbigpe3JldHVybiBuZXcgS3N9LGguYT0wLEkodlQsIkxheW91dFByb2Nlc3NvckNvbmZpZ3VyYXRpb24iLDgwKSxEKDEwMjUsMSx7NTM2OjF9LGhpZSksaC5LZz1mdW5jdGlvbih0KXttQShiU3QsbmV3IE1YZSh0KSl9O3ZhciBwU3QsYlN0LG1TdDtJKE5jLCJEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIiLDEwMjUpLEQoMTAyNiwxLGZyLGwkKSxoLkNkPWZ1bmN0aW9uKHQpe2p2bihsKHQsMTY3KSl9LEkoTmMsIkRlcHJlY2F0ZWRMYXlvdXRPcHRpb25SZXBsYWNlci9sYW1iZGEkMCRUeXBlIiwxMDI2KSxEKDEwMjcsMSxmcixoJCksaC5DZD1mdW5jdGlvbih0KXtUNW4obCh0LDE2NykpfSxJKE5jLCJEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIvbGFtYmRhJDEkVHlwZSIsMTAyNyksRCgxMDI4LDEse30sTVhlKSxoLllkPWZ1bmN0aW9uKHQsbil7cmZuKHRoaXMuYSxsKHQsMTQ5KSxsKG4sNDEpKX0sSShOYywiRGVwcmVjYXRlZExheW91dE9wdGlvblJlcGxhY2VyL2xhbWJkYSQyJFR5cGUiLDEwMjgpLEQoMTQzLDEsezcwMToxLDE0MzoxfSxYbSksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gZzZlKHRoaXMsdCl9LGguT2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlBnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30saC54ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gczIodGhpcy5jKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgQWxnb3JpdGhtOiAiK3RoaXMuY307dmFyIElPbj1JKE5jLCJMYXlvdXRBbGdvcml0aG1EYXRhIiwxNDMpO0QoMjY5LDEse30seDEpLEkoTmMsIkxheW91dEFsZ29yaXRobURhdGEvQnVpbGRlciIsMjY5KSxEKDEwMjksMSx7NTM2OjF9LGYkKSxoLktnPWZ1bmN0aW9uKHQpe0RlKHQsMjA3KSYmIVJ0KEJ0KHQub2YoKHBpKCksclkpKSkpJiZfQW4obCh0LDI3KSl9LEkoTmMsIkxheW91dEFsZ29yaXRobVJlc29sdmVyIiwxMDI5KSxEKDIzMywxLHs3MDE6MSwyMzM6MX0sbngpLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjMzKT92bih0aGlzLmIsbCh0LDIzMykuYik6ITF9LGguT2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLlBnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC54ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gczIodGhpcy5iKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgVHlwZTogIit0aGlzLmJ9LEkoTmMsIkxheW91dENhdGVnb3J5RGF0YSIsMjMzKSxEKDM1NywxLHt9LG55KSxJKE5jLCJMYXlvdXRDYXRlZ29yeURhdGEvQnVpbGRlciIsMzU3KSxEKDg3OSwxLHt9LFhidCk7dmFyIFRnZTtJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UiLDg3OSksRCg4ODAsMSx7fSxKc3QpLEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9SZWdpc3RyeSIsODgwKSxEKDQ4NywxLHs0ODc6MX0sSjkpLEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9SZWdpc3RyeS9UcmlwbGUiLDQ4NyksRCg4ODEsMSxFNixQbmUpLGguUWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFhfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDAkVHlwZSIsODgxKSxEKDg4MiwxLG40LHhJKSxoLlJnPWZ1bmN0aW9uKHQpe3JldHVybiBKYShsKHQsOCkpfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEkVHlwZSIsODgyKSxEKDg5MSwxLEU2LGw4KSxoLlFnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBidH0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMCRUeXBlIiw4OTEpLEQoODkyLDEsbjQsVzIpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBPbChsKHQsMTMpKX0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMSRUeXBlIiw4OTIpLEQoODkzLDEsRTYsZCQpLGguUWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG9zfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEyJFR5cGUiLDg5MyksRCg4OTQsMSxuNCxnJCksaC5SZz1mdW5jdGlvbih0KXtyZXR1cm4gUE8obCh0LDY3KSl9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTMkVHlwZSIsODk0KSxEKDg5NSwxLEU2LHAkKSxoLlFnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLc30sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNCRUeXBlIiw4OTUpLEQoODk2LDEsbjQsQm5lKSxoLlJnPWZ1bmN0aW9uKHQpe3JldHVybiBMSChsKHQsNDkpKX0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNSRUeXBlIiw4OTYpLEQoODk3LDEsRTYsaDgpLGguUWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJkfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE2JFR5cGUiLDg5NyksRCg4OTgsMSxuNCxyeSksaC5SZz1mdW5jdGlvbih0KXtyZXR1cm4gSEgobCh0LDQ5KSl9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTckVHlwZSIsODk4KSxEKDg5OSwxLEU2LGpwKSxoLlFnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMd2V9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTgkVHlwZSIsODk5KSxEKDkwMCwxLG40LFkyKSxoLlJnPWZ1bmN0aW9uKHQpe3JldHVybiBfaXQobCh0LDE1NykpfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE5JFR5cGUiLDkwMCksRCg4ODMsMSxFNixiNSksaC5RZz1mdW5jdGlvbigpe3JldHVybiBuZXcgYmx9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMiRUeXBlIiw4ODMpLEQoODg0LDEsbjQsWjkpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHeihsKHQsNzUpKX0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQzJFR5cGUiLDg4NCksRCg4ODUsMSxFNixfUyksaC5RZz1mdW5jdGlvbigpe3JldHVybiBuZXcgc199LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNCRUeXBlIiw4ODUpLEQoODg2LDEsbjQsa0kpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4YWUobCh0LDE0MCkpfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDUkVHlwZSIsODg2KSxEKDg4NywxLEU2LEZuZSksaC5RZz1mdW5jdGlvbigpe3JldHVybiBuZXcgQTh9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNiRUeXBlIiw4ODcpLEQoODg4LDEsbjQsUm5lKSxoLlJnPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUzRlKGwodCwxMDcpKX0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ3JFR5cGUiLDg4OCksRCg4ODksMSxFNixiJCksaC5RZz1mdW5jdGlvbigpe3JldHVybiBuZXcgRUl9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkOCRUeXBlIiw4ODkpLEQoODkwLDEsbjQsbSQpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYbHQobCh0LDM4NSkpfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDkkVHlwZSIsODkwKTt2YXIgQ2dlPWtzKElQLCJJUHJvcGVydHkiKTtEKDIzLDEsezM0OjEsNzAxOjEsMjM6MSwxNDk6MX0sWHQpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFRobih0aGlzLGwodCwxNDkpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyMyk/dm4odGhpcy5mLGwodCwyMykuZik6RGUodCwxNDkpJiZ2bih0aGlzLmYsbCh0LDE0OSkuUGcoKSl9LGguU2c9ZnVuY3Rpb24oKXt2YXIgdDtpZihEZSh0aGlzLmIsNCkpe2lmKHQ9SDhlKHRoaXMuYiksdD09bnVsbCl0aHJvdyB1ZShuZXcgbmMoTnl0K3RoaXMuZisiJy4gTWFrZSBzdXJlIGl0J3MgdHlwZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlICIrKEdnKGhGKSxoRi5rKStKQ2UpKTtyZXR1cm4gdH1lbHNlIHJldHVybiB0aGlzLmJ9LGguT2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLlBnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC54ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gczIodGhpcy5mKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgT3B0aW9uOiAiK3RoaXMuZn0sSShOYywiTGF5b3V0T3B0aW9uRGF0YSIsMjMpLEQoMjQsMSx7fSxVdCksSShOYywiTGF5b3V0T3B0aW9uRGF0YS9CdWlsZGVyIiwyNCksRCgxNzAsMjIsezM6MSwzNDoxLDIyOjEsMTcwOjF9LGJPKTt2YXIgemQsUzIsaGEsUG4seXYseGc9RnIoTmMsIkxheW91dE9wdGlvbkRhdGEvVGFyZ2V0IiwxNzAsSHIsWW1uLFAxbiksdlN0O0QoMjg1LDIyLHszOjEsMzQ6MSwyMjoxLDI4NToxfSxGOCk7dmFyIHlhLGZvLHBzLHQ5LFRjLFgxLEo2LFZPZSx3U3Q9RnIoTmMsIkxheW91dE9wdGlvbkRhdGEvVHlwZSIsMjg1LEhyLGJ3bixCMW4pLHlTdCxrTSxVT2U7RCgxMTYsMSx7MTE2OjF9LCQ4LGVmLE1IKSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PT1udWxsfHwhRGUodCwxMTYpPyExOihuPWwodCwxMTYpLEpjKHRoaXMuYyxuLmMpJiZKYyh0aGlzLmQsbi5kKSYmSmModGhpcy5iLG4uYikmJkpjKHRoaXMuYSxuLmEpKX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBNTihoZShsZSh3YSwxKSxSbiwxLDUsW3RoaXMuYyx0aGlzLmQsdGhpcy5iLHRoaXMuYV0pKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJSZWN0W3g9Iit0aGlzLmMrIix5PSIrdGhpcy5kKyIsdz0iK3RoaXMuYisiLGg9Iit0aGlzLmErIl0ifSxoLmE9MCxoLmI9MCxoLmM9MCxoLmQ9MCxJKCRQLCJFbGtSZWN0YW5nbGUiLDExNiksRCg4LDEsezM6MSw0OjEsODoxLDQyMzoxfSxxYSxib2UsbHQsRW8pLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHVmdCh0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGo4KHRoaXMuYSkrazduKGo4KHRoaXMuYikpfSxoLmNnPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO2ZvcihhPTA7YTx0Lmxlbmd0aCYmSzB0KChYbihhLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoYSkpLE8zdCk7KSsrYTtmb3Iobj10Lmxlbmd0aDtuPjAmJkswdCgoWG4obi0xLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobi0xKSksTjN0KTspLS1uO2lmKGE+PW4pdGhyb3cgdWUobmV3IFluKCJUaGUgZ2l2ZW4gc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gYW55IG51bWJlcnMuIikpO2lmKG89R3koKEdhKGEsbix0Lmxlbmd0aCksdC5zdWJzdHIoYSxuLWEpKSxgLHw7fFxyfApgKSxvLmxlbmd0aCE9Mil0aHJvdyB1ZShuZXcgWW4oIkV4YWN0bHkgdHdvIG51bWJlcnMgYXJlIGV4cGVjdGVkLCAiK28ubGVuZ3RoKyIgd2VyZSBmb3VuZC4iKSk7dHJ5e3RoaXMuYT1qeSgkeShvWzBdKSksdGhpcy5iPWp5KCR5KG9bMV0pKX1jYXRjaChmKXt0aHJvdyBmPWJzKGYpLERlKGYsMTMwKT8ocj1mLHVlKG5ldyBZbihQM3QrcikpKTp1ZShmKX19LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hKyIsIit0aGlzLmIrIikifSxoLmE9MCxoLmI9MDt2YXIgRWE9SSgkUCwiS1ZlY3RvciIsOCk7RCg3NSw2Nyx7MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDY3OjEsMTU6MSw3NToxLDQyMzoxfSxibCxHeixmcnQpLGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gT3luKHRoaXMpfSxoLmNnPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZzthPUd5KHQsYCx8O3xcXCh8XFwpfFxcW3xcXF18XFx7fFxcfXwgfAl8CmApLENoKHRoaXMpO3RyeXtmb3Iocj0wLGY9MCxvPTAsZz0wO3I8YS5sZW5ndGg7KWFbcl0hPW51bGwmJiR5KGFbcl0pLmxlbmd0aD4wJiYoZiUyPT0wP289ankoYVtyXSk6Zz1qeShhW3JdKSxmPjAmJmYlMiE9MCYmdWkodGhpcyxuZXcgbHQobyxnKSksKytmKSwrK3J9Y2F0Y2godyl7dGhyb3cgdz1icyh3KSxEZSh3LDEzMCk/KG49dyx1ZShuZXcgWW4oIlRoZSBnaXZlbiBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdCBmb3IgdmVjdG9ycy4iK24pKSk6dWUodyl9fSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQsbixyO2Zvcih0PW5ldyBUaCgiKCIpLG49UnIodGhpcywwKTtuLmIhPW4uZC5jOylyPWwoQnIobiksOCksaGkodCxyLmErIiwiK3IuYiksbi5iIT1uLmQuYyYmKHQuYSs9IjsgIik7cmV0dXJuKHQuYSs9IikiLHQpLmF9O3ZhciBHT2U9SSgkUCwiS1ZlY3RvckNoYWluIiw3NSk7RCgyNTUsMjIsezM6MSwzNDoxLDIyOjEsMjU1OjF9LF9fKTt2YXIgU2dlLGVZLHRZLEhCLFZCLG5ZLEtPZT1GcihuaCwiQWxpZ25tZW50IiwyNTUsSHIsTXZuLEYxbikseFN0O0QoOTkxLDEsUGYsZmllKSxoLmhmPWZ1bmN0aW9uKHQpe3htdCh0KX07dmFyIFdPZSxfZ2Usa1N0LFlPZSxYT2UsRVN0LFFPZSxUU3QsQ1N0LEpPZSxaT2UsU1N0O0kobmgsIkJveExheW91dGVyT3B0aW9ucyIsOTkxKSxEKDk5MiwxLHt9LGVrKSxoLnNmPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bmV3IGpuZSx0fSxoLnRmPWZ1bmN0aW9uKHQpe30sSShuaCwiQm94TGF5b3V0ZXJPcHRpb25zL0JveEZhY3RvcnkiLDk5MiksRCgyOTgsMjIsezM6MSwzNDoxLDIyOjEsMjk4OjF9LEFfKTt2YXIgRU0sQWdlLFRNLENNLFNNLExnZSxNZ2U9RnIobmgsIkNvbnRlbnRBbGlnbm1lbnQiLDI5OCxIcixEdm4sUjFuKSxfU3Q7RCg2OTksMSxQZix1eiksaC5oZj1mdW5jdGlvbih0KXtzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsQnl0KSwiIiksIkxheW91dCBBbGdvcml0aG0iKSwiU2VsZWN0IGEgc3BlY2lmaWMgbGF5b3V0IGFsZ29yaXRobS4iKSwoZzIoKSxKNikpLHp0KSx1bigocjEoKSxQbikpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxGeXQpLCIiKSwiUmVzb2x2ZWQgTGF5b3V0IEFsZ29yaXRobSIpLCJNZXRhIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCBhbGdvcml0aG0uIiksWDEpLElPbiksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxxVGUpLCIiKSwiQWxpZ25tZW50IiksIkFsaWdubWVudCBvZiB0aGUgc2VsZWN0ZWQgbm9kZSByZWxhdGl2ZSB0byBvdGhlciBub2RlczsgdGhlIGV4YWN0IG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUgdXNlZCBhbGdvcml0aG0uIiksZU5lKSxwcyksS09lKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LE94KSwiIiksIkFzcGVjdCBSYXRpbyIpLCJUaGUgZGVzaXJlZCBhc3BlY3QgcmF0aW8gb2YgdGhlIGRyYXdpbmcsIHRoYXQgaXMgdGhlIHF1b3RpZW50IG9mIHdpZHRoIGJ5IGhlaWdodC4iKSxmbyksdGEpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsdFNlKSwiIiksIkJlbmQgUG9pbnRzIiksIkEgZml4ZWQgbGlzdCBvZiBiZW5kIHBvaW50cyBmb3IgdGhlIGVkZ2UuIFRoaXMgaXMgdXNlZCBieSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIHRvIHNwZWNpZnkgYSBwcmUtZGVmaW5lZCByb3V0aW5nIGZvciBhbiBlZGdlLiBUaGUgdmVjdG9yIGNoYWluIG11c3QgaW5jbHVkZSB0aGUgc291cmNlIHBvaW50LCBhbnkgYmVuZCBwb2ludHMsIGFuZCB0aGUgdGFyZ2V0IHBvaW50LCBzbyBpdCBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIHBvaW50cy4iKSxYMSksR09lKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFNHKSwiIiksIkNvbnRlbnQgQWxpZ25tZW50IiksIlNwZWNpZmllcyBob3cgdGhlIGNvbnRlbnQgb2YgYSBub2RlIGFyZSBhbGlnbmVkLiBFYWNoIG5vZGUgY2FuIGluZGl2aWR1YWxseSBjb250cm9sIHRoZSBhbGlnbm1lbnQgb2YgaXRzIGNvbnRlbnRzLiBJLmUuIGlmIGEgbm9kZSBzaG91bGQgYmUgYWxpZ25lZCB0b3AgbGVmdCBpbiBpdHMgcGFyZW50IG5vZGUsIHRoZSBwYXJlbnQgbm9kZSBzaG91bGQgc3BlY2lmeSB0aGF0IG9wdGlvbi4iKSxuTmUpLHQ5KSxNZ2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsVlApLCIiKSwiRGVidWcgTW9kZSIpLCJXaGV0aGVyIGFkZGl0aW9uYWwgZGVidWcgaW5mb3JtYXRpb24gc2hhbGwgYmUgZ2VuZXJhdGVkLiIpLChIbigpLCExKSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGdmZSksIiIpLGtFZSksIk92ZXJhbGwgZGlyZWN0aW9uIG9mIGVkZ2VzOiBob3Jpem9udGFsIChyaWdodCAvIGxlZnQpIG9yIHZlcnRpY2FsIChkb3duIC8gdXApLiIpLHJOZSkscHMpLExNKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEhQKSwiIiksIkVkZ2UgUm91dGluZyIpLCJXaGF0IGtpbmQgb2YgZWRnZSByb3V0aW5nIHN0eWxlIHNob3VsZCBiZSBhcHBsaWVkIGZvciB0aGUgY29udGVudCBvZiBhIHBhcmVudCBub2RlLiBBbGdvcml0aG1zIG1heSBhbHNvIHNldCB0aGlzIG9wdGlvbiB0byBzaW5nbGUgZWRnZXMgaW4gb3JkZXIgdG8gbWFyayB0aGVtIGFzIHNwbGluZXMuIFRoZSBiZW5kIHBvaW50IGxpc3Qgb2YgZWRnZXMgd2l0aCB0aGlzIG9wdGlvbiBzZXQgdG8gU1BMSU5FUyBtdXN0IGJlIGludGVycHJldGVkIGFzIGNvbnRyb2wgcG9pbnRzIGZvciBhIHBpZWNld2lzZSBjdWJpYyBzcGxpbmUuIiksYU5lKSxwcyksVmdlKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFpDZSksIiIpLCJFeHBhbmQgTm9kZXMiKSwiSWYgYWN0aXZlLCBub2RlcyBhcmUgZXhwYW5kZWQgdG8gZmlsbCB0aGUgYXJlYSBvZiB0aGVpciBwYXJlbnQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxDRyksIiIpLCJIaWVyYXJjaHkgSGFuZGxpbmciKSwiRGV0ZXJtaW5lcyB3aGV0aGVyIHNlcGFyYXRlIGxheW91dCBydW5zIGFyZSB0cmlnZ2VyZWQgZm9yIGRpZmZlcmVudCBjb21wb3VuZCBub2RlcyBpbiBhIGhpZXJhcmNoaWNhbCBncmFwaC4gU2V0dGluZyBhIG5vZGUncyBoaWVyYXJjaHkgaGFuZGxpbmcgdG8gYElOQ0xVREVfQ0hJTERSRU5gIHdpbGwgbGF5IG91dCB0aGF0IG5vZGUgYW5kIGFsbCBvZiBpdHMgZGVzY2VuZGFudHMgaW4gYSBzaW5nbGUgbGF5b3V0IHJ1biwgdW50aWwgYSBkZXNjZW5kYW50IGlzIGVuY291bnRlcmVkIHdoaWNoIGhhcyBpdHMgaGllcmFyY2h5IGhhbmRsaW5nIHNldCB0byBgU0VQQVJBVEVfQ0hJTERSRU5gLiBJbiBnZW5lcmFsLCBgU0VQQVJBVEVfQ0hJTERSRU5gIHdpbGwgZW5zdXJlIHRoYXQgYSBuZXcgbGF5b3V0IHJ1biBpcyB0cmlnZ2VyZWQgZm9yIGEgbm9kZSB3aXRoIHRoYXQgc2V0dGluZy4gSW5jbHVkaW5nIG11bHRpcGxlIGxldmVscyBvZiBoaWVyYXJjaHkgaW4gYSBzaW5nbGUgbGF5b3V0IHJ1biBtYXkgYWxsb3cgY3Jvc3MtaGllcmFyY2hpY2FsIGVkZ2VzIHRvIGJlIGxhaWQgb3V0IHByb3Blcmx5LiBJZiB0aGUgcm9vdCBub2RlIGlzIHNldCB0byBgSU5IRVJJVGAgKG9yIG5vdCBzZXQgYXQgYWxsKSwgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgYFNFUEFSQVRFX0NISUxEUkVOYC4iKSx1TmUpLHBzKSxZTmUpLHJzKFBuLGhlKGxlKHhnLDEpLGl0LDE3MCwwLFtoYV0pKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWHcpLCIiKSwiUGFkZGluZyIpLCJUaGUgcGFkZGluZyB0byBiZSBsZWZ0IHRvIGEgcGFyZW50IGVsZW1lbnQncyBib3JkZXIgd2hlbiBwbGFjaW5nIGNoaWxkIGVsZW1lbnRzLiBUaGlzIGNhbiBhbHNvIHNlcnZlIGFzIGFuIG91dHB1dCBvcHRpb24gb2YgYSBsYXlvdXQgYWxnb3JpdGhtIGlmIG5vZGUgc2l6ZSBjYWxjdWxhdGlvbiBpcyBzZXR1cCBhcHByb3ByaWF0ZWx5LiIpLHZOZSksWDEpLHdBZSkscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW2hhXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxoTCksIiIpLCJJbnRlcmFjdGl2ZSIpLCJXaGV0aGVyIHRoZSBhbGdvcml0aG0gc2hvdWxkIGJlIHJ1biBpbiBpbnRlcmFjdGl2ZSBtb2RlIGZvciB0aGUgY29udGVudCBvZiBhIHBhcmVudCBub2RlLiBXaGF0IHRoaXMgbWVhbnMgZXhhY3RseSBkZXBlbmRzIG9uIGhvdyB0aGUgc3BlY2lmaWMgYWxnb3JpdGhtIGludGVycHJldHMgdGhpcyBvcHRpb24uIFVzdWFsbHkgaW4gdGhlIGludGVyYWN0aXZlIG1vZGUgYWxnb3JpdGhtcyB0cnkgdG8gbW9kaWZ5IHRoZSBjdXJyZW50IGxheW91dCBhcyBsaXR0bGUgYXMgcG9zc2libGUuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxBRyksIiIpLCJpbnRlcmFjdGl2ZSBMYXlvdXQiKSwiV2hldGhlciB0aGUgZ3JhcGggc2hvdWxkIGJlIGNoYW5nZWFibGUgaW50ZXJhY3RpdmVseSBhbmQgYnkgc2V0dGluZyBjb25zdHJhaW50cyIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZkwpLCIiKSwiT21pdCBOb2RlIE1pY3JvIExheW91dCIpLCJOb2RlIG1pY3JvIGxheW91dCBjb21wcmlzZXMgdGhlIGNvbXB1dGF0aW9uIG9mIG5vZGUgZGltZW5zaW9ucyAoaWYgcmVxdWVzdGVkKSwgdGhlIHBsYWNlbWVudCBvZiBwb3J0cyBhbmQgdGhlaXIgbGFiZWxzLCBhbmQgdGhlIHBsYWNlbWVudCBvZiBub2RlIGxhYmVscy4gVGhlIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgaW5kZXBlbmRlbnQgb2YgYW55IHNwZWNpZmljIGxheW91dCBhbGdvcml0aG0gYW5kIHNob3VsZG4ndCBoYXZlIGFueSBuZWdhdGl2ZSBpbXBhY3Qgb24gdGhlIGxheW91dCBhbGdvcml0aG0ncyBwZXJmb3JtYW5jZSBpdHNlbGYuIFlldCwgaWYgYW55IHVuZm9yZXNlZW4gYmVoYXZpb3Igb2NjdXJzLCB0aGlzIG9wdGlvbiBhbGxvd3MgdG8gZGVhY3RpdmF0ZSB0aGUgbWljcm8gbGF5b3V0LiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsTmhlKSwiIiksIlBvcnQgQ29uc3RyYWludHMiKSwiRGVmaW5lcyBjb25zdHJhaW50cyBvZiB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcnRzIG9mIGEgbm9kZS4iKSxFTmUpLHBzKSxKTmUpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsX0cpLCIiKSwiUG9zaXRpb24iKSwiVGhlIHBvc2l0aW9uIG9mIGEgbm9kZSwgcG9ydCwgb3IgbGFiZWwuIFRoaXMgaXMgdXNlZCBieSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIHRvIHNwZWNpZnkgYSBwcmUtZGVmaW5lZCBwb3NpdGlvbi4iKSxYMSksRWEpLHJzKGhhLGhlKGxlKHhnLDEpLGl0LDE3MCwwLFt5dixTMl0pKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsTlApLCIiKSwiUHJpb3JpdHkiKSwiRGVmaW5lcyB0aGUgcHJpb3JpdHkgb2YgYW4gb2JqZWN0OyBpdHMgbWVhbmluZyBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyBsYXlvdXQgYWxnb3JpdGhtIGFuZCB0aGUgY29udGV4dCB3aGVyZSBpdCBpcyB1c2VkLiIpLFRjKSxybykscnMoaGEsaGUobGUoeGcsMSksaXQsMTcwLDAsW3pkXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxvRyksIiIpLCJSYW5kb21pemF0aW9uIFNlZWQiKSwiU2VlZCB1c2VkIGZvciBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3JzIHRvIGNvbnRyb2wgdGhlIGxheW91dCBhbGdvcml0aG0uIElmIHRoZSB2YWx1ZSBpcyAwLCB0aGUgc2VlZCBzaGFsbCBiZSBkZXRlcm1pbmVkIHBzZXVkby1yYW5kb21seSAoZS5nLiBmcm9tIHRoZSBzeXN0ZW0gdGltZSkuIiksVGMpLHJvKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LGxMKSwiIiksIlNlcGFyYXRlIENvbm5lY3RlZCBDb21wb25lbnRzIiksIldoZXRoZXIgZWFjaCBjb25uZWN0ZWQgY29tcG9uZW50IHNob3VsZCBiZSBwcm9jZXNzZWQgc2VwYXJhdGVseS4iKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWlRlKSwiIiksIkp1bmN0aW9uIFBvaW50cyIpLCJUaGlzIG9wdGlvbiBpcyBub3QgdXNlZCBhcyBvcHRpb24sIGJ1dCBhcyBvdXRwdXQgb2YgdGhlIGxheW91dCBhbGdvcml0aG1zLiBJdCBpcyBhdHRhY2hlZCB0byBlZGdlcyBhbmQgZGV0ZXJtaW5lcyB0aGUgcG9pbnRzIHdoZXJlIGp1bmN0aW9uIHN5bWJvbHMgc2hvdWxkIGJlIGRyYXduIGluIG9yZGVyIHRvIHJlcHJlc2VudCBoeXBlcmVkZ2VzIHdpdGggb3J0aG9nb25hbCByb3V0aW5nLiBXaGV0aGVyIHN1Y2ggcG9pbnRzIGFyZSBjb21wdXRlZCBkZXBlbmRzIG9uIHRoZSBjaG9zZW4gbGF5b3V0IGFsZ29yaXRobSBhbmQgZWRnZSByb3V0aW5nIHN0eWxlLiBUaGUgcG9pbnRzIGFyZSBwdXQgaW50byB0aGUgdmVjdG9yIGNoYWluIHdpdGggbm8gc3BlY2lmaWMgb3JkZXIuIiksbE5lKSxYMSksR09lKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG5DZSksIiIpLCJDb21tZW50IEJveCIpLCJXaGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSByZWdhcmRlZCBhcyBhIGNvbW1lbnQgYm94IGluc3RlYWQgb2YgYSByZWd1bGFyIG5vZGUuIEluIHRoYXQgY2FzZSBpdHMgcGxhY2VtZW50IHNob3VsZCBiZSBzaW1pbGFyIHRvIGhvdyBsYWJlbHMgYXJlIGhhbmRsZWQuIEFueSBlZGdlcyBpbmNpZGVudCB0byBhIGNvbW1lbnQgYm94IHNwZWNpZnkgdG8gd2hpY2ggZ3JhcGggZWxlbWVudHMgdGhlIGNvbW1lbnQgaXMgcmVsYXRlZC4iKSwhMSkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHJDZSksIiIpLCJIeXBlcm5vZGUiKSwiV2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgaGFuZGxlZCBhcyBhIGh5cGVybm9kZS4iKSwhMSkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LHNPbiksIiIpLCJMYWJlbCBNYW5hZ2VyIiksIkxhYmVsIG1hbmFnZXJzIGNhbiBzaG9ydGVuIGxhYmVscyB1cG9uIGEgbGF5b3V0IGFsZ29yaXRobSdzIHJlcXVlc3QuIiksWDEpLEZPbikscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW1MyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxzQ2UpLCIiKSwiTWFyZ2lucyIpLCJNYXJnaW5zIGRlZmluZSBhZGRpdGlvbmFsIHNwYWNlIGFyb3VuZCB0aGUgYWN0dWFsIGJvdW5kcyBvZiBhIGdyYXBoIGVsZW1lbnQuIEZvciBpbnN0YW5jZSwgcG9ydHMgb3IgbGFiZWxzIGJlaW5nIHBsYWNlZCBvbiB0aGUgb3V0c2lkZSBvZiBhIG5vZGUncyBib3JkZXIgbWlnaHQgaW50cm9kdWNlIHN1Y2ggYSBtYXJnaW4uIFRoZSBtYXJnaW4gaXMgdXNlZCB0byBndWFyYW50ZWUgbm9uLW92ZXJsYXAgb2Ygb3RoZXIgZ3JhcGggZWxlbWVudHMgd2l0aCB0aG9zZSBwb3J0cyBvciBsYWJlbHMuIiksaE5lKSxYMSksdkFlKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LCRUZSksIiIpLCJObyBMYXlvdXQiKSwiTm8gbGF5b3V0IGlzIGRvbmUgZm9yIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQuIFRoaXMgaXMgdXNlZCB0byBtYXJrIHBhcnRzIG9mIGEgZGlhZ3JhbSB0byBhdm9pZCB0aGVpciBpbmNsdXNpb24gaW4gdGhlIGxheW91dCBncmFwaCwgb3IgdG8gbWFyayBwYXJ0cyBvZiB0aGUgbGF5b3V0IGdyYXBoIHRvIHByZXZlbnQgbGF5b3V0IGVuZ2luZXMgZnJvbSBwcm9jZXNzaW5nIHRoZW0uIElmIHlvdSB3aXNoIHRvIGV4Y2x1ZGUgdGhlIGNvbnRlbnRzIG9mIGEgY29tcG91bmQgbm9kZSBmcm9tIGF1dG9tYXRpYyBsYXlvdXQsIHdoaWxlIHRoZSBub2RlIGl0c2VsZiBpcyBzdGlsbCBjb25zaWRlcmVkIG9uIGl0cyBvd24gbGF5ZXIsIHVzZSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIGZvciB0aGF0IG5vZGUuIiksITEpLHlhKSxOcykscnMoaGEsaGUobGUoeGcsMSksaXQsMTcwLDAsW3pkLHl2LFMyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxSeXQpLCIiKSwiU2NhbGUgRmFjdG9yIiksIlRoZSBzY2FsaW5nIGZhY3RvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUgaW4gcmVjdXJzaXZlIGxheW91dC4gSXQgY2F1c2VzIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUncyBzaXplIHRvIGJlIGFkanVzdGVkLCBhbmQgaXRzIHBvcnRzIGFuZCBsYWJlbHMgdG8gYmUgc2l6ZWQgYW5kIHBsYWNlZCBhY2NvcmRpbmdseSBhZnRlciB0aGUgbGF5b3V0IG9mIHRoYXQgbm9kZSBoYXMgYmVlbiBkZXRlcm1pbmVkIChhbmQgYmVmb3JlIHRoZSBub2RlIGl0c2VsZiBhbmQgaXRzIHNpYmxpbmdzIGFyZSBhcnJhbmdlZCkuIFRoZSBzY2FsaW5nIGlzIG5vdCByZXZlcnRlZCBhZnRlcndhcmRzLCBzbyB0aGUgcmVzdWx0aW5nIGxheW91dCBncmFwaCBjb250YWlucyB0aGUgYWRqdXN0ZWQgc2l6ZSBhbmQgcG9zaXRpb24gZGF0YS4gVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgaWYgJ0xheW91dCBIaWVyYXJjaHknIGlzIHNldC4iKSwxKSxmbyksdGEpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsanl0KSwiIiksIkNoaWxkIEFyZWEgV2lkdGgiKSwiVGhlIHdpZHRoIG9mIHRoZSBhcmVhIG9jY3VwaWVkIGJ5IHRoZSBsYWlkIG91dCBjaGlsZHJlbiBvZiBhIG5vZGUuIiksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LCR5dCksIiIpLCJDaGlsZCBBcmVhIEhlaWdodCIpLCJUaGUgaGVpZ2h0IG9mIHRoZSBhcmVhIG9jY3VwaWVkIGJ5IHRoZSBsYWlkIG91dCBjaGlsZHJlbiBvZiBhIG5vZGUuIiksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFBQKSwiIiksRHl0KSwiVHVybnMgdG9wZG93biBsYXlvdXQgb24gYW5kIG9mZi4gSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgaGllcmFyY2hpY2FsIGxheW91dCB3aWxsIGJlIGNvbXB1dGVkIGZpcnN0IGZvciB0aGUgcm9vdCBub2RlIGFuZCB0aGVuIGZvciBpdHMgY2hpbGRyZW4gcmVjdXJzaXZlbHkuIExheW91dHMgYXJlIHRoZW4gc2NhbGVkIGRvd24gdG8gZml0IHRoZSBhcmVhIHByb3ZpZGVkIGJ5IHRoZWlyIHBhcmVudHMuIEdyYXBocyBtdXN0IGZvbGxvdyBhIGNlcnRhaW4gc3RydWN0dXJlIGZvciB0b3Bkb3duIGxheW91dCB0byB3b3JrIHByb3Blcmx5LiB7QGxpbmsgVG9wZG93bk5vZGVUeXBlcy5QQVJBTExFTF9OT0RFfSBub2RlcyBtdXN0IGhhdmUgY2hpbGRyZW4gb2YgdHlwZSB7QGxpbmsgVG9wZG93bk5vZGVUeXBlcy5ISUVSQVJDSElDQUxfTk9ERX0gYW5kIG11c3QgZGVmaW5lIHtAbGluayB0b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVXaWR0aH0gYW5kIHtAbGluayB0b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVBc3BlY3RSYXRpb30gZm9yIHRoZWlyIGNoaWxkcmVuLiBGdXJ0aGVybW9yZSB0aGV5IG5lZWQgdG8gYmUgbGFpZCBvdXQgdXNpbmcgYW4gYWxnb3JpdGhtIHRoYXQgaXMgYSB7QGxpbmsgVG9wZG93bkxheW91dFByb3ZpZGVyfS4gSGllcmFyY2hpY2FsIG5vZGVzIGNhbiBhbHNvIGJlIHBhcmVudHMgb2Ygb3RoZXIgaGllcmFyY2hpY2FsIG5vZGVzIGFuZCBjYW4gb3B0aW9uYWxseSB1c2UgYSB7QGxpbmsgVG9wZG93blNpemVBcHByb3hpbWF0b3J9IHRvIGR5bmFtaWNhbGx5IHNldCBzaXplcyBkdXJpbmcgdG9wZG93biBsYXlvdXQuIEluIHRoaXMgY2FzZSB7QGxpbmsgdG9wZG93bi5oaWVyYXJjaGljYWxOb2RlV2lkdGh9IGFuZCB7QGxpbmsgdG9wZG93bi5oaWVyYXJjaGljYWxOb2RlQXNwZWN0UmF0aW99IHNob3VsZCBiZSBzZXQgb24gdGhlIG5vZGUgaXRzZWxmIHJhdGhlciB0aGFuIHRoZSBwYXJlbnQuIFRoZSB2YWx1ZXMgYXJlIHRoZW4gdXNlZCBieSB0aGUgc2l6ZSBhcHByb3hpbWF0b3IgYXMgYmFzZSB2YWx1ZXMuIEhpZXJhcmNoaWNhbCBub2RlcyByZXF1aXJlIHRoZSBsYXlvdXQgb3B0aW9uIHtAbGluayBub2RlU2l6ZS5maXhlZEdyYXBoU2l6ZX0gdG8gYmUgdHJ1ZSB0byBwcmV2ZW50IHRoZSBhbGdvcml0aG0gdXNlZCB0aGVyZSBmcm9tIHJlc2l6aW5nIHRoZSBoaWVyYXJjaGljYWwgbm9kZS4gVGhpcyBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBpZiAnSGllcmFyY2h5IEhhbmRsaW5nJyBpcyBzZXQgdG8gJ0lOQ0xVREVfQ0hJTERSRU4nIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLFFzKHQsUFAsUXcsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHp5dCksIiIpLCJBbmltYXRlIiksIldoZXRoZXIgdGhlIHNoaWZ0IGZyb20gdGhlIG9sZCBsYXlvdXQgdG8gdGhlIG5ldyBjb21wdXRlZCBsYXlvdXQgc2hhbGwgYmUgYW5pbWF0ZWQuIiksITApLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxxeXQpLCIiKSwiQW5pbWF0aW9uIFRpbWUgRmFjdG9yIiksIkZhY3RvciBmb3IgY29tcHV0YXRpb24gb2YgYW5pbWF0aW9uIHRpbWUuIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbG9uZ2VyIHRoZSBhbmltYXRpb24gdGltZS4gSWYgdGhlIHZhbHVlIGlzIDAsIHRoZSByZXN1bHRpbmcgdGltZSBpcyBhbHdheXMgZXF1YWwgdG8gdGhlIG1pbmltdW0gZGVmaW5lZCBieSAnTWluaW1hbCBBbmltYXRpb24gVGltZScuIikscHQoMTAwKSksVGMpLHJvKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEh5dCksIiIpLCJMYXlvdXQgQW5jZXN0b3JzIiksIldoZXRoZXIgdGhlIGhpZXJhcmNoeSBsZXZlbHMgb24gdGhlIHBhdGggZnJvbSB0aGUgc2VsZWN0ZWQgZWxlbWVudCB0byB0aGUgcm9vdCBvZiB0aGUgZGlhZ3JhbSBzaGFsbCBiZSBpbmNsdWRlZCBpbiB0aGUgbGF5b3V0IHByb2Nlc3MuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxWeXQpLCIiKSwiTWF4aW1hbCBBbmltYXRpb24gVGltZSIpLCJUaGUgbWF4aW1hbCB0aW1lIGZvciBhbmltYXRpb25zLCBpbiBtaWxsaXNlY29uZHMuIikscHQoNGUzKSksVGMpLHJvKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFV5dCksIiIpLCJNaW5pbWFsIEFuaW1hdGlvbiBUaW1lIiksIlRoZSBtaW5pbWFsIHRpbWUgZm9yIGFuaW1hdGlvbnMsIGluIG1pbGxpc2Vjb25kcy4iKSxwdCg0MDApKSxUYykscm8pLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsR3l0KSwiIiksIlByb2dyZXNzIEJhciIpLCJXaGV0aGVyIGEgcHJvZ3Jlc3MgYmFyIHNoYWxsIGJlIGRpc3BsYXllZCBkdXJpbmcgbGF5b3V0IGNvbXB1dGF0aW9ucy4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEt5dCksIiIpLCJWYWxpZGF0ZSBHcmFwaCIpLCJXaGV0aGVyIHRoZSBncmFwaCBzaGFsbCBiZSB2YWxpZGF0ZWQgYmVmb3JlIGFueSBsYXlvdXQgYWxnb3JpdGhtIGlzIGFwcGxpZWQuIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYW5kIGF0IGxlYXN0IG9uZSBlcnJvciBpcyBmb3VuZCwgdGhlIGxheW91dCBwcm9jZXNzIGlzIGFib3J0ZWQgYW5kIGEgbWVzc2FnZSBpcyBzaG93biB0byB0aGUgdXNlci4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFd5dCksIiIpLCJWYWxpZGF0ZSBPcHRpb25zIiksIldoZXRoZXIgbGF5b3V0IG9wdGlvbnMgc2hhbGwgYmUgdmFsaWRhdGVkIGJlZm9yZSBhbnkgbGF5b3V0IGFsZ29yaXRobSBpcyBhcHBsaWVkLiBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgZXJyb3IgaXMgZm91bmQsIHRoZSBsYXlvdXQgcHJvY2VzcyBpcyBhYm9ydGVkIGFuZCBhIG1lc3NhZ2UgaXMgc2hvd24gdG8gdGhlIHVzZXIuIiksITApLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxZeXQpLCIiKSwiWm9vbSB0byBGaXQiKSwiV2hldGhlciB0aGUgem9vbSBsZXZlbCBzaGFsbCBiZSBzZXQgdG8gdmlldyB0aGUgd2hvbGUgZGlhZ3JhbSBhZnRlciBsYXlvdXQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxlU2UpLCJib3giKSwiQm94IExheW91dCBNb2RlIiksIkNvbmZpZ3VyZXMgdGhlIHBhY2tpbmcgbW9kZSB1c2VkIGJ5IHRoZSB7QGxpbmsgQm94TGF5b3V0UHJvdmlkZXJ9LiBJZiBTSU1QTEUgaXMgbm90IHJlcXVpcmVkIChuZWl0aGVyIHByaW9yaXRpZXMgYXJlIHVzZWQgbm9yIHRoZSBpbnRlcmFjdGl2ZSBtb2RlKSwgR1JPVVBfREVDIGNhbiBpbXByb3ZlIHRoZSBwYWNraW5nIGFuZCBkZWNyZWFzZSB0aGUgYXJlYS4gR1JPVVBfTUlYRUQgYW5kIEdST1VQX0lOQyBtYXksIGluIHZlcnkgc3BlY2lmaWMgc2NlbmFyaW9zLCB3b3JrIGJldHRlci4iKSx0TmUpLHBzKSxjUGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsTFRlKSxVMSksIkNvbW1lbnQgQ29tbWVudCBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBjb21tZW50IGJveCBhbmQgb3RoZXIgY29tbWVudCBib3hlcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgbm9kZS4gVGhlIHNwYWNlIGxlZnQgYmV0d2VlbiBjb21tZW50IGJveGVzIG9mIGRpZmZlcmVudCBub2RlcyBpcyBjb250cm9sbGVkIGJ5IHRoZSBub2RlLW5vZGUgc3BhY2luZy4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE1UZSksVTEpLCJDb21tZW50IE5vZGUgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGEgbm9kZSBhbmQgaXRzIGNvbm5lY3RlZCBjb21tZW50IGJveGVzLiBUaGUgc3BhY2UgbGVmdCBiZXR3ZWVuIGEgbm9kZSBhbmQgdGhlIGNvbW1lbnRzIG9mIGFub3RoZXIgbm9kZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBub2RlLW5vZGUgc3BhY2luZy4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LF9oZSksVTEpLCJDb21wb25lbnRzIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBwYWlycyBvZiBjb25uZWN0ZWQgY29tcG9uZW50cy4gVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCBpZiAnc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzJyBpcyBhY3RpdmF0ZWQuIiksMjApLGZvKSx0YSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxEVGUpLFUxKSwiRWRnZSBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYW55IHR3byBlZGdlcy4gTm90ZSB0aGF0IHdoaWxlIHRoaXMgY2FuIHNvbWV3aGF0IGVhc2lseSBiZSBzYXRpc2ZpZWQgZm9yIHRoZSBzZWdtZW50cyBvZiBvcnRob2dvbmFsbHkgZHJhd24gZWRnZXMsIGl0IGlzIGhhcmRlciBmb3IgZ2VuZXJhbCBwb2x5bGluZXMgb3Igc3BsaW5lcy4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE9oZSksVTEpLCJFZGdlIExhYmVsIFNwYWNpbmciKSwiVGhlIG1pbmltYWwgZGlzdGFuY2UgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBsYWJlbCBhbmQgdGhlIGVkZ2UgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLiBOb3RlIHRoYXQgdGhlIHBsYWNlbWVudCBvZiBhIGxhYmVsIGlzIGluZmx1ZW5jZWQgYnkgdGhlICdlZGdlbGFiZWxzLnBsYWNlbWVudCcgb3B0aW9uLiIpLDIpLGZvKSx0YSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxkZmUpLFUxKSwiRWRnZSBOb2RlIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBub2RlcyBhbmQgZWRnZXMuIiksMTApLGZvKSx0YSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxJVGUpLFUxKSwiTGFiZWwgU3BhY2luZyIpLCJEZXRlcm1pbmVzIHRoZSBhbW91bnQgb2Ygc3BhY2UgdG8gYmUgbGVmdCBiZXR3ZWVuIHR3byBsYWJlbHMgb2YgdGhlIHNhbWUgZ3JhcGggZWxlbWVudC4iKSwwKSxmbyksdGEpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsUFRlKSxVMSksIkxhYmVsIE5vZGUgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGxhYmVscyBhbmQgdGhlIGJvcmRlciBvZiBub2RlIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aC4gTm90ZSB0aGF0IHRoZSBwbGFjZW1lbnQgb2YgYSBsYWJlbCBpcyBpbmZsdWVuY2VkIGJ5IHRoZSAnbm9kZWxhYmVscy5wbGFjZW1lbnQnIG9wdGlvbi4iKSw1KSxmbyksdGEpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsT1RlKSxVMSksIkhvcml6b250YWwgc3BhY2luZyBiZXR3ZWVuIExhYmVsIGFuZCBQb3J0IiksIkhvcml6b250YWwgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBwb3J0cyB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ3BvcnRsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksMSksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE5UZSksVTEpLCJWZXJ0aWNhbCBzcGFjaW5nIGJldHdlZW4gTGFiZWwgYW5kIFBvcnQiKSwiVmVydGljYWwgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBwb3J0cyB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ3BvcnRsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksMSksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEp5KSxVMSksIk5vZGUgU3BhY2luZyIpLCJUaGUgbWluaW1hbCBkaXN0YW5jZSB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBlYWNoIHR3byBub2Rlcy4iKSwyMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEJUZSksVTEpLCJOb2RlIFNlbGYgTG9vcCBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBub2RlIGFuZCBpdHMgc2VsZiBsb29wcy4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEZUZSksVTEpLCJQb3J0IFNwYWNpbmciKSwiU3BhY2luZyBiZXR3ZWVuIHBhaXJzIG9mIHBvcnRzIG9mIHRoZSBzYW1lIG5vZGUuIiksMTApLGZvKSx0YSkscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW2hhXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxSVGUpLFUxKSwiSW5kaXZpZHVhbCBTcGFjaW5nIiksIkFsbG93cyB0byBzcGVjaWZ5IGluZGl2aWR1YWwgc3BhY2luZyB2YWx1ZXMgZm9yIGdyYXBoIGVsZW1lbnRzIHRoYXQgc2hhbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIHNwZWNpZmllZCBmb3IgdGhlIGVsZW1lbnQncyBwYXJlbnQuIiksWDEpLGdfdCkscnMoaGEsaGUobGUoeGcsMSksaXQsMTcwLDAsW3pkLHl2LFMyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxhQ2UpLFUxKSwiQWRkaXRpb25hbCBQb3J0IFNwYWNlIiksIkFkZGl0aW9uYWwgc3BhY2UgYXJvdW5kIHRoZSBzZXRzIG9mIHBvcnRzIG9uIGVhY2ggbm9kZSBzaWRlLiBGb3IgZWFjaCBzaWRlIG9mIGEgbm9kZSwgdGhpcyBvcHRpb24gY2FuIHJlc2VydmUgYWRkaXRpb25hbCBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb3J0cyBvbiBlYWNoIHNpZGUuIEZvciBleGFtcGxlLCBhIHRvcCBzcGFjaW5nIG9mIDIwIG1ha2VzIHN1cmUgdGhhdCB0aGUgZmlyc3QgcG9ydCBvbiB0aGUgd2VzdGVybiBhbmQgZWFzdGVybiBzaWRlIGlzIDIwIHVuaXRzIGF3YXkgZnJvbSB0aGUgbm9ydGhlcm4gYm9yZGVyLiIpLE5OZSksWDEpLHZBZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxiZmUpLEp5dCksIkxheW91dCBQYXJ0aXRpb24iKSwiUGFydGl0aW9uIHRvIHdoaWNoIHRoZSBub2RlIGJlbG9uZ3MuIFRoaXMgcmVxdWlyZXMgTGF5b3V0IFBhcnRpdGlvbmluZyB0byBiZSBhY3RpdmUuIE5vZGVzIHdpdGggbG93ZXIgcGFydGl0aW9uIElEcyB3aWxsIGFwcGVhciB0byB0aGUgbGVmdCBvZiBub2RlcyB3aXRoIGhpZ2hlciBwYXJ0aXRpb24gSURzIChhc3N1bWluZyBhIGxlZnQtdG8tcmlnaHQgbGF5b3V0IGRpcmVjdGlvbikuIiksVGMpLHJvKSxycyhQbixoZShsZSh4ZywxKSxpdCwxNzAsMCxbaGFdKSkpKSksUXModCxiZmUscGZlLEJTdCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBmZSksSnl0KSwiTGF5b3V0IFBhcnRpdGlvbmluZyIpLCJXaGV0aGVyIHRvIGFjdGl2YXRlIHBhcnRpdGlvbmVkIGxheW91dC4gVGhpcyB3aWxsIGFsbG93IHRvIGdyb3VwIG5vZGVzIHRocm91Z2ggdGhlIExheW91dCBQYXJ0aXRpb24gb3B0aW9uLiBhIHBhaXIgb2Ygbm9kZXMgd2l0aCBkaWZmZXJlbnQgcGFydGl0aW9uIGluZGljZXMgaXMgdGhlbiBwbGFjZWQgc3VjaCB0aGF0IHRoZSBub2RlIHdpdGggbG93ZXIgaW5kZXggaXMgcGxhY2VkIHRvIHRoZSBsZWZ0IG9mIHRoZSBvdGhlciBub2RlICh3aXRoIGxlZnQtdG8tcmlnaHQgbGF5b3V0IGRpcmVjdGlvbikuIERlcGVuZGluZyBvbiB0aGUgbGF5b3V0IGFsZ29yaXRobSwgdGhpcyBtYXkgb25seSBiZSBndWFyYW50ZWVkIHRvIHdvcmsgaWYgYWxsIG5vZGVzIGhhdmUgYSBsYXlvdXQgcGFydGl0aW9uIGNvbmZpZ3VyZWQsIG9yIGF0IGxlYXN0IGlmIGVkZ2VzIHRoYXQgY3Jvc3MgcGFydGl0aW9ucyBhcmUgbm90IHBhcnQgb2YgYSBwYXJ0aXRpb24tY3Jvc3NpbmcgY3ljbGUuIiksd05lKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsVVRlKSxaeXQpLCJOb2RlIExhYmVsIFBhZGRpbmciKSwiRGVmaW5lIHBhZGRpbmcgZm9yIG5vZGUgbGFiZWxzIHRoYXQgYXJlIHBsYWNlZCBpbnNpZGUgb2YgYSBub2RlLiIpLGROZSksWDEpLHdBZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxmVCksWnl0KSwiTm9kZSBMYWJlbCBQbGFjZW1lbnQiKSwiSGludHMgZm9yIHdoZXJlIG5vZGUgbGFiZWxzIGFyZSB0byBiZSBwbGFjZWQ7IGlmIGVtcHR5LCB0aGUgbm9kZSBsYWJlbCdzIHBvc2l0aW9uIGlzIG5vdCBtb2RpZmllZC4iKSxnTmUpLHQ5KSxLbykscnMoaGEsaGUobGUoeGcsMSksaXQsMTcwLDAsW1MyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxXVGUpLFJHKSwiUG9ydCBBbGlnbm1lbnQiKSwiRGVmaW5lcyB0aGUgZGVmYXVsdCBwb3J0IGRpc3RyaWJ1dGlvbiBmb3IgYSBub2RlLiBNYXkgYmUgb3ZlcnJpZGRlbiBmb3IgZWFjaCBzaWRlIGluZGl2aWR1YWxseS4iKSx4TmUpLHBzKSxPTSksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxZVGUpLFJHKSwiUG9ydCBBbGlnbm1lbnQgKE5vcnRoKSIpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgbm9ydGhlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSxwcyksT00pLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsWFRlKSxSRyksIlBvcnQgQWxpZ25tZW50IChTb3V0aCkiKSwiRGVmaW5lcyBob3cgcG9ydHMgb24gdGhlIHNvdXRoZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuIikscHMpLE9NKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LFFUZSksUkcpLCJQb3J0IEFsaWdubWVudCAoV2VzdCkiKSwiRGVmaW5lcyBob3cgcG9ydHMgb24gdGhlIHdlc3Rlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSxwcyksT00pLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsSlRlKSxSRyksIlBvcnQgQWxpZ25tZW50IChFYXN0KSIpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgZWFzdGVybiBzaWRlIGFyZSBwbGFjZWQsIG92ZXJyaWRpbmcgdGhlIG5vZGUncyBnZW5lcmFsIHBvcnQgYWxpZ25tZW50LiIpLHBzKSxPTSksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCx4NiksUmZlKSwiTm9kZSBTaXplIENvbnN0cmFpbnRzIiksIldoYXQgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNhbGN1bGF0aW5nIGEgbm9kZSdzIHNpemUuIEVtcHR5IHNpemUgY29uc3RyYWludHMgc3BlY2lmeSB0aGF0IGEgbm9kZSdzIHNpemUgaXMgYWxyZWFkeSBmaXhlZCBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiIpLHBOZSksdDkpLEJNKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE54KSxSZmUpLCJOb2RlIFNpemUgT3B0aW9ucyIpLCJPcHRpb25zIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIHNpemUgY29uc3RyYWludHMgc2V0IG9uIGEgbm9kZS4gRWFjaCBtZW1iZXIgb2YgdGhlIHNldCBzcGVjaWZpZXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNhbGN1bGF0aW5nIG5vZGUgc2l6ZXMuIFRoZSBlbXB0eSBzZXQgY29ycmVzcG9uZHMgdG8gbm8gZnVydGhlciBtb2RpZmljYXRpb25zLiIpLG1OZSksdDkpLGVQZSksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxQeCksUmZlKSwiTm9kZSBTaXplIE1pbmltdW0iKSwiVGhlIG1pbmltYWwgc2l6ZSB0byB3aGljaCBhIG5vZGUgY2FuIGJlIHJlZHVjZWQuIiksYk5lKSxYMSksRWEpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsaFQpLFJmZSksIkZpeGVkIEdyYXBoIFNpemUiKSwiQnkgZGVmYXVsdCwgdGhlIGZpeGVkIGxheW91dCBwcm92aWRlciB3aWxsIGVubGFyZ2UgYSBncmFwaCB1bnRpbCBpdCBpcyBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBpdHMgY2hpbGRyZW4uIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgaXQgd29uJ3QgZG8gc28uIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxlQ2UpLGZmZSksIkVkZ2UgTGFiZWwgUGxhY2VtZW50IiksIkdpdmVzIGEgaGludCBvbiB3aGVyZSB0byBwdXQgZWRnZSBsYWJlbHMuIiksaU5lKSxwcyksRk5lKSx1bihTMikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGNHKSxmZmUpLCJJbmxpbmUgRWRnZSBMYWJlbHMiKSwiSWYgdHJ1ZSwgYW4gZWRnZSBsYWJlbCBpcyBwbGFjZWQgZGlyZWN0bHkgb24gaXRzIGVkZ2UuIE1heSBvbmx5IGFwcGx5IHRvIGNlbnRlciBlZGdlIGxhYmVscy4gVGhpcyBraW5kIG9mIGxhYmVsIHBsYWNlbWVudCBpcyBvbmx5IGFkdmlzYWJsZSBpZiB0aGUgbGFiZWwncyByZW5kZXJpbmcgaXMgc3VjaCB0aGF0IGl0IGlzIG5vdCBjcm9zc2VkIGJ5IGl0cyBlZGdlIGFuZCB0aHVzIHN0YXlzIGxlZ2libGUuIiksITEpLHlhKSxOcyksdW4oUzIpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxhT24pLCJmb250IiksIkZvbnQgTmFtZSIpLCJGb250IG5hbWUgdXNlZCBmb3IgYSBsYWJlbC4iKSxKNiksenQpLHVuKFMyKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsWHl0KSwiZm9udCIpLCJGb250IFNpemUiKSwiRm9udCBzaXplIHVzZWQgZm9yIGEgbGFiZWwuIiksVGMpLHJvKSx1bihTMikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LGlDZSksamZlKSwiUG9ydCBBbmNob3IgT2Zmc2V0IiksIlRoZSBvZmZzZXQgdG8gdGhlIHBvcnQgcG9zaXRpb24gd2hlcmUgY29ubmVjdGlvbnMgc2hhbGwgYmUgYXR0YWNoZWQuIiksWDEpLEVhKSx1bih5dikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LHRDZSksamZlKSwiUG9ydCBJbmRleCIpLCJUaGUgaW5kZXggb2YgYSBwb3J0IGluIHRoZSBmaXhlZCBvcmRlciBhcm91bmQgYSBub2RlLiBUaGUgb3JkZXIgaXMgYXNzdW1lZCBhcyBjbG9ja3dpc2UsIHN0YXJ0aW5nIHdpdGggdGhlIGxlZnRtb3N0IHBvcnQgb24gdGhlIHRvcCBzaWRlLiBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBpZiAnUG9ydCBDb25zdHJhaW50cycgaXMgc2V0IHRvIEZJWEVEX09SREVSIGFuZCBubyBzcGVjaWZpYyBwb3NpdGlvbnMgYXJlIGdpdmVuIGZvciB0aGUgcG9ydHMuIEFkZGl0aW9uYWxseSwgdGhlIG9wdGlvbiAnUG9ydCBTaWRlJyBtdXN0IGJlIGRlZmluZWQgaW4gdGhpcyBjYXNlLiIpLFRjKSxybyksdW4oeXYpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCx6VGUpLGpmZSksIlBvcnQgU2lkZSIpLCJUaGUgc2lkZSBvZiBhIG5vZGUgb24gd2hpY2ggYSBwb3J0IGlzIHNpdHVhdGVkLiBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBpZiAnUG9ydCBDb25zdHJhaW50cycgaXMgc2V0IHRvIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIgYW5kIG5vIHNwZWNpZmljIHBvc2l0aW9ucyBhcmUgZ2l2ZW4gZm9yIHRoZSBwb3J0cy4iKSxTTmUpLHBzKSxPbyksdW4oeXYpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxqVGUpLGpmZSksIlBvcnQgQm9yZGVyIE9mZnNldCIpLCJUaGUgb2Zmc2V0IG9mIHBvcnRzIG9uIHRoZSBub2RlIGJvcmRlci4gV2l0aCBhIHBvc2l0aXZlIG9mZnNldCB0aGUgcG9ydCBpcyBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBub2RlLCB3aGlsZSB3aXRoIGEgbmVnYXRpdmUgb2Zmc2V0IHRoZSBwb3J0IGlzIG1vdmVkIHRvd2FyZHMgdGhlIGluc2lkZS4gQW4gb2Zmc2V0IG9mIDAgbWVhbnMgdGhhdCB0aGUgcG9ydCBpcyBwbGFjZWQgZGlyZWN0bHkgb24gdGhlIG5vZGUgYm9yZGVyLCBpLmUuIGlmIHRoZSBwb3J0IHNpZGUgaXMgbm9ydGgsIHRoZSBwb3J0J3Mgc291dGggYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGVzJ3Mgbm9ydGggYm9yZGVyOyBpZiB0aGUgcG9ydCBzaWRlIGlzIGVhc3QsIHRoZSBwb3J0J3Mgd2VzdCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZXMncyBlYXN0IGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyBzb3V0aCwgdGhlIHBvcnQncyBub3J0aCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZSdzIHNvdXRoIGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyB3ZXN0LCB0aGUgcG9ydCdzIGVhc3QgYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGUncyB3ZXN0IGJvcmRlci4iKSxmbyksdGEpLHVuKHl2KSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZFQpLGlTZSksIlBvcnQgTGFiZWwgUGxhY2VtZW50IiksIkRlY2lkZXMgb24gYSBwbGFjZW1lbnQgbWV0aG9kIGZvciBwb3J0IGxhYmVsczsgaWYgZW1wdHksIHRoZSBub2RlIGxhYmVsJ3MgcG9zaXRpb24gaXMgbm90IG1vZGlmaWVkLiIpLFROZSksdDkpLGNZKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEdUZSksaVNlKSwiUG9ydCBMYWJlbHMgTmV4dCB0byBQb3J0IiksIlVzZSAncG9ydExhYmVscy5wbGFjZW1lbnQnOiBORVhUX1RPX1BPUlRfT0ZfUE9TU0lCTEUuIiksITEpLHlhKSxOcyksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxLVGUpLGlTZSksIlRyZWF0IFBvcnQgTGFiZWxzIGFzIEdyb3VwIiksIklmIHRoaXMgb3B0aW9uIGlzIHRydWUgKGRlZmF1bHQpLCB0aGUgbGFiZWxzIG9mIGEgcG9ydCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBncm91cCB3aGVuIGl0IGNvbWVzIHRvIGNlbnRlcmluZyB0aGVtIG5leHQgdG8gdGhlaXIgcG9ydC4gSWYgdGhpcyBvcHRpb24gaXMgZmFsc2UsIG9ubHkgdGhlIGZpcnN0IGxhYmVsIHdpbGwgYmUgY2VudGVyZWQgbmV4dCB0byB0aGUgcG9ydCwgd2l0aCB0aGUgb3RoZXJzIGJlaW5nIHBsYWNlZCBiZWxvdy4gVGhpcyBvbmx5IGFwcGxpZXMgdG8gbGFiZWxzIG9mIGVhc3Rlcm4gYW5kIHdlc3Rlcm4gcG9ydHMgYW5kIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYgbGFiZWxzIGFyZSBub3QgcGxhY2VkIG5leHQgdG8gdGhlaXIgcG9ydC4iKSwhMCkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEJQKSxLUCksIlRvcGRvd24gU2NhbGUgRmFjdG9yIiksIlRoZSBzY2FsaW5nIGZhY3RvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBub2RlcyBsYWlkIG91dCB3aXRoaW4gdGhlIG5vZGUgaW4gcmVjdXJzaXZlIHRvcGRvd24gbGF5b3V0LiBUaGUgZGlmZmVyZW5jZSB0byAnU2NhbGUgRmFjdG9yJyBpcyB0aGF0IHRoZSBub2RlIGl0c2VsZiBpcyBub3Qgc2NhbGVkLiBUaGlzIHZhbHVlIGhhcyB0byBiZSBzZXQgb24gaGllcmFyY2hpY2FsIG5vZGVzLiIpLDEpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsQlAsUXcsVlN0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsblNlKSxLUCksIlRvcGRvd24gU2l6ZSBBcHByb3hpbWF0b3IiKSwiVGhlIHNpemUgYXBwcm94aW1hdG9yIHRvIGJlIHVzZWQgdG8gc2V0IHNpemVzIG9mIGhpZXJhcmNoaWNhbCBub2RlcyBkdXJpbmcgdG9wZG93biBsYXlvdXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG51bGwsIHdoaWNoIHJlc3VsdHMgaW4gbm9kZXMga2VlcGluZyB3aGF0ZXZlciBzaXplIGlzIGRlZmluZWQgZm9yIHRoZW0gZS5nLiB0aHJvdWdoIHBhcmVudCBwYXJhbGxlbCBub2RlIG9yIGJ5IG1hbnVhbGx5IHNldHRpbmcgdGhlIHNpemUuIiksbnVsbCkscHMpLGdZKSx1bihoYSkpKSksUXModCxuU2UsUXcsVVN0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsRlApLEtQKSwiVG9wZG93biBIaWVyYXJjaGljYWwgTm9kZSBXaWR0aCIpLCJUaGUgZml4ZWQgc2l6ZSBvZiBhIGhpZXJhcmNoaWNhbCBub2RlIHdoZW4gdXNpbmcgdG9wZG93biBsYXlvdXQuIElmIHRoaXMgdmFsdWUgaXMgc2V0IG9uIGEgcGFyYWxsZWwgbm9kZSBpdCBhcHBsaWVzIHRvIGl0cyBjaGlsZHJlbiwgd2hlbiBzZXQgb24gYSBoaWVyYXJjaGljYWwgbm9kZSBpdCBhcHBsaWVzIHRvIHRoZSBub2RlIGl0c2VsZi4iKSwxNTApLGZvKSx0YSkscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW2hhXSkpKSkpLFFzKHQsRlAsUXcsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFJQKSxLUCksIlRvcGRvd24gSGllcmFyY2hpY2FsIE5vZGUgQXNwZWN0IFJhdGlvIiksIlRoZSBmaXhlZCBhc3BlY3QgcmF0aW8gb2YgYSBoaWVyYXJjaGljYWwgbm9kZSB3aGVuIHVzaW5nIHRvcGRvd24gbGF5b3V0LiBEZWZhdWx0IGlzIDEvc3FydCgyKS4gSWYgdGhpcyB2YWx1ZSBpcyBzZXQgb24gYSBwYXJhbGxlbCBub2RlIGl0IGFwcGxpZXMgdG8gaXRzIGNoaWxkcmVuLCB3aGVuIHNldCBvbiBhIGhpZXJhcmNoaWNhbCBub2RlIGl0IGFwcGxpZXMgdG8gdGhlIG5vZGUgaXRzZWxmLiIpLDEuNDE0KSxmbyksdGEpLHJzKFBuLGhlKGxlKHhnLDEpLGl0LDE3MCwwLFtoYV0pKSkpKSxRcyh0LFJQLFF3LG51bGwpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxRdyksS1ApLCJUb3Bkb3duIE5vZGUgVHlwZSIpLCJUaGUgZGlmZmVyZW50IG5vZGUgdHlwZXMgdXNlZCBmb3IgdG9wZG93biBsYXlvdXQuIElmIHRoZSBub2RlIHR5cGUgaXMgc2V0IHRvIHtAbGluayBUb3Bkb3duTm9kZVR5cGVzLlBBUkFMTEVMX05PREV9IHRoZSBhbGdvcml0aG0gbXVzdCBiZSBzZXQgdG8gYSB7QGxpbmsgVG9wZG93bkxheW91dFByb3ZpZGVyfSBzdWNoIGFzIHtAbGluayBUb3Bkb3duUGFja2luZ30uIFRoZSB7QGxpbmsgbm9kZVNpemUuZml4ZWRHcmFwaFNpemV9IG9wdGlvbiBpcyB0ZWNobmljYWxseSBvbmx5IHJlcXVpcmVkIGZvciBoaWVyYXJjaGljYWwgbm9kZXMuIiksbnVsbCkscHMpLG5QZSksdW4oaGEpKSkpLFFzKHQsUXcsaFQsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHJTZSksS1ApLCJUb3Bkb3duIFNjYWxlIENhcCIpLCJEZXRlcm1pbmVzIHRoZSB1cHBlciBsaW1pdCBmb3IgdGhlIHRvcGRvd24gc2NhbGUgZmFjdG9yLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLjAgd2hpY2ggZW5zdXJlcyB0aGF0IG5lc3RlZCBjaGlsZHJlbiBuZXZlciBlbmQgdXAgYXBwZWFyaW5nIGxhcmdlciB0aGFuIHRoZWlyIHBhcmVudHMgaW4gdGVybXMgb2YgdW5pdCBzaXplcyBzdWNoIGFzIHRoZSBmb250IHNpemUuIElmIHRoZSBsaW1pdCBpcyBsYXJnZXIsIG5vZGVzIHdpbGwgZnVsbHkgdXRpbGl6ZSB0aGUgYXZhaWxhYmxlIHNwYWNlLCBidXQgaXQgaXMgY291bnRlcmluaXVpdGl2ZSBmb3IgaW5uZXIgbm9kZXMgdG8gaGF2ZSBhIGxhcmdlciBzY2FsZSB0aGFuIG91dGVyIG5vZGVzLiIpLDEpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsclNlLFF3LEhTdCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEhUZSksZTR0KSwiQWN0aXZhdGUgSW5zaWRlIFNlbGYgTG9vcHMiKSwiV2hldGhlciB0aGlzIG5vZGUgYWxsb3dzIHRvIHJvdXRlIHNlbGYgbG9vcHMgaW5zaWRlIG9mIGl0IGluc3RlYWQgb2YgYXJvdW5kIGl0LiBJZiBzZXQgdG8gdHJ1ZSwgdGhpcyB3aWxsIG1ha2UgdGhlIG5vZGUgYSBjb21wb3VuZCBub2RlIGlmIGl0IGlzbid0IGFscmVhZHksIGFuZCB3aWxsIHJlcXVpcmUgdGhlIGxheW91dCBhbGdvcml0aG0gdG8gc3VwcG9ydCBjb21wb3VuZCBub2RlcyB3aXRoIGhpZXJhcmNoaWNhbCBwb3J0cy4iKSwhMSkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFZUZSksZTR0KSwiSW5zaWRlIFNlbGYgTG9vcCIpLCJXaGV0aGVyIGEgc2VsZiBsb29wIHNob3VsZCBiZSByb3V0ZWQgaW5zaWRlIGEgbm9kZSBpbnN0ZWFkIG9mIGFyb3VuZCB0aGF0IG5vZGUuIiksITEpLHlhKSxOcyksdW4oemQpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxBaGUpLCJlZGdlIiksIkVkZ2UgVGhpY2tuZXNzIiksIlRoZSB0aGlja25lc3Mgb2YgYW4gZWRnZS4gVGhpcyBpcyBhIGhpbnQgb24gdGhlIGxpbmUgd2lkdGggdXNlZCB0byBkcmF3IGFuIGVkZ2UsIHBvc3NpYmx5IHJlcXVpcmluZyBtb3JlIHNwYWNlIHRvIGJlIHJlc2VydmVkIGZvciBpdC4iKSwxKSxmbyksdGEpLHVuKHpkKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsUXl0KSwiZWRnZSIpLCJFZGdlIFR5cGUiKSwiVGhlIHR5cGUgb2YgYW4gZWRnZS4gVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIFVNTCBjbGFzcyBkaWFncmFtcywgd2hlcmUgYXNzb2NpYXRpb25zIG11c3QgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmcm9tIGdlbmVyYWxpemF0aW9ucy4iKSxjTmUpLHBzKSxITmUpLHVuKHpkKSkpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksc3IpLCJMYXllcmVkIiksJ1RoZSBsYXllci1iYXNlZCBtZXRob2Qgd2FzIGludHJvZHVjZWQgYnkgU3VnaXlhbWEsIFRhZ2F3YSBhbmQgVG9kYSBpbiAxOTgxLiBJdCBlbXBoYXNpemVzIHRoZSBkaXJlY3Rpb24gb2YgZWRnZXMgYnkgcG9pbnRpbmcgYXMgbWFueSBlZGdlcyBhcyBwb3NzaWJsZSBpbnRvIHRoZSBzYW1lIGRpcmVjdGlvbi4gVGhlIG5vZGVzIGFyZSBhcnJhbmdlZCBpbiBsYXllcnMsIHdoaWNoIGFyZSBzb21ldGltZXMgY2FsbGVkICJoaWVyYXJjaGllcyIsIGFuZCB0aGVuIHJlb3JkZXJlZCBzdWNoIHRoYXQgdGhlIG51bWJlciBvZiBlZGdlIGNyb3NzaW5ncyBpcyBtaW5pbWl6ZWQuIEFmdGVyd2FyZHMsIGNvbmNyZXRlIGNvb3JkaW5hdGVzIGFyZSBjb21wdXRlZCBmb3IgdGhlIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzLicpKSksbV8odCxuZXcgbngoZl8oQ2soVGsobmV3IG55LCJvcmcuZWNsaXBzZS5lbGsub3J0aG9nb25hbCIpLCJPcnRob2dvbmFsIiksYE9ydGhvZ29uYWwgbWV0aG9kcyB0aGF0IGZvbGxvdyB0aGUgInRvcG9sb2d5LXNoYXBlLW1ldHJpY3MiIGFwcHJvYWNoIGJ5IEJhdGluaSwgTmFyZGVsbGkgYW5kIFRhbWFzc2lhICc4Ni4gVGhlIGZpcnN0IHBoYXNlIGRldGVybWluZXMgdGhlIHRvcG9sb2d5IG9mIHRoZSBkcmF3aW5nIGJ5IGFwcGx5aW5nIGEgcGxhbmFyaXphdGlvbiB0ZWNobmlxdWUsIHdoaWNoIHJlc3VsdHMgaW4gYSBwbGFuYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYXBoLiBUaGUgb3J0aG9nb25hbCBzaGFwZSBpcyBjb21wdXRlZCBpbiB0aGUgc2Vjb25kIHBoYXNlLCB3aGljaCBhaW1zIGF0IG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBlZGdlIGJlbmRzLCBhbmQgaXMgY2FsbGVkIG9ydGhvZ29uYWxpemF0aW9uLiBUaGUgdGhpcmQgcGhhc2UgbGVhZHMgdG8gY29uY3JldGUgY29vcmRpbmF0ZXMgZm9yIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzIGJ5IGFwcGx5aW5nIGEgY29tcGFjdGlvbiBtZXRob2QsIHRodXMgZGVmaW5pbmcgdGhlIG1ldHJpY3MuYCkpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksWXUpLCJGb3JjZSIpLCJMYXlvdXQgYWxnb3JpdGhtcyB0aGF0IGZvbGxvdyBwaHlzaWNhbCBhbmFsb2dpZXMgYnkgc2ltdWxhdGluZyBhIHN5c3RlbSBvZiBhdHRyYWN0aXZlIGFuZCByZXB1bHNpdmUgZm9yY2VzLiBUaGUgZmlyc3Qgc3VjY2Vzc2Z1bCBtZXRob2Qgb2YgdGhpcyBraW5kIHdhcyBwcm9wb3NlZCBieSBFYWRlcyBpbiAxOTg0LiIpKSksbV8odCxuZXcgbngoZl8oQ2soVGsobmV3IG55LCJvcmcuZWNsaXBzZS5lbGsuY2lyY2xlIiksIkNpcmNsZSIpLCJDaXJjdWxhciBsYXlvdXQgYWxnb3JpdGhtcyBlbXBoYXNpemUgY3ljbGVzIG9yIGJpY29ubmVjdGVkIGNvbXBvbmVudHMgb2YgYSBncmFwaCBieSBhcnJhbmdpbmcgdGhlbSBpbiBjaXJjbGVzLiBUaGlzIGlzIHVzZWZ1bCBpZiBhIGRyYXdpbmcgaXMgZGVzaXJlZCB3aGVyZSBzdWNoIGNvbXBvbmVudHMgYXJlIGNsZWFybHkgZ3JvdXBlZCwgb3Igd2hlcmUgY3ljbGVzIGFyZSBzaG93biBhcyBwcm9taW5lbnQgT1BUSU9OUyBvZiB0aGUgZ3JhcGguIikpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksYnl0KSwiVHJlZSIpLCJTcGVjaWFsaXplZCBsYXlvdXQgbWV0aG9kcyBmb3IgdHJlZXMsIGkuZS4gYWN5Y2xpYyBncmFwaHMuIFRoZSByZWd1bGFyIHN0cnVjdHVyZSBvZiBncmFwaHMgdGhhdCBoYXZlIG5vIHVuZGlyZWN0ZWQgY3ljbGVzIGNhbiBiZSBlbXBoYXNpemVkIHVzaW5nIGFuIGFsZ29yaXRobSBvZiB0aGlzIHR5cGUuIikpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksIm9yZy5lY2xpcHNlLmVsay5wbGFuYXIiKSwiUGxhbmFyIiksIkFsZ29yaXRobXMgdGhhdCByZXF1aXJlIGEgcGxhbmFyIG9yIHVwd2FyZCBwbGFuYXIgZ3JhcGguIE1vc3Qgb2YgdGhlc2UgYWxnb3JpdGhtcyBhcmUgdGhlb3JldGljYWxseSBpbnRlcmVzdGluZywgYnV0IG5vdCBwcmFjdGljYWxseSB1c2FibGUuIikpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksZ2YpLCJSYWRpYWwiKSwiUmFkaWFsIGxheW91dCBhbGdvcml0aG1zIHVzdWFsbHkgcG9zaXRpb24gdGhlIG5vZGVzIG9mIHRoZSBncmFwaCBvbiBjb25jZW50cmljIGNpcmNsZXMuIikpKSxhbXQoKG5ldyBkaWUsdCkpLHhtdCgobmV3IGZpZSx0KSksTmJ0KChuZXcgbHosdCkpfTt2YXIgZUMsQVN0LGVOZSxaNixMU3QsTVN0LHROZSxlNyx0NyxEU3QsVUIsbk5lLEdCLHh2LHJOZSxEZ2UsSWdlLGlOZSxzTmUsYU5lLG9OZSxjTmUsSVN0LG43LHVOZSxPU3QsS0IsT2dlLFdCLE5nZSx4MyxsTmUsdEMsaE5lLGZOZSxkTmUscjcsZ05lLGt2LHBOZSxDNCxpNyxiTmUsVWIsbU5lLHJZLFlCLF8yLHZOZSxOU3Qsd05lLFBTdCxCU3QseU5lLHhOZSxQZ2UsQmdlLEZnZSxSZ2Usa05lLHJoLF9NLEVOZSxqZ2UsJGdlLFM0LFROZSxDTmUsczcsU05lLG45LFhCLHpnZSxhNyxGU3QscWdlLFJTdCxqU3QsX05lLCRTdCxBTmUsTE5lLHI5LE1OZSxpWSxETmUsSU5lLEV2LHpTdCxPTmUsTk5lLFBOZSxzWSxRQixBTSxpOSxxU3QsSFN0LGFZLFZTdCxCTmUsVVN0O0kobmgsIkNvcmVPcHRpb25zIiw2OTkpLEQoODgsMjIsezM6MSwzNDoxLDIyOjEsODg6MX0sbU8pO3ZhciBRMSx1Yyx2YyxKMSx3ZixMTT1GcihuaCxrRWUsODgsSHIsUG1uLGoxbiksR1N0O0QoMjc4LDIyLHszOjEsMzQ6MSwyMjoxLDI3ODoxfSx6c2UpO3ZhciBuQyxfNCxyQyxGTmU9RnIobmgsIkVkZ2VMYWJlbFBsYWNlbWVudCIsMjc4LEhyLGxibiwkMW4pLEtTdDtEKDIyMywyMix7MzoxLDM0OjEsMjI6MSwyMjM6MX0seHEpO3ZhciBpQyxKQixzOSxIZ2UsVmdlPUZyKG5oLCJFZGdlUm91dGluZyIsMjIzLEhyLGxtbix6MW4pLFdTdDtEKDMyMSwyMix7MzoxLDM0OjEsMjI6MSwzMjE6MX0sTF8pO3ZhciBSTmUsak5lLCROZSx6TmUsVWdlLHFOZSxITmU9RnIobmgsIkVkZ2VUeXBlIiwzMjEsSHIsTHZuLHExbiksWVN0O0QoOTg5LDEsUGYsZGllKSxoLmhmPWZ1bmN0aW9uKHQpe2FtdCh0KX07dmFyIFZOZSxVTmUsR05lLEtOZSxYU3QsV05lLE1NO0kobmgsIkZpeGVkTGF5b3V0ZXJPcHRpb25zIiw5ODkpLEQoOTkwLDEse30sdiQpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgVW5lLHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKG5oLCJGaXhlZExheW91dGVyT3B0aW9ucy9GaXhlZEZhY3RvcnkiLDk5MCksRCgzNDYsMjIsezM6MSwzNDoxLDIyOjEsMzQ2OjF9LHFzZSk7dmFyIEEyLG9ZLERNLFlOZT1GcihuaCwiSGllcmFyY2h5SGFuZGxpbmciLDM0NixIcixjYm4sSDFuKSxRU3Q7RCgyOTEsMjIsezM6MSwzNDoxLDIyOjEsMjkxOjF9LGtxKTt2YXIga2csR2IsWkIsZUYsSlN0PUZyKG5oLCJMYWJlbFNpZGUiLDI5MSxIcix1bW4sVjFuKSxaU3Q7RCg5NSwyMix7MzoxLDM0OjEsMjI6MSw5NToxfSxENSk7dmFyIG1wLEUwLHpmLFQwLGpoLEMwLHFmLEVnLFMwLEtvPUZyKG5oLCJOb2RlTGFiZWxQbGFjZW1lbnQiLDk1LEhyLE13bixVMW4pLGVfdDtEKDI1NiwyMix7MzoxLDM0OjEsMjI6MSwyNTY6MX0sdk8pO3ZhciBYTmUsSU0sS2IsUU5lLHRGLE9NPUZyKG5oLCJQb3J0QWxpZ25tZW50IiwyNTYsSHIsWG1uLEcxbiksdF90O0QoMTAxLDIyLHszOjEsMzQ6MSwyMjoxLDEwMToxfSxNXyk7dmFyIFR2LE11LFRnLHNDLFoxLFdiLEpOZT1GcihuaCwiUG9ydENvbnN0cmFpbnRzIiwxMDEsSHIsQXZuLEsxbiksbl90O0QoMjc5LDIyLHszOjEsMzQ6MSwyMjoxLDI3OToxfSxEXyk7dmFyIE5NLFBNLHZwLG5GLFliLGE5LGNZPUZyKG5oLCJQb3J0TGFiZWxQbGFjZW1lbnQiLDI3OSxIcixfdm4sVzFuKSxyX3Q7RCg2NCwyMix7MzoxLDM0OjEsMjI6MSw2NDoxfSx3Tyk7dmFyIGFyLFFuLHlmLHhmLGxsLEp1LGVkLF8wLHpsLF9sLER1LHFsLGhsLGZsLEEwLCRoLHpoLEhmLERyLFBjLGVyLE9vPUZyKG5oLCJQb3J0U2lkZSIsNjQsSHIsQm1uLFkxbiksaV90O0QoOTkzLDEsUGYsbHopLGguaGY9ZnVuY3Rpb24odCl7TmJ0KHQpfTt2YXIgc190LGFfdCxaTmUsb190LGNfdDtJKG5oLCJSYW5kb21MYXlvdXRlck9wdGlvbnMiLDk5MyksRCg5OTQsMSx7fSx3JCksaC5zZj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PW5ldyBxbmUsdH0saC50Zj1mdW5jdGlvbih0KXt9LEkobmgsIlJhbmRvbUxheW91dGVyT3B0aW9ucy9SYW5kb21GYWN0b3J5Iiw5OTQpLEQoMzg2LDIyLHszOjEsMzQ6MSwyMjoxLDM4NjoxfSxFcSk7dmFyIEE0LHJGLGlGLEN2LEJNPUZyKG5oLCJTaXplQ29uc3RyYWludCIsMzg2LEhyLGNtbixYMW4pLHVfdDtEKDI2NCwyMix7MzoxLDM0OjEsMjI6MSwyNjQ6MX0sSTUpO3ZhciBzRix1WSxhQyxHZ2UsYUYsRk0sbFksaFksZlksZVBlPUZyKG5oLCJTaXplT3B0aW9ucyIsMjY0LEhyLHF3bixRMW4pLGxfdDtEKDI4MCwyMix7MzoxLDM0OjEsMjI6MSwyODA6MX0sSHNlKTt2YXIgTDQsdFBlLGRZLG5QZT1GcihuaCwiVG9wZG93bk5vZGVUeXBlcyIsMjgwLEhyLGhibixKMW4pLGhfdDtEKDM0NywyMixzU2UpO3ZhciByUGUsaVBlLGdZPUZyKG5oLCJUb3Bkb3duU2l6ZUFwcHJveGltYXRvciIsMzQ3LEhyLGEybixlZG4pO0QoOTg3LDM0NyxzU2UsV2l0KSxoLlRnPWZ1bmN0aW9uKHQpe3JldHVybiBUZHQodCl9LEZyKG5oLCJUb3Bkb3duU2l6ZUFwcHJveGltYXRvci8xIiw5ODcsZ1ksbnVsbCxudWxsKSxEKDk4OCwzNDcsc1NlLE9zdCksaC5UZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO2ZvcihuPWwoYXQodCwocGkoKSxhNykpLDE0MyksU3Q9KHJiKCksVj1uZXcgYV8sViksYVAoU3QsdCksY249bmV3IFByLGY9bmV3IG9yKCghdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKSk7Zi5lIT1mLmkuZ2MoKTspYT1sKGdyKGYpLDI3KSxNZT0oej1uZXcgYV8seiksTFUoTWUsU3QpLGFQKE1lLGEpLEJuPVRkdChhKSxGNShNZSxiLk1hdGgubWF4KGEuZyxCbi5hKSxiLk1hdGgubWF4KGEuZixCbi5iKSksanUoY24uZixhLE1lKTtmb3Iobz1uZXcgb3IoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpKTtvLmUhPW8uaS5nYygpOylmb3IoYT1sKGdyKG8pLDI3KSxMPW5ldyBvcigoIWEuZSYmKGEuZT1uZXcgTG4oanMsYSw3LDQpKSxhLmUpKTtMLmUhPUwuaS5nYygpOylDPWwoZ3IoTCksNzQpLFplPWwoaGMoem8oY24uZixhKSksMjcpLG90PWwoY3IoY24sT2UoKCFDLmMmJihDLmM9bmV3IExuKF9yLEMsNSw4KSksQy5jKSwwKSksMjcpLCRlPShCPW5ldyBUSSxCKSxxcigoISRlLmImJigkZS5iPW5ldyBMbihfciwkZSw0LDcpKSwkZS5iKSxaZSkscXIoKCEkZS5jJiYoJGUuYz1uZXcgTG4oX3IsJGUsNSw4KSksJGUuYyksb3QpLEFVKCRlLGRzKFplKSksYVAoJGUsQyk7dGU9bChHTyhuLmYpLDIwNSk7dHJ5e3RlLnJmKFN0LG5ldyB4JCksbGF0KG4uZix0ZSl9Y2F0Y2goam4pe3Rocm93IGpuPWJzKGpuKSxEZShqbiwxMDMpPyhKPWpuLHVlKEopKTp1ZShqbil9cmV0dXJuIFAxKFN0LHQ3KXx8UDEoU3QsZTcpfHxVa2UoU3QpLEU9emUoR2UoYXQoU3QsdDcpKSksdz16ZShHZShhdChTdCxlNykpKSxnPUUvdyxyPXplKEdlKGF0KFN0LFFCKSkpKmIuTWF0aC5zcXJ0KCghU3QuYSYmKFN0LmE9bmV3IG50KEFpLFN0LDEwLDExKSksU3QuYSkuaSksYW49bChhdChTdCxfMiksMTA3KSxUZT1hbi5iK2FuLmMrMSxmZT1hbi5kK2FuLmErMSxuZXcgbHQoYi5NYXRoLm1heChUZSxyKSxiLk1hdGgubWF4KGZlLHIvZykpfSxGcihuaCwiVG9wZG93blNpemVBcHByb3hpbWF0b3IvMiIsOTg4LGdZLG51bGwsbnVsbCk7dmFyIGZfdDtEKDM0NCwxLHs4NzE6MX0sTDgpLGguVWc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRmd0KHRoaXMsdCxuKX0saC5WZz1mdW5jdGlvbigpe2FwdCh0aGlzKX0saC5XZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnF9LGguWGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mP2lvZSh0aGlzLmYpOm51bGx9LGguWWc9ZnVuY3Rpb24oKXtyZXR1cm4gaW9lKHRoaXMuYSl9LGguWmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wfSxoLiRnPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguX2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ufSxoLmFoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucCE9bnVsbCYmIXRoaXMuYn0saC5iaD1mdW5jdGlvbih0KXt2YXIgbjt0aGlzLm4mJihuPXQsdnQodGhpcy5mLG4pKX0saC5kaD1mdW5jdGlvbih0LG4pe3ZhciByLGE7dGhpcy5uJiZ0JiZTYm4odGhpcywocj1uZXcgVXN0LGE9Y2xlKHIsdCksb0RuKHIpLGEpLChOVigpLFdnZSkpfSxoLmVoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0aGlzLmI/bnVsbDoobj1od24odGhpcyx0aGlzLmcpLHVpKHRoaXMuYSxuKSxuLmk9dGhpcyx0aGlzLmQ9dCxuKX0saC5maD1mdW5jdGlvbih0KXt0PjAmJiF0aGlzLmImJmM3ZSh0aGlzLHQpfSxoLmI9ITEsaC5jPTAsaC5kPS0xLGguZT1udWxsLGguZj1udWxsLGguZz0tMSxoLmo9ITEsaC5rPSExLGgubj0hMSxoLm89MCxoLnE9MCxoLnI9MCxJKFVjLCJCYXNpY1Byb2dyZXNzTW9uaXRvciIsMzQ0KSxEKDcxNywyMDUsdHYsam5lKSxoLnJmPWZ1bmN0aW9uKHQsbil7Um10KHQsbil9LEkoVWMsIkJveExheW91dFByb3ZpZGVyIiw3MTcpLEQoOTgzLDEsaWksRFhlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG9Dbih0aGlzLGwodCwyNyksbChuLDI3KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0saC5hPSExLEkoVWMsIkJveExheW91dFByb3ZpZGVyLzEiLDk4MyksRCgxNjMsMSx7MTYzOjF9LGhWLHZydCksaC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmM/b2tlKHRoaXMuYyk6VGIodGhpcy5iKX0sSShVYywiQm94TGF5b3V0UHJvdmlkZXIvR3JvdXAiLDE2MyksRCgzMjAsMjIsezM6MSwzNDoxLDIyOjEsMzIwOjF9LFRxKTt2YXIgc1BlLGFQZSxvUGUsS2dlLGNQZT1GcihVYywiQm94TGF5b3V0UHJvdmlkZXIvUGFja2luZ01vZGUiLDMyMCxIcixobW4sdGRuKSxkX3Q7RCg5ODQsMSxpaSx0ayksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBTcG4obCh0LDE2MyksbChuLDE2MykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoVWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQwJFR5cGUiLDk4NCksRCg5ODUsMSxpaSxuayksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB2cG4obCh0LDE2MyksbChuLDE2MykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoVWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQxJFR5cGUiLDk4NSksRCg5ODYsMSxpaSx5JCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB3cG4obCh0LDE2MyksbChuLDE2MykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoVWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQyJFR5cGUiLDk4NiksRCgxMzg0LDEsezg0NToxfSwkbmUpLGguTWc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdHEoKSwhRGUobiwxNjcpfHxtWmUoKGh4KCksbCh0LDE2NykpLG4pfSxJKFVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMCRUeXBlIiwxMzg0KSxEKDEzODUsMSxmcixJWGUpLGguQ2Q9ZnVuY3Rpb24odCl7QnluKHRoaXMuYSxsKHQsMTQ5KSl9LEkoVWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQxJFR5cGUiLDEzODUpLEQoMTM4NiwxLGZyLEhuZSksaC5DZD1mdW5jdGlvbih0KXtsKHQsOTYpLHRxKCl9LEkoVWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQyJFR5cGUiLDEzODYpLEQoMTM5MCwxLGZyLE9YZSksaC5DZD1mdW5jdGlvbih0KXtpM24odGhpcy5hLGwodCw5NikpfSxJKFVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMyRUeXBlIiwxMzkwKSxEKDEzODgsMSx0aSx1dHQpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIG15bih0aGlzLmEsdGhpcy5iLGwodCwxNDkpKX0sSShVYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDQkVHlwZSIsMTM4OCksRCgxMzg3LDEsdGksbHR0KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBKaG4odGhpcy5hLHRoaXMuYixsKHQsODQ1KSl9LEkoVWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQ1JFR5cGUiLDEzODcpLEQoMTM4OSwxLGZyLGh0dCksaC5DZD1mdW5jdGlvbih0KXtoZ24odGhpcy5hLHRoaXMuYixsKHQsMTQ5KSl9LEkoVWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQ2JFR5cGUiLDEzODkpLEQoOTQ3LDEse30sVm5lKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBhbnQodCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKFVjLCJFbGtVdGlsL2xhbWJkYSQwJFR5cGUiLDk0NyksRCg5NDgsMSxmcixmdHQpLGguQ2Q9ZnVuY3Rpb24odCl7bEVuKHRoaXMuYSx0aGlzLmIsbCh0LDc0KSl9LGguYT0wLGguYj0wLEkoVWMsIkVsa1V0aWwvbGFtYmRhJDEkVHlwZSIsOTQ4KSxEKDk0OSwxLGZyLGR0dCksaC5DZD1mdW5jdGlvbih0KXt0dW4odGhpcy5hLHRoaXMuYixsKHQsMTY2KSl9LGguYT0wLGguYj0wLEkoVWMsIkVsa1V0aWwvbGFtYmRhJDIkVHlwZSIsOTQ5KSxEKDk1MCwxLGZyLGd0dCksaC5DZD1mdW5jdGlvbih0KXtYbG4odGhpcy5hLHRoaXMuYixsKHQsMTM1KSl9LGguYT0wLGguYj0wLEkoVWMsIkVsa1V0aWwvbGFtYmRhJDMkVHlwZSIsOTUwKSxEKDk1MSwxLGZyLE5YZSksaC5DZD1mdW5jdGlvbih0KXtJZG4odGhpcy5hLGwodCwzNzcpKX0sSShVYywiRWxrVXRpbC9sYW1iZGEkNCRUeXBlIiw5NTEpLEQoMzI1LDEsezM0OjEsMzI1OjF9LERjbiksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gQ2huKHRoaXMsbCh0LDI0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBEZSh0LDMyNSk/KG49bCh0LDMyNSksdGhpcy5hPT1uLmEpOiExfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHVhKHRoaXMuYSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIgKGV4Y2x1c2l2ZSkifSxoLmE9MCxJKFVjLCJFeGNsdXNpdmVCb3VuZHMvRXhjbHVzaXZlTG93ZXJCb3VuZCIsMzI1KSxEKDExMTksMjA1LHR2LFVuZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuO2ZvcihuLlVnKCJGaXhlZCBMYXlvdXQiLDEpLGY9bChhdCh0LChwaSgpLHNOZSkpLDIyMyksQj0wLHo9MCxNZT1uZXcgb3IoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpKTtNZS5lIT1NZS5pLmdjKCk7KXtmb3IoZmU9bChncihNZSksMjcpLGFuPWwoYXQoZmUsKFBWKCksTU0pKSw4KSxhbiYmKFFoKGZlLGFuLmEsYW4uYiksbChhdChmZSxVTmUpLDE4MSkuSGMoKG1oKCksQTQpKSYmKFY9bChhdChmZSxLTmUpLDgpLFYuYT4wJiZWLmI+MCYmR3coZmUsVi5hLFYuYiwhMCwhMCkpKSxCPWIuTWF0aC5tYXgoQixmZS5pK2ZlLmcpLHo9Yi5NYXRoLm1heCh6LGZlLmorZmUuZiksQz1uZXcgb3IoKCFmZS5uJiYoZmUubj1uZXcgbnQoZWMsZmUsMSw3KSksZmUubikpO0MuZSE9Qy5pLmdjKCk7KXc9bChncihDKSwxMzUpLGFuPWwoYXQodyxNTSksOCksYW4mJlFoKHcsYW4uYSxhbi5iKSxCPWIuTWF0aC5tYXgoQixmZS5pK3cuaSt3LmcpLHo9Yi5NYXRoLm1heCh6LGZlLmordy5qK3cuZik7Zm9yKG90PW5ldyBvcigoIWZlLmMmJihmZS5jPW5ldyBudChIbCxmZSw5LDkpKSxmZS5jKSk7b3QuZSE9b3QuaS5nYygpOylmb3IoWmU9bChncihvdCksMTIzKSxhbj1sKGF0KFplLE1NKSw4KSxhbiYmUWgoWmUsYW4uYSxhbi5iKSxTdD1mZS5pK1plLmksY249ZmUuaitaZS5qLEI9Yi5NYXRoLm1heChCLFN0K1plLmcpLHo9Yi5NYXRoLm1heCh6LGNuK1plLmYpLEU9bmV3IG9yKCghWmUubiYmKFplLm49bmV3IG50KGVjLFplLDEsNykpLFplLm4pKTtFLmUhPUUuaS5nYygpOyl3PWwoZ3IoRSksMTM1KSxhbj1sKGF0KHcsTU0pLDgpLGFuJiZRaCh3LGFuLmEsYW4uYiksQj1iLk1hdGgubWF4KEIsU3Qrdy5pK3cuZyksej1iLk1hdGgubWF4KHosY24rdy5qK3cuZik7Zm9yKG89bmV3IGhyKGRyKGNwKGZlKS5hLktjKCksbmV3IGopKTtqcihvKTspcj1sKHhyKG8pLDc0KSxMPUp2dChyKSxCPWIuTWF0aC5tYXgoQixMLmEpLHo9Yi5NYXRoLm1heCh6LEwuYik7Zm9yKGE9bmV3IGhyKGRyKHNQKGZlKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDc0KSxkcyhjZyhyKSkhPXQmJihMPUp2dChyKSxCPWIuTWF0aC5tYXgoQixMLmEpLHo9Yi5NYXRoLm1heCh6LEwuYikpfWlmKGY9PShpcCgpLGlDKSlmb3IoVGU9bmV3IG9yKCghdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKSk7VGUuZSE9VGUuaS5nYygpOylmb3IoZmU9bChncihUZSksMjcpLGE9bmV3IGhyKGRyKGNwKGZlKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDc0KSxnPWZBbihyKSxnLmI9PTA/SGkocix4MyxudWxsKTpIaShyLHgzLGcpO1J0KEJ0KGF0KHQsKFBWKCksR05lKSkpKXx8KCRlPWwoYXQodCxYU3QpLDEwNyksdGU9QiskZS5iKyRlLmMsSj16KyRlLmQrJGUuYSxHdyh0LHRlLEosITAsITApKSxuLlZnKCl9LEkoVWMsIkZpeGVkTGF5b3V0UHJvdmlkZXIiLDExMTkpLEQoMzg1LDEzNyx7MzoxLDQyMzoxLDM4NToxLDk2OjEsMTM3OjF9LEVJLFhsdCksaC5jZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYodCl0cnl7Zm9yKEU9R3kodCwiOyw7IiksZj1FLGc9MCx3PWYubGVuZ3RoO2c8dzsrK2cpe2lmKG89ZltnXSxyPUd5KG8sIlxcOiIpLGE9RmtlKGhFKCksclswXSksIWEpdGhyb3cgdWUobmV3IFluKCJJbnZhbGlkIG9wdGlvbiBpZDogIityWzBdKSk7aWYoQz1Qa2UoYSxyWzFdKSxDPT1udWxsKXRocm93IHVlKG5ldyBZbigiSW52YWxpZCBvcHRpb24gdmFsdWU6ICIrclsxXSkpO0M9PW51bGw/KCF0aGlzLnEmJih0aGlzLnE9bmV3IFByKSxheCh0aGlzLnEsYSkpOighdGhpcy5xJiYodGhpcy5xPW5ldyBQciksa2kodGhpcy5xLGEsQykpfX1jYXRjaChMKXt0aHJvdyBMPWJzKEwpLERlKEwsMTAzKT8obj1MLHVlKG5ldyBOMHQobikpKTp1ZShMKX19LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1laSh5YyhmYygodGhpcy5xP3RoaXMucTooQ24oKSxDbigpLG1nKSkudmMoKS5PYygpLG5ldyBHbmUpLFN5KG5ldyBMaXQsbmV3IE1hLG5ldyBrdCxuZXcgT24saGUobGUob2MsMSksaXQsMTA4LDAsW10pKSkpLHR9O3ZhciBnX3Q9SShVYywiSW5kaXZpZHVhbFNwYWNpbmdzIiwzODUpO0QoOTgyLDEse30sR25lKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBfcG4obCh0LDQ0KSl9LEkoVWMsIkluZGl2aWR1YWxTcGFjaW5ncy9sYW1iZGEkMCRUeXBlIiw5ODIpLEQoNzE4LDEse30sbHN0KSxoLmM9MCxJKFVjLCJJbnN0YW5jZVBvb2wiLDcxOCksRCgxODM1LDEse30sS25lKSxJKFVjLCJMb2dnZWRHcmFwaCIsMTgzNSksRCg0MTUsMjIsezM6MSwzNDoxLDIyOjEsNDE1OjF9LENxKTt2YXIgdVBlLFdnZSxsUGUsaFBlLHBfdD1GcihVYywiTG9nZ2VkR3JhcGgvVHlwZSIsNDE1LEhyLGZtbixuZG4pLGJfdDtEKDEwNjMsMSx7ODcxOjF9LHgkKSxoLlVnPWZ1bmN0aW9uKHQsbil7cmV0dXJuITF9LGguVmc9ZnVuY3Rpb24oKXt9LGguV2c9ZnVuY3Rpb24oKXtyZXR1cm4gMH0saC5YZz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLllnPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGguWmc9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC4kZz1mdW5jdGlvbigpe3JldHVybiExfSxoLl9nPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguYWg9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5iaD1mdW5jdGlvbih0KXt9LGguZGg9ZnVuY3Rpb24odCxuKXt9LGguZWg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXN9LGguZmg9ZnVuY3Rpb24odCl7fSxJKFVjLCJOdWxsRWxrUHJvZ3Jlc3NNb25pdG9yIiwxMDYzKSxEKDQyLDEsezIwOjEsNDI6MX0sY2EpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbixyLGE7cmV0dXJuIERlKHQsNDIpPyhyPWwodCw0Miksbj10aGlzLmE9PW51bGw/ci5hPT1udWxsOlBpKHRoaXMuYSxyLmEpLGE9dGhpcy5iPT1udWxsP3IuYj09bnVsbDpQaSh0aGlzLmIsci5iKSxuJiZhKTohMX0saC5IYj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtyZXR1cm4gcj10aGlzLmE9PW51bGw/MDplcyh0aGlzLmEpLHQ9ciZacyxuPXImLTY1NTM2LGY9dGhpcy5iPT1udWxsPzA6ZXModGhpcy5iKSxhPWYmWnMsbz1mJi02NTUzNix0Xm8+PjE2JlpzfG5eYTw8MTZ9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBYZSh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9PW51bGwmJnRoaXMuYj09bnVsbD8icGFpcihudWxsLG51bGwpIjp0aGlzLmE9PW51bGw/InBhaXIobnVsbCwiK3hjKHRoaXMuYikrIikiOnRoaXMuYj09bnVsbD8icGFpcigiK3hjKHRoaXMuYSkrIixudWxsKSI6InBhaXIoIit4Yyh0aGlzLmEpKyIsIit4Yyh0aGlzLmIpKyIpIn0sSShVYywiUGFpciIsNDIpLEQoOTk1LDEsT2EsUFhlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5jJiYoIXRoaXMuYiYmdGhpcy5hLmEhPW51bGx8fHRoaXMuYS5iIT1udWxsKX0saC5QYj1mdW5jdGlvbigpe2lmKCF0aGlzLmMmJiF0aGlzLmImJnRoaXMuYS5hIT1udWxsKXJldHVybiB0aGlzLmI9ITAsdGhpcy5hLmE7aWYoIXRoaXMuYyYmdGhpcy5hLmIhPW51bGwpcmV0dXJuIHRoaXMuYz0hMCx0aGlzLmEuYjt0aHJvdyB1ZShuZXcgX2MpfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdGhpcy5jJiZ0aGlzLmEuYiE9bnVsbD90aGlzLmEuYj1udWxsOnRoaXMuYiYmdGhpcy5hLmEhPW51bGwmJih0aGlzLmEuYT1udWxsKSx1ZShuZXcgcGwpfSxoLmI9ITEsaC5jPSExLEkoVWMsIlBhaXIvMSIsOTk1KSxEKDQ1NSwxLHs0NTU6MX0sU2F0KSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBKYyh0aGlzLmEsbCh0LDQ1NSkuYSkmJkpjKHRoaXMuYyxsKHQsNDU1KS5jKSYmSmModGhpcy5kLGwodCw0NTUpLmQpJiZKYyh0aGlzLmIsbCh0LDQ1NSkuYil9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gTU4oaGUobGUod2EsMSksUm4sMSw1LFt0aGlzLmEsdGhpcy5jLHRoaXMuZCx0aGlzLmJdKSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hK0NvK3RoaXMuYytDbyt0aGlzLmQrQ28rdGhpcy5iKyIpIn0sSShVYywiUXVhZHJ1cGxlIiw0NTUpLEQoMTEwOCwyMDUsdHYscW5lKSxoLnJmPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZztpZihuLlVnKCJSYW5kb20gTGF5b3V0IiwxKSwoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkuaT09MCl7bi5WZygpO3JldHVybn1mPWwoYXQodCwoQjhlKCksb190KSksMTcpLGYmJmYuYSE9MD9vPW5ldyBWSChmLmEpOm89bmV3IFVjZSxyPVhJKEdlKGF0KHQsc190KSkpLGc9WEkoR2UoYXQodCxjX3QpKSksYT1sKGF0KHQsYV90KSwxMDcpLE1Ebih0LG8scixnLGEpLG4uVmcoKX0sSShVYywiUmFuZG9tTGF5b3V0UHJvdmlkZXIiLDExMDgpLEQoMjQwLDEsezI0MDoxfSx3YWUpLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIEpjKHRoaXMuYSxsKHQsMjQwKS5hKSYmSmModGhpcy5iLGwodCwyNDApLmIpJiZKYyh0aGlzLmMsbCh0LDI0MCkuYyl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gTU4oaGUobGUod2EsMSksUm4sMSw1LFt0aGlzLmEsdGhpcy5iLHRoaXMuY10pKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIoIit0aGlzLmErQ28rdGhpcy5iK0NvK3RoaXMuYysiKSJ9LEkoVWMsIlRyaXBsZSIsMjQwKTt2YXIgbV90O0QoNTYyLDEse30pLGguTGY9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGx0KHRoaXMuZi5pLHRoaXMuZi5qKX0saC5vZj1mdW5jdGlvbih0KXtyZXR1cm4gZW90KHQsKHBpKCkscmgpKT9hdCh0aGlzLmYsdl90KTphdCh0aGlzLmYsdCl9LGguTWY9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGx0KHRoaXMuZi5nLHRoaXMuZi5mKX0saC5OZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGgucGY9ZnVuY3Rpb24odCl7cmV0dXJuIFAxKHRoaXMuZix0KX0saC5PZj1mdW5jdGlvbih0KXtVdSh0aGlzLmYsdC5hKSxHdSh0aGlzLmYsdC5iKX0saC5QZj1mdW5jdGlvbih0KXtEdyh0aGlzLmYsdC5hKSxNdyh0aGlzLmYsdC5iKX0saC5RZj1mdW5jdGlvbih0KXt0aGlzLmc9dH0saC5nPTA7dmFyIHZfdDtJKHhMLCJFbGtHcmFwaEFkYXB0ZXJzL0Fic3RyYWN0RWxrR3JhcGhFbGVtZW50QWRhcHRlciIsNTYyKSxEKDU2MywxLHs4NTM6MX0sT3opLGguUmY9ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKCF0aGlzLmIpZm9yKHRoaXMuYj0kSChFSCh0aGlzLmEpLmkpLG49bmV3IG9yKEVIKHRoaXMuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwxMzUpLHZ0KHRoaXMuYixuZXcgWWllKHQpKTtyZXR1cm4gdGhpcy5ifSxoLmI9bnVsbCxJKHhMLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa0VkZ2VBZGFwdGVyIiw1NjMpLEQoMjg5LDU2Mix7fSxKdiksaC5TZj1mdW5jdGlvbigpe3JldHVybiBHZHQodGhpcyl9LGguYT1udWxsLEkoeEwsIkVsa0dyYXBoQWRhcHRlcnMvRWxrR3JhcGhBZGFwdGVyIiwyODkpLEQoNjQwLDU2Mix7MTg3OjF9LFlpZSksSSh4TCwiRWxrR3JhcGhBZGFwdGVycy9FbGtMYWJlbEFkYXB0ZXIiLDY0MCksRCg2MzksNTYyLHs2OTU6MX0scmFlKSxoLlJmPWZ1bmN0aW9uKCl7cmV0dXJuIG03bih0aGlzKX0saC5WZj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PWwoYXQodGhpcy5mLChwaSgpLHRDKSksMTQwKSwhdCYmKHQ9bmV3IHNfKSx0fSxoLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIHY3bih0aGlzKX0saC5aZj1mdW5jdGlvbih0KXt2YXIgbjtuPW5ldyB4YWUodCksSGkodGhpcy5mLChwaSgpLHRDKSxuKX0saC4kZj1mdW5jdGlvbih0KXtIaSh0aGlzLmYsKHBpKCksXzIpLG5ldyBTNGUodCkpfSxoLlRmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0saC5VZj1mdW5jdGlvbigpe3ZhciB0LG47aWYoIXRoaXMuYSlmb3IodGhpcy5hPW5ldyBidCxuPW5ldyBocihkcihzUChsKHRoaXMuZiwyNykpLmEuS2MoKSxuZXcgaikpO2pyKG4pOyl0PWwoeHIobiksNzQpLHZ0KHRoaXMuYSxuZXcgT3oodCkpO3JldHVybiB0aGlzLmF9LGguV2Y9ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKCF0aGlzLmMpZm9yKHRoaXMuYz1uZXcgYnQsbj1uZXcgaHIoZHIoY3AobCh0aGlzLmYsMjcpKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDc0KSx2dCh0aGlzLmMsbmV3IE96KHQpKTtyZXR1cm4gdGhpcy5jfSxoLllmPWZ1bmN0aW9uKCl7cmV0dXJuIEFIKGwodGhpcy5mLDI3KSkuaSE9MHx8UnQoQnQobCh0aGlzLmYsMjcpLm9mKChwaSgpLEtCKSkpKX0saC5fZj1mdW5jdGlvbigpe1h2bih0aGlzLChhdygpLG1fdCkpfSxoLmE9bnVsbCxoLmI9bnVsbCxoLmM9bnVsbCxoLmQ9bnVsbCxoLmU9bnVsbCxJKHhMLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa05vZGVBZGFwdGVyIiw2MzkpLEQoMTI4NCw1NjIsezg1MjoxfSxCWGUpLGguUmY9ZnVuY3Rpb24oKXtyZXR1cm4gUzduKHRoaXMpfSxoLlVmPWZ1bmN0aW9uKCl7dmFyIHQsbjtpZighdGhpcy5hKWZvcih0aGlzLmE9ZWcobCh0aGlzLmYsMTIzKS5oaCgpLmkpLG49bmV3IG9yKGwodGhpcy5mLDEyMykuaGgoKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDc0KSx2dCh0aGlzLmEsbmV3IE96KHQpKTtyZXR1cm4gdGhpcy5hfSxoLldmPWZ1bmN0aW9uKCl7dmFyIHQsbjtpZighdGhpcy5jKWZvcih0aGlzLmM9ZWcobCh0aGlzLmYsMTIzKS5paCgpLmkpLG49bmV3IG9yKGwodGhpcy5mLDEyMykuaWgoKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDc0KSx2dCh0aGlzLmMsbmV3IE96KHQpKTtyZXR1cm4gdGhpcy5jfSxoLmFnPWZ1bmN0aW9uKCl7cmV0dXJuIGwobCh0aGlzLmYsMTIzKS5vZigocGkoKSxzNykpLDY0KX0saC5iZz1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKGE9TTEobCh0aGlzLmYsMTIzKSkscj1uZXcgb3IobCh0aGlzLmYsMTIzKS5paCgpKTtyLmUhPXIuaS5nYygpOylmb3IodD1sKGdyKHIpLDc0KSx3PW5ldyBvcigoIXQuYyYmKHQuYz1uZXcgTG4oX3IsdCw1LDgpKSx0LmMpKTt3LmUhPXcuaS5nYygpOyl7aWYoZz1sKGdyKHcpLDg0KSxMeShiYyhnKSxhKSlyZXR1cm4hMDtpZihiYyhnKT09YSYmUnQoQnQoYXQodCwocGkoKSxPZ2UpKSkpKXJldHVybiEwfWZvcihuPW5ldyBvcihsKHRoaXMuZiwxMjMpLmhoKCkpO24uZSE9bi5pLmdjKCk7KWZvcih0PWwoZ3IobiksNzQpLGY9bmV3IG9yKCghdC5iJiYodC5iPW5ldyBMbihfcix0LDQsNykpLHQuYikpO2YuZSE9Zi5pLmdjKCk7KWlmKG89bChncihmKSw4NCksTHkoYmMobyksYSkpcmV0dXJuITA7cmV0dXJuITF9LGguYT1udWxsLGguYj1udWxsLGguYz1udWxsLEkoeEwsIkVsa0dyYXBoQWRhcHRlcnMvRWxrUG9ydEFkYXB0ZXIiLDEyODQpLEQoMTI4NSwxLGlpLHpuZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBpX24obCh0LDEyMyksbChuLDEyMykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoeEwsIkVsa0dyYXBoQWRhcHRlcnMvUG9ydENvbXBhcmF0b3IiLDEyODUpO3ZhciBYYj1rcyhwZiwiRU9iamVjdCIpLG9DPWtzKFQ2LHI0dCkscWg9a3MoVDYsaTR0KSxvRj1rcyhUNixzNHQpLGNGPWtzKFQ2LCJFbGtTaGFwZSIpLF9yPWtzKFQ2LGE0dCksanM9a3MoVDYsYVNlKSxjcz1rcyhUNixvNHQpLHVGPWtzKHBmLGM0dCksUk09a3MocGYsIkVGYWN0b3J5Iiksd190LFlnZT1rcyhwZix1NHQpLHUxPWtzKHBmLCJFUGFja2FnZSIpLExhLHlfdCx4X3QsZlBlLHBZLGtfdCxkUGUsZ1BlLHBQZSxDZyxFX3QsVF90LGVjPWtzKFQ2LG9TZSksQWk9a3MoVDYsY1NlKSxIbD1rcyhUNix1U2UpO0QoOTMsMSxsNHQpLGgudGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aCgpLG51bGx9LGgudWg9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC52aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVoKCksITF9LGgud2g9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC54aD1mdW5jdGlvbih0KXtOaSh0aGlzLHQpfSxJKFJ4LCJCYXNpY05vdGlmaWVySW1wbCIsOTMpLEQoOTksOTMsZzR0KSxoLlloPWZ1bmN0aW9uKCl7cmV0dXJuIGhoKHRoaXMpfSxoLnloPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHR9LGguemg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLkFoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPVJvKGwoTW4odGhpcy5EaCgpLHRoaXMuRmgoKSksMTkpKSx0aGlzLlBoKCkuVGgodGhpcyxuLm4sbi5mLHQpfSxoLkJoPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5DaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIE5oKHRoaXMsdCxuLHIpfSxoLkRoPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuemgoKSYmKHQ9dGhpcy56aCgpLk5rKCksdCk/dDp0aGlzLmlpKCl9LGguRWg9ZnVuY3Rpb24oKXtyZXR1cm4gVXVlKHRoaXMpfSxoLkZoPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5HaD1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIG49dGhpcy4kaCgpLk9rKCksIW4mJnRoaXMuemgoKS5UayhuPSh3XygpLHQ9ajVlKFNkKHRoaXMuRGgoKSkpLHQ9PW51bGw/cnBlOm5ldyBUTyh0aGlzLHQpKSksbn0saC5IaD1mdW5jdGlvbih0LG4pe3JldHVybiB0fSxoLkloPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXQucGsoKSxuP3QuTGooKTptcyh0aGlzLkRoKCksdCl9LGguSmg9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLnpoKCksdD90LlFrKCk6bnVsbH0saC5LaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnpoKCk/dGhpcy56aCgpLk5rKCk6bnVsbH0saC5MaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJVKHRoaXMsdCxuLHIpfSxoLk1oPWZ1bmN0aW9uKHQpe3JldHVybiB0RSh0aGlzLHQpfSxoLk5oPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE1vZSh0aGlzLHQsbil9LGguT2g9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLnpoKCksISF0JiZ0LlJrKCl9LGguUGg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLlFoPWZ1bmN0aW9uKCl7cmV0dXJuIFhWKHRoaXMpfSxoLlJoPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiBteCh0aGlzLHQsbixhKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGE7cmV0dXJuIGE9bChNbih0aGlzLkRoKCksbiksNjkpLGEud2soKS56ayh0aGlzLHRoaXMuaGkoKSxuLXRoaXMuamkoKSx0LHIpfSxoLlRoPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiBJSCh0aGlzLHQsbixhKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGE7cmV0dXJuIGE9bChNbih0aGlzLkRoKCksbiksNjkpLGEud2soKS5Bayh0aGlzLHRoaXMuaGkoKSxuLXRoaXMuamkoKSx0LHIpfSxoLlZoPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnpoKCkmJiEhdGhpcy56aCgpLlBrKCl9LGguV2g9ZnVuY3Rpb24odCl7cmV0dXJuIG51ZSh0aGlzLHQpfSxoLlhoPWZ1bmN0aW9uKHQpe3JldHVybiBnb3QodGhpcyx0KX0saC5aaD1mdW5jdGlvbih0KXtyZXR1cm4gQnZ0KHRoaXMsdCl9LGguJGg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLl9oPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuemgoKT90aGlzLnpoKCkuUGsoKTpudWxsfSxoLmFpPWZ1bmN0aW9uKCl7cmV0dXJuIFhWKHRoaXMpfSxoLmJpPWZ1bmN0aW9uKHQsbil7JHVlKHRoaXMsdCxuKX0saC5jaT1mdW5jdGlvbih0KXt0aGlzLiRoKCkuU2sodCl9LGguZGk9ZnVuY3Rpb24odCl7dGhpcy4kaCgpLlZrKHQpfSxoLmVpPWZ1bmN0aW9uKHQpe3RoaXMuJGgoKS5Vayh0KX0saC5maT1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmO3JldHVybiBmPXRoaXMuSmgoKSxmJiZ0JiYobj1UbyhmLkVsKCksdGhpcyxuKSxmLklsKHRoaXMpKSxhPXRoaXMuUGgoKSxhJiYoc2xlKHRoaXMsdGhpcy5QaCgpLHRoaXMuRmgoKSkuQmImSW8/KG89YS5RaCgpLG8mJih0PyFmJiZvLklsKHRoaXMpOm8uSGwodGhpcykpKToobj0ocj10aGlzLkZoKCkscj49MD90aGlzLkFoKG4pOnRoaXMuUGgoKS5UaCh0aGlzLC0xLXIsbnVsbCxuKSksbj10aGlzLkNoKG51bGwsLTEsbikpKSx0aGlzLmRpKHQpLG59LGguZ2k9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHcsRTtpZihyPXRoaXMuRGgoKSxmPW1zKHIsdCksbj10aGlzLmppKCksZj49bilyZXR1cm4gbCh0LDY5KS53aygpLkRrKHRoaXMsdGhpcy5oaSgpLGYtbik7aWYoZjw9LTEpaWYoZz1nNigoRWwoKSxpbykscix0KSxnKXtpZihGbygpLGwoZyw2OSkueGsoKXx8KGc9cngoaWMoaW8sZykpKSxvPShhPXRoaXMuSWgoZyksbChhPj0wP3RoaXMuTGgoYSwhMCwhMCk6SHcodGhpcyxnLCEwKSwxNjApKSxFPWcuSWsoKSxFPjF8fEU9PS0xKXJldHVybiBsKGwobywyMjApLlNsKHQsITEpLDc5KX1lbHNlIHRocm93IHVlKG5ldyBZbihPYit0LnhlKCkrJGZlKSk7ZWxzZSBpZih0LkprKCkpcmV0dXJuIGE9dGhpcy5JaCh0KSxsKGE+PTA/dGhpcy5MaChhLCExLCEwKTpIdyh0aGlzLHQsITEpLDc5KTtyZXR1cm4gdz1uZXcgSXR0KHRoaXMsdCksd30saC5oaT1mdW5jdGlvbigpe3JldHVybiBWNmUodGhpcyl9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4obGIoKSxWbikuU30saC5qaT1mdW5jdGlvbigpe3JldHVybiB5cih0aGlzLmlpKCkpfSxoLmtpPWZ1bmN0aW9uKHQpe0Z1ZSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGcwKHRoaXMpfSxJKEduLCJCYXNpY0VPYmplY3RJbXBsIiw5OSk7dmFyIENfdDtEKDExOSw5OSx7MTEwOjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxfSksaC5saT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1INmUodGhpcyksblt0XX0saC5taT1mdW5jdGlvbih0LG4pe3ZhciByO3I9SDZlKHRoaXMpLFRzKHIsdCxuKX0saC5uaT1mdW5jdGlvbih0KXt2YXIgbjtuPUg2ZSh0aGlzKSxUcyhuLHQsbnVsbCl9LGgudGg9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDQpLDEyOSl9LGgudWg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLnZoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuRGImNCkhPTB9LGguemg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLm9pPWZ1bmN0aW9uKHQpe3B4KHRoaXMsMix0KX0saC5CaD1mdW5jdGlvbih0LG4pe3RoaXMuRGI9bjw8MTZ8dGhpcy5EYiYyNTUsdGhpcy5vaSh0KX0saC5EaD1mdW5jdGlvbigpe3JldHVybiBzbCh0aGlzKX0saC5GaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkRiPj4xNn0saC5HaD1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIHdfKCksbj1qNWUoU2QoKHQ9bChLbih0aGlzLDE2KSwyOSksdHx8dGhpcy5paSgpKSkpLG49PW51bGw/cnBlOm5ldyBUTyh0aGlzLG4pfSxoLndoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuRGImMSk9PTB9LGguSmg9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDEyOCksMjAzNCl9LGguS2g9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDE2KSwyOSl9LGguT2g9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5EYiYzMikhPTB9LGguUGg9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDIpLDU0KX0saC5WaD1mdW5jdGlvbigpe3JldHVybih0aGlzLkRiJjY0KSE9MH0saC4kaD1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguX2g9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDY0KSwyODgpfSxoLmNpPWZ1bmN0aW9uKHQpe3B4KHRoaXMsMTYsdCl9LGguZGk9ZnVuY3Rpb24odCl7cHgodGhpcywxMjgsdCl9LGguZWk9ZnVuY3Rpb24odCl7cHgodGhpcyw2NCx0KX0saC5oaT1mdW5jdGlvbigpe3JldHVybiBLdSh0aGlzKX0saC5EYj0wLEkoR24sIk1pbmltYWxFT2JqZWN0SW1wbCIsMTE5KSxEKDEyMCwxMTksezExMDoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0pLGgub2k9ZnVuY3Rpb24odCl7dGhpcy5DYj10fSxoLlBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2J9LEkoR24sIk1pbmltYWxFT2JqZWN0SW1wbC9Db250YWluZXIiLDEyMCksRCgyMDgzLDEyMCx7MTEwOjEsMzQyOjEsOTY6MSw5NDoxLDkzOjEsNTg6MSwxMTQ6MSw1NDoxLDk5OjEsMTE5OjEsMTIwOjF9KSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gc3hlKHRoaXMsdCxuLHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gV3hlKHRoaXMsdCxuLHIpfSxoLldoPWZ1bmN0aW9uKHQpe3JldHVybiBaNWUodGhpcyx0KX0saC5iaT1mdW5jdGlvbih0LG4pe1Y3ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxUX3R9LGgua2k9ZnVuY3Rpb24odCl7TzdlKHRoaXMsdCl9LGgubmY9ZnVuY3Rpb24oKXtyZXR1cm4gZmR0KHRoaXMpfSxoLmdoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubyYmKHRoaXMubz1uZXcgeGwoKHN1KCksQ2cpLEwyLHRoaXMsMCkpLHRoaXMub30saC5vZj1mdW5jdGlvbih0KXtyZXR1cm4gYXQodGhpcyx0KX0saC5wZj1mdW5jdGlvbih0KXtyZXR1cm4gUDEodGhpcyx0KX0saC5xZj1mdW5jdGlvbih0LG4pe3JldHVybiBIaSh0aGlzLHQsbil9LEkoc3YsIkVNYXBQcm9wZXJ0eUhvbGRlckltcGwiLDIwODMpLEQoNTcyLDEyMCx7MTEwOjEsMzc3OjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSxBUyksaC5MaD1mdW5jdGlvbih0LG4scil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5hO2Nhc2UgMTpyZXR1cm4gdGhpcy5ifXJldHVybiByVSh0aGlzLHQsbixyKX0saC5XaD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLmEhPTA7Y2FzZSAxOnJldHVybiB0aGlzLmIhPTB9cmV0dXJuIG51ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgMDpkVih0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgMTpmVih0aGlzLHplKEdlKG4pKSk7cmV0dXJufSR1ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSx5X3R9LGgua2k9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMDpkVih0aGlzLDApO3JldHVybjtjYXNlIDE6ZlYodGhpcywwKTtyZXR1cm59RnVlKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5EYiY2ND9nMCh0aGlzKToodD1uZXcgQWYoZzAodGhpcykpLHQuYSs9IiAoeDogIixfNSh0LHRoaXMuYSksdC5hKz0iLCB5OiAiLF81KHQsdGhpcy5iKSx0LmErPSIpIix0LmEpfSxoLmE9MCxoLmI9MCxJKHN2LCJFbGtCZW5kUG9pbnRJbXBsIiw1NzIpLEQoNzM5LDIwODMsezExMDoxLDM0MjoxLDE2NzoxLDk2OjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSksaC5MaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIGQ4ZSh0aGlzLHQsbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIE11ZSh0aGlzLHQsbixyKX0saC5VaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIGRjZSh0aGlzLHQsbixyKX0saC5XaD1mdW5jdGlvbih0KXtyZXR1cm4gXzdlKHRoaXMsdCl9LGguYmk9ZnVuY3Rpb24odCxuKXtUeGUodGhpcyx0LG4pfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIHN1KCksa190fSxoLmtpPWZ1bmN0aW9uKHQpe2k4ZSh0aGlzLHQpfSxoLmpoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua30saC5raD1mdW5jdGlvbigpe3JldHVybiBFSCh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBqY2UodGhpcyl9LGguaz1udWxsLEkoc3YsIkVsa0dyYXBoRWxlbWVudEltcGwiLDczOSksRCg3NDAsNzM5LHsxMTA6MSwzNDI6MSwxNjc6MSw0MjI6MSw5NjoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0pLGguTGg9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB4OGUodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7cmV0dXJuIF84ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7Q3hlKHRoaXMsdCxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBzdSgpLEVfdH0saC5raT1mdW5jdGlvbih0KXtOOGUodGhpcyx0KX0saC5saD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGgubWg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nfSxoLm5oPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaX0saC5vaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmp9LGgucGg9ZnVuY3Rpb24odCxuKXtGNSh0aGlzLHQsbil9LGgucWg9ZnVuY3Rpb24odCxuKXtRaCh0aGlzLHQsbil9LGgucmg9ZnVuY3Rpb24odCl7VXUodGhpcyx0KX0saC5zaD1mdW5jdGlvbih0KXtHdSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFB1ZSh0aGlzKX0saC5mPTAsaC5nPTAsaC5pPTAsaC5qPTAsSShzdiwiRWxrU2hhcGVJbXBsIiw3NDApLEQoNzQxLDc0MCx7MTEwOjEsMzQyOjEsODQ6MSwxNjc6MSw0MjI6MSw5NjoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0pLGguTGg9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBKOGUodGhpcyx0LG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB2eGUodGhpcyx0LG4scil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB3eGUodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7cmV0dXJuIEg3ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7STllKHRoaXMsdCxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBzdSgpLHhfdH0saC5raT1mdW5jdGlvbih0KXtLOGUodGhpcyx0KX0saC5oaD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmQmJih0aGlzLmQ9bmV3IExuKGpzLHRoaXMsOCw1KSksdGhpcy5kfSxoLmloPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZSYmKHRoaXMuZT1uZXcgTG4oanMsdGhpcyw3LDQpKSx0aGlzLmV9LEkoc3YsIkVsa0Nvbm5lY3RhYmxlU2hhcGVJbXBsIiw3NDEpLEQoMzI2LDczOSx7MTEwOjEsMzQyOjEsNzQ6MSwxNjc6MSwzMjY6MSw5NjoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0sVEkpLGguQWg9ZnVuY3Rpb24odCl7cmV0dXJuIGd4ZSh0aGlzLHQpfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godCl7Y2FzZSAzOnJldHVybiBXTyh0aGlzKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSx0aGlzLmI7Y2FzZSA1OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IExuKF9yLHRoaXMsNSw4KSksdGhpcy5jO2Nhc2UgNjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBudChjcyx0aGlzLDYsNikpLHRoaXMuYTtjYXNlIDc6cmV0dXJuIEhuKCksIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSwhKHRoaXMuYi5pPD0xJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSx0aGlzLmMuaTw9MSkpO2Nhc2UgODpyZXR1cm4gSG4oKSwhIXFBKHRoaXMpO2Nhc2UgOTpyZXR1cm4gSG4oKSwhIXF3KHRoaXMpO2Nhc2UgMTA6cmV0dXJuIEhuKCksIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSx0aGlzLmIuaSE9MCYmKCF0aGlzLmMmJih0aGlzLmM9bmV3IExuKF9yLHRoaXMsNSw4KSksdGhpcy5jLmkhPTApfXJldHVybiBkOGUodGhpcyx0LG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaChuKXtjYXNlIDM6cmV0dXJuIHRoaXMuQ2ImJihyPShhPXRoaXMuRGI+PjE2LGE+PTA/Z3hlKHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLWEsbnVsbCxyKSkpLFl5ZSh0aGlzLGwodCwyNykscik7Y2FzZSA0OnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IExuKF9yLHRoaXMsNCw3KSksUnUodGhpcy5iLHQscik7Y2FzZSA1OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IExuKF9yLHRoaXMsNSw4KSksUnUodGhpcy5jLHQscik7Y2FzZSA2OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KGNzLHRoaXMsNiw2KSksUnUodGhpcy5hLHQscil9cmV0dXJuIE11ZSh0aGlzLHQsbixyKX0saC5VaD1mdW5jdGlvbih0LG4scil7c3dpdGNoKG4pe2Nhc2UgMzpyZXR1cm4gWXllKHRoaXMsbnVsbCxyKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSxUbyh0aGlzLmIsdCxyKTtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSxUbyh0aGlzLmMsdCxyKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoY3MsdGhpcyw2LDYpKSxUbyh0aGlzLmEsdCxyKX1yZXR1cm4gZGNlKHRoaXMsdCxuLHIpfSxoLldoPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDM6cmV0dXJuISFXTyh0aGlzKTtjYXNlIDQ6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSA2OnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDc6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSwhKHRoaXMuYi5pPD0xJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSx0aGlzLmMuaTw9MSkpO2Nhc2UgODpyZXR1cm4gcUEodGhpcyk7Y2FzZSA5OnJldHVybiBxdyh0aGlzKTtjYXNlIDEwOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IExuKF9yLHRoaXMsNCw3KSksdGhpcy5iLmkhPTAmJighdGhpcy5jJiYodGhpcy5jPW5ldyBMbihfcix0aGlzLDUsOCkpLHRoaXMuYy5pIT0wKX1yZXR1cm4gXzdlKHRoaXMsdCl9LGguYmk9ZnVuY3Rpb24odCxuKXtzd2l0Y2godCl7Y2FzZSAzOkFVKHRoaXMsbChuLDI3KSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5iJiYodGhpcy5iPW5ldyBMbihfcix0aGlzLDQsNykpLCRyKHRoaXMuYiksIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSxBcyh0aGlzLmIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5jJiYodGhpcy5jPW5ldyBMbihfcix0aGlzLDUsOCkpLCRyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSxBcyh0aGlzLmMsbChuLDE2KSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBudChjcyx0aGlzLDYsNikpLCRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoY3MsdGhpcyw2LDYpKSxBcyh0aGlzLmEsbChuLDE2KSk7cmV0dXJufVR4ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxmUGV9LGgua2k9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMzpBVSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6IXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSwkcih0aGlzLmIpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSwkcih0aGlzLmMpO3JldHVybjtjYXNlIDY6IXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoY3MsdGhpcyw2LDYpKSwkcih0aGlzLmEpO3JldHVybn1pOGUodGhpcyx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBldnQodGhpcyl9LEkoc3YsIkVsa0VkZ2VJbXBsIiwzMjYpLEQoNDUyLDIwODMsezExMDoxLDM0MjoxLDE2NjoxLDQ1MjoxLDk2OjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSxyayksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gbHhlKHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaCh0KXtjYXNlIDE6cmV0dXJuIHRoaXMuajtjYXNlIDI6cmV0dXJuIHRoaXMuaztjYXNlIDM6cmV0dXJuIHRoaXMuYjtjYXNlIDQ6cmV0dXJuIHRoaXMuYztjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgWXMocWgsdGhpcyw1KSksdGhpcy5hO2Nhc2UgNjpyZXR1cm4gbG90KHRoaXMpO2Nhc2UgNzpyZXR1cm4gbj9vdWUodGhpcyk6dGhpcy5pO2Nhc2UgODpyZXR1cm4gbj9hdWUodGhpcyk6dGhpcy5mO2Nhc2UgOTpyZXR1cm4hdGhpcy5nJiYodGhpcy5nPW5ldyBMbihjcyx0aGlzLDksMTApKSx0aGlzLmc7Y2FzZSAxMDpyZXR1cm4hdGhpcy5lJiYodGhpcy5lPW5ldyBMbihjcyx0aGlzLDEwLDkpKSx0aGlzLmU7Y2FzZSAxMTpyZXR1cm4gdGhpcy5kfXJldHVybiBzeGUodGhpcyx0LG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSA2OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP2x4ZSh0aGlzLHIpOnRoaXMuQ2IuVGgodGhpcywtMS1vLG51bGwscikpKSxXeWUodGhpcyxsKHQsNzQpLHIpO2Nhc2UgOTpyZXR1cm4hdGhpcy5nJiYodGhpcy5nPW5ldyBMbihjcyx0aGlzLDksMTApKSxSdSh0aGlzLmcsdCxyKTtjYXNlIDEwOnJldHVybiF0aGlzLmUmJih0aGlzLmU9bmV3IExuKGNzLHRoaXMsMTAsOSkpLFJ1KHRoaXMuZSx0LHIpfXJldHVybiBmPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KHN1KCkscFkpKSxuKSw2OSksZi53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoc3UoKSxwWSkpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaChuKXtjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgWXMocWgsdGhpcyw1KSksVG8odGhpcy5hLHQscik7Y2FzZSA2OnJldHVybiBXeWUodGhpcyxudWxsLHIpO2Nhc2UgOTpyZXR1cm4hdGhpcy5nJiYodGhpcy5nPW5ldyBMbihjcyx0aGlzLDksMTApKSxUbyh0aGlzLmcsdCxyKTtjYXNlIDEwOnJldHVybiF0aGlzLmUmJih0aGlzLmU9bmV3IExuKGNzLHRoaXMsMTAsOSkpLFRvKHRoaXMuZSx0LHIpfXJldHVybiBXeGUodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMTpyZXR1cm4gdGhpcy5qIT0wO2Nhc2UgMjpyZXR1cm4gdGhpcy5rIT0wO2Nhc2UgMzpyZXR1cm4gdGhpcy5iIT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5jIT0wO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSA2OnJldHVybiEhbG90KHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuaTtjYXNlIDg6cmV0dXJuISF0aGlzLmY7Y2FzZSA5OnJldHVybiEhdGhpcy5nJiZ0aGlzLmcuaSE9MDtjYXNlIDEwOnJldHVybiEhdGhpcy5lJiZ0aGlzLmUuaSE9MDtjYXNlIDExOnJldHVybiB0aGlzLmQhPW51bGx9cmV0dXJuIFo1ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgMTpvRSh0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgMjp1RSh0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgMzphRSh0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgNDpjRSh0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBZcyhxaCx0aGlzLDUpKSwkcih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IFlzKHFoLHRoaXMsNSkpLEFzKHRoaXMuYSxsKG4sMTYpKTtyZXR1cm47Y2FzZSA2OloydCh0aGlzLGwobiw3NCkpO3JldHVybjtjYXNlIDc6eVYodGhpcyxsKG4sODQpKTtyZXR1cm47Y2FzZSA4OndWKHRoaXMsbChuLDg0KSk7cmV0dXJuO2Nhc2UgOTohdGhpcy5nJiYodGhpcy5nPW5ldyBMbihjcyx0aGlzLDksMTApKSwkcih0aGlzLmcpLCF0aGlzLmcmJih0aGlzLmc9bmV3IExuKGNzLHRoaXMsOSwxMCkpLEFzKHRoaXMuZyxsKG4sMTYpKTtyZXR1cm47Y2FzZSAxMDohdGhpcy5lJiYodGhpcy5lPW5ldyBMbihjcyx0aGlzLDEwLDkpKSwkcih0aGlzLmUpLCF0aGlzLmUmJih0aGlzLmU9bmV3IExuKGNzLHRoaXMsMTAsOSkpLEFzKHRoaXMuZSxsKG4sMTYpKTtyZXR1cm47Y2FzZSAxMTpwN2UodGhpcyxlaShuKSk7cmV0dXJufVY3ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxwWX0saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAxOm9FKHRoaXMsMCk7cmV0dXJuO2Nhc2UgMjp1RSh0aGlzLDApO3JldHVybjtjYXNlIDM6YUUodGhpcywwKTtyZXR1cm47Y2FzZSA0OmNFKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBZcyhxaCx0aGlzLDUpKSwkcih0aGlzLmEpO3JldHVybjtjYXNlIDY6WjJ0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNzp5Vih0aGlzLG51bGwpO3JldHVybjtjYXNlIDg6d1YodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmcmJih0aGlzLmc9bmV3IExuKGNzLHRoaXMsOSwxMCkpLCRyKHRoaXMuZyk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuZSYmKHRoaXMuZT1uZXcgTG4oY3MsdGhpcywxMCw5KSksJHIodGhpcy5lKTtyZXR1cm47Y2FzZSAxMTpwN2UodGhpcyxudWxsKTtyZXR1cm59TzdlKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gZDJ0KHRoaXMpfSxoLmI9MCxoLmM9MCxoLmQ9bnVsbCxoLmo9MCxoLms9MCxJKHN2LCJFbGtFZGdlU2VjdGlvbkltcGwiLDQ1MiksRCgxNTgsMTIwLHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsNTg6MSwxMTQ6MSw1NDoxLDk5OjEsMTU4OjEsMTE5OjEsMTIwOjF9KSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtyZXR1cm4gdD09MD8oIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWIpOnNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztyZXR1cm4gbj09MD8oIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFJ1KHRoaXMuQWIsdCxyKSk6KG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLG4pLDY5KSxvLndrKCkuemsodGhpcyxLdSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKSl9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87cmV0dXJuIG49PTA/KCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxUbyh0aGlzLkFiLHQscikpOihvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8dGhpcy5paSgpKSxuKSw2OSksby53aygpLkFrKHRoaXMsS3UodGhpcyksbi15cih0aGlzLmlpKCkpLHQscikpfSxoLldoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PT0wPyEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wOm5mKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fHRoaXMuaWkoKSksdCkpfSxoLlpoPWZ1bmN0aW9uKHQpe3JldHVybiBIa2UodGhpcyx0KX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIodGhpcy5paSgpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHx0aGlzLmlpKCkpLHQpLG4pfSxoLmRpPWZ1bmN0aW9uKHQpe3B4KHRoaXMsMTI4LHQpfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIFRuKCksSF90fSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybn1jZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHx0aGlzLmlpKCkpLHQpKX0saC5waT1mdW5jdGlvbigpe3RoaXMuQmJ8PTF9LGgucWk9ZnVuY3Rpb24odCl7cmV0dXJuIFlBKHRoaXMsdCl9LGguQmI9MCxJKEduLCJFTW9kZWxFbGVtZW50SW1wbCIsMTU4KSxEKDcyMCwxNTgsezExMDoxLDk0OjEsOTM6MSw0ODA6MSwxNTU6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxNTg6MSwxMTk6MSwxMjA6MX0sZnopLGgucmk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTHZ0KHRoaXMsdCxuKX0saC5zaT1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmO2lmKHRoaXMuYSE9QWgodCl8fHQuQmImMjU2KXRocm93IHVlKG5ldyBZbihxZmUrdC56Yit0MykpO2ZvcihhPWRjKHQpO2R1KGEuYSkuaSE9MDspe2lmKHI9bChtUChhLDAsKG49bChPZShkdShhLmEpLDApLDg5KSxmPW4uYyxEZShmLDkwKT9sKGYsMjkpOihUbigpLEtmKSkpLDI5KSx6dyhyKSlyZXR1cm4gbz1BaChyKS53aSgpLnNpKHIpLGwobyw1NCkuY2kodCksbzthPWRjKHIpfXJldHVybih0LkQhPW51bGw/dC5EOnQuQik9PSJqYXZhLnV0aWwuTWFwJEVudHJ5Ij9uZXcgR2l0KHQpOm5ldyBGNGUodCl9LGgudGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gS3codGhpcyx0LG4pfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy5hfXJldHVybiBzZih0aGlzLHQteXIoKFRuKCksZW0pKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHxlbSksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSAxOnJldHVybiB0aGlzLmEmJihyPWwodGhpcy5hLDU0KS5UaCh0aGlzLDQsdTEscikpLHI4ZSh0aGlzLGwodCwyNDEpLHIpfXJldHVybiBvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksZW0pKSxuKSw2OSksby53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxlbSkpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgMTpyZXR1cm4gcjhlKHRoaXMsbnVsbCxyKX1yZXR1cm4gbz1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fChUbigpLGVtKSksbiksNjkpLG8ud2soKS5Bayh0aGlzLEt1KHRoaXMpLG4teXIoKFRuKCksZW0pKSx0LHIpfSxoLldoPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiEhdGhpcy5hfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksZW0pKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxlbSksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpYZ3QodGhpcyxsKG4sMjQxKSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxlbSkpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fGVtKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLGVtfSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6WGd0KHRoaXMsbnVsbCk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxlbSkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fGVtKSx0KSl9O3ZhciBqTSxiUGUsU190O0koR24sIkVGYWN0b3J5SW1wbCIsNzIwKSxEKDEwMzcsNzIwLHsxMTA6MSwyMTEzOjEsOTQ6MSw5MzoxLDQ4MDoxLDE1NToxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDE1ODoxLDExOToxLDEyMDoxfSxpayksaC5yaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0LmhrKCkpe2Nhc2UgMTI6cmV0dXJuIGwobiwxNDkpLlBnKCk7Y2FzZSAxMzpyZXR1cm4geGMobik7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oeVQrdC54ZSgpK3QzKSl9fSxoLnNpPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7c3dpdGNoKHQuRz09LTEmJih0Lkc9KG49QWgodCksbj9mMihuLnZpKCksdCk6LTEpKSx0Lkcpe2Nhc2UgNDpyZXR1cm4gZj1uZXcgc2ssZjtjYXNlIDY6cmV0dXJuIGc9bmV3IGFfLGc7Y2FzZSA3OnJldHVybiB3PW5ldyBqd2UsdztjYXNlIDg6cmV0dXJuIGE9bmV3IFRJLGE7Y2FzZSA5OnJldHVybiByPW5ldyBBUyxyO2Nhc2UgMTA6cmV0dXJuIG89bmV3IHJrLG87Y2FzZSAxMTpyZXR1cm4gRT1uZXcgayQsRTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihxZmUrdC56Yit0MykpfX0saC50aT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0LmhrKCkpe2Nhc2UgMTM6Y2FzZSAxMjpyZXR1cm4gbnVsbDtkZWZhdWx0OnRocm93IHVlKG5ldyBZbih5VCt0LnhlKCkrdDMpKX19LEkoc3YsIkVsa0dyYXBoRmFjdG9yeUltcGwiLDEwMzcpLEQoNDQ4LDE1OCx7MTEwOjEsOTQ6MSw5MzoxLDE1NToxLDE5NzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDE1ODoxLDExOToxLDEyMDoxfSksaC5HaD1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIG49KHQ9bChLbih0aGlzLDE2KSwyOSksajVlKFNkKHR8fHRoaXMuaWkoKSkpKSxuPT1udWxsPyh3XygpLHdfKCkscnBlKTpuZXcgcHJ0KHRoaXMsbil9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnhlKCl9cmV0dXJuIHNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksdCksbixyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbH1yZXR1cm4gbmYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksQXModGhpcy5BYixsKG4sMTYpKTtyZXR1cm47Y2FzZSAxOnRoaXMudWkoZWkobikpO3JldHVybn11Zih0aGlzLHQteXIodGhpcy5paSgpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHx0aGlzLmlpKCkpLHQpLG4pfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIFRuKCksVl90fSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6dGhpcy51aShudWxsKTtyZXR1cm59Y2YodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGgueGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56Yn0saC51aT1mdW5jdGlvbih0KXtGdSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIENBKHRoaXMpfSxoLnpiPW51bGwsSShHbiwiRU5hbWVkRWxlbWVudEltcGwiLDQ0OCksRCgxODQsNDQ4LHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwyNDE6MSwxMTQ6MSw1NDoxLDk5OjEsMTU4OjEsMTg0OjEsMTE5OjEsMTIwOjEsNjkwOjF9LHFhdCksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gb2d0KHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gdGhpcy55YjtjYXNlIDM6cmV0dXJuIHRoaXMueGI7Y2FzZSA0OnJldHVybiB0aGlzLnNiO2Nhc2UgNTpyZXR1cm4hdGhpcy5yYiYmKHRoaXMucmI9bmV3IHd5KHRoaXMsbDEsdGhpcykpLHRoaXMucmI7Y2FzZSA2OnJldHVybiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgVjgodTEsdGhpcyw2LDcpKSx0aGlzLnZiO2Nhc2UgNzpyZXR1cm4gbj90aGlzLkRiPj4xNj09Nz9sKHRoaXMuQ2IsMjQxKTpudWxsOm1vdCh0aGlzKX1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLE8yKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8TzIpLHQpLG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSA0OnJldHVybiB0aGlzLnNiJiYocj1sKHRoaXMuc2IsNTQpLlRoKHRoaXMsMSxSTSxyKSksYThlKHRoaXMsbCh0LDQ4MCkscik7Y2FzZSA1OnJldHVybiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgd3kodGhpcyxsMSx0aGlzKSksUnUodGhpcy5yYix0LHIpO2Nhc2UgNjpyZXR1cm4hdGhpcy52YiYmKHRoaXMudmI9bmV3IFY4KHUxLHRoaXMsNiw3KSksUnUodGhpcy52Yix0LHIpO2Nhc2UgNzpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD9vZ3QodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtbyxudWxsLHIpKSksTmgodGhpcyx0LDcscil9cmV0dXJuIGY9bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxPMikpLG4pLDY5KSxmLndrKCkuemsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLE8yKSksdCxyKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxUbyh0aGlzLkFiLHQscik7Y2FzZSA0OnJldHVybiBhOGUodGhpcyxudWxsLHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5yYiYmKHRoaXMucmI9bmV3IHd5KHRoaXMsbDEsdGhpcykpLFRvKHRoaXMucmIsdCxyKTtjYXNlIDY6cmV0dXJuIXRoaXMudmImJih0aGlzLnZiPW5ldyBWOCh1MSx0aGlzLDYsNykpLFRvKHRoaXMudmIsdCxyKTtjYXNlIDc6cmV0dXJuIE5oKHRoaXMsbnVsbCw3LHIpfXJldHVybiBvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksTzIpKSxuKSw2OSksby53aygpLkFrKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxPMikpLHQscil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLnliIT1udWxsO2Nhc2UgMzpyZXR1cm4gdGhpcy54YiE9bnVsbDtjYXNlIDQ6cmV0dXJuISF0aGlzLnNiO2Nhc2UgNTpyZXR1cm4hIXRoaXMucmImJnRoaXMucmIuaSE9MDtjYXNlIDY6cmV0dXJuISF0aGlzLnZiJiZ0aGlzLnZiLmkhPTA7Y2FzZSA3OnJldHVybiEhbW90KHRoaXMpfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksTzIpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxPMiksdCkpfSxoLlpoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXdDbih0aGlzLHQpLG58fEhrZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGdSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOlNWKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDM6Q1YodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgNDpOdWUodGhpcyxsKG4sNDgwKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5yYiYmKHRoaXMucmI9bmV3IHd5KHRoaXMsbDEsdGhpcykpLCRyKHRoaXMucmIpLCF0aGlzLnJiJiYodGhpcy5yYj1uZXcgd3kodGhpcyxsMSx0aGlzKSksQXModGhpcy5yYixsKG4sMTYpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgVjgodTEsdGhpcyw2LDcpKSwkcih0aGlzLnZiKSwhdGhpcy52YiYmKHRoaXMudmI9bmV3IFY4KHUxLHRoaXMsNiw3KSksQXModGhpcy52YixsKG4sMTYpKTtyZXR1cm59dWYodGhpcyx0LXlyKChUbigpLE8yKSksTW4oKHI9bChLbih0aGlzLDE2KSwyOSkscnx8TzIpLHQpLG4pfSxoLmVpPWZ1bmN0aW9uKHQpe3ZhciBuLHI7aWYodCYmdGhpcy5yYilmb3Iocj1uZXcgb3IodGhpcy5yYik7ci5lIT1yLmkuZ2MoKTspbj1ncihyKSxEZShuLDM2NCkmJihsKG4sMzY0KS53PW51bGwpO3B4KHRoaXMsNjQsdCl9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxPMn0saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpTVih0aGlzLG51bGwpO3JldHVybjtjYXNlIDM6Q1YodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA0Ok51ZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDU6IXRoaXMucmImJih0aGlzLnJiPW5ldyB3eSh0aGlzLGwxLHRoaXMpKSwkcih0aGlzLnJiKTtyZXR1cm47Y2FzZSA2OiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgVjgodTEsdGhpcyw2LDcpKSwkcih0aGlzLnZiKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLE8yKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8TzIpLHQpKX0saC5waT1mdW5jdGlvbigpe3l1ZSh0aGlzKX0saC52aT1mdW5jdGlvbigpe3JldHVybiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgd3kodGhpcyxsMSx0aGlzKSksdGhpcy5yYn0saC53aT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNifSxoLnhpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWJ9LGgueWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54Yn0saC56aT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnlifSxoLkFpPWZ1bmN0aW9uKHQpe3RoaXMudWI9dH0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLkRiJjY0P0NBKHRoaXMpOih0PW5ldyBBZihDQSh0aGlzKSksdC5hKz0iIChuc1VSSTogIixYbyh0LHRoaXMueWIpLHQuYSs9IiwgbnNQcmVmaXg6ICIsWG8odCx0aGlzLnhiKSx0LmErPSIpIix0LmEpfSxoLnhiPW51bGwsaC55Yj1udWxsLEkoR24sIkVQYWNrYWdlSW1wbCIsMTg0KSxEKDU2OSwxODQsezExMDoxLDIxMTU6MSw1Njk6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwyNDE6MSwxMTQ6MSw1NDoxLDk5OjEsMTU4OjEsMTg0OjEsMTE5OjEsMTIwOjEsNjkwOjF9LGsydCksaC5xPSExLGgucj0hMTt2YXIgX190PSExO0koc3YsIkVsa0dyYXBoUGFja2FnZUltcGwiLDU2OSksRCgzNjYsNzQwLHsxMTA6MSwzNDI6MSwxNjc6MSwxMzU6MSw0MjI6MSwzNjY6MSw5NjoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0sc2spLGguQWg9ZnVuY3Rpb24odCl7cmV0dXJuIGh4ZSh0aGlzLHQpfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godCl7Y2FzZSA3OnJldHVybiB2b3QodGhpcyk7Y2FzZSA4OnJldHVybiB0aGlzLmF9cmV0dXJuIHg4ZSh0aGlzLHQsbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKG4pe2Nhc2UgNzpyZXR1cm4gdGhpcy5DYiYmKHI9KGE9dGhpcy5EYj4+MTYsYT49MD9oeGUodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtYSxudWxsLHIpKSksSjRlKHRoaXMsbCh0LDE2Nykscil9cmV0dXJuIE11ZSh0aGlzLHQsbixyKX0saC5VaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIG49PTc/SjRlKHRoaXMsbnVsbCxyKTpkY2UodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgNzpyZXR1cm4hIXZvdCh0aGlzKTtjYXNlIDg6cmV0dXJuIXZuKCIiLHRoaXMuYSl9cmV0dXJuIF84ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgNzpVOWUodGhpcyxsKG4sMTY3KSk7cmV0dXJuO2Nhc2UgODpsN2UodGhpcyxlaShuKSk7cmV0dXJufUN4ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxkUGV9LGgua2k9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgNzpVOWUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA4Omw3ZSh0aGlzLCIiKTtyZXR1cm59TjhlKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gbHB0KHRoaXMpfSxoLmE9IiIsSShzdiwiRWxrTGFiZWxJbXBsIiwzNjYpLEQoMjA3LDc0MSx7MTEwOjEsMzQyOjEsODQ6MSwxNjc6MSwyNzoxLDQyMjoxLDIwNzoxLDk2OjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSxhXyksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gcHhlKHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaCh0KXtjYXNlIDk6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoSGwsdGhpcyw5LDkpKSx0aGlzLmM7Y2FzZSAxMDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBudChBaSx0aGlzLDEwLDExKSksdGhpcy5hO2Nhc2UgMTE6cmV0dXJuIGRzKHRoaXMpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgbnQoanMsdGhpcywxMiwzKSksdGhpcy5iO2Nhc2UgMTM6cmV0dXJuIEhuKCksIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLHRoaXMuYS5pPjB9cmV0dXJuIEo4ZSh0aGlzLHQsbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKG4pe2Nhc2UgOTpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBudChIbCx0aGlzLDksOSkpLFJ1KHRoaXMuYyx0LHIpO2Nhc2UgMTA6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLFJ1KHRoaXMuYSx0LHIpO2Nhc2UgMTE6cmV0dXJuIHRoaXMuQ2ImJihyPShhPXRoaXMuRGI+PjE2LGE+PTA/cHhlKHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLWEsbnVsbCxyKSkpLHM0ZSh0aGlzLGwodCwyNykscik7Y2FzZSAxMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBudChqcyx0aGlzLDEyLDMpKSxSdSh0aGlzLmIsdCxyKX1yZXR1cm4gdnhlKHRoaXMsdCxuLHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2gobil7Y2FzZSA5OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IG50KEhsLHRoaXMsOSw5KSksVG8odGhpcy5jLHQscik7Y2FzZSAxMDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBudChBaSx0aGlzLDEwLDExKSksVG8odGhpcy5hLHQscik7Y2FzZSAxMTpyZXR1cm4gczRlKHRoaXMsbnVsbCxyKTtjYXNlIDEyOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IG50KGpzLHRoaXMsMTIsMykpLFRvKHRoaXMuYix0LHIpfXJldHVybiB3eGUodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgOTpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSAxMDpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSAxMTpyZXR1cm4hIWRzKHRoaXMpO2Nhc2UgMTI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgMTM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLHRoaXMuYS5pPjB9cmV0dXJuIEg3ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgOTohdGhpcy5jJiYodGhpcy5jPW5ldyBudChIbCx0aGlzLDksOSkpLCRyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoSGwsdGhpcyw5LDkpKSxBcyh0aGlzLmMsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLCRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLEFzKHRoaXMuYSxsKG4sMTYpKTtyZXR1cm47Y2FzZSAxMTpMVSh0aGlzLGwobiwyNykpO3JldHVybjtjYXNlIDEyOiF0aGlzLmImJih0aGlzLmI9bmV3IG50KGpzLHRoaXMsMTIsMykpLCRyKHRoaXMuYiksIXRoaXMuYiYmKHRoaXMuYj1uZXcgbnQoanMsdGhpcywxMiwzKSksQXModGhpcy5iLGwobiwxNikpO3JldHVybn1JOWUodGhpcyx0LG4pfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIHN1KCksZ1BlfSxoLmtpPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDk6IXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoSGwsdGhpcyw5LDkpKSwkcih0aGlzLmMpO3JldHVybjtjYXNlIDEwOiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KEFpLHRoaXMsMTAsMTEpKSwkcih0aGlzLmEpO3JldHVybjtjYXNlIDExOkxVKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgbnQoanMsdGhpcywxMiwzKSksJHIodGhpcy5iKTtyZXR1cm59SzhlKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gb2tlKHRoaXMpfSxJKHN2LCJFbGtOb2RlSW1wbCIsMjA3KSxEKDE5Myw3NDEsezExMDoxLDM0MjoxLDg0OjEsMTY3OjEsMTIzOjEsNDIyOjEsMTkzOjEsOTY6MSw5NDoxLDkzOjEsNTg6MSwxMTQ6MSw1NDoxLDk5OjEsMTE5OjEsMTIwOjF9LGp3ZSksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gZnhlKHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0PT05P00xKHRoaXMpOko4ZSh0aGlzLHQsbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKG4pe2Nhc2UgOTpyZXR1cm4gdGhpcy5DYiYmKHI9KGE9dGhpcy5EYj4+MTYsYT49MD9meGUodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtYSxudWxsLHIpKSksWHllKHRoaXMsbCh0LDI3KSxyKX1yZXR1cm4gdnhlKHRoaXMsdCxuLHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbj09OT9YeWUodGhpcyxudWxsLHIpOnd4ZSh0aGlzLHQsbixyKX0saC5XaD1mdW5jdGlvbih0KXtyZXR1cm4gdD09OT8hIU0xKHRoaXMpOkg3ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgOTp6OWUodGhpcyxsKG4sMjcpKTtyZXR1cm59STllKHRoaXMsdCxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBzdSgpLHBQZX0saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSA5Ono5ZSh0aGlzLG51bGwpO3JldHVybn1LOGUodGhpcyx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBKYnQodGhpcyl9LEkoc3YsIkVsa1BvcnRJbXBsIiwxOTMpO3ZhciBBX3Q9a3MoU28sIkJhc2ljRU1hcC9FbnRyeSIpO0QoMTEyMiwxMjAsezExMDoxLDQ0OjEsOTQ6MSw5MzoxLDEzNjoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSxrJCksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGgubGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGZ3KHRoaXMpfSxoLkRpPWZ1bmN0aW9uKHQpe2g3ZSh0aGlzLGwodCwxNDkpKX0saC5MaD1mdW5jdGlvbih0LG4scil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iO2Nhc2UgMTpyZXR1cm4gdGhpcy5jfXJldHVybiByVSh0aGlzLHQsbixyKX0saC5XaD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5iO2Nhc2UgMTpyZXR1cm4gdGhpcy5jIT1udWxsfXJldHVybiBudWUodGhpcyx0KX0saC5iaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0KXtjYXNlIDA6aDdlKHRoaXMsbChuLDE0OSkpO3JldHVybjtjYXNlIDE6dTdlKHRoaXMsbik7cmV0dXJufSR1ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxDZ30saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOmg3ZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDE6dTdlKHRoaXMsbnVsbCk7cmV0dXJufUZ1ZSh0aGlzLHQpfSxoLkJpPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuYT09LTEmJih0PXRoaXMuYix0aGlzLmE9dD9lcyh0KTowKSx0aGlzLmF9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLkNpPWZ1bmN0aW9uKHQpe3RoaXMuYT10fSxoLm5kPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXRoaXMuYyx1N2UodGhpcyx0KSxufSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuRGImNjQ/ZzAodGhpcyk6KHQ9bmV3IHRiLGhpKGhpKGhpKHQsdGhpcy5iP3RoaXMuYi5QZygpOnVsKSxQaGUpLGpfKHRoaXMuYykpLHQuYSl9LGguYT0tMSxoLmM9bnVsbDt2YXIgTDI9SShzdiwiRWxrUHJvcGVydHlUb1ZhbHVlTWFwRW50cnlJbXBsIiwxMTIyKTtEKDk5NiwxLHt9LFQkKSxJKG5vLCJKc29uQWRhcHRlciIsOTk2KSxEKDIxNiw2MyxscCxkZCksSShubywiSnNvbkltcG9ydEV4Y2VwdGlvbiIsMjE2KSxEKDg2OCwxLHt9LGNndCksSShubywiSnNvbkltcG9ydGVyIiw4NjgpLEQoOTAzLDEse30scHR0KSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDAkVHlwZSIsOTAzKSxEKDkwNCwxLHt9LGJ0dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQxJFR5cGUiLDkwNCksRCg5MTIsMSx7fSxGWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMTAkVHlwZSIsOTEyKSxEKDkxNCwxLHt9LG10dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQxMSRUeXBlIiw5MTQpLEQoOTE1LDEse30sdnR0KSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDEyJFR5cGUiLDkxNSksRCg5MjEsMSx7fSxNYXQpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMTMkVHlwZSIsOTIxKSxEKDkyMCwxLHt9LERhdCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQxNCRUeXBlIiw5MjApLEQoOTE2LDEse30sd3R0KSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE1JFR5cGUiLDkxNiksRCg5MTcsMSx7fSx5dHQpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMTYkVHlwZSIsOTE3KSxEKDkxOCwxLHt9LHh0dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQxNyRUeXBlIiw5MTgpLEQoOTE5LDEse30sa3R0KSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE4JFR5cGUiLDkxOSksRCg5MjQsMSx7fSxSWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMTkkVHlwZSIsOTI0KSxEKDkwNSwxLHt9LGpYZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQyJFR5cGUiLDkwNSksRCg5MjIsMSx7fSwkWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjAkVHlwZSIsOTIyKSxEKDkyMywxLHt9LHpYZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQyMSRUeXBlIiw5MjMpLEQoOTI3LDEse30scVhlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDIyJFR5cGUiLDkyNyksRCg5MjUsMSx7fSxIWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjMkVHlwZSIsOTI1KSxEKDkyNiwxLHt9LFZYZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQyNCRUeXBlIiw5MjYpLEQoOTI5LDEse30sVVhlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI1JFR5cGUiLDkyOSksRCg5MjgsMSx7fSxHWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjYkVHlwZSIsOTI4KSxEKDkzMCwxLGZyLEV0dCksaC5DZD1mdW5jdGlvbih0KXtPdm4odGhpcy5iLHRoaXMuYSxlaSh0KSl9LEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjckVHlwZSIsOTMwKSxEKDkzMSwxLGZyLFR0dCksaC5DZD1mdW5jdGlvbih0KXtOdm4odGhpcy5iLHRoaXMuYSxlaSh0KSl9LEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjgkVHlwZSIsOTMxKSxEKDkzMiwxLHt9LEN0dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQyOSRUeXBlIiw5MzIpLEQoOTA4LDEse30sS1hlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMkVHlwZSIsOTA4KSxEKDkzMywxLHt9LFN0dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQzMCRUeXBlIiw5MzMpLEQoOTM0LDEse30sV1hlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMxJFR5cGUiLDkzNCksRCg5MzUsMSx7fSxZWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMzIkVHlwZSIsOTM1KSxEKDkzNiwxLHt9LFhYZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQzMyRUeXBlIiw5MzYpLEQoOTM3LDEse30sUVhlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM0JFR5cGUiLDkzNyksRCg4NzAsMSx7fSxKWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMzUkVHlwZSIsODcwKSxEKDk0MSwxLHt9LHlpdCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQzNiRUeXBlIiw5NDEpLEQoOTM4LDEsZnIsWlhlKSxoLkNkPWZ1bmN0aW9uKHQpe2ptbih0aGlzLmEsbCh0LDM3NykpfSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM3JFR5cGUiLDkzOCksRCg5MzksMSxmcixfdHQpLGguQ2Q9ZnVuY3Rpb24odCl7eWxuKHRoaXMuYSx0aGlzLmIsbCh0LDE2NikpfSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM4JFR5cGUiLDkzOSksRCg5NDAsMSxmcixBdHQpLGguQ2Q9ZnVuY3Rpb24odCl7eGxuKHRoaXMuYSx0aGlzLmIsbCh0LDE2NikpfSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM5JFR5cGUiLDk0MCksRCg5MDYsMSx7fSxlUWUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkNCRUeXBlIiw5MDYpLEQoOTQyLDEsZnIsdFFlKSxoLkNkPWZ1bmN0aW9uKHQpeyRtbih0aGlzLmEsbCh0LDgpKX0sSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQ0MCRUeXBlIiw5NDIpLEQoOTA3LDEse30sblFlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDUkVHlwZSIsOTA3KSxEKDkxMSwxLHt9LHJRZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQ2JFR5cGUiLDkxMSksRCg5MDksMSx7fSxpUWUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkNyRUeXBlIiw5MDkpLEQoOTEwLDEse30sc1FlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDgkVHlwZSIsOTEwKSxEKDkxMywxLHt9LGFRZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQ5JFR5cGUiLDkxMyksRCg5NjEsMSxmcixvUWUpLGguQ2Q9ZnVuY3Rpb24odCl7SjgodGhpcy5hLG5ldyB5eShlaSh0KSkpfSxJKG5vLCJKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDAkVHlwZSIsOTYxKSxEKDk2MiwxLGZyLGNRZSksaC5DZD1mdW5jdGlvbih0KXtEZ24odGhpcy5hLGwodCwyNDUpKX0sSShubywiSnNvbk1ldGFEYXRhQ29udmVydGVyL2xhbWJkYSQxJFR5cGUiLDk2MiksRCg5NjMsMSxmcix1UWUpLGguQ2Q9ZnVuY3Rpb24odCl7TTJuKHRoaXMuYSxsKHQsMTQzKSl9LEkobm8sIkpzb25NZXRhRGF0YUNvbnZlcnRlci9sYW1iZGEkMiRUeXBlIiw5NjMpLEQoOTY0LDEsZnIsbFFlKSxoLkNkPWZ1bmN0aW9uKHQpe0lnbih0aGlzLmEsbCh0LDE3MCkpfSxJKG5vLCJKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDMkVHlwZSIsOTY0KSxEKDI0NSwyMix7MzoxLDM0OjEsMjI6MSwyNDU6MX0sUjgpO3ZhciBiWSxtWSxYZ2Usdlksd1kseVksUWdlLEpnZSx4WT1GcihJUCwiR3JhcGhGZWF0dXJlIiwyNDUsSHIscHduLGlkbiksTF90O0QoMTEsMSx7MzQ6MSwxNDk6MX0sVWksdnMscG4sSGEpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFNobih0aGlzLGwodCwxNDkpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gZW90KHRoaXMsdCl9LGguU2c9ZnVuY3Rpb24oKXtyZXR1cm4gSXQodGhpcyl9LGguUGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHMyKHRoaXMuYil9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxJKElQLCJQcm9wZXJ0eSIsMTEpLEQoNjcxLDEsaWksTmllKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEI0bih0aGlzLGwodCw5NiksbChuLDk2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShJUCwiUHJvcGVydHlIb2xkZXJDb21wYXJhdG9yIiw2NzEpLEQoNzA5LDEsT2EseXdlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gRnZuKHRoaXMpfSxoLlFiPWZ1bmN0aW9uKCl7YVplKCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYX0sSShxRywiRWxrR3JhcGhVdGlsL0FuY2VzdG9ySXRlcmF0b3IiLDcwOSk7dmFyIG1QZT1rcyhTbywiRUxpc3QiKTtEKDcwLDU2LHsyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNzA6MSw2MToxfSksaC5iZD1mdW5jdGlvbih0LG4pe19BKHRoaXMsdCxuKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gcXIodGhpcyx0KX0saC5jZD1mdW5jdGlvbih0LG4pe3JldHVybiBON2UodGhpcyx0LG4pfSxoLkdjPWZ1bmN0aW9uKHQpe3JldHVybiBBcyh0aGlzLHQpfSxoLklpPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIOCh0aGlzKX0saC5KaT1mdW5jdGlvbigpe3JldHVybiBuZXcgQ08odGhpcyl9LGguS2k9ZnVuY3Rpb24odCl7cmV0dXJuIG1OKHRoaXMsdCl9LGguTGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5NaT1mdW5jdGlvbih0LG4pe30saC5OaT1mdW5jdGlvbigpe30saC5PaT1mdW5jdGlvbih0LG4pe05vZSh0aGlzLHQsbil9LGguUGk9ZnVuY3Rpb24odCxuLHIpe30saC5RaT1mdW5jdGlvbih0LG4pe30saC5SaT1mdW5jdGlvbih0LG4scil7fSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBCYnQodGhpcyx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBNN2UodGhpcyl9LGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgb3IodGhpcyl9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHE4KHRoaXMpfSxoLmZkPWZ1bmN0aW9uKHQpe3ZhciBuO2lmKG49dGhpcy5nYygpLHQ8MHx8dD5uKXRocm93IHVlKG5ldyBteSh0LG4pKTtyZXR1cm4gbmV3IGphZSh0aGlzLHQpfSxoLlVpPWZ1bmN0aW9uKHQsbil7dGhpcy5UaSh0LHRoaXMuZGQobikpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiBzVih0aGlzLHQpfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG59LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbjYodGhpcyx0LG4pfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFQ4ZSh0aGlzKX0saC5ZaT1mdW5jdGlvbigpe3JldHVybiEwfSxoLlppPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEVFKHRoaXMsbil9LEkoU28sIkFic3RyYWN0RUxpc3QiLDcwKSxEKDY2LDcwLEJkLFgyLEx3LFQ3ZSksaC5FaT1mdW5jdGlvbih0LG4pe3JldHVybiBEdWUodGhpcyx0LG4pfSxoLkZpPWZ1bmN0aW9uKHQpe3JldHVybiBPZHQodGhpcyx0KX0saC5HaT1mdW5jdGlvbih0LG4pe0lOKHRoaXMsdCxuKX0saC5IaT1mdW5jdGlvbih0KXt0Tih0aGlzLHQpfSxoLiRpPWZ1bmN0aW9uKHQpe3JldHVybiBSNmUodGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe3VBKHRoaXMpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBqRSh0aGlzLHQpfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiBPZSh0aGlzLHQpfSxoLl9pPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTsrK3RoaXMuaixyPXRoaXMuZz09bnVsbD8wOnRoaXMuZy5sZW5ndGgsdD5yJiYoYT10aGlzLmcsbj1yKyhyLzJ8MCkrNCxuPHQmJihuPXQpLHRoaXMuZz10aGlzLmFqKG4pLGEhPW51bGwmJnB1KGEsMCx0aGlzLmcsMCx0aGlzLmkpKX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gdGd0KHRoaXMsdCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pPT0wfSxoLlRpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEh1ZSh0aGlzLHQsbil9LGguYWo9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHdhLFJuLDEsdCw1LDEpfSxoLlZpPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdbdF19LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHZ4KHRoaXMsdCl9LGguWGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gVW9lKHRoaXMsdCxuKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gYTZlKHRoaXMpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBPOGUodGhpcyx0KX0saC5pPTA7dmFyIHZQZT1JKFNvLCJCYXNpY0VMaXN0Iiw2Niksd1BlPWtzKFNvLCJUcmVlSXRlcmF0b3IiKTtEKDcwOCw2NixaZmUpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmc9PW51bGwmJiF0aGlzLmM/SDVlKHRoaXMpOnRoaXMuZz09bnVsbHx8dGhpcy5pIT0wJiZsKHRoaXMuZ1t0aGlzLmktMV0sNTEpLk9iKCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gQ1UodGhpcyl9LGguUWI9ZnVuY3Rpb24oKXtpZighdGhpcy5lKXRocm93IHVlKG5ldyBuYygiVGhlcmUgaXMgbm8gdmFsaWQgb2JqZWN0IHRvIHJlbW92ZS4iKSk7dGhpcy5lLlFiKCl9LGguYz0hMSxJKFNvLCJBYnN0cmFjdFRyZWVJdGVyYXRvciIsNzA4KSxEKDcwMCw3MDgsWmZlLGh5ZSksaC5iaj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1sKHQsNTgpLkdoKCkuS2MoKSxEZShuLDI4NykmJmwobiwyODcpLndsKG5ldyBYbmUpLG59LEkocUcsIkVsa0dyYXBoVXRpbC9Qcm9wZXJ0aWVzU2tpcHBpbmdUcmVlSXRlcmF0b3IiLDcwMCksRCg5NjUsMSx7fSxYbmUpLEkocUcsIkVsa0dyYXBoVXRpbC9Qcm9wZXJ0aWVzU2tpcHBpbmdUcmVlSXRlcmF0b3IvMSIsOTY1KTt2YXIgbEYsWmdlLGhGPUkocUcsIkVsa1JlZmxlY3QiLG51bGwpO0QoOTAxLDEsbjQsTFMpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIEJIKCksSTJuKGwodCwxODEpKX0sSShxRywiRWxrUmVmbGVjdC9sYW1iZGEkMCRUeXBlIiw5MDEpO3ZhciBRYjtrcyhTbywiUmVzb3VyY2VMb2NhdG9yIiksRCgxMDY1LDEse30pLEkoU28sIkRlbGVnYXRpbmdSZXNvdXJjZUxvY2F0b3IiLDEwNjUpLEQoMTA2NiwxMDY1LHt9KSxJKCJvcmcuZWNsaXBzZS5lbWYuY29tbW9uIiwiRU1GUGx1Z2luIiwxMDY2KTt2YXIgZXBlPWtzKFE0dCwiQWRhcHRlciIpLE9Pbj1rcyhRNHQsIk5vdGlmaWNhdGlvbiIpO0QoMTE3NCwxLFNTZSksaC5jaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguZGo9ZnVuY3Rpb24odCl7fSxoLmVqPWZ1bmN0aW9uKHQpe3RoaXMuZD10fSxoLmZqPWZ1bmN0aW9uKHQpe3RoaXMuZD09dCYmKHRoaXMuZD1udWxsKX0saC5kPW51bGwsSShSeCwiQWRhcHRlckltcGwiLDExNzQpLEQoMjA5Myw3MCxKNHQpLGguRWk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQThlKHRoaXMsdCxuKX0saC5GaT1mdW5jdGlvbih0KXt2YXIgbixyLGE7aWYoKyt0aGlzLmosdC5kYygpKXJldHVybiExO2ZvcihuPXRoaXMuRWooKSxhPXQuS2MoKTthLk9iKCk7KXI9YS5QYigpLHRoaXMucmoodGhpcy5aaShuLHIpKSwrK247cmV0dXJuITB9LGguR2k9ZnVuY3Rpb24odCxuKXtNcnQodGhpcyx0LG4pfSxoLkhpPWZ1bmN0aW9uKHQpe3RhdCh0aGlzLHQpfSxoLnBqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2ooKX0saC4kYj1mdW5jdGlvbigpe0FPKHRoaXMsdGhpcy5FaigpLHRoaXMuRmooKSl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudWoodCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudmoodCl9LGgucWo9ZnVuY3Rpb24odCxuKXt0aGlzLkJqKCkuVW0oKX0saC5yaj1mdW5jdGlvbih0KXt0aGlzLkJqKCkuVW0oKX0saC5zaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkJqKCl9LGgudGo9ZnVuY3Rpb24oKXt0aGlzLkJqKCkuVW0oKX0saC51aj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGgudmo9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuQmooKS5VbSgpfSxoLndqPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC54aj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGgueWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGguemo9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuQmooKS5VbSgpfSxoLkFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQmooKS5VbSgpfSxoLkNqPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC5Eaj1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC5Faj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC5Gaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC5Haj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGguSGo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud2oodCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuV2kodCx0aGlzLnhqKHQpKX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnlqKCl9LGguZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuemoodCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5BaigpfSxoLlRpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFV4ZSh0aGlzLHQsbil9LGguVmk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGoodCl9LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHJIKHRoaXMsdCl9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49dGhpcy5kZCh0KSxuPj0wPyh0aGlzLmdkKG4pLCEwKTohMX0saC5YaT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLkRqKHQsdGhpcy5aaSh0LG4pKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVqKCl9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GaigpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkdqKHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGooKX0sSShTbywiRGVsZWdhdGluZ0VMaXN0IiwyMDkzKSxEKDIwOTQsMjA5MyxKNHQpLGguRWk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gd2tlKHRoaXMsdCxuKX0saC5GaT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5FaSh0aGlzLkVqKCksdCl9LGguR2k9ZnVuY3Rpb24odCxuKXtFMnQodGhpcyx0LG4pfSxoLkhpPWZ1bmN0aW9uKHQpe2gydCh0aGlzLHQpfSxoLkxpPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuTWooKX0saC4kYj1mdW5jdGlvbigpe3RMKHRoaXMpfSxoLklqPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBaYXQodGhpcyx0LG4scixhLG8pfSxoLkpqPWZ1bmN0aW9uKHQpe05pKHRoaXMuamooKSx0KX0saC5Laj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLkxqPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5Naj1mdW5jdGlvbigpe3JldHVybiExfSxoLk5qPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG59LGguT2o9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbn0saC5Qaj1mdW5jdGlvbigpe3JldHVybiExfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuQWooKX0saC5UaT1mdW5jdGlvbih0LG4pe3ZhciByLGE7cmV0dXJuIHRoaXMuUGooKT8oYT10aGlzLlFqKCkscj1VeGUodGhpcyx0LG4pLHRoaXMuSmoodGhpcy5Jaig3LHB0KG4pLHIsdCxhKSkscik6VXhlKHRoaXMsdCxuKX0saC5nZD1mdW5jdGlvbih0KXt2YXIgbixyLGEsbztyZXR1cm4gdGhpcy5QaigpPyhyPW51bGwsYT10aGlzLlFqKCksbj10aGlzLklqKDQsbz1ySCh0aGlzLHQpLG51bGwsdCxhKSx0aGlzLk1qKCkmJm8/KHI9dGhpcy5PaihvLHIpLHI/KHIubmoobiksci5vaigpKTp0aGlzLkpqKG4pKTpyPyhyLm5qKG4pLHIub2ooKSk6dGhpcy5KaihuKSxvKToobz1ySCh0aGlzLHQpLHRoaXMuTWooKSYmbyYmKHI9dGhpcy5PaihvLG51bGwpLHImJnIub2ooKSksbyl9LGguWGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTW10KHRoaXMsdCxuKX0sSShSeCwiRGVsZWdhdGluZ05vdGlmeWluZ0xpc3RJbXBsIiwyMDk0KSxEKDE1MiwxLFlQKSxoLm5qPWZ1bmN0aW9uKHQpe3JldHVybiBNeGUodGhpcyx0KX0saC5vaj1mdW5jdGlvbigpe3FvZSh0aGlzKX0saC5naj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguS2o9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5Saj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLmhqPWZ1bmN0aW9uKHQpe3JldHVybi0xfSxoLmlqPWZ1bmN0aW9uKCl7cmV0dXJuIG1idCh0aGlzKX0saC5qaj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLmtqPWZ1bmN0aW9uKCl7cmV0dXJuIFg5ZSh0aGlzKX0saC5saj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm88MD90aGlzLm88LTI/LTItdGhpcy5vLTE6LTE6dGhpcy5vfSxoLlNqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgubWo9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQjtzd2l0Y2godGhpcy5kKXtjYXNlIDE6Y2FzZSAyOnN3aXRjaChvPXQuZ2ooKSxvKXtjYXNlIDE6Y2FzZSAyOmlmKGY9dC5qaigpLHFlKGYpPT09cWUodGhpcy5qaigpKSYmdGhpcy5oaihudWxsKT09dC5oaihudWxsKSlyZXR1cm4gdGhpcy5nPXQuaWooKSx0LmdqKCk9PTEmJih0aGlzLmQ9MSksITB9Y2FzZSA0Ontzd2l0Y2gobz10LmdqKCksbyl7Y2FzZSA0OntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuamooKSkmJnRoaXMuaGoobnVsbCk9PXQuaGoobnVsbCkpcmV0dXJuIEM9QmtlKHRoaXMpLEU9dGhpcy5vPDA/dGhpcy5vPC0yPy0yLXRoaXMuby0xOi0xOnRoaXMubyxnPXQubGooKSx0aGlzLmQ9NixCPW5ldyBMdygyKSxFPD1nPyhxcihCLHRoaXMubikscXIoQix0LmtqKCkpLHRoaXMuZz1oZShsZShWciwxKSxkaSwyOCwxNSxbdGhpcy5vPUUsZysxXSkpOihxcihCLHQua2ooKSkscXIoQix0aGlzLm4pLHRoaXMuZz1oZShsZShWciwxKSxkaSwyOCwxNSxbdGhpcy5vPWcsRV0pKSx0aGlzLm49QixDfHwodGhpcy5vPS0yLXRoaXMuby0xKSwhMDticmVha319YnJlYWt9Y2FzZSA2Ontzd2l0Y2gobz10LmdqKCksbyl7Y2FzZSA0OntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuamooKSkmJnRoaXMuaGoobnVsbCk9PXQuaGoobnVsbCkpe2ZvcihDPUJrZSh0aGlzKSxnPXQubGooKSxMPWwodGhpcy5nLDUzKSxhPVdlKFZyLGRpLDI4LEwubGVuZ3RoKzEsMTUsMSksbj0wO248TC5sZW5ndGgmJih3PUxbbl0sdzw9Zyk7KWFbbisrXT13LCsrZztmb3Iocj1sKHRoaXMubiwxNSksci5iZChuLHQua2ooKSksYVtuXT1nOysrbjxhLmxlbmd0aDspYVtuXT1MW24tMV07cmV0dXJuIHRoaXMuZz1hLEN8fCh0aGlzLm89LTItYVswXSksITB9YnJlYWt9fWJyZWFrfX1yZXR1cm4hMX0saC5JYj1mdW5jdGlvbigpe3ZhciB0LG4scixhO3N3aXRjaChhPW5ldyBBZihfbSh0aGlzLlJtKSsiQCIrKG49ZXModGhpcyk+Pj4wLG4udG9TdHJpbmcoMTYpKSksYS5hKz0iIChldmVudFR5cGU6ICIsdGhpcy5kKXtjYXNlIDE6e2EuYSs9IlNFVCI7YnJlYWt9Y2FzZSAyOnthLmErPSJVTlNFVCI7YnJlYWt9Y2FzZSAzOnthLmErPSJBREQiO2JyZWFrfWNhc2UgNTp7YS5hKz0iQUREX01BTlkiO2JyZWFrfWNhc2UgNDp7YS5hKz0iUkVNT1ZFIjticmVha31jYXNlIDY6e2EuYSs9IlJFTU9WRV9NQU5ZIjticmVha31jYXNlIDc6e2EuYSs9Ik1PVkUiO2JyZWFrfWNhc2UgODp7YS5hKz0iUkVNT1ZJTkdfQURBUFRFUiI7YnJlYWt9Y2FzZSA5OnthLmErPSJSRVNPTFZFIjticmVha31kZWZhdWx0Ontpc2UoYSx0aGlzLmQpO2JyZWFrfX1pZihpbXQodGhpcykmJihhLmErPSIsIHRvdWNoOiB0cnVlIiksYS5hKz0iLCBwb3NpdGlvbjogIixpc2UoYSx0aGlzLm88MD90aGlzLm88LTI/LTItdGhpcy5vLTE6LTE6dGhpcy5vKSxhLmErPSIsIG5vdGlmaWVyOiAiLE9fKGEsdGhpcy5qaigpKSxhLmErPSIsIGZlYXR1cmU6ICIsT18oYSx0aGlzLktqKCkpLGEuYSs9Iiwgb2xkVmFsdWU6ICIsT18oYSxYOWUodGhpcykpLGEuYSs9IiwgbmV3VmFsdWU6ICIsdGhpcy5kPT02JiZEZSh0aGlzLmcsNTMpKXtmb3Iocj1sKHRoaXMuZyw1MyksYS5hKz0iWyIsdD0wO3Q8ci5sZW5ndGg7KWEuYSs9clt0XSwrK3Q8ci5sZW5ndGgmJihhLmErPUNvKTthLmErPSJdIn1lbHNlIE9fKGEsbWJ0KHRoaXMpKTtyZXR1cm4gYS5hKz0iLCBpc1RvdWNoOiAiLEdwKGEsaW10KHRoaXMpKSxhLmErPSIsIHdhc1NldDogIixHcChhLEJrZSh0aGlzKSksYS5hKz0iKSIsYS5hfSxoLmQ9MCxoLmU9MCxoLmY9MCxoLmo9MCxoLms9MCxoLm89MCxoLnA9MCxJKFJ4LCJOb3RpZmljYXRpb25JbXBsIiwxNTIpLEQoMTE4OCwxNTIsWVAsWmF0KSxoLktqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5LaigpfSxoLmhqPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuTGooKX0saC5qaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuamooKX0sSShSeCwiRGVsZWdhdGluZ05vdGlmeWluZ0xpc3RJbXBsLzEiLDExODgpLEQoMjUxLDY2LEJkLEMkLG5iKSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiBTMXQodGhpcyxsKHQsMzc4KSl9LGgubmo9ZnVuY3Rpb24odCl7cmV0dXJuIFMxdCh0aGlzLHQpfSxoLm9qPWZ1bmN0aW9uKCl7dmFyIHQsbixyO2Zvcih0PTA7dDx0aGlzLmk7Kyt0KW49bCh0aGlzLmdbdF0sMzc4KSxyPW4uamooKSxyIT1udWxsJiZuLmdqKCkhPS0xJiZsKHIsOTQpLnhoKG4pfSxoLmFqPWZ1bmN0aW9uKHQpe3JldHVybiBXZShPT24sUm4sMzc4LHQsMCwxKX0sSShSeCwiTm90aWZpY2F0aW9uQ2hhaW5JbXBsIiwyNTEpLEQoMTUyNCw5MyxsNHQpLGgudWg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxoLndoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZiYxKSE9MH0saC5mPTEsSShSeCwiTm90aWZpZXJJbXBsIiwxNTI0KSxEKDIwOTEsNjYsQmQpLGguRWk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbGxlKHRoaXMsdCxuKX0saC5GaT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5FaSh0aGlzLmksdCl9LGguR2k9ZnVuY3Rpb24odCxuKXtFOWUodGhpcyx0LG4pfSxoLkhpPWZ1bmN0aW9uKHQpe1Z1ZSh0aGlzLHQpfSxoLkxpPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuTWooKX0saC4kYj1mdW5jdGlvbigpeyRyKHRoaXMpfSxoLklqPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBKYXQodGhpcyx0LG4scixhLG8pfSxoLkpqPWZ1bmN0aW9uKHQpe05pKHRoaXMuamooKSx0KX0saC5Laj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLkxqPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5Naj1mdW5jdGlvbigpe3JldHVybiExfSxoLlRqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguTmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbn0saC5Paj1mdW5jdGlvbih0LG4pe3JldHVybiBufSxoLlBqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pIT0wfSxoLlRpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEFBKHRoaXMsdCxuKX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4gVnkodGhpcyx0KX0saC5YaT1mdW5jdGlvbih0LG4pe3JldHVybiBLbXQodGhpcyx0LG4pfSxoLlVqPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG59LGguVmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbn0saC5Xaj1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJ9LEkoUngsIk5vdGlmeWluZ0xpc3RJbXBsIiwyMDkxKSxEKDExODcsMTUyLFlQLEphdCksaC5Laj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuS2ooKX0saC5oaj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLkxqKCl9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmpqKCl9LEkoUngsIk5vdGlmeWluZ0xpc3RJbXBsLzEiLDExODcpLEQoOTY2LDY2LEJkLE9ydCksaC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pPjEwPygoIXRoaXMuYnx8dGhpcy5jLmohPXRoaXMuYSkmJih0aGlzLmI9bmV3IFVfKHRoaXMpLHRoaXMuYT10aGlzLmopLFcwKHRoaXMuYix0KSk6akUodGhpcyx0KX0saC5ZaT1mdW5jdGlvbigpe3JldHVybiEwfSxoLmE9MCxJKFNvLCJBYnN0cmFjdEVMaXN0LzEiLDk2NiksRCgzMDIsNzcsc2hlLG15KSxJKFNvLCJBYnN0cmFjdEVMaXN0L0Jhc2ljSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsMzAyKSxEKDM3LDEsT2Esb3IpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5Yaj1mdW5jdGlvbigpe2lmKHRoaXMuaS5qIT10aGlzLmYpdGhyb3cgdWUobmV3IFhoKX0saC5Zaj1mdW5jdGlvbigpe3JldHVybiBncih0aGlzKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUhPXRoaXMuaS5nYygpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWWooKX0saC5RYj1mdW5jdGlvbigpe2pBKHRoaXMpfSxoLmU9MCxoLmY9MCxoLmc9LTEsSShTbywiQWJzdHJhY3RFTGlzdC9FSXRlcmF0b3IiLDM3KSxEKDI4NiwzNyxsZyxxOCxqYWUpLGguUWI9ZnVuY3Rpb24oKXtqQSh0aGlzKX0saC5SYj1mdW5jdGlvbih0KXtEMXQodGhpcyx0KX0saC5aaj1mdW5jdGlvbigpe3ZhciB0O3RyeXtyZXR1cm4gdD10aGlzLmQuWGIoLS10aGlzLmUpLHRoaXMuWGooKSx0aGlzLmc9dGhpcy5lLHR9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT8odGhpcy5YaigpLHVlKG5ldyBfYykpOnVlKG4pfX0saC4kaj1mdW5jdGlvbih0KXtCZHQodGhpcyx0KX0saC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUhPTB9LGguVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxoLlViPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmooKX0saC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUtMX0saC5XYj1mdW5jdGlvbih0KXt0aGlzLiRqKHQpfSxJKFNvLCJBYnN0cmFjdEVMaXN0L0VMaXN0SXRlcmF0b3IiLDI4NiksRCgzNTUsMzcsT2EsSDgpLGguWWo9ZnVuY3Rpb24oKXtyZXR1cm4gcnVlKHRoaXMpfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0sSShTbywiQWJzdHJhY3RFTGlzdC9Ob25SZXNvbHZpbmdFSXRlcmF0b3IiLDM1NSksRCgzOTgsMjg2LGxnLENPLGY0ZSksaC5SYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLllqPWZ1bmN0aW9uKCl7dmFyIHQ7dHJ5e3JldHVybiB0PXRoaXMuYy5WaSh0aGlzLmUpLHRoaXMuWGooKSx0aGlzLmc9dGhpcy5lKyssdH1jYXRjaChuKXt0aHJvdyBuPWJzKG4pLERlKG4sNzcpPyh0aGlzLlhqKCksdWUobmV3IF9jKSk6dWUobil9fSxoLlpqPWZ1bmN0aW9uKCl7dmFyIHQ7dHJ5e3JldHVybiB0PXRoaXMuYy5WaSgtLXRoaXMuZSksdGhpcy5YaigpLHRoaXMuZz10aGlzLmUsdH1jYXRjaChuKXt0aHJvdyBuPWJzKG4pLERlKG4sNzcpPyh0aGlzLlhqKCksdWUobmV3IF9jKSk6dWUobil9fSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5XYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKFNvLCJBYnN0cmFjdEVMaXN0L05vblJlc29sdmluZ0VMaXN0SXRlcmF0b3IiLDM5OCksRCgyMDgwLDcwLFo0dCksaC5FaT1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYobz1uLmdjKCksbyE9MCl7Zm9yKEM9bChLbih0aGlzLmEsNCksMTI5KSxMPUM9PW51bGw/MDpDLmxlbmd0aCx6PUwrbyxhPVNjZSh0aGlzLHopLEI9TC10LEI+MCYmcHUoQyx0LGEsdCtvLEIpLEU9bi5LYygpLGc9MDtnPG87KytnKXc9RS5QYigpLHI9dCtnLFhzZShhLHIsRUUodGhpcyx3KSk7Zm9yKFBFKHRoaXMsYSksZj0wO2Y8bzsrK2Ypdz1hW3RdLHRoaXMuTWkodCx3KSwrK3Q7cmV0dXJuITB9ZWxzZSByZXR1cm4rK3RoaXMuaiwhMX0saC5GaT1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYoYT10LmdjKCksYSE9MCl7Zm9yKEU9KHI9bChLbih0aGlzLmEsNCksMTI5KSxyPT1udWxsPzA6ci5sZW5ndGgpLEM9RSthLG49U2NlKHRoaXMsQyksdz10LktjKCksZj1FO2Y8QzsrK2YpZz13LlBiKCksWHNlKG4sZixFRSh0aGlzLGcpKTtmb3IoUEUodGhpcyxuKSxvPUU7bzxDOysrbylnPW5bb10sdGhpcy5NaShvLGcpO3JldHVybiEwfWVsc2UgcmV0dXJuKyt0aGlzLmosITF9LGguR2k9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZjthPWwoS24odGhpcy5hLDQpLDEyOSksbz1hPT1udWxsPzA6YS5sZW5ndGgscj1TY2UodGhpcyxvKzEpLGY9RUUodGhpcyxuKSx0IT1vJiZwdShhLHQscix0KzEsby10KSxUcyhyLHQsZiksUEUodGhpcyxyKSx0aGlzLk1pKHQsbil9LGguSGk9ZnVuY3Rpb24odCl7dmFyIG4scixhO2E9KHI9bChLbih0aGlzLmEsNCksMTI5KSxyPT1udWxsPzA6ci5sZW5ndGgpLG49U2NlKHRoaXMsYSsxKSxYc2UobixhLEVFKHRoaXMsdCkpLFBFKHRoaXMsbiksdGhpcy5NaShhLHQpfSxoLklpPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFdXQodGhpcyl9LGguSmk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBzdCh0aGlzKX0saC5LaT1mdW5jdGlvbih0KXt2YXIgbixyO2lmKHI9KG49bChLbih0aGlzLmEsNCksMTI5KSxuPT1udWxsPzA6bi5sZW5ndGgpLHQ8MHx8dD5yKXRocm93IHVlKG5ldyBteSh0LHIpKTtyZXR1cm4gbmV3IHhhdCh0aGlzLHQpfSxoLiRiPWZ1bmN0aW9uKCl7dmFyIHQsbjsrK3RoaXMuaix0PWwoS24odGhpcy5hLDQpLDEyOSksbj10PT1udWxsPzA6dC5sZW5ndGgsUEUodGhpcyxudWxsKSxOb2UodGhpcyxuLHQpfSxoLkhjPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGY7aWYobj1sKEtuKHRoaXMuYSw0KSwxMjkpLG4hPW51bGwpe2lmKHQhPW51bGwpe2ZvcihhPW4sbz0wLGY9YS5sZW5ndGg7bzxmOysrbylpZihyPWFbb10sUGkodCxyKSlyZXR1cm4hMH1lbHNlIGZvcihhPW4sbz0wLGY9YS5sZW5ndGg7bzxmOysrbylpZihyPWFbb10scWUocik9PT1xZSh0KSlyZXR1cm4hMH1yZXR1cm4hMX0saC5YYj1mdW5jdGlvbih0KXt2YXIgbixyO2lmKG49bChLbih0aGlzLmEsNCksMTI5KSxyPW49PW51bGw/MDpuLmxlbmd0aCx0Pj1yKXRocm93IHVlKG5ldyBteSh0LHIpKTtyZXR1cm4gblt0XX0saC5kZD1mdW5jdGlvbih0KXt2YXIgbixyLGE7aWYobj1sKEtuKHRoaXMuYSw0KSwxMjkpLG4hPW51bGwpe2lmKHQhPW51bGwpe2ZvcihyPTAsYT1uLmxlbmd0aDtyPGE7KytyKWlmKFBpKHQsbltyXSkpcmV0dXJuIHJ9ZWxzZSBmb3Iocj0wLGE9bi5sZW5ndGg7cjxhOysrcilpZihxZShuW3JdKT09PXFlKHQpKXJldHVybiByfXJldHVybi0xfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIGwoS24odGhpcy5hLDQpLDEyOSk9PW51bGx9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGt1dCh0aGlzKX0saC5lZD1mdW5jdGlvbigpe3JldHVybiBuZXcgTnN0KHRoaXMpfSxoLmZkPWZ1bmN0aW9uKHQpe3ZhciBuLHI7aWYocj0obj1sKEtuKHRoaXMuYSw0KSwxMjkpLG49PW51bGw/MDpuLmxlbmd0aCksdDwwfHx0PnIpdGhyb3cgdWUobmV3IG15KHQscikpO3JldHVybiBuZXcgeWF0KHRoaXMsdCl9LGguVGk9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG87aWYocj16MXQodGhpcyksbz1yPT1udWxsPzA6ci5sZW5ndGgsdD49byl0aHJvdyB1ZShuZXcgdGMoUWZlK3QrYXYrbykpO2lmKG4+PW8pdGhyb3cgdWUobmV3IHRjKEpmZStuK2F2K28pKTtyZXR1cm4gYT1yW25dLHQhPW4mJih0PG4/cHUocix0LHIsdCsxLG4tdCk6cHUocixuKzEscixuLHQtbiksVHMocix0LGEpLFBFKHRoaXMscikpLGF9LGguVmk9ZnVuY3Rpb24odCl7cmV0dXJuIGwoS24odGhpcy5hLDQpLDEyOSlbdF19LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIGJFbih0aGlzLHQpfSxoLlhpPWZ1bmN0aW9uKHQsbil7dmFyIHIsYTtyZXR1cm4gcj16MXQodGhpcyksYT1yW3RdLFhzZShyLHQsRUUodGhpcyxuKSksUEUodGhpcyxyKSxhfSxoLmdjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bChLbih0aGlzLmEsNCksMTI5KSx0PT1udWxsPzA6dC5sZW5ndGh9LGguUGM9ZnVuY3Rpb24oKXt2YXIgdCxuLHI7cmV0dXJuIHQ9bChLbih0aGlzLmEsNCksMTI5KSxyPXQ9PW51bGw/MDp0Lmxlbmd0aCxuPVdlKGVwZSxyMGUsNDI0LHIsMCwxKSxyPjAmJnB1KHQsMCxuLDAsciksbn0saC5RYz1mdW5jdGlvbih0KXt2YXIgbixyLGE7cmV0dXJuIG49bChLbih0aGlzLmEsNCksMTI5KSxhPW49PW51bGw/MDpuLmxlbmd0aCxhPjAmJih0Lmxlbmd0aDxhJiYocj1iTihiaCh0KS5jLGEpLHQ9cikscHUobiwwLHQsMCxhKSksdC5sZW5ndGg+YSYmVHModCxhLG51bGwpLHR9O3ZhciBNX3Q7SShTbywiQXJyYXlEZWxlZ2F0aW5nRUxpc3QiLDIwODApLEQoMTA1MSwzNyxPYSxrdXQpLGguWGo9ZnVuY3Rpb24oKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxxZShsKEtuKHRoaXMuYi5hLDQpLDEyOSkpIT09cWUodGhpcy5hKSl0aHJvdyB1ZShuZXcgWGgpfSxoLlFiPWZ1bmN0aW9uKCl7akEodGhpcyksdGhpcy5hPWwoS24odGhpcy5iLmEsNCksMTI5KX0sSShTbywiQXJyYXlEZWxlZ2F0aW5nRUxpc3QvRUl0ZXJhdG9yIiwxMDUxKSxEKDcyMiwyODYsbGcsTnN0LHlhdCksaC5Yaj1mdW5jdGlvbigpe2lmKHRoaXMuYi5qIT10aGlzLmZ8fHFlKGwoS24odGhpcy5iLmEsNCksMTI5KSkhPT1xZSh0aGlzLmEpKXRocm93IHVlKG5ldyBYaCl9LGguJGo9ZnVuY3Rpb24odCl7QmR0KHRoaXMsdCksdGhpcy5hPWwoS24odGhpcy5iLmEsNCksMTI5KX0saC5RYj1mdW5jdGlvbigpe2pBKHRoaXMpLHRoaXMuYT1sKEtuKHRoaXMuYi5hLDQpLDEyOSl9LEkoU28sIkFycmF5RGVsZWdhdGluZ0VMaXN0L0VMaXN0SXRlcmF0b3IiLDcyMiksRCgxMDUyLDM1NSxPYSxFdXQpLGguWGo9ZnVuY3Rpb24oKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxxZShsKEtuKHRoaXMuYi5hLDQpLDEyOSkpIT09cWUodGhpcy5hKSl0aHJvdyB1ZShuZXcgWGgpfSxJKFNvLCJBcnJheURlbGVnYXRpbmdFTGlzdC9Ob25SZXNvbHZpbmdFSXRlcmF0b3IiLDEwNTIpLEQoNzIzLDM5OCxsZyxQc3QseGF0KSxoLlhqPWZ1bmN0aW9uKCl7aWYodGhpcy5iLmohPXRoaXMuZnx8cWUobChLbih0aGlzLmIuYSw0KSwxMjkpKSE9PXFlKHRoaXMuYSkpdGhyb3cgdWUobmV3IFhoKX0sSShTbywiQXJyYXlEZWxlZ2F0aW5nRUxpc3QvTm9uUmVzb2x2aW5nRUxpc3RJdGVyYXRvciIsNzIzKSxEKDYxNSwzMDIsc2hlLFZzZSksSShTbywiQmFzaWNFTGlzdC9CYXNpY0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLDYxNSksRCg3MTAsNjYsQmQsZXllKSxoLmJkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5GYz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLmNkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5HYz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLiRiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5faT1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSWkoKX0saC5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkppKCl9LGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuS2kodCl9LGguVGk9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxoLlVpPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5nZD1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLk1jPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguaGQ9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxJKFNvLCJCYXNpY0VMaXN0L1VubW9kaWZpYWJsZUVMaXN0Iiw3MTApLEQoNzIxLDEsezM6MSwyMDoxLDE2OjEsMTU6MSw2MToxLDU5NzoxfSksaC5iZD1mdW5jdGlvbih0LG4pe2dobih0aGlzLHQsbChuLDQ0KSl9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIG9mbih0aGlzLGwodCw0NCkpfSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIGwoT2UodGhpcy5jLHQpLDEzNil9LGguVGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbCh0aGlzLmMuVGkodCxuKSw0NCl9LGguVWk9ZnVuY3Rpb24odCxuKXtwaG4odGhpcyx0LGwobiw0NCkpfSxoLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbih0aGlzLDE2KSl9LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIGwodGhpcy5jLmdkKHQpLDQ0KX0saC5oZD1mdW5jdGlvbih0LG4pe3JldHVybiBNZ24odGhpcyx0LGwobiw0NCkpfSxoLmpkPWZ1bmN0aW9uKHQpeyRtKHRoaXMsdCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMTYpfSxoLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbih0aGlzLDE2KSl9LGguY2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5jLmNkKHQsbil9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYy5HYyh0KX0saC4kYj1mdW5jdGlvbigpe3RoaXMuYy4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmMuSGModCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIEVOKHRoaXMuYyx0KX0saC5faj1mdW5jdGlvbigpe3ZhciB0LG4scjtpZih0aGlzLmQ9PW51bGwpe2Zvcih0aGlzLmQ9V2UodlBlLF9TZSw2NiwyKnRoaXMuZisxLDAsMSkscj10aGlzLmUsdGhpcy5mPTAsbj10aGlzLmMuS2MoKTtuLmUhPW4uaS5nYygpOyl0PWwobi5ZaigpLDEzNiksb1UodGhpcyx0KTt0aGlzLmU9cn19LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIGNpdCh0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIE03ZSh0aGlzLmMpfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmMuZGQodCl9LGguYWs9ZnVuY3Rpb24oKXt0aGlzLmM9bmV3IGhRZSh0aGlzKX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmY9PTB9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLktjKCl9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmVkKCl9LGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYy5mZCh0KX0saC5iaz1mdW5jdGlvbigpe3JldHVybiBpTih0aGlzKX0saC5jaz1mdW5jdGlvbih0LG4scil7cmV0dXJuIG5ldyB4aXQodCxuLHIpfSxoLmRrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTJH0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gV2h0KHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBacCh0aGlzLmMsdCxuKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuUGMoKX0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jLlFjKHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFQ4ZSh0aGlzLmMpfSxoLmU9MCxoLmY9MCxJKFNvLCJCYXNpY0VNYXAiLDcyMSksRCgxMDQ2LDY2LEJkLGhRZSksaC5NaT1mdW5jdGlvbih0LG4pe0djbih0aGlzLGwobiwxMzYpKX0saC5QaT1mdW5jdGlvbih0LG4scil7dmFyIGE7KysoYT10aGlzLGwobiwxMzYpLGEpLmEuZX0saC5RaT1mdW5jdGlvbih0LG4pe0tjbih0aGlzLGwobiwxMzYpKX0saC5SaT1mdW5jdGlvbih0LG4scil7R2huKHRoaXMsbChuLDEzNiksbChyLDEzNikpfSxoLk9pPWZ1bmN0aW9uKHQsbil7emZ0KHRoaXMuYSl9LEkoU28sIkJhc2ljRU1hcC8xIiwxMDQ2KSxEKDEwNDcsNjYsQmQsUyQpLGguYWo9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKE5PbixlNXQsNjIxLHQsMCwxKX0sSShTbywiQmFzaWNFTWFwLzIiLDEwNDcpLEQoMTA0OCxxMSxUbCxmUWUpLGguJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYy4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBLY2UodGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wPyhGaygpLGZGLmEpOm5ldyBXSmUodGhpcy5hKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10aGlzLmEuZixZVih0aGlzLmEsdCksdGhpcy5hLmYhPW59LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LEkoU28sIkJhc2ljRU1hcC8zIiwxMDQ4KSxEKDEwNDksMzEsV3ksZFFlKSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gRmJ0KHRoaXMuYSx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZj09MD8oRmsoKSxmRi5hKTpuZXcgWUplKHRoaXMuYSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LEkoU28sIkJhc2ljRU1hcC80IiwxMDQ5KSxEKDEwNTAscTEsVGwsZ1FlKSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0saC5IYz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYodGhpcy5hLmY+MCYmRGUodCw0NCkmJih0aGlzLmEuX2ooKSxFPWwodCw0NCksdz1FLmxkKCksbz13PT1udWxsPzA6ZXModyksZj1ReWUodGhpcy5hLG8pLG49dGhpcy5hLmRbZl0sbikpe2ZvcihyPWwobi5nLDM3OSksQz1uLmksZz0wO2c8QzsrK2cpaWYoYT1yW2ddLGEuQmkoKT09byYmYS5GYihFKSlyZXR1cm4hMH1yZXR1cm4hMX0saC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZj09MD8oRmsoKSxmRi5hKTpuZXcgbm9lKHRoaXMuYSl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIEEydCh0aGlzLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mfSxJKFNvLCJCYXNpY0VNYXAvNSIsMTA1MCksRCg2MjIsMSxPYSxub2UpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIhPS0xfSxoLlBiPWZ1bmN0aW9uKCl7dmFyIHQ7aWYodGhpcy5mLmUhPXRoaXMuYyl0aHJvdyB1ZShuZXcgWGgpO2lmKHRoaXMuYj09LTEpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gdGhpcy5kPXRoaXMuYSx0aGlzLmU9dGhpcy5iLGdndCh0aGlzKSx0PWwodGhpcy5mLmRbdGhpcy5kXS5nW3RoaXMuZV0sMTM2KSx0aGlzLmVrKHQpfSxoLlFiPWZ1bmN0aW9uKCl7aWYodGhpcy5mLmUhPXRoaXMuYyl0aHJvdyB1ZShuZXcgWGgpO2lmKHRoaXMuZT09LTEpdGhyb3cgdWUobmV3IHBsKTt0aGlzLmYuYy5NYyhPZSh0aGlzLmYuZFt0aGlzLmRdLHRoaXMuZSkpLHRoaXMuYz10aGlzLmYuZSx0aGlzLmU9LTEsdGhpcy5hPT10aGlzLmQmJnRoaXMuYiE9LTEmJi0tdGhpcy5ifSxoLmVrPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxoLmE9MCxoLmI9LTEsaC5jPTAsaC5kPTAsaC5lPTAsSShTbywiQmFzaWNFTWFwL0Jhc2ljRU1hcEl0ZXJhdG9yIiw2MjIpLEQoMTA0NCw2MjIsT2EsV0plKSxoLmVrPWZ1bmN0aW9uKHQpe3JldHVybiB0LmxkKCl9LEkoU28sIkJhc2ljRU1hcC9CYXNpY0VNYXBLZXlJdGVyYXRvciIsMTA0NCksRCgxMDQ1LDYyMixPYSxZSmUpLGguZWs9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWQoKX0sSShTbywiQmFzaWNFTWFwL0Jhc2ljRU1hcFZhbHVlSXRlcmF0b3IiLDEwNDUpLEQoMTA0MywxLFd3LHBRZSksaC53Yz1mdW5jdGlvbih0KXttQSh0aGlzLHQpfSxoLnljPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcWNlKHRoaXMsdCxuLHIpfSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gTXR0KHRoaXMsdCl9LGgudWM9ZnVuY3Rpb24odCl7cmV0dXJuIEZidCh0aGlzLmEsdCl9LGgudmM9ZnVuY3Rpb24oKXtyZXR1cm4gcHZuKHRoaXMuYSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIGNpdCh0aGlzLmEsdCl9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIG4xKHRoaXMuYSx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBNN2UodGhpcy5hLmMpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wfSxoLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIGR2bih0aGlzLmEpfSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEdOKHRoaXMuYSx0LG4pfSxoLkJjPWZ1bmN0aW9uKHQpe3JldHVybiBZVih0aGlzLmEsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVDhlKHRoaXMuYS5jKX0saC5DYz1mdW5jdGlvbigpe3JldHVybiBndm4odGhpcy5hKX0sSShTbywiQmFzaWNFTWFwL0RlbGVnYXRpbmdNYXAiLDEwNDMpLEQoNjIxLDEsezQ0OjEsMTM2OjEsNjIxOjF9LHhpdCksaC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCw0NCk/KG49bCh0LDQ0KSwodGhpcy5iIT1udWxsP1BpKHRoaXMuYixuLmxkKCkpOnFlKHRoaXMuYik9PT1xZShuLmxkKCkpKSYmKHRoaXMuYyE9bnVsbD9QaSh0aGlzLmMsbi5tZCgpKTpxZSh0aGlzLmMpPT09cWUobi5tZCgpKSkpOiExfSxoLkJpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5sZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYV4odGhpcy5jPT1udWxsPzA6ZXModGhpcy5jKSl9LGguQ2k9ZnVuY3Rpb24odCl7dGhpcy5hPXR9LGguRGk9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IENtKX0saC5uZD1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10aGlzLmMsdGhpcy5jPXQsbn0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIrIi0+Iit0aGlzLmN9LGguYT0wO3ZhciBOT249SShTbywiQmFzaWNFTWFwL0VudHJ5SW1wbCIsNjIxKTtEKDU0NiwxLHt9LE1TKSxJKFNvLCJCYXNpY0VNYXAvVmlldyIsNTQ2KTt2YXIgZkY7RCg3ODMsMSx7fSksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gTzllKChDbigpLF9vKSx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBxN2UoKENuKCksX28pKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBUYigoQ24oKSxfbykpfSxJKFNvLCJFQ29sbGVjdGlvbnMvQmFzaWNFbXB0eVVubW9kaWZpYWJsZUVMaXN0Iiw3ODMpLEQoMTM0OCwxLGxnLFFuZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlJiPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxoLlBiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IF9jKX0saC5UYj1mdW5jdGlvbigpe3JldHVybiAwfSxoLlViPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IF9jKX0saC5WYj1mdW5jdGlvbigpe3JldHVybi0xfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5XYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKFNvLCJFQ29sbGVjdGlvbnMvQmFzaWNFbXB0eVVubW9kaWZpYWJsZUVMaXN0LzEiLDEzNDgpLEQoMTM0Niw3ODMsezIwOjEsMTY6MSwxNToxLDYxOjF9LGlKZSksaC5iZD1mdW5jdGlvbih0LG4pe3daZSgpfSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiB5WmUoKX0saC5jZD1mdW5jdGlvbih0LG4pe3JldHVybiB4WmUoKX0saC5HYz1mdW5jdGlvbih0KXtyZXR1cm4ga1plKCl9LGguJGI9ZnVuY3Rpb24oKXtFWmUoKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4hMX0saC5JYz1mdW5jdGlvbih0KXtyZXR1cm4hMX0saC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiByeWUoKENuKCksdCkpLG51bGx9LGguZGQ9ZnVuY3Rpb24odCl7cmV0dXJuLTF9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmF9LGguVGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gVFplKCl9LGguVWk9ZnVuY3Rpb24odCxuKXtDWmUoKX0saC5MYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24odGhpcywxNikpfSxoLmdkPWZ1bmN0aW9uKHQpe3JldHVybiBTWmUoKX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gX1plKCl9LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQVplKCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0saC5qZD1mdW5jdGlvbih0KXskbSh0aGlzLHQpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbih0aGlzLDE2KX0saC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24odGhpcywxNikpfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIENuKCksbmV3IFpwKF9vLHQsbil9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gZTVlKChDbigpLF9vKSl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIENuKCksUEEoX28sdCl9LEkoU28sIkVDb2xsZWN0aW9ucy9FbXB0eVVubW9kaWZpYWJsZUVMaXN0IiwxMzQ2KSxEKDEzNDcsNzgzLHsyMDoxLDE2OjEsMTU6MSw2MToxLDU5NzoxfSxzSmUpLGguYmQ9ZnVuY3Rpb24odCxuKXt3WmUoKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4geVplKCl9LGguY2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4geFplKCl9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIGtaZSgpfSxoLiRiPWZ1bmN0aW9uKCl7RVplKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gcnllKChDbigpLHQpKSxudWxsfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybi0xfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hfSxoLlRpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFRaZSgpfSxoLlVpPWZ1bmN0aW9uKHQsbil7Q1plKCl9LGguTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKHRoaXMsMTYpKX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4gU1plKCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIF9aZSgpfSxoLmhkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEFaZSgpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGguamQ9ZnVuY3Rpb24odCl7JG0odGhpcyx0KX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywxNil9LGguT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKHRoaXMsMTYpKX0saC5rZD1mdW5jdGlvbih0LG4pe3JldHVybiBDbigpLG5ldyBacChfbyx0LG4pfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGU1ZSgoQ24oKSxfbykpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBDbigpLFBBKF9vLHQpfSxoLmJrPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksQ24oKSxtZ30sSShTbywiRUNvbGxlY3Rpb25zL0VtcHR5VW5tb2RpZmlhYmxlRU1hcCIsMTM0Nyk7dmFyIHlQZT1rcyhTbywiRW51bWVyYXRvciIpLGtZO0QoMjg4LDEsezI4ODoxfSxlbGUpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHRoaXM9PT10PyEwOkRlKHQsMjg4KT8obj1sKHQsMjg4KSx0aGlzLmY9PW4uZiYmR2RuKHRoaXMuaSxuLmkpJiZfYWUodGhpcy5hLHRoaXMuZiYyNTY/bi5mJjI1Nj9uLmE6bnVsbDpuLmYmMjU2P251bGw6bi5hKSYmX2FlKHRoaXMuZCxuLmQpJiZfYWUodGhpcy5nLG4uZykmJl9hZSh0aGlzLmUsbi5lKSYmYjZuKHRoaXMsbikpOiExfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC5JYj1mdW5jdGlvbigpe3JldHVybiBibXQodGhpcyl9LGguZj0wO3ZhciBEX3Q9MCxJX3Q9MCxPX3Q9MCxOX3Q9MCx4UGU9MCxrUGU9MCxFUGU9MCxUUGU9MCxDUGU9MCxQX3QsJE09MCx6TT0wLEJfdD0wLEZfdD0wLEVZLFNQZTtJKFNvLCJVUkkiLDI4OCksRCgxMTIxLDQ1LG02LGFKZSksaC56Yz1mdW5jdGlvbih0LG4pe3JldHVybiBsKHJjKHRoaXMsZWkodCksbChuLDI4OCkpLDI4OCl9LEkoU28sIlVSSS9VUklDYWNoZSIsMTEyMSksRCg1MDYsNjYsQmQsRSQsdUgpLGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShTbywiVW5pcXVlRUxpc3QiLDUwNiksRCg1OTAsNjMsbHAsblYpLEkoU28sIldyYXBwZWRFeGNlcHRpb24iLDU5MCk7dmFyIG1pPWtzKHBmLHI1dCksTTQ9a3MocGYsaTV0KSxkbD1rcyhwZixzNXQpLEQ0PWtzKHBmLGE1dCksbDE9a3MocGYsbzV0KSxWZj1rcyhwZiwiRUNsYXNzIiksdHBlPWtzKHBmLCJFRGF0YVR5cGUiKSxSX3Q7RCgxMjMzLDQ1LG02LG9KZSksaC54Yz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCk/eHUodGhpcyx0KTpoYyh6byh0aGlzLmYsdCkpfSxJKHBmLCJFRGF0YVR5cGUvSW50ZXJuYWwvQ29udmVyc2lvbkRlbGVnYXRlL0ZhY3RvcnkvUmVnaXN0cnkvSW1wbCIsMTIzMyk7dmFyIFRZPWtzKHBmLCJFRW51bSIpLHdwPWtzKHBmLGM1dCksV289a3MocGYsdTV0KSxVZj1rcyhwZixsNXQpLEdmLGszPWtzKHBmLGg1dCksSTQ9a3MocGYsZjV0KTtEKDEwNDIsMSx7fSxZbmUpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTklMIn0sSShwZiwiRVN0cnVjdHVyYWxGZWF0dXJlL0ludGVybmFsL0R5bmFtaWNWYWx1ZUhvbGRlci8xIiwxMDQyKTt2YXIgal90O0QoMTA0MSw0NSxtNixjSmUpLGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpP3h1KHRoaXMsdCk6aGMoem8odGhpcy5mLHQpKX0sSShwZiwiRVN0cnVjdHVyYWxGZWF0dXJlL0ludGVybmFsL1NldHRpbmdEZWxlZ2F0ZS9GYWN0b3J5L1JlZ2lzdHJ5L0ltcGwiLDEwNDEpO3ZhciBadT1rcyhwZixkNXQpLG85PWtzKHBmLCJFVmFsaWRhdG9yL1BhdHRlcm5NYXRjaGVyIiksX1BlLEFQZSxWbixNMixPNCxKYiwkX3Qsel90LHFfdCxaYixEMixlbSxFMyx0ZCxIX3QsVl90LEtmLEkyLFVfdCxPMixONCxvNyxObyxHX3QsS190LFQzLENZPWtzKHVzLCJGZWF0dXJlTWFwL0VudHJ5Iik7RCg1NDUsMSx7NzY6MX0sU3EpLGguTGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sSShHbiwiQmFzaWNFT2JqZWN0SW1wbC8xIiw1NDUpLEQoMTA0MCwxLGkwZSxJdHQpLGguRms9ZnVuY3Rpb24odCl7cmV0dXJuIE1vZSh0aGlzLmEsdGhpcy5iLHQpfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIGdvdCh0aGlzLmEsdGhpcy5iKX0saC5XYj1mdW5jdGlvbih0KXtxNWUodGhpcy5hLHRoaXMuYix0KX0saC5Haz1mdW5jdGlvbigpe0hnbih0aGlzLmEsdGhpcy5iKX0sSShHbiwiQmFzaWNFT2JqZWN0SW1wbC80IiwxMDQwKSxEKDIwODEsMSx7MTE0OjF9KSxoLk1rPWZ1bmN0aW9uKHQpe3RoaXMuZT10PT0wP1dfdDpXZSh3YSxSbiwxLHQsNSwxKX0saC5saT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lW3RdfSxoLm1pPWZ1bmN0aW9uKHQsbil7dGhpcy5lW3RdPW59LGgubmk9ZnVuY3Rpb24odCl7dGhpcy5lW3RdPW51bGx9LGguTms9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLk9rPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5Qaz1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguUWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLlJrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSE9bnVsbH0saC5Taz1mdW5jdGlvbih0KXt0aGlzLmM9dH0saC5Uaz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLlVrPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguVms9ZnVuY3Rpb24odCl7dGhpcy5kPXR9O3ZhciBXX3Q7SShHbiwiQmFzaWNFT2JqZWN0SW1wbC9FUHJvcGVydGllc0hvbGRlckJhc2VJbXBsIiwyMDgxKSxEKDE5MiwyMDgxLHsxMTQ6MX0sU2YpLGguT2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLlBrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5Uaz1mdW5jdGlvbih0KXt0aGlzLmE9dH0saC5Vaz1mdW5jdGlvbih0KXt0aGlzLmI9dH0sSShHbiwiQmFzaWNFT2JqZWN0SW1wbC9FUHJvcGVydGllc0hvbGRlckltcGwiLDE5MiksRCg1MTYsOTksZzR0LG01KSxoLnVoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC56aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmt9LGguQmg9ZnVuY3Rpb24odCxuKXt0aGlzLmc9dCx0aGlzLmk9bn0saC5EaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmomMj90aGlzLiRoKCkuTmsoKTp0aGlzLmlpKCl9LGguRmg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxoLndoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaiYxKSE9MH0saC5QaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGguVmg9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5qJjQpIT0wfSxoLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMua30saC5jaT1mdW5jdGlvbih0KXt0aGlzLiRoKCkuU2sodCksdD90aGlzLmp8PTI6dGhpcy5qJj0tM30saC5laT1mdW5jdGlvbih0KXt0aGlzLiRoKCkuVWsodCksdD90aGlzLmp8PTQ6dGhpcy5qJj0tNX0saC5paT1mdW5jdGlvbigpe3JldHVybihsYigpLFZuKS5TfSxoLmk9MCxoLmo9MSxJKEduLCJFT2JqZWN0SW1wbCIsNTE2KSxEKDc5OCw1MTYsezExMDoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MX0sRjRlKSxoLmxpPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVbdF19LGgubWk9ZnVuY3Rpb24odCxuKXt0aGlzLmVbdF09bn0saC5uaT1mdW5jdGlvbih0KXt0aGlzLmVbdF09bnVsbH0saC5EaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguSWg9ZnVuY3Rpb24odCl7cmV0dXJuIG1zKHRoaXMuZCx0KX0saC5LaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguT2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lIT1udWxsfSxoLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuayYmKHRoaXMuaz1uZXcgXyQpLHRoaXMua30saC5jaT1mdW5jdGlvbih0KXt0aGlzLmQ9dH0saC5oaT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmU9PW51bGwmJih0PXlyKHRoaXMuZCksdGhpcy5lPXQ9PTA/WV90OldlKHdhLFJuLDEsdCw1LDEpKSx0aGlzfSxoLmppPWZ1bmN0aW9uKCl7cmV0dXJuIDB9O3ZhciBZX3Q7SShHbiwiRHluYW1pY0VPYmplY3RJbXBsIiw3OTgpLEQoMTUyMiw3OTgsezExMDoxLDQ0OjEsOTQ6MSw5MzoxLDEzNjoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxfSxHaXQpLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGZ3KHRoaXMpfSxoLmNpPWZ1bmN0aW9uKHQpe3RoaXMuZD10LHRoaXMuYj1vUCh0LCJrZXkiKSx0aGlzLmM9b1AodCxUTCl9LGguQmk9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5hPT0tMSYmKHQ9SG9lKHRoaXMsdGhpcy5iKSx0aGlzLmE9dD09bnVsbD8wOmVzKHQpKSx0aGlzLmF9LGgubGQ9ZnVuY3Rpb24oKXtyZXR1cm4gSG9lKHRoaXMsdGhpcy5iKX0saC5tZD1mdW5jdGlvbigpe3JldHVybiBIb2UodGhpcyx0aGlzLmMpfSxoLkNpPWZ1bmN0aW9uKHQpe3RoaXMuYT10fSxoLkRpPWZ1bmN0aW9uKHQpe3E1ZSh0aGlzLHRoaXMuYix0KX0saC5uZD1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1Ib2UodGhpcyx0aGlzLmMpLHE1ZSh0aGlzLHRoaXMuYyx0KSxufSxoLmE9MCxJKEduLCJEeW5hbWljRU9iamVjdEltcGwvQmFzaWNFTWFwRW50cnkiLDE1MjIpLEQoMTUyMywxLHsxMTQ6MX0sXyQpLGguTWs9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5saT1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLm1pPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5uaT1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLk5rPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5Paz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguUGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlFrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30saC5Saz1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguU2s9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5Uaz1mdW5jdGlvbih0KXt0aGlzLmE9dH0saC5Vaz1mdW5jdGlvbih0KXt0aGlzLmI9dH0saC5Waz1mdW5jdGlvbih0KXt0aGlzLmM9dH0sSShHbiwiRHluYW1pY0VPYmplY3RJbXBsL0R5bmFtaWNFUHJvcGVydGllc0hvbGRlckltcGwiLDE1MjMpLEQoNTE5LDE1OCx7MTEwOjEsOTQ6MSw5MzoxLDU5ODoxLDE1NToxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDUxOToxLDE1ODoxLDExOToxLDEyMDoxfSxDSSksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gZHhlKHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLmQ7Y2FzZSAyOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBkaCgoVG4oKSxObyksWWMsdGhpcykpLHRoaXMuYik6KCF0aGlzLmImJih0aGlzLmI9bmV3IGRoKChUbigpLE5vKSxZYyx0aGlzKSksaU4odGhpcy5iKSk7Y2FzZSAzOnJldHVybiB3b3QodGhpcyk7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IFlzKFhiLHRoaXMsNCkpLHRoaXMuYTtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgJDUoWGIsdGhpcyw1KSksdGhpcy5jfXJldHVybiBzZih0aGlzLHQteXIoKFRuKCksTTIpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHxNMiksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFJ1KHRoaXMuQWIsdCxyKTtjYXNlIDM6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/ZHhlKHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLW8sbnVsbCxyKSkpLFo0ZSh0aGlzLGwodCwxNTUpLHIpfXJldHVybiBmPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksTTIpKSxuKSw2OSksZi53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxNMikpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBkaCgoVG4oKSxObyksWWMsdGhpcykpLFVxKHRoaXMuYix0LHIpO2Nhc2UgMzpyZXR1cm4gWjRlKHRoaXMsbnVsbCxyKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgWXMoWGIsdGhpcyw0KSksVG8odGhpcy5hLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxNMikpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLE0yKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy5kIT1udWxsO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmYhPTA7Y2FzZSAzOnJldHVybiEhd290KHRoaXMpO2Nhc2UgNDpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSA1OnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MH1yZXR1cm4gbmYodGhpcyx0LXlyKChUbigpLE0yKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8TTIpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6T2RuKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgZGgoKFRuKCksTm8pLFljLHRoaXMpKSxfVih0aGlzLmIsbik7cmV0dXJuO2Nhc2UgMzppYnQodGhpcyxsKG4sMTU1KSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBZcyhYYix0aGlzLDQpKSwkcih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IFlzKFhiLHRoaXMsNCkpLEFzKHRoaXMuYSxsKG4sMTYpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmMmJih0aGlzLmM9bmV3ICQ1KFhiLHRoaXMsNSkpLCRyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgJDUoWGIsdGhpcyw1KSksQXModGhpcy5jLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksTTIpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxNMiksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxNMn0saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOmc3ZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgZGgoKFRuKCksTm8pLFljLHRoaXMpKSx0aGlzLmIuYy4kYigpO3JldHVybjtjYXNlIDM6aWJ0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBZcyhYYix0aGlzLDQpKSwkcih0aGlzLmEpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgJDUoWGIsdGhpcyw1KSksJHIodGhpcy5jKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLE0yKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8TTIpLHQpKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBjMXQodGhpcyl9LGguZD1udWxsLEkoR24sIkVBbm5vdGF0aW9uSW1wbCIsNTE5KSxEKDE0MSw3MjEsQVNlLHhsKSxoLkdpPWZ1bmN0aW9uKHQsbil7UWxuKHRoaXMsdCxsKG4sNDQpKX0saC5Xaz1mdW5jdGlvbih0LG4pe3JldHVybiBaZm4odGhpcyxsKHQsNDQpLG4pfSxoLiRpPWZ1bmN0aW9uKHQpe3JldHVybiBsKGwodGhpcy5jLDcxKS4kaSh0KSwxMzYpfSxoLklpPWZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5jLDcxKS5JaSgpfSxoLkppPWZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5jLDcxKS5KaSgpfSxoLktpPWZ1bmN0aW9uKHQpe3JldHVybiBsKHRoaXMuYyw3MSkuS2kodCl9LGguWGs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gVXEodGhpcyx0LG4pfSxoLkZrPWZ1bmN0aW9uKHQpe3JldHVybiBsKHRoaXMuYyw3OSkuRmsodCl9LGguYWs9ZnVuY3Rpb24oKXt9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmMsNzkpLlFqKCl9LGguY2s9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPWwoQWgodGhpcy5iKS53aSgpLnNpKHRoaXMuYiksMTM2KSxhLkNpKHQpLGEuRGkobiksYS5uZChyKSxhfSxoLmRrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrd2UodGhpcyl9LGguV2I9ZnVuY3Rpb24odCl7X1YodGhpcyx0KX0saC5Haz1mdW5jdGlvbigpe2wodGhpcy5jLDc5KS5HaygpfSxJKHVzLCJFY29yZUVNYXAiLDE0MSksRCgxNjUsMTQxLEFTZSxkaCksaC5faj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtpZih0aGlzLmQ9PW51bGwpe2ZvcihmPVdlKHZQZSxfU2UsNjYsMip0aGlzLmYrMSwwLDEpLHI9dGhpcy5jLktjKCk7ci5lIT1yLmkuZ2MoKTspbj1sKHIuWWooKSwxMzYpLGE9bi5CaSgpLG89KGEmSWkpJWYubGVuZ3RoLHQ9ZltvXSwhdCYmKHQ9ZltvXT1uZXcga3dlKHRoaXMpKSx0LkZjKG4pO3RoaXMuZD1mfX0sSShHbiwiRUFubm90YXRpb25JbXBsLzEiLDE2NSksRCgyOTIsNDQ4LHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMTU4OjEsMjkyOjEsMTE5OjEsMTIwOjF9KSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBIbigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIHB0KHRoaXMucyk7Y2FzZSA1OnJldHVybiBwdCh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gSG4oKSwhIXRoaXMuSmsoKTtjYXNlIDc6cmV0dXJuIEhuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2YodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xfXJldHVybiBzZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLHQpLG4scil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgOTpyZXR1cm4gcWFlKHRoaXMscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdGhpcy5KaygpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKX1yZXR1cm4gbmYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcixhO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6dGhpcy51aShlaShuKSk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMzp1Mih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgNTp0aGlzLlprKGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLGwobiwxNDIpKTtyZXR1cm47Y2FzZSA5OmE9JDEodGhpcyxsKG4sODkpLG51bGwpLGEmJmEub2ooKTtyZXR1cm59dWYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKHI9bChLbih0aGlzLDE2KSwyOSkscnx8dGhpcy5paSgpKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLEtfdH0saC5raT1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6dGhpcy51aShudWxsKTtyZXR1cm47Y2FzZSAyOmMyKHRoaXMsITApO3JldHVybjtjYXNlIDM6dTIodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLDApO3JldHVybjtjYXNlIDU6dGhpcy5aaygxKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPSQxKHRoaXMsbnVsbCxudWxsKSxyJiZyLm9qKCk7cmV0dXJufWNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fHRoaXMuaWkoKSksdCkpfSxoLnBpPWZ1bmN0aW9uKCl7T2YodGhpcyksdGhpcy5CYnw9MX0saC5Iaz1mdW5jdGlvbigpe3JldHVybiBPZih0aGlzKX0saC5Jaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnR9LGguSms9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLnQsdD4xfHx0PT0tMX0saC5TaT1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJjUxMikhPTB9LGguWWs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbzhlKHRoaXMsdCxuKX0saC5aaz1mdW5jdGlvbih0KXtNeSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFQ5ZSh0aGlzKX0saC5zPTAsaC50PTEsSShHbiwiRVR5cGVkRWxlbWVudEltcGwiLDI5MiksRCg0NjIsMjkyLHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwxNzk6MSw2OToxLDExNDoxLDQ4MToxLDU0OjEsOTk6MSwxNTg6MSw0NjI6MSwyOTI6MSwxMTk6MSwxMjA6MSw2OTI6MX0pLGguQWg9ZnVuY3Rpb24odCl7cmV0dXJuIFFkdCh0aGlzLHQpfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBIbigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIHB0KHRoaXMucyk7Y2FzZSA1OnJldHVybiBwdCh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gSG4oKSwhIXRoaXMuSmsoKTtjYXNlIDc6cmV0dXJuIEhuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2YodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIEhuKCksISEodGhpcy5CYiZtMCk7Y2FzZSAxMTpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJnI0KTtjYXNlIDEyOnJldHVybiBIbigpLCEhKHRoaXMuQmImWHkpO2Nhc2UgMTM6cmV0dXJuIHRoaXMuajtjYXNlIDE0OnJldHVybiBVRSh0aGlzKTtjYXNlIDE1OnJldHVybiBIbigpLCEhKHRoaXMuQmImU2wpO2Nhc2UgMTY6cmV0dXJuIEhuKCksISEodGhpcy5CYiZfZCk7Y2FzZSAxNzpyZXR1cm4ga3kodGhpcyl9cmV0dXJuIHNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFJ1KHRoaXMuQWIsdCxyKTtjYXNlIDE3OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP1FkdCh0aGlzLHIpOnRoaXMuQ2IuVGgodGhpcywtMS1vLG51bGwscikpKSxOaCh0aGlzLHQsMTcscil9cmV0dXJuIGY9bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLG4pLDY5KSxmLndrKCkuemsodGhpcyxLdSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxUbyh0aGlzLkFiLHQscik7Y2FzZSA5OnJldHVybiBxYWUodGhpcyxyKTtjYXNlIDE3OnJldHVybiBOaCh0aGlzLG51bGwsMTcscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdGhpcy5KaygpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJm0wKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJnI0KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJlh5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZTbCkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZfZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIWt5KHRoaXMpfXJldHVybiBuZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHx0aGlzLmlpKCkpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByLGE7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpwb2UodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMzp1Mih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgNTp0aGlzLlprKGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLGwobiwxNDIpKTtyZXR1cm47Y2FzZSA5OmE9JDEodGhpcyxsKG4sODkpLG51bGwpLGEmJmEub2ooKTtyZXR1cm47Y2FzZSAxMDpBRSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTE6REUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDEyOkxFKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAxMzpaM2UodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMTU6TUUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDE2OklFKHRoaXMsUnQoQnQobikpKTtyZXR1cm59dWYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKHI9bChLbih0aGlzLDE2KSwyOSkscnx8dGhpcy5paSgpKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLEdfdH0saC5raT1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RGUodGhpcy5DYiw5MCkmJnp5KFlsKGwodGhpcy5DYiw5MCkpLDQpLEZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOnUyKHRoaXMsITApO3JldHVybjtjYXNlIDQ6aTIodGhpcywwKTtyZXR1cm47Y2FzZSA1OnRoaXMuWmsoMSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj0kMSh0aGlzLG51bGwsbnVsbCksciYmci5vaigpO3JldHVybjtjYXNlIDEwOkFFKHRoaXMsITApO3JldHVybjtjYXNlIDExOkRFKHRoaXMsITEpO3JldHVybjtjYXNlIDEyOkxFKHRoaXMsITEpO3JldHVybjtjYXNlIDEzOnRoaXMuaT1udWxsLHhWKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6TUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTY6SUUodGhpcywhMSk7cmV0dXJufWNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fHRoaXMuaWkoKSksdCkpfSxoLnBpPWZ1bmN0aW9uKCl7V2soaWMoKEVsKCksaW8pLHRoaXMpKSxPZih0aGlzKSx0aGlzLkJifD0xfSxoLnBrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC5paz1mdW5jdGlvbigpe3JldHVybiBVRSh0aGlzKX0saC5xaz1mdW5jdGlvbigpe3JldHVybiBreSh0aGlzKX0saC51az1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLiRrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua30saC5Maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm59LGgudms9ZnVuY3Rpb24oKXtyZXR1cm4gcFUodGhpcyl9LGgud2s9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7cmV0dXJuIHRoaXMucHx8KHI9a3kodGhpcyksKHIuaT09bnVsbCYmU2Qociksci5pKS5sZW5ndGgsYT10aGlzLnVrKCksYSYmeXIoa3koYSkpLG89T2YodGhpcyksZz1vLmtrKCksdD1nP2cuaSYxP2c9PWloP05zOmc9PVZyP3JvOmc9PUI0P19UOmc9PU5hP3RhOmc9PW5tP3IzOmc9PWg3P2kzOmc9PUFsP2p4OlBMOmc6bnVsbCxuPVVFKHRoaXMpLHc9by5paygpLEs0bih0aGlzKSx0aGlzLkJiJl9kJiYoKGY9eXhlKChFbCgpLGlvKSxyKSkmJmYhPXRoaXN8fChmPXJ4KGljKGlvLHRoaXMpKSkpP3RoaXMucD1uZXcgTnR0KHRoaXMsZik6dGhpcy5KaygpP3RoaXMuYWwoKT9hP3RoaXMuQmImU2w/dD90aGlzLmJsKCk/dGhpcy5wPW5ldyBPbSg0Nyx0LHRoaXMsYSk6dGhpcy5wPW5ldyBPbSg1LHQsdGhpcyxhKTp0aGlzLmJsKCk/dGhpcy5wPW5ldyBSbSg0Nix0aGlzLGEpOnRoaXMucD1uZXcgUm0oNCx0aGlzLGEpOnQ/dGhpcy5ibCgpP3RoaXMucD1uZXcgT20oNDksdCx0aGlzLGEpOnRoaXMucD1uZXcgT20oNyx0LHRoaXMsYSk6dGhpcy5ibCgpP3RoaXMucD1uZXcgUm0oNDgsdGhpcyxhKTp0aGlzLnA9bmV3IFJtKDYsdGhpcyxhKTp0aGlzLkJiJlNsP3Q/dD09dXY/dGhpcy5wPW5ldyBYcCg1MCxBX3QsdGhpcyk6dGhpcy5ibCgpP3RoaXMucD1uZXcgWHAoNDMsdCx0aGlzKTp0aGlzLnA9bmV3IFhwKDEsdCx0aGlzKTp0aGlzLmJsKCk/dGhpcy5wPW5ldyBKcCg0Mix0aGlzKTp0aGlzLnA9bmV3IEpwKDAsdGhpcyk6dD90PT11dj90aGlzLnA9bmV3IFhwKDQxLEFfdCx0aGlzKTp0aGlzLmJsKCk/dGhpcy5wPW5ldyBYcCg0NSx0LHRoaXMpOnRoaXMucD1uZXcgWHAoMyx0LHRoaXMpOnRoaXMuYmwoKT90aGlzLnA9bmV3IEpwKDQ0LHRoaXMpOnRoaXMucD1uZXcgSnAoMix0aGlzKTpEZShvLDE1Nik/dD09Q1k/dGhpcy5wPW5ldyBKcCg0MCx0aGlzKTp0aGlzLkJiJjUxMj90aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBYcCg5LHQsdGhpcyk6dGhpcy5wPW5ldyBKcCg4LHRoaXMpOnQ/dGhpcy5wPW5ldyBYcCgxMSx0LHRoaXMpOnRoaXMucD1uZXcgSnAoMTAsdGhpcyk6dGhpcy5CYiZTbD90P3RoaXMucD1uZXcgWHAoMTMsdCx0aGlzKTp0aGlzLnA9bmV3IEpwKDEyLHRoaXMpOnQ/dGhpcy5wPW5ldyBYcCgxNSx0LHRoaXMpOnRoaXMucD1uZXcgSnAoMTQsdGhpcyk6YT8oRT1hLnQsRT4xfHxFPT0tMT90aGlzLmJsKCk/dGhpcy5CYiZTbD90P3RoaXMucD1uZXcgT20oMjUsdCx0aGlzLGEpOnRoaXMucD1uZXcgUm0oMjQsdGhpcyxhKTp0P3RoaXMucD1uZXcgT20oMjcsdCx0aGlzLGEpOnRoaXMucD1uZXcgUm0oMjYsdGhpcyxhKTp0aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBPbSgyOSx0LHRoaXMsYSk6dGhpcy5wPW5ldyBSbSgyOCx0aGlzLGEpOnQ/dGhpcy5wPW5ldyBPbSgzMSx0LHRoaXMsYSk6dGhpcy5wPW5ldyBSbSgzMCx0aGlzLGEpOnRoaXMuYmwoKT90aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBPbSgzMyx0LHRoaXMsYSk6dGhpcy5wPW5ldyBSbSgzMix0aGlzLGEpOnQ/dGhpcy5wPW5ldyBPbSgzNSx0LHRoaXMsYSk6dGhpcy5wPW5ldyBSbSgzNCx0aGlzLGEpOnRoaXMuQmImU2w/dD90aGlzLnA9bmV3IE9tKDM3LHQsdGhpcyxhKTp0aGlzLnA9bmV3IFJtKDM2LHRoaXMsYSk6dD90aGlzLnA9bmV3IE9tKDM5LHQsdGhpcyxhKTp0aGlzLnA9bmV3IFJtKDM4LHRoaXMsYSkpOnRoaXMuYmwoKT90aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBYcCgxNyx0LHRoaXMpOnRoaXMucD1uZXcgSnAoMTYsdGhpcyk6dD90aGlzLnA9bmV3IFhwKDE5LHQsdGhpcyk6dGhpcy5wPW5ldyBKcCgxOCx0aGlzKTp0aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBYcCgyMSx0LHRoaXMpOnRoaXMucD1uZXcgSnAoMjAsdGhpcyk6dD90aGlzLnA9bmV3IFhwKDIzLHQsdGhpcyk6dGhpcy5wPW5ldyBKcCgyMix0aGlzKTp0aGlzLl9rKCk/dGhpcy5ibCgpP3RoaXMucD1uZXcga2l0KGwobywyOSksdGhpcyxhKTp0aGlzLnA9bmV3ICQ1ZShsKG8sMjkpLHRoaXMsYSk6RGUobywxNTYpP3Q9PUNZP3RoaXMucD1uZXcgSnAoNDAsdGhpcyk6dGhpcy5CYiZTbD90P3RoaXMucD1uZXcgeHN0KG4sdyx0aGlzLChXY2UoKSxnPT1Wcj9QUGU6Zz09aWg/TVBlOmc9PW5tP0JQZTpnPT1CND9OUGU6Zz09TmE/T1BlOmc9PWg3P0ZQZTpnPT1BbD9EUGU6Zz09a2Y/SVBlOmlwZSkpOnRoaXMucD1uZXcgTmF0KGwobywxNTYpLG4sdyx0aGlzKTp0P3RoaXMucD1uZXcgeXN0KG4sdyx0aGlzLChXY2UoKSxnPT1Wcj9QUGU6Zz09aWg/TVBlOmc9PW5tP0JQZTpnPT1CND9OUGU6Zz09TmE/T1BlOmc9PWg3P0ZQZTpnPT1BbD9EUGU6Zz09a2Y/SVBlOmlwZSkpOnRoaXMucD1uZXcgT2F0KGwobywxNTYpLG4sdyx0aGlzKTp0aGlzLmFsKCk/YT90aGlzLkJiJlNsP3RoaXMuYmwoKT90aGlzLnA9bmV3IFRpdChsKG8sMjkpLHRoaXMsYSk6dGhpcy5wPW5ldyBDNGUobChvLDI5KSx0aGlzLGEpOnRoaXMuYmwoKT90aGlzLnA9bmV3IEVpdChsKG8sMjkpLHRoaXMsYSk6dGhpcy5wPW5ldyB5YWUobChvLDI5KSx0aGlzLGEpOnRoaXMuQmImU2w/dGhpcy5ibCgpP3RoaXMucD1uZXcgeXJ0KGwobywyOSksdGhpcyk6dGhpcy5wPW5ldyBqeWUobChvLDI5KSx0aGlzKTp0aGlzLmJsKCk/dGhpcy5wPW5ldyB3cnQobChvLDI5KSx0aGlzKTp0aGlzLnA9bmV3IG9hZShsKG8sMjkpLHRoaXMpOnRoaXMuYmwoKT9hP3RoaXMuQmImU2w/dGhpcy5wPW5ldyBDaXQobChvLDI5KSx0aGlzLGEpOnRoaXMucD1uZXcgRTRlKGwobywyOSksdGhpcyxhKTp0aGlzLkJiJlNsP3RoaXMucD1uZXcgeHJ0KGwobywyOSksdGhpcyk6dGhpcy5wPW5ldyAkeWUobChvLDI5KSx0aGlzKTphP3RoaXMuQmImU2w/dGhpcy5wPW5ldyBTaXQobChvLDI5KSx0aGlzLGEpOnRoaXMucD1uZXcgVDRlKGwobywyOSksdGhpcyxhKTp0aGlzLkJiJlNsP3RoaXMucD1uZXcga3J0KGwobywyOSksdGhpcyk6dGhpcy5wPW5ldyBjSChsKG8sMjkpLHRoaXMpKSx0aGlzLnB9LGgucms9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZtMCkhPTB9LGguX2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5hbD1mdW5jdGlvbigpe3JldHVybiExfSxoLnNrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImX2QpIT0wfSxoLnhrPWZ1bmN0aW9uKCl7cmV0dXJuIFZvZSh0aGlzKX0saC5ibD1mdW5jdGlvbigpe3JldHVybiExfSxoLnRrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImU2wpIT0wfSxoLmNsPWZ1bmN0aW9uKHQpe3RoaXMuaz10fSxoLnVpPWZ1bmN0aW9uKHQpe3BvZSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIEJVKHRoaXMpfSxoLmU9ITEsaC5uPTAsSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbCIsNDYyKSxEKDMzMSw0NjIsezExMDoxLDk0OjEsOTM6MSwzNToxLDE1NToxLDE5NzoxLDU4OjEsMTc5OjEsNjk6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMzMxOjEsMTU4OjEsNDYyOjEsMjkyOjEsMTE5OjEsMTIwOjEsNjkyOjF9LHppZSksaC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEhuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBwdCh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gcHQodGhpcy50KTtjYXNlIDY6cmV0dXJuIEhuKCksISF2OWUodGhpcyk7Y2FzZSA3OnJldHVybiBIbigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP09mKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiBIbigpLCEhKHRoaXMuQmImbTApO2Nhc2UgMTE6cmV0dXJuIEhuKCksISEodGhpcy5CYiZyNCk7Y2FzZSAxMjpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJlh5KTtjYXNlIDEzOnJldHVybiB0aGlzLmo7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcyk7Y2FzZSAxNTpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJlNsKTtjYXNlIDE2OnJldHVybiBIbigpLCEhKHRoaXMuQmImX2QpO2Nhc2UgMTc6cmV0dXJuIGt5KHRoaXMpO2Nhc2UgMTg6cmV0dXJuIEhuKCksISEodGhpcy5CYiZldSk7Y2FzZSAxOTpyZXR1cm4gbj9nY2UodGhpcyk6RnV0KHRoaXMpfXJldHVybiBzZih0aGlzLHQteXIoKFRuKCksTzQpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHxPNCksdCksbixyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdjllKHRoaXMpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJm0wKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJnI0KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJlh5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZTbCkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZfZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIWt5KHRoaXMpO2Nhc2UgMTg6cmV0dXJuKHRoaXMuQmImZXUpIT0wO2Nhc2UgMTk6cmV0dXJuISFGdXQodGhpcyl9cmV0dXJuIG5mKHRoaXMsdC15cigoVG4oKSxPNCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fE80KSx0KSl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcixhO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6cG9lKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDI6YzIodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDM6dTIodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDQ6aTIodGhpcyxsKG4sMTcpLmEpO3JldHVybjtjYXNlIDU6SkplKHRoaXMsbChuLDE3KS5hKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbChuLDE0MikpO3JldHVybjtjYXNlIDk6YT0kMSh0aGlzLGwobiw4OSksbnVsbCksYSYmYS5vaigpO3JldHVybjtjYXNlIDEwOkFFKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAxMTpERSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTI6TEUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDEzOlozZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAxNTpNRSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTY6SUUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDE4OiRjZSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxPNCkpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fE80KSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLE80fSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuLHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpEZSh0aGlzLkNiLDkwKSYmenkoWWwobCh0aGlzLkNiLDkwKSksNCksRnUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOmMyKHRoaXMsITApO3JldHVybjtjYXNlIDM6dTIodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLDApO3JldHVybjtjYXNlIDU6dGhpcy5iPTAsTXkodGhpcywxKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPSQxKHRoaXMsbnVsbCxudWxsKSxyJiZyLm9qKCk7cmV0dXJuO2Nhc2UgMTA6QUUodGhpcywhMCk7cmV0dXJuO2Nhc2UgMTE6REUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTI6TEUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5pPW51bGwseFYodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxNTpNRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxNjpJRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxODokY2UodGhpcywhMSk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxPNCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fE80KSx0KSl9LGgucGk9ZnVuY3Rpb24oKXtnY2UodGhpcyksV2soaWMoKEVsKCksaW8pLHRoaXMpKSxPZih0aGlzKSx0aGlzLkJifD0xfSxoLkprPWZ1bmN0aW9uKCl7cmV0dXJuIHY5ZSh0aGlzKX0saC5Zaz1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmI9MCx0aGlzLmE9bnVsbCxvOGUodGhpcyx0LG4pfSxoLlprPWZ1bmN0aW9uKHQpe0pKZSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuRGImNjQ/QlUodGhpcyk6KHQ9bmV3IEFmKEJVKHRoaXMpKSx0LmErPSIgKGlEOiAiLEdwKHQsKHRoaXMuQmImZXUpIT0wKSx0LmErPSIpIix0LmEpfSxoLmI9MCxJKEduLCJFQXR0cmlidXRlSW1wbCIsMzMxKSxEKDM2NCw0NDgsezExMDoxLDk0OjEsOTM6MSwxNDI6MSwxNTU6MSwxOTc6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwzNjQ6MSwxNTg6MSwxMTk6MSwxMjA6MSw2OTE6MX0pLGguZGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuRGgoKT09dGhpc30saC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gd3VlKHRoaXMsdCl9LGguQmg9ZnVuY3Rpb24odCxuKXt0aGlzLnc9bnVsbCx0aGlzLkRiPW48PDE2fHRoaXMuRGImMjU1LHRoaXMuQ2I9dH0saC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIHp3KHRoaXMpO2Nhc2UgNDpyZXR1cm4gdGhpcy5paygpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9BaCh0aGlzKTpRayh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksdGhpcy5BfXJldHVybiBzZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLHQpLG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSA2OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP3d1ZSh0aGlzLHIpOnRoaXMuQ2IuVGgodGhpcywtMS1vLG51bGwscikpKSxOaCh0aGlzLHQsNixyKX1yZXR1cm4gZj1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksbiksNjkpLGYud2soKS56ayh0aGlzLEt1KHRoaXMpLG4teXIodGhpcy5paSgpKSx0LHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFRvKHRoaXMuQWIsdCxyKTtjYXNlIDY6cmV0dXJuIE5oKHRoaXMsbnVsbCw2LHIpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSxUbyh0aGlzLkEsdCxyKX1yZXR1cm4gbz1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksbiksNjkpLG8ud2soKS5Bayh0aGlzLEt1KHRoaXMpLG4teXIodGhpcy5paSgpKSx0LHIpfSxoLldoPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsJiZ0aGlzLkQ9PXRoaXMuRjtjYXNlIDM6cmV0dXJuISF6dyh0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuaWsoKSE9bnVsbDtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4hIVFrKHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuQSYmdGhpcy5BLmkhPTB9cmV0dXJuIG5mKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fHRoaXMuaWkoKSksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGSCh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOktzZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSA1OkpFKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksJHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSxBcyh0aGlzLkEsbChuLDE2KSk7cmV0dXJufXVmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fHRoaXMuaWkoKSksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSwkX3R9LGgua2k9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpEZSh0aGlzLkNiLDE4NCkmJihsKHRoaXMuQ2IsMTg0KS50Yj1udWxsKSxGdSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6Q0UodGhpcyxudWxsKSxsRSh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpKRSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksJHIodGhpcy5BKTtyZXR1cm59Y2YodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGguaGs9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5HPT0tMSYmKHRoaXMuRz0odD1BaCh0aGlzKSx0P2YyKHQudmkoKSx0aGlzKTotMSkpLHRoaXMuR30saC5paz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLmprPWZ1bmN0aW9uKCl7cmV0dXJuIEFoKHRoaXMpfSxoLmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudn0saC5raz1mdW5jdGlvbigpe3JldHVybiB6dyh0aGlzKX0saC5saz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQn0saC5taz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkZ9LGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIHVsZSh0aGlzLHQpfSxoLmZsPWZ1bmN0aW9uKHQpe3RoaXMudj10fSxoLmdsPWZ1bmN0aW9uKHQpe3hmdCh0aGlzLHQpfSxoLmhsPWZ1bmN0aW9uKHQpe3RoaXMuQz10fSxoLnVpPWZ1bmN0aW9uKHQpe0ZIKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVVYodGhpcyl9LGguQz1udWxsLGguRD1udWxsLGguRz0tMSxJKEduLCJFQ2xhc3NpZmllckltcGwiLDM2NCksRCg5MCwzNjQsezExMDoxLDk0OjEsOTM6MSwyOToxLDE0MjoxLDE1NToxLDE5NzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDkwOjEsMzY0OjEsMTU4OjEsNDgyOjEsMTE5OjEsMTIwOjEsNjkxOjF9LGh6KSxoLmRsPWZ1bmN0aW9uKHQpe3JldHVybiBCZm4odGhpcyx0LkRoKCkpfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gencodGhpcyk7Y2FzZSA0OnJldHVybiBudWxsO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9BaCh0aGlzKTpRayh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksdGhpcy5BO2Nhc2UgODpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSA5OnJldHVybiBIbigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDEwOnJldHVybiBkYyh0aGlzKTtjYXNlIDExOnJldHVybiF0aGlzLnEmJih0aGlzLnE9bmV3IG50KFVmLHRoaXMsMTEsMTApKSx0aGlzLnE7Y2FzZSAxMjpyZXR1cm4gZDYodGhpcyk7Y2FzZSAxMzpyZXR1cm4gSkEodGhpcyk7Y2FzZSAxNDpyZXR1cm4gSkEodGhpcyksdGhpcy5yO2Nhc2UgMTU6cmV0dXJuIGQ2KHRoaXMpLHRoaXMuaztjYXNlIDE2OnJldHVybiBvOWUodGhpcyk7Y2FzZSAxNzpyZXR1cm4gZGxlKHRoaXMpO2Nhc2UgMTg6cmV0dXJuIFNkKHRoaXMpO2Nhc2UgMTk6cmV0dXJuIF9VKHRoaXMpO2Nhc2UgMjA6cmV0dXJuIGQ2KHRoaXMpLHRoaXMubztjYXNlIDIxOnJldHVybiF0aGlzLnMmJih0aGlzLnM9bmV3IG50KGRsLHRoaXMsMjEsMTcpKSx0aGlzLnM7Y2FzZSAyMjpyZXR1cm4gZHUodGhpcyk7Y2FzZSAyMzpyZXR1cm4gWnVlKHRoaXMpfXJldHVybiBzZih0aGlzLHQteXIoKFRuKCksSmIpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHxKYiksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFJ1KHRoaXMuQWIsdCxyKTtjYXNlIDY6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/d3VlKHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLW8sbnVsbCxyKSkpLE5oKHRoaXMsdCw2LHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMucSYmKHRoaXMucT1uZXcgbnQoVWYsdGhpcywxMSwxMCkpLFJ1KHRoaXMucSx0LHIpO2Nhc2UgMjE6cmV0dXJuIXRoaXMucyYmKHRoaXMucz1uZXcgbnQoZGwsdGhpcywyMSwxNykpLFJ1KHRoaXMucyx0LHIpfXJldHVybiBmPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksSmIpKSxuKSw2OSksZi53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxKYikpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgNjpyZXR1cm4gTmgodGhpcyxudWxsLDYscik7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLFRvKHRoaXMuQSx0LHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMucSYmKHRoaXMucT1uZXcgbnQoVWYsdGhpcywxMSwxMCkpLFRvKHRoaXMucSx0LHIpO2Nhc2UgMjE6cmV0dXJuIXRoaXMucyYmKHRoaXMucz1uZXcgbnQoZGwsdGhpcywyMSwxNykpLFRvKHRoaXMucyx0LHIpO2Nhc2UgMjI6cmV0dXJuIFRvKGR1KHRoaXMpLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxKYikpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLEpiKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhencodGhpcyk7Y2FzZSA0OnJldHVybiExO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiEhUWsodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5BJiZ0aGlzLkEuaSE9MDtjYXNlIDg6cmV0dXJuKHRoaXMuQmImMjU2KSE9MDtjYXNlIDk6cmV0dXJuKHRoaXMuQmImNTEyKSE9MDtjYXNlIDEwOnJldHVybiEhdGhpcy51JiZkdSh0aGlzLnUuYSkuaSE9MCYmISh0aGlzLm4mJmN1ZSh0aGlzLm4pKTtjYXNlIDExOnJldHVybiEhdGhpcy5xJiZ0aGlzLnEuaSE9MDtjYXNlIDEyOnJldHVybiBkNih0aGlzKS5pIT0wO2Nhc2UgMTM6cmV0dXJuIEpBKHRoaXMpLmkhPTA7Y2FzZSAxNDpyZXR1cm4gSkEodGhpcyksdGhpcy5yLmkhPTA7Y2FzZSAxNTpyZXR1cm4gZDYodGhpcyksdGhpcy5rLmkhPTA7Y2FzZSAxNjpyZXR1cm4gbzllKHRoaXMpLmkhPTA7Y2FzZSAxNzpyZXR1cm4gZGxlKHRoaXMpLmkhPTA7Y2FzZSAxODpyZXR1cm4gU2QodGhpcykuaSE9MDtjYXNlIDE5OnJldHVybiBfVSh0aGlzKS5pIT0wO2Nhc2UgMjA6cmV0dXJuIGQ2KHRoaXMpLCEhdGhpcy5vO2Nhc2UgMjE6cmV0dXJuISF0aGlzLnMmJnRoaXMucy5pIT0wO2Nhc2UgMjI6cmV0dXJuISF0aGlzLm4mJmN1ZSh0aGlzLm4pO2Nhc2UgMjM6cmV0dXJuIFp1ZSh0aGlzKS5pIT0wfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksSmIpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxKYiksdCkpfSxoLlpoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXRoaXMuaT09bnVsbHx8dGhpcy5xJiZ0aGlzLnEuaSE9MD9udWxsOm9QKHRoaXMsdCksbnx8SGtlKHRoaXMsdCl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksQXModGhpcy5BYixsKG4sMTYpKTtyZXR1cm47Y2FzZSAxOkZIKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDI6S3NlKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDU6SkUodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSwkcih0aGlzLkEpLCF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLEFzKHRoaXMuQSxsKG4sMTYpKTtyZXR1cm47Y2FzZSA4OmM4ZSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgOTp1OGUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDEwOnRMKGRjKHRoaXMpKSxBcyhkYyh0aGlzKSxsKG4sMTYpKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5xJiYodGhpcy5xPW5ldyBudChVZix0aGlzLDExLDEwKSksJHIodGhpcy5xKSwhdGhpcy5xJiYodGhpcy5xPW5ldyBudChVZix0aGlzLDExLDEwKSksQXModGhpcy5xLGwobiwxNikpO3JldHVybjtjYXNlIDIxOiF0aGlzLnMmJih0aGlzLnM9bmV3IG50KGRsLHRoaXMsMjEsMTcpKSwkcih0aGlzLnMpLCF0aGlzLnMmJih0aGlzLnM9bmV3IG50KGRsLHRoaXMsMjEsMTcpKSxBcyh0aGlzLnMsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMjI6JHIoZHUodGhpcykpLEFzKGR1KHRoaXMpLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksSmIpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxKYiksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxKYn0saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkRlKHRoaXMuQ2IsMTg0KSYmKGwodGhpcy5DYiwxODQpLnRiPW51bGwpLEZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpDRSh0aGlzLG51bGwpLGxFKHRoaXMsdGhpcy5EKTtyZXR1cm47Y2FzZSA1OkpFKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSwkcih0aGlzLkEpO3JldHVybjtjYXNlIDg6YzhlKHRoaXMsITEpO3JldHVybjtjYXNlIDk6dThlKHRoaXMsITEpO3JldHVybjtjYXNlIDEwOnRoaXMudSYmdEwodGhpcy51KTtyZXR1cm47Y2FzZSAxMTohdGhpcy5xJiYodGhpcy5xPW5ldyBudChVZix0aGlzLDExLDEwKSksJHIodGhpcy5xKTtyZXR1cm47Y2FzZSAyMTohdGhpcy5zJiYodGhpcy5zPW5ldyBudChkbCx0aGlzLDIxLDE3KSksJHIodGhpcy5zKTtyZXR1cm47Y2FzZSAyMjp0aGlzLm4mJiRyKHRoaXMubik7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxKYikpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fEpiKSx0KSl9LGgucGk9ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKGQ2KHRoaXMpLEpBKHRoaXMpLG85ZSh0aGlzKSxkbGUodGhpcyksU2QodGhpcyksX1UodGhpcyksWnVlKHRoaXMpLHVBKGNkbihZbCh0aGlzKSkpLHRoaXMucylmb3IodD0wLG49dGhpcy5zLmk7dDxuOysrdClTTyhPZSh0aGlzLnMsdCkpO2lmKHRoaXMucSlmb3IodD0wLG49dGhpcy5xLmk7dDxuOysrdClTTyhPZSh0aGlzLnEsdCkpO28yKChFbCgpLGlvKSx0aGlzKS54ZSgpLHRoaXMuQmJ8PTF9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gX3hlKHRoaXMpfSxoLms9bnVsbCxoLnI9bnVsbDt2YXIgcU0sWF90LG5wZTtJKEduLCJFQ2xhc3NJbXBsIiw5MCksRCgyMDkyLDIwOTEsYjV0KSxoLkVpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGxsZSh0aGlzLHQsbil9LGguRmk9ZnVuY3Rpb24odCl7cmV0dXJuIGxsZSh0aGlzLHRoaXMuaSx0KX0saC5HaT1mdW5jdGlvbih0LG4pe0U5ZSh0aGlzLHQsbil9LGguSGk9ZnVuY3Rpb24odCl7VnVlKHRoaXMsdCl9LGguV2s9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUnUodGhpcyx0LG4pfSxoLiRpPWZ1bmN0aW9uKHQpe3JldHVybiBSNmUodGhpcyx0KX0saC5Yaz1mdW5jdGlvbih0LG4pe3JldHVybiBUbyh0aGlzLHQsbil9LGguWGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gS210KHRoaXMsdCxuKX0saC5JaT1mdW5jdGlvbigpe3JldHVybiBuZXcgSDgodGhpcyl9LGguSmk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENPKHRoaXMpfSxoLktpPWZ1bmN0aW9uKHQpe3JldHVybiBtTih0aGlzLHQpfSxJKHVzLCJOb3RpZnlpbmdJbnRlcm5hbEVMaXN0SW1wbCIsMjA5MiksRCg2MzIsMjA5MixrYyksaC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gZ3Z0KHRoaXMsdCl9LGguSWo9ZnVuY3Rpb24odCxuLHIsYSxvKXtyZXR1cm4gckEodGhpcyx0LG4scixhLG8pfSxoLkpqPWZ1bmN0aW9uKHQpe3hrKHRoaXMsdCl9LGguRms9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXN9LGguTGs9ZnVuY3Rpb24oKXtyZXR1cm4gTW4odGhpcy5lLkRoKCksdGhpcy5MaigpKX0saC5Laj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkxrKCl9LGguTGo9ZnVuY3Rpb24oKXtyZXR1cm4gbXModGhpcy5lLkRoKCksdGhpcy5MaygpKX0saC5pbD1mdW5jdGlvbigpe3JldHVybiBsKHRoaXMuTGsoKS5IaygpLDI5KS5raygpfSxoLmpsPWZ1bmN0aW9uKCl7cmV0dXJuIFJvKGwodGhpcy5MaygpLDE5KSkubn0saC5qaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGgua2w9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5sbD1mdW5jdGlvbigpe3JldHVybiExfSxoLm1sPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgubmw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gZjIodGhpcyx0KX0saC5Oaj1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByPWwodCw1NCksdGhpcy5tbCgpP3RoaXMua2woKT9yLlJoKHRoaXMuZSx0aGlzLmpsKCksdGhpcy5pbCgpLG4pOnIuUmgodGhpcy5lLG1zKHIuRGgoKSxSbyhsKHRoaXMuTGsoKSwxOSkpKSxudWxsLG4pOnIuUmgodGhpcy5lLC0xLXRoaXMuTGooKSxudWxsLG4pfSxoLk9qPWZ1bmN0aW9uKHQsbil7dmFyIHI7cmV0dXJuIHI9bCh0LDU0KSx0aGlzLm1sKCk/dGhpcy5rbCgpP3IuVGgodGhpcy5lLHRoaXMuamwoKSx0aGlzLmlsKCksbik6ci5UaCh0aGlzLmUsbXMoci5EaCgpLFJvKGwodGhpcy5MaygpLDE5KSkpLG51bGwsbik6ci5UaCh0aGlzLmUsLTEtdGhpcy5MaigpLG51bGwsbil9LGguYWw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5vbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBSY3QodGhpcy5kLHQpfSxoLlBqPWZ1bmN0aW9uKCl7cmV0dXJuIGhoKHRoaXMuZSl9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pIT0wfSxoLmFqPWZ1bmN0aW9uKHQpe3JldHVybiBiTih0aGlzLmQsdCl9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5vbCgpJiZ0aGlzLm5sKCk/RXgodGhpcyx0LGwobiw1OCkpOm59LGgucGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuVmgoKT95Yih0aGlzLmUsbCh0LDU0KSk6dH0saC5XYj1mdW5jdGlvbih0KXtEbnQodGhpcyx0KX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBPbHQodGhpcyl9LGguUWM9ZnVuY3Rpb24odCl7dmFyIG47aWYodGhpcy5ubCgpKWZvcihuPXRoaXMuaS0xO24+PTA7LS1uKU9lKHRoaXMsbik7cmV0dXJuIE84ZSh0aGlzLHQpfSxoLkdrPWZ1bmN0aW9uKCl7JHIodGhpcyl9LGguWmk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gSGh0KHRoaXMsdCxuKX0sSSh1cywiRWNvcmVFTGlzdCIsNjMyKSxEKDUwNSw2MzIsa2MsRk8pLGguTGk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5Maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5vbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLlNpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbn0saC5ZaT1mdW5jdGlvbigpe3JldHVybiExfSxoLmM9MCxJKHVzLCJFT2JqZWN0RUxpc3QiLDUwNSksRCg4Myw1MDUsa2MsWXMpLGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5tbD1mdW5jdGlvbigpe3JldHVybiExfSxoLmFsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkVPYmplY3RDb250YWlubWVudEVMaXN0Iiw4MyksRCg1NTUsODMsa2MsQnEpLGguTmk9ZnVuY3Rpb24oKXt0aGlzLmI9ITB9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkdrPWZ1bmN0aW9uKCl7dmFyIHQ7JHIodGhpcyksaGgodGhpcy5lKT8odD10aGlzLmIsdGhpcy5iPSExLE5pKHRoaXMuZSxuZXcgaDAodGhpcy5lLDIsdGhpcy5jLHQsITEpKSk6dGhpcy5iPSExfSxoLmI9ITEsSSh1cywiRU9iamVjdENvbnRhaW5tZW50RUxpc3QvVW5zZXR0YWJsZSIsNTU1KSxEKDExNjEsNTU1LGtjLHZzdCksaC5UaT1mdW5jdGlvbih0LG4pe3ZhciByLGE7cmV0dXJuIHI9bChBQSh0aGlzLHQsbiksODkpLGhoKHRoaXMuZSkmJnhrKHRoaXMsbmV3IHNOKHRoaXMuYSw3LChUbigpLHpfdCkscHQobiksKGE9ci5jLERlKGEsOTApP2woYSwyOSk6S2YpLHQpKSxyfSxoLlVqPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEw1bih0aGlzLGwodCw4OSksbil9LGguVmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQTVuKHRoaXMsbCh0LDg5KSxuKX0saC5Xaj1mdW5jdGlvbih0LG4scil7cmV0dXJuIEk4bih0aGlzLGwodCw4OSksbChuLDg5KSxyKX0saC5Jaj1mdW5jdGlvbih0LG4scixhLG8pe3N3aXRjaCh0KXtjYXNlIDM6cmV0dXJuIHJBKHRoaXMsdCxuLHIsYSx0aGlzLmk+MSk7Y2FzZSA1OnJldHVybiByQSh0aGlzLHQsbixyLGEsdGhpcy5pLWwociwxNSkuZ2MoKT4wKTtkZWZhdWx0OnJldHVybiBuZXcgWmcodGhpcy5lLHQsdGhpcy5jLG4scixhLCEwKX19LGguVGo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5Raj1mdW5jdGlvbigpe3JldHVybiBjdWUodGhpcyl9LGguR2s9ZnVuY3Rpb24oKXskcih0aGlzKX0sSShHbiwiRUNsYXNzSW1wbC8xIiwxMTYxKSxEKDExNzUsMTE3NCxTU2UpLGguZGo9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHc7aWYocj10LmdqKCksciE9OCl7aWYoYT1sNm4odCksYT09MClzd2l0Y2gocil7Y2FzZSAxOmNhc2UgOTp7dz10LmtqKCksdyE9bnVsbCYmKG49WWwobCh3LDQ4MikpLCFuLmMmJihuLmM9bmV3IFhkKSxzVihuLmMsdC5qaigpKSksZz10LmlqKCksZyE9bnVsbCYmKG89bChnLDQ4Miksby5CYiYxfHwobj1ZbChvKSwhbi5jJiYobi5jPW5ldyBYZCkscXIobi5jLGwodC5qaigpLDI5KSkpKTticmVha31jYXNlIDM6e2c9dC5paigpLGchPW51bGwmJihvPWwoZyw0ODIpLG8uQmImMXx8KG49WWwobyksIW4uYyYmKG4uYz1uZXcgWGQpLHFyKG4uYyxsKHQuamooKSwyOSkpKSk7YnJlYWt9Y2FzZSA1OntpZihnPXQuaWooKSxnIT1udWxsKWZvcihmPWwoZywxNikuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksNDgyKSxvLkJiJjF8fChuPVlsKG8pLCFuLmMmJihuLmM9bmV3IFhkKSxxcihuLmMsbCh0LmpqKCksMjkpKSk7YnJlYWt9Y2FzZSA0Ont3PXQua2ooKSx3IT1udWxsJiYobz1sKHcsNDgyKSxvLkJiJjF8fChuPVlsKG8pLCFuLmMmJihuLmM9bmV3IFhkKSxzVihuLmMsdC5qaigpKSkpO2JyZWFrfWNhc2UgNjp7aWYodz10LmtqKCksdyE9bnVsbClmb3IoZj1sKHcsMTYpLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDQ4Miksby5CYiYxfHwobj1ZbChvKSwhbi5jJiYobi5jPW5ldyBYZCksc1Yobi5jLHQuamooKSkpO2JyZWFrfX10aGlzLnFsKGEpfX0saC5xbD1mdW5jdGlvbih0KXtWYnQodGhpcyx0KX0saC5iPTYzLEkoR24sIkVTdXBlckFkYXB0ZXIiLDExNzUpLEQoMTE3NiwxMTc1LFNTZSxiUWUpLGgucWw9ZnVuY3Rpb24odCl7enkodGhpcyx0KX0sSShHbiwiRUNsYXNzSW1wbC8xMCIsMTE3NiksRCgxMTY1LDcxMCxrYyksaC5FaT1mdW5jdGlvbih0LG4pe3JldHVybiBEdWUodGhpcyx0LG4pfSxoLkZpPWZ1bmN0aW9uKHQpe3JldHVybiBPZHQodGhpcyx0KX0saC5HaT1mdW5jdGlvbih0LG4pe0lOKHRoaXMsdCxuKX0saC5IaT1mdW5jdGlvbih0KXt0Tih0aGlzLHQpfSxoLiRpPWZ1bmN0aW9uKHQpe3JldHVybiBSNmUodGhpcyx0KX0saC5YaT1mdW5jdGlvbih0LG4pe3JldHVybiBVb2UodGhpcyx0LG4pfSxoLldrPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5JaT1mdW5jdGlvbigpe3JldHVybiBuZXcgSDgodGhpcyl9LGguSmk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENPKHRoaXMpfSxoLktpPWZ1bmN0aW9uKHQpe3JldHVybiBtTih0aGlzLHQpfSxoLlhrPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpc30saC5Raj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmkhPTB9LGguV2I9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5Haz1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LEkodXMsIkVjb3JlRUxpc3QvVW5tb2RpZmlhYmxlRUxpc3QiLDExNjUpLEQoMzI4LDExNjUsa2MsTjUpLGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSSh1cywiRWNvcmVFTGlzdC9Vbm1vZGlmaWFibGVFTGlzdC9GYXN0Q29tcGFyZSIsMzI4KSxEKDExNjgsMzI4LGtjLGcwdCksaC5kZD1mdW5jdGlvbih0KXt2YXIgbixyLGE7aWYoRGUodCwxNzkpJiYobj1sKHQsMTc5KSxyPW4uTGooKSxyIT0tMSkpe2ZvcihhPXRoaXMuaTtyPGE7KytyKWlmKHFlKHRoaXMuZ1tyXSk9PT1xZSh0KSlyZXR1cm4gcn1yZXR1cm4tMX0sSShHbiwiRUNsYXNzSW1wbC8xRUFsbFN0cnVjdHVyYWxGZWF0dXJlc0xpc3QiLDExNjgpLEQoMTE2Miw1MDYsQmQsUWMpLGguYWo9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKFdvLG01dCw4OSx0LDAsMSl9LGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRUNsYXNzSW1wbC8xRUdlbmVyaWNTdXBlclR5cGVFTGlzdCIsMTE2MiksRCg2MzMsNTA2LEJkLFNJKSxoLmFqPWZ1bmN0aW9uKHQpe3JldHVybiBXZShkbCxTNiwxNzksdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVDbGFzc0ltcGwvMUVTdHJ1Y3R1cmFsRmVhdHVyZVVuaXF1ZUVMaXN0Iiw2MzMpLEQoNzU1LDUwNixCZCxfSSksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoSTQsUzYsMTksdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVDbGFzc0ltcGwvMVJlZmVyZW5jZUxpc3QiLDc1NSksRCgxMTYzLDUwNixCZCxtUWUpLGguTWk9ZnVuY3Rpb24odCxuKXt1Z24odGhpcyxsKG4sMzUpKX0saC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoRDQsUzYsMzUsdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVDbGFzc0ltcGwvMiIsMTE2MyksRCgxMTY0LDUwNixCZCxEUyksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoRDQsUzYsMzUsdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVDbGFzc0ltcGwvMyIsMTE2NCksRCgxMTY2LDMyOCxrYyxxaXQpLGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIF9tbih0aGlzLGwodCwzNSkpfSxoLkhpPWZ1bmN0aW9uKHQpe1h1bih0aGlzLGwodCwzNSkpfSxJKEduLCJFQ2xhc3NJbXBsLzQiLDExNjYpLEQoMTE2NywzMjgsa2Mseml0KSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiBBbW4odGhpcyxsKHQsMTkpKX0saC5IaT1mdW5jdGlvbih0KXtRdW4odGhpcyxsKHQsMTkpKX0sSShHbiwiRUNsYXNzSW1wbC81IiwxMTY3KSxEKDExNjksNTA2LEJkLEpuZSksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoVWYsTFNlLDYyLHQsMCwxKX0saC5ZaT1mdW5jdGlvbigpe3JldHVybiExfSxJKEduLCJFQ2xhc3NJbXBsLzYiLDExNjkpLEQoMTE3MCw1MDYsQmQsWm5lKSxoLmFqPWZ1bmN0aW9uKHQpe3JldHVybiBXZShJNCxTNiwxOSx0LDAsMSl9LGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRUNsYXNzSW1wbC83IiwxMTcwKSxEKDIwOTUsMjA5NCx7MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNzA6MSw2MToxLDcxOjF9KSxoLkVpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHdrZSh0aGlzLHQsbil9LGguRmk9ZnVuY3Rpb24odCl7cmV0dXJuIHdrZSh0aGlzLHRoaXMuRWooKSx0KX0saC5HaT1mdW5jdGlvbih0LG4pe0UydCh0aGlzLHQsbil9LGguSGk9ZnVuY3Rpb24odCl7aDJ0KHRoaXMsdCl9LGguV2s9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbjduKHRoaXMsdCxuKX0saC5Yaz1mdW5jdGlvbih0LG4pe3JldHVybiBMNm4odGhpcyx0LG4pfSxoLlhpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE1tdCh0aGlzLHQsbil9LGguJGk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGoodCl9LGguSWk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEg4KHRoaXMpfSxoLnBqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2ooKX0saC5KaT1mdW5jdGlvbigpe3JldHVybiBuZXcgQ08odGhpcyl9LGguS2k9ZnVuY3Rpb24odCl7cmV0dXJuIG1OKHRoaXMsdCl9LEkodXMsIkRlbGVnYXRpbmdOb3RpZnlpbmdJbnRlcm5hbEVMaXN0SW1wbCIsMjA5NSksRCg3NTYsMjA5NSxNU2UpLGguTGk9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1NbihzbCh0aGlzLmIpLHRoaXMuTGooKSkuSGsoKSxEZSh0LDE1NikmJiFEZSh0LDQ2OSkmJih0LmtrKCkuaSYxKT09MH0saC5IYz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2lmKHRoaXMub2woKSl7aWYoRT10aGlzLkVqKCksRT40KWlmKHRoaXMuZmsodCkpe2lmKHRoaXMuYWwoKSl7aWYoYT1sKHQsNTQpLHI9YS5FaCgpLHc9cj09dGhpcy5iJiYodGhpcy5tbCgpP2EueWgoYS5GaCgpLGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLkhrKCksMjkpLmtrKCkpPT1SbyhsKE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSwxOSkpLm46LTEtYS5GaCgpPT10aGlzLkxqKCkpLHRoaXMubmwoKSYmIXcmJiFyJiZhLkpoKCkpe2ZvcihvPTA7bzxFOysrbylpZihuPUZhZSh0aGlzLHRoaXMueGoobykpLHFlKG4pPT09cWUodCkpcmV0dXJuITB9cmV0dXJuIHd9ZWxzZSBpZih0aGlzLm1sKCkmJiF0aGlzLmxsKCkpe2lmKGY9bCh0LDU4KS5NaChSbyhsKE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSwxOSkpKSxxZShmKT09PXFlKHRoaXMuYikpcmV0dXJuITA7aWYoZj09bnVsbHx8IWwoZiw1OCkuVmgoKSlyZXR1cm4hMX19ZWxzZSByZXR1cm4hMTtpZihnPXRoaXMudWoodCksdGhpcy5ubCgpJiYhZyl7Zm9yKG89MDtvPEU7KytvKWlmKGE9RmFlKHRoaXMsdGhpcy54aihvKSkscWUoYSk9PT1xZSh0KSlyZXR1cm4hMH1yZXR1cm4gZ31lbHNlIHJldHVybiB0aGlzLnVqKHQpfSxoLklqPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBaZyh0aGlzLmIsdCx0aGlzLkxqKCksbixyLGEsbyl9LGguSmo9ZnVuY3Rpb24odCl7TmkodGhpcy5iLHQpfSxoLkZrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzfSxoLktqPWZ1bmN0aW9uKCl7cmV0dXJuIE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKX0saC5Maj1mdW5jdGlvbigpe3JldHVybiBtcyhzbCh0aGlzLmIpLE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSl9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLmtsPWZ1bmN0aW9uKCl7cmV0dXJuISFNbihzbCh0aGlzLmIpLHRoaXMuTGooKSkuSGsoKS5raygpfSxoLk1qPWZ1bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gbj1NbihzbCh0aGlzLmIpLHRoaXMuTGooKSksRGUobiwxMDIpPyh0PWwobiwxOSksKHQuQmImZXUpIT0wfHwhIVJvKGwobiwxOSkpKTohMX0saC5sbD1mdW5jdGlvbigpe3ZhciB0LG4scixhO3JldHVybiBuPU1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSxEZShuLDEwMik/KHQ9bChuLDE5KSxyPVJvKHQpLCEhciYmKGE9ci50LGE+MXx8YT09LTEpKTohMX0saC5tbD1mdW5jdGlvbigpe3ZhciB0LG4scjtyZXR1cm4gbj1NbihzbCh0aGlzLmIpLHRoaXMuTGooKSksRGUobiwxMDIpPyh0PWwobiwxOSkscj1Sbyh0KSwhIXIpOiExfSxoLm5sPWZ1bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gbj1NbihzbCh0aGlzLmIpLHRoaXMuTGooKSksRGUobiwxMDIpPyh0PWwobiwxOSksKHQuQmImSW8pIT0wKTohMX0saC5kZD1mdW5jdGlvbih0KXt2YXIgbixyLGEsbztpZihhPXRoaXMuemoodCksYT49MClyZXR1cm4gYTtpZih0aGlzLm9sKCkpe2ZvcihyPTAsbz10aGlzLkVqKCk7cjxvOysrcilpZihuPUZhZSh0aGlzLHRoaXMueGoocikpLHFlKG4pPT09cWUodCkpcmV0dXJuIHJ9cmV0dXJuLTF9LGguTmo9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gcj1sKHQsNTQpLHRoaXMubWwoKT90aGlzLmtsKCk/ci5SaCh0aGlzLmIsUm8obChNbihzbCh0aGlzLmIpLHRoaXMuTGooKSksMTkpKS5uLGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLkhrKCksMjkpLmtrKCksbik6ci5SaCh0aGlzLmIsbXMoci5EaCgpLFJvKGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLDE5KSkpLG51bGwsbik6ci5SaCh0aGlzLmIsLTEtdGhpcy5MaigpLG51bGwsbil9LGguT2o9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gcj1sKHQsNTQpLHRoaXMubWwoKT90aGlzLmtsKCk/ci5UaCh0aGlzLmIsUm8obChNbihzbCh0aGlzLmIpLHRoaXMuTGooKSksMTkpKS5uLGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLkhrKCksMjkpLmtrKCksbik6ci5UaCh0aGlzLmIsbXMoci5EaCgpLFJvKGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLDE5KSkpLG51bGwsbik6ci5UaCh0aGlzLmIsLTEtdGhpcy5MaigpLG51bGwsbil9LGguYWw9ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiBuPU1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSxEZShuLDEwMik/KHQ9bChuLDE5KSwodC5CYiZldSkhPTApOiExfSxoLm9sPWZ1bmN0aW9uKCl7cmV0dXJuIERlKE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKS5IaygpLDkwKX0saC5maz1mdW5jdGlvbih0KXtyZXR1cm4gTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLkhrKCkuZmsodCl9LGguUGo9ZnVuY3Rpb24oKXtyZXR1cm4gaGgodGhpcy5iKX0saC5Raj1mdW5jdGlvbigpe3JldHVybiF0aGlzLkFqKCl9LGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4gTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLlNpKCl9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbVAodGhpcyx0LG4pfSxoLldiPWZ1bmN0aW9uKHQpe3RMKHRoaXMpLEFzKHRoaXMsbCh0LDE1KSl9LGguUGM9ZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLm5sKCkpZm9yKHQ9dGhpcy5FaigpLTE7dD49MDstLXQpbVAodGhpcyx0LHRoaXMueGoodCkpO3JldHVybiB0aGlzLkZqKCl9LGguUWM9ZnVuY3Rpb24odCl7dmFyIG47aWYodGhpcy5ubCgpKWZvcihuPXRoaXMuRWooKS0xO24+PTA7LS1uKW1QKHRoaXMsbix0aGlzLnhqKG4pKTtyZXR1cm4gdGhpcy5Haih0KX0saC5Haz1mdW5jdGlvbigpe3RMKHRoaXMpfSxoLlppPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHlsdCh0aGlzLHQsbil9LEkodXMsIkRlbGVnYXRpbmdFY29yZUVMaXN0Iiw3NTYpLEQoMTE3MSw3NTYsTVNlLE5ydCksaC5xaj1mdW5jdGlvbih0LG4pe2Fmbih0aGlzLHQsbChuLDI5KSl9LGgucmo9ZnVuY3Rpb24odCl7V2xuKHRoaXMsbCh0LDI5KSl9LGgueGo9ZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gbj1sKE9lKGR1KHRoaXMuYSksdCksODkpLHI9bi5jLERlKHIsOTApP2wociwyOSk6KFRuKCksS2YpfSxoLkNqPWZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIG49bChWeShkdSh0aGlzLmEpLHQpLDg5KSxyPW4uYyxEZShyLDkwKT9sKHIsMjkpOihUbigpLEtmKX0saC5Eaj1mdW5jdGlvbih0LG4pe3JldHVybiByN24odGhpcyx0LGwobiwyOSkpfSxoLkxpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguSWo9ZnVuY3Rpb24odCxuLHIsYSxvKXtyZXR1cm4gbnVsbH0saC5zaj1mdW5jdGlvbigpe3JldHVybiBuZXcgd1FlKHRoaXMpfSxoLnRqPWZ1bmN0aW9uKCl7JHIoZHUodGhpcy5hKSl9LGgudWo9ZnVuY3Rpb24odCl7cmV0dXJuIGwxdCh0aGlzLHQpfSxoLnZqPWZ1bmN0aW9uKHQpe3ZhciBuLHI7Zm9yKHI9dC5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksIWwxdCh0aGlzLG4pKXJldHVybiExO3JldHVybiEwfSxoLndqPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtpZihEZSh0LDE1KSYmKGE9bCh0LDE1KSxhLmdjKCk9PWR1KHRoaXMuYSkuaSkpe2ZvcihuPWEuS2MoKSxyPW5ldyBvcih0aGlzKTtuLk9iKCk7KWlmKHFlKG4uUGIoKSkhPT1xZShncihyKSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9LGgueWo9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvO2ZvcihyPTEsbj1uZXcgb3IoZHUodGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDg5KSxhPShvPXQuYyxEZShvLDkwKT9sKG8sMjkpOihUbigpLEtmKSkscj0zMSpyKyhhP2Z3KGEpOjApO3JldHVybiByfSxoLnpqPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO2ZvcihhPTAscj1uZXcgb3IoZHUodGhpcy5hKSk7ci5lIT1yLmkuZ2MoKTspe2lmKG49bChncihyKSw4OSkscWUodCk9PT1xZSgobz1uLmMsRGUobyw5MCk/bChvLDI5KTooVG4oKSxLZikpKSlyZXR1cm4gYTsrK2F9cmV0dXJuLTF9LGguQWo9ZnVuY3Rpb24oKXtyZXR1cm4gZHUodGhpcy5hKS5pPT0wfSxoLkJqPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGguRWo9ZnVuY3Rpb24oKXtyZXR1cm4gZHUodGhpcy5hKS5pfSxoLkZqPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmO2ZvcihmPWR1KHRoaXMuYSkuaSxvPVdlKHdhLFJuLDEsZiw1LDEpLHI9MCxuPW5ldyBvcihkdSh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyl0PWwoZ3IobiksODkpLG9bcisrXT0oYT10LmMsRGUoYSw5MCk/bChhLDI5KTooVG4oKSxLZikpO3JldHVybiBvfSxoLkdqPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3O2Zvcih3PWR1KHRoaXMuYSkuaSx0Lmxlbmd0aDx3JiYobz1iTihiaCh0KS5jLHcpLHQ9byksdC5sZW5ndGg+dyYmVHModCx3LG51bGwpLGE9MCxyPW5ldyBvcihkdSh0aGlzLmEpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksODkpLGY9KGc9bi5jLERlKGcsOTApP2woZywyOSk6KFRuKCksS2YpKSxUcyh0LGErKyxmKTtyZXR1cm4gdH0saC5Iaj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG87Zm9yKG89bmV3IFVwLG8uYSs9IlsiLHQ9ZHUodGhpcy5hKSxuPTAsYT1kdSh0aGlzLmEpLmk7bjxhOylYbyhvLGpfKChyPWwoT2UodCxuKSw4OSkuYyxEZShyLDkwKT9sKHIsMjkpOihUbigpLEtmKSkpKSwrK248YSYmKG8uYSs9Q28pO3JldHVybiBvLmErPSJdIixvLmF9LGguSmo9ZnVuY3Rpb24odCl7fSxoLkxqPWZ1bmN0aW9uKCl7cmV0dXJuIDEwfSxoLmtsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5sbD1mdW5jdGlvbigpe3JldHVybiExfSxoLm1sPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgubmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5hbD1mdW5jdGlvbigpe3JldHVybiExfSxoLm9sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsOTApfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIExibih0aGlzLmEpfSxoLlNpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRUNsYXNzSW1wbC84IiwxMTcxKSxEKDExNzIsMjA2MixpVCx3UWUpLGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG1OKHRoaXMuYSx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiBkdSh0aGlzLmEuYSkuaX0sSShHbiwiRUNsYXNzSW1wbC84LzEiLDExNzIpLEQoMTE3Myw1MDYsQmQsSVMpLGguYWo9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGwxLFJuLDE0Mix0LDAsMSl9LGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRUNsYXNzSW1wbC85IiwxMTczKSxEKDExNjAsNDksb0VlLHVKZSksSShHbiwiRUNsYXNzSW1wbC9NeUhhc2hTZXQiLDExNjApLEQoNTc3LDM2NCx7MTEwOjEsOTQ6MSw5MzoxLDE0MjoxLDE1NjoxLDg0NzoxLDE1NToxLDE5NzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDM2NDoxLDE1ODoxLDExOToxLDEyMDoxLDY5MToxfSxGeiksaC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIHp3KHRoaXMpO2Nhc2UgNDpyZXR1cm4gdGhpcy5paygpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9BaCh0aGlzKTpRayh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksdGhpcy5BO2Nhc2UgODpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjI1Nil9cmV0dXJuIHNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksdCksbixyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhencodGhpcyk7Y2FzZSA0OnJldHVybiB0aGlzLmlrKCkhPW51bGw7Y2FzZSA1OnJldHVybiB0aGlzLkYhPW51bGwmJnRoaXMuRiE9dGhpcy5EJiZ0aGlzLkYhPXRoaXMuQjtjYXNlIDY6cmV0dXJuISFRayh0aGlzKTtjYXNlIDc6cmV0dXJuISF0aGlzLkEmJnRoaXMuQS5pIT0wO2Nhc2UgODpyZXR1cm4odGhpcy5CYiYyNTYpPT0wfXJldHVybiBuZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHx0aGlzLmlpKCkpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6RkgodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMjpLc2UodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgNTpKRSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLCRyKHRoaXMuQSksIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksQXModGhpcy5BLGwobiwxNikpO3JldHVybjtjYXNlIDg6alYodGhpcyxSdChCdChuKSkpO3JldHVybn11Zih0aGlzLHQteXIodGhpcy5paSgpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHx0aGlzLmlpKCkpLHQpLG4pfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIFRuKCkscV90fSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RGUodGhpcy5DYiwxODQpJiYobCh0aGlzLkNiLDE4NCkudGI9bnVsbCksRnUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOkNFKHRoaXMsbnVsbCksbEUodGhpcyx0aGlzLkQpO3JldHVybjtjYXNlIDU6SkUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLCRyKHRoaXMuQSk7cmV0dXJuO2Nhc2UgODpqVih0aGlzLCEwKTtyZXR1cm59Y2YodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGgucGk9ZnVuY3Rpb24oKXtvMigoRWwoKSxpbyksdGhpcykueGUoKSx0aGlzLkJifD0xfSxoLm9rPWZ1bmN0aW9uKCl7dmFyIHQsbixyO2lmKCF0aGlzLmMmJih0PUIydChBaCh0aGlzKSksIXQuZGMoKSkpZm9yKHI9dC5LYygpO3IuT2IoKTspbj1laShyLlBiKCkpLFlBKHRoaXMsbikmJkE0bih0aGlzKTtyZXR1cm4gdGhpcy5ifSxoLmlrPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoIXRoaXMuZSl7dD1udWxsO3RyeXt0PXp3KHRoaXMpfWNhdGNoKG4pe2lmKG49YnMobiksIURlKG4sMTAzKSl0aHJvdyB1ZShuKX10aGlzLmQ9bnVsbCx0JiZ0LmkmMSYmKHQ9PWloP3RoaXMuZD0oSG4oKSxQYik6dD09VnI/dGhpcy5kPXB0KDApOnQ9PUI0P3RoaXMuZD1uZXcgcGEoMCk6dD09TmE/dGhpcy5kPTA6dD09bm0/dGhpcy5kPWFwKDApOnQ9PWg3P3RoaXMuZD1fRSgwKTp0PT1BbD90aGlzLmQ9Zk4oMCk6dGhpcy5kPXdOKDApKSx0aGlzLmU9ITB9cmV0dXJuIHRoaXMuZH0saC5uaz1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJjI1NikhPTB9LGgucmw9ZnVuY3Rpb24odCl7dCYmKHRoaXMuRD0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkFic3RyYWN0RW51bWVyYXRvciIpfSxoLmdsPWZ1bmN0aW9uKHQpe3hmdCh0aGlzLHQpLHRoaXMucmwodCl9LGguaGw9ZnVuY3Rpb24odCl7dGhpcy5DPXQsdGhpcy5lPSExfSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuRGImNjQ/VVYodGhpcyk6KHQ9bmV3IEFmKFVWKHRoaXMpKSx0LmErPSIgKHNlcmlhbGl6YWJsZTogIixHcCh0LCh0aGlzLkJiJjI1NikhPTApLHQuYSs9IikiLHQuYSl9LGguYz0hMSxoLmQ9bnVsbCxoLmU9ITEsSShHbiwiRURhdGFUeXBlSW1wbCIsNTc3KSxEKDQ2OSw1NzcsezExMDoxLDk0OjEsOTM6MSwxNDI6MSwxNTY6MSw4NDc6MSw2ODU6MSwxNTU6MSwxOTc6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwzNjQ6MSw0Njk6MSwxNTg6MSwxMTk6MSwxMjA6MSw2OTE6MX0sbEplKSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gencodGhpcyk7Y2FzZSA0OnJldHVybiBYN2UodGhpcyk7Y2FzZSA1OnJldHVybiB0aGlzLkY7Y2FzZSA2OnJldHVybiBuP0FoKHRoaXMpOlFrKHRoaXMpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSx0aGlzLkE7Y2FzZSA4OnJldHVybiBIbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDk6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQod3AsdGhpcyw5LDUpKSx0aGlzLmF9cmV0dXJuIHNmKHRoaXMsdC15cigoVG4oKSxaYikpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fFpiKSx0KSxuLHIpfSxoLlNoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGY7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksUnUodGhpcy5BYix0LHIpO2Nhc2UgNjpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD93dWUodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtbyxudWxsLHIpKSksTmgodGhpcyx0LDYscik7Y2FzZSA5OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KHdwLHRoaXMsOSw1KSksUnUodGhpcy5hLHQscil9cmV0dXJuIGY9bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxaYikpLG4pLDY5KSxmLndrKCkuemsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLFpiKSksdCxyKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxUbyh0aGlzLkFiLHQscik7Y2FzZSA2OnJldHVybiBOaCh0aGlzLG51bGwsNixyKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksVG8odGhpcy5BLHQscik7Y2FzZSA5OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KHdwLHRoaXMsOSw1KSksVG8odGhpcy5hLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxaYikpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLFpiKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhencodGhpcyk7Y2FzZSA0OnJldHVybiEhWDdlKHRoaXMpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiEhUWsodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5BJiZ0aGlzLkEuaSE9MDtjYXNlIDg6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksWmIpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxaYiksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGSCh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOktzZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSA1OkpFKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksJHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSxBcyh0aGlzLkEsbChuLDE2KSk7cmV0dXJuO2Nhc2UgODpqVih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgOTohdGhpcy5hJiYodGhpcy5hPW5ldyBudCh3cCx0aGlzLDksNSkpLCRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQod3AsdGhpcyw5LDUpKSxBcyh0aGlzLmEsbChuLDE2KSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxaYikpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fFpiKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLFpifSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RGUodGhpcy5DYiwxODQpJiYobCh0aGlzLkNiLDE4NCkudGI9bnVsbCksRnUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOkNFKHRoaXMsbnVsbCksbEUodGhpcyx0aGlzLkQpO3JldHVybjtjYXNlIDU6SkUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLCRyKHRoaXMuQSk7cmV0dXJuO2Nhc2UgODpqVih0aGlzLCEwKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KHdwLHRoaXMsOSw1KSksJHIodGhpcy5hKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLFpiKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8WmIpLHQpKX0saC5waT1mdW5jdGlvbigpe3ZhciB0LG47aWYodGhpcy5hKWZvcih0PTAsbj10aGlzLmEuaTt0PG47Kyt0KVNPKE9lKHRoaXMuYSx0KSk7bzIoKEVsKCksaW8pLHRoaXMpLnhlKCksdGhpcy5CYnw9MX0saC5paz1mdW5jdGlvbigpe3JldHVybiBYN2UodGhpcyl9LGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPW51bGx9LGgucmw9ZnVuY3Rpb24odCl7fSxJKEduLCJFRW51bUltcGwiLDQ2OSksRCg1ODIsNDQ4LHsxMTA6MSw5NDoxLDkzOjEsMjAzOToxLDY5NDoxLDE1NToxLDE5NzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDU4MjoxLDE1ODoxLDExOToxLDEyMDoxfSxQUWUpLGgueGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56Yn0saC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gYWd0KHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBwdCh0aGlzLmQpO2Nhc2UgMzpyZXR1cm4gdGhpcy5iP3RoaXMuYjp0aGlzLmE7Y2FzZSA0OnJldHVybiBvPXRoaXMuYyxvPz90aGlzLnpiO2Nhc2UgNTpyZXR1cm4gdGhpcy5EYj4+MTY9PTU/bCh0aGlzLkNiLDY4NSk6bnVsbH1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLEQyKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8RDIpLHQpLG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSA1OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP2FndCh0aGlzLHIpOnRoaXMuQ2IuVGgodGhpcywtMS1vLG51bGwscikpKSxOaCh0aGlzLHQsNSxyKX1yZXR1cm4gZj1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fChUbigpLEQyKSksbiksNjkpLGYud2soKS56ayh0aGlzLEt1KHRoaXMpLG4teXIoKFRuKCksRDIpKSx0LHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFRvKHRoaXMuQWIsdCxyKTtjYXNlIDU6cmV0dXJuIE5oKHRoaXMsbnVsbCw1LHIpfXJldHVybiBvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksRDIpKSxuKSw2OSksby53aygpLkFrKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxEMikpLHQscil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLmQhPTA7Y2FzZSAzOnJldHVybiEhdGhpcy5iO2Nhc2UgNDpyZXR1cm4gdGhpcy5jIT1udWxsO2Nhc2UgNTpyZXR1cm4hISh0aGlzLkRiPj4xNj09NSYmbCh0aGlzLkNiLDY4NSkpfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksRDIpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxEMiksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGdSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOlFvZSh0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgMzpyMnQodGhpcyxsKG4sMjAzOSkpO3JldHVybjtjYXNlIDQ6Wm9lKHRoaXMsZWkobikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksRDIpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxEMiksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxEMn0saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpRb2UodGhpcywwKTtyZXR1cm47Y2FzZSAzOnIydCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6Wm9lKHRoaXMsbnVsbCk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxEMikpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fEQyKSx0KSl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmMsdD8/dGhpcy56Yn0saC5iPW51bGwsaC5jPW51bGwsaC5kPTAsSShHbiwiRUVudW1MaXRlcmFsSW1wbCIsNTgyKTt2YXIgUE9uPWtzKEduLCJFRmFjdG9yeUltcGwvSW50ZXJuYWxFRGF0ZVRpbWVGb3JtYXQiKTtEKDQ5OSwxLHsyMTE0OjF9LEtJKSxJKEduLCJFRmFjdG9yeUltcGwvMUNsaWVudEludGVybmFsRURhdGVUaW1lRm9ybWF0Iiw0OTkpLEQoMjQ4LDEyMCx7MTEwOjEsOTQ6MSw5MzoxLDg5OjEsNTg6MSwxMTQ6MSw1NDoxLDk5OjEsMjQ4OjEsMTE5OjEsMTIwOjF9LFF2KSxoLkNoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtyZXR1cm4gcj1OaCh0aGlzLHQsbixyKSx0aGlzLmUmJkRlKHQsMTc5KSYmKGE9U1UodGhpcyx0aGlzLmUpLGEhPXRoaXMuYyYmKHI9WkUodGhpcyxhLHIpKSkscn0saC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5mO2Nhc2UgMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBZcyhXbyx0aGlzLDEpKSx0aGlzLmQ7Y2FzZSAyOnJldHVybiBuP2pVKHRoaXMpOnRoaXMuYztjYXNlIDM6cmV0dXJuIHRoaXMuYjtjYXNlIDQ6cmV0dXJuIHRoaXMuZTtjYXNlIDU6cmV0dXJuIG4/aHVlKHRoaXMpOnRoaXMuYX1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLEUzKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8RTMpLHQpLG4scil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gUTB0KHRoaXMsbnVsbCxyKTtjYXNlIDE6cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgWXMoV28sdGhpcywxKSksVG8odGhpcy5kLHQscik7Y2FzZSAzOnJldHVybiBKMHQodGhpcyxudWxsLHIpfXJldHVybiBvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksRTMpKSxuKSw2OSksby53aygpLkFrKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxFMykpLHQscil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuZjtjYXNlIDE6cmV0dXJuISF0aGlzLmQmJnRoaXMuZC5pIT0wO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYztjYXNlIDM6cmV0dXJuISF0aGlzLmI7Y2FzZSA0OnJldHVybiEhdGhpcy5lO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYX1yZXR1cm4gbmYodGhpcyx0LXlyKChUbigpLEUzKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8RTMpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByO3N3aXRjaCh0KXtjYXNlIDA6Q2d0KHRoaXMsbChuLDg5KSk7cmV0dXJuO2Nhc2UgMTohdGhpcy5kJiYodGhpcy5kPW5ldyBZcyhXbyx0aGlzLDEpKSwkcih0aGlzLmQpLCF0aGlzLmQmJih0aGlzLmQ9bmV3IFlzKFdvLHRoaXMsMSkpLEFzKHRoaXMuZCxsKG4sMTYpKTtyZXR1cm47Y2FzZSAzOkF4ZSh0aGlzLGwobiw4OSkpO3JldHVybjtjYXNlIDQ6S3hlKHRoaXMsbChuLDg1MCkpO3JldHVybjtjYXNlIDU6c0UodGhpcyxsKG4sMTQyKSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxFMykpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fEUzKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLEUzfSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6Q2d0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTohdGhpcy5kJiYodGhpcy5kPW5ldyBZcyhXbyx0aGlzLDEpKSwkcih0aGlzLmQpO3JldHVybjtjYXNlIDM6QXhlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDpLeGUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA1OnNFKHRoaXMsbnVsbCk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxFMykpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fEUzKSx0KSl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgVGgoZzAodGhpcykpLHQuYSs9IiAoZXhwcmVzc2lvbjogIix3bGUodGhpcyx0KSx0LmErPSIpIix0LmF9O3ZhciBMUGU7SShHbiwiRUdlbmVyaWNUeXBlSW1wbCIsMjQ4KSxEKDIwNjcsMjA2MixLRyksaC5HaT1mdW5jdGlvbih0LG4pe0RydCh0aGlzLHQsbil9LGguV2s9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRHJ0KHRoaXMsdGhpcy5nYygpLHQpLG59LGguJGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZmKHRoaXMucGooKSx0KX0saC5JaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLkppKCl9LGgucGo9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVRZSh0aGlzKX0saC5KaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLktpKDApfSxoLktpPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBqKCkuZmQodCl9LGguWGs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTnkodGhpcyx0LCEwKSxufSxoLlRpPWZ1bmN0aW9uKHQsbil7dmFyIHIsYTtyZXR1cm4gYT1rdWUodGhpcyxuKSxyPXRoaXMuZmQodCksci5SYihhKSxhfSxoLlVpPWZ1bmN0aW9uKHQsbil7dmFyIHI7TnkodGhpcyxuLCEwKSxyPXRoaXMuZmQodCksci5SYihuKX0sSSh1cywiQWJzdHJhY3RTZXF1ZW50aWFsSW50ZXJuYWxFTGlzdCIsMjA2NyksRCg0OTYsMjA2NyxLRyxUTyksaC4kaT1mdW5jdGlvbih0KXtyZXR1cm4gZmYodGhpcy5waigpLHQpfSxoLklpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj09bnVsbD8oV3AoKSxXcCgpLGRGKTp0aGlzLnNsKCl9LGgucGo9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFh0dCh0aGlzLmEsdGhpcy5iKX0saC5KaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI9PW51bGw/KFdwKCksV3AoKSxkRik6dGhpcy5zbCgpfSxoLktpPWZ1bmN0aW9uKHQpe3ZhciBuLHI7aWYodGhpcy5iPT1udWxsKXtpZih0PDB8fHQ+MSl0aHJvdyB1ZShuZXcgdGMoQ0wrdCsiLCBzaXplPTAiKSk7cmV0dXJuIFdwKCksV3AoKSxkRn1mb3Iocj10aGlzLnNsKCksbj0wO248dDsrK24pTVYocik7cmV0dXJuIHJ9LGguZGM9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvLGY7aWYodGhpcy5iIT1udWxsKXtmb3Iocj0wO3I8dGhpcy5iLmxlbmd0aDsrK3IpaWYodD10aGlzLmJbcl0sIXRoaXMudmwoKXx8dGhpcy5hLlhoKHQpKXtpZihmPXRoaXMuYS5OaCh0LCExKSxGbygpLGwodCw2OSkueGsoKSl7Zm9yKG49bChmLDE2MCksYT0wLG89bi5nYygpO2E8bzsrK2EpaWYoc2F0KG4uVGwoYSkpJiZuLlVsKGEpIT1udWxsKXJldHVybiExfWVsc2UgaWYodC5KaygpKXtpZighbChmLDE2KS5kYygpKXJldHVybiExfWVsc2UgaWYoZiE9bnVsbClyZXR1cm4hMX19cmV0dXJuITB9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbTdlKHRoaXMpfSxoLmZkPWZ1bmN0aW9uKHQpe3ZhciBuLHI7aWYodGhpcy5iPT1udWxsKXtpZih0IT0wKXRocm93IHVlKG5ldyB0YyhDTCt0KyIsIHNpemU9MCIpKTtyZXR1cm4gV3AoKSxXcCgpLGRGfWZvcihyPXRoaXMudWwoKT90aGlzLnRsKCk6dGhpcy5zbCgpLG49MDtuPHQ7KytuKU1WKHIpO3JldHVybiByfSxoLlRpPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5VaT1mdW5jdGlvbih0LG4pe3Rocm93IHVlKG5ldyBRcil9LGguc2w9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFxKHRoaXMuYSx0aGlzLmIpfSxoLnRsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBSeWUodGhpcy5hLHRoaXMuYil9LGgudWw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5nYz1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZixnO2lmKG89MCx0aGlzLmIhPW51bGwpe2ZvcihyPTA7cjx0aGlzLmIubGVuZ3RoOysrcilpZih0PXRoaXMuYltyXSwhdGhpcy52bCgpfHx0aGlzLmEuWGgodCkpaWYoZz10aGlzLmEuTmgodCwhMSksRm8oKSxsKHQsNjkpLnhrKCkpZm9yKG49bChnLDE2MCksYT0wLGY9bi5nYygpO2E8ZjsrK2Epc2F0KG4uVGwoYSkpJiZuLlVsKGEpIT1udWxsJiYrK287ZWxzZSB0LkprKCk/bys9bChnLDE2KS5nYygpOmchPW51bGwmJisrb31yZXR1cm4gb30saC52bD1mdW5jdGlvbigpe3JldHVybiEwfTt2YXIgcnBlO0kodXMsIkVDb250ZW50c0VMaXN0Iiw0OTYpLEQoMTE3Nyw0OTYsS0cscHJ0KSxoLnNsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtcnQodGhpcy5hLHRoaXMuYil9LGgudGw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJydCh0aGlzLmEsdGhpcy5iKX0saC52bD1mdW5jdGlvbigpe3JldHVybiExfSxJKEduLCJFTmFtZWRFbGVtZW50SW1wbC8xIiwxMTc3KSxEKDI4NywxLFdHLHFxKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUmI9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC53bD1mdW5jdGlvbih0KXtpZih0aGlzLmchPTB8fHRoaXMuZSl0aHJvdyB1ZShuZXcgbmMoIkl0ZXJhdG9yIGFscmVhZHkgaW4gdXNlIG9yIGFscmVhZHkgZmlsdGVyZWQiKSk7dGhpcy5lPXR9LGguT2I9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvLGY7c3dpdGNoKHRoaXMuZyl7Y2FzZSAzOmNhc2UgMjpyZXR1cm4hMDtjYXNlIDE6cmV0dXJuITE7Y2FzZS0zOnRoaXMucD90aGlzLnAuUGIoKTorK3RoaXMubjtkZWZhdWx0OmlmKCF0aGlzLmt8fCh0aGlzLnA/IXZwdCh0aGlzLHRoaXMucCk6IW8ydCh0aGlzKSkpe2Zvcig7dGhpcy5kPHRoaXMuYy5sZW5ndGg7KWlmKG49dGhpcy5jW3RoaXMuZCsrXSwoIXRoaXMuZXx8bi5waygpIT1vQ3x8bi5MaigpIT0wKSYmKCF0aGlzLnZsKCl8fHRoaXMuYi5YaChuKSkpe2lmKGY9dGhpcy5iLk5oKG4sdGhpcy51bCgpKSx0aGlzLmY9KEZvKCksbChuLDY5KS54aygpKSx0aGlzLmZ8fG4uSmsoKSl7aWYodGhpcy51bCgpPyhhPWwoZiwxNSksdGhpcy5rPWEpOihhPWwoZiw3MSksdGhpcy5rPXRoaXMuaj1hKSxEZSh0aGlzLmssNTkpPyh0aGlzLnA9bnVsbCx0aGlzLm89dGhpcy5rLmdjKCksdGhpcy5uPTApOnRoaXMucD10aGlzLmo/dGhpcy5qLkppKCk6dGhpcy5rLmVkKCksdGhpcy5wP3ZwdCh0aGlzLHRoaXMucCk6bzJ0KHRoaXMpKXJldHVybiBvPXRoaXMucD90aGlzLnAuUGIoKTp0aGlzLmo/dGhpcy5qLiRpKHRoaXMubisrKTp0aGlzLmsuWGIodGhpcy5uKyspLHRoaXMuZj8odD1sKG8sNzYpLHQuTGsoKSxyPXQubWQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPTMsITB9ZWxzZSBpZihmIT1udWxsKXJldHVybiB0aGlzLms9bnVsbCx0aGlzLnA9bnVsbCxyPWYsdGhpcy5pPXIsdGhpcy5nPTIsITB9cmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHRoaXMuZj0hMSx0aGlzLmc9MSwhMX1lbHNlIHJldHVybiBvPXRoaXMucD90aGlzLnAuUGIoKTp0aGlzLmo/dGhpcy5qLiRpKHRoaXMubisrKTp0aGlzLmsuWGIodGhpcy5uKyspLHRoaXMuZj8odD1sKG8sNzYpLHQuTGsoKSxyPXQubWQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPTMsITB9fSxoLlNiPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmO3N3aXRjaCh0aGlzLmcpe2Nhc2UtMzpjYXNlLTI6cmV0dXJuITA7Y2FzZS0xOnJldHVybiExO2Nhc2UgMzp0aGlzLnA/dGhpcy5wLlViKCk6LS10aGlzLm47ZGVmYXVsdDppZighdGhpcy5rfHwodGhpcy5wPyF3cHQodGhpcyx0aGlzLnApOiFNcHQodGhpcykpKXtmb3IoO3RoaXMuZD4wOylpZihuPXRoaXMuY1stLXRoaXMuZF0sKCF0aGlzLmV8fG4ucGsoKSE9b0N8fG4uTGooKSE9MCkmJighdGhpcy52bCgpfHx0aGlzLmIuWGgobikpKXtpZihmPXRoaXMuYi5OaChuLHRoaXMudWwoKSksdGhpcy5mPShGbygpLGwobiw2OSkueGsoKSksdGhpcy5mfHxuLkprKCkpe2lmKHRoaXMudWwoKT8oYT1sKGYsMTUpLHRoaXMuaz1hKTooYT1sKGYsNzEpLHRoaXMuaz10aGlzLmo9YSksRGUodGhpcy5rLDU5KT8odGhpcy5vPXRoaXMuay5nYygpLHRoaXMubj10aGlzLm8pOnRoaXMucD10aGlzLmo/dGhpcy5qLktpKHRoaXMuay5nYygpKTp0aGlzLmsuZmQodGhpcy5rLmdjKCkpLHRoaXMucD93cHQodGhpcyx0aGlzLnApOk1wdCh0aGlzKSlyZXR1cm4gbz10aGlzLnA/dGhpcy5wLlViKCk6dGhpcy5qP3RoaXMuai4kaSgtLXRoaXMubik6dGhpcy5rLlhiKC0tdGhpcy5uKSx0aGlzLmY/KHQ9bChvLDc2KSx0LkxrKCkscj10Lm1kKCksdGhpcy5pPXIpOihyPW8sdGhpcy5pPXIpLHRoaXMuZz0tMywhMH1lbHNlIGlmKGYhPW51bGwpcmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHI9Zix0aGlzLmk9cix0aGlzLmc9LTIsITB9cmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHRoaXMuZz0tMSwhMX1lbHNlIHJldHVybiBvPXRoaXMucD90aGlzLnAuVWIoKTp0aGlzLmo/dGhpcy5qLiRpKC0tdGhpcy5uKTp0aGlzLmsuWGIoLS10aGlzLm4pLHRoaXMuZj8odD1sKG8sNzYpLHQuTGsoKSxyPXQubWQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPS0zLCEwfX0saC5QYj1mdW5jdGlvbigpe3JldHVybiBNVih0aGlzKX0saC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguVWI9ZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLmc8LTF8fHRoaXMuU2IoKSlyZXR1cm4tLXRoaXMuYSx0aGlzLmc9MCx0PXRoaXMuaSx0aGlzLlNiKCksdDt0aHJvdyB1ZShuZXcgX2MpfSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS0xfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC51bD1mdW5jdGlvbigpe3JldHVybiExfSxoLldiPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGgudmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5hPTAsaC5kPTAsaC5mPSExLGguZz0wLGgubj0wLGgubz0wO3ZhciBkRjtJKHVzLCJFQ29udGVudHNFTGlzdC9GZWF0dXJlSXRlcmF0b3JJbXBsIiwyODcpLEQoNzExLDI4NyxXRyxSeWUpLGgudWw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSSh1cywiRUNvbnRlbnRzRUxpc3QvUmVzb2x2aW5nRmVhdHVyZUl0ZXJhdG9ySW1wbCIsNzExKSxEKDExNzgsNzExLFdHLGJydCksaC52bD1mdW5jdGlvbigpe3JldHVybiExfSxJKEduLCJFTmFtZWRFbGVtZW50SW1wbC8xLzEiLDExNzgpLEQoMTE3OSwyODcsV0csbXJ0KSxoLnZsPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVOYW1lZEVsZW1lbnRJbXBsLzEvMiIsMTE3OSksRCgzOSwxNTIsWVAsQ3ksa29lLF9hLEZvZSxaZyxoMCxRNmUsWG90LEo2ZSxRb3QscDZlLEpvdCx0N2UsWm90LGI2ZSxlY3QsWjZlLHRjdCxYXyxzTixyb2UsZTdlLG5jdCxtNmUscmN0KSxoLktqPWZ1bmN0aW9uKCl7cmV0dXJuIE42ZSh0aGlzKX0saC5Saj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PU42ZSh0aGlzKSx0P3QuaWsoKTpudWxsfSxoLmhqPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmI9PS0xJiZ0aGlzLmEmJih0aGlzLmI9dGhpcy5jLkhoKHRoaXMuYS5MaigpLHRoaXMuYS5waygpKSksdGhpcy5jLnloKHRoaXMuYix0KX0saC5qaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguU2o9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1ONmUodGhpcyksdD90LnRrKCk6ITF9LGguYj0tMSxJKEduLCJFTm90aWZpY2F0aW9uSW1wbCIsMzkpLEQoNDExLDI5Mix7MTEwOjEsOTQ6MSw5MzoxLDE1NToxLDE5NzoxLDU4OjEsNjI6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMTU4OjEsNDExOjEsMjkyOjEsMTE5OjEsMTIwOjF9LHFpZSksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gdWd0KHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEhuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBwdCh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gcHQodGhpcy50KTtjYXNlIDY6cmV0dXJuIEhuKCksZj10aGlzLnQsZj4xfHxmPT0tMTtjYXNlIDc6cmV0dXJuIEhuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2YodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIHRoaXMuRGI+PjE2PT0xMD9sKHRoaXMuQ2IsMjkpOm51bGw7Y2FzZSAxMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBtbChadSx0aGlzLDExKSksdGhpcy5kO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoazMsdGhpcywxMiwxMCkpLHRoaXMuYztjYXNlIDEzOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IExPKHRoaXMsdGhpcykpLHRoaXMuYTtjYXNlIDE0OnJldHVybiBYbCh0aGlzKX1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLEkyKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8STIpLHQpLG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSAxMDpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD91Z3QodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtbyxudWxsLHIpKSksTmgodGhpcyx0LDEwLHIpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoazMsdGhpcywxMiwxMCkpLFJ1KHRoaXMuYyx0LHIpfXJldHVybiBmPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksSTIpKSxuKSw2OSksZi53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxJMikpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgOTpyZXR1cm4gcWFlKHRoaXMscik7Y2FzZSAxMDpyZXR1cm4gTmgodGhpcyxudWxsLDEwLHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgbWwoWnUsdGhpcywxMSkpLFRvKHRoaXMuZCx0LHIpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoazMsdGhpcywxMiwxMCkpLFRvKHRoaXMuYyx0LHIpO2Nhc2UgMTQ6cmV0dXJuIFRvKFhsKHRoaXMpLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxJMikpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLEkyKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbixyLGE7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBhPXRoaXMudCxhPjF8fGE9PS0xO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybiEhKHRoaXMuRGI+PjE2PT0xMCYmbCh0aGlzLkNiLDI5KSk7Y2FzZSAxMTpyZXR1cm4hIXRoaXMuZCYmdGhpcy5kLmkhPTA7Y2FzZSAxMjpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSAxMzpyZXR1cm4hIXRoaXMuYSYmWGwodGhpcy5hLmEpLmkhPTAmJiEodGhpcy5iJiZ1dWUodGhpcy5iKSk7Y2FzZSAxNDpyZXR1cm4hIXRoaXMuYiYmdXVlKHRoaXMuYil9cmV0dXJuIG5mKHRoaXMsdC15cigoVG4oKSxJMikpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fEkyKSx0KSl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcixhO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6RnUodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMzp1Mih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgNTpNeSh0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLGwobiwxNDIpKTtyZXR1cm47Y2FzZSA5OmE9JDEodGhpcyxsKG4sODkpLG51bGwpLGEmJmEub2ooKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5kJiYodGhpcy5kPW5ldyBtbChadSx0aGlzLDExKSksJHIodGhpcy5kKSwhdGhpcy5kJiYodGhpcy5kPW5ldyBtbChadSx0aGlzLDExKSksQXModGhpcy5kLGwobiwxNikpO3JldHVybjtjYXNlIDEyOiF0aGlzLmMmJih0aGlzLmM9bmV3IG50KGszLHRoaXMsMTIsMTApKSwkcih0aGlzLmMpLCF0aGlzLmMmJih0aGlzLmM9bmV3IG50KGszLHRoaXMsMTIsMTApKSxBcyh0aGlzLmMsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgTE8odGhpcyx0aGlzKSksdEwodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBMTyh0aGlzLHRoaXMpKSxBcyh0aGlzLmEsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTQ6JHIoWGwodGhpcykpLEFzKFhsKHRoaXMpLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksSTIpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxJMiksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxJMn0saC5raT1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RnUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOmMyKHRoaXMsITApO3JldHVybjtjYXNlIDM6dTIodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLDApO3JldHVybjtjYXNlIDU6TXkodGhpcywxKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPSQxKHRoaXMsbnVsbCxudWxsKSxyJiZyLm9qKCk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMuZCYmKHRoaXMuZD1uZXcgbWwoWnUsdGhpcywxMSkpLCRyKHRoaXMuZCk7cmV0dXJuO2Nhc2UgMTI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoazMsdGhpcywxMiwxMCkpLCRyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5hJiZ0TCh0aGlzLmEpO3JldHVybjtjYXNlIDE0OnRoaXMuYiYmJHIodGhpcy5iKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLEkyKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8STIpLHQpKX0saC5waT1mdW5jdGlvbigpe3ZhciB0LG47aWYodGhpcy5jKWZvcih0PTAsbj10aGlzLmMuaTt0PG47Kyt0KVNPKE9lKHRoaXMuYyx0KSk7T2YodGhpcyksdGhpcy5CYnw9MX0sSShHbiwiRU9wZXJhdGlvbkltcGwiLDQxMSksRCg1MTMsNzU2LE1TZSxMTyksaC5xaj1mdW5jdGlvbih0LG4pe2Nmbih0aGlzLHQsbChuLDE0MikpfSxoLnJqPWZ1bmN0aW9uKHQpe1lsbih0aGlzLGwodCwxNDIpKX0saC54aj1mdW5jdGlvbih0KXt2YXIgbixyO3JldHVybiBuPWwoT2UoWGwodGhpcy5hKSx0KSw4OSkscj1uLmMscnx8KFRuKCksdGQpfSxoLkNqPWZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIG49bChWeShYbCh0aGlzLmEpLHQpLDg5KSxyPW4uYyxyfHwoVG4oKSx0ZCl9LGguRGo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWDVuKHRoaXMsdCxsKG4sMTQyKSl9LGguTGk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5Jaj1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBudWxsfSxoLnNqPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB5UWUodGhpcyl9LGgudGo9ZnVuY3Rpb24oKXskcihYbCh0aGlzLmEpKX0saC51aj1mdW5jdGlvbih0KXtyZXR1cm4gZzF0KHRoaXMsdCl9LGgudmo9ZnVuY3Rpb24odCl7dmFyIG4scjtmb3Iocj10LktjKCk7ci5PYigpOylpZihuPXIuUGIoKSwhZzF0KHRoaXMsbikpcmV0dXJuITE7cmV0dXJuITB9LGgud2o9ZnVuY3Rpb24odCl7dmFyIG4scixhO2lmKERlKHQsMTUpJiYoYT1sKHQsMTUpLGEuZ2MoKT09WGwodGhpcy5hKS5pKSl7Zm9yKG49YS5LYygpLHI9bmV3IG9yKHRoaXMpO24uT2IoKTspaWYocWUobi5QYigpKSE9PXFlKGdyKHIpKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0saC55aj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG87Zm9yKHI9MSxuPW5ldyBvcihYbCh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyl0PWwoZ3IobiksODkpLGE9KG89dC5jLG98fChUbigpLHRkKSkscj0zMSpyKyhhP2VzKGEpOjApO3JldHVybiByfSxoLnpqPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO2ZvcihhPTAscj1uZXcgb3IoWGwodGhpcy5hKSk7ci5lIT1yLmkuZ2MoKTspe2lmKG49bChncihyKSw4OSkscWUodCk9PT1xZSgobz1uLmMsb3x8KFRuKCksdGQpKSkpcmV0dXJuIGE7KythfXJldHVybi0xfSxoLkFqPWZ1bmN0aW9uKCl7cmV0dXJuIFhsKHRoaXMuYSkuaT09MH0saC5Caj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLkVqPWZ1bmN0aW9uKCl7cmV0dXJuIFhsKHRoaXMuYSkuaX0saC5Gaj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtmb3IoZj1YbCh0aGlzLmEpLmksbz1XZSh3YSxSbiwxLGYsNSwxKSxyPTAsbj1uZXcgb3IoWGwodGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDg5KSxvW3IrK109KGE9dC5jLGF8fChUbigpLHRkKSk7cmV0dXJuIG99LGguR2o9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKHc9WGwodGhpcy5hKS5pLHQubGVuZ3RoPHcmJihvPWJOKGJoKHQpLmMsdyksdD1vKSx0Lmxlbmd0aD53JiZUcyh0LHcsbnVsbCksYT0wLHI9bmV3IG9yKFhsKHRoaXMuYSkpO3IuZSE9ci5pLmdjKCk7KW49bChncihyKSw4OSksZj0oZz1uLmMsZ3x8KFRuKCksdGQpKSxUcyh0LGErKyxmKTtyZXR1cm4gdH0saC5Iaj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG87Zm9yKG89bmV3IFVwLG8uYSs9IlsiLHQ9WGwodGhpcy5hKSxuPTAsYT1YbCh0aGlzLmEpLmk7bjxhOylYbyhvLGpfKChyPWwoT2UodCxuKSw4OSkuYyxyfHwoVG4oKSx0ZCkpKSksKytuPGEmJihvLmErPUNvKTtyZXR1cm4gby5hKz0iXSIsby5hfSxoLkpqPWZ1bmN0aW9uKHQpe30saC5Maj1mdW5jdGlvbigpe3JldHVybiAxM30saC5rbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLk1qPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgubGw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5tbD1mdW5jdGlvbigpe3JldHVybiExfSxoLm5sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguYWw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5vbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE0Mil9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gTWJuKHRoaXMuYSl9LGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5ZaT1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFT3BlcmF0aW9uSW1wbC8xIiw1MTMpLEQoMTM3NiwyMDYyLGlULHlRZSksaC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gbU4odGhpcy5hLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIFhsKHRoaXMuYS5hKS5pfSxJKEduLCJFT3BlcmF0aW9uSW1wbC8xLzEiLDEzNzYpLEQoMTM3Nyw1NTUsa2Msd3N0KSxoLlRpPWZ1bmN0aW9uKHQsbil7dmFyIHIsYTtyZXR1cm4gcj1sKEFBKHRoaXMsdCxuKSw4OSksaGgodGhpcy5lKSYmeGsodGhpcyxuZXcgc04odGhpcy5hLDcsKFRuKCksVV90KSxwdChuKSwoYT1yLmMsYXx8dGQpLHQpKSxyfSxoLlVqPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGY0bih0aGlzLGwodCw4OSksbil9LGguVmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gaDRuKHRoaXMsbCh0LDg5KSxuKX0saC5Xaj1mdW5jdGlvbih0LG4scil7cmV0dXJuIHU2bih0aGlzLGwodCw4OSksbChuLDg5KSxyKX0saC5Jaj1mdW5jdGlvbih0LG4scixhLG8pe3N3aXRjaCh0KXtjYXNlIDM6cmV0dXJuIHJBKHRoaXMsdCxuLHIsYSx0aGlzLmk+MSk7Y2FzZSA1OnJldHVybiByQSh0aGlzLHQsbixyLGEsdGhpcy5pLWwociwxNSkuZ2MoKT4wKTtkZWZhdWx0OnJldHVybiBuZXcgWmcodGhpcy5lLHQsdGhpcy5jLG4scixhLCEwKX19LGguVGo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5Raj1mdW5jdGlvbigpe3JldHVybiB1dWUodGhpcyl9LGguR2s9ZnVuY3Rpb24oKXskcih0aGlzKX0sSShHbiwiRU9wZXJhdGlvbkltcGwvMiIsMTM3NyksRCg1MDcsMSx7MjAzNzoxLDUwNzoxfSxPdHQpLEkoR24sIkVQYWNrYWdlSW1wbC8xIiw1MDcpLEQoMTQsODMsa2MsbnQpLGguaWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLmpsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5tbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLmI9MCxJKHVzLCJFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZUVMaXN0IiwxNCksRCgzNjUsMTQsa2MsVjgpLGgubmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5XaT1mdW5jdGlvbih0LG4pe3JldHVybiBFeCh0aGlzLHQsbChuLDU4KSl9LEkodXMsIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvUmVzb2x2aW5nIiwzNjUpLEQoMzA4LDM2NSxrYyx3eSksaC5OaT1mdW5jdGlvbigpe3RoaXMuYS50Yj1udWxsfSxJKEduLCJFUGFja2FnZUltcGwvMiIsMzA4KSxEKDEyNzgsMSx7fSxlcmUpLEkoR24sIkVQYWNrYWdlSW1wbC8zIiwxMjc4KSxEKDczMyw0NSxtNiwkd2UpLGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpP3NvZSh0aGlzLHQpOiEhem8odGhpcy5mLHQpfSxJKEduLCJFUGFja2FnZVJlZ2lzdHJ5SW1wbCIsNzMzKSxEKDUxOCwyOTIsezExMDoxLDk0OjEsOTM6MSwxNTU6MSwxOTc6MSw1ODoxLDIxMTY6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMTU4OjEsNTE4OjEsMjkyOjEsMTE5OjEsMTIwOjF9LEhpZSksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gbGd0KHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEhuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBwdCh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gcHQodGhpcy50KTtjYXNlIDY6cmV0dXJuIEhuKCksZj10aGlzLnQsZj4xfHxmPT0tMTtjYXNlIDc6cmV0dXJuIEhuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2YodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIHRoaXMuRGI+PjE2PT0xMD9sKHRoaXMuQ2IsNjIpOm51bGx9cmV0dXJuIHNmKHRoaXMsdC15cigoVG4oKSxONCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fE40KSx0KSxuLHIpfSxoLlNoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGY7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksUnUodGhpcy5BYix0LHIpO2Nhc2UgMTA6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/bGd0KHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLW8sbnVsbCxyKSkpLE5oKHRoaXMsdCwxMCxyKX1yZXR1cm4gZj1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fChUbigpLE40KSksbiksNjkpLGYud2soKS56ayh0aGlzLEt1KHRoaXMpLG4teXIoKFRuKCksTjQpKSx0LHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFRvKHRoaXMuQWIsdCxyKTtjYXNlIDk6cmV0dXJuIHFhZSh0aGlzLHIpO2Nhc2UgMTA6cmV0dXJuIE5oKHRoaXMsbnVsbCwxMCxyKX1yZXR1cm4gbz1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fChUbigpLE40KSksbiksNjkpLG8ud2soKS5Bayh0aGlzLEt1KHRoaXMpLG4teXIoKFRuKCksTjQpKSx0LHIpfSxoLldoPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIGE9dGhpcy50LGE+MXx8YT09LTE7Y2FzZSA3OnJldHVybiByPXRoaXMucyxyPj0xO2Nhc2UgODpyZXR1cm4hIXRoaXMuciYmIXRoaXMucS5lJiZ5dyh0aGlzLnEpLmk9PTA7Y2FzZSA5OnJldHVybiEhdGhpcy5xJiYhKHRoaXMuciYmIXRoaXMucS5lJiZ5dyh0aGlzLnEpLmk9PTApO2Nhc2UgMTA6cmV0dXJuISEodGhpcy5EYj4+MTY9PTEwJiZsKHRoaXMuQ2IsNjIpKX1yZXR1cm4gbmYodGhpcyx0LXlyKChUbigpLE40KSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8TjQpLHQpKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLE40fSxJKEduLCJFUGFyYW1ldGVySW1wbCIsNTE4KSxEKDEwMiw0NjIsezExMDoxLDk0OjEsOTM6MSwxNTU6MSwxOTc6MSw1ODoxLDE5OjEsMTc5OjEsNjk6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMTU4OjEsMTAyOjEsNDYyOjEsMjkyOjEsMTE5OjEsMTIwOjEsNjkyOjF9LEh5ZSksaC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGc7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBIbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDM6cmV0dXJuIEhuKCksISEodGhpcy5CYiY1MTIpO2Nhc2UgNDpyZXR1cm4gcHQodGhpcy5zKTtjYXNlIDU6cmV0dXJuIHB0KHRoaXMudCk7Y2FzZSA2OnJldHVybiBIbigpLGc9dGhpcy50LGc+MXx8Zz09LTE7Y2FzZSA3OnJldHVybiBIbigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP09mKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiBIbigpLCEhKHRoaXMuQmImbTApO2Nhc2UgMTE6cmV0dXJuIEhuKCksISEodGhpcy5CYiZyNCk7Y2FzZSAxMjpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJlh5KTtjYXNlIDEzOnJldHVybiB0aGlzLmo7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcyk7Y2FzZSAxNTpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJlNsKTtjYXNlIDE2OnJldHVybiBIbigpLCEhKHRoaXMuQmImX2QpO2Nhc2UgMTc6cmV0dXJuIGt5KHRoaXMpO2Nhc2UgMTg6cmV0dXJuIEhuKCksISEodGhpcy5CYiZldSk7Y2FzZSAxOTpyZXR1cm4gSG4oKSxmPVJvKHRoaXMpLCEhKGYmJmYuQmImZXUpO2Nhc2UgMjA6cmV0dXJuIEhuKCksISEodGhpcy5CYiZJbyk7Y2FzZSAyMTpyZXR1cm4gbj9Sbyh0aGlzKTp0aGlzLmI7Y2FzZSAyMjpyZXR1cm4gbj8kN2UodGhpcyk6X3V0KHRoaXMpO2Nhc2UgMjM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgJDUoRDQsdGhpcywyMykpLHRoaXMuYX1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLG83KSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8bzcpLHQpLG4scil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG4scixhLG87c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBvPXRoaXMudCxvPjF8fG89PS0xO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJm0wKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJnI0KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJlh5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZTbCkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZfZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIWt5KHRoaXMpO2Nhc2UgMTg6cmV0dXJuKHRoaXMuQmImZXUpIT0wO2Nhc2UgMTk6cmV0dXJuIGE9Um8odGhpcyksISFhJiYoYS5CYiZldSkhPTA7Y2FzZSAyMDpyZXR1cm4odGhpcy5CYiZJbyk9PTA7Y2FzZSAyMTpyZXR1cm4hIXRoaXMuYjtjYXNlIDIyOnJldHVybiEhX3V0KHRoaXMpO2Nhc2UgMjM6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksbzcpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxvNyksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHIsYTtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksQXModGhpcy5BYixsKG4sMTYpKTtyZXR1cm47Y2FzZSAxOnBvZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOmMyKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAzOnUyKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSA0OmkyKHRoaXMsbChuLDE3KS5hKTtyZXR1cm47Y2FzZSA1Ok15KHRoaXMsbChuLDE3KS5hKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbChuLDE0MikpO3JldHVybjtjYXNlIDk6YT0kMSh0aGlzLGwobiw4OSksbnVsbCksYSYmYS5vaigpO3JldHVybjtjYXNlIDEwOkFFKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAxMTpERSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTI6TEUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDEzOlozZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAxNTpNRSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTY6SUUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDE4Okwybih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMjA6djhlKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAyMTpiN2UodGhpcyxsKG4sMTkpKTtyZXR1cm47Y2FzZSAyMzohdGhpcy5hJiYodGhpcy5hPW5ldyAkNShENCx0aGlzLDIzKSksJHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyAkNShENCx0aGlzLDIzKSksQXModGhpcy5hLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksbzcpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxvNyksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxvN30saC5raT1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RGUodGhpcy5DYiw5MCkmJnp5KFlsKGwodGhpcy5DYiw5MCkpLDQpLEZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOnUyKHRoaXMsITApO3JldHVybjtjYXNlIDQ6aTIodGhpcywwKTtyZXR1cm47Y2FzZSA1Ok15KHRoaXMsMSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj0kMSh0aGlzLG51bGwsbnVsbCksciYmci5vaigpO3JldHVybjtjYXNlIDEwOkFFKHRoaXMsITApO3JldHVybjtjYXNlIDExOkRFKHRoaXMsITEpO3JldHVybjtjYXNlIDEyOkxFKHRoaXMsITEpO3JldHVybjtjYXNlIDEzOnRoaXMuaT1udWxsLHhWKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6TUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTY6SUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTg6bThlKHRoaXMsITEpLERlKHRoaXMuQ2IsOTApJiZ6eShZbChsKHRoaXMuQ2IsOTApKSwyKTtyZXR1cm47Y2FzZSAyMDp2OGUodGhpcywhMCk7cmV0dXJuO2Nhc2UgMjE6YjdlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgJDUoRDQsdGhpcywyMykpLCRyKHRoaXMuYSk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxvNykpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fG83KSx0KSl9LGgucGk9ZnVuY3Rpb24oKXskN2UodGhpcyksV2soaWMoKEVsKCksaW8pLHRoaXMpKSxPZih0aGlzKSx0aGlzLkJifD0xfSxoLnVrPWZ1bmN0aW9uKCl7cmV0dXJuIFJvKHRoaXMpfSxoLl9rPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9Um8odGhpcyksISF0JiYodC5CYiZldSkhPTB9LGguYWw9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZldSkhPTB9LGguYmw9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZJbykhPTB9LGguWWs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5jPW51bGwsbzhlKHRoaXMsdCxuKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLkRiJjY0P0JVKHRoaXMpOih0PW5ldyBBZihCVSh0aGlzKSksdC5hKz0iIChjb250YWlubWVudDogIixHcCh0LCh0aGlzLkJiJmV1KSE9MCksdC5hKz0iLCByZXNvbHZlUHJveGllczogIixHcCh0LCh0aGlzLkJiJklvKSE9MCksdC5hKz0iKSIsdC5hKX0sSShHbiwiRVJlZmVyZW5jZUltcGwiLDEwMiksRCg1NjEsMTIwLHsxMTA6MSw0NDoxLDk0OjEsOTM6MSwxMzY6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSw1NjE6MSwxMTk6MSwxMjA6MX0sT1MpLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZncodGhpcyl9LGguRGk9ZnVuY3Rpb24odCl7TmRuKHRoaXMsZWkodCkpfSxoLm5kPWZ1bmN0aW9uKHQpe3JldHVybiB3ZG4odGhpcyxlaSh0KSl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYjtjYXNlIDE6cmV0dXJuIHRoaXMuY31yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLE5vKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8Tm8pLHQpLG4scil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iIT1udWxsO2Nhc2UgMTpyZXR1cm4gdGhpcy5jIT1udWxsfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksTm8pKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxObyksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDpQZG4odGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMTpkN2UodGhpcyxlaShuKSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxObykpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fE5vKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLE5vfSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6ZjdlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTpkN2UodGhpcyxudWxsKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLE5vKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8Tm8pLHQpKX0saC5CaT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmE9PS0xJiYodD10aGlzLmIsdGhpcy5hPXQ9PW51bGw/MDpzMih0KSksdGhpcy5hfSxoLkNpPWZ1bmN0aW9uKHQpe3RoaXMuYT10fSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuRGImNjQ/ZzAodGhpcyk6KHQ9bmV3IEFmKGcwKHRoaXMpKSx0LmErPSIgKGtleTogIixYbyh0LHRoaXMuYiksdC5hKz0iLCB2YWx1ZTogIixYbyh0LHRoaXMuYyksdC5hKz0iKSIsdC5hKX0saC5hPS0xLGguYj1udWxsLGguYz1udWxsO3ZhciBZYz1JKEduLCJFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwiLDU2MSksUV90PWtzKHVzLCJGZWF0dXJlTWFwL0VudHJ5L0ludGVybmFsIik7RCg1NzYsMSxZRyksaC54bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy55bChsKHQsNTQpKX0saC55bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54bCh0KX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbixyO3JldHVybiB0aGlzPT09dD8hMDpEZSh0LDc2KT8obj1sKHQsNzYpLG4uTGsoKT09dGhpcy5jPyhyPXRoaXMubWQoKSxyPT1udWxsP24ubWQoKT09bnVsbDpQaShyLG4ubWQoKSkpOiExKTohMX0saC5Maz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguSGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLm1kKCksZXModGhpcy5jKV4odD09bnVsbD8wOmVzKHQpKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIHQ9dGhpcy5jLG49QWgodC5xaygpKS55aSgpLHQueGUoKSwobiE9bnVsbCYmbi5sZW5ndGghPTA/bisiOiIrdC54ZSgpOnQueGUoKSkrIj0iK3RoaXMubWQoKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9CYXNpY0ZlYXR1cmVNYXBFbnRyeSIsNTc2KSxEKDc5MSw1NzYsWUcsSnllKSxoLnlsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSnllKHRoaXMuYyx0KX0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguemw9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB2M24odGhpcyx0LHRoaXMuYSxuLHIpfSxoLkFsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdzNuKHRoaXMsdCx0aGlzLmEsbixyKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9Db250YWlubWVudFVwZGF0aW5nRmVhdHVyZU1hcEVudHJ5Iiw3OTEpLEQoMTM1MCwxLHt9LE50dCksaC55az1mdW5jdGlvbih0LG4scixhLG8pe3ZhciBmO3JldHVybiBmPWwodEUodCx0aGlzLmIpLDIyMCksZi5ZbCh0aGlzLmEpLkZrKGEpfSxoLnprPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bCh0RSh0LHRoaXMuYiksMjIwKSxmLlBsKHRoaXMuYSxhLG8pfSxoLkFrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bCh0RSh0LHRoaXMuYiksMjIwKSxmLlFsKHRoaXMuYSxhLG8pfSxoLkJrPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtyZXR1cm4gYT1sKHRFKHQsdGhpcy5iKSwyMjApLGEuWWwodGhpcy5hKS5RaigpfSxoLkNrPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBvO289bCh0RSh0LHRoaXMuYiksMjIwKSxvLllsKHRoaXMuYSkuV2IoYSl9LGguRGs9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBsKHRFKHQsdGhpcy5iKSwyMjApLllsKHRoaXMuYSl9LGguRWs9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO2E9bCh0RSh0LHRoaXMuYiksMjIwKSxhLllsKHRoaXMuYSkuR2soKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZUZlYXR1cmVNYXBEZWxlZ2F0b3IiLDEzNTApLEQoOTEsMSx7fSxYcCxPbSxKcCxSbSksaC55az1mdW5jdGlvbih0LG4scixhLG8pe3ZhciBmO2lmKGY9bi5saShyKSxmPT1udWxsJiZuLm1pKHIsZj1XVSh0aGlzLHQpKSwhbylzd2l0Y2godGhpcy5lKXtjYXNlIDUwOmNhc2UgNDE6cmV0dXJuIGwoZiw1OTcpLmJrKCk7Y2FzZSA0MDpyZXR1cm4gbChmLDIyMCkuVmwoKX1yZXR1cm4gZn0saC56az1mdW5jdGlvbih0LG4scixhLG8pe3ZhciBmLGc7cmV0dXJuIGc9bi5saShyKSxnPT1udWxsJiZuLm1pKHIsZz1XVSh0aGlzLHQpKSxmPWwoZyw3MSkuV2soYSxvKSxmfSxoLkFrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bi5saShyKSxmIT1udWxsJiYobz1sKGYsNzEpLlhrKGEsbykpLG99LGguQms9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPW4ubGkociksYSE9bnVsbCYmbChhLDc5KS5RaigpfSxoLkNrPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBvO289bChuLmxpKHIpLDc5KSwhbyYmbi5taShyLG89V1UodGhpcyx0KSksby5XYihhKX0saC5Eaz1mdW5jdGlvbih0LG4scil7dmFyIGEsbztyZXR1cm4gbz1uLmxpKHIpLG89PW51bGwmJm4ubWkocixvPVdVKHRoaXMsdCkpLERlKG8sNzkpP2wobyw3OSk6KGE9bChuLmxpKHIpLDE1KSxuZXcgeFFlKGEpKX0saC5Faz1mdW5jdGlvbih0LG4scil7dmFyIGE7YT1sKG4ubGkociksNzkpLCFhJiZuLm1pKHIsYT1XVSh0aGlzLHQpKSxhLkdrKCl9LGguYj0wLGguZT0wLEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVNYW55Iiw5MSksRCg1MTIsMSx7fSksaC56az1mdW5jdGlvbih0LG4scixhLG8pe3Rocm93IHVlKG5ldyBRcil9LGguQWs9ZnVuY3Rpb24odCxuLHIsYSxvKXt0aHJvdyB1ZShuZXcgUXIpfSxoLkRrPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbmV3IElhdCh0aGlzLHQsbixyKX07dmFyIFNnO0koR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGUiLDUxMiksRCgxMzY3LDEsaTBlLElhdCksaC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLnlrKHRoaXMuYyx0aGlzLmQsdGhpcy5iLHQsITApfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5Cayh0aGlzLmMsdGhpcy5kLHRoaXMuYil9LGguV2I9ZnVuY3Rpb24odCl7dGhpcy5hLkNrKHRoaXMuYyx0aGlzLmQsdGhpcy5iLHQpfSxoLkdrPWZ1bmN0aW9uKCl7dGhpcy5hLkVrKHRoaXMuYyx0aGlzLmQsdGhpcy5iKX0saC5iPTAsSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZS8xIiwxMzY3KSxEKDc4NCw1MTIse30sJDVlKSxoLnlrPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIHNsZSh0LHQuUGgoKSx0LkZoKCkpPT10aGlzLmI/dGhpcy5ibCgpJiZhP1V1ZSh0KTp0LlBoKCk6bnVsbH0saC56az1mdW5jdGlvbih0LG4scixhLG8pe3ZhciBmLGc7cmV0dXJuIHQuUGgoKSYmKG89KGY9dC5GaCgpLGY+PTA/dC5BaChvKTp0LlBoKCkuVGgodCwtMS1mLG51bGwsbykpKSxnPW1zKHQuRGgoKSx0aGlzLmUpLHQuQ2goYSxnLG8pfSxoLkFrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bXModC5EaCgpLHRoaXMuZSksdC5DaChudWxsLGYsbyl9LGguQms9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPW1zKHQuRGgoKSx0aGlzLmUpLCEhdC5QaCgpJiZ0LkZoKCk9PWF9LGguQ2s9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIG8sZixnLHcsRTtpZihhIT1udWxsJiYhdWxlKHRoaXMuYSxhKSl0aHJvdyB1ZShuZXcga2soWEcrKERlKGEsNTgpP194ZShsKGEsNTgpLkRoKCkpOks2ZShiaChhKSkpK1FHK3RoaXMuYSsiJyIpKTtpZihvPXQuUGgoKSxnPW1zKHQuRGgoKSx0aGlzLmUpLHFlKGEpIT09cWUobyl8fHQuRmgoKSE9ZyYmYSE9bnVsbCl7aWYoRkUodCxsKGEsNTgpKSl0aHJvdyB1ZShuZXcgWW4oRUwrdC5JYigpKSk7RT1udWxsLG8mJihFPShmPXQuRmgoKSxmPj0wP3QuQWgoRSk6dC5QaCgpLlRoKHQsLTEtZixudWxsLEUpKSksdz1sKGEsNTQpLHcmJihFPXcuUmgodCxtcyh3LkRoKCksdGhpcy5iKSxudWxsLEUpKSxFPXQuQ2godyxnLEUpLEUmJkUub2ooKX1lbHNlIHQudmgoKSYmdC53aCgpJiZOaSh0LG5ldyBfYSh0LDEsZyxhLGEpKX0saC5Faz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGc7YT10LlBoKCksYT8oZz0obz10LkZoKCksbz49MD90LkFoKG51bGwpOnQuUGgoKS5UaCh0LC0xLW8sbnVsbCxudWxsKSksZj1tcyh0LkRoKCksdGhpcy5lKSxnPXQuQ2gobnVsbCxmLGcpLGcmJmcub2ooKSk6dC52aCgpJiZ0LndoKCkmJk5pKHQsbmV3IFhfKHQsMSx0aGlzLmUsbnVsbCxudWxsKSl9LGguYmw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUNvbnRhaW5lciIsNzg0KSxEKDEzNTEsNzg0LHt9LGtpdCksaC5ibD1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlQ29udGFpbmVyUmVzb2x2aW5nIiwxMzUxKSxEKDU3NCw1MTIse30pLGgueWs9ZnVuY3Rpb24odCxuLHIsYSxvKXt2YXIgZjtyZXR1cm4gZj1uLmxpKHIpLGY9PW51bGw/dGhpcy5iOnFlKGYpPT09cWUoU2cpP251bGw6Zn0saC5Caz1mdW5jdGlvbih0LG4scil7dmFyIGE7cmV0dXJuIGE9bi5saShyKSxhIT1udWxsJiYocWUoYSk9PT1xZShTZyl8fCFQaShhLHRoaXMuYikpfSxoLkNrPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBvLGY7dC52aCgpJiZ0LndoKCk/KG89KGY9bi5saShyKSxmPT1udWxsP3RoaXMuYjpxZShmKT09PXFlKFNnKT9udWxsOmYpLGE9PW51bGw/dGhpcy5jIT1udWxsPyhuLm1pKHIsbnVsbCksYT10aGlzLmIpOnRoaXMuYiE9bnVsbD9uLm1pKHIsU2cpOm4ubWkocixudWxsKToodGhpcy5CbChhKSxuLm1pKHIsYSkpLE5pKHQsdGhpcy5kLkNsKHQsMSx0aGlzLmUsbyxhKSkpOmE9PW51bGw/dGhpcy5jIT1udWxsP24ubWkocixudWxsKTp0aGlzLmIhPW51bGw/bi5taShyLFNnKTpuLm1pKHIsbnVsbCk6KHRoaXMuQmwoYSksbi5taShyLGEpKX0saC5Faz1mdW5jdGlvbih0LG4scil7dmFyIGEsbzt0LnZoKCkmJnQud2goKT8oYT0obz1uLmxpKHIpLG89PW51bGw/dGhpcy5iOnFlKG8pPT09cWUoU2cpP251bGw6byksbi5uaShyKSxOaSh0LHRoaXMuZC5DbCh0LDEsdGhpcy5lLGEsdGhpcy5iKSkpOm4ubmkocil9LGguQmw9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IElRZSl9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhIiw1NzQpLEQoXzYsMSx7fSxOUyksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgWF8odCxuLHIsYSxvKX0saC5EbD1mdW5jdGlvbih0LG4scixhLG8sZil7cmV0dXJuIG5ldyByb2UodCxuLHIsYSxvLGYpfTt2YXIgTVBlLERQZSxJUGUsT1BlLE5QZSxQUGUsQlBlLGlwZSxGUGU7SShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvciIsXzYpLEQoMTM2OCxfNix7fSxIMCksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgbTZlKHQsbixyLFJ0KEJ0KGEpKSxSdChCdChvKSkpfSxoLkRsPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXtyZXR1cm4gbmV3IHJjdCh0LG4scixSdChCdChhKSksUnQoQnQobykpLGYpfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzEiLDEzNjgpLEQoMTM2OSxfNix7fSxBSSksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgUTZlKHQsbixyLGwoYSwyMjIpLmEsbChvLDIyMikuYSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgWG90KHQsbixyLGwoYSwyMjIpLmEsbChvLDIyMikuYSxmKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci8yIiwxMzY5KSxEKDEzNzAsXzYse30sTEkpLGguQ2w9ZnVuY3Rpb24odCxuLHIsYSxvKXtyZXR1cm4gbmV3IEo2ZSh0LG4scixsKGEsMTgwKS5hLGwobywxODApLmEpfSxoLkRsPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXtyZXR1cm4gbmV3IFFvdCh0LG4scixsKGEsMTgwKS5hLGwobywxODApLmEsZil9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMyIsMTM3MCksRCgxMzcxLF82LHt9LGY4KSxoLkNsPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBwNmUodCxuLHIsemUoR2UoYSkpLHplKEdlKG8pKSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgSm90KHQsbixyLHplKEdlKGEpKSx6ZShHZShvKSksZil9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvNCIsMTM3MSksRCgxMzcyLF82LHt9LHRyZSksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgdDdlKHQsbixyLGwoYSwxNjEpLmEsbChvLDE2MSkuYSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgWm90KHQsbixyLGwoYSwxNjEpLmEsbChvLDE2MSkuYSxmKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci81IiwxMzcyKSxEKDEzNzMsXzYse30sbnJlKSxoLkNsPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBiNmUodCxuLHIsbChhLDE3KS5hLGwobywxNykuYSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgZWN0KHQsbixyLGwoYSwxNykuYSxsKG8sMTcpLmEsZil9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvNiIsMTM3MyksRCgxMzc0LF82LHt9LHJyZSksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgWjZlKHQsbixyLGwoYSwxNjgpLmEsbChvLDE2OCkuYSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgdGN0KHQsbixyLGwoYSwxNjgpLmEsbChvLDE2OCkuYSxmKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci83IiwxMzc0KSxEKDEzNzUsXzYse30saXJlKSxoLkNsPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBlN2UodCxuLHIsbChhLDE5MSkuYSxsKG8sMTkxKS5hKX0saC5EbD1mdW5jdGlvbih0LG4scixhLG8sZil7cmV0dXJuIG5ldyBuY3QodCxuLHIsbChhLDE5MSkuYSxsKG8sMTkxKS5hLGYpfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzgiLDEzNzUpLEQoMTM1Myw1NzQse30sT2F0KSxoLkJsPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmEuZmsodCkpdGhyb3cgdWUobmV3IGtrKFhHK2JoKHQpK1FHK3RoaXMuYSsiJyIpKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFEeW5hbWljIiwxMzUzKSxEKDEzNTQsNTc0LHt9LHlzdCksaC5CbD1mdW5jdGlvbih0KXt9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhU3RhdGljIiwxMzU0KSxEKDc4NSw1NzQse30pLGguQms9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPW4ubGkociksYSE9bnVsbH0saC5Daz1mdW5jdGlvbih0LG4scixhKXt2YXIgbyxmO3QudmgoKSYmdC53aCgpPyhvPSEwLGY9bi5saShyKSxmPT1udWxsPyhvPSExLGY9dGhpcy5iKTpxZShmKT09PXFlKFNnKSYmKGY9bnVsbCksYT09bnVsbD90aGlzLmMhPW51bGw/KG4ubWkocixudWxsKSxhPXRoaXMuYik6bi5taShyLFNnKToodGhpcy5CbChhKSxuLm1pKHIsYSkpLE5pKHQsdGhpcy5kLkRsKHQsMSx0aGlzLmUsZixhLCFvKSkpOmE9PW51bGw/dGhpcy5jIT1udWxsP24ubWkocixudWxsKTpuLm1pKHIsU2cpOih0aGlzLkJsKGEpLG4ubWkocixhKSl9LGguRWs9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87dC52aCgpJiZ0LndoKCk/KGE9ITAsbz1uLmxpKHIpLG89PW51bGw/KGE9ITEsbz10aGlzLmIpOnFlKG8pPT09cWUoU2cpJiYobz1udWxsKSxuLm5pKHIpLE5pKHQsdGhpcy5kLkRsKHQsMix0aGlzLmUsbyx0aGlzLmIsYSkpKTpuLm5pKHIpfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGUiLDc4NSksRCgxMzU1LDc4NSx7fSxOYXQpLGguQmw9ZnVuY3Rpb24odCl7aWYoIXRoaXMuYS5mayh0KSl0aHJvdyB1ZShuZXcga2soWEcrYmgodCkrUUcrdGhpcy5hKyInIikpfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGVEeW5hbWljIiwxMzU1KSxEKDEzNTYsNzg1LHt9LHhzdCksaC5CbD1mdW5jdGlvbih0KXt9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhVW5zZXR0YWJsZVN0YXRpYyIsMTM1NiksRCg0MTAsNTEyLHt9LGNIKSxoLnlrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGYsZyx3LEUsQztpZihDPW4ubGkociksdGhpcy50aygpJiZxZShDKT09PXFlKFNnKSlyZXR1cm4gbnVsbDtpZih0aGlzLmJsKCkmJmEmJkMhPW51bGwpe2lmKHc9bChDLDU0KSx3LlZoKCkmJihFPXliKHQsdyksdyE9RSkpe2lmKCF1bGUodGhpcy5hLEUpKXRocm93IHVlKG5ldyBrayhYRytiaChFKStRRyt0aGlzLmErIiciKSk7bi5taShyLEM9RSksdGhpcy5hbCgpJiYoZj1sKEUsNTQpLGc9dy5UaCh0LHRoaXMuYj9tcyh3LkRoKCksdGhpcy5iKTotMS1tcyh0LkRoKCksdGhpcy5lKSxudWxsLG51bGwpLCFmLlBoKCkmJihnPWYuUmgodCx0aGlzLmI/bXMoZi5EaCgpLHRoaXMuYik6LTEtbXModC5EaCgpLHRoaXMuZSksbnVsbCxnKSksZyYmZy5vaigpKSx0LnZoKCkmJnQud2goKSYmTmkodCxuZXcgWF8odCw5LHRoaXMuZSx3LEUpKX1yZXR1cm4gQ31lbHNlIHJldHVybiBDfSxoLnprPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGYsZztyZXR1cm4gZz1uLmxpKHIpLHFlKGcpPT09cWUoU2cpJiYoZz1udWxsKSxuLm1pKHIsYSksdGhpcy5NaigpP3FlKGcpIT09cWUoYSkmJmchPW51bGwmJihmPWwoZyw1NCksbz1mLlRoKHQsbXMoZi5EaCgpLHRoaXMuYiksbnVsbCxvKSk6dGhpcy5hbCgpJiZnIT1udWxsJiYobz1sKGcsNTQpLlRoKHQsLTEtbXModC5EaCgpLHRoaXMuZSksbnVsbCxvKSksdC52aCgpJiZ0LndoKCkmJighbyYmKG89bmV3IG5iKDQpKSxvLm5qKG5ldyBYXyh0LDEsdGhpcy5lLGcsYSkpKSxvfSxoLkFrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bi5saShyKSxxZShmKT09PXFlKFNnKSYmKGY9bnVsbCksbi5uaShyKSx0LnZoKCkmJnQud2goKSYmKCFvJiYobz1uZXcgbmIoNCkpLHRoaXMudGsoKT9vLm5qKG5ldyBYXyh0LDIsdGhpcy5lLGYsbnVsbCkpOm8ubmoobmV3IFhfKHQsMSx0aGlzLmUsZixudWxsKSkpLG99LGguQms9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPW4ubGkociksYSE9bnVsbH0saC5Daz1mdW5jdGlvbih0LG4scixhKXt2YXIgbyxmLGcsdyxFO2lmKGEhPW51bGwmJiF1bGUodGhpcy5hLGEpKXRocm93IHVlKG5ldyBrayhYRysoRGUoYSw1OCk/X3hlKGwoYSw1OCkuRGgoKSk6SzZlKGJoKGEpKSkrUUcrdGhpcy5hKyInIikpO0U9bi5saShyKSx3PUUhPW51bGwsdGhpcy50aygpJiZxZShFKT09PXFlKFNnKSYmKEU9bnVsbCksZz1udWxsLHRoaXMuTWooKT9xZShFKSE9PXFlKGEpJiYoRSE9bnVsbCYmKG89bChFLDU0KSxnPW8uVGgodCxtcyhvLkRoKCksdGhpcy5iKSxudWxsLGcpKSxhIT1udWxsJiYobz1sKGEsNTQpLGc9by5SaCh0LG1zKG8uRGgoKSx0aGlzLmIpLG51bGwsZykpKTp0aGlzLmFsKCkmJnFlKEUpIT09cWUoYSkmJihFIT1udWxsJiYoZz1sKEUsNTQpLlRoKHQsLTEtbXModC5EaCgpLHRoaXMuZSksbnVsbCxnKSksYSE9bnVsbCYmKGc9bChhLDU0KS5SaCh0LC0xLW1zKHQuRGgoKSx0aGlzLmUpLG51bGwsZykpKSxhPT1udWxsJiZ0aGlzLnRrKCk/bi5taShyLFNnKTpuLm1pKHIsYSksdC52aCgpJiZ0LndoKCk/KGY9bmV3IHJvZSh0LDEsdGhpcy5lLEUsYSx0aGlzLnRrKCkmJiF3KSxnPyhnLm5qKGYpLGcub2ooKSk6TmkodCxmKSk6ZyYmZy5vaigpfSxoLkVrPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGYsZyx3O3c9bi5saShyKSxnPXchPW51bGwsdGhpcy50aygpJiZxZSh3KT09PXFlKFNnKSYmKHc9bnVsbCksZj1udWxsLHchPW51bGwmJih0aGlzLk1qKCk/KGE9bCh3LDU0KSxmPWEuVGgodCxtcyhhLkRoKCksdGhpcy5iKSxudWxsLGYpKTp0aGlzLmFsKCkmJihmPWwodyw1NCkuVGgodCwtMS1tcyh0LkRoKCksdGhpcy5lKSxudWxsLGYpKSksbi5uaShyKSx0LnZoKCkmJnQud2goKT8obz1uZXcgcm9lKHQsdGhpcy50aygpPzI6MSx0aGlzLmUsdyxudWxsLGcpLGY/KGYubmoobyksZi5vaigpKTpOaSh0LG8pKTpmJiZmLm9qKCl9LGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5hbD1mdW5jdGlvbigpe3JldHVybiExfSxoLmJsPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgudGs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3QiLDQxMCksRCg1NzUsNDEwLHt9LG9hZSksaC5hbD1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50Iiw1NzUpLEQoMTM1OSw1NzUse30sd3J0KSxoLmJsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRSZXNvbHZpbmciLDEzNTkpLEQoNzg3LDU3NSx7fSxqeWUpLGgudGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFVuc2V0dGFibGUiLDc4NyksRCgxMzYxLDc4Nyx7fSx5cnQpLGguYmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFVuc2V0dGFibGVSZXNvbHZpbmciLDEzNjEpLEQoNjUwLDU3NSx7fSx5YWUpLGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlIiw2NTApLEQoMTM2MCw2NTAse30sRWl0KSxoLmJsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZVJlc29sdmluZyIsMTM2MCksRCg3ODgsNjUwLHt9LEM0ZSksaC50az1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VVbnNldHRhYmxlIiw3ODgpLEQoMTM2Miw3ODgse30sVGl0KSxoLmJsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZVVuc2V0dGFibGVSZXNvbHZpbmciLDEzNjIpLEQoNjUxLDQxMCx7fSwkeWUpLGguYmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmciLDY1MSksRCgxMzYzLDY1MSx7fSx4cnQpLGgudGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmdVbnNldHRhYmxlIiwxMzYzKSxEKDc4OSw2NTEse30sRTRlKSxoLk1qPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nV2l0aEludmVyc2UiLDc4OSksRCgxMzY0LDc4OSx7fSxDaXQpLGgudGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmdXaXRoSW52ZXJzZVVuc2V0dGFibGUiLDEzNjQpLEQoMTM1Nyw0MTAse30sa3J0KSxoLnRrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0VW5zZXR0YWJsZSIsMTM1NyksRCg3ODYsNDEwLHt9LFQ0ZSksaC5Naj1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFdpdGhJbnZlcnNlIiw3ODYpLEQoMTM1OCw3ODYse30sU2l0KSxoLnRrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0V2l0aEludmVyc2VVbnNldHRhYmxlIiwxMzU4KSxEKDc5MCw1NzYsWUcseDVlKSxoLnlsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeDVlKHRoaXMuYSx0aGlzLmMsdCl9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLnpsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gYnZuKHRoaXMsdCx0aGlzLmIscil9LGguQWw9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBtdm4odGhpcyx0LHRoaXMuYixyKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnZlcnNlVXBkYXRpbmdGZWF0dXJlTWFwRW50cnkiLDc5MCksRCgxMzY1LDEsaTBlLHhRZSksaC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIERlKHRoaXMuYSw5Nyk/bCh0aGlzLmEsOTcpLlFqKCk6IXRoaXMuYS5kYygpfSxoLldiPWZ1bmN0aW9uKHQpe3RoaXMuYS4kYigpLHRoaXMuYS5HYyhsKHQsMTUpKX0saC5Haz1mdW5jdGlvbigpe0RlKHRoaXMuYSw5Nyk/bCh0aGlzLmEsOTcpLkdrKCk6dGhpcy5hLiRiKCl9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2V0dGluZ01hbnkiLDEzNjUpLEQoMTM2Niw1NzYsWUcsV2N0KSxoLnhsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbGFlKChHaSgpLFVNKSx0aGlzLmIucmkodGhpcy5hLHQpKX0saC5tZD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLnpsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcn0saC5BbD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJ9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2ltcGxlQ29udGVudEZlYXR1cmVNYXBFbnRyeSIsMTM2NiksRCg2NTIsNTc2LFlHLGxhZSksaC54bD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGxhZSh0aGlzLmMsdCl9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLnpsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcn0saC5BbD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJ9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2ltcGxlRmVhdHVyZU1hcEVudHJ5Iiw2NTIpLEQoNDAzLDUwNixCZCxYZCksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoVmYsUm4sMjksdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVTdXBlckFkYXB0ZXIvMSIsNDAzKSxEKDQ1Nyw0NDgsezExMDoxLDk0OjEsOTM6MSwxNTU6MSwxOTc6MSw1ODoxLDExNDoxLDg1MDoxLDU0OjEsOTk6MSwxNTg6MSw0NTc6MSwxMTk6MSwxMjA6MX0sUFMpLGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBHXyh0aGlzLFdvLHRoaXMpKSx0aGlzLmF9cmV0dXJuIHNmKHRoaXMsdC15cigoVG4oKSxUMykpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fFQzKSx0KSxuLHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFRvKHRoaXMuQWIsdCxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgR18odGhpcyxXbyx0aGlzKSksVG8odGhpcy5hLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxUMykpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLFQzKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksVDMpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxUMyksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGdSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmEmJih0aGlzLmE9bmV3IEdfKHRoaXMsV28sdGhpcykpLCRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgR18odGhpcyxXbyx0aGlzKSksQXModGhpcy5hLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksVDMpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxUMyksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxUM30saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjohdGhpcy5hJiYodGhpcy5hPW5ldyBHXyh0aGlzLFdvLHRoaXMpKSwkcih0aGlzLmEpO3JldHVybn1jZih0aGlzLHQteXIoKFRuKCksVDMpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxUMyksdCkpfSxJKEduLCJFVHlwZVBhcmFtZXRlckltcGwiLDQ1NyksRCg0NTgsODMsa2MsR18pLGguTmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRHhuKHRoaXMsbCh0LDg5KSxuKX0saC5Paj1mdW5jdGlvbih0LG4pe3JldHVybiBJeG4odGhpcyxsKHQsODkpLG4pfSxJKEduLCJFVHlwZVBhcmFtZXRlckltcGwvMSIsNDU4KSxEKDY0Nyw0NSxtNixWaWUpLGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFB6KHRoaXMpfSxJKEduLCJFVHlwZVBhcmFtZXRlckltcGwvMiIsNjQ3KSxEKDU3MCxxMSxUbCxQeiksaC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gV3J0KHRoaXMsbCh0LDg5KSl9LGguR2M9ZnVuY3Rpb24odCl7dmFyIG4scixhO2ZvcihhPSExLHI9dC5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSw4OSksa2kodGhpcy5hLG4sIiIpPT1udWxsJiYoYT0hMCk7cmV0dXJuIGF9LGguJGI9ZnVuY3Rpb24oKXtObCh0aGlzLmEpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBIdSh0aGlzLmEsdCl9LGguS2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgcW0obmV3IFNyKHRoaXMuYSkuYSksbmV3IEJ6KHQpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiBSdXQodGhpcyx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiBkXyh0aGlzLmEpfSxJKEduLCJFVHlwZVBhcmFtZXRlckltcGwvMi8xIiw1NzApLEQoNTcxLDEsT2EsQnopLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiBsKE53KHRoaXMuYSkubGQoKSw4OSl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmJ9LGguUWI9ZnVuY3Rpb24oKXtLbHQodGhpcy5hKX0sSShHbiwiRVR5cGVQYXJhbWV0ZXJJbXBsLzIvMS8xIiw1NzEpLEQoMTMyOSw0NSxtNixoSmUpLGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpP3NvZSh0aGlzLHQpOiEhem8odGhpcy5mLHQpfSxoLnhjPWZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIG49SWEodCk/eHUodGhpcyx0KTpoYyh6byh0aGlzLmYsdCkpLERlKG4sODUxKT8ocj1sKG4sODUxKSxuPXIuS2soKSxraSh0aGlzLGwodCwyNDEpLG4pLG4pOm4/Pyh0PT1udWxsPyh1c2UoKSxaX3QpOm51bGwpfSxJKEduLCJFVmFsaWRhdG9yUmVnaXN0cnlJbXBsIiwxMzI5KSxEKDEzNDksNzIwLHsxMTA6MSw5NDoxLDkzOjEsNDgwOjEsMTU1OjEsNTg6MSwxMTQ6MSwyMDQwOjEsNTQ6MSw5OToxLDE1ODoxLDExOToxLDEyMDoxfSxkOCksaC5yaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0LmhrKCkpe2Nhc2UgMjE6Y2FzZSAyMjpjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNjpjYXNlIDMxOmNhc2UgMzI6Y2FzZSAzNzpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MDpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgMjA6cmV0dXJuIG49PW51bGw/bnVsbDp4YyhuKTtjYXNlIDI1OnJldHVybiBBd24obik7Y2FzZSAyNzpyZXR1cm4gcXZuKG4pO2Nhc2UgMjg6cmV0dXJuIEh2bihuKTtjYXNlIDI5OnJldHVybiBuPT1udWxsP251bGw6Q250KGpNWzBdLGwobiwyMDYpKTtjYXNlIDQxOnJldHVybiBuPT1udWxsPyIiOl9tKGwobiwyOTcpKTtjYXNlIDQyOnJldHVybiB4YyhuKTtjYXNlIDUwOnJldHVybiBlaShuKTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbih5VCt0LnhlKCkrdDMpKX19LGguc2k9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZTtzd2l0Y2godC5HPT0tMSYmKHQuRz0oej1BaCh0KSx6P2YyKHoudmkoKSx0KTotMSkpLHQuRyl7Y2FzZSAwOnJldHVybiByPW5ldyB6aWUscjtjYXNlIDE6cmV0dXJuIG49bmV3IENJLG47Y2FzZSAyOnJldHVybiBhPW5ldyBoeixhO2Nhc2UgNDpyZXR1cm4gbz1uZXcgRnosbztjYXNlIDU6cmV0dXJuIGY9bmV3IGxKZSxmO2Nhc2UgNjpyZXR1cm4gZz1uZXcgUFFlLGc7Y2FzZSA3OnJldHVybiB3PW5ldyBmeix3O2Nhc2UgMTA6cmV0dXJuIEM9bmV3IG01LEM7Y2FzZSAxMTpyZXR1cm4gTD1uZXcgcWllLEw7Y2FzZSAxMjpyZXR1cm4gQj1uZXcgcWF0LEI7Y2FzZSAxMzpyZXR1cm4gVj1uZXcgSGllLFY7Y2FzZSAxNDpyZXR1cm4gSj1uZXcgSHllLEo7Y2FzZSAxNzpyZXR1cm4gdGU9bmV3IE9TLHRlO2Nhc2UgMTg6cmV0dXJuIEU9bmV3IFF2LEU7Y2FzZSAxOTpyZXR1cm4gZmU9bmV3IFBTLGZlO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKHFmZSt0LnpiK3QzKSl9fSxoLnRpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQuaGsoKSl7Y2FzZSAyMDpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBoM2Uobik7Y2FzZSAyMTpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBvYihuKTtjYXNlIDIzOmNhc2UgMjI6cmV0dXJuIG49PW51bGw/bnVsbDp6NW4obik7Y2FzZSAyNjpjYXNlIDI0OnJldHVybiBuPT1udWxsP251bGw6Zk4oT2gobiwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAyNTpyZXR1cm4gYVRuKG4pO2Nhc2UgMjc6cmV0dXJuIEE3bihuKTtjYXNlIDI4OnJldHVybiBMN24obik7Y2FzZSAyOTpyZXR1cm4gSnhuKG4pO2Nhc2UgMzI6Y2FzZSAzMTpyZXR1cm4gbj09bnVsbD9udWxsOmp5KG4pO2Nhc2UgMzg6Y2FzZSAzNzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBBd2Uobik7Y2FzZSA0MDpjYXNlIDM5OnJldHVybiBuPT1udWxsP251bGw6cHQoT2gobixsbyxJaSkpO2Nhc2UgNDE6cmV0dXJuIG51bGw7Y2FzZSA0MjpyZXR1cm4gbj09bnVsbCxudWxsO2Nhc2UgNDQ6Y2FzZSA0MzpyZXR1cm4gbj09bnVsbD9udWxsOmFwKEtVKG4pKTtjYXNlIDQ5OmNhc2UgNDg6cmV0dXJuIG49PW51bGw/bnVsbDpfRShPaChuLEpHLDMyNzY3KTw8MTY+PjE2KTtjYXNlIDUwOnJldHVybiBuO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKHlUK3QueGUoKSt0MykpfX0sSShHbiwiRWNvcmVGYWN0b3J5SW1wbCIsMTM0OSksRCg1NjAsMTg0LHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwyNDE6MSwxMTQ6MSwyMDM4OjEsNTQ6MSw5OToxLDE1ODoxLDE4NDoxLDU2MDoxLDExOToxLDEyMDoxLDY5MDoxfSxmYXQpLGguZ2I9ITEsaC5oYj0hMTt2YXIgUlBlLEpfdD0hMTtJKEduLCJFY29yZVBhY2thZ2VJbXBsIiw1NjApLEQoMTIzNCwxLHs4NTE6MX0sazEpLGguS2s9ZnVuY3Rpb24oKXtyZXR1cm4gUm50KCksZUF0fSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzEiLDEyMzQpLEQoMTI0MywxLHlpLEEkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE1NSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHVGLFJuLDE1NSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMTAiLDEyNDMpLEQoMTI0NCwxLHlpLEwkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE5Nyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKFlnZSxSbiwxOTcsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzExIiwxMjQ0KSxEKDEyNDUsMSx5aSxNJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw1OCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKFhiLFJuLDU4LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xMiIsMTI0NSksRCgxMjQ2LDEseWksRCQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNDExKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoVWYsTFNlLDYyLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xMyIsMTI0NiksRCgxMjQ3LDEseWksSSQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjQxKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UodTEsUm4sMjQxLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xNCIsMTI0NyksRCgxMjQ4LDEseWksTyQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNTE4KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoazMsUm4sMjExNix0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMTUiLDEyNDgpLEQoMTI0OSwxLHlpLFYwKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDEwMil9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEk0LFM2LDE5LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xNiIsMTI0OSksRCgxMjUwLDEseWksbmwpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTc5KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoZGwsUzYsMTc5LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xNyIsMTI1MCksRCgxMjUxLDEseWksc3JlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDQ4MSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKE00LFJuLDQ4MSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMTgiLDEyNTEpLEQoMTI1MiwxLHlpLGFyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw1NjEpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShZYyxlNXQsNTYxLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xOSIsMTI1MiksRCgxMjM1LDEseWksb3JlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDMzMSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEQ0LFM2LDM1LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8yIiwxMjM1KSxEKDEyNTMsMSx5aSxybCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyNDgpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShXbyxtNXQsODksdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzIwIiwxMjUzKSxEKDEyNTQsMSx5aSxCUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw0NTcpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShadSxSbiw4NTAsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzIxIiwxMjU0KSxEKDEyNTUsMSx5aSxOJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gaHkodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKE5zLGR0LDQ4NSx0LDgsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMjIiLDEyNTUpLEQoMTI1NiwxLHlpLFAkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE5NSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEFsLGR0LDE5NSx0LDAsMil9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMjMiLDEyNTYpLEQoMTI1NywxLHlpLGc4KSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDIyMil9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGp4LGR0LDIyMix0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMjQiLDEyNTcpLEQoMTI1OCwxLHlpLGNyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxODApfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShQTCxkdCwxODAsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzI1IiwxMjU4KSxEKDEyNTksMSx5aSxhayksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyMDYpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShjSyxkdCwyMDYsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzI2IiwxMjU5KSxEKDEyNjAsMSx5aSx1cmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKG5CZSxSbiwyMjE1LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8yNyIsMTI2MCksRCgxMjYxLDEseWksQiQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIGZ5KHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh0YSxkdCwzNDUsdCw3LDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzI4IiwxMjYxKSxEKDEyNjIsMSx5aSxscmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNjEpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShtUGUsUXksNjEsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzI5IiwxMjYyKSxEKDEyMzYsMSx5aSxocmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNTE5KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UobWksezM6MSw0OjEsNToxLDIwMzM6MX0sNTk4LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8zIiwxMjM2KSxEKDEyNjMsMSx5aSxGUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw1ODIpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh5UGUsUm4sMjAzOSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMzAiLDEyNjMpLEQoMTI2NCwxLHlpLEYkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE2MCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEhQZSxReSwxNjAsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzMxIiwxMjY0KSxEKDEyNjUsMSx5aSxNSSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw3Nil9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKENZLFM1dCw3Nix0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMzIiLDEyNjUpLEQoMTI2NiwxLHlpLFJTKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE2MSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKF9ULGR0LDE2MSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMzMiLDEyNjYpLEQoMTI2NywxLHlpLGZyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHJvLGR0LDE3LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8zNCIsMTI2NyksRCgxMjY4LDEseWksZHJlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDI5Nyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHFTZSxSbiwyOTcsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzM1IiwxMjY4KSxEKDEyNjksMSx5aSxESSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNjgpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShyMyxkdCwxNjgsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzM2IiwxMjY5KSxEKDEyNzAsMSx5aSxqUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw4NSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEhTZSxSbiw4NSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMzciLDEyNzApLEQoMTI3MSwxLHlpLEUxKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDU5OSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGpQZSxSbiw1OTksdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzM4IiwxMjcxKSxEKDEyNzIsMSx5aSxvayksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4hMX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UockJlLFJuLDIyMTYsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzM5IiwxMjcyKSxEKDEyMzcsMSx5aSxncmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsOTApfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShWZixSbiwyOSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvNCIsMTIzNyksRCgxMjczLDEseWksY2spLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTkxKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoaTMsZHQsMTkxLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC80MCIsMTI3MyksRCgxMjc0LDEseWksSUkpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC80MSIsMTI3NCksRCgxMjc1LDEseWkseG0pLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNTk2KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2Uod1BlLFJuLDU5Nix0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvNDIiLDEyNzUpLEQoMTI3NiwxLHlpLCRTKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShpQmUsZHQsMjIxNyx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvNDMiLDEyNzYpLEQoMTI3NywxLHlpLE9JKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDQ0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UodXYsWFUsNDQsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzQ0IiwxMjc3KSxEKDEyMzgsMSx5aSxVMCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNDIpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShsMSxSbiwxNDIsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzUiLDEyMzgpLEQoMTIzOSwxLHlpLHpTKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE1Nil9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHRwZSxSbiwxNTYsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzYiLDEyMzkpLEQoMTI0MCwxLHlpLFQxKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDQ2OSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKFRZLFJuLDY4NSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvNyIsMTI0MCksRCgxMjQxLDEseWksQzEpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNTgyKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2Uod3AsUm4sNjk0LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC84IiwxMjQxKSxEKDEyNDIsMSx5aSxwcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNDgwKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoUk0sUm4sNDgwLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC85IiwxMjQyKSxEKDEwMzgsMjA4MCxaNHQsSUplKSxoLk1pPWZ1bmN0aW9uKHQsbil7YjRuKHRoaXMsbChuLDQyNCkpfSxoLlFpPWZ1bmN0aW9uKHQsbil7QXB0KHRoaXMsdCxsKG4sNDI0KSl9LEkoR24sIk1pbmltYWxFT2JqZWN0SW1wbC8xQXJyYXlEZWxlZ2F0aW5nQWRhcHRlckxpc3QiLDEwMzgpLEQoMTAzOSwxNTIsWVAsbmF0KSxoLmpqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5hfSxJKEduLCJNaW5pbWFsRU9iamVjdEltcGwvMUFycmF5RGVsZWdhdGluZ0FkYXB0ZXJMaXN0LzEiLDEwMzkpLEQoMTA2NywxMDY2LHt9LGJudCksSSgib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbiIsIkVjb3JlUGx1Z2luIiwxMDY3KTt2YXIgalBlPWtzKF81dCwiUmVzb3VyY2UiKTtEKDc5OSwxNTI0LEE1dCksaC5IbD1mdW5jdGlvbih0KXt9LGguSWw9ZnVuY3Rpb24odCl7fSxoLkVsPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgUGllKHRoaXMpKSx0aGlzLmF9LGguRmw9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZjtpZihhPXQubGVuZ3RoLGE+MClpZihYbigwLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoMCk9PTQ3KXtmb3IoZj1uZXcgQnUoNCksbz0xLG49MTtuPGE7KytuKVhuKG4sdC5sZW5ndGgpLHQuY2hhckNvZGVBdChuKT09NDcmJih2dChmLG89PW4/IiI6KEdhKG8sbix0Lmxlbmd0aCksdC5zdWJzdHIobyxuLW8pKSksbz1uKzEpO3JldHVybiB2dChmLChYbihvLHQubGVuZ3RoKzEpLHQuc3Vic3RyKG8pKSksdzhuKHRoaXMsZil9ZWxzZSBYbihhLTEsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChhLTEpPT02MyYmKHI9aDRlKHQsY2woNjMpLGEtMikscj4wJiYodD0oR2EoMCxyLHQubGVuZ3RoKSx0LnN1YnN0cigwLHIpKSkpO3JldHVybiBVa24odGhpcyx0KX0saC5HbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gX20odGhpcy5SbSkrIkAiKyh0PWVzKHRoaXMpPj4+MCx0LnRvU3RyaW5nKDE2KSkrIiB1cmk9JyIrdGhpcy5kKyInIn0saC5iPSExLEkoczBlLCJSZXNvdXJjZUltcGwiLDc5OSksRCgxNTI1LDc5OSxBNXQsa1FlKSxJKHMwZSwiQmluYXJ5UmVzb3VyY2VJbXBsIiwxNTI1KSxEKDExOTAsNzA4LFpmZSksaC5iaj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw1OCk/QnBuKHRoaXMsbCh0LDU4KSk6RGUodCw1OTkpP25ldyBvcihsKHQsNTk5KS5FbCgpKTpxZSh0KT09PXFlKHRoaXMuZik/bCh0LDE2KS5LYygpOihGaygpLGZGLmEpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHg5ZSh0aGlzKX0saC5hPSExLEkodXMsIkVjb3JlVXRpbC9Db250ZW50VHJlZUl0ZXJhdG9yIiwxMTkwKSxEKDE1MjYsMTE5MCxaZmUsSXN0KSxoLmJqPWZ1bmN0aW9uKHQpe3JldHVybiBxZSh0KT09PXFlKHRoaXMuZik/bCh0LDE1KS5LYygpOm5ldyBMY3QobCh0LDU4KSl9LEkoczBlLCJSZXNvdXJjZUltcGwvNSIsMTUyNiksRCg2NTgsMjA5MixiNXQsUGllKSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmk8PTQ/akUodGhpcyx0KTpEZSh0LDU0KSYmbCh0LDU0KS5KaCgpPT10aGlzLmF9LGguTWk9ZnVuY3Rpb24odCxuKXt0PT10aGlzLmktMSYmKHRoaXMuYS5ifHwodGhpcy5hLmI9ITApKX0saC5PaT1mdW5jdGlvbih0LG4pe3Q9PTA/dGhpcy5hLmJ8fCh0aGlzLmEuYj0hMCk6Tm9lKHRoaXMsdCxuKX0saC5RaT1mdW5jdGlvbih0LG4pe30saC5SaT1mdW5jdGlvbih0LG4scil7fSxoLkxqPWZ1bmN0aW9uKCl7cmV0dXJuIDJ9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLk1qPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguTmo9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gcj1sKHQsNTQpLG49ci5maSh0aGlzLmEsbiksbn0saC5Paj1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByPWwodCw1NCksci5maShudWxsLG4pfSxoLlBqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoWGIsUm4sNTgsdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoczBlLCJSZXNvdXJjZUltcGwvQ29udGVudHNFTGlzdCIsNjU4KSxEKDk3MCwyMDYyLGlULEVRZSksaC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLktpKHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxJKHVzLCJBYnN0cmFjdFNlcXVlbnRpYWxJbnRlcm5hbEVMaXN0LzEiLDk3MCk7dmFyICRQZSx6UGUsaW8scVBlO0QoNjM0LDEse30sTml0KTt2YXIgU1ksX1k7SSh1cywiQmFzaWNFeHRlbmRlZE1ldGFEYXRhIiw2MzQpLEQoMTE4MSwxLHt9LEJ0dCksaC5KbD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLktsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT09LTImJlllKHRoaXMsVXhuKHRoaXMuZCx0aGlzLmIpKSx0aGlzLmF9LGguTGw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5NbD1mdW5jdGlvbigpe3JldHVybiBDbigpLENuKCksX299LGgueGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPT1FVCYmbXQodGhpcyxKMXQodGhpcy5kLHRoaXMuYikpLHRoaXMuY30saC5ObD1mdW5jdGlvbigpe3JldHVybiAwfSxoLmE9LTIsaC5jPUVULEkodXMsIkJhc2ljRXh0ZW5kZWRNZXRhRGF0YS9FQ2xhc3NFeHRlbmRlZE1ldGFEYXRhSW1wbCIsMTE4MSksRCgxMTgyLDEse30sc2N0KSxoLkpsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT09KGVFKCksU1kpJiZNdCh0aGlzLFZTbih0aGlzLmYsdGhpcy5iKSksdGhpcy5hfSxoLktsPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGguTGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPT0oZUUoKSxTWSkmJkplKHRoaXMsVVNuKHRoaXMuZix0aGlzLmIpKSx0aGlzLmN9LGguTWw9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kJiZXdCh0aGlzLExBbih0aGlzLmYsdGhpcy5iKSksdGhpcy5kfSxoLnhlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZT09RVQmJl9uKHRoaXMsSjF0KHRoaXMuZix0aGlzLmIpKSx0aGlzLmV9LGguTmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nPT0tMiYmWXQodGhpcyxseG4odGhpcy5mLHRoaXMuYikpLHRoaXMuZ30saC5lPUVULGguZz0tMixJKHVzLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRURhdGFUeXBlRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExODIpLEQoMTE4MCwxLHt9LEZ0dCksaC5iPSExLGguYz0hMSxJKHVzLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRVBhY2thZ2VFeHRlbmRlZE1ldGFEYXRhSW1wbCIsMTE4MCksRCgxMTgzLDEse30sYWN0KSxoLmM9LTIsaC5lPUVULGguZj1FVCxJKHVzLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRVN0cnVjdHVyYWxGZWF0dXJlRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExODMpLEQoNTkzLDYzMixrYyxKcSksaC5Maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGgub2w9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5XaT1mdW5jdGlvbih0LG4pe3JldHVybiBufSxoLmM9MCxJKHVzLCJFRGF0YVR5cGVFTGlzdCIsNTkzKTt2YXIgSFBlPWtzKHVzLCJGZWF0dXJlTWFwIik7RCg3OCw1OTMsezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjEsNzk6MSwxNjA6MSwyMjA6MSwyMDM2OjEsNzE6MSw5NzoxfSxMcyksaC5iZD1mdW5jdGlvbih0LG4pe3VDbih0aGlzLHQsbChuLDc2KSl9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIF9Ubih0aGlzLGwodCw3NikpfSxoLkhpPWZ1bmN0aW9uKHQpe09nbih0aGlzLGwodCw3NikpfSxoLk5qPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUwbih0aGlzLGwodCw3Niksbil9LGguT2o9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZDRlKHRoaXMsbCh0LDc2KSxuKX0saC5UaT1mdW5jdGlvbih0LG4pe3JldHVybiBQX24odGhpcyx0LG4pfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHhNbih0aGlzLHQsbChuLDc2KSl9LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWENuKHRoaXMsdCxsKG4sNzYpKX0saC5Vaj1mdW5jdGlvbih0LG4pe3JldHVybiB0MG4odGhpcyxsKHQsNzYpLG4pfSxoLlZqPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHVpdCh0aGlzLGwodCw3Niksbil9LGguV2o9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBROG4odGhpcyxsKHQsNzYpLGwobiw3Nikscil9LGguWmk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQXVlKHRoaXMsdCxsKG4sNzYpKX0saC5PbD1mdW5jdGlvbih0LG4pe3JldHVybiBma2UodGhpcyx0LG4pfSxoLmNkPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihDPW5ldyBMdyhuLmdjKCkpLG89bi5LYygpO28uT2IoKTspaWYoYT1sKG8uUGIoKSw3NiksZj1hLkxrKCksdXAodGhpcy5lLGYpKSghZi5TaSgpfHwhcUgodGhpcyxmLGEubWQoKSkmJiFqRShDLGEpKSYmcXIoQyxhKTtlbHNle2ZvcihMPVd1KHRoaXMuZS5EaCgpLGYpLHI9bCh0aGlzLmcsMTI0KSxnPSEwLHc9MDt3PHRoaXMuaTsrK3cpaWYoRT1yW3ddLEwuYW0oRS5MaygpKSl7bChuNih0aGlzLHcsYSksNzYpLGc9ITE7YnJlYWt9ZyYmcXIoQyxhKX1yZXR1cm4gTjdlKHRoaXMsdCxDKX0saC5HYz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7Zm9yKEU9bmV3IEx3KHQuZ2MoKSksYT10LktjKCk7YS5PYigpOylpZihyPWwoYS5QYigpLDc2KSxvPXIuTGsoKSx1cCh0aGlzLmUsbykpKCFvLlNpKCl8fCFxSCh0aGlzLG8sci5tZCgpKSYmIWpFKEUscikpJiZxcihFLHIpO2Vsc2V7Zm9yKEM9V3UodGhpcy5lLkRoKCksbyksbj1sKHRoaXMuZywxMjQpLGY9ITAsZz0wO2c8dGhpcy5pOysrZylpZih3PW5bZ10sQy5hbSh3LkxrKCkpKXtsKG42KHRoaXMsZyxyKSw3NiksZj0hMTticmVha31mJiZxcihFLHIpfXJldHVybiBBcyh0aGlzLEUpfSxoLkZpPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmo9LTEsbGxlKHRoaXMsdGhpcy5pLHQpfSxoLlBsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gaWtlKHRoaXMsdCxuLHIpfSxoLlhrPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGhQKHRoaXMsdCxuKX0saC5RbD1mdW5jdGlvbih0LG4scil7cmV0dXJuIE1rZSh0aGlzLHQsbixyKX0saC5SbD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoLlNsPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHBQKHRoaXMsdCxuKX0saC5UbD1mdW5jdGlvbih0KXtyZXR1cm4gbChPZSh0aGlzLHQpLDc2KS5MaygpfSxoLlVsPWZ1bmN0aW9uKHQpe3JldHVybiBsKE9lKHRoaXMsdCksNzYpLm1kKCl9LGguVmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLk1qPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguVGo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5XbD1mdW5jdGlvbih0KXtyZXR1cm4hRk4odGhpcyx0KX0saC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoUV90LFM1dCwzNDMsdCwwLDEpfSxoLnBsPWZ1bmN0aW9uKHQpe3JldHVybiBjYWUodGhpcyx0KX0saC5XYj1mdW5jdGlvbih0KXskTyh0aGlzLHQpfSxoLlhsPWZ1bmN0aW9uKHQsbil7SFUodGhpcyx0LG4pfSxoLllsPWZ1bmN0aW9uKHQpe3JldHVybiBvZnQodGhpcyx0KX0saC5abD1mdW5jdGlvbih0KXtqZHQodGhpcyx0KX0sSSh1cywiQmFzaWNGZWF0dXJlTWFwIiw3OCksRCgxOTYwLDEsbGcpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5SYj1mdW5jdGlvbih0KXtpZih0aGlzLmc9PS0xKXRocm93IHVlKG5ldyBwbCk7ZEgodGhpcyk7dHJ5e3ZidCh0aGlzLmUsdGhpcy5iLHRoaXMuYSx0KSx0aGlzLmQ9dGhpcy5lLmosaVUodGhpcyl9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT91ZShuZXcgWGgpOnVlKG4pfX0saC5PYj1mdW5jdGlvbigpe3JldHVybiBfY2UodGhpcyl9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4gTzB0KHRoaXMpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGlVKHRoaXMpfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5VYj1mdW5jdGlvbigpe3ZhciB0O2lmKE8wdCh0aGlzKSlyZXR1cm4gZEgodGhpcyksdGhpcy5nPS0tdGhpcy5hLHRoaXMudWwoKSYmKHQ9ekEodGhpcy5lLHRoaXMuYix0aGlzLmMsdGhpcy5hLHRoaXMuaiksdGhpcy5qPXQpLHRoaXMuaT0wLHRoaXMuajt0aHJvdyB1ZShuZXcgX2MpfSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS0xfSxoLlFiPWZ1bmN0aW9uKCl7aWYodGhpcy5nPT0tMSl0aHJvdyB1ZShuZXcgcGwpO2RIKHRoaXMpO3RyeXtocHQodGhpcy5lLHRoaXMuYix0aGlzLmcpLHRoaXMuZD10aGlzLmUuaix0aGlzLmc8dGhpcy5hJiYoLS10aGlzLmEsLS10aGlzLmMpLC0tdGhpcy5nfWNhdGNoKHQpe3Rocm93IHQ9YnModCksRGUodCw3Nyk/dWUobmV3IFhoKTp1ZSh0KX19LGgudWw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5XYj1mdW5jdGlvbih0KXtpZih0aGlzLmc9PS0xKXRocm93IHVlKG5ldyBwbCk7ZEgodGhpcyk7dHJ5e3FtdCh0aGlzLmUsdGhpcy5iLHRoaXMuZyx0KSx0aGlzLmQ9dGhpcy5lLmp9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT91ZShuZXcgWGgpOnVlKG4pfX0saC5hPTAsaC5jPTAsaC5kPTAsaC5mPSExLGguZz0wLGguaT0wLEkodXMsIkZlYXR1cmVNYXBVdGlsL0Jhc2ljRmVhdHVyZUVJdGVyYXRvciIsMTk2MCksRCg0MjAsMTk2MCxsZyxtRSksaC4kbD1mdW5jdGlvbigpe3ZhciB0LG4scjtmb3Iocj10aGlzLmUuaSx0PWwodGhpcy5lLmcsMTI0KTt0aGlzLmM8cjspe2lmKG49dFt0aGlzLmNdLHRoaXMuay5hbShuLkxrKCkpKXJldHVybiB0aGlzLmo9dGhpcy5mP246bi5tZCgpLHRoaXMuaT0yLCEwOysrdGhpcy5jfXJldHVybiB0aGlzLmk9MSx0aGlzLmc9LTEsITF9LGguX2w9ZnVuY3Rpb24oKXt2YXIgdCxuO2Zvcih0PWwodGhpcy5lLmcsMTI0KTstLXRoaXMuYz49MDspaWYobj10W3RoaXMuY10sdGhpcy5rLmFtKG4uTGsoKSkpcmV0dXJuIHRoaXMuaj10aGlzLmY/bjpuLm1kKCksdGhpcy5pPS0yLCEwO3JldHVybiB0aGlzLmk9LTEsdGhpcy5nPS0xLCExfSxJKHVzLCJCYXNpY0ZlYXR1cmVNYXAvRmVhdHVyZUVJdGVyYXRvciIsNDIwKSxEKDY3Niw0MjAsbGcsVXNlKSxoLnVsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkJhc2ljRmVhdHVyZU1hcC9SZXNvbHZpbmdGZWF0dXJlRUl0ZXJhdG9yIiw2NzYpLEQoOTY4LDQ5NixLRyxTbnQpLGgucGo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sSSh1cywiRUNvbnRlbnRzRUxpc3QvMSIsOTY4KSxEKDk2OSw0OTYsS0csWHR0KSxoLnVsPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkodXMsIkVDb250ZW50c0VMaXN0LzIiLDk2OSksRCg5NjcsMjg3LFdHLF9udCksaC53bD1mdW5jdGlvbih0KXt9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxJKHVzLCJFQ29udGVudHNFTGlzdC9GZWF0dXJlSXRlcmF0b3JJbXBsLzEiLDk2NyksRCg4NDAsNTkzLGtjLHl5ZSksaC5OaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0saC5Raj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguR2s9ZnVuY3Rpb24oKXt2YXIgdDskcih0aGlzKSxoaCh0aGlzLmUpPyh0PXRoaXMuYSx0aGlzLmE9ITEsTmkodGhpcy5lLG5ldyBoMCh0aGlzLmUsMix0aGlzLmMsdCwhMSkpKTp0aGlzLmE9ITF9LGguYT0hMSxJKHVzLCJFRGF0YVR5cGVFTGlzdC9VbnNldHRhYmxlIiw4NDApLEQoMTk1OCw1OTMsa2MsTm50KSxoLlNpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkVEYXRhVHlwZVVuaXF1ZUVMaXN0IiwxOTU4KSxEKDE5NTksODQwLGtjLFBudCksaC5TaT1mdW5jdGlvbigpe3JldHVybiEwfSxJKHVzLCJFRGF0YVR5cGVVbmlxdWVFTGlzdC9VbnNldHRhYmxlIiwxOTU5KSxEKDE0Nyw4MyxrYyxtbCksaC5ubD1mdW5jdGlvbigpe3JldHVybiEwfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEV4KHRoaXMsdCxsKG4sNTgpKX0sSSh1cywiRU9iamVjdENvbnRhaW5tZW50RUxpc3QvUmVzb2x2aW5nIiwxNDcpLEQoMTE4NCw1NTUsa2MsQm50KSxoLm5sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRXgodGhpcyx0LGwobiw1OCkpfSxJKHVzLCJFT2JqZWN0Q29udGFpbm1lbnRFTGlzdC9VbnNldHRhYmxlL1Jlc29sdmluZyIsMTE4NCksRCg3NjYsMTQsa2MsYTRlKSxoLk5pPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5Haz1mdW5jdGlvbigpe3ZhciB0OyRyKHRoaXMpLGhoKHRoaXMuZSk/KHQ9dGhpcy5hLHRoaXMuYT0hMSxOaSh0aGlzLmUsbmV3IGgwKHRoaXMuZSwyLHRoaXMuYyx0LCExKSkpOnRoaXMuYT0hMX0saC5hPSExLEkodXMsIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZSIsNzY2KSxEKDEyMjIsNzY2LGtjLFlydCksaC5ubD1mdW5jdGlvbigpe3JldHVybiEwfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEV4KHRoaXMsdCxsKG4sNTgpKX0sSSh1cywiRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VFTGlzdC9VbnNldHRhYmxlL1Jlc29sdmluZyIsMTIyMiksRCg3NTcsNTA1LGtjLHh5ZSksaC5OaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0saC5Raj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguR2s9ZnVuY3Rpb24oKXt2YXIgdDskcih0aGlzKSxoaCh0aGlzLmUpPyh0PXRoaXMuYSx0aGlzLmE9ITEsTmkodGhpcy5lLG5ldyBoMCh0aGlzLmUsMix0aGlzLmMsdCwhMSkpKTp0aGlzLmE9ITF9LGguYT0hMSxJKHVzLCJFT2JqZWN0RUxpc3QvVW5zZXR0YWJsZSIsNzU3KSxEKDMzOCw1MDUsa2MsJDUpLGgubmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5XaT1mdW5jdGlvbih0LG4pe3JldHVybiBFeCh0aGlzLHQsbChuLDU4KSl9LEkodXMsIkVPYmplY3RSZXNvbHZpbmdFTGlzdCIsMzM4KSxEKDE4NDQsNzU3LGtjLEZudCksaC5ubD1mdW5jdGlvbigpe3JldHVybiEwfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEV4KHRoaXMsdCxsKG4sNTgpKX0sSSh1cywiRU9iamVjdFJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUiLDE4NDQpLEQoMTUyNywxLHt9LGJyZSk7dmFyIFpfdDtJKHVzLCJFT2JqZWN0VmFsaWRhdG9yIiwxNTI3KSxEKDU1OSw1MDUsa2MscEgpLGguaWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLmpsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5Naj1mdW5jdGlvbigpe3JldHVybiEwfSxoLm1sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguYj0wLEkodXMsIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0Iiw1NTkpLEQoMTIyNSw1NTksa2MsWHJ0KSxoLmxsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0L01hbnlJbnZlcnNlIiwxMjI1KSxEKDYzNSw1NTksa2MsZmFlKSxoLk5pPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5Haz1mdW5jdGlvbigpe3ZhciB0OyRyKHRoaXMpLGhoKHRoaXMuZSk/KHQ9dGhpcy5hLHRoaXMuYT0hMSxOaSh0aGlzLmUsbmV3IGgwKHRoaXMuZSwyLHRoaXMuYyx0LCExKSkpOnRoaXMuYT0hMX0saC5hPSExLEkodXMsIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0L1Vuc2V0dGFibGUiLDYzNSksRCgxMjI0LDYzNSxrYyxRcnQpLGgubGw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSSh1cywiRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZS9NYW55SW52ZXJzZSIsMTIyNCksRCg3NjcsNTU5LGtjLG80ZSksaC5ubD1mdW5jdGlvbigpe3JldHVybiEwfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEV4KHRoaXMsdCxsKG4sNTgpKX0sSSh1cywiRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QiLDc2NyksRCgzMiw3Njcsa2MsTG4pLGgubGw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSSh1cywiRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QvTWFueUludmVyc2UiLDMyKSxEKDc2OCw2MzUsa2MsYzRlKSxoLm5sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRXgodGhpcyx0LGwobiw1OCkpfSxJKHVzLCJFT2JqZWN0V2l0aEludmVyc2VSZXNvbHZpbmdFTGlzdC9VbnNldHRhYmxlIiw3NjgpLEQoMTIyMyw3Njgsa2MsSnJ0KSxoLmxsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkVPYmplY3RXaXRoSW52ZXJzZVJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUvTWFueUludmVyc2UiLDEyMjMpLEQoMTE4NSw2MzIsa2MpLGguTGk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjE3OTIpPT0wfSxoLk5pPWZ1bmN0aW9uKCl7dGhpcy5ifD0xfSxoLmtsPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiY0KSE9MH0saC5Naj1mdW5jdGlvbigpe3JldHVybih0aGlzLmImNDApIT0wfSxoLmxsPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYxNikhPTB9LGgubWw9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjgpIT0wfSxoLm5sPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiZyNCkhPTB9LGguYWw9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjMyKSE9MH0saC5vbD1mdW5jdGlvbigpe3JldHVybih0aGlzLmImbTApIT0wfSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmQ/UmN0KHRoaXMuZCx0KTp0aGlzLkxrKCkuSGsoKS5mayh0KX0saC5Raj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmImMj8odGhpcy5iJjEpIT0wOnRoaXMuaSE9MH0saC5TaT1mdW5jdGlvbigpe3JldHVybih0aGlzLmImMTI4KSE9MH0saC5Haz1mdW5jdGlvbigpe3ZhciB0OyRyKHRoaXMpLHRoaXMuYiYyJiYoaGgodGhpcy5lKT8odD0odGhpcy5iJjEpIT0wLHRoaXMuYiY9LTIseGsodGhpcyxuZXcgaDAodGhpcy5lLDIsbXModGhpcy5lLkRoKCksdGhpcy5MaygpKSx0LCExKSkpOnRoaXMuYiY9LTIpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYxNTM2KT09MH0saC5iPTAsSSh1cywiRWNvcmVFTGlzdC9HZW5lcmljIiwxMTg1KSxEKDExODYsMTE4NSxrYyxWYXQpLGguTGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxJKHVzLCJFY29yZUVMaXN0L0R5bmFtaWMiLDExODYpLEQoNzY1LDY2LEJkLGt3ZSksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gYk4odGhpcy5hLmEsdCl9LEkodXMsIkVjb3JlRU1hcC8xIiw3NjUpLEQoNzY0LDgzLGtjLGE1ZSksaC5NaT1mdW5jdGlvbih0LG4pe29VKHRoaXMuYixsKG4sMTM2KSl9LGguT2k9ZnVuY3Rpb24odCxuKXt6ZnQodGhpcy5iKX0saC5QaT1mdW5jdGlvbih0LG4scil7dmFyIGE7KysoYT10aGlzLmIsbChuLDEzNiksYSkuZX0saC5RaT1mdW5jdGlvbih0LG4pe0ZjZSh0aGlzLmIsbChuLDEzNikpfSxoLlJpPWZ1bmN0aW9uKHQsbixyKXtGY2UodGhpcy5iLGwociwxMzYpKSxxZShyKT09PXFlKG4pJiZsKHIsMTM2KS5DaShKbG4obChuLDEzNikubGQoKSkpLG9VKHRoaXMuYixsKG4sMTM2KSl9LEkodXMsIkVjb3JlRU1hcC9EZWxlZ2F0ZUVPYmplY3RDb250YWlubWVudEVMaXN0Iiw3NjQpLEQoMTIyMCwxNDEsQVNlLGlmdCksSSh1cywiRWNvcmVFTWFwL1Vuc2V0dGFibGUiLDEyMjApLEQoMTIyMSw3NjQsa2MsWnJ0KSxoLk5pPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5Haz1mdW5jdGlvbigpe3ZhciB0OyRyKHRoaXMpLGhoKHRoaXMuZSk/KHQ9dGhpcy5hLHRoaXMuYT0hMSxOaSh0aGlzLmUsbmV3IGgwKHRoaXMuZSwyLHRoaXMuYyx0LCExKSkpOnRoaXMuYT0hMX0saC5hPSExLEkodXMsIkVjb3JlRU1hcC9VbnNldHRhYmxlL1Vuc2V0dGFibGVEZWxlZ2F0ZUVPYmplY3RDb250YWlubWVudEVMaXN0IiwxMjIxKSxEKDExODksMjE1LG02LFVzdCksaC5hPSExLGguYj0hMSxJKHVzLCJFY29yZVV0aWwvQ29waWVyIiwxMTg5KSxEKDc1OSwxLE9hLExjdCksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEYxdCh0aGlzKX0saC5QYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBGMXQodGhpcyksdD10aGlzLmIsdGhpcy5iPW51bGwsdH0saC5RYj1mdW5jdGlvbigpe3RoaXMuYS5RYigpfSxJKHVzLCJFY29yZVV0aWwvUHJvcGVyQ29udGVudEl0ZXJhdG9yIiw3NTkpLEQoMTUyOCwxNTI3LHt9LGR6KTt2YXIgZUF0O0kodXMsIkVjb3JlVmFsaWRhdG9yIiwxNTI4KTt2YXIgdEF0O2tzKHVzLCJGZWF0dXJlTWFwVXRpbC9WYWxpZGF0b3IiKSxEKDEyOTUsMSx7MjA0MToxfSx2NSksaC5hbT1mdW5jdGlvbih0KXtyZXR1cm4hMH0sSSh1cywiRmVhdHVyZU1hcFV0aWwvMSIsMTI5NSksRCg3NzMsMSx7MjA0MToxfSxxa2UpLGguYW09ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHRoaXMuYz09dD8hMDoobj1CdChjcih0aGlzLmEsdCkpLG49PW51bGw/UVNuKHRoaXMsdCk/KEx1dCh0aGlzLmEsdCwoSG4oKSxTVCkpLCEwKTooTHV0KHRoaXMuYSx0LChIbigpLFBiKSksITEpOm49PShIbigpLFNUKSl9LGguZT0hMTt2YXIgc3BlO0kodXMsIkZlYXR1cmVNYXBVdGlsL0Jhc2ljVmFsaWRhdG9yIiw3NzMpLEQoNzc0LDQ1LG02LHZ5ZSksSSh1cywiRmVhdHVyZU1hcFV0aWwvQmFzaWNWYWxpZGF0b3IvQ2FjaGUiLDc3NCksRCg1MDksNTYsezIwOjEsMzE6MSw1NjoxLDE2OjEsMTU6MSw2MToxLDc5OjEsNzE6MSw5NzoxfSx5TyksaC5iZD1mdW5jdGlvbih0LG4pe3ZidCh0aGlzLmMsdGhpcy5iLHQsbil9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIGZrZSh0aGlzLmMsdGhpcy5iLHQpfSxoLmNkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHZMbih0aGlzLmMsdGhpcy5iLHQsbil9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIEZfKHRoaXMsdCl9LGguR2k9ZnVuY3Rpb24odCxuKXtkd24odGhpcy5jLHRoaXMuYix0LG4pfSxoLldrPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGlrZSh0aGlzLmMsdGhpcy5iLHQsbil9LGguJGk9ZnVuY3Rpb24odCl7cmV0dXJuIHFVKHRoaXMuYyx0aGlzLmIsdCwhMSl9LGguSWk9ZnVuY3Rpb24oKXtyZXR1cm4gY250KHRoaXMuYyx0aGlzLmIpfSxoLkppPWZ1bmN0aW9uKCl7cmV0dXJuIGpsbih0aGlzLmMsdGhpcy5iKX0saC5LaT1mdW5jdGlvbih0KXtyZXR1cm4gdnZuKHRoaXMuYyx0aGlzLmIsdCl9LGguWGs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gSXJ0KHRoaXMsdCxuKX0saC4kYj1mdW5jdGlvbigpe184KHRoaXMpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBxSCh0aGlzLmMsdGhpcy5iLHQpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiBtM24odGhpcy5jLHRoaXMuYix0KX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gcVUodGhpcy5jLHRoaXMuYix0LCEwKX0saC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpc30saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gQ21uKHRoaXMuYyx0aGlzLmIsdCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gX3EodGhpcyl9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4hRk4odGhpcy5jLHRoaXMuYil9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gcnduKHRoaXMuYyx0aGlzLmIpfSxoLmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGl3bih0aGlzLmMsdGhpcy5iKX0saC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gUDRuKHRoaXMuYyx0aGlzLmIsdCl9LGguVGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gT210KHRoaXMuYyx0aGlzLmIsdCxuKX0saC5VaT1mdW5jdGlvbih0LG4pe3h2bih0aGlzLmMsdGhpcy5iLHQsbil9LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIGhwdCh0aGlzLmMsdGhpcy5iLHQpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiB5X24odGhpcy5jLHRoaXMuYix0KX0saC5oZD1mdW5jdGlvbih0LG4pe3JldHVybiBxbXQodGhpcy5jLHRoaXMuYix0LG4pfSxoLldiPWZ1bmN0aW9uKHQpe0VVKHRoaXMuYyx0aGlzLmIpLEZfKHRoaXMsbCh0LDE1KSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gTjRuKHRoaXMuYyx0aGlzLmIpfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIF9ibih0aGlzLmMsdGhpcy5iKX0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gU21uKHRoaXMuYyx0aGlzLmIsdCl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuO2ZvcihuPW5ldyBVcCxuLmErPSJbIix0PWNudCh0aGlzLmMsdGhpcy5iKTtfY2UodCk7KVhvKG4sal8oaVUodCkpKSxfY2UodCkmJihuLmErPUNvKTtyZXR1cm4gbi5hKz0iXSIsbi5hfSxoLkdrPWZ1bmN0aW9uKCl7RVUodGhpcy5jLHRoaXMuYil9LEkodXMsIkZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVFTGlzdCIsNTA5KSxEKDY0NCwzOSxZUCxFb2UpLGguaGo9ZnVuY3Rpb24odCl7cmV0dXJuIFNBKHRoaXMsdCl9LGgubWo9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHc7c3dpdGNoKHRoaXMuZCl7Y2FzZSAxOmNhc2UgMjp7aWYoZj10LmpqKCkscWUoZik9PT1xZSh0aGlzLmMpJiZTQSh0aGlzLG51bGwpPT10LmhqKG51bGwpKXJldHVybiB0aGlzLmc9dC5paigpLHQuZ2ooKT09MSYmKHRoaXMuZD0xKSwhMDticmVha31jYXNlIDM6e3N3aXRjaChvPXQuZ2ooKSxvKXtjYXNlIDM6e2lmKGY9dC5qaigpLHFlKGYpPT09cWUodGhpcy5jKSYmU0EodGhpcyxudWxsKT09dC5oaihudWxsKSlyZXR1cm4gdGhpcy5kPTUsbj1uZXcgTHcoMikscXIobix0aGlzLmcpLHFyKG4sdC5paigpKSx0aGlzLmc9biwhMDticmVha319YnJlYWt9Y2FzZSA1Ontzd2l0Y2gobz10LmdqKCksbyl7Y2FzZSAzOntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuYykmJlNBKHRoaXMsbnVsbCk9PXQuaGoobnVsbCkpcmV0dXJuIHI9bCh0aGlzLmcsMTYpLHIuRmModC5paigpKSwhMDticmVha319YnJlYWt9Y2FzZSA0Ontzd2l0Y2gobz10LmdqKCksbyl7Y2FzZSAzOntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuYykmJlNBKHRoaXMsbnVsbCk9PXQuaGoobnVsbCkpcmV0dXJuIHRoaXMuZD0xLHRoaXMuZz10LmlqKCksITA7YnJlYWt9Y2FzZSA0OntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuYykmJlNBKHRoaXMsbnVsbCk9PXQuaGoobnVsbCkpcmV0dXJuIHRoaXMuZD02LHc9bmV3IEx3KDIpLHFyKHcsdGhpcy5uKSxxcih3LHQua2ooKSksdGhpcy5uPXcsZz1oZShsZShWciwxKSxkaSwyOCwxNSxbdGhpcy5vLHQubGooKV0pLHRoaXMuZz1nLCEwO2JyZWFrfX1icmVha31jYXNlIDY6e3N3aXRjaChvPXQuZ2ooKSxvKXtjYXNlIDQ6e2lmKGY9dC5qaigpLHFlKGYpPT09cWUodGhpcy5jKSYmU0EodGhpcyxudWxsKT09dC5oaihudWxsKSlyZXR1cm4gcj1sKHRoaXMubiwxNiksci5GYyh0LmtqKCkpLGc9bCh0aGlzLmcsNTMpLGE9V2UoVnIsZGksMjgsZy5sZW5ndGgrMSwxNSwxKSxwdShnLDAsYSwwLGcubGVuZ3RoKSxhW2cubGVuZ3RoXT10LmxqKCksdGhpcy5nPWEsITA7YnJlYWt9fWJyZWFrfX1yZXR1cm4hMX0sSSh1cywiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZUVOb3RpZmljYXRpb25JbXBsIiw2NDQpLEQoNTY0LDUwOSx7MjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDYxOjEsNzk6MSwxNjA6MSwyMjA6MSwyMDM2OjEsNzE6MSw5NzoxfSxuSCksaC5PbD1mdW5jdGlvbih0LG4pe3JldHVybiBma2UodGhpcy5jLHQsbil9LGguUGw9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBpa2UodGhpcy5jLHQsbixyKX0saC5RbD1mdW5jdGlvbih0LG4scil7cmV0dXJuIE1rZSh0aGlzLmMsdCxuLHIpfSxoLlJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGguU2w9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcFAodGhpcy5jLHQsbil9LGguVGw9ZnVuY3Rpb24odCl7cmV0dXJuIGwocVUodGhpcy5jLHRoaXMuYix0LCExKSw3NikuTGsoKX0saC5VbD1mdW5jdGlvbih0KXtyZXR1cm4gbChxVSh0aGlzLmMsdGhpcy5iLHQsITEpLDc2KS5tZCgpfSxoLlZsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5XbD1mdW5jdGlvbih0KXtyZXR1cm4hRk4odGhpcy5jLHQpfSxoLlhsPWZ1bmN0aW9uKHQsbil7SFUodGhpcy5jLHQsbil9LGguWWw9ZnVuY3Rpb24odCl7cmV0dXJuIG9mdCh0aGlzLmMsdCl9LGguWmw9ZnVuY3Rpb24odCl7amR0KHRoaXMuYyx0KX0sSSh1cywiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZUZlYXR1cmVNYXAiLDU2NCksRCgxMjk0LDEsaTBlLFB0dCksaC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gcVUodGhpcy5iLHRoaXMuYSwtMSx0KX0saC5Raj1mdW5jdGlvbigpe3JldHVybiFGTih0aGlzLmIsdGhpcy5hKX0saC5XYj1mdW5jdGlvbih0KXtIVSh0aGlzLmIsdGhpcy5hLHQpfSxoLkdrPWZ1bmN0aW9uKCl7RVUodGhpcy5iLHRoaXMuYSl9LEkodXMsIkZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVWYWx1ZSIsMTI5NCk7dmFyIGM5LGFwZSxvcGUsdTksbkF0LGdGPWtzKG5LLCJBbnlUeXBlIik7RCg2ODAsNjMsbHAsSmllKSxJKG5LLCJJbnZhbGlkRGF0YXR5cGVWYWx1ZUV4Y2VwdGlvbiIsNjgwKTt2YXIgQVk9a3MobkssTTV0KSxwRj1rcyhuSyxENXQpLFZQZT1rcyhuSyxJNXQpLHJBdCx0dSxVUGUsU3YsaUF0LHNBdCxhQXQsb0F0LGNBdCx1QXQsbEF0LGhBdCxmQXQsZEF0LGdBdCxjNyxwQXQsdTcsSE0sYkF0LEMzLGJGLG1GLG1BdCxWTSxVTTtEKDg0NCw1MTYsezExMDoxLDk0OjEsOTM6MSw1ODoxLDU0OjEsOTk6MSw4NTc6MX0sendlKSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSx0aGlzLmMpOighdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSx0aGlzLmMuYik7Y2FzZSAxOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxsKGt1KHRoaXMuYywoR2koKSxTdikpLDE2MCkpOighdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxsKGwoa3UodGhpcy5jLChHaSgpLFN2KSksMTYwKSwyMjApKS5WbCgpO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksdGhpcy5iLmIpfXJldHVybiBzZih0aGlzLHQteXIodGhpcy5paSgpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp0aGlzLmlpKCksdCksbixyKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxoUCh0aGlzLmMsdCxyKTtjYXNlIDE6cmV0dXJuKCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwobChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApLDcxKSkuWGsodCxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksaFAodGhpcy5iLHQscil9cmV0dXJuIGE9bChNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp0aGlzLmlpKCksbiksNjkpLGEud2soKS5Bayh0aGlzLFY2ZSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDE6cmV0dXJuISghdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxsKGt1KHRoaXMuYywoR2koKSxTdikpLDE2MCkpLmRjKCk7Y2FzZSAyOnJldHVybiEhdGhpcy5iJiZ0aGlzLmIuaSE9MH1yZXR1cm4gbmYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6dGhpcy5paSgpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgTHModGhpcywwKSksJE8odGhpcy5jLG4pO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwobChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApLDIyMCkpLldiKG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksJE8odGhpcy5iLG4pO3JldHVybn11Zih0aGlzLHQteXIodGhpcy5paSgpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp0aGlzLmlpKCksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gR2koKSxVUGV9LGgua2k9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSwkcih0aGlzLmMpO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwoa3UodGhpcy5jLChHaSgpLFN2KSksMTYwKSkuJGIoKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IExzKHRoaXMsMikpLCRyKHRoaXMuYik7cmV0dXJufWNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOnRoaXMuaWkoKSx0KSl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5qJjQ/ZzAodGhpcyk6KHQ9bmV3IEFmKGcwKHRoaXMpKSx0LmErPSIgKG1peGVkOiAiLE9fKHQsdGhpcy5jKSx0LmErPSIsIGFueUF0dHJpYnV0ZTogIixPXyh0LHRoaXMuYiksdC5hKz0iKSIsdC5hKX0sSShlYSwiQW55VHlwZUltcGwiLDg0NCksRCg2ODEsNTE2LHsxMTA6MSw5NDoxLDkzOjEsNTg6MSw1NDoxLDk5OjEsMjExOToxLDY4MToxfSx5cmUpLGguTGg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYTtjYXNlIDE6cmV0dXJuIHRoaXMuYn1yZXR1cm4gc2YodGhpcyx0LXlyKChHaSgpLGM3KSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6YzcsdCksbixyKX0saC5XaD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLmEhPW51bGw7Y2FzZSAxOnJldHVybiB0aGlzLmIhPW51bGx9cmV0dXJuIG5mKHRoaXMsdC15cigoR2koKSxjNykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOmM3LHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0KXtjYXNlIDA6dnIodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMTpwcih0aGlzLGVpKG4pKTtyZXR1cm59dWYodGhpcyx0LXlyKChHaSgpLGM3KSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6YzcsdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gR2koKSxjN30saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMuYT1udWxsO3JldHVybjtjYXNlIDE6dGhpcy5iPW51bGw7cmV0dXJufWNmKHRoaXMsdC15cigoR2koKSxjNykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOmM3LHQpKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmomND9nMCh0aGlzKToodD1uZXcgQWYoZzAodGhpcykpLHQuYSs9IiAoZGF0YTogIixYbyh0LHRoaXMuYSksdC5hKz0iLCB0YXJnZXQ6ICIsWG8odCx0aGlzLmIpLHQuYSs9IikiLHQuYSl9LGguYT1udWxsLGguYj1udWxsLEkoZWEsIlByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwiLDY4MSksRCg2ODIsODQ0LHsxMTA6MSw5NDoxLDkzOjEsNTg6MSw1NDoxLDk5OjEsODU3OjEsMjEyMDoxLDY4MjoxfSxmSmUpLGguTGg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLHRoaXMuYyk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLHRoaXMuYy5iKTtjYXNlIDE6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwoa3UodGhpcy5jLChHaSgpLFN2KSksMTYwKSk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwobChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApLDIyMCkpLlZsKCk7Y2FzZSAyOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBMcyh0aGlzLDIpKSx0aGlzLmIpOighdGhpcy5iJiYodGhpcy5iPW5ldyBMcyh0aGlzLDIpKSx0aGlzLmIuYik7Y2FzZSAzOnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGVpKHBQKHRoaXMuYywoR2koKSxITSksITApKTtjYXNlIDQ6cmV0dXJuIGw0ZSh0aGlzLmEsKCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGVpKHBQKHRoaXMuYywoR2koKSxITSksITApKSkpO2Nhc2UgNTpyZXR1cm4gdGhpcy5hfXJldHVybiBzZih0aGlzLHQteXIoKEdpKCksdTcpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp1Nyx0KSxuLHIpfSxoLldoPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTpyZXR1cm4hKCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwoa3UodGhpcy5jLChHaSgpLFN2KSksMTYwKSkuZGMoKTtjYXNlIDI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgMzpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxlaShwUCh0aGlzLmMsKEdpKCksSE0pLCEwKSkhPW51bGw7Y2FzZSA0OnJldHVybiBsNGUodGhpcy5hLCghdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxlaShwUCh0aGlzLmMsKEdpKCksSE0pLCEwKSkpKSE9bnVsbDtjYXNlIDU6cmV0dXJuISF0aGlzLmF9cmV0dXJuIG5mKHRoaXMsdC15cigoR2koKSx1NykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOnU3LHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgTHModGhpcywwKSksJE8odGhpcy5jLG4pO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwobChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApLDIyMCkpLldiKG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksJE8odGhpcy5iLG4pO3JldHVybjtjYXNlIDM6SjVlKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDQ6SjVlKHRoaXMsdTRlKHRoaXMuYSxuKSk7cmV0dXJuO2Nhc2UgNTpObih0aGlzLGwobiwxNTYpKTtyZXR1cm59dWYodGhpcyx0LXlyKChHaSgpLHU3KSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6dTcsdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gR2koKSx1N30saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLCRyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgTHModGhpcywwKSksbChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApKS4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksJHIodGhpcy5iKTtyZXR1cm47Y2FzZSAzOiF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLEhVKHRoaXMuYywoR2koKSxITSksbnVsbCk7cmV0dXJuO2Nhc2UgNDpKNWUodGhpcyx1NGUodGhpcy5hLG51bGwpKTtyZXR1cm47Y2FzZSA1OnRoaXMuYT1udWxsO3JldHVybn1jZih0aGlzLHQteXIoKEdpKCksdTcpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp1Nyx0KSl9LEkoZWEsIlNpbXBsZUFueVR5cGVJbXBsIiw2ODIpLEQoNjgzLDUxNix7MTEwOjEsOTQ6MSw5MzoxLDU4OjEsNTQ6MSw5OToxLDIxMjE6MSw2ODM6MX0sZEplKSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiByPyghdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSx0aGlzLmEpOighdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSx0aGlzLmEuYik7Y2FzZSAxOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyB4bCgoVG4oKSxObyksWWMsdGhpcywxKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMSkpLGlOKHRoaXMuYikpO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYyYmKHRoaXMuYz1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMikpLHRoaXMuYyk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHhsKChUbigpLE5vKSxZYyx0aGlzLDIpKSxpTih0aGlzLmMpKTtjYXNlIDM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksa3UodGhpcy5hLChHaSgpLGJGKSk7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IExzKHRoaXMsMCkpLGt1KHRoaXMuYSwoR2koKSxtRikpO2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxrdSh0aGlzLmEsKEdpKCksVk0pKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksa3UodGhpcy5hLChHaSgpLFVNKSl9cmV0dXJuIHNmKHRoaXMsdC15cigoR2koKSxDMykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOkMzLHQpLG4scil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksaFAodGhpcy5hLHQscik7Y2FzZSAxOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IHhsKChUbigpLE5vKSxZYyx0aGlzLDEpKSxVcSh0aGlzLmIsdCxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMikpLFVxKHRoaXMuYyx0LHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxJcnQoa3UodGhpcy5hLChHaSgpLFZNKSksdCxyKX1yZXR1cm4gYT1sKE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOihHaSgpLEMzKSxuKSw2OSksYS53aygpLkFrKHRoaXMsVjZlKHRoaXMpLG4teXIoKEdpKCksQzMpKSx0LHIpfSxoLldoPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgMTpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmYhPTA7Y2FzZSAyOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuZiE9MDtjYXNlIDM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksIV9xKGt1KHRoaXMuYSwoR2koKSxiRikpKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksIV9xKGt1KHRoaXMuYSwoR2koKSxtRikpKTtjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksIV9xKGt1KHRoaXMuYSwoR2koKSxWTSkpKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksIV9xKGt1KHRoaXMuYSwoR2koKSxVTSkpKX1yZXR1cm4gbmYodGhpcyx0LXlyKChHaSgpLEMzKSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6QzMsdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSwkTyh0aGlzLmEsbik7cmV0dXJuO2Nhc2UgMTohdGhpcy5iJiYodGhpcy5iPW5ldyB4bCgoVG4oKSxObyksWWMsdGhpcywxKSksX1YodGhpcy5iLG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMikpLF9WKHRoaXMuYyxuKTtyZXR1cm47Y2FzZSAzOiF0aGlzLmEmJih0aGlzLmE9bmV3IExzKHRoaXMsMCkpLF84KGt1KHRoaXMuYSwoR2koKSxiRikpKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxGXyhrdSh0aGlzLmEsYkYpLGwobiwxNikpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksXzgoa3UodGhpcy5hLChHaSgpLG1GKSkpLCF0aGlzLmEmJih0aGlzLmE9bmV3IExzKHRoaXMsMCkpLEZfKGt1KHRoaXMuYSxtRiksbChuLDE2KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksVk0pKSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksRl8oa3UodGhpcy5hLFZNKSxsKG4sMTYpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLmEmJih0aGlzLmE9bmV3IExzKHRoaXMsMCkpLF84KGt1KHRoaXMuYSwoR2koKSxVTSkpKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxGXyhrdSh0aGlzLmEsVU0pLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKEdpKCksQzMpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTpDMyx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBHaSgpLEMzfSxoLmtpPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksJHIodGhpcy5hKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmImJih0aGlzLmI9bmV3IHhsKChUbigpLE5vKSxZYyx0aGlzLDEpKSx0aGlzLmIuYy4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMikpLHRoaXMuYy5jLiRiKCk7cmV0dXJuO2Nhc2UgMzohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksYkYpKSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksbUYpKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksVk0pKSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksVU0pKSk7cmV0dXJufWNmKHRoaXMsdC15cigoR2koKSxDMykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOkMzLHQpKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmomND9nMCh0aGlzKToodD1uZXcgQWYoZzAodGhpcykpLHQuYSs9IiAobWl4ZWQ6ICIsT18odCx0aGlzLmEpLHQuYSs9IikiLHQuYSl9LEkoZWEsIlhNTFR5cGVEb2N1bWVudFJvb3RJbXBsIiw2ODMpLEQoMjAyOCw3MjAsezExMDoxLDk0OjEsOTM6MSw0ODA6MSwxNTU6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxNTg6MSwxMTk6MSwxMjA6MSwyMTIyOjF9LHVrKSxoLnJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQuaGsoKSl7Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDE2OmNhc2UgMjI6Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjU6Y2FzZSAyNjpjYXNlIDMyOmNhc2UgMzM6Y2FzZSAzNDpjYXNlIDM2OmNhc2UgMzc6Y2FzZSA0NDpjYXNlIDQ1OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUzOmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OmNhc2UgNTg6Y2FzZSA2MDpjYXNlIDYxOmNhc2UgNDpyZXR1cm4gbj09bnVsbD9udWxsOnhjKG4pO2Nhc2UgMTk6Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzU6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDE6Y2FzZSA0NjpjYXNlIDUyOmNhc2UgNTQ6Y2FzZSA1OnJldHVybiBlaShuKTtjYXNlIDY6cmV0dXJuIGhmbihsKG4sMTk1KSk7Y2FzZSAxMjpjYXNlIDQ3OmNhc2UgNDk6Y2FzZSAxMTpyZXR1cm4gTHZ0KHRoaXMsdCxuKTtjYXNlIDEzOnJldHVybiBuPT1udWxsP251bGw6a0xuKGwobiwyNDcpKTtjYXNlIDE1OmNhc2UgMTQ6cmV0dXJuIG49PW51bGw/bnVsbDpfZ24oemUoR2UobikpKTtjYXNlIDE3OnJldHVybiBTZ3QoKEdpKCksbikpO2Nhc2UgMTg6cmV0dXJuIFNndChuKTtjYXNlIDIxOmNhc2UgMjA6cmV0dXJuIG49PW51bGw/bnVsbDpBZ24obChuLDE2MSkuYSk7Y2FzZSAyNzpyZXR1cm4gZmZuKGwobiwxOTUpKTtjYXNlIDMwOnJldHVybiAkZHQoKEdpKCksbChuLDE1KSkpO2Nhc2UgMzE6cmV0dXJuICRkdChsKG4sMTUpKTtjYXNlIDQwOnJldHVybiBnZm4oKEdpKCksbikpO2Nhc2UgNDI6cmV0dXJuIF9ndCgoR2koKSxuKSk7Y2FzZSA0MzpyZXR1cm4gX2d0KG4pO2Nhc2UgNTk6Y2FzZSA0ODpyZXR1cm4gZGZuKChHaSgpLG4pKTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbih5VCt0LnhlKCkrdDMpKX19LGguc2k9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZjtzd2l0Y2godC5HPT0tMSYmKHQuRz0ocj1BaCh0KSxyP2YyKHIudmkoKSx0KTotMSkpLHQuRyl7Y2FzZSAwOnJldHVybiBuPW5ldyB6d2UsbjtjYXNlIDE6cmV0dXJuIGE9bmV3IHlyZSxhO2Nhc2UgMjpyZXR1cm4gbz1uZXcgZkplLG87Y2FzZSAzOnJldHVybiBmPW5ldyBkSmUsZjtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihxZmUrdC56Yit0MykpfX0saC50aT1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO3N3aXRjaCh0LmhrKCkpe2Nhc2UgNTpjYXNlIDUyOmNhc2UgNDpyZXR1cm4gbjtjYXNlIDY6cmV0dXJuIHk2bihuKTtjYXNlIDg6Y2FzZSA3OnJldHVybiBuPT1udWxsP251bGw6YXhuKG4pO2Nhc2UgOTpyZXR1cm4gbj09bnVsbD9udWxsOmZOKE9oKChhPVR1KG4sITApLGEubGVuZ3RoPjAmJihYbigwLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSxhLmxlbmd0aCsxKSxhLnN1YnN0cigxKSk6YSksLTEyOCwxMjcpPDwyND4+MjQpO2Nhc2UgMTA6cmV0dXJuIG49PW51bGw/bnVsbDpmTihPaCgobz1UdShuLCEwKSxvLmxlbmd0aD4wJiYoWG4oMCxvLmxlbmd0aCksby5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsby5sZW5ndGgrMSksby5zdWJzdHIoMSkpOm8pLC0xMjgsMTI3KTw8MjQ+PjI0KTtjYXNlIDExOnJldHVybiBlaShLdyh0aGlzLChHaSgpLGFBdCksbikpO2Nhc2UgMTI6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksb0F0KSxuKSk7Y2FzZSAxMzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBoM2UoVHUobiwhMCkpO2Nhc2UgMTU6Y2FzZSAxNDpyZXR1cm4gTFRuKG4pO2Nhc2UgMTY6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksY0F0KSxuKSk7Y2FzZSAxNzpyZXR1cm4gcTF0KChHaSgpLG4pKTtjYXNlIDE4OnJldHVybiBxMXQobik7Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzU6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDE6Y2FzZSA1NDpjYXNlIDE5OnJldHVybiBUdShuLCEwKTtjYXNlIDIxOmNhc2UgMjA6cmV0dXJuIGpUbihuKTtjYXNlIDIyOnJldHVybiBlaShLdyh0aGlzLChHaSgpLHVBdCksbikpO2Nhc2UgMjM6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksbEF0KSxuKSk7Y2FzZSAyNDpyZXR1cm4gZWkoS3codGhpcywoR2koKSxoQXQpLG4pKTtjYXNlIDI1OnJldHVybiBlaShLdyh0aGlzLChHaSgpLGZBdCksbikpO2Nhc2UgMjY6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksZEF0KSxuKSk7Y2FzZSAyNzpyZXR1cm4gYzZuKG4pO2Nhc2UgMzA6cmV0dXJuIEgxdCgoR2koKSxuKSk7Y2FzZSAzMTpyZXR1cm4gSDF0KG4pO2Nhc2UgMzI6cmV0dXJuIG49PW51bGw/bnVsbDpwdChPaCgoTD1UdShuLCEwKSxMLmxlbmd0aD4wJiYoWG4oMCxMLmxlbmd0aCksTC5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsTC5sZW5ndGgrMSksTC5zdWJzdHIoMSkpOkwpLGxvLElpKSk7Y2FzZSAzMzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBvYigoQj1UdShuLCEwKSxCLmxlbmd0aD4wJiYoWG4oMCxCLmxlbmd0aCksQi5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsQi5sZW5ndGgrMSksQi5zdWJzdHIoMSkpOkIpKTtjYXNlIDM0OnJldHVybiBuPT1udWxsP251bGw6cHQoT2goKHo9VHUobiwhMCksei5sZW5ndGg+MCYmKFhuKDAsei5sZW5ndGgpLHouY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLHoubGVuZ3RoKzEpLHouc3Vic3RyKDEpKTp6KSxsbyxJaSkpO2Nhc2UgMzY6cmV0dXJuIG49PW51bGw/bnVsbDphcChLVSgoVj1UdShuLCEwKSxWLmxlbmd0aD4wJiYoWG4oMCxWLmxlbmd0aCksVi5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsVi5sZW5ndGgrMSksVi5zdWJzdHIoMSkpOlYpKSk7Y2FzZSAzNzpyZXR1cm4gbj09bnVsbD9udWxsOmFwKEtVKChKPVR1KG4sITApLEoubGVuZ3RoPjAmJihYbigwLEoubGVuZ3RoKSxKLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSxKLmxlbmd0aCsxKSxKLnN1YnN0cigxKSk6SikpKTtjYXNlIDQwOnJldHVybiBzN24oKEdpKCksbikpO2Nhc2UgNDI6cmV0dXJuIFYxdCgoR2koKSxuKSk7Y2FzZSA0MzpyZXR1cm4gVjF0KG4pO2Nhc2UgNDQ6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgb2IoKHRlPVR1KG4sITApLHRlLmxlbmd0aD4wJiYoWG4oMCx0ZS5sZW5ndGgpLHRlLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSx0ZS5sZW5ndGgrMSksdGUuc3Vic3RyKDEpKTp0ZSkpO2Nhc2UgNDU6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgb2IoKGZlPVR1KG4sITApLGZlLmxlbmd0aD4wJiYoWG4oMCxmZS5sZW5ndGgpLGZlLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSxmZS5sZW5ndGgrMSksZmUuc3Vic3RyKDEpKTpmZSkpO2Nhc2UgNDY6cmV0dXJuIFR1KG4sITEpO2Nhc2UgNDc6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksZ0F0KSxuKSk7Y2FzZSA1OTpjYXNlIDQ4OnJldHVybiBpN24oKEdpKCksbikpO2Nhc2UgNDk6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCkscEF0KSxuKSk7Y2FzZSA1MDpyZXR1cm4gbj09bnVsbD9udWxsOl9FKE9oKChUZT1UdShuLCEwKSxUZS5sZW5ndGg+MCYmKFhuKDAsVGUubGVuZ3RoKSxUZS5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsVGUubGVuZ3RoKzEpLFRlLnN1YnN0cigxKSk6VGUpLEpHLDMyNzY3KTw8MTY+PjE2KTtjYXNlIDUxOnJldHVybiBuPT1udWxsP251bGw6X0UoT2goKGY9VHUobiwhMCksZi5sZW5ndGg+MCYmKFhuKDAsZi5sZW5ndGgpLGYuY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLGYubGVuZ3RoKzEpLGYuc3Vic3RyKDEpKTpmKSxKRywzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1MzpyZXR1cm4gZWkoS3codGhpcywoR2koKSxiQXQpLG4pKTtjYXNlIDU1OnJldHVybiBuPT1udWxsP251bGw6X0UoT2goKGc9VHUobiwhMCksZy5sZW5ndGg+MCYmKFhuKDAsZy5sZW5ndGgpLGcuY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLGcubGVuZ3RoKzEpLGcuc3Vic3RyKDEpKTpnKSxKRywzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1NjpyZXR1cm4gbj09bnVsbD9udWxsOl9FKE9oKCh3PVR1KG4sITApLHcubGVuZ3RoPjAmJihYbigwLHcubGVuZ3RoKSx3LmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSx3Lmxlbmd0aCsxKSx3LnN1YnN0cigxKSk6dyksSkcsMzI3NjcpPDwxNj4+MTYpO2Nhc2UgNTc6cmV0dXJuIG49PW51bGw/bnVsbDphcChLVSgoRT1UdShuLCEwKSxFLmxlbmd0aD4wJiYoWG4oMCxFLmxlbmd0aCksRS5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsRS5sZW5ndGgrMSksRS5zdWJzdHIoMSkpOkUpKSk7Y2FzZSA1ODpyZXR1cm4gbj09bnVsbD9udWxsOmFwKEtVKChDPVR1KG4sITApLEMubGVuZ3RoPjAmJihYbigwLEMubGVuZ3RoKSxDLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSxDLmxlbmd0aCsxKSxDLnN1YnN0cigxKSk6QykpKTtjYXNlIDYwOnJldHVybiBuPT1udWxsP251bGw6cHQoT2goKHI9VHUobiwhMCksci5sZW5ndGg+MCYmKFhuKDAsci5sZW5ndGgpLHIuY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLHIubGVuZ3RoKzEpLHIuc3Vic3RyKDEpKTpyKSxsbyxJaSkpO2Nhc2UgNjE6cmV0dXJuIG49PW51bGw/bnVsbDpwdChPaChUdShuLCEwKSxsbyxJaSkpO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKHlUK3QueGUoKSt0MykpfX07dmFyIHZBdCxHUGUsd0F0LEtQZTtJKGVhLCJYTUxUeXBlRmFjdG9yeUltcGwiLDIwMjgpLEQoNTk0LDE4NCx7MTEwOjEsOTQ6MSw5MzoxLDE1NToxLDE5NzoxLDU4OjEsMjQxOjEsMTE0OjEsNTQ6MSw5OToxLDE1ODoxLDE4NDoxLDExOToxLDEyMDoxLDY5MDoxLDIwNDQ6MSw1OTQ6MX0sZGF0KSxoLk49ITEsaC5PPSExO3ZhciB5QXQ9ITE7SShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsIiw1OTQpLEQoMTk2MSwxLHs4NTE6MX0sbGspLGguS2s9ZnVuY3Rpb24oKXtyZXR1cm4geGtlKCksTEF0fSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMSIsMTk2MSksRCgxOTcwLDEseWkscVMpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzEwIiwxOTcwKSxEKDE5NzEsMSx5aSxtcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzExIiwxOTcxKSxEKDE5NzIsMSx5aSx2cmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzEyIiwxOTcyKSxEKDE5NzMsMSx5aSxwOCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gZnkodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHRhLGR0LDM0NSx0LDcsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8xMyIsMTk3MyksRCgxOTc0LDEseWksUiQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzE0IiwxOTc0KSxEKDE5NzUsMSx5aSxqJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKG1mLFF5LDE1LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzE1IiwxOTc1KSxEKDE5NzYsMSx5aSx3cmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTUpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShtZixReSwxNSx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8xNiIsMTk3NiksRCgxOTc3LDEseWksJCQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzE3IiwxOTc3KSxEKDE5NzgsMSx5aSx6JCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNjEpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShfVCxkdCwxNjEsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMTgiLDE5NzgpLEQoMTk3OSwxLHlpLE5JKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8xOSIsMTk3OSksRCgxOTYyLDEseWkseHJlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDg1Nyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGdGLFJuLDg1Nyx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8yIiwxOTYyKSxEKDE5ODAsMSx5aSxIUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjAiLDE5ODApLEQoMTk4MSwxLHlpLGtyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjEiLDE5ODEpLEQoMTk4MiwxLHlpLEVyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjIiLDE5ODIpLEQoMTk4MywxLHlpLFRyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjMiLDE5ODMpLEQoMTk4NCwxLHlpLENyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxOTUpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShBbCxkdCwxOTUsdCwwLDIpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjQiLDE5ODQpLEQoMTk4NSwxLHlpLFNyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjUiLDE5ODUpLEQoMTk4NiwxLHlpLHEkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8yNiIsMTk4NiksRCgxOTg3LDEseWksX3JlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE1KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UobWYsUXksMTUsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjciLDE5ODcpLEQoMTk4OCwxLHlpLEFyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKG1mLFF5LDE1LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzI4IiwxOTg4KSxEKDE5ODksMSx5aSxMcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzI5IiwxOTg5KSxEKDE5NjMsMSx5aSxIJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw2ODEpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShBWSxSbiwyMTE5LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzMiLDE5NjMpLEQoMTk5MCwxLHlpLE1yZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHJvLGR0LDE3LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzMwIiwxOTkwKSxEKDE5OTEsMSx5aSxEcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzMxIiwxOTkxKSxEKDE5OTIsMSx5aSxWUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNjgpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShyMyxkdCwxNjgsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzIiLDE5OTIpLEQoMTk5MywxLHlpLElyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzMiLDE5OTMpLEQoMTk5NCwxLHlpLE9yZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzQiLDE5OTQpLEQoMTk5NSwxLHlpLE5yZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzUiLDE5OTUpLEQoMTk5NiwxLHlpLFByZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzYiLDE5OTYpLEQoMTk5NywxLHlpLEJyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKG1mLFF5LDE1LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzM3IiwxOTk3KSxEKDE5OTgsMSx5aSxGcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTUpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShtZixReSwxNSx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8zOCIsMTk5OCksRCgxOTk5LDEseWksViQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzM5IiwxOTk5KSxEKDE5NjQsMSx5aSxScmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNjgyKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UocEYsUm4sMjEyMCx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80IiwxOTY0KSxEKDJlMywxLHlpLFUkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80MCIsMmUzKSxEKDIwMDEsMSx5aSxqcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzQxIiwyMDAxKSxEKDIwMDIsMSx5aSxQSSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNDIiLDIwMDIpLEQoMjAwMywxLHlpLCRyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNDMiLDIwMDMpLEQoMjAwNCwxLHlpLEckKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80NCIsMjAwNCksRCgyMDA1LDEseWksenJlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE5MSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGkzLGR0LDE5MSx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80NSIsMjAwNSksRCgyMDA2LDEseWksSyQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzQ2IiwyMDA2KSxEKDIwMDcsMSx5aSxxcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzQ3IiwyMDA3KSxEKDIwMDgsMSx5aSxXJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNDgiLDIwMDgpLEQoMjAwOSwxLHlpLFkkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE5MSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGkzLGR0LDE5MSx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80OSIsMjAwOSksRCgxOTY1LDEseWksWCQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNjgzKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoVlBlLFJuLDIxMjEsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNSIsMTk2NSksRCgyMDEwLDEseWksQkkpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTY4KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UocjMsZHQsMTY4LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzUwIiwyMDEwKSxEKDIwMTEsMSx5aSx3NSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNTEiLDIwMTEpLEQoMjAxMiwxLHlpLFVTKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE3KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2Uocm8sZHQsMTcsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNTIiLDIwMTIpLEQoMTk2NiwxLHlpLFMxKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC82IiwxOTY2KSxEKDE5NjcsMSx5aSxRJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxOTUpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShBbCxkdCwxOTUsdCwwLDIpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNyIsMTk2NyksRCgxOTY4LDEseWksaGspLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIGh5KHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShOcyxkdCw0ODUsdCw4LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvOCIsMTk2OCksRCgxOTY5LDEseWksRkkpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjIyKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoangsZHQsMjIyLHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzkiLDE5NjkpO3ZhciBuZCxOMixHTSxMWSx5ZTtEKDU1LDYzLGxwLHJpKSxJKHkyLCJSZWdFeC9QYXJzZUV4Y2VwdGlvbiIsNTUpLEQoODM2LDEse30sSiQpLGguYm09ZnVuY3Rpb24odCl7cmV0dXJuIHQ8dGhpcy5qJiZjbyh0aGlzLmksdCk9PTYzfSxoLmNtPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbztpZih0aGlzLmMhPTEwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxWRykpKSk7c3dpdGNoKHQ9dGhpcy5hLHQpe2Nhc2UgMTAxOnQ9Mjc7YnJlYWs7Y2FzZSAxMDI6dD0xMjticmVhaztjYXNlIDExMDp0PTEwO2JyZWFrO2Nhc2UgMTE0OnQ9MTM7YnJlYWs7Y2FzZSAxMTY6dD05O2JyZWFrO2Nhc2UgMTIwOmlmKExpKHRoaXMpLHRoaXMuYyE9MCl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksdzIpKSkpO2lmKHRoaXMuYT09MTIzKXtvPTAscj0wO2Rve2lmKExpKHRoaXMpLHRoaXMuYyE9MCl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksdzIpKSkpO2lmKChvPVdtKHRoaXMuYSkpPDApYnJlYWs7aWYocj5yKjE2KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxINHQpKSkpO3I9cioxNitvfXdoaWxlKCEwKTtpZih0aGlzLmEhPTEyNSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksVjR0KSkpKTtpZihyPlRUKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxVNHQpKSkpO3Q9cn1lbHNle2lmKG89MCx0aGlzLmMhPTB8fChvPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihyPW8sTGkodGhpcyksdGhpcy5jIT0wfHwobz1XbSh0aGlzLmEpKTwwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx3MikpKSk7cj1yKjE2K28sdD1yfWJyZWFrO2Nhc2UgMTE3OmlmKGE9MCxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPWEsTGkodGhpcyksdGhpcy5jIT0wfHwoYT1XbSh0aGlzLmEpKTwwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx3MikpKSk7aWYobj1uKjE2K2EsTGkodGhpcyksdGhpcy5jIT0wfHwoYT1XbSh0aGlzLmEpKTwwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx3MikpKSk7aWYobj1uKjE2K2EsTGkodGhpcyksdGhpcy5jIT0wfHwoYT1XbSh0aGlzLmEpKTwwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx3MikpKSk7bj1uKjE2K2EsdD1uO2JyZWFrO2Nhc2UgMTE4OmlmKExpKHRoaXMpLHRoaXMuYyE9MHx8KGE9V20odGhpcy5hKSk8MCl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksdzIpKSkpO2lmKG49YSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxuPlRUKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSwicGFyc2VyLmRlc2NhcHBlLjQiKSkpKTt0PW47YnJlYWs7Y2FzZSA2NTpjYXNlIDkwOmNhc2UgMTIyOnRocm93IHVlKG5ldyByaShhaSgoSnIoKSxHNHQpKSkpfXJldHVybiB0fSxoLmRtPWZ1bmN0aW9uKHQpe3ZhciBuLHI7c3dpdGNoKHQpe2Nhc2UgMTAwOnI9KHRoaXMuZSYzMik9PTMyP19iKCJOZCIsITApOihEaSgpLE1ZKTticmVhaztjYXNlIDY4OnI9KHRoaXMuZSYzMik9PTMyP19iKCJOZCIsITEpOihEaSgpLFpQZSk7YnJlYWs7Y2FzZSAxMTk6cj0odGhpcy5lJjMyKT09MzI/X2IoIklzV29yZCIsITApOihEaSgpLGxDKTticmVhaztjYXNlIDg3OnI9KHRoaXMuZSYzMik9PTMyP19iKCJJc1dvcmQiLCExKTooRGkoKSx0QmUpO2JyZWFrO2Nhc2UgMTE1OnI9KHRoaXMuZSYzMik9PTMyP19iKCJJc1NwYWNlIiwhMCk6KERpKCksbDkpO2JyZWFrO2Nhc2UgODM6cj0odGhpcy5lJjMyKT09MzI/X2IoIklzU3BhY2UiLCExKTooRGkoKSxlQmUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdWUobmV3IEFjKChuPXQsRzV0K24udG9TdHJpbmcoMTYpKSkpfXJldHVybiByfSxoLmVtPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtmb3IodGhpcy5iPTEsTGkodGhpcyksbj1udWxsLHRoaXMuYz09MCYmdGhpcy5hPT05ND8oTGkodGhpcyksdD9MPShEaSgpLERpKCksbmV3IF9oKDUpKToobj0oRGkoKSxEaSgpLG5ldyBfaCg0KSksRXUobiwwLFRUKSxMPW5ldyBfaCg0KSkpOkw9KERpKCksRGkoKSxuZXcgX2goNCkpLG89ITA7KHo9dGhpcy5jKSE9MSYmISh6PT0wJiZ0aGlzLmE9PTkzJiYhbyk7KXtpZihvPSExLHI9dGhpcy5hLGE9ITEsej09MTApc3dpdGNoKHIpe2Nhc2UgMTAwOmNhc2UgNjg6Y2FzZSAxMTk6Y2FzZSA4NzpjYXNlIDExNTpjYXNlIDgzOkt5KEwsdGhpcy5kbShyKSksYT0hMDticmVhaztjYXNlIDEwNTpjYXNlIDczOmNhc2UgOTk6Y2FzZSA2NzpyPXRoaXMudW0oTCxyKSxyPDAmJihhPSEwKTticmVhaztjYXNlIDExMjpjYXNlIDgwOmlmKEI9dzllKHRoaXMsciksIUIpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHQwZSkpKSk7S3koTCxCKSxhPSEwO2JyZWFrO2RlZmF1bHQ6cj10aGlzLmNtKCl9ZWxzZSBpZih6PT0yMCl7aWYoZz1Oayh0aGlzLmksNTgsdGhpcy5kKSxnPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGtTZSkpKSk7aWYodz0hMCxjbyh0aGlzLmksdGhpcy5kKT09OTQmJigrK3RoaXMuZCx3PSExKSxmPXRmKHRoaXMuaSx0aGlzLmQsZyksRT12bHQoZix3LCh0aGlzLmUmNTEyKT09NTEyKSwhRSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksUjR0KSkpKTtpZihLeShMLEUpLGE9ITAsZysxPj10aGlzLmp8fGNvKHRoaXMuaSxnKzEpIT05Myl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksa1NlKSkpKTt0aGlzLmQ9ZysyfWlmKExpKHRoaXMpLCFhKWlmKHRoaXMuYyE9MHx8dGhpcy5hIT00NSlFdShMLHIscik7ZWxzZXtpZihMaSh0aGlzKSwoej10aGlzLmMpPT0xKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxVRykpKSk7ej09MCYmdGhpcy5hPT05Mz8oRXUoTCxyLHIpLEV1KEwsNDUsNDUpKTooQz10aGlzLmEsej09MTAmJihDPXRoaXMuY20oKSksTGkodGhpcyksRXUoTCxyLEMpKX0odGhpcy5lJm0wKT09bTAmJnRoaXMuYz09MCYmdGhpcy5hPT00NCYmTGkodGhpcyl9aWYodGhpcy5jPT0xKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxVRykpKSk7cmV0dXJuIG4mJihuTChuLEwpLEw9biksYzYoTCksZUwoTCksdGhpcy5iPTAsTGkodGhpcyksTH0saC5mbT1mdW5jdGlvbigpe3ZhciB0LG4scixhO2ZvcihyPXRoaXMuZW0oITEpOyhhPXRoaXMuYykhPTc7KWlmKHQ9dGhpcy5hLGE9PTAmJih0PT00NXx8dD09MzgpfHxhPT00KXtpZihMaSh0aGlzKSx0aGlzLmMhPTkpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLCQ0dCkpKSk7aWYobj10aGlzLmVtKCExKSxhPT00KUt5KHIsbik7ZWxzZSBpZih0PT00NSluTChyLG4pO2Vsc2UgaWYodD09MzgpQ3Z0KHIsbik7ZWxzZSB0aHJvdyB1ZShuZXcgQWMoIkFTU0VSVCIpKX1lbHNlIHRocm93IHVlKG5ldyByaShhaSgoSnIoKSx6NHQpKSkpO3JldHVybiBMaSh0aGlzKSxyfSxoLmdtPWZ1bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gdD10aGlzLmEtNDgsbj0oRGkoKSxEaSgpLG5ldyBjb2UoMTIsbnVsbCx0KSksIXRoaXMuZyYmKHRoaXMuZz1uZXcganopLFJ6KHRoaXMuZyxuZXcgRXdlKHQpKSxMaSh0aGlzKSxufSxoLmhtPWZ1bmN0aW9uKCl7cmV0dXJuIExpKHRoaXMpLERpKCksRUF0fSxoLmltPWZ1bmN0aW9uKCl7cmV0dXJuIExpKHRoaXMpLERpKCksa0F0fSxoLmptPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5rbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGgubG09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRXluKCl9LGgubW09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRGkoKSxDQXR9LGgubm09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRGkoKSxfQXR9LGgub209ZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLmQ+PXRoaXMuanx8KCh0PWNvKHRoaXMuaSx0aGlzLmQrKykpJjY1NTA0KSE9NjQpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFA0dCkpKSk7cmV0dXJuIExpKHRoaXMpLERpKCksRGkoKSxuZXcgbmcoMCx0LTY0KX0saC5wbT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxTQW4oKX0saC5xbT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLEFBdH0saC5ybT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PShEaSgpLERpKCksbmV3IG5nKDAsMTA1KSksTGkodGhpcyksdH0saC5zbT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLFNBdH0saC50bT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLFRBdH0saC51bT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmNtKCl9LGgudm09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRGkoKSxRUGV9LGgud209ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvO2lmKHRoaXMuZCsxPj10aGlzLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEk0dCkpKSk7aWYoYT0tMSxuPW51bGwsdD1jbyh0aGlzLmksdGhpcy5kKSw0OTw9dCYmdDw9NTcpe2lmKGE9dC00OCwhdGhpcy5nJiYodGhpcy5nPW5ldyBqeiksUnoodGhpcy5nLG5ldyBFd2UoYSkpLCsrdGhpcy5kLGNvKHRoaXMuaSx0aGlzLmQpIT00MSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksb3YpKSkpOysrdGhpcy5kfWVsc2Ugc3dpdGNoKHQ9PTYzJiYtLXRoaXMuZCxMaSh0aGlzKSxuPUdrZSh0aGlzKSxuLmUpe2Nhc2UgMjA6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6YnJlYWs7Y2FzZSA4OmlmKHRoaXMuYyE9Nyl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksb3YpKSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLE80dCkpKSl9aWYoTGkodGhpcyksbz1qdyh0aGlzKSxyPW51bGwsby5lPT0yKXtpZihvLlBtKCkhPTIpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLE40dCkpKSk7cj1vLkxtKDEpLG89by5MbSgwKX1pZih0aGlzLmMhPTcpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG92KSkpKTtyZXR1cm4gTGkodGhpcyksRGkoKSxEaSgpLG5ldyBabHQoYSxuLG8scil9LGgueG09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRGkoKSxKUGV9LGgueW09ZnVuY3Rpb24oKXt2YXIgdDtpZihMaSh0aGlzKSx0PWJIKDI0LGp3KHRoaXMpKSx0aGlzLmMhPTcpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG92KSkpKTtyZXR1cm4gTGkodGhpcyksdH0saC56bT1mdW5jdGlvbigpe3ZhciB0O2lmKExpKHRoaXMpLHQ9YkgoMjAsancodGhpcykpLHRoaXMuYyE9Nyl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksb3YpKSkpO3JldHVybiBMaSh0aGlzKSx0fSxoLkFtPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoTGkodGhpcyksdD1iSCgyMixqdyh0aGlzKSksdGhpcy5jIT03KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxvdikpKSk7cmV0dXJuIExpKHRoaXMpLHR9LGguQm09ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvO2Zvcih0PTAscj0wLG49LTE7dGhpcy5kPHRoaXMuaiYmKG49Y28odGhpcy5pLHRoaXMuZCksbz1DOWUobiksbyE9MCk7KXR8PW8sKyt0aGlzLmQ7aWYodGhpcy5kPj10aGlzLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHlTZSkpKSk7aWYobj09NDUpe2ZvcigrK3RoaXMuZDt0aGlzLmQ8dGhpcy5qJiYobj1jbyh0aGlzLmksdGhpcy5kKSxvPUM5ZShuKSxvIT0wKTspcnw9bywrK3RoaXMuZDtpZih0aGlzLmQ+PXRoaXMuail0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCkseVNlKSkpKX1pZihuPT01OCl7aWYoKyt0aGlzLmQsTGkodGhpcyksYT1Xc3QoancodGhpcyksdCxyKSx0aGlzLmMhPTcpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG92KSkpKTtMaSh0aGlzKX1lbHNlIGlmKG49PTQxKSsrdGhpcy5kLExpKHRoaXMpLGE9V3N0KGp3KHRoaXMpLHQscik7ZWxzZSB0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksRDR0KSkpKTtyZXR1cm4gYX0saC5DbT1mdW5jdGlvbigpe3ZhciB0O2lmKExpKHRoaXMpLHQ9YkgoMjEsancodGhpcykpLHRoaXMuYyE9Nyl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksb3YpKSkpO3JldHVybiBMaSh0aGlzKSx0fSxoLkRtPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoTGkodGhpcyksdD1iSCgyMyxqdyh0aGlzKSksdGhpcy5jIT03KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxvdikpKSk7cmV0dXJuIExpKHRoaXMpLHR9LGguRW09ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKExpKHRoaXMpLHQ9dGhpcy5mKyssbj1CYWUoancodGhpcyksdCksdGhpcy5jIT03KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxvdikpKSk7cmV0dXJuIExpKHRoaXMpLG59LGguRm09ZnVuY3Rpb24oKXt2YXIgdDtpZihMaSh0aGlzKSx0PUJhZShqdyh0aGlzKSwwKSx0aGlzLmMhPTcpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG92KSkpKTtyZXR1cm4gTGkodGhpcyksdH0saC5HbT1mdW5jdGlvbih0KXtyZXR1cm4gTGkodGhpcyksdGhpcy5jPT01PyhMaSh0aGlzKSxvSCh0LChEaSgpLERpKCksbmV3IFR5KDksdCkpKSk6b0godCwoRGkoKSxEaSgpLG5ldyBUeSgzLHQpKSl9LGguSG09ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIExpKHRoaXMpLG49KERpKCksRGkoKSxuZXcgQl8oMikpLHRoaXMuYz09NT8oTGkodGhpcyksUW0obixXTSksUW0obix0KSk6KFFtKG4sdCksUW0obixXTSkpLG59LGguSW09ZnVuY3Rpb24odCl7cmV0dXJuIExpKHRoaXMpLHRoaXMuYz09NT8oTGkodGhpcyksRGkoKSxEaSgpLG5ldyBUeSg5LHQpKTooRGkoKSxEaSgpLG5ldyBUeSgzLHQpKX0saC5hPTAsaC5iPTAsaC5jPTAsaC5kPTAsaC5lPTAsaC5mPTEsaC5nPW51bGwsaC5qPTAsSSh5MiwiUmVnRXgvUmVnZXhQYXJzZXIiLDgzNiksRCgxOTQ3LDgzNix7fSxnSmUpLGguYm09ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguY209ZnVuY3Rpb24oKXtyZXR1cm4gZWtlKHRoaXMpfSxoLmRtPWZ1bmN0aW9uKHQpe3JldHVybiBZRSh0KX0saC5lbT1mdW5jdGlvbih0KXtyZXR1cm4geXd0KHRoaXMpfSxoLmZtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5nbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGguaG09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLmltPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5qbT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxZRSg2Nyl9LGgua209ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksWUUoNzMpfSxoLmxtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5tbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGgubm09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLm9tPWZ1bmN0aW9uKCl7cmV0dXJuIExpKHRoaXMpLFlFKDk5KX0saC5wbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGgucW09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLnJtPWZ1bmN0aW9uKCl7cmV0dXJuIExpKHRoaXMpLFlFKDEwNSl9LGguc209ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLnRtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC51bT1mdW5jdGlvbih0LG4pe3JldHVybiBLeSh0LFlFKG4pKSwtMX0saC52bT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLERpKCksbmV3IG5nKDAsOTQpfSxoLndtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC54bT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLERpKCksbmV3IG5nKDAsMzYpfSxoLnltPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC56bT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGguQW09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLkJtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5DbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGguRG09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLkVtPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoTGkodGhpcyksdD1CYWUoancodGhpcyksMCksdGhpcy5jIT03KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxvdikpKSk7cmV0dXJuIExpKHRoaXMpLHR9LGguRm09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLkdtPWZ1bmN0aW9uKHQpe3JldHVybiBMaSh0aGlzKSxvSCh0LChEaSgpLERpKCksbmV3IFR5KDMsdCkpKX0saC5IbT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gTGkodGhpcyksbj0oRGkoKSxEaSgpLG5ldyBCXygyKSksUW0obix0KSxRbShuLFdNKSxufSxoLkltPWZ1bmN0aW9uKHQpe3JldHVybiBMaSh0aGlzKSxEaSgpLERpKCksbmV3IFR5KDMsdCl9O3ZhciBsNz1udWxsLGNDPW51bGw7SSh5MiwiUmVnRXgvUGFyc2VyRm9yWE1MU2NoZW1hIiwxOTQ3KSxEKDEyMiwxLENULFh2KSxoLkptPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBBYygiTm90IHN1cHBvcnRlZC4iKSl9LGguS209ZnVuY3Rpb24oKXtyZXR1cm4tMX0saC5MbT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0saC5NbT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLk5tPWZ1bmN0aW9uKHQpe30saC5PbT1mdW5jdGlvbih0KXt9LGguUG09ZnVuY3Rpb24oKXtyZXR1cm4gMH0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLlFtKDApfSxoLlFtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmU9PTExPyIuIjoiIn0saC5lPTA7dmFyIFdQZSx1QyxLTSx4QXQsWVBlLFA0PW51bGwsTVksY3BlPW51bGwsWFBlLFdNLHVwZT1udWxsLFFQZSxKUGUsWlBlLGVCZSx0QmUsa0F0LGw5LEVBdCxUQXQsQ0F0LFNBdCxsQyxfQXQsQUF0LEJPbj1JKHkyLCJSZWdFeC9Ub2tlbiIsMTIyKTtEKDEzOCwxMjIsezM6MSwxMzg6MSwxMjI6MX0sX2gpLGguUW09ZnVuY3Rpb24odCl7dmFyIG4scixhO2lmKHRoaXMuZT09NClpZih0aGlzPT1YUGUpcj0iLiI7ZWxzZSBpZih0aGlzPT1NWSlyPSJcXGQiO2Vsc2UgaWYodGhpcz09bEMpcj0iXFx3IjtlbHNlIGlmKHRoaXM9PWw5KXI9IlxccyI7ZWxzZXtmb3IoYT1uZXcgVXAsYS5hKz0iWyIsbj0wO248dGhpcy5iLmxlbmd0aDtuKz0yKXQmbTAmJm4+MCYmKGEuYSs9IiwiKSx0aGlzLmJbbl09PT10aGlzLmJbbisxXT9YbyhhLGdQKHRoaXMuYltuXSkpOihYbyhhLGdQKHRoaXMuYltuXSkpLGEuYSs9Ii0iLFhvKGEsZ1AodGhpcy5iW24rMV0pKSk7YS5hKz0iXSIscj1hLmF9ZWxzZSBpZih0aGlzPT1aUGUpcj0iXFxEIjtlbHNlIGlmKHRoaXM9PXRCZSlyPSJcXFciO2Vsc2UgaWYodGhpcz09ZUJlKXI9IlxcUyI7ZWxzZXtmb3IoYT1uZXcgVXAsYS5hKz0iW14iLG49MDtuPHRoaXMuYi5sZW5ndGg7bis9Mil0Jm0wJiZuPjAmJihhLmErPSIsIiksdGhpcy5iW25dPT09dGhpcy5iW24rMV0/WG8oYSxnUCh0aGlzLmJbbl0pKTooWG8oYSxnUCh0aGlzLmJbbl0pKSxhLmErPSItIixYbyhhLGdQKHRoaXMuYltuKzFdKSkpO2EuYSs9Il0iLHI9YS5hfXJldHVybiByfSxoLmE9ITEsaC5jPSExLEkoeTIsIlJlZ0V4L1JhbmdlVG9rZW4iLDEzOCksRCg1OTIsMSx7NTkyOjF9LEV3ZSksaC5hPTAsSSh5MiwiUmVnRXgvUmVnZXhQYXJzZXIvUmVmZXJlbmNlUG9zaXRpb24iLDU5MiksRCg1OTEsMSx7MzoxLDU5MToxfSxMWmUpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9PW51bGx8fCFEZSh0LDU5MSk/ITE6KG49bCh0LDU5MSksdm4odGhpcy5iLG4uYikmJnRoaXMuYT09bi5hKX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBzMih0aGlzLmIrIi8iK0s5ZSh0aGlzLmEpKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuUW0odGhpcy5hKX0saC5hPTAsSSh5MiwiUmVnRXgvUmVndWxhckV4cHJlc3Npb24iLDU5MSksRCgyMjgsMTIyLENULG5nKSxoLkttPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5RbT1mdW5jdGlvbih0KXt2YXIgbixyLGE7c3dpdGNoKHRoaXMuZSl7Y2FzZSAwOnN3aXRjaCh0aGlzLmEpe2Nhc2UgMTI0OmNhc2UgNDI6Y2FzZSA0MzpjYXNlIDYzOmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDQ2OmNhc2UgOTE6Y2FzZSAxMjM6Y2FzZSA5MjphPSJcXCIraGFlKHRoaXMuYSZacyk7YnJlYWs7Y2FzZSAxMjphPSJcXGYiO2JyZWFrO2Nhc2UgMTA6YT0iXFxuIjticmVhaztjYXNlIDEzOmE9IlxcciI7YnJlYWs7Y2FzZSA5OmE9IlxcdCI7YnJlYWs7Y2FzZSAyNzphPSJcXGUiO2JyZWFrO2RlZmF1bHQ6dGhpcy5hPj1Jbz8ocj0obj10aGlzLmE+Pj4wLCIwIituLnRvU3RyaW5nKDE2KSksYT0iXFx2Iit0ZihyLHIubGVuZ3RoLTYsci5sZW5ndGgpKTphPSIiK2hhZSh0aGlzLmEmWnMpfWJyZWFrO2Nhc2UgODp0aGlzPT1RUGV8fHRoaXM9PUpQZT9hPSIiK2hhZSh0aGlzLmEmWnMpOmE9IlxcIitoYWUodGhpcy5hJlpzKTticmVhaztkZWZhdWx0OmE9bnVsbH1yZXR1cm4gYX0saC5hPTAsSSh5MiwiUmVnRXgvVG9rZW4vQ2hhclRva2VuIiwyMjgpLEQoMzE4LDEyMixDVCxUeSksaC5MbT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hfSxoLk5tPWZ1bmN0aW9uKHQpe3RoaXMuYj10fSxoLk9tPWZ1bmN0aW9uKHQpe3RoaXMuYz10fSxoLlBtPWZ1bmN0aW9uKCl7cmV0dXJuIDF9LGguUW09ZnVuY3Rpb24odCl7dmFyIG47aWYodGhpcy5lPT0zKWlmKHRoaXMuYzwwJiZ0aGlzLmI8MCluPXRoaXMuYS5RbSh0KSsiKiI7ZWxzZSBpZih0aGlzLmM9PXRoaXMuYiluPXRoaXMuYS5RbSh0KSsieyIrdGhpcy5jKyJ9IjtlbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPj0wKW49dGhpcy5hLlFtKHQpKyJ7Iit0aGlzLmMrIiwiK3RoaXMuYisifSI7ZWxzZSBpZih0aGlzLmM+PTAmJnRoaXMuYjwwKW49dGhpcy5hLlFtKHQpKyJ7Iit0aGlzLmMrIix9IjtlbHNlIHRocm93IHVlKG5ldyBBYygiVG9rZW4jdG9TdHJpbmcoKTogQ0xPU1VSRSAiK3RoaXMuYytDbyt0aGlzLmIpKTtlbHNlIGlmKHRoaXMuYzwwJiZ0aGlzLmI8MCluPXRoaXMuYS5RbSh0KSsiKj8iO2Vsc2UgaWYodGhpcy5jPT10aGlzLmIpbj10aGlzLmEuUW0odCkrInsiK3RoaXMuYysifT8iO2Vsc2UgaWYodGhpcy5jPj0wJiZ0aGlzLmI+PTApbj10aGlzLmEuUW0odCkrInsiK3RoaXMuYysiLCIrdGhpcy5iKyJ9PyI7ZWxzZSBpZih0aGlzLmM+PTAmJnRoaXMuYjwwKW49dGhpcy5hLlFtKHQpKyJ7Iit0aGlzLmMrIix9PyI7ZWxzZSB0aHJvdyB1ZShuZXcgQWMoIlRva2VuI3RvU3RyaW5nKCk6IE5PTkdSRUVEWUNMT1NVUkUgIit0aGlzLmMrQ28rdGhpcy5iKSk7cmV0dXJuIG59LGguYj0wLGguYz0wLEkoeTIsIlJlZ0V4L1Rva2VuL0Nsb3N1cmVUb2tlbiIsMzE4KSxEKDgzNywxMjIsQ1QsZjVlKSxoLkxtPWZ1bmN0aW9uKHQpe3JldHVybiB0PT0wP3RoaXMuYTp0aGlzLmJ9LGguUG09ZnVuY3Rpb24oKXtyZXR1cm4gMn0saC5RbT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdGhpcy5iLmU9PTMmJnRoaXMuYi5MbSgwKT09dGhpcy5hP249dGhpcy5hLlFtKHQpKyIrIjp0aGlzLmIuZT09OSYmdGhpcy5iLkxtKDApPT10aGlzLmE/bj10aGlzLmEuUW0odCkrIis/IjpuPXRoaXMuYS5RbSh0KSsoIiIrdGhpcy5iLlFtKHQpKSxufSxJKHkyLCJSZWdFeC9Ub2tlbi9Db25jYXRUb2tlbiIsODM3KSxEKDE5NDUsMTIyLENULFpsdCksaC5MbT1mdW5jdGlvbih0KXtpZih0PT0wKXJldHVybiB0aGlzLmQ7aWYodD09MSlyZXR1cm4gdGhpcy5iO3Rocm93IHVlKG5ldyBBYygiSW50ZXJuYWwgRXJyb3I6ICIrdCkpfSxoLlBtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj8yOjF9LGguUW09ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHRoaXMuYz4wP249Iig/KCIrdGhpcy5jKyIpIjp0aGlzLmEuZT09OD9uPSIoPygiK3RoaXMuYSsiKSI6bj0iKD8iK3RoaXMuYSx0aGlzLmI/bis9dGhpcy5kKyJ8Iit0aGlzLmIrIikiOm4rPXRoaXMuZCsiKSIsbn0saC5jPTAsSSh5MiwiUmVnRXgvVG9rZW4vQ29uZGl0aW9uVG9rZW4iLDE5NDUpLEQoMTk0NiwxMjIsQ1QsSG90KSxoLkxtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJ9LGguUG09ZnVuY3Rpb24oKXtyZXR1cm4gMX0saC5RbT1mdW5jdGlvbih0KXtyZXR1cm4iKD8iKyh0aGlzLmE9PTA/IiI6SzllKHRoaXMuYSkpKyh0aGlzLmM9PTA/IiI6SzllKHRoaXMuYykpKyI6Iit0aGlzLmIuUW0odCkrIikifSxoLmE9MCxoLmM9MCxJKHkyLCJSZWdFeC9Ub2tlbi9Nb2RpZmllclRva2VuIiwxOTQ2KSxEKDgzOCwxMjIsQ1QsazVlKSxoLkxtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmF9LGguUG09ZnVuY3Rpb24oKXtyZXR1cm4gMX0saC5RbT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2gobj1udWxsLHRoaXMuZSl7Y2FzZSA2OnRoaXMuYj09MD9uPSIoPzoiK3RoaXMuYS5RbSh0KSsiKSI6bj0iKCIrdGhpcy5hLlFtKHQpKyIpIjticmVhaztjYXNlIDIwOm49Iig/PSIrdGhpcy5hLlFtKHQpKyIpIjticmVhaztjYXNlIDIxOm49Iig/ISIrdGhpcy5hLlFtKHQpKyIpIjticmVhaztjYXNlIDIyOm49Iig/PD0iK3RoaXMuYS5RbSh0KSsiKSI7YnJlYWs7Y2FzZSAyMzpuPSIoPzwhIit0aGlzLmEuUW0odCkrIikiO2JyZWFrO2Nhc2UgMjQ6bj0iKD8+Iit0aGlzLmEuUW0odCkrIikifXJldHVybiBufSxoLmI9MCxJKHkyLCJSZWdFeC9Ub2tlbi9QYXJlblRva2VuIiw4MzgpLEQoNTMwLDEyMix7MzoxLDEyMjoxLDUzMDoxfSxjb2UpLGguTW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlFtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmU9PTEyPyJcXCIrdGhpcy5hOnZUbih0aGlzLmIpfSxoLmE9MCxJKHkyLCJSZWdFeC9Ub2tlbi9TdHJpbmdUb2tlbiIsNTMwKSxEKDQ3NywxMjIsQ1QsQl8pLGguSm09ZnVuY3Rpb24odCl7UW0odGhpcyx0KX0saC5MbT1mdW5jdGlvbih0KXtyZXR1cm4gbCh4dyh0aGlzLmEsdCksMTIyKX0saC5QbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/dGhpcy5hLmEuYy5sZW5ndGg6MH0saC5RbT1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmO2lmKHRoaXMuZT09MSl7aWYodGhpcy5hLmEuYy5sZW5ndGg9PTIpbj1sKHh3KHRoaXMuYSwwKSwxMjIpLHI9bCh4dyh0aGlzLmEsMSksMTIyKSxyLmU9PTMmJnIuTG0oMCk9PW4/bz1uLlFtKHQpKyIrIjpyLmU9PTkmJnIuTG0oMCk9PW4/bz1uLlFtKHQpKyIrPyI6bz1uLlFtKHQpKygiIityLlFtKHQpKTtlbHNle2ZvcihmPW5ldyBVcCxhPTA7YTx0aGlzLmEuYS5jLmxlbmd0aDthKyspWG8oZixsKHh3KHRoaXMuYSxhKSwxMjIpLlFtKHQpKTtvPWYuYX1yZXR1cm4gb31pZih0aGlzLmEuYS5jLmxlbmd0aD09MiYmbCh4dyh0aGlzLmEsMSksMTIyKS5lPT03KW89bCh4dyh0aGlzLmEsMCksMTIyKS5RbSh0KSsiPyI7ZWxzZSBpZih0aGlzLmEuYS5jLmxlbmd0aD09MiYmbCh4dyh0aGlzLmEsMCksMTIyKS5lPT03KW89bCh4dyh0aGlzLmEsMSksMTIyKS5RbSh0KSsiPz8iO2Vsc2V7Zm9yKGY9bmV3IFVwLFhvKGYsbCh4dyh0aGlzLmEsMCksMTIyKS5RbSh0KSksYT0xO2E8dGhpcy5hLmEuYy5sZW5ndGg7YSsrKWYuYSs9InwiLFhvKGYsbCh4dyh0aGlzLmEsYSksMTIyKS5RbSh0KSk7bz1mLmF9cmV0dXJuIG99LEkoeTIsIlJlZ0V4L1Rva2VuL1VuaW9uVG9rZW4iLDQ3NyksRCg1MjcsMSx7NjAwOjF9LEpJKSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5ifSxJKFg1dCwiWE1MVHlwZVV0aWwvUGF0dGVybk1hdGNoZXJJbXBsIiw1MjcpLEQoMTcwNywxNTI3LHt9LGttKTt2YXIgTEF0O0koWDV0LCJYTUxUeXBlVmFsaWRhdG9yIiwxNzA3KSxEKDI3MCwxLGhnLERtKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iLXRoaXMuYSkqdGhpcy5jPDA/dG06bmV3IGNiKHRoaXMpfSxoLmE9MCxoLmI9MCxoLmM9MDt2YXIgdG07SSh6U2UsIkV4Y2x1c2l2ZVJhbmdlIiwyNzApLEQoMTA4NCwxLGxnLFokKSxoLlJiPWZ1bmN0aW9uKHQpe2wodCwxNyksWmxuKCl9LGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB6dW4oKX0saC5VYj1mdW5jdGlvbigpe3JldHVybiBxdW4oKX0saC5XYj1mdW5jdGlvbih0KXtsKHQsMTcpLHRobigpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5UYj1mdW5jdGlvbigpe3JldHVybi0xfSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGguUWI9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgSHAoWjV0KSl9LEkoelNlLCJFeGNsdXNpdmVSYW5nZS8xIiwxMDg0KSxEKDI1OCwxLGxnLGNiKSxoLlJiPWZ1bmN0aW9uKHQpe2wodCwxNyksZWhuKCl9LGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiBXeW4odGhpcyl9LGguVWI9ZnVuY3Rpb24oKXtyZXR1cm4gQnZuKHRoaXMpfSxoLldiPWZ1bmN0aW9uKHQpe2wodCwxNyksbmhuKCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmM8MD90aGlzLmE+PXRoaXMuYy5iOnRoaXMuYTw9dGhpcy5jLmJ9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPjB9LGguVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi0xfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IEhwKFo1dCkpfSxoLmE9MCxoLmI9MCxJKHpTZSwiRXhjbHVzaXZlUmFuZ2UvUmFuZ2VJdGVyYXRvciIsMjU4KTt2YXIga2Y9R2soR0csIkMiKSxWcj1HayhMTCwiSSIpLGloPUdrKEN4LCJaIiksbm09R2soTUwsIkoiKSxBbD1HayhTTCwiQiIpLE5hPUdrKF9MLCJEIiksQjQ9R2soQUwsIkYiKSxoNz1HayhETCwiUyIpLEZPbj1rcygib3JnLmVjbGlwc2UuZWxrLmNvcmUubGFiZWxzIiwiSUxhYmVsTWFuYWdlciIpLG5CZT1rcyhTbywiRGlhZ25vc3RpY0NoYWluIiksckJlPWtzKF81dCwiUmVzb3VyY2VTZXQiKSxpQmU9SShTbywiSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiIsbnVsbCksTUF0PShIeigpLFFtbiksREF0PURBdD1xOG47VnduKCRjbiksJHduKCJwZXJtUHJvcHMiLFtbWyJsb2NhbGUiLCJkZWZhdWx0Il0sW2U2dCwiZ2Vja28xXzgiXV0sW1sibG9jYWxlIiwiZGVmYXVsdCJdLFtlNnQsInNhZmFyaSJdXV0pLERBdChudWxsLCJlbGsiLG51bGwpfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0eXBlb2YgQWc8InUiP0FnOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwzOltmdW5jdGlvbih1LGQscCl7ZnVuY3Rpb24gdihBLFApe2lmKCEoQSBpbnN0YW5jZW9mIFApKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGIoQSxQKXtpZighQSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBQJiYodHlwZW9mIFA9PSJvYmplY3QifHx0eXBlb2YgUD09ImZ1bmN0aW9uIik/UDpBfWZ1bmN0aW9uIHkoQSxQKXtpZih0eXBlb2YgUCE9ImZ1bmN0aW9uIiYmUCE9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiBQKTtBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFAmJlAucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6QSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxQJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihBLFApOkEuX19wcm90b19fPVApfXZhciBUPXUoIi4vZWxrLWFwaS5qcyIpLmRlZmF1bHQsXz1mdW5jdGlvbihBKXt5KFAsQSk7ZnVuY3Rpb24gUCgpe3ZhciBSPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fTt2KHRoaXMsUCk7dmFyIEY9T2JqZWN0LmFzc2lnbih7fSxSKSxqPSExO3RyeXt1LnJlc29sdmUoIndlYi13b3JrZXIiKSxqPSEwfWNhdGNoe31pZihSLndvcmtlclVybClpZihqKXt2YXIgSz11KCJ3ZWItd29ya2VyIik7Ri53b3JrZXJGYWN0b3J5PWZ1bmN0aW9uKG9lKXtyZXR1cm4gbmV3IEsob2UpfX1lbHNlIGNvbnNvbGUud2FybihgV2ViIHdvcmtlciByZXF1ZXN0ZWQgYnV0ICd3ZWItd29ya2VyJyBwYWNrYWdlIG5vdCBpbnN0YWxsZWQuIApDb25zaWRlciBpbnN0YWxsaW5nIHRoZSBwYWNrYWdlIG9yIHBhc3MgeW91ciBvd24gJ3dvcmtlckZhY3RvcnknIHRvIEVMSydzIGNvbnN0cnVjdG9yLgouLi4gRmFsbGluZyBiYWNrIHRvIG5vbi13ZWIgd29ya2VyIHZlcnNpb24uYCk7aWYoIUYud29ya2VyRmFjdG9yeSl7dmFyIGVlPXUoIi4vZWxrLXdvcmtlci5taW4uanMiKSxpZT1lZS5Xb3JrZXI7Ri53b3JrZXJGYWN0b3J5PWZ1bmN0aW9uKG9lKXtyZXR1cm4gbmV3IGllKG9lKX19cmV0dXJuIGIodGhpcywoUC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihQKSkuY2FsbCh0aGlzLEYpKX1yZXR1cm4gUH0oVCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGQuZXhwb3J0cywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZC5leHBvcnRzPV8sXy5kZWZhdWx0PV99LHsiLi9lbGstYXBpLmpzIjoxLCIuL2Vsay13b3JrZXIubWluLmpzIjoyLCJ3ZWItd29ya2VyIjo0fV0sNDpbZnVuY3Rpb24odSxkLHApe2QuZXhwb3J0cz1Xb3JrZXJ9LHt9XX0se30sWzNdKSgzKX0pfSkoSEtlKTt2YXIgQ2FuPUhLZS5leHBvcnRzO2NvbnN0IFNhbj1oQyhDYW4pLFZLZT1uZXcgU2FuO2xldCBIdj17fTtjb25zdCBfYW49e307bGV0IFc3PXt9O2NvbnN0IEFhbj1hc3luYyBmdW5jdGlvbihpLHMsdSxkLHAsdixiKXtjb25zdCBUPXUuc2VsZWN0KGBbaWQ9IiR7c30iXWApLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKSxfPU9iamVjdC5rZXlzKGkpO3JldHVybiBhd2FpdCBQcm9taXNlLmFsbChfLm1hcChhc3luYyBmdW5jdGlvbihBKXtjb25zdCBQPWlbQV07bGV0IFI9ImRlZmF1bHQiO1AuY2xhc3Nlcy5sZW5ndGg+MCYmKFI9UC5jbGFzc2VzLmpvaW4oIiAiKSksUj1SKyIgZmxvd2NoYXJ0LWxhYmVsIjtjb25zdCBGPW9tKFAuc3R5bGVzKTtsZXQgaj1QLnRleHQhPT12b2lkIDA/UC50ZXh0OlAuaWQ7Y29uc3QgSz17d2lkdGg6MCxoZWlnaHQ6MH0sZWU9W3tpZDpQLmlkKyItd2VzdCIsbGF5b3V0T3B0aW9uczp7InBvcnQuc2lkZSI6IldFU1QifX0se2lkOlAuaWQrIi1lYXN0IixsYXlvdXRPcHRpb25zOnsicG9ydC5zaWRlIjoiRUFTVCJ9fSx7aWQ6UC5pZCsiLXNvdXRoIixsYXlvdXRPcHRpb25zOnsicG9ydC5zaWRlIjoiU09VVEgifX0se2lkOlAuaWQrIi1ub3J0aCIsbGF5b3V0T3B0aW9uczp7InBvcnQuc2lkZSI6Ik5PUlRIIn19XTtsZXQgaWU9MCxvZT0iIixwZT17fTtzd2l0Y2goUC50eXBlKXtjYXNlInJvdW5kIjppZT01LG9lPSJyZWN0IjticmVhaztjYXNlInNxdWFyZSI6b2U9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6b2U9InF1ZXN0aW9uIixwZT17cG9ydENvbnN0cmFpbnRzOiJGSVhFRF9TSURFIn07YnJlYWs7Y2FzZSJoZXhhZ29uIjpvZT0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOm9lPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOm9lPSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6b2U9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOm9lPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6b2U9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2Uib2RkX3JpZ2h0IjpvZT0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOm9lPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6b2U9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6b2U9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6b2U9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOm9lPSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6b2U9InJlY3QiO2JyZWFrO2Nhc2UiZG91YmxlY2lyY2xlIjpvZT0iZG91YmxlY2lyY2xlIjticmVhaztkZWZhdWx0Om9lPSJyZWN0In1jb25zdCBiZT17bGFiZWxTdHlsZTpGLmxhYmVsU3R5bGUsc2hhcGU6b2UsbGFiZWxUZXh0OmosbGFiZWxUeXBlOlAubGFiZWxUeXBlLHJ4OmllLHJ5OmllLGNsYXNzOlIsc3R5bGU6Ri5zdHlsZSxpZDpQLmlkLGxpbms6UC5saW5rLGxpbmtUYXJnZXQ6UC5saW5rVGFyZ2V0LHRvb2x0aXA6cC5kYi5nZXRUb29sdGlwKFAuaWQpfHwiIixkb21JZDpwLmRiLmxvb2tVcERvbUlkKFAuaWQpLGhhdmVDYWxsYmFjazpQLmhhdmVDYWxsYmFjayx3aWR0aDpQLnR5cGU9PT0iZ3JvdXAiPzUwMDp2b2lkIDAsZGlyOlAuZGlyLHR5cGU6UC50eXBlLHByb3BzOlAucHJvcHMscGFkZGluZzpWaCgpLmZsb3djaGFydC5wYWRkaW5nfTtsZXQgYWUsbmU7aWYoYmUudHlwZSE9PSJncm91cCIpbmU9YXdhaXQgdEooVCxiZSxQLmRpciksYWU9bmUubm9kZSgpLmdldEJCb3goKTtlbHNle2QuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtjb25zdHtzaGFwZVN2ZzpkZSxiYm94Olh9PWF3YWl0IGcxKFQsYmUsdm9pZCAwLCEwKTtLLndpZHRoPVgud2lkdGgsSy53cmFwcGluZ1dpZHRoPVZoKCkuZmxvd2NoYXJ0LndyYXBwaW5nV2lkdGgsSy5oZWlnaHQ9WC5oZWlnaHQsSy5sYWJlbE5vZGU9ZGUubm9kZSgpLGJlLmxhYmVsRGF0YT1LfWNvbnN0IHNlPXtpZDpQLmlkLHBvcnRzOlAudHlwZT09PSJkaWFtb25kIj9lZTpbXSxsYXlvdXRPcHRpb25zOnBlLGxhYmVsVGV4dDpqLGxhYmVsRGF0YTpLLGRvbUlkOnAuZGIubG9va1VwRG9tSWQoUC5pZCksd2lkdGg6YWU9PW51bGw/dm9pZCAwOmFlLndpZHRoLGhlaWdodDphZT09bnVsbD92b2lkIDA6YWUuaGVpZ2h0LHR5cGU6UC50eXBlLGVsOm5lLHBhcmVudDp2LnBhcmVudEJ5SWRbUC5pZF19O1c3W2JlLmlkXT1zZX0pKSxifSxVS2U9KGkscyx1KT0+e2NvbnN0IGQ9e1RCOntpbjp7bm9ydGg6Im5vcnRoIn0sb3V0Ontzb3V0aDoid2VzdCIsd2VzdDoiZWFzdCIsZWFzdDoic291dGgifX0sTFI6e2luOnt3ZXN0OiJ3ZXN0In0sb3V0OntlYXN0OiJzb3V0aCIsc291dGg6Im5vcnRoIixub3J0aDoiZWFzdCJ9fSxSTDp7aW46e2Vhc3Q6ImVhc3QifSxvdXQ6e3dlc3Q6Im5vcnRoIixub3J0aDoic291dGgiLHNvdXRoOiJ3ZXN0In19LEJUOntpbjp7c291dGg6InNvdXRoIn0sb3V0Ontub3J0aDoiZWFzdCIsZWFzdDoid2VzdCIsd2VzdDoibm9ydGgifX19O3JldHVybiBkLlREPWQuVEIsZFt1XVtzXVtpXX0sR0tlPShpLHMsdSk9PntpZihYZS5pbmZvKCJnZXROZXh0UG9ydCIse25vZGU6aSxlZGdlRGlyZWN0aW9uOnMsZ3JhcGhEaXJlY3Rpb246dX0pLCFIdltpXSlzd2l0Y2godSl7Y2FzZSJUQiI6Y2FzZSJURCI6SHZbaV09e2luUG9zaXRpb246Im5vcnRoIixvdXRQb3NpdGlvbjoic291dGgifTticmVhaztjYXNlIkJUIjpIdltpXT17aW5Qb3NpdGlvbjoic291dGgiLG91dFBvc2l0aW9uOiJub3J0aCJ9O2JyZWFrO2Nhc2UiUkwiOkh2W2ldPXtpblBvc2l0aW9uOiJlYXN0IixvdXRQb3NpdGlvbjoid2VzdCJ9O2JyZWFrO2Nhc2UiTFIiOkh2W2ldPXtpblBvc2l0aW9uOiJ3ZXN0IixvdXRQb3NpdGlvbjoiZWFzdCJ9O2JyZWFrfWNvbnN0IGQ9cz09PSJpbiI/SHZbaV0uaW5Qb3NpdGlvbjpIdltpXS5vdXRQb3NpdGlvbjtyZXR1cm4gcz09PSJpbiI/SHZbaV0uaW5Qb3NpdGlvbj1VS2UoSHZbaV0uaW5Qb3NpdGlvbixzLHUpOkh2W2ldLm91dFBvc2l0aW9uPVVLZShIdltpXS5vdXRQb3NpdGlvbixzLHUpLGR9LExhbj0oaSxzKT0+e2xldCB1PWkuc3RhcnQsZD1pLmVuZDtjb25zdCBwPXUsdj1kLGI9VzdbdV0seT1XN1tkXTtyZXR1cm4hYnx8IXk/e3NvdXJjZTp1LHRhcmdldDpkfTooYi50eXBlPT09ImRpYW1vbmQiJiYodT1gJHt1fS0ke0dLZSh1LCJvdXQiLHMpfWApLHkudHlwZT09PSJkaWFtb25kIiYmKGQ9YCR7ZH0tJHtHS2UoZCwiaW4iLHMpfWApLHtzb3VyY2U6dSx0YXJnZXQ6ZCxzb3VyY2VJZDpwLHRhcmdldElkOnZ9KX0sTWFuPWZ1bmN0aW9uKGkscyx1LGQpe1hlLmluZm8oImFiYzc4IGVkZ2VzID0gIixpKTtjb25zdCBwPWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIik7bGV0IHY9e30sYj1zLmRiLmdldERpcmVjdGlvbigpLHksVDtpZihpLmRlZmF1bHRTdHlsZSE9PXZvaWQgMCl7Y29uc3QgXz1vbShpLmRlZmF1bHRTdHlsZSk7eT1fLnN0eWxlLFQ9Xy5sYWJlbFN0eWxlfXJldHVybiBpLmZvckVhY2goZnVuY3Rpb24oXyl7Y29uc3QgQT0iTC0iK18uc3RhcnQrIi0iK18uZW5kO3ZbQV09PT12b2lkIDA/KHZbQV09MCxYZS5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLEEsdltBXSkpOih2W0FdKyssWGUuaW5mbygiYWJjNzggbmV3IGVudHJ5IixBLHZbQV0pKTtsZXQgUD1BKyItIit2W0FdO1hlLmluZm8oImFiYzc4IG5ldyBsaW5rIGlkIHRvIGJlIHVzZWQgaXMiLEEsUCx2W0FdKTtjb25zdCBSPSJMUy0iK18uc3RhcnQsRj0iTEUtIitfLmVuZCxqPXtzdHlsZToiIixsYWJlbFN0eWxlOiIifTtzd2l0Y2goai5taW5sZW49Xy5sZW5ndGh8fDEsXy50eXBlPT09ImFycm93X29wZW4iP2ouYXJyb3doZWFkPSJub25lIjpqLmFycm93aGVhZD0ibm9ybWFsIixqLmFycm93VHlwZVN0YXJ0PSJhcnJvd19vcGVuIixqLmFycm93VHlwZUVuZD0iYXJyb3dfb3BlbiIsXy50eXBlKXtjYXNlImRvdWJsZV9hcnJvd19jcm9zcyI6ai5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY3Jvc3MiO2Nhc2UiYXJyb3dfY3Jvc3MiOmouYXJyb3dUeXBlRW5kPSJhcnJvd19jcm9zcyI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfcG9pbnQiOmouYXJyb3dUeXBlU3RhcnQ9ImFycm93X3BvaW50IjtjYXNlImFycm93X3BvaW50IjpqLmFycm93VHlwZUVuZD0iYXJyb3dfcG9pbnQiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X2NpcmNsZSI6ai5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY2lyY2xlIjtjYXNlImFycm93X2NpcmNsZSI6ai5hcnJvd1R5cGVFbmQ9ImFycm93X2NpcmNsZSI7YnJlYWt9bGV0IEs9IiIsZWU9IiI7c3dpdGNoKF8uc3Ryb2tlKXtjYXNlIm5vcm1hbCI6Sz0iZmlsbDpub25lOyIseSE9PXZvaWQgMCYmKEs9eSksVCE9PXZvaWQgMCYmKGVlPVQpLGoudGhpY2tuZXNzPSJub3JtYWwiLGoucGF0dGVybj0ic29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpqLnRoaWNrbmVzcz0ibm9ybWFsIixqLnBhdHRlcm49ImRvdHRlZCIsai5zdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWRhc2hhcnJheTozOyI7YnJlYWs7Y2FzZSJ0aGljayI6ai50aGlja25lc3M9InRoaWNrIixqLnBhdHRlcm49InNvbGlkIixqLnN0eWxlPSJzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZTsiO2JyZWFrfWlmKF8uc3R5bGUhPT12b2lkIDApe2NvbnN0IG5lPW9tKF8uc3R5bGUpO0s9bmUuc3R5bGUsZWU9bmUubGFiZWxTdHlsZX1qLnN0eWxlPWouc3R5bGUrPUssai5sYWJlbFN0eWxlPWoubGFiZWxTdHlsZSs9ZWUsXy5pbnRlcnBvbGF0ZSE9PXZvaWQgMD9qLmN1cnZlPU92KF8uaW50ZXJwb2xhdGUsa3ApOmkuZGVmYXVsdEludGVycG9sYXRlIT09dm9pZCAwP2ouY3VydmU9T3YoaS5kZWZhdWx0SW50ZXJwb2xhdGUsa3ApOmouY3VydmU9T3YoX2FuLmN1cnZlLGtwKSxfLnRleHQ9PT12b2lkIDA/Xy5zdHlsZSE9PXZvaWQgMCYmKGouYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKTooai5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsai5sYWJlbHBvcz0iYyIpLGoubGFiZWxUeXBlPV8ubGFiZWxUeXBlLGoubGFiZWw9Xy50ZXh0LnJlcGxhY2UoY2kubGluZUJyZWFrUmVnZXgsYApgKSxfLnN0eWxlPT09dm9pZCAwJiYoai5zdHlsZT1qLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiKSxqLmxhYmVsU3R5bGU9ai5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6Iiksai5pZD1QLGouY2xhc3Nlcz0iZmxvd2NoYXJ0LWxpbmsgIitSKyIgIitGO2NvbnN0IGllPXptZShwLGopLHtzb3VyY2U6b2UsdGFyZ2V0OnBlLHNvdXJjZUlkOmJlLHRhcmdldElkOmFlfT1MYW4oXyxiKTtYZS5kZWJ1ZygiYWJjNzggc291cmNlIGFuZCB0YXJnZXQiLG9lLHBlKSx1LmVkZ2VzLnB1c2goe2lkOiJlIitfLnN0YXJ0K18uZW5kLHNvdXJjZXM6W29lXSx0YXJnZXRzOltwZV0sc291cmNlSWQ6YmUsdGFyZ2V0SWQ6YWUsbGFiZWxFbDppZSxsYWJlbHM6W3t3aWR0aDpqLndpZHRoLGhlaWdodDpqLmhlaWdodCxvcmdXaWR0aDpqLndpZHRoLG9yZ0hlaWdodDpqLmhlaWdodCx0ZXh0OmoubGFiZWwsbGF5b3V0T3B0aW9uczp7ImVkZ2VMYWJlbHMuaW5saW5lIjoidHJ1ZSIsImVkZ2VMYWJlbHMucGxhY2VtZW50IjoiQ0VOVEVSIn19XSxlZGdlRGF0YTpqfSl9KSx1fSxEYW49ZnVuY3Rpb24oaSxzLHUsZCxwKXtsZXQgdj0iIjtkJiYodj13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCx2PXYucmVwbGFjZSgvXCgvZywiXFwoIiksdj12LnJlcGxhY2UoL1wpL2csIlxcKSIpKSxBVWUoaSxzLHYscCx1KX0sSWFuPWZ1bmN0aW9uKGkscyl7cmV0dXJuIFhlLmluZm8oIkV4dHJhY3RpbmcgY2xhc3NlcyIpLHMuZGIuZ2V0Q2xhc3NlcygpfSxPYW49ZnVuY3Rpb24oaSl7Y29uc3Qgcz17cGFyZW50QnlJZDp7fSxjaGlsZHJlbkJ5SWQ6e319LHU9aS5nZXRTdWJHcmFwaHMoKTtyZXR1cm4gWGUuaW5mbygiU3ViZ3JhcGhzIC0gIix1KSx1LmZvckVhY2goZnVuY3Rpb24oZCl7ZC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHApe3MucGFyZW50QnlJZFtwXT1kLmlkLHMuY2hpbGRyZW5CeUlkW2QuaWRdPT09dm9pZCAwJiYocy5jaGlsZHJlbkJ5SWRbZC5pZF09W10pLHMuY2hpbGRyZW5CeUlkW2QuaWRdLnB1c2gocCl9KX0pLHUuZm9yRWFjaChmdW5jdGlvbihkKXtkLmlkLHMucGFyZW50QnlJZFtkLmlkXSE9PXZvaWQgMCYmcy5wYXJlbnRCeUlkW2QuaWRdfSksc30sTmFuPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPVRhbihpLHMsdSk7aWYoZD09PXZvaWQgMHx8ZD09PSJyb290IilyZXR1cm57eDowLHk6MH07Y29uc3QgcD1XN1tkXS5vZmZzZXQ7cmV0dXJue3g6cC5wb3NYLHk6cC5wb3NZfX0sUGFuPWZ1bmN0aW9uKGkscyx1LGQscCx2KXtjb25zdCBiPU5hbihzLnNvdXJjZUlkLHMudGFyZ2V0SWQscCkseT1zLnNlY3Rpb25zWzBdLnN0YXJ0UG9pbnQsVD1zLnNlY3Rpb25zWzBdLmVuZFBvaW50LEE9KHMuc2VjdGlvbnNbMF0uYmVuZFBvaW50cz9zLnNlY3Rpb25zWzBdLmJlbmRQb2ludHM6W10pLm1hcChwZT0+W3BlLngrYi54LHBlLnkrYi55XSksUD1bW3kueCtiLngseS55K2IueV0sLi4uQSxbVC54K2IueCxULnkrYi55XV0se3g6Uix5OkZ9PV9VZShzLmVkZ2VEYXRhKSxqPWs3KCkueChSKS55KEYpLmN1cnZlKGtwKSxLPWkuaW5zZXJ0KCJwYXRoIikuYXR0cigiZCIsaihQKSkuYXR0cigiY2xhc3MiLCJwYXRoICIrdS5jbGFzc2VzKS5hdHRyKCJmaWxsIiwibm9uZSIpLGVlPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSxpZT1JcihlZS5ub2RlKCkuYXBwZW5kQ2hpbGQocy5sYWJlbEVsKSksb2U9aWUubm9kZSgpLmZpcnN0Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWUuYXR0cigid2lkdGgiLG9lLndpZHRoKSxpZS5hdHRyKCJoZWlnaHQiLG9lLmhlaWdodCksZWUuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7cy5sYWJlbHNbMF0ueCtiLnh9LCAke3MubGFiZWxzWzBdLnkrYi55fSlgKSxEYW4oSyx1LGQudHlwZSxkLmFycm93TWFya2VyQWJzb2x1dGUsdil9LEtLZT0oaSxzKT0+e2kuZm9yRWFjaCh1PT57dS5jaGlsZHJlbnx8KHUuY2hpbGRyZW49W10pO2NvbnN0IGQ9cy5jaGlsZHJlbkJ5SWRbdS5pZF07ZCYmZC5mb3JFYWNoKHA9Pnt1LmNoaWxkcmVuLnB1c2goVzdbcF0pfSksS0tlKHUuY2hpbGRyZW4scyl9KX0sQmFuPWFzeW5jIGZ1bmN0aW9uKGkscyx1LGQpe3ZhciBzZTtkLmRiLmNsZWFyKCksVzc9e30sSHY9e30sZC5kYi5zZXRHZW4oImdlbi0yIiksZC5wYXJzZXIucGFyc2UoaSk7Y29uc3QgcD1JcigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigic3R5bGUiLCJoZWlnaHQ6NDAwcHgiKS5hdHRyKCJpZCIsImN5Iik7bGV0IHY9e2lkOiJyb290IixsYXlvdXRPcHRpb25zOnsiZWxrLmhpZXJhcmNoeUhhbmRsaW5nIjoiSU5DTFVERV9DSElMRFJFTiIsIm9yZy5lY2xpcHNlLmVsay5wYWRkaW5nIjoiW3RvcD0xMDAsIGxlZnQ9MTAwLCBib3R0b209MTEwLCByaWdodD0xMTBdIiwiZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnMiOiIzMCIsImVsay5kaXJlY3Rpb24iOiJET1dOIn0sY2hpbGRyZW46W10sZWRnZXM6W119O3N3aXRjaChYZS5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCB1c2luZyB2MyByZW5kZXJlciIsVktlKSxkLmRiLmdldERpcmVjdGlvbigpKXtjYXNlIkJUIjp2LmxheW91dE9wdGlvbnNbImVsay5kaXJlY3Rpb24iXT0iVVAiO2JyZWFrO2Nhc2UiVEIiOnYubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJET1dOIjticmVhaztjYXNlIkxSIjp2LmxheW91dE9wdGlvbnNbImVsay5kaXJlY3Rpb24iXT0iUklHSFQiO2JyZWFrO2Nhc2UiUkwiOnYubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJMRUZUIjticmVha31jb25zdHtzZWN1cml0eUxldmVsOnksZmxvd2NoYXJ0OlR9PVZoKCk7bGV0IF87eT09PSJzYW5kYm94IiYmKF89SXIoIiNpIitzKSk7Y29uc3QgQT1Jcih5PT09InNhbmRib3giP18ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLFA9eT09PSJzYW5kYm94Ij9fLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50LFI9QS5zZWxlY3QoYFtpZD0iJHtzfSJdYCk7U21lKFIsWyJwb2ludCIsImNpcmNsZSIsImNyb3NzIl0sZC50eXBlLHMpO2NvbnN0IGo9ZC5kYi5nZXRWZXJ0aWNlcygpO2xldCBLO2NvbnN0IGVlPWQuZGIuZ2V0U3ViR3JhcGhzKCk7WGUuaW5mbygiU3ViZ3JhcGhzIC0gIixlZSk7Zm9yKGxldCBkZT1lZS5sZW5ndGgtMTtkZT49MDtkZS0tKUs9ZWVbZGVdLGQuZGIuYWRkVmVydGV4KEsuaWQse3RleHQ6Sy50aXRsZSx0eXBlOksubGFiZWxUeXBlfSwiZ3JvdXAiLHZvaWQgMCxLLmNsYXNzZXMsSy5kaXIpO2NvbnN0IGllPVIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJzdWJncmFwaHMiKSxvZT1PYW4oZC5kYik7dj1hd2FpdCBBYW4oaixzLEEsUCxkLG9lLHYpO2NvbnN0IHBlPVIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlcyBlZGdlUGF0aCIpLGJlPWQuZGIuZ2V0RWRnZXMoKTt2PU1hbihiZSxkLHYsUiksT2JqZWN0LmtleXMoVzcpLmZvckVhY2goZGU9Pntjb25zdCBYPVc3W2RlXTtYLnBhcmVudHx8di5jaGlsZHJlbi5wdXNoKFgpLG9lLmNoaWxkcmVuQnlJZFtkZV0hPT12b2lkIDAmJihYLmxhYmVscz1be3RleHQ6WC5sYWJlbFRleHQsbGF5b3V0T3B0aW9uczp7Im5vZGVMYWJlbHMucGxhY2VtZW50IjoiW0hfQ0VOVEVSLCBWX1RPUCwgSU5TSURFXSJ9LHdpZHRoOlgubGFiZWxEYXRhLndpZHRoLGhlaWdodDpYLmxhYmVsRGF0YS5oZWlnaHR9XSxkZWxldGUgWC54LGRlbGV0ZSBYLnksZGVsZXRlIFgud2lkdGgsZGVsZXRlIFguaGVpZ2h0KX0pLEtLZSh2LmNoaWxkcmVuLG9lKSxYZS5pbmZvKCJhZnRlciBsYXlvdXQiLEpTT04uc3RyaW5naWZ5KHYsbnVsbCwyKSk7Y29uc3QgbmU9YXdhaXQgVktlLmxheW91dCh2KTtXS2UoMCwwLG5lLmNoaWxkcmVuLFIsaWUsZCwwKSxYZS5pbmZvKCJhZnRlciBsYXlvdXQiLG5lKSwoc2U9bmUuZWRnZXMpPT1udWxsfHxzZS5tYXAoZGU9PntQYW4ocGUsZGUsZGUuZWRnZURhdGEsZCxvZSxzKX0pLHk5KHt9LFIsVC5kaWFncmFtUGFkZGluZyxULnVzZU1heFdpZHRoKSxwLnJlbW92ZSgpfSxXS2U9KGkscyx1LGQscCx2LGIpPT57dS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2lmKHkpaWYoVzdbeS5pZF0ub2Zmc2V0PXtwb3NYOnkueCtpLHBvc1k6eS55K3MseDppLHk6cyxkZXB0aDpiLHdpZHRoOnkud2lkdGgsaGVpZ2h0OnkuaGVpZ2h0fSx5LnR5cGU9PT0iZ3JvdXAiKXtjb25zdCBUPXAuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJzdWJncmFwaCIpO1QuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJzdWJncmFwaCBzdWJncmFwaC1sdmwtIitiJTUrIiBub2RlIikuYXR0cigieCIseS54K2kpLmF0dHIoInkiLHkueStzKS5hdHRyKCJ3aWR0aCIseS53aWR0aCkuYXR0cigiaGVpZ2h0Iix5LmhlaWdodCk7Y29uc3QgXz1ULmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxBPVZoKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/eS5sYWJlbERhdGEud2lkdGgvMjowO18uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7eS5sYWJlbHNbMF0ueCtpK3kueCtBfSwgJHt5LmxhYmVsc1swXS55K3MreS55KzN9KWApLF8ubm9kZSgpLmFwcGVuZENoaWxkKHkubGFiZWxEYXRhLmxhYmVsTm9kZSksWGUuaW5mbygiSWQgKFVHSCk9ICIseS50eXBlLHkubGFiZWxzKX1lbHNlIFhlLmluZm8oIklkIChVR0gpPSAiLHkuaWQpLHkuZWwuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7eS54K2kreS53aWR0aC8yfSwgJHt5Lnkrcyt5LmhlaWdodC8yfSlgKX0pLHUuZm9yRWFjaChmdW5jdGlvbih5KXt5JiZ5LnR5cGU9PT0iZ3JvdXAiJiZXS2UoaSt5Lngscyt5LnkseS5jaGlsZHJlbixkLHAsdixiKzEpfSl9LEZhbj17Z2V0Q2xhc3NlczpJYW4sZHJhdzpCYW59LFJhbj1pPT57bGV0IHM9IiI7Zm9yKGxldCB1PTA7dTw1O3UrKylzKz1gCiAgICAgIC5zdWJncmFwaC1sdmwtJHt1fSB7CiAgICAgICAgZmlsbDogJHtpW2BzdXJmYWNlJHt1fWBdfTsKICAgICAgICBzdHJva2U6ICR7aVtgc3VyZmFjZVBlZXIke3V9YF19OwogICAgICB9CiAgICBgO3JldHVybiBzfSxqYW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e2RiOl9VdCxyZW5kZXJlcjpGYW4scGFyc2VyOkdiZSxzdHlsZXM6aT0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7aS5ub2RlVGV4dENvbG9yfHxpLnRleHRDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHRleHQgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCBzcGFuIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCxzcGFuIHsKICAgIGZpbGw6ICR7aS5ub2RlVGV4dENvbG9yfHxpLnRleHRDb2xvcn07CiAgICBjb2xvcjogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuODU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7aS5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgZmlsbDogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke2kuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7aS5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQogIC8qIC5jbHVzdGVyIGRpdiB7CiAgICBjb2xvcjogJHtpLnRpdGxlQ29sb3J9OwogIH0gKi8KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHtpLnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtpLmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke2kudGV4dENvbG9yfTsKICB9CiAgLnN1YmdyYXBoIHsKICAgIHN0cm9rZS13aWR0aDoyOwogICAgcng6MzsKICB9CiAgLy8gLnN1YmdyYXBoLWx2bC0xIHsKICAvLyAgIGZpbGw6I2NjYzsKICAvLyAgIC8vIHN0cm9rZTpibGFjazsKICAvLyB9CgogIC5mbG93Y2hhcnQtbGFiZWwgdGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIH0KCiAgJHtSYW4oaSl9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBRdmU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihSLEYsaixLKXtmb3Ioaj1qfHx7fSxLPVIubGVuZ3RoO0stLTtqW1JbS11dPUYpO3JldHVybiBqfSxzPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMjAsMjFdLHU9WzEsOV0sZD1bMSwxMF0scD1bMSwxMV0sdj1bMSwxMl0sYj1bMSwxM10seT1bMSwxNl0sVD1bMSwxN10sXz17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsdGltZWxpbmU6NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsdGl0bGU6MTEsYWNjX3RpdGxlOjEyLGFjY190aXRsZV92YWx1ZToxMyxhY2NfZGVzY3I6MTQsYWNjX2Rlc2NyX3ZhbHVlOjE1LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTYsc2VjdGlvbjoxNyxwZXJpb2Rfc3RhdGVtZW50OjE4LGV2ZW50X3N0YXRlbWVudDoxOSxwZXJpb2Q6MjAsZXZlbnQ6MjEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6InRpbWVsaW5lIiw2OiJFT0YiLDg6IlNQQUNFIiwxMDoiTkVXTElORSIsMTE6InRpdGxlIiwxMjoiYWNjX3RpdGxlIiwxMzoiYWNjX3RpdGxlX3ZhbHVlIiwxNDoiYWNjX2Rlc2NyIiwxNToiYWNjX2Rlc2NyX3ZhbHVlIiwxNjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTc6InNlY3Rpb24iLDIwOiJwZXJpb2QiLDIxOiJldmVudCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbMTgsMV0sWzE5LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEYsaixLLGVlLGllLG9lLHBlKXt2YXIgYmU9b2UubGVuZ3RoLTE7c3dpdGNoKGllKXtjYXNlIDE6cmV0dXJuIG9lW2JlLTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOm9lW2JlLTFdLnB1c2gob2VbYmVdKSx0aGlzLiQ9b2VbYmUtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9b2VbYmVdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODplZS5nZXRDb21tb25EYigpLnNldERpYWdyYW1UaXRsZShvZVtiZV0uc3Vic3RyKDYpKSx0aGlzLiQ9b2VbYmVdLnN1YnN0cig2KTticmVhaztjYXNlIDk6dGhpcy4kPW9lW2JlXS50cmltKCksZWUuZ2V0Q29tbW9uRGIoKS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMTp0aGlzLiQ9b2VbYmVdLnRyaW0oKSxlZS5nZXRDb21tb25EYigpLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMjplZS5hZGRTZWN0aW9uKG9lW2JlXS5zdWJzdHIoOCkpLHRoaXMuJD1vZVtiZV0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTU6ZWUuYWRkVGFzayhvZVtiZV0sMCwiIiksdGhpcy4kPW9lW2JlXTticmVhaztjYXNlIDE2OmVlLmFkZEV2ZW50KG9lW2JlXS5zdWJzdHIoMikpLHRoaXMuJD1vZVtiZV07YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkocyxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnUsMTI6ZCwxNDpwLDE2OnYsMTc6YiwxODoxNCwxOToxNSwyMDp5LDIxOlR9LGkocyxbMiw3XSx7MTpbMiwxXX0pLGkocyxbMiwzXSksezk6MTgsMTE6dSwxMjpkLDE0OnAsMTY6diwxNzpiLDE4OjE0LDE5OjE1LDIwOnksMjE6VH0saShzLFsyLDVdKSxpKHMsWzIsNl0pLGkocyxbMiw4XSksezEzOlsxLDE5XX0sezE1OlsxLDIwXX0saShzLFsyLDExXSksaShzLFsyLDEyXSksaShzLFsyLDEzXSksaShzLFsyLDE0XSksaShzLFsyLDE1XSksaShzLFsyLDE2XSksaShzLFsyLDRdKSxpKHMsWzIsOV0pLGkocyxbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOmZ1bmN0aW9uKEYsail7aWYoai5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEYpO2Vsc2V7dmFyIEs9bmV3IEVycm9yKEYpO3Rocm93IEsuaGFzaD1qLEt9fSxwYXJzZTpmdW5jdGlvbihGKXt2YXIgaj10aGlzLEs9WzBdLGVlPVtdLGllPVtudWxsXSxvZT1bXSxwZT10aGlzLnRhYmxlLGJlPSIiLGFlPTAsbmU9MCxzZT0yLGRlPTEsWD1vZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxnZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFc9e3l5Ont9fTtmb3IodmFyIHhlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseGUpJiYoVy55eVt4ZV09dGhpcy55eVt4ZV0pO2dlLnNldElucHV0KEYsVy55eSksVy55eS5sZXhlcj1nZSxXLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBnZS55eWxsb2M+InUiJiYoZ2UueXlsbG9jPXt9KTt2YXIgVT1nZS55eWxsb2M7b2UucHVzaChVKTt2YXIgRmU9Z2Uub3B0aW9ucyYmZ2Uub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFcueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Vy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBQZSgpe3ZhciBFdDtyZXR1cm4gRXQ9ZWUucG9wKCl8fGdlLmxleCgpfHxkZSx0eXBlb2YgRXQhPSJudW1iZXIiJiYoRXQgaW5zdGFuY2VvZiBBcnJheSYmKGVlPUV0LEV0PWVlLnBvcCgpKSxFdD1qLnN5bWJvbHNfW0V0XXx8RXQpLEV0fWZvcih2YXIgamUsSWUsU2UsQ2Usa2U9e30sS2UsRnQsTmUsZ247Oyl7aWYoSWU9S1tLLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW0llXT9TZT10aGlzLmRlZmF1bHRBY3Rpb25zW0llXTooKGplPT09bnVsbHx8dHlwZW9mIGplPiJ1IikmJihqZT1QZSgpKSxTZT1wZVtJZV0mJnBlW0llXVtqZV0pLHR5cGVvZiBTZT4idSJ8fCFTZS5sZW5ndGh8fCFTZVswXSl7dmFyIF90PSIiO2duPVtdO2ZvcihLZSBpbiBwZVtJZV0pdGhpcy50ZXJtaW5hbHNfW0tlXSYmS2U+c2UmJmduLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tLZV0rIiciKTtnZS5zaG93UG9zaXRpb24/X3Q9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYWUrMSkrYDoKYCtnZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK2duLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bamVdfHxqZSkrIiciOl90PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGFlKzEpKyI6IFVuZXhwZWN0ZWQgIisoamU9PWRlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW2plXXx8amUpKyInIiksdGhpcy5wYXJzZUVycm9yKF90LHt0ZXh0OmdlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tqZV18fGplLGxpbmU6Z2UueXlsaW5lbm8sbG9jOlUsZXhwZWN0ZWQ6Z259KX1pZihTZVswXWluc3RhbmNlb2YgQXJyYXkmJlNlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrSWUrIiwgdG9rZW46ICIramUpO3N3aXRjaChTZVswXSl7Y2FzZSAxOksucHVzaChqZSksaWUucHVzaChnZS55eXRleHQpLG9lLnB1c2goZ2UueXlsbG9jKSxLLnB1c2goU2VbMV0pLGplPW51bGwsbmU9Z2UueXlsZW5nLGJlPWdlLnl5dGV4dCxhZT1nZS55eWxpbmVubyxVPWdlLnl5bGxvYzticmVhaztjYXNlIDI6aWYoRnQ9dGhpcy5wcm9kdWN0aW9uc19bU2VbMV1dWzFdLGtlLiQ9aWVbaWUubGVuZ3RoLUZ0XSxrZS5fJD17Zmlyc3RfbGluZTpvZVtvZS5sZW5ndGgtKEZ0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6b2Vbb2UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46b2Vbb2UubGVuZ3RoLShGdHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpvZVtvZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEZlJiYoa2UuXyQucmFuZ2U9W29lW29lLmxlbmd0aC0oRnR8fDEpXS5yYW5nZVswXSxvZVtvZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxDZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoa2UsW2JlLG5lLGFlLFcueXksU2VbMV0saWUsb2VdLmNvbmNhdChYKSksdHlwZW9mIENlPCJ1IilyZXR1cm4gQ2U7RnQmJihLPUsuc2xpY2UoMCwtMSpGdCoyKSxpZT1pZS5zbGljZSgwLC0xKkZ0KSxvZT1vZS5zbGljZSgwLC0xKkZ0KSksSy5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1NlWzFdXVswXSksaWUucHVzaChrZS4kKSxvZS5wdXNoKGtlLl8kKSxOZT1wZVtLW0subGVuZ3RoLTJdXVtLW0subGVuZ3RoLTFdXSxLLnB1c2goTmUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxBPWZ1bmN0aW9uKCl7dmFyIFI9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oaixLKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGosSyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3Ioail9LHNldElucHV0OmZ1bmN0aW9uKEYsail7cmV0dXJuIHRoaXMueXk9anx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Rix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Rix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Rix0aGlzLm1hdGNoZWQrPUY7dmFyIGo9Ri5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGo/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEZ9LHVucHV0OmZ1bmN0aW9uKEYpe3ZhciBqPUYubGVuZ3RoLEs9Ri5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUYrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWopLHRoaXMub2Zmc2V0LT1qO3ZhciBlZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxLLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Sy5sZW5ndGgtMSk7dmFyIGllPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpLPyhLLmxlbmd0aD09PWVlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrZWVbZWUubGVuZ3RoLUsubGVuZ3RoXS5sZW5ndGgtS1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWp9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baWVbMF0saWVbMF0rdGhpcy55eWxlbmctal0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKEYpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShGKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBGPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oRi5sZW5ndGg+MjA/Ii4uLiI6IiIpK0Yuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRj10aGlzLm1hdGNoO3JldHVybiBGLmxlbmd0aDwyMCYmKEYrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLUYubGVuZ3RoKSksKEYuc3Vic3RyKDAsMjApKyhGLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgRj10aGlzLnBhc3RJbnB1dCgpLGo9bmV3IEFycmF5KEYubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gRit0aGlzLnVwY29taW5nSW5wdXQoKStgCmAraisiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oRixqKXt2YXIgSyxlZSxpZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaWU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaWUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksZWU9RlswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksZWUmJih0aGlzLnl5bGluZW5vKz1lZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjplZT9lZVtlZS5sZW5ndGgtMV0ubGVuZ3RoLWVlW2VlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK0ZbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9RlswXSx0aGlzLm1hdGNoKz1GWzBdLHRoaXMubWF0Y2hlcz1GLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEZbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUZbMF0sSz10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxqLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEspcmV0dXJuIEs7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIG9lIGluIGllKXRoaXNbb2VdPWllW29lXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBGLGosSyxlZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpZT10aGlzLl9jdXJyZW50UnVsZXMoKSxvZT0wO29lPGllLmxlbmd0aDtvZSsrKWlmKEs9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpZVtvZV1dKSxLJiYoIWp8fEtbMF0ubGVuZ3RoPmpbMF0ubGVuZ3RoKSl7aWYoaj1LLGVlPW9lLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEY9dGhpcy50ZXN0X21hdGNoKEssaWVbb2VdKSxGIT09ITEpcmV0dXJuIEY7aWYodGhpcy5fYmFja3RyYWNrKXtqPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGo/KEY9dGhpcy50ZXN0X21hdGNoKGosaWVbZWVdKSxGIT09ITE/RjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIGo9dGhpcy5uZXh0KCk7cmV0dXJuIGp8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKGope3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChqKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgaj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBqPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oail7cmV0dXJuIGo9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhqfHwwKSxqPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbal06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oail7dGhpcy5iZWdpbihqKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihqLEssZWUsaWUpe3N3aXRjaChlZSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDEwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiA0O2Nhc2UgNjpyZXR1cm4gMTE7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxMjtjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE0O2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiAxNztjYXNlIDE1OnJldHVybiAyMTtjYXNlIDE2OnJldHVybiAyMDtjYXNlIDE3OnJldHVybiA2O2Nhc2UgMTg6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzp0aW1lbGluZVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzo6XHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFJ9KCk7Xy5sZXhlcj1BO2Z1bmN0aW9uIFAoKXt0aGlzLnl5PXt9fXJldHVybiBQLnByb3RvdHlwZT1fLF8uUGFyc2VyPVAsbmV3IFB9KCk7UXZlLnBhcnNlcj1RdmU7Y29uc3QgJGFuPVF2ZTtsZXQgWkQ9IiIsWUtlPTA7Y29uc3QgSnZlPVtdLElKPVtdLGVJPVtdLFhLZT0oKT0+SmplLFFLZT1mdW5jdGlvbigpe0p2ZS5sZW5ndGg9MCxJSi5sZW5ndGg9MCxaRD0iIixlSS5sZW5ndGg9MCxQZygpfSxKS2U9ZnVuY3Rpb24oaSl7WkQ9aSxKdmUucHVzaChpKX0sWktlPWZ1bmN0aW9uKCl7cmV0dXJuIEp2ZX0sZVdlPWZ1bmN0aW9uKCl7bGV0IGk9aVdlKCk7Y29uc3Qgcz0xMDA7bGV0IHU9MDtmb3IoOyFpJiZ1PHM7KWk9aVdlKCksdSsrO3JldHVybiBJSi5wdXNoKC4uLmVJKSxJSn0sdFdlPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPXtpZDpZS2UrKyxzZWN0aW9uOlpELHR5cGU6WkQsdGFzazppLHNjb3JlOnN8fDAsZXZlbnRzOnU/W3VdOltdfTtlSS5wdXNoKGQpfSxuV2U9ZnVuY3Rpb24oaSl7ZUkuZmluZCh1PT51LmlkPT09WUtlLTEpLmV2ZW50cy5wdXNoKGkpfSxyV2U9ZnVuY3Rpb24oaSl7Y29uc3Qgcz17c2VjdGlvbjpaRCx0eXBlOlpELGRlc2NyaXB0aW9uOmksdGFzazppLGNsYXNzZXM6W119O0lKLnB1c2gocyl9LGlXZT1mdW5jdGlvbigpe2NvbnN0IGk9ZnVuY3Rpb24odSl7cmV0dXJuIGVJW3VdLnByb2Nlc3NlZH07bGV0IHM9ITA7Zm9yKGNvbnN0W3UsZF1vZiBlSS5lbnRyaWVzKCkpaSh1KSxzPXMmJmQucHJvY2Vzc2VkO3JldHVybiBzfSx6YW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGFkZEV2ZW50Om5XZSxhZGRTZWN0aW9uOkpLZSxhZGRUYXNrOnRXZSxhZGRUYXNrT3JnOnJXZSxjbGVhcjpRS2UsZGVmYXVsdDp7Y2xlYXI6UUtlLGdldENvbW1vbkRiOlhLZSxhZGRTZWN0aW9uOkpLZSxnZXRTZWN0aW9uczpaS2UsZ2V0VGFza3M6ZVdlLGFkZFRhc2s6dFdlLGFkZFRhc2tPcmc6cldlLGFkZEV2ZW50Om5XZX0sZ2V0Q29tbW9uRGI6WEtlLGdldFNlY3Rpb25zOlpLZSxnZXRUYXNrczplV2V9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSkscWFuPTEyLE9KPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1pLmFwcGVuZCgicmVjdCIpO3JldHVybiB1LmF0dHIoIngiLHMueCksdS5hdHRyKCJ5IixzLnkpLHUuYXR0cigiZmlsbCIscy5maWxsKSx1LmF0dHIoInN0cm9rZSIscy5zdHJva2UpLHUuYXR0cigid2lkdGgiLHMud2lkdGgpLHUuYXR0cigiaGVpZ2h0IixzLmhlaWdodCksdS5hdHRyKCJyeCIscy5yeCksdS5hdHRyKCJyeSIscy5yeSkscy5jbGFzcyE9PXZvaWQgMCYmdS5hdHRyKCJjbGFzcyIscy5jbGFzcyksdX0sSGFuPWZ1bmN0aW9uKGkscyl7Y29uc3QgZD1pLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHMuY3gpLmF0dHIoImN5IixzLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSxwPWkuYXBwZW5kKCJnIik7cC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixzLmN4LTE1LzMpLmF0dHIoImN5IixzLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxwLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHMuY3grMTUvMykuYXR0cigiY3kiLHMuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIHYoVCl7Y29uc3QgXz1sRCgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZSgzKihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7VC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsXykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcy5jeCsiLCIrKHMuY3krMikrIikiKX1mdW5jdGlvbiBiKFQpe2NvbnN0IF89bEQoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7VC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsXykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcy5jeCsiLCIrKHMuY3krNykrIikiKX1mdW5jdGlvbiB5KFQpe1QuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLHMuY3gtNSkuYXR0cigieTEiLHMuY3krNykuYXR0cigieDIiLHMuY3grNSkuYXR0cigieTIiLHMuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX1yZXR1cm4gcy5zY29yZT4zP3YocCk6cy5zY29yZTwzP2IocCk6eShwKSxkfSxWYW49ZnVuY3Rpb24oaSxzKXtjb25zdCB1PWkuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gdS5hdHRyKCJjeCIscy5jeCksdS5hdHRyKCJjeSIscy5jeSksdS5hdHRyKCJjbGFzcyIsImFjdG9yLSIrcy5wb3MpLHUuYXR0cigiZmlsbCIscy5maWxsKSx1LmF0dHIoInN0cm9rZSIscy5zdHJva2UpLHUuYXR0cigiciIscy5yKSx1LmNsYXNzIT09dm9pZCAwJiZ1LmF0dHIoImNsYXNzIix1LmNsYXNzKSxzLnRpdGxlIT09dm9pZCAwJiZ1LmFwcGVuZCgidGl0bGUiKS50ZXh0KHMudGl0bGUpLHV9LHNXZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9cy50ZXh0LnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIiAiKSxkPWkuYXBwZW5kKCJ0ZXh0Iik7ZC5hdHRyKCJ4IixzLngpLGQuYXR0cigieSIscy55KSxkLmF0dHIoImNsYXNzIiwibGVnZW5kIiksZC5zdHlsZSgidGV4dC1hbmNob3IiLHMuYW5jaG9yKSxzLmNsYXNzIT09dm9pZCAwJiZkLmF0dHIoImNsYXNzIixzLmNsYXNzKTtjb25zdCBwPWQuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBwLmF0dHIoIngiLHMueCtzLnRleHRNYXJnaW4qMikscC50ZXh0KHUpLGR9LFVhbj1mdW5jdGlvbihpLHMpe2Z1bmN0aW9uIHUocCx2LGIseSxUKXtyZXR1cm4gcCsiLCIrdisiICIrKHArYikrIiwiK3YrIiAiKyhwK2IpKyIsIisodit5LVQpKyIgIisocCtiLVQqMS4yKSsiLCIrKHYreSkrIiAiK3ArIiwiKyh2K3kpfWNvbnN0IGQ9aS5hcHBlbmQoInBvbHlnb24iKTtkLmF0dHIoInBvaW50cyIsdShzLngscy55LDUwLDIwLDcpKSxkLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxzLnk9cy55K3MubGFiZWxNYXJnaW4scy54PXMueCsuNSpzLmxhYmVsTWFyZ2luLHNXZShpLHMpfSxHYW49ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9aS5hcHBlbmQoImciKSxwPVp2ZSgpO3AueD1zLngscC55PXMueSxwLmZpbGw9cy5maWxsLHAud2lkdGg9dS53aWR0aCxwLmhlaWdodD11LmhlaWdodCxwLmNsYXNzPSJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrcy5udW0scC5yeD0zLHAucnk9MyxPSihkLHApLG9XZSh1KShzLnRleHQsZCxwLngscC55LHAud2lkdGgscC5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrcy5udW19LHUscy5jb2xvdXIpfTtsZXQgYVdlPS0xO2NvbnN0IEthbj1mdW5jdGlvbihpLHMsdSl7Y29uc3QgZD1zLngrdS53aWR0aC8yLHA9aS5hcHBlbmQoImciKTthV2UrKztjb25zdCB2PTMwMCs1KjMwO3AuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJ0YXNrIithV2UpLmF0dHIoIngxIixkKS5hdHRyKCJ5MSIscy55KS5hdHRyKCJ4MiIsZCkuYXR0cigieTIiLHYpLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxIYW4ocCx7Y3g6ZCxjeTozMDArKDUtcy5zY29yZSkqMzAsc2NvcmU6cy5zY29yZX0pO2NvbnN0IGI9WnZlKCk7Yi54PXMueCxiLnk9cy55LGIuZmlsbD1zLmZpbGwsYi53aWR0aD11LndpZHRoLGIuaGVpZ2h0PXUuaGVpZ2h0LGIuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrcy5udW0sYi5yeD0zLGIucnk9MyxPSihwLGIpLHMueCsxNCxvV2UodSkocy50YXNrLHAsYi54LGIueSxiLndpZHRoLGIuaGVpZ2h0LHtjbGFzczoidGFzayJ9LHUscy5jb2xvdXIpfSxXYW49ZnVuY3Rpb24oaSxzKXtPSihpLHt4OnMuc3RhcnR4LHk6cy5zdGFydHksd2lkdGg6cy5zdG9weC1zLnN0YXJ0eCxoZWlnaHQ6cy5zdG9weS1zLnN0YXJ0eSxmaWxsOnMuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSxZYW49ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCwidGV4dC1hbmNob3IiOiJzdGFydCIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MH19LFp2ZT1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LG9XZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGkocCx2LGIseSxULF8sQSxQKXtjb25zdCBSPXYuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitULzIpLmF0dHIoInkiLHkrXy8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixQKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHApO2QoUixBKX1mdW5jdGlvbiBzKHAsdixiLHksVCxfLEEsUCxSKXtjb25zdHt0YXNrRm9udFNpemU6Rix0YXNrRm9udEZhbWlseTpqfT1QLEs9cC5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCBlZT0wO2VlPEsubGVuZ3RoO2VlKyspe2NvbnN0IGllPWVlKkYtRiooSy5sZW5ndGgtMSkvMixvZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrVC8yKS5hdHRyKCJ5Iix5KS5hdHRyKCJmaWxsIixSKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixGKS5zdHlsZSgiZm9udC1mYW1pbHkiLGopO29lLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiK1QvMikuYXR0cigiZHkiLGllKS50ZXh0KEtbZWVdKSxvZS5hdHRyKCJ5Iix5K18vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGQob2UsQSl9fWZ1bmN0aW9uIHUocCx2LGIseSxULF8sQSxQKXtjb25zdCBSPXYuYXBwZW5kKCJzd2l0Y2giKSxqPVIuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIseSkuYXR0cigid2lkdGgiLFQpLmF0dHIoImhlaWdodCIsXykuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2ouYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHApLHMocCxSLGIseSxULF8sQSxQKSxkKGosQSl9ZnVuY3Rpb24gZChwLHYpe2Zvcihjb25zdCBiIGluIHYpYiBpbiB2JiZwLmF0dHIoYix2W2JdKX1yZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIHAudGV4dFBsYWNlbWVudD09PSJmbyI/dTpwLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOnN9fSgpLFhhbj1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX07ZnVuY3Rpb24gY1dlKGkscyl7aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHU9SXIodGhpcyksZD11LnRleHQoKS5zcGxpdCgvKFxzK3w8YnI+KS8pLnJldmVyc2UoKSxwLHY9W10sYj0xLjEseT11LmF0dHIoInkiKSxUPXBhcnNlRmxvYXQodS5hdHRyKCJkeSIpKSxfPXUudGV4dChudWxsKS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsMCkuYXR0cigieSIseSkuYXR0cigiZHkiLFQrImVtIik7Zm9yKGxldCBBPTA7QTxkLmxlbmd0aDtBKyspcD1kW2QubGVuZ3RoLTEtQV0sdi5wdXNoKHApLF8udGV4dCh2LmpvaW4oIiAiKS50cmltKCkpLChfLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT5zfHxwPT09Ijxicj4iKSYmKHYucG9wKCksXy50ZXh0KHYuam9pbigiICIpLnRyaW0oKSkscD09PSI8YnI+Ij92PVsiIl06dj1bcF0sXz11LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5Iix5KS5hdHRyKCJkeSIsYisiZW0iKS50ZXh0KHApKX0pfWNvbnN0IFFhbj1mdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPXUlcWFuLTEsdj1pLmFwcGVuZCgiZyIpO3Muc2VjdGlvbj1wLHYuYXR0cigiY2xhc3MiLChzLmNsYXNzP3MuY2xhc3MrIiAiOiIiKSsidGltZWxpbmUtbm9kZSAiKygic2VjdGlvbi0iK3ApKTtjb25zdCBiPXYuYXBwZW5kKCJnIikseT12LmFwcGVuZCgiZyIpLF89eS5hcHBlbmQoInRleHQiKS50ZXh0KHMuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoY1dlLHMud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksQT1kLmZvbnRTaXplJiZkLmZvbnRTaXplLnJlcGxhY2U/ZC5mb250U2l6ZS5yZXBsYWNlKCJweCIsIiIpOmQuZm9udFNpemU7cmV0dXJuIHMuaGVpZ2h0PV8uaGVpZ2h0K0EqMS4xKi41K3MucGFkZGluZyxzLmhlaWdodD1NYXRoLm1heChzLmhlaWdodCxzLm1heEhlaWdodCkscy53aWR0aD1zLndpZHRoKzIqcy5wYWRkaW5nLHkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcy53aWR0aC8yKyIsICIrcy5wYWRkaW5nLzIrIikiKSxaYW4oYixzLHApLHN9LEphbj1mdW5jdGlvbihpLHMsdSl7Y29uc3QgZD1pLmFwcGVuZCgiZyIpLHY9ZC5hcHBlbmQoInRleHQiKS50ZXh0KHMuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoY1dlLHMud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksYj11LmZvbnRTaXplJiZ1LmZvbnRTaXplLnJlcGxhY2U/dS5mb250U2l6ZS5yZXBsYWNlKCJweCIsIiIpOnUuZm9udFNpemU7cmV0dXJuIGQucmVtb3ZlKCksdi5oZWlnaHQrYioxLjEqLjUrcy5wYWRkaW5nfSxaYW49ZnVuY3Rpb24oaSxzLHUpe2kuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrcy5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrcy50eXBlKS5hdHRyKCJkIixgTTAgJHtzLmhlaWdodC01fSB2JHstcy5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke3Mud2lkdGgtMio1fSBxNSwwIDUsNSB2JHtzLmhlaWdodC01fSBIMCBaYCksaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK3UpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIscy5oZWlnaHQpLmF0dHIoIngyIixzLndpZHRoKS5hdHRyKCJ5MiIscy5oZWlnaHQpfSxzUz17ZHJhd1JlY3Q6T0osZHJhd0NpcmNsZTpWYW4sZHJhd1NlY3Rpb246R2FuLGRyYXdUZXh0OnNXZSxkcmF3TGFiZWw6VWFuLGRyYXdUYXNrOkthbixkcmF3QmFja2dyb3VuZFJlY3Q6V2FuLGdldFRleHRPYmo6WWFuLGdldE5vdGVSZWN0Olp2ZSxpbml0R3JhcGhpY3M6WGFuLGRyYXdOb2RlOlFhbixnZXRWaXJ0dWFsTm9kZUhlaWdodDpKYW59LGVvbj1mdW5jdGlvbihpLHMsdSxkKXt2YXIgWCxnZTtjb25zdCBwPXF0KCksdj1wLmxlZnRNYXJnaW4/PzUwO1hlLmRlYnVnKCJ0aW1lbGluZSIsZC5kYik7Y29uc3QgYj1wLnNlY3VyaXR5TGV2ZWw7bGV0IHk7Yj09PSJzYW5kYm94IiYmKHk9SXIoIiNpIitzKSk7Y29uc3QgXz1JcihiPT09InNhbmRib3giP3kubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdCgiIyIrcyk7Xy5hcHBlbmQoImciKTtjb25zdCBBPWQuZGIuZ2V0VGFza3MoKSxQPWQuZGIuZ2V0Q29tbW9uRGIoKS5nZXREaWFncmFtVGl0bGUoKTtYZS5kZWJ1ZygidGFzayIsQSksc1MuaW5pdEdyYXBoaWNzKF8pO2NvbnN0IFI9ZC5kYi5nZXRTZWN0aW9ucygpO1hlLmRlYnVnKCJzZWN0aW9ucyIsUik7bGV0IEY9MCxqPTAsSz0wLGVlPTAsaWU9NTArdixvZT01MDtlZT01MDtsZXQgcGU9MCxiZT0hMDtSLmZvckVhY2goZnVuY3Rpb24oVyl7Y29uc3QgeGU9e251bWJlcjpwZSxkZXNjcjpXLHNlY3Rpb246cGUsd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OkZ9LFU9c1MuZ2V0VmlydHVhbE5vZGVIZWlnaHQoXyx4ZSxwKTtYZS5kZWJ1Zygic2VjdGlvbkhlaWdodCBiZWZvcmUgZHJhdyIsVSksRj1NYXRoLm1heChGLFUrMjApfSk7bGV0IGFlPTAsbmU9MDtYZS5kZWJ1ZygidGFza3MubGVuZ3RoIixBLmxlbmd0aCk7Zm9yKGNvbnN0W1cseGVdb2YgQS5lbnRyaWVzKCkpe2NvbnN0IFU9e251bWJlcjpXLGRlc2NyOnhlLHNlY3Rpb246eGUuc2VjdGlvbix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6an0sRmU9c1MuZ2V0VmlydHVhbE5vZGVIZWlnaHQoXyxVLHApO1hlLmRlYnVnKCJ0YXNrSGVpZ2h0IGJlZm9yZSBkcmF3IixGZSksaj1NYXRoLm1heChqLEZlKzIwKSxhZT1NYXRoLm1heChhZSx4ZS5ldmVudHMubGVuZ3RoKTtsZXQgUGU9MDtmb3IobGV0IGplPTA7amU8eGUuZXZlbnRzLmxlbmd0aDtqZSsrKXtjb25zdCBTZT17ZGVzY3I6eGUuZXZlbnRzW2plXSxzZWN0aW9uOnhlLnNlY3Rpb24sbnVtYmVyOnhlLnNlY3Rpb24sd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OjUwfTtQZSs9c1MuZ2V0VmlydHVhbE5vZGVIZWlnaHQoXyxTZSxwKX1uZT1NYXRoLm1heChuZSxQZSl9WGUuZGVidWcoIm1heFNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLEYpLFhlLmRlYnVnKCJtYXhUYXNrSGVpZ2h0IGJlZm9yZSBkcmF3IixqKSxSJiZSLmxlbmd0aD4wP1IuZm9yRWFjaChXPT57Y29uc3QgeGU9QS5maWx0ZXIoamU9PmplLnNlY3Rpb249PT1XKSxVPXtudW1iZXI6cGUsZGVzY3I6VyxzZWN0aW9uOnBlLHdpZHRoOjIwMCpNYXRoLm1heCh4ZS5sZW5ndGgsMSktNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6Rn07WGUuZGVidWcoInNlY3Rpb25Ob2RlIixVKTtjb25zdCBGZT1fLmFwcGVuZCgiZyIpLFBlPXNTLmRyYXdOb2RlKEZlLFUscGUscCk7WGUuZGVidWcoInNlY3Rpb25Ob2RlIG91dHB1dCIsUGUpLEZlLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2llfSwgJHtlZX0pYCksb2UrPUYrNTAseGUubGVuZ3RoPjAmJnVXZShfLHhlLHBlLGllLG9lLGoscCxhZSxuZSxGLCExKSxpZSs9MjAwKk1hdGgubWF4KHhlLmxlbmd0aCwxKSxvZT1lZSxwZSsrfSk6KGJlPSExLHVXZShfLEEscGUsaWUsb2UsaixwLGFlLG5lLEYsITApKTtjb25zdCBzZT1fLm5vZGUoKS5nZXRCQm94KCk7WGUuZGVidWcoImJvdW5kcyIsc2UpLFAmJl8uYXBwZW5kKCJ0ZXh0IikudGV4dChQKS5hdHRyKCJ4IixzZS53aWR0aC8yLXYpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDIwKSxLPWJlP0YraisxNTA6aisxMDAsXy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVXcmFwcGVyIikuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHYpLmF0dHIoInkxIixLKS5hdHRyKCJ4MiIsc2Uud2lkdGgrMyp2KS5hdHRyKCJ5MiIsSykuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKSx5OSh2b2lkIDAsXywoKFg9cC50aW1lbGluZSk9PW51bGw/dm9pZCAwOlgucGFkZGluZyk/PzUwLCgoZ2U9cC50aW1lbGluZSk9PW51bGw/dm9pZCAwOmdlLnVzZU1heFdpZHRoKT8/ITEpfSx1V2U9ZnVuY3Rpb24oaSxzLHUsZCxwLHYsYix5LFQsXyxBKXt2YXIgUDtmb3IoY29uc3QgUiBvZiBzKXtjb25zdCBGPXtkZXNjcjpSLnRhc2ssc2VjdGlvbjp1LG51bWJlcjp1LHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDp2fTtYZS5kZWJ1ZygidGFza05vZGUiLEYpO2NvbnN0IGo9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRhc2tXcmFwcGVyIiksZWU9c1MuZHJhd05vZGUoaixGLHUsYikuaGVpZ2h0O2lmKFhlLmRlYnVnKCJ0YXNrSGVpZ2h0IGFmdGVyIGRyYXciLGVlKSxqLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2R9LCAke3B9KWApLHY9TWF0aC5tYXgodixlZSksUi5ldmVudHMpe2NvbnN0IGllPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lV3JhcHBlciIpO2xldCBvZT12O3ArPTEwMCxvZT1vZSt0b24oaSxSLmV2ZW50cyx1LGQscCxiKSxwLT0xMDAsaWUuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGQrMTkwLzIpLmF0dHIoInkxIixwK3YpLmF0dHIoIngyIixkKzE5MC8yKS5hdHRyKCJ5MiIscCt2KyhBP3Y6XykrVCsxMjApLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjUsNSIpfWQ9ZCsyMDAsQSYmISgoUD1iLnRpbWVsaW5lKSE9bnVsbCYmUC5kaXNhYmxlTXVsdGljb2xvcikmJnUrK31wPXAtMTB9LHRvbj1mdW5jdGlvbihpLHMsdSxkLHAsdil7bGV0IGI9MDtjb25zdCB5PXA7cD1wKzEwMDtmb3IoY29uc3QgVCBvZiBzKXtjb25zdCBfPXtkZXNjcjpULHNlY3Rpb246dSxudW1iZXI6dSx3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6NTB9O1hlLmRlYnVnKCJldmVudE5vZGUiLF8pO2NvbnN0IEE9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImV2ZW50V3JhcHBlciIpLFI9c1MuZHJhd05vZGUoQSxfLHUsdikuaGVpZ2h0O2I9YitSLEEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7ZH0sICR7cH0pYCkscD1wKzEwK1J9cmV0dXJuIHA9eSxifSxub249e3NldENvbmY6KCk9Pnt9LGRyYXc6ZW9ufSxyb249aT0+e2xldCBzPSIiO2ZvcihsZXQgdT0wO3U8aS5USEVNRV9DT0xPUl9MSU1JVDt1KyspaVsibGluZUNvbG9yIit1XT1pWyJsaW5lQ29sb3IiK3VdfHxpWyJjU2NhbGVJbnYiK3VdLF9DKGlbImxpbmVDb2xvciIrdV0pP2lbImxpbmVDb2xvciIrdV09R3MoaVsibGluZUNvbG9yIit1XSwyMCk6aVsibGluZUNvbG9yIit1XT1mYShpWyJsaW5lQ29sb3IiK3VdLDIwKTtmb3IobGV0IHU9MDt1PGkuVEhFTUVfQ09MT1JfTElNSVQ7dSsrKXtjb25zdCBkPSIiKygxNy0zKnUpO3MrPWAKICAgIC5zZWN0aW9uLSR7dS0xfSByZWN0LCAuc2VjdGlvbi0ke3UtMX0gcGF0aCwgLnNlY3Rpb24tJHt1LTF9IGNpcmNsZSwgLnNlY3Rpb24tJHt1LTF9IHBhdGggIHsKICAgICAgZmlsbDogJHtpWyJjU2NhbGUiK3VdfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7dS0xfSB0ZXh0IHsKICAgICBmaWxsOiAke2lbImNTY2FsZUxhYmVsIit1XX07CiAgICB9CiAgICAubm9kZS1pY29uLSR7dS0xfSB7CiAgICAgIGZvbnQtc2l6ZTogNDBweDsKICAgICAgY29sb3I6ICR7aVsiY1NjYWxlTGFiZWwiK3VdfTsKICAgIH0KICAgIC5zZWN0aW9uLWVkZ2UtJHt1LTF9ewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlIit1XX07CiAgICB9CiAgICAuZWRnZS1kZXB0aC0ke3UtMX17CiAgICAgIHN0cm9rZS13aWR0aDogJHtkfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7dS0xfSBsaW5lIHsKICAgICAgc3Ryb2tlOiAke2lbImNTY2FsZUludiIrdV19IDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQoKICAgIC5saW5lV3JhcHBlciBsaW5lewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlTGFiZWwiK3VdfSA7CiAgICB9CgogICAgLmRpc2FibGVkLCAuZGlzYWJsZWQgY2lyY2xlLCAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6IGxpZ2h0Z3JheTsKICAgIH0KICAgIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogI2VmZWZlZjsKICAgIH0KICAgIGB9cmV0dXJuIHN9LGlvbj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7ZGI6emFuLHJlbmRlcmVyOm5vbixwYXJzZXI6JGFuLHN0eWxlczppPT5gCiAgLmVkZ2UgewogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAke3JvbihpKX0KICAuc2VjdGlvbi1yb290IHJlY3QsIC5zZWN0aW9uLXJvb3QgcGF0aCwgLnNlY3Rpb24tcm9vdCBjaXJjbGUgIHsKICAgIGZpbGw6ICR7aS5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7aS5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAuZXZlbnRXcmFwcGVyICB7CiAgIGZpbHRlcjogYnJpZ2h0bmVzcygxMjAlKTsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBld2U9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihiZSxhZSxuZSxzZSl7Zm9yKG5lPW5lfHx7fSxzZT1iZS5sZW5ndGg7c2UtLTtuZVtiZVtzZV1dPWFlKTtyZXR1cm4gbmV9LHM9WzEsNF0sdT1bMSwxM10sZD1bMSwxMl0scD1bMSwxNV0sdj1bMSwxNl0sYj1bMSwyMF0seT1bMSwxOV0sVD1bNiw3LDhdLF89WzEsMjZdLEE9WzEsMjRdLFA9WzEsMjVdLFI9WzYsNywxMV0sRj1bMSw2LDEzLDE1LDE2LDE5LDIyXSxqPVsxLDMzXSxLPVsxLDM0XSxlZT1bMSw2LDcsMTEsMTMsMTUsMTYsMTksMjJdLGllPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtaW5kTWFwOjQsc3BhY2VMaW5lczo1LFNQQUNFTElORTo2LE5MOjcsTUlORE1BUDo4LGRvY3VtZW50Ojksc3RvcDoxMCxFT0Y6MTEsc3RhdGVtZW50OjEyLFNQQUNFTElTVDoxMyxub2RlOjE0LElDT046MTUsQ0xBU1M6MTYsbm9kZVdpdGhJZDoxNyxub2RlV2l0aG91dElkOjE4LE5PREVfRFNUQVJUOjE5LE5PREVfREVTQ1I6MjAsTk9ERV9ERU5EOjIxLE5PREVfSUQ6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IlNQQUNFTElORSIsNzoiTkwiLDg6Ik1JTkRNQVAiLDExOiJFT0YiLDEzOiJTUEFDRUxJU1QiLDE1OiJJQ09OIiwxNjoiQ0xBU1MiLDE5OiJOT0RFX0RTVEFSVCIsMjA6Ik5PREVfREVTQ1IiLDIxOiJOT0RFX0RFTkQiLDIyOiJOT0RFX0lEIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFs1LDFdLFs1LDJdLFs1LDJdLFs0LDJdLFs0LDNdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzksM10sWzksMl0sWzEyLDJdLFsxMiwyXSxbMTIsMl0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTQsMV0sWzE0LDFdLFsxOCwzXSxbMTcsMV0sWzE3LDRdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGFlLG5lLHNlLGRlLFgsZ2UsVyl7dmFyIHhlPWdlLmxlbmd0aC0xO3N3aXRjaChYKXtjYXNlIDY6Y2FzZSA3OnJldHVybiBkZTtjYXNlIDg6ZGUuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgTkwgIik7YnJlYWs7Y2FzZSA5OmRlLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRiAiKTticmVhaztjYXNlIDExOmRlLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDEyOmRlLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRjIgIik7YnJlYWs7Y2FzZSAxNTpkZS5nZXRMb2dnZXIoKS5pbmZvKCJOb2RlOiAiLGdlW3hlXS5pZCksZGUuYWRkTm9kZShnZVt4ZS0xXS5sZW5ndGgsZ2VbeGVdLmlkLGdlW3hlXS5kZXNjcixnZVt4ZV0udHlwZSk7YnJlYWs7Y2FzZSAxNjpkZS5nZXRMb2dnZXIoKS50cmFjZSgiSWNvbjogIixnZVt4ZV0pLGRlLmRlY29yYXRlTm9kZSh7aWNvbjpnZVt4ZV19KTticmVhaztjYXNlIDE3OmNhc2UgMjE6ZGUuZGVjb3JhdGVOb2RlKHtjbGFzczpnZVt4ZV19KTticmVhaztjYXNlIDE4OmRlLmdldExvZ2dlcigpLnRyYWNlKCJTUEFDRUxJU1QiKTticmVhaztjYXNlIDE5OmRlLmdldExvZ2dlcigpLnRyYWNlKCJOb2RlOiAiLGdlW3hlXS5pZCksZGUuYWRkTm9kZSgwLGdlW3hlXS5pZCxnZVt4ZV0uZGVzY3IsZ2VbeGVdLnR5cGUpO2JyZWFrO2Nhc2UgMjA6ZGUuZGVjb3JhdGVOb2RlKHtpY29uOmdlW3hlXX0pO2JyZWFrO2Nhc2UgMjU6ZGUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLGdlW3hlLTJdKSx0aGlzLiQ9e2lkOmdlW3hlLTFdLGRlc2NyOmdlW3hlLTFdLHR5cGU6ZGUuZ2V0VHlwZShnZVt4ZS0yXSxnZVt4ZV0pfTticmVhaztjYXNlIDI2OnRoaXMuJD17aWQ6Z2VbeGVdLGRlc2NyOmdlW3hlXSx0eXBlOmRlLm5vZGVUeXBlLkRFRkFVTFR9O2JyZWFrO2Nhc2UgMjc6ZGUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLGdlW3hlLTNdKSx0aGlzLiQ9e2lkOmdlW3hlLTNdLGRlc2NyOmdlW3hlLTFdLHR5cGU6ZGUuZ2V0VHlwZShnZVt4ZS0yXSxnZVt4ZV0pfTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjpbMSw1XSw4OnN9LHsxOlszXX0sezE6WzIsMV19LHs0OjYsNjpbMSw3XSw3OlsxLDhdLDg6c30sezY6dSw3OlsxLDEwXSw5OjksMTI6MTEsMTM6ZCwxNDoxNCwxNTpwLDE2OnYsMTc6MTcsMTg6MTgsMTk6YiwyMjp5fSxpKFQsWzIsM10pLHsxOlsyLDJdfSxpKFQsWzIsNF0pLGkoVCxbMiw1XSksezE6WzIsNl0sNjp1LDEyOjIxLDEzOmQsMTQ6MTQsMTU6cCwxNjp2LDE3OjE3LDE4OjE4LDE5OmIsMjI6eX0sezY6dSw5OjIyLDEyOjExLDEzOmQsMTQ6MTQsMTU6cCwxNjp2LDE3OjE3LDE4OjE4LDE5OmIsMjI6eX0sezY6Xyw3OkEsMTA6MjMsMTE6UH0saShSLFsyLDIyXSx7MTc6MTcsMTg6MTgsMTQ6MjcsMTU6WzEsMjhdLDE2OlsxLDI5XSwxOTpiLDIyOnl9KSxpKFIsWzIsMThdKSxpKFIsWzIsMTldKSxpKFIsWzIsMjBdKSxpKFIsWzIsMjFdKSxpKFIsWzIsMjNdKSxpKFIsWzIsMjRdKSxpKFIsWzIsMjZdLHsxOTpbMSwzMF19KSx7MjA6WzEsMzFdfSx7NjpfLDc6QSwxMDozMiwxMTpQfSx7MTpbMiw3XSw2OnUsMTI6MjEsMTM6ZCwxNDoxNCwxNTpwLDE2OnYsMTc6MTcsMTg6MTgsMTk6YiwyMjp5fSxpKEYsWzIsMTRdLHs3OmosMTE6S30pLGkoZWUsWzIsOF0pLGkoZWUsWzIsOV0pLGkoZWUsWzIsMTBdKSxpKFIsWzIsMTVdKSxpKFIsWzIsMTZdKSxpKFIsWzIsMTddKSx7MjA6WzEsMzVdfSx7MjE6WzEsMzZdfSxpKEYsWzIsMTNdLHs3OmosMTE6S30pLGkoZWUsWzIsMTFdKSxpKGVlLFsyLDEyXSksezIxOlsxLDM3XX0saShSLFsyLDI1XSksaShSLFsyLDI3XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDY6WzIsMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oYWUsbmUpe2lmKG5lLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoYWUpO2Vsc2V7dmFyIHNlPW5ldyBFcnJvcihhZSk7dGhyb3cgc2UuaGFzaD1uZSxzZX19LHBhcnNlOmZ1bmN0aW9uKGFlKXt2YXIgbmU9dGhpcyxzZT1bMF0sZGU9W10sWD1bbnVsbF0sZ2U9W10sVz10aGlzLnRhYmxlLHhlPSIiLFU9MCxGZT0wLFBlPTIsamU9MSxJZT1nZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxTZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLENlPXt5eTp7fX07Zm9yKHZhciBrZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGtlKSYmKENlLnl5W2tlXT10aGlzLnl5W2tlXSk7U2Uuc2V0SW5wdXQoYWUsQ2UueXkpLENlLnl5LmxleGVyPVNlLENlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBTZS55eWxsb2M+InUiJiYoU2UueXlsbG9jPXt9KTt2YXIgS2U9U2UueXlsbG9jO2dlLnB1c2goS2UpO3ZhciBGdD1TZS5vcHRpb25zJiZTZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgQ2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Q2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gTmUoKXt2YXIgT247cmV0dXJuIE9uPWRlLnBvcCgpfHxTZS5sZXgoKXx8amUsdHlwZW9mIE9uIT0ibnVtYmVyIiYmKE9uIGluc3RhbmNlb2YgQXJyYXkmJihkZT1PbixPbj1kZS5wb3AoKSksT249bmUuc3ltYm9sc19bT25dfHxPbiksT259Zm9yKHZhciBnbixfdCxFdCxHdCxsbj17fSx4dCxQdCxRZSxEdDs7KXtpZihfdD1zZVtzZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tfdF0/RXQ9dGhpcy5kZWZhdWx0QWN0aW9uc1tfdF06KChnbj09PW51bGx8fHR5cGVvZiBnbj4idSIpJiYoZ249TmUoKSksRXQ9V1tfdF0mJldbX3RdW2duXSksdHlwZW9mIEV0PiJ1Inx8IUV0Lmxlbmd0aHx8IUV0WzBdKXt2YXIga3Q9IiI7RHQ9W107Zm9yKHh0IGluIFdbX3RdKXRoaXMudGVybWluYWxzX1t4dF0mJnh0PlBlJiZEdC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19beHRdKyInIik7U2Uuc2hvd1Bvc2l0aW9uP2t0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFUrMSkrYDoKYCtTZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0R0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bZ25dfHxnbikrIiciOmt0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFUrMSkrIjogVW5leHBlY3RlZCAiKyhnbj09amU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bZ25dfHxnbikrIiciKSx0aGlzLnBhcnNlRXJyb3Ioa3Qse3RleHQ6U2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW2duXXx8Z24sbGluZTpTZS55eWxpbmVubyxsb2M6S2UsZXhwZWN0ZWQ6RHR9KX1pZihFdFswXWluc3RhbmNlb2YgQXJyYXkmJkV0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrX3QrIiwgdG9rZW46ICIrZ24pO3N3aXRjaChFdFswXSl7Y2FzZSAxOnNlLnB1c2goZ24pLFgucHVzaChTZS55eXRleHQpLGdlLnB1c2goU2UueXlsbG9jKSxzZS5wdXNoKEV0WzFdKSxnbj1udWxsLEZlPVNlLnl5bGVuZyx4ZT1TZS55eXRleHQsVT1TZS55eWxpbmVubyxLZT1TZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKFB0PXRoaXMucHJvZHVjdGlvbnNfW0V0WzFdXVsxXSxsbi4kPVhbWC5sZW5ndGgtUHRdLGxuLl8kPXtmaXJzdF9saW5lOmdlW2dlLmxlbmd0aC0oUHR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpnZVtnZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpnZVtnZS5sZW5ndGgtKFB0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmdlW2dlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sRnQmJihsbi5fJC5yYW5nZT1bZ2VbZ2UubGVuZ3RoLShQdHx8MSldLnJhbmdlWzBdLGdlW2dlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLEd0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShsbixbeGUsRmUsVSxDZS55eSxFdFsxXSxYLGdlXS5jb25jYXQoSWUpKSx0eXBlb2YgR3Q8InUiKXJldHVybiBHdDtQdCYmKHNlPXNlLnNsaWNlKDAsLTEqUHQqMiksWD1YLnNsaWNlKDAsLTEqUHQpLGdlPWdlLnNsaWNlKDAsLTEqUHQpKSxzZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0V0WzFdXVswXSksWC5wdXNoKGxuLiQpLGdlLnB1c2gobG4uXyQpLFFlPVdbc2Vbc2UubGVuZ3RoLTJdXVtzZVtzZS5sZW5ndGgtMV1dLHNlLnB1c2goUWUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxvZT1mdW5jdGlvbigpe3ZhciBiZT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihuZSxzZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihuZSxzZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IobmUpfSxzZXRJbnB1dDpmdW5jdGlvbihhZSxuZSl7cmV0dXJuIHRoaXMueXk9bmV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWFlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBhZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9YWUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWFlLHRoaXMubWF0Y2hlZCs9YWU7dmFyIG5lPWFlLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gbmU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGFlfSx1bnB1dDpmdW5jdGlvbihhZSl7dmFyIG5lPWFlLmxlbmd0aCxzZT1hZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWFlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1uZSksdGhpcy5vZmZzZXQtPW5lO3ZhciBkZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxzZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXNlLmxlbmd0aC0xKTt2YXIgWD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46c2U/KHNlLmxlbmd0aD09PWRlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrZGVbZGUubGVuZ3RoLXNlLmxlbmd0aF0ubGVuZ3RoLXNlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bWFswXSxYWzBdK3RoaXMueXlsZW5nLW5lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oYWUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShhZSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYWU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihhZS5sZW5ndGg+MjA/Ii4uLiI6IiIpK2FlLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGFlPXRoaXMubWF0Y2g7cmV0dXJuIGFlLmxlbmd0aDwyMCYmKGFlKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1hZS5sZW5ndGgpKSwoYWUuc3Vic3RyKDAsMjApKyhhZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGFlPXRoaXMucGFzdElucHV0KCksbmU9bmV3IEFycmF5KGFlLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGFlK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtuZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oYWUsbmUpe3ZhciBzZSxkZSxYO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihYPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFgueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksZGU9YWVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGRlJiYodGhpcy55eWxpbmVubys9ZGUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46ZGU/ZGVbZGUubGVuZ3RoLTFdLmxlbmd0aC1kZVtkZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbithZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1hZVswXSx0aGlzLm1hdGNoKz1hZVswXSx0aGlzLm1hdGNoZXM9YWUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoYWVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWFlWzBdLHNlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLG5lLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHNlKXJldHVybiBzZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgZ2UgaW4gWCl0aGlzW2dlXT1YW2dlXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBhZSxuZSxzZSxkZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBYPXRoaXMuX2N1cnJlbnRSdWxlcygpLGdlPTA7Z2U8WC5sZW5ndGg7Z2UrKylpZihzZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1hbZ2VdXSksc2UmJighbmV8fHNlWzBdLmxlbmd0aD5uZVswXS5sZW5ndGgpKXtpZihuZT1zZSxkZT1nZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihhZT10aGlzLnRlc3RfbWF0Y2goc2UsWFtnZV0pLGFlIT09ITEpcmV0dXJuIGFlO2lmKHRoaXMuX2JhY2t0cmFjayl7bmU9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gbmU/KGFlPXRoaXMudGVzdF9tYXRjaChuZSxYW2RlXSksYWUhPT0hMT9hZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMubmV4dCgpO3JldHVybiBuZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24obmUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChuZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIG5lPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24obmUpe3JldHVybiBuZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKG5lfHwwKSxuZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW25lXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihuZSl7dGhpcy5iZWdpbihuZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24obmUsc2UsZGUsWCl7c3dpdGNoKGRlKXtjYXNlIDA6cmV0dXJuIG5lLmdldExvZ2dlcigpLnRyYWNlKCJGb3VuZCBjb21tZW50IixzZS55eXRleHQpLDY7Y2FzZSAxOnJldHVybiA4O2Nhc2UgMjp0aGlzLmJlZ2luKCJDTEFTUyIpO2JyZWFrO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE2O2Nhc2UgNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1Om5lLmdldExvZ2dlcigpLnRyYWNlKCJCZWdpbiBpY29uIiksdGhpcy5iZWdpbigiSUNPTiIpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElORSIpLDY7Y2FzZSA3OnJldHVybiA3O2Nhc2UgODpyZXR1cm4gMTU7Y2FzZSA5Om5lLmdldExvZ2dlcigpLnRyYWNlKCJlbmQgaWNvbiIpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEwOnJldHVybiBuZS5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9kaW5nIG5vZGUiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxMTpyZXR1cm4gbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIkNsb3VkIiksdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTI6cmV0dXJuIG5lLmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb3Npb24gQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDEzOnJldHVybiBuZS5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQgQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE0OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxODpyZXR1cm4gMTM7Y2FzZSAxOTpyZXR1cm4gMjI7Y2FzZSAyMDpyZXR1cm4gMTE7Y2FzZSAyMTp0aGlzLmJlZ2luKCJOU1RSMiIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIk5PREVfREVTQ1IiO2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6bmUuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0YXJ0aW5nIE5TVFIiKSx0aGlzLmJlZ2luKCJOU1RSIik7YnJlYWs7Y2FzZSAyNTpyZXR1cm4gbmUuZ2V0TG9nZ2VyKCkudHJhY2UoImRlc2NyaXB0aW9uOiIsc2UueXl0ZXh0KSwiTk9ERV9ERVNDUiI7Y2FzZSAyNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLG5lLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCApKSIpLCJOT0RFX0RFTkQiO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxuZS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSIpLCJOT0RFX0RFTkQiO2Nhc2UgMjk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxuZS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgLi4uIixzZS55eXRleHQpLCJOT0RFX0RFTkQiO2Nhc2UgMzA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxuZS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjtjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLG5lLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoLSIpLCJOT0RFX0RFTkQiO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxuZS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjtjYXNlIDM0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7Y2FzZSAzNTpyZXR1cm4gbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIkxvbmcgZGVzY3JpcHRpb246IixzZS55eXRleHQpLDIwO2Nhc2UgMzY6cmV0dXJuIG5lLmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsc2UueXl0ZXh0KSwyMH19LHJ1bGVzOlsvXig/OlxzKiUlLiopL2ksL14oPzptaW5kbWFwXGIpL2ksL14oPzo6OjopL2ksL14oPzouKykvaSwvXig/OlxuKS9pLC9eKD86OjppY29uXCgpL2ksL14oPzpbXHNdK1tcbl0pL2ksL14oPzpbXG5dKykvaSwvXig/OlteXCldKykvaSwvXig/OlwpKS9pLC9eKD86LVwpKS9pLC9eKD86XCgtKS9pLC9eKD86XClcKSkvaSwvXig/OlwpKS9pLC9eKD86XChcKCkvaSwvXig/Olx7XHspL2ksL14oPzpcKCkvaSwvXig/OlxbKS9pLC9eKD86W1xzXSspL2ksL14oPzpbXlwoXFtcblwpXHtcfV0rKS9pLC9eKD86JCkvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0rKS9pLC9eKD86WyJdKS9pLC9eKD86W1wpXVwpKS9pLC9eKD86W1wpXSkvaSwvXig/OltcXV0pL2ksL14oPzpcfVx9KS9pLC9eKD86XCgtKS9pLC9eKD86LVwpKS9pLC9eKD86XChcKCkvaSwvXig/OlwoKS9pLC9eKD86W15cKVxdXChcfV0rKS9pLC9eKD86LisoPyFcKFwoKSkvaV0sY29uZGl0aW9uczp7Q0xBU1M6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sSUNPTjp7cnVsZXM6WzgsOV0saW5jbHVzaXZlOiExfSxOU1RSMjp7cnVsZXM6WzIyLDIzXSxpbmNsdXNpdmU6ITF9LE5TVFI6e3J1bGVzOlsyNSwyNl0saW5jbHVzaXZlOiExfSxOT0RFOntydWxlczpbMjEsMjQsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGJlfSgpO2llLmxleGVyPW9lO2Z1bmN0aW9uIHBlKCl7dGhpcy55eT17fX1yZXR1cm4gcGUucHJvdG90eXBlPWllLGllLlBhcnNlcj1wZSxuZXcgcGV9KCk7ZXdlLnBhcnNlcj1ld2U7Y29uc3Qgc29uPWV3ZTtsZXQgSzM9W10sbFdlPTAsdHdlPXt9O2NvbnN0IGFvbj0oKT0+e0szPVtdLGxXZT0wLHR3ZT17fX0sb29uPWZ1bmN0aW9uKGkpe2ZvcihsZXQgcz1LMy5sZW5ndGgtMTtzPj0wO3MtLSlpZihLM1tzXS5sZXZlbDxpKXJldHVybiBLM1tzXTtyZXR1cm4gbnVsbH0sY29uPSgpPT5LMy5sZW5ndGg+MD9LM1swXTpudWxsLHVvbj0oaSxzLHUsZCk9Pnt2YXIgVCxfO1hlLmluZm8oImFkZE5vZGUiLGkscyx1LGQpO2NvbnN0IHA9cXQoKTtsZXQgdj0oKFQ9cC5taW5kbWFwKT09bnVsbD92b2lkIDA6VC5wYWRkaW5nKT8/c2gubWluZG1hcC5wYWRkaW5nO3N3aXRjaChkKXtjYXNlIHYxLlJPVU5ERURfUkVDVDpjYXNlIHYxLlJFQ1Q6Y2FzZSB2MS5IRVhBR09OOnYqPTJ9Y29uc3QgYj17aWQ6bFdlKyssbm9kZUlkOllmKHMscCksbGV2ZWw6aSxkZXNjcjpZZih1LHApLHR5cGU6ZCxjaGlsZHJlbjpbXSx3aWR0aDooKF89cC5taW5kbWFwKT09bnVsbD92b2lkIDA6Xy5tYXhOb2RlV2lkdGgpPz9zaC5taW5kbWFwLm1heE5vZGVXaWR0aCxwYWRkaW5nOnZ9LHk9b29uKGkpO2lmKHkpeS5jaGlsZHJlbi5wdXNoKGIpLEszLnB1c2goYik7ZWxzZSBpZihLMy5sZW5ndGg9PT0wKUszLnB1c2goYik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGNhbiBiZSBvbmx5IG9uZSByb290LiBObyBwYXJlbnQgY291bGQgYmUgZm91bmQgZm9yICgiJytiLmRlc2NyKyciKScpfSx2MT17REVGQVVMVDowLE5PX0JPUkRFUjowLFJPVU5ERURfUkVDVDoxLFJFQ1Q6MixDSVJDTEU6MyxDTE9VRDo0LEJBTkc6NSxIRVhBR09OOjZ9LGxvbj17Y2xlYXI6YW9uLGFkZE5vZGU6dW9uLGdldE1pbmRtYXA6Y29uLG5vZGVUeXBlOnYxLGdldFR5cGU6KGkscyk9Pntzd2l0Y2goWGUuZGVidWcoIkluIGdldCB0eXBlIixpLHMpLGkpe2Nhc2UiWyI6cmV0dXJuIHYxLlJFQ1Q7Y2FzZSIoIjpyZXR1cm4gcz09PSIpIj92MS5ST1VOREVEX1JFQ1Q6djEuQ0xPVUQ7Y2FzZSIoKCI6cmV0dXJuIHYxLkNJUkNMRTtjYXNlIikiOnJldHVybiB2MS5DTE9VRDtjYXNlIikpIjpyZXR1cm4gdjEuQkFORztjYXNlInt7IjpyZXR1cm4gdjEuSEVYQUdPTjtkZWZhdWx0OnJldHVybiB2MS5ERUZBVUxUfX0sc2V0RWxlbWVudEZvcklkOihpLHMpPT57dHdlW2ldPXN9LGRlY29yYXRlTm9kZTppPT57aWYoIWkpcmV0dXJuO2NvbnN0IHM9cXQoKSx1PUszW0szLmxlbmd0aC0xXTtpLmljb24mJih1Lmljb249WWYoaS5pY29uLHMpKSxpLmNsYXNzJiYodS5jbGFzcz1ZZihpLmNsYXNzLHMpKX0sdHlwZTJTdHI6aT0+e3N3aXRjaChpKXtjYXNlIHYxLkRFRkFVTFQ6cmV0dXJuIm5vLWJvcmRlciI7Y2FzZSB2MS5SRUNUOnJldHVybiJyZWN0IjtjYXNlIHYxLlJPVU5ERURfUkVDVDpyZXR1cm4icm91bmRlZC1yZWN0IjtjYXNlIHYxLkNJUkNMRTpyZXR1cm4iY2lyY2xlIjtjYXNlIHYxLkNMT1VEOnJldHVybiJjbG91ZCI7Y2FzZSB2MS5CQU5HOnJldHVybiJiYW5nIjtjYXNlIHYxLkhFWEFHT046cmV0dXJuImhleGdvbiI7ZGVmYXVsdDpyZXR1cm4ibm8tYm9yZGVyIn19LGdldExvZ2dlcjooKT0+WGUsZ2V0RWxlbWVudEJ5SWQ6aT0+dHdlW2ldfTt2YXIgaFdlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxzKXsoZnVuY3Rpb24odSxkKXtpLmV4cG9ydHM9ZCgpfSkoQWcsZnVuY3Rpb24oKXtmdW5jdGlvbiB1KHgpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIHU9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24obSl7cmV0dXJuIHR5cGVvZiBtfTpmdW5jdGlvbihtKXtyZXR1cm4gbSYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmbS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmbSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIG19LHUoeCl9ZnVuY3Rpb24gZCh4LG0pe2lmKCEoeCBpbnN0YW5jZW9mIG0pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHAoeCxtKXtmb3IodmFyIGs9MDtrPG0ubGVuZ3RoO2srKyl7dmFyIFM9bVtrXTtTLmVudW1lcmFibGU9Uy5lbnVtZXJhYmxlfHwhMSxTLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gUyYmKFMud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LFMua2V5LFMpfX1mdW5jdGlvbiB2KHgsbSxrKXtyZXR1cm4gbSYmcCh4LnByb3RvdHlwZSxtKSxrJiZwKHgsayksT2JqZWN0LmRlZmluZVByb3BlcnR5KHgsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkseH1mdW5jdGlvbiBiKHgsbSxrKXtyZXR1cm4gbSBpbiB4P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LG0se3ZhbHVlOmssZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp4W21dPWsseH1mdW5jdGlvbiB5KHgsbSl7cmV0dXJuIFQoeCl8fF8oeCxtKXx8QSh4LG0pfHxSKCl9ZnVuY3Rpb24gVCh4KXtpZihBcnJheS5pc0FycmF5KHgpKXJldHVybiB4fWZ1bmN0aW9uIF8oeCxtKXt2YXIgaz14PT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDwidSImJnhbU3ltYm9sLml0ZXJhdG9yXXx8eFsiQEBpdGVyYXRvciJdO2lmKGshPW51bGwpe3ZhciBTPVtdLE09ITAsTz0hMSxOLCQ7dHJ5e2ZvcihrPWsuY2FsbCh4KTshKE09KE49ay5uZXh0KCkpLmRvbmUpJiYoUy5wdXNoKE4udmFsdWUpLCEobSYmUy5sZW5ndGg9PT1tKSk7TT0hMCk7fWNhdGNoKEgpe089ITAsJD1IfWZpbmFsbHl7dHJ5eyFNJiZrLnJldHVybiE9bnVsbCYmay5yZXR1cm4oKX1maW5hbGx5e2lmKE8pdGhyb3cgJH19cmV0dXJuIFN9fWZ1bmN0aW9uIEEoeCxtKXtpZih4KXtpZih0eXBlb2YgeD09InN0cmluZyIpcmV0dXJuIFAoeCxtKTt2YXIgaz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkuc2xpY2UoOCwtMSk7aWYoaz09PSJPYmplY3QiJiZ4LmNvbnN0cnVjdG9yJiYoaz14LmNvbnN0cnVjdG9yLm5hbWUpLGs9PT0iTWFwInx8az09PSJTZXQiKXJldHVybiBBcnJheS5mcm9tKHgpO2lmKGs9PT0iQXJndW1lbnRzInx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoaykpcmV0dXJuIFAoeCxtKX19ZnVuY3Rpb24gUCh4LG0peyhtPT1udWxsfHxtPngubGVuZ3RoKSYmKG09eC5sZW5ndGgpO2Zvcih2YXIgaz0wLFM9bmV3IEFycmF5KG0pO2s8bTtrKyspU1trXT14W2tdO3JldHVybiBTfWZ1bmN0aW9uIFIoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9dmFyIEY9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3csaj1GP0YubmF2aWdhdG9yOm51bGw7RiYmRi5kb2N1bWVudDt2YXIgSz11KCIiKSxlZT11KHt9KSxpZT11KGZ1bmN0aW9uKCl7fSksb2U9dHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8idW5kZWZpbmVkIjp1KEhUTUxFbGVtZW50KSxwZT1mdW5jdGlvbihtKXtyZXR1cm4gbSYmbS5pbnN0YW5jZVN0cmluZyYmYWUobS5pbnN0YW5jZVN0cmluZyk/bS5pbnN0YW5jZVN0cmluZygpOm51bGx9LGJlPWZ1bmN0aW9uKG0pe3JldHVybiBtIT1udWxsJiZ1KG0pPT1LfSxhZT1mdW5jdGlvbihtKXtyZXR1cm4gbSE9bnVsbCYmdShtKT09PWllfSxuZT1mdW5jdGlvbihtKXtyZXR1cm4heGUobSkmJihBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkobSk6bSE9bnVsbCYmbSBpbnN0YW5jZW9mIEFycmF5KX0sc2U9ZnVuY3Rpb24obSl7cmV0dXJuIG0hPW51bGwmJnUobSk9PT1lZSYmIW5lKG0pJiZtLmNvbnN0cnVjdG9yPT09T2JqZWN0fSxkZT1mdW5jdGlvbihtKXtyZXR1cm4gbSE9bnVsbCYmdShtKT09PWVlfSxYPWZ1bmN0aW9uKG0pe3JldHVybiBtIT1udWxsJiZ1KG0pPT09dSgxKSYmIWlzTmFOKG0pfSxnZT1mdW5jdGlvbihtKXtyZXR1cm4gWChtKSYmTWF0aC5mbG9vcihtKT09PW19LFc9ZnVuY3Rpb24obSl7aWYob2UhPT0idW5kZWZpbmVkIilyZXR1cm4gbSE9bnVsbCYmbSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSx4ZT1mdW5jdGlvbihtKXtyZXR1cm4gVShtKXx8RmUobSl9LFU9ZnVuY3Rpb24obSl7cmV0dXJuIHBlKG0pPT09ImNvbGxlY3Rpb24iJiZtLl9wcml2YXRlLnNpbmdsZX0sRmU9ZnVuY3Rpb24obSl7cmV0dXJuIHBlKG0pPT09ImNvbGxlY3Rpb24iJiYhbS5fcHJpdmF0ZS5zaW5nbGV9LFBlPWZ1bmN0aW9uKG0pe3JldHVybiBwZShtKT09PSJjb3JlIn0samU9ZnVuY3Rpb24obSl7cmV0dXJuIHBlKG0pPT09InN0eWxlc2hlZXQifSxJZT1mdW5jdGlvbihtKXtyZXR1cm4gcGUobSk9PT0iZXZlbnQifSxTZT1mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD8hMDohIShtPT09IiJ8fG0ubWF0Y2goL15ccyskLykpfSxDZT1mdW5jdGlvbihtKXtyZXR1cm4gdHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8hMTptIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LGtlPWZ1bmN0aW9uKG0pe3JldHVybiBzZShtKSYmWChtLngxKSYmWChtLngyKSYmWChtLnkxKSYmWChtLnkyKX0sS2U9ZnVuY3Rpb24obSl7cmV0dXJuIGRlKG0pJiZhZShtLnRoZW4pfSxGdD1mdW5jdGlvbigpe3JldHVybiBqJiZqLnVzZXJBZ2VudC5tYXRjaCgvbXNpZXx0cmlkZW50fGVkZ2UvaSl9LE5lPWZ1bmN0aW9uKG0sayl7a3x8KGs9ZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MSlyZXR1cm4gYXJndW1lbnRzWzBdO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiJ1bmRlZmluZWQiO2Zvcih2YXIgTz1bXSxOPTA7Tjxhcmd1bWVudHMubGVuZ3RoO04rKylPLnB1c2goYXJndW1lbnRzW05dKTtyZXR1cm4gTy5qb2luKCIkIil9KTt2YXIgUz1mdW5jdGlvbiBNKCl7dmFyIE89dGhpcyxOPWFyZ3VtZW50cywkLEg9ay5hcHBseShPLE4pLHE9TS5jYWNoZTtyZXR1cm4oJD1xW0hdKXx8KCQ9cVtIXT1tLmFwcGx5KE8sTikpLCR9O3JldHVybiBTLmNhY2hlPXt9LFN9LGduPU5lKGZ1bmN0aW9uKHgpe3JldHVybiB4LnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihtKXtyZXR1cm4iLSIrbS50b0xvd2VyQ2FzZSgpfSl9KSxfdD1OZShmdW5jdGlvbih4KXtyZXR1cm4geC5yZXBsYWNlKC8oLVx3KS9nLGZ1bmN0aW9uKG0pe3JldHVybiBtWzFdLnRvVXBwZXJDYXNlKCl9KX0pLEV0PU5lKGZ1bmN0aW9uKHgsbSl7cmV0dXJuIHgrbVswXS50b1VwcGVyQ2FzZSgpK20uc3Vic3RyaW5nKDEpfSxmdW5jdGlvbih4LG0pe3JldHVybiB4KyIkIittfSksR3Q9ZnVuY3Rpb24obSl7cmV0dXJuIFNlKG0pP206bS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSttLnN1YnN0cmluZygxKX0sbG49Iig/OlstK10/KD86KD86XFxkK3xcXGQqXFwuXFxkKykoPzpbRWVdWystXT9cXGQrKT8pKSIseHQ9InJnYlthXT9cXCgoIitsbisiWyVdPylcXHMqLFxccyooIitsbisiWyVdPylcXHMqLFxccyooIitsbisiWyVdPykoPzpcXHMqLFxccyooIitsbisiKSk/XFwpIixQdD0icmdiW2FdP1xcKCg/OiIrbG4rIlslXT8pXFxzKixcXHMqKD86IitsbisiWyVdPylcXHMqLFxccyooPzoiK2xuKyJbJV0/KSg/OlxccyosXFxzKig/OiIrbG4rIikpP1xcKSIsUWU9ImhzbFthXT9cXCgoIitsbisiKVxccyosXFxzKigiK2xuKyJbJV0pXFxzKixcXHMqKCIrbG4rIlslXSkoPzpcXHMqLFxccyooIitsbisiKSk/XFwpIixEdD0iaHNsW2FdP1xcKCg/OiIrbG4rIilcXHMqLFxccyooPzoiK2xuKyJbJV0pXFxzKixcXHMqKD86IitsbisiWyVdKSg/OlxccyosXFxzKig/OiIrbG4rIikpP1xcKSIsa3Q9IlxcI1swLTlhLWZBLUZdezN9IixPbj0iXFwjWzAtOWEtZkEtRl17Nn0iLGh0PWZ1bmN0aW9uKG0sayl7cmV0dXJuIG08az8tMTptPms/MTowfSx6cj1mdW5jdGlvbihtLGspe3JldHVybi0xKmh0KG0sayl9LHl0PU9iamVjdC5hc3NpZ24hPW51bGw/T2JqZWN0LmFzc2lnbi5iaW5kKE9iamVjdCk6ZnVuY3Rpb24oeCl7Zm9yKHZhciBtPWFyZ3VtZW50cyxrPTE7azxtLmxlbmd0aDtrKyspe3ZhciBTPW1ba107aWYoUyE9bnVsbClmb3IodmFyIE09T2JqZWN0LmtleXMoUyksTz0wO088TS5sZW5ndGg7TysrKXt2YXIgTj1NW09dO3hbTl09U1tOXX19cmV0dXJuIHh9LGppPWZ1bmN0aW9uKG0pe2lmKCEoIShtLmxlbmd0aD09PTR8fG0ubGVuZ3RoPT09Nyl8fG1bMF0hPT0iIyIpKXt2YXIgaz1tLmxlbmd0aD09PTQsUyxNLE8sTj0xNjtyZXR1cm4gaz8oUz1wYXJzZUludChtWzFdK21bMV0sTiksTT1wYXJzZUludChtWzJdK21bMl0sTiksTz1wYXJzZUludChtWzNdK21bM10sTikpOihTPXBhcnNlSW50KG1bMV0rbVsyXSxOKSxNPXBhcnNlSW50KG1bM10rbVs0XSxOKSxPPXBhcnNlSW50KG1bNV0rbVs2XSxOKSksW1MsTSxPXX19LHhpPWZ1bmN0aW9uKG0pe3ZhciBrLFMsTSxPLE4sJCxILHE7ZnVuY3Rpb24gWShtZSxMZSxfZSl7cmV0dXJuIF9lPDAmJihfZSs9MSksX2U+MSYmKF9lLT0xKSxfZTwxLzY/bWUrKExlLW1lKSo2Kl9lOl9lPDEvMj9MZTpfZTwyLzM/bWUrKExlLW1lKSooMi8zLV9lKSo2Om1lfXZhciBaPW5ldyBSZWdFeHAoIl4iK1FlKyIkIikuZXhlYyhtKTtpZihaKXtpZihTPXBhcnNlSW50KFpbMV0pLFM8MD9TPSgzNjAtIC0xKlMlMzYwKSUzNjA6Uz4zNjAmJihTPVMlMzYwKSxTLz0zNjAsTT1wYXJzZUZsb2F0KFpbMl0pLE08MHx8TT4xMDB8fChNPU0vMTAwLE89cGFyc2VGbG9hdChaWzNdKSxPPDB8fE8+MTAwKXx8KE89Ty8xMDAsTj1aWzRdLE4hPT12b2lkIDAmJihOPXBhcnNlRmxvYXQoTiksTjwwfHxOPjEpKSlyZXR1cm47aWYoTT09PTApJD1IPXE9TWF0aC5yb3VuZChPKjI1NSk7ZWxzZXt2YXIgY2U9TzwuNT9PKigxK00pOk8rTS1PKk0sdmU9MipPLWNlOyQ9TWF0aC5yb3VuZCgyNTUqWSh2ZSxjZSxTKzEvMykpLEg9TWF0aC5yb3VuZCgyNTUqWSh2ZSxjZSxTKSkscT1NYXRoLnJvdW5kKDI1NSpZKHZlLGNlLFMtMS8zKSl9az1bJCxILHEsTl19cmV0dXJuIGt9LE1hPWZ1bmN0aW9uKG0pe3ZhciBrLFM9bmV3IFJlZ0V4cCgiXiIreHQrIiQiKS5leGVjKG0pO2lmKFMpe2s9W107Zm9yKHZhciBNPVtdLE89MTtPPD0zO08rKyl7dmFyIE49U1tPXTtpZihOW04ubGVuZ3RoLTFdPT09IiUiJiYoTVtPXT0hMCksTj1wYXJzZUZsb2F0KE4pLE1bT10mJihOPU4vMTAwKjI1NSksTjwwfHxOPjI1NSlyZXR1cm47ay5wdXNoKE1hdGguZmxvb3IoTikpfXZhciAkPU1bMV18fE1bMl18fE1bM10sSD1NWzFdJiZNWzJdJiZNWzNdO2lmKCQmJiFIKXJldHVybjt2YXIgcT1TWzRdO2lmKHEhPT12b2lkIDApe2lmKHE9cGFyc2VGbG9hdChxKSxxPDB8fHE+MSlyZXR1cm47ay5wdXNoKHEpfX1yZXR1cm4ga30senM9ZnVuY3Rpb24obSl7cmV0dXJuIFRyW20udG9Mb3dlckNhc2UoKV19LGFvPWZ1bmN0aW9uKG0pe3JldHVybihuZShtKT9tOm51bGwpfHx6cyhtKXx8amkobSl8fE1hKG0pfHx4aShtKX0sVHI9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JleTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19LEZuPWZ1bmN0aW9uKG0pe2Zvcih2YXIgaz1tLm1hcCxTPW0ua2V5cyxNPVMubGVuZ3RoLE89MDtPPE07TysrKXt2YXIgTj1TW09dO2lmKHNlKE4pKXRocm93IEVycm9yKCJUcmllZCB0byBzZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO088Uy5sZW5ndGgtMT8oa1tOXT09bnVsbCYmKGtbTl09e30pLGs9a1tOXSk6a1tOXT1tLnZhbHVlfX0scW49ZnVuY3Rpb24obSl7Zm9yKHZhciBrPW0ubWFwLFM9bS5rZXlzLE09Uy5sZW5ndGgsTz0wO088TTtPKyspe3ZhciBOPVNbT107aWYoc2UoTikpdGhyb3cgRXJyb3IoIlRyaWVkIHRvIGdldCBtYXAgd2l0aCBvYmplY3Qga2V5Iik7aWYoaz1rW05dLGs9PW51bGwpcmV0dXJuIGt9cmV0dXJuIGt9O2Z1bmN0aW9uIFVuKHgpe3ZhciBtPXR5cGVvZiB4O3JldHVybiB4IT1udWxsJiYobT09Im9iamVjdCJ8fG09PSJmdW5jdGlvbiIpfXZhciBBdD1Vbix3dD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIEFnPCJ1Ij9BZzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTtmdW5jdGlvbiBvbih4LG0pe3JldHVybiBtPXtleHBvcnRzOnt9fSx4KG0sbS5leHBvcnRzKSxtLmV4cG9ydHN9dmFyIGZuPXR5cGVvZiB3dD09Im9iamVjdCImJnd0JiZ3dC5PYmplY3Q9PT1PYmplY3QmJnd0LEFuPWZuLG9vPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsam89QW58fG9vfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLCRvPWpvLFBhPWZ1bmN0aW9uKCl7cmV0dXJuICRvLkRhdGUubm93KCl9LHdvPVBhLF9zPS9ccy87ZnVuY3Rpb24gdGwoeCl7Zm9yKHZhciBtPXgubGVuZ3RoO20tLSYmX3MudGVzdCh4LmNoYXJBdChtKSk7KTtyZXR1cm4gbX12YXIgZGE9dGwsajA9L15ccysvO2Z1bmN0aW9uIHBtKHgpe3JldHVybiB4JiZ4LnNsaWNlKDAsZGEoeCkrMSkucmVwbGFjZShqMCwiIil9dmFyIE1sPXBtLFhjPSRvLlN5bWJvbCxCYz1YYyxqYT1PYmplY3QucHJvdG90eXBlLE91PWphLmhhc093blByb3BlcnR5LFNhPWphLnRvU3RyaW5nLFBvPUJjP0JjLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBGYyh4KXt2YXIgbT1PdS5jYWxsKHgsUG8pLGs9eFtQb107dHJ5e3hbUG9dPXZvaWQgMDt2YXIgUz0hMH1jYXRjaHt9dmFyIE09U2EuY2FsbCh4KTtyZXR1cm4gUyYmKG0/eFtQb109azpkZWxldGUgeFtQb10pLE19dmFyIHhhPUZjLEJhPU9iamVjdC5wcm90b3R5cGUsZ2E9QmEudG9TdHJpbmc7ZnVuY3Rpb24ga2goeCl7cmV0dXJuIGdhLmNhbGwoeCl9dmFyIGx1PWtoLG81PSJbb2JqZWN0IE51bGxdIixXaD0iW29iamVjdCBVbmRlZmluZWRdIixvZD1CYz9CYy50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gR2QoeCl7cmV0dXJuIHg9PW51bGw/eD09PXZvaWQgMD9XaDpvNTpvZCYmb2QgaW4gT2JqZWN0KHgpP3hhKHgpOmx1KHgpfXZhciBjZD1HZDtmdW5jdGlvbiBLZCh4KXtyZXR1cm4geCE9bnVsbCYmdHlwZW9mIHg9PSJvYmplY3QifXZhciAkZz1LZCxhcz0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiB3bih4KXtyZXR1cm4gdHlwZW9mIHg9PSJzeW1ib2wifHwkZyh4KSYmY2QoeCk9PWFzfXZhciBacj13bixaaT0wLzAsbnU9L15bLStdMHhbMC05YS1mXSskL2ksdnU9L14wYlswMV0rJC9pLERsPS9eMG9bMC03XSskL2ksWWg9cGFyc2VJbnQ7ZnVuY3Rpb24gdzEoeCl7aWYodHlwZW9mIHg9PSJudW1iZXIiKXJldHVybiB4O2lmKFpyKHgpKXJldHVybiBaaTtpZihBdCh4KSl7dmFyIG09dHlwZW9mIHgudmFsdWVPZj09ImZ1bmN0aW9uIj94LnZhbHVlT2YoKTp4O3g9QXQobSk/bSsiIjptfWlmKHR5cGVvZiB4IT0ic3RyaW5nIilyZXR1cm4geD09PTA/eDoreDt4PU1sKHgpO3ZhciBrPXZ1LnRlc3QoeCk7cmV0dXJuIGt8fERsLnRlc3QoeCk/WWgoeC5zbGljZSgyKSxrPzI6OCk6bnUudGVzdCh4KT9aaToreH12YXIgJDA9dzEsV2k9IkV4cGVjdGVkIGEgZnVuY3Rpb24iLEJzPU1hdGgubWF4LFFhPU1hdGgubWluO2Z1bmN0aW9uIEJpKHgsbSxrKXt2YXIgUyxNLE8sTiwkLEgscT0wLFk9ITEsWj0hMSxjZT0hMDtpZih0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKFdpKTttPSQwKG0pfHwwLEF0KGspJiYoWT0hIWsubGVhZGluZyxaPSJtYXhXYWl0ImluIGssTz1aP0JzKCQwKGsubWF4V2FpdCl8fDAsbSk6TyxjZT0idHJhaWxpbmciaW4gaz8hIWsudHJhaWxpbmc6Y2UpO2Z1bmN0aW9uIHZlKHN0KXt2YXIgWWU9UyxtdD1NO3JldHVybiBTPU09dm9pZCAwLHE9c3QsTj14LmFwcGx5KG10LFllKSxOfWZ1bmN0aW9uIG1lKHN0KXtyZXR1cm4gcT1zdCwkPXNldFRpbWVvdXQoRWUsbSksWT92ZShzdCk6Tn1mdW5jdGlvbiBMZShzdCl7dmFyIFllPXN0LUgsbXQ9c3QtcSxKZT1tLVllO3JldHVybiBaP1FhKEplLE8tbXQpOkplfWZ1bmN0aW9uIF9lKHN0KXt2YXIgWWU9c3QtSCxtdD1zdC1xO3JldHVybiBIPT09dm9pZCAwfHxZZT49bXx8WWU8MHx8WiYmbXQ+PU99ZnVuY3Rpb24gRWUoKXt2YXIgc3Q9d28oKTtpZihfZShzdCkpcmV0dXJuIEJlKHN0KTskPXNldFRpbWVvdXQoRWUsTGUoc3QpKX1mdW5jdGlvbiBCZShzdCl7cmV0dXJuICQ9dm9pZCAwLGNlJiZTP3ZlKHN0KTooUz1NPXZvaWQgMCxOKX1mdW5jdGlvbiBSZSgpeyQhPT12b2lkIDAmJmNsZWFyVGltZW91dCgkKSxxPTAsUz1IPU09JD12b2lkIDB9ZnVuY3Rpb24gVmUoKXtyZXR1cm4gJD09PXZvaWQgMD9OOkJlKHdvKCkpfWZ1bmN0aW9uIGN0KCl7dmFyIHN0PXdvKCksWWU9X2Uoc3QpO2lmKFM9YXJndW1lbnRzLE09dGhpcyxIPXN0LFllKXtpZigkPT09dm9pZCAwKXJldHVybiBtZShIKTtpZihaKXJldHVybiBjbGVhclRpbWVvdXQoJCksJD1zZXRUaW1lb3V0KEVlLG0pLHZlKEgpfXJldHVybiAkPT09dm9pZCAwJiYoJD1zZXRUaW1lb3V0KEVlLG0pKSxOfXJldHVybiBjdC5jYW5jZWw9UmUsY3QuZmx1c2g9VmUsY3R9dmFyIE51PUJpLE90PUY/Ri5wZXJmb3JtYW5jZTpudWxsLFczPU90JiZPdC5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gT3Qubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LEt0PWZ1bmN0aW9uKCl7aWYoRil7aWYoRi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHgpe0YucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHgpfTtpZihGLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oeCl7Ri5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoeCl9O2lmKEYud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih4KXtGLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSh4KX07aWYoRi5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oeCl7Ri5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSh4KX19cmV0dXJuIGZ1bmN0aW9uKHgpe3gmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXt4KFczKCkpfSwxZTMvNjApfX0oKSx6MD1mdW5jdGlvbihtKXtyZXR1cm4gS3QobSl9LEJwPVczLFkzPTkyNjEsJDk9NjU1OTksYzU9NTM4MSxFaD1mdW5jdGlvbihtKXtmb3IodmFyIGs9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlkzLFM9ayxNO009bS5uZXh0KCksIU0uZG9uZTspUz1TKiQ5K00udmFsdWV8MDtyZXR1cm4gU30semc9ZnVuY3Rpb24obSl7dmFyIGs9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlkzO3JldHVybiBrKiQ5K218MH0sYm09ZnVuY3Rpb24obSl7dmFyIGs9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmM1O3JldHVybihrPDw1KStrK218MH0sejk9ZnVuY3Rpb24obSxrKXtyZXR1cm4gbSoyMDk3MTUyK2t9LG1tPWZ1bmN0aW9uKG0pe3JldHVybiBtWzBdKjIwOTcxNTIrbVsxXX0sdTU9ZnVuY3Rpb24obSxrKXtyZXR1cm5bemcobVswXSxrWzBdKSxibShtWzFdLGtbMV0pXX0seTE9ZnVuY3Rpb24obSxrKXt2YXIgUz17dmFsdWU6MCxkb25lOiExfSxNPTAsTz1tLmxlbmd0aCxOPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIE08Tz9TLnZhbHVlPW1bTSsrXTpTLmRvbmU9ITAsU319O3JldHVybiBFaChOLGspfSx1ZD1mdW5jdGlvbihtLGspe3ZhciBTPXt2YWx1ZTowLGRvbmU6ITF9LE09MCxPPW0ubGVuZ3RoLE49e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gTTxPP1MudmFsdWU9bS5jaGFyQ29kZUF0KE0rKyk6Uy5kb25lPSEwLFN9fTtyZXR1cm4gRWgoTixrKX0sbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gcTkoYXJndW1lbnRzKX0scTk9ZnVuY3Rpb24obSl7Zm9yKHZhciBrLFM9MDtTPG0ubGVuZ3RoO1MrKyl7dmFyIE09bVtTXTtTPT09MD9rPXVkKE0pOms9dWQoTSxrKX1yZXR1cm4ga30sVnY9ITAsWTc9Y29uc29sZS53YXJuIT1udWxsLEcyPWNvbnNvbGUudHJhY2UhPW51bGwsWDc9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ8fDkwMDcxOTkyNTQ3NDA5OTEsbDU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sWDM9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRnA9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbkk9ZnVuY3Rpb24oKXt9LGNoPWZ1bmN0aW9uKG0pe3Rocm93IG5ldyBFcnJvcihtKX0sb1M9ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMClWdj0hIW07ZWxzZSByZXR1cm4gVnZ9LGh1PWZ1bmN0aW9uKG0pe29TKCkmJihZNz9jb25zb2xlLndhcm4obSk6KGNvbnNvbGUubG9nKG0pLEcyJiZjb25zb2xlLnRyYWNlKCkpKX0sJEo9ZnVuY3Rpb24obSl7cmV0dXJuIHl0KHt9LG0pfSx2bT1mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD9tOm5lKG0pP20uc2xpY2UoKTpzZShtKT8kSihtKTptfSx6Sj1mdW5jdGlvbihtKXtyZXR1cm4gbS5zbGljZSgpfSxvaj1mdW5jdGlvbihtLGspe2ZvcihrPW09IiI7bSsrPDM2O2srPW0qNTEmNTI/KG1eMTU/OF5NYXRoLnJhbmRvbSgpKihtXjIwPzE2OjQpOjQpLnRvU3RyaW5nKDE2KToiLSIpO3JldHVybiBrfSxxSj17fSxjaj1mdW5jdGlvbigpe3JldHVybiBxSn0scTA9ZnVuY3Rpb24obSl7dmFyIGs9T2JqZWN0LmtleXMobSk7cmV0dXJuIGZ1bmN0aW9uKFMpe2Zvcih2YXIgTT17fSxPPTA7TzxrLmxlbmd0aDtPKyspe3ZhciBOPWtbT10sJD1TPT1udWxsP3ZvaWQgMDpTW05dO01bTl09JD09PXZvaWQgMD9tW05dOiR9cmV0dXJuIE19fSxRMz1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPW0ubGVuZ3RoLTE7TT49MCYmIShtW01dPT09ayYmKG0uc3BsaWNlKE0sMSksUykpO00tLSk7fSxjUz1mdW5jdGlvbihtKXttLnNwbGljZSgwLG0ubGVuZ3RoKX0sdWo9ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPGsubGVuZ3RoO1MrKyl7dmFyIE09a1tTXTttLnB1c2goTSl9fSxLMj1mdW5jdGlvbihtLGssUyl7cmV0dXJuIFMmJihrPUV0KFMsaykpLG1ba119LEozPWZ1bmN0aW9uKG0sayxTLE0pe1MmJihrPUV0KFMsaykpLG1ba109TX0sSEo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB4KCl7ZCh0aGlzLHgpLHRoaXMuX29iaj17fX1yZXR1cm4gdih4LFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGssUyl7cmV0dXJuIHRoaXMuX29ialtrXT1TLHRoaXN9fSx7a2V5OiJkZWxldGUiLHZhbHVlOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLl9vYmpba109dm9pZCAwLHRoaXN9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9vYmo9e319fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLl9vYmpba10hPT12b2lkIDB9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLl9vYmpba119fV0pLHh9KCksd209dHlwZW9mIE1hcDwidSI/TWFwOkhKLFZKPSJ1bmRlZmluZWQiLFVKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geChtKXtpZihkKHRoaXMseCksdGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zaXplPTAsbSE9bnVsbCl7dmFyIGs7bS5pbnN0YW5jZVN0cmluZyE9bnVsbCYmbS5pbnN0YW5jZVN0cmluZygpPT09dGhpcy5pbnN0YW5jZVN0cmluZygpP2s9bS50b0FycmF5KCk6az1tO2Zvcih2YXIgUz0wO1M8ay5sZW5ndGg7UysrKXRoaXMuYWRkKGtbU10pfX1yZXR1cm4gdih4LFt7a2V5OiJpbnN0YW5jZVN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4ic2V0In19LHtrZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oayl7dmFyIFM9dGhpcy5fb2JqO1Nba10hPT0xJiYoU1trXT0xLHRoaXMuc2l6ZSsrKX19LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oayl7dmFyIFM9dGhpcy5fb2JqO1Nba109PT0xJiYoU1trXT0wLHRoaXMuc2l6ZS0tKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX29iaj1PYmplY3QuY3JlYXRlKG51bGwpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5fb2JqW2tdPT09MX19LHtrZXk6InRvQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGs9dGhpcztyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fb2JqKS5maWx0ZXIoZnVuY3Rpb24oUyl7cmV0dXJuIGsuaGFzKFMpfSl9fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihrLFMpe3JldHVybiB0aGlzLnRvQXJyYXkoKS5mb3JFYWNoKGssUyl9fV0pLHh9KCksUTc9KHR5cGVvZiBTZXQ+InUiPyJ1bmRlZmluZWQiOnUoU2V0KSkhPT1WSj9TZXQ6VUosdVM9ZnVuY3Rpb24obSxrKXt2YXIgUz1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITA7aWYobT09PXZvaWQgMHx8az09PXZvaWQgMHx8IVBlKG0pKXtjaCgiQW4gZWxlbWVudCBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSBhbmQgcGFyYW1ldGVycyBzZXQiKTtyZXR1cm59dmFyIE09ay5ncm91cDtpZihNPT1udWxsJiYoay5kYXRhJiZrLmRhdGEuc291cmNlIT1udWxsJiZrLmRhdGEudGFyZ2V0IT1udWxsP009ImVkZ2VzIjpNPSJub2RlcyIpLE0hPT0ibm9kZXMiJiZNIT09ImVkZ2VzIil7Y2goIkFuIGVsZW1lbnQgbXVzdCBiZSBvZiB0eXBlIGBub2Rlc2Agb3IgYGVkZ2VzYDsgeW91IHNwZWNpZmllZCBgIitNKyJgIik7cmV0dXJufXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzO3ZhciBPPXRoaXMuX3ByaXZhdGU9e2N5Om0sc2luZ2xlOiEwLGRhdGE6ay5kYXRhfHx7fSxwb3NpdGlvbjprLnBvc2l0aW9ufHx7eDowLHk6MH0sYXV0b1dpZHRoOnZvaWQgMCxhdXRvSGVpZ2h0OnZvaWQgMCxhdXRvUGFkZGluZzp2b2lkIDAsY29tcG91bmRCb3VuZHNDbGVhbjohMSxsaXN0ZW5lcnM6W10sZ3JvdXA6TSxzdHlsZTp7fSxyc3R5bGU6e30sc3R5bGVDeHRzOltdLHN0eWxlS2V5czp7fSxyZW1vdmVkOiEwLHNlbGVjdGVkOiEhay5zZWxlY3RlZCxzZWxlY3RhYmxlOmsuc2VsZWN0YWJsZT09PXZvaWQgMD8hMDohIWsuc2VsZWN0YWJsZSxsb2NrZWQ6ISFrLmxvY2tlZCxncmFiYmVkOiExLGdyYWJiYWJsZTprLmdyYWJiYWJsZT09PXZvaWQgMD8hMDohIWsuZ3JhYmJhYmxlLHBhbm5hYmxlOmsucGFubmFibGU9PT12b2lkIDA/TT09PSJlZGdlcyI6ISFrLnBhbm5hYmxlLGFjdGl2ZTohMSxjbGFzc2VzOm5ldyBRNyxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LHJzY3JhdGNoOnt9LHNjcmF0Y2g6ay5zY3JhdGNofHx7fSxlZGdlczpbXSxjaGlsZHJlbjpbXSxwYXJlbnQ6ay5wYXJlbnQmJmsucGFyZW50LmlzTm9kZSgpP2sucGFyZW50Om51bGwsdHJhdmVyc2FsQ2FjaGU6e30sYmFja2dyb3VuZGluZzohMSxiYkNhY2hlOm51bGwsYmJDYWNoZVNoaWZ0Ont4OjAseTowfSxib2R5Qm91bmRzOm51bGwsb3ZlcmxheUJvdW5kczpudWxsLGxhYmVsQm91bmRzOnthbGw6bnVsbCxzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCxtYWluOm51bGx9LGFycm93Qm91bmRzOntzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCwibWlkLXNvdXJjZSI6bnVsbCwibWlkLXRhcmdldCI6bnVsbH19O2lmKE8ucG9zaXRpb24ueD09bnVsbCYmKE8ucG9zaXRpb24ueD0wKSxPLnBvc2l0aW9uLnk9PW51bGwmJihPLnBvc2l0aW9uLnk9MCksay5yZW5kZXJlZFBvc2l0aW9uKXt2YXIgTj1rLnJlbmRlcmVkUG9zaXRpb24sJD1tLnBhbigpLEg9bS56b29tKCk7Ty5wb3NpdGlvbj17eDooTi54LSQueCkvSCx5OihOLnktJC55KS9IfX12YXIgcT1bXTtuZShrLmNsYXNzZXMpP3E9ay5jbGFzc2VzOmJlKGsuY2xhc3NlcykmJihxPWsuY2xhc3Nlcy5zcGxpdCgvXHMrLykpO2Zvcih2YXIgWT0wLFo9cS5sZW5ndGg7WTxaO1krKyl7dmFyIGNlPXFbWV07IWNlfHxjZT09PSIifHxPLmNsYXNzZXMuYWRkKGNlKX10aGlzLmNyZWF0ZUVtaXR0ZXIoKTt2YXIgdmU9ay5zdHlsZXx8ay5jc3M7dmUmJihodSgiU2V0dGluZyBhIGBzdHlsZWAgYnlwYXNzIGF0IGVsZW1lbnQgY3JlYXRpb24gc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgVHJ5IHRvIHVzZSB0aGUgc3R5bGVzaGVldCBpbnN0ZWFkLiIpLHRoaXMuc3R5bGUodmUpKSwoUz09PXZvaWQgMHx8UykmJnRoaXMucmVzdG9yZSgpfSxsaj1mdW5jdGlvbihtKXtyZXR1cm4gbT17YmZzOm0uYmZzfHwhbS5kZnMsZGZzOm0uZGZzfHwhbS5iZnN9LGZ1bmN0aW9uKFMsTSxPKXt2YXIgTjtzZShTKSYmIXhlKFMpJiYoTj1TLFM9Ti5yb290c3x8Ti5yb290LE09Ti52aXNpdCxPPU4uZGlyZWN0ZWQpLE89YXJndW1lbnRzLmxlbmd0aD09PTImJiFhZShNKT9NOk8sTT1hZShNKT9NOmZ1bmN0aW9uKCl7fTtmb3IodmFyICQ9dGhpcy5fcHJpdmF0ZS5jeSxIPVM9YmUoUyk/dGhpcy5maWx0ZXIoUyk6UyxxPVtdLFk9W10sWj17fSxjZT17fSx2ZT17fSxtZT0wLExlLF9lPXRoaXMuYnlHcm91cCgpLEVlPV9lLm5vZGVzLEJlPV9lLmVkZ2VzLFJlPTA7UmU8SC5sZW5ndGg7UmUrKyl7dmFyIFZlPUhbUmVdLGN0PVZlLmlkKCk7VmUuaXNOb2RlKCkmJihxLnVuc2hpZnQoVmUpLG0uYmZzJiYodmVbY3RdPSEwLFkucHVzaChWZSkpLGNlW2N0XT0wKX1mb3IodmFyIHN0PWZ1bmN0aW9uKCl7dmFyIFd0PW0uYmZzP3Euc2hpZnQoKTpxLnBvcCgpLFR0PVd0LmlkKCk7aWYobS5kZnMpe2lmKHZlW1R0XSlyZXR1cm4iY29udGludWUiO3ZlW1R0XT0hMCxZLnB1c2goV3QpfXZhciBfbj1jZVtUdF0saG49WltUdF0sWXQ9aG4hPW51bGw/aG4uc291cmNlKCk6bnVsbCxEbj1obiE9bnVsbD9obi50YXJnZXQoKTpudWxsLGlyPWhuPT1udWxsP3ZvaWQgMDpXdC5zYW1lKFl0KT9EblswXTpZdFswXSx2cj12b2lkIDA7aWYodnI9TShXdCxobixpcixtZSsrLF9uKSx2cj09PSEwKXJldHVybiBMZT1XdCwiYnJlYWsiO2lmKHZyPT09ITEpcmV0dXJuImJyZWFrIjtmb3IodmFyIE5uPVd0LmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKE9yKXtyZXR1cm4oIU98fE9yLnNvdXJjZSgpLnNhbWUoV3QpKSYmQmUuaGFzKE9yKX0pLHByPTA7cHI8Tm4ubGVuZ3RoO3ByKyspe3ZhciBFcj1Obltwcl0sTXI9RXIuY29ubmVjdGVkTm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oT3Ipe3JldHVybiFPci5zYW1lKFd0KSYmRWUuaGFzKE9yKX0pLENyPU1yLmlkKCk7TXIubGVuZ3RoIT09MCYmIXZlW0NyXSYmKE1yPU1yWzBdLHEucHVzaChNciksbS5iZnMmJih2ZVtDcl09ITAsWS5wdXNoKE1yKSksWltDcl09RXIsY2VbQ3JdPWNlW1R0XSsxKX19O3EubGVuZ3RoIT09MDspe3ZhciBZZT1zdCgpO2lmKFllIT09ImNvbnRpbnVlIiYmWWU9PT0iYnJlYWsiKWJyZWFrfWZvcih2YXIgbXQ9JC5jb2xsZWN0aW9uKCksSmU9MDtKZTxZLmxlbmd0aDtKZSsrKXt2YXIgTHQ9WVtKZV0sTXQ9WltMdC5pZCgpXTtNdCE9bnVsbCYmbXQucHVzaChNdCksbXQucHVzaChMdCl9cmV0dXJue3BhdGg6JC5jb2xsZWN0aW9uKG10KSxmb3VuZDokLmNvbGxlY3Rpb24oTGUpfX19LEg5PXticmVhZHRoRmlyc3RTZWFyY2g6bGooe2JmczohMH0pLGRlcHRoRmlyc3RTZWFyY2g6bGooe2RmczohMH0pfTtIOS5iZnM9SDkuYnJlYWR0aEZpcnN0U2VhcmNoLEg5LmRmcz1IOS5kZXB0aEZpcnN0U2VhcmNoO3ZhciBHSj1vbihmdW5jdGlvbih4LG0peyhmdW5jdGlvbigpe3ZhciBrLFMsTSxPLE4sJCxILHEsWSxaLGNlLHZlLG1lLExlLF9lO009TWF0aC5mbG9vcixaPU1hdGgubWluLFM9ZnVuY3Rpb24oRWUsQmUpe3JldHVybiBFZTxCZT8tMTpFZT5CZT8xOjB9LFk9ZnVuY3Rpb24oRWUsQmUsUmUsVmUsY3Qpe3ZhciBzdDtpZihSZT09bnVsbCYmKFJlPTApLGN0PT1udWxsJiYoY3Q9UyksUmU8MCl0aHJvdyBuZXcgRXJyb3IoImxvIG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7Zm9yKFZlPT1udWxsJiYoVmU9RWUubGVuZ3RoKTtSZTxWZTspc3Q9TSgoUmUrVmUpLzIpLGN0KEJlLEVlW3N0XSk8MD9WZT1zdDpSZT1zdCsxO3JldHVybltdLnNwbGljZS5hcHBseShFZSxbUmUsUmUtUmVdLmNvbmNhdChCZSkpLEJlfSwkPWZ1bmN0aW9uKEVlLEJlLFJlKXtyZXR1cm4gUmU9PW51bGwmJihSZT1TKSxFZS5wdXNoKEJlKSxMZShFZSwwLEVlLmxlbmd0aC0xLFJlKX0sTj1mdW5jdGlvbihFZSxCZSl7dmFyIFJlLFZlO3JldHVybiBCZT09bnVsbCYmKEJlPVMpLFJlPUVlLnBvcCgpLEVlLmxlbmd0aD8oVmU9RWVbMF0sRWVbMF09UmUsX2UoRWUsMCxCZSkpOlZlPVJlLFZlfSxxPWZ1bmN0aW9uKEVlLEJlLFJlKXt2YXIgVmU7cmV0dXJuIFJlPT1udWxsJiYoUmU9UyksVmU9RWVbMF0sRWVbMF09QmUsX2UoRWUsMCxSZSksVmV9LEg9ZnVuY3Rpb24oRWUsQmUsUmUpe3ZhciBWZTtyZXR1cm4gUmU9PW51bGwmJihSZT1TKSxFZS5sZW5ndGgmJlJlKEVlWzBdLEJlKTwwJiYoVmU9W0VlWzBdLEJlXSxCZT1WZVswXSxFZVswXT1WZVsxXSxfZShFZSwwLFJlKSksQmV9LE89ZnVuY3Rpb24oRWUsQmUpe3ZhciBSZSxWZSxjdCxzdCxZZSxtdDtmb3IoQmU9PW51bGwmJihCZT1TKSxzdD0oZnVuY3Rpb24oKXttdD1bXTtmb3IodmFyIEplPTAsTHQ9TShFZS5sZW5ndGgvMik7MDw9THQ/SmU8THQ6SmU+THQ7MDw9THQ/SmUrKzpKZS0tKW10LnB1c2goSmUpO3JldHVybiBtdH0pLmFwcGx5KHRoaXMpLnJldmVyc2UoKSxZZT1bXSxWZT0wLGN0PXN0Lmxlbmd0aDtWZTxjdDtWZSsrKVJlPXN0W1ZlXSxZZS5wdXNoKF9lKEVlLFJlLEJlKSk7cmV0dXJuIFllfSxtZT1mdW5jdGlvbihFZSxCZSxSZSl7dmFyIFZlO2lmKFJlPT1udWxsJiYoUmU9UyksVmU9RWUuaW5kZXhPZihCZSksVmUhPT0tMSlyZXR1cm4gTGUoRWUsMCxWZSxSZSksX2UoRWUsVmUsUmUpfSxjZT1mdW5jdGlvbihFZSxCZSxSZSl7dmFyIFZlLGN0LHN0LFllLG10O2lmKFJlPT1udWxsJiYoUmU9UyksY3Q9RWUuc2xpY2UoMCxCZSksIWN0Lmxlbmd0aClyZXR1cm4gY3Q7Zm9yKE8oY3QsUmUpLG10PUVlLnNsaWNlKEJlKSxzdD0wLFllPW10Lmxlbmd0aDtzdDxZZTtzdCsrKVZlPW10W3N0XSxIKGN0LFZlLFJlKTtyZXR1cm4gY3Quc29ydChSZSkucmV2ZXJzZSgpfSx2ZT1mdW5jdGlvbihFZSxCZSxSZSl7dmFyIFZlLGN0LHN0LFllLG10LEplLEx0LE10LHV0O2lmKFJlPT1udWxsJiYoUmU9UyksQmUqMTA8PUVlLmxlbmd0aCl7aWYoc3Q9RWUuc2xpY2UoMCxCZSkuc29ydChSZSksIXN0Lmxlbmd0aClyZXR1cm4gc3Q7Zm9yKGN0PXN0W3N0Lmxlbmd0aC0xXSxMdD1FZS5zbGljZShCZSksWWU9MCxKZT1MdC5sZW5ndGg7WWU8SmU7WWUrKylWZT1MdFtZZV0sUmUoVmUsY3QpPDAmJihZKHN0LFZlLDAsbnVsbCxSZSksc3QucG9wKCksY3Q9c3Rbc3QubGVuZ3RoLTFdKTtyZXR1cm4gc3R9Zm9yKE8oRWUsUmUpLHV0PVtdLG10PTAsTXQ9WihCZSxFZS5sZW5ndGgpOzA8PU10P210PE10Om10Pk10OzA8PU10PysrbXQ6LS1tdCl1dC5wdXNoKE4oRWUsUmUpKTtyZXR1cm4gdXR9LExlPWZ1bmN0aW9uKEVlLEJlLFJlLFZlKXt2YXIgY3Qsc3QsWWU7Zm9yKFZlPT1udWxsJiYoVmU9UyksY3Q9RWVbUmVdO1JlPkJlOyl7aWYoWWU9UmUtMT4+MSxzdD1FZVtZZV0sVmUoY3Qsc3QpPDApe0VlW1JlXT1zdCxSZT1ZZTtjb250aW51ZX1icmVha31yZXR1cm4gRWVbUmVdPWN0fSxfZT1mdW5jdGlvbihFZSxCZSxSZSl7dmFyIFZlLGN0LHN0LFllLG10O2ZvcihSZT09bnVsbCYmKFJlPVMpLGN0PUVlLmxlbmd0aCxtdD1CZSxzdD1FZVtCZV0sVmU9MipCZSsxO1ZlPGN0OylZZT1WZSsxLFllPGN0JiYhKFJlKEVlW1ZlXSxFZVtZZV0pPDApJiYoVmU9WWUpLEVlW0JlXT1FZVtWZV0sQmU9VmUsVmU9MipCZSsxO3JldHVybiBFZVtCZV09c3QsTGUoRWUsbXQsQmUsUmUpfSxrPWZ1bmN0aW9uKCl7RWUucHVzaD0kLEVlLnBvcD1OLEVlLnJlcGxhY2U9cSxFZS5wdXNocG9wPUgsRWUuaGVhcGlmeT1PLEVlLnVwZGF0ZUl0ZW09bWUsRWUubmxhcmdlc3Q9Y2UsRWUubnNtYWxsZXN0PXZlO2Z1bmN0aW9uIEVlKEJlKXt0aGlzLmNtcD1CZT8/Uyx0aGlzLm5vZGVzPVtdfXJldHVybiBFZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihCZSl7cmV0dXJuICQodGhpcy5ub2RlcyxCZSx0aGlzLmNtcCl9LEVlLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gTih0aGlzLm5vZGVzLHRoaXMuY21wKX0sRWUucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc1swXX0sRWUucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKEJlKXtyZXR1cm4gdGhpcy5ub2Rlcy5pbmRleE9mKEJlKSE9PS0xfSxFZS5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihCZSl7cmV0dXJuIHEodGhpcy5ub2RlcyxCZSx0aGlzLmNtcCl9LEVlLnByb3RvdHlwZS5wdXNocG9wPWZ1bmN0aW9uKEJlKXtyZXR1cm4gSCh0aGlzLm5vZGVzLEJlLHRoaXMuY21wKX0sRWUucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24oKXtyZXR1cm4gTyh0aGlzLm5vZGVzLHRoaXMuY21wKX0sRWUucHJvdG90eXBlLnVwZGF0ZUl0ZW09ZnVuY3Rpb24oQmUpe3JldHVybiBtZSh0aGlzLm5vZGVzLEJlLHRoaXMuY21wKX0sRWUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXM9W119LEVlLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aD09PTB9LEVlLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXMubGVuZ3RofSxFZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgQmU7cmV0dXJuIEJlPW5ldyBFZSxCZS5ub2Rlcz10aGlzLm5vZGVzLnNsaWNlKDApLEJlfSxFZS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApfSxFZS5wcm90b3R5cGUuaW5zZXJ0PUVlLnByb3RvdHlwZS5wdXNoLEVlLnByb3RvdHlwZS50b3A9RWUucHJvdG90eXBlLnBlZWssRWUucHJvdG90eXBlLmZyb250PUVlLnByb3RvdHlwZS5wZWVrLEVlLnByb3RvdHlwZS5oYXM9RWUucHJvdG90eXBlLmNvbnRhaW5zLEVlLnByb3RvdHlwZS5jb3B5PUVlLnByb3RvdHlwZS5jbG9uZSxFZX0oKSxmdW5jdGlvbihFZSxCZSl7cmV0dXJuIHguZXhwb3J0cz1CZSgpfSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KX0pLmNhbGwod3QpfSksVjk9R0osS0o9cTAoe3Jvb3Q6bnVsbCx3ZWlnaHQ6ZnVuY3Rpb24obSl7cmV0dXJuIDF9LGRpcmVjdGVkOiExfSksV0o9e2RpamtzdHJhOmZ1bmN0aW9uKG0pe2lmKCFzZShtKSl7dmFyIGs9YXJndW1lbnRzO209e3Jvb3Q6a1swXSx3ZWlnaHQ6a1sxXSxkaXJlY3RlZDprWzJdfX12YXIgUz1LSihtKSxNPVMucm9vdCxPPVMud2VpZ2h0LE49Uy5kaXJlY3RlZCwkPXRoaXMsSD1PLHE9YmUoTSk/dGhpcy5maWx0ZXIoTSlbMF06TVswXSxZPXt9LFo9e30sY2U9e30sdmU9dGhpcy5ieUdyb3VwKCksbWU9dmUubm9kZXMsTGU9dmUuZWRnZXM7TGUudW5tZXJnZUJ5KGZ1bmN0aW9uKF9uKXtyZXR1cm4gX24uaXNMb29wKCl9KTtmb3IodmFyIF9lPWZ1bmN0aW9uKGhuKXtyZXR1cm4gWVtobi5pZCgpXX0sRWU9ZnVuY3Rpb24oaG4sWXQpe1lbaG4uaWQoKV09WXQsQmUudXBkYXRlSXRlbShobil9LEJlPW5ldyBWOShmdW5jdGlvbihfbixobil7cmV0dXJuIF9lKF9uKS1fZShobil9KSxSZT0wO1JlPG1lLmxlbmd0aDtSZSsrKXt2YXIgVmU9bWVbUmVdO1lbVmUuaWQoKV09VmUuc2FtZShxKT8wOjEvMCxCZS5wdXNoKFZlKX1mb3IodmFyIGN0PWZ1bmN0aW9uKGhuLFl0KXtmb3IodmFyIERuPShOP2huLmVkZ2VzVG8oWXQpOmhuLmVkZ2VzV2l0aChZdCkpLmludGVyc2VjdChMZSksaXI9MS8wLHZyLE5uPTA7Tm48RG4ubGVuZ3RoO05uKyspe3ZhciBwcj1EbltObl0sRXI9SChwcik7KEVyPGlyfHwhdnIpJiYoaXI9RXIsdnI9cHIpfXJldHVybntlZGdlOnZyLGRpc3Q6aXJ9fTtCZS5zaXplKCk+MDspe3ZhciBzdD1CZS5wb3AoKSxZZT1fZShzdCksbXQ9c3QuaWQoKTtpZihjZVttdF09WWUsWWUhPT0xLzApZm9yKHZhciBKZT1zdC5uZWlnaGJvcmhvb2QoKS5pbnRlcnNlY3QobWUpLEx0PTA7THQ8SmUubGVuZ3RoO0x0Kyspe3ZhciBNdD1KZVtMdF0sdXQ9TXQuaWQoKSxXdD1jdChzdCxNdCksVHQ9WWUrV3QuZGlzdDtUdDxfZShNdCkmJihFZShNdCxUdCksWlt1dF09e25vZGU6c3QsZWRnZTpXdC5lZGdlfSl9fXJldHVybntkaXN0YW5jZVRvOmZ1bmN0aW9uKGhuKXt2YXIgWXQ9YmUoaG4pP21lLmZpbHRlcihobilbMF06aG5bMF07cmV0dXJuIGNlW1l0LmlkKCldfSxwYXRoVG86ZnVuY3Rpb24oaG4pe3ZhciBZdD1iZShobik/bWUuZmlsdGVyKGhuKVswXTpoblswXSxEbj1bXSxpcj1ZdCx2cj1pci5pZCgpO2lmKFl0Lmxlbmd0aD4wKWZvcihEbi51bnNoaWZ0KFl0KTtaW3ZyXTspe3ZhciBObj1aW3ZyXTtEbi51bnNoaWZ0KE5uLmVkZ2UpLERuLnVuc2hpZnQoTm4ubm9kZSksaXI9Tm4ubm9kZSx2cj1pci5pZCgpfXJldHVybiAkLnNwYXduKERuKX19fX0sWUo9e2tydXNrYWw6ZnVuY3Rpb24obSl7bT1tfHxmdW5jdGlvbihSZSl7cmV0dXJuIDF9O2Zvcih2YXIgaz10aGlzLmJ5R3JvdXAoKSxTPWsubm9kZXMsTT1rLmVkZ2VzLE89Uy5sZW5ndGgsTj1uZXcgQXJyYXkoTyksJD1TLEg9ZnVuY3Rpb24oVmUpe2Zvcih2YXIgY3Q9MDtjdDxOLmxlbmd0aDtjdCsrKXt2YXIgc3Q9TltjdF07aWYoc3QuaGFzKFZlKSlyZXR1cm4gY3R9fSxxPTA7cTxPO3ErKylOW3FdPXRoaXMuc3Bhd24oU1txXSk7Zm9yKHZhciBZPU0uc29ydChmdW5jdGlvbihSZSxWZSl7cmV0dXJuIG0oUmUpLW0oVmUpfSksWj0wO1o8WS5sZW5ndGg7WisrKXt2YXIgY2U9WVtaXSx2ZT1jZS5zb3VyY2UoKVswXSxtZT1jZS50YXJnZXQoKVswXSxMZT1IKHZlKSxfZT1IKG1lKSxFZT1OW0xlXSxCZT1OW19lXTtMZSE9PV9lJiYoJC5tZXJnZShjZSksRWUubWVyZ2UoQmUpLE4uc3BsaWNlKF9lLDEpKX1yZXR1cm4gJH19LFhKPXEwKHtyb290Om51bGwsZ29hbDpudWxsLHdlaWdodDpmdW5jdGlvbihtKXtyZXR1cm4gMX0saGV1cmlzdGljOmZ1bmN0aW9uKG0pe3JldHVybiAwfSxkaXJlY3RlZDohMX0pLFFKPXthU3RhcjpmdW5jdGlvbihtKXt2YXIgaz10aGlzLmN5KCksUz1YSihtKSxNPVMucm9vdCxPPVMuZ29hbCxOPVMuaGV1cmlzdGljLCQ9Uy5kaXJlY3RlZCxIPVMud2VpZ2h0O009ay5jb2xsZWN0aW9uKE0pWzBdLE89ay5jb2xsZWN0aW9uKE8pWzBdO3ZhciBxPU0uaWQoKSxZPU8uaWQoKSxaPXt9LGNlPXt9LHZlPXt9LG1lPW5ldyBWOShmdW5jdGlvbih2cixObil7cmV0dXJuIGNlW3ZyLmlkKCldLWNlW05uLmlkKCldfSksTGU9bmV3IFE3LF9lPXt9LEVlPXt9LEJlPWZ1bmN0aW9uKE5uLHByKXttZS5wdXNoKE5uKSxMZS5hZGQocHIpfSxSZSxWZSxjdD1mdW5jdGlvbigpe1JlPW1lLnBvcCgpLFZlPVJlLmlkKCksTGUuZGVsZXRlKFZlKX0sc3Q9ZnVuY3Rpb24oTm4pe3JldHVybiBMZS5oYXMoTm4pfTtCZShNLHEpLFpbcV09MCxjZVtxXT1OKE0pO2Zvcih2YXIgWWU9MDttZS5zaXplKCk+MDspe2lmKGN0KCksWWUrKyxWZT09PVkpe2Zvcih2YXIgbXQ9W10sSmU9TyxMdD1ZLE10PUVlW0x0XTttdC51bnNoaWZ0KEplKSxNdCE9bnVsbCYmbXQudW5zaGlmdChNdCksSmU9X2VbTHRdLEplIT1udWxsOylMdD1KZS5pZCgpLE10PUVlW0x0XTtyZXR1cm57Zm91bmQ6ITAsZGlzdGFuY2U6WltWZV0scGF0aDp0aGlzLnNwYXduKG10KSxzdGVwczpZZX19dmVbVmVdPSEwO2Zvcih2YXIgdXQ9UmUuX3ByaXZhdGUuZWRnZXMsV3Q9MDtXdDx1dC5sZW5ndGg7V3QrKyl7dmFyIFR0PXV0W1d0XTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoVHQuaWQoKSkmJiEoJCYmVHQuZGF0YSgic291cmNlIikhPT1WZSkpe3ZhciBfbj1UdC5zb3VyY2UoKSxobj1UdC50YXJnZXQoKSxZdD1fbi5pZCgpIT09VmU/X246aG4sRG49WXQuaWQoKTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoRG4pJiYhdmVbRG5dKXt2YXIgaXI9WltWZV0rSChUdCk7aWYoIXN0KERuKSl7WltEbl09aXIsY2VbRG5dPWlyK04oWXQpLEJlKFl0LERuKSxfZVtEbl09UmUsRWVbRG5dPVR0O2NvbnRpbnVlfWlyPFpbRG5dJiYoWltEbl09aXIsY2VbRG5dPWlyK04oWXQpLF9lW0RuXT1SZSxFZVtEbl09VHQpfX19fXJldHVybntmb3VuZDohMSxkaXN0YW5jZTp2b2lkIDAscGF0aDp2b2lkIDAsc3RlcHM6WWV9fX0sSko9cTAoe3dlaWdodDpmdW5jdGlvbihtKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITF9KSxaSj17ZmxveWRXYXJzaGFsbDpmdW5jdGlvbihtKXtmb3IodmFyIGs9dGhpcy5jeSgpLFM9SkoobSksTT1TLndlaWdodCxPPVMuZGlyZWN0ZWQsTj1NLCQ9dGhpcy5ieUdyb3VwKCksSD0kLm5vZGVzLHE9JC5lZGdlcyxZPUgubGVuZ3RoLFo9WSpZLGNlPWZ1bmN0aW9uKEVyKXtyZXR1cm4gSC5pbmRleE9mKEVyKX0sdmU9ZnVuY3Rpb24oRXIpe3JldHVybiBIW0VyXX0sbWU9bmV3IEFycmF5KFopLExlPTA7TGU8WjtMZSsrKXt2YXIgX2U9TGUlWSxFZT0oTGUtX2UpL1k7RWU9PT1fZT9tZVtMZV09MDptZVtMZV09MS8wfWZvcih2YXIgQmU9bmV3IEFycmF5KFopLFJlPW5ldyBBcnJheShaKSxWZT0wO1ZlPHEubGVuZ3RoO1ZlKyspe3ZhciBjdD1xW1ZlXSxzdD1jdC5zb3VyY2UoKVswXSxZZT1jdC50YXJnZXQoKVswXTtpZihzdCE9PVllKXt2YXIgbXQ9Y2Uoc3QpLEplPWNlKFllKSxMdD1tdCpZK0plLE10PU4oY3QpO2lmKG1lW0x0XT5NdCYmKG1lW0x0XT1NdCxCZVtMdF09SmUsUmVbTHRdPWN0KSwhTyl7dmFyIHV0PUplKlkrbXQ7IU8mJm1lW3V0XT5NdCYmKG1lW3V0XT1NdCxCZVt1dF09bXQsUmVbdXRdPWN0KX19fWZvcih2YXIgV3Q9MDtXdDxZO1d0KyspZm9yKHZhciBUdD0wO1R0PFk7VHQrKylmb3IodmFyIF9uPVR0KlkrV3QsaG49MDtobjxZO2huKyspe3ZhciBZdD1UdCpZK2huLERuPVd0KlkraG47bWVbX25dK21lW0RuXTxtZVtZdF0mJihtZVtZdF09bWVbX25dK21lW0RuXSxCZVtZdF09QmVbX25dKX12YXIgaXI9ZnVuY3Rpb24oRXIpe3JldHVybihiZShFcik/ay5maWx0ZXIoRXIpOkVyKVswXX0sdnI9ZnVuY3Rpb24oRXIpe3JldHVybiBjZShpcihFcikpfSxObj17ZGlzdGFuY2U6ZnVuY3Rpb24oRXIsTXIpe3ZhciBDcj12cihFciksT3I9dnIoTXIpO3JldHVybiBtZVtDcipZK09yXX0scGF0aDpmdW5jdGlvbihFcixNcil7dmFyIENyPXZyKEVyKSxPcj12cihNciksV249dmUoQ3IpO2lmKENyPT09T3IpcmV0dXJuIFduLmNvbGxlY3Rpb24oKTtpZihCZVtDcipZK09yXT09bnVsbClyZXR1cm4gay5jb2xsZWN0aW9uKCk7dmFyIGJyPWsuY29sbGVjdGlvbigpLFNyPUNyLE5yO2Zvcihici5tZXJnZShXbik7Q3IhPT1PcjspU3I9Q3IsQ3I9QmVbQ3IqWStPcl0sTnI9UmVbU3IqWStDcl0sYnIubWVyZ2UoTnIpLGJyLm1lcmdlKHZlKENyKSk7cmV0dXJuIGJyfX07cmV0dXJuIE5ufX0sZVo9cTAoe3dlaWdodDpmdW5jdGlvbihtKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSksdFo9e2JlbGxtYW5Gb3JkOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMsUz1lWihtKSxNPVMud2VpZ2h0LE89Uy5kaXJlY3RlZCxOPVMucm9vdCwkPU0sSD10aGlzLHE9dGhpcy5jeSgpLFk9dGhpcy5ieUdyb3VwKCksWj1ZLmVkZ2VzLGNlPVkubm9kZXMsdmU9Y2UubGVuZ3RoLG1lPW5ldyB3bSxMZT0hMSxfZT1bXTtOPXEuY29sbGVjdGlvbihOKVswXSxaLnVubWVyZ2VCeShmdW5jdGlvbihGcyl7cmV0dXJuIEZzLmlzTG9vcCgpfSk7Zm9yKHZhciBFZT1aLmxlbmd0aCxCZT1mdW5jdGlvbih4cyl7dmFyIFJzPW1lLmdldCh4cy5pZCgpKTtyZXR1cm4gUnN8fChScz17fSxtZS5zZXQoeHMuaWQoKSxScykpLFJzfSxSZT1mdW5jdGlvbih4cyl7cmV0dXJuKGJlKHhzKT9xLiQoeHMpOnhzKVswXX0sVmU9ZnVuY3Rpb24oeHMpe3JldHVybiBCZShSZSh4cykpLmRpc3R9LGN0PWZ1bmN0aW9uKHhzKXtmb3IodmFyIFJzPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpOLHlvPVJlKHhzKSwkYT1bXSxEYT15bzs7KXtpZihEYT09bnVsbClyZXR1cm4gay5zcGF3bigpO3ZhciBCbz1CZShEYSksdHI9Qm8uZWRnZSxHPUJvLnByZWQ7aWYoJGEudW5zaGlmdChEYVswXSksRGEuc2FtZShScykmJiRhLmxlbmd0aD4wKWJyZWFrO3RyIT1udWxsJiYkYS51bnNoaWZ0KHRyKSxEYT1HfXJldHVybiBILnNwYXduKCRhKX0sc3Q9MDtzdDx2ZTtzdCsrKXt2YXIgWWU9Y2Vbc3RdLG10PUJlKFllKTtZZS5zYW1lKE4pP210LmRpc3Q9MDptdC5kaXN0PTEvMCxtdC5wcmVkPW51bGwsbXQuZWRnZT1udWxsfWZvcih2YXIgSmU9ITEsTHQ9ZnVuY3Rpb24oeHMsUnMseW8sJGEsRGEsQm8pe3ZhciB0cj0kYS5kaXN0K0JvO3RyPERhLmRpc3QmJiF5by5zYW1lKCRhLmVkZ2UpJiYoRGEuZGlzdD10cixEYS5wcmVkPXhzLERhLmVkZ2U9eW8sSmU9ITApfSxNdD0xO010PHZlO010Kyspe0plPSExO2Zvcih2YXIgdXQ9MDt1dDxFZTt1dCsrKXt2YXIgV3Q9Wlt1dF0sVHQ9V3Quc291cmNlKCksX249V3QudGFyZ2V0KCksaG49JChXdCksWXQ9QmUoVHQpLERuPUJlKF9uKTtMdChUdCxfbixXdCxZdCxEbixobiksT3x8THQoX24sVHQsV3QsRG4sWXQsaG4pfWlmKCFKZSlicmVha31pZihKZSlmb3IodmFyIGlyPVtdLHZyPTA7dnI8RWU7dnIrKyl7dmFyIE5uPVpbdnJdLHByPU5uLnNvdXJjZSgpLEVyPU5uLnRhcmdldCgpLE1yPSQoTm4pLENyPUJlKHByKS5kaXN0LE9yPUJlKEVyKS5kaXN0O2lmKENyK01yPE9yfHwhTyYmT3IrTXI8Q3IpaWYoTGV8fChodSgiR3JhcGggY29udGFpbnMgYSBuZWdhdGl2ZSB3ZWlnaHQgY3ljbGUgZm9yIEJlbGxtYW4tRm9yZCIpLExlPSEwKSxtLmZpbmROZWdhdGl2ZVdlaWdodEN5Y2xlcyE9PSExKXt2YXIgV249W107Q3IrTXI8T3ImJlduLnB1c2gocHIpLCFPJiZPcitNcjxDciYmV24ucHVzaChFcik7Zm9yKHZhciBicj1Xbi5sZW5ndGgsU3I9MDtTcjxicjtTcisrKXt2YXIgTnI9V25bU3JdLFNpPVtOcl07U2kucHVzaChCZShOcikuZWRnZSk7Zm9yKHZhciB5cz1CZShOcikucHJlZDtTaS5pbmRleE9mKHlzKT09PS0xOylTaS5wdXNoKHlzKSxTaS5wdXNoKEJlKHlzKS5lZGdlKSx5cz1CZSh5cykucHJlZDtTaT1TaS5zbGljZShTaS5pbmRleE9mKHlzKSk7Zm9yKHZhciBwYT1TaVswXS5pZCgpLE1pPTAsZ2k9MjtnaTxTaS5sZW5ndGg7Z2krPTIpU2lbZ2ldLmlkKCk8cGEmJihwYT1TaVtnaV0uaWQoKSxNaT1naSk7U2k9U2kuc2xpY2UoTWkpLmNvbmNhdChTaS5zbGljZSgwLE1pKSksU2kucHVzaChTaVswXSk7dmFyIGZzPVNpLm1hcChmdW5jdGlvbihGcyl7cmV0dXJuIEZzLmlkKCl9KS5qb2luKCIsIik7aXIuaW5kZXhPZihmcyk9PT0tMSYmKF9lLnB1c2goSC5zcGF3bihTaSkpLGlyLnB1c2goZnMpKX19ZWxzZSBicmVha31yZXR1cm57ZGlzdGFuY2VUbzpWZSxwYXRoVG86Y3QsaGFzTmVnYXRpdmVXZWlnaHRDeWNsZTpMZSxuZWdhdGl2ZVdlaWdodEN5Y2xlczpfZX19fSxuWj1NYXRoLnNxcnQoMiksclo9ZnVuY3Rpb24obSxrLFMpe1MubGVuZ3RoPT09MCYmY2goIkthcmdlci1TdGVpbiBtdXN0IGJlIHJ1biBvbiBhIGNvbm5lY3RlZCAoc3ViKWdyYXBoIik7Zm9yKHZhciBNPVNbbV0sTz1NWzFdLE49TVsyXSwkPWtbT10sSD1rW05dLHE9UyxZPXEubGVuZ3RoLTE7WT49MDtZLS0pe3ZhciBaPXFbWV0sY2U9WlsxXSx2ZT1aWzJdOyhrW2NlXT09PSQmJmtbdmVdPT09SHx8a1tjZV09PT1IJiZrW3ZlXT09PSQpJiZxLnNwbGljZShZLDEpfWZvcih2YXIgbWU9MDttZTxxLmxlbmd0aDttZSsrKXt2YXIgTGU9cVttZV07TGVbMV09PT1IPyhxW21lXT1MZS5zbGljZSgpLHFbbWVdWzFdPSQpOkxlWzJdPT09SCYmKHFbbWVdPUxlLnNsaWNlKCkscVttZV1bMl09JCl9Zm9yKHZhciBfZT0wO19lPGsubGVuZ3RoO19lKyspa1tfZV09PT1IJiYoa1tfZV09JCk7cmV0dXJuIHF9LHJJPWZ1bmN0aW9uKG0sayxTLE0pe2Zvcig7Uz5NOyl7dmFyIE89TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmsubGVuZ3RoKTtrPXJaKE8sbSxrKSxTLS19cmV0dXJuIGt9LGlaPXtrYXJnZXJTdGVpbjpmdW5jdGlvbigpe3ZhciBtPXRoaXMsaz10aGlzLmJ5R3JvdXAoKSxTPWsubm9kZXMsTT1rLmVkZ2VzO00udW5tZXJnZUJ5KGZ1bmN0aW9uKERuKXtyZXR1cm4gRG4uaXNMb29wKCl9KTt2YXIgTz1TLmxlbmd0aCxOPU0ubGVuZ3RoLCQ9TWF0aC5jZWlsKE1hdGgucG93KE1hdGgubG9nKE8pL01hdGguTE4yLDIpKSxIPU1hdGguZmxvb3IoTy9uWik7aWYoTzwyKXtjaCgiQXQgbGVhc3QgMiBub2RlcyBhcmUgcmVxdWlyZWQgZm9yIEthcmdlci1TdGVpbiBhbGdvcml0aG0iKTtyZXR1cm59Zm9yKHZhciBxPVtdLFk9MDtZPE47WSsrKXt2YXIgWj1NW1ldO3EucHVzaChbWSxTLmluZGV4T2YoWi5zb3VyY2UoKSksUy5pbmRleE9mKFoudGFyZ2V0KCkpXSl9Zm9yKHZhciBjZT0xLzAsdmU9W10sbWU9bmV3IEFycmF5KE8pLExlPW5ldyBBcnJheShPKSxfZT1uZXcgQXJyYXkoTyksRWU9ZnVuY3Rpb24oaXIsdnIpe2Zvcih2YXIgTm49MDtObjxPO05uKyspdnJbTm5dPWlyW05uXX0sQmU9MDtCZTw9JDtCZSsrKXtmb3IodmFyIFJlPTA7UmU8TztSZSsrKUxlW1JlXT1SZTt2YXIgVmU9ckkoTGUscS5zbGljZSgpLE8sSCksY3Q9VmUuc2xpY2UoKTtFZShMZSxfZSk7dmFyIHN0PXJJKExlLFZlLEgsMiksWWU9ckkoX2UsY3QsSCwyKTtzdC5sZW5ndGg8PVllLmxlbmd0aCYmc3QubGVuZ3RoPGNlPyhjZT1zdC5sZW5ndGgsdmU9c3QsRWUoTGUsbWUpKTpZZS5sZW5ndGg8PXN0Lmxlbmd0aCYmWWUubGVuZ3RoPGNlJiYoY2U9WWUubGVuZ3RoLHZlPVllLEVlKF9lLG1lKSl9Zm9yKHZhciBtdD10aGlzLnNwYXduKHZlLm1hcChmdW5jdGlvbihEbil7cmV0dXJuIE1bRG5bMF1dfSkpLEplPXRoaXMuc3Bhd24oKSxMdD10aGlzLnNwYXduKCksTXQ9bWVbMF0sdXQ9MDt1dDxtZS5sZW5ndGg7dXQrKyl7dmFyIFd0PW1lW3V0XSxUdD1TW3V0XTtXdD09PU10P0plLm1lcmdlKFR0KTpMdC5tZXJnZShUdCl9dmFyIF9uPWZ1bmN0aW9uKGlyKXt2YXIgdnI9bS5zcGF3bigpO3JldHVybiBpci5mb3JFYWNoKGZ1bmN0aW9uKE5uKXt2ci5tZXJnZShObiksTm4uY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHByKXttLmNvbnRhaW5zKHByKSYmIW10LmNvbnRhaW5zKHByKSYmdnIubWVyZ2UocHIpfSl9KSx2cn0saG49W19uKEplKSxfbihMdCldLFl0PXtjdXQ6bXQsY29tcG9uZW50czpobixwYXJ0aXRpb24xOkplLHBhcnRpdGlvbjI6THR9O3JldHVybiBZdH19LHNaPWZ1bmN0aW9uKG0pe3JldHVybnt4Om0ueCx5Om0ueX19LGxTPWZ1bmN0aW9uKG0sayxTKXtyZXR1cm57eDptLngqaytTLngseTptLnkqaytTLnl9fSxoaj1mdW5jdGlvbihtLGssUyl7cmV0dXJue3g6KG0ueC1TLngpL2sseToobS55LVMueSkva319LEo3PWZ1bmN0aW9uKG0pe3JldHVybnt4Om1bMF0seTptWzFdfX0sYVo9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFM9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm0ubGVuZ3RoLE09MS8wLE89aztPPFM7TysrKXt2YXIgTj1tW09dO2lzRmluaXRlKE4pJiYoTT1NYXRoLm1pbihOLE0pKX1yZXR1cm4gTX0sb1o9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFM9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm0ubGVuZ3RoLE09LTEvMCxPPWs7TzxTO08rKyl7dmFyIE49bVtPXTtpc0Zpbml0ZShOKSYmKE09TWF0aC5tYXgoTixNKSl9cmV0dXJuIE19LGNaPWZ1bmN0aW9uKG0pe2Zvcih2YXIgaz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCxTPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTptLmxlbmd0aCxNPTAsTz0wLE49aztOPFM7TisrKXt2YXIgJD1tW05dO2lzRmluaXRlKCQpJiYoTSs9JCxPKyspfXJldHVybiBNL099LHVaPWZ1bmN0aW9uKG0pe3ZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFM9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm0ubGVuZ3RoLE09YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLE89YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLE49YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwO00/bT1tLnNsaWNlKGssUyk6KFM8bS5sZW5ndGgmJm0uc3BsaWNlKFMsbS5sZW5ndGgtUyksaz4wJiZtLnNwbGljZSgwLGspKTtmb3IodmFyICQ9MCxIPW0ubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBxPW1bSF07Tj9pc0Zpbml0ZShxKXx8KG1bSF09LTEvMCwkKyspOm0uc3BsaWNlKEgsMSl9TyYmbS5zb3J0KGZ1bmN0aW9uKGNlLHZlKXtyZXR1cm4gY2UtdmV9KTt2YXIgWT1tLmxlbmd0aCxaPU1hdGguZmxvb3IoWS8yKTtyZXR1cm4gWSUyIT09MD9tW1orMSskXToobVtaLTErJF0rbVtaKyRdKS8yfSxsWj1mdW5jdGlvbihtKXtyZXR1cm4gTWF0aC5QSSptLzE4MH0saFM9ZnVuY3Rpb24obSxrKXtyZXR1cm4gTWF0aC5hdGFuMihrLG0pLU1hdGguUEkvMn0saUk9TWF0aC5sb2cyfHxmdW5jdGlvbih4KXtyZXR1cm4gTWF0aC5sb2coeCkvTWF0aC5sb2coMil9LGZqPWZ1bmN0aW9uKG0pe3JldHVybiBtPjA/MTptPDA/LTE6MH0saDU9ZnVuY3Rpb24obSxrKXtyZXR1cm4gTWF0aC5zcXJ0KGY1KG0saykpfSxmNT1mdW5jdGlvbihtLGspe3ZhciBTPWsueC1tLngsTT1rLnktbS55O3JldHVybiBTKlMrTSpNfSxoWj1mdW5jdGlvbihtKXtmb3IodmFyIGs9bS5sZW5ndGgsUz0wLE09MDtNPGs7TSsrKVMrPW1bTV07Zm9yKHZhciBPPTA7TzxrO08rKyltW09dPW1bT10vUztyZXR1cm4gbX0sdDA9ZnVuY3Rpb24obSxrLFMsTSl7cmV0dXJuKDEtTSkqKDEtTSkqbSsyKigxLU0pKk0qaytNKk0qU30sWjc9ZnVuY3Rpb24obSxrLFMsTSl7cmV0dXJue3g6dDAobS54LGsueCxTLngsTSkseTp0MChtLnksay55LFMueSxNKX19LGZaPWZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPXt4OmsueC1tLngseTprLnktbS55fSxOPWg1KG0sayksJD17eDpPLngvTix5Ok8ueS9OfTtyZXR1cm4gUz1TPz8wLE09TT8/UypOLHt4Om0ueCskLngqTSx5Om0ueSskLnkqTX19LFU5PWZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gTWF0aC5tYXgobSxNYXRoLm1pbihTLGspKX0sV2Q9ZnVuY3Rpb24obSl7aWYobT09bnVsbClyZXR1cm57eDE6MS8wLHkxOjEvMCx4MjotMS8wLHkyOi0xLzAsdzowLGg6MH07aWYobS54MSE9bnVsbCYmbS55MSE9bnVsbCl7aWYobS54MiE9bnVsbCYmbS55MiE9bnVsbCYmbS54Mj49bS54MSYmbS55Mj49bS55MSlyZXR1cm57eDE6bS54MSx5MTptLnkxLHgyOm0ueDIseTI6bS55Mix3Om0ueDItbS54MSxoOm0ueTItbS55MX07aWYobS53IT1udWxsJiZtLmghPW51bGwmJm0udz49MCYmbS5oPj0wKXJldHVybnt4MTptLngxLHkxOm0ueTEseDI6bS54MSttLncseTI6bS55MSttLmgsdzptLncsaDptLmh9fX0sZFo9ZnVuY3Rpb24obSl7cmV0dXJue3gxOm0ueDEseDI6bS54Mix3Om0udyx5MTptLnkxLHkyOm0ueTIsaDptLmh9fSxnWj1mdW5jdGlvbihtKXttLngxPTEvMCxtLnkxPTEvMCxtLngyPS0xLzAsbS55Mj0tMS8wLG0udz0wLG0uaD0wfSxwWj1mdW5jdGlvbihtLGssUyl7cmV0dXJue3gxOm0ueDErayx4MjptLngyK2sseTE6bS55MStTLHkyOm0ueTIrUyx3Om0udyxoOm0uaH19LGRqPWZ1bmN0aW9uKG0sayl7bS54MT1NYXRoLm1pbihtLngxLGsueDEpLG0ueDI9TWF0aC5tYXgobS54MixrLngyKSxtLnc9bS54Mi1tLngxLG0ueTE9TWF0aC5taW4obS55MSxrLnkxKSxtLnkyPU1hdGgubWF4KG0ueTIsay55MiksbS5oPW0ueTItbS55MX0sYlo9ZnVuY3Rpb24obSxrLFMpe20ueDE9TWF0aC5taW4obS54MSxrKSxtLngyPU1hdGgubWF4KG0ueDIsayksbS53PW0ueDItbS54MSxtLnkxPU1hdGgubWluKG0ueTEsUyksbS55Mj1NYXRoLm1heChtLnkyLFMpLG0uaD1tLnkyLW0ueTF9LGZTPWZ1bmN0aW9uKG0pe3ZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowO3JldHVybiBtLngxLT1rLG0ueDIrPWssbS55MS09ayxtLnkyKz1rLG0udz1tLngyLW0ueDEsbS5oPW0ueTItbS55MSxtfSxkUz1mdW5jdGlvbihtKXt2YXIgaz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WzBdLFMsTSxPLE47aWYoay5sZW5ndGg9PT0xKVM9TT1PPU49a1swXTtlbHNlIGlmKGsubGVuZ3RoPT09MilTPU89a1swXSxOPU09a1sxXTtlbHNlIGlmKGsubGVuZ3RoPT09NCl7dmFyICQ9eShrLDQpO1M9JFswXSxNPSRbMV0sTz0kWzJdLE49JFszXX1yZXR1cm4gbS54MS09TixtLngyKz1NLG0ueTEtPVMsbS55Mis9TyxtLnc9bS54Mi1tLngxLG0uaD1tLnkyLW0ueTEsbX0sZ2o9ZnVuY3Rpb24obSxrKXttLngxPWsueDEsbS55MT1rLnkxLG0ueDI9ay54MixtLnkyPWsueTIsbS53PW0ueDItbS54MSxtLmg9bS55Mi1tLnkxfSxzST1mdW5jdGlvbihtLGspe3JldHVybiEobS54MT5rLngyfHxrLngxPm0ueDJ8fG0ueDI8ay54MXx8ay54MjxtLngxfHxtLnkyPGsueTF8fGsueTI8bS55MXx8bS55MT5rLnkyfHxrLnkxPm0ueTIpfSxlOD1mdW5jdGlvbihtLGssUyl7cmV0dXJuIG0ueDE8PWsmJms8PW0ueDImJm0ueTE8PVMmJlM8PW0ueTJ9LG1aPWZ1bmN0aW9uKG0sayl7cmV0dXJuIGU4KG0say54LGsueSl9LHBqPWZ1bmN0aW9uKG0sayl7cmV0dXJuIGU4KG0say54MSxrLnkxKSYmZTgobSxrLngyLGsueTIpfSxiaj1mdW5jdGlvbihtLGssUyxNLE8sTiwkKXt2YXIgSD1XOShPLE4pLHE9Ty8yLFk9Ti8yLFo7e3ZhciBjZT1TLXErSC0kLHZlPU0tWS0kLG1lPVMrcS1IKyQsTGU9dmU7aWYoWj1aMyhtLGssUyxNLGNlLHZlLG1lLExlLCExKSxaLmxlbmd0aD4wKXJldHVybiBafXt2YXIgX2U9UytxKyQsRWU9TS1ZK0gtJCxCZT1fZSxSZT1NK1ktSCskO2lmKFo9WjMobSxrLFMsTSxfZSxFZSxCZSxSZSwhMSksWi5sZW5ndGg+MClyZXR1cm4gWn17dmFyIFZlPVMtcStILSQsY3Q9TStZKyQsc3Q9UytxLUgrJCxZZT1jdDtpZihaPVozKG0sayxTLE0sVmUsY3Qsc3QsWWUsITEpLFoubGVuZ3RoPjApcmV0dXJuIFp9e3ZhciBtdD1TLXEtJCxKZT1NLVkrSC0kLEx0PW10LE10PU0rWS1IKyQ7aWYoWj1aMyhtLGssUyxNLG10LEplLEx0LE10LCExKSxaLmxlbmd0aD4wKXJldHVybiBafXZhciB1dDt7dmFyIFd0PVMtcStILFR0PU0tWStIO2lmKHV0PUc5KG0sayxTLE0sV3QsVHQsSCskKSx1dC5sZW5ndGg+MCYmdXRbMF08PVd0JiZ1dFsxXTw9VHQpcmV0dXJuW3V0WzBdLHV0WzFdXX17dmFyIF9uPVMrcS1ILGhuPU0tWStIO2lmKHV0PUc5KG0sayxTLE0sX24saG4sSCskKSx1dC5sZW5ndGg+MCYmdXRbMF0+PV9uJiZ1dFsxXTw9aG4pcmV0dXJuW3V0WzBdLHV0WzFdXX17dmFyIFl0PVMrcS1ILERuPU0rWS1IO2lmKHV0PUc5KG0sayxTLE0sWXQsRG4sSCskKSx1dC5sZW5ndGg+MCYmdXRbMF0+PVl0JiZ1dFsxXT49RG4pcmV0dXJuW3V0WzBdLHV0WzFdXX17dmFyIGlyPVMtcStILHZyPU0rWS1IO2lmKHV0PUc5KG0sayxTLE0saXIsdnIsSCskKSx1dC5sZW5ndGg+MCYmdXRbMF08PWlyJiZ1dFsxXT49dnIpcmV0dXJuW3V0WzBdLHV0WzFdXX1yZXR1cm5bXX0sdlo9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7dmFyIEg9JCxxPU1hdGgubWluKFMsTyksWT1NYXRoLm1heChTLE8pLFo9TWF0aC5taW4oTSxOKSxjZT1NYXRoLm1heChNLE4pO3JldHVybiBxLUg8PW0mJm08PVkrSCYmWi1IPD1rJiZrPD1jZStIfSx3Wj1mdW5jdGlvbihtLGssUyxNLE8sTiwkLEgscSl7dmFyIFk9e3gxOk1hdGgubWluKFMsJCxPKS1xLHgyOk1hdGgubWF4KFMsJCxPKStxLHkxOk1hdGgubWluKE0sSCxOKS1xLHkyOk1hdGgubWF4KE0sSCxOKStxfTtyZXR1cm4hKG08WS54MXx8bT5ZLngyfHxrPFkueTF8fGs+WS55Mil9LHlaPWZ1bmN0aW9uKG0sayxTLE0pe1MtPU07dmFyIE89ayprLTQqbSpTO2lmKE88MClyZXR1cm5bXTt2YXIgTj1NYXRoLnNxcnQoTyksJD0yKm0sSD0oLWsrTikvJCxxPSgtay1OKS8kO3JldHVybltILHFdfSx4Wj1mdW5jdGlvbihtLGssUyxNLE8pe3ZhciBOPTFlLTU7bT09PTAmJihtPU4pLGsvPW0sUy89bSxNLz1tO3ZhciAkLEgscSxZLFosY2UsdmUsbWU7aWYoSD0oMypTLWsqaykvOSxxPS0oMjcqTSkrayooOSpTLTIqKGsqaykpLHEvPTU0LCQ9SCpIKkgrcSpxLE9bMV09MCx2ZT1rLzMsJD4wKXtaPXErTWF0aC5zcXJ0KCQpLFo9WjwwPy1NYXRoLnBvdygtWiwxLzMpOk1hdGgucG93KFosMS8zKSxjZT1xLU1hdGguc3FydCgkKSxjZT1jZTwwPy1NYXRoLnBvdygtY2UsMS8zKTpNYXRoLnBvdyhjZSwxLzMpLE9bMF09LXZlK1orY2UsdmUrPShaK2NlKS8yLE9bNF09T1syXT0tdmUsdmU9TWF0aC5zcXJ0KDMpKigtY2UrWikvMixPWzNdPXZlLE9bNV09LXZlO3JldHVybn1pZihPWzVdPU9bM109MCwkPT09MCl7bWU9cTwwPy1NYXRoLnBvdygtcSwxLzMpOk1hdGgucG93KHEsMS8zKSxPWzBdPS12ZSsyKm1lLE9bNF09T1syXT0tKG1lK3ZlKTtyZXR1cm59SD0tSCxZPUgqSCpILFk9TWF0aC5hY29zKHEvTWF0aC5zcXJ0KFkpKSxtZT0yKk1hdGguc3FydChIKSxPWzBdPS12ZSttZSpNYXRoLmNvcyhZLzMpLE9bMl09LXZlK21lKk1hdGguY29zKChZKzIqTWF0aC5QSSkvMyksT1s0XT0tdmUrbWUqTWF0aC5jb3MoKFkrNCpNYXRoLlBJKS8zKX0sa1o9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCxIKXt2YXIgcT0xKlMqUy00KlMqTysyKlMqJCs0Kk8qTy00Kk8qJCskKiQrTSpNLTQqTSpOKzIqTSpIKzQqTipOLTQqTipIK0gqSCxZPTEqOSpTKk8tMypTKlMtMypTKiQtNipPKk8rMypPKiQrOSpNKk4tMypNKk0tMypNKkgtNipOKk4rMypOKkgsWj0xKjMqUypTLTYqUypPK1MqJC1TKm0rMipPKk8rMipPKm0tJCptKzMqTSpNLTYqTSpOK00qSC1NKmsrMipOKk4rMipOKmstSCprLGNlPTEqUypPLVMqUytTKm0tTyptK00qTi1NKk0rTSprLU4qayx2ZT1bXTt4WihxLFksWixjZSx2ZSk7Zm9yKHZhciBtZT0xZS03LExlPVtdLF9lPTA7X2U8NjtfZSs9MilNYXRoLmFicyh2ZVtfZSsxXSk8bWUmJnZlW19lXT49MCYmdmVbX2VdPD0xJiZMZS5wdXNoKHZlW19lXSk7TGUucHVzaCgxKSxMZS5wdXNoKDApO2Zvcih2YXIgRWU9LTEsQmUsUmUsVmUsY3Q9MDtjdDxMZS5sZW5ndGg7Y3QrKylCZT1NYXRoLnBvdygxLUxlW2N0XSwyKSpTKzIqKDEtTGVbY3RdKSpMZVtjdF0qTytMZVtjdF0qTGVbY3RdKiQsUmU9TWF0aC5wb3coMS1MZVtjdF0sMikqTSsyKigxLUxlW2N0XSkqTGVbY3RdKk4rTGVbY3RdKkxlW2N0XSpILFZlPU1hdGgucG93KEJlLW0sMikrTWF0aC5wb3coUmUtaywyKSxFZT49MD9WZTxFZSYmKEVlPVZlKTpFZT1WZTtyZXR1cm4gRWV9LEVaPWZ1bmN0aW9uKG0sayxTLE0sTyxOKXt2YXIgJD1bbS1TLGstTV0sSD1bTy1TLE4tTV0scT1IWzBdKkhbMF0rSFsxXSpIWzFdLFk9JFswXSokWzBdKyRbMV0qJFsxXSxaPSRbMF0qSFswXSskWzFdKkhbMV0sY2U9WipaL3E7cmV0dXJuIFo8MD9ZOmNlPnE/KG0tTykqKG0tTykrKGstTikqKGstTik6WS1jZX0sWWQ9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTSxPLE4sJCxILHE9MCxZPTA7WTxTLmxlbmd0aC8yO1krKylpZihNPVNbWSoyXSxPPVNbWSoyKzFdLFkrMTxTLmxlbmd0aC8yPyhOPVNbKFkrMSkqMl0sJD1TWyhZKzEpKjIrMV0pOihOPVNbKFkrMS1TLmxlbmd0aC8yKSoyXSwkPVNbKFkrMS1TLmxlbmd0aC8yKSoyKzFdKSwhKE09PW0mJk49PW0pKWlmKE0+PW0mJm0+PU58fE08PW0mJm08PU4pSD0obS1NKS8oTi1NKSooJC1PKStPLEg+ayYmcSsrO2Vsc2UgY29udGludWU7cmV0dXJuIHElMiE9PTB9LFV2PWZ1bmN0aW9uKG0sayxTLE0sTyxOLCQsSCxxKXt2YXIgWT1uZXcgQXJyYXkoUy5sZW5ndGgpLFo7SFswXSE9bnVsbD8oWj1NYXRoLmF0YW4oSFsxXS9IWzBdKSxIWzBdPDA/Wj1aK01hdGguUEkvMjpaPS1aLU1hdGguUEkvMik6Wj1IO2Zvcih2YXIgY2U9TWF0aC5jb3MoLVopLHZlPU1hdGguc2luKC1aKSxtZT0wO21lPFkubGVuZ3RoLzI7bWUrKylZW21lKjJdPU4vMiooU1ttZSoyXSpjZS1TW21lKjIrMV0qdmUpLFlbbWUqMisxXT0kLzIqKFNbbWUqMisxXSpjZStTW21lKjJdKnZlKSxZW21lKjJdKz1NLFlbbWUqMisxXSs9Tzt2YXIgTGU7aWYocT4wKXt2YXIgX2U9cFMoWSwtcSk7TGU9Z1MoX2UpfWVsc2UgTGU9WTtyZXR1cm4gWWQobSxrLExlKX0sVFo9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7Zm9yKHZhciBIPW5ldyBBcnJheShTLmxlbmd0aCkscT1OLzIsWT0kLzIsWj1jSShOLCQpLGNlPVoqWix2ZT0wO3ZlPFMubGVuZ3RoLzQ7dmUrKyl7dmFyIG1lPXZvaWQgMCxMZT12b2lkIDA7dmU9PT0wP21lPVMubGVuZ3RoLTI6bWU9dmUqNC0yLExlPXZlKjQrMjt2YXIgX2U9TStxKlNbdmUqNF0sRWU9TytZKlNbdmUqNCsxXSxCZT0tU1ttZV0qU1tMZV0tU1ttZSsxXSpTW0xlKzFdLFJlPVovTWF0aC50YW4oTWF0aC5hY29zKEJlKS8yKSxWZT1fZS1SZSpTW21lXSxjdD1FZS1SZSpTW21lKzFdLHN0PV9lK1JlKlNbTGVdLFllPUVlK1JlKlNbTGUrMV07SFt2ZSo0XT1WZSxIW3ZlKjQrMV09Y3QsSFt2ZSo0KzJdPXN0LEhbdmUqNCszXT1ZZTt2YXIgbXQ9U1ttZSsxXSxKZT0tU1ttZV0sTHQ9bXQqU1tMZV0rSmUqU1tMZSsxXTtMdDwwJiYobXQqPS0xLEplKj0tMSk7dmFyIE10PVZlK210KlosdXQ9Y3QrSmUqWixXdD1NYXRoLnBvdyhNdC1tLDIpK01hdGgucG93KHV0LWssMik7aWYoV3Q8PWNlKXJldHVybiEwfXJldHVybiBZZChtLGssSCl9LGdTPWZ1bmN0aW9uKG0pe2Zvcih2YXIgaz1uZXcgQXJyYXkobS5sZW5ndGgvMiksUyxNLE8sTiwkLEgscSxZLFo9MDtaPG0ubGVuZ3RoLzQ7WisrKXtTPW1bWio0XSxNPW1bWio0KzFdLE89bVtaKjQrMl0sTj1tW1oqNCszXSxaPG0ubGVuZ3RoLzQtMT8oJD1tWyhaKzEpKjRdLEg9bVsoWisxKSo0KzFdLHE9bVsoWisxKSo0KzJdLFk9bVsoWisxKSo0KzNdKTooJD1tWzBdLEg9bVsxXSxxPW1bMl0sWT1tWzNdKTt2YXIgY2U9WjMoUyxNLE8sTiwkLEgscSxZLCEwKTtrW1oqMl09Y2VbMF0sa1taKjIrMV09Y2VbMV19cmV0dXJuIGt9LHBTPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPW5ldyBBcnJheShtLmxlbmd0aCoyKSxNLE8sTiwkLEg9MDtIPG0ubGVuZ3RoLzI7SCsrKXtNPW1bSCoyXSxPPW1bSCoyKzFdLEg8bS5sZW5ndGgvMi0xPyhOPW1bKEgrMSkqMl0sJD1tWyhIKzEpKjIrMV0pOihOPW1bMF0sJD1tWzFdKTt2YXIgcT0kLU8sWT0tKE4tTSksWj1NYXRoLnNxcnQocSpxK1kqWSksY2U9cS9aLHZlPVkvWjtTW0gqNF09TStjZSprLFNbSCo0KzFdPU8rdmUqayxTW0gqNCsyXT1OK2NlKmssU1tIKjQrM109JCt2ZSprfXJldHVybiBTfSxDWj1mdW5jdGlvbihtLGssUyxNLE8sTil7dmFyICQ9Uy1tLEg9TS1rOyQvPU8sSC89Tjt2YXIgcT1NYXRoLnNxcnQoJCokK0gqSCksWT1xLTE7aWYoWTwwKXJldHVybltdO3ZhciBaPVkvcTtyZXR1cm5bKFMtbSkqWittLChNLWspKlora119LGQ1PWZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe3JldHVybiBtLT1PLGstPU4sbS89Uy8yKyQsay89TS8yKyQsbSptK2sqazw9MX0sRzk9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7dmFyIEg9W1MtbSxNLWtdLHE9W20tTyxrLU5dLFk9SFswXSpIWzBdK0hbMV0qSFsxXSxaPTIqKHFbMF0qSFswXStxWzFdKkhbMV0pLGNlPXFbMF0qcVswXStxWzFdKnFbMV0tJCokLHZlPVoqWi00KlkqY2U7aWYodmU8MClyZXR1cm5bXTt2YXIgbWU9KC1aK01hdGguc3FydCh2ZSkpLygyKlkpLExlPSgtWi1NYXRoLnNxcnQodmUpKS8oMipZKSxfZT1NYXRoLm1pbihtZSxMZSksRWU9TWF0aC5tYXgobWUsTGUpLEJlPVtdO2lmKF9lPj0wJiZfZTw9MSYmQmUucHVzaChfZSksRWU+PTAmJkVlPD0xJiZCZS5wdXNoKEVlKSxCZS5sZW5ndGg9PT0wKXJldHVybltdO3ZhciBSZT1CZVswXSpIWzBdK20sVmU9QmVbMF0qSFsxXStrO2lmKEJlLmxlbmd0aD4xKXtpZihCZVswXT09QmVbMV0pcmV0dXJuW1JlLFZlXTt2YXIgY3Q9QmVbMV0qSFswXSttLHN0PUJlWzFdKkhbMV0raztyZXR1cm5bUmUsVmUsY3Qsc3RdfWVsc2UgcmV0dXJuW1JlLFZlXX0sYUk9ZnVuY3Rpb24obSxrLFMpe3JldHVybiBrPD1tJiZtPD1TfHxTPD1tJiZtPD1rP206bTw9ayYmazw9U3x8Uzw9ayYmazw9bT9rOlN9LFozPWZ1bmN0aW9uKG0sayxTLE0sTyxOLCQsSCxxKXt2YXIgWT1tLU8sWj1TLW0sY2U9JC1PLHZlPWstTixtZT1NLWssTGU9SC1OLF9lPWNlKnZlLUxlKlksRWU9Wip2ZS1tZSpZLEJlPUxlKlotY2UqbWU7aWYoQmUhPT0wKXt2YXIgUmU9X2UvQmUsVmU9RWUvQmUsY3Q9LjAwMSxzdD0wLWN0LFllPTErY3Q7cmV0dXJuIHN0PD1SZSYmUmU8PVllJiZzdDw9VmUmJlZlPD1ZZT9bbStSZSpaLGsrUmUqbWVdOnE/W20rUmUqWixrK1JlKm1lXTpbXX1lbHNlIHJldHVybiBfZT09PTB8fEVlPT09MD9hSShtLFMsJCk9PT0kP1skLEhdOmFJKG0sUyxPKT09PU8/W08sTl06YUkoTywkLFMpPT09Uz9bUyxNXTpbXTpbXX0sSzk9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCxIKXt2YXIgcT1bXSxZLFo9bmV3IEFycmF5KFMubGVuZ3RoKSxjZT0hMDtOPT1udWxsJiYoY2U9ITEpO3ZhciB2ZTtpZihjZSl7Zm9yKHZhciBtZT0wO21lPFoubGVuZ3RoLzI7bWUrKylaW21lKjJdPVNbbWUqMl0qTitNLFpbbWUqMisxXT1TW21lKjIrMV0qJCtPO2lmKEg+MCl7dmFyIExlPXBTKFosLUgpO3ZlPWdTKExlKX1lbHNlIHZlPVp9ZWxzZSB2ZT1TO2Zvcih2YXIgX2UsRWUsQmUsUmUsVmU9MDtWZTx2ZS5sZW5ndGgvMjtWZSsrKV9lPXZlW1ZlKjJdLEVlPXZlW1ZlKjIrMV0sVmU8dmUubGVuZ3RoLzItMT8oQmU9dmVbKFZlKzEpKjJdLFJlPXZlWyhWZSsxKSoyKzFdKTooQmU9dmVbMF0sUmU9dmVbMV0pLFk9WjMobSxrLE0sTyxfZSxFZSxCZSxSZSksWS5sZW5ndGghPT0wJiZxLnB1c2goWVswXSxZWzFdKTtyZXR1cm4gcX0sU1o9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCxIKXtmb3IodmFyIHE9W10sWSxaPW5ldyBBcnJheShTLmxlbmd0aCksY2U9Ti8yLHZlPSQvMixtZT1jSShOLCQpLExlPTA7TGU8Uy5sZW5ndGgvNDtMZSsrKXt2YXIgX2U9dm9pZCAwLEVlPXZvaWQgMDtMZT09PTA/X2U9Uy5sZW5ndGgtMjpfZT1MZSo0LTIsRWU9TGUqNCsyO3ZhciBCZT1NK2NlKlNbTGUqNF0sUmU9Tyt2ZSpTW0xlKjQrMV0sVmU9LVNbX2VdKlNbRWVdLVNbX2UrMV0qU1tFZSsxXSxjdD1tZS9NYXRoLnRhbihNYXRoLmFjb3MoVmUpLzIpLHN0PUJlLWN0KlNbX2VdLFllPVJlLWN0KlNbX2UrMV0sbXQ9QmUrY3QqU1tFZV0sSmU9UmUrY3QqU1tFZSsxXTtMZT09PTA/KFpbUy5sZW5ndGgtMl09c3QsWltTLmxlbmd0aC0xXT1ZZSk6KFpbTGUqNC0yXT1zdCxaW0xlKjQtMV09WWUpLFpbTGUqNF09bXQsWltMZSo0KzFdPUplO3ZhciBMdD1TW19lKzFdLE10PS1TW19lXSx1dD1MdCpTW0VlXStNdCpTW0VlKzFdO3V0PDAmJihMdCo9LTEsTXQqPS0xKTt2YXIgV3Q9c3QrTHQqbWUsVHQ9WWUrTXQqbWU7WT1HOShtLGssTSxPLFd0LFR0LG1lKSxZLmxlbmd0aCE9PTAmJnEucHVzaChZWzBdLFlbMV0pfWZvcih2YXIgX249MDtfbjxaLmxlbmd0aC80O19uKyspWT1aMyhtLGssTSxPLFpbX24qNF0sWltfbio0KzFdLFpbX24qNCsyXSxaW19uKjQrM10sITEpLFkubGVuZ3RoIT09MCYmcS5wdXNoKFlbMF0sWVsxXSk7aWYocS5sZW5ndGg+Mil7Zm9yKHZhciBobj1bcVswXSxxWzFdXSxZdD1NYXRoLnBvdyhoblswXS1tLDIpK01hdGgucG93KGhuWzFdLWssMiksRG49MTtEbjxxLmxlbmd0aC8yO0RuKyspe3ZhciBpcj1NYXRoLnBvdyhxW0RuKjJdLW0sMikrTWF0aC5wb3cocVtEbioyKzFdLWssMik7aXI8PVl0JiYoaG5bMF09cVtEbioyXSxoblsxXT1xW0RuKjIrMV0sWXQ9aXIpfXJldHVybiBobn1yZXR1cm4gcX0sYlM9ZnVuY3Rpb24obSxrLFMpe3ZhciBNPVttWzBdLWtbMF0sbVsxXS1rWzFdXSxPPU1hdGguc3FydChNWzBdKk1bMF0rTVsxXSpNWzFdKSxOPShPLVMpL087cmV0dXJuIE48MCYmKE49MWUtNSksW2tbMF0rTipNWzBdLGtbMV0rTipNWzFdXX0saGQ9ZnVuY3Rpb24obSxrKXt2YXIgUz1vSShtLGspO3JldHVybiBTPW1qKFMpLFN9LG1qPWZ1bmN0aW9uKG0pe2Zvcih2YXIgayxTLE09bS5sZW5ndGgvMixPPTEvMCxOPTEvMCwkPS0xLzAsSD0tMS8wLHE9MDtxPE07cSsrKWs9bVsyKnFdLFM9bVsyKnErMV0sTz1NYXRoLm1pbihPLGspLCQ9TWF0aC5tYXgoJCxrKSxOPU1hdGgubWluKE4sUyksSD1NYXRoLm1heChILFMpO2Zvcih2YXIgWT0yLygkLU8pLFo9Mi8oSC1OKSxjZT0wO2NlPE07Y2UrKylrPW1bMipjZV09bVsyKmNlXSpZLFM9bVsyKmNlKzFdPW1bMipjZSsxXSpaLE89TWF0aC5taW4oTyxrKSwkPU1hdGgubWF4KCQsayksTj1NYXRoLm1pbihOLFMpLEg9TWF0aC5tYXgoSCxTKTtpZihOPC0xKWZvcih2YXIgdmU9MDt2ZTxNO3ZlKyspUz1tWzIqdmUrMV09bVsyKnZlKzFdKygtMS1OKTtyZXR1cm4gbX0sb0k9ZnVuY3Rpb24obSxrKXt2YXIgUz0xL20qMipNYXRoLlBJLE09bSUyPT09MD9NYXRoLlBJLzIrUy8yOk1hdGguUEkvMjtNKz1rO2Zvcih2YXIgTz1uZXcgQXJyYXkobSoyKSxOLCQ9MDskPG07JCsrKU49JCpTK00sT1syKiRdPU1hdGguY29zKE4pLE9bMiokKzFdPU1hdGguc2luKC1OKTtyZXR1cm4gT30sVzk9ZnVuY3Rpb24obSxrKXtyZXR1cm4gTWF0aC5taW4obS80LGsvNCw4KX0sY0k9ZnVuY3Rpb24obSxrKXtyZXR1cm4gTWF0aC5taW4obS8xMCxrLzEwLDgpfSx2aj1mdW5jdGlvbigpe3JldHVybiA4fSxfWj1mdW5jdGlvbihtLGssUyl7cmV0dXJuW20tMiprK1MsMiooay1tKSxtXX0sdUk9ZnVuY3Rpb24obSxrKXtyZXR1cm57aGVpZ2h0T2Zmc2V0Ok1hdGgubWluKDE1LC4wNSprKSx3aWR0aE9mZnNldDpNYXRoLm1pbigxMDAsLjI1Km0pLGN0cmxQdE9mZnNldFBjdDouMDV9fSxBWj1xMCh7ZGFtcGluZ0ZhY3RvcjouOCxwcmVjaXNpb246MWUtNixpdGVyYXRpb25zOjIwMCx3ZWlnaHQ6ZnVuY3Rpb24obSl7cmV0dXJuIDF9fSksTFo9e3BhZ2VSYW5rOmZ1bmN0aW9uKG0pe2Zvcih2YXIgaz1BWihtKSxTPWsuZGFtcGluZ0ZhY3RvcixNPWsucHJlY2lzaW9uLE89ay5pdGVyYXRpb25zLE49ay53ZWlnaHQsJD10aGlzLl9wcml2YXRlLmN5LEg9dGhpcy5ieUdyb3VwKCkscT1ILm5vZGVzLFk9SC5lZGdlcyxaPXEubGVuZ3RoLGNlPVoqWix2ZT1ZLmxlbmd0aCxtZT1uZXcgQXJyYXkoY2UpLExlPW5ldyBBcnJheShaKSxfZT0oMS1TKS9aLEVlPTA7RWU8WjtFZSsrKXtmb3IodmFyIEJlPTA7QmU8WjtCZSsrKXt2YXIgUmU9RWUqWitCZTttZVtSZV09MH1MZVtFZV09MH1mb3IodmFyIFZlPTA7VmU8dmU7VmUrKyl7dmFyIGN0PVlbVmVdLHN0PWN0LmRhdGEoInNvdXJjZSIpLFllPWN0LmRhdGEoInRhcmdldCIpO2lmKHN0IT09WWUpe3ZhciBtdD1xLmluZGV4T2ZJZChzdCksSmU9cS5pbmRleE9mSWQoWWUpLEx0PU4oY3QpLE10PUplKlorbXQ7bWVbTXRdKz1MdCxMZVttdF0rPUx0fX1mb3IodmFyIHV0PTEvWitfZSxXdD0wO1d0PFo7V3QrKylpZihMZVtXdF09PT0wKWZvcih2YXIgVHQ9MDtUdDxaO1R0Kyspe3ZhciBfbj1UdCpaK1d0O21lW19uXT11dH1lbHNlIGZvcih2YXIgaG49MDtobjxaO2huKyspe3ZhciBZdD1obipaK1d0O21lW1l0XT1tZVtZdF0vTGVbV3RdK19lfWZvcih2YXIgRG49bmV3IEFycmF5KFopLGlyPW5ldyBBcnJheShaKSx2cixObj0wO05uPFo7Tm4rKylEbltObl09MTtmb3IodmFyIHByPTA7cHI8TztwcisrKXtmb3IodmFyIEVyPTA7RXI8WjtFcisrKWlyW0VyXT0wO2Zvcih2YXIgTXI9MDtNcjxaO01yKyspZm9yKHZhciBDcj0wO0NyPFo7Q3IrKyl7dmFyIE9yPU1yKlorQ3I7aXJbTXJdKz1tZVtPcl0qRG5bQ3JdfWhaKGlyKSx2cj1EbixEbj1pcixpcj12cjtmb3IodmFyIFduPTAsYnI9MDticjxaO2JyKyspe3ZhciBTcj12clticl0tRG5bYnJdO1duKz1TcipTcn1pZihXbjxNKWJyZWFrfXZhciBOcj17cmFuazpmdW5jdGlvbih5cyl7cmV0dXJuIHlzPSQuY29sbGVjdGlvbih5cylbMF0sRG5bcS5pbmRleE9mKHlzKV19fTtyZXR1cm4gTnJ9fSx3aj1xMCh7cm9vdDpudWxsLHdlaWdodDpmdW5jdGlvbihtKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEsYWxwaGE6MH0pLHQ4PXtkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihtKXttPXdqKG0pO3ZhciBrPXRoaXMuY3koKSxTPXRoaXMubm9kZXMoKSxNPVMubGVuZ3RoO2lmKG0uZGlyZWN0ZWQpe2Zvcih2YXIgWT17fSxaPXt9LGNlPTAsdmU9MCxtZT0wO21lPE07bWUrKyl7dmFyIExlPVNbbWVdLF9lPUxlLmlkKCk7bS5yb290PUxlO3ZhciBFZT10aGlzLmRlZ3JlZUNlbnRyYWxpdHkobSk7Y2U8RWUuaW5kZWdyZWUmJihjZT1FZS5pbmRlZ3JlZSksdmU8RWUub3V0ZGVncmVlJiYodmU9RWUub3V0ZGVncmVlKSxZW19lXT1FZS5pbmRlZ3JlZSxaW19lXT1FZS5vdXRkZWdyZWV9cmV0dXJue2luZGVncmVlOmZ1bmN0aW9uKFJlKXtyZXR1cm4gY2U9PTA/MDooYmUoUmUpJiYoUmU9ay5maWx0ZXIoUmUpKSxZW1JlLmlkKCldL2NlKX0sb3V0ZGVncmVlOmZ1bmN0aW9uKFJlKXtyZXR1cm4gdmU9PT0wPzA6KGJlKFJlKSYmKFJlPWsuZmlsdGVyKFJlKSksWltSZS5pZCgpXS92ZSl9fX1lbHNle2Zvcih2YXIgTz17fSxOPTAsJD0wOyQ8TTskKyspe3ZhciBIPVNbJF07bS5yb290PUg7dmFyIHE9dGhpcy5kZWdyZWVDZW50cmFsaXR5KG0pO048cS5kZWdyZWUmJihOPXEuZGVncmVlKSxPW0guaWQoKV09cS5kZWdyZWV9cmV0dXJue2RlZ3JlZTpmdW5jdGlvbihSZSl7cmV0dXJuIE49PT0wPzA6KGJlKFJlKSYmKFJlPWsuZmlsdGVyKFJlKSksT1tSZS5pZCgpXS9OKX19fX0sZGVncmVlQ2VudHJhbGl0eTpmdW5jdGlvbihtKXttPXdqKG0pO3ZhciBrPXRoaXMuY3koKSxTPXRoaXMsTT1tLE89TS5yb290LE49TS53ZWlnaHQsJD1NLmRpcmVjdGVkLEg9TS5hbHBoYTtpZihPPWsuY29sbGVjdGlvbihPKVswXSwkKXtmb3IodmFyIHZlPU8uY29ubmVjdGVkRWRnZXMoKSxtZT12ZS5maWx0ZXIoZnVuY3Rpb24oc3Qpe3JldHVybiBzdC50YXJnZXQoKS5zYW1lKE8pJiZTLmhhcyhzdCl9KSxMZT12ZS5maWx0ZXIoZnVuY3Rpb24oc3Qpe3JldHVybiBzdC5zb3VyY2UoKS5zYW1lKE8pJiZTLmhhcyhzdCl9KSxfZT1tZS5sZW5ndGgsRWU9TGUubGVuZ3RoLEJlPTAsUmU9MCxWZT0wO1ZlPG1lLmxlbmd0aDtWZSsrKUJlKz1OKG1lW1ZlXSk7Zm9yKHZhciBjdD0wO2N0PExlLmxlbmd0aDtjdCsrKVJlKz1OKExlW2N0XSk7cmV0dXJue2luZGVncmVlOk1hdGgucG93KF9lLDEtSCkqTWF0aC5wb3coQmUsSCksb3V0ZGVncmVlOk1hdGgucG93KEVlLDEtSCkqTWF0aC5wb3coUmUsSCl9fWVsc2V7Zm9yKHZhciBxPU8uY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oUyksWT1xLmxlbmd0aCxaPTAsY2U9MDtjZTxxLmxlbmd0aDtjZSsrKVorPU4ocVtjZV0pO3JldHVybntkZWdyZWU6TWF0aC5wb3coWSwxLUgpKk1hdGgucG93KFosSCl9fX19O3Q4LmRjPXQ4LmRlZ3JlZUNlbnRyYWxpdHksdDguZGNuPXQ4LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpc2VkPXQ4LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkO3ZhciB5aj1xMCh7aGFybW9uaWM6ITAsd2VpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGRpcmVjdGVkOiExLHJvb3Q6bnVsbH0pLG44PXtjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihtKXtmb3IodmFyIGs9eWoobSksUz1rLmhhcm1vbmljLE09ay53ZWlnaHQsTz1rLmRpcmVjdGVkLE49dGhpcy5jeSgpLCQ9e30sSD0wLHE9dGhpcy5ub2RlcygpLFk9dGhpcy5mbG95ZFdhcnNoYWxsKHt3ZWlnaHQ6TSxkaXJlY3RlZDpPfSksWj0wO1o8cS5sZW5ndGg7WisrKXtmb3IodmFyIGNlPTAsdmU9cVtaXSxtZT0wO21lPHEubGVuZ3RoO21lKyspaWYoWiE9PW1lKXt2YXIgTGU9WS5kaXN0YW5jZSh2ZSxxW21lXSk7Uz9jZSs9MS9MZTpjZSs9TGV9U3x8KGNlPTEvY2UpLEg8Y2UmJihIPWNlKSwkW3ZlLmlkKCldPWNlfXJldHVybntjbG9zZW5lc3M6ZnVuY3Rpb24oRWUpe3JldHVybiBIPT0wPzA6KGJlKEVlKT9FZT1OLmZpbHRlcihFZSlbMF0uaWQoKTpFZT1FZS5pZCgpLCRbRWVdL0gpfX19LGNsb3NlbmVzc0NlbnRyYWxpdHk6ZnVuY3Rpb24obSl7dmFyIGs9eWoobSksUz1rLnJvb3QsTT1rLndlaWdodCxPPWsuZGlyZWN0ZWQsTj1rLmhhcm1vbmljO1M9dGhpcy5maWx0ZXIoUylbMF07Zm9yKHZhciAkPXRoaXMuZGlqa3N0cmEoe3Jvb3Q6Uyx3ZWlnaHQ6TSxkaXJlY3RlZDpPfSksSD0wLHE9dGhpcy5ub2RlcygpLFk9MDtZPHEubGVuZ3RoO1krKyl7dmFyIFo9cVtZXTtpZighWi5zYW1lKFMpKXt2YXIgY2U9JC5kaXN0YW5jZVRvKFopO04/SCs9MS9jZTpIKz1jZX19cmV0dXJuIE4/SDoxL0h9fTtuOC5jYz1uOC5jbG9zZW5lc3NDZW50cmFsaXR5LG44LmNjbj1uOC5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXNlZD1uOC5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDt2YXIgTVo9cTAoe3dlaWdodDpudWxsLGRpcmVjdGVkOiExfSksbEk9e2JldHdlZW5uZXNzQ2VudHJhbGl0eTpmdW5jdGlvbihtKXtmb3IodmFyIGs9TVoobSksUz1rLmRpcmVjdGVkLE09ay53ZWlnaHQsTz1NIT1udWxsLE49dGhpcy5jeSgpLCQ9dGhpcy5ub2RlcygpLEg9e30scT17fSxZPTAsWj17c2V0OmZ1bmN0aW9uKFJlLFZlKXtxW1JlXT1WZSxWZT5ZJiYoWT1WZSl9LGdldDpmdW5jdGlvbihSZSl7cmV0dXJuIHFbUmVdfX0sY2U9MDtjZTwkLmxlbmd0aDtjZSsrKXt2YXIgdmU9JFtjZV0sbWU9dmUuaWQoKTtTP0hbbWVdPXZlLm91dGdvZXJzKCkubm9kZXMoKTpIW21lXT12ZS5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKSxaLnNldChtZSwwKX1mb3IodmFyIExlPWZ1bmN0aW9uKFJlKXtmb3IodmFyIFZlPSRbUmVdLmlkKCksY3Q9W10sc3Q9e30sWWU9e30sbXQ9e30sSmU9bmV3IFY5KGZ1bmN0aW9uKENyLE9yKXtyZXR1cm4gbXRbQ3JdLW10W09yXX0pLEx0PTA7THQ8JC5sZW5ndGg7THQrKyl7dmFyIE10PSRbTHRdLmlkKCk7c3RbTXRdPVtdLFllW010XT0wLG10W010XT0xLzB9Zm9yKFllW1ZlXT0xLG10W1ZlXT0wLEplLnB1c2goVmUpOyFKZS5lbXB0eSgpOyl7dmFyIHV0PUplLnBvcCgpO2lmKGN0LnB1c2godXQpLE8pZm9yKHZhciBXdD0wO1d0PEhbdXRdLmxlbmd0aDtXdCsrKXt2YXIgVHQ9SFt1dF1bV3RdLF9uPU4uZ2V0RWxlbWVudEJ5SWQodXQpLGhuPXZvaWQgMDtfbi5lZGdlc1RvKFR0KS5sZW5ndGg+MD9obj1fbi5lZGdlc1RvKFR0KVswXTpobj1UdC5lZGdlc1RvKF9uKVswXTt2YXIgWXQ9TShobik7VHQ9VHQuaWQoKSxtdFtUdF0+bXRbdXRdK1l0JiYobXRbVHRdPW10W3V0XStZdCxKZS5ub2Rlcy5pbmRleE9mKFR0KTwwP0plLnB1c2goVHQpOkplLnVwZGF0ZUl0ZW0oVHQpLFllW1R0XT0wLHN0W1R0XT1bXSksbXRbVHRdPT1tdFt1dF0rWXQmJihZZVtUdF09WWVbVHRdK1llW3V0XSxzdFtUdF0ucHVzaCh1dCkpfWVsc2UgZm9yKHZhciBEbj0wO0RuPEhbdXRdLmxlbmd0aDtEbisrKXt2YXIgaXI9SFt1dF1bRG5dLmlkKCk7bXRbaXJdPT0xLzAmJihKZS5wdXNoKGlyKSxtdFtpcl09bXRbdXRdKzEpLG10W2lyXT09bXRbdXRdKzEmJihZZVtpcl09WWVbaXJdK1llW3V0XSxzdFtpcl0ucHVzaCh1dCkpfX1mb3IodmFyIHZyPXt9LE5uPTA7Tm48JC5sZW5ndGg7Tm4rKyl2clskW05uXS5pZCgpXT0wO2Zvcig7Y3QubGVuZ3RoPjA7KXtmb3IodmFyIHByPWN0LnBvcCgpLEVyPTA7RXI8c3RbcHJdLmxlbmd0aDtFcisrKXt2YXIgTXI9c3RbcHJdW0VyXTt2cltNcl09dnJbTXJdK1llW01yXS9ZZVtwcl0qKDErdnJbcHJdKX1wciE9JFtSZV0uaWQoKSYmWi5zZXQocHIsWi5nZXQocHIpK3ZyW3ByXSl9fSxfZT0wO19lPCQubGVuZ3RoO19lKyspTGUoX2UpO3ZhciBFZT17YmV0d2Vlbm5lc3M6ZnVuY3Rpb24oUmUpe3ZhciBWZT1OLmNvbGxlY3Rpb24oUmUpLmlkKCk7cmV0dXJuIFouZ2V0KFZlKX0sYmV0d2Vlbm5lc3NOb3JtYWxpemVkOmZ1bmN0aW9uKFJlKXtpZihZPT0wKXJldHVybiAwO3ZhciBWZT1OLmNvbGxlY3Rpb24oUmUpLmlkKCk7cmV0dXJuIFouZ2V0KFZlKS9ZfX07cmV0dXJuIEVlLmJldHdlZW5uZXNzTm9ybWFsaXNlZD1FZS5iZXR3ZWVubmVzc05vcm1hbGl6ZWQsRWV9fTtsSS5iYz1sSS5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7dmFyIERaPXEwKHtleHBhbmRGYWN0b3I6MixpbmZsYXRlRmFjdG9yOjIsbXVsdEZhY3RvcjoxLG1heEl0ZXJhdGlvbnM6MjAsYXR0cmlidXRlczpbZnVuY3Rpb24oeCl7cmV0dXJuIDF9XX0pLElaPWZ1bmN0aW9uKG0pe3JldHVybiBEWihtKX0sT1o9ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MCxNPTA7TTxrLmxlbmd0aDtNKyspUys9a1tNXShtKTtyZXR1cm4gU30sTlo9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT0wO008aztNKyspbVtNKmsrTV09U30seGo9ZnVuY3Rpb24obSxrKXtmb3IodmFyIFMsTT0wO008aztNKyspe1M9MDtmb3IodmFyIE89MDtPPGs7TysrKVMrPW1bTyprK01dO2Zvcih2YXIgTj0wO048aztOKyspbVtOKmsrTV09bVtOKmsrTV0vU319LFBaPWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bmV3IEFycmF5KFMqUyksTz0wO088UztPKyspe2Zvcih2YXIgTj0wO048UztOKyspTVtPKlMrTl09MDtmb3IodmFyICQ9MDskPFM7JCsrKWZvcih2YXIgSD0wO0g8UztIKyspTVtPKlMrSF0rPW1bTypTKyRdKmtbJCpTK0hdfXJldHVybiBNfSxCWj1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPW0uc2xpY2UoMCksTz0xO088UztPKyspbT1QWihtLE0sayk7cmV0dXJuIG19LGtqPWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bmV3IEFycmF5KGsqayksTz0wO088ayprO08rKylNW09dPU1hdGgucG93KG1bT10sUyk7cmV0dXJuIHhqKE0sayksTX0sRlo9ZnVuY3Rpb24obSxrLFMsTSl7Zm9yKHZhciBPPTA7TzxTO08rKyl7dmFyIE49TWF0aC5yb3VuZChtW09dKk1hdGgucG93KDEwLE0pKS9NYXRoLnBvdygxMCxNKSwkPU1hdGgucm91bmQoa1tPXSpNYXRoLnBvdygxMCxNKSkvTWF0aC5wb3coMTAsTSk7aWYoTiE9PSQpcmV0dXJuITF9cmV0dXJuITB9LFJaPWZ1bmN0aW9uKG0sayxTLE0pe2Zvcih2YXIgTz1bXSxOPTA7TjxrO04rKyl7Zm9yKHZhciAkPVtdLEg9MDtIPGs7SCsrKU1hdGgucm91bmQobVtOKmsrSF0qMWUzKS8xZTM+MCYmJC5wdXNoKFNbSF0pOyQubGVuZ3RoIT09MCYmTy5wdXNoKE0uY29sbGVjdGlvbigkKSl9cmV0dXJuIE99LGpaPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPTA7UzxtLmxlbmd0aDtTKyspaWYoIWtbU118fG1bU10uaWQoKSE9PWtbU10uaWQoKSlyZXR1cm4hMTtyZXR1cm4hMH0sJFo9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPTA7azxtLmxlbmd0aDtrKyspZm9yKHZhciBTPTA7UzxtLmxlbmd0aDtTKyspayE9UyYmaloobVtrXSxtW1NdKSYmbS5zcGxpY2UoUywxKTtyZXR1cm4gbX0sRWo9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPXRoaXMubm9kZXMoKSxTPXRoaXMuZWRnZXMoKSxNPXRoaXMuY3koKSxPPUlaKG0pLE49e30sJD0wOyQ8ay5sZW5ndGg7JCsrKU5ba1skXS5pZCgpXT0kO2Zvcih2YXIgSD1rLmxlbmd0aCxxPUgqSCxZPW5ldyBBcnJheShxKSxaLGNlPTA7Y2U8cTtjZSsrKVlbY2VdPTA7Zm9yKHZhciB2ZT0wO3ZlPFMubGVuZ3RoO3ZlKyspe3ZhciBtZT1TW3ZlXSxMZT1OW21lLnNvdXJjZSgpLmlkKCldLF9lPU5bbWUudGFyZ2V0KCkuaWQoKV0sRWU9T1oobWUsTy5hdHRyaWJ1dGVzKTtZW0xlKkgrX2VdKz1FZSxZW19lKkgrTGVdKz1FZX1OWihZLEgsTy5tdWx0RmFjdG9yKSx4aihZLEgpO2Zvcih2YXIgQmU9ITAsUmU9MDtCZSYmUmU8Ty5tYXhJdGVyYXRpb25zOylCZT0hMSxaPUJaKFksSCxPLmV4cGFuZEZhY3RvciksWT1raihaLEgsTy5pbmZsYXRlRmFjdG9yKSxGWihZLFoscSw0KXx8KEJlPSEwKSxSZSsrO3ZhciBWZT1SWihZLEgsayxNKTtyZXR1cm4gVmU9JFooVmUpLFZlfSx6Wj17bWFya292Q2x1c3RlcmluZzpFaixtY2w6RWp9LHFaPWZ1bmN0aW9uKG0pe3JldHVybiBtfSxUaj1mdW5jdGlvbihtLGspe3JldHVybiBNYXRoLmFicyhrLW0pfSxDaj1mdW5jdGlvbihtLGssUyl7cmV0dXJuIG0rVGooayxTKX0sU2o9ZnVuY3Rpb24obSxrLFMpe3JldHVybiBtK01hdGgucG93KFMtaywyKX0sSFo9ZnVuY3Rpb24obSl7cmV0dXJuIE1hdGguc3FydChtKX0sVlo9ZnVuY3Rpb24obSxrLFMpe3JldHVybiBNYXRoLm1heChtLFRqKGssUykpfSxZOT1mdW5jdGlvbihtLGssUyxNLE8pe2Zvcih2YXIgTj1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06cVosJD1NLEgscSxZPTA7WTxtO1krKylIPWsoWSkscT1TKFkpLCQ9TygkLEgscSk7cmV0dXJuIE4oJCl9LHI4PXtldWNsaWRlYW46ZnVuY3Rpb24obSxrLFMpe3JldHVybiBtPj0yP1k5KG0sayxTLDAsU2osSFopOlk5KG0sayxTLDAsQ2opfSxzcXVhcmVkRXVjbGlkZWFuOmZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gWTkobSxrLFMsMCxTail9LG1hbmhhdHRhbjpmdW5jdGlvbihtLGssUyl7cmV0dXJuIFk5KG0sayxTLDAsQ2opfSxtYXg6ZnVuY3Rpb24obSxrLFMpe3JldHVybiBZOShtLGssUywtMS8wLFZaKX19O3I4WyJzcXVhcmVkLWV1Y2xpZGVhbiJdPXI4LnNxdWFyZWRFdWNsaWRlYW4scjguc3F1YXJlZGV1Y2xpZGVhbj1yOC5zcXVhcmVkRXVjbGlkZWFuO2Z1bmN0aW9uIG1TKHgsbSxrLFMsTSxPKXt2YXIgTjtyZXR1cm4gYWUoeCk/Tj14Ok49cjhbeF18fHI4LmV1Y2xpZGVhbixtPT09MCYmYWUoeCk/TihNLE8pOk4obSxrLFMsTSxPKX12YXIgVVo9cTAoe2s6MixtOjIsc2Vuc2l0aXZpdHlUaHJlc2hvbGQ6MWUtNCxkaXN0YW5jZToiZXVjbGlkZWFuIixtYXhJdGVyYXRpb25zOjEwLGF0dHJpYnV0ZXM6W10sdGVzdE1vZGU6ITEsdGVzdENlbnRyb2lkczpudWxsfSksaEk9ZnVuY3Rpb24obSl7cmV0dXJuIFVaKG0pfSx2Uz1mdW5jdGlvbihtLGssUyxNLE8pe3ZhciBOPU8hPT0ia01lZG9pZHMiLCQ9Tj9mdW5jdGlvbihaKXtyZXR1cm4gU1taXX06ZnVuY3Rpb24oWil7cmV0dXJuIE1bWl0oUyl9LEg9ZnVuY3Rpb24oY2Upe3JldHVybiBNW2NlXShrKX0scT1TLFk9aztyZXR1cm4gbVMobSxNLmxlbmd0aCwkLEgscSxZKX0sZkk9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1TLmxlbmd0aCxPPW5ldyBBcnJheShNKSxOPW5ldyBBcnJheShNKSwkPW5ldyBBcnJheShrKSxIPW51bGwscT0wO3E8TTtxKyspT1txXT1tLm1pbihTW3FdKS52YWx1ZSxOW3FdPW0ubWF4KFNbcV0pLnZhbHVlO2Zvcih2YXIgWT0wO1k8aztZKyspe0g9W107Zm9yKHZhciBaPTA7WjxNO1orKylIW1pdPU1hdGgucmFuZG9tKCkqKE5bWl0tT1taXSkrT1taXTskW1ldPUh9cmV0dXJuICR9LF9qPWZ1bmN0aW9uKG0sayxTLE0sTyl7Zm9yKHZhciBOPTEvMCwkPTAsSD0wO0g8ay5sZW5ndGg7SCsrKXt2YXIgcT12UyhTLG0sa1tIXSxNLE8pO3E8TiYmKE49cSwkPUgpfXJldHVybiAkfSxBaj1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPVtdLE89bnVsbCxOPTA7TjxrLmxlbmd0aDtOKyspTz1rW05dLFNbTy5pZCgpXT09PW0mJk0ucHVzaChPKTtyZXR1cm4gTX0sR1o9ZnVuY3Rpb24obSxrLFMpe3JldHVybiBNYXRoLmFicyhrLW0pPD1TfSxLWj1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPTA7TTxtLmxlbmd0aDtNKyspZm9yKHZhciBPPTA7TzxtW01dLmxlbmd0aDtPKyspe3ZhciBOPU1hdGguYWJzKG1bTV1bT10ta1tNXVtPXSk7aWYoTj5TKXJldHVybiExfXJldHVybiEwfSxXWj1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPTA7TTxTO00rKylpZihtPT09a1tNXSlyZXR1cm4hMDtyZXR1cm4hMX0sTGo9ZnVuY3Rpb24obSxrKXt2YXIgUz1uZXcgQXJyYXkoayk7aWYobS5sZW5ndGg8NTApZm9yKHZhciBNPTA7TTxrO00rKyl7Zm9yKHZhciBPPW1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm0ubGVuZ3RoKV07V1ooTyxTLE0pOylPPW1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm0ubGVuZ3RoKV07U1tNXT1PfWVsc2UgZm9yKHZhciBOPTA7TjxrO04rKylTW05dPW1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm0ubGVuZ3RoKV07cmV0dXJuIFN9LE1qPWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09MCxPPTA7TzxrLmxlbmd0aDtPKyspTSs9dlMoIm1hbmhhdHRhbiIsa1tPXSxtLFMsImtNZWRvaWRzIik7cmV0dXJuIE19LFlaPWZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKSxTPXRoaXMubm9kZXMoKSxNPW51bGwsTz1oSShtKSxOPW5ldyBBcnJheShPLmspLCQ9e30sSDtPLnRlc3RNb2RlP3R5cGVvZiBPLnRlc3RDZW50cm9pZHM9PSJudW1iZXIiPyhPLnRlc3RDZW50cm9pZHMsSD1mSShTLE8uayxPLmF0dHJpYnV0ZXMpKTp1KE8udGVzdENlbnRyb2lkcyk9PT0ib2JqZWN0Ij9IPU8udGVzdENlbnRyb2lkczpIPWZJKFMsTy5rLE8uYXR0cmlidXRlcyk6SD1mSShTLE8uayxPLmF0dHJpYnV0ZXMpO2Zvcih2YXIgcT0hMCxZPTA7cSYmWTxPLm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIFo9MDtaPFMubGVuZ3RoO1orKylNPVNbWl0sJFtNLmlkKCldPV9qKE0sSCxPLmRpc3RhbmNlLE8uYXR0cmlidXRlcywia01lYW5zIik7cT0hMTtmb3IodmFyIGNlPTA7Y2U8Ty5rO2NlKyspe3ZhciB2ZT1BaihjZSxTLCQpO2lmKHZlLmxlbmd0aCE9PTApe2Zvcih2YXIgbWU9Ty5hdHRyaWJ1dGVzLmxlbmd0aCxMZT1IW2NlXSxfZT1uZXcgQXJyYXkobWUpLEVlPW5ldyBBcnJheShtZSksQmU9MDtCZTxtZTtCZSsrKXtFZVtCZV09MDtmb3IodmFyIFJlPTA7UmU8dmUubGVuZ3RoO1JlKyspTT12ZVtSZV0sRWVbQmVdKz1PLmF0dHJpYnV0ZXNbQmVdKE0pO19lW0JlXT1FZVtCZV0vdmUubGVuZ3RoLEdaKF9lW0JlXSxMZVtCZV0sTy5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChxPSEwKX1IW2NlXT1fZSxOW2NlXT1rLmNvbGxlY3Rpb24odmUpfX1ZKyt9cmV0dXJuIE59LFhaPWZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKSxTPXRoaXMubm9kZXMoKSxNPW51bGwsTz1oSShtKSxOPW5ldyBBcnJheShPLmspLCQsSD17fSxxLFk9bmV3IEFycmF5KE8uayk7Ty50ZXN0TW9kZT90eXBlb2YgTy50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyInx8KHUoTy50ZXN0Q2VudHJvaWRzKT09PSJvYmplY3QiPyQ9Ty50ZXN0Q2VudHJvaWRzOiQ9TGooUyxPLmspKTokPUxqKFMsTy5rKTtmb3IodmFyIFo9ITAsY2U9MDtaJiZjZTxPLm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIHZlPTA7dmU8Uy5sZW5ndGg7dmUrKylNPVNbdmVdLEhbTS5pZCgpXT1faihNLCQsTy5kaXN0YW5jZSxPLmF0dHJpYnV0ZXMsImtNZWRvaWRzIik7Wj0hMTtmb3IodmFyIG1lPTA7bWU8JC5sZW5ndGg7bWUrKyl7dmFyIExlPUFqKG1lLFMsSCk7aWYoTGUubGVuZ3RoIT09MCl7WVttZV09TWooJFttZV0sTGUsTy5hdHRyaWJ1dGVzKTtmb3IodmFyIF9lPTA7X2U8TGUubGVuZ3RoO19lKyspcT1NaihMZVtfZV0sTGUsTy5hdHRyaWJ1dGVzKSxxPFlbbWVdJiYoWVttZV09cSwkW21lXT1MZVtfZV0sWj0hMCk7TlttZV09ay5jb2xsZWN0aW9uKExlKX19Y2UrK31yZXR1cm4gTn0sUVo9ZnVuY3Rpb24obSxrLFMsTSxPKXtmb3IodmFyIE4sJCxIPTA7SDxrLmxlbmd0aDtIKyspZm9yKHZhciBxPTA7cTxtLmxlbmd0aDtxKyspTVtIXVtxXT1NYXRoLnBvdyhTW0hdW3FdLE8ubSk7Zm9yKHZhciBZPTA7WTxtLmxlbmd0aDtZKyspZm9yKHZhciBaPTA7WjxPLmF0dHJpYnV0ZXMubGVuZ3RoO1orKyl7Tj0wLCQ9MDtmb3IodmFyIGNlPTA7Y2U8ay5sZW5ndGg7Y2UrKylOKz1NW2NlXVtZXSpPLmF0dHJpYnV0ZXNbWl0oa1tjZV0pLCQrPU1bY2VdW1ldO21bWV1bWl09Ti8kfX0sSlo9ZnVuY3Rpb24obSxrLFMsTSxPKXtmb3IodmFyIE49MDtOPG0ubGVuZ3RoO04rKylrW05dPW1bTl0uc2xpY2UoKTtmb3IodmFyICQsSCxxLFk9Mi8oTy5tLTEpLFo9MDtaPFMubGVuZ3RoO1orKylmb3IodmFyIGNlPTA7Y2U8TS5sZW5ndGg7Y2UrKyl7JD0wO2Zvcih2YXIgdmU9MDt2ZTxTLmxlbmd0aDt2ZSsrKUg9dlMoTy5kaXN0YW5jZSxNW2NlXSxTW1pdLE8uYXR0cmlidXRlcywiY21lYW5zIikscT12UyhPLmRpc3RhbmNlLE1bY2VdLFNbdmVdLE8uYXR0cmlidXRlcywiY21lYW5zIiksJCs9TWF0aC5wb3coSC9xLFkpO21bY2VdW1pdPTEvJH19LFpaPWZ1bmN0aW9uKG0sayxTLE0pe2Zvcih2YXIgTz1uZXcgQXJyYXkoUy5rKSxOPTA7TjxPLmxlbmd0aDtOKyspT1tOXT1bXTtmb3IodmFyICQsSCxxPTA7cTxrLmxlbmd0aDtxKyspeyQ9LTEvMCxIPS0xO2Zvcih2YXIgWT0wO1k8a1swXS5sZW5ndGg7WSsrKWtbcV1bWV0+JCYmKCQ9a1txXVtZXSxIPVkpO09bSF0ucHVzaChtW3FdKX1mb3IodmFyIFo9MDtaPE8ubGVuZ3RoO1orKylPW1pdPU0uY29sbGVjdGlvbihPW1pdKTtyZXR1cm4gT30sRGo9ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy5jeSgpLFM9dGhpcy5ub2RlcygpLE09aEkobSksTyxOLCQsSCxxO0g9bmV3IEFycmF5KFMubGVuZ3RoKTtmb3IodmFyIFk9MDtZPFMubGVuZ3RoO1krKylIW1ldPW5ldyBBcnJheShNLmspOyQ9bmV3IEFycmF5KFMubGVuZ3RoKTtmb3IodmFyIFo9MDtaPFMubGVuZ3RoO1orKykkW1pdPW5ldyBBcnJheShNLmspO2Zvcih2YXIgY2U9MDtjZTxTLmxlbmd0aDtjZSsrKXtmb3IodmFyIHZlPTAsbWU9MDttZTxNLms7bWUrKykkW2NlXVttZV09TWF0aC5yYW5kb20oKSx2ZSs9JFtjZV1bbWVdO2Zvcih2YXIgTGU9MDtMZTxNLms7TGUrKykkW2NlXVtMZV09JFtjZV1bTGVdL3ZlfU49bmV3IEFycmF5KE0uayk7Zm9yKHZhciBfZT0wO19lPE0uaztfZSsrKU5bX2VdPW5ldyBBcnJheShNLmF0dHJpYnV0ZXMubGVuZ3RoKTtxPW5ldyBBcnJheShTLmxlbmd0aCk7Zm9yKHZhciBFZT0wO0VlPFMubGVuZ3RoO0VlKyspcVtFZV09bmV3IEFycmF5KE0uayk7Zm9yKHZhciBCZT0hMCxSZT0wO0JlJiZSZTxNLm1heEl0ZXJhdGlvbnM7KUJlPSExLFFaKE4sUywkLHEsTSksSlooJCxILE4sUyxNKSxLWigkLEgsTS5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChCZT0hMCksUmUrKztyZXR1cm4gTz1aWihTLCQsTSxrKSx7Y2x1c3RlcnM6TyxkZWdyZWVPZk1lbWJlcnNoaXA6JH19LGVlZT17a01lYW5zOllaLGtNZWRvaWRzOlhaLGZ1enp5Q01lYW5zOkRqLGZjbTpEan0sdGVlPXEwKHtkaXN0YW5jZToiZXVjbGlkZWFuIixsaW5rYWdlOiJtaW4iLG1vZGU6InRocmVzaG9sZCIsdGhyZXNob2xkOjEvMCxhZGREZW5kcm9ncmFtOiExLGRlbmRyb2dyYW1EZXB0aDowLGF0dHJpYnV0ZXM6W119KSxuZWU9e3NpbmdsZToibWluIixjb21wbGV0ZToibWF4In0scmVlPWZ1bmN0aW9uKG0pe3ZhciBrPXRlZShtKSxTPW5lZVtrLmxpbmthZ2VdO3JldHVybiBTIT1udWxsJiYoay5saW5rYWdlPVMpLGt9LElqPWZ1bmN0aW9uKG0sayxTLE0sTyl7Zm9yKHZhciBOPTAsJD0xLzAsSCxxPU8uYXR0cmlidXRlcyxZPWZ1bmN0aW9uKEplLEx0KXtyZXR1cm4gbVMoTy5kaXN0YW5jZSxxLmxlbmd0aCxmdW5jdGlvbihNdCl7cmV0dXJuIHFbTXRdKEplKX0sZnVuY3Rpb24oTXQpe3JldHVybiBxW010XShMdCl9LEplLEx0KX0sWj0wO1o8bS5sZW5ndGg7WisrKXt2YXIgY2U9bVtaXS5rZXksdmU9U1tjZV1bTVtjZV1dO3ZlPCQmJihOPWNlLCQ9dmUpfWlmKE8ubW9kZT09PSJ0aHJlc2hvbGQiJiYkPj1PLnRocmVzaG9sZHx8Ty5tb2RlPT09ImRlbmRyb2dyYW0iJiZtLmxlbmd0aD09PTEpcmV0dXJuITE7dmFyIG1lPWtbTl0sTGU9a1tNW05dXSxfZTtPLm1vZGU9PT0iZGVuZHJvZ3JhbSI/X2U9e2xlZnQ6bWUscmlnaHQ6TGUsa2V5Om1lLmtleX06X2U9e3ZhbHVlOm1lLnZhbHVlLmNvbmNhdChMZS52YWx1ZSksa2V5Om1lLmtleX0sbVttZS5pbmRleF09X2UsbS5zcGxpY2UoTGUuaW5kZXgsMSksa1ttZS5rZXldPV9lO2Zvcih2YXIgRWU9MDtFZTxtLmxlbmd0aDtFZSsrKXt2YXIgQmU9bVtFZV07bWUua2V5PT09QmUua2V5P0g9MS8wOk8ubGlua2FnZT09PSJtaW4iPyhIPVNbbWUua2V5XVtCZS5rZXldLFNbbWUua2V5XVtCZS5rZXldPlNbTGUua2V5XVtCZS5rZXldJiYoSD1TW0xlLmtleV1bQmUua2V5XSkpOk8ubGlua2FnZT09PSJtYXgiPyhIPVNbbWUua2V5XVtCZS5rZXldLFNbbWUua2V5XVtCZS5rZXldPFNbTGUua2V5XVtCZS5rZXldJiYoSD1TW0xlLmtleV1bQmUua2V5XSkpOk8ubGlua2FnZT09PSJtZWFuIj9IPShTW21lLmtleV1bQmUua2V5XSptZS5zaXplK1NbTGUua2V5XVtCZS5rZXldKkxlLnNpemUpLyhtZS5zaXplK0xlLnNpemUpOk8ubW9kZT09PSJkZW5kcm9ncmFtIj9IPVkoQmUudmFsdWUsbWUudmFsdWUpOkg9WShCZS52YWx1ZVswXSxtZS52YWx1ZVswXSksU1ttZS5rZXldW0JlLmtleV09U1tCZS5rZXldW21lLmtleV09SH1mb3IodmFyIFJlPTA7UmU8bS5sZW5ndGg7UmUrKyl7dmFyIFZlPW1bUmVdLmtleTtpZihNW1ZlXT09PW1lLmtleXx8TVtWZV09PT1MZS5rZXkpe2Zvcih2YXIgY3Q9VmUsc3Q9MDtzdDxtLmxlbmd0aDtzdCsrKXt2YXIgWWU9bVtzdF0ua2V5O1NbVmVdW1llXTxTW1ZlXVtjdF0mJihjdD1ZZSl9TVtWZV09Y3R9bVtSZV0uaW5kZXg9UmV9cmV0dXJuIG1lLmtleT1MZS5rZXk9bWUuaW5kZXg9TGUuaW5kZXg9bnVsbCwhMH0sd1M9ZnVuY3Rpb24geChtLGssUyl7bSYmKG0udmFsdWU/ay5wdXNoKG0udmFsdWUpOihtLmxlZnQmJngobS5sZWZ0LGspLG0ucmlnaHQmJngobS5yaWdodCxrKSkpfSxpZWU9ZnVuY3Rpb24geChtLGspe2lmKCFtKXJldHVybiIiO2lmKG0ubGVmdCYmbS5yaWdodCl7dmFyIFM9eChtLmxlZnQsayksTT14KG0ucmlnaHQsayksTz1rLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOntpZDpTKyIsIitNfX0pO3JldHVybiBrLmFkZCh7Z3JvdXA6ImVkZ2VzIixkYXRhOntzb3VyY2U6Uyx0YXJnZXQ6Ty5pZCgpfX0pLGsuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTpNLHRhcmdldDpPLmlkKCl9fSksTy5pZCgpfWVsc2UgaWYobS52YWx1ZSlyZXR1cm4gbS52YWx1ZS5pZCgpfSxzZWU9ZnVuY3Rpb24geChtLGssUyl7aWYoIW0pcmV0dXJuW107dmFyIE09W10sTz1bXSxOPVtdO3JldHVybiBrPT09MD8obS5sZWZ0JiZ3UyhtLmxlZnQsTSksbS5yaWdodCYmd1MobS5yaWdodCxPKSxOPU0uY29uY2F0KE8pLFtTLmNvbGxlY3Rpb24oTildKTprPT09MT9tLnZhbHVlP1tTLmNvbGxlY3Rpb24obS52YWx1ZSldOihtLmxlZnQmJndTKG0ubGVmdCxNKSxtLnJpZ2h0JiZ3UyhtLnJpZ2h0LE8pLFtTLmNvbGxlY3Rpb24oTSksUy5jb2xsZWN0aW9uKE8pXSk6bS52YWx1ZT9bUy5jb2xsZWN0aW9uKG0udmFsdWUpXToobS5sZWZ0JiYoTT14KG0ubGVmdCxrLTEsUykpLG0ucmlnaHQmJihPPXgobS5yaWdodCxrLTEsUykpLE0uY29uY2F0KE8pKX0sT2o9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPXRoaXMuY3koKSxTPXRoaXMubm9kZXMoKSxNPXJlZShtKSxPPU0uYXR0cmlidXRlcyxOPWZ1bmN0aW9uKFJlLFZlKXtyZXR1cm4gbVMoTS5kaXN0YW5jZSxPLmxlbmd0aCxmdW5jdGlvbihjdCl7cmV0dXJuIE9bY3RdKFJlKX0sZnVuY3Rpb24oY3Qpe3JldHVybiBPW2N0XShWZSl9LFJlLFZlKX0sJD1bXSxIPVtdLHE9W10sWT1bXSxaPTA7WjxTLmxlbmd0aDtaKyspe3ZhciBjZT17dmFsdWU6TS5tb2RlPT09ImRlbmRyb2dyYW0iP1NbWl06W1NbWl1dLGtleTpaLGluZGV4Olp9OyRbWl09Y2UsWVtaXT1jZSxIW1pdPVtdLHFbWl09MH1mb3IodmFyIHZlPTA7dmU8JC5sZW5ndGg7dmUrKylmb3IodmFyIG1lPTA7bWU8PXZlO21lKyspe3ZhciBMZT12b2lkIDA7TS5tb2RlPT09ImRlbmRyb2dyYW0iP0xlPXZlPT09bWU/MS8wOk4oJFt2ZV0udmFsdWUsJFttZV0udmFsdWUpOkxlPXZlPT09bWU/MS8wOk4oJFt2ZV0udmFsdWVbMF0sJFttZV0udmFsdWVbMF0pLEhbdmVdW21lXT1MZSxIW21lXVt2ZV09TGUsTGU8SFt2ZV1bcVt2ZV1dJiYocVt2ZV09bWUpfWZvcih2YXIgX2U9SWooJCxZLEgscSxNKTtfZTspX2U9SWooJCxZLEgscSxNKTt2YXIgRWU7cmV0dXJuIE0ubW9kZT09PSJkZW5kcm9ncmFtIj8oRWU9c2VlKCRbMF0sTS5kZW5kcm9ncmFtRGVwdGgsayksTS5hZGREZW5kcm9ncmFtJiZpZWUoJFswXSxrKSk6KEVlPW5ldyBBcnJheSgkLmxlbmd0aCksJC5mb3JFYWNoKGZ1bmN0aW9uKEJlLFJlKXtCZS5rZXk9QmUuaW5kZXg9bnVsbCxFZVtSZV09ay5jb2xsZWN0aW9uKEJlLnZhbHVlKX0pKSxFZX0sYWVlPXtoaWVyYXJjaGljYWxDbHVzdGVyaW5nOk9qLGhjYTpPan0sb2VlPXEwKHtkaXN0YW5jZToiZXVjbGlkZWFuIixwcmVmZXJlbmNlOiJtZWRpYW4iLGRhbXBpbmc6LjgsbWF4SXRlcmF0aW9uczoxZTMsbWluSXRlcmF0aW9uczoxMDAsYXR0cmlidXRlczpbXX0pLGNlZT1mdW5jdGlvbihtKXt2YXIgaz1tLmRhbXBpbmcsUz1tLnByZWZlcmVuY2U7LjU8PWsmJms8MXx8Y2goIkRhbXBpbmcgbXVzdCByYW5nZSBvbiBbMC41LCAxKS4gIEdvdDogIi5jb25jYXQoaykpO3ZhciBNPVsibWVkaWFuIiwibWVhbiIsIm1pbiIsIm1heCJdO3JldHVybiBNLnNvbWUoZnVuY3Rpb24oTyl7cmV0dXJuIE89PT1TfSl8fFgoUyl8fGNoKCJQcmVmZXJlbmNlIG11c3QgYmUgb25lIG9mIFsiLmNvbmNhdChNLm1hcChmdW5jdGlvbihPKXtyZXR1cm4iJyIuY29uY2F0KE8sIiciKX0pLmpvaW4oIiwgIiksIl0gb3IgYSBudW1iZXIuICBHb3Q6ICIpLmNvbmNhdChTKSksb2VlKG0pfSx1ZWU9ZnVuY3Rpb24obSxrLFMsTSl7dmFyIE89ZnVuY3Rpb24oJCxIKXtyZXR1cm4gTVtIXSgkKX07cmV0dXJuLW1TKG0sTS5sZW5ndGgsZnVuY3Rpb24oTil7cmV0dXJuIE8oayxOKX0sZnVuY3Rpb24oTil7cmV0dXJuIE8oUyxOKX0sayxTKX0sbGVlPWZ1bmN0aW9uKG0sayl7dmFyIFM9bnVsbDtyZXR1cm4gaz09PSJtZWRpYW4iP1M9dVoobSk6az09PSJtZWFuIj9TPWNaKG0pOms9PT0ibWluIj9TPWFaKG0pOms9PT0ibWF4Ij9TPW9aKG0pOlM9ayxTfSxoZWU9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1bXSxPPTA7TzxtO08rKylrW08qbStPXStTW08qbStPXT4wJiZNLnB1c2goTyk7cmV0dXJuIE19LE5qPWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09W10sTz0wO088bTtPKyspe2Zvcih2YXIgTj0tMSwkPS0xLzAsSD0wO0g8Uy5sZW5ndGg7SCsrKXt2YXIgcT1TW0hdO2tbTyptK3FdPiQmJihOPXEsJD1rW08qbStxXSl9Tj4wJiZNLnB1c2goTil9Zm9yKHZhciBZPTA7WTxTLmxlbmd0aDtZKyspTVtTW1ldXT1TW1ldO3JldHVybiBNfSxmZWU9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1OaihtLGssUyksTz0wO088Uy5sZW5ndGg7TysrKXtmb3IodmFyIE49W10sJD0wOyQ8TS5sZW5ndGg7JCsrKU1bJF09PT1TW09dJiZOLnB1c2goJCk7Zm9yKHZhciBIPS0xLHE9LTEvMCxZPTA7WTxOLmxlbmd0aDtZKyspe2Zvcih2YXIgWj0wLGNlPTA7Y2U8Ti5sZW5ndGg7Y2UrKylaKz1rW05bY2VdKm0rTltZXV07Wj5xJiYoSD1ZLHE9Wil9U1tPXT1OW0hdfXJldHVybiBNPU5qKG0sayxTKSxNfSxQaj1mdW5jdGlvbihtKXtmb3IodmFyIGs9dGhpcy5jeSgpLFM9dGhpcy5ub2RlcygpLE09Y2VlKG0pLE89e30sTj0wO048Uy5sZW5ndGg7TisrKU9bU1tOXS5pZCgpXT1OO3ZhciAkLEgscSxZLFosY2U7JD1TLmxlbmd0aCxIPSQqJCxxPW5ldyBBcnJheShIKTtmb3IodmFyIHZlPTA7dmU8SDt2ZSsrKXFbdmVdPS0xLzA7Zm9yKHZhciBtZT0wO21lPCQ7bWUrKylmb3IodmFyIExlPTA7TGU8JDtMZSsrKW1lIT09TGUmJihxW21lKiQrTGVdPXVlZShNLmRpc3RhbmNlLFNbbWVdLFNbTGVdLE0uYXR0cmlidXRlcykpO1k9bGVlKHEsTS5wcmVmZXJlbmNlKTtmb3IodmFyIF9lPTA7X2U8JDtfZSsrKXFbX2UqJCtfZV09WTtaPW5ldyBBcnJheShIKTtmb3IodmFyIEVlPTA7RWU8SDtFZSsrKVpbRWVdPTA7Y2U9bmV3IEFycmF5KEgpO2Zvcih2YXIgQmU9MDtCZTxIO0JlKyspY2VbQmVdPTA7Zm9yKHZhciBSZT1uZXcgQXJyYXkoJCksVmU9bmV3IEFycmF5KCQpLGN0PW5ldyBBcnJheSgkKSxzdD0wO3N0PCQ7c3QrKylSZVtzdF09MCxWZVtzdF09MCxjdFtzdF09MDtmb3IodmFyIFllPW5ldyBBcnJheSgkKk0ubWluSXRlcmF0aW9ucyksbXQ9MDttdDxZZS5sZW5ndGg7bXQrKylZZVttdF09MDt2YXIgSmU7Zm9yKEplPTA7SmU8TS5tYXhJdGVyYXRpb25zO0plKyspe2Zvcih2YXIgTHQ9MDtMdDwkO0x0Kyspe2Zvcih2YXIgTXQ9LTEvMCx1dD0tMS8wLFd0PS0xLFR0PTAsX249MDtfbjwkO19uKyspUmVbX25dPVpbTHQqJCtfbl0sVHQ9Y2VbTHQqJCtfbl0rcVtMdCokK19uXSxUdD49TXQ/KHV0PU10LE10PVR0LFd0PV9uKTpUdD51dCYmKHV0PVR0KTtmb3IodmFyIGhuPTA7aG48JDtobisrKVpbTHQqJCtobl09KDEtTS5kYW1waW5nKSoocVtMdCokK2huXS1NdCkrTS5kYW1waW5nKlJlW2huXTtaW0x0KiQrV3RdPSgxLU0uZGFtcGluZykqKHFbTHQqJCtXdF0tdXQpK00uZGFtcGluZypSZVtXdF19Zm9yKHZhciBZdD0wO1l0PCQ7WXQrKyl7Zm9yKHZhciBEbj0wLGlyPTA7aXI8JDtpcisrKVJlW2lyXT1jZVtpciokK1l0XSxWZVtpcl09TWF0aC5tYXgoMCxaW2lyKiQrWXRdKSxEbis9VmVbaXJdO0RuLT1WZVtZdF0sVmVbWXRdPVpbWXQqJCtZdF0sRG4rPVZlW1l0XTtmb3IodmFyIHZyPTA7dnI8JDt2cisrKWNlW3ZyKiQrWXRdPSgxLU0uZGFtcGluZykqTWF0aC5taW4oMCxEbi1WZVt2cl0pK00uZGFtcGluZypSZVt2cl07Y2VbWXQqJCtZdF09KDEtTS5kYW1waW5nKSooRG4tVmVbWXRdKStNLmRhbXBpbmcqUmVbWXRdfWZvcih2YXIgTm49MCxwcj0wO3ByPCQ7cHIrKyl7dmFyIEVyPWNlW3ByKiQrcHJdK1pbcHIqJCtwcl0+MD8xOjA7WWVbSmUlTS5taW5JdGVyYXRpb25zKiQrcHJdPUVyLE5uKz1Fcn1pZihObj4wJiYoSmU+PU0ubWluSXRlcmF0aW9ucy0xfHxKZT09TS5tYXhJdGVyYXRpb25zLTEpKXtmb3IodmFyIE1yPTAsQ3I9MDtDcjwkO0NyKyspe2N0W0NyXT0wO2Zvcih2YXIgT3I9MDtPcjxNLm1pbkl0ZXJhdGlvbnM7T3IrKyljdFtDcl0rPVllW09yKiQrQ3JdOyhjdFtDcl09PT0wfHxjdFtDcl09PT1NLm1pbkl0ZXJhdGlvbnMpJiZNcisrfWlmKE1yPT09JClicmVha319Zm9yKHZhciBXbj1oZWUoJCxaLGNlKSxicj1mZWUoJCxxLFduKSxTcj17fSxOcj0wO05yPFduLmxlbmd0aDtOcisrKVNyW1duW05yXV09W107Zm9yKHZhciBTaT0wO1NpPFMubGVuZ3RoO1NpKyspe3ZhciB5cz1PW1NbU2ldLmlkKCldLHBhPWJyW3lzXTtwYSE9bnVsbCYmU3JbcGFdLnB1c2goU1tTaV0pfWZvcih2YXIgTWk9bmV3IEFycmF5KFduLmxlbmd0aCksZ2k9MDtnaTxXbi5sZW5ndGg7Z2krKylNaVtnaV09ay5jb2xsZWN0aW9uKFNyW1duW2dpXV0pO3JldHVybiBNaX0sZGVlPXthZmZpbml0eVByb3BhZ2F0aW9uOlBqLGFwOlBqfSxnZWU9cTAoe3Jvb3Q6dm9pZCAwLGRpcmVjdGVkOiExfSkscGVlPXtoaWVyaG9semVyOmZ1bmN0aW9uKG0pe2lmKCFzZShtKSl7dmFyIGs9YXJndW1lbnRzO209e3Jvb3Q6a1swXSxkaXJlY3RlZDprWzFdfX12YXIgUz1nZWUobSksTT1TLnJvb3QsTz1TLmRpcmVjdGVkLE49dGhpcywkPSExLEgscSxZO00mJihZPWJlKE0pP3RoaXMuZmlsdGVyKE0pWzBdLmlkKCk6TVswXS5pZCgpKTt2YXIgWj17fSxjZT17fTtPP04uZm9yRWFjaChmdW5jdGlvbihCZSl7dmFyIFJlPUJlLmlkKCk7aWYoQmUuaXNOb2RlKCkpe3ZhciBWZT1CZS5pbmRlZ3JlZSghMCksY3Q9QmUub3V0ZGVncmVlKCEwKSxzdD1WZS1jdCxZZT1jdC1WZTtzdD09MT9IPyQ9ITA6SD1SZTpZZT09MT9xPyQ9ITA6cT1SZTooWWU+MXx8c3Q+MSkmJigkPSEwKSxaW1JlXT1bXSxCZS5vdXRnb2VycygpLmZvckVhY2goZnVuY3Rpb24obXQpe210LmlzRWRnZSgpJiZaW1JlXS5wdXNoKG10LmlkKCkpfSl9ZWxzZSBjZVtSZV09W3ZvaWQgMCxCZS50YXJnZXQoKS5pZCgpXX0pOk4uZm9yRWFjaChmdW5jdGlvbihCZSl7dmFyIFJlPUJlLmlkKCk7aWYoQmUuaXNOb2RlKCkpe3ZhciBWZT1CZS5kZWdyZWUoITApO1ZlJTImJihIP3E/JD0hMDpxPVJlOkg9UmUpLFpbUmVdPVtdLEJlLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihjdCl7cmV0dXJuIFpbUmVdLnB1c2goY3QuaWQoKSl9KX1lbHNlIGNlW1JlXT1bQmUuc291cmNlKCkuaWQoKSxCZS50YXJnZXQoKS5pZCgpXX0pO3ZhciB2ZT17Zm91bmQ6ITEsdHJhaWw6dm9pZCAwfTtpZigkKXJldHVybiB2ZTtpZihxJiZIKWlmKE8pe2lmKFkmJnEhPVkpcmV0dXJuIHZlO1k9cX1lbHNle2lmKFkmJnEhPVkmJkghPVkpcmV0dXJuIHZlO1l8fChZPXEpfWVsc2UgWXx8KFk9TlswXS5pZCgpKTt2YXIgbWU9ZnVuY3Rpb24oUmUpe2Zvcih2YXIgVmU9UmUsY3Q9W1JlXSxzdCxZZSxtdDtaW1ZlXS5sZW5ndGg7KXN0PVpbVmVdLnNoaWZ0KCksWWU9Y2Vbc3RdWzBdLG10PWNlW3N0XVsxXSxWZSE9bXQ/KFpbbXRdPVpbbXRdLmZpbHRlcihmdW5jdGlvbihKZSl7cmV0dXJuIEplIT1zdH0pLFZlPW10KTohTyYmVmUhPVllJiYoWltZZV09WltZZV0uZmlsdGVyKGZ1bmN0aW9uKEplKXtyZXR1cm4gSmUhPXN0fSksVmU9WWUpLGN0LnVuc2hpZnQoc3QpLGN0LnVuc2hpZnQoVmUpO3JldHVybiBjdH0sTGU9W10sX2U9W107Zm9yKF9lPW1lKFkpO19lLmxlbmd0aCE9MTspWltfZVswXV0ubGVuZ3RoPT0wPyhMZS51bnNoaWZ0KE4uZ2V0RWxlbWVudEJ5SWQoX2Uuc2hpZnQoKSkpLExlLnVuc2hpZnQoTi5nZXRFbGVtZW50QnlJZChfZS5zaGlmdCgpKSkpOl9lPW1lKF9lLnNoaWZ0KCkpLmNvbmNhdChfZSk7TGUudW5zaGlmdChOLmdldEVsZW1lbnRCeUlkKF9lLnNoaWZ0KCkpKTtmb3IodmFyIEVlIGluIFopaWYoWltFZV0ubGVuZ3RoKXJldHVybiB2ZTtyZXR1cm4gdmUuZm91bmQ9ITAsdmUudHJhaWw9dGhpcy5zcGF3bihMZSwhMCksdmV9fSx5Uz1mdW5jdGlvbigpe3ZhciBtPXRoaXMsaz17fSxTPTAsTT0wLE89W10sTj1bXSwkPXt9LEg9ZnVuY3Rpb24oY2UsdmUpe2Zvcih2YXIgbWU9Ti5sZW5ndGgtMSxMZT1bXSxfZT1tLnNwYXduKCk7TlttZV0ueCE9Y2V8fE5bbWVdLnkhPXZlOylMZS5wdXNoKE4ucG9wKCkuZWRnZSksbWUtLTtMZS5wdXNoKE4ucG9wKCkuZWRnZSksTGUuZm9yRWFjaChmdW5jdGlvbihFZSl7dmFyIEJlPUVlLmNvbm5lY3RlZE5vZGVzKCkuaW50ZXJzZWN0aW9uKG0pO19lLm1lcmdlKEVlKSxCZS5mb3JFYWNoKGZ1bmN0aW9uKFJlKXt2YXIgVmU9UmUuaWQoKSxjdD1SZS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihtKTtfZS5tZXJnZShSZSksa1tWZV0uY3V0VmVydGV4P19lLm1lcmdlKGN0LmZpbHRlcihmdW5jdGlvbihzdCl7cmV0dXJuIHN0LmlzTG9vcCgpfSkpOl9lLm1lcmdlKGN0KX0pfSksTy5wdXNoKF9lKX0scT1mdW5jdGlvbiBaKGNlLHZlLG1lKXtjZT09PW1lJiYoTSs9MSksa1t2ZV09e2lkOlMsbG93OlMrKyxjdXRWZXJ0ZXg6ITF9O3ZhciBMZT1tLmdldEVsZW1lbnRCeUlkKHZlKS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihtKTtpZihMZS5zaXplKCk9PT0wKU8ucHVzaChtLnNwYXduKG0uZ2V0RWxlbWVudEJ5SWQodmUpKSk7ZWxzZXt2YXIgX2UsRWUsQmUsUmU7TGUuZm9yRWFjaChmdW5jdGlvbihWZSl7X2U9VmUuc291cmNlKCkuaWQoKSxFZT1WZS50YXJnZXQoKS5pZCgpLEJlPV9lPT09dmU/RWU6X2UsQmUhPT1tZSYmKFJlPVZlLmlkKCksJFtSZV18fCgkW1JlXT0hMCxOLnB1c2goe3g6dmUseTpCZSxlZGdlOlZlfSkpLEJlIGluIGs/a1t2ZV0ubG93PU1hdGgubWluKGtbdmVdLmxvdyxrW0JlXS5pZCk6KFooY2UsQmUsdmUpLGtbdmVdLmxvdz1NYXRoLm1pbihrW3ZlXS5sb3csa1tCZV0ubG93KSxrW3ZlXS5pZDw9a1tCZV0ubG93JiYoa1t2ZV0uY3V0VmVydGV4PSEwLEgodmUsQmUpKSkpfSl9fTttLmZvckVhY2goZnVuY3Rpb24oWil7aWYoWi5pc05vZGUoKSl7dmFyIGNlPVouaWQoKTtjZSBpbiBrfHwoTT0wLHEoY2UsY2UpLGtbY2VdLmN1dFZlcnRleD1NPjEpfX0pO3ZhciBZPU9iamVjdC5rZXlzKGspLmZpbHRlcihmdW5jdGlvbihaKXtyZXR1cm4ga1taXS5jdXRWZXJ0ZXh9KS5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIG0uZ2V0RWxlbWVudEJ5SWQoWil9KTtyZXR1cm57Y3V0Om0uc3Bhd24oWSksY29tcG9uZW50czpPfX0sYmVlPXtob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkOnlTLGh0YmM6eVMsaHRiOnlTLGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWRDb21wb25lbnRzOnlTfSx4Uz1mdW5jdGlvbigpe3ZhciBtPXRoaXMsaz17fSxTPTAsTT1bXSxPPVtdLE49bS5zcGF3bihtKSwkPWZ1bmN0aW9uIEgocSl7Ty5wdXNoKHEpLGtbcV09e2luZGV4OlMsbG93OlMrKyxleHBsb3JlZDohMX07dmFyIFk9bS5nZXRFbGVtZW50QnlJZChxKS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihtKTtpZihZLmZvckVhY2goZnVuY3Rpb24oTGUpe3ZhciBfZT1MZS50YXJnZXQoKS5pZCgpO19lIT09cSYmKF9lIGluIGt8fEgoX2UpLGtbX2VdLmV4cGxvcmVkfHwoa1txXS5sb3c9TWF0aC5taW4oa1txXS5sb3csa1tfZV0ubG93KSkpfSksa1txXS5pbmRleD09PWtbcV0ubG93KXtmb3IodmFyIFo9bS5zcGF3bigpOzspe3ZhciBjZT1PLnBvcCgpO2lmKFoubWVyZ2UobS5nZXRFbGVtZW50QnlJZChjZSkpLGtbY2VdLmxvdz1rW3FdLmluZGV4LGtbY2VdLmV4cGxvcmVkPSEwLGNlPT09cSlicmVha312YXIgdmU9Wi5lZGdlc1dpdGgoWiksbWU9Wi5tZXJnZSh2ZSk7TS5wdXNoKG1lKSxOPU4uZGlmZmVyZW5jZShtZSl9fTtyZXR1cm4gbS5mb3JFYWNoKGZ1bmN0aW9uKEgpe2lmKEguaXNOb2RlKCkpe3ZhciBxPUguaWQoKTtxIGluIGt8fCQocSl9fSkse2N1dDpOLGNvbXBvbmVudHM6TX19LG1lZT17dGFyamFuU3Ryb25nbHlDb25uZWN0ZWQ6eFMsdHNjOnhTLHRzY2M6eFMsdGFyamFuU3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzOnhTfSxCaj17fTtbSDksV0osWUosUUosWkosdFosaVosTFosdDgsbjgsbEkselosZWVlLGFlZSxkZWUscGVlLGJlZSxtZWVdLmZvckVhY2goZnVuY3Rpb24oeCl7eXQoQmoseCl9KTsvKiEKRW1iZWRkYWJsZSBNaW5pbXVtIFN0cmljdGx5LUNvbXBsaWFudCBQcm9taXNlcy9BKyAxLjEuMSBUaGVuYWJsZQpDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBSYWxmIFMuIEVuZ2Vsc2NoYWxsIChodHRwOi8vZW5nZWxzY2hhbGwuY29tKQpMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQpCiovdmFyIEZqPTAsUmo9MSxqaj0yLEd2PWZ1bmN0aW9uIHgobSl7aWYoISh0aGlzIGluc3RhbmNlb2YgeCkpcmV0dXJuIG5ldyB4KG0pO3RoaXMuaWQ9IlRoZW5hYmxlLzEuMC43Iix0aGlzLnN0YXRlPUZqLHRoaXMuZnVsZmlsbFZhbHVlPXZvaWQgMCx0aGlzLnJlamVjdFJlYXNvbj12b2lkIDAsdGhpcy5vbkZ1bGZpbGxlZD1bXSx0aGlzLm9uUmVqZWN0ZWQ9W10sdGhpcy5wcm94eT17dGhlbjp0aGlzLnRoZW4uYmluZCh0aGlzKX0sdHlwZW9mIG09PSJmdW5jdGlvbiImJm0uY2FsbCh0aGlzLHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLHRoaXMucmVqZWN0LmJpbmQodGhpcykpfTtHdi5wcm90b3R5cGU9e2Z1bGZpbGw6ZnVuY3Rpb24obSl7cmV0dXJuICRqKHRoaXMsUmosImZ1bGZpbGxWYWx1ZSIsbSl9LHJlamVjdDpmdW5jdGlvbihtKXtyZXR1cm4gJGoodGhpcyxqaiwicmVqZWN0UmVhc29uIixtKX0sdGhlbjpmdW5jdGlvbihtLGspe3ZhciBTPXRoaXMsTT1uZXcgR3Y7cmV0dXJuIFMub25GdWxmaWxsZWQucHVzaChIaihtLE0sImZ1bGZpbGwiKSksUy5vblJlamVjdGVkLnB1c2goSGooayxNLCJyZWplY3QiKSksemooUyksTS5wcm94eX19O3ZhciAkaj1mdW5jdGlvbihtLGssUyxNKXtyZXR1cm4gbS5zdGF0ZT09PUZqJiYobS5zdGF0ZT1rLG1bU109TSx6aihtKSksbX0semo9ZnVuY3Rpb24obSl7bS5zdGF0ZT09PVJqP3FqKG0sIm9uRnVsZmlsbGVkIixtLmZ1bGZpbGxWYWx1ZSk6bS5zdGF0ZT09PWpqJiZxaihtLCJvblJlamVjdGVkIixtLnJlamVjdFJlYXNvbil9LHFqPWZ1bmN0aW9uKG0sayxTKXtpZihtW2tdLmxlbmd0aCE9PTApe3ZhciBNPW1ba107bVtrXT1bXTt2YXIgTz1mdW5jdGlvbigpe2Zvcih2YXIgJD0wOyQ8TS5sZW5ndGg7JCsrKU1bJF0oUyl9O3R5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiI/c2V0SW1tZWRpYXRlKE8pOnNldFRpbWVvdXQoTywwKX19LEhqPWZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gZnVuY3Rpb24oTSl7aWYodHlwZW9mIG0hPSJmdW5jdGlvbiIpa1tTXS5jYWxsKGssTSk7ZWxzZXt2YXIgTzt0cnl7Tz1tKE0pfWNhdGNoKE4pe2sucmVqZWN0KE4pO3JldHVybn12ZWUoayxPKX19fSx2ZWU9ZnVuY3Rpb24geChtLGspe2lmKG09PT1rfHxtLnByb3h5PT09ayl7bS5yZWplY3QobmV3IFR5cGVFcnJvcigiY2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKTtyZXR1cm59dmFyIFM7aWYodShrKT09PSJvYmplY3QiJiZrIT09bnVsbHx8dHlwZW9mIGs9PSJmdW5jdGlvbiIpdHJ5e1M9ay50aGVufWNhdGNoKE8pe20ucmVqZWN0KE8pO3JldHVybn1pZih0eXBlb2YgUz09ImZ1bmN0aW9uIil7dmFyIE09ITE7dHJ5e1MuY2FsbChrLGZ1bmN0aW9uKE8pe018fChNPSEwLE89PT1rP20ucmVqZWN0KG5ldyBUeXBlRXJyb3IoImNpcmN1bGFyIHRoZW5hYmxlIGNoYWluIikpOngobSxPKSl9LGZ1bmN0aW9uKE8pe018fChNPSEwLG0ucmVqZWN0KE8pKX0pfWNhdGNoKE8pe018fG0ucmVqZWN0KE8pfXJldHVybn1tLmZ1bGZpbGwoayl9O0d2LmFsbD1mdW5jdGlvbih4KXtyZXR1cm4gbmV3IEd2KGZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPW5ldyBBcnJheSh4Lmxlbmd0aCksTT0wLE89ZnVuY3Rpb24oSCxxKXtTW0hdPXEsTSsrLE09PT14Lmxlbmd0aCYmbShTKX0sTj0wO048eC5sZW5ndGg7TisrKShmdW5jdGlvbigkKXt2YXIgSD14WyRdLHE9SCE9bnVsbCYmSC50aGVuIT1udWxsO2lmKHEpSC50aGVuKGZ1bmN0aW9uKFope08oJCxaKX0sZnVuY3Rpb24oWil7ayhaKX0pO2Vsc2V7dmFyIFk9SDtPKCQsWSl9fSkoTil9KX0sR3YucmVzb2x2ZT1mdW5jdGlvbih4KXtyZXR1cm4gbmV3IEd2KGZ1bmN0aW9uKG0sayl7bSh4KX0pfSxHdi5yZWplY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIG5ldyBHdihmdW5jdGlvbihtLGspe2soeCl9KX07dmFyIGk4PXR5cGVvZiBQcm9taXNlPCJ1Ij9Qcm9taXNlOkd2LGRJPWZ1bmN0aW9uKG0sayxTKXt2YXIgTT1QZShtKSxPPSFNLE49dGhpcy5fcHJpdmF0ZT15dCh7ZHVyYXRpb246MWUzfSxrLFMpO2lmKE4udGFyZ2V0PW0sTi5zdHlsZT1OLnN0eWxlfHxOLmNzcyxOLnN0YXJ0ZWQ9ITEsTi5wbGF5aW5nPSExLE4uaG9va2VkPSExLE4uYXBwbHlpbmc9ITEsTi5wcm9ncmVzcz0wLE4uY29tcGxldGVzPVtdLE4uZnJhbWVzPVtdLE4uY29tcGxldGUmJmFlKE4uY29tcGxldGUpJiZOLmNvbXBsZXRlcy5wdXNoKE4uY29tcGxldGUpLE8pe3ZhciAkPW0ucG9zaXRpb24oKTtOLnN0YXJ0UG9zaXRpb249Ti5zdGFydFBvc2l0aW9ufHx7eDokLngseTokLnl9LE4uc3RhcnRTdHlsZT1OLnN0YXJ0U3R5bGV8fG0uY3koKS5zdHlsZSgpLmdldEFuaW1hdGlvblN0YXJ0U3R5bGUobSxOLnN0eWxlKX1pZihNKXt2YXIgSD1tLnBhbigpO04uc3RhcnRQYW49e3g6SC54LHk6SC55fSxOLnN0YXJ0Wm9vbT1tLnpvb20oKX10aGlzLmxlbmd0aD0xLHRoaXNbMF09dGhpc30sZzU9ZEkucHJvdG90eXBlO3l0KGc1LHtpbnN0YW5jZVN0cmluZzpmdW5jdGlvbigpe3JldHVybiJhbmltYXRpb24ifSxob29rOmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fcHJpdmF0ZTtpZighbS5ob29rZWQpe3ZhciBrLFM9bS50YXJnZXQuX3ByaXZhdGUuYW5pbWF0aW9uO20ucXVldWU/az1TLnF1ZXVlOms9Uy5jdXJyZW50LGsucHVzaCh0aGlzKSx4ZShtLnRhcmdldCkmJm0udGFyZ2V0LmN5KCkuYWRkVG9BbmltYXRpb25Qb29sKG0udGFyZ2V0KSxtLmhvb2tlZD0hMH1yZXR1cm4gdGhpc30scGxheTpmdW5jdGlvbigpe3ZhciBtPXRoaXMuX3ByaXZhdGU7cmV0dXJuIG0ucHJvZ3Jlc3M9PT0xJiYobS5wcm9ncmVzcz0wKSxtLnBsYXlpbmc9ITAsbS5zdGFydGVkPSExLG0uc3RvcHBlZD0hMSx0aGlzLmhvb2soKSx0aGlzfSxwbGF5aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucGxheWluZ30sYXBwbHk6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9wcml2YXRlO3JldHVybiBtLmFwcGx5aW5nPSEwLG0uc3RhcnRlZD0hMSxtLnN0b3BwZWQ9ITEsdGhpcy5ob29rKCksdGhpc30sYXBwbHlpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5hcHBseWluZ30scGF1c2U6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9wcml2YXRlO3JldHVybiBtLnBsYXlpbmc9ITEsbS5zdGFydGVkPSExLHRoaXN9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9wcml2YXRlO3JldHVybiBtLnBsYXlpbmc9ITEsbS5zdGFydGVkPSExLG0uc3RvcHBlZD0hMCx0aGlzfSxyZXdpbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9ncmVzcygwKX0sZmFzdGZvcndhcmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9ncmVzcygxKX0sdGltZTpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlO3JldHVybiBtPT09dm9pZCAwP2sucHJvZ3Jlc3Mqay5kdXJhdGlvbjp0aGlzLnByb2dyZXNzKG0vay5kdXJhdGlvbil9LHByb2dyZXNzOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUsUz1rLnBsYXlpbmc7cmV0dXJuIG09PT12b2lkIDA/ay5wcm9ncmVzczooUyYmdGhpcy5wYXVzZSgpLGsucHJvZ3Jlc3M9bSxrLnN0YXJ0ZWQ9ITEsUyYmdGhpcy5wbGF5KCksdGhpcyl9LGNvbXBsZXRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnByb2dyZXNzPT09MX0scmV2ZXJzZTpmdW5jdGlvbigpe3ZhciBtPXRoaXMuX3ByaXZhdGUsaz1tLnBsYXlpbmc7ayYmdGhpcy5wYXVzZSgpLG0ucHJvZ3Jlc3M9MS1tLnByb2dyZXNzLG0uc3RhcnRlZD0hMTt2YXIgUz1mdW5jdGlvbihxLFkpe3ZhciBaPW1bcV07WiE9bnVsbCYmKG1bcV09bVtZXSxtW1ldPVopfTtpZihTKCJ6b29tIiwic3RhcnRab29tIiksUygicGFuIiwic3RhcnRQYW4iKSxTKCJwb3NpdGlvbiIsInN0YXJ0UG9zaXRpb24iKSxtLnN0eWxlKWZvcih2YXIgTT0wO008bS5zdHlsZS5sZW5ndGg7TSsrKXt2YXIgTz1tLnN0eWxlW01dLE49Ty5uYW1lLCQ9bS5zdGFydFN0eWxlW05dO20uc3RhcnRTdHlsZVtOXT1PLG0uc3R5bGVbTV09JH1yZXR1cm4gayYmdGhpcy5wbGF5KCksdGhpc30scHJvbWlzZTpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlLFM7c3dpdGNoKG0pe2Nhc2UiZnJhbWUiOlM9ay5mcmFtZXM7YnJlYWs7ZGVmYXVsdDpjYXNlImNvbXBsZXRlIjpjYXNlImNvbXBsZXRlZCI6Uz1rLmNvbXBsZXRlc31yZXR1cm4gbmV3IGk4KGZ1bmN0aW9uKE0sTyl7Uy5wdXNoKGZ1bmN0aW9uKCl7TSgpfSl9KX19KSxnNS5jb21wbGV0ZT1nNS5jb21wbGV0ZWQsZzUucnVuPWc1LnBsYXksZzUucnVubmluZz1nNS5wbGF5aW5nO3ZhciB3ZWU9e2FuaW1hdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGs9dGhpcyxTPWsubGVuZ3RoIT09dm9pZCAwLE09Uz9rOltrXSxPPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoIU8uc3R5bGVFbmFibGVkKCkpcmV0dXJuITE7dmFyIE49TVswXTtpZihOKXJldHVybiBOLl9wcml2YXRlLmFuaW1hdGlvbi5jdXJyZW50Lmxlbmd0aD4wfX0sY2xlYXJRdWV1ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciBrPXRoaXMsUz1rLmxlbmd0aCE9PXZvaWQgMCxNPVM/azpba10sTz10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCFPLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2Zvcih2YXIgTj0wO048TS5sZW5ndGg7TisrKXt2YXIgJD1NW05dOyQuX3ByaXZhdGUuYW5pbWF0aW9uLnF1ZXVlPVtdfXJldHVybiB0aGlzfX0sZGVsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayxTKXt2YXIgTT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBNLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0ZSh7ZGVsYXk6ayxkdXJhdGlvbjprLGNvbXBsZXRlOlN9KTp0aGlzfX0sZGVsYXlBbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayxTKXt2YXIgTT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBNLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0aW9uKHtkZWxheTprLGR1cmF0aW9uOmssY29tcGxldGU6U30pOnRoaXN9fSxhbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayxTKXt2YXIgTT10aGlzLE89TS5sZW5ndGghPT12b2lkIDAsTj1PP006W01dLCQ9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcyxIPSFPLHE9IUg7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIFk9JC5zdHlsZSgpO2s9eXQoe30sayxTKTt2YXIgWj1PYmplY3Qua2V5cyhrKS5sZW5ndGg9PT0wO2lmKFopcmV0dXJuIG5ldyBkSShOWzBdLGspO3N3aXRjaChrLmR1cmF0aW9uPT09dm9pZCAwJiYoay5kdXJhdGlvbj00MDApLGsuZHVyYXRpb24pe2Nhc2Uic2xvdyI6ay5kdXJhdGlvbj02MDA7YnJlYWs7Y2FzZSJmYXN0IjprLmR1cmF0aW9uPTIwMDticmVha31pZihxJiYoay5zdHlsZT1ZLmdldFByb3BzTGlzdChrLnN0eWxlfHxrLmNzcyksay5jc3M9dm9pZCAwKSxxJiZrLnJlbmRlcmVkUG9zaXRpb24hPW51bGwpe3ZhciBjZT1rLnJlbmRlcmVkUG9zaXRpb24sdmU9JC5wYW4oKSxtZT0kLnpvb20oKTtrLnBvc2l0aW9uPWhqKGNlLG1lLHZlKX1pZihIJiZrLnBhbkJ5IT1udWxsKXt2YXIgTGU9ay5wYW5CeSxfZT0kLnBhbigpO2sucGFuPXt4Ol9lLngrTGUueCx5Ol9lLnkrTGUueX19dmFyIEVlPWsuY2VudGVyfHxrLmNlbnRyZTtpZihIJiZFZSE9bnVsbCl7dmFyIEJlPSQuZ2V0Q2VudGVyUGFuKEVlLmVsZXMsay56b29tKTtCZSE9bnVsbCYmKGsucGFuPUJlKX1pZihIJiZrLmZpdCE9bnVsbCl7dmFyIFJlPWsuZml0LFZlPSQuZ2V0Rml0Vmlld3BvcnQoUmUuZWxlc3x8UmUuYm91bmRpbmdCb3gsUmUucGFkZGluZyk7VmUhPW51bGwmJihrLnBhbj1WZS5wYW4say56b29tPVZlLnpvb20pfWlmKEgmJnNlKGsuem9vbSkpe3ZhciBjdD0kLmdldFpvb21lZFZpZXdwb3J0KGsuem9vbSk7Y3QhPW51bGw/KGN0Lnpvb21lZCYmKGsuem9vbT1jdC56b29tKSxjdC5wYW5uZWQmJihrLnBhbj1jdC5wYW4pKTprLnpvb209bnVsbH1yZXR1cm4gbmV3IGRJKE5bMF0sayl9fSxhbmltYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGssUyl7dmFyIE09dGhpcyxPPU0ubGVuZ3RoIT09dm9pZCAwLE49Tz9NOltNXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7UyYmKGs9eXQoe30sayxTKSk7Zm9yKHZhciBIPTA7SDxOLmxlbmd0aDtIKyspe3ZhciBxPU5bSF0sWT1xLmFuaW1hdGVkKCkmJihrLnF1ZXVlPT09dm9pZCAwfHxrLnF1ZXVlKSxaPXEuYW5pbWF0aW9uKGssWT97cXVldWU6ITB9OnZvaWQgMCk7Wi5wbGF5KCl9cmV0dXJuIHRoaXN9fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGssUyl7dmFyIE09dGhpcyxPPU0ubGVuZ3RoIT09dm9pZCAwLE49Tz9NOltNXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7Zm9yKHZhciBIPTA7SDxOLmxlbmd0aDtIKyspe2Zvcih2YXIgcT1OW0hdLFk9cS5fcHJpdmF0ZSxaPVkuYW5pbWF0aW9uLmN1cnJlbnQsY2U9MDtjZTxaLmxlbmd0aDtjZSsrKXt2YXIgdmU9WltjZV0sbWU9dmUuX3ByaXZhdGU7UyYmKG1lLmR1cmF0aW9uPTApfWsmJihZLmFuaW1hdGlvbi5xdWV1ZT1bXSksU3x8KFkuYW5pbWF0aW9uLmN1cnJlbnQ9W10pfXJldHVybiAkLm5vdGlmeSgiZHJhdyIpLHRoaXN9fX0seWVlPUFycmF5LmlzQXJyYXksa1M9eWVlLFZqPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHhlZT0vXlx3KiQvO2Z1bmN0aW9uIGtlZSh4LG0pe2lmKGtTKHgpKXJldHVybiExO3ZhciBrPXR5cGVvZiB4O3JldHVybiBrPT0ibnVtYmVyInx8az09InN5bWJvbCJ8fGs9PSJib29sZWFuInx8eD09bnVsbHx8WnIoeCk/ITA6eGVlLnRlc3QoeCl8fCFWai50ZXN0KHgpfHxtIT1udWxsJiZ4IGluIE9iamVjdChtKX12YXIgRWVlPWtlZSxUZWU9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLENlZT0iW29iamVjdCBGdW5jdGlvbl0iLFNlZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLF9lZT0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIEFlZSh4KXtpZighQXQoeCkpcmV0dXJuITE7dmFyIG09Y2QoeCk7cmV0dXJuIG09PUNlZXx8bT09U2VlfHxtPT1UZWV8fG09PV9lZX12YXIgTGVlPUFlZSxNZWU9JG9bIl9fY29yZS1qc19zaGFyZWRfXyJdLEVTPU1lZSxVaj1mdW5jdGlvbigpe3ZhciB4PS9bXi5dKyQvLmV4ZWMoRVMmJkVTLmtleXMmJkVTLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4geD8iU3ltYm9sKHNyYylfMS4iK3g6IiJ9KCk7ZnVuY3Rpb24gRGVlKHgpe3JldHVybiEhVWomJlVqIGluIHh9dmFyIEllZT1EZWUsT2VlPUZ1bmN0aW9uLnByb3RvdHlwZSxOZWU9T2VlLnRvU3RyaW5nO2Z1bmN0aW9uIFBlZSh4KXtpZih4IT1udWxsKXt0cnl7cmV0dXJuIE5lZS5jYWxsKHgpfWNhdGNoe310cnl7cmV0dXJuIHgrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn12YXIgR2o9UGVlLEtqPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxCZWU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sV2o9RnVuY3Rpb24ucHJvdG90eXBlLFlqPU9iamVjdC5wcm90b3R5cGUsRmVlPVdqLnRvU3RyaW5nLFJlZT1Zai5oYXNPd25Qcm9wZXJ0eSxqZWU9UmVnRXhwKCJeIitGZWUuY2FsbChSZWUpLnJlcGxhY2UoS2osIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7ZnVuY3Rpb24gJGVlKHgpe2lmKCFBdCh4KXx8SWVlKHgpKXJldHVybiExO3ZhciBtPUxlZSh4KT9qZWU6QmVlO3JldHVybiBtLnRlc3QoR2ooeCkpfXZhciB6ZWU9JGVlO2Z1bmN0aW9uIHFlZSh4LG0pe3JldHVybiB4PT1udWxsP3ZvaWQgMDp4W21dfXZhciBIZWU9cWVlO2Z1bmN0aW9uIFZlZSh4LG0pe3ZhciBrPUhlZSh4LG0pO3JldHVybiB6ZWUoayk/azp2b2lkIDB9dmFyIGdJPVZlZSxVZWU9Z0koT2JqZWN0LCJjcmVhdGUiKSxYOT1VZWU7ZnVuY3Rpb24gWGooKXt0aGlzLl9fZGF0YV9fPVg5P1g5KG51bGwpOnt9LHRoaXMuc2l6ZT0wfXZhciBHZWU9WGo7ZnVuY3Rpb24gS2VlKHgpe3ZhciBtPXRoaXMuaGFzKHgpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t4XTtyZXR1cm4gdGhpcy5zaXplLT1tPzE6MCxtfXZhciBXZWU9S2VlLFllZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsWGVlPU9iamVjdC5wcm90b3R5cGUsUWVlPVhlZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBKZWUoeCl7dmFyIG09dGhpcy5fX2RhdGFfXztpZihYOSl7dmFyIGs9bVt4XTtyZXR1cm4gaz09PVllZT92b2lkIDA6a31yZXR1cm4gUWVlLmNhbGwobSx4KT9tW3hdOnZvaWQgMH12YXIgWmVlPUplZSxldGU9T2JqZWN0LnByb3RvdHlwZSx0dGU9ZXRlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIG50ZSh4KXt2YXIgbT10aGlzLl9fZGF0YV9fO3JldHVybiBYOT9tW3hdIT09dm9pZCAwOnR0ZS5jYWxsKG0seCl9dmFyIHJ0ZT1udGUsaXRlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBzdGUoeCxtKXt2YXIgaz10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHgpPzA6MSxrW3hdPVg5JiZtPT09dm9pZCAwP2l0ZTptLHRoaXN9dmFyIGF0ZT1zdGU7ZnVuY3Rpb24gczgoeCl7dmFyIG09LTEsaz14PT1udWxsPzA6eC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK208azspe3ZhciBTPXhbbV07dGhpcy5zZXQoU1swXSxTWzFdKX19czgucHJvdG90eXBlLmNsZWFyPUdlZSxzOC5wcm90b3R5cGUuZGVsZXRlPVdlZSxzOC5wcm90b3R5cGUuZ2V0PVplZSxzOC5wcm90b3R5cGUuaGFzPXJ0ZSxzOC5wcm90b3R5cGUuc2V0PWF0ZTt2YXIgUWo9czg7ZnVuY3Rpb24gb3RlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH12YXIgY3RlPW90ZTtmdW5jdGlvbiB1dGUoeCxtKXtyZXR1cm4geD09PW18fHghPT14JiZtIT09bX12YXIgSmo9dXRlO2Z1bmN0aW9uIGx0ZSh4LG0pe2Zvcih2YXIgaz14Lmxlbmd0aDtrLS07KWlmKEpqKHhba11bMF0sbSkpcmV0dXJuIGs7cmV0dXJuLTF9dmFyIFRTPWx0ZSxodGU9QXJyYXkucHJvdG90eXBlLGZ0ZT1odGUuc3BsaWNlO2Z1bmN0aW9uIGR0ZSh4KXt2YXIgbT10aGlzLl9fZGF0YV9fLGs9VFMobSx4KTtpZihrPDApcmV0dXJuITE7dmFyIFM9bS5sZW5ndGgtMTtyZXR1cm4gaz09Uz9tLnBvcCgpOmZ0ZS5jYWxsKG0saywxKSwtLXRoaXMuc2l6ZSwhMH12YXIgZ3RlPWR0ZTtmdW5jdGlvbiBwdGUoeCl7dmFyIG09dGhpcy5fX2RhdGFfXyxrPVRTKG0seCk7cmV0dXJuIGs8MD92b2lkIDA6bVtrXVsxXX12YXIgYnRlPXB0ZTtmdW5jdGlvbiBtdGUoeCl7cmV0dXJuIFRTKHRoaXMuX19kYXRhX18seCk+LTF9dmFyIHZ0ZT1tdGU7ZnVuY3Rpb24gd3RlKHgsbSl7dmFyIGs9dGhpcy5fX2RhdGFfXyxTPVRTKGsseCk7cmV0dXJuIFM8MD8oKyt0aGlzLnNpemUsay5wdXNoKFt4LG1dKSk6a1tTXVsxXT1tLHRoaXN9dmFyIHl0ZT13dGU7ZnVuY3Rpb24gYTgoeCl7dmFyIG09LTEsaz14PT1udWxsPzA6eC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK208azspe3ZhciBTPXhbbV07dGhpcy5zZXQoU1swXSxTWzFdKX19YTgucHJvdG90eXBlLmNsZWFyPWN0ZSxhOC5wcm90b3R5cGUuZGVsZXRlPWd0ZSxhOC5wcm90b3R5cGUuZ2V0PWJ0ZSxhOC5wcm90b3R5cGUuaGFzPXZ0ZSxhOC5wcm90b3R5cGUuc2V0PXl0ZTt2YXIgeHRlPWE4LGt0ZT1nSSgkbywiTWFwIiksRXRlPWt0ZTtmdW5jdGlvbiBUdGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBRaixtYXA6bmV3KEV0ZXx8eHRlKSxzdHJpbmc6bmV3IFFqfX12YXIgQ3RlPVR0ZTtmdW5jdGlvbiBTdGUoeCl7dmFyIG09dHlwZW9mIHg7cmV0dXJuIG09PSJzdHJpbmcifHxtPT0ibnVtYmVyInx8bT09InN5bWJvbCJ8fG09PSJib29sZWFuIj94IT09Il9fcHJvdG9fXyI6eD09PW51bGx9dmFyIF90ZT1TdGU7ZnVuY3Rpb24gQXRlKHgsbSl7dmFyIGs9eC5fX2RhdGFfXztyZXR1cm4gX3RlKG0pP2tbdHlwZW9mIG09PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06ay5tYXB9dmFyIENTPUF0ZTtmdW5jdGlvbiBMdGUoeCl7dmFyIG09Q1ModGhpcyx4KS5kZWxldGUoeCk7cmV0dXJuIHRoaXMuc2l6ZS09bT8xOjAsbX12YXIgTXRlPUx0ZTtmdW5jdGlvbiBEdGUoeCl7cmV0dXJuIENTKHRoaXMseCkuZ2V0KHgpfXZhciBJdGU9RHRlO2Z1bmN0aW9uIE90ZSh4KXtyZXR1cm4gQ1ModGhpcyx4KS5oYXMoeCl9dmFyIE50ZT1PdGU7ZnVuY3Rpb24gUHRlKHgsbSl7dmFyIGs9Q1ModGhpcyx4KSxTPWsuc2l6ZTtyZXR1cm4gay5zZXQoeCxtKSx0aGlzLnNpemUrPWsuc2l6ZT09Uz8wOjEsdGhpc312YXIgQnRlPVB0ZTtmdW5jdGlvbiBvOCh4KXt2YXIgbT0tMSxrPXg9PW51bGw/MDp4Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbTxrOyl7dmFyIFM9eFttXTt0aGlzLnNldChTWzBdLFNbMV0pfX1vOC5wcm90b3R5cGUuY2xlYXI9Q3RlLG84LnByb3RvdHlwZS5kZWxldGU9TXRlLG84LnByb3RvdHlwZS5nZXQ9SXRlLG84LnByb3RvdHlwZS5oYXM9TnRlLG84LnByb3RvdHlwZS5zZXQ9QnRlO3ZhciBaaj1vOCxGdGU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO2Z1bmN0aW9uIHBJKHgsbSl7aWYodHlwZW9mIHghPSJmdW5jdGlvbiJ8fG0hPW51bGwmJnR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRnRlKTt2YXIgaz1mdW5jdGlvbigpe3ZhciBTPWFyZ3VtZW50cyxNPW0/bS5hcHBseSh0aGlzLFMpOlNbMF0sTz1rLmNhY2hlO2lmKE8uaGFzKE0pKXJldHVybiBPLmdldChNKTt2YXIgTj14LmFwcGx5KHRoaXMsUyk7cmV0dXJuIGsuY2FjaGU9Ty5zZXQoTSxOKXx8TyxOfTtyZXR1cm4gay5jYWNoZT1uZXcocEkuQ2FjaGV8fFpqKSxrfXBJLkNhY2hlPVpqO3ZhciBSdGU9cEksanRlPTUwMDtmdW5jdGlvbiAkdGUoeCl7dmFyIG09UnRlKHgsZnVuY3Rpb24oUyl7cmV0dXJuIGsuc2l6ZT09PWp0ZSYmay5jbGVhcigpLFN9KSxrPW0uY2FjaGU7cmV0dXJuIG19dmFyIHp0ZT0kdGUscXRlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLEh0ZT0vXFwoXFwpPy9nLFZ0ZT16dGUoZnVuY3Rpb24oeCl7dmFyIG09W107cmV0dXJuIHguY2hhckNvZGVBdCgwKT09PTQ2JiZtLnB1c2goIiIpLHgucmVwbGFjZShxdGUsZnVuY3Rpb24oayxTLE0sTyl7bS5wdXNoKE0/Ty5yZXBsYWNlKEh0ZSwiJDEiKTpTfHxrKX0pLG19KSxlJD1WdGU7ZnVuY3Rpb24gVXRlKHgsbSl7Zm9yKHZhciBrPS0xLFM9eD09bnVsbD8wOngubGVuZ3RoLE09QXJyYXkoUyk7KytrPFM7KU1ba109bSh4W2tdLGsseCk7cmV0dXJuIE19dmFyIHQkPVV0ZSxHdGU9MS8wLG4kPUJjP0JjLnByb3RvdHlwZTp2b2lkIDAsciQ9biQ/biQudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIGkkKHgpe2lmKHR5cGVvZiB4PT0ic3RyaW5nIilyZXR1cm4geDtpZihrUyh4KSlyZXR1cm4gdCQoeCxpJCkrIiI7aWYoWnIoeCkpcmV0dXJuIHIkP3IkLmNhbGwoeCk6IiI7dmFyIG09eCsiIjtyZXR1cm4gbT09IjAiJiYxL3g9PS1HdGU/Ii0wIjptfXZhciBLdGU9aSQ7ZnVuY3Rpb24gV3RlKHgpe3JldHVybiB4PT1udWxsPyIiOkt0ZSh4KX12YXIgcyQ9V3RlO2Z1bmN0aW9uIFl0ZSh4LG0pe3JldHVybiBrUyh4KT94OkVlZSh4LG0pP1t4XTplJChzJCh4KSl9dmFyIGEkPVl0ZSxYdGU9MS8wO2Z1bmN0aW9uIFF0ZSh4KXtpZih0eXBlb2YgeD09InN0cmluZyJ8fFpyKHgpKXJldHVybiB4O3ZhciBtPXgrIiI7cmV0dXJuIG09PSIwIiYmMS94PT0tWHRlPyItMCI6bX12YXIgYkk9UXRlO2Z1bmN0aW9uIEp0ZSh4LG0pe209YSQobSx4KTtmb3IodmFyIGs9MCxTPW0ubGVuZ3RoO3ghPW51bGwmJms8UzspeD14W2JJKG1baysrXSldO3JldHVybiBrJiZrPT1TP3g6dm9pZCAwfXZhciBadGU9SnRlO2Z1bmN0aW9uIGVuZSh4LG0sayl7dmFyIFM9eD09bnVsbD92b2lkIDA6WnRlKHgsbSk7cmV0dXJuIFM9PT12b2lkIDA/azpTfXZhciB0bmU9ZW5lLG5uZT1mdW5jdGlvbigpe3RyeXt2YXIgeD1nSShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHgoe30sIiIse30pLHh9Y2F0Y2h7fX0oKSxvJD1ubmU7ZnVuY3Rpb24gcm5lKHgsbSxrKXttPT0iX19wcm90b19fIiYmbyQ/byQoeCxtLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTprLHdyaXRhYmxlOiEwfSk6eFttXT1rfXZhciBpbmU9cm5lLHNuZT1PYmplY3QucHJvdG90eXBlLHB3ZT1zbmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gYW5lKHgsbSxrKXt2YXIgUz14W21dOyghKHB3ZS5jYWxsKHgsbSkmJkpqKFMsaykpfHxrPT09dm9pZCAwJiYhKG0gaW4geCkpJiZpbmUoeCxtLGspfXZhciBvbmU9YW5lLGNuZT05MDA3MTk5MjU0NzQwOTkxLHVuZT0vXig/OjB8WzEtOV1cZCopJC87ZnVuY3Rpb24gbG5lKHgsbSl7dmFyIGs9dHlwZW9mIHg7cmV0dXJuIG09bT8/Y25lLCEhbSYmKGs9PSJudW1iZXIifHxrIT0ic3ltYm9sIiYmdW5lLnRlc3QoeCkpJiZ4Pi0xJiZ4JTE9PTAmJng8bX12YXIgaG5lPWxuZTtmdW5jdGlvbiBmbmUoeCxtLGssUyl7aWYoIUF0KHgpKXJldHVybiB4O209YSQobSx4KTtmb3IodmFyIE09LTEsTz1tLmxlbmd0aCxOPU8tMSwkPXg7JCE9bnVsbCYmKytNPE87KXt2YXIgSD1iSShtW01dKSxxPWs7aWYoSD09PSJfX3Byb3RvX18ifHxIPT09ImNvbnN0cnVjdG9yInx8SD09PSJwcm90b3R5cGUiKXJldHVybiB4O2lmKE0hPU4pe3ZhciBZPSRbSF07cT1TP1MoWSxILCQpOnZvaWQgMCxxPT09dm9pZCAwJiYocT1BdChZKT9ZOmhuZShtW00rMV0pP1tdOnt9KX1vbmUoJCxILHEpLCQ9JFtIXX1yZXR1cm4geH12YXIgZG5lPWZuZTtmdW5jdGlvbiBnbmUoeCxtLGspe3JldHVybiB4PT1udWxsP3g6ZG5lKHgsbSxrKX12YXIgcG5lPWduZTtmdW5jdGlvbiBibmUoeCxtKXt2YXIgaz0tMSxTPXgubGVuZ3RoO2ZvcihtfHwobT1BcnJheShTKSk7KytrPFM7KW1ba109eFtrXTtyZXR1cm4gbX12YXIgbW5lPWJuZTtmdW5jdGlvbiB2bmUoeCl7cmV0dXJuIGtTKHgpP3QkKHgsYkkpOlpyKHgpP1t4XTptbmUoZSQocyQoeCkpKX12YXIgd25lPXZuZSx5bmU9e2RhdGE6ZnVuY3Rpb24obSl7dmFyIGs9e2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITEsYWxsb3dHZXR0aW5nOiExLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsaW1tdXRhYmxlS2V5czp7fSx1cGRhdGVTdHlsZTohMSxiZWZvcmVHZXQ6ZnVuY3Rpb24oTSl7fSxiZWZvcmVTZXQ6ZnVuY3Rpb24oTSxPKXt9LG9uU2V0OmZ1bmN0aW9uKE0pe30sY2FuU2V0OmZ1bmN0aW9uKE0pe3JldHVybiEwfX07cmV0dXJuIG09eXQoe30sayxtKSxmdW5jdGlvbihNLE8pe3ZhciBOPW0sJD10aGlzLEg9JC5sZW5ndGghPT12b2lkIDAscT1IPyQ6WyRdLFk9SD8kWzBdOiQ7aWYoYmUoTSkpe3ZhciBaPU0uaW5kZXhPZigiLiIpIT09LTEsY2U9WiYmd25lKE0pO2lmKE4uYWxsb3dHZXR0aW5nJiZPPT09dm9pZCAwKXt2YXIgdmU7cmV0dXJuIFkmJihOLmJlZm9yZUdldChZKSxjZSYmWS5fcHJpdmF0ZVtOLmZpZWxkXVtNXT09PXZvaWQgMD92ZT10bmUoWS5fcHJpdmF0ZVtOLmZpZWxkXSxjZSk6dmU9WS5fcHJpdmF0ZVtOLmZpZWxkXVtNXSksdmV9ZWxzZSBpZihOLmFsbG93U2V0dGluZyYmTyE9PXZvaWQgMCl7dmFyIG1lPSFOLmltbXV0YWJsZUtleXNbTV07aWYobWUpe3ZhciBMZT1iKHt9LE0sTyk7Ti5iZWZvcmVTZXQoJCxMZSk7Zm9yKHZhciBfZT0wLEVlPXEubGVuZ3RoO19lPEVlO19lKyspe3ZhciBCZT1xW19lXTtOLmNhblNldChCZSkmJihjZSYmWS5fcHJpdmF0ZVtOLmZpZWxkXVtNXT09PXZvaWQgMD9wbmUoQmUuX3ByaXZhdGVbTi5maWVsZF0sY2UsTyk6QmUuX3ByaXZhdGVbTi5maWVsZF1bTV09Tyl9Ti51cGRhdGVTdHlsZSYmJC51cGRhdGVTdHlsZSgpLE4ub25TZXQoJCksTi5zZXR0aW5nVHJpZ2dlcnNFdmVudCYmJFtOLnRyaWdnZXJGbk5hbWVdKE4uc2V0dGluZ0V2ZW50KX19fWVsc2UgaWYoTi5hbGxvd1NldHRpbmcmJnNlKE0pKXt2YXIgUmU9TSxWZSxjdCxzdD1PYmplY3Qua2V5cyhSZSk7Ti5iZWZvcmVTZXQoJCxSZSk7Zm9yKHZhciBZZT0wO1llPHN0Lmxlbmd0aDtZZSsrKXtWZT1zdFtZZV0sY3Q9UmVbVmVdO3ZhciBtdD0hTi5pbW11dGFibGVLZXlzW1ZlXTtpZihtdClmb3IodmFyIEplPTA7SmU8cS5sZW5ndGg7SmUrKyl7dmFyIEx0PXFbSmVdO04uY2FuU2V0KEx0KSYmKEx0Ll9wcml2YXRlW04uZmllbGRdW1ZlXT1jdCl9fU4udXBkYXRlU3R5bGUmJiQudXBkYXRlU3R5bGUoKSxOLm9uU2V0KCQpLE4uc2V0dGluZ1RyaWdnZXJzRXZlbnQmJiRbTi50cmlnZ2VyRm5OYW1lXShOLnNldHRpbmdFdmVudCl9ZWxzZSBpZihOLmFsbG93QmluZGluZyYmYWUoTSkpe3ZhciBNdD1NOyQub24oTi5iaW5kaW5nRXZlbnQsTXQpfWVsc2UgaWYoTi5hbGxvd0dldHRpbmcmJk09PT12b2lkIDApe3ZhciB1dDtyZXR1cm4gWSYmKE4uYmVmb3JlR2V0KFkpLHV0PVkuX3ByaXZhdGVbTi5maWVsZF0pLHV0fXJldHVybiAkfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihtKXt2YXIgaz17ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITEsaW1tdXRhYmxlS2V5czp7fX07cmV0dXJuIG09eXQoe30sayxtKSxmdW5jdGlvbihNKXt2YXIgTz1tLE49dGhpcywkPU4ubGVuZ3RoIT09dm9pZCAwLEg9JD9OOltOXTtpZihiZShNKSl7Zm9yKHZhciBxPU0uc3BsaXQoL1xzKy8pLFk9cS5sZW5ndGgsWj0wO1o8WTtaKyspe3ZhciBjZT1xW1pdO2lmKCFTZShjZSkpe3ZhciB2ZT0hTy5pbW11dGFibGVLZXlzW2NlXTtpZih2ZSlmb3IodmFyIG1lPTAsTGU9SC5sZW5ndGg7bWU8TGU7bWUrKylIW21lXS5fcHJpdmF0ZVtPLmZpZWxkXVtjZV09dm9pZCAwfX1PLnRyaWdnZXJFdmVudCYmTltPLnRyaWdnZXJGbk5hbWVdKE8uZXZlbnQpfWVsc2UgaWYoTT09PXZvaWQgMCl7Zm9yKHZhciBfZT0wLEVlPUgubGVuZ3RoO19lPEVlO19lKyspZm9yKHZhciBCZT1IW19lXS5fcHJpdmF0ZVtPLmZpZWxkXSxSZT1PYmplY3Qua2V5cyhCZSksVmU9MDtWZTxSZS5sZW5ndGg7VmUrKyl7dmFyIGN0PVJlW1ZlXSxzdD0hTy5pbW11dGFibGVLZXlzW2N0XTtzdCYmKEJlW2N0XT12b2lkIDApfU8udHJpZ2dlckV2ZW50JiZOW08udHJpZ2dlckZuTmFtZV0oTy5ldmVudCl9cmV0dXJuIE59fX0seG5lPXtldmVudEFsaWFzZXNPbjpmdW5jdGlvbihtKXt2YXIgaz1tO2suYWRkTGlzdGVuZXI9ay5saXN0ZW49ay5iaW5kPWsub24say51bmxpc3Rlbj1rLnVuYmluZD1rLm9mZj1rLnJlbW92ZUxpc3RlbmVyLGsudHJpZ2dlcj1rLmVtaXQsay5wb249ay5wcm9taXNlT249ZnVuY3Rpb24oUyxNKXt2YXIgTz10aGlzLE49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBuZXcgaTgoZnVuY3Rpb24oJCxIKXt2YXIgcT1mdW5jdGlvbih2ZSl7Ty5vZmYuYXBwbHkoTyxaKSwkKHZlKX0sWT1OLmNvbmNhdChbcV0pLFo9WS5jb25jYXQoW10pO08ub24uYXBwbHkoTyxZKX0pfX19LGZ1PXt9O1t3ZWUseW5lLHhuZV0uZm9yRWFjaChmdW5jdGlvbih4KXt5dChmdSx4KX0pO3ZhciBrbmU9e2FuaW1hdGU6ZnUuYW5pbWF0ZSgpLGFuaW1hdGlvbjpmdS5hbmltYXRpb24oKSxhbmltYXRlZDpmdS5hbmltYXRlZCgpLGNsZWFyUXVldWU6ZnUuY2xlYXJRdWV1ZSgpLGRlbGF5OmZ1LmRlbGF5KCksZGVsYXlBbmltYXRpb246ZnUuZGVsYXlBbmltYXRpb24oKSxzdG9wOmZ1LnN0b3AoKX0sU1M9e2NsYXNzZXM6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztpZihtPT09dm9pZCAwKXt2YXIgUz1bXTtyZXR1cm4ga1swXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24obWUpe3JldHVybiBTLnB1c2gobWUpfSksU31lbHNlIG5lKG0pfHwobT0obXx8IiIpLm1hdGNoKC9cUysvZyl8fFtdKTtmb3IodmFyIE09W10sTz1uZXcgUTcobSksTj0wO048ay5sZW5ndGg7TisrKXtmb3IodmFyICQ9a1tOXSxIPSQuX3ByaXZhdGUscT1ILmNsYXNzZXMsWT0hMSxaPTA7WjxtLmxlbmd0aDtaKyspe3ZhciBjZT1tW1pdLHZlPXEuaGFzKGNlKTtpZighdmUpe1k9ITA7YnJlYWt9fVl8fChZPXEuc2l6ZSE9PW0ubGVuZ3RoKSxZJiYoSC5jbGFzc2VzPU8sTS5wdXNoKCQpKX1yZXR1cm4gTS5sZW5ndGg+MCYmdGhpcy5zcGF3bihNKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksa30sYWRkQ2xhc3M6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MobSwhMCl9LGhhc0NsYXNzOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXNbMF07cmV0dXJuIGshPW51bGwmJmsuX3ByaXZhdGUuY2xhc3Nlcy5oYXMobSl9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKG0sayl7bmUobSl8fChtPW0ubWF0Y2goL1xTKy9nKXx8W10pO2Zvcih2YXIgUz10aGlzLE09az09PXZvaWQgMCxPPVtdLE49MCwkPVMubGVuZ3RoO048JDtOKyspZm9yKHZhciBIPVNbTl0scT1ILl9wcml2YXRlLmNsYXNzZXMsWT0hMSxaPTA7WjxtLmxlbmd0aDtaKyspe3ZhciBjZT1tW1pdLHZlPXEuaGFzKGNlKSxtZT0hMTtrfHxNJiYhdmU/KHEuYWRkKGNlKSxtZT0hMCk6KCFrfHxNJiZ2ZSkmJihxLmRlbGV0ZShjZSksbWU9ITApLCFZJiZtZSYmKE8ucHVzaChIKSxZPSEwKX1yZXR1cm4gTy5sZW5ndGg+MCYmdGhpcy5zcGF3bihPKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksU30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MobSwhMSl9LGZsYXNoQ2xhc3M6ZnVuY3Rpb24obSxrKXt2YXIgUz10aGlzO2lmKGs9PW51bGwpaz0yNTA7ZWxzZSBpZihrPT09MClyZXR1cm4gUztyZXR1cm4gUy5hZGRDbGFzcyhtKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Uy5yZW1vdmVDbGFzcyhtKX0sayksU319O1NTLmNsYXNzTmFtZT1TUy5jbGFzc05hbWVzPVNTLmNsYXNzZXM7dmFyIFJjPXttZXRhQ2hhcjoiW1xcIVxcXCJcXCNcXCRcXCVcXCZcXCdcXChcXClcXCpcXCtcXCxcXC5cXC9cXDpcXDtcXDxcXD1cXD5cXD9cXEBcXFtcXF1cXF5cXGBcXHtcXHxcXH1cXH5dIixjb21wYXJhdG9yT3A6Ij18XFwhPXw+fD49fDx8PD18XFwkPXxcXF49fFxcKj0iLGJvb2xPcDoiXFw/fFxcIXxcXF4iLHN0cmluZzpgIig/OlxcXFwifFteIl0pKiJ8Jyg/OlxcXFwnfFteJ10pKidgLG51bWJlcjpsbixtZXRhOiJkZWdyZWV8aW5kZWdyZWV8b3V0ZGVncmVlIixzZXBhcmF0b3I6IlxccyosXFxzKiIsZGVzY2VuZGFudDoiXFxzKyIsY2hpbGQ6Ilxccys+XFxzKyIsc3ViamVjdDoiXFwkIixncm91cDoibm9kZXxlZGdlfFxcKiIsZGlyZWN0ZWRFZGdlOiJcXHMrLT5cXHMrIix1bmRpcmVjdGVkRWRnZToiXFxzKzwtPlxccysifTtSYy52YXJpYWJsZT0iKD86W1xcdy0uXXwoPzpcXFxcIitSYy5tZXRhQ2hhcisiKSkrIixSYy5jbGFzc05hbWU9Iig/OltcXHctXXwoPzpcXFxcIitSYy5tZXRhQ2hhcisiKSkrIixSYy52YWx1ZT1SYy5zdHJpbmcrInwiK1JjLm51bWJlcixSYy5pZD1SYy52YXJpYWJsZSxmdW5jdGlvbigpe3ZhciB4LG0saztmb3IoeD1SYy5jb21wYXJhdG9yT3Auc3BsaXQoInwiKSxrPTA7azx4Lmxlbmd0aDtrKyspbT14W2tdLFJjLmNvbXBhcmF0b3JPcCs9InxAIittO2Zvcih4PVJjLmNvbXBhcmF0b3JPcC5zcGxpdCgifCIpLGs9MDtrPHgubGVuZ3RoO2srKyltPXhba10sIShtLmluZGV4T2YoIiEiKT49MCkmJm0hPT0iPSImJihSYy5jb21wYXJhdG9yT3ArPSJ8XFwhIittKX0oKTt2YXIgUHU9ZnVuY3Rpb24oKXtyZXR1cm57Y2hlY2tzOltdfX0saHM9e0dST1VQOjAsQ09MTEVDVElPTjoxLEZJTFRFUjoyLERBVEFfQ09NUEFSRTozLERBVEFfRVhJU1Q6NCxEQVRBX0JPT0w6NSxNRVRBX0NPTVBBUkU6NixTVEFURTo3LElEOjgsQ0xBU1M6OSxVTkRJUkVDVEVEX0VER0U6MTAsRElSRUNURURfRURHRToxMSxOT0RFX1NPVVJDRToxMixOT0RFX1RBUkdFVDoxMyxOT0RFX05FSUdIQk9SOjE0LENISUxEOjE1LERFU0NFTkRBTlQ6MTYsUEFSRU5UOjE3LEFOQ0VTVE9SOjE4LENPTVBPVU5EX1NQTElUOjE5LFRSVUU6MjB9LG1JPVt7c2VsZWN0b3I6IjpzZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6dW5zZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4hbS5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6c2VsZWN0YWJsZSIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5zZWxlY3RhYmxlKCl9fSx7c2VsZWN0b3I6Ijp1bnNlbGVjdGFibGUiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIW0uc2VsZWN0YWJsZSgpfX0se3NlbGVjdG9yOiI6bG9ja2VkIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLmxvY2tlZCgpfX0se3NlbGVjdG9yOiI6dW5sb2NrZWQiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIW0ubG9ja2VkKCl9fSx7c2VsZWN0b3I6Ijp2aXNpYmxlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLnZpc2libGUoKX19LHtzZWxlY3RvcjoiOmhpZGRlbiIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4hbS52aXNpYmxlKCl9fSx7c2VsZWN0b3I6Ijp0cmFuc3BhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS50cmFuc3BhcmVudCgpfX0se3NlbGVjdG9yOiI6Z3JhYmJlZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5ncmFiYmVkKCl9fSx7c2VsZWN0b3I6IjpmcmVlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiFtLmdyYWJiZWQoKX19LHtzZWxlY3RvcjoiOnJlbW92ZWQiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVtb3ZlZCgpfX0se3NlbGVjdG9yOiI6aW5zaWRlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiFtLnJlbW92ZWQoKX19LHtzZWxlY3RvcjoiOmdyYWJiYWJsZSIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5ncmFiYmFibGUoKX19LHtzZWxlY3RvcjoiOnVuZ3JhYmJhYmxlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiFtLmdyYWJiYWJsZSgpfX0se3NlbGVjdG9yOiI6YW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0uYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnVuYW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIW0uYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnBhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc1BhcmVudCgpfX0se3NlbGVjdG9yOiI6Y2hpbGRsZXNzIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLmlzQ2hpbGRsZXNzKCl9fSx7c2VsZWN0b3I6IjpjaGlsZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6IjpvcnBoYW4iLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0uaXNPcnBoYW4oKX19LHtzZWxlY3RvcjoiOm5vbm9ycGhhbiIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6Ijpjb21wb3VuZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc05vZGUoKT9tLmlzUGFyZW50KCk6bS5zb3VyY2UoKS5pc1BhcmVudCgpfHxtLnRhcmdldCgpLmlzUGFyZW50KCl9fSx7c2VsZWN0b3I6Ijpsb29wIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLmlzTG9vcCgpfX0se3NlbGVjdG9yOiI6c2ltcGxlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLmlzU2ltcGxlKCl9fSx7c2VsZWN0b3I6IjphY3RpdmUiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0uYWN0aXZlKCl9fSx7c2VsZWN0b3I6IjppbmFjdGl2ZSIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4hbS5hY3RpdmUoKX19LHtzZWxlY3RvcjoiOmJhY2tncm91bmRpbmciLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0uYmFja2dyb3VuZGluZygpfX0se3NlbGVjdG9yOiI6bm9uYmFja2dyb3VuZGluZyIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4hbS5iYWNrZ3JvdW5kaW5nKCl9fV0uc29ydChmdW5jdGlvbih4LG0pe3JldHVybiB6cih4LnNlbGVjdG9yLG0uc2VsZWN0b3IpfSksRW5lPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PXt9LG0saz0wO2s8bUkubGVuZ3RoO2srKyltPW1JW2tdLHhbbS5zZWxlY3Rvcl09bS5tYXRjaGVzO3JldHVybiB4fSgpLFRuZT1mdW5jdGlvbihtLGspe3JldHVybiBFbmVbbV0oayl9LENuZT0iKCIrbUkubWFwKGZ1bmN0aW9uKHgpe3JldHVybiB4LnNlbGVjdG9yfSkuam9pbigifCIpKyIpIixjOD1mdW5jdGlvbihtKXtyZXR1cm4gbS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFwoIitSYy5tZXRhQ2hhcisiKSIsImciKSxmdW5jdGlvbihrLFMpe3JldHVybiBTfSl9LHltPWZ1bmN0aW9uKG0sayxTKXttW20ubGVuZ3RoLTFdPVN9LFE5PVt7bmFtZToiZ3JvdXAiLHF1ZXJ5OiEwLHJlZ2V4OiIoIitSYy5ncm91cCsiKSIscG9wdWxhdGU6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPXkoUywxKSxPPU1bMF07ay5jaGVja3MucHVzaCh7dHlwZTpocy5HUk9VUCx2YWx1ZTpPPT09IioiP086TysicyJ9KX19LHtuYW1lOiJzdGF0ZSIscXVlcnk6ITAscmVnZXg6Q25lLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT15KFMsMSksTz1NWzBdO2suY2hlY2tzLnB1c2goe3R5cGU6aHMuU1RBVEUsdmFsdWU6T30pfX0se25hbWU6ImlkIixxdWVyeTohMCxyZWdleDoiXFwjKCIrUmMuaWQrIikiLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT15KFMsMSksTz1NWzBdO2suY2hlY2tzLnB1c2goe3R5cGU6aHMuSUQsdmFsdWU6YzgoTyl9KX19LHtuYW1lOiJjbGFzc05hbWUiLHF1ZXJ5OiEwLHJlZ2V4OiJcXC4oIitSYy5jbGFzc05hbWUrIikiLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT15KFMsMSksTz1NWzBdO2suY2hlY2tzLnB1c2goe3R5cGU6aHMuQ0xBU1MsdmFsdWU6YzgoTyl9KX19LHtuYW1lOiJkYXRhRXhpc3RzIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK1JjLnZhcmlhYmxlKyIpXFxzKlxcXSIscG9wdWxhdGU6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPXkoUywxKSxPPU1bMF07ay5jaGVja3MucHVzaCh7dHlwZTpocy5EQVRBX0VYSVNULGZpZWxkOmM4KE8pfSl9fSx7bmFtZToiZGF0YUNvbXBhcmUiLHF1ZXJ5OiEwLHJlZ2V4OiJcXFtcXHMqKCIrUmMudmFyaWFibGUrIilcXHMqKCIrUmMuY29tcGFyYXRvck9wKyIpXFxzKigiK1JjLnZhbHVlKyIpXFxzKlxcXSIscG9wdWxhdGU6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPXkoUywzKSxPPU1bMF0sTj1NWzFdLCQ9TVsyXSxIPW5ldyBSZWdFeHAoIl4iK1JjLnN0cmluZysiJCIpLmV4ZWMoJCkhPW51bGw7SD8kPSQuc3Vic3RyaW5nKDEsJC5sZW5ndGgtMSk6JD1wYXJzZUZsb2F0KCQpLGsuY2hlY2tzLnB1c2goe3R5cGU6aHMuREFUQV9DT01QQVJFLGZpZWxkOmM4KE8pLG9wZXJhdG9yOk4sdmFsdWU6JH0pfX0se25hbWU6ImRhdGFCb29sIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK1JjLmJvb2xPcCsiKVxccyooIitSYy52YXJpYWJsZSsiKVxccypcXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT15KFMsMiksTz1NWzBdLE49TVsxXTtrLmNoZWNrcy5wdXNoKHt0eXBlOmhzLkRBVEFfQk9PTCxmaWVsZDpjOChOKSxvcGVyYXRvcjpPfSl9fSx7bmFtZToibWV0YUNvbXBhcmUiLHF1ZXJ5OiEwLHJlZ2V4OiJcXFtcXFtcXHMqKCIrUmMubWV0YSsiKVxccyooIitSYy5jb21wYXJhdG9yT3ArIilcXHMqKCIrUmMubnVtYmVyKyIpXFxzKlxcXVxcXSIscG9wdWxhdGU6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPXkoUywzKSxPPU1bMF0sTj1NWzFdLCQ9TVsyXTtrLmNoZWNrcy5wdXNoKHt0eXBlOmhzLk1FVEFfQ09NUEFSRSxmaWVsZDpjOChPKSxvcGVyYXRvcjpOLHZhbHVlOnBhcnNlRmxvYXQoJCl9KX19LHtuYW1lOiJuZXh0UXVlcnkiLHNlcGFyYXRvcjohMCxyZWdleDpSYy5zZXBhcmF0b3IscG9wdWxhdGU6ZnVuY3Rpb24obSxrKXt2YXIgUz1tLmN1cnJlbnRTdWJqZWN0LE09bS5lZGdlQ291bnQsTz1tLmNvbXBvdW5kQ291bnQsTj1tW20ubGVuZ3RoLTFdO1MhPW51bGwmJihOLnN1YmplY3Q9UyxtLmN1cnJlbnRTdWJqZWN0PW51bGwpLE4uZWRnZUNvdW50PU0sTi5jb21wb3VuZENvdW50PU8sbS5lZGdlQ291bnQ9MCxtLmNvbXBvdW5kQ291bnQ9MDt2YXIgJD1tW20ubGVuZ3RoKytdPVB1KCk7cmV0dXJuICR9fSx7bmFtZToiZGlyZWN0ZWRFZGdlIixzZXBhcmF0b3I6ITAscmVnZXg6UmMuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayl7aWYobS5jdXJyZW50U3ViamVjdD09bnVsbCl7dmFyIFM9UHUoKSxNPWssTz1QdSgpO3JldHVybiBTLmNoZWNrcy5wdXNoKHt0eXBlOmhzLkRJUkVDVEVEX0VER0Usc291cmNlOk0sdGFyZ2V0Ok99KSx5bShtLGssUyksbS5lZGdlQ291bnQrKyxPfWVsc2V7dmFyIE49UHUoKSwkPWssSD1QdSgpO3JldHVybiBOLmNoZWNrcy5wdXNoKHt0eXBlOmhzLk5PREVfU09VUkNFLHNvdXJjZTokLHRhcmdldDpIfSkseW0obSxrLE4pLG0uZWRnZUNvdW50KyssSH19fSx7bmFtZToidW5kaXJlY3RlZEVkZ2UiLHNlcGFyYXRvcjohMCxyZWdleDpSYy51bmRpcmVjdGVkRWRnZSxwb3B1bGF0ZTpmdW5jdGlvbihtLGspe2lmKG0uY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBTPVB1KCksTT1rLE89UHUoKTtyZXR1cm4gUy5jaGVja3MucHVzaCh7dHlwZTpocy5VTkRJUkVDVEVEX0VER0Usbm9kZXM6W00sT119KSx5bShtLGssUyksbS5lZGdlQ291bnQrKyxPfWVsc2V7dmFyIE49UHUoKSwkPWssSD1QdSgpO3JldHVybiBOLmNoZWNrcy5wdXNoKHt0eXBlOmhzLk5PREVfTkVJR0hCT1Isbm9kZTokLG5laWdoYm9yOkh9KSx5bShtLGssTiksSH19fSx7bmFtZToiY2hpbGQiLHNlcGFyYXRvcjohMCxyZWdleDpSYy5jaGlsZCxwb3B1bGF0ZTpmdW5jdGlvbihtLGspe2lmKG0uY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBTPVB1KCksTT1QdSgpLE89bVttLmxlbmd0aC0xXTtyZXR1cm4gUy5jaGVja3MucHVzaCh7dHlwZTpocy5DSElMRCxwYXJlbnQ6TyxjaGlsZDpNfSkseW0obSxrLFMpLG0uY29tcG91bmRDb3VudCsrLE19ZWxzZSBpZihtLmN1cnJlbnRTdWJqZWN0PT09ayl7dmFyIE49UHUoKSwkPW1bbS5sZW5ndGgtMV0sSD1QdSgpLHE9UHUoKSxZPVB1KCksWj1QdSgpO3JldHVybiBOLmNoZWNrcy5wdXNoKHt0eXBlOmhzLkNPTVBPVU5EX1NQTElULGxlZnQ6JCxyaWdodDpILHN1YmplY3Q6cX0pLHEuY2hlY2tzPWsuY2hlY2tzLGsuY2hlY2tzPVt7dHlwZTpocy5UUlVFfV0sWi5jaGVja3MucHVzaCh7dHlwZTpocy5UUlVFfSksSC5jaGVja3MucHVzaCh7dHlwZTpocy5QQVJFTlQscGFyZW50OlosY2hpbGQ6WX0pLHltKG0sJCxOKSxtLmN1cnJlbnRTdWJqZWN0PXEsbS5jb21wb3VuZENvdW50KyssWX1lbHNle3ZhciBjZT1QdSgpLHZlPVB1KCksbWU9W3t0eXBlOmhzLlBBUkVOVCxwYXJlbnQ6Y2UsY2hpbGQ6dmV9XTtyZXR1cm4gY2UuY2hlY2tzPWsuY2hlY2tzLGsuY2hlY2tzPW1lLG0uY29tcG91bmRDb3VudCsrLHZlfX19LHtuYW1lOiJkZXNjZW5kYW50IixzZXBhcmF0b3I6ITAscmVnZXg6UmMuZGVzY2VuZGFudCxwb3B1bGF0ZTpmdW5jdGlvbihtLGspe2lmKG0uY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBTPVB1KCksTT1QdSgpLE89bVttLmxlbmd0aC0xXTtyZXR1cm4gUy5jaGVja3MucHVzaCh7dHlwZTpocy5ERVNDRU5EQU5ULGFuY2VzdG9yOk8sZGVzY2VuZGFudDpNfSkseW0obSxrLFMpLG0uY29tcG91bmRDb3VudCsrLE19ZWxzZSBpZihtLmN1cnJlbnRTdWJqZWN0PT09ayl7dmFyIE49UHUoKSwkPW1bbS5sZW5ndGgtMV0sSD1QdSgpLHE9UHUoKSxZPVB1KCksWj1QdSgpO3JldHVybiBOLmNoZWNrcy5wdXNoKHt0eXBlOmhzLkNPTVBPVU5EX1NQTElULGxlZnQ6JCxyaWdodDpILHN1YmplY3Q6cX0pLHEuY2hlY2tzPWsuY2hlY2tzLGsuY2hlY2tzPVt7dHlwZTpocy5UUlVFfV0sWi5jaGVja3MucHVzaCh7dHlwZTpocy5UUlVFfSksSC5jaGVja3MucHVzaCh7dHlwZTpocy5BTkNFU1RPUixhbmNlc3RvcjpaLGRlc2NlbmRhbnQ6WX0pLHltKG0sJCxOKSxtLmN1cnJlbnRTdWJqZWN0PXEsbS5jb21wb3VuZENvdW50KyssWX1lbHNle3ZhciBjZT1QdSgpLHZlPVB1KCksbWU9W3t0eXBlOmhzLkFOQ0VTVE9SLGFuY2VzdG9yOmNlLGRlc2NlbmRhbnQ6dmV9XTtyZXR1cm4gY2UuY2hlY2tzPWsuY2hlY2tzLGsuY2hlY2tzPW1lLG0uY29tcG91bmRDb3VudCsrLHZlfX19LHtuYW1lOiJzdWJqZWN0Iixtb2RpZmllcjohMCxyZWdleDpSYy5zdWJqZWN0LHBvcHVsYXRlOmZ1bmN0aW9uKG0sayl7aWYobS5jdXJyZW50U3ViamVjdCE9bnVsbCYmbS5jdXJyZW50U3ViamVjdCE9PWspcmV0dXJuIGh1KCJSZWRlZmluaXRpb24gb2Ygc3ViamVjdCBpbiBzZWxlY3RvciBgIittLnRvU3RyaW5nKCkrImAiKSwhMTttLmN1cnJlbnRTdWJqZWN0PWs7dmFyIFM9bVttLmxlbmd0aC0xXSxNPVMuY2hlY2tzWzBdLE89TT09bnVsbD9udWxsOk0udHlwZTtPPT09aHMuRElSRUNURURfRURHRT9NLnR5cGU9aHMuTk9ERV9UQVJHRVQ6Tz09PWhzLlVORElSRUNURURfRURHRSYmKE0udHlwZT1ocy5OT0RFX05FSUdIQk9SLE0ubm9kZT1NLm5vZGVzWzFdLE0ubmVpZ2hib3I9TS5ub2Rlc1swXSxNLm5vZGVzPW51bGwpfX1dO1E5LmZvckVhY2goZnVuY3Rpb24oeCl7cmV0dXJuIHgucmVnZXhPYmo9bmV3IFJlZ0V4cCgiXiIreC5yZWdleCl9KTt2YXIgU25lPWZ1bmN0aW9uKG0pe2Zvcih2YXIgayxTLE0sTz0wO088UTkubGVuZ3RoO08rKyl7dmFyIE49UTlbT10sJD1OLm5hbWUsSD1tLm1hdGNoKE4ucmVnZXhPYmopO2lmKEghPW51bGwpe1M9SCxrPU4sTT0kO3ZhciBxPUhbMF07bT1tLnN1YnN0cmluZyhxLmxlbmd0aCk7YnJlYWt9fXJldHVybntleHByOmssbWF0Y2g6UyxuYW1lOk0scmVtYWluaW5nOm19fSx2ST1mdW5jdGlvbihtKXt2YXIgaz1tLm1hdGNoKC9eXHMrLyk7aWYoayl7dmFyIFM9a1swXTttPW0uc3Vic3RyaW5nKFMubGVuZ3RoKX1yZXR1cm4gbX0sX25lPWZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMsUz1rLmlucHV0VGV4dD1tLE09a1swXT1QdSgpO2ZvcihrLmxlbmd0aD0xLFM9dkkoUyk7Oyl7dmFyIE89U25lKFMpO2lmKE8uZXhwcj09bnVsbClyZXR1cm4gaHUoIlRoZSBzZWxlY3RvciBgIittKyJgaXMgaW52YWxpZCIpLCExO3ZhciBOPU8ubWF0Y2guc2xpY2UoMSksJD1PLmV4cHIucG9wdWxhdGUoayxNLE4pO2lmKCQ9PT0hMSlyZXR1cm4hMTtpZigkIT1udWxsJiYoTT0kKSxTPU8ucmVtYWluaW5nLFMubWF0Y2goL15ccyokLykpYnJlYWt9dmFyIEg9a1trLmxlbmd0aC0xXTtrLmN1cnJlbnRTdWJqZWN0IT1udWxsJiYoSC5zdWJqZWN0PWsuY3VycmVudFN1YmplY3QpLEguZWRnZUNvdW50PWsuZWRnZUNvdW50LEguY29tcG91bmRDb3VudD1rLmNvbXBvdW5kQ291bnQ7Zm9yKHZhciBxPTA7cTxrLmxlbmd0aDtxKyspe3ZhciBZPWtbcV07aWYoWS5jb21wb3VuZENvdW50PjAmJlkuZWRnZUNvdW50PjApcmV0dXJuIGh1KCJUaGUgc2VsZWN0b3IgYCIrbSsiYCBpcyBpbnZhbGlkIGJlY2F1c2UgaXQgdXNlcyBib3RoIGEgY29tcG91bmQgc2VsZWN0b3IgYW5kIGFuIGVkZ2Ugc2VsZWN0b3IiKSwhMTtpZihZLmVkZ2VDb3VudD4xKXJldHVybiBodSgiVGhlIHNlbGVjdG9yIGAiK20rImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgbXVsdGlwbGUgZWRnZSBzZWxlY3RvcnMiKSwhMTtZLmVkZ2VDb3VudD09PTEmJmh1KCJUaGUgc2VsZWN0b3IgYCIrbSsiYCBpcyBkZXByZWNhdGVkLiAgRWRnZSBzZWxlY3RvcnMgZG8gbm90IHRha2UgZWZmZWN0IG9uIGNoYW5nZXMgdG8gc291cmNlIGFuZCB0YXJnZXQgbm9kZXMgYWZ0ZXIgYW4gZWRnZSBpcyBhZGRlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICBVc2UgYSBjbGFzcyBvciBkYXRhIHNlbGVjdG9yIG9uIGVkZ2VzIGluc3RlYWQsIHVwZGF0aW5nIHRoZSBjbGFzcyBvciBkYXRhIG9mIGFuIGVkZ2Ugd2hlbiB5b3VyIGFwcCBkZXRlY3RzIGEgY2hhbmdlIGluIHNvdXJjZSBvciB0YXJnZXQgbm9kZXMuIil9cmV0dXJuITB9LEFuZT1mdW5jdGlvbigpe2lmKHRoaXMudG9TdHJpbmdDYWNoZSE9bnVsbClyZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlO2Zvcih2YXIgbT1mdW5jdGlvbihZKXtyZXR1cm4gWT8/IiJ9LGs9ZnVuY3Rpb24oWSl7cmV0dXJuIGJlKFkpPyciJytZKyciJzptKFkpfSxTPWZ1bmN0aW9uKFkpe3JldHVybiIgIitZKyIgIn0sTT1mdW5jdGlvbihZLFope3ZhciBjZT1ZLnR5cGUsdmU9WS52YWx1ZTtzd2l0Y2goY2Upe2Nhc2UgaHMuR1JPVVA6e3ZhciBtZT1tKHZlKTtyZXR1cm4gbWUuc3Vic3RyaW5nKDAsbWUubGVuZ3RoLTEpfWNhc2UgaHMuREFUQV9DT01QQVJFOnt2YXIgTGU9WS5maWVsZCxfZT1ZLm9wZXJhdG9yO3JldHVybiJbIitMZStTKG0oX2UpKStrKHZlKSsiXSJ9Y2FzZSBocy5EQVRBX0JPT0w6e3ZhciBFZT1ZLm9wZXJhdG9yLEJlPVkuZmllbGQ7cmV0dXJuIlsiK20oRWUpK0JlKyJdIn1jYXNlIGhzLkRBVEFfRVhJU1Q6e3ZhciBSZT1ZLmZpZWxkO3JldHVybiJbIitSZSsiXSJ9Y2FzZSBocy5NRVRBX0NPTVBBUkU6e3ZhciBWZT1ZLm9wZXJhdG9yLGN0PVkuZmllbGQ7cmV0dXJuIltbIitjdCtTKG0oVmUpKStrKHZlKSsiXV0ifWNhc2UgaHMuU1RBVEU6cmV0dXJuIHZlO2Nhc2UgaHMuSUQ6cmV0dXJuIiMiK3ZlO2Nhc2UgaHMuQ0xBU1M6cmV0dXJuIi4iK3ZlO2Nhc2UgaHMuUEFSRU5UOmNhc2UgaHMuQ0hJTEQ6cmV0dXJuIE8oWS5wYXJlbnQsWikrUygiPiIpK08oWS5jaGlsZCxaKTtjYXNlIGhzLkFOQ0VTVE9SOmNhc2UgaHMuREVTQ0VOREFOVDpyZXR1cm4gTyhZLmFuY2VzdG9yLFopKyIgIitPKFkuZGVzY2VuZGFudCxaKTtjYXNlIGhzLkNPTVBPVU5EX1NQTElUOnt2YXIgc3Q9TyhZLmxlZnQsWiksWWU9TyhZLnN1YmplY3QsWiksbXQ9TyhZLnJpZ2h0LFopO3JldHVybiBzdCsoc3QubGVuZ3RoPjA/IiAiOiIiKStZZSttdH1jYXNlIGhzLlRSVUU6cmV0dXJuIiJ9fSxPPWZ1bmN0aW9uKFksWil7cmV0dXJuIFkuY2hlY2tzLnJlZHVjZShmdW5jdGlvbihjZSx2ZSxtZSl7cmV0dXJuIGNlKyhaPT09WSYmbWU9PT0wPyIkIjoiIikrTSh2ZSxaKX0sIiIpfSxOPSIiLCQ9MDskPHRoaXMubGVuZ3RoOyQrKyl7dmFyIEg9dGhpc1skXTtOKz1PKEgsSC5zdWJqZWN0KSx0aGlzLmxlbmd0aD4xJiYkPHRoaXMubGVuZ3RoLTEmJihOKz0iLCAiKX1yZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlPU4sTn0sTG5lPXtwYXJzZTpfbmUsdG9TdHJpbmc6QW5lfSxjJD1mdW5jdGlvbihtLGssUyl7dmFyIE0sTz1iZShtKSxOPVgobSksJD1iZShTKSxILHEsWT0hMSxaPSExLGNlPSExO3N3aXRjaChrLmluZGV4T2YoIiEiKT49MCYmKGs9ay5yZXBsYWNlKCIhIiwiIiksWj0hMCksay5pbmRleE9mKCJAIik+PTAmJihrPWsucmVwbGFjZSgiQCIsIiIpLFk9ITApLChPfHwkfHxZKSYmKEg9IU8mJiFOPyIiOiIiK20scT0iIitTKSxZJiYobT1IPUgudG9Mb3dlckNhc2UoKSxTPXE9cS50b0xvd2VyQ2FzZSgpKSxrKXtjYXNlIio9IjpNPUguaW5kZXhPZihxKT49MDticmVhaztjYXNlIiQ9IjpNPUguaW5kZXhPZihxLEgubGVuZ3RoLXEubGVuZ3RoKT49MDticmVhaztjYXNlIl49IjpNPUguaW5kZXhPZihxKT09PTA7YnJlYWs7Y2FzZSI9IjpNPW09PT1TO2JyZWFrO2Nhc2UiPiI6Y2U9ITAsTT1tPlM7YnJlYWs7Y2FzZSI+PSI6Y2U9ITAsTT1tPj1TO2JyZWFrO2Nhc2UiPCI6Y2U9ITAsTT1tPFM7YnJlYWs7Y2FzZSI8PSI6Y2U9ITAsTT1tPD1TO2JyZWFrO2RlZmF1bHQ6TT0hMTticmVha31yZXR1cm4gWiYmKG0hPW51bGx8fCFjZSkmJihNPSFNKSxNfSxNbmU9ZnVuY3Rpb24obSxrKXtzd2l0Y2goayl7Y2FzZSI/IjpyZXR1cm4hIW07Y2FzZSIhIjpyZXR1cm4hbTtjYXNlIl4iOnJldHVybiBtPT09dm9pZCAwfX0sRG5lPWZ1bmN0aW9uKG0pe3JldHVybiBtIT09dm9pZCAwfSx3ST1mdW5jdGlvbihtLGspe3JldHVybiBtLmRhdGEoayl9LEluZT1mdW5jdGlvbihtLGspe3JldHVybiBtW2tdKCl9LHVoPVtdLGdsPWZ1bmN0aW9uKG0sayl7cmV0dXJuIG0uY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uKFMpe3JldHVybiB1aFtTLnR5cGVdKFMsayl9KX07dWhbaHMuR1JPVVBdPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC52YWx1ZTtyZXR1cm4gaz09PSIqInx8az09PW0uZ3JvdXAoKX0sdWhbaHMuU1RBVEVdPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC52YWx1ZTtyZXR1cm4gVG5lKGssbSl9LHVoW2hzLklEXT1mdW5jdGlvbih4LG0pe3ZhciBrPXgudmFsdWU7cmV0dXJuIG0uaWQoKT09PWt9LHVoW2hzLkNMQVNTXT1mdW5jdGlvbih4LG0pe3ZhciBrPXgudmFsdWU7cmV0dXJuIG0uaGFzQ2xhc3Moayl9LHVoW2hzLk1FVEFfQ09NUEFSRV09ZnVuY3Rpb24oeCxtKXt2YXIgaz14LmZpZWxkLFM9eC5vcGVyYXRvcixNPXgudmFsdWU7cmV0dXJuIGMkKEluZShtLGspLFMsTSl9LHVoW2hzLkRBVEFfQ09NUEFSRV09ZnVuY3Rpb24oeCxtKXt2YXIgaz14LmZpZWxkLFM9eC5vcGVyYXRvcixNPXgudmFsdWU7cmV0dXJuIGMkKHdJKG0sayksUyxNKX0sdWhbaHMuREFUQV9CT09MXT1mdW5jdGlvbih4LG0pe3ZhciBrPXguZmllbGQsUz14Lm9wZXJhdG9yO3JldHVybiBNbmUod0kobSxrKSxTKX0sdWhbaHMuREFUQV9FWElTVF09ZnVuY3Rpb24oeCxtKXt2YXIgaz14LmZpZWxkO3JldHVybiB4Lm9wZXJhdG9yLERuZSh3SShtLGspKX0sdWhbaHMuVU5ESVJFQ1RFRF9FREdFXT1mdW5jdGlvbih4LG0pe3ZhciBrPXgubm9kZXNbMF0sUz14Lm5vZGVzWzFdLE09bS5zb3VyY2UoKSxPPW0udGFyZ2V0KCk7cmV0dXJuIGdsKGssTSkmJmdsKFMsTyl8fGdsKFMsTSkmJmdsKGssTyl9LHVoW2hzLk5PREVfTkVJR0hCT1JdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHgubm9kZSxtKSYmbS5uZWlnaGJvcmhvb2QoKS5zb21lKGZ1bmN0aW9uKGspe3JldHVybiBrLmlzTm9kZSgpJiZnbCh4Lm5laWdoYm9yLGspfSl9LHVoW2hzLkRJUkVDVEVEX0VER0VdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHguc291cmNlLG0uc291cmNlKCkpJiZnbCh4LnRhcmdldCxtLnRhcmdldCgpKX0sdWhbaHMuTk9ERV9TT1VSQ0VdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHguc291cmNlLG0pJiZtLm91dGdvZXJzKCkuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gay5pc05vZGUoKSYmZ2woeC50YXJnZXQsayl9KX0sdWhbaHMuTk9ERV9UQVJHRVRdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHgudGFyZ2V0LG0pJiZtLmluY29tZXJzKCkuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gay5pc05vZGUoKSYmZ2woeC5zb3VyY2Usayl9KX0sdWhbaHMuQ0hJTERdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHguY2hpbGQsbSkmJmdsKHgucGFyZW50LG0ucGFyZW50KCkpfSx1aFtocy5QQVJFTlRdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHgucGFyZW50LG0pJiZtLmNoaWxkcmVuKCkuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gZ2woeC5jaGlsZCxrKX0pfSx1aFtocy5ERVNDRU5EQU5UXT1mdW5jdGlvbih4LG0pe3JldHVybiBnbCh4LmRlc2NlbmRhbnQsbSkmJm0uYW5jZXN0b3JzKCkuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gZ2woeC5hbmNlc3RvcixrKX0pfSx1aFtocy5BTkNFU1RPUl09ZnVuY3Rpb24oeCxtKXtyZXR1cm4gZ2woeC5hbmNlc3RvcixtKSYmbS5kZXNjZW5kYW50cygpLnNvbWUoZnVuY3Rpb24oayl7cmV0dXJuIGdsKHguZGVzY2VuZGFudCxrKX0pfSx1aFtocy5DT01QT1VORF9TUExJVF09ZnVuY3Rpb24oeCxtKXtyZXR1cm4gZ2woeC5zdWJqZWN0LG0pJiZnbCh4LmxlZnQsbSkmJmdsKHgucmlnaHQsbSl9LHVoW2hzLlRSVUVdPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHVoW2hzLkNPTExFQ1RJT05dPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC52YWx1ZTtyZXR1cm4gay5oYXMobSl9LHVoW2hzLkZJTFRFUl09ZnVuY3Rpb24oeCxtKXt2YXIgaz14LnZhbHVlO3JldHVybiBrKG0pfTt2YXIgdSQ9ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztpZihrLmxlbmd0aD09PTEmJmtbMF0uY2hlY2tzLmxlbmd0aD09PTEmJmtbMF0uY2hlY2tzWzBdLnR5cGU9PT1ocy5JRClyZXR1cm4gbS5nZXRFbGVtZW50QnlJZChrWzBdLmNoZWNrc1swXS52YWx1ZSkuY29sbGVjdGlvbigpO3ZhciBTPWZ1bmN0aW9uKE8pe2Zvcih2YXIgTj0wO048ay5sZW5ndGg7TisrKXt2YXIgJD1rW05dO2lmKGdsKCQsTykpcmV0dXJuITB9cmV0dXJuITF9O3JldHVybiBrLnRleHQoKT09bnVsbCYmKFM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLG0uZmlsdGVyKFMpfSxPbmU9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPXRoaXMsUz0wO1M8ay5sZW5ndGg7UysrKXt2YXIgTT1rW1NdO2lmKGdsKE0sbSkpcmV0dXJuITB9cmV0dXJuITF9LE5uZT17bWF0Y2hlczpPbmUsZmlsdGVyOnUkfSxleT1mdW5jdGlvbihtKXt0aGlzLmlucHV0VGV4dD1tLHRoaXMuY3VycmVudFN1YmplY3Q9bnVsbCx0aGlzLmNvbXBvdW5kQ291bnQ9MCx0aGlzLmVkZ2VDb3VudD0wLHRoaXMubGVuZ3RoPTAsbT09bnVsbHx8YmUobSkmJm0ubWF0Y2goL15ccyokLyl8fCh4ZShtKT90aGlzLmFkZFF1ZXJ5KHtjaGVja3M6W3t0eXBlOmhzLkNPTExFQ1RJT04sdmFsdWU6bS5jb2xsZWN0aW9uKCl9XX0pOmFlKG0pP3RoaXMuYWRkUXVlcnkoe2NoZWNrczpbe3R5cGU6aHMuRklMVEVSLHZhbHVlOm19XX0pOmJlKG0pP3RoaXMucGFyc2UobSl8fCh0aGlzLmludmFsaWQ9ITApOmNoKCJBIHNlbGVjdG9yIG11c3QgYmUgY3JlYXRlZCBmcm9tIGEgc3RyaW5nOyBmb3VuZCAiKSl9LHA1PWV5LnByb3RvdHlwZTtbTG5lLE5uZV0uZm9yRWFjaChmdW5jdGlvbih4KXtyZXR1cm4geXQocDUseCl9KSxwNS50ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRUZXh0fSxwNS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxwNS5lcT1mdW5jdGlvbih4KXtyZXR1cm4gdGhpc1t4XX0scDUuc2FtZVRleHQ9ZnVuY3Rpb24oeCl7cmV0dXJuIXRoaXMuaW52YWxpZCYmIXguaW52YWxpZCYmdGhpcy50ZXh0KCk9PT14LnRleHQoKX0scDUuYWRkUXVlcnk9ZnVuY3Rpb24oeCl7dGhpc1t0aGlzLmxlbmd0aCsrXT14fSxwNS5zZWxlY3Rvcj1wNS50b1N0cmluZzt2YXIgdHk9e2FsbEFyZTpmdW5jdGlvbihtKXt2YXIgaz1uZXcgZXkobSk7cmV0dXJuIHRoaXMuZXZlcnkoZnVuY3Rpb24oUyl7cmV0dXJuIGsubWF0Y2hlcyhTKX0pfSxpczpmdW5jdGlvbihtKXt2YXIgaz1uZXcgZXkobSk7cmV0dXJuIHRoaXMuc29tZShmdW5jdGlvbihTKXtyZXR1cm4gay5tYXRjaGVzKFMpfSl9LHNvbWU6ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIE09az9tLmFwcGx5KGssW3RoaXNbU10sUyx0aGlzXSk6bSh0aGlzW1NdLFMsdGhpcyk7aWYoTSlyZXR1cm4hMH1yZXR1cm4hMX0sZXZlcnk6ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIE09az9tLmFwcGx5KGssW3RoaXNbU10sUyx0aGlzXSk6bSh0aGlzW1NdLFMsdGhpcyk7aWYoIU0pcmV0dXJuITF9cmV0dXJuITB9LHNhbWU6ZnVuY3Rpb24obSl7aWYodGhpcz09PW0pcmV0dXJuITA7bT10aGlzLmN5KCkuY29sbGVjdGlvbihtKTt2YXIgaz10aGlzLmxlbmd0aCxTPW0ubGVuZ3RoO3JldHVybiBrIT09Uz8hMTprPT09MT90aGlzWzBdPT09bVswXTp0aGlzLmV2ZXJ5KGZ1bmN0aW9uKE0pe3JldHVybiBtLmhhc0VsZW1lbnRXaXRoSWQoTS5pZCgpKX0pfSxhbnlTYW1lOmZ1bmN0aW9uKG0pe3JldHVybiBtPXRoaXMuY3koKS5jb2xsZWN0aW9uKG0pLHRoaXMuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gbS5oYXNFbGVtZW50V2l0aElkKGsuaWQoKSl9KX0sYWxsQXJlTmVpZ2hib3JzOmZ1bmN0aW9uKG0pe209dGhpcy5jeSgpLmNvbGxlY3Rpb24obSk7dmFyIGs9dGhpcy5uZWlnaGJvcmhvb2QoKTtyZXR1cm4gbS5ldmVyeShmdW5jdGlvbihTKXtyZXR1cm4gay5oYXNFbGVtZW50V2l0aElkKFMuaWQoKSl9KX0sY29udGFpbnM6ZnVuY3Rpb24obSl7bT10aGlzLmN5KCkuY29sbGVjdGlvbihtKTt2YXIgaz10aGlzO3JldHVybiBtLmV2ZXJ5KGZ1bmN0aW9uKFMpe3JldHVybiBrLmhhc0VsZW1lbnRXaXRoSWQoUy5pZCgpKX0pfX07dHkuYWxsQXJlTmVpZ2hib3Vycz10eS5hbGxBcmVOZWlnaGJvcnMsdHkuaGFzPXR5LmNvbnRhaW5zLHR5LmVxdWFsPXR5LmVxdWFscz10eS5zYW1lO3ZhciBScD1mdW5jdGlvbihtLGspe3JldHVybiBmdW5jdGlvbihNLE8sTiwkKXt2YXIgSD1NLHE9dGhpcyxZO2lmKEg9PW51bGw/WT0iIjp4ZShIKSYmSC5sZW5ndGg9PT0xJiYoWT1ILmlkKCkpLHEubGVuZ3RoPT09MSYmWSl7dmFyIFo9cVswXS5fcHJpdmF0ZSxjZT1aLnRyYXZlcnNhbENhY2hlPVoudHJhdmVyc2FsQ2FjaGV8fHt9LHZlPWNlW2tdPWNlW2tdfHxbXSxtZT11ZChZKSxMZT12ZVttZV07cmV0dXJuIExlfHwodmVbbWVdPW0uY2FsbChxLE0sTyxOLCQpKX1lbHNlIHJldHVybiBtLmNhbGwocSxNLE8sTiwkKX19LHU4PXtwYXJlbnQ6ZnVuY3Rpb24obSl7dmFyIGs9W107aWYodGhpcy5sZW5ndGg9PT0xKXt2YXIgUz10aGlzWzBdLl9wcml2YXRlLnBhcmVudDtpZihTKXJldHVybiBTfWZvcih2YXIgTT0wO008dGhpcy5sZW5ndGg7TSsrKXt2YXIgTz10aGlzW01dLE49Ty5fcHJpdmF0ZS5wYXJlbnQ7TiYmay5wdXNoKE4pfXJldHVybiB0aGlzLnNwYXduKGssITApLmZpbHRlcihtKX0scGFyZW50czpmdW5jdGlvbihtKXtmb3IodmFyIGs9W10sUz10aGlzLnBhcmVudCgpO1Mubm9uZW1wdHkoKTspe2Zvcih2YXIgTT0wO008Uy5sZW5ndGg7TSsrKXt2YXIgTz1TW01dO2sucHVzaChPKX1TPVMucGFyZW50KCl9cmV0dXJuIHRoaXMuc3Bhd24oaywhMCkuZmlsdGVyKG0pfSxjb21tb25BbmNlc3RvcnM6ZnVuY3Rpb24obSl7Zm9yKHZhciBrLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIE09dGhpc1tTXSxPPU0ucGFyZW50cygpO2s9a3x8TyxrPWsuaW50ZXJzZWN0KE8pfXJldHVybiBrLmZpbHRlcihtKX0sb3JwaGFuczpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oayl7cmV0dXJuIGsuaXNPcnBoYW4oKX0pLmZpbHRlcihtKX0sbm9ub3JwaGFuczpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oayl7cmV0dXJuIGsuaXNDaGlsZCgpfSkuZmlsdGVyKG0pfSxjaGlsZHJlbjpScChmdW5jdGlvbih4KXtmb3IodmFyIG09W10saz0wO2s8dGhpcy5sZW5ndGg7aysrKWZvcih2YXIgUz10aGlzW2tdLE09Uy5fcHJpdmF0ZS5jaGlsZHJlbixPPTA7TzxNLmxlbmd0aDtPKyspbS5wdXNoKE1bT10pO3JldHVybiB0aGlzLnNwYXduKG0sITApLmZpbHRlcih4KX0sImNoaWxkcmVuIiksc2libGluZ3M6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucGFyZW50KCkuY2hpbGRyZW4oKS5ub3QodGhpcykuZmlsdGVyKG0pfSxpc1BhcmVudDpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSlyZXR1cm4gbS5pc05vZGUoKSYmbS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGghPT0wfSxpc0NoaWxkbGVzczpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSlyZXR1cm4gbS5pc05vZGUoKSYmbS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGg9PT0wfSxpc0NoaWxkOmZ1bmN0aW9uKCl7dmFyIG09dGhpc1swXTtpZihtKXJldHVybiBtLmlzTm9kZSgpJiZtLl9wcml2YXRlLnBhcmVudCE9bnVsbH0saXNPcnBoYW46ZnVuY3Rpb24oKXt2YXIgbT10aGlzWzBdO2lmKG0pcmV0dXJuIG0uaXNOb2RlKCkmJm0uX3ByaXZhdGUucGFyZW50PT1udWxsfSxkZXNjZW5kYW50czpmdW5jdGlvbihtKXt2YXIgaz1bXTtmdW5jdGlvbiBTKE0pe2Zvcih2YXIgTz0wO088TS5sZW5ndGg7TysrKXt2YXIgTj1NW09dO2sucHVzaChOKSxOLmNoaWxkcmVuKCkubm9uZW1wdHkoKSYmUyhOLmNoaWxkcmVuKCkpfX1yZXR1cm4gUyh0aGlzLmNoaWxkcmVuKCkpLHRoaXMuc3Bhd24oaywhMCkuZmlsdGVyKG0pfX07ZnVuY3Rpb24geUkoeCxtLGssUyl7Zm9yKHZhciBNPVtdLE89bmV3IFE3LE49eC5jeSgpLCQ9Ti5oYXNDb21wb3VuZE5vZGVzKCksSD0wO0g8eC5sZW5ndGg7SCsrKXt2YXIgcT14W0hdO2s/TS5wdXNoKHEpOiQmJlMoTSxPLHEpfWZvcig7TS5sZW5ndGg+MDspe3ZhciBZPU0uc2hpZnQoKTttKFkpLE8uYWRkKFkuaWQoKSksJCYmUyhNLE8sWSl9cmV0dXJuIHh9ZnVuY3Rpb24gbCQoeCxtLGspe2lmKGsuaXNQYXJlbnQoKSlmb3IodmFyIFM9ay5fcHJpdmF0ZS5jaGlsZHJlbixNPTA7TTxTLmxlbmd0aDtNKyspe3ZhciBPPVNbTV07bS5oYXMoTy5pZCgpKXx8eC5wdXNoKE8pfX11OC5mb3JFYWNoRG93bj1mdW5jdGlvbih4KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIHlJKHRoaXMseCxtLGwkKX07ZnVuY3Rpb24gaCQoeCxtLGspe2lmKGsuaXNDaGlsZCgpKXt2YXIgUz1rLl9wcml2YXRlLnBhcmVudDttLmhhcyhTLmlkKCkpfHx4LnB1c2goUyl9fXU4LmZvckVhY2hVcD1mdW5jdGlvbih4KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIHlJKHRoaXMseCxtLGgkKX07ZnVuY3Rpb24gUG5lKHgsbSxrKXtoJCh4LG0sayksbCQoeCxtLGspfXU4LmZvckVhY2hVcEFuZERvd249ZnVuY3Rpb24oeCl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiB5SSh0aGlzLHgsbSxQbmUpfSx1OC5hbmNlc3RvcnM9dTgucGFyZW50czt2YXIgeDEsZiQ7eDE9ZiQ9e2RhdGE6ZnUuZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCxpbW11dGFibGVLZXlzOntpZDohMCxzb3VyY2U6ITAsdGFyZ2V0OiEwLHBhcmVudDohMH0sdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVEYXRhOmZ1LnJlbW92ZURhdGEoe2ZpZWxkOiJkYXRhIixldmVudDoiZGF0YSIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLGltbXV0YWJsZUtleXM6e2lkOiEwLHNvdXJjZTohMCx0YXJnZXQ6ITAscGFyZW50OiEwfSx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6ZnUuZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6ZnUucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxyc2NyYXRjaDpmdS5kYXRhKHtmaWVsZDoicnNjcmF0Y2giLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsYWxsb3dHZXR0aW5nOiEwfSkscmVtb3ZlUnNjcmF0Y2g6ZnUucmVtb3ZlRGF0YSh7ZmllbGQ6InJzY3JhdGNoIix0cmlnZ2VyRXZlbnQ6ITF9KSxpZDpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSlyZXR1cm4gbS5fcHJpdmF0ZS5kYXRhLmlkfX0seDEuYXR0cj14MS5kYXRhLHgxLnJlbW92ZUF0dHI9eDEucmVtb3ZlRGF0YTt2YXIgbnk9ZiQsSjk9e307ZnVuY3Rpb24geEkoeCl7cmV0dXJuIGZ1bmN0aW9uKG0pe3ZhciBrPXRoaXM7aWYobT09PXZvaWQgMCYmKG09ITApLGsubGVuZ3RoIT09MClpZihrLmlzTm9kZSgpJiYhay5yZW1vdmVkKCkpe2Zvcih2YXIgUz0wLE09a1swXSxPPU0uX3ByaXZhdGUuZWRnZXMsTj0wO048Ty5sZW5ndGg7TisrKXt2YXIgJD1PW05dOyFtJiYkLmlzTG9vcCgpfHwoUys9eChNLCQpKX1yZXR1cm4gU31lbHNlIHJldHVybn19eXQoSjkse2RlZ3JlZTp4SShmdW5jdGlvbih4LG0pe3JldHVybiBtLnNvdXJjZSgpLnNhbWUobS50YXJnZXQoKSk/MjoxfSksaW5kZWdyZWU6eEkoZnVuY3Rpb24oeCxtKXtyZXR1cm4gbS50YXJnZXQoKS5zYW1lKHgpPzE6MH0pLG91dGRlZ3JlZTp4SShmdW5jdGlvbih4LG0pe3JldHVybiBtLnNvdXJjZSgpLnNhbWUoeCk/MTowfSl9KTtmdW5jdGlvbiBsOCh4LG0pe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIFMsTT10aGlzLm5vZGVzKCksTz0wO088TS5sZW5ndGg7TysrKXt2YXIgTj1NW09dLCQ9Tlt4XShrKTskIT09dm9pZCAwJiYoUz09PXZvaWQgMHx8bSgkLFMpKSYmKFM9JCl9cmV0dXJuIFN9fXl0KEo5LHttaW5EZWdyZWU6bDgoImRlZ3JlZSIsZnVuY3Rpb24oeCxtKXtyZXR1cm4geDxtfSksbWF4RGVncmVlOmw4KCJkZWdyZWUiLGZ1bmN0aW9uKHgsbSl7cmV0dXJuIHg+bX0pLG1pbkluZGVncmVlOmw4KCJpbmRlZ3JlZSIsZnVuY3Rpb24oeCxtKXtyZXR1cm4geDxtfSksbWF4SW5kZWdyZWU6bDgoImluZGVncmVlIixmdW5jdGlvbih4LG0pe3JldHVybiB4Pm19KSxtaW5PdXRkZWdyZWU6bDgoIm91dGRlZ3JlZSIsZnVuY3Rpb24oeCxtKXtyZXR1cm4geDxtfSksbWF4T3V0ZGVncmVlOmw4KCJvdXRkZWdyZWUiLGZ1bmN0aW9uKHgsbSl7cmV0dXJuIHg+bX0pfSkseXQoSjkse3RvdGFsRGVncmVlOmZ1bmN0aW9uKG0pe2Zvcih2YXIgaz0wLFM9dGhpcy5ub2RlcygpLE09MDtNPFMubGVuZ3RoO00rKylrKz1TW01dLmRlZ3JlZShtKTtyZXR1cm4ga319KTt2YXIgVzIsZCQsZyQ9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT0wO008bS5sZW5ndGg7TSsrKXt2YXIgTz1tW01dO2lmKCFPLmxvY2tlZCgpKXt2YXIgTj1PLl9wcml2YXRlLnBvc2l0aW9uLCQ9e3g6ay54IT1udWxsP2sueC1OLng6MCx5OmsueSE9bnVsbD9rLnktTi55OjB9O08uaXNQYXJlbnQoKSYmISgkLng9PT0wJiYkLnk9PT0wKSYmTy5jaGlsZHJlbigpLnNoaWZ0KCQsUyksTy5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19fSxwJD17ZmllbGQ6InBvc2l0aW9uIixiaW5kaW5nRXZlbnQ6InBvc2l0aW9uIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoicG9zaXRpb24iLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6ImVtaXRBbmROb3RpZnkiLGFsbG93R2V0dGluZzohMCx2YWxpZEtleXM6WyJ4IiwieSJdLGJlZm9yZUdldDpmdW5jdGlvbihtKXttLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCl9LGJlZm9yZVNldDpmdW5jdGlvbihtLGspe2ckKG0saywhMSl9LG9uU2V0OmZ1bmN0aW9uKG0pe20uZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCl9LGNhblNldDpmdW5jdGlvbihtKXtyZXR1cm4hbS5sb2NrZWQoKX19O1cyPWQkPXtwb3NpdGlvbjpmdS5kYXRhKHAkKSxzaWxlbnRQb3NpdGlvbjpmdS5kYXRhKHl0KHt9LHAkLHthbGxvd0JpbmRpbmc6ITEsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiExLGFsbG93R2V0dGluZzohMSxiZWZvcmVTZXQ6ZnVuY3Rpb24obSxrKXtnJChtLGssITApfSxvblNldDpmdW5jdGlvbihtKXttLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfX0pKSxwb3NpdGlvbnM6ZnVuY3Rpb24obSxrKXtpZihzZShtKSlrP3RoaXMuc2lsZW50UG9zaXRpb24obSk6dGhpcy5wb3NpdGlvbihtKTtlbHNlIGlmKGFlKG0pKXt2YXIgUz1tLE09dGhpcy5jeSgpO00uc3RhcnRCYXRjaCgpO2Zvcih2YXIgTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgTj10aGlzW09dLCQ9dm9pZCAwOygkPVMoTixPKSkmJihrP04uc2lsZW50UG9zaXRpb24oJCk6Ti5wb3NpdGlvbigkKSl9TS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSxzaWxlbnRQb3NpdGlvbnM6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucG9zaXRpb25zKG0sITApfSxzaGlmdDpmdW5jdGlvbihtLGssUyl7dmFyIE07aWYoc2UobSk/KE09e3g6WChtLngpP20ueDowLHk6WChtLnkpP20ueTowfSxTPWspOmJlKG0pJiZYKGspJiYoTT17eDowLHk6MH0sTVttXT1rKSxNIT1udWxsKXt2YXIgTz10aGlzLmN5KCk7Ty5zdGFydEJhdGNoKCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspe3ZhciAkPXRoaXNbTl07aWYoIShPLmhhc0NvbXBvdW5kTm9kZXMoKSYmJC5pc0NoaWxkKCkmJiQuYW5jZXN0b3JzKCkuYW55U2FtZSh0aGlzKSkpe3ZhciBIPSQucG9zaXRpb24oKSxxPXt4OkgueCtNLngseTpILnkrTS55fTtTPyQuc2lsZW50UG9zaXRpb24ocSk6JC5wb3NpdGlvbihxKX19Ty5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSxzaWxlbnRTaGlmdDpmdW5jdGlvbihtLGspe3JldHVybiBzZShtKT90aGlzLnNoaWZ0KG0sITApOmJlKG0pJiZYKGspJiZ0aGlzLnNoaWZ0KG0saywhMCksdGhpc30scmVuZGVyZWRQb3NpdGlvbjpmdW5jdGlvbihtLGspe3ZhciBTPXRoaXNbMF0sTT10aGlzLmN5KCksTz1NLnpvb20oKSxOPU0ucGFuKCksJD1zZShtKT9tOnZvaWQgMCxIPSQhPT12b2lkIDB8fGshPT12b2lkIDAmJmJlKG0pO2lmKFMmJlMuaXNOb2RlKCkpaWYoSClmb3IodmFyIHE9MDtxPHRoaXMubGVuZ3RoO3ErKyl7dmFyIFk9dGhpc1txXTtrIT09dm9pZCAwP1kucG9zaXRpb24obSwoay1OW21dKS9PKTokIT09dm9pZCAwJiZZLnBvc2l0aW9uKGhqKCQsTyxOKSl9ZWxzZXt2YXIgWj1TLnBvc2l0aW9uKCk7cmV0dXJuICQ9bFMoWixPLE4pLG09PT12b2lkIDA/JDokW21dfWVsc2UgaWYoIUgpcmV0dXJuO3JldHVybiB0aGlzfSxyZWxhdGl2ZVBvc2l0aW9uOmZ1bmN0aW9uKG0sayl7dmFyIFM9dGhpc1swXSxNPXRoaXMuY3koKSxPPXNlKG0pP206dm9pZCAwLE49TyE9PXZvaWQgMHx8ayE9PXZvaWQgMCYmYmUobSksJD1NLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihTJiZTLmlzTm9kZSgpKWlmKE4pZm9yKHZhciBIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBxPXRoaXNbSF0sWT0kP3EucGFyZW50KCk6bnVsbCxaPVkmJlkubGVuZ3RoPjAsY2U9WjtaJiYoWT1ZWzBdKTt2YXIgdmU9Y2U/WS5wb3NpdGlvbigpOnt4OjAseTowfTtrIT09dm9pZCAwP3EucG9zaXRpb24obSxrK3ZlW21dKTpPIT09dm9pZCAwJiZxLnBvc2l0aW9uKHt4Ok8ueCt2ZS54LHk6Ty55K3ZlLnl9KX1lbHNle3ZhciBtZT1TLnBvc2l0aW9uKCksTGU9JD9TLnBhcmVudCgpOm51bGwsX2U9TGUmJkxlLmxlbmd0aD4wLEVlPV9lO19lJiYoTGU9TGVbMF0pO3ZhciBCZT1FZT9MZS5wb3NpdGlvbigpOnt4OjAseTowfTtyZXR1cm4gTz17eDptZS54LUJlLngseTptZS55LUJlLnl9LG09PT12b2lkIDA/TzpPW21dfWVsc2UgaWYoIU4pcmV0dXJuO3JldHVybiB0aGlzfX0sVzIubW9kZWxQb3NpdGlvbj1XMi5wb2ludD1XMi5wb3NpdGlvbixXMi5tb2RlbFBvc2l0aW9ucz1XMi5wb2ludHM9VzIucG9zaXRpb25zLFcyLnJlbmRlcmVkUG9pbnQ9VzIucmVuZGVyZWRQb3NpdGlvbixXMi5yZWxhdGl2ZVBvaW50PVcyLnJlbGF0aXZlUG9zaXRpb247dmFyIEJuZT1kJCxoOCxyeTtoOD1yeT17fSxyeS5yZW5kZXJlZEJvdW5kaW5nQm94PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMuYm91bmRpbmdCb3goeCksaz10aGlzLmN5KCksUz1rLnpvb20oKSxNPWsucGFuKCksTz1tLngxKlMrTS54LE49bS54MipTK00ueCwkPW0ueTEqUytNLnksSD1tLnkyKlMrTS55O3JldHVybnt4MTpPLHgyOk4seTE6JCx5MjpILHc6Ti1PLGg6SC0kfX0scnkuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlPWZ1bmN0aW9uKCl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLG09dGhpcy5jeSgpO3JldHVybiFtLnN0eWxlRW5hYmxlZCgpfHwhbS5oYXNDb21wb3VuZE5vZGVzKCk/dGhpczoodGhpcy5mb3JFYWNoVXAoZnVuY3Rpb24oayl7aWYoay5pc1BhcmVudCgpKXt2YXIgUz1rLl9wcml2YXRlO1MuY29tcG91bmRCb3VuZHNDbGVhbj0hMSxTLmJiQ2FjaGU9bnVsbCx4fHxrLmVtaXRBbmROb3RpZnkoImJvdW5kcyIpfX0pLHRoaXMpfSxyeS51cGRhdGVDb21wb3VuZEJvdW5kcz1mdW5jdGlvbigpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxtPXRoaXMuY3koKTtpZighbS5zdHlsZUVuYWJsZWQoKXx8IW0uaGFzQ29tcG91bmROb2RlcygpKXJldHVybiB0aGlzO2lmKCF4JiZtLmJhdGNoaW5nKCkpcmV0dXJuIHRoaXM7ZnVuY3Rpb24gayhOKXtpZighTi5pc1BhcmVudCgpKXJldHVybjt2YXIgJD1OLl9wcml2YXRlLEg9Ti5jaGlsZHJlbigpLHE9Ti5wc3R5bGUoImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIikudmFsdWU9PT0iaW5jbHVkZSIsWT17d2lkdGg6e3ZhbDpOLnBzdHlsZSgibWluLXdpZHRoIikucGZWYWx1ZSxsZWZ0Ok4ucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1sZWZ0IikscmlnaHQ6Ti5wc3R5bGUoIm1pbi13aWR0aC1iaWFzLXJpZ2h0Iil9LGhlaWdodDp7dmFsOk4ucHN0eWxlKCJtaW4taGVpZ2h0IikucGZWYWx1ZSx0b3A6Ti5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy10b3AiKSxib3R0b206Ti5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy1ib3R0b20iKX19LFo9SC5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczpxLGluY2x1ZGVPdmVybGF5czohMSx1c2VDYWNoZTohMX0pLGNlPSQucG9zaXRpb247KFoudz09PTB8fFouaD09PTApJiYoWj17dzpOLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGg6Ti5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9LFoueDE9Y2UueC1aLncvMixaLngyPWNlLngrWi53LzIsWi55MT1jZS55LVouaC8yLFoueTI9Y2UueStaLmgvMik7ZnVuY3Rpb24gdmUoSmUsTHQsTXQpe3ZhciB1dD0wLFd0PTAsVHQ9THQrTXQ7cmV0dXJuIEplPjAmJlR0PjAmJih1dD1MdC9UdCpKZSxXdD1NdC9UdCpKZSkse2JpYXNEaWZmOnV0LGJpYXNDb21wbGVtZW50RGlmZjpXdH19ZnVuY3Rpb24gbWUoSmUsTHQsTXQsdXQpe2lmKE10LnVuaXRzPT09IiUiKXN3aXRjaCh1dCl7Y2FzZSJ3aWR0aCI6cmV0dXJuIEplPjA/TXQucGZWYWx1ZSpKZTowO2Nhc2UiaGVpZ2h0IjpyZXR1cm4gTHQ+MD9NdC5wZlZhbHVlKkx0OjA7Y2FzZSJhdmVyYWdlIjpyZXR1cm4gSmU+MCYmTHQ+MD9NdC5wZlZhbHVlKihKZStMdCkvMjowO2Nhc2UibWluIjpyZXR1cm4gSmU+MCYmTHQ+MD9KZT5MdD9NdC5wZlZhbHVlKkx0Ok10LnBmVmFsdWUqSmU6MDtjYXNlIm1heCI6cmV0dXJuIEplPjAmJkx0PjA/SmU+THQ/TXQucGZWYWx1ZSpKZTpNdC5wZlZhbHVlKkx0OjA7ZGVmYXVsdDpyZXR1cm4gMH1lbHNlIHJldHVybiBNdC51bml0cz09PSJweCI/TXQucGZWYWx1ZTowfXZhciBMZT1ZLndpZHRoLmxlZnQudmFsdWU7WS53aWR0aC5sZWZ0LnVuaXRzPT09InB4IiYmWS53aWR0aC52YWw+MCYmKExlPUxlKjEwMC9ZLndpZHRoLnZhbCk7dmFyIF9lPVkud2lkdGgucmlnaHQudmFsdWU7WS53aWR0aC5yaWdodC51bml0cz09PSJweCImJlkud2lkdGgudmFsPjAmJihfZT1fZSoxMDAvWS53aWR0aC52YWwpO3ZhciBFZT1ZLmhlaWdodC50b3AudmFsdWU7WS5oZWlnaHQudG9wLnVuaXRzPT09InB4IiYmWS5oZWlnaHQudmFsPjAmJihFZT1FZSoxMDAvWS5oZWlnaHQudmFsKTt2YXIgQmU9WS5oZWlnaHQuYm90dG9tLnZhbHVlO1kuaGVpZ2h0LmJvdHRvbS51bml0cz09PSJweCImJlkuaGVpZ2h0LnZhbD4wJiYoQmU9QmUqMTAwL1kuaGVpZ2h0LnZhbCk7dmFyIFJlPXZlKFkud2lkdGgudmFsLVoudyxMZSxfZSksVmU9UmUuYmlhc0RpZmYsY3Q9UmUuYmlhc0NvbXBsZW1lbnREaWZmLHN0PXZlKFkuaGVpZ2h0LnZhbC1aLmgsRWUsQmUpLFllPXN0LmJpYXNEaWZmLG10PXN0LmJpYXNDb21wbGVtZW50RGlmZjskLmF1dG9QYWRkaW5nPW1lKFoudyxaLmgsTi5wc3R5bGUoInBhZGRpbmciKSxOLnBzdHlsZSgicGFkZGluZy1yZWxhdGl2ZS10byIpLnZhbHVlKSwkLmF1dG9XaWR0aD1NYXRoLm1heChaLncsWS53aWR0aC52YWwpLGNlLng9KC1WZStaLngxK1oueDIrY3QpLzIsJC5hdXRvSGVpZ2h0PU1hdGgubWF4KFouaCxZLmhlaWdodC52YWwpLGNlLnk9KC1ZZStaLnkxK1oueTIrbXQpLzJ9Zm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciBNPXRoaXNbU10sTz1NLl9wcml2YXRlOyghTy5jb21wb3VuZEJvdW5kc0NsZWFufHx4KSYmKGsoTSksbS5iYXRjaGluZygpfHwoTy5jb21wb3VuZEJvdW5kc0NsZWFuPSEwKSl9cmV0dXJuIHRoaXN9O3ZhciBqcD1mdW5jdGlvbihtKXtyZXR1cm4gbT09PTEvMHx8bT09PS0xLzA/MDptfSxZMj1mdW5jdGlvbihtLGssUyxNLE8pe00taz09PTB8fE8tUz09PTB8fGs9PW51bGx8fFM9PW51bGx8fE09PW51bGx8fE89PW51bGx8fChtLngxPWs8bS54MT9rOm0ueDEsbS54Mj1NPm0ueDI/TTptLngyLG0ueTE9UzxtLnkxP1M6bS55MSxtLnkyPU8+bS55Mj9POm0ueTIsbS53PW0ueDItbS54MSxtLmg9bS55Mi1tLnkxKX0sYjU9ZnVuY3Rpb24obSxrKXtyZXR1cm4gaz09bnVsbD9tOlkyKG0say54MSxrLnkxLGsueDIsay55Mil9LFo5PWZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gSzIobSxrLFMpfSxfUz1mdW5jdGlvbihtLGssUyl7aWYoIWsuY3koKS5oZWFkbGVzcygpKXt2YXIgTT1rLl9wcml2YXRlLE89TS5yc3R5bGUsTj1PLmFycm93V2lkdGgvMiwkPWsucHN0eWxlKFMrIi1hcnJvdy1zaGFwZSIpLnZhbHVlLEgscTtpZigkIT09Im5vbmUiKXtTPT09InNvdXJjZSI/KEg9Ty5zcmNYLHE9Ty5zcmNZKTpTPT09InRhcmdldCI/KEg9Ty50Z3RYLHE9Ty50Z3RZKTooSD1PLm1pZFgscT1PLm1pZFkpO3ZhciBZPU0uYXJyb3dCb3VuZHM9TS5hcnJvd0JvdW5kc3x8e30sWj1ZW1NdPVlbU118fHt9O1oueDE9SC1OLFoueTE9cS1OLFoueDI9SCtOLFoueTI9cStOLFoudz1aLngyLVoueDEsWi5oPVoueTItWi55MSxmUyhaLDEpLFkyKG0sWi54MSxaLnkxLFoueDIsWi55Mil9fX0sa0k9ZnVuY3Rpb24obSxrLFMpe2lmKCFrLmN5KCkuaGVhZGxlc3MoKSl7dmFyIE07Uz9NPVMrIi0iOk09IiI7dmFyIE89ay5fcHJpdmF0ZSxOPU8ucnN0eWxlLCQ9ay5wc3R5bGUoTSsibGFiZWwiKS5zdHJWYWx1ZTtpZigkKXt2YXIgSD1rLnBzdHlsZSgidGV4dC1oYWxpZ24iKSxxPWsucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLFk9WjkoTiwibGFiZWxXaWR0aCIsUyksWj1aOShOLCJsYWJlbEhlaWdodCIsUyksY2U9WjkoTiwibGFiZWxYIixTKSx2ZT1aOShOLCJsYWJlbFkiLFMpLG1lPWsucHN0eWxlKE0rInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLExlPWsucHN0eWxlKE0rInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLF9lPWsuaXNFZGdlKCksRWU9ay5wc3R5bGUoTSsidGV4dC1yb3RhdGlvbiIpLEJlPWsucHN0eWxlKCJ0ZXh0LW91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLFJlPWsucHN0eWxlKCJ0ZXh0LWJvcmRlci13aWR0aCIpLnBmVmFsdWUsVmU9UmUvMixjdD1rLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlLHN0PTIsWWU9WixtdD1ZLEplPW10LzIsTHQ9WWUvMixNdCx1dCxXdCxUdDtpZihfZSlNdD1jZS1KZSx1dD1jZStKZSxXdD12ZS1MdCxUdD12ZStMdDtlbHNle3N3aXRjaChILnZhbHVlKXtjYXNlImxlZnQiOk10PWNlLW10LHV0PWNlO2JyZWFrO2Nhc2UiY2VudGVyIjpNdD1jZS1KZSx1dD1jZStKZTticmVhaztjYXNlInJpZ2h0IjpNdD1jZSx1dD1jZSttdDticmVha31zd2l0Y2gocS52YWx1ZSl7Y2FzZSJ0b3AiOld0PXZlLVllLFR0PXZlO2JyZWFrO2Nhc2UiY2VudGVyIjpXdD12ZS1MdCxUdD12ZStMdDticmVhaztjYXNlImJvdHRvbSI6V3Q9dmUsVHQ9dmUrWWU7YnJlYWt9fU10Kz1tZS1NYXRoLm1heChCZSxWZSktY3Qtc3QsdXQrPW1lK01hdGgubWF4KEJlLFZlKStjdCtzdCxXdCs9TGUtTWF0aC5tYXgoQmUsVmUpLWN0LXN0LFR0Kz1MZStNYXRoLm1heChCZSxWZSkrY3Qrc3Q7dmFyIF9uPVN8fCJtYWluIixobj1PLmxhYmVsQm91bmRzLFl0PWhuW19uXT1obltfbl18fHt9O1l0LngxPU10LFl0LnkxPVd0LFl0LngyPXV0LFl0LnkyPVR0LFl0Lnc9dXQtTXQsWXQuaD1UdC1XdDt2YXIgRG49X2UmJkVlLnN0clZhbHVlPT09ImF1dG9yb3RhdGUiLGlyPUVlLnBmVmFsdWUhPW51bGwmJkVlLnBmVmFsdWUhPT0wO2lmKERufHxpcil7dmFyIHZyPURuP1o5KE8ucnN0eWxlLCJsYWJlbEFuZ2xlIixTKTpFZS5wZlZhbHVlLE5uPU1hdGguY29zKHZyKSxwcj1NYXRoLnNpbih2ciksRXI9KE10K3V0KS8yLE1yPShXdCtUdCkvMjtpZighX2Upe3N3aXRjaChILnZhbHVlKXtjYXNlImxlZnQiOkVyPXV0O2JyZWFrO2Nhc2UicmlnaHQiOkVyPU10O2JyZWFrfXN3aXRjaChxLnZhbHVlKXtjYXNlInRvcCI6TXI9VHQ7YnJlYWs7Y2FzZSJib3R0b20iOk1yPVd0O2JyZWFrfX12YXIgQ3I9ZnVuY3Rpb24ocGEsTWkpe3JldHVybiBwYT1wYS1FcixNaT1NaS1Ncix7eDpwYSpObi1NaSpwcitFcix5OnBhKnByK01pKk5uK01yfX0sT3I9Q3IoTXQsV3QpLFduPUNyKE10LFR0KSxicj1Dcih1dCxXdCksU3I9Q3IodXQsVHQpO010PU1hdGgubWluKE9yLngsV24ueCxici54LFNyLngpLHV0PU1hdGgubWF4KE9yLngsV24ueCxici54LFNyLngpLFd0PU1hdGgubWluKE9yLnksV24ueSxici55LFNyLnkpLFR0PU1hdGgubWF4KE9yLnksV24ueSxici55LFNyLnkpfXZhciBOcj1fbisiUm90IixTaT1obltOcl09aG5bTnJdfHx7fTtTaS54MT1NdCxTaS55MT1XdCxTaS54Mj11dCxTaS55Mj1UdCxTaS53PXV0LU10LFNpLmg9VHQtV3QsWTIobSxNdCxXdCx1dCxUdCksWTIoTy5sYWJlbEJvdW5kcy5hbGwsTXQsV3QsdXQsVHQpfXJldHVybiBtfX0sRm5lPWZ1bmN0aW9uKG0sayl7aWYoIWsuY3koKS5oZWFkbGVzcygpKXt2YXIgUz1rLnBzdHlsZSgib3V0bGluZS1vcGFjaXR5IikudmFsdWUsTT1rLnBzdHlsZSgib3V0bGluZS13aWR0aCIpLnZhbHVlO2lmKFM+MCYmTT4wKXt2YXIgTz1rLnBzdHlsZSgib3V0bGluZS1vZmZzZXQiKS52YWx1ZSxOPWsucHN0eWxlKCJzaGFwZSIpLnZhbHVlLCQ9TStPLEg9KG0udyskKjIpL20udyxxPShtLmgrJCoyKS9tLmgsWT0wLFo9MDtbImRpYW1vbmQiLCJwZW50YWdvbiIsInJvdW5kLXRyaWFuZ2xlIl0uaW5jbHVkZXMoTik/KEg9KG0udyskKjIuNCkvbS53LFo9LSQvMy42KTpbImNvbmNhdmUtaGV4YWdvbiIsInJob21ib2lkIiwicmlnaHQtcmhvbWJvaWQiXS5pbmNsdWRlcyhOKT9IPShtLncrJCoyLjQpL20udzpOPT09InN0YXIiPyhIPShtLncrJCoyLjgpL20udyxxPShtLmgrJCoyLjYpL20uaCxaPS0kLzMuOCk6Tj09PSJ0cmlhbmdsZSI/KEg9KG0udyskKjIuOCkvbS53LHE9KG0uaCskKjIuNCkvbS5oLFo9LSQvMS40KTpOPT09InZlZSImJihIPShtLncrJCo0LjQpL20udyxxPShtLmgrJCozLjgpL20uaCxaPS0kKi41KTt2YXIgY2U9bS5oKnEtbS5oLHZlPW0udypILW0udztpZihkUyhtLFtNYXRoLmNlaWwoY2UvMiksTWF0aC5jZWlsKHZlLzIpXSksWSE9MHx8WiE9PTApe3ZhciBtZT1wWihtLFksWik7ZGoobSxtZSl9fX19LFJuZT1mdW5jdGlvbihtLGspe3ZhciBTPW0uX3ByaXZhdGUuY3ksTT1TLnN0eWxlRW5hYmxlZCgpLE89Uy5oZWFkbGVzcygpLE49V2QoKSwkPW0uX3ByaXZhdGUsSD1tLmlzTm9kZSgpLHE9bS5pc0VkZ2UoKSxZLFosY2UsdmUsbWUsTGUsX2U9JC5yc3R5bGUsRWU9SCYmTT9tLnBzdHlsZSgiYm91bmRzLWV4cGFuc2lvbiIpLnBmVmFsdWU6WzBdLEJlPWZ1bmN0aW9uKGZzKXtyZXR1cm4gZnMucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSJ9LFJlPSFNfHxCZShtKSYmKCFxfHxCZShtLnNvdXJjZSgpKSYmQmUobS50YXJnZXQoKSkpO2lmKFJlKXt2YXIgVmU9MCxjdD0wO00mJmsuaW5jbHVkZU92ZXJsYXlzJiYoVmU9bS5wc3R5bGUoIm92ZXJsYXktb3BhY2l0eSIpLnZhbHVlLFZlIT09MCYmKGN0PW0ucHN0eWxlKCJvdmVybGF5LXBhZGRpbmciKS52YWx1ZSkpO3ZhciBzdD0wLFllPTA7TSYmay5pbmNsdWRlVW5kZXJsYXlzJiYoc3Q9bS5wc3R5bGUoInVuZGVybGF5LW9wYWNpdHkiKS52YWx1ZSxzdCE9PTAmJihZZT1tLnBzdHlsZSgidW5kZXJsYXktcGFkZGluZyIpLnZhbHVlKSk7dmFyIG10PU1hdGgubWF4KGN0LFllKSxKZT0wLEx0PTA7aWYoTSYmKEplPW0ucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsTHQ9SmUvMiksSCYmay5pbmNsdWRlTm9kZXMpe3ZhciBNdD1tLnBvc2l0aW9uKCk7bWU9TXQueCxMZT1NdC55O3ZhciB1dD1tLm91dGVyV2lkdGgoKSxXdD11dC8yLFR0PW0ub3V0ZXJIZWlnaHQoKSxfbj1UdC8yO1k9bWUtV3QsWj1tZStXdCxjZT1MZS1fbix2ZT1MZStfbixZMihOLFksY2UsWix2ZSksTSYmay5pbmNsdWRlT3V0bGluZXMmJkZuZShOLG0pfWVsc2UgaWYocSYmay5pbmNsdWRlRWRnZXMpaWYoTSYmIU8pe3ZhciBobj1tLnBzdHlsZSgiY3VydmUtc3R5bGUiKS5zdHJWYWx1ZTtpZihZPU1hdGgubWluKF9lLnNyY1gsX2UubWlkWCxfZS50Z3RYKSxaPU1hdGgubWF4KF9lLnNyY1gsX2UubWlkWCxfZS50Z3RYKSxjZT1NYXRoLm1pbihfZS5zcmNZLF9lLm1pZFksX2UudGd0WSksdmU9TWF0aC5tYXgoX2Uuc3JjWSxfZS5taWRZLF9lLnRndFkpLFktPUx0LForPUx0LGNlLT1MdCx2ZSs9THQsWTIoTixZLGNlLFosdmUpLGhuPT09ImhheXN0YWNrIil7dmFyIFl0PV9lLmhheXN0YWNrUHRzO2lmKFl0JiZZdC5sZW5ndGg9PT0yKXtpZihZPVl0WzBdLngsY2U9WXRbMF0ueSxaPVl0WzFdLngsdmU9WXRbMV0ueSxZPlope3ZhciBEbj1ZO1k9WixaPURufWlmKGNlPnZlKXt2YXIgaXI9Y2U7Y2U9dmUsdmU9aXJ9WTIoTixZLUx0LGNlLUx0LForTHQsdmUrTHQpfX1lbHNlIGlmKGhuPT09ImJlemllciJ8fGhuPT09InVuYnVuZGxlZC1iZXppZXIifHxobj09PSJzZWdtZW50cyJ8fGhuPT09InRheGkiKXt2YXIgdnI7c3dpdGNoKGhuKXtjYXNlImJlemllciI6Y2FzZSJ1bmJ1bmRsZWQtYmV6aWVyIjp2cj1fZS5iZXppZXJQdHM7YnJlYWs7Y2FzZSJzZWdtZW50cyI6Y2FzZSJ0YXhpIjp2cj1fZS5saW5lUHRzO2JyZWFrfWlmKHZyIT1udWxsKWZvcih2YXIgTm49MDtObjx2ci5sZW5ndGg7Tm4rKyl7dmFyIHByPXZyW05uXTtZPXByLngtTHQsWj1wci54K0x0LGNlPXByLnktTHQsdmU9cHIueStMdCxZMihOLFksY2UsWix2ZSl9fX1lbHNle3ZhciBFcj1tLnNvdXJjZSgpLE1yPUVyLnBvc2l0aW9uKCksQ3I9bS50YXJnZXQoKSxPcj1Dci5wb3NpdGlvbigpO2lmKFk9TXIueCxaPU9yLngsY2U9TXIueSx2ZT1Pci55LFk+Wil7dmFyIFduPVk7WT1aLFo9V259aWYoY2U+dmUpe3ZhciBicj1jZTtjZT12ZSx2ZT1icn1ZLT1MdCxaKz1MdCxjZS09THQsdmUrPUx0LFkyKE4sWSxjZSxaLHZlKX1pZihNJiZrLmluY2x1ZGVFZGdlcyYmcSYmKF9TKE4sbSwibWlkLXNvdXJjZSIpLF9TKE4sbSwibWlkLXRhcmdldCIpLF9TKE4sbSwic291cmNlIiksX1MoTixtLCJ0YXJnZXQiKSksTSl7dmFyIFNyPW0ucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoU3Ipe3ZhciBOcj1tLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLFNpPW0ucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWU7WTIoTixOLngxK05yLE4ueTErU2ksTi54MitOcixOLnkyK1NpKX19dmFyIHlzPSQuYm9keUJvdW5kcz0kLmJvZHlCb3VuZHN8fHt9O2dqKHlzLE4pLGRTKHlzLEVlKSxmUyh5cywxKSxNJiYoWT1OLngxLFo9Ti54MixjZT1OLnkxLHZlPU4ueTIsWTIoTixZLW10LGNlLW10LForbXQsdmUrbXQpKTt2YXIgcGE9JC5vdmVybGF5Qm91bmRzPSQub3ZlcmxheUJvdW5kc3x8e307Z2oocGEsTiksZFMocGEsRWUpLGZTKHBhLDEpO3ZhciBNaT0kLmxhYmVsQm91bmRzPSQubGFiZWxCb3VuZHN8fHt9O01pLmFsbCE9bnVsbD9nWihNaS5hbGwpOk1pLmFsbD1XZCgpLE0mJmsuaW5jbHVkZUxhYmVscyYmKGsuaW5jbHVkZU1haW5MYWJlbHMmJmtJKE4sbSxudWxsKSxxJiYoay5pbmNsdWRlU291cmNlTGFiZWxzJiZrSShOLG0sInNvdXJjZSIpLGsuaW5jbHVkZVRhcmdldExhYmVscyYma0koTixtLCJ0YXJnZXQiKSkpfXJldHVybiBOLngxPWpwKE4ueDEpLE4ueTE9anAoTi55MSksTi54Mj1qcChOLngyKSxOLnkyPWpwKE4ueTIpLE4udz1qcChOLngyLU4ueDEpLE4uaD1qcChOLnkyLU4ueTEpLE4udz4wJiZOLmg+MCYmUmUmJihkUyhOLEVlKSxmUyhOLDEpKSxOfSxiJD1mdW5jdGlvbihtKXt2YXIgaz0wLFM9ZnVuY3Rpb24oTil7cmV0dXJuKE4/MTowKTw8aysrfSxNPTA7cmV0dXJuIE0rPVMobS5pbmN1ZGVOb2RlcyksTSs9UyhtLmluY2x1ZGVFZGdlcyksTSs9UyhtLmluY2x1ZGVMYWJlbHMpLE0rPVMobS5pbmNsdWRlTWFpbkxhYmVscyksTSs9UyhtLmluY2x1ZGVTb3VyY2VMYWJlbHMpLE0rPVMobS5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxNKz1TKG0uaW5jbHVkZU92ZXJsYXlzKSxNKz1TKG0uaW5jbHVkZU91dGxpbmVzKSxNfSxtJD1mdW5jdGlvbihtKXtpZihtLmlzRWRnZSgpKXt2YXIgaz1tLnNvdXJjZSgpLnBvc2l0aW9uKCksUz1tLnRhcmdldCgpLnBvc2l0aW9uKCksTT1mdW5jdGlvbihOKXtyZXR1cm4gTWF0aC5yb3VuZChOKX07cmV0dXJuIHkxKFtNKGsueCksTShrLnkpLE0oUy54KSxNKFMueSldKX1lbHNlIHJldHVybiAwfSxVdD1mdW5jdGlvbihtLGspe3ZhciBTPW0uX3ByaXZhdGUsTSxPPW0uaXNFZGdlKCksTj1rPT1udWxsP3YkOmIkKGspLCQ9Tj09PXYkLEg9bSQobSkscT1TLmJiQ2FjaGVQb3NLZXk9PT1ILFk9ay51c2VDYWNoZSYmcSxaPWZ1bmN0aW9uKExlKXtyZXR1cm4gTGUuX3ByaXZhdGUuYmJDYWNoZT09bnVsbHx8TGUuX3ByaXZhdGUuc3R5bGVEaXJ0eX0sY2U9IVl8fFoobSl8fE8mJloobS5zb3VyY2UoKSl8fFoobS50YXJnZXQoKSk7aWYoY2U/KHF8fG0ucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKFkpLE09Um5lKG0sZWspLFMuYmJDYWNoZT1NLFMuYmJDYWNoZVBvc0tleT1IKTpNPVMuYmJDYWNoZSwhJCl7dmFyIHZlPW0uaXNOb2RlKCk7TT1XZCgpLChrLmluY2x1ZGVOb2RlcyYmdmV8fGsuaW5jbHVkZUVkZ2VzJiYhdmUpJiYoay5pbmNsdWRlT3ZlcmxheXM/YjUoTSxTLm92ZXJsYXlCb3VuZHMpOmI1KE0sUy5ib2R5Qm91bmRzKSksay5pbmNsdWRlTGFiZWxzJiYoay5pbmNsdWRlTWFpbkxhYmVscyYmKCFPfHxrLmluY2x1ZGVTb3VyY2VMYWJlbHMmJmsuaW5jbHVkZVRhcmdldExhYmVscyk/YjUoTSxTLmxhYmVsQm91bmRzLmFsbCk6KGsuaW5jbHVkZU1haW5MYWJlbHMmJmI1KE0sUy5sYWJlbEJvdW5kcy5tYWluUm90KSxrLmluY2x1ZGVTb3VyY2VMYWJlbHMmJmI1KE0sUy5sYWJlbEJvdW5kcy5zb3VyY2VSb3QpLGsuaW5jbHVkZVRhcmdldExhYmVscyYmYjUoTSxTLmxhYmVsQm91bmRzLnRhcmdldFJvdCkpKSxNLnc9TS54Mi1NLngxLE0uaD1NLnkyLU0ueTF9cmV0dXJuIE19LGVrPXtpbmNsdWRlTm9kZXM6ITAsaW5jbHVkZUVkZ2VzOiEwLGluY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU1haW5MYWJlbHM6ITAsaW5jbHVkZVNvdXJjZUxhYmVsczohMCxpbmNsdWRlVGFyZ2V0TGFiZWxzOiEwLGluY2x1ZGVPdmVybGF5czohMCxpbmNsdWRlVW5kZXJsYXlzOiEwLGluY2x1ZGVPdXRsaW5lczohMCx1c2VDYWNoZTohMH0sdiQ9YiQoZWspLHckPXEwKGVrKTtyeS5ib3VuZGluZ0JveD1mdW5jdGlvbih4KXt2YXIgbTtpZih0aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0uX3ByaXZhdGUuYmJDYWNoZSE9bnVsbCYmIXRoaXNbMF0uX3ByaXZhdGUuc3R5bGVEaXJ0eSYmKHg9PT12b2lkIDB8fHgudXNlQ2FjaGU9PT12b2lkIDB8fHgudXNlQ2FjaGU9PT0hMCkpeD09PXZvaWQgMD94PWVrOng9dyQoeCksbT1VdCh0aGlzWzBdLHgpO2Vsc2V7bT1XZCgpLHg9eHx8ZWs7dmFyIGs9dyQoeCksUz10aGlzLE09Uy5jeSgpLE89TS5zdHlsZUVuYWJsZWQoKTtpZihPKWZvcih2YXIgTj0wO048Uy5sZW5ndGg7TisrKXt2YXIgJD1TW05dLEg9JC5fcHJpdmF0ZSxxPW0kKCQpLFk9SC5iYkNhY2hlUG9zS2V5PT09cSxaPWsudXNlQ2FjaGUmJlkmJiFILnN0eWxlRGlydHk7JC5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoWil9dGhpcy51cGRhdGVDb21wb3VuZEJvdW5kcygheC51c2VDYWNoZSk7Zm9yKHZhciBjZT0wO2NlPFMubGVuZ3RoO2NlKyspe3ZhciB2ZT1TW2NlXTtiNShtLFV0KHZlLGspKX19cmV0dXJuIG0ueDE9anAobS54MSksbS55MT1qcChtLnkxKSxtLngyPWpwKG0ueDIpLG0ueTI9anAobS55MiksbS53PWpwKG0ueDItbS54MSksbS5oPWpwKG0ueTItbS55MSksbX0scnkuZGlydHlCb3VuZGluZ0JveENhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBtPXRoaXNbeF0uX3ByaXZhdGU7bS5iYkNhY2hlPW51bGwsbS5iYkNhY2hlUG9zS2V5PW51bGwsbS5ib2R5Qm91bmRzPW51bGwsbS5vdmVybGF5Qm91bmRzPW51bGwsbS5sYWJlbEJvdW5kcy5hbGw9bnVsbCxtLmxhYmVsQm91bmRzLnNvdXJjZT1udWxsLG0ubGFiZWxCb3VuZHMudGFyZ2V0PW51bGwsbS5sYWJlbEJvdW5kcy5tYWluPW51bGwsbS5sYWJlbEJvdW5kcy5zb3VyY2VSb3Q9bnVsbCxtLmxhYmVsQm91bmRzLnRhcmdldFJvdD1udWxsLG0ubGFiZWxCb3VuZHMubWFpblJvdD1udWxsLG0uYXJyb3dCb3VuZHMuc291cmNlPW51bGwsbS5hcnJvd0JvdW5kcy50YXJnZXQ9bnVsbCxtLmFycm93Qm91bmRzWyJtaWQtc291cmNlIl09bnVsbCxtLmFycm93Qm91bmRzWyJtaWQtdGFyZ2V0Il09bnVsbH1yZXR1cm4gdGhpcy5lbWl0QW5kTm90aWZ5KCJib3VuZHMiKSx0aGlzfSxyeS5ib3VuZGluZ0JveEF0PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMubm9kZXMoKSxrPXRoaXMuY3koKSxTPWsuaGFzQ29tcG91bmROb2RlcygpLE09ay5jb2xsZWN0aW9uKCk7aWYoUyYmKE09bS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEuaXNQYXJlbnQoKX0pLG09bS5ub3QoTSkpLHNlKHgpKXt2YXIgTz14O3g9ZnVuY3Rpb24oKXtyZXR1cm4gT319dmFyIE49ZnVuY3Rpb24oWSxaKXtyZXR1cm4gWS5fcHJpdmF0ZS5iYkF0T2xkUG9zPXgoWSxaKX0sJD1mdW5jdGlvbihZKXtyZXR1cm4gWS5fcHJpdmF0ZS5iYkF0T2xkUG9zfTtrLnN0YXJ0QmF0Y2goKSxtLmZvckVhY2goTikuc2lsZW50UG9zaXRpb25zKHgpLFMmJihNLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLE0uZGlydHlCb3VuZGluZ0JveENhY2hlKCksTS51cGRhdGVDb21wb3VuZEJvdW5kcyghMCkpO3ZhciBIPWRaKHRoaXMuYm91bmRpbmdCb3goe3VzZUNhY2hlOiExfSkpO3JldHVybiBtLnNpbGVudFBvc2l0aW9ucygkKSxTJiYoTS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxNLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLE0udXBkYXRlQ29tcG91bmRCb3VuZHMoITApKSxrLmVuZEJhdGNoKCksSH0saDguYm91bmRpbmdib3g9aDguYmI9aDguYm91bmRpbmdCb3gsaDgucmVuZGVyZWRCb3VuZGluZ2JveD1oOC5yZW5kZXJlZEJvdW5kaW5nQm94O3ZhciBqbmU9cnksdGssbms7dGs9bms9e307dmFyIHkkPWZ1bmN0aW9uKG0pe20udXBwZXJjYXNlTmFtZT1HdChtLm5hbWUpLG0uYXV0b05hbWU9ImF1dG8iK20udXBwZXJjYXNlTmFtZSxtLmxhYmVsTmFtZT0ibGFiZWwiK20udXBwZXJjYXNlTmFtZSxtLm91dGVyTmFtZT0ib3V0ZXIiK20udXBwZXJjYXNlTmFtZSxtLnVwcGVyY2FzZU91dGVyTmFtZT1HdChtLm91dGVyTmFtZSksdGtbbS5uYW1lXT1mdW5jdGlvbigpe3ZhciBTPXRoaXNbMF0sTT1TLl9wcml2YXRlLE89TS5jeSxOPU8uX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKFMpaWYoTil7aWYoUy5pc1BhcmVudCgpKXJldHVybiBTLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksTVttLmF1dG9OYW1lXXx8MDt2YXIgJD1TLnBzdHlsZShtLm5hbWUpO3N3aXRjaCgkLnN0clZhbHVlKXtjYXNlImxhYmVsIjpyZXR1cm4gUy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoKSxNLnJzdHlsZVttLmxhYmVsTmFtZV18fDA7ZGVmYXVsdDpyZXR1cm4gJC5wZlZhbHVlfX1lbHNlIHJldHVybiAxfSx0a1sib3V0ZXIiK20udXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgUz10aGlzWzBdLE09Uy5fcHJpdmF0ZSxPPU0uY3ksTj1PLl9wcml2YXRlLnN0eWxlRW5hYmxlZDtpZihTKWlmKE4pe3ZhciAkPVNbbS5uYW1lXSgpLEg9Uy5wc3R5bGUoImJvcmRlci13aWR0aCIpLnBmVmFsdWUscT0yKlMucGFkZGluZygpO3JldHVybiAkK0grcX1lbHNlIHJldHVybiAxfSx0a1sicmVuZGVyZWQiK20udXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgUz10aGlzWzBdO2lmKFMpe3ZhciBNPVNbbS5uYW1lXSgpO3JldHVybiBNKnRoaXMuY3koKS56b29tKCl9fSx0a1sicmVuZGVyZWQiK20udXBwZXJjYXNlT3V0ZXJOYW1lXT1mdW5jdGlvbigpe3ZhciBTPXRoaXNbMF07aWYoUyl7dmFyIE09U1ttLm91dGVyTmFtZV0oKTtyZXR1cm4gTSp0aGlzLmN5KCkuem9vbSgpfX19O3kkKHtuYW1lOiJ3aWR0aCJ9KSx5JCh7bmFtZToiaGVpZ2h0In0pLG5rLnBhZGRpbmc9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdLG09eC5fcHJpdmF0ZTtyZXR1cm4geC5pc1BhcmVudCgpPyh4LnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksbS5hdXRvUGFkZGluZyE9PXZvaWQgMD9tLmF1dG9QYWRkaW5nOngucHN0eWxlKCJwYWRkaW5nIikucGZWYWx1ZSk6eC5wc3R5bGUoInBhZGRpbmciKS5wZlZhbHVlfSxuay5wYWRkZWRIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO3JldHVybiB4LmhlaWdodCgpKzIqeC5wYWRkaW5nKCl9LG5rLnBhZGRlZFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHg9dGhpc1swXTtyZXR1cm4geC53aWR0aCgpKzIqeC5wYWRkaW5nKCl9O3ZhciAkbmU9bmssem5lPWZ1bmN0aW9uKG0sayl7aWYobS5pc0VkZ2UoKSlyZXR1cm4gayhtKX0scW5lPWZ1bmN0aW9uKG0sayl7aWYobS5pc0VkZ2UoKSl7dmFyIFM9bS5jeSgpO3JldHVybiBsUyhrKG0pLFMuem9vbSgpLFMucGFuKCkpfX0sSG5lPWZ1bmN0aW9uKG0sayl7aWYobS5pc0VkZ2UoKSl7dmFyIFM9bS5jeSgpLE09Uy5wYW4oKSxPPVMuem9vbSgpO3JldHVybiBrKG0pLm1hcChmdW5jdGlvbihOKXtyZXR1cm4gbFMoTixPLE0pfSl9fSxWbmU9ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVuZGVyZXIoKS5nZXRDb250cm9sUG9pbnRzKG0pfSxVbmU9ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVuZGVyZXIoKS5nZXRTZWdtZW50UG9pbnRzKG0pfSxFST1mdW5jdGlvbihtKXtyZXR1cm4gbS5yZW5kZXJlcigpLmdldFNvdXJjZUVuZHBvaW50KG0pfSxHbmU9ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVuZGVyZXIoKS5nZXRUYXJnZXRFbmRwb2ludChtKX0sS25lPWZ1bmN0aW9uKG0pe3JldHVybiBtLnJlbmRlcmVyKCkuZ2V0RWRnZU1pZHBvaW50KG0pfSx4JD17Y29udHJvbFBvaW50czp7Z2V0OlZuZSxtdWx0OiEwfSxzZWdtZW50UG9pbnRzOntnZXQ6VW5lLG11bHQ6ITB9LHNvdXJjZUVuZHBvaW50OntnZXQ6RUl9LHRhcmdldEVuZHBvaW50OntnZXQ6R25lfSxtaWRwb2ludDp7Z2V0OktuZX19LEFTPWZ1bmN0aW9uKG0pe3JldHVybiJyZW5kZXJlZCIrbVswXS50b1VwcGVyQ2FzZSgpK20uc3Vic3RyKDEpfSxXbmU9T2JqZWN0LmtleXMoeCQpLnJlZHVjZShmdW5jdGlvbih4LG0pe3ZhciBrPXgkW21dLFM9QVMobSk7cmV0dXJuIHhbbV09ZnVuY3Rpb24oKXtyZXR1cm4gem5lKHRoaXMsay5nZXQpfSxrLm11bHQ/eFtTXT1mdW5jdGlvbigpe3JldHVybiBIbmUodGhpcyxrLmdldCl9OnhbU109ZnVuY3Rpb24oKXtyZXR1cm4gcW5lKHRoaXMsay5nZXQpfSx4fSx7fSksVEk9eXQoe30sQm5lLGpuZSwkbmUsV25lKTsvKiEKICAgIAkgIEV2ZW50IG9iamVjdCBiYXNlZCBvbiBqUXVlcnkgZXZlbnRzLCBNSVQgbGljZW5zZQoKICAgIAkgIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlLwogICAgCSAgaHR0cHM6Ly90bGRybGVnYWwuY29tL2xpY2Vuc2UvbWl0LWxpY2Vuc2UKICAgIAkgIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2IvbWFzdGVyL3NyYy9ldmVudC5qcwogICAgCSAgKi92YXIgcms9ZnVuY3Rpb24obSxrKXt0aGlzLnJlY3ljbGUobSxrKX07ZnVuY3Rpb24gaWsoKXtyZXR1cm4hMX1mdW5jdGlvbiBzaygpe3JldHVybiEwfXJrLnByb3RvdHlwZT17aW5zdGFuY2VTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iZXZlbnQifSxyZWN5Y2xlOmZ1bmN0aW9uKG0sayl7aWYodGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWlrLG0hPW51bGwmJm0ucHJldmVudERlZmF1bHQ/KHRoaXMudHlwZT1tLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9bS5kZWZhdWx0UHJldmVudGVkP3NrOmlrKTptIT1udWxsJiZtLnR5cGU/az1tOnRoaXMudHlwZT1tLGshPW51bGwmJih0aGlzLm9yaWdpbmFsRXZlbnQ9ay5vcmlnaW5hbEV2ZW50LHRoaXMudHlwZT1rLnR5cGUhPW51bGw/ay50eXBlOnRoaXMudHlwZSx0aGlzLmN5PWsuY3ksdGhpcy50YXJnZXQ9ay50YXJnZXQsdGhpcy5wb3NpdGlvbj1rLnBvc2l0aW9uLHRoaXMucmVuZGVyZWRQb3NpdGlvbj1rLnJlbmRlcmVkUG9zaXRpb24sdGhpcy5uYW1lc3BhY2U9ay5uYW1lc3BhY2UsdGhpcy5sYXlvdXQ9ay5sYXlvdXQpLHRoaXMuY3khPW51bGwmJnRoaXMucG9zaXRpb24hPW51bGwmJnRoaXMucmVuZGVyZWRQb3NpdGlvbj09bnVsbCl7dmFyIFM9dGhpcy5wb3NpdGlvbixNPXRoaXMuY3kuem9vbSgpLE89dGhpcy5jeS5wYW4oKTt0aGlzLnJlbmRlcmVkUG9zaXRpb249e3g6Uy54Kk0rTy54LHk6Uy55Kk0rTy55fX10aGlzLnRpbWVTdGFtcD1tJiZtLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0scHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1zazt2YXIgbT10aGlzLm9yaWdpbmFsRXZlbnQ7bSYmbS5wcmV2ZW50RGVmYXVsdCYmbS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXNrO3ZhciBtPXRoaXMub3JpZ2luYWxFdmVudDttJiZtLnN0b3BQcm9wYWdhdGlvbiYmbS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1zayx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6aWssaXNQcm9wYWdhdGlvblN0b3BwZWQ6aWssaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6aWt9O3ZhciBrJD0vXihbXi5dKykoXC4oPzpbXi5dKykpPyQvLFluZT0iLioiLEUkPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKG0sayl7cmV0dXJuIG09PT1rfSxldmVudE1hdGNoZXM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oKXt9LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihtKXtyZXR1cm4gbX0sYmVmb3JlRW1pdDpmdW5jdGlvbigpe30sYWZ0ZXJFbWl0OmZ1bmN0aW9uKCl7fSxidWJibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0scGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGNvbnRleHQ6bnVsbH0sVCQ9T2JqZWN0LmtleXMoRSQpLFhuZT17fTtmdW5jdGlvbiBMUygpe2Zvcih2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06WG5lLG09YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsaz0wO2s8VCQubGVuZ3RoO2srKyl7dmFyIFM9VCRba107dGhpc1tTXT14W1NdfHxFJFtTXX10aGlzLmNvbnRleHQ9bXx8dGhpcy5jb250ZXh0LHRoaXMubGlzdGVuZXJzPVtdLHRoaXMuZW1pdHRpbmc9MH12YXIgWDI9TFMucHJvdG90eXBlLEMkPWZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe2FlKE0pJiYoTz1NLE09bnVsbCksJCYmKE49PW51bGw/Tj0kOk49eXQoe30sTiwkKSk7Zm9yKHZhciBIPW5lKFMpP1M6Uy5zcGxpdCgvXHMrLykscT0wO3E8SC5sZW5ndGg7cSsrKXt2YXIgWT1IW3FdO2lmKCFTZShZKSl7dmFyIFo9WS5tYXRjaChrJCk7aWYoWil7dmFyIGNlPVpbMV0sdmU9WlsyXT9aWzJdOm51bGwsbWU9ayhtLFksY2UsdmUsTSxPLE4pO2lmKG1lPT09ITEpYnJlYWt9fX19LFMkPWZ1bmN0aW9uKG0sayl7cmV0dXJuIG0uYWRkRXZlbnRGaWVsZHMobS5jb250ZXh0LGspLG5ldyByayhrLnR5cGUsayl9LE1TPWZ1bmN0aW9uKG0sayxTKXtpZihJZShTKSl7ayhtLFMpO3JldHVybn1lbHNlIGlmKHNlKFMpKXtrKG0sUyQobSxTKSk7cmV0dXJufWZvcih2YXIgTT1uZShTKT9TOlMuc3BsaXQoL1xzKy8pLE89MDtPPE0ubGVuZ3RoO08rKyl7dmFyIE49TVtPXTtpZighU2UoTikpe3ZhciAkPU4ubWF0Y2goayQpO2lmKCQpe3ZhciBIPSRbMV0scT0kWzJdPyRbMl06bnVsbCxZPVMkKG0se3R5cGU6SCxuYW1lc3BhY2U6cSx0YXJnZXQ6bS5jb250ZXh0fSk7ayhtLFkpfX19fTtYMi5vbj1YMi5hZGRMaXN0ZW5lcj1mdW5jdGlvbih4LG0sayxTLE0pe3JldHVybiBDJCh0aGlzLGZ1bmN0aW9uKE8sTiwkLEgscSxZLFope2FlKFkpJiZPLmxpc3RlbmVycy5wdXNoKHtldmVudDpOLGNhbGxiYWNrOlksdHlwZTokLG5hbWVzcGFjZTpILHF1YWxpZmllcjpxLGNvbmY6Wn0pfSx4LG0sayxTLE0pLHRoaXN9LFgyLm9uZT1mdW5jdGlvbih4LG0sayxTKXtyZXR1cm4gdGhpcy5vbih4LG0sayxTLHtvbmU6ITB9KX0sWDIucmVtb3ZlTGlzdGVuZXI9WDIub2ZmPWZ1bmN0aW9uKHgsbSxrLFMpe3ZhciBNPXRoaXM7dGhpcy5lbWl0dGluZyE9PTAmJih0aGlzLmxpc3RlbmVycz16Sih0aGlzLmxpc3RlbmVycykpO2Zvcih2YXIgTz10aGlzLmxpc3RlbmVycyxOPWZ1bmN0aW9uKHEpe3ZhciBZPU9bcV07QyQoTSxmdW5jdGlvbihaLGNlLHZlLG1lLExlLF9lKXtpZigoWS50eXBlPT09dmV8fHg9PT0iKiIpJiYoIW1lJiZZLm5hbWVzcGFjZSE9PSIuKiJ8fFkubmFtZXNwYWNlPT09bWUpJiYoIUxlfHxaLnF1YWxpZmllckNvbXBhcmUoWS5xdWFsaWZpZXIsTGUpKSYmKCFfZXx8WS5jYWxsYmFjaz09PV9lKSlyZXR1cm4gTy5zcGxpY2UocSwxKSwhMX0seCxtLGssUyl9LCQ9Ty5sZW5ndGgtMTskPj0wOyQtLSlOKCQpO3JldHVybiB0aGlzfSxYMi5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW1vdmVMaXN0ZW5lcigiKiIpfSxYMi5lbWl0PVgyLnRyaWdnZXI9ZnVuY3Rpb24oeCxtLGspe3ZhciBTPXRoaXMubGlzdGVuZXJzLE09Uy5sZW5ndGg7cmV0dXJuIHRoaXMuZW1pdHRpbmcrKyxuZShtKXx8KG09W21dKSxNUyh0aGlzLGZ1bmN0aW9uKE8sTil7ayE9bnVsbCYmKFM9W3tldmVudDpOLmV2ZW50LHR5cGU6Ti50eXBlLG5hbWVzcGFjZTpOLm5hbWVzcGFjZSxjYWxsYmFjazprfV0sTT1TLmxlbmd0aCk7Zm9yKHZhciAkPWZ1bmN0aW9uKFkpe3ZhciBaPVNbWV07aWYoWi50eXBlPT09Ti50eXBlJiYoIVoubmFtZXNwYWNlfHxaLm5hbWVzcGFjZT09PU4ubmFtZXNwYWNlfHxaLm5hbWVzcGFjZT09PVluZSkmJk8uZXZlbnRNYXRjaGVzKE8uY29udGV4dCxaLE4pKXt2YXIgY2U9W05dO20hPW51bGwmJnVqKGNlLG0pLE8uYmVmb3JlRW1pdChPLmNvbnRleHQsWixOKSxaLmNvbmYmJlouY29uZi5vbmUmJihPLmxpc3RlbmVycz1PLmxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24oTGUpe3JldHVybiBMZSE9PVp9KSk7dmFyIHZlPU8uY2FsbGJhY2tDb250ZXh0KE8uY29udGV4dCxaLE4pLG1lPVouY2FsbGJhY2suYXBwbHkodmUsY2UpO08uYWZ0ZXJFbWl0KE8uY29udGV4dCxaLE4pLG1lPT09ITEmJihOLnN0b3BQcm9wYWdhdGlvbigpLE4ucHJldmVudERlZmF1bHQoKSl9fSxIPTA7SDxNO0grKykkKEgpO08uYnViYmxlKE8uY29udGV4dCkmJiFOLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJk8ucGFyZW50KE8uY29udGV4dCkuZW1pdChOLG0pfSx4KSx0aGlzLmVtaXR0aW5nLS0sdGhpc307dmFyIFFuZT17cXVhbGlmaWVyQ29tcGFyZTpmdW5jdGlvbihtLGspe3JldHVybiBtPT1udWxsfHxrPT1udWxsP209PW51bGwmJms9PW51bGw6bS5zYW1lVGV4dChrKX0sZXZlbnRNYXRjaGVzOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT1rLnF1YWxpZmllcjtyZXR1cm4gTSE9bnVsbD9tIT09Uy50YXJnZXQmJlUoUy50YXJnZXQpJiZNLm1hdGNoZXMoUy50YXJnZXQpOiEwfSxhZGRFdmVudEZpZWxkczpmdW5jdGlvbihtLGspe2suY3k9bS5jeSgpLGsudGFyZ2V0PW19LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihtLGssUyl7cmV0dXJuIGsucXVhbGlmaWVyIT1udWxsP1MudGFyZ2V0Om19LGJlZm9yZUVtaXQ6ZnVuY3Rpb24obSxrKXtrLmNvbmYmJmsuY29uZi5vbmNlJiZrLmNvbmYub25jZUNvbGxlY3Rpb24ucmVtb3ZlTGlzdGVuZXIoay5ldmVudCxrLnF1YWxpZmllcixrLmNhbGxiYWNrKX0sYnViYmxlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc0NoaWxkKCk/bS5wYXJlbnQoKTptLmN5KCl9fSxtNT1mdW5jdGlvbihtKXtyZXR1cm4gYmUobSk/bmV3IGV5KG0pOm19LF8kPXtjcmVhdGVFbWl0dGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciBtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBrPXRoaXNbbV0sUz1rLl9wcml2YXRlO1MuZW1pdHRlcnx8KFMuZW1pdHRlcj1uZXcgTFMoUW5lLGspKX1yZXR1cm4gdGhpc30sZW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LG9uOmZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bTUoayksTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgTj10aGlzW09dO04uZW1pdHRlcigpLm9uKG0sTSxTKX1yZXR1cm4gdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1tNShrKSxPPTA7Tzx0aGlzLmxlbmd0aDtPKyspe3ZhciBOPXRoaXNbT107Ti5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIobSxNLFMpfXJldHVybiB0aGlzfSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtmb3IodmFyIG09MDttPHRoaXMubGVuZ3RoO20rKyl7dmFyIGs9dGhpc1ttXTtrLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKX1yZXR1cm4gdGhpc30sb25lOmZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bTUoayksTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgTj10aGlzW09dO04uZW1pdHRlcigpLm9uZShtLE0sUyl9cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1tNShrKSxPPTA7Tzx0aGlzLmxlbmd0aDtPKyspe3ZhciBOPXRoaXNbT107Ti5lbWl0dGVyKCkub24obSxNLFMse29uY2U6ITAsb25jZUNvbGxlY3Rpb246dGhpc30pfX0sZW1pdDpmdW5jdGlvbihtLGspe2Zvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgTT10aGlzW1NdO00uZW1pdHRlcigpLmVtaXQobSxrKX1yZXR1cm4gdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihtLGspe2lmKHRoaXMubGVuZ3RoIT09MClyZXR1cm4gdGhpcy5jeSgpLm5vdGlmeShtLHRoaXMpLHRoaXMuZW1pdChtLGspLHRoaXN9fTtmdS5ldmVudEFsaWFzZXNPbihfJCk7dmFyIENJPXtub2RlczpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oayl7cmV0dXJuIGsuaXNOb2RlKCl9KS5maWx0ZXIobSl9LGVkZ2VzOmZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihrKXtyZXR1cm4gay5pc0VkZ2UoKX0pLmZpbHRlcihtKX0sYnlHcm91cDpmdW5jdGlvbigpe2Zvcih2YXIgbT10aGlzLnNwYXduKCksaz10aGlzLnNwYXduKCksUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgTT10aGlzW1NdO00uaXNOb2RlKCk/bS5wdXNoKE0pOmsucHVzaChNKX1yZXR1cm57bm9kZXM6bSxlZGdlczprfX0sZmlsdGVyOmZ1bmN0aW9uKG0sayl7aWYobT09PXZvaWQgMClyZXR1cm4gdGhpcztpZihiZShtKXx8eGUobSkpcmV0dXJuIG5ldyBleShtKS5maWx0ZXIodGhpcyk7aWYoYWUobSkpe2Zvcih2YXIgUz10aGlzLnNwYXduKCksTT10aGlzLE89MDtPPE0ubGVuZ3RoO08rKyl7dmFyIE49TVtPXSwkPWs/bS5hcHBseShrLFtOLE8sTV0pOm0oTixPLE0pOyQmJlMucHVzaChOKX1yZXR1cm4gU31yZXR1cm4gdGhpcy5zcGF3bigpfSxub3Q6ZnVuY3Rpb24obSl7aWYobSl7YmUobSkmJihtPXRoaXMuZmlsdGVyKG0pKTtmb3IodmFyIGs9dGhpcy5zcGF3bigpLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIE09dGhpc1tTXSxPPW0uaGFzKE0pO098fGsucHVzaChNKX1yZXR1cm4ga31lbHNlIHJldHVybiB0aGlzfSxhYnNvbHV0ZUNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLmN5KCk7cmV0dXJuIG0ubXV0YWJsZUVsZW1lbnRzKCkubm90KHRoaXMpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24obSl7aWYoYmUobSkpe3ZhciBrPW07cmV0dXJuIHRoaXMuZmlsdGVyKGspfWZvcih2YXIgUz10aGlzLnNwYXduKCksTT10aGlzLE89bSxOPXRoaXMubGVuZ3RoPG0ubGVuZ3RoLCQ9Tj9NOk8sSD1OP086TSxxPTA7cTwkLmxlbmd0aDtxKyspe3ZhciBZPSRbcV07SC5oYXMoWSkmJlMucHVzaChZKX1yZXR1cm4gU30seG9yOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUuY3k7YmUobSkmJihtPWsuJChtKSk7dmFyIFM9dGhpcy5zcGF3bigpLE09dGhpcyxPPW0sTj1mdW5jdGlvbihILHEpe2Zvcih2YXIgWT0wO1k8SC5sZW5ndGg7WSsrKXt2YXIgWj1IW1ldLGNlPVouX3ByaXZhdGUuZGF0YS5pZCx2ZT1xLmhhc0VsZW1lbnRXaXRoSWQoY2UpO3ZlfHxTLnB1c2goWil9fTtyZXR1cm4gTihNLE8pLE4oTyxNKSxTfSxkaWZmOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUuY3k7YmUobSkmJihtPWsuJChtKSk7dmFyIFM9dGhpcy5zcGF3bigpLE09dGhpcy5zcGF3bigpLE89dGhpcy5zcGF3bigpLE49dGhpcywkPW0sSD1mdW5jdGlvbihZLFosY2Upe2Zvcih2YXIgdmU9MDt2ZTxZLmxlbmd0aDt2ZSsrKXt2YXIgbWU9WVt2ZV0sTGU9bWUuX3ByaXZhdGUuZGF0YS5pZCxfZT1aLmhhc0VsZW1lbnRXaXRoSWQoTGUpO19lP08ubWVyZ2UobWUpOmNlLnB1c2gobWUpfX07cmV0dXJuIEgoTiwkLFMpLEgoJCxOLE0pLHtsZWZ0OlMscmlnaHQ6TSxib3RoOk99fSxhZGQ6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy5fcHJpdmF0ZS5jeTtpZighbSlyZXR1cm4gdGhpcztpZihiZShtKSl7dmFyIFM9bTttPWsubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFMpfWZvcih2YXIgTT10aGlzLnNwYXduU2VsZigpLE89MDtPPG0ubGVuZ3RoO08rKyl7dmFyIE49bVtPXSwkPSF0aGlzLmhhcyhOKTskJiZNLnB1c2goTil9cmV0dXJuIE19LG1lcmdlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUsUz1rLmN5O2lmKCFtKXJldHVybiB0aGlzO2lmKG0mJmJlKG0pKXt2YXIgTT1tO209Uy5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoTSl9Zm9yKHZhciBPPWsubWFwLE49MDtOPG0ubGVuZ3RoO04rKyl7dmFyICQ9bVtOXSxIPSQuX3ByaXZhdGUuZGF0YS5pZCxxPSFPLmhhcyhIKTtpZihxKXt2YXIgWT10aGlzLmxlbmd0aCsrO3RoaXNbWV09JCxPLnNldChILHtlbGU6JCxpbmRleDpZfSl9fXJldHVybiB0aGlzfSx1bm1lcmdlQXQ6ZnVuY3Rpb24obSl7dmFyIGs9dGhpc1ttXSxTPWsuaWQoKSxNPXRoaXMuX3ByaXZhdGUsTz1NLm1hcDt0aGlzW21dPXZvaWQgMCxPLmRlbGV0ZShTKTt2YXIgTj1tPT09dGhpcy5sZW5ndGgtMTtpZih0aGlzLmxlbmd0aD4xJiYhTil7dmFyICQ9dGhpcy5sZW5ndGgtMSxIPXRoaXNbJF0scT1ILl9wcml2YXRlLmRhdGEuaWQ7dGhpc1skXT12b2lkIDAsdGhpc1ttXT1ILE8uc2V0KHEse2VsZTpILGluZGV4Om19KX1yZXR1cm4gdGhpcy5sZW5ndGgtLSx0aGlzfSx1bm1lcmdlT25lOmZ1bmN0aW9uKG0pe209bVswXTt2YXIgaz10aGlzLl9wcml2YXRlLFM9bS5fcHJpdmF0ZS5kYXRhLmlkLE09ay5tYXAsTz1NLmdldChTKTtpZighTylyZXR1cm4gdGhpczt2YXIgTj1PLmluZGV4O3JldHVybiB0aGlzLnVubWVyZ2VBdChOKSx0aGlzfSx1bm1lcmdlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUuY3k7aWYoIW0pcmV0dXJuIHRoaXM7aWYobSYmYmUobSkpe3ZhciBTPW07bT1rLm11dGFibGVFbGVtZW50cygpLmZpbHRlcihTKX1mb3IodmFyIE09MDtNPG0ubGVuZ3RoO00rKyl0aGlzLnVubWVyZ2VPbmUobVtNXSk7cmV0dXJuIHRoaXN9LHVubWVyZ2VCeTpmdW5jdGlvbihtKXtmb3IodmFyIGs9dGhpcy5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIFM9dGhpc1trXTttKFMpJiZ0aGlzLnVubWVyZ2VBdChrKX1yZXR1cm4gdGhpc30sbWFwOmZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPVtdLE09dGhpcyxPPTA7TzxNLmxlbmd0aDtPKyspe3ZhciBOPU1bT10sJD1rP20uYXBwbHkoayxbTixPLE1dKTptKE4sTyxNKTtTLnB1c2goJCl9cmV0dXJuIFN9LHJlZHVjZTpmdW5jdGlvbihtLGspe2Zvcih2YXIgUz1rLE09dGhpcyxPPTA7TzxNLmxlbmd0aDtPKyspUz1tKFMsTVtPXSxPLE0pO3JldHVybiBTfSxtYXg6ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9LTEvMCxNLE89dGhpcyxOPTA7TjxPLmxlbmd0aDtOKyspe3ZhciAkPU9bTl0sSD1rP20uYXBwbHkoayxbJCxOLE9dKTptKCQsTixPKTtIPlMmJihTPUgsTT0kKX1yZXR1cm57dmFsdWU6UyxlbGU6TX19LG1pbjpmdW5jdGlvbihtLGspe2Zvcih2YXIgUz0xLzAsTSxPPXRoaXMsTj0wO048Ty5sZW5ndGg7TisrKXt2YXIgJD1PW05dLEg9az9tLmFwcGx5KGssWyQsTixPXSk6bSgkLE4sTyk7SDxTJiYoUz1ILE09JCl9cmV0dXJue3ZhbHVlOlMsZWxlOk19fX0sUWM9Q0k7UWMudT1RY1sifCJdPVFjWyIrIl09UWMudW5pb249UWMub3I9UWMuYWRkLFFjWyJcXCJdPVFjWyIhIl09UWNbIi0iXT1RYy5kaWZmZXJlbmNlPVFjLnJlbGF0aXZlQ29tcGxlbWVudD1RYy5zdWJ0cmFjdD1RYy5ub3QsUWMubj1RY1siJiJdPVFjWyIuIl09UWMuYW5kPVFjLmludGVyc2VjdGlvbj1RYy5pbnRlcnNlY3QsUWNbIl4iXT1RY1siKCspIl09UWNbIigtKSJdPVFjLnN5bW1ldHJpY0RpZmZlcmVuY2U9UWMuc3ltZGlmZj1RYy54b3IsUWMuZm5GaWx0ZXI9UWMuZmlsdGVyRm49UWMuc3RkRmlsdGVyPVFjLmZpbHRlcixRYy5jb21wbGVtZW50PVFjLmFic2NvbXA9UWMuYWJzb2x1dGVDb21wbGVtZW50O3ZhciBTST17aXNOb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXAoKT09PSJub2RlcyJ9LGlzRWRnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwKCk9PT0iZWRnZXMifSxpc0xvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0VkZ2UoKSYmdGhpcy5zb3VyY2UoKVswXT09PXRoaXMudGFyZ2V0KClbMF19LGlzU2ltcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNFZGdlKCkmJnRoaXMuc291cmNlKClbMF0hPT10aGlzLnRhcmdldCgpWzBdfSxncm91cDpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSlyZXR1cm4gbS5fcHJpdmF0ZS5ncm91cH19LF9JPWZ1bmN0aW9uKG0sayl7dmFyIFM9bS5jeSgpLE09Uy5oYXNDb21wb3VuZE5vZGVzKCk7ZnVuY3Rpb24gTyhZKXt2YXIgWj1ZLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpO3JldHVybiBaLnZhbHVlPT09ImF1dG8iP00/WS56RGVwdGgoKTowOloudmFsdWU9PT0iYm90dG9tIj8tMTpaLnZhbHVlPT09InRvcCI/WDc6MH12YXIgTj1PKG0pLU8oayk7aWYoTiE9PTApcmV0dXJuIE47ZnVuY3Rpb24gJChZKXt2YXIgWj1ZLnBzdHlsZSgiei1pbmRleC1jb21wYXJlIik7cmV0dXJuIFoudmFsdWU9PT0iYXV0byImJlkuaXNOb2RlKCk/MTowfXZhciBIPSQobSktJChrKTtpZihIIT09MClyZXR1cm4gSDt2YXIgcT1tLnBzdHlsZSgiei1pbmRleCIpLnZhbHVlLWsucHN0eWxlKCJ6LWluZGV4IikudmFsdWU7cmV0dXJuIHEhPT0wP3E6bS5wb29sSW5kZXgoKS1rLnBvb2xJbmRleCgpfSxEUz17Zm9yRWFjaDpmdW5jdGlvbihtLGspe2lmKGFlKG0pKWZvcih2YXIgUz10aGlzLmxlbmd0aCxNPTA7TTxTO00rKyl7dmFyIE89dGhpc1tNXSxOPWs/bS5hcHBseShrLFtPLE0sdGhpc10pOm0oTyxNLHRoaXMpO2lmKE49PT0hMSlicmVha31yZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxrPTA7azx0aGlzLmxlbmd0aDtrKyspbS5wdXNoKHRoaXNba10pO3JldHVybiBtfSxzbGljZTpmdW5jdGlvbihtLGspe3ZhciBTPVtdLE09dGhpcy5sZW5ndGg7az09bnVsbCYmKGs9TSksbT09bnVsbCYmKG09MCksbTwwJiYobT1NK20pLGs8MCYmKGs9TStrKTtmb3IodmFyIE89bTtPPj0wJiZPPGsmJk88TTtPKyspUy5wdXNoKHRoaXNbT10pO3JldHVybiB0aGlzLnNwYXduKFMpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxlcTpmdW5jdGlvbihtKXtyZXR1cm4gdGhpc1ttXXx8dGhpcy5zcGF3bigpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzWzBdfHx0aGlzLnNwYXduKCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXXx8dGhpcy5zcGF3bigpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD09PTB9LG5vbmVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHkoKX0sc29ydDpmdW5jdGlvbihtKXtpZighYWUobSkpcmV0dXJuIHRoaXM7dmFyIGs9dGhpcy50b0FycmF5KCkuc29ydChtKTtyZXR1cm4gdGhpcy5zcGF3bihrKX0sc29ydEJ5WkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc29ydChfSSl9LHpEZXB0aDpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSl7dmFyIGs9bS5fcHJpdmF0ZSxTPWsuZ3JvdXA7aWYoUz09PSJub2RlcyIpe3ZhciBNPWsuZGF0YS5wYXJlbnQ/bS5wYXJlbnRzKCkuc2l6ZSgpOjA7cmV0dXJuIG0uaXNQYXJlbnQoKT9NOlg3LTF9ZWxzZXt2YXIgTz1rLnNvdXJjZSxOPWsudGFyZ2V0LCQ9Ty56RGVwdGgoKSxIPU4uekRlcHRoKCk7cmV0dXJuIE1hdGgubWF4KCQsSCwwKX19fX07RFMuZWFjaD1EUy5mb3JFYWNoO3ZhciBKbmU9ZnVuY3Rpb24oKXt2YXIgbT0idW5kZWZpbmVkIixrPSh0eXBlb2YgU3ltYm9sPiJ1Ij8idW5kZWZpbmVkIjp1KFN5bWJvbCkpIT1tJiZ1KFN5bWJvbC5pdGVyYXRvcikhPW07ayYmKERTW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXt2YXIgUz10aGlzLE09e3ZhbHVlOnZvaWQgMCxkb25lOiExfSxPPTAsTj10aGlzLmxlbmd0aDtyZXR1cm4gYih7bmV4dDpmdW5jdGlvbigpe3JldHVybiBPPE4/TS52YWx1ZT1TW08rK106KE0udmFsdWU9dm9pZCAwLE0uZG9uZT0hMCksTX19LFN5bWJvbC5pdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSl9KX07Sm5lKCk7dmFyIFpuZT1xMCh7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExfSksSVM9e2xheW91dERpbWVuc2lvbnM6ZnVuY3Rpb24obSl7bT1abmUobSk7dmFyIGs7aWYoIXRoaXMudGFrZXNVcFNwYWNlKCkpaz17dzowLGg6MH07ZWxzZSBpZihtLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyl7dmFyIFM9dGhpcy5ib3VuZGluZ0JveCgpO2s9e3c6Uy53LGg6Uy5ofX1lbHNlIGs9e3c6dGhpcy5vdXRlcldpZHRoKCksaDp0aGlzLm91dGVySGVpZ2h0KCl9O3JldHVybihrLnc9PT0wfHxrLmg9PT0wKSYmKGsudz1rLmg9MSksa30sbGF5b3V0UG9zaXRpb25zOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT10aGlzLm5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGN0KXtyZXR1cm4hY3QuaXNQYXJlbnQoKX0pLE89dGhpcy5jeSgpLE49ay5lbGVzLCQ9ZnVuY3Rpb24oc3Qpe3JldHVybiBzdC5pZCgpfSxIPU5lKFMsJCk7bS5lbWl0KHt0eXBlOiJsYXlvdXRzdGFydCIsbGF5b3V0Om19KSxtLmFuaW1hdGlvbnM9W107dmFyIHE9ZnVuY3Rpb24oc3QsWWUsbXQpe3ZhciBKZT17eDpZZS54MStZZS53LzIseTpZZS55MStZZS5oLzJ9LEx0PXt4OihtdC54LUplLngpKnN0LHk6KG10LnktSmUueSkqc3R9O3JldHVybnt4OkplLngrTHQueCx5OkplLnkrTHQueX19LFk9ay5zcGFjaW5nRmFjdG9yJiZrLnNwYWNpbmdGYWN0b3IhPT0xLFo9ZnVuY3Rpb24oKXtpZighWSlyZXR1cm4gbnVsbDtmb3IodmFyIHN0PVdkKCksWWU9MDtZZTxNLmxlbmd0aDtZZSsrKXt2YXIgbXQ9TVtZZV0sSmU9SChtdCxZZSk7Ylooc3QsSmUueCxKZS55KX1yZXR1cm4gc3R9LGNlPVooKSx2ZT1OZShmdW5jdGlvbihjdCxzdCl7dmFyIFllPUgoY3Qsc3QpO2lmKFkpe3ZhciBtdD1NYXRoLmFicyhrLnNwYWNpbmdGYWN0b3IpO1llPXEobXQsY2UsWWUpfXJldHVybiBrLnRyYW5zZm9ybSE9bnVsbCYmKFllPWsudHJhbnNmb3JtKGN0LFllKSksWWV9LCQpO2lmKGsuYW5pbWF0ZSl7Zm9yKHZhciBtZT0wO21lPE0ubGVuZ3RoO21lKyspe3ZhciBMZT1NW21lXSxfZT12ZShMZSxtZSksRWU9ay5hbmltYXRlRmlsdGVyPT1udWxsfHxrLmFuaW1hdGVGaWx0ZXIoTGUsbWUpO2lmKEVlKXt2YXIgQmU9TGUuYW5pbWF0aW9uKHtwb3NpdGlvbjpfZSxkdXJhdGlvbjprLmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzprLmFuaW1hdGlvbkVhc2luZ30pO20uYW5pbWF0aW9ucy5wdXNoKEJlKX1lbHNlIExlLnBvc2l0aW9uKF9lKX1pZihrLmZpdCl7dmFyIFJlPU8uYW5pbWF0aW9uKHtmaXQ6e2JvdW5kaW5nQm94Ok4uYm91bmRpbmdCb3hBdCh2ZSkscGFkZGluZzprLnBhZGRpbmd9LGR1cmF0aW9uOmsuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOmsuYW5pbWF0aW9uRWFzaW5nfSk7bS5hbmltYXRpb25zLnB1c2goUmUpfWVsc2UgaWYoay56b29tIT09dm9pZCAwJiZrLnBhbiE9PXZvaWQgMCl7dmFyIFZlPU8uYW5pbWF0aW9uKHt6b29tOmsuem9vbSxwYW46ay5wYW4sZHVyYXRpb246ay5hbmltYXRpb25EdXJhdGlvbixlYXNpbmc6ay5hbmltYXRpb25FYXNpbmd9KTttLmFuaW1hdGlvbnMucHVzaChWZSl9bS5hbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24oY3Qpe3JldHVybiBjdC5wbGF5KCl9KSxtLm9uZSgibGF5b3V0cmVhZHkiLGsucmVhZHkpLG0uZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDptfSksaTguYWxsKG0uYW5pbWF0aW9ucy5tYXAoZnVuY3Rpb24oY3Qpe3JldHVybiBjdC5wcm9taXNlKCl9KSkudGhlbihmdW5jdGlvbigpe20ub25lKCJsYXlvdXRzdG9wIixrLnN0b3ApLG0uZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Om19KX0pfWVsc2UgTS5wb3NpdGlvbnModmUpLGsuZml0JiZPLmZpdChrLmVsZXMsay5wYWRkaW5nKSxrLnpvb20hPW51bGwmJk8uem9vbShrLnpvb20pLGsucGFuJiZPLnBhbihrLnBhbiksbS5vbmUoImxheW91dHJlYWR5IixrLnJlYWR5KSxtLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6bX0pLG0ub25lKCJsYXlvdXRzdG9wIixrLnN0b3ApLG0uZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Om19KTtyZXR1cm4gdGhpc30sbGF5b3V0OmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKTtyZXR1cm4gay5tYWtlTGF5b3V0KHl0KHt9LG0se2VsZXM6dGhpc30pKX19O0lTLmNyZWF0ZUxheW91dD1JUy5tYWtlTGF5b3V0PUlTLmxheW91dDtmdW5jdGlvbiBlcmUoeCxtLGspe3ZhciBTPWsuX3ByaXZhdGUsTT1TLnN0eWxlQ2FjaGU9Uy5zdHlsZUNhY2hlfHxbXSxPO3JldHVybihPPU1beF0pIT1udWxsfHwoTz1NW3hdPW0oaykpLE99ZnVuY3Rpb24gT1MoeCxtKXtyZXR1cm4geD11ZCh4KSxmdW5jdGlvbihTKXtyZXR1cm4gZXJlKHgsbSxTKX19ZnVuY3Rpb24gTlMoeCxtKXt4PXVkKHgpO3ZhciBrPWZ1bmN0aW9uKE0pe3JldHVybiBtLmNhbGwoTSl9O3JldHVybiBmdW5jdGlvbigpe3ZhciBNPXRoaXNbMF07aWYoTSlyZXR1cm4gZXJlKHgsayxNKX19dmFyIEgwPXtyZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy5jeSgpLFM9ay5yZW5kZXJlcigpLE09ay5zdHlsZUVuYWJsZWQoKTtyZXR1cm4gUyYmTSYmUy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodGhpcyxtKSx0aGlzfSxkaXJ0eVN0eWxlQ2FjaGU6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLmN5KCksaz1mdW5jdGlvbihPKXtyZXR1cm4gTy5fcHJpdmF0ZS5zdHlsZUNhY2hlPW51bGx9O2lmKG0uaGFzQ29tcG91bmROb2RlcygpKXt2YXIgUztTPXRoaXMuc3Bhd25TZWxmKCkubWVyZ2UodGhpcy5kZXNjZW5kYW50cygpKS5tZXJnZSh0aGlzLnBhcmVudHMoKSksUy5tZXJnZShTLmNvbm5lY3RlZEVkZ2VzKCkpLFMuZm9yRWFjaChrKX1lbHNlIHRoaXMuZm9yRWFjaChmdW5jdGlvbihNKXtrKE0pLE0uY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGspfSk7cmV0dXJuIHRoaXN9LHVwZGF0ZVN0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUuY3k7aWYoIWsuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7aWYoay5iYXRjaGluZygpKXt2YXIgUz1rLl9wcml2YXRlLmJhdGNoU3R5bGVFbGVzO3JldHVybiBTLm1lcmdlKHRoaXMpLHRoaXN9dmFyIE09ay5oYXNDb21wb3VuZE5vZGVzKCksTz10aGlzO209ISEobXx8bT09PXZvaWQgMCksTSYmKE89dGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKSk7dmFyIE49TztyZXR1cm4gbT9OLmVtaXRBbmROb3RpZnkoInN0eWxlIik6Ti5lbWl0KCJzdHlsZSIpLE8uZm9yRWFjaChmdW5jdGlvbigkKXtyZXR1cm4gJC5fcHJpdmF0ZS5zdHlsZURpcnR5PSEwfSksdGhpc30sY2xlYW5TdHlsZTpmdW5jdGlvbigpe3ZhciBtPXRoaXMuY3koKTtpZihtLnN0eWxlRW5hYmxlZCgpKWZvcih2YXIgaz0wO2s8dGhpcy5sZW5ndGg7aysrKXt2YXIgUz10aGlzW2tdO1MuX3ByaXZhdGUuc3R5bGVEaXJ0eSYmKFMuX3ByaXZhdGUuc3R5bGVEaXJ0eT0hMSxtLnN0eWxlKCkuYXBwbHkoUykpfX0scGFyc2VkU3R5bGU6ZnVuY3Rpb24obSl7dmFyIGs9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLFM9dGhpc1swXSxNPVMuY3koKTtpZihNLnN0eWxlRW5hYmxlZCgpJiZTKXt0aGlzLmNsZWFuU3R5bGUoKTt2YXIgTz1TLl9wcml2YXRlLnN0eWxlW21dO3JldHVybiBPPz8oaz9NLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KG0pOm51bGwpfX0sbnVtZXJpY1N0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXNbMF07aWYoay5jeSgpLnN0eWxlRW5hYmxlZCgpJiZrKXt2YXIgUz1rLnBzdHlsZShtKTtyZXR1cm4gUy5wZlZhbHVlIT09dm9pZCAwP1MucGZWYWx1ZTpTLnZhbHVlfX0sbnVtZXJpY1N0eWxlVW5pdHM6ZnVuY3Rpb24obSl7dmFyIGs9dGhpc1swXTtpZihrLmN5KCkuc3R5bGVFbmFibGVkKCkmJmspcmV0dXJuIGsucHN0eWxlKG0pLnVuaXRzfSxyZW5kZXJlZFN0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKTtpZighay5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpczt2YXIgUz10aGlzWzBdO2lmKFMpcmV0dXJuIGsuc3R5bGUoKS5nZXRSZW5kZXJlZFN0eWxlKFMsbSl9LHN0eWxlOmZ1bmN0aW9uKG0sayl7dmFyIFM9dGhpcy5jeSgpO2lmKCFTLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBNPSExLE89Uy5zdHlsZSgpO2lmKHNlKG0pKXt2YXIgTj1tO08uYXBwbHlCeXBhc3ModGhpcyxOLE0pLHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKX1lbHNlIGlmKGJlKG0pKWlmKGs9PT12b2lkIDApe3ZhciAkPXRoaXNbMF07cmV0dXJuICQ/Ty5nZXRTdHlsZVByb3BlcnR5VmFsdWUoJCxtKTp2b2lkIDB9ZWxzZSBPLmFwcGx5QnlwYXNzKHRoaXMsbSxrLE0pLHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKTtlbHNlIGlmKG09PT12b2lkIDApe3ZhciBIPXRoaXNbMF07cmV0dXJuIEg/Ty5nZXRSYXdTdHlsZShIKTp2b2lkIDB9cmV0dXJuIHRoaXN9LHJlbW92ZVN0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKTtpZighay5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpczt2YXIgUz0hMSxNPWsuc3R5bGUoKSxPPXRoaXM7aWYobT09PXZvaWQgMClmb3IodmFyIE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXTtNLnJlbW92ZUFsbEJ5cGFzc2VzKCQsUyl9ZWxzZXttPW0uc3BsaXQoL1xzKy8pO2Zvcih2YXIgSD0wO0g8Ty5sZW5ndGg7SCsrKXt2YXIgcT1PW0hdO00ucmVtb3ZlQnlwYXNzZXMocSxtLFMpfX1yZXR1cm4gdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpLHRoaXN9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jc3MoImRpc3BsYXkiLCJlbGVtZW50IiksdGhpc30saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcygiZGlzcGxheSIsIm5vbmUiKSx0aGlzfSxlZmZlY3RpdmVPcGFjaXR5OmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5jeSgpO2lmKCFtLnN0eWxlRW5hYmxlZCgpKXJldHVybiAxO3ZhciBrPW0uaGFzQ29tcG91bmROb2RlcygpLFM9dGhpc1swXTtpZihTKXt2YXIgTT1TLl9wcml2YXRlLE89Uy5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtpZighaylyZXR1cm4gTzt2YXIgTj1NLmRhdGEucGFyZW50P1MucGFyZW50cygpOm51bGw7aWYoTilmb3IodmFyICQ9MDskPE4ubGVuZ3RoOyQrKyl7dmFyIEg9TlskXSxxPUgucHN0eWxlKCJvcGFjaXR5IikudmFsdWU7Tz1xKk99cmV0dXJuIE99fSx0cmFuc3BhcmVudDpmdW5jdGlvbigpe3ZhciBtPXRoaXMuY3koKTtpZighbS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgaz10aGlzWzBdLFM9ay5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihrKXJldHVybiBTP2suZWZmZWN0aXZlT3BhY2l0eSgpPT09MDprLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlPT09MH0sYmFja2dyb3VuZGluZzpmdW5jdGlvbigpe3ZhciBtPXRoaXMuY3koKTtpZighbS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgaz10aGlzWzBdO3JldHVybiEhay5fcHJpdmF0ZS5iYWNrZ3JvdW5kaW5nfX07ZnVuY3Rpb24gQUkoeCxtKXt2YXIgaz14Ll9wcml2YXRlLFM9ay5kYXRhLnBhcmVudD94LnBhcmVudHMoKTpudWxsO2lmKFMpZm9yKHZhciBNPTA7TTxTLmxlbmd0aDtNKyspe3ZhciBPPVNbTV07aWYoIW0oTykpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTEkoeCl7dmFyIG09eC5vayxrPXguZWRnZU9rVmlhTm9kZXx8eC5vayxTPXgucGFyZW50T2t8fHgub2s7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIE09dGhpcy5jeSgpO2lmKCFNLnN0eWxlRW5hYmxlZCgpKXJldHVybiEwO3ZhciBPPXRoaXNbMF0sTj1NLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihPKXt2YXIgJD1PLl9wcml2YXRlO2lmKCFtKE8pKXJldHVybiExO2lmKE8uaXNOb2RlKCkpcmV0dXJuIU58fEFJKE8sUyk7dmFyIEg9JC5zb3VyY2UscT0kLnRhcmdldDtyZXR1cm4gayhIKSYmKCFOfHxBSShILGspKSYmKEg9PT1xfHxrKHEpJiYoIU58fEFJKHEsaykpKX19fXZhciBmOD1PUygiZWxlVGFrZXNVcFNwYWNlIixmdW5jdGlvbih4KXtyZXR1cm4geC5wc3R5bGUoImRpc3BsYXkiKS52YWx1ZT09PSJlbGVtZW50IiYmeC53aWR0aCgpIT09MCYmKHguaXNOb2RlKCk/eC5oZWlnaHQoKSE9PTA6ITApfSk7SDAudGFrZXNVcFNwYWNlPU5TKCJ0YWtlc1VwU3BhY2UiLExJKHtvazpmOH0pKTt2YXIgdHJlPU9TKCJlbGVJbnRlcmFjdGl2ZSIsZnVuY3Rpb24oeCl7cmV0dXJuIHgucHN0eWxlKCJldmVudHMiKS52YWx1ZT09PSJ5ZXMiJiZ4LnBzdHlsZSgidmlzaWJpbGl0eSIpLnZhbHVlPT09InZpc2libGUiJiZmOCh4KX0pLG5yZT1PUygicGFyZW50SW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnBzdHlsZSgidmlzaWJpbGl0eSIpLnZhbHVlPT09InZpc2libGUiJiZmOCh4KX0pO0gwLmludGVyYWN0aXZlPU5TKCJpbnRlcmFjdGl2ZSIsTEkoe29rOnRyZSxwYXJlbnRPazpucmUsZWRnZU9rVmlhTm9kZTpmOH0pKSxIMC5ub25pbnRlcmFjdGl2ZT1mdW5jdGlvbigpe3ZhciB4PXRoaXNbMF07aWYoeClyZXR1cm4heC5pbnRlcmFjdGl2ZSgpfTt2YXIgcnJlPU9TKCJlbGVWaXNpYmxlIixmdW5jdGlvbih4KXtyZXR1cm4geC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmeC5wc3R5bGUoIm9wYWNpdHkiKS5wZlZhbHVlIT09MCYmZjgoeCl9KSxpcmU9Zjg7SDAudmlzaWJsZT1OUygidmlzaWJsZSIsTEkoe29rOnJyZSxlZGdlT2tWaWFOb2RlOmlyZX0pKSxIMC5oaWRkZW49ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO2lmKHgpcmV0dXJuIXgudmlzaWJsZSgpfSxIMC5pc0J1bmRsZWRCZXppZXI9TlMoImlzQnVuZGxlZEJlemllciIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpPyF0aGlzLnJlbW92ZWQoKSYmdGhpcy5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWU9PT0iYmV6aWVyIiYmdGhpcy50YWtlc1VwU3BhY2UoKTohMX0pLEgwLmJ5cGFzcz1IMC5jc3M9SDAuc3R5bGUsSDAucmVuZGVyZWRDc3M9SDAucmVuZGVyZWRTdHlsZSxIMC5yZW1vdmVCeXBhc3M9SDAucmVtb3ZlQ3NzPUgwLnJlbW92ZVN0eWxlLEgwLnBzdHlsZT1IMC5wYXJzZWRTdHlsZTt2YXIgWGQ9e307ZnVuY3Rpb24gUFMoeCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09YXJndW1lbnRzLGs9W107aWYobS5sZW5ndGg9PT0yKXt2YXIgUz1tWzBdLE09bVsxXTt0aGlzLm9uKHguZXZlbnQsUyxNKX1lbHNlIGlmKG0ubGVuZ3RoPT09MSYmYWUobVswXSkpe3ZhciBPPW1bMF07dGhpcy5vbih4LmV2ZW50LE8pfWVsc2UgaWYobS5sZW5ndGg9PT0wfHxtLmxlbmd0aD09PTEmJm5lKG1bMF0pKXtmb3IodmFyIE49bS5sZW5ndGg9PT0xP21bMF06bnVsbCwkPTA7JDx0aGlzLmxlbmd0aDskKyspe3ZhciBIPXRoaXNbJF0scT0heC5hYmxlRmllbGR8fEguX3ByaXZhdGVbeC5hYmxlRmllbGRdLFk9SC5fcHJpdmF0ZVt4LmZpZWxkXSE9eC52YWx1ZTtpZih4Lm92ZXJyaWRlQWJsZSl7dmFyIFo9eC5vdmVycmlkZUFibGUoSCk7aWYoWiE9PXZvaWQgMCYmKHE9WiwhWikpcmV0dXJuIHRoaXN9cSYmKEguX3ByaXZhdGVbeC5maWVsZF09eC52YWx1ZSxZJiZrLnB1c2goSCkpfXZhciBjZT10aGlzLnNwYXduKGspO2NlLnVwZGF0ZVN0eWxlKCksY2UuZW1pdCh4LmV2ZW50KSxOJiZjZS5lbWl0KE4pfXJldHVybiB0aGlzfX1mdW5jdGlvbiBkOCh4KXtYZFt4LmZpZWxkXT1mdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSl7aWYoeC5vdmVycmlkZUZpZWxkKXt2YXIgaz14Lm92ZXJyaWRlRmllbGQobSk7aWYoayE9PXZvaWQgMClyZXR1cm4ga31yZXR1cm4gbS5fcHJpdmF0ZVt4LmZpZWxkXX19LFhkW3gub25dPVBTKHtldmVudDp4Lm9uLGZpZWxkOnguZmllbGQsYWJsZUZpZWxkOnguYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp4Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMH0pLFhkW3gub2ZmXT1QUyh7ZXZlbnQ6eC5vZmYsZmllbGQ6eC5maWVsZCxhYmxlRmllbGQ6eC5hYmxlRmllbGQsb3ZlcnJpZGVBYmxlOngub3ZlcnJpZGVBYmxlLHZhbHVlOiExfSl9ZDgoe2ZpZWxkOiJsb2NrZWQiLG92ZXJyaWRlRmllbGQ6ZnVuY3Rpb24obSl7cmV0dXJuIG0uY3koKS5hdXRvbG9jaygpPyEwOnZvaWQgMH0sb246ImxvY2siLG9mZjoidW5sb2NrIn0pLGQ4KHtmaWVsZDoiZ3JhYmJhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKG0pe3JldHVybiBtLmN5KCkuYXV0b3VuZ3JhYmlmeSgpfHxtLnBhbm5hYmxlKCk/ITE6dm9pZCAwfSxvbjoiZ3JhYmlmeSIsb2ZmOiJ1bmdyYWJpZnkifSksZDgoe2ZpZWxkOiJzZWxlY3RlZCIsYWJsZUZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUFibGU6ZnVuY3Rpb24obSl7cmV0dXJuIG0uY3koKS5hdXRvdW5zZWxlY3RpZnkoKT8hMTp2b2lkIDB9LG9uOiJzZWxlY3QiLG9mZjoidW5zZWxlY3QifSksZDgoe2ZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKG0pe3JldHVybiBtLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSxvbjoic2VsZWN0aWZ5IixvZmY6InVuc2VsZWN0aWZ5In0pLFhkLmRlc2VsZWN0PVhkLnVuc2VsZWN0LFhkLmdyYWJiZWQ9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO2lmKHgpcmV0dXJuIHguX3ByaXZhdGUuZ3JhYmJlZH0sZDgoe2ZpZWxkOiJhY3RpdmUiLG9uOiJhY3RpdmF0ZSIsb2ZmOiJ1bmFjdGl2YXRlIn0pLGQ4KHtmaWVsZDoicGFubmFibGUiLG9uOiJwYW5pZnkiLG9mZjoidW5wYW5pZnkifSksWGQuaW5hY3RpdmU9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO2lmKHgpcmV0dXJuIXguX3ByaXZhdGUuYWN0aXZlfTt2YXIgazE9e30sQSQ9ZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKFMpe2Zvcih2YXIgTT10aGlzLE89W10sTj0wO048TS5sZW5ndGg7TisrKXt2YXIgJD1NW05dO2lmKCQuaXNOb2RlKCkpe2Zvcih2YXIgSD0hMSxxPSQuY29ubmVjdGVkRWRnZXMoKSxZPTA7WTxxLmxlbmd0aDtZKyspe3ZhciBaPXFbWV0sY2U9Wi5zb3VyY2UoKSx2ZT1aLnRhcmdldCgpO2lmKG0ubm9JbmNvbWluZ0VkZ2VzJiZ2ZT09PSQmJmNlIT09JHx8bS5ub091dGdvaW5nRWRnZXMmJmNlPT09JCYmdmUhPT0kKXtIPSEwO2JyZWFrfX1IfHxPLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKE8sITApLmZpbHRlcihTKX19LEwkPWZ1bmN0aW9uKG0pe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIFM9dGhpcyxNPVtdLE89MDtPPFMubGVuZ3RoO08rKyl7dmFyIE49U1tPXTtpZihOLmlzTm9kZSgpKWZvcih2YXIgJD1OLmNvbm5lY3RlZEVkZ2VzKCksSD0wO0g8JC5sZW5ndGg7SCsrKXt2YXIgcT0kW0hdLFk9cS5zb3VyY2UoKSxaPXEudGFyZ2V0KCk7bS5vdXRnb2luZyYmWT09PU4/KE0ucHVzaChxKSxNLnB1c2goWikpOm0uaW5jb21pbmcmJlo9PT1OJiYoTS5wdXNoKHEpLE0ucHVzaChZKSl9fXJldHVybiB0aGlzLnNwYXduKE0sITApLmZpbHRlcihrKX19LE0kPWZ1bmN0aW9uKG0pe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIFM9dGhpcyxNPVtdLE89e307Oyl7dmFyIE49bS5vdXRnb2luZz9TLm91dGdvZXJzKCk6Uy5pbmNvbWVycygpO2lmKE4ubGVuZ3RoPT09MClicmVhaztmb3IodmFyICQ9ITEsSD0wO0g8Ti5sZW5ndGg7SCsrKXt2YXIgcT1OW0hdLFk9cS5pZCgpO09bWV18fChPW1ldPSEwLE0ucHVzaChxKSwkPSEwKX1pZighJClicmVhaztTPU59cmV0dXJuIHRoaXMuc3Bhd24oTSwhMCkuZmlsdGVyKGspfX07azEuY2xlYXJUcmF2ZXJzYWxDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgeD0wO3g8dGhpcy5sZW5ndGg7eCsrKXRoaXNbeF0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGU9bnVsbH0seXQoazEse3Jvb3RzOkEkKHtub0luY29taW5nRWRnZXM6ITB9KSxsZWF2ZXM6QSQoe25vT3V0Z29pbmdFZGdlczohMH0pLG91dGdvZXJzOlJwKEwkKHtvdXRnb2luZzohMH0pLCJvdXRnb2VycyIpLHN1Y2Nlc3NvcnM6TSQoe291dGdvaW5nOiEwfSksaW5jb21lcnM6UnAoTCQoe2luY29taW5nOiEwfSksImluY29tZXJzIikscHJlZGVjZXNzb3JzOk0kKHtpbmNvbWluZzohMH0pfSkseXQoazEse25laWdoYm9yaG9vZDpScChmdW5jdGlvbih4KXtmb3IodmFyIG09W10saz10aGlzLm5vZGVzKCksUz0wO1M8ay5sZW5ndGg7UysrKWZvcih2YXIgTT1rW1NdLE89TS5jb25uZWN0ZWRFZGdlcygpLE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXSxIPSQuc291cmNlKCkscT0kLnRhcmdldCgpLFk9TT09PUg/cTpIO1kubGVuZ3RoPjAmJm0ucHVzaChZWzBdKSxtLnB1c2goJFswXSl9cmV0dXJuIHRoaXMuc3Bhd24obSwhMCkuZmlsdGVyKHgpfSwibmVpZ2hib3Job29kIiksY2xvc2VkTmVpZ2hib3Job29kOmZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLm5laWdoYm9yaG9vZCgpLmFkZCh0aGlzKS5maWx0ZXIobSl9LG9wZW5OZWlnaGJvcmhvb2Q6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKG0pfX0pLGsxLm5laWdoYm91cmhvb2Q9azEubmVpZ2hib3Job29kLGsxLmNsb3NlZE5laWdoYm91cmhvb2Q9azEuY2xvc2VkTmVpZ2hib3Job29kLGsxLm9wZW5OZWlnaGJvdXJob29kPWsxLm9wZW5OZWlnaGJvcmhvb2QseXQoazEse3NvdXJjZTpScChmdW5jdGlvbihtKXt2YXIgaz10aGlzWzBdLFM7cmV0dXJuIGsmJihTPWsuX3ByaXZhdGUuc291cmNlfHxrLmN5KCkuY29sbGVjdGlvbigpKSxTJiZtP1MuZmlsdGVyKG0pOlN9LCJzb3VyY2UiKSx0YXJnZXQ6UnAoZnVuY3Rpb24obSl7dmFyIGs9dGhpc1swXSxTO3JldHVybiBrJiYoUz1rLl9wcml2YXRlLnRhcmdldHx8ay5jeSgpLmNvbGxlY3Rpb24oKSksUyYmbT9TLmZpbHRlcihtKTpTfSwidGFyZ2V0Iiksc291cmNlczpEJCh7YXR0cjoic291cmNlIn0pLHRhcmdldHM6RCQoe2F0dHI6InRhcmdldCJ9KX0pO2Z1bmN0aW9uIEQkKHgpe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIFM9W10sTT0wO008dGhpcy5sZW5ndGg7TSsrKXt2YXIgTz10aGlzW01dLE49Ty5fcHJpdmF0ZVt4LmF0dHJdO04mJlMucHVzaChOKX1yZXR1cm4gdGhpcy5zcGF3bihTLCEwKS5maWx0ZXIoayl9fXl0KGsxLHtlZGdlc1dpdGg6UnAoSSQoKSwiZWRnZXNXaXRoIiksZWRnZXNUbzpScChJJCh7dGhpc0lzU3JjOiEwfSksImVkZ2VzVG8iKX0pO2Z1bmN0aW9uIEkkKHgpe3JldHVybiBmdW5jdGlvbihrKXt2YXIgUz1bXSxNPXRoaXMuX3ByaXZhdGUuY3ksTz14fHx7fTtiZShrKSYmKGs9TS4kKGspKTtmb3IodmFyIE49MDtOPGsubGVuZ3RoO04rKylmb3IodmFyICQ9a1tOXS5fcHJpdmF0ZS5lZGdlcyxIPTA7SDwkLmxlbmd0aDtIKyspe3ZhciBxPSRbSF0sWT1xLl9wcml2YXRlLmRhdGEsWj10aGlzLmhhc0VsZW1lbnRXaXRoSWQoWS5zb3VyY2UpJiZrLmhhc0VsZW1lbnRXaXRoSWQoWS50YXJnZXQpLGNlPWsuaGFzRWxlbWVudFdpdGhJZChZLnNvdXJjZSkmJnRoaXMuaGFzRWxlbWVudFdpdGhJZChZLnRhcmdldCksdmU9Wnx8Y2U7dmUmJigoTy50aGlzSXNTcmN8fE8udGhpc0lzVGd0KSYmKE8udGhpc0lzU3JjJiYhWnx8Ty50aGlzSXNUZ3QmJiFjZSl8fFMucHVzaChxKSl9cmV0dXJuIHRoaXMuc3Bhd24oUywhMCl9fXl0KGsxLHtjb25uZWN0ZWRFZGdlczpScChmdW5jdGlvbih4KXtmb3IodmFyIG09W10saz10aGlzLFM9MDtTPGsubGVuZ3RoO1MrKyl7dmFyIE09a1tTXTtpZihNLmlzTm9kZSgpKWZvcih2YXIgTz1NLl9wcml2YXRlLmVkZ2VzLE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXTttLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKG0sITApLmZpbHRlcih4KX0sImNvbm5lY3RlZEVkZ2VzIiksY29ubmVjdGVkTm9kZXM6UnAoZnVuY3Rpb24oeCl7Zm9yKHZhciBtPVtdLGs9dGhpcyxTPTA7UzxrLmxlbmd0aDtTKyspe3ZhciBNPWtbU107TS5pc0VkZ2UoKSYmKG0ucHVzaChNLnNvdXJjZSgpWzBdKSxtLnB1c2goTS50YXJnZXQoKVswXSkpfXJldHVybiB0aGlzLnNwYXduKG0sITApLmZpbHRlcih4KX0sImNvbm5lY3RlZE5vZGVzIikscGFyYWxsZWxFZGdlczpScChPJCgpLCJwYXJhbGxlbEVkZ2VzIiksY29kaXJlY3RlZEVkZ2VzOlJwKE8kKHtjb2RpcmVjdGVkOiEwfSksImNvZGlyZWN0ZWRFZGdlcyIpfSk7ZnVuY3Rpb24gTyQoeCl7dmFyIG09e2NvZGlyZWN0ZWQ6ITF9O3JldHVybiB4PXl0KHt9LG0seCksZnVuY3Rpb24oUyl7Zm9yKHZhciBNPVtdLE89dGhpcy5lZGdlcygpLE49eCwkPTA7JDxPLmxlbmd0aDskKyspZm9yKHZhciBIPU9bJF0scT1ILl9wcml2YXRlLFk9cS5zb3VyY2UsWj1ZLl9wcml2YXRlLmRhdGEuaWQsY2U9cS5kYXRhLnRhcmdldCx2ZT1ZLl9wcml2YXRlLmVkZ2VzLG1lPTA7bWU8dmUubGVuZ3RoO21lKyspe3ZhciBMZT12ZVttZV0sX2U9TGUuX3ByaXZhdGUuZGF0YSxFZT1fZS50YXJnZXQsQmU9X2Uuc291cmNlLFJlPUVlPT09Y2UmJkJlPT09WixWZT1aPT09RWUmJmNlPT09QmU7KE4uY29kaXJlY3RlZCYmUmV8fCFOLmNvZGlyZWN0ZWQmJihSZXx8VmUpKSYmTS5wdXNoKExlKX1yZXR1cm4gdGhpcy5zcGF3bihNLCEwKS5maWx0ZXIoUyl9fXl0KGsxLHtjb21wb25lbnRzOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMsUz1rLmN5KCksTT1TLmNvbGxlY3Rpb24oKSxPPW09PW51bGw/ay5ub2RlcygpOm0ubm9kZXMoKSxOPVtdO20hPW51bGwmJk8uZW1wdHkoKSYmKE89bS5zb3VyY2VzKCkpO3ZhciAkPWZ1bmN0aW9uKFksWil7TS5tZXJnZShZKSxPLnVubWVyZ2UoWSksWi5tZXJnZShZKX07aWYoTy5lbXB0eSgpKXJldHVybiBrLnNwYXduKCk7dmFyIEg9ZnVuY3Rpb24oKXt2YXIgWT1TLmNvbGxlY3Rpb24oKTtOLnB1c2goWSk7dmFyIFo9T1swXTskKFosWSksay5iZnMoe2RpcmVjdGVkOiExLHJvb3RzOlosdmlzaXQ6ZnVuY3Rpb24odmUpe3JldHVybiAkKHZlLFkpfX0pLFkuZm9yRWFjaChmdW5jdGlvbihjZSl7Y2UuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtrLmhhcyh2ZSkmJlkuaGFzKHZlLnNvdXJjZSgpKSYmWS5oYXModmUudGFyZ2V0KCkpJiZZLm1lcmdlKHZlKX0pfSl9O2RvIEgoKTt3aGlsZShPLmxlbmd0aD4wKTtyZXR1cm4gTn0sY29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIG09dGhpc1swXTtyZXR1cm4gbS5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMobSlbMF19fSksazEuY29tcG9uZW50c09mPWsxLmNvbXBvbmVudHM7dmFyIFYwPWZ1bmN0aW9uKG0sayl7dmFyIFM9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLE09YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExO2lmKG09PT12b2lkIDApe2NoKCJBIGNvbGxlY3Rpb24gbXVzdCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JlIik7cmV0dXJufXZhciBPPW5ldyB3bSxOPSExO2lmKCFrKWs9W107ZWxzZSBpZihrLmxlbmd0aD4wJiZzZShrWzBdKSYmIVUoa1swXSkpe049ITA7Zm9yKHZhciAkPVtdLEg9bmV3IFE3LHE9MCxZPWsubGVuZ3RoO3E8WTtxKyspe3ZhciBaPWtbcV07Wi5kYXRhPT1udWxsJiYoWi5kYXRhPXt9KTt2YXIgY2U9Wi5kYXRhO2lmKGNlLmlkPT1udWxsKWNlLmlkPW9qKCk7ZWxzZSBpZihtLmhhc0VsZW1lbnRXaXRoSWQoY2UuaWQpfHxILmhhcyhjZS5pZCkpY29udGludWU7dmFyIHZlPW5ldyB1UyhtLFosITEpOyQucHVzaCh2ZSksSC5hZGQoY2UuaWQpfWs9JH10aGlzLmxlbmd0aD0wO2Zvcih2YXIgbWU9MCxMZT1rLmxlbmd0aDttZTxMZTttZSsrKXt2YXIgX2U9a1ttZV1bMF07aWYoX2UhPW51bGwpe3ZhciBFZT1fZS5fcHJpdmF0ZS5kYXRhLmlkOyghU3x8IU8uaGFzKEVlKSkmJihTJiZPLnNldChFZSx7aW5kZXg6dGhpcy5sZW5ndGgsZWxlOl9lfSksdGhpc1t0aGlzLmxlbmd0aF09X2UsdGhpcy5sZW5ndGgrKyl9fXRoaXMuX3ByaXZhdGU9e2VsZXM6dGhpcyxjeTptLGdldCBtYXAoKXtyZXR1cm4gdGhpcy5sYXp5TWFwPT1udWxsJiZ0aGlzLnJlYnVpbGRNYXAoKSx0aGlzLmxhenlNYXB9LHNldCBtYXAoQmUpe3RoaXMubGF6eU1hcD1CZX0scmVidWlsZE1hcDpmdW5jdGlvbigpe2Zvcih2YXIgUmU9dGhpcy5sYXp5TWFwPW5ldyB3bSxWZT10aGlzLmVsZXMsY3Q9MDtjdDxWZS5sZW5ndGg7Y3QrKyl7dmFyIHN0PVZlW2N0XTtSZS5zZXQoc3QuaWQoKSx7aW5kZXg6Y3QsZWxlOnN0fSl9fX0sUyYmKHRoaXMuX3ByaXZhdGUubWFwPU8pLE4mJiFNJiZ0aGlzLnJlc3RvcmUoKX0sbmw9dVMucHJvdG90eXBlPVYwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEFycmF5LnByb3RvdHlwZSk7bmwuaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iY29sbGVjdGlvbiJ9LG5sLnNwYXduPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIG5ldyBWMCh0aGlzLmN5KCkseCxtKX0sbmwuc3Bhd25TZWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Bhd24odGhpcyl9LG5sLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9LG5sLnJlbmRlcmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3kucmVuZGVyZXIoKX0sbmwuZWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzWzBdfSxubC5jb2xsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIEZlKHRoaXMpP3RoaXM6bmV3IFYwKHRoaXMuX3ByaXZhdGUuY3ksW3RoaXNdKX0sbmwudW5pcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWMCh0aGlzLl9wcml2YXRlLmN5LHRoaXMsITApfSxubC5oYXNFbGVtZW50V2l0aElkPWZ1bmN0aW9uKHgpe3JldHVybiB4PSIiK3gsdGhpcy5fcHJpdmF0ZS5tYXAuaGFzKHgpfSxubC5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbih4KXt4PSIiK3g7dmFyIG09dGhpcy5fcHJpdmF0ZS5jeSxrPXRoaXMuX3ByaXZhdGUubWFwLmdldCh4KTtyZXR1cm4gaz9rLmVsZTpuZXcgVjAobSl9LG5sLiRpZD1ubC5nZXRFbGVtZW50QnlJZCxubC5wb29sSW5kZXg9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLl9wcml2YXRlLmN5LG09eC5fcHJpdmF0ZS5lbGVtZW50cyxrPXRoaXNbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gbS5fcHJpdmF0ZS5tYXAuZ2V0KGspLmluZGV4fSxubC5pbmRleE9mPWZ1bmN0aW9uKHgpe3ZhciBtPXhbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KG0pLmluZGV4fSxubC5pbmRleE9mSWQ9ZnVuY3Rpb24oeCl7cmV0dXJuIHg9IiIreCx0aGlzLl9wcml2YXRlLm1hcC5nZXQoeCkuaW5kZXh9LG5sLmpzb249ZnVuY3Rpb24oeCl7dmFyIG09dGhpcy5lbGVtZW50KCksaz10aGlzLmN5KCk7aWYobT09bnVsbCYmeClyZXR1cm4gdGhpcztpZihtIT1udWxsKXt2YXIgUz1tLl9wcml2YXRlO2lmKHNlKHgpKXtpZihrLnN0YXJ0QmF0Y2goKSx4LmRhdGEpe20uZGF0YSh4LmRhdGEpO3ZhciBNPVMuZGF0YTtpZihtLmlzRWRnZSgpKXt2YXIgTz0hMSxOPXt9LCQ9eC5kYXRhLnNvdXJjZSxIPXguZGF0YS50YXJnZXQ7JCE9bnVsbCYmJCE9TS5zb3VyY2UmJihOLnNvdXJjZT0iIiskLE89ITApLEghPW51bGwmJkghPU0udGFyZ2V0JiYoTi50YXJnZXQ9IiIrSCxPPSEwKSxPJiYobT1tLm1vdmUoTikpfWVsc2V7dmFyIHE9InBhcmVudCJpbiB4LmRhdGEsWT14LmRhdGEucGFyZW50O3EmJihZIT1udWxsfHxNLnBhcmVudCE9bnVsbCkmJlkhPU0ucGFyZW50JiYoWT09PXZvaWQgMCYmKFk9bnVsbCksWSE9bnVsbCYmKFk9IiIrWSksbT1tLm1vdmUoe3BhcmVudDpZfSkpfX14LnBvc2l0aW9uJiZtLnBvc2l0aW9uKHgucG9zaXRpb24pO3ZhciBaPWZ1bmN0aW9uKExlLF9lLEVlKXt2YXIgQmU9eFtMZV07QmUhPW51bGwmJkJlIT09U1tMZV0mJihCZT9tW19lXSgpOm1bRWVdKCkpfTtyZXR1cm4gWigicmVtb3ZlZCIsInJlbW92ZSIsInJlc3RvcmUiKSxaKCJzZWxlY3RlZCIsInNlbGVjdCIsInVuc2VsZWN0IiksWigic2VsZWN0YWJsZSIsInNlbGVjdGlmeSIsInVuc2VsZWN0aWZ5IiksWigibG9ja2VkIiwibG9jayIsInVubG9jayIpLFooImdyYWJiYWJsZSIsImdyYWJpZnkiLCJ1bmdyYWJpZnkiKSxaKCJwYW5uYWJsZSIsInBhbmlmeSIsInVucGFuaWZ5IikseC5jbGFzc2VzIT1udWxsJiZtLmNsYXNzZXMoeC5jbGFzc2VzKSxrLmVuZEJhdGNoKCksdGhpc31lbHNlIGlmKHg9PT12b2lkIDApe3ZhciBjZT17ZGF0YTp2bShTLmRhdGEpLHBvc2l0aW9uOnZtKFMucG9zaXRpb24pLGdyb3VwOlMuZ3JvdXAscmVtb3ZlZDpTLnJlbW92ZWQsc2VsZWN0ZWQ6Uy5zZWxlY3RlZCxzZWxlY3RhYmxlOlMuc2VsZWN0YWJsZSxsb2NrZWQ6Uy5sb2NrZWQsZ3JhYmJhYmxlOlMuZ3JhYmJhYmxlLHBhbm5hYmxlOlMucGFubmFibGUsY2xhc3NlczpudWxsfTtjZS5jbGFzc2VzPSIiO3ZhciB2ZT0wO3JldHVybiBTLmNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihtZSl7cmV0dXJuIGNlLmNsYXNzZXMrPXZlKys9PT0wP21lOiIgIittZX0pLGNlfX19LG5sLmpzb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PVtdLG09MDttPHRoaXMubGVuZ3RoO20rKyl7dmFyIGs9dGhpc1ttXSxTPWsuanNvbigpO3gucHVzaChTKX1yZXR1cm4geH0sbmwuY2xvbmU9ZnVuY3Rpb24oKXtmb3IodmFyIHg9dGhpcy5jeSgpLG09W10saz0wO2s8dGhpcy5sZW5ndGg7aysrKXt2YXIgUz10aGlzW2tdLE09Uy5qc29uKCksTz1uZXcgdVMoeCxNLCExKTttLnB1c2goTyl9cmV0dXJuIG5ldyBWMCh4LG0pfSxubC5jb3B5PW5sLmNsb25lLG5sLnJlc3RvcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiEwLG09YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLGs9dGhpcyxTPWsuY3koKSxNPVMuX3ByaXZhdGUsTz1bXSxOPVtdLCQsSD0wLHE9ay5sZW5ndGg7SDxxO0grKyl7dmFyIFk9a1tIXTttJiYhWS5yZW1vdmVkKCl8fChZLmlzTm9kZSgpP08ucHVzaChZKTpOLnB1c2goWSkpfSQ9Ty5jb25jYXQoTik7dmFyIFosY2U9ZnVuY3Rpb24oKXskLnNwbGljZShaLDEpLFotLX07Zm9yKFo9MDtaPCQubGVuZ3RoO1orKyl7dmFyIHZlPSRbWl0sbWU9dmUuX3ByaXZhdGUsTGU9bWUuZGF0YTtpZih2ZS5jbGVhclRyYXZlcnNhbENhY2hlKCksISghbSYmIW1lLnJlbW92ZWQpKXtpZihMZS5pZD09PXZvaWQgMClMZS5pZD1vaigpO2Vsc2UgaWYoWChMZS5pZCkpTGUuaWQ9IiIrTGUuaWQ7ZWxzZSBpZihTZShMZS5pZCl8fCFiZShMZS5pZCkpe2NoKCJDYW4gbm90IGNyZWF0ZSBlbGVtZW50IHdpdGggaW52YWxpZCBzdHJpbmcgSUQgYCIrTGUuaWQrImAiKSxjZSgpO2NvbnRpbnVlfWVsc2UgaWYoUy5oYXNFbGVtZW50V2l0aElkKExlLmlkKSl7Y2goIkNhbiBub3QgY3JlYXRlIHNlY29uZCBlbGVtZW50IHdpdGggSUQgYCIrTGUuaWQrImAiKSxjZSgpO2NvbnRpbnVlfX12YXIgX2U9TGUuaWQ7aWYodmUuaXNOb2RlKCkpe3ZhciBFZT1tZS5wb3NpdGlvbjtFZS54PT1udWxsJiYoRWUueD0wKSxFZS55PT1udWxsJiYoRWUueT0wKX1pZih2ZS5pc0VkZ2UoKSl7Zm9yKHZhciBCZT12ZSxSZT1bInNvdXJjZSIsInRhcmdldCJdLFZlPVJlLmxlbmd0aCxjdD0hMSxzdD0wO3N0PFZlO3N0Kyspe3ZhciBZZT1SZVtzdF0sbXQ9TGVbWWVdO1gobXQpJiYobXQ9TGVbWWVdPSIiK0xlW1llXSksbXQ9PW51bGx8fG10PT09IiI/KGNoKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK19lKyJgIHdpdGggdW5zcGVjaWZpZWQgIitZZSksY3Q9ITApOlMuaGFzRWxlbWVudFdpdGhJZChtdCl8fChjaCgiQ2FuIG5vdCBjcmVhdGUgZWRnZSBgIitfZSsiYCB3aXRoIG5vbmV4aXN0YW50ICIrWWUrIiBgIittdCsiYCIpLGN0PSEwKX1pZihjdCl7Y2UoKTtjb250aW51ZX12YXIgSmU9Uy5nZXRFbGVtZW50QnlJZChMZS5zb3VyY2UpLEx0PVMuZ2V0RWxlbWVudEJ5SWQoTGUudGFyZ2V0KTtKZS5zYW1lKEx0KT9KZS5fcHJpdmF0ZS5lZGdlcy5wdXNoKEJlKTooSmUuX3ByaXZhdGUuZWRnZXMucHVzaChCZSksTHQuX3ByaXZhdGUuZWRnZXMucHVzaChCZSkpLEJlLl9wcml2YXRlLnNvdXJjZT1KZSxCZS5fcHJpdmF0ZS50YXJnZXQ9THR9bWUubWFwPW5ldyB3bSxtZS5tYXAuc2V0KF9lLHtlbGU6dmUsaW5kZXg6MH0pLG1lLnJlbW92ZWQ9ITEsbSYmUy5hZGRUb1Bvb2wodmUpfWZvcih2YXIgTXQ9MDtNdDxPLmxlbmd0aDtNdCsrKXt2YXIgdXQ9T1tNdF0sV3Q9dXQuX3ByaXZhdGUuZGF0YTtYKFd0LnBhcmVudCkmJihXdC5wYXJlbnQ9IiIrV3QucGFyZW50KTt2YXIgVHQ9V3QucGFyZW50LF9uPVR0IT1udWxsO2lmKF9ufHx1dC5fcHJpdmF0ZS5wYXJlbnQpe3ZhciBobj11dC5fcHJpdmF0ZS5wYXJlbnQ/Uy5jb2xsZWN0aW9uKCkubWVyZ2UodXQuX3ByaXZhdGUucGFyZW50KTpTLmdldEVsZW1lbnRCeUlkKFR0KTtpZihobi5lbXB0eSgpKVd0LnBhcmVudD12b2lkIDA7ZWxzZSBpZihoblswXS5yZW1vdmVkKCkpaHUoIk5vZGUgYWRkZWQgd2l0aCBtaXNzaW5nIHBhcmVudCwgcmVmZXJlbmNlIHRvIHBhcmVudCByZW1vdmVkIiksV3QucGFyZW50PXZvaWQgMCx1dC5fcHJpdmF0ZS5wYXJlbnQ9bnVsbDtlbHNle2Zvcih2YXIgWXQ9ITEsRG49aG47IURuLmVtcHR5KCk7KXtpZih1dC5zYW1lKERuKSl7WXQ9ITAsV3QucGFyZW50PXZvaWQgMDticmVha31Ebj1Ebi5wYXJlbnQoKX1ZdHx8KGhuWzBdLl9wcml2YXRlLmNoaWxkcmVuLnB1c2godXQpLHV0Ll9wcml2YXRlLnBhcmVudD1oblswXSxNLmhhc0NvbXBvdW5kTm9kZXM9ITApfX19aWYoJC5sZW5ndGg+MCl7Zm9yKHZhciBpcj0kLmxlbmd0aD09PWsubGVuZ3RoP2s6bmV3IFYwKFMsJCksdnI9MDt2cjxpci5sZW5ndGg7dnIrKyl7dmFyIE5uPWlyW3ZyXTtObi5pc05vZGUoKXx8KE5uLnBhcmFsbGVsRWRnZXMoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksTm4uc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLE5uLnRhcmdldCgpLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKSl9dmFyIHByO00uaGFzQ29tcG91bmROb2Rlcz9wcj1TLmNvbGxlY3Rpb24oKS5tZXJnZShpcikubWVyZ2UoaXIuY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UoaXIucGFyZW50KCkpOnByPWlyLHByLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLnVwZGF0ZVN0eWxlKHgpLHg/aXIuZW1pdEFuZE5vdGlmeSgiYWRkIik6bSYmaXIuZW1pdCgiYWRkIil9cmV0dXJuIGt9LG5sLnJlbW92ZWQ9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO3JldHVybiB4JiZ4Ll9wcml2YXRlLnJlbW92ZWR9LG5sLmluc2lkZT1mdW5jdGlvbigpe3ZhciB4PXRoaXNbMF07cmV0dXJuIHgmJiF4Ll9wcml2YXRlLnJlbW92ZWR9LG5sLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxtPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxrPXRoaXMsUz1bXSxNPXt9LE89ay5fcHJpdmF0ZS5jeTtmdW5jdGlvbiBOKFR0KXtmb3IodmFyIF9uPVR0Ll9wcml2YXRlLmVkZ2VzLGhuPTA7aG48X24ubGVuZ3RoO2huKyspSChfbltobl0pfWZ1bmN0aW9uICQoVHQpe2Zvcih2YXIgX249VHQuX3ByaXZhdGUuY2hpbGRyZW4saG49MDtobjxfbi5sZW5ndGg7aG4rKylIKF9uW2huXSl9ZnVuY3Rpb24gSChUdCl7dmFyIF9uPU1bVHQuaWQoKV07bSYmVHQucmVtb3ZlZCgpfHxfbnx8KE1bVHQuaWQoKV09ITAsVHQuaXNOb2RlKCk/KFMucHVzaChUdCksTihUdCksJChUdCkpOlMudW5zaGlmdChUdCkpfWZvcih2YXIgcT0wLFk9ay5sZW5ndGg7cTxZO3ErKyl7dmFyIFo9a1txXTtIKFopfWZ1bmN0aW9uIGNlKFR0LF9uKXt2YXIgaG49VHQuX3ByaXZhdGUuZWRnZXM7UTMoaG4sX24pLFR0LmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1mdW5jdGlvbiB2ZShUdCl7VHQuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpfXZhciBtZT1bXTttZS5pZHM9e307ZnVuY3Rpb24gTGUoVHQsX24pe19uPV9uWzBdLFR0PVR0WzBdO3ZhciBobj1UdC5fcHJpdmF0ZS5jaGlsZHJlbixZdD1UdC5pZCgpO1EzKGhuLF9uKSxfbi5fcHJpdmF0ZS5wYXJlbnQ9bnVsbCxtZS5pZHNbWXRdfHwobWUuaWRzW1l0XT0hMCxtZS5wdXNoKFR0KSl9ay5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxtJiZPLnJlbW92ZUZyb21Qb29sKFMpO2Zvcih2YXIgX2U9MDtfZTxTLmxlbmd0aDtfZSsrKXt2YXIgRWU9U1tfZV07aWYoRWUuaXNFZGdlKCkpe3ZhciBCZT1FZS5zb3VyY2UoKVswXSxSZT1FZS50YXJnZXQoKVswXTtjZShCZSxFZSksY2UoUmUsRWUpO2Zvcih2YXIgVmU9RWUucGFyYWxsZWxFZGdlcygpLGN0PTA7Y3Q8VmUubGVuZ3RoO2N0Kyspe3ZhciBzdD1WZVtjdF07dmUoc3QpLHN0LmlzQnVuZGxlZEJlemllcigpJiZzdC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19ZWxzZXt2YXIgWWU9RWUucGFyZW50KCk7WWUubGVuZ3RoIT09MCYmTGUoWWUsRWUpfW0mJihFZS5fcHJpdmF0ZS5yZW1vdmVkPSEwKX12YXIgbXQ9Ty5fcHJpdmF0ZS5lbGVtZW50cztPLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITE7Zm9yKHZhciBKZT0wO0plPG10Lmxlbmd0aDtKZSsrKXt2YXIgTHQ9bXRbSmVdO2lmKEx0LmlzUGFyZW50KCkpe08uX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlcz0hMDticmVha319dmFyIE10PW5ldyBWMCh0aGlzLmN5KCksUyk7TXQuc2l6ZSgpPjAmJih4P010LmVtaXRBbmROb3RpZnkoInJlbW92ZSIpOm0mJk10LmVtaXQoInJlbW92ZSIpKTtmb3IodmFyIHV0PTA7dXQ8bWUubGVuZ3RoO3V0Kyspe3ZhciBXdD1tZVt1dF07KCFtfHwhV3QucmVtb3ZlZCgpKSYmV3QudXBkYXRlU3R5bGUoKX1yZXR1cm4gTXR9LG5sLm1vdmU9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcy5fcHJpdmF0ZS5jeSxrPXRoaXMsUz0hMSxNPSExLE89ZnVuY3Rpb24obWUpe3JldHVybiBtZT09bnVsbD9tZToiIittZX07aWYoeC5zb3VyY2UhPT12b2lkIDB8fHgudGFyZ2V0IT09dm9pZCAwKXt2YXIgTj1PKHguc291cmNlKSwkPU8oeC50YXJnZXQpLEg9TiE9bnVsbCYmbS5oYXNFbGVtZW50V2l0aElkKE4pLHE9JCE9bnVsbCYmbS5oYXNFbGVtZW50V2l0aElkKCQpOyhIfHxxKSYmKG0uYmF0Y2goZnVuY3Rpb24oKXtrLnJlbW92ZShTLE0pLGsuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgdmU9MDt2ZTxrLmxlbmd0aDt2ZSsrKXt2YXIgbWU9a1t2ZV0sTGU9bWUuX3ByaXZhdGUuZGF0YTttZS5pc0VkZ2UoKSYmKEgmJihMZS5zb3VyY2U9TikscSYmKExlLnRhcmdldD0kKSl9ay5yZXN0b3JlKFMsTSl9KSxrLmVtaXRBbmROb3RpZnkoIm1vdmUiKSl9ZWxzZSBpZih4LnBhcmVudCE9PXZvaWQgMCl7dmFyIFk9Tyh4LnBhcmVudCksWj1ZPT09bnVsbHx8bS5oYXNFbGVtZW50V2l0aElkKFkpO2lmKFope3ZhciBjZT1ZPT09bnVsbD92b2lkIDA6WTttLmJhdGNoKGZ1bmN0aW9uKCl7dmFyIHZlPWsucmVtb3ZlKFMsTSk7dmUuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgbWU9MDttZTxrLmxlbmd0aDttZSsrKXt2YXIgTGU9a1ttZV0sX2U9TGUuX3ByaXZhdGUuZGF0YTtMZS5pc05vZGUoKSYmKF9lLnBhcmVudD1jZSl9dmUucmVzdG9yZShTLE0pfSksay5lbWl0QW5kTm90aWZ5KCJtb3ZlIil9fXJldHVybiB0aGlzfSxbQmosa25lLFNTLHR5LHU4LG55LEo5LFRJLF8kLENJLFNJLERTLElTLEgwLFhkLGsxXS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3l0KG5sLHgpfSk7dmFyIHNyZT17YWRkOmZ1bmN0aW9uKG0pe3ZhciBrLFM9dGhpcztpZih4ZShtKSl7dmFyIE09bTtpZihNLl9wcml2YXRlLmN5PT09UylrPU0ucmVzdG9yZSgpO2Vsc2V7Zm9yKHZhciBPPVtdLE49MDtOPE0ubGVuZ3RoO04rKyl7dmFyICQ9TVtOXTtPLnB1c2goJC5qc29uKCkpfWs9bmV3IFYwKFMsTyl9fWVsc2UgaWYobmUobSkpe3ZhciBIPW07az1uZXcgVjAoUyxIKX1lbHNlIGlmKHNlKG0pJiYobmUobS5ub2Rlcyl8fG5lKG0uZWRnZXMpKSl7Zm9yKHZhciBxPW0sWT1bXSxaPVsibm9kZXMiLCJlZGdlcyJdLGNlPTAsdmU9Wi5sZW5ndGg7Y2U8dmU7Y2UrKyl7dmFyIG1lPVpbY2VdLExlPXFbbWVdO2lmKG5lKExlKSlmb3IodmFyIF9lPTAsRWU9TGUubGVuZ3RoO19lPEVlO19lKyspe3ZhciBCZT15dCh7Z3JvdXA6bWV9LExlW19lXSk7WS5wdXNoKEJlKX19az1uZXcgVjAoUyxZKX1lbHNle3ZhciBSZT1tO2s9bmV3IHVTKFMsUmUpLmNvbGxlY3Rpb24oKX1yZXR1cm4ga30scmVtb3ZlOmZ1bmN0aW9uKG0pe2lmKCF4ZShtKSl7aWYoYmUobSkpe3ZhciBrPW07bT10aGlzLiQoayl9fXJldHVybiBtLnJlbW92ZSgpfX07LyohIEJlemllciBjdXJ2ZSBmdW5jdGlvbiBnZW5lcmF0b3IuIENvcHlyaWdodCBHYWV0YW4gUmVuYXVkZWF1LiBNSVQgTGljZW5zZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSAqL2Z1bmN0aW9uIGFyZSh4LG0sayxTKXt2YXIgTT00LE89LjAwMSxOPTFlLTcsJD0xMCxIPTExLHE9MS8oSC0xKSxZPXR5cGVvZiBGbG9hdDMyQXJyYXk8InUiO2lmKGFyZ3VtZW50cy5sZW5ndGghPT00KXJldHVybiExO2Zvcih2YXIgWj0wO1o8NDsrK1opaWYodHlwZW9mIGFyZ3VtZW50c1taXSE9Im51bWJlciJ8fGlzTmFOKGFyZ3VtZW50c1taXSl8fCFpc0Zpbml0ZShhcmd1bWVudHNbWl0pKXJldHVybiExO3g9TWF0aC5taW4oeCwxKSxrPU1hdGgubWluKGssMSkseD1NYXRoLm1heCh4LDApLGs9TWF0aC5tYXgoaywwKTt2YXIgY2U9WT9uZXcgRmxvYXQzMkFycmF5KEgpOm5ldyBBcnJheShIKTtmdW5jdGlvbiB2ZShMdCxNdCl7cmV0dXJuIDEtMypNdCszKkx0fWZ1bmN0aW9uIG1lKEx0LE10KXtyZXR1cm4gMypNdC02Kkx0fWZ1bmN0aW9uIExlKEx0KXtyZXR1cm4gMypMdH1mdW5jdGlvbiBfZShMdCxNdCx1dCl7cmV0dXJuKCh2ZShNdCx1dCkqTHQrbWUoTXQsdXQpKSpMdCtMZShNdCkpKkx0fWZ1bmN0aW9uIEVlKEx0LE10LHV0KXtyZXR1cm4gMyp2ZShNdCx1dCkqTHQqTHQrMiptZShNdCx1dCkqTHQrTGUoTXQpfWZ1bmN0aW9uIEJlKEx0LE10KXtmb3IodmFyIHV0PTA7dXQ8TTsrK3V0KXt2YXIgV3Q9RWUoTXQseCxrKTtpZihXdD09PTApcmV0dXJuIE10O3ZhciBUdD1fZShNdCx4LGspLUx0O010LT1UdC9XdH1yZXR1cm4gTXR9ZnVuY3Rpb24gUmUoKXtmb3IodmFyIEx0PTA7THQ8SDsrK0x0KWNlW0x0XT1fZShMdCpxLHgsayl9ZnVuY3Rpb24gVmUoTHQsTXQsdXQpe3ZhciBXdCxUdCxfbj0wO2RvIFR0PU10Kyh1dC1NdCkvMixXdD1fZShUdCx4LGspLUx0LFd0PjA/dXQ9VHQ6TXQ9VHQ7d2hpbGUoTWF0aC5hYnMoV3QpPk4mJisrX248JCk7cmV0dXJuIFR0fWZ1bmN0aW9uIGN0KEx0KXtmb3IodmFyIE10PTAsdXQ9MSxXdD1ILTE7dXQhPT1XdCYmY2VbdXRdPD1MdDsrK3V0KU10Kz1xOy0tdXQ7dmFyIFR0PShMdC1jZVt1dF0pLyhjZVt1dCsxXS1jZVt1dF0pLF9uPU10K1R0KnEsaG49RWUoX24seCxrKTtyZXR1cm4gaG4+PU8/QmUoTHQsX24pOmhuPT09MD9fbjpWZShMdCxNdCxNdCtxKX12YXIgc3Q9ITE7ZnVuY3Rpb24gWWUoKXtzdD0hMCwoeCE9PW18fGshPT1TKSYmUmUoKX12YXIgbXQ9ZnVuY3Rpb24oTXQpe3JldHVybiBzdHx8WWUoKSx4PT09bSYmaz09PVM/TXQ6TXQ9PT0wPzA6TXQ9PT0xPzE6X2UoY3QoTXQpLG0sUyl9O210LmdldENvbnRyb2xQb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm5be3gseTptfSx7eDprLHk6U31dfTt2YXIgSmU9ImdlbmVyYXRlQmV6aWVyKCIrW3gsbSxrLFNdKyIpIjtyZXR1cm4gbXQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gSmV9LG10fS8qISBSdW5nZS1LdXR0YSBzcHJpbmcgcGh5c2ljcyBmdW5jdGlvbiBnZW5lcmF0b3IuIEFkYXB0ZWQgZnJvbSBGcmFtZXIuanMsIGNvcHlyaWdodCBLb2VuIEJvay4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi92YXIgb3JlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geChTKXtyZXR1cm4tUy50ZW5zaW9uKlMueC1TLmZyaWN0aW9uKlMudn1mdW5jdGlvbiBtKFMsTSxPKXt2YXIgTj17eDpTLngrTy5keCpNLHY6Uy52K08uZHYqTSx0ZW5zaW9uOlMudGVuc2lvbixmcmljdGlvbjpTLmZyaWN0aW9ufTtyZXR1cm57ZHg6Ti52LGR2OngoTil9fWZ1bmN0aW9uIGsoUyxNKXt2YXIgTz17ZHg6Uy52LGR2OngoUyl9LE49bShTLE0qLjUsTyksJD1tKFMsTSouNSxOKSxIPW0oUyxNLCQpLHE9MS82KihPLmR4KzIqKE4uZHgrJC5keCkrSC5keCksWT0xLzYqKE8uZHYrMiooTi5kdiskLmR2KStILmR2KTtyZXR1cm4gUy54PVMueCtxKk0sUy52PVMuditZKk0sU31yZXR1cm4gZnVuY3Rpb24gUyhNLE8sTil7dmFyICQ9e3g6LTEsdjowLHRlbnNpb246bnVsbCxmcmljdGlvbjpudWxsfSxIPVswXSxxPTAsWT0xLzFlNCxaPTE2LzFlMyxjZSx2ZSxtZTtmb3IoTT1wYXJzZUZsb2F0KE0pfHw1MDAsTz1wYXJzZUZsb2F0KE8pfHwyMCxOPU58fG51bGwsJC50ZW5zaW9uPU0sJC5mcmljdGlvbj1PLGNlPU4hPT1udWxsLGNlPyhxPVMoTSxPKSx2ZT1xL04qWik6dmU9WjttZT1rKG1lfHwkLHZlKSxILnB1c2goMSttZS54KSxxKz0xNixNYXRoLmFicyhtZS54KT5ZJiZNYXRoLmFicyhtZS52KT5ZOyk7cmV0dXJuIGNlP2Z1bmN0aW9uKExlKXtyZXR1cm4gSFtMZSooSC5sZW5ndGgtMSl8MF19OnF9fSgpLHJsPWZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPWFyZShtLGssUyxNKTtyZXR1cm4gZnVuY3Rpb24oTiwkLEgpe3JldHVybiBOKygkLU4pKk8oSCl9fSxCUz17bGluZWFyOmZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gbSsoay1tKSpTfSxlYXNlOnJsKC4yNSwuMSwuMjUsMSksImVhc2UtaW4iOnJsKC40MiwwLDEsMSksImVhc2Utb3V0IjpybCgwLDAsLjU4LDEpLCJlYXNlLWluLW91dCI6cmwoLjQyLDAsLjU4LDEpLCJlYXNlLWluLXNpbmUiOnJsKC40NywwLC43NDUsLjcxNSksImVhc2Utb3V0LXNpbmUiOnJsKC4zOSwuNTc1LC41NjUsMSksImVhc2UtaW4tb3V0LXNpbmUiOnJsKC40NDUsLjA1LC41NSwuOTUpLCJlYXNlLWluLXF1YWQiOnJsKC41NSwuMDg1LC42OCwuNTMpLCJlYXNlLW91dC1xdWFkIjpybCguMjUsLjQ2LC40NSwuOTQpLCJlYXNlLWluLW91dC1xdWFkIjpybCguNDU1LC4wMywuNTE1LC45NTUpLCJlYXNlLWluLWN1YmljIjpybCguNTUsLjA1NSwuNjc1LC4xOSksImVhc2Utb3V0LWN1YmljIjpybCguMjE1LC42MSwuMzU1LDEpLCJlYXNlLWluLW91dC1jdWJpYyI6cmwoLjY0NSwuMDQ1LC4zNTUsMSksImVhc2UtaW4tcXVhcnQiOnJsKC44OTUsLjAzLC42ODUsLjIyKSwiZWFzZS1vdXQtcXVhcnQiOnJsKC4xNjUsLjg0LC40NCwxKSwiZWFzZS1pbi1vdXQtcXVhcnQiOnJsKC43NywwLC4xNzUsMSksImVhc2UtaW4tcXVpbnQiOnJsKC43NTUsLjA1LC44NTUsLjA2KSwiZWFzZS1vdXQtcXVpbnQiOnJsKC4yMywxLC4zMiwxKSwiZWFzZS1pbi1vdXQtcXVpbnQiOnJsKC44NiwwLC4wNywxKSwiZWFzZS1pbi1leHBvIjpybCguOTUsLjA1LC43OTUsLjAzNSksImVhc2Utb3V0LWV4cG8iOnJsKC4xOSwxLC4yMiwxKSwiZWFzZS1pbi1vdXQtZXhwbyI6cmwoMSwwLDAsMSksImVhc2UtaW4tY2lyYyI6cmwoLjYsLjA0LC45OCwuMzM1KSwiZWFzZS1vdXQtY2lyYyI6cmwoLjA3NSwuODIsLjE2NSwxKSwiZWFzZS1pbi1vdXQtY2lyYyI6cmwoLjc4NSwuMTM1LC4xNSwuODYpLHNwcmluZzpmdW5jdGlvbihtLGssUyl7aWYoUz09PTApcmV0dXJuIEJTLmxpbmVhcjt2YXIgTT1vcmUobSxrLFMpO3JldHVybiBmdW5jdGlvbihPLE4sJCl7cmV0dXJuIE8rKE4tTykqTSgkKX19LCJjdWJpYy1iZXppZXIiOnJsfTtmdW5jdGlvbiBOJCh4LG0sayxTLE0pe2lmKFM9PT0xfHxtPT09aylyZXR1cm4gazt2YXIgTz1NKG0sayxTKTtyZXR1cm4geD09bnVsbHx8KCh4LnJvdW5kVmFsdWV8fHguY29sb3IpJiYoTz1NYXRoLnJvdW5kKE8pKSx4Lm1pbiE9PXZvaWQgMCYmKE89TWF0aC5tYXgoTyx4Lm1pbikpLHgubWF4IT09dm9pZCAwJiYoTz1NYXRoLm1pbihPLHgubWF4KSkpLE99ZnVuY3Rpb24gUCQoeCxtKXtyZXR1cm4geC5wZlZhbHVlIT1udWxsfHx4LnZhbHVlIT1udWxsP3gucGZWYWx1ZSE9bnVsbCYmKG09PW51bGx8fG0udHlwZS51bml0cyE9PSIlIik/eC5wZlZhbHVlOngudmFsdWU6eH1mdW5jdGlvbiBnOCh4LG0sayxTLE0pe3ZhciBPPU0hPW51bGw/TS50eXBlOm51bGw7azwwP2s9MDprPjEmJihrPTEpO3ZhciBOPVAkKHgsTSksJD1QJChtLE0pO2lmKFgoTikmJlgoJCkpcmV0dXJuIE4kKE8sTiwkLGssUyk7aWYobmUoTikmJm5lKCQpKXtmb3IodmFyIEg9W10scT0wO3E8JC5sZW5ndGg7cSsrKXt2YXIgWT1OW3FdLFo9JFtxXTtpZihZIT1udWxsJiZaIT1udWxsKXt2YXIgY2U9TiQoTyxZLFosayxTKTtILnB1c2goY2UpfWVsc2UgSC5wdXNoKFopfXJldHVybiBIfX1mdW5jdGlvbiBjcmUoeCxtLGssUyl7dmFyIE09IVMsTz14Ll9wcml2YXRlLE49bS5fcHJpdmF0ZSwkPU4uZWFzaW5nLEg9Ti5zdGFydFRpbWUscT1TP3g6eC5jeSgpLFk9cS5zdHlsZSgpO2lmKCFOLmVhc2luZ0ltcGwpaWYoJD09bnVsbClOLmVhc2luZ0ltcGw9QlMubGluZWFyO2Vsc2V7dmFyIFo7aWYoYmUoJCkpe3ZhciBjZT1ZLnBhcnNlKCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsJCk7Wj1jZS52YWx1ZX1lbHNlIFo9JDt2YXIgdmUsbWU7YmUoWik/KHZlPVosbWU9W10pOih2ZT1aWzFdLG1lPVouc2xpY2UoMikubWFwKGZ1bmN0aW9uKGlyKXtyZXR1cm4raXJ9KSksbWUubGVuZ3RoPjA/KHZlPT09InNwcmluZyImJm1lLnB1c2goTi5kdXJhdGlvbiksTi5lYXNpbmdJbXBsPUJTW3ZlXS5hcHBseShudWxsLG1lKSk6Ti5lYXNpbmdJbXBsPUJTW3ZlXX12YXIgTGU9Ti5lYXNpbmdJbXBsLF9lO2lmKE4uZHVyYXRpb249PT0wP19lPTE6X2U9KGstSCkvTi5kdXJhdGlvbixOLmFwcGx5aW5nJiYoX2U9Ti5wcm9ncmVzcyksX2U8MD9fZT0wOl9lPjEmJihfZT0xKSxOLmRlbGF5PT1udWxsKXt2YXIgRWU9Ti5zdGFydFBvc2l0aW9uLEJlPU4ucG9zaXRpb247aWYoQmUmJk0mJiF4LmxvY2tlZCgpKXt2YXIgUmU9e307YWsoRWUueCxCZS54KSYmKFJlLng9ZzgoRWUueCxCZS54LF9lLExlKSksYWsoRWUueSxCZS55KSYmKFJlLnk9ZzgoRWUueSxCZS55LF9lLExlKSkseC5wb3NpdGlvbihSZSl9dmFyIFZlPU4uc3RhcnRQYW4sY3Q9Ti5wYW4sc3Q9Ty5wYW4sWWU9Y3QhPW51bGwmJlM7WWUmJihhayhWZS54LGN0LngpJiYoc3QueD1nOChWZS54LGN0LngsX2UsTGUpKSxhayhWZS55LGN0LnkpJiYoc3QueT1nOChWZS55LGN0LnksX2UsTGUpKSx4LmVtaXQoInBhbiIpKTt2YXIgbXQ9Ti5zdGFydFpvb20sSmU9Ti56b29tLEx0PUplIT1udWxsJiZTO0x0JiYoYWsobXQsSmUpJiYoTy56b29tPVU5KE8ubWluWm9vbSxnOChtdCxKZSxfZSxMZSksTy5tYXhab29tKSkseC5lbWl0KCJ6b29tIikpLChZZXx8THQpJiZ4LmVtaXQoInZpZXdwb3J0Iik7dmFyIE10PU4uc3R5bGU7aWYoTXQmJk10Lmxlbmd0aD4wJiZNKXtmb3IodmFyIHV0PTA7dXQ8TXQubGVuZ3RoO3V0Kyspe3ZhciBXdD1NdFt1dF0sVHQ9V3QubmFtZSxfbj1XdCxobj1OLnN0YXJ0U3R5bGVbVHRdLFl0PVkucHJvcGVydGllc1tobi5uYW1lXSxEbj1nOChobixfbixfZSxMZSxZdCk7WS5vdmVycmlkZUJ5cGFzcyh4LFR0LERuKX14LmVtaXQoInN0eWxlIil9fXJldHVybiBOLnByb2dyZXNzPV9lLF9lfWZ1bmN0aW9uIGFrKHgsbSl7cmV0dXJuIHg9PW51bGx8fG09PW51bGw/ITE6WCh4KSYmWChtKT8hMDohISh4JiZtKX1mdW5jdGlvbiB1cmUoeCxtLGssUyl7dmFyIE09bS5fcHJpdmF0ZTtNLnN0YXJ0ZWQ9ITAsTS5zdGFydFRpbWU9ay1NLnByb2dyZXNzKk0uZHVyYXRpb259ZnVuY3Rpb24gQiQoeCxtKXt2YXIgaz1tLl9wcml2YXRlLmFuaUVsZXMsUz1bXTtmdW5jdGlvbiBNKFksWil7dmFyIGNlPVkuX3ByaXZhdGUsdmU9Y2UuYW5pbWF0aW9uLmN1cnJlbnQsbWU9Y2UuYW5pbWF0aW9uLnF1ZXVlLExlPSExO2lmKHZlLmxlbmd0aD09PTApe3ZhciBfZT1tZS5zaGlmdCgpO19lJiZ2ZS5wdXNoKF9lKX1mb3IodmFyIEVlPWZ1bmN0aW9uKHN0KXtmb3IodmFyIFllPXN0Lmxlbmd0aC0xO1llPj0wO1llLS0pe3ZhciBtdD1zdFtZZV07bXQoKX1zdC5zcGxpY2UoMCxzdC5sZW5ndGgpfSxCZT12ZS5sZW5ndGgtMTtCZT49MDtCZS0tKXt2YXIgUmU9dmVbQmVdLFZlPVJlLl9wcml2YXRlO2lmKFZlLnN0b3BwZWQpe3ZlLnNwbGljZShCZSwxKSxWZS5ob29rZWQ9ITEsVmUucGxheWluZz0hMSxWZS5zdGFydGVkPSExLEVlKFZlLmZyYW1lcyk7Y29udGludWV9IVZlLnBsYXlpbmcmJiFWZS5hcHBseWluZ3x8KFZlLnBsYXlpbmcmJlZlLmFwcGx5aW5nJiYoVmUuYXBwbHlpbmc9ITEpLFZlLnN0YXJ0ZWR8fHVyZShZLFJlLHgpLGNyZShZLFJlLHgsWiksVmUuYXBwbHlpbmcmJihWZS5hcHBseWluZz0hMSksRWUoVmUuZnJhbWVzKSxWZS5zdGVwIT1udWxsJiZWZS5zdGVwKHgpLFJlLmNvbXBsZXRlZCgpJiYodmUuc3BsaWNlKEJlLDEpLFZlLmhvb2tlZD0hMSxWZS5wbGF5aW5nPSExLFZlLnN0YXJ0ZWQ9ITEsRWUoVmUuY29tcGxldGVzKSksTGU9ITApfXJldHVybiFaJiZ2ZS5sZW5ndGg9PT0wJiZtZS5sZW5ndGg9PT0wJiZTLnB1c2goWSksTGV9Zm9yKHZhciBPPSExLE49MDtOPGsubGVuZ3RoO04rKyl7dmFyICQ9a1tOXSxIPU0oJCk7Tz1PfHxIfXZhciBxPU0obSwhMCk7KE98fHEpJiYoay5sZW5ndGg+MD9tLm5vdGlmeSgiZHJhdyIsayk6bS5ub3RpZnkoImRyYXciKSksay51bm1lcmdlKFMpLG0uZW1pdCgic3RlcCIpfXZhciBscmU9e2FuaW1hdGU6ZnUuYW5pbWF0ZSgpLGFuaW1hdGlvbjpmdS5hbmltYXRpb24oKSxhbmltYXRlZDpmdS5hbmltYXRlZCgpLGNsZWFyUXVldWU6ZnUuY2xlYXJRdWV1ZSgpLGRlbGF5OmZ1LmRlbGF5KCksZGVsYXlBbmltYXRpb246ZnUuZGVsYXlBbmltYXRpb24oKSxzdG9wOmZ1LnN0b3AoKSxhZGRUb0FuaW1hdGlvblBvb2w6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztrLnN0eWxlRW5hYmxlZCgpJiZrLl9wcml2YXRlLmFuaUVsZXMubWVyZ2UobSl9LHN0b3BBbmltYXRpb25Mb29wOmZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZz0hMX0sc3RhcnRBbmltYXRpb25Mb29wOmZ1bmN0aW9uKCl7dmFyIG09dGhpcztpZihtLl9wcml2YXRlLmFuaW1hdGlvbnNSdW5uaW5nPSEwLCFtLnN0eWxlRW5hYmxlZCgpKXJldHVybjtmdW5jdGlvbiBrKCl7bS5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZyYmejAoZnVuY3Rpb24oTyl7QiQoTyxtKSxrKCl9KX12YXIgUz1tLnJlbmRlcmVyKCk7UyYmUy5iZWZvcmVSZW5kZXI/Uy5iZWZvcmVSZW5kZXIoZnVuY3Rpb24oTyxOKXtCJChOLG0pfSxTLmJlZm9yZVJlbmRlclByaW9yaXRpZXMuYW5pbWF0aW9ucyk6aygpfX0saHJlPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKG0sayl7cmV0dXJuIG09PW51bGx8fGs9PW51bGw/bT09bnVsbCYmaz09bnVsbDptLnNhbWVUZXh0KGspfSxldmVudE1hdGNoZXM6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPWsucXVhbGlmaWVyO3JldHVybiBNIT1udWxsP20hPT1TLnRhcmdldCYmVShTLnRhcmdldCkmJk0ubWF0Y2hlcyhTLnRhcmdldCk6ITB9LGFkZEV2ZW50RmllbGRzOmZ1bmN0aW9uKG0sayl7ay5jeT1tLGsudGFyZ2V0PW19LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihtLGssUyl7cmV0dXJuIGsucXVhbGlmaWVyIT1udWxsP1MudGFyZ2V0Om19fSxGUz1mdW5jdGlvbihtKXtyZXR1cm4gYmUobSk/bmV3IGV5KG0pOm19LEYkPXtjcmVhdGVFbWl0dGVyOmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fcHJpdmF0ZTtyZXR1cm4gbS5lbWl0dGVyfHwobS5lbWl0dGVyPW5ldyBMUyhocmUsdGhpcykpLHRoaXN9LGVtaXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSxvbjpmdW5jdGlvbihtLGssUyl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uKG0sRlMoayksUyksdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24obSxrLFMpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihtLEZTKGspLFMpLHRoaXN9LHJlbW92ZUFsbExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSxvbmU6ZnVuY3Rpb24obSxrLFMpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUobSxGUyhrKSxTKSx0aGlzfSxvbmNlOmZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKG0sRlMoayksUyksdGhpc30sZW1pdDpmdW5jdGlvbihtLGspe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KG0sayksdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihtLGspe3JldHVybiB0aGlzLmVtaXQobSksdGhpcy5ub3RpZnkobSxrKSx0aGlzfX07ZnUuZXZlbnRBbGlhc2VzT24oRiQpO3ZhciBNST17cG5nOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIG09bXx8e30say5wbmcobSl9LGpwZzpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBtPW18fHt9LG0uYmc9bS5iZ3x8IiNmZmYiLGsuanBnKG0pfX07TUkuanBlZz1NSS5qcGc7dmFyIFJTPXtsYXlvdXQ6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztpZihtPT1udWxsKXtjaCgiTGF5b3V0IG9wdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCIpO3JldHVybn1pZihtLm5hbWU9PW51bGwpe2NoKCJBIGBuYW1lYCBtdXN0IGJlIHNwZWNpZmllZCB0byBtYWtlIGEgbGF5b3V0Iik7cmV0dXJufXZhciBTPW0ubmFtZSxNPWsuZXh0ZW5zaW9uKCJsYXlvdXQiLFMpO2lmKE09PW51bGwpe2NoKCJObyBzdWNoIGxheW91dCBgIitTKyJgIGZvdW5kLiAgRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IGl0IGFuZCBgY3l0b3NjYXBlLnVzZSgpYCBpdD8iKTtyZXR1cm59dmFyIE87YmUobS5lbGVzKT9PPWsuJChtLmVsZXMpOk89bS5lbGVzIT1udWxsP20uZWxlczprLiQoKTt2YXIgTj1uZXcgTSh5dCh7fSxtLHtjeTprLGVsZXM6T30pKTtyZXR1cm4gTn19O1JTLmNyZWF0ZUxheW91dD1SUy5tYWtlTGF5b3V0PVJTLmxheW91dDt2YXIgZnJlPXtub3RpZnk6ZnVuY3Rpb24obSxrKXt2YXIgUz10aGlzLl9wcml2YXRlO2lmKHRoaXMuYmF0Y2hpbmcoKSl7Uy5iYXRjaE5vdGlmaWNhdGlvbnM9Uy5iYXRjaE5vdGlmaWNhdGlvbnN8fHt9O3ZhciBNPVMuYmF0Y2hOb3RpZmljYXRpb25zW21dPVMuYmF0Y2hOb3RpZmljYXRpb25zW21dfHx0aGlzLmNvbGxlY3Rpb24oKTtrIT1udWxsJiZNLm1lcmdlKGspO3JldHVybn1pZihTLm5vdGlmaWNhdGlvbnNFbmFibGVkKXt2YXIgTz10aGlzLnJlbmRlcmVyKCk7dGhpcy5kZXN0cm95ZWQoKXx8IU98fE8ubm90aWZ5KG0sayl9fSxub3RpZmljYXRpb25zOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGU7cmV0dXJuIG09PT12b2lkIDA/ay5ub3RpZmljYXRpb25zRW5hYmxlZDooay5ub3RpZmljYXRpb25zRW5hYmxlZD0hIW0sdGhpcyl9LG5vTm90aWZpY2F0aW9uczpmdW5jdGlvbihtKXt0aGlzLm5vdGlmaWNhdGlvbnMoITEpLG0oKSx0aGlzLm5vdGlmaWNhdGlvbnMoITApfSxiYXRjaGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmJhdGNoQ291bnQ+MH0sc3RhcnRCYXRjaDpmdW5jdGlvbigpe3ZhciBtPXRoaXMuX3ByaXZhdGU7cmV0dXJuIG0uYmF0Y2hDb3VudD09bnVsbCYmKG0uYmF0Y2hDb3VudD0wKSxtLmJhdGNoQ291bnQ9PT0wJiYobS5iYXRjaFN0eWxlRWxlcz10aGlzLmNvbGxlY3Rpb24oKSxtLmJhdGNoTm90aWZpY2F0aW9ucz17fSksbS5iYXRjaENvdW50KyssdGhpc30sZW5kQmF0Y2g6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9wcml2YXRlO2lmKG0uYmF0Y2hDb3VudD09PTApcmV0dXJuIHRoaXM7aWYobS5iYXRjaENvdW50LS0sbS5iYXRjaENvdW50PT09MCl7bS5iYXRjaFN0eWxlRWxlcy51cGRhdGVTdHlsZSgpO3ZhciBrPXRoaXMucmVuZGVyZXIoKTtPYmplY3Qua2V5cyhtLmJhdGNoTm90aWZpY2F0aW9ucykuZm9yRWFjaChmdW5jdGlvbihTKXt2YXIgTT1tLmJhdGNoTm90aWZpY2F0aW9uc1tTXTtNLmVtcHR5KCk/ay5ub3RpZnkoUyk6ay5ub3RpZnkoUyxNKX0pfXJldHVybiB0aGlzfSxiYXRjaDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5zdGFydEJhdGNoKCksbSgpLHRoaXMuZW5kQmF0Y2goKSx0aGlzfSxiYXRjaERhdGE6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztyZXR1cm4gdGhpcy5iYXRjaChmdW5jdGlvbigpe2Zvcih2YXIgUz1PYmplY3Qua2V5cyhtKSxNPTA7TTxTLmxlbmd0aDtNKyspe3ZhciBPPVNbTV0sTj1tW09dLCQ9ay5nZXRFbGVtZW50QnlJZChPKTskLmRhdGEoTil9fSl9fSxkcmU9cTAoe2hpZGVFZGdlc09uVmlld3BvcnQ6ITEsdGV4dHVyZU9uVmlld3BvcnQ6ITEsbW90aW9uQmx1cjohMSxtb3Rpb25CbHVyT3BhY2l0eTouMDUscGl4ZWxSYXRpbzp2b2lkIDAsZGVza3RvcFRhcFRocmVzaG9sZDo0LHRvdWNoVGFwVGhyZXNob2xkOjgsd2hlZWxTZW5zaXRpdml0eToxLGRlYnVnOiExLHNob3dGcHM6ITF9KSxEST17cmVuZGVyVG86ZnVuY3Rpb24obSxrLFMsTSl7dmFyIE89dGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtyZXR1cm4gTy5yZW5kZXJUbyhtLGssUyxNKSx0aGlzfSxyZW5kZXJlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnJlbmRlcmVyfSxmb3JjZVJlbmRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vdGlmeSgiZHJhdyIpLHRoaXN9LHJlc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludmFsaWRhdGVTaXplKCksdGhpcy5lbWl0QW5kTm90aWZ5KCJyZXNpemUiKSx0aGlzfSxpbml0UmVuZGVyZXI6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcyxTPWsuZXh0ZW5zaW9uKCJyZW5kZXJlciIsbS5uYW1lKTtpZihTPT1udWxsKXtjaCgiQ2FuIG5vdCBpbml0aWFsaXNlOiBObyBzdWNoIHJlbmRlcmVyIGAiLmNvbmNhdChtLm5hbWUsImAgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/IikpO3JldHVybn1tLndoZWVsU2Vuc2l0aXZpdHkhPT12b2lkIDAmJmh1KCJZb3UgaGF2ZSBzZXQgYSBjdXN0b20gd2hlZWwgc2Vuc2l0aXZpdHkuICBUaGlzIHdpbGwgbWFrZSB5b3VyIGFwcCB6b29tIHVubmF0dXJhbGx5IHdoZW4gdXNpbmcgbWFpbnN0cmVhbSBtaWNlLiAgWW91IHNob3VsZCBjaGFuZ2UgdGhpcyB2YWx1ZSBmcm9tIHRoZSBkZWZhdWx0IG9ubHkgaWYgeW91IGNhbiBndWFyYW50ZWUgdGhhdCBhbGwgeW91ciB1c2VycyB3aWxsIHVzZSB0aGUgc2FtZSBoYXJkd2FyZSBhbmQgT1MgY29uZmlndXJhdGlvbiBhcyB5b3VyIGN1cnJlbnQgbWFjaGluZS4iKTt2YXIgTT1kcmUobSk7TS5jeT1rLGsuX3ByaXZhdGUucmVuZGVyZXI9bmV3IFMoTSksdGhpcy5ub3RpZnkoImluaXQiKX0sZGVzdHJveVJlbmRlcmVyOmZ1bmN0aW9uKCl7dmFyIG09dGhpczttLm5vdGlmeSgiZGVzdHJveSIpO3ZhciBrPW0uY29udGFpbmVyKCk7aWYoaylmb3Ioay5fY3lyZWc9bnVsbDtrLmNoaWxkTm9kZXMubGVuZ3RoPjA7KWsucmVtb3ZlQ2hpbGQoay5jaGlsZE5vZGVzWzBdKTttLl9wcml2YXRlLnJlbmRlcmVyPW51bGwsbS5tdXRhYmxlRWxlbWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKFMpe3ZhciBNPVMuX3ByaXZhdGU7TS5yc2NyYXRjaD17fSxNLnJzdHlsZT17fSxNLmFuaW1hdGlvbi5jdXJyZW50PVtdLE0uYW5pbWF0aW9uLnF1ZXVlPVtdfSl9LG9uUmVuZGVyOmZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLm9uKCJyZW5kZXIiLG0pfSxvZmZSZW5kZXI6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMub2ZmKCJyZW5kZXIiLG0pfX07REkuaW52YWxpZGF0ZURpbWVuc2lvbnM9REkucmVzaXplO3ZhciBqUz17Y29sbGVjdGlvbjpmdW5jdGlvbihtLGspe3JldHVybiBiZShtKT90aGlzLiQobSk6eGUobSk/bS5jb2xsZWN0aW9uKCk6bmUobSk/KGt8fChrPXt9KSxuZXcgVjAodGhpcyxtLGsudW5pcXVlLGsucmVtb3ZlZCkpOm5ldyBWMCh0aGlzKX0sbm9kZXM6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy4kKGZ1bmN0aW9uKFMpe3JldHVybiBTLmlzTm9kZSgpfSk7cmV0dXJuIG0/ay5maWx0ZXIobSk6a30sZWRnZXM6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy4kKGZ1bmN0aW9uKFMpe3JldHVybiBTLmlzRWRnZSgpfSk7cmV0dXJuIG0/ay5maWx0ZXIobSk6a30sJDpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlLmVsZW1lbnRzO3JldHVybiBtP2suZmlsdGVyKG0pOmsuc3Bhd25TZWxmKCl9LG11dGFibGVFbGVtZW50czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzfX07alMuZWxlbWVudHM9alMuZmlsdGVyPWpTLiQ7dmFyIEUxPXt9LG9rPSJ0IixncmU9ImYiO0UxLmFwcGx5PWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT10aGlzLGs9bS5fcHJpdmF0ZSxTPWsuY3ksTT1TLmNvbGxlY3Rpb24oKSxPPTA7Tzx4Lmxlbmd0aDtPKyspe3ZhciBOPXhbT10sJD1tLmdldENvbnRleHRNZXRhKE4pO2lmKCEkLmVtcHR5KXt2YXIgSD1tLmdldENvbnRleHRTdHlsZSgkKSxxPW0uYXBwbHlDb250ZXh0U3R5bGUoJCxILE4pO04uX3ByaXZhdGUuYXBwbGllZEluaXRTdHlsZT9tLnVwZGF0ZVRyYW5zaXRpb25zKE4scS5kaWZmUHJvcHMpOk4uX3ByaXZhdGUuYXBwbGllZEluaXRTdHlsZT0hMDt2YXIgWT1tLnVwZGF0ZVN0eWxlSGludHMoTik7WSYmTS5wdXNoKE4pfX1yZXR1cm4gTX0sRTEuZ2V0UHJvcGVydGllc0RpZmY9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9ay5fcHJpdmF0ZS5wcm9wRGlmZnM9ay5fcHJpdmF0ZS5wcm9wRGlmZnN8fHt9LE09eCsiLSIrbSxPPVNbTV07aWYoTylyZXR1cm4gTztmb3IodmFyIE49W10sJD17fSxIPTA7SDxrLmxlbmd0aDtIKyspe3ZhciBxPWtbSF0sWT14W0hdPT09b2ssWj1tW0hdPT09b2ssY2U9WSE9PVosdmU9cS5tYXBwZWRQcm9wZXJ0aWVzLmxlbmd0aD4wO2lmKGNlfHxaJiZ2ZSl7dmFyIG1lPXZvaWQgMDtjZSYmdmV8fGNlP21lPXEucHJvcGVydGllczp2ZSYmKG1lPXEubWFwcGVkUHJvcGVydGllcyk7Zm9yKHZhciBMZT0wO0xlPG1lLmxlbmd0aDtMZSsrKXtmb3IodmFyIF9lPW1lW0xlXSxFZT1fZS5uYW1lLEJlPSExLFJlPUgrMTtSZTxrLmxlbmd0aDtSZSsrKXt2YXIgVmU9a1tSZV0sY3Q9bVtSZV09PT1vaztpZihjdCYmKEJlPVZlLnByb3BlcnRpZXNbX2UubmFtZV0hPW51bGwsQmUpKWJyZWFrfSEkW0VlXSYmIUJlJiYoJFtFZV09ITAsTi5wdXNoKEVlKSl9fX1yZXR1cm4gU1tNXT1OLE59LEUxLmdldENvbnRleHRNZXRhPWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT10aGlzLGs9IiIsUyxNPXguX3ByaXZhdGUuc3R5bGVDeHRLZXl8fCIiLE89MDtPPG0ubGVuZ3RoO08rKyl7dmFyIE49bVtPXSwkPU4uc2VsZWN0b3ImJk4uc2VsZWN0b3IubWF0Y2hlcyh4KTskP2srPW9rOmsrPWdyZX1yZXR1cm4gUz1tLmdldFByb3BlcnRpZXNEaWZmKE0saykseC5fcHJpdmF0ZS5zdHlsZUN4dEtleT1rLHtrZXk6ayxkaWZmUHJvcE5hbWVzOlMsZW1wdHk6Uy5sZW5ndGg9PT0wfX0sRTEuZ2V0Q29udGV4dFN0eWxlPWZ1bmN0aW9uKHgpe3ZhciBtPXgua2V5LGs9dGhpcyxTPXRoaXMuX3ByaXZhdGUuY29udGV4dFN0eWxlcz10aGlzLl9wcml2YXRlLmNvbnRleHRTdHlsZXN8fHt9O2lmKFNbbV0pcmV0dXJuIFNbbV07Zm9yKHZhciBNPXtfcHJpdmF0ZTp7a2V5Om19fSxPPTA7TzxrLmxlbmd0aDtPKyspe3ZhciBOPWtbT10sJD1tW09dPT09b2s7aWYoJClmb3IodmFyIEg9MDtIPE4ucHJvcGVydGllcy5sZW5ndGg7SCsrKXt2YXIgcT1OLnByb3BlcnRpZXNbSF07TVtxLm5hbWVdPXF9fXJldHVybiBTW21dPU0sTX0sRTEuYXBwbHlDb250ZXh0U3R5bGU9ZnVuY3Rpb24oeCxtLGspe2Zvcih2YXIgUz10aGlzLE09eC5kaWZmUHJvcE5hbWVzLE89e30sTj1TLnR5cGVzLCQ9MDskPE0ubGVuZ3RoOyQrKyl7dmFyIEg9TVskXSxxPW1bSF0sWT1rLnBzdHlsZShIKTtpZighcSlpZihZKVkuYnlwYXNzP3E9e25hbWU6SCxkZWxldGVCeXBhc3NlZDohMH06cT17bmFtZTpILGRlbGV0ZTohMH07ZWxzZSBjb250aW51ZTtpZihZIT09cSl7aWYocS5tYXBwZWQ9PT1OLmZuJiZZIT1udWxsJiZZLm1hcHBpbmchPW51bGwmJlkubWFwcGluZy52YWx1ZT09PXEudmFsdWUpe3ZhciBaPVkubWFwcGluZyxjZT1aLmZuVmFsdWU9cS52YWx1ZShrKTtpZihjZT09PVoucHJldkZuVmFsdWUpY29udGludWV9dmFyIHZlPU9bSF09e3ByZXY6WX07Uy5hcHBseVBhcnNlZFByb3BlcnR5KGsscSksdmUubmV4dD1rLnBzdHlsZShIKSx2ZS5uZXh0JiZ2ZS5uZXh0LmJ5cGFzcyYmKHZlLm5leHQ9dmUubmV4dC5ieXBhc3NlZCl9fXJldHVybntkaWZmUHJvcHM6T319LEUxLnVwZGF0ZVN0eWxlSGludHM9ZnVuY3Rpb24oeCl7dmFyIG09eC5fcHJpdmF0ZSxrPXRoaXMsUz1rLnByb3BlcnR5R3JvdXBOYW1lcyxNPWsucHJvcGVydHlHcm91cEtleXMsTz1mdW5jdGlvbihTaSx5cyxwYSl7cmV0dXJuIGsuZ2V0UHJvcGVydGllc0hhc2goU2kseXMscGEpfSxOPW0uc3R5bGVLZXk7aWYoeC5yZW1vdmVkKCkpcmV0dXJuITE7dmFyICQ9bS5ncm91cD09PSJub2RlcyIsSD14Ll9wcml2YXRlLnN0eWxlO1M9T2JqZWN0LmtleXMoSCk7Zm9yKHZhciBxPTA7cTxNLmxlbmd0aDtxKyspe3ZhciBZPU1bcV07bS5zdHlsZUtleXNbWV09W1kzLGM1XX1mb3IodmFyIFo9ZnVuY3Rpb24oU2kseXMpe3JldHVybiBtLnN0eWxlS2V5c1t5c11bMF09emcoU2ksbS5zdHlsZUtleXNbeXNdWzBdKX0sY2U9ZnVuY3Rpb24oU2kseXMpe3JldHVybiBtLnN0eWxlS2V5c1t5c11bMV09Ym0oU2ksbS5zdHlsZUtleXNbeXNdWzFdKX0sdmU9ZnVuY3Rpb24oU2kseXMpe1ooU2kseXMpLGNlKFNpLHlzKX0sbWU9ZnVuY3Rpb24oU2kseXMpe2Zvcih2YXIgcGE9MDtwYTxTaS5sZW5ndGg7cGErKyl7dmFyIE1pPVNpLmNoYXJDb2RlQXQocGEpO1ooTWkseXMpLGNlKE1pLHlzKX19LExlPTJlOSxfZT1mdW5jdGlvbihTaSl7cmV0dXJuLTEyODxTaSYmU2k8MTI4JiZNYXRoLmZsb29yKFNpKSE9PVNpP0xlLShTaSoxMDI0fDApOlNpfSxFZT0wO0VlPFMubGVuZ3RoO0VlKyspe3ZhciBCZT1TW0VlXSxSZT1IW0JlXTtpZihSZSE9bnVsbCl7dmFyIFZlPXRoaXMucHJvcGVydGllc1tCZV0sY3Q9VmUudHlwZSxzdD1WZS5ncm91cEtleSxZZT12b2lkIDA7VmUuaGFzaE92ZXJyaWRlIT1udWxsP1llPVZlLmhhc2hPdmVycmlkZSh4LFJlKTpSZS5wZlZhbHVlIT1udWxsJiYoWWU9UmUucGZWYWx1ZSk7dmFyIG10PVZlLmVudW1zPT1udWxsP1JlLnZhbHVlOm51bGwsSmU9WWUhPW51bGwsTHQ9bXQhPW51bGwsTXQ9SmV8fEx0LHV0PVJlLnVuaXRzO2lmKGN0Lm51bWJlciYmTXQmJiFjdC5tdWx0aXBsZSl7dmFyIFd0PUplP1llOm10O3ZlKF9lKFd0KSxzdCksIUplJiZ1dCE9bnVsbCYmbWUodXQsc3QpfWVsc2UgbWUoUmUuc3RyVmFsdWUsc3QpfX1mb3IodmFyIFR0PVtZMyxjNV0sX249MDtfbjxNLmxlbmd0aDtfbisrKXt2YXIgaG49TVtfbl0sWXQ9bS5zdHlsZUtleXNbaG5dO1R0WzBdPXpnKFl0WzBdLFR0WzBdKSxUdFsxXT1ibShZdFsxXSxUdFsxXSl9bS5zdHlsZUtleT16OShUdFswXSxUdFsxXSk7dmFyIERuPW0uc3R5bGVLZXlzO20ubGFiZWxEaW1zS2V5PW1tKERuLmxhYmVsRGltZW5zaW9ucyk7dmFyIGlyPU8oeCxbImxhYmVsIl0sRG4ubGFiZWxEaW1lbnNpb25zKTtpZihtLmxhYmVsS2V5PW1tKGlyKSxtLmxhYmVsU3R5bGVLZXk9bW0odTUoRG4uY29tbW9uTGFiZWwsaXIpKSwhJCl7dmFyIHZyPU8oeCxbInNvdXJjZS1sYWJlbCJdLERuLmxhYmVsRGltZW5zaW9ucyk7bS5zb3VyY2VMYWJlbEtleT1tbSh2ciksbS5zb3VyY2VMYWJlbFN0eWxlS2V5PW1tKHU1KERuLmNvbW1vbkxhYmVsLHZyKSk7dmFyIE5uPU8oeCxbInRhcmdldC1sYWJlbCJdLERuLmxhYmVsRGltZW5zaW9ucyk7bS50YXJnZXRMYWJlbEtleT1tbShObiksbS50YXJnZXRMYWJlbFN0eWxlS2V5PW1tKHU1KERuLmNvbW1vbkxhYmVsLE5uKSl9aWYoJCl7dmFyIHByPW0uc3R5bGVLZXlzLEVyPXByLm5vZGVCb2R5LE1yPXByLm5vZGVCb3JkZXIsQ3I9cHIubm9kZU91dGxpbmUsT3I9cHIuYmFja2dyb3VuZEltYWdlLFduPXByLmNvbXBvdW5kLGJyPXByLnBpZSxTcj1bRXIsTXIsQ3IsT3IsV24sYnJdLmZpbHRlcihmdW5jdGlvbihOcil7cmV0dXJuIE5yIT1udWxsfSkucmVkdWNlKHU1LFtZMyxjNV0pO20ubm9kZUtleT1tbShTciksbS5oYXNQaWU9YnIhPW51bGwmJmJyWzBdIT09WTMmJmJyWzFdIT09YzV9cmV0dXJuIE4hPT1tLnN0eWxlS2V5fSxFMS5jbGVhclN0eWxlSGludHM9ZnVuY3Rpb24oeCl7dmFyIG09eC5fcHJpdmF0ZTttLnN0eWxlQ3h0S2V5PSIiLG0uc3R5bGVLZXlzPXt9LG0uc3R5bGVLZXk9bnVsbCxtLmxhYmVsS2V5PW51bGwsbS5sYWJlbFN0eWxlS2V5PW51bGwsbS5zb3VyY2VMYWJlbEtleT1udWxsLG0uc291cmNlTGFiZWxTdHlsZUtleT1udWxsLG0udGFyZ2V0TGFiZWxLZXk9bnVsbCxtLnRhcmdldExhYmVsU3R5bGVLZXk9bnVsbCxtLm5vZGVLZXk9bnVsbCxtLmhhc1BpZT1udWxsfSxFMS5hcHBseVBhcnNlZFByb3BlcnR5PWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcyxTPW0sTT14Ll9wcml2YXRlLnN0eWxlLE8sTj1rLnR5cGVzLCQ9ay5wcm9wZXJ0aWVzW1MubmFtZV0udHlwZSxIPVMuYnlwYXNzLHE9TVtTLm5hbWVdLFk9cSYmcS5ieXBhc3MsWj14Ll9wcml2YXRlLGNlPSJtYXBwaW5nIix2ZT1mdW5jdGlvbihFcil7cmV0dXJuIEVyPT1udWxsP251bGw6RXIucGZWYWx1ZSE9bnVsbD9Fci5wZlZhbHVlOkVyLnZhbHVlfSxtZT1mdW5jdGlvbigpe3ZhciBFcj12ZShxKSxNcj12ZShTKTtrLmNoZWNrVHJpZ2dlcnMoeCxTLm5hbWUsRXIsTXIpfTtpZihtLm5hbWU9PT0iY3VydmUtc3R5bGUiJiZ4LmlzRWRnZSgpJiYobS52YWx1ZSE9PSJiZXppZXIiJiZ4LmlzTG9vcCgpfHxtLnZhbHVlPT09ImhheXN0YWNrIiYmKHguc291cmNlKCkuaXNQYXJlbnQoKXx8eC50YXJnZXQoKS5pc1BhcmVudCgpKSkmJihTPW09dGhpcy5wYXJzZShtLm5hbWUsImJlemllciIsSCkpLFMuZGVsZXRlKXJldHVybiBNW1MubmFtZV09dm9pZCAwLG1lKCksITA7aWYoUy5kZWxldGVCeXBhc3NlZClyZXR1cm4gcT9xLmJ5cGFzcz8ocS5ieXBhc3NlZD12b2lkIDAsbWUoKSwhMCk6ITE6KG1lKCksITApO2lmKFMuZGVsZXRlQnlwYXNzKXJldHVybiBxP3EuYnlwYXNzPyhNW1MubmFtZV09cS5ieXBhc3NlZCxtZSgpLCEwKTohMToobWUoKSwhMCk7dmFyIExlPWZ1bmN0aW9uKCl7aHUoIkRvIG5vdCBhc3NpZ24gbWFwcGluZ3MgdG8gZWxlbWVudHMgd2l0aG91dCBjb3JyZXNwb25kaW5nIGRhdGEgKGkuZS4gZWxlIGAiK3guaWQoKSsiYCBoYXMgbm8gbWFwcGluZyBmb3IgcHJvcGVydHkgYCIrUy5uYW1lKyJgIHdpdGggZGF0YSBmaWVsZCBgIitTLmZpZWxkKyJgKTsgdHJ5IGEgYFsiK1MuZmllbGQrIl1gIHNlbGVjdG9yIHRvIGxpbWl0IHNjb3BlIHRvIGVsZW1lbnRzIHdpdGggYCIrUy5maWVsZCsiYCBkZWZpbmVkIil9O3N3aXRjaChTLm1hcHBlZCl7Y2FzZSBOLm1hcERhdGE6e2Zvcih2YXIgX2U9Uy5maWVsZC5zcGxpdCgiLiIpLEVlPVouZGF0YSxCZT0wO0JlPF9lLmxlbmd0aCYmRWU7QmUrKyl7dmFyIFJlPV9lW0JlXTtFZT1FZVtSZV19aWYoRWU9PW51bGwpcmV0dXJuIExlKCksITE7dmFyIFZlO2lmKFgoRWUpKXt2YXIgY3Q9Uy5maWVsZE1heC1TLmZpZWxkTWluO2N0PT09MD9WZT0wOlZlPShFZS1TLmZpZWxkTWluKS9jdH1lbHNlIHJldHVybiBodSgiRG8gbm90IHVzZSBjb250aW51b3VzIG1hcHBlcnMgd2l0aG91dCBzcGVjaWZ5aW5nIG51bWVyaWMgZGF0YSAoaS5lLiBgIitTLmZpZWxkKyI6ICIrRWUrImAgZm9yIGAiK3guaWQoKSsiYCBpcyBub24tbnVtZXJpYykiKSwhMTtpZihWZTwwP1ZlPTA6VmU+MSYmKFZlPTEpLCQuY29sb3Ipe3ZhciBzdD1TLnZhbHVlTWluWzBdLFllPVMudmFsdWVNYXhbMF0sbXQ9Uy52YWx1ZU1pblsxXSxKZT1TLnZhbHVlTWF4WzFdLEx0PVMudmFsdWVNaW5bMl0sTXQ9Uy52YWx1ZU1heFsyXSx1dD1TLnZhbHVlTWluWzNdPT1udWxsPzE6Uy52YWx1ZU1pblszXSxXdD1TLnZhbHVlTWF4WzNdPT1udWxsPzE6Uy52YWx1ZU1heFszXSxUdD1bTWF0aC5yb3VuZChzdCsoWWUtc3QpKlZlKSxNYXRoLnJvdW5kKG10KyhKZS1tdCkqVmUpLE1hdGgucm91bmQoTHQrKE10LUx0KSpWZSksTWF0aC5yb3VuZCh1dCsoV3QtdXQpKlZlKV07Tz17YnlwYXNzOlMuYnlwYXNzLG5hbWU6Uy5uYW1lLHZhbHVlOlR0LHN0clZhbHVlOiJyZ2IoIitUdFswXSsiLCAiK1R0WzFdKyIsICIrVHRbMl0rIikifX1lbHNlIGlmKCQubnVtYmVyKXt2YXIgX249Uy52YWx1ZU1pbisoUy52YWx1ZU1heC1TLnZhbHVlTWluKSpWZTtPPXRoaXMucGFyc2UoUy5uYW1lLF9uLFMuYnlwYXNzLGNlKX1lbHNlIHJldHVybiExO2lmKCFPKXJldHVybiBMZSgpLCExO08ubWFwcGluZz1TLFM9TzticmVha31jYXNlIE4uZGF0YTp7Zm9yKHZhciBobj1TLmZpZWxkLnNwbGl0KCIuIiksWXQ9Wi5kYXRhLERuPTA7RG48aG4ubGVuZ3RoJiZZdDtEbisrKXt2YXIgaXI9aG5bRG5dO1l0PVl0W2lyXX1pZihZdCE9bnVsbCYmKE89dGhpcy5wYXJzZShTLm5hbWUsWXQsUy5ieXBhc3MsY2UpKSwhTylyZXR1cm4gTGUoKSwhMTtPLm1hcHBpbmc9UyxTPU87YnJlYWt9Y2FzZSBOLmZuOnt2YXIgdnI9Uy52YWx1ZSxObj1TLmZuVmFsdWUhPW51bGw/Uy5mblZhbHVlOnZyKHgpO2lmKFMucHJldkZuVmFsdWU9Tm4sTm49PW51bGwpcmV0dXJuIGh1KCJDdXN0b20gZnVuY3Rpb24gbWFwcGVycyBtYXkgbm90IHJldHVybiBudWxsIChpLmUuIGAiK1MubmFtZSsiYCBmb3IgZWxlIGAiK3guaWQoKSsiYCBpcyBudWxsKSIpLCExO2lmKE89dGhpcy5wYXJzZShTLm5hbWUsTm4sUy5ieXBhc3MsY2UpLCFPKXJldHVybiBodSgiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gaW52YWxpZCB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSB0eXBlIChpLmUuIGAiK1MubmFtZSsiYCBmb3IgZWxlIGAiK3guaWQoKSsiYCBpcyBpbnZhbGlkKSIpLCExO08ubWFwcGluZz12bShTKSxTPU87YnJlYWt9Y2FzZSB2b2lkIDA6YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gSD8oWT9TLmJ5cGFzc2VkPXEuYnlwYXNzZWQ6Uy5ieXBhc3NlZD1xLE1bUy5uYW1lXT1TKTpZP3EuYnlwYXNzZWQ9UzpNW1MubmFtZV09UyxtZSgpLCEwfSxFMS5jbGVhbkVsZW1lbnRzPWZ1bmN0aW9uKHgsbSl7Zm9yKHZhciBrPTA7azx4Lmxlbmd0aDtrKyspe3ZhciBTPXhba107aWYodGhpcy5jbGVhclN0eWxlSGludHMoUyksUy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxTLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLCFtKVMuX3ByaXZhdGUuc3R5bGU9e307ZWxzZSBmb3IodmFyIE09Uy5fcHJpdmF0ZS5zdHlsZSxPPU9iamVjdC5rZXlzKE0pLE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXSxIPU1bJF07SCE9bnVsbCYmKEguYnlwYXNzP0guYnlwYXNzZWQ9bnVsbDpNWyRdPW51bGwpfX19LEUxLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3ksbT14Lm11dGFibGVFbGVtZW50cygpO20udXBkYXRlU3R5bGUoKX0sRTEudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9eC5fcHJpdmF0ZSxNPXgucHN0eWxlKCJ0cmFuc2l0aW9uLXByb3BlcnR5IikudmFsdWUsTz14LnBzdHlsZSgidHJhbnNpdGlvbi1kdXJhdGlvbiIpLnBmVmFsdWUsTj14LnBzdHlsZSgidHJhbnNpdGlvbi1kZWxheSIpLnBmVmFsdWU7aWYoTS5sZW5ndGg+MCYmTz4wKXtmb3IodmFyICQ9e30sSD0hMSxxPTA7cTxNLmxlbmd0aDtxKyspe3ZhciBZPU1bcV0sWj14LnBzdHlsZShZKSxjZT1tW1ldO2lmKGNlKXt2YXIgdmU9Y2UucHJldixtZT12ZSxMZT1jZS5uZXh0IT1udWxsP2NlLm5leHQ6WixfZT0hMSxFZT12b2lkIDAsQmU9MWUtNjttZSYmKFgobWUucGZWYWx1ZSkmJlgoTGUucGZWYWx1ZSk/KF9lPUxlLnBmVmFsdWUtbWUucGZWYWx1ZSxFZT1tZS5wZlZhbHVlK0JlKl9lKTpYKG1lLnZhbHVlKSYmWChMZS52YWx1ZSk/KF9lPUxlLnZhbHVlLW1lLnZhbHVlLEVlPW1lLnZhbHVlK0JlKl9lKTpuZShtZS52YWx1ZSkmJm5lKExlLnZhbHVlKSYmKF9lPW1lLnZhbHVlWzBdIT09TGUudmFsdWVbMF18fG1lLnZhbHVlWzFdIT09TGUudmFsdWVbMV18fG1lLnZhbHVlWzJdIT09TGUudmFsdWVbMl0sRWU9bWUuc3RyVmFsdWUpLF9lJiYoJFtZXT1MZS5zdHJWYWx1ZSx0aGlzLmFwcGx5QnlwYXNzKHgsWSxFZSksSD0hMCkpfX1pZighSClyZXR1cm47Uy50cmFuc2l0aW9uaW5nPSEwLG5ldyBpOChmdW5jdGlvbihSZSl7Tj4wP3guZGVsYXlBbmltYXRpb24oTikucGxheSgpLnByb21pc2UoKS50aGVuKFJlKTpSZSgpfSkudGhlbihmdW5jdGlvbigpe3JldHVybiB4LmFuaW1hdGlvbih7c3R5bGU6JCxkdXJhdGlvbjpPLGVhc2luZzp4LnBzdHlsZSgidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iKS52YWx1ZSxxdWV1ZTohMX0pLnBsYXkoKS5wcm9taXNlKCl9KS50aGVuKGZ1bmN0aW9uKCl7ay5yZW1vdmVCeXBhc3Nlcyh4LE0pLHguZW1pdEFuZE5vdGlmeSgic3R5bGUiKSxTLnRyYW5zaXRpb25pbmc9ITF9KX1lbHNlIFMudHJhbnNpdGlvbmluZyYmKHRoaXMucmVtb3ZlQnlwYXNzZXMoeCxNKSx4LmVtaXRBbmROb3RpZnkoInN0eWxlIiksUy50cmFuc2l0aW9uaW5nPSExKX0sRTEuY2hlY2tUcmlnZ2VyPWZ1bmN0aW9uKHgsbSxrLFMsTSxPKXt2YXIgTj10aGlzLnByb3BlcnRpZXNbbV0sJD1NKE4pOyQhPW51bGwmJiQoayxTKSYmTyhOKX0sRTEuY2hlY2taT3JkZXJUcmlnZ2VyPWZ1bmN0aW9uKHgsbSxrLFMpe3ZhciBNPXRoaXM7dGhpcy5jaGVja1RyaWdnZXIoeCxtLGssUyxmdW5jdGlvbihPKXtyZXR1cm4gTy50cmlnZ2Vyc1pPcmRlcn0sZnVuY3Rpb24oKXtNLl9wcml2YXRlLmN5Lm5vdGlmeSgiem9yZGVyIix4KX0pfSxFMS5jaGVja0JvdW5kc1RyaWdnZXI9ZnVuY3Rpb24oeCxtLGssUyl7dGhpcy5jaGVja1RyaWdnZXIoeCxtLGssUyxmdW5jdGlvbihNKXtyZXR1cm4gTS50cmlnZ2Vyc0JvdW5kc30sZnVuY3Rpb24oTSl7eC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSx4LmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLE0udHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVycyYmbT09PSJjdXJ2ZS1zdHlsZSImJihrPT09ImJlemllciJ8fFM9PT0iYmV6aWVyIikmJngucGFyYWxsZWxFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oTyl7Ty5pc0J1bmRsZWRCZXppZXIoKSYmTy5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX0pLE0udHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzJiZtPT09ImRpc3BsYXkiJiYoaz09PSJub25lInx8Uz09PSJub25lIikmJnguY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKE8pe08uZGlydHlCb3VuZGluZ0JveENhY2hlKCl9KX0pfSxFMS5jaGVja1RyaWdnZXJzPWZ1bmN0aW9uKHgsbSxrLFMpe3guZGlydHlTdHlsZUNhY2hlKCksdGhpcy5jaGVja1pPcmRlclRyaWdnZXIoeCxtLGssUyksdGhpcy5jaGVja0JvdW5kc1RyaWdnZXIoeCxtLGssUyl9O3ZhciBjaz17fTtjay5hcHBseUJ5cGFzcz1mdW5jdGlvbih4LG0sayxTKXt2YXIgTT10aGlzLE89W10sTj0hMDtpZihtPT09IioifHxtPT09IioqIil7aWYoayE9PXZvaWQgMClmb3IodmFyICQ9MDskPE0ucHJvcGVydGllcy5sZW5ndGg7JCsrKXt2YXIgSD1NLnByb3BlcnRpZXNbJF0scT1ILm5hbWUsWT10aGlzLnBhcnNlKHEsaywhMCk7WSYmTy5wdXNoKFkpfX1lbHNlIGlmKGJlKG0pKXt2YXIgWj10aGlzLnBhcnNlKG0saywhMCk7WiYmTy5wdXNoKFopfWVsc2UgaWYoc2UobSkpe3ZhciBjZT1tO1M9aztmb3IodmFyIHZlPU9iamVjdC5rZXlzKGNlKSxtZT0wO21lPHZlLmxlbmd0aDttZSsrKXt2YXIgTGU9dmVbbWVdLF9lPWNlW0xlXTtpZihfZT09PXZvaWQgMCYmKF9lPWNlW190KExlKV0pLF9lIT09dm9pZCAwKXt2YXIgRWU9dGhpcy5wYXJzZShMZSxfZSwhMCk7RWUmJk8ucHVzaChFZSl9fX1lbHNlIHJldHVybiExO2lmKE8ubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIEJlPSExLFJlPTA7UmU8eC5sZW5ndGg7UmUrKyl7Zm9yKHZhciBWZT14W1JlXSxjdD17fSxzdD12b2lkIDAsWWU9MDtZZTxPLmxlbmd0aDtZZSsrKXt2YXIgbXQ9T1tZZV07aWYoUyl7dmFyIEplPVZlLnBzdHlsZShtdC5uYW1lKTtzdD1jdFttdC5uYW1lXT17cHJldjpKZX19QmU9dGhpcy5hcHBseVBhcnNlZFByb3BlcnR5KFZlLHZtKG10KSl8fEJlLFMmJihzdC5uZXh0PVZlLnBzdHlsZShtdC5uYW1lKSl9QmUmJnRoaXMudXBkYXRlU3R5bGVIaW50cyhWZSksUyYmdGhpcy51cGRhdGVUcmFuc2l0aW9ucyhWZSxjdCxOKX1yZXR1cm4gQmV9LGNrLm92ZXJyaWRlQnlwYXNzPWZ1bmN0aW9uKHgsbSxrKXttPWduKG0pO2Zvcih2YXIgUz0wO1M8eC5sZW5ndGg7UysrKXt2YXIgTT14W1NdLE89TS5fcHJpdmF0ZS5zdHlsZVttXSxOPXRoaXMucHJvcGVydGllc1ttXS50eXBlLCQ9Ti5jb2xvcixIPU4ubXV0aXBsZSxxPU8/Ty5wZlZhbHVlIT1udWxsP08ucGZWYWx1ZTpPLnZhbHVlOm51bGw7IU98fCFPLmJ5cGFzcz90aGlzLmFwcGx5QnlwYXNzKE0sbSxrKTooTy52YWx1ZT1rLE8ucGZWYWx1ZSE9bnVsbCYmKE8ucGZWYWx1ZT1rKSwkP08uc3RyVmFsdWU9InJnYigiK2suam9pbigiLCIpKyIpIjpIP08uc3RyVmFsdWU9ay5qb2luKCIgIik6Ty5zdHJWYWx1ZT0iIitrLHRoaXMudXBkYXRlU3R5bGVIaW50cyhNKSksdGhpcy5jaGVja1RyaWdnZXJzKE0sbSxxLGspfX0sY2sucmVtb3ZlQWxsQnlwYXNzZXM9ZnVuY3Rpb24oeCxtKXtyZXR1cm4gdGhpcy5yZW1vdmVCeXBhc3Nlcyh4LHRoaXMucHJvcGVydHlOYW1lcyxtKX0sY2sucmVtb3ZlQnlwYXNzZXM9ZnVuY3Rpb24oeCxtLGspe2Zvcih2YXIgUz0hMCxNPTA7TTx4Lmxlbmd0aDtNKyspe2Zvcih2YXIgTz14W01dLE49e30sJD0wOyQ8bS5sZW5ndGg7JCsrKXt2YXIgSD1tWyRdLHE9dGhpcy5wcm9wZXJ0aWVzW0hdLFk9Ty5wc3R5bGUocS5uYW1lKTtpZighKCFZfHwhWS5ieXBhc3MpKXt2YXIgWj0iIixjZT10aGlzLnBhcnNlKEgsWiwhMCksdmU9TltxLm5hbWVdPXtwcmV2Oll9O3RoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShPLGNlKSx2ZS5uZXh0PU8ucHN0eWxlKHEubmFtZSl9fXRoaXMudXBkYXRlU3R5bGVIaW50cyhPKSxrJiZ0aGlzLnVwZGF0ZVRyYW5zaXRpb25zKE8sTixTKX19O3ZhciBJST17fTtJSS5nZXRFbVNpemVJblBpeGVscz1mdW5jdGlvbigpe3ZhciB4PXRoaXMuY29udGFpbmVyQ3NzKCJmb250LXNpemUiKTtyZXR1cm4geCE9bnVsbD9wYXJzZUZsb2F0KHgpOjF9LElJLmNvbnRhaW5lckNzcz1mdW5jdGlvbih4KXt2YXIgbT10aGlzLl9wcml2YXRlLmN5LGs9bS5jb250YWluZXIoKSxTPW0ud2luZG93KCk7aWYoUyYmayYmUy5nZXRDb21wdXRlZFN0eWxlKXJldHVybiBTLmdldENvbXB1dGVkU3R5bGUoaykuZ2V0UHJvcGVydHlWYWx1ZSh4KX07dmFyIHhtPXt9O3htLmdldFJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeCxtKXtyZXR1cm4gbT90aGlzLmdldFN0eWxlUHJvcGVydHlWYWx1ZSh4LG0sITApOnRoaXMuZ2V0UmF3U3R5bGUoeCwhMCl9LHhtLmdldFJhd1N0eWxlPWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcztpZih4PXhbMF0seCl7Zm9yKHZhciBTPXt9LE09MDtNPGsucHJvcGVydGllcy5sZW5ndGg7TSsrKXt2YXIgTz1rLnByb3BlcnRpZXNbTV0sTj1rLmdldFN0eWxlUHJvcGVydHlWYWx1ZSh4LE8ubmFtZSxtKTtOIT1udWxsJiYoU1tPLm5hbWVdPU4sU1tfdChPLm5hbWUpXT1OKX1yZXR1cm4gU319LHhtLmdldEluZGV4ZWRTdHlsZT1mdW5jdGlvbih4LG0sayxTKXt2YXIgTT14LnBzdHlsZShtKVtrXVtTXTtyZXR1cm4gTT8/eC5jeSgpLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KG0pW2tdWzBdfSx4bS5nZXRTdHlsZVByb3BlcnR5VmFsdWU9ZnVuY3Rpb24oeCxtLGspe3ZhciBTPXRoaXM7aWYoeD14WzBdLHgpe3ZhciBNPVMucHJvcGVydGllc1ttXTtNLmFsaWFzJiYoTT1NLnBvaW50c1RvKTt2YXIgTz1NLnR5cGUsTj14LnBzdHlsZShNLm5hbWUpO2lmKE4pe3ZhciAkPU4udmFsdWUsSD1OLnVuaXRzLHE9Ti5zdHJWYWx1ZTtpZihrJiZPLm51bWJlciYmJCE9bnVsbCYmWCgkKSl7dmFyIFk9eC5jeSgpLnpvb20oKSxaPWZ1bmN0aW9uKF9lKXtyZXR1cm4gX2UqWX0sY2U9ZnVuY3Rpb24oX2UsRWUpe3JldHVybiBaKF9lKStFZX0sdmU9bmUoJCksbWU9dmU/SC5ldmVyeShmdW5jdGlvbihMZSl7cmV0dXJuIExlIT1udWxsfSk6SCE9bnVsbDtyZXR1cm4gbWU/dmU/JC5tYXAoZnVuY3Rpb24oTGUsX2Upe3JldHVybiBjZShMZSxIW19lXSl9KS5qb2luKCIgIik6Y2UoJCxIKTp2ZT8kLm1hcChmdW5jdGlvbihMZSl7cmV0dXJuIGJlKExlKT9MZToiIitaKExlKX0pLmpvaW4oIiAiKToiIitaKCQpfWVsc2UgaWYocSE9bnVsbClyZXR1cm4gcX1yZXR1cm4gbnVsbH19LHhtLmdldEFuaW1hdGlvblN0YXJ0U3R5bGU9ZnVuY3Rpb24oeCxtKXtmb3IodmFyIGs9e30sUz0wO1M8bS5sZW5ndGg7UysrKXt2YXIgTT1tW1NdLE89TS5uYW1lLE49eC5wc3R5bGUoTyk7TiE9PXZvaWQgMCYmKHNlKE4pP049dGhpcy5wYXJzZShPLE4uc3RyVmFsdWUpOk49dGhpcy5wYXJzZShPLE4pKSxOJiYoa1tPXT1OKX1yZXR1cm4ga30seG0uZ2V0UHJvcHNMaXN0PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMsaz1bXSxTPXgsTT1tLnByb3BlcnRpZXM7aWYoUylmb3IodmFyIE89T2JqZWN0LmtleXMoUyksTj0wO048Ty5sZW5ndGg7TisrKXt2YXIgJD1PW05dLEg9U1skXSxxPU1bJF18fE1bZ24oJCldLFk9dGhpcy5wYXJzZShxLm5hbWUsSCk7WSYmay5wdXNoKFkpfXJldHVybiBrfSx4bS5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g9ZnVuY3Rpb24oeCxtLGspe3ZhciBTPWsuc2xpY2UoKSxNLE8sTiwkLEgscTtmb3IoSD0wO0g8bS5sZW5ndGg7SCsrKWlmKE09bVtIXSxPPXgucHN0eWxlKE0sITEpLE8hPW51bGwpaWYoTy5wZlZhbHVlIT1udWxsKVNbMF09emcoJCxTWzBdKSxTWzFdPWJtKCQsU1sxXSk7ZWxzZSBmb3IoTj1PLnN0clZhbHVlLHE9MDtxPE4ubGVuZ3RoO3ErKykkPU4uY2hhckNvZGVBdChxKSxTWzBdPXpnKCQsU1swXSksU1sxXT1ibSgkLFNbMV0pO3JldHVybiBTfSx4bS5nZXRQcm9wZXJ0aWVzSGFzaD14bS5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g7dmFyICRTPXt9OyRTLmFwcGVuZEZyb21Kc29uPWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT10aGlzLGs9MDtrPHgubGVuZ3RoO2srKyl7dmFyIFM9eFtrXSxNPVMuc2VsZWN0b3IsTz1TLnN0eWxlfHxTLmNzcyxOPU9iamVjdC5rZXlzKE8pO20uc2VsZWN0b3IoTSk7Zm9yKHZhciAkPTA7JDxOLmxlbmd0aDskKyspe3ZhciBIPU5bJF0scT1PW0hdO20uY3NzKEgscSl9fXJldHVybiBtfSwkUy5mcm9tSnNvbj1mdW5jdGlvbih4KXt2YXIgbT10aGlzO3JldHVybiBtLnJlc2V0VG9EZWZhdWx0KCksbS5hcHBlbmRGcm9tSnNvbih4KSxtfSwkUy5qc29uPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PVtdLG09dGhpcy5kZWZhdWx0TGVuZ3RoO208dGhpcy5sZW5ndGg7bSsrKXtmb3IodmFyIGs9dGhpc1ttXSxTPWsuc2VsZWN0b3IsTT1rLnByb3BlcnRpZXMsTz17fSxOPTA7TjxNLmxlbmd0aDtOKyspe3ZhciAkPU1bTl07T1skLm5hbWVdPSQuc3RyVmFsdWV9eC5wdXNoKHtzZWxlY3RvcjpTP1MudG9TdHJpbmcoKToiY29yZSIsc3R5bGU6T30pfXJldHVybiB4fTt2YXIgT0k9e307T0kuYXBwZW5kRnJvbVN0cmluZz1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9dGhpcyxTPSIiK3gsTSxPLE47Uz1TLnJlcGxhY2UoL1svXVsqXShcc3wuKSs/WypdWy9dL2csIiIpO2Z1bmN0aW9uICQoKXtTLmxlbmd0aD5NLmxlbmd0aD9TPVMuc3Vic3RyKE0ubGVuZ3RoKTpTPSIifWZ1bmN0aW9uIEgoKXtPLmxlbmd0aD5OLmxlbmd0aD9PPU8uc3Vic3RyKE4ubGVuZ3RoKTpPPSIifWZvcig7Oyl7dmFyIHE9Uy5tYXRjaCgvXlxzKiQvKTtpZihxKWJyZWFrO3ZhciBZPVMubWF0Y2goL15ccyooKD86LnxccykrPylccypceygoPzoufFxzKSs/KVx9Lyk7aWYoIVkpe2h1KCJIYWx0aW5nIHN0eWxlc2hlZXQgcGFyc2luZzogU3RyaW5nIHN0eWxlc2hlZXQgY29udGFpbnMgbW9yZSB0byBwYXJzZSBidXQgbm8gc2VsZWN0b3IgYW5kIGJsb2NrIGZvdW5kIGluOiAiK1MpO2JyZWFrfU09WVswXTt2YXIgWj1ZWzFdO2lmKFohPT0iY29yZSIpe3ZhciBjZT1uZXcgZXkoWik7aWYoY2UuaW52YWxpZCl7aHUoIlNraXBwaW5nIHBhcnNpbmcgb2YgYmxvY2s6IEludmFsaWQgc2VsZWN0b3IgZm91bmQgaW4gc3RyaW5nIHN0eWxlc2hlZXQ6ICIrWiksJCgpO2NvbnRpbnVlfX12YXIgdmU9WVsyXSxtZT0hMTtPPXZlO2Zvcih2YXIgTGU9W107Oyl7dmFyIF9lPU8ubWF0Y2goL15ccyokLyk7aWYoX2UpYnJlYWs7dmFyIEVlPU8ubWF0Y2goL15ccyooLis/KVxzKjpccyooLis/KSg/OlxzKjt8XHMqJCkvKTtpZighRWUpe2h1KCJTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIGZvcm1hdHRpbmcgb2Ygc3R5bGUgcHJvcGVydHkgYW5kIHZhbHVlIGRlZmluaXRpb25zIGZvdW5kIGluOiIrdmUpLG1lPSEwO2JyZWFrfU49RWVbMF07dmFyIEJlPUVlWzFdLFJlPUVlWzJdLFZlPW0ucHJvcGVydGllc1tCZV07aWYoIVZlKXtodSgiU2tpcHBpbmcgcHJvcGVydHk6IEludmFsaWQgcHJvcGVydHkgbmFtZSBpbjogIitOKSxIKCk7Y29udGludWV9dmFyIGN0PWsucGFyc2UoQmUsUmUpO2lmKCFjdCl7aHUoIlNraXBwaW5nIHByb3BlcnR5OiBJbnZhbGlkIHByb3BlcnR5IGRlZmluaXRpb24gaW46ICIrTiksSCgpO2NvbnRpbnVlfUxlLnB1c2goe25hbWU6QmUsdmFsOlJlfSksSCgpfWlmKG1lKXskKCk7YnJlYWt9ay5zZWxlY3RvcihaKTtmb3IodmFyIHN0PTA7c3Q8TGUubGVuZ3RoO3N0Kyspe3ZhciBZZT1MZVtzdF07ay5jc3MoWWUubmFtZSxZZS52YWwpfSQoKX1yZXR1cm4ga30sT0kuZnJvbVN0cmluZz1mdW5jdGlvbih4KXt2YXIgbT10aGlzO3JldHVybiBtLnJlc2V0VG9EZWZhdWx0KCksbS5hcHBlbmRGcm9tU3RyaW5nKHgpLG19O3ZhciBVMD17fTsoZnVuY3Rpb24oKXt2YXIgeD1sbixtPVB0LGs9RHQsUz1rdCxNPU9uLE89ZnVuY3Rpb24oU3Ipe3JldHVybiJeIitTcisiXFxzKlxcKFxccyooW1xcd1xcLl0rKVxccypcXCkkIn0sTj1mdW5jdGlvbihTcil7dmFyIE5yPXgrInxcXHcrfCIrbSsifCIraysifCIrUysifCIrTTtyZXR1cm4iXiIrU3IrIlxccypcXCgoW1xcd1xcLl0rKVxccypcXCxcXHMqKCIreCsiKVxccypcXCxcXHMqKCIreCsiKVxccyosXFxzKigiK05yKyIpXFxzKlxcLFxccyooIitOcisiKVxcKSQifSwkPVtgXnVybFxccypcXChcXHMqWyciXT8oLis/KVsnIl0/XFxzKlxcKSRgLCJeKG5vbmUpJCIsIl4oLispJCJdO1UwLnR5cGVzPXt0aW1lOntudW1iZXI6ITAsbWluOjAsdW5pdHM6InN8bXMiLGltcGxpY2l0VW5pdHM6Im1zIn0scGVyY2VudDp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUifSxwZXJjZW50YWdlczp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUiLG11bHRpcGxlOiEwfSx6ZXJvT25lTnVtYmVyOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITB9LHplcm9PbmVOdW1iZXJzOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITAsbXVsdGlwbGU6ITB9LG5PbmVPbmVOdW1iZXI6e251bWJlcjohMCxtaW46LTEsbWF4OjEsdW5pdGxlc3M6ITB9LG5vbk5lZ2F0aXZlSW50OntudW1iZXI6ITAsbWluOjAsaW50ZWdlcjohMCx1bml0bGVzczohMH0sbm9uTmVnYXRpdmVOdW1iZXI6e251bWJlcjohMCxtaW46MCx1bml0bGVzczohMH0scG9zaXRpb246e2VudW1zOlsicGFyZW50Iiwib3JpZ2luIl19LG5vZGVTaXplOntudW1iZXI6ITAsbWluOjAsZW51bXM6WyJsYWJlbCJdfSxudW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMH0sbnVtYmVyczp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxwb3NpdGl2ZU51bWJlcjp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG1pbjowLHN0cmljdE1pbjohMH0sc2l6ZTp7bnVtYmVyOiEwLG1pbjowfSxiaWRpcmVjdGlvbmFsU2l6ZTp7bnVtYmVyOiEwfSxiaWRpcmVjdGlvbmFsU2l6ZU1heWJlUGVyY2VudDp7bnVtYmVyOiEwLGFsbG93UGVyY2VudDohMH0sYmlkaXJlY3Rpb25hbFNpemVzOntudW1iZXI6ITAsbXVsdGlwbGU6ITB9LHNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITB9LGF4aXNEaXJlY3Rpb246e2VudW1zOlsiaG9yaXpvbnRhbCIsImxlZnR3YXJkIiwicmlnaHR3YXJkIiwidmVydGljYWwiLCJ1cHdhcmQiLCJkb3dud2FyZCIsImF1dG8iXX0scGFkZGluZ1JlbGF0aXZlVG86e2VudW1zOlsid2lkdGgiLCJoZWlnaHQiLCJhdmVyYWdlIiwibWluIiwibWF4Il19LGJnV0g6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITAsZW51bXM6WyJhdXRvIl0sbXVsdGlwbGU6ITB9LGJnUG9zOntudW1iZXI6ITAsYWxsb3dQZXJjZW50OiEwLG11bHRpcGxlOiEwfSxiZ1JlbGF0aXZlVG86e2VudW1zOlsiaW5uZXIiLCJpbmNsdWRlLXBhZGRpbmciXSxtdWx0aXBsZTohMH0sYmdSZXBlYXQ6e2VudW1zOlsicmVwZWF0IiwicmVwZWF0LXgiLCJyZXBlYXQteSIsIm5vLXJlcGVhdCJdLG11bHRpcGxlOiEwfSxiZ0ZpdDp7ZW51bXM6WyJub25lIiwiY29udGFpbiIsImNvdmVyIl0sbXVsdGlwbGU6ITB9LGJnQ3Jvc3NPcmlnaW46e2VudW1zOlsiYW5vbnltb3VzIiwidXNlLWNyZWRlbnRpYWxzIiwibnVsbCJdLG11bHRpcGxlOiEwfSxiZ0NsaXA6e2VudW1zOlsibm9uZSIsIm5vZGUiXSxtdWx0aXBsZTohMH0sYmdDb250YWlubWVudDp7ZW51bXM6WyJpbnNpZGUiLCJvdmVyIl0sbXVsdGlwbGU6ITB9LGNvbG9yOntjb2xvcjohMH0sY29sb3JzOntjb2xvcjohMCxtdWx0aXBsZTohMH0sZmlsbDp7ZW51bXM6WyJzb2xpZCIsImxpbmVhci1ncmFkaWVudCIsInJhZGlhbC1ncmFkaWVudCJdfSxib29sOntlbnVtczpbInllcyIsIm5vIl19LGJvb2xzOntlbnVtczpbInllcyIsIm5vIl0sbXVsdGlwbGU6ITB9LGxpbmVTdHlsZTp7ZW51bXM6WyJzb2xpZCIsImRvdHRlZCIsImRhc2hlZCJdfSxsaW5lQ2FwOntlbnVtczpbImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdfSxib3JkZXJTdHlsZTp7ZW51bXM6WyJzb2xpZCIsImRvdHRlZCIsImRhc2hlZCIsImRvdWJsZSJdfSxjdXJ2ZVN0eWxlOntlbnVtczpbImJlemllciIsInVuYnVuZGxlZC1iZXppZXIiLCJoYXlzdGFjayIsInNlZ21lbnRzIiwic3RyYWlnaHQiLCJzdHJhaWdodC10cmlhbmdsZSIsInRheGkiXX0sZm9udEZhbWlseTp7cmVnZXg6J14oW1xcdy0gXFwiXSsoPzpcXHMqLFxccypbXFx3LSBcXCJdKykqKSQnfSxmb250U3R5bGU6e2VudW1zOlsiaXRhbGljIiwibm9ybWFsIiwib2JsaXF1ZSJdfSxmb250V2VpZ2h0OntlbnVtczpbIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIiwiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiODAwIiwiOTAwIiwxMDAsMjAwLDMwMCw0MDAsNTAwLDYwMCw3MDAsODAwLDkwMF19LHRleHREZWNvcmF0aW9uOntlbnVtczpbIm5vbmUiLCJ1bmRlcmxpbmUiLCJvdmVybGluZSIsImxpbmUtdGhyb3VnaCJdfSx0ZXh0VHJhbnNmb3JtOntlbnVtczpbIm5vbmUiLCJ1cHBlcmNhc2UiLCJsb3dlcmNhc2UiXX0sdGV4dFdyYXA6e2VudW1zOlsibm9uZSIsIndyYXAiLCJlbGxpcHNpcyJdfSx0ZXh0T3ZlcmZsb3dXcmFwOntlbnVtczpbIndoaXRlc3BhY2UiLCJhbnl3aGVyZSJdfSx0ZXh0QmFja2dyb3VuZFNoYXBlOntlbnVtczpbInJlY3RhbmdsZSIsInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIl19LG5vZGVTaGFwZTp7ZW51bXM6WyJyZWN0YW5nbGUiLCJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSIsImN1dHJlY3RhbmdsZSIsImN1dC1yZWN0YW5nbGUiLCJib3R0b21yb3VuZHJlY3RhbmdsZSIsImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiLCJiYXJyZWwiLCJlbGxpcHNlIiwidHJpYW5nbGUiLCJyb3VuZC10cmlhbmdsZSIsInNxdWFyZSIsInBlbnRhZ29uIiwicm91bmQtcGVudGFnb24iLCJoZXhhZ29uIiwicm91bmQtaGV4YWdvbiIsImNvbmNhdmVoZXhhZ29uIiwiY29uY2F2ZS1oZXhhZ29uIiwiaGVwdGFnb24iLCJyb3VuZC1oZXB0YWdvbiIsIm9jdGFnb24iLCJyb3VuZC1vY3RhZ29uIiwidGFnIiwicm91bmQtdGFnIiwic3RhciIsImRpYW1vbmQiLCJyb3VuZC1kaWFtb25kIiwidmVlIiwicmhvbWJvaWQiLCJyaWdodC1yaG9tYm9pZCIsInBvbHlnb24iXX0sb3ZlcmxheVNoYXBlOntlbnVtczpbInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIiwiZWxsaXBzZSJdfSxjb21wb3VuZEluY2x1ZGVMYWJlbHM6e2VudW1zOlsiaW5jbHVkZSIsImV4Y2x1ZGUiXX0sYXJyb3dTaGFwZTp7ZW51bXM6WyJ0ZWUiLCJ0cmlhbmdsZSIsInRyaWFuZ2xlLXRlZSIsImNpcmNsZS10cmlhbmdsZSIsInRyaWFuZ2xlLWNyb3NzIiwidHJpYW5nbGUtYmFja2N1cnZlIiwidmVlIiwic3F1YXJlIiwiY2lyY2xlIiwiZGlhbW9uZCIsImNoZXZyb24iLCJub25lIl19LGFycm93RmlsbDp7ZW51bXM6WyJmaWxsZWQiLCJob2xsb3ciXX0sYXJyb3dXaWR0aDp7bnVtYmVyOiEwLHVuaXRzOiIlfHB4fGVtIixpbXBsaWNpdFVuaXRzOiJweCIsZW51bXM6WyJtYXRjaC1saW5lIl19LGRpc3BsYXk6e2VudW1zOlsiZWxlbWVudCIsIm5vbmUiXX0sdmlzaWJpbGl0eTp7ZW51bXM6WyJoaWRkZW4iLCJ2aXNpYmxlIl19LHpDb21wb3VuZERlcHRoOntlbnVtczpbImJvdHRvbSIsIm9ycGhhbiIsImF1dG8iLCJ0b3AiXX0sekluZGV4Q29tcGFyZTp7ZW51bXM6WyJhdXRvIiwibWFudWFsIl19LHZhbGlnbjp7ZW51bXM6WyJ0b3AiLCJjZW50ZXIiLCJib3R0b20iXX0saGFsaWduOntlbnVtczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdfSxqdXN0aWZpY2F0aW9uOntlbnVtczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsImF1dG8iXX0sdGV4dDp7c3RyaW5nOiEwfSxkYXRhOnttYXBwaW5nOiEwLHJlZ2V4Ok8oImRhdGEiKX0sbGF5b3V0RGF0YTp7bWFwcGluZzohMCxyZWdleDpPKCJsYXlvdXREYXRhIil9LHNjcmF0Y2g6e21hcHBpbmc6ITAscmVnZXg6Tygic2NyYXRjaCIpfSxtYXBEYXRhOnttYXBwaW5nOiEwLHJlZ2V4Ok4oIm1hcERhdGEiKX0sbWFwTGF5b3V0RGF0YTp7bWFwcGluZzohMCxyZWdleDpOKCJtYXBMYXlvdXREYXRhIil9LG1hcFNjcmF0Y2g6e21hcHBpbmc6ITAscmVnZXg6TigibWFwU2NyYXRjaCIpfSxmbjp7bWFwcGluZzohMCxmbjohMH0sdXJsOntyZWdleGVzOiQsc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiEwfSx1cmxzOntyZWdleGVzOiQsc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiEwLG11bHRpcGxlOiEwfSxwcm9wTGlzdDp7cHJvcExpc3Q6ITB9LGFuZ2xlOntudW1iZXI6ITAsdW5pdHM6ImRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InJhZCJ9LHRleHRSb3RhdGlvbjp7bnVtYmVyOiEwLHVuaXRzOiJkZWd8cmFkIixpbXBsaWNpdFVuaXRzOiJyYWQiLGVudW1zOlsibm9uZSIsImF1dG9yb3RhdGUiXX0scG9seWdvblBvaW50TGlzdDp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLGV2ZW5NdWx0aXBsZTohMCxtaW46LTEsbWF4OjEsdW5pdGxlc3M6ITB9LGVkZ2VEaXN0YW5jZXM6e2VudW1zOlsiaW50ZXJzZWN0aW9uIiwibm9kZS1wb3NpdGlvbiIsImVuZHBvaW50cyJdfSxlZGdlRW5kcG9pbnQ6e251bWJlcjohMCxtdWx0aXBsZTohMCx1bml0czoiJXxweHxlbXxkZWd8cmFkIixpbXBsaWNpdFVuaXRzOiJweCIsZW51bXM6WyJpbnNpZGUtdG8tbm9kZSIsIm91dHNpZGUtdG8tbm9kZSIsIm91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCIsIm91dHNpZGUtdG8tbGluZSIsIm91dHNpZGUtdG8tbGluZS1vci1sYWJlbCJdLHNpbmdsZUVudW06ITAsdmFsaWRhdGU6ZnVuY3Rpb24oU3IsTnIpe3N3aXRjaChTci5sZW5ndGgpe2Nhc2UgMjpyZXR1cm4gTnJbMF0hPT0iZGVnIiYmTnJbMF0hPT0icmFkIiYmTnJbMV0hPT0iZGVnIiYmTnJbMV0hPT0icmFkIjtjYXNlIDE6cmV0dXJuIGJlKFNyWzBdKXx8TnJbMF09PT0iZGVnInx8TnJbMF09PT0icmFkIjtkZWZhdWx0OnJldHVybiExfX19LGVhc2luZzp7cmVnZXhlczpbIl4oc3ByaW5nKVxccypcXChcXHMqKCIreCsiKVxccyosXFxzKigiK3grIilcXHMqXFwpJCIsIl4oY3ViaWMtYmV6aWVyKVxccypcXChcXHMqKCIreCsiKVxccyosXFxzKigiK3grIilcXHMqLFxccyooIit4KyIpXFxzKixcXHMqKCIreCsiKVxccypcXCkkIl0sZW51bXM6WyJsaW5lYXIiLCJlYXNlIiwiZWFzZS1pbiIsImVhc2Utb3V0IiwiZWFzZS1pbi1vdXQiLCJlYXNlLWluLXNpbmUiLCJlYXNlLW91dC1zaW5lIiwiZWFzZS1pbi1vdXQtc2luZSIsImVhc2UtaW4tcXVhZCIsImVhc2Utb3V0LXF1YWQiLCJlYXNlLWluLW91dC1xdWFkIiwiZWFzZS1pbi1jdWJpYyIsImVhc2Utb3V0LWN1YmljIiwiZWFzZS1pbi1vdXQtY3ViaWMiLCJlYXNlLWluLXF1YXJ0IiwiZWFzZS1vdXQtcXVhcnQiLCJlYXNlLWluLW91dC1xdWFydCIsImVhc2UtaW4tcXVpbnQiLCJlYXNlLW91dC1xdWludCIsImVhc2UtaW4tb3V0LXF1aW50IiwiZWFzZS1pbi1leHBvIiwiZWFzZS1vdXQtZXhwbyIsImVhc2UtaW4tb3V0LWV4cG8iLCJlYXNlLWluLWNpcmMiLCJlYXNlLW91dC1jaXJjIiwiZWFzZS1pbi1vdXQtY2lyYyJdfSxncmFkaWVudERpcmVjdGlvbjp7ZW51bXM6WyJ0by1ib3R0b20iLCJ0by10b3AiLCJ0by1sZWZ0IiwidG8tcmlnaHQiLCJ0by1ib3R0b20tcmlnaHQiLCJ0by1ib3R0b20tbGVmdCIsInRvLXRvcC1yaWdodCIsInRvLXRvcC1sZWZ0IiwidG8tcmlnaHQtYm90dG9tIiwidG8tbGVmdC1ib3R0b20iLCJ0by1yaWdodC10b3AiLCJ0by1sZWZ0LXRvcCJdfSxib3VuZHNFeHBhbnNpb246e251bWJlcjohMCxtdWx0aXBsZTohMCxtaW46MCx2YWxpZGF0ZTpmdW5jdGlvbihTcil7dmFyIE5yPVNyLmxlbmd0aDtyZXR1cm4gTnI9PT0xfHxOcj09PTJ8fE5yPT09NH19fTt2YXIgSD17emVyb05vblplcm86ZnVuY3Rpb24oU3IsTnIpe3JldHVybihTcj09bnVsbHx8TnI9PW51bGwpJiZTciE9PU5yfHxTcj09MCYmTnIhPTA/ITA6U3IhPTAmJk5yPT0wfSxhbnk6ZnVuY3Rpb24oU3IsTnIpe3JldHVybiBTciE9TnJ9LGVtcHR5Tm9uRW1wdHk6ZnVuY3Rpb24oU3IsTnIpe3ZhciBTaT1TZShTcikseXM9U2UoTnIpO3JldHVybiBTaSYmIXlzfHwhU2kmJnlzfX0scT1VMC50eXBlcyxZPVt7bmFtZToibGFiZWwiLHR5cGU6cS50ZXh0LHRyaWdnZXJzQm91bmRzOkguYW55LHRyaWdnZXJzWk9yZGVyOkguZW1wdHlOb25FbXB0eX0se25hbWU6InRleHQtcm90YXRpb24iLHR5cGU6cS50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi14Iix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi15Iix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxaPVt7bmFtZToic291cmNlLWxhYmVsIix0eXBlOnEudGV4dCx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InNvdXJjZS10ZXh0LXJvdGF0aW9uIix0eXBlOnEudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic291cmNlLXRleHQtbWFyZ2luLXgiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InNvdXJjZS10ZXh0LW1hcmdpbi15Iix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1vZmZzZXQiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fV0sY2U9W3tuYW1lOiJ0YXJnZXQtbGFiZWwiLHR5cGU6cS50ZXh0LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGFyZ2V0LXRleHQtcm90YXRpb24iLHR5cGU6cS50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1tYXJnaW4teCIsdHlwZTpxLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGFyZ2V0LXRleHQtbWFyZ2luLXkiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InRhcmdldC10ZXh0LW9mZnNldCIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSx2ZT1be25hbWU6ImZvbnQtZmFtaWx5Iix0eXBlOnEuZm9udEZhbWlseSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImZvbnQtc3R5bGUiLHR5cGU6cS5mb250U3R5bGUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJmb250LXdlaWdodCIsdHlwZTpxLmZvbnRXZWlnaHQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJmb250LXNpemUiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC10cmFuc2Zvcm0iLHR5cGU6cS50ZXh0VHJhbnNmb3JtLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC13cmFwIix0eXBlOnEudGV4dFdyYXAsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0ZXh0LW92ZXJmbG93LXdyYXAiLHR5cGU6cS50ZXh0T3ZlcmZsb3dXcmFwLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC1tYXgtd2lkdGgiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC1vdXRsaW5lLXdpZHRoIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImxpbmUtaGVpZ2h0Iix0eXBlOnEucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxtZT1be25hbWU6InRleHQtdmFsaWduIix0eXBlOnEudmFsaWduLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC1oYWxpZ24iLHR5cGU6cS5oYWxpZ24sdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJjb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToidGV4dC1vdXRsaW5lLWNvbG9yIix0eXBlOnEuY29sb3J9LHtuYW1lOiJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIsdHlwZTpxLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtY29sb3IiLHR5cGU6cS5jb2xvcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1wYWRkaW5nIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InRleHQtYm9yZGVyLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1ib3JkZXItY29sb3IiLHR5cGU6cS5jb2xvcn0se25hbWU6InRleHQtYm9yZGVyLXdpZHRoIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InRleHQtYm9yZGVyLXN0eWxlIix0eXBlOnEuYm9yZGVyU3R5bGUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiLHR5cGU6cS50ZXh0QmFja2dyb3VuZFNoYXBlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC1qdXN0aWZpY2F0aW9uIix0eXBlOnEuanVzdGlmaWNhdGlvbn1dLExlPVt7bmFtZToiZXZlbnRzIix0eXBlOnEuYm9vbCx0cmlnZ2Vyc1pPcmRlcjpILmFueX0se25hbWU6InRleHQtZXZlbnRzIix0eXBlOnEuYm9vbCx0cmlnZ2Vyc1pPcmRlcjpILmFueX1dLF9lPVt7bmFtZToiZGlzcGxheSIsdHlwZTpxLmRpc3BsYXksdHJpZ2dlcnNaT3JkZXI6SC5hbnksdHJpZ2dlcnNCb3VuZHM6SC5hbnksdHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzOiEwfSx7bmFtZToidmlzaWJpbGl0eSIsdHlwZTpxLnZpc2liaWxpdHksdHJpZ2dlcnNaT3JkZXI6SC5hbnl9LHtuYW1lOiJvcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcix0cmlnZ2Vyc1pPcmRlcjpILnplcm9Ob25aZXJvfSx7bmFtZToidGV4dC1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6Im1pbi16b29tZWQtZm9udC1zaXplIix0eXBlOnEuc2l6ZX0se25hbWU6InotY29tcG91bmQtZGVwdGgiLHR5cGU6cS56Q29tcG91bmREZXB0aCx0cmlnZ2Vyc1pPcmRlcjpILmFueX0se25hbWU6InotaW5kZXgtY29tcGFyZSIsdHlwZTpxLnpJbmRleENvbXBhcmUsdHJpZ2dlcnNaT3JkZXI6SC5hbnl9LHtuYW1lOiJ6LWluZGV4Iix0eXBlOnEubnVtYmVyLHRyaWdnZXJzWk9yZGVyOkguYW55fV0sRWU9W3tuYW1lOiJvdmVybGF5LXBhZGRpbmciLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToib3ZlcmxheS1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToib3ZlcmxheS1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczpILnplcm9Ob25aZXJvfSx7bmFtZToib3ZlcmxheS1zaGFwZSIsdHlwZTpxLm92ZXJsYXlTaGFwZSx0cmlnZ2Vyc0JvdW5kczpILmFueX1dLEJlPVt7bmFtZToidW5kZXJsYXktcGFkZGluZyIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ1bmRlcmxheS1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToidW5kZXJsYXktb3BhY2l0eSIsdHlwZTpxLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6SC56ZXJvTm9uWmVyb30se25hbWU6InVuZGVybGF5LXNoYXBlIix0eXBlOnEub3ZlcmxheVNoYXBlLHRyaWdnZXJzQm91bmRzOkguYW55fV0sUmU9W3tuYW1lOiJ0cmFuc2l0aW9uLXByb3BlcnR5Iix0eXBlOnEucHJvcExpc3R9LHtuYW1lOiJ0cmFuc2l0aW9uLWR1cmF0aW9uIix0eXBlOnEudGltZX0se25hbWU6InRyYW5zaXRpb24tZGVsYXkiLHR5cGU6cS50aW1lfSx7bmFtZToidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLHR5cGU6cS5lYXNpbmd9XSxWZT1mdW5jdGlvbihTcixOcil7cmV0dXJuIE5yLnZhbHVlPT09ImxhYmVsIj8tU3IucG9vbEluZGV4KCk6TnIucGZWYWx1ZX0sY3Q9W3tuYW1lOiJoZWlnaHQiLHR5cGU6cS5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueSxoYXNoT3ZlcnJpZGU6VmV9LHtuYW1lOiJ3aWR0aCIsdHlwZTpxLm5vZGVTaXplLHRyaWdnZXJzQm91bmRzOkguYW55LGhhc2hPdmVycmlkZTpWZX0se25hbWU6InNoYXBlIix0eXBlOnEubm9kZVNoYXBlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic2hhcGUtcG9seWdvbi1wb2ludHMiLHR5cGU6cS5wb2x5Z29uUG9pbnRMaXN0LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiYmFja2dyb3VuZC1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToiYmFja2dyb3VuZC1maWxsIix0eXBlOnEuZmlsbH0se25hbWU6ImJhY2tncm91bmQtb3BhY2l0eSIsdHlwZTpxLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJiYWNrZ3JvdW5kLWJsYWNrZW4iLHR5cGU6cS5uT25lT25lTnVtYmVyfSx7bmFtZToiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpxLmNvbG9yc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6cS5wZXJjZW50YWdlc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uIix0eXBlOnEuZ3JhZGllbnREaXJlY3Rpb259LHtuYW1lOiJwYWRkaW5nIix0eXBlOnEuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InBhZGRpbmctcmVsYXRpdmUtdG8iLHR5cGU6cS5wYWRkaW5nUmVsYXRpdmVUbyx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImJvdW5kcy1leHBhbnNpb24iLHR5cGU6cS5ib3VuZHNFeHBhbnNpb24sdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxzdD1be25hbWU6ImJvcmRlci1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToiYm9yZGVyLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfSx7bmFtZToiYm9yZGVyLXdpZHRoIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImJvcmRlci1zdHlsZSIsdHlwZTpxLmJvcmRlclN0eWxlfV0sWWU9W3tuYW1lOiJvdXRsaW5lLWNvbG9yIix0eXBlOnEuY29sb3J9LHtuYW1lOiJvdXRsaW5lLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfSx7bmFtZToib3V0bGluZS13aWR0aCIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJvdXRsaW5lLXN0eWxlIix0eXBlOnEuYm9yZGVyU3R5bGV9LHtuYW1lOiJvdXRsaW5lLW9mZnNldCIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxtdD1be25hbWU6ImJhY2tncm91bmQtaW1hZ2UiLHR5cGU6cS51cmxzfSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiIsdHlwZTpxLmJnQ3Jvc3NPcmlnaW59LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyc30se25hbWU6ImJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQiLHR5cGU6cS5iZ0NvbnRhaW5tZW50fSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciLHR5cGU6cS5ib29sc30se25hbWU6ImJhY2tncm91bmQtcG9zaXRpb24teCIsdHlwZTpxLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1wb3NpdGlvbi15Iix0eXBlOnEuYmdQb3N9LHtuYW1lOiJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIix0eXBlOnEuYmdSZWxhdGl2ZVRvfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iLHR5cGU6cS5iZ1JlbGF0aXZlVG99LHtuYW1lOiJiYWNrZ3JvdW5kLXJlcGVhdCIsdHlwZTpxLmJnUmVwZWF0fSx7bmFtZToiYmFja2dyb3VuZC1maXQiLHR5cGU6cS5iZ0ZpdH0se25hbWU6ImJhY2tncm91bmQtY2xpcCIsdHlwZTpxLmJnQ2xpcH0se25hbWU6ImJhY2tncm91bmQtd2lkdGgiLHR5cGU6cS5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQiLHR5cGU6cS5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteCIsdHlwZTpxLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteSIsdHlwZTpxLmJnUG9zfV0sSmU9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZTpxLnBvc2l0aW9uLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMiLHR5cGU6cS5jb21wb3VuZEluY2x1ZGVMYWJlbHMsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJtaW4td2lkdGgiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToibWluLXdpZHRoLWJpYXMtbGVmdCIsdHlwZTpxLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJtaW4td2lkdGgtYmlhcy1yaWdodCIsdHlwZTpxLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0Iix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6Im1pbi1oZWlnaHQtYmlhcy10b3AiLHR5cGU6cS5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToibWluLWhlaWdodC1iaWFzLWJvdHRvbSIsdHlwZTpxLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxMdD1be25hbWU6ImxpbmUtc3R5bGUiLHR5cGU6cS5saW5lU3R5bGV9LHtuYW1lOiJsaW5lLWNvbG9yIix0eXBlOnEuY29sb3J9LHtuYW1lOiJsaW5lLWZpbGwiLHR5cGU6cS5maWxsfSx7bmFtZToibGluZS1jYXAiLHR5cGU6cS5saW5lQ2FwfSx7bmFtZToibGluZS1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6ImxpbmUtZGFzaC1wYXR0ZXJuIix0eXBlOnEubnVtYmVyc30se25hbWU6ImxpbmUtZGFzaC1vZmZzZXQiLHR5cGU6cS5udW1iZXJ9LHtuYW1lOiJsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzIix0eXBlOnEuY29sb3JzfSx7bmFtZToibGluZS1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyIsdHlwZTpxLnBlcmNlbnRhZ2VzfSx7bmFtZToiY3VydmUtc3R5bGUiLHR5cGU6cS5jdXJ2ZVN0eWxlLHRyaWdnZXJzQm91bmRzOkguYW55LHRyaWdnZXJzQm91bmRzT2ZQYXJhbGxlbEJlemllcnM6ITB9LHtuYW1lOiJoYXlzdGFjay1yYWRpdXMiLHR5cGU6cS56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic291cmNlLWVuZHBvaW50Iix0eXBlOnEuZWRnZUVuZHBvaW50LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGFyZ2V0LWVuZHBvaW50Iix0eXBlOnEuZWRnZUVuZHBvaW50LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiY29udHJvbC1wb2ludC1zdGVwLXNpemUiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZXMsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJjb250cm9sLXBvaW50LXdlaWdodHMiLHR5cGU6cS5udW1iZXJzLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic2VnbWVudC1kaXN0YW5jZXMiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZXMsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJzZWdtZW50LXdlaWdodHMiLHR5cGU6cS5udW1iZXJzLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGF4aS10dXJuIix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InRheGktZGlyZWN0aW9uIix0eXBlOnEuYXhpc0RpcmVjdGlvbix0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImVkZ2UtZGlzdGFuY2VzIix0eXBlOnEuZWRnZURpc3RhbmNlcyx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImFycm93LXNjYWxlIix0eXBlOnEucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJsb29wLWRpcmVjdGlvbiIsdHlwZTpxLmFuZ2xlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToibG9vcC1zd2VlcCIsdHlwZTpxLmFuZ2xlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX1dLE10PVt7bmFtZToiZ2hvc3QiLHR5cGU6cS5ib29sLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiZ2hvc3Qtb2Zmc2V0LXgiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6Imdob3N0LW9mZnNldC15Iix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJnaG9zdC1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn1dLHV0PVt7bmFtZToic2VsZWN0aW9uLWJveC1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToic2VsZWN0aW9uLWJveC1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6InNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIix0eXBlOnEuY29sb3J9LHtuYW1lOiJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCIsdHlwZTpxLnNpemV9LHtuYW1lOiJhY3RpdmUtYmctY29sb3IiLHR5cGU6cS5jb2xvcn0se25hbWU6ImFjdGl2ZS1iZy1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6ImFjdGl2ZS1iZy1zaXplIix0eXBlOnEuc2l6ZX0se25hbWU6Im91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfV0sV3Q9W107VTAucGllQmFja2dyb3VuZE49MTYsV3QucHVzaCh7bmFtZToicGllLXNpemUiLHR5cGU6cS5zaXplTWF5YmVQZXJjZW50fSk7Zm9yKHZhciBUdD0xO1R0PD1VMC5waWVCYWNrZ3JvdW5kTjtUdCsrKVd0LnB1c2goe25hbWU6InBpZS0iK1R0KyItYmFja2dyb3VuZC1jb2xvciIsdHlwZTpxLmNvbG9yfSksV3QucHVzaCh7bmFtZToicGllLSIrVHQrIi1iYWNrZ3JvdW5kLXNpemUiLHR5cGU6cS5wZXJjZW50fSksV3QucHVzaCh7bmFtZToicGllLSIrVHQrIi1iYWNrZ3JvdW5kLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfSk7dmFyIF9uPVtdLGhuPVUwLmFycm93UHJlZml4ZXM9WyJzb3VyY2UiLCJtaWQtc291cmNlIiwidGFyZ2V0IiwibWlkLXRhcmdldCJdO1t7bmFtZToiYXJyb3ctc2hhcGUiLHR5cGU6cS5hcnJvd1NoYXBlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiYXJyb3ctY29sb3IiLHR5cGU6cS5jb2xvcn0se25hbWU6ImFycm93LWZpbGwiLHR5cGU6cS5hcnJvd0ZpbGx9LHtuYW1lOiJhcnJvdy13aWR0aCIsdHlwZTpxLmFycm93V2lkdGh9XS5mb3JFYWNoKGZ1bmN0aW9uKGJyKXtobi5mb3JFYWNoKGZ1bmN0aW9uKFNyKXt2YXIgTnI9U3IrIi0iK2JyLm5hbWUsU2k9YnIudHlwZSx5cz1ici50cmlnZ2Vyc0JvdW5kcztfbi5wdXNoKHtuYW1lOk5yLHR5cGU6U2ksdHJpZ2dlcnNCb3VuZHM6eXN9KX0pfSx7fSk7dmFyIFl0PVUwLnByb3BlcnRpZXM9W10uY29uY2F0KExlLFJlLF9lLEVlLEJlLE10LG1lLHZlLFksWixjZSxjdCxzdCxZZSxtdCxXdCxKZSxMdCxfbix1dCksRG49VTAucHJvcGVydHlHcm91cHM9e2JlaGF2aW9yOkxlLHRyYW5zaXRpb246UmUsdmlzaWJpbGl0eTpfZSxvdmVybGF5OkVlLHVuZGVybGF5OkJlLGdob3N0Ok10LGNvbW1vbkxhYmVsOm1lLGxhYmVsRGltZW5zaW9uczp2ZSxtYWluTGFiZWw6WSxzb3VyY2VMYWJlbDpaLHRhcmdldExhYmVsOmNlLG5vZGVCb2R5OmN0LG5vZGVCb3JkZXI6c3Qsbm9kZU91dGxpbmU6WWUsYmFja2dyb3VuZEltYWdlOm10LHBpZTpXdCxjb21wb3VuZDpKZSxlZGdlTGluZTpMdCxlZGdlQXJyb3c6X24sY29yZTp1dH0saXI9VTAucHJvcGVydHlHcm91cE5hbWVzPXt9LHZyPVUwLnByb3BlcnR5R3JvdXBLZXlzPU9iamVjdC5rZXlzKERuKTt2ci5mb3JFYWNoKGZ1bmN0aW9uKGJyKXtpclticl09RG5bYnJdLm1hcChmdW5jdGlvbihTcil7cmV0dXJuIFNyLm5hbWV9KSxEblticl0uZm9yRWFjaChmdW5jdGlvbihTcil7cmV0dXJuIFNyLmdyb3VwS2V5PWJyfSl9KTt2YXIgTm49VTAuYWxpYXNlcz1be25hbWU6ImNvbnRlbnQiLHBvaW50c1RvOiJsYWJlbCJ9LHtuYW1lOiJjb250cm9sLXBvaW50LWRpc3RhbmNlIixwb2ludHNUbzoiY29udHJvbC1wb2ludC1kaXN0YW5jZXMifSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHQiLHBvaW50c1RvOiJjb250cm9sLXBvaW50LXdlaWdodHMifSx7bmFtZToiZWRnZS10ZXh0LXJvdGF0aW9uIixwb2ludHNUbzoidGV4dC1yb3RhdGlvbiJ9LHtuYW1lOiJwYWRkaW5nLWxlZnQiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctcmlnaHQiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctdG9wIixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLWJvdHRvbSIscG9pbnRzVG86InBhZGRpbmcifV07VTAucHJvcGVydHlOYW1lcz1ZdC5tYXAoZnVuY3Rpb24oYnIpe3JldHVybiBici5uYW1lfSk7Zm9yKHZhciBwcj0wO3ByPFl0Lmxlbmd0aDtwcisrKXt2YXIgRXI9WXRbcHJdO1l0W0VyLm5hbWVdPUVyfWZvcih2YXIgTXI9MDtNcjxObi5sZW5ndGg7TXIrKyl7dmFyIENyPU5uW01yXSxPcj1ZdFtDci5wb2ludHNUb10sV249e25hbWU6Q3IubmFtZSxhbGlhczohMCxwb2ludHNUbzpPcn07WXQucHVzaChXbiksWXRbQ3IubmFtZV09V259fSkoKSxVMC5nZXREZWZhdWx0UHJvcGVydHk9ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoKVt4XX0sVTAuZ2V0RGVmYXVsdFByb3BlcnRpZXM9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLl9wcml2YXRlO2lmKHguZGVmYXVsdFByb3BlcnRpZXMhPW51bGwpcmV0dXJuIHguZGVmYXVsdFByb3BlcnRpZXM7Zm9yKHZhciBtPXl0KHsic2VsZWN0aW9uLWJveC1jb2xvciI6IiNkZGQiLCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiOi42NSwic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiOiIjYWFhIiwic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiOjEsImFjdGl2ZS1iZy1jb2xvciI6ImJsYWNrIiwiYWN0aXZlLWJnLW9wYWNpdHkiOi4xNSwiYWN0aXZlLWJnLXNpemUiOjMwLCJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiOiIjMDAwIiwib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiOi4xMjUsZXZlbnRzOiJ5ZXMiLCJ0ZXh0LWV2ZW50cyI6Im5vIiwidGV4dC12YWxpZ24iOiJ0b3AiLCJ0ZXh0LWhhbGlnbiI6ImNlbnRlciIsInRleHQtanVzdGlmaWNhdGlvbiI6ImF1dG8iLCJsaW5lLWhlaWdodCI6MSxjb2xvcjoiIzAwMCIsInRleHQtb3V0bGluZS1jb2xvciI6IiMwMDAiLCJ0ZXh0LW91dGxpbmUtd2lkdGgiOjAsInRleHQtb3V0bGluZS1vcGFjaXR5IjoxLCJ0ZXh0LW9wYWNpdHkiOjEsInRleHQtZGVjb3JhdGlvbiI6Im5vbmUiLCJ0ZXh0LXRyYW5zZm9ybSI6Im5vbmUiLCJ0ZXh0LXdyYXAiOiJub25lIiwidGV4dC1vdmVyZmxvdy13cmFwIjoid2hpdGVzcGFjZSIsInRleHQtbWF4LXdpZHRoIjo5OTk5LCJ0ZXh0LWJhY2tncm91bmQtY29sb3IiOiIjMDAwIiwidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiOjAsInRleHQtYmFja2dyb3VuZC1zaGFwZSI6InJlY3RhbmdsZSIsInRleHQtYmFja2dyb3VuZC1wYWRkaW5nIjowLCJ0ZXh0LWJvcmRlci1vcGFjaXR5IjowLCJ0ZXh0LWJvcmRlci13aWR0aCI6MCwidGV4dC1ib3JkZXItc3R5bGUiOiJzb2xpZCIsInRleHQtYm9yZGVyLWNvbG9yIjoiIzAwMCIsImZvbnQtZmFtaWx5IjoiSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIsImZvbnQtc3R5bGUiOiJub3JtYWwiLCJmb250LXdlaWdodCI6Im5vcm1hbCIsImZvbnQtc2l6ZSI6MTYsIm1pbi16b29tZWQtZm9udC1zaXplIjowLCJ0ZXh0LXJvdGF0aW9uIjoibm9uZSIsInNvdXJjZS10ZXh0LXJvdGF0aW9uIjoibm9uZSIsInRhcmdldC10ZXh0LXJvdGF0aW9uIjoibm9uZSIsdmlzaWJpbGl0eToidmlzaWJsZSIsZGlzcGxheToiZWxlbWVudCIsb3BhY2l0eToxLCJ6LWNvbXBvdW5kLWRlcHRoIjoiYXV0byIsInotaW5kZXgtY29tcGFyZSI6ImF1dG8iLCJ6LWluZGV4IjowLGxhYmVsOiIiLCJ0ZXh0LW1hcmdpbi14IjowLCJ0ZXh0LW1hcmdpbi15IjowLCJzb3VyY2UtbGFiZWwiOiIiLCJzb3VyY2UtdGV4dC1vZmZzZXQiOjAsInNvdXJjZS10ZXh0LW1hcmdpbi14IjowLCJzb3VyY2UtdGV4dC1tYXJnaW4teSI6MCwidGFyZ2V0LWxhYmVsIjoiIiwidGFyZ2V0LXRleHQtb2Zmc2V0IjowLCJ0YXJnZXQtdGV4dC1tYXJnaW4teCI6MCwidGFyZ2V0LXRleHQtbWFyZ2luLXkiOjAsIm92ZXJsYXktb3BhY2l0eSI6MCwib3ZlcmxheS1jb2xvciI6IiMwMDAiLCJvdmVybGF5LXBhZGRpbmciOjEwLCJvdmVybGF5LXNoYXBlIjoicm91bmQtcmVjdGFuZ2xlIiwidW5kZXJsYXktb3BhY2l0eSI6MCwidW5kZXJsYXktY29sb3IiOiIjMDAwIiwidW5kZXJsYXktcGFkZGluZyI6MTAsInVuZGVybGF5LXNoYXBlIjoicm91bmQtcmVjdGFuZ2xlIiwidHJhbnNpdGlvbi1wcm9wZXJ0eSI6Im5vbmUiLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIjowLCJ0cmFuc2l0aW9uLWRlbGF5IjowLCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiI6ImxpbmVhciIsImJhY2tncm91bmQtYmxhY2tlbiI6MCwiYmFja2dyb3VuZC1jb2xvciI6IiM5OTkiLCJiYWNrZ3JvdW5kLWZpbGwiOiJzb2xpZCIsImJhY2tncm91bmQtb3BhY2l0eSI6MSwiYmFja2dyb3VuZC1pbWFnZSI6Im5vbmUiLCJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIjoiYW5vbnltb3VzIiwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IjoxLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IjoiaW5zaWRlIiwiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciOiJ5ZXMiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiOiI1MCUiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiOiI1MCUiLCJiYWNrZ3JvdW5kLW9mZnNldC14IjowLCJiYWNrZ3JvdW5kLW9mZnNldC15IjowLCJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIjoiaW5jbHVkZS1wYWRkaW5nIiwiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iOiJpbmNsdWRlLXBhZGRpbmciLCJiYWNrZ3JvdW5kLXJlcGVhdCI6Im5vLXJlcGVhdCIsImJhY2tncm91bmQtZml0Ijoibm9uZSIsImJhY2tncm91bmQtY2xpcCI6Im5vZGUiLCJiYWNrZ3JvdW5kLXdpZHRoIjoiYXV0byIsImJhY2tncm91bmQtaGVpZ2h0IjoiYXV0byIsImJvcmRlci1jb2xvciI6IiMwMDAiLCJib3JkZXItb3BhY2l0eSI6MSwiYm9yZGVyLXdpZHRoIjowLCJib3JkZXItc3R5bGUiOiJzb2xpZCIsIm91dGxpbmUtY29sb3IiOiIjOTk5Iiwib3V0bGluZS1vcGFjaXR5IjoxLCJvdXRsaW5lLXdpZHRoIjowLCJvdXRsaW5lLW9mZnNldCI6MCwib3V0bGluZS1zdHlsZSI6InNvbGlkIixoZWlnaHQ6MzAsd2lkdGg6MzAsc2hhcGU6ImVsbGlwc2UiLCJzaGFwZS1wb2x5Z29uLXBvaW50cyI6Ii0xLCAtMSwgICAxLCAtMSwgICAxLCAxLCAgIC0xLCAxIiwiYm91bmRzLWV4cGFuc2lvbiI6MCwiYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24iOiJ0by1ib3R0b20iLCJiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtY29sb3JzIjoiIzk5OSIsImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiOiIwJSIsZ2hvc3Q6Im5vIiwiZ2hvc3Qtb2Zmc2V0LXkiOjAsImdob3N0LW9mZnNldC14IjowLCJnaG9zdC1vcGFjaXR5IjowLHBhZGRpbmc6MCwicGFkZGluZy1yZWxhdGl2ZS10byI6IndpZHRoIixwb3NpdGlvbjoib3JpZ2luIiwiY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMiOiJpbmNsdWRlIiwibWluLXdpZHRoIjowLCJtaW4td2lkdGgtYmlhcy1sZWZ0IjowLCJtaW4td2lkdGgtYmlhcy1yaWdodCI6MCwibWluLWhlaWdodCI6MCwibWluLWhlaWdodC1iaWFzLXRvcCI6MCwibWluLWhlaWdodC1iaWFzLWJvdHRvbSI6MH0seyJwaWUtc2l6ZSI6IjEwMCUifSxbe25hbWU6InBpZS17e2l9fS1iYWNrZ3JvdW5kLWNvbG9yIix2YWx1ZToiYmxhY2sifSx7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtc2l6ZSIsdmFsdWU6IjAlIn0se25hbWU6InBpZS17e2l9fS1iYWNrZ3JvdW5kLW9wYWNpdHkiLHZhbHVlOjF9XS5yZWR1Y2UoZnVuY3Rpb24oSCxxKXtmb3IodmFyIFk9MTtZPD1VMC5waWVCYWNrZ3JvdW5kTjtZKyspe3ZhciBaPXEubmFtZS5yZXBsYWNlKCJ7e2l9fSIsWSksY2U9cS52YWx1ZTtIW1pdPWNlfXJldHVybiBIfSx7fSkseyJsaW5lLXN0eWxlIjoic29saWQiLCJsaW5lLWNvbG9yIjoiIzk5OSIsImxpbmUtZmlsbCI6InNvbGlkIiwibGluZS1jYXAiOiJidXR0IiwibGluZS1vcGFjaXR5IjoxLCJsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzIjoiIzk5OSIsImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiOiIwJSIsImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIjo0MCwiY29udHJvbC1wb2ludC13ZWlnaHRzIjouNSwic2VnbWVudC13ZWlnaHRzIjouNSwic2VnbWVudC1kaXN0YW5jZXMiOjIwLCJ0YXhpLXR1cm4iOiI1MCUiLCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIjoxMCwidGF4aS1kaXJlY3Rpb24iOiJhdXRvIiwiZWRnZS1kaXN0YW5jZXMiOiJpbnRlcnNlY3Rpb24iLCJjdXJ2ZS1zdHlsZSI6ImhheXN0YWNrIiwiaGF5c3RhY2stcmFkaXVzIjowLCJhcnJvdy1zY2FsZSI6MSwibG9vcC1kaXJlY3Rpb24iOiItNDVkZWciLCJsb29wLXN3ZWVwIjoiLTkwZGVnIiwic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSI6MCwidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSI6MCwic291cmNlLWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwidGFyZ2V0LWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwibGluZS1kYXNoLXBhdHRlcm4iOls2LDNdLCJsaW5lLWRhc2gtb2Zmc2V0IjowfSxbe25hbWU6ImFycm93LXNoYXBlIix2YWx1ZToibm9uZSJ9LHtuYW1lOiJhcnJvdy1jb2xvciIsdmFsdWU6IiM5OTkifSx7bmFtZToiYXJyb3ctZmlsbCIsdmFsdWU6ImZpbGxlZCJ9LHtuYW1lOiJhcnJvdy13aWR0aCIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbihILHEpe3JldHVybiBVMC5hcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24oWSl7dmFyIFo9WSsiLSIrcS5uYW1lLGNlPXEudmFsdWU7SFtaXT1jZX0pLEh9LHt9KSksaz17fSxTPTA7Uzx0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1MrKyl7dmFyIE09dGhpcy5wcm9wZXJ0aWVzW1NdO2lmKCFNLnBvaW50c1RvKXt2YXIgTz1NLm5hbWUsTj1tW09dLCQ9dGhpcy5wYXJzZShPLE4pO2tbT109JH19cmV0dXJuIHguZGVmYXVsdFByb3BlcnRpZXM9ayx4LmRlZmF1bHRQcm9wZXJ0aWVzfSxVMC5hZGREZWZhdWx0U3R5bGVzaGVldD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0b3IoIjpwYXJlbnQiKS5jc3Moe3NoYXBlOiJyZWN0YW5nbGUiLHBhZGRpbmc6MTAsImJhY2tncm91bmQtY29sb3IiOiIjZWVlIiwiYm9yZGVyLWNvbG9yIjoiI2NjYyIsImJvcmRlci13aWR0aCI6MX0pLnNlbGVjdG9yKCJlZGdlIikuY3NzKHt3aWR0aDozfSkuc2VsZWN0b3IoIjpsb29wIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIifSkuc2VsZWN0b3IoImVkZ2U6Y29tcG91bmQiKS5jc3MoeyJjdXJ2ZS1zdHlsZSI6ImJlemllciIsInNvdXJjZS1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSIsInRhcmdldC1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSJ9KS5zZWxlY3RvcigiOnNlbGVjdGVkIikuY3NzKHsiYmFja2dyb3VuZC1jb2xvciI6IiMwMTY5RDkiLCJsaW5lLWNvbG9yIjoiIzAxNjlEOSIsInNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJ0YXJnZXQtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJtaWQtdGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSJ9KS5zZWxlY3RvcigiOnBhcmVudDpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjQ0NFMUY5IiwiYm9yZGVyLWNvbG9yIjoiI2FlYzhlNSJ9KS5zZWxlY3RvcigiOmFjdGl2ZSIpLmNzcyh7Im92ZXJsYXktY29sb3IiOiJibGFjayIsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktb3BhY2l0eSI6LjI1fSksdGhpcy5kZWZhdWx0TGVuZ3RoPXRoaXMubGVuZ3RofTt2YXIgelM9e307elMucGFyc2U9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcztpZihhZShtKSlyZXR1cm4gTS5wYXJzZUltcGxXYXJuKHgsbSxrLFMpO3ZhciBPPVM9PT0ibWFwcGluZyJ8fFM9PT0hMHx8Uz09PSExfHxTPT1udWxsPyJkb250Y2FyZSI6UyxOPWs/InQiOiJmIiwkPSIiK20sSD1sZCh4LCQsTixPKSxxPU0ucHJvcENhY2hlPU0ucHJvcENhY2hlfHxbXSxZO3JldHVybihZPXFbSF0pfHwoWT1xW0hdPU0ucGFyc2VJbXBsV2Fybih4LG0sayxTKSksKGt8fFM9PT0ibWFwcGluZyIpJiYoWT12bShZKSxZJiYoWS52YWx1ZT12bShZLnZhbHVlKSkpLFl9LHpTLnBhcnNlSW1wbFdhcm49ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcy5wYXJzZUltcGwoeCxtLGssUyk7cmV0dXJuIU0mJm0hPW51bGwmJmh1KCJUaGUgc3R5bGUgcHJvcGVydHkgYCIuY29uY2F0KHgsIjogIikuY29uY2F0KG0sImAgaXMgaW52YWxpZCIpKSxNJiYoTS5uYW1lPT09IndpZHRoInx8TS5uYW1lPT09ImhlaWdodCIpJiZtPT09ImxhYmVsIiYmaHUoIlRoZSBzdHlsZSB2YWx1ZSBvZiBgbGFiZWxgIGlzIGRlcHJlY2F0ZWQgZm9yIGAiK00ubmFtZSsiYCIpLE19LHpTLnBhcnNlSW1wbD1mdW5jdGlvbih4LG0sayxTKXt2YXIgTT10aGlzO3g9Z24oeCk7dmFyIE89TS5wcm9wZXJ0aWVzW3hdLE49bSwkPU0udHlwZXM7aWYoIU98fG09PT12b2lkIDApcmV0dXJuIG51bGw7Ty5hbGlhcyYmKE89Ty5wb2ludHNUbyx4PU8ubmFtZSk7dmFyIEg9YmUobSk7SCYmKG09bS50cmltKCkpO3ZhciBxPU8udHlwZTtpZighcSlyZXR1cm4gbnVsbDtpZihrJiYobT09PSIifHxtPT09bnVsbCkpcmV0dXJue25hbWU6eCx2YWx1ZTptLGJ5cGFzczohMCxkZWxldGVCeXBhc3M6ITB9O2lmKGFlKG0pKXJldHVybntuYW1lOngsdmFsdWU6bSxzdHJWYWx1ZToiZm4iLG1hcHBlZDokLmZuLGJ5cGFzczprfTt2YXIgWSxaO2lmKCEoIUh8fFN8fG0ubGVuZ3RoPDd8fG1bMV0hPT0iYSIpKXtpZihtLmxlbmd0aD49NyYmbVswXT09PSJkIiYmKFk9bmV3IFJlZ0V4cCgkLmRhdGEucmVnZXgpLmV4ZWMobSkpKXtpZihrKXJldHVybiExO3ZhciBjZT0kLmRhdGE7cmV0dXJue25hbWU6eCx2YWx1ZTpZLHN0clZhbHVlOiIiK20sbWFwcGVkOmNlLGZpZWxkOllbMV0sYnlwYXNzOmt9fWVsc2UgaWYobS5sZW5ndGg+PTEwJiZtWzBdPT09Im0iJiYoWj1uZXcgUmVnRXhwKCQubWFwRGF0YS5yZWdleCkuZXhlYyhtKSkpe2lmKGt8fHEubXVsdGlwbGUpcmV0dXJuITE7dmFyIHZlPSQubWFwRGF0YTtpZighKHEuY29sb3J8fHEubnVtYmVyKSlyZXR1cm4hMTt2YXIgbWU9dGhpcy5wYXJzZSh4LFpbNF0pO2lmKCFtZXx8bWUubWFwcGVkKXJldHVybiExO3ZhciBMZT10aGlzLnBhcnNlKHgsWls1XSk7aWYoIUxlfHxMZS5tYXBwZWQpcmV0dXJuITE7aWYobWUucGZWYWx1ZT09PUxlLnBmVmFsdWV8fG1lLnN0clZhbHVlPT09TGUuc3RyVmFsdWUpcmV0dXJuIGh1KCJgIit4KyI6ICIrbSsiYCBpcyBub3QgYSB2YWxpZCBtYXBwZXIgYmVjYXVzZSB0aGUgb3V0cHV0IHJhbmdlIGlzIHplcm87IGNvbnZlcnRpbmcgdG8gYCIreCsiOiAiK21lLnN0clZhbHVlKyJgIiksdGhpcy5wYXJzZSh4LG1lLnN0clZhbHVlKTtpZihxLmNvbG9yKXt2YXIgX2U9bWUudmFsdWUsRWU9TGUudmFsdWUsQmU9X2VbMF09PT1FZVswXSYmX2VbMV09PT1FZVsxXSYmX2VbMl09PT1FZVsyXSYmKF9lWzNdPT09RWVbM118fChfZVszXT09bnVsbHx8X2VbM109PT0xKSYmKEVlWzNdPT1udWxsfHxFZVszXT09PTEpKTtpZihCZSlyZXR1cm4hMX1yZXR1cm57bmFtZTp4LHZhbHVlOlosc3RyVmFsdWU6IiIrbSxtYXBwZWQ6dmUsZmllbGQ6WlsxXSxmaWVsZE1pbjpwYXJzZUZsb2F0KFpbMl0pLGZpZWxkTWF4OnBhcnNlRmxvYXQoWlszXSksdmFsdWVNaW46bWUudmFsdWUsdmFsdWVNYXg6TGUudmFsdWUsYnlwYXNzOmt9fX1pZihxLm11bHRpcGxlJiZTIT09Im11bHRpcGxlIil7dmFyIFJlO2lmKEg/UmU9bS5zcGxpdCgvXHMrLyk6bmUobSk/UmU9bTpSZT1bbV0scS5ldmVuTXVsdGlwbGUmJlJlLmxlbmd0aCUyIT09MClyZXR1cm4gbnVsbDtmb3IodmFyIFZlPVtdLGN0PVtdLHN0PVtdLFllPSIiLG10PSExLEplPTA7SmU8UmUubGVuZ3RoO0plKyspe3ZhciBMdD1NLnBhcnNlKHgsUmVbSmVdLGssIm11bHRpcGxlIik7bXQ9bXR8fGJlKEx0LnZhbHVlKSxWZS5wdXNoKEx0LnZhbHVlKSxzdC5wdXNoKEx0LnBmVmFsdWUhPW51bGw/THQucGZWYWx1ZTpMdC52YWx1ZSksY3QucHVzaChMdC51bml0cyksWWUrPShKZT4wPyIgIjoiIikrTHQuc3RyVmFsdWV9cmV0dXJuIHEudmFsaWRhdGUmJiFxLnZhbGlkYXRlKFZlLGN0KT9udWxsOnEuc2luZ2xlRW51bSYmbXQ/VmUubGVuZ3RoPT09MSYmYmUoVmVbMF0pP3tuYW1lOngsdmFsdWU6VmVbMF0sc3RyVmFsdWU6VmVbMF0sYnlwYXNzOmt9Om51bGw6e25hbWU6eCx2YWx1ZTpWZSxwZlZhbHVlOnN0LHN0clZhbHVlOlllLGJ5cGFzczprLHVuaXRzOmN0fX12YXIgTXQ9ZnVuY3Rpb24oKXtmb3IodmFyIFNyPTA7U3I8cS5lbnVtcy5sZW5ndGg7U3IrKyl7dmFyIE5yPXEuZW51bXNbU3JdO2lmKE5yPT09bSlyZXR1cm57bmFtZTp4LHZhbHVlOm0sc3RyVmFsdWU6IiIrbSxieXBhc3M6a319cmV0dXJuIG51bGx9O2lmKHEubnVtYmVyKXt2YXIgdXQsV3Q9InB4IjtpZihxLnVuaXRzJiYodXQ9cS51bml0cykscS5pbXBsaWNpdFVuaXRzJiYoV3Q9cS5pbXBsaWNpdFVuaXRzKSwhcS51bml0bGVzcylpZihIKXt2YXIgVHQ9InB4fGVtIisocS5hbGxvd1BlcmNlbnQ/InxcXCUiOiIiKTt1dCYmKFR0PXV0KTt2YXIgX249bS5tYXRjaCgiXigiK2xuKyIpKCIrVHQrIik/JCIpO19uJiYobT1fblsxXSx1dD1fblsyXXx8V3QpfWVsc2UoIXV0fHxxLmltcGxpY2l0VW5pdHMpJiYodXQ9V3QpO2lmKG09cGFyc2VGbG9hdChtKSxpc05hTihtKSYmcS5lbnVtcz09PXZvaWQgMClyZXR1cm4gbnVsbDtpZihpc05hTihtKSYmcS5lbnVtcyE9PXZvaWQgMClyZXR1cm4gbT1OLE10KCk7aWYocS5pbnRlZ2VyJiYhZ2UobSl8fHEubWluIT09dm9pZCAwJiYobTxxLm1pbnx8cS5zdHJpY3RNaW4mJm09PT1xLm1pbil8fHEubWF4IT09dm9pZCAwJiYobT5xLm1heHx8cS5zdHJpY3RNYXgmJm09PT1xLm1heCkpcmV0dXJuIG51bGw7dmFyIGhuPXtuYW1lOngsdmFsdWU6bSxzdHJWYWx1ZToiIittKyh1dHx8IiIpLHVuaXRzOnV0LGJ5cGFzczprfTtyZXR1cm4gcS51bml0bGVzc3x8dXQhPT0icHgiJiZ1dCE9PSJlbSI/aG4ucGZWYWx1ZT1tOmhuLnBmVmFsdWU9dXQ9PT0icHgifHwhdXQ/bTp0aGlzLmdldEVtU2l6ZUluUGl4ZWxzKCkqbSwodXQ9PT0ibXMifHx1dD09PSJzIikmJihobi5wZlZhbHVlPXV0PT09Im1zIj9tOjFlMyptKSwodXQ9PT0iZGVnInx8dXQ9PT0icmFkIikmJihobi5wZlZhbHVlPXV0PT09InJhZCI/bTpsWihtKSksdXQ9PT0iJSImJihobi5wZlZhbHVlPW0vMTAwKSxobn1lbHNlIGlmKHEucHJvcExpc3Qpe3ZhciBZdD1bXSxEbj0iIittO2lmKERuIT09Im5vbmUiKXtmb3IodmFyIGlyPURuLnNwbGl0KC9ccyosXHMqfFxzKy8pLHZyPTA7dnI8aXIubGVuZ3RoO3ZyKyspe3ZhciBObj1pclt2cl0udHJpbSgpO00ucHJvcGVydGllc1tObl0/WXQucHVzaChObik6aHUoImAiK05uKyJgIGlzIG5vdCBhIHZhbGlkIHByb3BlcnR5IG5hbWUiKX1pZihZdC5sZW5ndGg9PT0wKXJldHVybiBudWxsfXJldHVybntuYW1lOngsdmFsdWU6WXQsc3RyVmFsdWU6WXQubGVuZ3RoPT09MD8ibm9uZSI6WXQuam9pbigiICIpLGJ5cGFzczprfX1lbHNlIGlmKHEuY29sb3Ipe3ZhciBwcj1hbyhtKTtyZXR1cm4gcHI/e25hbWU6eCx2YWx1ZTpwcixwZlZhbHVlOnByLHN0clZhbHVlOiJyZ2IoIitwclswXSsiLCIrcHJbMV0rIiwiK3ByWzJdKyIpIixieXBhc3M6a306bnVsbH1lbHNlIGlmKHEucmVnZXh8fHEucmVnZXhlcyl7aWYocS5lbnVtcyl7dmFyIEVyPU10KCk7aWYoRXIpcmV0dXJuIEVyfWZvcih2YXIgTXI9cS5yZWdleGVzP3EucmVnZXhlczpbcS5yZWdleF0sQ3I9MDtDcjxNci5sZW5ndGg7Q3IrKyl7dmFyIE9yPW5ldyBSZWdFeHAoTXJbQ3JdKSxXbj1Pci5leGVjKG0pO2lmKFduKXJldHVybntuYW1lOngsdmFsdWU6cS5zaW5nbGVSZWdleE1hdGNoVmFsdWU/V25bMV06V24sc3RyVmFsdWU6IiIrbSxieXBhc3M6a319cmV0dXJuIG51bGx9ZWxzZSByZXR1cm4gcS5zdHJpbmc/e25hbWU6eCx2YWx1ZToiIittLHN0clZhbHVlOiIiK20sYnlwYXNzOmt9OnEuZW51bXM/TXQoKTpudWxsfTt2YXIgVDE9ZnVuY3Rpb24geChtKXtpZighKHRoaXMgaW5zdGFuY2VvZiB4KSlyZXR1cm4gbmV3IHgobSk7aWYoIVBlKG0pKXtjaCgiQSBzdHlsZSBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSIpO3JldHVybn10aGlzLl9wcml2YXRlPXtjeTptLGNvcmVTdHlsZTp7fX0sdGhpcy5sZW5ndGg9MCx0aGlzLnJlc2V0VG9EZWZhdWx0KCl9LEMxPVQxLnByb3RvdHlwZTtDMS5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJzdHlsZSJ9LEMxLmNsZWFyPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PXRoaXMuX3ByaXZhdGUsbT14LmN5LGs9bS5lbGVtZW50cygpLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl0aGlzW1NdPXZvaWQgMDtyZXR1cm4gdGhpcy5sZW5ndGg9MCx4LmNvbnRleHRTdHlsZXM9e30seC5wcm9wRGlmZnM9e30sdGhpcy5jbGVhbkVsZW1lbnRzKGssITApLGsuZm9yRWFjaChmdW5jdGlvbihNKXt2YXIgTz1NWzBdLl9wcml2YXRlO08uc3R5bGVEaXJ0eT0hMCxPLmFwcGxpZWRJbml0U3R5bGU9ITF9KSx0aGlzfSxDMS5yZXNldFRvRGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5hZGREZWZhdWx0U3R5bGVzaGVldCgpLHRoaXN9LEMxLmNvcmU9ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3hdfHx0aGlzLmdldERlZmF1bHRQcm9wZXJ0eSh4KX0sQzEuc2VsZWN0b3I9ZnVuY3Rpb24oeCl7dmFyIG09eD09PSJjb3JlIj9udWxsOm5ldyBleSh4KSxrPXRoaXMubGVuZ3RoKys7cmV0dXJuIHRoaXNba109e3NlbGVjdG9yOm0scHJvcGVydGllczpbXSxtYXBwZWRQcm9wZXJ0aWVzOltdLGluZGV4Omt9LHRoaXN9LEMxLmNzcz1mdW5jdGlvbigpe3ZhciB4PXRoaXMsbT1hcmd1bWVudHM7aWYobS5sZW5ndGg9PT0xKWZvcih2YXIgaz1tWzBdLFM9MDtTPHgucHJvcGVydGllcy5sZW5ndGg7UysrKXt2YXIgTT14LnByb3BlcnRpZXNbU10sTz1rW00ubmFtZV07Tz09PXZvaWQgMCYmKE89a1tfdChNLm5hbWUpXSksTyE9PXZvaWQgMCYmdGhpcy5jc3NSdWxlKE0ubmFtZSxPKX1lbHNlIG0ubGVuZ3RoPT09MiYmdGhpcy5jc3NSdWxlKG1bMF0sbVsxXSk7cmV0dXJuIHRoaXN9LEMxLnN0eWxlPUMxLmNzcyxDMS5jc3NSdWxlPWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcy5wYXJzZSh4LG0pO2lmKGspe3ZhciBTPXRoaXMubGVuZ3RoLTE7dGhpc1tTXS5wcm9wZXJ0aWVzLnB1c2goayksdGhpc1tTXS5wcm9wZXJ0aWVzW2submFtZV09ayxrLm5hbWUubWF0Y2goL3BpZS0oXGQrKS1iYWNrZ3JvdW5kLXNpemUvKSYmay52YWx1ZSYmKHRoaXMuX3ByaXZhdGUuaGFzUGllPSEwKSxrLm1hcHBlZCYmdGhpc1tTXS5tYXBwZWRQcm9wZXJ0aWVzLnB1c2goayk7dmFyIE09IXRoaXNbU10uc2VsZWN0b3I7TSYmKHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW2submFtZV09ayl9cmV0dXJuIHRoaXN9LEMxLmFwcGVuZD1mdW5jdGlvbih4KXtyZXR1cm4gamUoeCk/eC5hcHBlbmRUb1N0eWxlKHRoaXMpOm5lKHgpP3RoaXMuYXBwZW5kRnJvbUpzb24oeCk6YmUoeCkmJnRoaXMuYXBwZW5kRnJvbVN0cmluZyh4KSx0aGlzfSxUMS5mcm9tSnNvbj1mdW5jdGlvbih4LG0pe3ZhciBrPW5ldyBUMSh4KTtyZXR1cm4gay5mcm9tSnNvbihtKSxrfSxUMS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIG5ldyBUMSh4KS5mcm9tU3RyaW5nKG0pfSxbRTEsY2ssSUkseG0sJFMsT0ksVTAselNdLmZvckVhY2goZnVuY3Rpb24oeCl7eXQoQzEseCl9KSxUMS50eXBlcz1DMS50eXBlcyxUMS5wcm9wZXJ0aWVzPUMxLnByb3BlcnRpZXMsVDEucHJvcGVydHlHcm91cHM9QzEucHJvcGVydHlHcm91cHMsVDEucHJvcGVydHlHcm91cE5hbWVzPUMxLnByb3BlcnR5R3JvdXBOYW1lcyxUMS5wcm9wZXJ0eUdyb3VwS2V5cz1DMS5wcm9wZXJ0eUdyb3VwS2V5czt2YXIgcHJlPXtzdHlsZTpmdW5jdGlvbihtKXtpZihtKXt2YXIgaz10aGlzLnNldFN0eWxlKG0pO2sudXBkYXRlKCl9cmV0dXJuIHRoaXMuX3ByaXZhdGUuc3R5bGV9LHNldFN0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGplKG0pP2suc3R5bGU9bS5nZW5lcmF0ZVN0eWxlKHRoaXMpOm5lKG0pP2suc3R5bGU9VDEuZnJvbUpzb24odGhpcyxtKTpiZShtKT9rLnN0eWxlPVQxLmZyb21TdHJpbmcodGhpcyxtKTprLnN0eWxlPVQxKHRoaXMpLGsuc3R5bGV9LHVwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7dGhpcy5tdXRhYmxlRWxlbWVudHMoKS51cGRhdGVTdHlsZSgpfX0sYnJlPSJzaW5nbGUiLHY1PXthdXRvbG9jazpmdW5jdGlvbihtKXtpZihtIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b2xvY2s9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b2xvY2s7cmV0dXJuIHRoaXN9LGF1dG91bmdyYWJpZnk6ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b3VuZ3JhYmlmeTtyZXR1cm4gdGhpc30sYXV0b3Vuc2VsZWN0aWZ5OmZ1bmN0aW9uKG0pe2lmKG0hPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5hdXRvdW5zZWxlY3RpZnk9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5O3JldHVybiB0aGlzfSxzZWxlY3Rpb25UeXBlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGU7aWYoay5zZWxlY3Rpb25UeXBlPT1udWxsJiYoay5zZWxlY3Rpb25UeXBlPWJyZSksbSE9PXZvaWQgMCkobT09PSJhZGRpdGl2ZSJ8fG09PT0ic2luZ2xlIikmJihrLnNlbGVjdGlvblR5cGU9bSk7ZWxzZSByZXR1cm4gay5zZWxlY3Rpb25UeXBlO3JldHVybiB0aGlzfSxwYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihtKXtpZihtIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LHVzZXJQYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihtKXtpZihtIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUudXNlclBhbm5pbmdFbmFibGVkPSEhbTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sem9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkPSEhbTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkO3JldHVybiB0aGlzfSx1c2VyWm9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJab29taW5nRW5hYmxlZD0hIW07ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LGJveFNlbGVjdGlvbkVuYWJsZWQ6ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZDtyZXR1cm4gdGhpc30scGFuOmZ1bmN0aW9uKCl7dmFyIG09YXJndW1lbnRzLGs9dGhpcy5fcHJpdmF0ZS5wYW4sUyxNLE8sTiwkO3N3aXRjaChtLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBrO2Nhc2UgMTppZihiZShtWzBdKSlyZXR1cm4gUz1tWzBdLGtbU107aWYoc2UobVswXSkpe2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO089bVswXSxOPU8ueCwkPU8ueSxYKE4pJiYoay54PU4pLFgoJCkmJihrLnk9JCksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKX1icmVhaztjYXNlIDI6aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7Uz1tWzBdLE09bVsxXSwoUz09PSJ4Inx8Uz09PSJ5IikmJlgoTSkmJihrW1NdPU0pLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LHBhbkJ5OmZ1bmN0aW9uKG0sayl7dmFyIFM9YXJndW1lbnRzLE09dGhpcy5fcHJpdmF0ZS5wYW4sTyxOLCQsSCxxO2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO3N3aXRjaChTLmxlbmd0aCl7Y2FzZSAxOnNlKG0pJiYoJD1TWzBdLEg9JC54LHE9JC55LFgoSCkmJihNLngrPUgpLFgocSkmJihNLnkrPXEpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IikpO2JyZWFrO2Nhc2UgMjpPPW0sTj1rLChPPT09IngifHxPPT09InkiKSYmWChOKSYmKE1bT10rPU4pLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LGZpdDpmdW5jdGlvbihtLGspe3ZhciBTPXRoaXMuZ2V0Rml0Vmlld3BvcnQobSxrKTtpZihTKXt2YXIgTT10aGlzLl9wcml2YXRlO00uem9vbT1TLnpvb20sTS5wYW49Uy5wYW4sdGhpcy5lbWl0KCJwYW4gem9vbSB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpfXJldHVybiB0aGlzfSxnZXRGaXRWaWV3cG9ydDpmdW5jdGlvbihtLGspe2lmKFgobSkmJms9PT12b2lkIDAmJihrPW0sbT12b2lkIDApLCEoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkKSl7dmFyIFM7aWYoYmUobSkpe3ZhciBNPW07bT10aGlzLiQoTSl9ZWxzZSBpZihrZShtKSl7dmFyIE89bTtTPXt4MTpPLngxLHkxOk8ueTEseDI6Ty54Mix5MjpPLnkyfSxTLnc9Uy54Mi1TLngxLFMuaD1TLnkyLVMueTF9ZWxzZSB4ZShtKXx8KG09dGhpcy5tdXRhYmxlRWxlbWVudHMoKSk7aWYoISh4ZShtKSYmbS5lbXB0eSgpKSl7Uz1TfHxtLmJvdW5kaW5nQm94KCk7dmFyIE49dGhpcy53aWR0aCgpLCQ9dGhpcy5oZWlnaHQoKSxIO2lmKGs9WChrKT9rOjAsIWlzTmFOKE4pJiYhaXNOYU4oJCkmJk4+MCYmJD4wJiYhaXNOYU4oUy53KSYmIWlzTmFOKFMuaCkmJlMudz4wJiZTLmg+MCl7SD1NYXRoLm1pbigoTi0yKmspL1MudywoJC0yKmspL1MuaCksSD1IPnRoaXMuX3ByaXZhdGUubWF4Wm9vbT90aGlzLl9wcml2YXRlLm1heFpvb206SCxIPUg8dGhpcy5fcHJpdmF0ZS5taW5ab29tP3RoaXMuX3ByaXZhdGUubWluWm9vbTpIO3ZhciBxPXt4OihOLUgqKFMueDErUy54MikpLzIseTooJC1IKihTLnkxK1MueTIpKS8yfTtyZXR1cm57em9vbTpILHBhbjpxfX19fX0sem9vbVJhbmdlOmZ1bmN0aW9uKG0sayl7dmFyIFM9dGhpcy5fcHJpdmF0ZTtpZihrPT1udWxsKXt2YXIgTT1tO209TS5taW4saz1NLm1heH1yZXR1cm4gWChtKSYmWChrKSYmbTw9az8oUy5taW5ab29tPW0sUy5tYXhab29tPWspOlgobSkmJms9PT12b2lkIDAmJm08PVMubWF4Wm9vbT9TLm1pblpvb209bTpYKGspJiZtPT09dm9pZCAwJiZrPj1TLm1pblpvb20mJihTLm1heFpvb209ayksdGhpc30sbWluWm9vbTpmdW5jdGlvbihtKXtyZXR1cm4gbT09PXZvaWQgMD90aGlzLl9wcml2YXRlLm1pblpvb206dGhpcy56b29tUmFuZ2Uoe21pbjptfSl9LG1heFpvb206ZnVuY3Rpb24obSl7cmV0dXJuIG09PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS5tYXhab29tOnRoaXMuem9vbVJhbmdlKHttYXg6bX0pfSxnZXRab29tZWRWaWV3cG9ydDpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlLFM9ay5wYW4sTT1rLnpvb20sTyxOLCQ9ITE7aWYoay56b29taW5nRW5hYmxlZHx8KCQ9ITApLFgobSk/Tj1tOnNlKG0pJiYoTj1tLmxldmVsLG0ucG9zaXRpb24hPW51bGw/Tz1sUyhtLnBvc2l0aW9uLE0sUyk6bS5yZW5kZXJlZFBvc2l0aW9uIT1udWxsJiYoTz1tLnJlbmRlcmVkUG9zaXRpb24pLE8hPW51bGwmJiFrLnBhbm5pbmdFbmFibGVkJiYoJD0hMCkpLE49Tj5rLm1heFpvb20/ay5tYXhab29tOk4sTj1OPGsubWluWm9vbT9rLm1pblpvb206TiwkfHwhWChOKXx8Tj09PU18fE8hPW51bGwmJighWChPLngpfHwhWChPLnkpKSlyZXR1cm4gbnVsbDtpZihPIT1udWxsKXt2YXIgSD1TLHE9TSxZPU4sWj17eDotWS9xKihPLngtSC54KStPLngseTotWS9xKihPLnktSC55KStPLnl9O3JldHVybnt6b29tZWQ6ITAscGFubmVkOiEwLHpvb206WSxwYW46Wn19ZWxzZSByZXR1cm57em9vbWVkOiEwLHBhbm5lZDohMSx6b29tOk4scGFuOlN9fSx6b29tOmZ1bmN0aW9uKG0pe2lmKG09PT12b2lkIDApcmV0dXJuIHRoaXMuX3ByaXZhdGUuem9vbTt2YXIgaz10aGlzLmdldFpvb21lZFZpZXdwb3J0KG0pLFM9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gaz09bnVsbHx8IWsuem9vbWVkP3RoaXM6KFMuem9vbT1rLnpvb20say5wYW5uZWQmJihTLnBhbi54PWsucGFuLngsUy5wYW4ueT1rLnBhbi55KSx0aGlzLmVtaXQoInpvb20iKyhrLnBhbm5lZD8iIHBhbiI6IiIpKyIgdmlld3BvcnQiKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzKX0sdmlld3BvcnQ6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy5fcHJpdmF0ZSxTPSEwLE09ITAsTz1bXSxOPSExLCQ9ITE7aWYoIW0pcmV0dXJuIHRoaXM7aWYoWChtLnpvb20pfHwoUz0hMSksc2UobS5wYW4pfHwoTT0hMSksIVMmJiFNKXJldHVybiB0aGlzO2lmKFMpe3ZhciBIPW0uem9vbTtIPGsubWluWm9vbXx8SD5rLm1heFpvb218fCFrLnpvb21pbmdFbmFibGVkP049ITA6KGsuem9vbT1ILE8ucHVzaCgiem9vbSIpKX1pZihNJiYoIU58fCFtLmNhbmNlbE9uRmFpbGVkWm9vbSkmJmsucGFubmluZ0VuYWJsZWQpe3ZhciBxPW0ucGFuO1gocS54KSYmKGsucGFuLng9cS54LCQ9ITEpLFgocS55KSYmKGsucGFuLnk9cS55LCQ9ITEpLCR8fE8ucHVzaCgicGFuIil9cmV0dXJuIE8ubGVuZ3RoPjAmJihPLnB1c2goInZpZXdwb3J0IiksdGhpcy5lbWl0KE8uam9pbigiICIpKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSksdGhpc30sY2VudGVyOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuZ2V0Q2VudGVyUGFuKG0pO3JldHVybiBrJiYodGhpcy5fcHJpdmF0ZS5wYW49ayx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpKSx0aGlzfSxnZXRDZW50ZXJQYW46ZnVuY3Rpb24obSxrKXtpZih0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXtpZihiZShtKSl7dmFyIFM9bTttPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFMpfWVsc2UgeGUobSl8fChtPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkpO2lmKG0ubGVuZ3RoIT09MCl7dmFyIE09bS5ib3VuZGluZ0JveCgpLE89dGhpcy53aWR0aCgpLE49dGhpcy5oZWlnaHQoKTtrPWs9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS56b29tOms7dmFyICQ9e3g6KE8tayooTS54MStNLngyKSkvMix5OihOLWsqKE0ueTErTS55MikpLzJ9O3JldHVybiAkfX19LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkP3RoaXM6KHRoaXMudmlld3BvcnQoe3Bhbjp7eDowLHk6MH0sem9vbToxfSksdGhpcyl9LGludmFsaWRhdGVTaXplOmZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5zaXplQ2FjaGU9bnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciBtPXRoaXMuX3ByaXZhdGUsaz1tLmNvbnRhaW5lcixTPXRoaXM7cmV0dXJuIG0uc2l6ZUNhY2hlPW0uc2l6ZUNhY2hlfHwoaz9mdW5jdGlvbigpe3ZhciBNPVMud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShrKSxPPWZ1bmN0aW9uKCQpe3JldHVybiBwYXJzZUZsb2F0KE0uZ2V0UHJvcGVydHlWYWx1ZSgkKSl9O3JldHVybnt3aWR0aDprLmNsaWVudFdpZHRoLU8oInBhZGRpbmctbGVmdCIpLU8oInBhZGRpbmctcmlnaHQiKSxoZWlnaHQ6ay5jbGllbnRIZWlnaHQtTygicGFkZGluZy10b3AiKS1PKCJwYWRkaW5nLWJvdHRvbSIpfX0oKTp7d2lkdGg6MSxoZWlnaHQ6MX0pfSx3aWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKS53aWR0aH0saGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZSgpLmhlaWdodH0sZXh0ZW50OmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fcHJpdmF0ZS5wYW4saz10aGlzLl9wcml2YXRlLnpvb20sUz10aGlzLnJlbmRlcmVkRXh0ZW50KCksTT17eDE6KFMueDEtbS54KS9rLHgyOihTLngyLW0ueCkvayx5MTooUy55MS1tLnkpL2sseTI6KFMueTItbS55KS9rfTtyZXR1cm4gTS53PU0ueDItTS54MSxNLmg9TS55Mi1NLnkxLE19LHJlbmRlcmVkRXh0ZW50OmZ1bmN0aW9uKCl7dmFyIG09dGhpcy53aWR0aCgpLGs9dGhpcy5oZWlnaHQoKTtyZXR1cm57eDE6MCx5MTowLHgyOm0seTI6ayx3Om0saDprfX0sbXVsdGlDbGlja0RlYm91bmNlVGltZTpmdW5jdGlvbihtKXtpZihtKXRoaXMuX3ByaXZhdGUubXVsdGlDbGlja0RlYm91bmNlVGltZT1tO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUubXVsdGlDbGlja0RlYm91bmNlVGltZTtyZXR1cm4gdGhpc319O3Y1LmNlbnRyZT12NS5jZW50ZXIsdjUuYXV0b2xvY2tOb2Rlcz12NS5hdXRvbG9jayx2NS5hdXRvdW5ncmFiaWZ5Tm9kZXM9djUuYXV0b3VuZ3JhYmlmeTt2YXIgdWs9e2RhdGE6ZnUuZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZURhdGE6ZnUucmVtb3ZlRGF0YSh7ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxzY3JhdGNoOmZ1LmRhdGEoe2ZpZWxkOiJzY3JhdGNoIixiaW5kaW5nRXZlbnQ6InNjcmF0Y2giLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJzY3JhdGNoIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVTY3JhdGNoOmZ1LnJlbW92ZURhdGEoe2ZpZWxkOiJzY3JhdGNoIixldmVudDoic2NyYXRjaCIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLHVwZGF0ZVN0eWxlOiEwfSl9O3VrLmF0dHI9dWsuZGF0YSx1ay5yZW1vdmVBdHRyPXVrLnJlbW92ZURhdGE7dmFyIGxrPWZ1bmN0aW9uKG0pe3ZhciBrPXRoaXM7bT15dCh7fSxtKTt2YXIgUz1tLmNvbnRhaW5lcjtTJiYhVyhTKSYmVyhTWzBdKSYmKFM9U1swXSk7dmFyIE09Uz9TLl9jeXJlZzpudWxsO009TXx8e30sTSYmTS5jeSYmKE0uY3kuZGVzdHJveSgpLE09e30pO3ZhciBPPU0ucmVhZGllcz1NLnJlYWRpZXN8fFtdO1MmJihTLl9jeXJlZz1NKSxNLmN5PWs7dmFyIE49RiE9PXZvaWQgMCYmUyE9PXZvaWQgMCYmIW0uaGVhZGxlc3MsJD1tOyQubGF5b3V0PXl0KHtuYW1lOk4/ImdyaWQiOiJudWxsIn0sJC5sYXlvdXQpLCQucmVuZGVyZXI9eXQoe25hbWU6Tj8iY2FudmFzIjoibnVsbCJ9LCQucmVuZGVyZXIpO3ZhciBIPWZ1bmN0aW9uKG1lLExlLF9lKXtyZXR1cm4gTGUhPT12b2lkIDA/TGU6X2UhPT12b2lkIDA/X2U6bWV9LHE9dGhpcy5fcHJpdmF0ZT17Y29udGFpbmVyOlMscmVhZHk6ITEsb3B0aW9uczokLGVsZW1lbnRzOm5ldyBWMCh0aGlzKSxsaXN0ZW5lcnM6W10sYW5pRWxlczpuZXcgVjAodGhpcyksZGF0YTokLmRhdGF8fHt9LHNjcmF0Y2g6e30sbGF5b3V0Om51bGwscmVuZGVyZXI6bnVsbCxkZXN0cm95ZWQ6ITEsbm90aWZpY2F0aW9uc0VuYWJsZWQ6ITAsbWluWm9vbToxZS01MCxtYXhab29tOjFlNTAsem9vbWluZ0VuYWJsZWQ6SCghMCwkLnpvb21pbmdFbmFibGVkKSx1c2VyWm9vbWluZ0VuYWJsZWQ6SCghMCwkLnVzZXJab29taW5nRW5hYmxlZCkscGFubmluZ0VuYWJsZWQ6SCghMCwkLnBhbm5pbmdFbmFibGVkKSx1c2VyUGFubmluZ0VuYWJsZWQ6SCghMCwkLnVzZXJQYW5uaW5nRW5hYmxlZCksYm94U2VsZWN0aW9uRW5hYmxlZDpIKCEwLCQuYm94U2VsZWN0aW9uRW5hYmxlZCksYXV0b2xvY2s6SCghMSwkLmF1dG9sb2NrLCQuYXV0b2xvY2tOb2RlcyksYXV0b3VuZ3JhYmlmeTpIKCExLCQuYXV0b3VuZ3JhYmlmeSwkLmF1dG91bmdyYWJpZnlOb2RlcyksYXV0b3Vuc2VsZWN0aWZ5OkgoITEsJC5hdXRvdW5zZWxlY3RpZnkpLHN0eWxlRW5hYmxlZDokLnN0eWxlRW5hYmxlZD09PXZvaWQgMD9OOiQuc3R5bGVFbmFibGVkLHpvb206WCgkLnpvb20pPyQuem9vbToxLHBhbjp7eDpzZSgkLnBhbikmJlgoJC5wYW4ueCk/JC5wYW4ueDowLHk6c2UoJC5wYW4pJiZYKCQucGFuLnkpPyQucGFuLnk6MH0sYW5pbWF0aW9uOntjdXJyZW50OltdLHF1ZXVlOltdfSxoYXNDb21wb3VuZE5vZGVzOiExLG11bHRpQ2xpY2tEZWJvdW5jZVRpbWU6SCgyNTAsJC5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKX07dGhpcy5jcmVhdGVFbWl0dGVyKCksdGhpcy5zZWxlY3Rpb25UeXBlKCQuc2VsZWN0aW9uVHlwZSksdGhpcy56b29tUmFuZ2Uoe21pbjokLm1pblpvb20sbWF4OiQubWF4Wm9vbX0pO3ZhciBZPWZ1bmN0aW9uKG1lLExlKXt2YXIgX2U9bWUuc29tZShLZSk7aWYoX2UpcmV0dXJuIGk4LmFsbChtZSkudGhlbihMZSk7TGUobWUpfTtxLnN0eWxlRW5hYmxlZCYmay5zZXRTdHlsZShbXSk7dmFyIFo9eXQoe30sJCwkLnJlbmRlcmVyKTtrLmluaXRSZW5kZXJlcihaKTt2YXIgY2U9ZnVuY3Rpb24obWUsTGUsX2Upe2subm90aWZpY2F0aW9ucyghMSk7dmFyIEVlPWsubXV0YWJsZUVsZW1lbnRzKCk7RWUubGVuZ3RoPjAmJkVlLnJlbW92ZSgpLG1lIT1udWxsJiYoc2UobWUpfHxuZShtZSkpJiZrLmFkZChtZSksay5vbmUoImxheW91dHJlYWR5IixmdW5jdGlvbihSZSl7ay5ub3RpZmljYXRpb25zKCEwKSxrLmVtaXQoUmUpLGsub25lKCJsb2FkIixMZSksay5lbWl0QW5kTm90aWZ5KCJsb2FkIil9KS5vbmUoImxheW91dHN0b3AiLGZ1bmN0aW9uKCl7ay5vbmUoImRvbmUiLF9lKSxrLmVtaXQoImRvbmUiKX0pO3ZhciBCZT15dCh7fSxrLl9wcml2YXRlLm9wdGlvbnMubGF5b3V0KTtCZS5lbGVzPWsuZWxlbWVudHMoKSxrLmxheW91dChCZSkucnVuKCl9O1koWyQuc3R5bGUsJC5lbGVtZW50c10sZnVuY3Rpb24odmUpe3ZhciBtZT12ZVswXSxMZT12ZVsxXTtxLnN0eWxlRW5hYmxlZCYmay5zdHlsZSgpLmFwcGVuZChtZSksY2UoTGUsZnVuY3Rpb24oKXtrLnN0YXJ0QW5pbWF0aW9uTG9vcCgpLHEucmVhZHk9ITAsYWUoJC5yZWFkeSkmJmsub24oInJlYWR5IiwkLnJlYWR5KTtmb3IodmFyIF9lPTA7X2U8Ty5sZW5ndGg7X2UrKyl7dmFyIEVlPU9bX2VdO2sub24oInJlYWR5IixFZSl9TSYmKE0ucmVhZGllcz1bXSksay5lbWl0KCJyZWFkeSIpfSwkLmRvbmUpfSl9LHFTPWxrLnByb3RvdHlwZTt5dChxUyx7aW5zdGFuY2VTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iY29yZSJ9LGlzUmVhZHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZWFkeX0sZGVzdHJveWVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZGVzdHJveWVkfSxyZWFkeTpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5pc1JlYWR5KCk/dGhpcy5lbWl0dGVyKCkuZW1pdCgicmVhZHkiLFtdLG0pOnRoaXMub24oInJlYWR5IixtKSx0aGlzfSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIG09dGhpcztpZighbS5kZXN0cm95ZWQoKSlyZXR1cm4gbS5zdG9wQW5pbWF0aW9uTG9vcCgpLG0uZGVzdHJveVJlbmRlcmVyKCksdGhpcy5lbWl0KCJkZXN0cm95IiksbS5fcHJpdmF0ZS5kZXN0cm95ZWQ9ITAsbX0saGFzRWxlbWVudFdpdGhJZDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5oYXNFbGVtZW50V2l0aElkKG0pfSxnZXRFbGVtZW50QnlJZDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5nZXRFbGVtZW50QnlJZChtKX0saGFzQ29tcG91bmROb2RlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXN9LGhlYWRsZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVuZGVyZXIuaXNIZWFkbGVzcygpfSxzdHlsZUVuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5zdHlsZUVuYWJsZWR9LGFkZFRvUG9vbDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5tZXJnZShtKSx0aGlzfSxyZW1vdmVGcm9tUG9vbDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy51bm1lcmdlKG0pLHRoaXN9LGNvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvbnRhaW5lcnx8bnVsbH0sd2luZG93OmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fcHJpdmF0ZS5jb250YWluZXI7aWYobT09bnVsbClyZXR1cm4gRjt2YXIgaz10aGlzLl9wcml2YXRlLmNvbnRhaW5lci5vd25lckRvY3VtZW50O3JldHVybiBrPT09dm9pZCAwfHxrPT1udWxsP0Y6ay5kZWZhdWx0Vmlld3x8Rn0sbW91bnQ6ZnVuY3Rpb24obSl7aWYobSE9bnVsbCl7dmFyIGs9dGhpcyxTPWsuX3ByaXZhdGUsTT1TLm9wdGlvbnM7cmV0dXJuIVcobSkmJlcobVswXSkmJihtPW1bMF0pLGsuc3RvcEFuaW1hdGlvbkxvb3AoKSxrLmRlc3Ryb3lSZW5kZXJlcigpLFMuY29udGFpbmVyPW0sUy5zdHlsZUVuYWJsZWQ9ITAsay5pbnZhbGlkYXRlU2l6ZSgpLGsuaW5pdFJlbmRlcmVyKHl0KHt9LE0sTS5yZW5kZXJlcix7bmFtZTpNLnJlbmRlcmVyLm5hbWU9PT0ibnVsbCI/ImNhbnZhcyI6TS5yZW5kZXJlci5uYW1lfSkpLGsuc3RhcnRBbmltYXRpb25Mb29wKCksay5zdHlsZShNLnN0eWxlKSxrLmVtaXQoIm1vdW50Iiksa319LHVubW91bnQ6ZnVuY3Rpb24oKXt2YXIgbT10aGlzO3JldHVybiBtLnN0b3BBbmltYXRpb25Mb29wKCksbS5kZXN0cm95UmVuZGVyZXIoKSxtLmluaXRSZW5kZXJlcih7bmFtZToibnVsbCJ9KSxtLmVtaXQoInVubW91bnQiKSxtfSxvcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHZtKHRoaXMuX3ByaXZhdGUub3B0aW9ucyl9LGpzb246ZnVuY3Rpb24obSl7dmFyIGs9dGhpcyxTPWsuX3ByaXZhdGUsTT1rLm11dGFibGVFbGVtZW50cygpLE89ZnVuY3Rpb24oVmUpe3JldHVybiBrLmdldEVsZW1lbnRCeUlkKFZlLmlkKCkpfTtpZihzZShtKSl7aWYoay5zdGFydEJhdGNoKCksbS5lbGVtZW50cyl7dmFyIE49e30sJD1mdW5jdGlvbihWZSxjdCl7Zm9yKHZhciBzdD1bXSxZZT1bXSxtdD0wO210PFZlLmxlbmd0aDttdCsrKXt2YXIgSmU9VmVbbXRdO2lmKCFKZS5kYXRhLmlkKXtodSgiY3kuanNvbigpIGNhbm5vdCBoYW5kbGUgZWxlbWVudHMgd2l0aG91dCBhbiBJRCBhdHRyaWJ1dGUiKTtjb250aW51ZX12YXIgTHQ9IiIrSmUuZGF0YS5pZCxNdD1rLmdldEVsZW1lbnRCeUlkKEx0KTtOW0x0XT0hMCxNdC5sZW5ndGghPT0wP1llLnB1c2goe2VsZTpNdCxqc29uOkplfSk6KGN0JiYoSmUuZ3JvdXA9Y3QpLHN0LnB1c2goSmUpKX1rLmFkZChzdCk7Zm9yKHZhciB1dD0wO3V0PFllLmxlbmd0aDt1dCsrKXt2YXIgV3Q9WWVbdXRdLFR0PVd0LmVsZSxfbj1XdC5qc29uO1R0Lmpzb24oX24pfX07aWYobmUobS5lbGVtZW50cykpJChtLmVsZW1lbnRzKTtlbHNlIGZvcih2YXIgSD1bIm5vZGVzIiwiZWRnZXMiXSxxPTA7cTxILmxlbmd0aDtxKyspe3ZhciBZPUhbcV0sWj1tLmVsZW1lbnRzW1ldO25lKFopJiYkKFosWSl9dmFyIGNlPWsuY29sbGVjdGlvbigpO00uZmlsdGVyKGZ1bmN0aW9uKFJlKXtyZXR1cm4hTltSZS5pZCgpXX0pLmZvckVhY2goZnVuY3Rpb24oUmUpe1JlLmlzUGFyZW50KCk/Y2UubWVyZ2UoUmUpOlJlLnJlbW92ZSgpfSksY2UuZm9yRWFjaChmdW5jdGlvbihSZSl7cmV0dXJuIFJlLmNoaWxkcmVuKCkubW92ZSh7cGFyZW50Om51bGx9KX0pLGNlLmZvckVhY2goZnVuY3Rpb24oUmUpe3JldHVybiBPKFJlKS5yZW1vdmUoKX0pfW0uc3R5bGUmJmsuc3R5bGUobS5zdHlsZSksbS56b29tIT1udWxsJiZtLnpvb20hPT1TLnpvb20mJmsuem9vbShtLnpvb20pLG0ucGFuJiYobS5wYW4ueCE9PVMucGFuLnh8fG0ucGFuLnkhPT1TLnBhbi55KSYmay5wYW4obS5wYW4pLG0uZGF0YSYmay5kYXRhKG0uZGF0YSk7Zm9yKHZhciB2ZT1bIm1pblpvb20iLCJtYXhab29tIiwiem9vbWluZ0VuYWJsZWQiLCJ1c2VyWm9vbWluZ0VuYWJsZWQiLCJwYW5uaW5nRW5hYmxlZCIsInVzZXJQYW5uaW5nRW5hYmxlZCIsImJveFNlbGVjdGlvbkVuYWJsZWQiLCJhdXRvbG9jayIsImF1dG91bmdyYWJpZnkiLCJhdXRvdW5zZWxlY3RpZnkiLCJtdWx0aUNsaWNrRGVib3VuY2VUaW1lIl0sbWU9MDttZTx2ZS5sZW5ndGg7bWUrKyl7dmFyIExlPXZlW21lXTttW0xlXSE9bnVsbCYma1tMZV0obVtMZV0pfXJldHVybiBrLmVuZEJhdGNoKCksdGhpc31lbHNle3ZhciBfZT0hIW0sRWU9e307X2U/RWUuZWxlbWVudHM9dGhpcy5lbGVtZW50cygpLm1hcChmdW5jdGlvbihSZSl7cmV0dXJuIFJlLmpzb24oKX0pOihFZS5lbGVtZW50cz17fSxNLmZvckVhY2goZnVuY3Rpb24oUmUpe3ZhciBWZT1SZS5ncm91cCgpO0VlLmVsZW1lbnRzW1ZlXXx8KEVlLmVsZW1lbnRzW1ZlXT1bXSksRWUuZWxlbWVudHNbVmVdLnB1c2goUmUuanNvbigpKX0pKSx0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZCYmKEVlLnN0eWxlPWsuc3R5bGUoKS5qc29uKCkpLEVlLmRhdGE9dm0oay5kYXRhKCkpO3ZhciBCZT1TLm9wdGlvbnM7cmV0dXJuIEVlLnpvb21pbmdFbmFibGVkPVMuem9vbWluZ0VuYWJsZWQsRWUudXNlclpvb21pbmdFbmFibGVkPVMudXNlclpvb21pbmdFbmFibGVkLEVlLnpvb209Uy56b29tLEVlLm1pblpvb209Uy5taW5ab29tLEVlLm1heFpvb209Uy5tYXhab29tLEVlLnBhbm5pbmdFbmFibGVkPVMucGFubmluZ0VuYWJsZWQsRWUudXNlclBhbm5pbmdFbmFibGVkPVMudXNlclBhbm5pbmdFbmFibGVkLEVlLnBhbj12bShTLnBhbiksRWUuYm94U2VsZWN0aW9uRW5hYmxlZD1TLmJveFNlbGVjdGlvbkVuYWJsZWQsRWUucmVuZGVyZXI9dm0oQmUucmVuZGVyZXIpLEVlLmhpZGVFZGdlc09uVmlld3BvcnQ9QmUuaGlkZUVkZ2VzT25WaWV3cG9ydCxFZS50ZXh0dXJlT25WaWV3cG9ydD1CZS50ZXh0dXJlT25WaWV3cG9ydCxFZS53aGVlbFNlbnNpdGl2aXR5PUJlLndoZWVsU2Vuc2l0aXZpdHksRWUubW90aW9uQmx1cj1CZS5tb3Rpb25CbHVyLEVlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU9QmUubXVsdGlDbGlja0RlYm91bmNlVGltZSxFZX19fSkscVMuJGlkPXFTLmdldEVsZW1lbnRCeUlkLFtzcmUsbHJlLEYkLE1JLFJTLGZyZSxESSxqUyxwcmUsdjUsdWtdLmZvckVhY2goZnVuY3Rpb24oeCl7eXQocVMseCl9KTt2YXIgbXJlPXtmaXQ6ITAsZGlyZWN0ZWQ6ITEscGFkZGluZzozMCxjaXJjbGU6ITEsZ3JpZDohMSxzcGFjaW5nRmFjdG9yOjEuNzUsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscm9vdHM6dm9pZCAwLGRlcHRoU29ydDp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKG0sayl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24obSxrKXtyZXR1cm4ga319LHZyZT17bWF4aW1hbDohMSxhY3ljbGljOiExfSxwOD1mdW5jdGlvbihtKXtyZXR1cm4gbS5zY3JhdGNoKCJicmVhZHRoZmlyc3QiKX0sUiQ9ZnVuY3Rpb24obSxrKXtyZXR1cm4gbS5zY3JhdGNoKCJicmVhZHRoZmlyc3QiLGspfTtmdW5jdGlvbiBqJCh4KXt0aGlzLm9wdGlvbnM9eXQoe30sbXJlLHZyZSx4KX1qJC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5vcHRpb25zLG09eCxrPXguY3ksUz1tLmVsZXMsTT1TLm5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKE1pKXtyZXR1cm4hTWkuaXNQYXJlbnQoKX0pLE89UyxOPW0uZGlyZWN0ZWQsJD1tLmFjeWNsaWN8fG0ubWF4aW1hbHx8bS5tYXhpbWFsQWRqdXN0bWVudHM+MCxIPVdkKG0uYm91bmRpbmdCb3g/bS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ay53aWR0aCgpLGg6ay5oZWlnaHQoKX0pLHE7aWYoeGUobS5yb290cykpcT1tLnJvb3RzO2Vsc2UgaWYobmUobS5yb290cykpe2Zvcih2YXIgWT1bXSxaPTA7WjxtLnJvb3RzLmxlbmd0aDtaKyspe3ZhciBjZT1tLnJvb3RzW1pdLHZlPWsuZ2V0RWxlbWVudEJ5SWQoY2UpO1kucHVzaCh2ZSl9cT1rLmNvbGxlY3Rpb24oWSl9ZWxzZSBpZihiZShtLnJvb3RzKSlxPWsuJChtLnJvb3RzKTtlbHNlIGlmKE4pcT1NLnJvb3RzKCk7ZWxzZXt2YXIgbWU9Uy5jb21wb25lbnRzKCk7cT1rLmNvbGxlY3Rpb24oKTtmb3IodmFyIExlPWZ1bmN0aW9uKGdpKXt2YXIgZnM9bWVbZ2ldLEZzPWZzLm1heERlZ3JlZSghMSkseHM9ZnMuZmlsdGVyKGZ1bmN0aW9uKFJzKXtyZXR1cm4gUnMuZGVncmVlKCExKT09PUZzfSk7cT1xLmFkZCh4cyl9LF9lPTA7X2U8bWUubGVuZ3RoO19lKyspTGUoX2UpfXZhciBFZT1bXSxCZT17fSxSZT1mdW5jdGlvbihnaSxmcyl7RWVbZnNdPT1udWxsJiYoRWVbZnNdPVtdKTt2YXIgRnM9RWVbZnNdLmxlbmd0aDtFZVtmc10ucHVzaChnaSksUiQoZ2kse2luZGV4OkZzLGRlcHRoOmZzfSl9LFZlPWZ1bmN0aW9uKGdpLGZzKXt2YXIgRnM9cDgoZ2kpLHhzPUZzLmRlcHRoLFJzPUZzLmluZGV4O0VlW3hzXVtSc109bnVsbCxSZShnaSxmcyl9O08uYmZzKHtyb290czpxLGRpcmVjdGVkOm0uZGlyZWN0ZWQsdmlzaXQ6ZnVuY3Rpb24oZ2ksZnMsRnMseHMsUnMpe3ZhciB5bz1naVswXSwkYT15by5pZCgpO1JlKHlvLFJzKSxCZVskYV09ITB9fSk7Zm9yKHZhciBjdD1bXSxzdD0wO3N0PE0ubGVuZ3RoO3N0Kyspe3ZhciBZZT1NW3N0XTtCZVtZZS5pZCgpXXx8Y3QucHVzaChZZSl9dmFyIG10PWZ1bmN0aW9uKGdpKXtmb3IodmFyIGZzPUVlW2dpXSxGcz0wO0ZzPGZzLmxlbmd0aDtGcysrKXt2YXIgeHM9ZnNbRnNdO2lmKHhzPT1udWxsKXtmcy5zcGxpY2UoRnMsMSksRnMtLTtjb250aW51ZX1SJCh4cyx7ZGVwdGg6Z2ksaW5kZXg6RnN9KX19LEplPWZ1bmN0aW9uKCl7Zm9yKHZhciBnaT0wO2dpPEVlLmxlbmd0aDtnaSsrKW10KGdpKX0sTHQ9ZnVuY3Rpb24oZ2ksZnMpe2Zvcih2YXIgRnM9cDgoZ2kpLHhzPWdpLmluY29tZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKEcpe3JldHVybiBHLmlzTm9kZSgpJiZTLmhhcyhHKX0pLFJzPS0xLHlvPWdpLmlkKCksJGE9MDskYTx4cy5sZW5ndGg7JGErKyl7dmFyIERhPXhzWyRhXSxCbz1wOChEYSk7UnM9TWF0aC5tYXgoUnMsQm8uZGVwdGgpfWlmKEZzLmRlcHRoPD1Scyl7aWYoIW0uYWN5Y2xpYyYmZnNbeW9dKXJldHVybiBudWxsO3ZhciB0cj1ScysxO3JldHVybiBWZShnaSx0ciksZnNbeW9dPXRyLCEwfXJldHVybiExfTtpZihOJiYkKXt2YXIgTXQ9W10sdXQ9e30sV3Q9ZnVuY3Rpb24oZ2kpe3JldHVybiBNdC5wdXNoKGdpKX0sVHQ9ZnVuY3Rpb24oKXtyZXR1cm4gTXQuc2hpZnQoKX07Zm9yKE0uZm9yRWFjaChmdW5jdGlvbihNaSl7cmV0dXJuIE10LnB1c2goTWkpfSk7TXQubGVuZ3RoPjA7KXt2YXIgX249VHQoKSxobj1MdChfbix1dCk7aWYoaG4pX24ub3V0Z29lcnMoKS5maWx0ZXIoZnVuY3Rpb24oTWkpe3JldHVybiBNaS5pc05vZGUoKSYmUy5oYXMoTWkpfSkuZm9yRWFjaChXdCk7ZWxzZSBpZihobj09PW51bGwpe2h1KCJEZXRlY3RlZCBkb3VibGUgbWF4aW1hbCBzaGlmdCBmb3Igbm9kZSBgIitfbi5pZCgpKyJgLiAgQmFpbGluZyBtYXhpbWFsIGFkanVzdG1lbnQgZHVlIHRvIGN5Y2xlLiAgVXNlIGBvcHRpb25zLm1heGltYWw6IHRydWVgIG9ubHkgb24gREFHcy4iKTticmVha319fUplKCk7dmFyIFl0PTA7aWYobS5hdm9pZE92ZXJsYXApZm9yKHZhciBEbj0wO0RuPE0ubGVuZ3RoO0RuKyspe3ZhciBpcj1NW0RuXSx2cj1pci5sYXlvdXREaW1lbnNpb25zKG0pLE5uPXZyLncscHI9dnIuaDtZdD1NYXRoLm1heChZdCxObixwcil9dmFyIEVyPXt9LE1yPWZ1bmN0aW9uKGdpKXtpZihFcltnaS5pZCgpXSlyZXR1cm4gRXJbZ2kuaWQoKV07Zm9yKHZhciBmcz1wOChnaSkuZGVwdGgsRnM9Z2kubmVpZ2hib3Job29kKCkseHM9MCxScz0wLHlvPTA7eW88RnMubGVuZ3RoO3lvKyspe3ZhciAkYT1Gc1t5b107aWYoISgkYS5pc0VkZ2UoKXx8JGEuaXNQYXJlbnQoKXx8IU0uaGFzKCRhKSkpe3ZhciBEYT1wOCgkYSk7aWYoRGEhPW51bGwpe3ZhciBCbz1EYS5pbmRleCx0cj1EYS5kZXB0aDtpZighKEJvPT1udWxsfHx0cj09bnVsbCkpe3ZhciBHPUVlW3RyXS5sZW5ndGg7dHI8ZnMmJih4cys9Qm8vRyxScysrKX19fX1yZXR1cm4gUnM9TWF0aC5tYXgoMSxScykseHM9eHMvUnMsUnM9PT0wJiYoeHM9MCksRXJbZ2kuaWQoKV09eHMseHN9LENyPWZ1bmN0aW9uKGdpLGZzKXt2YXIgRnM9TXIoZ2kpLHhzPU1yKGZzKSxScz1Gcy14cztyZXR1cm4gUnM9PT0wP2h0KGdpLmlkKCksZnMuaWQoKSk6UnN9O20uZGVwdGhTb3J0IT09dm9pZCAwJiYoQ3I9bS5kZXB0aFNvcnQpO2Zvcih2YXIgT3I9MDtPcjxFZS5sZW5ndGg7T3IrKylFZVtPcl0uc29ydChDciksbXQoT3IpO2Zvcih2YXIgV249W10sYnI9MDticjxjdC5sZW5ndGg7YnIrKylXbi5wdXNoKGN0W2JyXSk7RWUudW5zaGlmdChXbiksSmUoKTtmb3IodmFyIFNyPTAsTnI9MDtOcjxFZS5sZW5ndGg7TnIrKylTcj1NYXRoLm1heChFZVtOcl0ubGVuZ3RoLFNyKTt2YXIgU2k9e3g6SC54MStILncvMix5OkgueDErSC5oLzJ9LHlzPUVlLnJlZHVjZShmdW5jdGlvbihNaSxnaSl7cmV0dXJuIE1hdGgubWF4KE1pLGdpLmxlbmd0aCl9LDApLHBhPWZ1bmN0aW9uKGdpKXt2YXIgZnM9cDgoZ2kpLEZzPWZzLmRlcHRoLHhzPWZzLmluZGV4LFJzPUVlW0ZzXS5sZW5ndGgseW89TWF0aC5tYXgoSC53LygobS5ncmlkP3lzOlJzKSsxKSxZdCksJGE9TWF0aC5tYXgoSC5oLyhFZS5sZW5ndGgrMSksWXQpLERhPU1hdGgubWluKEgudy8yL0VlLmxlbmd0aCxILmgvMi9FZS5sZW5ndGgpO2lmKERhPU1hdGgubWF4KERhLFl0KSxtLmNpcmNsZSl7dmFyIHRyPURhKkZzK0RhLShFZS5sZW5ndGg+MCYmRWVbMF0ubGVuZ3RoPD0zP0RhLzI6MCksRz0yKk1hdGguUEkvRWVbRnNdLmxlbmd0aCp4cztyZXR1cm4gRnM9PT0wJiZFZVswXS5sZW5ndGg9PT0xJiYodHI9MSkse3g6U2kueCt0cipNYXRoLmNvcyhHKSx5OlNpLnkrdHIqTWF0aC5zaW4oRyl9fWVsc2V7dmFyIEJvPXt4OlNpLngrKHhzKzEtKFJzKzEpLzIpKnlvLHk6KEZzKzEpKiRhfTtyZXR1cm4gQm99fTtyZXR1cm4gUy5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLG0scGEpLHRoaXN9O3ZhciB3cmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHNwYWNpbmdGYWN0b3I6dm9pZCAwLHJhZGl1czp2b2lkIDAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihtLGspe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKG0sayl7cmV0dXJuIGt9fTtmdW5jdGlvbiAkJCh4KXt0aGlzLm9wdGlvbnM9eXQoe30sd3JlLHgpfSQkLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeD10aGlzLm9wdGlvbnMsbT14LGs9eC5jeSxTPW0uZWxlcyxNPW0uY291bnRlcmNsb2Nrd2lzZSE9PXZvaWQgMD8hbS5jb3VudGVyY2xvY2t3aXNlOm0uY2xvY2t3aXNlLE89Uy5ub2RlcygpLm5vdCgiOnBhcmVudCIpO20uc29ydCYmKE89Ty5zb3J0KG0uc29ydCkpO2Zvcih2YXIgTj1XZChtLmJvdW5kaW5nQm94P20uYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3Omsud2lkdGgoKSxoOmsuaGVpZ2h0KCl9KSwkPXt4Ok4ueDErTi53LzIseTpOLnkxK04uaC8yfSxIPW0uc3dlZXA9PT12b2lkIDA/MipNYXRoLlBJLTIqTWF0aC5QSS9PLmxlbmd0aDptLnN3ZWVwLHE9SC9NYXRoLm1heCgxLE8ubGVuZ3RoLTEpLFksWj0wLGNlPTA7Y2U8Ty5sZW5ndGg7Y2UrKyl7dmFyIHZlPU9bY2VdLG1lPXZlLmxheW91dERpbWVuc2lvbnMobSksTGU9bWUudyxfZT1tZS5oO1o9TWF0aC5tYXgoWixMZSxfZSl9aWYoWChtLnJhZGl1cyk/WT1tLnJhZGl1czpPLmxlbmd0aDw9MT9ZPTA6WT1NYXRoLm1pbihOLmgsTi53KS8yLVosTy5sZW5ndGg+MSYmbS5hdm9pZE92ZXJsYXApe1oqPTEuNzU7dmFyIEVlPU1hdGguY29zKHEpLU1hdGguY29zKDApLEJlPU1hdGguc2luKHEpLU1hdGguc2luKDApLFJlPU1hdGguc3FydChaKlovKEVlKkVlK0JlKkJlKSk7WT1NYXRoLm1heChSZSxZKX12YXIgVmU9ZnVuY3Rpb24oc3QsWWUpe3ZhciBtdD1tLnN0YXJ0QW5nbGUrWWUqcSooTT8xOi0xKSxKZT1ZKk1hdGguY29zKG10KSxMdD1ZKk1hdGguc2luKG10KSxNdD17eDokLngrSmUseTokLnkrTHR9O3JldHVybiBNdH07cmV0dXJuIFMubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxtLFZlKSx0aGlzfTt2YXIgeXJlPXtmaXQ6ITAscGFkZGluZzozMCxzdGFydEFuZ2xlOjMvMipNYXRoLlBJLHN3ZWVwOnZvaWQgMCxjbG9ja3dpc2U6ITAsZXF1aWRpc3RhbnQ6ITEsbWluTm9kZVNwYWNpbmc6MTAsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsaGVpZ2h0OnZvaWQgMCx3aWR0aDp2b2lkIDAsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uY2VudHJpYzpmdW5jdGlvbihtKXtyZXR1cm4gbS5kZWdyZWUoKX0sbGV2ZWxXaWR0aDpmdW5jdGlvbihtKXtyZXR1cm4gbS5tYXhEZWdyZWUoKS80fSxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24obSxrKXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihtLGspe3JldHVybiBrfX07ZnVuY3Rpb24geiQoeCl7dGhpcy5vcHRpb25zPXl0KHt9LHlyZSx4KX16JC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PXRoaXMub3B0aW9ucyxtPXgsaz1tLmNvdW50ZXJjbG9ja3dpc2UhPT12b2lkIDA/IW0uY291bnRlcmNsb2Nrd2lzZTptLmNsb2Nrd2lzZSxTPXguY3ksTT1tLmVsZXMsTz1NLm5vZGVzKCkubm90KCI6cGFyZW50IiksTj1XZChtLmJvdW5kaW5nQm94P20uYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3OlMud2lkdGgoKSxoOlMuaGVpZ2h0KCl9KSwkPXt4Ok4ueDErTi53LzIseTpOLnkxK04uaC8yfSxIPVtdLHE9MCxZPTA7WTxPLmxlbmd0aDtZKyspe3ZhciBaPU9bWV0sY2U9dm9pZCAwO2NlPW0uY29uY2VudHJpYyhaKSxILnB1c2goe3ZhbHVlOmNlLG5vZGU6Wn0pLFouX3ByaXZhdGUuc2NyYXRjaC5jb25jZW50cmljPWNlfU8udXBkYXRlU3R5bGUoKTtmb3IodmFyIHZlPTA7dmU8Ty5sZW5ndGg7dmUrKyl7dmFyIG1lPU9bdmVdLExlPW1lLmxheW91dERpbWVuc2lvbnMobSk7cT1NYXRoLm1heChxLExlLncsTGUuaCl9SC5zb3J0KGZ1bmN0aW9uKE1pLGdpKXtyZXR1cm4gZ2kudmFsdWUtTWkudmFsdWV9KTtmb3IodmFyIF9lPW0ubGV2ZWxXaWR0aChPKSxFZT1bW11dLEJlPUVlWzBdLFJlPTA7UmU8SC5sZW5ndGg7UmUrKyl7dmFyIFZlPUhbUmVdO2lmKEJlLmxlbmd0aD4wKXt2YXIgY3Q9TWF0aC5hYnMoQmVbMF0udmFsdWUtVmUudmFsdWUpO2N0Pj1fZSYmKEJlPVtdLEVlLnB1c2goQmUpKX1CZS5wdXNoKFZlKX12YXIgc3Q9cSttLm1pbk5vZGVTcGFjaW5nO2lmKCFtLmF2b2lkT3ZlcmxhcCl7dmFyIFllPUVlLmxlbmd0aD4wJiZFZVswXS5sZW5ndGg+MSxtdD1NYXRoLm1pbihOLncsTi5oKS8yLXN0LEplPW10LyhFZS5sZW5ndGgrWWU/MTowKTtzdD1NYXRoLm1pbihzdCxKZSl9Zm9yKHZhciBMdD0wLE10PTA7TXQ8RWUubGVuZ3RoO010Kyspe3ZhciB1dD1FZVtNdF0sV3Q9bS5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL3V0Lmxlbmd0aDptLnN3ZWVwLFR0PXV0LmRUaGV0YT1XdC9NYXRoLm1heCgxLHV0Lmxlbmd0aC0xKTtpZih1dC5sZW5ndGg+MSYmbS5hdm9pZE92ZXJsYXApe3ZhciBfbj1NYXRoLmNvcyhUdCktTWF0aC5jb3MoMCksaG49TWF0aC5zaW4oVHQpLU1hdGguc2luKDApLFl0PU1hdGguc3FydChzdCpzdC8oX24qX24raG4qaG4pKTtMdD1NYXRoLm1heChZdCxMdCl9dXQucj1MdCxMdCs9c3R9aWYobS5lcXVpZGlzdGFudCl7Zm9yKHZhciBEbj0wLGlyPTAsdnI9MDt2cjxFZS5sZW5ndGg7dnIrKyl7dmFyIE5uPUVlW3ZyXSxwcj1Obi5yLWlyO0RuPU1hdGgubWF4KERuLHByKX1pcj0wO2Zvcih2YXIgRXI9MDtFcjxFZS5sZW5ndGg7RXIrKyl7dmFyIE1yPUVlW0VyXTtFcj09PTAmJihpcj1Nci5yKSxNci5yPWlyLGlyKz1Ebn19Zm9yKHZhciBDcj17fSxPcj0wO09yPEVlLmxlbmd0aDtPcisrKWZvcih2YXIgV249RWVbT3JdLGJyPVduLmRUaGV0YSxTcj1Xbi5yLE5yPTA7TnI8V24ubGVuZ3RoO05yKyspe3ZhciBTaT1XbltOcl0seXM9bS5zdGFydEFuZ2xlKyhrPzE6LTEpKmJyKk5yLHBhPXt4OiQueCtTcipNYXRoLmNvcyh5cykseTokLnkrU3IqTWF0aC5zaW4oeXMpfTtDcltTaS5ub2RlLmlkKCldPXBhfXJldHVybiBNLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsbSxmdW5jdGlvbihNaSl7dmFyIGdpPU1pLmlkKCk7cmV0dXJuIENyW2dpXX0pLHRoaXN9O3ZhciBOSSx4cmU9e3JlYWR5OmZ1bmN0aW9uKCl7fSxzdG9wOmZ1bmN0aW9uKCl7fSxhbmltYXRlOiEwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0aW9uRHVyYXRpb246dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24obSxrKXtyZXR1cm4hMH0sYW5pbWF0aW9uVGhyZXNob2xkOjI1MCxyZWZyZXNoOjIwLGZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscmFuZG9taXplOiExLGNvbXBvbmVudFNwYWNpbmc6NDAsbm9kZVJlcHVsc2lvbjpmdW5jdGlvbihtKXtyZXR1cm4gMjA0OH0sbm9kZU92ZXJsYXA6NCxpZGVhbEVkZ2VMZW5ndGg6ZnVuY3Rpb24obSl7cmV0dXJuIDMyfSxlZGdlRWxhc3RpY2l0eTpmdW5jdGlvbihtKXtyZXR1cm4gMzJ9LG5lc3RpbmdGYWN0b3I6MS4yLGdyYXZpdHk6MSxudW1JdGVyOjFlMyxpbml0aWFsVGVtcDoxZTMsY29vbGluZ0ZhY3RvcjouOTksbWluVGVtcDoxfTtmdW5jdGlvbiBIUyh4KXt0aGlzLm9wdGlvbnM9eXQoe30seHJlLHgpLHRoaXMub3B0aW9ucy5sYXlvdXQ9dGhpczt2YXIgbT10aGlzLm9wdGlvbnMuZWxlcy5ub2RlcygpLGs9dGhpcy5vcHRpb25zLmVsZXMuZWRnZXMoKSxTPWsuZmlsdGVyKGZ1bmN0aW9uKE0pe3ZhciBPPU0uc291cmNlKCkuZGF0YSgiaWQiKSxOPU0udGFyZ2V0KCkuZGF0YSgiaWQiKSwkPW0uc29tZShmdW5jdGlvbihxKXtyZXR1cm4gcS5kYXRhKCJpZCIpPT09T30pLEg9bS5zb21lKGZ1bmN0aW9uKHEpe3JldHVybiBxLmRhdGEoImlkIik9PT1OfSk7cmV0dXJuISR8fCFIfSk7dGhpcy5vcHRpb25zLmVsZXM9dGhpcy5vcHRpb25zLmVsZXMubm90KFMpfUhTLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeD10aGlzLm9wdGlvbnMsbT14LmN5LGs9dGhpcztrLnN0b3BwZWQ9ITEsKHguYW5pbWF0ZT09PSEwfHx4LmFuaW1hdGU9PT0hMSkmJmsuZW1pdCh7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDprfSkseC5kZWJ1Zz09PSEwP05JPSEwOk5JPSExO3ZhciBTPWtyZShtLGsseCk7TkkmJkNyZShTKSx4LnJhbmRvbWl6ZSYmU3JlKFMpO3ZhciBNPUJwKCksTz1mdW5jdGlvbigpe19yZShTLG0seCkseC5maXQ9PT0hMCYmbS5maXQoeC5wYWRkaW5nKX0sTj1mdW5jdGlvbihjZSl7cmV0dXJuIShrLnN0b3BwZWR8fGNlPj14Lm51bUl0ZXJ8fChBcmUoUyx4KSxTLnRlbXBlcmF0dXJlPVMudGVtcGVyYXR1cmUqeC5jb29saW5nRmFjdG9yLFMudGVtcGVyYXR1cmU8eC5taW5UZW1wKSl9LCQ9ZnVuY3Rpb24oKXtpZih4LmFuaW1hdGU9PT0hMHx8eC5hbmltYXRlPT09ITEpTygpLGsub25lKCJsYXlvdXRzdG9wIix4LnN0b3ApLGsuZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Omt9KTtlbHNle3ZhciBjZT14LmVsZXMubm9kZXMoKSx2ZT1xJChTLHgsY2UpO2NlLmxheW91dFBvc2l0aW9ucyhrLHgsdmUpfX0sSD0wLHE9ITA7aWYoeC5hbmltYXRlPT09ITApe3ZhciBZPWZ1bmN0aW9uIFooKXtmb3IodmFyIGNlPTA7cSYmY2U8eC5yZWZyZXNoOylxPU4oSCksSCsrLGNlKys7aWYoIXEpViQoUyx4KSwkKCk7ZWxzZXt2YXIgdmU9QnAoKTt2ZS1NPj14LmFuaW1hdGlvblRocmVzaG9sZCYmTygpLHowKFopfX07WSgpfWVsc2V7Zm9yKDtxOylxPU4oSCksSCsrO1YkKFMseCksJCgpfXJldHVybiB0aGlzfSxIUy5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3BwZWQ9ITAsdGhpcy50aHJlYWQmJnRoaXMudGhyZWFkLnN0b3AoKSx0aGlzLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxIUy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRocmVhZCYmdGhpcy50aHJlYWQuc3RvcCgpLHRoaXN9O3ZhciBrcmU9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1TLmVsZXMuZWRnZXMoKSxPPVMuZWxlcy5ub2RlcygpLE49V2QoUy5ib3VuZGluZ0JveD9TLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzptLndpZHRoKCksaDptLmhlaWdodCgpfSksJD17aXNDb21wb3VuZDptLmhhc0NvbXBvdW5kTm9kZXMoKSxsYXlvdXROb2RlczpbXSxpZFRvSW5kZXg6e30sbm9kZVNpemU6Ty5zaXplKCksZ3JhcGhTZXQ6W10saW5kZXhUb0dyYXBoOltdLGxheW91dEVkZ2VzOltdLGVkZ2VTaXplOk0uc2l6ZSgpLHRlbXBlcmF0dXJlOlMuaW5pdGlhbFRlbXAsY2xpZW50V2lkdGg6Ti53LGNsaWVudEhlaWdodDpOLmgsYm91bmRpbmdCb3g6Tn0sSD1TLmVsZXMuY29tcG9uZW50cygpLHE9e30sWT0wO1k8SC5sZW5ndGg7WSsrKWZvcih2YXIgWj1IW1ldLGNlPTA7Y2U8Wi5sZW5ndGg7Y2UrKyl7dmFyIHZlPVpbY2VdO3FbdmUuaWQoKV09WX1mb3IodmFyIFk9MDtZPCQubm9kZVNpemU7WSsrKXt2YXIgbWU9T1tZXSxMZT1tZS5sYXlvdXREaW1lbnNpb25zKFMpLF9lPXt9O19lLmlzTG9ja2VkPW1lLmxvY2tlZCgpLF9lLmlkPW1lLmRhdGEoImlkIiksX2UucGFyZW50SWQ9bWUuZGF0YSgicGFyZW50IiksX2UuY21wdElkPXFbbWUuaWQoKV0sX2UuY2hpbGRyZW49W10sX2UucG9zaXRpb25YPW1lLnBvc2l0aW9uKCJ4IiksX2UucG9zaXRpb25ZPW1lLnBvc2l0aW9uKCJ5IiksX2Uub2Zmc2V0WD0wLF9lLm9mZnNldFk9MCxfZS5oZWlnaHQ9TGUudyxfZS53aWR0aD1MZS5oLF9lLm1heFg9X2UucG9zaXRpb25YK19lLndpZHRoLzIsX2UubWluWD1fZS5wb3NpdGlvblgtX2Uud2lkdGgvMixfZS5tYXhZPV9lLnBvc2l0aW9uWStfZS5oZWlnaHQvMixfZS5taW5ZPV9lLnBvc2l0aW9uWS1fZS5oZWlnaHQvMixfZS5wYWRMZWZ0PXBhcnNlRmxvYXQobWUuc3R5bGUoInBhZGRpbmciKSksX2UucGFkUmlnaHQ9cGFyc2VGbG9hdChtZS5zdHlsZSgicGFkZGluZyIpKSxfZS5wYWRUb3A9cGFyc2VGbG9hdChtZS5zdHlsZSgicGFkZGluZyIpKSxfZS5wYWRCb3R0b209cGFyc2VGbG9hdChtZS5zdHlsZSgicGFkZGluZyIpKSxfZS5ub2RlUmVwdWxzaW9uPWFlKFMubm9kZVJlcHVsc2lvbik/Uy5ub2RlUmVwdWxzaW9uKG1lKTpTLm5vZGVSZXB1bHNpb24sJC5sYXlvdXROb2Rlcy5wdXNoKF9lKSwkLmlkVG9JbmRleFtfZS5pZF09WX1mb3IodmFyIEVlPVtdLEJlPTAsUmU9LTEsVmU9W10sWT0wO1k8JC5ub2RlU2l6ZTtZKyspe3ZhciBtZT0kLmxheW91dE5vZGVzW1ldLGN0PW1lLnBhcmVudElkO2N0IT1udWxsPyQubGF5b3V0Tm9kZXNbJC5pZFRvSW5kZXhbY3RdXS5jaGlsZHJlbi5wdXNoKG1lLmlkKTooRWVbKytSZV09bWUuaWQsVmUucHVzaChtZS5pZCkpfWZvcigkLmdyYXBoU2V0LnB1c2goVmUpO0JlPD1SZTspe3ZhciBzdD1FZVtCZSsrXSxZZT0kLmlkVG9JbmRleFtzdF0sdmU9JC5sYXlvdXROb2Rlc1tZZV0sbXQ9dmUuY2hpbGRyZW47aWYobXQubGVuZ3RoPjApeyQuZ3JhcGhTZXQucHVzaChtdCk7Zm9yKHZhciBZPTA7WTxtdC5sZW5ndGg7WSsrKUVlWysrUmVdPW10W1ldfX1mb3IodmFyIFk9MDtZPCQuZ3JhcGhTZXQubGVuZ3RoO1krKylmb3IodmFyIEplPSQuZ3JhcGhTZXRbWV0sY2U9MDtjZTxKZS5sZW5ndGg7Y2UrKyl7dmFyIEx0PSQuaWRUb0luZGV4W0plW2NlXV07JC5pbmRleFRvR3JhcGhbTHRdPVl9Zm9yKHZhciBZPTA7WTwkLmVkZ2VTaXplO1krKyl7dmFyIE10PU1bWV0sdXQ9e307dXQuaWQ9TXQuZGF0YSgiaWQiKSx1dC5zb3VyY2VJZD1NdC5kYXRhKCJzb3VyY2UiKSx1dC50YXJnZXRJZD1NdC5kYXRhKCJ0YXJnZXQiKTt2YXIgV3Q9YWUoUy5pZGVhbEVkZ2VMZW5ndGgpP1MuaWRlYWxFZGdlTGVuZ3RoKE10KTpTLmlkZWFsRWRnZUxlbmd0aCxUdD1hZShTLmVkZ2VFbGFzdGljaXR5KT9TLmVkZ2VFbGFzdGljaXR5KE10KTpTLmVkZ2VFbGFzdGljaXR5LF9uPSQuaWRUb0luZGV4W3V0LnNvdXJjZUlkXSxobj0kLmlkVG9JbmRleFt1dC50YXJnZXRJZF0sWXQ9JC5pbmRleFRvR3JhcGhbX25dLERuPSQuaW5kZXhUb0dyYXBoW2huXTtpZihZdCE9RG4pe2Zvcih2YXIgaXI9RXJlKHV0LnNvdXJjZUlkLHV0LnRhcmdldElkLCQpLHZyPSQuZ3JhcGhTZXRbaXJdLE5uPTAsX2U9JC5sYXlvdXROb2Rlc1tfbl07dnIuaW5kZXhPZihfZS5pZCk9PT0tMTspX2U9JC5sYXlvdXROb2Rlc1skLmlkVG9JbmRleFtfZS5wYXJlbnRJZF1dLE5uKys7Zm9yKF9lPSQubGF5b3V0Tm9kZXNbaG5dO3ZyLmluZGV4T2YoX2UuaWQpPT09LTE7KV9lPSQubGF5b3V0Tm9kZXNbJC5pZFRvSW5kZXhbX2UucGFyZW50SWRdXSxObisrO1d0Kj1ObipTLm5lc3RpbmdGYWN0b3J9dXQuaWRlYWxMZW5ndGg9V3QsdXQuZWxhc3RpY2l0eT1UdCwkLmxheW91dEVkZ2VzLnB1c2godXQpfXJldHVybiAkfSxFcmU9ZnVuY3Rpb24obSxrLFMpe3ZhciBNPVRyZShtLGssMCxTKTtyZXR1cm4gMj5NLmNvdW50PzA6TS5ncmFwaH0sVHJlPWZ1bmN0aW9uIHgobSxrLFMsTSl7dmFyIE89TS5ncmFwaFNldFtTXTtpZigtMTxPLmluZGV4T2YobSkmJi0xPE8uaW5kZXhPZihrKSlyZXR1cm57Y291bnQ6MixncmFwaDpTfTtmb3IodmFyIE49MCwkPTA7JDxPLmxlbmd0aDskKyspe3ZhciBIPU9bJF0scT1NLmlkVG9JbmRleFtIXSxZPU0ubGF5b3V0Tm9kZXNbcV0uY2hpbGRyZW47aWYoWS5sZW5ndGghPT0wKXt2YXIgWj1NLmluZGV4VG9HcmFwaFtNLmlkVG9JbmRleFtZWzBdXV0sY2U9eChtLGssWixNKTtpZihjZS5jb3VudCE9PTApaWYoY2UuY291bnQ9PT0xKXtpZihOKyssTj09PTIpYnJlYWt9ZWxzZSByZXR1cm4gY2V9fXJldHVybntjb3VudDpOLGdyYXBoOlN9fSxDcmUsU3JlPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPW0uY2xpZW50V2lkdGgsTT1tLmNsaWVudEhlaWdodCxPPTA7TzxtLm5vZGVTaXplO08rKyl7dmFyIE49bS5sYXlvdXROb2Rlc1tPXTtOLmNoaWxkcmVuLmxlbmd0aD09PTAmJiFOLmlzTG9ja2VkJiYoTi5wb3NpdGlvblg9TWF0aC5yYW5kb20oKSpTLE4ucG9zaXRpb25ZPU1hdGgucmFuZG9tKCkqTSl9fSxxJD1mdW5jdGlvbihtLGssUyl7dmFyIE09bS5ib3VuZGluZ0JveCxPPXt4MToxLzAseDI6LTEvMCx5MToxLzAseTI6LTEvMH07cmV0dXJuIGsuYm91bmRpbmdCb3gmJihTLmZvckVhY2goZnVuY3Rpb24oTil7dmFyICQ9bS5sYXlvdXROb2Rlc1ttLmlkVG9JbmRleFtOLmRhdGEoImlkIildXTtPLngxPU1hdGgubWluKE8ueDEsJC5wb3NpdGlvblgpLE8ueDI9TWF0aC5tYXgoTy54MiwkLnBvc2l0aW9uWCksTy55MT1NYXRoLm1pbihPLnkxLCQucG9zaXRpb25ZKSxPLnkyPU1hdGgubWF4KE8ueTIsJC5wb3NpdGlvblkpfSksTy53PU8ueDItTy54MSxPLmg9Ty55Mi1PLnkxKSxmdW5jdGlvbihOLCQpe3ZhciBIPW0ubGF5b3V0Tm9kZXNbbS5pZFRvSW5kZXhbTi5kYXRhKCJpZCIpXV07aWYoay5ib3VuZGluZ0JveCl7dmFyIHE9KEgucG9zaXRpb25YLU8ueDEpL08udyxZPShILnBvc2l0aW9uWS1PLnkxKS9PLmg7cmV0dXJue3g6TS54MStxKk0udyx5Ok0ueTErWSpNLmh9fWVsc2UgcmV0dXJue3g6SC5wb3NpdGlvblgseTpILnBvc2l0aW9uWX19fSxfcmU9ZnVuY3Rpb24obSxrLFMpe3ZhciBNPVMubGF5b3V0LE89Uy5lbGVzLm5vZGVzKCksTj1xJChtLFMsTyk7Ty5wb3NpdGlvbnMoTiksbS5yZWFkeSE9PSEwJiYobS5yZWFkeT0hMCxNLm9uZSgibGF5b3V0cmVhZHkiLFMucmVhZHkpLE0uZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDp0aGlzfSkpfSxBcmU9ZnVuY3Rpb24obSxrLFMpe0xyZShtLGspLElyZShtKSxPcmUobSxrKSxOcmUobSksUHJlKG0pfSxMcmU9ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPG0uZ3JhcGhTZXQubGVuZ3RoO1MrKylmb3IodmFyIE09bS5ncmFwaFNldFtTXSxPPU0ubGVuZ3RoLE49MDtOPE87TisrKWZvcih2YXIgJD1tLmxheW91dE5vZGVzW20uaWRUb0luZGV4W01bTl1dXSxIPU4rMTtIPE87SCsrKXt2YXIgcT1tLmxheW91dE5vZGVzW20uaWRUb0luZGV4W01bSF1dXTtNcmUoJCxxLG0sayl9fSxIJD1mdW5jdGlvbihtKXtyZXR1cm4tbSsyKm0qTWF0aC5yYW5kb20oKX0sTXJlPWZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPW0uY21wdElkLE49ay5jbXB0SWQ7aWYoIShPIT09TiYmIVMuaXNDb21wb3VuZCkpe3ZhciAkPWsucG9zaXRpb25YLW0ucG9zaXRpb25YLEg9ay5wb3NpdGlvblktbS5wb3NpdGlvblkscT0xOyQ9PT0wJiZIPT09MCYmKCQ9SCQocSksSD1IJChxKSk7dmFyIFk9RHJlKG0saywkLEgpO2lmKFk+MCl2YXIgWj1NLm5vZGVPdmVybGFwKlksY2U9TWF0aC5zcXJ0KCQqJCtIKkgpLHZlPVoqJC9jZSxtZT1aKkgvY2U7ZWxzZSB2YXIgTGU9VlMobSwkLEgpLF9lPVZTKGssLTEqJCwtMSpIKSxFZT1fZS54LUxlLngsQmU9X2UueS1MZS55LFJlPUVlKkVlK0JlKkJlLGNlPU1hdGguc3FydChSZSksWj0obS5ub2RlUmVwdWxzaW9uK2subm9kZVJlcHVsc2lvbikvUmUsdmU9WipFZS9jZSxtZT1aKkJlL2NlO20uaXNMb2NrZWR8fChtLm9mZnNldFgtPXZlLG0ub2Zmc2V0WS09bWUpLGsuaXNMb2NrZWR8fChrLm9mZnNldFgrPXZlLGsub2Zmc2V0WSs9bWUpfX0sRHJlPWZ1bmN0aW9uKG0sayxTLE0pe2lmKFM+MCl2YXIgTz1tLm1heFgtay5taW5YO2Vsc2UgdmFyIE89ay5tYXhYLW0ubWluWDtpZihNPjApdmFyIE49bS5tYXhZLWsubWluWTtlbHNlIHZhciBOPWsubWF4WS1tLm1pblk7cmV0dXJuIE8+PTAmJk4+PTA/TWF0aC5zcXJ0KE8qTytOKk4pOjB9LFZTPWZ1bmN0aW9uKG0sayxTKXt2YXIgTT1tLnBvc2l0aW9uWCxPPW0ucG9zaXRpb25ZLE49bS5oZWlnaHR8fDEsJD1tLndpZHRofHwxLEg9Uy9rLHE9Ti8kLFk9e307cmV0dXJuIGs9PT0wJiYwPFN8fGs9PT0wJiYwPlM/KFkueD1NLFkueT1PK04vMixZKTowPGsmJi0xKnE8PUgmJkg8PXE/KFkueD1NKyQvMixZLnk9TyskKlMvMi9rLFkpOjA+ayYmLTEqcTw9SCYmSDw9cT8oWS54PU0tJC8yLFkueT1PLSQqUy8yL2ssWSk6MDxTJiYoSDw9LTEqcXx8SD49cSk/KFkueD1NK04qay8yL1MsWS55PU8rTi8yLFkpOigwPlMmJihIPD0tMSpxfHxIPj1xKSYmKFkueD1NLU4qay8yL1MsWS55PU8tTi8yKSxZKX0sSXJlPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPTA7UzxtLmVkZ2VTaXplO1MrKyl7dmFyIE09bS5sYXlvdXRFZGdlc1tTXSxPPW0uaWRUb0luZGV4W00uc291cmNlSWRdLE49bS5sYXlvdXROb2Rlc1tPXSwkPW0uaWRUb0luZGV4W00udGFyZ2V0SWRdLEg9bS5sYXlvdXROb2Rlc1skXSxxPUgucG9zaXRpb25YLU4ucG9zaXRpb25YLFk9SC5wb3NpdGlvblktTi5wb3NpdGlvblk7aWYoIShxPT09MCYmWT09PTApKXt2YXIgWj1WUyhOLHEsWSksY2U9VlMoSCwtMSpxLC0xKlkpLHZlPWNlLngtWi54LG1lPWNlLnktWi55LExlPU1hdGguc3FydCh2ZSp2ZSttZSptZSksX2U9TWF0aC5wb3coTS5pZGVhbExlbmd0aC1MZSwyKS9NLmVsYXN0aWNpdHk7aWYoTGUhPT0wKXZhciBFZT1fZSp2ZS9MZSxCZT1fZSptZS9MZTtlbHNlIHZhciBFZT0wLEJlPTA7Ti5pc0xvY2tlZHx8KE4ub2Zmc2V0WCs9RWUsTi5vZmZzZXRZKz1CZSksSC5pc0xvY2tlZHx8KEgub2Zmc2V0WC09RWUsSC5vZmZzZXRZLT1CZSl9fX0sT3JlPWZ1bmN0aW9uKG0sayl7aWYoay5ncmF2aXR5IT09MClmb3IodmFyIFM9MSxNPTA7TTxtLmdyYXBoU2V0Lmxlbmd0aDtNKyspe3ZhciBPPW0uZ3JhcGhTZXRbTV0sTj1PLmxlbmd0aDtpZihNPT09MCl2YXIgJD1tLmNsaWVudEhlaWdodC8yLEg9bS5jbGllbnRXaWR0aC8yO2Vsc2UgdmFyIHE9bS5sYXlvdXROb2Rlc1ttLmlkVG9JbmRleFtPWzBdXV0sWT1tLmxheW91dE5vZGVzW20uaWRUb0luZGV4W3EucGFyZW50SWRdXSwkPVkucG9zaXRpb25YLEg9WS5wb3NpdGlvblk7Zm9yKHZhciBaPTA7WjxOO1orKyl7dmFyIGNlPW0ubGF5b3V0Tm9kZXNbbS5pZFRvSW5kZXhbT1taXV1dO2lmKCFjZS5pc0xvY2tlZCl7dmFyIHZlPSQtY2UucG9zaXRpb25YLG1lPUgtY2UucG9zaXRpb25ZLExlPU1hdGguc3FydCh2ZSp2ZSttZSptZSk7aWYoTGU+Uyl7dmFyIF9lPWsuZ3Jhdml0eSp2ZS9MZSxFZT1rLmdyYXZpdHkqbWUvTGU7Y2Uub2Zmc2V0WCs9X2UsY2Uub2Zmc2V0WSs9RWV9fX19fSxOcmU9ZnVuY3Rpb24obSxrKXt2YXIgUz1bXSxNPTAsTz0tMTtmb3IoUy5wdXNoLmFwcGx5KFMsbS5ncmFwaFNldFswXSksTys9bS5ncmFwaFNldFswXS5sZW5ndGg7TTw9Tzspe3ZhciBOPVNbTSsrXSwkPW0uaWRUb0luZGV4W05dLEg9bS5sYXlvdXROb2Rlc1skXSxxPUguY2hpbGRyZW47aWYoMDxxLmxlbmd0aCYmIUguaXNMb2NrZWQpe2Zvcih2YXIgWT1ILm9mZnNldFgsWj1ILm9mZnNldFksY2U9MDtjZTxxLmxlbmd0aDtjZSsrKXt2YXIgdmU9bS5sYXlvdXROb2Rlc1ttLmlkVG9JbmRleFtxW2NlXV1dO3ZlLm9mZnNldFgrPVksdmUub2Zmc2V0WSs9WixTWysrT109cVtjZV19SC5vZmZzZXRYPTAsSC5vZmZzZXRZPTB9fX0sUHJlPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPTA7UzxtLm5vZGVTaXplO1MrKyl7dmFyIE09bS5sYXlvdXROb2Rlc1tTXTswPE0uY2hpbGRyZW4ubGVuZ3RoJiYoTS5tYXhYPXZvaWQgMCxNLm1pblg9dm9pZCAwLE0ubWF4WT12b2lkIDAsTS5taW5ZPXZvaWQgMCl9Zm9yKHZhciBTPTA7UzxtLm5vZGVTaXplO1MrKyl7dmFyIE09bS5sYXlvdXROb2Rlc1tTXTtpZighKDA8TS5jaGlsZHJlbi5sZW5ndGh8fE0uaXNMb2NrZWQpKXt2YXIgTz1CcmUoTS5vZmZzZXRYLE0ub2Zmc2V0WSxtLnRlbXBlcmF0dXJlKTtNLnBvc2l0aW9uWCs9Ty54LE0ucG9zaXRpb25ZKz1PLnksTS5vZmZzZXRYPTAsTS5vZmZzZXRZPTAsTS5taW5YPU0ucG9zaXRpb25YLU0ud2lkdGgsTS5tYXhYPU0ucG9zaXRpb25YK00ud2lkdGgsTS5taW5ZPU0ucG9zaXRpb25ZLU0uaGVpZ2h0LE0ubWF4WT1NLnBvc2l0aW9uWStNLmhlaWdodCxGcmUoTSxtKX19Zm9yKHZhciBTPTA7UzxtLm5vZGVTaXplO1MrKyl7dmFyIE09bS5sYXlvdXROb2Rlc1tTXTswPE0uY2hpbGRyZW4ubGVuZ3RoJiYhTS5pc0xvY2tlZCYmKE0ucG9zaXRpb25YPShNLm1heFgrTS5taW5YKS8yLE0ucG9zaXRpb25ZPShNLm1heFkrTS5taW5ZKS8yLE0ud2lkdGg9TS5tYXhYLU0ubWluWCxNLmhlaWdodD1NLm1heFktTS5taW5ZKX19LEJyZT1mdW5jdGlvbihtLGssUyl7dmFyIE09TWF0aC5zcXJ0KG0qbStrKmspO2lmKE0+Uyl2YXIgTz17eDpTKm0vTSx5OlMqay9NfTtlbHNlIHZhciBPPXt4Om0seTprfTtyZXR1cm4gT30sRnJlPWZ1bmN0aW9uIHgobSxrKXt2YXIgUz1tLnBhcmVudElkO2lmKFMhPW51bGwpe3ZhciBNPWsubGF5b3V0Tm9kZXNbay5pZFRvSW5kZXhbU11dLE89ITE7aWYoKE0ubWF4WD09bnVsbHx8bS5tYXhYK00ucGFkUmlnaHQ+TS5tYXhYKSYmKE0ubWF4WD1tLm1heFgrTS5wYWRSaWdodCxPPSEwKSwoTS5taW5YPT1udWxsfHxtLm1pblgtTS5wYWRMZWZ0PE0ubWluWCkmJihNLm1pblg9bS5taW5YLU0ucGFkTGVmdCxPPSEwKSwoTS5tYXhZPT1udWxsfHxtLm1heFkrTS5wYWRCb3R0b20+TS5tYXhZKSYmKE0ubWF4WT1tLm1heFkrTS5wYWRCb3R0b20sTz0hMCksKE0ubWluWT09bnVsbHx8bS5taW5ZLU0ucGFkVG9wPE0ubWluWSkmJihNLm1pblk9bS5taW5ZLU0ucGFkVG9wLE89ITApLE8pcmV0dXJuIHgoTSxrKX19LFYkPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPW0ubGF5b3V0Tm9kZXMsTT1bXSxPPTA7TzxTLmxlbmd0aDtPKyspe3ZhciBOPVNbT10sJD1OLmNtcHRJZCxIPU1bJF09TVskXXx8W107SC5wdXNoKE4pfWZvcih2YXIgcT0wLE89MDtPPE0ubGVuZ3RoO08rKyl7dmFyIFk9TVtPXTtpZihZKXtZLngxPTEvMCxZLngyPS0xLzAsWS55MT0xLzAsWS55Mj0tMS8wO2Zvcih2YXIgWj0wO1o8WS5sZW5ndGg7WisrKXt2YXIgY2U9WVtaXTtZLngxPU1hdGgubWluKFkueDEsY2UucG9zaXRpb25YLWNlLndpZHRoLzIpLFkueDI9TWF0aC5tYXgoWS54MixjZS5wb3NpdGlvblgrY2Uud2lkdGgvMiksWS55MT1NYXRoLm1pbihZLnkxLGNlLnBvc2l0aW9uWS1jZS5oZWlnaHQvMiksWS55Mj1NYXRoLm1heChZLnkyLGNlLnBvc2l0aW9uWStjZS5oZWlnaHQvMil9WS53PVkueDItWS54MSxZLmg9WS55Mi1ZLnkxLHErPVkudypZLmh9fU0uc29ydChmdW5jdGlvbihCZSxSZSl7cmV0dXJuIFJlLncqUmUuaC1CZS53KkJlLmh9KTtmb3IodmFyIHZlPTAsbWU9MCxMZT0wLF9lPTAsRWU9TWF0aC5zcXJ0KHEpKm0uY2xpZW50V2lkdGgvbS5jbGllbnRIZWlnaHQsTz0wO088TS5sZW5ndGg7TysrKXt2YXIgWT1NW09dO2lmKFkpe2Zvcih2YXIgWj0wO1o8WS5sZW5ndGg7WisrKXt2YXIgY2U9WVtaXTtjZS5pc0xvY2tlZHx8KGNlLnBvc2l0aW9uWCs9dmUtWS54MSxjZS5wb3NpdGlvblkrPW1lLVkueTEpfXZlKz1ZLncray5jb21wb25lbnRTcGFjaW5nLExlKz1ZLncray5jb21wb25lbnRTcGFjaW5nLF9lPU1hdGgubWF4KF9lLFkuaCksTGU+RWUmJihtZSs9X2Uray5jb21wb25lbnRTcGFjaW5nLHZlPTAsTGU9MCxfZT0wKX19fSxScmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsYXZvaWRPdmVybGFwUGFkZGluZzoxMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uZGVuc2U6ITEscm93czp2b2lkIDAsY29sczp2b2lkIDAscG9zaXRpb246ZnVuY3Rpb24obSl7fSxzb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24obSxrKXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihtLGspe3JldHVybiBrfX07ZnVuY3Rpb24gVSQoeCl7dGhpcy5vcHRpb25zPXl0KHt9LFJyZSx4KX1VJC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5vcHRpb25zLG09eCxrPXguY3ksUz1tLmVsZXMsTT1TLm5vZGVzKCkubm90KCI6cGFyZW50Iik7bS5zb3J0JiYoTT1NLnNvcnQobS5zb3J0KSk7dmFyIE89V2QobS5ib3VuZGluZ0JveD9tLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzprLndpZHRoKCksaDprLmhlaWdodCgpfSk7aWYoTy5oPT09MHx8Ty53PT09MClTLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsbSxmdW5jdGlvbihFcil7cmV0dXJue3g6Ty54MSx5Ok8ueTF9fSk7ZWxzZXt2YXIgTj1NLnNpemUoKSwkPU1hdGguc3FydChOKk8uaC9PLncpLEg9TWF0aC5yb3VuZCgkKSxxPU1hdGgucm91bmQoTy53L08uaCokKSxZPWZ1bmN0aW9uKE1yKXtpZihNcj09bnVsbClyZXR1cm4gTWF0aC5taW4oSCxxKTt2YXIgQ3I9TWF0aC5taW4oSCxxKTtDcj09SD9IPU1yOnE9TXJ9LFo9ZnVuY3Rpb24oTXIpe2lmKE1yPT1udWxsKXJldHVybiBNYXRoLm1heChILHEpO3ZhciBDcj1NYXRoLm1heChILHEpO0NyPT1IP0g9TXI6cT1Ncn0sY2U9bS5yb3dzLHZlPW0uY29scyE9bnVsbD9tLmNvbHM6bS5jb2x1bW5zO2lmKGNlIT1udWxsJiZ2ZSE9bnVsbClIPWNlLHE9dmU7ZWxzZSBpZihjZSE9bnVsbCYmdmU9PW51bGwpSD1jZSxxPU1hdGguY2VpbChOL0gpO2Vsc2UgaWYoY2U9PW51bGwmJnZlIT1udWxsKXE9dmUsSD1NYXRoLmNlaWwoTi9xKTtlbHNlIGlmKHEqSD5OKXt2YXIgbWU9WSgpLExlPVooKTsobWUtMSkqTGU+PU4/WShtZS0xKTooTGUtMSkqbWU+PU4mJlooTGUtMSl9ZWxzZSBmb3IoO3EqSDxOOyl7dmFyIF9lPVkoKSxFZT1aKCk7KEVlKzEpKl9lPj1OP1ooRWUrMSk6WShfZSsxKX12YXIgQmU9Ty53L3EsUmU9Ty5oL0g7aWYobS5jb25kZW5zZSYmKEJlPTAsUmU9MCksbS5hdm9pZE92ZXJsYXApZm9yKHZhciBWZT0wO1ZlPE0ubGVuZ3RoO1ZlKyspe3ZhciBjdD1NW1ZlXSxzdD1jdC5fcHJpdmF0ZS5wb3NpdGlvbjsoc3QueD09bnVsbHx8c3QueT09bnVsbCkmJihzdC54PTAsc3QueT0wKTt2YXIgWWU9Y3QubGF5b3V0RGltZW5zaW9ucyhtKSxtdD1tLmF2b2lkT3ZlcmxhcFBhZGRpbmcsSmU9WWUudyttdCxMdD1ZZS5oK210O0JlPU1hdGgubWF4KEJlLEplKSxSZT1NYXRoLm1heChSZSxMdCl9Zm9yKHZhciBNdD17fSx1dD1mdW5jdGlvbihNcixDcil7cmV0dXJuISFNdFsiYy0iK01yKyItIitDcl19LFd0PWZ1bmN0aW9uKE1yLENyKXtNdFsiYy0iK01yKyItIitDcl09ITB9LFR0PTAsX249MCxobj1mdW5jdGlvbigpe19uKyssX24+PXEmJihfbj0wLFR0KyspfSxZdD17fSxEbj0wO0RuPE0ubGVuZ3RoO0RuKyspe3ZhciBpcj1NW0RuXSx2cj1tLnBvc2l0aW9uKGlyKTtpZih2ciYmKHZyLnJvdyE9PXZvaWQgMHx8dnIuY29sIT09dm9pZCAwKSl7dmFyIE5uPXtyb3c6dnIucm93LGNvbDp2ci5jb2x9O2lmKE5uLmNvbD09PXZvaWQgMClmb3IoTm4uY29sPTA7dXQoTm4ucm93LE5uLmNvbCk7KU5uLmNvbCsrO2Vsc2UgaWYoTm4ucm93PT09dm9pZCAwKWZvcihObi5yb3c9MDt1dChObi5yb3csTm4uY29sKTspTm4ucm93Kys7WXRbaXIuaWQoKV09Tm4sV3QoTm4ucm93LE5uLmNvbCl9fXZhciBwcj1mdW5jdGlvbihNcixDcil7dmFyIE9yLFduO2lmKE1yLmxvY2tlZCgpfHxNci5pc1BhcmVudCgpKXJldHVybiExO3ZhciBicj1ZdFtNci5pZCgpXTtpZihicilPcj1ici5jb2wqQmUrQmUvMitPLngxLFduPWJyLnJvdypSZStSZS8yK08ueTE7ZWxzZXtmb3IoO3V0KFR0LF9uKTspaG4oKTtPcj1fbipCZStCZS8yK08ueDEsV249VHQqUmUrUmUvMitPLnkxLFd0KFR0LF9uKSxobigpfXJldHVybnt4Ok9yLHk6V259fTtNLmxheW91dFBvc2l0aW9ucyh0aGlzLG0scHIpfXJldHVybiB0aGlzfTt2YXIganJlPXtyZWFkeTpmdW5jdGlvbigpe30sc3RvcDpmdW5jdGlvbigpe319O2Z1bmN0aW9uIFBJKHgpe3RoaXMub3B0aW9ucz15dCh7fSxqcmUseCl9UEkucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB4PXRoaXMub3B0aW9ucyxtPXguZWxlcyxrPXRoaXM7cmV0dXJuIHguY3ksay5lbWl0KCJsYXlvdXRzdGFydCIpLG0ubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MH19KSxrLm9uZSgibGF5b3V0cmVhZHkiLHgucmVhZHkpLGsuZW1pdCgibGF5b3V0cmVhZHkiKSxrLm9uZSgibGF5b3V0c3RvcCIseC5zdG9wKSxrLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxQSS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgJHJlPXtwb3NpdGlvbnM6dm9pZCAwLHpvb206dm9pZCAwLHBhbjp2b2lkIDAsZml0OiEwLHBhZGRpbmc6MzAsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKG0sayl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24obSxrKXtyZXR1cm4ga319O2Z1bmN0aW9uIEckKHgpe3RoaXMub3B0aW9ucz15dCh7fSwkcmUseCl9RyQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB4PXRoaXMub3B0aW9ucyxtPXguZWxlcyxrPW0ubm9kZXMoKSxTPWFlKHgucG9zaXRpb25zKTtmdW5jdGlvbiBNKE8pe2lmKHgucG9zaXRpb25zPT1udWxsKXJldHVybiBzWihPLnBvc2l0aW9uKCkpO2lmKFMpcmV0dXJuIHgucG9zaXRpb25zKE8pO3ZhciBOPXgucG9zaXRpb25zW08uX3ByaXZhdGUuZGF0YS5pZF07cmV0dXJuIE4/P251bGx9cmV0dXJuIGsubGF5b3V0UG9zaXRpb25zKHRoaXMseCxmdW5jdGlvbihPLE4pe3ZhciAkPU0oTyk7cmV0dXJuIE8ubG9ja2VkKCl8fCQ9PW51bGw/ITE6JH0pLHRoaXN9O3ZhciB6cmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24obSxrKXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihtLGspe3JldHVybiBrfX07ZnVuY3Rpb24gSyQoeCl7dGhpcy5vcHRpb25zPXl0KHt9LHpyZSx4KX1LJC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5vcHRpb25zLG09eC5jeSxrPXguZWxlcyxTPVdkKHguYm91bmRpbmdCb3g/eC5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6bS53aWR0aCgpLGg6bS5oZWlnaHQoKX0pLE09ZnVuY3Rpb24oTiwkKXtyZXR1cm57eDpTLngxK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSpTLncpLHk6Uy55MStNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqUy5oKX19O3JldHVybiBrLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMseCxNKSx0aGlzfTt2YXIgcXJlPVt7bmFtZToiYnJlYWR0aGZpcnN0IixpbXBsOmokfSx7bmFtZToiY2lyY2xlIixpbXBsOiQkfSx7bmFtZToiY29uY2VudHJpYyIsaW1wbDp6JH0se25hbWU6ImNvc2UiLGltcGw6SFN9LHtuYW1lOiJncmlkIixpbXBsOlUkfSx7bmFtZToibnVsbCIsaW1wbDpQSX0se25hbWU6InByZXNldCIsaW1wbDpHJH0se25hbWU6InJhbmRvbSIsaW1wbDpLJH1dO2Z1bmN0aW9uIFckKHgpe3RoaXMub3B0aW9ucz14LHRoaXMubm90aWZpY2F0aW9ucz0wfXZhciBZJD1mdW5jdGlvbigpe30sWCQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkEgaGVhZGxlc3MgaW5zdGFuY2UgY2FuIG5vdCByZW5kZXIgaW1hZ2VzIil9O1ckLnByb3RvdHlwZT17cmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlOlkkLG5vdGlmeTpmdW5jdGlvbigpe3RoaXMubm90aWZpY2F0aW9ucysrfSxpbml0OlkkLGlzSGVhZGxlc3M6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scG5nOlgkLGpwZzpYJH07dmFyIEJJPXt9O0JJLmFycm93U2hhcGVXaWR0aD0uMyxCSS5yZWdpc3RlckFycm93U2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5hcnJvd1NoYXBlcz17fSxtPXRoaXMsaz1mdW5jdGlvbihxLFksWixjZSx2ZSxtZSxMZSl7dmFyIF9lPXZlLngtWi8yLUxlLEVlPXZlLngrWi8yK0xlLEJlPXZlLnktWi8yLUxlLFJlPXZlLnkrWi8yK0xlLFZlPV9lPD1xJiZxPD1FZSYmQmU8PVkmJlk8PVJlO3JldHVybiBWZX0sUz1mdW5jdGlvbihxLFksWixjZSx2ZSl7dmFyIG1lPXEqTWF0aC5jb3MoY2UpLVkqTWF0aC5zaW4oY2UpLExlPXEqTWF0aC5zaW4oY2UpK1kqTWF0aC5jb3MoY2UpLF9lPW1lKlosRWU9TGUqWixCZT1fZSt2ZS54LFJlPUVlK3ZlLnk7cmV0dXJue3g6QmUseTpSZX19LE09ZnVuY3Rpb24ocSxZLFosY2Upe2Zvcih2YXIgdmU9W10sbWU9MDttZTxxLmxlbmd0aDttZSs9Mil7dmFyIExlPXFbbWVdLF9lPXFbbWUrMV07dmUucHVzaChTKExlLF9lLFksWixjZSkpfXJldHVybiB2ZX0sTz1mdW5jdGlvbihxKXtmb3IodmFyIFk9W10sWj0wO1o8cS5sZW5ndGg7WisrKXt2YXIgY2U9cVtaXTtZLnB1c2goY2UueCxjZS55KX1yZXR1cm4gWX0sTj1mdW5jdGlvbihxKXtyZXR1cm4gcS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSpxLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS5wZlZhbHVlKjJ9LCQ9ZnVuY3Rpb24ocSxZKXtiZShZKSYmKFk9eFtZXSkseFtxXT15dCh7bmFtZTpxLHBvaW50czpbLS4xNSwtLjMsLjE1LC0uMywuMTUsLjMsLS4xNSwuM10sY29sbGlkZTpmdW5jdGlvbihjZSx2ZSxtZSxMZSxfZSxFZSl7dmFyIEJlPU8oTSh0aGlzLnBvaW50cyxtZSsyKkVlLExlLF9lKSksUmU9WWQoY2UsdmUsQmUpO3JldHVybiBSZX0scm91Z2hDb2xsaWRlOmssZHJhdzpmdW5jdGlvbihjZSx2ZSxtZSxMZSl7dmFyIF9lPU0odGhpcy5wb2ludHMsdmUsbWUsTGUpO20uYXJyb3dTaGFwZUltcGwoInBvbHlnb24iKShjZSxfZSl9LHNwYWNpbmc6ZnVuY3Rpb24oY2Upe3JldHVybiAwfSxnYXA6Tn0sWSl9OyQoIm5vbmUiLHtjb2xsaWRlOlgzLHJvdWdoQ29sbGlkZTpYMyxkcmF3Om5JLHNwYWNpbmc6RnAsZ2FwOkZwfSksJCgidHJpYW5nbGUiLHtwb2ludHM6Wy0uMTUsLS4zLDAsMCwuMTUsLS4zXX0pLCQoImFycm93IiwidHJpYW5nbGUiKSwkKCJ0cmlhbmdsZS1iYWNrY3VydmUiLHtwb2ludHM6eC50cmlhbmdsZS5wb2ludHMsY29udHJvbFBvaW50OlswLC0uMTVdLHJvdWdoQ29sbGlkZTprLGRyYXc6ZnVuY3Rpb24ocSxZLFosY2UsdmUpe3ZhciBtZT1NKHRoaXMucG9pbnRzLFksWixjZSksTGU9dGhpcy5jb250cm9sUG9pbnQsX2U9UyhMZVswXSxMZVsxXSxZLFosY2UpO20uYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShxLG1lLF9lKX0sZ2FwOmZ1bmN0aW9uKHEpe3JldHVybiBOKHEpKi44fX0pLCQoInRyaWFuZ2xlLXRlZSIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxwb2ludHNUZWU6Wy0uMTUsLS40LC0uMTUsLS41LC4xNSwtLjUsLjE1LC0uNF0sY29sbGlkZTpmdW5jdGlvbihxLFksWixjZSx2ZSxtZSxMZSl7dmFyIF9lPU8oTSh0aGlzLnBvaW50cyxaKzIqTGUsY2UsdmUpKSxFZT1PKE0odGhpcy5wb2ludHNUZWUsWisyKkxlLGNlLHZlKSksQmU9WWQocSxZLF9lKXx8WWQocSxZLEVlKTtyZXR1cm4gQmV9LGRyYXc6ZnVuY3Rpb24ocSxZLFosY2UsdmUpe3ZhciBtZT1NKHRoaXMucG9pbnRzLFksWixjZSksTGU9TSh0aGlzLnBvaW50c1RlZSxZLFosY2UpO20uYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShxLG1lLExlKX19KSwkKCJjaXJjbGUtdHJpYW5nbGUiLHtyYWRpdXM6LjE1LHBvaW50c1RyOlswLC0uMTUsLjE1LC0uNDUsLS4xNSwtLjQ1LDAsLS4xNV0sY29sbGlkZTpmdW5jdGlvbihxLFksWixjZSx2ZSxtZSxMZSl7dmFyIF9lPXZlLEVlPU1hdGgucG93KF9lLngtcSwyKStNYXRoLnBvdyhfZS55LVksMik8PU1hdGgucG93KChaKzIqTGUpKnRoaXMucmFkaXVzLDIpLEJlPU8oTSh0aGlzLnBvaW50cyxaKzIqTGUsY2UsdmUpKTtyZXR1cm4gWWQocSxZLEJlKXx8RWV9LGRyYXc6ZnVuY3Rpb24ocSxZLFosY2UsdmUpe3ZhciBtZT1NKHRoaXMucG9pbnRzVHIsWSxaLGNlKTttLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkocSxtZSxjZS54LGNlLnksdGhpcy5yYWRpdXMqWSl9LHNwYWNpbmc6ZnVuY3Rpb24ocSl7cmV0dXJuIG0uZ2V0QXJyb3dXaWR0aChxLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLHEucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlKSp0aGlzLnJhZGl1c319KSwkKCJ0cmlhbmdsZS1jcm9zcyIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxiYXNlQ3Jvc3NMaW5lUHRzOlstLjE1LC0uNCwtLjE1LC0uNCwuMTUsLS40LC4xNSwtLjRdLGNyb3NzTGluZVB0czpmdW5jdGlvbihxLFkpe3ZhciBaPXRoaXMuYmFzZUNyb3NzTGluZVB0cy5zbGljZSgpLGNlPVkvcSx2ZT0zLG1lPTU7cmV0dXJuIFpbdmVdPVpbdmVdLWNlLFpbbWVdPVpbbWVdLWNlLFp9LGNvbGxpZGU6ZnVuY3Rpb24ocSxZLFosY2UsdmUsbWUsTGUpe3ZhciBfZT1PKE0odGhpcy5wb2ludHMsWisyKkxlLGNlLHZlKSksRWU9TyhNKHRoaXMuY3Jvc3NMaW5lUHRzKFosbWUpLForMipMZSxjZSx2ZSkpLEJlPVlkKHEsWSxfZSl8fFlkKHEsWSxFZSk7cmV0dXJuIEJlfSxkcmF3OmZ1bmN0aW9uKHEsWSxaLGNlLHZlKXt2YXIgbWU9TSh0aGlzLnBvaW50cyxZLFosY2UpLExlPU0odGhpcy5jcm9zc0xpbmVQdHMoWSx2ZSksWSxaLGNlKTttLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkocSxtZSxMZSl9fSksJCgidmVlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uMywwLC0uMTVdLGdhcDpmdW5jdGlvbihxKXtyZXR1cm4gTihxKSouNTI1fX0pLCQoImNpcmNsZSIse3JhZGl1czouMTUsY29sbGlkZTpmdW5jdGlvbihxLFksWixjZSx2ZSxtZSxMZSl7dmFyIF9lPXZlLEVlPU1hdGgucG93KF9lLngtcSwyKStNYXRoLnBvdyhfZS55LVksMik8PU1hdGgucG93KChaKzIqTGUpKnRoaXMucmFkaXVzLDIpO3JldHVybiBFZX0sZHJhdzpmdW5jdGlvbihxLFksWixjZSx2ZSl7bS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKHEsY2UueCxjZS55LHRoaXMucmFkaXVzKlkpfSxzcGFjaW5nOmZ1bmN0aW9uKHEpe3JldHVybiBtLmdldEFycm93V2lkdGgocS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxxLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5yYWRpdXN9fSksJCgidGVlIix7cG9pbnRzOlstLjE1LDAsLS4xNSwtLjEsLjE1LC0uMSwuMTUsMF0sc3BhY2luZzpmdW5jdGlvbihxKXtyZXR1cm4gMX0sZ2FwOmZ1bmN0aW9uKHEpe3JldHVybiAxfX0pLCQoInNxdWFyZSIse3BvaW50czpbLS4xNSwwLC4xNSwwLC4xNSwtLjMsLS4xNSwtLjNdfSksJCgiZGlhbW9uZCIse3BvaW50czpbLS4xNSwtLjE1LDAsLS4zLC4xNSwtLjE1LDAsMF0sZ2FwOmZ1bmN0aW9uKHEpe3JldHVybiBxLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKnEucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfX0pLCQoImNoZXZyb24iLHtwb2ludHM6WzAsMCwtLjE1LC0uMTUsLS4xLC0uMiwwLC0uMSwuMSwtLjIsLjE1LC0uMTVdLGdhcDpmdW5jdGlvbihxKXtyZXR1cm4gLjk1KnEucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqcS5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWV9fSl9O3ZhciB3NT17fTt3NS5wcm9qZWN0SW50b1ZpZXdwb3J0PWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcy5jeSxTPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLE09U1swXSxPPVNbMV0sTj1TWzRdLCQ9ay5wYW4oKSxIPWsuem9vbSgpLHE9KCh4LU0pL04tJC54KS9ILFk9KChtLU8pL04tJC55KS9IO3JldHVybltxLFldfSx3NS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXJCQilyZXR1cm4gdGhpcy5jb250YWluZXJCQjt2YXIgeD10aGlzLmNvbnRhaW5lcixtPXguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaz10aGlzLmN5LndpbmRvdygpLmdldENvbXB1dGVkU3R5bGUoeCksUz1mdW5jdGlvbihFZSl7cmV0dXJuIHBhcnNlRmxvYXQoay5nZXRQcm9wZXJ0eVZhbHVlKEVlKSl9LE09e2xlZnQ6UygicGFkZGluZy1sZWZ0IikscmlnaHQ6UygicGFkZGluZy1yaWdodCIpLHRvcDpTKCJwYWRkaW5nLXRvcCIpLGJvdHRvbTpTKCJwYWRkaW5nLWJvdHRvbSIpfSxPPXtsZWZ0OlMoImJvcmRlci1sZWZ0LXdpZHRoIikscmlnaHQ6UygiYm9yZGVyLXJpZ2h0LXdpZHRoIiksdG9wOlMoImJvcmRlci10b3Atd2lkdGgiKSxib3R0b206UygiYm9yZGVyLWJvdHRvbS13aWR0aCIpfSxOPXguY2xpZW50V2lkdGgsJD14LmNsaWVudEhlaWdodCxIPU0ubGVmdCtNLnJpZ2h0LHE9TS50b3ArTS5ib3R0b20sWT1PLmxlZnQrTy5yaWdodCxaPW0ud2lkdGgvKE4rWSksY2U9Ti1ILHZlPSQtcSxtZT1tLmxlZnQrTS5sZWZ0K08ubGVmdCxMZT1tLnRvcCtNLnRvcCtPLnRvcDtyZXR1cm4gdGhpcy5jb250YWluZXJCQj1bbWUsTGUsY2UsdmUsWl19LHc1LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZT1mdW5jdGlvbigpe3RoaXMuY29udGFpbmVyQkI9bnVsbH0sdzUuZmluZE5lYXJlc3RFbGVtZW50PWZ1bmN0aW9uKHgsbSxrLFMpe3JldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHMoeCxtLGssUylbMF19LHc1LmZpbmROZWFyZXN0RWxlbWVudHM9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcyxPPXRoaXMsTj1PLmdldENhY2hlZFpTb3J0ZWRFbGVzKCksJD1bXSxIPU8uY3kuem9vbSgpLHE9Ty5jeS5oYXNDb21wb3VuZE5vZGVzKCksWT0oUz8yNDo4KS9ILFo9KFM/ODoyKS9ILGNlPShTPzg6MikvSCx2ZT0xLzAsbWUsTGU7ayYmKE49Ti5pbnRlcmFjdGl2ZSk7ZnVuY3Rpb24gX2UoWWUsbXQpe2lmKFllLmlzTm9kZSgpKXtpZihMZSlyZXR1cm47TGU9WWUsJC5wdXNoKFllKX1pZihZZS5pc0VkZ2UoKSYmKG10PT1udWxsfHxtdDx2ZSkpaWYobWUpe2lmKG1lLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09WWUucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUmJm1lLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09WWUucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUpe2Zvcih2YXIgSmU9MDtKZTwkLmxlbmd0aDtKZSsrKWlmKCRbSmVdLmlzRWRnZSgpKXskW0plXT1ZZSxtZT1ZZSx2ZT1tdD8/dmU7YnJlYWt9fX1lbHNlICQucHVzaChZZSksbWU9WWUsdmU9bXQ/P3ZlfWZ1bmN0aW9uIEVlKFllKXt2YXIgbXQ9WWUub3V0ZXJXaWR0aCgpKzIqWixKZT1ZZS5vdXRlckhlaWdodCgpKzIqWixMdD1tdC8yLE10PUplLzIsdXQ9WWUucG9zaXRpb24oKTtpZih1dC54LUx0PD14JiZ4PD11dC54K0x0JiZ1dC55LU10PD1tJiZtPD11dC55K010KXt2YXIgV3Q9Ty5ub2RlU2hhcGVzW00uZ2V0Tm9kZVNoYXBlKFllKV07aWYoV3QuY2hlY2tQb2ludCh4LG0sMCxtdCxKZSx1dC54LHV0LnkpKXJldHVybiBfZShZZSwwKSwhMH19ZnVuY3Rpb24gQmUoWWUpe3ZhciBtdD1ZZS5fcHJpdmF0ZSxKZT1tdC5yc2NyYXRjaCxMdD1ZZS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxNdD1ZZS5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUsdXQ9THQvMitZLFd0PXV0KnV0LFR0PXV0KjIsRG49bXQuc291cmNlLGlyPW10LnRhcmdldCxfbjtpZihKZS5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fEplLmVkZ2VUeXBlPT09InN0cmFpZ2h0Inx8SmUuZWRnZVR5cGU9PT0iaGF5c3RhY2siKXtmb3IodmFyIGhuPUplLmFsbHB0cyxZdD0wO1l0KzM8aG4ubGVuZ3RoO1l0Kz0yKWlmKHZaKHgsbSxobltZdF0saG5bWXQrMV0saG5bWXQrMl0saG5bWXQrM10sVHQpJiZXdD4oX249RVooeCxtLGhuW1l0XSxobltZdCsxXSxobltZdCsyXSxobltZdCszXSkpKXJldHVybiBfZShZZSxfbiksITB9ZWxzZSBpZihKZS5lZGdlVHlwZT09PSJiZXppZXIifHxKZS5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fEplLmVkZ2VUeXBlPT09InNlbGYifHxKZS5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2Zvcih2YXIgaG49SmUuYWxscHRzLFl0PTA7WXQrNTxKZS5hbGxwdHMubGVuZ3RoO1l0Kz00KWlmKHdaKHgsbSxobltZdF0saG5bWXQrMV0saG5bWXQrMl0saG5bWXQrM10saG5bWXQrNF0saG5bWXQrNV0sVHQpJiZXdD4oX249a1ooeCxtLGhuW1l0XSxobltZdCsxXSxobltZdCsyXSxobltZdCszXSxobltZdCs0XSxobltZdCs1XSkpKXJldHVybiBfZShZZSxfbiksITB9Zm9yKHZhciBEbj1Ebnx8bXQuc291cmNlLGlyPWlyfHxtdC50YXJnZXQsdnI9TS5nZXRBcnJvd1dpZHRoKEx0LE10KSxObj1be25hbWU6InNvdXJjZSIseDpKZS5hcnJvd1N0YXJ0WCx5OkplLmFycm93U3RhcnRZLGFuZ2xlOkplLnNyY0Fycm93QW5nbGV9LHtuYW1lOiJ0YXJnZXQiLHg6SmUuYXJyb3dFbmRYLHk6SmUuYXJyb3dFbmRZLGFuZ2xlOkplLnRndEFycm93QW5nbGV9LHtuYW1lOiJtaWQtc291cmNlIix4OkplLm1pZFgseTpKZS5taWRZLGFuZ2xlOkplLm1pZHNyY0Fycm93QW5nbGV9LHtuYW1lOiJtaWQtdGFyZ2V0Iix4OkplLm1pZFgseTpKZS5taWRZLGFuZ2xlOkplLm1pZHRndEFycm93QW5nbGV9XSxZdD0wO1l0PE5uLmxlbmd0aDtZdCsrKXt2YXIgcHI9Tm5bWXRdLEVyPU8uYXJyb3dTaGFwZXNbWWUucHN0eWxlKHByLm5hbWUrIi1hcnJvdy1zaGFwZSIpLnZhbHVlXSxNcj1ZZS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZTtpZihFci5yb3VnaENvbGxpZGUoeCxtLHZyLHByLmFuZ2xlLHt4OnByLngseTpwci55fSxNcixZKSYmRXIuY29sbGlkZSh4LG0sdnIscHIuYW5nbGUse3g6cHIueCx5OnByLnl9LE1yLFkpKXJldHVybiBfZShZZSksITB9cSYmJC5sZW5ndGg+MCYmKEVlKERuKSxFZShpcikpfWZ1bmN0aW9uIFJlKFllLG10LEplKXtyZXR1cm4gSzIoWWUsbXQsSmUpfWZ1bmN0aW9uIFZlKFllLG10KXt2YXIgSmU9WWUuX3ByaXZhdGUsTHQ9Y2UsTXQ7bXQ/TXQ9bXQrIi0iOk10PSIiLFllLmJvdW5kaW5nQm94KCk7dmFyIHV0PUplLmxhYmVsQm91bmRzW210fHwibWFpbiJdLFd0PVllLnBzdHlsZShNdCsibGFiZWwiKS52YWx1ZSxUdD1ZZS5wc3R5bGUoInRleHQtZXZlbnRzIikuc3RyVmFsdWU9PT0ieWVzIjtpZighKCFUdHx8IVd0KSl7dmFyIF9uPVJlKEplLnJzY3JhdGNoLCJsYWJlbFgiLG10KSxobj1SZShKZS5yc2NyYXRjaCwibGFiZWxZIixtdCksWXQ9UmUoSmUucnNjcmF0Y2gsImxhYmVsQW5nbGUiLG10KSxEbj1ZZS5wc3R5bGUoTXQrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLGlyPVllLnBzdHlsZShNdCsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsdnI9dXQueDEtTHQtRG4sTm49dXQueDIrTHQtRG4scHI9dXQueTEtTHQtaXIsRXI9dXQueTIrTHQtaXI7aWYoWXQpe3ZhciBNcj1NYXRoLmNvcyhZdCksQ3I9TWF0aC5zaW4oWXQpLE9yPWZ1bmN0aW9uKHBhLE1pKXtyZXR1cm4gcGE9cGEtX24sTWk9TWktaG4se3g6cGEqTXItTWkqQ3IrX24seTpwYSpDcitNaSpNcitobn19LFduPU9yKHZyLHByKSxicj1Pcih2cixFciksU3I9T3IoTm4scHIpLE5yPU9yKE5uLEVyKSxTaT1bV24ueCtEbixXbi55K2lyLFNyLngrRG4sU3IueStpcixOci54K0RuLE5yLnkraXIsYnIueCtEbixici55K2lyXTtpZihZZCh4LG0sU2kpKXJldHVybiBfZShZZSksITB9ZWxzZSBpZihlOCh1dCx4LG0pKXJldHVybiBfZShZZSksITB9fWZvcih2YXIgY3Q9Ti5sZW5ndGgtMTtjdD49MDtjdC0tKXt2YXIgc3Q9TltjdF07c3QuaXNOb2RlKCk/RWUoc3QpfHxWZShzdCk6QmUoc3QpfHxWZShzdCl8fFZlKHN0LCJzb3VyY2UiKXx8VmUoc3QsInRhcmdldCIpfXJldHVybiAkfSx3NS5nZXRBbGxJbkJveD1mdW5jdGlvbih4LG0sayxTKXt2YXIgTT10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuaW50ZXJhY3RpdmUsTz1bXSxOPU1hdGgubWluKHgsayksJD1NYXRoLm1heCh4LGspLEg9TWF0aC5taW4obSxTKSxxPU1hdGgubWF4KG0sUyk7eD1OLGs9JCxtPUgsUz1xO2Zvcih2YXIgWT1XZCh7eDE6eCx5MTptLHgyOmsseTI6U30pLFo9MDtaPE0ubGVuZ3RoO1orKyl7dmFyIGNlPU1bWl07aWYoY2UuaXNOb2RlKCkpe3ZhciB2ZT1jZSxtZT12ZS5ib3VuZGluZ0JveCh7aW5jbHVkZU5vZGVzOiEwLGluY2x1ZGVFZGdlczohMSxpbmNsdWRlTGFiZWxzOiExfSk7c0koWSxtZSkmJiFwaihtZSxZKSYmTy5wdXNoKHZlKX1lbHNle3ZhciBMZT1jZSxfZT1MZS5fcHJpdmF0ZSxFZT1fZS5yc2NyYXRjaDtpZihFZS5zdGFydFghPW51bGwmJkVlLnN0YXJ0WSE9bnVsbCYmIWU4KFksRWUuc3RhcnRYLEVlLnN0YXJ0WSl8fEVlLmVuZFghPW51bGwmJkVlLmVuZFkhPW51bGwmJiFlOChZLEVlLmVuZFgsRWUuZW5kWSkpY29udGludWU7aWYoRWUuZWRnZVR5cGU9PT0iYmV6aWVyInx8RWUuZWRnZVR5cGU9PT0ibXVsdGliZXppZXIifHxFZS5lZGdlVHlwZT09PSJzZWxmInx8RWUuZWRnZVR5cGU9PT0iY29tcG91bmQifHxFZS5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fEVlLmVkZ2VUeXBlPT09ImhheXN0YWNrIil7Zm9yKHZhciBCZT1fZS5yc3R5bGUuYmV6aWVyUHRzfHxfZS5yc3R5bGUubGluZVB0c3x8X2UucnN0eWxlLmhheXN0YWNrUHRzLFJlPSEwLFZlPTA7VmU8QmUubGVuZ3RoO1ZlKyspaWYoIW1aKFksQmVbVmVdKSl7UmU9ITE7YnJlYWt9UmUmJk8ucHVzaChMZSl9ZWxzZShFZS5lZGdlVHlwZT09PSJoYXlzdGFjayJ8fEVlLmVkZ2VUeXBlPT09InN0cmFpZ2h0IikmJk8ucHVzaChMZSl9fXJldHVybiBPfTt2YXIgVVM9e307VVMuY2FsY3VsYXRlQXJyb3dBbmdsZXM9ZnVuY3Rpb24oeCl7dmFyIG09eC5fcHJpdmF0ZS5yc2NyYXRjaCxrPW0uZWRnZVR5cGU9PT0iaGF5c3RhY2siLFM9bS5lZGdlVHlwZT09PSJiZXppZXIiLE09bS5lZGdlVHlwZT09PSJtdWx0aWJlemllciIsTz1tLmVkZ2VUeXBlPT09InNlZ21lbnRzIixOPW0uZWRnZVR5cGU9PT0iY29tcG91bmQiLCQ9bS5lZGdlVHlwZT09PSJzZWxmIixILHEsWSxaLGNlLHZlLEVlLEJlO2lmKGs/KFk9bS5oYXlzdGFja1B0c1swXSxaPW0uaGF5c3RhY2tQdHNbMV0sY2U9bS5oYXlzdGFja1B0c1syXSx2ZT1tLmhheXN0YWNrUHRzWzNdKTooWT1tLmFycm93U3RhcnRYLFo9bS5hcnJvd1N0YXJ0WSxjZT1tLmFycm93RW5kWCx2ZT1tLmFycm93RW5kWSksRWU9bS5taWRYLEJlPW0ubWlkWSxPKUg9WS1tLnNlZ3B0c1swXSxxPVotbS5zZWdwdHNbMV07ZWxzZSBpZihNfHxOfHwkfHxTKXt2YXIgbWU9bS5hbGxwdHMsTGU9dDAobWVbMF0sbWVbMl0sbWVbNF0sLjEpLF9lPXQwKG1lWzFdLG1lWzNdLG1lWzVdLC4xKTtIPVktTGUscT1aLV9lfWVsc2UgSD1ZLUVlLHE9Wi1CZTttLnNyY0Fycm93QW5nbGU9aFMoSCxxKTt2YXIgRWU9bS5taWRYLEJlPW0ubWlkWTtpZihrJiYoRWU9KFkrY2UpLzIsQmU9KFordmUpLzIpLEg9Y2UtWSxxPXZlLVosTyl7dmFyIG1lPW0uYWxscHRzO2lmKG1lLmxlbmd0aC8yJTI9PT0wKXt2YXIgUmU9bWUubGVuZ3RoLzIsVmU9UmUtMjtIPW1lW1JlXS1tZVtWZV0scT1tZVtSZSsxXS1tZVtWZSsxXX1lbHNle3ZhciBSZT1tZS5sZW5ndGgvMi0xLFZlPVJlLTIsY3Q9UmUrMjtIPW1lW1JlXS1tZVtWZV0scT1tZVtSZSsxXS1tZVtWZSsxXX19ZWxzZSBpZihNfHxOfHwkKXt2YXIgbWU9bS5hbGxwdHMsc3Q9bS5jdHJscHRzLFllLG10LEplLEx0O2lmKHN0Lmxlbmd0aC8yJTI9PT0wKXt2YXIgTXQ9bWUubGVuZ3RoLzItMSx1dD1NdCsyLFd0PXV0KzI7WWU9dDAobWVbTXRdLG1lW3V0XSxtZVtXdF0sMCksbXQ9dDAobWVbTXQrMV0sbWVbdXQrMV0sbWVbV3QrMV0sMCksSmU9dDAobWVbTXRdLG1lW3V0XSxtZVtXdF0sMWUtNCksTHQ9dDAobWVbTXQrMV0sbWVbdXQrMV0sbWVbV3QrMV0sMWUtNCl9ZWxzZXt2YXIgdXQ9bWUubGVuZ3RoLzItMSxNdD11dC0yLFd0PXV0KzI7WWU9dDAobWVbTXRdLG1lW3V0XSxtZVtXdF0sLjQ5OTkpLG10PXQwKG1lW010KzFdLG1lW3V0KzFdLG1lW1d0KzFdLC40OTk5KSxKZT10MChtZVtNdF0sbWVbdXRdLG1lW1d0XSwuNSksTHQ9dDAobWVbTXQrMV0sbWVbdXQrMV0sbWVbV3QrMV0sLjUpfUg9SmUtWWUscT1MdC1tdH1pZihtLm1pZHRndEFycm93QW5nbGU9aFMoSCxxKSxtLm1pZERpc3BYPUgsbS5taWREaXNwWT1xLEgqPS0xLHEqPS0xLE8pe3ZhciBtZT1tLmFsbHB0cztpZihtZS5sZW5ndGgvMiUyIT09MCl7dmFyIFJlPW1lLmxlbmd0aC8yLTEsY3Q9UmUrMjtIPS0obWVbY3RdLW1lW1JlXSkscT0tKG1lW2N0KzFdLW1lW1JlKzFdKX19aWYobS5taWRzcmNBcnJvd0FuZ2xlPWhTKEgscSksTylIPWNlLW0uc2VncHRzW20uc2VncHRzLmxlbmd0aC0yXSxxPXZlLW0uc2VncHRzW20uc2VncHRzLmxlbmd0aC0xXTtlbHNlIGlmKE18fE58fCR8fFMpe3ZhciBtZT1tLmFsbHB0cyxUdD1tZS5sZW5ndGgsTGU9dDAobWVbVHQtNl0sbWVbVHQtNF0sbWVbVHQtMl0sLjkpLF9lPXQwKG1lW1R0LTVdLG1lW1R0LTNdLG1lW1R0LTFdLC45KTtIPWNlLUxlLHE9dmUtX2V9ZWxzZSBIPWNlLUVlLHE9dmUtQmU7bS50Z3RBcnJvd0FuZ2xlPWhTKEgscSl9LFVTLmdldEFycm93V2lkdGg9VVMuZ2V0QXJyb3dIZWlnaHQ9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLmFycm93V2lkdGhDYWNoZT10aGlzLmFycm93V2lkdGhDYWNoZXx8e30sUz1rW3grIiwgIittXTtyZXR1cm4gU3x8KFM9TWF0aC5tYXgoTWF0aC5wb3coeCoxMy4zNywuOSksMjkpKm0sa1t4KyIsICIrbV09UyxTKX07dmFyIFMxPXt9O1MxLmZpbmRNaWRwdFB0c0V0Yz1mdW5jdGlvbih4LG0pe3ZhciBrPW0ucG9zUHRzLFM9bS5pbnRlcnNlY3Rpb25QdHMsTT1tLnZlY3Rvck5vcm1JbnZlcnNlLE8sTj14LnBzdHlsZSgic291cmNlLWVuZHBvaW50IiksJD14LnBzdHlsZSgidGFyZ2V0LWVuZHBvaW50IiksSD1OLnVuaXRzIT1udWxsJiYkLnVuaXRzIT1udWxsLHE9ZnVuY3Rpb24oY3Qsc3QsWWUsbXQpe3ZhciBKZT1tdC1zdCxMdD1ZZS1jdCxNdD1NYXRoLnNxcnQoTHQqTHQrSmUqSmUpO3JldHVybnt4Oi1KZS9NdCx5Okx0L010fX0sWT14LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZTtzd2l0Y2goWSl7Y2FzZSJub2RlLXBvc2l0aW9uIjpPPWs7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOk89UzticmVhaztjYXNlImVuZHBvaW50cyI6e2lmKEgpe3ZhciBaPXRoaXMubWFudWFsRW5kcHRUb1B4KHguc291cmNlKClbMF0sTiksY2U9eShaLDIpLHZlPWNlWzBdLG1lPWNlWzFdLExlPXRoaXMubWFudWFsRW5kcHRUb1B4KHgudGFyZ2V0KClbMF0sJCksX2U9eShMZSwyKSxFZT1fZVswXSxCZT1fZVsxXSxSZT17eDE6dmUseTE6bWUseDI6RWUseTI6QmV9O009cSh2ZSxtZSxFZSxCZSksTz1SZX1lbHNlIGh1KCJFZGdlICIuY29uY2F0KHguaWQoKSwiIGhhcyBlZGdlLWRpc3RhbmNlczplbmRwb2ludHMgc3BlY2lmaWVkIHdpdGhvdXQgbWFudWFsIGVuZHBvaW50cyBzcGVjaWZpZWQgdmlhIHNvdXJjZS1lbmRwb2ludCBhbmQgdGFyZ2V0LWVuZHBvaW50LiAgRmFsbGluZyBiYWNrIG9uIGVkZ2UtZGlzdGFuY2VzOmludGVyc2VjdGlvbiAoZGVmYXVsdCkuIikpLE89UzticmVha319cmV0dXJue21pZHB0UHRzOk8sdmVjdG9yTm9ybUludmVyc2U6TX19LFMxLmZpbmRIYXlzdGFja1BvaW50cz1mdW5jdGlvbih4KXtmb3IodmFyIG09MDttPHgubGVuZ3RoO20rKyl7dmFyIGs9eFttXSxTPWsuX3ByaXZhdGUsTT1TLnJzY3JhdGNoO2lmKCFNLmhheXN0YWNrKXt2YXIgTz1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSTtNLnNvdXJjZT17eDpNYXRoLmNvcyhPKSx5Ok1hdGguc2luKE8pfSxPPU1hdGgucmFuZG9tKCkqMipNYXRoLlBJLE0udGFyZ2V0PXt4Ok1hdGguY29zKE8pLHk6TWF0aC5zaW4oTyl9fXZhciBOPVMuc291cmNlLCQ9Uy50YXJnZXQsSD1OLnBvc2l0aW9uKCkscT0kLnBvc2l0aW9uKCksWT1OLndpZHRoKCksWj0kLndpZHRoKCksY2U9Ti5oZWlnaHQoKSx2ZT0kLmhlaWdodCgpLG1lPWsucHN0eWxlKCJoYXlzdGFjay1yYWRpdXMiKS52YWx1ZSxMZT1tZS8yO00uaGF5c3RhY2tQdHM9TS5hbGxwdHM9W00uc291cmNlLngqWSpMZStILngsTS5zb3VyY2UueSpjZSpMZStILnksTS50YXJnZXQueCpaKkxlK3EueCxNLnRhcmdldC55KnZlKkxlK3EueV0sTS5taWRYPShNLmFsbHB0c1swXStNLmFsbHB0c1syXSkvMixNLm1pZFk9KE0uYWxscHRzWzFdK00uYWxscHRzWzNdKS8yLE0uZWRnZVR5cGU9ImhheXN0YWNrIixNLmhheXN0YWNrPSEwLHRoaXMuc3RvcmVFZGdlUHJvamVjdGlvbnMoayksdGhpcy5jYWxjdWxhdGVBcnJvd0FuZ2xlcyhrKSx0aGlzLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoayksdGhpcy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyhrKX19LFMxLmZpbmRTZWdtZW50c1BvaW50cz1mdW5jdGlvbih4LG0pe3ZhciBrPXguX3ByaXZhdGUucnNjcmF0Y2gsUz14LnBzdHlsZSgic2VnbWVudC13ZWlnaHRzIiksTT14LnBzdHlsZSgic2VnbWVudC1kaXN0YW5jZXMiKSxPPU1hdGgubWluKFMucGZWYWx1ZS5sZW5ndGgsTS5wZlZhbHVlLmxlbmd0aCk7ay5lZGdlVHlwZT0ic2VnbWVudHMiLGsuc2VncHRzPVtdO2Zvcih2YXIgTj0wO048TztOKyspe3ZhciAkPVMucGZWYWx1ZVtOXSxIPU0ucGZWYWx1ZVtOXSxxPTEtJCxZPSQsWj10aGlzLmZpbmRNaWRwdFB0c0V0Yyh4LG0pLGNlPVoubWlkcHRQdHMsdmU9Wi52ZWN0b3JOb3JtSW52ZXJzZSxtZT17eDpjZS54MSpxK2NlLngyKlkseTpjZS55MSpxK2NlLnkyKll9O2suc2VncHRzLnB1c2gobWUueCt2ZS54KkgsbWUueSt2ZS55KkgpfX0sUzEuZmluZExvb3BQb2ludHM9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09eC5fcHJpdmF0ZS5yc2NyYXRjaCxPPW0uZGlyQ291bnRzLE49bS5zcmNQb3MsJD14LnBzdHlsZSgiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiKSxIPSQ/JC5wZlZhbHVlWzBdOnZvaWQgMCxxPXgucHN0eWxlKCJsb29wLWRpcmVjdGlvbiIpLnBmVmFsdWUsWT14LnBzdHlsZSgibG9vcC1zd2VlcCIpLnBmVmFsdWUsWj14LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlO00uZWRnZVR5cGU9InNlbGYiO3ZhciBjZT1rLHZlPVo7UyYmKGNlPTAsdmU9SCk7dmFyIG1lPXEtTWF0aC5QSS8yLExlPW1lLVkvMixfZT1tZStZLzIsRWU9cSsiXyIrWTtjZT1PW0VlXT09PXZvaWQgMD9PW0VlXT0wOisrT1tFZV0sTS5jdHJscHRzPVtOLngrTWF0aC5jb3MoTGUpKjEuNCp2ZSooY2UvMysxKSxOLnkrTWF0aC5zaW4oTGUpKjEuNCp2ZSooY2UvMysxKSxOLngrTWF0aC5jb3MoX2UpKjEuNCp2ZSooY2UvMysxKSxOLnkrTWF0aC5zaW4oX2UpKjEuNCp2ZSooY2UvMysxKV19LFMxLmZpbmRDb21wb3VuZExvb3BQb2ludHM9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09eC5fcHJpdmF0ZS5yc2NyYXRjaDtNLmVkZ2VUeXBlPSJjb21wb3VuZCI7dmFyIE89bS5zcmNQb3MsTj1tLnRndFBvcywkPW0uc3JjVyxIPW0uc3JjSCxxPW0udGd0VyxZPW0udGd0SCxaPXgucHN0eWxlKCJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSIpLnBmVmFsdWUsY2U9eC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksdmU9Y2U/Y2UucGZWYWx1ZVswXTp2b2lkIDAsbWU9ayxMZT1aO1MmJihtZT0wLExlPXZlKTt2YXIgX2U9NTAsRWU9e3g6Ty54LSQvMix5Ok8ueS1ILzJ9LEJlPXt4Ok4ueC1xLzIseTpOLnktWS8yfSxSZT17eDpNYXRoLm1pbihFZS54LEJlLngpLHk6TWF0aC5taW4oRWUueSxCZS55KX0sVmU9LjUsY3Q9TWF0aC5tYXgoVmUsTWF0aC5sb2coJCouMDEpKSxzdD1NYXRoLm1heChWZSxNYXRoLmxvZyhxKi4wMSkpO00uY3RybHB0cz1bUmUueCxSZS55LSgxK01hdGgucG93KF9lLDEuMTIpLzEwMCkqTGUqKG1lLzMrMSkqY3QsUmUueC0oMStNYXRoLnBvdyhfZSwxLjEyKS8xMDApKkxlKihtZS8zKzEpKnN0LFJlLnldfSxTMS5maW5kU3RyYWlnaHRFZGdlUG9pbnRzPWZ1bmN0aW9uKHgpe3guX3ByaXZhdGUucnNjcmF0Y2guZWRnZVR5cGU9InN0cmFpZ2h0In0sUzEuZmluZEJlemllclBvaW50cz1mdW5jdGlvbih4LG0sayxTLE0pe3ZhciBPPXguX3ByaXZhdGUucnNjcmF0Y2gsTj14LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlLCQ9eC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksSD14LnBzdHlsZSgiY29udHJvbC1wb2ludC13ZWlnaHRzIikscT0kJiZIP01hdGgubWluKCQudmFsdWUubGVuZ3RoLEgudmFsdWUubGVuZ3RoKToxLFk9JD8kLnBmVmFsdWVbMF06dm9pZCAwLFo9SC52YWx1ZVswXSxjZT1TO08uZWRnZVR5cGU9Y2U/Im11bHRpYmV6aWVyIjoiYmV6aWVyIixPLmN0cmxwdHM9W107Zm9yKHZhciB2ZT0wO3ZlPHE7dmUrKyl7dmFyIG1lPSguNS1tLmVsZXMubGVuZ3RoLzIraykqTiooTT8tMToxKSxMZT12b2lkIDAsX2U9ZmoobWUpO2NlJiYoWT0kPyQucGZWYWx1ZVt2ZV06TixaPUgudmFsdWVbdmVdKSxTP0xlPVk6TGU9WSE9PXZvaWQgMD9fZSpZOnZvaWQgMDt2YXIgRWU9TGUhPT12b2lkIDA/TGU6bWUsQmU9MS1aLFJlPVosVmU9dGhpcy5maW5kTWlkcHRQdHNFdGMoeCxtKSxjdD1WZS5taWRwdFB0cyxzdD1WZS52ZWN0b3JOb3JtSW52ZXJzZSxZZT17eDpjdC54MSpCZStjdC54MipSZSx5OmN0LnkxKkJlK2N0LnkyKlJlfTtPLmN0cmxwdHMucHVzaChZZS54K3N0LngqRWUsWWUueStzdC55KkVlKX19LFMxLmZpbmRUYXhpUG9pbnRzPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC5fcHJpdmF0ZS5yc2NyYXRjaDtrLmVkZ2VUeXBlPSJzZWdtZW50cyI7dmFyIFM9InZlcnRpY2FsIixNPSJob3Jpem9udGFsIixPPSJsZWZ0d2FyZCIsTj0icmlnaHR3YXJkIiwkPSJkb3dud2FyZCIsSD0idXB3YXJkIixxPSJhdXRvIixZPW0ucG9zUHRzLFo9bS5zcmNXLGNlPW0uc3JjSCx2ZT1tLnRndFcsbWU9bS50Z3RILExlPXgucHN0eWxlKCJlZGdlLWRpc3RhbmNlcyIpLnZhbHVlLF9lPUxlIT09Im5vZGUtcG9zaXRpb24iLEVlPXgucHN0eWxlKCJ0YXhpLWRpcmVjdGlvbiIpLnZhbHVlLEJlPUVlLFJlPXgucHN0eWxlKCJ0YXhpLXR1cm4iKSxWZT1SZS51bml0cz09PSIlIixjdD1SZS5wZlZhbHVlLHN0PWN0PDAsWWU9eC5wc3R5bGUoInRheGktdHVybi1taW4tZGlzdGFuY2UiKS5wZlZhbHVlLG10PV9lPyhaK3ZlKS8yOjAsSmU9X2U/KGNlK21lKS8yOjAsTHQ9WS54Mi1ZLngxLE10PVkueTItWS55MSx1dD1mdW5jdGlvbih3cixFcyl7cmV0dXJuIHdyPjA/TWF0aC5tYXgod3ItRXMsMCk6TWF0aC5taW4od3IrRXMsMCl9LFd0PXV0KEx0LG10KSxUdD11dChNdCxKZSksX249ITE7QmU9PT1xP0VlPU1hdGguYWJzKFd0KT5NYXRoLmFicyhUdCk/TTpTOkJlPT09SHx8QmU9PT0kPyhFZT1TLF9uPSEwKTooQmU9PT1PfHxCZT09PU4pJiYoRWU9TSxfbj0hMCk7dmFyIGhuPUVlPT09UyxZdD1obj9UdDpXdCxEbj1obj9NdDpMdCxpcj1maihEbiksdnI9ITE7IShfbiYmKFZlfHxzdCkpJiYoQmU9PT0kJiZEbjwwfHxCZT09PUgmJkRuPjB8fEJlPT09TyYmRG4+MHx8QmU9PT1OJiZEbjwwKSYmKGlyKj0tMSxZdD1pcipNYXRoLmFicyhZdCksdnI9ITApO3ZhciBObjtpZihWZSl7dmFyIHByPWN0PDA/MStjdDpjdDtObj1wcipZdH1lbHNle3ZhciBFcj1jdDwwP1l0OjA7Tm49RXIrY3QqaXJ9dmFyIE1yPWZ1bmN0aW9uKHdyKXtyZXR1cm4gTWF0aC5hYnMod3IpPFllfHxNYXRoLmFicyh3cik+PU1hdGguYWJzKFl0KX0sQ3I9TXIoTm4pLE9yPU1yKE1hdGguYWJzKFl0KS1NYXRoLmFicyhObikpLFduPUNyfHxPcjtpZihXbiYmIXZyKWlmKGhuKXt2YXIgYnI9TWF0aC5hYnMoRG4pPD1jZS8yLFNyPU1hdGguYWJzKEx0KTw9dmUvMjtpZihicil7dmFyIE5yPShZLngxK1kueDIpLzIsU2k9WS55MSx5cz1ZLnkyO2suc2VncHRzPVtOcixTaSxOcix5c119ZWxzZSBpZihTcil7dmFyIHBhPShZLnkxK1kueTIpLzIsTWk9WS54MSxnaT1ZLngyO2suc2VncHRzPVtNaSxwYSxnaSxwYV19ZWxzZSBrLnNlZ3B0cz1bWS54MSxZLnkyXX1lbHNle3ZhciBmcz1NYXRoLmFicyhEbik8PVovMixGcz1NYXRoLmFicyhNdCk8PW1lLzI7aWYoZnMpe3ZhciB4cz0oWS55MStZLnkyKS8yLFJzPVkueDEseW89WS54MjtrLnNlZ3B0cz1bUnMseHMseW8seHNdfWVsc2UgaWYoRnMpe3ZhciAkYT0oWS54MStZLngyKS8yLERhPVkueTEsQm89WS55MjtrLnNlZ3B0cz1bJGEsRGEsJGEsQm9dfWVsc2Ugay5zZWdwdHM9W1kueDIsWS55MV19ZWxzZSBpZihobil7dmFyIHRyPVkueTErTm4rKF9lP2NlLzIqaXI6MCksRz1ZLngxLEpuPVkueDI7ay5zZWdwdHM9W0csdHIsSm4sdHJdfWVsc2V7dmFyIGtyPVkueDErTm4rKF9lP1ovMippcjowKSxscj1ZLnkxLFZ0PVkueTI7ay5zZWdwdHM9W2tyLGxyLGtyLFZ0XX19LFMxLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHM9ZnVuY3Rpb24oeCxtKXt2YXIgaz14Ll9wcml2YXRlLnJzY3JhdGNoO2lmKGsuZWRnZVR5cGU9PT0iYmV6aWVyIil7dmFyIFM9bS5zcmNQb3MsTT1tLnRndFBvcyxPPW0uc3JjVyxOPW0uc3JjSCwkPW0udGd0VyxIPW0udGd0SCxxPW0uc3JjU2hhcGUsWT1tLnRndFNoYXBlLFo9IVgoay5zdGFydFgpfHwhWChrLnN0YXJ0WSksY2U9IVgoay5hcnJvd1N0YXJ0WCl8fCFYKGsuYXJyb3dTdGFydFkpLHZlPSFYKGsuZW5kWCl8fCFYKGsuZW5kWSksbWU9IVgoay5hcnJvd0VuZFgpfHwhWChrLmFycm93RW5kWSksTGU9MyxfZT10aGlzLmdldEFycm93V2lkdGgoeC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSx4LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5hcnJvd1NoYXBlV2lkdGgsRWU9TGUqX2UsQmU9aDUoe3g6ay5jdHJscHRzWzBdLHk6ay5jdHJscHRzWzFdfSx7eDprLnN0YXJ0WCx5Omsuc3RhcnRZfSksUmU9QmU8RWUsVmU9aDUoe3g6ay5jdHJscHRzWzBdLHk6ay5jdHJscHRzWzFdfSx7eDprLmVuZFgseTprLmVuZFl9KSxjdD1WZTxFZSxzdD0hMTtpZihafHxjZXx8UmUpe3N0PSEwO3ZhciBZZT17eDprLmN0cmxwdHNbMF0tUy54LHk6ay5jdHJscHRzWzFdLVMueX0sbXQ9TWF0aC5zcXJ0KFllLngqWWUueCtZZS55KlllLnkpLEplPXt4OlllLngvbXQseTpZZS55L210fSxMdD1NYXRoLm1heChPLE4pLE10PXt4OmsuY3RybHB0c1swXStKZS54KjIqTHQseTprLmN0cmxwdHNbMV0rSmUueSoyKkx0fSx1dD1xLmludGVyc2VjdExpbmUoUy54LFMueSxPLE4sTXQueCxNdC55LDApO1JlPyhrLmN0cmxwdHNbMF09ay5jdHJscHRzWzBdK0plLngqKEVlLUJlKSxrLmN0cmxwdHNbMV09ay5jdHJscHRzWzFdK0plLnkqKEVlLUJlKSk6KGsuY3RybHB0c1swXT11dFswXStKZS54KkVlLGsuY3RybHB0c1sxXT11dFsxXStKZS55KkVlKX1pZih2ZXx8bWV8fGN0KXtzdD0hMDt2YXIgV3Q9e3g6ay5jdHJscHRzWzBdLU0ueCx5OmsuY3RybHB0c1sxXS1NLnl9LFR0PU1hdGguc3FydChXdC54Kld0LngrV3QueSpXdC55KSxfbj17eDpXdC54L1R0LHk6V3QueS9UdH0saG49TWF0aC5tYXgoTyxOKSxZdD17eDprLmN0cmxwdHNbMF0rX24ueCoyKmhuLHk6ay5jdHJscHRzWzFdK19uLnkqMipobn0sRG49WS5pbnRlcnNlY3RMaW5lKE0ueCxNLnksJCxILFl0LngsWXQueSwwKTtjdD8oay5jdHJscHRzWzBdPWsuY3RybHB0c1swXStfbi54KihFZS1WZSksay5jdHJscHRzWzFdPWsuY3RybHB0c1sxXStfbi55KihFZS1WZSkpOihrLmN0cmxwdHNbMF09RG5bMF0rX24ueCpFZSxrLmN0cmxwdHNbMV09RG5bMV0rX24ueSpFZSl9c3QmJnRoaXMuZmluZEVuZHBvaW50cyh4KX19LFMxLnN0b3JlQWxscHRzPWZ1bmN0aW9uKHgpe3ZhciBtPXguX3ByaXZhdGUucnNjcmF0Y2g7aWYobS5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fG0uZWRnZVR5cGU9PT0iYmV6aWVyInx8bS5lZGdlVHlwZT09PSJzZWxmInx8bS5lZGdlVHlwZT09PSJjb21wb3VuZCIpe20uYWxscHRzPVtdLG0uYWxscHRzLnB1c2gobS5zdGFydFgsbS5zdGFydFkpO2Zvcih2YXIgaz0wO2srMTxtLmN0cmxwdHMubGVuZ3RoO2srPTIpbS5hbGxwdHMucHVzaChtLmN0cmxwdHNba10sbS5jdHJscHRzW2srMV0pLGsrMzxtLmN0cmxwdHMubGVuZ3RoJiZtLmFsbHB0cy5wdXNoKChtLmN0cmxwdHNba10rbS5jdHJscHRzW2srMl0pLzIsKG0uY3RybHB0c1trKzFdK20uY3RybHB0c1trKzNdKS8yKTttLmFsbHB0cy5wdXNoKG0uZW5kWCxtLmVuZFkpO3ZhciBTLE07bS5jdHJscHRzLmxlbmd0aC8yJTI9PT0wPyhTPW0uYWxscHRzLmxlbmd0aC8yLTEsbS5taWRYPW0uYWxscHRzW1NdLG0ubWlkWT1tLmFsbHB0c1tTKzFdKTooUz1tLmFsbHB0cy5sZW5ndGgvMi0zLE09LjUsbS5taWRYPXQwKG0uYWxscHRzW1NdLG0uYWxscHRzW1MrMl0sbS5hbGxwdHNbUys0XSxNKSxtLm1pZFk9dDAobS5hbGxwdHNbUysxXSxtLmFsbHB0c1tTKzNdLG0uYWxscHRzW1MrNV0sTSkpfWVsc2UgaWYobS5lZGdlVHlwZT09PSJzdHJhaWdodCIpbS5hbGxwdHM9W20uc3RhcnRYLG0uc3RhcnRZLG0uZW5kWCxtLmVuZFldLG0ubWlkWD0obS5zdGFydFgrbS5lbmRYK20uYXJyb3dTdGFydFgrbS5hcnJvd0VuZFgpLzQsbS5taWRZPShtLnN0YXJ0WSttLmVuZFkrbS5hcnJvd1N0YXJ0WSttLmFycm93RW5kWSkvNDtlbHNlIGlmKG0uZWRnZVR5cGU9PT0ic2VnbWVudHMiKWlmKG0uYWxscHRzPVtdLG0uYWxscHRzLnB1c2gobS5zdGFydFgsbS5zdGFydFkpLG0uYWxscHRzLnB1c2guYXBwbHkobS5hbGxwdHMsbS5zZWdwdHMpLG0uYWxscHRzLnB1c2gobS5lbmRYLG0uZW5kWSksbS5zZWdwdHMubGVuZ3RoJTQ9PT0wKXt2YXIgTz1tLnNlZ3B0cy5sZW5ndGgvMixOPU8tMjttLm1pZFg9KG0uc2VncHRzW05dK20uc2VncHRzW09dKS8yLG0ubWlkWT0obS5zZWdwdHNbTisxXSttLnNlZ3B0c1tPKzFdKS8yfWVsc2V7dmFyICQ9bS5zZWdwdHMubGVuZ3RoLzItMTttLm1pZFg9bS5zZWdwdHNbJF0sbS5taWRZPW0uc2VncHRzWyQrMV19fSxTMS5jaGVja0ZvckludmFsaWRFZGdlV2FybmluZz1mdW5jdGlvbih4KXt2YXIgbT14WzBdLl9wcml2YXRlLnJzY3JhdGNoO20ubm9kZXNPdmVybGFwfHxYKG0uc3RhcnRYKSYmWChtLnN0YXJ0WSkmJlgobS5lbmRYKSYmWChtLmVuZFkpP20ubG9nZ2VkRXJyPSExOm0ubG9nZ2VkRXJyfHwobS5sb2dnZWRFcnI9ITAsaHUoIkVkZ2UgYCIreC5pZCgpKyJgIGhhcyBpbnZhbGlkIGVuZHBvaW50cyBhbmQgc28gaXQgaXMgaW1wb3NzaWJsZSB0byBkcmF3LiAgQWRqdXN0IHlvdXIgZWRnZSBzdHlsZSAoZS5nLiBjb250cm9sIHBvaW50cykgYWNjb3JkaW5nbHkgb3IgdXNlIGFuIGFsdGVybmF0aXZlIGVkZ2UgdHlwZS4gIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3VyIHdoZW4gdGhlIHNvdXJjZSBub2RlIGFuZCB0aGUgdGFyZ2V0IG5vZGUgb3ZlcmxhcC4iKSl9LFMxLmZpbmRFZGdlQ29udHJvbFBvaW50cz1mdW5jdGlvbih4KXt2YXIgbT10aGlzO2lmKCEoIXh8fHgubGVuZ3RoPT09MCkpe2Zvcih2YXIgaz10aGlzLFM9ay5jeSxNPVMuaGFzQ29tcG91bmROb2RlcygpLE89e21hcDpuZXcgd20sZ2V0OmZ1bmN0aW9uKFllKXt2YXIgbXQ9dGhpcy5tYXAuZ2V0KFllWzBdKTtyZXR1cm4gbXQhPW51bGw/bXQuZ2V0KFllWzFdKTpudWxsfSxzZXQ6ZnVuY3Rpb24oWWUsbXQpe3ZhciBKZT10aGlzLm1hcC5nZXQoWWVbMF0pO0plPT1udWxsJiYoSmU9bmV3IHdtLHRoaXMubWFwLnNldChZZVswXSxKZSkpLEplLnNldChZZVsxXSxtdCl9fSxOPVtdLCQ9W10sSD0wO0g8eC5sZW5ndGg7SCsrKXt2YXIgcT14W0hdLFk9cS5fcHJpdmF0ZSxaPXEucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlO2lmKCEocS5yZW1vdmVkKCl8fCFxLnRha2VzVXBTcGFjZSgpKSl7aWYoWj09PSJoYXlzdGFjayIpeyQucHVzaChxKTtjb250aW51ZX12YXIgY2U9Wj09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8Wj09PSJzZWdtZW50cyJ8fFo9PT0ic3RyYWlnaHQifHxaPT09InN0cmFpZ2h0LXRyaWFuZ2xlInx8Wj09PSJ0YXhpIix2ZT1aPT09InVuYnVuZGxlZC1iZXppZXIifHxaPT09ImJlemllciIsbWU9WS5zb3VyY2UsTGU9WS50YXJnZXQsX2U9bWUucG9vbEluZGV4KCksRWU9TGUucG9vbEluZGV4KCksQmU9W19lLEVlXS5zb3J0KCksUmU9Ty5nZXQoQmUpO1JlPT1udWxsJiYoUmU9e2VsZXM6W119LE8uc2V0KEJlLFJlKSxOLnB1c2goQmUpKSxSZS5lbGVzLnB1c2gocSksY2UmJihSZS5oYXNVbmJ1bmRsZWQ9ITApLHZlJiYoUmUuaGFzQmV6aWVyPSEwKX19Zm9yKHZhciBWZT1mdW5jdGlvbihZZSl7dmFyIG10PU5bWWVdLEplPU8uZ2V0KG10KSxMdD12b2lkIDA7aWYoIUplLmhhc1VuYnVuZGxlZCl7dmFyIE10PUplLmVsZXNbMF0ucGFyYWxsZWxFZGdlcygpLmZpbHRlcihmdW5jdGlvbihCbyl7cmV0dXJuIEJvLmlzQnVuZGxlZEJlemllcigpfSk7Y1MoSmUuZWxlcyksTXQuZm9yRWFjaChmdW5jdGlvbihCbyl7cmV0dXJuIEplLmVsZXMucHVzaChCbyl9KSxKZS5lbGVzLnNvcnQoZnVuY3Rpb24oQm8sdHIpe3JldHVybiBCby5wb29sSW5kZXgoKS10ci5wb29sSW5kZXgoKX0pfXZhciB1dD1KZS5lbGVzWzBdLFd0PXV0LnNvdXJjZSgpLFR0PXV0LnRhcmdldCgpO2lmKFd0LnBvb2xJbmRleCgpPlR0LnBvb2xJbmRleCgpKXt2YXIgX249V3Q7V3Q9VHQsVHQ9X259dmFyIGhuPUplLnNyY1Bvcz1XdC5wb3NpdGlvbigpLFl0PUplLnRndFBvcz1UdC5wb3NpdGlvbigpLERuPUplLnNyY1c9V3Qub3V0ZXJXaWR0aCgpLGlyPUplLnNyY0g9V3Qub3V0ZXJIZWlnaHQoKSx2cj1KZS50Z3RXPVR0Lm91dGVyV2lkdGgoKSxObj1KZS50Z3RIPVR0Lm91dGVySGVpZ2h0KCkscHI9SmUuc3JjU2hhcGU9ay5ub2RlU2hhcGVzW20uZ2V0Tm9kZVNoYXBlKFd0KV0sRXI9SmUudGd0U2hhcGU9ay5ub2RlU2hhcGVzW20uZ2V0Tm9kZVNoYXBlKFR0KV07SmUuZGlyQ291bnRzPXtub3J0aDowLHdlc3Q6MCxzb3V0aDowLGVhc3Q6MCxub3J0aHdlc3Q6MCxzb3V0aHdlc3Q6MCxub3J0aGVhc3Q6MCxzb3V0aGVhc3Q6MH07Zm9yKHZhciBNcj0wO01yPEplLmVsZXMubGVuZ3RoO01yKyspe3ZhciBDcj1KZS5lbGVzW01yXSxPcj1DclswXS5fcHJpdmF0ZS5yc2NyYXRjaCxXbj1Dci5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUsYnI9V249PT0idW5idW5kbGVkLWJlemllciJ8fFduPT09InNlZ21lbnRzInx8V249PT0idGF4aSIsU3I9IVd0LnNhbWUoQ3Iuc291cmNlKCkpO2lmKCFKZS5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uJiZXdCE9PVR0JiYoSmUuaGFzQmV6aWVyfHxKZS5oYXNVbmJ1bmRsZWQpKXtKZS5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uPSEwO3ZhciBOcj1wci5pbnRlcnNlY3RMaW5lKGhuLngsaG4ueSxEbixpcixZdC54LFl0LnksMCksU2k9SmUuc3JjSW50bj1Ocix5cz1Fci5pbnRlcnNlY3RMaW5lKFl0LngsWXQueSx2cixObixobi54LGhuLnksMCkscGE9SmUudGd0SW50bj15cyxNaT1KZS5pbnRlcnNlY3Rpb25QdHM9e3gxOk5yWzBdLHgyOnlzWzBdLHkxOk5yWzFdLHkyOnlzWzFdfSxnaT1KZS5wb3NQdHM9e3gxOmhuLngseDI6WXQueCx5MTpobi55LHkyOll0Lnl9LGZzPXlzWzFdLU5yWzFdLEZzPXlzWzBdLU5yWzBdLHhzPU1hdGguc3FydChGcypGcytmcypmcyksUnM9SmUudmVjdG9yPXt4OkZzLHk6ZnN9LHlvPUplLnZlY3Rvck5vcm09e3g6UnMueC94cyx5OlJzLnkveHN9LCRhPXt4Oi15by55LHk6eW8ueH07SmUubm9kZXNPdmVybGFwPSFYKHhzKXx8RXIuY2hlY2tQb2ludChOclswXSxOclsxXSwwLHZyLE5uLFl0LngsWXQueSl8fHByLmNoZWNrUG9pbnQoeXNbMF0seXNbMV0sMCxEbixpcixobi54LGhuLnkpLEplLnZlY3Rvck5vcm1JbnZlcnNlPSRhLEx0PXtub2Rlc092ZXJsYXA6SmUubm9kZXNPdmVybGFwLGRpckNvdW50czpKZS5kaXJDb3VudHMsY2FsY3VsYXRlZEludGVyc2VjdGlvbjohMCxoYXNCZXppZXI6SmUuaGFzQmV6aWVyLGhhc1VuYnVuZGxlZDpKZS5oYXNVbmJ1bmRsZWQsZWxlczpKZS5lbGVzLHNyY1BvczpZdCx0Z3RQb3M6aG4sc3JjVzp2cixzcmNIOk5uLHRndFc6RG4sdGd0SDppcixzcmNJbnRuOnBhLHRndEludG46U2ksc3JjU2hhcGU6RXIsdGd0U2hhcGU6cHIscG9zUHRzOnt4MTpnaS54Mix5MTpnaS55Mix4MjpnaS54MSx5MjpnaS55MX0saW50ZXJzZWN0aW9uUHRzOnt4MTpNaS54Mix5MTpNaS55Mix4MjpNaS54MSx5MjpNaS55MX0sdmVjdG9yOnt4Oi1Scy54LHk6LVJzLnl9LHZlY3Rvck5vcm06e3g6LXlvLngseToteW8ueX0sdmVjdG9yTm9ybUludmVyc2U6e3g6LSRhLngseTotJGEueX19fXZhciBEYT1Tcj9MdDpKZTtPci5ub2Rlc092ZXJsYXA9RGEubm9kZXNPdmVybGFwLE9yLnNyY0ludG49RGEuc3JjSW50bixPci50Z3RJbnRuPURhLnRndEludG4sTSYmKFd0LmlzUGFyZW50KCl8fFd0LmlzQ2hpbGQoKXx8VHQuaXNQYXJlbnQoKXx8VHQuaXNDaGlsZCgpKSYmKFd0LnBhcmVudHMoKS5hbnlTYW1lKFR0KXx8VHQucGFyZW50cygpLmFueVNhbWUoV3QpfHxXdC5zYW1lKFR0KSYmV3QuaXNQYXJlbnQoKSk/bS5maW5kQ29tcG91bmRMb29wUG9pbnRzKENyLERhLE1yLGJyKTpXdD09PVR0P20uZmluZExvb3BQb2ludHMoQ3IsRGEsTXIsYnIpOlduPT09InNlZ21lbnRzIj9tLmZpbmRTZWdtZW50c1BvaW50cyhDcixEYSk6V249PT0idGF4aSI/bS5maW5kVGF4aVBvaW50cyhDcixEYSk6V249PT0ic3RyYWlnaHQifHwhYnImJkplLmVsZXMubGVuZ3RoJTI9PT0xJiZNcj09PU1hdGguZmxvb3IoSmUuZWxlcy5sZW5ndGgvMik/bS5maW5kU3RyYWlnaHRFZGdlUG9pbnRzKENyKTptLmZpbmRCZXppZXJQb2ludHMoQ3IsRGEsTXIsYnIsU3IpLG0uZmluZEVuZHBvaW50cyhDciksbS50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzKENyLERhKSxtLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nKENyKSxtLnN0b3JlQWxscHRzKENyKSxtLnN0b3JlRWRnZVByb2plY3Rpb25zKENyKSxtLmNhbGN1bGF0ZUFycm93QW5nbGVzKENyKSxtLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoQ3IpLG0uY2FsY3VsYXRlTGFiZWxBbmdsZXMoQ3IpfX0sY3Q9MDtjdDxOLmxlbmd0aDtjdCsrKVZlKGN0KTt0aGlzLmZpbmRIYXlzdGFja1BvaW50cygkKX19O2Z1bmN0aW9uIFEkKHgpe3ZhciBtPVtdO2lmKHghPW51bGwpe2Zvcih2YXIgaz0wO2s8eC5sZW5ndGg7ays9Mil7dmFyIFM9eFtrXSxNPXhbaysxXTttLnB1c2goe3g6Uyx5Ok19KX1yZXR1cm4gbX19UzEuZ2V0U2VnbWVudFBvaW50cz1mdW5jdGlvbih4KXt2YXIgbT14WzBdLl9wcml2YXRlLnJzY3JhdGNoLGs9bS5lZGdlVHlwZTtpZihrPT09InNlZ21lbnRzIilyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeCksUSQobS5zZWdwdHMpfSxTMS5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKHgpe3ZhciBtPXhbMF0uX3ByaXZhdGUucnNjcmF0Y2gsaz1tLmVkZ2VUeXBlO2lmKGs9PT0iYmV6aWVyInx8az09PSJtdWx0aWJlemllciJ8fGs9PT0ic2VsZiJ8fGs9PT0iY29tcG91bmQiKXJldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh4KSxRJChtLmN0cmxwdHMpfSxTMS5nZXRFZGdlTWlkcG9pbnQ9ZnVuY3Rpb24oeCl7dmFyIG09eFswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeCkse3g6bS5taWRYLHk6bS5taWRZfX07dmFyIGhrPXt9O2hrLm1hbnVhbEVuZHB0VG9QeD1mdW5jdGlvbih4LG0pe3ZhciBrPXRoaXMsUz14LnBvc2l0aW9uKCksTT14Lm91dGVyV2lkdGgoKSxPPXgub3V0ZXJIZWlnaHQoKTtpZihtLnZhbHVlLmxlbmd0aD09PTIpe3ZhciBOPVttLnBmVmFsdWVbMF0sbS5wZlZhbHVlWzFdXTtyZXR1cm4gbS51bml0c1swXT09PSIlIiYmKE5bMF09TlswXSpNKSxtLnVuaXRzWzFdPT09IiUiJiYoTlsxXT1OWzFdKk8pLE5bMF0rPVMueCxOWzFdKz1TLnksTn1lbHNle3ZhciAkPW0ucGZWYWx1ZVswXTskPS1NYXRoLlBJLzIrJDt2YXIgSD0yKk1hdGgubWF4KE0sTykscT1bUy54K01hdGguY29zKCQpKkgsUy55K01hdGguc2luKCQpKkhdO3JldHVybiBrLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoeCldLmludGVyc2VjdExpbmUoUy54LFMueSxNLE8scVswXSxxWzFdLDApfX0saGsuZmluZEVuZHBvaW50cz1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGssUz14LnNvdXJjZSgpWzBdLE09eC50YXJnZXQoKVswXSxPPVMucG9zaXRpb24oKSxOPU0ucG9zaXRpb24oKSwkPXgucHN0eWxlKCJ0YXJnZXQtYXJyb3ctc2hhcGUiKS52YWx1ZSxIPXgucHN0eWxlKCJzb3VyY2UtYXJyb3ctc2hhcGUiKS52YWx1ZSxxPXgucHN0eWxlKCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxZPXgucHN0eWxlKCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxaPXgucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlLGNlPXguX3ByaXZhdGUucnNjcmF0Y2gsdmU9Y2UuZWRnZVR5cGUsbWU9Wj09PSJ0YXhpIixMZT12ZT09PSJzZWxmInx8dmU9PT0iY29tcG91bmQiLF9lPXZlPT09ImJlemllciJ8fHZlPT09Im11bHRpYmV6aWVyInx8TGUsRWU9dmUhPT0iYmV6aWVyIixCZT12ZT09PSJzdHJhaWdodCJ8fHZlPT09InNlZ21lbnRzIixSZT12ZT09PSJzZWdtZW50cyIsVmU9X2V8fEVlfHxCZSxjdD1MZXx8bWUsc3Q9eC5wc3R5bGUoInNvdXJjZS1lbmRwb2ludCIpLFllPWN0PyJvdXRzaWRlLXRvLW5vZGUiOnN0LnZhbHVlLG10PXgucHN0eWxlKCJ0YXJnZXQtZW5kcG9pbnQiKSxKZT1jdD8ib3V0c2lkZS10by1ub2RlIjptdC52YWx1ZTtjZS5zcmNNYW5FbmRwdD1zdCxjZS50Z3RNYW5FbmRwdD1tdDt2YXIgTHQsTXQsdXQsV3Q7aWYoX2Upe3ZhciBUdD1bY2UuY3RybHB0c1swXSxjZS5jdHJscHRzWzFdXSxfbj1FZT9bY2UuY3RybHB0c1tjZS5jdHJscHRzLmxlbmd0aC0yXSxjZS5jdHJscHRzW2NlLmN0cmxwdHMubGVuZ3RoLTFdXTpUdDtMdD1fbixNdD1UdH1lbHNlIGlmKEJlKXt2YXIgaG49UmU/Y2Uuc2VncHRzLnNsaWNlKDAsMik6W04ueCxOLnldLFl0PVJlP2NlLnNlZ3B0cy5zbGljZShjZS5zZWdwdHMubGVuZ3RoLTIpOltPLngsTy55XTtMdD1ZdCxNdD1obn1pZihKZT09PSJpbnNpZGUtdG8tbm9kZSIpaz1bTi54LE4ueV07ZWxzZSBpZihtdC51bml0cylrPXRoaXMubWFudWFsRW5kcHRUb1B4KE0sbXQpO2Vsc2UgaWYoSmU9PT0ib3V0c2lkZS10by1saW5lIilrPWNlLnRndEludG47ZWxzZSBpZihKZT09PSJvdXRzaWRlLXRvLW5vZGUifHxKZT09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwiP3V0PUx0OihKZT09PSJvdXRzaWRlLXRvLWxpbmUifHxKZT09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKSYmKHV0PVtPLngsTy55XSksaz1tLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoTSldLmludGVyc2VjdExpbmUoTi54LE4ueSxNLm91dGVyV2lkdGgoKSxNLm91dGVySGVpZ2h0KCksdXRbMF0sdXRbMV0sMCksSmU9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsInx8SmU9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIil7dmFyIERuPU0uX3ByaXZhdGUucnNjcmF0Y2gsaXI9RG4ubGFiZWxXaWR0aCx2cj1Ebi5sYWJlbEhlaWdodCxObj1Ebi5sYWJlbFgscHI9RG4ubGFiZWxZLEVyPWlyLzIsTXI9dnIvMixDcj1NLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtDcj09PSJ0b3AiP3ByLT1NcjpDcj09PSJib3R0b20iJiYocHIrPU1yKTt2YXIgT3I9TS5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWU7T3I9PT0ibGVmdCI/Tm4tPUVyOk9yPT09InJpZ2h0IiYmKE5uKz1Fcik7dmFyIFduPUs5KHV0WzBdLHV0WzFdLFtObi1Fcixwci1NcixObitFcixwci1NcixObitFcixwcitNcixObi1FcixwcitNcl0sTi54LE4ueSk7aWYoV24ubGVuZ3RoPjApe3ZhciBicj1PLFNyPWY1KGJyLEo3KGspKSxOcj1mNShicixKNyhXbikpLFNpPVNyO2lmKE5yPFNyJiYoaz1XbixTaT1OciksV24ubGVuZ3RoPjIpe3ZhciB5cz1mNShicix7eDpXblsyXSx5OlduWzNdfSk7eXM8U2kmJihrPVtXblsyXSxXblszXV0pfX19dmFyIHBhPWJTKGssTHQsbS5hcnJvd1NoYXBlc1skXS5zcGFjaW5nKHgpK3EpLE1pPWJTKGssTHQsbS5hcnJvd1NoYXBlc1skXS5nYXAoeCkrcSk7aWYoY2UuZW5kWD1NaVswXSxjZS5lbmRZPU1pWzFdLGNlLmFycm93RW5kWD1wYVswXSxjZS5hcnJvd0VuZFk9cGFbMV0sWWU9PT0iaW5zaWRlLXRvLW5vZGUiKWs9W08ueCxPLnldO2Vsc2UgaWYoc3QudW5pdHMpaz10aGlzLm1hbnVhbEVuZHB0VG9QeChTLHN0KTtlbHNlIGlmKFllPT09Im91dHNpZGUtdG8tbGluZSIpaz1jZS5zcmNJbnRuO2Vsc2UgaWYoWWU9PT0ib3V0c2lkZS10by1ub2RlInx8WWU9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIj9XdD1NdDooWWU9PT0ib3V0c2lkZS10by1saW5lInx8WWU9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIikmJihXdD1bTi54LE4ueV0pLGs9bS5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKFMpXS5pbnRlcnNlY3RMaW5lKE8ueCxPLnksUy5vdXRlcldpZHRoKCksUy5vdXRlckhlaWdodCgpLFd0WzBdLFd0WzFdLDApLFllPT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCJ8fFllPT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpe3ZhciBnaT1TLl9wcml2YXRlLnJzY3JhdGNoLGZzPWdpLmxhYmVsV2lkdGgsRnM9Z2kubGFiZWxIZWlnaHQseHM9Z2kubGFiZWxYLFJzPWdpLmxhYmVsWSx5bz1mcy8yLCRhPUZzLzIsRGE9Uy5wc3R5bGUoInRleHQtdmFsaWduIikudmFsdWU7RGE9PT0idG9wIj9Scy09JGE6RGE9PT0iYm90dG9tIiYmKFJzKz0kYSk7dmFyIEJvPVMucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlO0JvPT09ImxlZnQiP3hzLT15bzpCbz09PSJyaWdodCImJih4cys9eW8pO3ZhciB0cj1LOShXdFswXSxXdFsxXSxbeHMteW8sUnMtJGEseHMreW8sUnMtJGEseHMreW8sUnMrJGEseHMteW8sUnMrJGFdLE8ueCxPLnkpO2lmKHRyLmxlbmd0aD4wKXt2YXIgRz1OLEpuPWY1KEcsSjcoaykpLGtyPWY1KEcsSjcodHIpKSxscj1KbjtpZihrcjxKbiYmKGs9W3RyWzBdLHRyWzFdXSxscj1rciksdHIubGVuZ3RoPjIpe3ZhciBWdD1mNShHLHt4OnRyWzJdLHk6dHJbM119KTtWdDxsciYmKGs9W3RyWzJdLHRyWzNdXSl9fX12YXIgSHM9YlMoayxNdCxtLmFycm93U2hhcGVzW0hdLnNwYWNpbmcoeCkrWSksd3I9YlMoayxNdCxtLmFycm93U2hhcGVzW0hdLmdhcCh4KStZKTtjZS5zdGFydFg9d3JbMF0sY2Uuc3RhcnRZPXdyWzFdLGNlLmFycm93U3RhcnRYPUhzWzBdLGNlLmFycm93U3RhcnRZPUhzWzFdLFZlJiYoIVgoY2Uuc3RhcnRYKXx8IVgoY2Uuc3RhcnRZKXx8IVgoY2UuZW5kWCl8fCFYKGNlLmVuZFkpP2NlLmJhZExpbmU9ITA6Y2UuYmFkTGluZT0hMSl9LGhrLmdldFNvdXJjZUVuZHBvaW50PWZ1bmN0aW9uKHgpe3ZhciBtPXhbMF0uX3ByaXZhdGUucnNjcmF0Y2g7c3dpdGNoKHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHgpLG0uZWRnZVR5cGUpe2Nhc2UiaGF5c3RhY2siOnJldHVybnt4Om0uaGF5c3RhY2tQdHNbMF0seTptLmhheXN0YWNrUHRzWzFdfTtkZWZhdWx0OnJldHVybnt4Om0uYXJyb3dTdGFydFgseTptLmFycm93U3RhcnRZfX19LGhrLmdldFRhcmdldEVuZHBvaW50PWZ1bmN0aW9uKHgpe3ZhciBtPXhbMF0uX3ByaXZhdGUucnNjcmF0Y2g7c3dpdGNoKHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHgpLG0uZWRnZVR5cGUpe2Nhc2UiaGF5c3RhY2siOnJldHVybnt4Om0uaGF5c3RhY2tQdHNbMl0seTptLmhheXN0YWNrUHRzWzNdfTtkZWZhdWx0OnJldHVybnt4Om0uYXJyb3dFbmRYLHk6bS5hcnJvd0VuZFl9fX07dmFyIEZJPXt9O2Z1bmN0aW9uIEokKHgsbSxrKXtmb3IodmFyIFM9ZnVuY3Rpb24ocSxZLFosY2Upe3JldHVybiB0MChxLFksWixjZSl9LE09bS5fcHJpdmF0ZSxPPU0ucnN0eWxlLmJlemllclB0cyxOPTA7Tjx4LmJlemllclByb2pQY3RzLmxlbmd0aDtOKyspe3ZhciAkPXguYmV6aWVyUHJvalBjdHNbTl07Ty5wdXNoKHt4OlMoa1swXSxrWzJdLGtbNF0sJCkseTpTKGtbMV0sa1szXSxrWzVdLCQpfSl9fUZJLnN0b3JlRWRnZVByb2plY3Rpb25zPWZ1bmN0aW9uKHgpe3ZhciBtPXguX3ByaXZhdGUsaz1tLnJzY3JhdGNoLFM9ay5lZGdlVHlwZTtpZihtLnJzdHlsZS5iZXppZXJQdHM9bnVsbCxtLnJzdHlsZS5saW5lUHRzPW51bGwsbS5yc3R5bGUuaGF5c3RhY2tQdHM9bnVsbCxTPT09Im11bHRpYmV6aWVyInx8Uz09PSJiZXppZXIifHxTPT09InNlbGYifHxTPT09ImNvbXBvdW5kIil7bS5yc3R5bGUuYmV6aWVyUHRzPVtdO2Zvcih2YXIgTT0wO00rNTxrLmFsbHB0cy5sZW5ndGg7TSs9NClKJCh0aGlzLHgsay5hbGxwdHMuc2xpY2UoTSxNKzYpKX1lbHNlIGlmKFM9PT0ic2VnbWVudHMiKWZvcih2YXIgTz1tLnJzdHlsZS5saW5lUHRzPVtdLE09MDtNKzE8ay5hbGxwdHMubGVuZ3RoO00rPTIpTy5wdXNoKHt4OmsuYWxscHRzW01dLHk6ay5hbGxwdHNbTSsxXX0pO2Vsc2UgaWYoUz09PSJoYXlzdGFjayIpe3ZhciBOPWsuaGF5c3RhY2tQdHM7bS5yc3R5bGUuaGF5c3RhY2tQdHM9W3t4Ok5bMF0seTpOWzFdfSx7eDpOWzJdLHk6TlszXX1dfW0ucnN0eWxlLmFycm93V2lkdGg9dGhpcy5nZXRBcnJvd1dpZHRoKHgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUseC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMuYXJyb3dTaGFwZVdpZHRofSxGSS5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucz1mdW5jdGlvbih4KXt0aGlzLmZpbmRFZGdlQ29udHJvbFBvaW50cyh4KX07dmFyIGttPXt9O2ttLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbj1mdW5jdGlvbih4KXt2YXIgbT14LnBzdHlsZSgibGFiZWwiKS5zdHJWYWx1ZTtpZighU2UobSkpe3ZhciBrLFMsTT14Ll9wcml2YXRlLE89eC53aWR0aCgpLE49eC5oZWlnaHQoKSwkPXgucGFkZGluZygpLEg9eC5wb3NpdGlvbigpLHE9eC5wc3R5bGUoInRleHQtaGFsaWduIikuc3RyVmFsdWUsWT14LnBzdHlsZSgidGV4dC12YWxpZ24iKS5zdHJWYWx1ZSxaPU0ucnNjcmF0Y2gsY2U9TS5yc3R5bGU7c3dpdGNoKHEpe2Nhc2UibGVmdCI6az1ILngtTy8yLSQ7YnJlYWs7Y2FzZSJyaWdodCI6az1ILngrTy8yKyQ7YnJlYWs7ZGVmYXVsdDprPUgueH1zd2l0Y2goWSl7Y2FzZSJ0b3AiOlM9SC55LU4vMi0kO2JyZWFrO2Nhc2UiYm90dG9tIjpTPUgueStOLzIrJDticmVhaztkZWZhdWx0OlM9SC55fVoubGFiZWxYPWssWi5sYWJlbFk9UyxjZS5sYWJlbFg9ayxjZS5sYWJlbFk9Uyx0aGlzLmNhbGN1bGF0ZUxhYmVsQW5nbGVzKHgpLHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoeCl9fTt2YXIgWiQ9ZnVuY3Rpb24obSxrKXt2YXIgUz1NYXRoLmF0YW4oay9tKTtyZXR1cm4gbT09PTAmJlM8MCYmKFM9UyotMSksU30sR1M9ZnVuY3Rpb24obSxrKXt2YXIgUz1rLngtbS54LE09ay55LW0ueTtyZXR1cm4gWiQoUyxNKX0sSHJlPWZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPVU5KDAsTS0uMDAxLDEpLE49VTkoMCxNKy4wMDEsMSksJD1aNyhtLGssUyxPKSxIPVo3KG0sayxTLE4pO3JldHVybiBHUygkLEgpfTtrbS5yZWNhbGN1bGF0ZUVkZ2VMYWJlbFByb2plY3Rpb25zPWZ1bmN0aW9uKHgpe3ZhciBtLGs9eC5fcHJpdmF0ZSxTPWsucnNjcmF0Y2gsTT10aGlzLE89e21pZDp4LnBzdHlsZSgibGFiZWwiKS5zdHJWYWx1ZSxzb3VyY2U6eC5wc3R5bGUoInNvdXJjZS1sYWJlbCIpLnN0clZhbHVlLHRhcmdldDp4LnBzdHlsZSgidGFyZ2V0LWxhYmVsIikuc3RyVmFsdWV9O2lmKE8ubWlkfHxPLnNvdXJjZXx8Ty50YXJnZXQpe209e3g6Uy5taWRYLHk6Uy5taWRZfTt2YXIgTj1mdW5jdGlvbihaLGNlLHZlKXtKMyhrLnJzY3JhdGNoLFosY2UsdmUpLEozKGsucnN0eWxlLFosY2UsdmUpfTtOKCJsYWJlbFgiLG51bGwsbS54KSxOKCJsYWJlbFkiLG51bGwsbS55KTt2YXIgJD1aJChTLm1pZERpc3BYLFMubWlkRGlzcFkpO04oImxhYmVsQXV0b0FuZ2xlIixudWxsLCQpO3ZhciBIPWZ1bmN0aW9uIFkoKXtpZihZLmNhY2hlKXJldHVybiBZLmNhY2hlO2Zvcih2YXIgWj1bXSxjZT0wO2NlKzU8Uy5hbGxwdHMubGVuZ3RoO2NlKz00KXt2YXIgdmU9e3g6Uy5hbGxwdHNbY2VdLHk6Uy5hbGxwdHNbY2UrMV19LG1lPXt4OlMuYWxscHRzW2NlKzJdLHk6Uy5hbGxwdHNbY2UrM119LExlPXt4OlMuYWxscHRzW2NlKzRdLHk6Uy5hbGxwdHNbY2UrNV19O1oucHVzaCh7cDA6dmUscDE6bWUscDI6TGUsc3RhcnREaXN0OjAsbGVuZ3RoOjAsc2VnbWVudHM6W119KX12YXIgX2U9ay5yc3R5bGUuYmV6aWVyUHRzLEVlPU0uYmV6aWVyUHJvalBjdHMubGVuZ3RoO2Z1bmN0aW9uIEJlKFllLG10LEplLEx0LE10KXt2YXIgdXQ9aDUobXQsSmUpLFd0PVllLnNlZ21lbnRzW1llLnNlZ21lbnRzLmxlbmd0aC0xXSxUdD17cDA6bXQscDE6SmUsdDA6THQsdDE6TXQsc3RhcnREaXN0Old0P1d0LnN0YXJ0RGlzdCtXdC5sZW5ndGg6MCxsZW5ndGg6dXR9O1llLnNlZ21lbnRzLnB1c2goVHQpLFllLmxlbmd0aCs9dXR9Zm9yKHZhciBSZT0wO1JlPFoubGVuZ3RoO1JlKyspe3ZhciBWZT1aW1JlXSxjdD1aW1JlLTFdO2N0JiYoVmUuc3RhcnREaXN0PWN0LnN0YXJ0RGlzdCtjdC5sZW5ndGgpLEJlKFZlLFZlLnAwLF9lW1JlKkVlXSwwLE0uYmV6aWVyUHJvalBjdHNbMF0pO2Zvcih2YXIgc3Q9MDtzdDxFZS0xO3N0KyspQmUoVmUsX2VbUmUqRWUrc3RdLF9lW1JlKkVlK3N0KzFdLE0uYmV6aWVyUHJvalBjdHNbc3RdLE0uYmV6aWVyUHJvalBjdHNbc3QrMV0pO0JlKFZlLF9lW1JlKkVlK0VlLTFdLFZlLnAyLE0uYmV6aWVyUHJvalBjdHNbRWUtMV0sMSl9cmV0dXJuIFkuY2FjaGU9Wn0scT1mdW5jdGlvbihaKXt2YXIgY2UsdmU9Wj09PSJzb3VyY2UiO2lmKE9bWl0pe3ZhciBtZT14LnBzdHlsZShaKyItdGV4dC1vZmZzZXQiKS5wZlZhbHVlO3N3aXRjaChTLmVkZ2VUeXBlKXtjYXNlInNlbGYiOmNhc2UiY29tcG91bmQiOmNhc2UiYmV6aWVyIjpjYXNlIm11bHRpYmV6aWVyIjp7Zm9yKHZhciBMZT1IKCksX2UsRWU9MCxCZT0wLFJlPTA7UmU8TGUubGVuZ3RoO1JlKyspe2Zvcih2YXIgVmU9TGVbdmU/UmU6TGUubGVuZ3RoLTEtUmVdLGN0PTA7Y3Q8VmUuc2VnbWVudHMubGVuZ3RoO2N0Kyspe3ZhciBzdD1WZS5zZWdtZW50c1t2ZT9jdDpWZS5zZWdtZW50cy5sZW5ndGgtMS1jdF0sWWU9UmU9PT1MZS5sZW5ndGgtMSYmY3Q9PT1WZS5zZWdtZW50cy5sZW5ndGgtMTtpZihFZT1CZSxCZSs9c3QubGVuZ3RoLEJlPj1tZXx8WWUpe19lPXtjcDpWZSxzZWdtZW50OnN0fTticmVha319aWYoX2UpYnJlYWt9dmFyIG10PV9lLmNwLEplPV9lLnNlZ21lbnQsTHQ9KG1lLUVlKS9KZS5sZW5ndGgsTXQ9SmUudDEtSmUudDAsdXQ9dmU/SmUudDArTXQqTHQ6SmUudDEtTXQqTHQ7dXQ9VTkoMCx1dCwxKSxtPVo3KG10LnAwLG10LnAxLG10LnAyLHV0KSxjZT1IcmUobXQucDAsbXQucDEsbXQucDIsdXQpO2JyZWFrfWNhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOntmb3IodmFyIFd0PTAsVHQsX24saG4sWXQsRG49Uy5hbGxwdHMubGVuZ3RoLGlyPTA7aXIrMzxEbiYmKHZlPyhobj17eDpTLmFsbHB0c1tpcl0seTpTLmFsbHB0c1tpcisxXX0sWXQ9e3g6Uy5hbGxwdHNbaXIrMl0seTpTLmFsbHB0c1tpciszXX0pOihobj17eDpTLmFsbHB0c1tEbi0yLWlyXSx5OlMuYWxscHRzW0RuLTEtaXJdfSxZdD17eDpTLmFsbHB0c1tEbi00LWlyXSx5OlMuYWxscHRzW0RuLTMtaXJdfSksVHQ9aDUoaG4sWXQpLF9uPVd0LFd0Kz1UdCwhKFd0Pj1tZSkpO2lyKz0yKTt2YXIgdnI9bWUtX24sTm49dnIvVHQ7Tm49VTkoMCxObiwxKSxtPWZaKGhuLFl0LE5uKSxjZT1HUyhobixZdCk7YnJlYWt9fU4oImxhYmVsWCIsWixtLngpLE4oImxhYmVsWSIsWixtLnkpLE4oImxhYmVsQXV0b0FuZ2xlIixaLGNlKX19O3EoInNvdXJjZSIpLHEoInRhcmdldCIpLHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoeCl9fSxrbS5hcHBseUxhYmVsRGltZW5zaW9ucz1mdW5jdGlvbih4KXt0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeCkseC5pc0VkZ2UoKSYmKHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh4LCJzb3VyY2UiKSx0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeCwidGFyZ2V0IikpfSxrbS5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC5fcHJpdmF0ZSxTPXRoaXMuZ2V0TGFiZWxUZXh0KHgsbSksTT10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh4LFMpLE89eC5wc3R5bGUoImxpbmUtaGVpZ2h0IikucGZWYWx1ZSxOPXgucHN0eWxlKCJ0ZXh0LXdyYXAiKS5zdHJWYWx1ZSwkPUsyKGsucnNjcmF0Y2gsImxhYmVsV3JhcENhY2hlZExpbmVzIixtKXx8W10sSD1OIT09IndyYXAiPzE6TWF0aC5tYXgoJC5sZW5ndGgsMSkscT1NLmhlaWdodC9ILFk9cSpPLFo9TS53aWR0aCxjZT1NLmhlaWdodCsoSC0xKSooTy0xKSpxO0ozKGsucnN0eWxlLCJsYWJlbFdpZHRoIixtLFopLEozKGsucnNjcmF0Y2gsImxhYmVsV2lkdGgiLG0sWiksSjMoay5yc3R5bGUsImxhYmVsSGVpZ2h0IixtLGNlKSxKMyhrLnJzY3JhdGNoLCJsYWJlbEhlaWdodCIsbSxjZSksSjMoay5yc2NyYXRjaCwibGFiZWxMaW5lSGVpZ2h0IixtLFkpfSxrbS5nZXRMYWJlbFRleHQ9ZnVuY3Rpb24oeCxtKXt2YXIgaz14Ll9wcml2YXRlLFM9bT9tKyItIjoiIixNPXgucHN0eWxlKFMrImxhYmVsIikuc3RyVmFsdWUsTz14LnBzdHlsZSgidGV4dC10cmFuc2Zvcm0iKS52YWx1ZSxOPWZ1bmN0aW9uKHZyLE5uKXtyZXR1cm4gTm4/KEozKGsucnNjcmF0Y2gsdnIsbSxObiksTm4pOksyKGsucnNjcmF0Y2gsdnIsbSl9O2lmKCFNKXJldHVybiIiO089PSJub25lInx8KE89PSJ1cHBlcmNhc2UiP009TS50b1VwcGVyQ2FzZSgpOk89PSJsb3dlcmNhc2UiJiYoTT1NLnRvTG93ZXJDYXNlKCkpKTt2YXIgJD14LnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU7aWYoJD09PSJ3cmFwIil7dmFyIEg9TigibGFiZWxLZXkiKTtpZihIIT1udWxsJiZOKCJsYWJlbFdyYXBLZXkiKT09PUgpcmV0dXJuIE4oImxhYmVsV3JhcENhY2hlZFRleHQiKTtmb3IodmFyIHE9IuKAiyIsWT1NLnNwbGl0KGAKYCksWj14LnBzdHlsZSgidGV4dC1tYXgtd2lkdGgiKS5wZlZhbHVlLGNlPXgucHN0eWxlKCJ0ZXh0LW92ZXJmbG93LXdyYXAiKS52YWx1ZSx2ZT1jZT09PSJhbnl3aGVyZSIsbWU9W10sTGU9L1tcc1x1MjAwYl0rLyxfZT12ZT8iIjoiICIsRWU9MDtFZTxZLmxlbmd0aDtFZSsrKXt2YXIgQmU9WVtFZV0sUmU9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeCxCZSksVmU9UmUud2lkdGg7aWYodmUpe3ZhciBjdD1CZS5zcGxpdCgiIikuam9pbihxKTtCZT1jdH1pZihWZT5aKXtmb3IodmFyIHN0PUJlLnNwbGl0KExlKSxZZT0iIixtdD0wO210PHN0Lmxlbmd0aDttdCsrKXt2YXIgSmU9c3RbbXRdLEx0PVllLmxlbmd0aD09PTA/SmU6WWUrX2UrSmUsTXQ9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeCxMdCksdXQ9TXQud2lkdGg7dXQ8PVo/WWUrPUplK19lOihZZSYmbWUucHVzaChZZSksWWU9SmUrX2UpfVllLm1hdGNoKC9eW1xzXHUyMDBiXSskLyl8fG1lLnB1c2goWWUpfWVsc2UgbWUucHVzaChCZSl9TigibGFiZWxXcmFwQ2FjaGVkTGluZXMiLG1lKSxNPU4oImxhYmVsV3JhcENhY2hlZFRleHQiLG1lLmpvaW4oYApgKSksTigibGFiZWxXcmFwS2V5IixIKX1lbHNlIGlmKCQ9PT0iZWxsaXBzaXMiKXt2YXIgV3Q9eC5wc3R5bGUoInRleHQtbWF4LXdpZHRoIikucGZWYWx1ZSxUdD0iIixfbj0i4oCmIixobj0hMTtpZih0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh4LE0pLndpZHRoPFd0KXJldHVybiBNO2Zvcih2YXIgWXQ9MDtZdDxNLmxlbmd0aDtZdCsrKXt2YXIgRG49dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeCxUdCtNW1l0XStfbikud2lkdGg7aWYoRG4+V3QpYnJlYWs7VHQrPU1bWXRdLFl0PT09TS5sZW5ndGgtMSYmKGhuPSEwKX1yZXR1cm4gaG58fChUdCs9X24pLFR0fXJldHVybiBNfSxrbS5nZXRMYWJlbEp1c3RpZmljYXRpb249ZnVuY3Rpb24oeCl7dmFyIG09eC5wc3R5bGUoInRleHQtanVzdGlmaWNhdGlvbiIpLnN0clZhbHVlLGs9eC5wc3R5bGUoInRleHQtaGFsaWduIikuc3RyVmFsdWU7aWYobT09PSJhdXRvIilpZih4LmlzTm9kZSgpKXN3aXRjaChrKXtjYXNlImxlZnQiOnJldHVybiJyaWdodCI7Y2FzZSJyaWdodCI6cmV0dXJuImxlZnQiO2RlZmF1bHQ6cmV0dXJuImNlbnRlciJ9ZWxzZSByZXR1cm4iY2VudGVyIjtlbHNlIHJldHVybiBtfSxrbS5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9dWQobSx4Ll9wcml2YXRlLmxhYmVsRGltc0tleSksTT1rLmxhYmVsRGltQ2FjaGV8fChrLmxhYmVsRGltQ2FjaGU9W10pLE89TVtTXTtpZihPIT1udWxsKXJldHVybiBPO3ZhciBOPTAsJD14LnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLEg9eC5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUscT14LnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxZPXgucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLFo9dGhpcy5sYWJlbENhbGNDYW52YXMsY2U9dGhpcy5sYWJlbENhbGNDYW52YXNDb250ZXh0O2lmKCFaKXtaPXRoaXMubGFiZWxDYWxjQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGNlPXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1aLmdldENvbnRleHQoIjJkIik7dmFyIHZlPVouc3R5bGU7dmUucG9zaXRpb249ImFic29sdXRlIix2ZS5sZWZ0PSItOTk5OXB4Iix2ZS50b3A9Ii05OTk5cHgiLHZlLnpJbmRleD0iLTEiLHZlLnZpc2liaWxpdHk9ImhpZGRlbiIsdmUucG9pbnRlckV2ZW50cz0ibm9uZSJ9Y2UuZm9udD0iIi5jb25jYXQoJCwiICIpLmNvbmNhdChZLCIgIikuY29uY2F0KEgsInB4ICIpLmNvbmNhdChxKTtmb3IodmFyIG1lPTAsTGU9MCxfZT1tLnNwbGl0KGAKYCksRWU9MDtFZTxfZS5sZW5ndGg7RWUrKyl7dmFyIEJlPV9lW0VlXSxSZT1jZS5tZWFzdXJlVGV4dChCZSksVmU9TWF0aC5jZWlsKFJlLndpZHRoKSxjdD1IO21lPU1hdGgubWF4KFZlLG1lKSxMZSs9Y3R9cmV0dXJuIG1lKz1OLExlKz1OLE1bU109e3dpZHRoOm1lLGhlaWdodDpMZX19LGttLmNhbGN1bGF0ZUxhYmVsQW5nbGU9ZnVuY3Rpb24oeCxtKXt2YXIgaz14Ll9wcml2YXRlLFM9ay5yc2NyYXRjaCxNPXguaXNFZGdlKCksTz1tP20rIi0iOiIiLE49eC5wc3R5bGUoTysidGV4dC1yb3RhdGlvbiIpLCQ9Ti5zdHJWYWx1ZTtyZXR1cm4gJD09PSJub25lIj8wOk0mJiQ9PT0iYXV0b3JvdGF0ZSI/Uy5sYWJlbEF1dG9BbmdsZTokPT09ImF1dG9yb3RhdGUiPzA6Ti5wZlZhbHVlfSxrbS5jYWxjdWxhdGVMYWJlbEFuZ2xlcz1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9eC5pc0VkZ2UoKSxTPXguX3ByaXZhdGUsTT1TLnJzY3JhdGNoO00ubGFiZWxBbmdsZT1tLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeCksayYmKE0uc291cmNlTGFiZWxBbmdsZT1tLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeCwic291cmNlIiksTS50YXJnZXRMYWJlbEFuZ2xlPW0uY2FsY3VsYXRlTGFiZWxBbmdsZSh4LCJ0YXJnZXQiKSl9O3ZhciBlej17fSx0ej0yOCxuej0hMTtlei5nZXROb2RlU2hhcGU9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcyxrPXgucHN0eWxlKCJzaGFwZSIpLnZhbHVlO2lmKGs9PT0iY3V0cmVjdGFuZ2xlIiYmKHgud2lkdGgoKTx0enx8eC5oZWlnaHQoKTx0eikpcmV0dXJuIG56fHwoaHUoIlRoZSBgY3V0cmVjdGFuZ2xlYCBub2RlIHNoYXBlIGNhbiBub3QgYmUgdXNlZCBhdCBzbWFsbCBzaXplcyBzbyBgcmVjdGFuZ2xlYCBpcyB1c2VkIGluc3RlYWQiKSxuej0hMCksInJlY3RhbmdsZSI7aWYoeC5pc1BhcmVudCgpKXJldHVybiBrPT09InJlY3RhbmdsZSJ8fGs9PT0icm91bmRyZWN0YW5nbGUifHxrPT09InJvdW5kLXJlY3RhbmdsZSJ8fGs9PT0iY3V0cmVjdGFuZ2xlInx8az09PSJjdXQtcmVjdGFuZ2xlInx8az09PSJiYXJyZWwiP2s6InJlY3RhbmdsZSI7aWYoaz09PSJwb2x5Z29uIil7dmFyIFM9eC5wc3R5bGUoInNoYXBlLXBvbHlnb24tcG9pbnRzIikudmFsdWU7cmV0dXJuIG0ubm9kZVNoYXBlcy5tYWtlUG9seWdvbihTKS5uYW1lfXJldHVybiBrfTt2YXIgS1M9e307S1MucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB4PXRoaXMuY3ksbT14LmNvbGxlY3Rpb24oKSxrPXRoaXMsUz1mdW5jdGlvbihOKXt2YXIgJD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7aWYobS5tZXJnZShOKSwkKWZvcih2YXIgSD0wO0g8Ti5sZW5ndGg7SCsrKXt2YXIgcT1OW0hdLFk9cS5fcHJpdmF0ZSxaPVkucnN0eWxlO1ouY2xlYW49ITEsWi5jbGVhbkNvbm5lY3RlZD0hMX19O2suYmluZGVyKHgpLm9uKCJib3VuZHMuKiBkaXJ0eS4qIixmdW5jdGlvbihOKXt2YXIgJD1OLnRhcmdldDtTKCQpfSkub24oInN0eWxlLiogYmFja2dyb3VuZC4qIixmdW5jdGlvbihOKXt2YXIgJD1OLnRhcmdldDtTKCQsITEpfSk7dmFyIE09ZnVuY3Rpb24oTil7aWYoTil7dmFyICQ9ay5vblVwZGF0ZUVsZUNhbGNzRm5zO20uY2xlYW5TdHlsZSgpO2Zvcih2YXIgSD0wO0g8bS5sZW5ndGg7SCsrKXt2YXIgcT1tW0hdLFk9cS5fcHJpdmF0ZS5yc3R5bGU7cS5pc05vZGUoKSYmIVkuY2xlYW5Db25uZWN0ZWQmJihTKHEuY29ubmVjdGVkRWRnZXMoKSksWS5jbGVhbkNvbm5lY3RlZD0hMCl9aWYoJClmb3IodmFyIFo9MDtaPCQubGVuZ3RoO1orKyl7dmFyIGNlPSRbWl07Y2UoTixtKX1rLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZShtKSxtPXguY29sbGVjdGlvbigpfX07ay5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZT1mdW5jdGlvbigpe00oITApfSxrLmJlZm9yZVJlbmRlcihNLGsuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVDYWxjcyl9LEtTLm9uVXBkYXRlRWxlQ2FsY3M9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zPXRoaXMub25VcGRhdGVFbGVDYWxjc0Zuc3x8W107bS5wdXNoKHgpfSxLUy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeCxtKXt2YXIgaz1mdW5jdGlvbihWZSl7cmV0dXJuIFZlLl9wcml2YXRlLnJzdHlsZS5jbGVhbkNvbm5lY3RlZH0sUz1bXSxNPVtdO2lmKCF0aGlzLmRlc3Ryb3llZCl7bT09PXZvaWQgMCYmKG09ITApO2Zvcih2YXIgTz0wO088eC5sZW5ndGg7TysrKXt2YXIgTj14W09dLCQ9Ti5fcHJpdmF0ZSxIPSQucnN0eWxlO04uaXNFZGdlKCkmJighayhOLnNvdXJjZSgpKXx8IWsoTi50YXJnZXQoKSkpJiYoSC5jbGVhbj0hMSksIShtJiZILmNsZWFufHxOLnJlbW92ZWQoKSkmJk4ucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSImJigkLmdyb3VwPT09Im5vZGVzIj9NLnB1c2goTik6Uy5wdXNoKE4pLEguY2xlYW49ITApfWZvcih2YXIgcT0wO3E8TS5sZW5ndGg7cSsrKXt2YXIgWT1NW3FdLFo9WS5fcHJpdmF0ZSxjZT1aLnJzdHlsZSx2ZT1ZLnBvc2l0aW9uKCk7dGhpcy5yZWNhbGN1bGF0ZU5vZGVMYWJlbFByb2plY3Rpb24oWSksY2Uubm9kZVg9dmUueCxjZS5ub2RlWT12ZS55LGNlLm5vZGVXPVkucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsY2Uubm9kZUg9WS5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9dGhpcy5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucyhTKTtmb3IodmFyIG1lPTA7bWU8Uy5sZW5ndGg7bWUrKyl7dmFyIExlPVNbbWVdLF9lPUxlLl9wcml2YXRlLEVlPV9lLnJzdHlsZSxCZT1fZS5yc2NyYXRjaDtFZS5zcmNYPUJlLmFycm93U3RhcnRYLEVlLnNyY1k9QmUuYXJyb3dTdGFydFksRWUudGd0WD1CZS5hcnJvd0VuZFgsRWUudGd0WT1CZS5hcnJvd0VuZFksRWUubWlkWD1CZS5taWRYLEVlLm1pZFk9QmUubWlkWSxFZS5sYWJlbEFuZ2xlPUJlLmxhYmVsQW5nbGUsRWUuc291cmNlTGFiZWxBbmdsZT1CZS5zb3VyY2VMYWJlbEFuZ2xlLEVlLnRhcmdldExhYmVsQW5nbGU9QmUudGFyZ2V0TGFiZWxBbmdsZX19fTt2YXIgV1M9e307V1MudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXM9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO2lmKHgpe3guZHJhZz1bXSx4Lm5vbmRyYWc9W107Zm9yKHZhciBtPVtdLGs9MDtrPHgubGVuZ3RoO2srKyl7dmFyIFM9eFtrXSxNPVMuX3ByaXZhdGUucnNjcmF0Y2g7Uy5ncmFiYmVkKCkmJiFTLmlzUGFyZW50KCk/bS5wdXNoKFMpOk0uaW5EcmFnTGF5ZXI/eC5kcmFnLnB1c2goUyk6eC5ub25kcmFnLnB1c2goUyl9Zm9yKHZhciBrPTA7azxtLmxlbmd0aDtrKyspe3ZhciBTPW1ba107eC5kcmFnLnB1c2goUyl9fX0sV1MuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKCl7dGhpcy5jYWNoZWRaU29ydGVkRWxlcz1udWxsfSxXUy5nZXRDYWNoZWRaU29ydGVkRWxlcz1mdW5jdGlvbih4KXtpZih4fHwhdGhpcy5jYWNoZWRaU29ydGVkRWxlcyl7dmFyIG09dGhpcy5jeS5tdXRhYmxlRWxlbWVudHMoKS50b0FycmF5KCk7bS5zb3J0KF9JKSxtLmludGVyYWN0aXZlPW0uZmlsdGVyKGZ1bmN0aW9uKGspe3JldHVybiBrLmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPW0sdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgbT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiBtfTt2YXIgcno9e307W3c1LFVTLFMxLGhrLEZJLGttLGV6LEtTLFdTXS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3l0KHJ6LHgpfSk7dmFyIGl6PXt9O2l6LmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKHgsbSxrKXt2YXIgUz10aGlzLE09Uy5pbWFnZUNhY2hlPVMuaW1hZ2VDYWNoZXx8e30sTz1NW3hdO2lmKE8pcmV0dXJuIE8uaW1hZ2UuY29tcGxldGV8fE8uaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsayksTy5pbWFnZTtPPU1beF09TVt4XXx8e307dmFyIE49Ty5pbWFnZT1uZXcgSW1hZ2U7Ti5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixrKSxOLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe04uZXJyb3I9ITB9KTt2YXIgJD0iZGF0YToiLEg9eC5zdWJzdHJpbmcoMCwkLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PSQ7cmV0dXJuIEh8fChtPW09PT0ibnVsbCI/bnVsbDptLE4uY3Jvc3NPcmlnaW49bSksTi5zcmM9eCxOfTt2YXIgYjg9e307YjgucmVnaXN0ZXJCaW5kaW5nPWZ1bmN0aW9uKHgsbSxrLFMpe3ZhciBNPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMsWzFdKSxPPXRoaXMuYmluZGVyKHgpO3JldHVybiBPLm9uLmFwcGx5KE8sTSl9LGI4LmJpbmRlcj1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9bS5jeS53aW5kb3coKSxTPXg9PT1rfHx4PT09ay5kb2N1bWVudHx8eD09PWsuZG9jdW1lbnQuYm9keXx8Q2UoeCk7aWYobS5zdXBwb3J0c1Bhc3NpdmVFdmVudHM9PW51bGwpe3ZhciBNPSExO3RyeXt2YXIgTz1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTT0hMCwhMH19KTtrLmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsTyl9Y2F0Y2h7fW0uc3VwcG9ydHNQYXNzaXZlRXZlbnRzPU19dmFyIE49ZnVuY3Rpb24oSCxxLFkpe3ZhciBaPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIFMmJm0uc3VwcG9ydHNQYXNzaXZlRXZlbnRzJiYoWlsyXT17Y2FwdHVyZTpZPz8hMSxwYXNzaXZlOiExLG9uY2U6ITF9KSxtLmJpbmRpbmdzLnB1c2goe3RhcmdldDp4LGFyZ3M6Wn0pLCh4LmFkZEV2ZW50TGlzdGVuZXJ8fHgub24pLmFwcGx5KHgsWiksdGhpc307cmV0dXJue29uOk4sYWRkRXZlbnRMaXN0ZW5lcjpOLGFkZExpc3RlbmVyOk4sYmluZDpOfX0sYjgubm9kZUlzRHJhZ2dhYmxlPWZ1bmN0aW9uKHgpe3JldHVybiB4JiZ4LmlzTm9kZSgpJiYheC5sb2NrZWQoKSYmeC5ncmFiYmFibGUoKX0sYjgubm9kZUlzR3JhYmJhYmxlPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLm5vZGVJc0RyYWdnYWJsZSh4KSYmeC5pbnRlcmFjdGl2ZSgpfSxiOC5sb2FkPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxtPXguY3kud2luZG93KCksaz1mdW5jdGlvbihHKXtyZXR1cm4gRy5zZWxlY3RlZCgpfSxTPWZ1bmN0aW9uKEcsSm4sa3IsbHIpe0c9PW51bGwmJihHPXguY3kpO2Zvcih2YXIgVnQ9MDtWdDxKbi5sZW5ndGg7VnQrKyl7dmFyIEhzPUpuW1Z0XTtHLmVtaXQoe29yaWdpbmFsRXZlbnQ6a3IsdHlwZTpIcyxwb3NpdGlvbjpscn0pfX0sTT1mdW5jdGlvbihHKXtyZXR1cm4gRy5zaGlmdEtleXx8Ry5tZXRhS2V5fHxHLmN0cmxLZXl9LE89ZnVuY3Rpb24oRyxKbil7dmFyIGtyPSEwO2lmKHguY3kuaGFzQ29tcG91bmROb2RlcygpJiZHJiZHLnBhbm5hYmxlKCkpZm9yKHZhciBscj0wO0puJiZscjxKbi5sZW5ndGg7bHIrKyl7dmFyIEc9Sm5bbHJdO2lmKEcuaXNOb2RlKCkmJkcuaXNQYXJlbnQoKSYmIUcucGFubmFibGUoKSl7a3I9ITE7YnJlYWt9fWVsc2Uga3I9ITA7cmV0dXJuIGtyfSxOPWZ1bmN0aW9uKEcpe0dbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMH0sJD1mdW5jdGlvbihHKXtHWzBdLl9wcml2YXRlLmdyYWJiZWQ9ITF9LEg9ZnVuY3Rpb24oRyl7R1swXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMH0scT1mdW5jdGlvbihHKXtHWzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyPSExfSxZPWZ1bmN0aW9uKEcpe0dbMF0uX3ByaXZhdGUucnNjcmF0Y2guaXNHcmFiVGFyZ2V0PSEwfSxaPWZ1bmN0aW9uKEcpe0dbMF0uX3ByaXZhdGUucnNjcmF0Y2guaXNHcmFiVGFyZ2V0PSExfSxjZT1mdW5jdGlvbihHLEpuKXt2YXIga3I9Sm4uYWRkVG9MaXN0LGxyPWtyLmhhcyhHKTshbHImJkcuZ3JhYmJhYmxlKCkmJiFHLmxvY2tlZCgpJiYoa3IubWVyZ2UoRyksTihHKSl9LHZlPWZ1bmN0aW9uKEcsSm4pe2lmKEcuY3koKS5oYXNDb21wb3VuZE5vZGVzKCkmJiEoSm4uaW5EcmFnTGF5ZXI9PW51bGwmJkpuLmFkZFRvTGlzdD09bnVsbCkpe3ZhciBrcj1HLmRlc2NlbmRhbnRzKCk7Sm4uaW5EcmFnTGF5ZXImJihrci5mb3JFYWNoKEgpLGtyLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChIKSksSm4uYWRkVG9MaXN0JiZjZShrcixKbil9fSxtZT1mdW5jdGlvbihHLEpuKXtKbj1Kbnx8e307dmFyIGtyPUcuY3koKS5oYXNDb21wb3VuZE5vZGVzKCk7Sm4uaW5EcmFnTGF5ZXImJihHLmZvckVhY2goSCksRy5uZWlnaGJvcmhvb2QoKS5zdGRGaWx0ZXIoZnVuY3Rpb24obHIpe3JldHVybiFrcnx8bHIuaXNFZGdlKCl9KS5mb3JFYWNoKEgpKSxKbi5hZGRUb0xpc3QmJkcuZm9yRWFjaChmdW5jdGlvbihscil7Y2UobHIsSm4pfSksdmUoRyxKbiksRWUoRyx7aW5EcmFnTGF5ZXI6Sm4uaW5EcmFnTGF5ZXJ9KSx4LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCl9LExlPW1lLF9lPWZ1bmN0aW9uKEcpe0cmJih4LmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuZm9yRWFjaChmdW5jdGlvbihKbil7JChKbikscShKbiksWihKbil9KSx4LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCkpfSxFZT1mdW5jdGlvbihHLEpuKXtpZighKEpuLmluRHJhZ0xheWVyPT1udWxsJiZKbi5hZGRUb0xpc3Q9PW51bGwpJiZHLmN5KCkuaGFzQ29tcG91bmROb2RlcygpKXt2YXIga3I9Ry5hbmNlc3RvcnMoKS5vcnBoYW5zKCk7aWYoIWtyLnNhbWUoRykpe3ZhciBscj1rci5kZXNjZW5kYW50cygpLnNwYXduU2VsZigpLm1lcmdlKGtyKS51bm1lcmdlKEcpLnVubWVyZ2UoRy5kZXNjZW5kYW50cygpKSxWdD1sci5jb25uZWN0ZWRFZGdlcygpO0puLmluRHJhZ0xheWVyJiYoVnQuZm9yRWFjaChIKSxsci5mb3JFYWNoKEgpKSxKbi5hZGRUb0xpc3QmJmxyLmZvckVhY2goZnVuY3Rpb24oSHMpe2NlKEhzLEpuKX0pfX19LEJlPWZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9bnVsbCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyIT1udWxsJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKX0sUmU9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8InUiLFZlPXR5cGVvZiBSZXNpemVPYnNlcnZlcjwidSI7UmU/KHgucmVtb3ZlT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24odHIpe2Zvcih2YXIgRz0wO0c8dHIubGVuZ3RoO0crKyl7dmFyIEpuPXRyW0ddLGtyPUpuLnJlbW92ZWROb2RlcztpZihrcilmb3IodmFyIGxyPTA7bHI8a3IubGVuZ3RoO2xyKyspe3ZhciBWdD1rcltscl07aWYoVnQ9PT14LmNvbnRhaW5lcil7eC5kZXN0cm95KCk7YnJlYWt9fX19KSx4LmNvbnRhaW5lci5wYXJlbnROb2RlJiZ4LnJlbW92ZU9ic2VydmVyLm9ic2VydmUoeC5jb250YWluZXIucGFyZW50Tm9kZSx7Y2hpbGRMaXN0OiEwfSkpOngucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJET01Ob2RlUmVtb3ZlZCIsZnVuY3Rpb24odHIpe3guZGVzdHJveSgpfSk7dmFyIGN0PU51KGZ1bmN0aW9uKCl7eC5jeS5yZXNpemUoKX0sMTAwKTtSZSYmKHguc3R5bGVPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihjdCkseC5zdHlsZU9ic2VydmVyLm9ic2VydmUoeC5jb250YWluZXIse2F0dHJpYnV0ZXM6ITB9KSkseC5yZWdpc3RlckJpbmRpbmcobSwicmVzaXplIixjdCksVmUmJih4LnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcihjdCkseC5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHguY29udGFpbmVyKSk7dmFyIHN0PWZ1bmN0aW9uKEcsSm4pe2Zvcig7RyE9bnVsbDspSm4oRyksRz1HLnBhcmVudE5vZGV9LFllPWZ1bmN0aW9uKCl7eC5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKX07c3QoeC5jb250YWluZXIsZnVuY3Rpb24odHIpe3gucmVnaXN0ZXJCaW5kaW5nKHRyLCJ0cmFuc2l0aW9uZW5kIixZZSkseC5yZWdpc3RlckJpbmRpbmcodHIsImFuaW1hdGlvbmVuZCIsWWUpLHgucmVnaXN0ZXJCaW5kaW5nKHRyLCJzY3JvbGwiLFllKX0pLHgucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24odHIpe3RyLnByZXZlbnREZWZhdWx0KCl9KTt2YXIgbXQ9ZnVuY3Rpb24oKXtyZXR1cm4geC5zZWxlY3Rpb25bNF0hPT0wfSxKZT1mdW5jdGlvbihHKXtmb3IodmFyIEpuPXguZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGtyPUpuWzBdLGxyPUpuWzFdLFZ0PUpuWzJdLEhzPUpuWzNdLHdyPUcudG91Y2hlcz9HLnRvdWNoZXM6W0ddLEVzPSExLGdvPTA7Z288d3IubGVuZ3RoO2dvKyspe3ZhciAkYz13cltnb107aWYoa3I8PSRjLmNsaWVudFgmJiRjLmNsaWVudFg8PWtyK1Z0JiZscjw9JGMuY2xpZW50WSYmJGMuY2xpZW50WTw9bHIrSHMpe0VzPSEwO2JyZWFrfX1pZighRXMpcmV0dXJuITE7Zm9yKHZhciB6YT14LmNvbnRhaW5lcixTYz1HLnRhcmdldCxiYT1TYy5wYXJlbnROb2RlLHhvPSExO2JhOyl7aWYoYmE9PT16YSl7eG89ITA7YnJlYWt9YmE9YmEucGFyZW50Tm9kZX1yZXR1cm4hIXhvfTt4LnJlZ2lzdGVyQmluZGluZyh4LmNvbnRhaW5lciwibW91c2Vkb3duIixmdW5jdGlvbihHKXtpZihKZShHKSl7Ry5wcmV2ZW50RGVmYXVsdCgpLEJlKCkseC5ob3ZlckRhdGEuY2FwdHVyZT0hMCx4LmhvdmVyRGF0YS53aGljaD1HLndoaWNoO3ZhciBKbj14LmN5LGtyPVtHLmNsaWVudFgsRy5jbGllbnRZXSxscj14LnByb2plY3RJbnRvVmlld3BvcnQoa3JbMF0sa3JbMV0pLFZ0PXguc2VsZWN0aW9uLEhzPXguZmluZE5lYXJlc3RFbGVtZW50cyhsclswXSxsclsxXSwhMCwhMSksd3I9SHNbMF0sRXM9eC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50czt4LmhvdmVyRGF0YS5tZG93blBvcz1scix4LmhvdmVyRGF0YS5tZG93bkdQb3M9a3I7dmFyIGdvPWZ1bmN0aW9uKCl7eC5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMSxjbGVhclRpbWVvdXQoeC5ob3ZlckRhdGEudGFwaG9sZFRpbWVvdXQpLHguaG92ZXJEYXRhLnRhcGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZigheC5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZCl7dmFyIGxoPXguaG92ZXJEYXRhLmRvd247bGg/bGguZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6InRhcGhvbGQiLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fSk6Sm4uZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6InRhcGhvbGQiLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fSl9fSx4LnRhcGhvbGREdXJhdGlvbil9O2lmKEcud2hpY2g9PTMpe3guaG92ZXJEYXRhLmN4dFN0YXJ0ZWQ9ITA7dmFyICRjPXtvcmlnaW5hbEV2ZW50OkcsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fTt3cj8od3IuYWN0aXZhdGUoKSx3ci5lbWl0KCRjKSx4LmhvdmVyRGF0YS5kb3duPXdyKTpKbi5lbWl0KCRjKSx4LmhvdmVyRGF0YS5kb3duVGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSx4LmhvdmVyRGF0YS5jeHREcmFnZ2VkPSExfWVsc2UgaWYoRy53aGljaD09MSl7d3ImJndyLmFjdGl2YXRlKCk7e2lmKHdyIT1udWxsJiZ4Lm5vZGVJc0dyYWJiYWJsZSh3cikpe3ZhciB6YT1mdW5jdGlvbihsaCl7cmV0dXJue29yaWdpbmFsRXZlbnQ6Ryx0eXBlOmxoLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fX0sU2M9ZnVuY3Rpb24obGgpe2xoLmVtaXQoemEoImdyYWIiKSl9O2lmKFkod3IpLCF3ci5zZWxlY3RlZCgpKUVzPXguZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM9Sm4uY29sbGVjdGlvbigpLExlKHdyLHthZGRUb0xpc3Q6RXN9KSx3ci5lbWl0KHphKCJncmFib24iKSkuZW1pdCh6YSgiZ3JhYiIpKTtlbHNle0VzPXguZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM9Sm4uY29sbGVjdGlvbigpO3ZhciBiYT1Kbi4kKGZ1bmN0aW9uKHhvKXtyZXR1cm4geG8uaXNOb2RlKCkmJnhvLnNlbGVjdGVkKCkmJngubm9kZUlzR3JhYmJhYmxlKHhvKX0pO21lKGJhLHthZGRUb0xpc3Q6RXN9KSx3ci5lbWl0KHphKCJncmFib24iKSksYmEuZm9yRWFjaChTYyl9eC5yZWRyYXdIaW50KCJlbGVzIiwhMCkseC5yZWRyYXdIaW50KCJkcmFnIiwhMCl9eC5ob3ZlckRhdGEuZG93bj13cix4LmhvdmVyRGF0YS5kb3ducz1Icyx4LmhvdmVyRGF0YS5kb3duVGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKX1TKHdyLFsibW91c2Vkb3duIiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sRyx7eDpsclswXSx5OmxyWzFdfSksd3I9PW51bGw/KFZ0WzRdPTEseC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXt4OmxyWzBdLHk6bHJbMV19LHgucmVkcmF3SGludCgic2VsZWN0IiwhMCkseC5yZWRyYXcoKSk6d3IucGFubmFibGUoKSYmKFZ0WzRdPTEpLGdvKCl9VnRbMF09VnRbMl09bHJbMF0sVnRbMV09VnRbM109bHJbMV19fSwhMSkseC5yZWdpc3RlckJpbmRpbmcobSwibW91c2Vtb3ZlIixmdW5jdGlvbihHKXt2YXIgSm49eC5ob3ZlckRhdGEuY2FwdHVyZTtpZighKCFKbiYmIUplKEcpKSl7dmFyIGtyPSExLGxyPXguY3ksVnQ9bHIuem9vbSgpLEhzPVtHLmNsaWVudFgsRy5jbGllbnRZXSx3cj14LnByb2plY3RJbnRvVmlld3BvcnQoSHNbMF0sSHNbMV0pLEVzPXguaG92ZXJEYXRhLm1kb3duUG9zLGdvPXguaG92ZXJEYXRhLm1kb3duR1BvcywkYz14LnNlbGVjdGlvbix6YT1udWxsOyF4LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF4LmhvdmVyRGF0YS5kcmFnZ2luZyYmIXguaG92ZXJEYXRhLnNlbGVjdGluZyYmKHphPXguZmluZE5lYXJlc3RFbGVtZW50KHdyWzBdLHdyWzFdLCEwLCExKSk7dmFyIFNjPXguaG92ZXJEYXRhLmxhc3QsYmE9eC5ob3ZlckRhdGEuZG93bix4bz1bd3JbMF0tJGNbMl0sd3JbMV0tJGNbM11dLGxoPXguZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMsV2w7aWYoZ28pe3ZhciBaMj1Ic1swXS1nb1swXSxlYj1aMipaMixHMD1Ic1sxXS1nb1sxXSx6cD1HMCpHMCxmZD1lYit6cDt4LmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnPVdsPWZkPj14LmRlc2t0b3BUYXBUaHJlc2hvbGQyfXZhciBXdj1NKEcpO1dsJiYoeC5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMCk7dmFyIHN5PWZ1bmN0aW9uKCl7dmFyIEVtPXguaG92ZXJEYXRhLmRyYWdEZWx0YT14LmhvdmVyRGF0YS5kcmFnRGVsdGF8fFtdO0VtLmxlbmd0aD09PTA/KEVtLnB1c2goeG9bMF0pLEVtLnB1c2goeG9bMV0pKTooRW1bMF0rPXhvWzBdLEVtWzFdKz14b1sxXSl9O2tyPSEwLFMoemEsWyJtb3VzZW1vdmUiLCJ2bW91c2Vtb3ZlIiwidGFwZHJhZyJdLEcse3g6d3JbMF0seTp3clsxXX0pO3ZhciBFOD1mdW5jdGlvbigpe3guZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseC5ob3ZlckRhdGEuc2VsZWN0aW5nfHxsci5lbWl0KHtvcmlnaW5hbEV2ZW50OkcsdHlwZToiYm94c3RhcnQiLHBvc2l0aW9uOnt4OndyWzBdLHk6d3JbMV19fSksJGNbNF09MSx4LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITAseC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx4LnJlZHJhdygpfTtpZih4LmhvdmVyRGF0YS53aGljaD09PTMpe2lmKFdsKXt2YXIgeDU9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDp3clswXSx5OndyWzFdfX07YmE/YmEuZW1pdCh4NSk6bHIuZW1pdCh4NSkseC5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMCwoIXguaG92ZXJEYXRhLmN4dE92ZXJ8fHphIT09eC5ob3ZlckRhdGEuY3h0T3ZlcikmJih4LmhvdmVyRGF0YS5jeHRPdmVyJiZ4LmhvdmVyRGF0YS5jeHRPdmVyLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHRkcmFnb3V0Iixwb3NpdGlvbjp7eDp3clswXSx5OndyWzFdfX0pLHguaG92ZXJEYXRhLmN4dE92ZXI9emEsemEmJnphLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHRkcmFnb3ZlciIscG9zaXRpb246e3g6d3JbMF0seTp3clsxXX19KSl9fWVsc2UgaWYoeC5ob3ZlckRhdGEuZHJhZ2dpbmcpe2lmKGtyPSEwLGxyLnBhbm5pbmdFbmFibGVkKCkmJmxyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgVDg7aWYoeC5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW4pe3ZhciBaUz14LmhvdmVyRGF0YS5tZG93blBvcztUOD17eDood3JbMF0tWlNbMF0pKlZ0LHk6KHdyWzFdLVpTWzFdKSpWdH0seC5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW49ITF9ZWxzZSBUOD17eDp4b1swXSpWdCx5OnhvWzFdKlZ0fTtsci5wYW5CeShUOCksbHIuZW1pdCgiZHJhZ3BhbiIpLHguaG92ZXJEYXRhLmRyYWdnZWQ9ITB9d3I9eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcuY2xpZW50WCxHLmNsaWVudFkpfWVsc2UgaWYoJGNbNF09PTEmJihiYT09bnVsbHx8YmEucGFubmFibGUoKSkpe2lmKFdsKXtpZigheC5ob3ZlckRhdGEuZHJhZ2dpbmcmJmxyLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmKFd2fHwhbHIucGFubmluZ0VuYWJsZWQoKXx8IWxyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKSlFOCgpO2Vsc2UgaWYoIXguaG92ZXJEYXRhLnNlbGVjdGluZyYmbHIucGFubmluZ0VuYWJsZWQoKSYmbHIudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBrNT1PKGJhLHguaG92ZXJEYXRhLmRvd25zKTtrNSYmKHguaG92ZXJEYXRhLmRyYWdnaW5nPSEwLHguaG92ZXJEYXRhLmp1c3RTdGFydGVkUGFuPSEwLCRjWzRdPTAseC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPUo3KEVzKSx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHgucmVkcmF3KCkpfWJhJiZiYS5wYW5uYWJsZSgpJiZiYS5hY3RpdmUoKSYmYmEudW5hY3RpdmF0ZSgpfX1lbHNle2lmKGJhJiZiYS5wYW5uYWJsZSgpJiZiYS5hY3RpdmUoKSYmYmEudW5hY3RpdmF0ZSgpLCghYmF8fCFiYS5ncmFiYmVkKCkpJiZ6YSE9U2MmJihTYyYmUyhTYyxbIm1vdXNlb3V0IiwidGFwZHJhZ291dCJdLEcse3g6d3JbMF0seTp3clsxXX0pLHphJiZTKHphLFsibW91c2VvdmVyIiwidGFwZHJhZ292ZXIiXSxHLHt4OndyWzBdLHk6d3JbMV19KSx4LmhvdmVyRGF0YS5sYXN0PXphKSxiYSlpZihXbCl7aWYobHIuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZXdiliYSYmYmEuZ3JhYmJlZCgpJiYoX2UobGgpLGJhLmVtaXQoImZyZWVvbiIpLGxoLmVtaXQoImZyZWUiKSx4LmRyYWdEYXRhLmRpZERyYWcmJihiYS5lbWl0KCJkcmFnZnJlZW9uIiksbGguZW1pdCgiZHJhZ2ZyZWUiKSkpLEU4KCk7ZWxzZSBpZihiYSYmYmEuZ3JhYmJlZCgpJiZ4Lm5vZGVJc0RyYWdnYWJsZShiYSkpe3ZhciBRZD0heC5kcmFnRGF0YS5kaWREcmFnO1FkJiZ4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx4LmRyYWdEYXRhLmRpZERyYWc9ITAseC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxtZShsaCx7aW5EcmFnTGF5ZXI6ITB9KTt2YXIgXzE9e3g6MCx5OjB9O2lmKFgoeG9bMF0pJiZYKHhvWzFdKSYmKF8xLngrPXhvWzBdLF8xLnkrPXhvWzFdLFFkKSl7dmFyIEpkPXguaG92ZXJEYXRhLmRyYWdEZWx0YTtKZCYmWChKZFswXSkmJlgoSmRbMV0pJiYoXzEueCs9SmRbMF0sXzEueSs9SmRbMV0pfXguaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCxsaC5zaWxlbnRTaGlmdChfMSkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHgucmVkcmF3SGludCgiZHJhZyIsITApLHgucmVkcmF3KCl9fWVsc2Ugc3koKTtrcj0hMH1pZigkY1syXT13clswXSwkY1szXT13clsxXSxrcilyZXR1cm4gRy5zdG9wUHJvcGFnYXRpb24mJkcuc3RvcFByb3BhZ2F0aW9uKCksRy5wcmV2ZW50RGVmYXVsdCYmRy5wcmV2ZW50RGVmYXVsdCgpLCExfX0sITEpO3ZhciBMdCxNdCx1dDt4LnJlZ2lzdGVyQmluZGluZyhtLCJtb3VzZXVwIixmdW5jdGlvbihHKXt2YXIgSm49eC5ob3ZlckRhdGEuY2FwdHVyZTtpZihKbil7eC5ob3ZlckRhdGEuY2FwdHVyZT0hMTt2YXIga3I9eC5jeSxscj14LnByb2plY3RJbnRvVmlld3BvcnQoRy5jbGllbnRYLEcuY2xpZW50WSksVnQ9eC5zZWxlY3Rpb24sSHM9eC5maW5kTmVhcmVzdEVsZW1lbnQobHJbMF0sbHJbMV0sITAsITEpLHdyPXguZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMsRXM9eC5ob3ZlckRhdGEuZG93bixnbz1NKEcpO2lmKHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiYmKHgucmVkcmF3SGludCgic2VsZWN0IiwhMCkseC5yZWRyYXcoKSkseC5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMCx4LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLEVzJiZFcy51bmFjdGl2YXRlKCkseC5ob3ZlckRhdGEud2hpY2g9PT0zKXt2YXIgJGM9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fTtpZihFcz9Fcy5lbWl0KCRjKTprci5lbWl0KCRjKSwheC5ob3ZlckRhdGEuY3h0RHJhZ2dlZCl7dmFyIHphPXtvcmlnaW5hbEV2ZW50OkcsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDpsclswXSx5OmxyWzFdfX07RXM/RXMuZW1pdCh6YSk6a3IuZW1pdCh6YSl9eC5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMSx4LmhvdmVyRGF0YS53aGljaD1udWxsfWVsc2UgaWYoeC5ob3ZlckRhdGEud2hpY2g9PT0xKXtpZihTKEhzLFsibW91c2V1cCIsInRhcGVuZCIsInZtb3VzZXVwIl0sRyx7eDpsclswXSx5OmxyWzFdfSksIXguZHJhZ0RhdGEuZGlkRHJhZyYmIXguaG92ZXJEYXRhLmRyYWdnZWQmJiF4LmhvdmVyRGF0YS5zZWxlY3RpbmcmJiF4LmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnJiYoUyhFcyxbImNsaWNrIiwidGFwIiwidmNsaWNrIl0sRyx7eDpsclswXSx5OmxyWzFdfSksTXQ9ITEsRy50aW1lU3RhbXAtdXQ8PWtyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oTHQmJmNsZWFyVGltZW91dChMdCksTXQ9ITAsdXQ9bnVsbCxTKEVzLFsiZGJsY2xpY2siLCJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxHLHt4OmxyWzBdLHk6bHJbMV19KSk6KEx0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtNdHx8UyhFcyxbIm9uZWNsaWNrIiwib25ldGFwIiwidm9uZWNsaWNrIl0sRyx7eDpsclswXSx5OmxyWzFdfSl9LGtyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksdXQ9Ry50aW1lU3RhbXApKSxFcz09bnVsbCYmIXguZHJhZ0RhdGEuZGlkRHJhZyYmIXguaG92ZXJEYXRhLnNlbGVjdGluZyYmIXguaG92ZXJEYXRhLmRyYWdnZWQmJiFNKEcpJiYoa3IuJChrKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLHdyLmxlbmd0aD4wJiZ4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx4LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPXdyPWtyLmNvbGxlY3Rpb24oKSksSHM9PUVzJiYheC5kcmFnRGF0YS5kaWREcmFnJiYheC5ob3ZlckRhdGEuc2VsZWN0aW5nJiZIcyE9bnVsbCYmSHMuX3ByaXZhdGUuc2VsZWN0YWJsZSYmKHguaG92ZXJEYXRhLmRyYWdnaW5nfHwoa3Iuc2VsZWN0aW9uVHlwZSgpPT09ImFkZGl0aXZlInx8Z28/SHMuc2VsZWN0ZWQoKT9Icy51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pOkhzLnNlbGVjdChbInRhcHNlbGVjdCJdKTpnb3x8KGtyLiQoaykudW5tZXJnZShIcykudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSxIcy5zZWxlY3QoWyJ0YXBzZWxlY3QiXSkpKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSkseC5ob3ZlckRhdGEuc2VsZWN0aW5nKXt2YXIgU2M9a3IuY29sbGVjdGlvbih4LmdldEFsbEluQm94KFZ0WzBdLFZ0WzFdLFZ0WzJdLFZ0WzNdKSk7eC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSxTYy5sZW5ndGg+MCYmeC5yZWRyYXdIaW50KCJlbGVzIiwhMCksa3IuZW1pdCh7dHlwZToiYm94ZW5kIixvcmlnaW5hbEV2ZW50OkcscG9zaXRpb246e3g6bHJbMF0seTpsclsxXX19KTt2YXIgYmE9ZnVuY3Rpb24oV2wpe3JldHVybiBXbC5zZWxlY3RhYmxlKCkmJiFXbC5zZWxlY3RlZCgpfTtrci5zZWxlY3Rpb25UeXBlKCk9PT0iYWRkaXRpdmUifHxnb3x8a3IuJChrKS51bm1lcmdlKFNjKS51bnNlbGVjdCgpLFNjLmVtaXQoImJveCIpLnN0ZEZpbHRlcihiYSkuc2VsZWN0KCkuZW1pdCgiYm94c2VsZWN0IikseC5yZWRyYXcoKX1pZih4LmhvdmVyRGF0YS5kcmFnZ2luZyYmKHguaG92ZXJEYXRhLmRyYWdnaW5nPSExLHgucmVkcmF3SGludCgic2VsZWN0IiwhMCkseC5yZWRyYXdIaW50KCJlbGVzIiwhMCkseC5yZWRyYXcoKSksIVZ0WzRdKXt4LnJlZHJhd0hpbnQoImRyYWciLCEwKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKTt2YXIgeG89RXMmJkVzLmdyYWJiZWQoKTtfZSh3cikseG8mJihFcy5lbWl0KCJmcmVlb24iKSx3ci5lbWl0KCJmcmVlIikseC5kcmFnRGF0YS5kaWREcmFnJiYoRXMuZW1pdCgiZHJhZ2ZyZWVvbiIpLHdyLmVtaXQoImRyYWdmcmVlIikpKX19VnRbNF09MCx4LmhvdmVyRGF0YS5kb3duPW51bGwseC5ob3ZlckRhdGEuY3h0U3RhcnRlZD0hMSx4LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITEseC5ob3ZlckRhdGEuc2VsZWN0aW5nPSExLHguaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9ITEseC5kcmFnRGF0YS5kaWREcmFnPSExLHguaG92ZXJEYXRhLmRyYWdnZWQ9ITEseC5ob3ZlckRhdGEuZHJhZ0RlbHRhPVtdLHguaG92ZXJEYXRhLm1kb3duUG9zPW51bGwseC5ob3ZlckRhdGEubWRvd25HUG9zPW51bGx9fSwhMSk7dmFyIFd0PWZ1bmN0aW9uKEcpe2lmKCF4LnNjcm9sbGluZ1BhZ2Upe3ZhciBKbj14LmN5LGtyPUpuLnpvb20oKSxscj1Kbi5wYW4oKSxWdD14LnByb2plY3RJbnRvVmlld3BvcnQoRy5jbGllbnRYLEcuY2xpZW50WSksSHM9W1Z0WzBdKmtyK2xyLngsVnRbMV0qa3IrbHIueV07aWYoeC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHx4LmhvdmVyRGF0YS5kcmFnZ2luZ3x8eC5ob3ZlckRhdGEuY3h0U3RhcnRlZHx8bXQoKSl7Ry5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pZihKbi5wYW5uaW5nRW5hYmxlZCgpJiZKbi51c2VyUGFubmluZ0VuYWJsZWQoKSYmSm4uem9vbWluZ0VuYWJsZWQoKSYmSm4udXNlclpvb21pbmdFbmFibGVkKCkpe0cucHJldmVudERlZmF1bHQoKSx4LmRhdGEud2hlZWxab29taW5nPSEwLGNsZWFyVGltZW91dCh4LmRhdGEud2hlZWxUaW1lb3V0KSx4LmRhdGEud2hlZWxUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt4LmRhdGEud2hlZWxab29taW5nPSExLHgucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3KCl9LDE1MCk7dmFyIHdyO0cuZGVsdGFZIT1udWxsP3dyPUcuZGVsdGFZLy0yNTA6Ry53aGVlbERlbHRhWSE9bnVsbD93cj1HLndoZWVsRGVsdGFZLzFlMzp3cj1HLndoZWVsRGVsdGEvMWUzLHdyPXdyKngud2hlZWxTZW5zaXRpdml0eTt2YXIgRXM9Ry5kZWx0YU1vZGU9PT0xO0VzJiYod3IqPTMzKTt2YXIgZ289Sm4uem9vbSgpKk1hdGgucG93KDEwLHdyKTtHLnR5cGU9PT0iZ2VzdHVyZWNoYW5nZSImJihnbz14Lmdlc3R1cmVTdGFydFpvb20qRy5zY2FsZSksSm4uem9vbSh7bGV2ZWw6Z28scmVuZGVyZWRQb3NpdGlvbjp7eDpIc1swXSx5OkhzWzFdfX0pLEpuLmVtaXQoRy50eXBlPT09Imdlc3R1cmVjaGFuZ2UiPyJwaW5jaHpvb20iOiJzY3JvbGx6b29tIil9fX07eC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsIndoZWVsIixXdCwhMCkseC5yZWdpc3RlckJpbmRpbmcobSwic2Nyb2xsIixmdW5jdGlvbihHKXt4LnNjcm9sbGluZ1BhZ2U9ITAsY2xlYXJUaW1lb3V0KHguc2Nyb2xsaW5nUGFnZVRpbWVvdXQpLHguc2Nyb2xsaW5nUGFnZVRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3guc2Nyb2xsaW5nUGFnZT0hMX0sMjUwKX0sITApLHgucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJnZXN0dXJlc3RhcnQiLGZ1bmN0aW9uKEcpe3guZ2VzdHVyZVN0YXJ0Wm9vbT14LmN5Lnpvb20oKSx4Lmhhc1RvdWNoU3RhcnRlZHx8Ry5wcmV2ZW50RGVmYXVsdCgpfSwhMCkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsImdlc3R1cmVjaGFuZ2UiLGZ1bmN0aW9uKHRyKXt4Lmhhc1RvdWNoU3RhcnRlZHx8V3QodHIpfSwhMCkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsIm1vdXNlb3V0IixmdW5jdGlvbihHKXt2YXIgSm49eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcuY2xpZW50WCxHLmNsaWVudFkpO3guY3kuZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6Im1vdXNlb3V0Iixwb3NpdGlvbjp7eDpKblswXSx5OkpuWzFdfX0pfSwhMSkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsIm1vdXNlb3ZlciIsZnVuY3Rpb24oRyl7dmFyIEpuPXgucHJvamVjdEludG9WaWV3cG9ydChHLmNsaWVudFgsRy5jbGllbnRZKTt4LmN5LmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJtb3VzZW92ZXIiLHBvc2l0aW9uOnt4OkpuWzBdLHk6Sm5bMV19fSl9LCExKTt2YXIgVHQsX24saG4sWXQsRG4saXIsdnIsTm4scHIsRXIsTXIsQ3IsT3IsV249ZnVuY3Rpb24oRyxKbixrcixscil7cmV0dXJuIE1hdGguc3FydCgoa3ItRykqKGtyLUcpKyhsci1KbikqKGxyLUpuKSl9LGJyPWZ1bmN0aW9uKEcsSm4sa3IsbHIpe3JldHVybihrci1HKSooa3ItRykrKGxyLUpuKSoobHItSm4pfSxTcjt4LnJlZ2lzdGVyQmluZGluZyh4LmNvbnRhaW5lciwidG91Y2hzdGFydCIsU3I9ZnVuY3Rpb24oRyl7aWYoeC5oYXNUb3VjaFN0YXJ0ZWQ9ITAsISFKZShHKSl7QmUoKSx4LnRvdWNoRGF0YS5jYXB0dXJlPSEwLHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDA7dmFyIEpuPXguY3ksa3I9eC50b3VjaERhdGEubm93LGxyPXgudG91Y2hEYXRhLmVhcmxpZXI7aWYoRy50b3VjaGVzWzBdKXt2YXIgVnQ9eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcudG91Y2hlc1swXS5jbGllbnRYLEcudG91Y2hlc1swXS5jbGllbnRZKTtrclswXT1WdFswXSxrclsxXT1WdFsxXX1pZihHLnRvdWNoZXNbMV0pe3ZhciBWdD14LnByb2plY3RJbnRvVmlld3BvcnQoRy50b3VjaGVzWzFdLmNsaWVudFgsRy50b3VjaGVzWzFdLmNsaWVudFkpO2tyWzJdPVZ0WzBdLGtyWzNdPVZ0WzFdfWlmKEcudG91Y2hlc1syXSl7dmFyIFZ0PXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMl0uY2xpZW50WCxHLnRvdWNoZXNbMl0uY2xpZW50WSk7a3JbNF09VnRbMF0sa3JbNV09VnRbMV19aWYoRy50b3VjaGVzWzFdKXt4LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwLF9lKHguZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyk7dmFyIEhzPXguZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpO3ByPUhzWzBdLEVyPUhzWzFdLE1yPUhzWzJdLENyPUhzWzNdLFR0PUcudG91Y2hlc1swXS5jbGllbnRYLXByLF9uPUcudG91Y2hlc1swXS5jbGllbnRZLUVyLGhuPUcudG91Y2hlc1sxXS5jbGllbnRYLXByLFl0PUcudG91Y2hlc1sxXS5jbGllbnRZLUVyLE9yPTA8PVR0JiZUdDw9TXImJjA8PWhuJiZobjw9TXImJjA8PV9uJiZfbjw9Q3ImJjA8PVl0JiZZdDw9Q3I7dmFyIHdyPUpuLnBhbigpLEVzPUpuLnpvb20oKTtEbj1XbihUdCxfbixobixZdCksaXI9YnIoVHQsX24saG4sWXQpLHZyPVsoVHQraG4pLzIsKF9uK1l0KS8yXSxObj1bKHZyWzBdLXdyLngpL0VzLCh2clsxXS13ci55KS9Fc107dmFyIGdvPTIwMCwkYz1nbypnbztpZihpcjwkYyYmIUcudG91Y2hlc1syXSl7dmFyIHphPXguZmluZE5lYXJlc3RFbGVtZW50KGtyWzBdLGtyWzFdLCEwLCEwKSxTYz14LmZpbmROZWFyZXN0RWxlbWVudChrclsyXSxrclszXSwhMCwhMCk7emEmJnphLmlzTm9kZSgpPyh6YS5hY3RpdmF0ZSgpLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6a3JbMF0seTprclsxXX19KSx4LnRvdWNoRGF0YS5zdGFydD16YSk6U2MmJlNjLmlzTm9kZSgpPyhTYy5hY3RpdmF0ZSgpLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6a3JbMF0seTprclsxXX19KSx4LnRvdWNoRGF0YS5zdGFydD1TYyk6Sm4uZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6ImN4dHRhcHN0YXJ0Iixwb3NpdGlvbjp7eDprclswXSx5OmtyWzFdfX0pLHgudG91Y2hEYXRhLnN0YXJ0JiYoeC50b3VjaERhdGEuc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZD0hMSkseC50b3VjaERhdGEuY3h0PSEwLHgudG91Y2hEYXRhLmN4dERyYWdnZWQ9ITEseC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhdygpO3JldHVybn19aWYoRy50b3VjaGVzWzJdKUpuLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmRy5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYoIUcudG91Y2hlc1sxXSl7aWYoRy50b3VjaGVzWzBdKXt2YXIgYmE9eC5maW5kTmVhcmVzdEVsZW1lbnRzKGtyWzBdLGtyWzFdLCEwLCEwKSx4bz1iYVswXTtpZih4byE9bnVsbCYmKHhvLmFjdGl2YXRlKCkseC50b3VjaERhdGEuc3RhcnQ9eG8seC50b3VjaERhdGEuc3RhcnRzPWJhLHgubm9kZUlzR3JhYmJhYmxlKHhvKSkpe3ZhciBsaD14LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM9Sm4uY29sbGVjdGlvbigpLFdsPW51bGw7eC5yZWRyYXdIaW50KCJlbGVzIiwhMCkseC5yZWRyYXdIaW50KCJkcmFnIiwhMCkseG8uc2VsZWN0ZWQoKT8oV2w9Sm4uJChmdW5jdGlvbihmZCl7cmV0dXJuIGZkLnNlbGVjdGVkKCkmJngubm9kZUlzR3JhYmJhYmxlKGZkKX0pLG1lKFdsLHthZGRUb0xpc3Q6bGh9KSk6TGUoeG8se2FkZFRvTGlzdDpsaH0pLFkoeG8pO3ZhciBaMj1mdW5jdGlvbihXdil7cmV0dXJue29yaWdpbmFsRXZlbnQ6Ryx0eXBlOld2LHBvc2l0aW9uOnt4OmtyWzBdLHk6a3JbMV19fX07eG8uZW1pdChaMigiZ3JhYm9uIikpLFdsP1dsLmZvckVhY2goZnVuY3Rpb24oZmQpe2ZkLmVtaXQoWjIoImdyYWIiKSl9KTp4by5lbWl0KFoyKCJncmFiIikpfVMoeG8sWyJ0b3VjaHN0YXJ0IiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sRyx7eDprclswXSx5OmtyWzFdfSkseG89PW51bGwmJih4LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249e3g6VnRbMF0seTpWdFsxXX0seC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx4LnJlZHJhdygpKSx4LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSExLHgudG91Y2hEYXRhLnNpbmdsZVRvdWNoU3RhcnRUaW1lPStuZXcgRGF0ZSxjbGVhclRpbWVvdXQoeC50b3VjaERhdGEudGFwaG9sZFRpbWVvdXQpLHgudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt4LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPT09ITEmJiF4LnBpbmNoaW5nJiYheC50b3VjaERhdGEuc2VsZWN0aW5nJiZTKHgudG91Y2hEYXRhLnN0YXJ0LFsidGFwaG9sZCJdLEcse3g6a3JbMF0seTprclsxXX0pfSx4LnRhcGhvbGREdXJhdGlvbil9fWlmKEcudG91Y2hlcy5sZW5ndGg+PTEpe2Zvcih2YXIgZWI9eC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbj1bbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLEcwPTA7RzA8a3IubGVuZ3RoO0cwKyspZWJbRzBdPWxyW0cwXT1rcltHMF07dmFyIHpwPUcudG91Y2hlc1swXTt4LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1benAuY2xpZW50WCx6cC5jbGllbnRZXX19fSwhMSk7dmFyIE5yO3gucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywidG91Y2htb3ZlIixOcj1mdW5jdGlvbihHKXt2YXIgSm49eC50b3VjaERhdGEuY2FwdHVyZTtpZighKCFKbiYmIUplKEcpKSl7dmFyIGtyPXguc2VsZWN0aW9uLGxyPXguY3ksVnQ9eC50b3VjaERhdGEubm93LEhzPXgudG91Y2hEYXRhLmVhcmxpZXIsd3I9bHIuem9vbSgpO2lmKEcudG91Y2hlc1swXSl7dmFyIEVzPXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMF0uY2xpZW50WCxHLnRvdWNoZXNbMF0uY2xpZW50WSk7VnRbMF09RXNbMF0sVnRbMV09RXNbMV19aWYoRy50b3VjaGVzWzFdKXt2YXIgRXM9eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcudG91Y2hlc1sxXS5jbGllbnRYLEcudG91Y2hlc1sxXS5jbGllbnRZKTtWdFsyXT1Fc1swXSxWdFszXT1Fc1sxXX1pZihHLnRvdWNoZXNbMl0pe3ZhciBFcz14LnByb2plY3RJbnRvVmlld3BvcnQoRy50b3VjaGVzWzJdLmNsaWVudFgsRy50b3VjaGVzWzJdLmNsaWVudFkpO1Z0WzRdPUVzWzBdLFZ0WzVdPUVzWzFdfXZhciBnbz14LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbiwkYztpZihKbiYmRy50b3VjaGVzWzBdJiZnbyl7Zm9yKHZhciB6YT1bXSxTYz0wO1NjPFZ0Lmxlbmd0aDtTYysrKXphW1NjXT1WdFtTY10tSHNbU2NdO3ZhciBiYT1HLnRvdWNoZXNbMF0uY2xpZW50WC1nb1swXSx4bz1iYSpiYSxsaD1HLnRvdWNoZXNbMF0uY2xpZW50WS1nb1sxXSxXbD1saCpsaCxaMj14bytXbDskYz1aMj49eC50b3VjaFRhcFRocmVzaG9sZDJ9aWYoSm4mJngudG91Y2hEYXRhLmN4dCl7Ry5wcmV2ZW50RGVmYXVsdCgpO3ZhciBlYj1HLnRvdWNoZXNbMF0uY2xpZW50WC1wcixHMD1HLnRvdWNoZXNbMF0uY2xpZW50WS1Fcix6cD1HLnRvdWNoZXNbMV0uY2xpZW50WC1wcixmZD1HLnRvdWNoZXNbMV0uY2xpZW50WS1FcixXdj1icihlYixHMCx6cCxmZCksc3k9V3YvaXIsRTg9MTUwLHg1PUU4KkU4LFQ4PTEuNSxaUz1UOCpUODtpZihzeT49WlN8fFd2Pj14NSl7eC50b3VjaERhdGEuY3h0PSExLHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgazU9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4OlZ0WzBdLHk6VnRbMV19fTt4LnRvdWNoRGF0YS5zdGFydD8oeC50b3VjaERhdGEuc3RhcnQudW5hY3RpdmF0ZSgpLmVtaXQoazUpLHgudG91Y2hEYXRhLnN0YXJ0PW51bGwpOmxyLmVtaXQoazUpfX1pZihKbiYmeC50b3VjaERhdGEuY3h0KXt2YXIgazU9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDpWdFswXSx5OlZ0WzFdfX07eC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHgudG91Y2hEYXRhLnN0YXJ0P3gudG91Y2hEYXRhLnN0YXJ0LmVtaXQoazUpOmxyLmVtaXQoazUpLHgudG91Y2hEYXRhLnN0YXJ0JiYoeC50b3VjaERhdGEuc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZD0hMSkseC50b3VjaERhdGEuY3h0RHJhZ2dlZD0hMDt2YXIgUWQ9eC5maW5kTmVhcmVzdEVsZW1lbnQoVnRbMF0sVnRbMV0sITAsITApOygheC50b3VjaERhdGEuY3h0T3Zlcnx8UWQhPT14LnRvdWNoRGF0YS5jeHRPdmVyKSYmKHgudG91Y2hEYXRhLmN4dE92ZXImJngudG91Y2hEYXRhLmN4dE92ZXIuZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6ImN4dGRyYWdvdXQiLHBvc2l0aW9uOnt4OlZ0WzBdLHk6VnRbMV19fSkseC50b3VjaERhdGEuY3h0T3Zlcj1RZCxRZCYmUWQuZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6ImN4dGRyYWdvdmVyIixwb3NpdGlvbjp7eDpWdFswXSx5OlZ0WzFdfX0pKX1lbHNlIGlmKEpuJiZHLnRvdWNoZXNbMl0mJmxyLmJveFNlbGVjdGlvbkVuYWJsZWQoKSlHLnByZXZlbnREZWZhdWx0KCkseC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0aGlzLmxhc3RUaHJlZVRvdWNoPStuZXcgRGF0ZSx4LnRvdWNoRGF0YS5zZWxlY3Rpbmd8fGxyLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6VnRbMF0seTpWdFsxXX19KSx4LnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITAseC50b3VjaERhdGEuZGlkU2VsZWN0PSEwLGtyWzRdPTEsIWtyfHxrci5sZW5ndGg9PT0wfHxrclswXT09PXZvaWQgMD8oa3JbMF09KFZ0WzBdK1Z0WzJdK1Z0WzRdKS8zLGtyWzFdPShWdFsxXStWdFszXStWdFs1XSkvMyxrclsyXT0oVnRbMF0rVnRbMl0rVnRbNF0pLzMrMSxrclszXT0oVnRbMV0rVnRbM10rVnRbNV0pLzMrMSk6KGtyWzJdPShWdFswXStWdFsyXStWdFs0XSkvMyxrclszXT0oVnRbMV0rVnRbM10rVnRbNV0pLzMpLHgucmVkcmF3SGludCgic2VsZWN0IiwhMCkseC5yZWRyYXcoKTtlbHNlIGlmKEpuJiZHLnRvdWNoZXNbMV0mJiF4LnRvdWNoRGF0YS5kaWRTZWxlY3QmJmxyLnpvb21pbmdFbmFibGVkKCkmJmxyLnBhbm5pbmdFbmFibGVkKCkmJmxyLnVzZXJab29taW5nRW5hYmxlZCgpJiZsci51c2VyUGFubmluZ0VuYWJsZWQoKSl7Ry5wcmV2ZW50RGVmYXVsdCgpLHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgXzE9eC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKF8xKXt4LnJlZHJhd0hpbnQoImRyYWciLCEwKTtmb3IodmFyIEpkPTA7SmQ8XzEubGVuZ3RoO0pkKyspe3ZhciBZdj1fMVtKZF0uX3ByaXZhdGU7WXYuZ3JhYmJlZD0hMSxZdi5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMX19dmFyIEVtPXgudG91Y2hEYXRhLnN0YXJ0LGViPUcudG91Y2hlc1swXS5jbGllbnRYLXByLEcwPUcudG91Y2hlc1swXS5jbGllbnRZLUVyLHpwPUcudG91Y2hlc1sxXS5jbGllbnRYLXByLGZkPUcudG91Y2hlc1sxXS5jbGllbnRZLUVyLEx6PVduKGViLEcwLHpwLGZkKSxMaWU9THovRG47aWYoT3Ipe3ZhciBNaWU9ZWItVHQsZV89RzAtX24sRGllPXpwLWhuLElpZT1mZC1ZdCxFNT0oTWllK0RpZSkvMixNej0oZV8rSWllKS8yLHlrPWxyLnpvb20oKSxVST15aypMaWUsdF89bHIucGFuKCksRHo9Tm5bMF0qeWsrdF8ueCxJej1OblsxXSp5ayt0Xy55LE9pZT17eDotVUkveWsqKER6LXRfLngtRTUpK0R6LHk6LVVJL3lrKihJei10Xy55LU16KStJen07aWYoRW0mJkVtLmFjdGl2ZSgpKXt2YXIgXzE9eC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO19lKF8xKSx4LnJlZHJhd0hpbnQoImRyYWciLCEwKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxFbS51bmFjdGl2YXRlKCkuZW1pdCgiZnJlZW9uIiksXzEuZW1pdCgiZnJlZSIpLHguZHJhZ0RhdGEuZGlkRHJhZyYmKEVtLmVtaXQoImRyYWdmcmVlb24iKSxfMS5lbWl0KCJkcmFnZnJlZSIpKX1sci52aWV3cG9ydCh7em9vbTpVSSxwYW46T2llLGNhbmNlbE9uRmFpbGVkWm9vbTohMH0pLGxyLmVtaXQoInBpbmNoem9vbSIpLERuPUx6LFR0PWViLF9uPUcwLGhuPXpwLFl0PWZkLHgucGluY2hpbmc9ITB9aWYoRy50b3VjaGVzWzBdKXt2YXIgRXM9eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcudG91Y2hlc1swXS5jbGllbnRYLEcudG91Y2hlc1swXS5jbGllbnRZKTtWdFswXT1Fc1swXSxWdFsxXT1Fc1sxXX1pZihHLnRvdWNoZXNbMV0pe3ZhciBFcz14LnByb2plY3RJbnRvVmlld3BvcnQoRy50b3VjaGVzWzFdLmNsaWVudFgsRy50b3VjaGVzWzFdLmNsaWVudFkpO1Z0WzJdPUVzWzBdLFZ0WzNdPUVzWzFdfWlmKEcudG91Y2hlc1syXSl7dmFyIEVzPXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMl0uY2xpZW50WCxHLnRvdWNoZXNbMl0uY2xpZW50WSk7VnRbNF09RXNbMF0sVnRbNV09RXNbMV19fWVsc2UgaWYoRy50b3VjaGVzWzBdJiYheC50b3VjaERhdGEuZGlkU2VsZWN0KXt2YXIgcXA9eC50b3VjaERhdGEuc3RhcnQsbl89eC50b3VjaERhdGEubGFzdCxRZDtpZigheC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzJiYheC5zd2lwZVBhbm5pbmcmJihRZD14LmZpbmROZWFyZXN0RWxlbWVudChWdFswXSxWdFsxXSwhMCwhMCkpLEpuJiZxcCE9bnVsbCYmRy5wcmV2ZW50RGVmYXVsdCgpLEpuJiZxcCE9bnVsbCYmeC5ub2RlSXNEcmFnZ2FibGUocXApKWlmKCRjKXt2YXIgXzE9eC5kcmFnRGF0YS50b3VjaERyYWdFbGVzLEdJPSF4LmRyYWdEYXRhLmRpZERyYWc7R0kmJm1lKF8xLHtpbkRyYWdMYXllcjohMH0pLHguZHJhZ0RhdGEuZGlkRHJhZz0hMDt2YXIgVG09e3g6MCx5OjB9O2lmKFgoemFbMF0pJiZYKHphWzFdKSYmKFRtLngrPXphWzBdLFRtLnkrPXphWzFdLEdJKSl7eC5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIFpkPXgudG91Y2hEYXRhLmRyYWdEZWx0YTtaZCYmWChaZFswXSkmJlgoWmRbMV0pJiYoVG0ueCs9WmRbMF0sVG0ueSs9WmRbMV0pfXguaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCxfMS5zaWxlbnRTaGlmdChUbSkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHgucmVkcmF3SGludCgiZHJhZyIsITApLHgudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF09PUhzWzBdJiZ4LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdPT1Ic1sxXSYmeC5yZWRyYXdIaW50KCJlbGVzIiwhMCkseC5yZWRyYXcoKX1lbHNle3ZhciBaZD14LnRvdWNoRGF0YS5kcmFnRGVsdGE9eC50b3VjaERhdGEuZHJhZ0RlbHRhfHxbXTtaZC5sZW5ndGg9PT0wPyhaZC5wdXNoKHphWzBdKSxaZC5wdXNoKHphWzFdKSk6KFpkWzBdKz16YVswXSxaZFsxXSs9emFbMV0pfWlmKFMocXB8fFFkLFsidG91Y2htb3ZlIiwidGFwZHJhZyIsInZtb3VzZW1vdmUiXSxHLHt4OlZ0WzBdLHk6VnRbMV19KSwoIXFwfHwhcXAuZ3JhYmJlZCgpKSYmUWQhPW5fJiYobl8mJm5fLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJ0YXBkcmFnb3V0Iixwb3NpdGlvbjp7eDpWdFswXSx5OlZ0WzFdfX0pLFFkJiZRZC5lbWl0KHtvcmlnaW5hbEV2ZW50OkcsdHlwZToidGFwZHJhZ292ZXIiLHBvc2l0aW9uOnt4OlZ0WzBdLHk6VnRbMV19fSkpLHgudG91Y2hEYXRhLmxhc3Q9UWQsSm4pZm9yKHZhciBKZD0wO0pkPFZ0Lmxlbmd0aDtKZCsrKVZ0W0pkXSYmeC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbltKZF0mJiRjJiYoeC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMCk7aWYoSm4mJihxcD09bnVsbHx8cXAucGFubmFibGUoKSkmJmxyLnBhbm5pbmdFbmFibGVkKCkmJmxyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgVDU9TyhxcCx4LnRvdWNoRGF0YS5zdGFydHMpO1Q1JiYoRy5wcmV2ZW50RGVmYXVsdCgpLHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbnx8KHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1KNyh4LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uKSkseC5zd2lwZVBhbm5pbmc/KGxyLnBhbkJ5KHt4OnphWzBdKndyLHk6emFbMV0qd3J9KSxsci5lbWl0KCJkcmFncGFuIikpOiRjJiYoeC5zd2lwZVBhbm5pbmc9ITAsbHIucGFuQnkoe3g6YmEqd3IseTpsaCp3cn0pLGxyLmVtaXQoImRyYWdwYW4iKSxxcCYmKHFwLnVuYWN0aXZhdGUoKSx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHgudG91Y2hEYXRhLnN0YXJ0PW51bGwpKSk7dmFyIEVzPXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMF0uY2xpZW50WCxHLnRvdWNoZXNbMF0uY2xpZW50WSk7VnRbMF09RXNbMF0sVnRbMV09RXNbMV19fWZvcih2YXIgU2M9MDtTYzxWdC5sZW5ndGg7U2MrKylIc1tTY109VnRbU2NdO0puJiZHLnRvdWNoZXMubGVuZ3RoPjAmJiF4LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF4LnN3aXBlUGFubmluZyYmeC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uIT1udWxsJiYoeC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHgucmVkcmF3KCkpfX0sITEpO3ZhciBTaTt4LnJlZ2lzdGVyQmluZGluZyhtLCJ0b3VjaGNhbmNlbCIsU2k9ZnVuY3Rpb24oRyl7dmFyIEpuPXgudG91Y2hEYXRhLnN0YXJ0O3gudG91Y2hEYXRhLmNhcHR1cmU9ITEsSm4mJkpuLnVuYWN0aXZhdGUoKX0pO3ZhciB5cyxwYSxNaSxnaTtpZih4LnJlZ2lzdGVyQmluZGluZyhtLCJ0b3VjaGVuZCIseXM9ZnVuY3Rpb24oRyl7dmFyIEpuPXgudG91Y2hEYXRhLnN0YXJ0LGtyPXgudG91Y2hEYXRhLmNhcHR1cmU7aWYoa3IpRy50b3VjaGVzLmxlbmd0aD09PTAmJih4LnRvdWNoRGF0YS5jYXB0dXJlPSExKSxHLnByZXZlbnREZWZhdWx0KCk7ZWxzZSByZXR1cm47dmFyIGxyPXguc2VsZWN0aW9uO3guc3dpcGVQYW5uaW5nPSExLHguaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMTt2YXIgVnQ9eC5jeSxIcz1WdC56b29tKCksd3I9eC50b3VjaERhdGEubm93LEVzPXgudG91Y2hEYXRhLmVhcmxpZXI7aWYoRy50b3VjaGVzWzBdKXt2YXIgZ289eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcudG91Y2hlc1swXS5jbGllbnRYLEcudG91Y2hlc1swXS5jbGllbnRZKTt3clswXT1nb1swXSx3clsxXT1nb1sxXX1pZihHLnRvdWNoZXNbMV0pe3ZhciBnbz14LnByb2plY3RJbnRvVmlld3BvcnQoRy50b3VjaGVzWzFdLmNsaWVudFgsRy50b3VjaGVzWzFdLmNsaWVudFkpO3dyWzJdPWdvWzBdLHdyWzNdPWdvWzFdfWlmKEcudG91Y2hlc1syXSl7dmFyIGdvPXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMl0uY2xpZW50WCxHLnRvdWNoZXNbMl0uY2xpZW50WSk7d3JbNF09Z29bMF0sd3JbNV09Z29bMV19Sm4mJkpuLnVuYWN0aXZhdGUoKTt2YXIgJGM7aWYoeC50b3VjaERhdGEuY3h0KXtpZigkYz17b3JpZ2luYWxFdmVudDpHLHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6d3JbMF0seTp3clsxXX19LEpuP0puLmVtaXQoJGMpOlZ0LmVtaXQoJGMpLCF4LnRvdWNoRGF0YS5jeHREcmFnZ2VkKXt2YXIgemE9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXAiLHBvc2l0aW9uOnt4OndyWzBdLHk6d3JbMV19fTtKbj9Kbi5lbWl0KHphKTpWdC5lbWl0KHphKX14LnRvdWNoRGF0YS5zdGFydCYmKHgudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLHgudG91Y2hEYXRhLmN4dD0hMSx4LnRvdWNoRGF0YS5zdGFydD1udWxsLHgucmVkcmF3KCk7cmV0dXJufWlmKCFHLnRvdWNoZXNbMl0mJlZ0LmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmeC50b3VjaERhdGEuc2VsZWN0aW5nKXt4LnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITE7dmFyIFNjPVZ0LmNvbGxlY3Rpb24oeC5nZXRBbGxJbkJveChsclswXSxsclsxXSxsclsyXSxsclszXSkpO2xyWzBdPXZvaWQgMCxsclsxXT12b2lkIDAsbHJbMl09dm9pZCAwLGxyWzNdPXZvaWQgMCxscls0XT0wLHgucmVkcmF3SGludCgic2VsZWN0IiwhMCksVnQuZW1pdCh7dHlwZToiYm94ZW5kIixvcmlnaW5hbEV2ZW50OkcscG9zaXRpb246e3g6d3JbMF0seTp3clsxXX19KTt2YXIgYmE9ZnVuY3Rpb24oeDUpe3JldHVybiB4NS5zZWxlY3RhYmxlKCkmJiF4NS5zZWxlY3RlZCgpfTtTYy5lbWl0KCJib3giKS5zdGRGaWx0ZXIoYmEpLnNlbGVjdCgpLmVtaXQoImJveHNlbGVjdCIpLFNjLm5vbmVtcHR5KCkmJngucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3KCl9aWYoSm4hPW51bGwmJkpuLnVuYWN0aXZhdGUoKSxHLnRvdWNoZXNbMl0peC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApO2Vsc2UgaWYoIUcudG91Y2hlc1sxXSl7aWYoIUcudG91Y2hlc1swXSl7aWYoIUcudG91Y2hlc1swXSl7eC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApO3ZhciB4bz14LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7aWYoSm4hPW51bGwpe3ZhciBsaD1Kbi5fcHJpdmF0ZS5ncmFiYmVkO19lKHhvKSx4LnJlZHJhd0hpbnQoImRyYWciLCEwKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxsaCYmKEpuLmVtaXQoImZyZWVvbiIpLHhvLmVtaXQoImZyZWUiKSx4LmRyYWdEYXRhLmRpZERyYWcmJihKbi5lbWl0KCJkcmFnZnJlZW9uIikseG8uZW1pdCgiZHJhZ2ZyZWUiKSkpLFMoSm4sWyJ0b3VjaGVuZCIsInRhcGVuZCIsInZtb3VzZXVwIiwidGFwZHJhZ291dCJdLEcse3g6d3JbMF0seTp3clsxXX0pLEpuLnVuYWN0aXZhdGUoKSx4LnRvdWNoRGF0YS5zdGFydD1udWxsfWVsc2V7dmFyIFdsPXguZmluZE5lYXJlc3RFbGVtZW50KHdyWzBdLHdyWzFdLCEwLCEwKTtTKFdsLFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxHLHt4OndyWzBdLHk6d3JbMV19KX12YXIgWjI9eC50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXS13clswXSxlYj1aMipaMixHMD14LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdLXdyWzFdLHpwPUcwKkcwLGZkPWViK3pwLFd2PWZkKkhzKkhzO3gudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWR8fChKbnx8VnQuJCgiOnNlbGVjdGVkIikudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSxTKEpuLFsidGFwIiwidmNsaWNrIl0sRyx7eDp3clswXSx5OndyWzFdfSkscGE9ITEsRy50aW1lU3RhbXAtZ2k8PVZ0Lm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oTWkmJmNsZWFyVGltZW91dChNaSkscGE9ITAsZ2k9bnVsbCxTKEpuLFsiZGJsdGFwIiwidmRibGNsaWNrIl0sRyx7eDp3clswXSx5OndyWzFdfSkpOihNaT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cGF8fFMoSm4sWyJvbmV0YXAiLCJ2b25lY2xpY2siXSxHLHt4OndyWzBdLHk6d3JbMV19KX0sVnQubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKSxnaT1HLnRpbWVTdGFtcCkpLEpuIT1udWxsJiYheC5kcmFnRGF0YS5kaWREcmFnJiZKbi5fcHJpdmF0ZS5zZWxlY3RhYmxlJiZXdjx4LnRvdWNoVGFwVGhyZXNob2xkMiYmIXgucGluY2hpbmcmJihWdC5zZWxlY3Rpb25UeXBlKCk9PT0ic2luZ2xlIj8oVnQuJChrKS51bm1lcmdlKEpuKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLEpuLnNlbGVjdChbInRhcHNlbGVjdCJdKSk6Sm4uc2VsZWN0ZWQoKT9Kbi51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pOkpuLnNlbGVjdChbInRhcHNlbGVjdCJdKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSkseC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMH19fWZvcih2YXIgc3k9MDtzeTx3ci5sZW5ndGg7c3krKylFc1tzeV09d3Jbc3ldO3guZHJhZ0RhdGEuZGlkRHJhZz0hMSxHLnRvdWNoZXMubGVuZ3RoPT09MCYmKHgudG91Y2hEYXRhLmRyYWdEZWx0YT1bXSx4LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uPVtudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0seC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249bnVsbCx4LnRvdWNoRGF0YS5kaWRTZWxlY3Q9ITEpLEcudG91Y2hlcy5sZW5ndGg8MiYmKEcudG91Y2hlcy5sZW5ndGg9PT0xJiYoeC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249W0cudG91Y2hlc1swXS5jbGllbnRYLEcudG91Y2hlc1swXS5jbGllbnRZXSkseC5waW5jaGluZz0hMSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx4LnJlZHJhdygpKX0sITEpLHR5cGVvZiBUb3VjaEV2ZW50PiJ1Iil7dmFyIGZzPVtdLEZzPWZ1bmN0aW9uKEcpe3JldHVybntjbGllbnRYOkcuY2xpZW50WCxjbGllbnRZOkcuY2xpZW50WSxmb3JjZToxLGlkZW50aWZpZXI6Ry5wb2ludGVySWQscGFnZVg6Ry5wYWdlWCxwYWdlWTpHLnBhZ2VZLHJhZGl1c1g6Ry53aWR0aC8yLHJhZGl1c1k6Ry5oZWlnaHQvMixzY3JlZW5YOkcuc2NyZWVuWCxzY3JlZW5ZOkcuc2NyZWVuWSx0YXJnZXQ6Ry50YXJnZXR9fSx4cz1mdW5jdGlvbihHKXtyZXR1cm57ZXZlbnQ6Ryx0b3VjaDpGcyhHKX19LFJzPWZ1bmN0aW9uKEcpe2ZzLnB1c2goeHMoRykpfSx5bz1mdW5jdGlvbihHKXtmb3IodmFyIEpuPTA7Sm48ZnMubGVuZ3RoO0puKyspe3ZhciBrcj1mc1tKbl07aWYoa3IuZXZlbnQucG9pbnRlcklkPT09Ry5wb2ludGVySWQpe2ZzLnNwbGljZShKbiwxKTtyZXR1cm59fX0sJGE9ZnVuY3Rpb24oRyl7dmFyIEpuPWZzLmZpbHRlcihmdW5jdGlvbihrcil7cmV0dXJuIGtyLmV2ZW50LnBvaW50ZXJJZD09PUcucG9pbnRlcklkfSlbMF07Sm4uZXZlbnQ9RyxKbi50b3VjaD1GcyhHKX0sRGE9ZnVuY3Rpb24oRyl7Ry50b3VjaGVzPWZzLm1hcChmdW5jdGlvbihKbil7cmV0dXJuIEpuLnRvdWNofSl9LEJvPWZ1bmN0aW9uKEcpe3JldHVybiBHLnBvaW50ZXJUeXBlPT09Im1vdXNlInx8Ry5wb2ludGVyVHlwZT09PTR9O3gucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJwb2ludGVyZG93biIsZnVuY3Rpb24odHIpe0JvKHRyKXx8KHRyLnByZXZlbnREZWZhdWx0KCksUnModHIpLERhKHRyKSxTcih0cikpfSkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsInBvaW50ZXJ1cCIsZnVuY3Rpb24odHIpe0JvKHRyKXx8KHlvKHRyKSxEYSh0cikseXModHIpKX0pLHgucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJwb2ludGVyY2FuY2VsIixmdW5jdGlvbih0cil7Qm8odHIpfHwoeW8odHIpLERhKHRyKSxTaSh0cikpfSkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsInBvaW50ZXJtb3ZlIixmdW5jdGlvbih0cil7Qm8odHIpfHwodHIucHJldmVudERlZmF1bHQoKSwkYSh0ciksRGEodHIpLE5yKHRyKSl9KX19O3ZhciBLdj17fTtLdi5nZW5lcmF0ZVBvbHlnb249ZnVuY3Rpb24oeCxtKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzW3hdPXtyZW5kZXJlcjp0aGlzLG5hbWU6eCxwb2ludHM6bSxkcmF3OmZ1bmN0aW9uKFMsTSxPLE4sJCl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCJwb2x5Z29uIixTLE0sTyxOLCQsdGhpcy5wb2ludHMpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKFMsTSxPLE4sJCxILHEpe3JldHVybiBLOSgkLEgsdGhpcy5wb2ludHMsUyxNLE8vMixOLzIscSl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oUyxNLE8sTiwkLEgscSl7cmV0dXJuIFV2KFMsTSx0aGlzLnBvaW50cyxILHEsTiwkLFswLC0xXSxPKX19fSxLdi5nZW5lcmF0ZUVsbGlwc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzLmVsbGlwc2U9e3JlbmRlcmVyOnRoaXMsbmFtZToiZWxsaXBzZSIsZHJhdzpmdW5jdGlvbihtLGssUyxNLE8pe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsbSxrLFMsTSxPKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihtLGssUyxNLE8sTiwkKXtyZXR1cm4gQ1ooTyxOLG0sayxTLzIrJCxNLzIrJCl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7cmV0dXJuIGQ1KG0sayxNLE8sTiwkLFMpfX19LEt2LmdlbmVyYXRlUm91bmRQb2x5Z29uPWZ1bmN0aW9uKHgsbSl7Zm9yKHZhciBrPW5ldyBBcnJheShtLmxlbmd0aCoyKSxTPTA7UzxtLmxlbmd0aC8yO1MrKyl7dmFyIE09UyoyLE89dm9pZCAwO1M8bS5sZW5ndGgvMi0xP089KFMrMSkqMjpPPTAsa1tTKjRdPW1bTV0sa1tTKjQrMV09bVtNKzFdO3ZhciBOPW1bT10tbVtNXSwkPW1bTysxXS1tW00rMV0sSD1NYXRoLnNxcnQoTipOKyQqJCk7a1tTKjQrMl09Ti9ILGtbUyo0KzNdPSQvSH1yZXR1cm4gdGhpcy5ub2RlU2hhcGVzW3hdPXtyZW5kZXJlcjp0aGlzLG5hbWU6eCxwb2ludHM6ayxkcmF3OmZ1bmN0aW9uKFksWixjZSx2ZSxtZSl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCJyb3VuZC1wb2x5Z29uIixZLFosY2UsdmUsbWUsdGhpcy5wb2ludHMpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKFksWixjZSx2ZSxtZSxMZSxfZSl7cmV0dXJuIFNaKG1lLExlLHRoaXMucG9pbnRzLFksWixjZSx2ZSl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oWSxaLGNlLHZlLG1lLExlLF9lKXtyZXR1cm4gVFooWSxaLHRoaXMucG9pbnRzLExlLF9lLHZlLG1lKX19fSxLdi5nZW5lcmF0ZVJvdW5kUmVjdGFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1sicm91bmQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLnJvdW5kcmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6InJvdW5kLXJlY3RhbmdsZSIscG9pbnRzOmhkKDQsMCksZHJhdzpmdW5jdGlvbihtLGssUyxNLE8pe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsbSxrLFMsTSxPKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihtLGssUyxNLE8sTiwkKXtyZXR1cm4gYmooTyxOLG0sayxTLE0sJCl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7dmFyIEg9VzkoTSxPKSxxPUgqMjtyZXR1cm4hIShVdihtLGssdGhpcy5wb2ludHMsTiwkLE0sTy1xLFswLC0xXSxTKXx8VXYobSxrLHRoaXMucG9pbnRzLE4sJCxNLXEsTyxbMCwtMV0sUyl8fGQ1KG0sayxxLHEsTi1NLzIrSCwkLU8vMitILFMpfHxkNShtLGsscSxxLE4rTS8yLUgsJC1PLzIrSCxTKXx8ZDUobSxrLHEscSxOK00vMi1ILCQrTy8yLUgsUyl8fGQ1KG0sayxxLHEsTi1NLzIrSCwkK08vMi1ILFMpKX19fSxLdi5nZW5lcmF0ZUN1dFJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbImN1dC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMuY3V0cmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImN1dC1yZWN0YW5nbGUiLGNvcm5lckxlbmd0aDp2aigpLHBvaW50czpoZCg0LDApLGRyYXc6ZnVuY3Rpb24obSxrLFMsTSxPKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLG0sayxTLE0sTyl9LGdlbmVyYXRlQ3V0VHJpYW5nbGVQdHM6ZnVuY3Rpb24obSxrLFMsTSl7dmFyIE89dGhpcy5jb3JuZXJMZW5ndGgsTj1rLzIsJD1tLzIsSD1TLSQscT1TKyQsWT1NLU4sWj1NK047cmV0dXJue3RvcExlZnQ6W0gsWStPLEgrTyxZLEgrTyxZK09dLHRvcFJpZ2h0OltxLU8sWSxxLFkrTyxxLU8sWStPXSxib3R0b21SaWdodDpbcSxaLU8scS1PLFoscS1PLFotT10sYm90dG9tTGVmdDpbSCtPLFosSCxaLU8sSCtPLFotT119fSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe3ZhciBIPXRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyhTKzIqJCxNKzIqJCxtLGspLHE9W10uY29uY2F0LmFwcGx5KFtdLFtILnRvcExlZnQuc3BsaWNlKDAsNCksSC50b3BSaWdodC5zcGxpY2UoMCw0KSxILmJvdHRvbVJpZ2h0LnNwbGljZSgwLDQpLEguYm90dG9tTGVmdC5zcGxpY2UoMCw0KV0pO3JldHVybiBLOShPLE4scSxtLGspfSxjaGVja1BvaW50OmZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe2lmKFV2KG0sayx0aGlzLnBvaW50cyxOLCQsTSxPLTIqdGhpcy5jb3JuZXJMZW5ndGgsWzAsLTFdLFMpfHxVdihtLGssdGhpcy5wb2ludHMsTiwkLE0tMip0aGlzLmNvcm5lckxlbmd0aCxPLFswLC0xXSxTKSlyZXR1cm4hMDt2YXIgSD10aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMoTSxPLE4sJCk7cmV0dXJuIFlkKG0sayxILnRvcExlZnQpfHxZZChtLGssSC50b3BSaWdodCl8fFlkKG0sayxILmJvdHRvbVJpZ2h0KXx8WWQobSxrLEguYm90dG9tTGVmdCl9fX0sS3YuZ2VuZXJhdGVCYXJyZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzLmJhcnJlbD17cmVuZGVyZXI6dGhpcyxuYW1lOiJiYXJyZWwiLHBvaW50czpoZCg0LDApLGRyYXc6ZnVuY3Rpb24obSxrLFMsTSxPKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLG0sayxTLE0sTyl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7dmFyIEg9LjE1LHE9LjUsWT0uODUsWj10aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKFMrMiokLE0rMiokLG0sayksY2U9ZnVuY3Rpb24oTGUpe3ZhciBfZT1aNyh7eDpMZVswXSx5OkxlWzFdfSx7eDpMZVsyXSx5OkxlWzNdfSx7eDpMZVs0XSx5OkxlWzVdfSxIKSxFZT1aNyh7eDpMZVswXSx5OkxlWzFdfSx7eDpMZVsyXSx5OkxlWzNdfSx7eDpMZVs0XSx5OkxlWzVdfSxxKSxCZT1aNyh7eDpMZVswXSx5OkxlWzFdfSx7eDpMZVsyXSx5OkxlWzNdfSx7eDpMZVs0XSx5OkxlWzVdfSxZKTtyZXR1cm5bTGVbMF0sTGVbMV0sX2UueCxfZS55LEVlLngsRWUueSxCZS54LEJlLnksTGVbNF0sTGVbNV1dfSx2ZT1bXS5jb25jYXQoY2UoWi50b3BMZWZ0KSxjZShaLnRvcFJpZ2h0KSxjZShaLmJvdHRvbVJpZ2h0KSxjZShaLmJvdHRvbUxlZnQpKTtyZXR1cm4gSzkoTyxOLHZlLG0sayl9LGdlbmVyYXRlQmFycmVsQmV6aWVyUHRzOmZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPWsvMixOPW0vMiwkPVMtTixIPVMrTixxPU0tTyxZPU0rTyxaPXVJKG0sayksY2U9Wi5oZWlnaHRPZmZzZXQsdmU9Wi53aWR0aE9mZnNldCxtZT1aLmN0cmxQdE9mZnNldFBjdCptLExlPXt0b3BMZWZ0OlskLHErY2UsJCttZSxxLCQrdmUscV0sdG9wUmlnaHQ6W0gtdmUscSxILW1lLHEsSCxxK2NlXSxib3R0b21SaWdodDpbSCxZLWNlLEgtbWUsWSxILXZlLFldLGJvdHRvbUxlZnQ6WyQrdmUsWSwkK21lLFksJCxZLWNlXX07cmV0dXJuIExlLnRvcExlZnQuaXNUb3A9ITAsTGUudG9wUmlnaHQuaXNUb3A9ITAsTGUuYm90dG9tTGVmdC5pc0JvdHRvbT0hMCxMZS5ib3R0b21SaWdodC5pc0JvdHRvbT0hMCxMZX0sY2hlY2tQb2ludDpmdW5jdGlvbihtLGssUyxNLE8sTiwkKXt2YXIgSD11SShNLE8pLHE9SC5oZWlnaHRPZmZzZXQsWT1ILndpZHRoT2Zmc2V0O2lmKFV2KG0sayx0aGlzLnBvaW50cyxOLCQsTSxPLTIqcSxbMCwtMV0sUyl8fFV2KG0sayx0aGlzLnBvaW50cyxOLCQsTS0yKlksTyxbMCwtMV0sUykpcmV0dXJuITA7Zm9yKHZhciBaPXRoaXMuZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHMoTSxPLE4sJCksY2U9ZnVuY3Rpb24oWWUsbXQsSmUpe3ZhciBMdD1KZVs0XSxNdD1KZVsyXSx1dD1KZVswXSxXdD1KZVs1XSxUdD1KZVsxXSxfbj1NYXRoLm1pbihMdCx1dCksaG49TWF0aC5tYXgoTHQsdXQpLFl0PU1hdGgubWluKFd0LFR0KSxEbj1NYXRoLm1heChXdCxUdCk7aWYoX248PVllJiZZZTw9aG4mJll0PD1tdCYmbXQ8PURuKXt2YXIgaXI9X1ooTHQsTXQsdXQpLHZyPXlaKGlyWzBdLGlyWzFdLGlyWzJdLFllKSxObj12ci5maWx0ZXIoZnVuY3Rpb24ocHIpe3JldHVybiAwPD1wciYmcHI8PTF9KTtpZihObi5sZW5ndGg+MClyZXR1cm4gTm5bMF19cmV0dXJuIG51bGx9LHZlPU9iamVjdC5rZXlzKFopLG1lPTA7bWU8dmUubGVuZ3RoO21lKyspe3ZhciBMZT12ZVttZV0sX2U9WltMZV0sRWU9Y2UobSxrLF9lKTtpZihFZSE9bnVsbCl7dmFyIEJlPV9lWzVdLFJlPV9lWzNdLFZlPV9lWzFdLGN0PXQwKEJlLFJlLFZlLEVlKTtpZihfZS5pc1RvcCYmY3Q8PWt8fF9lLmlzQm90dG9tJiZrPD1jdClyZXR1cm4hMH19cmV0dXJuITF9fX0sS3YuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMuYm90dG9tcm91bmRyZWN0YW5nbGU9e3JlbmRlcmVyOnRoaXMsbmFtZToiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSIscG9pbnRzOmhkKDQsMCksZHJhdzpmdW5jdGlvbihtLGssUyxNLE8pe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsbSxrLFMsTSxPKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihtLGssUyxNLE8sTiwkKXt2YXIgSD1tLShTLzIrJCkscT1rLShNLzIrJCksWT1xLFo9bSsoUy8yKyQpLGNlPVozKE8sTixtLGssSCxxLFosWSwhMSk7cmV0dXJuIGNlLmxlbmd0aD4wP2NlOmJqKE8sTixtLGssUyxNLCQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe3ZhciBIPVc5KE0sTykscT0yKkg7aWYoVXYobSxrLHRoaXMucG9pbnRzLE4sJCxNLE8tcSxbMCwtMV0sUyl8fFV2KG0sayx0aGlzLnBvaW50cyxOLCQsTS1xLE8sWzAsLTFdLFMpKXJldHVybiEwO3ZhciBZPU0vMisyKlMsWj1PLzIrMipTLGNlPVtOLVksJC1aLE4tWSwkLE4rWSwkLE4rWSwkLVpdO3JldHVybiEhKFlkKG0sayxjZSl8fGQ1KG0sayxxLHEsTitNLzItSCwkK08vMi1ILFMpfHxkNShtLGsscSxxLE4tTS8yK0gsJCtPLzItSCxTKSl9fX0sS3YucmVnaXN0ZXJOb2RlU2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5ub2RlU2hhcGVzPXt9LG09dGhpczt0aGlzLmdlbmVyYXRlRWxsaXBzZSgpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ0cmlhbmdsZSIsaGQoMywwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdHJpYW5nbGUiLGhkKDMsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyZWN0YW5nbGUiLGhkKDQsMCkpLHguc3F1YXJlPXgucmVjdGFuZ2xlLHRoaXMuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZSgpLHRoaXMuZ2VuZXJhdGVDdXRSZWN0YW5nbGUoKSx0aGlzLmdlbmVyYXRlQmFycmVsKCksdGhpcy5nZW5lcmF0ZUJvdHRvbVJvdW5kcmVjdGFuZ2xlKCk7e3ZhciBrPVswLDEsMSwwLDAsLTEsLTEsMF07dGhpcy5nZW5lcmF0ZVBvbHlnb24oImRpYW1vbmQiLGspLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWRpYW1vbmQiLGspfXRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJwZW50YWdvbiIsaGQoNSwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtcGVudGFnb24iLGhkKDUsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJoZXhhZ29uIixoZCg2LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1oZXhhZ29uIixoZCg2LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigiaGVwdGFnb24iLGhkKDcsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWhlcHRhZ29uIixoZCg3LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigib2N0YWdvbiIsaGQoOCwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtb2N0YWdvbiIsaGQoOCwwKSk7dmFyIFM9bmV3IEFycmF5KDIwKTt7dmFyIE09b0koNSwwKSxPPW9JKDUsTWF0aC5QSS81KSxOPS41KigzLU1hdGguc3FydCg1KSk7Tio9MS41Nztmb3IodmFyICQ9MDskPE8ubGVuZ3RoLzI7JCsrKU9bJCoyXSo9TixPWyQqMisxXSo9Tjtmb3IodmFyICQ9MDskPDIwLzQ7JCsrKVNbJCo0XT1NWyQqMl0sU1skKjQrMV09TVskKjIrMV0sU1skKjQrMl09T1skKjJdLFNbJCo0KzNdPU9bJCoyKzFdfVM9bWooUyksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInN0YXIiLFMpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ2ZWUiLFstMSwtMSwwLC0uMzMzLDEsLTEsMCwxXSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInJob21ib2lkIixbLTEsLTEsLjMzMywtMSwxLDEsLS4zMzMsMV0pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyaWdodC1yaG9tYm9pZCIsWy0uMzMzLC0xLDEsLTEsLjMzMywxLC0xLDFdKSx0aGlzLm5vZGVTaGFwZXMuY29uY2F2ZWhleGFnb249dGhpcy5nZW5lcmF0ZVBvbHlnb24oImNvbmNhdmUtaGV4YWdvbiIsWy0xLC0uOTUsLS43NSwwLC0xLC45NSwxLC45NSwuNzUsMCwxLC0uOTVdKTt7dmFyIEg9Wy0xLC0xLC4yNSwtMSwxLDAsLjI1LDEsLTEsMV07dGhpcy5nZW5lcmF0ZVBvbHlnb24oInRhZyIsSCksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdGFnIixIKX14Lm1ha2VQb2x5Z29uPWZ1bmN0aW9uKHEpe3ZhciBZPXEuam9pbigiJCIpLFo9InBvbHlnb24tIitZLGNlO3JldHVybihjZT10aGlzW1pdKT9jZTptLmdlbmVyYXRlUG9seWdvbihaLHEpfX07dmFyIGZrPXt9O2ZrLnRpbWVUb1JlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhd1RvdGFsVGltZS90aGlzLnJlZHJhd0NvdW50fSxmay5yZWRyYXc9ZnVuY3Rpb24oeCl7eD14fHxjaigpO3ZhciBtPXRoaXM7bS5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKG0uYXZlcmFnZVJlZHJhd1RpbWU9MCksbS5sYXN0UmVkcmF3VGltZT09PXZvaWQgMCYmKG0ubGFzdFJlZHJhd1RpbWU9MCksbS5sYXN0RHJhd1RpbWU9PT12b2lkIDAmJihtLmxhc3REcmF3VGltZT0wKSxtLnJlcXVlc3RlZEZyYW1lPSEwLG0ucmVuZGVyT3B0aW9ucz14fSxmay5iZWZvcmVSZW5kZXI9ZnVuY3Rpb24oeCxtKXtpZighdGhpcy5kZXN0cm95ZWQpe209PW51bGwmJmNoKCJQcmlvcml0eSBpcyBub3Qgb3B0aW9uYWwgZm9yIGJlZm9yZVJlbmRlciIpO3ZhciBrPXRoaXMuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzO2sucHVzaCh7Zm46eCxwcmlvcml0eTptfSksay5zb3J0KGZ1bmN0aW9uKFMsTSl7cmV0dXJuIE0ucHJpb3JpdHktUy5wcmlvcml0eX0pfX07dmFyIHN6PWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bS5iZWZvcmVSZW5kZXJDYWxsYmFja3MsTz0wO088TS5sZW5ndGg7TysrKU1bT10uZm4oayxTKX07Zmsuc3RhcnRSZW5kZXJMb29wPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxtPXguY3k7aWYoIXgucmVuZGVyTG9vcFN0YXJ0ZWQpe3gucmVuZGVyTG9vcFN0YXJ0ZWQ9ITA7dmFyIGs9ZnVuY3Rpb24gUyhNKXtpZigheC5kZXN0cm95ZWQpe2lmKCFtLmJhdGNoaW5nKCkpaWYoeC5yZXF1ZXN0ZWRGcmFtZSYmIXguc2tpcEZyYW1lKXtzeih4LCEwLE0pO3ZhciBPPUJwKCk7eC5yZW5kZXIoeC5yZW5kZXJPcHRpb25zKTt2YXIgTj14Lmxhc3REcmF3VGltZT1CcCgpO3guYXZlcmFnZVJlZHJhd1RpbWU9PT12b2lkIDAmJih4LmF2ZXJhZ2VSZWRyYXdUaW1lPU4tTykseC5yZWRyYXdDb3VudD09PXZvaWQgMCYmKHgucmVkcmF3Q291bnQ9MCkseC5yZWRyYXdDb3VudCsrLHgucmVkcmF3VG90YWxUaW1lPT09dm9pZCAwJiYoeC5yZWRyYXdUb3RhbFRpbWU9MCk7dmFyICQ9Ti1PO3gucmVkcmF3VG90YWxUaW1lKz0kLHgubGFzdFJlZHJhd1RpbWU9JCx4LmF2ZXJhZ2VSZWRyYXdUaW1lPXguYXZlcmFnZVJlZHJhd1RpbWUvMiskLzIseC5yZXF1ZXN0ZWRGcmFtZT0hMX1lbHNlIHN6KHgsITEsTSk7eC5za2lwRnJhbWU9ITEsejAoUyl9fTt6MChrKX19O3ZhciBWcmU9ZnVuY3Rpb24obSl7dGhpcy5pbml0KG0pfSxhej1WcmUsbTg9YXoucHJvdG90eXBlO204LmNsaWVudEZ1bmN0aW9ucz1bInJlZHJhd0hpbnQiLCJyZW5kZXIiLCJyZW5kZXJUbyIsIm1hdGNoQ2FudmFzU2l6ZSIsIm5vZGVTaGFwZUltcGwiLCJhcnJvd1NoYXBlSW1wbCJdLG04LmluaXQ9ZnVuY3Rpb24oeCl7dmFyIG09dGhpczttLm9wdGlvbnM9eCxtLmN5PXguY3k7dmFyIGs9bS5jb250YWluZXI9eC5jeS5jb250YWluZXIoKSxTPW0uY3kud2luZG93KCk7aWYoUyl7dmFyIE09Uy5kb2N1bWVudCxPPU0uaGVhZCxOPSJfX19fX19fX19fY3l0b3NjYXBlX3N0eWxlc2hlZXQiLCQ9Il9fX19fX19fX19jeXRvc2NhcGVfY29udGFpbmVyIixIPU0uZ2V0RWxlbWVudEJ5SWQoTikhPW51bGw7aWYoay5jbGFzc05hbWUuaW5kZXhPZigkKTwwJiYoay5jbGFzc05hbWU9KGsuY2xhc3NOYW1lfHwiIikrIiAiKyQpLCFIKXt2YXIgcT1NLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cS5pZD1OLHEudGV4dENvbnRlbnQ9Ii4iKyQrIiB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfSIsTy5pbnNlcnRCZWZvcmUocSxPLmNoaWxkcmVuWzBdKX12YXIgWT1TLmdldENvbXB1dGVkU3R5bGUoayksWj1ZLmdldFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIik7Wj09PSJzdGF0aWMiJiZodSgiQSBDeXRvc2NhcGUgY29udGFpbmVyIGhhcyBzdHlsZSBwb3NpdGlvbjpzdGF0aWMgYW5kIHNvIGNhbiBub3QgdXNlIFVJIGV4dGVuc2lvbnMgcHJvcGVybHkiKX1tLnNlbGVjdGlvbj1bdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLDBdLG0uYmV6aWVyUHJvalBjdHM9Wy4wNSwuMjI1LC40LC41LC42LC43NzUsLjk1XSxtLmhvdmVyRGF0YT17ZG93bjpudWxsLGxhc3Q6bnVsbCxkb3duVGltZTpudWxsLHRyaWdnZXJNb2RlOm51bGwsZHJhZ2dpbmc6ITEsaW5pdGlhbFBhbjpbbnVsbCxudWxsXSxjYXB0dXJlOiExfSxtLmRyYWdEYXRhPXtwb3NzaWJsZURyYWdFbGVtZW50czpbXX0sbS50b3VjaERhdGE9e3N0YXJ0Om51bGwsY2FwdHVyZTohMSxzdGFydFBvc2l0aW9uOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sc2luZ2xlVG91Y2hTdGFydFRpbWU6bnVsbCxzaW5nbGVUb3VjaE1vdmVkOiEwLG5vdzpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGVhcmxpZXI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXX0sbS5yZWRyYXdzPTAsbS5zaG93RnBzPXguc2hvd0ZwcyxtLmRlYnVnPXguZGVidWcsbS5oaWRlRWRnZXNPblZpZXdwb3J0PXguaGlkZUVkZ2VzT25WaWV3cG9ydCxtLnRleHR1cmVPblZpZXdwb3J0PXgudGV4dHVyZU9uVmlld3BvcnQsbS53aGVlbFNlbnNpdGl2aXR5PXgud2hlZWxTZW5zaXRpdml0eSxtLm1vdGlvbkJsdXJFbmFibGVkPXgubW90aW9uQmx1cixtLmZvcmNlZFBpeGVsUmF0aW89WCh4LnBpeGVsUmF0aW8pP3gucGl4ZWxSYXRpbzpudWxsLG0ubW90aW9uQmx1cj14Lm1vdGlvbkJsdXIsbS5tb3Rpb25CbHVyT3BhY2l0eT14Lm1vdGlvbkJsdXJPcGFjaXR5LG0ubW90aW9uQmx1clRyYW5zcGFyZW5jeT0xLW0ubW90aW9uQmx1ck9wYWNpdHksbS5tb3Rpb25CbHVyUHhSYXRpbz0xLG0ubWJQeFJCbHVycnk9MSxtLm1pbk1iTG93UXVhbEZyYW1lcz00LG0uZnVsbFF1YWxpdHlNYj0hMSxtLmNsZWFyZWRGb3JNb3Rpb25CbHVyPVtdLG0uZGVza3RvcFRhcFRocmVzaG9sZD14LmRlc2t0b3BUYXBUaHJlc2hvbGQsbS5kZXNrdG9wVGFwVGhyZXNob2xkMj14LmRlc2t0b3BUYXBUaHJlc2hvbGQqeC5kZXNrdG9wVGFwVGhyZXNob2xkLG0udG91Y2hUYXBUaHJlc2hvbGQ9eC50b3VjaFRhcFRocmVzaG9sZCxtLnRvdWNoVGFwVGhyZXNob2xkMj14LnRvdWNoVGFwVGhyZXNob2xkKngudG91Y2hUYXBUaHJlc2hvbGQsbS50YXBob2xkRHVyYXRpb249NTAwLG0uYmluZGluZ3M9W10sbS5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sbS5iZWZvcmVSZW5kZXJQcmlvcml0aWVzPXthbmltYXRpb25zOjQwMCxlbGVDYWxjczozMDAsZWxlVHhyRGVxOjIwMCxseXJUeHJEZXE6MTUwLGx5clR4clNraXA6MTAwfSxtLnJlZ2lzdGVyTm9kZVNoYXBlcygpLG0ucmVnaXN0ZXJBcnJvd1NoYXBlcygpLG0ucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycygpfSxtOC5ub3RpZnk9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9ay5jeTtpZighdGhpcy5kZXN0cm95ZWQpe2lmKHg9PT0iaW5pdCIpe2subG9hZCgpO3JldHVybn1pZih4PT09ImRlc3Ryb3kiKXtrLmRlc3Ryb3koKTtyZXR1cm59KHg9PT0iYWRkInx8eD09PSJyZW1vdmUifHx4PT09Im1vdmUiJiZTLmhhc0NvbXBvdW5kTm9kZXMoKXx8eD09PSJsb2FkInx8eD09PSJ6b3JkZXIifHx4PT09Im1vdW50IikmJmsuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzKCkseD09PSJ2aWV3cG9ydCImJmsucmVkcmF3SGludCgic2VsZWN0IiwhMCksKHg9PT0ibG9hZCJ8fHg9PT0icmVzaXplInx8eD09PSJtb3VudCIpJiYoay5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSxrLm1hdGNoQ2FudmFzU2l6ZShrLmNvbnRhaW5lcikpLGsucmVkcmF3SGludCgiZWxlcyIsITApLGsucmVkcmF3SGludCgiZHJhZyIsITApLHRoaXMuc3RhcnRSZW5kZXJMb29wKCksdGhpcy5yZWRyYXcoKX19LG04LmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgeD10aGlzO3guZGVzdHJveWVkPSEwLHguY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtmb3IodmFyIG09MDttPHguYmluZGluZ3MubGVuZ3RoO20rKyl7dmFyIGs9eC5iaW5kaW5nc1ttXSxTPWssTT1TLnRhcmdldDsoTS5vZmZ8fE0ucmVtb3ZlRXZlbnRMaXN0ZW5lcikuYXBwbHkoTSxTLmFyZ3MpfWlmKHguYmluZGluZ3M9W10seC5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10seC5vblVwZGF0ZUVsZUNhbGNzRm5zPVtdLHgucmVtb3ZlT2JzZXJ2ZXImJngucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHguc3R5bGVPYnNlcnZlciYmeC5zdHlsZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx4LnJlc2l6ZU9ic2VydmVyJiZ4LnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx4LmxhYmVsQ2FsY0Rpdil0cnl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh4LmxhYmVsQ2FsY0Rpdil9Y2F0Y2h7fX0sbTguaXNIZWFkbGVzcz1mdW5jdGlvbigpe3JldHVybiExfSxbQkkscnosaXosYjgsS3YsZmtdLmZvckVhY2goZnVuY3Rpb24oeCl7eXQobTgseCl9KTt2YXIgUkk9MWUzLzYwLG96PXtzZXR1cERlcXVldWVpbmc6ZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFM9dGhpcyxNPXRoaXMucmVuZGVyZXI7aWYoIVMuZGVxdWV1ZWluZ1NldHVwKXtTLmRlcXVldWVpbmdTZXR1cD0hMDt2YXIgTz1OdShmdW5jdGlvbigpe00ucmVkcmF3SGludCgiZWxlcyIsITApLE0ucmVkcmF3SGludCgiZHJhZyIsITApLE0ucmVkcmF3KCl9LG0uZGVxUmVkcmF3VGhyZXNob2xkKSxOPWZ1bmN0aW9uKHEsWSl7dmFyIFo9QnAoKSxjZT1NLmF2ZXJhZ2VSZWRyYXdUaW1lLHZlPU0ubGFzdFJlZHJhd1RpbWUsbWU9W10sTGU9TS5jeS5leHRlbnQoKSxfZT1NLmdldFBpeGVsUmF0aW8oKTtmb3IocXx8TS5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZSgpOzspe3ZhciBFZT1CcCgpLEJlPUVlLVosUmU9RWUtWTtpZih2ZTxSSSl7dmFyIFZlPVJJLShxP2NlOjApO2lmKFJlPj1tLmRlcUZhc3RDb3N0KlZlKWJyZWFrfWVsc2UgaWYocSl7aWYoQmU+PW0uZGVxQ29zdCp2ZXx8QmU+PW0uZGVxQXZnQ29zdCpjZSlicmVha31lbHNlIGlmKFJlPj1tLmRlcU5vRHJhd0Nvc3QqUkkpYnJlYWs7dmFyIGN0PW0uZGVxKFMsX2UsTGUpO2lmKGN0Lmxlbmd0aD4wKWZvcih2YXIgc3Q9MDtzdDxjdC5sZW5ndGg7c3QrKyltZS5wdXNoKGN0W3N0XSk7ZWxzZSBicmVha31tZS5sZW5ndGg+MCYmKG0ub25EZXFkKFMsbWUpLCFxJiZtLnNob3VsZFJlZHJhdyhTLG1lLF9lLExlKSYmTygpKX0sJD1tLnByaW9yaXR5fHxuSTtNLmJlZm9yZVJlbmRlcihOLCQoUykpfX19fSxVcmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB4KG0pe3ZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpYMztkKHRoaXMseCksdGhpcy5pZHNCeUtleT1uZXcgd20sdGhpcy5rZXlGb3JJZD1uZXcgd20sdGhpcy5jYWNoZXNCeUx2bD1uZXcgd20sdGhpcy5sdmxzPVtdLHRoaXMuZ2V0S2V5PW0sdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleT1rfXJldHVybiB2KHgsW3trZXk6ImdldElkc0ZvciIsdmFsdWU6ZnVuY3Rpb24oayl7az09bnVsbCYmY2goIkNhbiBub3QgZ2V0IGlkIGxpc3QgZm9yIG51bGwga2V5Iik7dmFyIFM9dGhpcy5pZHNCeUtleSxNPXRoaXMuaWRzQnlLZXkuZ2V0KGspO3JldHVybiBNfHwoTT1uZXcgUTcsUy5zZXQoayxNKSksTX19LHtrZXk6ImFkZElkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbihrLFMpe2shPW51bGwmJnRoaXMuZ2V0SWRzRm9yKGspLmFkZChTKX19LHtrZXk6ImRlbGV0ZUlkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbihrLFMpe2shPW51bGwmJnRoaXMuZ2V0SWRzRm9yKGspLmRlbGV0ZShTKX19LHtrZXk6ImdldE51bWJlck9mSWRzRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbihrKXtyZXR1cm4gaz09bnVsbD8wOnRoaXMuZ2V0SWRzRm9yKGspLnNpemV9fSx7a2V5OiJ1cGRhdGVLZXlNYXBwaW5nRm9yIix2YWx1ZTpmdW5jdGlvbihrKXt2YXIgUz1rLmlkKCksTT10aGlzLmtleUZvcklkLmdldChTKSxPPXRoaXMuZ2V0S2V5KGspO3RoaXMuZGVsZXRlSWRGb3JLZXkoTSxTKSx0aGlzLmFkZElkRm9yS2V5KE8sUyksdGhpcy5rZXlGb3JJZC5zZXQoUyxPKX19LHtrZXk6ImRlbGV0ZUtleU1hcHBpbmdGb3IiLHZhbHVlOmZ1bmN0aW9uKGspe3ZhciBTPWsuaWQoKSxNPXRoaXMua2V5Rm9ySWQuZ2V0KFMpO3RoaXMuZGVsZXRlSWRGb3JLZXkoTSxTKSx0aGlzLmtleUZvcklkLmRlbGV0ZShTKX19LHtrZXk6ImtleUhhc0NoYW5nZWRGb3IiLHZhbHVlOmZ1bmN0aW9uKGspe3ZhciBTPWsuaWQoKSxNPXRoaXMua2V5Rm9ySWQuZ2V0KFMpLE89dGhpcy5nZXRLZXkoayk7cmV0dXJuIE0hPT1PfX0se2tleToiaXNJbnZhbGlkIix2YWx1ZTpmdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5rZXlIYXNDaGFuZ2VkRm9yKGspfHx0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KGspfX0se2tleToiZ2V0Q2FjaGVzQXQiLHZhbHVlOmZ1bmN0aW9uKGspe3ZhciBTPXRoaXMuY2FjaGVzQnlMdmwsTT10aGlzLmx2bHMsTz1TLmdldChrKTtyZXR1cm4gT3x8KE89bmV3IHdtLFMuc2V0KGssTyksTS5wdXNoKGspKSxPfX0se2tleToiZ2V0Q2FjaGUiLHZhbHVlOmZ1bmN0aW9uKGssUyl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoUykuZ2V0KGspfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihrLFMpe3ZhciBNPXRoaXMuZ2V0S2V5KGspLE89dGhpcy5nZXRDYWNoZShNLFMpO3JldHVybiBPIT1udWxsJiZ0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3IoayksT319LHtrZXk6ImdldEZvckNhY2hlZEtleSIsdmFsdWU6ZnVuY3Rpb24oayxTKXt2YXIgTT10aGlzLmtleUZvcklkLmdldChrLmlkKCkpLE89dGhpcy5nZXRDYWNoZShNLFMpO3JldHVybiBPfX0se2tleToiaGFzQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uKGssUyl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoUykuaGFzKGspfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihrLFMpe3ZhciBNPXRoaXMuZ2V0S2V5KGspO3JldHVybiB0aGlzLmhhc0NhY2hlKE0sUyl9fSx7a2V5OiJzZXRDYWNoZSIsdmFsdWU6ZnVuY3Rpb24oayxTLE0pe00ua2V5PWssdGhpcy5nZXRDYWNoZXNBdChTKS5zZXQoayxNKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oayxTLE0pe3ZhciBPPXRoaXMuZ2V0S2V5KGspO3RoaXMuc2V0Q2FjaGUoTyxTLE0pLHRoaXMudXBkYXRlS2V5TWFwcGluZ0ZvcihrKX19LHtrZXk6ImRlbGV0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbihrLFMpe3RoaXMuZ2V0Q2FjaGVzQXQoUykuZGVsZXRlKGspfX0se2tleToiZGVsZXRlIix2YWx1ZTpmdW5jdGlvbihrLFMpe3ZhciBNPXRoaXMuZ2V0S2V5KGspO3RoaXMuZGVsZXRlQ2FjaGUoTSxTKX19LHtrZXk6ImludmFsaWRhdGVLZXkiLHZhbHVlOmZ1bmN0aW9uKGspe3ZhciBTPXRoaXM7dGhpcy5sdmxzLmZvckVhY2goZnVuY3Rpb24oTSl7cmV0dXJuIFMuZGVsZXRlQ2FjaGUoayxNKX0pfX0se2tleToiaW52YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oayl7dmFyIFM9ay5pZCgpLE09dGhpcy5rZXlGb3JJZC5nZXQoUyk7dGhpcy5kZWxldGVLZXlNYXBwaW5nRm9yKGspO3ZhciBPPXRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkoayk7cmV0dXJuIE8mJnRoaXMuaW52YWxpZGF0ZUtleShNKSxPfHx0aGlzLmdldE51bWJlck9mSWRzRm9yS2V5KE0pPT09MH19XSkseH0oKSxjej0yNSxZUz01MCxYUz0tNCxqST0zLEdyZT03Ljk5LEtyZT04LFdyZT0xMDI0LFlyZT0xMDI0LFhyZT0xMDI0LFFyZT0uMixKcmU9LjgsWnJlPTEwLGVpZT0uMTUsdGllPS4xLG5pZT0uOSxyaWU9LjksaWllPTEwMCxzaWU9MSx2OD17ZGVxdWV1ZToiZGVxdWV1ZSIsZG93bnNjYWxlOiJkb3duc2NhbGUiLGhpZ2hRdWFsaXR5OiJoaWdoUXVhbGl0eSJ9LGFpZT1xMCh7Z2V0S2V5Om51bGwsZG9lc0VsZUludmFsaWRhdGVLZXk6WDMsZHJhd0VsZW1lbnQ6bnVsbCxnZXRCb3VuZGluZ0JveDpudWxsLGdldFJvdGF0aW9uUG9pbnQ6bnVsbCxnZXRSb3RhdGlvbk9mZnNldDpudWxsLGlzVmlzaWJsZTpsNSxhbGxvd0VkZ2VUeHJDYWNoaW5nOiEwLGFsbG93UGFyZW50VHhyQ2FjaGluZzohMH0pLGRrPWZ1bmN0aW9uKG0sayl7dmFyIFM9dGhpcztTLnJlbmRlcmVyPW0sUy5vbkRlcXVldWVzPVtdO3ZhciBNPWFpZShrKTt5dChTLE0pLFMubG9va3VwPW5ldyBVcmUoTS5nZXRLZXksTS5kb2VzRWxlSW52YWxpZGF0ZUtleSksUy5zZXR1cERlcXVldWVpbmcoKX0sQ2Y9ZGsucHJvdG90eXBlO0NmLnJlYXNvbnM9djgsQ2YuZ2V0VGV4dHVyZVF1ZXVlPWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXM7cmV0dXJuIG0uZWxlSW1nQ2FjaGVzPW0uZWxlSW1nQ2FjaGVzfHx7fSxtLmVsZUltZ0NhY2hlc1t4XT1tLmVsZUltZ0NhY2hlc1t4XXx8W119LENmLmdldFJldGlyZWRUZXh0dXJlUXVldWU9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcyxrPW0uZWxlSW1nQ2FjaGVzLnJldGlyZWQ9bS5lbGVJbWdDYWNoZXMucmV0aXJlZHx8e30sUz1rW3hdPWtbeF18fFtdO3JldHVybiBTfSxDZi5nZXRFbGVtZW50UXVldWU9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLG09eC5lbGVDYWNoZVF1ZXVlPXguZWxlQ2FjaGVRdWV1ZXx8bmV3IFY5KGZ1bmN0aW9uKGssUyl7cmV0dXJuIFMucmVxcy1rLnJlcXN9KTtyZXR1cm4gbX0sQ2YuZ2V0RWxlbWVudEtleVRvUXVldWU9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLG09eC5lbGVLZXlUb0NhY2hlUXVldWU9eC5lbGVLZXlUb0NhY2hlUXVldWV8fHt9O3JldHVybiBtfSxDZi5nZXRFbGVtZW50PWZ1bmN0aW9uKHgsbSxrLFMsTSl7dmFyIE89dGhpcyxOPXRoaXMucmVuZGVyZXIsJD1OLmN5Lnpvb20oKSxIPXRoaXMubG9va3VwO2lmKCFtfHxtLnc9PT0wfHxtLmg9PT0wfHxpc05hTihtLncpfHxpc05hTihtLmgpfHwheC52aXNpYmxlKCl8fHgucmVtb3ZlZCgpfHwhTy5hbGxvd0VkZ2VUeHJDYWNoaW5nJiZ4LmlzRWRnZSgpfHwhTy5hbGxvd1BhcmVudFR4ckNhY2hpbmcmJnguaXNQYXJlbnQoKSlyZXR1cm4gbnVsbDtpZihTPT1udWxsJiYoUz1NYXRoLmNlaWwoaUkoJCprKSkpLFM8WFMpUz1YUztlbHNlIGlmKCQ+PUdyZXx8Uz5qSSlyZXR1cm4gbnVsbDt2YXIgcT1NYXRoLnBvdygyLFMpLFk9bS5oKnEsWj1tLncqcSxjZT1OLmVsZVRleHRCaWdnZXJUaGFuTWluKHgscSk7aWYoIXRoaXMuaXNWaXNpYmxlKHgsY2UpKXJldHVybiBudWxsO3ZhciB2ZT1ILmdldCh4LFMpO2lmKHZlJiZ2ZS5pbnZhbGlkYXRlZCYmKHZlLmludmFsaWRhdGVkPSExLHZlLnRleHR1cmUuaW52YWxpZGF0ZWRXaWR0aC09dmUud2lkdGgpLHZlKXJldHVybiB2ZTt2YXIgbWU7aWYoWTw9Y3o/bWU9Y3o6WTw9WVM/bWU9WVM6bWU9TWF0aC5jZWlsKFkvWVMpKllTLFk+WHJlfHxaPllyZSlyZXR1cm4gbnVsbDt2YXIgTGU9Ty5nZXRUZXh0dXJlUXVldWUobWUpLF9lPUxlW0xlLmxlbmd0aC0yXSxFZT1mdW5jdGlvbigpe3JldHVybiBPLnJlY3ljbGVUZXh0dXJlKG1lLFopfHxPLmFkZFRleHR1cmUobWUsWil9O19lfHwoX2U9TGVbTGUubGVuZ3RoLTFdKSxfZXx8KF9lPUVlKCkpLF9lLndpZHRoLV9lLnVzZWRXaWR0aDxaJiYoX2U9RWUoKSk7Zm9yKHZhciBCZT1mdW5jdGlvbihobil7cmV0dXJuIGhuJiZobi5zY2FsZWRMYWJlbFNob3duPT09Y2V9LFJlPU0mJk09PT12OC5kZXF1ZXVlLFZlPU0mJk09PT12OC5oaWdoUXVhbGl0eSxjdD1NJiZNPT09djguZG93bnNjYWxlLHN0LFllPVMrMTtZZTw9akk7WWUrKyl7dmFyIG10PUguZ2V0KHgsWWUpO2lmKG10KXtzdD1tdDticmVha319dmFyIEplPXN0JiZzdC5sZXZlbD09PVMrMT9zdDpudWxsLEx0PWZ1bmN0aW9uKCl7X2UuY29udGV4dC5kcmF3SW1hZ2UoSmUudGV4dHVyZS5jYW52YXMsSmUueCwwLEplLndpZHRoLEplLmhlaWdodCxfZS51c2VkV2lkdGgsMCxaLFkpfTtpZihfZS5jb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksX2UuY29udGV4dC5jbGVhclJlY3QoX2UudXNlZFdpZHRoLDAsWixtZSksQmUoSmUpKUx0KCk7ZWxzZSBpZihCZShzdCkpaWYoVmUpe2Zvcih2YXIgTXQ9c3QubGV2ZWw7TXQ+UztNdC0tKUplPU8uZ2V0RWxlbWVudCh4LG0sayxNdCx2OC5kb3duc2NhbGUpO0x0KCl9ZWxzZSByZXR1cm4gTy5xdWV1ZUVsZW1lbnQoeCxzdC5sZXZlbC0xKSxzdDtlbHNle3ZhciB1dDtpZighUmUmJiFWZSYmIWN0KWZvcih2YXIgV3Q9Uy0xO1d0Pj1YUztXdC0tKXt2YXIgVHQ9SC5nZXQoeCxXdCk7aWYoVHQpe3V0PVR0O2JyZWFrfX1pZihCZSh1dCkpcmV0dXJuIE8ucXVldWVFbGVtZW50KHgsUyksdXQ7X2UuY29udGV4dC50cmFuc2xhdGUoX2UudXNlZFdpZHRoLDApLF9lLmNvbnRleHQuc2NhbGUocSxxKSx0aGlzLmRyYXdFbGVtZW50KF9lLmNvbnRleHQseCxtLGNlLCExKSxfZS5jb250ZXh0LnNjYWxlKDEvcSwxL3EpLF9lLmNvbnRleHQudHJhbnNsYXRlKC1fZS51c2VkV2lkdGgsMCl9cmV0dXJuIHZlPXt4Ol9lLnVzZWRXaWR0aCx0ZXh0dXJlOl9lLGxldmVsOlMsc2NhbGU6cSx3aWR0aDpaLGhlaWdodDpZLHNjYWxlZExhYmVsU2hvd246Y2V9LF9lLnVzZWRXaWR0aCs9TWF0aC5jZWlsKForS3JlKSxfZS5lbGVDYWNoZXMucHVzaCh2ZSksSC5zZXQoeCxTLHZlKSxPLmNoZWNrVGV4dHVyZUZ1bGxuZXNzKF9lKSx2ZX0sQ2YuaW52YWxpZGF0ZUVsZW1lbnRzPWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT0wO208eC5sZW5ndGg7bSsrKXRoaXMuaW52YWxpZGF0ZUVsZW1lbnQoeFttXSl9LENmLmludmFsaWRhdGVFbGVtZW50PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMsaz1tLmxvb2t1cCxTPVtdLE09ay5pc0ludmFsaWQoeCk7aWYoTSl7Zm9yKHZhciBPPVhTO088PWpJO08rKyl7dmFyIE49ay5nZXRGb3JDYWNoZWRLZXkoeCxPKTtOJiZTLnB1c2goTil9dmFyICQ9ay5pbnZhbGlkYXRlKHgpO2lmKCQpZm9yKHZhciBIPTA7SDxTLmxlbmd0aDtIKyspe3ZhciBxPVNbSF0sWT1xLnRleHR1cmU7WS5pbnZhbGlkYXRlZFdpZHRoKz1xLndpZHRoLHEuaW52YWxpZGF0ZWQ9ITAsbS5jaGVja1RleHR1cmVVdGlsaXR5KFkpfW0ucmVtb3ZlRnJvbVF1ZXVlKHgpfX0sQ2YuY2hlY2tUZXh0dXJlVXRpbGl0eT1mdW5jdGlvbih4KXt4LmludmFsaWRhdGVkV2lkdGg+PVFyZSp4LndpZHRoJiZ0aGlzLnJldGlyZVRleHR1cmUoeCl9LENmLmNoZWNrVGV4dHVyZUZ1bGxuZXNzPWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMsaz1tLmdldFRleHR1cmVRdWV1ZSh4LmhlaWdodCk7eC51c2VkV2lkdGgveC53aWR0aD5KcmUmJnguZnVsbG5lc3NDaGVja3M+PVpyZT9RMyhrLHgpOnguZnVsbG5lc3NDaGVja3MrK30sQ2YucmV0aXJlVGV4dHVyZT1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9eC5oZWlnaHQsUz1tLmdldFRleHR1cmVRdWV1ZShrKSxNPXRoaXMubG9va3VwO1EzKFMseCkseC5yZXRpcmVkPSEwO2Zvcih2YXIgTz14LmVsZUNhY2hlcyxOPTA7TjxPLmxlbmd0aDtOKyspe3ZhciAkPU9bTl07TS5kZWxldGVDYWNoZSgkLmtleSwkLmxldmVsKX1jUyhPKTt2YXIgSD1tLmdldFJldGlyZWRUZXh0dXJlUXVldWUoayk7SC5wdXNoKHgpfSxDZi5hZGRUZXh0dXJlPWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcyxTPWsuZ2V0VGV4dHVyZVF1ZXVlKHgpLE09e307cmV0dXJuIFMucHVzaChNKSxNLmVsZUNhY2hlcz1bXSxNLmhlaWdodD14LE0ud2lkdGg9TWF0aC5tYXgoV3JlLG0pLE0udXNlZFdpZHRoPTAsTS5pbnZhbGlkYXRlZFdpZHRoPTAsTS5mdWxsbmVzc0NoZWNrcz0wLE0uY2FudmFzPWsucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhNLndpZHRoLE0uaGVpZ2h0KSxNLmNvbnRleHQ9TS5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxNfSxDZi5yZWN5Y2xlVGV4dHVyZT1mdW5jdGlvbih4LG0pe2Zvcih2YXIgaz10aGlzLFM9ay5nZXRUZXh0dXJlUXVldWUoeCksTT1rLmdldFJldGlyZWRUZXh0dXJlUXVldWUoeCksTz0wO088TS5sZW5ndGg7TysrKXt2YXIgTj1NW09dO2lmKE4ud2lkdGg+PW0pcmV0dXJuIE4ucmV0aXJlZD0hMSxOLnVzZWRXaWR0aD0wLE4uaW52YWxpZGF0ZWRXaWR0aD0wLE4uZnVsbG5lc3NDaGVja3M9MCxjUyhOLmVsZUNhY2hlcyksTi5jb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksTi5jb250ZXh0LmNsZWFyUmVjdCgwLDAsTi53aWR0aCxOLmhlaWdodCksUTMoTSxOKSxTLnB1c2goTiksTn19LENmLnF1ZXVlRWxlbWVudD1mdW5jdGlvbih4LG0pe3ZhciBrPXRoaXMsUz1rLmdldEVsZW1lbnRRdWV1ZSgpLE09ay5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLE89dGhpcy5nZXRLZXkoeCksTj1NW09dO2lmKE4pTi5sZXZlbD1NYXRoLm1heChOLmxldmVsLG0pLE4uZWxlcy5tZXJnZSh4KSxOLnJlcXMrKyxTLnVwZGF0ZUl0ZW0oTik7ZWxzZXt2YXIgJD17ZWxlczp4LnNwYXduKCkubWVyZ2UoeCksbGV2ZWw6bSxyZXFzOjEsa2V5Ok99O1MucHVzaCgkKSxNW09dPSR9fSxDZi5kZXF1ZXVlPWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT10aGlzLGs9bS5nZXRFbGVtZW50UXVldWUoKSxTPW0uZ2V0RWxlbWVudEtleVRvUXVldWUoKSxNPVtdLE89bS5sb29rdXAsTj0wO048c2llJiZrLnNpemUoKT4wO04rKyl7dmFyICQ9ay5wb3AoKSxIPSQua2V5LHE9JC5lbGVzWzBdLFk9Ty5oYXNDYWNoZShxLCQubGV2ZWwpO2lmKFNbSF09bnVsbCxZKWNvbnRpbnVlO00ucHVzaCgkKTt2YXIgWj1tLmdldEJvdW5kaW5nQm94KHEpO20uZ2V0RWxlbWVudChxLFoseCwkLmxldmVsLHY4LmRlcXVldWUpfXJldHVybiBNfSxDZi5yZW1vdmVGcm9tUXVldWU9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcyxrPW0uZ2V0RWxlbWVudFF1ZXVlKCksUz1tLmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksTT10aGlzLmdldEtleSh4KSxPPVNbTV07TyE9bnVsbCYmKE8uZWxlcy5sZW5ndGg9PT0xPyhPLnJlcXM9WDcsay51cGRhdGVJdGVtKE8pLGsucG9wKCksU1tNXT1udWxsKTpPLmVsZXMudW5tZXJnZSh4KSl9LENmLm9uRGVxdWV1ZT1mdW5jdGlvbih4KXt0aGlzLm9uRGVxdWV1ZXMucHVzaCh4KX0sQ2Yub2ZmRGVxdWV1ZT1mdW5jdGlvbih4KXtRMyh0aGlzLm9uRGVxdWV1ZXMseCl9LENmLnNldHVwRGVxdWV1ZWluZz1vei5zZXR1cERlcXVldWVpbmcoe2RlcVJlZHJhd1RocmVzaG9sZDppaWUsZGVxQ29zdDplaWUsZGVxQXZnQ29zdDp0aWUsZGVxTm9EcmF3Q29zdDpuaWUsZGVxRmFzdENvc3Q6cmllLGRlcTpmdW5jdGlvbihtLGssUyl7cmV0dXJuIG0uZGVxdWV1ZShrLFMpfSxvbkRlcWQ6ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPG0ub25EZXF1ZXVlcy5sZW5ndGg7UysrKXt2YXIgTT1tLm9uRGVxdWV1ZXNbU107TShrKX19LHNob3VsZFJlZHJhdzpmdW5jdGlvbihtLGssUyxNKXtmb3IodmFyIE89MDtPPGsubGVuZ3RoO08rKylmb3IodmFyIE49a1tPXS5lbGVzLCQ9MDskPE4ubGVuZ3RoOyQrKyl7dmFyIEg9TlskXS5ib3VuZGluZ0JveCgpO2lmKHNJKEgsTSkpcmV0dXJuITB9cmV0dXJuITF9LHByaW9yaXR5OmZ1bmN0aW9uKG0pe3JldHVybiBtLnJlbmRlcmVyLmJlZm9yZVJlbmRlclByaW9yaXRpZXMuZWxlVHhyRGVxfX0pO3ZhciBvaWU9MSxnaz0tNCxRUz0yLGNpZT0zLjk5LHVpZT01MCxsaWU9NTAsU2Y9LjE1LGhpZT0uMSxmaWU9LjksdXo9LjksZGllPTEsbHo9MjUwLGh6PTRlMyo0ZTMsZno9ITAsZHo9ZnVuY3Rpb24obSl7dmFyIGs9dGhpcyxTPWsucmVuZGVyZXI9bSxNPVMuY3k7ay5sYXllcnNCeUxldmVsPXt9LGsuZmlyc3RHZXQ9ITAsay5sYXN0SW52YWxpZGF0aW9uVGltZT1CcCgpLTIqbHosay5za2lwcGluZz0hMSxrLmVsZVR4ckRlcXM9TS5jb2xsZWN0aW9uKCksay5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50PU51KGZ1bmN0aW9uKCl7ay5yZWZpbmVFbGVtZW50VGV4dHVyZXMoay5lbGVUeHJEZXFzKSxrLmVsZVR4ckRlcXMudW5tZXJnZShrLmVsZVR4ckRlcXMpfSxsaWUpLFMuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKE4sJCl7JC1rLmxhc3RJbnZhbGlkYXRpb25UaW1lPD1sej9rLnNraXBwaW5nPSEwOmsuc2tpcHBpbmc9ITF9LFMuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJTa2lwKTt2YXIgTz1mdW5jdGlvbigkLEgpe3JldHVybiBILnJlcXMtJC5yZXFzfTtrLmxheWVyc1F1ZXVlPW5ldyBWOShPKSxrLnNldHVwRGVxdWV1ZWluZygpfSxuMD1kei5wcm90b3R5cGUsZ3o9MCxKUz1NYXRoLnBvdygyLDUzKS0xO24wLm1ha2VMYXllcj1mdW5jdGlvbih4LG0pe3ZhciBrPU1hdGgucG93KDIsbSksUz1NYXRoLmNlaWwoeC53KmspLE09TWF0aC5jZWlsKHguaCprKSxPPXRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhTLE0pLE49e2lkOmd6PSsrZ3olSlMsYmI6eCxsZXZlbDptLHdpZHRoOlMsaGVpZ2h0Ok0sY2FudmFzOk8sY29udGV4dDpPLmdldENvbnRleHQoIjJkIiksZWxlczpbXSxlbGVzUXVldWU6W10scmVxczowfSwkPU4uY29udGV4dCxIPS1OLmJiLngxLHE9LU4uYmIueTE7cmV0dXJuICQuc2NhbGUoayxrKSwkLnRyYW5zbGF0ZShILHEpLE59LG4wLmdldExheWVycz1mdW5jdGlvbih4LG0sayl7dmFyIFM9dGhpcyxNPVMucmVuZGVyZXIsTz1NLmN5LE49Ty56b29tKCksJD1TLmZpcnN0R2V0O2lmKFMuZmlyc3RHZXQ9ITEsaz09bnVsbCl7aWYoaz1NYXRoLmNlaWwoaUkoTiptKSksazxnaylrPWdrO2Vsc2UgaWYoTj49Y2llfHxrPlFTKXJldHVybiBudWxsfVMudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcoayx4KTt2YXIgSD1TLmxheWVyc0J5TGV2ZWwscT1NYXRoLnBvdygyLGspLFk9SFtrXT1IW2tdfHxbXSxaLGNlPVMubGV2ZWxJc0NvbXBsZXRlKGsseCksdmUsbWU9ZnVuY3Rpb24oKXt2YXIgTHQ9ZnVuY3Rpb24oX24pe2lmKFMudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcoX24seCksUy5sZXZlbElzQ29tcGxldGUoX24seCkpcmV0dXJuIHZlPUhbX25dLCEwfSxNdD1mdW5jdGlvbihfbil7aWYoIXZlKWZvcih2YXIgaG49aytfbjtnazw9aG4mJmhuPD1RUyYmIUx0KGhuKTtobis9X24pO307TXQoMSksTXQoLTEpO2Zvcih2YXIgdXQ9WS5sZW5ndGgtMTt1dD49MDt1dC0tKXt2YXIgV3Q9WVt1dF07V3QuaW52YWxpZCYmUTMoWSxXdCl9fTtpZighY2UpbWUoKTtlbHNlIHJldHVybiBZO3ZhciBMZT1mdW5jdGlvbigpe2lmKCFaKXtaPVdkKCk7Zm9yKHZhciBMdD0wO0x0PHgubGVuZ3RoO0x0KyspZGooWix4W0x0XS5ib3VuZGluZ0JveCgpKX1yZXR1cm4gWn0sX2U9ZnVuY3Rpb24oTHQpe0x0PUx0fHx7fTt2YXIgTXQ9THQuYWZ0ZXI7TGUoKTt2YXIgdXQ9Wi53KnEqKFouaCpxKTtpZih1dD5oeilyZXR1cm4gbnVsbDt2YXIgV3Q9Uy5tYWtlTGF5ZXIoWixrKTtpZihNdCE9bnVsbCl7dmFyIFR0PVkuaW5kZXhPZihNdCkrMTtZLnNwbGljZShUdCwwLFd0KX1lbHNlKEx0Lmluc2VydD09PXZvaWQgMHx8THQuaW5zZXJ0KSYmWS51bnNoaWZ0KFd0KTtyZXR1cm4gV3R9O2lmKFMuc2tpcHBpbmcmJiEkKXJldHVybiBudWxsO2Zvcih2YXIgRWU9bnVsbCxCZT14Lmxlbmd0aC9vaWUsUmU9ISQsVmU9MDtWZTx4Lmxlbmd0aDtWZSsrKXt2YXIgY3Q9eFtWZV0sc3Q9Y3QuX3ByaXZhdGUucnNjcmF0Y2gsWWU9c3QuaW1nTGF5ZXJDYWNoZXM9c3QuaW1nTGF5ZXJDYWNoZXN8fHt9LG10PVllW2tdO2lmKG10KXtFZT1tdDtjb250aW51ZX1pZigoIUVlfHxFZS5lbGVzLmxlbmd0aD49QmV8fCFwaihFZS5iYixjdC5ib3VuZGluZ0JveCgpKSkmJihFZT1fZSh7aW5zZXJ0OiEwLGFmdGVyOkVlfSksIUVlKSlyZXR1cm4gbnVsbDt2ZXx8UmU/Uy5xdWV1ZUxheWVyKEVlLGN0KTpTLmRyYXdFbGVJbkxheWVyKEVlLGN0LGssbSksRWUuZWxlcy5wdXNoKGN0KSxZZVtrXT1FZX1yZXR1cm4gdmV8fChSZT9udWxsOlkpfSxuMC5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWw9ZnVuY3Rpb24oeCxtKXtyZXR1cm4geH0sbjAuZHJhd0VsZUluTGF5ZXI9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcyxPPXRoaXMucmVuZGVyZXIsTj14LmNvbnRleHQsJD1tLmJvdW5kaW5nQm94KCk7JC53PT09MHx8JC5oPT09MHx8IW0udmlzaWJsZSgpfHwoaz1NLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChrLFMpLE8uc2V0SW1nU21vb3RoaW5nKE4sITEpLE8uZHJhd0NhY2hlZEVsZW1lbnQoTixtLG51bGwsbnVsbCxrLGZ6KSxPLnNldEltZ1Ntb290aGluZyhOLCEwKSl9LG4wLmxldmVsSXNDb21wbGV0ZT1mdW5jdGlvbih4LG0pe3ZhciBrPXRoaXMsUz1rLmxheWVyc0J5TGV2ZWxbeF07aWYoIVN8fFMubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIE09MCxPPTA7TzxTLmxlbmd0aDtPKyspe3ZhciBOPVNbT107aWYoTi5yZXFzPjB8fE4uaW52YWxpZClyZXR1cm4hMTtNKz1OLmVsZXMubGVuZ3RofXJldHVybiBNPT09bS5sZW5ndGh9LG4wLnZhbGlkYXRlTGF5ZXJzRWxlc09yZGVyaW5nPWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcy5sYXllcnNCeUxldmVsW3hdO2lmKGspZm9yKHZhciBTPTA7UzxrLmxlbmd0aDtTKyspe2Zvcih2YXIgTT1rW1NdLE89LTEsTj0wO048bS5sZW5ndGg7TisrKWlmKE0uZWxlc1swXT09PW1bTl0pe089TjticmVha31pZihPPDApe3RoaXMuaW52YWxpZGF0ZUxheWVyKE0pO2NvbnRpbnVlfWZvcih2YXIgJD1PLE49MDtOPE0uZWxlcy5sZW5ndGg7TisrKWlmKE0uZWxlc1tOXSE9PW1bJCtOXSl7dGhpcy5pbnZhbGlkYXRlTGF5ZXIoTSk7YnJlYWt9fX0sbjAudXBkYXRlRWxlbWVudHNJbkxheWVycz1mdW5jdGlvbih4LG0pe2Zvcih2YXIgaz10aGlzLFM9VSh4WzBdKSxNPTA7TTx4Lmxlbmd0aDtNKyspZm9yKHZhciBPPVM/bnVsbDp4W01dLE49Uz94W01dOnhbTV0uZWxlLCQ9Ti5fcHJpdmF0ZS5yc2NyYXRjaCxIPSQuaW1nTGF5ZXJDYWNoZXM9JC5pbWdMYXllckNhY2hlc3x8e30scT1naztxPD1RUztxKyspe3ZhciBZPUhbcV07WSYmKE8mJmsuZ2V0RWxlTGV2ZWxGb3JMYXllckxldmVsKFkubGV2ZWwpIT09Ty5sZXZlbHx8bShZLE4sTykpfX0sbjAuaGF2ZUxheWVycz1mdW5jdGlvbigpe2Zvcih2YXIgeD10aGlzLG09ITEsaz1naztrPD1RUztrKyspe3ZhciBTPXgubGF5ZXJzQnlMZXZlbFtrXTtpZihTJiZTLmxlbmd0aD4wKXttPSEwO2JyZWFrfX1yZXR1cm4gbX0sbjAuaW52YWxpZGF0ZUVsZW1lbnRzPWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXM7eC5sZW5ndGghPT0wJiYobS5sYXN0SW52YWxpZGF0aW9uVGltZT1CcCgpLCEoeC5sZW5ndGg9PT0wfHwhbS5oYXZlTGF5ZXJzKCkpJiZtLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnMoeCxmdW5jdGlvbihTLE0sTyl7bS5pbnZhbGlkYXRlTGF5ZXIoUyl9KSl9LG4wLmludmFsaWRhdGVMYXllcj1mdW5jdGlvbih4KXtpZih0aGlzLmxhc3RJbnZhbGlkYXRpb25UaW1lPUJwKCksIXguaW52YWxpZCl7dmFyIG09eC5sZXZlbCxrPXguZWxlcyxTPXRoaXMubGF5ZXJzQnlMZXZlbFttXTtRMyhTLHgpLHguZWxlc1F1ZXVlPVtdLHguaW52YWxpZD0hMCx4LnJlcGxhY2VtZW50JiYoeC5yZXBsYWNlbWVudC5pbnZhbGlkPSEwKTtmb3IodmFyIE09MDtNPGsubGVuZ3RoO00rKyl7dmFyIE89a1tNXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbWdMYXllckNhY2hlcztPJiYoT1ttXT1udWxsKX19fSxuMC5yZWZpbmVFbGVtZW50VGV4dHVyZXM9ZnVuY3Rpb24oeCl7dmFyIG09dGhpczttLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnMoeCxmdW5jdGlvbihTLE0sTyl7dmFyIE49Uy5yZXBsYWNlbWVudDtpZihOfHwoTj1TLnJlcGxhY2VtZW50PW0ubWFrZUxheWVyKFMuYmIsUy5sZXZlbCksTi5yZXBsYWNlcz1TLE4uZWxlcz1TLmVsZXMpLCFOLnJlcXMpZm9yKHZhciAkPTA7JDxOLmVsZXMubGVuZ3RoOyQrKyltLnF1ZXVlTGF5ZXIoTixOLmVsZXNbJF0pfSl9LG4wLmVucXVldWVFbGVtZW50UmVmaW5lbWVudD1mdW5jdGlvbih4KXt0aGlzLmVsZVR4ckRlcXMubWVyZ2UoeCksdGhpcy5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50KCl9LG4wLnF1ZXVlTGF5ZXI9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9ay5sYXllcnNRdWV1ZSxNPXguZWxlc1F1ZXVlLE89TS5oYXNJZD1NLmhhc0lkfHx7fTtpZigheC5yZXBsYWNlbWVudCl7aWYobSl7aWYoT1ttLmlkKCldKXJldHVybjtNLnB1c2gobSksT1ttLmlkKCldPSEwfXgucmVxcz8oeC5yZXFzKyssUy51cGRhdGVJdGVtKHgpKTooeC5yZXFzPTEsUy5wdXNoKHgpKX19LG4wLmRlcXVldWU9ZnVuY3Rpb24oeCl7Zm9yKHZhciBtPXRoaXMsaz1tLmxheWVyc1F1ZXVlLFM9W10sTT0wO008ZGllJiZrLnNpemUoKSE9PTA7KXt2YXIgTz1rLnBlZWsoKTtpZihPLnJlcGxhY2VtZW50KXtrLnBvcCgpO2NvbnRpbnVlfWlmKE8ucmVwbGFjZXMmJk8hPT1PLnJlcGxhY2VzLnJlcGxhY2VtZW50KXtrLnBvcCgpO2NvbnRpbnVlfWlmKE8uaW52YWxpZCl7ay5wb3AoKTtjb250aW51ZX12YXIgTj1PLmVsZXNRdWV1ZS5zaGlmdCgpO04mJihtLmRyYXdFbGVJbkxheWVyKE8sTixPLmxldmVsLHgpLE0rKyksUy5sZW5ndGg9PT0wJiZTLnB1c2goITApLE8uZWxlc1F1ZXVlLmxlbmd0aD09PTAmJihrLnBvcCgpLE8ucmVxcz0wLE8ucmVwbGFjZXMmJm0uYXBwbHlMYXllclJlcGxhY2VtZW50KE8pLG0ucmVxdWVzdFJlZHJhdygpKX1yZXR1cm4gU30sbjAuYXBwbHlMYXllclJlcGxhY2VtZW50PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMsaz1tLmxheWVyc0J5TGV2ZWxbeC5sZXZlbF0sUz14LnJlcGxhY2VzLE09ay5pbmRleE9mKFMpO2lmKCEoTTwwfHxTLmludmFsaWQpKXtrW01dPXg7Zm9yKHZhciBPPTA7Tzx4LmVsZXMubGVuZ3RoO08rKyl7dmFyIE49eC5lbGVzW09dLl9wcml2YXRlLCQ9Ti5pbWdMYXllckNhY2hlcz1OLmltZ0xheWVyQ2FjaGVzfHx7fTskJiYoJFt4LmxldmVsXT14KX1tLnJlcXVlc3RSZWRyYXcoKX19LG4wLnJlcXVlc3RSZWRyYXc9TnUoZnVuY3Rpb24oKXt2YXIgeD10aGlzLnJlbmRlcmVyO3gucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3SGludCgiZHJhZyIsITApLHgucmVkcmF3KCl9LDEwMCksbjAuc2V0dXBEZXF1ZXVlaW5nPW96LnNldHVwRGVxdWV1ZWluZyh7ZGVxUmVkcmF3VGhyZXNob2xkOnVpZSxkZXFDb3N0OlNmLGRlcUF2Z0Nvc3Q6aGllLGRlcU5vRHJhd0Nvc3Q6ZmllLGRlcUZhc3RDb3N0OnV6LGRlcTpmdW5jdGlvbihtLGspe3JldHVybiBtLmRlcXVldWUoayl9LG9uRGVxZDpuSSxzaG91bGRSZWRyYXc6bDUscHJpb3JpdHk6ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXF9fSk7dmFyIHB6PXt9LGJ6O2Z1bmN0aW9uIGdpZSh4LG0pe2Zvcih2YXIgaz0wO2s8bS5sZW5ndGg7aysrKXt2YXIgUz1tW2tdO3gubGluZVRvKFMueCxTLnkpfX1mdW5jdGlvbiBwaWUoeCxtLGspe2Zvcih2YXIgUyxNPTA7TTxtLmxlbmd0aDtNKyspe3ZhciBPPW1bTV07TT09PTAmJihTPU8pLHgubGluZVRvKE8ueCxPLnkpfXgucXVhZHJhdGljQ3VydmVUbyhrLngsay55LFMueCxTLnkpfWZ1bmN0aW9uIG16KHgsbSxrKXt4LmJlZ2luUGF0aCYmeC5iZWdpblBhdGgoKTtmb3IodmFyIFM9bSxNPTA7TTxTLmxlbmd0aDtNKyspe3ZhciBPPVNbTV07eC5saW5lVG8oTy54LE8ueSl9dmFyIE49aywkPWtbMF07eC5tb3ZlVG8oJC54LCQueSk7Zm9yKHZhciBNPTE7TTxOLmxlbmd0aDtNKyspe3ZhciBPPU5bTV07eC5saW5lVG8oTy54LE8ueSl9eC5jbG9zZVBhdGgmJnguY2xvc2VQYXRoKCl9ZnVuY3Rpb24gYmllKHgsbSxrLFMsTSl7eC5iZWdpblBhdGgmJnguYmVnaW5QYXRoKCkseC5hcmMoayxTLE0sMCxNYXRoLlBJKjIsITEpO3ZhciBPPW0sTj1PWzBdO3gubW92ZVRvKE4ueCxOLnkpO2Zvcih2YXIgJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgSD1PWyRdO3gubGluZVRvKEgueCxILnkpfXguY2xvc2VQYXRoJiZ4LmNsb3NlUGF0aCgpfWZ1bmN0aW9uIHZ6KHgsbSxrLFMpe3guYXJjKG0sayxTLDAsTWF0aC5QSSoyLCExKX1wei5hcnJvd1NoYXBlSW1wbD1mdW5jdGlvbih4KXtyZXR1cm4oYnp8fChiej17cG9seWdvbjpnaWUsInRyaWFuZ2xlLWJhY2tjdXJ2ZSI6cGllLCJ0cmlhbmdsZS10ZWUiOm16LCJjaXJjbGUtdHJpYW5nbGUiOmJpZSwidHJpYW5nbGUtY3Jvc3MiOm16LGNpcmNsZTp2en0pKVt4XX07dmFyIFEyPXt9O1EyLmRyYXdFbGVtZW50PWZ1bmN0aW9uKHgsbSxrLFMsTSxPKXt2YXIgTj10aGlzO20uaXNOb2RlKCk/Ti5kcmF3Tm9kZSh4LG0sayxTLE0sTyk6Ti5kcmF3RWRnZSh4LG0sayxTLE0sTyl9LFEyLmRyYXdFbGVtZW50T3ZlcmxheT1mdW5jdGlvbih4LG0pe3ZhciBrPXRoaXM7bS5pc05vZGUoKT9rLmRyYXdOb2RlT3ZlcmxheSh4LG0pOmsuZHJhd0VkZ2VPdmVybGF5KHgsbSl9LFEyLmRyYXdFbGVtZW50VW5kZXJsYXk9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzO20uaXNOb2RlKCk/ay5kcmF3Tm9kZVVuZGVybGF5KHgsbSk6ay5kcmF3RWRnZVVuZGVybGF5KHgsbSl9LFEyLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbj1mdW5jdGlvbih4LG0sayxTLE0sTyxOLCQpe3ZhciBIPXRoaXMscT1rLmdldEJvdW5kaW5nQm94KG0pO2lmKCEocS53PT09MHx8cS5oPT09MCkpe3ZhciBZPWsuZ2V0RWxlbWVudChtLHEsUyxNLE8pO2lmKFkhPW51bGwpe3ZhciBaPSQoSCxtKTtpZihaPT09MClyZXR1cm47dmFyIGNlPU4oSCxtKSx2ZT1xLngxLG1lPXEueTEsTGU9cS53LF9lPXEuaCxFZSxCZSxSZSxWZSxjdDtpZihjZSE9PTApe3ZhciBzdD1rLmdldFJvdGF0aW9uUG9pbnQobSk7UmU9c3QueCxWZT1zdC55LHgudHJhbnNsYXRlKFJlLFZlKSx4LnJvdGF0ZShjZSksY3Q9SC5nZXRJbWdTbW9vdGhpbmcoeCksY3R8fEguc2V0SW1nU21vb3RoaW5nKHgsITApO3ZhciBZZT1rLmdldFJvdGF0aW9uT2Zmc2V0KG0pO0VlPVllLngsQmU9WWUueX1lbHNlIEVlPXZlLEJlPW1lO3ZhciBtdDtaIT09MSYmKG10PXguZ2xvYmFsQWxwaGEseC5nbG9iYWxBbHBoYT1tdCpaKSx4LmRyYXdJbWFnZShZLnRleHR1cmUuY2FudmFzLFkueCwwLFkud2lkdGgsWS5oZWlnaHQsRWUsQmUsTGUsX2UpLFohPT0xJiYoeC5nbG9iYWxBbHBoYT1tdCksY2UhPT0wJiYoeC5yb3RhdGUoLWNlKSx4LnRyYW5zbGF0ZSgtUmUsLVZlKSxjdHx8SC5zZXRJbWdTbW9vdGhpbmcoeCwhMSkpfWVsc2Ugay5kcmF3RWxlbWVudCh4LG0pfX07dmFyIG1pZT1mdW5jdGlvbigpe3JldHVybiAwfSx2aWU9ZnVuY3Rpb24obSxrKXtyZXR1cm4gbS5nZXRUZXh0QW5nbGUoayxudWxsKX0sJEk9ZnVuY3Rpb24obSxrKXtyZXR1cm4gbS5nZXRUZXh0QW5nbGUoaywic291cmNlIil9LHdpZT1mdW5jdGlvbihtLGspe3JldHVybiBtLmdldFRleHRBbmdsZShrLCJ0YXJnZXQiKX0seWllPWZ1bmN0aW9uKG0sayl7cmV0dXJuIGsuZWZmZWN0aXZlT3BhY2l0eSgpfSxwaz1mdW5jdGlvbihtLGspe3JldHVybiBrLnBzdHlsZSgidGV4dC1vcGFjaXR5IikucGZWYWx1ZSprLmVmZmVjdGl2ZU9wYWNpdHkoKX07UTIuZHJhd0NhY2hlZEVsZW1lbnQ9ZnVuY3Rpb24oeCxtLGssUyxNLE8pe3ZhciBOPXRoaXMsJD1OLmRhdGEsSD0kLmVsZVR4ckNhY2hlLHE9JC5sYmxUeHJDYWNoZSxZPSQuc2xiVHhyQ2FjaGUsWj0kLnRsYlR4ckNhY2hlLGNlPW0uYm91bmRpbmdCb3goKSx2ZT1PPT09ITA/SC5yZWFzb25zLmhpZ2hRdWFsaXR5Om51bGw7aWYoIShjZS53PT09MHx8Y2UuaD09PTB8fCFtLnZpc2libGUoKSkmJighU3x8c0koY2UsUykpKXt2YXIgbWU9bS5pc0VkZ2UoKSxMZT1tLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lO04uZHJhd0VsZW1lbnRVbmRlcmxheSh4LG0pLE4uZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKHgsbSxILGssTSx2ZSxtaWUseWllKSwoIW1lfHwhTGUpJiZOLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih4LG0scSxrLE0sdmUsdmllLHBrKSxtZSYmIUxlJiYoTi5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeCxtLFksayxNLHZlLCRJLHBrKSxOLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih4LG0sWixrLE0sdmUsd2llLHBrKSksTi5kcmF3RWxlbWVudE92ZXJsYXkoeCxtKX19LFEyLmRyYXdFbGVtZW50cz1mdW5jdGlvbih4LG0pe2Zvcih2YXIgaz10aGlzLFM9MDtTPG0ubGVuZ3RoO1MrKyl7dmFyIE09bVtTXTtrLmRyYXdFbGVtZW50KHgsTSl9fSxRMi5kcmF3Q2FjaGVkRWxlbWVudHM9ZnVuY3Rpb24oeCxtLGssUyl7Zm9yKHZhciBNPXRoaXMsTz0wO088bS5sZW5ndGg7TysrKXt2YXIgTj1tW09dO00uZHJhd0NhY2hlZEVsZW1lbnQoeCxOLGssUyl9fSxRMi5kcmF3Q2FjaGVkTm9kZXM9ZnVuY3Rpb24oeCxtLGssUyl7Zm9yKHZhciBNPXRoaXMsTz0wO088bS5sZW5ndGg7TysrKXt2YXIgTj1tW09dO04uaXNOb2RlKCkmJk0uZHJhd0NhY2hlZEVsZW1lbnQoeCxOLGssUyl9fSxRMi5kcmF3TGF5ZXJlZEVsZW1lbnRzPWZ1bmN0aW9uKHgsbSxrLFMpe3ZhciBNPXRoaXMsTz1NLmRhdGEubHlyVHhyQ2FjaGUuZ2V0TGF5ZXJzKG0sayk7aWYoTylmb3IodmFyIE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXSxIPSQuYmI7SC53PT09MHx8SC5oPT09MHx8eC5kcmF3SW1hZ2UoJC5jYW52YXMsSC54MSxILnkxLEgudyxILmgpfWVsc2UgTS5kcmF3Q2FjaGVkRWxlbWVudHMoeCxtLGssUyl9O3ZhciBKMj17fTtKMi5kcmF3RWRnZT1mdW5jdGlvbih4LG0sayl7dmFyIFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLE09YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLE89YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLE49dGhpcywkPW0uX3ByaXZhdGUucnNjcmF0Y2g7aWYoIShPJiYhbS52aXNpYmxlKCkpJiYhKCQuYmFkTGluZXx8JC5hbGxwdHM9PW51bGx8fGlzTmFOKCQuYWxscHRzWzBdKSkpe3ZhciBIO2smJihIPWsseC50cmFuc2xhdGUoLUgueDEsLUgueTEpKTt2YXIgcT1PP20ucHN0eWxlKCJvcGFjaXR5IikudmFsdWU6MSxZPU8/bS5wc3R5bGUoImxpbmUtb3BhY2l0eSIpLnZhbHVlOjEsWj1tLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxjZT1tLnBzdHlsZSgibGluZS1zdHlsZSIpLnZhbHVlLHZlPW0ucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsbWU9bS5wc3R5bGUoImxpbmUtY2FwIikudmFsdWUsTGU9cSpZLF9lPXEqWSxFZT1mdW5jdGlvbigpe3ZhciB1dD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06TGU7Wj09PSJzdHJhaWdodC10cmlhbmdsZSI/KE4uZWxlU3Ryb2tlU3R5bGUoeCxtLHV0KSxOLmRyYXdFZGdlVHJpYW5nbGVQYXRoKG0seCwkLmFsbHB0cykpOih4LmxpbmVXaWR0aD12ZSx4LmxpbmVDYXA9bWUsTi5lbGVTdHJva2VTdHlsZSh4LG0sdXQpLE4uZHJhd0VkZ2VQYXRoKG0seCwkLmFsbHB0cyxjZSkseC5saW5lQ2FwPSJidXR0Iil9LEJlPWZ1bmN0aW9uKCl7TSYmTi5kcmF3RWRnZU92ZXJsYXkoeCxtKX0sUmU9ZnVuY3Rpb24oKXtNJiZOLmRyYXdFZGdlVW5kZXJsYXkoeCxtKX0sVmU9ZnVuY3Rpb24oKXt2YXIgdXQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOl9lO04uZHJhd0Fycm93aGVhZHMoeCxtLHV0KX0sY3Q9ZnVuY3Rpb24oKXtOLmRyYXdFbGVtZW50VGV4dCh4LG0sbnVsbCxTKX07eC5saW5lSm9pbj0icm91bmQiO3ZhciBzdD1tLnBzdHlsZSgiZ2hvc3QiKS52YWx1ZT09PSJ5ZXMiO2lmKHN0KXt2YXIgWWU9bS5wc3R5bGUoImdob3N0LW9mZnNldC14IikucGZWYWx1ZSxtdD1tLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXkiKS5wZlZhbHVlLEplPW0ucHN0eWxlKCJnaG9zdC1vcGFjaXR5IikudmFsdWUsTHQ9TGUqSmU7eC50cmFuc2xhdGUoWWUsbXQpLEVlKEx0KSxWZShMdCkseC50cmFuc2xhdGUoLVllLC1tdCl9UmUoKSxFZSgpLFZlKCksQmUoKSxjdCgpLGsmJngudHJhbnNsYXRlKEgueDEsSC55MSl9fTt2YXIgd3o9ZnVuY3Rpb24obSl7aWYoIVsib3ZlcmxheSIsInVuZGVybGF5Il0uaW5jbHVkZXMobSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0YXRlIik7cmV0dXJuIGZ1bmN0aW9uKGssUyl7aWYoUy52aXNpYmxlKCkpe3ZhciBNPVMucHN0eWxlKCIiLmNvbmNhdChtLCItb3BhY2l0eSIpKS52YWx1ZTtpZihNIT09MCl7dmFyIE89dGhpcyxOPU8udXNlUGF0aHMoKSwkPVMuX3ByaXZhdGUucnNjcmF0Y2gsSD1TLnBzdHlsZSgiIi5jb25jYXQobSwiLXBhZGRpbmciKSkucGZWYWx1ZSxxPTIqSCxZPVMucHN0eWxlKCIiLmNvbmNhdChtLCItY29sb3IiKSkudmFsdWU7ay5saW5lV2lkdGg9cSwkLmVkZ2VUeXBlPT09InNlbGYiJiYhTj9rLmxpbmVDYXA9ImJ1dHQiOmsubGluZUNhcD0icm91bmQiLE8uY29sb3JTdHJva2VTdHlsZShrLFlbMF0sWVsxXSxZWzJdLE0pLE8uZHJhd0VkZ2VQYXRoKFMsaywkLmFsbHB0cywic29saWQiKX19fX07SjIuZHJhd0VkZ2VPdmVybGF5PXd6KCJvdmVybGF5IiksSjIuZHJhd0VkZ2VVbmRlcmxheT13eigidW5kZXJsYXkiKSxKMi5kcmF3RWRnZVBhdGg9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09eC5fcHJpdmF0ZS5yc2NyYXRjaCxPPW0sTiwkPSExLEg9dGhpcy51c2VQYXRocygpLHE9eC5wc3R5bGUoImxpbmUtZGFzaC1wYXR0ZXJuIikucGZWYWx1ZSxZPXgucHN0eWxlKCJsaW5lLWRhc2gtb2Zmc2V0IikucGZWYWx1ZTtpZihIKXt2YXIgWj1rLmpvaW4oIiQiKSxjZT1NLnBhdGhDYWNoZUtleSYmTS5wYXRoQ2FjaGVLZXk9PT1aO2NlPyhOPW09TS5wYXRoQ2FjaGUsJD0hMCk6KE49bT1uZXcgUGF0aDJELE0ucGF0aENhY2hlS2V5PVosTS5wYXRoQ2FjaGU9Til9aWYoTy5zZXRMaW5lRGFzaClzd2l0Y2goUyl7Y2FzZSJkb3R0ZWQiOk8uc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjpPLnNldExpbmVEYXNoKHEpLE8ubGluZURhc2hPZmZzZXQ9WTticmVhaztjYXNlInNvbGlkIjpPLnNldExpbmVEYXNoKFtdKTticmVha31pZighJCYmIU0uYmFkTGluZSlzd2l0Y2gobS5iZWdpblBhdGgmJm0uYmVnaW5QYXRoKCksbS5tb3ZlVG8oa1swXSxrWzFdKSxNLmVkZ2VUeXBlKXtjYXNlImJlemllciI6Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlIm11bHRpYmV6aWVyIjpmb3IodmFyIHZlPTI7dmUrMzxrLmxlbmd0aDt2ZSs9NCltLnF1YWRyYXRpY0N1cnZlVG8oa1t2ZV0sa1t2ZSsxXSxrW3ZlKzJdLGtbdmUrM10pO2JyZWFrO2Nhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOmZvcih2YXIgbWU9MjttZSsxPGsubGVuZ3RoO21lKz0yKW0ubGluZVRvKGtbbWVdLGtbbWUrMV0pO2JyZWFrfW09TyxIP20uc3Ryb2tlKE4pOm0uc3Ryb2tlKCksbS5zZXRMaW5lRGFzaCYmbS5zZXRMaW5lRGFzaChbXSl9LEoyLmRyYXdFZGdlVHJpYW5nbGVQYXRoPWZ1bmN0aW9uKHgsbSxrKXttLmZpbGxTdHlsZT1tLnN0cm9rZVN0eWxlO2Zvcih2YXIgUz14LnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLE09MDtNKzE8ay5sZW5ndGg7TSs9Mil7dmFyIE89W2tbTSsyXS1rW01dLGtbTSszXS1rW00rMV1dLE49TWF0aC5zcXJ0KE9bMF0qT1swXStPWzFdKk9bMV0pLCQ9W09bMV0vTiwtT1swXS9OXSxIPVskWzBdKlMvMiwkWzFdKlMvMl07bS5iZWdpblBhdGgoKSxtLm1vdmVUbyhrW01dLUhbMF0sa1tNKzFdLUhbMV0pLG0ubGluZVRvKGtbTV0rSFswXSxrW00rMV0rSFsxXSksbS5saW5lVG8oa1tNKzJdLGtbTSszXSksbS5jbG9zZVBhdGgoKSxtLmZpbGwoKX19LEoyLmRyYXdBcnJvd2hlYWRzPWZ1bmN0aW9uKHgsbSxrKXt2YXIgUz1tLl9wcml2YXRlLnJzY3JhdGNoLE09Uy5lZGdlVHlwZT09PSJoYXlzdGFjayI7TXx8dGhpcy5kcmF3QXJyb3doZWFkKHgsbSwic291cmNlIixTLmFycm93U3RhcnRYLFMuYXJyb3dTdGFydFksUy5zcmNBcnJvd0FuZ2xlLGspLHRoaXMuZHJhd0Fycm93aGVhZCh4LG0sIm1pZC10YXJnZXQiLFMubWlkWCxTLm1pZFksUy5taWR0Z3RBcnJvd0FuZ2xlLGspLHRoaXMuZHJhd0Fycm93aGVhZCh4LG0sIm1pZC1zb3VyY2UiLFMubWlkWCxTLm1pZFksUy5taWRzcmNBcnJvd0FuZ2xlLGspLE18fHRoaXMuZHJhd0Fycm93aGVhZCh4LG0sInRhcmdldCIsUy5hcnJvd0VuZFgsUy5hcnJvd0VuZFksUy50Z3RBcnJvd0FuZ2xlLGspfSxKMi5kcmF3QXJyb3doZWFkPWZ1bmN0aW9uKHgsbSxrLFMsTSxPLE4pe2lmKCEoaXNOYU4oUyl8fFM9PW51bGx8fGlzTmFOKE0pfHxNPT1udWxsfHxpc05hTihPKXx8Tz09bnVsbCkpe3ZhciAkPXRoaXMsSD1tLnBzdHlsZShrKyItYXJyb3ctc2hhcGUiKS52YWx1ZTtpZihIIT09Im5vbmUiKXt2YXIgcT1tLnBzdHlsZShrKyItYXJyb3ctZmlsbCIpLnZhbHVlPT09ImhvbGxvdyI/ImJvdGgiOiJmaWxsZWQiLFk9bS5wc3R5bGUoaysiLWFycm93LWZpbGwiKS52YWx1ZSxaPW0ucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsY2U9bS5wc3R5bGUoaysiLWFycm93LXdpZHRoIiksdmU9Y2UudmFsdWU9PT0ibWF0Y2gtbGluZSI/WjpjZS5wZlZhbHVlO2NlLnVuaXRzPT09IiUiJiYodmUqPVopO3ZhciBtZT1tLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO049PT12b2lkIDAmJihOPW1lKTt2YXIgTGU9eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247KE4hPT0xfHxZPT09ImhvbGxvdyIpJiYoeC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsJC5jb2xvckZpbGxTdHlsZSh4LDI1NSwyNTUsMjU1LDEpLCQuY29sb3JTdHJva2VTdHlsZSh4LDI1NSwyNTUsMjU1LDEpLCQuZHJhd0Fycm93U2hhcGUobSx4LHEsWixILHZlLFMsTSxPKSx4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1MZSk7dmFyIF9lPW0ucHN0eWxlKGsrIi1hcnJvdy1jb2xvciIpLnZhbHVlOyQuY29sb3JGaWxsU3R5bGUoeCxfZVswXSxfZVsxXSxfZVsyXSxOKSwkLmNvbG9yU3Ryb2tlU3R5bGUoeCxfZVswXSxfZVsxXSxfZVsyXSxOKSwkLmRyYXdBcnJvd1NoYXBlKG0seCxZLFosSCx2ZSxTLE0sTyl9fX0sSjIuZHJhd0Fycm93U2hhcGU9ZnVuY3Rpb24oeCxtLGssUyxNLE8sTiwkLEgpe3ZhciBxPXRoaXMsWT10aGlzLnVzZVBhdGhzKCkmJk0hPT0idHJpYW5nbGUtY3Jvc3MiLFo9ITEsY2UsdmU9bSxtZT17eDpOLHk6JH0sTGU9eC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUsX2U9dGhpcy5nZXRBcnJvd1dpZHRoKFMsTGUpLEVlPXEuYXJyb3dTaGFwZXNbTV07aWYoWSl7dmFyIEJlPXEuYXJyb3dQYXRoQ2FjaGU9cS5hcnJvd1BhdGhDYWNoZXx8W10sUmU9dWQoTSksVmU9QmVbUmVdO1ZlIT1udWxsPyhjZT1tPVZlLFo9ITApOihjZT1tPW5ldyBQYXRoMkQsQmVbUmVdPWNlKX1afHwobS5iZWdpblBhdGgmJm0uYmVnaW5QYXRoKCksWT9FZS5kcmF3KG0sMSwwLHt4OjAseTowfSwxKTpFZS5kcmF3KG0sX2UsSCxtZSxTKSxtLmNsb3NlUGF0aCYmbS5jbG9zZVBhdGgoKSksbT12ZSxZJiYobS50cmFuc2xhdGUoTiwkKSxtLnJvdGF0ZShIKSxtLnNjYWxlKF9lLF9lKSksKGs9PT0iZmlsbGVkInx8az09PSJib3RoIikmJihZP20uZmlsbChjZSk6bS5maWxsKCkpLChrPT09ImhvbGxvdyJ8fGs9PT0iYm90aCIpJiYobS5saW5lV2lkdGg9Ty8oWT9fZToxKSxtLmxpbmVKb2luPSJtaXRlciIsWT9tLnN0cm9rZShjZSk6bS5zdHJva2UoKSksWSYmKG0uc2NhbGUoMS9fZSwxL19lKSxtLnJvdGF0ZSgtSCksbS50cmFuc2xhdGUoLU4sLSQpKX07dmFyIGJrPXt9O2JrLnNhZmVEcmF3SW1hZ2U9ZnVuY3Rpb24oeCxtLGssUyxNLE8sTiwkLEgscSl7aWYoIShNPD0wfHxPPD0wfHxIPD0wfHxxPD0wKSl0cnl7eC5kcmF3SW1hZ2UobSxrLFMsTSxPLE4sJCxILHEpfWNhdGNoKFkpe2h1KFkpfX0sYmsuZHJhd0luc2NyaWJlZEltYWdlPWZ1bmN0aW9uKHgsbSxrLFMsTSl7dmFyIE89dGhpcyxOPWsucG9zaXRpb24oKSwkPU4ueCxIPU4ueSxxPWsuY3koKS5zdHlsZSgpLFk9cS5nZXRJbmRleGVkU3R5bGUuYmluZChxKSxaPVkoaywiYmFja2dyb3VuZC1maXQiLCJ2YWx1ZSIsUyksY2U9WShrLCJiYWNrZ3JvdW5kLXJlcGVhdCIsInZhbHVlIixTKSx2ZT1rLndpZHRoKCksbWU9ay5oZWlnaHQoKSxMZT1rLnBhZGRpbmcoKSoyLF9lPXZlKyhZKGssImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iLCJ2YWx1ZSIsUyk9PT0iaW5uZXIiPzA6TGUpLEVlPW1lKyhZKGssImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIiwidmFsdWUiLFMpPT09ImlubmVyIj8wOkxlKSxCZT1rLl9wcml2YXRlLnJzY3JhdGNoLFJlPVkoaywiYmFja2dyb3VuZC1jbGlwIiwidmFsdWUiLFMpLFZlPVJlPT09Im5vZGUiLGN0PVkoaywiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IiwidmFsdWUiLFMpKk0sc3Q9WShrLCJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyIsInZhbHVlIixTKSxZZT1tLndpZHRofHxtLmNhY2hlZFcsbXQ9bS5oZWlnaHR8fG0uY2FjaGVkSDsoWWU9PW51bGx8fG10PT1udWxsKSYmKGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSksWWU9bS5jYWNoZWRXPW0ud2lkdGh8fG0ub2Zmc2V0V2lkdGgsbXQ9bS5jYWNoZWRIPW0uaGVpZ2h0fHxtLm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG0pKTt2YXIgSmU9WWUsTHQ9bXQ7aWYoWShrLCJiYWNrZ3JvdW5kLXdpZHRoIiwidmFsdWUiLFMpIT09ImF1dG8iJiYoWShrLCJiYWNrZ3JvdW5kLXdpZHRoIiwidW5pdHMiLFMpPT09IiUiP0plPVkoaywiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFMpKl9lOkplPVkoaywiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFMpKSxZKGssImJhY2tncm91bmQtaGVpZ2h0IiwidmFsdWUiLFMpIT09ImF1dG8iJiYoWShrLCJiYWNrZ3JvdW5kLWhlaWdodCIsInVuaXRzIixTKT09PSIlIj9MdD1ZKGssImJhY2tncm91bmQtaGVpZ2h0IiwicGZWYWx1ZSIsUykqRWU6THQ9WShrLCJiYWNrZ3JvdW5kLWhlaWdodCIsInBmVmFsdWUiLFMpKSwhKEplPT09MHx8THQ9PT0wKSl7aWYoWj09PSJjb250YWluIil7dmFyIE10PU1hdGgubWluKF9lL0plLEVlL0x0KTtKZSo9TXQsTHQqPU10fWVsc2UgaWYoWj09PSJjb3ZlciIpe3ZhciBNdD1NYXRoLm1heChfZS9KZSxFZS9MdCk7SmUqPU10LEx0Kj1NdH12YXIgdXQ9JC1fZS8yLFd0PVkoaywiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwidW5pdHMiLFMpLFR0PVkoaywiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwicGZWYWx1ZSIsUyk7V3Q9PT0iJSI/dXQrPShfZS1KZSkqVHQ6dXQrPVR0O3ZhciBfbj1ZKGssImJhY2tncm91bmQtb2Zmc2V0LXgiLCJ1bml0cyIsUyksaG49WShrLCJiYWNrZ3JvdW5kLW9mZnNldC14IiwicGZWYWx1ZSIsUyk7X249PT0iJSI/dXQrPShfZS1KZSkqaG46dXQrPWhuO3ZhciBZdD1ILUVlLzIsRG49WShrLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJ1bml0cyIsUyksaXI9WShrLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJwZlZhbHVlIixTKTtEbj09PSIlIj9ZdCs9KEVlLUx0KSppcjpZdCs9aXI7dmFyIHZyPVkoaywiYmFja2dyb3VuZC1vZmZzZXQteSIsInVuaXRzIixTKSxObj1ZKGssImJhY2tncm91bmQtb2Zmc2V0LXkiLCJwZlZhbHVlIixTKTt2cj09PSIlIj9ZdCs9KEVlLUx0KSpObjpZdCs9Tm4sQmUucGF0aENhY2hlJiYodXQtPSQsWXQtPUgsJD0wLEg9MCk7dmFyIHByPXguZ2xvYmFsQWxwaGE7eC5nbG9iYWxBbHBoYT1jdDt2YXIgRXI9Ty5nZXRJbWdTbW9vdGhpbmcoeCksTXI9ITE7aWYoc3Q9PT0ibm8iJiZFcj8oTy5zZXRJbWdTbW9vdGhpbmcoeCwhMSksTXI9ITApOnN0PT09InllcyImJiFFciYmKE8uc2V0SW1nU21vb3RoaW5nKHgsITApLE1yPSEwKSxjZT09PSJuby1yZXBlYXQiKVZlJiYoeC5zYXZlKCksQmUucGF0aENhY2hlP3guY2xpcChCZS5wYXRoQ2FjaGUpOihPLm5vZGVTaGFwZXNbTy5nZXROb2RlU2hhcGUoayldLmRyYXcoeCwkLEgsX2UsRWUpLHguY2xpcCgpKSksTy5zYWZlRHJhd0ltYWdlKHgsbSwwLDAsWWUsbXQsdXQsWXQsSmUsTHQpLFZlJiZ4LnJlc3RvcmUoKTtlbHNle3ZhciBDcj14LmNyZWF0ZVBhdHRlcm4obSxjZSk7eC5maWxsU3R5bGU9Q3IsTy5ub2RlU2hhcGVzW08uZ2V0Tm9kZVNoYXBlKGspXS5kcmF3KHgsJCxILF9lLEVlKSx4LnRyYW5zbGF0ZSh1dCxZdCkseC5maWxsKCkseC50cmFuc2xhdGUoLXV0LC1ZdCl9eC5nbG9iYWxBbHBoYT1wcixNciYmTy5zZXRJbWdTbW9vdGhpbmcoeCxFcil9fTt2YXIgeTU9e307eTUuZWxlVGV4dEJpZ2dlclRoYW5NaW49ZnVuY3Rpb24oeCxtKXtpZighbSl7dmFyIGs9eC5jeSgpLnpvb20oKSxTPXRoaXMuZ2V0UGl4ZWxSYXRpbygpLE09TWF0aC5jZWlsKGlJKGsqUykpO209TWF0aC5wb3coMixNKX12YXIgTz14LnBzdHlsZSgiZm9udC1zaXplIikucGZWYWx1ZSptLE49eC5wc3R5bGUoIm1pbi16b29tZWQtZm9udC1zaXplIikucGZWYWx1ZTtyZXR1cm4hKE88Til9LHk1LmRyYXdFbGVtZW50VGV4dD1mdW5jdGlvbih4LG0sayxTLE0pe3ZhciBPPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxOPXRoaXM7aWYoUz09bnVsbCl7aWYoTyYmIU4uZWxlVGV4dEJpZ2dlclRoYW5NaW4obSkpcmV0dXJufWVsc2UgaWYoUz09PSExKXJldHVybjtpZihtLmlzTm9kZSgpKXt2YXIgJD1tLnBzdHlsZSgibGFiZWwiKTtpZighJHx8ISQudmFsdWUpcmV0dXJuO3ZhciBIPU4uZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKG0pO3gudGV4dEFsaWduPUgseC50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9ZWxzZXt2YXIgcT1tLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lLFk9bS5wc3R5bGUoImxhYmVsIiksWj1tLnBzdHlsZSgic291cmNlLWxhYmVsIiksY2U9bS5wc3R5bGUoInRhcmdldC1sYWJlbCIpO2lmKHF8fCghWXx8IVkudmFsdWUpJiYoIVp8fCFaLnZhbHVlKSYmKCFjZXx8IWNlLnZhbHVlKSlyZXR1cm47eC50ZXh0QWxpZ249ImNlbnRlciIseC50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9dmFyIHZlPSFrLG1lO2smJihtZT1rLHgudHJhbnNsYXRlKC1tZS54MSwtbWUueTEpKSxNPT1udWxsPyhOLmRyYXdUZXh0KHgsbSxudWxsLHZlLE8pLG0uaXNFZGdlKCkmJihOLmRyYXdUZXh0KHgsbSwic291cmNlIix2ZSxPKSxOLmRyYXdUZXh0KHgsbSwidGFyZ2V0Iix2ZSxPKSkpOk4uZHJhd1RleHQoeCxtLE0sdmUsTyksayYmeC50cmFuc2xhdGUobWUueDEsbWUueTEpfSx5NS5nZXRGb250Q2FjaGU9ZnVuY3Rpb24oeCl7dmFyIG07dGhpcy5mb250Q2FjaGVzPXRoaXMuZm9udENhY2hlc3x8W107Zm9yKHZhciBrPTA7azx0aGlzLmZvbnRDYWNoZXMubGVuZ3RoO2srKylpZihtPXRoaXMuZm9udENhY2hlc1trXSxtLmNvbnRleHQ9PT14KXJldHVybiBtO3JldHVybiBtPXtjb250ZXh0Onh9LHRoaXMuZm9udENhY2hlcy5wdXNoKG0pLG19LHk1LnNldHVwVGV4dFN0eWxlPWZ1bmN0aW9uKHgsbSl7dmFyIGs9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiEwLFM9bS5wc3R5bGUoImZvbnQtc3R5bGUiKS5zdHJWYWx1ZSxNPW0ucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKyJweCIsTz1tLnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxOPW0ucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLCQ9az9tLmVmZmVjdGl2ZU9wYWNpdHkoKSptLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU6MSxIPW0ucHN0eWxlKCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKiQscT1tLnBzdHlsZSgiY29sb3IiKS52YWx1ZSxZPW0ucHN0eWxlKCJ0ZXh0LW91dGxpbmUtY29sb3IiKS52YWx1ZTt4LmZvbnQ9UysiICIrTisiICIrTSsiICIrTyx4LmxpbmVKb2luPSJyb3VuZCIsdGhpcy5jb2xvckZpbGxTdHlsZSh4LHFbMF0scVsxXSxxWzJdLCQpLHRoaXMuY29sb3JTdHJva2VTdHlsZSh4LFlbMF0sWVsxXSxZWzJdLEgpfTtmdW5jdGlvbiB6SSh4LG0sayxTLE0pe3ZhciBPPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTo1LE49YXJndW1lbnRzLmxlbmd0aD42P2FyZ3VtZW50c1s2XTp2b2lkIDA7eC5iZWdpblBhdGgoKSx4Lm1vdmVUbyhtK08saykseC5saW5lVG8obStTLU8saykseC5xdWFkcmF0aWNDdXJ2ZVRvKG0rUyxrLG0rUyxrK08pLHgubGluZVRvKG0rUyxrK00tTykseC5xdWFkcmF0aWNDdXJ2ZVRvKG0rUyxrK00sbStTLU8saytNKSx4LmxpbmVUbyhtK08saytNKSx4LnF1YWRyYXRpY0N1cnZlVG8obSxrK00sbSxrK00tTykseC5saW5lVG8obSxrK08pLHgucXVhZHJhdGljQ3VydmVUbyhtLGssbStPLGspLHguY2xvc2VQYXRoKCksTj94LnN0cm9rZSgpOnguZmlsbCgpfXk1LmdldFRleHRBbmdsZT1mdW5jdGlvbih4LG0pe3ZhciBrLFM9eC5fcHJpdmF0ZSxNPVMucnNjcmF0Y2gsTz1tP20rIi0iOiIiLE49eC5wc3R5bGUoTysidGV4dC1yb3RhdGlvbiIpLCQ9SzIoTSwibGFiZWxBbmdsZSIsbSk7cmV0dXJuIE4uc3RyVmFsdWU9PT0iYXV0b3JvdGF0ZSI/az14LmlzRWRnZSgpPyQ6MDpOLnN0clZhbHVlPT09Im5vbmUiP2s9MDprPU4ucGZWYWx1ZSxrfSx5NS5kcmF3VGV4dD1mdW5jdGlvbih4LG0sayl7dmFyIFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLE09YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLE89bS5fcHJpdmF0ZSxOPU8ucnNjcmF0Y2gsJD1NP20uZWZmZWN0aXZlT3BhY2l0eSgpOjE7aWYoIShNJiYoJD09PTB8fG0ucHN0eWxlKCJ0ZXh0LW9wYWNpdHkiKS52YWx1ZT09PTApKSl7az09PSJtYWluIiYmKGs9bnVsbCk7dmFyIEg9SzIoTiwibGFiZWxYIixrKSxxPUsyKE4sImxhYmVsWSIsayksWSxaLGNlPXRoaXMuZ2V0TGFiZWxUZXh0KG0sayk7aWYoY2UhPW51bGwmJmNlIT09IiImJiFpc05hTihIKSYmIWlzTmFOKHEpKXt0aGlzLnNldHVwVGV4dFN0eWxlKHgsbSxNKTt2YXIgdmU9az9rKyItIjoiIixtZT1LMihOLCJsYWJlbFdpZHRoIixrKSxMZT1LMihOLCJsYWJlbEhlaWdodCIsayksX2U9bS5wc3R5bGUodmUrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLEVlPW0ucHN0eWxlKHZlKyJ0ZXh0LW1hcmdpbi15IikucGZWYWx1ZSxCZT1tLmlzRWRnZSgpLFJlPW0ucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlLFZlPW0ucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlO0JlJiYoUmU9ImNlbnRlciIsVmU9ImNlbnRlciIpLEgrPV9lLHErPUVlO3ZhciBjdDtzd2l0Y2goUz9jdD10aGlzLmdldFRleHRBbmdsZShtLGspOmN0PTAsY3QhPT0wJiYoWT1ILFo9cSx4LnRyYW5zbGF0ZShZLFopLHgucm90YXRlKGN0KSxIPTAscT0wKSxWZSl7Y2FzZSJ0b3AiOmJyZWFrO2Nhc2UiY2VudGVyIjpxKz1MZS8yO2JyZWFrO2Nhc2UiYm90dG9tIjpxKz1MZTticmVha312YXIgc3Q9bS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1vcGFjaXR5IikudmFsdWUsWWU9bS5wc3R5bGUoInRleHQtYm9yZGVyLW9wYWNpdHkiKS52YWx1ZSxtdD1tLnBzdHlsZSgidGV4dC1ib3JkZXItd2lkdGgiKS5wZlZhbHVlLEplPW0ucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyIpLnBmVmFsdWUsTHQ9bS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1zaGFwZSIpLnN0clZhbHVlLE10PUx0LmluZGV4T2YoInJvdW5kIik9PT0wLHV0PTI7aWYoc3Q+MHx8bXQ+MCYmWWU+MCl7dmFyIFd0PUgtSmU7c3dpdGNoKFJlKXtjYXNlImxlZnQiOld0LT1tZTticmVhaztjYXNlImNlbnRlciI6V3QtPW1lLzI7YnJlYWt9dmFyIFR0PXEtTGUtSmUsX249bWUrMipKZSxobj1MZSsyKkplO2lmKHN0PjApe3ZhciBZdD14LmZpbGxTdHlsZSxEbj1tLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLWNvbG9yIikudmFsdWU7eC5maWxsU3R5bGU9InJnYmEoIitEblswXSsiLCIrRG5bMV0rIiwiK0RuWzJdKyIsIitzdCokKyIpIixNdD96SSh4LFd0LFR0LF9uLGhuLHV0KTp4LmZpbGxSZWN0KFd0LFR0LF9uLGhuKSx4LmZpbGxTdHlsZT1ZdH1pZihtdD4wJiZZZT4wKXt2YXIgaXI9eC5zdHJva2VTdHlsZSx2cj14LmxpbmVXaWR0aCxObj1tLnBzdHlsZSgidGV4dC1ib3JkZXItY29sb3IiKS52YWx1ZSxwcj1tLnBzdHlsZSgidGV4dC1ib3JkZXItc3R5bGUiKS52YWx1ZTtpZih4LnN0cm9rZVN0eWxlPSJyZ2JhKCIrTm5bMF0rIiwiK05uWzFdKyIsIitOblsyXSsiLCIrWWUqJCsiKSIseC5saW5lV2lkdGg9bXQseC5zZXRMaW5lRGFzaClzd2l0Y2gocHIpe2Nhc2UiZG90dGVkIjp4LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6eC5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJkb3VibGUiOngubGluZVdpZHRoPW10LzQseC5zZXRMaW5lRGFzaChbXSk7YnJlYWs7Y2FzZSJzb2xpZCI6eC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoTXQ/ekkoeCxXdCxUdCxfbixobix1dCwic3Ryb2tlIik6eC5zdHJva2VSZWN0KFd0LFR0LF9uLGhuKSxwcj09PSJkb3VibGUiKXt2YXIgRXI9bXQvMjtNdD96SSh4LFd0K0VyLFR0K0VyLF9uLUVyKjIsaG4tRXIqMix1dCwic3Ryb2tlIik6eC5zdHJva2VSZWN0KFd0K0VyLFR0K0VyLF9uLUVyKjIsaG4tRXIqMil9eC5zZXRMaW5lRGFzaCYmeC5zZXRMaW5lRGFzaChbXSkseC5saW5lV2lkdGg9dnIseC5zdHJva2VTdHlsZT1pcn19dmFyIE1yPTIqbS5wc3R5bGUoInRleHQtb3V0bGluZS13aWR0aCIpLnBmVmFsdWU7aWYoTXI+MCYmKHgubGluZVdpZHRoPU1yKSxtLnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU9PT0id3JhcCIpe3ZhciBDcj1LMihOLCJsYWJlbFdyYXBDYWNoZWRMaW5lcyIsayksT3I9SzIoTiwibGFiZWxMaW5lSGVpZ2h0IixrKSxXbj1tZS8yLGJyPXRoaXMuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKG0pO3N3aXRjaChicj09PSJhdXRvInx8KFJlPT09ImxlZnQiP2JyPT09ImxlZnQiP0grPS1tZTpicj09PSJjZW50ZXIiJiYoSCs9LVduKTpSZT09PSJjZW50ZXIiP2JyPT09ImxlZnQiP0grPS1Xbjpicj09PSJyaWdodCImJihIKz1Xbik6UmU9PT0icmlnaHQiJiYoYnI9PT0iY2VudGVyIj9IKz1Xbjpicj09PSJyaWdodCImJihIKz1tZSkpKSxWZSl7Y2FzZSJ0b3AiOnEtPShDci5sZW5ndGgtMSkqT3I7YnJlYWs7Y2FzZSJjZW50ZXIiOmNhc2UiYm90dG9tIjpxLT0oQ3IubGVuZ3RoLTEpKk9yO2JyZWFrfWZvcih2YXIgU3I9MDtTcjxDci5sZW5ndGg7U3IrKylNcj4wJiZ4LnN0cm9rZVRleHQoQ3JbU3JdLEgscSkseC5maWxsVGV4dChDcltTcl0sSCxxKSxxKz1Pcn1lbHNlIE1yPjAmJnguc3Ryb2tlVGV4dChjZSxILHEpLHguZmlsbFRleHQoY2UsSCxxKTtjdCE9PTAmJih4LnJvdGF0ZSgtY3QpLHgudHJhbnNsYXRlKC1ZLC1aKSl9fX07dmFyIHc4PXt9O3c4LmRyYXdOb2RlPWZ1bmN0aW9uKHgsbSxrKXt2YXIgUz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsTT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAsTz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITAsTj10aGlzLCQsSCxxPW0uX3ByaXZhdGUsWT1xLnJzY3JhdGNoLFo9bS5wb3NpdGlvbigpO2lmKCEoIVgoWi54KXx8IVgoWi55KSkmJiEoTyYmIW0udmlzaWJsZSgpKSl7dmFyIGNlPU8/bS5lZmZlY3RpdmVPcGFjaXR5KCk6MSx2ZT1OLnVzZVBhdGhzKCksbWUsTGU9ITEsX2U9bS5wYWRkaW5nKCk7JD1tLndpZHRoKCkrMipfZSxIPW0uaGVpZ2h0KCkrMipfZTt2YXIgRWU7ayYmKEVlPWsseC50cmFuc2xhdGUoLUVlLngxLC1FZS55MSkpO2Zvcih2YXIgQmU9bS5wc3R5bGUoImJhY2tncm91bmQtaW1hZ2UiKSxSZT1CZS52YWx1ZSxWZT1uZXcgQXJyYXkoUmUubGVuZ3RoKSxjdD1uZXcgQXJyYXkoUmUubGVuZ3RoKSxzdD0wLFllPTA7WWU8UmUubGVuZ3RoO1llKyspe3ZhciBtdD1SZVtZZV0sSmU9VmVbWWVdPW10IT1udWxsJiZtdCE9PSJub25lIjtpZihKZSl7dmFyIEx0PW0uY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShtLCJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIiwidmFsdWUiLFllKTtzdCsrLGN0W1llXT1OLmdldENhY2hlZEltYWdlKG10LEx0LGZ1bmN0aW9uKCl7cS5iYWNrZ3JvdW5kVGltZXN0YW1wPURhdGUubm93KCksbS5lbWl0QW5kTm90aWZ5KCJiYWNrZ3JvdW5kIil9KX19dmFyIE10PW0ucHN0eWxlKCJiYWNrZ3JvdW5kLWJsYWNrZW4iKS52YWx1ZSx1dD1tLnBzdHlsZSgiYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxXdD1tLnBzdHlsZSgiYmFja2dyb3VuZC1vcGFjaXR5IikudmFsdWUqY2UsVHQ9bS5wc3R5bGUoImJvcmRlci1jb2xvciIpLnZhbHVlLF9uPW0ucHN0eWxlKCJib3JkZXItc3R5bGUiKS52YWx1ZSxobj1tLnBzdHlsZSgiYm9yZGVyLW9wYWNpdHkiKS52YWx1ZSpjZSxZdD1tLnBzdHlsZSgib3V0bGluZS13aWR0aCIpLnBmVmFsdWUsRG49bS5wc3R5bGUoIm91dGxpbmUtY29sb3IiKS52YWx1ZSxpcj1tLnBzdHlsZSgib3V0bGluZS1zdHlsZSIpLnZhbHVlLHZyPW0ucHN0eWxlKCJvdXRsaW5lLW9wYWNpdHkiKS52YWx1ZSpjZSxObj1tLnBzdHlsZSgib3V0bGluZS1vZmZzZXQiKS52YWx1ZTt4LmxpbmVKb2luPSJtaXRlciI7dmFyIHByPWZ1bmN0aW9uKCl7dmFyIHRyPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpXdDtOLmVsZUZpbGxTdHlsZSh4LG0sdHIpfSxFcj1mdW5jdGlvbigpe3ZhciB0cj1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06aG47Ti5jb2xvclN0cm9rZVN0eWxlKHgsVHRbMF0sVHRbMV0sVHRbMl0sdHIpfSxNcj1mdW5jdGlvbigpe3ZhciB0cj1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06dnI7Ti5jb2xvclN0cm9rZVN0eWxlKHgsRG5bMF0sRG5bMV0sRG5bMl0sdHIpfSxDcj1mdW5jdGlvbih0cixHLEpuLGtyKXt2YXIgbHI9Ti5ub2RlUGF0aENhY2hlPU4ubm9kZVBhdGhDYWNoZXx8W10sVnQ9bGQoSm49PT0icG9seWdvbiI/Sm4rIiwiK2tyLmpvaW4oIiwiKTpKbiwiIitHLCIiK3RyKSxIcz1scltWdF0sd3IsRXM9ITE7cmV0dXJuIEhzIT1udWxsPyh3cj1IcyxFcz0hMCxZLnBhdGhDYWNoZT13cik6KHdyPW5ldyBQYXRoMkQsbHJbVnRdPVkucGF0aENhY2hlPXdyKSx7cGF0aDp3cixjYWNoZUhpdDpFc319LE9yPW0ucHN0eWxlKCJzaGFwZSIpLnN0clZhbHVlLFduPW0ucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnBmVmFsdWU7aWYodmUpe3gudHJhbnNsYXRlKFoueCxaLnkpO3ZhciBicj1DcigkLEgsT3IsV24pO21lPWJyLnBhdGgsTGU9YnIuY2FjaGVIaXR9dmFyIFNyPWZ1bmN0aW9uKCl7aWYoIUxlKXt2YXIgdHI9Wjt2ZSYmKHRyPXt4OjAseTowfSksTi5ub2RlU2hhcGVzW04uZ2V0Tm9kZVNoYXBlKG0pXS5kcmF3KG1lfHx4LHRyLngsdHIueSwkLEgpfXZlP3guZmlsbChtZSk6eC5maWxsKCl9LE5yPWZ1bmN0aW9uKCl7Zm9yKHZhciB0cj1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06Y2UsRz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsSm49cS5iYWNrZ3JvdW5kaW5nLGtyPTAsbHI9MDtscjxjdC5sZW5ndGg7bHIrKyl7dmFyIFZ0PW0uY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShtLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IiwidmFsdWUiLGxyKTtpZihHJiZWdD09PSJvdmVyInx8IUcmJlZ0PT09Imluc2lkZSIpe2tyKys7Y29udGludWV9VmVbbHJdJiZjdFtscl0uY29tcGxldGUmJiFjdFtscl0uZXJyb3ImJihrcisrLE4uZHJhd0luc2NyaWJlZEltYWdlKHgsY3RbbHJdLG0sbHIsdHIpKX1xLmJhY2tncm91bmRpbmc9a3IhPT1zdCxKbiE9PXEuYmFja2dyb3VuZGluZyYmbS51cGRhdGVTdHlsZSghMSl9LFNpPWZ1bmN0aW9uKCl7dmFyIHRyPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxHPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpjZTtOLmhhc1BpZShtKSYmKE4uZHJhd1BpZSh4LG0sRyksdHImJih2ZXx8Ti5ub2RlU2hhcGVzW04uZ2V0Tm9kZVNoYXBlKG0pXS5kcmF3KHgsWi54LFoueSwkLEgpKSl9LHlzPWZ1bmN0aW9uKCl7dmFyIHRyPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpjZSxHPShNdD4wP010Oi1NdCkqdHIsSm49TXQ+MD8wOjI1NTtNdCE9PTAmJihOLmNvbG9yRmlsbFN0eWxlKHgsSm4sSm4sSm4sRyksdmU/eC5maWxsKG1lKTp4LmZpbGwoKSl9LHBhPWZ1bmN0aW9uKCl7aWYodXQ+MCl7aWYoeC5saW5lV2lkdGg9dXQseC5saW5lQ2FwPSJidXR0Iix4LnNldExpbmVEYXNoKXN3aXRjaChfbil7Y2FzZSJkb3R0ZWQiOnguc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp4LnNldExpbmVEYXNoKFs0LDJdKTticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6eC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYodmU/eC5zdHJva2UobWUpOnguc3Ryb2tlKCksX249PT0iZG91YmxlIil7eC5saW5lV2lkdGg9dXQvMzt2YXIgdHI9eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsdmU/eC5zdHJva2UobWUpOnguc3Ryb2tlKCkseC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249dHJ9eC5zZXRMaW5lRGFzaCYmeC5zZXRMaW5lRGFzaChbXSl9fSxNaT1mdW5jdGlvbigpe2lmKFl0PjApe2lmKHgubGluZVdpZHRoPVl0LHgubGluZUNhcD0iYnV0dCIseC5zZXRMaW5lRGFzaClzd2l0Y2goaXIpe2Nhc2UiZG90dGVkIjp4LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6eC5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJzb2xpZCI6Y2FzZSJkb3VibGUiOnguc2V0TGluZURhc2goW10pO2JyZWFrfXZhciB0cj1aO3ZlJiYodHI9e3g6MCx5OjB9KTt2YXIgRz1OLmdldE5vZGVTaGFwZShtKSxKbj0oJCt1dCsoWXQrTm4pKS8kLGtyPShIK3V0KyhZdCtObikpL0gsbHI9JCpKbixWdD1IKmtyLEhzPU4ubm9kZVNoYXBlc1tHXS5wb2ludHMsd3I7aWYodmUpe3ZhciBFcz1DcihscixWdCxHLEhzKTt3cj1Fcy5wYXRofWlmKEc9PT0iZWxsaXBzZSIpTi5kcmF3RWxsaXBzZVBhdGgod3J8fHgsdHIueCx0ci55LGxyLFZ0KTtlbHNlIGlmKFsicm91bmQtZGlhbW9uZCIsInJvdW5kLWhlcHRhZ29uIiwicm91bmQtaGV4YWdvbiIsInJvdW5kLW9jdGFnb24iLCJyb3VuZC1wZW50YWdvbiIsInJvdW5kLXBvbHlnb24iLCJyb3VuZC10cmlhbmdsZSIsInJvdW5kLXRhZyJdLmluY2x1ZGVzKEcpKXt2YXIgZ289MCwkYz0wLHphPTA7Rz09PSJyb3VuZC1kaWFtb25kIj9nbz0odXQrTm4rWXQpKjEuNDpHPT09InJvdW5kLWhlcHRhZ29uIj8oZ289KHV0K05uK1l0KSoxLjA3NSx6YT0tKHV0LzIrTm4rWXQpLzM1KTpHPT09InJvdW5kLWhleGFnb24iP2dvPSh1dCtObitZdCkqMS4xMjpHPT09InJvdW5kLXBlbnRhZ29uIj8oZ289KHV0K05uK1l0KSoxLjEzLHphPS0odXQvMitObitZdCkvMTUpOkc9PT0icm91bmQtdGFnIj8oZ289KHV0K05uK1l0KSoxLjEyLCRjPSh1dC8yK1l0K05uKSouMDcpOkc9PT0icm91bmQtdHJpYW5nbGUiJiYoZ289KHV0K05uK1l0KSooTWF0aC5QSS8yKSx6YT0tKHV0K05uLzIrWXQpL01hdGguUEkpLGdvIT09MCYmKEpuPSgkK2dvKS8kLGtyPShIK2dvKS9IKSxOLmRyYXdSb3VuZFBvbHlnb25QYXRoKHdyfHx4LHRyLngrJGMsdHIueSt6YSwkKkpuLEgqa3IsSHMpfWVsc2UgaWYoWyJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSJdLmluY2x1ZGVzKEcpKU4uZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aCh3cnx8eCx0ci54LHRyLnksbHIsVnQpO2Vsc2UgaWYoWyJjdXRyZWN0YW5nbGUiLCJjdXQtcmVjdGFuZ2xlIl0uaW5jbHVkZXMoRykpTi5kcmF3Q3V0UmVjdGFuZ2xlUGF0aCh3cnx8eCx0ci54LHRyLnksbHIsVnQpO2Vsc2UgaWYoWyJib3R0b21yb3VuZHJlY3RhbmdsZSIsImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiXS5pbmNsdWRlcyhHKSlOLmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGgod3J8fHgsdHIueCx0ci55LGxyLFZ0KTtlbHNlIGlmKEc9PT0iYmFycmVsIilOLmRyYXdCYXJyZWxQYXRoKHdyfHx4LHRyLngsdHIueSxscixWdCk7ZWxzZSBpZihHLnN0YXJ0c1dpdGgoInBvbHlnb24iKXx8WyJyaG9tYm9pZCIsInJpZ2h0LXJob21ib2lkIiwicm91bmQtdGFnIiwidGFnIiwidmVlIl0uaW5jbHVkZXMoRykpe3ZhciBTYz0odXQrWXQrTm4pLyQ7SHM9Z1MocFMoSHMsU2MpKSxOLmRyYXdQb2x5Z29uUGF0aCh3cnx8eCx0ci54LHRyLnksJCxILEhzKX1lbHNle3ZhciBiYT0odXQrWXQrTm4pLyQ7SHM9Z1MocFMoSHMsLWJhKSksTi5kcmF3UG9seWdvblBhdGgod3J8fHgsdHIueCx0ci55LCQsSCxIcyl9aWYodmU/eC5zdHJva2Uod3IpOnguc3Ryb2tlKCksaXI9PT0iZG91YmxlIil7eC5saW5lV2lkdGg9dXQvMzt2YXIgeG89eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsdmU/eC5zdHJva2Uod3IpOnguc3Ryb2tlKCkseC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249eG99eC5zZXRMaW5lRGFzaCYmeC5zZXRMaW5lRGFzaChbXSl9fSxnaT1mdW5jdGlvbigpe00mJk4uZHJhd05vZGVPdmVybGF5KHgsbSxaLCQsSCl9LGZzPWZ1bmN0aW9uKCl7TSYmTi5kcmF3Tm9kZVVuZGVybGF5KHgsbSxaLCQsSCl9LEZzPWZ1bmN0aW9uKCl7Ti5kcmF3RWxlbWVudFRleHQoeCxtLG51bGwsUyl9LHhzPW0ucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoeHMpe3ZhciBScz1tLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLHlvPW0ucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWUsJGE9bS5wc3R5bGUoImdob3N0LW9wYWNpdHkiKS52YWx1ZSxEYT0kYSpjZTt4LnRyYW5zbGF0ZShScyx5byksTXIoKSxNaSgpLHByKCRhKld0KSxTcigpLE5yKERhLCEwKSxFcigkYSpobikscGEoKSxTaShNdCE9PTB8fHV0IT09MCksTnIoRGEsITEpLHlzKERhKSx4LnRyYW5zbGF0ZSgtUnMsLXlvKX12ZSYmeC50cmFuc2xhdGUoLVoueCwtWi55KSxmcygpLHZlJiZ4LnRyYW5zbGF0ZShaLngsWi55KSxNcigpLE1pKCkscHIoKSxTcigpLE5yKGNlLCEwKSxFcigpLHBhKCksU2koTXQhPT0wfHx1dCE9PTApLE5yKGNlLCExKSx5cygpLHZlJiZ4LnRyYW5zbGF0ZSgtWi54LC1aLnkpLEZzKCksZ2koKSxrJiZ4LnRyYW5zbGF0ZShFZS54MSxFZS55MSl9fTt2YXIgcUk9ZnVuY3Rpb24obSl7aWYoIVsib3ZlcmxheSIsInVuZGVybGF5Il0uaW5jbHVkZXMobSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0YXRlIik7cmV0dXJuIGZ1bmN0aW9uKGssUyxNLE8sTil7dmFyICQ9dGhpcztpZihTLnZpc2libGUoKSl7dmFyIEg9Uy5wc3R5bGUoIiIuY29uY2F0KG0sIi1wYWRkaW5nIikpLnBmVmFsdWUscT1TLnBzdHlsZSgiIi5jb25jYXQobSwiLW9wYWNpdHkiKSkudmFsdWUsWT1TLnBzdHlsZSgiIi5jb25jYXQobSwiLWNvbG9yIikpLnZhbHVlLFo9Uy5wc3R5bGUoIiIuY29uY2F0KG0sIi1zaGFwZSIpKS52YWx1ZTtpZihxPjApe2lmKE09TXx8Uy5wb3NpdGlvbigpLE89PW51bGx8fE49PW51bGwpe3ZhciBjZT1TLnBhZGRpbmcoKTtPPVMud2lkdGgoKSsyKmNlLE49Uy5oZWlnaHQoKSsyKmNlfSQuY29sb3JGaWxsU3R5bGUoayxZWzBdLFlbMV0sWVsyXSxxKSwkLm5vZGVTaGFwZXNbWl0uZHJhdyhrLE0ueCxNLnksTytIKjIsTitIKjIpLGsuZmlsbCgpfX19fTt3OC5kcmF3Tm9kZU92ZXJsYXk9cUkoIm92ZXJsYXkiKSx3OC5kcmF3Tm9kZVVuZGVybGF5PXFJKCJ1bmRlcmxheSIpLHc4Lmhhc1BpZT1mdW5jdGlvbih4KXtyZXR1cm4geD14WzBdLHguX3ByaXZhdGUuaGFzUGllfSx3OC5kcmF3UGllPWZ1bmN0aW9uKHgsbSxrLFMpe209bVswXSxTPVN8fG0ucG9zaXRpb24oKTt2YXIgTT1tLmN5KCkuc3R5bGUoKSxPPW0ucHN0eWxlKCJwaWUtc2l6ZSIpLE49Uy54LCQ9Uy55LEg9bS53aWR0aCgpLHE9bS5oZWlnaHQoKSxZPU1hdGgubWluKEgscSkvMixaPTAsY2U9dGhpcy51c2VQYXRocygpO2NlJiYoTj0wLCQ9MCksTy51bml0cz09PSIlIj9ZPVkqTy5wZlZhbHVlOk8ucGZWYWx1ZSE9PXZvaWQgMCYmKFk9Ty5wZlZhbHVlLzIpO2Zvcih2YXIgdmU9MTt2ZTw9TS5waWVCYWNrZ3JvdW5kTjt2ZSsrKXt2YXIgbWU9bS5wc3R5bGUoInBpZS0iK3ZlKyItYmFja2dyb3VuZC1zaXplIikudmFsdWUsTGU9bS5wc3R5bGUoInBpZS0iK3ZlKyItYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlLF9lPW0ucHN0eWxlKCJwaWUtIit2ZSsiLWJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlKmssRWU9bWUvMTAwO0VlK1o+MSYmKEVlPTEtWik7dmFyIEJlPTEuNSpNYXRoLlBJKzIqTWF0aC5QSSpaLFJlPTIqTWF0aC5QSSpFZSxWZT1CZStSZTttZT09PTB8fFo+PTF8fForRWU+MXx8KHguYmVnaW5QYXRoKCkseC5tb3ZlVG8oTiwkKSx4LmFyYyhOLCQsWSxCZSxWZSkseC5jbG9zZVBhdGgoKSx0aGlzLmNvbG9yRmlsbFN0eWxlKHgsTGVbMF0sTGVbMV0sTGVbMl0sX2UpLHguZmlsbCgpLForPUVlKX19O3ZhciBxZz17fSx4aWU9MTAwO3FnLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXt2YXIgeD10aGlzLmRhdGEuY29udGV4dHNbMF07aWYodGhpcy5mb3JjZWRQaXhlbFJhdGlvIT1udWxsKXJldHVybiB0aGlzLmZvcmNlZFBpeGVsUmF0aW87dmFyIG09eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHgubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHguYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8MTtyZXR1cm4od2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpL219LHFnLnBhaW50Q2FjaGU9ZnVuY3Rpb24oeCl7Zm9yKHZhciBtPXRoaXMucGFpbnRDYWNoZXM9dGhpcy5wYWludENhY2hlc3x8W10saz0hMCxTLE09MDtNPG0ubGVuZ3RoO00rKylpZihTPW1bTV0sUy5jb250ZXh0PT09eCl7az0hMTticmVha31yZXR1cm4gayYmKFM9e2NvbnRleHQ6eH0sbS5wdXNoKFMpKSxTfSxxZy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yPWZ1bmN0aW9uKHgsbSxrLFMsTSl7dmFyIE8sTj10aGlzLnVzZVBhdGhzKCksJD1rLnBzdHlsZShtKyItZ3JhZGllbnQtc3RvcC1jb2xvcnMiKS52YWx1ZSxIPWsucHN0eWxlKG0rIi1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyIpLnBmVmFsdWU7aWYoUz09PSJyYWRpYWwtZ3JhZGllbnQiKWlmKGsuaXNFZGdlKCkpe3ZhciBxPWsuc291cmNlRW5kcG9pbnQoKSxZPWsudGFyZ2V0RW5kcG9pbnQoKSxaPWsubWlkcG9pbnQoKSxjZT1oNShxLFopLHZlPWg1KFksWik7Tz14LmNyZWF0ZVJhZGlhbEdyYWRpZW50KFoueCxaLnksMCxaLngsWi55LE1hdGgubWF4KGNlLHZlKSl9ZWxzZXt2YXIgbWU9Tj97eDowLHk6MH06ay5wb3NpdGlvbigpLExlPWsucGFkZGVkV2lkdGgoKSxfZT1rLnBhZGRlZEhlaWdodCgpO089eC5jcmVhdGVSYWRpYWxHcmFkaWVudChtZS54LG1lLnksMCxtZS54LG1lLnksTWF0aC5tYXgoTGUsX2UpKX1lbHNlIGlmKGsuaXNFZGdlKCkpe3ZhciBFZT1rLnNvdXJjZUVuZHBvaW50KCksQmU9ay50YXJnZXRFbmRwb2ludCgpO089eC5jcmVhdGVMaW5lYXJHcmFkaWVudChFZS54LEVlLnksQmUueCxCZS55KX1lbHNle3ZhciBSZT1OP3t4OjAseTowfTprLnBvc2l0aW9uKCksVmU9ay5wYWRkZWRXaWR0aCgpLGN0PWsucGFkZGVkSGVpZ2h0KCksc3Q9VmUvMixZZT1jdC8yLG10PWsucHN0eWxlKCJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiIpLnZhbHVlO3N3aXRjaChtdCl7Y2FzZSJ0by1ib3R0b20iOk89eC5jcmVhdGVMaW5lYXJHcmFkaWVudChSZS54LFJlLnktWWUsUmUueCxSZS55K1llKTticmVhaztjYXNlInRvLXRvcCI6Tz14LmNyZWF0ZUxpbmVhckdyYWRpZW50KFJlLngsUmUueStZZSxSZS54LFJlLnktWWUpO2JyZWFrO2Nhc2UidG8tbGVmdCI6Tz14LmNyZWF0ZUxpbmVhckdyYWRpZW50KFJlLngrc3QsUmUueSxSZS54LXN0LFJlLnkpO2JyZWFrO2Nhc2UidG8tcmlnaHQiOk89eC5jcmVhdGVMaW5lYXJHcmFkaWVudChSZS54LXN0LFJlLnksUmUueCtzdCxSZS55KTticmVhaztjYXNlInRvLWJvdHRvbS1yaWdodCI6Y2FzZSJ0by1yaWdodC1ib3R0b20iOk89eC5jcmVhdGVMaW5lYXJHcmFkaWVudChSZS54LXN0LFJlLnktWWUsUmUueCtzdCxSZS55K1llKTticmVhaztjYXNlInRvLXRvcC1yaWdodCI6Y2FzZSJ0by1yaWdodC10b3AiOk89eC5jcmVhdGVMaW5lYXJHcmFkaWVudChSZS54LXN0LFJlLnkrWWUsUmUueCtzdCxSZS55LVllKTticmVhaztjYXNlInRvLWJvdHRvbS1sZWZ0IjpjYXNlInRvLWxlZnQtYm90dG9tIjpPPXguY3JlYXRlTGluZWFyR3JhZGllbnQoUmUueCtzdCxSZS55LVllLFJlLngtc3QsUmUueStZZSk7YnJlYWs7Y2FzZSJ0by10b3AtbGVmdCI6Y2FzZSJ0by1sZWZ0LXRvcCI6Tz14LmNyZWF0ZUxpbmVhckdyYWRpZW50KFJlLngrc3QsUmUueStZZSxSZS54LXN0LFJlLnktWWUpO2JyZWFrfX1pZighTylyZXR1cm4gbnVsbDtmb3IodmFyIEplPUgubGVuZ3RoPT09JC5sZW5ndGgsTHQ9JC5sZW5ndGgsTXQ9MDtNdDxMdDtNdCsrKU8uYWRkQ29sb3JTdG9wKEplP0hbTXRdOk10LyhMdC0xKSwicmdiYSgiKyRbTXRdWzBdKyIsIiskW010XVsxXSsiLCIrJFtNdF1bMl0rIiwiK00rIikiKTtyZXR1cm4gT30scWcuZ3JhZGllbnRGaWxsU3R5bGU9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHgsImJhY2tncm91bmQiLG0sayxTKTtpZighTSlyZXR1cm4gbnVsbDt4LmZpbGxTdHlsZT1NfSxxZy5jb2xvckZpbGxTdHlsZT1mdW5jdGlvbih4LG0sayxTLE0pe3guZmlsbFN0eWxlPSJyZ2JhKCIrbSsiLCIraysiLCIrUysiLCIrTSsiKSJ9LHFnLmVsZUZpbGxTdHlsZT1mdW5jdGlvbih4LG0sayl7dmFyIFM9bS5wc3R5bGUoImJhY2tncm91bmQtZmlsbCIpLnZhbHVlO2lmKFM9PT0ibGluZWFyLWdyYWRpZW50Inx8Uz09PSJyYWRpYWwtZ3JhZGllbnQiKXRoaXMuZ3JhZGllbnRGaWxsU3R5bGUoeCxtLFMsayk7ZWxzZXt2YXIgTT1tLnBzdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3RoaXMuY29sb3JGaWxsU3R5bGUoeCxNWzBdLE1bMV0sTVsyXSxrKX19LHFnLmdyYWRpZW50U3Ryb2tlU3R5bGU9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHgsImxpbmUiLG0sayxTKTtpZighTSlyZXR1cm4gbnVsbDt4LnN0cm9rZVN0eWxlPU19LHFnLmNvbG9yU3Ryb2tlU3R5bGU9ZnVuY3Rpb24oeCxtLGssUyxNKXt4LnN0cm9rZVN0eWxlPSJyZ2JhKCIrbSsiLCIraysiLCIrUysiLCIrTSsiKSJ9LHFnLmVsZVN0cm9rZVN0eWxlPWZ1bmN0aW9uKHgsbSxrKXt2YXIgUz1tLnBzdHlsZSgibGluZS1maWxsIikudmFsdWU7aWYoUz09PSJsaW5lYXItZ3JhZGllbnQifHxTPT09InJhZGlhbC1ncmFkaWVudCIpdGhpcy5ncmFkaWVudFN0cm9rZVN0eWxlKHgsbSxTLGspO2Vsc2V7dmFyIE09bS5wc3R5bGUoImxpbmUtY29sb3IiKS52YWx1ZTt0aGlzLmNvbG9yU3Ryb2tlU3R5bGUoeCxNWzBdLE1bMV0sTVsyXSxrKX19LHFnLm1hdGNoQ2FudmFzU2l6ZT1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9bS5kYXRhLFM9bS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCksTT1TWzJdLE89U1szXSxOPW0uZ2V0UGl4ZWxSYXRpbygpLCQ9bS5tb3Rpb25CbHVyUHhSYXRpbzsoeD09PW0uZGF0YS5idWZmZXJDYW52YXNlc1ttLk1PVElPTkJMVVJfQlVGRkVSX05PREVdfHx4PT09bS5kYXRhLmJ1ZmZlckNhbnZhc2VzW20uTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pJiYoTj0kKTt2YXIgSD1NKk4scT1PKk4sWTtpZighKEg9PT1tLmNhbnZhc1dpZHRoJiZxPT09bS5jYW52YXNIZWlnaHQpKXttLmZvbnRDYWNoZXM9bnVsbDt2YXIgWj1rLmNhbnZhc0NvbnRhaW5lcjtaLnN0eWxlLndpZHRoPU0rInB4IixaLnN0eWxlLmhlaWdodD1PKyJweCI7Zm9yKHZhciBjZT0wO2NlPG0uQ0FOVkFTX0xBWUVSUztjZSsrKVk9ay5jYW52YXNlc1tjZV0sWS53aWR0aD1ILFkuaGVpZ2h0PXEsWS5zdHlsZS53aWR0aD1NKyJweCIsWS5zdHlsZS5oZWlnaHQ9TysicHgiO2Zvcih2YXIgY2U9MDtjZTxtLkJVRkZFUl9DT1VOVDtjZSsrKVk9ay5idWZmZXJDYW52YXNlc1tjZV0sWS53aWR0aD1ILFkuaGVpZ2h0PXEsWS5zdHlsZS53aWR0aD1NKyJweCIsWS5zdHlsZS5oZWlnaHQ9TysicHgiO20udGV4dHVyZU11bHQ9MSxOPD0xJiYoWT1rLmJ1ZmZlckNhbnZhc2VzW20uVEVYVFVSRV9CVUZGRVJdLG0udGV4dHVyZU11bHQ9MixZLndpZHRoPUgqbS50ZXh0dXJlTXVsdCxZLmhlaWdodD1xKm0udGV4dHVyZU11bHQpLG0uY2FudmFzV2lkdGg9SCxtLmNhbnZhc0hlaWdodD1xfX0scWcucmVuZGVyVG89ZnVuY3Rpb24oeCxtLGssUyl7dGhpcy5yZW5kZXIoe2ZvcmNlZENvbnRleHQ6eCxmb3JjZWRab29tOm0sZm9yY2VkUGFuOmssZHJhd0FsbExheWVyczohMCxmb3JjZWRQeFJhdGlvOlN9KX0scWcucmVuZGVyPWZ1bmN0aW9uKHgpe3g9eHx8Y2ooKTt2YXIgbT14LmZvcmNlZENvbnRleHQsaz14LmRyYXdBbGxMYXllcnMsUz14LmRyYXdPbmx5Tm9kZUxheWVyLE09eC5mb3JjZWRab29tLE89eC5mb3JjZWRQYW4sTj10aGlzLCQ9eC5mb3JjZWRQeFJhdGlvPT09dm9pZCAwP3RoaXMuZ2V0UGl4ZWxSYXRpbygpOnguZm9yY2VkUHhSYXRpbyxIPU4uY3kscT1OLmRhdGEsWT1xLmNhbnZhc05lZWRzUmVkcmF3LFo9Ti50ZXh0dXJlT25WaWV3cG9ydCYmIW0mJihOLnBpbmNoaW5nfHxOLmhvdmVyRGF0YS5kcmFnZ2luZ3x8Ti5zd2lwZVBhbm5pbmd8fE4uZGF0YS53aGVlbFpvb21pbmcpLGNlPXgubW90aW9uQmx1ciE9PXZvaWQgMD94Lm1vdGlvbkJsdXI6Ti5tb3Rpb25CbHVyLHZlPU4ubW90aW9uQmx1clB4UmF0aW8sbWU9SC5oYXNDb21wb3VuZE5vZGVzKCksTGU9Ti5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzLF9lPSEhKE4uaG92ZXJEYXRhLnNlbGVjdGluZ3x8Ti50b3VjaERhdGEuc2VsZWN0aW5nKTtjZT1jZSYmIW0mJk4ubW90aW9uQmx1ckVuYWJsZWQmJiFfZTt2YXIgRWU9Y2U7bXx8KE4ucHJldlB4UmF0aW8hPT0kJiYoTi5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSxOLm1hdGNoQ2FudmFzU2l6ZShOLmNvbnRhaW5lciksTi5yZWRyYXdIaW50KCJlbGVzIiwhMCksTi5yZWRyYXdIaW50KCJkcmFnIiwhMCkpLE4ucHJldlB4UmF0aW89JCksIW0mJk4ubW90aW9uQmx1clRpbWVvdXQmJmNsZWFyVGltZW91dChOLm1vdGlvbkJsdXJUaW1lb3V0KSxjZSYmKE4ubWJGcmFtZXM9PW51bGwmJihOLm1iRnJhbWVzPTApLE4ubWJGcmFtZXMrKyxOLm1iRnJhbWVzPDMmJihFZT0hMSksTi5tYkZyYW1lcz5OLm1pbk1iTG93UXVhbEZyYW1lcyYmKE4ubW90aW9uQmx1clB4UmF0aW89Ti5tYlB4UkJsdXJyeSkpLE4uY2xlYXJpbmdNb3Rpb25CbHVyJiYoTi5tb3Rpb25CbHVyUHhSYXRpbz0xKSxOLnRleHR1cmVEcmF3TGFzdEZyYW1lJiYhWiYmKFlbTi5OT0RFXT0hMCxZW04uU0VMRUNUX0JPWF09ITApO3ZhciBCZT1ILnN0eWxlKCksUmU9SC56b29tKCksVmU9TSE9PXZvaWQgMD9NOlJlLGN0PUgucGFuKCksc3Q9e3g6Y3QueCx5OmN0Lnl9LFllPXt6b29tOlJlLHBhbjp7eDpjdC54LHk6Y3QueX19LG10PU4ucHJldlZpZXdwb3J0LEplPW10PT09dm9pZCAwfHxZZS56b29tIT09bXQuem9vbXx8WWUucGFuLnghPT1tdC5wYW4ueHx8WWUucGFuLnkhPT1tdC5wYW4ueTshSmUmJiEoTGUmJiFtZSkmJihOLm1vdGlvbkJsdXJQeFJhdGlvPTEpLE8mJihzdD1PKSxWZSo9JCxzdC54Kj0kLHN0LnkqPSQ7dmFyIEx0PU4uZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtmdW5jdGlvbiBNdChNaSxnaSxmcyxGcyx4cyl7dmFyIFJzPU1pLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtNaS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsTi5jb2xvckZpbGxTdHlsZShNaSwyNTUsMjU1LDI1NSxOLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3kpLE1pLmZpbGxSZWN0KGdpLGZzLEZzLHhzKSxNaS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249UnN9ZnVuY3Rpb24gdXQoTWksZ2kpe3ZhciBmcyxGcyx4cyxSczshTi5jbGVhcmluZ01vdGlvbkJsdXImJihNaT09PXEuYnVmZmVyQ29udGV4dHNbTi5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXXx8TWk9PT1xLmJ1ZmZlckNvbnRleHRzW04uTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pPyhmcz17eDpjdC54KnZlLHk6Y3QueSp2ZX0sRnM9UmUqdmUseHM9Ti5jYW52YXNXaWR0aCp2ZSxScz1OLmNhbnZhc0hlaWdodCp2ZSk6KGZzPXN0LEZzPVZlLHhzPU4uY2FudmFzV2lkdGgsUnM9Ti5jYW52YXNIZWlnaHQpLE1pLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksZ2k9PT0ibW90aW9uQmx1ciI/TXQoTWksMCwwLHhzLFJzKTohbSYmKGdpPT09dm9pZCAwfHxnaSkmJk1pLmNsZWFyUmVjdCgwLDAseHMsUnMpLGt8fChNaS50cmFuc2xhdGUoZnMueCxmcy55KSxNaS5zY2FsZShGcyxGcykpLE8mJk1pLnRyYW5zbGF0ZShPLngsTy55KSxNJiZNaS5zY2FsZShNLE0pfWlmKFp8fChOLnRleHR1cmVEcmF3TGFzdEZyYW1lPSExKSxaKXtpZihOLnRleHR1cmVEcmF3TGFzdEZyYW1lPSEwLCFOLnRleHR1cmVDYWNoZSl7Ti50ZXh0dXJlQ2FjaGU9e30sTi50ZXh0dXJlQ2FjaGUuYmI9SC5tdXRhYmxlRWxlbWVudHMoKS5ib3VuZGluZ0JveCgpLE4udGV4dHVyZUNhY2hlLnRleHR1cmU9Ti5kYXRhLmJ1ZmZlckNhbnZhc2VzW04uVEVYVFVSRV9CVUZGRVJdO3ZhciBXdD1OLmRhdGEuYnVmZmVyQ29udGV4dHNbTi5URVhUVVJFX0JVRkZFUl07V3Quc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxXdC5jbGVhclJlY3QoMCwwLE4uY2FudmFzV2lkdGgqTi50ZXh0dXJlTXVsdCxOLmNhbnZhc0hlaWdodCpOLnRleHR1cmVNdWx0KSxOLnJlbmRlcih7Zm9yY2VkQ29udGV4dDpXdCxkcmF3T25seU5vZGVMYXllcjohMCxmb3JjZWRQeFJhdGlvOiQqTi50ZXh0dXJlTXVsdH0pO3ZhciBZZT1OLnRleHR1cmVDYWNoZS52aWV3cG9ydD17em9vbTpILnpvb20oKSxwYW46SC5wYW4oKSx3aWR0aDpOLmNhbnZhc1dpZHRoLGhlaWdodDpOLmNhbnZhc0hlaWdodH07WWUubXBhbj17eDooMC1ZZS5wYW4ueCkvWWUuem9vbSx5OigwLVllLnBhbi55KS9ZZS56b29tfX1ZW04uRFJBR109ITEsWVtOLk5PREVdPSExO3ZhciBUdD1xLmNvbnRleHRzW04uTk9ERV0sX249Ti50ZXh0dXJlQ2FjaGUudGV4dHVyZSxZZT1OLnRleHR1cmVDYWNoZS52aWV3cG9ydDtUdC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGNlP010KFR0LDAsMCxZZS53aWR0aCxZZS5oZWlnaHQpOlR0LmNsZWFyUmVjdCgwLDAsWWUud2lkdGgsWWUuaGVpZ2h0KTt2YXIgaG49QmUuY29yZSgib3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yIikudmFsdWUsWXQ9QmUuY29yZSgib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiKS52YWx1ZTtOLmNvbG9yRmlsbFN0eWxlKFR0LGhuWzBdLGhuWzFdLGhuWzJdLFl0KSxUdC5maWxsUmVjdCgwLDAsWWUud2lkdGgsWWUuaGVpZ2h0KTt2YXIgUmU9SC56b29tKCk7dXQoVHQsITEpLFR0LmNsZWFyUmVjdChZZS5tcGFuLngsWWUubXBhbi55LFllLndpZHRoL1llLnpvb20vJCxZZS5oZWlnaHQvWWUuem9vbS8kKSxUdC5kcmF3SW1hZ2UoX24sWWUubXBhbi54LFllLm1wYW4ueSxZZS53aWR0aC9ZZS56b29tLyQsWWUuaGVpZ2h0L1llLnpvb20vJCl9ZWxzZSBOLnRleHR1cmVPblZpZXdwb3J0JiYhbSYmKE4udGV4dHVyZUNhY2hlPW51bGwpO3ZhciBEbj1ILmV4dGVudCgpLGlyPU4ucGluY2hpbmd8fE4uaG92ZXJEYXRhLmRyYWdnaW5nfHxOLnN3aXBlUGFubmluZ3x8Ti5kYXRhLndoZWVsWm9vbWluZ3x8Ti5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxOLmN5LmFuaW1hdGVkKCksdnI9Ti5oaWRlRWRnZXNPblZpZXdwb3J0JiZpcixObj1bXTtpZihObltOLk5PREVdPSFZW04uTk9ERV0mJmNlJiYhTi5jbGVhcmVkRm9yTW90aW9uQmx1cltOLk5PREVdfHxOLmNsZWFyaW5nTW90aW9uQmx1cixObltOLk5PREVdJiYoTi5jbGVhcmVkRm9yTW90aW9uQmx1cltOLk5PREVdPSEwKSxObltOLkRSQUddPSFZW04uRFJBR10mJmNlJiYhTi5jbGVhcmVkRm9yTW90aW9uQmx1cltOLkRSQUddfHxOLmNsZWFyaW5nTW90aW9uQmx1cixObltOLkRSQUddJiYoTi5jbGVhcmVkRm9yTW90aW9uQmx1cltOLkRSQUddPSEwKSxZW04uTk9ERV18fGt8fFN8fE5uW04uTk9ERV0pe3ZhciBwcj1jZSYmIU5uW04uTk9ERV0mJnZlIT09MSxUdD1tfHwocHI/Ti5kYXRhLmJ1ZmZlckNvbnRleHRzW04uTU9USU9OQkxVUl9CVUZGRVJfTk9ERV06cS5jb250ZXh0c1tOLk5PREVdKSxFcj1jZSYmIXByPyJtb3Rpb25CbHVyIjp2b2lkIDA7dXQoVHQsRXIpLHZyP04uZHJhd0NhY2hlZE5vZGVzKFR0LEx0Lm5vbmRyYWcsJCxEbik6Ti5kcmF3TGF5ZXJlZEVsZW1lbnRzKFR0LEx0Lm5vbmRyYWcsJCxEbiksTi5kZWJ1ZyYmTi5kcmF3RGVidWdQb2ludHMoVHQsTHQubm9uZHJhZyksIWsmJiFjZSYmKFlbTi5OT0RFXT0hMSl9aWYoIVMmJihZW04uRFJBR118fGt8fE5uW04uRFJBR10pKXt2YXIgcHI9Y2UmJiFObltOLkRSQUddJiZ2ZSE9PTEsVHQ9bXx8KHByP04uZGF0YS5idWZmZXJDb250ZXh0c1tOLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddOnEuY29udGV4dHNbTi5EUkFHXSk7dXQoVHQsY2UmJiFwcj8ibW90aW9uQmx1ciI6dm9pZCAwKSx2cj9OLmRyYXdDYWNoZWROb2RlcyhUdCxMdC5kcmFnLCQsRG4pOk4uZHJhd0NhY2hlZEVsZW1lbnRzKFR0LEx0LmRyYWcsJCxEbiksTi5kZWJ1ZyYmTi5kcmF3RGVidWdQb2ludHMoVHQsTHQuZHJhZyksIWsmJiFjZSYmKFlbTi5EUkFHXT0hMSl9aWYoTi5zaG93RnBzfHwhUyYmWVtOLlNFTEVDVF9CT1hdJiYhayl7dmFyIFR0PW18fHEuY29udGV4dHNbTi5TRUxFQ1RfQk9YXTtpZih1dChUdCksTi5zZWxlY3Rpb25bNF09PTEmJihOLmhvdmVyRGF0YS5zZWxlY3Rpbmd8fE4udG91Y2hEYXRhLnNlbGVjdGluZykpe3ZhciBSZT1OLmN5Lnpvb20oKSxNcj1CZS5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCIpLnZhbHVlL1JlO1R0LmxpbmVXaWR0aD1NcixUdC5maWxsU3R5bGU9InJnYmEoIitCZS5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMF0rIiwiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVsxXSsiLCIrQmUuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzJdKyIsIitCZS5jb3JlKCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiKS52YWx1ZSsiKSIsVHQuZmlsbFJlY3QoTi5zZWxlY3Rpb25bMF0sTi5zZWxlY3Rpb25bMV0sTi5zZWxlY3Rpb25bMl0tTi5zZWxlY3Rpb25bMF0sTi5zZWxlY3Rpb25bM10tTi5zZWxlY3Rpb25bMV0pLE1yPjAmJihUdC5zdHJva2VTdHlsZT0icmdiYSgiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMF0rIiwiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMV0rIiwiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMl0rIiwiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtb3BhY2l0eSIpLnZhbHVlKyIpIixUdC5zdHJva2VSZWN0KE4uc2VsZWN0aW9uWzBdLE4uc2VsZWN0aW9uWzFdLE4uc2VsZWN0aW9uWzJdLU4uc2VsZWN0aW9uWzBdLE4uc2VsZWN0aW9uWzNdLU4uc2VsZWN0aW9uWzFdKSl9aWYocS5iZ0FjdGl2ZVBvc2lzdGlvbiYmIU4uaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIFJlPU4uY3kuem9vbSgpLENyPXEuYmdBY3RpdmVQb3Npc3Rpb247VHQuZmlsbFN0eWxlPSJyZ2JhKCIrQmUuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMF0rIiwiK0JlLmNvcmUoImFjdGl2ZS1iZy1jb2xvciIpLnZhbHVlWzFdKyIsIitCZS5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsyXSsiLCIrQmUuY29yZSgiYWN0aXZlLWJnLW9wYWNpdHkiKS52YWx1ZSsiKSIsVHQuYmVnaW5QYXRoKCksVHQuYXJjKENyLngsQ3IueSxCZS5jb3JlKCJhY3RpdmUtYmctc2l6ZSIpLnBmVmFsdWUvUmUsMCwyKk1hdGguUEkpLFR0LmZpbGwoKX12YXIgT3I9Ti5sYXN0UmVkcmF3VGltZTtpZihOLnNob3dGcHMmJk9yKXtPcj1NYXRoLnJvdW5kKE9yKTt2YXIgV249TWF0aC5yb3VuZCgxZTMvT3IpO1R0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksVHQuZmlsbFN0eWxlPSJyZ2JhKDI1NSwgMCwgMCwgMC43NSkiLFR0LnN0cm9rZVN0eWxlPSJyZ2JhKDI1NSwgMCwgMCwgMC43NSkiLFR0LmxpbmVXaWR0aD0xLFR0LmZpbGxUZXh0KCIxIGZyYW1lID0gIitPcisiIG1zID0gIitXbisiIGZwcyIsMCwyMCk7dmFyIGJyPTYwO1R0LnN0cm9rZVJlY3QoMCwzMCwyNTAsMjApLFR0LmZpbGxSZWN0KDAsMzAsMjUwKk1hdGgubWluKFduL2JyLDEpLDIwKX1rfHwoWVtOLlNFTEVDVF9CT1hdPSExKX1pZihjZSYmdmUhPT0xKXt2YXIgU3I9cS5jb250ZXh0c1tOLk5PREVdLE5yPU4uZGF0YS5idWZmZXJDYW52YXNlc1tOLk1PVElPTkJMVVJfQlVGRkVSX05PREVdLFNpPXEuY29udGV4dHNbTi5EUkFHXSx5cz1OLmRhdGEuYnVmZmVyQ2FudmFzZXNbTi5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXSxwYT1mdW5jdGlvbihnaSxmcyxGcyl7Z2kuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxGc3x8IUVlP2dpLmNsZWFyUmVjdCgwLDAsTi5jYW52YXNXaWR0aCxOLmNhbnZhc0hlaWdodCk6TXQoZ2ksMCwwLE4uY2FudmFzV2lkdGgsTi5jYW52YXNIZWlnaHQpO3ZhciB4cz12ZTtnaS5kcmF3SW1hZ2UoZnMsMCwwLE4uY2FudmFzV2lkdGgqeHMsTi5jYW52YXNIZWlnaHQqeHMsMCwwLE4uY2FudmFzV2lkdGgsTi5jYW52YXNIZWlnaHQpfTsoWVtOLk5PREVdfHxObltOLk5PREVdKSYmKHBhKFNyLE5yLE5uW04uTk9ERV0pLFlbTi5OT0RFXT0hMSksKFlbTi5EUkFHXXx8Tm5bTi5EUkFHXSkmJihwYShTaSx5cyxObltOLkRSQUddKSxZW04uRFJBR109ITEpfU4ucHJldlZpZXdwb3J0PVllLE4uY2xlYXJpbmdNb3Rpb25CbHVyJiYoTi5jbGVhcmluZ01vdGlvbkJsdXI9ITEsTi5tb3Rpb25CbHVyQ2xlYXJlZD0hMCxOLm1vdGlvbkJsdXI9ITApLGNlJiYoTi5tb3Rpb25CbHVyVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ti5tb3Rpb25CbHVyVGltZW91dD1udWxsLE4uY2xlYXJlZEZvck1vdGlvbkJsdXJbTi5OT0RFXT0hMSxOLmNsZWFyZWRGb3JNb3Rpb25CbHVyW04uRFJBR109ITEsTi5tb3Rpb25CbHVyPSExLE4uY2xlYXJpbmdNb3Rpb25CbHVyPSFaLE4ubWJGcmFtZXM9MCxZW04uTk9ERV09ITAsWVtOLkRSQUddPSEwLE4ucmVkcmF3KCl9LHhpZSkpLG18fEguZW1pdCgicmVuZGVyIil9O3ZhciBpeT17fTtpeS5kcmF3UG9seWdvblBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNLE8pe3ZhciBOPVMvMiwkPU0vMjt4LmJlZ2luUGF0aCYmeC5iZWdpblBhdGgoKSx4Lm1vdmVUbyhtK04qT1swXSxrKyQqT1sxXSk7Zm9yKHZhciBIPTE7SDxPLmxlbmd0aC8yO0grKyl4LmxpbmVUbyhtK04qT1tIKjJdLGsrJCpPW0gqMisxXSk7eC5jbG9zZVBhdGgoKX0saXkuZHJhd1JvdW5kUG9seWdvblBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNLE8pe3ZhciBOPVMvMiwkPU0vMixIPWNJKFMsTSk7eC5iZWdpblBhdGgmJnguYmVnaW5QYXRoKCk7Zm9yKHZhciBxPTA7cTxPLmxlbmd0aC80O3ErKyl7dmFyIFk9dm9pZCAwLFo9dm9pZCAwO3E9PT0wP1k9Ty5sZW5ndGgtMjpZPXEqNC0yLFo9cSo0KzI7dmFyIGNlPW0rTipPW3EqNF0sdmU9ayskKk9bcSo0KzFdLG1lPS1PW1ldKk9bWl0tT1tZKzFdKk9bWisxXSxMZT1IL01hdGgudGFuKE1hdGguYWNvcyhtZSkvMiksX2U9Y2UtTGUqT1tZXSxFZT12ZS1MZSpPW1krMV0sQmU9Y2UrTGUqT1taXSxSZT12ZStMZSpPW1orMV07cT09PTA/eC5tb3ZlVG8oX2UsRWUpOngubGluZVRvKF9lLEVlKSx4LmFyY1RvKGNlLHZlLEJlLFJlLEgpfXguY2xvc2VQYXRoKCl9LGl5LmRyYXdSb3VuZFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNKXt2YXIgTz1TLzIsTj1NLzIsJD1XOShTLE0pO3guYmVnaW5QYXRoJiZ4LmJlZ2luUGF0aCgpLHgubW92ZVRvKG0say1OKSx4LmFyY1RvKG0rTyxrLU4sbStPLGssJCkseC5hcmNUbyhtK08saytOLG0saytOLCQpLHguYXJjVG8obS1PLGsrTixtLU8saywkKSx4LmFyY1RvKG0tTyxrLU4sbSxrLU4sJCkseC5saW5lVG8obSxrLU4pLHguY2xvc2VQYXRoKCl9LGl5LmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNKXt2YXIgTz1TLzIsTj1NLzIsJD1XOShTLE0pO3guYmVnaW5QYXRoJiZ4LmJlZ2luUGF0aCgpLHgubW92ZVRvKG0say1OKSx4LmxpbmVUbyhtK08say1OKSx4LmxpbmVUbyhtK08saykseC5hcmNUbyhtK08saytOLG0saytOLCQpLHguYXJjVG8obS1PLGsrTixtLU8saywkKSx4LmxpbmVUbyhtLU8say1OKSx4LmxpbmVUbyhtLGstTikseC5jbG9zZVBhdGgoKX0saXkuZHJhd0N1dFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNKXt2YXIgTz1TLzIsTj1NLzIsJD12aigpO3guYmVnaW5QYXRoJiZ4LmJlZ2luUGF0aCgpLHgubW92ZVRvKG0tTyskLGstTikseC5saW5lVG8obStPLSQsay1OKSx4LmxpbmVUbyhtK08say1OKyQpLHgubGluZVRvKG0rTyxrK04tJCkseC5saW5lVG8obStPLSQsaytOKSx4LmxpbmVUbyhtLU8rJCxrK04pLHgubGluZVRvKG0tTyxrK04tJCkseC5saW5lVG8obS1PLGstTiskKSx4LmNsb3NlUGF0aCgpfSxpeS5kcmF3QmFycmVsUGF0aD1mdW5jdGlvbih4LG0sayxTLE0pe3ZhciBPPVMvMixOPU0vMiwkPW0tTyxIPW0rTyxxPWstTixZPWsrTixaPXVJKFMsTSksY2U9Wi53aWR0aE9mZnNldCx2ZT1aLmhlaWdodE9mZnNldCxtZT1aLmN0cmxQdE9mZnNldFBjdCpjZTt4LmJlZ2luUGF0aCYmeC5iZWdpblBhdGgoKSx4Lm1vdmVUbygkLHErdmUpLHgubGluZVRvKCQsWS12ZSkseC5xdWFkcmF0aWNDdXJ2ZVRvKCQrbWUsWSwkK2NlLFkpLHgubGluZVRvKEgtY2UsWSkseC5xdWFkcmF0aWNDdXJ2ZVRvKEgtbWUsWSxILFktdmUpLHgubGluZVRvKEgscSt2ZSkseC5xdWFkcmF0aWNDdXJ2ZVRvKEgtbWUscSxILWNlLHEpLHgubGluZVRvKCQrY2UscSkseC5xdWFkcmF0aWNDdXJ2ZVRvKCQrbWUscSwkLHErdmUpLHguY2xvc2VQYXRoKCl9O2Zvcih2YXIgeXo9TWF0aC5zaW4oMCkseHo9TWF0aC5jb3MoMCksSEk9e30sVkk9e30sa3o9TWF0aC5QSS80MCx5OD0wKk1hdGguUEk7eTg8MipNYXRoLlBJO3k4Kz1reilISVt5OF09TWF0aC5zaW4oeTgpLFZJW3k4XT1NYXRoLmNvcyh5OCk7aXkuZHJhd0VsbGlwc2VQYXRoPWZ1bmN0aW9uKHgsbSxrLFMsTSl7aWYoeC5iZWdpblBhdGgmJnguYmVnaW5QYXRoKCkseC5lbGxpcHNlKXguZWxsaXBzZShtLGssUy8yLE0vMiwwLDAsMipNYXRoLlBJKTtlbHNlIGZvcih2YXIgTyxOLCQ9Uy8yLEg9TS8yLHE9MCpNYXRoLlBJO3E8MipNYXRoLlBJO3ErPWt6KU89bS0kKkhJW3FdKnl6KyQqVklbcV0qeHosTj1rK0gqVklbcV0qeXorSCpISVtxXSp4eixxPT09MD94Lm1vdmVUbyhPLE4pOngubGluZVRvKE8sTik7eC5jbG9zZVBhdGgoKX07dmFyIG1rPXt9O21rLmNyZWF0ZUJ1ZmZlcj1mdW5jdGlvbih4LG0pe3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBrLndpZHRoPXgsay5oZWlnaHQ9bSxbayxrLmdldENvbnRleHQoIjJkIildfSxtay5idWZmZXJDYW52YXNJbWFnZT1mdW5jdGlvbih4KXt2YXIgbT10aGlzLmN5LGs9bS5tdXRhYmxlRWxlbWVudHMoKSxTPWsuYm91bmRpbmdCb3goKSxNPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLE89eC5mdWxsP01hdGguY2VpbChTLncpOk1bMl0sTj14LmZ1bGw/TWF0aC5jZWlsKFMuaCk6TVszXSwkPVgoeC5tYXhXaWR0aCl8fFgoeC5tYXhIZWlnaHQpLEg9dGhpcy5nZXRQaXhlbFJhdGlvKCkscT0xO2lmKHguc2NhbGUhPT12b2lkIDApTyo9eC5zY2FsZSxOKj14LnNjYWxlLHE9eC5zY2FsZTtlbHNlIGlmKCQpe3ZhciBZPTEvMCxaPTEvMDtYKHgubWF4V2lkdGgpJiYoWT1xKngubWF4V2lkdGgvTyksWCh4Lm1heEhlaWdodCkmJihaPXEqeC5tYXhIZWlnaHQvTikscT1NYXRoLm1pbihZLFopLE8qPXEsTio9cX0kfHwoTyo9SCxOKj1ILHEqPUgpO3ZhciBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtjZS53aWR0aD1PLGNlLmhlaWdodD1OLGNlLnN0eWxlLndpZHRoPU8rInB4IixjZS5zdHlsZS5oZWlnaHQ9TisicHgiO3ZhciB2ZT1jZS5nZXRDb250ZXh0KCIyZCIpO2lmKE8+MCYmTj4wKXt2ZS5jbGVhclJlY3QoMCwwLE8sTiksdmUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJzb3VyY2Utb3ZlciI7dmFyIG1lPXRoaXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtpZih4LmZ1bGwpdmUudHJhbnNsYXRlKC1TLngxKnEsLVMueTEqcSksdmUuc2NhbGUocSxxKSx0aGlzLmRyYXdFbGVtZW50cyh2ZSxtZSksdmUuc2NhbGUoMS9xLDEvcSksdmUudHJhbnNsYXRlKFMueDEqcSxTLnkxKnEpO2Vsc2V7dmFyIExlPW0ucGFuKCksX2U9e3g6TGUueCpxLHk6TGUueSpxfTtxKj1tLnpvb20oKSx2ZS50cmFuc2xhdGUoX2UueCxfZS55KSx2ZS5zY2FsZShxLHEpLHRoaXMuZHJhd0VsZW1lbnRzKHZlLG1lKSx2ZS5zY2FsZSgxL3EsMS9xKSx2ZS50cmFuc2xhdGUoLV9lLngsLV9lLnkpfXguYmcmJih2ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLHZlLmZpbGxTdHlsZT14LmJnLHZlLnJlY3QoMCwwLE8sTiksdmUuZmlsbCgpKX1yZXR1cm4gY2V9O2Z1bmN0aW9uIGtpZSh4LG0pe2Zvcih2YXIgaz1hdG9iKHgpLFM9bmV3IEFycmF5QnVmZmVyKGsubGVuZ3RoKSxNPW5ldyBVaW50OEFycmF5KFMpLE89MDtPPGsubGVuZ3RoO08rKylNW09dPWsuY2hhckNvZGVBdChPKTtyZXR1cm4gbmV3IEJsb2IoW1NdLHt0eXBlOm19KX1mdW5jdGlvbiBFeih4KXt2YXIgbT14LmluZGV4T2YoIiwiKTtyZXR1cm4geC5zdWJzdHIobSsxKX1mdW5jdGlvbiBUeih4LG0sayl7dmFyIFM9ZnVuY3Rpb24oKXtyZXR1cm4gbS50b0RhdGFVUkwoayx4LnF1YWxpdHkpfTtzd2l0Y2goeC5vdXRwdXQpe2Nhc2UiYmxvYi1wcm9taXNlIjpyZXR1cm4gbmV3IGk4KGZ1bmN0aW9uKE0sTyl7dHJ5e20udG9CbG9iKGZ1bmN0aW9uKE4pe04hPW51bGw/TShOKTpPKG5ldyBFcnJvcigiYGNhbnZhcy50b0Jsb2IoKWAgc2VudCBhIG51bGwgdmFsdWUgaW4gaXRzIGNhbGxiYWNrIikpfSxrLHgucXVhbGl0eSl9Y2F0Y2goTil7TyhOKX19KTtjYXNlImJsb2IiOnJldHVybiBraWUoRXooUygpKSxrKTtjYXNlImJhc2U2NCI6cmV0dXJuIEV6KFMoKSk7Y2FzZSJiYXNlNjR1cmkiOmRlZmF1bHQ6cmV0dXJuIFMoKX19bWsucG5nPWZ1bmN0aW9uKHgpe3JldHVybiBUeih4LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UoeCksImltYWdlL3BuZyIpfSxtay5qcGc9ZnVuY3Rpb24oeCl7cmV0dXJuIFR6KHgsdGhpcy5idWZmZXJDYW52YXNJbWFnZSh4KSwiaW1hZ2UvanBlZyIpfTt2YXIgQ3o9e307Q3oubm9kZVNoYXBlSW1wbD1mdW5jdGlvbih4LG0sayxTLE0sTyxOKXtzd2l0Y2goeCl7Y2FzZSJlbGxpcHNlIjpyZXR1cm4gdGhpcy5kcmF3RWxsaXBzZVBhdGgobSxrLFMsTSxPKTtjYXNlInBvbHlnb24iOnJldHVybiB0aGlzLmRyYXdQb2x5Z29uUGF0aChtLGssUyxNLE8sTik7Y2FzZSJyb3VuZC1wb2x5Z29uIjpyZXR1cm4gdGhpcy5kcmF3Um91bmRQb2x5Z29uUGF0aChtLGssUyxNLE8sTik7Y2FzZSJyb3VuZHJlY3RhbmdsZSI6Y2FzZSJyb3VuZC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgobSxrLFMsTSxPKTtjYXNlImN1dHJlY3RhbmdsZSI6Y2FzZSJjdXQtcmVjdGFuZ2xlIjpyZXR1cm4gdGhpcy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aChtLGssUyxNLE8pO2Nhc2UiYm90dG9tcm91bmRyZWN0YW5nbGUiOmNhc2UiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChtLGssUyxNLE8pO2Nhc2UiYmFycmVsIjpyZXR1cm4gdGhpcy5kcmF3QmFycmVsUGF0aChtLGssUyxNLE8pfX07dmFyIFN6PXZrLGpjPXZrLnByb3RvdHlwZTtqYy5DQU5WQVNfTEFZRVJTPTMsamMuU0VMRUNUX0JPWD0wLGpjLkRSQUc9MSxqYy5OT0RFPTIsamMuQlVGRkVSX0NPVU5UPTMsamMuVEVYVFVSRV9CVUZGRVI9MCxqYy5NT1RJT05CTFVSX0JVRkZFUl9OT0RFPTEsamMuTU9USU9OQkxVUl9CVUZGRVJfRFJBRz0yO2Z1bmN0aW9uIHZrKHgpe3ZhciBtPXRoaXM7bS5kYXRhPXtjYW52YXNlczpuZXcgQXJyYXkoamMuQ0FOVkFTX0xBWUVSUyksY29udGV4dHM6bmV3IEFycmF5KGpjLkNBTlZBU19MQVlFUlMpLGNhbnZhc05lZWRzUmVkcmF3Om5ldyBBcnJheShqYy5DQU5WQVNfTEFZRVJTKSxidWZmZXJDYW52YXNlczpuZXcgQXJyYXkoamMuQlVGRkVSX0NPVU5UKSxidWZmZXJDb250ZXh0czpuZXcgQXJyYXkoamMuQ0FOVkFTX0xBWUVSUyl9O3ZhciBrPSItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLFM9InJnYmEoMCwwLDAsMCkiO20uZGF0YS5jYW52YXNDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dmFyIE09bS5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZTttLmRhdGEuY2FudmFzQ29udGFpbmVyLnN0eWxlW2tdPVMsTS5wb3NpdGlvbj0icmVsYXRpdmUiLE0uekluZGV4PSIwIixNLm92ZXJmbG93PSJoaWRkZW4iO3ZhciBPPXguY3kuY29udGFpbmVyKCk7Ty5hcHBlbmRDaGlsZChtLmRhdGEuY2FudmFzQ29udGFpbmVyKSxPLnN0eWxlW2tdPVM7dmFyIE49eyItd2Via2l0LXVzZXItc2VsZWN0Ijoibm9uZSIsIi1tb3otdXNlci1zZWxlY3QiOiItbW96LW5vbmUiLCJ1c2VyLXNlbGVjdCI6Im5vbmUiLCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiOiJyZ2JhKDAsMCwwLDApIiwib3V0bGluZS1zdHlsZSI6Im5vbmUifTtGdCgpJiYoTlsiLW1zLXRvdWNoLWFjdGlvbiJdPSJub25lIixOWyJ0b3VjaC1hY3Rpb24iXT0ibm9uZSIpO2Zvcih2YXIgJD0wOyQ8amMuQ0FOVkFTX0xBWUVSUzskKyspe3ZhciBIPW0uZGF0YS5jYW52YXNlc1skXT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTttLmRhdGEuY29udGV4dHNbJF09SC5nZXRDb250ZXh0KCIyZCIpLE9iamVjdC5rZXlzKE4pLmZvckVhY2goZnVuY3Rpb24oT3Ipe0guc3R5bGVbT3JdPU5bT3JdfSksSC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLEguc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiKyQpLEguc3R5bGUuekluZGV4PVN0cmluZyhqYy5DQU5WQVNfTEFZRVJTLSQpLG0uZGF0YS5jYW52YXNDb250YWluZXIuYXBwZW5kQ2hpbGQoSCksbS5kYXRhLmNhbnZhc05lZWRzUmVkcmF3WyRdPSExfW0uZGF0YS50b3BDYW52YXM9bS5kYXRhLmNhbnZhc2VzWzBdLG0uZGF0YS5jYW52YXNlc1tqYy5OT0RFXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJsYXllciIramMuTk9ERSsiLW5vZGUiKSxtLmRhdGEuY2FudmFzZXNbamMuU0VMRUNUX0JPWF0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK2pjLlNFTEVDVF9CT1grIi1zZWxlY3Rib3giKSxtLmRhdGEuY2FudmFzZXNbamMuRFJBR10uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK2pjLkRSQUcrIi1kcmFnIik7Zm9yKHZhciAkPTA7JDxqYy5CVUZGRVJfQ09VTlQ7JCsrKW0uZGF0YS5idWZmZXJDYW52YXNlc1skXT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxtLmRhdGEuYnVmZmVyQ29udGV4dHNbJF09bS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLmdldENvbnRleHQoIjJkIiksbS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImJ1ZmZlciIrJCksbS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLnN0eWxlLnpJbmRleD1TdHJpbmcoLSQtMSksbS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7bS5wYXRoc0VuYWJsZWQ9ITA7dmFyIHE9V2QoKSxZPWZ1bmN0aW9uKFduKXtyZXR1cm57eDooV24ueDErV24ueDIpLzIseTooV24ueTErV24ueTIpLzJ9fSxaPWZ1bmN0aW9uKFduKXtyZXR1cm57eDotV24udy8yLHk6LVduLmgvMn19LGNlPWZ1bmN0aW9uKFduKXt2YXIgYnI9V25bMF0uX3ByaXZhdGUsU3I9YnIub2xkQmFja2dyb3VuZFRpbWVzdGFtcD09PWJyLmJhY2tncm91bmRUaW1lc3RhbXA7cmV0dXJuIVNyfSx2ZT1mdW5jdGlvbihXbil7cmV0dXJuIFduWzBdLl9wcml2YXRlLm5vZGVLZXl9LG1lPWZ1bmN0aW9uKFduKXtyZXR1cm4gV25bMF0uX3ByaXZhdGUubGFiZWxTdHlsZUtleX0sTGU9ZnVuY3Rpb24oV24pe3JldHVybiBXblswXS5fcHJpdmF0ZS5zb3VyY2VMYWJlbFN0eWxlS2V5fSxfZT1mdW5jdGlvbihXbil7cmV0dXJuIFduWzBdLl9wcml2YXRlLnRhcmdldExhYmVsU3R5bGVLZXl9LEVlPWZ1bmN0aW9uKFduLGJyLFNyLE5yLFNpKXtyZXR1cm4gbS5kcmF3RWxlbWVudChXbixicixTciwhMSwhMSxTaSl9LEJlPWZ1bmN0aW9uKFduLGJyLFNyLE5yLFNpKXtyZXR1cm4gbS5kcmF3RWxlbWVudFRleHQoV24sYnIsU3IsTnIsIm1haW4iLFNpKX0sUmU9ZnVuY3Rpb24oV24sYnIsU3IsTnIsU2kpe3JldHVybiBtLmRyYXdFbGVtZW50VGV4dChXbixicixTcixOciwic291cmNlIixTaSl9LFZlPWZ1bmN0aW9uKFduLGJyLFNyLE5yLFNpKXtyZXR1cm4gbS5kcmF3RWxlbWVudFRleHQoV24sYnIsU3IsTnIsInRhcmdldCIsU2kpfSxjdD1mdW5jdGlvbihXbil7cmV0dXJuIFduLmJvdW5kaW5nQm94KCksV25bMF0uX3ByaXZhdGUuYm9keUJvdW5kc30sc3Q9ZnVuY3Rpb24oV24pe3JldHVybiBXbi5ib3VuZGluZ0JveCgpLFduWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLm1haW58fHF9LFllPWZ1bmN0aW9uKFduKXtyZXR1cm4gV24uYm91bmRpbmdCb3goKSxXblswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5zb3VyY2V8fHF9LG10PWZ1bmN0aW9uKFduKXtyZXR1cm4gV24uYm91bmRpbmdCb3goKSxXblswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy50YXJnZXR8fHF9LEplPWZ1bmN0aW9uKFduLGJyKXtyZXR1cm4gYnJ9LEx0PWZ1bmN0aW9uKFduKXtyZXR1cm4gWShjdChXbikpfSxNdD1mdW5jdGlvbihXbixicixTcil7dmFyIE5yPVduP1duKyItIjoiIjtyZXR1cm57eDpici54K1NyLnBzdHlsZShOcisidGV4dC1tYXJnaW4teCIpLnBmVmFsdWUseTpici55K1NyLnBzdHlsZShOcisidGV4dC1tYXJnaW4teSIpLnBmVmFsdWV9fSx1dD1mdW5jdGlvbihXbixicixTcil7dmFyIE5yPVduWzBdLl9wcml2YXRlLnJzY3JhdGNoO3JldHVybnt4Ok5yW2JyXSx5Ok5yW1NyXX19LFd0PWZ1bmN0aW9uKFduKXtyZXR1cm4gTXQoIiIsdXQoV24sImxhYmVsWCIsImxhYmVsWSIpLFduKX0sVHQ9ZnVuY3Rpb24oV24pe3JldHVybiBNdCgic291cmNlIix1dChXbiwic291cmNlTGFiZWxYIiwic291cmNlTGFiZWxZIiksV24pfSxfbj1mdW5jdGlvbihXbil7cmV0dXJuIE10KCJ0YXJnZXQiLHV0KFduLCJ0YXJnZXRMYWJlbFgiLCJ0YXJnZXRMYWJlbFkiKSxXbil9LGhuPWZ1bmN0aW9uKFduKXtyZXR1cm4gWihjdChXbikpfSxZdD1mdW5jdGlvbihXbil7cmV0dXJuIFooWWUoV24pKX0sRG49ZnVuY3Rpb24oV24pe3JldHVybiBaKG10KFduKSl9LGlyPWZ1bmN0aW9uKFduKXt2YXIgYnI9c3QoV24pLFNyPVooc3QoV24pKTtpZihXbi5pc05vZGUoKSl7c3dpdGNoKFduLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZSl7Y2FzZSJsZWZ0IjpTci54PS1ici53O2JyZWFrO2Nhc2UicmlnaHQiOlNyLng9MDticmVha31zd2l0Y2goV24ucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlKXtjYXNlInRvcCI6U3IueT0tYnIuaDticmVhaztjYXNlImJvdHRvbSI6U3IueT0wO2JyZWFrfX1yZXR1cm4gU3J9LHZyPW0uZGF0YS5lbGVUeHJDYWNoZT1uZXcgZGsobSx7Z2V0S2V5OnZlLGRvZXNFbGVJbnZhbGlkYXRlS2V5OmNlLGRyYXdFbGVtZW50OkVlLGdldEJvdW5kaW5nQm94OmN0LGdldFJvdGF0aW9uUG9pbnQ6THQsZ2V0Um90YXRpb25PZmZzZXQ6aG4sYWxsb3dFZGdlVHhyQ2FjaGluZzohMSxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITF9KSxObj1tLmRhdGEubGJsVHhyQ2FjaGU9bmV3IGRrKG0se2dldEtleTptZSxkcmF3RWxlbWVudDpCZSxnZXRCb3VuZGluZ0JveDpzdCxnZXRSb3RhdGlvblBvaW50Old0LGdldFJvdGF0aW9uT2Zmc2V0OmlyLGlzVmlzaWJsZTpKZX0pLHByPW0uZGF0YS5zbGJUeHJDYWNoZT1uZXcgZGsobSx7Z2V0S2V5OkxlLGRyYXdFbGVtZW50OlJlLGdldEJvdW5kaW5nQm94OlllLGdldFJvdGF0aW9uUG9pbnQ6VHQsZ2V0Um90YXRpb25PZmZzZXQ6WXQsaXNWaXNpYmxlOkplfSksRXI9bS5kYXRhLnRsYlR4ckNhY2hlPW5ldyBkayhtLHtnZXRLZXk6X2UsZHJhd0VsZW1lbnQ6VmUsZ2V0Qm91bmRpbmdCb3g6bXQsZ2V0Um90YXRpb25Qb2ludDpfbixnZXRSb3RhdGlvbk9mZnNldDpEbixpc1Zpc2libGU6SmV9KSxNcj1tLmRhdGEubHlyVHhyQ2FjaGU9bmV3IGR6KG0pO20ub25VcGRhdGVFbGVDYWxjcyhmdW5jdGlvbihXbixicil7dnIuaW52YWxpZGF0ZUVsZW1lbnRzKGJyKSxObi5pbnZhbGlkYXRlRWxlbWVudHMoYnIpLHByLmludmFsaWRhdGVFbGVtZW50cyhiciksRXIuaW52YWxpZGF0ZUVsZW1lbnRzKGJyKSxNci5pbnZhbGlkYXRlRWxlbWVudHMoYnIpO2Zvcih2YXIgU3I9MDtTcjxici5sZW5ndGg7U3IrKyl7dmFyIE5yPWJyW1NyXS5fcHJpdmF0ZTtOci5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wPU5yLmJhY2tncm91bmRUaW1lc3RhbXB9fSk7dmFyIENyPWZ1bmN0aW9uKFduKXtmb3IodmFyIGJyPTA7YnI8V24ubGVuZ3RoO2JyKyspTXIuZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50KFduW2JyXS5lbGUpfTt2ci5vbkRlcXVldWUoQ3IpLE5uLm9uRGVxdWV1ZShDcikscHIub25EZXF1ZXVlKENyKSxFci5vbkRlcXVldWUoQ3IpfWpjLnJlZHJhd0hpbnQ9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzO3N3aXRjaCh4KXtjYXNlImVsZXMiOmsuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tqYy5OT0RFXT1tO2JyZWFrO2Nhc2UiZHJhZyI6ay5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W2pjLkRSQUddPW07YnJlYWs7Y2FzZSJzZWxlY3QiOmsuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tqYy5TRUxFQ1RfQk9YXT1tO2JyZWFrfX07dmFyIHdrPXR5cGVvZiBQYXRoMkQ8InUiO2pjLnBhdGgyZEVuYWJsZWQ9ZnVuY3Rpb24oeCl7aWYoeD09PXZvaWQgMClyZXR1cm4gdGhpcy5wYXRoc0VuYWJsZWQ7dGhpcy5wYXRoc0VuYWJsZWQ9ISF4fSxqYy51c2VQYXRocz1mdW5jdGlvbigpe3JldHVybiB3ayYmdGhpcy5wYXRoc0VuYWJsZWR9LGpjLnNldEltZ1Ntb290aGluZz1mdW5jdGlvbih4LG0pe3guaW1hZ2VTbW9vdGhpbmdFbmFibGVkIT1udWxsP3guaW1hZ2VTbW9vdGhpbmdFbmFibGVkPW06KHgud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkPW0seC5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWQ9bSx4Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkPW0pfSxqYy5nZXRJbWdTbW9vdGhpbmc9ZnVuY3Rpb24oeCl7cmV0dXJuIHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkIT1udWxsP3guaW1hZ2VTbW9vdGhpbmdFbmFibGVkOngud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkfHx4Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZHx8eC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZH0samMubWFrZU9mZnNjcmVlbkNhbnZhcz1mdW5jdGlvbih4LG0pe3ZhciBrO3JldHVybih0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzPiJ1Ij8idW5kZWZpbmVkIjp1KE9mZnNjcmVlbkNhbnZhcykpIT09InVuZGVmaW5lZCI/az1uZXcgT2Zmc2NyZWVuQ2FudmFzKHgsbSk6KGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksay53aWR0aD14LGsuaGVpZ2h0PW0pLGt9LFtweixRMixKMixiayx5NSx3OCxxZyxpeSxtayxDel0uZm9yRWFjaChmdW5jdGlvbih4KXt5dChqYyx4KX0pO3ZhciAkcD1be25hbWU6Im51bGwiLGltcGw6VyR9LHtuYW1lOiJiYXNlIixpbXBsOmF6fSx7bmFtZToiY2FudmFzIixpbXBsOlN6fV0sRWllPVt7dHlwZToibGF5b3V0IixleHRlbnNpb25zOnFyZX0se3R5cGU6InJlbmRlcmVyIixleHRlbnNpb25zOiRwfV0sVGllPXt9LENpZT17fTtmdW5jdGlvbiBTaWUoeCxtLGspe3ZhciBTPWssTT1mdW5jdGlvbihtdCl7aHUoIkNhbiBub3QgcmVnaXN0ZXIgYCIrbSsiYCBmb3IgYCIreCsiYCBzaW5jZSBgIittdCsiYCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcHJvdG90eXBlIGFuZCBjYW4gbm90IGJlIG92ZXJyaWRkZW4iKX07aWYoeD09PSJjb3JlIil7aWYobGsucHJvdG90eXBlW21dKXJldHVybiBNKG0pO2xrLnByb3RvdHlwZVttXT1rfWVsc2UgaWYoeD09PSJjb2xsZWN0aW9uIil7aWYoVjAucHJvdG90eXBlW21dKXJldHVybiBNKG0pO1YwLnByb3RvdHlwZVttXT1rfWVsc2UgaWYoeD09PSJsYXlvdXQiKXtmb3IodmFyIE89ZnVuY3Rpb24obXQpe3RoaXMub3B0aW9ucz1tdCxrLmNhbGwodGhpcyxtdCksc2UodGhpcy5fcHJpdmF0ZSl8fCh0aGlzLl9wcml2YXRlPXt9KSx0aGlzLl9wcml2YXRlLmN5PW10LmN5LHRoaXMuX3ByaXZhdGUubGlzdGVuZXJzPVtdLHRoaXMuY3JlYXRlRW1pdHRlcigpfSxOPU8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoay5wcm90b3R5cGUpLCQ9W10sSD0wO0g8JC5sZW5ndGg7SCsrKXt2YXIgcT0kW0hdO05bcV09TltxXXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319Ti5zdGFydCYmIU4ucnVuP04ucnVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnQoKSx0aGlzfTohTi5zdGFydCYmTi5ydW4mJihOLnN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucnVuKCksdGhpc30pO3ZhciBZPWsucHJvdG90eXBlLnN0b3A7Ti5zdG9wPWZ1bmN0aW9uKCl7dmFyIFllPXRoaXMub3B0aW9ucztpZihZZSYmWWUuYW5pbWF0ZSl7dmFyIG10PXRoaXMuYW5pbWF0aW9ucztpZihtdClmb3IodmFyIEplPTA7SmU8bXQubGVuZ3RoO0plKyspbXRbSmVdLnN0b3AoKX1yZXR1cm4gWT9ZLmNhbGwodGhpcyk6dGhpcy5lbWl0KCJsYXlvdXRzdG9wIiksdGhpc30sTi5kZXN0cm95fHwoTi5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxOLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9O3ZhciBaPWZ1bmN0aW9uKG10KXtyZXR1cm4gbXQuX3ByaXZhdGUuY3l9LGNlPXthZGRFdmVudEZpZWxkczpmdW5jdGlvbihtdCxKZSl7SmUubGF5b3V0PW10LEplLmN5PVoobXQpLEplLnRhcmdldD1tdH0sYnViYmxlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihtdCl7cmV0dXJuIFoobXQpfX07eXQoTix7Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXI9bmV3IExTKGNlLHRoaXMpLHRoaXN9LGVtaXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSxvbjpmdW5jdGlvbihtdCxKZSl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uKG10LEplKSx0aGlzfSxvbmU6ZnVuY3Rpb24obXQsSmUpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUobXQsSmUpLHRoaXN9LG9uY2U6ZnVuY3Rpb24obXQsSmUpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUobXQsSmUpLHRoaXN9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKG10LEplKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIobXQsSmUpLHRoaXN9LHJlbW92ZUFsbExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKG10LEplKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkuZW1pdChtdCxKZSksdGhpc319KSxmdS5ldmVudEFsaWFzZXNPbihOKSxTPU99ZWxzZSBpZih4PT09InJlbmRlcmVyIiYmbSE9PSJudWxsIiYmbSE9PSJiYXNlIil7dmFyIHZlPV9pZSgicmVuZGVyZXIiLCJiYXNlIiksbWU9dmUucHJvdG90eXBlLExlPWssX2U9ay5wcm90b3R5cGUsRWU9ZnVuY3Rpb24oKXt2ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksTGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxCZT1FZS5wcm90b3R5cGU7Zm9yKHZhciBSZSBpbiBtZSl7dmFyIFZlPW1lW1JlXSxjdD1fZVtSZV0hPW51bGw7aWYoY3QpcmV0dXJuIE0oUmUpO0JlW1JlXT1WZX1mb3IodmFyIHN0IGluIF9lKUJlW3N0XT1fZVtzdF07bWUuY2xpZW50RnVuY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oWWUpe0JlW1llXT1CZVtZZV18fGZ1bmN0aW9uKCl7Y2goIlJlbmRlcmVyIGRvZXMgbm90IGltcGxlbWVudCBgcmVuZGVyZXIuIitZZSsiKClgIG9uIGl0cyBwcm90b3R5cGUiKX19KSxTPUVlfWVsc2UgaWYoeD09PSJfX3Byb3RvX18ifHx4PT09ImNvbnN0cnVjdG9yInx8eD09PSJwcm90b3R5cGUiKXJldHVybiBjaCh4KyIgaXMgYW4gaWxsZWdhbCB0eXBlIHRvIGJlIHJlZ2lzdGVyZWQsIHBvc3NpYmx5IGxlYWQgdG8gcHJvdG90eXBlIHBvbGx1dGlvbnMiKTtyZXR1cm4gRm4oe21hcDpUaWUsa2V5czpbeCxtXSx2YWx1ZTpTfSl9ZnVuY3Rpb24gX2llKHgsbSl7cmV0dXJuIHFuKHttYXA6VGllLGtleXM6W3gsbV19KX1mdW5jdGlvbiBfeih4LG0sayxTLE0pe3JldHVybiBGbih7bWFwOkNpZSxrZXlzOlt4LG0sayxTXSx2YWx1ZTpNfSl9ZnVuY3Rpb24gYndlKHgsbSxrLFMpe3JldHVybiBxbih7bWFwOkNpZSxrZXlzOlt4LG0sayxTXX0pfXZhciBBej1mdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yKXJldHVybiBfaWUuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0zKXJldHVybiBTaWUuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT00KXJldHVybiBid2UuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT01KXJldHVybiBfei5hcHBseShudWxsLGFyZ3VtZW50cyk7Y2goIkludmFsaWQgZXh0ZW5zaW9uIGFjY2VzcyBzeW50YXgiKX07bGsucHJvdG90eXBlLmV4dGVuc2lvbj1BeixFaWUuZm9yRWFjaChmdW5jdGlvbih4KXt4LmV4dGVuc2lvbnMuZm9yRWFjaChmdW5jdGlvbihtKXtTaWUoeC50eXBlLG0ubmFtZSxtLmltcGwpfSl9KTt2YXIgQWllPWZ1bmN0aW9uIHgoKXtpZighKHRoaXMgaW5zdGFuY2VvZiB4KSlyZXR1cm4gbmV3IHg7dGhpcy5sZW5ndGg9MH0seDg9QWllLnByb3RvdHlwZTt4OC5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJzdHlsZXNoZWV0In0seDguc2VsZWN0b3I9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcy5sZW5ndGgrKztyZXR1cm4gdGhpc1ttXT17c2VsZWN0b3I6eCxwcm9wZXJ0aWVzOltdfSx0aGlzfSx4OC5jc3M9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLmxlbmd0aC0xO2lmKGJlKHgpKXRoaXNba10ucHJvcGVydGllcy5wdXNoKHtuYW1lOngsdmFsdWU6bX0pO2Vsc2UgaWYoc2UoeCkpZm9yKHZhciBTPXgsTT1PYmplY3Qua2V5cyhTKSxPPTA7TzxNLmxlbmd0aDtPKyspe3ZhciBOPU1bT10sJD1TW05dO2lmKCQhPW51bGwpe3ZhciBIPVQxLnByb3BlcnRpZXNbTl18fFQxLnByb3BlcnRpZXNbX3QoTildO2lmKEghPW51bGwpe3ZhciBxPUgubmFtZSxZPSQ7dGhpc1trXS5wcm9wZXJ0aWVzLnB1c2goe25hbWU6cSx2YWx1ZTpZfSl9fX1yZXR1cm4gdGhpc30seDguc3R5bGU9eDguY3NzLHg4LmdlbmVyYXRlU3R5bGU9ZnVuY3Rpb24oeCl7dmFyIG09bmV3IFQxKHgpO3JldHVybiB0aGlzLmFwcGVuZFRvU3R5bGUobSl9LHg4LmFwcGVuZFRvU3R5bGU9ZnVuY3Rpb24oeCl7Zm9yKHZhciBtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBrPXRoaXNbbV0sUz1rLnNlbGVjdG9yLE09ay5wcm9wZXJ0aWVzO3guc2VsZWN0b3IoUyk7Zm9yKHZhciBPPTA7TzxNLmxlbmd0aDtPKyspe3ZhciBOPU1bT107eC5jc3MoTi5uYW1lLE4udmFsdWUpfX1yZXR1cm4geH07dmFyIG13ZT0iMy4yOC4xIixrOD1mdW5jdGlvbihtKXtpZihtPT09dm9pZCAwJiYobT17fSksc2UobSkpcmV0dXJuIG5ldyBsayhtKTtpZihiZShtKSlyZXR1cm4gQXouYXBwbHkoQXosYXJndW1lbnRzKX07cmV0dXJuIGs4LnVzZT1mdW5jdGlvbih4KXt2YXIgbT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIG0udW5zaGlmdChrOCkseC5hcHBseShudWxsLG0pLHRoaXN9LGs4Lndhcm5pbmdzPWZ1bmN0aW9uKHgpe3JldHVybiBvUyh4KX0sazgudmVyc2lvbj1td2Usazguc3R5bGVzaGVldD1rOC5TdHlsZXNoZWV0PUFpZSxrOH0pfSkoaFdlKTt2YXIgaG9uPWhXZS5leHBvcnRzO2NvbnN0IGZXZT1oQyhob24pO3ZhciBkV2U9e2V4cG9ydHM6e319LG53ZT17ZXhwb3J0czp7fX0scndlPXtleHBvcnRzOnt9fSxnV2U7ZnVuY3Rpb24gZm9uKCl7cmV0dXJuIGdXZXx8KGdXZT0xLGZ1bmN0aW9uKGkscyl7KGZ1bmN0aW9uKGQscCl7aS5leHBvcnRzPXAoKX0pKEFnLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBkPXt9O2Z1bmN0aW9uIHAodil7aWYoZFt2XSlyZXR1cm4gZFt2XS5leHBvcnRzO3ZhciBiPWRbdl09e2k6dixsOiExLGV4cG9ydHM6e319O3JldHVybiB1W3ZdLmNhbGwoYi5leHBvcnRzLGIsYi5leHBvcnRzLHApLGIubD0hMCxiLmV4cG9ydHN9cmV0dXJuIHAubT11LHAuYz1kLHAuaT1mdW5jdGlvbih2KXtyZXR1cm4gdn0scC5kPWZ1bmN0aW9uKHYsYix5KXtwLm8odixiKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHYsYix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0Onl9KX0scC5uPWZ1bmN0aW9uKHYpe3ZhciBiPXYmJnYuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB2LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHZ9O3JldHVybiBwLmQoYiwiYSIsYiksYn0scC5vPWZ1bmN0aW9uKHYsYil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2LGIpfSxwLnA9IiIscChwLnM9MjYpfShbZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoKXt9di5RVUFMSVRZPTEsdi5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ9ITEsdi5ERUZBVUxUX0lOQ1JFTUVOVEFMPSExLHYuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VUPSEwLHYuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVD0hMSx2LkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRD01MCx2LkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVM9ITEsdi5ERUZBVUxUX0dSQVBIX01BUkdJTj0xNSx2Lk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz0hMSx2LlNJTVBMRV9OT0RFX1NJWkU9NDAsdi5TSU1QTEVfTk9ERV9IQUxGX1NJWkU9di5TSU1QTEVfTk9ERV9TSVpFLzIsdi5FTVBUWV9DT01QT1VORF9OT0RFX1NJWkU9NDAsdi5NSU5fRURHRV9MRU5HVEg9MSx2LldPUkxEX0JPVU5EQVJZPTFlNix2LklOSVRJQUxfV09STERfQk9VTkRBUlk9di5XT1JMRF9CT1VOREFSWS8xZTMsdi5XT1JMRF9DRU5URVJfWD0xMjAwLHYuV09STERfQ0VOVEVSX1k9OTAwLHUuZXhwb3J0cz12fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgyKSxiPXAoOCkseT1wKDkpO2Z1bmN0aW9uIFQoQSxQLFIpe3YuY2FsbCh0aGlzLFIpLHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PSExLHRoaXMudkdyYXBoT2JqZWN0PVIsdGhpcy5iZW5kcG9pbnRzPVtdLHRoaXMuc291cmNlPUEsdGhpcy50YXJnZXQ9UH1ULnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHYucHJvdG90eXBlKTtmb3IodmFyIF8gaW4gdilUW19dPXZbX107VC5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlfSxULnByb3RvdHlwZS5nZXRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXR9LFQucHJvdG90eXBlLmlzSW50ZXJHcmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW50ZXJHcmFwaH0sVC5wcm90b3R5cGUuZ2V0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxULnByb3RvdHlwZS5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR9LFQucHJvdG90eXBlLmdldEJlbmRwb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iZW5kcG9pbnRzfSxULnByb3RvdHlwZS5nZXRMY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sY2F9LFQucHJvdG90eXBlLmdldFNvdXJjZUluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlSW5MY2F9LFQucHJvdG90eXBlLmdldFRhcmdldEluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFyZ2V0SW5MY2F9LFQucHJvdG90eXBlLmdldE90aGVyRW5kPWZ1bmN0aW9uKEEpe2lmKHRoaXMuc291cmNlPT09QSlyZXR1cm4gdGhpcy50YXJnZXQ7aWYodGhpcy50YXJnZXQ9PT1BKXJldHVybiB0aGlzLnNvdXJjZTt0aHJvdyJOb2RlIGlzIG5vdCBpbmNpZGVudCB3aXRoIHRoaXMgZWRnZSJ9LFQucHJvdG90eXBlLmdldE90aGVyRW5kSW5HcmFwaD1mdW5jdGlvbihBLFApe2Zvcih2YXIgUj10aGlzLmdldE90aGVyRW5kKEEpLEY9UC5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCk7Oyl7aWYoUi5nZXRPd25lcigpPT1QKXJldHVybiBSO2lmKFIuZ2V0T3duZXIoKT09RilicmVhaztSPVIuZ2V0T3duZXIoKS5nZXRQYXJlbnQoKX1yZXR1cm4gbnVsbH0sVC5wcm90b3R5cGUudXBkYXRlTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEE9bmV3IEFycmF5KDQpO3RoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PWIuZ2V0SW50ZXJzZWN0aW9uKHRoaXMudGFyZ2V0LmdldFJlY3QoKSx0aGlzLnNvdXJjZS5nZXRSZWN0KCksQSksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR8fCh0aGlzLmxlbmd0aFg9QVswXS1BWzJdLHRoaXMubGVuZ3RoWT1BWzFdLUFbM10sTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPXkuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9eS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpKX0sVC5wcm90b3R5cGUudXBkYXRlTGVuZ3RoU2ltcGxlPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGhYPXRoaXMudGFyZ2V0LmdldENlbnRlclgoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJYKCksdGhpcy5sZW5ndGhZPXRoaXMudGFyZ2V0LmdldENlbnRlclkoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJZKCksTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPXkuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9eS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpfSx1LmV4cG9ydHM9VH0sZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoYil7dGhpcy52R3JhcGhPYmplY3Q9Yn11LmV4cG9ydHM9dn0sZnVuY3Rpb24odSxkLHApe3ZhciB2PXAoMiksYj1wKDEwKSx5PXAoMTMpLFQ9cCgwKSxfPXAoMTYpLEE9cCg0KTtmdW5jdGlvbiBQKEYsaixLLGVlKXtLPT1udWxsJiZlZT09bnVsbCYmKGVlPWopLHYuY2FsbCh0aGlzLGVlKSxGLmdyYXBoTWFuYWdlciE9bnVsbCYmKEY9Ri5ncmFwaE1hbmFnZXIpLHRoaXMuZXN0aW1hdGVkU2l6ZT1iLk1JTl9WQUxVRSx0aGlzLmluY2x1c2lvblRyZWVEZXB0aD1iLk1BWF9WQUxVRSx0aGlzLnZHcmFwaE9iamVjdD1lZSx0aGlzLmVkZ2VzPVtdLHRoaXMuZ3JhcGhNYW5hZ2VyPUYsSyE9bnVsbCYmaiE9bnVsbD90aGlzLnJlY3Q9bmV3IHkoai54LGoueSxLLndpZHRoLEsuaGVpZ2h0KTp0aGlzLnJlY3Q9bmV3IHl9UC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2LnByb3RvdHlwZSk7Zm9yKHZhciBSIGluIHYpUFtSXT12W1JdO1AucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LFAucHJvdG90eXBlLmdldENoaWxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGR9LFAucHJvdG90eXBlLmdldE93bmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJ9LFAucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC53aWR0aH0sUC5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oRil7dGhpcy5yZWN0LndpZHRoPUZ9LFAucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QuaGVpZ2h0fSxQLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oRil7dGhpcy5yZWN0LmhlaWdodD1GfSxQLnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yfSxQLnByb3RvdHlwZS5nZXRDZW50ZXJZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMn0sUC5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBKHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yLHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMil9LFAucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBKHRoaXMucmVjdC54LHRoaXMucmVjdC55KX0sUC5wcm90b3R5cGUuZ2V0UmVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3R9LFAucHJvdG90eXBlLmdldERpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3Qud2lkdGgqdGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQqdGhpcy5yZWN0LmhlaWdodCl9LFAucHJvdG90eXBlLmdldEhhbGZUaGVEaWFnb25hbD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0K3RoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgpLzJ9LFAucHJvdG90eXBlLnNldFJlY3Q9ZnVuY3Rpb24oRixqKXt0aGlzLnJlY3QueD1GLngsdGhpcy5yZWN0Lnk9Ri55LHRoaXMucmVjdC53aWR0aD1qLndpZHRoLHRoaXMucmVjdC5oZWlnaHQ9ai5oZWlnaHR9LFAucHJvdG90eXBlLnNldENlbnRlcj1mdW5jdGlvbihGLGope3RoaXMucmVjdC54PUYtdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0Lnk9ai10aGlzLnJlY3QuaGVpZ2h0LzJ9LFAucHJvdG90eXBlLnNldExvY2F0aW9uPWZ1bmN0aW9uKEYsail7dGhpcy5yZWN0Lng9Rix0aGlzLnJlY3QueT1qfSxQLnByb3RvdHlwZS5tb3ZlQnk9ZnVuY3Rpb24oRixqKXt0aGlzLnJlY3QueCs9Rix0aGlzLnJlY3QueSs9an0sUC5wcm90b3R5cGUuZ2V0RWRnZUxpc3RUb05vZGU9ZnVuY3Rpb24oRil7dmFyIGo9W10sSz10aGlzO3JldHVybiBLLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWUpe2lmKGVlLnRhcmdldD09Ril7aWYoZWUuc291cmNlIT1LKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSEiO2oucHVzaChlZSl9fSksan0sUC5wcm90b3R5cGUuZ2V0RWRnZXNCZXR3ZWVuPWZ1bmN0aW9uKEYpe3ZhciBqPVtdLEs9dGhpcztyZXR1cm4gSy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtpZighKGVlLnNvdXJjZT09S3x8ZWUudGFyZ2V0PT1LKSl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCI7KGVlLnRhcmdldD09Rnx8ZWUuc291cmNlPT1GKSYmai5wdXNoKGVlKX0pLGp9LFAucHJvdG90eXBlLmdldE5laWdoYm9yc0xpc3Q9ZnVuY3Rpb24oKXt2YXIgRj1uZXcgU2V0LGo9dGhpcztyZXR1cm4gai5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKEspe2lmKEsuc291cmNlPT1qKUYuYWRkKEsudGFyZ2V0KTtlbHNle2lmKEsudGFyZ2V0IT1qKXRocm93IkluY29ycmVjdCBpbmNpZGVuY3khIjtGLmFkZChLLnNvdXJjZSl9fSksRn0sUC5wcm90b3R5cGUud2l0aENoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIEY9bmV3IFNldCxqLEs7aWYoRi5hZGQodGhpcyksdGhpcy5jaGlsZCE9bnVsbClmb3IodmFyIGVlPXRoaXMuY2hpbGQuZ2V0Tm9kZXMoKSxpZT0wO2llPGVlLmxlbmd0aDtpZSsrKWo9ZWVbaWVdLEs9ai53aXRoQ2hpbGRyZW4oKSxLLmZvckVhY2goZnVuY3Rpb24ob2Upe0YuYWRkKG9lKX0pO3JldHVybiBGfSxQLnByb3RvdHlwZS5nZXROb09mQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgRj0wLGo7aWYodGhpcy5jaGlsZD09bnVsbClGPTE7ZWxzZSBmb3IodmFyIEs9dGhpcy5jaGlsZC5nZXROb2RlcygpLGVlPTA7ZWU8Sy5sZW5ndGg7ZWUrKylqPUtbZWVdLEYrPWouZ2V0Tm9PZkNoaWxkcmVuKCk7cmV0dXJuIEY9PTAmJihGPTEpLEZ9LFAucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWIuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LFAucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGQ9PW51bGw/dGhpcy5lc3RpbWF0ZWRTaXplPSh0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCkvMjoodGhpcy5lc3RpbWF0ZWRTaXplPXRoaXMuY2hpbGQuY2FsY0VzdGltYXRlZFNpemUoKSx0aGlzLnJlY3Qud2lkdGg9dGhpcy5lc3RpbWF0ZWRTaXplLHRoaXMucmVjdC5oZWlnaHQ9dGhpcy5lc3RpbWF0ZWRTaXplLHRoaXMuZXN0aW1hdGVkU2l6ZSl9LFAucHJvdG90eXBlLnNjYXR0ZXI9ZnVuY3Rpb24oKXt2YXIgRixqLEs9LVQuSU5JVElBTF9XT1JMRF9CT1VOREFSWSxlZT1ULklOSVRJQUxfV09STERfQk9VTkRBUlk7Rj1ULldPUkxEX0NFTlRFUl9YK18ubmV4dERvdWJsZSgpKihlZS1LKStLO3ZhciBpZT0tVC5JTklUSUFMX1dPUkxEX0JPVU5EQVJZLG9lPVQuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtqPVQuV09STERfQ0VOVEVSX1krXy5uZXh0RG91YmxlKCkqKG9lLWllKStpZSx0aGlzLnJlY3QueD1GLHRoaXMucmVjdC55PWp9LFAucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbigpe2lmKHRoaXMuZ2V0Q2hpbGQoKT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjtpZih0aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKS5sZW5ndGghPTApe3ZhciBGPXRoaXMuZ2V0Q2hpbGQoKTtpZihGLnVwZGF0ZUJvdW5kcyghMCksdGhpcy5yZWN0Lng9Ri5nZXRMZWZ0KCksdGhpcy5yZWN0Lnk9Ri5nZXRUb3AoKSx0aGlzLnNldFdpZHRoKEYuZ2V0UmlnaHQoKS1GLmdldExlZnQoKSksdGhpcy5zZXRIZWlnaHQoRi5nZXRCb3R0b20oKS1GLmdldFRvcCgpKSxULk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyl7dmFyIGo9Ri5nZXRSaWdodCgpLUYuZ2V0TGVmdCgpLEs9Ri5nZXRCb3R0b20oKS1GLmdldFRvcCgpO3RoaXMubGFiZWxXaWR0aD5qJiYodGhpcy5yZWN0LngtPSh0aGlzLmxhYmVsV2lkdGgtaikvMix0aGlzLnNldFdpZHRoKHRoaXMubGFiZWxXaWR0aCkpLHRoaXMubGFiZWxIZWlnaHQ+SyYmKHRoaXMubGFiZWxQb3M9PSJjZW50ZXIiP3RoaXMucmVjdC55LT0odGhpcy5sYWJlbEhlaWdodC1LKS8yOnRoaXMubGFiZWxQb3M9PSJ0b3AiJiYodGhpcy5yZWN0LnktPXRoaXMubGFiZWxIZWlnaHQtSyksdGhpcy5zZXRIZWlnaHQodGhpcy5sYWJlbEhlaWdodCkpfX19LFAucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aD1mdW5jdGlvbigpe2lmKHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPT1iLk1BWF9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5pbmNsdXNpb25UcmVlRGVwdGh9LFAucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihGKXt2YXIgaj10aGlzLnJlY3QueDtqPlQuV09STERfQk9VTkRBUlk/aj1ULldPUkxEX0JPVU5EQVJZOmo8LVQuV09STERfQk9VTkRBUlkmJihqPS1ULldPUkxEX0JPVU5EQVJZKTt2YXIgSz10aGlzLnJlY3QueTtLPlQuV09STERfQk9VTkRBUlk/Sz1ULldPUkxEX0JPVU5EQVJZOks8LVQuV09STERfQk9VTkRBUlkmJihLPS1ULldPUkxEX0JPVU5EQVJZKTt2YXIgZWU9bmV3IEEoaixLKSxpZT1GLmludmVyc2VUcmFuc2Zvcm1Qb2ludChlZSk7dGhpcy5zZXRMb2NhdGlvbihpZS54LGllLnkpfSxQLnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54fSxQLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGh9LFAucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueX0sUC5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHR9LFAucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyPT1udWxsP251bGw6dGhpcy5vd25lci5nZXRQYXJlbnQoKX0sdS5leHBvcnRzPVB9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KGIseSl7Yj09bnVsbCYmeT09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOih0aGlzLng9Yix0aGlzLnk9eSl9di5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LHYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSx2LnByb3RvdHlwZS5zZXRYPWZ1bmN0aW9uKGIpe3RoaXMueD1ifSx2LnByb3RvdHlwZS5zZXRZPWZ1bmN0aW9uKGIpe3RoaXMueT1ifSx2LnByb3RvdHlwZS5nZXREaWZmZXJlbmNlPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgRGltZW5zaW9uRCh0aGlzLngtYi54LHRoaXMueS1iLnkpfSx2LnByb3RvdHlwZS5nZXRDb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2KHRoaXMueCx0aGlzLnkpfSx2LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMueCs9Yi53aWR0aCx0aGlzLnkrPWIuaGVpZ2h0LHRoaXN9LHUuZXhwb3J0cz12fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgyKSxiPXAoMTApLHk9cCgwKSxUPXAoNiksXz1wKDMpLEE9cCgxKSxQPXAoMTMpLFI9cCgxMiksRj1wKDExKTtmdW5jdGlvbiBqKGVlLGllLG9lKXt2LmNhbGwodGhpcyxvZSksdGhpcy5lc3RpbWF0ZWRTaXplPWIuTUlOX1ZBTFVFLHRoaXMubWFyZ2luPXkuREVGQVVMVF9HUkFQSF9NQVJHSU4sdGhpcy5lZGdlcz1bXSx0aGlzLm5vZGVzPVtdLHRoaXMuaXNDb25uZWN0ZWQ9ITEsdGhpcy5wYXJlbnQ9ZWUsaWUhPW51bGwmJmllIGluc3RhbmNlb2YgVD90aGlzLmdyYXBoTWFuYWdlcj1pZTppZSE9bnVsbCYmaWUgaW5zdGFuY2VvZiBMYXlvdXQmJih0aGlzLmdyYXBoTWFuYWdlcj1pZS5ncmFwaE1hbmFnZXIpfWoucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodi5wcm90b3R5cGUpO2Zvcih2YXIgSyBpbiB2KWpbS109dltLXTtqLnByb3RvdHlwZS5nZXROb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzfSxqLnByb3RvdHlwZS5nZXRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzfSxqLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LGoucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0sai5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlZnR9LGoucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmlnaHR9LGoucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcH0sai5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm90dG9tfSxqLnByb3RvdHlwZS5pc0Nvbm5lY3RlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQ29ubmVjdGVkfSxqLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZWUsaWUsb2Upe2lmKGllPT1udWxsJiZvZT09bnVsbCl7dmFyIHBlPWVlO2lmKHRoaXMuZ3JhcGhNYW5hZ2VyPT1udWxsKXRocm93IkdyYXBoIGhhcyBubyBncmFwaCBtZ3IhIjtpZih0aGlzLmdldE5vZGVzKCkuaW5kZXhPZihwZSk+LTEpdGhyb3ciTm9kZSBhbHJlYWR5IGluIGdyYXBoISI7cmV0dXJuIHBlLm93bmVyPXRoaXMsdGhpcy5nZXROb2RlcygpLnB1c2gocGUpLHBlfWVsc2V7dmFyIGJlPWVlO2lmKCEodGhpcy5nZXROb2RlcygpLmluZGV4T2YoaWUpPi0xJiZ0aGlzLmdldE5vZGVzKCkuaW5kZXhPZihvZSk+LTEpKXRocm93IlNvdXJjZSBvciB0YXJnZXQgbm90IGluIGdyYXBoISI7aWYoIShpZS5vd25lcj09b2Uub3duZXImJmllLm93bmVyPT10aGlzKSl0aHJvdyJCb3RoIG93bmVycyBtdXN0IGJlIHRoaXMgZ3JhcGghIjtyZXR1cm4gaWUub3duZXIhPW9lLm93bmVyP251bGw6KGJlLnNvdXJjZT1pZSxiZS50YXJnZXQ9b2UsYmUuaXNJbnRlckdyYXBoPSExLHRoaXMuZ2V0RWRnZXMoKS5wdXNoKGJlKSxpZS5lZGdlcy5wdXNoKGJlKSxvZSE9aWUmJm9lLmVkZ2VzLnB1c2goYmUpLGJlKX19LGoucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlZSl7dmFyIGllPWVlO2lmKGVlIGluc3RhbmNlb2YgXyl7aWYoaWU9PW51bGwpdGhyb3ciTm9kZSBpcyBudWxsISI7aWYoIShpZS5vd25lciE9bnVsbCYmaWUub3duZXI9PXRoaXMpKXRocm93Ik93bmVyIGdyYXBoIGlzIGludmFsaWQhIjtpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJPd25lciBncmFwaCBtYW5hZ2VyIGlzIGludmFsaWQhIjtmb3IodmFyIG9lPWllLmVkZ2VzLnNsaWNlKCkscGUsYmU9b2UubGVuZ3RoLGFlPTA7YWU8YmU7YWUrKylwZT1vZVthZV0scGUuaXNJbnRlckdyYXBoP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShwZSk6cGUuc291cmNlLm93bmVyLnJlbW92ZShwZSk7dmFyIG5lPXRoaXMubm9kZXMuaW5kZXhPZihpZSk7aWYobmU9PS0xKXRocm93Ik5vZGUgbm90IGluIG93bmVyIG5vZGUgbGlzdCEiO3RoaXMubm9kZXMuc3BsaWNlKG5lLDEpfWVsc2UgaWYoZWUgaW5zdGFuY2VvZiBBKXt2YXIgcGU9ZWU7aWYocGU9PW51bGwpdGhyb3ciRWRnZSBpcyBudWxsISI7aWYoIShwZS5zb3VyY2UhPW51bGwmJnBlLnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEocGUuc291cmNlLm93bmVyIT1udWxsJiZwZS50YXJnZXQub3duZXIhPW51bGwmJnBlLnNvdXJjZS5vd25lcj09dGhpcyYmcGUudGFyZ2V0Lm93bmVyPT10aGlzKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBvd25lciBpcyBpbnZhbGlkISI7dmFyIHNlPXBlLnNvdXJjZS5lZGdlcy5pbmRleE9mKHBlKSxkZT1wZS50YXJnZXQuZWRnZXMuaW5kZXhPZihwZSk7aWYoIShzZT4tMSYmZGU+LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjtwZS5zb3VyY2UuZWRnZXMuc3BsaWNlKHNlLDEpLHBlLnRhcmdldCE9cGUuc291cmNlJiZwZS50YXJnZXQuZWRnZXMuc3BsaWNlKGRlLDEpO3ZhciBuZT1wZS5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5pbmRleE9mKHBlKTtpZihuZT09LTEpdGhyb3ciTm90IGluIG93bmVyJ3MgZWRnZSBsaXN0ISI7cGUuc291cmNlLm93bmVyLmdldEVkZ2VzKCkuc3BsaWNlKG5lLDEpfX0sai5wcm90b3R5cGUudXBkYXRlTGVmdFRvcD1mdW5jdGlvbigpe2Zvcih2YXIgZWU9Yi5NQVhfVkFMVUUsaWU9Yi5NQVhfVkFMVUUsb2UscGUsYmUsYWU9dGhpcy5nZXROb2RlcygpLG5lPWFlLmxlbmd0aCxzZT0wO3NlPG5lO3NlKyspe3ZhciBkZT1hZVtzZV07b2U9ZGUuZ2V0VG9wKCkscGU9ZGUuZ2V0TGVmdCgpLGVlPm9lJiYoZWU9b2UpLGllPnBlJiYoaWU9cGUpfXJldHVybiBlZT09Yi5NQVhfVkFMVUU/bnVsbDooYWVbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/YmU9YWVbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6YmU9dGhpcy5tYXJnaW4sdGhpcy5sZWZ0PWllLWJlLHRoaXMudG9wPWVlLWJlLG5ldyBSKHRoaXMubGVmdCx0aGlzLnRvcCkpfSxqLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oZWUpe2Zvcih2YXIgaWU9Yi5NQVhfVkFMVUUsb2U9LWIuTUFYX1ZBTFVFLHBlPWIuTUFYX1ZBTFVFLGJlPS1iLk1BWF9WQUxVRSxhZSxuZSxzZSxkZSxYLGdlPXRoaXMubm9kZXMsVz1nZS5sZW5ndGgseGU9MDt4ZTxXO3hlKyspe3ZhciBVPWdlW3hlXTtlZSYmVS5jaGlsZCE9bnVsbCYmVS51cGRhdGVCb3VuZHMoKSxhZT1VLmdldExlZnQoKSxuZT1VLmdldFJpZ2h0KCksc2U9VS5nZXRUb3AoKSxkZT1VLmdldEJvdHRvbSgpLGllPmFlJiYoaWU9YWUpLG9lPG5lJiYob2U9bmUpLHBlPnNlJiYocGU9c2UpLGJlPGRlJiYoYmU9ZGUpfXZhciBGZT1uZXcgUChpZSxwZSxvZS1pZSxiZS1wZSk7aWU9PWIuTUFYX1ZBTFVFJiYodGhpcy5sZWZ0PXRoaXMucGFyZW50LmdldExlZnQoKSx0aGlzLnJpZ2h0PXRoaXMucGFyZW50LmdldFJpZ2h0KCksdGhpcy50b3A9dGhpcy5wYXJlbnQuZ2V0VG9wKCksdGhpcy5ib3R0b209dGhpcy5wYXJlbnQuZ2V0Qm90dG9tKCkpLGdlWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP1g9Z2VbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6WD10aGlzLm1hcmdpbix0aGlzLmxlZnQ9RmUueC1YLHRoaXMucmlnaHQ9RmUueCtGZS53aWR0aCtYLHRoaXMudG9wPUZlLnktWCx0aGlzLmJvdHRvbT1GZS55K0ZlLmhlaWdodCtYfSxqLmNhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbihlZSl7Zm9yKHZhciBpZT1iLk1BWF9WQUxVRSxvZT0tYi5NQVhfVkFMVUUscGU9Yi5NQVhfVkFMVUUsYmU9LWIuTUFYX1ZBTFVFLGFlLG5lLHNlLGRlLFg9ZWUubGVuZ3RoLGdlPTA7Z2U8WDtnZSsrKXt2YXIgVz1lZVtnZV07YWU9Vy5nZXRMZWZ0KCksbmU9Vy5nZXRSaWdodCgpLHNlPVcuZ2V0VG9wKCksZGU9Vy5nZXRCb3R0b20oKSxpZT5hZSYmKGllPWFlKSxvZTxuZSYmKG9lPW5lKSxwZT5zZSYmKHBlPXNlKSxiZTxkZSYmKGJlPWRlKX12YXIgeGU9bmV3IFAoaWUscGUsb2UtaWUsYmUtcGUpO3JldHVybiB4ZX0sai5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT8xOnRoaXMucGFyZW50LmdldEluY2x1c2lvblRyZWVEZXB0aCgpfSxqLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1iLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxqLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2Zvcih2YXIgZWU9MCxpZT10aGlzLm5vZGVzLG9lPWllLmxlbmd0aCxwZT0wO3BlPG9lO3BlKyspe3ZhciBiZT1pZVtwZV07ZWUrPWJlLmNhbGNFc3RpbWF0ZWRTaXplKCl9cmV0dXJuIGVlPT0wP3RoaXMuZXN0aW1hdGVkU2l6ZT15LkVNUFRZX0NPTVBPVU5EX05PREVfU0laRTp0aGlzLmVzdGltYXRlZFNpemU9ZWUvTWF0aC5zcXJ0KHRoaXMubm9kZXMubGVuZ3RoKSx0aGlzLmVzdGltYXRlZFNpemV9LGoucHJvdG90eXBlLnVwZGF0ZUNvbm5lY3RlZD1mdW5jdGlvbigpe3ZhciBlZT10aGlzO2lmKHRoaXMubm9kZXMubGVuZ3RoPT0wKXt0aGlzLmlzQ29ubmVjdGVkPSEwO3JldHVybn12YXIgaWU9bmV3IEYsb2U9bmV3IFNldCxwZT10aGlzLm5vZGVzWzBdLGJlLGFlLG5lPXBlLndpdGhDaGlsZHJlbigpO2ZvcihuZS5mb3JFYWNoKGZ1bmN0aW9uKHhlKXtpZS5wdXNoKHhlKSxvZS5hZGQoeGUpfSk7aWUubGVuZ3RoIT09MDspe3BlPWllLnNoaWZ0KCksYmU9cGUuZ2V0RWRnZXMoKTtmb3IodmFyIHNlPWJlLmxlbmd0aCxkZT0wO2RlPHNlO2RlKyspe3ZhciBYPWJlW2RlXTtpZihhZT1YLmdldE90aGVyRW5kSW5HcmFwaChwZSx0aGlzKSxhZSE9bnVsbCYmIW9lLmhhcyhhZSkpe3ZhciBnZT1hZS53aXRoQ2hpbGRyZW4oKTtnZS5mb3JFYWNoKGZ1bmN0aW9uKHhlKXtpZS5wdXNoKHhlKSxvZS5hZGQoeGUpfSl9fX1pZih0aGlzLmlzQ29ubmVjdGVkPSExLG9lLnNpemU+PXRoaXMubm9kZXMubGVuZ3RoKXt2YXIgVz0wO29lLmZvckVhY2goZnVuY3Rpb24oeGUpe3hlLm93bmVyPT1lZSYmVysrfSksVz09dGhpcy5ub2Rlcy5sZW5ndGgmJih0aGlzLmlzQ29ubmVjdGVkPSEwKX19LHUuZXhwb3J0cz1qfSxmdW5jdGlvbih1LGQscCl7dmFyIHYsYj1wKDEpO2Z1bmN0aW9uIHkoVCl7dj1wKDUpLHRoaXMubGF5b3V0PVQsdGhpcy5ncmFwaHM9W10sdGhpcy5lZGdlcz1bXX15LnByb3RvdHlwZS5hZGRSb290PWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5sYXlvdXQubmV3R3JhcGgoKSxfPXRoaXMubGF5b3V0Lm5ld05vZGUobnVsbCksQT10aGlzLmFkZChULF8pO3JldHVybiB0aGlzLnNldFJvb3RHcmFwaChBKSx0aGlzLnJvb3RHcmFwaH0seS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFQsXyxBLFAsUil7aWYoQT09bnVsbCYmUD09bnVsbCYmUj09bnVsbCl7aWYoVD09bnVsbCl0aHJvdyJHcmFwaCBpcyBudWxsISI7aWYoXz09bnVsbCl0aHJvdyJQYXJlbnQgbm9kZSBpcyBudWxsISI7aWYodGhpcy5ncmFwaHMuaW5kZXhPZihUKT4tMSl0aHJvdyJHcmFwaCBhbHJlYWR5IGluIHRoaXMgZ3JhcGggbWdyISI7aWYodGhpcy5ncmFwaHMucHVzaChUKSxULnBhcmVudCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIHBhcmVudCEiO2lmKF8uY2hpbGQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBjaGlsZCEiO3JldHVybiBULnBhcmVudD1fLF8uY2hpbGQ9VCxUfWVsc2V7Uj1BLFA9XyxBPVQ7dmFyIEY9UC5nZXRPd25lcigpLGo9Ui5nZXRPd25lcigpO2lmKCEoRiE9bnVsbCYmRi5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciU291cmNlIG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKCEoaiE9bnVsbCYmai5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciVGFyZ2V0IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKEY9PWopcmV0dXJuIEEuaXNJbnRlckdyYXBoPSExLEYuYWRkKEEsUCxSKTtpZihBLmlzSW50ZXJHcmFwaD0hMCxBLnNvdXJjZT1QLEEudGFyZ2V0PVIsdGhpcy5lZGdlcy5pbmRleE9mKEEpPi0xKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBpbnRlci1ncmFwaCBlZGdlIGxpc3QhIjtpZih0aGlzLmVkZ2VzLnB1c2goQSksIShBLnNvdXJjZSE9bnVsbCYmQS50YXJnZXQhPW51bGwpKXRocm93IkVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoQS5zb3VyY2UuZWRnZXMuaW5kZXhPZihBKT09LTEmJkEudGFyZ2V0LmVkZ2VzLmluZGV4T2YoQSk9PS0xKSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gc291cmNlIGFuZC9vciB0YXJnZXQgaW5jaWRlbmN5IGxpc3QhIjtyZXR1cm4gQS5zb3VyY2UuZWRnZXMucHVzaChBKSxBLnRhcmdldC5lZGdlcy5wdXNoKEEpLEF9fSx5LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oVCl7aWYoVCBpbnN0YW5jZW9mIHYpe3ZhciBfPVQ7aWYoXy5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJHcmFwaCBub3QgaW4gdGhpcyBncmFwaCBtZ3IiO2lmKCEoXz09dGhpcy5yb290R3JhcGh8fF8ucGFyZW50IT1udWxsJiZfLnBhcmVudC5ncmFwaE1hbmFnZXI9PXRoaXMpKXRocm93IkludmFsaWQgcGFyZW50IG5vZGUhIjt2YXIgQT1bXTtBPUEuY29uY2F0KF8uZ2V0RWRnZXMoKSk7Zm9yKHZhciBQLFI9QS5sZW5ndGgsRj0wO0Y8UjtGKyspUD1BW0ZdLF8ucmVtb3ZlKFApO3ZhciBqPVtdO2o9ai5jb25jYXQoXy5nZXROb2RlcygpKTt2YXIgSztSPWoubGVuZ3RoO2Zvcih2YXIgRj0wO0Y8UjtGKyspSz1qW0ZdLF8ucmVtb3ZlKEspO189PXRoaXMucm9vdEdyYXBoJiZ0aGlzLnNldFJvb3RHcmFwaChudWxsKTt2YXIgZWU9dGhpcy5ncmFwaHMuaW5kZXhPZihfKTt0aGlzLmdyYXBocy5zcGxpY2UoZWUsMSksXy5wYXJlbnQ9bnVsbH1lbHNlIGlmKFQgaW5zdGFuY2VvZiBiKXtpZihQPVQsUD09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighUC5pc0ludGVyR3JhcGgpdGhyb3ciTm90IGFuIGludGVyLWdyYXBoIGVkZ2UhIjtpZighKFAuc291cmNlIT1udWxsJiZQLnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoUC5zb3VyY2UuZWRnZXMuaW5kZXhPZihQKSE9LTEmJlAudGFyZ2V0LmVkZ2VzLmluZGV4T2YoUCkhPS0xKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlISI7dmFyIGVlPVAuc291cmNlLmVkZ2VzLmluZGV4T2YoUCk7aWYoUC5zb3VyY2UuZWRnZXMuc3BsaWNlKGVlLDEpLGVlPVAudGFyZ2V0LmVkZ2VzLmluZGV4T2YoUCksUC50YXJnZXQuZWRnZXMuc3BsaWNlKGVlLDEpLCEoUC5zb3VyY2Uub3duZXIhPW51bGwmJlAuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpIT1udWxsKSl0aHJvdyJFZGdlIG93bmVyIGdyYXBoIG9yIG93bmVyIGdyYXBoIG1hbmFnZXIgaXMgbnVsbCEiO2lmKFAuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoUCk9PS0xKXRocm93Ik5vdCBpbiBvd25lciBncmFwaCBtYW5hZ2VyJ3MgZWRnZSBsaXN0ISI7dmFyIGVlPVAuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoUCk7UC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuc3BsaWNlKGVlLDEpfX0seS5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKCl7dGhpcy5yb290R3JhcGgudXBkYXRlQm91bmRzKCEwKX0seS5wcm90b3R5cGUuZ2V0R3JhcGhzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhzfSx5LnByb3RvdHlwZS5nZXRBbGxOb2Rlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsTm9kZXM9PW51bGwpe2Zvcih2YXIgVD1bXSxfPXRoaXMuZ2V0R3JhcGhzKCksQT1fLmxlbmd0aCxQPTA7UDxBO1ArKylUPVQuY29uY2F0KF9bUF0uZ2V0Tm9kZXMoKSk7dGhpcy5hbGxOb2Rlcz1UfXJldHVybiB0aGlzLmFsbE5vZGVzfSx5LnByb3RvdHlwZS5yZXNldEFsbE5vZGVzPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlcz1udWxsfSx5LnByb3RvdHlwZS5yZXNldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7dGhpcy5hbGxFZGdlcz1udWxsfSx5LnByb3RvdHlwZS5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1udWxsfSx5LnByb3RvdHlwZS5nZXRBbGxFZGdlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsRWRnZXM9PW51bGwpe3ZhciBUPVtdLF89dGhpcy5nZXRHcmFwaHMoKTtfLmxlbmd0aDtmb3IodmFyIEE9MDtBPF8ubGVuZ3RoO0ErKylUPVQuY29uY2F0KF9bQV0uZ2V0RWRnZXMoKSk7VD1ULmNvbmNhdCh0aGlzLmVkZ2VzKSx0aGlzLmFsbEVkZ2VzPVR9cmV0dXJuIHRoaXMuYWxsRWRnZXN9LHkucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb259LHkucHJvdG90eXBlLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKFQpe2lmKHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24hPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1UfSx5LnByb3RvdHlwZS5nZXRSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdEdyYXBofSx5LnByb3RvdHlwZS5zZXRSb290R3JhcGg9ZnVuY3Rpb24oVCl7aWYoVC5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJSb290IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO3RoaXMucm9vdEdyYXBoPVQsVC5wYXJlbnQ9PW51bGwmJihULnBhcmVudD10aGlzLmxheW91dC5uZXdOb2RlKCJSb290IG5vZGUiKSl9LHkucHJvdG90eXBlLmdldExheW91dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dH0seS5wcm90b3R5cGUuaXNPbmVBbmNlc3Rvck9mT3RoZXI9ZnVuY3Rpb24oVCxfKXtpZighKFQhPW51bGwmJl8hPW51bGwpKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKFQ9PV8pcmV0dXJuITA7dmFyIEE9VC5nZXRPd25lcigpLFA7ZG97aWYoUD1BLmdldFBhcmVudCgpLFA9PW51bGwpYnJlYWs7aWYoUD09XylyZXR1cm4hMDtpZihBPVAuZ2V0T3duZXIoKSxBPT1udWxsKWJyZWFrfXdoaWxlKCEwKTtBPV8uZ2V0T3duZXIoKTtkb3tpZihQPUEuZ2V0UGFyZW50KCksUD09bnVsbClicmVhaztpZihQPT1UKXJldHVybiEwO2lmKEE9UC5nZXRPd25lcigpLEE9PW51bGwpYnJlYWt9d2hpbGUoITApO3JldHVybiExfSx5LnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBULF8sQSxQLFIsRj10aGlzLmdldEFsbEVkZ2VzKCksaj1GLmxlbmd0aCxLPTA7SzxqO0srKyl7aWYoVD1GW0tdLF89VC5zb3VyY2UsQT1ULnRhcmdldCxULmxjYT1udWxsLFQuc291cmNlSW5MY2E9XyxULnRhcmdldEluTGNhPUEsXz09QSl7VC5sY2E9Xy5nZXRPd25lcigpO2NvbnRpbnVlfWZvcihQPV8uZ2V0T3duZXIoKTtULmxjYT09bnVsbDspe2ZvcihULnRhcmdldEluTGNhPUEsUj1BLmdldE93bmVyKCk7VC5sY2E9PW51bGw7KXtpZihSPT1QKXtULmxjYT1SO2JyZWFrfWlmKFI9PXRoaXMucm9vdEdyYXBoKWJyZWFrO2lmKFQubGNhIT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO1QudGFyZ2V0SW5MY2E9Ui5nZXRQYXJlbnQoKSxSPVQudGFyZ2V0SW5MY2EuZ2V0T3duZXIoKX1pZihQPT10aGlzLnJvb3RHcmFwaClicmVhaztULmxjYT09bnVsbCYmKFQuc291cmNlSW5MY2E9UC5nZXRQYXJlbnQoKSxQPVQuc291cmNlSW5MY2EuZ2V0T3duZXIoKSl9aWYoVC5sY2E9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCJ9fSx5LnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3I9ZnVuY3Rpb24oVCxfKXtpZihUPT1fKXJldHVybiBULmdldE93bmVyKCk7dmFyIEE9VC5nZXRPd25lcigpO2Rve2lmKEE9PW51bGwpYnJlYWs7dmFyIFA9Xy5nZXRPd25lcigpO2Rve2lmKFA9PW51bGwpYnJlYWs7aWYoUD09QSlyZXR1cm4gUDtQPVAuZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7QT1BLmdldFBhcmVudCgpLmdldE93bmVyKCl9d2hpbGUoITApO3JldHVybiBBfSx5LnByb3RvdHlwZS5jYWxjSW5jbHVzaW9uVHJlZURlcHRocz1mdW5jdGlvbihULF8pe1Q9PW51bGwmJl89PW51bGwmJihUPXRoaXMucm9vdEdyYXBoLF89MSk7Zm9yKHZhciBBLFA9VC5nZXROb2RlcygpLFI9UC5sZW5ndGgsRj0wO0Y8UjtGKyspQT1QW0ZdLEEuaW5jbHVzaW9uVHJlZURlcHRoPV8sQS5jaGlsZCE9bnVsbCYmdGhpcy5jYWxjSW5jbHVzaW9uVHJlZURlcHRocyhBLmNoaWxkLF8rMSl9LHkucHJvdG90eXBlLmluY2x1ZGVzSW52YWxpZEVkZ2U9ZnVuY3Rpb24oKXtmb3IodmFyIFQsXz10aGlzLmVkZ2VzLmxlbmd0aCxBPTA7QTxfO0ErKylpZihUPXRoaXMuZWRnZXNbQV0sdGhpcy5pc09uZUFuY2VzdG9yT2ZPdGhlcihULnNvdXJjZSxULnRhcmdldCkpcmV0dXJuITA7cmV0dXJuITF9LHUuZXhwb3J0cz15fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgwKTtmdW5jdGlvbiBiKCl7fWZvcih2YXIgeSBpbiB2KWJbeV09dlt5XTtiLk1BWF9JVEVSQVRJT05TPTI1MDAsYi5ERUZBVUxUX0VER0VfTEVOR1RIPTUwLGIuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9LjQ1LGIuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9NDUwMCxiLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD0uNCxiLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD0xLGIuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0zLjgsYi5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTEuNSxiLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OPSEwLGIuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OPSEwLGIuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD0uMyxiLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1I9LjMzLGIuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUPTFlMyxiLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVD01ZTMsYi5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUw9MTAwLGIuTUFYX05PREVfRElTUExBQ0VNRU5UPWIuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKjMsYi5NSU5fUkVQVUxTSU9OX0RJU1Q9Yi5ERUZBVUxUX0VER0VfTEVOR1RILzEwLGIuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPTEwMCxiLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9LjEsYi5NSU5fRURHRV9MRU5HVEg9MSxiLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPTEwLHUuZXhwb3J0cz1ifSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgxMik7ZnVuY3Rpb24gYigpe31iLmNhbGNTZXBhcmF0aW9uQW1vdW50PWZ1bmN0aW9uKHksVCxfLEEpe2lmKCF5LmludGVyc2VjdHMoVCkpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dmFyIFA9bmV3IEFycmF5KDIpO3RoaXMuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXMoeSxULFApLF9bMF09TWF0aC5taW4oeS5nZXRSaWdodCgpLFQuZ2V0UmlnaHQoKSktTWF0aC5tYXgoeS54LFQueCksX1sxXT1NYXRoLm1pbih5LmdldEJvdHRvbSgpLFQuZ2V0Qm90dG9tKCkpLU1hdGgubWF4KHkueSxULnkpLHkuZ2V0WCgpPD1ULmdldFgoKSYmeS5nZXRSaWdodCgpPj1ULmdldFJpZ2h0KCk/X1swXSs9TWF0aC5taW4oVC5nZXRYKCkteS5nZXRYKCkseS5nZXRSaWdodCgpLVQuZ2V0UmlnaHQoKSk6VC5nZXRYKCk8PXkuZ2V0WCgpJiZULmdldFJpZ2h0KCk+PXkuZ2V0UmlnaHQoKSYmKF9bMF0rPU1hdGgubWluKHkuZ2V0WCgpLVQuZ2V0WCgpLFQuZ2V0UmlnaHQoKS15LmdldFJpZ2h0KCkpKSx5LmdldFkoKTw9VC5nZXRZKCkmJnkuZ2V0Qm90dG9tKCk+PVQuZ2V0Qm90dG9tKCk/X1sxXSs9TWF0aC5taW4oVC5nZXRZKCkteS5nZXRZKCkseS5nZXRCb3R0b20oKS1ULmdldEJvdHRvbSgpKTpULmdldFkoKTw9eS5nZXRZKCkmJlQuZ2V0Qm90dG9tKCk+PXkuZ2V0Qm90dG9tKCkmJihfWzFdKz1NYXRoLm1pbih5LmdldFkoKS1ULmdldFkoKSxULmdldEJvdHRvbSgpLXkuZ2V0Qm90dG9tKCkpKTt2YXIgUj1NYXRoLmFicygoVC5nZXRDZW50ZXJZKCkteS5nZXRDZW50ZXJZKCkpLyhULmdldENlbnRlclgoKS15LmdldENlbnRlclgoKSkpO1QuZ2V0Q2VudGVyWSgpPT09eS5nZXRDZW50ZXJZKCkmJlQuZ2V0Q2VudGVyWCgpPT09eS5nZXRDZW50ZXJYKCkmJihSPTEpO3ZhciBGPVIqX1swXSxqPV9bMV0vUjtfWzBdPGo/aj1fWzBdOkY9X1sxXSxfWzBdPS0xKlBbMF0qKGovMitBKSxfWzFdPS0xKlBbMV0qKEYvMitBKX0sYi5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2Rlcz1mdW5jdGlvbih5LFQsXyl7eS5nZXRDZW50ZXJYKCk8VC5nZXRDZW50ZXJYKCk/X1swXT0tMTpfWzBdPTEseS5nZXRDZW50ZXJZKCk8VC5nZXRDZW50ZXJZKCk/X1sxXT0tMTpfWzFdPTF9LGIuZ2V0SW50ZXJzZWN0aW9uMj1mdW5jdGlvbih5LFQsXyl7dmFyIEE9eS5nZXRDZW50ZXJYKCksUD15LmdldENlbnRlclkoKSxSPVQuZ2V0Q2VudGVyWCgpLEY9VC5nZXRDZW50ZXJZKCk7aWYoeS5pbnRlcnNlY3RzKFQpKXJldHVybiBfWzBdPUEsX1sxXT1QLF9bMl09UixfWzNdPUYsITA7dmFyIGo9eS5nZXRYKCksSz15LmdldFkoKSxlZT15LmdldFJpZ2h0KCksaWU9eS5nZXRYKCksb2U9eS5nZXRCb3R0b20oKSxwZT15LmdldFJpZ2h0KCksYmU9eS5nZXRXaWR0aEhhbGYoKSxhZT15LmdldEhlaWdodEhhbGYoKSxuZT1ULmdldFgoKSxzZT1ULmdldFkoKSxkZT1ULmdldFJpZ2h0KCksWD1ULmdldFgoKSxnZT1ULmdldEJvdHRvbSgpLFc9VC5nZXRSaWdodCgpLHhlPVQuZ2V0V2lkdGhIYWxmKCksVT1ULmdldEhlaWdodEhhbGYoKSxGZT0hMSxQZT0hMTtpZihBPT09Uil7aWYoUD5GKXJldHVybiBfWzBdPUEsX1sxXT1LLF9bMl09UixfWzNdPWdlLCExO2lmKFA8RilyZXR1cm4gX1swXT1BLF9bMV09b2UsX1syXT1SLF9bM109c2UsITF9ZWxzZSBpZihQPT09Ril7aWYoQT5SKXJldHVybiBfWzBdPWosX1sxXT1QLF9bMl09ZGUsX1szXT1GLCExO2lmKEE8UilyZXR1cm4gX1swXT1lZSxfWzFdPVAsX1syXT1uZSxfWzNdPUYsITF9ZWxzZXt2YXIgamU9eS5oZWlnaHQveS53aWR0aCxJZT1ULmhlaWdodC9ULndpZHRoLFNlPShGLVApLyhSLUEpLENlPXZvaWQgMCxrZT12b2lkIDAsS2U9dm9pZCAwLEZ0PXZvaWQgMCxOZT12b2lkIDAsZ249dm9pZCAwO2lmKC1qZT09PVNlP0E+Uj8oX1swXT1pZSxfWzFdPW9lLEZlPSEwKTooX1swXT1lZSxfWzFdPUssRmU9ITApOmplPT09U2UmJihBPlI/KF9bMF09aixfWzFdPUssRmU9ITApOihfWzBdPXBlLF9bMV09b2UsRmU9ITApKSwtSWU9PT1TZT9SPkE/KF9bMl09WCxfWzNdPWdlLFBlPSEwKTooX1syXT1kZSxfWzNdPXNlLFBlPSEwKTpJZT09PVNlJiYoUj5BPyhfWzJdPW5lLF9bM109c2UsUGU9ITApOihfWzJdPVcsX1szXT1nZSxQZT0hMCkpLEZlJiZQZSlyZXR1cm4hMTtpZihBPlI/UD5GPyhDZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKGplLFNlLDQpLGtlPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oSWUsU2UsMikpOihDZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1qZSxTZSwzKSxrZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JZSxTZSwxKSk6UD5GPyhDZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1qZSxTZSwxKSxrZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JZSxTZSwzKSk6KENlPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oamUsU2UsMiksa2U9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihJZSxTZSw0KSksIUZlKXN3aXRjaChDZSl7Y2FzZSAxOkZ0PUssS2U9QSstYWUvU2UsX1swXT1LZSxfWzFdPUZ0O2JyZWFrO2Nhc2UgMjpLZT1wZSxGdD1QK2JlKlNlLF9bMF09S2UsX1sxXT1GdDticmVhaztjYXNlIDM6RnQ9b2UsS2U9QSthZS9TZSxfWzBdPUtlLF9bMV09RnQ7YnJlYWs7Y2FzZSA0OktlPWllLEZ0PVArLWJlKlNlLF9bMF09S2UsX1sxXT1GdDticmVha31pZighUGUpc3dpdGNoKGtlKXtjYXNlIDE6Z249c2UsTmU9UistVS9TZSxfWzJdPU5lLF9bM109Z247YnJlYWs7Y2FzZSAyOk5lPVcsZ249Rit4ZSpTZSxfWzJdPU5lLF9bM109Z247YnJlYWs7Y2FzZSAzOmduPWdlLE5lPVIrVS9TZSxfWzJdPU5lLF9bM109Z247YnJlYWs7Y2FzZSA0Ok5lPVgsZ249RisteGUqU2UsX1syXT1OZSxfWzNdPWduO2JyZWFrfX1yZXR1cm4hMX0sYi5nZXRDYXJkaW5hbERpcmVjdGlvbj1mdW5jdGlvbih5LFQsXyl7cmV0dXJuIHk+VD9fOjErXyU0fSxiLmdldEludGVyc2VjdGlvbj1mdW5jdGlvbih5LFQsXyxBKXtpZihBPT1udWxsKXJldHVybiB0aGlzLmdldEludGVyc2VjdGlvbjIoeSxULF8pO3ZhciBQPXkueCxSPXkueSxGPVQueCxqPVQueSxLPV8ueCxlZT1fLnksaWU9QS54LG9lPUEueSxwZT12b2lkIDAsYmU9dm9pZCAwLGFlPXZvaWQgMCxuZT12b2lkIDAsc2U9dm9pZCAwLGRlPXZvaWQgMCxYPXZvaWQgMCxnZT12b2lkIDAsVz12b2lkIDA7cmV0dXJuIGFlPWotUixzZT1QLUYsWD1GKlItUCpqLG5lPW9lLWVlLGRlPUstaWUsZ2U9aWUqZWUtSypvZSxXPWFlKmRlLW5lKnNlLFc9PT0wP251bGw6KHBlPShzZSpnZS1kZSpYKS9XLGJlPShuZSpYLWFlKmdlKS9XLG5ldyB2KHBlLGJlKSl9LGIuYW5nbGVPZlZlY3Rvcj1mdW5jdGlvbih5LFQsXyxBKXt2YXIgUD12b2lkIDA7cmV0dXJuIHkhPT1fPyhQPU1hdGguYXRhbigoQS1UKS8oXy15KSksXzx5P1ArPU1hdGguUEk6QTxUJiYoUCs9dGhpcy5UV09fUEkpKTpBPFQ/UD10aGlzLk9ORV9BTkRfSEFMRl9QSTpQPXRoaXMuSEFMRl9QSSxQfSxiLmRvSW50ZXJzZWN0PWZ1bmN0aW9uKHksVCxfLEEpe3ZhciBQPXkueCxSPXkueSxGPVQueCxqPVQueSxLPV8ueCxlZT1fLnksaWU9QS54LG9lPUEueSxwZT0oRi1QKSoob2UtZWUpLShpZS1LKSooai1SKTtpZihwZT09PTApcmV0dXJuITE7dmFyIGJlPSgob2UtZWUpKihpZS1QKSsoSy1pZSkqKG9lLVIpKS9wZSxhZT0oKFItaikqKGllLVApKyhGLVApKihvZS1SKSkvcGU7cmV0dXJuIDA8YmUmJmJlPDEmJjA8YWUmJmFlPDF9LGIuSEFMRl9QST0uNSpNYXRoLlBJLGIuT05FX0FORF9IQUxGX1BJPTEuNSpNYXRoLlBJLGIuVFdPX1BJPTIqTWF0aC5QSSxiLlRIUkVFX1BJPTMqTWF0aC5QSSx1LmV4cG9ydHM9Yn0sZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoKXt9di5zaWduPWZ1bmN0aW9uKGIpe3JldHVybiBiPjA/MTpiPDA/LTE6MH0sdi5mbG9vcj1mdW5jdGlvbihiKXtyZXR1cm4gYjwwP01hdGguY2VpbChiKTpNYXRoLmZsb29yKGIpfSx2LmNlaWw9ZnVuY3Rpb24oYil7cmV0dXJuIGI8MD9NYXRoLmZsb29yKGIpOk1hdGguY2VpbChiKX0sdS5leHBvcnRzPXZ9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KCl7fXYuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsdi5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsdS5leHBvcnRzPXZ9LGZ1bmN0aW9uKHUsZCxwKXt2YXIgdj1mdW5jdGlvbigpe2Z1bmN0aW9uIFAoUixGKXtmb3IodmFyIGo9MDtqPEYubGVuZ3RoO2orKyl7dmFyIEs9RltqXTtLLmVudW1lcmFibGU9Sy5lbnVtZXJhYmxlfHwhMSxLLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gSyYmKEsud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLEsua2V5LEspfX1yZXR1cm4gZnVuY3Rpb24oUixGLGope3JldHVybiBGJiZQKFIucHJvdG90eXBlLEYpLGomJlAoUixqKSxSfX0oKTtmdW5jdGlvbiBiKFAsUil7aWYoIShQIGluc3RhbmNlb2YgUikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIHk9ZnVuY3Rpb24oUil7cmV0dXJue3ZhbHVlOlIsbmV4dDpudWxsLHByZXY6bnVsbH19LFQ9ZnVuY3Rpb24oUixGLGosSyl7cmV0dXJuIFIhPT1udWxsP1IubmV4dD1GOksuaGVhZD1GLGohPT1udWxsP2oucHJldj1GOksudGFpbD1GLEYucHJldj1SLEYubmV4dD1qLEsubGVuZ3RoKyssRn0sXz1mdW5jdGlvbihSLEYpe3ZhciBqPVIucHJldixLPVIubmV4dDtyZXR1cm4gaiE9PW51bGw/ai5uZXh0PUs6Ri5oZWFkPUssSyE9PW51bGw/Sy5wcmV2PWo6Ri50YWlsPWosUi5wcmV2PVIubmV4dD1udWxsLEYubGVuZ3RoLS0sUn0sQT1mdW5jdGlvbigpe2Z1bmN0aW9uIFAoUil7dmFyIEY9dGhpcztiKHRoaXMsUCksdGhpcy5sZW5ndGg9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCxSIT1udWxsJiZSLmZvckVhY2goZnVuY3Rpb24oail7cmV0dXJuIEYucHVzaChqKX0pfXJldHVybiB2KFAsW3trZXk6InNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofX0se2tleToiaW5zZXJ0QmVmb3JlIix2YWx1ZTpmdW5jdGlvbihGLGope3JldHVybiBUKGoucHJldix5KEYpLGosdGhpcyl9fSx7a2V5OiJpbnNlcnRBZnRlciIsdmFsdWU6ZnVuY3Rpb24oRixqKXtyZXR1cm4gVChqLHkoRiksai5uZXh0LHRoaXMpfX0se2tleToiaW5zZXJ0Tm9kZUJlZm9yZSIsdmFsdWU6ZnVuY3Rpb24oRixqKXtyZXR1cm4gVChqLnByZXYsRixqLHRoaXMpfX0se2tleToiaW5zZXJ0Tm9kZUFmdGVyIix2YWx1ZTpmdW5jdGlvbihGLGope3JldHVybiBUKGosRixqLm5leHQsdGhpcyl9fSx7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbihGKXtyZXR1cm4gVCh0aGlzLnRhaWwseShGKSxudWxsLHRoaXMpfX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oRil7cmV0dXJuIFQobnVsbCx5KEYpLHRoaXMuaGVhZCx0aGlzKX19LHtrZXk6InJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oRil7cmV0dXJuIF8oRix0aGlzKX19LHtrZXk6InBvcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gXyh0aGlzLnRhaWwsdGhpcykudmFsdWV9fSx7a2V5OiJwb3BOb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMudGFpbCx0aGlzKX19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMuaGVhZCx0aGlzKS52YWx1ZX19LHtrZXk6InNoaWZ0Tm9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gXyh0aGlzLmhlYWQsdGhpcyl9fSx7a2V5OiJnZXRfb2JqZWN0X2F0Iix2YWx1ZTpmdW5jdGlvbihGKXtpZihGPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIGo9MSxLPXRoaXMuaGVhZDtqPEY7KUs9Sy5uZXh0LGorKztyZXR1cm4gSy52YWx1ZX19fSx7a2V5OiJzZXRfb2JqZWN0X2F0Iix2YWx1ZTpmdW5jdGlvbihGLGope2lmKEY8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgSz0xLGVlPXRoaXMuaGVhZDtLPEY7KWVlPWVlLm5leHQsSysrO2VlLnZhbHVlPWp9fX1dKSxQfSgpO3UuZXhwb3J0cz1BfSxmdW5jdGlvbih1LGQscCl7ZnVuY3Rpb24gdihiLHksVCl7dGhpcy54PW51bGwsdGhpcy55PW51bGwsYj09bnVsbCYmeT09bnVsbCYmVD09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOnR5cGVvZiBiPT0ibnVtYmVyIiYmdHlwZW9mIHk9PSJudW1iZXIiJiZUPT1udWxsPyh0aGlzLng9Yix0aGlzLnk9eSk6Yi5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZ5PT1udWxsJiZUPT1udWxsJiYoVD1iLHRoaXMueD1ULngsdGhpcy55PVQueSl9di5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LHYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSx2LnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgdih0aGlzLngsdGhpcy55KX0sdi5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oYix5LFQpe2IuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmeT09bnVsbCYmVD09bnVsbD8oVD1iLHRoaXMuc2V0TG9jYXRpb24oVC54LFQueSkpOnR5cGVvZiBiPT0ibnVtYmVyIiYmdHlwZW9mIHk9PSJudW1iZXIiJiZUPT1udWxsJiYocGFyc2VJbnQoYik9PWImJnBhcnNlSW50KHkpPT15P3RoaXMubW92ZShiLHkpOih0aGlzLng9TWF0aC5mbG9vcihiKy41KSx0aGlzLnk9TWF0aC5mbG9vcih5Ky41KSkpfSx2LnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGIseSl7dGhpcy54PWIsdGhpcy55PXl9LHYucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihiLHkpe3RoaXMueCs9Yix0aGlzLnkrPXl9LHYucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihiKXtpZihiLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCIpe3ZhciB5PWI7cmV0dXJuIHRoaXMueD09eS54JiZ0aGlzLnk9PXkueX1yZXR1cm4gdGhpcz09Yn0sdi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHYoKS5jb25zdHJ1Y3Rvci5uYW1lKyJbeD0iK3RoaXMueCsiLHk9Iit0aGlzLnkrIl0ifSx1LmV4cG9ydHM9dn0sZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoYix5LFQsXyl7dGhpcy54PTAsdGhpcy55PTAsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsYiE9bnVsbCYmeSE9bnVsbCYmVCE9bnVsbCYmXyE9bnVsbCYmKHRoaXMueD1iLHRoaXMueT15LHRoaXMud2lkdGg9VCx0aGlzLmhlaWdodD1fKX12LnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sdi5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihiKXt0aGlzLng9Yn0sdi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LHYucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oYil7dGhpcy55PWJ9LHYucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LHYucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGIpe3RoaXMud2lkdGg9Yn0sdi5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSx2LnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oYil7dGhpcy5oZWlnaHQ9Yn0sdi5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGh9LHYucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHR9LHYucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oYil7cmV0dXJuISh0aGlzLmdldFJpZ2h0KCk8Yi54fHx0aGlzLmdldEJvdHRvbSgpPGIueXx8Yi5nZXRSaWdodCgpPHRoaXMueHx8Yi5nZXRCb3R0b20oKTx0aGlzLnkpfSx2LnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRoLzJ9LHYucHJvdG90eXBlLmdldE1pblg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCl9LHYucHJvdG90eXBlLmdldE1heFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkrdGhpcy53aWR0aH0sdi5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHQvMn0sdi5wcm90b3R5cGUuZ2V0TWluWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKX0sdi5wcm90b3R5cGUuZ2V0TWF4WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKSt0aGlzLmhlaWdodH0sdi5wcm90b3R5cGUuZ2V0V2lkdGhIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGgvMn0sdi5wcm90b3R5cGUuZ2V0SGVpZ2h0SGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodC8yfSx1LmV4cG9ydHM9dn0sZnVuY3Rpb24odSxkLHApe3ZhciB2PXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKHkpe3JldHVybiB0eXBlb2YgeX06ZnVuY3Rpb24oeSl7cmV0dXJuIHkmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnkuY29uc3RydWN0b3I9PT1TeW1ib2wmJnkhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB5fTtmdW5jdGlvbiBiKCl7fWIubGFzdElEPTAsYi5jcmVhdGVJRD1mdW5jdGlvbih5KXtyZXR1cm4gYi5pc1ByaW1pdGl2ZSh5KT95Oih5LnVuaXF1ZUlEIT1udWxsfHwoeS51bmlxdWVJRD1iLmdldFN0cmluZygpLGIubGFzdElEKyspLHkudW5pcXVlSUQpfSxiLmdldFN0cmluZz1mdW5jdGlvbih5KXtyZXR1cm4geT09bnVsbCYmKHk9Yi5sYXN0SUQpLCJPYmplY3QjIit5fSxiLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKHkpe3ZhciBUPXR5cGVvZiB5PiJ1Ij8idW5kZWZpbmVkIjp2KHkpO3JldHVybiB5PT1udWxsfHxUIT0ib2JqZWN0IiYmVCE9ImZ1bmN0aW9uIn0sdS5leHBvcnRzPWJ9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KEspe2lmKEFycmF5LmlzQXJyYXkoSykpe2Zvcih2YXIgZWU9MCxpZT1BcnJheShLLmxlbmd0aCk7ZWU8Sy5sZW5ndGg7ZWUrKylpZVtlZV09S1tlZV07cmV0dXJuIGllfWVsc2UgcmV0dXJuIEFycmF5LmZyb20oSyl9dmFyIGI9cCgwKSx5PXAoNiksVD1wKDMpLF89cCgxKSxBPXAoNSksUD1wKDQpLFI9cCgxNyksRj1wKDI3KTtmdW5jdGlvbiBqKEspe0YuY2FsbCh0aGlzKSx0aGlzLmxheW91dFF1YWxpdHk9Yi5RVUFMSVRZLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1iLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLmluY3JlbWVudGFsPWIuREVGQVVMVF9JTkNSRU1FTlRBTCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1iLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWIuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyx0aGlzLmVkZ2VUb0R1bW15Tm9kZXM9bmV3IE1hcCx0aGlzLmdyYXBoTWFuYWdlcj1uZXcgeSh0aGlzKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy5pc1N1YkxheW91dD0hMSx0aGlzLmlzUmVtb3RlVXNlPSExLEshPW51bGwmJih0aGlzLmlzUmVtb3RlVXNlPUspfWouUkFORE9NX1NFRUQ9MSxqLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEYucHJvdG90eXBlKSxqLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LGoucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCl9LGoucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCl9LGoucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCl9LGoucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBLPW5ldyB5KHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1LLEt9LGoucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgQShudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLEspfSxqLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgVCh0aGlzLmdyYXBoTWFuYWdlcixLKX0sai5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IF8obnVsbCxudWxsLEspfSxqLnByb3RvdHlwZS5jaGVja0xheW91dFN1Y2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPT1udWxsfHx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTB8fHRoaXMuZ3JhcGhNYW5hZ2VyLmluY2x1ZGVzSW52YWxpZEVkZ2UoKX0sai5wcm90b3R5cGUucnVuTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMudGlsaW5nUHJlTGF5b3V0JiZ0aGlzLnRpbGluZ1ByZUxheW91dCgpLHRoaXMuaW5pdFBhcmFtZXRlcnMoKTt2YXIgSztyZXR1cm4gdGhpcy5jaGVja0xheW91dFN1Y2Nlc3MoKT9LPSExOks9dGhpcy5sYXlvdXQoKSxiLkFOSU1BVEU9PT0iZHVyaW5nIj8hMTooSyYmKHRoaXMuaXNTdWJMYXlvdXR8fHRoaXMuZG9Qb3N0TGF5b3V0KCkpLHRoaXMudGlsaW5nUG9zdExheW91dCYmdGhpcy50aWxpbmdQb3N0TGF5b3V0KCksdGhpcy5pc0xheW91dEZpbmlzaGVkPSEwLEspfSxqLnByb3RvdHlwZS5kb1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmluY3JlbWVudGFsfHx0aGlzLnRyYW5zZm9ybSgpLHRoaXMudXBkYXRlKCl9LGoucHJvdG90eXBlLnVwZGF0ZTI9ZnVuY3Rpb24oKXtpZih0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQmJih0aGlzLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksIXRoaXMuaXNSZW1vdGVVc2Upe2Zvcih2YXIgSz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpLGVlPTA7ZWU8Sy5sZW5ndGg7ZWUrKylLW2VlXTtmb3IodmFyIGllPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLGVlPTA7ZWU8aWUubGVuZ3RoO2VlKyspaWVbZWVdO3RoaXMudXBkYXRlKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSl9fSxqLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oSyl7aWYoSz09bnVsbCl0aGlzLnVwZGF0ZTIoKTtlbHNlIGlmKEsgaW5zdGFuY2VvZiBUKXt2YXIgZWU9SztpZihlZS5nZXRDaGlsZCgpIT1udWxsKWZvcih2YXIgaWU9ZWUuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLG9lPTA7b2U8aWUubGVuZ3RoO29lKyspdXBkYXRlKGllW29lXSk7aWYoZWUudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgcGU9ZWUudkdyYXBoT2JqZWN0O3BlLnVwZGF0ZShlZSl9fWVsc2UgaWYoSyBpbnN0YW5jZW9mIF8pe3ZhciBiZT1LO2lmKGJlLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIGFlPWJlLnZHcmFwaE9iamVjdDthZS51cGRhdGUoYmUpfX1lbHNlIGlmKEsgaW5zdGFuY2VvZiBBKXt2YXIgbmU9SztpZihuZS52R3JhcGhPYmplY3QhPW51bGwpe3ZhciBzZT1uZS52R3JhcGhPYmplY3Q7c2UudXBkYXRlKG5lKX19fSxqLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3RoaXMuaXNTdWJMYXlvdXR8fCh0aGlzLmxheW91dFF1YWxpdHk9Yi5RVUFMSVRZLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1iLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuaW5jcmVtZW50YWw9Yi5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1iLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWIuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJih0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PSExKX0sai5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKEspe2lmKEs9PW51bGwpdGhpcy50cmFuc2Zvcm0obmV3IFAoMCwwKSk7ZWxzZXt2YXIgZWU9bmV3IFIsaWU9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLnVwZGF0ZUxlZnRUb3AoKTtpZihpZSE9bnVsbCl7ZWUuc2V0V29ybGRPcmdYKEsueCksZWUuc2V0V29ybGRPcmdZKEsueSksZWUuc2V0RGV2aWNlT3JnWChpZS54KSxlZS5zZXREZXZpY2VPcmdZKGllLnkpO2Zvcih2YXIgb2U9dGhpcy5nZXRBbGxOb2RlcygpLHBlLGJlPTA7YmU8b2UubGVuZ3RoO2JlKyspcGU9b2VbYmVdLHBlLnRyYW5zZm9ybShlZSl9fX0sai5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhbmRvbWx5PWZ1bmN0aW9uKEspe2lmKEs9PW51bGwpdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkodGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkpLHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpLnVwZGF0ZUJvdW5kcyghMCk7ZWxzZSBmb3IodmFyIGVlLGllLG9lPUsuZ2V0Tm9kZXMoKSxwZT0wO3BlPG9lLmxlbmd0aDtwZSsrKWVlPW9lW3BlXSxpZT1lZS5nZXRDaGlsZCgpLGllPT1udWxsfHxpZS5nZXROb2RlcygpLmxlbmd0aD09MD9lZS5zY2F0dGVyKCk6KHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KGllKSxlZS51cGRhdGVCb3VuZHMoKSl9LGoucHJvdG90eXBlLmdldEZsYXRGb3Jlc3Q9ZnVuY3Rpb24oKXtmb3IodmFyIEs9W10sZWU9ITAsaWU9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCksb2U9ITAscGU9MDtwZTxpZS5sZW5ndGg7cGUrKylpZVtwZV0uZ2V0Q2hpbGQoKSE9bnVsbCYmKG9lPSExKTtpZighb2UpcmV0dXJuIEs7dmFyIGJlPW5ldyBTZXQsYWU9W10sbmU9bmV3IE1hcCxzZT1bXTtmb3Ioc2U9c2UuY29uY2F0KGllKTtzZS5sZW5ndGg+MCYmZWU7KXtmb3IoYWUucHVzaChzZVswXSk7YWUubGVuZ3RoPjAmJmVlOyl7dmFyIGRlPWFlWzBdO2FlLnNwbGljZSgwLDEpLGJlLmFkZChkZSk7Zm9yKHZhciBYPWRlLmdldEVkZ2VzKCkscGU9MDtwZTxYLmxlbmd0aDtwZSsrKXt2YXIgZ2U9WFtwZV0uZ2V0T3RoZXJFbmQoZGUpO2lmKG5lLmdldChkZSkhPWdlKWlmKCFiZS5oYXMoZ2UpKWFlLnB1c2goZ2UpLG5lLnNldChnZSxkZSk7ZWxzZXtlZT0hMTticmVha319fWlmKCFlZSlLPVtdO2Vsc2V7dmFyIFc9W10uY29uY2F0KHYoYmUpKTtLLnB1c2goVyk7Zm9yKHZhciBwZT0wO3BlPFcubGVuZ3RoO3BlKyspe3ZhciB4ZT1XW3BlXSxVPXNlLmluZGV4T2YoeGUpO1U+LTEmJnNlLnNwbGljZShVLDEpfWJlPW5ldyBTZXQsbmU9bmV3IE1hcH19cmV0dXJuIEt9LGoucHJvdG90eXBlLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzPWZ1bmN0aW9uKEspe2Zvcih2YXIgZWU9W10saWU9Sy5zb3VyY2Usb2U9dGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yKEsuc291cmNlLEsudGFyZ2V0KSxwZT0wO3BlPEsuYmVuZHBvaW50cy5sZW5ndGg7cGUrKyl7dmFyIGJlPXRoaXMubmV3Tm9kZShudWxsKTtiZS5zZXRSZWN0KG5ldyBQb2ludCgwLDApLG5ldyBEaW1lbnNpb24oMSwxKSksb2UuYWRkKGJlKTt2YXIgYWU9dGhpcy5uZXdFZGdlKG51bGwpO3RoaXMuZ3JhcGhNYW5hZ2VyLmFkZChhZSxpZSxiZSksZWUuYWRkKGJlKSxpZT1iZX12YXIgYWU9dGhpcy5uZXdFZGdlKG51bGwpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5hZGQoYWUsaWUsSy50YXJnZXQpLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5zZXQoSyxlZSksSy5pc0ludGVyR3JhcGgoKT90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoSyk6b2UucmVtb3ZlKEspLGVlfSxqLnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXM9ZnVuY3Rpb24oKXt2YXIgSz1bXTtLPUsuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpLEs9W10uY29uY2F0KHYodGhpcy5lZGdlVG9EdW1teU5vZGVzLmtleXMoKSkpLmNvbmNhdChLKTtmb3IodmFyIGVlPTA7ZWU8Sy5sZW5ndGg7ZWUrKyl7dmFyIGllPUtbZWVdO2lmKGllLmJlbmRwb2ludHMubGVuZ3RoPjApe2Zvcih2YXIgb2U9dGhpcy5lZGdlVG9EdW1teU5vZGVzLmdldChpZSkscGU9MDtwZTxvZS5sZW5ndGg7cGUrKyl7dmFyIGJlPW9lW3BlXSxhZT1uZXcgUChiZS5nZXRDZW50ZXJYKCksYmUuZ2V0Q2VudGVyWSgpKSxuZT1pZS5iZW5kcG9pbnRzLmdldChwZSk7bmUueD1hZS54LG5lLnk9YWUueSxiZS5nZXRPd25lcigpLnJlbW92ZShiZSl9dGhpcy5ncmFwaE1hbmFnZXIuYWRkKGllLGllLnNvdXJjZSxpZS50YXJnZXQpfX19LGoudHJhbnNmb3JtPWZ1bmN0aW9uKEssZWUsaWUsb2Upe2lmKGllIT1udWxsJiZvZSE9bnVsbCl7dmFyIHBlPWVlO2lmKEs8PTUwKXt2YXIgYmU9ZWUvaWU7cGUtPShlZS1iZSkvNTAqKDUwLUspfWVsc2V7dmFyIGFlPWVlKm9lO3BlKz0oYWUtZWUpLzUwKihLLTUwKX1yZXR1cm4gcGV9ZWxzZXt2YXIgbmUsc2U7cmV0dXJuIEs8PTUwPyhuZT05KmVlLzUwMCxzZT1lZS8xMCk6KG5lPTkqZWUvNTAsc2U9LTgqZWUpLG5lKksrc2V9fSxqLmZpbmRDZW50ZXJPZlRyZWU9ZnVuY3Rpb24oSyl7dmFyIGVlPVtdO2VlPWVlLmNvbmNhdChLKTt2YXIgaWU9W10sb2U9bmV3IE1hcCxwZT0hMSxiZT1udWxsOyhlZS5sZW5ndGg9PTF8fGVlLmxlbmd0aD09MikmJihwZT0hMCxiZT1lZVswXSk7Zm9yKHZhciBhZT0wO2FlPGVlLmxlbmd0aDthZSsrKXt2YXIgbmU9ZWVbYWVdLHNlPW5lLmdldE5laWdoYm9yc0xpc3QoKS5zaXplO29lLnNldChuZSxuZS5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZSksc2U9PTEmJmllLnB1c2gobmUpfXZhciBkZT1bXTtmb3IoZGU9ZGUuY29uY2F0KGllKTshcGU7KXt2YXIgWD1bXTtYPVguY29uY2F0KGRlKSxkZT1bXTtmb3IodmFyIGFlPTA7YWU8ZWUubGVuZ3RoO2FlKyspe3ZhciBuZT1lZVthZV0sZ2U9ZWUuaW5kZXhPZihuZSk7Z2U+PTAmJmVlLnNwbGljZShnZSwxKTt2YXIgVz1uZS5nZXROZWlnaGJvcnNMaXN0KCk7Vy5mb3JFYWNoKGZ1bmN0aW9uKEZlKXtpZihpZS5pbmRleE9mKEZlKTwwKXt2YXIgUGU9b2UuZ2V0KEZlKSxqZT1QZS0xO2plPT0xJiZkZS5wdXNoKEZlKSxvZS5zZXQoRmUsamUpfX0pfWllPWllLmNvbmNhdChkZSksKGVlLmxlbmd0aD09MXx8ZWUubGVuZ3RoPT0yKSYmKHBlPSEwLGJlPWVlWzBdKX1yZXR1cm4gYmV9LGoucHJvdG90eXBlLnNldEdyYXBoTWFuYWdlcj1mdW5jdGlvbihLKXt0aGlzLmdyYXBoTWFuYWdlcj1LfSx1LmV4cG9ydHM9an0sZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoKXt9di5zZWVkPTEsdi54PTAsdi5uZXh0RG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHYueD1NYXRoLnNpbih2LnNlZWQrKykqMWU0LHYueC1NYXRoLmZsb29yKHYueCl9LHUuZXhwb3J0cz12fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCg0KTtmdW5jdGlvbiBiKHksVCl7dGhpcy5sd29ybGRPcmdYPTAsdGhpcy5sd29ybGRPcmdZPTAsdGhpcy5sZGV2aWNlT3JnWD0wLHRoaXMubGRldmljZU9yZ1k9MCx0aGlzLmx3b3JsZEV4dFg9MSx0aGlzLmx3b3JsZEV4dFk9MSx0aGlzLmxkZXZpY2VFeHRYPTEsdGhpcy5sZGV2aWNlRXh0WT0xfWIucHJvdG90eXBlLmdldFdvcmxkT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1h9LGIucHJvdG90eXBlLnNldFdvcmxkT3JnWD1mdW5jdGlvbih5KXt0aGlzLmx3b3JsZE9yZ1g9eX0sYi5wcm90b3R5cGUuZ2V0V29ybGRPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWX0sYi5wcm90b3R5cGUuc2V0V29ybGRPcmdZPWZ1bmN0aW9uKHkpe3RoaXMubHdvcmxkT3JnWT15fSxiLnByb3RvdHlwZS5nZXRXb3JsZEV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRYfSxiLnByb3RvdHlwZS5zZXRXb3JsZEV4dFg9ZnVuY3Rpb24oeSl7dGhpcy5sd29ybGRFeHRYPXl9LGIucHJvdG90eXBlLmdldFdvcmxkRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFl9LGIucHJvdG90eXBlLnNldFdvcmxkRXh0WT1mdW5jdGlvbih5KXt0aGlzLmx3b3JsZEV4dFk9eX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdYfSxiLnByb3RvdHlwZS5zZXREZXZpY2VPcmdYPWZ1bmN0aW9uKHkpe3RoaXMubGRldmljZU9yZ1g9eX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdZfSxiLnByb3RvdHlwZS5zZXREZXZpY2VPcmdZPWZ1bmN0aW9uKHkpe3RoaXMubGRldmljZU9yZ1k9eX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRYfSxiLnByb3RvdHlwZS5zZXREZXZpY2VFeHRYPWZ1bmN0aW9uKHkpe3RoaXMubGRldmljZUV4dFg9eX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRZfSxiLnByb3RvdHlwZS5zZXREZXZpY2VFeHRZPWZ1bmN0aW9uKHkpe3RoaXMubGRldmljZUV4dFk9eX0sYi5wcm90b3R5cGUudHJhbnNmb3JtWD1mdW5jdGlvbih5KXt2YXIgVD0wLF89dGhpcy5sd29ybGRFeHRYO3JldHVybiBfIT0wJiYoVD10aGlzLmxkZXZpY2VPcmdYKyh5LXRoaXMubHdvcmxkT3JnWCkqdGhpcy5sZGV2aWNlRXh0WC9fKSxUfSxiLnByb3RvdHlwZS50cmFuc2Zvcm1ZPWZ1bmN0aW9uKHkpe3ZhciBUPTAsXz10aGlzLmx3b3JsZEV4dFk7cmV0dXJuIF8hPTAmJihUPXRoaXMubGRldmljZU9yZ1krKHktdGhpcy5sd29ybGRPcmdZKSp0aGlzLmxkZXZpY2VFeHRZL18pLFR9LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1YPWZ1bmN0aW9uKHkpe3ZhciBUPTAsXz10aGlzLmxkZXZpY2VFeHRYO3JldHVybiBfIT0wJiYoVD10aGlzLmx3b3JsZE9yZ1grKHktdGhpcy5sZGV2aWNlT3JnWCkqdGhpcy5sd29ybGRFeHRYL18pLFR9LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1ZPWZ1bmN0aW9uKHkpe3ZhciBUPTAsXz10aGlzLmxkZXZpY2VFeHRZO3JldHVybiBfIT0wJiYoVD10aGlzLmx3b3JsZE9yZ1krKHktdGhpcy5sZGV2aWNlT3JnWSkqdGhpcy5sd29ybGRFeHRZL18pLFR9LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1Qb2ludD1mdW5jdGlvbih5KXt2YXIgVD1uZXcgdih0aGlzLmludmVyc2VUcmFuc2Zvcm1YKHkueCksdGhpcy5pbnZlcnNlVHJhbnNmb3JtWSh5LnkpKTtyZXR1cm4gVH0sdS5leHBvcnRzPWJ9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KEYpe2lmKEFycmF5LmlzQXJyYXkoRikpe2Zvcih2YXIgaj0wLEs9QXJyYXkoRi5sZW5ndGgpO2o8Ri5sZW5ndGg7aisrKUtbal09RltqXTtyZXR1cm4gS31lbHNlIHJldHVybiBBcnJheS5mcm9tKEYpfXZhciBiPXAoMTUpLHk9cCg3KSxUPXAoMCksXz1wKDgpLEE9cCg5KTtmdW5jdGlvbiBQKCl7Yi5jYWxsKHRoaXMpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj15LkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuaWRlYWxFZGdlTGVuZ3RoPXkuREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLnNwcmluZ0NvbnN0YW50PXkuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEgsdGhpcy5yZXB1bHNpb25Db25zdGFudD15LkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RILHRoaXMuZ3Jhdml0eUNvbnN0YW50PXkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZT0zKnkuREVGQVVMVF9FREdFX0xFTkdUSC8xMDAsdGhpcy5jb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD0wLHRoaXMubWF4SXRlcmF0aW9ucz15Lk1BWF9JVEVSQVRJT05TfVAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgUiBpbiBiKVBbUl09YltSXTtQLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMudG90YWxJdGVyYXRpb25zPTAsdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCx0aGlzLnVzZUZSR3JpZFZhcmlhbnQ9eS5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT04sdGhpcy5ncmlkPVtdfSxQLnByb3RvdHlwZS5jYWxjSWRlYWxFZGdlTGVuZ3Rocz1mdW5jdGlvbigpe2Zvcih2YXIgRixqLEssZWUsaWUsb2UscGU9dGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRBbGxFZGdlcygpLGJlPTA7YmU8cGUubGVuZ3RoO2JlKyspRj1wZVtiZV0sRi5pZGVhbExlbmd0aD10aGlzLmlkZWFsRWRnZUxlbmd0aCxGLmlzSW50ZXJHcmFwaCYmKEs9Ri5nZXRTb3VyY2UoKSxlZT1GLmdldFRhcmdldCgpLGllPUYuZ2V0U291cmNlSW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCksb2U9Ri5nZXRUYXJnZXRJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb24mJihGLmlkZWFsTGVuZ3RoKz1pZStvZS0yKlQuU0lNUExFX05PREVfU0laRSksaj1GLmdldExjYSgpLmdldEluY2x1c2lvblRyZWVEZXB0aCgpLEYuaWRlYWxMZW5ndGgrPXkuREVGQVVMVF9FREdFX0xFTkdUSCp5LlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IqKEsuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkrZWUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCktMipqKSl9LFAucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3ZhciBGPXRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGg7dGhpcy5pbmNyZW1lbnRhbD8oRj55LkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCYmKHRoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heCh0aGlzLmNvb2xpbmdGYWN0b3IqeS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLHRoaXMuY29vbGluZ0ZhY3Rvci0oRi15LkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkvKHkuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlULXkuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSp0aGlzLmNvb2xpbmdGYWN0b3IqKDEteS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSkpLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD15Lk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCk6KEY+eS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ/dGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHkuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiwxLShGLXkuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oeS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQteS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKigxLXkuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpOnRoaXMuY29vbGluZ0ZhY3Rvcj0xLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9dGhpcy5jb29saW5nRmFjdG9yLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD15Lk1BWF9OT0RFX0RJU1BMQUNFTUVOVCksdGhpcy5tYXhJdGVyYXRpb25zPU1hdGgubWF4KHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgqNSx0aGlzLm1heEl0ZXJhdGlvbnMpLHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQ9dGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlKnRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgsdGhpcy5yZXB1bHNpb25SYW5nZT10aGlzLmNhbGNSZXB1bHNpb25SYW5nZSgpfSxQLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPXRoaXMuZ2V0QWxsRWRnZXMoKSxqLEs9MDtLPEYubGVuZ3RoO0srKylqPUZbS10sdGhpcy5jYWxjU3ByaW5nRm9yY2UoaixqLmlkZWFsTGVuZ3RoKX0sUC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlcz1mdW5jdGlvbigpe3ZhciBGPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxqPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMSxLLGVlLGllLG9lLHBlPXRoaXMuZ2V0QWxsTm9kZXMoKSxiZTtpZih0aGlzLnVzZUZSR3JpZFZhcmlhbnQpZm9yKHRoaXMudG90YWxJdGVyYXRpb25zJXkuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJkYmJnRoaXMudXBkYXRlR3JpZCgpLGJlPW5ldyBTZXQsSz0wO0s8cGUubGVuZ3RoO0srKylpZT1wZVtLXSx0aGlzLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZShpZSxiZSxGLGopLGJlLmFkZChpZSk7ZWxzZSBmb3IoSz0wO0s8cGUubGVuZ3RoO0srKylmb3IoaWU9cGVbS10sZWU9SysxO2VlPHBlLmxlbmd0aDtlZSsrKW9lPXBlW2VlXSxpZS5nZXRPd25lcigpPT1vZS5nZXRPd25lcigpJiZ0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShpZSxvZSl9LFAucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBGLGo9dGhpcy5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpLEs9MDtLPGoubGVuZ3RoO0srKylGPWpbS10sdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlKEYpfSxQLnByb3RvdHlwZS5tb3ZlTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIEY9dGhpcy5nZXRBbGxOb2RlcygpLGosSz0wO0s8Ri5sZW5ndGg7SysrKWo9RltLXSxqLm1vdmUoKX0sUC5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlPWZ1bmN0aW9uKEYsail7dmFyIEs9Ri5nZXRTb3VyY2UoKSxlZT1GLmdldFRhcmdldCgpLGllLG9lLHBlLGJlO2lmKHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJksuZ2V0Q2hpbGQoKT09bnVsbCYmZWUuZ2V0Q2hpbGQoKT09bnVsbClGLnVwZGF0ZUxlbmd0aFNpbXBsZSgpO2Vsc2UgaWYoRi51cGRhdGVMZW5ndGgoKSxGLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldClyZXR1cm47aWU9Ri5nZXRMZW5ndGgoKSxpZSE9MCYmKG9lPXRoaXMuc3ByaW5nQ29uc3RhbnQqKGllLWopLHBlPW9lKihGLmxlbmd0aFgvaWUpLGJlPW9lKihGLmxlbmd0aFkvaWUpLEsuc3ByaW5nRm9yY2VYKz1wZSxLLnNwcmluZ0ZvcmNlWSs9YmUsZWUuc3ByaW5nRm9yY2VYLT1wZSxlZS5zcHJpbmdGb3JjZVktPWJlKX0sUC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlPWZ1bmN0aW9uKEYsail7dmFyIEs9Ri5nZXRSZWN0KCksZWU9ai5nZXRSZWN0KCksaWU9bmV3IEFycmF5KDIpLG9lPW5ldyBBcnJheSg0KSxwZSxiZSxhZSxuZSxzZSxkZSxYO2lmKEsuaW50ZXJzZWN0cyhlZSkpe18uY2FsY1NlcGFyYXRpb25BbW91bnQoSyxlZSxpZSx5LkRFRkFVTFRfRURHRV9MRU5HVEgvMiksZGU9MippZVswXSxYPTIqaWVbMV07dmFyIGdlPUYubm9PZkNoaWxkcmVuKmoubm9PZkNoaWxkcmVuLyhGLm5vT2ZDaGlsZHJlbitqLm5vT2ZDaGlsZHJlbik7Ri5yZXB1bHNpb25Gb3JjZVgtPWdlKmRlLEYucmVwdWxzaW9uRm9yY2VZLT1nZSpYLGoucmVwdWxzaW9uRm9yY2VYKz1nZSpkZSxqLnJlcHVsc2lvbkZvcmNlWSs9Z2UqWH1lbHNlIHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJkYuZ2V0Q2hpbGQoKT09bnVsbCYmai5nZXRDaGlsZCgpPT1udWxsPyhwZT1lZS5nZXRDZW50ZXJYKCktSy5nZXRDZW50ZXJYKCksYmU9ZWUuZ2V0Q2VudGVyWSgpLUsuZ2V0Q2VudGVyWSgpKTooXy5nZXRJbnRlcnNlY3Rpb24oSyxlZSxvZSkscGU9b2VbMl0tb2VbMF0sYmU9b2VbM10tb2VbMV0pLE1hdGguYWJzKHBlKTx5Lk1JTl9SRVBVTFNJT05fRElTVCYmKHBlPUEuc2lnbihwZSkqeS5NSU5fUkVQVUxTSU9OX0RJU1QpLE1hdGguYWJzKGJlKTx5Lk1JTl9SRVBVTFNJT05fRElTVCYmKGJlPUEuc2lnbihiZSkqeS5NSU5fUkVQVUxTSU9OX0RJU1QpLGFlPXBlKnBlK2JlKmJlLG5lPU1hdGguc3FydChhZSksc2U9dGhpcy5yZXB1bHNpb25Db25zdGFudCpGLm5vT2ZDaGlsZHJlbipqLm5vT2ZDaGlsZHJlbi9hZSxkZT1zZSpwZS9uZSxYPXNlKmJlL25lLEYucmVwdWxzaW9uRm9yY2VYLT1kZSxGLnJlcHVsc2lvbkZvcmNlWS09WCxqLnJlcHVsc2lvbkZvcmNlWCs9ZGUsai5yZXB1bHNpb25Gb3JjZVkrPVh9LFAucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2U9ZnVuY3Rpb24oRil7dmFyIGosSyxlZSxpZSxvZSxwZSxiZSxhZTtqPUYuZ2V0T3duZXIoKSxLPShqLmdldFJpZ2h0KCkrai5nZXRMZWZ0KCkpLzIsZWU9KGouZ2V0VG9wKCkrai5nZXRCb3R0b20oKSkvMixpZT1GLmdldENlbnRlclgoKS1LLG9lPUYuZ2V0Q2VudGVyWSgpLWVlLHBlPU1hdGguYWJzKGllKStGLmdldFdpZHRoKCkvMixiZT1NYXRoLmFicyhvZSkrRi5nZXRIZWlnaHQoKS8yLEYuZ2V0T3duZXIoKT09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPyhhZT1qLmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmdyYXZpdHlSYW5nZUZhY3RvciwocGU+YWV8fGJlPmFlKSYmKEYuZ3Jhdml0YXRpb25Gb3JjZVg9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KmllLEYuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50Km9lKSk6KGFlPWouZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3IsKHBlPmFlfHxiZT5hZSkmJihGLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCppZSp0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50LEYuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50Km9lKnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQpKX0sUC5wcm90b3R5cGUuaXNDb252ZXJnZWQ9ZnVuY3Rpb24oKXt2YXIgRixqPSExO3JldHVybiB0aGlzLnRvdGFsSXRlcmF0aW9ucz50aGlzLm1heEl0ZXJhdGlvbnMvMyYmKGo9TWF0aC5hYnModGhpcy50b3RhbERpc3BsYWNlbWVudC10aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50KTwyKSxGPXRoaXMudG90YWxEaXNwbGFjZW1lbnQ8dGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PXRoaXMudG90YWxEaXNwbGFjZW1lbnQsRnx8an0sUC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0JiYhdGhpcy5pc1N1YkxheW91dCYmKHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPT10aGlzLmFuaW1hdGlvblBlcmlvZD8odGhpcy51cGRhdGUoKSx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wKTp0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucysrKX0sUC5wcm90b3R5cGUuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBGLGo9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxLPTA7SzxqLmxlbmd0aDtLKyspRj1qW0tdLEYubm9PZkNoaWxkcmVuPUYuZ2V0Tm9PZkNoaWxkcmVuKCl9LFAucHJvdG90eXBlLmNhbGNHcmlkPWZ1bmN0aW9uKEYpe3ZhciBqPTAsSz0wO2o9cGFyc2VJbnQoTWF0aC5jZWlsKChGLmdldFJpZ2h0KCktRi5nZXRMZWZ0KCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxLPXBhcnNlSW50KE1hdGguY2VpbCgoRi5nZXRCb3R0b20oKS1GLmdldFRvcCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBlZT1uZXcgQXJyYXkoaiksaWU9MDtpZTxqO2llKyspZWVbaWVdPW5ldyBBcnJheShLKTtmb3IodmFyIGllPTA7aWU8ajtpZSsrKWZvcih2YXIgb2U9MDtvZTxLO29lKyspZWVbaWVdW29lXT1uZXcgQXJyYXk7cmV0dXJuIGVlfSxQLnByb3RvdHlwZS5hZGROb2RlVG9HcmlkPWZ1bmN0aW9uKEYsaixLKXt2YXIgZWU9MCxpZT0wLG9lPTAscGU9MDtlZT1wYXJzZUludChNYXRoLmZsb29yKChGLmdldFJlY3QoKS54LWopL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxpZT1wYXJzZUludChNYXRoLmZsb29yKChGLmdldFJlY3QoKS53aWR0aCtGLmdldFJlY3QoKS54LWopL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxvZT1wYXJzZUludChNYXRoLmZsb29yKChGLmdldFJlY3QoKS55LUspL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxwZT1wYXJzZUludChNYXRoLmZsb29yKChGLmdldFJlY3QoKS5oZWlnaHQrRi5nZXRSZWN0KCkueS1LKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBiZT1lZTtiZTw9aWU7YmUrKylmb3IodmFyIGFlPW9lO2FlPD1wZTthZSsrKXRoaXMuZ3JpZFtiZV1bYWVdLnB1c2goRiksRi5zZXRHcmlkQ29vcmRpbmF0ZXMoZWUsaWUsb2UscGUpfSxQLnByb3RvdHlwZS51cGRhdGVHcmlkPWZ1bmN0aW9uKCl7dmFyIEYsaixLPXRoaXMuZ2V0QWxsTm9kZXMoKTtmb3IodGhpcy5ncmlkPXRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKSxGPTA7RjxLLmxlbmd0aDtGKyspaj1LW0ZdLHRoaXMuYWRkTm9kZVRvR3JpZChqLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldFRvcCgpKX0sUC5wcm90b3R5cGUuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlPWZ1bmN0aW9uKEYsaixLLGVlKXtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyV5LkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPT0xJiZLfHxlZSl7dmFyIGllPW5ldyBTZXQ7Ri5zdXJyb3VuZGluZz1uZXcgQXJyYXk7Zm9yKHZhciBvZSxwZT10aGlzLmdyaWQsYmU9Ri5zdGFydFgtMTtiZTxGLmZpbmlzaFgrMjtiZSsrKWZvcih2YXIgYWU9Ri5zdGFydFktMTthZTxGLmZpbmlzaFkrMjthZSsrKWlmKCEoYmU8MHx8YWU8MHx8YmU+PXBlLmxlbmd0aHx8YWU+PXBlWzBdLmxlbmd0aCkpe2Zvcih2YXIgbmU9MDtuZTxwZVtiZV1bYWVdLmxlbmd0aDtuZSsrKWlmKG9lPXBlW2JlXVthZV1bbmVdLCEoRi5nZXRPd25lcigpIT1vZS5nZXRPd25lcigpfHxGPT1vZSkmJiFqLmhhcyhvZSkmJiFpZS5oYXMob2UpKXt2YXIgc2U9TWF0aC5hYnMoRi5nZXRDZW50ZXJYKCktb2UuZ2V0Q2VudGVyWCgpKS0oRi5nZXRXaWR0aCgpLzIrb2UuZ2V0V2lkdGgoKS8yKSxkZT1NYXRoLmFicyhGLmdldENlbnRlclkoKS1vZS5nZXRDZW50ZXJZKCkpLShGLmdldEhlaWdodCgpLzIrb2UuZ2V0SGVpZ2h0KCkvMik7c2U8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJmRlPD10aGlzLnJlcHVsc2lvblJhbmdlJiZpZS5hZGQob2UpfX1GLnN1cnJvdW5kaW5nPVtdLmNvbmNhdCh2KGllKSl9Zm9yKGJlPTA7YmU8Ri5zdXJyb3VuZGluZy5sZW5ndGg7YmUrKyl0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShGLEYuc3Vycm91bmRpbmdbYmVdKX0sUC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHUuZXhwb3J0cz1QfSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgxKSxiPXAoNyk7ZnVuY3Rpb24geShfLEEsUCl7di5jYWxsKHRoaXMsXyxBLFApLHRoaXMuaWRlYWxMZW5ndGg9Yi5ERUZBVUxUX0VER0VfTEVOR1RIfXkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodi5wcm90b3R5cGUpO2Zvcih2YXIgVCBpbiB2KXlbVF09dltUXTt1LmV4cG9ydHM9eX0sZnVuY3Rpb24odSxkLHApe3ZhciB2PXAoMyk7ZnVuY3Rpb24gYihULF8sQSxQKXt2LmNhbGwodGhpcyxULF8sQSxQKSx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTAsdGhpcy5zdGFydFg9MCx0aGlzLmZpbmlzaFg9MCx0aGlzLnN0YXJ0WT0wLHRoaXMuZmluaXNoWT0wLHRoaXMuc3Vycm91bmRpbmc9W119Yi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2LnByb3RvdHlwZSk7Zm9yKHZhciB5IGluIHYpYlt5XT12W3ldO2IucHJvdG90eXBlLnNldEdyaWRDb29yZGluYXRlcz1mdW5jdGlvbihULF8sQSxQKXt0aGlzLnN0YXJ0WD1ULHRoaXMuZmluaXNoWD1fLHRoaXMuc3RhcnRZPUEsdGhpcy5maW5pc2hZPVB9LHUuZXhwb3J0cz1ifSxmdW5jdGlvbih1LGQscCl7ZnVuY3Rpb24gdihiLHkpe3RoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGIhPT1udWxsJiZ5IT09bnVsbCYmKHRoaXMuaGVpZ2h0PXksdGhpcy53aWR0aD1iKX12LnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSx2LnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihiKXt0aGlzLndpZHRoPWJ9LHYucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sdi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGIpe3RoaXMuaGVpZ2h0PWJ9LHUuZXhwb3J0cz12fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgxNCk7ZnVuY3Rpb24gYigpe3RoaXMubWFwPXt9LHRoaXMua2V5cz1bXX1iLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oeSxUKXt2YXIgXz12LmNyZWF0ZUlEKHkpO3RoaXMuY29udGFpbnMoXyl8fCh0aGlzLm1hcFtfXT1ULHRoaXMua2V5cy5wdXNoKHkpKX0sYi5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oeSl7cmV0dXJuIHYuY3JlYXRlSUQoeSksdGhpcy5tYXBbeV0hPW51bGx9LGIucHJvdG90eXBlLmdldD1mdW5jdGlvbih5KXt2YXIgVD12LmNyZWF0ZUlEKHkpO3JldHVybiB0aGlzLm1hcFtUXX0sYi5wcm90b3R5cGUua2V5U2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5c30sdS5leHBvcnRzPWJ9LGZ1bmN0aW9uKHUsZCxwKXt2YXIgdj1wKDE0KTtmdW5jdGlvbiBiKCl7dGhpcy5zZXQ9e319Yi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHkpe3ZhciBUPXYuY3JlYXRlSUQoeSk7dGhpcy5jb250YWlucyhUKXx8KHRoaXMuc2V0W1RdPXkpfSxiLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oeSl7ZGVsZXRlIHRoaXMuc2V0W3YuY3JlYXRlSUQoeSldfSxiLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2V0PXt9fSxiLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5zZXRbdi5jcmVhdGVJRCh5KV09PXl9LGIucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCk9PT0wfSxiLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGIucHJvdG90eXBlLmFkZEFsbFRvPWZ1bmN0aW9uKHkpe2Zvcih2YXIgVD1PYmplY3Qua2V5cyh0aGlzLnNldCksXz1ULmxlbmd0aCxBPTA7QTxfO0ErKyl5LnB1c2godGhpcy5zZXRbVFtBXV0pfSxiLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGIucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbih5KXtmb3IodmFyIFQ9eS5sZW5ndGgsXz0wO188VDtfKyspe3ZhciBBPXlbX107dGhpcy5hZGQoQSl9fSx1LmV4cG9ydHM9Yn0sZnVuY3Rpb24odSxkLHApe3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gXyhBLFApe2Zvcih2YXIgUj0wO1I8UC5sZW5ndGg7UisrKXt2YXIgRj1QW1JdO0YuZW51bWVyYWJsZT1GLmVudW1lcmFibGV8fCExLEYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBGJiYoRi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsRi5rZXksRil9fXJldHVybiBmdW5jdGlvbihBLFAsUil7cmV0dXJuIFAmJl8oQS5wcm90b3R5cGUsUCksUiYmXyhBLFIpLEF9fSgpO2Z1bmN0aW9uIGIoXyxBKXtpZighKF8gaW5zdGFuY2VvZiBBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgeT1wKDExKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gXyhBLFApe2IodGhpcyxfKSwoUCE9PW51bGx8fFAhPT12b2lkIDApJiYodGhpcy5jb21wYXJlRnVuY3Rpb249dGhpcy5fZGVmYXVsdENvbXBhcmVGdW5jdGlvbik7dmFyIFI9dm9pZCAwO0EgaW5zdGFuY2VvZiB5P1I9QS5zaXplKCk6Uj1BLmxlbmd0aCx0aGlzLl9xdWlja3NvcnQoQSwwLFItMSl9cmV0dXJuIHYoXyxbe2tleToiX3F1aWNrc29ydCIsdmFsdWU6ZnVuY3Rpb24oUCxSLEYpe2lmKFI8Ril7dmFyIGo9dGhpcy5fcGFydGl0aW9uKFAsUixGKTt0aGlzLl9xdWlja3NvcnQoUCxSLGopLHRoaXMuX3F1aWNrc29ydChQLGorMSxGKX19fSx7a2V5OiJfcGFydGl0aW9uIix2YWx1ZTpmdW5jdGlvbihQLFIsRil7Zm9yKHZhciBqPXRoaXMuX2dldChQLFIpLEs9UixlZT1GOzspe2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24oaix0aGlzLl9nZXQoUCxlZSkpOyllZS0tO2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24odGhpcy5fZ2V0KFAsSyksaik7KUsrKztpZihLPGVlKXRoaXMuX3N3YXAoUCxLLGVlKSxLKyssZWUtLTtlbHNlIHJldHVybiBlZX19fSx7a2V5OiJfZ2V0Iix2YWx1ZTpmdW5jdGlvbihQLFIpe3JldHVybiBQIGluc3RhbmNlb2YgeT9QLmdldF9vYmplY3RfYXQoUik6UFtSXX19LHtrZXk6Il9zZXQiLHZhbHVlOmZ1bmN0aW9uKFAsUixGKXtQIGluc3RhbmNlb2YgeT9QLnNldF9vYmplY3RfYXQoUixGKTpQW1JdPUZ9fSx7a2V5OiJfc3dhcCIsdmFsdWU6ZnVuY3Rpb24oUCxSLEYpe3ZhciBqPXRoaXMuX2dldChQLFIpO3RoaXMuX3NldChQLFIsdGhpcy5fZ2V0KFAsRikpLHRoaXMuX3NldChQLEYsail9fSx7a2V5OiJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIsdmFsdWU6ZnVuY3Rpb24oUCxSKXtyZXR1cm4gUj5QfX1dKSxffSgpO3UuZXhwb3J0cz1UfSxmdW5jdGlvbih1LGQscCl7dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBUKF8sQSl7Zm9yKHZhciBQPTA7UDxBLmxlbmd0aDtQKyspe3ZhciBSPUFbUF07Ui5lbnVtZXJhYmxlPVIuZW51bWVyYWJsZXx8ITEsUi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFImJihSLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXyxSLmtleSxSKX19cmV0dXJuIGZ1bmN0aW9uKF8sQSxQKXtyZXR1cm4gQSYmVChfLnByb3RvdHlwZSxBKSxQJiZUKF8sUCksX319KCk7ZnVuY3Rpb24gYihULF8pe2lmKCEoVCBpbnN0YW5jZW9mIF8pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gVChfLEEpe3ZhciBQPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXToxLFI9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOi0xLEY9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOi0xO2IodGhpcyxUKSx0aGlzLnNlcXVlbmNlMT1fLHRoaXMuc2VxdWVuY2UyPUEsdGhpcy5tYXRjaF9zY29yZT1QLHRoaXMubWlzbWF0Y2hfcGVuYWx0eT1SLHRoaXMuZ2FwX3BlbmFsdHk9Rix0aGlzLmlNYXg9Xy5sZW5ndGgrMSx0aGlzLmpNYXg9QS5sZW5ndGgrMSx0aGlzLmdyaWQ9bmV3IEFycmF5KHRoaXMuaU1heCk7Zm9yKHZhciBqPTA7ajx0aGlzLmlNYXg7aisrKXt0aGlzLmdyaWRbal09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBLPTA7Szx0aGlzLmpNYXg7SysrKXRoaXMuZ3JpZFtqXVtLXT0wfXRoaXMudHJhY2ViYWNrR3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIGVlPTA7ZWU8dGhpcy5pTWF4O2VlKyspe3RoaXMudHJhY2ViYWNrR3JpZFtlZV09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBpZT0wO2llPHRoaXMuak1heDtpZSsrKXRoaXMudHJhY2ViYWNrR3JpZFtlZV1baWVdPVtudWxsLG51bGwsbnVsbF19dGhpcy5hbGlnbm1lbnRzPVtdLHRoaXMuc2NvcmU9LTEsdGhpcy5jb21wdXRlR3JpZHMoKX1yZXR1cm4gdihULFt7a2V5OiJnZXRTY29yZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY29yZX19LHtrZXk6ImdldEFsaWdubWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxpZ25tZW50c319LHtrZXk6ImNvbXB1dGVHcmlkcyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIEE9MTtBPHRoaXMuak1heDtBKyspdGhpcy5ncmlkWzBdW0FdPXRoaXMuZ3JpZFswXVtBLTFdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkWzBdW0FdPVshMSwhMSwhMF07Zm9yKHZhciBQPTE7UDx0aGlzLmlNYXg7UCsrKXRoaXMuZ3JpZFtQXVswXT10aGlzLmdyaWRbUC0xXVswXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFtQXVswXT1bITEsITAsITFdO2Zvcih2YXIgUj0xO1I8dGhpcy5pTWF4O1IrKylmb3IodmFyIEY9MTtGPHRoaXMuak1heDtGKyspe3ZhciBqPXZvaWQgMDt0aGlzLnNlcXVlbmNlMVtSLTFdPT09dGhpcy5zZXF1ZW5jZTJbRi0xXT9qPXRoaXMuZ3JpZFtSLTFdW0YtMV0rdGhpcy5tYXRjaF9zY29yZTpqPXRoaXMuZ3JpZFtSLTFdW0YtMV0rdGhpcy5taXNtYXRjaF9wZW5hbHR5O3ZhciBLPXRoaXMuZ3JpZFtSLTFdW0ZdK3RoaXMuZ2FwX3BlbmFsdHksZWU9dGhpcy5ncmlkW1JdW0YtMV0rdGhpcy5nYXBfcGVuYWx0eSxpZT1baixLLGVlXSxvZT10aGlzLmFycmF5QWxsTWF4SW5kZXhlcyhpZSk7dGhpcy5ncmlkW1JdW0ZdPWllW29lWzBdXSx0aGlzLnRyYWNlYmFja0dyaWRbUl1bRl09W29lLmluY2x1ZGVzKDApLG9lLmluY2x1ZGVzKDEpLG9lLmluY2x1ZGVzKDIpXX10aGlzLnNjb3JlPXRoaXMuZ3JpZFt0aGlzLmlNYXgtMV1bdGhpcy5qTWF4LTFdfX0se2tleToiYWxpZ25tZW50VHJhY2ViYWNrIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBBPVtdO2ZvcihBLnB1c2goe3BvczpbdGhpcy5zZXF1ZW5jZTEubGVuZ3RoLHRoaXMuc2VxdWVuY2UyLmxlbmd0aF0sc2VxMToiIixzZXEyOiIifSk7QVswXTspe3ZhciBQPUFbMF0sUj10aGlzLnRyYWNlYmFja0dyaWRbUC5wb3NbMF1dW1AucG9zWzFdXTtSWzBdJiZBLnB1c2goe3BvczpbUC5wb3NbMF0tMSxQLnBvc1sxXS0xXSxzZXExOnRoaXMuc2VxdWVuY2UxW1AucG9zWzBdLTFdK1Auc2VxMSxzZXEyOnRoaXMuc2VxdWVuY2UyW1AucG9zWzFdLTFdK1Auc2VxMn0pLFJbMV0mJkEucHVzaCh7cG9zOltQLnBvc1swXS0xLFAucG9zWzFdXSxzZXExOnRoaXMuc2VxdWVuY2UxW1AucG9zWzBdLTFdK1Auc2VxMSxzZXEyOiItIitQLnNlcTJ9KSxSWzJdJiZBLnB1c2goe3BvczpbUC5wb3NbMF0sUC5wb3NbMV0tMV0sc2VxMToiLSIrUC5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbUC5wb3NbMV0tMV0rUC5zZXEyfSksUC5wb3NbMF09PT0wJiZQLnBvc1sxXT09PTAmJnRoaXMuYWxpZ25tZW50cy5wdXNoKHtzZXF1ZW5jZTE6UC5zZXExLHNlcXVlbmNlMjpQLnNlcTJ9KSxBLnNoaWZ0KCl9cmV0dXJuIHRoaXMuYWxpZ25tZW50c319LHtrZXk6ImdldEFsbEluZGV4ZXMiLHZhbHVlOmZ1bmN0aW9uKEEsUCl7Zm9yKHZhciBSPVtdLEY9LTE7KEY9QS5pbmRleE9mKFAsRisxKSkhPT0tMTspUi5wdXNoKEYpO3JldHVybiBSfX0se2tleToiYXJyYXlBbGxNYXhJbmRleGVzIix2YWx1ZTpmdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5nZXRBbGxJbmRleGVzKEEsTWF0aC5tYXguYXBwbHkobnVsbCxBKSl9fV0pLFR9KCk7dS5leHBvcnRzPXl9LGZ1bmN0aW9uKHUsZCxwKXt2YXIgdj1mdW5jdGlvbigpe307di5GRExheW91dD1wKDE4KSx2LkZETGF5b3V0Q29uc3RhbnRzPXAoNyksdi5GRExheW91dEVkZ2U9cCgxOSksdi5GRExheW91dE5vZGU9cCgyMCksdi5EaW1lbnNpb25EPXAoMjEpLHYuSGFzaE1hcD1wKDIyKSx2Lkhhc2hTZXQ9cCgyMyksdi5JR2VvbWV0cnk9cCg4KSx2LklNYXRoPXAoOSksdi5JbnRlZ2VyPXAoMTApLHYuUG9pbnQ9cCgxMiksdi5Qb2ludEQ9cCg0KSx2LlJhbmRvbVNlZWQ9cCgxNiksdi5SZWN0YW5nbGVEPXAoMTMpLHYuVHJhbnNmb3JtPXAoMTcpLHYuVW5pcXVlSURHZW5lcmV0b3I9cCgxNCksdi5RdWlja3NvcnQ9cCgyNCksdi5MaW5rZWRMaXN0PXAoMTEpLHYuTEdyYXBoT2JqZWN0PXAoMiksdi5MR3JhcGg9cCg1KSx2LkxFZGdlPXAoMSksdi5MR3JhcGhNYW5hZ2VyPXAoNiksdi5MTm9kZT1wKDMpLHYuTGF5b3V0PXAoMTUpLHYuTGF5b3V0Q29uc3RhbnRzPXAoMCksdi5OZWVkbGVtYW5XdW5zY2g9cCgyNSksdS5leHBvcnRzPXZ9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KCl7dGhpcy5saXN0ZW5lcnM9W119dmFyIGI9di5wcm90b3R5cGU7Yi5hZGRMaXN0ZW5lcj1mdW5jdGlvbih5LFQpe3RoaXMubGlzdGVuZXJzLnB1c2goe2V2ZW50OnksY2FsbGJhY2s6VH0pfSxiLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHksVCl7Zm9yKHZhciBfPXRoaXMubGlzdGVuZXJzLmxlbmd0aDtfPj0wO18tLSl7dmFyIEE9dGhpcy5saXN0ZW5lcnNbX107QS5ldmVudD09PXkmJkEuY2FsbGJhY2s9PT1UJiZ0aGlzLmxpc3RlbmVycy5zcGxpY2UoXywxKX19LGIuZW1pdD1mdW5jdGlvbih5LFQpe2Zvcih2YXIgXz0wO188dGhpcy5saXN0ZW5lcnMubGVuZ3RoO18rKyl7dmFyIEE9dGhpcy5saXN0ZW5lcnNbX107eT09PUEuZXZlbnQmJkEuY2FsbGJhY2soVCl9fSx1LmV4cG9ydHM9dn1dKX0pfShyd2UpKSxyd2UuZXhwb3J0c312YXIgcFdlO2Z1bmN0aW9uIGRvbigpe3JldHVybiBwV2V8fChwV2U9MSxmdW5jdGlvbihpLHMpeyhmdW5jdGlvbihkLHApe2kuZXhwb3J0cz1wKGZvbigpKX0pKEFnLGZ1bmN0aW9uKHUpe3JldHVybiBmdW5jdGlvbihkKXt2YXIgcD17fTtmdW5jdGlvbiB2KGIpe2lmKHBbYl0pcmV0dXJuIHBbYl0uZXhwb3J0czt2YXIgeT1wW2JdPXtpOmIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZFtiXS5jYWxsKHkuZXhwb3J0cyx5LHkuZXhwb3J0cyx2KSx5Lmw9ITAseS5leHBvcnRzfXJldHVybiB2Lm09ZCx2LmM9cCx2Lmk9ZnVuY3Rpb24oYil7cmV0dXJuIGJ9LHYuZD1mdW5jdGlvbihiLHksVCl7di5vKGIseSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLHkse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpUfSl9LHYubj1mdW5jdGlvbihiKXt2YXIgeT1iJiZiLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gYi5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBifTtyZXR1cm4gdi5kKHksImEiLHkpLHl9LHYubz1mdW5jdGlvbihiLHkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYix5KX0sdi5wPSIiLHYodi5zPTcpfShbZnVuY3Rpb24oZCxwKXtkLmV4cG9ydHM9dX0sZnVuY3Rpb24oZCxwLHYpe3ZhciBiPXYoMCkuRkRMYXlvdXRDb25zdGFudHM7ZnVuY3Rpb24geSgpe31mb3IodmFyIFQgaW4gYil5W1RdPWJbVF07eS5ERUZBVUxUX1VTRV9NVUxUSV9MRVZFTF9TQ0FMSU5HPSExLHkuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTj1iLkRFRkFVTFRfRURHRV9MRU5HVEgseS5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OPTYwLHkuVElMRT0hMCx5LlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPTEwLHkuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD0xMCx5LlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMPSExLGQuZXhwb3J0cz15fSxmdW5jdGlvbihkLHAsdil7dmFyIGI9digwKS5GRExheW91dEVkZ2U7ZnVuY3Rpb24geShfLEEsUCl7Yi5jYWxsKHRoaXMsXyxBLFApfXkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgVCBpbiBiKXlbVF09YltUXTtkLmV4cG9ydHM9eX0sZnVuY3Rpb24oZCxwLHYpe3ZhciBiPXYoMCkuTEdyYXBoO2Z1bmN0aW9uIHkoXyxBLFApe2IuY2FsbCh0aGlzLF8sQSxQKX15LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIFQgaW4gYil5W1RdPWJbVF07ZC5leHBvcnRzPXl9LGZ1bmN0aW9uKGQscCx2KXt2YXIgYj12KDApLkxHcmFwaE1hbmFnZXI7ZnVuY3Rpb24geShfKXtiLmNhbGwodGhpcyxfKX15LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIFQgaW4gYil5W1RdPWJbVF07ZC5leHBvcnRzPXl9LGZ1bmN0aW9uKGQscCx2KXt2YXIgYj12KDApLkZETGF5b3V0Tm9kZSx5PXYoMCkuSU1hdGg7ZnVuY3Rpb24gVChBLFAsUixGKXtiLmNhbGwodGhpcyxBLFAsUixGKX1ULnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIF8gaW4gYilUW19dPWJbX107VC5wcm90b3R5cGUubW92ZT1mdW5jdGlvbigpe3ZhciBBPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO3RoaXMuZGlzcGxhY2VtZW50WD1BLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VYK3RoaXMucmVwdWxzaW9uRm9yY2VYK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpL3RoaXMubm9PZkNoaWxkcmVuLHRoaXMuZGlzcGxhY2VtZW50WT1BLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VZK3RoaXMucmVwdWxzaW9uRm9yY2VZK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVkpL3RoaXMubm9PZkNoaWxkcmVuLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCk+QS5jb29saW5nRmFjdG9yKkEubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WD1BLmNvb2xpbmdGYWN0b3IqQS5tYXhOb2RlRGlzcGxhY2VtZW50Knkuc2lnbih0aGlzLmRpc3BsYWNlbWVudFgpKSxNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpPkEuY29vbGluZ0ZhY3RvcipBLm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFk9QS5jb29saW5nRmFjdG9yKkEubWF4Tm9kZURpc3BsYWNlbWVudCp5LnNpZ24odGhpcy5kaXNwbGFjZW1lbnRZKSksdGhpcy5jaGlsZD09bnVsbD90aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKTp0aGlzLmNoaWxkLmdldE5vZGVzKCkubGVuZ3RoPT0wP3RoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpOnRoaXMucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbih0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKSxBLnRvdGFsRGlzcGxhY2VtZW50Kz1NYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpK01hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSksdGhpcy5zcHJpbmdGb3JjZVg9MCx0aGlzLnNwcmluZ0ZvcmNlWT0wLHRoaXMucmVwdWxzaW9uRm9yY2VYPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVk9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VYPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWT0wLHRoaXMuZGlzcGxhY2VtZW50WD0wLHRoaXMuZGlzcGxhY2VtZW50WT0wfSxULnByb3RvdHlwZS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuPWZ1bmN0aW9uKEEsUCl7Zm9yKHZhciBSPXRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLEYsaj0wO2o8Ui5sZW5ndGg7aisrKUY9UltqXSxGLmdldENoaWxkKCk9PW51bGw/KEYubW92ZUJ5KEEsUCksRi5kaXNwbGFjZW1lbnRYKz1BLEYuZGlzcGxhY2VtZW50WSs9UCk6Ri5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKEEsUCl9LFQucHJvdG90eXBlLnNldFByZWQxPWZ1bmN0aW9uKEEpe3RoaXMucHJlZDE9QX0sVC5wcm90b3R5cGUuZ2V0UHJlZDE9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDF9LFQucHJvdG90eXBlLmdldFByZWQyPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQyfSxULnByb3RvdHlwZS5zZXROZXh0PWZ1bmN0aW9uKEEpe3RoaXMubmV4dD1BfSxULnByb3RvdHlwZS5nZXROZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG5leHR9LFQucHJvdG90eXBlLnNldFByb2Nlc3NlZD1mdW5jdGlvbihBKXt0aGlzLnByb2Nlc3NlZD1BfSxULnByb3RvdHlwZS5pc1Byb2Nlc3NlZD1mdW5jdGlvbigpe3JldHVybiBwcm9jZXNzZWR9LGQuZXhwb3J0cz1UfSxmdW5jdGlvbihkLHAsdil7dmFyIGI9digwKS5GRExheW91dCx5PXYoNCksVD12KDMpLF89dig1KSxBPXYoMiksUD12KDEpLFI9digwKS5GRExheW91dENvbnN0YW50cyxGPXYoMCkuTGF5b3V0Q29uc3RhbnRzLGo9digwKS5Qb2ludCxLPXYoMCkuUG9pbnRELGVlPXYoMCkuTGF5b3V0LGllPXYoMCkuSW50ZWdlcixvZT12KDApLklHZW9tZXRyeSxwZT12KDApLkxHcmFwaCxiZT12KDApLlRyYW5zZm9ybTtmdW5jdGlvbiBhZSgpe2IuY2FsbCh0aGlzKSx0aGlzLnRvQmVUaWxlZD17fX1hZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSk7Zm9yKHZhciBuZSBpbiBiKWFlW25lXT1iW25lXTthZS5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIHNlPW5ldyB5KHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1zZSxzZX0sYWUucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKHNlKXtyZXR1cm4gbmV3IFQobnVsbCx0aGlzLmdyYXBoTWFuYWdlcixzZSl9LGFlLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKHNlKXtyZXR1cm4gbmV3IF8odGhpcy5ncmFwaE1hbmFnZXIsc2UpfSxhZS5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihzZSl7cmV0dXJuIG5ldyBBKG51bGwsbnVsbCxzZSl9LGFlLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMuaXNTdWJMYXlvdXR8fChQLkRFRkFVTFRfRURHRV9MRU5HVEg8MTA/dGhpcy5pZGVhbEVkZ2VMZW5ndGg9MTA6dGhpcy5pZGVhbEVkZ2VMZW5ndGg9UC5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1QLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuc3ByaW5nQ29uc3RhbnQ9Ui5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCx0aGlzLnJlcHVsc2lvbkNvbnN0YW50PVIuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5ncmF2aXR5Q29uc3RhbnQ9Ui5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudD1SLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmdyYXZpdHlSYW5nZUZhY3Rvcj1SLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3Rvcj1SLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5wcnVuZWROb2Rlc0FsbD1bXSx0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucz0wLHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zPTAsdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMSx0aGlzLmNvb2xpbmdDeWNsZT0wLHRoaXMubWF4Q29vbGluZ0N5Y2xlPXRoaXMubWF4SXRlcmF0aW9ucy9SLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCx0aGlzLmZpbmFsVGVtcGVyYXR1cmU9Ui5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QvdGhpcy5tYXhJdGVyYXRpb25zLHRoaXMuY29vbGluZ0FkanVzdGVyPTEpfSxhZS5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKCl7dmFyIHNlPUYuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO3JldHVybiBzZSYmKHRoaXMuY3JlYXRlQmVuZHBvaW50cygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksdGhpcy5sZXZlbD0wLHRoaXMuY2xhc3NpY0xheW91dCgpfSxhZS5wcm90b3R5cGUuY2xhc3NpY0xheW91dD1mdW5jdGlvbigpe2lmKHRoaXMubm9kZXNXaXRoR3Jhdml0eT10aGlzLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG8oKSx0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbih0aGlzLm5vZGVzV2l0aEdyYXZpdHkpLHRoaXMuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5jYWxjSWRlYWxFZGdlTGVuZ3RocygpLHRoaXMuaW5jcmVtZW50YWwpe2lmKFAuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUwpe3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIGRlPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxYPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oeGUpe3JldHVybiBkZS5oYXMoeGUpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oWCl9fWVsc2V7dmFyIHNlPXRoaXMuZ2V0RmxhdEZvcmVzdCgpO2lmKHNlLmxlbmd0aD4wKXRoaXMucG9zaXRpb25Ob2Rlc1JhZGlhbGx5KHNlKTtlbHNle3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIGRlPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxYPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oZ2Upe3JldHVybiBkZS5oYXMoZ2UpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oWCksdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoKX19cmV0dXJuIHRoaXMuaW5pdFNwcmluZ0VtYmVkZGVyKCksdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpLCEwfSxhZS5wcm90b3R5cGUudGljaz1mdW5jdGlvbigpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zKyssdGhpcy50b3RhbEl0ZXJhdGlvbnM9PT10aGlzLm1heEl0ZXJhdGlvbnMmJiF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVSLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRD09MCYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApdGhpcy5pc1RyZWVHcm93aW5nPSEwO2Vsc2UgcmV0dXJuITA7dGhpcy5jb29saW5nQ3ljbGUrKyx0aGlzLmxheW91dFF1YWxpdHk9PTA/dGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGU6dGhpcy5sYXlvdXRRdWFsaXR5PT0xJiYodGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGUvMyksdGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItTWF0aC5wb3codGhpcy5jb29saW5nQ3ljbGUsTWF0aC5sb2coMTAwKih0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yLXRoaXMuZmluYWxUZW1wZXJhdHVyZSkpL01hdGgubG9nKHRoaXMubWF4Q29vbGluZ0N5Y2xlKSkvMTAwKnRoaXMuY29vbGluZ0FkanVzdGVyLHRoaXMuZmluYWxUZW1wZXJhdHVyZSksdGhpcy5hbmltYXRpb25QZXJpb2Q9TWF0aC5jZWlsKHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCpNYXRoLnNxcnQodGhpcy5jb29saW5nRmFjdG9yKSl9aWYodGhpcy5pc1RyZWVHcm93aW5nKXtpZih0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmdyb3dUcmVlKHRoaXMucHJ1bmVkTm9kZXNBbGwpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgc2U9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLGRlPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIHNlLmhhcyhXKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKGRlKSx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmNvb2xpbmdGYWN0b3I9Ui5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMfWVsc2UgdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMDt0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrfWlmKHRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKXJldHVybiEwO3RoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCkpLHRoaXMuY29vbGluZ0ZhY3Rvcj1SLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCksdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMrK312YXIgWD0hdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkLGdlPXRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzVHJlZUdyb3dpbmd8fHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzR3Jvd3RoRmluaXNoZWQ7cmV0dXJuIHRoaXMudG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLmNhbGNTcHJpbmdGb3JjZXMoKSx0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZXMoWCxnZSksdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcygpLHRoaXMubW92ZU5vZGVzKCksdGhpcy5hbmltYXRlKCksITF9LGFlLnByb3RvdHlwZS5nZXRQb3NpdGlvbnNEYXRhPWZ1bmN0aW9uKCl7Zm9yKHZhciBzZT10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLGRlPXt9LFg9MDtYPHNlLmxlbmd0aDtYKyspe3ZhciBnZT1zZVtYXS5yZWN0LFc9c2VbWF0uaWQ7ZGVbV109e2lkOlcseDpnZS5nZXRDZW50ZXJYKCkseTpnZS5nZXRDZW50ZXJZKCksdzpnZS53aWR0aCxoOmdlLmhlaWdodH19cmV0dXJuIGRlfSxhZS5wcm90b3R5cGUucnVuU3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q9MjUsdGhpcy5hbmltYXRpb25QZXJpb2Q9dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kO3ZhciBzZT0hMTtpZihSLkFOSU1BVEU9PT0iZHVyaW5nIil0aGlzLmVtaXQoImxheW91dHN0YXJ0ZWQiKTtlbHNle2Zvcig7IXNlOylzZT10aGlzLnRpY2soKTt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKX19LGFlLnByb3RvdHlwZS5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvPWZ1bmN0aW9uKCl7dmFyIHNlPVtdLGRlLFg9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0R3JhcGhzKCksZ2U9WC5sZW5ndGgsVztmb3IoVz0wO1c8Z2U7VysrKWRlPVhbV10sZGUudXBkYXRlQ29ubmVjdGVkKCksZGUuaXNDb25uZWN0ZWR8fChzZT1zZS5jb25jYXQoZGUuZ2V0Tm9kZXMoKSkpO3JldHVybiBzZX0sYWUucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHM9ZnVuY3Rpb24oKXt2YXIgc2U9W107c2U9c2UuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpO3ZhciBkZT1uZXcgU2V0LFg7Zm9yKFg9MDtYPHNlLmxlbmd0aDtYKyspe3ZhciBnZT1zZVtYXTtpZighZGUuaGFzKGdlKSl7dmFyIFc9Z2UuZ2V0U291cmNlKCkseGU9Z2UuZ2V0VGFyZ2V0KCk7aWYoVz09eGUpZ2UuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IEspLGdlLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBLKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKGdlKSxkZS5hZGQoZ2UpO2Vsc2V7dmFyIFU9W107aWYoVT1VLmNvbmNhdChXLmdldEVkZ2VMaXN0VG9Ob2RlKHhlKSksVT1VLmNvbmNhdCh4ZS5nZXRFZGdlTGlzdFRvTm9kZShXKSksIWRlLmhhcyhVWzBdKSl7aWYoVS5sZW5ndGg+MSl7dmFyIEZlO2ZvcihGZT0wO0ZlPFUubGVuZ3RoO0ZlKyspe3ZhciBQZT1VW0ZlXTtQZS5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgSyksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhQZSl9fVUuZm9yRWFjaChmdW5jdGlvbihqZSl7ZGUuYWRkKGplKX0pfX19aWYoZGUuc2l6ZT09c2UubGVuZ3RoKWJyZWFrfX0sYWUucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYWRpYWxseT1mdW5jdGlvbihzZSl7Zm9yKHZhciBkZT1uZXcgaigwLDApLFg9TWF0aC5jZWlsKE1hdGguc3FydChzZS5sZW5ndGgpKSxnZT0wLFc9MCx4ZT0wLFU9bmV3IEsoMCwwKSxGZT0wO0ZlPHNlLmxlbmd0aDtGZSsrKXtGZSVYPT0wJiYoeGU9MCxXPWdlLEZlIT0wJiYoVys9UC5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKSxnZT0wKTt2YXIgUGU9c2VbRmVdLGplPWVlLmZpbmRDZW50ZXJPZlRyZWUoUGUpO2RlLng9eGUsZGUueT1XLFU9YWUucmFkaWFsTGF5b3V0KFBlLGplLGRlKSxVLnk+Z2UmJihnZT1NYXRoLmZsb29yKFUueSkpLHhlPU1hdGguZmxvb3IoVS54K1AuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTil9dGhpcy50cmFuc2Zvcm0obmV3IEsoRi5XT1JMRF9DRU5URVJfWC1VLngvMixGLldPUkxEX0NFTlRFUl9ZLVUueS8yKSl9LGFlLnJhZGlhbExheW91dD1mdW5jdGlvbihzZSxkZSxYKXt2YXIgZ2U9TWF0aC5tYXgodGhpcy5tYXhEaWFnb25hbEluVHJlZShzZSksUC5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OKTthZS5icmFuY2hSYWRpYWxMYXlvdXQoZGUsbnVsbCwwLDM1OSwwLGdlKTt2YXIgVz1wZS5jYWxjdWxhdGVCb3VuZHMoc2UpLHhlPW5ldyBiZTt4ZS5zZXREZXZpY2VPcmdYKFcuZ2V0TWluWCgpKSx4ZS5zZXREZXZpY2VPcmdZKFcuZ2V0TWluWSgpKSx4ZS5zZXRXb3JsZE9yZ1goWC54KSx4ZS5zZXRXb3JsZE9yZ1koWC55KTtmb3IodmFyIFU9MDtVPHNlLmxlbmd0aDtVKyspe3ZhciBGZT1zZVtVXTtGZS50cmFuc2Zvcm0oeGUpfXZhciBQZT1uZXcgSyhXLmdldE1heFgoKSxXLmdldE1heFkoKSk7cmV0dXJuIHhlLmludmVyc2VUcmFuc2Zvcm1Qb2ludChQZSl9LGFlLmJyYW5jaFJhZGlhbExheW91dD1mdW5jdGlvbihzZSxkZSxYLGdlLFcseGUpe3ZhciBVPShnZS1YKzEpLzI7VTwwJiYoVSs9MTgwKTt2YXIgRmU9KFUrWCklMzYwLFBlPUZlKm9lLlRXT19QSS8zNjAsamU9VypNYXRoLmNvcyhQZSksSWU9VypNYXRoLnNpbihQZSk7c2Uuc2V0Q2VudGVyKGplLEllKTt2YXIgU2U9W107U2U9U2UuY29uY2F0KHNlLmdldEVkZ2VzKCkpO3ZhciBDZT1TZS5sZW5ndGg7ZGUhPW51bGwmJkNlLS07Zm9yKHZhciBrZT0wLEtlPVNlLmxlbmd0aCxGdCxOZT1zZS5nZXRFZGdlc0JldHdlZW4oZGUpO05lLmxlbmd0aD4xOyl7dmFyIGduPU5lWzBdO05lLnNwbGljZSgwLDEpO3ZhciBfdD1TZS5pbmRleE9mKGduKTtfdD49MCYmU2Uuc3BsaWNlKF90LDEpLEtlLS0sQ2UtLX1kZSE9bnVsbD9GdD0oU2UuaW5kZXhPZihOZVswXSkrMSklS2U6RnQ9MDtmb3IodmFyIEV0PU1hdGguYWJzKGdlLVgpL0NlLEd0PUZ0O2tlIT1DZTtHdD0rK0d0JUtlKXt2YXIgbG49U2VbR3RdLmdldE90aGVyRW5kKHNlKTtpZihsbiE9ZGUpe3ZhciB4dD0oWCtrZSpFdCklMzYwLFB0PSh4dCtFdCklMzYwO2FlLmJyYW5jaFJhZGlhbExheW91dChsbixzZSx4dCxQdCxXK3hlLHhlKSxrZSsrfX19LGFlLm1heERpYWdvbmFsSW5UcmVlPWZ1bmN0aW9uKHNlKXtmb3IodmFyIGRlPWllLk1JTl9WQUxVRSxYPTA7WDxzZS5sZW5ndGg7WCsrKXt2YXIgZ2U9c2VbWF0sVz1nZS5nZXREaWFnb25hbCgpO1c+ZGUmJihkZT1XKX1yZXR1cm4gZGV9LGFlLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMioodGhpcy5sZXZlbCsxKSp0aGlzLmlkZWFsRWRnZUxlbmd0aH0sYWUucHJvdG90eXBlLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgc2U9dGhpcyxkZT17fTt0aGlzLm1lbWJlckdyb3Vwcz17fSx0aGlzLmlkVG9EdW1teU5vZGU9e307Zm9yKHZhciBYPVtdLGdlPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksVz0wO1c8Z2UubGVuZ3RoO1crKyl7dmFyIHhlPWdlW1ddLFU9eGUuZ2V0UGFyZW50KCk7dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKHhlKT09PTAmJihVLmlkPT1udWxsfHwhdGhpcy5nZXRUb0JlVGlsZWQoVSkpJiZYLnB1c2goeGUpfWZvcih2YXIgVz0wO1c8WC5sZW5ndGg7VysrKXt2YXIgeGU9WFtXXSxGZT14ZS5nZXRQYXJlbnQoKS5pZDt0eXBlb2YgZGVbRmVdPiJ1IiYmKGRlW0ZlXT1bXSksZGVbRmVdPWRlW0ZlXS5jb25jYXQoeGUpfU9iamVjdC5rZXlzKGRlKS5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtpZihkZVtQZV0ubGVuZ3RoPjEpe3ZhciBqZT0iRHVtbXlDb21wb3VuZF8iK1BlO3NlLm1lbWJlckdyb3Vwc1tqZV09ZGVbUGVdO3ZhciBJZT1kZVtQZV1bMF0uZ2V0UGFyZW50KCksU2U9bmV3IF8oc2UuZ3JhcGhNYW5hZ2VyKTtTZS5pZD1qZSxTZS5wYWRkaW5nTGVmdD1JZS5wYWRkaW5nTGVmdHx8MCxTZS5wYWRkaW5nUmlnaHQ9SWUucGFkZGluZ1JpZ2h0fHwwLFNlLnBhZGRpbmdCb3R0b209SWUucGFkZGluZ0JvdHRvbXx8MCxTZS5wYWRkaW5nVG9wPUllLnBhZGRpbmdUb3B8fDAsc2UuaWRUb0R1bW15Tm9kZVtqZV09U2U7dmFyIENlPXNlLmdldEdyYXBoTWFuYWdlcigpLmFkZChzZS5uZXdHcmFwaCgpLFNlKSxrZT1JZS5nZXRDaGlsZCgpO2tlLmFkZChTZSk7Zm9yKHZhciBLZT0wO0tlPGRlW1BlXS5sZW5ndGg7S2UrKyl7dmFyIEZ0PWRlW1BlXVtLZV07a2UucmVtb3ZlKEZ0KSxDZS5hZGQoRnQpfX19KX0sYWUucHJvdG90eXBlLmNsZWFyQ29tcG91bmRzPWZ1bmN0aW9uKCl7dmFyIHNlPXt9LGRlPXt9O3RoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7Zm9yKHZhciBYPTA7WDx0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoO1grKylkZVt0aGlzLmNvbXBvdW5kT3JkZXJbWF0uaWRdPXRoaXMuY29tcG91bmRPcmRlcltYXSxzZVt0aGlzLmNvbXBvdW5kT3JkZXJbWF0uaWRdPVtdLmNvbmNhdCh0aGlzLmNvbXBvdW5kT3JkZXJbWF0uZ2V0Q2hpbGQoKS5nZXROb2RlcygpKSx0aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUodGhpcy5jb21wb3VuZE9yZGVyW1hdLmdldENoaWxkKCkpLHRoaXMuY29tcG91bmRPcmRlcltYXS5jaGlsZD1udWxsO3RoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLnRpbGVDb21wb3VuZE1lbWJlcnMoc2UsZGUpfSxhZS5wcm90b3R5cGUuY2xlYXJaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBzZT10aGlzLGRlPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaz1bXTtPYmplY3Qua2V5cyh0aGlzLm1lbWJlckdyb3VwcykuZm9yRWFjaChmdW5jdGlvbihYKXt2YXIgZ2U9c2UuaWRUb0R1bW15Tm9kZVtYXTtkZVtYXT1zZS50aWxlTm9kZXMoc2UubWVtYmVyR3JvdXBzW1hdLGdlLnBhZGRpbmdMZWZ0K2dlLnBhZGRpbmdSaWdodCksZ2UucmVjdC53aWR0aD1kZVtYXS53aWR0aCxnZS5yZWN0LmhlaWdodD1kZVtYXS5oZWlnaHR9KX0sYWUucHJvdG90eXBlLnJlcG9wdWxhdGVDb21wb3VuZHM9ZnVuY3Rpb24oKXtmb3IodmFyIHNlPXRoaXMuY29tcG91bmRPcmRlci5sZW5ndGgtMTtzZT49MDtzZS0tKXt2YXIgZGU9dGhpcy5jb21wb3VuZE9yZGVyW3NlXSxYPWRlLmlkLGdlPWRlLnBhZGRpbmdMZWZ0LFc9ZGUucGFkZGluZ1RvcDt0aGlzLmFkanVzdExvY2F0aW9ucyh0aGlzLnRpbGVkTWVtYmVyUGFja1tYXSxkZS5yZWN0LngsZGUucmVjdC55LGdlLFcpfX0sYWUucHJvdG90eXBlLnJlcG9wdWxhdGVaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBzZT10aGlzLGRlPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztPYmplY3Qua2V5cyhkZSkuZm9yRWFjaChmdW5jdGlvbihYKXt2YXIgZ2U9c2UuaWRUb0R1bW15Tm9kZVtYXSxXPWdlLnBhZGRpbmdMZWZ0LHhlPWdlLnBhZGRpbmdUb3A7c2UuYWRqdXN0TG9jYXRpb25zKGRlW1hdLGdlLnJlY3QueCxnZS5yZWN0LnksVyx4ZSl9KX0sYWUucHJvdG90eXBlLmdldFRvQmVUaWxlZD1mdW5jdGlvbihzZSl7dmFyIGRlPXNlLmlkO2lmKHRoaXMudG9CZVRpbGVkW2RlXSE9bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbZGVdO3ZhciBYPXNlLmdldENoaWxkKCk7aWYoWD09bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbZGVdPSExLCExO2Zvcih2YXIgZ2U9WC5nZXROb2RlcygpLFc9MDtXPGdlLmxlbmd0aDtXKyspe3ZhciB4ZT1nZVtXXTtpZih0aGlzLmdldE5vZGVEZWdyZWUoeGUpPjApcmV0dXJuIHRoaXMudG9CZVRpbGVkW2RlXT0hMSwhMTtpZih4ZS5nZXRDaGlsZCgpPT1udWxsKXt0aGlzLnRvQmVUaWxlZFt4ZS5pZF09ITE7Y29udGludWV9aWYoIXRoaXMuZ2V0VG9CZVRpbGVkKHhlKSlyZXR1cm4gdGhpcy50b0JlVGlsZWRbZGVdPSExLCExfXJldHVybiB0aGlzLnRvQmVUaWxlZFtkZV09ITAsITB9LGFlLnByb3RvdHlwZS5nZXROb2RlRGVncmVlPWZ1bmN0aW9uKHNlKXtzZS5pZDtmb3IodmFyIGRlPXNlLmdldEVkZ2VzKCksWD0wLGdlPTA7Z2U8ZGUubGVuZ3RoO2dlKyspe3ZhciBXPWRlW2dlXTtXLmdldFNvdXJjZSgpLmlkIT09Vy5nZXRUYXJnZXQoKS5pZCYmKFg9WCsxKX1yZXR1cm4gWH0sYWUucHJvdG90eXBlLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW49ZnVuY3Rpb24oc2Upe3ZhciBkZT10aGlzLmdldE5vZGVEZWdyZWUoc2UpO2lmKHNlLmdldENoaWxkKCk9PW51bGwpcmV0dXJuIGRlO2Zvcih2YXIgWD1zZS5nZXRDaGlsZCgpLmdldE5vZGVzKCksZ2U9MDtnZTxYLmxlbmd0aDtnZSsrKXt2YXIgVz1YW2dlXTtkZSs9dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKFcpfXJldHVybiBkZX0sYWUucHJvdG90eXBlLnBlcmZvcm1ERlNPbkNvbXBvdW5kcz1mdW5jdGlvbigpe3RoaXMuY29tcG91bmRPcmRlcj1bXSx0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpKX0sYWUucHJvdG90eXBlLmZpbGxDb21wZXhPcmRlckJ5REZTPWZ1bmN0aW9uKHNlKXtmb3IodmFyIGRlPTA7ZGU8c2UubGVuZ3RoO2RlKyspe3ZhciBYPXNlW2RlXTtYLmdldENoaWxkKCkhPW51bGwmJnRoaXMuZmlsbENvbXBleE9yZGVyQnlERlMoWC5nZXRDaGlsZCgpLmdldE5vZGVzKCkpLHRoaXMuZ2V0VG9CZVRpbGVkKFgpJiZ0aGlzLmNvbXBvdW5kT3JkZXIucHVzaChYKX19LGFlLnByb3RvdHlwZS5hZGp1c3RMb2NhdGlvbnM9ZnVuY3Rpb24oc2UsZGUsWCxnZSxXKXtkZSs9Z2UsWCs9Vztmb3IodmFyIHhlPWRlLFU9MDtVPHNlLnJvd3MubGVuZ3RoO1UrKyl7dmFyIEZlPXNlLnJvd3NbVV07ZGU9eGU7Zm9yKHZhciBQZT0wLGplPTA7amU8RmUubGVuZ3RoO2plKyspe3ZhciBJZT1GZVtqZV07SWUucmVjdC54PWRlLEllLnJlY3QueT1YLGRlKz1JZS5yZWN0LndpZHRoK3NlLmhvcml6b250YWxQYWRkaW5nLEllLnJlY3QuaGVpZ2h0PlBlJiYoUGU9SWUucmVjdC5oZWlnaHQpfVgrPVBlK3NlLnZlcnRpY2FsUGFkZGluZ319LGFlLnByb3RvdHlwZS50aWxlQ29tcG91bmRNZW1iZXJzPWZ1bmN0aW9uKHNlLGRlKXt2YXIgWD10aGlzO3RoaXMudGlsZWRNZW1iZXJQYWNrPVtdLE9iamVjdC5rZXlzKHNlKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2YXIgVz1kZVtnZV07WC50aWxlZE1lbWJlclBhY2tbZ2VdPVgudGlsZU5vZGVzKHNlW2dlXSxXLnBhZGRpbmdMZWZ0K1cucGFkZGluZ1JpZ2h0KSxXLnJlY3Qud2lkdGg9WC50aWxlZE1lbWJlclBhY2tbZ2VdLndpZHRoLFcucmVjdC5oZWlnaHQ9WC50aWxlZE1lbWJlclBhY2tbZ2VdLmhlaWdodH0pfSxhZS5wcm90b3R5cGUudGlsZU5vZGVzPWZ1bmN0aW9uKHNlLGRlKXt2YXIgWD1QLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMLGdlPVAuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCxXPXtyb3dzOltdLHJvd1dpZHRoOltdLHJvd0hlaWdodDpbXSx3aWR0aDowLGhlaWdodDpkZSx2ZXJ0aWNhbFBhZGRpbmc6WCxob3Jpem9udGFsUGFkZGluZzpnZX07c2Uuc29ydChmdW5jdGlvbihGZSxQZSl7cmV0dXJuIEZlLnJlY3Qud2lkdGgqRmUucmVjdC5oZWlnaHQ+UGUucmVjdC53aWR0aCpQZS5yZWN0LmhlaWdodD8tMTpGZS5yZWN0LndpZHRoKkZlLnJlY3QuaGVpZ2h0PFBlLnJlY3Qud2lkdGgqUGUucmVjdC5oZWlnaHQ/MTowfSk7Zm9yKHZhciB4ZT0wO3hlPHNlLmxlbmd0aDt4ZSsrKXt2YXIgVT1zZVt4ZV07Vy5yb3dzLmxlbmd0aD09MD90aGlzLmluc2VydE5vZGVUb1JvdyhXLFUsMCxkZSk6dGhpcy5jYW5BZGRIb3Jpem9udGFsKFcsVS5yZWN0LndpZHRoLFUucmVjdC5oZWlnaHQpP3RoaXMuaW5zZXJ0Tm9kZVRvUm93KFcsVSx0aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoVyksZGUpOnRoaXMuaW5zZXJ0Tm9kZVRvUm93KFcsVSxXLnJvd3MubGVuZ3RoLGRlKSx0aGlzLnNoaWZ0VG9MYXN0Um93KFcpfXJldHVybiBXfSxhZS5wcm90b3R5cGUuaW5zZXJ0Tm9kZVRvUm93PWZ1bmN0aW9uKHNlLGRlLFgsZ2Upe3ZhciBXPWdlO2lmKFg9PXNlLnJvd3MubGVuZ3RoKXt2YXIgeGU9W107c2Uucm93cy5wdXNoKHhlKSxzZS5yb3dXaWR0aC5wdXNoKFcpLHNlLnJvd0hlaWdodC5wdXNoKDApfXZhciBVPXNlLnJvd1dpZHRoW1hdK2RlLnJlY3Qud2lkdGg7c2Uucm93c1tYXS5sZW5ndGg+MCYmKFUrPXNlLmhvcml6b250YWxQYWRkaW5nKSxzZS5yb3dXaWR0aFtYXT1VLHNlLndpZHRoPFUmJihzZS53aWR0aD1VKTt2YXIgRmU9ZGUucmVjdC5oZWlnaHQ7WD4wJiYoRmUrPXNlLnZlcnRpY2FsUGFkZGluZyk7dmFyIFBlPTA7RmU+c2Uucm93SGVpZ2h0W1hdJiYoUGU9c2Uucm93SGVpZ2h0W1hdLHNlLnJvd0hlaWdodFtYXT1GZSxQZT1zZS5yb3dIZWlnaHRbWF0tUGUpLHNlLmhlaWdodCs9UGUsc2Uucm93c1tYXS5wdXNoKGRlKX0sYWUucHJvdG90eXBlLmdldFNob3J0ZXN0Um93SW5kZXg9ZnVuY3Rpb24oc2Upe2Zvcih2YXIgZGU9LTEsWD1OdW1iZXIuTUFYX1ZBTFVFLGdlPTA7Z2U8c2Uucm93cy5sZW5ndGg7Z2UrKylzZS5yb3dXaWR0aFtnZV08WCYmKGRlPWdlLFg9c2Uucm93V2lkdGhbZ2VdKTtyZXR1cm4gZGV9LGFlLnByb3RvdHlwZS5nZXRMb25nZXN0Um93SW5kZXg9ZnVuY3Rpb24oc2Upe2Zvcih2YXIgZGU9LTEsWD1OdW1iZXIuTUlOX1ZBTFVFLGdlPTA7Z2U8c2Uucm93cy5sZW5ndGg7Z2UrKylzZS5yb3dXaWR0aFtnZV0+WCYmKGRlPWdlLFg9c2Uucm93V2lkdGhbZ2VdKTtyZXR1cm4gZGV9LGFlLnByb3RvdHlwZS5jYW5BZGRIb3Jpem9udGFsPWZ1bmN0aW9uKHNlLGRlLFgpe3ZhciBnZT10aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoc2UpO2lmKGdlPDApcmV0dXJuITA7dmFyIFc9c2Uucm93V2lkdGhbZ2VdO2lmKFcrc2UuaG9yaXpvbnRhbFBhZGRpbmcrZGU8PXNlLndpZHRoKXJldHVybiEwO3ZhciB4ZT0wO3NlLnJvd0hlaWdodFtnZV08WCYmZ2U+MCYmKHhlPVgrc2UudmVydGljYWxQYWRkaW5nLXNlLnJvd0hlaWdodFtnZV0pO3ZhciBVO3NlLndpZHRoLVc+PWRlK3NlLmhvcml6b250YWxQYWRkaW5nP1U9KHNlLmhlaWdodCt4ZSkvKFcrZGUrc2UuaG9yaXpvbnRhbFBhZGRpbmcpOlU9KHNlLmhlaWdodCt4ZSkvc2Uud2lkdGgseGU9WCtzZS52ZXJ0aWNhbFBhZGRpbmc7dmFyIEZlO3JldHVybiBzZS53aWR0aDxkZT9GZT0oc2UuaGVpZ2h0K3hlKS9kZTpGZT0oc2UuaGVpZ2h0K3hlKS9zZS53aWR0aCxGZTwxJiYoRmU9MS9GZSksVTwxJiYoVT0xL1UpLFU8RmV9LGFlLnByb3RvdHlwZS5zaGlmdFRvTGFzdFJvdz1mdW5jdGlvbihzZSl7dmFyIGRlPXRoaXMuZ2V0TG9uZ2VzdFJvd0luZGV4KHNlKSxYPXNlLnJvd1dpZHRoLmxlbmd0aC0xLGdlPXNlLnJvd3NbZGVdLFc9Z2VbZ2UubGVuZ3RoLTFdLHhlPVcud2lkdGgrc2UuaG9yaXpvbnRhbFBhZGRpbmc7aWYoc2Uud2lkdGgtc2Uucm93V2lkdGhbWF0+eGUmJmRlIT1YKXtnZS5zcGxpY2UoLTEsMSksc2Uucm93c1tYXS5wdXNoKFcpLHNlLnJvd1dpZHRoW2RlXT1zZS5yb3dXaWR0aFtkZV0teGUsc2Uucm93V2lkdGhbWF09c2Uucm93V2lkdGhbWF0reGUsc2Uud2lkdGg9c2Uucm93V2lkdGhbaW5zdGFuY2UuZ2V0TG9uZ2VzdFJvd0luZGV4KHNlKV07Zm9yKHZhciBVPU51bWJlci5NSU5fVkFMVUUsRmU9MDtGZTxnZS5sZW5ndGg7RmUrKylnZVtGZV0uaGVpZ2h0PlUmJihVPWdlW0ZlXS5oZWlnaHQpO2RlPjAmJihVKz1zZS52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBQZT1zZS5yb3dIZWlnaHRbZGVdK3NlLnJvd0hlaWdodFtYXTtzZS5yb3dIZWlnaHRbZGVdPVUsc2Uucm93SGVpZ2h0W1hdPFcuaGVpZ2h0K3NlLnZlcnRpY2FsUGFkZGluZyYmKHNlLnJvd0hlaWdodFtYXT1XLmhlaWdodCtzZS52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBqZT1zZS5yb3dIZWlnaHRbZGVdK3NlLnJvd0hlaWdodFtYXTtzZS5oZWlnaHQrPWplLVBlLHRoaXMuc2hpZnRUb0xhc3RSb3coc2UpfX0sYWUucHJvdG90eXBlLnRpbGluZ1ByZUxheW91dD1mdW5jdGlvbigpe1AuVElMRSYmKHRoaXMuZ3JvdXBaZXJvRGVncmVlTWVtYmVycygpLHRoaXMuY2xlYXJDb21wb3VuZHMoKSx0aGlzLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnMoKSl9LGFlLnByb3RvdHlwZS50aWxpbmdQb3N0TGF5b3V0PWZ1bmN0aW9uKCl7UC5USUxFJiYodGhpcy5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnMoKSx0aGlzLnJlcG9wdWxhdGVDb21wb3VuZHMoKSl9LGFlLnByb3RvdHlwZS5yZWR1Y2VUcmVlcz1mdW5jdGlvbigpe2Zvcih2YXIgc2U9W10sZGU9ITAsWDtkZTspe3ZhciBnZT10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLFc9W107ZGU9ITE7Zm9yKHZhciB4ZT0wO3hlPGdlLmxlbmd0aDt4ZSsrKVg9Z2VbeGVdLFguZ2V0RWRnZXMoKS5sZW5ndGg9PTEmJiFYLmdldEVkZ2VzKClbMF0uaXNJbnRlckdyYXBoJiZYLmdldENoaWxkKCk9PW51bGwmJihXLnB1c2goW1gsWC5nZXRFZGdlcygpWzBdLFguZ2V0T3duZXIoKV0pLGRlPSEwKTtpZihkZT09ITApe2Zvcih2YXIgVT1bXSxGZT0wO0ZlPFcubGVuZ3RoO0ZlKyspV1tGZV1bMF0uZ2V0RWRnZXMoKS5sZW5ndGg9PTEmJihVLnB1c2goV1tGZV0pLFdbRmVdWzBdLmdldE93bmVyKCkucmVtb3ZlKFdbRmVdWzBdKSk7c2UucHVzaChVKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpfX10aGlzLnBydW5lZE5vZGVzQWxsPXNlfSxhZS5wcm90b3R5cGUuZ3Jvd1RyZWU9ZnVuY3Rpb24oc2Upe2Zvcih2YXIgZGU9c2UubGVuZ3RoLFg9c2VbZGUtMV0sZ2UsVz0wO1c8WC5sZW5ndGg7VysrKWdlPVhbV10sdGhpcy5maW5kUGxhY2Vmb3JQcnVuZWROb2RlKGdlKSxnZVsyXS5hZGQoZ2VbMF0pLGdlWzJdLmFkZChnZVsxXSxnZVsxXS5zb3VyY2UsZ2VbMV0udGFyZ2V0KTtzZS5zcGxpY2Uoc2UubGVuZ3RoLTEsMSksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX0sYWUucHJvdG90eXBlLmZpbmRQbGFjZWZvclBydW5lZE5vZGU9ZnVuY3Rpb24oc2Upe3ZhciBkZSxYLGdlPXNlWzBdO2dlPT1zZVsxXS5zb3VyY2U/WD1zZVsxXS50YXJnZXQ6WD1zZVsxXS5zb3VyY2U7dmFyIFc9WC5zdGFydFgseGU9WC5maW5pc2hYLFU9WC5zdGFydFksRmU9WC5maW5pc2hZLFBlPTAsamU9MCxJZT0wLFNlPTAsQ2U9W1BlLEllLGplLFNlXTtpZihVPjApZm9yKHZhciBrZT1XO2tlPD14ZTtrZSsrKUNlWzBdKz10aGlzLmdyaWRba2VdW1UtMV0ubGVuZ3RoK3RoaXMuZ3JpZFtrZV1bVV0ubGVuZ3RoLTE7aWYoeGU8dGhpcy5ncmlkLmxlbmd0aC0xKWZvcih2YXIga2U9VTtrZTw9RmU7a2UrKylDZVsxXSs9dGhpcy5ncmlkW3hlKzFdW2tlXS5sZW5ndGgrdGhpcy5ncmlkW3hlXVtrZV0ubGVuZ3RoLTE7aWYoRmU8dGhpcy5ncmlkWzBdLmxlbmd0aC0xKWZvcih2YXIga2U9VztrZTw9eGU7a2UrKylDZVsyXSs9dGhpcy5ncmlkW2tlXVtGZSsxXS5sZW5ndGgrdGhpcy5ncmlkW2tlXVtGZV0ubGVuZ3RoLTE7aWYoVz4wKWZvcih2YXIga2U9VTtrZTw9RmU7a2UrKylDZVszXSs9dGhpcy5ncmlkW1ctMV1ba2VdLmxlbmd0aCt0aGlzLmdyaWRbV11ba2VdLmxlbmd0aC0xO2Zvcih2YXIgS2U9aWUuTUFYX1ZBTFVFLEZ0LE5lLGduPTA7Z248Q2UubGVuZ3RoO2duKyspQ2VbZ25dPEtlPyhLZT1DZVtnbl0sRnQ9MSxOZT1nbik6Q2VbZ25dPT1LZSYmRnQrKztpZihGdD09MyYmS2U9PTApQ2VbMF09PTAmJkNlWzFdPT0wJiZDZVsyXT09MD9kZT0xOkNlWzBdPT0wJiZDZVsxXT09MCYmQ2VbM109PTA/ZGU9MDpDZVswXT09MCYmQ2VbMl09PTAmJkNlWzNdPT0wP2RlPTM6Q2VbMV09PTAmJkNlWzJdPT0wJiZDZVszXT09MCYmKGRlPTIpO2Vsc2UgaWYoRnQ9PTImJktlPT0wKXt2YXIgX3Q9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjIpO0NlWzBdPT0wJiZDZVsxXT09MD9fdD09MD9kZT0wOmRlPTE6Q2VbMF09PTAmJkNlWzJdPT0wP190PT0wP2RlPTA6ZGU9MjpDZVswXT09MCYmQ2VbM109PTA/X3Q9PTA/ZGU9MDpkZT0zOkNlWzFdPT0wJiZDZVsyXT09MD9fdD09MD9kZT0xOmRlPTI6Q2VbMV09PTAmJkNlWzNdPT0wP190PT0wP2RlPTE6ZGU9MzpfdD09MD9kZT0yOmRlPTN9ZWxzZSBpZihGdD09NCYmS2U9PTApe3ZhciBfdD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqNCk7ZGU9X3R9ZWxzZSBkZT1OZTtkZT09MD9nZS5zZXRDZW50ZXIoWC5nZXRDZW50ZXJYKCksWC5nZXRDZW50ZXJZKCktWC5nZXRIZWlnaHQoKS8yLVIuREVGQVVMVF9FREdFX0xFTkdUSC1nZS5nZXRIZWlnaHQoKS8yKTpkZT09MT9nZS5zZXRDZW50ZXIoWC5nZXRDZW50ZXJYKCkrWC5nZXRXaWR0aCgpLzIrUi5ERUZBVUxUX0VER0VfTEVOR1RIK2dlLmdldFdpZHRoKCkvMixYLmdldENlbnRlclkoKSk6ZGU9PTI/Z2Uuc2V0Q2VudGVyKFguZ2V0Q2VudGVyWCgpLFguZ2V0Q2VudGVyWSgpK1guZ2V0SGVpZ2h0KCkvMitSLkRFRkFVTFRfRURHRV9MRU5HVEgrZ2UuZ2V0SGVpZ2h0KCkvMik6Z2Uuc2V0Q2VudGVyKFguZ2V0Q2VudGVyWCgpLVguZ2V0V2lkdGgoKS8yLVIuREVGQVVMVF9FREdFX0xFTkdUSC1nZS5nZXRXaWR0aCgpLzIsWC5nZXRDZW50ZXJZKCkpfSxkLmV4cG9ydHM9YWV9LGZ1bmN0aW9uKGQscCx2KXt2YXIgYj17fTtiLmxheW91dEJhc2U9digwKSxiLkNvU0VDb25zdGFudHM9digxKSxiLkNvU0VFZGdlPXYoMiksYi5Db1NFR3JhcGg9digzKSxiLkNvU0VHcmFwaE1hbmFnZXI9dig0KSxiLkNvU0VMYXlvdXQ9dig2KSxiLkNvU0VOb2RlPXYoNSksZC5leHBvcnRzPWJ9XSl9KX0obndlKSksbndlLmV4cG9ydHN9KGZ1bmN0aW9uKGkscyl7KGZ1bmN0aW9uKGQscCl7aS5leHBvcnRzPXAoZG9uKCkpfSkoQWcsZnVuY3Rpb24odSl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBwPXt9O2Z1bmN0aW9uIHYoYil7aWYocFtiXSlyZXR1cm4gcFtiXS5leHBvcnRzO3ZhciB5PXBbYl09e2k6YixsOiExLGV4cG9ydHM6e319O3JldHVybiBkW2JdLmNhbGwoeS5leHBvcnRzLHkseS5leHBvcnRzLHYpLHkubD0hMCx5LmV4cG9ydHN9cmV0dXJuIHYubT1kLHYuYz1wLHYuaT1mdW5jdGlvbihiKXtyZXR1cm4gYn0sdi5kPWZ1bmN0aW9uKGIseSxUKXt2Lm8oYix5KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGIseSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OlR9KX0sdi5uPWZ1bmN0aW9uKGIpe3ZhciB5PWImJmIuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBiLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGJ9O3JldHVybiB2LmQoeSwiYSIseSkseX0sdi5vPWZ1bmN0aW9uKGIseSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLHkpfSx2LnA9IiIsdih2LnM9MSl9KFtmdW5jdGlvbihkLHApe2QuZXhwb3J0cz11fSxmdW5jdGlvbihkLHAsdil7dmFyIGI9digwKS5sYXlvdXRCYXNlLkxheW91dENvbnN0YW50cyx5PXYoMCkubGF5b3V0QmFzZS5GRExheW91dENvbnN0YW50cyxUPXYoMCkuQ29TRUNvbnN0YW50cyxfPXYoMCkuQ29TRUxheW91dCxBPXYoMCkuQ29TRU5vZGUsUD12KDApLmxheW91dEJhc2UuUG9pbnRELFI9digwKS5sYXlvdXRCYXNlLkRpbWVuc2lvbkQsRj17cmVhZHk6ZnVuY3Rpb24oKXt9LHN0b3A6ZnVuY3Rpb24oKXt9LHF1YWxpdHk6ImRlZmF1bHQiLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyZWZyZXNoOjMwLGZpdDohMCxwYWRkaW5nOjEwLHJhbmRvbWl6ZTohMCxub2RlUmVwdWxzaW9uOjQ1MDAsaWRlYWxFZGdlTGVuZ3RoOjUwLGVkZ2VFbGFzdGljaXR5Oi40NSxuZXN0aW5nRmFjdG9yOi4xLGdyYXZpdHk6LjI1LG51bUl0ZXI6MjUwMCx0aWxlOiEwLGFuaW1hdGU6ImVuZCIsYW5pbWF0aW9uRHVyYXRpb246NTAwLHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDoxMCx0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDoxMCxncmF2aXR5UmFuZ2VDb21wb3VuZDoxLjUsZ3Jhdml0eUNvbXBvdW5kOjEsZ3Jhdml0eVJhbmdlOjMuOCxpbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDouNX07ZnVuY3Rpb24gaihvZSxwZSl7dmFyIGJlPXt9O2Zvcih2YXIgYWUgaW4gb2UpYmVbYWVdPW9lW2FlXTtmb3IodmFyIGFlIGluIHBlKWJlW2FlXT1wZVthZV07cmV0dXJuIGJlfWZ1bmN0aW9uIEsob2Upe3RoaXMub3B0aW9ucz1qKEYsb2UpLGVlKHRoaXMub3B0aW9ucyl9dmFyIGVlPWZ1bmN0aW9uKHBlKXtwZS5ub2RlUmVwdWxzaW9uIT1udWxsJiYoVC5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD15LkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIPXBlLm5vZGVSZXB1bHNpb24pLHBlLmlkZWFsRWRnZUxlbmd0aCE9bnVsbCYmKFQuREVGQVVMVF9FREdFX0xFTkdUSD15LkRFRkFVTFRfRURHRV9MRU5HVEg9cGUuaWRlYWxFZGdlTGVuZ3RoKSxwZS5lZGdlRWxhc3RpY2l0eSE9bnVsbCYmKFQuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9eS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD1wZS5lZGdlRWxhc3RpY2l0eSkscGUubmVzdGluZ0ZhY3RvciE9bnVsbCYmKFQuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj15LlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9cGUubmVzdGluZ0ZhY3RvcikscGUuZ3Jhdml0eSE9bnVsbCYmKFQuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPXkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPXBlLmdyYXZpdHkpLHBlLm51bUl0ZXIhPW51bGwmJihULk1BWF9JVEVSQVRJT05TPXkuTUFYX0lURVJBVElPTlM9cGUubnVtSXRlcikscGUuZ3Jhdml0eVJhbmdlIT1udWxsJiYoVC5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPXkuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1wZS5ncmF2aXR5UmFuZ2UpLHBlLmdyYXZpdHlDb21wb3VuZCE9bnVsbCYmKFQuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPXkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPXBlLmdyYXZpdHlDb21wb3VuZCkscGUuZ3Jhdml0eVJhbmdlQ29tcG91bmQhPW51bGwmJihULkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPXBlLmdyYXZpdHlSYW5nZUNvbXBvdW5kKSxwZS5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCE9bnVsbCYmKFQuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD15LkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9cGUuaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwpLHBlLnF1YWxpdHk9PSJkcmFmdCI/Yi5RVUFMSVRZPTA6cGUucXVhbGl0eT09InByb29mIj9iLlFVQUxJVFk9MjpiLlFVQUxJVFk9MSxULk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz15Lk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1iLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1wZS5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMsVC5ERUZBVUxUX0lOQ1JFTUVOVEFMPXkuREVGQVVMVF9JTkNSRU1FTlRBTD1iLkRFRkFVTFRfSU5DUkVNRU5UQUw9IXBlLnJhbmRvbWl6ZSxULkFOSU1BVEU9eS5BTklNQVRFPWIuQU5JTUFURT1wZS5hbmltYXRlLFQuVElMRT1wZS50aWxlLFQuVElMSU5HX1BBRERJTkdfVkVSVElDQUw9dHlwZW9mIHBlLnRpbGluZ1BhZGRpbmdWZXJ0aWNhbD09ImZ1bmN0aW9uIj9wZS50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpOnBlLnRpbGluZ1BhZGRpbmdWZXJ0aWNhbCxULlRJTElOR19QQURESU5HX0hPUklaT05UQUw9dHlwZW9mIHBlLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsPT0iZnVuY3Rpb24iP3BlLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLmNhbGwoKTpwZS50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbH07Sy5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIG9lLHBlLGJlPXRoaXMub3B0aW9uczt0aGlzLmlkVG9MTm9kZT17fTt2YXIgYWU9dGhpcy5sYXlvdXQ9bmV3IF8sbmU9dGhpcztuZS5zdG9wcGVkPSExLHRoaXMuY3k9dGhpcy5vcHRpb25zLmN5LHRoaXMuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDp0aGlzfSk7dmFyIHNlPWFlLm5ld0dyYXBoTWFuYWdlcigpO3RoaXMuZ209c2U7dmFyIGRlPXRoaXMub3B0aW9ucy5lbGVzLm5vZGVzKCksWD10aGlzLm9wdGlvbnMuZWxlcy5lZGdlcygpO3RoaXMucm9vdD1zZS5hZGRSb290KCksdGhpcy5wcm9jZXNzQ2hpbGRyZW5MaXN0KHRoaXMucm9vdCx0aGlzLmdldFRvcE1vc3ROb2RlcyhkZSksYWUpO2Zvcih2YXIgZ2U9MDtnZTxYLmxlbmd0aDtnZSsrKXt2YXIgVz1YW2dlXSx4ZT10aGlzLmlkVG9MTm9kZVtXLmRhdGEoInNvdXJjZSIpXSxVPXRoaXMuaWRUb0xOb2RlW1cuZGF0YSgidGFyZ2V0IildO2lmKHhlIT09VSYmeGUuZ2V0RWRnZXNCZXR3ZWVuKFUpLmxlbmd0aD09MCl7dmFyIEZlPXNlLmFkZChhZS5uZXdFZGdlKCkseGUsVSk7RmUuaWQ9Vy5pZCgpfX12YXIgUGU9ZnVuY3Rpb24oU2UsQ2Upe3R5cGVvZiBTZT09Im51bWJlciImJihTZT1DZSk7dmFyIGtlPVNlLmRhdGEoImlkIiksS2U9bmUuaWRUb0xOb2RlW2tlXTtyZXR1cm57eDpLZS5nZXRSZWN0KCkuZ2V0Q2VudGVyWCgpLHk6S2UuZ2V0UmVjdCgpLmdldENlbnRlclkoKX19LGplPWZ1bmN0aW9uIEllKCl7Zm9yKHZhciBTZT1mdW5jdGlvbigpe2JlLmZpdCYmYmUuY3kuZml0KGJlLmVsZXMsYmUucGFkZGluZyksb2V8fChvZT0hMCxuZS5jeS5vbmUoImxheW91dHJlYWR5IixiZS5yZWFkeSksbmUuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDpuZX0pKX0sQ2U9bmUub3B0aW9ucy5yZWZyZXNoLGtlLEtlPTA7S2U8Q2UmJiFrZTtLZSsrKWtlPW5lLnN0b3BwZWR8fG5lLmxheW91dC50aWNrKCk7aWYoa2Upe2FlLmNoZWNrTGF5b3V0U3VjY2VzcygpJiYhYWUuaXNTdWJMYXlvdXQmJmFlLmRvUG9zdExheW91dCgpLGFlLnRpbGluZ1Bvc3RMYXlvdXQmJmFlLnRpbGluZ1Bvc3RMYXlvdXQoKSxhZS5pc0xheW91dEZpbmlzaGVkPSEwLG5lLm9wdGlvbnMuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhQZSksU2UoKSxuZS5jeS5vbmUoImxheW91dHN0b3AiLG5lLm9wdGlvbnMuc3RvcCksbmUuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Om5lfSkscGUmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHBlKSxvZT0hMTtyZXR1cm59dmFyIEZ0PW5lLmxheW91dC5nZXRQb3NpdGlvbnNEYXRhKCk7YmUuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhmdW5jdGlvbihOZSxnbil7aWYodHlwZW9mIE5lPT0ibnVtYmVyIiYmKE5lPWduKSwhTmUuaXNQYXJlbnQoKSl7Zm9yKHZhciBfdD1OZS5pZCgpLEV0PUZ0W190XSxHdD1OZTtFdD09bnVsbCYmKEV0PUZ0W0d0LmRhdGEoInBhcmVudCIpXXx8RnRbIkR1bW15Q29tcG91bmRfIitHdC5kYXRhKCJwYXJlbnQiKV0sRnRbX3RdPUV0LEd0PUd0LnBhcmVudCgpWzBdLEd0IT1udWxsKTspO3JldHVybiBFdCE9bnVsbD97eDpFdC54LHk6RXQueX06e3g6TmUucG9zaXRpb24oIngiKSx5Ok5lLnBvc2l0aW9uKCJ5Iil9fX0pLFNlKCkscGU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEllKX07cmV0dXJuIGFlLmFkZExpc3RlbmVyKCJsYXlvdXRzdGFydGVkIixmdW5jdGlvbigpe25lLm9wdGlvbnMuYW5pbWF0ZT09PSJkdXJpbmciJiYocGU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGplKSl9KSxhZS5ydW5MYXlvdXQoKSx0aGlzLm9wdGlvbnMuYW5pbWF0ZSE9PSJkdXJpbmciJiYobmUub3B0aW9ucy5lbGVzLm5vZGVzKCkubm90KCI6cGFyZW50IikubGF5b3V0UG9zaXRpb25zKG5lLG5lLm9wdGlvbnMsUGUpLG9lPSExKSx0aGlzfSxLLnByb3RvdHlwZS5nZXRUb3BNb3N0Tm9kZXM9ZnVuY3Rpb24ob2Upe2Zvcih2YXIgcGU9e30sYmU9MDtiZTxvZS5sZW5ndGg7YmUrKylwZVtvZVtiZV0uaWQoKV09ITA7dmFyIGFlPW9lLmZpbHRlcihmdW5jdGlvbihuZSxzZSl7dHlwZW9mIG5lPT0ibnVtYmVyIiYmKG5lPXNlKTtmb3IodmFyIGRlPW5lLnBhcmVudCgpWzBdO2RlIT1udWxsOyl7aWYocGVbZGUuaWQoKV0pcmV0dXJuITE7ZGU9ZGUucGFyZW50KClbMF19cmV0dXJuITB9KTtyZXR1cm4gYWV9LEsucHJvdG90eXBlLnByb2Nlc3NDaGlsZHJlbkxpc3Q9ZnVuY3Rpb24ob2UscGUsYmUpe2Zvcih2YXIgYWU9cGUubGVuZ3RoLG5lPTA7bmU8YWU7bmUrKyl7dmFyIHNlPXBlW25lXSxkZT1zZS5jaGlsZHJlbigpLFgsZ2U9c2UubGF5b3V0RGltZW5zaW9ucyh7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOnRoaXMub3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHN9KTtpZihzZS5vdXRlcldpZHRoKCkhPW51bGwmJnNlLm91dGVySGVpZ2h0KCkhPW51bGw/WD1vZS5hZGQobmV3IEEoYmUuZ3JhcGhNYW5hZ2VyLG5ldyBQKHNlLnBvc2l0aW9uKCJ4IiktZ2Uudy8yLHNlLnBvc2l0aW9uKCJ5IiktZ2UuaC8yKSxuZXcgUihwYXJzZUZsb2F0KGdlLncpLHBhcnNlRmxvYXQoZ2UuaCkpKSk6WD1vZS5hZGQobmV3IEEodGhpcy5ncmFwaE1hbmFnZXIpKSxYLmlkPXNlLmRhdGEoImlkIiksWC5wYWRkaW5nTGVmdD1wYXJzZUludChzZS5jc3MoInBhZGRpbmciKSksWC5wYWRkaW5nVG9wPXBhcnNlSW50KHNlLmNzcygicGFkZGluZyIpKSxYLnBhZGRpbmdSaWdodD1wYXJzZUludChzZS5jc3MoInBhZGRpbmciKSksWC5wYWRkaW5nQm90dG9tPXBhcnNlSW50KHNlLmNzcygicGFkZGluZyIpKSx0aGlzLm9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzJiZzZS5pc1BhcmVudCgpKXt2YXIgVz1zZS5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITF9KS53LHhlPXNlLmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVOb2RlczohMX0pLmgsVT1zZS5jc3MoInRleHQtaGFsaWduIik7WC5sYWJlbFdpZHRoPVcsWC5sYWJlbEhlaWdodD14ZSxYLmxhYmVsUG9zPVV9aWYodGhpcy5pZFRvTE5vZGVbc2UuZGF0YSgiaWQiKV09WCxpc05hTihYLnJlY3QueCkmJihYLnJlY3QueD0wKSxpc05hTihYLnJlY3QueSkmJihYLnJlY3QueT0wKSxkZSE9bnVsbCYmZGUubGVuZ3RoPjApe3ZhciBGZTtGZT1iZS5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoYmUubmV3R3JhcGgoKSxYKSx0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QoRmUsZGUsYmUpfX19LEsucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9wcGVkPSEwLHRoaXN9O3ZhciBpZT1mdW5jdGlvbihwZSl7cGUoImxheW91dCIsImNvc2UtYmlsa2VudCIsSyl9O3R5cGVvZiBjeXRvc2NhcGU8InUiJiZpZShjeXRvc2NhcGUpLGQuZXhwb3J0cz1pZX1dKX0pfSkoZFdlKTt2YXIgZ29uPWRXZS5leHBvcnRzO2NvbnN0IHBvbj1oQyhnb24pLGJvbj0xMixtb249ZnVuY3Rpb24oaSxzLHUsZCl7cy5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIit1LmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitpLnR5cGUyU3RyKHUudHlwZSkpLmF0dHIoImQiLGBNMCAke3UuaGVpZ2h0LTV9IHYkey11LmhlaWdodCsyKjV9IHEwLC01IDUsLTUgaCR7dS53aWR0aC0yKjV9IHE1LDAgNSw1IHYke3UuaGVpZ2h0LTV9IEgwIFpgKSxzLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibm9kZS1saW5lLSIrZCkuYXR0cigieDEiLDApLmF0dHIoInkxIix1LmhlaWdodCkuYXR0cigieDIiLHUud2lkdGgpLmF0dHIoInkyIix1LmhlaWdodCl9LHZvbj1mdW5jdGlvbihpLHMsdSl7cy5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsIm5vZGUtIit1LmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitpLnR5cGUyU3RyKHUudHlwZSkpLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpLmF0dHIoIndpZHRoIix1LndpZHRoKX0sd29uPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPXUud2lkdGgscD11LmhlaWdodCx2PS4xNSpkLGI9LjI1KmQseT0uMzUqZCxUPS4yKmQ7cy5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIit1LmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitpLnR5cGUyU3RyKHUudHlwZSkpLmF0dHIoImQiLGBNMCAwIGEke3Z9LCR7dn0gMCAwLDEgJHtkKi4yNX0sJHstMSpkKi4xfQogICAgICBhJHt5fSwke3l9IDEgMCwxICR7ZCouNH0sJHstMSpkKi4xfQogICAgICBhJHtifSwke2J9IDEgMCwxICR7ZCouMzV9LCR7MSpkKi4yfQoKICAgICAgYSR7dn0sJHt2fSAxIDAsMSAke2QqLjE1fSwkezEqcCouMzV9CiAgICAgIGEke1R9LCR7VH0gMSAwLDEgJHstMSpkKi4xNX0sJHsxKnAqLjY1fQoKICAgICAgYSR7Yn0sJHt2fSAxIDAsMSAkey0xKmQqLjI1fSwke2QqLjE1fQogICAgICBhJHt5fSwke3l9IDEgMCwxICR7LTEqZCouNX0sMAogICAgICBhJHt2fSwke3Z9IDEgMCwxICR7LTEqZCouMjV9LCR7LTEqZCouMTV9CgogICAgICBhJHt2fSwke3Z9IDEgMCwxICR7LTEqZCouMX0sJHstMSpwKi4zNX0KICAgICAgYSR7VH0sJHtUfSAxIDAsMSAke2QqLjF9LCR7LTEqcCouNjV9CgogICAgSDAgVjAgWmApfSx5b249ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9dS53aWR0aCxwPXUuaGVpZ2h0LHY9LjE1KmQ7cy5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIit1LmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitpLnR5cGUyU3RyKHUudHlwZSkpLmF0dHIoImQiLGBNMCAwIGEke3Z9LCR7dn0gMSAwLDAgJHtkKi4yNX0sJHstMSpwKi4xfQogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7ZCouMjV9LDAKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAke2QqLjI1fSwwCiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHtkKi4yNX0sJHsxKnAqLjF9CgogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7ZCouMTV9LCR7MSpwKi4zM30KICAgICAgYSR7diouOH0sJHt2Ki44fSAxIDAsMCAwLCR7MSpwKi4zNH0KICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmQqLjE1fSwkezEqcCouMzN9CgogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7LTEqZCouMjV9LCR7cCouMTV9CiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHstMSpkKi4yNX0sMAogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7LTEqZCouMjV9LDAKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmQqLjI1fSwkey0xKnAqLjE1fQoKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmQqLjF9LCR7LTEqcCouMzN9CiAgICAgIGEke3YqLjh9LCR7diouOH0gMSAwLDAgMCwkey0xKnAqLjM0fQogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7ZCouMX0sJHstMSpwKi4zM30KCiAgICBIMCBWMCBaYCl9LHhvbj1mdW5jdGlvbihpLHMsdSl7cy5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImlkIiwibm9kZS0iK3UuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK2kudHlwZTJTdHIodS50eXBlKSkuYXR0cigiciIsdS53aWR0aC8yKX07ZnVuY3Rpb24ga29uKGkscyx1LGQscCl7cmV0dXJuIGkuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixkLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi54KyIsIit2Lnl9KS5qb2luKCIgIikpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhwLndpZHRoLXMpLzIrIiwgIit1KyIpIil9Y29uc3QgRW9uPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPXUuaGVpZ2h0LHY9ZC80LGI9dS53aWR0aC11LnBhZGRpbmcrMip2LHk9W3t4OnYseTowfSx7eDpiLXYseTowfSx7eDpiLHk6LWQvMn0se3g6Yi12LHk6LWR9LHt4OnYseTotZH0se3g6MCx5Oi1kLzJ9XTtrb24ocyxiLGQseSx1KX0sVG9uPWZ1bmN0aW9uKGkscyx1KXtzLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK3UuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK2kudHlwZTJTdHIodS50eXBlKSkuYXR0cigiaGVpZ2h0Iix1LmhlaWdodCkuYXR0cigicngiLHUucGFkZGluZykuYXR0cigicnkiLHUucGFkZGluZykuYXR0cigid2lkdGgiLHUud2lkdGgpfSxDb249ZnVuY3Rpb24oaSxzLHUsZCxwKXtjb25zdCB2PXAuaHRtbExhYmVscyxiPWQlKGJvbi0xKSx5PXMuYXBwZW5kKCJnIik7dS5zZWN0aW9uPWI7bGV0IFQ9InNlY3Rpb24tIitiO2I8MCYmKFQrPSIgc2VjdGlvbi1yb290IikseS5hdHRyKCJjbGFzcyIsKHUuY2xhc3M/dS5jbGFzcysiICI6IiIpKyJtaW5kbWFwLW5vZGUgIitUKTtjb25zdCBfPXkuYXBwZW5kKCJnIiksQT15LmFwcGVuZCgiZyIpLFA9dS5kZXNjci5yZXBsYWNlKC8oPGJyXC8qPikvZyxgCmApO0pRKEEsUCx7dXNlSHRtbExhYmVsczp2LHdpZHRoOnUud2lkdGgsY2xhc3NlczoibWluZG1hcC1ub2RlLWxhYmVsIn0pLHZ8fEEuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIik7Y29uc3QgUj1BLm5vZGUoKS5nZXRCQm94KCksW0ZdPU5DKHAuZm9udFNpemUpO2lmKHUuaGVpZ2h0PVIuaGVpZ2h0K0YqMS4xKi41K3UucGFkZGluZyx1LndpZHRoPVIud2lkdGgrMip1LnBhZGRpbmcsdS5pY29uKWlmKHUudHlwZT09PWkubm9kZVR5cGUuQ0lSQ0xFKXUuaGVpZ2h0Kz01MCx1LndpZHRoKz01MCx5LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoImhlaWdodCIsIjUwcHgiKS5hdHRyKCJ3aWR0aCIsdS53aWR0aCkuYXR0cigic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImljb24tY29udGFpbmVyIikuYXBwZW5kKCJpIikuYXR0cigiY2xhc3MiLCJub2RlLWljb24tIitiKyIgIit1Lmljb24pLEEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdS53aWR0aC8yKyIsICIrKHUuaGVpZ2h0LzItMS41KnUucGFkZGluZykrIikiKTtlbHNle3Uud2lkdGgrPTUwO2NvbnN0IGo9dS5oZWlnaHQ7dS5oZWlnaHQ9TWF0aC5tYXgoaiw2MCk7Y29uc3QgSz1NYXRoLmFicyh1LmhlaWdodC1qKTt5LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIndpZHRoIiwiNjBweCIpLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpLmF0dHIoInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyO21hcmdpbi10b3A6IitLLzIrInB4OyIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJpY29uLWNvbnRhaW5lciIpLmFwcGVuZCgiaSIpLmF0dHIoImNsYXNzIiwibm9kZS1pY29uLSIrYisiICIrdS5pY29uKSxBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygyNSt1LndpZHRoLzIpKyIsICIrKEsvMit1LnBhZGRpbmcvMikrIikiKX1lbHNlIGlmKHYpe2NvbnN0IGo9KHUud2lkdGgtUi53aWR0aCkvMixLPSh1LmhlaWdodC1SLmhlaWdodCkvMjtBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2orIiwgIitLKyIpIil9ZWxzZXtjb25zdCBqPXUud2lkdGgvMixLPXUucGFkZGluZy8yO0EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraisiLCAiK0srIikiKX1zd2l0Y2godS50eXBlKXtjYXNlIGkubm9kZVR5cGUuREVGQVVMVDptb24oaSxfLHUsYik7YnJlYWs7Y2FzZSBpLm5vZGVUeXBlLlJPVU5ERURfUkVDVDpUb24oaSxfLHUpO2JyZWFrO2Nhc2UgaS5ub2RlVHlwZS5SRUNUOnZvbihpLF8sdSk7YnJlYWs7Y2FzZSBpLm5vZGVUeXBlLkNJUkNMRTpfLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3Uud2lkdGgvMisiLCAiKyArdS5oZWlnaHQvMisiKSIpLHhvbihpLF8sdSk7YnJlYWs7Y2FzZSBpLm5vZGVUeXBlLkNMT1VEOndvbihpLF8sdSk7YnJlYWs7Y2FzZSBpLm5vZGVUeXBlLkJBTkc6eW9uKGksXyx1KTticmVhaztjYXNlIGkubm9kZVR5cGUuSEVYQUdPTjpFb24oaSxfLHUpO2JyZWFrfXJldHVybiBpLnNldEVsZW1lbnRGb3JJZCh1LmlkLHkpLHUuaGVpZ2h0fSxTb249ZnVuY3Rpb24oaSxzKXtjb25zdCB1PWkuZ2V0RWxlbWVudEJ5SWQocy5pZCksZD1zLnh8fDAscD1zLnl8fDA7dS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitkKyIsIitwKyIpIil9O2ZXZS51c2UocG9uKTtmdW5jdGlvbiBiV2UoaSxzLHUsZCxwKXtDb24oaSxzLHUsZCxwKSx1LmNoaWxkcmVuJiZ1LmNoaWxkcmVuLmZvckVhY2goKHYsYik9PntiV2UoaSxzLHYsZDwwP2I6ZCxwKX0pfWZ1bmN0aW9uIF9vbihpLHMpe3MuZWRnZXMoKS5tYXAoKHUsZCk9Pntjb25zdCBwPXUuZGF0YSgpO2lmKHVbMF0uX3ByaXZhdGUuYm9keUJvdW5kcyl7Y29uc3Qgdj11WzBdLl9wcml2YXRlLnJzY3JhdGNoO1hlLnRyYWNlKCJFZGdlOiAiLGQscCksaS5pbnNlcnQoInBhdGgiKS5hdHRyKCJkIixgTSAke3Yuc3RhcnRYfSwke3Yuc3RhcnRZfSBMICR7di5taWRYfSwke3YubWlkWX0gTCR7di5lbmRYfSwke3YuZW5kWX0gYCkuYXR0cigiY2xhc3MiLCJlZGdlIHNlY3Rpb24tZWRnZS0iK3Auc2VjdGlvbisiIGVkZ2UtZGVwdGgtIitwLmRlcHRoKX19KX1mdW5jdGlvbiBtV2UoaSxzLHUsZCl7cy5hZGQoe2dyb3VwOiJub2RlcyIsZGF0YTp7aWQ6aS5pZC50b1N0cmluZygpLGxhYmVsVGV4dDppLmRlc2NyLGhlaWdodDppLmhlaWdodCx3aWR0aDppLndpZHRoLGxldmVsOmQsbm9kZUlkOmkuaWQscGFkZGluZzppLnBhZGRpbmcsdHlwZTppLnR5cGV9LHBvc2l0aW9uOnt4OmkueCx5OmkueX19KSxpLmNoaWxkcmVuJiZpLmNoaWxkcmVuLmZvckVhY2gocD0+e21XZShwLHMsdSxkKzEpLHMuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e2lkOmAke2kuaWR9XyR7cC5pZH1gLHNvdXJjZTppLmlkLHRhcmdldDpwLmlkLGRlcHRoOmQsc2VjdGlvbjpwLnNlY3Rpb259fSl9KX1mdW5jdGlvbiBBb24oaSxzKXtyZXR1cm4gbmV3IFByb21pc2UodT0+e2NvbnN0IGQ9SXIoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiY3kiKS5hdHRyKCJzdHlsZSIsImRpc3BsYXk6bm9uZSIpLHA9ZldlKHtjb250YWluZXI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN5Iiksc3R5bGU6W3tzZWxlY3RvcjoiZWRnZSIsc3R5bGU6eyJjdXJ2ZS1zdHlsZSI6ImJlemllciJ9fV19KTtkLnJlbW92ZSgpLG1XZShpLHAscywwKSxwLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbih2KXt2LmxheW91dERpbWVuc2lvbnM9KCk9Pntjb25zdCBiPXYuZGF0YSgpO3JldHVybnt3OmIud2lkdGgsaDpiLmhlaWdodH19fSkscC5sYXlvdXQoe25hbWU6ImNvc2UtYmlsa2VudCIscXVhbGl0eToicHJvb2YiLHN0eWxlRW5hYmxlZDohMSxhbmltYXRlOiExfSkucnVuKCkscC5yZWFkeSh2PT57WGUuaW5mbygiUmVhZHkiLHYpLHUocCl9KX0pfWZ1bmN0aW9uIExvbihpLHMpe3Mubm9kZXMoKS5tYXAoKHUsZCk9Pntjb25zdCBwPXUuZGF0YSgpO3AueD11LnBvc2l0aW9uKCkueCxwLnk9dS5wb3NpdGlvbigpLnksU29uKGkscCk7Y29uc3Qgdj1pLmdldEVsZW1lbnRCeUlkKHAubm9kZUlkKTtYZS5pbmZvKCJJZDoiLGQsIlBvc2l0aW9uOiAoIix1LnBvc2l0aW9uKCkueCwiLCAiLHUucG9zaXRpb24oKS55LCIpIixwKSx2LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3UucG9zaXRpb24oKS54LXAud2lkdGgvMn0sICR7dS5wb3NpdGlvbigpLnktcC5oZWlnaHQvMn0pYCksdi5hdHRyKCJhdHRyIixgYXBhLSR7ZH0pYCl9KX1jb25zdCBNb249e2RyYXc6YXN5bmMoaSxzLHUsZCk9Pnt2YXIgUCxSO1hlLmRlYnVnKGBSZW5kZXJpbmcgbWluZG1hcCBkaWFncmFtCmAraSk7Y29uc3QgcD1kLmRiLHY9cC5nZXRNaW5kbWFwKCk7aWYoIXYpcmV0dXJuO2NvbnN0IGI9cXQoKTtiLmh0bWxMYWJlbHM9ITE7Y29uc3QgeT1yUihzKSxUPXkuYXBwZW5kKCJnIik7VC5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtZWRnZXMiKTtjb25zdCBfPXkuYXBwZW5kKCJnIik7Xy5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtbm9kZXMiKSxiV2UocCxfLHYsLTEsYik7Y29uc3QgQT1hd2FpdCBBb24odixiKTtfb24oVCxBKSxMb24ocCxBKSx5OSh2b2lkIDAseSwoKFA9Yi5taW5kbWFwKT09bnVsbD92b2lkIDA6UC5wYWRkaW5nKT8/c2gubWluZG1hcC5wYWRkaW5nLCgoUj1iLm1pbmRtYXApPT1udWxsP3ZvaWQgMDpSLnVzZU1heFdpZHRoKT8/c2gubWluZG1hcC51c2VNYXhXaWR0aCl9fSxEb249aT0+e2xldCBzPSIiO2ZvcihsZXQgdT0wO3U8aS5USEVNRV9DT0xPUl9MSU1JVDt1KyspaVsibGluZUNvbG9yIit1XT1pWyJsaW5lQ29sb3IiK3VdfHxpWyJjU2NhbGVJbnYiK3VdLF9DKGlbImxpbmVDb2xvciIrdV0pP2lbImxpbmVDb2xvciIrdV09R3MoaVsibGluZUNvbG9yIit1XSwyMCk6aVsibGluZUNvbG9yIit1XT1mYShpWyJsaW5lQ29sb3IiK3VdLDIwKTtmb3IobGV0IHU9MDt1PGkuVEhFTUVfQ09MT1JfTElNSVQ7dSsrKXtjb25zdCBkPSIiKygxNy0zKnUpO3MrPWAKICAgIC5zZWN0aW9uLSR7dS0xfSByZWN0LCAuc2VjdGlvbi0ke3UtMX0gcGF0aCwgLnNlY3Rpb24tJHt1LTF9IGNpcmNsZSwgLnNlY3Rpb24tJHt1LTF9IHBvbHlnb24sIC5zZWN0aW9uLSR7dS0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7aVsiY1NjYWxlIit1XX07CiAgICB9CiAgICAuc2VjdGlvbi0ke3UtMX0gdGV4dCB7CiAgICAgZmlsbDogJHtpWyJjU2NhbGVMYWJlbCIrdV19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke3UtMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke2lbImNTY2FsZUxhYmVsIit1XX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7dS0xfXsKICAgICAgc3Ryb2tlOiAke2lbImNTY2FsZSIrdV19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHt1LTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7ZH07CiAgICB9CiAgICAuc2VjdGlvbi0ke3UtMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHtpWyJjU2NhbGVJbnYiK3VdfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gc30sSW9uPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntkYjpsb24scmVuZGVyZXI6TW9uLHBhcnNlcjpzb24sc3R5bGVzOmk9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7RG9uKGkpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSwgLnNlY3Rpb24tcm9vdCBwb2x5Z29uICB7CiAgICBmaWxsOiAke2kuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke2kuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLm1pbmRtYXAtbm9kZS1sYWJlbCB7CiAgICBkeTogMWVtOwogICAgYWxpZ25tZW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBpd2U9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbih5LFQsXyxBKXtmb3IoXz1ffHx7fSxBPXkubGVuZ3RoO0EtLTtfW3lbQV1dPVQpO3JldHVybiBffSxzPVsxLDldLHU9WzEsMTBdLGQ9WzEsNSwxMCwxMl0scD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU0FOS0VZOjQsTkVXTElORTo1LGNzdjo2LG9wdF9lb2Y6NyxyZWNvcmQ6OCxjc3ZfdGFpbDo5LEVPRjoxMCwiZmllbGRbc291cmNlXSI6MTEsQ09NTUE6MTIsImZpZWxkW3RhcmdldF0iOjEzLCJmaWVsZFt2YWx1ZV0iOjE0LGZpZWxkOjE1LGVzY2FwZWQ6MTYsbm9uX2VzY2FwZWQ6MTcsRFFVT1RFOjE4LEVTQ0FQRURfVEVYVDoxOSxOT05fRVNDQVBFRF9URVhUOjIwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTQU5LRVkiLDU6Ik5FV0xJTkUiLDEwOiJFT0YiLDExOiJmaWVsZFtzb3VyY2VdIiwxMjoiQ09NTUEiLDEzOiJmaWVsZFt0YXJnZXRdIiwxNDoiZmllbGRbdmFsdWVdIiwxODoiRFFVT1RFIiwxOToiRVNDQVBFRF9URVhUIiwyMDoiTk9OX0VTQ0FQRURfVEVYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbNiwyXSxbOSwyXSxbOSwwXSxbNywxXSxbNywwXSxbOCw1XSxbMTUsMV0sWzE1LDFdLFsxNiwzXSxbMTcsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVCxfLEEsUCxSLEYsail7dmFyIEs9Ri5sZW5ndGgtMTtzd2l0Y2goUil7Y2FzZSA3OmNvbnN0IGVlPVAuZmluZE9yQ3JlYXRlTm9kZShGW0stNF0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSxpZT1QLmZpbmRPckNyZWF0ZU5vZGUoRltLLTJdLnRyaW0oKS5yZXBsYWNlQWxsKCciIicsJyInKSksb2U9cGFyc2VGbG9hdChGW0tdLnRyaW0oKSk7UC5hZGRMaW5rKGVlLGllLG9lKTticmVhaztjYXNlIDg6Y2FzZSA5OmNhc2UgMTE6dGhpcy4kPUZbS107YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9RltLLTFdO2JyZWFrfX0sdGFibGU6W3szOjEsNDpbMSwyXX0sezE6WzNdfSx7NTpbMSwzXX0sezY6NCw4OjUsMTU6NiwxNjo3LDE3OjgsMTg6cywyMDp1fSx7MTpbMiw2XSw3OjExLDEwOlsxLDEyXX0saSh1LFsyLDRdLHs5OjEzLDU6WzEsMTRdfSksezEyOlsxLDE1XX0saShkLFsyLDhdKSxpKGQsWzIsOV0pLHsxOTpbMSwxNl19LGkoZCxbMiwxMV0pLHsxOlsyLDFdfSx7MTpbMiw1XX0saSh1LFsyLDJdKSx7NjoxNyw4OjUsMTU6NiwxNjo3LDE3OjgsMTg6cywyMDp1fSx7MTU6MTgsMTY6NywxNzo4LDE4OnMsMjA6dX0sezE4OlsxLDE5XX0saSh1LFsyLDNdKSx7MTI6WzEsMjBdfSxpKGQsWzIsMTBdKSx7MTU6MjEsMTY6NywxNzo4LDE4OnMsMjA6dX0saShbMSw1LDEwXSxbMiw3XSldLGRlZmF1bHRBY3Rpb25zOnsxMTpbMiwxXSwxMjpbMiw1XX0scGFyc2VFcnJvcjpmdW5jdGlvbihULF8pe2lmKF8ucmVjb3ZlcmFibGUpdGhpcy50cmFjZShUKTtlbHNle3ZhciBBPW5ldyBFcnJvcihUKTt0aHJvdyBBLmhhc2g9XyxBfX0scGFyc2U6ZnVuY3Rpb24oVCl7dmFyIF89dGhpcyxBPVswXSxQPVtdLFI9W251bGxdLEY9W10saj10aGlzLnRhYmxlLEs9IiIsZWU9MCxpZT0wLG9lPTIscGU9MSxiZT1GLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGFlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksbmU9e3l5Ont9fTtmb3IodmFyIHNlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksc2UpJiYobmUueXlbc2VdPXRoaXMueXlbc2VdKTthZS5zZXRJbnB1dChULG5lLnl5KSxuZS55eS5sZXhlcj1hZSxuZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgYWUueXlsbG9jPiJ1IiYmKGFlLnl5bGxvYz17fSk7dmFyIGRlPWFlLnl5bGxvYztGLnB1c2goZGUpO3ZhciBYPWFlLm9wdGlvbnMmJmFlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBuZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1uZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBnZSgpe3ZhciBLZTtyZXR1cm4gS2U9UC5wb3AoKXx8YWUubGV4KCl8fHBlLHR5cGVvZiBLZSE9Im51bWJlciImJihLZSBpbnN0YW5jZW9mIEFycmF5JiYoUD1LZSxLZT1QLnBvcCgpKSxLZT1fLnN5bWJvbHNfW0tlXXx8S2UpLEtlfWZvcih2YXIgVyx4ZSxVLEZlLFBlPXt9LGplLEllLFNlLENlOzspe2lmKHhlPUFbQS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t4ZV0/VT10aGlzLmRlZmF1bHRBY3Rpb25zW3hlXTooKFc9PT1udWxsfHx0eXBlb2YgVz4idSIpJiYoVz1nZSgpKSxVPWpbeGVdJiZqW3hlXVtXXSksdHlwZW9mIFU+InUifHwhVS5sZW5ndGh8fCFVWzBdKXt2YXIga2U9IiI7Q2U9W107Zm9yKGplIGluIGpbeGVdKXRoaXMudGVybWluYWxzX1tqZV0mJmplPm9lJiZDZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bamVdKyInIik7YWUuc2hvd1Bvc2l0aW9uP2tlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGVlKzEpK2A6CmArYWUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtDZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1ddfHxXKSsiJyI6a2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoZWUrMSkrIjogVW5leHBlY3RlZCAiKyhXPT1wZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tXXXx8VykrIiciKSx0aGlzLnBhcnNlRXJyb3Ioa2Use3RleHQ6YWUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1ddfHxXLGxpbmU6YWUueXlsaW5lbm8sbG9jOmRlLGV4cGVjdGVkOkNlfSl9aWYoVVswXWluc3RhbmNlb2YgQXJyYXkmJlUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit4ZSsiLCB0b2tlbjogIitXKTtzd2l0Y2goVVswXSl7Y2FzZSAxOkEucHVzaChXKSxSLnB1c2goYWUueXl0ZXh0KSxGLnB1c2goYWUueXlsbG9jKSxBLnB1c2goVVsxXSksVz1udWxsLGllPWFlLnl5bGVuZyxLPWFlLnl5dGV4dCxlZT1hZS55eWxpbmVubyxkZT1hZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKEllPXRoaXMucHJvZHVjdGlvbnNfW1VbMV1dWzFdLFBlLiQ9UltSLmxlbmd0aC1JZV0sUGUuXyQ9e2ZpcnN0X2xpbmU6RltGLmxlbmd0aC0oSWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpGW0YubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46RltGLmxlbmd0aC0oSWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46RltGLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sWCYmKFBlLl8kLnJhbmdlPVtGW0YubGVuZ3RoLShJZXx8MSldLnJhbmdlWzBdLEZbRi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxGZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoUGUsW0ssaWUsZWUsbmUueXksVVsxXSxSLEZdLmNvbmNhdChiZSkpLHR5cGVvZiBGZTwidSIpcmV0dXJuIEZlO0llJiYoQT1BLnNsaWNlKDAsLTEqSWUqMiksUj1SLnNsaWNlKDAsLTEqSWUpLEY9Ri5zbGljZSgwLC0xKkllKSksQS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1VbMV1dWzBdKSxSLnB1c2goUGUuJCksRi5wdXNoKFBlLl8kKSxTZT1qW0FbQS5sZW5ndGgtMl1dW0FbQS5sZW5ndGgtMV1dLEEucHVzaChTZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LHY9ZnVuY3Rpb24oKXt2YXIgeT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihfLEEpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoXyxBKTtlbHNlIHRocm93IG5ldyBFcnJvcihfKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oVCxfKXtyZXR1cm4gdGhpcy55eT1ffHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1ULHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBUPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1ULHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1ULHRoaXMubWF0Y2hlZCs9VDt2YXIgXz1ULm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gXz8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksVH0sdW5wdXQ6ZnVuY3Rpb24oVCl7dmFyIF89VC5sZW5ndGgsQT1ULnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9VCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtXyksdGhpcy5vZmZzZXQtPV87dmFyIFA9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksQS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPUEubGVuZ3RoLTEpO3ZhciBSPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpBPyhBLmxlbmd0aD09PVAubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStQW1AubGVuZ3RoLUEubGVuZ3RoXS5sZW5ndGgtQVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLV99LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bUlswXSxSWzBdK3RoaXMueXlsZW5nLV9dKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihUKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoVCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgVD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFQubGVuZ3RoPjIwPyIuLi4iOiIiKStULnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5tYXRjaDtyZXR1cm4gVC5sZW5ndGg8MjAmJihUKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1ULmxlbmd0aCkpLChULnN1YnN0cigwLDIwKSsoVC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5wYXN0SW5wdXQoKSxfPW5ldyBBcnJheShULmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK18rIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKFQsXyl7dmFyIEEsUCxSO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihSPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFIueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksUD1UWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxQJiYodGhpcy55eWxpbmVubys9UC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpQP1BbUC5sZW5ndGgtMV0ubGVuZ3RoLVBbUC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitUWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVRbMF0sdGhpcy5tYXRjaCs9VFswXSx0aGlzLm1hdGNoZXM9VCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShUWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1UWzBdLEE9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsXyx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxBKXJldHVybiBBO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBGIGluIFIpdGhpc1tGXT1SW0ZdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFQsXyxBLFA7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgUj10aGlzLl9jdXJyZW50UnVsZXMoKSxGPTA7RjxSLmxlbmd0aDtGKyspaWYoQT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1JbRl1dKSxBJiYoIV98fEFbMF0ubGVuZ3RoPl9bMF0ubGVuZ3RoKSl7aWYoXz1BLFA9Rix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihUPXRoaXMudGVzdF9tYXRjaChBLFJbRl0pLFQhPT0hMSlyZXR1cm4gVDtpZih0aGlzLl9iYWNrdHJhY2spe189ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gXz8oVD10aGlzLnRlc3RfbWF0Y2goXyxSW1BdKSxUIT09ITE/VDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIF89dGhpcy5uZXh0KCk7cmV0dXJuIF98fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKF8pe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChfKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgXz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBfPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oXyl7cmV0dXJuIF89dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhffHwwKSxfPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbX106IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oXyl7dGhpcy5iZWdpbihfKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihfLEEsUCxSKXtzd2l0Y2goUCl7Y2FzZSAwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiY3N2IiksNDtjYXNlIDE6cmV0dXJuIDEwO2Nhc2UgMjpyZXR1cm4gNTtjYXNlIDM6cmV0dXJuIDEyO2Nhc2UgNDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVzY2FwZWRfdGV4dCIpLDE4O2Nhc2UgNTpyZXR1cm4gMjA7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCJlc2NhcGVkX3RleHQiKSwxODtjYXNlIDc6cmV0dXJuIDE5fX0scnVsZXM6Wy9eKD86c2Fua2V5LWJldGFcYikvaSwvXig/OiQpL2ksL14oPzooKFx1MDAwRFx1MDAwQSl8KFx1MDAwQSkpKS9pLC9eKD86KFx1MDAyQykpL2ksL14oPzooXHUwMDIyKSkvaSwvXig/OihbXHUwMDIwLVx1MDAyMVx1MDAyMy1cdTAwMkJcdTAwMkQtXHUwMDdFXSkqKS9pLC9eKD86KFx1MDAyMikoPyEoXHUwMDIyKSkpL2ksL14oPzooKFtcdTAwMjAtXHUwMDIxXHUwMDIzLVx1MDAyQlx1MDAyRC1cdTAwN0VdKXwoXHUwMDJDKXwoXHUwMDBEKXwoXHUwMDBBKXwoXHUwMDIyKShcdTAwMjIpKSopL2ldLGNvbmRpdGlvbnM6e2Nzdjp7cnVsZXM6WzEsMiwzLDQsNSw2LDddLGluY2x1c2l2ZTohMX0sZXNjYXBlZF90ZXh0OntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDddLGluY2x1c2l2ZTohMH19fTtyZXR1cm4geX0oKTtwLmxleGVyPXY7ZnVuY3Rpb24gYigpe3RoaXMueXk9e319cmV0dXJuIGIucHJvdG90eXBlPXAscC5QYXJzZXI9YixuZXcgYn0oKTtpd2UucGFyc2VyPWl3ZTtjb25zdCBOSj1pd2U7bGV0IFBKPVtdLEJKPVtdLHRJPXt9O2NvbnN0IE9vbj0oKT0+e1BKPVtdLEJKPVtdLHRJPXt9LFBnKCl9O2NsYXNzIE5vbntjb25zdHJ1Y3RvcihzLHUsZD0wKXt0aGlzLnNvdXJjZT1zLHRoaXMudGFyZ2V0PXUsdGhpcy52YWx1ZT1kfX1jb25zdCBQb249KGkscyx1KT0+e1BKLnB1c2gobmV3IE5vbihpLHMsdSkpfTtjbGFzcyBCb257Y29uc3RydWN0b3Iocyl7dGhpcy5JRD1zfX1jb25zdCBGb249e25vZGVzTWFwOnRJLGdldENvbmZpZzooKT0+cXQoKS5zYW5rZXksZ2V0Tm9kZXM6KCk9PkJKLGdldExpbmtzOigpPT5QSixnZXRHcmFwaDooKT0+KHtub2RlczpCSi5tYXAoaT0+KHtpZDppLklEfSkpLGxpbmtzOlBKLm1hcChpPT4oe3NvdXJjZTppLnNvdXJjZS5JRCx0YXJnZXQ6aS50YXJnZXQuSUQsdmFsdWU6aS52YWx1ZX0pKX0pLGFkZExpbms6UG9uLGZpbmRPckNyZWF0ZU5vZGU6aT0+KGk9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSksdElbaV18fCh0SVtpXT1uZXcgQm9uKGkpLEJKLnB1c2godElbaV0pKSx0SVtpXSksZ2V0QWNjVGl0bGU6Q3Asc2V0QWNjVGl0bGU6QmcsZ2V0QWNjRGVzY3JpcHRpb246X3Asc2V0QWNjRGVzY3JpcHRpb246U3AsZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldERpYWdyYW1UaXRsZTpjbSxjbGVhcjpPb259O2Z1bmN0aW9uIHZXZShpLHMpe2xldCB1O2lmKHM9PT12b2lkIDApZm9yKGNvbnN0IGQgb2YgaSlkIT1udWxsJiYodTxkfHx1PT09dm9pZCAwJiZkPj1kKSYmKHU9ZCk7ZWxzZXtsZXQgZD0tMTtmb3IobGV0IHAgb2YgaSkocD1zKHAsKytkLGkpKSE9bnVsbCYmKHU8cHx8dT09PXZvaWQgMCYmcD49cCkmJih1PXApfXJldHVybiB1fWZ1bmN0aW9uIHdXZShpLHMpe2xldCB1O2lmKHM9PT12b2lkIDApZm9yKGNvbnN0IGQgb2YgaSlkIT1udWxsJiYodT5kfHx1PT09dm9pZCAwJiZkPj1kKSYmKHU9ZCk7ZWxzZXtsZXQgZD0tMTtmb3IobGV0IHAgb2YgaSkocD1zKHAsKytkLGkpKSE9bnVsbCYmKHU+cHx8dT09PXZvaWQgMCYmcD49cCkmJih1PXApfXJldHVybiB1fWZ1bmN0aW9uIHN3ZShpLHMpe2xldCB1PTA7aWYocz09PXZvaWQgMClmb3IobGV0IGQgb2YgaSkoZD0rZCkmJih1Kz1kKTtlbHNle2xldCBkPS0xO2ZvcihsZXQgcCBvZiBpKShwPStzKHAsKytkLGkpKSYmKHUrPXApfXJldHVybiB1fWZ1bmN0aW9uIFJvbihpKXtyZXR1cm4gaS50YXJnZXQuZGVwdGh9ZnVuY3Rpb24gam9uKGkpe3JldHVybiBpLmRlcHRofWZ1bmN0aW9uICRvbihpLHMpe3JldHVybiBzLTEtaS5oZWlnaHR9ZnVuY3Rpb24geVdlKGkscyl7cmV0dXJuIGkuc291cmNlTGlua3MubGVuZ3RoP2kuZGVwdGg6cy0xfWZ1bmN0aW9uIHpvbihpKXtyZXR1cm4gaS50YXJnZXRMaW5rcy5sZW5ndGg/aS5kZXB0aDppLnNvdXJjZUxpbmtzLmxlbmd0aD93V2UoaS5zb3VyY2VMaW5rcyxSb24pLTE6MH1mdW5jdGlvbiBGSihpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19ZnVuY3Rpb24geFdlKGkscyl7cmV0dXJuIFJKKGkuc291cmNlLHMuc291cmNlKXx8aS5pbmRleC1zLmluZGV4fWZ1bmN0aW9uIGtXZShpLHMpe3JldHVybiBSSihpLnRhcmdldCxzLnRhcmdldCl8fGkuaW5kZXgtcy5pbmRleH1mdW5jdGlvbiBSSihpLHMpe3JldHVybiBpLnkwLXMueTB9ZnVuY3Rpb24gYXdlKGkpe3JldHVybiBpLnZhbHVlfWZ1bmN0aW9uIHFvbihpKXtyZXR1cm4gaS5pbmRleH1mdW5jdGlvbiBIb24oaSl7cmV0dXJuIGkubm9kZXN9ZnVuY3Rpb24gVm9uKGkpe3JldHVybiBpLmxpbmtzfWZ1bmN0aW9uIEVXZShpLHMpe2NvbnN0IHU9aS5nZXQocyk7aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK3MpO3JldHVybiB1fWZ1bmN0aW9uIFRXZSh7bm9kZXM6aX0pe2Zvcihjb25zdCBzIG9mIGkpe2xldCB1PXMueTAsZD11O2Zvcihjb25zdCBwIG9mIHMuc291cmNlTGlua3MpcC55MD11K3Aud2lkdGgvMix1Kz1wLndpZHRoO2Zvcihjb25zdCBwIG9mIHMudGFyZ2V0TGlua3MpcC55MT1kK3Aud2lkdGgvMixkKz1wLndpZHRofX1mdW5jdGlvbiBVb24oKXtsZXQgaT0wLHM9MCx1PTEsZD0xLHA9MjQsdj04LGIseT1xb24sVD15V2UsXyxBLFA9SG9uLFI9Vm9uLEY9NjtmdW5jdGlvbiBqKCl7Y29uc3QgUGU9e25vZGVzOlAuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOlIuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtyZXR1cm4gSyhQZSksZWUoUGUpLGllKFBlKSxvZShQZSksYWUoUGUpLFRXZShQZSksUGV9ai51cGRhdGU9ZnVuY3Rpb24oUGUpe3JldHVybiBUV2UoUGUpLFBlfSxqLm5vZGVJZD1mdW5jdGlvbihQZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dHlwZW9mIFBlPT0iZnVuY3Rpb24iP1BlOkZKKFBlKSxqKTp5fSxqLm5vZGVBbGlnbj1mdW5jdGlvbihQZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9dHlwZW9mIFBlPT0iZnVuY3Rpb24iP1BlOkZKKFBlKSxqKTpUfSxqLm5vZGVTb3J0PWZ1bmN0aW9uKFBlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1QZSxqKTpffSxqLm5vZGVXaWR0aD1mdW5jdGlvbihQZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K1BlLGopOnB9LGoubm9kZVBhZGRpbmc9ZnVuY3Rpb24oUGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWI9K1BlLGopOnZ9LGoubm9kZXM9ZnVuY3Rpb24oUGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhQPXR5cGVvZiBQZT09ImZ1bmN0aW9uIj9QZTpGSihQZSksaik6UH0sai5saW5rcz1mdW5jdGlvbihQZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFI9dHlwZW9mIFBlPT0iZnVuY3Rpb24iP1BlOkZKKFBlKSxqKTpSfSxqLmxpbmtTb3J0PWZ1bmN0aW9uKFBlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT1QZSxqKTpBfSxqLnNpemU9ZnVuY3Rpb24oUGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXM9MCx1PStQZVswXSxkPStQZVsxXSxqKTpbdS1pLGQtc119LGouZXh0ZW50PWZ1bmN0aW9uKFBlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rUGVbMF1bMF0sdT0rUGVbMV1bMF0scz0rUGVbMF1bMV0sZD0rUGVbMV1bMV0saik6W1tpLHNdLFt1LGRdXX0sai5pdGVyYXRpb25zPWZ1bmN0aW9uKFBlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRj0rUGUsaik6Rn07ZnVuY3Rpb24gSyh7bm9kZXM6UGUsbGlua3M6amV9KXtmb3IoY29uc3RbU2UsQ2Vdb2YgUGUuZW50cmllcygpKUNlLmluZGV4PVNlLENlLnNvdXJjZUxpbmtzPVtdLENlLnRhcmdldExpbmtzPVtdO2NvbnN0IEllPW5ldyBNYXAoUGUubWFwKChTZSxDZSk9Plt5KFNlLENlLFBlKSxTZV0pKTtmb3IoY29uc3RbU2UsQ2Vdb2YgamUuZW50cmllcygpKXtDZS5pbmRleD1TZTtsZXR7c291cmNlOmtlLHRhcmdldDpLZX09Q2U7dHlwZW9mIGtlIT0ib2JqZWN0IiYmKGtlPUNlLnNvdXJjZT1FV2UoSWUsa2UpKSx0eXBlb2YgS2UhPSJvYmplY3QiJiYoS2U9Q2UudGFyZ2V0PUVXZShJZSxLZSkpLGtlLnNvdXJjZUxpbmtzLnB1c2goQ2UpLEtlLnRhcmdldExpbmtzLnB1c2goQ2UpfWlmKEEhPW51bGwpZm9yKGNvbnN0e3NvdXJjZUxpbmtzOlNlLHRhcmdldExpbmtzOkNlfW9mIFBlKVNlLnNvcnQoQSksQ2Uuc29ydChBKX1mdW5jdGlvbiBlZSh7bm9kZXM6UGV9KXtmb3IoY29uc3QgamUgb2YgUGUpamUudmFsdWU9amUuZml4ZWRWYWx1ZT09PXZvaWQgMD9NYXRoLm1heChzd2UoamUuc291cmNlTGlua3MsYXdlKSxzd2UoamUudGFyZ2V0TGlua3MsYXdlKSk6amUuZml4ZWRWYWx1ZX1mdW5jdGlvbiBpZSh7bm9kZXM6UGV9KXtjb25zdCBqZT1QZS5sZW5ndGg7bGV0IEllPW5ldyBTZXQoUGUpLFNlPW5ldyBTZXQsQ2U9MDtmb3IoO0llLnNpemU7KXtmb3IoY29uc3Qga2Ugb2YgSWUpe2tlLmRlcHRoPUNlO2Zvcihjb25zdHt0YXJnZXQ6S2V9b2Yga2Uuc291cmNlTGlua3MpU2UuYWRkKEtlKX1pZigrK0NlPmplKXRocm93IG5ldyBFcnJvcigiY2lyY3VsYXIgbGluayIpO0llPVNlLFNlPW5ldyBTZXR9fWZ1bmN0aW9uIG9lKHtub2RlczpQZX0pe2NvbnN0IGplPVBlLmxlbmd0aDtsZXQgSWU9bmV3IFNldChQZSksU2U9bmV3IFNldCxDZT0wO2Zvcig7SWUuc2l6ZTspe2Zvcihjb25zdCBrZSBvZiBJZSl7a2UuaGVpZ2h0PUNlO2Zvcihjb25zdHtzb3VyY2U6S2V9b2Yga2UudGFyZ2V0TGlua3MpU2UuYWRkKEtlKX1pZigrK0NlPmplKXRocm93IG5ldyBFcnJvcigiY2lyY3VsYXIgbGluayIpO0llPVNlLFNlPW5ldyBTZXR9fWZ1bmN0aW9uIHBlKHtub2RlczpQZX0pe2NvbnN0IGplPXZXZShQZSxDZT0+Q2UuZGVwdGgpKzEsSWU9KHUtaS1wKS8oamUtMSksU2U9bmV3IEFycmF5KGplKTtmb3IoY29uc3QgQ2Ugb2YgUGUpe2NvbnN0IGtlPU1hdGgubWF4KDAsTWF0aC5taW4oamUtMSxNYXRoLmZsb29yKFQuY2FsbChudWxsLENlLGplKSkpKTtDZS5sYXllcj1rZSxDZS54MD1pK2tlKkllLENlLngxPUNlLngwK3AsU2Vba2VdP1NlW2tlXS5wdXNoKENlKTpTZVtrZV09W0NlXX1pZihfKWZvcihjb25zdCBDZSBvZiBTZSlDZS5zb3J0KF8pO3JldHVybiBTZX1mdW5jdGlvbiBiZShQZSl7Y29uc3QgamU9d1dlKFBlLEllPT4oZC1zLShJZS5sZW5ndGgtMSkqYikvc3dlKEllLGF3ZSkpO2Zvcihjb25zdCBJZSBvZiBQZSl7bGV0IFNlPXM7Zm9yKGNvbnN0IENlIG9mIEllKXtDZS55MD1TZSxDZS55MT1TZStDZS52YWx1ZSpqZSxTZT1DZS55MStiO2Zvcihjb25zdCBrZSBvZiBDZS5zb3VyY2VMaW5rcylrZS53aWR0aD1rZS52YWx1ZSpqZX1TZT0oZC1TZStiKS8oSWUubGVuZ3RoKzEpO2ZvcihsZXQgQ2U9MDtDZTxJZS5sZW5ndGg7KytDZSl7Y29uc3Qga2U9SWVbQ2VdO2tlLnkwKz1TZSooQ2UrMSksa2UueTErPVNlKihDZSsxKX14ZShJZSl9fWZ1bmN0aW9uIGFlKFBlKXtjb25zdCBqZT1wZShQZSk7Yj1NYXRoLm1pbih2LChkLXMpLyh2V2UoamUsSWU9PkllLmxlbmd0aCktMSkpLGJlKGplKTtmb3IobGV0IEllPTA7SWU8RjsrK0llKXtjb25zdCBTZT1NYXRoLnBvdyguOTksSWUpLENlPU1hdGgubWF4KDEtU2UsKEllKzEpL0YpO3NlKGplLFNlLENlKSxuZShqZSxTZSxDZSl9fWZ1bmN0aW9uIG5lKFBlLGplLEllKXtmb3IobGV0IFNlPTEsQ2U9UGUubGVuZ3RoO1NlPENlOysrU2Upe2NvbnN0IGtlPVBlW1NlXTtmb3IoY29uc3QgS2Ugb2Yga2Upe2xldCBGdD0wLE5lPTA7Zm9yKGNvbnN0e3NvdXJjZTpfdCx2YWx1ZTpFdH1vZiBLZS50YXJnZXRMaW5rcyl7bGV0IEd0PUV0KihLZS5sYXllci1fdC5sYXllcik7RnQrPVUoX3QsS2UpKkd0LE5lKz1HdH1pZighKE5lPjApKWNvbnRpbnVlO2xldCBnbj0oRnQvTmUtS2UueTApKmplO0tlLnkwKz1nbixLZS55MSs9Z24sVyhLZSl9Xz09PXZvaWQgMCYma2Uuc29ydChSSiksZGUoa2UsSWUpfX1mdW5jdGlvbiBzZShQZSxqZSxJZSl7Zm9yKGxldCBTZT1QZS5sZW5ndGgsQ2U9U2UtMjtDZT49MDstLUNlKXtjb25zdCBrZT1QZVtDZV07Zm9yKGNvbnN0IEtlIG9mIGtlKXtsZXQgRnQ9MCxOZT0wO2Zvcihjb25zdHt0YXJnZXQ6X3QsdmFsdWU6RXR9b2YgS2Uuc291cmNlTGlua3Mpe2xldCBHdD1FdCooX3QubGF5ZXItS2UubGF5ZXIpO0Z0Kz1GZShLZSxfdCkqR3QsTmUrPUd0fWlmKCEoTmU+MCkpY29udGludWU7bGV0IGduPShGdC9OZS1LZS55MCkqamU7S2UueTArPWduLEtlLnkxKz1nbixXKEtlKX1fPT09dm9pZCAwJiZrZS5zb3J0KFJKKSxkZShrZSxJZSl9fWZ1bmN0aW9uIGRlKFBlLGplKXtjb25zdCBJZT1QZS5sZW5ndGg+PjEsU2U9UGVbSWVdO2dlKFBlLFNlLnkwLWIsSWUtMSxqZSksWChQZSxTZS55MStiLEllKzEsamUpLGdlKFBlLGQsUGUubGVuZ3RoLTEsamUpLFgoUGUscywwLGplKX1mdW5jdGlvbiBYKFBlLGplLEllLFNlKXtmb3IoO0llPFBlLmxlbmd0aDsrK0llKXtjb25zdCBDZT1QZVtJZV0sa2U9KGplLUNlLnkwKSpTZTtrZT4xZS02JiYoQ2UueTArPWtlLENlLnkxKz1rZSksamU9Q2UueTErYn19ZnVuY3Rpb24gZ2UoUGUsamUsSWUsU2Upe2Zvcig7SWU+PTA7LS1JZSl7Y29uc3QgQ2U9UGVbSWVdLGtlPShDZS55MS1qZSkqU2U7a2U+MWUtNiYmKENlLnkwLT1rZSxDZS55MS09a2UpLGplPUNlLnkwLWJ9fWZ1bmN0aW9uIFcoe3NvdXJjZUxpbmtzOlBlLHRhcmdldExpbmtzOmplfSl7aWYoQT09PXZvaWQgMCl7Zm9yKGNvbnN0e3NvdXJjZTp7c291cmNlTGlua3M6SWV9fW9mIGplKUllLnNvcnQoa1dlKTtmb3IoY29uc3R7dGFyZ2V0Ont0YXJnZXRMaW5rczpJZX19b2YgUGUpSWUuc29ydCh4V2UpfX1mdW5jdGlvbiB4ZShQZSl7aWYoQT09PXZvaWQgMClmb3IoY29uc3R7c291cmNlTGlua3M6amUsdGFyZ2V0TGlua3M6SWV9b2YgUGUpamUuc29ydChrV2UpLEllLnNvcnQoeFdlKX1mdW5jdGlvbiBVKFBlLGplKXtsZXQgSWU9UGUueTAtKFBlLnNvdXJjZUxpbmtzLmxlbmd0aC0xKSpiLzI7Zm9yKGNvbnN0e3RhcmdldDpTZSx3aWR0aDpDZX1vZiBQZS5zb3VyY2VMaW5rcyl7aWYoU2U9PT1qZSlicmVhaztJZSs9Q2UrYn1mb3IoY29uc3R7c291cmNlOlNlLHdpZHRoOkNlfW9mIGplLnRhcmdldExpbmtzKXtpZihTZT09PVBlKWJyZWFrO0llLT1DZX1yZXR1cm4gSWV9ZnVuY3Rpb24gRmUoUGUsamUpe2xldCBJZT1qZS55MC0oamUudGFyZ2V0TGlua3MubGVuZ3RoLTEpKmIvMjtmb3IoY29uc3R7c291cmNlOlNlLHdpZHRoOkNlfW9mIGplLnRhcmdldExpbmtzKXtpZihTZT09PVBlKWJyZWFrO0llKz1DZStifWZvcihjb25zdHt0YXJnZXQ6U2Usd2lkdGg6Q2V9b2YgUGUuc291cmNlTGlua3Mpe2lmKFNlPT09amUpYnJlYWs7SWUtPUNlfXJldHVybiBJZX1yZXR1cm4gan12YXIgb3dlPU1hdGguUEksY3dlPTIqb3dlLGFTPTFlLTYsR29uPWN3ZS1hUztmdW5jdGlvbiB1d2UoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBDV2UoKXtyZXR1cm4gbmV3IHV3ZX11d2UucHJvdG90eXBlPUNXZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnV3ZSxtb3ZlVG86ZnVuY3Rpb24oaSxzKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3MpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihpLHMpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rcyl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oaSxzLHUsZCl7dGhpcy5fKz0iUSIrICtpKyIsIisgK3MrIiwiKyh0aGlzLl94MT0rdSkrIiwiKyh0aGlzLl95MT0rZCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oaSxzLHUsZCxwLHYpe3RoaXMuXys9IkMiKyAraSsiLCIrICtzKyIsIisgK3UrIiwiKyArZCsiLCIrKHRoaXMuX3gxPStwKSsiLCIrKHRoaXMuX3kxPSt2KX0sYXJjVG86ZnVuY3Rpb24oaSxzLHUsZCxwKXtpPStpLHM9K3MsdT0rdSxkPStkLHA9K3A7dmFyIHY9dGhpcy5feDEsYj10aGlzLl95MSx5PXUtaSxUPWQtcyxfPXYtaSxBPWItcyxQPV8qXytBKkE7aWYocDwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3ApO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9aSkrIiwiKyh0aGlzLl95MT1zKTtlbHNlIGlmKFA+YVMpaWYoIShNYXRoLmFicyhBKnktVCpfKT5hUyl8fCFwKXRoaXMuXys9IkwiKyh0aGlzLl94MT1pKSsiLCIrKHRoaXMuX3kxPXMpO2Vsc2V7dmFyIFI9dS12LEY9ZC1iLGo9eSp5K1QqVCxLPVIqUitGKkYsZWU9TWF0aC5zcXJ0KGopLGllPU1hdGguc3FydChQKSxvZT1wKk1hdGgudGFuKChvd2UtTWF0aC5hY29zKChqK1AtSykvKDIqZWUqaWUpKSkvMikscGU9b2UvaWUsYmU9b2UvZWU7TWF0aC5hYnMocGUtMSk+YVMmJih0aGlzLl8rPSJMIisoaStwZSpfKSsiLCIrKHMrcGUqQSkpLHRoaXMuXys9IkEiK3ArIiwiK3ArIiwwLDAsIisgKyhBKlI+XypGKSsiLCIrKHRoaXMuX3gxPWkrYmUqeSkrIiwiKyh0aGlzLl95MT1zK2JlKlQpfX0sYXJjOmZ1bmN0aW9uKGkscyx1LGQscCx2KXtpPStpLHM9K3MsdT0rdSx2PSEhdjt2YXIgYj11Kk1hdGguY29zKGQpLHk9dSpNYXRoLnNpbihkKSxUPWkrYixfPXMreSxBPTFedixQPXY/ZC1wOnAtZDtpZih1PDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrdSk7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK1QrIiwiK186KE1hdGguYWJzKHRoaXMuX3gxLVQpPmFTfHxNYXRoLmFicyh0aGlzLl95MS1fKT5hUykmJih0aGlzLl8rPSJMIitUKyIsIitfKSx1JiYoUDwwJiYoUD1QJWN3ZStjd2UpLFA+R29uP3RoaXMuXys9IkEiK3UrIiwiK3UrIiwwLDEsIitBKyIsIisoaS1iKSsiLCIrKHMteSkrIkEiK3UrIiwiK3UrIiwwLDEsIitBKyIsIisodGhpcy5feDE9VCkrIiwiKyh0aGlzLl95MT1fKTpQPmFTJiYodGhpcy5fKz0iQSIrdSsiLCIrdSsiLDAsIisgKyhQPj1vd2UpKyIsIitBKyIsIisodGhpcy5feDE9aSt1Kk1hdGguY29zKHApKSsiLCIrKHRoaXMuX3kxPXMrdSpNYXRoLnNpbihwKSkpKX0scmVjdDpmdW5jdGlvbihpLHMsdSxkKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3MpKyJoIisgK3UrInYiKyArZCsiaCIrLXUrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBTV2UoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIEtvbihpKXtyZXR1cm4gaVswXX1mdW5jdGlvbiBXb24oaSl7cmV0dXJuIGlbMV19dmFyIFlvbj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gWG9uKGkpe3JldHVybiBpLnNvdXJjZX1mdW5jdGlvbiBRb24oaSl7cmV0dXJuIGkudGFyZ2V0fWZ1bmN0aW9uIEpvbihpKXt2YXIgcz1Yb24sdT1Rb24sZD1Lb24scD1Xb24sdj1udWxsO2Z1bmN0aW9uIGIoKXt2YXIgeSxUPVlvbi5jYWxsKGFyZ3VtZW50cyksXz1zLmFwcGx5KHRoaXMsVCksQT11LmFwcGx5KHRoaXMsVCk7aWYodnx8KHY9eT1DV2UoKSksaSh2LCtkLmFwcGx5KHRoaXMsKFRbMF09XyxUKSksK3AuYXBwbHkodGhpcyxUKSwrZC5hcHBseSh0aGlzLChUWzBdPUEsVCkpLCtwLmFwcGx5KHRoaXMsVCkpLHkpcmV0dXJuIHY9bnVsbCx5KyIifHxudWxsfXJldHVybiBiLnNvdXJjZT1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz15LGIpOnN9LGIudGFyZ2V0PWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXksYik6dX0sYi54PWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXR5cGVvZiB5PT0iZnVuY3Rpb24iP3k6U1dlKCt5KSxiKTpkfSxiLnk9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpTV2UoK3kpLGIpOnB9LGIuY29udGV4dD1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj15Pz9udWxsLGIpOnZ9LGJ9ZnVuY3Rpb24gWm9uKGkscyx1LGQscCl7aS5tb3ZlVG8ocyx1KSxpLmJlemllckN1cnZlVG8ocz0ocytkKS8yLHUscyxwLGQscCl9ZnVuY3Rpb24gZWNuKCl7cmV0dXJuIEpvbihab24pfWZ1bmN0aW9uIHRjbihpKXtyZXR1cm5baS5zb3VyY2UueDEsaS55MF19ZnVuY3Rpb24gbmNuKGkpe3JldHVybltpLnRhcmdldC54MCxpLnkxXX1mdW5jdGlvbiByY24oKXtyZXR1cm4gZWNuKCkuc291cmNlKHRjbikudGFyZ2V0KG5jbil9Y29uc3QgX1dlPWNsYXNzIGFCZXtzdGF0aWMgbmV4dChzKXtyZXR1cm4gbmV3IGFCZShzKyArK2FCZS5jb3VudCl9Y29uc3RydWN0b3Iocyl7dGhpcy5pZD1zLHRoaXMuaHJlZj1gIyR7c31gfXRvU3RyaW5nKCl7cmV0dXJuInVybCgiK3RoaXMuaHJlZisiKSJ9fTtfV2UuY291bnQ9MDtsZXQgQVdlPV9XZTtjb25zdCBpY249e2xlZnQ6am9uLHJpZ2h0OiRvbixjZW50ZXI6em9uLGp1c3RpZnk6eVdlfSxzY249e2RyYXc6ZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3R7c2VjdXJpdHlMZXZlbDpwLHNhbmtleTp2fT1xdCgpLGI9WmplLnNhbmtleTtsZXQgeTtwPT09InNhbmRib3giJiYoeT1JcigiI2kiK3MpKTtjb25zdCBUPUlyKHA9PT0ic2FuZGJveCI/eS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksXz1wPT09InNhbmRib3giP1Quc2VsZWN0KGBbaWQ9IiR7c30iXWApOklyKGBbaWQ9IiR7c30iXWApLEE9KHY9PW51bGw/dm9pZCAwOnYud2lkdGgpPz9iLndpZHRoLFA9KHY9PW51bGw/dm9pZCAwOnYuaGVpZ2h0KT8/Yi53aWR0aCxSPSh2PT1udWxsP3ZvaWQgMDp2LnVzZU1heFdpZHRoKT8/Yi51c2VNYXhXaWR0aCxGPSh2PT1udWxsP3ZvaWQgMDp2Lm5vZGVBbGlnbm1lbnQpPz9iLm5vZGVBbGlnbm1lbnQsaj0odj09bnVsbD92b2lkIDA6di5wcmVmaXgpPz9iLnByZWZpeCxLPSh2PT1udWxsP3ZvaWQgMDp2LnN1ZmZpeCk/P2Iuc3VmZml4LGVlPSh2PT1udWxsP3ZvaWQgMDp2LnNob3dWYWx1ZXMpPz9iLnNob3dWYWx1ZXMsaWU9ZC5kYi5nZXRHcmFwaCgpLG9lPWljbltGXSxwZT0xMDtVb24oKS5ub2RlSWQoZ2U9PmdlLmlkKS5ub2RlV2lkdGgocGUpLm5vZGVQYWRkaW5nKDEwKyhlZT8xNTowKSkubm9kZUFsaWduKG9lKS5leHRlbnQoW1swLDBdLFtBLFBdXSkoaWUpO2NvbnN0IGFlPV9GKHpGZSk7Xy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGVzIikuc2VsZWN0QWxsKCIubm9kZSIpLmRhdGEoaWUubm9kZXMpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsIm5vZGUiKS5hdHRyKCJpZCIsZ2U9PihnZS51aWQ9QVdlLm5leHQoIm5vZGUtIikpLmlkKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGdlKXtyZXR1cm4idHJhbnNsYXRlKCIrZ2UueDArIiwiK2dlLnkwKyIpIn0pLmF0dHIoIngiLGdlPT5nZS54MCkuYXR0cigieSIsZ2U9PmdlLnkwKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJoZWlnaHQiLGdlPT5nZS55MS1nZS55MCkuYXR0cigid2lkdGgiLGdlPT5nZS54MS1nZS54MCkuYXR0cigiZmlsbCIsZ2U9PmFlKGdlLmlkKSk7Y29uc3QgbmU9KHtpZDpnZSx2YWx1ZTpXfSk9PmVlP2Ake2dlfQoke2p9JHtNYXRoLnJvdW5kKFcqMTAwKS8xMDB9JHtLfWA6Z2U7Xy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGFiZWxzIikuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigiZm9udC1zaXplIiwxNCkuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShpZS5ub2Rlcykuam9pbigidGV4dCIpLmF0dHIoIngiLGdlPT5nZS54MDxBLzI/Z2UueDErNjpnZS54MC02KS5hdHRyKCJ5IixnZT0+KGdlLnkxK2dlLnkwKS8yKS5hdHRyKCJkeSIsYCR7ZWU/IjAiOiIwLjM1In1lbWApLmF0dHIoInRleHQtYW5jaG9yIixnZT0+Z2UueDA8QS8yPyJzdGFydCI6ImVuZCIpLnRleHQobmUpO2NvbnN0IHNlPV8uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5rcyIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLC41KS5zZWxlY3RBbGwoIi5saW5rIikuZGF0YShpZS5saW5rcykuam9pbigiZyIpLmF0dHIoImNsYXNzIiwibGluayIpLnN0eWxlKCJtaXgtYmxlbmQtbW9kZSIsIm11bHRpcGx5IiksZGU9KHY9PW51bGw/dm9pZCAwOnYubGlua0NvbG9yKXx8ImdyYWRpZW50IjtpZihkZT09PSJncmFkaWVudCIpe2NvbnN0IGdlPXNlLmFwcGVuZCgibGluZWFyR3JhZGllbnQiKS5hdHRyKCJpZCIsVz0+KFcudWlkPUFXZS5uZXh0KCJsaW5lYXJHcmFkaWVudC0iKSkuaWQpLmF0dHIoImdyYWRpZW50VW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIngxIixXPT5XLnNvdXJjZS54MSkuYXR0cigieDIiLFc9PlcudGFyZ2V0LngwKTtnZS5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLCIwJSIpLmF0dHIoInN0b3AtY29sb3IiLFc9PmFlKFcuc291cmNlLmlkKSksZ2UuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IiwiMTAwJSIpLmF0dHIoInN0b3AtY29sb3IiLFc9PmFlKFcudGFyZ2V0LmlkKSl9bGV0IFg7c3dpdGNoKGRlKXtjYXNlImdyYWRpZW50IjpYPWdlPT5nZS51aWQ7YnJlYWs7Y2FzZSJzb3VyY2UiOlg9Z2U9PmFlKGdlLnNvdXJjZS5pZCk7YnJlYWs7Y2FzZSJ0YXJnZXQiOlg9Z2U9PmFlKGdlLnRhcmdldC5pZCk7YnJlYWs7ZGVmYXVsdDpYPWRlfXNlLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHJjbigpKS5hdHRyKCJzdHJva2UiLFgpLmF0dHIoInN0cm9rZS13aWR0aCIsZ2U9Pk1hdGgubWF4KDEsZ2Uud2lkdGgpKSx5OSh2b2lkIDAsXywwLFIpfX0sYWNuPWk9PmkucmVwbGFjZUFsbCgvXlteXFNcblxyXSt8W15cU1xuXHJdKyQvZywiIikucmVwbGFjZUFsbCgvKFtcblxyXSkrL2csYApgKS50cmltKCksb2NuPU5KLnBhcnNlLmJpbmQoTkopO05KLnBhcnNlPWk9Pm9jbihhY24oaSkpO2NvbnN0IGNjbj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOk5KLGRiOkZvbixyZW5kZXJlcjpzY259fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBsd2U9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihwZSxiZSxhZSxuZSl7Zm9yKGFlPWFlfHx7fSxuZT1wZS5sZW5ndGg7bmUtLTthZVtwZVtuZV1dPWJlKTtyZXR1cm4gYWV9LHM9WzEsN10sdT1bMSwxM10sZD1bMSwxNF0scD1bMSwxNV0sdj1bMSwxOV0sYj1bMSwxNl0seT1bMSwxN10sVD1bMSwxOF0sXz1bOCwzMF0sQT1bOCwyMSwyOCwyOSwzMCwzMSwzMiw0MCw0NCw0N10sUD1bMSwyM10sUj1bMSwyNF0sRj1bOCwxNSwxNiwyMSwyOCwyOSwzMCwzMSwzMiw0MCw0NCw0N10saj1bOCwxNSwxNiwyMSwyNywyOCwyOSwzMCwzMSwzMiw0MCw0NCw0N10sSz1bMSw0OV0sZWU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzcGFjZUxpbmVzOjMsU1BBQ0VMSU5FOjQsTkw6NSxzZXBhcmF0b3I6NixTUEFDRTo3LEVPRjo4LHN0YXJ0OjksQkxPQ0tfRElBR1JBTV9LRVk6MTAsZG9jdW1lbnQ6MTEsc3RvcDoxMixzdGF0ZW1lbnQ6MTMsbGluazoxNCxMSU5LOjE1LFNUQVJUX0xJTks6MTYsTElOS19MQUJFTDoxNyxTVFI6MTgsbm9kZVN0YXRlbWVudDoxOSxjb2x1bW5zU3RhdGVtZW50OjIwLFNQQUNFX0JMT0NLOjIxLGJsb2NrU3RhdGVtZW50OjIyLGNsYXNzRGVmU3RhdGVtZW50OjIzLGNzc0NsYXNzU3RhdGVtZW50OjI0LHN0eWxlU3RhdGVtZW50OjI1LG5vZGU6MjYsU0laRToyNyxDT0xVTU5TOjI4LCJpZC1ibG9jayI6MjksZW5kOjMwLGJsb2NrOjMxLE5PREVfSUQ6MzIsbm9kZVNoYXBlTkxhYmVsOjMzLGRpckxpc3Q6MzQsRElSOjM1LE5PREVfRFNUQVJUOjM2LE5PREVfREVORDozNyxCTE9DS19BUlJPV19TVEFSVDozOCxCTE9DS19BUlJPV19FTkQ6MzksY2xhc3NEZWY6NDAsQ0xBU1NERUZfSUQ6NDEsQ0xBU1NERUZfU1RZTEVPUFRTOjQyLERFRkFVTFQ6NDMsY2xhc3M6NDQsQ0xBU1NFTlRJVFlfSURTOjQ1LFNUWUxFQ0xBU1M6NDYsc3R5bGU6NDcsU1RZTEVfRU5USVRZX0lEUzo0OCxTVFlMRV9ERUZJTklUSU9OX0RBVEE6NDksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFTElORSIsNToiTkwiLDc6IlNQQUNFIiw4OiJFT0YiLDEwOiJCTE9DS19ESUFHUkFNX0tFWSIsMTU6IkxJTksiLDE2OiJTVEFSVF9MSU5LIiwxNzoiTElOS19MQUJFTCIsMTg6IlNUUiIsMjE6IlNQQUNFX0JMT0NLIiwyNzoiU0laRSIsMjg6IkNPTFVNTlMiLDI5OiJpZC1ibG9jayIsMzA6ImVuZCIsMzE6ImJsb2NrIiwzMjoiTk9ERV9JRCIsMzU6IkRJUiIsMzY6Ik5PREVfRFNUQVJUIiwzNzoiTk9ERV9ERU5EIiwzODoiQkxPQ0tfQVJST1dfU1RBUlQiLDM5OiJCTE9DS19BUlJPV19FTkQiLDQwOiJjbGFzc0RlZiIsNDE6IkNMQVNTREVGX0lEIiw0MjoiQ0xBU1NERUZfU1RZTEVPUFRTIiw0MzoiREVGQVVMVCIsNDQ6ImNsYXNzIiw0NToiQ0xBU1NFTlRJVFlfSURTIiw0NjoiU1RZTEVDTEFTUyIsNDc6InN0eWxlIiw0ODoiU1RZTEVfRU5USVRZX0lEUyIsNDk6IlNUWUxFX0RFRklOSVRJT05fREFUQSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywyXSxbMywyXSxbNiwxXSxbNiwxXSxbNiwxXSxbOSwzXSxbMTIsMV0sWzEyLDFdLFsxMiwyXSxbMTIsMl0sWzExLDFdLFsxMSwyXSxbMTQsMV0sWzE0LDRdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTksM10sWzE5LDJdLFsxOSwxXSxbMjAsMV0sWzIyLDRdLFsyMiwzXSxbMjYsMV0sWzI2LDJdLFszNCwxXSxbMzQsMl0sWzMzLDNdLFszMyw0XSxbMjMsM10sWzIzLDNdLFsyNCwzXSxbMjUsM11dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oYmUsYWUsbmUsc2UsZGUsWCxnZSl7dmFyIFc9WC5sZW5ndGgtMTtzd2l0Y2goZGUpe2Nhc2UgNDpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogc2VwYXJhdG9yIChOTCkgIik7YnJlYWs7Y2FzZSA1OnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzZXBhcmF0b3IgKFNwYWNlKSAiKTticmVhaztjYXNlIDY6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHNlcGFyYXRvciAoRU9GKSAiKTticmVhaztjYXNlIDc6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGhpZXJhcmNoeTogIixYW1ctMV0pLHNlLnNldEhpZXJhcmNoeShYW1ctMV0pO2JyZWFrO2Nhc2UgODpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgRU9GICIpO2JyZWFrO2Nhc2UgMTA6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgTkwyICIpO2JyZWFrO2Nhc2UgMTE6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDEyOnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzdGF0ZW1lbnQ6ICIsWFtXXSksdHlwZW9mIFhbV10ubGVuZ3RoPT0ibnVtYmVyIj90aGlzLiQ9WFtXXTp0aGlzLiQ9W1hbV11dO2JyZWFrO2Nhc2UgMTM6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHN0YXRlbWVudCAjMjogIixYW1ctMV0pLHRoaXMuJD1bWFtXLTFdXS5jb25jYXQoWFtXXSk7YnJlYWs7Y2FzZSAxNDpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogbGluazogIixYW1ddLGJlKSx0aGlzLiQ9e2VkZ2VUeXBlU3RyOlhbV10sbGFiZWw6IiJ9O2JyZWFrO2Nhc2UgMTU6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IExBQkVMIGxpbms6ICIsWFtXLTNdLFhbVy0xXSxYW1ddKSx0aGlzLiQ9e2VkZ2VUeXBlU3RyOlhbV10sbGFiZWw6WFtXLTFdfTticmVhaztjYXNlIDE4OmNvbnN0IHhlPXBhcnNlSW50KFhbV10pLFU9c2UuZ2VuZXJhdGVJZCgpO3RoaXMuJD17aWQ6VSx0eXBlOiJzcGFjZSIsbGFiZWw6IiIsd2lkdGg6eGUsY2hpbGRyZW46W119O2JyZWFrO2Nhc2UgMjM6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IChub2RlU3RhdGVtZW50IGxpbmsgbm9kZSkgIixYW1ctMl0sWFtXLTFdLFhbV10sIiB0eXBlc3RyOiAiLFhbVy0xXS5lZGdlVHlwZVN0cik7Y29uc3QgRmU9c2UuZWRnZVN0clRvRWRnZURhdGEoWFtXLTFdLmVkZ2VUeXBlU3RyKTt0aGlzLiQ9W3tpZDpYW1ctMl0uaWQsbGFiZWw6WFtXLTJdLmxhYmVsLHR5cGU6WFtXLTJdLnR5cGUsZGlyZWN0aW9uczpYW1ctMl0uZGlyZWN0aW9uc30se2lkOlhbVy0yXS5pZCsiLSIrWFtXXS5pZCxzdGFydDpYW1ctMl0uaWQsZW5kOlhbV10uaWQsbGFiZWw6WFtXLTFdLmxhYmVsLHR5cGU6ImVkZ2UiLGRpcmVjdGlvbnM6WFtXXS5kaXJlY3Rpb25zLGFycm93VHlwZUVuZDpGZSxhcnJvd1R5cGVTdGFydDoiYXJyb3dfb3BlbiJ9LHtpZDpYW1ddLmlkLGxhYmVsOlhbV10ubGFiZWwsdHlwZTpzZS50eXBlU3RyMlR5cGUoWFtXXS50eXBlU3RyKSxkaXJlY3Rpb25zOlhbV10uZGlyZWN0aW9uc31dO2JyZWFrO2Nhc2UgMjQ6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGVTdGF0ZW1lbnQgKGFiYzg4IG5vZGUgc2l6ZSkgIixYW1ctMV0sWFtXXSksdGhpcy4kPXtpZDpYW1ctMV0uaWQsbGFiZWw6WFtXLTFdLmxhYmVsLHR5cGU6c2UudHlwZVN0cjJUeXBlKFhbVy0xXS50eXBlU3RyKSxkaXJlY3Rpb25zOlhbVy0xXS5kaXJlY3Rpb25zLHdpZHRoSW5Db2x1bW5zOnBhcnNlSW50KFhbV10sMTApfTticmVhaztjYXNlIDI1OnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlU3RhdGVtZW50IChub2RlKSAiLFhbV10pLHRoaXMuJD17aWQ6WFtXXS5pZCxsYWJlbDpYW1ddLmxhYmVsLHR5cGU6c2UudHlwZVN0cjJUeXBlKFhbV10udHlwZVN0ciksZGlyZWN0aW9uczpYW1ddLmRpcmVjdGlvbnMsd2lkdGhJbkNvbHVtbnM6MX07YnJlYWs7Y2FzZSAyNjpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiQVBBMTIzIix0aGlzP3RoaXM6Im5hIiksc2UuZ2V0TG9nZ2VyKCkuZGVidWcoIkNPTFVNTlM6ICIsWFtXXSksdGhpcy4kPXt0eXBlOiJjb2x1bW4tc2V0dGluZyIsY29sdW1uczpYW1ddPT09ImF1dG8iPy0xOnBhcnNlSW50KFhbV10pfTticmVhaztjYXNlIDI3OnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBpZC1ibG9jayBzdGF0ZW1lbnQgOiAiLFhbVy0yXSxYW1ctMV0pLHNlLmdlbmVyYXRlSWQoKSx0aGlzLiQ9ey4uLlhbVy0yXSx0eXBlOiJjb21wb3NpdGUiLGNoaWxkcmVuOlhbVy0xXX07YnJlYWs7Y2FzZSAyODpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogYmxvY2tTdGF0ZW1lbnQgOiAiLFhbVy0yXSxYW1ctMV0sWFtXXSk7Y29uc3QgUGU9c2UuZ2VuZXJhdGVJZCgpO3RoaXMuJD17aWQ6UGUsdHlwZToiY29tcG9zaXRlIixsYWJlbDoiIixjaGlsZHJlbjpYW1ctMV19O2JyZWFrO2Nhc2UgMjk6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGUgKE5PREVfSUQgc2VwYXJhdG9yKTogIixYW1ddKSx0aGlzLiQ9e2lkOlhbV119O2JyZWFrO2Nhc2UgMzA6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGUgKE5PREVfSUQgbm9kZVNoYXBlTkxhYmVsIHNlcGFyYXRvcik6ICIsWFtXLTFdLFhbV10pLHRoaXMuJD17aWQ6WFtXLTFdLGxhYmVsOlhbV10ubGFiZWwsdHlwZVN0cjpYW1ddLnR5cGVTdHIsZGlyZWN0aW9uczpYW1ddLmRpcmVjdGlvbnN9O2JyZWFrO2Nhc2UgMzE6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGRpckxpc3Q6ICIsWFtXXSksdGhpcy4kPVtYW1ddXTticmVhaztjYXNlIDMyOnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBkaXJMaXN0OiAiLFhbVy0xXSxYW1ddKSx0aGlzLiQ9W1hbVy0xXV0uY29uY2F0KFhbV10pO2JyZWFrO2Nhc2UgMzM6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGVTaGFwZU5MYWJlbDogIixYW1ctMl0sWFtXLTFdLFhbV10pLHRoaXMuJD17dHlwZVN0cjpYW1ctMl0rWFtXXSxsYWJlbDpYW1ctMV19O2JyZWFrO2Nhc2UgMzQ6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IEJMT0NLX0FSUk9XIG5vZGVTaGFwZU5MYWJlbDogIixYW1ctM10sWFtXLTJdLCIgIzM6IixYW1ctMV0sWFtXXSksdGhpcy4kPXt0eXBlU3RyOlhbVy0zXStYW1ddLGxhYmVsOlhbVy0yXSxkaXJlY3Rpb25zOlhbVy0xXX07YnJlYWs7Y2FzZSAzNTpjYXNlIDM2OnRoaXMuJD17dHlwZToiY2xhc3NEZWYiLGlkOlhbVy0xXS50cmltKCksY3NzOlhbV10udHJpbSgpfTticmVhaztjYXNlIDM3OnRoaXMuJD17dHlwZToiYXBwbHlDbGFzcyIsaWQ6WFtXLTFdLnRyaW0oKSxzdHlsZUNsYXNzOlhbV10udHJpbSgpfTticmVhaztjYXNlIDM4OnRoaXMuJD17dHlwZToiYXBwbHlTdHlsZXMiLGlkOlhbVy0xXS50cmltKCksc3R5bGVzU3RyOlhbV10udHJpbSgpfTticmVha319LHRhYmxlOlt7OToxLDEwOlsxLDJdfSx7MTpbM119LHsxMTozLDEzOjQsMTk6NSwyMDo2LDIxOnMsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI4OnUsMjk6ZCwzMTpwLDMyOnYsNDA6Yiw0NDp5LDQ3OlR9LHs4OlsxLDIwXX0saShfLFsyLDEyXSx7MTM6NCwxOTo1LDIwOjYsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDExOjIxLDIxOnMsMjg6dSwyOTpkLDMxOnAsMzI6diw0MDpiLDQ0OnksNDc6VH0pLGkoQSxbMiwxNl0sezE0OjIyLDE1OlAsMTY6Un0pLGkoQSxbMiwxN10pLGkoQSxbMiwxOF0pLGkoQSxbMiwxOV0pLGkoQSxbMiwyMF0pLGkoQSxbMiwyMV0pLGkoQSxbMiwyMl0pLGkoRixbMiwyNV0sezI3OlsxLDI1XX0pLGkoQSxbMiwyNl0pLHsxOToyNiwyNjoxMiwzMjp2fSx7MTE6MjcsMTM6NCwxOTo1LDIwOjYsMjE6cywyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjg6dSwyOTpkLDMxOnAsMzI6diw0MDpiLDQ0OnksNDc6VH0sezQxOlsxLDI4XSw0MzpbMSwyOV19LHs0NTpbMSwzMF19LHs0ODpbMSwzMV19LGkoaixbMiwyOV0sezMzOjMyLDM2OlsxLDMzXSwzODpbMSwzNF19KSx7MTpbMiw3XX0saShfLFsyLDEzXSksezI2OjM1LDMyOnZ9LHszMjpbMiwxNF19LHsxNzpbMSwzNl19LGkoRixbMiwyNF0pLHsxMTozNywxMzo0LDE0OjIyLDE1OlAsMTY6UiwxOTo1LDIwOjYsMjE6cywyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjg6dSwyOTpkLDMxOnAsMzI6diw0MDpiLDQ0OnksNDc6VH0sezMwOlsxLDM4XX0sezQyOlsxLDM5XX0sezQyOlsxLDQwXX0sezQ2OlsxLDQxXX0sezQ5OlsxLDQyXX0saShqLFsyLDMwXSksezE4OlsxLDQzXX0sezE4OlsxLDQ0XX0saShGLFsyLDIzXSksezE4OlsxLDQ1XX0sezMwOlsxLDQ2XX0saShBLFsyLDI4XSksaShBLFsyLDM1XSksaShBLFsyLDM2XSksaShBLFsyLDM3XSksaShBLFsyLDM4XSksezM3OlsxLDQ3XX0sezM0OjQ4LDM1Okt9LHsxNTpbMSw1MF19LGkoQSxbMiwyN10pLGkoaixbMiwzM10pLHszOTpbMSw1MV19LHszNDo1MiwzNTpLLDM5OlsyLDMxXX0sezMyOlsyLDE1XX0saShqLFsyLDM0XSksezM5OlsyLDMyXX1dLGRlZmF1bHRBY3Rpb25zOnsyMDpbMiw3XSwyMzpbMiwxNF0sNTA6WzIsMTVdLDUyOlsyLDMyXX0scGFyc2VFcnJvcjpmdW5jdGlvbihiZSxhZSl7aWYoYWUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShiZSk7ZWxzZXt2YXIgbmU9bmV3IEVycm9yKGJlKTt0aHJvdyBuZS5oYXNoPWFlLG5lfX0scGFyc2U6ZnVuY3Rpb24oYmUpe3ZhciBhZT10aGlzLG5lPVswXSxzZT1bXSxkZT1bbnVsbF0sWD1bXSxnZT10aGlzLnRhYmxlLFc9IiIseGU9MCxVPTAsRmU9MixQZT0xLGplPVguc2xpY2UuY2FsbChhcmd1bWVudHMsMSksSWU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxTZT17eXk6e319O2Zvcih2YXIgQ2UgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxDZSkmJihTZS55eVtDZV09dGhpcy55eVtDZV0pO0llLnNldElucHV0KGJlLFNlLnl5KSxTZS55eS5sZXhlcj1JZSxTZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgSWUueXlsbG9jPiJ1IiYmKEllLnl5bGxvYz17fSk7dmFyIGtlPUllLnl5bGxvYztYLnB1c2goa2UpO3ZhciBLZT1JZS5vcHRpb25zJiZJZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgU2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9U2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gRnQoKXt2YXIga3Q7cmV0dXJuIGt0PXNlLnBvcCgpfHxJZS5sZXgoKXx8UGUsdHlwZW9mIGt0IT0ibnVtYmVyIiYmKGt0IGluc3RhbmNlb2YgQXJyYXkmJihzZT1rdCxrdD1zZS5wb3AoKSksa3Q9YWUuc3ltYm9sc19ba3RdfHxrdCksa3R9Zm9yKHZhciBOZSxnbixfdCxFdCxHdD17fSxsbix4dCxQdCxRZTs7KXtpZihnbj1uZVtuZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tnbl0/X3Q9dGhpcy5kZWZhdWx0QWN0aW9uc1tnbl06KChOZT09PW51bGx8fHR5cGVvZiBOZT4idSIpJiYoTmU9RnQoKSksX3Q9Z2VbZ25dJiZnZVtnbl1bTmVdKSx0eXBlb2YgX3Q+InUifHwhX3QubGVuZ3RofHwhX3RbMF0pe3ZhciBEdD0iIjtRZT1bXTtmb3IobG4gaW4gZ2VbZ25dKXRoaXMudGVybWluYWxzX1tsbl0mJmxuPkZlJiZRZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bbG5dKyInIik7SWUuc2hvd1Bvc2l0aW9uP0R0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHhlKzEpK2A6CmArSWUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtRZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW05lXXx8TmUpKyInIjpEdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh4ZSsxKSsiOiBVbmV4cGVjdGVkICIrKE5lPT1QZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tOZV18fE5lKSsiJyIpLHRoaXMucGFyc2VFcnJvcihEdCx7dGV4dDpJZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bTmVdfHxOZSxsaW5lOkllLnl5bGluZW5vLGxvYzprZSxleHBlY3RlZDpRZX0pfWlmKF90WzBdaW5zdGFuY2VvZiBBcnJheSYmX3QubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitnbisiLCB0b2tlbjogIitOZSk7c3dpdGNoKF90WzBdKXtjYXNlIDE6bmUucHVzaChOZSksZGUucHVzaChJZS55eXRleHQpLFgucHVzaChJZS55eWxsb2MpLG5lLnB1c2goX3RbMV0pLE5lPW51bGwsVT1JZS55eWxlbmcsVz1JZS55eXRleHQseGU9SWUueXlsaW5lbm8sa2U9SWUueXlsbG9jO2JyZWFrO2Nhc2UgMjppZih4dD10aGlzLnByb2R1Y3Rpb25zX1tfdFsxXV1bMV0sR3QuJD1kZVtkZS5sZW5ndGgteHRdLEd0Ll8kPXtmaXJzdF9saW5lOlhbWC5sZW5ndGgtKHh0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6WFtYLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlhbWC5sZW5ndGgtKHh0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlhbWC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEtlJiYoR3QuXyQucmFuZ2U9W1hbWC5sZW5ndGgtKHh0fHwxKV0ucmFuZ2VbMF0sWFtYLmxlbmd0aC0xXS5yYW5nZVsxXV0pLEV0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShHdCxbVyxVLHhlLFNlLnl5LF90WzFdLGRlLFhdLmNvbmNhdChqZSkpLHR5cGVvZiBFdDwidSIpcmV0dXJuIEV0O3h0JiYobmU9bmUuc2xpY2UoMCwtMSp4dCoyKSxkZT1kZS5zbGljZSgwLC0xKnh0KSxYPVguc2xpY2UoMCwtMSp4dCkpLG5lLnB1c2godGhpcy5wcm9kdWN0aW9uc19bX3RbMV1dWzBdKSxkZS5wdXNoKEd0LiQpLFgucHVzaChHdC5fJCksUHQ9Z2VbbmVbbmUubGVuZ3RoLTJdXVtuZVtuZS5sZW5ndGgtMV1dLG5lLnB1c2goUHQpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxpZT1mdW5jdGlvbigpe3ZhciBwZT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihhZSxuZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihhZSxuZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYWUpfSxzZXRJbnB1dDpmdW5jdGlvbihiZSxhZSl7cmV0dXJuIHRoaXMueXk9YWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWJlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBiZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9YmUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWJlLHRoaXMubWF0Y2hlZCs9YmU7dmFyIGFlPWJlLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gYWU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGJlfSx1bnB1dDpmdW5jdGlvbihiZSl7dmFyIGFlPWJlLmxlbmd0aCxuZT1iZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWJlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1hZSksdGhpcy5vZmZzZXQtPWFlO3ZhciBzZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW5lLmxlbmd0aC0xKTt2YXIgZGU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm5lPyhuZS5sZW5ndGg9PT1zZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3NlW3NlLmxlbmd0aC1uZS5sZW5ndGhdLmxlbmd0aC1uZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWFlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2RlWzBdLGRlWzBdK3RoaXMueXlsZW5nLWFlXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oYmUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShiZSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihiZS5sZW5ndGg+MjA/Ii4uLiI6IiIpK2JlLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMubWF0Y2g7cmV0dXJuIGJlLmxlbmd0aDwyMCYmKGJlKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1iZS5sZW5ndGgpKSwoYmUuc3Vic3RyKDAsMjApKyhiZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMucGFzdElucHV0KCksYWU9bmV3IEFycmF5KGJlLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGJlK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCthZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oYmUsYWUpe3ZhciBuZSxzZSxkZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZGU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZGUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksc2U9YmVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHNlJiYodGhpcy55eWxpbmVubys9c2UubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46c2U/c2Vbc2UubGVuZ3RoLTFdLmxlbmd0aC1zZVtzZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitiZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1iZVswXSx0aGlzLm1hdGNoKz1iZVswXSx0aGlzLm1hdGNoZXM9YmUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoYmVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWJlWzBdLG5lPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGFlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG5lKXJldHVybiBuZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgWCBpbiBkZSl0aGlzW1hdPWRlW1hdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGJlLGFlLG5lLHNlO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGRlPXRoaXMuX2N1cnJlbnRSdWxlcygpLFg9MDtYPGRlLmxlbmd0aDtYKyspaWYobmU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tkZVtYXV0pLG5lJiYoIWFlfHxuZVswXS5sZW5ndGg+YWVbMF0ubGVuZ3RoKSl7aWYoYWU9bmUsc2U9WCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihiZT10aGlzLnRlc3RfbWF0Y2gobmUsZGVbWF0pLGJlIT09ITEpcmV0dXJuIGJlO2lmKHRoaXMuX2JhY2t0cmFjayl7YWU9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gYWU/KGJlPXRoaXMudGVzdF9tYXRjaChhZSxkZVtzZV0pLGJlIT09ITE/YmU6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBhZT10aGlzLm5leHQoKTtyZXR1cm4gYWV8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKGFlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goYWUpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBhZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBhZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKGFlKXtyZXR1cm4gYWU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhhZXx8MCksYWU+PTA/dGhpcy5jb25kaXRpb25TdGFja1thZV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oYWUpe3RoaXMuYmVnaW4oYWUpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGFlLG5lLHNlLGRlKXtzd2l0Y2goc2Upe2Nhc2UgMDpyZXR1cm4gMTA7Y2FzZSAxOnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiRm91bmQgc3BhY2UtYmxvY2siKSwzMTtjYXNlIDI6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJGb3VuZCBubC1ibG9jayIpLDMxO2Nhc2UgMzpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkZvdW5kIHNwYWNlLWJsb2NrIiksMjk7Y2FzZSA0OmFlLmdldExvZ2dlcigpLmRlYnVnKCIuIixuZS55eXRleHQpO2JyZWFrO2Nhc2UgNTphZS5nZXRMb2dnZXIoKS5kZWJ1ZygiXyIsbmUueXl0ZXh0KTticmVhaztjYXNlIDY6cmV0dXJuIDU7Y2FzZSA3OnJldHVybiBuZS55eXRleHQ9LTEsMjg7Y2FzZSA4OnJldHVybiBuZS55eXRleHQ9bmUueXl0ZXh0LnJlcGxhY2UoL2NvbHVtbnNccysvLCIiKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiQ09MVU1OUyAoTEVYKSIsbmUueXl0ZXh0KSwyODtjYXNlIDk6dGhpcy5wdXNoU3RhdGUoIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIk1EX1NUUiI7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAxMzphZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYOiBQT1BQSU5HIFNUUjoiLG5lLnl5dGV4dCksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMRVg6IFNUUiBlbmQ6IixuZS55eXRleHQpLCJTVFIiO2Nhc2UgMTU6cmV0dXJuIG5lLnl5dGV4dD1uZS55eXRleHQucmVwbGFjZSgvc3BhY2VcOi8sIiIpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJTUEFDRSBOVU0gKExFWCkiLG5lLnl5dGV4dCksMjE7Y2FzZSAxNjpyZXR1cm4gbmUueXl0ZXh0PSIxIixhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiQ09MVU1OUyAoTEVYKSIsbmUueXl0ZXh0KSwyMTtjYXNlIDE3OnJldHVybiA0MztjYXNlIDE4OnJldHVybiJMSU5LU1RZTEUiO2Nhc2UgMTk6cmV0dXJuIklOVEVSUE9MQVRFIjtjYXNlIDIwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUYiKSw0MDtjYXNlIDIxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGSUQiKSwiREVGQVVMVF9DTEFTU0RFRl9JRCI7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksNDE7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQyO2Nhc2UgMjQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJDTEFTUyIpLDQ0O2Nhc2UgMjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NfU1RZTEUiKSw0NTtjYXNlIDI2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDY7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNUWUxFX1NUTU5UIiksNDc7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJTVFlMRV9ERUZJTklUSU9OIiksNDg7Y2FzZSAyOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ5O2Nhc2UgMzA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJhY2NfdGl0bGUiKSwiYWNjX3RpdGxlIjtjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY19kZXNjciIpLCJhY2NfZGVzY3IiO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDM0OnRoaXMucHVzaFN0YXRlKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAzNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAzNzpyZXR1cm4gMzA7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSA0MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICkpIiksIk5PREVfREVORCI7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSA0MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgtIiksIk5PREVfREVORCI7Y2FzZSA0NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IC0pIiksIk5PREVfREVORCI7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSA0NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IF1dIiksIk5PREVfREVORCI7Y2FzZSA0NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgiKSwiTk9ERV9ERU5EIjtjYXNlIDQ4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogXSkiKSwiTk9ERV9ERU5EIjtjYXNlIDQ5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogL10iKSwiTk9ERV9ERU5EIjtjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogL10iKSwiTk9ERV9ERU5EIjtjYXNlIDUxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKV0iKSwiTk9ERV9ERU5EIjtjYXNlIDUyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKSIpLCJOT0RFX0RFTkQiO2Nhc2UgNTM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdPiIpLCJOT0RFX0RFTkQiO2Nhc2UgNTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdIiksIk5PREVfREVORCI7Y2FzZSA1NTpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6IC0pIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjtjYXNlIDU2OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKC0iKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNTc6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA1ODpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNTk6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoKCIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA2MDpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNjE6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjtjYXNlIDYyOnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA2MzpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGM6ID4iKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNjQ6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiAoWyIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA2NTpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNjY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjtjYXNlIDY4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNjk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA3MDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjtjYXNlIDcxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNzI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA3MzpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6IFsiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNzQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJCTE9DS19BUlJPVyIpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMRVggQVJSIFNUQVJUIiksMzg7Y2FzZSA3NTpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTk9ERV9JRCIsbmUueXl0ZXh0KSwzMjtjYXNlIDc2OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBFT0YiLG5lLnl5dGV4dCksODtjYXNlIDc3OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDc4OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDc5OnJldHVybiJOT0RFX0RFU0NSIjtjYXNlIDgwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDgxOmFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDgyOmFlLmdldExvZ2dlcigpLmRlYnVnKCJMRVggQVJSOiBTdGFydGluZyBzdHJpbmciKSx0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSA4MzpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWDogTk9ERV9ERVNDUjoiLG5lLnl5dGV4dCksIk5PREVfREVTQ1IiO2Nhc2UgODQ6YWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWCBQT1BQSU5HIiksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgODU6YWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogPT5CQUUiKSx0aGlzLnB1c2hTdGF0ZSgiQVJST1dfRElSIik7YnJlYWs7Y2FzZSA4NjpyZXR1cm4gbmUueXl0ZXh0PW5lLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHJpZ2h0KTogZGlyOiIsbmUueXl0ZXh0KSwiRElSIjtjYXNlIDg3OnJldHVybiBuZS55eXRleHQ9bmUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAobGVmdCk6IixuZS55eXRleHQpLCJESVIiO2Nhc2UgODg6cmV0dXJuIG5lLnl5dGV4dD1uZS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4ICh4KToiLG5lLnl5dGV4dCksIkRJUiI7Y2FzZSA4OTpyZXR1cm4gbmUueXl0ZXh0PW5lLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHkpOiIsbmUueXl0ZXh0KSwiRElSIjtjYXNlIDkwOnJldHVybiBuZS55eXRleHQ9bmUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAodXApOiIsbmUueXl0ZXh0KSwiRElSIjtjYXNlIDkxOnJldHVybiBuZS55eXRleHQ9bmUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAoZG93bik6IixuZS55eXRleHQpLCJESVIiO2Nhc2UgOTI6cmV0dXJuIG5lLnl5dGV4dD0iXT4iLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXggKEFSUk9XX0RJUiBlbmQpOiIsbmUueXl0ZXh0KSx0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLCJCTE9DS19BUlJPV19FTkQiO2Nhc2UgOTM6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLCIjIituZS55eXRleHQrIiMiKSwxNTtjYXNlIDk0OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixuZS55eXRleHQpLDE1O2Nhc2UgOTU6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLG5lLnl5dGV4dCksMTU7Y2FzZSA5NjpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsbmUueXl0ZXh0KSwxNTtjYXNlIDk3OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixuZS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjtjYXNlIDk4OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixuZS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjtjYXNlIDk5OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixuZS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjtjYXNlIDEwMDp0aGlzLnB1c2hTdGF0ZSgibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSAxMDE6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKSwiTElOS19MQUJFTCI7Y2FzZSAxMDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIiwiIyIrbmUueXl0ZXh0KyIjIiksMTU7Y2FzZSAxMDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixuZS55eXRleHQpLDE1O2Nhc2UgMTA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsbmUueXl0ZXh0KSwxNTtjYXNlIDEwNTpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogQ09MT04iLG5lLnl5dGV4dCksbmUueXl0ZXh0PW5lLnl5dGV4dC5zbGljZSgxKSwyN319LHJ1bGVzOlsvXig/OmJsb2NrLWJldGFcYikvLC9eKD86YmxvY2tccyspLywvXig/OmJsb2NrXG4rKS8sL14oPzpibG9jazopLywvXig/Oltcc10rKS8sL14oPzpbXG5dKykvLC9eKD86KChcdTAwMERcdTAwMEEpfChcdTAwMEEpKSkvLC9eKD86Y29sdW1uc1xzK2F1dG9cYikvLC9eKD86Y29sdW1uc1xzK1tcZF0rKS8sL14oPzpbIl1bYF0pLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OnNwYWNlWzpdXGQrKS8sL14oPzpzcGFjZVxiKS8sL14oPzpkZWZhdWx0XGIpLywvXig/OmxpbmtTdHlsZVxiKS8sL14oPzppbnRlcnBvbGF0ZVxiKS8sL14oPzpjbGFzc0RlZlxzKykvLC9eKD86REVGQVVMVFxzKykvLC9eKD86XHcrXHMrKS8sL14oPzpbXlxuXSopLywvXig/OmNsYXNzXHMrKS8sL14oPzooXHcrKSsoKCxccypcdyspKikpLywvXig/OlteXG5dKikvLC9eKD86c3R5bGVccyspLywvXig/OihcdyspKygoLFxzKlx3KykqKSkvLC9eKD86W15cbl0qKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86ZW5kXGJccyopLywvXig/OlwoXChcKCkvLC9eKD86XClcKVwpKS8sL14oPzpbXCldXCkpLywvXig/Olx9XH0pLywvXig/Olx9KS8sL14oPzpcKC0pLywvXig/Oi1cKSkvLC9eKD86XChcKCkvLC9eKD86XF1cXSkvLC9eKD86XCgpLywvXig/OlxdXCkpLywvXig/OlxcXF0pLywvXig/OlwvXF0pLywvXig/OlwpXF0pLywvXig/OltcKV0pLywvXig/OlxdPikvLC9eKD86W1xdXSkvLC9eKD86LVwpKS8sL14oPzpcKC0pLywvXig/OlwpXCkpLywvXig/OlwpKS8sL14oPzpcKFwoXCgpLywvXig/OlwoXCgpLywvXig/Olx7XHspLywvXig/Olx7KS8sL14oPzo+KS8sL14oPzpcKFxbKS8sL14oPzpcKCkvLC9eKD86XFtcWykvLC9eKD86XFtcfCkvLC9eKD86XFtcKCkvLC9eKD86XClcKVwpKS8sL14oPzpcW1xcKS8sL14oPzpcW1wvKS8sL14oPzpcW1xcKS8sL14oPzpcWykvLC9eKD86PFxbKS8sL14oPzpbXlwoXFtcblwtXClce1x9XHNcPFw+Ol0rKS8sL14oPzokKS8sL14oPzpbIl1bYF0pLywvXig/OlsiXVtgXSkvLC9eKD86W15gIl0rKS8sL14oPzpbYF1bIl0pLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKykvLC9eKD86WyJdKS8sL14oPzpcXT5ccypcKCkvLC9eKD86LD9ccypyaWdodFxzKikvLC9eKD86LD9ccypsZWZ0XHMqKS8sL14oPzosP1xzKnhccyopLywvXig/Oiw/XHMqeVxzKikvLC9eKD86LD9ccyp1cFxzKikvLC9eKD86LD9ccypkb3duXHMqKS8sL14oPzpcKVxzKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqfn5bXH5dK1xzKikvLC9eKD86XHMqW3hvPF0/LS1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpccypbeG88XT8tXC5ccyopLywvXig/OlsiXVtgXSkvLC9eKD86WyJdKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/LT9cListW3hvPl0/XHMqKS8sL14oPzo6XGQrKS9dLGNvbmRpdGlvbnM6e1NUWUxFX0RFRklOSVRJT046e3J1bGVzOlsyOV0saW5jbHVzaXZlOiExfSxTVFlMRV9TVE1OVDp7cnVsZXM6WzI4XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGSUQ6e3J1bGVzOlsyM10saW5jbHVzaXZlOiExfSxDTEFTU0RFRjp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LENMQVNTX1NUWUxFOntydWxlczpbMjZdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOlsyNV0saW5jbHVzaXZlOiExfSxMTEFCRUw6e3J1bGVzOlsxMDAsMTAxLDEwMiwxMDMsMTA0XSxpbmNsdXNpdmU6ITF9LEFSUk9XX0RJUjp7cnVsZXM6Wzg2LDg3LDg4LDg5LDkwLDkxLDkyXSxpbmNsdXNpdmU6ITF9LEJMT0NLX0FSUk9XOntydWxlczpbNzcsODIsODVdLGluY2x1c2l2ZTohMX0sTk9ERTp7cnVsZXM6WzM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDc4LDgxXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzEwLDExLDc5LDgwXSxpbmNsdXNpdmU6ITF9LHNwYWNlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzEzLDE0LDgzLDg0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlszNSwzNl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlszM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlszMV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMiwxNSwxNiwxNywxOCwxOSwyMCwyNCwyNywzMCwzMiwzNCwzNyw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gcGV9KCk7ZWUubGV4ZXI9aWU7ZnVuY3Rpb24gb2UoKXt0aGlzLnl5PXt9fXJldHVybiBvZS5wcm90b3R5cGU9ZWUsZWUuUGFyc2VyPW9lLG5ldyBvZX0oKTtsd2UucGFyc2VyPWx3ZTtjb25zdCB1Y249bHdlO2xldCBVMj17fSxod2U9W10saWo9e307Y29uc3QgTFdlPSJjb2xvciIsTVdlPSJmaWxsIixsY249ImJnRmlsbCIsRFdlPSIsIixoY249cXQoKTtsZXQgc2o9e307Y29uc3QgZmNuPWk9PmNpLnNhbml0aXplVGV4dChpLGhjbiksZGNuPWZ1bmN0aW9uKGkscz0iIil7c2pbaV09PT12b2lkIDAmJihzaltpXT17aWQ6aSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pO2NvbnN0IHU9c2pbaV07cyE9bnVsbCYmcy5zcGxpdChEV2UpLmZvckVhY2goZD0+e2NvbnN0IHA9ZC5yZXBsYWNlKC8oW147XSopOy8sIiQxIikudHJpbSgpO2lmKGQubWF0Y2goTFdlKSl7Y29uc3QgYj1wLnJlcGxhY2UoTVdlLGxjbikucmVwbGFjZShMV2UsTVdlKTt1LnRleHRTdHlsZXMucHVzaChiKX11LnN0eWxlcy5wdXNoKHApfSl9LGdjbj1mdW5jdGlvbihpLHM9IiIpe2NvbnN0IHU9VTJbaV07cyE9bnVsbCYmKHUuc3R5bGVzPXMuc3BsaXQoRFdlKSl9LHBjbj1mdW5jdGlvbihpLHMpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2xldCBkPVUyW3VdO2lmKGQ9PT12b2lkIDApe2NvbnN0IHA9dS50cmltKCk7VTJbcF09e2lkOnAsdHlwZToibmEiLGNoaWxkcmVuOltdfSxkPVUyW3BdfWQuY2xhc3Nlc3x8KGQuY2xhc3Nlcz1bXSksZC5jbGFzc2VzLnB1c2gocyl9KX0sSVdlPShpLHMpPT57Y29uc3QgdT1pLmZsYXQoKSxkPVtdO2Zvcihjb25zdCBwIG9mIHUpe2lmKHAubGFiZWwmJihwLmxhYmVsPWZjbihwLmxhYmVsKSkscC50eXBlPT09ImNsYXNzRGVmIil7ZGNuKHAuaWQscC5jc3MpO2NvbnRpbnVlfWlmKHAudHlwZT09PSJhcHBseUNsYXNzIil7cGNuKHAuaWQsKHA9PW51bGw/dm9pZCAwOnAuc3R5bGVDbGFzcyl8fCIiKTtjb250aW51ZX1pZihwLnR5cGU9PT0iYXBwbHlTdHlsZXMiKXtwIT1udWxsJiZwLnN0eWxlc1N0ciYmZ2NuKHAuaWQscD09bnVsbD92b2lkIDA6cC5zdHlsZXNTdHIpO2NvbnRpbnVlfWlmKHAudHlwZT09PSJjb2x1bW4tc2V0dGluZyIpcy5jb2x1bW5zPXAuY29sdW1uc3x8LTE7ZWxzZSBpZihwLnR5cGU9PT0iZWRnZSIpaWpbcC5pZF0/aWpbcC5pZF0rKzppaltwLmlkXT0xLHAuaWQ9aWpbcC5pZF0rIi0iK3AuaWQsaHdlLnB1c2gocCk7ZWxzZXtwLmxhYmVsfHwocC50eXBlPT09ImNvbXBvc2l0ZSI/cC5sYWJlbD0iIjpwLmxhYmVsPXAuaWQpO2NvbnN0IHY9IVUyW3AuaWRdO2lmKHY/VTJbcC5pZF09cDoocC50eXBlIT09Im5hIiYmKFUyW3AuaWRdLnR5cGU9cC50eXBlKSxwLmxhYmVsIT09cC5pZCYmKFUyW3AuaWRdLmxhYmVsPXAubGFiZWwpKSxwLmNoaWxkcmVuJiZJV2UocC5jaGlsZHJlbixwKSxwLnR5cGU9PT0ic3BhY2UiKXtjb25zdCBiPXAud2lkdGh8fDE7Zm9yKGxldCB5PTA7eTxiO3krKyl7Y29uc3QgVD1ESGUocCk7VC5pZD1ULmlkKyItIit5LFUyW1QuaWRdPVQsZC5wdXNoKFQpfX1lbHNlIHYmJmQucHVzaChwKX19cy5jaGlsZHJlbj1kfTtsZXQgZndlPVtdLGFqPXtpZDoicm9vdCIsdHlwZToiY29tcG9zaXRlIixjaGlsZHJlbjpbXSxjb2x1bW5zOi0xfTtjb25zdCBiY249KCk9PntYZS5kZWJ1ZygiQ2xlYXIgY2FsbGVkIiksUGcoKSxhaj17aWQ6InJvb3QiLHR5cGU6ImNvbXBvc2l0ZSIsY2hpbGRyZW46W10sY29sdW1uczotMX0sVTI9e3Jvb3Q6YWp9LGZ3ZT1bXSxzaj17fSxod2U9W10saWo9e319O2Z1bmN0aW9uIG1jbihpKXtzd2l0Y2goWGUuZGVidWcoInR5cGVTdHIyVHlwZSIsaSksaSl7Y2FzZSJbXSI6cmV0dXJuInNxdWFyZSI7Y2FzZSIoKSI6cmV0dXJuIFhlLmRlYnVnKCJ3ZSBoYXZlIGEgcm91bmQiKSwicm91bmQiO2Nhc2UiKCgpKSI6cmV0dXJuImNpcmNsZSI7Y2FzZSI+XSI6cmV0dXJuInJlY3RfbGVmdF9pbnZfYXJyb3ciO2Nhc2Uie30iOnJldHVybiJkaWFtb25kIjtjYXNlInt7fX0iOnJldHVybiJoZXhhZ29uIjtjYXNlIihbXSkiOnJldHVybiJzdGFkaXVtIjtjYXNlIltbXV0iOnJldHVybiJzdWJyb3V0aW5lIjtjYXNlIlsoKV0iOnJldHVybiJjeWxpbmRlciI7Y2FzZSIoKCgpKSkiOnJldHVybiJkb3VibGVjaXJjbGUiO2Nhc2UiWy8vXSI6cmV0dXJuImxlYW5fcmlnaHQiO2Nhc2UiW1xcXFxdIjpyZXR1cm4ibGVhbl9sZWZ0IjtjYXNlIlsvXFxdIjpyZXR1cm4idHJhcGV6b2lkIjtjYXNlIltcXC9dIjpyZXR1cm4iaW52X3RyYXBlem9pZCI7Y2FzZSI8W10+IjpyZXR1cm4iYmxvY2tfYXJyb3ciO2RlZmF1bHQ6cmV0dXJuIm5hIn19ZnVuY3Rpb24gdmNuKGkpe3N3aXRjaChYZS5kZWJ1ZygidHlwZVN0cjJUeXBlIixpKSxpKXtjYXNlIj09IjpyZXR1cm4idGhpY2siO2RlZmF1bHQ6cmV0dXJuIm5vcm1hbCJ9fWZ1bmN0aW9uIHdjbihpKXtzd2l0Y2goaS50cmltKCkpe2Nhc2UiLS14IjpyZXR1cm4iYXJyb3dfY3Jvc3MiO2Nhc2UiLS1vIjpyZXR1cm4iYXJyb3dfY2lyY2xlIjtkZWZhdWx0OnJldHVybiJhcnJvd19wb2ludCJ9fWxldCBPV2U9MDtjb25zdCB5Y249e2dldENvbmZpZzooKT0+VmgoKS5ibG9jayx0eXBlU3RyMlR5cGU6bWNuLGVkZ2VUeXBlU3RyMlR5cGU6dmNuLGVkZ2VTdHJUb0VkZ2VEYXRhOndjbixnZXRMb2dnZXI6KCk9PmNvbnNvbGUsZ2V0QmxvY2tzRmxhdDooKT0+Wy4uLk9iamVjdC52YWx1ZXMoVTIpXSxnZXRCbG9ja3M6KCk9PmZ3ZXx8W10sZ2V0RWRnZXM6KCk9Pmh3ZSxzZXRIaWVyYXJjaHk6aT0+e2FqLmNoaWxkcmVuPWksSVdlKGksYWopLGZ3ZT1hai5jaGlsZHJlbn0sZ2V0QmxvY2s6aT0+VTJbaV0sc2V0QmxvY2s6aT0+e1UyW2kuaWRdPWl9LGdldENvbHVtbnM6aT0+e2NvbnN0IHM9VTJbaV07cmV0dXJuIHM/cy5jb2x1bW5zP3MuY29sdW1uczpzLmNoaWxkcmVuP3MuY2hpbGRyZW4ubGVuZ3RoOi0xOi0xfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHNqfSxjbGVhcjpiY24sZ2VuZXJhdGVJZDooKT0+KE9XZSsrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrT1dlKX0sako9KGkscyk9Pntjb25zdCB1PUFSZSxkPXUoaSwiciIpLHA9dShpLCJnIiksdj11KGksImIiKTtyZXR1cm4gU0MoZCxwLHYscyl9LHhjbj1pPT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBjb2xvcjogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHNwYW4scCB7CiAgICBjb2xvcjogJHtpLnRpdGxlQ29sb3J9OwogIH0KCgoKICAubGFiZWwgdGV4dCxzcGFuLHAgewogICAgZmlsbDogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAvLyB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgLy8gfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqLwogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2pKKGkuZWRnZUxhYmVsQmFja2dyb3VuZCwuNSl9OwogICAgLy8gYmFja2dyb3VuZC1jb2xvcjoKICB9CgogIC5ub2RlIC5jbHVzdGVyIHsKICAgIC8vIGZpbGw6ICR7akooaS5tYWluQmtnLC41KX07CiAgICBmaWxsOiAke2pKKGkuY2x1c3RlckJrZywuNSl9OwogICAgc3Ryb2tlOiAke2pKKGkuY2x1c3RlckJvcmRlciwuMil9OwogICAgYm94LXNoYWRvdzogcmdiYSg1MCwgNTAsIDkzLCAwLjI1KSAwcHggMTNweCAyN3B4IC01cHgsIHJnYmEoMCwgMCwgMCwgMC4zKSAwcHggOHB4IDE2cHggLThweDsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuLHAgewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYDtmdW5jdGlvbiBOV2UoaSxzLHU9ITEpe3ZhciBSLEYsajtjb25zdCBkPWk7bGV0IHA9ImRlZmF1bHQiOygoKFI9ZD09bnVsbD92b2lkIDA6ZC5jbGFzc2VzKT09bnVsbD92b2lkIDA6Ui5sZW5ndGgpfHwwKT4wJiYocD0oKGQ9PW51bGw/dm9pZCAwOmQuY2xhc3Nlcyl8fFtdKS5qb2luKCIgIikpLHA9cCsiIGZsb3djaGFydC1sYWJlbCI7bGV0IHY9MCxiPSIiLHk7c3dpdGNoKGQudHlwZSl7Y2FzZSJyb3VuZCI6dj01LGI9InJlY3QiO2JyZWFrO2Nhc2UiY29tcG9zaXRlIjp2PTAsYj0iY29tcG9zaXRlIix5PTA7YnJlYWs7Y2FzZSJzcXVhcmUiOmI9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6Yj0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6Yj0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJibG9ja19hcnJvdyI6Yj0iYmxvY2tfYXJyb3ciO2JyZWFrO2Nhc2Uib2RkIjpiPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOmI9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjpiPSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjpiPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6Yj0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJyZWN0X2xlZnRfaW52X2Fycm93IjpiPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImNpcmNsZSI6Yj0iY2lyY2xlIjticmVhaztjYXNlImVsbGlwc2UiOmI9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6Yj0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjpiPSJzdWJyb3V0aW5lIjticmVhaztjYXNlImN5bGluZGVyIjpiPSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6Yj0icmVjdCI7YnJlYWs7Y2FzZSJkb3VibGVjaXJjbGUiOmI9ImRvdWJsZWNpcmNsZSI7YnJlYWs7ZGVmYXVsdDpiPSJyZWN0In1jb25zdCBUPW9tKChkPT1udWxsP3ZvaWQgMDpkLnN0eWxlcyl8fFtdKSxfPWQubGFiZWwsQT1kLnNpemV8fHt3aWR0aDowLGhlaWdodDowLHg6MCx5OjB9O3JldHVybntsYWJlbFN0eWxlOlQubGFiZWxTdHlsZSxzaGFwZTpiLGxhYmVsVGV4dDpfLHJ4OnYscnk6dixjbGFzczpwLHN0eWxlOlQuc3R5bGUsaWQ6ZC5pZCxkaXJlY3Rpb25zOmQuZGlyZWN0aW9ucyx3aWR0aDpBLndpZHRoLGhlaWdodDpBLmhlaWdodCx4OkEueCx5OkEueSxwb3NpdGlvbmVkOnUsaW50ZXJzZWN0OnZvaWQgMCx0eXBlOmQudHlwZSxwYWRkaW5nOnk/PygoKGo9KEY9VmgoKSk9PW51bGw/dm9pZCAwOkYuYmxvY2spPT1udWxsP3ZvaWQgMDpqLnBhZGRpbmcpfHwwKX19YXN5bmMgZnVuY3Rpb24ga2NuKGkscyx1KXtjb25zdCBkPU5XZShzLHUsITEpO2lmKGQudHlwZT09PSJncm91cCIpcmV0dXJuO2NvbnN0IHA9YXdhaXQgdEooaSxkKSx2PXAubm9kZSgpLmdldEJCb3goKSxiPXUuZ2V0QmxvY2soZC5pZCk7Yi5zaXplPXt3aWR0aDp2LndpZHRoLGhlaWdodDp2LmhlaWdodCx4OjAseTowLG5vZGU6cH0sdS5zZXRCbG9jayhiKSxwLnJlbW92ZSgpfWFzeW5jIGZ1bmN0aW9uIEVjbihpLHMsdSl7Y29uc3QgZD1OV2Uocyx1LCEwKTt1LmdldEJsb2NrKGQuaWQpLnR5cGUhPT0ic3BhY2UiJiYoYXdhaXQgdEooaSxkKSxzLmludGVyc2VjdD1kPT1udWxsP3ZvaWQgMDpkLmludGVyc2VjdCwkbWUoZCkpfWFzeW5jIGZ1bmN0aW9uIGR3ZShpLHMsdSxkKXtmb3IoY29uc3QgcCBvZiBzKWF3YWl0IGQoaSxwLHUpLHAuY2hpbGRyZW4mJmF3YWl0IGR3ZShpLHAuY2hpbGRyZW4sdSxkKX1hc3luYyBmdW5jdGlvbiBUY24oaSxzLHUpe2F3YWl0IGR3ZShpLHMsdSxrY24pfWFzeW5jIGZ1bmN0aW9uIENjbihpLHMsdSl7YXdhaXQgZHdlKGkscyx1LEVjbil9YXN5bmMgZnVuY3Rpb24gU2NuKGkscyx1LGQscCl7Y29uc3Qgdj1uZXcgQjAoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KTt2LnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbm9kZXNlcDoxMCxyYW5rc2VwOjEwLG1hcmdpbng6OCxtYXJnaW55Ojh9KTtmb3IoY29uc3QgYiBvZiB1KWIuc2l6ZSYmdi5zZXROb2RlKGIuaWQse3dpZHRoOmIuc2l6ZS53aWR0aCxoZWlnaHQ6Yi5zaXplLmhlaWdodCxpbnRlcnNlY3Q6Yi5pbnRlcnNlY3R9KTtmb3IoY29uc3QgYiBvZiBzKWlmKGIuc3RhcnQmJmIuZW5kKXtjb25zdCB5PWQuZ2V0QmxvY2soYi5zdGFydCksVD1kLmdldEJsb2NrKGIuZW5kKTtpZih5IT1udWxsJiZ5LnNpemUmJihUIT1udWxsJiZULnNpemUpKXtjb25zdCBfPXkuc2l6ZSxBPVQuc2l6ZSxQPVt7eDpfLngseTpfLnl9LHt4Ol8ueCsoQS54LV8ueCkvMix5Ol8ueSsoQS55LV8ueSkvMn0se3g6QS54LHk6QS55fV07YXdhaXQgSVVlKGkse3Y6Yi5zdGFydCx3OmIuZW5kLG5hbWU6Yi5pZH0sey4uLmIsYXJyb3dUeXBlRW5kOmIuYXJyb3dUeXBlRW5kLGFycm93VHlwZVN0YXJ0OmIuYXJyb3dUeXBlU3RhcnQscG9pbnRzOlAsY2xhc3NlczoiZWRnZS10aGlja25lc3Mtbm9ybWFsIGVkZ2UtcGF0dGVybi1zb2xpZCBmbG93Y2hhcnQtbGluayBMUy1hMSBMRS1iMSJ9LHZvaWQgMCwiYmxvY2siLHYscCksYi5sYWJlbCYmKGF3YWl0IHptZShpLHsuLi5iLGxhYmVsOmIubGFiZWwsbGFiZWxTdHlsZToic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiLGFycm93VHlwZUVuZDpiLmFycm93VHlwZUVuZCxhcnJvd1R5cGVTdGFydDpiLmFycm93VHlwZVN0YXJ0LHBvaW50czpQLGNsYXNzZXM6ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsgTFMtYTEgTEUtYjEifSksYXdhaXQgTVVlKHsuLi5iLHg6UFsxXS54LHk6UFsxXS55fSx7b3JpZ2luYWxQYXRoOlB9KSl9fX1jb25zdCBlMD0oKFJXZT0oRldlPXF0KCkpPT1udWxsP3ZvaWQgMDpGV2UuYmxvY2spPT1udWxsP3ZvaWQgMDpSV2UucGFkZGluZyl8fDg7ZnVuY3Rpb24gX2NuKGkscyl7aWYoaT09PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKGkpKXRocm93IG5ldyBFcnJvcigiQ29sdW1ucyBtdXN0IGJlIGFuIGludGVnZXIgIT09IDAuIik7aWYoczwwfHwhTnVtYmVyLmlzSW50ZWdlcihzKSl0aHJvdyBuZXcgRXJyb3IoIlBvc2l0aW9uIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci4iK3MpO2lmKGk8MClyZXR1cm57cHg6cyxweTowfTtpZihpPT09MSlyZXR1cm57cHg6MCxweTpzfTtjb25zdCB1PXMlaSxkPU1hdGguZmxvb3Iocy9pKTtyZXR1cm57cHg6dSxweTpkfX1jb25zdCBBY249aT0+e2xldCBzPTAsdT0wO2Zvcihjb25zdCBkIG9mIGkuY2hpbGRyZW4pe2NvbnN0e3dpZHRoOnAsaGVpZ2h0OnYseDpiLHl9PWQuc2l6ZXx8e3dpZHRoOjAsaGVpZ2h0OjAseDowLHk6MH07WGUuZGVidWcoImdldE1heENoaWxkU2l6ZSBhYmM5NSBjaGlsZDoiLGQuaWQsIndpZHRoOiIscCwiaGVpZ2h0OiIsdiwieDoiLGIsInk6Iix5LGQudHlwZSksZC50eXBlIT09InNwYWNlIiYmKHA+cyYmKHM9cC8oaS53aWR0aEluQ29sdW1uc3x8MSkpLHY+dSYmKHU9dikpfXJldHVybnt3aWR0aDpzLGhlaWdodDp1fX07ZnVuY3Rpb24gZ3dlKGkscyx1PTAsZD0wKXt2YXIgYix5LFQsXyxBLFAsUixGLGosSyxlZTtYZS5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NSAoc3RhcnQpIixpLmlkLChiPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOmIueCwiYmxvY2sgd2lkdGggPSIsaT09bnVsbD92b2lkIDA6aS5zaXplLCJzaWVibGluZ1dpZHRoIix1KSwoeT1pPT1udWxsP3ZvaWQgMDppLnNpemUpIT1udWxsJiZ5LndpZHRofHwoaS5zaXplPXt3aWR0aDp1LGhlaWdodDpkLHg6MCx5OjB9KTtsZXQgcD0wLHY9MDtpZigoKFQ9aS5jaGlsZHJlbik9PW51bGw/dm9pZCAwOlQubGVuZ3RoKT4wKXtmb3IoY29uc3QgZGUgb2YgaS5jaGlsZHJlbilnd2UoZGUscyk7Y29uc3QgaWU9QWNuKGkpO3A9aWUud2lkdGgsdj1pZS5oZWlnaHQsWGUuZGVidWcoInNldEJsb2NrU2l6ZXMgYWJjOTUgbWF4V2lkdGggb2YiLGkuaWQsIjpzIGNoaWxkcmVuIGlzICIscCx2KTtmb3IoY29uc3QgZGUgb2YgaS5jaGlsZHJlbilkZS5zaXplJiYoWGUuZGVidWcoYGFiYzk1IFNldHRpbmcgc2l6ZSBvZiBjaGlsZHJlbiBvZiAke2kuaWR9IGlkPSR7ZGUuaWR9ICR7cH0gJHt2fSAke2RlLnNpemV9YCksZGUuc2l6ZS53aWR0aD1wKihkZS53aWR0aEluQ29sdW1uc3x8MSkrZTAqKChkZS53aWR0aEluQ29sdW1uc3x8MSktMSksZGUuc2l6ZS5oZWlnaHQ9dixkZS5zaXplLng9MCxkZS5zaXplLnk9MCxYZS5kZWJ1ZyhgYWJjOTUgdXBkYXRpbmcgc2l6ZSBvZiAke2kuaWR9IGNoaWxkcmVuIGNoaWxkOiR7ZGUuaWR9IG1heFdpZHRoOiR7cH0gbWF4SGVpZ2h0OiR7dn1gKSk7Zm9yKGNvbnN0IGRlIG9mIGkuY2hpbGRyZW4pZ3dlKGRlLHMscCx2KTtjb25zdCBvZT1pLmNvbHVtbnN8fC0xO2xldCBwZT0wO2Zvcihjb25zdCBkZSBvZiBpLmNoaWxkcmVuKXBlKz1kZS53aWR0aEluQ29sdW1uc3x8MTtsZXQgYmU9aS5jaGlsZHJlbi5sZW5ndGg7b2U+MCYmb2U8cGUmJihiZT1vZSksaS53aWR0aEluQ29sdW1ucztjb25zdCBhZT1NYXRoLmNlaWwocGUvYmUpO2xldCBuZT1iZSoocCtlMCkrZTAsc2U9YWUqKHYrZTApK2UwO2lmKG5lPHUpe1hlLmRlYnVnKGBEZXRlY3RlZCB0byBzbWFsbCBzaWVibGluZzogYWJjOTUgJHtpLmlkfSBzaWVibGluZ1dpZHRoICR7dX0gc2llYmxpbmdIZWlnaHQgJHtkfSB3aWR0aCAke25lfWApLG5lPXUsc2U9ZDtjb25zdCBkZT0odS1iZSplMC1lMCkvYmUsWD0oZC1hZSplMC1lMCkvYWU7WGUuZGVidWcoIlNpemUgaW5kYXRhIGFiYzg4IixpLmlkLCJjaGlsZFdpZHRoIixkZSwibWF4V2lkdGgiLHApLFhlLmRlYnVnKCJTaXplIGluZGF0YSBhYmM4OCIsaS5pZCwiY2hpbGRIZWlnaHQiLFgsIm1heEhlaWdodCIsdiksWGUuZGVidWcoIlNpemUgaW5kYXRhIGFiYzg4IHhTaXplIixiZSwicGFkZGluZyIsZTApO2Zvcihjb25zdCBnZSBvZiBpLmNoaWxkcmVuKWdlLnNpemUmJihnZS5zaXplLndpZHRoPWRlLGdlLnNpemUuaGVpZ2h0PVgsZ2Uuc2l6ZS54PTAsZ2Uuc2l6ZS55PTApfWlmKFhlLmRlYnVnKGBhYmM5NSAoZmluYWxlIGNhbGMpICR7aS5pZH0geFNpemUgJHtiZX0geVNpemUgJHthZX0gY29sdW1ucyAke29lfSR7aS5jaGlsZHJlbi5sZW5ndGh9IHdpZHRoPSR7TWF0aC5tYXgobmUsKChfPWkuc2l6ZSk9PW51bGw/dm9pZCAwOl8ud2lkdGgpfHwwKX1gKSxuZTwoKChBPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOkEud2lkdGgpfHwwKSl7bmU9KChQPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOlAud2lkdGgpfHwwO2NvbnN0IGRlPW9lPjA/TWF0aC5taW4oaS5jaGlsZHJlbi5sZW5ndGgsb2UpOmkuY2hpbGRyZW4ubGVuZ3RoO2lmKGRlPjApe2NvbnN0IFg9KG5lLWRlKmUwLWUwKS9kZTtYZS5kZWJ1ZygiYWJjOTUgKGdyb3dpbmcgdG8gZml0KSB3aWR0aCIsaS5pZCxuZSwoUj1pLnNpemUpPT1udWxsP3ZvaWQgMDpSLndpZHRoLFgpO2Zvcihjb25zdCBnZSBvZiBpLmNoaWxkcmVuKWdlLnNpemUmJihnZS5zaXplLndpZHRoPVgpfX1pLnNpemU9e3dpZHRoOm5lLGhlaWdodDpzZSx4OjAseTowfX1YZS5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NCAoZG9uZSkiLGkuaWQsKEY9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6Ri54LChqPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOmoud2lkdGgsKEs9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6Sy55LChlZT1pPT1udWxsP3ZvaWQgMDppLnNpemUpPT1udWxsP3ZvaWQgMDplZS5oZWlnaHQpfWZ1bmN0aW9uIFBXZShpLHMpe3ZhciBkLHAsdixiLHksVCxfLEEsUCxSLEYsaixLLGVlLGllLG9lLHBlO1hlLmRlYnVnKGBhYmM4NSBsYXlvdXQgYmxvY2tzICg9PmxheW91dEJsb2NrcykgJHtpLmlkfSB4OiAkeyhkPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOmQueH0geTogJHsocD1pPT1udWxsP3ZvaWQgMDppLnNpemUpPT1udWxsP3ZvaWQgMDpwLnl9IHdpZHRoOiAkeyh2PWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOnYud2lkdGh9YCk7Y29uc3QgdT1pLmNvbHVtbnN8fC0xO2lmKFhlLmRlYnVnKCJsYXlvdXRCbG9ja3MgY29sdW1ucyBhYmM5NSIsaS5pZCwiPT4iLHUsaSksaS5jaGlsZHJlbiYmaS5jaGlsZHJlbi5sZW5ndGg+MCl7Y29uc3QgYmU9KCh5PShiPWk9PW51bGw/dm9pZCAwOmkuY2hpbGRyZW5bMF0pPT1udWxsP3ZvaWQgMDpiLnNpemUpPT1udWxsP3ZvaWQgMDp5LndpZHRoKXx8MCxhZT1pLmNoaWxkcmVuLmxlbmd0aCpiZSsoaS5jaGlsZHJlbi5sZW5ndGgtMSkqZTA7WGUuZGVidWcoIndpZHRoT2ZDaGlsZHJlbiA4OCIsYWUsInBvc1giKTtsZXQgbmU9MDtYZS5kZWJ1ZygiYWJjOTEgYmxvY2s/LnNpemU/LngiLGkuaWQsKFQ9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6VC54KTtsZXQgc2U9KF89aT09bnVsbD92b2lkIDA6aS5zaXplKSE9bnVsbCYmXy54PygoQT1pPT1udWxsP3ZvaWQgMDppLnNpemUpPT1udWxsP3ZvaWQgMDpBLngpKygtKChQPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOlAud2lkdGgpLzJ8fDApOi1lMCxkZT0wO2Zvcihjb25zdCBYIG9mIGkuY2hpbGRyZW4pe2NvbnN0IGdlPWk7aWYoIVguc2l6ZSljb250aW51ZTtjb25zdHt3aWR0aDpXLGhlaWdodDp4ZX09WC5zaXplLHtweDpVLHB5OkZlfT1fY24odSxuZSk7aWYoRmUhPWRlJiYoZGU9RmUsc2U9KFI9aT09bnVsbD92b2lkIDA6aS5zaXplKSE9bnVsbCYmUi54PygoRj1pPT1udWxsP3ZvaWQgMDppLnNpemUpPT1udWxsP3ZvaWQgMDpGLngpKygtKChqPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOmoud2lkdGgpLzJ8fDApOi1lMCxYZS5kZWJ1ZygiTmV3IHJvdyBpbiBsYXlvdXQgZm9yIGJsb2NrIixpLmlkLCIgYW5kIGNoaWxkICIsWC5pZCxkZSkpLFhlLmRlYnVnKGBhYmM4OSBsYXlvdXQgYmxvY2tzIChjaGlsZCkgaWQ6ICR7WC5pZH0gUG9zOiAke25lfSAocHgsIHB5KSAke1V9LCR7RmV9ICgkeyhLPWdlPT1udWxsP3ZvaWQgMDpnZS5zaXplKT09bnVsbD92b2lkIDA6Sy54fSwkeyhlZT1nZT09bnVsbD92b2lkIDA6Z2Uuc2l6ZSk9PW51bGw/dm9pZCAwOmVlLnl9KSBwYXJlbnQ6ICR7Z2UuaWR9IHdpZHRoOiAke1d9JHtlMH1gKSxnZS5zaXplKXtjb25zdCBQZT1XLzI7WC5zaXplLng9c2UrZTArUGUsWGUuZGVidWcoYGFiYzkxIGxheW91dCBibG9ja3MgKGNhbGMpIHB4LCBweWlkOiR7WC5pZH0gc3RhcnRpbmdQb3M9WCR7c2V9IG5ldyBzdGFydGluZ1Bvc1gke1guc2l6ZS54fSAke1BlfSBwYWRkaW5nPSR7ZTB9IHdpZHRoPSR7V30gaGFsZldpZHRoPSR7UGV9ID0+IHg6JHtYLnNpemUueH0geToke1guc2l6ZS55fSAke1gud2lkdGhJbkNvbHVtbnN9ICh3aWR0aCAqIChjaGlsZD8udyB8fCAxKSkgLyAyICR7VyooKFg9PW51bGw/dm9pZCAwOlgud2lkdGhJbkNvbHVtbnMpfHwxKS8yfWApLHNlPVguc2l6ZS54K1BlLFguc2l6ZS55PWdlLnNpemUueS1nZS5zaXplLmhlaWdodC8yK0ZlKih4ZStlMCkreGUvMitlMCxYZS5kZWJ1ZyhgYWJjODggbGF5b3V0IGJsb2NrcyAoY2FsYykgcHgsIHB5aWQ6JHtYLmlkfXN0YXJ0aW5nUG9zWCR7c2V9JHtlMH0ke1BlfT0+eDoke1guc2l6ZS54fXk6JHtYLnNpemUueX0ke1gud2lkdGhJbkNvbHVtbnN9KHdpZHRoICogKGNoaWxkPy53IHx8IDEpKSAvIDIke1cqKChYPT1udWxsP3ZvaWQgMDpYLndpZHRoSW5Db2x1bW5zKXx8MSkvMn1gKX1YLmNoaWxkcmVuJiZQV2UoWCksbmUrPShYPT1udWxsP3ZvaWQgMDpYLndpZHRoSW5Db2x1bW5zKXx8MSxYZS5kZWJ1ZygiYWJjODggY29sdW1uc1BvcyIsWCxuZSl9fVhlLmRlYnVnKGBsYXlvdXQgYmxvY2tzICg8PT1sYXlvdXRCbG9ja3MpICR7aS5pZH0geDogJHsoaWU9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6aWUueH0geTogJHsob2U9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6b2UueX0gd2lkdGg6ICR7KHBlPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOnBlLndpZHRofWApfWZ1bmN0aW9uIEJXZShpLHttaW5YOnMsbWluWTp1LG1heFg6ZCxtYXhZOnB9PXttaW5YOjAsbWluWTowLG1heFg6MCxtYXhZOjB9KXtpZihpLnNpemUmJmkuaWQhPT0icm9vdCIpe2NvbnN0e3g6dix5OmIsd2lkdGg6eSxoZWlnaHQ6VH09aS5zaXplO3YteS8yPHMmJihzPXYteS8yKSxiLVQvMjx1JiYodT1iLVQvMiksdit5LzI+ZCYmKGQ9dit5LzIpLGIrVC8yPnAmJihwPWIrVC8yKX1pZihpLmNoaWxkcmVuKWZvcihjb25zdCB2IG9mIGkuY2hpbGRyZW4pKHttaW5YOnMsbWluWTp1LG1heFg6ZCxtYXhZOnB9PUJXZSh2LHttaW5YOnMsbWluWTp1LG1heFg6ZCxtYXhZOnB9KSk7cmV0dXJue21pblg6cyxtaW5ZOnUsbWF4WDpkLG1heFk6cH19ZnVuY3Rpb24gTGNuKGkpe2NvbnN0IHM9aS5nZXRCbG9jaygicm9vdCIpO2lmKCFzKXJldHVybjtnd2UocyxpLDAsMCksUFdlKHMpLFhlLmRlYnVnKCJnZXRCbG9ja3MiLEpTT04uc3RyaW5naWZ5KHMsbnVsbCwyKSk7Y29uc3R7bWluWDp1LG1pblk6ZCxtYXhYOnAsbWF4WTp2fT1CV2UocyksYj12LWQseT1wLXU7cmV0dXJue3g6dSx5OmQsd2lkdGg6eSxoZWlnaHQ6Yn19Y29uc3QgTWNuPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6dWNuLGRiOnljbixyZW5kZXJlcjp7ZHJhdzphc3luYyBmdW5jdGlvbihpLHMsdSxkKXtjb25zdHtzZWN1cml0eUxldmVsOnAsYmxvY2s6dn09VmgoKSxiPWQuZGI7bGV0IHk7cD09PSJzYW5kYm94IiYmKHk9SXIoIiNpIitzKSk7Y29uc3QgVD1JcihwPT09InNhbmRib3giP3kubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLF89cD09PSJzYW5kYm94Ij9ULnNlbGVjdChgW2lkPSIke3N9Il1gKTpJcihgW2lkPSIke3N9Il1gKTtTbWUoXyxbInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxkLnR5cGUscyk7Y29uc3QgUD1iLmdldEJsb2NrcygpLFI9Yi5nZXRCbG9ja3NGbGF0KCksRj1iLmdldEVkZ2VzKCksaj1fLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYmxvY2siKTthd2FpdCBUY24oaixQLGIpO2NvbnN0IEs9TGNuKGIpO2lmKGF3YWl0IENjbihqLFAsYiksYXdhaXQgU2NuKGosRixSLGIscyksSyl7Y29uc3QgZWU9SyxpZT1NYXRoLm1heCgxLE1hdGgucm91bmQoLjEyNSooZWUud2lkdGgvZWUuaGVpZ2h0KSkpLG9lPWVlLmhlaWdodCtpZSsxMCxwZT1lZS53aWR0aCsxMCx7dXNlTWF4V2lkdGg6YmV9PXY7TmcoXyxvZSxwZSwhIWJlKSxYZS5kZWJ1ZygiSGVyZSBCb3VuZHMiLEssZWUpLF8uYXR0cigidmlld0JveCIsYCR7ZWUueC01fSAke2VlLnktNX0gJHtlZS53aWR0aCsxMH0gJHtlZS5oZWlnaHQrMTB9YCl9X0YoekZlKX0sZ2V0Q2xhc3NlczpmdW5jdGlvbihpLHMpe3JldHVybiBzLmRiLmdldENsYXNzZXMoKX19LHN0eWxlczp4Y259fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3JldHVybiB1bX0pOwo=`;