-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathb0xfile__chunk-735c675c.d8905482.js.go
22 lines (18 loc) · 644 KB
/
b0xfile__chunk-735c675c.d8905482.js.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package knife4go
import (
"os"
)
func init() {
f, err := FS.OpenFile(CTX, "/chunk-735c675c.d8905482.js", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
if err != nil {
panic(err)
}
_, err = f.Write([] byte(base64Decoding("KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1siY2h1bmstNzM1YzY3NWMiXSx7IjhhMmEiOmZ1bmN0aW9uKGUsdCl7fSxiM2VlOmZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ci5yKHQpO3ZhciBuPXtuYW1lOiJFZGl0b3JTaG93Iixjb21wb25lbnRzOntlZGl0b3I6cigiN2M5ZSIpfSxwcm9wczp7dmFsdWU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwLGRlZmF1bHQ6IiJ9LG1vZGU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwLGRlZmF1bHQ6Impzb24ifSxkZWJ1Z1Jlc3BvbnNlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57ZWRpdG9yOm51bGwsZWRpdG9ySGVpZ2h0OjIwMCxkZWJ1Z09wdGlvbnM6e3JlYWRPbmx5OiExLGF1dG9TY3JvbGxFZGl0b3JJbnRvVmlldzohMCxkaXNwbGF5SW5kZW50R3VpZGVzOiExLGZpeGVkV2lkdGhHdXR0ZXI6ITB9LGNvbW1vbk9wdGlvbnM6e3JlYWRPbmx5OiExfX19LG1ldGhvZHM6e3Jlc2V0RWRpdG9ySGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztzZXRUaW1lb3V0KChmdW5jdGlvbigpe3ZhciB0PWUuZWRpdG9yLnNlc3Npb24uZ2V0TGVuZ3RoKCk7MT09dCYmKHQ9MTUpLHQ8MTUmJih0PWUuZGVidWdSZXNwb25zZT8zMDoxNSksdD4yMCYmKGUuZGVidWdSZXNwb25zZXx8KHQ9MjApKTt2YXIgcj0xNip0O3I+MmUzJiYocj0yZTMpLGUuZWRpdG9ySGVpZ2h0PXJ9KSwxMCl9LGNoYW5nZTpmdW5jdGlvbihlKXt0aGlzLmRlYnVnUmVzcG9uc2U/dGhpcy4kZW1pdCgiZGVidWdFZGl0b3JDaGFuZ2UiLGUpOih0aGlzLnJlc2V0RWRpdG9ySGVpZ2h0KCksdGhpcy4kZW1pdCgiY2hhbmdlIixlKSl9LGVkaXRvckluaXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLmVkaXRvcj1lLHIoIjIwOTkiKSxyKCIxZDI5IikscigiODE4YiIpLHIoIjhhMmEiKSxyKCJiZTlkIikscigiMDY5NiIpLHIoImJiMzYiKSx0aGlzLmRlYnVnUmVzcG9uc2U/KHRoaXMuZWRpdG9yLmdldFNlc3Npb24oKS5zZXRVc2VXcmFwTW9kZSghMCksdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyh0aGlzLmRlYnVnT3B0aW9ucyksInRleHQiPT10aGlzLm1vZGUmJnRoaXMuZWRpdG9yLmdldFNlc3Npb24oKS5zZXRVc2VXcmFwTW9kZSghMCkpOnRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5jb21tb25PcHRpb25zKSx0aGlzLnJlc2V0RWRpdG9ySGVpZ2h0KCksdGhpcy5lZGl0b3IucmVuZGVyZXIub24oImFmdGVyUmVuZGVyIiwoZnVuY3Rpb24oKXt2YXIgZT10LmVkaXRvci5zZXNzaW9uLmdldExlbmd0aCgpO3QuJGVtaXQoInNob3dEZXNjcmlwdGlvbiIsZSl9KSl9fX0sYT1yKCIyODc3Iiksbz1PYmplY3QoYS5hKShuLChmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLl9zZWxmLl9jO3JldHVybiB0KCJkaXYiLFtlLmRlYnVnUmVzcG9uc2U/dCgiZGl2IixbdCgiZWRpdG9yIix7c3RhdGljQ2xhc3M6ImtuaWZlNGotZGVidWctYWNlLWVkaXRvciIsYXR0cnM6e29wdGlvbnM6ZS5kZWJ1Z09wdGlvbnMsdmFsdWU6ZS52YWx1ZSxsYW5nOmUubW9kZSx0aGVtZToiZWNsaXBzZSIsd2lkdGg6IjEwMCUiLGhlaWdodDplLmVkaXRvckhlaWdodH0sb246e2lucHV0OmUuY2hhbmdlLGluaXQ6ZS5lZGl0b3JJbml0fX0pXSwxKTp0KCJkaXYiLFt0KCJlZGl0b3IiLHthdHRyczp7dmFsdWU6ZS52YWx1ZSxsYW5nOmUubW9kZSx0aGVtZToiZWNsaXBzZSIsd2lkdGg6IjEwMCUiLGhlaWdodDplLmVkaXRvckhlaWdodH0sb246e2luaXQ6ZS5lZGl0b3JJbml0LGlucHV0OmUuY2hhbmdlfX0pXSwxKV0pfSksW10sITEsbnVsbCxudWxsLG51bGwpO3QuZGVmYXVsdD1vLmV4cG9ydHN9LGJlOWQ6ZnVuY3Rpb24oZSx0LHIpe2FjZS5kZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwoZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIvb29wIiksYT1lKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLG89ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudC5kb2MudGFnIixyZWdleDoiQFtcXHdcXGRfXSsifSxvLmdldFRhZ1J1bGUoKSx7ZGVmYXVsdFRva2VuOiJjb21tZW50LmRvYyIsY2FzZUluc2Vuc2l0aXZlOiEwfV19fTtuLmluaGVyaXRzKG8sYSksby5nZXRUYWdSdWxlPWZ1bmN0aW9uKGUpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MudGFnLnN0b3JhZ2UudHlwZSIscmVnZXg6IlxcYig/OlRPRE98RklYTUV8WFhYfEhBQ0spXFxiIn19LG8uZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGUpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmV9fSxvLmdldEVuZFJ1bGU9ZnVuY3Rpb24oZSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIscmVnZXg6IlxcKlxcLyIsbmV4dDplfX0sdC5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9b30pKSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwoZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIvb29wIiksYT1lKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyxvPWUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsaT0iW2EtekEtWlxcJF/CoS3vv79dW2EtekEtWlxcZFxcJF/CoS3vv79dKiIscz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoeyJ2YXJpYWJsZS5sYW5ndWFnZSI6IkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8TmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fEFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXxVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fEVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnxTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8ZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8aXNOYU58cGFyc2VGbG9hdHxwYXJzZUludHxKU09OfE1hdGh8dGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIsa2V5d29yZDoiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8YXN5bmN8YXdhaXR8YnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufGlmfGlufG9mfGluc3RhbmNlb2Z8bmV3fHJldHVybnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVvZnxsZXR8dmFyfHdoaWxlfHdpdGh8ZGVidWdnZXJ8X19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffGNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwic3RvcmFnZS50eXBlIjoiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsImNvbnN0YW50Lmxhbmd1YWdlIjoibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIiwic3VwcG9ydC5mdW5jdGlvbiI6ImFsZXJ0IiwiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6InRydWV8ZmFsc2UifSwiaWRlbnRpZmllciIpLHI9IlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18dVswLTlhLWZBLUZdezR9fHV7WzAtOWEtZkEtRl17MSw2fX18WzAtMl1bMC03XXswLDJ9fDNbMC03XVswLTddP3xbNC03XVswLTddP3wuKSI7dGhpcy4kcnVsZXM9e25vX3JlZ2V4OlthLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksYygibm9fcmVnZXgiKSx7dG9rZW46InN0cmluZyIscmVnZXg6IicoPz0uKSIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonIig/PS4pJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6LzAoPzpbeFhdWzAtOWEtZkEtRl0rfFtvT11bMC03XSt8W2JCXVswMV0rKVxiL30se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDovKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vfSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJwdW5jdHVhdGlvbi5vcGVyYXRvciIsInN1cHBvcnQuZnVuY3Rpb24iLCJwdW5jdHVhdGlvbi5vcGVyYXRvciIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiXSxyZWdleDoiKCIraSsiKShcXC4pKHByb3RvdHlwZSkoXFwuKSgiK2krIikoXFxzKikoPSkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjpbInN0b3JhZ2UudHlwZSIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIsInRleHQiLCJzdG9yYWdlLnR5cGUiLCJ0ZXh0IiwicGFyZW4ubHBhcmVuIl0scmVnZXg6IigiK2krIikoXFwuKSgiK2krIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjpbImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiLCJ0ZXh0Iiwic3RvcmFnZS50eXBlIiwidGV4dCIsInBhcmVuLmxwYXJlbiJdLHJlZ2V4OiIoIitpKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIixuZXh0OiJmdW5jdGlvbl9hcmd1bWVudHMifSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJwdW5jdHVhdGlvbi5vcGVyYXRvciIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiLCJ0ZXh0Iiwic3RvcmFnZS50eXBlIiwidGV4dCIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsInBhcmVuLmxwYXJlbiJdLHJlZ2V4OiIoIitpKyIpKFxcLikoIitpKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIixuZXh0OiJmdW5jdGlvbl9hcmd1bWVudHMifSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJ0ZXh0IiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCJ0ZXh0IiwicGFyZW4ubHBhcmVuIl0scmVnZXg6IihmdW5jdGlvbikoXFxzKykoIitpKyIpKFxccyopKFxcKCkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjpbImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwidGV4dCIsInN0b3JhZ2UudHlwZSIsInRleHQiLCJwYXJlbi5scGFyZW4iXSxyZWdleDoiKCIraSsiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsbmV4dDoiZnVuY3Rpb25fYXJndW1lbnRzIn0se3Rva2VuOlsidGV4dCIsInRleHQiLCJzdG9yYWdlLnR5cGUiLCJ0ZXh0IiwicGFyZW4ubHBhcmVuIl0scmVnZXg6Iig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsbmV4dDoiZnVuY3Rpb25fYXJndW1lbnRzIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiZnJvbSg/PVxccyooJ3xcIikpIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiKD86Y2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkKVxcYiIsbmV4dDoic3RhcnQifSx7dG9rZW46WyJzdXBwb3J0LmNvbnN0YW50Il0scmVnZXg6L3RoYXRcYi99LHt0b2tlbjpbInN0b3JhZ2UudHlwZSIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwic3VwcG9ydC5mdW5jdGlvbi5maXJlYnVnIl0scmVnZXg6Lyhjb25zb2xlKShcLikod2FybnxpbmZvfGxvZ3xlcnJvcnx0aW1lfHRyYWNlfHRpbWVFbmR8YXNzZXJ0KVxiL30se3Rva2VuOnQscmVnZXg6aX0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6L1suXSg/IVsuXSkvLG5leHQ6InByb3BlcnR5In0se3Rva2VuOiJzdG9yYWdlLnR5cGUiLHJlZ2V4Oi89Pi99LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6Ly0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLG5leHQ6InN0YXJ0In0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6L1s/Oiw7Ll0vLG5leHQ6InN0YXJ0In0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4Oi9bXFsoe10vLG5leHQ6InN0YXJ0In0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4Oi9bXF0pfV0vfSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4Oi9eIyEuKiQvfV0scHJvcGVydHk6W3t0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJwdW5jdHVhdGlvbi5vcGVyYXRvciIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiLCJ0ZXh0Iiwic3RvcmFnZS50eXBlIiwidGV4dCIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsInBhcmVuLmxwYXJlbiJdLHJlZ2V4OiIoIitpKyIpKFxcLikoIitpKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKSg/OihcXHMrKShcXHcrKSk/KFxccyopKFxcKCkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLHJlZ2V4Oi9bLl0oPyFbLl0pL30se3Rva2VuOiJzdXBwb3J0LmZ1bmN0aW9uIixyZWdleDovKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS99LHt0b2tlbjoic3VwcG9ydC5mdW5jdGlvbi5kb20iLHJlZ2V4Oi8ocyg/OnViKD86c3RyaW5nRGF0YXxtaXQpfHBsaXRUZXh0fGUoPzp0KD86TmFtZWRJdGVtfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8bGVjdCkpfGhhcyg/OkNoaWxkTm9kZXN8RmVhdHVyZSl8bmFtZWRJdGVtfGMoPzpsKD86aWNrfG8oPzpzZXxuZU5vZGUpKXxyZWF0ZSg/OkMoPzpvbW1lbnR8REFUQVNlY3Rpb258YXB0aW9uKXxUKD86SGVhZHxleHROb2RlfEZvb3QpfERvY3VtZW50RnJhZ21lbnR8UHJvY2Vzc2luZ0luc3RydWN0aW9ufEUoPzpudGl0eVJlZmVyZW5jZXxsZW1lbnQpfEF0dHJpYnV0ZSkpfHRhYkluZGV4fGkoPzpuc2VydCg/OlJvd3xCZWZvcmV8Q2VsbHxEYXRhKXx0ZW0pfG9wZW58ZGVsZXRlKD86Um93fEMoPzplbGx8YXB0aW9uKXxUKD86SGVhZHxGb290KXxEYXRhKXxmb2N1c3x3cml0ZSg/OmxuKT98YSg/OmRkfHBwZW5kKD86Q2hpbGR8RGF0YSkpfHJlKD86c2V0fHBsYWNlKD86Q2hpbGR8RGF0YSl8bW92ZSg/Ok5hbWVkSXRlbXxDaGlsZHxBdHRyaWJ1dGUoPzpOb2RlKT8pPyl8Z2V0KD86TmFtZWRJdGVtfEVsZW1lbnQoPzpzQnkoPzpOYW1lfFRhZ05hbWV8Q2xhc3NOYW1lKXxCeUlkKXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGJsdXIpXGIoPz1cKCkvfSx7dG9rZW46InN1cHBvcnQuY29uc3RhbnQiLHJlZ2V4Oi8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvfSx7dG9rZW46ImlkZW50aWZpZXIiLHJlZ2V4Oml9LHtyZWdleDoiIix0b2tlbjoiZW1wdHkiLG5leHQ6Im5vX3JlZ2V4In1dLHN0YXJ0OlthLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksYygic3RhcnQiKSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJcXC8iLG5leHQ6InJlZ2V4In0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzK3xeJCIsbmV4dDoic3RhcnQifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJub19yZWdleCJ9XSxyZWdleDpbe3Rva2VuOiJyZWdleHAua2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiL1tzeG5naW15XSoiLG5leHQ6Im5vX3JlZ2V4In0se3Rva2VuOiJpbnZhbGlkIixyZWdleDovXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9L30se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4Oi9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vfSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIscmVnZXg6L1x8L30se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4Oi9cW1xePy8sbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIn0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiQiLG5leHQ6Im5vX3JlZ2V4In0se2RlZmF1bHRUb2tlbjoic3RyaW5nLnJlZ2V4cCJ9XSxyZWdleF9jaGFyYWN0ZXJfY2xhc3M6W3t0b2tlbjoicmVnZXhwLmNoYXJjbGFzcy5rZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIscmVnZXg6Il0iLG5leHQ6InJlZ2V4In0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4OiItIn0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiQiLG5leHQ6Im5vX3JlZ2V4In0se2RlZmF1bHRUb2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MifV0sZnVuY3Rpb25fYXJndW1lbnRzOlt7dG9rZW46InZhcmlhYmxlLnBhcmFtZXRlciIscmVnZXg6aX0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IlssIF0rIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IiQifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJub19yZWdleCJ9XSxxcXN0cmluZzpbe3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4OnJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiXFxcXCQiLGNvbnN1bWVMaW5lRW5kOiEwfSx7dG9rZW46InN0cmluZyIscmVnZXg6JyJ8JCcsbmV4dDoibm9fcmVnZXgifSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcifV0scXN0cmluZzpbe3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4OnJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiXFxcXCQiLGNvbnN1bWVMaW5lRW5kOiEwfSx7dG9rZW46InN0cmluZyIscmVnZXg6Iid8JCIsbmV4dDoibm9fcmVnZXgifSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcifV19LGUmJmUubm9FUzZ8fCh0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHtyZWdleDoiW3t9XSIsb25NYXRjaDpmdW5jdGlvbihlLHQscil7aWYodGhpcy5uZXh0PSJ7Ij09ZT90aGlzLm5leHRTdGF0ZToiIiwieyI9PWUmJnIubGVuZ3RoKXIudW5zaGlmdCgic3RhcnQiLHQpO2Vsc2UgaWYoIn0iPT1lJiZyLmxlbmd0aCYmKHIuc2hpZnQoKSx0aGlzLm5leHQ9ci5zaGlmdCgpLC0xIT10aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIil8fC0xIT10aGlzLm5leHQuaW5kZXhPZigianN4IikpKXJldHVybiJwYXJlbi5xdWFzaS5lbmQiO3JldHVybiJ7Ij09ZT8icGFyZW4ubHBhcmVuIjoicGFyZW4ucnBhcmVuIn0sbmV4dFN0YXRlOiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nLnF1YXNpLnN0YXJ0IixyZWdleDovYC8scHVzaDpbe3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4OnJ9LHt0b2tlbjoicGFyZW4ucXVhc2kuc3RhcnQiLHJlZ2V4Oi9cJHsvLHB1c2g6InN0YXJ0In0se3Rva2VuOiJzdHJpbmcucXVhc2kuZW5kIixyZWdleDovYC8sbmV4dDoicG9wIn0se2RlZmF1bHRUb2tlbjoic3RyaW5nLnF1YXNpIn1dfSksZSYmMD09ZS5qc3h8fGwuY2FsbCh0aGlzKSksdGhpcy5lbWJlZFJ1bGVzKGEsImRvYy0iLFthLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IildKSx0aGlzLm5vcm1hbGl6ZVJ1bGVzKCl9O2Z1bmN0aW9uIGwoKXt2YXIgZT1pLnJlcGxhY2UoIlxcZCIsIlxcZFxcLSIpLHQ9e29uTWF0Y2g6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPSIvIj09ZS5jaGFyQXQoMSk/MjoxO3JldHVybiAxPT1uPyh0IT10aGlzLm5leHRTdGF0ZT9yLnVuc2hpZnQodGhpcy5uZXh0LHRoaXMubmV4dFN0YXRlLDApOnIudW5zaGlmdCh0aGlzLm5leHQpLHJbMl0rKyk6Mj09biYmdD09dGhpcy5uZXh0U3RhdGUmJihyWzFdLS0sKCFyWzFdfHxyWzFdPDApJiYoci5zaGlmdCgpLHIuc2hpZnQoKSkpLFt7dHlwZToibWV0YS50YWcucHVuY3R1YXRpb24uIisoMT09bj8iIjoiZW5kLSIpKyJ0YWctb3Blbi54bWwiLHZhbHVlOmUuc2xpY2UoMCxuKX0se3R5cGU6Im1ldGEudGFnLnRhZy1uYW1lLnhtbCIsdmFsdWU6ZS5zdWJzdHIobil9XX0scmVnZXg6IjwvPyIrZSxuZXh0OiJqc3hBdHRyaWJ1dGVzIixuZXh0U3RhdGU6ImpzeCJ9O3RoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQodCk7dmFyIHI9e3JlZ2V4OiJ7Iix0b2tlbjoicGFyZW4ucXVhc2kuc3RhcnQiLHB1c2g6InN0YXJ0In07dGhpcy4kcnVsZXMuanN4PVtyLHQse2luY2x1ZGU6InJlZmVyZW5jZSJ9LHtkZWZhdWx0VG9rZW46InN0cmluZyJ9XSx0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzPVt7dG9rZW46Im1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLHJlZ2V4OiIvPz4iLG9uTWF0Y2g6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0PT1yWzBdJiZyLnNoaWZ0KCksMj09ZS5sZW5ndGgmJihyWzBdPT10aGlzLm5leHRTdGF0ZSYmclsxXS0tLCghclsxXXx8clsxXTwwKSYmci5zcGxpY2UoMCwyKSksdGhpcy5uZXh0PXJbMF18fCJzdGFydCIsW3t0eXBlOnRoaXMudG9rZW4sdmFsdWU6ZX1dfSxuZXh0U3RhdGU6ImpzeCJ9LHIsYygianN4QXR0cmlidXRlcyIpLHt0b2tlbjoiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIscmVnZXg6ZX0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIixyZWdleDoiPSJ9LHt0b2tlbjoidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6IiciLHN0YXRlTmFtZToianN4X2F0dHJfcSIscHVzaDpbe3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6IiciLG5leHQ6InBvcCJ9LHtpbmNsdWRlOiJyZWZlcmVuY2UifSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9XX0se3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6JyInLHN0YXRlTmFtZToianN4X2F0dHJfcXEiLHB1c2g6W3t0b2tlbjoic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLHJlZ2V4OiciJyxuZXh0OiJwb3AifSx7aW5jbHVkZToicmVmZXJlbmNlIn0se2RlZmF1bHRUb2tlbjoic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifV19LHRdLHRoaXMuJHJ1bGVzLnJlZmVyZW5jZT1be3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIscmVnZXg6Iig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIn1dfWZ1bmN0aW9uIGMoZSl7cmV0dXJuW3t0b2tlbjoiY29tbWVudCIscmVnZXg6L1wvXCovLG5leHQ6W2EuZ2V0VGFnUnVsZSgpLHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcKlxcLyIsbmV4dDplfHwicG9wIn0se2RlZmF1bHRUb2tlbjoiY29tbWVudCIsY2FzZUluc2Vuc2l0aXZlOiEwfV19LHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLyIsbmV4dDpbYS5nZXRUYWdSdWxlKCkse3Rva2VuOiJjb21tZW50IixyZWdleDoiJHxeIixuZXh0OmV8fCJwb3AifSx7ZGVmYXVsdFRva2VuOiJjb21tZW50IixjYXNlSW5zZW5zaXRpdmU6ITB9XX1dfW4uaW5oZXJpdHMocyxvKSx0LkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcz1zfSkpLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwoZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9yYW5nZSIpLlJhbmdlLGE9ZnVuY3Rpb24oKXt9OyhmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuISEvXlxzKyQvLnRlc3QoZSkmJi9eXHMqXH0vLnRlc3QodCl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmdldExpbmUodCkubWF0Y2goL14oXHMqXH0pLyk7aWYoIXIpcmV0dXJuIDA7dmFyIGE9clsxXS5sZW5ndGgsbz1lLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzp0LGNvbHVtbjphfSk7aWYoIW98fG8ucm93PT10KXJldHVybiAwO3ZhciBpPXRoaXMuJGdldEluZGVudChlLmdldExpbmUoby5yb3cpKTtlLnJlcGxhY2UobmV3IG4odCwwLHQsYS0xKSxpKX0sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKC9eXHMqLylbMF19fSkuY2FsbChhLnByb3RvdHlwZSksdC5NYXRjaGluZ0JyYWNlT3V0ZGVudD1hfSkpLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLChmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYi9vb3AiKSxhPWUoIi4uLy4uL3JhbmdlIikuUmFuZ2Usbz1lKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGk9dC5Gb2xkTW9kZT1mdW5jdGlvbihlKXtlJiYodGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bmV3IFJlZ0V4cCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywifCIrZS5zdGFydCkpLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bmV3IFJlZ0V4cCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCJ8IitlLmVuZCkpKX07bi5pbmhlcml0cyhpLG8pLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9LyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvLHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPS9eXHMqKFwvXCopLipcKlwvXHMqJC8sdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmU9L15ccyooXC9cKlwqXCopLipcKlwvXHMqJC8sdGhpcy5zdGFydFJlZ2lvblJlPS9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLyx0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZT10aGlzLmdldEZvbGRXaWRnZXQsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmdldExpbmUocik7aWYodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChuKSYmIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KG4pJiYhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChuKSlyZXR1cm4iIjt2YXIgYT10aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShlLHQscik7cmV0dXJuIWEmJnRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KG4pPyJzdGFydCI6YX0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9ZS5nZXRMaW5lKHIpO2lmKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGEpKXJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhlLGEscik7dmFyIG89YS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYobyl7dmFyIGk9by5pbmRleDtpZihvWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soZSxvWzFdLHIsaSk7dmFyIHM9ZS5nZXRDb21tZW50Rm9sZFJhbmdlKHIsaStvWzBdLmxlbmd0aCwxKTtyZXR1cm4gcyYmIXMuaXNNdWx0aUxpbmUoKSYmKG4/cz10aGlzLmdldFNlY3Rpb25SYW5nZShlLHIpOiJhbGwiIT10JiYocz1udWxsKSksc31yZXR1cm4ibWFya2JlZ2luIiE9PXQmJihvPWEubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcikpPyhpPW8uaW5kZXgrb1swXS5sZW5ndGgsb1sxXT90aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soZSxvWzFdLHIsaSk6ZS5nZXRDb21tZW50Rm9sZFJhbmdlKHIsaSwtMSkpOnZvaWQgMH0sdGhpcy5nZXRTZWN0aW9uUmFuZ2U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5nZXRMaW5lKHQpLG49ci5zZWFyY2goL1xTLyksbz10LGk9ci5sZW5ndGgscz10Kz0xLGw9ZS5nZXRMZW5ndGgoKTsrK3Q8bDspe3ZhciBjPShyPWUuZ2V0TGluZSh0KSkuc2VhcmNoKC9cUy8pO2lmKC0xIT09Yyl7aWYobj5jKWJyZWFrO3ZhciB1PXRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKGUsImFsbCIsdCk7aWYodSl7aWYodS5zdGFydC5yb3c8PW8pYnJlYWs7aWYodS5pc011bHRpTGluZSgpKXQ9dS5lbmQucm93O2Vsc2UgaWYobj09YylicmVha31zPXR9fXJldHVybiBuZXcgYShvLGkscyxlLmdldExpbmUocykubGVuZ3RoKX0sdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2s9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj10LnNlYXJjaCgvXHMqJC8pLG89ZS5nZXRMZW5ndGgoKSxpPXIscz0vXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLyxsPTE7KytyPG87KXt0PWUuZ2V0TGluZShyKTt2YXIgYz1zLmV4ZWModCk7aWYoYyYmKGNbMV0/bC0tOmwrKywhbCkpYnJlYWt9aWYocj5pKXJldHVybiBuZXcgYShpLG4scix0Lmxlbmd0aCl9fS5jYWxsKGkucHJvdG90eXBlKX0pKSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sKGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGE9ZSgiLi4vbGliL29vcCIpLG89ZSgiLi90ZXh0IikuTW9kZSxpPWUoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMscz1lKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxsPWUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50LGM9ZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLHU9ZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlLGQ9ZnVuY3Rpb24oKXt0aGlzLkhpZ2hsaWdodFJ1bGVzPWksdGhpcy4kb3V0ZGVudD1uZXcgcyx0aGlzLiRiZWhhdmlvdXI9bmV3IGMsdGhpcy5mb2xkaW5nUnVsZXM9bmV3IHV9O2EuaW5oZXJpdHMoZCxvKSxmdW5jdGlvbigpe3RoaXMubGluZUNvbW1lbnRTdGFydD0iLy8iLHRoaXMuYmxvY2tDb21tZW50PXtzdGFydDoiLyoiLGVuZDoiKi8ifSx0aGlzLiRxdW90ZXM9eyciJzonIicsIiciOiInIiwiYCI6ImAifSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLiRnZXRJbmRlbnQodCksYT10aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnModCxlKSxvPWEudG9rZW5zLGk9YS5zdGF0ZTtpZihvLmxlbmd0aCYmImNvbW1lbnQiPT1vW28ubGVuZ3RoLTFdLnR5cGUpcmV0dXJuIG47aWYoInN0YXJ0Ij09ZXx8Im5vX3JlZ2V4Ij09ZSl7dmFyIHM9dC5tYXRjaCgvXi4qKD86XGJjYXNlXGIuKjp8W1x7XChcW10pXHMqJC8pO3MmJihuKz1yKX1lbHNlIGlmKCJkb2Mtc3RhcnQiPT1lKXtpZigic3RhcnQiPT1pfHwibm9fcmVnZXgiPT1pKXJldHVybiIiOyhzPXQubWF0Y2goL15ccyooXC8/KVwqLykpJiYoc1sxXSYmKG4rPSIgIiksbis9IiogIil9cmV0dXJuIG59LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQodCxyKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihlLHQscil7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudCh0LHIpfSx0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihlKXt2YXIgdD1uZXcgbChbImFjZSJdLHIoIjZkNjgiKSwiSmF2YVNjcmlwdFdvcmtlciIpO3JldHVybiB0LmF0dGFjaFRvRG9jdW1lbnQoZS5nZXREb2N1bWVudCgpKSx0Lm9uKCJhbm5vdGF0ZSIsKGZ1bmN0aW9uKHQpe2Uuc2V0QW5ub3RhdGlvbnModC5kYXRhKX0pKSx0Lm9uKCJ0ZXJtaW5hdGUiLChmdW5jdGlvbigpe2UuY2xlYXJBbm5vdGF0aW9ucygpfSkpLHR9LHRoaXMuJGlkPSJhY2UvbW9kZS9qYXZhc2NyaXB0In0uY2FsbChkLnByb3RvdHlwZSksdC5Nb2RlPWR9KSksYWNlLmRlZmluZSgiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwoZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIvb29wIiksYT0oZSgiLi4vbGliL2xhbmciKSxlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzKSxvPXQuc3VwcG9ydFR5cGU9ImFsaWduLWNvbnRlbnR8YWxpZ24taXRlbXN8YWxpZ24tc2VsZnxhbGx8YW5pbWF0aW9ufGFuaW1hdGlvbi1kZWxheXxhbmltYXRpb24tZGlyZWN0aW9ufGFuaW1hdGlvbi1kdXJhdGlvbnxhbmltYXRpb24tZmlsbC1tb2RlfGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnR8YW5pbWF0aW9uLW5hbWV8YW5pbWF0aW9uLXBsYXktc3RhdGV8YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbnxiYWNrZmFjZS12aXNpYmlsaXR5fGJhY2tncm91bmR8YmFja2dyb3VuZC1hdHRhY2htZW50fGJhY2tncm91bmQtYmxlbmQtbW9kZXxiYWNrZ3JvdW5kLWNsaXB8YmFja2dyb3VuZC1jb2xvcnxiYWNrZ3JvdW5kLWltYWdlfGJhY2tncm91bmQtb3JpZ2lufGJhY2tncm91bmQtcG9zaXRpb258YmFja2dyb3VuZC1yZXBlYXR8YmFja2dyb3VuZC1zaXplfGJvcmRlcnxib3JkZXItYm90dG9tfGJvcmRlci1ib3R0b20tY29sb3J8Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c3xib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1c3xib3JkZXItYm90dG9tLXN0eWxlfGJvcmRlci1ib3R0b20td2lkdGh8Ym9yZGVyLWNvbGxhcHNlfGJvcmRlci1jb2xvcnxib3JkZXItaW1hZ2V8Ym9yZGVyLWltYWdlLW91dHNldHxib3JkZXItaW1hZ2UtcmVwZWF0fGJvcmRlci1pbWFnZS1zbGljZXxib3JkZXItaW1hZ2Utc291cmNlfGJvcmRlci1pbWFnZS13aWR0aHxib3JkZXItbGVmdHxib3JkZXItbGVmdC1jb2xvcnxib3JkZXItbGVmdC1zdHlsZXxib3JkZXItbGVmdC13aWR0aHxib3JkZXItcmFkaXVzfGJvcmRlci1yaWdodHxib3JkZXItcmlnaHQtY29sb3J8Ym9yZGVyLXJpZ2h0LXN0eWxlfGJvcmRlci1yaWdodC13aWR0aHxib3JkZXItc3BhY2luZ3xib3JkZXItc3R5bGV8Ym9yZGVyLXRvcHxib3JkZXItdG9wLWNvbG9yfGJvcmRlci10b3AtbGVmdC1yYWRpdXN8Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXN8Ym9yZGVyLXRvcC1zdHlsZXxib3JkZXItdG9wLXdpZHRofGJvcmRlci13aWR0aHxib3R0b218Ym94LXNoYWRvd3xib3gtc2l6aW5nfGNhcHRpb24tc2lkZXxjbGVhcnxjbGlwfGNvbG9yfGNvbHVtbi1jb3VudHxjb2x1bW4tZmlsbHxjb2x1bW4tZ2FwfGNvbHVtbi1ydWxlfGNvbHVtbi1ydWxlLWNvbG9yfGNvbHVtbi1ydWxlLXN0eWxlfGNvbHVtbi1ydWxlLXdpZHRofGNvbHVtbi1zcGFufGNvbHVtbi13aWR0aHxjb2x1bW5zfGNvbnRlbnR8Y291bnRlci1pbmNyZW1lbnR8Y291bnRlci1yZXNldHxjdXJzb3J8ZGlyZWN0aW9ufGRpc3BsYXl8ZW1wdHktY2VsbHN8ZmlsdGVyfGZsZXh8ZmxleC1iYXNpc3xmbGV4LWRpcmVjdGlvbnxmbGV4LWZsb3d8ZmxleC1ncm93fGZsZXgtc2hyaW5rfGZsZXgtd3JhcHxmbG9hdHxmb250fGZvbnQtZmFtaWx5fGZvbnQtc2l6ZXxmb250LXNpemUtYWRqdXN0fGZvbnQtc3RyZXRjaHxmb250LXN0eWxlfGZvbnQtdmFyaWFudHxmb250LXdlaWdodHxoYW5naW5nLXB1bmN0dWF0aW9ufGhlaWdodHxqdXN0aWZ5LWNvbnRlbnR8bGVmdHxsZXR0ZXItc3BhY2luZ3xsaW5lLWhlaWdodHxsaXN0LXN0eWxlfGxpc3Qtc3R5bGUtaW1hZ2V8bGlzdC1zdHlsZS1wb3NpdGlvbnxsaXN0LXN0eWxlLXR5cGV8bWFyZ2lufG1hcmdpbi1ib3R0b218bWFyZ2luLWxlZnR8bWFyZ2luLXJpZ2h0fG1hcmdpbi10b3B8bWF4LWhlaWdodHxtYXgtd2lkdGh8bWluLWhlaWdodHxtaW4td2lkdGh8bmF2LWRvd258bmF2LWluZGV4fG5hdi1sZWZ0fG5hdi1yaWdodHxuYXYtdXB8b3BhY2l0eXxvcmRlcnxvdXRsaW5lfG91dGxpbmUtY29sb3J8b3V0bGluZS1vZmZzZXR8b3V0bGluZS1zdHlsZXxvdXRsaW5lLXdpZHRofG92ZXJmbG93fG92ZXJmbG93LXh8b3ZlcmZsb3cteXxwYWRkaW5nfHBhZGRpbmctYm90dG9tfHBhZGRpbmctbGVmdHxwYWRkaW5nLXJpZ2h0fHBhZGRpbmctdG9wfHBhZ2UtYnJlYWstYWZ0ZXJ8cGFnZS1icmVhay1iZWZvcmV8cGFnZS1icmVhay1pbnNpZGV8cGVyc3BlY3RpdmV8cGVyc3BlY3RpdmUtb3JpZ2lufHBvc2l0aW9ufHF1b3Rlc3xyZXNpemV8cmlnaHR8dGFiLXNpemV8dGFibGUtbGF5b3V0fHRleHQtYWxpZ258dGV4dC1hbGlnbi1sYXN0fHRleHQtZGVjb3JhdGlvbnx0ZXh0LWRlY29yYXRpb24tY29sb3J8dGV4dC1kZWNvcmF0aW9uLWxpbmV8dGV4dC1kZWNvcmF0aW9uLXN0eWxlfHRleHQtaW5kZW50fHRleHQtanVzdGlmeXx0ZXh0LW92ZXJmbG93fHRleHQtc2hhZG93fHRleHQtdHJhbnNmb3JtfHRvcHx0cmFuc2Zvcm18dHJhbnNmb3JtLW9yaWdpbnx0cmFuc2Zvcm0tc3R5bGV8dHJhbnNpdGlvbnx0cmFuc2l0aW9uLWRlbGF5fHRyYW5zaXRpb24tZHVyYXRpb258dHJhbnNpdGlvbi1wcm9wZXJ0eXx0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbnx1bmljb2RlLWJpZGl8dmVydGljYWwtYWxpZ258dmlzaWJpbGl0eXx3aGl0ZS1zcGFjZXx3aWR0aHx3b3JkLWJyZWFrfHdvcmQtc3BhY2luZ3x3b3JkLXdyYXB8ei1pbmRleCIsaT10LnN1cHBvcnRGdW5jdGlvbj0icmdifHJnYmF8dXJsfGF0dHJ8Y291bnRlcnxjb3VudGVycyIscz10LnN1cHBvcnRDb25zdGFudD0iYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm8iLGw9dC5zdXBwb3J0Q29uc3RhbnRDb2xvcj0iYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iLGM9dC5zdXBwb3J0Q29uc3RhbnRGb250cz0iYXJpYWx8Y2VudHVyeXxjb21pY3xjb3VyaWVyfGN1cnNpdmV8ZmFudGFzeXxnYXJhbW9uZHxnZW9yZ2lhfGhlbHZldGljYXxpbXBhY3R8bHVjaWRhfHN5bWJvbHxzeXN0ZW18dGFob21hfHRpbWVzfHRyZWJ1Y2hldHx1dG9waWF8dmVyZGFuYXx3ZWJkaW5nc3xzYW5zLXNlcmlmfHNlcmlmfG1vbm9zcGFjZSIsdT10Lm51bVJlPSJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIixkPXQucHNldWRvRWxlbWVudHM9IihcXDorKVxcYihhZnRlcnxiZWZvcmV8Zmlyc3QtbGV0dGVyfGZpcnN0LWxpbmV8bW96LXNlbGVjdGlvbnxzZWxlY3Rpb24pXFxiIixwPXQucHNldWRvQ2xhc3Nlcz0iKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8YWNlcXVpcmVkfHJvb3R8dGFyZ2V0fHZhbGlkfHZpc2l0ZWQpXFxiIixtPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsic3VwcG9ydC5mdW5jdGlvbiI6aSwic3VwcG9ydC5jb25zdGFudCI6cywic3VwcG9ydC50eXBlIjpvLCJzdXBwb3J0LmNvbnN0YW50LmNvbG9yIjpsLCJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjpjfSwidGV4dCIsITApO3RoaXMuJHJ1bGVzPXtzdGFydDpbe2luY2x1ZGU6WyJzdHJpbmdzIiwidXJsIiwiY29tbWVudHMiXX0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJcXHsiLG5leHQ6InJ1bGVzZXQifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IlxcfSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiQCIsbmV4dDoibWVkaWEifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIjW2EtejAtOS1fXSsifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIlIn0se3Rva2VuOiJ2YXJpYWJsZSIscmVnZXg6IlxcLlthLXowLTktX10rIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiI6W2EtejAtOS1fXSsifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OnV9LHt0b2tlbjoiY29uc3RhbnQiLHJlZ2V4OiJbYS16MC05LV9dKyJ9LHtjYXNlSW5zZW5zaXRpdmU6ITB9XSxtZWRpYTpbe2luY2x1ZGU6WyJzdHJpbmdzIiwidXJsIiwiY29tbWVudHMiXX0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJcXHsiLG5leHQ6InN0YXJ0In0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJcXH0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiI7IixuZXh0OiJzdGFydCJ9LHt0b2tlbjoia2V5d29yZCIscmVnZXg6Iig/Om1lZGlhfHN1cHBvcnRzfGRvY3VtZW50fGNoYXJzZXR8aW1wb3J0fG5hbWVzcGFjZXxtZWRpYXxzdXBwb3J0c3xkb2N1bWVudHxwYWdlfGZvbnR8a2V5ZnJhbWVzfHZpZXdwb3J0fGNvdW50ZXItc3R5bGV8Zm9udC1mZWF0dXJlLXZhbHVlc3xzd2FzaHxvcm5hbWVudHN8YW5ub3RhdGlvbnxzdHlsaXN0aWN8c3R5bGVzZXR8Y2hhcmFjdGVyLXZhcmlhbnQpIn1dLGNvbW1lbnRzOlt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXCoiLHB1c2g6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcKlxcLyIsbmV4dDoicG9wIn0se2RlZmF1bHRUb2tlbjoiY29tbWVudCJ9XX1dLHJ1bGVzZXQ6W3tyZWdleDoiLSh3ZWJraXR8bXN8bW96fG8pLSIsdG9rZW46InRleHQifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IlxcfSIsbmV4dDoic3RhcnQifSx7aW5jbHVkZTpbInN0cmluZ3MiLCJ1cmwiLCJjb21tZW50cyJdfSx7dG9rZW46WyJjb25zdGFudC5udW1lcmljIiwia2V5d29yZCJdLHJlZ2V4OiIoIit1KyIpKGNofGNtfGRlZ3xlbXxleHxmcnxnZHxncmFkfEh6fGlufGtIenxtbXxtc3xwY3xwdHxweHxyYWR8cmVtfHN8dHVybnx2aHx2bXx2d3wlKSJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6dX0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiI1thLWYwLTldezZ9In0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiI1thLWYwLTldezN9In0se3Rva2VuOlsicHVuY3R1YXRpb24iLCJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUucHNldWRvLWVsZW1lbnQuY3NzIl0scmVnZXg6ZH0se3Rva2VuOlsicHVuY3R1YXRpb24iLCJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUucHNldWRvLWNsYXNzLmNzcyJdLHJlZ2V4OnB9LHtpbmNsdWRlOiJ1cmwifSx7dG9rZW46ZSxyZWdleDoiXFwtP1thLXpBLVpfXVthLXpBLVowLTlfXFwtXSoifSx7Y2FzZUluc2Vuc2l0aXZlOiEwfV0sdXJsOlt7dG9rZW46InN1cHBvcnQuZnVuY3Rpb24iLHJlZ2V4OiIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLHB1c2g6W3t0b2tlbjoic3VwcG9ydC5mdW5jdGlvbiIscmVnZXg6IlxcKSIsbmV4dDoicG9wIn0se2RlZmF1bHRUb2tlbjoic3RyaW5nIn1dfV0sc3RyaW5nczpbe3Rva2VuOiJzdHJpbmcuc3RhcnQiLHJlZ2V4OiInIixwdXNoOlt7dG9rZW46InN0cmluZy5lbmQiLHJlZ2V4OiInfCQiLG5leHQ6InBvcCJ9LHtpbmNsdWRlOiJlc2NhcGVzIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4Oi9cXCQvLGNvbnN1bWVMaW5lRW5kOiEwfSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcifV19LHt0b2tlbjoic3RyaW5nLnN0YXJ0IixyZWdleDonIicscHVzaDpbe3Rva2VuOiJzdHJpbmcuZW5kIixyZWdleDonInwkJyxuZXh0OiJwb3AifSx7aW5jbHVkZToiZXNjYXBlcyJ9LHt0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIixyZWdleDovXFwkLyxjb25zdW1lTGluZUVuZDohMH0se2RlZmF1bHRUb2tlbjoic3RyaW5nIn1dfV0sZXNjYXBlczpbe3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4Oi9cXChbYS1mQS1GXGRdezEsNn18W15hLWZBLUZcZF0pL31dfSx0aGlzLm5vcm1hbGl6ZVJ1bGVzKCl9O24uaW5oZXJpdHMobSxhKSx0LkNzc0hpZ2hsaWdodFJ1bGVzPW19KSksYWNlLmRlZmluZSgiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sKGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49e2JhY2tncm91bmQ6eyIjJDAiOjF9LCJiYWNrZ3JvdW5kLWNvbG9yIjp7IiMkMCI6MSx0cmFuc3BhcmVudDoxLGZpeGVkOjF9LCJiYWNrZ3JvdW5kLWltYWdlIjp7InVybCgnLyQwJykiOjF9LCJiYWNrZ3JvdW5kLXJlcGVhdCI6e3JlcGVhdDoxLCJyZXBlYXQteCI6MSwicmVwZWF0LXkiOjEsIm5vLXJlcGVhdCI6MSxpbmhlcml0OjF9LCJiYWNrZ3JvdW5kLXBvc2l0aW9uIjp7Ym90dG9tOjIsY2VudGVyOjIsbGVmdDoyLHJpZ2h0OjIsdG9wOjIsaW5oZXJpdDoyfSwiYmFja2dyb3VuZC1hdHRhY2htZW50Ijp7c2Nyb2xsOjEsZml4ZWQ6MX0sImJhY2tncm91bmQtc2l6ZSI6e2NvdmVyOjEsY29udGFpbjoxfSwiYmFja2dyb3VuZC1jbGlwIjp7ImJvcmRlci1ib3giOjEsInBhZGRpbmctYm94IjoxLCJjb250ZW50LWJveCI6MX0sImJhY2tncm91bmQtb3JpZ2luIjp7ImJvcmRlci1ib3giOjEsInBhZGRpbmctYm94IjoxLCJjb250ZW50LWJveCI6MX0sYm9yZGVyOnsic29saWQgJDAiOjEsImRhc2hlZCAkMCI6MSwiZG90dGVkICQwIjoxLCIjJDAiOjF9LCJib3JkZXItY29sb3IiOnsiIyQwIjoxfSwiYm9yZGVyLXN0eWxlIjp7c29saWQ6MixkYXNoZWQ6Mixkb3R0ZWQ6Mixkb3VibGU6Mixncm9vdmU6MixoaWRkZW46Mixpbmhlcml0OjIsaW5zZXQ6Mixub25lOjIsb3V0c2V0OjIscmlkZ2VkOjJ9LCJib3JkZXItY29sbGFwc2UiOntjb2xsYXBzZToxLHNlcGFyYXRlOjF9LGJvdHRvbTp7cHg6MSxlbToxLCIlIjoxfSxjbGVhcjp7bGVmdDoxLHJpZ2h0OjEsYm90aDoxLG5vbmU6MX0sY29sb3I6eyIjJDAiOjEsInJnYigjJDAwLDAsMCkiOjF9LGN1cnNvcjp7ZGVmYXVsdDoxLHBvaW50ZXI6MSxtb3ZlOjEsdGV4dDoxLHdhaXQ6MSxoZWxwOjEscHJvZ3Jlc3M6MSwibi1yZXNpemUiOjEsIm5lLXJlc2l6ZSI6MSwiZS1yZXNpemUiOjEsInNlLXJlc2l6ZSI6MSwicy1yZXNpemUiOjEsInN3LXJlc2l6ZSI6MSwidy1yZXNpemUiOjEsIm53LXJlc2l6ZSI6MX0sZGlzcGxheTp7bm9uZToxLGJsb2NrOjEsaW5saW5lOjEsImlubGluZS1ibG9jayI6MSwidGFibGUtY2VsbCI6MX0sImVtcHR5LWNlbGxzIjp7c2hvdzoxLGhpZGU6MX0sZmxvYXQ6e2xlZnQ6MSxyaWdodDoxLG5vbmU6MX0sImZvbnQtZmFtaWx5Ijp7QXJpYWw6MiwiQ29taWMgU2FucyBNUyI6MixDb25zb2xhczoyLCJDb3VyaWVyIE5ldyI6MixDb3VyaWVyOjIsR2VvcmdpYToyLE1vbm9zcGFjZToyLCJTYW5zLVNlcmlmIjoyLCJTZWdvZSBVSSI6MixUYWhvbWE6MiwiVGltZXMgTmV3IFJvbWFuIjoyLCJUcmVidWNoZXQgTVMiOjIsVmVyZGFuYToxfSwiZm9udC1zaXplIjp7cHg6MSxlbToxLCIlIjoxfSwiZm9udC13ZWlnaHQiOntib2xkOjEsbm9ybWFsOjF9LCJmb250LXN0eWxlIjp7aXRhbGljOjEsbm9ybWFsOjF9LCJmb250LXZhcmlhbnQiOntub3JtYWw6MSwic21hbGwtY2FwcyI6MX0saGVpZ2h0OntweDoxLGVtOjEsIiUiOjF9LGxlZnQ6e3B4OjEsZW06MSwiJSI6MX0sImxldHRlci1zcGFjaW5nIjp7bm9ybWFsOjF9LCJsaW5lLWhlaWdodCI6e25vcm1hbDoxfSwibGlzdC1zdHlsZS10eXBlIjp7bm9uZToxLGRpc2M6MSxjaXJjbGU6MSxzcXVhcmU6MSxkZWNpbWFsOjEsImRlY2ltYWwtbGVhZGluZy16ZXJvIjoxLCJsb3dlci1yb21hbiI6MSwidXBwZXItcm9tYW4iOjEsImxvd2VyLWdyZWVrIjoxLCJsb3dlci1sYXRpbiI6MSwidXBwZXItbGF0aW4iOjEsZ2VvcmdpYW46MSwibG93ZXItYWxwaGEiOjEsInVwcGVyLWFscGhhIjoxfSxtYXJnaW46e3B4OjEsZW06MSwiJSI6MX0sIm1hcmdpbi1yaWdodCI6e3B4OjEsZW06MSwiJSI6MX0sIm1hcmdpbi1sZWZ0Ijp7cHg6MSxlbToxLCIlIjoxfSwibWFyZ2luLXRvcCI6e3B4OjEsZW06MSwiJSI6MX0sIm1hcmdpbi1ib3R0b20iOntweDoxLGVtOjEsIiUiOjF9LCJtYXgtaGVpZ2h0Ijp7cHg6MSxlbToxLCIlIjoxfSwibWF4LXdpZHRoIjp7cHg6MSxlbToxLCIlIjoxfSwibWluLWhlaWdodCI6e3B4OjEsZW06MSwiJSI6MX0sIm1pbi13aWR0aCI6e3B4OjEsZW06MSwiJSI6MX0sb3ZlcmZsb3c6e2hpZGRlbjoxLHZpc2libGU6MSxhdXRvOjEsc2Nyb2xsOjF9LCJvdmVyZmxvdy14Ijp7aGlkZGVuOjEsdmlzaWJsZToxLGF1dG86MSxzY3JvbGw6MX0sIm92ZXJmbG93LXkiOntoaWRkZW46MSx2aXNpYmxlOjEsYXV0bzoxLHNjcm9sbDoxfSxwYWRkaW5nOntweDoxLGVtOjEsIiUiOjF9LCJwYWRkaW5nLXRvcCI6e3B4OjEsZW06MSwiJSI6MX0sInBhZGRpbmctcmlnaHQiOntweDoxLGVtOjEsIiUiOjF9LCJwYWRkaW5nLWJvdHRvbSI6e3B4OjEsZW06MSwiJSI6MX0sInBhZGRpbmctbGVmdCI6e3B4OjEsZW06MSwiJSI6MX0sInBhZ2UtYnJlYWstYWZ0ZXIiOnthdXRvOjEsYWx3YXlzOjEsYXZvaWQ6MSxsZWZ0OjEscmlnaHQ6MX0sInBhZ2UtYnJlYWstYmVmb3JlIjp7YXV0bzoxLGFsd2F5czoxLGF2b2lkOjEsbGVmdDoxLHJpZ2h0OjF9LHBvc2l0aW9uOnthYnNvbHV0ZToxLHJlbGF0aXZlOjEsZml4ZWQ6MSxzdGF0aWM6MX0scmlnaHQ6e3B4OjEsZW06MSwiJSI6MX0sInRhYmxlLWxheW91dCI6e2ZpeGVkOjEsYXV0bzoxfSwidGV4dC1kZWNvcmF0aW9uIjp7bm9uZToxLHVuZGVybGluZToxLCJsaW5lLXRocm91Z2giOjEsYmxpbms6MX0sInRleHQtYWxpZ24iOntsZWZ0OjEscmlnaHQ6MSxjZW50ZXI6MSxqdXN0aWZ5OjF9LCJ0ZXh0LXRyYW5zZm9ybSI6e2NhcGl0YWxpemU6MSx1cHBlcmNhc2U6MSxsb3dlcmNhc2U6MSxub25lOjF9LHRvcDp7cHg6MSxlbToxLCIlIjoxfSwidmVydGljYWwtYWxpZ24iOnt0b3A6MSxib3R0b206MX0sdmlzaWJpbGl0eTp7aGlkZGVuOjEsdmlzaWJsZToxfSwid2hpdGUtc3BhY2UiOntub3dyYXA6MSxub3JtYWw6MSxwcmU6MSwicHJlLWxpbmUiOjEsInByZS13cmFwIjoxfSx3aWR0aDp7cHg6MSxlbToxLCIlIjoxfSwid29yZC1zcGFjaW5nIjp7bm9ybWFsOjF9LGZpbHRlcjp7ImFscGhhKG9wYWNpdHk9JDAxMDApIjoxfSwidGV4dC1zaGFkb3ciOnsiJDAycHggMnB4IDJweCAjNzc3IjoxfSwidGV4dC1vdmVyZmxvdyI6eyJlbGxpcHNpcy13b3JkIjoxLGNsaXA6MSxlbGxpcHNpczoxfSwiLW1vei1ib3JkZXItcmFkaXVzIjoxLCItbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQiOjEsIi1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodCI6MSwiLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQiOjEsIi1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0IjoxLCItd2Via2l0LWJvcmRlci1yYWRpdXMiOjEsIi13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiOjEsIi13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyI6MSwiLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyI6MSwiLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIjoxLCItbW96LWJveC1zaGFkb3ciOjEsIi13ZWJraXQtYm94LXNoYWRvdyI6MSx0cmFuc2Zvcm06eyJyb3RhdGUoJDAwZGVnKSI6MSwic2tldygkMDBkZWcpIjoxfSwiLW1vei10cmFuc2Zvcm0iOnsicm90YXRlKCQwMGRlZykiOjEsInNrZXcoJDAwZGVnKSI6MX0sIi13ZWJraXQtdHJhbnNmb3JtIjp7InJvdGF0ZSgkMDBkZWcpIjoxLCJza2V3KCQwMGRlZykiOjF9fSxhPWZ1bmN0aW9uKCl7fTsoZnVuY3Rpb24oKXt0aGlzLmNvbXBsZXRpb25zRGVmaW5lZD0hMSx0aGlzLmRlZmluZUNvbXBsZXRpb25zPWZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKS5zdHlsZTtmb3IodmFyIHQgaW4gZSlpZigic3RyaW5nIj09dHlwZW9mIGVbdF0pe3ZhciByPXQucmVwbGFjZSgvW0EtWl0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIi0iK2UudG9Mb3dlckNhc2UoKX0pKTtuLmhhc093blByb3BlcnR5KHIpfHwobltyXT0xKX19dGhpcy5jb21wbGV0aW9uc0RlZmluZWQ9ITB9LHRoaXMuZ2V0Q29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LHIsbil7aWYodGhpcy5jb21wbGV0aW9uc0RlZmluZWR8fHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKSwhdC5nZXRUb2tlbkF0KHIucm93LHIuY29sdW1uKSlyZXR1cm5bXTtpZigicnVsZXNldCI9PT1lKXt2YXIgYT10LmdldExpbmUoci5yb3cpLnN1YnN0cigwLHIuY29sdW1uKTtyZXR1cm4vOlteO10rJC8udGVzdChhKT8oLyhbXHdcLV0rKTpbXjpdKiQvLnRlc3QoYSksdGhpcy5nZXRQcm9wZXJ0eVZhbHVlQ29tcGxldGlvbnMoZSx0LHIsbikpOnRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhlLHQscixuKX1yZXR1cm5bXX0sdGhpcy5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxyLGEpe3JldHVybiBPYmplY3Qua2V5cyhuKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntjYXB0aW9uOmUsc25pcHBldDplKyI6ICQwOyIsbWV0YToicHJvcGVydHkiLHNjb3JlOk51bWJlci5NQVhfVkFMVUV9fSkpfSx0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQscixhKXt2YXIgbz10LmdldExpbmUoci5yb3cpLnN1YnN0cigwLHIuY29sdW1uKSxpPSgvKFtcd1wtXSspOlteOl0qJC8uZXhlYyhvKXx8e30pWzFdO2lmKCFpKXJldHVybltdO3ZhciBzPVtdO3JldHVybiBpIGluIG4mJiJvYmplY3QiPT10eXBlb2YgbltpXSYmKHM9T2JqZWN0LmtleXMobltpXSkpLHMubWFwKChmdW5jdGlvbihlKXtyZXR1cm57Y2FwdGlvbjplLHNuaXBwZXQ6ZSxtZXRhOiJwcm9wZXJ0eSB2YWx1ZSIsc2NvcmU6TnVtYmVyLk1BWF9WQUxVRX19KSl9fSkuY2FsbChhLnByb3RvdHlwZSksdC5Dc3NDb21wbGV0aW9ucz1hfSkpLGFjZS5kZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwoZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIvb29wIiksYT0oZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLGUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyKSxvPWUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcixpPWZ1bmN0aW9uKCl7dGhpcy5pbmhlcml0KGEpLHRoaXMuYWRkKCJjb2xvbiIsImluc2VydGlvbiIsKGZ1bmN0aW9uKGUsdCxyLG4sYSl7aWYoIjoiPT09YSl7dmFyIGk9ci5nZXRDdXJzb3JQb3NpdGlvbigpLHM9bmV3IG8obixpLnJvdyxpLmNvbHVtbiksbD1zLmdldEN1cnJlbnRUb2tlbigpO2lmKGwmJmwudmFsdWUubWF0Y2goL1xzKy8pJiYobD1zLnN0ZXBCYWNrd2FyZCgpKSxsJiYic3VwcG9ydC50eXBlIj09PWwudHlwZSl7dmFyIGM9bi5kb2MuZ2V0TGluZShpLnJvdyk7aWYoIjoiPT09Yy5zdWJzdHJpbmcoaS5jb2x1bW4saS5jb2x1bW4rMSkpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfTtpZighYy5zdWJzdHJpbmcoaS5jb2x1bW4pLm1hdGNoKC9eXHMqOy8pKXJldHVybnt0ZXh0OiI6OyIsc2VsZWN0aW9uOlsxLDFdfX19fSkpLHRoaXMuYWRkKCJjb2xvbiIsImRlbGV0aW9uIiwoZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaT1uLmRvYy5nZXRUZXh0UmFuZ2UoYSk7aWYoIWEuaXNNdWx0aUxpbmUoKSYmIjoiPT09aSl7dmFyIHM9ci5nZXRDdXJzb3JQb3NpdGlvbigpLGw9bmV3IG8obixzLnJvdyxzLmNvbHVtbiksYz1sLmdldEN1cnJlbnRUb2tlbigpO2lmKGMmJmMudmFsdWUubWF0Y2goL1xzKy8pJiYoYz1sLnN0ZXBCYWNrd2FyZCgpKSxjJiYic3VwcG9ydC50eXBlIj09PWMudHlwZSlpZigiOyI9PT1uLmRvYy5nZXRMaW5lKGEuc3RhcnQucm93KS5zdWJzdHJpbmcoYS5lbmQuY29sdW1uLGEuZW5kLmNvbHVtbisxKSlyZXR1cm4gYS5lbmQuY29sdW1uKyssYX19KSksdGhpcy5hZGQoInNlbWljb2xvbiIsImluc2VydGlvbiIsKGZ1bmN0aW9uKGUsdCxyLG4sYSl7aWYoIjsiPT09YSl7dmFyIG89ci5nZXRDdXJzb3JQb3NpdGlvbigpO2lmKCI7Ij09PW4uZG9jLmdldExpbmUoby5yb3cpLnN1YnN0cmluZyhvLmNvbHVtbixvLmNvbHVtbisxKSlyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX0pKX07bi5pbmhlcml0cyhpLGEpLHQuQ3NzQmVoYXZpb3VyPWl9KSksYWNlLmRlZmluZSgiYWNlL21vZGUvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9jc3NfY29tcGxldGlvbnMiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3NzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwoZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgYT1lKCIuLi9saWIvb29wIiksbz1lKCIuL3RleHQiKS5Nb2RlLGk9ZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXMscz1lKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxsPWUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50LGM9ZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9ucyx1PWUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cixkPWUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxwPWZ1bmN0aW9uKCl7dGhpcy5IaWdobGlnaHRSdWxlcz1pLHRoaXMuJG91dGRlbnQ9bmV3IHMsdGhpcy4kYmVoYXZpb3VyPW5ldyB1LHRoaXMuJGNvbXBsZXRlcj1uZXcgYyx0aGlzLmZvbGRpbmdSdWxlcz1uZXcgZH07YS5pbmhlcml0cyhwLG8pLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nUnVsZXM9ImNTdHlsZSIsdGhpcy5ibG9ja0NvbW1lbnQ9e3N0YXJ0OiIvKiIsZW5kOiIqLyJ9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuJGdldEluZGVudCh0KSxhPXRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2Vucyh0LGUpLnRva2VucztyZXR1cm4gYS5sZW5ndGgmJiJjb21tZW50Ij09YVthLmxlbmd0aC0xXS50eXBlfHx0Lm1hdGNoKC9eLipce1xzKiQvKSYmKG4rPXIpLG59LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQodCxyKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihlLHQscil7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudCh0LHIpfSx0aGlzLmdldENvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoZSx0LHIsbil9LHRoaXMuY3JlYXRlV29ya2VyPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBsKFsiYWNlIl0scigiZTA3MCIpLCJXb3JrZXIiKTtyZXR1cm4gdC5hdHRhY2hUb0RvY3VtZW50KGUuZ2V0RG9jdW1lbnQoKSksdC5vbigiYW5ub3RhdGUiLChmdW5jdGlvbih0KXtlLnNldEFubm90YXRpb25zKHQuZGF0YSl9KSksdC5vbigidGVybWluYXRlIiwoZnVuY3Rpb24oKXtlLmNsZWFyQW5ub3RhdGlvbnMoKX0pKSx0fSx0aGlzLiRpZD0iYWNlL21vZGUvY3NzIn0uY2FsbChwLnByb3RvdHlwZSksdC5Nb2RlPXB9KSksYWNlLmRlZmluZSgiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwoZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi9saWIvb29wIiksYT1lKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLG89ZnVuY3Rpb24oZSl7dmFyIHQ9IltfOmEtekEtWsOALe+/v11bLV86LmEtekEtWjAtOcOALe+/v10qIjt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoic3RyaW5nLmNkYXRhLnhtbCIscmVnZXg6IjxcXCFcXFtDREFUQVxcWyIsbmV4dDoiY2RhdGEifSx7dG9rZW46WyJwdW5jdHVhdGlvbi5pbnN0cnVjdGlvbi54bWwiLCJrZXl3b3JkLmluc3RydWN0aW9uLnhtbCJdLHJlZ2V4OiIoPFxcPykoIit0KyIpIixuZXh0OiJwcm9jZXNzaW5nX2luc3RydWN0aW9uIn0se3Rva2VuOiJjb21tZW50LnN0YXJ0LnhtbCIscmVnZXg6IjxcXCEtLSIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjpbInhtbC1wZS5kb2N0eXBlLnhtbCIsInhtbC1wZS5kb2N0eXBlLnhtbCJdLHJlZ2V4OiIoPFxcISkoRE9DVFlQRSkoPz1bXFxzXSkiLG5leHQ6ImRvY3R5cGUiLGNhc2VJbnNlbnNpdGl2ZTohMH0se2luY2x1ZGU6InRhZyJ9LHt0b2tlbjoidGV4dC5lbmQtdGFnLW9wZW4ueG1sIixyZWdleDoiPC8ifSx7dG9rZW46InRleHQudGFnLW9wZW4ueG1sIixyZWdleDoiPCJ9LHtpbmNsdWRlOiJyZWZlcmVuY2UifSx7ZGVmYXVsdFRva2VuOiJ0ZXh0LnhtbCJ9XSxwcm9jZXNzaW5nX2luc3RydWN0aW9uOlt7dG9rZW46ImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5kZWNsLWF0dHJpYnV0ZS1uYW1lLnhtbCIscmVnZXg6dH0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLHJlZ2V4OiI9In0se2luY2x1ZGU6IndoaXRlc3BhY2UifSx7aW5jbHVkZToic3RyaW5nIn0se3Rva2VuOiJwdW5jdHVhdGlvbi54bWwtZGVjbC54bWwiLHJlZ2V4OiJcXD8+IixuZXh0OiJzdGFydCJ9XSxkb2N0eXBlOlt7aW5jbHVkZToid2hpdGVzcGFjZSJ9LHtpbmNsdWRlOiJzdHJpbmcifSx7dG9rZW46InhtbC1wZS5kb2N0eXBlLnhtbCIscmVnZXg6Ij4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJ4bWwtcGUueG1sIixyZWdleDoiWy1fYS16QS1aMC05Ol0rIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0IixyZWdleDoiXFxbIixwdXNoOiJpbnRfc3Vic2V0In1dLGludF9zdWJzZXQ6W3t0b2tlbjoidGV4dC54bWwiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0LnhtbCIscmVnZXg6Il0iLG5leHQ6InBvcCJ9LHt0b2tlbjpbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsImtleXdvcmQubWFya3VwLWRlY2wueG1sIl0scmVnZXg6Iig8XFwhKSgiK3QrIikiLHB1c2g6W3t0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46InB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIscmVnZXg6Ij4iLG5leHQ6InBvcCJ9LHtpbmNsdWRlOiJzdHJpbmcifV19XSxjZGF0YTpbe3Rva2VuOiJzdHJpbmcuY2RhdGEueG1sIixyZWdleDoiXFxdXFxdPiIsbmV4dDoic3RhcnQifSx7dG9rZW46InRleHQueG1sIixyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dC54bWwiLHJlZ2V4OiIoPzpbXlxcXV18XFxdKD8hXFxdPikpKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQuZW5kLnhtbCIscmVnZXg6Ii0tXHgzZSIsbmV4dDoic3RhcnQifSx7ZGVmYXVsdFRva2VuOiJjb21tZW50LnhtbCJ9XSxyZWZlcmVuY2U6W3t0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLHJlZ2V4OiIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSJ9XSxhdHRyX3JlZmVyZW5jZTpbe3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZS54bWwiLHJlZ2V4OiIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSJ9XSx0YWc6W3t0b2tlbjpbIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1vcGVuLnhtbCIsIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCJtZXRhLnRhZy50YWctbmFtZS54bWwiXSxyZWdleDoiKD86KDwpfCg8LykpKCg/OiIrdCsiOik/Iit0KyIpIixuZXh0Olt7aW5jbHVkZToiYXR0cmlidXRlcyJ9LHt0b2tlbjoibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIscmVnZXg6Ii8/PiIsbmV4dDoic3RhcnQifV19XSx0YWdfd2hpdGVzcGFjZTpbe3Rva2VuOiJ0ZXh0LnRhZy13aGl0ZXNwYWNlLnhtbCIscmVnZXg6IlxccysifV0sd2hpdGVzcGFjZTpbe3Rva2VuOiJ0ZXh0LndoaXRlc3BhY2UueG1sIixyZWdleDoiXFxzKyJ9XSxzdHJpbmc6W3t0b2tlbjoic3RyaW5nLnhtbCIscmVnZXg6IiciLHB1c2g6W3t0b2tlbjoic3RyaW5nLnhtbCIscmVnZXg6IiciLG5leHQ6InBvcCJ9LHtkZWZhdWx0VG9rZW46InN0cmluZy54bWwifV19LHt0b2tlbjoic3RyaW5nLnhtbCIscmVnZXg6JyInLHB1c2g6W3t0b2tlbjoic3RyaW5nLnhtbCIscmVnZXg6JyInLG5leHQ6InBvcCJ9LHtkZWZhdWx0VG9rZW46InN0cmluZy54bWwifV19XSxhdHRyaWJ1dGVzOlt7dG9rZW46ImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLHJlZ2V4OnR9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIscmVnZXg6Ij0ifSx7aW5jbHVkZToidGFnX3doaXRlc3BhY2UifSx7aW5jbHVkZToiYXR0cmlidXRlX3ZhbHVlIn1dLGF0dHJpYnV0ZV92YWx1ZTpbe3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6IiciLHB1c2g6W3t0b2tlbjoic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLHJlZ2V4OiInIixuZXh0OiJwb3AifSx7aW5jbHVkZToiYXR0cl9yZWZlcmVuY2UifSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9XX0se3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6JyInLHB1c2g6W3t0b2tlbjoic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLHJlZ2V4OiciJyxuZXh0OiJwb3AifSx7aW5jbHVkZToiYXR0cl9yZWZlcmVuY2UifSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9XX1dfSx0aGlzLmNvbnN0cnVjdG9yPT09byYmdGhpcy5ub3JtYWxpemVSdWxlcygpfTsoZnVuY3Rpb24oKXt0aGlzLmVtYmVkVGFnUnVsZXM9ZnVuY3Rpb24oZSx0LHIpe3RoaXMuJHJ1bGVzLnRhZy51bnNoaWZ0KHt0b2tlbjpbIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1vcGVuLnhtbCIsIm1ldGEudGFnLiIrcisiLnRhZy1uYW1lLnhtbCJdLHJlZ2V4OiIoPCkoIityKyIoPz1cXHN8PnwkKSkiLG5leHQ6W3tpbmNsdWRlOiJhdHRyaWJ1dGVzIn0se3Rva2VuOiJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIixyZWdleDoiLz8+IixuZXh0OnQrInN0YXJ0In1dfSksdGhpcy4kcnVsZXNbcisiLWVuZCJdPVt7aW5jbHVkZToiYXR0cmlidXRlcyJ9LHt0b2tlbjoibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIscmVnZXg6Ii8/PiIsbmV4dDoic3RhcnQiLG9uTWF0Y2g6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiByLnNwbGljZSgwKSx0aGlzLnRva2VufX1dLHRoaXMuZW1iZWRSdWxlcyhlLHQsW3t0b2tlbjpbIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCJtZXRhLnRhZy4iK3IrIi50YWctbmFtZS54bWwiXSxyZWdleDoiKDwvKSgiK3IrIig/PVxcc3w+fCQpKSIsbmV4dDpyKyItZW5kIn0se3Rva2VuOiJzdHJpbmcuY2RhdGEueG1sIixyZWdleDoiPFxcIVxcW0NEQVRBXFxbIn0se3Rva2VuOiJzdHJpbmcuY2RhdGEueG1sIixyZWdleDoiXFxdXFxdPiJ9XSl9fSkuY2FsbChhLnByb3RvdHlwZSksbi5pbmhlcml0cyhvLGEpLHQuWG1sSGlnaGxpZ2h0UnVsZXM9b30pKSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyJdLChmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uL2xpYi9vb3AiKSxhPWUoIi4uL2xpYi9sYW5nIiksbz1lKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlcyxpPWUoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMscz1lKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlcyxsPWEuY3JlYXRlTWFwKHthOiJhbmNob3IiLGJ1dHRvbjoiZm9ybSIsZm9ybToiZm9ybSIsaW1nOiJpbWFnZSIsaW5wdXQ6ImZvcm0iLGxhYmVsOiJmb3JtIixvcHRpb246ImZvcm0iLHNjcmlwdDoic2NyaXB0IixzZWxlY3Q6ImZvcm0iLHRleHRhcmVhOiJmb3JtIixzdHlsZToic3R5bGUiLHRhYmxlOiJ0YWJsZSIsdGJvZHk6InRhYmxlIix0ZDoidGFibGUiLHRmb290OiJ0YWJsZSIsdGg6InRhYmxlIix0cjoidGFibGUifSksYz1mdW5jdGlvbigpe3MuY2FsbCh0aGlzKSx0aGlzLmFkZFJ1bGVzKHthdHRyaWJ1dGVzOlt7aW5jbHVkZToidGFnX3doaXRlc3BhY2UifSx7dG9rZW46ImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLHJlZ2V4OiJbLV9hLXpBLVowLTk6Ll0rIn0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIixyZWdleDoiPSIscHVzaDpbe2luY2x1ZGU6InRhZ193aGl0ZXNwYWNlIn0se3Rva2VuOiJzdHJpbmcudW5xdW90ZWQuYXR0cmlidXRlLXZhbHVlLmh0bWwiLHJlZ2V4OiJbXjw+PSdcImBcXHNdKyIsbmV4dDoicG9wIn0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoicG9wIn1dfSx7aW5jbHVkZToiYXR0cmlidXRlX3ZhbHVlIn1dLHRhZzpbe3Rva2VuOmZ1bmN0aW9uKGUsdCl7dmFyIHI9bFt0XTtyZXR1cm5bIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIrKCI8Ij09ZT8iIjoiZW5kLSIpKyJ0YWctb3Blbi54bWwiLCJtZXRhLnRhZyIrKHI/Ii4iK3I6IiIpKyIudGFnLW5hbWUueG1sIl19LHJlZ2V4OiIoPC8/KShbLV9hLXpBLVowLTk6Ll0rKSIsbmV4dDoidGFnX3N0dWZmIn1dLHRhZ19zdHVmZjpbe2luY2x1ZGU6ImF0dHJpYnV0ZXMifSx7dG9rZW46Im1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLHJlZ2V4OiIvPz4iLG5leHQ6InN0YXJ0In1dfSksdGhpcy5lbWJlZFRhZ1J1bGVzKG8sImNzcy0iLCJzdHlsZSIpLHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgaSh7anN4OiExfSkuZ2V0UnVsZXMoKSwianMtIiwic2NyaXB0IiksdGhpcy5jb25zdHJ1Y3Rvcj09PWMmJnRoaXMubm9ybWFsaXplUnVsZXMoKX07bi5pbmhlcml0cyhjLHMpLHQuSHRtbEhpZ2hsaWdodFJ1bGVzPWN9KSksYWNlLmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sKGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliL29vcCIpLGE9ZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLG89ZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yO2Z1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZS50eXBlLmxhc3RJbmRleE9mKHQrIi54bWwiKT4tMX1lKCIuLi8uLi9saWIvbGFuZyIpO3ZhciBzPWZ1bmN0aW9uKCl7dGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiaW5zZXJ0aW9uIiwoZnVuY3Rpb24oZSx0LHIsbixhKXtpZignIic9PWF8fCInIj09YSl7dmFyIHM9YSxsPW4uZG9jLmdldFRleHRSYW5nZShyLmdldFNlbGVjdGlvblJhbmdlKCkpO2lmKCIiIT09bCYmIiciIT09bCYmJyInIT1sJiZyLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKXJldHVybnt0ZXh0OnMrbCtzLHNlbGVjdGlvbjohMX07dmFyIGM9ci5nZXRDdXJzb3JQb3NpdGlvbigpLHU9bi5kb2MuZ2V0TGluZShjLnJvdykuc3Vic3RyaW5nKGMuY29sdW1uLGMuY29sdW1uKzEpLGQ9bmV3IG8obixjLnJvdyxjLmNvbHVtbikscD1kLmdldEN1cnJlbnRUb2tlbigpO2lmKHU9PXMmJihpKHAsImF0dHJpYnV0ZS12YWx1ZSIpfHxpKHAsInN0cmluZyIpKSlyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19O2lmKHB8fChwPWQuc3RlcEJhY2t3YXJkKCkpLCFwKXJldHVybjtmb3IoO2kocCwidGFnLXdoaXRlc3BhY2UiKXx8aShwLCJ3aGl0ZXNwYWNlIik7KXA9ZC5zdGVwQmFja3dhcmQoKTt2YXIgbT0hdXx8dS5tYXRjaCgvXHMvKTtpZihpKHAsImF0dHJpYnV0ZS1lcXVhbHMiKSYmKG18fCI+Ij09dSl8fGkocCwiZGVjbC1hdHRyaWJ1dGUtZXF1YWxzIikmJihtfHwiPyI9PXUpKXJldHVybnt0ZXh0OnMrcyxzZWxlY3Rpb246WzEsMV19fX0pKSx0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCJkZWxldGlvbiIsKGZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG89bi5kb2MuZ2V0VGV4dFJhbmdlKGEpO2lmKCFhLmlzTXVsdGlMaW5lKCkmJignIic9PW98fCInIj09bykmJm4uZG9jLmdldExpbmUoYS5zdGFydC5yb3cpLnN1YnN0cmluZyhhLnN0YXJ0LmNvbHVtbisxLGEuc3RhcnQuY29sdW1uKzIpPT1vKXJldHVybiBhLmVuZC5jb2x1bW4rKyxhfSkpLHRoaXMuYWRkKCJhdXRvY2xvc2luZyIsImluc2VydGlvbiIsKGZ1bmN0aW9uKGUsdCxyLG4sYSl7aWYoIj4iPT1hKXt2YXIgcz1yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQsbD1uZXcgbyhuLHMucm93LHMuY29sdW1uKSxjPWwuZ2V0Q3VycmVudFRva2VuKCl8fGwuc3RlcEJhY2t3YXJkKCk7aWYoIWN8fCEoaShjLCJ0YWctbmFtZSIpfHxpKGMsInRhZy13aGl0ZXNwYWNlIil8fGkoYywiYXR0cmlidXRlLW5hbWUiKXx8aShjLCJhdHRyaWJ1dGUtZXF1YWxzIil8fGkoYywiYXR0cmlidXRlLXZhbHVlIikpKXJldHVybjtpZihpKGMsInJlZmVyZW5jZS5hdHRyaWJ1dGUtdmFsdWUiKSlyZXR1cm47aWYoaShjLCJhdHRyaWJ1dGUtdmFsdWUiKSl7dmFyIHU9Yy52YWx1ZS5jaGFyQXQoMCk7aWYoJyInPT11fHwiJyI9PXUpe3ZhciBkPWMudmFsdWUuY2hhckF0KGMudmFsdWUubGVuZ3RoLTEpLHA9bC5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKStjLnZhbHVlLmxlbmd0aDtpZihwPnMuY29sdW1ufHxwPT1zLmNvbHVtbiYmdSE9ZClyZXR1cm59fWZvcig7IWkoYywidGFnLW5hbWUiKTspaWYoIjwiPT0oYz1sLnN0ZXBCYWNrd2FyZCgpKS52YWx1ZSl7Yz1sLnN0ZXBGb3J3YXJkKCk7YnJlYWt9dmFyIG09bC5nZXRDdXJyZW50VG9rZW5Sb3coKSxoPWwuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7aWYoaShsLnN0ZXBCYWNrd2FyZCgpLCJlbmQtdGFnLW9wZW4iKSlyZXR1cm47dmFyIGY9Yy52YWx1ZTtpZihtPT1zLnJvdyYmKGY9Zi5zdWJzdHJpbmcoMCxzLmNvbHVtbi1oKSksdGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZi50b0xvd2VyQ2FzZSgpKSlyZXR1cm47cmV0dXJue3RleHQ6Ij48LyIrZisiPiIsc2VsZWN0aW9uOlsxLDFdfX19KSksdGhpcy5hZGQoImF1dG9pbmRlbnQiLCJpbnNlcnRpb24iLChmdW5jdGlvbihlLHQscixuLGEpe2lmKCJcbiI9PWEpe3ZhciBpPXIuZ2V0Q3Vyc29yUG9zaXRpb24oKSxzPW4uZ2V0TGluZShpLnJvdyksbD1uZXcgbyhuLGkucm93LGkuY29sdW1uKSxjPWwuZ2V0Q3VycmVudFRva2VuKCk7aWYoYyYmLTEhPT1jLnR5cGUuaW5kZXhPZigidGFnLWNsb3NlIikpe2lmKCIvPiI9PWMudmFsdWUpcmV0dXJuO2Zvcig7YyYmLTE9PT1jLnR5cGUuaW5kZXhPZigidGFnLW5hbWUiKTspYz1sLnN0ZXBCYWNrd2FyZCgpO2lmKCFjKXJldHVybjt2YXIgdT1jLnZhbHVlLGQ9bC5nZXRDdXJyZW50VG9rZW5Sb3coKTtpZighKGM9bC5zdGVwQmFja3dhcmQoKSl8fC0xIT09Yy50eXBlLmluZGV4T2YoImVuZC10YWciKSlyZXR1cm47aWYodGhpcy52b2lkRWxlbWVudHMmJiF0aGlzLnZvaWRFbGVtZW50c1t1XSl7dmFyIHA9bi5nZXRUb2tlbkF0KGkucm93LGkuY29sdW1uKzEpLG09KHM9bi5nZXRMaW5lKGQpLHRoaXMuJGdldEluZGVudChzKSksaD1tK24uZ2V0VGFiU3RyaW5nKCk7cmV0dXJuIHAmJiI8LyI9PT1wLnZhbHVlP3t0ZXh0OiJcbiIraCsiXG4iK20sc2VsZWN0aW9uOlsxLGgubGVuZ3RoLDEsaC5sZW5ndGhdfTp7dGV4dDoiXG4iK2h9fX19fSkpfTtuLmluaGVyaXRzKHMsYSksdC5YbWxCZWhhdmlvdXI9c30pKSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLChmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4uLy4uL2xpYi9vb3AiKSxhPWUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsbz10LkZvbGRNb2RlPWZ1bmN0aW9uKGUsdCl7dGhpcy5kZWZhdWx0TW9kZT1lLHRoaXMuc3ViTW9kZXM9dH07bi5pbmhlcml0cyhvLGEpLGZ1bmN0aW9uKCl7dGhpcy4kZ2V0TW9kZT1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4ic3RyaW5nIiE9dHlwZW9mIGUmJihlPWVbMF0pLHRoaXMuc3ViTW9kZXMpaWYoMD09PWUuaW5kZXhPZih0KSlyZXR1cm4gdGhpcy5zdWJNb2Rlc1t0XTtyZXR1cm4gbnVsbH0sdGhpcy4kdHJ5TW9kZT1mdW5jdGlvbihlLHQscixuKXt2YXIgYT10aGlzLiRnZXRNb2RlKGUpO3JldHVybiBhP2EuZ2V0Rm9sZFdpZGdldCh0LHIsbik6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuJHRyeU1vZGUoZS5nZXRTdGF0ZShyLTEpLGUsdCxyKXx8dGhpcy4kdHJ5TW9kZShlLmdldFN0YXRlKHIpLGUsdCxyKXx8dGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KGUsdCxyKX0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuJGdldE1vZGUoZS5nZXRTdGF0ZShyLTEpKTtyZXR1cm4gbiYmbi5nZXRGb2xkV2lkZ2V0KGUsdCxyKXx8KG49dGhpcy4kZ2V0TW9kZShlLmdldFN0YXRlKHIpKSksbiYmbi5nZXRGb2xkV2lkZ2V0KGUsdCxyKXx8KG49dGhpcy5kZWZhdWx0TW9kZSksbi5nZXRGb2xkV2lkZ2V0UmFuZ2UoZSx0LHIpfX0uY2FsbChvLnByb3RvdHlwZSl9KSksYWNlLmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy94bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sKGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi4vLi4vbGliL29vcCIpLGE9KGUoIi4uLy4uL2xpYi9sYW5nIiksZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSksbz1lKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGk9ZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yLHM9dC5Gb2xkTW9kZT1mdW5jdGlvbihlLHQpe28uY2FsbCh0aGlzKSx0aGlzLnZvaWRFbGVtZW50cz1lfHx7fSx0aGlzLm9wdGlvbmFsRW5kVGFncz1uLm1peGluKHt9LHRoaXMudm9pZEVsZW1lbnRzKSx0JiZuLm1peGluKHRoaXMub3B0aW9uYWxFbmRUYWdzLHQpfTtuLmluaGVyaXRzKHMsbyk7dmFyIGw9ZnVuY3Rpb24oKXt0aGlzLnRhZ05hbWU9IiIsdGhpcy5jbG9zaW5nPSExLHRoaXMuc2VsZkNsb3Npbmc9ITEsdGhpcy5zdGFydD17cm93OjAsY29sdW1uOjB9LHRoaXMuZW5kPXtyb3c6MCxjb2x1bW46MH19O2Z1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZS50eXBlLmxhc3RJbmRleE9mKHQrIi54bWwiKT4tMX0oZnVuY3Rpb24oKXt0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKGUscik7cmV0dXJuIG4/bi5jbG9zaW5nfHwhbi50YWdOYW1lJiZuLnNlbGZDbG9zaW5nPyJtYXJrYmVnaW5lbmQiPT10PyJlbmQiOiIiOiFuLnRhZ05hbWV8fG4uc2VsZkNsb3Npbmd8fHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KG4udGFnTmFtZS50b0xvd2VyQ2FzZSgpKXx8dGhpcy5fZmluZEVuZFRhZ0luTGluZShlLHIsbi50YWdOYW1lLG4uZW5kLmNvbHVtbik/IiI6InN0YXJ0Ijp0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KGUscil9LHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4vY29tbWVudC8udGVzdChlLmdldFN0YXRlKHQpKSYmLzwhLS8udGVzdChlLmdldExpbmUodCkpPyJzdGFydCI6IiJ9LHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2V0VG9rZW5zKHQpLG49bmV3IGwsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbz1yW2FdO2lmKGMobywidGFnLW9wZW4iKSl7aWYobi5lbmQuY29sdW1uPW4uc3RhcnQuY29sdW1uK28udmFsdWUubGVuZ3RoLG4uY2xvc2luZz1jKG8sImVuZC10YWctb3BlbiIpLCEobz1yWysrYV0pKXJldHVybiBudWxsO2ZvcihuLnRhZ05hbWU9by52YWx1ZSxuLmVuZC5jb2x1bW4rPW8udmFsdWUubGVuZ3RoLGErKzthPHIubGVuZ3RoO2ErKylpZihvPXJbYV0sbi5lbmQuY29sdW1uKz1vLnZhbHVlLmxlbmd0aCxjKG8sInRhZy1jbG9zZSIpKXtuLnNlbGZDbG9zaW5nPSIvPiI9PW8udmFsdWU7YnJlYWt9cmV0dXJuIG59aWYoYyhvLCJ0YWctY2xvc2UiKSlyZXR1cm4gbi5zZWxmQ2xvc2luZz0iLz4iPT1vLnZhbHVlLG47bi5zdGFydC5jb2x1bW4rPW8udmFsdWUubGVuZ3RofXJldHVybiBudWxsfSx0aGlzLl9maW5kRW5kVGFnSW5MaW5lPWZ1bmN0aW9uKGUsdCxyLG4pe2Zvcih2YXIgYT1lLmdldFRva2Vucyh0KSxvPTAsaT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgcz1hW2ldO2lmKCEoKG8rPXMudmFsdWUubGVuZ3RoKTxuKSYmYyhzLCJlbmQtdGFnLW9wZW4iKSYmKChzPWFbaSsxXSkmJnMudmFsdWU9PXIpKXJldHVybiEwfXJldHVybiExfSx0aGlzLl9yZWFkVGFnRm9yd2FyZD1mdW5jdGlvbihlKXt2YXIgdD1lLmdldEN1cnJlbnRUb2tlbigpO2lmKCF0KXJldHVybiBudWxsO3ZhciByPW5ldyBsO2Rve2lmKGModCwidGFnLW9wZW4iKSlyLmNsb3Npbmc9Yyh0LCJlbmQtdGFnLW9wZW4iKSxyLnN0YXJ0LnJvdz1lLmdldEN1cnJlbnRUb2tlblJvdygpLHIuc3RhcnQuY29sdW1uPWUuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7ZWxzZSBpZihjKHQsInRhZy1uYW1lIikpci50YWdOYW1lPXQudmFsdWU7ZWxzZSBpZihjKHQsInRhZy1jbG9zZSIpKXJldHVybiByLnNlbGZDbG9zaW5nPSIvPiI9PXQudmFsdWUsci5lbmQucm93PWUuZ2V0Q3VycmVudFRva2VuUm93KCksci5lbmQuY29sdW1uPWUuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkrdC52YWx1ZS5sZW5ndGgsZS5zdGVwRm9yd2FyZCgpLHJ9d2hpbGUodD1lLnN0ZXBGb3J3YXJkKCkpO3JldHVybiBudWxsfSx0aGlzLl9yZWFkVGFnQmFja3dhcmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRDdXJyZW50VG9rZW4oKTtpZighdClyZXR1cm4gbnVsbDt2YXIgcj1uZXcgbDtkb3tpZihjKHQsInRhZy1vcGVuIikpcmV0dXJuIHIuY2xvc2luZz1jKHQsImVuZC10YWctb3BlbiIpLHIuc3RhcnQucm93PWUuZ2V0Q3VycmVudFRva2VuUm93KCksci5zdGFydC5jb2x1bW49ZS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSxlLnN0ZXBCYWNrd2FyZCgpLHI7Yyh0LCJ0YWctbmFtZSIpP3IudGFnTmFtZT10LnZhbHVlOmModCwidGFnLWNsb3NlIikmJihyLnNlbGZDbG9zaW5nPSIvPiI9PXQudmFsdWUsci5lbmQucm93PWUuZ2V0Q3VycmVudFRva2VuUm93KCksci5lbmQuY29sdW1uPWUuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkrdC52YWx1ZS5sZW5ndGgpfXdoaWxlKHQ9ZS5zdGVwQmFja3dhcmQoKSk7cmV0dXJuIG51bGx9LHRoaXMuX3BvcD1mdW5jdGlvbihlLHQpe2Zvcig7ZS5sZW5ndGg7KXt2YXIgcj1lW2UubGVuZ3RoLTFdO2lmKHQmJnIudGFnTmFtZSE9dC50YWdOYW1lKXtpZih0aGlzLm9wdGlvbmFsRW5kVGFncy5oYXNPd25Qcm9wZXJ0eShyLnRhZ05hbWUpKXtlLnBvcCgpO2NvbnRpbnVlfXJldHVybiBudWxsfXJldHVybiBlLnBvcCgpfX0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKGUscik7aWYoIW4pcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoZSxyKSYmZS5nZXRDb21tZW50Rm9sZFJhbmdlKHIsZS5nZXRMaW5lKHIpLmxlbmd0aCk7dmFyIG8scz1bXTtpZihuLmNsb3Npbmd8fG4uc2VsZkNsb3Npbmcpe2M9bmV3IGkoZSxyLG4uZW5kLmNvbHVtbik7Zm9yKHZhciBsPXtyb3c6cixjb2x1bW46bi5zdGFydC5jb2x1bW59O289dGhpcy5fcmVhZFRhZ0JhY2t3YXJkKGMpOyl7aWYoby5zZWxmQ2xvc2luZyl7aWYocy5sZW5ndGgpY29udGludWU7cmV0dXJuIG8uc3RhcnQuY29sdW1uKz1vLnRhZ05hbWUubGVuZ3RoKzIsby5lbmQuY29sdW1uLT0yLGEuZnJvbVBvaW50cyhvLnN0YXJ0LG8uZW5kKX1pZihvLmNsb3Npbmcpcy5wdXNoKG8pO2Vsc2UgaWYodGhpcy5fcG9wKHMsbyksMD09cy5sZW5ndGgpcmV0dXJuIG8uc3RhcnQuY29sdW1uKz1vLnRhZ05hbWUubGVuZ3RoKzIsby5zdGFydC5yb3c9PW8uZW5kLnJvdyYmby5zdGFydC5jb2x1bW48by5lbmQuY29sdW1uJiYoby5zdGFydC5jb2x1bW49by5lbmQuY29sdW1uKSxhLmZyb21Qb2ludHMoby5zdGFydCxsKX19ZWxzZXt2YXIgYz1uZXcgaShlLHIsbi5zdGFydC5jb2x1bW4pLHU9e3JvdzpyLGNvbHVtbjpuLnN0YXJ0LmNvbHVtbituLnRhZ05hbWUubGVuZ3RoKzJ9O2ZvcihuLnN0YXJ0LnJvdz09bi5lbmQucm93JiYodS5jb2x1bW49bi5lbmQuY29sdW1uKTtvPXRoaXMuX3JlYWRUYWdGb3J3YXJkKGMpOyl7aWYoby5zZWxmQ2xvc2luZyl7aWYocy5sZW5ndGgpY29udGludWU7cmV0dXJuIG8uc3RhcnQuY29sdW1uKz1vLnRhZ05hbWUubGVuZ3RoKzIsby5lbmQuY29sdW1uLT0yLGEuZnJvbVBvaW50cyhvLnN0YXJ0LG8uZW5kKX1pZihvLmNsb3Npbmcpe2lmKHRoaXMuX3BvcChzLG8pLDA9PXMubGVuZ3RoKXJldHVybiBhLmZyb21Qb2ludHModSxvLnN0YXJ0KX1lbHNlIHMucHVzaChvKX19fX0pLmNhbGwocy5wcm90b3R5cGUpfSkpLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvaHRtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsImFjZS9tb2RlL2ZvbGRpbmcveG1sIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwoZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi8uLi9saWIvb29wIiksYT1lKCIuL21peGVkIikuRm9sZE1vZGUsbz1lKCIuL3htbCIpLkZvbGRNb2RlLGk9ZSgiLi9jc3R5bGUiKS5Gb2xkTW9kZSxzPXQuRm9sZE1vZGU9ZnVuY3Rpb24oZSx0KXthLmNhbGwodGhpcyxuZXcgbyhlLHQpLHsianMtIjpuZXcgaSwiY3NzLSI6bmV3IGl9KX07bi5pbmhlcml0cyhzLGEpfSkpLGFjZS5kZWZpbmUoImFjZS9tb2RlL2h0bWxfY29tcGxldGlvbnMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwoZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3IsYT1bImFjY2Vzc2tleSIsImNsYXNzIiwiY29udGVudGVkaXRhYmxlIiwiY29udGV4dG1lbnUiLCJkaXIiLCJkcmFnZ2FibGUiLCJkcm9wem9uZSIsImhpZGRlbiIsImlkIiwiaW5lcnQiLCJpdGVtaWQiLCJpdGVtcHJvcCIsIml0ZW1yZWYiLCJpdGVtc2NvcGUiLCJpdGVtdHlwZSIsImxhbmciLCJzcGVsbGNoZWNrIiwic3R5bGUiLCJ0YWJpbmRleCIsInRpdGxlIiwidHJhbnNsYXRlIl0uY29uY2F0KFsib25hYm9ydCIsIm9uYmx1ciIsIm9uY2FuY2VsIiwib25jYW5wbGF5Iiwib25jYW5wbGF5dGhyb3VnaCIsIm9uY2hhbmdlIiwib25jbGljayIsIm9uY2xvc2UiLCJvbmNvbnRleHRtZW51Iiwib25jdWVjaGFuZ2UiLCJvbmRibGNsaWNrIiwib25kcmFnIiwib25kcmFnZW5kIiwib25kcmFnZW50ZXIiLCJvbmRyYWdsZWF2ZSIsIm9uZHJhZ292ZXIiLCJvbmRyYWdzdGFydCIsIm9uZHJvcCIsIm9uZHVyYXRpb25jaGFuZ2UiLCJvbmVtcHRpZWQiLCJvbmVuZGVkIiwib25lcnJvciIsIm9uZm9jdXMiLCJvbmlucHV0Iiwib25pbnZhbGlkIiwib25rZXlkb3duIiwib25rZXlwcmVzcyIsIm9ua2V5dXAiLCJvbmxvYWQiLCJvbmxvYWRlZGRhdGEiLCJvbmxvYWRlZG1ldGFkYXRhIiwib25sb2Fkc3RhcnQiLCJvbm1vdXNlZG93biIsIm9ubW91c2Vtb3ZlIiwib25tb3VzZW91dCIsIm9ubW91c2VvdmVyIiwib25tb3VzZXVwIiwib25tb3VzZXdoZWVsIiwib25wYXVzZSIsIm9ucGxheSIsIm9ucGxheWluZyIsIm9ucHJvZ3Jlc3MiLCJvbnJhdGVjaGFuZ2UiLCJvbnJlc2V0Iiwib25zY3JvbGwiLCJvbnNlZWtlZCIsIm9uc2Vla2luZyIsIm9uc2VsZWN0Iiwib25zaG93Iiwib25zdGFsbGVkIiwib25zdWJtaXQiLCJvbnN1c3BlbmQiLCJvbnRpbWV1cGRhdGUiLCJvbnZvbHVtZWNoYW5nZSIsIm9ud2FpdGluZyJdKSxvPXtodG1sOnttYW5pZmVzdDoxfSxoZWFkOnt9LHRpdGxlOnt9LGJhc2U6e2hyZWY6MSx0YXJnZXQ6MX0sbGluazp7aHJlZjoxLGhyZWZsYW5nOjEscmVsOntzdHlsZXNoZWV0OjEsaWNvbjoxfSxtZWRpYTp7YWxsOjEsc2NyZWVuOjEscHJpbnQ6MX0sdHlwZTp7InRleHQvY3NzIjoxLCJpbWFnZS9wbmciOjEsImltYWdlL2pwZWciOjEsImltYWdlL2dpZiI6MX0sc2l6ZXM6MX0sbWV0YTp7Imh0dHAtZXF1aXYiOnsiY29udGVudC10eXBlIjoxfSxuYW1lOntkZXNjcmlwdGlvbjoxLGtleXdvcmRzOjF9LGNvbnRlbnQ6eyJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiOjF9LGNoYXJzZXQ6MX0sc3R5bGU6e3R5cGU6MSxtZWRpYTp7YWxsOjEsc2NyZWVuOjEscHJpbnQ6MX0sc2NvcGVkOjF9LHNjcmlwdDp7Y2hhcnNldDoxLHR5cGU6eyJ0ZXh0L2phdmFzY3JpcHQiOjF9LHNyYzoxLGRlZmVyOjEsYXN5bmM6MX0sbm9zY3JpcHQ6e2hyZWY6MX0sYm9keTp7b25hZnRlcnByaW50OjEsb25iZWZvcmVwcmludDoxLG9uYmVmb3JldW5sb2FkOjEsb25oYXNoY2hhbmdlOjEsb25tZXNzYWdlOjEsb25vZmZsaW5lOjEsb25wb3BzdGF0ZToxLG9ucmVkbzoxLG9ucmVzaXplOjEsb25zdG9yYWdlOjEsb251bmRvOjEsb251bmxvYWQ6MX0sc2VjdGlvbjp7fSxuYXY6e30sYXJ0aWNsZTp7cHViZGF0ZToxfSxhc2lkZTp7fSxoMTp7fSxoMjp7fSxoMzp7fSxoNDp7fSxoNTp7fSxoNjp7fSxoZWFkZXI6e30sZm9vdGVyOnt9LGFkZHJlc3M6e30sbWFpbjp7fSxwOnt9LGhyOnt9LHByZTp7fSxibG9ja3F1b3RlOntjaXRlOjF9LG9sOntzdGFydDoxLHJldmVyc2VkOjF9LHVsOnt9LGxpOnt2YWx1ZToxfSxkbDp7fSxkdDp7fSxkZDp7fSxmaWd1cmU6e30sZmlnY2FwdGlvbjp7fSxkaXY6e30sYTp7aHJlZjoxLHRhcmdldDp7X2JsYW5rOjEsdG9wOjF9LHBpbmc6MSxyZWw6e25vZm9sbG93OjEsYWx0ZXJuYXRlOjEsYXV0aG9yOjEsYm9va21hcms6MSxoZWxwOjEsbGljZW5zZToxLG5leHQ6MSxub3JlZmVycmVyOjEscHJlZmV0Y2g6MSxwcmV2OjEsc2VhcmNoOjEsdGFnOjF9LG1lZGlhOjEsaHJlZmxhbmc6MSx0eXBlOjF9LGVtOnt9LHN0cm9uZzp7fSxzbWFsbDp7fSxzOnt9LGNpdGU6e30scTp7Y2l0ZToxfSxkZm46e30sYWJicjp7fSxkYXRhOnt9LHRpbWU6e2RhdGV0aW1lOjF9LGNvZGU6e30sdmFyOnt9LHNhbXA6e30sa2JkOnt9LHN1Yjp7fSxzdXA6e30saTp7fSxiOnt9LHU6e30sbWFyazp7fSxydWJ5Ont9LHJ0Ont9LHJwOnt9LGJkaTp7fSxiZG86e30sc3Bhbjp7fSxicjp7fSx3YnI6e30saW5zOntjaXRlOjEsZGF0ZXRpbWU6MX0sZGVsOntjaXRlOjEsZGF0ZXRpbWU6MX0saW1nOnthbHQ6MSxzcmM6MSxoZWlnaHQ6MSx3aWR0aDoxLHVzZW1hcDoxLGlzbWFwOjF9LGlmcmFtZTp7bmFtZToxLHNyYzoxLGhlaWdodDoxLHdpZHRoOjEsc2FuZGJveDp7ImFsbG93LXNhbWUtb3JpZ2luIjoxLCJhbGxvdy10b3AtbmF2aWdhdGlvbiI6MSwiYWxsb3ctZm9ybXMiOjEsImFsbG93LXNjcmlwdHMiOjF9LHNlYW1sZXNzOntzZWFtbGVzczoxfX0sZW1iZWQ6e3NyYzoxLGhlaWdodDoxLHdpZHRoOjEsdHlwZToxfSxvYmplY3Q6e3BhcmFtOjEsZGF0YToxLHR5cGU6MSxoZWlnaHQ6MSx3aWR0aDoxLHVzZW1hcDoxLG5hbWU6MSxmb3JtOjEsY2xhc3NpZDoxfSxwYXJhbTp7bmFtZToxLHZhbHVlOjF9LHZpZGVvOntzcmM6MSxhdXRvYnVmZmVyOjEsYXV0b3BsYXk6e2F1dG9wbGF5OjF9LGxvb3A6e2xvb3A6MX0sY29udHJvbHM6e2NvbnRyb2xzOjF9LHdpZHRoOjEsaGVpZ2h0OjEscG9zdGVyOjEsbXV0ZWQ6e211dGVkOjF9LHByZWxvYWQ6e2F1dG86MSxtZXRhZGF0YToxLG5vbmU6MX19LGF1ZGlvOntzcmM6MSxhdXRvYnVmZmVyOjEsYXV0b3BsYXk6e2F1dG9wbGF5OjF9LGxvb3A6e2xvb3A6MX0sY29udHJvbHM6e2NvbnRyb2xzOjF9LG11dGVkOnttdXRlZDoxfSxwcmVsb2FkOnthdXRvOjEsbWV0YWRhdGE6MSxub25lOjF9fSxzb3VyY2U6e3NyYzoxLHR5cGU6MSxtZWRpYToxfSx0cmFjazp7a2luZDoxLHNyYzoxLHNyY2xhbmc6MSxsYWJlbDoxLGRlZmF1bHQ6MX0sY2FudmFzOnt3aWR0aDoxLGhlaWdodDoxfSxtYXA6e25hbWU6MX0sYXJlYTp7c2hhcGU6MSxjb29yZHM6MSxocmVmOjEsaHJlZmxhbmc6MSxhbHQ6MSx0YXJnZXQ6MSxtZWRpYToxLHJlbDoxLHBpbmc6MSx0eXBlOjF9LHN2Zzp7fSxtYXRoOnt9LHRhYmxlOntzdW1tYXJ5OjF9LGNhcHRpb246e30sY29sZ3JvdXA6e3NwYW46MX0sY29sOntzcGFuOjF9LHRib2R5Ont9LHRoZWFkOnt9LHRmb290Ont9LHRyOnt9LHRkOntoZWFkZXJzOjEscm93c3BhbjoxLGNvbHNwYW46MX0sdGg6e2hlYWRlcnM6MSxyb3dzcGFuOjEsY29sc3BhbjoxLHNjb3BlOjF9LGZvcm06eyJhY2NlcHQtY2hhcnNldCI6MSxhY3Rpb246MSxhdXRvY29tcGxldGU6MSxlbmN0eXBlOnsibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6MSwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIjoxfSxtZXRob2Q6e2dldDoxLHBvc3Q6MX0sbmFtZToxLG5vdmFsaWRhdGU6MSx0YXJnZXQ6e19ibGFuazoxLHRvcDoxfX0sZmllbGRzZXQ6e2Rpc2FibGVkOjEsZm9ybToxLG5hbWU6MX0sbGVnZW5kOnt9LGxhYmVsOntmb3JtOjEsZm9yOjF9LGlucHV0Ont0eXBlOnt0ZXh0OjEscGFzc3dvcmQ6MSxoaWRkZW46MSxjaGVja2JveDoxLHN1Ym1pdDoxLHJhZGlvOjEsZmlsZToxLGJ1dHRvbjoxLHJlc2V0OjEsaW1hZ2U6MzEsY29sb3I6MSxkYXRlOjEsZGF0ZXRpbWU6MSwiZGF0ZXRpbWUtbG9jYWwiOjEsZW1haWw6MSxtb250aDoxLG51bWJlcjoxLHJhbmdlOjEsc2VhcmNoOjEsdGVsOjEsdGltZToxLHVybDoxLHdlZWs6MX0sYWNjZXB0OjEsYWx0OjEsYXV0b2NvbXBsZXRlOntvbjoxLG9mZjoxfSxhdXRvZm9jdXM6e2F1dG9mb2N1czoxfSxjaGVja2VkOntjaGVja2VkOjF9LGRpc2FibGVkOntkaXNhYmxlZDoxfSxmb3JtOjEsZm9ybWFjdGlvbjoxLGZvcm1lbmN0eXBlOnsiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIjoxLCJtdWx0aXBhcnQvZm9ybS1kYXRhIjoxLCJ0ZXh0L3BsYWluIjoxfSxmb3JtbWV0aG9kOntnZXQ6MSxwb3N0OjF9LGZvcm1ub3ZhbGlkYXRlOntmb3Jtbm92YWxpZGF0ZToxfSxmb3JtdGFyZ2V0OntfYmxhbms6MSxfc2VsZjoxLF9wYXJlbnQ6MSxfdG9wOjF9LGhlaWdodDoxLGxpc3Q6MSxtYXg6MSxtYXhsZW5ndGg6MSxtaW46MSxtdWx0aXBsZTp7bXVsdGlwbGU6MX0sbmFtZToxLHBhdHRlcm46MSxwbGFjZWhvbGRlcjoxLHJlYWRvbmx5OntyZWFkb25seToxfSxhY2VxdWlyZWQ6e2FjZXF1aXJlZDoxfSxzaXplOjEsc3JjOjEsc3RlcDoxLHdpZHRoOjEsZmlsZXM6MSx2YWx1ZToxfSxidXR0b246e2F1dG9mb2N1czoxLGRpc2FibGVkOntkaXNhYmxlZDoxfSxmb3JtOjEsZm9ybWFjdGlvbjoxLGZvcm1lbmN0eXBlOjEsZm9ybW1ldGhvZDoxLGZvcm1ub3ZhbGlkYXRlOjEsZm9ybXRhcmdldDoxLG5hbWU6MSx2YWx1ZToxLHR5cGU6e2J1dHRvbjoxLHN1Ym1pdDoxfX0sc2VsZWN0OnthdXRvZm9jdXM6MSxkaXNhYmxlZDoxLGZvcm06MSxtdWx0aXBsZTp7bXVsdGlwbGU6MX0sbmFtZToxLHNpemU6MSxyZWFkb25seTp7cmVhZG9ubHk6MX19LGRhdGFsaXN0Ont9LG9wdGdyb3VwOntkaXNhYmxlZDoxLGxhYmVsOjF9LG9wdGlvbjp7ZGlzYWJsZWQ6MSxzZWxlY3RlZDoxLGxhYmVsOjEsdmFsdWU6MX0sdGV4dGFyZWE6e2F1dG9mb2N1czp7YXV0b2ZvY3VzOjF9LGRpc2FibGVkOntkaXNhYmxlZDoxfSxmb3JtOjEsbWF4bGVuZ3RoOjEsbmFtZToxLHBsYWNlaG9sZGVyOjEscmVhZG9ubHk6e3JlYWRvbmx5OjF9LGFjZXF1aXJlZDp7YWNlcXVpcmVkOjF9LHJvd3M6MSxjb2xzOjEsd3JhcDp7b246MSxvZmY6MSxoYXJkOjEsc29mdDoxfX0sa2V5Z2VuOnthdXRvZm9jdXM6MSxjaGFsbGVuZ2U6e2NoYWxsZW5nZToxfSxkaXNhYmxlZDp7ZGlzYWJsZWQ6MX0sZm9ybToxLGtleXR5cGU6e3JzYToxLGRzYToxLGVjOjF9LG5hbWU6MX0sb3V0cHV0Ontmb3I6MSxmb3JtOjEsbmFtZToxfSxwcm9ncmVzczp7dmFsdWU6MSxtYXg6MX0sbWV0ZXI6e3ZhbHVlOjEsbWluOjEsbWF4OjEsbG93OjEsaGlnaDoxLG9wdGltdW06MX0sZGV0YWlsczp7b3BlbjoxfSxzdW1tYXJ5Ont9LGNvbW1hbmQ6e3R5cGU6MSxsYWJlbDoxLGljb246MSxkaXNhYmxlZDoxLGNoZWNrZWQ6MSxyYWRpb2dyb3VwOjEsY29tbWFuZDoxfSxtZW51Ont0eXBlOjEsbGFiZWw6MX0sZGlhbG9nOntvcGVuOjF9fSxpPU9iamVjdC5rZXlzKG8pO2Z1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZS50eXBlLmxhc3RJbmRleE9mKHQrIi54bWwiKT4tMX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciByPW5ldyBuKGUsdC5yb3csdC5jb2x1bW4pLGE9ci5nZXRDdXJyZW50VG9rZW4oKTthJiYhcyhhLCJ0YWctbmFtZSIpOylhPXIuc3RlcEJhY2t3YXJkKCk7aWYoYSlyZXR1cm4gYS52YWx1ZX1mdW5jdGlvbiBjKGUsdCl7Zm9yKHZhciByPW5ldyBuKGUsdC5yb3csdC5jb2x1bW4pLGE9ci5nZXRDdXJyZW50VG9rZW4oKTthJiYhcyhhLCJhdHRyaWJ1dGUtbmFtZSIpOylhPXIuc3RlcEJhY2t3YXJkKCk7aWYoYSlyZXR1cm4gYS52YWx1ZX12YXIgdT1mdW5jdGlvbigpe307KGZ1bmN0aW9uKCl7dGhpcy5nZXRDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQscixuKXt2YXIgYT10LmdldFRva2VuQXQoci5yb3csci5jb2x1bW4pO2lmKCFhKXJldHVybltdO2lmKHMoYSwidGFnLW5hbWUiKXx8cyhhLCJ0YWctb3BlbiIpfHxzKGEsImVuZC10YWctb3BlbiIpKXJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKGUsdCxyLG4pO2lmKHMoYSwidGFnLXdoaXRlc3BhY2UiKXx8cyhhLCJhdHRyaWJ1dGUtbmFtZSIpKXJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKGUsdCxyLG4pO2lmKHMoYSwiYXR0cmlidXRlLXZhbHVlIikpcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlVmFsdWVDb21wbGV0aW9ucyhlLHQscixuKTt2YXIgbz10LmdldExpbmUoci5yb3cpLnN1YnN0cigwLHIuY29sdW1uKTtyZXR1cm4vJlthLXpdKiQvaS50ZXN0KG8pP3RoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zKGUsdCxyLG4pOltdfSx0aGlzLmdldFRhZ0NvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue3ZhbHVlOmUsbWV0YToidGFnIixzY29yZTpOdW1iZXIuTUFYX1ZBTFVFfX0pKX0sdGhpcy5nZXRBdHRyaWJ1dGVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQscixuKXt2YXIgaT1sKHQscik7aWYoIWkpcmV0dXJuW107dmFyIHM9YTtyZXR1cm4gaSBpbiBvJiYocz1zLmNvbmNhdChPYmplY3Qua2V5cyhvW2ldKSkpLHMubWFwKChmdW5jdGlvbihlKXtyZXR1cm57Y2FwdGlvbjplLHNuaXBwZXQ6ZSsnPSIkMCInLG1ldGE6ImF0dHJpYnV0ZSIsc2NvcmU6TnVtYmVyLk1BWF9WQUxVRX19KSl9LHRoaXMuZ2V0QXR0cmlidXRlVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQscixuKXt2YXIgYT1sKHQsciksaT1jKHQscik7aWYoIWEpcmV0dXJuW107dmFyIHM9W107cmV0dXJuIGEgaW4gbyYmaSBpbiBvW2FdJiYib2JqZWN0Ij09dHlwZW9mIG9bYV1baV0mJihzPU9iamVjdC5rZXlzKG9bYV1baV0pKSxzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue2NhcHRpb246ZSxzbmlwcGV0OmUsbWV0YToiYXR0cmlidXRlIHZhbHVlIixzY29yZTpOdW1iZXIuTUFYX1ZBTFVFfX0pKX0sdGhpcy5nZXRIVE1MRW50aXR5Q29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuWyJBYWN1dGU7IiwiYWFjdXRlOyIsIkFjaXJjOyIsImFjaXJjOyIsImFjdXRlOyIsIkFFbGlnOyIsImFlbGlnOyIsIkFncmF2ZTsiLCJhZ3JhdmU7IiwiYWxlZnN5bTsiLCJBbHBoYTsiLCJhbHBoYTsiLCJhbXA7IiwiYW5kOyIsImFuZzsiLCJBcmluZzsiLCJhcmluZzsiLCJhc3ltcDsiLCJBdGlsZGU7IiwiYXRpbGRlOyIsIkF1bWw7IiwiYXVtbDsiLCJiZHF1bzsiLCJCZXRhOyIsImJldGE7IiwiYnJ2YmFyOyIsImJ1bGw7IiwiY2FwOyIsIkNjZWRpbDsiLCJjY2VkaWw7IiwiY2VkaWw7IiwiY2VudDsiLCJDaGk7IiwiY2hpOyIsImNpcmM7IiwiY2x1YnM7IiwiY29uZzsiLCJjb3B5OyIsImNyYXJyOyIsImN1cDsiLCJjdXJyZW47IiwiRGFnZ2VyOyIsImRhZ2dlcjsiLCJkQXJyOyIsImRhcnI7IiwiZGVnOyIsIkRlbHRhOyIsImRlbHRhOyIsImRpYW1zOyIsImRpdmlkZTsiLCJFYWN1dGU7IiwiZWFjdXRlOyIsIkVjaXJjOyIsImVjaXJjOyIsIkVncmF2ZTsiLCJlZ3JhdmU7IiwiZW1wdHk7IiwiZW1zcDsiLCJlbnNwOyIsIkVwc2lsb247IiwiZXBzaWxvbjsiLCJlcXVpdjsiLCJFdGE7IiwiZXRhOyIsIkVUSDsiLCJldGg7IiwiRXVtbDsiLCJldW1sOyIsImV1cm87IiwiZXhpc3Q7IiwiZm5vZjsiLCJmb3JhbGw7IiwiZnJhYzEyOyIsImZyYWMxNDsiLCJmcmFjMzQ7IiwiZnJhc2w7IiwiR2FtbWE7IiwiZ2FtbWE7IiwiZ2U7IiwiZ3Q7IiwiaEFycjsiLCJoYXJyOyIsImhlYXJ0czsiLCJoZWxsaXA7IiwiSWFjdXRlOyIsImlhY3V0ZTsiLCJJY2lyYzsiLCJpY2lyYzsiLCJpZXhjbDsiLCJJZ3JhdmU7IiwiaWdyYXZlOyIsImltYWdlOyIsImluZmluOyIsImludDsiLCJJb3RhOyIsImlvdGE7IiwiaXF1ZXN0OyIsImlzaW47IiwiSXVtbDsiLCJpdW1sOyIsIkthcHBhOyIsImthcHBhOyIsIkxhbWJkYTsiLCJsYW1iZGE7IiwibGFuZzsiLCJsYXF1bzsiLCJsQXJyOyIsImxhcnI7IiwibGNlaWw7IiwibGRxdW87IiwibGU7IiwibGZsb29yOyIsImxvd2FzdDsiLCJsb3o7IiwibHJtOyIsImxzYXF1bzsiLCJsc3F1bzsiLCJsdDsiLCJtYWNyOyIsIm1kYXNoOyIsIm1pY3JvOyIsIm1pZGRvdDsiLCJtaW51czsiLCJNdTsiLCJtdTsiLCJuYWJsYTsiLCJuYnNwOyIsIm5kYXNoOyIsIm5lOyIsIm5pOyIsIm5vdDsiLCJub3RpbjsiLCJuc3ViOyIsIk50aWxkZTsiLCJudGlsZGU7IiwiTnU7IiwibnU7IiwiT2FjdXRlOyIsIm9hY3V0ZTsiLCJPY2lyYzsiLCJvY2lyYzsiLCJPRWxpZzsiLCJvZWxpZzsiLCJPZ3JhdmU7Iiwib2dyYXZlOyIsIm9saW5lOyIsIk9tZWdhOyIsIm9tZWdhOyIsIk9taWNyb247Iiwib21pY3JvbjsiLCJvcGx1czsiLCJvcjsiLCJvcmRmOyIsIm9yZG07IiwiT3NsYXNoOyIsIm9zbGFzaDsiLCJPdGlsZGU7Iiwib3RpbGRlOyIsIm90aW1lczsiLCJPdW1sOyIsIm91bWw7IiwicGFyYTsiLCJwYXJ0OyIsInBlcm1pbDsiLCJwZXJwOyIsIlBoaTsiLCJwaGk7IiwiUGk7IiwicGk7IiwicGl2OyIsInBsdXNtbjsiLCJwb3VuZDsiLCJQcmltZTsiLCJwcmltZTsiLCJwcm9kOyIsInByb3A7IiwiUHNpOyIsInBzaTsiLCJxdW90OyIsInJhZGljOyIsInJhbmc7IiwicmFxdW87IiwickFycjsiLCJyYXJyOyIsInJjZWlsOyIsInJkcXVvOyIsInJlYWw7IiwicmVnOyIsInJmbG9vcjsiLCJSaG87IiwicmhvOyIsInJsbTsiLCJyc2FxdW87IiwicnNxdW87Iiwic2JxdW87IiwiU2Nhcm9uOyIsInNjYXJvbjsiLCJzZG90OyIsInNlY3Q7Iiwic2h5OyIsIlNpZ21hOyIsInNpZ21hOyIsInNpZ21hZjsiLCJzaW07Iiwic3BhZGVzOyIsInN1YjsiLCJzdWJlOyIsInN1bTsiLCJzdXA7Iiwic3VwMTsiLCJzdXAyOyIsInN1cDM7Iiwic3VwZTsiLCJzemxpZzsiLCJUYXU7IiwidGF1OyIsInRoZXJlNDsiLCJUaGV0YTsiLCJ0aGV0YTsiLCJ0aGV0YXN5bTsiLCJ0aGluc3A7IiwiVEhPUk47IiwidGhvcm47IiwidGlsZGU7IiwidGltZXM7IiwidHJhZGU7IiwiVWFjdXRlOyIsInVhY3V0ZTsiLCJ1QXJyOyIsInVhcnI7IiwiVWNpcmM7IiwidWNpcmM7IiwiVWdyYXZlOyIsInVncmF2ZTsiLCJ1bWw7IiwidXBzaWg7IiwiVXBzaWxvbjsiLCJ1cHNpbG9uOyIsIlV1bWw7IiwidXVtbDsiLCJ3ZWllcnA7IiwiWGk7IiwieGk7IiwiWWFjdXRlOyIsInlhY3V0ZTsiLCJ5ZW47IiwiWXVtbDsiLCJ5dW1sOyIsIlpldGE7IiwiemV0YTsiLCJ6d2o7IiwienduajsiXS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntjYXB0aW9uOmUsc25pcHBldDplLG1ldGE6Imh0bWwgZW50aXR5IixzY29yZTpOdW1iZXIuTUFYX1ZBTFVFfX0pKX19KS5jYWxsKHUucHJvdG90eXBlKSx0Lkh0bWxDb21wbGV0aW9ucz11fSkpLGFjZS5kZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLChmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBhPWUoIi4uL2xpYi9vb3AiKSxvPWUoIi4uL2xpYi9sYW5nIiksaT1lKCIuL3RleHQiKS5Nb2RlLHM9ZSgiLi9qYXZhc2NyaXB0IikuTW9kZSxsPWUoIi4vY3NzIikuTW9kZSxjPWUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXMsdT1lKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXIsZD1lKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlLHA9ZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zLG09ZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQsaD1bImFyZWEiLCJiYXNlIiwiYnIiLCJjb2wiLCJlbWJlZCIsImhyIiwiaW1nIiwiaW5wdXQiLCJrZXlnZW4iLCJsaW5rIiwibWV0YSIsIm1lbnVpdGVtIiwicGFyYW0iLCJzb3VyY2UiLCJ0cmFjayIsIndiciJdLGY9WyJsaSIsImR0IiwiZGQiLCJwIiwicnQiLCJycCIsIm9wdGdyb3VwIiwib3B0aW9uIiwiY29sZ3JvdXAiLCJ0ZCIsInRoIl0sZz1mdW5jdGlvbihlKXt0aGlzLmZyYWdtZW50Q29udGV4dD1lJiZlLmZyYWdtZW50Q29udGV4dCx0aGlzLkhpZ2hsaWdodFJ1bGVzPWMsdGhpcy4kYmVoYXZpb3VyPW5ldyB1LHRoaXMuJGNvbXBsZXRlcj1uZXcgcCx0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoeyJqcy0iOnMsImNzcy0iOmx9KSx0aGlzLmZvbGRpbmdSdWxlcz1uZXcgZCh0aGlzLnZvaWRFbGVtZW50cyxvLmFycmF5VG9NYXAoZikpfTthLmluaGVyaXRzKGcsaSksZnVuY3Rpb24oKXt0aGlzLmJsb2NrQ29tbWVudD17c3RhcnQ6Ilx4M2MhLS0iLGVuZDoiLS1ceDNlIn0sdGhpcy52b2lkRWxlbWVudHM9by5hcnJheVRvTWFwKGgpLHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLiRnZXRJbmRlbnQodCl9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4hMX0sdGhpcy5nZXRDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKGUsdCxyLG4pfSx0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihlKXtpZih0aGlzLmNvbnN0cnVjdG9yPT1nKXt2YXIgdD1uZXcgbShbImFjZSJdLHIoImQ1N2MiKSwiV29ya2VyIik7cmV0dXJuIHQuYXR0YWNoVG9Eb2N1bWVudChlLmdldERvY3VtZW50KCkpLHRoaXMuZnJhZ21lbnRDb250ZXh0JiZ0LmNhbGwoInNldE9wdGlvbnMiLFt7Y29udGV4dDp0aGlzLmZyYWdtZW50Q29udGV4dH1dKSx0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKHQpe2Uuc2V0QW5ub3RhdGlvbnModC5kYXRhKX0pKSx0Lm9uKCJ0ZXJtaW5hdGUiLChmdW5jdGlvbigpe2UuY2xlYXJBbm5vdGF0aW9ucygpfSkpLHR9fSx0aGlzLiRpZD0iYWNlL21vZGUvaHRtbCJ9LmNhbGwoZy5wcm90b3R5cGUpLHQuTW9kZT1nfSkpfSxkNTdjOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzLmlkPSJhY2UvbW9kZS9odG1sX3dvcmtlciIsZS5leHBvcnRzLnNyYz0nIm5vIHVzZSBzdHJpY3QiOyFmdW5jdGlvbih3aW5kb3cpe2Z1bmN0aW9uIHJlc29sdmVNb2R1bGVJZChpZCxwYXRocyl7Zm9yKHZhciB0ZXN0UGF0aD1pZCx0YWlsPSIiO3Rlc3RQYXRoOyl7dmFyIGFsaWFzPXBhdGhzW3Rlc3RQYXRoXTtpZigic3RyaW5nIj09dHlwZW9mIGFsaWFzKXJldHVybiBhbGlhcyt0YWlsO2lmKGFsaWFzKXJldHVybiBhbGlhcy5sb2NhdGlvbi5yZXBsYWNlKC9cXC8qJC8sIi8iKSsodGFpbHx8YWxpYXMubWFpbnx8YWxpYXMubmFtZSk7aWYoYWxpYXM9PT0hMSlyZXR1cm4iIjt2YXIgaT10ZXN0UGF0aC5sYXN0SW5kZXhPZigiLyIpO2lmKC0xPT09aSlicmVhazt0YWlsPXRlc3RQYXRoLnN1YnN0cihpKSt0YWlsLHRlc3RQYXRoPXRlc3RQYXRoLnNsaWNlKDAsaSl9cmV0dXJuIGlkfWlmKCEodm9pZCAwIT09d2luZG93LndpbmRvdyYmd2luZG93LmRvY3VtZW50fHx3aW5kb3cuYWNlcXVpcmUmJndpbmRvdy5kZWZpbmUpKXt3aW5kb3cuY29uc29sZXx8KHdpbmRvdy5jb25zb2xlPWZ1bmN0aW9uKCl7dmFyIG1zZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3Bvc3RNZXNzYWdlKHt0eXBlOiJsb2ciLGRhdGE6bXNnc30pfSx3aW5kb3cuY29uc29sZS5lcnJvcj13aW5kb3cuY29uc29sZS53YXJuPXdpbmRvdy5jb25zb2xlLmxvZz13aW5kb3cuY29uc29sZS50cmFjZT13aW5kb3cuY29uc29sZSksd2luZG93LndpbmRvdz13aW5kb3csd2luZG93LmFjZT13aW5kb3csd2luZG93Lm9uZXJyb3I9ZnVuY3Rpb24obWVzc2FnZSxmaWxlLGxpbmUsY29sLGVycil7cG9zdE1lc3NhZ2Uoe3R5cGU6ImVycm9yIixkYXRhOnttZXNzYWdlOm1lc3NhZ2UsZGF0YTplcnIuZGF0YSxmaWxlOmZpbGUsbGluZTpsaW5lLGNvbDpjb2wsc3RhY2s6ZXJyLnN0YWNrfX0pfSx3aW5kb3cubm9ybWFsaXplTW9kdWxlPWZ1bmN0aW9uKHBhcmVudElkLG1vZHVsZU5hbWUpe2lmKC0xIT09bW9kdWxlTmFtZS5pbmRleE9mKCIhIikpe3ZhciBjaHVua3M9bW9kdWxlTmFtZS5zcGxpdCgiISIpO3JldHVybiB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLGNodW5rc1swXSkrIiEiK3dpbmRvdy5ub3JtYWxpemVNb2R1bGUocGFyZW50SWQsY2h1bmtzWzFdKX1pZigiLiI9PW1vZHVsZU5hbWUuY2hhckF0KDApKXt2YXIgYmFzZT1wYXJlbnRJZC5zcGxpdCgiLyIpLnNsaWNlKDAsLTEpLmpvaW4oIi8iKTtmb3IobW9kdWxlTmFtZT0oYmFzZT9iYXNlKyIvIjoiIikrbW9kdWxlTmFtZTstMSE9PW1vZHVsZU5hbWUuaW5kZXhPZigiLiIpJiZwcmV2aW91cyE9bW9kdWxlTmFtZTspe3ZhciBwcmV2aW91cz1tb2R1bGVOYW1lO21vZHVsZU5hbWU9bW9kdWxlTmFtZS5yZXBsYWNlKC9eXFwuXFwvLywiIikucmVwbGFjZSgvXFwvXFwuXFwvLywiLyIpLnJlcGxhY2UoL1teXFwvXStcXC9cXC5cXC5cXC8vLCIiKX19cmV0dXJuIG1vZHVsZU5hbWV9LHdpbmRvdy5hY2VxdWlyZT1mdW5jdGlvbiBhY2VxdWlyZShwYXJlbnRJZCxpZCl7aWYoaWR8fChpZD1wYXJlbnRJZCxwYXJlbnRJZD1udWxsKSwhaWQuY2hhckF0KXRocm93IEVycm9yKCJ3b3JrZXIuanMgYWNlcXVpcmUoKSBhY2NlcHRzIG9ubHkgKHBhcmVudElkLCBpZCkgYXMgYXJndW1lbnRzIik7aWQ9d2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCxpZCk7dmFyIG1vZHVsZT13aW5kb3cuYWNlcXVpcmUubW9kdWxlc1tpZF07aWYobW9kdWxlKXJldHVybiBtb2R1bGUuaW5pdGlhbGl6ZWR8fChtb2R1bGUuaW5pdGlhbGl6ZWQ9ITAsbW9kdWxlLmV4cG9ydHM9bW9kdWxlLmZhY3RvcnkoKS5leHBvcnRzKSxtb2R1bGUuZXhwb3J0cztpZighd2luZG93LmFjZXF1aXJlLnRsbnMpcmV0dXJuIGNvbnNvbGUubG9nKCJ1bmFibGUgdG8gbG9hZCAiK2lkKTt2YXIgcGF0aD1yZXNvbHZlTW9kdWxlSWQoaWQsd2luZG93LmFjZXF1aXJlLnRsbnMpO3JldHVybiIuanMiIT1wYXRoLnNsaWNlKC0zKSYmKHBhdGgrPSIuanMiKSx3aW5kb3cuYWNlcXVpcmUuaWQ9aWQsd2luZG93LmFjZXF1aXJlLm1vZHVsZXNbaWRdPXt9LGltcG9ydFNjcmlwdHMocGF0aCksd2luZG93LmFjZXF1aXJlKHBhcmVudElkLGlkKX0sd2luZG93LmFjZXF1aXJlLm1vZHVsZXM9e30sd2luZG93LmFjZXF1aXJlLnRsbnM9e30sd2luZG93LmRlZmluZT1mdW5jdGlvbihpZCxkZXBzLGZhY3Rvcnkpe2lmKDI9PWFyZ3VtZW50cy5sZW5ndGg/KGZhY3Rvcnk9ZGVwcywic3RyaW5nIiE9dHlwZW9mIGlkJiYoZGVwcz1pZCxpZD13aW5kb3cuYWNlcXVpcmUuaWQpKToxPT1hcmd1bWVudHMubGVuZ3RoJiYoZmFjdG9yeT1pZCxkZXBzPVtdLGlkPXdpbmRvdy5hY2VxdWlyZS5pZCksImZ1bmN0aW9uIiE9dHlwZW9mIGZhY3RvcnkpcmV0dXJuIHdpbmRvdy5hY2VxdWlyZS5tb2R1bGVzW2lkXT17ZXhwb3J0czpmYWN0b3J5LGluaXRpYWxpemVkOiEwfSx2b2lkIDA7ZGVwcy5sZW5ndGh8fChkZXBzPVsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSk7dmFyIHJlcT1mdW5jdGlvbihjaGlsZElkKXtyZXR1cm4gd2luZG93LmFjZXF1aXJlKGlkLGNoaWxkSWQpfTt3aW5kb3cuYWNlcXVpcmUubW9kdWxlc1tpZF09e2V4cG9ydHM6e30sZmFjdG9yeTpmdW5jdGlvbigpe3ZhciBtb2R1bGU9dGhpcyxyZXR1cm5FeHBvcnRzPWZhY3RvcnkuYXBwbHkodGhpcyxkZXBzLm1hcChmdW5jdGlvbihkZXApe3N3aXRjaChkZXApe2Nhc2UicmVxdWlyZSI6cmV0dXJuIHJlcTtjYXNlImV4cG9ydHMiOnJldHVybiBtb2R1bGUuZXhwb3J0cztjYXNlIm1vZHVsZSI6cmV0dXJuIG1vZHVsZTtkZWZhdWx0OnJldHVybiByZXEoZGVwKX19KSk7cmV0dXJuIHJldHVybkV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1yZXR1cm5FeHBvcnRzKSxtb2R1bGV9fX0sd2luZG93LmRlZmluZS5hbWQ9e30sYWNlcXVpcmUudGxucz17fSx3aW5kb3cuaW5pdEJhc2VVcmxzPWZ1bmN0aW9uKHRvcExldmVsTmFtZXNwYWNlcyl7Zm9yKHZhciBpIGluIHRvcExldmVsTmFtZXNwYWNlcylhY2VxdWlyZS50bG5zW2ldPXRvcExldmVsTmFtZXNwYWNlc1tpXX0sd2luZG93LmluaXRTZW5kZXI9ZnVuY3Rpb24oKXt2YXIgRXZlbnRFbWl0dGVyPXdpbmRvdy5hY2VxdWlyZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLG9vcD13aW5kb3cuYWNlcXVpcmUoImFjZS9saWIvb29wIiksU2VuZGVyPWZ1bmN0aW9uKCl7fTtyZXR1cm4gZnVuY3Rpb24oKXtvb3AuaW1wbGVtZW50KHRoaXMsRXZlbnRFbWl0dGVyKSx0aGlzLmNhbGxiYWNrPWZ1bmN0aW9uKGRhdGEsY2FsbGJhY2tJZCl7cG9zdE1lc3NhZ2Uoe3R5cGU6ImNhbGwiLGlkOmNhbGxiYWNrSWQsZGF0YTpkYXRhfSl9LHRoaXMuZW1pdD1mdW5jdGlvbihuYW1lLGRhdGEpe3Bvc3RNZXNzYWdlKHt0eXBlOiJldmVudCIsbmFtZTpuYW1lLGRhdGE6ZGF0YX0pfX0uY2FsbChTZW5kZXIucHJvdG90eXBlKSxuZXcgU2VuZGVyfTt2YXIgbWFpbj13aW5kb3cubWFpbj1udWxsLHNlbmRlcj13aW5kb3cuc2VuZGVyPW51bGw7d2luZG93Lm9ubWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgbXNnPWUuZGF0YTtpZihtc2cuZXZlbnQmJnNlbmRlcilzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsbXNnLmRhdGEpO2Vsc2UgaWYobXNnLmNvbW1hbmQpaWYobWFpblttc2cuY29tbWFuZF0pbWFpblttc2cuY29tbWFuZF0uYXBwbHkobWFpbixtc2cuYXJncyk7ZWxzZXtpZighd2luZG93W21zZy5jb21tYW5kXSl0aHJvdyBFcnJvcigiVW5rbm93biBjb21tYW5kOiIrbXNnLmNvbW1hbmQpO3dpbmRvd1ttc2cuY29tbWFuZF0uYXBwbHkod2luZG93LG1zZy5hcmdzKX1lbHNlIGlmKG1zZy5pbml0KXt3aW5kb3cuaW5pdEJhc2VVcmxzKG1zZy50bG5zKSxhY2VxdWlyZSgiYWNlL2xpYi9lczUtc2hpbSIpLHNlbmRlcj13aW5kb3cuc2VuZGVyPXdpbmRvdy5pbml0U2VuZGVyKCk7dmFyIGNsYXp6PWFjZXF1aXJlKG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdO21haW49d2luZG93Lm1haW49bmV3IGNsYXp6KHNlbmRlcil9fX19KHRoaXMpLGFjZS5kZWZpbmUoImFjZS9saWIvb29wIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYWNlcXVpcmUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO2V4cG9ydHMuaW5oZXJpdHM9ZnVuY3Rpb24oY3RvcixzdXBlckN0b3Ipe2N0b3Iuc3VwZXJfPXN1cGVyQ3RvcixjdG9yLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpjdG9yLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfSxleHBvcnRzLm1peGluPWZ1bmN0aW9uKG9iaixtaXhpbil7Zm9yKHZhciBrZXkgaW4gbWl4aW4pb2JqW2tleV09bWl4aW5ba2V5XTtyZXR1cm4gb2JqfSxleHBvcnRzLmltcGxlbWVudD1mdW5jdGlvbihwcm90byxtaXhpbil7ZXhwb3J0cy5taXhpbihwcm90byxtaXhpbil9fSksYWNlLmRlZmluZSgiYWNlL2xpYi9sYW5nIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYWNlcXVpcmUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO2V4cG9ydHMubGFzdD1mdW5jdGlvbihhKXtyZXR1cm4gYVthLmxlbmd0aC0xXX0sZXhwb3J0cy5zdHJpbmdSZXZlcnNlPWZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpfSxleHBvcnRzLnN0cmluZ1JlcGVhdD1mdW5jdGlvbihzdHJpbmcsY291bnQpe2Zvcih2YXIgcmVzdWx0PSIiO2NvdW50PjA7KTEmY291bnQmJihyZXN1bHQrPXN0cmluZyksKGNvdW50Pj49MSkmJihzdHJpbmcrPXN0cmluZyk7cmV0dXJuIHJlc3VsdH07dmFyIHRyaW1CZWdpblJlZ2V4cD0vXlxcc1xccyovLHRyaW1FbmRSZWdleHA9L1xcc1xccyokLztleHBvcnRzLnN0cmluZ1RyaW1MZWZ0PWZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwiIil9LGV4cG9ydHMuc3RyaW5nVHJpbVJpZ2h0PWZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKHRyaW1FbmRSZWdleHAsIiIpfSxleHBvcnRzLmNvcHlPYmplY3Q9ZnVuY3Rpb24ob2JqKXt2YXIgY29weT17fTtmb3IodmFyIGtleSBpbiBvYmopY29weVtrZXldPW9ialtrZXldO3JldHVybiBjb3B5fSxleHBvcnRzLmNvcHlBcnJheT1mdW5jdGlvbihhcnJheSl7Zm9yKHZhciBjb3B5PVtdLGk9MCxsPWFycmF5Lmxlbmd0aDtsPmk7aSsrKWNvcHlbaV09YXJyYXlbaV0mJiJvYmplY3QiPT10eXBlb2YgYXJyYXlbaV0/dGhpcy5jb3B5T2JqZWN0KGFycmF5W2ldKTphcnJheVtpXTtyZXR1cm4gY29weX0sZXhwb3J0cy5kZWVwQ29weT1mdW5jdGlvbiBkZWVwQ29weShvYmope2lmKCJvYmplY3QiIT10eXBlb2Ygb2JqfHwhb2JqKXJldHVybiBvYmo7dmFyIGNvcHk7aWYoQXJyYXkuaXNBcnJheShvYmopKXtjb3B5PVtdO2Zvcih2YXIga2V5PTA7b2JqLmxlbmd0aD5rZXk7a2V5KyspY29weVtrZXldPWRlZXBDb3B5KG9ialtrZXldKTtyZXR1cm4gY29weX1pZigiW29iamVjdCBPYmplY3RdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKXJldHVybiBvYmo7Y29weT17fTtmb3IodmFyIGtleSBpbiBvYmopY29weVtrZXldPWRlZXBDb3B5KG9ialtrZXldKTtyZXR1cm4gY29weX0sZXhwb3J0cy5hcnJheVRvTWFwPWZ1bmN0aW9uKGFycil7Zm9yKHZhciBtYXA9e30saT0wO2Fyci5sZW5ndGg+aTtpKyspbWFwW2FycltpXV09MTtyZXR1cm4gbWFwfSxleHBvcnRzLmNyZWF0ZU1hcD1mdW5jdGlvbihwcm9wcyl7dmFyIG1hcD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgaSBpbiBwcm9wcyltYXBbaV09cHJvcHNbaV07cmV0dXJuIG1hcH0sZXhwb3J0cy5hcnJheVJlbW92ZT1mdW5jdGlvbihhcnJheSx2YWx1ZSl7Zm9yKHZhciBpPTA7YXJyYXkubGVuZ3RoPj1pO2krKyl2YWx1ZT09PWFycmF5W2ldJiZhcnJheS5zcGxpY2UoaSwxKX0sZXhwb3J0cy5lc2NhcGVSZWdFeHA9ZnVuY3Rpb24oc3RyKXtyZXR1cm4gc3RyLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXFxdXFwvXFxcXF0pL2csIlxcXFwkMSIpfSxleHBvcnRzLmVzY2FwZUhUTUw9ZnVuY3Rpb24oc3RyKXtyZXR1cm4gc3RyLnJlcGxhY2UoLyYvZywiJiMzODsiKS5yZXBsYWNlKC8iL2csIiYjMzQ7IikucmVwbGFjZSgvXCcvZywiJiMzOTsiKS5yZXBsYWNlKC88L2csIiYjNjA7Iil9LGV4cG9ydHMuZ2V0TWF0Y2hPZmZzZXRzPWZ1bmN0aW9uKHN0cmluZyxyZWdFeHApe3ZhciBtYXRjaGVzPVtdO3JldHVybiBzdHJpbmcucmVwbGFjZShyZWdFeHAsZnVuY3Rpb24oc3RyKXttYXRjaGVzLnB1c2goe29mZnNldDphcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSxsZW5ndGg6c3RyLmxlbmd0aH0pfSksbWF0Y2hlc30sZXhwb3J0cy5kZWZlcnJlZENhbGw9ZnVuY3Rpb24oZmNuKXt2YXIgdGltZXI9bnVsbCxjYWxsYmFjaz1mdW5jdGlvbigpe3RpbWVyPW51bGwsZmNuKCl9LGRlZmVycmVkPWZ1bmN0aW9uKHRpbWVvdXQpe3JldHVybiBkZWZlcnJlZC5jYW5jZWwoKSx0aW1lcj1zZXRUaW1lb3V0KGNhbGxiYWNrLHRpbWVvdXR8fDApLGRlZmVycmVkfTtyZXR1cm4gZGVmZXJyZWQuc2NoZWR1bGU9ZGVmZXJyZWQsZGVmZXJyZWQuY2FsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbCgpLGZjbigpLGRlZmVycmVkfSxkZWZlcnJlZC5jYW5jZWw9ZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KHRpbWVyKSx0aW1lcj1udWxsLGRlZmVycmVkfSxkZWZlcnJlZC5pc1BlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGltZXJ9LGRlZmVycmVkfSxleHBvcnRzLmRlbGF5ZWRDYWxsPWZ1bmN0aW9uKGZjbixkZWZhdWx0VGltZW91dCl7dmFyIHRpbWVyPW51bGwsY2FsbGJhY2s9ZnVuY3Rpb24oKXt0aW1lcj1udWxsLGZjbigpfSxfc2VsZj1mdW5jdGlvbih0aW1lb3V0KXtudWxsPT10aW1lciYmKHRpbWVyPXNldFRpbWVvdXQoY2FsbGJhY2ssdGltZW91dHx8ZGVmYXVsdFRpbWVvdXQpKX07cmV0dXJuIF9zZWxmLmRlbGF5PWZ1bmN0aW9uKHRpbWVvdXQpe3RpbWVyJiZjbGVhclRpbWVvdXQodGltZXIpLHRpbWVyPXNldFRpbWVvdXQoY2FsbGJhY2ssdGltZW91dHx8ZGVmYXVsdFRpbWVvdXQpfSxfc2VsZi5zY2hlZHVsZT1fc2VsZixfc2VsZi5jYWxsPWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWwoKSxmY24oKX0sX3NlbGYuY2FuY2VsPWZ1bmN0aW9uKCl7dGltZXImJmNsZWFyVGltZW91dCh0aW1lciksdGltZXI9bnVsbH0sX3NlbGYuaXNQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRpbWVyfSxfc2VsZn19KSxhY2UuZGVmaW5lKCJhY2UvcmFuZ2UiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhY2VxdWlyZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIGNvbXBhcmVQb2ludHM9ZnVuY3Rpb24ocDEscDIpe3JldHVybiBwMS5yb3ctcDIucm93fHxwMS5jb2x1bW4tcDIuY29sdW1ufSxSYW5nZT1mdW5jdGlvbihzdGFydFJvdyxzdGFydENvbHVtbixlbmRSb3csZW5kQ29sdW1uKXt0aGlzLnN0YXJ0PXtyb3c6c3RhcnRSb3csY29sdW1uOnN0YXJ0Q29sdW1ufSx0aGlzLmVuZD17cm93OmVuZFJvdyxjb2x1bW46ZW5kQ29sdW1ufX07KGZ1bmN0aW9uKCl7dGhpcy5pc0VxdWFsPWZ1bmN0aW9uKHJhbmdlKXtyZXR1cm4gdGhpcy5zdGFydC5yb3c9PT1yYW5nZS5zdGFydC5yb3cmJnRoaXMuZW5kLnJvdz09PXJhbmdlLmVuZC5yb3cmJnRoaXMuc3RhcnQuY29sdW1uPT09cmFuZ2Uuc3RhcnQuY29sdW1uJiZ0aGlzLmVuZC5jb2x1bW49PT1yYW5nZS5lbmQuY29sdW1ufSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJhbmdlOiBbIit0aGlzLnN0YXJ0LnJvdysiLyIrdGhpcy5zdGFydC5jb2x1bW4rIl0gLT4gWyIrdGhpcy5lbmQucm93KyIvIit0aGlzLmVuZC5jb2x1bW4rIl0ifSx0aGlzLmNvbnRhaW5zPWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3JldHVybiAwPT10aGlzLmNvbXBhcmUocm93LGNvbHVtbil9LHRoaXMuY29tcGFyZVJhbmdlPWZ1bmN0aW9uKHJhbmdlKXt2YXIgY21wLGVuZD1yYW5nZS5lbmQsc3RhcnQ9cmFuZ2Uuc3RhcnQ7cmV0dXJuIGNtcD10aGlzLmNvbXBhcmUoZW5kLnJvdyxlbmQuY29sdW1uKSwxPT1jbXA/KGNtcD10aGlzLmNvbXBhcmUoc3RhcnQucm93LHN0YXJ0LmNvbHVtbiksMT09Y21wPzI6MD09Y21wPzE6MCk6LTE9PWNtcD8tMjooY21wPXRoaXMuY29tcGFyZShzdGFydC5yb3csc3RhcnQuY29sdW1uKSwtMT09Y21wPy0xOjE9PWNtcD80MjowKX0sdGhpcy5jb21wYXJlUG9pbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY29tcGFyZShwLnJvdyxwLmNvbHVtbil9LHRoaXMuY29udGFpbnNSYW5nZT1mdW5jdGlvbihyYW5nZSl7cmV0dXJuIDA9PXRoaXMuY29tcGFyZVBvaW50KHJhbmdlLnN0YXJ0KSYmMD09dGhpcy5jb21wYXJlUG9pbnQocmFuZ2UuZW5kKX0sdGhpcy5pbnRlcnNlY3RzPWZ1bmN0aW9uKHJhbmdlKXt2YXIgY21wPXRoaXMuY29tcGFyZVJhbmdlKHJhbmdlKTtyZXR1cm4tMT09Y21wfHwwPT1jbXB8fDE9PWNtcH0sdGhpcy5pc0VuZD1mdW5jdGlvbihyb3csY29sdW1uKXtyZXR1cm4gdGhpcy5lbmQucm93PT1yb3cmJnRoaXMuZW5kLmNvbHVtbj09Y29sdW1ufSx0aGlzLmlzU3RhcnQ9ZnVuY3Rpb24ocm93LGNvbHVtbil7cmV0dXJuIHRoaXMuc3RhcnQucm93PT1yb3cmJnRoaXMuc3RhcnQuY29sdW1uPT1jb2x1bW59LHRoaXMuc2V0U3RhcnQ9ZnVuY3Rpb24ocm93LGNvbHVtbil7Im9iamVjdCI9PXR5cGVvZiByb3c/KHRoaXMuc3RhcnQuY29sdW1uPXJvdy5jb2x1bW4sdGhpcy5zdGFydC5yb3c9cm93LnJvdyk6KHRoaXMuc3RhcnQucm93PXJvdyx0aGlzLnN0YXJ0LmNvbHVtbj1jb2x1bW4pfSx0aGlzLnNldEVuZD1mdW5jdGlvbihyb3csY29sdW1uKXsib2JqZWN0Ij09dHlwZW9mIHJvdz8odGhpcy5lbmQuY29sdW1uPXJvdy5jb2x1bW4sdGhpcy5lbmQucm93PXJvdy5yb3cpOih0aGlzLmVuZC5yb3c9cm93LHRoaXMuZW5kLmNvbHVtbj1jb2x1bW4pfSx0aGlzLmluc2lkZT1mdW5jdGlvbihyb3csY29sdW1uKXtyZXR1cm4gMD09dGhpcy5jb21wYXJlKHJvdyxjb2x1bW4pP3RoaXMuaXNFbmQocm93LGNvbHVtbil8fHRoaXMuaXNTdGFydChyb3csY29sdW1uKT8hMTohMDohMX0sdGhpcy5pbnNpZGVTdGFydD1mdW5jdGlvbihyb3csY29sdW1uKXtyZXR1cm4gMD09dGhpcy5jb21wYXJlKHJvdyxjb2x1bW4pP3RoaXMuaXNFbmQocm93LGNvbHVtbik/ITE6ITA6ITF9LHRoaXMuaW5zaWRlRW5kPWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3JldHVybiAwPT10aGlzLmNvbXBhcmUocm93LGNvbHVtbik/dGhpcy5pc1N0YXJ0KHJvdyxjb2x1bW4pPyExOiEwOiExfSx0aGlzLmNvbXBhcmU9ZnVuY3Rpb24ocm93LGNvbHVtbil7cmV0dXJuIHRoaXMuaXNNdWx0aUxpbmUoKXx8cm93IT09dGhpcy5zdGFydC5yb3c/dGhpcy5zdGFydC5yb3c+cm93Py0xOnJvdz50aGlzLmVuZC5yb3c/MTp0aGlzLnN0YXJ0LnJvdz09PXJvdz9jb2x1bW4+PXRoaXMuc3RhcnQuY29sdW1uPzA6LTE6dGhpcy5lbmQucm93PT09cm93P3RoaXMuZW5kLmNvbHVtbj49Y29sdW1uPzA6MTowOnRoaXMuc3RhcnQuY29sdW1uPmNvbHVtbj8tMTpjb2x1bW4+dGhpcy5lbmQuY29sdW1uPzE6MH0sdGhpcy5jb21wYXJlU3RhcnQ9ZnVuY3Rpb24ocm93LGNvbHVtbil7cmV0dXJuIHRoaXMuc3RhcnQucm93PT1yb3cmJnRoaXMuc3RhcnQuY29sdW1uPT1jb2x1bW4/LTE6dGhpcy5jb21wYXJlKHJvdyxjb2x1bW4pfSx0aGlzLmNvbXBhcmVFbmQ9ZnVuY3Rpb24ocm93LGNvbHVtbil7cmV0dXJuIHRoaXMuZW5kLnJvdz09cm93JiZ0aGlzLmVuZC5jb2x1bW49PWNvbHVtbj8xOnRoaXMuY29tcGFyZShyb3csY29sdW1uKX0sdGhpcy5jb21wYXJlSW5zaWRlPWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3JldHVybiB0aGlzLmVuZC5yb3c9PXJvdyYmdGhpcy5lbmQuY29sdW1uPT1jb2x1bW4/MTp0aGlzLnN0YXJ0LnJvdz09cm93JiZ0aGlzLnN0YXJ0LmNvbHVtbj09Y29sdW1uPy0xOnRoaXMuY29tcGFyZShyb3csY29sdW1uKX0sdGhpcy5jbGlwUm93cz1mdW5jdGlvbihmaXJzdFJvdyxsYXN0Um93KXtpZih0aGlzLmVuZC5yb3c+bGFzdFJvdyl2YXIgZW5kPXtyb3c6bGFzdFJvdysxLGNvbHVtbjowfTtlbHNlIGlmKGZpcnN0Um93PnRoaXMuZW5kLnJvdyl2YXIgZW5kPXtyb3c6Zmlyc3RSb3csY29sdW1uOjB9O2lmKHRoaXMuc3RhcnQucm93Pmxhc3RSb3cpdmFyIHN0YXJ0PXtyb3c6bGFzdFJvdysxLGNvbHVtbjowfTtlbHNlIGlmKGZpcnN0Um93PnRoaXMuc3RhcnQucm93KXZhciBzdGFydD17cm93OmZpcnN0Um93LGNvbHVtbjowfTtyZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydHx8dGhpcy5zdGFydCxlbmR8fHRoaXMuZW5kKX0sdGhpcy5leHRlbmQ9ZnVuY3Rpb24ocm93LGNvbHVtbil7dmFyIGNtcD10aGlzLmNvbXBhcmUocm93LGNvbHVtbik7aWYoMD09Y21wKXJldHVybiB0aGlzO2lmKC0xPT1jbXApdmFyIHN0YXJ0PXtyb3c6cm93LGNvbHVtbjpjb2x1bW59O2Vsc2UgdmFyIGVuZD17cm93OnJvdyxjb2x1bW46Y29sdW1ufTtyZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydHx8dGhpcy5zdGFydCxlbmR8fHRoaXMuZW5kKX0sdGhpcy5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnQucm93PT09dGhpcy5lbmQucm93JiZ0aGlzLnN0YXJ0LmNvbHVtbj09PXRoaXMuZW5kLmNvbHVtbn0sdGhpcy5pc011bHRpTGluZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0LnJvdyE9PXRoaXMuZW5kLnJvd30sdGhpcy5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsdGhpcy5lbmQpfSx0aGlzLmNvbGxhcHNlUm93cz1mdW5jdGlvbigpe3JldHVybiAwPT10aGlzLmVuZC5jb2x1bW4/bmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LDAsTWF0aC5tYXgodGhpcy5zdGFydC5yb3csdGhpcy5lbmQucm93LTEpLDApOm5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywwLHRoaXMuZW5kLnJvdywwKX0sdGhpcy50b1NjcmVlblJhbmdlPWZ1bmN0aW9uKHNlc3Npb24pe3ZhciBzY3JlZW5Qb3NTdGFydD1zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KSxzY3JlZW5Qb3NFbmQ9c2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpO3JldHVybiBuZXcgUmFuZ2Uoc2NyZWVuUG9zU3RhcnQucm93LHNjcmVlblBvc1N0YXJ0LmNvbHVtbixzY3JlZW5Qb3NFbmQucm93LHNjcmVlblBvc0VuZC5jb2x1bW4pfSx0aGlzLm1vdmVCeT1mdW5jdGlvbihyb3csY29sdW1uKXt0aGlzLnN0YXJ0LnJvdys9cm93LHRoaXMuc3RhcnQuY29sdW1uKz1jb2x1bW4sdGhpcy5lbmQucm93Kz1yb3csdGhpcy5lbmQuY29sdW1uKz1jb2x1bW59fSkuY2FsbChSYW5nZS5wcm90b3R5cGUpLFJhbmdlLmZyb21Qb2ludHM9ZnVuY3Rpb24oc3RhcnQsZW5kKXtyZXR1cm4gbmV3IFJhbmdlKHN0YXJ0LnJvdyxzdGFydC5jb2x1bW4sZW5kLnJvdyxlbmQuY29sdW1uKX0sUmFuZ2UuY29tcGFyZVBvaW50cz1jb21wYXJlUG9pbnRzLFJhbmdlLmNvbXBhcmVQb2ludHM9ZnVuY3Rpb24ocDEscDIpe3JldHVybiBwMS5yb3ctcDIucm93fHxwMS5jb2x1bW4tcDIuY29sdW1ufSxleHBvcnRzLlJhbmdlPVJhbmdlfSksYWNlLmRlZmluZSgiYWNlL2FwcGx5X2RlbHRhIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYWNlcXVpcmUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO2V4cG9ydHMuYXBwbHlEZWx0YT1mdW5jdGlvbihkb2NMaW5lcyxkZWx0YSl7dmFyIHJvdz1kZWx0YS5zdGFydC5yb3csc3RhcnRDb2x1bW49ZGVsdGEuc3RhcnQuY29sdW1uLGxpbmU9ZG9jTGluZXNbcm93XXx8IiI7c3dpdGNoKGRlbHRhLmFjdGlvbil7Y2FzZSJpbnNlcnQiOnZhciBsaW5lcz1kZWx0YS5saW5lcztpZigxPT09bGluZXMubGVuZ3RoKWRvY0xpbmVzW3Jvd109bGluZS5zdWJzdHJpbmcoMCxzdGFydENvbHVtbikrZGVsdGEubGluZXNbMF0rbGluZS5zdWJzdHJpbmcoc3RhcnRDb2x1bW4pO2Vsc2V7dmFyIGFyZ3M9W3JvdywxXS5jb25jYXQoZGVsdGEubGluZXMpO2RvY0xpbmVzLnNwbGljZS5hcHBseShkb2NMaW5lcyxhcmdzKSxkb2NMaW5lc1tyb3ddPWxpbmUuc3Vic3RyaW5nKDAsc3RhcnRDb2x1bW4pK2RvY0xpbmVzW3Jvd10sZG9jTGluZXNbcm93K2RlbHRhLmxpbmVzLmxlbmd0aC0xXSs9bGluZS5zdWJzdHJpbmcoc3RhcnRDb2x1bW4pfWJyZWFrO2Nhc2UicmVtb3ZlIjp2YXIgZW5kQ29sdW1uPWRlbHRhLmVuZC5jb2x1bW4sZW5kUm93PWRlbHRhLmVuZC5yb3c7cm93PT09ZW5kUm93P2RvY0xpbmVzW3Jvd109bGluZS5zdWJzdHJpbmcoMCxzdGFydENvbHVtbikrbGluZS5zdWJzdHJpbmcoZW5kQ29sdW1uKTpkb2NMaW5lcy5zcGxpY2Uocm93LGVuZFJvdy1yb3crMSxsaW5lLnN1YnN0cmluZygwLHN0YXJ0Q29sdW1uKStkb2NMaW5lc1tlbmRSb3ddLnN1YnN0cmluZyhlbmRDb2x1bW4pKX19fSksYWNlLmRlZmluZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYWNlcXVpcmUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO3ZhciBFdmVudEVtaXR0ZXI9e30sc3RvcFByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7dGhpcy5wcm9wYWdhdGlvblN0b3BwZWQ9ITB9LHByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwfTtFdmVudEVtaXR0ZXIuX2VtaXQ9RXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50PWZ1bmN0aW9uKGV2ZW50TmFtZSxlKXt0aGlzLl9ldmVudFJlZ2lzdHJ5fHwodGhpcy5fZXZlbnRSZWdpc3RyeT17fSksdGhpcy5fZGVmYXVsdEhhbmRsZXJzfHwodGhpcy5fZGVmYXVsdEhhbmRsZXJzPXt9KTt2YXIgbGlzdGVuZXJzPXRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXXx8W10sZGVmYXVsdEhhbmRsZXI9dGhpcy5fZGVmYXVsdEhhbmRsZXJzW2V2ZW50TmFtZV07aWYobGlzdGVuZXJzLmxlbmd0aHx8ZGVmYXVsdEhhbmRsZXIpeyJvYmplY3QiPT10eXBlb2YgZSYmZXx8KGU9e30pLGUudHlwZXx8KGUudHlwZT1ldmVudE5hbWUpLGUuc3RvcFByb3BhZ2F0aW9ufHwoZS5zdG9wUHJvcGFnYXRpb249c3RvcFByb3BhZ2F0aW9uKSxlLnByZXZlbnREZWZhdWx0fHwoZS5wcmV2ZW50RGVmYXVsdD1wcmV2ZW50RGVmYXVsdCksbGlzdGVuZXJzPWxpc3RlbmVycy5zbGljZSgpO2Zvcih2YXIgaT0wO2xpc3RlbmVycy5sZW5ndGg+aSYmKGxpc3RlbmVyc1tpXShlLHRoaXMpLCFlLnByb3BhZ2F0aW9uU3RvcHBlZCk7aSsrKTtyZXR1cm4gZGVmYXVsdEhhbmRsZXImJiFlLmRlZmF1bHRQcmV2ZW50ZWQ/ZGVmYXVsdEhhbmRsZXIoZSx0aGlzKTp2b2lkIDB9fSxFdmVudEVtaXR0ZXIuX3NpZ25hbD1mdW5jdGlvbihldmVudE5hbWUsZSl7dmFyIGxpc3RlbmVycz0odGhpcy5fZXZlbnRSZWdpc3RyeXx8e30pW2V2ZW50TmFtZV07aWYobGlzdGVuZXJzKXtsaXN0ZW5lcnM9bGlzdGVuZXJzLnNsaWNlKCk7Zm9yKHZhciBpPTA7bGlzdGVuZXJzLmxlbmd0aD5pO2krKylsaXN0ZW5lcnNbaV0oZSx0aGlzKX19LEV2ZW50RW1pdHRlci5vbmNlPWZ1bmN0aW9uKGV2ZW50TmFtZSxjYWxsYmFjayl7dmFyIF9zZWxmPXRoaXM7Y2FsbGJhY2smJnRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsZnVuY3Rpb24gbmV3Q2FsbGJhY2soKXtfc2VsZi5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSxuZXdDYWxsYmFjayksY2FsbGJhY2suYXBwbHkobnVsbCxhcmd1bWVudHMpfSl9LEV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlcj1mdW5jdGlvbihldmVudE5hbWUsY2FsbGJhY2spe3ZhciBoYW5kbGVycz10aGlzLl9kZWZhdWx0SGFuZGxlcnM7aWYoaGFuZGxlcnN8fChoYW5kbGVycz10aGlzLl9kZWZhdWx0SGFuZGxlcnM9e19kaXNhYmxlZF86e319KSxoYW5kbGVyc1tldmVudE5hbWVdKXt2YXIgb2xkPWhhbmRsZXJzW2V2ZW50TmFtZV0sZGlzYWJsZWQ9aGFuZGxlcnMuX2Rpc2FibGVkX1tldmVudE5hbWVdO2Rpc2FibGVkfHwoaGFuZGxlcnMuX2Rpc2FibGVkX1tldmVudE5hbWVdPWRpc2FibGVkPVtdKSxkaXNhYmxlZC5wdXNoKG9sZCk7dmFyIGk9ZGlzYWJsZWQuaW5kZXhPZihjYWxsYmFjayk7LTEhPWkmJmRpc2FibGVkLnNwbGljZShpLDEpfWhhbmRsZXJzW2V2ZW50TmFtZV09Y2FsbGJhY2t9LEV2ZW50RW1pdHRlci5yZW1vdmVEZWZhdWx0SGFuZGxlcj1mdW5jdGlvbihldmVudE5hbWUsY2FsbGJhY2spe3ZhciBoYW5kbGVycz10aGlzLl9kZWZhdWx0SGFuZGxlcnM7aWYoaGFuZGxlcnMpe3ZhciBkaXNhYmxlZD1oYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV07aWYoaGFuZGxlcnNbZXZlbnROYW1lXT09Y2FsbGJhY2spaGFuZGxlcnNbZXZlbnROYW1lXSxkaXNhYmxlZCYmdGhpcy5zZXREZWZhdWx0SGFuZGxlcihldmVudE5hbWUsZGlzYWJsZWQucG9wKCkpO2Vsc2UgaWYoZGlzYWJsZWQpe3ZhciBpPWRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spOy0xIT1pJiZkaXNhYmxlZC5zcGxpY2UoaSwxKX19fSxFdmVudEVtaXR0ZXIub249RXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZXZlbnROYW1lLGNhbGxiYWNrLGNhcHR1cmluZyl7dGhpcy5fZXZlbnRSZWdpc3RyeT10aGlzLl9ldmVudFJlZ2lzdHJ5fHx7fTt2YXIgbGlzdGVuZXJzPXRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXTtyZXR1cm4gbGlzdGVuZXJzfHwobGlzdGVuZXJzPXRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXT1bXSksLTE9PWxpc3RlbmVycy5pbmRleE9mKGNhbGxiYWNrKSYmbGlzdGVuZXJzW2NhcHR1cmluZz8idW5zaGlmdCI6InB1c2giXShjYWxsYmFjayksY2FsbGJhY2t9LEV2ZW50RW1pdHRlci5vZmY9RXZlbnRFbWl0dGVyLnJlbW92ZUxpc3RlbmVyPUV2ZW50RW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGV2ZW50TmFtZSxjYWxsYmFjayl7dGhpcy5fZXZlbnRSZWdpc3RyeT10aGlzLl9ldmVudFJlZ2lzdHJ5fHx7fTt2YXIgbGlzdGVuZXJzPXRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXTtpZihsaXN0ZW5lcnMpe3ZhciBpbmRleD1saXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFjayk7LTEhPT1pbmRleCYmbGlzdGVuZXJzLnNwbGljZShpbmRleCwxKX19LEV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oZXZlbnROYW1lKXt0aGlzLl9ldmVudFJlZ2lzdHJ5JiYodGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdPVtdKX0sZXhwb3J0cy5FdmVudEVtaXR0ZXI9RXZlbnRFbWl0dGVyfSksYWNlLmRlZmluZSgiYWNlL2FuY2hvciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oYWNlcXVpcmUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO3ZhciBvb3A9YWNlcXVpcmUoIi4vbGliL29vcCIpLEV2ZW50RW1pdHRlcj1hY2VxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixBbmNob3I9ZXhwb3J0cy5BbmNob3I9ZnVuY3Rpb24oZG9jLHJvdyxjb2x1bW4pe3RoaXMuJG9uQ2hhbmdlPXRoaXMub25DaGFuZ2UuYmluZCh0aGlzKSx0aGlzLmF0dGFjaChkb2MpLGNvbHVtbj09PXZvaWQgMD90aGlzLnNldFBvc2l0aW9uKHJvdy5yb3cscm93LmNvbHVtbik6dGhpcy5zZXRQb3NpdGlvbihyb3csY29sdW1uKX07KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gJHBvaW50c0luT3JkZXIocG9pbnQxLHBvaW50MixlcXVhbFBvaW50c0luT3JkZXIpe3ZhciBiQ29sSXNBZnRlcj1lcXVhbFBvaW50c0luT3JkZXI/cG9pbnQxLmNvbHVtbjw9cG9pbnQyLmNvbHVtbjpwb2ludDEuY29sdW1uPHBvaW50Mi5jb2x1bW47cmV0dXJuIHBvaW50MS5yb3c8cG9pbnQyLnJvd3x8cG9pbnQxLnJvdz09cG9pbnQyLnJvdyYmYkNvbElzQWZ0ZXJ9ZnVuY3Rpb24gJGdldFRyYW5zZm9ybWVkUG9pbnQoZGVsdGEscG9pbnQsbW92ZUlmRXF1YWwpe3ZhciBkZWx0YUlzSW5zZXJ0PSJpbnNlcnQiPT1kZWx0YS5hY3Rpb24sZGVsdGFSb3dTaGlmdD0oZGVsdGFJc0luc2VydD8xOi0xKSooZGVsdGEuZW5kLnJvdy1kZWx0YS5zdGFydC5yb3cpLGRlbHRhQ29sU2hpZnQ9KGRlbHRhSXNJbnNlcnQ/MTotMSkqKGRlbHRhLmVuZC5jb2x1bW4tZGVsdGEuc3RhcnQuY29sdW1uKSxkZWx0YVN0YXJ0PWRlbHRhLnN0YXJ0LGRlbHRhRW5kPWRlbHRhSXNJbnNlcnQ/ZGVsdGFTdGFydDpkZWx0YS5lbmQ7cmV0dXJuICRwb2ludHNJbk9yZGVyKHBvaW50LGRlbHRhU3RhcnQsbW92ZUlmRXF1YWwpP3tyb3c6cG9pbnQucm93LGNvbHVtbjpwb2ludC5jb2x1bW59OiRwb2ludHNJbk9yZGVyKGRlbHRhRW5kLHBvaW50LCFtb3ZlSWZFcXVhbCk/e3Jvdzpwb2ludC5yb3crZGVsdGFSb3dTaGlmdCxjb2x1bW46cG9pbnQuY29sdW1uKyhwb2ludC5yb3c9PWRlbHRhRW5kLnJvdz9kZWx0YUNvbFNoaWZ0OjApfTp7cm93OmRlbHRhU3RhcnQucm93LGNvbHVtbjpkZWx0YVN0YXJ0LmNvbHVtbn19b29wLmltcGxlbWVudCh0aGlzLEV2ZW50RW1pdHRlciksdGhpcy5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHRoaXMucm93LHRoaXMuY29sdW1uKX0sdGhpcy5nZXREb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY3VtZW50fSx0aGlzLiRpbnNlcnRSaWdodD0hMSx0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKGRlbHRhKXtpZighKGRlbHRhLnN0YXJ0LnJvdz09ZGVsdGEuZW5kLnJvdyYmZGVsdGEuc3RhcnQucm93IT10aGlzLnJvd3x8ZGVsdGEuc3RhcnQucm93PnRoaXMucm93KSl7dmFyIHBvaW50PSRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLHtyb3c6dGhpcy5yb3csY29sdW1uOnRoaXMuY29sdW1ufSx0aGlzLiRpbnNlcnRSaWdodCk7dGhpcy5zZXRQb3NpdGlvbihwb2ludC5yb3cscG9pbnQuY29sdW1uLCEwKX19LHRoaXMuc2V0UG9zaXRpb249ZnVuY3Rpb24ocm93LGNvbHVtbixub0NsaXApe3ZhciBwb3M7aWYocG9zPW5vQ2xpcD97cm93OnJvdyxjb2x1bW46Y29sdW1ufTp0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHJvdyxjb2x1bW4pLHRoaXMucm93IT1wb3Mucm93fHx0aGlzLmNvbHVtbiE9cG9zLmNvbHVtbil7dmFyIG9sZD17cm93OnRoaXMucm93LGNvbHVtbjp0aGlzLmNvbHVtbn07dGhpcy5yb3c9cG9zLnJvdyx0aGlzLmNvbHVtbj1wb3MuY29sdW1uLHRoaXMuX3NpZ25hbCgiY2hhbmdlIix7b2xkOm9sZCx2YWx1ZTpwb3N9KX19LHRoaXMuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHRoaXMuJG9uQ2hhbmdlKX0sdGhpcy5hdHRhY2g9ZnVuY3Rpb24oZG9jKXt0aGlzLmRvY3VtZW50PWRvY3x8dGhpcy5kb2N1bWVudCx0aGlzLmRvY3VtZW50Lm9uKCJjaGFuZ2UiLHRoaXMuJG9uQ2hhbmdlKX0sdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudD1mdW5jdGlvbihyb3csY29sdW1uKXt2YXIgcG9zPXt9O3JldHVybiByb3c+PXRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCk/KHBvcy5yb3c9TWF0aC5tYXgoMCx0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpLTEpLHBvcy5jb2x1bW49dGhpcy5kb2N1bWVudC5nZXRMaW5lKHBvcy5yb3cpLmxlbmd0aCk6MD5yb3c/KHBvcy5yb3c9MCxwb3MuY29sdW1uPTApOihwb3Mucm93PXJvdyxwb3MuY29sdW1uPU1hdGgubWluKHRoaXMuZG9jdW1lbnQuZ2V0TGluZShwb3Mucm93KS5sZW5ndGgsTWF0aC5tYXgoMCxjb2x1bW4pKSksMD5jb2x1bW4mJihwb3MuY29sdW1uPTApLHBvc319KS5jYWxsKEFuY2hvci5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL2RvY3VtZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvYXBwbHlfZGVsdGEiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLCJhY2UvcmFuZ2UiLCJhY2UvYW5jaG9yIl0sZnVuY3Rpb24oYWNlcXVpcmUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO3ZhciBvb3A9YWNlcXVpcmUoIi4vbGliL29vcCIpLGFwcGx5RGVsdGE9YWNlcXVpcmUoIi4vYXBwbHlfZGVsdGEiKS5hcHBseURlbHRhLEV2ZW50RW1pdHRlcj1hY2VxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixSYW5nZT1hY2VxdWlyZSgiLi9yYW5nZSIpLlJhbmdlLEFuY2hvcj1hY2VxdWlyZSgiLi9hbmNob3IiKS5BbmNob3IsRG9jdW1lbnQ9ZnVuY3Rpb24odGV4dE9yTGluZXMpe3RoaXMuJGxpbmVzPVsiIl0sMD09PXRleHRPckxpbmVzLmxlbmd0aD90aGlzLiRsaW5lcz1bIiJdOkFycmF5LmlzQXJyYXkodGV4dE9yTGluZXMpP3RoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3JvdzowLGNvbHVtbjowfSx0ZXh0T3JMaW5lcyk6dGhpcy5pbnNlcnQoe3JvdzowLGNvbHVtbjowfSx0ZXh0T3JMaW5lcyl9OyhmdW5jdGlvbigpe29vcC5pbXBsZW1lbnQodGhpcyxFdmVudEVtaXR0ZXIpLHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24odGV4dCl7dmFyIGxlbj10aGlzLmdldExlbmd0aCgpLTE7dGhpcy5yZW1vdmUobmV3IFJhbmdlKDAsMCxsZW4sdGhpcy5nZXRMaW5lKGxlbikubGVuZ3RoKSksdGhpcy5pbnNlcnQoe3JvdzowLGNvbHVtbjowfSx0ZXh0KX0sdGhpcy5nZXRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEFsbExpbmVzKCkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSl9LHRoaXMuY3JlYXRlQW5jaG9yPWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3JldHVybiBuZXcgQW5jaG9yKHRoaXMscm93LGNvbHVtbil9LHRoaXMuJHNwbGl0PTA9PT0iYWFhIi5zcGxpdCgvYS8pLmxlbmd0aD9mdW5jdGlvbih0ZXh0KXtyZXR1cm4gdGV4dC5yZXBsYWNlKC9cXHJcXG58XFxyL2csIlxcbiIpLnNwbGl0KCJcXG4iKX06ZnVuY3Rpb24odGV4dCl7cmV0dXJuIHRleHQuc3BsaXQoL1xcclxcbnxcXHJ8XFxuLyl9LHRoaXMuJGRldGVjdE5ld0xpbmU9ZnVuY3Rpb24odGV4dCl7dmFyIG1hdGNoPXRleHQubWF0Y2goL14uKj8oXFxyXFxufFxccnxcXG4pL20pO3RoaXMuJGF1dG9OZXdMaW5lPW1hdGNoP21hdGNoWzFdOiJcXG4iLHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKX0sdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuJG5ld0xpbmVNb2RlKXtjYXNlIndpbmRvd3MiOnJldHVybiJcXHJcXG4iO2Nhc2UidW5peCI6cmV0dXJuIlxcbiI7ZGVmYXVsdDpyZXR1cm4gdGhpcy4kYXV0b05ld0xpbmV8fCJcXG4ifX0sdGhpcy4kYXV0b05ld0xpbmU9IiIsdGhpcy4kbmV3TGluZU1vZGU9ImF1dG8iLHRoaXMuc2V0TmV3TGluZU1vZGU9ZnVuY3Rpb24obmV3TGluZU1vZGUpe3RoaXMuJG5ld0xpbmVNb2RlIT09bmV3TGluZU1vZGUmJih0aGlzLiRuZXdMaW5lTW9kZT1uZXdMaW5lTW9kZSx0aGlzLl9zaWduYWwoImNoYW5nZU5ld0xpbmVNb2RlIikpfSx0aGlzLmdldE5ld0xpbmVNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlfSx0aGlzLmlzTmV3TGluZT1mdW5jdGlvbih0ZXh0KXtyZXR1cm4iXFxyXFxuIj09dGV4dHx8IlxcciI9PXRleHR8fCJcXG4iPT10ZXh0fSx0aGlzLmdldExpbmU9ZnVuY3Rpb24ocm93KXtyZXR1cm4gdGhpcy4kbGluZXNbcm93XXx8IiJ9LHRoaXMuZ2V0TGluZXM9ZnVuY3Rpb24oZmlyc3RSb3csbGFzdFJvdyl7cmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LGxhc3RSb3crMSl9LHRoaXMuZ2V0QWxsTGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMaW5lcygwLHRoaXMuZ2V0TGVuZ3RoKCkpfSx0aGlzLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRsaW5lcy5sZW5ndGh9LHRoaXMuZ2V0VGV4dFJhbmdlPWZ1bmN0aW9uKHJhbmdlKXtyZXR1cm4gdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHJhbmdlKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKX0sdGhpcy5nZXRMaW5lc0ZvclJhbmdlPWZ1bmN0aW9uKHJhbmdlKXt2YXIgbGluZXM7aWYocmFuZ2Uuc3RhcnQucm93PT09cmFuZ2UuZW5kLnJvdylsaW5lcz1bdGhpcy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdykuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbixyYW5nZS5lbmQuY29sdW1uKV07ZWxzZXtsaW5lcz10aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdyxyYW5nZS5lbmQucm93KSxsaW5lc1swXT0obGluZXNbMF18fCIiKS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uKTt2YXIgbD1saW5lcy5sZW5ndGgtMTtyYW5nZS5lbmQucm93LXJhbmdlLnN0YXJ0LnJvdz09bCYmKGxpbmVzW2xdPWxpbmVzW2xdLnN1YnN0cmluZygwLHJhbmdlLmVuZC5jb2x1bW4pKX1yZXR1cm4gbGluZXN9LHRoaXMuaW5zZXJ0TGluZXM9ZnVuY3Rpb24ocm93LGxpbmVzKXtyZXR1cm4gY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TGluZXMgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBpbnNlcnRGdWxsTGluZXMgbWV0aG9kIGluc3RlYWQuIiksdGhpcy5pbnNlcnRGdWxsTGluZXMocm93LGxpbmVzKX0sdGhpcy5yZW1vdmVMaW5lcz1mdW5jdGlvbihmaXJzdFJvdyxsYXN0Um93KXtyZXR1cm4gY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQucmVtb3ZlTGluZXMgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSByZW1vdmVGdWxsTGluZXMgbWV0aG9kIGluc3RlYWQuIiksdGhpcy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csbGFzdFJvdyl9LHRoaXMuaW5zZXJ0TmV3TGluZT1mdW5jdGlvbihwb3NpdGlvbil7cmV0dXJuIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydE5ld0xpbmUgaXMgZGVwcmVjYXRlZC4gVXNlIGluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLCBbXCdcJywgXCdcJ10pIGluc3RlYWQuIiksdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyhwb3NpdGlvbixbIiIsIiJdKX0sdGhpcy5pbnNlcnQ9ZnVuY3Rpb24ocG9zaXRpb24sdGV4dCl7cmV0dXJuIDE+PXRoaXMuZ2V0TGVuZ3RoKCkmJnRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCksdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyhwb3NpdGlvbix0aGlzLiRzcGxpdCh0ZXh0KSl9LHRoaXMuaW5zZXJ0SW5MaW5lPWZ1bmN0aW9uKHBvc2l0aW9uLHRleHQpe3ZhciBzdGFydD10aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LHBvc2l0aW9uLmNvbHVtbiksZW5kPXRoaXMucG9zKHBvc2l0aW9uLnJvdyxwb3NpdGlvbi5jb2x1bW4rdGV4dC5sZW5ndGgpO3JldHVybiB0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0OnN0YXJ0LGVuZDplbmQsYWN0aW9uOiJpbnNlcnQiLGxpbmVzOlt0ZXh0XX0sITApLHRoaXMuY2xvbmVQb3MoZW5kKX0sdGhpcy5jbGlwcGVkUG9zPWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3ZhciBsZW5ndGg9dGhpcy5nZXRMZW5ndGgoKTt2b2lkIDA9PT1yb3c/cm93PWxlbmd0aDowPnJvdz9yb3c9MDpyb3c+PWxlbmd0aCYmKHJvdz1sZW5ndGgtMSxjb2x1bW49dm9pZCAwKTt2YXIgbGluZT10aGlzLmdldExpbmUocm93KTtyZXR1cm4gdm9pZCAwPT1jb2x1bW4mJihjb2x1bW49bGluZS5sZW5ndGgpLGNvbHVtbj1NYXRoLm1pbihNYXRoLm1heChjb2x1bW4sMCksbGluZS5sZW5ndGgpLHtyb3c6cm93LGNvbHVtbjpjb2x1bW59fSx0aGlzLmNsb25lUG9zPWZ1bmN0aW9uKHBvcyl7cmV0dXJue3Jvdzpwb3Mucm93LGNvbHVtbjpwb3MuY29sdW1ufX0sdGhpcy5wb3M9ZnVuY3Rpb24ocm93LGNvbHVtbil7cmV0dXJue3Jvdzpyb3csY29sdW1uOmNvbHVtbn19LHRoaXMuJGNsaXBQb3NpdGlvbj1mdW5jdGlvbihwb3NpdGlvbil7dmFyIGxlbmd0aD10aGlzLmdldExlbmd0aCgpO3JldHVybiBwb3NpdGlvbi5yb3c+PWxlbmd0aD8ocG9zaXRpb24ucm93PU1hdGgubWF4KDAsbGVuZ3RoLTEpLHBvc2l0aW9uLmNvbHVtbj10aGlzLmdldExpbmUobGVuZ3RoLTEpLmxlbmd0aCk6KHBvc2l0aW9uLnJvdz1NYXRoLm1heCgwLHBvc2l0aW9uLnJvdykscG9zaXRpb24uY29sdW1uPU1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLmNvbHVtbiwwKSx0aGlzLmdldExpbmUocG9zaXRpb24ucm93KS5sZW5ndGgpKSxwb3NpdGlvbn0sdGhpcy5pbnNlcnRGdWxsTGluZXM9ZnVuY3Rpb24ocm93LGxpbmVzKXtyb3c9TWF0aC5taW4oTWF0aC5tYXgocm93LDApLHRoaXMuZ2V0TGVuZ3RoKCkpO3ZhciBjb2x1bW49MDt0aGlzLmdldExlbmd0aCgpPnJvdz8obGluZXM9bGluZXMuY29uY2F0KFsiIl0pLGNvbHVtbj0wKToobGluZXM9WyIiXS5jb25jYXQobGluZXMpLHJvdy0tLGNvbHVtbj10aGlzLiRsaW5lc1tyb3ddLmxlbmd0aCksdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyh7cm93OnJvdyxjb2x1bW46Y29sdW1ufSxsaW5lcyl9LHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXM9ZnVuY3Rpb24ocG9zaXRpb24sbGluZXMpe3ZhciBzdGFydD10aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LHBvc2l0aW9uLmNvbHVtbiksZW5kPXtyb3c6c3RhcnQucm93K2xpbmVzLmxlbmd0aC0xLGNvbHVtbjooMT09bGluZXMubGVuZ3RoP3N0YXJ0LmNvbHVtbjowKStsaW5lc1tsaW5lcy5sZW5ndGgtMV0ubGVuZ3RofTtyZXR1cm4gdGhpcy5hcHBseURlbHRhKHtzdGFydDpzdGFydCxlbmQ6ZW5kLGFjdGlvbjoiaW5zZXJ0IixsaW5lczpsaW5lc30pLHRoaXMuY2xvbmVQb3MoZW5kKX0sdGhpcy5yZW1vdmU9ZnVuY3Rpb24ocmFuZ2Upe3ZhciBzdGFydD10aGlzLmNsaXBwZWRQb3MocmFuZ2Uuc3RhcnQucm93LHJhbmdlLnN0YXJ0LmNvbHVtbiksZW5kPXRoaXMuY2xpcHBlZFBvcyhyYW5nZS5lbmQucm93LHJhbmdlLmVuZC5jb2x1bW4pO3JldHVybiB0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0OnN0YXJ0LGVuZDplbmQsYWN0aW9uOiJyZW1vdmUiLGxpbmVzOnRoaXMuZ2V0TGluZXNGb3JSYW5nZSh7c3RhcnQ6c3RhcnQsZW5kOmVuZH0pfSksdGhpcy5jbG9uZVBvcyhzdGFydCl9LHRoaXMucmVtb3ZlSW5MaW5lPWZ1bmN0aW9uKHJvdyxzdGFydENvbHVtbixlbmRDb2x1bW4pe3ZhciBzdGFydD10aGlzLmNsaXBwZWRQb3Mocm93LHN0YXJ0Q29sdW1uKSxlbmQ9dGhpcy5jbGlwcGVkUG9zKHJvdyxlbmRDb2x1bW4pO3JldHVybiB0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0OnN0YXJ0LGVuZDplbmQsYWN0aW9uOiJyZW1vdmUiLGxpbmVzOnRoaXMuZ2V0TGluZXNGb3JSYW5nZSh7c3RhcnQ6c3RhcnQsZW5kOmVuZH0pfSwhMCksdGhpcy5jbG9uZVBvcyhzdGFydCl9LHRoaXMucmVtb3ZlRnVsbExpbmVzPWZ1bmN0aW9uKGZpcnN0Um93LGxhc3RSb3cpe2ZpcnN0Um93PU1hdGgubWluKE1hdGgubWF4KDAsZmlyc3RSb3cpLHRoaXMuZ2V0TGVuZ3RoKCktMSksbGFzdFJvdz1NYXRoLm1pbihNYXRoLm1heCgwLGxhc3RSb3cpLHRoaXMuZ2V0TGVuZ3RoKCktMSk7dmFyIGRlbGV0ZUZpcnN0TmV3TGluZT1sYXN0Um93PT10aGlzLmdldExlbmd0aCgpLTEmJmZpcnN0Um93PjAsZGVsZXRlTGFzdE5ld0xpbmU9dGhpcy5nZXRMZW5ndGgoKS0xPmxhc3RSb3csc3RhcnRSb3c9ZGVsZXRlRmlyc3ROZXdMaW5lP2ZpcnN0Um93LTE6Zmlyc3RSb3csc3RhcnRDb2w9ZGVsZXRlRmlyc3ROZXdMaW5lP3RoaXMuZ2V0TGluZShzdGFydFJvdykubGVuZ3RoOjAsZW5kUm93PWRlbGV0ZUxhc3ROZXdMaW5lP2xhc3RSb3crMTpsYXN0Um93LGVuZENvbD1kZWxldGVMYXN0TmV3TGluZT8wOnRoaXMuZ2V0TGluZShlbmRSb3cpLmxlbmd0aCxyYW5nZT1uZXcgUmFuZ2Uoc3RhcnRSb3csc3RhcnRDb2wsZW5kUm93LGVuZENvbCksZGVsZXRlZExpbmVzPXRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LGxhc3RSb3crMSk7cmV0dXJuIHRoaXMuYXBwbHlEZWx0YSh7c3RhcnQ6cmFuZ2Uuc3RhcnQsZW5kOnJhbmdlLmVuZCxhY3Rpb246InJlbW92ZSIsbGluZXM6dGhpcy5nZXRMaW5lc0ZvclJhbmdlKHJhbmdlKX0pLGRlbGV0ZWRMaW5lc30sdGhpcy5yZW1vdmVOZXdMaW5lPWZ1bmN0aW9uKHJvdyl7dGhpcy5nZXRMZW5ndGgoKS0xPnJvdyYmcm93Pj0wJiZ0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0OnRoaXMucG9zKHJvdyx0aGlzLmdldExpbmUocm93KS5sZW5ndGgpLGVuZDp0aGlzLnBvcyhyb3crMSwwKSxhY3Rpb246InJlbW92ZSIsbGluZXM6WyIiLCIiXX0pfSx0aGlzLnJlcGxhY2U9ZnVuY3Rpb24ocmFuZ2UsdGV4dCl7aWYocmFuZ2UgaW5zdGFuY2VvZiBSYW5nZXx8KHJhbmdlPVJhbmdlLmZyb21Qb2ludHMocmFuZ2Uuc3RhcnQscmFuZ2UuZW5kKSksMD09PXRleHQubGVuZ3RoJiZyYW5nZS5pc0VtcHR5KCkpcmV0dXJuIHJhbmdlLnN0YXJ0O2lmKHRleHQ9PXRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSlyZXR1cm4gcmFuZ2UuZW5kO3RoaXMucmVtb3ZlKHJhbmdlKTt2YXIgZW5kO3JldHVybiBlbmQ9dGV4dD90aGlzLmluc2VydChyYW5nZS5zdGFydCx0ZXh0KTpyYW5nZS5zdGFydH0sdGhpcy5hcHBseURlbHRhcz1mdW5jdGlvbihkZWx0YXMpe2Zvcih2YXIgaT0wO2RlbHRhcy5sZW5ndGg+aTtpKyspdGhpcy5hcHBseURlbHRhKGRlbHRhc1tpXSl9LHRoaXMucmV2ZXJ0RGVsdGFzPWZ1bmN0aW9uKGRlbHRhcyl7Zm9yKHZhciBpPWRlbHRhcy5sZW5ndGgtMTtpPj0wO2ktLSl0aGlzLnJldmVydERlbHRhKGRlbHRhc1tpXSl9LHRoaXMuYXBwbHlEZWx0YT1mdW5jdGlvbihkZWx0YSxkb05vdFZhbGlkYXRlKXt2YXIgaXNJbnNlcnQ9Imluc2VydCI9PWRlbHRhLmFjdGlvbjsoaXNJbnNlcnQ/MT49ZGVsdGEubGluZXMubGVuZ3RoJiYhZGVsdGEubGluZXNbMF06IVJhbmdlLmNvbXBhcmVQb2ludHMoZGVsdGEuc3RhcnQsZGVsdGEuZW5kKSl8fChpc0luc2VydCYmZGVsdGEubGluZXMubGVuZ3RoPjJlNCYmdGhpcy4kc3BsaXRBbmRhcHBseUxhcmdlRGVsdGEoZGVsdGEsMmU0KSxhcHBseURlbHRhKHRoaXMuJGxpbmVzLGRlbHRhLGRvTm90VmFsaWRhdGUpLHRoaXMuX3NpZ25hbCgiY2hhbmdlIixkZWx0YSkpfSx0aGlzLiRzcGxpdEFuZGFwcGx5TGFyZ2VEZWx0YT1mdW5jdGlvbihkZWx0YSxNQVgpe2Zvcih2YXIgbGluZXM9ZGVsdGEubGluZXMsbD1saW5lcy5sZW5ndGgscm93PWRlbHRhLnN0YXJ0LnJvdyxjb2x1bW49ZGVsdGEuc3RhcnQuY29sdW1uLGZyb209MCx0bz0wOzspe2Zyb209dG8sdG8rPU1BWC0xO3ZhciBjaHVuaz1saW5lcy5zbGljZShmcm9tLHRvKTtpZih0bz5sKXtkZWx0YS5saW5lcz1jaHVuayxkZWx0YS5zdGFydC5yb3c9cm93K2Zyb20sZGVsdGEuc3RhcnQuY29sdW1uPWNvbHVtbjticmVha31jaHVuay5wdXNoKCIiKSx0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0OnRoaXMucG9zKHJvdytmcm9tLGNvbHVtbiksZW5kOnRoaXMucG9zKHJvdyt0byxjb2x1bW49MCksYWN0aW9uOmRlbHRhLmFjdGlvbixsaW5lczpjaHVua30sITApfX0sdGhpcy5yZXZlcnREZWx0YT1mdW5jdGlvbihkZWx0YSl7dGhpcy5hcHBseURlbHRhKHtzdGFydDp0aGlzLmNsb25lUG9zKGRlbHRhLnN0YXJ0KSxlbmQ6dGhpcy5jbG9uZVBvcyhkZWx0YS5lbmQpLGFjdGlvbjoiaW5zZXJ0Ij09ZGVsdGEuYWN0aW9uPyJyZW1vdmUiOiJpbnNlcnQiLGxpbmVzOmRlbHRhLmxpbmVzLnNsaWNlKCl9KX0sdGhpcy5pbmRleFRvUG9zaXRpb249ZnVuY3Rpb24oaW5kZXgsc3RhcnRSb3cpe2Zvcih2YXIgbGluZXM9dGhpcy4kbGluZXN8fHRoaXMuZ2V0QWxsTGluZXMoKSxuZXdsaW5lTGVuZ3RoPXRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpLmxlbmd0aCxpPXN0YXJ0Um93fHwwLGw9bGluZXMubGVuZ3RoO2w+aTtpKyspaWYoaW5kZXgtPWxpbmVzW2ldLmxlbmd0aCtuZXdsaW5lTGVuZ3RoLDA+aW5kZXgpcmV0dXJue3JvdzppLGNvbHVtbjppbmRleCtsaW5lc1tpXS5sZW5ndGgrbmV3bGluZUxlbmd0aH07cmV0dXJue3JvdzpsLTEsY29sdW1uOmxpbmVzW2wtMV0ubGVuZ3RofX0sdGhpcy5wb3NpdGlvblRvSW5kZXg9ZnVuY3Rpb24ocG9zLHN0YXJ0Um93KXtmb3IodmFyIGxpbmVzPXRoaXMuJGxpbmVzfHx0aGlzLmdldEFsbExpbmVzKCksbmV3bGluZUxlbmd0aD10aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGgsaW5kZXg9MCxyb3c9TWF0aC5taW4ocG9zLnJvdyxsaW5lcy5sZW5ndGgpLGk9c3RhcnRSb3d8fDA7cm93Pmk7KytpKWluZGV4Kz1saW5lc1tpXS5sZW5ndGgrbmV3bGluZUxlbmd0aDtyZXR1cm4gaW5kZXgrcG9zLmNvbHVtbn19KS5jYWxsKERvY3VtZW50LnByb3RvdHlwZSksZXhwb3J0cy5Eb2N1bWVudD1Eb2N1bWVudH0pLGFjZS5kZWZpbmUoImFjZS93b3JrZXIvbWlycm9yIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIiwiYWNlL2RvY3VtZW50IiwiYWNlL2xpYi9sYW5nIl0sZnVuY3Rpb24oYWNlcXVpcmUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO2FjZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlO3ZhciBEb2N1bWVudD1hY2VxdWlyZSgiLi4vZG9jdW1lbnQiKS5Eb2N1bWVudCxsYW5nPWFjZXF1aXJlKCIuLi9saWIvbGFuZyIpLE1pcnJvcj1leHBvcnRzLk1pcnJvcj1mdW5jdGlvbihzZW5kZXIpe3RoaXMuc2VuZGVyPXNlbmRlcjt2YXIgZG9jPXRoaXMuZG9jPW5ldyBEb2N1bWVudCgiIiksZGVmZXJyZWRVcGRhdGU9dGhpcy5kZWZlcnJlZFVwZGF0ZT1sYW5nLmRlbGF5ZWRDYWxsKHRoaXMub25VcGRhdGUuYmluZCh0aGlzKSksX3NlbGY9dGhpcztzZW5kZXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7dmFyIGRhdGE9ZS5kYXRhO2lmKGRhdGFbMF0uc3RhcnQpZG9jLmFwcGx5RGVsdGFzKGRhdGEpO2Vsc2UgZm9yKHZhciBpPTA7ZGF0YS5sZW5ndGg+aTtpKz0yKXtpZihBcnJheS5pc0FycmF5KGRhdGFbaSsxXSkpdmFyIGQ9e2FjdGlvbjoiaW5zZXJ0IixzdGFydDpkYXRhW2ldLGxpbmVzOmRhdGFbaSsxXX07ZWxzZSB2YXIgZD17YWN0aW9uOiJyZW1vdmUiLHN0YXJ0OmRhdGFbaV0sZW5kOmRhdGFbaSsxXX07ZG9jLmFwcGx5RGVsdGEoZCwhMCl9cmV0dXJuIF9zZWxmLiR0aW1lb3V0P2RlZmVycmVkVXBkYXRlLnNjaGVkdWxlKF9zZWxmLiR0aW1lb3V0KTooX3NlbGYub25VcGRhdGUoKSx2b2lkIDApfSl9OyhmdW5jdGlvbigpe3RoaXMuJHRpbWVvdXQ9NTAwLHRoaXMuc2V0VGltZW91dD1mdW5jdGlvbih0aW1lb3V0KXt0aGlzLiR0aW1lb3V0PXRpbWVvdXR9LHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24odmFsdWUpe3RoaXMuZG9jLnNldFZhbHVlKHZhbHVlKSx0aGlzLmRlZmVycmVkVXBkYXRlLnNjaGVkdWxlKHRoaXMuJHRpbWVvdXQpfSx0aGlzLmdldFZhbHVlPWZ1bmN0aW9uKGNhbGxiYWNrSWQpe3RoaXMuc2VuZGVyLmNhbGxiYWNrKHRoaXMuZG9jLmdldFZhbHVlKCksY2FsbGJhY2tJZCl9LHRoaXMub25VcGRhdGU9ZnVuY3Rpb24oKXt9LHRoaXMuaXNQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmZXJyZWRVcGRhdGUuaXNQZW5kaW5nKCl9fSkuY2FsbChNaXJyb3IucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2h0bWwvc2F4cGFyc2VyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYWNlcXVpcmUsZXhwb3J0cyxtb2R1bGUpe21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiBhY2VxdWlyZSYmYWNlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt0aHJvdyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlIFwnIitvKyJcJyIpfXZhciBmPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChmLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGYsZi5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9Zm9yKHZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiBhY2VxdWlyZSYmYWNlcXVpcmUsbz0wO3IubGVuZ3RoPm87bysrKXMocltvXSk7cmV0dXJuIHN9KHsxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtmdW5jdGlvbiBpc1Njb3BlTWFya2VyKG5vZGUpe3JldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj09PW5vZGUubmFtZXNwYWNlVVJJPyJhcHBsZXQiPT09bm9kZS5sb2NhbE5hbWV8fCJjYXB0aW9uIj09PW5vZGUubG9jYWxOYW1lfHwibWFycXVlZSI9PT1ub2RlLmxvY2FsTmFtZXx8Im9iamVjdCI9PT1ub2RlLmxvY2FsTmFtZXx8InRhYmxlIj09PW5vZGUubG9jYWxOYW1lfHwidGQiPT09bm9kZS5sb2NhbE5hbWV8fCJ0aCI9PT1ub2RlLmxvY2FsTmFtZToiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI9PT1ub2RlLm5hbWVzcGFjZVVSST8ibWkiPT09bm9kZS5sb2NhbE5hbWV8fCJtbyI9PT1ub2RlLmxvY2FsTmFtZXx8Im1uIj09PW5vZGUubG9jYWxOYW1lfHwibXMiPT09bm9kZS5sb2NhbE5hbWV8fCJtdGV4dCI9PT1ub2RlLmxvY2FsTmFtZXx8ImFubm90YXRpb24teG1sIj09PW5vZGUubG9jYWxOYW1lOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI9PT1ub2RlLm5hbWVzcGFjZVVSST8iZm9yZWlnbk9iamVjdCI9PT1ub2RlLmxvY2FsTmFtZXx8ImRlc2MiPT09bm9kZS5sb2NhbE5hbWV8fCJ0aXRsZSI9PT1ub2RlLmxvY2FsTmFtZTp2b2lkIDB9ZnVuY3Rpb24gaXNMaXN0SXRlbVNjb3BlTWFya2VyKG5vZGUpe3JldHVybiBpc1Njb3BlTWFya2VyKG5vZGUpfHwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1ub2RlLm5hbWVzcGFjZVVSSSYmIm9sIj09PW5vZGUubG9jYWxOYW1lfHwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1ub2RlLm5hbWVzcGFjZVVSSSYmInVsIj09PW5vZGUubG9jYWxOYW1lfWZ1bmN0aW9uIGlzVGFibGVTY29wZU1hcmtlcihub2RlKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1ub2RlLm5hbWVzcGFjZVVSSSYmInRhYmxlIj09PW5vZGUubG9jYWxOYW1lfHwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1ub2RlLm5hbWVzcGFjZVVSSSYmImh0bWwiPT09bm9kZS5sb2NhbE5hbWV9ZnVuY3Rpb24gaXNUYWJsZUJvZHlTY29wZU1hcmtlcihub2RlKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1ub2RlLm5hbWVzcGFjZVVSSSYmInRib2R5Ij09PW5vZGUubG9jYWxOYW1lfHwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1ub2RlLm5hbWVzcGFjZVVSSSYmInRmb290Ij09PW5vZGUubG9jYWxOYW1lfHwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1ub2RlLm5hbWVzcGFjZVVSSSYmInRoZWFkIj09PW5vZGUubG9jYWxOYW1lfHwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1ub2RlLm5hbWVzcGFjZVVSSSYmImh0bWwiPT09bm9kZS5sb2NhbE5hbWV9ZnVuY3Rpb24gaXNUYWJsZVJvd1Njb3BlTWFya2VyKG5vZGUpe3JldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj09PW5vZGUubmFtZXNwYWNlVVJJJiYidHIiPT09bm9kZS5sb2NhbE5hbWV8fCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj09PW5vZGUubmFtZXNwYWNlVVJJJiYiaHRtbCI9PT1ub2RlLmxvY2FsTmFtZX1mdW5jdGlvbiBpc0J1dHRvblNjb3BlTWFya2VyKG5vZGUpe3JldHVybiBpc1Njb3BlTWFya2VyKG5vZGUpfHwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1ub2RlLm5hbWVzcGFjZVVSSSYmImJ1dHRvbiI9PT1ub2RlLmxvY2FsTmFtZX1mdW5jdGlvbiBpc1NlbGVjdFNjb3BlTWFya2VyKG5vZGUpe3JldHVybiEoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPT09bm9kZS5uYW1lc3BhY2VVUkkmJiJvcHRncm91cCI9PT1ub2RlLmxvY2FsTmFtZXx8Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPT09bm9kZS5uYW1lc3BhY2VVUkkmJiJvcHRpb24iPT09bm9kZS5sb2NhbE5hbWUpfWZ1bmN0aW9uIEVsZW1lbnRTdGFjaygpe3RoaXMuZWxlbWVudHM9W10sdGhpcy5yb290Tm9kZT1udWxsLHRoaXMuaGVhZEVsZW1lbnQ9bnVsbCx0aGlzLmJvZHlFbGVtZW50PW51bGx9RWxlbWVudFN0YWNrLnByb3RvdHlwZS5faW5TY29wZT1mdW5jdGlvbihsb2NhbE5hbWUsaXNNYXJrZXIpe2Zvcih2YXIgaT10aGlzLmVsZW1lbnRzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgbm9kZT10aGlzLmVsZW1lbnRzW2ldO2lmKG5vZGUubG9jYWxOYW1lPT09bG9jYWxOYW1lKXJldHVybiEwO2lmKGlzTWFya2VyKG5vZGUpKXJldHVybiExfX0sRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGl0ZW0pe3RoaXMuZWxlbWVudHMucHVzaChpdGVtKX0sRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wdXNoSHRtbEVsZW1lbnQ9ZnVuY3Rpb24oaXRlbSl7dGhpcy5yb290Tm9kZT1pdGVtLm5vZGUsdGhpcy5wdXNoKGl0ZW0pfSxFbGVtZW50U3RhY2sucHJvdG90eXBlLnB1c2hIZWFkRWxlbWVudD1mdW5jdGlvbihpdGVtKXt0aGlzLmhlYWRFbGVtZW50PWl0ZW0ubm9kZSx0aGlzLnB1c2goaXRlbSl9LEVsZW1lbnRTdGFjay5wcm90b3R5cGUucHVzaEJvZHlFbGVtZW50PWZ1bmN0aW9uKGl0ZW0pe3RoaXMuYm9keUVsZW1lbnQ9aXRlbS5ub2RlLHRoaXMucHVzaChpdGVtKX0sRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5wb3AoKX0sRWxlbWVudFN0YWNrLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oaXRlbSl7dGhpcy5lbGVtZW50cy5zcGxpY2UodGhpcy5lbGVtZW50cy5pbmRleE9mKGl0ZW0pLDEpfSxFbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsUG9wcGVkPWZ1bmN0aW9uKGxvY2FsTmFtZSl7dmFyIGVsZW1lbnQ7ZG8gZWxlbWVudD10aGlzLnBvcCgpO3doaWxlKGVsZW1lbnQubG9jYWxOYW1lIT1sb2NhbE5hbWUpfSxFbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsVGFibGVTY29wZU1hcmtlcj1mdW5jdGlvbigpe2Zvcig7IWlzVGFibGVTY29wZU1hcmtlcih0aGlzLnRvcCk7KXRoaXMucG9wKCl9LEVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wVW50aWxUYWJsZUJvZHlTY29wZU1hcmtlcj1mdW5jdGlvbigpe2Zvcig7IWlzVGFibGVCb2R5U2NvcGVNYXJrZXIodGhpcy50b3ApOyl0aGlzLnBvcCgpfSxFbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsVGFibGVSb3dTY29wZU1hcmtlcj1mdW5jdGlvbigpe2Zvcig7IWlzVGFibGVSb3dTY29wZU1hcmtlcih0aGlzLnRvcCk7KXRoaXMucG9wKCl9LEVsZW1lbnRTdGFjay5wcm90b3R5cGUuaXRlbT1mdW5jdGlvbihpbmRleCl7cmV0dXJuIHRoaXMuZWxlbWVudHNbaW5kZXhdfSxFbGVtZW50U3RhY2sucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGVsZW1lbnQpe3JldHVybi0xIT09dGhpcy5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpfSxFbGVtZW50U3RhY2sucHJvdG90eXBlLmluU2NvcGU9ZnVuY3Rpb24obG9jYWxOYW1lKXtyZXR1cm4gdGhpcy5faW5TY29wZShsb2NhbE5hbWUsaXNTY29wZU1hcmtlcil9LEVsZW1lbnRTdGFjay5wcm90b3R5cGUuaW5MaXN0SXRlbVNjb3BlPWZ1bmN0aW9uKGxvY2FsTmFtZSl7cmV0dXJuIHRoaXMuX2luU2NvcGUobG9jYWxOYW1lLGlzTGlzdEl0ZW1TY29wZU1hcmtlcil9LEVsZW1lbnRTdGFjay5wcm90b3R5cGUuaW5UYWJsZVNjb3BlPWZ1bmN0aW9uKGxvY2FsTmFtZSl7cmV0dXJuIHRoaXMuX2luU2NvcGUobG9jYWxOYW1lLGlzVGFibGVTY29wZU1hcmtlcil9LEVsZW1lbnRTdGFjay5wcm90b3R5cGUuaW5CdXR0b25TY29wZT1mdW5jdGlvbihsb2NhbE5hbWUpe3JldHVybiB0aGlzLl9pblNjb3BlKGxvY2FsTmFtZSxpc0J1dHRvblNjb3BlTWFya2VyKX0sRWxlbWVudFN0YWNrLnByb3RvdHlwZS5pblNlbGVjdFNjb3BlPWZ1bmN0aW9uKGxvY2FsTmFtZSl7cmV0dXJuIHRoaXMuX2luU2NvcGUobG9jYWxOYW1lLGlzU2VsZWN0U2NvcGVNYXJrZXIpfSxFbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc051bWJlcmVkSGVhZGVyRWxlbWVudEluU2NvcGU9ZnVuY3Rpb24oKXtmb3IodmFyIGk9dGhpcy5lbGVtZW50cy5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIG5vZGU9dGhpcy5lbGVtZW50c1tpXTtpZihub2RlLmlzTnVtYmVyZWRIZWFkZXIoKSlyZXR1cm4hMDtpZihpc1Njb3BlTWFya2VyKG5vZGUpKXJldHVybiExfX0sRWxlbWVudFN0YWNrLnByb3RvdHlwZS5mdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQ9ZnVuY3Rpb24oZWxlbWVudCl7Zm9yKHZhciBmdXJ0aGVzdEJsb2NrPW51bGwsaT10aGlzLmVsZW1lbnRzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgbm9kZT10aGlzLmVsZW1lbnRzW2ldO1xuaWYobm9kZS5ub2RlPT09ZWxlbWVudClicmVhaztub2RlLmlzU3BlY2lhbCgpJiYoZnVydGhlc3RCbG9jaz1ub2RlKX1yZXR1cm4gZnVydGhlc3RCbG9ja30sRWxlbWVudFN0YWNrLnByb3RvdHlwZS5maW5kSW5kZXg9ZnVuY3Rpb24obG9jYWxOYW1lKXtmb3IodmFyIGk9dGhpcy5lbGVtZW50cy5sZW5ndGgtMTtpPj0wO2ktLSlpZih0aGlzLmVsZW1lbnRzW2ldLmxvY2FsTmFtZT09bG9jYWxOYW1lKXJldHVybiBpO3JldHVybi0xfSxFbGVtZW50U3RhY2sucHJvdG90eXBlLnJlbW92ZV9vcGVuRWxlbWVudHNfdW50aWw9ZnVuY3Rpb24oY2FsbGJhY2spe2Zvcih2YXIgZWxlbWVudCxmaW5pc2hlZD0hMTshZmluaXNoZWQ7KWVsZW1lbnQ9dGhpcy5lbGVtZW50cy5wb3AoKSxmaW5pc2hlZD1jYWxsYmFjayhlbGVtZW50KTtyZXR1cm4gZWxlbWVudH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnRTdGFjay5wcm90b3R5cGUsInRvcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnRzW3RoaXMuZWxlbWVudHMubGVuZ3RoLTFdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50U3RhY2sucHJvdG90eXBlLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5sZW5ndGh9fSksZXhwb3J0cy5FbGVtZW50U3RhY2s9RWxlbWVudFN0YWNrfSx7fV0sMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7ZnVuY3Rpb24gaXNBbHBoYU51bWVyaWMoYyl7cmV0dXJuIGM+PSIwIiYmIjkiPj1jfHxjPj0iYSImJiJ6Ij49Y3x8Yz49IkEiJiYiWiI+PWN9ZnVuY3Rpb24gaXNIZXhEaWdpdChjKXtyZXR1cm4gYz49IjAiJiYiOSI+PWN8fGM+PSJhIiYmImYiPj1jfHxjPj0iQSImJiJGIj49Y31mdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChjKXtyZXR1cm4gYz49IjAiJiYiOSI+PWN9dmFyIGVudGl0aWVzPV9kZXJlcV8oImh0bWw1LWVudGl0aWVzIiksSW5wdXRTdHJlYW09X2RlcmVxXygiLi9JbnB1dFN0cmVhbSIpLklucHV0U3RyZWFtLG5hbWVkRW50aXR5UHJlZml4ZXM9e307T2JqZWN0LmtleXMoZW50aXRpZXMpLmZvckVhY2goZnVuY3Rpb24oZW50aXR5S2V5KXtmb3IodmFyIGk9MDtlbnRpdHlLZXkubGVuZ3RoPmk7aSsrKW5hbWVkRW50aXR5UHJlZml4ZXNbZW50aXR5S2V5LnN1YnN0cmluZygwLGkrMSldPSEwfSk7dmFyIEVudGl0eVBhcnNlcj17fTtFbnRpdHlQYXJzZXIuY29uc3VtZUVudGl0eT1mdW5jdGlvbihidWZmZXIsdG9rZW5pemVyLGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKXt2YXIgZGVjb2RlZENoYXJhY3Rlcj0iIixjb25zdW1lZENoYXJhY3RlcnM9IiIsY2g9YnVmZmVyLmNoYXIoKTtpZihjaD09PUlucHV0U3RyZWFtLkVPRilyZXR1cm4hMTtpZihjb25zdW1lZENoYXJhY3RlcnMrPWNoLCJcdCI9PWNofHwiXFxuIj09Y2h8fCJcdiI9PWNofHwiICI9PWNofHwiPCI9PWNofHwiJiI9PWNoKXJldHVybiBidWZmZXIudW5nZXQoY29uc3VtZWRDaGFyYWN0ZXJzKSwhMTtpZihhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rlcj09PWNoKXJldHVybiBidWZmZXIudW5nZXQoY29uc3VtZWRDaGFyYWN0ZXJzKSwhMTtpZigiIyI9PWNoKXtpZihjaD1idWZmZXIuc2hpZnQoMSksY2g9PT1JbnB1dFN0cmVhbS5FT0YpcmV0dXJuIHRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtbnVtZXJpYy1lbnRpdHktYnV0LWdvdC1lb2YiKSxidWZmZXIudW5nZXQoY29uc3VtZWRDaGFyYWN0ZXJzKSwhMTtjb25zdW1lZENoYXJhY3RlcnMrPWNoO3ZhciByYWRpeD0xMCxpc0RpZ2l0PWlzRGVjaW1hbERpZ2l0O2lmKCJ4Ij09Y2h8fCJYIj09Y2gpe2lmKHJhZGl4PTE2LGlzRGlnaXQ9aXNIZXhEaWdpdCxjaD1idWZmZXIuc2hpZnQoMSksY2g9PT1JbnB1dFN0cmVhbS5FT0YpcmV0dXJuIHRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtbnVtZXJpYy1lbnRpdHktYnV0LWdvdC1lb2YiKSxidWZmZXIudW5nZXQoY29uc3VtZWRDaGFyYWN0ZXJzKSwhMTtjb25zdW1lZENoYXJhY3RlcnMrPWNofWlmKGlzRGlnaXQoY2gpKXtmb3IodmFyIGNvZGU9IiI7Y2ghPT1JbnB1dFN0cmVhbS5FT0YmJmlzRGlnaXQoY2gpOyljb2RlKz1jaCxjaD1idWZmZXIuY2hhcigpO2NvZGU9cGFyc2VJbnQoY29kZSxyYWRpeCk7dmFyIHJlcGxhY2VtZW50PXRoaXMucmVwbGFjZUVudGl0eU51bWJlcnMoY29kZSk7aWYocmVwbGFjZW1lbnQmJih0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtbnVtZXJpYy1lbnRpdHktcmVwbGFjZWQiKSxjb2RlPXJlcGxhY2VtZW50KSxjb2RlPjY1NTM1JiYxMTE0MTExPj1jb2RlKXtjb2RlLT02NTUzNjt2YXIgZmlyc3Q9KCgxMDQ3NTUyJmNvZGUpPj4xMCkrNTUyOTYsc2Vjb25kPSgxMDIzJmNvZGUpKzU2MzIwO2RlY29kZWRDaGFyYWN0ZXI9U3RyaW5nLmZyb21DaGFyQ29kZShmaXJzdCxzZWNvbmQpfWVsc2UgZGVjb2RlZENoYXJhY3Rlcj1TdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO3JldHVybiI7IiE9PWNoJiYodG9rZW5pemVyLl9wYXJzZUVycm9yKCJudW1lcmljLWVudGl0eS13aXRob3V0LXNlbWljb2xvbiIpLGJ1ZmZlci51bmdldChjaCkpLGRlY29kZWRDaGFyYWN0ZXJ9cmV0dXJuIGJ1ZmZlci51bmdldChjb25zdW1lZENoYXJhY3RlcnMpLHRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtbnVtZXJpYy1lbnRpdHkiKSwhMX1pZihjaD49ImEiJiYieiI+PWNofHxjaD49IkEiJiYiWiI+PWNoKXtmb3IodmFyIG1vc3RSZWNlbnRNYXRjaD0iIjtuYW1lZEVudGl0eVByZWZpeGVzW2NvbnN1bWVkQ2hhcmFjdGVyc10mJihlbnRpdGllc1tjb25zdW1lZENoYXJhY3RlcnNdJiYobW9zdFJlY2VudE1hdGNoPWNvbnN1bWVkQ2hhcmFjdGVycyksIjsiIT1jaCkmJihjaD1idWZmZXIuY2hhcigpLGNoIT09SW5wdXRTdHJlYW0uRU9GKTspY29uc3VtZWRDaGFyYWN0ZXJzKz1jaDtyZXR1cm4gbW9zdFJlY2VudE1hdGNoPyhkZWNvZGVkQ2hhcmFjdGVyPWVudGl0aWVzW21vc3RSZWNlbnRNYXRjaF0sIjsiPT09Y2h8fCFhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rlcnx8IWlzQWxwaGFOdW1lcmljKGNoKSYmIj0iIT09Y2g/KGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGg+bW9zdFJlY2VudE1hdGNoLmxlbmd0aCYmYnVmZmVyLnVuZ2V0KGNvbnN1bWVkQ2hhcmFjdGVycy5zdWJzdHJpbmcobW9zdFJlY2VudE1hdGNoLmxlbmd0aCkpLCI7IiE9PWNoJiZ0b2tlbml6ZXIuX3BhcnNlRXJyb3IoIm5hbWVkLWVudGl0eS13aXRob3V0LXNlbWljb2xvbiIpLGRlY29kZWRDaGFyYWN0ZXIpOihidWZmZXIudW5nZXQoY29uc3VtZWRDaGFyYWN0ZXJzKSwhMSkpOih0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLW5hbWVkLWVudGl0eSIpLGJ1ZmZlci51bmdldChjb25zdW1lZENoYXJhY3RlcnMpLCExKX19LEVudGl0eVBhcnNlci5yZXBsYWNlRW50aXR5TnVtYmVycz1mdW5jdGlvbihjKXtzd2l0Y2goYyl7Y2FzZSAwOnJldHVybiA2NTUzMztjYXNlIDE5OnJldHVybiAxNjtjYXNlIDEyODpyZXR1cm4gODM2NDtjYXNlIDEyOTpyZXR1cm4gMTI5O2Nhc2UgMTMwOnJldHVybiA4MjE4O2Nhc2UgMTMxOnJldHVybiA0MDI7Y2FzZSAxMzI6cmV0dXJuIDgyMjI7Y2FzZSAxMzM6cmV0dXJuIDgyMzA7Y2FzZSAxMzQ6cmV0dXJuIDgyMjQ7Y2FzZSAxMzU6cmV0dXJuIDgyMjU7Y2FzZSAxMzY6cmV0dXJuIDcxMDtjYXNlIDEzNzpyZXR1cm4gODI0MDtjYXNlIDEzODpyZXR1cm4gMzUyO2Nhc2UgMTM5OnJldHVybiA4MjQ5O2Nhc2UgMTQwOnJldHVybiAzMzg7Y2FzZSAxNDE6cmV0dXJuIDE0MTtjYXNlIDE0MjpyZXR1cm4gMzgxO2Nhc2UgMTQzOnJldHVybiAxNDM7Y2FzZSAxNDQ6cmV0dXJuIDE0NDtjYXNlIDE0NTpyZXR1cm4gODIxNjtjYXNlIDE0NjpyZXR1cm4gODIxNztjYXNlIDE0NzpyZXR1cm4gODIyMDtjYXNlIDE0ODpyZXR1cm4gODIyMTtjYXNlIDE0OTpyZXR1cm4gODIyNjtjYXNlIDE1MDpyZXR1cm4gODIxMTtjYXNlIDE1MTpyZXR1cm4gODIxMjtjYXNlIDE1MjpyZXR1cm4gNzMyO2Nhc2UgMTUzOnJldHVybiA4NDgyO2Nhc2UgMTU0OnJldHVybiAzNTM7Y2FzZSAxNTU6cmV0dXJuIDgyNTA7Y2FzZSAxNTY6cmV0dXJuIDMzOTtjYXNlIDE1NzpyZXR1cm4gMTU3O2Nhc2UgMTU4OnJldHVybiAzODI7Y2FzZSAxNTk6cmV0dXJuIDM3NjtkZWZhdWx0OmlmKGM+PTU1Mjk2JiY1NzM0Mz49Y3x8Yz4xMTE0MTExKXJldHVybiA2NTUzMztpZihjPj0xJiY4Pj1jfHxjPj0xNCYmMzE+PWN8fGM+PTEyNyYmMTU5Pj1jfHxjPj02NDk3NiYmNjUwMDc+PWN8fDExPT1jfHw2NTUzND09Y3x8MTMxMDcwPT1jfHwzMTQ1NzI2PT1jfHwxOTY2MDc9PWN8fDI2MjE0Mj09Y3x8MjYyMTQzPT1jfHwzMjc2Nzg9PWN8fDMyNzY3OT09Y3x8MzkzMjE0PT1jfHwzOTMyMTU9PWN8fDQ1ODc1MD09Y3x8NDU4NzUxPT1jfHw1MjQyODY9PWN8fDUyNDI4Nz09Y3x8NTg5ODIyPT1jfHw1ODk4MjM9PWN8fDY1NTM1OD09Y3x8NjU1MzU5PT1jfHw3MjA4OTQ9PWN8fDcyMDg5NT09Y3x8Nzg2NDMwPT1jfHw3ODY0MzE9PWN8fDg1MTk2Nj09Y3x8ODUxOTY3PT1jfHw5MTc1MDI9PWN8fDkxNzUwMz09Y3x8OTgzMDM4PT1jfHw5ODMwMzk9PWN8fDEwNDg1NzQ9PWN8fDEwNDg1NzU9PWN8fDExMTQxMTA9PWN8fDExMTQxMTE9PWMpcmV0dXJuIGN9fSxleHBvcnRzLkVudGl0eVBhcnNlcj1FbnRpdHlQYXJzZXJ9LHsiLi9JbnB1dFN0cmVhbSI6MywiaHRtbDUtZW50aXRpZXMiOjEyfV0sMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7ZnVuY3Rpb24gSW5wdXRTdHJlYW0oKXt0aGlzLmRhdGE9IiIsdGhpcy5zdGFydD0wLHRoaXMuY29tbWl0dGVkPTAsdGhpcy5lb2Y9ITEsdGhpcy5sYXN0TG9jYXRpb249e2xpbmU6MCxjb2x1bW46MH19SW5wdXRTdHJlYW0uRU9GPS0xLElucHV0U3RyZWFtLkRSQUlOPS0yLElucHV0U3RyZWFtLnByb3RvdHlwZT17c2xpY2U6ZnVuY3Rpb24oKXtpZih0aGlzLnN0YXJ0Pj10aGlzLmRhdGEubGVuZ3RoKXtpZighdGhpcy5lb2YpdGhyb3cgSW5wdXRTdHJlYW0uRFJBSU47cmV0dXJuIElucHV0U3RyZWFtLkVPRn1yZXR1cm4gdGhpcy5kYXRhLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5kYXRhLmxlbmd0aCl9LCJjaGFyIjpmdW5jdGlvbigpe2lmKCF0aGlzLmVvZiYmdGhpcy5zdGFydD49dGhpcy5kYXRhLmxlbmd0aC0xKXRocm93IElucHV0U3RyZWFtLkRSQUlOO2lmKHRoaXMuc3RhcnQ+PXRoaXMuZGF0YS5sZW5ndGgpcmV0dXJuIElucHV0U3RyZWFtLkVPRjt2YXIgY2g9dGhpcy5kYXRhW3RoaXMuc3RhcnQrK107cmV0dXJuIlxcciI9PT1jaCYmKGNoPSJcXG4iKSxjaH0sYWR2YW5jZTpmdW5jdGlvbihhbW91bnQpe2lmKHRoaXMuc3RhcnQrPWFtb3VudCx0aGlzLnN0YXJ0Pj10aGlzLmRhdGEubGVuZ3RoKXtpZighdGhpcy5lb2YpdGhyb3cgSW5wdXRTdHJlYW0uRFJBSU47cmV0dXJuIElucHV0U3RyZWFtLkVPRn10aGlzLmNvbW1pdHRlZD50aGlzLmRhdGEubGVuZ3RoLzImJih0aGlzLmxhc3RMb2NhdGlvbj10aGlzLmxvY2F0aW9uKCksdGhpcy5kYXRhPXRoaXMuZGF0YS5zbGljZSh0aGlzLmNvbW1pdHRlZCksdGhpcy5zdGFydD10aGlzLnN0YXJ0LXRoaXMuY29tbWl0dGVkLHRoaXMuY29tbWl0dGVkPTApfSxtYXRjaFdoaWxlOmZ1bmN0aW9uKHJlKXtpZih0aGlzLmVvZiYmdGhpcy5zdGFydD49dGhpcy5kYXRhLmxlbmd0aClyZXR1cm4iIjt2YXIgcj1SZWdFeHAoIl4iK3JlKyIrIiksbT1yLmV4ZWModGhpcy5zbGljZSgpKTtpZihtKXtpZighdGhpcy5lb2YmJm1bMF0ubGVuZ3RoPT10aGlzLmRhdGEubGVuZ3RoLXRoaXMuc3RhcnQpdGhyb3cgSW5wdXRTdHJlYW0uRFJBSU47cmV0dXJuIHRoaXMuYWR2YW5jZShtWzBdLmxlbmd0aCksbVswXX1yZXR1cm4iIn0sbWF0Y2hVbnRpbDpmdW5jdGlvbihyZSl7dmFyIG0scztpZihzPXRoaXMuc2xpY2UoKSxzPT09SW5wdXRTdHJlYW0uRU9GKXJldHVybiIiO2lmKG09UmVnRXhwKHJlKyh0aGlzLmVvZj8ifCQiOiIiKSkuZXhlYyhzKSl7dmFyIHQ9dGhpcy5kYXRhLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5zdGFydCttLmluZGV4KTtyZXR1cm4gdGhpcy5hZHZhbmNlKG0uaW5kZXgpLHQucmVwbGFjZSgvXFxyL2csIlxcbiIpLnJlcGxhY2UoL1xcbnsyLH0vZywiXFxuIil9dGhyb3cgSW5wdXRTdHJlYW0uRFJBSU59LGFwcGVuZDpmdW5jdGlvbihkYXRhKXt0aGlzLmRhdGErPWRhdGF9LHNoaWZ0OmZ1bmN0aW9uKG4pe2lmKCF0aGlzLmVvZiYmdGhpcy5zdGFydCtuPj10aGlzLmRhdGEubGVuZ3RoKXRocm93IElucHV0U3RyZWFtLkRSQUlOO2lmKHRoaXMuZW9mJiZ0aGlzLnN0YXJ0Pj10aGlzLmRhdGEubGVuZ3RoKXJldHVybiBJbnB1dFN0cmVhbS5FT0Y7dmFyIGQ9IiIrdGhpcy5kYXRhLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5zdGFydCtuKTtyZXR1cm4gdGhpcy5hZHZhbmNlKE1hdGgubWluKG4sdGhpcy5kYXRhLmxlbmd0aC10aGlzLnN0YXJ0KSksZH0scGVlazpmdW5jdGlvbihuKXtpZighdGhpcy5lb2YmJnRoaXMuc3RhcnQrbj49dGhpcy5kYXRhLmxlbmd0aCl0aHJvdyBJbnB1dFN0cmVhbS5EUkFJTjtyZXR1cm4gdGhpcy5lb2YmJnRoaXMuc3RhcnQ+PXRoaXMuZGF0YS5sZW5ndGg/SW5wdXRTdHJlYW0uRU9GOiIiK3RoaXMuZGF0YS5zbGljZSh0aGlzLnN0YXJ0LE1hdGgubWluKHRoaXMuc3RhcnQrbix0aGlzLmRhdGEubGVuZ3RoKSl9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RoLXRoaXMuc3RhcnQtMX0sdW5nZXQ6ZnVuY3Rpb24oZCl7ZCE9PUlucHV0U3RyZWFtLkVPRiYmKHRoaXMuc3RhcnQtPWQubGVuZ3RoKX0sdW5kbzpmdW5jdGlvbigpe3RoaXMuc3RhcnQ9dGhpcy5jb21taXR0ZWR9LGNvbW1pdDpmdW5jdGlvbigpe3RoaXMuY29tbWl0dGVkPXRoaXMuc3RhcnR9LGxvY2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGxhc3RMaW5lPXRoaXMubGFzdExvY2F0aW9uLmxpbmUsbGFzdENvbHVtbj10aGlzLmxhc3RMb2NhdGlvbi5jb2x1bW4scmVhZD10aGlzLmRhdGEuc2xpY2UoMCx0aGlzLmNvbW1pdHRlZCksbmV3bGluZXM9cmVhZC5tYXRjaCgvXFxuL2cpLGxpbmU9bmV3bGluZXM/bGFzdExpbmUrbmV3bGluZXMubGVuZ3RoOmxhc3RMaW5lLGNvbHVtbj1uZXdsaW5lcz9yZWFkLmxlbmd0aC1yZWFkLmxhc3RJbmRleE9mKCJcXG4iKS0xOmxhc3RDb2x1bW4rcmVhZC5sZW5ndGg7cmV0dXJue2xpbmU6bGluZSxjb2x1bW46Y29sdW1ufX19LGV4cG9ydHMuSW5wdXRTdHJlYW09SW5wdXRTdHJlYW19LHt9XSw0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtmdW5jdGlvbiBTdGFja0l0ZW0obmFtZXNwYWNlVVJJLGxvY2FsTmFtZSxhdHRyaWJ1dGVzLG5vZGUpe3RoaXMubG9jYWxOYW1lPWxvY2FsTmFtZSx0aGlzLm5hbWVzcGFjZVVSST1uYW1lc3BhY2VVUkksdGhpcy5hdHRyaWJ1dGVzPWF0dHJpYnV0ZXMsdGhpcy5ub2RlPW5vZGV9ZnVuY3Rpb24gZ2V0QXR0cmlidXRlKGl0ZW0sbmFtZSl7Zm9yKHZhciBpPTA7aXRlbS5hdHRyaWJ1dGVzLmxlbmd0aD5pO2krKylpZihpdGVtLmF0dHJpYnV0ZXNbaV0ubm9kZU5hbWU9PW5hbWUpcmV0dXJuIGl0ZW0uYXR0cmlidXRlc1tpXS5ub2RlVmFsdWU7cmV0dXJuIG51bGx9dmFyIFNwZWNpYWxFbGVtZW50cz17Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOlsiYWRkcmVzcyIsImFwcGxldCIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJiYXNlIiwiYmFzZWZvbnQiLCJiZ3NvdW5kIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1dHRvbiIsImNhcHRpb24iLCJjZW50ZXIiLCJjb2wiLCJjb2xncm91cCIsImRkIiwiZGV0YWlscyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJlbWJlZCIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImZvcm0iLCJmcmFtZSIsImZyYW1lc2V0IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImlmcmFtZSIsImltZyIsImlucHV0IiwiaXNpbmRleCIsImxpIiwibGluayIsImxpc3RpbmciLCJtYWluIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGEiLCJuYXYiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsIm9iamVjdCIsIm9sIiwicCIsInBhcmFtIiwicGxhaW50ZXh0IiwicHJlIiwic2NyaXB0Iiwic2VjdGlvbiIsInNlbGVjdCIsInNvdXJjZSIsInN0eWxlIiwic3VtbWFyeSIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGl0bGUiLCJ0ciIsInRyYWNrIiwidWwiLCJ3YnIiLCJ4bXAiXSwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI6WyJtaSIsIm1vIiwibW4iLCJtcyIsIm10ZXh0IiwiYW5ub3RhdGlvbi14bWwiXSwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOlsiZm9yZWlnbk9iamVjdCIsImRlc2MiLCJ0aXRsZSJdfTtTdGFja0l0ZW0ucHJvdG90eXBlLmlzU3BlY2lhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWVzcGFjZVVSSSBpbiBTcGVjaWFsRWxlbWVudHMmJlNwZWNpYWxFbGVtZW50c1t0aGlzLm5hbWVzcGFjZVVSSV0uaW5kZXhPZih0aGlzLmxvY2FsTmFtZSk+LTF9LFN0YWNrSXRlbS5wcm90b3R5cGUuaXNGb3N0ZXJQYXJlbnRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT10aGlzLm5hbWVzcGFjZVVSST8idGFibGUiPT09dGhpcy5sb2NhbE5hbWV8fCJ0Ym9keSI9PT10aGlzLmxvY2FsTmFtZXx8InRmb290Ij09PXRoaXMubG9jYWxOYW1lfHwidGhlYWQiPT09dGhpcy5sb2NhbE5hbWV8fCJ0ciI9PT10aGlzLmxvY2FsTmFtZTohMX0sU3RhY2tJdGVtLnByb3RvdHlwZS5pc051bWJlcmVkSGVhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPT09dGhpcy5uYW1lc3BhY2VVUkk/ImgxIj09PXRoaXMubG9jYWxOYW1lfHwiaDIiPT09dGhpcy5sb2NhbE5hbWV8fCJoMyI9PT10aGlzLmxvY2FsTmFtZXx8Img0Ij09PXRoaXMubG9jYWxOYW1lfHwiaDUiPT09dGhpcy5sb2NhbE5hbWV8fCJoNiI9PT10aGlzLmxvY2FsTmFtZTohMX0sU3RhY2tJdGVtLnByb3RvdHlwZS5pc0ZvcmVpZ249ZnVuY3Rpb24oKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIhPXRoaXMubmFtZXNwYWNlVVJJfSxTdGFja0l0ZW0ucHJvdG90eXBlLmlzSHRtbEludGVncmF0aW9uUG9pbnQ9ZnVuY3Rpb24oKXtpZigiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI9PT10aGlzLm5hbWVzcGFjZVVSSSl7aWYoImFubm90YXRpb24teG1sIiE9PXRoaXMubG9jYWxOYW1lKXJldHVybiExO3ZhciBlbmNvZGluZz1nZXRBdHRyaWJ1dGUodGhpcywiZW5jb2RpbmciKTtyZXR1cm4gZW5jb2Rpbmc/KGVuY29kaW5nPWVuY29kaW5nLnRvTG93ZXJDYXNlKCksInRleHQvaHRtbCI9PT1lbmNvZGluZ3x8ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1lbmNvZGluZyk6ITF9cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj09PXRoaXMubmFtZXNwYWNlVVJJPyJmb3JlaWduT2JqZWN0Ij09PXRoaXMubG9jYWxOYW1lfHwiZGVzYyI9PT10aGlzLmxvY2FsTmFtZXx8InRpdGxlIj09PXRoaXMubG9jYWxOYW1lOiExfSxTdGFja0l0ZW0ucHJvdG90eXBlLmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQ9ZnVuY3Rpb24oKXtyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI9PT10aGlzLm5hbWVzcGFjZVVSST8ibWkiPT09dGhpcy5sb2NhbE5hbWV8fCJtbyI9PT10aGlzLmxvY2FsTmFtZXx8Im1uIj09PXRoaXMubG9jYWxOYW1lfHwibXMiPT09dGhpcy5sb2NhbE5hbWV8fCJtdGV4dCI9PT10aGlzLmxvY2FsTmFtZTohMX0sZXhwb3J0cy5TdGFja0l0ZW09U3RhY2tJdGVtfSx7fV0sNTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7ZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGMpe3JldHVybiIgIj09PWN8fCJcXG4iPT09Y3x8Ilx0Ij09PWN8fCJcXHIiPT09Y3x8IlxcZiI9PT1jfWZ1bmN0aW9uIGlzQWxwaGEoYyl7cmV0dXJuIGM+PSJBIiYmIloiPj1jfHxjPj0iYSImJiJ6Ij49Y31mdW5jdGlvbiBUb2tlbml6ZXIodG9rZW5IYW5kbGVyKXt0aGlzLl90b2tlbkhhbmRsZXI9dG9rZW5IYW5kbGVyLHRoaXMuX3N0YXRlPVRva2VuaXplci5EQVRBLHRoaXMuX2lucHV0U3RyZWFtPW5ldyBJbnB1dFN0cmVhbSx0aGlzLl9jdXJyZW50VG9rZW49bnVsbCx0aGlzLl90ZW1wb3JhcnlCdWZmZXI9IiIsdGhpcy5fYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXI9IiJ9dmFyIElucHV0U3RyZWFtPV9kZXJlcV8oIi4vSW5wdXRTdHJlYW0iKS5JbnB1dFN0cmVhbSxFbnRpdHlQYXJzZXI9X2RlcmVxXygiLi9FbnRpdHlQYXJzZXIiKS5FbnRpdHlQYXJzZXI7VG9rZW5pemVyLnByb3RvdHlwZS5fcGFyc2VFcnJvcj1mdW5jdGlvbihjb2RlLGFyZ3Mpe3RoaXMuX3Rva2VuSGFuZGxlci5wYXJzZUVycm9yKGNvZGUsYXJncyl9LFRva2VuaXplci5wcm90b3R5cGUuX2VtaXRUb2tlbj1mdW5jdGlvbih0b2tlbil7aWYoIlN0YXJ0VGFnIj09PXRva2VuLnR5cGUpZm9yKHZhciBpPTE7dG9rZW4uZGF0YS5sZW5ndGg+aTtpKyspdG9rZW4uZGF0YVtpXS5ub2RlTmFtZXx8dG9rZW4uZGF0YS5zcGxpY2UoaS0tLDEpO2Vsc2UiRW5kVGFnIj09PXRva2VuLnR5cGUmJih0b2tlbi5zZWxmQ2xvc2luZyYmdGhpcy5fcGFyc2VFcnJvcigic2VsZi1jbG9zaW5nLWZsYWctb24tZW5kLXRhZyIpLDAhPT10b2tlbi5kYXRhLmxlbmd0aCYmdGhpcy5fcGFyc2VFcnJvcigiYXR0cmlidXRlcy1pbi1lbmQtdGFnIikpO3RoaXMuX3Rva2VuSGFuZGxlci5wcm9jZXNzVG9rZW4odG9rZW4pLCJTdGFydFRhZyI9PT10b2tlbi50eXBlJiZ0b2tlbi5zZWxmQ2xvc2luZyYmIXRoaXMuX3Rva2VuSGFuZGxlci5pc1NlbGZDbG9zaW5nRmxhZ0Fja25vd2xlZGdlZCgpJiZ0aGlzLl9wYXJzZUVycm9yKCJub24tdm9pZC1lbGVtZW50LXdpdGgtdHJhaWxpbmctc29saWR1cyIse25hbWU6dG9rZW4ubmFtZX0pfSxUb2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q3VycmVudFRva2VuPWZ1bmN0aW9uKCl7dGhpcy5fc3RhdGU9VG9rZW5pemVyLkRBVEEsdGhpcy5fZW1pdFRva2VuKHRoaXMuX2N1cnJlbnRUb2tlbil9LFRva2VuaXplci5wcm90b3R5cGUuX2N1cnJlbnRBdHRyaWJ1dGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudFRva2VuLmRhdGFbdGhpcy5fY3VycmVudFRva2VuLmRhdGEubGVuZ3RoLTFdfSxUb2tlbml6ZXIucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKHN0YXRlKXt0aGlzLl9zdGF0ZT1zdGF0ZX0sVG9rZW5pemVyLnByb3RvdHlwZS50b2tlbml6ZT1mdW5jdGlvbihzb3VyY2Upe2Z1bmN0aW9uIGRhdGFfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO2lmKGRhdGE9PT1JbnB1dFN0cmVhbS5FT0YpcmV0dXJuIHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJFT0YiLGRhdGE6bnVsbH0pLCExO2lmKCImIj09PWRhdGEpdG9rZW5pemVyLnNldFN0YXRlKGNoYXJhY3Rlcl9yZWZlcmVuY2VfaW5fZGF0YV9zdGF0ZSk7ZWxzZSBpZigiPCI9PT1kYXRhKXRva2VuaXplci5zZXRTdGF0ZSh0YWdfb3Blbl9zdGF0ZSk7ZWxzZSBpZigiXFwwIj09PWRhdGEpdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6ZGF0YX0pLGJ1ZmZlci5jb21taXQoKTtlbHNle3ZhciBjaGFycz1idWZmZXIubWF0Y2hVbnRpbCgiJnw8fFxcMCIpO3Rva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOmRhdGErY2hhcnN9KSxidWZmZXIuY29tbWl0KCl9cmV0dXJuITB9ZnVuY3Rpb24gY2hhcmFjdGVyX3JlZmVyZW5jZV9pbl9kYXRhX3N0YXRlKGJ1ZmZlcil7dmFyIGNoYXJhY3Rlcj1FbnRpdHlQYXJzZXIuY29uc3VtZUVudGl0eShidWZmZXIsdG9rZW5pemVyKTtyZXR1cm4gdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpLHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOmNoYXJhY3Rlcnx8IiYifSksITB9ZnVuY3Rpb24gcmNkYXRhX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtpZihkYXRhPT09SW5wdXRTdHJlYW0uRU9GKXJldHVybiB0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiRU9GIixkYXRhOm51bGx9KSwhMTtpZigiJiI9PT1kYXRhKXRva2VuaXplci5zZXRTdGF0ZShjaGFyYWN0ZXJfcmVmZXJlbmNlX2luX3JjZGF0YV9zdGF0ZSk7ZWxzZSBpZigiPCI9PT1kYXRhKXRva2VuaXplci5zZXRTdGF0ZShyY2RhdGFfbGVzc190aGFuX3NpZ25fc3RhdGUpO2Vsc2UgaWYoIlxcMCI9PT1kYXRhKXRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKSx0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToi77+9In0pLGJ1ZmZlci5jb21taXQoKTtlbHNle3ZhciBjaGFycz1idWZmZXIubWF0Y2hVbnRpbCgiJnw8fFxcMCIpO3Rva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOmRhdGErY2hhcnN9KSxidWZmZXIuY29tbWl0KCl9cmV0dXJuITB9ZnVuY3Rpb24gY2hhcmFjdGVyX3JlZmVyZW5jZV9pbl9yY2RhdGFfc3RhdGUoYnVmZmVyKXt2YXIgY2hhcmFjdGVyPUVudGl0eVBhcnNlci5jb25zdW1lRW50aXR5KGJ1ZmZlcix0b2tlbml6ZXIpO3JldHVybiB0b2tlbml6ZXIuc2V0U3RhdGUocmNkYXRhX3N0YXRlKSx0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YTpjaGFyYWN0ZXJ8fCImIn0pLCEwfWZ1bmN0aW9uIHJhd3RleHRfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO2lmKGRhdGE9PT1JbnB1dFN0cmVhbS5FT0YpcmV0dXJuIHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJFT0YiLGRhdGE6bnVsbH0pLCExO2lmKCI8Ij09PWRhdGEpdG9rZW5pemVyLnNldFN0YXRlKHJhd3RleHRfbGVzc190aGFuX3NpZ25fc3RhdGUpO2Vsc2UgaWYoIlxcMCI9PT1kYXRhKXRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKSx0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToi77+9In0pLGJ1ZmZlci5jb21taXQoKTtlbHNle3ZhciBjaGFycz1idWZmZXIubWF0Y2hVbnRpbCgiPHxcXDAiKTt0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YTpkYXRhK2NoYXJzfSl9cmV0dXJuITB9ZnVuY3Rpb24gcGxhaW50ZXh0X3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtpZihkYXRhPT09SW5wdXRTdHJlYW0uRU9GKXJldHVybiB0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiRU9GIixkYXRhOm51bGx9KSwhMTtpZigiXFwwIj09PWRhdGEpdG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpLHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOiLvv70ifSksYnVmZmVyLmNvbW1pdCgpO2Vsc2V7dmFyIGNoYXJzPWJ1ZmZlci5tYXRjaFVudGlsKCJcXDAiKTt0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YTpkYXRhK2NoYXJzfSl9cmV0dXJuITB9ZnVuY3Rpb24gc2NyaXB0X2RhdGFfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO2lmKGRhdGE9PT1JbnB1dFN0cmVhbS5FT0YpcmV0dXJuIHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJFT0YiLGRhdGE6bnVsbH0pLCExO2lmKCI8Ij09PWRhdGEpdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2xlc3NfdGhhbl9zaWduX3N0YXRlKTtlbHNlIGlmKCJcXDAiPT09ZGF0YSl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50IiksdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6Iu+/vSJ9KSxidWZmZXIuY29tbWl0KCk7ZWxzZXt2YXIgY2hhcnM9YnVmZmVyLm1hdGNoVW50aWwoIjx8XFwwIik7dG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6ZGF0YStjaGFyc30pfXJldHVybiEwfWZ1bmN0aW9uIHJjZGF0YV9sZXNzX3RoYW5fc2lnbl9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIi8iPT09ZGF0YT8odGhpcy5fdGVtcG9yYXJ5QnVmZmVyPSIiLHRva2VuaXplci5zZXRTdGF0ZShyY2RhdGFfZW5kX3RhZ19vcGVuX3N0YXRlKSk6KHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOiI8In0pLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUocmNkYXRhX3N0YXRlKSksITB9ZnVuY3Rpb24gcmNkYXRhX2VuZF90YWdfb3Blbl9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGlzQWxwaGEoZGF0YSk/KHRoaXMuX3RlbXBvcmFyeUJ1ZmZlcis9ZGF0YSx0b2tlbml6ZXIuc2V0U3RhdGUocmNkYXRhX2VuZF90YWdfbmFtZV9zdGF0ZSkpOih0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToiPC8ifSksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShyY2RhdGFfc3RhdGUpKSwhMH1mdW5jdGlvbiByY2RhdGFfZW5kX3RhZ19uYW1lX3N0YXRlKGJ1ZmZlcil7dmFyIGFwcHJvcHJpYXRlPXRva2VuaXplci5fY3VycmVudFRva2VuJiZ0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5uYW1lPT09dGhpcy5fdGVtcG9yYXJ5QnVmZmVyLnRvTG93ZXJDYXNlKCksZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiBpc1doaXRlc3BhY2UoZGF0YSkmJmFwcHJvcHJpYXRlPyh0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbj17dHlwZToiRW5kVGFnIixuYW1lOnRoaXMuX3RlbXBvcmFyeUJ1ZmZlcixkYXRhOltdLHNlbGZDbG9zaW5nOiExfSx0b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2F0dHJpYnV0ZV9uYW1lX3N0YXRlKSk6Ii8iPT09ZGF0YSYmYXBwcm9wcmlhdGU/KHRva2VuaXplci5fY3VycmVudFRva2VuPXt0eXBlOiJFbmRUYWciLG5hbWU6dGhpcy5fdGVtcG9yYXJ5QnVmZmVyLGRhdGE6W10sc2VsZkNsb3Npbmc6ITF9LHRva2VuaXplci5zZXRTdGF0ZShzZWxmX2Nsb3NpbmdfdGFnX3N0YXRlKSk6Ij4iPT09ZGF0YSYmYXBwcm9wcmlhdGU/KHRva2VuaXplci5fY3VycmVudFRva2VuPXt0eXBlOiJFbmRUYWciLG5hbWU6dGhpcy5fdGVtcG9yYXJ5QnVmZmVyLGRhdGE6W10sc2VsZkNsb3Npbmc6ITF9LHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6aXNBbHBoYShkYXRhKT8odGhpcy5fdGVtcG9yYXJ5QnVmZmVyKz1kYXRhLGJ1ZmZlci5jb21taXQoKSk6KHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOiI8LyIrdGhpcy5fdGVtcG9yYXJ5QnVmZmVyfSksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShyY2RhdGFfc3RhdGUpKSwhMH1mdW5jdGlvbiByYXd0ZXh0X2xlc3NfdGhhbl9zaWduX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtyZXR1cm4iLyI9PT1kYXRhPyh0aGlzLl90ZW1wb3JhcnlCdWZmZXI9IiIsdG9rZW5pemVyLnNldFN0YXRlKHJhd3RleHRfZW5kX3RhZ19vcGVuX3N0YXRlKSk6KHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOiI8In0pLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUocmF3dGV4dF9zdGF0ZSkpLCEwfWZ1bmN0aW9uIHJhd3RleHRfZW5kX3RhZ19vcGVuX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtyZXR1cm4gaXNBbHBoYShkYXRhKT8odGhpcy5fdGVtcG9yYXJ5QnVmZmVyKz1kYXRhLHRva2VuaXplci5zZXRTdGF0ZShyYXd0ZXh0X2VuZF90YWdfbmFtZV9zdGF0ZSkpOih0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToiPC8ifSksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShyYXd0ZXh0X3N0YXRlKSksITB9ZnVuY3Rpb24gcmF3dGV4dF9lbmRfdGFnX25hbWVfc3RhdGUoYnVmZmVyKXt2YXIgYXBwcm9wcmlhdGU9dG9rZW5pemVyLl9jdXJyZW50VG9rZW4mJnRva2VuaXplci5fY3VycmVudFRva2VuLm5hbWU9PT10aGlzLl90ZW1wb3JhcnlCdWZmZXIudG9Mb3dlckNhc2UoKSxkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGlzV2hpdGVzcGFjZShkYXRhKSYmYXBwcm9wcmlhdGU/KHRva2VuaXplci5fY3VycmVudFRva2VuPXt0eXBlOiJFbmRUYWciLG5hbWU6dGhpcy5fdGVtcG9yYXJ5QnVmZmVyLGRhdGE6W10sc2VsZkNsb3Npbmc6ITF9LHRva2VuaXplci5zZXRTdGF0ZShiZWZvcmVfYXR0cmlidXRlX25hbWVfc3RhdGUpKToiLyI9PT1kYXRhJiZhcHByb3ByaWF0ZT8odG9rZW5pemVyLl9jdXJyZW50VG9rZW49e3R5cGU6IkVuZFRhZyIsbmFtZTp0aGlzLl90ZW1wb3JhcnlCdWZmZXIsZGF0YTpbXSxzZWxmQ2xvc2luZzohMX0sdG9rZW5pemVyLnNldFN0YXRlKHNlbGZfY2xvc2luZ190YWdfc3RhdGUpKToiPiI9PT1kYXRhJiZhcHByb3ByaWF0ZT8odG9rZW5pemVyLl9jdXJyZW50VG9rZW49e3R5cGU6IkVuZFRhZyIsbmFtZTp0aGlzLl90ZW1wb3JhcnlCdWZmZXIsZGF0YTpbXSxzZWxmQ2xvc2luZzohMX0sdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpKTppc0FscGhhKGRhdGEpPyh0aGlzLl90ZW1wb3JhcnlCdWZmZXIrPWRhdGEsYnVmZmVyLmNvbW1pdCgpKToodG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6IjwvIit0aGlzLl90ZW1wb3JhcnlCdWZmZXJ9KSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKHJhd3RleHRfc3RhdGUpKSwhMH1mdW5jdGlvbiBzY3JpcHRfZGF0YV9sZXNzX3RoYW5fc2lnbl9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIi8iPT09ZGF0YT8odGhpcy5fdGVtcG9yYXJ5QnVmZmVyPSIiLHRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lbmRfdGFnX29wZW5fc3RhdGUpKToiISI9PT1kYXRhPyh0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToiPCEifSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2VzY2FwZV9zdGFydF9zdGF0ZSkpOih0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToiPCJ9KSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX3N0YXRlKSksITB9ZnVuY3Rpb24gc2NyaXB0X2RhdGFfZW5kX3RhZ19vcGVuX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtyZXR1cm4gaXNBbHBoYShkYXRhKT8odGhpcy5fdGVtcG9yYXJ5QnVmZmVyKz1kYXRhLHRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lbmRfdGFnX25hbWVfc3RhdGUpKToodG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6IjwvIn0pLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfc3RhdGUpKSwhMH1mdW5jdGlvbiBzY3JpcHRfZGF0YV9lbmRfdGFnX25hbWVfc3RhdGUoYnVmZmVyKXt2YXIgYXBwcm9wcmlhdGU9dG9rZW5pemVyLl9jdXJyZW50VG9rZW4mJnRva2VuaXplci5fY3VycmVudFRva2VuLm5hbWU9PT10aGlzLl90ZW1wb3JhcnlCdWZmZXIudG9Mb3dlckNhc2UoKSxkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGlzV2hpdGVzcGFjZShkYXRhKSYmYXBwcm9wcmlhdGU/KHRva2VuaXplci5fY3VycmVudFRva2VuPXt0eXBlOiJFbmRUYWciLG5hbWU6InNjcmlwdCIsZGF0YTpbXSxzZWxmQ2xvc2luZzohMX0sdG9rZW5pemVyLnNldFN0YXRlKGJlZm9yZV9hdHRyaWJ1dGVfbmFtZV9zdGF0ZSkpOiIvIj09PWRhdGEmJmFwcHJvcHJpYXRlPyh0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbj17dHlwZToiRW5kVGFnIixuYW1lOiJzY3JpcHQiLGRhdGE6W10sc2VsZkNsb3Npbmc6ITF9LHRva2VuaXplci5zZXRTdGF0ZShzZWxmX2Nsb3NpbmdfdGFnX3N0YXRlKSk6Ij4iPT09ZGF0YSYmYXBwcm9wcmlhdGU/KHRva2VuaXplci5fY3VycmVudFRva2VuPXt0eXBlOiJFbmRUYWciLG5hbWU6InNjcmlwdCIsZGF0YTpbXSxzZWxmQ2xvc2luZzohMX0sdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCkpOmlzQWxwaGEoZGF0YSk/KHRoaXMuX3RlbXBvcmFyeUJ1ZmZlcis9ZGF0YSxidWZmZXIuY29tbWl0KCkpOih0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToiPC8iK3RoaXMuX3RlbXBvcmFyeUJ1ZmZlcn0pLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfc3RhdGUpKSwhMH1mdW5jdGlvbiBzY3JpcHRfZGF0YV9lc2NhcGVfc3RhcnRfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiItIj09PWRhdGE/KHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOiItIn0pLHRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lc2NhcGVfc3RhcnRfZGFzaF9zdGF0ZSkpOihidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX3N0YXRlKSksITB9ZnVuY3Rpb24gc2NyaXB0X2RhdGFfZXNjYXBlX3N0YXJ0X2Rhc2hfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiItIj09PWRhdGE/KHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOiItIn0pLHRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lc2NhcGVkX2Rhc2hfZGFzaF9zdGF0ZSkpOihidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX3N0YXRlKSksITB9ZnVuY3Rpb24gc2NyaXB0X2RhdGFfZXNjYXBlZF9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7aWYoZGF0YT09PUlucHV0U3RyZWFtLkVPRilidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpO2Vsc2UgaWYoIi0iPT09ZGF0YSl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToiLSJ9KSx0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9kYXNoX3N0YXRlKTtlbHNlIGlmKCI8Ij09PWRhdGEpdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2VzY2FwZWRfbGVzc190aGVuX3NpZ25fc3RhdGUpO2Vsc2UgaWYoIlxcMCI9PT1kYXRhKXRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKSx0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToi77+9In0pLGJ1ZmZlci5jb21taXQoKTtlbHNle3ZhciBjaGFycz1idWZmZXIubWF0Y2hVbnRpbCgiPHwtfFxcMCIpO3Rva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOmRhdGErY2hhcnN9KX1yZXR1cm4hMH1mdW5jdGlvbiBzY3JpcHRfZGF0YV9lc2NhcGVkX2Rhc2hfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiBkYXRhPT09SW5wdXRTdHJlYW0uRU9GPyhidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpKToiLSI9PT1kYXRhPyh0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToiLSJ9KSx0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9kYXNoX2Rhc2hfc3RhdGUpKToiPCI9PT1kYXRhP3Rva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lc2NhcGVkX2xlc3NfdGhlbl9zaWduX3N0YXRlKToiXFwwIj09PWRhdGE/KHRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKSx0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToi77+9In0pLHRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lc2NhcGVkX3N0YXRlKSk6KHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOmRhdGF9KSx0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9zdGF0ZSkpLCEwfWZ1bmN0aW9uIHNjcmlwdF9kYXRhX2VzY2FwZWRfZGFzaF9kYXNoX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtyZXR1cm4gZGF0YT09PUlucHV0U3RyZWFtLkVPRj8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tc2NyaXB0IiksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6IjwiPT09ZGF0YT90b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9sZXNzX3RoZW5fc2lnbl9zdGF0ZSk6Ij4iPT09ZGF0YT8odG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6Ij4ifSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX3N0YXRlKSk6IlxcMCI9PT1kYXRhPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50IiksdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6Iu+/vSJ9KSx0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9zdGF0ZSkpOih0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YTpkYXRhfSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2VzY2FwZWRfc3RhdGUpKSwhMH1mdW5jdGlvbiBzY3JpcHRfZGF0YV9lc2NhcGVkX2xlc3NfdGhlbl9zaWduX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtyZXR1cm4iLyI9PT1kYXRhPyh0aGlzLl90ZW1wb3JhcnlCdWZmZXI9IiIsdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2VzY2FwZWRfZW5kX3RhZ19vcGVuX3N0YXRlKSk6aXNBbHBoYShkYXRhKT8odG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6IjwiK2RhdGF9KSx0aGlzLl90ZW1wb3JhcnlCdWZmZXI9ZGF0YSx0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZV9zdGFydF9zdGF0ZSkpOih0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToiPCJ9KSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2VzY2FwZWRfc3RhdGUpKSwhMH1mdW5jdGlvbiBzY3JpcHRfZGF0YV9lc2NhcGVkX2VuZF90YWdfb3Blbl9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGlzQWxwaGEoZGF0YSk/KHRoaXMuX3RlbXBvcmFyeUJ1ZmZlcj1kYXRhLHRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lc2NhcGVkX2VuZF90YWdfbmFtZV9zdGF0ZSkpOih0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToiPC8ifSksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lc2NhcGVkX3N0YXRlKSksITB9ZnVuY3Rpb24gc2NyaXB0X2RhdGFfZXNjYXBlZF9lbmRfdGFnX25hbWVfc3RhdGUoYnVmZmVyKXt2YXIgYXBwcm9wcmlhdGU9dG9rZW5pemVyLl9jdXJyZW50VG9rZW4mJnRva2VuaXplci5fY3VycmVudFRva2VuLm5hbWU9PT10aGlzLl90ZW1wb3JhcnlCdWZmZXIudG9Mb3dlckNhc2UoKSxkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGlzV2hpdGVzcGFjZShkYXRhKSYmYXBwcm9wcmlhdGU/KHRva2VuaXplci5fY3VycmVudFRva2VuPXt0eXBlOiJFbmRUYWciLG5hbWU6InNjcmlwdCIsZGF0YTpbXSxzZWxmQ2xvc2luZzohMX0sdG9rZW5pemVyLnNldFN0YXRlKGJlZm9yZV9hdHRyaWJ1dGVfbmFtZV9zdGF0ZSkpOiIvIj09PWRhdGEmJmFwcHJvcHJpYXRlPyh0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbj17dHlwZToiRW5kVGFnIixuYW1lOiJzY3JpcHQiLGRhdGE6W10sc2VsZkNsb3Npbmc6ITF9LHRva2VuaXplci5zZXRTdGF0ZShzZWxmX2Nsb3NpbmdfdGFnX3N0YXRlKSk6Ij4iPT09ZGF0YSYmYXBwcm9wcmlhdGU/KHRva2VuaXplci5fY3VycmVudFRva2VuPXt0eXBlOiJFbmRUYWciLG5hbWU6InNjcmlwdCIsZGF0YTpbXSxzZWxmQ2xvc2luZzohMX0sdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpLHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpKTppc0FscGhhKGRhdGEpPyh0aGlzLl90ZW1wb3JhcnlCdWZmZXIrPWRhdGEsYnVmZmVyLmNvbW1pdCgpKToodG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6IjwvIit0aGlzLl90ZW1wb3JhcnlCdWZmZXJ9KSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2VzY2FwZWRfc3RhdGUpKSwhMH1mdW5jdGlvbiBzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlX3N0YXJ0X3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtyZXR1cm4gaXNXaGl0ZXNwYWNlKGRhdGEpfHwiLyI9PT1kYXRhfHwiPiI9PT1kYXRhPyh0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YTpkYXRhfSksInNjcmlwdCI9PT10aGlzLl90ZW1wb3JhcnlCdWZmZXIudG9Mb3dlckNhc2UoKT90b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfc3RhdGUpOnRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lc2NhcGVkX3N0YXRlKSk6aXNBbHBoYShkYXRhKT8odG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6ZGF0YX0pLHRoaXMuX3RlbXBvcmFyeUJ1ZmZlcis9ZGF0YSxidWZmZXIuY29tbWl0KCkpOihidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2VzY2FwZWRfc3RhdGUpKSwhMH1mdW5jdGlvbiBzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlZF9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLXNjcmlwdCIpLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSkpOiItIj09PWRhdGE/KHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOiItIn0pLHRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlZF9kYXNoX3N0YXRlKSk6IjwiPT09ZGF0YT8odG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6IjwifSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2RvdWJsZV9lc2NhcGVkX2xlc3NfdGhhbl9zaWduX3N0YXRlKSk6IlxcMCI9PT1kYXRhPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50IiksdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6Iu+/vSJ9KSxidWZmZXIuY29tbWl0KCkpOih0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YTpkYXRhfSksYnVmZmVyLmNvbW1pdCgpKSwhMH1mdW5jdGlvbiBzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlZF9kYXNoX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtyZXR1cm4gZGF0YT09PUlucHV0U3RyZWFtLkVPRj8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tc2NyaXB0IiksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6Ii0iPT09ZGF0YT8odG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6Ii0ifSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2RvdWJsZV9lc2NhcGVkX2Rhc2hfZGFzaF9zdGF0ZSkpOiI8Ij09PWRhdGE/KHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOiI8In0pLHRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlZF9sZXNzX3RoYW5fc2lnbl9zdGF0ZSkpOiJcXDAiPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpLHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOiLvv70ifSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2RvdWJsZV9lc2NhcGVkX3N0YXRlKSk6KHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOmRhdGF9KSx0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfc3RhdGUpKSwhMH1mdW5jdGlvbiBzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlZF9kYXNoX2Rhc2hfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiBkYXRhPT09SW5wdXRTdHJlYW0uRU9GPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1pbi1zY3JpcHQiKSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpKToiLSI9PT1kYXRhPyh0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToiLSJ9KSxidWZmZXIuY29tbWl0KCkpOiI8Ij09PWRhdGE/KHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOiI8In0pLHRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlZF9sZXNzX3RoYW5fc2lnbl9zdGF0ZSkpOiI+Ij09PWRhdGE/KHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOiI+In0pLHRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9zdGF0ZSkpOiJcXDAiPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpLHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOiLvv70ifSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2RvdWJsZV9lc2NhcGVkX3N0YXRlKSk6KHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOmRhdGF9KSx0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfc3RhdGUpKSwhMH1mdW5jdGlvbiBzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlZF9sZXNzX3RoYW5fc2lnbl9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIi8iPT09ZGF0YT8odG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6Ii8ifSksdGhpcy5fdGVtcG9yYXJ5QnVmZmVyPSIiLHRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlX2VuZF9zdGF0ZSkpOihidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2RvdWJsZV9lc2NhcGVkX3N0YXRlKSksITB9ZnVuY3Rpb24gc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZV9lbmRfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiBpc1doaXRlc3BhY2UoZGF0YSl8fCIvIj09PWRhdGF8fCI+Ij09PWRhdGE/KHRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiJDaGFyYWN0ZXJzIixkYXRhOmRhdGF9KSwic2NyaXB0Ij09PXRoaXMuX3RlbXBvcmFyeUJ1ZmZlci50b0xvd2VyQ2FzZSgpP3Rva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lc2NhcGVkX3N0YXRlKTp0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfc3RhdGUpKTppc0FscGhhKGRhdGEpPyh0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YTpkYXRhfSksdGhpcy5fdGVtcG9yYXJ5QnVmZmVyKz1kYXRhLGJ1ZmZlci5jb21taXQoKSk6KGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfc3RhdGUpKSwhMH1mdW5jdGlvbiB0YWdfb3Blbl9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiYmFyZS1sZXNzLXRoYW4tc2lnbi1hdC1lb2YiKSx0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToiPCJ9KSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpKTppc0FscGhhKGRhdGEpPyh0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbj17dHlwZToiU3RhcnRUYWciLG5hbWU6ZGF0YS50b0xvd2VyQ2FzZSgpLGRhdGE6W119LHRva2VuaXplci5zZXRTdGF0ZSh0YWdfbmFtZV9zdGF0ZSkpOiIhIj09PWRhdGE/dG9rZW5pemVyLnNldFN0YXRlKG1hcmt1cF9kZWNsYXJhdGlvbl9vcGVuX3N0YXRlKToiLyI9PT1kYXRhP3Rva2VuaXplci5zZXRTdGF0ZShjbG9zZV90YWdfb3Blbl9zdGF0ZSk6Ij4iPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJleHBlY3RlZC10YWctbmFtZS1idXQtZ290LXJpZ2h0LWJyYWNrZXQiKSx0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YToiPD4ifSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpKToiPyI9PT1kYXRhPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLXRhZy1uYW1lLWJ1dC1nb3QtcXVlc3Rpb24tbWFyayIpLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoYm9ndXNfY29tbWVudF9zdGF0ZSkpOih0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLXRhZy1uYW1lIiksdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6IjwifSksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSksITB9ZnVuY3Rpb24gY2xvc2VfdGFnX29wZW5fc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiBkYXRhPT09SW5wdXRTdHJlYW0uRU9GPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLWNsb3NpbmctdGFnLWJ1dC1nb3QtZW9mIiksdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6IkNoYXJhY3RlcnMiLGRhdGE6IjwvIn0pLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSkpOmlzQWxwaGEoZGF0YSk/KHRva2VuaXplci5fY3VycmVudFRva2VuPXt0eXBlOiJFbmRUYWciLG5hbWU6ZGF0YS50b0xvd2VyQ2FzZSgpLGRhdGE6W119LHRva2VuaXplci5zZXRTdGF0ZSh0YWdfbmFtZV9zdGF0ZSkpOiI+Ij09PWRhdGE/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtY2xvc2luZy10YWctYnV0LWdvdC1yaWdodC1icmFja2V0IiksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpKToodG9rZW5pemVyLl9wYXJzZUVycm9yKCJleHBlY3RlZC1jbG9zaW5nLXRhZy1idXQtZ290LWNoYXIiLHtkYXRhOmRhdGF9KSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGJvZ3VzX2NvbW1lbnRfc3RhdGUpKSwhMH1mdW5jdGlvbiB0YWdfbmFtZV9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLXRhZy1uYW1lIiksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6aXNXaGl0ZXNwYWNlKGRhdGEpP3Rva2VuaXplci5zZXRTdGF0ZShiZWZvcmVfYXR0cmlidXRlX25hbWVfc3RhdGUpOmlzQWxwaGEoZGF0YSk/dG9rZW5pemVyLl9jdXJyZW50VG9rZW4ubmFtZSs9ZGF0YS50b0xvd2VyQ2FzZSgpOiI+Ij09PWRhdGE/dG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCk6Ii8iPT09ZGF0YT90b2tlbml6ZXIuc2V0U3RhdGUoc2VsZl9jbG9zaW5nX3RhZ19zdGF0ZSk6IlxcMCI9PT1kYXRhPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50IiksdG9rZW5pemVyLl9jdXJyZW50VG9rZW4ubmFtZSs9Iu+/vSIpOnRva2VuaXplci5fY3VycmVudFRva2VuLm5hbWUrPWRhdGEsYnVmZmVyLmNvbW1pdCgpLCEwfWZ1bmN0aW9uIGJlZm9yZV9hdHRyaWJ1dGVfbmFtZV9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7aWYoZGF0YT09PUlucHV0U3RyZWFtLkVPRil0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLWF0dHJpYnV0ZS1uYW1lLWJ1dC1nb3QtZW9mIiksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTtlbHNle2lmKGlzV2hpdGVzcGFjZShkYXRhKSlyZXR1cm4hMDtpc0FscGhhKGRhdGEpPyh0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5kYXRhLnB1c2goe25vZGVOYW1lOmRhdGEudG9Mb3dlckNhc2UoKSxub2RlVmFsdWU6IiJ9KSx0b2tlbml6ZXIuc2V0U3RhdGUoYXR0cmlidXRlX25hbWVfc3RhdGUpKToiPiI9PT1kYXRhP3Rva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpOiIvIj09PWRhdGE/dG9rZW5pemVyLnNldFN0YXRlKHNlbGZfY2xvc2luZ190YWdfc3RhdGUpOiJcJyI9PT1kYXRhfHxcJyJcJz09PWRhdGF8fCI9Ij09PWRhdGF8fCI8Ij09PWRhdGE/KHRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jaGFyYWN0ZXItaW4tYXR0cmlidXRlLW5hbWUiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5kYXRhLnB1c2goe25vZGVOYW1lOmRhdGEsbm9kZVZhbHVlOiIifSksdG9rZW5pemVyLnNldFN0YXRlKGF0dHJpYnV0ZV9uYW1lX3N0YXRlKSk6IlxcMCI9PT1kYXRhPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50IiksdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZGF0YS5wdXNoKHtub2RlTmFtZToi77+9Iixub2RlVmFsdWU6IiJ9KSk6KHRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGEucHVzaCh7bm9kZU5hbWU6ZGF0YSxub2RlVmFsdWU6IiJ9KSx0b2tlbml6ZXIuc2V0U3RhdGUoYXR0cmlidXRlX25hbWVfc3RhdGUpKX1yZXR1cm4hMH1mdW5jdGlvbiBhdHRyaWJ1dGVfbmFtZV9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCksbGVhdmluZ1RoaXNTdGF0ZT0hMCxzaG91bGRFbWl0PSExO2lmKGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWF0dHJpYnV0ZS1uYW1lIiksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSxzaG91bGRFbWl0PSEwKToiPSI9PT1kYXRhP3Rva2VuaXplci5zZXRTdGF0ZShiZWZvcmVfYXR0cmlidXRlX3ZhbHVlX3N0YXRlKTppc0FscGhhKGRhdGEpPyh0b2tlbml6ZXIuX2N1cnJlbnRBdHRyaWJ1dGUoKS5ub2RlTmFtZSs9ZGF0YS50b0xvd2VyQ2FzZSgpLGxlYXZpbmdUaGlzU3RhdGU9ITEpOiI+Ij09PWRhdGE/c2hvdWxkRW1pdD0hMDppc1doaXRlc3BhY2UoZGF0YSk/dG9rZW5pemVyLnNldFN0YXRlKGFmdGVyX2F0dHJpYnV0ZV9uYW1lX3N0YXRlKToiLyI9PT1kYXRhP3Rva2VuaXplci5zZXRTdGF0ZShzZWxmX2Nsb3NpbmdfdGFnX3N0YXRlKToiXCciPT09ZGF0YXx8XCciXCc9PT1kYXRhPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY2hhcmFjdGVyLWluLWF0dHJpYnV0ZS1uYW1lIiksdG9rZW5pemVyLl9jdXJyZW50QXR0cmlidXRlKCkubm9kZU5hbWUrPWRhdGEsbGVhdmluZ1RoaXNTdGF0ZT0hMSk6IlxcMCI9PT1kYXRhPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50IiksdG9rZW5pemVyLl9jdXJyZW50QXR0cmlidXRlKCkubm9kZU5hbWUrPSLvv70iKToodG9rZW5pemVyLl9jdXJyZW50QXR0cmlidXRlKCkubm9kZU5hbWUrPWRhdGEsbGVhdmluZ1RoaXNTdGF0ZT0hMSksbGVhdmluZ1RoaXNTdGF0ZSl7Zm9yKHZhciBhdHRyaWJ1dGVzPXRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGEsY3VycmVudEF0dHJpYnV0ZT1hdHRyaWJ1dGVzW2F0dHJpYnV0ZXMubGVuZ3RoLTFdLGk9YXR0cmlidXRlcy5sZW5ndGgtMjtpPj0wO2ktLSlpZihjdXJyZW50QXR0cmlidXRlLm5vZGVOYW1lPT09YXR0cmlidXRlc1tpXS5ub2RlTmFtZSl7dG9rZW5pemVyLl9wYXJzZUVycm9yKCJkdXBsaWNhdGUtYXR0cmlidXRlIix7bmFtZTpjdXJyZW50QXR0cmlidXRlLm5vZGVOYW1lfSksY3VycmVudEF0dHJpYnV0ZS5ub2RlTmFtZT1udWxsO2JyZWFrfXNob3VsZEVtaXQmJnRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpfWVsc2UgYnVmZmVyLmNvbW1pdCgpO3JldHVybiEwfWZ1bmN0aW9uIGFmdGVyX2F0dHJpYnV0ZV9uYW1lX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtpZihkYXRhPT09SW5wdXRTdHJlYW0uRU9GKXRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtZW5kLW9mLXRhZy1idXQtZ290LWVvZiIpLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7ZWxzZXtpZihpc1doaXRlc3BhY2UoZGF0YSkpcmV0dXJuITA7Ij0iPT09ZGF0YT90b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2F0dHJpYnV0ZV92YWx1ZV9zdGF0ZSk6Ij4iPT09ZGF0YT90b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTppc0FscGhhKGRhdGEpPyh0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5kYXRhLnB1c2goe25vZGVOYW1lOmRhdGEsbm9kZVZhbHVlOiIifSksdG9rZW5pemVyLnNldFN0YXRlKGF0dHJpYnV0ZV9uYW1lX3N0YXRlKSk6Ii8iPT09ZGF0YT90b2tlbml6ZXIuc2V0U3RhdGUoc2VsZl9jbG9zaW5nX3RhZ19zdGF0ZSk6IlwnIj09PWRhdGF8fFwnIlwnPT09ZGF0YXx8IjwiPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNoYXJhY3Rlci1hZnRlci1hdHRyaWJ1dGUtbmFtZSIpLHRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGEucHVzaCh7bm9kZU5hbWU6ZGF0YSxub2RlVmFsdWU6IiJ9KSx0b2tlbml6ZXIuc2V0U3RhdGUoYXR0cmlidXRlX25hbWVfc3RhdGUpKToiXFwwIj09PWRhdGE/KHRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5kYXRhLnB1c2goe25vZGVOYW1lOiLvv70iLG5vZGVWYWx1ZToiIn0pKToodG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZGF0YS5wdXNoKHtub2RlTmFtZTpkYXRhLG5vZGVWYWx1ZToiIn0pLHRva2VuaXplci5zZXRTdGF0ZShhdHRyaWJ1dGVfbmFtZV9zdGF0ZSkpfXJldHVybiEwfWZ1bmN0aW9uIGJlZm9yZV9hdHRyaWJ1dGVfdmFsdWVfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO2lmKGRhdGE9PT1JbnB1dFN0cmVhbS5FT0YpdG9rZW5pemVyLl9wYXJzZUVycm9yKCJleHBlY3RlZC1hdHRyaWJ1dGUtdmFsdWUtYnV0LWdvdC1lb2YiKSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpO2Vsc2V7aWYoaXNXaGl0ZXNwYWNlKGRhdGEpKXJldHVybiEwO1wnIlwnPT09ZGF0YT90b2tlbml6ZXIuc2V0U3RhdGUoYXR0cmlidXRlX3ZhbHVlX2RvdWJsZV9xdW90ZWRfc3RhdGUpOiImIj09PWRhdGE/KHRva2VuaXplci5zZXRTdGF0ZShhdHRyaWJ1dGVfdmFsdWVfdW5xdW90ZWRfc3RhdGUpLGJ1ZmZlci51bmdldChkYXRhKSk6IlwnIj09PWRhdGE/dG9rZW5pemVyLnNldFN0YXRlKGF0dHJpYnV0ZV92YWx1ZV9zaW5nbGVfcXVvdGVkX3N0YXRlKToiPiI9PT1kYXRhPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLWF0dHJpYnV0ZS12YWx1ZS1idXQtZ290LXJpZ2h0LWJyYWNrZXQiKSx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKSk6Ij0iPT09ZGF0YXx8IjwiPT09ZGF0YXx8ImAiPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWNoYXJhY3Rlci1pbi11bnF1b3RlZC1hdHRyaWJ1dGUtdmFsdWUiKSx0b2tlbml6ZXIuX2N1cnJlbnRBdHRyaWJ1dGUoKS5ub2RlVmFsdWUrPWRhdGEsdG9rZW5pemVyLnNldFN0YXRlKGF0dHJpYnV0ZV92YWx1ZV91bnF1b3RlZF9zdGF0ZSkpOiJcXDAiPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpLHRva2VuaXplci5fY3VycmVudEF0dHJpYnV0ZSgpLm5vZGVWYWx1ZSs9Iu+/vSIpOih0b2tlbml6ZXIuX2N1cnJlbnRBdHRyaWJ1dGUoKS5ub2RlVmFsdWUrPWRhdGEsdG9rZW5pemVyLnNldFN0YXRlKGF0dHJpYnV0ZV92YWx1ZV91bnF1b3RlZF9zdGF0ZSkpfXJldHVybiEwXG59ZnVuY3Rpb24gYXR0cmlidXRlX3ZhbHVlX2RvdWJsZV9xdW90ZWRfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO2lmKGRhdGE9PT1JbnB1dFN0cmVhbS5FT0YpdG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tYXR0cmlidXRlLXZhbHVlLWRvdWJsZS1xdW90ZSIpLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7ZWxzZSBpZihcJyJcJz09PWRhdGEpdG9rZW5pemVyLnNldFN0YXRlKGFmdGVyX2F0dHJpYnV0ZV92YWx1ZV9zdGF0ZSk7ZWxzZSBpZigiJiI9PT1kYXRhKXRoaXMuX2FkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyPVwnIlwnLHRva2VuaXplci5zZXRTdGF0ZShjaGFyYWN0ZXJfcmVmZXJlbmNlX2luX2F0dHJpYnV0ZV92YWx1ZV9zdGF0ZSk7ZWxzZSBpZigiXFwwIj09PWRhdGEpdG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpLHRva2VuaXplci5fY3VycmVudEF0dHJpYnV0ZSgpLm5vZGVWYWx1ZSs9Iu+/vSI7ZWxzZXt2YXIgcz1idWZmZXIubWF0Y2hVbnRpbChcJ1tcXDAiJl1cJyk7ZGF0YSs9cyx0b2tlbml6ZXIuX2N1cnJlbnRBdHRyaWJ1dGUoKS5ub2RlVmFsdWUrPWRhdGF9cmV0dXJuITB9ZnVuY3Rpb24gYXR0cmlidXRlX3ZhbHVlX3NpbmdsZV9xdW90ZWRfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiBkYXRhPT09SW5wdXRTdHJlYW0uRU9GPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1pbi1hdHRyaWJ1dGUtdmFsdWUtc2luZ2xlLXF1b3RlIiksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6IlwnIj09PWRhdGE/dG9rZW5pemVyLnNldFN0YXRlKGFmdGVyX2F0dHJpYnV0ZV92YWx1ZV9zdGF0ZSk6IiYiPT09ZGF0YT8odGhpcy5fYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXI9IlwnIix0b2tlbml6ZXIuc2V0U3RhdGUoY2hhcmFjdGVyX3JlZmVyZW5jZV9pbl9hdHRyaWJ1dGVfdmFsdWVfc3RhdGUpKToiXFwwIj09PWRhdGE/KHRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKSx0b2tlbml6ZXIuX2N1cnJlbnRBdHRyaWJ1dGUoKS5ub2RlVmFsdWUrPSLvv70iKTp0b2tlbml6ZXIuX2N1cnJlbnRBdHRyaWJ1dGUoKS5ub2RlVmFsdWUrPWRhdGErYnVmZmVyLm1hdGNoVW50aWwoIlxcMHxbXCcmXSIpLCEwfWZ1bmN0aW9uIGF0dHJpYnV0ZV92YWx1ZV91bnF1b3RlZF9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7aWYoZGF0YT09PUlucHV0U3RyZWFtLkVPRil0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1hZnRlci1hdHRyaWJ1dGUtdmFsdWUiKSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpO2Vsc2UgaWYoaXNXaGl0ZXNwYWNlKGRhdGEpKXRva2VuaXplci5zZXRTdGF0ZShiZWZvcmVfYXR0cmlidXRlX25hbWVfc3RhdGUpO2Vsc2UgaWYoIiYiPT09ZGF0YSl0aGlzLl9hZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rlcj0iPiIsdG9rZW5pemVyLnNldFN0YXRlKGNoYXJhY3Rlcl9yZWZlcmVuY2VfaW5fYXR0cmlidXRlX3ZhbHVlX3N0YXRlKTtlbHNlIGlmKCI+Ij09PWRhdGEpdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCk7ZWxzZSBpZihcJyJcJz09PWRhdGF8fCJcJyI9PT1kYXRhfHwiPSI9PT1kYXRhfHwiYCI9PT1kYXRhfHwiPCI9PT1kYXRhKXRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyYWN0ZXItaW4tdW5xdW90ZWQtYXR0cmlidXRlLXZhbHVlIiksdG9rZW5pemVyLl9jdXJyZW50QXR0cmlidXRlKCkubm9kZVZhbHVlKz1kYXRhLGJ1ZmZlci5jb21taXQoKTtlbHNlIGlmKCJcXDAiPT09ZGF0YSl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50IiksdG9rZW5pemVyLl9jdXJyZW50QXR0cmlidXRlKCkubm9kZVZhbHVlKz0i77+9IjtlbHNle3ZhciBvPWJ1ZmZlci5tYXRjaFVudGlsKCJcXDB8W1x0XFxuXHZcXGYgXFxyJjw+XFwiXCc9YF0iKTtvPT09SW5wdXRTdHJlYW0uRU9GJiYodG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tYXR0cmlidXRlLXZhbHVlLW5vLXF1b3RlcyIpLHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpKSxidWZmZXIuY29tbWl0KCksdG9rZW5pemVyLl9jdXJyZW50QXR0cmlidXRlKCkubm9kZVZhbHVlKz1kYXRhK299cmV0dXJuITB9ZnVuY3Rpb24gY2hhcmFjdGVyX3JlZmVyZW5jZV9pbl9hdHRyaWJ1dGVfdmFsdWVfc3RhdGUoYnVmZmVyKXt2YXIgY2hhcmFjdGVyPUVudGl0eVBhcnNlci5jb25zdW1lRW50aXR5KGJ1ZmZlcix0b2tlbml6ZXIsdGhpcy5fYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpO3JldHVybiB0aGlzLl9jdXJyZW50QXR0cmlidXRlKCkubm9kZVZhbHVlKz1jaGFyYWN0ZXJ8fCImIixcJyJcJz09PXRoaXMuX2FkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyP3Rva2VuaXplci5zZXRTdGF0ZShhdHRyaWJ1dGVfdmFsdWVfZG91YmxlX3F1b3RlZF9zdGF0ZSk6IlwnIj09PXRoaXMuX2FkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyP3Rva2VuaXplci5zZXRTdGF0ZShhdHRyaWJ1dGVfdmFsdWVfc2luZ2xlX3F1b3RlZF9zdGF0ZSk6Ij4iPT09dGhpcy5fYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXImJnRva2VuaXplci5zZXRTdGF0ZShhdHRyaWJ1dGVfdmFsdWVfdW5xdW90ZWRfc3RhdGUpLCEwfWZ1bmN0aW9uIGFmdGVyX2F0dHJpYnV0ZV92YWx1ZV9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWFmdGVyLWF0dHJpYnV0ZS12YWx1ZSIpLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSkpOmlzV2hpdGVzcGFjZShkYXRhKT90b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2F0dHJpYnV0ZV9uYW1lX3N0YXRlKToiPiI9PT1kYXRhPyh0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSksdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCkpOiIvIj09PWRhdGE/dG9rZW5pemVyLnNldFN0YXRlKHNlbGZfY2xvc2luZ190YWdfc3RhdGUpOih0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtY2hhcmFjdGVyLWFmdGVyLWF0dHJpYnV0ZS12YWx1ZSIpLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2F0dHJpYnV0ZV9uYW1lX3N0YXRlKSksITB9ZnVuY3Rpb24gc2VsZl9jbG9zaW5nX3RhZ19zdGF0ZShidWZmZXIpe3ZhciBjPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGM9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1lb2YtYWZ0ZXItc29saWR1cy1pbi10YWciKSxidWZmZXIudW5nZXQoYyksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpKToiPiI9PT1jPyh0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5zZWxmQ2xvc2luZz0hMCx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSksdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCkpOih0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtY2hhcmFjdGVyLWFmdGVyLXNvbGlkdXMtaW4tdGFnIiksYnVmZmVyLnVuZ2V0KGMpLHRva2VuaXplci5zZXRTdGF0ZShiZWZvcmVfYXR0cmlidXRlX25hbWVfc3RhdGUpKSwhMH1mdW5jdGlvbiBib2d1c19jb21tZW50X3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLm1hdGNoVW50aWwoIj4iKTtyZXR1cm4gZGF0YT1kYXRhLnJlcGxhY2UoL1xcdTAwMDAvZywi77+9IiksYnVmZmVyLmNoYXIoKSx0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ29tbWVudCIsZGF0YTpkYXRhfSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpLCEwfWZ1bmN0aW9uIG1hcmt1cF9kZWNsYXJhdGlvbl9vcGVuX3N0YXRlKGJ1ZmZlcil7dmFyIGNoYXJzPWJ1ZmZlci5zaGlmdCgyKTtpZigiLS0iPT09Y2hhcnMpdG9rZW5pemVyLl9jdXJyZW50VG9rZW49e3R5cGU6IkNvbW1lbnQiLGRhdGE6IiJ9LHRva2VuaXplci5zZXRTdGF0ZShjb21tZW50X3N0YXJ0X3N0YXRlKTtlbHNle3ZhciBuZXdjaGFycz1idWZmZXIuc2hpZnQoNSk7aWYobmV3Y2hhcnM9PT1JbnB1dFN0cmVhbS5FT0Z8fGNoYXJzPT09SW5wdXRTdHJlYW0uRU9GKXJldHVybiB0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLWRhc2hlcy1vci1kb2N0eXBlIiksdG9rZW5pemVyLnNldFN0YXRlKGJvZ3VzX2NvbW1lbnRfc3RhdGUpLGJ1ZmZlci51bmdldChjaGFycyksITA7Y2hhcnMrPW5ld2NoYXJzLCJET0NUWVBFIj09PWNoYXJzLnRvVXBwZXJDYXNlKCk/KHRva2VuaXplci5fY3VycmVudFRva2VuPXt0eXBlOiJEb2N0eXBlIixuYW1lOiIiLHB1YmxpY0lkOm51bGwsc3lzdGVtSWQ6bnVsbCxmb3JjZVF1aXJrczohMX0sdG9rZW5pemVyLnNldFN0YXRlKGRvY3R5cGVfc3RhdGUpKTp0b2tlbml6ZXIuX3Rva2VuSGFuZGxlci5pc0NkYXRhU2VjdGlvbkFsbG93ZWQoKSYmIltDREFUQVsiPT09Y2hhcnM/dG9rZW5pemVyLnNldFN0YXRlKGNkYXRhX3NlY3Rpb25fc3RhdGUpOih0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLWRhc2hlcy1vci1kb2N0eXBlIiksYnVmZmVyLnVuZ2V0KGNoYXJzKSx0b2tlbml6ZXIuc2V0U3RhdGUoYm9ndXNfY29tbWVudF9zdGF0ZSkpfXJldHVybiEwfWZ1bmN0aW9uIGNkYXRhX3NlY3Rpb25fc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIubWF0Y2hVbnRpbCgiXV0+Iik7cmV0dXJuIGJ1ZmZlci5zaGlmdCgzKSxkYXRhJiZ0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZToiQ2hhcmFjdGVycyIsZGF0YTpkYXRhfSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpLCEwfWZ1bmN0aW9uIGNvbW1lbnRfc3RhcnRfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiBkYXRhPT09SW5wdXRTdHJlYW0uRU9GPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1pbi1jb21tZW50IiksdG9rZW5pemVyLl9lbWl0VG9rZW4odG9rZW5pemVyLl9jdXJyZW50VG9rZW4pLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSkpOiItIj09PWRhdGE/dG9rZW5pemVyLnNldFN0YXRlKGNvbW1lbnRfc3RhcnRfZGFzaF9zdGF0ZSk6Ij4iPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbmNvcnJlY3QtY29tbWVudCIpLHRva2VuaXplci5fZW1pdFRva2VuKHRva2VuaXplci5fY3VycmVudFRva2VuKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSkpOiJcXDAiPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpLHRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGErPSLvv70iKToodG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZGF0YSs9ZGF0YSx0b2tlbml6ZXIuc2V0U3RhdGUoY29tbWVudF9zdGF0ZSkpLCEwfWZ1bmN0aW9uIGNvbW1lbnRfc3RhcnRfZGFzaF9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWNvbW1lbnQiKSx0b2tlbml6ZXIuX2VtaXRUb2tlbih0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbiksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6Ii0iPT09ZGF0YT90b2tlbml6ZXIuc2V0U3RhdGUoY29tbWVudF9lbmRfc3RhdGUpOiI+Ij09PWRhdGE/KHRva2VuaXplci5fcGFyc2VFcnJvcigiaW5jb3JyZWN0LWNvbW1lbnQiKSx0b2tlbml6ZXIuX2VtaXRUb2tlbih0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbiksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpKToiXFwwIj09PWRhdGE/KHRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5kYXRhKz0i77+9Iik6KHRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGErPSItIitkYXRhLHRva2VuaXplci5zZXRTdGF0ZShjb21tZW50X3N0YXRlKSksITB9ZnVuY3Rpb24gY29tbWVudF9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWNvbW1lbnQiKSx0b2tlbml6ZXIuX2VtaXRUb2tlbih0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbiksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6Ii0iPT09ZGF0YT90b2tlbml6ZXIuc2V0U3RhdGUoY29tbWVudF9lbmRfZGFzaF9zdGF0ZSk6IlxcMCI9PT1kYXRhPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50IiksdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZGF0YSs9Iu+/vSIpOih0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5kYXRhKz1kYXRhLGJ1ZmZlci5jb21taXQoKSksITB9ZnVuY3Rpb24gY29tbWVudF9lbmRfZGFzaF9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWNvbW1lbnQtZW5kLWRhc2giKSx0b2tlbml6ZXIuX2VtaXRUb2tlbih0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbiksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6Ii0iPT09ZGF0YT90b2tlbml6ZXIuc2V0U3RhdGUoY29tbWVudF9lbmRfc3RhdGUpOiJcXDAiPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpLHRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGErPSIt77+9Iix0b2tlbml6ZXIuc2V0U3RhdGUoY29tbWVudF9zdGF0ZSkpOih0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5kYXRhKz0iLSIrZGF0YStidWZmZXIubWF0Y2hVbnRpbCgiXFwwfC0iKSxidWZmZXIuY2hhcigpKSwhMH1mdW5jdGlvbiBjb21tZW50X2VuZF9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWNvbW1lbnQtZG91YmxlLWRhc2giKSx0b2tlbml6ZXIuX2VtaXRUb2tlbih0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbiksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6Ij4iPT09ZGF0YT8odG9rZW5pemVyLl9lbWl0VG9rZW4odG9rZW5pemVyLl9jdXJyZW50VG9rZW4pLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6IiEiPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWJhbmctYWZ0ZXItZG91YmxlLWRhc2gtaW4tY29tbWVudCIpLHRva2VuaXplci5zZXRTdGF0ZShjb21tZW50X2VuZF9iYW5nX3N0YXRlKSk6Ii0iPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWRhc2gtYWZ0ZXItZG91YmxlLWRhc2gtaW4tY29tbWVudCIpLHRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGErPWRhdGEpOiJcXDAiPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpLHRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGErPSItLe+/vSIsdG9rZW5pemVyLnNldFN0YXRlKGNvbW1lbnRfc3RhdGUpKToodG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWNoYXItaW4tY29tbWVudCIpLHRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGErPSItLSIrZGF0YSx0b2tlbml6ZXIuc2V0U3RhdGUoY29tbWVudF9zdGF0ZSkpLCEwfWZ1bmN0aW9uIGNvbW1lbnRfZW5kX2Jhbmdfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiBkYXRhPT09SW5wdXRTdHJlYW0uRU9GPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1pbi1jb21tZW50LWVuZC1iYW5nLXN0YXRlIiksdG9rZW5pemVyLl9lbWl0VG9rZW4odG9rZW5pemVyLl9jdXJyZW50VG9rZW4pLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSkpOiI+Ij09PWRhdGE/KHRva2VuaXplci5fZW1pdFRva2VuKHRva2VuaXplci5fY3VycmVudFRva2VuKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSkpOiItIj09PWRhdGE/KHRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGErPSItLSEiLHRva2VuaXplci5zZXRTdGF0ZShjb21tZW50X2VuZF9kYXNoX3N0YXRlKSk6KHRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGErPSItLSEiK2RhdGEsdG9rZW5pemVyLnNldFN0YXRlKGNvbW1lbnRfc3RhdGUpKSwhMH1mdW5jdGlvbiBkb2N0eXBlX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtyZXR1cm4gZGF0YT09PUlucHV0U3RyZWFtLkVPRj8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJleHBlY3RlZC1kb2N0eXBlLW5hbWUtYnV0LWdvdC1lb2YiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcz0hMCxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpLHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpKTppc1doaXRlc3BhY2UoZGF0YSk/dG9rZW5pemVyLnNldFN0YXRlKGJlZm9yZV9kb2N0eXBlX25hbWVfc3RhdGUpOih0b2tlbml6ZXIuX3BhcnNlRXJyb3IoIm5lZWQtc3BhY2UtYWZ0ZXItZG9jdHlwZSIpLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2RvY3R5cGVfbmFtZV9zdGF0ZSkpLCEwfWZ1bmN0aW9uIGJlZm9yZV9kb2N0eXBlX25hbWVfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiBkYXRhPT09SW5wdXRTdHJlYW0uRU9GPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLWRvY3R5cGUtbmFtZS1idXQtZ290LWVvZiIpLHRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzPSEwLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSksdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCkpOmlzV2hpdGVzcGFjZShkYXRhKXx8KCI+Ij09PWRhdGE/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtZG9jdHlwZS1uYW1lLWJ1dC1nb3QtcmlnaHQtYnJhY2tldCIpLHRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzPSEwLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKSk6KGlzQWxwaGEoZGF0YSkmJihkYXRhPWRhdGEudG9Mb3dlckNhc2UoKSksdG9rZW5pemVyLl9jdXJyZW50VG9rZW4ubmFtZT1kYXRhLHRva2VuaXplci5zZXRTdGF0ZShkb2N0eXBlX25hbWVfc3RhdGUpKSksITB9ZnVuY3Rpb24gZG9jdHlwZV9uYW1lX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtyZXR1cm4gZGF0YT09PUlucHV0U3RyZWFtLkVPRj8odG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3M9ITAsYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWRvY3R5cGUtbmFtZSIpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKSk6aXNXaGl0ZXNwYWNlKGRhdGEpP3Rva2VuaXplci5zZXRTdGF0ZShhZnRlcl9kb2N0eXBlX25hbWVfc3RhdGUpOiI+Ij09PWRhdGE/KHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKSk6KGlzQWxwaGEoZGF0YSkmJihkYXRhPWRhdGEudG9Mb3dlckNhc2UoKSksdG9rZW5pemVyLl9jdXJyZW50VG9rZW4ubmFtZSs9ZGF0YSxidWZmZXIuY29tbWl0KCkpLCEwfWZ1bmN0aW9uIGFmdGVyX2RvY3R5cGVfbmFtZV9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7aWYoZGF0YT09PUlucHV0U3RyZWFtLkVPRil0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcz0hMCxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tZG9jdHlwZSIpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTtlbHNlIGlmKGlzV2hpdGVzcGFjZShkYXRhKSk7ZWxzZSBpZigiPiI9PT1kYXRhKXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTtlbHNle2lmKFsicCIsIlAiXS5pbmRleE9mKGRhdGEpPi0xKXt2YXIgZXhwZWN0ZWQ9W1sidSIsIlUiXSxbImIiLCJCIl0sWyJsIiwiTCJdLFsiaSIsIkkiXSxbImMiLCJDIl1dLG1hdGNoZWQ9ZXhwZWN0ZWQuZXZlcnkoZnVuY3Rpb24oZXhwZWN0ZWQpe3JldHVybiBkYXRhPWJ1ZmZlci5jaGFyKCksZXhwZWN0ZWQuaW5kZXhPZihkYXRhKT4tMX0pO2lmKG1hdGNoZWQpcmV0dXJuIHRva2VuaXplci5zZXRTdGF0ZShhZnRlcl9kb2N0eXBlX3B1YmxpY19rZXl3b3JkX3N0YXRlKSwhMH1lbHNlIGlmKFsicyIsIlMiXS5pbmRleE9mKGRhdGEpPi0xKXt2YXIgZXhwZWN0ZWQ9W1sieSIsIlkiXSxbInMiLCJTIl0sWyJ0IiwiVCJdLFsiZSIsIkUiXSxbIm0iLCJNIl1dLG1hdGNoZWQ9ZXhwZWN0ZWQuZXZlcnkoZnVuY3Rpb24oZXhwZWN0ZWQpe3JldHVybiBkYXRhPWJ1ZmZlci5jaGFyKCksZXhwZWN0ZWQuaW5kZXhPZihkYXRhKT4tMX0pO2lmKG1hdGNoZWQpcmV0dXJuIHRva2VuaXplci5zZXRTdGF0ZShhZnRlcl9kb2N0eXBlX3N5c3RlbV9rZXl3b3JkX3N0YXRlKSwhMH1idWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3M9ITAsZGF0YT09PUlucHV0U3RyZWFtLkVPRj8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tZG9jdHlwZSIpLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSksdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCkpOih0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLXNwYWNlLW9yLXJpZ2h0LWJyYWNrZXQtaW4tZG9jdHlwZSIse2RhdGE6ZGF0YX0pLHRva2VuaXplci5zZXRTdGF0ZShib2d1c19kb2N0eXBlX3N0YXRlKSl9cmV0dXJuITB9ZnVuY3Rpb24gYWZ0ZXJfZG9jdHlwZV9wdWJsaWNfa2V5d29yZF9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWRvY3R5cGUiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcz0hMCxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpLHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpKTppc1doaXRlc3BhY2UoZGF0YSk/dG9rZW5pemVyLnNldFN0YXRlKGJlZm9yZV9kb2N0eXBlX3B1YmxpY19pZGVudGlmaWVyX3N0YXRlKToiXCciPT09ZGF0YXx8XCciXCc9PT1kYXRhPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtY2hhci1pbi1kb2N0eXBlIiksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShiZWZvcmVfZG9jdHlwZV9wdWJsaWNfaWRlbnRpZmllcl9zdGF0ZSkpOihidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGJlZm9yZV9kb2N0eXBlX3B1YmxpY19pZGVudGlmaWVyX3N0YXRlKSksITB9ZnVuY3Rpb24gYmVmb3JlX2RvY3R5cGVfcHVibGljX2lkZW50aWZpZXJfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiBkYXRhPT09SW5wdXRTdHJlYW0uRU9GPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1pbi1kb2N0eXBlIiksdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3M9ITAsYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKSk6aXNXaGl0ZXNwYWNlKGRhdGEpfHwoXCciXCc9PT1kYXRhPyh0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5wdWJsaWNJZD0iIix0b2tlbml6ZXIuc2V0U3RhdGUoZG9jdHlwZV9wdWJsaWNfaWRlbnRpZmllcl9kb3VibGVfcXVvdGVkX3N0YXRlKSk6IlwnIj09PWRhdGE/KHRva2VuaXplci5fY3VycmVudFRva2VuLnB1YmxpY0lkPSIiLHRva2VuaXplci5zZXRTdGF0ZShkb2N0eXBlX3B1YmxpY19pZGVudGlmaWVyX3NpbmdsZV9xdW90ZWRfc3RhdGUpKToiPiI9PT1kYXRhPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLW9mLWRvY3R5cGUiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcz0hMCx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSksdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCkpOih0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtY2hhci1pbi1kb2N0eXBlIiksdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3M9ITAsdG9rZW5pemVyLnNldFN0YXRlKGJvZ3VzX2RvY3R5cGVfc3RhdGUpKSksITB9ZnVuY3Rpb24gZG9jdHlwZV9wdWJsaWNfaWRlbnRpZmllcl9kb3VibGVfcXVvdGVkX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtyZXR1cm4gZGF0YT09PUlucHV0U3RyZWFtLkVPRj8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tZG9jdHlwZSIpLHRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzPSEwLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSksdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCkpOlwnIlwnPT09ZGF0YT90b2tlbml6ZXIuc2V0U3RhdGUoYWZ0ZXJfZG9jdHlwZV9wdWJsaWNfaWRlbnRpZmllcl9zdGF0ZSk6Ij4iPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC1vZi1kb2N0eXBlIiksdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3M9ITAsdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpLHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpKTp0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5wdWJsaWNJZCs9ZGF0YSwhMH1mdW5jdGlvbiBkb2N0eXBlX3B1YmxpY19pZGVudGlmaWVyX3NpbmdsZV9xdW90ZWRfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiBkYXRhPT09SW5wdXRTdHJlYW0uRU9GPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1pbi1kb2N0eXBlIiksdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3M9ITAsYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKSk6IlwnIj09PWRhdGE/dG9rZW5pemVyLnNldFN0YXRlKGFmdGVyX2RvY3R5cGVfcHVibGljX2lkZW50aWZpZXJfc3RhdGUpOiI+Ij09PWRhdGE/KHRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtb2YtZG9jdHlwZSIpLHRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzPSEwLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKSk6dG9rZW5pemVyLl9jdXJyZW50VG9rZW4ucHVibGljSWQrPWRhdGEsITB9ZnVuY3Rpb24gYWZ0ZXJfZG9jdHlwZV9wdWJsaWNfaWRlbnRpZmllcl9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWRvY3R5cGUiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcz0hMCx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpKTppc1doaXRlc3BhY2UoZGF0YSk/dG9rZW5pemVyLnNldFN0YXRlKGJldHdlZW5fZG9jdHlwZV9wdWJsaWNfYW5kX3N5c3RlbV9pZGVudGlmaWVyc19zdGF0ZSk6Ij4iPT09ZGF0YT8odG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpLHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpKTpcJyJcJz09PWRhdGE/KHRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyLWluLWRvY3R5cGUiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5zeXN0ZW1JZD0iIix0b2tlbml6ZXIuc2V0U3RhdGUoZG9jdHlwZV9zeXN0ZW1faWRlbnRpZmllcl9kb3VibGVfcXVvdGVkX3N0YXRlKSk6IlwnIj09PWRhdGE/KHRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyLWluLWRvY3R5cGUiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5zeXN0ZW1JZD0iIix0b2tlbml6ZXIuc2V0U3RhdGUoZG9jdHlwZV9zeXN0ZW1faWRlbnRpZmllcl9zaW5nbGVfcXVvdGVkX3N0YXRlKSk6KHRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyLWluLWRvY3R5cGUiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcz0hMCx0b2tlbml6ZXIuc2V0U3RhdGUoYm9ndXNfZG9jdHlwZV9zdGF0ZSkpLCEwfWZ1bmN0aW9uIGJldHdlZW5fZG9jdHlwZV9wdWJsaWNfYW5kX3N5c3RlbV9pZGVudGlmaWVyc19zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWRvY3R5cGUiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcz0hMCx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpKTppc1doaXRlc3BhY2UoZGF0YSl8fCgiPiI9PT1kYXRhPyh0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSkpOlwnIlwnPT09ZGF0YT8odG9rZW5pemVyLl9jdXJyZW50VG9rZW4uc3lzdGVtSWQ9IiIsdG9rZW5pemVyLnNldFN0YXRlKGRvY3R5cGVfc3lzdGVtX2lkZW50aWZpZXJfZG91YmxlX3F1b3RlZF9zdGF0ZSkpOiJcJyI9PT1kYXRhPyh0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5zeXN0ZW1JZD0iIix0b2tlbml6ZXIuc2V0U3RhdGUoZG9jdHlwZV9zeXN0ZW1faWRlbnRpZmllcl9zaW5nbGVfcXVvdGVkX3N0YXRlKSk6KHRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyLWluLWRvY3R5cGUiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcz0hMCx0b2tlbml6ZXIuc2V0U3RhdGUoYm9ndXNfZG9jdHlwZV9zdGF0ZSkpKSwhMH1mdW5jdGlvbiBhZnRlcl9kb2N0eXBlX3N5c3RlbV9rZXl3b3JkX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtyZXR1cm4gZGF0YT09PUlucHV0U3RyZWFtLkVPRj8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tZG9jdHlwZSIpLHRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzPSEwLHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSkpOmlzV2hpdGVzcGFjZShkYXRhKT90b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2RvY3R5cGVfc3lzdGVtX2lkZW50aWZpZXJfc3RhdGUpOiJcJyI9PT1kYXRhfHxcJyJcJz09PWRhdGE/KHRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyLWluLWRvY3R5cGUiKSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGJlZm9yZV9kb2N0eXBlX3N5c3RlbV9pZGVudGlmaWVyX3N0YXRlKSk6KGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2RvY3R5cGVfc3lzdGVtX2lkZW50aWZpZXJfc3RhdGUpKSwhMH1mdW5jdGlvbiBiZWZvcmVfZG9jdHlwZV9zeXN0ZW1faWRlbnRpZmllcl9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWRvY3R5cGUiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcz0hMCx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpKTppc1doaXRlc3BhY2UoZGF0YSl8fChcJyJcJz09PWRhdGE/KHRva2VuaXplci5fY3VycmVudFRva2VuLnN5c3RlbUlkPSIiLHRva2VuaXplci5zZXRTdGF0ZShkb2N0eXBlX3N5c3RlbV9pZGVudGlmaWVyX2RvdWJsZV9xdW90ZWRfc3RhdGUpKToiXCciPT09ZGF0YT8odG9rZW5pemVyLl9jdXJyZW50VG9rZW4uc3lzdGVtSWQ9IiIsdG9rZW5pemVyLnNldFN0YXRlKGRvY3R5cGVfc3lzdGVtX2lkZW50aWZpZXJfc2luZ2xlX3F1b3RlZF9zdGF0ZSkpOiI+Ij09PWRhdGE/KHRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtb2YtZG9jdHlwZSIpLHRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzPSEwLHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6KHRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyLWluLWRvY3R5cGUiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcz0hMCx0b2tlbml6ZXIuc2V0U3RhdGUoYm9ndXNfZG9jdHlwZV9zdGF0ZSkpKSwhMH1mdW5jdGlvbiBkb2N0eXBlX3N5c3RlbV9pZGVudGlmaWVyX2RvdWJsZV9xdW90ZWRfc3RhdGUoYnVmZmVyKXt2YXIgZGF0YT1idWZmZXIuY2hhcigpO3JldHVybiBkYXRhPT09SW5wdXRTdHJlYW0uRU9GPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1pbi1kb2N0eXBlIiksdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3M9ITAsdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCksYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6XCciXCc9PT1kYXRhP3Rva2VuaXplci5zZXRTdGF0ZShhZnRlcl9kb2N0eXBlX3N5c3RlbV9pZGVudGlmaWVyX3N0YXRlKToiPiI9PT1kYXRhPyh0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLW9mLWRvY3R5cGUiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcz0hMCx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSkpOnRva2VuaXplci5fY3VycmVudFRva2VuLnN5c3RlbUlkKz1kYXRhLCEwfWZ1bmN0aW9uIGRvY3R5cGVfc3lzdGVtX2lkZW50aWZpZXJfc2luZ2xlX3F1b3RlZF9zdGF0ZShidWZmZXIpe3ZhciBkYXRhPWJ1ZmZlci5jaGFyKCk7cmV0dXJuIGRhdGE9PT1JbnB1dFN0cmVhbS5FT0Y/KHRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWRvY3R5cGUiKSx0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcz0hMCx0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKSxidWZmZXIudW5nZXQoZGF0YSksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpKToiXCciPT09ZGF0YT90b2tlbml6ZXIuc2V0U3RhdGUoYWZ0ZXJfZG9jdHlwZV9zeXN0ZW1faWRlbnRpZmllcl9zdGF0ZSk6Ij4iPT09ZGF0YT8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC1vZi1kb2N0eXBlIiksdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3M9ITAsdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCksdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpKTp0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5zeXN0ZW1JZCs9ZGF0YSwhMH1mdW5jdGlvbiBhZnRlcl9kb2N0eXBlX3N5c3RlbV9pZGVudGlmaWVyX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtyZXR1cm4gZGF0YT09PUlucHV0U3RyZWFtLkVPRj8odG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tZG9jdHlwZSIpLHRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzPSEwLHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpLGJ1ZmZlci51bmdldChkYXRhKSx0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSkpOmlzV2hpdGVzcGFjZShkYXRhKXx8KCI+Ij09PWRhdGE/KHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6KHRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyLWluLWRvY3R5cGUiKSx0b2tlbml6ZXIuc2V0U3RhdGUoYm9ndXNfZG9jdHlwZV9zdGF0ZSkpKSwhMH1mdW5jdGlvbiBib2d1c19kb2N0eXBlX3N0YXRlKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLmNoYXIoKTtyZXR1cm4gZGF0YT09PUlucHV0U3RyZWFtLkVPRj8oYnVmZmVyLnVuZ2V0KGRhdGEpLHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSk6Ij4iPT09ZGF0YSYmKHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpLHRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKSksITB9VG9rZW5pemVyLkRBVEE9ZGF0YV9zdGF0ZSxUb2tlbml6ZXIuUkNEQVRBPXJjZGF0YV9zdGF0ZSxUb2tlbml6ZXIuUkFXVEVYVD1yYXd0ZXh0X3N0YXRlLFRva2VuaXplci5TQ1JJUFRfREFUQT1zY3JpcHRfZGF0YV9zdGF0ZSxUb2tlbml6ZXIuUExBSU5URVhUPXBsYWludGV4dF9zdGF0ZSx0aGlzLl9zdGF0ZT1Ub2tlbml6ZXIuREFUQSx0aGlzLl9pbnB1dFN0cmVhbS5hcHBlbmQoc291cmNlKSx0aGlzLl90b2tlbkhhbmRsZXIuc3RhcnRUb2tlbml6YXRpb24odGhpcyksdGhpcy5faW5wdXRTdHJlYW0uZW9mPSEwO2Zvcih2YXIgdG9rZW5pemVyPXRoaXM7dGhpcy5fc3RhdGUuY2FsbCh0aGlzLHRoaXMuX2lucHV0U3RyZWFtKTspO30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFRva2VuaXplci5wcm90b3R5cGUsImxpbmVOdW1iZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5wdXRTdHJlYW0ubG9jYXRpb24oKS5saW5lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb2tlbml6ZXIucHJvdG90eXBlLCJjb2x1bW5OdW1iZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5wdXRTdHJlYW0ubG9jYXRpb24oKS5jb2x1bW59fSksZXhwb3J0cy5Ub2tlbml6ZXI9VG9rZW5pemVyfSx7Ii4vRW50aXR5UGFyc2VyIjoyLCIuL0lucHV0U3RyZWFtIjozfV0sNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7ZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGNoKXtyZXR1cm4iICI9PT1jaHx8IlxcbiI9PT1jaHx8Ilx0Ij09PWNofHwiXFxyIj09PWNofHwiXFxmIj09PWNofWZ1bmN0aW9uIGlzV2hpdGVzcGFjZU9yUmVwbGFjZW1lbnRDaGFyYWN0ZXIoY2gpe3JldHVybiBpc1doaXRlc3BhY2UoY2gpfHwi77+9Ij09PWNofWZ1bmN0aW9uIGlzQWxsV2hpdGVzcGFjZShjaGFyYWN0ZXJzKXtmb3IodmFyIGk9MDtjaGFyYWN0ZXJzLmxlbmd0aD5pO2krKyl7dmFyIGNoPWNoYXJhY3RlcnNbaV07aWYoIWlzV2hpdGVzcGFjZShjaCkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gaXNBbGxXaGl0ZXNwYWNlT3JSZXBsYWNlbWVudENoYXJhY3RlcnMoY2hhcmFjdGVycyl7Zm9yKHZhciBpPTA7Y2hhcmFjdGVycy5sZW5ndGg+aTtpKyspe3ZhciBjaD1jaGFyYWN0ZXJzW2ldO2lmKCFpc1doaXRlc3BhY2VPclJlcGxhY2VtZW50Q2hhcmFjdGVyKGNoKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBnZXRBdHRyaWJ1dGUobm9kZSxuYW1lKXtmb3IodmFyIGk9MDtub2RlLmF0dHJpYnV0ZXMubGVuZ3RoPmk7aSsrKXt2YXIgYXR0cmlidXRlPW5vZGUuYXR0cmlidXRlc1tpXTtpZihhdHRyaWJ1dGUubm9kZU5hbWU9PT1uYW1lKXJldHVybiBhdHRyaWJ1dGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2hhcmFjdGVyQnVmZmVyKGNoYXJhY3RlcnMpe3RoaXMuY2hhcmFjdGVycz1jaGFyYWN0ZXJzLHRoaXMuY3VycmVudD0wLHRoaXMuZW5kPXRoaXMuY2hhcmFjdGVycy5sZW5ndGh9ZnVuY3Rpb24gVHJlZUJ1aWxkZXIoKXt0aGlzLnRva2VuaXplcj1udWxsLHRoaXMuZXJyb3JIYW5kbGVyPW51bGwsdGhpcy5zY3JpcHRpbmdFbmFibGVkPSExLHRoaXMuZG9jdW1lbnQ9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmZvcm09bnVsbCx0aGlzLm9wZW5FbGVtZW50cz1uZXcgRWxlbWVudFN0YWNrLHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzPVtdLHRoaXMuaW5zZXJ0aW9uTW9kZT1udWxsLHRoaXMuaW5zZXJ0aW9uTW9kZU5hbWU9IiIsdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGU9IiIsdGhpcy5pblF1aXJrc01vZGU9ITEsdGhpcy5jb21wYXRNb2RlPSJubyBxdWlya3MiLHRoaXMuZnJhbWVzZXRPaz0hMCx0aGlzLnJlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQ9ITEsdGhpcy5zZWxmQ2xvc2luZ0ZsYWdBY2tub3dsZWRnZWQ9ITEsdGhpcy5jb250ZXh0PSIiLHRoaXMucGVuZGluZ1RhYmxlQ2hhcmFjdGVycz1bXSx0aGlzLnNob3VsZFNraXBMZWFkaW5nTmV3bGluZT0hMTt2YXIgdHJlZT10aGlzLG1vZGVzPXRoaXMuaW5zZXJ0aW9uTW9kZXM9e307bW9kZXMuYmFzZT17ZW5kX3RhZ19oYW5kbGVyczp7Ii1kZWZhdWx0IjoiZW5kVGFnT3RoZXIifSxzdGFydF90YWdfaGFuZGxlcnM6eyItZGVmYXVsdCI6InN0YXJ0VGFnT3RoZXIifSxwcm9jZXNzRU9GOmZ1bmN0aW9uKCl7dHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCksdHJlZS5vcGVuRWxlbWVudHMubGVuZ3RoPjI/dHJlZS5wYXJzZUVycm9yKCJleHBlY3RlZC1jbG9zaW5nLXRhZy1idXQtZ290LWVvZiIpOjI9PXRyZWUub3BlbkVsZW1lbnRzLmxlbmd0aCYmImJvZHkiIT10cmVlLm9wZW5FbGVtZW50cy5pdGVtKDEpLmxvY2FsTmFtZT90cmVlLnBhcnNlRXJyb3IoImV4cGVjdGVkLWNsb3NpbmctdGFnLWJ1dC1nb3QtZW9mIik6dHJlZS5jb250ZXh0JiZ0cmVlLm9wZW5FbGVtZW50cy5sZW5ndGg+MX0scHJvY2Vzc0NvbW1lbnQ6ZnVuY3Rpb24oZGF0YSl7dHJlZS5pbnNlcnRDb21tZW50KGRhdGEsdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubm9kZSl9LHByb2Nlc3NEb2N0eXBlOmZ1bmN0aW9uKCl7dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWRvY3R5cGUiKX0scHJvY2Vzc1N0YXJ0VGFnOmZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl7aWYodGhpc1t0aGlzLnN0YXJ0X3RhZ19oYW5kbGVyc1tuYW1lXV0pdGhpc1t0aGlzLnN0YXJ0X3RhZ19oYW5kbGVyc1tuYW1lXV0obmFtZSxhdHRyaWJ1dGVzLHNlbGZDbG9zaW5nKTtlbHNle2lmKCF0aGlzW3RoaXMuc3RhcnRfdGFnX2hhbmRsZXJzWyItZGVmYXVsdCJdXSl0aHJvdyBFcnJvcigiTm8gaGFuZGxlciBmb3VuZCBmb3IgIituYW1lKTt0aGlzW3RoaXMuc3RhcnRfdGFnX2hhbmRsZXJzWyItZGVmYXVsdCJdXShuYW1lLGF0dHJpYnV0ZXMsc2VsZkNsb3NpbmcpfX0scHJvY2Vzc0VuZFRhZzpmdW5jdGlvbihuYW1lKXtpZih0aGlzW3RoaXMuZW5kX3RhZ19oYW5kbGVyc1tuYW1lXV0pdGhpc1t0aGlzLmVuZF90YWdfaGFuZGxlcnNbbmFtZV1dKG5hbWUpO2Vsc2V7aWYoIXRoaXNbdGhpcy5lbmRfdGFnX2hhbmRsZXJzWyItZGVmYXVsdCJdXSl0aHJvdyBFcnJvcigiTm8gaGFuZGxlciBmb3VuZCBmb3IgIituYW1lKTt0aGlzW3RoaXMuZW5kX3RhZ19oYW5kbGVyc1siLWRlZmF1bHQiXV0obmFtZSl9fSxzdGFydFRhZ0h0bWw6ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXttb2Rlcy5pbkJvZHkuc3RhcnRUYWdIdG1sKG5hbWUsYXR0cmlidXRlcyl9fSxtb2Rlcy5pbml0aWFsPU9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSksbW9kZXMuaW5pdGlhbC5wcm9jZXNzRU9GPWZ1bmN0aW9uKCl7dHJlZS5wYXJzZUVycm9yKCJleHBlY3RlZC1kb2N0eXBlLWJ1dC1nb3QtZW9mIiksdGhpcy5hbnl0aGluZ0Vsc2UoKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VPRigpfSxtb2Rlcy5pbml0aWFsLnByb2Nlc3NDb21tZW50PWZ1bmN0aW9uKGRhdGEpe3RyZWUuaW5zZXJ0Q29tbWVudChkYXRhLHRyZWUuZG9jdW1lbnQpfSxtb2Rlcy5pbml0aWFsLnByb2Nlc3NEb2N0eXBlPWZ1bmN0aW9uKG5hbWUscHVibGljSWQsc3lzdGVtSWQsZm9yY2VRdWlya3Mpe2Z1bmN0aW9uIHB1YmxpY0lkU3RhcnRzV2l0aChzdHJpbmcpe3JldHVybiAwPT09cHVibGljSWQudG9Mb3dlckNhc2UoKS5pbmRleE9mKHN0cmluZyl9dHJlZS5pbnNlcnREb2N0eXBlKG5hbWV8fCIiLHB1YmxpY0lkfHwiIixzeXN0ZW1JZHx8IiIpLGZvcmNlUXVpcmtzfHwiaHRtbCIhPW5hbWV8fG51bGwhPXB1YmxpY0lkJiYoWyIrLy9zaWxtYXJpbC8vZHRkIGh0bWwgcHJvIHYwcjExIDE5OTcwMTAxLy8iLCItLy9hZHZhc29mdCBsdGQvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vIiwiLS8vYXMvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vIiwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDEvLyIsIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBsZXZlbCAyLy8iLCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0IGxldmVsIDEvLyIsIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QgbGV2ZWwgMi8vIiwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdC8vIiwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wLy8iLCItLy9pZXRmLy9kdGQgaHRtbCAyLjFlLy8iLCItLy9pZXRmLy9kdGQgaHRtbCAzLjAvLyIsIi0vL2lldGYvL2R0ZCBodG1sIDMuMC8vIiwiLS8vaWV0Zi8vZHRkIGh0bWwgMy4yIGZpbmFsLy8iLCItLy9pZXRmLy9kdGQgaHRtbCAzLjIvLyIsIi0vL2lldGYvL2R0ZCBodG1sIDMvLyIsIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDAvLyIsIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDAvLyIsIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDEvLyIsIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDEvLyIsIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDIvLyIsIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDIvLyIsIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDMvLyIsIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDMvLyIsIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAwLy8iLCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vIiwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDEvLyIsIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAxLy8iLCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMi8vIiwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDIvLyIsIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAzLy8iLCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vIiwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0Ly8iLCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvLyIsIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdC8vIiwiLS8vaWV0Zi8vZHRkIGh0bWwvLyIsIi0vL2lldGYvL2R0ZCBodG1sLy8iLCItLy9pZXRmLy9kdGQgaHRtbC8vIiwiLS8vbWV0cml1cy8vZHRkIG1ldHJpdXMgcHJlc2VudGF0aW9uYWwvLyIsIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCBodG1sIHN0cmljdC8vIiwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwvLyIsIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCB0YWJsZXMvLyIsIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCBodG1sIHN0cmljdC8vIiwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwvLyIsIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCB0YWJsZXMvLyIsIi0vL25ldHNjYXBlIGNvbW0uIGNvcnAuLy9kdGQgaHRtbC8vIiwiLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBzdHJpY3QgaHRtbC8vIiwiLS8vb1wncmVpbGx5IGFuZCBhc3NvY2lhdGVzLy9kdGQgaHRtbCAyLjAvLyIsIi0vL29cJ3JlaWxseSBhbmQgYXNzb2NpYXRlcy8vZHRkIGh0bWwgZXh0ZW5kZWQgMS4wLy8iLCItLy9zcHlnbGFzcy8vZHRkIGh0bWwgMi4wIGV4dGVuZGVkLy8iLCItLy9zcS8vZHRkIGh0bWwgMi4wIGhvdG1ldGFsICsgZXh0ZW5zaW9ucy8vIiwiLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgaHRtbC8vIiwiLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgc3RyaWN0IGh0bWwvLyIsIi0vL3czYy8vZHRkIGh0bWwgMyAxOTk1LTAzLTI0Ly8iLCItLy93M2MvL2R0ZCBodG1sIDMuMiBkcmFmdC8vIiwiLS8vdzNjLy9kdGQgaHRtbCAzLjIgZmluYWwvLyIsIi0vL3czYy8vZHRkIGh0bWwgMy4yLy8iLCItLy93M2MvL2R0ZCBodG1sIDMuMnMgZHJhZnQvLyIsIi0vL3czYy8vZHRkIGh0bWwgNC4wIGZyYW1lc2V0Ly8iLCItLy93M2MvL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvLyIsIi0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDE5OTYwNzEyLy8iLCItLy93M2MvL2R0ZCBodG1sIGV4cGVyaW1lbnRhbCA5NzA0MjEvLyIsIi0vL3czYy8vZHRkIHczIGh0bWwvLyIsIi0vL3czby8vZHRkIHczIGh0bWwgMy4wLy8iLCItLy93ZWJ0ZWNocy8vZHRkIG1vemlsbGEgaHRtbCAyLjAvLyIsIi0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sLy8iLCJodG1sIl0uc29tZShwdWJsaWNJZFN0YXJ0c1dpdGgpfHxbIi0vL3czby8vZHRkIHczIGh0bWwgc3RyaWN0IDMuMC8vZW4vLyIsIi0vdzNjL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvZW4iLCJodG1sIl0uaW5kZXhPZihwdWJsaWNJZC50b0xvd2VyQ2FzZSgpKT4tMXx8bnVsbD09c3lzdGVtSWQmJlsiLS8vdzNjLy9kdGQgaHRtbCA0LjAxIHRyYW5zaXRpb25hbC8vIiwiLS8vdzNjLy9kdGQgaHRtbCA0LjAxIGZyYW1lc2V0Ly8iXS5zb21lKHB1YmxpY0lkU3RhcnRzV2l0aCkpfHxudWxsIT1zeXN0ZW1JZCYmImh0dHA6Ly93d3cuaWJtLmNvbS9kYXRhL2R0ZC92MTEvaWJteGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPT1zeXN0ZW1JZC50b0xvd2VyQ2FzZSgpPyh0cmVlLmNvbXBhdE1vZGU9InF1aXJrcyIsdHJlZS5wYXJzZUVycm9yKCJxdWlya3ktZG9jdHlwZSIpKTpudWxsIT1wdWJsaWNJZCYmKFsiLS8vdzNjLy9kdGQgeGh0bWwgMS4wIHRyYW5zaXRpb25hbC8vIiwiLS8vdzNjLy9kdGQgeGh0bWwgMS4wIGZyYW1lc2V0Ly8iXS5zb21lKHB1YmxpY0lkU3RhcnRzV2l0aCl8fG51bGwhPXN5c3RlbUlkJiZbIi0vL3czYy8vZHRkIGh0bWwgNC4wMSB0cmFuc2l0aW9uYWwvLyIsIi0vL3czYy8vZHRkIGh0bWwgNC4wMSBmcmFtZXNldC8vIl0uaW5kZXhPZihwdWJsaWNJZC50b0xvd2VyQ2FzZSgpKT4tMSk/KHRyZWUuY29tcGF0TW9kZT0ibGltaXRlZCBxdWlya3MiLHRyZWUucGFyc2VFcnJvcigiYWxtb3N0LXN0YW5kYXJkcy1kb2N0eXBlIikpOiItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPT1wdWJsaWNJZCYmKG51bGw9PXN5c3RlbUlkfHwiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9zdHJpY3QuZHRkIj09c3lzdGVtSWQpfHwiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiI9PXB1YmxpY0lkJiYobnVsbD09c3lzdGVtSWR8fCJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9zdHJpY3QuZHRkIj09c3lzdGVtSWQpfHwiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iPT1wdWJsaWNJZCYmImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPT1zeXN0ZW1JZHx8Ii0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iPT1wdWJsaWNJZCYmImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj09c3lzdGVtSWR8fChudWxsIT1zeXN0ZW1JZCYmImFib3V0OmxlZ2FjeS1jb21wYXQiIT1zeXN0ZW1JZHx8bnVsbCE9cHVibGljSWQpJiZ0cmVlLnBhcnNlRXJyb3IoInVua25vd24tZG9jdHlwZSIpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiYmVmb3JlSFRNTCIpfSxtb2Rlcy5pbml0aWFsLnByb2Nlc3NDaGFyYWN0ZXJzPWZ1bmN0aW9uKGJ1ZmZlcil7YnVmZmVyLnNraXBMZWFkaW5nV2hpdGVzcGFjZSgpLGJ1ZmZlci5sZW5ndGgmJih0cmVlLnBhcnNlRXJyb3IoImV4cGVjdGVkLWRvY3R5cGUtYnV0LWdvdC1jaGFycyIpLHRoaXMuYW55dGhpbmdFbHNlKCksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NDaGFyYWN0ZXJzKGJ1ZmZlcikpfSxtb2Rlcy5pbml0aWFsLnByb2Nlc3NTdGFydFRhZz1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMsc2VsZkNsb3Npbmcpe3RyZWUucGFyc2VFcnJvcigiZXhwZWN0ZWQtZG9jdHlwZS1idXQtZ290LXN0YXJ0LXRhZyIse25hbWU6bmFtZX0pLHRoaXMuYW55dGhpbmdFbHNlKCksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NTdGFydFRhZyhuYW1lLGF0dHJpYnV0ZXMsc2VsZkNsb3NpbmcpfSxtb2Rlcy5pbml0aWFsLnByb2Nlc3NFbmRUYWc9ZnVuY3Rpb24obmFtZSl7dHJlZS5wYXJzZUVycm9yKCJleHBlY3RlZC1kb2N0eXBlLWJ1dC1nb3QtZW5kLXRhZyIse25hbWU6bmFtZX0pLHRoaXMuYW55dGhpbmdFbHNlKCksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSl9LG1vZGVzLmluaXRpYWwuYW55dGhpbmdFbHNlPWZ1bmN0aW9uKCl7dHJlZS5jb21wYXRNb2RlPSJxdWlya3MiLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiYmVmb3JlSFRNTCIpfSxtb2Rlcy5iZWZvcmVIVE1MPU9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSksbW9kZXMuYmVmb3JlSFRNTC5zdGFydF90YWdfaGFuZGxlcnM9e2h0bWw6InN0YXJ0VGFnSHRtbCIsIi1kZWZhdWx0Ijoic3RhcnRUYWdPdGhlciJ9LG1vZGVzLmJlZm9yZUhUTUwucHJvY2Vzc0VPRj1mdW5jdGlvbigpe3RoaXMuYW55dGhpbmdFbHNlKCksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFT0YoKX0sbW9kZXMuYmVmb3JlSFRNTC5wcm9jZXNzQ29tbWVudD1mdW5jdGlvbihkYXRhKXt0cmVlLmluc2VydENvbW1lbnQoZGF0YSx0cmVlLmRvY3VtZW50KX0sbW9kZXMuYmVmb3JlSFRNTC5wcm9jZXNzQ2hhcmFjdGVycz1mdW5jdGlvbihidWZmZXIpe2J1ZmZlci5za2lwTGVhZGluZ1doaXRlc3BhY2UoKSxidWZmZXIubGVuZ3RoJiYodGhpcy5hbnl0aGluZ0Vsc2UoKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0NoYXJhY3RlcnMoYnVmZmVyKSl9LG1vZGVzLmJlZm9yZUhUTUwuc3RhcnRUYWdIdG1sPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5pbnNlcnRIdG1sRWxlbWVudChhdHRyaWJ1dGVzKSx0cmVlLnNldEluc2VydGlvbk1vZGUoImJlZm9yZUhlYWQiKX0sbW9kZXMuYmVmb3JlSFRNTC5zdGFydFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl7dGhpcy5hbnl0aGluZ0Vsc2UoKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl9LG1vZGVzLmJlZm9yZUhUTUwucHJvY2Vzc0VuZFRhZz1mdW5jdGlvbihuYW1lKXt0aGlzLmFueXRoaW5nRWxzZSgpLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpfSxtb2Rlcy5iZWZvcmVIVE1MLmFueXRoaW5nRWxzZT1mdW5jdGlvbigpe3RyZWUuaW5zZXJ0SHRtbEVsZW1lbnQoKSx0cmVlLnNldEluc2VydGlvbk1vZGUoImJlZm9yZUhlYWQiKX0sbW9kZXMuYWZ0ZXJBZnRlckJvZHk9T2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKSxtb2Rlcy5hZnRlckFmdGVyQm9keS5zdGFydF90YWdfaGFuZGxlcnM9e2h0bWw6InN0YXJ0VGFnSHRtbCIsIi1kZWZhdWx0Ijoic3RhcnRUYWdPdGhlciJ9LG1vZGVzLmFmdGVyQWZ0ZXJCb2R5LnByb2Nlc3NDb21tZW50PWZ1bmN0aW9uKGRhdGEpe3RyZWUuaW5zZXJ0Q29tbWVudChkYXRhLHRyZWUuZG9jdW1lbnQpfSxtb2Rlcy5hZnRlckFmdGVyQm9keS5wcm9jZXNzRG9jdHlwZT1mdW5jdGlvbihkYXRhKXttb2Rlcy5pbkJvZHkucHJvY2Vzc0RvY3R5cGUoZGF0YSl9LG1vZGVzLmFmdGVyQWZ0ZXJCb2R5LnN0YXJ0VGFnSHRtbD1mdW5jdGlvbihkYXRhLGF0dHJpYnV0ZXMpe21vZGVzLmluQm9keS5zdGFydFRhZ0h0bWwoZGF0YSxhdHRyaWJ1dGVzKX0sbW9kZXMuYWZ0ZXJBZnRlckJvZHkuc3RhcnRUYWdPdGhlcj1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMsc2VsZkNsb3Npbmcpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zdGFydC10YWciLHtuYW1lOm5hbWV9KSx0cmVlLnNldEluc2VydGlvbk1vZGUoImluQm9keSIpLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzLHNlbGZDbG9zaW5nKX0sbW9kZXMuYWZ0ZXJBZnRlckJvZHkuZW5kVGFnT3RoZXI9ZnVuY3Rpb24obmFtZSl7dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWciLHtuYW1lOm5hbWV9KSx0cmVlLnNldEluc2VydGlvbk1vZGUoImluQm9keSIpLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpfSxtb2Rlcy5hZnRlckFmdGVyQm9keS5wcm9jZXNzQ2hhcmFjdGVycz1mdW5jdGlvbihkYXRhKXtyZXR1cm4gaXNBbGxXaGl0ZXNwYWNlKGRhdGEuY2hhcmFjdGVycyk/KG1vZGVzLmluQm9keS5wcm9jZXNzQ2hhcmFjdGVycyhkYXRhKSx2b2lkIDApOih0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtY2hhci1hZnRlci1ib2R5IiksdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCJpbkJvZHkiKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0NoYXJhY3RlcnMoZGF0YSkpfSxtb2Rlcy5hZnRlckJvZHk9T2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKSxtb2Rlcy5hZnRlckJvZHkuZW5kX3RhZ19oYW5kbGVycz17aHRtbDoiZW5kVGFnSHRtbCIsIi1kZWZhdWx0IjoiZW5kVGFnT3RoZXIifSxtb2Rlcy5hZnRlckJvZHkucHJvY2Vzc0NvbW1lbnQ9ZnVuY3Rpb24oZGF0YSl7dHJlZS5pbnNlcnRDb21tZW50KGRhdGEsdHJlZS5vcGVuRWxlbWVudHMucm9vdE5vZGUpfSxtb2Rlcy5hZnRlckJvZHkucHJvY2Vzc0NoYXJhY3RlcnM9ZnVuY3Rpb24oZGF0YSl7cmV0dXJuIGlzQWxsV2hpdGVzcGFjZShkYXRhLmNoYXJhY3RlcnMpPyhtb2Rlcy5pbkJvZHkucHJvY2Vzc0NoYXJhY3RlcnMoZGF0YSksdm9pZCAwKToodHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWNoYXItYWZ0ZXItYm9keSIpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiaW5Cb2R5IiksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NDaGFyYWN0ZXJzKGRhdGEpKX0sbW9kZXMuYWZ0ZXJCb2R5LnByb2Nlc3NTdGFydFRhZz1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMsc2VsZkNsb3Npbmcpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zdGFydC10YWctYWZ0ZXItYm9keSIse25hbWU6bmFtZX0pLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiaW5Cb2R5IiksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NTdGFydFRhZyhuYW1lLGF0dHJpYnV0ZXMsc2VsZkNsb3NpbmcpfSxtb2Rlcy5hZnRlckJvZHkuZW5kVGFnSHRtbD1mdW5jdGlvbigpe3RyZWUuY29udGV4dD90cmVlLnBhcnNlRXJyb3IoImVuZC1odG1sLWluLWlubmVyaHRtbCIpOnRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiYWZ0ZXJBZnRlckJvZHkiKX0sbW9kZXMuYWZ0ZXJCb2R5LmVuZFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnLWFmdGVyLWJvZHkiLHtuYW1lOm5hbWV9KSx0cmVlLnNldEluc2VydGlvbk1vZGUoImluQm9keSIpLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpfSxtb2Rlcy5hZnRlckZyYW1lc2V0PU9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSksbW9kZXMuYWZ0ZXJGcmFtZXNldC5zdGFydF90YWdfaGFuZGxlcnM9e2h0bWw6InN0YXJ0VGFnSHRtbCIsbm9mcmFtZXM6InN0YXJ0VGFnTm9mcmFtZXMiLCItZGVmYXVsdCI6InN0YXJ0VGFnT3RoZXIifSxtb2Rlcy5hZnRlckZyYW1lc2V0LmVuZF90YWdfaGFuZGxlcnM9e2h0bWw6ImVuZFRhZ0h0bWwiLCItZGVmYXVsdCI6ImVuZFRhZ090aGVyIn0sbW9kZXMuYWZ0ZXJGcmFtZXNldC5wcm9jZXNzQ2hhcmFjdGVycz1mdW5jdGlvbihidWZmZXIpe2Zvcih2YXIgY2hhcmFjdGVycz1idWZmZXIudGFrZVJlbWFpbmluZygpLHdoaXRlc3BhY2U9IiIsaT0wO2NoYXJhY3RlcnMubGVuZ3RoPmk7aSsrKXt2YXIgY2g9Y2hhcmFjdGVyc1tpXTtpc1doaXRlc3BhY2UoY2gpJiYod2hpdGVzcGFjZSs9Y2gpfXdoaXRlc3BhY2UmJnRyZWUuaW5zZXJ0VGV4dCh3aGl0ZXNwYWNlKSx3aGl0ZXNwYWNlLmxlbmd0aDxjaGFyYWN0ZXJzLmxlbmd0aCYmdHJlZS5wYXJzZUVycm9yKCJleHBlY3RlZC1lb2YtYnV0LWdvdC1jaGFyIil9LG1vZGVzLmFmdGVyRnJhbWVzZXQuc3RhcnRUYWdOb2ZyYW1lcz1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe21vZGVzLmluSGVhZC5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuYWZ0ZXJGcmFtZXNldC5zdGFydFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zdGFydC10YWctYWZ0ZXItZnJhbWVzZXQiLHtuYW1lOm5hbWV9KX0sbW9kZXMuYWZ0ZXJGcmFtZXNldC5lbmRUYWdIdG1sPWZ1bmN0aW9uKCl7dHJlZS5zZXRJbnNlcnRpb25Nb2RlKCJhZnRlckFmdGVyRnJhbWVzZXQiKX0sbW9kZXMuYWZ0ZXJGcmFtZXNldC5lbmRUYWdPdGhlcj1mdW5jdGlvbihuYW1lKXt0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZy1hZnRlci1mcmFtZXNldCIse25hbWU6bmFtZX0pfSxtb2Rlcy5iZWZvcmVIZWFkPU9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSksbW9kZXMuYmVmb3JlSGVhZC5zdGFydF90YWdfaGFuZGxlcnM9e2h0bWw6InN0YXJ0VGFnSHRtbCIsaGVhZDoic3RhcnRUYWdIZWFkIiwiLWRlZmF1bHQiOiJzdGFydFRhZ090aGVyIn0sbW9kZXMuYmVmb3JlSGVhZC5lbmRfdGFnX2hhbmRsZXJzPXtodG1sOiJlbmRUYWdJbXBseUhlYWQiLGhlYWQ6ImVuZFRhZ0ltcGx5SGVhZCIsYm9keToiZW5kVGFnSW1wbHlIZWFkIixicjoiZW5kVGFnSW1wbHlIZWFkIiwiLWRlZmF1bHQiOiJlbmRUYWdPdGhlciJ9LG1vZGVzLmJlZm9yZUhlYWQucHJvY2Vzc0VPRj1mdW5jdGlvbigpe3RoaXMuc3RhcnRUYWdIZWFkKCJoZWFkIixbXSksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFT0YoKX0sbW9kZXMuYmVmb3JlSGVhZC5wcm9jZXNzQ2hhcmFjdGVycz1mdW5jdGlvbihidWZmZXIpe2J1ZmZlci5za2lwTGVhZGluZ1doaXRlc3BhY2UoKSxidWZmZXIubGVuZ3RoJiYodGhpcy5zdGFydFRhZ0hlYWQoImhlYWQiLFtdKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0NoYXJhY3RlcnMoYnVmZmVyKSl9LG1vZGVzLmJlZm9yZUhlYWQuc3RhcnRUYWdIZWFkPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5pbnNlcnRIZWFkRWxlbWVudChhdHRyaWJ1dGVzKSx0cmVlLnNldEluc2VydGlvbk1vZGUoImluSGVhZCIpfSxtb2Rlcy5iZWZvcmVIZWFkLnN0YXJ0VGFnT3RoZXI9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzLHNlbGZDbG9zaW5nKXt0aGlzLnN0YXJ0VGFnSGVhZCgiaGVhZCIsW10pLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzLHNlbGZDbG9zaW5nKX0sbW9kZXMuYmVmb3JlSGVhZC5lbmRUYWdJbXBseUhlYWQ9ZnVuY3Rpb24obmFtZSl7dGhpcy5zdGFydFRhZ0hlYWQoImhlYWQiLFtdKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VuZFRhZyhuYW1lKX0sbW9kZXMuYmVmb3JlSGVhZC5lbmRUYWdPdGhlcj1mdW5jdGlvbihuYW1lKXt0cmVlLnBhcnNlRXJyb3IoImVuZC10YWctYWZ0ZXItaW1wbGllZC1yb290Iix7bmFtZTpuYW1lfSl9LG1vZGVzLmluSGVhZD1PYmplY3QuY3JlYXRlKG1vZGVzLmJhc2UpLG1vZGVzLmluSGVhZC5zdGFydF90YWdfaGFuZGxlcnM9e2h0bWw6InN0YXJ0VGFnSHRtbCIsaGVhZDoic3RhcnRUYWdIZWFkIix0aXRsZToic3RhcnRUYWdUaXRsZSIsc2NyaXB0OiJzdGFydFRhZ1NjcmlwdCIsc3R5bGU6InN0YXJ0VGFnTm9GcmFtZXNTdHlsZSIsbm9zY3JpcHQ6InN0YXJ0VGFnTm9TY3JpcHQiLG5vZnJhbWVzOiJzdGFydFRhZ05vRnJhbWVzU3R5bGUiLGJhc2U6InN0YXJ0VGFnQmFzZUJhc2Vmb250Qmdzb3VuZExpbmsiLGJhc2Vmb250OiJzdGFydFRhZ0Jhc2VCYXNlZm9udEJnc291bmRMaW5rIixiZ3NvdW5kOiJzdGFydFRhZ0Jhc2VCYXNlZm9udEJnc291bmRMaW5rIixsaW5rOiJzdGFydFRhZ0Jhc2VCYXNlZm9udEJnc291bmRMaW5rIixtZXRhOiJzdGFydFRhZ01ldGEiLCItZGVmYXVsdCI6InN0YXJ0VGFnT3RoZXIifSxtb2Rlcy5pbkhlYWQuZW5kX3RhZ19oYW5kbGVycz17aGVhZDoiZW5kVGFnSGVhZCIsaHRtbDoiZW5kVGFnSHRtbEJvZHlCciIsYm9keToiZW5kVGFnSHRtbEJvZHlCciIsYnI6ImVuZFRhZ0h0bWxCb2R5QnIiLCItZGVmYXVsdCI6ImVuZFRhZ090aGVyIn0sbW9kZXMuaW5IZWFkLnByb2Nlc3NFT0Y9ZnVuY3Rpb24oKXt2YXIgbmFtZT10cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWU7XG4tMSE9WyJ0aXRsZSIsInN0eWxlIiwic2NyaXB0Il0uaW5kZXhPZihuYW1lKSYmKHRyZWUucGFyc2VFcnJvcigiZXhwZWN0ZWQtbmFtZWQtY2xvc2luZy10YWctYnV0LWdvdC1lb2YiLHtuYW1lOm5hbWV9KSx0cmVlLnBvcEVsZW1lbnQoKSksdGhpcy5hbnl0aGluZ0Vsc2UoKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VPRigpfSxtb2Rlcy5pbkhlYWQucHJvY2Vzc0NoYXJhY3RlcnM9ZnVuY3Rpb24oYnVmZmVyKXt2YXIgbGVhZGluZ1doaXRlc3BhY2U9YnVmZmVyLnRha2VMZWFkaW5nV2hpdGVzcGFjZSgpO2xlYWRpbmdXaGl0ZXNwYWNlJiZ0cmVlLmluc2VydFRleHQobGVhZGluZ1doaXRlc3BhY2UpLGJ1ZmZlci5sZW5ndGgmJih0aGlzLmFueXRoaW5nRWxzZSgpLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzQ2hhcmFjdGVycyhidWZmZXIpKX0sbW9kZXMuaW5IZWFkLnN0YXJ0VGFnSHRtbD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe21vZGVzLmluQm9keS5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5IZWFkLnN0YXJ0VGFnSGVhZD1mdW5jdGlvbigpe3RyZWUucGFyc2VFcnJvcigidHdvLWhlYWRzLWFyZS1ub3QtYmV0dGVyLXRoYW4tb25lIil9LG1vZGVzLmluSGVhZC5zdGFydFRhZ1RpdGxlPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5wcm9jZXNzR2VuZXJpY1JDREFUQVN0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluSGVhZC5zdGFydFRhZ05vU2NyaXB0PWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7cmV0dXJuIHRyZWUuc2NyaXB0aW5nRW5hYmxlZD90cmVlLnByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyk6KHRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiaW5IZWFkTm9zY3JpcHQiKSx2b2lkIDApfSxtb2Rlcy5pbkhlYWQuc3RhcnRUYWdOb0ZyYW1lc1N0eWxlPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5wcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhuYW1lLGF0dHJpYnV0ZXMpfSxtb2Rlcy5pbkhlYWQuc3RhcnRUYWdTY3JpcHQ9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXt0cmVlLmluc2VydEVsZW1lbnQobmFtZSxhdHRyaWJ1dGVzKSx0cmVlLnRva2VuaXplci5zZXRTdGF0ZShUb2tlbml6ZXIuU0NSSVBUX0RBVEEpLHRyZWUub3JpZ2luYWxJbnNlcnRpb25Nb2RlPXRyZWUuaW5zZXJ0aW9uTW9kZU5hbWUsdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCJ0ZXh0Iil9LG1vZGVzLmluSGVhZC5zdGFydFRhZ0Jhc2VCYXNlZm9udEJnc291bmRMaW5rPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0VsZW1lbnQobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5IZWFkLnN0YXJ0VGFnTWV0YT1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdFbGVtZW50KG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluSGVhZC5zdGFydFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl7dGhpcy5hbnl0aGluZ0Vsc2UoKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl9LG1vZGVzLmluSGVhZC5lbmRUYWdIZWFkPWZ1bmN0aW9uKCl7ImhlYWQiPT10cmVlLm9wZW5FbGVtZW50cy5pdGVtKHRyZWUub3BlbkVsZW1lbnRzLmxlbmd0aC0xKS5sb2NhbE5hbWU/dHJlZS5vcGVuRWxlbWVudHMucG9wKCk6dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWciLHtuYW1lOiJoZWFkIn0pLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiYWZ0ZXJIZWFkIil9LG1vZGVzLmluSGVhZC5lbmRUYWdIdG1sQm9keUJyPWZ1bmN0aW9uKG5hbWUpe3RoaXMuYW55dGhpbmdFbHNlKCksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSl9LG1vZGVzLmluSGVhZC5lbmRUYWdPdGhlcj1mdW5jdGlvbihuYW1lKXt0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZyIse25hbWU6bmFtZX0pfSxtb2Rlcy5pbkhlYWQuYW55dGhpbmdFbHNlPWZ1bmN0aW9uKCl7dGhpcy5lbmRUYWdIZWFkKCJoZWFkIil9LG1vZGVzLmFmdGVySGVhZD1PYmplY3QuY3JlYXRlKG1vZGVzLmJhc2UpLG1vZGVzLmFmdGVySGVhZC5zdGFydF90YWdfaGFuZGxlcnM9e2h0bWw6InN0YXJ0VGFnSHRtbCIsaGVhZDoic3RhcnRUYWdIZWFkIixib2R5OiJzdGFydFRhZ0JvZHkiLGZyYW1lc2V0OiJzdGFydFRhZ0ZyYW1lc2V0IixiYXNlOiJzdGFydFRhZ0Zyb21IZWFkIixsaW5rOiJzdGFydFRhZ0Zyb21IZWFkIixtZXRhOiJzdGFydFRhZ0Zyb21IZWFkIixzY3JpcHQ6InN0YXJ0VGFnRnJvbUhlYWQiLHN0eWxlOiJzdGFydFRhZ0Zyb21IZWFkIix0aXRsZToic3RhcnRUYWdGcm9tSGVhZCIsIi1kZWZhdWx0Ijoic3RhcnRUYWdPdGhlciJ9LG1vZGVzLmFmdGVySGVhZC5lbmRfdGFnX2hhbmRsZXJzPXtib2R5OiJlbmRUYWdCb2R5SHRtbEJyIixodG1sOiJlbmRUYWdCb2R5SHRtbEJyIixicjoiZW5kVGFnQm9keUh0bWxCciIsIi1kZWZhdWx0IjoiZW5kVGFnT3RoZXIifSxtb2Rlcy5hZnRlckhlYWQucHJvY2Vzc0VPRj1mdW5jdGlvbigpe3RoaXMuYW55dGhpbmdFbHNlKCksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFT0YoKX0sbW9kZXMuYWZ0ZXJIZWFkLnByb2Nlc3NDaGFyYWN0ZXJzPWZ1bmN0aW9uKGJ1ZmZlcil7dmFyIGxlYWRpbmdXaGl0ZXNwYWNlPWJ1ZmZlci50YWtlTGVhZGluZ1doaXRlc3BhY2UoKTtsZWFkaW5nV2hpdGVzcGFjZSYmdHJlZS5pbnNlcnRUZXh0KGxlYWRpbmdXaGl0ZXNwYWNlKSxidWZmZXIubGVuZ3RoJiYodGhpcy5hbnl0aGluZ0Vsc2UoKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0NoYXJhY3RlcnMoYnVmZmVyKSl9LG1vZGVzLmFmdGVySGVhZC5zdGFydFRhZ0h0bWw9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXttb2Rlcy5pbkJvZHkucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmFmdGVySGVhZC5zdGFydFRhZ0JvZHk9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXt0cmVlLmZyYW1lc2V0T2s9ITEsdHJlZS5pbnNlcnRCb2R5RWxlbWVudChhdHRyaWJ1dGVzKSx0cmVlLnNldEluc2VydGlvbk1vZGUoImluQm9keSIpfSxtb2Rlcy5hZnRlckhlYWQuc3RhcnRUYWdGcmFtZXNldD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiaW5GcmFtZXNldCIpfSxtb2Rlcy5hZnRlckhlYWQuc3RhcnRUYWdGcm9tSGVhZD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMsc2VsZkNsb3Npbmcpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zdGFydC10YWctb3V0LW9mLW15LWhlYWQiLHtuYW1lOm5hbWV9KSx0cmVlLm9wZW5FbGVtZW50cy5wdXNoKHRyZWUuaGVhZCksbW9kZXMuaW5IZWFkLnByb2Nlc3NTdGFydFRhZyhuYW1lLGF0dHJpYnV0ZXMsc2VsZkNsb3NpbmcpLHRyZWUub3BlbkVsZW1lbnRzLnJlbW92ZSh0cmVlLmhlYWQpfSxtb2Rlcy5hZnRlckhlYWQuc3RhcnRUYWdIZWFkPWZ1bmN0aW9uKG5hbWUpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zdGFydC10YWciLHtuYW1lOm5hbWV9KX0sbW9kZXMuYWZ0ZXJIZWFkLnN0YXJ0VGFnT3RoZXI9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzLHNlbGZDbG9zaW5nKXt0aGlzLmFueXRoaW5nRWxzZSgpLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzLHNlbGZDbG9zaW5nKX0sbW9kZXMuYWZ0ZXJIZWFkLmVuZFRhZ0JvZHlIdG1sQnI9ZnVuY3Rpb24obmFtZSl7dGhpcy5hbnl0aGluZ0Vsc2UoKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VuZFRhZyhuYW1lKX0sbW9kZXMuYWZ0ZXJIZWFkLmVuZFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnIix7bmFtZTpuYW1lfSl9LG1vZGVzLmFmdGVySGVhZC5hbnl0aGluZ0Vsc2U9ZnVuY3Rpb24oKXt0cmVlLmluc2VydEJvZHlFbGVtZW50KFtdKSx0cmVlLnNldEluc2VydGlvbk1vZGUoImluQm9keSIpLHRyZWUuZnJhbWVzZXRPaz0hMH0sbW9kZXMuaW5Cb2R5PU9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSksbW9kZXMuaW5Cb2R5LnN0YXJ0X3RhZ19oYW5kbGVycz17aHRtbDoic3RhcnRUYWdIdG1sIixoZWFkOiJzdGFydFRhZ01pc3BsYWNlZCIsYmFzZToic3RhcnRUYWdQcm9jZXNzSW5IZWFkIixiYXNlZm9udDoic3RhcnRUYWdQcm9jZXNzSW5IZWFkIixiZ3NvdW5kOiJzdGFydFRhZ1Byb2Nlc3NJbkhlYWQiLGxpbms6InN0YXJ0VGFnUHJvY2Vzc0luSGVhZCIsbWV0YToic3RhcnRUYWdQcm9jZXNzSW5IZWFkIixub2ZyYW1lczoic3RhcnRUYWdQcm9jZXNzSW5IZWFkIixzY3JpcHQ6InN0YXJ0VGFnUHJvY2Vzc0luSGVhZCIsc3R5bGU6InN0YXJ0VGFnUHJvY2Vzc0luSGVhZCIsdGl0bGU6InN0YXJ0VGFnUHJvY2Vzc0luSGVhZCIsYm9keToic3RhcnRUYWdCb2R5Iixmb3JtOiJzdGFydFRhZ0Zvcm0iLHBsYWludGV4dDoic3RhcnRUYWdQbGFpbnRleHQiLGE6InN0YXJ0VGFnQSIsYnV0dG9uOiJzdGFydFRhZ0J1dHRvbiIseG1wOiJzdGFydFRhZ1htcCIsdGFibGU6InN0YXJ0VGFnVGFibGUiLGhyOiJzdGFydFRhZ0hyIixpbWFnZToic3RhcnRUYWdJbWFnZSIsaW5wdXQ6InN0YXJ0VGFnSW5wdXQiLHRleHRhcmVhOiJzdGFydFRhZ1RleHRhcmVhIixzZWxlY3Q6InN0YXJ0VGFnU2VsZWN0Iixpc2luZGV4OiJzdGFydFRhZ0lzaW5kZXgiLGFwcGxldDoic3RhcnRUYWdBcHBsZXRNYXJxdWVlT2JqZWN0IixtYXJxdWVlOiJzdGFydFRhZ0FwcGxldE1hcnF1ZWVPYmplY3QiLG9iamVjdDoic3RhcnRUYWdBcHBsZXRNYXJxdWVlT2JqZWN0IixsaToic3RhcnRUYWdMaXN0SXRlbSIsZGQ6InN0YXJ0VGFnTGlzdEl0ZW0iLGR0OiJzdGFydFRhZ0xpc3RJdGVtIixhZGRyZXNzOiJzdGFydFRhZ0Nsb3NlUCIsYXJ0aWNsZToic3RhcnRUYWdDbG9zZVAiLGFzaWRlOiJzdGFydFRhZ0Nsb3NlUCIsYmxvY2txdW90ZToic3RhcnRUYWdDbG9zZVAiLGNlbnRlcjoic3RhcnRUYWdDbG9zZVAiLGRldGFpbHM6InN0YXJ0VGFnQ2xvc2VQIixkaXI6InN0YXJ0VGFnQ2xvc2VQIixkaXY6InN0YXJ0VGFnQ2xvc2VQIixkbDoic3RhcnRUYWdDbG9zZVAiLGZpZWxkc2V0OiJzdGFydFRhZ0Nsb3NlUCIsZmlnY2FwdGlvbjoic3RhcnRUYWdDbG9zZVAiLGZpZ3VyZToic3RhcnRUYWdDbG9zZVAiLGZvb3Rlcjoic3RhcnRUYWdDbG9zZVAiLGhlYWRlcjoic3RhcnRUYWdDbG9zZVAiLGhncm91cDoic3RhcnRUYWdDbG9zZVAiLG1haW46InN0YXJ0VGFnQ2xvc2VQIixtZW51OiJzdGFydFRhZ0Nsb3NlUCIsbmF2OiJzdGFydFRhZ0Nsb3NlUCIsb2w6InN0YXJ0VGFnQ2xvc2VQIixwOiJzdGFydFRhZ0Nsb3NlUCIsc2VjdGlvbjoic3RhcnRUYWdDbG9zZVAiLHN1bW1hcnk6InN0YXJ0VGFnQ2xvc2VQIix1bDoic3RhcnRUYWdDbG9zZVAiLGxpc3Rpbmc6InN0YXJ0VGFnUHJlTGlzdGluZyIscHJlOiJzdGFydFRhZ1ByZUxpc3RpbmciLGI6InN0YXJ0VGFnRm9ybWF0dGluZyIsYmlnOiJzdGFydFRhZ0Zvcm1hdHRpbmciLGNvZGU6InN0YXJ0VGFnRm9ybWF0dGluZyIsZW06InN0YXJ0VGFnRm9ybWF0dGluZyIsZm9udDoic3RhcnRUYWdGb3JtYXR0aW5nIixpOiJzdGFydFRhZ0Zvcm1hdHRpbmciLHM6InN0YXJ0VGFnRm9ybWF0dGluZyIsc21hbGw6InN0YXJ0VGFnRm9ybWF0dGluZyIsc3RyaWtlOiJzdGFydFRhZ0Zvcm1hdHRpbmciLHN0cm9uZzoic3RhcnRUYWdGb3JtYXR0aW5nIix0dDoic3RhcnRUYWdGb3JtYXR0aW5nIix1OiJzdGFydFRhZ0Zvcm1hdHRpbmciLG5vYnI6InN0YXJ0VGFnTm9iciIsYXJlYToic3RhcnRUYWdWb2lkRm9ybWF0dGluZyIsYnI6InN0YXJ0VGFnVm9pZEZvcm1hdHRpbmciLGVtYmVkOiJzdGFydFRhZ1ZvaWRGb3JtYXR0aW5nIixpbWc6InN0YXJ0VGFnVm9pZEZvcm1hdHRpbmciLGtleWdlbjoic3RhcnRUYWdWb2lkRm9ybWF0dGluZyIsd2JyOiJzdGFydFRhZ1ZvaWRGb3JtYXR0aW5nIixwYXJhbToic3RhcnRUYWdQYXJhbVNvdXJjZVRyYWNrIixzb3VyY2U6InN0YXJ0VGFnUGFyYW1Tb3VyY2VUcmFjayIsdHJhY2s6InN0YXJ0VGFnUGFyYW1Tb3VyY2VUcmFjayIsaWZyYW1lOiJzdGFydFRhZ0lGcmFtZSIsbm9lbWJlZDoic3RhcnRUYWdSYXdUZXh0Iixub3NjcmlwdDoic3RhcnRUYWdSYXdUZXh0IixoMToic3RhcnRUYWdIZWFkaW5nIixoMjoic3RhcnRUYWdIZWFkaW5nIixoMzoic3RhcnRUYWdIZWFkaW5nIixoNDoic3RhcnRUYWdIZWFkaW5nIixoNToic3RhcnRUYWdIZWFkaW5nIixoNjoic3RhcnRUYWdIZWFkaW5nIixjYXB0aW9uOiJzdGFydFRhZ01pc3BsYWNlZCIsY29sOiJzdGFydFRhZ01pc3BsYWNlZCIsY29sZ3JvdXA6InN0YXJ0VGFnTWlzcGxhY2VkIixmcmFtZToic3RhcnRUYWdNaXNwbGFjZWQiLGZyYW1lc2V0OiJzdGFydFRhZ0ZyYW1lc2V0Iix0Ym9keToic3RhcnRUYWdNaXNwbGFjZWQiLHRkOiJzdGFydFRhZ01pc3BsYWNlZCIsdGZvb3Q6InN0YXJ0VGFnTWlzcGxhY2VkIix0aDoic3RhcnRUYWdNaXNwbGFjZWQiLHRoZWFkOiJzdGFydFRhZ01pc3BsYWNlZCIsdHI6InN0YXJ0VGFnTWlzcGxhY2VkIixvcHRpb246InN0YXJ0VGFnT3B0aW9uT3B0Z3JvdXAiLG9wdGdyb3VwOiJzdGFydFRhZ09wdGlvbk9wdGdyb3VwIixtYXRoOiJzdGFydFRhZ01hdGgiLHN2Zzoic3RhcnRUYWdTVkciLHJ0OiJzdGFydFRhZ1JwUnQiLHJwOiJzdGFydFRhZ1JwUnQiLCItZGVmYXVsdCI6InN0YXJ0VGFnT3RoZXIifSxtb2Rlcy5pbkJvZHkuZW5kX3RhZ19oYW5kbGVycz17cDoiZW5kVGFnUCIsYm9keToiZW5kVGFnQm9keSIsaHRtbDoiZW5kVGFnSHRtbCIsYWRkcmVzczoiZW5kVGFnQmxvY2siLGFydGljbGU6ImVuZFRhZ0Jsb2NrIixhc2lkZToiZW5kVGFnQmxvY2siLGJsb2NrcXVvdGU6ImVuZFRhZ0Jsb2NrIixidXR0b246ImVuZFRhZ0Jsb2NrIixjZW50ZXI6ImVuZFRhZ0Jsb2NrIixkZXRhaWxzOiJlbmRUYWdCbG9jayIsZGlyOiJlbmRUYWdCbG9jayIsZGl2OiJlbmRUYWdCbG9jayIsZGw6ImVuZFRhZ0Jsb2NrIixmaWVsZHNldDoiZW5kVGFnQmxvY2siLGZpZ2NhcHRpb246ImVuZFRhZ0Jsb2NrIixmaWd1cmU6ImVuZFRhZ0Jsb2NrIixmb290ZXI6ImVuZFRhZ0Jsb2NrIixoZWFkZXI6ImVuZFRhZ0Jsb2NrIixoZ3JvdXA6ImVuZFRhZ0Jsb2NrIixsaXN0aW5nOiJlbmRUYWdCbG9jayIsbWFpbjoiZW5kVGFnQmxvY2siLG1lbnU6ImVuZFRhZ0Jsb2NrIixuYXY6ImVuZFRhZ0Jsb2NrIixvbDoiZW5kVGFnQmxvY2siLHByZToiZW5kVGFnQmxvY2siLHNlY3Rpb246ImVuZFRhZ0Jsb2NrIixzdW1tYXJ5OiJlbmRUYWdCbG9jayIsdWw6ImVuZFRhZ0Jsb2NrIixmb3JtOiJlbmRUYWdGb3JtIixhcHBsZXQ6ImVuZFRhZ0FwcGxldE1hcnF1ZWVPYmplY3QiLG1hcnF1ZWU6ImVuZFRhZ0FwcGxldE1hcnF1ZWVPYmplY3QiLG9iamVjdDoiZW5kVGFnQXBwbGV0TWFycXVlZU9iamVjdCIsZGQ6ImVuZFRhZ0xpc3RJdGVtIixkdDoiZW5kVGFnTGlzdEl0ZW0iLGxpOiJlbmRUYWdMaXN0SXRlbSIsaDE6ImVuZFRhZ0hlYWRpbmciLGgyOiJlbmRUYWdIZWFkaW5nIixoMzoiZW5kVGFnSGVhZGluZyIsaDQ6ImVuZFRhZ0hlYWRpbmciLGg1OiJlbmRUYWdIZWFkaW5nIixoNjoiZW5kVGFnSGVhZGluZyIsYToiZW5kVGFnRm9ybWF0dGluZyIsYjoiZW5kVGFnRm9ybWF0dGluZyIsYmlnOiJlbmRUYWdGb3JtYXR0aW5nIixjb2RlOiJlbmRUYWdGb3JtYXR0aW5nIixlbToiZW5kVGFnRm9ybWF0dGluZyIsZm9udDoiZW5kVGFnRm9ybWF0dGluZyIsaToiZW5kVGFnRm9ybWF0dGluZyIsbm9icjoiZW5kVGFnRm9ybWF0dGluZyIsczoiZW5kVGFnRm9ybWF0dGluZyIsc21hbGw6ImVuZFRhZ0Zvcm1hdHRpbmciLHN0cmlrZToiZW5kVGFnRm9ybWF0dGluZyIsc3Ryb25nOiJlbmRUYWdGb3JtYXR0aW5nIix0dDoiZW5kVGFnRm9ybWF0dGluZyIsdToiZW5kVGFnRm9ybWF0dGluZyIsYnI6ImVuZFRhZ0JyIiwiLWRlZmF1bHQiOiJlbmRUYWdPdGhlciJ9LG1vZGVzLmluQm9keS5wcm9jZXNzQ2hhcmFjdGVycz1mdW5jdGlvbihidWZmZXIpe3RyZWUuc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lJiYodHJlZS5zaG91bGRTa2lwTGVhZGluZ05ld2xpbmU9ITEsYnVmZmVyLnNraXBBdE1vc3RPbmVMZWFkaW5nTmV3bGluZSgpKSx0cmVlLnJlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7dmFyIGNoYXJhY3RlcnM9YnVmZmVyLnRha2VSZW1haW5pbmcoKTtjaGFyYWN0ZXJzPWNoYXJhY3RlcnMucmVwbGFjZSgvXFx1MDAwMC9nLGZ1bmN0aW9uKCl7cmV0dXJuIHRyZWUucGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKSwiIn0pLGNoYXJhY3RlcnMmJih0cmVlLmluc2VydFRleHQoY2hhcmFjdGVycyksdHJlZS5mcmFtZXNldE9rJiYhaXNBbGxXaGl0ZXNwYWNlT3JSZXBsYWNlbWVudENoYXJhY3RlcnMoY2hhcmFjdGVycykmJih0cmVlLmZyYW1lc2V0T2s9ITEpKX0sbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnSHRtbD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUucGFyc2VFcnJvcigibm9uLWh0bWwtcm9vdCIpLHRyZWUuYWRkQXR0cmlidXRlc1RvRWxlbWVudCh0cmVlLm9wZW5FbGVtZW50cy5yb290Tm9kZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnUHJvY2Vzc0luSGVhZD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe21vZGVzLmluSGVhZC5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnQm9keT1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zdGFydC10YWciLHtuYW1lOiJib2R5In0pLDE9PXRyZWUub3BlbkVsZW1lbnRzLmxlbmd0aHx8ImJvZHkiIT10cmVlLm9wZW5FbGVtZW50cy5pdGVtKDEpLmxvY2FsTmFtZT9hc3NlcnQub2sodHJlZS5jb250ZXh0KToodHJlZS5mcmFtZXNldE9rPSExLHRyZWUuYWRkQXR0cmlidXRlc1RvRWxlbWVudCh0cmVlLm9wZW5FbGVtZW50cy5ib2R5RWxlbWVudCxhdHRyaWJ1dGVzKSl9LG1vZGVzLmluQm9keS5zdGFydFRhZ0ZyYW1lc2V0PWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7aWYodHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZyIse25hbWU6ImZyYW1lc2V0In0pLDE9PXRyZWUub3BlbkVsZW1lbnRzLmxlbmd0aHx8ImJvZHkiIT10cmVlLm9wZW5FbGVtZW50cy5pdGVtKDEpLmxvY2FsTmFtZSlhc3NlcnQub2sodHJlZS5jb250ZXh0KTtlbHNlIGlmKHRyZWUuZnJhbWVzZXRPayl7Zm9yKHRyZWUuZGV0YWNoRnJvbVBhcmVudCh0cmVlLm9wZW5FbGVtZW50cy5ib2R5RWxlbWVudCk7dHJlZS5vcGVuRWxlbWVudHMubGVuZ3RoPjE7KXRyZWUub3BlbkVsZW1lbnRzLnBvcCgpO3RyZWUuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiaW5GcmFtZXNldCIpfX0sbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnQ2xvc2VQPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5vcGVuRWxlbWVudHMuaW5CdXR0b25TY29wZSgicCIpJiZ0aGlzLmVuZFRhZ1AoInAiKSx0cmVlLmluc2VydEVsZW1lbnQobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnUHJlTGlzdGluZz1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUub3BlbkVsZW1lbnRzLmluQnV0dG9uU2NvcGUoInAiKSYmdGhpcy5lbmRUYWdQKCJwIiksdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsYXR0cmlidXRlcyksdHJlZS5mcmFtZXNldE9rPSExLHRyZWUuc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lPSEwfSxtb2Rlcy5pbkJvZHkuc3RhcnRUYWdGb3JtPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5mb3JtP3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zdGFydC10YWciLHtuYW1lOm5hbWV9KToodHJlZS5vcGVuRWxlbWVudHMuaW5CdXR0b25TY29wZSgicCIpJiZ0aGlzLmVuZFRhZ1AoInAiKSx0cmVlLmluc2VydEVsZW1lbnQobmFtZSxhdHRyaWJ1dGVzKSx0cmVlLmZvcm09dHJlZS5jdXJyZW50U3RhY2tJdGVtKCkpfSxtb2Rlcy5pbkJvZHkuc3RhcnRUYWdScFJ0PWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5vcGVuRWxlbWVudHMuaW5TY29wZSgicnVieSIpJiYodHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCksInJ1YnkiIT10cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUmJnRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zdGFydC10YWciLHtuYW1lOm5hbWV9KSksdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluQm9keS5zdGFydFRhZ0xpc3RJdGVtPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7Zm9yKHZhciBzdG9wTmFtZXM9e2xpOlsibGkiXSxkZDpbImRkIiwiZHQiXSxkdDpbImRkIiwiZHQiXX0sc3RvcE5hbWU9c3RvcE5hbWVzW25hbWVdLGVscz10cmVlLm9wZW5FbGVtZW50cyxpPWVscy5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIG5vZGU9ZWxzLml0ZW0oaSk7aWYoLTEhPXN0b3BOYW1lLmluZGV4T2Yobm9kZS5sb2NhbE5hbWUpKXt0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VuZFRhZyhub2RlLmxvY2FsTmFtZSk7YnJlYWt9aWYobm9kZS5pc1NwZWNpYWwoKSYmInAiIT09bm9kZS5sb2NhbE5hbWUmJiJhZGRyZXNzIiE9PW5vZGUubG9jYWxOYW1lJiYiZGl2IiE9PW5vZGUubG9jYWxOYW1lKWJyZWFrfXRyZWUub3BlbkVsZW1lbnRzLmluQnV0dG9uU2NvcGUoInAiKSYmdGhpcy5lbmRUYWdQKCJwIiksdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsYXR0cmlidXRlcyksdHJlZS5mcmFtZXNldE9rPSExfSxtb2Rlcy5pbkJvZHkuc3RhcnRUYWdQbGFpbnRleHQ9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXt0cmVlLm9wZW5FbGVtZW50cy5pbkJ1dHRvblNjb3BlKCJwIikmJnRoaXMuZW5kVGFnUCgicCIpLHRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpLHRyZWUudG9rZW5pemVyLnNldFN0YXRlKFRva2VuaXplci5QTEFJTlRFWFQpfSxtb2Rlcy5pbkJvZHkuc3RhcnRUYWdIZWFkaW5nPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5vcGVuRWxlbWVudHMuaW5CdXR0b25TY29wZSgicCIpJiZ0aGlzLmVuZFRhZ1AoInAiKSx0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5pc051bWJlcmVkSGVhZGVyKCkmJih0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtc3RhcnQtdGFnIix7bmFtZTpuYW1lfSksdHJlZS5wb3BFbGVtZW50KCkpLHRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpfSxtb2Rlcy5pbkJvZHkuc3RhcnRUYWdBPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dmFyIGFjdGl2ZUE9dHJlZS5lbGVtZW50SW5BY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoImEiKTthY3RpdmVBJiYodHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbXBsaWVzLWVuZC10YWciLHtzdGFydE5hbWU6ImEiLGVuZE5hbWU6ImEifSksdHJlZS5hZG9wdGlvbkFnZW5jeUVuZFRhZygiYSIpLHRyZWUub3BlbkVsZW1lbnRzLmNvbnRhaW5zKGFjdGl2ZUEpJiZ0cmVlLm9wZW5FbGVtZW50cy5yZW1vdmUoYWN0aXZlQSksdHJlZS5yZW1vdmVFbGVtZW50RnJvbUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyhhY3RpdmVBKSksdHJlZS5yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLHRyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnRm9ybWF0dGluZz1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKSx0cmVlLmluc2VydEZvcm1hdHRpbmdFbGVtZW50KG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluQm9keS5zdGFydFRhZ05vYnI9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXt0cmVlLnJlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCksdHJlZS5vcGVuRWxlbWVudHMuaW5TY29wZSgibm9iciIpJiYodHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbXBsaWVzLWVuZC10YWciLHtzdGFydE5hbWU6Im5vYnIiLGVuZE5hbWU6Im5vYnIifSksdGhpcy5wcm9jZXNzRW5kVGFnKCJub2JyIiksdHJlZS5yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpKSx0cmVlLmluc2VydEZvcm1hdHRpbmdFbGVtZW50KG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluQm9keS5zdGFydFRhZ0J1dHRvbj1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUub3BlbkVsZW1lbnRzLmluU2NvcGUoImJ1dHRvbiIpPyh0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtc3RhcnQtdGFnLWltcGxpZXMtZW5kLXRhZyIse3N0YXJ0TmFtZToiYnV0dG9uIixlbmROYW1lOiJidXR0b24ifSksdGhpcy5wcm9jZXNzRW5kVGFnKCJidXR0b24iKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcykpOih0cmVlLmZyYW1lc2V0T2s9ITEsdHJlZS5yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLHRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpKX0sbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnQXBwbGV0TWFycXVlZU9iamVjdD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKSx0cmVlLmluc2VydEVsZW1lbnQobmFtZSxhdHRyaWJ1dGVzKSx0cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoKE1hcmtlciksdHJlZS5mcmFtZXNldE9rPSExfSxtb2Rlcy5pbkJvZHkuZW5kVGFnQXBwbGV0TWFycXVlZU9iamVjdD1mdW5jdGlvbihuYW1lKXt0cmVlLm9wZW5FbGVtZW50cy5pblNjb3BlKG5hbWUpPyh0cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKSx0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUhPW5hbWUmJnRyZWUucGFyc2VFcnJvcigiZW5kLXRhZy10b28tZWFybHkiLHtuYW1lOm5hbWV9KSx0cmVlLm9wZW5FbGVtZW50cy5wb3BVbnRpbFBvcHBlZChuYW1lKSx0cmVlLmNsZWFyQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCkpOnRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnIix7bmFtZTpuYW1lfSl9LG1vZGVzLmluQm9keS5zdGFydFRhZ1htcD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUub3BlbkVsZW1lbnRzLmluQnV0dG9uU2NvcGUoInAiKSYmdGhpcy5wcm9jZXNzRW5kVGFnKCJwIiksdHJlZS5yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLHRyZWUucHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzKSx0cmVlLmZyYW1lc2V0T2s9ITF9LG1vZGVzLmluQm9keS5zdGFydFRhZ1RhYmxlPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7InF1aXJrcyIhPT10cmVlLmNvbXBhdE1vZGUmJnRyZWUub3BlbkVsZW1lbnRzLmluQnV0dG9uU2NvcGUoInAiKSYmdGhpcy5wcm9jZXNzRW5kVGFnKCJwIiksdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsYXR0cmlidXRlcyksdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCJpblRhYmxlIiksdHJlZS5mcmFtZXNldE9rPSExfSxtb2Rlcy5pbkJvZHkuc3RhcnRUYWdWb2lkRm9ybWF0dGluZz1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKSx0cmVlLmluc2VydFNlbGZDbG9zaW5nRWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpLHRyZWUuZnJhbWVzZXRPaz0hMX0sbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnUGFyYW1Tb3VyY2VUcmFjaz1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdFbGVtZW50KG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluQm9keS5zdGFydFRhZ0hyPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5vcGVuRWxlbWVudHMuaW5CdXR0b25TY29wZSgicCIpJiZ0aGlzLmVuZFRhZ1AoInAiKSx0cmVlLmluc2VydFNlbGZDbG9zaW5nRWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpLHRyZWUuZnJhbWVzZXRPaz0hMX0sbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnSW1hZ2U9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXt0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtc3RhcnQtdGFnLXRyZWF0ZWQtYXMiLHtvcmlnaW5hbE5hbWU6ImltYWdlIixuZXdOYW1lOiJpbWcifSksdGhpcy5wcm9jZXNzU3RhcnRUYWcoImltZyIsYXR0cmlidXRlcyl9LG1vZGVzLmluQm9keS5zdGFydFRhZ0lucHV0PWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dmFyIGN1cnJlbnRGcmFtZXNldE9rPXRyZWUuZnJhbWVzZXRPazt0aGlzLnN0YXJ0VGFnVm9pZEZvcm1hdHRpbmcobmFtZSxhdHRyaWJ1dGVzKTtmb3IodmFyIGtleSBpbiBhdHRyaWJ1dGVzKWlmKCJ0eXBlIj09YXR0cmlidXRlc1trZXldLm5vZGVOYW1lKXsiaGlkZGVuIj09YXR0cmlidXRlc1trZXldLm5vZGVWYWx1ZS50b0xvd2VyQ2FzZSgpJiYodHJlZS5mcmFtZXNldE9rPWN1cnJlbnRGcmFtZXNldE9rKTticmVha319LG1vZGVzLmluQm9keS5zdGFydFRhZ0lzaW5kZXg9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXtpZih0cmVlLnBhcnNlRXJyb3IoImRlcHJlY2F0ZWQtdGFnIix7bmFtZToiaXNpbmRleCJ9KSx0cmVlLnNlbGZDbG9zaW5nRmxhZ0Fja25vd2xlZGdlZD0hMCwhdHJlZS5mb3JtKXt2YXIgZm9ybUF0dHJpYnV0ZXM9W10saW5wdXRBdHRyaWJ1dGVzPVtdLHByb21wdD0iVGhpcyBpcyBhIHNlYXJjaGFibGUgaW5kZXguIEVudGVyIHNlYXJjaCBrZXl3b3JkczogIjtmb3IodmFyIGtleSBpbiBhdHRyaWJ1dGVzKXN3aXRjaChhdHRyaWJ1dGVzW2tleV0ubm9kZU5hbWUpe2Nhc2UiYWN0aW9uIjpmb3JtQXR0cmlidXRlcy5wdXNoKHtub2RlTmFtZToiYWN0aW9uIixub2RlVmFsdWU6YXR0cmlidXRlc1trZXldLm5vZGVWYWx1ZX0pO2JyZWFrO2Nhc2UicHJvbXB0Ijpwcm9tcHQ9YXR0cmlidXRlc1trZXldLm5vZGVWYWx1ZTticmVhaztjYXNlIm5hbWUiOmJyZWFrO2RlZmF1bHQ6aW5wdXRBdHRyaWJ1dGVzLnB1c2goe25vZGVOYW1lOmF0dHJpYnV0ZXNba2V5XS5ub2RlTmFtZSxub2RlVmFsdWU6YXR0cmlidXRlc1trZXldLm5vZGVWYWx1ZX0pfWlucHV0QXR0cmlidXRlcy5wdXNoKHtub2RlTmFtZToibmFtZSIsbm9kZVZhbHVlOiJpc2luZGV4In0pLHRoaXMucHJvY2Vzc1N0YXJ0VGFnKCJmb3JtIixmb3JtQXR0cmlidXRlcyksdGhpcy5wcm9jZXNzU3RhcnRUYWcoImhyIiksdGhpcy5wcm9jZXNzU3RhcnRUYWcoImxhYmVsIiksdGhpcy5wcm9jZXNzQ2hhcmFjdGVycyhuZXcgQ2hhcmFjdGVyQnVmZmVyKHByb21wdCkpLHRoaXMucHJvY2Vzc1N0YXJ0VGFnKCJpbnB1dCIsaW5wdXRBdHRyaWJ1dGVzKSx0aGlzLnByb2Nlc3NFbmRUYWcoImxhYmVsIiksdGhpcy5wcm9jZXNzU3RhcnRUYWcoImhyIiksdGhpcy5wcm9jZXNzRW5kVGFnKCJmb3JtIil9fSxtb2Rlcy5pbkJvZHkuc3RhcnRUYWdUZXh0YXJlYT1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpLHRyZWUudG9rZW5pemVyLnNldFN0YXRlKFRva2VuaXplci5SQ0RBVEEpLHRyZWUub3JpZ2luYWxJbnNlcnRpb25Nb2RlPXRyZWUuaW5zZXJ0aW9uTW9kZU5hbWUsdHJlZS5zaG91bGRTa2lwTGVhZGluZ05ld2xpbmU9ITAsdHJlZS5mcmFtZXNldE9rPSExLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgidGV4dCIpfSxtb2Rlcy5pbkJvZHkuc3RhcnRUYWdJRnJhbWU9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXt0cmVlLmZyYW1lc2V0T2s9ITEsdGhpcy5zdGFydFRhZ1Jhd1RleHQobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnUmF3VGV4dD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUucHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnU2VsZWN0PWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLHRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpLHRyZWUuZnJhbWVzZXRPaz0hMTt2YXIgaW5zZXJ0aW9uTW9kZU5hbWU9dHJlZS5pbnNlcnRpb25Nb2RlTmFtZTsiaW5UYWJsZSI9PWluc2VydGlvbk1vZGVOYW1lfHwiaW5DYXB0aW9uIj09aW5zZXJ0aW9uTW9kZU5hbWV8fCJpbkNvbHVtbkdyb3VwIj09aW5zZXJ0aW9uTW9kZU5hbWV8fCJpblRhYmxlQm9keSI9PWluc2VydGlvbk1vZGVOYW1lfHwiaW5Sb3ciPT1pbnNlcnRpb25Nb2RlTmFtZXx8ImluQ2VsbCI9PWluc2VydGlvbk1vZGVOYW1lP3RyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiaW5TZWxlY3RJblRhYmxlIik6dHJlZS5zZXRJbnNlcnRpb25Nb2RlKCJpblNlbGVjdCIpfSxtb2Rlcy5pbkJvZHkuc3RhcnRUYWdNaXNwbGFjZWQ9ZnVuY3Rpb24obmFtZSl7dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pZ25vcmVkIix7bmFtZTpuYW1lfSl9LG1vZGVzLmluQm9keS5lbmRUYWdNaXNwbGFjZWQ9ZnVuY3Rpb24obmFtZSl7dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWciLHtuYW1lOm5hbWV9KX0sbW9kZXMuaW5Cb2R5LmVuZFRhZ0JyPWZ1bmN0aW9uKG5hbWUpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnLXRyZWF0ZWQtYXMiLHtvcmlnaW5hbE5hbWU6ImJyIixuZXdOYW1lOiJiciBlbGVtZW50In0pLHRyZWUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKSx0cmVlLmluc2VydEVsZW1lbnQobmFtZSxbXSksdHJlZS5wb3BFbGVtZW50KCl9LG1vZGVzLmluQm9keS5zdGFydFRhZ09wdGlvbk9wdGdyb3VwPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7Im9wdGlvbiI9PXRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSYmdHJlZS5wb3BFbGVtZW50KCksdHJlZS5yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLHRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpfSxtb2Rlcy5pbkJvZHkuc3RhcnRUYWdPdGhlcj1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKSx0cmVlLmluc2VydEVsZW1lbnQobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5Cb2R5LmVuZFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUpe2Zvcih2YXIgbm9kZSxpPXRyZWUub3BlbkVsZW1lbnRzLmxlbmd0aC0xO2k+MDtpLS0pe2lmKG5vZGU9dHJlZS5vcGVuRWxlbWVudHMuaXRlbShpKSxub2RlLmxvY2FsTmFtZT09bmFtZSl7dHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKG5hbWUpLHRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSE9bmFtZSYmdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWciLHtuYW1lOm5hbWV9KSx0cmVlLm9wZW5FbGVtZW50cy5yZW1vdmVfb3BlbkVsZW1lbnRzX3VudGlsKGZ1bmN0aW9uKHgpe3JldHVybiB4PT09bm9kZX0pO2JyZWFrfWlmKG5vZGUuaXNTcGVjaWFsKCkpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnIix7bmFtZTpuYW1lfSk7YnJlYWt9fX0sbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnTWF0aD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMsc2VsZkNsb3Npbmcpe3RyZWUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKSxhdHRyaWJ1dGVzPXRyZWUuYWRqdXN0TWF0aE1MQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSxhdHRyaWJ1dGVzPXRyZWUuYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXMoYXR0cmlidXRlcyksdHJlZS5pbnNlcnRGb3JlaWduRWxlbWVudChuYW1lLGF0dHJpYnV0ZXMsImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHNlbGZDbG9zaW5nKX0sbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnU1ZHPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl7dHJlZS5yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLGF0dHJpYnV0ZXM9dHJlZS5hZGp1c3RTVkdBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpLGF0dHJpYnV0ZXM9dHJlZS5hZGp1c3RGb3JlaWduQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSx0cmVlLmluc2VydEZvcmVpZ25FbGVtZW50KG5hbWUsYXR0cmlidXRlcywiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHNlbGZDbG9zaW5nKX0sbW9kZXMuaW5Cb2R5LmVuZFRhZ1A9ZnVuY3Rpb24obmFtZSl7dHJlZS5vcGVuRWxlbWVudHMuaW5CdXR0b25TY29wZSgicCIpPyh0cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoInAiKSwicCIhPXRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSYmdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWltcGxpZWQtZW5kLXRhZyIse25hbWU6InAifSksdHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxQb3BwZWQobmFtZSkpOih0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZyIse25hbWU6InAifSksdGhpcy5zdGFydFRhZ0Nsb3NlUCgicCIsW10pLHRoaXMuZW5kVGFnUCgicCIpKX0sbW9kZXMuaW5Cb2R5LmVuZFRhZ0JvZHk9ZnVuY3Rpb24obmFtZSl7cmV0dXJuIHRyZWUub3BlbkVsZW1lbnRzLmluU2NvcGUoImJvZHkiKT8oImJvZHkiIT10cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUmJnRyZWUucGFyc2VFcnJvcigiZXhwZWN0ZWQtb25lLWVuZC10YWctYnV0LWdvdC1hbm90aGVyIix7ZXhwZWN0ZWROYW1lOnRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSxnb3ROYW1lOm5hbWV9KSx0cmVlLnNldEluc2VydGlvbk1vZGUoImFmdGVyQm9keSIpLHZvaWQgMCk6KHRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnIix7bmFtZTpuYW1lfSksdm9pZCAwKX0sbW9kZXMuaW5Cb2R5LmVuZFRhZ0h0bWw9ZnVuY3Rpb24obmFtZSl7cmV0dXJuIHRyZWUub3BlbkVsZW1lbnRzLmluU2NvcGUoImJvZHkiKT8oImJvZHkiIT10cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUmJnRyZWUucGFyc2VFcnJvcigiZXhwZWN0ZWQtb25lLWVuZC10YWctYnV0LWdvdC1hbm90aGVyIix7ZXhwZWN0ZWROYW1lOnRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSxnb3ROYW1lOm5hbWV9KSx0cmVlLnNldEluc2VydGlvbk1vZGUoImFmdGVyQm9keSIpLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpLHZvaWQgMCk6KHRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnIix7bmFtZTpuYW1lfSksdm9pZCAwKX0sbW9kZXMuaW5Cb2R5LmVuZFRhZ0Jsb2NrPWZ1bmN0aW9uKG5hbWUpe3RyZWUub3BlbkVsZW1lbnRzLmluU2NvcGUobmFtZSk/KHRyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpLHRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSE9bmFtZSYmdHJlZS5wYXJzZUVycm9yKCJlbmQtdGFnLXRvby1lYXJseSIse25hbWU6bmFtZX0pLHRyZWUub3BlbkVsZW1lbnRzLnBvcFVudGlsUG9wcGVkKG5hbWUpKTp0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZyIse25hbWU6bmFtZX0pfSxtb2Rlcy5pbkJvZHkuZW5kVGFnRm9ybT1mdW5jdGlvbihuYW1lKXt2YXIgbm9kZT10cmVlLmZvcm07dHJlZS5mb3JtPW51bGwsbm9kZSYmdHJlZS5vcGVuRWxlbWVudHMuaW5TY29wZShuYW1lKT8odHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCksdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkhPW5vZGUmJnRyZWUucGFyc2VFcnJvcigiZW5kLXRhZy10b28tZWFybHktaWdub3JlZCIse25hbWU6ImZvcm0ifSksdHJlZS5vcGVuRWxlbWVudHMucmVtb3ZlKG5vZGUpKTp0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZyIse25hbWU6bmFtZX0pfSxtb2Rlcy5pbkJvZHkuZW5kVGFnTGlzdEl0ZW09ZnVuY3Rpb24obmFtZSl7dHJlZS5vcGVuRWxlbWVudHMuaW5MaXN0SXRlbVNjb3BlKG5hbWUpPyh0cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MobmFtZSksdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lIT1uYW1lJiZ0cmVlLnBhcnNlRXJyb3IoImVuZC10YWctdG9vLWVhcmx5Iix7bmFtZTpuYW1lfSksdHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxQb3BwZWQobmFtZSkpOnRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnIix7bmFtZTpuYW1lfSl9LG1vZGVzLmluQm9keS5lbmRUYWdIZWFkaW5nPWZ1bmN0aW9uKG5hbWUpe3JldHVybiB0cmVlLm9wZW5FbGVtZW50cy5oYXNOdW1iZXJlZEhlYWRlckVsZW1lbnRJblNjb3BlKCk/KHRyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpLHRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSE9bmFtZSYmdHJlZS5wYXJzZUVycm9yKCJlbmQtdGFnLXRvby1lYXJseSIse25hbWU6bmFtZX0pLHRyZWUub3BlbkVsZW1lbnRzLnJlbW92ZV9vcGVuRWxlbWVudHNfdW50aWwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNOdW1iZXJlZEhlYWRlcigpfSksdm9pZCAwKToodHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWciLHtuYW1lOm5hbWV9KSx2b2lkIDApfSxtb2Rlcy5pbkJvZHkuZW5kVGFnRm9ybWF0dGluZz1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUuYWRvcHRpb25BZ2VuY3lFbmRUYWcobmFtZSl8fHRoaXMuZW5kVGFnT3RoZXIobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5DYXB0aW9uPU9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSksbW9kZXMuaW5DYXB0aW9uLnN0YXJ0X3RhZ19oYW5kbGVycz17aHRtbDoic3RhcnRUYWdIdG1sIixjYXB0aW9uOiJzdGFydFRhZ1RhYmxlRWxlbWVudCIsY29sOiJzdGFydFRhZ1RhYmxlRWxlbWVudCIsY29sZ3JvdXA6InN0YXJ0VGFnVGFibGVFbGVtZW50Iix0Ym9keToic3RhcnRUYWdUYWJsZUVsZW1lbnQiLHRkOiJzdGFydFRhZ1RhYmxlRWxlbWVudCIsdGZvb3Q6InN0YXJ0VGFnVGFibGVFbGVtZW50Iix0aGVhZDoic3RhcnRUYWdUYWJsZUVsZW1lbnQiLHRyOiJzdGFydFRhZ1RhYmxlRWxlbWVudCIsIi1kZWZhdWx0Ijoic3RhcnRUYWdPdGhlciJ9LG1vZGVzLmluQ2FwdGlvbi5lbmRfdGFnX2hhbmRsZXJzPXtjYXB0aW9uOiJlbmRUYWdDYXB0aW9uIix0YWJsZToiZW5kVGFnVGFibGUiLGJvZHk6ImVuZFRhZ0lnbm9yZSIsY29sOiJlbmRUYWdJZ25vcmUiLGNvbGdyb3VwOiJlbmRUYWdJZ25vcmUiLGh0bWw6ImVuZFRhZ0lnbm9yZSIsdGJvZHk6ImVuZFRhZ0lnbm9yZSIsdGQ6ImVuZFRhZ0lnbm9yZSIsdGZvb2Q6ImVuZFRhZ0lnbm9yZSIsdGhlYWQ6ImVuZFRhZ0lnbm9yZSIsdHI6ImVuZFRhZ0lnbm9yZSIsIi1kZWZhdWx0IjoiZW5kVGFnT3RoZXIifSxtb2Rlcy5pbkNhcHRpb24ucHJvY2Vzc0NoYXJhY3RlcnM9ZnVuY3Rpb24oZGF0YSl7bW9kZXMuaW5Cb2R5LnByb2Nlc3NDaGFyYWN0ZXJzKGRhdGEpfSxtb2Rlcy5pbkNhcHRpb24uc3RhcnRUYWdUYWJsZUVsZW1lbnQ9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXt0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZyIse25hbWU6bmFtZX0pO3ZhciBpZ25vcmVFbmRUYWc9IXRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSgiY2FwdGlvbiIpO3RyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKCJjYXB0aW9uIiksaWdub3JlRW5kVGFnfHx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluQ2FwdGlvbi5zdGFydFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl7bW9kZXMuaW5Cb2R5LnByb2Nlc3NTdGFydFRhZyhuYW1lLGF0dHJpYnV0ZXMsc2VsZkNsb3NpbmcpfSxtb2Rlcy5pbkNhcHRpb24uZW5kVGFnQ2FwdGlvbj1mdW5jdGlvbihuYW1lKXt0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoImNhcHRpb24iKT8odHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCksImNhcHRpb24iIT10cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUmJnRyZWUucGFyc2VFcnJvcigiZXhwZWN0ZWQtb25lLWVuZC10YWctYnV0LWdvdC1hbm90aGVyIix7Z290TmFtZToiY2FwdGlvbiIsZXhwZWN0ZWROYW1lOnRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZX0pLHRyZWUub3BlbkVsZW1lbnRzLnBvcFVudGlsUG9wcGVkKCJjYXB0aW9uIiksdHJlZS5jbGVhckFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiaW5UYWJsZSIpKTooYXNzZXJ0Lm9rKHRyZWUuY29udGV4dCksdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWciLHtuYW1lOm5hbWV9KSl9LG1vZGVzLmluQ2FwdGlvbi5lbmRUYWdUYWJsZT1mdW5jdGlvbihuYW1lKXt0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhYmxlLWluLWNhcHRpb24iKTt2YXIgaWdub3JlRW5kVGFnPSF0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoImNhcHRpb24iKTt0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VuZFRhZygiY2FwdGlvbiIpLGlnbm9yZUVuZFRhZ3x8dHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSl9LG1vZGVzLmluQ2FwdGlvbi5lbmRUYWdJZ25vcmU9ZnVuY3Rpb24obmFtZSl7dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWciLHtuYW1lOm5hbWV9KX0sbW9kZXMuaW5DYXB0aW9uLmVuZFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUpe21vZGVzLmluQm9keS5wcm9jZXNzRW5kVGFnKG5hbWUpfSxtb2Rlcy5pbkNlbGw9T2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKSxtb2Rlcy5pbkNlbGwuc3RhcnRfdGFnX2hhbmRsZXJzPXtodG1sOiJzdGFydFRhZ0h0bWwiLGNhcHRpb246InN0YXJ0VGFnVGFibGVPdGhlciIsY29sOiJzdGFydFRhZ1RhYmxlT3RoZXIiLGNvbGdyb3VwOiJzdGFydFRhZ1RhYmxlT3RoZXIiLHRib2R5OiJzdGFydFRhZ1RhYmxlT3RoZXIiLHRkOiJzdGFydFRhZ1RhYmxlT3RoZXIiLHRmb290OiJzdGFydFRhZ1RhYmxlT3RoZXIiLHRoOiJzdGFydFRhZ1RhYmxlT3RoZXIiLHRoZWFkOiJzdGFydFRhZ1RhYmxlT3RoZXIiLHRyOiJzdGFydFRhZ1RhYmxlT3RoZXIiLCItZGVmYXVsdCI6InN0YXJ0VGFnT3RoZXIifSxtb2Rlcy5pbkNlbGwuZW5kX3RhZ19oYW5kbGVycz17dGQ6ImVuZFRhZ1RhYmxlQ2VsbCIsdGg6ImVuZFRhZ1RhYmxlQ2VsbCIsYm9keToiZW5kVGFnSWdub3JlIixjYXB0aW9uOiJlbmRUYWdJZ25vcmUiLGNvbDoiZW5kVGFnSWdub3JlIixjb2xncm91cDoiZW5kVGFnSWdub3JlIixodG1sOiJlbmRUYWdJZ25vcmUiLHRhYmxlOiJlbmRUYWdJbXBseSIsdGJvZHk6ImVuZFRhZ0ltcGx5Iix0Zm9vdDoiZW5kVGFnSW1wbHkiLHRoZWFkOiJlbmRUYWdJbXBseSIsdHI6ImVuZFRhZ0ltcGx5IiwiLWRlZmF1bHQiOiJlbmRUYWdPdGhlciJ9LG1vZGVzLmluQ2VsbC5wcm9jZXNzQ2hhcmFjdGVycz1mdW5jdGlvbihkYXRhKXttb2Rlcy5pbkJvZHkucHJvY2Vzc0NoYXJhY3RlcnMoZGF0YSl9LG1vZGVzLmluQ2VsbC5zdGFydFRhZ1RhYmxlT3RoZXI9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzLHNlbGZDbG9zaW5nKXt0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoInRkIil8fHRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSgidGgiKT8odGhpcy5jbG9zZUNlbGwoKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZykpOnRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zdGFydC10YWciLHtuYW1lOm5hbWV9KX0sbW9kZXMuaW5DZWxsLnN0YXJ0VGFnT3RoZXI9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzLHNlbGZDbG9zaW5nKXttb2Rlcy5pbkJvZHkucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl9LG1vZGVzLmluQ2VsbC5lbmRUYWdUYWJsZUNlbGw9ZnVuY3Rpb24obmFtZSl7dHJlZS5vcGVuRWxlbWVudHMuaW5UYWJsZVNjb3BlKG5hbWUpPyh0cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MobmFtZSksdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lIT1uYW1lLnRvTG93ZXJDYXNlKCk/KHRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1jZWxsLWVuZC10YWciLHtuYW1lOm5hbWV9KSx0cmVlLm9wZW5FbGVtZW50cy5wb3BVbnRpbFBvcHBlZChuYW1lKSk6dHJlZS5wb3BFbGVtZW50KCksdHJlZS5jbGVhckFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiaW5Sb3ciKSk6dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWciLHtuYW1lOm5hbWV9KX0sbW9kZXMuaW5DZWxsLmVuZFRhZ0lnbm9yZT1mdW5jdGlvbihuYW1lKXt0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZyIse25hbWU6bmFtZX0pfSxtb2Rlcy5pbkNlbGwuZW5kVGFnSW1wbHk9ZnVuY3Rpb24obmFtZSl7dHJlZS5vcGVuRWxlbWVudHMuaW5UYWJsZVNjb3BlKG5hbWUpPyh0aGlzLmNsb3NlQ2VsbCgpLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpKTp0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZyIse25hbWU6bmFtZX0pfSxtb2Rlcy5pbkNlbGwuZW5kVGFnT3RoZXI9ZnVuY3Rpb24obmFtZSl7bW9kZXMuaW5Cb2R5LnByb2Nlc3NFbmRUYWcobmFtZSl9LG1vZGVzLmluQ2VsbC5jbG9zZUNlbGw9ZnVuY3Rpb24oKXt0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoInRkIik/dGhpcy5lbmRUYWdUYWJsZUNlbGwoInRkIik6dHJlZS5vcGVuRWxlbWVudHMuaW5UYWJsZVNjb3BlKCJ0aCIpJiZ0aGlzLmVuZFRhZ1RhYmxlQ2VsbCgidGgiKX0sbW9kZXMuaW5Db2x1bW5Hcm91cD1PYmplY3QuY3JlYXRlKG1vZGVzLmJhc2UpLG1vZGVzLmluQ29sdW1uR3JvdXAuc3RhcnRfdGFnX2hhbmRsZXJzPXtodG1sOiJzdGFydFRhZ0h0bWwiLGNvbDoic3RhcnRUYWdDb2wiLCItZGVmYXVsdCI6InN0YXJ0VGFnT3RoZXIifSxtb2Rlcy5pbkNvbHVtbkdyb3VwLmVuZF90YWdfaGFuZGxlcnM9e2NvbGdyb3VwOiJlbmRUYWdDb2xncm91cCIsY29sOiJlbmRUYWdDb2wiLCItZGVmYXVsdCI6ImVuZFRhZ090aGVyIn0sbW9kZXMuaW5Db2x1bW5Hcm91cC5pZ25vcmVFbmRUYWdDb2xncm91cD1mdW5jdGlvbigpe3JldHVybiJodG1sIj09dHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lfSxtb2Rlcy5pbkNvbHVtbkdyb3VwLnByb2Nlc3NDaGFyYWN0ZXJzPWZ1bmN0aW9uKGJ1ZmZlcil7dmFyIGxlYWRpbmdXaGl0ZXNwYWNlPWJ1ZmZlci50YWtlTGVhZGluZ1doaXRlc3BhY2UoKTtpZihsZWFkaW5nV2hpdGVzcGFjZSYmdHJlZS5pbnNlcnRUZXh0KGxlYWRpbmdXaGl0ZXNwYWNlKSxidWZmZXIubGVuZ3RoKXt2YXIgaWdub3JlRW5kVGFnPXRoaXMuaWdub3JlRW5kVGFnQ29sZ3JvdXAoKTt0aGlzLmVuZFRhZ0NvbGdyb3VwKCJjb2xncm91cCIpLGlnbm9yZUVuZFRhZ3x8dHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NDaGFyYWN0ZXJzKGJ1ZmZlcil9fSxtb2Rlcy5pbkNvbHVtbkdyb3VwLnN0YXJ0VGFnQ29sPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0VsZW1lbnQobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5Db2x1bW5Hcm91cC5zdGFydFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl7dmFyIGlnbm9yZUVuZFRhZz10aGlzLmlnbm9yZUVuZFRhZ0NvbGdyb3VwKCk7dGhpcy5lbmRUYWdDb2xncm91cCgiY29sZ3JvdXAiKSxpZ25vcmVFbmRUYWd8fHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzLHNlbGZDbG9zaW5nKX0sbW9kZXMuaW5Db2x1bW5Hcm91cC5lbmRUYWdDb2xncm91cD1mdW5jdGlvbihuYW1lKXt0aGlzLmlnbm9yZUVuZFRhZ0NvbGdyb3VwKCk/KGFzc2VydC5vayh0cmVlLmNvbnRleHQpLHRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnIix7bmFtZTpuYW1lfSkpOih0cmVlLnBvcEVsZW1lbnQoKSx0cmVlLnNldEluc2VydGlvbk1vZGUoImluVGFibGUiKSl9LG1vZGVzLmluQ29sdW1uR3JvdXAuZW5kVGFnQ29sPWZ1bmN0aW9uKCl7dHJlZS5wYXJzZUVycm9yKCJuby1lbmQtdGFnIix7bmFtZToiY29sIn0pfSxtb2Rlcy5pbkNvbHVtbkdyb3VwLmVuZFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUpe3ZhciBpZ25vcmVFbmRUYWc9dGhpcy5pZ25vcmVFbmRUYWdDb2xncm91cCgpO3RoaXMuZW5kVGFnQ29sZ3JvdXAoImNvbGdyb3VwIiksaWdub3JlRW5kVGFnfHx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VuZFRhZyhuYW1lKX0sbW9kZXMuaW5Gb3JlaWduQ29udGVudD1PYmplY3QuY3JlYXRlKG1vZGVzLmJhc2UpLG1vZGVzLmluRm9yZWlnbkNvbnRlbnQucHJvY2Vzc1N0YXJ0VGFnPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl7aWYoLTEhPVsiYiIsImJpZyIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJjZW50ZXIiLCJjb2RlIiwiZGQiLCJkaXYiLCJkbCIsImR0IiwiZW0iLCJlbWJlZCIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJociIsImkiLCJpbWciLCJsaSIsImxpc3RpbmciLCJtZW51IiwibWV0YSIsIm5vYnIiLCJvbCIsInAiLCJwcmUiLCJydWJ5IiwicyIsInNtYWxsIiwic3BhbiIsInN0cm9uZyIsInN0cmlrZSIsInN1YiIsInN1cCIsInRhYmxlIiwidHQiLCJ1IiwidWwiLCJ2YXIiXS5pbmRleE9mKG5hbWUpfHwiZm9udCI9PW5hbWUmJmF0dHJpYnV0ZXMuc29tZShmdW5jdGlvbihhdHRyKXtyZXR1cm5bImNvbG9yIiwiZmFjZSIsInNpemUiXS5pbmRleE9mKGF0dHIubm9kZU5hbWUpPj0wfSkpe2Zvcih0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtaHRtbC1lbGVtZW50LWluLWZvcmVpZ24tY29udGVudCIse25hbWU6bmFtZX0pO3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLmlzRm9yZWlnbigpJiYhdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkuaXNIdG1sSW50ZWdyYXRpb25Qb2ludCgpJiYhdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkuaXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCgpOyl0cmVlLm9wZW5FbGVtZW50cy5wb3AoKTtyZXR1cm4gdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NTdGFydFRhZyhuYW1lLGF0dHJpYnV0ZXMsc2VsZkNsb3NpbmcpLHZvaWQgMH0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI9PXRyZWUuY3VycmVudFN0YWNrSXRlbSgpLm5hbWVzcGFjZVVSSSYmKGF0dHJpYnV0ZXM9dHJlZS5hZGp1c3RNYXRoTUxBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpKSwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPT10cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5uYW1lc3BhY2VVUkkmJihuYW1lPXRyZWUuYWRqdXN0U1ZHVGFnTmFtZUNhc2UobmFtZSksYXR0cmlidXRlcz10cmVlLmFkanVzdFNWR0F0dHJpYnV0ZXMoYXR0cmlidXRlcykpLGF0dHJpYnV0ZXM9dHJlZS5hZGp1c3RGb3JlaWduQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSx0cmVlLmluc2VydEZvcmVpZ25FbGVtZW50KG5hbWUsYXR0cmlidXRlcyx0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5uYW1lc3BhY2VVUkksc2VsZkNsb3NpbmcpfSxtb2Rlcy5pbkZvcmVpZ25Db250ZW50LnByb2Nlc3NFbmRUYWc9ZnVuY3Rpb24obmFtZSl7dmFyIG5vZGU9dHJlZS5jdXJyZW50U3RhY2tJdGVtKCksaW5kZXg9dHJlZS5vcGVuRWxlbWVudHMubGVuZ3RoLTE7Zm9yKG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkhPW5hbWUmJnRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnIix7bmFtZTpuYW1lfSk7Oyl7aWYoMD09PWluZGV4KWJyZWFrO2lmKG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCk9PW5hbWUpe2Zvcig7dHJlZS5vcGVuRWxlbWVudHMucG9wKCkhPW5vZGU7KTticmVha31pZihpbmRleC09MSxub2RlPXRyZWUub3BlbkVsZW1lbnRzLml0ZW0oaW5kZXgpLCFub2RlLmlzRm9yZWlnbigpKXt0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VuZFRhZyhuYW1lKTticmVha319fSxtb2Rlcy5pbkZvcmVpZ25Db250ZW50LnByb2Nlc3NDaGFyYWN0ZXJzPWZ1bmN0aW9uKGJ1ZmZlcil7dmFyIGNoYXJhY3RlcnM9YnVmZmVyLnRha2VSZW1haW5pbmcoKTtjaGFyYWN0ZXJzPWNoYXJhY3RlcnMucmVwbGFjZSgvXFx1MDAwMC9nLGZ1bmN0aW9uKCl7cmV0dXJuIHRyZWUucGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKSwi77+9In0pLHRyZWUuZnJhbWVzZXRPayYmIWlzQWxsV2hpdGVzcGFjZU9yUmVwbGFjZW1lbnRDaGFyYWN0ZXJzKGNoYXJhY3RlcnMpJiYodHJlZS5mcmFtZXNldE9rPSExKSx0cmVlLmluc2VydFRleHQoY2hhcmFjdGVycyl9LG1vZGVzLmluSGVhZE5vc2NyaXB0PU9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSksbW9kZXMuaW5IZWFkTm9zY3JpcHQuc3RhcnRfdGFnX2hhbmRsZXJzPXtodG1sOiJzdGFydFRhZ0h0bWwiLGJhc2Vmb250OiJzdGFydFRhZ0Jhc2Vmb250Qmdzb3VuZExpbmtNZXRhTm9mcmFtZXNTdHlsZSIsYmdzb3VuZDoic3RhcnRUYWdCYXNlZm9udEJnc291bmRMaW5rTWV0YU5vZnJhbWVzU3R5bGUiLGxpbms6InN0YXJ0VGFnQmFzZWZvbnRCZ3NvdW5kTGlua01ldGFOb2ZyYW1lc1N0eWxlIixtZXRhOiJzdGFydFRhZ0Jhc2Vmb250Qmdzb3VuZExpbmtNZXRhTm9mcmFtZXNTdHlsZSIsbm9mcmFtZXM6InN0YXJ0VGFnQmFzZWZvbnRCZ3NvdW5kTGlua01ldGFOb2ZyYW1lc1N0eWxlIixzdHlsZToic3RhcnRUYWdCYXNlZm9udEJnc291bmRMaW5rTWV0YU5vZnJhbWVzU3R5bGUiLGhlYWQ6InN0YXJ0VGFnSGVhZE5vc2NyaXB0Iixub3NjcmlwdDoic3RhcnRUYWdIZWFkTm9zY3JpcHQiLCItZGVmYXVsdCI6InN0YXJ0VGFnT3RoZXIifSxtb2Rlcy5pbkhlYWROb3NjcmlwdC5lbmRfdGFnX2hhbmRsZXJzPXtub3NjcmlwdDoiZW5kVGFnTm9zY3JpcHQiLGJyOiJlbmRUYWdCciIsIi1kZWZhdWx0IjoiZW5kVGFnT3RoZXIifSxtb2Rlcy5pbkhlYWROb3NjcmlwdC5wcm9jZXNzQ2hhcmFjdGVycz1mdW5jdGlvbihidWZmZXIpe3ZhciBsZWFkaW5nV2hpdGVzcGFjZT1idWZmZXIudGFrZUxlYWRpbmdXaGl0ZXNwYWNlKCk7bGVhZGluZ1doaXRlc3BhY2UmJnRyZWUuaW5zZXJ0VGV4dChsZWFkaW5nV2hpdGVzcGFjZSksYnVmZmVyLmxlbmd0aCYmKHRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyLWluLWZyYW1lc2V0IiksdGhpcy5hbnl0aGluZ0Vsc2UoKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0NoYXJhY3RlcnMoYnVmZmVyKSl9LG1vZGVzLmluSGVhZE5vc2NyaXB0LnByb2Nlc3NDb21tZW50PWZ1bmN0aW9uKGRhdGEpe21vZGVzLmluSGVhZC5wcm9jZXNzQ29tbWVudChkYXRhKX0sbW9kZXMuaW5IZWFkTm9zY3JpcHQuc3RhcnRUYWdCYXNlZm9udEJnc291bmRMaW5rTWV0YU5vZnJhbWVzU3R5bGU9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXttb2Rlcy5pbkhlYWQucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluSGVhZE5vc2NyaXB0LnN0YXJ0VGFnSGVhZE5vc2NyaXB0PWZ1bmN0aW9uKG5hbWUpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zdGFydC10YWctaW4tZnJhbWVzZXQiLHtuYW1lOm5hbWV9KX0sbW9kZXMuaW5IZWFkTm9zY3JpcHQuc3RhcnRUYWdPdGhlcj1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zdGFydC10YWctaW4tZnJhbWVzZXQiLHtuYW1lOm5hbWV9KSx0aGlzLmFueXRoaW5nRWxzZSgpLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5IZWFkTm9zY3JpcHQuZW5kVGFnQnI9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXt0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZy1pbi1mcmFtZXNldCIse25hbWU6bmFtZX0pLHRoaXMuYW55dGhpbmdFbHNlKCksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5IZWFkTm9zY3JpcHQuZW5kVGFnTm9zY3JpcHQ9ZnVuY3Rpb24oKXt0cmVlLnBvcEVsZW1lbnQoKSx0cmVlLnNldEluc2VydGlvbk1vZGUoImluSGVhZCIpfSxtb2Rlcy5pbkhlYWROb3NjcmlwdC5lbmRUYWdPdGhlcj1mdW5jdGlvbihuYW1lKXt0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZy1pbi1mcmFtZXNldCIse25hbWU6bmFtZX0pfSxtb2Rlcy5pbkhlYWROb3NjcmlwdC5hbnl0aGluZ0Vsc2U9ZnVuY3Rpb24oKXt0cmVlLnBvcEVsZW1lbnQoKSx0cmVlLnNldEluc2VydGlvbk1vZGUoImluSGVhZCIpfSxtb2Rlcy5pbkZyYW1lc2V0PU9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSksbW9kZXMuaW5GcmFtZXNldC5zdGFydF90YWdfaGFuZGxlcnM9e2h0bWw6InN0YXJ0VGFnSHRtbCIsZnJhbWVzZXQ6InN0YXJ0VGFnRnJhbWVzZXQiLGZyYW1lOiJzdGFydFRhZ0ZyYW1lIixub2ZyYW1lczoic3RhcnRUYWdOb2ZyYW1lcyIsIi1kZWZhdWx0Ijoic3RhcnRUYWdPdGhlciJ9LG1vZGVzLmluRnJhbWVzZXQuZW5kX3RhZ19oYW5kbGVycz17ZnJhbWVzZXQ6ImVuZFRhZ0ZyYW1lc2V0Iixub2ZyYW1lczoiZW5kVGFnTm9mcmFtZXMiLCItZGVmYXVsdCI6ImVuZFRhZ090aGVyIn0sbW9kZXMuaW5GcmFtZXNldC5wcm9jZXNzQ2hhcmFjdGVycz1mdW5jdGlvbigpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyLWluLWZyYW1lc2V0Iil9LG1vZGVzLmluRnJhbWVzZXQuc3RhcnRUYWdGcmFtZXNldD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpfSxtb2Rlcy5pbkZyYW1lc2V0LnN0YXJ0VGFnRnJhbWU9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXt0cmVlLmluc2VydFNlbGZDbG9zaW5nRWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpfSxtb2Rlcy5pbkZyYW1lc2V0LnN0YXJ0VGFnTm9mcmFtZXM9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXttb2Rlcy5pbkJvZHkucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluRnJhbWVzZXQuc3RhcnRUYWdPdGhlcj1mdW5jdGlvbihuYW1lKXt0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtc3RhcnQtdGFnLWluLWZyYW1lc2V0Iix7bmFtZTpuYW1lfSl9LG1vZGVzLmluRnJhbWVzZXQuZW5kVGFnRnJhbWVzZXQ9ZnVuY3Rpb24oKXsiaHRtbCI9PXRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZT90cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZnJhbWVzZXQtaW4tZnJhbWVzZXQtaW5uZXJodG1sIik6dHJlZS5wb3BFbGVtZW50KCksdHJlZS5jb250ZXh0fHwiZnJhbWVzZXQiPT10cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWV8fHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiYWZ0ZXJGcmFtZXNldCIpfSxtb2Rlcy5pbkZyYW1lc2V0LmVuZFRhZ05vZnJhbWVzPWZ1bmN0aW9uKG5hbWUpe21vZGVzLmluQm9keS5wcm9jZXNzRW5kVGFnKG5hbWUpfSxtb2Rlcy5pbkZyYW1lc2V0LmVuZFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnLWluLWZyYW1lc2V0Iix7bmFtZTpuYW1lfSl9LG1vZGVzLmluVGFibGU9T2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKSxtb2Rlcy5pblRhYmxlLnN0YXJ0X3RhZ19oYW5kbGVycz17aHRtbDoic3RhcnRUYWdIdG1sIixjYXB0aW9uOiJzdGFydFRhZ0NhcHRpb24iLGNvbGdyb3VwOiJzdGFydFRhZ0NvbGdyb3VwIixjb2w6InN0YXJ0VGFnQ29sIix0YWJsZToic3RhcnRUYWdUYWJsZSIsdGJvZHk6InN0YXJ0VGFnUm93R3JvdXAiLHRmb290OiJzdGFydFRhZ1Jvd0dyb3VwIix0aGVhZDoic3RhcnRUYWdSb3dHcm91cCIsdGQ6InN0YXJ0VGFnSW1wbHlUYm9keSIsdGg6InN0YXJ0VGFnSW1wbHlUYm9keSIsdHI6InN0YXJ0VGFnSW1wbHlUYm9keSIsc3R5bGU6InN0YXJ0VGFnU3R5bGVTY3JpcHQiLHNjcmlwdDoic3RhcnRUYWdTdHlsZVNjcmlwdCIsaW5wdXQ6InN0YXJ0VGFnSW5wdXQiLGZvcm06InN0YXJ0VGFnRm9ybSIsIi1kZWZhdWx0Ijoic3RhcnRUYWdPdGhlciJ9LG1vZGVzLmluVGFibGUuZW5kX3RhZ19oYW5kbGVycz17dGFibGU6ImVuZFRhZ1RhYmxlIixib2R5OiJlbmRUYWdJZ25vcmUiLGNhcHRpb246ImVuZFRhZ0lnbm9yZSIsY29sOiJlbmRUYWdJZ25vcmUiLGNvbGdyb3VwOiJlbmRUYWdJZ25vcmUiLGh0bWw6ImVuZFRhZ0lnbm9yZSIsdGJvZHk6ImVuZFRhZ0lnbm9yZSIsdGQ6ImVuZFRhZ0lnbm9yZSIsdGZvb3Q6ImVuZFRhZ0lnbm9yZSIsdGg6ImVuZFRhZ0lnbm9yZSIsdGhlYWQ6ImVuZFRhZ0lnbm9yZSIsdHI6ImVuZFRhZ0lnbm9yZSIsIi1kZWZhdWx0IjoiZW5kVGFnT3RoZXIifSxtb2Rlcy5pblRhYmxlLnByb2Nlc3NDaGFyYWN0ZXJzPWZ1bmN0aW9uKGRhdGEpe2lmKHRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmlzRm9zdGVyUGFyZW50aW5nKCkpe3ZhciBvcmlnaW5hbEluc2VydGlvbk1vZGU9dHJlZS5pbnNlcnRpb25Nb2RlTmFtZTtcbnRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiaW5UYWJsZVRleHQiKSx0cmVlLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZT1vcmlnaW5hbEluc2VydGlvbk1vZGUsdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NDaGFyYWN0ZXJzKGRhdGEpfWVsc2UgdHJlZS5yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50PSEwLG1vZGVzLmluQm9keS5wcm9jZXNzQ2hhcmFjdGVycyhkYXRhKSx0cmVlLnJlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQ9ITF9LG1vZGVzLmluVGFibGUuc3RhcnRUYWdDYXB0aW9uPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZVNjb3BlTWFya2VyKCksdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucHVzaChNYXJrZXIpLHRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiaW5DYXB0aW9uIil9LG1vZGVzLmluVGFibGUuc3RhcnRUYWdDb2xncm91cD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFibGVTY29wZU1hcmtlcigpLHRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiaW5Db2x1bW5Hcm91cCIpfSxtb2Rlcy5pblRhYmxlLnN0YXJ0VGFnQ29sPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dGhpcy5zdGFydFRhZ0NvbGdyb3VwKCJjb2xncm91cCIsW10pLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5UYWJsZS5zdGFydFRhZ1Jvd0dyb3VwPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZVNjb3BlTWFya2VyKCksdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsYXR0cmlidXRlcyksdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCJpblRhYmxlQm9keSIpfSxtb2Rlcy5pblRhYmxlLnN0YXJ0VGFnSW1wbHlUYm9keT1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RoaXMuc3RhcnRUYWdSb3dHcm91cCgidGJvZHkiLFtdKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluVGFibGUuc3RhcnRUYWdUYWJsZT1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zdGFydC10YWctaW1wbGllcy1lbmQtdGFnIix7c3RhcnROYW1lOiJ0YWJsZSIsZW5kTmFtZToidGFibGUifSksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcoInRhYmxlIiksdHJlZS5jb250ZXh0fHx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluVGFibGUuc3RhcnRUYWdTdHlsZVNjcmlwdD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe21vZGVzLmluSGVhZC5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5UYWJsZS5zdGFydFRhZ0lucHV0PWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7Zm9yKHZhciBrZXkgaW4gYXR0cmlidXRlcylpZigidHlwZSI9PWF0dHJpYnV0ZXNba2V5XS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtpZigiaGlkZGVuIj09YXR0cmlidXRlc1trZXldLm5vZGVWYWx1ZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtaGlkZGVuLWlucHV0LWluLXRhYmxlIiksdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsYXR0cmlidXRlcyksdHJlZS5vcGVuRWxlbWVudHMucG9wKCksdm9pZCAwO2JyZWFrfXRoaXMuc3RhcnRUYWdPdGhlcihuYW1lLGF0dHJpYnV0ZXMpfSxtb2Rlcy5pblRhYmxlLnN0YXJ0VGFnRm9ybT1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1mb3JtLWluLXRhYmxlIiksdHJlZS5mb3JtfHwodHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsYXR0cmlidXRlcyksdHJlZS5mb3JtPXRyZWUuY3VycmVudFN0YWNrSXRlbSgpLHRyZWUub3BlbkVsZW1lbnRzLnBvcCgpKX0sbW9kZXMuaW5UYWJsZS5zdGFydFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl7dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbXBsaWVzLXRhYmxlLXZvb2RvbyIse25hbWU6bmFtZX0pLHRyZWUucmVkaXJlY3RBdHRhY2hUb0Zvc3RlclBhcmVudD0hMCxtb2Rlcy5pbkJvZHkucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyksdHJlZS5yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50PSExfSxtb2Rlcy5pblRhYmxlLmVuZFRhZ1RhYmxlPWZ1bmN0aW9uKG5hbWUpe3RyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZShuYW1lKT8odHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCksdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lIT1uYW1lJiZ0cmVlLnBhcnNlRXJyb3IoImVuZC10YWctdG9vLWVhcmx5LW5hbWVkIix7Z290TmFtZToidGFibGUiLGV4cGVjdGVkTmFtZTp0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWV9KSx0cmVlLm9wZW5FbGVtZW50cy5wb3BVbnRpbFBvcHBlZCgidGFibGUiKSx0cmVlLnJlc2V0SW5zZXJ0aW9uTW9kZSgpKTooYXNzZXJ0Lm9rKHRyZWUuY29udGV4dCksdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWciLHtuYW1lOm5hbWV9KSl9LG1vZGVzLmluVGFibGUuZW5kVGFnSWdub3JlPWZ1bmN0aW9uKG5hbWUpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnIix7bmFtZTpuYW1lfSl9LG1vZGVzLmluVGFibGUuZW5kVGFnT3RoZXI9ZnVuY3Rpb24obmFtZSl7dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWctaW1wbGllcy10YWJsZS12b29kb28iLHtuYW1lOm5hbWV9KSx0cmVlLnJlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQ9ITAsbW9kZXMuaW5Cb2R5LnByb2Nlc3NFbmRUYWcobmFtZSksdHJlZS5yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50PSExfSxtb2Rlcy5pblRhYmxlVGV4dD1PYmplY3QuY3JlYXRlKG1vZGVzLmJhc2UpLG1vZGVzLmluVGFibGVUZXh0LmZsdXNoQ2hhcmFjdGVycz1mdW5jdGlvbigpe3ZhciBjaGFyYWN0ZXJzPXRyZWUucGVuZGluZ1RhYmxlQ2hhcmFjdGVycy5qb2luKCIiKTtpc0FsbFdoaXRlc3BhY2UoY2hhcmFjdGVycyk/dHJlZS5pbnNlcnRUZXh0KGNoYXJhY3RlcnMpOih0cmVlLnJlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQ9ITAsdHJlZS5yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLHRyZWUuaW5zZXJ0VGV4dChjaGFyYWN0ZXJzKSx0cmVlLmZyYW1lc2V0T2s9ITEsdHJlZS5yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50PSExKSx0cmVlLnBlbmRpbmdUYWJsZUNoYXJhY3RlcnM9W119LG1vZGVzLmluVGFibGVUZXh0LnByb2Nlc3NDb21tZW50PWZ1bmN0aW9uKGRhdGEpe3RoaXMuZmx1c2hDaGFyYWN0ZXJzKCksdHJlZS5zZXRJbnNlcnRpb25Nb2RlKHRyZWUub3JpZ2luYWxJbnNlcnRpb25Nb2RlKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0NvbW1lbnQoZGF0YSl9LG1vZGVzLmluVGFibGVUZXh0LnByb2Nlc3NFT0Y9ZnVuY3Rpb24oKXt0aGlzLmZsdXNoQ2hhcmFjdGVycygpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSh0cmVlLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFT0YoKX0sbW9kZXMuaW5UYWJsZVRleHQucHJvY2Vzc0NoYXJhY3RlcnM9ZnVuY3Rpb24oYnVmZmVyKXt2YXIgY2hhcmFjdGVycz1idWZmZXIudGFrZVJlbWFpbmluZygpO2NoYXJhY3RlcnM9Y2hhcmFjdGVycy5yZXBsYWNlKC9cXHUwMDAwL2csZnVuY3Rpb24oKXtyZXR1cm4gdHJlZS5wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpLCIifSksY2hhcmFjdGVycyYmdHJlZS5wZW5kaW5nVGFibGVDaGFyYWN0ZXJzLnB1c2goY2hhcmFjdGVycyl9LG1vZGVzLmluVGFibGVUZXh0LnByb2Nlc3NTdGFydFRhZz1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMsc2VsZkNsb3Npbmcpe3RoaXMuZmx1c2hDaGFyYWN0ZXJzKCksdHJlZS5zZXRJbnNlcnRpb25Nb2RlKHRyZWUub3JpZ2luYWxJbnNlcnRpb25Nb2RlKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl9LG1vZGVzLmluVGFibGVUZXh0LnByb2Nlc3NFbmRUYWc9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXt0aGlzLmZsdXNoQ2hhcmFjdGVycygpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSh0cmVlLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5UYWJsZUJvZHk9T2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKSxtb2Rlcy5pblRhYmxlQm9keS5zdGFydF90YWdfaGFuZGxlcnM9e2h0bWw6InN0YXJ0VGFnSHRtbCIsdHI6InN0YXJ0VGFnVHIiLHRkOiJzdGFydFRhZ1RhYmxlQ2VsbCIsdGg6InN0YXJ0VGFnVGFibGVDZWxsIixjYXB0aW9uOiJzdGFydFRhZ1RhYmxlT3RoZXIiLGNvbDoic3RhcnRUYWdUYWJsZU90aGVyIixjb2xncm91cDoic3RhcnRUYWdUYWJsZU90aGVyIix0Ym9keToic3RhcnRUYWdUYWJsZU90aGVyIix0Zm9vdDoic3RhcnRUYWdUYWJsZU90aGVyIix0aGVhZDoic3RhcnRUYWdUYWJsZU90aGVyIiwiLWRlZmF1bHQiOiJzdGFydFRhZ090aGVyIn0sbW9kZXMuaW5UYWJsZUJvZHkuZW5kX3RhZ19oYW5kbGVycz17dGFibGU6ImVuZFRhZ1RhYmxlIix0Ym9keToiZW5kVGFnVGFibGVSb3dHcm91cCIsdGZvb3Q6ImVuZFRhZ1RhYmxlUm93R3JvdXAiLHRoZWFkOiJlbmRUYWdUYWJsZVJvd0dyb3VwIixib2R5OiJlbmRUYWdJZ25vcmUiLGNhcHRpb246ImVuZFRhZ0lnbm9yZSIsY29sOiJlbmRUYWdJZ25vcmUiLGNvbGdyb3VwOiJlbmRUYWdJZ25vcmUiLGh0bWw6ImVuZFRhZ0lnbm9yZSIsdGQ6ImVuZFRhZ0lnbm9yZSIsdGg6ImVuZFRhZ0lnbm9yZSIsdHI6ImVuZFRhZ0lnbm9yZSIsIi1kZWZhdWx0IjoiZW5kVGFnT3RoZXIifSxtb2Rlcy5pblRhYmxlQm9keS5wcm9jZXNzQ2hhcmFjdGVycz1mdW5jdGlvbihkYXRhKXttb2Rlcy5pblRhYmxlLnByb2Nlc3NDaGFyYWN0ZXJzKGRhdGEpfSxtb2Rlcy5pblRhYmxlQm9keS5zdGFydFRhZ1RyPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZUJvZHlTY29wZU1hcmtlcigpLHRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgiaW5Sb3ciKX0sbW9kZXMuaW5UYWJsZUJvZHkuc3RhcnRUYWdUYWJsZUNlbGw9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXt0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtY2VsbC1pbi10YWJsZS1ib2R5Iix7bmFtZTpuYW1lfSksdGhpcy5zdGFydFRhZ1RyKCJ0ciIsW10pLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5UYWJsZUJvZHkuc3RhcnRUYWdUYWJsZU90aGVyPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5vcGVuRWxlbWVudHMuaW5UYWJsZVNjb3BlKCJ0Ym9keSIpfHx0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoInRoZWFkIil8fHRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSgidGZvb3QiKT8odHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZUJvZHlTY29wZU1hcmtlcigpLHRoaXMuZW5kVGFnVGFibGVSb3dHcm91cCh0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUpLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzKSk6dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZyIse25hbWU6bmFtZX0pfSxtb2Rlcy5pblRhYmxlQm9keS5zdGFydFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7bW9kZXMuaW5UYWJsZS5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5UYWJsZUJvZHkuZW5kVGFnVGFibGVSb3dHcm91cD1mdW5jdGlvbihuYW1lKXt0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUobmFtZSk/KHRyZWUub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFibGVCb2R5U2NvcGVNYXJrZXIoKSx0cmVlLnBvcEVsZW1lbnQoKSx0cmVlLnNldEluc2VydGlvbk1vZGUoImluVGFibGUiKSk6dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWctaW4tdGFibGUtYm9keSIse25hbWU6bmFtZX0pfSxtb2Rlcy5pblRhYmxlQm9keS5lbmRUYWdUYWJsZT1mdW5jdGlvbihuYW1lKXt0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoInRib2R5Iil8fHRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSgidGhlYWQiKXx8dHJlZS5vcGVuRWxlbWVudHMuaW5UYWJsZVNjb3BlKCJ0Zm9vdCIpPyh0cmVlLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhYmxlQm9keVNjb3BlTWFya2VyKCksdGhpcy5lbmRUYWdUYWJsZVJvd0dyb3VwKHRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSkpOnRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnIix7bmFtZTpuYW1lfSl9LG1vZGVzLmluVGFibGVCb2R5LmVuZFRhZ0lnbm9yZT1mdW5jdGlvbihuYW1lKXt0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZy1pbi10YWJsZS1ib2R5Iix7bmFtZTpuYW1lfSl9LG1vZGVzLmluVGFibGVCb2R5LmVuZFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUpe21vZGVzLmluVGFibGUucHJvY2Vzc0VuZFRhZyhuYW1lKX0sbW9kZXMuaW5TZWxlY3Q9T2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKSxtb2Rlcy5pblNlbGVjdC5zdGFydF90YWdfaGFuZGxlcnM9e2h0bWw6InN0YXJ0VGFnSHRtbCIsb3B0aW9uOiJzdGFydFRhZ09wdGlvbiIsb3B0Z3JvdXA6InN0YXJ0VGFnT3B0Z3JvdXAiLHNlbGVjdDoic3RhcnRUYWdTZWxlY3QiLGlucHV0OiJzdGFydFRhZ0lucHV0IixrZXlnZW46InN0YXJ0VGFnSW5wdXQiLHRleHRhcmVhOiJzdGFydFRhZ0lucHV0IixzY3JpcHQ6InN0YXJ0VGFnU2NyaXB0IiwiLWRlZmF1bHQiOiJzdGFydFRhZ090aGVyIn0sbW9kZXMuaW5TZWxlY3QuZW5kX3RhZ19oYW5kbGVycz17b3B0aW9uOiJlbmRUYWdPcHRpb24iLG9wdGdyb3VwOiJlbmRUYWdPcHRncm91cCIsc2VsZWN0OiJlbmRUYWdTZWxlY3QiLGNhcHRpb246ImVuZFRhZ1RhYmxlRWxlbWVudHMiLHRhYmxlOiJlbmRUYWdUYWJsZUVsZW1lbnRzIix0Ym9keToiZW5kVGFnVGFibGVFbGVtZW50cyIsdGZvb3Q6ImVuZFRhZ1RhYmxlRWxlbWVudHMiLHRoZWFkOiJlbmRUYWdUYWJsZUVsZW1lbnRzIix0cjoiZW5kVGFnVGFibGVFbGVtZW50cyIsdGQ6ImVuZFRhZ1RhYmxlRWxlbWVudHMiLHRoOiJlbmRUYWdUYWJsZUVsZW1lbnRzIiwiLWRlZmF1bHQiOiJlbmRUYWdPdGhlciJ9LG1vZGVzLmluU2VsZWN0LnByb2Nlc3NDaGFyYWN0ZXJzPWZ1bmN0aW9uKGJ1ZmZlcil7dmFyIGRhdGE9YnVmZmVyLnRha2VSZW1haW5pbmcoKTtkYXRhPWRhdGEucmVwbGFjZSgvXFx1MDAwMC9nLGZ1bmN0aW9uKCl7cmV0dXJuIHRyZWUucGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKSwiIn0pLGRhdGEmJnRyZWUuaW5zZXJ0VGV4dChkYXRhKX0sbW9kZXMuaW5TZWxlY3Quc3RhcnRUYWdPcHRpb249ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXsib3B0aW9uIj09dHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lJiZ0cmVlLnBvcEVsZW1lbnQoKSx0cmVlLmluc2VydEVsZW1lbnQobmFtZSxhdHRyaWJ1dGVzKX0sbW9kZXMuaW5TZWxlY3Quc3RhcnRUYWdPcHRncm91cD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpeyJvcHRpb24iPT10cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUmJnRyZWUucG9wRWxlbWVudCgpLCJvcHRncm91cCI9PXRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSYmdHJlZS5wb3BFbGVtZW50KCksdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluU2VsZWN0LmVuZFRhZ09wdGlvbj1mdW5jdGlvbihuYW1lKXtyZXR1cm4ib3B0aW9uIiE9PXRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZT8odHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWctaW4tc2VsZWN0Iix7bmFtZTpuYW1lfSksdm9pZCAwKToodHJlZS5wb3BFbGVtZW50KCksdm9pZCAwKX0sbW9kZXMuaW5TZWxlY3QuZW5kVGFnT3B0Z3JvdXA9ZnVuY3Rpb24oKXsib3B0aW9uIj09dHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lJiYib3B0Z3JvdXAiPT10cmVlLm9wZW5FbGVtZW50cy5pdGVtKHRyZWUub3BlbkVsZW1lbnRzLmxlbmd0aC0yKS5sb2NhbE5hbWUmJnRyZWUucG9wRWxlbWVudCgpLCJvcHRncm91cCI9PXRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZT90cmVlLnBvcEVsZW1lbnQoKTp0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZy1pbi1zZWxlY3QiLHtuYW1lOiJvcHRncm91cCJ9KX0sbW9kZXMuaW5TZWxlY3Quc3RhcnRUYWdTZWxlY3Q9ZnVuY3Rpb24oKXt0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtc2VsZWN0LWluLXNlbGVjdCIpLHRoaXMuZW5kVGFnU2VsZWN0KCJzZWxlY3QiKX0sbW9kZXMuaW5TZWxlY3QuZW5kVGFnU2VsZWN0PWZ1bmN0aW9uKG5hbWUpe3RyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSgic2VsZWN0Iik/KHRyZWUub3BlbkVsZW1lbnRzLnBvcFVudGlsUG9wcGVkKCJzZWxlY3QiKSx0cmVlLnJlc2V0SW5zZXJ0aW9uTW9kZSgpKTp0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZyIse25hbWU6bmFtZX0pfSxtb2Rlcy5pblNlbGVjdC5zdGFydFRhZ0lucHV0PWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWlucHV0LWluLXNlbGVjdCIpLHRyZWUub3BlbkVsZW1lbnRzLmluU2VsZWN0U2NvcGUoInNlbGVjdCIpJiYodGhpcy5lbmRUYWdTZWxlY3QoInNlbGVjdCIpLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSxhdHRyaWJ1dGVzKSl9LG1vZGVzLmluU2VsZWN0LnN0YXJ0VGFnU2NyaXB0PWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7bW9kZXMuaW5IZWFkLnByb2Nlc3NTdGFydFRhZyhuYW1lLGF0dHJpYnV0ZXMpfSxtb2Rlcy5pblNlbGVjdC5lbmRUYWdUYWJsZUVsZW1lbnRzPWZ1bmN0aW9uKG5hbWUpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnLWluLXNlbGVjdCIse25hbWU6bmFtZX0pLHRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZShuYW1lKSYmKHRoaXMuZW5kVGFnU2VsZWN0KCJzZWxlY3QiKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VuZFRhZyhuYW1lKSl9LG1vZGVzLmluU2VsZWN0LnN0YXJ0VGFnT3RoZXI9ZnVuY3Rpb24obmFtZSl7dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbi1zZWxlY3QiLHtuYW1lOm5hbWV9KX0sbW9kZXMuaW5TZWxlY3QuZW5kVGFnT3RoZXI9ZnVuY3Rpb24obmFtZSl7dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWctaW4tc2VsZWN0Iix7bmFtZTpuYW1lfSl9LG1vZGVzLmluU2VsZWN0SW5UYWJsZT1PYmplY3QuY3JlYXRlKG1vZGVzLmJhc2UpLG1vZGVzLmluU2VsZWN0SW5UYWJsZS5zdGFydF90YWdfaGFuZGxlcnM9e2NhcHRpb246InN0YXJ0VGFnVGFibGUiLHRhYmxlOiJzdGFydFRhZ1RhYmxlIix0Ym9keToic3RhcnRUYWdUYWJsZSIsdGZvb3Q6InN0YXJ0VGFnVGFibGUiLHRoZWFkOiJzdGFydFRhZ1RhYmxlIix0cjoic3RhcnRUYWdUYWJsZSIsdGQ6InN0YXJ0VGFnVGFibGUiLHRoOiJzdGFydFRhZ1RhYmxlIiwiLWRlZmF1bHQiOiJzdGFydFRhZ090aGVyIn0sbW9kZXMuaW5TZWxlY3RJblRhYmxlLmVuZF90YWdfaGFuZGxlcnM9e2NhcHRpb246ImVuZFRhZ1RhYmxlIix0YWJsZToiZW5kVGFnVGFibGUiLHRib2R5OiJlbmRUYWdUYWJsZSIsdGZvb3Q6ImVuZFRhZ1RhYmxlIix0aGVhZDoiZW5kVGFnVGFibGUiLHRyOiJlbmRUYWdUYWJsZSIsdGQ6ImVuZFRhZ1RhYmxlIix0aDoiZW5kVGFnVGFibGUiLCItZGVmYXVsdCI6ImVuZFRhZ090aGVyIn0sbW9kZXMuaW5TZWxlY3RJblRhYmxlLnByb2Nlc3NDaGFyYWN0ZXJzPWZ1bmN0aW9uKGRhdGEpe21vZGVzLmluU2VsZWN0LnByb2Nlc3NDaGFyYWN0ZXJzKGRhdGEpfSxtb2Rlcy5pblNlbGVjdEluVGFibGUuc3RhcnRUYWdUYWJsZT1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC10YWJsZS1lbGVtZW50LXN0YXJ0LXRhZy1pbi1zZWxlY3QtaW4tdGFibGUiLHtuYW1lOm5hbWV9KSx0aGlzLmVuZFRhZ090aGVyKCJzZWxlY3QiKSx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluU2VsZWN0SW5UYWJsZS5zdGFydFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl7bW9kZXMuaW5TZWxlY3QucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyxzZWxmQ2xvc2luZyl9LG1vZGVzLmluU2VsZWN0SW5UYWJsZS5lbmRUYWdUYWJsZT1mdW5jdGlvbihuYW1lKXt0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtdGFibGUtZWxlbWVudC1lbmQtdGFnLWluLXNlbGVjdC1pbi10YWJsZSIse25hbWU6bmFtZX0pLHRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZShuYW1lKSYmKHRoaXMuZW5kVGFnT3RoZXIoInNlbGVjdCIpLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpKX0sbW9kZXMuaW5TZWxlY3RJblRhYmxlLmVuZFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUpe21vZGVzLmluU2VsZWN0LnByb2Nlc3NFbmRUYWcobmFtZSl9LG1vZGVzLmluUm93PU9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSksbW9kZXMuaW5Sb3cuc3RhcnRfdGFnX2hhbmRsZXJzPXtodG1sOiJzdGFydFRhZ0h0bWwiLHRkOiJzdGFydFRhZ1RhYmxlQ2VsbCIsdGg6InN0YXJ0VGFnVGFibGVDZWxsIixjYXB0aW9uOiJzdGFydFRhZ1RhYmxlT3RoZXIiLGNvbDoic3RhcnRUYWdUYWJsZU90aGVyIixjb2xncm91cDoic3RhcnRUYWdUYWJsZU90aGVyIix0Ym9keToic3RhcnRUYWdUYWJsZU90aGVyIix0Zm9vdDoic3RhcnRUYWdUYWJsZU90aGVyIix0aGVhZDoic3RhcnRUYWdUYWJsZU90aGVyIix0cjoic3RhcnRUYWdUYWJsZU90aGVyIiwiLWRlZmF1bHQiOiJzdGFydFRhZ090aGVyIn0sbW9kZXMuaW5Sb3cuZW5kX3RhZ19oYW5kbGVycz17dHI6ImVuZFRhZ1RyIix0YWJsZToiZW5kVGFnVGFibGUiLHRib2R5OiJlbmRUYWdUYWJsZVJvd0dyb3VwIix0Zm9vdDoiZW5kVGFnVGFibGVSb3dHcm91cCIsdGhlYWQ6ImVuZFRhZ1RhYmxlUm93R3JvdXAiLGJvZHk6ImVuZFRhZ0lnbm9yZSIsY2FwdGlvbjoiZW5kVGFnSWdub3JlIixjb2w6ImVuZFRhZ0lnbm9yZSIsY29sZ3JvdXA6ImVuZFRhZ0lnbm9yZSIsaHRtbDoiZW5kVGFnSWdub3JlIix0ZDoiZW5kVGFnSWdub3JlIix0aDoiZW5kVGFnSWdub3JlIiwiLWRlZmF1bHQiOiJlbmRUYWdPdGhlciJ9LG1vZGVzLmluUm93LnByb2Nlc3NDaGFyYWN0ZXJzPWZ1bmN0aW9uKGRhdGEpe21vZGVzLmluVGFibGUucHJvY2Vzc0NoYXJhY3RlcnMoZGF0YSl9LG1vZGVzLmluUm93LnN0YXJ0VGFnVGFibGVDZWxsPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZVJvd1Njb3BlTWFya2VyKCksdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsYXR0cmlidXRlcyksdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCJpbkNlbGwiKSx0cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoKE1hcmtlcil9LG1vZGVzLmluUm93LnN0YXJ0VGFnVGFibGVPdGhlcj1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3ZhciBpZ25vcmVFbmRUYWc9dGhpcy5pZ25vcmVFbmRUYWdUcigpO3RoaXMuZW5kVGFnVHIoInRyIiksaWdub3JlRW5kVGFnfHx0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmluUm93LnN0YXJ0VGFnT3RoZXI9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzLHNlbGZDbG9zaW5nKXttb2Rlcy5pblRhYmxlLnByb2Nlc3NTdGFydFRhZyhuYW1lLGF0dHJpYnV0ZXMsc2VsZkNsb3NpbmcpfSxtb2Rlcy5pblJvdy5lbmRUYWdUcj1mdW5jdGlvbihuYW1lKXt0aGlzLmlnbm9yZUVuZFRhZ1RyKCk/KGFzc2VydC5vayh0cmVlLmNvbnRleHQpLHRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnIix7bmFtZTpuYW1lfSkpOih0cmVlLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhYmxlUm93U2NvcGVNYXJrZXIoKSx0cmVlLnBvcEVsZW1lbnQoKSx0cmVlLnNldEluc2VydGlvbk1vZGUoImluVGFibGVCb2R5IikpfSxtb2Rlcy5pblJvdy5lbmRUYWdUYWJsZT1mdW5jdGlvbihuYW1lKXt2YXIgaWdub3JlRW5kVGFnPXRoaXMuaWdub3JlRW5kVGFnVHIoKTt0aGlzLmVuZFRhZ1RyKCJ0ciIpLGlnbm9yZUVuZFRhZ3x8dHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSl9LG1vZGVzLmluUm93LmVuZFRhZ1RhYmxlUm93R3JvdXA9ZnVuY3Rpb24obmFtZSl7dHJlZS5vcGVuRWxlbWVudHMuaW5UYWJsZVNjb3BlKG5hbWUpPyh0aGlzLmVuZFRhZ1RyKCJ0ciIpLHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpKTp0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZyIse25hbWU6bmFtZX0pfSxtb2Rlcy5pblJvdy5lbmRUYWdJZ25vcmU9ZnVuY3Rpb24obmFtZSl7dHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWctaW4tdGFibGUtcm93Iix7bmFtZTpuYW1lfSl9LG1vZGVzLmluUm93LmVuZFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUpe21vZGVzLmluVGFibGUucHJvY2Vzc0VuZFRhZyhuYW1lKX0sbW9kZXMuaW5Sb3cuaWdub3JlRW5kVGFnVHI9ZnVuY3Rpb24oKXtyZXR1cm4hdHJlZS5vcGVuRWxlbWVudHMuaW5UYWJsZVNjb3BlKCJ0ciIpfSxtb2Rlcy5hZnRlckFmdGVyRnJhbWVzZXQ9T2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKSxtb2Rlcy5hZnRlckFmdGVyRnJhbWVzZXQuc3RhcnRfdGFnX2hhbmRsZXJzPXtodG1sOiJzdGFydFRhZ0h0bWwiLG5vZnJhbWVzOiJzdGFydFRhZ05vRnJhbWVzIiwiLWRlZmF1bHQiOiJzdGFydFRhZ090aGVyIn0sbW9kZXMuYWZ0ZXJBZnRlckZyYW1lc2V0LnByb2Nlc3NFT0Y9ZnVuY3Rpb24oKXt9LG1vZGVzLmFmdGVyQWZ0ZXJGcmFtZXNldC5wcm9jZXNzQ29tbWVudD1mdW5jdGlvbihkYXRhKXt0cmVlLmluc2VydENvbW1lbnQoZGF0YSx0cmVlLmRvY3VtZW50KX0sbW9kZXMuYWZ0ZXJBZnRlckZyYW1lc2V0LnByb2Nlc3NDaGFyYWN0ZXJzPWZ1bmN0aW9uKGJ1ZmZlcil7Zm9yKHZhciBjaGFyYWN0ZXJzPWJ1ZmZlci50YWtlUmVtYWluaW5nKCksd2hpdGVzcGFjZT0iIixpPTA7Y2hhcmFjdGVycy5sZW5ndGg+aTtpKyspe3ZhciBjaD1jaGFyYWN0ZXJzW2ldO2lzV2hpdGVzcGFjZShjaCkmJih3aGl0ZXNwYWNlKz1jaCl9d2hpdGVzcGFjZSYmKHRyZWUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKSx0cmVlLmluc2VydFRleHQod2hpdGVzcGFjZSkpLHdoaXRlc3BhY2UubGVuZ3RoPGNoYXJhY3RlcnMubGVuZ3RoJiZ0cmVlLnBhcnNlRXJyb3IoImV4cGVjdGVkLWVvZi1idXQtZ290LWNoYXIiKX0sbW9kZXMuYWZ0ZXJBZnRlckZyYW1lc2V0LnN0YXJ0VGFnTm9GcmFtZXM9ZnVuY3Rpb24obmFtZSxhdHRyaWJ1dGVzKXttb2Rlcy5pbkhlYWQucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsYXR0cmlidXRlcyl9LG1vZGVzLmFmdGVyQWZ0ZXJGcmFtZXNldC5zdGFydFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUpe3RyZWUucGFyc2VFcnJvcigiZXhwZWN0ZWQtZW9mLWJ1dC1nb3Qtc3RhcnQtdGFnIix7bmFtZTpuYW1lfSl9LG1vZGVzLmFmdGVyQWZ0ZXJGcmFtZXNldC5wcm9jZXNzRW5kVGFnPWZ1bmN0aW9uKG5hbWUpe3RyZWUucGFyc2VFcnJvcigiZXhwZWN0ZWQtZW9mLWJ1dC1nb3QtZW5kLXRhZyIse25hbWU6bmFtZX0pfSxtb2Rlcy50ZXh0PU9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSksbW9kZXMudGV4dC5zdGFydF90YWdfaGFuZGxlcnM9eyItZGVmYXVsdCI6InN0YXJ0VGFnT3RoZXIifSxtb2Rlcy50ZXh0LmVuZF90YWdfaGFuZGxlcnM9e3NjcmlwdDoiZW5kVGFnU2NyaXB0IiwiLWRlZmF1bHQiOiJlbmRUYWdPdGhlciJ9LG1vZGVzLnRleHQucHJvY2Vzc0NoYXJhY3RlcnM9ZnVuY3Rpb24oYnVmZmVyKXt0cmVlLnNob3VsZFNraXBMZWFkaW5nTmV3bGluZSYmKHRyZWUuc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lPSExLGJ1ZmZlci5za2lwQXRNb3N0T25lTGVhZGluZ05ld2xpbmUoKSk7dmFyIGRhdGE9YnVmZmVyLnRha2VSZW1haW5pbmcoKTtkYXRhJiZ0cmVlLmluc2VydFRleHQoZGF0YSl9LG1vZGVzLnRleHQucHJvY2Vzc0VPRj1mdW5jdGlvbigpe3RyZWUucGFyc2VFcnJvcigiZXhwZWN0ZWQtbmFtZWQtY2xvc2luZy10YWctYnV0LWdvdC1lb2YiLHtuYW1lOnRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZX0pLHRyZWUub3BlbkVsZW1lbnRzLnBvcCgpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSh0cmVlLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSksdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFT0YoKX0sbW9kZXMudGV4dC5zdGFydFRhZ090aGVyPWZ1bmN0aW9uKG5hbWUpe3Rocm93IlRyaWVkIHRvIHByb2Nlc3Mgc3RhcnQgdGFnICIrbmFtZSsiIGluIFJDREFUQS9SQVdURVhUIG1vZGUifSxtb2Rlcy50ZXh0LmVuZFRhZ1NjcmlwdD1mdW5jdGlvbigpe3ZhciBub2RlPXRyZWUub3BlbkVsZW1lbnRzLnBvcCgpO2Fzc2VydC5vaygic2NyaXB0Ij09bm9kZS5sb2NhbE5hbWUpLHRyZWUuc2V0SW5zZXJ0aW9uTW9kZSh0cmVlLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSl9LG1vZGVzLnRleHQuZW5kVGFnT3RoZXI9ZnVuY3Rpb24oKXt0cmVlLm9wZW5FbGVtZW50cy5wb3AoKSx0cmVlLnNldEluc2VydGlvbk1vZGUodHJlZS5vcmlnaW5hbEluc2VydGlvbk1vZGUpfX1mdW5jdGlvbiBmb3JtYXRNZXNzYWdlKGZvcm1hdCxhcmdzKXtyZXR1cm4gZm9ybWF0LnJlcGxhY2UoUmVnRXhwKCJ7WzAtOWEtei1dK30iLCJnaSIpLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gYXJnc1ttYXRjaC5zbGljZSgxLC0xKV18fG1hdGNofSl9dmFyIGFzc2VydD1fZGVyZXFfKCJhc3NlcnQiKSxtZXNzYWdlcz1fZGVyZXFfKCIuL21lc3NhZ2VzLmpzb24iKSxjb25zdGFudHM9X2RlcmVxXygiLi9jb25zdGFudHMiKTtfZGVyZXFfKCJldmVudHMiKS5FdmVudEVtaXR0ZXI7dmFyIFRva2VuaXplcj1fZGVyZXFfKCIuL1Rva2VuaXplciIpLlRva2VuaXplcixFbGVtZW50U3RhY2s9X2RlcmVxXygiLi9FbGVtZW50U3RhY2siKS5FbGVtZW50U3RhY2ssU3RhY2tJdGVtPV9kZXJlcV8oIi4vU3RhY2tJdGVtIikuU3RhY2tJdGVtLE1hcmtlcj17fTtDaGFyYWN0ZXJCdWZmZXIucHJvdG90eXBlLnNraXBBdE1vc3RPbmVMZWFkaW5nTmV3bGluZT1mdW5jdGlvbigpeyJcXG4iPT09dGhpcy5jaGFyYWN0ZXJzW3RoaXMuY3VycmVudF0mJnRoaXMuY3VycmVudCsrfSxDaGFyYWN0ZXJCdWZmZXIucHJvdG90eXBlLnNraXBMZWFkaW5nV2hpdGVzcGFjZT1mdW5jdGlvbigpe2Zvcig7aXNXaGl0ZXNwYWNlKHRoaXMuY2hhcmFjdGVyc1t0aGlzLmN1cnJlbnRdKTspaWYoKyt0aGlzLmN1cnJlbnQ9PXRoaXMuZW5kKXJldHVybn0sQ2hhcmFjdGVyQnVmZmVyLnByb3RvdHlwZS5za2lwTGVhZGluZ05vbldoaXRlc3BhY2U9ZnVuY3Rpb24oKXtmb3IoOyFpc1doaXRlc3BhY2UodGhpcy5jaGFyYWN0ZXJzW3RoaXMuY3VycmVudF0pOylpZigrK3RoaXMuY3VycmVudD09dGhpcy5lbmQpcmV0dXJufSxDaGFyYWN0ZXJCdWZmZXIucHJvdG90eXBlLnRha2VSZW1haW5pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGFyYWN0ZXJzLnN1YnN0cmluZyh0aGlzLmN1cnJlbnQpfSxDaGFyYWN0ZXJCdWZmZXIucHJvdG90eXBlLnRha2VMZWFkaW5nV2hpdGVzcGFjZT1mdW5jdGlvbigpe3ZhciBzdGFydD10aGlzLmN1cnJlbnQ7cmV0dXJuIHRoaXMuc2tpcExlYWRpbmdXaGl0ZXNwYWNlKCksc3RhcnQ9PT10aGlzLmN1cnJlbnQ/IiI6dGhpcy5jaGFyYWN0ZXJzLnN1YnN0cmluZyhzdGFydCx0aGlzLmN1cnJlbnQtc3RhcnQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hhcmFjdGVyQnVmZmVyLnByb3RvdHlwZSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMuY3VycmVudH19KSxUcmVlQnVpbGRlci5wcm90b3R5cGUuc2V0SW5zZXJ0aW9uTW9kZT1mdW5jdGlvbihuYW1lKXt0aGlzLmluc2VydGlvbk1vZGU9dGhpcy5pbnNlcnRpb25Nb2Rlc1tuYW1lXSx0aGlzLmluc2VydGlvbk1vZGVOYW1lPW5hbWV9LFRyZWVCdWlsZGVyLnByb3RvdHlwZS5hZG9wdGlvbkFnZW5jeUVuZFRhZz1mdW5jdGlvbihuYW1lKXtmdW5jdGlvbiBpc0FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50KGVsKXtyZXR1cm4gZWw9PT1mb3JtYXR0aW5nRWxlbWVudH1mb3IodmFyIGZvcm1hdHRpbmdFbGVtZW50LG91dGVySXRlcmF0aW9uTGltaXQ9OCxpbm5lckl0ZXJhdGlvbkxpbWl0PTMsb3V0ZXJMb29wQ291bnRlcj0wO291dGVySXRlcmF0aW9uTGltaXQ+b3V0ZXJMb29wQ291bnRlcisrOyl7aWYoZm9ybWF0dGluZ0VsZW1lbnQ9dGhpcy5lbGVtZW50SW5BY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMobmFtZSksIWZvcm1hdHRpbmdFbGVtZW50fHx0aGlzLm9wZW5FbGVtZW50cy5jb250YWlucyhmb3JtYXR0aW5nRWxlbWVudCkmJiF0aGlzLm9wZW5FbGVtZW50cy5pblNjb3BlKGZvcm1hdHRpbmdFbGVtZW50LmxvY2FsTmFtZSkpcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiYWRvcHRpb24tYWdlbmN5LTEuMSIse25hbWU6bmFtZX0pLCExO2lmKCF0aGlzLm9wZW5FbGVtZW50cy5jb250YWlucyhmb3JtYXR0aW5nRWxlbWVudCkpcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiYWRvcHRpb24tYWdlbmN5LTEuMiIse25hbWU6bmFtZX0pLHRoaXMucmVtb3ZlRWxlbWVudEZyb21BY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoZm9ybWF0dGluZ0VsZW1lbnQpLCEwO3RoaXMub3BlbkVsZW1lbnRzLmluU2NvcGUoZm9ybWF0dGluZ0VsZW1lbnQubG9jYWxOYW1lKXx8dGhpcy5wYXJzZUVycm9yKCJhZG9wdGlvbi1hZ2VuY3ktNC40Iix7bmFtZTpuYW1lfSksZm9ybWF0dGluZ0VsZW1lbnQhPXRoaXMuY3VycmVudFN0YWNrSXRlbSgpJiZ0aGlzLnBhcnNlRXJyb3IoImFkb3B0aW9uLWFnZW5jeS0xLjMiLHtuYW1lOm5hbWV9KTt2YXIgZnVydGhlc3RCbG9jaz10aGlzLm9wZW5FbGVtZW50cy5mdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQoZm9ybWF0dGluZ0VsZW1lbnQubm9kZSk7aWYoIWZ1cnRoZXN0QmxvY2spcmV0dXJuIHRoaXMub3BlbkVsZW1lbnRzLnJlbW92ZV9vcGVuRWxlbWVudHNfdW50aWwoaXNBY3RpdmVGb3JtYXR0aW5nRWxlbWVudCksdGhpcy5yZW1vdmVFbGVtZW50RnJvbUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyhmb3JtYXR0aW5nRWxlbWVudCksITA7Zm9yKHZhciBhZmVJbmRleD10aGlzLm9wZW5FbGVtZW50cy5lbGVtZW50cy5pbmRleE9mKGZvcm1hdHRpbmdFbGVtZW50KSxjb21tb25BbmNlc3Rvcj10aGlzLm9wZW5FbGVtZW50cy5pdGVtKGFmZUluZGV4LTEpLGJvb2ttYXJrPXRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluZGV4T2YoZm9ybWF0dGluZ0VsZW1lbnQpLG5vZGU9ZnVydGhlc3RCbG9jayxsYXN0Tm9kZT1mdXJ0aGVzdEJsb2NrLGluZGV4PXRoaXMub3BlbkVsZW1lbnRzLmVsZW1lbnRzLmluZGV4T2Yobm9kZSksaW5uZXJMb29wQ291bnRlcj0wO2lubmVySXRlcmF0aW9uTGltaXQ+aW5uZXJMb29wQ291bnRlcisrOylpZihpbmRleC09MSxub2RlPXRoaXMub3BlbkVsZW1lbnRzLml0ZW0oaW5kZXgpLDA+dGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5kZXhPZihub2RlKSl0aGlzLm9wZW5FbGVtZW50cy5lbGVtZW50cy5zcGxpY2UoaW5kZXgsMSk7ZWxzZXtpZihub2RlPT1mb3JtYXR0aW5nRWxlbWVudClicmVhaztsYXN0Tm9kZT09ZnVydGhlc3RCbG9jayYmKGJvb2ttYXJrPXRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluZGV4T2Yobm9kZSkrMSk7dmFyIGNsb25lPXRoaXMuY3JlYXRlRWxlbWVudChub2RlLm5hbWVzcGFjZVVSSSxub2RlLmxvY2FsTmFtZSxub2RlLmF0dHJpYnV0ZXMpLG5ld05vZGU9bmV3IFN0YWNrSXRlbShub2RlLm5hbWVzcGFjZVVSSSxub2RlLmxvY2FsTmFtZSxub2RlLmF0dHJpYnV0ZXMsY2xvbmUpO3RoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzW3RoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluZGV4T2Yobm9kZSldPW5ld05vZGUsdGhpcy5vcGVuRWxlbWVudHMuZWxlbWVudHNbdGhpcy5vcGVuRWxlbWVudHMuZWxlbWVudHMuaW5kZXhPZihub2RlKV09bmV3Tm9kZSxub2RlPW5ld05vZGUsdGhpcy5kZXRhY2hGcm9tUGFyZW50KGxhc3ROb2RlLm5vZGUpLHRoaXMuYXR0YWNoTm9kZShsYXN0Tm9kZS5ub2RlLG5vZGUubm9kZSksbGFzdE5vZGU9bm9kZX10aGlzLmRldGFjaEZyb21QYXJlbnQobGFzdE5vZGUubm9kZSksY29tbW9uQW5jZXN0b3IuaXNGb3N0ZXJQYXJlbnRpbmcoKT90aGlzLmluc2VydEludG9Gb3N0ZXJQYXJlbnQobGFzdE5vZGUubm9kZSk6dGhpcy5hdHRhY2hOb2RlKGxhc3ROb2RlLm5vZGUsY29tbW9uQW5jZXN0b3Iubm9kZSk7dmFyIGNsb25lPXRoaXMuY3JlYXRlRWxlbWVudCgiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsZm9ybWF0dGluZ0VsZW1lbnQubG9jYWxOYW1lLGZvcm1hdHRpbmdFbGVtZW50LmF0dHJpYnV0ZXMpLGZvcm1hdHRpbmdDbG9uZT1uZXcgU3RhY2tJdGVtKGZvcm1hdHRpbmdFbGVtZW50Lm5hbWVzcGFjZVVSSSxmb3JtYXR0aW5nRWxlbWVudC5sb2NhbE5hbWUsZm9ybWF0dGluZ0VsZW1lbnQuYXR0cmlidXRlcyxjbG9uZSk7dGhpcy5yZXBhcmVudENoaWxkcmVuKGZ1cnRoZXN0QmxvY2subm9kZSxjbG9uZSksdGhpcy5hdHRhY2hOb2RlKGNsb25lLGZ1cnRoZXN0QmxvY2subm9kZSksdGhpcy5yZW1vdmVFbGVtZW50RnJvbUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyhmb3JtYXR0aW5nRWxlbWVudCksdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuc3BsaWNlKE1hdGgubWluKGJvb2ttYXJrLHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmxlbmd0aCksMCxmb3JtYXR0aW5nQ2xvbmUpLHRoaXMub3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtYXR0aW5nRWxlbWVudCksdGhpcy5vcGVuRWxlbWVudHMuZWxlbWVudHMuc3BsaWNlKHRoaXMub3BlbkVsZW1lbnRzLmVsZW1lbnRzLmluZGV4T2YoZnVydGhlc3RCbG9jaykrMSwwLGZvcm1hdHRpbmdDbG9uZSl9cmV0dXJuITB9LFRyZWVCdWlsZGVyLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3Rocm93Ik5vdCBtcGxlbWVudGVkIn0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLnN0YXJ0VG9rZW5pemF0aW9uPWZ1bmN0aW9uKHRva2VuaXplcil7aWYodGhpcy50b2tlbml6ZXI9dG9rZW5pemVyLHRoaXMuY29tcGF0TW9kZT0ibm8gcXVpcmtzIix0aGlzLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZT0iaW5pdGlhbCIsdGhpcy5mcmFtZXNldE9rPSEwLHRoaXMub3BlbkVsZW1lbnRzPW5ldyBFbGVtZW50U3RhY2ssdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHM9W10sdGhpcy5zdGFydCgpLHRoaXMuY29udGV4dCl7c3dpdGNoKHRoaXMuY29udGV4dCl7Y2FzZSJ0aXRsZSI6Y2FzZSJ0ZXh0YXJlYSI6dGhpcy50b2tlbml6ZXIuc2V0U3RhdGUoVG9rZW5pemVyLlJDREFUQSk7YnJlYWs7Y2FzZSJzdHlsZSI6Y2FzZSJ4bXAiOmNhc2UiaWZyYW1lIjpjYXNlIm5vZW1iZWQiOmNhc2Uibm9mcmFtZXMiOnRoaXMudG9rZW5pemVyLnNldFN0YXRlKFRva2VuaXplci5SQVdURVhUKTticmVhaztjYXNlInNjcmlwdCI6dGhpcy50b2tlbml6ZXIuc2V0U3RhdGUoVG9rZW5pemVyLlNDUklQVF9EQVRBKTticmVhaztjYXNlIm5vc2NyaXB0Ijp0aGlzLnNjcmlwdGluZ0VuYWJsZWQmJnRoaXMudG9rZW5pemVyLnNldFN0YXRlKFRva2VuaXplci5SQVdURVhUKTticmVhaztjYXNlInBsYWludGV4dCI6dGhpcy50b2tlbml6ZXIuc2V0U3RhdGUoVG9rZW5pemVyLlBMQUlOVEVYVCl9dGhpcy5pbnNlcnRIdG1sRWxlbWVudCgpLHRoaXMucmVzZXRJbnNlcnRpb25Nb2RlKCl9ZWxzZSB0aGlzLnNldEluc2VydGlvbk1vZGUoImluaXRpYWwiKX0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLnByb2Nlc3NUb2tlbj1mdW5jdGlvbih0b2tlbil7dGhpcy5zZWxmQ2xvc2luZ0ZsYWdBY2tub3dsZWRnZWQ9ITE7dmFyIGluc2VydGlvbk1vZGUsY3VycmVudE5vZGU9dGhpcy5vcGVuRWxlbWVudHMudG9wfHxudWxsO3N3aXRjaChpbnNlcnRpb25Nb2RlPSFjdXJyZW50Tm9kZXx8IWN1cnJlbnROb2RlLmlzRm9yZWlnbigpfHxjdXJyZW50Tm9kZS5pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KCkmJigiU3RhcnRUYWciPT10b2tlbi50eXBlJiYhKHRva2VuLm5hbWUgaW57bWdseXBoOjAsbWFsaWdubWFyazowfSl8fCJDaGFyYWN0ZXJzIj09PXRva2VuLnR5cGUpfHwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI9PWN1cnJlbnROb2RlLm5hbWVzcGFjZVVSSSYmImFubm90YXRpb24teG1sIj09Y3VycmVudE5vZGUubG9jYWxOYW1lJiYiU3RhcnRUYWciPT10b2tlbi50eXBlJiYic3ZnIj09dG9rZW4ubmFtZXx8Y3VycmVudE5vZGUuaXNIdG1sSW50ZWdyYXRpb25Qb2ludCgpJiZ0b2tlbi50eXBlIGlue1N0YXJ0VGFnOjAsQ2hhcmFjdGVyczowfXx8IkVPRiI9PXRva2VuLnR5cGU/dGhpcy5pbnNlcnRpb25Nb2RlOnRoaXMuaW5zZXJ0aW9uTW9kZXMuaW5Gb3JlaWduQ29udGVudCx0b2tlbi50eXBlKXtjYXNlIkNoYXJhY3RlcnMiOnZhciBidWZmZXI9bmV3IENoYXJhY3RlckJ1ZmZlcih0b2tlbi5kYXRhKTtpbnNlcnRpb25Nb2RlLnByb2Nlc3NDaGFyYWN0ZXJzKGJ1ZmZlcik7YnJlYWs7Y2FzZSJDb21tZW50IjppbnNlcnRpb25Nb2RlLnByb2Nlc3NDb21tZW50KHRva2VuLmRhdGEpO2JyZWFrO2Nhc2UiU3RhcnRUYWciOmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKHRva2VuLm5hbWUsdG9rZW4uZGF0YSx0b2tlbi5zZWxmQ2xvc2luZyk7YnJlYWs7Y2FzZSJFbmRUYWciOmluc2VydGlvbk1vZGUucHJvY2Vzc0VuZFRhZyh0b2tlbi5uYW1lKTticmVhaztjYXNlIkRvY3R5cGUiOmluc2VydGlvbk1vZGUucHJvY2Vzc0RvY3R5cGUodG9rZW4ubmFtZSx0b2tlbi5wdWJsaWNJZCx0b2tlbi5zeXN0ZW1JZCx0b2tlbi5mb3JjZVF1aXJrcyk7YnJlYWs7Y2FzZSJFT0YiOmluc2VydGlvbk1vZGUucHJvY2Vzc0VPRigpfX0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLmlzQ2RhdGFTZWN0aW9uQWxsb3dlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5FbGVtZW50cy5sZW5ndGg+MCYmdGhpcy5jdXJyZW50U3RhY2tJdGVtKCkuaXNGb3JlaWduKCl9LFRyZWVCdWlsZGVyLnByb3RvdHlwZS5pc1NlbGZDbG9zaW5nRmxhZ0Fja25vd2xlZGdlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGZDbG9zaW5nRmxhZ0Fja25vd2xlZGdlZH0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFRyZWVCdWlsZGVyLnByb3RvdHlwZS5hdHRhY2hOb2RlPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxUcmVlQnVpbGRlci5wcm90b3R5cGUuYXR0YWNoTm9kZVRvRm9zdGVyUGFyZW50PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxUcmVlQnVpbGRlci5wcm90b3R5cGUuZGV0YWNoRnJvbVBhcmVudD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLmFkZEF0dHJpYnV0ZXNUb0VsZW1lbnQ9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFRyZWVCdWlsZGVyLnByb3RvdHlwZS5pbnNlcnRIdG1sRWxlbWVudD1mdW5jdGlvbihhdHRyaWJ1dGVzKXt2YXIgcm9vdD10aGlzLmNyZWF0ZUVsZW1lbnQoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJodG1sIixhdHRyaWJ1dGVzKTtyZXR1cm4gdGhpcy5hdHRhY2hOb2RlKHJvb3QsdGhpcy5kb2N1bWVudCksdGhpcy5vcGVuRWxlbWVudHMucHVzaEh0bWxFbGVtZW50KG5ldyBTdGFja0l0ZW0oImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJodG1sIixhdHRyaWJ1dGVzLHJvb3QpKSxyb290fSxUcmVlQnVpbGRlci5wcm90b3R5cGUuaW5zZXJ0SGVhZEVsZW1lbnQ9ZnVuY3Rpb24oYXR0cmlidXRlcyl7dmFyIGVsZW1lbnQ9dGhpcy5jcmVhdGVFbGVtZW50KCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiaGVhZCIsYXR0cmlidXRlcyk7cmV0dXJuIHRoaXMuaGVhZD1uZXcgU3RhY2tJdGVtKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiaGVhZCIsYXR0cmlidXRlcyxlbGVtZW50KSx0aGlzLmF0dGFjaE5vZGUoZWxlbWVudCx0aGlzLm9wZW5FbGVtZW50cy50b3Aubm9kZSksdGhpcy5vcGVuRWxlbWVudHMucHVzaEhlYWRFbGVtZW50KHRoaXMuaGVhZCksZWxlbWVudH0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLmluc2VydEJvZHlFbGVtZW50PWZ1bmN0aW9uKGF0dHJpYnV0ZXMpe3ZhciBlbGVtZW50PXRoaXMuY3JlYXRlRWxlbWVudCgiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImJvZHkiLGF0dHJpYnV0ZXMpO3JldHVybiB0aGlzLmF0dGFjaE5vZGUoZWxlbWVudCx0aGlzLm9wZW5FbGVtZW50cy50b3Aubm9kZSksdGhpcy5vcGVuRWxlbWVudHMucHVzaEJvZHlFbGVtZW50KG5ldyBTdGFja0l0ZW0oImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJib2R5IixhdHRyaWJ1dGVzLGVsZW1lbnQpKSxlbGVtZW50fSxUcmVlQnVpbGRlci5wcm90b3R5cGUuaW5zZXJ0SW50b0Zvc3RlclBhcmVudD1mdW5jdGlvbihub2RlKXt2YXIgdGFibGVJbmRleD10aGlzLm9wZW5FbGVtZW50cy5maW5kSW5kZXgoInRhYmxlIiksdGFibGVFbGVtZW50PXRoaXMub3BlbkVsZW1lbnRzLml0ZW0odGFibGVJbmRleCkubm9kZTtyZXR1cm4gMD09PXRhYmxlSW5kZXg/dGhpcy5hdHRhY2hOb2RlKG5vZGUsdGFibGVFbGVtZW50KToodGhpcy5hdHRhY2hOb2RlVG9Gb3N0ZXJQYXJlbnQobm9kZSx0YWJsZUVsZW1lbnQsdGhpcy5vcGVuRWxlbWVudHMuaXRlbSh0YWJsZUluZGV4LTEpLm5vZGUpLHZvaWQgMCl9LFRyZWVCdWlsZGVyLnByb3RvdHlwZS5pbnNlcnRFbGVtZW50PWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyxuYW1lc3BhY2VVUkksc2VsZkNsb3Npbmcpe25hbWVzcGFjZVVSSXx8KG5hbWVzcGFjZVVSST0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpO3ZhciBlbGVtZW50PXRoaXMuY3JlYXRlRWxlbWVudChuYW1lc3BhY2VVUkksbmFtZSxhdHRyaWJ1dGVzKTt0aGlzLnNob3VsZEZvc3RlclBhcmVudCgpP3RoaXMuaW5zZXJ0SW50b0Zvc3RlclBhcmVudChlbGVtZW50KTp0aGlzLmF0dGFjaE5vZGUoZWxlbWVudCx0aGlzLm9wZW5FbGVtZW50cy50b3Aubm9kZSksc2VsZkNsb3Npbmd8fHRoaXMub3BlbkVsZW1lbnRzLnB1c2gobmV3IFN0YWNrSXRlbShuYW1lc3BhY2VVUkksbmFtZSxhdHRyaWJ1dGVzLGVsZW1lbnQpKX0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLmluc2VydEZvcm1hdHRpbmdFbGVtZW50PWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dGhpcy5pbnNlcnRFbGVtZW50KG5hbWUsYXR0cmlidXRlcywiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHRoaXMuYXBwZW5kRWxlbWVudFRvQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKHRoaXMuY3VycmVudFN0YWNrSXRlbSgpKX0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLmluc2VydFNlbGZDbG9zaW5nRWxlbWVudD1mdW5jdGlvbihuYW1lLGF0dHJpYnV0ZXMpe3RoaXMuc2VsZkNsb3NpbmdGbGFnQWNrbm93bGVkZ2VkPSEwLHRoaXMuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCEwKX0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLmluc2VydEZvcmVpZ25FbGVtZW50PWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyxuYW1lc3BhY2VVUkksc2VsZkNsb3Npbmcpe3NlbGZDbG9zaW5nJiYodGhpcy5zZWxmQ2xvc2luZ0ZsYWdBY2tub3dsZWRnZWQ9ITApLHRoaXMuaW5zZXJ0RWxlbWVudChuYW1lLGF0dHJpYnV0ZXMsbmFtZXNwYWNlVVJJLHNlbGZDbG9zaW5nKX0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLmluc2VydENvbW1lbnQ9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFRyZWVCdWlsZGVyLnByb3RvdHlwZS5pbnNlcnREb2N0eXBlPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxUcmVlQnVpbGRlci5wcm90b3R5cGUuaW5zZXJ0VGV4dD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLmN1cnJlbnRTdGFja0l0ZW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGVuRWxlbWVudHMudG9wfSxUcmVlQnVpbGRlci5wcm90b3R5cGUucG9wRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5FbGVtZW50cy5wb3AoKX0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLnNob3VsZEZvc3RlclBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQmJnRoaXMuY3VycmVudFN0YWNrSXRlbSgpLmlzRm9zdGVyUGFyZW50aW5nKCl9LFRyZWVCdWlsZGVyLnByb3RvdHlwZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzPWZ1bmN0aW9uKGV4Y2x1ZGUpe3ZhciBuYW1lPXRoaXMub3BlbkVsZW1lbnRzLnRvcC5sb2NhbE5hbWU7LTEhPVsiZGQiLCJkdCIsImxpIiwib3B0aW9uIiwib3B0Z3JvdXAiLCJwIiwicnAiLCJydCJdLmluZGV4T2YobmFtZSkmJm5hbWUhPWV4Y2x1ZGUmJih0aGlzLnBvcEVsZW1lbnQoKSx0aGlzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoZXhjbHVkZSkpfSxUcmVlQnVpbGRlci5wcm90b3R5cGUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHM9ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMubGVuZ3RoKXt2YXIgaT10aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5sZW5ndGgtMSxlbnRyeT10aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50c1tpXTtpZihlbnRyeSE9TWFya2VyJiYhdGhpcy5vcGVuRWxlbWVudHMuY29udGFpbnMoZW50cnkpKXtmb3IoO2VudHJ5IT1NYXJrZXImJiF0aGlzLm9wZW5FbGVtZW50cy5jb250YWlucyhlbnRyeSkmJihpLT0xLGVudHJ5PXRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzW2ldKTspO2Zvcig7Oyl7aSs9MSxlbnRyeT10aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50c1tpXSx0aGlzLmluc2VydEVsZW1lbnQoZW50cnkubG9jYWxOYW1lLGVudHJ5LmF0dHJpYnV0ZXMpO3ZhciBlbGVtZW50PXRoaXMuY3VycmVudFN0YWNrSXRlbSgpO2lmKHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzW2ldPWVsZW1lbnQsZWxlbWVudD09dGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHNbdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMubGVuZ3RoLTFdKWJyZWFrfX19fSxUcmVlQnVpbGRlci5wcm90b3R5cGUuZW5zdXJlTm9haHNBcmtDb25kaXRpb249ZnVuY3Rpb24oaXRlbSl7dmFyIGtOb2Foc0Fya0NhcGFjaXR5PTM7aWYoIShrTm9haHNBcmtDYXBhY2l0eT50aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5sZW5ndGgpKXtmb3IodmFyIGNhbmRpZGF0ZXM9W10sbmV3SXRlbUF0dHJpYnV0ZUNvdW50PWl0ZW0uYXR0cmlidXRlcy5sZW5ndGgsaT10aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIGNhbmRpZGF0ZT10aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50c1tpXTtpZihjYW5kaWRhdGU9PT1NYXJrZXIpYnJlYWs7aXRlbS5sb2NhbE5hbWU9PT1jYW5kaWRhdGUubG9jYWxOYW1lJiZpdGVtLm5hbWVzcGFjZVVSST09PWNhbmRpZGF0ZS5uYW1lc3BhY2VVUkkmJmNhbmRpZGF0ZS5hdHRyaWJ1dGVzLmxlbmd0aD09bmV3SXRlbUF0dHJpYnV0ZUNvdW50JiZjYW5kaWRhdGVzLnB1c2goY2FuZGlkYXRlKX1pZighKGtOb2Foc0Fya0NhcGFjaXR5PmNhbmRpZGF0ZXMubGVuZ3RoKSl7Zm9yKHZhciByZW1haW5pbmdDYW5kaWRhdGVzPVtdLGF0dHJpYnV0ZXM9aXRlbS5hdHRyaWJ1dGVzLGk9MDthdHRyaWJ1dGVzLmxlbmd0aD5pO2krKyl7Zm9yKHZhciBhdHRyaWJ1dGU9YXR0cmlidXRlc1tpXSxqPTA7Y2FuZGlkYXRlcy5sZW5ndGg+ajtqKyspe3ZhciBjYW5kaWRhdGU9Y2FuZGlkYXRlc1tqXSxjYW5kaWRhdGVBdHRyaWJ1dGU9Z2V0QXR0cmlidXRlKGNhbmRpZGF0ZSxhdHRyaWJ1dGUubm9kZU5hbWUpO2NhbmRpZGF0ZUF0dHJpYnV0ZSYmY2FuZGlkYXRlQXR0cmlidXRlLm5vZGVWYWx1ZT09PWF0dHJpYnV0ZS5ub2RlVmFsdWUmJnJlbWFpbmluZ0NhbmRpZGF0ZXMucHVzaChjYW5kaWRhdGUpfWlmKGtOb2Foc0Fya0NhcGFjaXR5PnJlbWFpbmluZ0NhbmRpZGF0ZXMubGVuZ3RoKXJldHVybjtjYW5kaWRhdGVzPXJlbWFpbmluZ0NhbmRpZGF0ZXMscmVtYWluaW5nQ2FuZGlkYXRlcz1bXX1mb3IodmFyIGk9a05vYWhzQXJrQ2FwYWNpdHktMTtjYW5kaWRhdGVzLmxlbmd0aD5pO2krKyl0aGlzLnJlbW92ZUVsZW1lbnRGcm9tQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKGNhbmRpZGF0ZXNbaV0pfX19LFRyZWVCdWlsZGVyLnByb3RvdHlwZS5hcHBlbmRFbGVtZW50VG9BY3RpdmVGb3JtYXR0aW5nRWxlbWVudHM9ZnVuY3Rpb24oaXRlbSl7dGhpcy5lbnN1cmVOb2Foc0Fya0NvbmRpdGlvbihpdGVtKSx0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoKGl0ZW0pfSxUcmVlQnVpbGRlci5wcm90b3R5cGUucmVtb3ZlRWxlbWVudEZyb21BY3RpdmVGb3JtYXR0aW5nRWxlbWVudHM9ZnVuY3Rpb24oaXRlbSl7dmFyIGluZGV4PXRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluZGV4T2YoaXRlbSk7aW5kZXg+PTAmJnRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnNwbGljZShpbmRleCwxKX0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLmVsZW1lbnRJbkFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cz1mdW5jdGlvbihuYW1lKXtmb3IodmFyIGVscz10aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyxpPWVscy5sZW5ndGgtMTtpPj0wJiZlbHNbaV0hPU1hcmtlcjtpLS0paWYoZWxzW2ldLmxvY2FsTmFtZT09bmFtZSlyZXR1cm4gZWxzW2ldO3JldHVybiExfSxUcmVlQnVpbGRlci5wcm90b3R5cGUuY2xlYXJBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHM9ZnVuY3Rpb24oKXtmb3IoOzAhPT10aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5sZW5ndGgmJnRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnBvcCgpIT1NYXJrZXI7KTt9LFRyZWVCdWlsZGVyLnByb3RvdHlwZS5yZXBhcmVudENoaWxkcmVuPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxUcmVlQnVpbGRlci5wcm90b3R5cGUuc2V0RnJhZ21lbnRDb250ZXh0PWZ1bmN0aW9uKGNvbnRleHQpe3RoaXMuY29udGV4dD1jb250ZXh0fSxUcmVlQnVpbGRlci5wcm90b3R5cGUucGFyc2VFcnJvcj1mdW5jdGlvbihjb2RlLGFyZ3Mpe2lmKHRoaXMuZXJyb3JIYW5kbGVyKXt2YXIgbWVzc2FnZT1mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzW2NvZGVdLGFyZ3MpO3RoaXMuZXJyb3JIYW5kbGVyLmVycm9yKG1lc3NhZ2UsdGhpcy50b2tlbml6ZXIuX2lucHV0U3RyZWFtLmxvY2F0aW9uKCksY29kZSl9fSxUcmVlQnVpbGRlci5wcm90b3R5cGUucmVzZXRJbnNlcnRpb25Nb2RlPWZ1bmN0aW9uKCl7Zm9yKHZhciBsYXN0PSExLG5vZGU9bnVsbCxpPXRoaXMub3BlbkVsZW1lbnRzLmxlbmd0aC0xO2k+PTA7aS0tKXtpZihub2RlPXRoaXMub3BlbkVsZW1lbnRzLml0ZW0oaSksMD09PWkmJihhc3NlcnQub2sodGhpcy5jb250ZXh0KSxsYXN0PSEwLG5vZGU9bmV3IFN0YWNrSXRlbSgiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsdGhpcy5jb250ZXh0LFtdLG51bGwpKSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1ub2RlLm5hbWVzcGFjZVVSSSl7aWYoInNlbGVjdCI9PT1ub2RlLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5zZXRJbnNlcnRpb25Nb2RlKCJpblNlbGVjdCIpO2lmKCJ0ZCI9PT1ub2RlLmxvY2FsTmFtZXx8InRoIj09PW5vZGUubG9jYWxOYW1lKXJldHVybiB0aGlzLnNldEluc2VydGlvbk1vZGUoImluQ2VsbCIpO2lmKCJ0ciI9PT1ub2RlLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5zZXRJbnNlcnRpb25Nb2RlKCJpblJvdyIpO2lmKCJ0Ym9keSI9PT1ub2RlLmxvY2FsTmFtZXx8InRoZWFkIj09PW5vZGUubG9jYWxOYW1lfHwidGZvb3QiPT09bm9kZS5sb2NhbE5hbWUpcmV0dXJuIHRoaXMuc2V0SW5zZXJ0aW9uTW9kZSgiaW5UYWJsZUJvZHkiKTtpZigiY2FwdGlvbiI9PT1ub2RlLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5zZXRJbnNlcnRpb25Nb2RlKCJpbkNhcHRpb24iKTtpZigiY29sZ3JvdXAiPT09bm9kZS5sb2NhbE5hbWUpcmV0dXJuIHRoaXMuc2V0SW5zZXJ0aW9uTW9kZSgiaW5Db2x1bW5Hcm91cCIpO2lmKCJ0YWJsZSI9PT1ub2RlLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5zZXRJbnNlcnRpb25Nb2RlKCJpblRhYmxlIik7aWYoImhlYWQiPT09bm9kZS5sb2NhbE5hbWUmJiFsYXN0KXJldHVybiB0aGlzLnNldEluc2VydGlvbk1vZGUoImluSGVhZCIpO2lmKCJib2R5Ij09PW5vZGUubG9jYWxOYW1lKXJldHVybiB0aGlzLnNldEluc2VydGlvbk1vZGUoImluQm9keSIpO2lmKCJmcmFtZXNldCI9PT1ub2RlLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5zZXRJbnNlcnRpb25Nb2RlKCJpbkZyYW1lc2V0Iik7aWYoImh0bWwiPT09bm9kZS5sb2NhbE5hbWUpcmV0dXJuIHRoaXMub3BlbkVsZW1lbnRzLmhlYWRFbGVtZW50P3RoaXMuc2V0SW5zZXJ0aW9uTW9kZSgiYWZ0ZXJIZWFkIik6dGhpcy5zZXRJbnNlcnRpb25Nb2RlKCJiZWZvcmVIZWFkIil9aWYobGFzdClyZXR1cm4gdGhpcy5zZXRJbnNlcnRpb25Nb2RlKCJpbkJvZHkiKX19LFRyZWVCdWlsZGVyLnByb3RvdHlwZS5wcm9jZXNzR2VuZXJpY1JDREFUQVN0YXJ0VGFnPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dGhpcy5pbnNlcnRFbGVtZW50KG5hbWUsYXR0cmlidXRlcyksdGhpcy50b2tlbml6ZXIuc2V0U3RhdGUoVG9rZW5pemVyLlJDREFUQSksdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGU9dGhpcy5pbnNlcnRpb25Nb2RlTmFtZSx0aGlzLnNldEluc2VydGlvbk1vZGUoInRleHQiKX0sVHJlZUJ1aWxkZXIucHJvdG90eXBlLnByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnPWZ1bmN0aW9uKG5hbWUsYXR0cmlidXRlcyl7dGhpcy5pbnNlcnRFbGVtZW50KG5hbWUsYXR0cmlidXRlcyksdGhpcy50b2tlbml6ZXIuc2V0U3RhdGUoVG9rZW5pemVyLlJBV1RFWFQpLHRoaXMub3JpZ2luYWxJbnNlcnRpb25Nb2RlPXRoaXMuaW5zZXJ0aW9uTW9kZU5hbWUsdGhpcy5zZXRJbnNlcnRpb25Nb2RlKCJ0ZXh0Iil9LFRyZWVCdWlsZGVyLnByb3RvdHlwZS5hZGp1c3RNYXRoTUxBdHRyaWJ1dGVzPWZ1bmN0aW9uKGF0dHJpYnV0ZXMpe3JldHVybiBhdHRyaWJ1dGVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2VVUkk9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLGNvbnN0YW50cy5NQVRITUxBdHRyaWJ1dGVNYXBbYS5ub2RlTmFtZV0mJihhLm5vZGVOYW1lPWNvbnN0YW50cy5NQVRITUxBdHRyaWJ1dGVNYXBbYS5ub2RlTmFtZV0pfSksYXR0cmlidXRlc30sVHJlZUJ1aWxkZXIucHJvdG90eXBlLmFkanVzdFNWR1RhZ05hbWVDYXNlPWZ1bmN0aW9uKG5hbWUpe3JldHVybiBjb25zdGFudHMuU1ZHVGFnTWFwW25hbWVdfHxuYW1lfSxUcmVlQnVpbGRlci5wcm90b3R5cGUuYWRqdXN0U1ZHQXR0cmlidXRlcz1mdW5jdGlvbihhdHRyaWJ1dGVzKXtyZXR1cm4gYXR0cmlidXRlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EubmFtZXNwYWNlVVJJPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY29uc3RhbnRzLlNWR0F0dHJpYnV0ZU1hcFthLm5vZGVOYW1lXSYmKGEubm9kZU5hbWU9Y29uc3RhbnRzLlNWR0F0dHJpYnV0ZU1hcFthLm5vZGVOYW1lXSl9KSxhdHRyaWJ1dGVzfSxUcmVlQnVpbGRlci5wcm90b3R5cGUuYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXM9ZnVuY3Rpb24oYXR0cmlidXRlcyl7Zm9yKHZhciBpPTA7YXR0cmlidXRlcy5sZW5ndGg+aTtpKyspe3ZhciBhdHRyaWJ1dGU9YXR0cmlidXRlc1tpXSxhZGp1c3RlZD1jb25zdGFudHMuRm9yZWlnbkF0dHJpYnV0ZU1hcFthdHRyaWJ1dGUubm9kZU5hbWVdO2FkanVzdGVkJiYoYXR0cmlidXRlLm5vZGVOYW1lPWFkanVzdGVkLmxvY2FsTmFtZSxhdHRyaWJ1dGUucHJlZml4PWFkanVzdGVkLnByZWZpeCxhdHRyaWJ1dGUubmFtZXNwYWNlVVJJPWFkanVzdGVkLm5hbWVzcGFjZVVSSSl9cmV0dXJuIGF0dHJpYnV0ZXN9LGV4cG9ydHMuVHJlZUJ1aWxkZXI9VHJlZUJ1aWxkZXJ9LHsiLi9FbGVtZW50U3RhY2siOjEsIi4vU3RhY2tJdGVtIjo0LCIuL1Rva2VuaXplciI6NSwiLi9jb25zdGFudHMiOjcsIi4vbWVzc2FnZXMuanNvbiI6OCxhc3NlcnQ6MTMsZXZlbnRzOjE2fV0sNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7ZXhwb3J0cy5TVkdUYWdNYXA9e2FsdGdseXBoOiJhbHRHbHlwaCIsYWx0Z2x5cGhkZWY6ImFsdEdseXBoRGVmIixhbHRnbHlwaGl0ZW06ImFsdEdseXBoSXRlbSIsYW5pbWF0ZWNvbG9yOiJhbmltYXRlQ29sb3IiLGFuaW1hdGVtb3Rpb246ImFuaW1hdGVNb3Rpb24iLGFuaW1hdGV0cmFuc2Zvcm06ImFuaW1hdGVUcmFuc2Zvcm0iLGNsaXBwYXRoOiJjbGlwUGF0aCIsZmVibGVuZDoiZmVCbGVuZCIsZmVjb2xvcm1hdHJpeDoiZmVDb2xvck1hdHJpeCIsZmVjb21wb25lbnR0cmFuc2ZlcjoiZmVDb21wb25lbnRUcmFuc2ZlciIsZmVjb21wb3NpdGU6ImZlQ29tcG9zaXRlIixmZWNvbnZvbHZlbWF0cml4OiJmZUNvbnZvbHZlTWF0cml4IixmZWRpZmZ1c2VsaWdodGluZzoiZmVEaWZmdXNlTGlnaHRpbmciLGZlZGlzcGxhY2VtZW50bWFwOiJmZURpc3BsYWNlbWVudE1hcCIsZmVkaXN0YW50bGlnaHQ6ImZlRGlzdGFudExpZ2h0IixmZWZsb29kOiJmZUZsb29kIixmZWZ1bmNhOiJmZUZ1bmNBIixmZWZ1bmNiOiJmZUZ1bmNCIixmZWZ1bmNnOiJmZUZ1bmNHIixmZWZ1bmNyOiJmZUZ1bmNSIixmZWdhdXNzaWFuYmx1cjoiZmVHYXVzc2lhbkJsdXIiLGZlaW1hZ2U6ImZlSW1hZ2UiLGZlbWVyZ2U6ImZlTWVyZ2UiLGZlbWVyZ2Vub2RlOiJmZU1lcmdlTm9kZSIsZmVtb3JwaG9sb2d5OiJmZU1vcnBob2xvZ3kiLGZlb2Zmc2V0OiJmZU9mZnNldCIsZmVwb2ludGxpZ2h0OiJmZVBvaW50TGlnaHQiLGZlc3BlY3VsYXJsaWdodGluZzoiZmVTcGVjdWxhckxpZ2h0aW5nIixmZXNwb3RsaWdodDoiZmVTcG90TGlnaHQiLGZldGlsZToiZmVUaWxlIixmZXR1cmJ1bGVuY2U6ImZlVHVyYnVsZW5jZSIsZm9yZWlnbm9iamVjdDoiZm9yZWlnbk9iamVjdCIsZ2x5cGhyZWY6ImdseXBoUmVmIixsaW5lYXJncmFkaWVudDoibGluZWFyR3JhZGllbnQiLHJhZGlhbGdyYWRpZW50OiJyYWRpYWxHcmFkaWVudCIsdGV4dHBhdGg6InRleHRQYXRoIn0sZXhwb3J0cy5NQVRITUxBdHRyaWJ1dGVNYXA9e2RlZmluaXRpb251cmw6ImRlZmluaXRpb25VUkwifSxleHBvcnRzLlNWR0F0dHJpYnV0ZU1hcD17YXR0cmlidXRlbmFtZToiYXR0cmlidXRlTmFtZSIsYXR0cmlidXRldHlwZToiYXR0cmlidXRlVHlwZSIsYmFzZWZyZXF1ZW5jeToiYmFzZUZyZXF1ZW5jeSIsYmFzZXByb2ZpbGU6ImJhc2VQcm9maWxlIixjYWxjbW9kZToiY2FsY01vZGUiLGNsaXBwYXRodW5pdHM6ImNsaXBQYXRoVW5pdHMiLGNvbnRlbnRzY3JpcHR0eXBlOiJjb250ZW50U2NyaXB0VHlwZSIsY29udGVudHN0eWxldHlwZToiY29udGVudFN0eWxlVHlwZSIsZGlmZnVzZWNvbnN0YW50OiJkaWZmdXNlQ29uc3RhbnQiLGVkZ2Vtb2RlOiJlZGdlTW9kZSIsZXh0ZXJuYWxyZXNvdXJjZXNhY2VxdWlyZWQ6ImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQiLGZpbHRlcnJlczoiZmlsdGVyUmVzIixmaWx0ZXJ1bml0czoiZmlsdGVyVW5pdHMiLGdseXBocmVmOiJnbHlwaFJlZiIsZ3JhZGllbnR0cmFuc2Zvcm06ImdyYWRpZW50VHJhbnNmb3JtIixncmFkaWVudHVuaXRzOiJncmFkaWVudFVuaXRzIixrZXJuZWxtYXRyaXg6Imtlcm5lbE1hdHJpeCIsa2VybmVsdW5pdGxlbmd0aDoia2VybmVsVW5pdExlbmd0aCIsa2V5cG9pbnRzOiJrZXlQb2ludHMiLGtleXNwbGluZXM6ImtleVNwbGluZXMiLGtleXRpbWVzOiJrZXlUaW1lcyIsbGVuZ3RoYWRqdXN0OiJsZW5ndGhBZGp1c3QiLGxpbWl0aW5nY29uZWFuZ2xlOiJsaW1pdGluZ0NvbmVBbmdsZSIsbWFya2VyaGVpZ2h0OiJtYXJrZXJIZWlnaHQiLG1hcmtlcnVuaXRzOiJtYXJrZXJVbml0cyIsbWFya2Vyd2lkdGg6Im1hcmtlcldpZHRoIixtYXNrY29udGVudHVuaXRzOiJtYXNrQ29udGVudFVuaXRzIixtYXNrdW5pdHM6Im1hc2tVbml0cyIsbnVtb2N0YXZlczoibnVtT2N0YXZlcyIscGF0aGxlbmd0aDoicGF0aExlbmd0aCIscGF0dGVybmNvbnRlbnR1bml0czoicGF0dGVybkNvbnRlbnRVbml0cyIscGF0dGVybnRyYW5zZm9ybToicGF0dGVyblRyYW5zZm9ybSIscGF0dGVybnVuaXRzOiJwYXR0ZXJuVW5pdHMiLHBvaW50c2F0eDoicG9pbnRzQXRYIixwb2ludHNhdHk6InBvaW50c0F0WSIscG9pbnRzYXR6OiJwb2ludHNBdFoiLHByZXNlcnZlYWxwaGE6InByZXNlcnZlQWxwaGEiLHByZXNlcnZlYXNwZWN0cmF0aW86InByZXNlcnZlQXNwZWN0UmF0aW8iLHByaW1pdGl2ZXVuaXRzOiJwcmltaXRpdmVVbml0cyIscmVmeDoicmVmWCIscmVmeToicmVmWSIscmVwZWF0Y291bnQ6InJlcGVhdENvdW50IixyZXBlYXRkdXI6InJlcGVhdER1ciIsYWNlcXVpcmVkZXh0ZW5zaW9uczoiYWNlcXVpcmVkRXh0ZW5zaW9ucyIsYWNlcXVpcmVkZmVhdHVyZXM6ImFjZXF1aXJlZEZlYXR1cmVzIixzcGVjdWxhcmNvbnN0YW50OiJzcGVjdWxhckNvbnN0YW50IixzcGVjdWxhcmV4cG9uZW50OiJzcGVjdWxhckV4cG9uZW50IixzcHJlYWRtZXRob2Q6InNwcmVhZE1ldGhvZCIsc3RhcnRvZmZzZXQ6InN0YXJ0T2Zmc2V0IixzdGRkZXZpYXRpb246InN0ZERldmlhdGlvbiIsc3RpdGNodGlsZXM6InN0aXRjaFRpbGVzIixzdXJmYWNlc2NhbGU6InN1cmZhY2VTY2FsZSIsc3lzdGVtbGFuZ3VhZ2U6InN5c3RlbUxhbmd1YWdlIix0YWJsZXZhbHVlczoidGFibGVWYWx1ZXMiLHRhcmdldHg6InRhcmdldFgiLHRhcmdldHk6InRhcmdldFkiLHRleHRsZW5ndGg6InRleHRMZW5ndGgiLHZpZXdib3g6InZpZXdCb3giLHZpZXd0YXJnZXQ6InZpZXdUYXJnZXQiLHhjaGFubmVsc2VsZWN0b3I6InhDaGFubmVsU2VsZWN0b3IiLHljaGFubmVsc2VsZWN0b3I6InlDaGFubmVsU2VsZWN0b3IiLHpvb21hbmRwYW46Inpvb21BbmRQYW4ifSxleHBvcnRzLkZvcmVpZ25BdHRyaWJ1dGVNYXA9eyJ4bGluazphY3R1YXRlIjp7cHJlZml4OiJ4bGluayIsbG9jYWxOYW1lOiJhY3R1YXRlIixuYW1lc3BhY2VVUkk6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsifSwieGxpbms6YXJjcm9sZSI6e3ByZWZpeDoieGxpbmsiLGxvY2FsTmFtZToiYXJjcm9sZSIsbmFtZXNwYWNlVVJJOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIn0sInhsaW5rOmhyZWYiOntwcmVmaXg6InhsaW5rIixsb2NhbE5hbWU6ImhyZWYiLG5hbWVzcGFjZVVSSToiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayJ9LCJ4bGluazpyb2xlIjp7cHJlZml4OiJ4bGluayIsbG9jYWxOYW1lOiJyb2xlIixuYW1lc3BhY2VVUkk6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsifSwieGxpbms6c2hvdyI6e3ByZWZpeDoieGxpbmsiLGxvY2FsTmFtZToic2hvdyIsbmFtZXNwYWNlVVJJOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIn0sInhsaW5rOnRpdGxlIjp7cHJlZml4OiJ4bGluayIsbG9jYWxOYW1lOiJ0aXRsZSIsbmFtZXNwYWNlVVJJOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIn0sInhsaW5rOnR5cGUiOntwcmVmaXg6InhsaW5rIixsb2NhbE5hbWU6InRpdGxlIixuYW1lc3BhY2VVUkk6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsifSwieG1sOmJhc2UiOntwcmVmaXg6InhtbCIsbG9jYWxOYW1lOiJiYXNlIixuYW1lc3BhY2VVUkk6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSJ9LCJ4bWw6bGFuZyI6e3ByZWZpeDoieG1sIixsb2NhbE5hbWU6ImxhbmciLG5hbWVzcGFjZVVSSToiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIn0sInhtbDpzcGFjZSI6e3ByZWZpeDoieG1sIixsb2NhbE5hbWU6InNwYWNlIixuYW1lc3BhY2VVUkk6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSJ9LHhtbG5zOntwcmVmaXg6bnVsbCxsb2NhbE5hbWU6InhtbG5zIixuYW1lc3BhY2VVUkk6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn0sInhtbG5zOnhsaW5rIjp7cHJlZml4OiJ4bWxucyIsbG9jYWxOYW1lOiJ4bGluayIsbmFtZXNwYWNlVVJJOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fVxufSx7fV0sODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUpe21vZHVsZS5leHBvcnRzPXsibnVsbC1jaGFyYWN0ZXIiOiJOdWxsIGNoYXJhY3RlciBpbiBpbnB1dCBzdHJlYW0sIHJlcGxhY2VkIHdpdGggVStGRkZELiIsImludmFsaWQtY29kZXBvaW50IjoiSW52YWxpZCBjb2RlcG9pbnQgaW4gc3RyZWFtIiwiaW5jb3JyZWN0bHktcGxhY2VkLXNvbGlkdXMiOiJTb2xpZHVzICgvKSBpbmNvcnJlY3RseSBwbGFjZWQgaW4gdGFnLiIsImluY29ycmVjdC1jci1uZXdsaW5lLWVudGl0eSI6IkluY29ycmVjdCBDUiBuZXdsaW5lIGVudGl0eSwgcmVwbGFjZWQgd2l0aCBMRi4iLCJpbGxlZ2FsLXdpbmRvd3MtMTI1Mi1lbnRpdHkiOiJFbnRpdHkgdXNlZCB3aXRoIGlsbGVnYWwgbnVtYmVyICh3aW5kb3dzLTEyNTIgcmVmZXJlbmNlKS4iLCJjYW50LWNvbnZlcnQtbnVtZXJpYy1lbnRpdHkiOiJOdW1lcmljIGVudGl0eSBjb3VsZG5cJ3QgYmUgY29udmVydGVkIHRvIGNoYXJhY3RlciAoY29kZXBvaW50IFUre2NoYXJBc0ludH0pLiIsImludmFsaWQtbnVtZXJpYy1lbnRpdHktcmVwbGFjZWQiOiJOdW1lcmljIGVudGl0eSByZXByZXNlbnRzIGFuIGlsbGVnYWwgY29kZXBvaW50LiBFeHBhbmRlZCB0byB0aGUgQzEgY29udHJvbHMgcmFuZ2UuIiwibnVtZXJpYy1lbnRpdHktd2l0aG91dC1zZW1pY29sb24iOiJOdW1lcmljIGVudGl0eSBkaWRuXCd0IGVuZCB3aXRoIFwnO1wnLiIsImV4cGVjdGVkLW51bWVyaWMtZW50aXR5LWJ1dC1nb3QtZW9mIjoiTnVtZXJpYyBlbnRpdHkgZXhwZWN0ZWQuIEdvdCBlbmQgb2YgZmlsZSBpbnN0ZWFkLiIsImV4cGVjdGVkLW51bWVyaWMtZW50aXR5IjoiTnVtZXJpYyBlbnRpdHkgZXhwZWN0ZWQgYnV0IG5vbmUgZm91bmQuIiwibmFtZWQtZW50aXR5LXdpdGhvdXQtc2VtaWNvbG9uIjoiTmFtZWQgZW50aXR5IGRpZG5cJ3QgZW5kIHdpdGggXCc7XCcuIiwiZXhwZWN0ZWQtbmFtZWQtZW50aXR5IjoiTmFtZWQgZW50aXR5IGV4cGVjdGVkLiBHb3Qgbm9uZS4iLCJhdHRyaWJ1dGVzLWluLWVuZC10YWciOiJFbmQgdGFnIGNvbnRhaW5zIHVuZXhwZWN0ZWQgYXR0cmlidXRlcy4iLCJzZWxmLWNsb3NpbmctZmxhZy1vbi1lbmQtdGFnIjoiRW5kIHRhZyBjb250YWlucyB1bmV4cGVjdGVkIHNlbGYtY2xvc2luZyBmbGFnLiIsImJhcmUtbGVzcy10aGFuLXNpZ24tYXQtZW9mIjoiRW5kIG9mIGZpbGUgYWZ0ZXIgPC4iLCJleHBlY3RlZC10YWctbmFtZS1idXQtZ290LXJpZ2h0LWJyYWNrZXQiOiJFeHBlY3RlZCB0YWcgbmFtZS4gR290IFwnPlwnIGluc3RlYWQuIiwiZXhwZWN0ZWQtdGFnLW5hbWUtYnV0LWdvdC1xdWVzdGlvbi1tYXJrIjoiRXhwZWN0ZWQgdGFnIG5hbWUuIEdvdCBcJz9cJyBpbnN0ZWFkLiAoSFRNTCBkb2VzblwndCBzdXBwb3J0IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLikiLCJleHBlY3RlZC10YWctbmFtZSI6IkV4cGVjdGVkIHRhZyBuYW1lLiBHb3Qgc29tZXRoaW5nIGVsc2UgaW5zdGVhZC4iLCJleHBlY3RlZC1jbG9zaW5nLXRhZy1idXQtZ290LXJpZ2h0LWJyYWNrZXQiOiJFeHBlY3RlZCBjbG9zaW5nIHRhZy4gR290IFwnPlwnIGluc3RlYWQuIElnbm9yaW5nIFwnPC8+XCcuIiwiZXhwZWN0ZWQtY2xvc2luZy10YWctYnV0LWdvdC1lb2YiOiJFeHBlY3RlZCBjbG9zaW5nIHRhZy4gVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4iLCJleHBlY3RlZC1jbG9zaW5nLXRhZy1idXQtZ290LWNoYXIiOiJFeHBlY3RlZCBjbG9zaW5nIHRhZy4gVW5leHBlY3RlZCBjaGFyYWN0ZXIgXCd7ZGF0YX1cJyBmb3VuZC4iLCJlb2YtaW4tdGFnLW5hbWUiOiJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIHRoZSB0YWcgbmFtZS4iLCJleHBlY3RlZC1hdHRyaWJ1dGUtbmFtZS1idXQtZ290LWVvZiI6IlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUuIEV4cGVjdGVkIGF0dHJpYnV0ZSBuYW1lIGluc3RlYWQuIiwiZW9mLWluLWF0dHJpYnV0ZS1uYW1lIjoiVW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpbiBhdHRyaWJ1dGUgbmFtZS4iLCJpbnZhbGlkLWNoYXJhY3Rlci1pbi1hdHRyaWJ1dGUtbmFtZSI6IkludmFsaWQgY2hhcmFjdGVyIGluIGF0dHJpYnV0ZSBuYW1lLiIsImR1cGxpY2F0ZS1hdHRyaWJ1dGUiOiJEcm9wcGVkIGR1cGxpY2F0ZSBhdHRyaWJ1dGUgXCd7bmFtZX1cJyBvbiB0YWcuIiwiZXhwZWN0ZWQtZW5kLW9mLXRhZy1idXQtZ290LWVvZiI6IlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUuIEV4cGVjdGVkID0gb3IgZW5kIG9mIHRhZy4iLCJleHBlY3RlZC1hdHRyaWJ1dGUtdmFsdWUtYnV0LWdvdC1lb2YiOiJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlLiBFeHBlY3RlZCBhdHRyaWJ1dGUgdmFsdWUuIiwiZXhwZWN0ZWQtYXR0cmlidXRlLXZhbHVlLWJ1dC1nb3QtcmlnaHQtYnJhY2tldCI6IkV4cGVjdGVkIGF0dHJpYnV0ZSB2YWx1ZS4gR290IFwnPlwnIGluc3RlYWQuIiwidW5leHBlY3RlZC1jaGFyYWN0ZXItaW4tdW5xdW90ZWQtYXR0cmlidXRlLXZhbHVlIjoiVW5leHBlY3RlZCBjaGFyYWN0ZXIgaW4gdW5xdW90ZWQgYXR0cmlidXRlIiwiaW52YWxpZC1jaGFyYWN0ZXItYWZ0ZXItYXR0cmlidXRlLW5hbWUiOiJVbmV4cGVjdGVkIGNoYXJhY3RlciBhZnRlciBhdHRyaWJ1dGUgbmFtZS4iLCJ1bmV4cGVjdGVkLWNoYXJhY3Rlci1hZnRlci1hdHRyaWJ1dGUtdmFsdWUiOiJVbmV4cGVjdGVkIGNoYXJhY3RlciBhZnRlciBhdHRyaWJ1dGUgdmFsdWUuIiwiZW9mLWluLWF0dHJpYnV0ZS12YWx1ZS1kb3VibGUtcXVvdGUiOlwnVW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpbiBhdHRyaWJ1dGUgdmFsdWUgKCIpLlwnLCJlb2YtaW4tYXR0cmlidXRlLXZhbHVlLXNpbmdsZS1xdW90ZSI6IlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaW4gYXR0cmlidXRlIHZhbHVlIChcJykuIiwiZW9mLWluLWF0dHJpYnV0ZS12YWx1ZS1uby1xdW90ZXMiOiJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIGF0dHJpYnV0ZSB2YWx1ZS4iLCJlb2YtYWZ0ZXItYXR0cmlidXRlLXZhbHVlIjoiVW5leHBlY3RlZCBlbmQgb2YgZmlsZSBhZnRlciBhdHRyaWJ1dGUgdmFsdWUuIiwidW5leHBlY3RlZC1lb2YtYWZ0ZXItc29saWR1cy1pbi10YWciOiJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIHRhZy4gRXhwZWN0ZWQgPi4iLCJ1bmV4cGVjdGVkLWNoYXJhY3Rlci1hZnRlci1zb2xpZHVzLWluLXRhZyI6IlVuZXhwZWN0ZWQgY2hhcmFjdGVyIGFmdGVyIC8gaW4gdGFnLiBFeHBlY3RlZCA+LiIsImV4cGVjdGVkLWRhc2hlcy1vci1kb2N0eXBlIjoiRXhwZWN0ZWQgXCctLVwnIG9yIFwnRE9DVFlQRVwnLiBOb3QgZm91bmQuIiwidW5leHBlY3RlZC1iYW5nLWFmdGVyLWRvdWJsZS1kYXNoLWluLWNvbW1lbnQiOiJVbmV4cGVjdGVkICEgYWZ0ZXIgLS0gaW4gY29tbWVudC4iLCJpbmNvcnJlY3QtY29tbWVudCI6IkluY29ycmVjdCBjb21tZW50LiIsImVvZi1pbi1jb21tZW50IjoiVW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpbiBjb21tZW50LiIsImVvZi1pbi1jb21tZW50LWVuZC1kYXNoIjoiVW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpbiBjb21tZW50ICgtKS4iLCJ1bmV4cGVjdGVkLWRhc2gtYWZ0ZXItZG91YmxlLWRhc2gtaW4tY29tbWVudCI6IlVuZXhwZWN0ZWQgXCctXCcgYWZ0ZXIgXCctLVwnIGZvdW5kIGluIGNvbW1lbnQuIiwiZW9mLWluLWNvbW1lbnQtZG91YmxlLWRhc2giOiJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIGNvbW1lbnQgKC0tKS4iLCJlb2YtaW4tY29tbWVudC1lbmQtYmFuZy1zdGF0ZSI6IlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaW4gY29tbWVudC4iLCJ1bmV4cGVjdGVkLWNoYXItaW4tY29tbWVudCI6IlVuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGNvbW1lbnQgZm91bmQuIiwibmVlZC1zcGFjZS1hZnRlci1kb2N0eXBlIjoiTm8gc3BhY2UgYWZ0ZXIgbGl0ZXJhbCBzdHJpbmcgXCdET0NUWVBFXCcuIiwiZXhwZWN0ZWQtZG9jdHlwZS1uYW1lLWJ1dC1nb3QtcmlnaHQtYnJhY2tldCI6IlVuZXhwZWN0ZWQgPiBjaGFyYWN0ZXIuIEV4cGVjdGVkIERPQ1RZUEUgbmFtZS4iLCJleHBlY3RlZC1kb2N0eXBlLW5hbWUtYnV0LWdvdC1lb2YiOiJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlLiBFeHBlY3RlZCBET0NUWVBFIG5hbWUuIiwiZW9mLWluLWRvY3R5cGUtbmFtZSI6IlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaW4gRE9DVFlQRSBuYW1lLiIsImVvZi1pbi1kb2N0eXBlIjoiVW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpbiBET0NUWVBFLiIsImV4cGVjdGVkLXNwYWNlLW9yLXJpZ2h0LWJyYWNrZXQtaW4tZG9jdHlwZSI6IkV4cGVjdGVkIHNwYWNlIG9yIFwnPlwnLiBHb3QgXCd7ZGF0YX1cJy4iLCJ1bmV4cGVjdGVkLWVuZC1vZi1kb2N0eXBlIjoiVW5leHBlY3RlZCBlbmQgb2YgRE9DVFlQRS4iLCJ1bmV4cGVjdGVkLWNoYXItaW4tZG9jdHlwZSI6IlVuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIERPQ1RZUEUuIiwiZW9mLWluLWJvZ3VzLWRvY3R5cGUiOiJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIGJvZ3VzIGRvY3R5cGUuIiwiZW9mLWluLWlubmVyaHRtbCI6IlVuZXhwZWN0ZWQgRU9GIGluIGlubmVyIGh0bWwgbW9kZS4iLCJ1bmV4cGVjdGVkLWRvY3R5cGUiOiJVbmV4cGVjdGVkIERPQ1RZUEUuIElnbm9yZWQuIiwibm9uLWh0bWwtcm9vdCI6Imh0bWwgbmVlZHMgdG8gYmUgdGhlIGZpcnN0IHN0YXJ0IHRhZy4iLCJleHBlY3RlZC1kb2N0eXBlLWJ1dC1nb3QtZW9mIjoiVW5leHBlY3RlZCBFbmQgb2YgZmlsZS4gRXhwZWN0ZWQgRE9DVFlQRS4iLCJ1bmtub3duLWRvY3R5cGUiOiJFcnJvbmVvdXMgRE9DVFlQRS4gRXhwZWN0ZWQgPCFET0NUWVBFIGh0bWw+LiIsInF1aXJreS1kb2N0eXBlIjoiUXVpcmt5IGRvY3R5cGUuIEV4cGVjdGVkIDwhRE9DVFlQRSBodG1sPi4iLCJhbG1vc3Qtc3RhbmRhcmRzLWRvY3R5cGUiOiJBbG1vc3Qgc3RhbmRhcmRzIG1vZGUgZG9jdHlwZS4gRXhwZWN0ZWQgPCFET0NUWVBFIGh0bWw+LiIsIm9ic29sZXRlLWRvY3R5cGUiOiJPYnNvbGV0ZSBkb2N0eXBlLiBFeHBlY3RlZCA8IURPQ1RZUEUgaHRtbD4uIiwiZXhwZWN0ZWQtZG9jdHlwZS1idXQtZ290LWNoYXJzIjoiTm9uLXNwYWNlIGNoYXJhY3RlcnMgZm91bmQgd2l0aG91dCBzZWVpbmcgYSBkb2N0eXBlIGZpcnN0LiBFeHBlY3RlZCBlLmcuIDwhRE9DVFlQRSBodG1sPi4iLCJleHBlY3RlZC1kb2N0eXBlLWJ1dC1nb3Qtc3RhcnQtdGFnIjoiU3RhcnQgdGFnIHNlZW4gd2l0aG91dCBzZWVpbmcgYSBkb2N0eXBlIGZpcnN0LiBFeHBlY3RlZCBlLmcuIDwhRE9DVFlQRSBodG1sPi4iLCJleHBlY3RlZC1kb2N0eXBlLWJ1dC1nb3QtZW5kLXRhZyI6IkVuZCB0YWcgc2VlbiB3aXRob3V0IHNlZWluZyBhIGRvY3R5cGUgZmlyc3QuIEV4cGVjdGVkIGUuZy4gPCFET0NUWVBFIGh0bWw+LiIsImVuZC10YWctYWZ0ZXItaW1wbGllZC1yb290IjoiVW5leHBlY3RlZCBlbmQgdGFnICh7bmFtZX0pIGFmdGVyIHRoZSAoaW1wbGllZCkgcm9vdCBlbGVtZW50LiIsImV4cGVjdGVkLW5hbWVkLWNsb3NpbmctdGFnLWJ1dC1nb3QtZW9mIjoiVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4gRXhwZWN0ZWQgZW5kIHRhZyAoe25hbWV9KS4iLCJ0d28taGVhZHMtYXJlLW5vdC1iZXR0ZXItdGhhbi1vbmUiOiJVbmV4cGVjdGVkIHN0YXJ0IHRhZyBoZWFkIGluIGV4aXN0aW5nIGhlYWQuIElnbm9yZWQuIiwidW5leHBlY3RlZC1lbmQtdGFnIjoiVW5leHBlY3RlZCBlbmQgdGFnICh7bmFtZX0pLiBJZ25vcmVkLiIsInVuZXhwZWN0ZWQtaW1wbGllZC1lbmQtdGFnIjoiRW5kIHRhZyB7bmFtZX0gaW1wbGllZCwgYnV0IHRoZXJlIHdlcmUgb3BlbiBlbGVtZW50cy4iLCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1vdXQtb2YtbXktaGVhZCI6IlVuZXhwZWN0ZWQgc3RhcnQgdGFnICh7bmFtZX0pIHRoYXQgY2FuIGJlIGluIGhlYWQuIE1vdmVkLiIsInVuZXhwZWN0ZWQtc3RhcnQtdGFnIjoiVW5leHBlY3RlZCBzdGFydCB0YWcgKHtuYW1lfSkuIiwibWlzc2luZy1lbmQtdGFnIjoiTWlzc2luZyBlbmQgdGFnICh7bmFtZX0pLiIsIm1pc3NpbmctZW5kLXRhZ3MiOiJNaXNzaW5nIGVuZCB0YWdzICh7bmFtZX0pLiIsInVuZXhwZWN0ZWQtc3RhcnQtdGFnLWltcGxpZXMtZW5kLXRhZyI6IlVuZXhwZWN0ZWQgc3RhcnQgdGFnICh7c3RhcnROYW1lfSkgaW1wbGllcyBlbmQgdGFnICh7ZW5kTmFtZX0pLiIsInVuZXhwZWN0ZWQtc3RhcnQtdGFnLXRyZWF0ZWQtYXMiOiJVbmV4cGVjdGVkIHN0YXJ0IHRhZyAoe29yaWdpbmFsTmFtZX0pLiBUcmVhdGVkIGFzIHtuZXdOYW1lfS4iLCJkZXByZWNhdGVkLXRhZyI6IlVuZXhwZWN0ZWQgc3RhcnQgdGFnIHtuYW1lfS4gRG9uXCd0IHVzZSBpdCEiLCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pZ25vcmVkIjoiVW5leHBlY3RlZCBzdGFydCB0YWcge25hbWV9LiBJZ25vcmVkLiIsImV4cGVjdGVkLW9uZS1lbmQtdGFnLWJ1dC1nb3QtYW5vdGhlciI6IlVuZXhwZWN0ZWQgZW5kIHRhZyAoe2dvdE5hbWV9KS4gTWlzc2luZyBlbmQgdGFnICh7ZXhwZWN0ZWROYW1lfSkuIiwiZW5kLXRhZy10b28tZWFybHkiOiJFbmQgdGFnICh7bmFtZX0pIHNlZW4gdG9vIGVhcmx5LiBFeHBlY3RlZCBvdGhlciBlbmQgdGFnLiIsImVuZC10YWctdG9vLWVhcmx5LW5hbWVkIjoiVW5leHBlY3RlZCBlbmQgdGFnICh7Z290TmFtZX0pLiBFeHBlY3RlZCBlbmQgdGFnICh7ZXhwZWN0ZWROYW1lfS4iLCJlbmQtdGFnLXRvby1lYXJseS1pZ25vcmVkIjoiRW5kIHRhZyAoe25hbWV9KSBzZWVuIHRvbyBlYXJseS4gSWdub3JlZC4iLCJhZG9wdGlvbi1hZ2VuY3ktMS4xIjoiRW5kIHRhZyAoe25hbWV9KSB2aW9sYXRlcyBzdGVwIDEsIHBhcmFncmFwaCAxIG9mIHRoZSBhZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtLiIsImFkb3B0aW9uLWFnZW5jeS0xLjIiOiJFbmQgdGFnICh7bmFtZX0pIHZpb2xhdGVzIHN0ZXAgMSwgcGFyYWdyYXBoIDIgb2YgdGhlIGFkb3B0aW9uIGFnZW5jeSBhbGdvcml0aG0uIiwiYWRvcHRpb24tYWdlbmN5LTEuMyI6IkVuZCB0YWcgKHtuYW1lfSkgdmlvbGF0ZXMgc3RlcCAxLCBwYXJhZ3JhcGggMyBvZiB0aGUgYWRvcHRpb24gYWdlbmN5IGFsZ29yaXRobS4iLCJhZG9wdGlvbi1hZ2VuY3ktNC40IjoiRW5kIHRhZyAoe25hbWV9KSB2aW9sYXRlcyBzdGVwIDQsIHBhcmFncmFwaCA0IG9mIHRoZSBhZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtLiIsInVuZXhwZWN0ZWQtZW5kLXRhZy10cmVhdGVkLWFzIjoiVW5leHBlY3RlZCBlbmQgdGFnICh7b3JpZ2luYWxOYW1lfSkuIFRyZWF0ZWQgYXMge25ld05hbWV9LiIsIm5vLWVuZC10YWciOiJUaGlzIGVsZW1lbnQgKHtuYW1lfSkgaGFzIG5vIGVuZCB0YWcuIiwidW5leHBlY3RlZC1pbXBsaWVkLWVuZC10YWctaW4tdGFibGUiOiJVbmV4cGVjdGVkIGltcGxpZWQgZW5kIHRhZyAoe25hbWV9KSBpbiB0aGUgdGFibGUgcGhhc2UuIiwidW5leHBlY3RlZC1pbXBsaWVkLWVuZC10YWctaW4tdGFibGUtYm9keSI6IlVuZXhwZWN0ZWQgaW1wbGllZCBlbmQgdGFnICh7bmFtZX0pIGluIHRoZSB0YWJsZSBib2R5IHBoYXNlLiIsInVuZXhwZWN0ZWQtY2hhci1pbXBsaWVzLXRhYmxlLXZvb2RvbyI6IlVuZXhwZWN0ZWQgbm9uLXNwYWNlIGNoYXJhY3RlcnMgaW4gdGFibGUgY29udGV4dCBjYXVzZWQgdm9vZG9vIG1vZGUuIiwidW5leHBlY3RlZC1oaWRkZW4taW5wdXQtaW4tdGFibGUiOiJVbmV4cGVjdGVkIGlucHV0IHdpdGggdHlwZSBoaWRkZW4gaW4gdGFibGUgY29udGV4dC4iLCJ1bmV4cGVjdGVkLWZvcm0taW4tdGFibGUiOiJVbmV4cGVjdGVkIGZvcm0gaW4gdGFibGUgY29udGV4dC4iLCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbXBsaWVzLXRhYmxlLXZvb2RvbyI6IlVuZXhwZWN0ZWQgc3RhcnQgdGFnICh7bmFtZX0pIGluIHRhYmxlIGNvbnRleHQgY2F1c2VkIHZvb2RvbyBtb2RlLiIsInVuZXhwZWN0ZWQtZW5kLXRhZy1pbXBsaWVzLXRhYmxlLXZvb2RvbyI6IlVuZXhwZWN0ZWQgZW5kIHRhZyAoe25hbWV9KSBpbiB0YWJsZSBjb250ZXh0IGNhdXNlZCB2b29kb28gbW9kZS4iLCJ1bmV4cGVjdGVkLWNlbGwtaW4tdGFibGUtYm9keSI6IlVuZXhwZWN0ZWQgdGFibGUgY2VsbCBzdGFydCB0YWcgKHtuYW1lfSkgaW4gdGhlIHRhYmxlIGJvZHkgcGhhc2UuIiwidW5leHBlY3RlZC1jZWxsLWVuZC10YWciOiJHb3QgdGFibGUgY2VsbCBlbmQgdGFnICh7bmFtZX0pIHdoaWxlIGFjZXF1aXJlZCBlbmQgdGFncyBhcmUgbWlzc2luZy4iLCJ1bmV4cGVjdGVkLWVuZC10YWctaW4tdGFibGUtYm9keSI6IlVuZXhwZWN0ZWQgZW5kIHRhZyAoe25hbWV9KSBpbiB0aGUgdGFibGUgYm9keSBwaGFzZS4gSWdub3JlZC4iLCJ1bmV4cGVjdGVkLWltcGxpZWQtZW5kLXRhZy1pbi10YWJsZS1yb3ciOiJVbmV4cGVjdGVkIGltcGxpZWQgZW5kIHRhZyAoe25hbWV9KSBpbiB0aGUgdGFibGUgcm93IHBoYXNlLiIsInVuZXhwZWN0ZWQtZW5kLXRhZy1pbi10YWJsZS1yb3ciOiJVbmV4cGVjdGVkIGVuZCB0YWcgKHtuYW1lfSkgaW4gdGhlIHRhYmxlIHJvdyBwaGFzZS4gSWdub3JlZC4iLCJ1bmV4cGVjdGVkLXNlbGVjdC1pbi1zZWxlY3QiOiJVbmV4cGVjdGVkIHNlbGVjdCBzdGFydCB0YWcgaW4gdGhlIHNlbGVjdCBwaGFzZSB0cmVhdGVkIGFzIHNlbGVjdCBlbmQgdGFnLiIsInVuZXhwZWN0ZWQtaW5wdXQtaW4tc2VsZWN0IjoiVW5leHBlY3RlZCBpbnB1dCBzdGFydCB0YWcgaW4gdGhlIHNlbGVjdCBwaGFzZS4iLCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbi1zZWxlY3QiOiJVbmV4cGVjdGVkIHN0YXJ0IHRhZyB0b2tlbiAoe25hbWV9KSBpbiB0aGUgc2VsZWN0IHBoYXNlLiBJZ25vcmVkLiIsInVuZXhwZWN0ZWQtZW5kLXRhZy1pbi1zZWxlY3QiOiJVbmV4cGVjdGVkIGVuZCB0YWcgKHtuYW1lfSkgaW4gdGhlIHNlbGVjdCBwaGFzZS4gSWdub3JlZC4iLCJ1bmV4cGVjdGVkLXRhYmxlLWVsZW1lbnQtc3RhcnQtdGFnLWluLXNlbGVjdC1pbi10YWJsZSI6IlVuZXhwZWN0ZWQgdGFibGUgZWxlbWVudCBzdGFydCB0YWcgKHtuYW1lfSkgaW4gdGhlIHNlbGVjdCBpbiB0YWJsZSBwaGFzZS4iLCJ1bmV4cGVjdGVkLXRhYmxlLWVsZW1lbnQtZW5kLXRhZy1pbi1zZWxlY3QtaW4tdGFibGUiOiJVbmV4cGVjdGVkIHRhYmxlIGVsZW1lbnQgZW5kIHRhZyAoe25hbWV9KSBpbiB0aGUgc2VsZWN0IGluIHRhYmxlIHBoYXNlLiIsInVuZXhwZWN0ZWQtY2hhci1hZnRlci1ib2R5IjoiVW5leHBlY3RlZCBub24tc3BhY2UgY2hhcmFjdGVycyBpbiB0aGUgYWZ0ZXIgYm9keSBwaGFzZS4iLCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1hZnRlci1ib2R5IjoiVW5leHBlY3RlZCBzdGFydCB0YWcgdG9rZW4gKHtuYW1lfSkgaW4gdGhlIGFmdGVyIGJvZHkgcGhhc2UuIiwidW5leHBlY3RlZC1lbmQtdGFnLWFmdGVyLWJvZHkiOiJVbmV4cGVjdGVkIGVuZCB0YWcgdG9rZW4gKHtuYW1lfSkgaW4gdGhlIGFmdGVyIGJvZHkgcGhhc2UuIiwidW5leHBlY3RlZC1jaGFyLWluLWZyYW1lc2V0IjoiVW5lcHhlY3RlZCBjaGFyYWN0ZXJzIGluIHRoZSBmcmFtZXNldCBwaGFzZS4gQ2hhcmFjdGVycyBpZ25vcmVkLiIsInVuZXhwZWN0ZWQtc3RhcnQtdGFnLWluLWZyYW1lc2V0IjoiVW5leHBlY3RlZCBzdGFydCB0YWcgdG9rZW4gKHtuYW1lfSkgaW4gdGhlIGZyYW1lc2V0IHBoYXNlLiBJZ25vcmVkLiIsInVuZXhwZWN0ZWQtZnJhbWVzZXQtaW4tZnJhbWVzZXQtaW5uZXJodG1sIjoiVW5leHBlY3RlZCBlbmQgdGFnIHRva2VuIChmcmFtZXNldCBpbiB0aGUgZnJhbWVzZXQgcGhhc2UgKGlubmVySFRNTCkuIiwidW5leHBlY3RlZC1lbmQtdGFnLWluLWZyYW1lc2V0IjoiVW5leHBlY3RlZCBlbmQgdGFnIHRva2VuICh7bmFtZX0pIGluIHRoZSBmcmFtZXNldCBwaGFzZS4gSWdub3JlZC4iLCJ1bmV4cGVjdGVkLWNoYXItYWZ0ZXItZnJhbWVzZXQiOiJVbmV4cGVjdGVkIG5vbi1zcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBhZnRlciBmcmFtZXNldCBwaGFzZS4gSWdub3JlZC4iLCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1hZnRlci1mcmFtZXNldCI6IlVuZXhwZWN0ZWQgc3RhcnQgdGFnICh7bmFtZX0pIGluIHRoZSBhZnRlciBmcmFtZXNldCBwaGFzZS4gSWdub3JlZC4iLCJ1bmV4cGVjdGVkLWVuZC10YWctYWZ0ZXItZnJhbWVzZXQiOiJVbmV4cGVjdGVkIGVuZCB0YWcgKHtuYW1lfSkgaW4gdGhlIGFmdGVyIGZyYW1lc2V0IHBoYXNlLiBJZ25vcmVkLiIsImV4cGVjdGVkLWVvZi1idXQtZ290LWNoYXIiOiJVbmV4cGVjdGVkIG5vbi1zcGFjZSBjaGFyYWN0ZXJzLiBFeHBlY3RlZCBlbmQgb2YgZmlsZS4iLCJleHBlY3RlZC1lb2YtYnV0LWdvdC1zdGFydC10YWciOiJVbmV4cGVjdGVkIHN0YXJ0IHRhZyAoe25hbWV9KS4gRXhwZWN0ZWQgZW5kIG9mIGZpbGUuIiwiZXhwZWN0ZWQtZW9mLWJ1dC1nb3QtZW5kLXRhZyI6IlVuZXhwZWN0ZWQgZW5kIHRhZyAoe25hbWV9KS4gRXhwZWN0ZWQgZW5kIG9mIGZpbGUuIiwidW5leHBlY3RlZC1lbmQtdGFibGUtaW4tY2FwdGlvbiI6IlVuZXhwZWN0ZWQgZW5kIHRhYmxlIHRhZyBpbiBjYXB0aW9uLiBHZW5lcmF0ZXMgaW1wbGllZCBlbmQgY2FwdGlvbi4iLCJlbmQtaHRtbC1pbi1pbm5lcmh0bWwiOiJVbmV4cGVjdGVkIGh0bWwgZW5kIHRhZyBpbiBpbm5lciBodG1sIG1vZGUuIiwiZW9mLWluLXRhYmxlIjoiVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4gRXhwZWN0ZWQgdGFibGUgY29udGVudC4iLCJlb2YtaW4tc2NyaXB0IjoiVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4gRXhwZWN0ZWQgc2NyaXB0IGNvbnRlbnQuIiwibm9uLXZvaWQtZWxlbWVudC13aXRoLXRyYWlsaW5nLXNvbGlkdXMiOiJUcmFpbGluZyBzb2xpZHVzIG5vdCBhbGxvd2VkIG9uIGVsZW1lbnQge25hbWV9LiIsInVuZXhwZWN0ZWQtaHRtbC1lbGVtZW50LWluLWZvcmVpZ24tY29udGVudCI6XCdIVE1MIHN0YXJ0IHRhZyAie25hbWV9IiBpbiBhIGZvcmVpZ24gbmFtZXNwYWNlIGNvbnRleHQuXCcsInVuZXhwZWN0ZWQtc3RhcnQtdGFnLWluLXRhYmxlIjoiVW5leHBlY3RlZCB7bmFtZX0uIEV4cGVjdGVkIHRhYmxlIGNvbnRlbnQuIn19LHt9XSw5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtmdW5jdGlvbiBTQVhQYXJzZXIoKXt0aGlzLmNvbnRlbnRIYW5kbGVyPW51bGwsdGhpcy5fZXJyb3JIYW5kbGVyPW51bGwsdGhpcy5fdHJlZUJ1aWxkZXI9bmV3IFNBWFRyZWVCdWlsZGVyLHRoaXMuX3Rva2VuaXplcj1uZXcgVG9rZW5pemVyKHRoaXMuX3RyZWVCdWlsZGVyKSx0aGlzLl9zY3JpcHRpbmdFbmFibGVkPSExfXZhciBTQVhUcmVlQnVpbGRlcj1fZGVyZXFfKCIuL1NBWFRyZWVCdWlsZGVyIikuU0FYVHJlZUJ1aWxkZXIsVG9rZW5pemVyPV9kZXJlcV8oIi4uL1Rva2VuaXplciIpLlRva2VuaXplcixUcmVlUGFyc2VyPV9kZXJlcV8oIi4vVHJlZVBhcnNlciIpLlRyZWVQYXJzZXI7U0FYUGFyc2VyLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihzb3VyY2Upe3RoaXMuX3Rva2VuaXplci50b2tlbml6ZShzb3VyY2UpO3ZhciBkb2N1bWVudD10aGlzLl90cmVlQnVpbGRlci5kb2N1bWVudDtkb2N1bWVudCYmbmV3IFRyZWVQYXJzZXIodGhpcy5jb250ZW50SGFuZGxlcikucGFyc2UoZG9jdW1lbnQpfSxTQVhQYXJzZXIucHJvdG90eXBlLnBhcnNlRnJhZ21lbnQ9ZnVuY3Rpb24oc291cmNlLGNvbnRleHQpe3RoaXMuX3RyZWVCdWlsZGVyLnNldEZyYWdtZW50Q29udGV4dChjb250ZXh0KSx0aGlzLl90b2tlbml6ZXIudG9rZW5pemUoc291cmNlKTt2YXIgZnJhZ21lbnQ9dGhpcy5fdHJlZUJ1aWxkZXIuZ2V0RnJhZ21lbnQoKTtmcmFnbWVudCYmbmV3IFRyZWVQYXJzZXIodGhpcy5jb250ZW50SGFuZGxlcikucGFyc2UoZnJhZ21lbnQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU0FYUGFyc2VyLnByb3RvdHlwZSwic2NyaXB0aW5nRW5hYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY3JpcHRpbmdFbmFibGVkfSxzZXQ6ZnVuY3Rpb24odmFsdWUpe3RoaXMuX3NjcmlwdGluZ0VuYWJsZWQ9dmFsdWUsdGhpcy5fdHJlZUJ1aWxkZXIuc2NyaXB0aW5nRW5hYmxlZD12YWx1ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU0FYUGFyc2VyLnByb3RvdHlwZSwiZXJyb3JIYW5kbGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Vycm9ySGFuZGxlcn0sc2V0OmZ1bmN0aW9uKHZhbHVlKXt0aGlzLl9lcnJvckhhbmRsZXI9dmFsdWUsdGhpcy5fdHJlZUJ1aWxkZXIuZXJyb3JIYW5kbGVyPXZhbHVlfX0pLGV4cG9ydHMuU0FYUGFyc2VyPVNBWFBhcnNlcn0seyIuLi9Ub2tlbml6ZXIiOjUsIi4vU0FYVHJlZUJ1aWxkZXIiOjEwLCIuL1RyZWVQYXJzZXIiOjExfV0sMTA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe2Z1bmN0aW9uIFNBWFRyZWVCdWlsZGVyKCl7VHJlZUJ1aWxkZXIuY2FsbCh0aGlzKX1mdW5jdGlvbiBnZXRBdHRyaWJ1dGUobm9kZSxuYW1lKXtmb3IodmFyIGk9MDtub2RlLmF0dHJpYnV0ZXMubGVuZ3RoPmk7aSsrKXt2YXIgYXR0cmlidXRlPW5vZGUuYXR0cmlidXRlc1tpXTtpZihhdHRyaWJ1dGUubm9kZU5hbWU9PT1uYW1lKXJldHVybiBhdHRyaWJ1dGUubm9kZVZhbHVlfX1mdW5jdGlvbiBOb2RlKGxvY2F0b3Ipe2xvY2F0b3I/KHRoaXMuY29sdW1uTnVtYmVyPWxvY2F0b3IuY29sdW1uTnVtYmVyLHRoaXMubGluZU51bWJlcj1sb2NhdG9yLmxpbmVOdW1iZXIpOih0aGlzLmNvbHVtbk51bWJlcj0tMSx0aGlzLmxpbmVOdW1iZXI9LTEpLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMubmV4dFNpYmxpbmc9bnVsbCx0aGlzLmZpcnN0Q2hpbGQ9bnVsbH1mdW5jdGlvbiBQYXJlbnROb2RlKGxvY2F0b3Ipe05vZGUuY2FsbCh0aGlzLGxvY2F0b3IpLHRoaXMubGFzdENoaWxkPW51bGwsdGhpcy5fZW5kTG9jYXRvcj1udWxsfWZ1bmN0aW9uIERvY3VtZW50KGxvY2F0b3Ipe1BhcmVudE5vZGUuY2FsbCh0aGlzLGxvY2F0b3IpLHRoaXMubm9kZVR5cGU9Tm9kZVR5cGUuRE9DVU1FTlR9ZnVuY3Rpb24gRG9jdW1lbnRGcmFnbWVudCgpe1BhcmVudE5vZGUuY2FsbCh0aGlzLG5ldyBMb2NhdG9yKSx0aGlzLm5vZGVUeXBlPU5vZGVUeXBlLkRPQ1VNRU5UX0ZSQUdNRU5UfWZ1bmN0aW9uIEVsZW1lbnQobG9jYXRvcix1cmksbG9jYWxOYW1lLHFOYW1lLGF0dHMscHJlZml4TWFwcGluZ3Mpe1BhcmVudE5vZGUuY2FsbCh0aGlzLGxvY2F0b3IpLHRoaXMudXJpPXVyaSx0aGlzLmxvY2FsTmFtZT1sb2NhbE5hbWUsdGhpcy5xTmFtZT1xTmFtZSx0aGlzLmF0dHJpYnV0ZXM9YXR0cyx0aGlzLnByZWZpeE1hcHBpbmdzPXByZWZpeE1hcHBpbmdzLHRoaXMubm9kZVR5cGU9Tm9kZVR5cGUuRUxFTUVOVH1mdW5jdGlvbiBDaGFyYWN0ZXJzKGxvY2F0b3IsZGF0YSl7Tm9kZS5jYWxsKHRoaXMsbG9jYXRvciksdGhpcy5kYXRhPWRhdGEsdGhpcy5ub2RlVHlwZT1Ob2RlVHlwZS5DSEFSQUNURVJTfWZ1bmN0aW9uIElnbm9yYWJsZVdoaXRlc3BhY2UobG9jYXRvcixkYXRhKXtOb2RlLmNhbGwodGhpcyxsb2NhdG9yKSx0aGlzLmRhdGE9ZGF0YSx0aGlzLm5vZGVUeXBlPU5vZGVUeXBlLklHTk9SQUJMRV9XSElURVNQQUNFfWZ1bmN0aW9uIENvbW1lbnQobG9jYXRvcixkYXRhKXtOb2RlLmNhbGwodGhpcyxsb2NhdG9yKSx0aGlzLmRhdGE9ZGF0YSx0aGlzLm5vZGVUeXBlPU5vZGVUeXBlLkNPTU1FTlR9ZnVuY3Rpb24gQ0RBVEEobG9jYXRvcil7UGFyZW50Tm9kZS5jYWxsKHRoaXMsbG9jYXRvciksdGhpcy5ub2RlVHlwZT1Ob2RlVHlwZS5DREFUQX1mdW5jdGlvbiBFbnRpdHkobmFtZSl7UGFyZW50Tm9kZS5jYWxsKHRoaXMpLHRoaXMubmFtZT1uYW1lLHRoaXMubm9kZVR5cGU9Tm9kZVR5cGUuRU5USVRZfWZ1bmN0aW9uIFNraXBwZWRFbnRpdHkobmFtZSl7Tm9kZS5jYWxsKHRoaXMpLHRoaXMubmFtZT1uYW1lLHRoaXMubm9kZVR5cGU9Tm9kZVR5cGUuU0tJUFBFRF9FTlRJVFl9ZnVuY3Rpb24gUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRhcmdldCxkYXRhKXtOb2RlLmNhbGwodGhpcyksdGhpcy50YXJnZXQ9dGFyZ2V0LHRoaXMuZGF0YT1kYXRhfWZ1bmN0aW9uIERURChuYW1lLHB1YmxpY0lkZW50aWZpZXIsc3lzdGVtSWRlbnRpZmllcil7UGFyZW50Tm9kZS5jYWxsKHRoaXMpLHRoaXMubmFtZT1uYW1lLHRoaXMucHVibGljSWRlbnRpZmllcj1wdWJsaWNJZGVudGlmaWVyLHRoaXMuc3lzdGVtSWRlbnRpZmllcj1zeXN0ZW1JZGVudGlmaWVyLHRoaXMubm9kZVR5cGU9Tm9kZVR5cGUuRFREfXZhciB1dGlsPV9kZXJlcV8oInV0aWwiKSxUcmVlQnVpbGRlcj1fZGVyZXFfKCIuLi9UcmVlQnVpbGRlciIpLlRyZWVCdWlsZGVyO3V0aWwuaW5oZXJpdHMoU0FYVHJlZUJ1aWxkZXIsVHJlZUJ1aWxkZXIpLFNBWFRyZWVCdWlsZGVyLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3RoaXMuZG9jdW1lbnQ9bmV3IERvY3VtZW50KHRoaXMudG9rZW5pemVyKX0sU0FYVHJlZUJ1aWxkZXIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3RoaXMuZG9jdW1lbnQuZW5kTG9jYXRvcj10aGlzLnRva2VuaXplcn0sU0FYVHJlZUJ1aWxkZXIucHJvdG90eXBlLmluc2VydERvY3R5cGU9ZnVuY3Rpb24obmFtZSxwdWJsaWNJZCxzeXN0ZW1JZCl7dmFyIGRvY3R5cGU9bmV3IERURCh0aGlzLnRva2VuaXplcixuYW1lLHB1YmxpY0lkLHN5c3RlbUlkKTtkb2N0eXBlLmVuZExvY2F0b3I9dGhpcy50b2tlbml6ZXIsdGhpcy5kb2N1bWVudC5hcHBlbmRDaGlsZChkb2N0eXBlKX0sU0FYVHJlZUJ1aWxkZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24obmFtZXNwYWNlVVJJLGxvY2FsTmFtZSxhdHRyaWJ1dGVzKXt2YXIgZWxlbWVudD1uZXcgRWxlbWVudCh0aGlzLnRva2VuaXplcixuYW1lc3BhY2VVUkksbG9jYWxOYW1lLGxvY2FsTmFtZSxhdHRyaWJ1dGVzfHxbXSk7cmV0dXJuIGVsZW1lbnR9LFNBWFRyZWVCdWlsZGVyLnByb3RvdHlwZS5pbnNlcnRDb21tZW50PWZ1bmN0aW9uKGRhdGEscGFyZW50KXtwYXJlbnR8fChwYXJlbnQ9dGhpcy5jdXJyZW50U3RhY2tJdGVtKCkpO3ZhciBjb21tZW50PW5ldyBDb21tZW50KHRoaXMudG9rZW5pemVyLGRhdGEpO3BhcmVudC5hcHBlbmRDaGlsZChjb21tZW50KX0sU0FYVHJlZUJ1aWxkZXIucHJvdG90eXBlLmFwcGVuZENoYXJhY3RlcnM9ZnVuY3Rpb24ocGFyZW50LGRhdGEpe3ZhciB0ZXh0PW5ldyBDaGFyYWN0ZXJzKHRoaXMudG9rZW5pemVyLGRhdGEpO3BhcmVudC5hcHBlbmRDaGlsZCh0ZXh0KX0sU0FYVHJlZUJ1aWxkZXIucHJvdG90eXBlLmluc2VydFRleHQ9ZnVuY3Rpb24oZGF0YSl7aWYodGhpcy5yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50JiZ0aGlzLm9wZW5FbGVtZW50cy50b3AuaXNGb3N0ZXJQYXJlbnRpbmcoKSl7dmFyIHRhYmxlSW5kZXg9dGhpcy5vcGVuRWxlbWVudHMuZmluZEluZGV4KCJ0YWJsZSIpLHRhYmxlSXRlbT10aGlzLm9wZW5FbGVtZW50cy5pdGVtKHRhYmxlSW5kZXgpLHRhYmxlPXRhYmxlSXRlbS5ub2RlO2lmKDA9PT10YWJsZUluZGV4KXJldHVybiB0aGlzLmFwcGVuZENoYXJhY3RlcnModGFibGUsZGF0YSk7dmFyIHRleHQ9bmV3IENoYXJhY3RlcnModGhpcy50b2tlbml6ZXIsZGF0YSkscGFyZW50PXRhYmxlLnBhcmVudE5vZGU7aWYocGFyZW50KXJldHVybiBwYXJlbnQuaW5zZXJ0QmV0d2Vlbih0ZXh0LHRhYmxlLnByZXZpb3VzU2libGluZyx0YWJsZSksdm9pZCAwO3ZhciBzdGFja1BhcmVudD10aGlzLm9wZW5FbGVtZW50cy5pdGVtKHRhYmxlSW5kZXgtMSkubm9kZTtyZXR1cm4gc3RhY2tQYXJlbnQuYXBwZW5kQ2hpbGQodGV4dCksdm9pZCAwfXRoaXMuYXBwZW5kQ2hhcmFjdGVycyh0aGlzLmN1cnJlbnRTdGFja0l0ZW0oKS5ub2RlLGRhdGEpfSxTQVhUcmVlQnVpbGRlci5wcm90b3R5cGUuYXR0YWNoTm9kZT1mdW5jdGlvbihub2RlLHBhcmVudCl7cGFyZW50LmFwcGVuZENoaWxkKG5vZGUpfSxTQVhUcmVlQnVpbGRlci5wcm90b3R5cGUuYXR0YWNoTm9kZVRvRm9zdGVyUGFyZW50PWZ1bmN0aW9uKGNoaWxkLHRhYmxlLHN0YWNrUGFyZW50KXt2YXIgcGFyZW50PXRhYmxlLnBhcmVudE5vZGU7cGFyZW50P3BhcmVudC5pbnNlcnRCZXR3ZWVuKGNoaWxkLHRhYmxlLnByZXZpb3VzU2libGluZyx0YWJsZSk6c3RhY2tQYXJlbnQuYXBwZW5kQ2hpbGQoY2hpbGQpfSxTQVhUcmVlQnVpbGRlci5wcm90b3R5cGUuZGV0YWNoRnJvbVBhcmVudD1mdW5jdGlvbihlbGVtZW50KXtlbGVtZW50LmRldGFjaCgpfSxTQVhUcmVlQnVpbGRlci5wcm90b3R5cGUucmVwYXJlbnRDaGlsZHJlbj1mdW5jdGlvbihvbGRQYXJlbnQsbmV3UGFyZW50KXtuZXdQYXJlbnQuYXBwZW5kQ2hpbGRyZW4ob2xkUGFyZW50LmZpcnN0Q2hpbGQpfSxTQVhUcmVlQnVpbGRlci5wcm90b3R5cGUuZ2V0RnJhZ21lbnQ9ZnVuY3Rpb24oKXt2YXIgZnJhZ21lbnQ9bmV3IERvY3VtZW50RnJhZ21lbnQ7cmV0dXJuIHRoaXMucmVwYXJlbnRDaGlsZHJlbih0aGlzLm9wZW5FbGVtZW50cy5yb290Tm9kZSxmcmFnbWVudCksZnJhZ21lbnR9LFNBWFRyZWVCdWlsZGVyLnByb3RvdHlwZS5hZGRBdHRyaWJ1dGVzVG9FbGVtZW50PWZ1bmN0aW9uKGVsZW1lbnQsYXR0cmlidXRlcyl7Zm9yKHZhciBpPTA7YXR0cmlidXRlcy5sZW5ndGg+aTtpKyspe3ZhciBhdHRyaWJ1dGU9YXR0cmlidXRlc1tpXTtnZXRBdHRyaWJ1dGUoZWxlbWVudCxhdHRyaWJ1dGUubm9kZU5hbWUpfHxlbGVtZW50LmF0dHJpYnV0ZXMucHVzaChhdHRyaWJ1dGUpfX07dmFyIE5vZGVUeXBlPXtDREFUQToxLENIQVJBQ1RFUlM6MixDT01NRU5UOjMsRE9DVU1FTlQ6NCxET0NVTUVOVF9GUkFHTUVOVDo1LERURDo2LEVMRU1FTlQ6NyxFTlRJVFk6OCxJR05PUkFCTEVfV0hJVEVTUEFDRTo5LFBST0NFU1NJTkdfSU5TVFJVQ1RJT046MTAsU0tJUFBFRF9FTlRJVFk6MTF9O05vZGUucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIk5vdCBJbXBsZW1lbnRlZCIpfSxOb2RlLnByb3RvdHlwZS5yZXZpc2l0PWZ1bmN0aW9uKCl7fSxOb2RlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5wYXJlbnROb2RlJiYodGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpLHRoaXMucGFyZW50Tm9kZT1udWxsKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCJwcmV2aW91c1NpYmxpbmciLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHByZXY9bnVsbCxuZXh0PXRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkOzspe2lmKHRoaXM9PW5leHQpcmV0dXJuIHByZXY7cHJldj1uZXh0LG5leHQ9bmV4dC5uZXh0U2libGluZ319fSksUGFyZW50Tm9kZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOb2RlLnByb3RvdHlwZSksUGFyZW50Tm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGNoaWxkLHNpYmxpbmcpe2lmKCFzaWJsaW5nKXJldHVybiB0aGlzLmFwcGVuZENoaWxkKGNoaWxkKTtpZihjaGlsZC5kZXRhY2goKSxjaGlsZC5wYXJlbnROb2RlPXRoaXMsdGhpcy5maXJzdENoaWxkPT1zaWJsaW5nKWNoaWxkLm5leHRTaWJsaW5nPXNpYmxpbmcsdGhpcy5maXJzdENoaWxkPWNoaWxkO2Vsc2V7Zm9yKHZhciBwcmV2PXRoaXMuZmlyc3RDaGlsZCxuZXh0PXRoaXMuZmlyc3RDaGlsZC5uZXh0U2libGluZztuZXh0IT1zaWJsaW5nOylwcmV2PW5leHQsbmV4dD1uZXh0Lm5leHRTaWJsaW5nO3ByZXYubmV4dFNpYmxpbmc9Y2hpbGQsY2hpbGQubmV4dFNpYmxpbmc9bmV4dH1yZXR1cm4gY2hpbGR9LFBhcmVudE5vZGUucHJvdG90eXBlLmluc2VydEJldHdlZW49ZnVuY3Rpb24oY2hpbGQscHJldixuZXh0KXtyZXR1cm4gbmV4dD8oY2hpbGQuZGV0YWNoKCksY2hpbGQucGFyZW50Tm9kZT10aGlzLGNoaWxkLm5leHRTaWJsaW5nPW5leHQscHJldj9wcmV2Lm5leHRTaWJsaW5nPWNoaWxkOmZpcnN0Q2hpbGQ9Y2hpbGQsY2hpbGQpOnRoaXMuYXBwZW5kQ2hpbGQoY2hpbGQpfSxQYXJlbnROb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbihjaGlsZCl7cmV0dXJuIGNoaWxkLmRldGFjaCgpLGNoaWxkLnBhcmVudE5vZGU9dGhpcyx0aGlzLmZpcnN0Q2hpbGQ/dGhpcy5sYXN0Q2hpbGQubmV4dFNpYmxpbmc9Y2hpbGQ6dGhpcy5maXJzdENoaWxkPWNoaWxkLHRoaXMubGFzdENoaWxkPWNoaWxkLGNoaWxkfSxQYXJlbnROb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZHJlbj1mdW5jdGlvbihwYXJlbnQpe3ZhciBjaGlsZD1wYXJlbnQuZmlyc3RDaGlsZDtpZihjaGlsZCl7dmFyIGFub3RoZXI9cGFyZW50O3RoaXMuZmlyc3RDaGlsZD90aGlzLmxhc3RDaGlsZC5uZXh0U2libGluZz1jaGlsZDp0aGlzLmZpcnN0Q2hpbGQ9Y2hpbGQsdGhpcy5sYXN0Q2hpbGQ9YW5vdGhlci5sYXN0Q2hpbGQ7ZG8gY2hpbGQucGFyZW50Tm9kZT10aGlzO3doaWxlKGNoaWxkPWNoaWxkLm5leHRTaWJsaW5nKTthbm90aGVyLmZpcnN0Q2hpbGQ9bnVsbCxhbm90aGVyLmxhc3RDaGlsZD1udWxsfX0sUGFyZW50Tm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24obm9kZSl7aWYodGhpcy5maXJzdENoaWxkPT1ub2RlKXRoaXMuZmlyc3RDaGlsZD1ub2RlLm5leHRTaWJsaW5nLHRoaXMubGFzdENoaWxkPT1ub2RlJiYodGhpcy5sYXN0Q2hpbGQ9bnVsbCk7ZWxzZXtmb3IodmFyIHByZXY9dGhpcy5maXJzdENoaWxkLG5leHQ9dGhpcy5maXJzdENoaWxkLm5leHRTaWJsaW5nO25leHQhPW5vZGU7KXByZXY9bmV4dCxuZXh0PW5leHQubmV4dFNpYmxpbmc7cHJldi5uZXh0U2libGluZz1ub2RlLm5leHRTaWJsaW5nLHRoaXMubGFzdENoaWxkPT1ub2RlJiYodGhpcy5sYXN0Q2hpbGQ9cHJldil9cmV0dXJuIG5vZGUucGFyZW50Tm9kZT1udWxsLG5vZGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYXJlbnROb2RlLnByb3RvdHlwZSwiZW5kTG9jYXRvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmRMb2NhdG9yfSxzZXQ6ZnVuY3Rpb24oZW5kTG9jYXRvcil7dGhpcy5fZW5kTG9jYXRvcj17bGluZU51bWJlcjplbmRMb2NhdG9yLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOmVuZExvY2F0b3IuY29sdW1uTnVtYmVyfX19KSxEb2N1bWVudC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShQYXJlbnROb2RlLnByb3RvdHlwZSksRG9jdW1lbnQucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKHRyZWVQYXJzZXIpe3RyZWVQYXJzZXIuc3RhcnREb2N1bWVudCh0aGlzKX0sRG9jdW1lbnQucHJvdG90eXBlLnJldmlzaXQ9ZnVuY3Rpb24odHJlZVBhcnNlcil7dHJlZVBhcnNlci5lbmREb2N1bWVudCh0aGlzLmVuZExvY2F0b3IpfSxEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFBhcmVudE5vZGUucHJvdG90eXBlKSxEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS52aXNpdD1mdW5jdGlvbigpe30sRWxlbWVudC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShQYXJlbnROb2RlLnByb3RvdHlwZSksRWxlbWVudC5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24odHJlZVBhcnNlcil7aWYodGhpcy5wcmVmaXhNYXBwaW5ncylmb3IodmFyIGtleSBpbiBwcmVmaXhNYXBwaW5ncyl7dmFyIG1hcHBpbmc9cHJlZml4TWFwcGluZ3Nba2V5XTt0cmVlUGFyc2VyLnN0YXJ0UHJlZml4TWFwcGluZyhtYXBwaW5nLmdldFByZWZpeCgpLG1hcHBpbmcuZ2V0VXJpKCksdGhpcyl9dHJlZVBhcnNlci5zdGFydEVsZW1lbnQodGhpcy51cmksdGhpcy5sb2NhbE5hbWUsdGhpcy5xTmFtZSx0aGlzLmF0dHJpYnV0ZXMsdGhpcyl9LEVsZW1lbnQucHJvdG90eXBlLnJldmlzaXQ9ZnVuY3Rpb24odHJlZVBhcnNlcil7aWYodHJlZVBhcnNlci5lbmRFbGVtZW50KHRoaXMudXJpLHRoaXMubG9jYWxOYW1lLHRoaXMucU5hbWUsdGhpcy5lbmRMb2NhdG9yKSx0aGlzLnByZWZpeE1hcHBpbmdzKWZvcih2YXIga2V5IGluIHByZWZpeE1hcHBpbmdzKXt2YXIgbWFwcGluZz1wcmVmaXhNYXBwaW5nc1trZXldO3RyZWVQYXJzZXIuZW5kUHJlZml4TWFwcGluZyhtYXBwaW5nLmdldFByZWZpeCgpLHRoaXMuZW5kTG9jYXRvcil9fSxDaGFyYWN0ZXJzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE5vZGUucHJvdG90eXBlKSxDaGFyYWN0ZXJzLnByb3RvdHlwZS52aXNpdD1mdW5jdGlvbih0cmVlUGFyc2VyKXt0cmVlUGFyc2VyLmNoYXJhY3RlcnModGhpcy5kYXRhLDAsdGhpcy5kYXRhLmxlbmd0aCx0aGlzKX0sSWdub3JhYmxlV2hpdGVzcGFjZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOb2RlLnByb3RvdHlwZSksSWdub3JhYmxlV2hpdGVzcGFjZS5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24odHJlZVBhcnNlcil7dHJlZVBhcnNlci5pZ25vcmFibGVXaGl0ZXNwYWNlKHRoaXMuZGF0YSwwLHRoaXMuZGF0YS5sZW5ndGgsdGhpcyl9LENvbW1lbnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTm9kZS5wcm90b3R5cGUpLENvbW1lbnQucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKHRyZWVQYXJzZXIpe3RyZWVQYXJzZXIuY29tbWVudCh0aGlzLmRhdGEsMCx0aGlzLmRhdGEubGVuZ3RoLHRoaXMpfSxDREFUQS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShQYXJlbnROb2RlLnByb3RvdHlwZSksQ0RBVEEucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKHRyZWVQYXJzZXIpe3RyZWVQYXJzZXIuc3RhcnRDREFUQSh0aGlzKX0sQ0RBVEEucHJvdG90eXBlLnJldmlzaXQ9ZnVuY3Rpb24odHJlZVBhcnNlcil7dHJlZVBhcnNlci5lbmRDREFUQSh0aGlzLmVuZExvY2F0b3IpfSxFbnRpdHkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUGFyZW50Tm9kZS5wcm90b3R5cGUpLEVudGl0eS5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24odHJlZVBhcnNlcil7dHJlZVBhcnNlci5zdGFydEVudGl0eSh0aGlzLm5hbWUsdGhpcyl9LEVudGl0eS5wcm90b3R5cGUucmV2aXNpdD1mdW5jdGlvbih0cmVlUGFyc2VyKXt0cmVlUGFyc2VyLmVuZEVudGl0eSh0aGlzLm5hbWUpfSxTa2lwcGVkRW50aXR5LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE5vZGUucHJvdG90eXBlKSxTa2lwcGVkRW50aXR5LnByb3RvdHlwZS52aXNpdD1mdW5jdGlvbih0cmVlUGFyc2VyKXt0cmVlUGFyc2VyLnNraXBwZWRFbnRpdHkodGhpcy5uYW1lLHRoaXMpfSxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTm9kZS5wcm90b3R5cGUpLFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24odHJlZVBhcnNlcil7dHJlZVBhcnNlci5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGhpcy50YXJnZXQsdGhpcy5kYXRhLHRoaXMpfSxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLmdldE5vZGVUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIE5vZGVUeXBlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT059LERURC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShQYXJlbnROb2RlLnByb3RvdHlwZSksRFRELnByb3RvdHlwZS52aXNpdD1mdW5jdGlvbih0cmVlUGFyc2VyKXt0cmVlUGFyc2VyLnN0YXJ0RFREKHRoaXMubmFtZSx0aGlzLnB1YmxpY0lkZW50aWZpZXIsdGhpcy5zeXN0ZW1JZGVudGlmaWVyLHRoaXMpfSxEVEQucHJvdG90eXBlLnJldmlzaXQ9ZnVuY3Rpb24odHJlZVBhcnNlcil7dHJlZVBhcnNlci5lbmREVEQoKX0sZXhwb3J0cy5TQVhUcmVlQnVpbGRlcj1TQVhUcmVlQnVpbGRlcn0seyIuLi9UcmVlQnVpbGRlciI6Nix1dGlsOjIwfV0sMTE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe2Z1bmN0aW9uIFRyZWVQYXJzZXIoY29udGVudEhhbmRsZXIsbGV4aWNhbEhhbmRsZXIpe2lmKHRoaXMuY29udGVudEhhbmRsZXIsdGhpcy5sZXhpY2FsSGFuZGxlcix0aGlzLmxvY2F0b3JEZWxlZ2F0ZSwhY29udGVudEhhbmRsZXIpdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29udGVudEhhbmRsZXIgd2FzIG51bGwuIik7dGhpcy5jb250ZW50SGFuZGxlcj1jb250ZW50SGFuZGxlcix0aGlzLmxleGljYWxIYW5kbGVyPWxleGljYWxIYW5kbGVyP2xleGljYWxIYW5kbGVyOm5ldyBOdWxsTGV4aWNhbEhhbmRsZXJ9ZnVuY3Rpb24gTnVsbExleGljYWxIYW5kbGVyKCl7fVRyZWVQYXJzZXIucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKG5vZGUpe3RoaXMuY29udGVudEhhbmRsZXIuZG9jdW1lbnRMb2NhdG9yPXRoaXM7Zm9yKHZhciBuZXh0LGN1cnJlbnQ9bm9kZTs7KWlmKGN1cnJlbnQudmlzaXQodGhpcyksbmV4dD1jdXJyZW50LmZpcnN0Q2hpbGQpY3VycmVudD1uZXh0O2Vsc2UgZm9yKDs7KXtpZihjdXJyZW50LnJldmlzaXQodGhpcyksY3VycmVudD09bm9kZSlyZXR1cm47aWYobmV4dD1jdXJyZW50Lm5leHRTaWJsaW5nKXtjdXJyZW50PW5leHQ7YnJlYWt9Y3VycmVudD1jdXJyZW50LnBhcmVudE5vZGV9fSxUcmVlUGFyc2VyLnByb3RvdHlwZS5jaGFyYWN0ZXJzPWZ1bmN0aW9uKGNoLHN0YXJ0LGxlbmd0aCxsb2NhdG9yKXt0aGlzLmxvY2F0b3JEZWxlZ2F0ZT1sb2NhdG9yLHRoaXMuY29udGVudEhhbmRsZXIuY2hhcmFjdGVycyhjaCxzdGFydCxsZW5ndGgpfSxUcmVlUGFyc2VyLnByb3RvdHlwZS5lbmREb2N1bWVudD1mdW5jdGlvbihsb2NhdG9yKXt0aGlzLmxvY2F0b3JEZWxlZ2F0ZT1sb2NhdG9yLHRoaXMuY29udGVudEhhbmRsZXIuZW5kRG9jdW1lbnQoKX0sVHJlZVBhcnNlci5wcm90b3R5cGUuZW5kRWxlbWVudD1mdW5jdGlvbih1cmksbG9jYWxOYW1lLHFOYW1lLGxvY2F0b3Ipe3RoaXMubG9jYXRvckRlbGVnYXRlPWxvY2F0b3IsdGhpcy5jb250ZW50SGFuZGxlci5lbmRFbGVtZW50KHVyaSxsb2NhbE5hbWUscU5hbWUpfSxUcmVlUGFyc2VyLnByb3RvdHlwZS5lbmRQcmVmaXhNYXBwaW5nPWZ1bmN0aW9uKHByZWZpeCxsb2NhdG9yKXt0aGlzLmxvY2F0b3JEZWxlZ2F0ZT1sb2NhdG9yLHRoaXMuY29udGVudEhhbmRsZXIuZW5kUHJlZml4TWFwcGluZyhwcmVmaXgpfSxUcmVlUGFyc2VyLnByb3RvdHlwZS5pZ25vcmFibGVXaGl0ZXNwYWNlPWZ1bmN0aW9uKGNoLHN0YXJ0LGxlbmd0aCxsb2NhdG9yKXt0aGlzLmxvY2F0b3JEZWxlZ2F0ZT1sb2NhdG9yLHRoaXMuY29udGVudEhhbmRsZXIuaWdub3JhYmxlV2hpdGVzcGFjZShjaCxzdGFydCxsZW5ndGgpfSxUcmVlUGFyc2VyLnByb3RvdHlwZS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb249ZnVuY3Rpb24odGFyZ2V0LGRhdGEsbG9jYXRvcil7dGhpcy5sb2NhdG9yRGVsZWdhdGU9bG9jYXRvcix0aGlzLmNvbnRlbnRIYW5kbGVyLnByb2Nlc3NpbmdJbnN0cnVjdGlvbih0YXJnZXQsZGF0YSl9LFRyZWVQYXJzZXIucHJvdG90eXBlLnNraXBwZWRFbnRpdHk9ZnVuY3Rpb24obmFtZSxsb2NhdG9yKXt0aGlzLmxvY2F0b3JEZWxlZ2F0ZT1sb2NhdG9yLHRoaXMuY29udGVudEhhbmRsZXIuc2tpcHBlZEVudGl0eShuYW1lKX0sVHJlZVBhcnNlci5wcm90b3R5cGUuc3RhcnREb2N1bWVudD1mdW5jdGlvbihsb2NhdG9yKXt0aGlzLmxvY2F0b3JEZWxlZ2F0ZT1sb2NhdG9yLHRoaXMuY29udGVudEhhbmRsZXIuc3RhcnREb2N1bWVudCgpfSxUcmVlUGFyc2VyLnByb3RvdHlwZS5zdGFydEVsZW1lbnQ9ZnVuY3Rpb24odXJpLGxvY2FsTmFtZSxxTmFtZSxhdHRzLGxvY2F0b3Ipe3RoaXMubG9jYXRvckRlbGVnYXRlPWxvY2F0b3IsdGhpcy5jb250ZW50SGFuZGxlci5zdGFydEVsZW1lbnQodXJpLGxvY2FsTmFtZSxxTmFtZSxhdHRzKX0sVHJlZVBhcnNlci5wcm90b3R5cGUuc3RhcnRQcmVmaXhNYXBwaW5nPWZ1bmN0aW9uKHByZWZpeCx1cmksbG9jYXRvcil7dGhpcy5sb2NhdG9yRGVsZWdhdGU9bG9jYXRvcix0aGlzLmNvbnRlbnRIYW5kbGVyLnN0YXJ0UHJlZml4TWFwcGluZyhwcmVmaXgsdXJpKX0sVHJlZVBhcnNlci5wcm90b3R5cGUuY29tbWVudD1mdW5jdGlvbihjaCxzdGFydCxsZW5ndGgsbG9jYXRvcil7dGhpcy5sb2NhdG9yRGVsZWdhdGU9bG9jYXRvcix0aGlzLmxleGljYWxIYW5kbGVyLmNvbW1lbnQoY2gsc3RhcnQsbGVuZ3RoKX0sVHJlZVBhcnNlci5wcm90b3R5cGUuZW5kQ0RBVEE9ZnVuY3Rpb24obG9jYXRvcil7dGhpcy5sb2NhdG9yRGVsZWdhdGU9bG9jYXRvcix0aGlzLmxleGljYWxIYW5kbGVyLmVuZENEQVRBKCl9LFRyZWVQYXJzZXIucHJvdG90eXBlLmVuZERURD1mdW5jdGlvbihsb2NhdG9yKXt0aGlzLmxvY2F0b3JEZWxlZ2F0ZT1sb2NhdG9yLHRoaXMubGV4aWNhbEhhbmRsZXIuZW5kRFREKCl9LFRyZWVQYXJzZXIucHJvdG90eXBlLmVuZEVudGl0eT1mdW5jdGlvbihuYW1lLGxvY2F0b3Ipe3RoaXMubG9jYXRvckRlbGVnYXRlPWxvY2F0b3IsdGhpcy5sZXhpY2FsSGFuZGxlci5lbmRFbnRpdHkobmFtZSl9LFRyZWVQYXJzZXIucHJvdG90eXBlLnN0YXJ0Q0RBVEE9ZnVuY3Rpb24obG9jYXRvcil7dGhpcy5sb2NhdG9yRGVsZWdhdGU9bG9jYXRvcix0aGlzLmxleGljYWxIYW5kbGVyLnN0YXJ0Q0RBVEEoKX0sVHJlZVBhcnNlci5wcm90b3R5cGUuc3RhcnREVEQ9ZnVuY3Rpb24obmFtZSxwdWJsaWNJZCxzeXN0ZW1JZCxsb2NhdG9yKXt0aGlzLmxvY2F0b3JEZWxlZ2F0ZT1sb2NhdG9yLHRoaXMubGV4aWNhbEhhbmRsZXIuc3RhcnREVEQobmFtZSxwdWJsaWNJZCxzeXN0ZW1JZCl9LFRyZWVQYXJzZXIucHJvdG90eXBlLnN0YXJ0RW50aXR5PWZ1bmN0aW9uKG5hbWUsbG9jYXRvcil7dGhpcy5sb2NhdG9yRGVsZWdhdGU9bG9jYXRvcix0aGlzLmxleGljYWxIYW5kbGVyLnN0YXJ0RW50aXR5KG5hbWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJlZVBhcnNlci5wcm90b3R5cGUsImNvbHVtbk51bWJlciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2F0b3JEZWxlZ2F0ZT90aGlzLmxvY2F0b3JEZWxlZ2F0ZS5jb2x1bW5OdW1iZXI6LTF9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyZWVQYXJzZXIucHJvdG90eXBlLCJsaW5lTnVtYmVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRvckRlbGVnYXRlP3RoaXMubG9jYXRvckRlbGVnYXRlLmxpbmVOdW1iZXI6LTF9fSksTnVsbExleGljYWxIYW5kbGVyLnByb3RvdHlwZS5jb21tZW50PWZ1bmN0aW9uKCl7fSxOdWxsTGV4aWNhbEhhbmRsZXIucHJvdG90eXBlLmVuZENEQVRBPWZ1bmN0aW9uKCl7fSxOdWxsTGV4aWNhbEhhbmRsZXIucHJvdG90eXBlLmVuZERURD1mdW5jdGlvbigpe30sTnVsbExleGljYWxIYW5kbGVyLnByb3RvdHlwZS5lbmRFbnRpdHk9ZnVuY3Rpb24oKXt9LE51bGxMZXhpY2FsSGFuZGxlci5wcm90b3R5cGUuc3RhcnRDREFUQT1mdW5jdGlvbigpe30sTnVsbExleGljYWxIYW5kbGVyLnByb3RvdHlwZS5zdGFydERURD1mdW5jdGlvbigpe30sTnVsbExleGljYWxIYW5kbGVyLnByb3RvdHlwZS5zdGFydEVudGl0eT1mdW5jdGlvbigpe30sZXhwb3J0cy5UcmVlUGFyc2VyPVRyZWVQYXJzZXJ9LHt9XSwxMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUpe21vZHVsZS5leHBvcnRzPXsiQWFjdXRlOyI6IsOBIixBYWN1dGU6IsOBIiwiYWFjdXRlOyI6IsOhIixhYWN1dGU6IsOhIiwiQWJyZXZlOyI6IsSCIiwiYWJyZXZlOyI6IsSDIiwiYWM7Ijoi4oi+IiwiYWNkOyI6IuKIvyIsImFjRTsiOiLiiL7MsyIsIkFjaXJjOyI6IsOCIixBY2lyYzoiw4IiLCJhY2lyYzsiOiLDoiIsYWNpcmM6IsOiIiwiYWN1dGU7IjoiwrQiLGFjdXRlOiLCtCIsIkFjeTsiOiLQkCIsImFjeTsiOiLQsCIsIkFFbGlnOyI6IsOGIixBRWxpZzoiw4YiLCJhZWxpZzsiOiLDpiIsYWVsaWc6IsOmIiwiYWY7Ijoi4oGhIiwiQWZyOyI6IvCdlIQiLCJhZnI7Ijoi8J2UniIsIkFncmF2ZTsiOiLDgCIsQWdyYXZlOiLDgCIsImFncmF2ZTsiOiLDoCIsYWdyYXZlOiLDoCIsImFsZWZzeW07Ijoi4oS1IiwiYWxlcGg7Ijoi4oS1IiwiQWxwaGE7IjoizpEiLCJhbHBoYTsiOiLOsSIsIkFtYWNyOyI6IsSAIiwiYW1hY3I7IjoixIEiLCJhbWFsZzsiOiLiqL8iLCJhbXA7IjoiJiIsYW1wOiImIiwiQU1QOyI6IiYiLEFNUDoiJiIsImFuZGFuZDsiOiLiqZUiLCJBbmQ7Ijoi4qmTIiwiYW5kOyI6IuKIpyIsImFuZGQ7Ijoi4qmcIiwiYW5kc2xvcGU7Ijoi4qmYIiwiYW5kdjsiOiLiqZoiLCJhbmc7Ijoi4oigIiwiYW5nZTsiOiLipqQiLCJhbmdsZTsiOiLiiKAiLCJhbmdtc2RhYTsiOiLipqgiLCJhbmdtc2RhYjsiOiLipqkiLCJhbmdtc2RhYzsiOiLipqoiLCJhbmdtc2RhZDsiOiLipqsiLCJhbmdtc2RhZTsiOiLipqwiLCJhbmdtc2RhZjsiOiLipq0iLCJhbmdtc2RhZzsiOiLipq4iLCJhbmdtc2RhaDsiOiLipq8iLCJhbmdtc2Q7Ijoi4oihIiwiYW5ncnQ7Ijoi4oifIiwiYW5ncnR2YjsiOiLiir4iLCJhbmdydHZiZDsiOiLipp0iLCJhbmdzcGg7Ijoi4oiiIiwiYW5nc3Q7Ijoiw4UiLCJhbmd6YXJyOyI6IuKNvCIsIkFvZ29uOyI6IsSEIiwiYW9nb247IjoixIUiLCJBb3BmOyI6IvCdlLgiLCJhb3BmOyI6IvCdlZIiLCJhcGFjaXI7Ijoi4qmvIiwiYXA7Ijoi4omIIiwiYXBFOyI6IuKpsCIsImFwZTsiOiLiiYoiLCJhcGlkOyI6IuKJiyIsImFwb3M7IjoiXCciLCJBcHBseUZ1bmN0aW9uOyI6IuKBoSIsImFwcHJveDsiOiLiiYgiLCJhcHByb3hlcTsiOiLiiYoiLCJBcmluZzsiOiLDhSIsQXJpbmc6IsOFIiwiYXJpbmc7Ijoiw6UiLGFyaW5nOiLDpSIsIkFzY3I7Ijoi8J2SnCIsImFzY3I7Ijoi8J2StiIsIkFzc2lnbjsiOiLiiZQiLCJhc3Q7IjoiKiIsImFzeW1wOyI6IuKJiCIsImFzeW1wZXE7Ijoi4omNIiwiQXRpbGRlOyI6IsODIixBdGlsZGU6IsODIiwiYXRpbGRlOyI6IsOjIixhdGlsZGU6IsOjIiwiQXVtbDsiOiLDhCIsQXVtbDoiw4QiLCJhdW1sOyI6IsOkIixhdW1sOiLDpCIsImF3Y29uaW50OyI6IuKIsyIsImF3aW50OyI6IuKokSIsImJhY2tjb25nOyI6IuKJjCIsImJhY2tlcHNpbG9uOyI6Is+2IiwiYmFja3ByaW1lOyI6IuKAtSIsImJhY2tzaW07Ijoi4oi9IiwiYmFja3NpbWVxOyI6IuKLjSIsIkJhY2tzbGFzaDsiOiLiiJYiLCJCYXJ2OyI6IuKrpyIsImJhcnZlZTsiOiLiir0iLCJiYXJ3ZWQ7Ijoi4oyFIiwiQmFyd2VkOyI6IuKMhiIsImJhcndlZGdlOyI6IuKMhSIsImJicms7Ijoi4o61IiwiYmJya3Ricms7Ijoi4o62IiwiYmNvbmc7Ijoi4omMIiwiQmN5OyI6ItCRIiwiYmN5OyI6ItCxIiwiYmRxdW87Ijoi4oCeIiwiYmVjYXVzOyI6IuKItSIsImJlY2F1c2U7Ijoi4oi1IiwiQmVjYXVzZTsiOiLiiLUiLCJiZW1wdHl2OyI6IuKmsCIsImJlcHNpOyI6Is+2IiwiYmVybm91OyI6IuKErCIsIkJlcm5vdWxsaXM7Ijoi4oSsIiwiQmV0YTsiOiLOkiIsImJldGE7IjoizrIiLCJiZXRoOyI6IuKEtiIsImJldHdlZW47Ijoi4omsIiwiQmZyOyI6IvCdlIUiLCJiZnI7Ijoi8J2UnyIsImJpZ2NhcDsiOiLii4IiLCJiaWdjaXJjOyI6IuKXryIsImJpZ2N1cDsiOiLii4MiLCJiaWdvZG90OyI6IuKogCIsImJpZ29wbHVzOyI6IuKogSIsImJpZ290aW1lczsiOiLiqIIiLCJiaWdzcWN1cDsiOiLiqIYiLCJiaWdzdGFyOyI6IuKYhSIsImJpZ3RyaWFuZ2xlZG93bjsiOiLilr0iLCJiaWd0cmlhbmdsZXVwOyI6IuKWsyIsImJpZ3VwbHVzOyI6IuKohCIsImJpZ3ZlZTsiOiLii4EiLCJiaWd3ZWRnZTsiOiLii4AiLCJia2Fyb3c7Ijoi4qSNIiwiYmxhY2tsb3plbmdlOyI6IuKnqyIsImJsYWNrc3F1YXJlOyI6IuKWqiIsImJsYWNrdHJpYW5nbGU7Ijoi4pa0IiwiYmxhY2t0cmlhbmdsZWRvd247Ijoi4pa+IiwiYmxhY2t0cmlhbmdsZWxlZnQ7Ijoi4peCIiwiYmxhY2t0cmlhbmdsZXJpZ2h0OyI6IuKWuCIsImJsYW5rOyI6IuKQoyIsImJsazEyOyI6IuKWkiIsImJsazE0OyI6IuKWkSIsImJsazM0OyI6IuKWkyIsImJsb2NrOyI6IuKWiCIsImJuZTsiOiI94oOlIiwiYm5lcXVpdjsiOiLiiaHig6UiLCJiTm90OyI6IuKrrSIsImJub3Q7Ijoi4oyQIiwiQm9wZjsiOiLwnZS5IiwiYm9wZjsiOiLwnZWTIiwiYm90OyI6IuKKpSIsImJvdHRvbTsiOiLiiqUiLCJib3d0aWU7Ijoi4ouIIiwiYm94Ym94OyI6IuKniSIsImJveGRsOyI6IuKUkCIsImJveGRMOyI6IuKVlSIsImJveERsOyI6IuKVliIsImJveERMOyI6IuKVlyIsImJveGRyOyI6IuKUjCIsImJveGRSOyI6IuKVkiIsImJveERyOyI6IuKVkyIsImJveERSOyI6IuKVlCIsImJveGg7Ijoi4pSAIiwiYm94SDsiOiLilZAiLCJib3hoZDsiOiLilKwiLCJib3hIZDsiOiLilaQiLCJib3hoRDsiOiLilaUiLCJib3hIRDsiOiLilaYiLCJib3hodTsiOiLilLQiLCJib3hIdTsiOiLilaciLCJib3hoVTsiOiLilagiLCJib3hIVTsiOiLilakiLCJib3htaW51czsiOiLiip8iLCJib3hwbHVzOyI6IuKKniIsImJveHRpbWVzOyI6IuKKoCIsImJveHVsOyI6IuKUmCIsImJveHVMOyI6IuKVmyIsImJveFVsOyI6IuKVnCIsImJveFVMOyI6IuKVnSIsImJveHVyOyI6IuKUlCIsImJveHVSOyI6IuKVmCIsImJveFVyOyI6IuKVmSIsImJveFVSOyI6IuKVmiIsImJveHY7Ijoi4pSCIiwiYm94VjsiOiLilZEiLCJib3h2aDsiOiLilLwiLCJib3h2SDsiOiLilaoiLCJib3hWaDsiOiLilasiLCJib3hWSDsiOiLilawiLCJib3h2bDsiOiLilKQiLCJib3h2TDsiOiLilaEiLCJib3hWbDsiOiLilaIiLCJib3hWTDsiOiLilaMiLCJib3h2cjsiOiLilJwiLCJib3h2UjsiOiLilZ4iLCJib3hWcjsiOiLilZ8iLCJib3hWUjsiOiLilaAiLCJicHJpbWU7Ijoi4oC1IiwiYnJldmU7Ijoiy5giLCJCcmV2ZTsiOiLLmCIsImJydmJhcjsiOiLCpiIsYnJ2YmFyOiLCpiIsImJzY3I7Ijoi8J2StyIsIkJzY3I7Ijoi4oSsIiwiYnNlbWk7Ijoi4oGPIiwiYnNpbTsiOiLiiL0iLCJic2ltZTsiOiLii40iLCJic29sYjsiOiLip4UiLCJic29sOyI6IlxcXFwiLCJic29saHN1YjsiOiLin4giLCJidWxsOyI6IuKAoiIsImJ1bGxldDsiOiLigKIiLCJidW1wOyI6IuKJjiIsImJ1bXBFOyI6IuKqriIsImJ1bXBlOyI6IuKJjyIsIkJ1bXBlcTsiOiLiiY4iLCJidW1wZXE7Ijoi4omPIiwiQ2FjdXRlOyI6IsSGIiwiY2FjdXRlOyI6IsSHIiwiY2FwYW5kOyI6IuKphCIsImNhcGJyY3VwOyI6IuKpiSIsImNhcGNhcDsiOiLiqYsiLCJjYXA7Ijoi4oipIiwiQ2FwOyI6IuKLkiIsImNhcGN1cDsiOiLiqYciLCJjYXBkb3Q7Ijoi4qmAIiwiQ2FwaXRhbERpZmZlcmVudGlhbEQ7Ijoi4oWFIiwiY2FwczsiOiLiiKnvuIAiLCJjYXJldDsiOiLigYEiLCJjYXJvbjsiOiLLhyIsIkNheWxleXM7Ijoi4oStIiwiY2NhcHM7Ijoi4qmNIiwiQ2Nhcm9uOyI6IsSMIiwiY2Nhcm9uOyI6IsSNIiwiQ2NlZGlsOyI6IsOHIixDY2VkaWw6IsOHIiwiY2NlZGlsOyI6IsOnIixjY2VkaWw6IsOnIiwiQ2NpcmM7IjoixIgiLCJjY2lyYzsiOiLEiSIsIkNjb25pbnQ7Ijoi4oiwIiwiY2N1cHM7Ijoi4qmMIiwiY2N1cHNzbTsiOiLiqZAiLCJDZG90OyI6IsSKIiwiY2RvdDsiOiLEiyIsImNlZGlsOyI6IsK4IixjZWRpbDoiwrgiLCJDZWRpbGxhOyI6IsK4IiwiY2VtcHR5djsiOiLiprIiLCJjZW50OyI6IsKiIixjZW50OiLCoiIsImNlbnRlcmRvdDsiOiLCtyIsIkNlbnRlckRvdDsiOiLCtyIsImNmcjsiOiLwnZSgIiwiQ2ZyOyI6IuKErSIsIkNIY3k7Ijoi0KciLCJjaGN5OyI6ItGHIiwiY2hlY2s7Ijoi4pyTIiwiY2hlY2ttYXJrOyI6IuKckyIsIkNoaTsiOiLOpyIsImNoaTsiOiLPhyIsImNpcmM7Ijoiy4YiLCJjaXJjZXE7Ijoi4omXIiwiY2lyY2xlYXJyb3dsZWZ0OyI6IuKGuiIsImNpcmNsZWFycm93cmlnaHQ7Ijoi4oa7IiwiY2lyY2xlZGFzdDsiOiLiipsiLCJjaXJjbGVkY2lyYzsiOiLiipoiLCJjaXJjbGVkZGFzaDsiOiLiip0iLCJDaXJjbGVEb3Q7Ijoi4oqZIiwiY2lyY2xlZFI7Ijoiwq4iLCJjaXJjbGVkUzsiOiLik4giLCJDaXJjbGVNaW51czsiOiLiipYiLCJDaXJjbGVQbHVzOyI6IuKKlSIsIkNpcmNsZVRpbWVzOyI6IuKKlyIsImNpcjsiOiLil4siLCJjaXJFOyI6IuKngyIsImNpcmU7Ijoi4omXIiwiY2lyZm5pbnQ7Ijoi4qiQIiwiY2lybWlkOyI6IuKrryIsImNpcnNjaXI7Ijoi4qeCIiwiQ2xvY2t3aXNlQ29udG91ckludGVncmFsOyI6IuKIsiIsIkNsb3NlQ3VybHlEb3VibGVRdW90ZTsiOiLigJ0iLCJDbG9zZUN1cmx5UXVvdGU7Ijoi4oCZIiwiY2x1YnM7Ijoi4pmjIiwiY2x1YnN1aXQ7Ijoi4pmjIiwiY29sb247IjoiOiIsIkNvbG9uOyI6IuKItyIsIkNvbG9uZTsiOiLiqbQiLCJjb2xvbmU7Ijoi4omUIiwiY29sb25lcTsiOiLiiZQiLCJjb21tYTsiOiIsIiwiY29tbWF0OyI6IkAiLCJjb21wOyI6IuKIgSIsImNvbXBmbjsiOiLiiJgiLCJjb21wbGVtZW50OyI6IuKIgSIsImNvbXBsZXhlczsiOiLihIIiLCJjb25nOyI6IuKJhSIsImNvbmdkb3Q7Ijoi4qmtIiwiQ29uZ3J1ZW50OyI6IuKJoSIsImNvbmludDsiOiLiiK4iLCJDb25pbnQ7Ijoi4oivIiwiQ29udG91ckludGVncmFsOyI6IuKIriIsImNvcGY7Ijoi8J2VlCIsIkNvcGY7Ijoi4oSCIiwiY29wcm9kOyI6IuKIkCIsIkNvcHJvZHVjdDsiOiLiiJAiLCJjb3B5OyI6IsKpIixjb3B5OiLCqSIsIkNPUFk7IjoiwqkiLENPUFk6IsKpIiwiY29weXNyOyI6IuKElyIsIkNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw7Ijoi4oizIiwiY3JhcnI7Ijoi4oa1IiwiY3Jvc3M7Ijoi4pyXIiwiQ3Jvc3M7Ijoi4qivIiwiQ3NjcjsiOiLwnZKeIiwiY3NjcjsiOiLwnZK4IiwiY3N1YjsiOiLiq48iLCJjc3ViZTsiOiLiq5EiLCJjc3VwOyI6IuKrkCIsImNzdXBlOyI6IuKrkiIsImN0ZG90OyI6IuKLryIsImN1ZGFycmw7Ijoi4qS4IiwiY3VkYXJycjsiOiLipLUiLCJjdWVwcjsiOiLii54iLCJjdWVzYzsiOiLii58iLCJjdWxhcnI7Ijoi4oa2IiwiY3VsYXJycDsiOiLipL0iLCJjdXBicmNhcDsiOiLiqYgiLCJjdXBjYXA7Ijoi4qmGIiwiQ3VwQ2FwOyI6IuKJjSIsImN1cDsiOiLiiKoiLCJDdXA7Ijoi4ouTIiwiY3VwY3VwOyI6IuKpiiIsImN1cGRvdDsiOiLiio0iLCJjdXBvcjsiOiLiqYUiLCJjdXBzOyI6IuKIqu+4gCIsImN1cmFycjsiOiLihrciLCJjdXJhcnJtOyI6IuKkvCIsImN1cmx5ZXFwcmVjOyI6IuKLniIsImN1cmx5ZXFzdWNjOyI6IuKLnyIsImN1cmx5dmVlOyI6IuKLjiIsImN1cmx5d2VkZ2U7Ijoi4ouPIiwiY3VycmVuOyI6IsKkIixjdXJyZW46IsKkIiwiY3VydmVhcnJvd2xlZnQ7Ijoi4oa2IiwiY3VydmVhcnJvd3JpZ2h0OyI6IuKGtyIsImN1dmVlOyI6IuKLjiIsImN1d2VkOyI6IuKLjyIsImN3Y29uaW50OyI6IuKIsiIsImN3aW50OyI6IuKIsSIsImN5bGN0eTsiOiLijK0iLCJkYWdnZXI7Ijoi4oCgIiwiRGFnZ2VyOyI6IuKAoSIsImRhbGV0aDsiOiLihLgiLCJkYXJyOyI6IuKGkyIsIkRhcnI7Ijoi4oahIiwiZEFycjsiOiLih5MiLCJkYXNoOyI6IuKAkCIsIkRhc2h2OyI6IuKrpCIsImRhc2h2OyI6IuKKoyIsImRia2Fyb3c7Ijoi4qSPIiwiZGJsYWM7Ijoiy50iLCJEY2Fyb247IjoixI4iLCJkY2Fyb247IjoixI8iLCJEY3k7Ijoi0JQiLCJkY3k7Ijoi0LQiLCJkZGFnZ2VyOyI6IuKAoSIsImRkYXJyOyI6IuKHiiIsIkREOyI6IuKFhSIsImRkOyI6IuKFhiIsIkREb3RyYWhkOyI6IuKkkSIsImRkb3RzZXE7Ijoi4qm3IiwiZGVnOyI6IsKwIixkZWc6IsKwIiwiRGVsOyI6IuKIhyIsIkRlbHRhOyI6Is6UIiwiZGVsdGE7IjoizrQiLCJkZW1wdHl2OyI6IuKmsSIsImRmaXNodDsiOiLipb8iLCJEZnI7Ijoi8J2UhyIsImRmcjsiOiLwnZShIiwiZEhhcjsiOiLipaUiLCJkaGFybDsiOiLih4MiLCJkaGFycjsiOiLih4IiLCJEaWFjcml0aWNhbEFjdXRlOyI6IsK0IiwiRGlhY3JpdGljYWxEb3Q7Ijoiy5kiLCJEaWFjcml0aWNhbERvdWJsZUFjdXRlOyI6IsudIiwiRGlhY3JpdGljYWxHcmF2ZTsiOiJgIiwiRGlhY3JpdGljYWxUaWxkZTsiOiLLnCIsImRpYW07Ijoi4ouEIiwiZGlhbW9uZDsiOiLii4QiLCJEaWFtb25kOyI6IuKLhCIsImRpYW1vbmRzdWl0OyI6IuKZpiIsImRpYW1zOyI6IuKZpiIsImRpZTsiOiLCqCIsIkRpZmZlcmVudGlhbEQ7Ijoi4oWGIiwiZGlnYW1tYTsiOiLPnSIsImRpc2luOyI6IuKLsiIsImRpdjsiOiLDtyIsImRpdmlkZTsiOiLDtyIsZGl2aWRlOiLDtyIsImRpdmlkZW9udGltZXM7Ijoi4ouHIiwiZGl2b254OyI6IuKLhyIsIkRKY3k7Ijoi0IIiLCJkamN5OyI6ItGSIiwiZGxjb3JuOyI6IuKMniIsImRsY3JvcDsiOiLijI0iLCJkb2xsYXI7IjoiJCIsIkRvcGY7Ijoi8J2UuyIsImRvcGY7Ijoi8J2VlSIsIkRvdDsiOiLCqCIsImRvdDsiOiLLmSIsIkRvdERvdDsiOiLig5wiLCJkb3RlcTsiOiLiiZAiLCJkb3RlcWRvdDsiOiLiiZEiLCJEb3RFcXVhbDsiOiLiiZAiLCJkb3RtaW51czsiOiLiiLgiLCJkb3RwbHVzOyI6IuKIlCIsImRvdHNxdWFyZTsiOiLiiqEiLCJkb3VibGViYXJ3ZWRnZTsiOiLijIYiLCJEb3VibGVDb250b3VySW50ZWdyYWw7Ijoi4oivIiwiRG91YmxlRG90OyI6IsKoIiwiRG91YmxlRG93bkFycm93OyI6IuKHkyIsIkRvdWJsZUxlZnRBcnJvdzsiOiLih5AiLCJEb3VibGVMZWZ0UmlnaHRBcnJvdzsiOiLih5QiLCJEb3VibGVMZWZ0VGVlOyI6IuKrpCIsIkRvdWJsZUxvbmdMZWZ0QXJyb3c7Ijoi4p+4IiwiRG91YmxlTG9uZ0xlZnRSaWdodEFycm93OyI6IuKfuiIsIkRvdWJsZUxvbmdSaWdodEFycm93OyI6IuKfuSIsIkRvdWJsZVJpZ2h0QXJyb3c7Ijoi4oeSIiwiRG91YmxlUmlnaHRUZWU7Ijoi4oqoIiwiRG91YmxlVXBBcnJvdzsiOiLih5EiLCJEb3VibGVVcERvd25BcnJvdzsiOiLih5UiLCJEb3VibGVWZXJ0aWNhbEJhcjsiOiLiiKUiLCJEb3duQXJyb3dCYXI7Ijoi4qSTIiwiZG93bmFycm93OyI6IuKGkyIsIkRvd25BcnJvdzsiOiLihpMiLCJEb3duYXJyb3c7Ijoi4oeTIiwiRG93bkFycm93VXBBcnJvdzsiOiLih7UiLCJEb3duQnJldmU7IjoizJEiLCJkb3duZG93bmFycm93czsiOiLih4oiLCJkb3duaGFycG9vbmxlZnQ7Ijoi4oeDIiwiZG93bmhhcnBvb25yaWdodDsiOiLih4IiLCJEb3duTGVmdFJpZ2h0VmVjdG9yOyI6IuKlkCIsIkRvd25MZWZ0VGVlVmVjdG9yOyI6IuKlniIsIkRvd25MZWZ0VmVjdG9yQmFyOyI6IuKlliIsIkRvd25MZWZ0VmVjdG9yOyI6IuKGvSIsIkRvd25SaWdodFRlZVZlY3RvcjsiOiLipZ8iLCJEb3duUmlnaHRWZWN0b3JCYXI7Ijoi4qWXIiwiRG93blJpZ2h0VmVjdG9yOyI6IuKHgSIsIkRvd25UZWVBcnJvdzsiOiLihqciLCJEb3duVGVlOyI6IuKKpCIsImRyYmthcm93OyI6IuKkkCIsImRyY29ybjsiOiLijJ8iLCJkcmNyb3A7Ijoi4oyMIiwiRHNjcjsiOiLwnZKfIiwiZHNjcjsiOiLwnZK5IiwiRFNjeTsiOiLQhSIsImRzY3k7Ijoi0ZUiLCJkc29sOyI6IuKntiIsIkRzdHJvazsiOiLEkCIsImRzdHJvazsiOiLEkSIsImR0ZG90OyI6IuKLsSIsImR0cmk7Ijoi4pa/IiwiZHRyaWY7Ijoi4pa+IiwiZHVhcnI7Ijoi4oe1IiwiZHVoYXI7Ijoi4qWvIiwiZHdhbmdsZTsiOiLipqYiLCJEWmN5OyI6ItCPIiwiZHpjeTsiOiLRnyIsImR6aWdyYXJyOyI6IuKfvyIsIkVhY3V0ZTsiOiLDiSIsRWFjdXRlOiLDiSIsImVhY3V0ZTsiOiLDqSIsZWFjdXRlOiLDqSIsImVhc3RlcjsiOiLiqa4iLCJFY2Fyb247IjoixJoiLCJlY2Fyb247IjoixJsiLCJFY2lyYzsiOiLDiiIsRWNpcmM6IsOKIiwiZWNpcmM7Ijoiw6oiLGVjaXJjOiLDqiIsImVjaXI7Ijoi4omWIiwiZWNvbG9uOyI6IuKJlSIsIkVjeTsiOiLQrSIsImVjeTsiOiLRjSIsImVERG90OyI6IuKptyIsIkVkb3Q7IjoixJYiLCJlZG90OyI6IsSXIiwiZURvdDsiOiLiiZEiLCJlZTsiOiLihYciLCJlZkRvdDsiOiLiiZIiLCJFZnI7Ijoi8J2UiCIsImVmcjsiOiLwnZSiIiwiZWc7Ijoi4qqaIiwiRWdyYXZlOyI6IsOIIixFZ3JhdmU6IsOIIiwiZWdyYXZlOyI6IsOoIixlZ3JhdmU6IsOoIiwiZWdzOyI6IuKqliIsImVnc2RvdDsiOiLiqpgiLCJlbDsiOiLiqpkiLCJFbGVtZW50OyI6IuKIiCIsImVsaW50ZXJzOyI6IuKPpyIsImVsbDsiOiLihJMiLCJlbHM7Ijoi4qqVIiwiZWxzZG90OyI6IuKqlyIsIkVtYWNyOyI6IsSSIiwiZW1hY3I7IjoixJMiLCJlbXB0eTsiOiLiiIUiLCJlbXB0eXNldDsiOiLiiIUiLCJFbXB0eVNtYWxsU3F1YXJlOyI6IuKXuyIsImVtcHR5djsiOiLiiIUiLCJFbXB0eVZlcnlTbWFsbFNxdWFyZTsiOiLilqsiLCJlbXNwMTM7Ijoi4oCEIiwiZW1zcDE0OyI6IuKAhSIsImVtc3A7Ijoi4oCDIiwiRU5HOyI6IsWKIiwiZW5nOyI6IsWLIiwiZW5zcDsiOiLigIIiLCJFb2dvbjsiOiLEmCIsImVvZ29uOyI6IsSZIiwiRW9wZjsiOiLwnZS8IiwiZW9wZjsiOiLwnZWWIiwiZXBhcjsiOiLii5UiLCJlcGFyc2w7Ijoi4qejIiwiZXBsdXM7Ijoi4qmxIiwiZXBzaTsiOiLOtSIsIkVwc2lsb247IjoizpUiLCJlcHNpbG9uOyI6Is61IiwiZXBzaXY7Ijoiz7UiLCJlcWNpcmM7Ijoi4omWIiwiZXFjb2xvbjsiOiLiiZUiLCJlcXNpbTsiOiLiiYIiLCJlcXNsYW50Z3RyOyI6IuKqliIsImVxc2xhbnRsZXNzOyI6IuKqlSIsIkVxdWFsOyI6IuKptSIsImVxdWFsczsiOiI9IiwiRXF1YWxUaWxkZTsiOiLiiYIiLCJlcXVlc3Q7Ijoi4omfIiwiRXF1aWxpYnJpdW07Ijoi4oeMIiwiZXF1aXY7Ijoi4omhIiwiZXF1aXZERDsiOiLiqbgiLCJlcXZwYXJzbDsiOiLip6UiLCJlcmFycjsiOiLipbEiLCJlckRvdDsiOiLiiZMiLCJlc2NyOyI6IuKEryIsIkVzY3I7Ijoi4oSwIiwiZXNkb3Q7Ijoi4omQIiwiRXNpbTsiOiLiqbMiLCJlc2ltOyI6IuKJgiIsIkV0YTsiOiLOlyIsImV0YTsiOiLOtyIsIkVUSDsiOiLDkCIsRVRIOiLDkCIsImV0aDsiOiLDsCIsZXRoOiLDsCIsIkV1bWw7Ijoiw4siLEV1bWw6IsOLIiwiZXVtbDsiOiLDqyIsZXVtbDoiw6siLCJldXJvOyI6IuKCrCIsImV4Y2w7IjoiISIsImV4aXN0OyI6IuKIgyIsIkV4aXN0czsiOiLiiIMiLCJleHBlY3RhdGlvbjsiOiLihLAiLCJleHBvbmVudGlhbGU7Ijoi4oWHIiwiRXhwb25lbnRpYWxFOyI6IuKFhyIsImZhbGxpbmdkb3RzZXE7Ijoi4omSIiwiRmN5OyI6ItCkIiwiZmN5OyI6ItGEIiwiZmVtYWxlOyI6IuKZgCIsImZmaWxpZzsiOiLvrIMiLCJmZmxpZzsiOiLvrIAiLCJmZmxsaWc7Ijoi76yEIiwiRmZyOyI6IvCdlIkiLCJmZnI7Ijoi8J2UoyIsImZpbGlnOyI6Iu+sgSIsIkZpbGxlZFNtYWxsU3F1YXJlOyI6IuKXvCIsIkZpbGxlZFZlcnlTbWFsbFNxdWFyZTsiOiLilqoiLCJmamxpZzsiOiJmaiIsImZsYXQ7Ijoi4pmtIiwiZmxsaWc7Ijoi76yCIiwiZmx0bnM7Ijoi4paxIiwiZm5vZjsiOiLGkiIsIkZvcGY7Ijoi8J2UvSIsImZvcGY7Ijoi8J2VlyIsImZvcmFsbDsiOiLiiIAiLCJGb3JBbGw7Ijoi4oiAIiwiZm9yazsiOiLii5QiLCJmb3JrdjsiOiLiq5kiLCJGb3VyaWVydHJmOyI6IuKEsSIsImZwYXJ0aW50OyI6IuKojSIsImZyYWMxMjsiOiLCvSIsZnJhYzEyOiLCvSIsImZyYWMxMzsiOiLihZMiLCJmcmFjMTQ7IjoiwrwiLGZyYWMxNDoiwrwiLCJmcmFjMTU7Ijoi4oWVIiwiZnJhYzE2OyI6IuKFmSIsImZyYWMxODsiOiLihZsiLCJmcmFjMjM7Ijoi4oWUIiwiZnJhYzI1OyI6IuKFliIsImZyYWMzNDsiOiLCviIsZnJhYzM0OiLCviIsImZyYWMzNTsiOiLihZciLCJmcmFjMzg7Ijoi4oWcIiwiZnJhYzQ1OyI6IuKFmCIsImZyYWM1NjsiOiLihZoiLCJmcmFjNTg7Ijoi4oWdIiwiZnJhYzc4OyI6IuKFniIsImZyYXNsOyI6IuKBhCIsImZyb3duOyI6IuKMoiIsImZzY3I7Ijoi8J2SuyIsIkZzY3I7Ijoi4oSxIiwiZ2FjdXRlOyI6Ise1IiwiR2FtbWE7IjoizpMiLCJnYW1tYTsiOiLOsyIsIkdhbW1hZDsiOiLPnCIsImdhbW1hZDsiOiLPnSIsImdhcDsiOiLiqoYiLCJHYnJldmU7IjoixJ4iLCJnYnJldmU7IjoixJ8iLCJHY2VkaWw7IjoixKIiLCJHY2lyYzsiOiLEnCIsImdjaXJjOyI6IsSdIiwiR2N5OyI6ItCTIiwiZ2N5OyI6ItCzIiwiR2RvdDsiOiLEoCIsImdkb3Q7IjoixKEiLCJnZTsiOiLiiaUiLCJnRTsiOiLiiaciLCJnRWw7Ijoi4qqMIiwiZ2VsOyI6IuKLmyIsImdlcTsiOiLiiaUiLCJnZXFxOyI6IuKJpyIsImdlcXNsYW50OyI6IuKpviIsImdlc2NjOyI6IuKqqSIsImdlczsiOiLiqb4iLCJnZXNkb3Q7Ijoi4qqAIiwiZ2VzZG90bzsiOiLiqoIiLCJnZXNkb3RvbDsiOiLiqoQiLCJnZXNsOyI6IuKLm++4gCIsImdlc2xlczsiOiLiqpQiLCJHZnI7Ijoi8J2UiiIsImdmcjsiOiLwnZSkIiwiZ2c7Ijoi4omrIiwiR2c7Ijoi4ouZIiwiZ2dnOyI6IuKLmSIsImdpbWVsOyI6IuKEtyIsIkdKY3k7Ijoi0IMiLCJnamN5OyI6ItGTIiwiZ2xhOyI6IuKqpSIsImdsOyI6IuKJtyIsImdsRTsiOiLiqpIiLCJnbGo7Ijoi4qqkIiwiZ25hcDsiOiLiqooiLCJnbmFwcHJveDsiOiLiqooiLCJnbmU7Ijoi4qqIIiwiZ25FOyI6IuKJqSIsImduZXE7Ijoi4qqIIiwiZ25lcXE7Ijoi4ompIiwiZ25zaW07Ijoi4ounIiwiR29wZjsiOiLwnZS+IiwiZ29wZjsiOiLwnZWYIiwiZ3JhdmU7IjoiYCIsIkdyZWF0ZXJFcXVhbDsiOiLiiaUiLCJHcmVhdGVyRXF1YWxMZXNzOyI6IuKLmyIsIkdyZWF0ZXJGdWxsRXF1YWw7Ijoi4omnIiwiR3JlYXRlckdyZWF0ZXI7Ijoi4qqiIiwiR3JlYXRlckxlc3M7Ijoi4om3IiwiR3JlYXRlclNsYW50RXF1YWw7Ijoi4qm+IiwiR3JlYXRlclRpbGRlOyI6IuKJsyIsIkdzY3I7Ijoi8J2SoiIsImdzY3I7Ijoi4oSKIiwiZ3NpbTsiOiLiibMiLCJnc2ltZTsiOiLiqo4iLCJnc2ltbDsiOiLiqpAiLCJndGNjOyI6IuKqpyIsImd0Y2lyOyI6IuKpuiIsImd0OyI6Ij4iLGd0OiI+IiwiR1Q7IjoiPiIsR1Q6Ij4iLCJHdDsiOiLiiasiLCJndGRvdDsiOiLii5ciLCJndGxQYXI7Ijoi4qaVIiwiZ3RxdWVzdDsiOiLiqbwiLCJndHJhcHByb3g7Ijoi4qqGIiwiZ3RyYXJyOyI6IuKluCIsImd0cmRvdDsiOiLii5ciLCJndHJlcWxlc3M7Ijoi4oubIiwiZ3RyZXFxbGVzczsiOiLiqowiLCJndHJsZXNzOyI6IuKJtyIsImd0cnNpbTsiOiLiibMiLCJndmVydG5lcXE7Ijoi4omp77iAIiwiZ3ZuRTsiOiLiianvuIAiLCJIYWNlazsiOiLLhyIsImhhaXJzcDsiOiLigIoiLCJoYWxmOyI6IsK9IiwiaGFtaWx0OyI6IuKEiyIsIkhBUkRjeTsiOiLQqiIsImhhcmRjeTsiOiLRiiIsImhhcnJjaXI7Ijoi4qWIIiwiaGFycjsiOiLihpQiLCJoQXJyOyI6IuKHlCIsImhhcnJ3OyI6IuKGrSIsIkhhdDsiOiJeIiwiaGJhcjsiOiLihI8iLCJIY2lyYzsiOiLEpCIsImhjaXJjOyI6IsSlIiwiaGVhcnRzOyI6IuKZpSIsImhlYXJ0c3VpdDsiOiLimaUiLCJoZWxsaXA7Ijoi4oCmIiwiaGVyY29uOyI6IuKKuSIsImhmcjsiOiLwnZSlIiwiSGZyOyI6IuKEjCIsIkhpbGJlcnRTcGFjZTsiOiLihIsiLCJoa3NlYXJvdzsiOiLipKUiLCJoa3N3YXJvdzsiOiLipKYiLCJob2FycjsiOiLih78iLCJob210aHQ7Ijoi4oi7IiwiaG9va2xlZnRhcnJvdzsiOiLihqkiLCJob29rcmlnaHRhcnJvdzsiOiLihqoiLCJob3BmOyI6IvCdlZkiLCJIb3BmOyI6IuKEjSIsImhvcmJhcjsiOiLigJUiLCJIb3Jpem9udGFsTGluZTsiOiLilIAiLCJoc2NyOyI6IvCdkr0iLCJIc2NyOyI6IuKEiyIsImhzbGFzaDsiOiLihI8iLCJIc3Ryb2s7IjoixKYiLCJoc3Ryb2s7IjoixKciLCJIdW1wRG93bkh1bXA7Ijoi4omOIiwiSHVtcEVxdWFsOyI6IuKJjyIsImh5YnVsbDsiOiLigYMiLCJoeXBoZW47Ijoi4oCQIiwiSWFjdXRlOyI6IsONIixJYWN1dGU6IsONIiwiaWFjdXRlOyI6IsOtIixpYWN1dGU6IsOtIiwiaWM7Ijoi4oGjIiwiSWNpcmM7Ijoiw44iLEljaXJjOiLDjiIsImljaXJjOyI6IsOuIixpY2lyYzoiw64iLCJJY3k7Ijoi0JgiLCJpY3k7Ijoi0LgiLCJJZG90OyI6IsSwIiwiSUVjeTsiOiLQlSIsImllY3k7Ijoi0LUiLCJpZXhjbDsiOiLCoSIsaWV4Y2w6IsKhIiwiaWZmOyI6IuKHlCIsImlmcjsiOiLwnZSmIiwiSWZyOyI6IuKEkSIsIklncmF2ZTsiOiLDjCIsSWdyYXZlOiLDjCIsImlncmF2ZTsiOiLDrCIsaWdyYXZlOiLDrCIsImlpOyI6IuKFiCIsImlpaWludDsiOiLiqIwiLCJpaWludDsiOiLiiK0iLCJpaW5maW47Ijoi4qecIiwiaWlvdGE7Ijoi4oSpIiwiSUpsaWc7IjoixLIiLCJpamxpZzsiOiLEsyIsIkltYWNyOyI6IsSqIiwiaW1hY3I7IjoixKsiLCJpbWFnZTsiOiLihJEiLCJJbWFnaW5hcnlJOyI6IuKFiCIsImltYWdsaW5lOyI6IuKEkCIsImltYWdwYXJ0OyI6IuKEkSIsImltYXRoOyI6IsSxIiwiSW07Ijoi4oSRIiwiaW1vZjsiOiLiirciLCJpbXBlZDsiOiLGtSIsIkltcGxpZXM7Ijoi4oeSIiwiaW5jYXJlOyI6IuKEhSIsImluOyI6IuKIiCIsImluZmluOyI6IuKIniIsImluZmludGllOyI6IuKnnSIsImlub2RvdDsiOiLEsSIsImludGNhbDsiOiLiiroiLCJpbnQ7Ijoi4oirIiwiSW50OyI6IuKIrCIsImludGVnZXJzOyI6IuKEpCIsIkludGVncmFsOyI6IuKIqyIsImludGVyY2FsOyI6IuKKuiIsIkludGVyc2VjdGlvbjsiOiLii4IiLCJpbnRsYXJoazsiOiLiqJciLCJpbnRwcm9kOyI6IuKovCIsIkludmlzaWJsZUNvbW1hOyI6IuKBoyIsIkludmlzaWJsZVRpbWVzOyI6IuKBoiIsIklPY3k7Ijoi0IEiLCJpb2N5OyI6ItGRIiwiSW9nb247IjoixK4iLCJpb2dvbjsiOiLEryIsIklvcGY7Ijoi8J2VgCIsImlvcGY7Ijoi8J2VmiIsIklvdGE7IjoizpkiLCJpb3RhOyI6Is65IiwiaXByb2Q7Ijoi4qi8IiwiaXF1ZXN0OyI6IsK/IixpcXVlc3Q6IsK/IiwiaXNjcjsiOiLwnZK+IiwiSXNjcjsiOiLihJAiLCJpc2luOyI6IuKIiCIsImlzaW5kb3Q7Ijoi4ou1IiwiaXNpbkU7Ijoi4ou5IiwiaXNpbnM7Ijoi4ou0IiwiaXNpbnN2OyI6IuKLsyIsImlzaW52OyI6IuKIiCIsIml0OyI6IuKBoiIsIkl0aWxkZTsiOiLEqCIsIml0aWxkZTsiOiLEqSIsIkl1a2N5OyI6ItCGIiwiaXVrY3k7Ijoi0ZYiLCJJdW1sOyI6IsOPIixJdW1sOiLDjyIsIml1bWw7Ijoiw68iLGl1bWw6IsOvIiwiSmNpcmM7IjoixLQiLCJqY2lyYzsiOiLEtSIsIkpjeTsiOiLQmSIsImpjeTsiOiLQuSIsIkpmcjsiOiLwnZSNIiwiamZyOyI6IvCdlKciLCJqbWF0aDsiOiLItyIsIkpvcGY7Ijoi8J2VgSIsImpvcGY7Ijoi8J2VmyIsIkpzY3I7Ijoi8J2SpSIsImpzY3I7Ijoi8J2SvyIsIkpzZXJjeTsiOiLQiCIsImpzZXJjeTsiOiLRmCIsIkp1a2N5OyI6ItCEIiwianVrY3k7Ijoi0ZQiLCJLYXBwYTsiOiLOmiIsImthcHBhOyI6Is66Iiwia2FwcGF2OyI6Is+wIiwiS2NlZGlsOyI6IsS2Iiwia2NlZGlsOyI6IsS3IiwiS2N5OyI6ItCaIiwia2N5OyI6ItC6IiwiS2ZyOyI6IvCdlI4iLCJrZnI7Ijoi8J2UqCIsImtncmVlbjsiOiLEuCIsIktIY3k7Ijoi0KUiLCJraGN5OyI6ItGFIiwiS0pjeTsiOiLQjCIsImtqY3k7Ijoi0ZwiLCJLb3BmOyI6IvCdlYIiLCJrb3BmOyI6IvCdlZwiLCJLc2NyOyI6IvCdkqYiLCJrc2NyOyI6IvCdk4AiLCJsQWFycjsiOiLih5oiLCJMYWN1dGU7IjoixLkiLCJsYWN1dGU7IjoixLoiLCJsYWVtcHR5djsiOiLiprQiLCJsYWdyYW47Ijoi4oSSIiwiTGFtYmRhOyI6Is6bIiwibGFtYmRhOyI6Is67IiwibGFuZzsiOiLin6giLCJMYW5nOyI6IuKfqiIsImxhbmdkOyI6IuKmkSIsImxhbmdsZTsiOiLin6giLCJsYXA7Ijoi4qqFIiwiTGFwbGFjZXRyZjsiOiLihJIiLCJsYXF1bzsiOiLCqyIsbGFxdW86IsKrIiwibGFycmI7Ijoi4oekIiwibGFycmJmczsiOiLipJ8iLCJsYXJyOyI6IuKGkCIsIkxhcnI7Ijoi4oaeIiwibEFycjsiOiLih5AiLCJsYXJyZnM7Ijoi4qSdIiwibGFycmhrOyI6IuKGqSIsImxhcnJscDsiOiLihqsiLCJsYXJycGw7Ijoi4qS5IiwibGFycnNpbTsiOiLipbMiLCJsYXJydGw7Ijoi4oaiIiwibGF0YWlsOyI6IuKkmSIsImxBdGFpbDsiOiLipJsiLCJsYXQ7Ijoi4qqrIiwibGF0ZTsiOiLiqq0iLCJsYXRlczsiOiLiqq3vuIAiLCJsYmFycjsiOiLipIwiLCJsQmFycjsiOiLipI4iLCJsYmJyazsiOiLinbIiLCJsYnJhY2U7IjoieyIsImxicmFjazsiOiJbIiwibGJya2U7Ijoi4qaLIiwibGJya3NsZDsiOiLipo8iLCJsYnJrc2x1OyI6IuKmjSIsIkxjYXJvbjsiOiLEvSIsImxjYXJvbjsiOiLEviIsIkxjZWRpbDsiOiLEuyIsImxjZWRpbDsiOiLEvCIsImxjZWlsOyI6IuKMiCIsImxjdWI7IjoieyIsIkxjeTsiOiLQmyIsImxjeTsiOiLQuyIsImxkY2E7Ijoi4qS2IiwibGRxdW87Ijoi4oCcIiwibGRxdW9yOyI6IuKAniIsImxkcmRoYXI7Ijoi4qWnIiwibGRydXNoYXI7Ijoi4qWLIiwibGRzaDsiOiLihrIiLCJsZTsiOiLiiaQiLCJsRTsiOiLiiaYiLCJMZWZ0QW5nbGVCcmFja2V0OyI6IuKfqCIsIkxlZnRBcnJvd0JhcjsiOiLih6QiLCJsZWZ0YXJyb3c7Ijoi4oaQIiwiTGVmdEFycm93OyI6IuKGkCIsIkxlZnRhcnJvdzsiOiLih5AiLCJMZWZ0QXJyb3dSaWdodEFycm93OyI6IuKHhiIsImxlZnRhcnJvd3RhaWw7Ijoi4oaiIiwiTGVmdENlaWxpbmc7Ijoi4oyIIiwiTGVmdERvdWJsZUJyYWNrZXQ7Ijoi4p+mIiwiTGVmdERvd25UZWVWZWN0b3I7Ijoi4qWhIiwiTGVmdERvd25WZWN0b3JCYXI7Ijoi4qWZIiwiTGVmdERvd25WZWN0b3I7Ijoi4oeDIiwiTGVmdEZsb29yOyI6IuKMiiIsImxlZnRoYXJwb29uZG93bjsiOiLihr0iLCJsZWZ0aGFycG9vbnVwOyI6IuKGvCIsImxlZnRsZWZ0YXJyb3dzOyI6IuKHhyIsImxlZnRyaWdodGFycm93OyI6IuKGlCIsIkxlZnRSaWdodEFycm93OyI6IuKGlCIsIkxlZnRyaWdodGFycm93OyI6IuKHlCIsImxlZnRyaWdodGFycm93czsiOiLih4YiLCJsZWZ0cmlnaHRoYXJwb29uczsiOiLih4siLCJsZWZ0cmlnaHRzcXVpZ2Fycm93OyI6IuKGrSIsIkxlZnRSaWdodFZlY3RvcjsiOiLipY4iLCJMZWZ0VGVlQXJyb3c7Ijoi4oakIiwiTGVmdFRlZTsiOiLiiqMiLCJMZWZ0VGVlVmVjdG9yOyI6IuKlmiIsImxlZnR0aHJlZXRpbWVzOyI6IuKLiyIsIkxlZnRUcmlhbmdsZUJhcjsiOiLip48iLCJMZWZ0VHJpYW5nbGU7Ijoi4oqyIiwiTGVmdFRyaWFuZ2xlRXF1YWw7Ijoi4oq0IiwiTGVmdFVwRG93blZlY3RvcjsiOiLipZEiLCJMZWZ0VXBUZWVWZWN0b3I7Ijoi4qWgIiwiTGVmdFVwVmVjdG9yQmFyOyI6IuKlmCIsIkxlZnRVcFZlY3RvcjsiOiLihr8iLCJMZWZ0VmVjdG9yQmFyOyI6IuKlkiIsIkxlZnRWZWN0b3I7Ijoi4oa8IiwibEVnOyI6IuKqiyIsImxlZzsiOiLii5oiLCJsZXE7Ijoi4omkIiwibGVxcTsiOiLiiaYiLCJsZXFzbGFudDsiOiLiqb0iLCJsZXNjYzsiOiLiqqgiLCJsZXM7Ijoi4qm9IiwibGVzZG90OyI6IuKpvyIsImxlc2RvdG87Ijoi4qqBIiwibGVzZG90b3I7Ijoi4qqDIiwibGVzZzsiOiLii5rvuIAiLCJsZXNnZXM7Ijoi4qqTIiwibGVzc2FwcHJveDsiOiLiqoUiLCJsZXNzZG90OyI6IuKLliIsImxlc3NlcWd0cjsiOiLii5oiLCJsZXNzZXFxZ3RyOyI6IuKqiyIsIkxlc3NFcXVhbEdyZWF0ZXI7Ijoi4ouaIiwiTGVzc0Z1bGxFcXVhbDsiOiLiiaYiLCJMZXNzR3JlYXRlcjsiOiLiibYiLCJsZXNzZ3RyOyI6IuKJtiIsIkxlc3NMZXNzOyI6IuKqoSIsImxlc3NzaW07Ijoi4omyIiwiTGVzc1NsYW50RXF1YWw7Ijoi4qm9IiwiTGVzc1RpbGRlOyI6IuKJsiIsImxmaXNodDsiOiLipbwiLCJsZmxvb3I7Ijoi4oyKIiwiTGZyOyI6IvCdlI8iLCJsZnI7Ijoi8J2UqSIsImxnOyI6IuKJtiIsImxnRTsiOiLiqpEiLCJsSGFyOyI6IuKloiIsImxoYXJkOyI6IuKGvSIsImxoYXJ1OyI6IuKGvCIsImxoYXJ1bDsiOiLipaoiLCJsaGJsazsiOiLiloQiLCJMSmN5OyI6ItCJIiwibGpjeTsiOiLRmSIsImxsYXJyOyI6IuKHhyIsImxsOyI6IuKJqiIsIkxsOyI6IuKLmCIsImxsY29ybmVyOyI6IuKMniIsIkxsZWZ0YXJyb3c7Ijoi4oeaIiwibGxoYXJkOyI6IuKlqyIsImxsdHJpOyI6IuKXuiIsIkxtaWRvdDsiOiLEvyIsImxtaWRvdDsiOiLFgCIsImxtb3VzdGFjaGU7Ijoi4o6wIiwibG1vdXN0OyI6IuKOsCIsImxuYXA7Ijoi4qqJIiwibG5hcHByb3g7Ijoi4qqJIiwibG5lOyI6IuKqhyIsImxuRTsiOiLiiagiLCJsbmVxOyI6IuKqhyIsImxuZXFxOyI6IuKJqCIsImxuc2ltOyI6IuKLpiIsImxvYW5nOyI6IuKfrCIsImxvYXJyOyI6IuKHvSIsImxvYnJrOyI6IuKfpiIsImxvbmdsZWZ0YXJyb3c7Ijoi4p+1IiwiTG9uZ0xlZnRBcnJvdzsiOiLin7UiLCJMb25nbGVmdGFycm93OyI6IuKfuCIsImxvbmdsZWZ0cmlnaHRhcnJvdzsiOiLin7ciLCJMb25nTGVmdFJpZ2h0QXJyb3c7Ijoi4p+3IiwiTG9uZ2xlZnRyaWdodGFycm93OyI6IuKfuiIsImxvbmdtYXBzdG87Ijoi4p+8IiwibG9uZ3JpZ2h0YXJyb3c7Ijoi4p+2IiwiTG9uZ1JpZ2h0QXJyb3c7Ijoi4p+2IiwiTG9uZ3JpZ2h0YXJyb3c7Ijoi4p+5IiwibG9vcGFycm93bGVmdDsiOiLihqsiLCJsb29wYXJyb3dyaWdodDsiOiLihqwiLCJsb3BhcjsiOiLipoUiLCJMb3BmOyI6IvCdlYMiLCJsb3BmOyI6IvCdlZ0iLCJsb3BsdXM7Ijoi4qitIiwibG90aW1lczsiOiLiqLQiLCJsb3dhc3Q7Ijoi4oiXIiwibG93YmFyOyI6Il8iLCJMb3dlckxlZnRBcnJvdzsiOiLihpkiLCJMb3dlclJpZ2h0QXJyb3c7Ijoi4oaYIiwibG96OyI6IuKXiiIsImxvemVuZ2U7Ijoi4peKIiwibG96ZjsiOiLip6siLCJscGFyOyI6IigiLCJscGFybHQ7Ijoi4qaTIiwibHJhcnI7Ijoi4oeGIiwibHJjb3JuZXI7Ijoi4oyfIiwibHJoYXI7Ijoi4oeLIiwibHJoYXJkOyI6IuKlrSIsImxybTsiOiLigI4iLCJscnRyaTsiOiLiir8iLCJsc2FxdW87Ijoi4oC5IiwibHNjcjsiOiLwnZOBIiwiTHNjcjsiOiLihJIiLCJsc2g7Ijoi4oawIiwiTHNoOyI6IuKGsCIsImxzaW07Ijoi4omyIiwibHNpbWU7Ijoi4qqNIiwibHNpbWc7Ijoi4qqPIiwibHNxYjsiOiJbIiwibHNxdW87Ijoi4oCYIiwibHNxdW9yOyI6IuKAmiIsIkxzdHJvazsiOiLFgSIsImxzdHJvazsiOiLFgiIsImx0Y2M7Ijoi4qqmIiwibHRjaXI7Ijoi4qm5IiwibHQ7IjoiPCIsbHQ6IjwiLCJMVDsiOiI8IixMVDoiPCIsIkx0OyI6IuKJqiIsImx0ZG90OyI6IuKLliIsImx0aHJlZTsiOiLii4siLCJsdGltZXM7Ijoi4ouJIiwibHRsYXJyOyI6IuKltiIsImx0cXVlc3Q7Ijoi4qm7IiwibHRyaTsiOiLil4MiLCJsdHJpZTsiOiLiirQiLCJsdHJpZjsiOiLil4IiLCJsdHJQYXI7Ijoi4qaWIiwibHVyZHNoYXI7Ijoi4qWKIiwibHVydWhhcjsiOiLipaYiLCJsdmVydG5lcXE7Ijoi4omo77iAIiwibHZuRTsiOiLiiajvuIAiLCJtYWNyOyI6IsKvIixtYWNyOiLCryIsIm1hbGU7Ijoi4pmCIiwibWFsdDsiOiLinKAiLCJtYWx0ZXNlOyI6IuKcoCIsIk1hcDsiOiLipIUiLCJtYXA7Ijoi4oamIiwibWFwc3RvOyI6IuKGpiIsIm1hcHN0b2Rvd247Ijoi4oanIiwibWFwc3RvbGVmdDsiOiLihqQiLCJtYXBzdG91cDsiOiLihqUiLCJtYXJrZXI7Ijoi4pauIiwibWNvbW1hOyI6IuKoqSIsIk1jeTsiOiLQnCIsIm1jeTsiOiLQvCIsIm1kYXNoOyI6IuKAlCIsIm1ERG90OyI6IuKIuiIsIm1lYXN1cmVkYW5nbGU7Ijoi4oihIiwiTWVkaXVtU3BhY2U7Ijoi4oGfIiwiTWVsbGludHJmOyI6IuKEsyIsIk1mcjsiOiLwnZSQIiwibWZyOyI6IvCdlKoiLCJtaG87Ijoi4oSnIiwibWljcm87IjoiwrUiLG1pY3JvOiLCtSIsIm1pZGFzdDsiOiIqIiwibWlkY2lyOyI6IuKrsCIsIm1pZDsiOiLiiKMiLCJtaWRkb3Q7IjoiwrciLG1pZGRvdDoiwrciLCJtaW51c2I7Ijoi4oqfIiwibWludXM7Ijoi4oiSIiwibWludXNkOyI6IuKIuCIsIm1pbnVzZHU7Ijoi4qiqIiwiTWludXNQbHVzOyI6IuKIkyIsIm1sY3A7Ijoi4qubIiwibWxkcjsiOiLigKYiLCJtbnBsdXM7Ijoi4oiTIiwibW9kZWxzOyI6IuKKpyIsIk1vcGY7Ijoi8J2VhCIsIm1vcGY7Ijoi8J2VniIsIm1wOyI6IuKIkyIsIm1zY3I7Ijoi8J2TgiIsIk1zY3I7Ijoi4oSzIiwibXN0cG9zOyI6IuKIviIsIk11OyI6Is6cIiwibXU7IjoizrwiLCJtdWx0aW1hcDsiOiLiirgiLCJtdW1hcDsiOiLiirgiLCJuYWJsYTsiOiLiiIciLCJOYWN1dGU7IjoixYMiLCJuYWN1dGU7IjoixYQiLCJuYW5nOyI6IuKIoOKDkiIsIm5hcDsiOiLiiYkiLCJuYXBFOyI6IuKpsMy4IiwibmFwaWQ7Ijoi4omLzLgiLCJuYXBvczsiOiLFiSIsIm5hcHByb3g7Ijoi4omJIiwibmF0dXJhbDsiOiLima4iLCJuYXR1cmFsczsiOiLihJUiLCJuYXR1cjsiOiLima4iLCJuYnNwOyI6IsKgIixuYnNwOiLCoCIsIm5idW1wOyI6IuKJjsy4IiwibmJ1bXBlOyI6IuKJj8y4IiwibmNhcDsiOiLiqYMiLCJOY2Fyb247IjoixYciLCJuY2Fyb247IjoixYgiLCJOY2VkaWw7IjoixYUiLCJuY2VkaWw7IjoixYYiLCJuY29uZzsiOiLiiYciLCJuY29uZ2RvdDsiOiLiqa3MuCIsIm5jdXA7Ijoi4qmCIiwiTmN5OyI6ItCdIiwibmN5OyI6ItC9IiwibmRhc2g7Ijoi4oCTIiwibmVhcmhrOyI6IuKkpCIsIm5lYXJyOyI6IuKGlyIsIm5lQXJyOyI6IuKHlyIsIm5lYXJyb3c7Ijoi4oaXIiwibmU7Ijoi4omgIiwibmVkb3Q7Ijoi4omQzLgiLCJOZWdhdGl2ZU1lZGl1bVNwYWNlOyI6IuKAiyIsIk5lZ2F0aXZlVGhpY2tTcGFjZTsiOiLigIsiLCJOZWdhdGl2ZVRoaW5TcGFjZTsiOiLigIsiLCJOZWdhdGl2ZVZlcnlUaGluU3BhY2U7Ijoi4oCLIiwibmVxdWl2OyI6IuKJoiIsIm5lc2VhcjsiOiLipKgiLCJuZXNpbTsiOiLiiYLMuCIsIk5lc3RlZEdyZWF0ZXJHcmVhdGVyOyI6IuKJqyIsIk5lc3RlZExlc3NMZXNzOyI6IuKJqiIsIk5ld0xpbmU7IjoiXFxuIiwibmV4aXN0OyI6IuKIhCIsIm5leGlzdHM7Ijoi4oiEIiwiTmZyOyI6IvCdlJEiLCJuZnI7Ijoi8J2UqyIsIm5nRTsiOiLiiafMuCIsIm5nZTsiOiLiibEiLCJuZ2VxOyI6IuKJsSIsIm5nZXFxOyI6IuKJp8y4IiwibmdlcXNsYW50OyI6IuKpvsy4IiwibmdlczsiOiLiqb7MuCIsIm5HZzsiOiLii5nMuCIsIm5nc2ltOyI6IuKJtSIsIm5HdDsiOiLiiavig5IiLCJuZ3Q7Ijoi4omvIiwibmd0cjsiOiLiia8iLCJuR3R2OyI6IuKJq8y4IiwibmhhcnI7Ijoi4oauIiwibmhBcnI7Ijoi4oeOIiwibmhwYXI7Ijoi4quyIiwibmk7Ijoi4oiLIiwibmlzOyI6IuKLvCIsIm5pc2Q7Ijoi4ou6Iiwibml2OyI6IuKIiyIsIk5KY3k7Ijoi0IoiLCJuamN5OyI6ItGaIiwibmxhcnI7Ijoi4oaaIiwibmxBcnI7Ijoi4oeNIiwibmxkcjsiOiLigKUiLCJubEU7Ijoi4ommzLgiLCJubGU7Ijoi4omwIiwibmxlZnRhcnJvdzsiOiLihpoiLCJuTGVmdGFycm93OyI6IuKHjSIsIm5sZWZ0cmlnaHRhcnJvdzsiOiLihq4iLCJuTGVmdHJpZ2h0YXJyb3c7Ijoi4oeOIiwibmxlcTsiOiLiibAiLCJubGVxcTsiOiLiiabMuCIsIm5sZXFzbGFudDsiOiLiqb3MuCIsIm5sZXM7Ijoi4qm9zLgiLCJubGVzczsiOiLiia4iLCJuTGw7Ijoi4ouYzLgiLCJubHNpbTsiOiLiibQiLCJuTHQ7Ijoi4omq4oOSIiwibmx0OyI6IuKJriIsIm5sdHJpOyI6IuKLqiIsIm5sdHJpZTsiOiLii6wiLCJuTHR2OyI6IuKJqsy4Iiwibm1pZDsiOiLiiKQiLCJOb0JyZWFrOyI6IuKBoCIsIk5vbkJyZWFraW5nU3BhY2U7IjoiwqAiLCJub3BmOyI6IvCdlZ8iLCJOb3BmOyI6IuKElSIsIk5vdDsiOiLiq6wiLCJub3Q7IjoiwqwiLG5vdDoiwqwiLCJOb3RDb25ncnVlbnQ7Ijoi4omiIiwiTm90Q3VwQ2FwOyI6IuKJrSIsIk5vdERvdWJsZVZlcnRpY2FsQmFyOyI6IuKIpiIsIk5vdEVsZW1lbnQ7Ijoi4oiJIiwiTm90RXF1YWw7Ijoi4omgIiwiTm90RXF1YWxUaWxkZTsiOiLiiYLMuCIsIk5vdEV4aXN0czsiOiLiiIQiLCJOb3RHcmVhdGVyOyI6IuKJryIsIk5vdEdyZWF0ZXJFcXVhbDsiOiLiibEiLCJOb3RHcmVhdGVyRnVsbEVxdWFsOyI6IuKJp8y4IiwiTm90R3JlYXRlckdyZWF0ZXI7Ijoi4omrzLgiLCJOb3RHcmVhdGVyTGVzczsiOiLiibkiLCJOb3RHcmVhdGVyU2xhbnRFcXVhbDsiOiLiqb7MuCIsIk5vdEdyZWF0ZXJUaWxkZTsiOiLiibUiLCJOb3RIdW1wRG93bkh1bXA7Ijoi4omOzLgiLCJOb3RIdW1wRXF1YWw7Ijoi4omPzLgiLCJub3RpbjsiOiLiiIkiLCJub3RpbmRvdDsiOiLii7XMuCIsIm5vdGluRTsiOiLii7nMuCIsIm5vdGludmE7Ijoi4oiJIiwibm90aW52YjsiOiLii7ciLCJub3RpbnZjOyI6IuKLtiIsIk5vdExlZnRUcmlhbmdsZUJhcjsiOiLip4/MuCIsIk5vdExlZnRUcmlhbmdsZTsiOiLii6oiLCJOb3RMZWZ0VHJpYW5nbGVFcXVhbDsiOiLii6wiLCJOb3RMZXNzOyI6IuKJriIsIk5vdExlc3NFcXVhbDsiOiLiibAiLCJOb3RMZXNzR3JlYXRlcjsiOiLiibgiLCJOb3RMZXNzTGVzczsiOiLiiarMuCIsIk5vdExlc3NTbGFudEVxdWFsOyI6IuKpvcy4IiwiTm90TGVzc1RpbGRlOyI6IuKJtCIsIk5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyOyI6IuKqosy4IiwiTm90TmVzdGVkTGVzc0xlc3M7Ijoi4qqhzLgiLCJub3RuaTsiOiLiiIwiLCJub3RuaXZhOyI6IuKIjCIsIm5vdG5pdmI7Ijoi4ou+Iiwibm90bml2YzsiOiLii70iLCJOb3RQcmVjZWRlczsiOiLiioAiLCJOb3RQcmVjZWRlc0VxdWFsOyI6IuKqr8y4IiwiTm90UHJlY2VkZXNTbGFudEVxdWFsOyI6IuKLoCIsIk5vdFJldmVyc2VFbGVtZW50OyI6IuKIjCIsIk5vdFJpZ2h0VHJpYW5nbGVCYXI7Ijoi4qeQzLgiLCJOb3RSaWdodFRyaWFuZ2xlOyI6IuKLqyIsIk5vdFJpZ2h0VHJpYW5nbGVFcXVhbDsiOiLii60iLCJOb3RTcXVhcmVTdWJzZXQ7Ijoi4oqPzLgiLCJOb3RTcXVhcmVTdWJzZXRFcXVhbDsiOiLii6IiLCJOb3RTcXVhcmVTdXBlcnNldDsiOiLiipDMuCIsIk5vdFNxdWFyZVN1cGVyc2V0RXF1YWw7Ijoi4oujIiwiTm90U3Vic2V0OyI6IuKKguKDkiIsIk5vdFN1YnNldEVxdWFsOyI6IuKKiCIsIk5vdFN1Y2NlZWRzOyI6IuKKgSIsIk5vdFN1Y2NlZWRzRXF1YWw7Ijoi4qqwzLgiLCJOb3RTdWNjZWVkc1NsYW50RXF1YWw7Ijoi4ouhIiwiTm90U3VjY2VlZHNUaWxkZTsiOiLiib/MuCIsIk5vdFN1cGVyc2V0OyI6IuKKg+KDkiIsIk5vdFN1cGVyc2V0RXF1YWw7Ijoi4oqJIiwiTm90VGlsZGU7Ijoi4omBIiwiTm90VGlsZGVFcXVhbDsiOiLiiYQiLCJOb3RUaWxkZUZ1bGxFcXVhbDsiOiLiiYciLCJOb3RUaWxkZVRpbGRlOyI6IuKJiSIsIk5vdFZlcnRpY2FsQmFyOyI6IuKIpCIsIm5wYXJhbGxlbDsiOiLiiKYiLCJucGFyOyI6IuKIpiIsIm5wYXJzbDsiOiLiq73ig6UiLCJucGFydDsiOiLiiILMuCIsIm5wb2xpbnQ7Ijoi4qiUIiwibnByOyI6IuKKgCIsIm5wcmN1ZTsiOiLii6AiLCJucHJlYzsiOiLiioAiLCJucHJlY2VxOyI6IuKqr8y4IiwibnByZTsiOiLiqq/MuCIsIm5yYXJyYzsiOiLipLPMuCIsIm5yYXJyOyI6IuKGmyIsIm5yQXJyOyI6IuKHjyIsIm5yYXJydzsiOiLihp3MuCIsIm5yaWdodGFycm93OyI6IuKGmyIsIm5SaWdodGFycm93OyI6IuKHjyIsIm5ydHJpOyI6IuKLqyIsIm5ydHJpZTsiOiLii60iLCJuc2M7Ijoi4oqBIiwibnNjY3VlOyI6IuKLoSIsIm5zY2U7Ijoi4qqwzLgiLCJOc2NyOyI6IvCdkqkiLCJuc2NyOyI6IvCdk4MiLCJuc2hvcnRtaWQ7Ijoi4oikIiwibnNob3J0cGFyYWxsZWw7Ijoi4oimIiwibnNpbTsiOiLiiYEiLCJuc2ltZTsiOiLiiYQiLCJuc2ltZXE7Ijoi4omEIiwibnNtaWQ7Ijoi4oikIiwibnNwYXI7Ijoi4oimIiwibnNxc3ViZTsiOiLii6IiLCJuc3FzdXBlOyI6IuKLoyIsIm5zdWI7Ijoi4oqEIiwibnN1YkU7Ijoi4quFzLgiLCJuc3ViZTsiOiLiiogiLCJuc3Vic2V0OyI6IuKKguKDkiIsIm5zdWJzZXRlcTsiOiLiiogiLCJuc3Vic2V0ZXFxOyI6IuKrhcy4IiwibnN1Y2M7Ijoi4oqBIiwibnN1Y2NlcTsiOiLiqrDMuCIsIm5zdXA7Ijoi4oqFIiwibnN1cEU7Ijoi4quGzLgiLCJuc3VwZTsiOiLiiokiLCJuc3Vwc2V0OyI6IuKKg+KDkiIsIm5zdXBzZXRlcTsiOiLiiokiLCJuc3Vwc2V0ZXFxOyI6IuKrhsy4IiwibnRnbDsiOiLiibkiLCJOdGlsZGU7Ijoiw5EiLE50aWxkZToiw5EiLCJudGlsZGU7Ijoiw7EiLG50aWxkZToiw7EiLCJudGxnOyI6IuKJuCIsIm50cmlhbmdsZWxlZnQ7Ijoi4ouqIiwibnRyaWFuZ2xlbGVmdGVxOyI6IuKLrCIsIm50cmlhbmdsZXJpZ2h0OyI6IuKLqyIsIm50cmlhbmdsZXJpZ2h0ZXE7Ijoi4outIiwiTnU7Ijoizp0iLCJudTsiOiLOvSIsIm51bTsiOiIjIiwibnVtZXJvOyI6IuKEliIsIm51bXNwOyI6IuKAhyIsIm52YXA7Ijoi4omN4oOSIiwibnZkYXNoOyI6IuKKrCIsIm52RGFzaDsiOiLiiq0iLCJuVmRhc2g7Ijoi4oquIiwiblZEYXNoOyI6IuKKryIsIm52Z2U7Ijoi4oml4oOSIiwibnZndDsiOiI+4oOSIiwibnZIYXJyOyI6IuKkhCIsIm52aW5maW47Ijoi4qeeIiwibnZsQXJyOyI6IuKkgiIsIm52bGU7Ijoi4omk4oOSIiwibnZsdDsiOiI84oOSIiwibnZsdHJpZTsiOiLiirTig5IiLCJudnJBcnI7Ijoi4qSDIiwibnZydHJpZTsiOiLiirXig5IiLCJudnNpbTsiOiLiiLzig5IiLCJud2FyaGs7Ijoi4qSjIiwibndhcnI7Ijoi4oaWIiwibndBcnI7Ijoi4oeWIiwibndhcnJvdzsiOiLihpYiLCJud25lYXI7Ijoi4qSnIiwiT2FjdXRlOyI6IsOTIixPYWN1dGU6IsOTIiwib2FjdXRlOyI6IsOzIixvYWN1dGU6IsOzIiwib2FzdDsiOiLiipsiLCJPY2lyYzsiOiLDlCIsT2NpcmM6IsOUIiwib2NpcmM7Ijoiw7QiLG9jaXJjOiLDtCIsIm9jaXI7Ijoi4oqaIiwiT2N5OyI6ItCeIiwib2N5OyI6ItC+Iiwib2Rhc2g7Ijoi4oqdIiwiT2RibGFjOyI6IsWQIiwib2RibGFjOyI6IsWRIiwib2RpdjsiOiLiqLgiLCJvZG90OyI6IuKKmSIsIm9kc29sZDsiOiLiprwiLCJPRWxpZzsiOiLFkiIsIm9lbGlnOyI6IsWTIiwib2ZjaXI7Ijoi4qa/IiwiT2ZyOyI6IvCdlJIiLCJvZnI7Ijoi8J2UrCIsIm9nb247Ijoiy5siLCJPZ3JhdmU7Ijoiw5IiLE9ncmF2ZToiw5IiLCJvZ3JhdmU7Ijoiw7IiLG9ncmF2ZToiw7IiLCJvZ3Q7Ijoi4qeBIiwib2hiYXI7Ijoi4qa1Iiwib2htOyI6Is6pIiwib2ludDsiOiLiiK4iLCJvbGFycjsiOiLihroiLCJvbGNpcjsiOiLipr4iLCJvbGNyb3NzOyI6IuKmuyIsIm9saW5lOyI6IuKAviIsIm9sdDsiOiLip4AiLCJPbWFjcjsiOiLFjCIsIm9tYWNyOyI6IsWNIiwiT21lZ2E7IjoizqkiLCJvbWVnYTsiOiLPiSIsIk9taWNyb247Ijoizp8iLCJvbWljcm9uOyI6Is6/Iiwib21pZDsiOiLiprYiLCJvbWludXM7Ijoi4oqWIiwiT29wZjsiOiLwnZWGIiwib29wZjsiOiLwnZWgIiwib3BhcjsiOiLiprciLCJPcGVuQ3VybHlEb3VibGVRdW90ZTsiOiLigJwiLCJPcGVuQ3VybHlRdW90ZTsiOiLigJgiLCJvcGVycDsiOiLiprkiLCJvcGx1czsiOiLiipUiLCJvcmFycjsiOiLihrsiLCJPcjsiOiLiqZQiLCJvcjsiOiLiiKgiLCJvcmQ7Ijoi4qmdIiwib3JkZXI7Ijoi4oS0Iiwib3JkZXJvZjsiOiLihLQiLCJvcmRmOyI6IsKqIixvcmRmOiLCqiIsIm9yZG07IjoiwroiLG9yZG06IsK6Iiwib3JpZ29mOyI6IuKKtiIsIm9yb3I7Ijoi4qmWIiwib3JzbG9wZTsiOiLiqZciLCJvcnY7Ijoi4qmbIiwib1M7Ijoi4pOIIiwiT3NjcjsiOiLwnZKqIiwib3NjcjsiOiLihLQiLCJPc2xhc2g7Ijoiw5giLE9zbGFzaDoiw5giLCJvc2xhc2g7Ijoiw7giLG9zbGFzaDoiw7giLCJvc29sOyI6IuKKmCIsIk90aWxkZTsiOiLDlSIsT3RpbGRlOiLDlSIsIm90aWxkZTsiOiLDtSIsb3RpbGRlOiLDtSIsIm90aW1lc2FzOyI6IuKotiIsIk90aW1lczsiOiLiqLciLCJvdGltZXM7Ijoi4oqXIiwiT3VtbDsiOiLDliIsT3VtbDoiw5YiLCJvdW1sOyI6IsO2IixvdW1sOiLDtiIsIm92YmFyOyI6IuKMvSIsIk92ZXJCYXI7Ijoi4oC+IiwiT3ZlckJyYWNlOyI6IuKPniIsIk92ZXJCcmFja2V0OyI6IuKOtCIsIk92ZXJQYXJlbnRoZXNpczsiOiLij5wiLCJwYXJhOyI6IsK2IixwYXJhOiLCtiIsInBhcmFsbGVsOyI6IuKIpSIsInBhcjsiOiLiiKUiLCJwYXJzaW07Ijoi4quzIiwicGFyc2w7Ijoi4qu9IiwicGFydDsiOiLiiIIiLCJQYXJ0aWFsRDsiOiLiiIIiLCJQY3k7Ijoi0J8iLCJwY3k7Ijoi0L8iLCJwZXJjbnQ7IjoiJSIsInBlcmlvZDsiOiIuIiwicGVybWlsOyI6IuKAsCIsInBlcnA7Ijoi4oqlIiwicGVydGVuazsiOiLigLEiLCJQZnI7Ijoi8J2UkyIsInBmcjsiOiLwnZStIiwiUGhpOyI6Is6mIiwicGhpOyI6Is+GIiwicGhpdjsiOiLPlSIsInBobW1hdDsiOiLihLMiLCJwaG9uZTsiOiLimI4iLCJQaTsiOiLOoCIsInBpOyI6Is+AIiwicGl0Y2hmb3JrOyI6IuKLlCIsInBpdjsiOiLPliIsInBsYW5jazsiOiLihI8iLCJwbGFuY2toOyI6IuKEjiIsInBsYW5rdjsiOiLihI8iLCJwbHVzYWNpcjsiOiLiqKMiLCJwbHVzYjsiOiLiip4iLCJwbHVzY2lyOyI6IuKooiIsInBsdXM7IjoiKyIsInBsdXNkbzsiOiLiiJQiLCJwbHVzZHU7Ijoi4qilIiwicGx1c2U7Ijoi4qmyIiwiUGx1c01pbnVzOyI6IsKxIiwicGx1c21uOyI6IsKxIixwbHVzbW46IsKxIiwicGx1c3NpbTsiOiLiqKYiLCJwbHVzdHdvOyI6IuKopyIsInBtOyI6IsKxIiwiUG9pbmNhcmVwbGFuZTsiOiLihIwiLCJwb2ludGludDsiOiLiqJUiLCJwb3BmOyI6IvCdlaEiLCJQb3BmOyI6IuKEmSIsInBvdW5kOyI6IsKjIixwb3VuZDoiwqMiLCJwcmFwOyI6IuKqtyIsIlByOyI6IuKquyIsInByOyI6IuKJuiIsInByY3VlOyI6IuKJvCIsInByZWNhcHByb3g7Ijoi4qq3IiwicHJlYzsiOiLiiboiLCJwcmVjY3VybHllcTsiOiLiibwiLCJQcmVjZWRlczsiOiLiiboiLCJQcmVjZWRlc0VxdWFsOyI6IuKqryIsIlByZWNlZGVzU2xhbnRFcXVhbDsiOiLiibwiLCJQcmVjZWRlc1RpbGRlOyI6IuKJviIsInByZWNlcTsiOiLiqq8iLCJwcmVjbmFwcHJveDsiOiLiqrkiLCJwcmVjbmVxcTsiOiLiqrUiLCJwcmVjbnNpbTsiOiLii6giLCJwcmU7Ijoi4qqvIiwicHJFOyI6IuKqsyIsInByZWNzaW07Ijoi4om+IiwicHJpbWU7Ijoi4oCyIiwiUHJpbWU7Ijoi4oCzIiwicHJpbWVzOyI6IuKEmSIsInBybmFwOyI6IuKquSIsInBybkU7Ijoi4qq1IiwicHJuc2ltOyI6IuKLqCIsInByb2Q7Ijoi4oiPIiwiUHJvZHVjdDsiOiLiiI8iLCJwcm9mYWxhcjsiOiLijK4iLCJwcm9mbGluZTsiOiLijJIiLCJwcm9mc3VyZjsiOiLijJMiLCJwcm9wOyI6IuKInSIsIlByb3BvcnRpb25hbDsiOiLiiJ0iLCJQcm9wb3J0aW9uOyI6IuKItyIsInByb3B0bzsiOiLiiJ0iLCJwcnNpbTsiOiLiib4iLCJwcnVyZWw7Ijoi4oqwIiwiUHNjcjsiOiLwnZKrIiwicHNjcjsiOiLwnZOFIiwiUHNpOyI6Is6oIiwicHNpOyI6Is+IIiwicHVuY3NwOyI6IuKAiCIsIlFmcjsiOiLwnZSUIiwicWZyOyI6IvCdlK4iLCJxaW50OyI6IuKojCIsInFvcGY7Ijoi8J2VoiIsIlFvcGY7Ijoi4oSaIiwicXByaW1lOyI6IuKBlyIsIlFzY3I7Ijoi8J2SrCIsInFzY3I7Ijoi8J2ThiIsInF1YXRlcm5pb25zOyI6IuKEjSIsInF1YXRpbnQ7Ijoi4qiWIiwicXVlc3Q7IjoiPyIsInF1ZXN0ZXE7Ijoi4omfIiwicXVvdDsiOlwnIlwnLHF1b3Q6XCciXCcsIlFVT1Q7IjpcJyJcJyxRVU9UOlwnIlwnLCJyQWFycjsiOiLih5siLCJyYWNlOyI6IuKIvcyxIiwiUmFjdXRlOyI6IsWUIiwicmFjdXRlOyI6IsWVIiwicmFkaWM7Ijoi4oiaIiwicmFlbXB0eXY7Ijoi4qazIiwicmFuZzsiOiLin6kiLCJSYW5nOyI6IuKfqyIsInJhbmdkOyI6IuKmkiIsInJhbmdlOyI6IuKmpSIsInJhbmdsZTsiOiLin6kiLCJyYXF1bzsiOiLCuyIscmFxdW86IsK7IiwicmFycmFwOyI6IuKltSIsInJhcnJiOyI6IuKHpSIsInJhcnJiZnM7Ijoi4qSgIiwicmFycmM7Ijoi4qSzIiwicmFycjsiOiLihpIiLCJSYXJyOyI6IuKGoCIsInJBcnI7Ijoi4oeSIiwicmFycmZzOyI6IuKkniIsInJhcnJoazsiOiLihqoiLCJyYXJybHA7Ijoi4oasIiwicmFycnBsOyI6IuKlhSIsInJhcnJzaW07Ijoi4qW0IiwiUmFycnRsOyI6IuKkliIsInJhcnJ0bDsiOiLihqMiLCJyYXJydzsiOiLihp0iLCJyYXRhaWw7Ijoi4qSaIiwickF0YWlsOyI6IuKknCIsInJhdGlvOyI6IuKItiIsInJhdGlvbmFsczsiOiLihJoiLCJyYmFycjsiOiLipI0iLCJyQmFycjsiOiLipI8iLCJSQmFycjsiOiLipJAiLCJyYmJyazsiOiLinbMiLCJyYnJhY2U7IjoifSIsInJicmFjazsiOiJdIiwicmJya2U7Ijoi4qaMIiwicmJya3NsZDsiOiLipo4iLCJyYnJrc2x1OyI6IuKmkCIsIlJjYXJvbjsiOiLFmCIsInJjYXJvbjsiOiLFmSIsIlJjZWRpbDsiOiLFliIsInJjZWRpbDsiOiLFlyIsInJjZWlsOyI6IuKMiSIsInJjdWI7IjoifSIsIlJjeTsiOiLQoCIsInJjeTsiOiLRgCIsInJkY2E7Ijoi4qS3IiwicmRsZGhhcjsiOiLipakiLCJyZHF1bzsiOiLigJ0iLCJyZHF1b3I7Ijoi4oCdIiwicmRzaDsiOiLihrMiLCJyZWFsOyI6IuKEnCIsInJlYWxpbmU7Ijoi4oSbIiwicmVhbHBhcnQ7Ijoi4oScIiwicmVhbHM7Ijoi4oSdIiwiUmU7Ijoi4oScIiwicmVjdDsiOiLilq0iLCJyZWc7Ijoiwq4iLHJlZzoiwq4iLCJSRUc7Ijoiwq4iLFJFRzoiwq4iLCJSZXZlcnNlRWxlbWVudDsiOiLiiIsiLCJSZXZlcnNlRXF1aWxpYnJpdW07Ijoi4oeLIiwiUmV2ZXJzZVVwRXF1aWxpYnJpdW07Ijoi4qWvIiwicmZpc2h0OyI6IuKlvSIsInJmbG9vcjsiOiLijIsiLCJyZnI7Ijoi8J2UryIsIlJmcjsiOiLihJwiLCJySGFyOyI6IuKlpCIsInJoYXJkOyI6IuKHgSIsInJoYXJ1OyI6IuKHgCIsInJoYXJ1bDsiOiLipawiLCJSaG87IjoizqEiLCJyaG87Ijoiz4EiLCJyaG92OyI6Is+xIiwiUmlnaHRBbmdsZUJyYWNrZXQ7Ijoi4p+pIiwiUmlnaHRBcnJvd0JhcjsiOiLih6UiLCJyaWdodGFycm93OyI6IuKGkiIsIlJpZ2h0QXJyb3c7Ijoi4oaSIiwiUmlnaHRhcnJvdzsiOiLih5IiLCJSaWdodEFycm93TGVmdEFycm93OyI6IuKHhCIsInJpZ2h0YXJyb3d0YWlsOyI6IuKGoyIsIlJpZ2h0Q2VpbGluZzsiOiLijIkiLCJSaWdodERvdWJsZUJyYWNrZXQ7Ijoi4p+nIiwiUmlnaHREb3duVGVlVmVjdG9yOyI6IuKlnSIsIlJpZ2h0RG93blZlY3RvckJhcjsiOiLipZUiLCJSaWdodERvd25WZWN0b3I7Ijoi4oeCIiwiUmlnaHRGbG9vcjsiOiLijIsiLCJyaWdodGhhcnBvb25kb3duOyI6IuKHgSIsInJpZ2h0aGFycG9vbnVwOyI6IuKHgCIsInJpZ2h0bGVmdGFycm93czsiOiLih4QiLCJyaWdodGxlZnRoYXJwb29uczsiOiLih4wiLCJyaWdodHJpZ2h0YXJyb3dzOyI6IuKHiSIsInJpZ2h0c3F1aWdhcnJvdzsiOiLihp0iLCJSaWdodFRlZUFycm93OyI6IuKGpiIsIlJpZ2h0VGVlOyI6IuKKoiIsIlJpZ2h0VGVlVmVjdG9yOyI6IuKlmyIsInJpZ2h0dGhyZWV0aW1lczsiOiLii4wiLCJSaWdodFRyaWFuZ2xlQmFyOyI6IuKnkCIsIlJpZ2h0VHJpYW5nbGU7Ijoi4oqzIiwiUmlnaHRUcmlhbmdsZUVxdWFsOyI6IuKKtSIsIlJpZ2h0VXBEb3duVmVjdG9yOyI6IuKljyIsIlJpZ2h0VXBUZWVWZWN0b3I7Ijoi4qWcIiwiUmlnaHRVcFZlY3RvckJhcjsiOiLipZQiLCJSaWdodFVwVmVjdG9yOyI6IuKGviIsIlJpZ2h0VmVjdG9yQmFyOyI6IuKlkyIsIlJpZ2h0VmVjdG9yOyI6IuKHgCIsInJpbmc7Ijoiy5oiLCJyaXNpbmdkb3RzZXE7Ijoi4omTIiwicmxhcnI7Ijoi4oeEIiwicmxoYXI7Ijoi4oeMIiwicmxtOyI6IuKAjyIsInJtb3VzdGFjaGU7Ijoi4o6xIiwicm1vdXN0OyI6IuKOsSIsInJubWlkOyI6IuKrriIsInJvYW5nOyI6IuKfrSIsInJvYXJyOyI6IuKHviIsInJvYnJrOyI6IuKfpyIsInJvcGFyOyI6IuKmhiIsInJvcGY7Ijoi8J2VoyIsIlJvcGY7Ijoi4oSdIiwicm9wbHVzOyI6IuKoriIsInJvdGltZXM7Ijoi4qi1IiwiUm91bmRJbXBsaWVzOyI6IuKlsCIsInJwYXI7IjoiKSIsInJwYXJndDsiOiLippQiLCJycHBvbGludDsiOiLiqJIiLCJycmFycjsiOiLih4kiLCJScmlnaHRhcnJvdzsiOiLih5siLCJyc2FxdW87Ijoi4oC6IiwicnNjcjsiOiLwnZOHIiwiUnNjcjsiOiLihJsiLCJyc2g7Ijoi4oaxIiwiUnNoOyI6IuKGsSIsInJzcWI7IjoiXSIsInJzcXVvOyI6IuKAmSIsInJzcXVvcjsiOiLigJkiLCJydGhyZWU7Ijoi4ouMIiwicnRpbWVzOyI6IuKLiiIsInJ0cmk7Ijoi4pa5IiwicnRyaWU7Ijoi4oq1IiwicnRyaWY7Ijoi4pa4IiwicnRyaWx0cmk7Ijoi4qeOIiwiUnVsZURlbGF5ZWQ7Ijoi4qe0IiwicnVsdWhhcjsiOiLipagiLCJyeDsiOiLihJ4iLCJTYWN1dGU7IjoixZoiLCJzYWN1dGU7IjoixZsiLCJzYnF1bzsiOiLigJoiLCJzY2FwOyI6IuKquCIsIlNjYXJvbjsiOiLFoCIsInNjYXJvbjsiOiLFoSIsIlNjOyI6IuKqvCIsInNjOyI6IuKJuyIsInNjY3VlOyI6IuKJvSIsInNjZTsiOiLiqrAiLCJzY0U7Ijoi4qq0IiwiU2NlZGlsOyI6IsWeIiwic2NlZGlsOyI6IsWfIiwiU2NpcmM7IjoixZwiLCJzY2lyYzsiOiLFnSIsInNjbmFwOyI6IuKquiIsInNjbkU7Ijoi4qq2Iiwic2Nuc2ltOyI6IuKLqSIsInNjcG9saW50OyI6IuKokyIsInNjc2ltOyI6IuKJvyIsIlNjeTsiOiLQoSIsInNjeTsiOiLRgSIsInNkb3RiOyI6IuKKoSIsInNkb3Q7Ijoi4ouFIiwic2RvdGU7Ijoi4qmmIiwic2VhcmhrOyI6IuKkpSIsInNlYXJyOyI6IuKGmCIsInNlQXJyOyI6IuKHmCIsInNlYXJyb3c7Ijoi4oaYIiwic2VjdDsiOiLCpyIsc2VjdDoiwqciLCJzZW1pOyI6IjsiLCJzZXN3YXI7Ijoi4qSpIiwic2V0bWludXM7Ijoi4oiWIiwic2V0bW47Ijoi4oiWIiwic2V4dDsiOiLinLYiLCJTZnI7Ijoi8J2UliIsInNmcjsiOiLwnZSwIiwic2Zyb3duOyI6IuKMoiIsInNoYXJwOyI6IuKZryIsIlNIQ0hjeTsiOiLQqSIsInNoY2hjeTsiOiLRiSIsIlNIY3k7Ijoi0KgiLCJzaGN5OyI6ItGIIiwiU2hvcnREb3duQXJyb3c7Ijoi4oaTIiwiU2hvcnRMZWZ0QXJyb3c7Ijoi4oaQIiwic2hvcnRtaWQ7Ijoi4oijIiwic2hvcnRwYXJhbGxlbDsiOiLiiKUiLCJTaG9ydFJpZ2h0QXJyb3c7Ijoi4oaSIiwiU2hvcnRVcEFycm93OyI6IuKGkSIsInNoeTsiOiLCrSIsc2h5OiLCrSIsIlNpZ21hOyI6Is6jIiwic2lnbWE7Ijoiz4MiLCJzaWdtYWY7Ijoiz4IiLCJzaWdtYXY7Ijoiz4IiLCJzaW07Ijoi4oi8Iiwic2ltZG90OyI6IuKpqiIsInNpbWU7Ijoi4omDIiwic2ltZXE7Ijoi4omDIiwic2ltZzsiOiLiqp4iLCJzaW1nRTsiOiLiqqAiLCJzaW1sOyI6IuKqnSIsInNpbWxFOyI6IuKqnyIsInNpbW5lOyI6IuKJhiIsInNpbXBsdXM7Ijoi4qikIiwic2ltcmFycjsiOiLipbIiLCJzbGFycjsiOiLihpAiLCJTbWFsbENpcmNsZTsiOiLiiJgiLCJzbWFsbHNldG1pbnVzOyI6IuKIliIsInNtYXNocDsiOiLiqLMiLCJzbWVwYXJzbDsiOiLip6QiLCJzbWlkOyI6IuKIoyIsInNtaWxlOyI6IuKMoyIsInNtdDsiOiLiqqoiLCJzbXRlOyI6IuKqrCIsInNtdGVzOyI6IuKqrO+4gCIsIlNPRlRjeTsiOiLQrCIsInNvZnRjeTsiOiLRjCIsInNvbGJhcjsiOiLijL8iLCJzb2xiOyI6IuKnhCIsInNvbDsiOiIvIiwiU29wZjsiOiLwnZWKIiwic29wZjsiOiLwnZWkIiwic3BhZGVzOyI6IuKZoCIsInNwYWRlc3VpdDsiOiLimaAiLCJzcGFyOyI6IuKIpSIsInNxY2FwOyI6IuKKkyIsInNxY2FwczsiOiLiipPvuIAiLCJzcWN1cDsiOiLiipQiLCJzcWN1cHM7Ijoi4oqU77iAIiwiU3FydDsiOiLiiJoiLCJzcXN1YjsiOiLiio8iLCJzcXN1YmU7Ijoi4oqRIiwic3FzdWJzZXQ7Ijoi4oqPIiwic3FzdWJzZXRlcTsiOiLiipEiLCJzcXN1cDsiOiLiipAiLCJzcXN1cGU7Ijoi4oqSIiwic3FzdXBzZXQ7Ijoi4oqQIiwic3FzdXBzZXRlcTsiOiLiipIiLCJzcXVhcmU7Ijoi4pahIiwiU3F1YXJlOyI6IuKWoSIsIlNxdWFyZUludGVyc2VjdGlvbjsiOiLiipMiLCJTcXVhcmVTdWJzZXQ7Ijoi4oqPIiwiU3F1YXJlU3Vic2V0RXF1YWw7Ijoi4oqRIiwiU3F1YXJlU3VwZXJzZXQ7Ijoi4oqQIiwiU3F1YXJlU3VwZXJzZXRFcXVhbDsiOiLiipIiLCJTcXVhcmVVbmlvbjsiOiLiipQiLCJzcXVhcmY7Ijoi4paqIiwic3F1OyI6IuKWoSIsInNxdWY7Ijoi4paqIiwic3JhcnI7Ijoi4oaSIiwiU3NjcjsiOiLwnZKuIiwic3NjcjsiOiLwnZOIIiwic3NldG1uOyI6IuKIliIsInNzbWlsZTsiOiLijKMiLCJzc3RhcmY7Ijoi4ouGIiwiU3RhcjsiOiLii4YiLCJzdGFyOyI6IuKYhiIsInN0YXJmOyI6IuKYhSIsInN0cmFpZ2h0ZXBzaWxvbjsiOiLPtSIsInN0cmFpZ2h0cGhpOyI6Is+VIiwic3RybnM7Ijoiwq8iLCJzdWI7Ijoi4oqCIiwiU3ViOyI6IuKLkCIsInN1YmRvdDsiOiLiqr0iLCJzdWJFOyI6IuKrhSIsInN1YmU7Ijoi4oqGIiwic3ViZWRvdDsiOiLiq4MiLCJzdWJtdWx0OyI6IuKrgSIsInN1Ym5FOyI6IuKriyIsInN1Ym5lOyI6IuKKiiIsInN1YnBsdXM7Ijoi4qq/Iiwic3VicmFycjsiOiLipbkiLCJzdWJzZXQ7Ijoi4oqCIiwiU3Vic2V0OyI6IuKLkCIsInN1YnNldGVxOyI6IuKKhiIsInN1YnNldGVxcTsiOiLiq4UiLCJTdWJzZXRFcXVhbDsiOiLiioYiLCJzdWJzZXRuZXE7Ijoi4oqKIiwic3Vic2V0bmVxcTsiOiLiq4siLCJzdWJzaW07Ijoi4quHIiwic3Vic3ViOyI6IuKrlSIsInN1YnN1cDsiOiLiq5MiLCJzdWNjYXBwcm94OyI6IuKquCIsInN1Y2M7Ijoi4om7Iiwic3VjY2N1cmx5ZXE7Ijoi4om9IiwiU3VjY2VlZHM7Ijoi4om7IiwiU3VjY2VlZHNFcXVhbDsiOiLiqrAiLCJTdWNjZWVkc1NsYW50RXF1YWw7Ijoi4om9IiwiU3VjY2VlZHNUaWxkZTsiOiLiib8iLCJzdWNjZXE7Ijoi4qqwIiwic3VjY25hcHByb3g7Ijoi4qq6Iiwic3VjY25lcXE7Ijoi4qq2Iiwic3VjY25zaW07Ijoi4oupIiwic3VjY3NpbTsiOiLiib8iLCJTdWNoVGhhdDsiOiLiiIsiLCJzdW07Ijoi4oiRIiwiU3VtOyI6IuKIkSIsInN1bmc7Ijoi4pmqIiwic3VwMTsiOiLCuSIsc3VwMToiwrkiLCJzdXAyOyI6IsKyIixzdXAyOiLCsiIsInN1cDM7IjoiwrMiLHN1cDM6IsKzIiwic3VwOyI6IuKKgyIsIlN1cDsiOiLii5EiLCJzdXBkb3Q7Ijoi4qq+Iiwic3VwZHN1YjsiOiLiq5giLCJzdXBFOyI6IuKrhiIsInN1cGU7Ijoi4oqHIiwic3VwZWRvdDsiOiLiq4QiLCJTdXBlcnNldDsiOiLiioMiLCJTdXBlcnNldEVxdWFsOyI6IuKKhyIsInN1cGhzb2w7Ijoi4p+JIiwic3VwaHN1YjsiOiLiq5ciLCJzdXBsYXJyOyI6IuKluyIsInN1cG11bHQ7Ijoi4quCIiwic3VwbkU7Ijoi4quMIiwic3VwbmU7Ijoi4oqLIiwic3VwcGx1czsiOiLiq4AiLCJzdXBzZXQ7Ijoi4oqDIiwiU3Vwc2V0OyI6IuKLkSIsInN1cHNldGVxOyI6IuKKhyIsInN1cHNldGVxcTsiOiLiq4YiLCJzdXBzZXRuZXE7Ijoi4oqLIiwic3Vwc2V0bmVxcTsiOiLiq4wiLCJzdXBzaW07Ijoi4quIIiwic3Vwc3ViOyI6IuKrlCIsInN1cHN1cDsiOiLiq5YiLCJzd2FyaGs7Ijoi4qSmIiwic3dhcnI7Ijoi4oaZIiwic3dBcnI7Ijoi4oeZIiwic3dhcnJvdzsiOiLihpkiLCJzd253YXI7Ijoi4qSqIiwic3psaWc7Ijoiw58iLHN6bGlnOiLDnyIsIlRhYjsiOiJcdCIsInRhcmdldDsiOiLijJYiLCJUYXU7IjoizqQiLCJ0YXU7Ijoiz4QiLCJ0YnJrOyI6IuKOtCIsIlRjYXJvbjsiOiLFpCIsInRjYXJvbjsiOiLFpSIsIlRjZWRpbDsiOiLFoiIsInRjZWRpbDsiOiLFoyIsIlRjeTsiOiLQoiIsInRjeTsiOiLRgiIsInRkb3Q7Ijoi4oObIiwidGVscmVjOyI6IuKMlSIsIlRmcjsiOiLwnZSXIiwidGZyOyI6IvCdlLEiLCJ0aGVyZTQ7Ijoi4oi0IiwidGhlcmVmb3JlOyI6IuKItCIsIlRoZXJlZm9yZTsiOiLiiLQiLCJUaGV0YTsiOiLOmCIsInRoZXRhOyI6Is64IiwidGhldGFzeW07Ijoiz5EiLCJ0aGV0YXY7Ijoiz5EiLCJ0aGlja2FwcHJveDsiOiLiiYgiLCJ0aGlja3NpbTsiOiLiiLwiLCJUaGlja1NwYWNlOyI6IuKBn+KAiiIsIlRoaW5TcGFjZTsiOiLigIkiLCJ0aGluc3A7Ijoi4oCJIiwidGhrYXA7Ijoi4omIIiwidGhrc2ltOyI6IuKIvCIsIlRIT1JOOyI6IsOeIixUSE9STjoiw54iLCJ0aG9ybjsiOiLDviIsdGhvcm46IsO+IiwidGlsZGU7Ijoiy5wiLCJUaWxkZTsiOiLiiLwiLCJUaWxkZUVxdWFsOyI6IuKJgyIsIlRpbGRlRnVsbEVxdWFsOyI6IuKJhSIsIlRpbGRlVGlsZGU7Ijoi4omIIiwidGltZXNiYXI7Ijoi4qixIiwidGltZXNiOyI6IuKKoCIsInRpbWVzOyI6IsOXIix0aW1lczoiw5ciLCJ0aW1lc2Q7Ijoi4qiwIiwidGludDsiOiLiiK0iLCJ0b2VhOyI6IuKkqCIsInRvcGJvdDsiOiLijLYiLCJ0b3BjaXI7Ijoi4quxIiwidG9wOyI6IuKKpCIsIlRvcGY7Ijoi8J2ViyIsInRvcGY7Ijoi8J2VpSIsInRvcGZvcms7Ijoi4quaIiwidG9zYTsiOiLipKkiLCJ0cHJpbWU7Ijoi4oC0IiwidHJhZGU7Ijoi4oSiIiwiVFJBREU7Ijoi4oSiIiwidHJpYW5nbGU7Ijoi4pa1IiwidHJpYW5nbGVkb3duOyI6IuKWvyIsInRyaWFuZ2xlbGVmdDsiOiLil4MiLCJ0cmlhbmdsZWxlZnRlcTsiOiLiirQiLCJ0cmlhbmdsZXE7Ijoi4omcIiwidHJpYW5nbGVyaWdodDsiOiLilrkiLCJ0cmlhbmdsZXJpZ2h0ZXE7Ijoi4oq1IiwidHJpZG90OyI6IuKXrCIsInRyaWU7Ijoi4omcIiwidHJpbWludXM7Ijoi4qi6IiwiVHJpcGxlRG90OyI6IuKDmyIsInRyaXBsdXM7Ijoi4qi5IiwidHJpc2I7Ijoi4qeNIiwidHJpdGltZTsiOiLiqLsiLCJ0cnBleml1bTsiOiLij6IiLCJUc2NyOyI6IvCdkq8iLCJ0c2NyOyI6IvCdk4kiLCJUU2N5OyI6ItCmIiwidHNjeTsiOiLRhiIsIlRTSGN5OyI6ItCLIiwidHNoY3k7Ijoi0ZsiLCJUc3Ryb2s7IjoixaYiLCJ0c3Ryb2s7IjoixaciLCJ0d2l4dDsiOiLiiawiLCJ0d29oZWFkbGVmdGFycm93OyI6IuKGniIsInR3b2hlYWRyaWdodGFycm93OyI6IuKGoCIsIlVhY3V0ZTsiOiLDmiIsVWFjdXRlOiLDmiIsInVhY3V0ZTsiOiLDuiIsdWFjdXRlOiLDuiIsInVhcnI7Ijoi4oaRIiwiVWFycjsiOiLihp8iLCJ1QXJyOyI6IuKHkSIsIlVhcnJvY2lyOyI6IuKliSIsIlVicmN5OyI6ItCOIiwidWJyY3k7Ijoi0Z4iLCJVYnJldmU7IjoixawiLCJ1YnJldmU7Ijoixa0iLCJVY2lyYzsiOiLDmyIsVWNpcmM6IsObIiwidWNpcmM7Ijoiw7siLHVjaXJjOiLDuyIsIlVjeTsiOiLQoyIsInVjeTsiOiLRgyIsInVkYXJyOyI6IuKHhSIsIlVkYmxhYzsiOiLFsCIsInVkYmxhYzsiOiLFsSIsInVkaGFyOyI6IuKlriIsInVmaXNodDsiOiLipb4iLCJVZnI7Ijoi8J2UmCIsInVmcjsiOiLwnZSyIiwiVWdyYXZlOyI6IsOZIixVZ3JhdmU6IsOZIiwidWdyYXZlOyI6IsO5Iix1Z3JhdmU6IsO5IiwidUhhcjsiOiLipaMiLCJ1aGFybDsiOiLihr8iLCJ1aGFycjsiOiLihr4iLCJ1aGJsazsiOiLiloAiLCJ1bGNvcm47Ijoi4oycIiwidWxjb3JuZXI7Ijoi4oycIiwidWxjcm9wOyI6IuKMjyIsInVsdHJpOyI6IuKXuCIsIlVtYWNyOyI6IsWqIiwidW1hY3I7IjoixasiLCJ1bWw7IjoiwqgiLHVtbDoiwqgiLCJVbmRlckJhcjsiOiJfIiwiVW5kZXJCcmFjZTsiOiLij58iLCJVbmRlckJyYWNrZXQ7Ijoi4o61IiwiVW5kZXJQYXJlbnRoZXNpczsiOiLij50iLCJVbmlvbjsiOiLii4MiLCJVbmlvblBsdXM7Ijoi4oqOIiwiVW9nb247IjoixbIiLCJ1b2dvbjsiOiLFsyIsIlVvcGY7Ijoi8J2VjCIsInVvcGY7Ijoi8J2VpiIsIlVwQXJyb3dCYXI7Ijoi4qSSIiwidXBhcnJvdzsiOiLihpEiLCJVcEFycm93OyI6IuKGkSIsIlVwYXJyb3c7Ijoi4oeRIiwiVXBBcnJvd0Rvd25BcnJvdzsiOiLih4UiLCJ1cGRvd25hcnJvdzsiOiLihpUiLCJVcERvd25BcnJvdzsiOiLihpUiLCJVcGRvd25hcnJvdzsiOiLih5UiLCJVcEVxdWlsaWJyaXVtOyI6IuKlriIsInVwaGFycG9vbmxlZnQ7Ijoi4oa/IiwidXBoYXJwb29ucmlnaHQ7Ijoi4oa+IiwidXBsdXM7Ijoi4oqOIiwiVXBwZXJMZWZ0QXJyb3c7Ijoi4oaWIiwiVXBwZXJSaWdodEFycm93OyI6IuKGlyIsInVwc2k7Ijoiz4UiLCJVcHNpOyI6Is+SIiwidXBzaWg7Ijoiz5IiLCJVcHNpbG9uOyI6Is6lIiwidXBzaWxvbjsiOiLPhSIsIlVwVGVlQXJyb3c7Ijoi4oalIiwiVXBUZWU7Ijoi4oqlIiwidXB1cGFycm93czsiOiLih4giLCJ1cmNvcm47Ijoi4oydIiwidXJjb3JuZXI7Ijoi4oydIiwidXJjcm9wOyI6IuKMjiIsIlVyaW5nOyI6IsWuIiwidXJpbmc7Ijoixa8iLCJ1cnRyaTsiOiLil7kiLCJVc2NyOyI6IvCdkrAiLCJ1c2NyOyI6IvCdk4oiLCJ1dGRvdDsiOiLii7AiLCJVdGlsZGU7IjoixagiLCJ1dGlsZGU7IjoixakiLCJ1dHJpOyI6IuKWtSIsInV0cmlmOyI6IuKWtCIsInV1YXJyOyI6IuKHiCIsIlV1bWw7Ijoiw5wiLFV1bWw6IsOcIiwidXVtbDsiOiLDvCIsdXVtbDoiw7wiLCJ1d2FuZ2xlOyI6IuKmpyIsInZhbmdydDsiOiLippwiLCJ2YXJlcHNpbG9uOyI6Is+1IiwidmFya2FwcGE7Ijoiz7AiLCJ2YXJub3RoaW5nOyI6IuKIhSIsInZhcnBoaTsiOiLPlSIsInZhcnBpOyI6Is+WIiwidmFycHJvcHRvOyI6IuKInSIsInZhcnI7Ijoi4oaVIiwidkFycjsiOiLih5UiLCJ2YXJyaG87Ijoiz7EiLCJ2YXJzaWdtYTsiOiLPgiIsInZhcnN1YnNldG5lcTsiOiLiiorvuIAiLCJ2YXJzdWJzZXRuZXFxOyI6IuKri++4gCIsInZhcnN1cHNldG5lcTsiOiLiiovvuIAiLCJ2YXJzdXBzZXRuZXFxOyI6IuKrjO+4gCIsInZhcnRoZXRhOyI6Is+RIiwidmFydHJpYW5nbGVsZWZ0OyI6IuKKsiIsInZhcnRyaWFuZ2xlcmlnaHQ7Ijoi4oqzIiwidkJhcjsiOiLiq6giLCJWYmFyOyI6IuKrqyIsInZCYXJ2OyI6IuKrqSIsIlZjeTsiOiLQkiIsInZjeTsiOiLQsiIsInZkYXNoOyI6IuKKoiIsInZEYXNoOyI6IuKKqCIsIlZkYXNoOyI6IuKKqSIsIlZEYXNoOyI6IuKKqyIsIlZkYXNobDsiOiLiq6YiLCJ2ZWViYXI7Ijoi4oq7IiwidmVlOyI6IuKIqCIsIlZlZTsiOiLii4EiLCJ2ZWVlcTsiOiLiiZoiLCJ2ZWxsaXA7Ijoi4ouuIiwidmVyYmFyOyI6InwiLCJWZXJiYXI7Ijoi4oCWIiwidmVydDsiOiJ8IiwiVmVydDsiOiLigJYiLCJWZXJ0aWNhbEJhcjsiOiLiiKMiLCJWZXJ0aWNhbExpbmU7IjoifCIsIlZlcnRpY2FsU2VwYXJhdG9yOyI6IuKdmCIsIlZlcnRpY2FsVGlsZGU7Ijoi4omAIiwiVmVyeVRoaW5TcGFjZTsiOiLigIoiLCJWZnI7Ijoi8J2UmSIsInZmcjsiOiLwnZSzIiwidmx0cmk7Ijoi4oqyIiwidm5zdWI7Ijoi4oqC4oOSIiwidm5zdXA7Ijoi4oqD4oOSIiwiVm9wZjsiOiLwnZWNIiwidm9wZjsiOiLwnZWnIiwidnByb3A7Ijoi4oidIiwidnJ0cmk7Ijoi4oqzIiwiVnNjcjsiOiLwnZKxIiwidnNjcjsiOiLwnZOLIiwidnN1Ym5FOyI6IuKri++4gCIsInZzdWJuZTsiOiLiiorvuIAiLCJ2c3VwbkU7Ijoi4quM77iAIiwidnN1cG5lOyI6IuKKi++4gCIsIlZ2ZGFzaDsiOiLiiqoiLCJ2emlnemFnOyI6IuKmmiIsIldjaXJjOyI6IsW0Iiwid2NpcmM7IjoixbUiLCJ3ZWRiYXI7Ijoi4qmfIiwid2VkZ2U7Ijoi4oinIiwiV2VkZ2U7Ijoi4ouAIiwid2VkZ2VxOyI6IuKJmSIsIndlaWVycDsiOiLihJgiLCJXZnI7Ijoi8J2UmiIsIndmcjsiOiLwnZS0IiwiV29wZjsiOiLwnZWOIiwid29wZjsiOiLwnZWoIiwid3A7Ijoi4oSYIiwid3I7Ijoi4omAIiwid3JlYXRoOyI6IuKJgCIsIldzY3I7Ijoi8J2SsiIsIndzY3I7Ijoi8J2TjCIsInhjYXA7Ijoi4ouCIiwieGNpcmM7Ijoi4pevIiwieGN1cDsiOiLii4MiLCJ4ZHRyaTsiOiLilr0iLCJYZnI7Ijoi8J2UmyIsInhmcjsiOiLwnZS1IiwieGhhcnI7Ijoi4p+3IiwieGhBcnI7Ijoi4p+6IiwiWGk7Ijoizp4iLCJ4aTsiOiLOviIsInhsYXJyOyI6IuKftSIsInhsQXJyOyI6IuKfuCIsInhtYXA7Ijoi4p+8IiwieG5pczsiOiLii7siLCJ4b2RvdDsiOiLiqIAiLCJYb3BmOyI6IvCdlY8iLCJ4b3BmOyI6IvCdlakiLCJ4b3BsdXM7Ijoi4qiBIiwieG90aW1lOyI6IuKogiIsInhyYXJyOyI6IuKftiIsInhyQXJyOyI6IuKfuSIsIlhzY3I7Ijoi8J2SsyIsInhzY3I7Ijoi8J2TjSIsInhzcWN1cDsiOiLiqIYiLCJ4dXBsdXM7Ijoi4qiEIiwieHV0cmk7Ijoi4pazIiwieHZlZTsiOiLii4EiLCJ4d2VkZ2U7Ijoi4ouAIiwiWWFjdXRlOyI6IsOdIixZYWN1dGU6IsOdIiwieWFjdXRlOyI6IsO9Iix5YWN1dGU6IsO9IiwiWUFjeTsiOiLQryIsInlhY3k7Ijoi0Y8iLCJZY2lyYzsiOiLFtiIsInljaXJjOyI6IsW3IiwiWWN5OyI6ItCrIiwieWN5OyI6ItGLIiwieWVuOyI6IsKlIix5ZW46IsKlIiwiWWZyOyI6IvCdlJwiLCJ5ZnI7Ijoi8J2UtiIsIllJY3k7Ijoi0IciLCJ5aWN5OyI6ItGXIiwiWW9wZjsiOiLwnZWQIiwieW9wZjsiOiLwnZWqIiwiWXNjcjsiOiLwnZK0IiwieXNjcjsiOiLwnZOOIiwiWVVjeTsiOiLQriIsInl1Y3k7Ijoi0Y4iLCJ5dW1sOyI6IsO/Iix5dW1sOiLDvyIsIll1bWw7IjoixbgiLCJaYWN1dGU7IjoixbkiLCJ6YWN1dGU7IjoixboiLCJaY2Fyb247Ijoixb0iLCJ6Y2Fyb247Ijoixb4iLCJaY3k7Ijoi0JciLCJ6Y3k7Ijoi0LciLCJaZG90OyI6IsW7IiwiemRvdDsiOiLFvCIsInplZXRyZjsiOiLihKgiLCJaZXJvV2lkdGhTcGFjZTsiOiLigIsiLCJaZXRhOyI6Is6WIiwiemV0YTsiOiLOtiIsInpmcjsiOiLwnZS3IiwiWmZyOyI6IuKEqCIsIlpIY3k7Ijoi0JYiLCJ6aGN5OyI6ItC2IiwiemlncmFycjsiOiLih50iLCJ6b3BmOyI6IvCdlasiLCJab3BmOyI6IuKEpCIsIlpzY3I7Ijoi8J2StSIsInpzY3I7Ijoi8J2TjyIsInp3ajsiOiLigI0iLCJ6d25qOyI6IuKAjCJ9XG59LHt9XSwxMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUpe2Z1bmN0aW9uIHJlcGxhY2VyKGtleSx2YWx1ZSl7cmV0dXJuIHV0aWwuaXNVbmRlZmluZWQodmFsdWUpPyIiK3ZhbHVlOiF1dGlsLmlzTnVtYmVyKHZhbHVlKXx8IWlzTmFOKHZhbHVlKSYmaXNGaW5pdGUodmFsdWUpP3V0aWwuaXNGdW5jdGlvbih2YWx1ZSl8fHV0aWwuaXNSZWdFeHAodmFsdWUpPyIiK3ZhbHVlOnZhbHVlOiIiK3ZhbHVlfWZ1bmN0aW9uIHRydW5jYXRlKHMsbil7cmV0dXJuIHV0aWwuaXNTdHJpbmcocyk/bj5zLmxlbmd0aD9zOnMuc2xpY2UoMCxuKTpzfWZ1bmN0aW9uIGdldE1lc3NhZ2Uoc2VsZil7cmV0dXJuIHRydW5jYXRlKEpTT04uc3RyaW5naWZ5KHNlbGYuYWN0dWFsLHJlcGxhY2VyKSwxMjgpKyIgIitzZWxmLm9wZXJhdG9yKyIgIit0cnVuY2F0ZShKU09OLnN0cmluZ2lmeShzZWxmLmV4cGVjdGVkLHJlcGxhY2VyKSwxMjgpfWZ1bmN0aW9uIGZhaWwoYWN0dWFsLGV4cGVjdGVkLG1lc3NhZ2Usb3BlcmF0b3Isc3RhY2tTdGFydEZ1bmN0aW9uKXt0aHJvdyBuZXcgYXNzZXJ0LkFzc2VydGlvbkVycm9yKHttZXNzYWdlOm1lc3NhZ2UsYWN0dWFsOmFjdHVhbCxleHBlY3RlZDpleHBlY3RlZCxvcGVyYXRvcjpvcGVyYXRvcixzdGFja1N0YXJ0RnVuY3Rpb246c3RhY2tTdGFydEZ1bmN0aW9ufSl9ZnVuY3Rpb24gb2sodmFsdWUsbWVzc2FnZSl7dmFsdWV8fGZhaWwodmFsdWUsITAsbWVzc2FnZSwiPT0iLGFzc2VydC5vayl9ZnVuY3Rpb24gX2RlZXBFcXVhbChhY3R1YWwsZXhwZWN0ZWQpe2lmKGFjdHVhbD09PWV4cGVjdGVkKXJldHVybiEwO2lmKHV0aWwuaXNCdWZmZXIoYWN0dWFsKSYmdXRpbC5pc0J1ZmZlcihleHBlY3RlZCkpe2lmKGFjdHVhbC5sZW5ndGghPWV4cGVjdGVkLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGk9MDthY3R1YWwubGVuZ3RoPmk7aSsrKWlmKGFjdHVhbFtpXSE9PWV4cGVjdGVkW2ldKXJldHVybiExO3JldHVybiEwfXJldHVybiB1dGlsLmlzRGF0ZShhY3R1YWwpJiZ1dGlsLmlzRGF0ZShleHBlY3RlZCk/YWN0dWFsLmdldFRpbWUoKT09PWV4cGVjdGVkLmdldFRpbWUoKTp1dGlsLmlzUmVnRXhwKGFjdHVhbCkmJnV0aWwuaXNSZWdFeHAoZXhwZWN0ZWQpP2FjdHVhbC5zb3VyY2U9PT1leHBlY3RlZC5zb3VyY2UmJmFjdHVhbC5nbG9iYWw9PT1leHBlY3RlZC5nbG9iYWwmJmFjdHVhbC5tdWx0aWxpbmU9PT1leHBlY3RlZC5tdWx0aWxpbmUmJmFjdHVhbC5sYXN0SW5kZXg9PT1leHBlY3RlZC5sYXN0SW5kZXgmJmFjdHVhbC5pZ25vcmVDYXNlPT09ZXhwZWN0ZWQuaWdub3JlQ2FzZTp1dGlsLmlzT2JqZWN0KGFjdHVhbCl8fHV0aWwuaXNPYmplY3QoZXhwZWN0ZWQpP29iakVxdWl2KGFjdHVhbCxleHBlY3RlZCk6YWN0dWFsPT1leHBlY3RlZH1mdW5jdGlvbiBpc0FyZ3VtZW50cyhvYmplY3Qpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KX1mdW5jdGlvbiBvYmpFcXVpdihhLGIpe2lmKHV0aWwuaXNOdWxsT3JVbmRlZmluZWQoYSl8fHV0aWwuaXNOdWxsT3JVbmRlZmluZWQoYikpcmV0dXJuITE7aWYoYS5wcm90b3R5cGUhPT1iLnByb3RvdHlwZSlyZXR1cm4hMTtpZihpc0FyZ3VtZW50cyhhKSlyZXR1cm4gaXNBcmd1bWVudHMoYik/KGE9cFNsaWNlLmNhbGwoYSksYj1wU2xpY2UuY2FsbChiKSxfZGVlcEVxdWFsKGEsYikpOiExO3RyeXt2YXIga2V5LGksa2E9b2JqZWN0S2V5cyhhKSxrYj1vYmplY3RLZXlzKGIpfWNhdGNoKGUpe3JldHVybiExfWlmKGthLmxlbmd0aCE9a2IubGVuZ3RoKXJldHVybiExO2ZvcihrYS5zb3J0KCksa2Iuc29ydCgpLGk9a2EubGVuZ3RoLTE7aT49MDtpLS0paWYoa2FbaV0hPWtiW2ldKXJldHVybiExO2ZvcihpPWthLmxlbmd0aC0xO2k+PTA7aS0tKWlmKGtleT1rYVtpXSwhX2RlZXBFcXVhbChhW2tleV0sYltrZXldKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsZXhwZWN0ZWQpe3JldHVybiBhY3R1YWwmJmV4cGVjdGVkPyJbb2JqZWN0IFJlZ0V4cF0iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXhwZWN0ZWQpP2V4cGVjdGVkLnRlc3QoYWN0dWFsKTphY3R1YWwgaW5zdGFuY2VvZiBleHBlY3RlZD8hMDpleHBlY3RlZC5jYWxsKHt9LGFjdHVhbCk9PT0hMD8hMDohMTohMX1mdW5jdGlvbiBfdGhyb3dzKHNob3VsZFRocm93LGJsb2NrLGV4cGVjdGVkLG1lc3NhZ2Upe3ZhciBhY3R1YWw7dXRpbC5pc1N0cmluZyhleHBlY3RlZCkmJihtZXNzYWdlPWV4cGVjdGVkLGV4cGVjdGVkPW51bGwpO3RyeXtibG9jaygpfWNhdGNoKGUpe2FjdHVhbD1lfWlmKG1lc3NhZ2U9KGV4cGVjdGVkJiZleHBlY3RlZC5uYW1lPyIgKCIrZXhwZWN0ZWQubmFtZSsiKS4iOiIuIikrKG1lc3NhZ2U/IiAiK21lc3NhZ2U6Ii4iKSxzaG91bGRUaHJvdyYmIWFjdHVhbCYmZmFpbChhY3R1YWwsZXhwZWN0ZWQsIk1pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uIittZXNzYWdlKSwhc2hvdWxkVGhyb3cmJmV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCxleHBlY3RlZCkmJmZhaWwoYWN0dWFsLGV4cGVjdGVkLCJHb3QgdW53YW50ZWQgZXhjZXB0aW9uIittZXNzYWdlKSxzaG91bGRUaHJvdyYmYWN0dWFsJiZleHBlY3RlZCYmIWV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCxleHBlY3RlZCl8fCFzaG91bGRUaHJvdyYmYWN0dWFsKXRocm93IGFjdHVhbH12YXIgdXRpbD1fZGVyZXFfKCJ1dGlsLyIpLHBTbGljZT1BcnJheS5wcm90b3R5cGUuc2xpY2UsaGFzT3duPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYXNzZXJ0PW1vZHVsZS5leHBvcnRzPW9rO2Fzc2VydC5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbihvcHRpb25zKXt0aGlzLm5hbWU9IkFzc2VydGlvbkVycm9yIix0aGlzLmFjdHVhbD1vcHRpb25zLmFjdHVhbCx0aGlzLmV4cGVjdGVkPW9wdGlvbnMuZXhwZWN0ZWQsdGhpcy5vcGVyYXRvcj1vcHRpb25zLm9wZXJhdG9yLG9wdGlvbnMubWVzc2FnZT8odGhpcy5tZXNzYWdlPW9wdGlvbnMubWVzc2FnZSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITEpOih0aGlzLm1lc3NhZ2U9Z2V0TWVzc2FnZSh0aGlzKSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITApO3ZhciBzdGFja1N0YXJ0RnVuY3Rpb249b3B0aW9ucy5zdGFja1N0YXJ0RnVuY3Rpb258fGZhaWw7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxzdGFja1N0YXJ0RnVuY3Rpb24pO2Vsc2V7dmFyIGVycj1FcnJvcigpO2lmKGVyci5zdGFjayl7dmFyIG91dD1lcnIuc3RhY2ssZm5fbmFtZT1zdGFja1N0YXJ0RnVuY3Rpb24ubmFtZSxpZHg9b3V0LmluZGV4T2YoIlxcbiIrZm5fbmFtZSk7aWYoaWR4Pj0wKXt2YXIgbmV4dF9saW5lPW91dC5pbmRleE9mKCJcXG4iLGlkeCsxKTtvdXQ9b3V0LnN1YnN0cmluZyhuZXh0X2xpbmUrMSl9dGhpcy5zdGFjaz1vdXR9fX0sdXRpbC5pbmhlcml0cyhhc3NlcnQuQXNzZXJ0aW9uRXJyb3IsRXJyb3IpLGFzc2VydC5mYWlsPWZhaWwsYXNzZXJ0Lm9rPW9rLGFzc2VydC5lcXVhbD1mdW5jdGlvbihhY3R1YWwsZXhwZWN0ZWQsbWVzc2FnZSl7YWN0dWFsIT1leHBlY3RlZCYmZmFpbChhY3R1YWwsZXhwZWN0ZWQsbWVzc2FnZSwiPT0iLGFzc2VydC5lcXVhbCl9LGFzc2VydC5ub3RFcXVhbD1mdW5jdGlvbihhY3R1YWwsZXhwZWN0ZWQsbWVzc2FnZSl7YWN0dWFsPT1leHBlY3RlZCYmZmFpbChhY3R1YWwsZXhwZWN0ZWQsbWVzc2FnZSwiIT0iLGFzc2VydC5ub3RFcXVhbCl9LGFzc2VydC5kZWVwRXF1YWw9ZnVuY3Rpb24oYWN0dWFsLGV4cGVjdGVkLG1lc3NhZ2Upe19kZWVwRXF1YWwoYWN0dWFsLGV4cGVjdGVkKXx8ZmFpbChhY3R1YWwsZXhwZWN0ZWQsbWVzc2FnZSwiZGVlcEVxdWFsIixhc3NlcnQuZGVlcEVxdWFsKX0sYXNzZXJ0Lm5vdERlZXBFcXVhbD1mdW5jdGlvbihhY3R1YWwsZXhwZWN0ZWQsbWVzc2FnZSl7X2RlZXBFcXVhbChhY3R1YWwsZXhwZWN0ZWQpJiZmYWlsKGFjdHVhbCxleHBlY3RlZCxtZXNzYWdlLCJub3REZWVwRXF1YWwiLGFzc2VydC5ub3REZWVwRXF1YWwpfSxhc3NlcnQuc3RyaWN0RXF1YWw9ZnVuY3Rpb24oYWN0dWFsLGV4cGVjdGVkLG1lc3NhZ2Upe2FjdHVhbCE9PWV4cGVjdGVkJiZmYWlsKGFjdHVhbCxleHBlY3RlZCxtZXNzYWdlLCI9PT0iLGFzc2VydC5zdHJpY3RFcXVhbCl9LGFzc2VydC5ub3RTdHJpY3RFcXVhbD1mdW5jdGlvbihhY3R1YWwsZXhwZWN0ZWQsbWVzc2FnZSl7YWN0dWFsPT09ZXhwZWN0ZWQmJmZhaWwoYWN0dWFsLGV4cGVjdGVkLG1lc3NhZ2UsIiE9PSIsYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKX0sYXNzZXJ0LnRocm93cz1mdW5jdGlvbigpe190aHJvd3MuYXBwbHkodGhpcyxbITBdLmNvbmNhdChwU2xpY2UuY2FsbChhcmd1bWVudHMpKSl9LGFzc2VydC5kb2VzTm90VGhyb3c9ZnVuY3Rpb24oKXtfdGhyb3dzLmFwcGx5KHRoaXMsWyExXS5jb25jYXQocFNsaWNlLmNhbGwoYXJndW1lbnRzKSkpfSxhc3NlcnQuaWZFcnJvcj1mdW5jdGlvbihlcnIpe2lmKGVycil0aHJvdyBlcnJ9O3ZhciBvYmplY3RLZXlzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihvYmope3ZhciBrZXlzPVtdO2Zvcih2YXIga2V5IGluIG9iailoYXNPd24uY2FsbChvYmosa2V5KSYma2V5cy5wdXNoKGtleSk7cmV0dXJuIGtleXN9fSx7InV0aWwvIjoxNX1dLDE0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSl7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oYXJnKXtyZXR1cm4gYXJnJiYib2JqZWN0Ij09dHlwZW9mIGFyZyYmImZ1bmN0aW9uIj09dHlwZW9mIGFyZy5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgYXJnLmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBhcmcucmVhZFVJbnQ4fX0se31dLDE1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsoZnVuY3Rpb24ocHJvY2VzcyxnbG9iYWwpe2Z1bmN0aW9uIGluc3BlY3Qob2JqLG9wdHMpe3ZhciBjdHg9e3NlZW46W10sc3R5bGl6ZTpzdHlsaXplTm9Db2xvcn07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihjdHguZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYoY3R4LmNvbG9ycz1hcmd1bWVudHNbM10pLGlzQm9vbGVhbihvcHRzKT9jdHguc2hvd0hpZGRlbj1vcHRzOm9wdHMmJmV4cG9ydHMuX2V4dGVuZChjdHgsb3B0cyksaXNVbmRlZmluZWQoY3R4LnNob3dIaWRkZW4pJiYoY3R4LnNob3dIaWRkZW49ITEpLGlzVW5kZWZpbmVkKGN0eC5kZXB0aCkmJihjdHguZGVwdGg9MiksaXNVbmRlZmluZWQoY3R4LmNvbG9ycykmJihjdHguY29sb3JzPSExKSxpc1VuZGVmaW5lZChjdHguY3VzdG9tSW5zcGVjdCkmJihjdHguY3VzdG9tSW5zcGVjdD0hMCksY3R4LmNvbG9ycyYmKGN0eC5zdHlsaXplPXN0eWxpemVXaXRoQ29sb3IpLGZvcm1hdFZhbHVlKGN0eCxvYmosY3R4LmRlcHRoKX1mdW5jdGlvbiBzdHlsaXplV2l0aENvbG9yKHN0cixzdHlsZVR5cGUpe3ZhciBzdHlsZT1pbnNwZWN0LnN0eWxlc1tzdHlsZVR5cGVdO3JldHVybiBzdHlsZT8iG1siK2luc3BlY3QuY29sb3JzW3N0eWxlXVswXSsibSIrc3RyKyIbWyIraW5zcGVjdC5jb2xvcnNbc3R5bGVdWzFdKyJtIjpzdHJ9ZnVuY3Rpb24gc3R5bGl6ZU5vQ29sb3Ioc3RyKXtyZXR1cm4gc3RyfWZ1bmN0aW9uIGFycmF5VG9IYXNoKGFycmF5KXt2YXIgaGFzaD17fTtyZXR1cm4gYXJyYXkuZm9yRWFjaChmdW5jdGlvbih2YWwpe2hhc2hbdmFsXT0hMH0pLGhhc2h9ZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LHZhbHVlLHJlY3Vyc2VUaW1lcyl7aWYoY3R4LmN1c3RvbUluc3BlY3QmJnZhbHVlJiZpc0Z1bmN0aW9uKHZhbHVlLmluc3BlY3QpJiZ2YWx1ZS5pbnNwZWN0IT09ZXhwb3J0cy5pbnNwZWN0JiYoIXZhbHVlLmNvbnN0cnVjdG9yfHx2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT12YWx1ZSkpe3ZhciByZXQ9dmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsY3R4KTtyZXR1cm4gaXNTdHJpbmcocmV0KXx8KHJldD1mb3JtYXRWYWx1ZShjdHgscmV0LHJlY3Vyc2VUaW1lcykpLHJldH12YXIgcHJpbWl0aXZlPWZvcm1hdFByaW1pdGl2ZShjdHgsdmFsdWUpO2lmKHByaW1pdGl2ZSlyZXR1cm4gcHJpbWl0aXZlO3ZhciBrZXlzPU9iamVjdC5rZXlzKHZhbHVlKSx2aXNpYmxlS2V5cz1hcnJheVRvSGFzaChrZXlzKTtpZihjdHguc2hvd0hpZGRlbiYmKGtleXM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpKSxpc0Vycm9yKHZhbHVlKSYmKGtleXMuaW5kZXhPZigibWVzc2FnZSIpPj0wfHxrZXlzLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7aWYoMD09PWtleXMubGVuZ3RoKXtpZihpc0Z1bmN0aW9uKHZhbHVlKSl7dmFyIG5hbWU9dmFsdWUubmFtZT8iOiAiK3ZhbHVlLm5hbWU6IiI7cmV0dXJuIGN0eC5zdHlsaXplKCJbRnVuY3Rpb24iK25hbWUrIl0iLCJzcGVjaWFsIil9aWYoaXNSZWdFeHAodmFsdWUpKXJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCJyZWdleHAiKTtpZihpc0RhdGUodmFsdWUpKXJldHVybiBjdHguc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwiZGF0ZSIpO2lmKGlzRXJyb3IodmFsdWUpKXJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSl9dmFyIGJhc2U9IiIsYXJyYXk9ITEsYnJhY2VzPVsieyIsIn0iXTtpZihpc0FycmF5KHZhbHVlKSYmKGFycmF5PSEwLGJyYWNlcz1bIlsiLCJdIl0pLGlzRnVuY3Rpb24odmFsdWUpKXt2YXIgbj12YWx1ZS5uYW1lPyI6ICIrdmFsdWUubmFtZToiIjtiYXNlPSIgW0Z1bmN0aW9uIituKyJdIn1pZihpc1JlZ0V4cCh2YWx1ZSkmJihiYXNlPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpKSxpc0RhdGUodmFsdWUpJiYoYmFzZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2YWx1ZSkpLGlzRXJyb3IodmFsdWUpJiYoYmFzZT0iICIrZm9ybWF0RXJyb3IodmFsdWUpKSwwPT09a2V5cy5sZW5ndGgmJighYXJyYXl8fDA9PXZhbHVlLmxlbmd0aCkpcmV0dXJuIGJyYWNlc1swXStiYXNlK2JyYWNlc1sxXTtpZigwPnJlY3Vyc2VUaW1lcylyZXR1cm4gaXNSZWdFeHAodmFsdWUpP2N0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksInJlZ2V4cCIpOmN0eC5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTtjdHguc2Vlbi5wdXNoKHZhbHVlKTt2YXIgb3V0cHV0O3JldHVybiBvdXRwdXQ9YXJyYXk/Zm9ybWF0QXJyYXkoY3R4LHZhbHVlLHJlY3Vyc2VUaW1lcyx2aXNpYmxlS2V5cyxrZXlzKTprZXlzLm1hcChmdW5jdGlvbihrZXkpe3JldHVybiBmb3JtYXRQcm9wZXJ0eShjdHgsdmFsdWUscmVjdXJzZVRpbWVzLHZpc2libGVLZXlzLGtleSxhcnJheSl9KSxjdHguc2Vlbi5wb3AoKSxyZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsYmFzZSxicmFjZXMpfWZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsdmFsdWUpe2lmKGlzVW5kZWZpbmVkKHZhbHVlKSlyZXR1cm4gY3R4LnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKGlzU3RyaW5nKHZhbHVlKSl7dmFyIHNpbXBsZT0iXCciK0pTT04uc3RyaW5naWZ5KHZhbHVlKS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC9cJy9nLCJcXFxcXCciKS5yZXBsYWNlKC9cXFxcIi9nLFwnIlwnKSsiXCciO3JldHVybiBjdHguc3R5bGl6ZShzaW1wbGUsInN0cmluZyIpfXJldHVybiBpc051bWJlcih2YWx1ZSk/Y3R4LnN0eWxpemUoIiIrdmFsdWUsIm51bWJlciIpOmlzQm9vbGVhbih2YWx1ZSk/Y3R4LnN0eWxpemUoIiIrdmFsdWUsImJvb2xlYW4iKTppc051bGwodmFsdWUpP2N0eC5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH1mdW5jdGlvbiBmb3JtYXRFcnJvcih2YWx1ZSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSsiXSJ9ZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LHZhbHVlLHJlY3Vyc2VUaW1lcyx2aXNpYmxlS2V5cyxrZXlzKXtmb3IodmFyIG91dHB1dD1bXSxpPTAsbD12YWx1ZS5sZW5ndGg7bD5pOysraSloYXNPd25Qcm9wZXJ0eSh2YWx1ZSxpKyIiKT9vdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsdmFsdWUscmVjdXJzZVRpbWVzLHZpc2libGVLZXlzLGkrIiIsITApKTpvdXRwdXQucHVzaCgiIik7cmV0dXJuIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpe2tleS5tYXRjaCgvXlxcZCskLyl8fG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCx2YWx1ZSxyZWN1cnNlVGltZXMsdmlzaWJsZUtleXMsa2V5LCEwKSl9KSxvdXRwdXR9ZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkoY3R4LHZhbHVlLHJlY3Vyc2VUaW1lcyx2aXNpYmxlS2V5cyxrZXksYXJyYXkpe3ZhciBuYW1lLHN0cixkZXNjO2lmKGRlc2M9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSxrZXkpfHx7dmFsdWU6dmFsdWVba2V5XX0sZGVzYy5nZXQ/c3RyPWRlc2Muc2V0P2N0eC5zdHlsaXplKCJbR2V0dGVyL1NldHRlcl0iLCJzcGVjaWFsIik6Y3R4LnN0eWxpemUoIltHZXR0ZXJdIiwic3BlY2lhbCIpOmRlc2Muc2V0JiYoc3RyPWN0eC5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksaGFzT3duUHJvcGVydHkodmlzaWJsZUtleXMsa2V5KXx8KG5hbWU9IlsiK2tleSsiXSIpLHN0cnx8KDA+Y3R4LnNlZW4uaW5kZXhPZihkZXNjLnZhbHVlKT8oc3RyPWlzTnVsbChyZWN1cnNlVGltZXMpP2Zvcm1hdFZhbHVlKGN0eCxkZXNjLnZhbHVlLG51bGwpOmZvcm1hdFZhbHVlKGN0eCxkZXNjLnZhbHVlLHJlY3Vyc2VUaW1lcy0xKSxzdHIuaW5kZXhPZigiXFxuIik+LTEmJihzdHI9YXJyYXk/c3RyLnNwbGl0KCJcXG4iKS5tYXAoZnVuY3Rpb24obGluZSl7cmV0dXJuIiAgIitsaW5lfSkuam9pbigiXFxuIikuc3Vic3RyKDIpOiJcXG4iK3N0ci5zcGxpdCgiXFxuIikubWFwKGZ1bmN0aW9uKGxpbmUpe3JldHVybiIgICAiK2xpbmV9KS5qb2luKCJcXG4iKSkpOnN0cj1jdHguc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksaXNVbmRlZmluZWQobmFtZSkpe2lmKGFycmF5JiZrZXkubWF0Y2goL15cXGQrJC8pKXJldHVybiBzdHI7bmFtZT1KU09OLnN0cmluZ2lmeSgiIitrZXkpLG5hbWUubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8obmFtZT1uYW1lLnN1YnN0cigxLG5hbWUubGVuZ3RoLTIpLG5hbWU9Y3R4LnN0eWxpemUobmFtZSwibmFtZSIpKToobmFtZT1uYW1lLnJlcGxhY2UoL1wnL2csIlxcXFxcJyIpLnJlcGxhY2UoL1xcXFwiL2csXCciXCcpLnJlcGxhY2UoLyheInwiJCkvZywiXCciKSxuYW1lPWN0eC5zdHlsaXplKG5hbWUsInN0cmluZyIpKX1yZXR1cm4gbmFtZSsiOiAiK3N0cn1mdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsYmFzZSxicmFjZXMpe3ZhciBudW1MaW5lc0VzdD0wLGxlbmd0aD1vdXRwdXQucmVkdWNlKGZ1bmN0aW9uKHByZXYsY3VyKXtyZXR1cm4gbnVtTGluZXNFc3QrKyxjdXIuaW5kZXhPZigiXFxuIik+PTAmJm51bUxpbmVzRXN0KysscHJlditjdXIucmVwbGFjZSgvXFx1MDAxYlxcW1xcZFxcZD9tL2csIiIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gbGVuZ3RoPjYwP2JyYWNlc1swXSsoIiI9PT1iYXNlPyIiOmJhc2UrIlxcbiAiKSsiICIrb3V0cHV0LmpvaW4oIixcXG4gICIpKyIgIiticmFjZXNbMV06YnJhY2VzWzBdK2Jhc2UrIiAiK291dHB1dC5qb2luKCIsICIpKyIgIiticmFjZXNbMV19ZnVuY3Rpb24gaXNBcnJheShhcil7cmV0dXJuIEFycmF5LmlzQXJyYXkoYXIpfWZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGFyZ31mdW5jdGlvbiBpc051bGwoYXJnKXtyZXR1cm4gbnVsbD09PWFyZ31mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpe3JldHVybiBudWxsPT1hcmd9ZnVuY3Rpb24gaXNOdW1iZXIoYXJnKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGFyZ31mdW5jdGlvbiBpc1N0cmluZyhhcmcpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYXJnfWZ1bmN0aW9uIGlzU3ltYm9sKGFyZyl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBhcmd9ZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKXtyZXR1cm4gdm9pZCAwPT09YXJnfWZ1bmN0aW9uIGlzUmVnRXhwKHJlKXtyZXR1cm4gaXNPYmplY3QocmUpJiYiW29iamVjdCBSZWdFeHBdIj09PW9iamVjdFRvU3RyaW5nKHJlKX1mdW5jdGlvbiBpc09iamVjdChhcmcpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYXJnJiZudWxsIT09YXJnfWZ1bmN0aW9uIGlzRGF0ZShkKXtyZXR1cm4gaXNPYmplY3QoZCkmJiJbb2JqZWN0IERhdGVdIj09PW9iamVjdFRvU3RyaW5nKGQpfWZ1bmN0aW9uIGlzRXJyb3IoZSl7cmV0dXJuIGlzT2JqZWN0KGUpJiYoIltvYmplY3QgRXJyb3JdIj09PW9iamVjdFRvU3RyaW5nKGUpfHxlIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYXJnfWZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZyl7cmV0dXJuIG51bGw9PT1hcmd8fCJib29sZWFuIj09dHlwZW9mIGFyZ3x8Im51bWJlciI9PXR5cGVvZiBhcmd8fCJzdHJpbmciPT10eXBlb2YgYXJnfHwic3ltYm9sIj09dHlwZW9mIGFyZ3x8YXJnPT09dm9pZCAwfWZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyl9ZnVuY3Rpb24gcGFkKG4pe3JldHVybiAxMD5uPyIwIituLnRvU3RyaW5nKDEwKTpuLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiB0aW1lc3RhbXAoKXt2YXIgZD1uZXcgRGF0ZSx0aW1lPVtwYWQoZC5nZXRIb3VycygpKSxwYWQoZC5nZXRNaW51dGVzKCkpLHBhZChkLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKTtyZXR1cm5bZC5nZXREYXRlKCksbW9udGhzW2QuZ2V0TW9udGgoKV0sdGltZV0uam9pbigiICIpfWZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaixwcm9wKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaixwcm9wKX12YXIgZm9ybWF0UmVnRXhwPS8lW3NkaiVdL2c7ZXhwb3J0cy5mb3JtYXQ9ZnVuY3Rpb24oZil7aWYoIWlzU3RyaW5nKGYpKXtmb3IodmFyIG9iamVjdHM9W10saT0wO2FyZ3VtZW50cy5sZW5ndGg+aTtpKyspb2JqZWN0cy5wdXNoKGluc3BlY3QoYXJndW1lbnRzW2ldKSk7cmV0dXJuIG9iamVjdHMuam9pbigiICIpfWZvcih2YXIgaT0xLGFyZ3M9YXJndW1lbnRzLGxlbj1hcmdzLmxlbmd0aCxzdHI9KGYrIiIpLnJlcGxhY2UoZm9ybWF0UmVnRXhwLGZ1bmN0aW9uKHgpe2lmKCIlJSI9PT14KXJldHVybiIlIjtpZihpPj1sZW4pcmV0dXJuIHg7c3dpdGNoKHgpe2Nhc2UiJXMiOnJldHVybiBhcmdzW2krK10rIiI7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihhcmdzW2krK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnc1tpKytdKX1jYXRjaChfKXtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4geH19KSx4PWFyZ3NbaV07bGVuPmk7eD1hcmdzWysraV0pc3RyKz1pc051bGwoeCl8fCFpc09iamVjdCh4KT8iICIreDoiICIraW5zcGVjdCh4KTtyZXR1cm4gc3RyfSxleHBvcnRzLmRlcHJlY2F0ZT1mdW5jdGlvbihmbixtc2cpe2Z1bmN0aW9uIGRlcHJlY2F0ZWQoKXtpZighd2FybmVkKXtpZihwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pdGhyb3cgRXJyb3IobXNnKTtwcm9jZXNzLnRyYWNlRGVwcmVjYXRpb24/Y29uc29sZS50cmFjZShtc2cpOmNvbnNvbGUuZXJyb3IobXNnKSx3YXJuZWQ9ITB9cmV0dXJuIGZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihpc1VuZGVmaW5lZChnbG9iYWwucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV4cG9ydHMuZGVwcmVjYXRlKGZuLG1zZykuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZihwcm9jZXNzLm5vRGVwcmVjYXRpb249PT0hMClyZXR1cm4gZm47dmFyIHdhcm5lZD0hMTtyZXR1cm4gZGVwcmVjYXRlZH07dmFyIGRlYnVnRW52aXJvbixkZWJ1Z3M9e307ZXhwb3J0cy5kZWJ1Z2xvZz1mdW5jdGlvbihzZXQpe2lmKGlzVW5kZWZpbmVkKGRlYnVnRW52aXJvbikmJihkZWJ1Z0Vudmlyb249cHJvY2Vzcy5lbnYuTk9ERV9ERUJVR3x8IiIpLHNldD1zZXQudG9VcHBlckNhc2UoKSwhZGVidWdzW3NldF0paWYoUmVnRXhwKCJcXFxcYiIrc2V0KyJcXFxcYiIsImkiKS50ZXN0KGRlYnVnRW52aXJvbikpe3ZhciBwaWQ9cHJvY2Vzcy5waWQ7ZGVidWdzW3NldF09ZnVuY3Rpb24oKXt2YXIgbXNnPWV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKTtjb25zb2xlLmVycm9yKCIlcyAlZDogJXMiLHNldCxwaWQsbXNnKX19ZWxzZSBkZWJ1Z3Nbc2V0XT1mdW5jdGlvbigpe307cmV0dXJuIGRlYnVnc1tzZXRdfSxleHBvcnRzLmluc3BlY3Q9aW5zcGVjdCxpbnNwZWN0LmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0saW5zcGVjdC5zdHlsZXM9e3NwZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93IiwiYm9vbGVhbiI6InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IiwibnVsbCI6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sZXhwb3J0cy5pc0FycmF5PWlzQXJyYXksZXhwb3J0cy5pc0Jvb2xlYW49aXNCb29sZWFuLGV4cG9ydHMuaXNOdWxsPWlzTnVsbCxleHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkPWlzTnVsbE9yVW5kZWZpbmVkLGV4cG9ydHMuaXNOdW1iZXI9aXNOdW1iZXIsZXhwb3J0cy5pc1N0cmluZz1pc1N0cmluZyxleHBvcnRzLmlzU3ltYm9sPWlzU3ltYm9sLGV4cG9ydHMuaXNVbmRlZmluZWQ9aXNVbmRlZmluZWQsZXhwb3J0cy5pc1JlZ0V4cD1pc1JlZ0V4cCxleHBvcnRzLmlzT2JqZWN0PWlzT2JqZWN0LGV4cG9ydHMuaXNEYXRlPWlzRGF0ZSxleHBvcnRzLmlzRXJyb3I9aXNFcnJvcixleHBvcnRzLmlzRnVuY3Rpb249aXNGdW5jdGlvbixleHBvcnRzLmlzUHJpbWl0aXZlPWlzUHJpbWl0aXZlLGV4cG9ydHMuaXNCdWZmZXI9X2RlcmVxXygiLi9zdXBwb3J0L2lzQnVmZmVyIik7dmFyIG1vbnRocz1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2V4cG9ydHMubG9nPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coIiVzIC0gJXMiLHRpbWVzdGFtcCgpLGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsYXJndW1lbnRzKSl9LGV4cG9ydHMuaW5oZXJpdHM9X2RlcmVxXygiaW5oZXJpdHMiKSxleHBvcnRzLl9leHRlbmQ9ZnVuY3Rpb24ob3JpZ2luLGFkZCl7aWYoIWFkZHx8IWlzT2JqZWN0KGFkZCkpcmV0dXJuIG9yaWdpbjtmb3IodmFyIGtleXM9T2JqZWN0LmtleXMoYWRkKSxpPWtleXMubGVuZ3RoO2ktLTspb3JpZ2luW2tleXNbaV1dPWFkZFtrZXlzW2ldXTtyZXR1cm4gb3JpZ2lufX0pLmNhbGwodGhpcyxfZGVyZXFfKCIvdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvaW5zZXJ0LW1vZHVsZS1nbG9iYWxzL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiKSwidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc3VwcG9ydC9pc0J1ZmZlciI6MTQsIi91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9pbnNlcnQtbW9kdWxlLWdsb2JhbHMvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyI6MTgsaW5oZXJpdHM6MTd9XSwxNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUpe2Z1bmN0aW9uIEV2ZW50RW1pdHRlcigpe3RoaXMuX2V2ZW50cz10aGlzLl9ldmVudHN8fHt9LHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH1mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGFyZ31mdW5jdGlvbiBpc051bWJlcihhcmcpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYXJnfWZ1bmN0aW9uIGlzT2JqZWN0KGFyZyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBhcmcmJm51bGwhPT1hcmd9ZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKXtyZXR1cm4gdm9pZCAwPT09YXJnfW1vZHVsZS5leHBvcnRzPUV2ZW50RW1pdHRlcixFdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyPUV2ZW50RW1pdHRlcixFdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLEV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDAsRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM9MTAsRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24obil7aWYoIWlzTnVtYmVyKG4pfHwwPm58fGlzTmFOKG4pKXRocm93IFR5cGVFcnJvcigibiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1uLHRoaXN9LEV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0eXBlKXt2YXIgZXIsaGFuZGxlcixsZW4sYXJncyxpLGxpc3RlbmVycztpZih0aGlzLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9e30pLCJlcnJvciI9PT10eXBlJiYoIXRoaXMuX2V2ZW50cy5lcnJvcnx8aXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9yKSYmIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKXRocm93IGVyPWFyZ3VtZW50c1sxXSxlciBpbnN0YW5jZW9mIEVycm9yP2VyOlR5cGVFcnJvcihcJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCAiZXJyb3IiIGV2ZW50LlwnKTtpZihoYW5kbGVyPXRoaXMuX2V2ZW50c1t0eXBlXSxpc1VuZGVmaW5lZChoYW5kbGVyKSlyZXR1cm4hMTtpZihpc0Z1bmN0aW9uKGhhbmRsZXIpKXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6aGFuZGxlci5jYWxsKHRoaXMpO2JyZWFrO2Nhc2UgMjpoYW5kbGVyLmNhbGwodGhpcyxhcmd1bWVudHNbMV0pO2JyZWFrO2Nhc2UgMzpoYW5kbGVyLmNhbGwodGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKTticmVhaztkZWZhdWx0OmZvcihsZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPUFycmF5KGxlbi0xKSxpPTE7bGVuPmk7aSsrKWFyZ3NbaS0xXT1hcmd1bWVudHNbaV07aGFuZGxlci5hcHBseSh0aGlzLGFyZ3MpfWVsc2UgaWYoaXNPYmplY3QoaGFuZGxlcikpe2ZvcihsZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPUFycmF5KGxlbi0xKSxpPTE7bGVuPmk7aSsrKWFyZ3NbaS0xXT1hcmd1bWVudHNbaV07Zm9yKGxpc3RlbmVycz1oYW5kbGVyLnNsaWNlKCksbGVuPWxpc3RlbmVycy5sZW5ndGgsaT0wO2xlbj5pO2krKylsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcyxhcmdzKX1yZXR1cm4hMH0sRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0eXBlLGxpc3RlbmVyKXt2YXIgbTtpZighaXNGdW5jdGlvbihsaXN0ZW5lcikpdGhyb3cgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtpZih0aGlzLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9e30pLHRoaXMuX2V2ZW50cy5uZXdMaXN0ZW5lciYmdGhpcy5lbWl0KCJuZXdMaXN0ZW5lciIsdHlwZSxpc0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKT9saXN0ZW5lci5saXN0ZW5lcjpsaXN0ZW5lciksdGhpcy5fZXZlbnRzW3R5cGVdP2lzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSk/dGhpcy5fZXZlbnRzW3R5cGVdLnB1c2gobGlzdGVuZXIpOnRoaXMuX2V2ZW50c1t0eXBlXT1bdGhpcy5fZXZlbnRzW3R5cGVdLGxpc3RlbmVyXTp0aGlzLl9ldmVudHNbdHlwZV09bGlzdGVuZXIsaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSYmIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpe3ZhciBtO209aXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVuZXJzKT9FdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVyczp0aGlzLl9tYXhMaXN0ZW5lcnMsbSYmbT4wJiZ0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoPm0mJih0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkPSEwLGNvbnNvbGUuZXJyb3IoIihub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuIix0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKSxjb25zb2xlLnRyYWNlKCkpfXJldHVybiB0aGlzfSxFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uPUV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIsRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHR5cGUsbGlzdGVuZXIpe2Z1bmN0aW9uIGcoKXt0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsZyksZmlyZWR8fChmaXJlZD0hMCxsaXN0ZW5lci5hcHBseSh0aGlzLGFyZ3VtZW50cykpfWlmKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSl0aHJvdyBUeXBlRXJyb3IoImxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbiIpO3ZhciBmaXJlZD0hMTtyZXR1cm4gZy5saXN0ZW5lcj1saXN0ZW5lcix0aGlzLm9uKHR5cGUsZyksdGhpc30sRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0eXBlLGxpc3RlbmVyKXt2YXIgbGlzdCxwb3NpdGlvbixsZW5ndGgsaTtpZighaXNGdW5jdGlvbihsaXN0ZW5lcikpdGhyb3cgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtpZighdGhpcy5fZXZlbnRzfHwhdGhpcy5fZXZlbnRzW3R5cGVdKXJldHVybiB0aGlzO2lmKGxpc3Q9dGhpcy5fZXZlbnRzW3R5cGVdLGxlbmd0aD1saXN0Lmxlbmd0aCxwb3NpdGlvbj0tMSxsaXN0PT09bGlzdGVuZXJ8fGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikmJmxpc3QubGlzdGVuZXI9PT1saXN0ZW5lcilkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdLHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdHlwZSxsaXN0ZW5lcik7ZWxzZSBpZihpc09iamVjdChsaXN0KSl7Zm9yKGk9bGVuZ3RoO2ktLVx4M2UwOylpZihsaXN0W2ldPT09bGlzdGVuZXJ8fGxpc3RbaV0ubGlzdGVuZXImJmxpc3RbaV0ubGlzdGVuZXI9PT1saXN0ZW5lcil7cG9zaXRpb249aTticmVha31pZigwPnBvc2l0aW9uKXJldHVybiB0aGlzOzE9PT1saXN0Lmxlbmd0aD8obGlzdC5sZW5ndGg9MCxkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdKTpsaXN0LnNwbGljZShwb3NpdGlvbiwxKSx0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLHR5cGUsbGlzdGVuZXIpfXJldHVybiB0aGlzfSxFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbih0eXBlKXt2YXIga2V5LGxpc3RlbmVycztpZighdGhpcy5fZXZlbnRzKXJldHVybiB0aGlzO2lmKCF0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2V2ZW50cz17fTp0aGlzLl9ldmVudHNbdHlwZV0mJmRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV0sdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKGtleSBpbiB0aGlzLl9ldmVudHMpInJlbW92ZUxpc3RlbmVyIiE9PWtleSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPXt9LHRoaXN9aWYobGlzdGVuZXJzPXRoaXMuX2V2ZW50c1t0eXBlXSxpc0Z1bmN0aW9uKGxpc3RlbmVycykpdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLGxpc3RlbmVycyk7ZWxzZSBmb3IoO2xpc3RlbmVycy5sZW5ndGg7KXRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSxsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aC0xXSk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV0sdGhpc30sRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24odHlwZSl7dmFyIHJldDtyZXR1cm4gcmV0PXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzW3R5cGVdP2lzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKT9bdGhpcy5fZXZlbnRzW3R5cGVdXTp0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTpbXX0sRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oZW1pdHRlcix0eXBlKXt2YXIgcmV0O3JldHVybiByZXQ9ZW1pdHRlci5fZXZlbnRzJiZlbWl0dGVyLl9ldmVudHNbdHlwZV0/aXNGdW5jdGlvbihlbWl0dGVyLl9ldmVudHNbdHlwZV0pPzE6ZW1pdHRlci5fZXZlbnRzW3R5cGVdLmxlbmd0aDowfX0se31dLDE3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSl7bW9kdWxlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oY3RvcixzdXBlckN0b3Ipe2N0b3Iuc3VwZXJfPXN1cGVyQ3RvcixjdG9yLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpjdG9yLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTpmdW5jdGlvbihjdG9yLHN1cGVyQ3Rvcil7Y3Rvci5zdXBlcl89c3VwZXJDdG9yO3ZhciBUZW1wQ3Rvcj1mdW5jdGlvbigpe307VGVtcEN0b3IucHJvdG90eXBlPXN1cGVyQ3Rvci5wcm90b3R5cGUsY3Rvci5wcm90b3R5cGU9bmV3IFRlbXBDdG9yLGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yPWN0b3J9fSx7fV0sMTg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlKXtmdW5jdGlvbiBub29wKCl7fXZhciBwcm9jZXNzPW1vZHVsZS5leHBvcnRzPXt9O3Byb2Nlc3MubmV4dFRpY2s9ZnVuY3Rpb24oKXt2YXIgY2FuU2V0SW1tZWRpYXRlPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuc2V0SW1tZWRpYXRlLGNhblBvc3Q9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5wb3N0TWVzc2FnZSYmd2luZG93LmFkZEV2ZW50TGlzdGVuZXI7aWYoY2FuU2V0SW1tZWRpYXRlKXJldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gd2luZG93LnNldEltbWVkaWF0ZShmKX07aWYoY2FuUG9zdCl7dmFyIHF1ZXVlPVtdO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24oZXYpe3ZhciBzb3VyY2U9ZXYuc291cmNlO2lmKChzb3VyY2U9PT13aW5kb3d8fG51bGw9PT1zb3VyY2UpJiYicHJvY2Vzcy10aWNrIj09PWV2LmRhdGEmJihldi5zdG9wUHJvcGFnYXRpb24oKSxxdWV1ZS5sZW5ndGg+MCkpe3ZhciBmbj1xdWV1ZS5zaGlmdCgpO2ZuKCl9fSwhMCksZnVuY3Rpb24oZm4pe3F1ZXVlLnB1c2goZm4pLHdpbmRvdy5wb3N0TWVzc2FnZSgicHJvY2Vzcy10aWNrIiwiKiIpfX1yZXR1cm4gZnVuY3Rpb24oZm4pe3NldFRpbWVvdXQoZm4sMCl9fSgpLHByb2Nlc3MudGl0bGU9ImJyb3dzZXIiLHByb2Nlc3MuYnJvd3Nlcj0hMCxwcm9jZXNzLmVudj17fSxwcm9jZXNzLmFyZ3Y9W10scHJvY2Vzcy5vbj1ub29wLHByb2Nlc3Mub25jZT1ub29wLHByb2Nlc3Mub2ZmPW5vb3AscHJvY2Vzcy5lbWl0PW5vb3AscHJvY2Vzcy5iaW5kaW5nPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LHByb2Nlc3MuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxwcm9jZXNzLmNoZGlyPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfX0se31dLDE5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSl7bW9kdWxlLmV4cG9ydHM9X2RlcmVxXygxNCl9LHt9XSwyMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUpe21vZHVsZS5leHBvcnRzPV9kZXJlcV8oMTUpfSx7Ii4vc3VwcG9ydC9pc0J1ZmZlciI6MTksIi91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9pbnNlcnQtbW9kdWxlLWdsb2JhbHMvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyI6MTgsaW5oZXJpdHM6MTd9XX0se30sWzldKSg5KX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2h0bWxfd29ya2VyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2Uvd29ya2VyL21pcnJvciIsImFjZS9tb2RlL2h0bWwvc2F4cGFyc2VyIl0sZnVuY3Rpb24oYWNlcXVpcmUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO3ZhciBvb3A9YWNlcXVpcmUoIi4uL2xpYi9vb3AiKTthY2VxdWlyZSgiLi4vbGliL2xhbmciKTt2YXIgTWlycm9yPWFjZXF1aXJlKCIuLi93b3JrZXIvbWlycm9yIikuTWlycm9yLFNBWFBhcnNlcj1hY2VxdWlyZSgiLi9odG1sL3NheHBhcnNlciIpLlNBWFBhcnNlcixlcnJvclR5cGVzPXsiZXhwZWN0ZWQtZG9jdHlwZS1idXQtZ290LXN0YXJ0LXRhZyI6ImluZm8iLCJleHBlY3RlZC1kb2N0eXBlLWJ1dC1nb3QtY2hhcnMiOiJpbmZvIiwibm9uLWh0bWwtcm9vdCI6ImluZm8ifSxXb3JrZXI9ZXhwb3J0cy5Xb3JrZXI9ZnVuY3Rpb24oc2VuZGVyKXtNaXJyb3IuY2FsbCh0aGlzLHNlbmRlciksdGhpcy5zZXRUaW1lb3V0KDQwMCksdGhpcy5jb250ZXh0PW51bGx9O29vcC5pbmhlcml0cyhXb3JrZXIsTWlycm9yKSxmdW5jdGlvbigpe3RoaXMuc2V0T3B0aW9ucz1mdW5jdGlvbihvcHRpb25zKXt0aGlzLmNvbnRleHQ9b3B0aW9ucy5jb250ZXh0fSx0aGlzLm9uVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIHZhbHVlPXRoaXMuZG9jLmdldFZhbHVlKCk7aWYodmFsdWUpe3ZhciBwYXJzZXI9bmV3IFNBWFBhcnNlcixlcnJvcnM9W10sbm9vcD1mdW5jdGlvbigpe307cGFyc2VyLmNvbnRlbnRIYW5kbGVyPXtzdGFydERvY3VtZW50Om5vb3AsZW5kRG9jdW1lbnQ6bm9vcCxzdGFydEVsZW1lbnQ6bm9vcCxlbmRFbGVtZW50Om5vb3AsY2hhcmFjdGVyczpub29wfSxwYXJzZXIuZXJyb3JIYW5kbGVyPXtlcnJvcjpmdW5jdGlvbihtZXNzYWdlLGxvY2F0aW9uLGNvZGUpe2Vycm9ycy5wdXNoKHtyb3c6bG9jYXRpb24ubGluZSxjb2x1bW46bG9jYXRpb24uY29sdW1uLHRleHQ6bWVzc2FnZSx0eXBlOmVycm9yVHlwZXNbY29kZV18fCJlcnJvciJ9KX19LHRoaXMuY29udGV4dD9wYXJzZXIucGFyc2VGcmFnbWVudCh2YWx1ZSx0aGlzLmNvbnRleHQpOnBhcnNlci5wYXJzZSh2YWx1ZSksdGhpcy5zZW5kZXIuZW1pdCgiZXJyb3IiLGVycm9ycyl9fX0uY2FsbChXb3JrZXIucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9saWIvZXM1LXNoaW0iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbigpe2Z1bmN0aW9uIEVtcHR5KCl7fWZ1bmN0aW9uIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsob2JqZWN0KXt0cnl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsInNlbnRpbmVsIix7fSksInNlbnRpbmVsImluIG9iamVjdH1jYXRjaChleGNlcHRpb24pe319ZnVuY3Rpb24gdG9JbnRlZ2VyKG4pe3JldHVybiBuPStuLG4hPT1uP249MDowIT09biYmbiE9PTEvMCYmbiE9PS0oMS8wKSYmKG49KG4+MHx8LTEpKk1hdGguZmxvb3IoTWF0aC5hYnMobikpKSxufUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHwoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odGhhdCl7dmFyIHRhcmdldD10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0YXJnZXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAiK3RhcmdldCk7dmFyIGFyZ3M9c2xpY2UuY2FsbChhcmd1bWVudHMsMSksYm91bmQ9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgYm91bmQpe3ZhciByZXN1bHQ9dGFyZ2V0LmFwcGx5KHRoaXMsYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIE9iamVjdChyZXN1bHQpPT09cmVzdWx0P3Jlc3VsdDp0aGlzfXJldHVybiB0YXJnZXQuYXBwbHkodGhhdCxhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKX07cmV0dXJuIHRhcmdldC5wcm90b3R5cGUmJihFbXB0eS5wcm90b3R5cGU9dGFyZ2V0LnByb3RvdHlwZSxib3VuZC5wcm90b3R5cGU9bmV3IEVtcHR5LEVtcHR5LnByb3RvdHlwZT1udWxsKSxib3VuZH0pO3ZhciBkZWZpbmVHZXR0ZXIsZGVmaW5lU2V0dGVyLGxvb2t1cEdldHRlcixsb29rdXBTZXR0ZXIsc3VwcG9ydHNBY2Nlc3NvcnMsY2FsbD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxwcm90b3R5cGVPZkFycmF5PUFycmF5LnByb3RvdHlwZSxwcm90b3R5cGVPZk9iamVjdD1PYmplY3QucHJvdG90eXBlLHNsaWNlPXByb3RvdHlwZU9mQXJyYXkuc2xpY2UsX3RvU3RyaW5nPWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC50b1N0cmluZyksb3ducz1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuaGFzT3duUHJvcGVydHkpO2lmKChzdXBwb3J0c0FjY2Vzc29ycz1vd25zKHByb3RvdHlwZU9mT2JqZWN0LCJfX2RlZmluZUdldHRlcl9fIikpJiYoZGVmaW5lR2V0dGVyPWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZUdldHRlcl9fKSxkZWZpbmVTZXR0ZXI9Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lU2V0dGVyX18pLGxvb2t1cEdldHRlcj1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBHZXR0ZXJfXyksbG9va3VwU2V0dGVyPWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNldHRlcl9fKSksMiE9WzEsMl0uc3BsaWNlKDApLmxlbmd0aClpZihmdW5jdGlvbigpe2Z1bmN0aW9uIG1ha2VBcnJheShsKXt2YXIgYT1BcnJheShsKzIpO3JldHVybiBhWzBdPWFbMV09MCxhfXZhciBsZW5ndGhCZWZvcmUsYXJyYXk9W107cmV0dXJuIGFycmF5LnNwbGljZS5hcHBseShhcnJheSxtYWtlQXJyYXkoMjApKSxhcnJheS5zcGxpY2UuYXBwbHkoYXJyYXksbWFrZUFycmF5KDI2KSksbGVuZ3RoQmVmb3JlPWFycmF5Lmxlbmd0aCxhcnJheS5zcGxpY2UoNSwwLCJYWFgiKSxsZW5ndGhCZWZvcmUrMT09YXJyYXkubGVuZ3RoLGxlbmd0aEJlZm9yZSsxPT1hcnJheS5sZW5ndGg/ITA6dm9pZCAwfSgpKXt2YXIgYXJyYXlfc3BsaWNlPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7QXJyYXkucHJvdG90eXBlLnNwbGljZT1mdW5jdGlvbihzdGFydCxkZWxldGVDb3VudCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YXJyYXlfc3BsaWNlLmFwcGx5KHRoaXMsW3ZvaWQgMD09PXN0YXJ0PzA6c3RhcnQsdm9pZCAwPT09ZGVsZXRlQ291bnQ/dGhpcy5sZW5ndGgtc3RhcnQ6ZGVsZXRlQ291bnRdLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cywyKSkpOltdfX1lbHNlIEFycmF5LnByb3RvdHlwZS5zcGxpY2U9ZnVuY3Rpb24ocG9zLHJlbW92ZUNvdW50KXt2YXIgbGVuZ3RoPXRoaXMubGVuZ3RoO3Bvcz4wP3Bvcz5sZW5ndGgmJihwb3M9bGVuZ3RoKTp2b2lkIDA9PXBvcz9wb3M9MDowPnBvcyYmKHBvcz1NYXRoLm1heChsZW5ndGgrcG9zLDApKSxsZW5ndGg+cG9zK3JlbW92ZUNvdW50fHwocmVtb3ZlQ291bnQ9bGVuZ3RoLXBvcyk7dmFyIHJlbW92ZWQ9dGhpcy5zbGljZShwb3MscG9zK3JlbW92ZUNvdW50KSxpbnNlcnQ9c2xpY2UuY2FsbChhcmd1bWVudHMsMiksYWRkPWluc2VydC5sZW5ndGg7aWYocG9zPT09bGVuZ3RoKWFkZCYmdGhpcy5wdXNoLmFwcGx5KHRoaXMsaW5zZXJ0KTtlbHNle3ZhciByZW1vdmU9TWF0aC5taW4ocmVtb3ZlQ291bnQsbGVuZ3RoLXBvcyksdGFpbE9sZFBvcz1wb3MrcmVtb3ZlLHRhaWxOZXdQb3M9dGFpbE9sZFBvcythZGQtcmVtb3ZlLHRhaWxDb3VudD1sZW5ndGgtdGFpbE9sZFBvcyxsZW5ndGhBZnRlclJlbW92ZT1sZW5ndGgtcmVtb3ZlO2lmKHRhaWxPbGRQb3M+dGFpbE5ld1Bvcylmb3IodmFyIGk9MDt0YWlsQ291bnQ+aTsrK2kpdGhpc1t0YWlsTmV3UG9zK2ldPXRoaXNbdGFpbE9sZFBvcytpXTtlbHNlIGlmKHRhaWxOZXdQb3M+dGFpbE9sZFBvcylmb3IoaT10YWlsQ291bnQ7aS0tOyl0aGlzW3RhaWxOZXdQb3MraV09dGhpc1t0YWlsT2xkUG9zK2ldO2lmKGFkZCYmcG9zPT09bGVuZ3RoQWZ0ZXJSZW1vdmUpdGhpcy5sZW5ndGg9bGVuZ3RoQWZ0ZXJSZW1vdmUsdGhpcy5wdXNoLmFwcGx5KHRoaXMsaW5zZXJ0KTtlbHNlIGZvcih0aGlzLmxlbmd0aD1sZW5ndGhBZnRlclJlbW92ZSthZGQsaT0wO2FkZD5pOysraSl0aGlzW3BvcytpXT1pbnNlcnRbaV19cmV0dXJuIHJlbW92ZWR9O0FycmF5LmlzQXJyYXl8fChBcnJheS5pc0FycmF5PWZ1bmN0aW9uKG9iail7cmV0dXJuIltvYmplY3QgQXJyYXldIj09X3RvU3RyaW5nKG9iail9KTt2YXIgYm94ZWRTdHJpbmc9T2JqZWN0KCJhIiksc3BsaXRTdHJpbmc9ImEiIT1ib3hlZFN0cmluZ1swXXx8ISgwIGluIGJveGVkU3RyaW5nKTtpZihBcnJheS5wcm90b3R5cGUuZm9yRWFjaHx8KEFycmF5LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGZ1bil7dmFyIG9iamVjdD10b09iamVjdCh0aGlzKSxzZWxmPXNwbGl0U3RyaW5nJiYiW29iamVjdCBTdHJpbmddIj09X3RvU3RyaW5nKHRoaXMpP3RoaXMuc3BsaXQoIiIpOm9iamVjdCx0aGlzcD1hcmd1bWVudHNbMV0saT0tMSxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wO2lmKCJbb2JqZWN0IEZ1bmN0aW9uXSIhPV90b1N0cmluZyhmdW4pKXRocm93IG5ldyBUeXBlRXJyb3I7Zm9yKDtsZW5ndGg+KytpOylpIGluIHNlbGYmJmZ1bi5jYWxsKHRoaXNwLHNlbGZbaV0saSxvYmplY3QpfSksQXJyYXkucHJvdG90eXBlLm1hcHx8KEFycmF5LnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oZnVuKXt2YXIgb2JqZWN0PXRvT2JqZWN0KHRoaXMpLHNlbGY9c3BsaXRTdHJpbmcmJiJbb2JqZWN0IFN0cmluZ10iPT1fdG9TdHJpbmcodGhpcyk/dGhpcy5zcGxpdCgiIik6b2JqZWN0LGxlbmd0aD1zZWxmLmxlbmd0aD4+PjAscmVzdWx0PUFycmF5KGxlbmd0aCksdGhpc3A9YXJndW1lbnRzWzFdO2lmKCJbb2JqZWN0IEZ1bmN0aW9uXSIhPV90b1N0cmluZyhmdW4pKXRocm93IG5ldyBUeXBlRXJyb3IoZnVuKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtmb3IodmFyIGk9MDtsZW5ndGg+aTtpKyspaSBpbiBzZWxmJiYocmVzdWx0W2ldPWZ1bi5jYWxsKHRoaXNwLHNlbGZbaV0saSxvYmplY3QpKTtyZXR1cm4gcmVzdWx0fSksQXJyYXkucHJvdG90eXBlLmZpbHRlcnx8KEFycmF5LnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24oZnVuKXt2YXIgdmFsdWUsb2JqZWN0PXRvT2JqZWN0KHRoaXMpLHNlbGY9c3BsaXRTdHJpbmcmJiJbb2JqZWN0IFN0cmluZ10iPT1fdG9TdHJpbmcodGhpcyk/dGhpcy5zcGxpdCgiIik6b2JqZWN0LGxlbmd0aD1zZWxmLmxlbmd0aD4+PjAscmVzdWx0PVtdLHRoaXNwPWFyZ3VtZW50c1sxXTtpZigiW29iamVjdCBGdW5jdGlvbl0iIT1fdG9TdHJpbmcoZnVuKSl0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Zm9yKHZhciBpPTA7bGVuZ3RoPmk7aSsrKWkgaW4gc2VsZiYmKHZhbHVlPXNlbGZbaV0sZnVuLmNhbGwodGhpc3AsdmFsdWUsaSxvYmplY3QpJiZyZXN1bHQucHVzaCh2YWx1ZSkpO3JldHVybiByZXN1bHR9KSxBcnJheS5wcm90b3R5cGUuZXZlcnl8fChBcnJheS5wcm90b3R5cGUuZXZlcnk9ZnVuY3Rpb24oZnVuKXt2YXIgb2JqZWN0PXRvT2JqZWN0KHRoaXMpLHNlbGY9c3BsaXRTdHJpbmcmJiJbb2JqZWN0IFN0cmluZ10iPT1fdG9TdHJpbmcodGhpcyk/dGhpcy5zcGxpdCgiIik6b2JqZWN0LGxlbmd0aD1zZWxmLmxlbmd0aD4+PjAsdGhpc3A9YXJndW1lbnRzWzFdO2lmKCJbb2JqZWN0IEZ1bmN0aW9uXSIhPV90b1N0cmluZyhmdW4pKXRocm93IG5ldyBUeXBlRXJyb3IoZnVuKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtmb3IodmFyIGk9MDtsZW5ndGg+aTtpKyspaWYoaSBpbiBzZWxmJiYhZnVuLmNhbGwodGhpc3Asc2VsZltpXSxpLG9iamVjdCkpcmV0dXJuITE7cmV0dXJuITB9KSxBcnJheS5wcm90b3R5cGUuc29tZXx8KEFycmF5LnByb3RvdHlwZS5zb21lPWZ1bmN0aW9uKGZ1bil7dmFyIG9iamVjdD10b09iamVjdCh0aGlzKSxzZWxmPXNwbGl0U3RyaW5nJiYiW29iamVjdCBTdHJpbmddIj09X3RvU3RyaW5nKHRoaXMpP3RoaXMuc3BsaXQoIiIpOm9iamVjdCxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wLHRoaXNwPWFyZ3VtZW50c1sxXTtpZigiW29iamVjdCBGdW5jdGlvbl0iIT1fdG9TdHJpbmcoZnVuKSl0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Zm9yKHZhciBpPTA7bGVuZ3RoPmk7aSsrKWlmKGkgaW4gc2VsZiYmZnVuLmNhbGwodGhpc3Asc2VsZltpXSxpLG9iamVjdCkpcmV0dXJuITA7cmV0dXJuITF9KSxBcnJheS5wcm90b3R5cGUucmVkdWNlfHwoQXJyYXkucHJvdG90eXBlLnJlZHVjZT1mdW5jdGlvbihmdW4pe3ZhciBvYmplY3Q9dG9PYmplY3QodGhpcyksc2VsZj1zcGxpdFN0cmluZyYmIltvYmplY3QgU3RyaW5nXSI9PV90b1N0cmluZyh0aGlzKT90aGlzLnNwbGl0KCIiKTpvYmplY3QsbGVuZ3RoPXNlbGYubGVuZ3RoPj4+MDtpZigiW29iamVjdCBGdW5jdGlvbl0iIT1fdG9TdHJpbmcoZnVuKSl0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoIWxlbmd0aCYmMT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7dmFyIHJlc3VsdCxpPTA7aWYoYXJndW1lbnRzLmxlbmd0aD49MilyZXN1bHQ9YXJndW1lbnRzWzFdO2Vsc2UgZm9yKDs7KXtpZihpIGluIHNlbGYpe3Jlc3VsdD1zZWxmW2krK107YnJlYWt9aWYoKytpPj1sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpfWZvcig7bGVuZ3RoPmk7aSsrKWkgaW4gc2VsZiYmKHJlc3VsdD1mdW4uY2FsbCh2b2lkIDAscmVzdWx0LHNlbGZbaV0saSxvYmplY3QpKTtyZXR1cm4gcmVzdWx0fSksQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0fHwoQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0PWZ1bmN0aW9uKGZ1bil7dmFyIG9iamVjdD10b09iamVjdCh0aGlzKSxzZWxmPXNwbGl0U3RyaW5nJiYiW29iamVjdCBTdHJpbmddIj09X3RvU3RyaW5nKHRoaXMpP3RoaXMuc3BsaXQoIiIpOm9iamVjdCxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wO2lmKCJbb2JqZWN0IEZ1bmN0aW9uXSIhPV90b1N0cmluZyhmdW4pKXRocm93IG5ldyBUeXBlRXJyb3IoZnVuKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtpZighbGVuZ3RoJiYxPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3ZhciByZXN1bHQsaT1sZW5ndGgtMTtpZihhcmd1bWVudHMubGVuZ3RoPj0yKXJlc3VsdD1hcmd1bWVudHNbMV07ZWxzZSBmb3IoOzspe2lmKGkgaW4gc2VsZil7cmVzdWx0PXNlbGZbaS0tXTticmVha31pZigwPi0taSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1kbyBpIGluIHRoaXMmJihyZXN1bHQ9ZnVuLmNhbGwodm9pZCAwLHJlc3VsdCxzZWxmW2ldLGksb2JqZWN0KSk7d2hpbGUoaS0tKTtyZXR1cm4gcmVzdWx0fSksQXJyYXkucHJvdG90eXBlLmluZGV4T2YmJi0xPT1bMCwxXS5pbmRleE9mKDEsMil8fChBcnJheS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihzb3VnaHQpe3ZhciBzZWxmPXNwbGl0U3RyaW5nJiYiW29iamVjdCBTdHJpbmddIj09X3RvU3RyaW5nKHRoaXMpP3RoaXMuc3BsaXQoIiIpOnRvT2JqZWN0KHRoaXMpLGxlbmd0aD1zZWxmLmxlbmd0aD4+PjA7aWYoIWxlbmd0aClyZXR1cm4tMTt2YXIgaT0wO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihpPXRvSW50ZWdlcihhcmd1bWVudHNbMV0pKSxpPWk+PTA/aTpNYXRoLm1heCgwLGxlbmd0aCtpKTtsZW5ndGg+aTtpKyspaWYoaSBpbiBzZWxmJiZzZWxmW2ldPT09c291Z2h0KXJldHVybiBpO3JldHVybi0xfSksQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mJiYtMT09WzAsMV0ubGFzdEluZGV4T2YoMCwtMyl8fChBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oc291Z2h0KXt2YXIgc2VsZj1zcGxpdFN0cmluZyYmIltvYmplY3QgU3RyaW5nXSI9PV90b1N0cmluZyh0aGlzKT90aGlzLnNwbGl0KCIiKTp0b09iamVjdCh0aGlzKSxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wO2lmKCFsZW5ndGgpcmV0dXJuLTE7dmFyIGk9bGVuZ3RoLTE7Zm9yKGFyZ3VtZW50cy5sZW5ndGg+MSYmKGk9TWF0aC5taW4oaSx0b0ludGVnZXIoYXJndW1lbnRzWzFdKSkpLGk9aT49MD9pOmxlbmd0aC1NYXRoLmFicyhpKTtpPj0wO2ktLSlpZihpIGluIHNlbGYmJnNvdWdodD09PXNlbGZbaV0pcmV0dXJuIGk7cmV0dXJuLTF9KSxPYmplY3QuZ2V0UHJvdG90eXBlT2Z8fChPYmplY3QuZ2V0UHJvdG90eXBlT2Y9ZnVuY3Rpb24ob2JqZWN0KXtyZXR1cm4gb2JqZWN0Ll9fcHJvdG9fX3x8KG9iamVjdC5jb25zdHJ1Y3Rvcj9vYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlOnByb3RvdHlwZU9mT2JqZWN0KX0pLCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKXt2YXIgRVJSX05PTl9PQkpFQ1Q9Ik9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgY2FsbGVkIG9uIGEgbm9uLW9iamVjdDogIjtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKG9iamVjdCxwcm9wZXJ0eSl7aWYoIm9iamVjdCIhPXR5cGVvZiBvYmplY3QmJiJmdW5jdGlvbiIhPXR5cGVvZiBvYmplY3R8fG51bGw9PT1vYmplY3QpdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVCtvYmplY3QpO2lmKG93bnMob2JqZWN0LHByb3BlcnR5KSl7dmFyIGRlc2NyaXB0b3IsZ2V0dGVyLHNldHRlcjtpZihkZXNjcmlwdG9yPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc3VwcG9ydHNBY2Nlc3NvcnMpe3ZhciBwcm90b3R5cGU9b2JqZWN0Ll9fcHJvdG9fXztvYmplY3QuX19wcm90b19fPXByb3RvdHlwZU9mT2JqZWN0O3ZhciBnZXR0ZXI9bG9va3VwR2V0dGVyKG9iamVjdCxwcm9wZXJ0eSksc2V0dGVyPWxvb2t1cFNldHRlcihvYmplY3QscHJvcGVydHkpO2lmKG9iamVjdC5fX3Byb3RvX189cHJvdG90eXBlLGdldHRlcnx8c2V0dGVyKXJldHVybiBnZXR0ZXImJihkZXNjcmlwdG9yLmdldD1nZXR0ZXIpLHNldHRlciYmKGRlc2NyaXB0b3Iuc2V0PXNldHRlciksZGVzY3JpcHRvcn1yZXR1cm4gZGVzY3JpcHRvci52YWx1ZT1vYmplY3RbcHJvcGVydHldLGRlc2NyaXB0b3J9fX1pZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzPWZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCl9KSwhT2JqZWN0LmNyZWF0ZSl7dmFyIGNyZWF0ZUVtcHR5O2NyZWF0ZUVtcHR5PW51bGw9PT1PYmplY3QucHJvdG90eXBlLl9fcHJvdG9fXz9mdW5jdGlvbigpe3JldHVybntfX3Byb3RvX186bnVsbH19OmZ1bmN0aW9uKCl7dmFyIGVtcHR5PXt9O2Zvcih2YXIgaSBpbiBlbXB0eSllbXB0eVtpXT1udWxsO3JldHVybiBlbXB0eS5jb25zdHJ1Y3Rvcj1lbXB0eS5oYXNPd25Qcm9wZXJ0eT1lbXB0eS5wcm9wZXJ0eUlzRW51bWVyYWJsZT1lbXB0eS5pc1Byb3RvdHlwZU9mPWVtcHR5LnRvTG9jYWxlU3RyaW5nPWVtcHR5LnRvU3RyaW5nPWVtcHR5LnZhbHVlT2Y9ZW1wdHkuX19wcm90b19fPW51bGwsZW1wdHl9LE9iamVjdC5jcmVhdGU9ZnVuY3Rpb24ocHJvdG90eXBlLHByb3BlcnRpZXMpe3ZhciBvYmplY3Q7aWYobnVsbD09PXByb3RvdHlwZSlvYmplY3Q9Y3JlYXRlRW1wdHkoKTtlbHNle2lmKCJvYmplY3QiIT10eXBlb2YgcHJvdG90eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoInR5cGVvZiBwcm90b3R5cGVbIit0eXBlb2YgcHJvdG90eXBlKyJdICE9IFwnb2JqZWN0XCciKTt2YXIgVHlwZT1mdW5jdGlvbigpe307VHlwZS5wcm90b3R5cGU9cHJvdG90eXBlLG9iamVjdD1uZXcgVHlwZSxvYmplY3QuX19wcm90b19fPXByb3RvdHlwZX1yZXR1cm4gdm9pZCAwIT09cHJvcGVydGllcyYmT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqZWN0LHByb3BlcnRpZXMpLG9iamVjdH19aWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXt2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0PWRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoe30pLGRlZmluZVByb3BlcnR5V29ya3NPbkRvbT0idW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50fHxkb2VzRGVmaW5lUHJvcGVydHlXb3JrKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtpZighZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0fHwhZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tKXZhciBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrPU9iamVjdC5kZWZpbmVQcm9wZXJ0eX1pZighT2JqZWN0LmRlZmluZVByb3BlcnR5fHxkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKXt2YXIgRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUj0iUHJvcGVydHkgZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6ICIsRVJSX05PTl9PQkpFQ1RfVEFSR0VUPSJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3Q6ICIsRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEPSJnZXR0ZXJzICYgc2V0dGVycyBjYW4gbm90IGJlIGRlZmluZWQgb24gdGhpcyBqYXZhc2NyaXB0IGVuZ2luZSI7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKG9iamVjdCxwcm9wZXJ0eSxkZXNjcmlwdG9yKXtpZigib2JqZWN0IiE9dHlwZW9mIG9iamVjdCYmImZ1bmN0aW9uIiE9dHlwZW9mIG9iamVjdHx8bnVsbD09PW9iamVjdCl0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX1RBUkdFVCtvYmplY3QpO2lmKCJvYmplY3QiIT10eXBlb2YgZGVzY3JpcHRvciYmImZ1bmN0aW9uIiE9dHlwZW9mIGRlc2NyaXB0b3J8fG51bGw9PT1kZXNjcmlwdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUitkZXNjcmlwdG9yKTtpZihkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKXRyeXtyZXR1cm4gZGVmaW5lUHJvcGVydHlGYWxsYmFjay5jYWxsKE9iamVjdCxvYmplY3QscHJvcGVydHksZGVzY3JpcHRvcil9Y2F0Y2goZXhjZXB0aW9uKXt9aWYob3ducyhkZXNjcmlwdG9yLCJ2YWx1ZSIpKWlmKHN1cHBvcnRzQWNjZXNzb3JzJiYobG9va3VwR2V0dGVyKG9iamVjdCxwcm9wZXJ0eSl8fGxvb2t1cFNldHRlcihvYmplY3QscHJvcGVydHkpKSl7dmFyIHByb3RvdHlwZT1vYmplY3QuX19wcm90b19fO29iamVjdC5fX3Byb3RvX189cHJvdG90eXBlT2ZPYmplY3QsZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV0sb2JqZWN0W3Byb3BlcnR5XT1kZXNjcmlwdG9yLnZhbHVlLG9iamVjdC5fX3Byb3RvX189cHJvdG90eXBlfWVsc2Ugb2JqZWN0W3Byb3BlcnR5XT1kZXNjcmlwdG9yLnZhbHVlO2Vsc2V7aWYoIXN1cHBvcnRzQWNjZXNzb3JzKXRocm93IG5ldyBUeXBlRXJyb3IoRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEKTtvd25zKGRlc2NyaXB0b3IsImdldCIpJiZkZWZpbmVHZXR0ZXIob2JqZWN0LHByb3BlcnR5LGRlc2NyaXB0b3IuZ2V0KSxvd25zKGRlc2NyaXB0b3IsInNldCIpJiZkZWZpbmVTZXR0ZXIob2JqZWN0LHByb3BlcnR5LGRlc2NyaXB0b3Iuc2V0KX1yZXR1cm4gb2JqZWN0fX1PYmplY3QuZGVmaW5lUHJvcGVydGllc3x8KE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzPWZ1bmN0aW9uKG9iamVjdCxwcm9wZXJ0aWVzKXtmb3IodmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXMpb3ducyhwcm9wZXJ0aWVzLHByb3BlcnR5KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCxwcm9wZXJ0eSxwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7cmV0dXJuIG9iamVjdH0pLE9iamVjdC5zZWFsfHwoT2JqZWN0LnNlYWw9ZnVuY3Rpb24ob2JqZWN0KXtyZXR1cm4gb2JqZWN0fSksT2JqZWN0LmZyZWV6ZXx8KE9iamVjdC5mcmVlemU9ZnVuY3Rpb24ob2JqZWN0KXtyZXR1cm4gb2JqZWN0XG59KTt0cnl7T2JqZWN0LmZyZWV6ZShmdW5jdGlvbigpe30pfWNhdGNoKGV4Y2VwdGlvbil7T2JqZWN0LmZyZWV6ZT1mdW5jdGlvbihmcmVlemVPYmplY3Qpe3JldHVybiBmdW5jdGlvbihvYmplY3Qpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvYmplY3Q/b2JqZWN0OmZyZWV6ZU9iamVjdChvYmplY3QpfX0oT2JqZWN0LmZyZWV6ZSl9aWYoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zfHwoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zPWZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIG9iamVjdH0pLE9iamVjdC5pc1NlYWxlZHx8KE9iamVjdC5pc1NlYWxlZD1mdW5jdGlvbigpe3JldHVybiExfSksT2JqZWN0LmlzRnJvemVufHwoT2JqZWN0LmlzRnJvemVuPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSxPYmplY3QuaXNFeHRlbnNpYmxlfHwoT2JqZWN0LmlzRXh0ZW5zaWJsZT1mdW5jdGlvbihvYmplY3Qpe2lmKE9iamVjdChvYmplY3QpPT09b2JqZWN0KXRocm93IG5ldyBUeXBlRXJyb3I7Zm9yKHZhciBuYW1lPSIiO293bnMob2JqZWN0LG5hbWUpOyluYW1lKz0iPyI7b2JqZWN0W25hbWVdPSEwO3ZhciByZXR1cm5WYWx1ZT1vd25zKG9iamVjdCxuYW1lKTtyZXR1cm4gZGVsZXRlIG9iamVjdFtuYW1lXSxyZXR1cm5WYWx1ZX0pLCFPYmplY3Qua2V5cyl7dmFyIGhhc0RvbnRFbnVtQnVnPSEwLGRvbnRFbnVtcz1bInRvU3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZU9mIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjb25zdHJ1Y3RvciJdLGRvbnRFbnVtc0xlbmd0aD1kb250RW51bXMubGVuZ3RoO2Zvcih2YXIga2V5IGlue3RvU3RyaW5nOm51bGx9KWhhc0RvbnRFbnVtQnVnPSExO09iamVjdC5rZXlzPWZ1bmN0aW9uKG9iamVjdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBvYmplY3QmJiJmdW5jdGlvbiIhPXR5cGVvZiBvYmplY3R8fG51bGw9PT1vYmplY3QpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpO3ZhciBrZXlzPVtdO2Zvcih2YXIgbmFtZSBpbiBvYmplY3Qpb3ducyhvYmplY3QsbmFtZSkmJmtleXMucHVzaChuYW1lKTtpZihoYXNEb250RW51bUJ1Zylmb3IodmFyIGk9MCxpaT1kb250RW51bXNMZW5ndGg7aWk+aTtpKyspe3ZhciBkb250RW51bT1kb250RW51bXNbaV07b3ducyhvYmplY3QsZG9udEVudW0pJiZrZXlzLnB1c2goZG9udEVudW0pfXJldHVybiBrZXlzfX1EYXRlLm5vd3x8KERhdGUubm93PWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9KTt2YXIgd3M9Ilx0XFxuXHZcXGZcXHIgwqDhmoDhoI7igIDigIHigILigIPigITigIXigIbigIfigIjigInigIrigK/igZ/jgIBcXHUyMDI4XFx1MjAyOVx1ZmVmZiI7aWYoIVN0cmluZy5wcm90b3R5cGUudHJpbXx8d3MudHJpbSgpKXt3cz0iWyIrd3MrIl0iO3ZhciB0cmltQmVnaW5SZWdleHA9UmVnRXhwKCJeIit3cyt3cysiKiIpLHRyaW1FbmRSZWdleHA9UmVnRXhwKHdzK3dzKyIqJCIpO1N0cmluZy5wcm90b3R5cGUudHJpbT1mdW5jdGlvbigpe3JldHVybih0aGlzKyIiKS5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwiIikucmVwbGFjZSh0cmltRW5kUmVnZXhwLCIiKX19dmFyIHRvT2JqZWN0PWZ1bmN0aW9uKG8pe2lmKG51bGw9PW8pdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FuXCd0IGNvbnZlcnQgIitvKyIgdG8gb2JqZWN0Iik7cmV0dXJuIE9iamVjdChvKX19KTsnfSxlMDcwOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzLmlkPSJhY2UvbW9kZS9jc3Nfd29ya2VyIixlLmV4cG9ydHMuc3JjPScibm8gdXNlIHN0cmljdCI7IWZ1bmN0aW9uKHdpbmRvdyl7ZnVuY3Rpb24gcmVzb2x2ZU1vZHVsZUlkKGlkLHBhdGhzKXtmb3IodmFyIHRlc3RQYXRoPWlkLHRhaWw9IiI7dGVzdFBhdGg7KXt2YXIgYWxpYXM9cGF0aHNbdGVzdFBhdGhdO2lmKCJzdHJpbmciPT10eXBlb2YgYWxpYXMpcmV0dXJuIGFsaWFzK3RhaWw7aWYoYWxpYXMpcmV0dXJuIGFsaWFzLmxvY2F0aW9uLnJlcGxhY2UoL1xcLyokLywiLyIpKyh0YWlsfHxhbGlhcy5tYWlufHxhbGlhcy5uYW1lKTtpZihhbGlhcz09PSExKXJldHVybiIiO3ZhciBpPXRlc3RQYXRoLmxhc3RJbmRleE9mKCIvIik7aWYoLTE9PT1pKWJyZWFrO3RhaWw9dGVzdFBhdGguc3Vic3RyKGkpK3RhaWwsdGVzdFBhdGg9dGVzdFBhdGguc2xpY2UoMCxpKX1yZXR1cm4gaWR9aWYoISh2b2lkIDAhPT13aW5kb3cud2luZG93JiZ3aW5kb3cuZG9jdW1lbnR8fHdpbmRvdy5hY2VxdWlyZSYmd2luZG93LmRlZmluZSkpe3dpbmRvdy5jb25zb2xlfHwod2luZG93LmNvbnNvbGU9ZnVuY3Rpb24oKXt2YXIgbXNncz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cG9zdE1lc3NhZ2Uoe3R5cGU6ImxvZyIsZGF0YTptc2dzfSl9LHdpbmRvdy5jb25zb2xlLmVycm9yPXdpbmRvdy5jb25zb2xlLndhcm49d2luZG93LmNvbnNvbGUubG9nPXdpbmRvdy5jb25zb2xlLnRyYWNlPXdpbmRvdy5jb25zb2xlKSx3aW5kb3cud2luZG93PXdpbmRvdyx3aW5kb3cuYWNlPXdpbmRvdyx3aW5kb3cub25lcnJvcj1mdW5jdGlvbihtZXNzYWdlLGZpbGUsbGluZSxjb2wsZXJyKXtwb3N0TWVzc2FnZSh7dHlwZToiZXJyb3IiLGRhdGE6e21lc3NhZ2U6bWVzc2FnZSxkYXRhOmVyci5kYXRhLGZpbGU6ZmlsZSxsaW5lOmxpbmUsY29sOmNvbCxzdGFjazplcnIuc3RhY2t9fSl9LHdpbmRvdy5ub3JtYWxpemVNb2R1bGU9ZnVuY3Rpb24ocGFyZW50SWQsbW9kdWxlTmFtZSl7aWYoLTEhPT1tb2R1bGVOYW1lLmluZGV4T2YoIiEiKSl7dmFyIGNodW5rcz1tb2R1bGVOYW1lLnNwbGl0KCIhIik7cmV0dXJuIHdpbmRvdy5ub3JtYWxpemVNb2R1bGUocGFyZW50SWQsY2h1bmtzWzBdKSsiISIrd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCxjaHVua3NbMV0pfWlmKCIuIj09bW9kdWxlTmFtZS5jaGFyQXQoMCkpe3ZhciBiYXNlPXBhcmVudElkLnNwbGl0KCIvIikuc2xpY2UoMCwtMSkuam9pbigiLyIpO2Zvcihtb2R1bGVOYW1lPShiYXNlP2Jhc2UrIi8iOiIiKSttb2R1bGVOYW1lOy0xIT09bW9kdWxlTmFtZS5pbmRleE9mKCIuIikmJnByZXZpb3VzIT1tb2R1bGVOYW1lOyl7dmFyIHByZXZpb3VzPW1vZHVsZU5hbWU7bW9kdWxlTmFtZT1tb2R1bGVOYW1lLnJlcGxhY2UoL15cXC5cXC8vLCIiKS5yZXBsYWNlKC9cXC9cXC5cXC8vLCIvIikucmVwbGFjZSgvW15cXC9dK1xcL1xcLlxcLlxcLy8sIiIpfX1yZXR1cm4gbW9kdWxlTmFtZX0sd2luZG93LmFjZXF1aXJlPWZ1bmN0aW9uIGFjZXF1aXJlKHBhcmVudElkLGlkKXtpZihpZHx8KGlkPXBhcmVudElkLHBhcmVudElkPW51bGwpLCFpZC5jaGFyQXQpdGhyb3cgRXJyb3IoIndvcmtlci5qcyBhY2VxdWlyZSgpIGFjY2VwdHMgb25seSAocGFyZW50SWQsIGlkKSBhcyBhcmd1bWVudHMiKTtpZD13aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLGlkKTt2YXIgbW9kdWxlPXdpbmRvdy5hY2VxdWlyZS5tb2R1bGVzW2lkXTtpZihtb2R1bGUpcmV0dXJuIG1vZHVsZS5pbml0aWFsaXplZHx8KG1vZHVsZS5pbml0aWFsaXplZD0hMCxtb2R1bGUuZXhwb3J0cz1tb2R1bGUuZmFjdG9yeSgpLmV4cG9ydHMpLG1vZHVsZS5leHBvcnRzO2lmKCF3aW5kb3cuYWNlcXVpcmUudGxucylyZXR1cm4gY29uc29sZS5sb2coInVuYWJsZSB0byBsb2FkICIraWQpO3ZhciBwYXRoPXJlc29sdmVNb2R1bGVJZChpZCx3aW5kb3cuYWNlcXVpcmUudGxucyk7cmV0dXJuIi5qcyIhPXBhdGguc2xpY2UoLTMpJiYocGF0aCs9Ii5qcyIpLHdpbmRvdy5hY2VxdWlyZS5pZD1pZCx3aW5kb3cuYWNlcXVpcmUubW9kdWxlc1tpZF09e30saW1wb3J0U2NyaXB0cyhwYXRoKSx3aW5kb3cuYWNlcXVpcmUocGFyZW50SWQsaWQpfSx3aW5kb3cuYWNlcXVpcmUubW9kdWxlcz17fSx3aW5kb3cuYWNlcXVpcmUudGxucz17fSx3aW5kb3cuZGVmaW5lPWZ1bmN0aW9uKGlkLGRlcHMsZmFjdG9yeSl7aWYoMj09YXJndW1lbnRzLmxlbmd0aD8oZmFjdG9yeT1kZXBzLCJzdHJpbmciIT10eXBlb2YgaWQmJihkZXBzPWlkLGlkPXdpbmRvdy5hY2VxdWlyZS5pZCkpOjE9PWFyZ3VtZW50cy5sZW5ndGgmJihmYWN0b3J5PWlkLGRlcHM9W10saWQ9d2luZG93LmFjZXF1aXJlLmlkKSwiZnVuY3Rpb24iIT10eXBlb2YgZmFjdG9yeSlyZXR1cm4gd2luZG93LmFjZXF1aXJlLm1vZHVsZXNbaWRdPXtleHBvcnRzOmZhY3RvcnksaW5pdGlhbGl6ZWQ6ITB9LHZvaWQgMDtkZXBzLmxlbmd0aHx8KGRlcHM9WyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdKTt2YXIgcmVxPWZ1bmN0aW9uKGNoaWxkSWQpe3JldHVybiB3aW5kb3cuYWNlcXVpcmUoaWQsY2hpbGRJZCl9O3dpbmRvdy5hY2VxdWlyZS5tb2R1bGVzW2lkXT17ZXhwb3J0czp7fSxmYWN0b3J5OmZ1bmN0aW9uKCl7dmFyIG1vZHVsZT10aGlzLHJldHVybkV4cG9ydHM9ZmFjdG9yeS5hcHBseSh0aGlzLGRlcHMubWFwKGZ1bmN0aW9uKGRlcCl7c3dpdGNoKGRlcCl7Y2FzZSJyZXF1aXJlIjpyZXR1cm4gcmVxO2Nhc2UiZXhwb3J0cyI6cmV0dXJuIG1vZHVsZS5leHBvcnRzO2Nhc2UibW9kdWxlIjpyZXR1cm4gbW9kdWxlO2RlZmF1bHQ6cmV0dXJuIHJlcShkZXApfX0pKTtyZXR1cm4gcmV0dXJuRXhwb3J0cyYmKG1vZHVsZS5leHBvcnRzPXJldHVybkV4cG9ydHMpLG1vZHVsZX19fSx3aW5kb3cuZGVmaW5lLmFtZD17fSxhY2VxdWlyZS50bG5zPXt9LHdpbmRvdy5pbml0QmFzZVVybHM9ZnVuY3Rpb24odG9wTGV2ZWxOYW1lc3BhY2VzKXtmb3IodmFyIGkgaW4gdG9wTGV2ZWxOYW1lc3BhY2VzKWFjZXF1aXJlLnRsbnNbaV09dG9wTGV2ZWxOYW1lc3BhY2VzW2ldfSx3aW5kb3cuaW5pdFNlbmRlcj1mdW5jdGlvbigpe3ZhciBFdmVudEVtaXR0ZXI9d2luZG93LmFjZXF1aXJlKCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsb29wPXdpbmRvdy5hY2VxdWlyZSgiYWNlL2xpYi9vb3AiKSxTZW5kZXI9ZnVuY3Rpb24oKXt9O3JldHVybiBmdW5jdGlvbigpe29vcC5pbXBsZW1lbnQodGhpcyxFdmVudEVtaXR0ZXIpLHRoaXMuY2FsbGJhY2s9ZnVuY3Rpb24oZGF0YSxjYWxsYmFja0lkKXtwb3N0TWVzc2FnZSh7dHlwZToiY2FsbCIsaWQ6Y2FsbGJhY2tJZCxkYXRhOmRhdGF9KX0sdGhpcy5lbWl0PWZ1bmN0aW9uKG5hbWUsZGF0YSl7cG9zdE1lc3NhZ2Uoe3R5cGU6ImV2ZW50IixuYW1lOm5hbWUsZGF0YTpkYXRhfSl9fS5jYWxsKFNlbmRlci5wcm90b3R5cGUpLG5ldyBTZW5kZXJ9O3ZhciBtYWluPXdpbmRvdy5tYWluPW51bGwsc2VuZGVyPXdpbmRvdy5zZW5kZXI9bnVsbDt3aW5kb3cub25tZXNzYWdlPWZ1bmN0aW9uKGUpe3ZhciBtc2c9ZS5kYXRhO2lmKG1zZy5ldmVudCYmc2VuZGVyKXNlbmRlci5fc2lnbmFsKG1zZy5ldmVudCxtc2cuZGF0YSk7ZWxzZSBpZihtc2cuY29tbWFuZClpZihtYWluW21zZy5jb21tYW5kXSltYWluW21zZy5jb21tYW5kXS5hcHBseShtYWluLG1zZy5hcmdzKTtlbHNle2lmKCF3aW5kb3dbbXNnLmNvbW1hbmRdKXRocm93IEVycm9yKCJVbmtub3duIGNvbW1hbmQ6Iittc2cuY29tbWFuZCk7d2luZG93W21zZy5jb21tYW5kXS5hcHBseSh3aW5kb3csbXNnLmFyZ3MpfWVsc2UgaWYobXNnLmluaXQpe3dpbmRvdy5pbml0QmFzZVVybHMobXNnLnRsbnMpLGFjZXF1aXJlKCJhY2UvbGliL2VzNS1zaGltIiksc2VuZGVyPXdpbmRvdy5zZW5kZXI9d2luZG93LmluaXRTZW5kZXIoKTt2YXIgY2xheno9YWNlcXVpcmUobXNnLm1vZHVsZSlbbXNnLmNsYXNzbmFtZV07bWFpbj13aW5kb3cubWFpbj1uZXcgY2xhenooc2VuZGVyKX19fX0odGhpcyksYWNlLmRlZmluZSgiYWNlL2xpYi9vb3AiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhY2VxdWlyZSxleHBvcnRzKXsidXNlIHN0cmljdCI7ZXhwb3J0cy5pbmhlcml0cz1mdW5jdGlvbihjdG9yLHN1cGVyQ3Rvcil7Y3Rvci5zdXBlcl89c3VwZXJDdG9yLGN0b3IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmN0b3IsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9LGV4cG9ydHMubWl4aW49ZnVuY3Rpb24ob2JqLG1peGluKXtmb3IodmFyIGtleSBpbiBtaXhpbilvYmpba2V5XT1taXhpbltrZXldO3JldHVybiBvYmp9LGV4cG9ydHMuaW1wbGVtZW50PWZ1bmN0aW9uKHByb3RvLG1peGluKXtleHBvcnRzLm1peGluKHByb3RvLG1peGluKX19KSxhY2UuZGVmaW5lKCJhY2UvbGliL2xhbmciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhY2VxdWlyZSxleHBvcnRzKXsidXNlIHN0cmljdCI7ZXhwb3J0cy5sYXN0PWZ1bmN0aW9uKGEpe3JldHVybiBhW2EubGVuZ3RoLTFdfSxleHBvcnRzLnN0cmluZ1JldmVyc2U9ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIil9LGV4cG9ydHMuc3RyaW5nUmVwZWF0PWZ1bmN0aW9uKHN0cmluZyxjb3VudCl7Zm9yKHZhciByZXN1bHQ9IiI7Y291bnQ+MDspMSZjb3VudCYmKHJlc3VsdCs9c3RyaW5nKSwoY291bnQ+Pj0xKSYmKHN0cmluZys9c3RyaW5nKTtyZXR1cm4gcmVzdWx0fTt2YXIgdHJpbUJlZ2luUmVnZXhwPS9eXFxzXFxzKi8sdHJpbUVuZFJlZ2V4cD0vXFxzXFxzKiQvO2V4cG9ydHMuc3RyaW5nVHJpbUxlZnQ9ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCIiKX0sZXhwb3J0cy5zdHJpbmdUcmltUmlnaHQ9ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwiIil9LGV4cG9ydHMuY29weU9iamVjdD1mdW5jdGlvbihvYmope3ZhciBjb3B5PXt9O2Zvcih2YXIga2V5IGluIG9iailjb3B5W2tleV09b2JqW2tleV07cmV0dXJuIGNvcHl9LGV4cG9ydHMuY29weUFycmF5PWZ1bmN0aW9uKGFycmF5KXtmb3IodmFyIGNvcHk9W10saT0wLGw9YXJyYXkubGVuZ3RoO2w+aTtpKyspY29weVtpXT1hcnJheVtpXSYmIm9iamVjdCI9PXR5cGVvZiBhcnJheVtpXT90aGlzLmNvcHlPYmplY3QoYXJyYXlbaV0pOmFycmF5W2ldO3JldHVybiBjb3B5fSxleHBvcnRzLmRlZXBDb3B5PWZ1bmN0aW9uIGRlZXBDb3B5KG9iail7aWYoIm9iamVjdCIhPXR5cGVvZiBvYmp8fCFvYmopcmV0dXJuIG9iajt2YXIgY29weTtpZihBcnJheS5pc0FycmF5KG9iaikpe2NvcHk9W107Zm9yKHZhciBrZXk9MDtvYmoubGVuZ3RoPmtleTtrZXkrKyljb3B5W2tleV09ZGVlcENvcHkob2JqW2tleV0pO3JldHVybiBjb3B5fWlmKCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpcmV0dXJuIG9iajtjb3B5PXt9O2Zvcih2YXIga2V5IGluIG9iailjb3B5W2tleV09ZGVlcENvcHkob2JqW2tleV0pO3JldHVybiBjb3B5fSxleHBvcnRzLmFycmF5VG9NYXA9ZnVuY3Rpb24oYXJyKXtmb3IodmFyIG1hcD17fSxpPTA7YXJyLmxlbmd0aD5pO2krKyltYXBbYXJyW2ldXT0xO3JldHVybiBtYXB9LGV4cG9ydHMuY3JlYXRlTWFwPWZ1bmN0aW9uKHByb3BzKXt2YXIgbWFwPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBpIGluIHByb3BzKW1hcFtpXT1wcm9wc1tpXTtyZXR1cm4gbWFwfSxleHBvcnRzLmFycmF5UmVtb3ZlPWZ1bmN0aW9uKGFycmF5LHZhbHVlKXtmb3IodmFyIGk9MDthcnJheS5sZW5ndGg+PWk7aSsrKXZhbHVlPT09YXJyYXlbaV0mJmFycmF5LnNwbGljZShpLDEpfSxleHBvcnRzLmVzY2FwZVJlZ0V4cD1mdW5jdGlvbihzdHIpe3JldHVybiBzdHIucmVwbGFjZSgvKFsuKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywiXFxcXCQxIil9LGV4cG9ydHMuZXNjYXBlSFRNTD1mdW5jdGlvbihzdHIpe3JldHVybiBzdHIucmVwbGFjZSgvJi9nLCImIzM4OyIpLnJlcGxhY2UoLyIvZywiJiMzNDsiKS5yZXBsYWNlKC9cJy9nLCImIzM5OyIpLnJlcGxhY2UoLzwvZywiJiM2MDsiKX0sZXhwb3J0cy5nZXRNYXRjaE9mZnNldHM9ZnVuY3Rpb24oc3RyaW5nLHJlZ0V4cCl7dmFyIG1hdGNoZXM9W107cmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlZ0V4cCxmdW5jdGlvbihzdHIpe21hdGNoZXMucHVzaCh7b2Zmc2V0OmFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdLGxlbmd0aDpzdHIubGVuZ3RofSl9KSxtYXRjaGVzfSxleHBvcnRzLmRlZmVycmVkQ2FsbD1mdW5jdGlvbihmY24pe3ZhciB0aW1lcj1udWxsLGNhbGxiYWNrPWZ1bmN0aW9uKCl7dGltZXI9bnVsbCxmY24oKX0sZGVmZXJyZWQ9ZnVuY3Rpb24odGltZW91dCl7cmV0dXJuIGRlZmVycmVkLmNhbmNlbCgpLHRpbWVyPXNldFRpbWVvdXQoY2FsbGJhY2ssdGltZW91dHx8MCksZGVmZXJyZWR9O3JldHVybiBkZWZlcnJlZC5zY2hlZHVsZT1kZWZlcnJlZCxkZWZlcnJlZC5jYWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsKCksZmNuKCksZGVmZXJyZWR9LGRlZmVycmVkLmNhbmNlbD1mdW5jdGlvbigpe3JldHVybiBjbGVhclRpbWVvdXQodGltZXIpLHRpbWVyPW51bGwsZGVmZXJyZWR9LGRlZmVycmVkLmlzUGVuZGluZz1mdW5jdGlvbigpe3JldHVybiB0aW1lcn0sZGVmZXJyZWR9LGV4cG9ydHMuZGVsYXllZENhbGw9ZnVuY3Rpb24oZmNuLGRlZmF1bHRUaW1lb3V0KXt2YXIgdGltZXI9bnVsbCxjYWxsYmFjaz1mdW5jdGlvbigpe3RpbWVyPW51bGwsZmNuKCl9LF9zZWxmPWZ1bmN0aW9uKHRpbWVvdXQpe251bGw9PXRpbWVyJiYodGltZXI9c2V0VGltZW91dChjYWxsYmFjayx0aW1lb3V0fHxkZWZhdWx0VGltZW91dCkpfTtyZXR1cm4gX3NlbGYuZGVsYXk9ZnVuY3Rpb24odGltZW91dCl7dGltZXImJmNsZWFyVGltZW91dCh0aW1lciksdGltZXI9c2V0VGltZW91dChjYWxsYmFjayx0aW1lb3V0fHxkZWZhdWx0VGltZW91dCl9LF9zZWxmLnNjaGVkdWxlPV9zZWxmLF9zZWxmLmNhbGw9ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbCgpLGZjbigpfSxfc2VsZi5jYW5jZWw9ZnVuY3Rpb24oKXt0aW1lciYmY2xlYXJUaW1lb3V0KHRpbWVyKSx0aW1lcj1udWxsfSxfc2VsZi5pc1BlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGltZXJ9LF9zZWxmfX0pLGFjZS5kZWZpbmUoImFjZS9yYW5nZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGFjZXF1aXJlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgY29tcGFyZVBvaW50cz1mdW5jdGlvbihwMSxwMil7cmV0dXJuIHAxLnJvdy1wMi5yb3d8fHAxLmNvbHVtbi1wMi5jb2x1bW59LFJhbmdlPWZ1bmN0aW9uKHN0YXJ0Um93LHN0YXJ0Q29sdW1uLGVuZFJvdyxlbmRDb2x1bW4pe3RoaXMuc3RhcnQ9e3JvdzpzdGFydFJvdyxjb2x1bW46c3RhcnRDb2x1bW59LHRoaXMuZW5kPXtyb3c6ZW5kUm93LGNvbHVtbjplbmRDb2x1bW59fTsoZnVuY3Rpb24oKXt0aGlzLmlzRXF1YWw9ZnVuY3Rpb24ocmFuZ2Upe3JldHVybiB0aGlzLnN0YXJ0LnJvdz09PXJhbmdlLnN0YXJ0LnJvdyYmdGhpcy5lbmQucm93PT09cmFuZ2UuZW5kLnJvdyYmdGhpcy5zdGFydC5jb2x1bW49PT1yYW5nZS5zdGFydC5jb2x1bW4mJnRoaXMuZW5kLmNvbHVtbj09PXJhbmdlLmVuZC5jb2x1bW59LHRoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUmFuZ2U6IFsiK3RoaXMuc3RhcnQucm93KyIvIit0aGlzLnN0YXJ0LmNvbHVtbisiXSAtPiBbIit0aGlzLmVuZC5yb3crIi8iK3RoaXMuZW5kLmNvbHVtbisiXSJ9LHRoaXMuY29udGFpbnM9ZnVuY3Rpb24ocm93LGNvbHVtbil7cmV0dXJuIDA9PXRoaXMuY29tcGFyZShyb3csY29sdW1uKX0sdGhpcy5jb21wYXJlUmFuZ2U9ZnVuY3Rpb24ocmFuZ2Upe3ZhciBjbXAsZW5kPXJhbmdlLmVuZCxzdGFydD1yYW5nZS5zdGFydDtyZXR1cm4gY21wPXRoaXMuY29tcGFyZShlbmQucm93LGVuZC5jb2x1bW4pLDE9PWNtcD8oY21wPXRoaXMuY29tcGFyZShzdGFydC5yb3csc3RhcnQuY29sdW1uKSwxPT1jbXA/MjowPT1jbXA/MTowKTotMT09Y21wPy0yOihjbXA9dGhpcy5jb21wYXJlKHN0YXJ0LnJvdyxzdGFydC5jb2x1bW4pLC0xPT1jbXA/LTE6MT09Y21wPzQyOjApfSx0aGlzLmNvbXBhcmVQb2ludD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jb21wYXJlKHAucm93LHAuY29sdW1uKX0sdGhpcy5jb250YWluc1JhbmdlPWZ1bmN0aW9uKHJhbmdlKXtyZXR1cm4gMD09dGhpcy5jb21wYXJlUG9pbnQocmFuZ2Uuc3RhcnQpJiYwPT10aGlzLmNvbXBhcmVQb2ludChyYW5nZS5lbmQpfSx0aGlzLmludGVyc2VjdHM9ZnVuY3Rpb24ocmFuZ2Upe3ZhciBjbXA9dGhpcy5jb21wYXJlUmFuZ2UocmFuZ2UpO3JldHVybi0xPT1jbXB8fDA9PWNtcHx8MT09Y21wfSx0aGlzLmlzRW5kPWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3JldHVybiB0aGlzLmVuZC5yb3c9PXJvdyYmdGhpcy5lbmQuY29sdW1uPT1jb2x1bW59LHRoaXMuaXNTdGFydD1mdW5jdGlvbihyb3csY29sdW1uKXtyZXR1cm4gdGhpcy5zdGFydC5yb3c9PXJvdyYmdGhpcy5zdGFydC5jb2x1bW49PWNvbHVtbn0sdGhpcy5zZXRTdGFydD1mdW5jdGlvbihyb3csY29sdW1uKXsib2JqZWN0Ij09dHlwZW9mIHJvdz8odGhpcy5zdGFydC5jb2x1bW49cm93LmNvbHVtbix0aGlzLnN0YXJ0LnJvdz1yb3cucm93KToodGhpcy5zdGFydC5yb3c9cm93LHRoaXMuc3RhcnQuY29sdW1uPWNvbHVtbil9LHRoaXMuc2V0RW5kPWZ1bmN0aW9uKHJvdyxjb2x1bW4peyJvYmplY3QiPT10eXBlb2Ygcm93Pyh0aGlzLmVuZC5jb2x1bW49cm93LmNvbHVtbix0aGlzLmVuZC5yb3c9cm93LnJvdyk6KHRoaXMuZW5kLnJvdz1yb3csdGhpcy5lbmQuY29sdW1uPWNvbHVtbil9LHRoaXMuaW5zaWRlPWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3JldHVybiAwPT10aGlzLmNvbXBhcmUocm93LGNvbHVtbik/dGhpcy5pc0VuZChyb3csY29sdW1uKXx8dGhpcy5pc1N0YXJ0KHJvdyxjb2x1bW4pPyExOiEwOiExfSx0aGlzLmluc2lkZVN0YXJ0PWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3JldHVybiAwPT10aGlzLmNvbXBhcmUocm93LGNvbHVtbik/dGhpcy5pc0VuZChyb3csY29sdW1uKT8hMTohMDohMX0sdGhpcy5pbnNpZGVFbmQ9ZnVuY3Rpb24ocm93LGNvbHVtbil7cmV0dXJuIDA9PXRoaXMuY29tcGFyZShyb3csY29sdW1uKT90aGlzLmlzU3RhcnQocm93LGNvbHVtbik/ITE6ITA6ITF9LHRoaXMuY29tcGFyZT1mdW5jdGlvbihyb3csY29sdW1uKXtyZXR1cm4gdGhpcy5pc011bHRpTGluZSgpfHxyb3chPT10aGlzLnN0YXJ0LnJvdz90aGlzLnN0YXJ0LnJvdz5yb3c/LTE6cm93PnRoaXMuZW5kLnJvdz8xOnRoaXMuc3RhcnQucm93PT09cm93P2NvbHVtbj49dGhpcy5zdGFydC5jb2x1bW4/MDotMTp0aGlzLmVuZC5yb3c9PT1yb3c/dGhpcy5lbmQuY29sdW1uPj1jb2x1bW4/MDoxOjA6dGhpcy5zdGFydC5jb2x1bW4+Y29sdW1uPy0xOmNvbHVtbj50aGlzLmVuZC5jb2x1bW4/MTowfSx0aGlzLmNvbXBhcmVTdGFydD1mdW5jdGlvbihyb3csY29sdW1uKXtyZXR1cm4gdGhpcy5zdGFydC5yb3c9PXJvdyYmdGhpcy5zdGFydC5jb2x1bW49PWNvbHVtbj8tMTp0aGlzLmNvbXBhcmUocm93LGNvbHVtbil9LHRoaXMuY29tcGFyZUVuZD1mdW5jdGlvbihyb3csY29sdW1uKXtyZXR1cm4gdGhpcy5lbmQucm93PT1yb3cmJnRoaXMuZW5kLmNvbHVtbj09Y29sdW1uPzE6dGhpcy5jb21wYXJlKHJvdyxjb2x1bW4pfSx0aGlzLmNvbXBhcmVJbnNpZGU9ZnVuY3Rpb24ocm93LGNvbHVtbil7cmV0dXJuIHRoaXMuZW5kLnJvdz09cm93JiZ0aGlzLmVuZC5jb2x1bW49PWNvbHVtbj8xOnRoaXMuc3RhcnQucm93PT1yb3cmJnRoaXMuc3RhcnQuY29sdW1uPT1jb2x1bW4/LTE6dGhpcy5jb21wYXJlKHJvdyxjb2x1bW4pfSx0aGlzLmNsaXBSb3dzPWZ1bmN0aW9uKGZpcnN0Um93LGxhc3RSb3cpe2lmKHRoaXMuZW5kLnJvdz5sYXN0Um93KXZhciBlbmQ9e3JvdzpsYXN0Um93KzEsY29sdW1uOjB9O2Vsc2UgaWYoZmlyc3RSb3c+dGhpcy5lbmQucm93KXZhciBlbmQ9e3JvdzpmaXJzdFJvdyxjb2x1bW46MH07aWYodGhpcy5zdGFydC5yb3c+bGFzdFJvdyl2YXIgc3RhcnQ9e3JvdzpsYXN0Um93KzEsY29sdW1uOjB9O2Vsc2UgaWYoZmlyc3RSb3c+dGhpcy5zdGFydC5yb3cpdmFyIHN0YXJ0PXtyb3c6Zmlyc3RSb3csY29sdW1uOjB9O3JldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0fHx0aGlzLnN0YXJ0LGVuZHx8dGhpcy5lbmQpfSx0aGlzLmV4dGVuZD1mdW5jdGlvbihyb3csY29sdW1uKXt2YXIgY21wPXRoaXMuY29tcGFyZShyb3csY29sdW1uKTtpZigwPT1jbXApcmV0dXJuIHRoaXM7aWYoLTE9PWNtcCl2YXIgc3RhcnQ9e3Jvdzpyb3csY29sdW1uOmNvbHVtbn07ZWxzZSB2YXIgZW5kPXtyb3c6cm93LGNvbHVtbjpjb2x1bW59O3JldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0fHx0aGlzLnN0YXJ0LGVuZHx8dGhpcy5lbmQpfSx0aGlzLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydC5yb3c9PT10aGlzLmVuZC5yb3cmJnRoaXMuc3RhcnQuY29sdW1uPT09dGhpcy5lbmQuY29sdW1ufSx0aGlzLmlzTXVsdGlMaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnQucm93IT09dGhpcy5lbmQucm93fSx0aGlzLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGhpcy5zdGFydCx0aGlzLmVuZCl9LHRoaXMuY29sbGFwc2VSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMuZW5kLmNvbHVtbj9uZXcgUmFuZ2UodGhpcy5zdGFydC5yb3csMCxNYXRoLm1heCh0aGlzLnN0YXJ0LnJvdyx0aGlzLmVuZC5yb3ctMSksMCk6bmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LDAsdGhpcy5lbmQucm93LDApfSx0aGlzLnRvU2NyZWVuUmFuZ2U9ZnVuY3Rpb24oc2Vzc2lvbil7dmFyIHNjcmVlblBvc1N0YXJ0PXNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuc3RhcnQpLHNjcmVlblBvc0VuZD1zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLmVuZCk7cmV0dXJuIG5ldyBSYW5nZShzY3JlZW5Qb3NTdGFydC5yb3csc2NyZWVuUG9zU3RhcnQuY29sdW1uLHNjcmVlblBvc0VuZC5yb3csc2NyZWVuUG9zRW5kLmNvbHVtbil9LHRoaXMubW92ZUJ5PWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3RoaXMuc3RhcnQucm93Kz1yb3csdGhpcy5zdGFydC5jb2x1bW4rPWNvbHVtbix0aGlzLmVuZC5yb3crPXJvdyx0aGlzLmVuZC5jb2x1bW4rPWNvbHVtbn19KS5jYWxsKFJhbmdlLnByb3RvdHlwZSksUmFuZ2UuZnJvbVBvaW50cz1mdW5jdGlvbihzdGFydCxlbmQpe3JldHVybiBuZXcgUmFuZ2Uoc3RhcnQucm93LHN0YXJ0LmNvbHVtbixlbmQucm93LGVuZC5jb2x1bW4pfSxSYW5nZS5jb21wYXJlUG9pbnRzPWNvbXBhcmVQb2ludHMsUmFuZ2UuY29tcGFyZVBvaW50cz1mdW5jdGlvbihwMSxwMil7cmV0dXJuIHAxLnJvdy1wMi5yb3d8fHAxLmNvbHVtbi1wMi5jb2x1bW59LGV4cG9ydHMuUmFuZ2U9UmFuZ2V9KSxhY2UuZGVmaW5lKCJhY2UvYXBwbHlfZGVsdGEiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhY2VxdWlyZSxleHBvcnRzKXsidXNlIHN0cmljdCI7ZXhwb3J0cy5hcHBseURlbHRhPWZ1bmN0aW9uKGRvY0xpbmVzLGRlbHRhKXt2YXIgcm93PWRlbHRhLnN0YXJ0LnJvdyxzdGFydENvbHVtbj1kZWx0YS5zdGFydC5jb2x1bW4sbGluZT1kb2NMaW5lc1tyb3ddfHwiIjtzd2l0Y2goZGVsdGEuYWN0aW9uKXtjYXNlImluc2VydCI6dmFyIGxpbmVzPWRlbHRhLmxpbmVzO2lmKDE9PT1saW5lcy5sZW5ndGgpZG9jTGluZXNbcm93XT1saW5lLnN1YnN0cmluZygwLHN0YXJ0Q29sdW1uKStkZWx0YS5saW5lc1swXStsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7ZWxzZXt2YXIgYXJncz1bcm93LDFdLmNvbmNhdChkZWx0YS5saW5lcyk7ZG9jTGluZXMuc3BsaWNlLmFwcGx5KGRvY0xpbmVzLGFyZ3MpLGRvY0xpbmVzW3Jvd109bGluZS5zdWJzdHJpbmcoMCxzdGFydENvbHVtbikrZG9jTGluZXNbcm93XSxkb2NMaW5lc1tyb3crZGVsdGEubGluZXMubGVuZ3RoLTFdKz1saW5lLnN1YnN0cmluZyhzdGFydENvbHVtbil9YnJlYWs7Y2FzZSJyZW1vdmUiOnZhciBlbmRDb2x1bW49ZGVsdGEuZW5kLmNvbHVtbixlbmRSb3c9ZGVsdGEuZW5kLnJvdztyb3c9PT1lbmRSb3c/ZG9jTGluZXNbcm93XT1saW5lLnN1YnN0cmluZygwLHN0YXJ0Q29sdW1uKStsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4pOmRvY0xpbmVzLnNwbGljZShyb3csZW5kUm93LXJvdysxLGxpbmUuc3Vic3RyaW5nKDAsc3RhcnRDb2x1bW4pK2RvY0xpbmVzW2VuZFJvd10uc3Vic3RyaW5nKGVuZENvbHVtbikpfX19KSxhY2UuZGVmaW5lKCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhY2VxdWlyZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIEV2ZW50RW1pdHRlcj17fSxzdG9wUHJvcGFnYXRpb249ZnVuY3Rpb24oKXt0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZD0hMH0scHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITB9O0V2ZW50RW1pdHRlci5fZW1pdD1FdmVudEVtaXR0ZXIuX2Rpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24oZXZlbnROYW1lLGUpe3RoaXMuX2V2ZW50UmVnaXN0cnl8fCh0aGlzLl9ldmVudFJlZ2lzdHJ5PXt9KSx0aGlzLl9kZWZhdWx0SGFuZGxlcnN8fCh0aGlzLl9kZWZhdWx0SGFuZGxlcnM9e30pO3ZhciBsaXN0ZW5lcnM9dGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdfHxbXSxkZWZhdWx0SGFuZGxlcj10aGlzLl9kZWZhdWx0SGFuZGxlcnNbZXZlbnROYW1lXTtpZihsaXN0ZW5lcnMubGVuZ3RofHxkZWZhdWx0SGFuZGxlcil7Im9iamVjdCI9PXR5cGVvZiBlJiZlfHwoZT17fSksZS50eXBlfHwoZS50eXBlPWV2ZW50TmFtZSksZS5zdG9wUHJvcGFnYXRpb258fChlLnN0b3BQcm9wYWdhdGlvbj1zdG9wUHJvcGFnYXRpb24pLGUucHJldmVudERlZmF1bHR8fChlLnByZXZlbnREZWZhdWx0PXByZXZlbnREZWZhdWx0KSxsaXN0ZW5lcnM9bGlzdGVuZXJzLnNsaWNlKCk7Zm9yKHZhciBpPTA7bGlzdGVuZXJzLmxlbmd0aD5pJiYobGlzdGVuZXJzW2ldKGUsdGhpcyksIWUucHJvcGFnYXRpb25TdG9wcGVkKTtpKyspO3JldHVybiBkZWZhdWx0SGFuZGxlciYmIWUuZGVmYXVsdFByZXZlbnRlZD9kZWZhdWx0SGFuZGxlcihlLHRoaXMpOnZvaWQgMH19LEV2ZW50RW1pdHRlci5fc2lnbmFsPWZ1bmN0aW9uKGV2ZW50TmFtZSxlKXt2YXIgbGlzdGVuZXJzPSh0aGlzLl9ldmVudFJlZ2lzdHJ5fHx7fSlbZXZlbnROYW1lXTtpZihsaXN0ZW5lcnMpe2xpc3RlbmVycz1saXN0ZW5lcnMuc2xpY2UoKTtmb3IodmFyIGk9MDtsaXN0ZW5lcnMubGVuZ3RoPmk7aSsrKWxpc3RlbmVyc1tpXShlLHRoaXMpfX0sRXZlbnRFbWl0dGVyLm9uY2U9ZnVuY3Rpb24oZXZlbnROYW1lLGNhbGxiYWNrKXt2YXIgX3NlbGY9dGhpcztjYWxsYmFjayYmdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSxmdW5jdGlvbiBuZXdDYWxsYmFjaygpe19zZWxmLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLG5ld0NhbGxiYWNrKSxjYWxsYmFjay5hcHBseShudWxsLGFyZ3VtZW50cyl9KX0sRXZlbnRFbWl0dGVyLnNldERlZmF1bHRIYW5kbGVyPWZ1bmN0aW9uKGV2ZW50TmFtZSxjYWxsYmFjayl7dmFyIGhhbmRsZXJzPXRoaXMuX2RlZmF1bHRIYW5kbGVycztpZihoYW5kbGVyc3x8KGhhbmRsZXJzPXRoaXMuX2RlZmF1bHRIYW5kbGVycz17X2Rpc2FibGVkXzp7fX0pLGhhbmRsZXJzW2V2ZW50TmFtZV0pe3ZhciBvbGQ9aGFuZGxlcnNbZXZlbnROYW1lXSxkaXNhYmxlZD1oYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV07ZGlzYWJsZWR8fChoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV09ZGlzYWJsZWQ9W10pLGRpc2FibGVkLnB1c2gob2xkKTt2YXIgaT1kaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTstMSE9aSYmZGlzYWJsZWQuc3BsaWNlKGksMSl9aGFuZGxlcnNbZXZlbnROYW1lXT1jYWxsYmFja30sRXZlbnRFbWl0dGVyLnJlbW92ZURlZmF1bHRIYW5kbGVyPWZ1bmN0aW9uKGV2ZW50TmFtZSxjYWxsYmFjayl7dmFyIGhhbmRsZXJzPXRoaXMuX2RlZmF1bHRIYW5kbGVycztpZihoYW5kbGVycyl7dmFyIGRpc2FibGVkPWhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTtpZihoYW5kbGVyc1tldmVudE5hbWVdPT1jYWxsYmFjayloYW5kbGVyc1tldmVudE5hbWVdLGRpc2FibGVkJiZ0aGlzLnNldERlZmF1bHRIYW5kbGVyKGV2ZW50TmFtZSxkaXNhYmxlZC5wb3AoKSk7ZWxzZSBpZihkaXNhYmxlZCl7dmFyIGk9ZGlzYWJsZWQuaW5kZXhPZihjYWxsYmFjayk7LTEhPWkmJmRpc2FibGVkLnNwbGljZShpLDEpfX19LEV2ZW50RW1pdHRlci5vbj1FdmVudEVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihldmVudE5hbWUsY2FsbGJhY2ssY2FwdHVyaW5nKXt0aGlzLl9ldmVudFJlZ2lzdHJ5PXRoaXMuX2V2ZW50UmVnaXN0cnl8fHt9O3ZhciBsaXN0ZW5lcnM9dGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdO3JldHVybiBsaXN0ZW5lcnN8fChsaXN0ZW5lcnM9dGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdPVtdKSwtMT09bGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spJiZsaXN0ZW5lcnNbY2FwdHVyaW5nPyJ1bnNoaWZ0IjoicHVzaCJdKGNhbGxiYWNrKSxjYWxsYmFja30sRXZlbnRFbWl0dGVyLm9mZj1FdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXI9RXZlbnRFbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZXZlbnROYW1lLGNhbGxiYWNrKXt0aGlzLl9ldmVudFJlZ2lzdHJ5PXRoaXMuX2V2ZW50UmVnaXN0cnl8fHt9O3ZhciBsaXN0ZW5lcnM9dGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdO2lmKGxpc3RlbmVycyl7dmFyIGluZGV4PWxpc3RlbmVycy5pbmRleE9mKGNhbGxiYWNrKTstMSE9PWluZGV4JiZsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LDEpfX0sRXZlbnRFbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihldmVudE5hbWUpe3RoaXMuX2V2ZW50UmVnaXN0cnkmJih0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV09W10pfSxleHBvcnRzLkV2ZW50RW1pdHRlcj1FdmVudEVtaXR0ZXJ9KSxhY2UuZGVmaW5lKCJhY2UvYW5jaG9yIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSxmdW5jdGlvbihhY2VxdWlyZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIG9vcD1hY2VxdWlyZSgiLi9saWIvb29wIiksRXZlbnRFbWl0dGVyPWFjZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLEFuY2hvcj1leHBvcnRzLkFuY2hvcj1mdW5jdGlvbihkb2Mscm93LGNvbHVtbil7dGhpcy4kb25DaGFuZ2U9dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpLHRoaXMuYXR0YWNoKGRvYyksY29sdW1uPT09dm9pZCAwP3RoaXMuc2V0UG9zaXRpb24ocm93LnJvdyxyb3cuY29sdW1uKTp0aGlzLnNldFBvc2l0aW9uKHJvdyxjb2x1bW4pfTsoZnVuY3Rpb24oKXtmdW5jdGlvbiAkcG9pbnRzSW5PcmRlcihwb2ludDEscG9pbnQyLGVxdWFsUG9pbnRzSW5PcmRlcil7dmFyIGJDb2xJc0FmdGVyPWVxdWFsUG9pbnRzSW5PcmRlcj9wb2ludDEuY29sdW1uPD1wb2ludDIuY29sdW1uOnBvaW50MS5jb2x1bW48cG9pbnQyLmNvbHVtbjtyZXR1cm4gcG9pbnQxLnJvdzxwb2ludDIucm93fHxwb2ludDEucm93PT1wb2ludDIucm93JiZiQ29sSXNBZnRlcn1mdW5jdGlvbiAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSxwb2ludCxtb3ZlSWZFcXVhbCl7dmFyIGRlbHRhSXNJbnNlcnQ9Imluc2VydCI9PWRlbHRhLmFjdGlvbixkZWx0YVJvd1NoaWZ0PShkZWx0YUlzSW5zZXJ0PzE6LTEpKihkZWx0YS5lbmQucm93LWRlbHRhLnN0YXJ0LnJvdyksZGVsdGFDb2xTaGlmdD0oZGVsdGFJc0luc2VydD8xOi0xKSooZGVsdGEuZW5kLmNvbHVtbi1kZWx0YS5zdGFydC5jb2x1bW4pLGRlbHRhU3RhcnQ9ZGVsdGEuc3RhcnQsZGVsdGFFbmQ9ZGVsdGFJc0luc2VydD9kZWx0YVN0YXJ0OmRlbHRhLmVuZDtyZXR1cm4gJHBvaW50c0luT3JkZXIocG9pbnQsZGVsdGFTdGFydCxtb3ZlSWZFcXVhbCk/e3Jvdzpwb2ludC5yb3csY29sdW1uOnBvaW50LmNvbHVtbn06JHBvaW50c0luT3JkZXIoZGVsdGFFbmQscG9pbnQsIW1vdmVJZkVxdWFsKT97cm93OnBvaW50LnJvdytkZWx0YVJvd1NoaWZ0LGNvbHVtbjpwb2ludC5jb2x1bW4rKHBvaW50LnJvdz09ZGVsdGFFbmQucm93P2RlbHRhQ29sU2hpZnQ6MCl9Ontyb3c6ZGVsdGFTdGFydC5yb3csY29sdW1uOmRlbHRhU3RhcnQuY29sdW1ufX1vb3AuaW1wbGVtZW50KHRoaXMsRXZlbnRFbWl0dGVyKSx0aGlzLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csdGhpcy5jb2x1bW4pfSx0aGlzLmdldERvY3VtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jdW1lbnR9LHRoaXMuJGluc2VydFJpZ2h0PSExLHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24oZGVsdGEpe2lmKCEoZGVsdGEuc3RhcnQucm93PT1kZWx0YS5lbmQucm93JiZkZWx0YS5zdGFydC5yb3chPXRoaXMucm93fHxkZWx0YS5zdGFydC5yb3c+dGhpcy5yb3cpKXt2YXIgcG9pbnQ9JGdldFRyYW5zZm9ybWVkUG9pbnQoZGVsdGEse3Jvdzp0aGlzLnJvdyxjb2x1bW46dGhpcy5jb2x1bW59LHRoaXMuJGluc2VydFJpZ2h0KTt0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdyxwb2ludC5jb2x1bW4sITApfX0sdGhpcy5zZXRQb3NpdGlvbj1mdW5jdGlvbihyb3csY29sdW1uLG5vQ2xpcCl7dmFyIHBvcztpZihwb3M9bm9DbGlwP3tyb3c6cm93LGNvbHVtbjpjb2x1bW59OnRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQocm93LGNvbHVtbiksdGhpcy5yb3chPXBvcy5yb3d8fHRoaXMuY29sdW1uIT1wb3MuY29sdW1uKXt2YXIgb2xkPXtyb3c6dGhpcy5yb3csY29sdW1uOnRoaXMuY29sdW1ufTt0aGlzLnJvdz1wb3Mucm93LHRoaXMuY29sdW1uPXBvcy5jb2x1bW4sdGhpcy5fc2lnbmFsKCJjaGFuZ2UiLHtvbGQ6b2xkLHZhbHVlOnBvc30pfX0sdGhpcy5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy4kb25DaGFuZ2UpfSx0aGlzLmF0dGFjaD1mdW5jdGlvbihkb2Mpe3RoaXMuZG9jdW1lbnQ9ZG9jfHx0aGlzLmRvY3VtZW50LHRoaXMuZG9jdW1lbnQub24oImNoYW5nZSIsdGhpcy4kb25DaGFuZ2UpfSx0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50PWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3ZhciBwb3M9e307cmV0dXJuIHJvdz49dGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKT8ocG9zLnJvdz1NYXRoLm1heCgwLHRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCktMSkscG9zLmNvbHVtbj10aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoKTowPnJvdz8ocG9zLnJvdz0wLHBvcy5jb2x1bW49MCk6KHBvcy5yb3c9cm93LHBvcy5jb2x1bW49TWF0aC5taW4odGhpcy5kb2N1bWVudC5nZXRMaW5lKHBvcy5yb3cpLmxlbmd0aCxNYXRoLm1heCgwLGNvbHVtbikpKSwwPmNvbHVtbiYmKHBvcy5jb2x1bW49MCkscG9zfX0pLmNhbGwoQW5jaG9yLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvZG9jdW1lbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9hcHBseV9kZWx0YSIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9yYW5nZSIsImFjZS9hbmNob3IiXSxmdW5jdGlvbihhY2VxdWlyZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIG9vcD1hY2VxdWlyZSgiLi9saWIvb29wIiksYXBwbHlEZWx0YT1hY2VxdWlyZSgiLi9hcHBseV9kZWx0YSIpLmFwcGx5RGVsdGEsRXZlbnRFbWl0dGVyPWFjZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLFJhbmdlPWFjZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2UsQW5jaG9yPWFjZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hvcixEb2N1bWVudD1mdW5jdGlvbih0ZXh0T3JMaW5lcyl7dGhpcy4kbGluZXM9WyIiXSwwPT09dGV4dE9yTGluZXMubGVuZ3RoP3RoaXMuJGxpbmVzPVsiIl06QXJyYXkuaXNBcnJheSh0ZXh0T3JMaW5lcyk/dGhpcy5pbnNlcnRNZXJnZWRMaW5lcyh7cm93OjAsY29sdW1uOjB9LHRleHRPckxpbmVzKTp0aGlzLmluc2VydCh7cm93OjAsY29sdW1uOjB9LHRleHRPckxpbmVzKX07KGZ1bmN0aW9uKCl7b29wLmltcGxlbWVudCh0aGlzLEV2ZW50RW1pdHRlciksdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbih0ZXh0KXt2YXIgbGVuPXRoaXMuZ2V0TGVuZ3RoKCktMTt0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwwLGxlbix0aGlzLmdldExpbmUobGVuKS5sZW5ndGgpKSx0aGlzLmluc2VydCh7cm93OjAsY29sdW1uOjB9LHRleHQpfSx0aGlzLmdldFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKX0sdGhpcy5jcmVhdGVBbmNob3I9ZnVuY3Rpb24ocm93LGNvbHVtbil7cmV0dXJuIG5ldyBBbmNob3IodGhpcyxyb3csY29sdW1uKX0sdGhpcy4kc3BsaXQ9MD09PSJhYWEiLnNwbGl0KC9hLykubGVuZ3RoP2Z1bmN0aW9uKHRleHQpe3JldHVybiB0ZXh0LnJlcGxhY2UoL1xcclxcbnxcXHIvZywiXFxuIikuc3BsaXQoIlxcbiIpfTpmdW5jdGlvbih0ZXh0KXtyZXR1cm4gdGV4dC5zcGxpdCgvXFxyXFxufFxccnxcXG4vKX0sdGhpcy4kZGV0ZWN0TmV3TGluZT1mdW5jdGlvbih0ZXh0KXt2YXIgbWF0Y2g9dGV4dC5tYXRjaCgvXi4qPyhcXHJcXG58XFxyfFxcbikvbSk7dGhpcy4kYXV0b05ld0xpbmU9bWF0Y2g/bWF0Y2hbMV06IlxcbiIsdGhpcy5fc2lnbmFsKCJjaGFuZ2VOZXdMaW5lTW9kZSIpfSx0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXI9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy4kbmV3TGluZU1vZGUpe2Nhc2Uid2luZG93cyI6cmV0dXJuIlxcclxcbiI7Y2FzZSJ1bml4IjpyZXR1cm4iXFxuIjtkZWZhdWx0OnJldHVybiB0aGlzLiRhdXRvTmV3TGluZXx8IlxcbiJ9fSx0aGlzLiRhdXRvTmV3TGluZT0iIix0aGlzLiRuZXdMaW5lTW9kZT0iYXV0byIsdGhpcy5zZXROZXdMaW5lTW9kZT1mdW5jdGlvbihuZXdMaW5lTW9kZSl7dGhpcy4kbmV3TGluZU1vZGUhPT1uZXdMaW5lTW9kZSYmKHRoaXMuJG5ld0xpbmVNb2RlPW5ld0xpbmVNb2RlLHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKSl9LHRoaXMuZ2V0TmV3TGluZU1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbmV3TGluZU1vZGV9LHRoaXMuaXNOZXdMaW5lPWZ1bmN0aW9uKHRleHQpe3JldHVybiJcXHJcXG4iPT10ZXh0fHwiXFxyIj09dGV4dHx8IlxcbiI9PXRleHR9LHRoaXMuZ2V0TGluZT1mdW5jdGlvbihyb3cpe3JldHVybiB0aGlzLiRsaW5lc1tyb3ddfHwiIn0sdGhpcy5nZXRMaW5lcz1mdW5jdGlvbihmaXJzdFJvdyxsYXN0Um93KXtyZXR1cm4gdGhpcy4kbGluZXMuc2xpY2UoZmlyc3RSb3csbGFzdFJvdysxKX0sdGhpcy5nZXRBbGxMaW5lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExpbmVzKDAsdGhpcy5nZXRMZW5ndGgoKSl9LHRoaXMuZ2V0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aH0sdGhpcy5nZXRUZXh0UmFuZ2U9ZnVuY3Rpb24ocmFuZ2Upe3JldHVybiB0aGlzLmdldExpbmVzRm9yUmFuZ2UocmFuZ2UpLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpfSx0aGlzLmdldExpbmVzRm9yUmFuZ2U9ZnVuY3Rpb24ocmFuZ2Upe3ZhciBsaW5lcztpZihyYW5nZS5zdGFydC5yb3c9PT1yYW5nZS5lbmQucm93KWxpbmVzPVt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLHJhbmdlLmVuZC5jb2x1bW4pXTtlbHNle2xpbmVzPXRoaXMuZ2V0TGluZXMocmFuZ2Uuc3RhcnQucm93LHJhbmdlLmVuZC5yb3cpLGxpbmVzWzBdPShsaW5lc1swXXx8IiIpLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4pO3ZhciBsPWxpbmVzLmxlbmd0aC0xO3JhbmdlLmVuZC5yb3ctcmFuZ2Uuc3RhcnQucm93PT1sJiYobGluZXNbbF09bGluZXNbbF0uc3Vic3RyaW5nKDAscmFuZ2UuZW5kLmNvbHVtbikpfXJldHVybiBsaW5lc30sdGhpcy5pbnNlcnRMaW5lcz1mdW5jdGlvbihyb3csbGluZXMpe3JldHVybiBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5pbnNlcnRMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIGluc2VydEZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKSx0aGlzLmluc2VydEZ1bGxMaW5lcyhyb3csbGluZXMpfSx0aGlzLnJlbW92ZUxpbmVzPWZ1bmN0aW9uKGZpcnN0Um93LGxhc3RSb3cpe3JldHVybiBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5yZW1vdmVMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHJlbW92ZUZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKSx0aGlzLnJlbW92ZUZ1bGxMaW5lcyhmaXJzdFJvdyxsYXN0Um93KX0sdGhpcy5pbnNlcnROZXdMaW5lPWZ1bmN0aW9uKHBvc2l0aW9uKXtyZXR1cm4gY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TmV3TGluZSBpcyBkZXByZWNhdGVkLiBVc2UgaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIFtcJ1wnLCBcJ1wnXSkgaW5zdGVhZC4iKSx0aGlzLmluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLFsiIiwiIl0pfSx0aGlzLmluc2VydD1mdW5jdGlvbihwb3NpdGlvbix0ZXh0KXtyZXR1cm4gMT49dGhpcy5nZXRMZW5ndGgoKSYmdGhpcy4kZGV0ZWN0TmV3TGluZSh0ZXh0KSx0aGlzLmluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLHRoaXMuJHNwbGl0KHRleHQpKX0sdGhpcy5pbnNlcnRJbkxpbmU9ZnVuY3Rpb24ocG9zaXRpb24sdGV4dCl7dmFyIHN0YXJ0PXRoaXMuY2xpcHBlZFBvcyhwb3NpdGlvbi5yb3cscG9zaXRpb24uY29sdW1uKSxlbmQ9dGhpcy5wb3MocG9zaXRpb24ucm93LHBvc2l0aW9uLmNvbHVtbit0ZXh0Lmxlbmd0aCk7cmV0dXJuIHRoaXMuYXBwbHlEZWx0YSh7c3RhcnQ6c3RhcnQsZW5kOmVuZCxhY3Rpb246Imluc2VydCIsbGluZXM6W3RleHRdfSwhMCksdGhpcy5jbG9uZVBvcyhlbmQpfSx0aGlzLmNsaXBwZWRQb3M9ZnVuY3Rpb24ocm93LGNvbHVtbil7dmFyIGxlbmd0aD10aGlzLmdldExlbmd0aCgpO3ZvaWQgMD09PXJvdz9yb3c9bGVuZ3RoOjA+cm93P3Jvdz0wOnJvdz49bGVuZ3RoJiYocm93PWxlbmd0aC0xLGNvbHVtbj12b2lkIDApO3ZhciBsaW5lPXRoaXMuZ2V0TGluZShyb3cpO3JldHVybiB2b2lkIDA9PWNvbHVtbiYmKGNvbHVtbj1saW5lLmxlbmd0aCksY29sdW1uPU1hdGgubWluKE1hdGgubWF4KGNvbHVtbiwwKSxsaW5lLmxlbmd0aCkse3Jvdzpyb3csY29sdW1uOmNvbHVtbn19LHRoaXMuY2xvbmVQb3M9ZnVuY3Rpb24ocG9zKXtyZXR1cm57cm93OnBvcy5yb3csY29sdW1uOnBvcy5jb2x1bW59fSx0aGlzLnBvcz1mdW5jdGlvbihyb3csY29sdW1uKXtyZXR1cm57cm93OnJvdyxjb2x1bW46Y29sdW1ufX0sdGhpcy4kY2xpcFBvc2l0aW9uPWZ1bmN0aW9uKHBvc2l0aW9uKXt2YXIgbGVuZ3RoPXRoaXMuZ2V0TGVuZ3RoKCk7cmV0dXJuIHBvc2l0aW9uLnJvdz49bGVuZ3RoPyhwb3NpdGlvbi5yb3c9TWF0aC5tYXgoMCxsZW5ndGgtMSkscG9zaXRpb24uY29sdW1uPXRoaXMuZ2V0TGluZShsZW5ndGgtMSkubGVuZ3RoKToocG9zaXRpb24ucm93PU1hdGgubWF4KDAscG9zaXRpb24ucm93KSxwb3NpdGlvbi5jb2x1bW49TWF0aC5taW4oTWF0aC5tYXgocG9zaXRpb24uY29sdW1uLDApLHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmxlbmd0aCkpLHBvc2l0aW9ufSx0aGlzLmluc2VydEZ1bGxMaW5lcz1mdW5jdGlvbihyb3csbGluZXMpe3Jvdz1NYXRoLm1pbihNYXRoLm1heChyb3csMCksdGhpcy5nZXRMZW5ndGgoKSk7dmFyIGNvbHVtbj0wO3RoaXMuZ2V0TGVuZ3RoKCk+cm93PyhsaW5lcz1saW5lcy5jb25jYXQoWyIiXSksY29sdW1uPTApOihsaW5lcz1bIiJdLmNvbmNhdChsaW5lcykscm93LS0sY29sdW1uPXRoaXMuJGxpbmVzW3Jvd10ubGVuZ3RoKSx0aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6cm93LGNvbHVtbjpjb2x1bW59LGxpbmVzKX0sdGhpcy5pbnNlcnRNZXJnZWRMaW5lcz1mdW5jdGlvbihwb3NpdGlvbixsaW5lcyl7dmFyIHN0YXJ0PXRoaXMuY2xpcHBlZFBvcyhwb3NpdGlvbi5yb3cscG9zaXRpb24uY29sdW1uKSxlbmQ9e3JvdzpzdGFydC5yb3crbGluZXMubGVuZ3RoLTEsY29sdW1uOigxPT1saW5lcy5sZW5ndGg/c3RhcnQuY29sdW1uOjApK2xpbmVzW2xpbmVzLmxlbmd0aC0xXS5sZW5ndGh9O3JldHVybiB0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0OnN0YXJ0LGVuZDplbmQsYWN0aW9uOiJpbnNlcnQiLGxpbmVzOmxpbmVzfSksdGhpcy5jbG9uZVBvcyhlbmQpfSx0aGlzLnJlbW92ZT1mdW5jdGlvbihyYW5nZSl7dmFyIHN0YXJ0PXRoaXMuY2xpcHBlZFBvcyhyYW5nZS5zdGFydC5yb3cscmFuZ2Uuc3RhcnQuY29sdW1uKSxlbmQ9dGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3cscmFuZ2UuZW5kLmNvbHVtbik7cmV0dXJuIHRoaXMuYXBwbHlEZWx0YSh7c3RhcnQ6c3RhcnQsZW5kOmVuZCxhY3Rpb246InJlbW92ZSIsbGluZXM6dGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDpzdGFydCxlbmQ6ZW5kfSl9KSx0aGlzLmNsb25lUG9zKHN0YXJ0KX0sdGhpcy5yZW1vdmVJbkxpbmU9ZnVuY3Rpb24ocm93LHN0YXJ0Q29sdW1uLGVuZENvbHVtbil7dmFyIHN0YXJ0PXRoaXMuY2xpcHBlZFBvcyhyb3csc3RhcnRDb2x1bW4pLGVuZD10aGlzLmNsaXBwZWRQb3Mocm93LGVuZENvbHVtbik7cmV0dXJuIHRoaXMuYXBwbHlEZWx0YSh7c3RhcnQ6c3RhcnQsZW5kOmVuZCxhY3Rpb246InJlbW92ZSIsbGluZXM6dGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDpzdGFydCxlbmQ6ZW5kfSl9LCEwKSx0aGlzLmNsb25lUG9zKHN0YXJ0KX0sdGhpcy5yZW1vdmVGdWxsTGluZXM9ZnVuY3Rpb24oZmlyc3RSb3csbGFzdFJvdyl7Zmlyc3RSb3c9TWF0aC5taW4oTWF0aC5tYXgoMCxmaXJzdFJvdyksdGhpcy5nZXRMZW5ndGgoKS0xKSxsYXN0Um93PU1hdGgubWluKE1hdGgubWF4KDAsbGFzdFJvdyksdGhpcy5nZXRMZW5ndGgoKS0xKTt2YXIgZGVsZXRlRmlyc3ROZXdMaW5lPWxhc3RSb3c9PXRoaXMuZ2V0TGVuZ3RoKCktMSYmZmlyc3RSb3c+MCxkZWxldGVMYXN0TmV3TGluZT10aGlzLmdldExlbmd0aCgpLTE+bGFzdFJvdyxzdGFydFJvdz1kZWxldGVGaXJzdE5ld0xpbmU/Zmlyc3RSb3ctMTpmaXJzdFJvdyxzdGFydENvbD1kZWxldGVGaXJzdE5ld0xpbmU/dGhpcy5nZXRMaW5lKHN0YXJ0Um93KS5sZW5ndGg6MCxlbmRSb3c9ZGVsZXRlTGFzdE5ld0xpbmU/bGFzdFJvdysxOmxhc3RSb3csZW5kQ29sPWRlbGV0ZUxhc3ROZXdMaW5lPzA6dGhpcy5nZXRMaW5lKGVuZFJvdykubGVuZ3RoLHJhbmdlPW5ldyBSYW5nZShzdGFydFJvdyxzdGFydENvbCxlbmRSb3csZW5kQ29sKSxkZWxldGVkTGluZXM9dGhpcy4kbGluZXMuc2xpY2UoZmlyc3RSb3csbGFzdFJvdysxKTtyZXR1cm4gdGhpcy5hcHBseURlbHRhKHtzdGFydDpyYW5nZS5zdGFydCxlbmQ6cmFuZ2UuZW5kLGFjdGlvbjoicmVtb3ZlIixsaW5lczp0aGlzLmdldExpbmVzRm9yUmFuZ2UocmFuZ2UpfSksZGVsZXRlZExpbmVzfSx0aGlzLnJlbW92ZU5ld0xpbmU9ZnVuY3Rpb24ocm93KXt0aGlzLmdldExlbmd0aCgpLTE+cm93JiZyb3c+PTAmJnRoaXMuYXBwbHlEZWx0YSh7c3RhcnQ6dGhpcy5wb3Mocm93LHRoaXMuZ2V0TGluZShyb3cpLmxlbmd0aCksZW5kOnRoaXMucG9zKHJvdysxLDApLGFjdGlvbjoicmVtb3ZlIixsaW5lczpbIiIsIiJdfSl9LHRoaXMucmVwbGFjZT1mdW5jdGlvbihyYW5nZSx0ZXh0KXtpZihyYW5nZSBpbnN0YW5jZW9mIFJhbmdlfHwocmFuZ2U9UmFuZ2UuZnJvbVBvaW50cyhyYW5nZS5zdGFydCxyYW5nZS5lbmQpKSwwPT09dGV4dC5sZW5ndGgmJnJhbmdlLmlzRW1wdHkoKSlyZXR1cm4gcmFuZ2Uuc3RhcnQ7aWYodGV4dD09dGhpcy5nZXRUZXh0UmFuZ2UocmFuZ2UpKXJldHVybiByYW5nZS5lbmQ7dGhpcy5yZW1vdmUocmFuZ2UpO3ZhciBlbmQ7cmV0dXJuIGVuZD10ZXh0P3RoaXMuaW5zZXJ0KHJhbmdlLnN0YXJ0LHRleHQpOnJhbmdlLnN0YXJ0fSx0aGlzLmFwcGx5RGVsdGFzPWZ1bmN0aW9uKGRlbHRhcyl7Zm9yKHZhciBpPTA7ZGVsdGFzLmxlbmd0aD5pO2krKyl0aGlzLmFwcGx5RGVsdGEoZGVsdGFzW2ldKX0sdGhpcy5yZXZlcnREZWx0YXM9ZnVuY3Rpb24oZGVsdGFzKXtmb3IodmFyIGk9ZGVsdGFzLmxlbmd0aC0xO2k+PTA7aS0tKXRoaXMucmV2ZXJ0RGVsdGEoZGVsdGFzW2ldKX0sdGhpcy5hcHBseURlbHRhPWZ1bmN0aW9uKGRlbHRhLGRvTm90VmFsaWRhdGUpe3ZhciBpc0luc2VydD0iaW5zZXJ0Ij09ZGVsdGEuYWN0aW9uOyhpc0luc2VydD8xPj1kZWx0YS5saW5lcy5sZW5ndGgmJiFkZWx0YS5saW5lc1swXTohUmFuZ2UuY29tcGFyZVBvaW50cyhkZWx0YS5zdGFydCxkZWx0YS5lbmQpKXx8KGlzSW5zZXJ0JiZkZWx0YS5saW5lcy5sZW5ndGg+MmU0JiZ0aGlzLiRzcGxpdEFuZGFwcGx5TGFyZ2VEZWx0YShkZWx0YSwyZTQpLGFwcGx5RGVsdGEodGhpcy4kbGluZXMsZGVsdGEsZG9Ob3RWYWxpZGF0ZSksdGhpcy5fc2lnbmFsKCJjaGFuZ2UiLGRlbHRhKSl9LHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhPWZ1bmN0aW9uKGRlbHRhLE1BWCl7Zm9yKHZhciBsaW5lcz1kZWx0YS5saW5lcyxsPWxpbmVzLmxlbmd0aCxyb3c9ZGVsdGEuc3RhcnQucm93LGNvbHVtbj1kZWx0YS5zdGFydC5jb2x1bW4sZnJvbT0wLHRvPTA7Oyl7ZnJvbT10byx0bys9TUFYLTE7dmFyIGNodW5rPWxpbmVzLnNsaWNlKGZyb20sdG8pO2lmKHRvPmwpe2RlbHRhLmxpbmVzPWNodW5rLGRlbHRhLnN0YXJ0LnJvdz1yb3crZnJvbSxkZWx0YS5zdGFydC5jb2x1bW49Y29sdW1uO2JyZWFrfWNodW5rLnB1c2goIiIpLHRoaXMuYXBwbHlEZWx0YSh7c3RhcnQ6dGhpcy5wb3Mocm93K2Zyb20sY29sdW1uKSxlbmQ6dGhpcy5wb3Mocm93K3RvLGNvbHVtbj0wKSxhY3Rpb246ZGVsdGEuYWN0aW9uLGxpbmVzOmNodW5rfSwhMCl9fSx0aGlzLnJldmVydERlbHRhPWZ1bmN0aW9uKGRlbHRhKXt0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0OnRoaXMuY2xvbmVQb3MoZGVsdGEuc3RhcnQpLGVuZDp0aGlzLmNsb25lUG9zKGRlbHRhLmVuZCksYWN0aW9uOiJpbnNlcnQiPT1kZWx0YS5hY3Rpb24/InJlbW92ZSI6Imluc2VydCIsbGluZXM6ZGVsdGEubGluZXMuc2xpY2UoKX0pfSx0aGlzLmluZGV4VG9Qb3NpdGlvbj1mdW5jdGlvbihpbmRleCxzdGFydFJvdyl7Zm9yKHZhciBsaW5lcz10aGlzLiRsaW5lc3x8dGhpcy5nZXRBbGxMaW5lcygpLG5ld2xpbmVMZW5ndGg9dGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoLGk9c3RhcnRSb3d8fDAsbD1saW5lcy5sZW5ndGg7bD5pO2krKylpZihpbmRleC09bGluZXNbaV0ubGVuZ3RoK25ld2xpbmVMZW5ndGgsMD5pbmRleClyZXR1cm57cm93OmksY29sdW1uOmluZGV4K2xpbmVzW2ldLmxlbmd0aCtuZXdsaW5lTGVuZ3RofTtyZXR1cm57cm93OmwtMSxjb2x1bW46bGluZXNbbC0xXS5sZW5ndGh9fSx0aGlzLnBvc2l0aW9uVG9JbmRleD1mdW5jdGlvbihwb3Msc3RhcnRSb3cpe2Zvcih2YXIgbGluZXM9dGhpcy4kbGluZXN8fHRoaXMuZ2V0QWxsTGluZXMoKSxuZXdsaW5lTGVuZ3RoPXRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpLmxlbmd0aCxpbmRleD0wLHJvdz1NYXRoLm1pbihwb3Mucm93LGxpbmVzLmxlbmd0aCksaT1zdGFydFJvd3x8MDtyb3c+aTsrK2kpaW5kZXgrPWxpbmVzW2ldLmxlbmd0aCtuZXdsaW5lTGVuZ3RoO3JldHVybiBpbmRleCtwb3MuY29sdW1ufX0pLmNhbGwoRG9jdW1lbnQucHJvdG90eXBlKSxleHBvcnRzLkRvY3VtZW50PURvY3VtZW50fSksYWNlLmRlZmluZSgiYWNlL3dvcmtlci9taXJyb3IiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiLCJhY2UvZG9jdW1lbnQiLCJhY2UvbGliL2xhbmciXSxmdW5jdGlvbihhY2VxdWlyZSxleHBvcnRzKXsidXNlIHN0cmljdCI7YWNlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7dmFyIERvY3VtZW50PWFjZXF1aXJlKCIuLi9kb2N1bWVudCIpLkRvY3VtZW50LGxhbmc9YWNlcXVpcmUoIi4uL2xpYi9sYW5nIiksTWlycm9yPWV4cG9ydHMuTWlycm9yPWZ1bmN0aW9uKHNlbmRlcil7dGhpcy5zZW5kZXI9c2VuZGVyO3ZhciBkb2M9dGhpcy5kb2M9bmV3IERvY3VtZW50KCIiKSxkZWZlcnJlZFVwZGF0ZT10aGlzLmRlZmVycmVkVXBkYXRlPWxhbmcuZGVsYXllZENhbGwodGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpKSxfc2VsZj10aGlzO3NlbmRlci5vbigiY2hhbmdlIixmdW5jdGlvbihlKXt2YXIgZGF0YT1lLmRhdGE7aWYoZGF0YVswXS5zdGFydClkb2MuYXBwbHlEZWx0YXMoZGF0YSk7ZWxzZSBmb3IodmFyIGk9MDtkYXRhLmxlbmd0aD5pO2krPTIpe2lmKEFycmF5LmlzQXJyYXkoZGF0YVtpKzFdKSl2YXIgZD17YWN0aW9uOiJpbnNlcnQiLHN0YXJ0OmRhdGFbaV0sbGluZXM6ZGF0YVtpKzFdfTtlbHNlIHZhciBkPXthY3Rpb246InJlbW92ZSIsc3RhcnQ6ZGF0YVtpXSxlbmQ6ZGF0YVtpKzFdfTtkb2MuYXBwbHlEZWx0YShkLCEwKX1yZXR1cm4gX3NlbGYuJHRpbWVvdXQ/ZGVmZXJyZWRVcGRhdGUuc2NoZWR1bGUoX3NlbGYuJHRpbWVvdXQpOihfc2VsZi5vblVwZGF0ZSgpLHZvaWQgMCl9KX07KGZ1bmN0aW9uKCl7dGhpcy4kdGltZW91dD01MDAsdGhpcy5zZXRUaW1lb3V0PWZ1bmN0aW9uKHRpbWVvdXQpe3RoaXMuJHRpbWVvdXQ9dGltZW91dH0sdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbih2YWx1ZSl7dGhpcy5kb2Muc2V0VmFsdWUodmFsdWUpLHRoaXMuZGVmZXJyZWRVcGRhdGUuc2NoZWR1bGUodGhpcy4kdGltZW91dCl9LHRoaXMuZ2V0VmFsdWU9ZnVuY3Rpb24oY2FsbGJhY2tJZCl7dGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSxjYWxsYmFja0lkKX0sdGhpcy5vblVwZGF0ZT1mdW5jdGlvbigpe30sdGhpcy5pc1BlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZlcnJlZFVwZGF0ZS5pc1BlbmRpbmcoKX19KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpfSksYWNlLmRlZmluZSgiYWNlL21vZGUvY3NzL2Nzc2xpbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhY2VxdWlyZSxleHBvcnRzLG1vZHVsZSl7ZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKX1mdW5jdGlvbiBjbG9uZShwYXJlbnQsY2lyY3VsYXIsZGVwdGgscHJvdG90eXBlKXtmdW5jdGlvbiBfY2xvbmUocGFyZW50LGRlcHRoKXtpZihudWxsPT09cGFyZW50KXJldHVybiBudWxsO2lmKDA9PWRlcHRoKXJldHVybiBwYXJlbnQ7dmFyIGNoaWxkO2lmKCJvYmplY3QiIT10eXBlb2YgcGFyZW50KXJldHVybiBwYXJlbnQ7aWYodXRpbC5pc0FycmF5KHBhcmVudCkpY2hpbGQ9W107ZWxzZSBpZih1dGlsLmlzUmVnRXhwKHBhcmVudCkpY2hpbGQ9UmVnRXhwKHBhcmVudC5zb3VyY2UsdXRpbC5nZXRSZWdFeHBGbGFncyhwYXJlbnQpKSxwYXJlbnQubGFzdEluZGV4JiYoY2hpbGQubGFzdEluZGV4PXBhcmVudC5sYXN0SW5kZXgpO2Vsc2UgaWYodXRpbC5pc0RhdGUocGFyZW50KSljaGlsZD1uZXcgRGF0ZShwYXJlbnQuZ2V0VGltZSgpKTtlbHNle2lmKHVzZUJ1ZmZlciYmQnVmZmVyLmlzQnVmZmVyKHBhcmVudCkpcmV0dXJuIGNoaWxkPW5ldyBCdWZmZXIocGFyZW50Lmxlbmd0aCkscGFyZW50LmNvcHkoY2hpbGQpLGNoaWxkO2NoaWxkPXByb3RvdHlwZT09PXZvaWQgMD9PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihwYXJlbnQpKTpPYmplY3QuY3JlYXRlKHByb3RvdHlwZSl9aWYoY2lyY3VsYXIpe3ZhciBpbmRleD1hbGxQYXJlbnRzLmluZGV4T2YocGFyZW50KTtpZigtMSE9aW5kZXgpcmV0dXJuIGFsbENoaWxkcmVuW2luZGV4XTthbGxQYXJlbnRzLnB1c2gocGFyZW50KSxhbGxDaGlsZHJlbi5wdXNoKGNoaWxkKX1mb3IodmFyIGkgaW4gcGFyZW50KWNoaWxkW2ldPV9jbG9uZShwYXJlbnRbaV0sZGVwdGgtMSk7cmV0dXJuIGNoaWxkfXZhciBhbGxQYXJlbnRzPVtdLGFsbENoaWxkcmVuPVtdLHVzZUJ1ZmZlcj0idW5kZWZpbmVkIiE9dHlwZW9mIEJ1ZmZlcjtyZXR1cm4gY2lyY3VsYXI9PT12b2lkIDAmJihjaXJjdWxhcj0hMCksZGVwdGg9PT12b2lkIDAmJihkZXB0aD0xLzApLF9jbG9uZShwYXJlbnQsZGVwdGgpfWZ1bmN0aW9uIFJlcG9ydGVyKGxpbmVzLHJ1bGVzZXQpe3RoaXMubWVzc2FnZXM9W10sdGhpcy5zdGF0cz1bXSx0aGlzLmxpbmVzPWxpbmVzLHRoaXMucnVsZXNldD1ydWxlc2V0fXZhciBwYXJzZXJsaWI9e307KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRXZlbnRUYXJnZXQoKXt0aGlzLl9saXN0ZW5lcnM9e319ZnVuY3Rpb24gU3RyaW5nUmVhZGVyKHRleHQpe3RoaXMuX2lucHV0PXRleHQucmVwbGFjZSgvXFxuXFxyPy9nLCJcXG4iKSx0aGlzLl9saW5lPTEsdGhpcy5fY29sPTEsdGhpcy5fY3Vyc29yPTB9ZnVuY3Rpb24gU3ludGF4RXJyb3IobWVzc2FnZSxsaW5lLGNvbCl7dGhpcy5jb2w9Y29sLHRoaXMubGluZT1saW5lLHRoaXMubWVzc2FnZT1tZXNzYWdlfWZ1bmN0aW9uIFN5bnRheFVuaXQodGV4dCxsaW5lLGNvbCx0eXBlKXt0aGlzLmNvbD1jb2wsdGhpcy5saW5lPWxpbmUsdGhpcy50ZXh0PXRleHQsdGhpcy50eXBlPXR5cGV9ZnVuY3Rpb24gVG9rZW5TdHJlYW1CYXNlKGlucHV0LHRva2VuRGF0YSl7dGhpcy5fcmVhZGVyPWlucHV0P25ldyBTdHJpbmdSZWFkZXIoIiIraW5wdXQpOm51bGwsdGhpcy5fdG9rZW49bnVsbCx0aGlzLl90b2tlbkRhdGE9dG9rZW5EYXRhLHRoaXMuX2x0PVtdLHRoaXMuX2x0SW5kZXg9MCx0aGlzLl9sdEluZGV4Q2FjaGU9W119RXZlbnRUYXJnZXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpFdmVudFRhcmdldCxhZGRMaXN0ZW5lcjpmdW5jdGlvbih0eXBlLGxpc3RlbmVyKXt0aGlzLl9saXN0ZW5lcnNbdHlwZV18fCh0aGlzLl9saXN0ZW5lcnNbdHlwZV09W10pLHRoaXMuX2xpc3RlbmVyc1t0eXBlXS5wdXNoKGxpc3RlbmVyKX0sZmlyZTpmdW5jdGlvbihldmVudCl7aWYoInN0cmluZyI9PXR5cGVvZiBldmVudCYmKGV2ZW50PXt0eXBlOmV2ZW50fSksZXZlbnQudGFyZ2V0IT09dm9pZCAwJiYoZXZlbnQudGFyZ2V0PXRoaXMpLGV2ZW50LnR5cGU9PT12b2lkIDApdGhyb3cgRXJyb3IoIkV2ZW50IG9iamVjdCBtaXNzaW5nIFwndHlwZVwnIHByb3BlcnR5LiIpO2lmKHRoaXMuX2xpc3RlbmVyc1tldmVudC50eXBlXSlmb3IodmFyIGxpc3RlbmVycz10aGlzLl9saXN0ZW5lcnNbZXZlbnQudHlwZV0uY29uY2F0KCksaT0wLGxlbj1saXN0ZW5lcnMubGVuZ3RoO2xlbj5pO2krKylsaXN0ZW5lcnNbaV0uY2FsbCh0aGlzLGV2ZW50KX0scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24odHlwZSxsaXN0ZW5lcil7aWYodGhpcy5fbGlzdGVuZXJzW3R5cGVdKWZvcih2YXIgbGlzdGVuZXJzPXRoaXMuX2xpc3RlbmVyc1t0eXBlXSxpPTAsbGVuPWxpc3RlbmVycy5sZW5ndGg7bGVuPmk7aSsrKWlmKGxpc3RlbmVyc1tpXT09PWxpc3RlbmVyKXtsaXN0ZW5lcnMuc3BsaWNlKGksMSk7YnJlYWt9fX0sU3RyaW5nUmVhZGVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6U3RyaW5nUmVhZGVyLGdldENvbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2x9LGdldExpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGluZX0sZW9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnNvcj09dGhpcy5faW5wdXQubGVuZ3RofSxwZWVrOmZ1bmN0aW9uKGNvdW50KXt2YXIgYz1udWxsO3JldHVybiBjb3VudD1jb3VudD09PXZvaWQgMD8xOmNvdW50LHRoaXMuX2N1cnNvcjx0aGlzLl9pbnB1dC5sZW5ndGgmJihjPXRoaXMuX2lucHV0LmNoYXJBdCh0aGlzLl9jdXJzb3IrY291bnQtMSkpLGN9LHJlYWQ6ZnVuY3Rpb24oKXt2YXIgYz1udWxsO3JldHVybiB0aGlzLl9jdXJzb3I8dGhpcy5faW5wdXQubGVuZ3RoJiYoIlxcbiI9PXRoaXMuX2lucHV0LmNoYXJBdCh0aGlzLl9jdXJzb3IpPyh0aGlzLl9saW5lKyssdGhpcy5fY29sPTEpOnRoaXMuX2NvbCsrLGM9dGhpcy5faW5wdXQuY2hhckF0KHRoaXMuX2N1cnNvcisrKSksY30sbWFyazpmdW5jdGlvbigpe3RoaXMuX2Jvb2ttYXJrPXtjdXJzb3I6dGhpcy5fY3Vyc29yLGxpbmU6dGhpcy5fbGluZSxjb2w6dGhpcy5fY29sfX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9ib29rbWFyayYmKHRoaXMuX2N1cnNvcj10aGlzLl9ib29rbWFyay5jdXJzb3IsdGhpcy5fbGluZT10aGlzLl9ib29rbWFyay5saW5lLHRoaXMuX2NvbD10aGlzLl9ib29rbWFyay5jb2wsZGVsZXRlIHRoaXMuX2Jvb2ttYXJrKX0scmVhZFRvOmZ1bmN0aW9uKHBhdHRlcm4pe2Zvcih2YXIgYyxidWZmZXI9IiI7YnVmZmVyLmxlbmd0aDxwYXR0ZXJuLmxlbmd0aHx8YnVmZmVyLmxhc3RJbmRleE9mKHBhdHRlcm4pIT1idWZmZXIubGVuZ3RoLXBhdHRlcm4ubGVuZ3RoOyl7aWYoYz10aGlzLnJlYWQoKSwhYyl0aHJvdyBFcnJvcihcJ0V4cGVjdGVkICJcJytwYXR0ZXJuK1wnIiBhdCBsaW5lIFwnK3RoaXMuX2xpbmUrIiwgY29sICIrdGhpcy5fY29sKyIuIik7YnVmZmVyKz1jfXJldHVybiBidWZmZXJ9LHJlYWRXaGlsZTpmdW5jdGlvbihmaWx0ZXIpe2Zvcih2YXIgYnVmZmVyPSIiLGM9dGhpcy5yZWFkKCk7bnVsbCE9PWMmJmZpbHRlcihjKTspYnVmZmVyKz1jLGM9dGhpcy5yZWFkKCk7cmV0dXJuIGJ1ZmZlcn0scmVhZE1hdGNoOmZ1bmN0aW9uKG1hdGNoZXIpe3ZhciBzb3VyY2U9dGhpcy5faW5wdXQuc3Vic3RyaW5nKHRoaXMuX2N1cnNvciksdmFsdWU9bnVsbDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG1hdGNoZXI/MD09PXNvdXJjZS5pbmRleE9mKG1hdGNoZXIpJiYodmFsdWU9dGhpcy5yZWFkQ291bnQobWF0Y2hlci5sZW5ndGgpKTptYXRjaGVyIGluc3RhbmNlb2YgUmVnRXhwJiZtYXRjaGVyLnRlc3Qoc291cmNlKSYmKHZhbHVlPXRoaXMucmVhZENvdW50KFJlZ0V4cC5sYXN0TWF0Y2gubGVuZ3RoKSksdmFsdWV9LHJlYWRDb3VudDpmdW5jdGlvbihjb3VudCl7Zm9yKHZhciBidWZmZXI9IiI7Y291bnQtLTspYnVmZmVyKz10aGlzLnJlYWQoKTtyZXR1cm4gYnVmZmVyfX0sU3ludGF4RXJyb3IucHJvdG90eXBlPUVycm9yKCksU3ludGF4VW5pdC5mcm9tVG9rZW49ZnVuY3Rpb24odG9rZW4pe3JldHVybiBuZXcgU3ludGF4VW5pdCh0b2tlbi52YWx1ZSx0b2tlbi5zdGFydExpbmUsdG9rZW4uc3RhcnRDb2wpfSxTeW50YXhVbml0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6U3ludGF4VW5pdCx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dH0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0fX0sVG9rZW5TdHJlYW1CYXNlLmNyZWF0ZVRva2VuRGF0YT1mdW5jdGlvbih0b2tlbnMpe3ZhciBuYW1lTWFwPVtdLHR5cGVNYXA9e30sdG9rZW5EYXRhPXRva2Vucy5jb25jYXQoW10pLGk9MCxsZW49dG9rZW5EYXRhLmxlbmd0aCsxO2Zvcih0b2tlbkRhdGEuVU5LTk9XTj0tMSx0b2tlbkRhdGEudW5zaGlmdCh7bmFtZToiRU9GIn0pO2xlbj5pO2krKyluYW1lTWFwLnB1c2godG9rZW5EYXRhW2ldLm5hbWUpLHRva2VuRGF0YVt0b2tlbkRhdGFbaV0ubmFtZV09aSx0b2tlbkRhdGFbaV0udGV4dCYmKHR5cGVNYXBbdG9rZW5EYXRhW2ldLnRleHRdPWkpO3JldHVybiB0b2tlbkRhdGEubmFtZT1mdW5jdGlvbih0dCl7cmV0dXJuIG5hbWVNYXBbdHRdfSx0b2tlbkRhdGEudHlwZT1mdW5jdGlvbihjKXtyZXR1cm4gdHlwZU1hcFtjXX0sdG9rZW5EYXRhfSxUb2tlblN0cmVhbUJhc2UucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpUb2tlblN0cmVhbUJhc2UsbWF0Y2g6ZnVuY3Rpb24odG9rZW5UeXBlcyxjaGFubmVsKXt0b2tlblR5cGVzIGluc3RhbmNlb2YgQXJyYXl8fCh0b2tlblR5cGVzPVt0b2tlblR5cGVzXSk7XG5mb3IodmFyIHR0PXRoaXMuZ2V0KGNoYW5uZWwpLGk9MCxsZW49dG9rZW5UeXBlcy5sZW5ndGg7bGVuPmk7KWlmKHR0PT10b2tlblR5cGVzW2krK10pcmV0dXJuITA7cmV0dXJuIHRoaXMudW5nZXQoKSwhMX0sbXVzdE1hdGNoOmZ1bmN0aW9uKHRva2VuVHlwZXMpe3ZhciB0b2tlbjtpZih0b2tlblR5cGVzIGluc3RhbmNlb2YgQXJyYXl8fCh0b2tlblR5cGVzPVt0b2tlblR5cGVzXSksIXRoaXMubWF0Y2guYXBwbHkodGhpcyxhcmd1bWVudHMpKXRocm93IHRva2VuPXRoaXMuTFQoMSksbmV3IFN5bnRheEVycm9yKCJFeHBlY3RlZCAiK3RoaXMuX3Rva2VuRGF0YVt0b2tlblR5cGVzWzBdXS5uYW1lKyIgYXQgbGluZSAiK3Rva2VuLnN0YXJ0TGluZSsiLCBjb2wgIit0b2tlbi5zdGFydENvbCsiLiIsdG9rZW4uc3RhcnRMaW5lLHRva2VuLnN0YXJ0Q29sKX0sYWR2YW5jZTpmdW5jdGlvbih0b2tlblR5cGVzLGNoYW5uZWwpe2Zvcig7MCE9PXRoaXMuTEEoMCkmJiF0aGlzLm1hdGNoKHRva2VuVHlwZXMsY2hhbm5lbCk7KXRoaXMuZ2V0KCk7cmV0dXJuIHRoaXMuTEEoMCl9LGdldDpmdW5jdGlvbihjaGFubmVsKXt2YXIgdG9rZW4saW5mbyx0b2tlbkluZm89dGhpcy5fdG9rZW5EYXRhLGk9KHRoaXMuX3JlYWRlciwwKTtpZih0b2tlbkluZm8ubGVuZ3RoLHRoaXMuX2x0Lmxlbmd0aCYmdGhpcy5fbHRJbmRleD49MCYmdGhpcy5fbHRJbmRleDx0aGlzLl9sdC5sZW5ndGgpe2ZvcihpKyssdGhpcy5fdG9rZW49dGhpcy5fbHRbdGhpcy5fbHRJbmRleCsrXSxpbmZvPXRva2VuSW5mb1t0aGlzLl90b2tlbi50eXBlXTt2b2lkIDAhPT1pbmZvLmNoYW5uZWwmJmNoYW5uZWwhPT1pbmZvLmNoYW5uZWwmJnRoaXMuX2x0SW5kZXg8dGhpcy5fbHQubGVuZ3RoOyl0aGlzLl90b2tlbj10aGlzLl9sdFt0aGlzLl9sdEluZGV4KytdLGluZm89dG9rZW5JbmZvW3RoaXMuX3Rva2VuLnR5cGVdLGkrKztpZigodm9pZCAwPT09aW5mby5jaGFubmVsfHxjaGFubmVsPT09aW5mby5jaGFubmVsKSYmdGhpcy5fbHRJbmRleDw9dGhpcy5fbHQubGVuZ3RoKXJldHVybiB0aGlzLl9sdEluZGV4Q2FjaGUucHVzaChpKSx0aGlzLl90b2tlbi50eXBlfXJldHVybiB0b2tlbj10aGlzLl9nZXRUb2tlbigpLHRva2VuLnR5cGU+LTEmJiF0b2tlbkluZm9bdG9rZW4udHlwZV0uaGlkZSYmKHRva2VuLmNoYW5uZWw9dG9rZW5JbmZvW3Rva2VuLnR5cGVdLmNoYW5uZWwsdGhpcy5fdG9rZW49dG9rZW4sdGhpcy5fbHQucHVzaCh0b2tlbiksdGhpcy5fbHRJbmRleENhY2hlLnB1c2godGhpcy5fbHQubGVuZ3RoLXRoaXMuX2x0SW5kZXgraSksdGhpcy5fbHQubGVuZ3RoPjUmJnRoaXMuX2x0LnNoaWZ0KCksdGhpcy5fbHRJbmRleENhY2hlLmxlbmd0aD41JiZ0aGlzLl9sdEluZGV4Q2FjaGUuc2hpZnQoKSx0aGlzLl9sdEluZGV4PXRoaXMuX2x0Lmxlbmd0aCksaW5mbz10b2tlbkluZm9bdG9rZW4udHlwZV0saW5mbyYmKGluZm8uaGlkZXx8dm9pZCAwIT09aW5mby5jaGFubmVsJiZjaGFubmVsIT09aW5mby5jaGFubmVsKT90aGlzLmdldChjaGFubmVsKTp0b2tlbi50eXBlfSxMQTpmdW5jdGlvbihpbmRleCl7dmFyIHR0LHRvdGFsPWluZGV4O2lmKGluZGV4PjApe2lmKGluZGV4PjUpdGhyb3cgRXJyb3IoIlRvbyBtdWNoIGxvb2thaGVhZC4iKTtmb3IoO3RvdGFsOyl0dD10aGlzLmdldCgpLHRvdGFsLS07Zm9yKDtpbmRleD50b3RhbDspdGhpcy51bmdldCgpLHRvdGFsKyt9ZWxzZSBpZigwPmluZGV4KXtpZighdGhpcy5fbHRbdGhpcy5fbHRJbmRleCtpbmRleF0pdGhyb3cgRXJyb3IoIlRvbyBtdWNoIGxvb2tiZWhpbmQuIik7dHQ9dGhpcy5fbHRbdGhpcy5fbHRJbmRleCtpbmRleF0udHlwZX1lbHNlIHR0PXRoaXMuX3Rva2VuLnR5cGU7cmV0dXJuIHR0fSxMVDpmdW5jdGlvbihpbmRleCl7cmV0dXJuIHRoaXMuTEEoaW5kZXgpLHRoaXMuX2x0W3RoaXMuX2x0SW5kZXgraW5kZXgtMV19LHBlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MQSgxKX0sdG9rZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG9rZW59LHRva2VuTmFtZTpmdW5jdGlvbih0b2tlblR5cGUpe3JldHVybiAwPnRva2VuVHlwZXx8dG9rZW5UeXBlPnRoaXMuX3Rva2VuRGF0YS5sZW5ndGg/IlVOS05PV05fVE9LRU4iOnRoaXMuX3Rva2VuRGF0YVt0b2tlblR5cGVdLm5hbWV9LHRva2VuVHlwZTpmdW5jdGlvbih0b2tlbk5hbWUpe3JldHVybiB0aGlzLl90b2tlbkRhdGFbdG9rZW5OYW1lXXx8LTF9LHVuZ2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2x0SW5kZXhDYWNoZS5sZW5ndGgpdGhyb3cgRXJyb3IoIlRvbyBtdWNoIGxvb2thaGVhZC4iKTt0aGlzLl9sdEluZGV4LT10aGlzLl9sdEluZGV4Q2FjaGUucG9wKCksdGhpcy5fdG9rZW49dGhpcy5fbHRbdGhpcy5fbHRJbmRleC0xXX19LHBhcnNlcmxpYi51dGlsPXtTdHJpbmdSZWFkZXI6U3RyaW5nUmVhZGVyLFN5bnRheEVycm9yOlN5bnRheEVycm9yLFN5bnRheFVuaXQ6U3ludGF4VW5pdCxFdmVudFRhcmdldDpFdmVudFRhcmdldCxUb2tlblN0cmVhbUJhc2U6VG9rZW5TdHJlYW1CYXNlfX0pKCksZnVuY3Rpb24oKXtmdW5jdGlvbiBDb21iaW5hdG9yKHRleHQsbGluZSxjb2wpe1N5bnRheFVuaXQuY2FsbCh0aGlzLHRleHQsbGluZSxjb2wsUGFyc2VyLkNPTUJJTkFUT1JfVFlQRSksdGhpcy50eXBlPSJ1bmtub3duIiwvXlxccyskLy50ZXN0KHRleHQpP3RoaXMudHlwZT0iZGVzY2VuZGFudCI6Ij4iPT10ZXh0P3RoaXMudHlwZT0iY2hpbGQiOiIrIj09dGV4dD90aGlzLnR5cGU9ImFkamFjZW50LXNpYmxpbmciOiJ+Ij09dGV4dCYmKHRoaXMudHlwZT0ic2libGluZyIpfWZ1bmN0aW9uIE1lZGlhRmVhdHVyZShuYW1lLHZhbHVlKXtTeW50YXhVbml0LmNhbGwodGhpcywiKCIrbmFtZSsobnVsbCE9PXZhbHVlPyI6Iit2YWx1ZToiIikrIikiLG5hbWUuc3RhcnRMaW5lLG5hbWUuc3RhcnRDb2wsUGFyc2VyLk1FRElBX0ZFQVRVUkVfVFlQRSksdGhpcy5uYW1lPW5hbWUsdGhpcy52YWx1ZT12YWx1ZX1mdW5jdGlvbiBNZWRpYVF1ZXJ5KG1vZGlmaWVyLG1lZGlhVHlwZSxmZWF0dXJlcyxsaW5lLGNvbCl7U3ludGF4VW5pdC5jYWxsKHRoaXMsKG1vZGlmaWVyP21vZGlmaWVyKyIgIjoiIikrKG1lZGlhVHlwZT9tZWRpYVR5cGU6IiIpKyhtZWRpYVR5cGUmJmZlYXR1cmVzLmxlbmd0aD4wPyIgYW5kICI6IiIpK2ZlYXR1cmVzLmpvaW4oIiBhbmQgIiksbGluZSxjb2wsUGFyc2VyLk1FRElBX1FVRVJZX1RZUEUpLHRoaXMubW9kaWZpZXI9bW9kaWZpZXIsdGhpcy5tZWRpYVR5cGU9bWVkaWFUeXBlLHRoaXMuZmVhdHVyZXM9ZmVhdHVyZXN9ZnVuY3Rpb24gUGFyc2VyKG9wdGlvbnMpe0V2ZW50VGFyZ2V0LmNhbGwodGhpcyksdGhpcy5vcHRpb25zPW9wdGlvbnN8fHt9LHRoaXMuX3Rva2VuU3RyZWFtPW51bGx9ZnVuY3Rpb24gUHJvcGVydHlOYW1lKHRleHQsaGFjayxsaW5lLGNvbCl7U3ludGF4VW5pdC5jYWxsKHRoaXMsdGV4dCxsaW5lLGNvbCxQYXJzZXIuUFJPUEVSVFlfTkFNRV9UWVBFKSx0aGlzLmhhY2s9aGFja31mdW5jdGlvbiBQcm9wZXJ0eVZhbHVlKHBhcnRzLGxpbmUsY29sKXtTeW50YXhVbml0LmNhbGwodGhpcyxwYXJ0cy5qb2luKCIgIiksbGluZSxjb2wsUGFyc2VyLlBST1BFUlRZX1ZBTFVFX1RZUEUpLHRoaXMucGFydHM9cGFydHN9ZnVuY3Rpb24gUHJvcGVydHlWYWx1ZUl0ZXJhdG9yKHZhbHVlKXt0aGlzLl9pPTAsdGhpcy5fcGFydHM9dmFsdWUucGFydHMsdGhpcy5fbWFya3M9W10sdGhpcy52YWx1ZT12YWx1ZX1mdW5jdGlvbiBQcm9wZXJ0eVZhbHVlUGFydCh0ZXh0LGxpbmUsY29sKXtTeW50YXhVbml0LmNhbGwodGhpcyx0ZXh0LGxpbmUsY29sLFBhcnNlci5QUk9QRVJUWV9WQUxVRV9QQVJUX1RZUEUpLHRoaXMudHlwZT0idW5rbm93biI7dmFyIHRlbXA7aWYoL14oWytcXC1dP1tcXGRcXC5dKykoW2Etel0rKSQvaS50ZXN0KHRleHQpKXN3aXRjaCh0aGlzLnR5cGU9ImRpbWVuc2lvbiIsdGhpcy52YWx1ZT0rUmVnRXhwLiQxLHRoaXMudW5pdHM9UmVnRXhwLiQyLHRoaXMudW5pdHMudG9Mb3dlckNhc2UoKSl7Y2FzZSJlbSI6Y2FzZSJyZW0iOmNhc2UiZXgiOmNhc2UicHgiOmNhc2UiY20iOmNhc2UibW0iOmNhc2UiaW4iOmNhc2UicHQiOmNhc2UicGMiOmNhc2UiY2giOmNhc2UidmgiOmNhc2UidnciOmNhc2Uidm1heCI6Y2FzZSJ2bWluIjp0aGlzLnR5cGU9Imxlbmd0aCI7YnJlYWs7Y2FzZSJkZWciOmNhc2UicmFkIjpjYXNlImdyYWQiOnRoaXMudHlwZT0iYW5nbGUiO2JyZWFrO2Nhc2UibXMiOmNhc2UicyI6dGhpcy50eXBlPSJ0aW1lIjticmVhaztjYXNlImh6IjpjYXNlImtoeiI6dGhpcy50eXBlPSJmcmVxdWVuY3kiO2JyZWFrO2Nhc2UiZHBpIjpjYXNlImRwY20iOnRoaXMudHlwZT0icmVzb2x1dGlvbiJ9ZWxzZS9eKFsrXFwtXT9bXFxkXFwuXSspJSQvaS50ZXN0KHRleHQpPyh0aGlzLnR5cGU9InBlcmNlbnRhZ2UiLHRoaXMudmFsdWU9K1JlZ0V4cC4kMSk6L14oWytcXC1dP1xcZCspJC9pLnRlc3QodGV4dCk/KHRoaXMudHlwZT0iaW50ZWdlciIsdGhpcy52YWx1ZT0rUmVnRXhwLiQxKTovXihbK1xcLV0/W1xcZFxcLl0rKSQvaS50ZXN0KHRleHQpPyh0aGlzLnR5cGU9Im51bWJlciIsdGhpcy52YWx1ZT0rUmVnRXhwLiQxKTovXiMoW2EtZjAtOV17Myw2fSkvaS50ZXN0KHRleHQpPyh0aGlzLnR5cGU9ImNvbG9yIix0ZW1wPVJlZ0V4cC4kMSwzPT10ZW1wLmxlbmd0aD8odGhpcy5yZWQ9cGFyc2VJbnQodGVtcC5jaGFyQXQoMCkrdGVtcC5jaGFyQXQoMCksMTYpLHRoaXMuZ3JlZW49cGFyc2VJbnQodGVtcC5jaGFyQXQoMSkrdGVtcC5jaGFyQXQoMSksMTYpLHRoaXMuYmx1ZT1wYXJzZUludCh0ZW1wLmNoYXJBdCgyKSt0ZW1wLmNoYXJBdCgyKSwxNikpOih0aGlzLnJlZD1wYXJzZUludCh0ZW1wLnN1YnN0cmluZygwLDIpLDE2KSx0aGlzLmdyZWVuPXBhcnNlSW50KHRlbXAuc3Vic3RyaW5nKDIsNCksMTYpLHRoaXMuYmx1ZT1wYXJzZUludCh0ZW1wLnN1YnN0cmluZyg0LDYpLDE2KSkpOi9ecmdiXFwoXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccypcXCkvaS50ZXN0KHRleHQpPyh0aGlzLnR5cGU9ImNvbG9yIix0aGlzLnJlZD0rUmVnRXhwLiQxLHRoaXMuZ3JlZW49K1JlZ0V4cC4kMix0aGlzLmJsdWU9K1JlZ0V4cC4kMyk6L15yZ2JcXChcXHMqKFxcZCspJVxccyosXFxzKihcXGQrKSVcXHMqLFxccyooXFxkKyklXFxzKlxcKS9pLnRlc3QodGV4dCk/KHRoaXMudHlwZT0iY29sb3IiLHRoaXMucmVkPTI1NSorUmVnRXhwLiQxLzEwMCx0aGlzLmdyZWVuPTI1NSorUmVnRXhwLiQyLzEwMCx0aGlzLmJsdWU9MjU1KitSZWdFeHAuJDMvMTAwKTovXnJnYmFcXChcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKixcXHMqKFtcXGRcXC5dKylcXHMqXFwpL2kudGVzdCh0ZXh0KT8odGhpcy50eXBlPSJjb2xvciIsdGhpcy5yZWQ9K1JlZ0V4cC4kMSx0aGlzLmdyZWVuPStSZWdFeHAuJDIsdGhpcy5ibHVlPStSZWdFeHAuJDMsdGhpcy5hbHBoYT0rUmVnRXhwLiQ0KTovXnJnYmFcXChcXHMqKFxcZCspJVxccyosXFxzKihcXGQrKSVcXHMqLFxccyooXFxkKyklXFxzKixcXHMqKFtcXGRcXC5dKylcXHMqXFwpL2kudGVzdCh0ZXh0KT8odGhpcy50eXBlPSJjb2xvciIsdGhpcy5yZWQ9MjU1KitSZWdFeHAuJDEvMTAwLHRoaXMuZ3JlZW49MjU1KitSZWdFeHAuJDIvMTAwLHRoaXMuYmx1ZT0yNTUqK1JlZ0V4cC4kMy8xMDAsdGhpcy5hbHBoYT0rUmVnRXhwLiQ0KTovXmhzbFxcKFxccyooXFxkKylcXHMqLFxccyooXFxkKyklXFxzKixcXHMqKFxcZCspJVxccypcXCkvaS50ZXN0KHRleHQpPyh0aGlzLnR5cGU9ImNvbG9yIix0aGlzLmh1ZT0rUmVnRXhwLiQxLHRoaXMuc2F0dXJhdGlvbj0rUmVnRXhwLiQyLzEwMCx0aGlzLmxpZ2h0bmVzcz0rUmVnRXhwLiQzLzEwMCk6L15oc2xhXFwoXFxzKihcXGQrKVxccyosXFxzKihcXGQrKSVcXHMqLFxccyooXFxkKyklXFxzKixcXHMqKFtcXGRcXC5dKylcXHMqXFwpL2kudGVzdCh0ZXh0KT8odGhpcy50eXBlPSJjb2xvciIsdGhpcy5odWU9K1JlZ0V4cC4kMSx0aGlzLnNhdHVyYXRpb249K1JlZ0V4cC4kMi8xMDAsdGhpcy5saWdodG5lc3M9K1JlZ0V4cC4kMy8xMDAsdGhpcy5hbHBoYT0rUmVnRXhwLiQ0KTovXnVybFxcKFsiXCddPyhbXlxcKSJcJ10rKVsiXCddP1xcKS9pLnRlc3QodGV4dCk/KHRoaXMudHlwZT0idXJpIix0aGlzLnVyaT1SZWdFeHAuJDEpOi9eKFteXFwoXSspXFwoL2kudGVzdCh0ZXh0KT8odGhpcy50eXBlPSJmdW5jdGlvbiIsdGhpcy5uYW1lPVJlZ0V4cC4kMSx0aGlzLnZhbHVlPXRleHQpOi9eWyJcJ11bXiJcJ10qWyJcJ10vLnRlc3QodGV4dCk/KHRoaXMudHlwZT0ic3RyaW5nIix0aGlzLnZhbHVlPWV2YWwodGV4dCkpOkNvbG9yc1t0ZXh0LnRvTG93ZXJDYXNlKCldPyh0aGlzLnR5cGU9ImNvbG9yIix0ZW1wPUNvbG9yc1t0ZXh0LnRvTG93ZXJDYXNlKCldLnN1YnN0cmluZygxKSx0aGlzLnJlZD1wYXJzZUludCh0ZW1wLnN1YnN0cmluZygwLDIpLDE2KSx0aGlzLmdyZWVuPXBhcnNlSW50KHRlbXAuc3Vic3RyaW5nKDIsNCksMTYpLHRoaXMuYmx1ZT1wYXJzZUludCh0ZW1wLnN1YnN0cmluZyg0LDYpLDE2KSk6L15bXFwsXFwvXSQvLnRlc3QodGV4dCk/KHRoaXMudHlwZT0ib3BlcmF0b3IiLHRoaXMudmFsdWU9dGV4dCk6L15bYS16XFwtX1xcdTAwODAtXFx1RkZGRl1bYS16MC05XFwtX1xcdTAwODAtXFx1RkZGRl0qJC9pLnRlc3QodGV4dCkmJih0aGlzLnR5cGU9ImlkZW50aWZpZXIiLHRoaXMudmFsdWU9dGV4dCl9ZnVuY3Rpb24gU2VsZWN0b3IocGFydHMsbGluZSxjb2wpe1N5bnRheFVuaXQuY2FsbCh0aGlzLHBhcnRzLmpvaW4oIiAiKSxsaW5lLGNvbCxQYXJzZXIuU0VMRUNUT1JfVFlQRSksdGhpcy5wYXJ0cz1wYXJ0cyx0aGlzLnNwZWNpZmljaXR5PVNwZWNpZmljaXR5LmNhbGN1bGF0ZSh0aGlzKX1mdW5jdGlvbiBTZWxlY3RvclBhcnQoZWxlbWVudE5hbWUsbW9kaWZpZXJzLHRleHQsbGluZSxjb2wpe1N5bnRheFVuaXQuY2FsbCh0aGlzLHRleHQsbGluZSxjb2wsUGFyc2VyLlNFTEVDVE9SX1BBUlRfVFlQRSksdGhpcy5lbGVtZW50TmFtZT1lbGVtZW50TmFtZSx0aGlzLm1vZGlmaWVycz1tb2RpZmllcnN9ZnVuY3Rpb24gU2VsZWN0b3JTdWJQYXJ0KHRleHQsdHlwZSxsaW5lLGNvbCl7U3ludGF4VW5pdC5jYWxsKHRoaXMsdGV4dCxsaW5lLGNvbCxQYXJzZXIuU0VMRUNUT1JfU1VCX1BBUlRfVFlQRSksdGhpcy50eXBlPXR5cGUsdGhpcy5hcmdzPVtdfWZ1bmN0aW9uIFNwZWNpZmljaXR5KGEsYixjLGQpe3RoaXMuYT1hLHRoaXMuYj1iLHRoaXMuYz1jLHRoaXMuZD1kfWZ1bmN0aW9uIGlzSGV4RGlnaXQoYyl7cmV0dXJuIG51bGwhPT1jJiZoLnRlc3QoYyl9ZnVuY3Rpb24gaXNEaWdpdChjKXtyZXR1cm4gbnVsbCE9PWMmJi9cXGQvLnRlc3QoYyl9ZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGMpe3JldHVybiBudWxsIT09YyYmL1xccy8udGVzdChjKX1mdW5jdGlvbiBpc05ld0xpbmUoYyl7cmV0dXJuIG51bGwhPT1jJiZubC50ZXN0KGMpfWZ1bmN0aW9uIGlzTmFtZVN0YXJ0KGMpe3JldHVybiBudWxsIT09YyYmL1thLXpfXFx1MDA4MC1cXHVGRkZGXFxcXF0vaS50ZXN0KGMpfWZ1bmN0aW9uIGlzTmFtZUNoYXIoYyl7cmV0dXJuIG51bGwhPT1jJiYoaXNOYW1lU3RhcnQoYyl8fC9bMC05XFwtXFxcXF0vLnRlc3QoYykpfWZ1bmN0aW9uIGlzSWRlbnRTdGFydChjKXtyZXR1cm4gbnVsbCE9PWMmJihpc05hbWVTdGFydChjKXx8L1xcLVxcXFwvLnRlc3QoYykpfWZ1bmN0aW9uIG1peChyZWNlaXZlcixzdXBwbGllcil7Zm9yKHZhciBwcm9wIGluIHN1cHBsaWVyKXN1cHBsaWVyLmhhc093blByb3BlcnR5KHByb3ApJiYocmVjZWl2ZXJbcHJvcF09c3VwcGxpZXJbcHJvcF0pO3JldHVybiByZWNlaXZlcn1mdW5jdGlvbiBUb2tlblN0cmVhbShpbnB1dCl7VG9rZW5TdHJlYW1CYXNlLmNhbGwodGhpcyxpbnB1dCxUb2tlbnMpfWZ1bmN0aW9uIFZhbGlkYXRpb25FcnJvcihtZXNzYWdlLGxpbmUsY29sKXt0aGlzLmNvbD1jb2wsdGhpcy5saW5lPWxpbmUsdGhpcy5tZXNzYWdlPW1lc3NhZ2V9dmFyIEV2ZW50VGFyZ2V0PXBhcnNlcmxpYi51dGlsLkV2ZW50VGFyZ2V0LFRva2VuU3RyZWFtQmFzZT1wYXJzZXJsaWIudXRpbC5Ub2tlblN0cmVhbUJhc2UsU3RyaW5nUmVhZGVyPXBhcnNlcmxpYi51dGlsLlN0cmluZ1JlYWRlcixTeW50YXhFcnJvcj1wYXJzZXJsaWIudXRpbC5TeW50YXhFcnJvcixTeW50YXhVbml0PXBhcnNlcmxpYi51dGlsLlN5bnRheFVuaXQsQ29sb3JzPXthbGljZWJsdWU6IiNmMGY4ZmYiLGFudGlxdWV3aGl0ZToiI2ZhZWJkNyIsYXF1YToiIzAwZmZmZiIsYXF1YW1hcmluZToiIzdmZmZkNCIsYXp1cmU6IiNmMGZmZmYiLGJlaWdlOiIjZjVmNWRjIixiaXNxdWU6IiNmZmU0YzQiLGJsYWNrOiIjMDAwMDAwIixibGFuY2hlZGFsbW9uZDoiI2ZmZWJjZCIsYmx1ZToiIzAwMDBmZiIsYmx1ZXZpb2xldDoiIzhhMmJlMiIsYnJvd246IiNhNTJhMmEiLGJ1cmx5d29vZDoiI2RlYjg4NyIsY2FkZXRibHVlOiIjNWY5ZWEwIixjaGFydHJldXNlOiIjN2ZmZjAwIixjaG9jb2xhdGU6IiNkMjY5MWUiLGNvcmFsOiIjZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVlZCIsY29ybnNpbGs6IiNmZmY4ZGMiLGNyaW1zb246IiNkYzE0M2MiLGN5YW46IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmV5OiIjYTlhOWE5IixkYXJrZ3JlZW46IiMwMDY0MDAiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmV5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0Z3JlZW46IiM5MGVlOTAiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZDgiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkODcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsc3RlZWxibHVlOiIjNDY4MmI0Iix0YW46IiNkMmI0OGMiLHRlYWw6IiMwMDgwODAiLHRoaXN0bGU6IiNkOGJmZDgiLHRvbWF0bzoiI2ZmNjM0NyIsdHVycXVvaXNlOiIjNDBlMGQwIix2aW9sZXQ6IiNlZTgyZWUiLHdoZWF0OiIjZjVkZWIzIix3aGl0ZToiI2ZmZmZmZiIsd2hpdGVzbW9rZToiI2Y1ZjVmNSIseWVsbG93OiIjZmZmZjAwIix5ZWxsb3dncmVlbjoiIzlhY2QzMiIsYWN0aXZlQm9yZGVyOiJBY3RpdmUgd2luZG93IGJvcmRlci4iLGFjdGl2ZWNhcHRpb246IkFjdGl2ZSB3aW5kb3cgY2FwdGlvbi4iLGFwcHdvcmtzcGFjZToiQmFja2dyb3VuZCBjb2xvciBvZiBtdWx0aXBsZSBkb2N1bWVudCBpbnRlcmZhY2UuIixiYWNrZ3JvdW5kOiJEZXNrdG9wIGJhY2tncm91bmQuIixidXR0b25mYWNlOiJUaGUgZmFjZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciAzLUQgZWxlbWVudHMgdGhhdCBhcHBlYXIgMy1EIGR1ZSB0byBvbmUgbGF5ZXIgb2Ygc3Vycm91bmRpbmcgYm9yZGVyLiIsYnV0dG9uaGlnaGxpZ2h0OiJUaGUgY29sb3Igb2YgdGhlIGJvcmRlciBmYWNpbmcgdGhlIGxpZ2h0IHNvdXJjZSBmb3IgMy1EIGVsZW1lbnRzIHRoYXQgYXBwZWFyIDMtRCBkdWUgdG8gb25lIGxheWVyIG9mIHN1cnJvdW5kaW5nIGJvcmRlci4iLGJ1dHRvbnNoYWRvdzoiVGhlIGNvbG9yIG9mIHRoZSBib3JkZXIgYXdheSBmcm9tIHRoZSBsaWdodCBzb3VyY2UgZm9yIDMtRCBlbGVtZW50cyB0aGF0IGFwcGVhciAzLUQgZHVlIHRvIG9uZSBsYXllciBvZiBzdXJyb3VuZGluZyBib3JkZXIuIixidXR0b250ZXh0OiJUZXh0IG9uIHB1c2ggYnV0dG9ucy4iLGNhcHRpb250ZXh0OiJUZXh0IGluIGNhcHRpb24sIHNpemUgYm94LCBhbmQgc2Nyb2xsYmFyIGFycm93IGJveC4iLGdyYXl0ZXh0OiJHcmF5ZWQgKGRpc2FibGVkKSB0ZXh0LiBUaGlzIGNvbG9yIGlzIHNldCB0byAjMDAwIGlmIHRoZSBjdXJyZW50IGRpc3BsYXkgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgYSBzb2xpZCBncmF5IGNvbG9yLiIsZ3JleXRleHQ6IkdyZXllZCAoZGlzYWJsZWQpIHRleHQuIFRoaXMgY29sb3IgaXMgc2V0IHRvICMwMDAgaWYgdGhlIGN1cnJlbnQgZGlzcGxheSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBhIHNvbGlkIGdyZXkgY29sb3IuIixoaWdobGlnaHQ6Ikl0ZW0ocykgc2VsZWN0ZWQgaW4gYSBjb250cm9sLiIsaGlnaGxpZ2h0dGV4dDoiVGV4dCBvZiBpdGVtKHMpIHNlbGVjdGVkIGluIGEgY29udHJvbC4iLGluYWN0aXZlYm9yZGVyOiJJbmFjdGl2ZSB3aW5kb3cgYm9yZGVyLiIsaW5hY3RpdmVjYXB0aW9uOiJJbmFjdGl2ZSB3aW5kb3cgY2FwdGlvbi4iLGluYWN0aXZlY2FwdGlvbnRleHQ6IkNvbG9yIG9mIHRleHQgaW4gYW4gaW5hY3RpdmUgY2FwdGlvbi4iLGluZm9iYWNrZ3JvdW5kOiJCYWNrZ3JvdW5kIGNvbG9yIGZvciB0b29sdGlwIGNvbnRyb2xzLiIsaW5mb3RleHQ6IlRleHQgY29sb3IgZm9yIHRvb2x0aXAgY29udHJvbHMuIixtZW51OiJNZW51IGJhY2tncm91bmQuIixtZW51dGV4dDoiVGV4dCBpbiBtZW51cy4iLHNjcm9sbGJhcjoiU2Nyb2xsIGJhciBncmF5IGFyZWEuIix0aHJlZWRkYXJrc2hhZG93OiJUaGUgY29sb3Igb2YgdGhlIGRhcmtlciAoZ2VuZXJhbGx5IG91dGVyKSBvZiB0aGUgdHdvIGJvcmRlcnMgYXdheSBmcm9tIHRoZSBsaWdodCBzb3VyY2UgZm9yIDMtRCBlbGVtZW50cyB0aGF0IGFwcGVhciAzLUQgZHVlIHRvIHR3byBjb25jZW50cmljIGxheWVycyBvZiBzdXJyb3VuZGluZyBib3JkZXIuIix0aHJlZWRmYWNlOiJUaGUgZmFjZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciAzLUQgZWxlbWVudHMgdGhhdCBhcHBlYXIgMy1EIGR1ZSB0byB0d28gY29uY2VudHJpYyBsYXllcnMgb2Ygc3Vycm91bmRpbmcgYm9yZGVyLiIsdGhyZWVkaGlnaGxpZ2h0OiJUaGUgY29sb3Igb2YgdGhlIGxpZ2h0ZXIgKGdlbmVyYWxseSBvdXRlcikgb2YgdGhlIHR3byBib3JkZXJzIGZhY2luZyB0aGUgbGlnaHQgc291cmNlIGZvciAzLUQgZWxlbWVudHMgdGhhdCBhcHBlYXIgMy1EIGR1ZSB0byB0d28gY29uY2VudHJpYyBsYXllcnMgb2Ygc3Vycm91bmRpbmcgYm9yZGVyLiIsdGhyZWVkbGlnaHRzaGFkb3c6IlRoZSBjb2xvciBvZiB0aGUgZGFya2VyIChnZW5lcmFsbHkgaW5uZXIpIG9mIHRoZSB0d28gYm9yZGVycyBmYWNpbmcgdGhlIGxpZ2h0IHNvdXJjZSBmb3IgMy1EIGVsZW1lbnRzIHRoYXQgYXBwZWFyIDMtRCBkdWUgdG8gdHdvIGNvbmNlbnRyaWMgbGF5ZXJzIG9mIHN1cnJvdW5kaW5nIGJvcmRlci4iLHRocmVlZHNoYWRvdzoiVGhlIGNvbG9yIG9mIHRoZSBsaWdodGVyIChnZW5lcmFsbHkgaW5uZXIpIG9mIHRoZSB0d28gYm9yZGVycyBhd2F5IGZyb20gdGhlIGxpZ2h0IHNvdXJjZSBmb3IgMy1EIGVsZW1lbnRzIHRoYXQgYXBwZWFyIDMtRCBkdWUgdG8gdHdvIGNvbmNlbnRyaWMgbGF5ZXJzIG9mIHN1cnJvdW5kaW5nIGJvcmRlci4iLHdpbmRvdzoiV2luZG93IGJhY2tncm91bmQuIix3aW5kb3dmcmFtZToiV2luZG93IGZyYW1lLiIsd2luZG93dGV4dDoiVGV4dCBpbiB3aW5kb3dzLiJ9O0NvbWJpbmF0b3IucHJvdG90eXBlPW5ldyBTeW50YXhVbml0LENvbWJpbmF0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yPUNvbWJpbmF0b3IsTWVkaWFGZWF0dXJlLnByb3RvdHlwZT1uZXcgU3ludGF4VW5pdCxNZWRpYUZlYXR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yPU1lZGlhRmVhdHVyZSxNZWRpYVF1ZXJ5LnByb3RvdHlwZT1uZXcgU3ludGF4VW5pdCxNZWRpYVF1ZXJ5LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1NZWRpYVF1ZXJ5LFBhcnNlci5ERUZBVUxUX1RZUEU9MCxQYXJzZXIuQ09NQklOQVRPUl9UWVBFPTEsUGFyc2VyLk1FRElBX0ZFQVRVUkVfVFlQRT0yLFBhcnNlci5NRURJQV9RVUVSWV9UWVBFPTMsUGFyc2VyLlBST1BFUlRZX05BTUVfVFlQRT00LFBhcnNlci5QUk9QRVJUWV9WQUxVRV9UWVBFPTUsUGFyc2VyLlBST1BFUlRZX1ZBTFVFX1BBUlRfVFlQRT02LFBhcnNlci5TRUxFQ1RPUl9UWVBFPTcsUGFyc2VyLlNFTEVDVE9SX1BBUlRfVFlQRT04LFBhcnNlci5TRUxFQ1RPUl9TVUJfUEFSVF9UWVBFPTksUGFyc2VyLnByb3RvdHlwZT1mdW5jdGlvbigpe3ZhciBwcm9wLHByb3RvPW5ldyBFdmVudFRhcmdldCxhZGRpdGlvbnM9e2NvbnN0cnVjdG9yOlBhcnNlcixERUZBVUxUX1RZUEU6MCxDT01CSU5BVE9SX1RZUEU6MSxNRURJQV9GRUFUVVJFX1RZUEU6MixNRURJQV9RVUVSWV9UWVBFOjMsUFJPUEVSVFlfTkFNRV9UWVBFOjQsUFJPUEVSVFlfVkFMVUVfVFlQRTo1LFBST1BFUlRZX1ZBTFVFX1BBUlRfVFlQRTo2LFNFTEVDVE9SX1RZUEU6NyxTRUxFQ1RPUl9QQVJUX1RZUEU6OCxTRUxFQ1RPUl9TVUJfUEFSVF9UWVBFOjksX3N0eWxlc2hlZXQ6ZnVuY3Rpb24oKXt2YXIgY291bnQsdG9rZW4sdHQsdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW07Zm9yKHRoaXMuZmlyZSgic3RhcnRzdHlsZXNoZWV0IiksdGhpcy5fY2hhcnNldCgpLHRoaXMuX3NraXBDcnVmdCgpO3Rva2VuU3RyZWFtLnBlZWsoKT09VG9rZW5zLklNUE9SVF9TWU07KXRoaXMuX2ltcG9ydCgpLHRoaXMuX3NraXBDcnVmdCgpO2Zvcig7dG9rZW5TdHJlYW0ucGVlaygpPT1Ub2tlbnMuTkFNRVNQQUNFX1NZTTspdGhpcy5fbmFtZXNwYWNlKCksdGhpcy5fc2tpcENydWZ0KCk7Zm9yKHR0PXRva2VuU3RyZWFtLnBlZWsoKTt0dD5Ub2tlbnMuRU9GOyl7dHJ5e3N3aXRjaCh0dCl7Y2FzZSBUb2tlbnMuTUVESUFfU1lNOnRoaXMuX21lZGlhKCksdGhpcy5fc2tpcENydWZ0KCk7YnJlYWs7Y2FzZSBUb2tlbnMuUEFHRV9TWU06dGhpcy5fcGFnZSgpLHRoaXMuX3NraXBDcnVmdCgpO2JyZWFrO2Nhc2UgVG9rZW5zLkZPTlRfRkFDRV9TWU06dGhpcy5fZm9udF9mYWNlKCksdGhpcy5fc2tpcENydWZ0KCk7YnJlYWs7Y2FzZSBUb2tlbnMuS0VZRlJBTUVTX1NZTTp0aGlzLl9rZXlmcmFtZXMoKSx0aGlzLl9za2lwQ3J1ZnQoKTticmVhaztjYXNlIFRva2Vucy5WSUVXUE9SVF9TWU06dGhpcy5fdmlld3BvcnQoKSx0aGlzLl9za2lwQ3J1ZnQoKTticmVhaztjYXNlIFRva2Vucy5VTktOT1dOX1NZTTppZih0b2tlblN0cmVhbS5nZXQoKSx0aGlzLm9wdGlvbnMuc3RyaWN0KXRocm93IG5ldyBTeW50YXhFcnJvcigiVW5rbm93biBAIHJ1bGUuIix0b2tlblN0cmVhbS5MVCgwKS5zdGFydExpbmUsdG9rZW5TdHJlYW0uTFQoMCkuc3RhcnRDb2wpO2Zvcih0aGlzLmZpcmUoe3R5cGU6ImVycm9yIixlcnJvcjpudWxsLG1lc3NhZ2U6IlVua25vd24gQCBydWxlOiAiK3Rva2VuU3RyZWFtLkxUKDApLnZhbHVlKyIuIixsaW5lOnRva2VuU3RyZWFtLkxUKDApLnN0YXJ0TGluZSxjb2w6dG9rZW5TdHJlYW0uTFQoMCkuc3RhcnRDb2x9KSxjb3VudD0wO3Rva2VuU3RyZWFtLmFkdmFuY2UoW1Rva2Vucy5MQlJBQ0UsVG9rZW5zLlJCUkFDRV0pPT1Ub2tlbnMuTEJSQUNFOyljb3VudCsrO2Zvcig7Y291bnQ7KXRva2VuU3RyZWFtLmFkdmFuY2UoW1Rva2Vucy5SQlJBQ0VdKSxjb3VudC0tO2JyZWFrO2Nhc2UgVG9rZW5zLlM6dGhpcy5fcmVhZFdoaXRlc3BhY2UoKTticmVhaztkZWZhdWx0OmlmKCF0aGlzLl9ydWxlc2V0KCkpc3dpdGNoKHR0KXtjYXNlIFRva2Vucy5DSEFSU0VUX1NZTTp0aHJvdyB0b2tlbj10b2tlblN0cmVhbS5MVCgxKSx0aGlzLl9jaGFyc2V0KCExKSxuZXcgU3ludGF4RXJyb3IoIkBjaGFyc2V0IG5vdCBhbGxvd2VkIGhlcmUuIix0b2tlbi5zdGFydExpbmUsdG9rZW4uc3RhcnRDb2wpO2Nhc2UgVG9rZW5zLklNUE9SVF9TWU06dGhyb3cgdG9rZW49dG9rZW5TdHJlYW0uTFQoMSksdGhpcy5faW1wb3J0KCExKSxuZXcgU3ludGF4RXJyb3IoIkBpbXBvcnQgbm90IGFsbG93ZWQgaGVyZS4iLHRva2VuLnN0YXJ0TGluZSx0b2tlbi5zdGFydENvbCk7Y2FzZSBUb2tlbnMuTkFNRVNQQUNFX1NZTTp0aHJvdyB0b2tlbj10b2tlblN0cmVhbS5MVCgxKSx0aGlzLl9uYW1lc3BhY2UoITEpLG5ldyBTeW50YXhFcnJvcigiQG5hbWVzcGFjZSBub3QgYWxsb3dlZCBoZXJlLiIsdG9rZW4uc3RhcnRMaW5lLHRva2VuLnN0YXJ0Q29sKTtkZWZhdWx0OnRva2VuU3RyZWFtLmdldCgpLHRoaXMuX3VuZXhwZWN0ZWRUb2tlbih0b2tlblN0cmVhbS50b2tlbigpKX19fWNhdGNoKGV4KXtpZighKGV4IGluc3RhbmNlb2YgU3ludGF4RXJyb3IpfHx0aGlzLm9wdGlvbnMuc3RyaWN0KXRocm93IGV4O3RoaXMuZmlyZSh7dHlwZToiZXJyb3IiLGVycm9yOmV4LG1lc3NhZ2U6ZXgubWVzc2FnZSxsaW5lOmV4LmxpbmUsY29sOmV4LmNvbH0pfXR0PXRva2VuU3RyZWFtLnBlZWsoKX10dCE9VG9rZW5zLkVPRiYmdGhpcy5fdW5leHBlY3RlZFRva2VuKHRva2VuU3RyZWFtLnRva2VuKCkpLHRoaXMuZmlyZSgiZW5kc3R5bGVzaGVldCIpfSxfY2hhcnNldDpmdW5jdGlvbihlbWl0KXt2YXIgY2hhcnNldCx0b2tlbixsaW5lLGNvbCx0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbTt0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuQ0hBUlNFVF9TWU0pJiYobGluZT10b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZSxjb2w9dG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbCx0aGlzLl9yZWFkV2hpdGVzcGFjZSgpLHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuU1RSSU5HKSx0b2tlbj10b2tlblN0cmVhbS50b2tlbigpLGNoYXJzZXQ9dG9rZW4udmFsdWUsdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLlNFTUlDT0xPTiksZW1pdCE9PSExJiZ0aGlzLmZpcmUoe3R5cGU6ImNoYXJzZXQiLGNoYXJzZXQ6Y2hhcnNldCxsaW5lOmxpbmUsY29sOmNvbH0pKX0sX2ltcG9ydDpmdW5jdGlvbihlbWl0KXt2YXIgdXJpLGltcG9ydFRva2VuLHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtLG1lZGlhTGlzdD1bXTt0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLklNUE9SVF9TWU0pLGltcG9ydFRva2VuPXRva2VuU3RyZWFtLnRva2VuKCksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0b2tlblN0cmVhbS5tdXN0TWF0Y2goW1Rva2Vucy5TVFJJTkcsVG9rZW5zLlVSSV0pLHVyaT10b2tlblN0cmVhbS50b2tlbigpLnZhbHVlLnJlcGxhY2UoL14oPzp1cmxcXCgpP1siXCddPyhbXiJcJ10rPylbIlwnXT9cXCk/JC8sIiQxIiksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSxtZWRpYUxpc3Q9dGhpcy5fbWVkaWFfcXVlcnlfbGlzdCgpLHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuU0VNSUNPTE9OKSx0aGlzLl9yZWFkV2hpdGVzcGFjZSgpLGVtaXQhPT0hMSYmdGhpcy5maXJlKHt0eXBlOiJpbXBvcnQiLHVyaTp1cmksbWVkaWE6bWVkaWFMaXN0LGxpbmU6aW1wb3J0VG9rZW4uc3RhcnRMaW5lLGNvbDppbXBvcnRUb2tlbi5zdGFydENvbH0pfSxfbmFtZXNwYWNlOmZ1bmN0aW9uKGVtaXQpe3ZhciBsaW5lLGNvbCxwcmVmaXgsdXJpLHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtO3Rva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuTkFNRVNQQUNFX1NZTSksbGluZT10b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZSxjb2w9dG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbCx0aGlzLl9yZWFkV2hpdGVzcGFjZSgpLHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JREVOVCkmJihwcmVmaXg9dG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZSx0aGlzLl9yZWFkV2hpdGVzcGFjZSgpKSx0b2tlblN0cmVhbS5tdXN0TWF0Y2goW1Rva2Vucy5TVFJJTkcsVG9rZW5zLlVSSV0pLHVyaT10b2tlblN0cmVhbS50b2tlbigpLnZhbHVlLnJlcGxhY2UoLyg/OnVybFxcKCk/WyJcJ10oW14iXCddKylbIlwnXVxcKT8vLCIkMSIpLHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCksdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5TRU1JQ09MT04pLHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCksZW1pdCE9PSExJiZ0aGlzLmZpcmUoe3R5cGU6Im5hbWVzcGFjZSIscHJlZml4OnByZWZpeCx1cmk6dXJpLGxpbmU6bGluZSxjb2w6Y29sfSl9LF9tZWRpYTpmdW5jdGlvbigpe3ZhciBsaW5lLGNvbCxtZWRpYUxpc3QsdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW07Zm9yKHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuTUVESUFfU1lNKSxsaW5lPXRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lLGNvbD10b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sLHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCksbWVkaWFMaXN0PXRoaXMuX21lZGlhX3F1ZXJ5X2xpc3QoKSx0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLkxCUkFDRSksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0aGlzLmZpcmUoe3R5cGU6InN0YXJ0bWVkaWEiLG1lZGlhOm1lZGlhTGlzdCxsaW5lOmxpbmUsY29sOmNvbH0pOzspaWYodG9rZW5TdHJlYW0ucGVlaygpPT1Ub2tlbnMuUEFHRV9TWU0pdGhpcy5fcGFnZSgpO2Vsc2UgaWYodG9rZW5TdHJlYW0ucGVlaygpPT1Ub2tlbnMuRk9OVF9GQUNFX1NZTSl0aGlzLl9mb250X2ZhY2UoKTtlbHNlIGlmKHRva2VuU3RyZWFtLnBlZWsoKT09VG9rZW5zLlZJRVdQT1JUX1NZTSl0aGlzLl92aWV3cG9ydCgpO2Vsc2UgaWYoIXRoaXMuX3J1bGVzZXQoKSlicmVhazt0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLlJCUkFDRSksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0aGlzLmZpcmUoe3R5cGU6ImVuZG1lZGlhIixtZWRpYTptZWRpYUxpc3QsbGluZTpsaW5lLGNvbDpjb2x9KX0sX21lZGlhX3F1ZXJ5X2xpc3Q6ZnVuY3Rpb24oKXt2YXIgdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW0sbWVkaWFMaXN0PVtdO2Zvcih0aGlzLl9yZWFkV2hpdGVzcGFjZSgpLCh0b2tlblN0cmVhbS5wZWVrKCk9PVRva2Vucy5JREVOVHx8dG9rZW5TdHJlYW0ucGVlaygpPT1Ub2tlbnMuTFBBUkVOKSYmbWVkaWFMaXN0LnB1c2godGhpcy5fbWVkaWFfcXVlcnkoKSk7dG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLkNPTU1BKTspdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSxtZWRpYUxpc3QucHVzaCh0aGlzLl9tZWRpYV9xdWVyeSgpKTtyZXR1cm4gbWVkaWFMaXN0fSxfbWVkaWFfcXVlcnk6ZnVuY3Rpb24oKXt2YXIgdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW0sdHlwZT1udWxsLGlkZW50PW51bGwsdG9rZW49bnVsbCxleHByZXNzaW9ucz1bXTtpZih0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuSURFTlQpJiYoaWRlbnQ9dG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZS50b0xvd2VyQ2FzZSgpLCJvbmx5IiE9aWRlbnQmJiJub3QiIT1pZGVudD8odG9rZW5TdHJlYW0udW5nZXQoKSxpZGVudD1udWxsKTp0b2tlbj10b2tlblN0cmVhbS50b2tlbigpKSx0aGlzLl9yZWFkV2hpdGVzcGFjZSgpLHRva2VuU3RyZWFtLnBlZWsoKT09VG9rZW5zLklERU5UPyh0eXBlPXRoaXMuX21lZGlhX3R5cGUoKSxudWxsPT09dG9rZW4mJih0b2tlbj10b2tlblN0cmVhbS50b2tlbigpKSk6dG9rZW5TdHJlYW0ucGVlaygpPT1Ub2tlbnMuTFBBUkVOJiYobnVsbD09PXRva2VuJiYodG9rZW49dG9rZW5TdHJlYW0uTFQoMSkpLGV4cHJlc3Npb25zLnB1c2godGhpcy5fbWVkaWFfZXhwcmVzc2lvbigpKSksbnVsbD09PXR5cGUmJjA9PT1leHByZXNzaW9ucy5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7dG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLklERU5UKTspImFuZCIhPXRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUudG9Mb3dlckNhc2UoKSYmdGhpcy5fdW5leHBlY3RlZFRva2VuKHRva2VuU3RyZWFtLnRva2VuKCkpLHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCksZXhwcmVzc2lvbnMucHVzaCh0aGlzLl9tZWRpYV9leHByZXNzaW9uKCkpO3JldHVybiBuZXcgTWVkaWFRdWVyeShpZGVudCx0eXBlLGV4cHJlc3Npb25zLHRva2VuLnN0YXJ0TGluZSx0b2tlbi5zdGFydENvbCl9LF9tZWRpYV90eXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lZGlhX2ZlYXR1cmUoKX0sX21lZGlhX2V4cHJlc3Npb246ZnVuY3Rpb24oKXt2YXIgdG9rZW4sdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW0sZmVhdHVyZT1udWxsLGV4cHJlc3Npb249bnVsbDtyZXR1cm4gdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5MUEFSRU4pLHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCksZmVhdHVyZT10aGlzLl9tZWRpYV9mZWF0dXJlKCksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuQ09MT04pJiYodGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0b2tlbj10b2tlblN0cmVhbS5MVCgxKSxleHByZXNzaW9uPXRoaXMuX2V4cHJlc3Npb24oKSksdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5SUEFSRU4pLHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCksbmV3IE1lZGlhRmVhdHVyZShmZWF0dXJlLGV4cHJlc3Npb24/bmV3IFN5bnRheFVuaXQoZXhwcmVzc2lvbix0b2tlbi5zdGFydExpbmUsdG9rZW4uc3RhcnRDb2wpOm51bGwpfSxfbWVkaWFfZmVhdHVyZTpmdW5jdGlvbigpe3ZhciB0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbTtyZXR1cm4gdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5JREVOVCksU3ludGF4VW5pdC5mcm9tVG9rZW4odG9rZW5TdHJlYW0udG9rZW4oKSl9LF9wYWdlOmZ1bmN0aW9uKCl7dmFyIGxpbmUsY29sLHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtLGlkZW50aWZpZXI9bnVsbCxwc2V1ZG9QYWdlPW51bGw7dG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5QQUdFX1NZTSksbGluZT10b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZSxjb2w9dG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbCx0aGlzLl9yZWFkV2hpdGVzcGFjZSgpLHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JREVOVCkmJihpZGVudGlmaWVyPXRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUsImF1dG8iPT09aWRlbnRpZmllci50b0xvd2VyQ2FzZSgpJiZ0aGlzLl91bmV4cGVjdGVkVG9rZW4odG9rZW5TdHJlYW0udG9rZW4oKSkpLHRva2VuU3RyZWFtLnBlZWsoKT09VG9rZW5zLkNPTE9OJiYocHNldWRvUGFnZT10aGlzLl9wc2V1ZG9fcGFnZSgpKSx0aGlzLl9yZWFkV2hpdGVzcGFjZSgpLHRoaXMuZmlyZSh7dHlwZToic3RhcnRwYWdlIixpZDppZGVudGlmaWVyLHBzZXVkbzpwc2V1ZG9QYWdlLGxpbmU6bGluZSxjb2w6Y29sfSksdGhpcy5fcmVhZERlY2xhcmF0aW9ucyghMCwhMCksdGhpcy5maXJlKHt0eXBlOiJlbmRwYWdlIixpZDppZGVudGlmaWVyLHBzZXVkbzpwc2V1ZG9QYWdlLGxpbmU6bGluZSxjb2w6Y29sfSl9LF9tYXJnaW46ZnVuY3Rpb24oKXt2YXIgbGluZSxjb2wsdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW0sbWFyZ2luU3ltPXRoaXMuX21hcmdpbl9zeW0oKTtyZXR1cm4gbWFyZ2luU3ltPyhsaW5lPXRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lLGNvbD10b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sLHRoaXMuZmlyZSh7dHlwZToic3RhcnRwYWdlbWFyZ2luIixtYXJnaW46bWFyZ2luU3ltLGxpbmU6bGluZSxjb2w6Y29sfSksdGhpcy5fcmVhZERlY2xhcmF0aW9ucyghMCksdGhpcy5maXJlKHt0eXBlOiJlbmRwYWdlbWFyZ2luIixtYXJnaW46bWFyZ2luU3ltLGxpbmU6bGluZSxjb2w6Y29sfSksITApOiExfSxfbWFyZ2luX3N5bTpmdW5jdGlvbigpe3ZhciB0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbTtyZXR1cm4gdG9rZW5TdHJlYW0ubWF0Y2goW1Rva2Vucy5UT1BMRUZUQ09STkVSX1NZTSxUb2tlbnMuVE9QTEVGVF9TWU0sVG9rZW5zLlRPUENFTlRFUl9TWU0sVG9rZW5zLlRPUFJJR0hUX1NZTSxUb2tlbnMuVE9QUklHSFRDT1JORVJfU1lNLFRva2Vucy5CT1RUT01MRUZUQ09STkVSX1NZTSxUb2tlbnMuQk9UVE9NTEVGVF9TWU0sVG9rZW5zLkJPVFRPTUNFTlRFUl9TWU0sVG9rZW5zLkJPVFRPTVJJR0hUX1NZTSxUb2tlbnMuQk9UVE9NUklHSFRDT1JORVJfU1lNLFRva2Vucy5MRUZUVE9QX1NZTSxUb2tlbnMuTEVGVE1JRERMRV9TWU0sVG9rZW5zLkxFRlRCT1RUT01fU1lNLFRva2Vucy5SSUdIVFRPUF9TWU0sVG9rZW5zLlJJR0hUTUlERExFX1NZTSxUb2tlbnMuUklHSFRCT1RUT01fU1lNXSk/U3ludGF4VW5pdC5mcm9tVG9rZW4odG9rZW5TdHJlYW0udG9rZW4oKSk6bnVsbH0sX3BzZXVkb19wYWdlOmZ1bmN0aW9uKCl7dmFyIHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtO3JldHVybiB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLkNPTE9OKSx0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLklERU5UKSx0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlfSxfZm9udF9mYWNlOmZ1bmN0aW9uKCl7dmFyIGxpbmUsY29sLHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtO3Rva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuRk9OVF9GQUNFX1NZTSksbGluZT10b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZSxjb2w9dG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbCx0aGlzLl9yZWFkV2hpdGVzcGFjZSgpLHRoaXMuZmlyZSh7dHlwZToic3RhcnRmb250ZmFjZSIsbGluZTpsaW5lLGNvbDpjb2x9KSx0aGlzLl9yZWFkRGVjbGFyYXRpb25zKCEwKSx0aGlzLmZpcmUoe3R5cGU6ImVuZGZvbnRmYWNlIixsaW5lOmxpbmUsY29sOmNvbH0pfSxfdmlld3BvcnQ6ZnVuY3Rpb24oKXt2YXIgbGluZSxjb2wsdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW07dG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5WSUVXUE9SVF9TWU0pLGxpbmU9dG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmUsY29sPXRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRDb2wsdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0aGlzLmZpcmUoe3R5cGU6InN0YXJ0dmlld3BvcnQiLGxpbmU6bGluZSxjb2w6Y29sfSksdGhpcy5fcmVhZERlY2xhcmF0aW9ucyghMCksdGhpcy5maXJlKHt0eXBlOiJlbmR2aWV3cG9ydCIsbGluZTpsaW5lLGNvbDpjb2x9KX0sX29wZXJhdG9yOmZ1bmN0aW9uKGluRnVuY3Rpb24pe3ZhciB0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbSx0b2tlbj1udWxsO3JldHVybih0b2tlblN0cmVhbS5tYXRjaChbVG9rZW5zLlNMQVNILFRva2Vucy5DT01NQV0pfHxpbkZ1bmN0aW9uJiZ0b2tlblN0cmVhbS5tYXRjaChbVG9rZW5zLlBMVVMsVG9rZW5zLlNUQVIsVG9rZW5zLk1JTlVTXSkpJiYodG9rZW49dG9rZW5TdHJlYW0udG9rZW4oKSx0aGlzLl9yZWFkV2hpdGVzcGFjZSgpKSx0b2tlbj9Qcm9wZXJ0eVZhbHVlUGFydC5mcm9tVG9rZW4odG9rZW4pOm51bGx9LF9jb21iaW5hdG9yOmZ1bmN0aW9uKCl7dmFyIHRva2VuLHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtLHZhbHVlPW51bGw7cmV0dXJuIHRva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuUExVUyxUb2tlbnMuR1JFQVRFUixUb2tlbnMuVElMREVdKSYmKHRva2VuPXRva2VuU3RyZWFtLnRva2VuKCksdmFsdWU9bmV3IENvbWJpbmF0b3IodG9rZW4udmFsdWUsdG9rZW4uc3RhcnRMaW5lLHRva2VuLnN0YXJ0Q29sKSx0aGlzLl9yZWFkV2hpdGVzcGFjZSgpKSx2YWx1ZX0sX3VuYXJ5X29wZXJhdG9yOmZ1bmN0aW9uKCl7dmFyIHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtO3JldHVybiB0b2tlblN0cmVhbS5tYXRjaChbVG9rZW5zLk1JTlVTLFRva2Vucy5QTFVTXSk/dG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTpudWxsfSxfcHJvcGVydHk6ZnVuY3Rpb24oKXt2YXIgdG9rZW5WYWx1ZSx0b2tlbixsaW5lLGNvbCx0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbSx2YWx1ZT1udWxsLGhhY2s9bnVsbDtyZXR1cm4gdG9rZW5TdHJlYW0ucGVlaygpPT1Ub2tlbnMuU1RBUiYmdGhpcy5vcHRpb25zLnN0YXJIYWNrJiYodG9rZW5TdHJlYW0uZ2V0KCksdG9rZW49dG9rZW5TdHJlYW0udG9rZW4oKSxoYWNrPXRva2VuLnZhbHVlLGxpbmU9dG9rZW4uc3RhcnRMaW5lLGNvbD10b2tlbi5zdGFydENvbCksdG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLklERU5UKSYmKHRva2VuPXRva2VuU3RyZWFtLnRva2VuKCksdG9rZW5WYWx1ZT10b2tlbi52YWx1ZSwiXyI9PXRva2VuVmFsdWUuY2hhckF0KDApJiZ0aGlzLm9wdGlvbnMudW5kZXJzY29yZUhhY2smJihoYWNrPSJfIix0b2tlblZhbHVlPXRva2VuVmFsdWUuc3Vic3RyaW5nKDEpKSx2YWx1ZT1uZXcgUHJvcGVydHlOYW1lKHRva2VuVmFsdWUsaGFjayxsaW5lfHx0b2tlbi5zdGFydExpbmUsY29sfHx0b2tlbi5zdGFydENvbCksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSksdmFsdWV9LF9ydWxlc2V0OmZ1bmN0aW9uKCl7dmFyIHR0LHNlbGVjdG9ycyx0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbTt0cnl7c2VsZWN0b3JzPXRoaXMuX3NlbGVjdG9yc19ncm91cCgpfWNhdGNoKGV4KXtpZighKGV4IGluc3RhbmNlb2YgU3ludGF4RXJyb3IpfHx0aGlzLm9wdGlvbnMuc3RyaWN0KXRocm93IGV4O2lmKHRoaXMuZmlyZSh7dHlwZToiZXJyb3IiLGVycm9yOmV4LG1lc3NhZ2U6ZXgubWVzc2FnZSxsaW5lOmV4LmxpbmUsY29sOmV4LmNvbH0pLHR0PXRva2VuU3RyZWFtLmFkdmFuY2UoW1Rva2Vucy5SQlJBQ0VdKSx0dCE9VG9rZW5zLlJCUkFDRSl0aHJvdyBleDtyZXR1cm4hMH1yZXR1cm4gc2VsZWN0b3JzJiYodGhpcy5maXJlKHt0eXBlOiJzdGFydHJ1bGUiLHNlbGVjdG9yczpzZWxlY3RvcnMsbGluZTpzZWxlY3RvcnNbMF0ubGluZSxjb2w6c2VsZWN0b3JzWzBdLmNvbH0pLHRoaXMuX3JlYWREZWNsYXJhdGlvbnMoITApLHRoaXMuZmlyZSh7dHlwZToiZW5kcnVsZSIsc2VsZWN0b3JzOnNlbGVjdG9ycyxsaW5lOnNlbGVjdG9yc1swXS5saW5lLGNvbDpzZWxlY3RvcnNbMF0uY29sfSkpLHNlbGVjdG9yc30sX3NlbGVjdG9yc19ncm91cDpmdW5jdGlvbigpe3ZhciBzZWxlY3Rvcix0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbSxzZWxlY3RvcnM9W107aWYoc2VsZWN0b3I9dGhpcy5fc2VsZWN0b3IoKSxudWxsIT09c2VsZWN0b3IpZm9yKHNlbGVjdG9ycy5wdXNoKHNlbGVjdG9yKTt0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuQ09NTUEpOyl0aGlzLl9yZWFkV2hpdGVzcGFjZSgpLHNlbGVjdG9yPXRoaXMuX3NlbGVjdG9yKCksbnVsbCE9PXNlbGVjdG9yP3NlbGVjdG9ycy5wdXNoKHNlbGVjdG9yKTp0aGlzLl91bmV4cGVjdGVkVG9rZW4odG9rZW5TdHJlYW0uTFQoMSkpO3JldHVybiBzZWxlY3RvcnMubGVuZ3RoP3NlbGVjdG9yczpudWxsfSxfc2VsZWN0b3I6ZnVuY3Rpb24oKXt2YXIgdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW0sc2VsZWN0b3I9W10sbmV4dFNlbGVjdG9yPW51bGwsY29tYmluYXRvcj1udWxsLHdzPW51bGw7aWYobmV4dFNlbGVjdG9yPXRoaXMuX3NpbXBsZV9zZWxlY3Rvcl9zZXF1ZW5jZSgpLG51bGw9PT1uZXh0U2VsZWN0b3IpcmV0dXJuIG51bGw7Zm9yKHNlbGVjdG9yLnB1c2gobmV4dFNlbGVjdG9yKTs7KWlmKGNvbWJpbmF0b3I9dGhpcy5fY29tYmluYXRvcigpLG51bGwhPT1jb21iaW5hdG9yKXNlbGVjdG9yLnB1c2goY29tYmluYXRvciksbmV4dFNlbGVjdG9yPXRoaXMuX3NpbXBsZV9zZWxlY3Rvcl9zZXF1ZW5jZSgpLG51bGw9PT1uZXh0U2VsZWN0b3I/dGhpcy5fdW5leHBlY3RlZFRva2VuKHRva2VuU3RyZWFtLkxUKDEpKTpzZWxlY3Rvci5wdXNoKG5leHRTZWxlY3Rvcik7ZWxzZXtpZighdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSlicmVhazt3cz1uZXcgQ29tYmluYXRvcih0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlLHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lLHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRDb2wpLGNvbWJpbmF0b3I9dGhpcy5fY29tYmluYXRvcigpLG5leHRTZWxlY3Rvcj10aGlzLl9zaW1wbGVfc2VsZWN0b3Jfc2VxdWVuY2UoKSxudWxsPT09bmV4dFNlbGVjdG9yP251bGwhPT1jb21iaW5hdG9yJiZ0aGlzLl91bmV4cGVjdGVkVG9rZW4odG9rZW5TdHJlYW0uTFQoMSkpOihudWxsIT09Y29tYmluYXRvcj9zZWxlY3Rvci5wdXNoKGNvbWJpbmF0b3IpOnNlbGVjdG9yLnB1c2god3MpLHNlbGVjdG9yLnB1c2gobmV4dFNlbGVjdG9yKSl9cmV0dXJuIG5ldyBTZWxlY3RvcihzZWxlY3RvcixzZWxlY3RvclswXS5saW5lLHNlbGVjdG9yWzBdLmNvbCl9LF9zaW1wbGVfc2VsZWN0b3Jfc2VxdWVuY2U6ZnVuY3Rpb24oKXt2YXIgbGluZSxjb2wsdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW0sZWxlbWVudE5hbWU9bnVsbCxtb2RpZmllcnM9W10sc2VsZWN0b3JUZXh0PSIiLGNvbXBvbmVudHM9W2Z1bmN0aW9uKCl7cmV0dXJuIHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5IQVNIKT9uZXcgU2VsZWN0b3JTdWJQYXJ0KHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUsImlkIix0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZSx0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sKTpudWxsfSx0aGlzLl9jbGFzcyx0aGlzLl9hdHRyaWIsdGhpcy5fcHNldWRvLHRoaXMuX25lZ2F0aW9uXSxpPTAsbGVuPWNvbXBvbmVudHMubGVuZ3RoLGNvbXBvbmVudD1udWxsO2ZvcihsaW5lPXRva2VuU3RyZWFtLkxUKDEpLnN0YXJ0TGluZSxjb2w9dG9rZW5TdHJlYW0uTFQoMSkuc3RhcnRDb2wsZWxlbWVudE5hbWU9dGhpcy5fdHlwZV9zZWxlY3RvcigpLGVsZW1lbnROYW1lfHwoZWxlbWVudE5hbWU9dGhpcy5fdW5pdmVyc2FsKCkpLG51bGwhPT1lbGVtZW50TmFtZSYmKHNlbGVjdG9yVGV4dCs9ZWxlbWVudE5hbWUpOzspe2lmKHRva2VuU3RyZWFtLnBlZWsoKT09PVRva2Vucy5TKWJyZWFrO2Zvcig7bGVuPmkmJm51bGw9PT1jb21wb25lbnQ7KWNvbXBvbmVudD1jb21wb25lbnRzW2krK10uY2FsbCh0aGlzKTtpZihudWxsPT09Y29tcG9uZW50KXtpZigiIj09PXNlbGVjdG9yVGV4dClyZXR1cm4gbnVsbDticmVha31pPTAsbW9kaWZpZXJzLnB1c2goY29tcG9uZW50KSxzZWxlY3RvclRleHQrPSIiK2NvbXBvbmVudCxjb21wb25lbnQ9bnVsbH1yZXR1cm4iIiE9PXNlbGVjdG9yVGV4dD9uZXcgU2VsZWN0b3JQYXJ0KGVsZW1lbnROYW1lLG1vZGlmaWVycyxzZWxlY3RvclRleHQsbGluZSxjb2wpOm51bGx9LF90eXBlX3NlbGVjdG9yOmZ1bmN0aW9uKCl7dmFyIHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtLG5zPXRoaXMuX25hbWVzcGFjZV9wcmVmaXgoKSxlbGVtZW50TmFtZT10aGlzLl9lbGVtZW50X25hbWUoKTtyZXR1cm4gZWxlbWVudE5hbWU/KG5zJiYoZWxlbWVudE5hbWUudGV4dD1ucytlbGVtZW50TmFtZS50ZXh0LGVsZW1lbnROYW1lLmNvbC09bnMubGVuZ3RoKSxlbGVtZW50TmFtZSk6KG5zJiYodG9rZW5TdHJlYW0udW5nZXQoKSxucy5sZW5ndGg+MSYmdG9rZW5TdHJlYW0udW5nZXQoKSksbnVsbCl9LF9jbGFzczpmdW5jdGlvbigpe3ZhciB0b2tlbix0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbTtyZXR1cm4gdG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLkRPVCk/KHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuSURFTlQpLHRva2VuPXRva2VuU3RyZWFtLnRva2VuKCksbmV3IFNlbGVjdG9yU3ViUGFydCgiLiIrdG9rZW4udmFsdWUsImNsYXNzIix0b2tlbi5zdGFydExpbmUsdG9rZW4uc3RhcnRDb2wtMSkpOm51bGx9LF9lbGVtZW50X25hbWU6ZnVuY3Rpb24oKXt2YXIgdG9rZW4sdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW07cmV0dXJuIHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JREVOVCk/KHRva2VuPXRva2VuU3RyZWFtLnRva2VuKCksbmV3IFNlbGVjdG9yU3ViUGFydCh0b2tlbi52YWx1ZSwiZWxlbWVudE5hbWUiLHRva2VuLnN0YXJ0TGluZSx0b2tlbi5zdGFydENvbCkpOm51bGx9LF9uYW1lc3BhY2VfcHJlZml4OmZ1bmN0aW9uKCl7dmFyIHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtLHZhbHVlPSIiO3JldHVybih0b2tlblN0cmVhbS5MQSgxKT09PVRva2Vucy5QSVBFfHx0b2tlblN0cmVhbS5MQSgyKT09PVRva2Vucy5QSVBFKSYmKHRva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuSURFTlQsVG9rZW5zLlNUQVJdKSYmKHZhbHVlKz10b2tlblN0cmVhbS50b2tlbigpLnZhbHVlKSx0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLlBJUEUpLHZhbHVlKz0ifCIpLHZhbHVlLmxlbmd0aD92YWx1ZTpudWxsfSxfdW5pdmVyc2FsOmZ1bmN0aW9uKCl7dmFyIG5zLHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtLHZhbHVlPSIiO3JldHVybiBucz10aGlzLl9uYW1lc3BhY2VfcHJlZml4KCksbnMmJih2YWx1ZSs9bnMpLHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5TVEFSKSYmKHZhbHVlKz0iKiIpLHZhbHVlLmxlbmd0aD92YWx1ZTpudWxsfSxfYXR0cmliOmZ1bmN0aW9uKCl7dmFyIG5zLHRva2VuLHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtLHZhbHVlPW51bGw7cmV0dXJuIHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5MQlJBQ0tFVCk/KHRva2VuPXRva2VuU3RyZWFtLnRva2VuKCksdmFsdWU9dG9rZW4udmFsdWUsdmFsdWUrPXRoaXMuX3JlYWRXaGl0ZXNwYWNlKCksbnM9dGhpcy5fbmFtZXNwYWNlX3ByZWZpeCgpLG5zJiYodmFsdWUrPW5zKSx0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLklERU5UKSx2YWx1ZSs9dG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZSx2YWx1ZSs9dGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0b2tlblN0cmVhbS5tYXRjaChbVG9rZW5zLlBSRUZJWE1BVENILFRva2Vucy5TVUZGSVhNQVRDSCxUb2tlbnMuU1VCU1RSSU5HTUFUQ0gsVG9rZW5zLkVRVUFMUyxUb2tlbnMuSU5DTFVERVMsVG9rZW5zLkRBU0hNQVRDSF0pJiYodmFsdWUrPXRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUsdmFsdWUrPXRoaXMuX3JlYWRXaGl0ZXNwYWNlKCksdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFtUb2tlbnMuSURFTlQsVG9rZW5zLlNUUklOR10pLHZhbHVlKz10b2tlblN0cmVhbS50b2tlbigpLnZhbHVlLHZhbHVlKz10aGlzLl9yZWFkV2hpdGVzcGFjZSgpKSx0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLlJCUkFDS0VUKSxuZXcgU2VsZWN0b3JTdWJQYXJ0KHZhbHVlKyJdIiwiYXR0cmlidXRlIix0b2tlbi5zdGFydExpbmUsdG9rZW4uc3RhcnRDb2wpKTpudWxsfSxfcHNldWRvOmZ1bmN0aW9uKCl7dmFyIGxpbmUsY29sLHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtLHBzZXVkbz1udWxsLGNvbG9ucz0iOiI7cmV0dXJuIHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5DT0xPTikmJih0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuQ09MT04pJiYoY29sb25zKz0iOiIpLHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JREVOVCk/KHBzZXVkbz10b2tlblN0cmVhbS50b2tlbigpLnZhbHVlLGxpbmU9dG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmUsY29sPXRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRDb2wtY29sb25zLmxlbmd0aCk6dG9rZW5TdHJlYW0ucGVlaygpPT1Ub2tlbnMuRlVOQ1RJT04mJihsaW5lPXRva2VuU3RyZWFtLkxUKDEpLnN0YXJ0TGluZSxjb2w9dG9rZW5TdHJlYW0uTFQoMSkuc3RhcnRDb2wtY29sb25zLmxlbmd0aCxwc2V1ZG89dGhpcy5fZnVuY3Rpb25hbF9wc2V1ZG8oKSkscHNldWRvJiYocHNldWRvPW5ldyBTZWxlY3RvclN1YlBhcnQoY29sb25zK3BzZXVkbywicHNldWRvIixsaW5lLGNvbCkpKSxwc2V1ZG99LF9mdW5jdGlvbmFsX3BzZXVkbzpmdW5jdGlvbigpe3ZhciB0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbSx2YWx1ZT1udWxsO3JldHVybiB0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuRlVOQ1RJT04pJiYodmFsdWU9dG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZSx2YWx1ZSs9dGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx2YWx1ZSs9dGhpcy5fZXhwcmVzc2lvbigpLHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuUlBBUkVOKSx2YWx1ZSs9IikiKSx2YWx1ZX0sX2V4cHJlc3Npb246ZnVuY3Rpb24oKXtmb3IodmFyIHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtLHZhbHVlPSIiO3Rva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuUExVUyxUb2tlbnMuTUlOVVMsVG9rZW5zLkRJTUVOU0lPTixUb2tlbnMuTlVNQkVSLFRva2Vucy5TVFJJTkcsVG9rZW5zLklERU5ULFRva2Vucy5MRU5HVEgsVG9rZW5zLkZSRVEsVG9rZW5zLkFOR0xFLFRva2Vucy5USU1FLFRva2Vucy5SRVNPTFVUSU9OLFRva2Vucy5TTEFTSF0pOyl2YWx1ZSs9dG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZSx2YWx1ZSs9dGhpcy5fcmVhZFdoaXRlc3BhY2UoKTtyZXR1cm4gdmFsdWUubGVuZ3RoP3ZhbHVlOm51bGx9LF9uZWdhdGlvbjpmdW5jdGlvbigpe3ZhciBsaW5lLGNvbCxhcmcsdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW0sdmFsdWU9IiIsc3VicGFydD1udWxsO3JldHVybiB0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuTk9UKSYmKHZhbHVlPXRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUsbGluZT10b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZSxjb2w9dG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbCx2YWx1ZSs9dGhpcy5fcmVhZFdoaXRlc3BhY2UoKSxhcmc9dGhpcy5fbmVnYXRpb25fYXJnKCksdmFsdWUrPWFyZyx2YWx1ZSs9dGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuUlBBUkVOKSx2YWx1ZSs9dG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZSxzdWJwYXJ0PW5ldyBTZWxlY3RvclN1YlBhcnQodmFsdWUsIm5vdCIsbGluZSxjb2wpLHN1YnBhcnQuYXJncy5wdXNoKGFyZykpLHN1YnBhcnR9LF9uZWdhdGlvbl9hcmc6ZnVuY3Rpb24oKXt2YXIgbGluZSxjb2wscGFydCx0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbSxhcmdzPVt0aGlzLl90eXBlX3NlbGVjdG9yLHRoaXMuX3VuaXZlcnNhbCxmdW5jdGlvbigpe3JldHVybiB0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuSEFTSCk/bmV3IFNlbGVjdG9yU3ViUGFydCh0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlLCJpZCIsdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmUsdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbCk6bnVsbH0sdGhpcy5fY2xhc3MsdGhpcy5fYXR0cmliLHRoaXMuX3BzZXVkb10sYXJnPW51bGwsaT0wLGxlbj1hcmdzLmxlbmd0aDtmb3IobGluZT10b2tlblN0cmVhbS5MVCgxKS5zdGFydExpbmUsY29sPXRva2VuU3RyZWFtLkxUKDEpLnN0YXJ0Q29sO2xlbj5pJiZudWxsPT09YXJnOylhcmc9YXJnc1tpXS5jYWxsKHRoaXMpLGkrKztyZXR1cm4gbnVsbD09PWFyZyYmdGhpcy5fdW5leHBlY3RlZFRva2VuKHRva2VuU3RyZWFtLkxUKDEpKSxwYXJ0PSJlbGVtZW50TmFtZSI9PWFyZy50eXBlP25ldyBTZWxlY3RvclBhcnQoYXJnLFtdLCIiK2FyZyxsaW5lLGNvbCk6bmV3IFNlbGVjdG9yUGFydChudWxsLFthcmddLCIiK2FyZyxsaW5lLGNvbCl9LF9kZWNsYXJhdGlvbjpmdW5jdGlvbigpe3ZhciB0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbSxwcm9wZXJ0eT1udWxsLGV4cHI9bnVsbCxwcmlvPW51bGwsaW52YWxpZD1udWxsLHByb3BlcnR5TmFtZT0iIjtpZihwcm9wZXJ0eT10aGlzLl9wcm9wZXJ0eSgpLG51bGwhPT1wcm9wZXJ0eSl7dG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5DT0xPTiksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSxleHByPXRoaXMuX2V4cHIoKSxleHByJiYwIT09ZXhwci5sZW5ndGh8fHRoaXMuX3VuZXhwZWN0ZWRUb2tlbih0b2tlblN0cmVhbS5MVCgxKSkscHJpbz10aGlzLl9wcmlvKCkscHJvcGVydHlOYW1lPSIiK3Byb3BlcnR5LCh0aGlzLm9wdGlvbnMuc3RhckhhY2smJiIqIj09cHJvcGVydHkuaGFja3x8dGhpcy5vcHRpb25zLnVuZGVyc2NvcmVIYWNrJiYiXyI9PXByb3BlcnR5LmhhY2spJiYocHJvcGVydHlOYW1lPXByb3BlcnR5LnRleHQpO3RyeXt0aGlzLl92YWxpZGF0ZVByb3BlcnR5KHByb3BlcnR5TmFtZSxleHByKX1jYXRjaChleCl7aW52YWxpZD1leH1yZXR1cm4gdGhpcy5maXJlKHt0eXBlOiJwcm9wZXJ0eSIscHJvcGVydHk6cHJvcGVydHksdmFsdWU6ZXhwcixpbXBvcnRhbnQ6cHJpbyxsaW5lOnByb3BlcnR5LmxpbmUsY29sOnByb3BlcnR5LmNvbCxpbnZhbGlkOmludmFsaWR9KSwhMH1yZXR1cm4hMX0sX3ByaW86ZnVuY3Rpb24oKXt2YXIgdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW0scmVzdWx0PXRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JTVBPUlRBTlRfU1lNKTtyZXR1cm4gdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSxyZXN1bHR9LF9leHByOmZ1bmN0aW9uKGluRnVuY3Rpb24pe3ZhciB2YWx1ZXM9KHRoaXMuX3Rva2VuU3RyZWFtLFtdKSx2YWx1ZT1udWxsLG9wZXJhdG9yPW51bGw7aWYodmFsdWU9dGhpcy5fdGVybShpbkZ1bmN0aW9uKSxudWxsIT09dmFsdWUpZm9yKHZhbHVlcy5wdXNoKHZhbHVlKTs7KXtpZihvcGVyYXRvcj10aGlzLl9vcGVyYXRvcihpbkZ1bmN0aW9uKSxvcGVyYXRvciYmdmFsdWVzLnB1c2gob3BlcmF0b3IpLHZhbHVlPXRoaXMuX3Rlcm0oaW5GdW5jdGlvbiksbnVsbD09PXZhbHVlKWJyZWFrO1xudmFsdWVzLnB1c2godmFsdWUpfXJldHVybiB2YWx1ZXMubGVuZ3RoPjA/bmV3IFByb3BlcnR5VmFsdWUodmFsdWVzLHZhbHVlc1swXS5saW5lLHZhbHVlc1swXS5jb2wpOm51bGx9LF90ZXJtOmZ1bmN0aW9uKGluRnVuY3Rpb24pe3ZhciB0b2tlbixsaW5lLGNvbCx0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbSx1bmFyeT1udWxsLHZhbHVlPW51bGwsZW5kQ2hhcj1udWxsO3JldHVybiB1bmFyeT10aGlzLl91bmFyeV9vcGVyYXRvcigpLG51bGwhPT11bmFyeSYmKGxpbmU9dG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmUsY29sPXRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRDb2wpLHRva2VuU3RyZWFtLnBlZWsoKT09VG9rZW5zLklFX0ZVTkNUSU9OJiZ0aGlzLm9wdGlvbnMuaWVGaWx0ZXJzPyh2YWx1ZT10aGlzLl9pZV9mdW5jdGlvbigpLG51bGw9PT11bmFyeSYmKGxpbmU9dG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmUsY29sPXRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRDb2wpKTppbkZ1bmN0aW9uJiZ0b2tlblN0cmVhbS5tYXRjaChbVG9rZW5zLkxQQVJFTixUb2tlbnMuTEJSQUNFLFRva2Vucy5MQlJBQ0tFVF0pPyh0b2tlbj10b2tlblN0cmVhbS50b2tlbigpLGVuZENoYXI9dG9rZW4uZW5kQ2hhcix2YWx1ZT10b2tlbi52YWx1ZSt0aGlzLl9leHByKGluRnVuY3Rpb24pLnRleHQsbnVsbD09PXVuYXJ5JiYobGluZT10b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZSxjb2w9dG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbCksdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy50eXBlKGVuZENoYXIpKSx2YWx1ZSs9ZW5kQ2hhcix0aGlzLl9yZWFkV2hpdGVzcGFjZSgpKTp0b2tlblN0cmVhbS5tYXRjaChbVG9rZW5zLk5VTUJFUixUb2tlbnMuUEVSQ0VOVEFHRSxUb2tlbnMuTEVOR1RILFRva2Vucy5BTkdMRSxUb2tlbnMuVElNRSxUb2tlbnMuRlJFUSxUb2tlbnMuU1RSSU5HLFRva2Vucy5JREVOVCxUb2tlbnMuVVJJLFRva2Vucy5VTklDT0RFX1JBTkdFXSk/KHZhbHVlPXRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUsbnVsbD09PXVuYXJ5JiYobGluZT10b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZSxjb2w9dG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbCksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSk6KHRva2VuPXRoaXMuX2hleGNvbG9yKCksbnVsbD09PXRva2VuPyhudWxsPT09dW5hcnkmJihsaW5lPXRva2VuU3RyZWFtLkxUKDEpLnN0YXJ0TGluZSxjb2w9dG9rZW5TdHJlYW0uTFQoMSkuc3RhcnRDb2wpLG51bGw9PT12YWx1ZSYmKHZhbHVlPXRva2VuU3RyZWFtLkxBKDMpPT1Ub2tlbnMuRVFVQUxTJiZ0aGlzLm9wdGlvbnMuaWVGaWx0ZXJzP3RoaXMuX2llX2Z1bmN0aW9uKCk6dGhpcy5fZnVuY3Rpb24oKSkpOih2YWx1ZT10b2tlbi52YWx1ZSxudWxsPT09dW5hcnkmJihsaW5lPXRva2VuLnN0YXJ0TGluZSxjb2w9dG9rZW4uc3RhcnRDb2wpKSksbnVsbCE9PXZhbHVlP25ldyBQcm9wZXJ0eVZhbHVlUGFydChudWxsIT09dW5hcnk/dW5hcnkrdmFsdWU6dmFsdWUsbGluZSxjb2wpOm51bGx9LF9mdW5jdGlvbjpmdW5jdGlvbigpe3ZhciBsdCx0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbSxmdW5jdGlvblRleHQ9bnVsbCxleHByPW51bGw7aWYodG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLkZVTkNUSU9OKSl7aWYoZnVuY3Rpb25UZXh0PXRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUsdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSxleHByPXRoaXMuX2V4cHIoITApLGZ1bmN0aW9uVGV4dCs9ZXhwcix0aGlzLm9wdGlvbnMuaWVGaWx0ZXJzJiZ0b2tlblN0cmVhbS5wZWVrKCk9PVRva2Vucy5FUVVBTFMpZG8gZm9yKHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCkmJihmdW5jdGlvblRleHQrPXRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUpLHRva2VuU3RyZWFtLkxBKDApPT1Ub2tlbnMuQ09NTUEmJihmdW5jdGlvblRleHQrPXRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUpLHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JREVOVCksZnVuY3Rpb25UZXh0Kz10b2tlblN0cmVhbS50b2tlbigpLnZhbHVlLHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5FUVVBTFMpLGZ1bmN0aW9uVGV4dCs9dG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZSxsdD10b2tlblN0cmVhbS5wZWVrKCk7bHQhPVRva2Vucy5DT01NQSYmbHQhPVRva2Vucy5TJiZsdCE9VG9rZW5zLlJQQVJFTjspdG9rZW5TdHJlYW0uZ2V0KCksZnVuY3Rpb25UZXh0Kz10b2tlblN0cmVhbS50b2tlbigpLnZhbHVlLGx0PXRva2VuU3RyZWFtLnBlZWsoKTt3aGlsZSh0b2tlblN0cmVhbS5tYXRjaChbVG9rZW5zLkNPTU1BLFRva2Vucy5TXSkpO3Rva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5SUEFSRU4pLGZ1bmN0aW9uVGV4dCs9IikiLHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCl9cmV0dXJuIGZ1bmN0aW9uVGV4dH0sX2llX2Z1bmN0aW9uOmZ1bmN0aW9uKCl7dmFyIGx0LHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtLGZ1bmN0aW9uVGV4dD1udWxsO2lmKHRva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuSUVfRlVOQ1RJT04sVG9rZW5zLkZVTkNUSU9OXSkpe2Z1bmN0aW9uVGV4dD10b2tlblN0cmVhbS50b2tlbigpLnZhbHVlO2RvIGZvcih0aGlzLl9yZWFkV2hpdGVzcGFjZSgpJiYoZnVuY3Rpb25UZXh0Kz10b2tlblN0cmVhbS50b2tlbigpLnZhbHVlKSx0b2tlblN0cmVhbS5MQSgwKT09VG9rZW5zLkNPTU1BJiYoZnVuY3Rpb25UZXh0Kz10b2tlblN0cmVhbS50b2tlbigpLnZhbHVlKSx0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuSURFTlQpLGZ1bmN0aW9uVGV4dCs9dG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZSx0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuRVFVQUxTKSxmdW5jdGlvblRleHQrPXRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUsbHQ9dG9rZW5TdHJlYW0ucGVlaygpO2x0IT1Ub2tlbnMuQ09NTUEmJmx0IT1Ub2tlbnMuUyYmbHQhPVRva2Vucy5SUEFSRU47KXRva2VuU3RyZWFtLmdldCgpLGZ1bmN0aW9uVGV4dCs9dG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZSxsdD10b2tlblN0cmVhbS5wZWVrKCk7d2hpbGUodG9rZW5TdHJlYW0ubWF0Y2goW1Rva2Vucy5DT01NQSxUb2tlbnMuU10pKTt0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuUlBBUkVOKSxmdW5jdGlvblRleHQrPSIpIix0aGlzLl9yZWFkV2hpdGVzcGFjZSgpfXJldHVybiBmdW5jdGlvblRleHR9LF9oZXhjb2xvcjpmdW5jdGlvbigpe3ZhciBjb2xvcix0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbSx0b2tlbj1udWxsO2lmKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5IQVNIKSl7aWYodG9rZW49dG9rZW5TdHJlYW0udG9rZW4oKSxjb2xvcj10b2tlbi52YWx1ZSwhLyNbYS1mMC05XXszLDZ9L2kudGVzdChjb2xvcikpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJFeHBlY3RlZCBhIGhleCBjb2xvciBidXQgZm91bmQgXCciK2NvbG9yKyJcJyBhdCBsaW5lICIrdG9rZW4uc3RhcnRMaW5lKyIsIGNvbCAiK3Rva2VuLnN0YXJ0Q29sKyIuIix0b2tlbi5zdGFydExpbmUsdG9rZW4uc3RhcnRDb2wpO3RoaXMuX3JlYWRXaGl0ZXNwYWNlKCl9cmV0dXJuIHRva2VufSxfa2V5ZnJhbWVzOmZ1bmN0aW9uKCl7dmFyIHRva2VuLHR0LG5hbWUsdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW0scHJlZml4PSIiO2Zvcih0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLktFWUZSQU1FU19TWU0pLHRva2VuPXRva2VuU3RyZWFtLnRva2VuKCksL15AXFwtKFteXFwtXSspXFwtLy50ZXN0KHRva2VuLnZhbHVlKSYmKHByZWZpeD1SZWdFeHAuJDEpLHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCksbmFtZT10aGlzLl9rZXlmcmFtZV9uYW1lKCksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLkxCUkFDRSksdGhpcy5maXJlKHt0eXBlOiJzdGFydGtleWZyYW1lcyIsbmFtZTpuYW1lLHByZWZpeDpwcmVmaXgsbGluZTp0b2tlbi5zdGFydExpbmUsY29sOnRva2VuLnN0YXJ0Q29sfSksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0dD10b2tlblN0cmVhbS5wZWVrKCk7dHQ9PVRva2Vucy5JREVOVHx8dHQ9PVRva2Vucy5QRVJDRU5UQUdFOyl0aGlzLl9rZXlmcmFtZV9ydWxlKCksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0dD10b2tlblN0cmVhbS5wZWVrKCk7dGhpcy5maXJlKHt0eXBlOiJlbmRrZXlmcmFtZXMiLG5hbWU6bmFtZSxwcmVmaXg6cHJlZml4LGxpbmU6dG9rZW4uc3RhcnRMaW5lLGNvbDp0b2tlbi5zdGFydENvbH0pLHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCksdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5SQlJBQ0UpfSxfa2V5ZnJhbWVfbmFtZTpmdW5jdGlvbigpe3ZhciB0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbTtyZXR1cm4gdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFtUb2tlbnMuSURFTlQsVG9rZW5zLlNUUklOR10pLFN5bnRheFVuaXQuZnJvbVRva2VuKHRva2VuU3RyZWFtLnRva2VuKCkpfSxfa2V5ZnJhbWVfcnVsZTpmdW5jdGlvbigpe3ZhciBrZXlMaXN0PSh0aGlzLl90b2tlblN0cmVhbSx0aGlzLl9rZXlfbGlzdCgpKTt0aGlzLmZpcmUoe3R5cGU6InN0YXJ0a2V5ZnJhbWVydWxlIixrZXlzOmtleUxpc3QsbGluZTprZXlMaXN0WzBdLmxpbmUsY29sOmtleUxpc3RbMF0uY29sfSksdGhpcy5fcmVhZERlY2xhcmF0aW9ucyghMCksdGhpcy5maXJlKHt0eXBlOiJlbmRrZXlmcmFtZXJ1bGUiLGtleXM6a2V5TGlzdCxsaW5lOmtleUxpc3RbMF0ubGluZSxjb2w6a2V5TGlzdFswXS5jb2x9KX0sX2tleV9saXN0OmZ1bmN0aW9uKCl7dmFyIHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtLGtleUxpc3Q9W107Zm9yKGtleUxpc3QucHVzaCh0aGlzLl9rZXkoKSksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTt0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuQ09NTUEpOyl0aGlzLl9yZWFkV2hpdGVzcGFjZSgpLGtleUxpc3QucHVzaCh0aGlzLl9rZXkoKSksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTtyZXR1cm4ga2V5TGlzdH0sX2tleTpmdW5jdGlvbigpe3ZhciB0b2tlbix0b2tlblN0cmVhbT10aGlzLl90b2tlblN0cmVhbTtpZih0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuUEVSQ0VOVEFHRSkpcmV0dXJuIFN5bnRheFVuaXQuZnJvbVRva2VuKHRva2VuU3RyZWFtLnRva2VuKCkpO2lmKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JREVOVCkpe2lmKHRva2VuPXRva2VuU3RyZWFtLnRva2VuKCksL2Zyb218dG8vaS50ZXN0KHRva2VuLnZhbHVlKSlyZXR1cm4gU3ludGF4VW5pdC5mcm9tVG9rZW4odG9rZW4pO3Rva2VuU3RyZWFtLnVuZ2V0KCl9dGhpcy5fdW5leHBlY3RlZFRva2VuKHRva2VuU3RyZWFtLkxUKDEpKX0sX3NraXBDcnVmdDpmdW5jdGlvbigpe2Zvcig7dGhpcy5fdG9rZW5TdHJlYW0ubWF0Y2goW1Rva2Vucy5TLFRva2Vucy5DRE8sVG9rZW5zLkNEQ10pOyk7fSxfcmVhZERlY2xhcmF0aW9uczpmdW5jdGlvbihjaGVja1N0YXJ0LHJlYWRNYXJnaW5zKXt2YXIgdHQsdG9rZW5TdHJlYW09dGhpcy5fdG9rZW5TdHJlYW07dGhpcy5fcmVhZFdoaXRlc3BhY2UoKSxjaGVja1N0YXJ0JiZ0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLkxCUkFDRSksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTt0cnl7Zm9yKDs7KXtpZih0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuU0VNSUNPTE9OKXx8cmVhZE1hcmdpbnMmJnRoaXMuX21hcmdpbigpKTtlbHNle2lmKCF0aGlzLl9kZWNsYXJhdGlvbigpKWJyZWFrO2lmKCF0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuU0VNSUNPTE9OKSlicmVha310aGlzLl9yZWFkV2hpdGVzcGFjZSgpfXRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuUkJSQUNFKSx0aGlzLl9yZWFkV2hpdGVzcGFjZSgpfWNhdGNoKGV4KXtpZighKGV4IGluc3RhbmNlb2YgU3ludGF4RXJyb3IpfHx0aGlzLm9wdGlvbnMuc3RyaWN0KXRocm93IGV4O2lmKHRoaXMuZmlyZSh7dHlwZToiZXJyb3IiLGVycm9yOmV4LG1lc3NhZ2U6ZXgubWVzc2FnZSxsaW5lOmV4LmxpbmUsY29sOmV4LmNvbH0pLHR0PXRva2VuU3RyZWFtLmFkdmFuY2UoW1Rva2Vucy5TRU1JQ09MT04sVG9rZW5zLlJCUkFDRV0pLHR0PT1Ub2tlbnMuU0VNSUNPTE9OKXRoaXMuX3JlYWREZWNsYXJhdGlvbnMoITEscmVhZE1hcmdpbnMpO2Vsc2UgaWYodHQhPVRva2Vucy5SQlJBQ0UpdGhyb3cgZXh9fSxfcmVhZFdoaXRlc3BhY2U6ZnVuY3Rpb24oKXtmb3IodmFyIHRva2VuU3RyZWFtPXRoaXMuX3Rva2VuU3RyZWFtLHdzPSIiO3Rva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5TKTspd3MrPXRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7cmV0dXJuIHdzfSxfdW5leHBlY3RlZFRva2VuOmZ1bmN0aW9uKHRva2VuKXt0aHJvdyBuZXcgU3ludGF4RXJyb3IoIlVuZXhwZWN0ZWQgdG9rZW4gXCciK3Rva2VuLnZhbHVlKyJcJyBhdCBsaW5lICIrdG9rZW4uc3RhcnRMaW5lKyIsIGNvbCAiK3Rva2VuLnN0YXJ0Q29sKyIuIix0b2tlbi5zdGFydExpbmUsdG9rZW4uc3RhcnRDb2wpfSxfdmVyaWZ5RW5kOmZ1bmN0aW9uKCl7dGhpcy5fdG9rZW5TdHJlYW0uTEEoMSkhPVRva2Vucy5FT0YmJnRoaXMuX3VuZXhwZWN0ZWRUb2tlbih0aGlzLl90b2tlblN0cmVhbS5MVCgxKSl9LF92YWxpZGF0ZVByb3BlcnR5OmZ1bmN0aW9uKHByb3BlcnR5LHZhbHVlKXtWYWxpZGF0aW9uLnZhbGlkYXRlKHByb3BlcnR5LHZhbHVlKX0scGFyc2U6ZnVuY3Rpb24oaW5wdXQpe3RoaXMuX3Rva2VuU3RyZWFtPW5ldyBUb2tlblN0cmVhbShpbnB1dCxUb2tlbnMpLHRoaXMuX3N0eWxlc2hlZXQoKX0scGFyc2VTdHlsZVNoZWV0OmZ1bmN0aW9uKGlucHV0KXtyZXR1cm4gdGhpcy5wYXJzZShpbnB1dCl9LHBhcnNlTWVkaWFRdWVyeTpmdW5jdGlvbihpbnB1dCl7dGhpcy5fdG9rZW5TdHJlYW09bmV3IFRva2VuU3RyZWFtKGlucHV0LFRva2Vucyk7dmFyIHJlc3VsdD10aGlzLl9tZWRpYV9xdWVyeSgpO3JldHVybiB0aGlzLl92ZXJpZnlFbmQoKSxyZXN1bHR9LHBhcnNlUHJvcGVydHlWYWx1ZTpmdW5jdGlvbihpbnB1dCl7dGhpcy5fdG9rZW5TdHJlYW09bmV3IFRva2VuU3RyZWFtKGlucHV0LFRva2VucyksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTt2YXIgcmVzdWx0PXRoaXMuX2V4cHIoKTtyZXR1cm4gdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0aGlzLl92ZXJpZnlFbmQoKSxyZXN1bHR9LHBhcnNlUnVsZTpmdW5jdGlvbihpbnB1dCl7dGhpcy5fdG9rZW5TdHJlYW09bmV3IFRva2VuU3RyZWFtKGlucHV0LFRva2VucyksdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTt2YXIgcmVzdWx0PXRoaXMuX3J1bGVzZXQoKTtyZXR1cm4gdGhpcy5fcmVhZFdoaXRlc3BhY2UoKSx0aGlzLl92ZXJpZnlFbmQoKSxyZXN1bHR9LHBhcnNlU2VsZWN0b3I6ZnVuY3Rpb24oaW5wdXQpe3RoaXMuX3Rva2VuU3RyZWFtPW5ldyBUb2tlblN0cmVhbShpbnB1dCxUb2tlbnMpLHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7dmFyIHJlc3VsdD10aGlzLl9zZWxlY3RvcigpO3JldHVybiB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpLHRoaXMuX3ZlcmlmeUVuZCgpLHJlc3VsdH0scGFyc2VTdHlsZUF0dHJpYnV0ZTpmdW5jdGlvbihpbnB1dCl7aW5wdXQrPSJ9Iix0aGlzLl90b2tlblN0cmVhbT1uZXcgVG9rZW5TdHJlYW0oaW5wdXQsVG9rZW5zKSx0aGlzLl9yZWFkRGVjbGFyYXRpb25zKCl9fTtmb3IocHJvcCBpbiBhZGRpdGlvbnMpYWRkaXRpb25zLmhhc093blByb3BlcnR5KHByb3ApJiYocHJvdG9bcHJvcF09YWRkaXRpb25zW3Byb3BdKTtyZXR1cm4gcHJvdG99KCk7dmFyIFByb3BlcnRpZXM9eyJhbGlnbi1pdGVtcyI6ImZsZXgtc3RhcnQgfCBmbGV4LWVuZCB8IGNlbnRlciB8IGJhc2VsaW5lIHwgc3RyZXRjaCIsImFsaWduLWNvbnRlbnQiOiJmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBjZW50ZXIgfCBzcGFjZS1iZXR3ZWVuIHwgc3BhY2UtYXJvdW5kIHwgc3RyZXRjaCIsImFsaWduLXNlbGYiOiJhdXRvIHwgZmxleC1zdGFydCB8IGZsZXgtZW5kIHwgY2VudGVyIHwgYmFzZWxpbmUgfCBzdHJldGNoIiwiLXdlYmtpdC1hbGlnbi1pdGVtcyI6ImZsZXgtc3RhcnQgfCBmbGV4LWVuZCB8IGNlbnRlciB8IGJhc2VsaW5lIHwgc3RyZXRjaCIsIi13ZWJraXQtYWxpZ24tY29udGVudCI6ImZsZXgtc3RhcnQgfCBmbGV4LWVuZCB8IGNlbnRlciB8IHNwYWNlLWJldHdlZW4gfCBzcGFjZS1hcm91bmQgfCBzdHJldGNoIiwiLXdlYmtpdC1hbGlnbi1zZWxmIjoiYXV0byB8IGZsZXgtc3RhcnQgfCBmbGV4LWVuZCB8IGNlbnRlciB8IGJhc2VsaW5lIHwgc3RyZXRjaCIsImFsaWdubWVudC1hZGp1c3QiOiJhdXRvIHwgYmFzZWxpbmUgfCBiZWZvcmUtZWRnZSB8IHRleHQtYmVmb3JlLWVkZ2UgfCBtaWRkbGUgfCBjZW50cmFsIHwgYWZ0ZXItZWRnZSB8IHRleHQtYWZ0ZXItZWRnZSB8IGlkZW9ncmFwaGljIHwgYWxwaGFiZXRpYyB8IGhhbmdpbmcgfCBtYXRoZW1hdGljYWwgfCA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiIsImFsaWdubWVudC1iYXNlbGluZSI6ImJhc2VsaW5lIHwgdXNlLXNjcmlwdCB8IGJlZm9yZS1lZGdlIHwgdGV4dC1iZWZvcmUtZWRnZSB8IGFmdGVyLWVkZ2UgfCB0ZXh0LWFmdGVyLWVkZ2UgfCBjZW50cmFsIHwgbWlkZGxlIHwgaWRlb2dyYXBoaWMgfCBhbHBoYWJldGljIHwgaGFuZ2luZyB8IG1hdGhlbWF0aWNhbCIsYW5pbWF0aW9uOjEsImFuaW1hdGlvbi1kZWxheSI6e211bHRpOiI8dGltZT4iLGNvbW1hOiEwfSwiYW5pbWF0aW9uLWRpcmVjdGlvbiI6e211bHRpOiJub3JtYWwgfCByZXZlcnNlIHwgYWx0ZXJuYXRlIHwgYWx0ZXJuYXRlLXJldmVyc2UiLGNvbW1hOiEwfSwiYW5pbWF0aW9uLWR1cmF0aW9uIjp7bXVsdGk6Ijx0aW1lPiIsY29tbWE6ITB9LCJhbmltYXRpb24tZmlsbC1tb2RlIjp7bXVsdGk6Im5vbmUgfCBmb3J3YXJkcyB8IGJhY2t3YXJkcyB8IGJvdGgiLGNvbW1hOiEwfSwiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCI6e211bHRpOiI8bnVtYmVyPiB8IGluZmluaXRlIixjb21tYTohMH0sImFuaW1hdGlvbi1uYW1lIjp7bXVsdGk6Im5vbmUgfCA8aWRlbnQ+Iixjb21tYTohMH0sImFuaW1hdGlvbi1wbGF5LXN0YXRlIjp7bXVsdGk6InJ1bm5pbmcgfCBwYXVzZWQiLGNvbW1hOiEwfSwiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiI6MSwiLW1vei1hbmltYXRpb24tZGVsYXkiOnttdWx0aToiPHRpbWU+Iixjb21tYTohMH0sIi1tb3otYW5pbWF0aW9uLWRpcmVjdGlvbiI6e211bHRpOiJub3JtYWwgfCByZXZlcnNlIHwgYWx0ZXJuYXRlIHwgYWx0ZXJuYXRlLXJldmVyc2UiLGNvbW1hOiEwfSwiLW1vei1hbmltYXRpb24tZHVyYXRpb24iOnttdWx0aToiPHRpbWU+Iixjb21tYTohMH0sIi1tb3otYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCI6e211bHRpOiI8bnVtYmVyPiB8IGluZmluaXRlIixjb21tYTohMH0sIi1tb3otYW5pbWF0aW9uLW5hbWUiOnttdWx0aToibm9uZSB8IDxpZGVudD4iLGNvbW1hOiEwfSwiLW1vei1hbmltYXRpb24tcGxheS1zdGF0ZSI6e211bHRpOiJydW5uaW5nIHwgcGF1c2VkIixjb21tYTohMH0sIi1tcy1hbmltYXRpb24tZGVsYXkiOnttdWx0aToiPHRpbWU+Iixjb21tYTohMH0sIi1tcy1hbmltYXRpb24tZGlyZWN0aW9uIjp7bXVsdGk6Im5vcm1hbCB8IHJldmVyc2UgfCBhbHRlcm5hdGUgfCBhbHRlcm5hdGUtcmV2ZXJzZSIsY29tbWE6ITB9LCItbXMtYW5pbWF0aW9uLWR1cmF0aW9uIjp7bXVsdGk6Ijx0aW1lPiIsY29tbWE6ITB9LCItbXMtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCI6e211bHRpOiI8bnVtYmVyPiB8IGluZmluaXRlIixjb21tYTohMH0sIi1tcy1hbmltYXRpb24tbmFtZSI6e211bHRpOiJub25lIHwgPGlkZW50PiIsY29tbWE6ITB9LCItbXMtYW5pbWF0aW9uLXBsYXktc3RhdGUiOnttdWx0aToicnVubmluZyB8IHBhdXNlZCIsY29tbWE6ITB9LCItd2Via2l0LWFuaW1hdGlvbi1kZWxheSI6e211bHRpOiI8dGltZT4iLGNvbW1hOiEwfSwiLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uIjp7bXVsdGk6Im5vcm1hbCB8IHJldmVyc2UgfCBhbHRlcm5hdGUgfCBhbHRlcm5hdGUtcmV2ZXJzZSIsY29tbWE6ITB9LCItd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbiI6e211bHRpOiI8dGltZT4iLGNvbW1hOiEwfSwiLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlIjp7bXVsdGk6Im5vbmUgfCBmb3J3YXJkcyB8IGJhY2t3YXJkcyB8IGJvdGgiLGNvbW1hOiEwfSwiLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50Ijp7bXVsdGk6IjxudW1iZXI+IHwgaW5maW5pdGUiLGNvbW1hOiEwfSwiLXdlYmtpdC1hbmltYXRpb24tbmFtZSI6e211bHRpOiJub25lIHwgPGlkZW50PiIsY29tbWE6ITB9LCItd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlIjp7bXVsdGk6InJ1bm5pbmcgfCBwYXVzZWQiLGNvbW1hOiEwfSwiLW8tYW5pbWF0aW9uLWRlbGF5Ijp7bXVsdGk6Ijx0aW1lPiIsY29tbWE6ITB9LCItby1hbmltYXRpb24tZGlyZWN0aW9uIjp7bXVsdGk6Im5vcm1hbCB8IHJldmVyc2UgfCBhbHRlcm5hdGUgfCBhbHRlcm5hdGUtcmV2ZXJzZSIsY29tbWE6ITB9LCItby1hbmltYXRpb24tZHVyYXRpb24iOnttdWx0aToiPHRpbWU+Iixjb21tYTohMH0sIi1vLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQiOnttdWx0aToiPG51bWJlcj4gfCBpbmZpbml0ZSIsY29tbWE6ITB9LCItby1hbmltYXRpb24tbmFtZSI6e211bHRpOiJub25lIHwgPGlkZW50PiIsY29tbWE6ITB9LCItby1hbmltYXRpb24tcGxheS1zdGF0ZSI6e211bHRpOiJydW5uaW5nIHwgcGF1c2VkIixjb21tYTohMH0sYXBwZWFyYW5jZToiaWNvbiB8IHdpbmRvdyB8IGRlc2t0b3AgfCB3b3Jrc3BhY2UgfCBkb2N1bWVudCB8IHRvb2x0aXAgfCBkaWFsb2cgfCBidXR0b24gfCBwdXNoLWJ1dHRvbiB8IGh5cGVybGluayB8IHJhZGlvLWJ1dHRvbiB8IGNoZWNrYm94IHwgbWVudS1pdGVtIHwgdGFiIHwgbWVudSB8IG1lbnViYXIgfCBwdWxsLWRvd24tbWVudSB8IHBvcC11cC1tZW51IHwgbGlzdC1tZW51IHwgcmFkaW8tZ3JvdXAgfCBjaGVja2JveC1ncm91cCB8IG91dGxpbmUtdHJlZSB8IHJhbmdlIHwgZmllbGQgfCBjb21iby1ib3ggfCBzaWduYXR1cmUgfCBwYXNzd29yZCB8IG5vcm1hbCB8IG5vbmUgfCBpbmhlcml0IixhemltdXRoOmZ1bmN0aW9uKGV4cHJlc3Npb24pe3ZhciBwYXJ0LHNpbXBsZT0iPGFuZ2xlPiB8IGxlZnR3YXJkcyB8IHJpZ2h0d2FyZHMgfCBpbmhlcml0IixkaXJlY3Rpb249ImxlZnQtc2lkZSB8IGZhci1sZWZ0IHwgbGVmdCB8IGNlbnRlci1sZWZ0IHwgY2VudGVyIHwgY2VudGVyLXJpZ2h0IHwgcmlnaHQgfCBmYXItcmlnaHQgfCByaWdodC1zaWRlIixiZWhpbmQ9ITEsdmFsaWQ9ITE7aWYoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sc2ltcGxlKXx8KFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCJiZWhpbmQiKSYmKGJlaGluZD0hMCx2YWxpZD0hMCksVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sZGlyZWN0aW9uKSYmKHZhbGlkPSEwLGJlaGluZHx8VmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sImJlaGluZCIpKSksZXhwcmVzc2lvbi5oYXNOZXh0KCkpdGhyb3cgcGFydD1leHByZXNzaW9uLm5leHQoKSx2YWxpZD9uZXcgVmFsaWRhdGlvbkVycm9yKCJFeHBlY3RlZCBlbmQgb2YgdmFsdWUgYnV0IGZvdW5kIFwnIitwYXJ0KyJcJy4iLHBhcnQubGluZSxwYXJ0LmNvbCk6bmV3IFZhbGlkYXRpb25FcnJvcigiRXhwZWN0ZWQgKDxcJ2F6aW11dGhcJz4pIGJ1dCBmb3VuZCBcJyIrcGFydCsiXCcuIixwYXJ0LmxpbmUscGFydC5jb2wpfSwiYmFja2ZhY2UtdmlzaWJpbGl0eSI6InZpc2libGUgfCBoaWRkZW4iLGJhY2tncm91bmQ6MSwiYmFja2dyb3VuZC1hdHRhY2htZW50Ijp7bXVsdGk6IjxhdHRhY2htZW50PiIsY29tbWE6ITB9LCJiYWNrZ3JvdW5kLWNsaXAiOnttdWx0aToiPGJveD4iLGNvbW1hOiEwfSwiYmFja2dyb3VuZC1jb2xvciI6Ijxjb2xvcj4gfCBpbmhlcml0IiwiYmFja2dyb3VuZC1pbWFnZSI6e211bHRpOiI8YmctaW1hZ2U+Iixjb21tYTohMH0sImJhY2tncm91bmQtb3JpZ2luIjp7bXVsdGk6Ijxib3g+Iixjb21tYTohMH0sImJhY2tncm91bmQtcG9zaXRpb24iOnttdWx0aToiPGJnLXBvc2l0aW9uPiIsY29tbWE6ITB9LCJiYWNrZ3JvdW5kLXJlcGVhdCI6e211bHRpOiI8cmVwZWF0LXN0eWxlPiJ9LCJiYWNrZ3JvdW5kLXNpemUiOnttdWx0aToiPGJnLXNpemU+Iixjb21tYTohMH0sImJhc2VsaW5lLXNoaWZ0IjoiYmFzZWxpbmUgfCBzdWIgfCBzdXBlciB8IDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IixiZWhhdmlvcjoxLGJpbmRpbmc6MSxibGVlZDoiPGxlbmd0aD4iLCJib29rbWFyay1sYWJlbCI6Ijxjb250ZW50PiB8IDxhdHRyPiB8IDxzdHJpbmc+IiwiYm9va21hcmstbGV2ZWwiOiJub25lIHwgPGludGVnZXI+IiwiYm9va21hcmstc3RhdGUiOiJvcGVuIHwgY2xvc2VkIiwiYm9va21hcmstdGFyZ2V0Ijoibm9uZSB8IDx1cmk+IHwgPGF0dHI+Iixib3JkZXI6Ijxib3JkZXItd2lkdGg+IHx8IDxib3JkZXItc3R5bGU+IHx8IDxjb2xvcj4iLCJib3JkZXItYm90dG9tIjoiPGJvcmRlci13aWR0aD4gfHwgPGJvcmRlci1zdHlsZT4gfHwgPGNvbG9yPiIsImJvcmRlci1ib3R0b20tY29sb3IiOiI8Y29sb3I+IHwgaW5oZXJpdCIsImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiI8eC1vbmUtcmFkaXVzPiIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjoiPHgtb25lLXJhZGl1cz4iLCJib3JkZXItYm90dG9tLXN0eWxlIjoiPGJvcmRlci1zdHlsZT4iLCJib3JkZXItYm90dG9tLXdpZHRoIjoiPGJvcmRlci13aWR0aD4iLCJib3JkZXItY29sbGFwc2UiOiJjb2xsYXBzZSB8IHNlcGFyYXRlIHwgaW5oZXJpdCIsImJvcmRlci1jb2xvciI6e211bHRpOiI8Y29sb3I+IHwgaW5oZXJpdCIsbWF4OjR9LCJib3JkZXItaW1hZ2UiOjEsImJvcmRlci1pbWFnZS1vdXRzZXQiOnttdWx0aToiPGxlbmd0aD4gfCA8bnVtYmVyPiIsbWF4OjR9LCJib3JkZXItaW1hZ2UtcmVwZWF0Ijp7bXVsdGk6InN0cmV0Y2ggfCByZXBlYXQgfCByb3VuZCIsbWF4OjJ9LCJib3JkZXItaW1hZ2Utc2xpY2UiOmZ1bmN0aW9uKGV4cHJlc3Npb24pe3ZhciBwYXJ0LHZhbGlkPSExLG51bWVyaWM9IjxudW1iZXI+IHwgPHBlcmNlbnRhZ2U+IixmaWxsPSExLGNvdW50PTAsbWF4PTQ7Zm9yKFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCJmaWxsIikmJihmaWxsPSEwLHZhbGlkPSEwKTtleHByZXNzaW9uLmhhc05leHQoKSYmbWF4PmNvdW50JiYodmFsaWQ9VmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sbnVtZXJpYykpOyljb3VudCsrO2lmKGZpbGw/dmFsaWQ9ITA6VmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sImZpbGwiKSxleHByZXNzaW9uLmhhc05leHQoKSl0aHJvdyBwYXJ0PWV4cHJlc3Npb24ubmV4dCgpLHZhbGlkP25ldyBWYWxpZGF0aW9uRXJyb3IoIkV4cGVjdGVkIGVuZCBvZiB2YWx1ZSBidXQgZm91bmQgXCciK3BhcnQrIlwnLiIscGFydC5saW5lLHBhcnQuY29sKTpuZXcgVmFsaWRhdGlvbkVycm9yKCJFeHBlY3RlZCAoWzxudW1iZXI+IHwgPHBlcmNlbnRhZ2U+XXsxLDR9ICYmIGZpbGw/KSBidXQgZm91bmQgXCciK3BhcnQrIlwnLiIscGFydC5saW5lLHBhcnQuY29sKX0sImJvcmRlci1pbWFnZS1zb3VyY2UiOiI8aW1hZ2U+IHwgbm9uZSIsImJvcmRlci1pbWFnZS13aWR0aCI6e211bHRpOiI8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IDxudW1iZXI+IHwgYXV0byIsbWF4OjR9LCJib3JkZXItbGVmdCI6Ijxib3JkZXItd2lkdGg+IHx8IDxib3JkZXItc3R5bGU+IHx8IDxjb2xvcj4iLCJib3JkZXItbGVmdC1jb2xvciI6Ijxjb2xvcj4gfCBpbmhlcml0IiwiYm9yZGVyLWxlZnQtc3R5bGUiOiI8Ym9yZGVyLXN0eWxlPiIsImJvcmRlci1sZWZ0LXdpZHRoIjoiPGJvcmRlci13aWR0aD4iLCJib3JkZXItcmFkaXVzIjpmdW5jdGlvbihleHByZXNzaW9uKXtmb3IodmFyIHBhcnQsdmFsaWQ9ITEsc2ltcGxlPSI8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGluaGVyaXQiLHNsYXNoPSExLGNvdW50PTAsbWF4PTg7ZXhwcmVzc2lvbi5oYXNOZXh0KCkmJm1heD5jb3VudDspe2lmKHZhbGlkPVZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLHNpbXBsZSksIXZhbGlkKXtpZighKCIvIj09ZXhwcmVzc2lvbi5wZWVrKCkmJmNvdW50PjApfHxzbGFzaClicmVhaztzbGFzaD0hMCxtYXg9Y291bnQrNSxleHByZXNzaW9uLm5leHQoKX1jb3VudCsrfWlmKGV4cHJlc3Npb24uaGFzTmV4dCgpKXRocm93IHBhcnQ9ZXhwcmVzc2lvbi5uZXh0KCksdmFsaWQ/bmV3IFZhbGlkYXRpb25FcnJvcigiRXhwZWN0ZWQgZW5kIG9mIHZhbHVlIGJ1dCBmb3VuZCBcJyIrcGFydCsiXCcuIixwYXJ0LmxpbmUscGFydC5jb2wpOm5ldyBWYWxpZGF0aW9uRXJyb3IoIkV4cGVjdGVkICg8XCdib3JkZXItcmFkaXVzXCc+KSBidXQgZm91bmQgXCciK3BhcnQrIlwnLiIscGFydC5saW5lLHBhcnQuY29sKX0sImJvcmRlci1yaWdodCI6Ijxib3JkZXItd2lkdGg+IHx8IDxib3JkZXItc3R5bGU+IHx8IDxjb2xvcj4iLCJib3JkZXItcmlnaHQtY29sb3IiOiI8Y29sb3I+IHwgaW5oZXJpdCIsImJvcmRlci1yaWdodC1zdHlsZSI6Ijxib3JkZXItc3R5bGU+IiwiYm9yZGVyLXJpZ2h0LXdpZHRoIjoiPGJvcmRlci13aWR0aD4iLCJib3JkZXItc3BhY2luZyI6e211bHRpOiI8bGVuZ3RoPiB8IGluaGVyaXQiLG1heDoyfSwiYm9yZGVyLXN0eWxlIjp7bXVsdGk6Ijxib3JkZXItc3R5bGU+IixtYXg6NH0sImJvcmRlci10b3AiOiI8Ym9yZGVyLXdpZHRoPiB8fCA8Ym9yZGVyLXN0eWxlPiB8fCA8Y29sb3I+IiwiYm9yZGVyLXRvcC1jb2xvciI6Ijxjb2xvcj4gfCBpbmhlcml0IiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyI6Ijx4LW9uZS1yYWRpdXM+IiwiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiOiI8eC1vbmUtcmFkaXVzPiIsImJvcmRlci10b3Atc3R5bGUiOiI8Ym9yZGVyLXN0eWxlPiIsImJvcmRlci10b3Atd2lkdGgiOiI8Ym9yZGVyLXdpZHRoPiIsImJvcmRlci13aWR0aCI6e211bHRpOiI8Ym9yZGVyLXdpZHRoPiIsbWF4OjR9LGJvdHRvbToiPG1hcmdpbi13aWR0aD4gfCBpbmhlcml0IiwiLW1vei1ib3gtYWxpZ24iOiJzdGFydCB8IGVuZCB8IGNlbnRlciB8IGJhc2VsaW5lIHwgc3RyZXRjaCIsIi1tb3otYm94LWRlY29yYXRpb24tYnJlYWsiOiJzbGljZSB8Y2xvbmUiLCItbW96LWJveC1kaXJlY3Rpb24iOiJub3JtYWwgfCByZXZlcnNlIHwgaW5oZXJpdCIsIi1tb3otYm94LWZsZXgiOiI8bnVtYmVyPiIsIi1tb3otYm94LWZsZXgtZ3JvdXAiOiI8aW50ZWdlcj4iLCItbW96LWJveC1saW5lcyI6InNpbmdsZSB8IG11bHRpcGxlIiwiLW1vei1ib3gtb3JkaW5hbC1ncm91cCI6IjxpbnRlZ2VyPiIsIi1tb3otYm94LW9yaWVudCI6Imhvcml6b250YWwgfCB2ZXJ0aWNhbCB8IGlubGluZS1heGlzIHwgYmxvY2stYXhpcyB8IGluaGVyaXQiLCItbW96LWJveC1wYWNrIjoic3RhcnQgfCBlbmQgfCBjZW50ZXIgfCBqdXN0aWZ5IiwiLXdlYmtpdC1ib3gtYWxpZ24iOiJzdGFydCB8IGVuZCB8IGNlbnRlciB8IGJhc2VsaW5lIHwgc3RyZXRjaCIsIi13ZWJraXQtYm94LWRlY29yYXRpb24tYnJlYWsiOiJzbGljZSB8Y2xvbmUiLCItd2Via2l0LWJveC1kaXJlY3Rpb24iOiJub3JtYWwgfCByZXZlcnNlIHwgaW5oZXJpdCIsIi13ZWJraXQtYm94LWZsZXgiOiI8bnVtYmVyPiIsIi13ZWJraXQtYm94LWZsZXgtZ3JvdXAiOiI8aW50ZWdlcj4iLCItd2Via2l0LWJveC1saW5lcyI6InNpbmdsZSB8IG11bHRpcGxlIiwiLXdlYmtpdC1ib3gtb3JkaW5hbC1ncm91cCI6IjxpbnRlZ2VyPiIsIi13ZWJraXQtYm94LW9yaWVudCI6Imhvcml6b250YWwgfCB2ZXJ0aWNhbCB8IGlubGluZS1heGlzIHwgYmxvY2stYXhpcyB8IGluaGVyaXQiLCItd2Via2l0LWJveC1wYWNrIjoic3RhcnQgfCBlbmQgfCBjZW50ZXIgfCBqdXN0aWZ5IiwiYm94LXNoYWRvdyI6ZnVuY3Rpb24oZXhwcmVzc2lvbil7dmFyIHBhcnQ7aWYoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIm5vbmUiKSl7aWYoZXhwcmVzc2lvbi5oYXNOZXh0KCkpdGhyb3cgcGFydD1leHByZXNzaW9uLm5leHQoKSxuZXcgVmFsaWRhdGlvbkVycm9yKCJFeHBlY3RlZCBlbmQgb2YgdmFsdWUgYnV0IGZvdW5kIFwnIitwYXJ0KyJcJy4iLHBhcnQubGluZSxwYXJ0LmNvbCl9ZWxzZSBWYWxpZGF0aW9uLm11bHRpUHJvcGVydHkoIjxzaGFkb3c+IixleHByZXNzaW9uLCEwLDEvMCl9LCJib3gtc2l6aW5nIjoiY29udGVudC1ib3ggfCBib3JkZXItYm94IHwgaW5oZXJpdCIsImJyZWFrLWFmdGVyIjoiYXV0byB8IGFsd2F5cyB8IGF2b2lkIHwgbGVmdCB8IHJpZ2h0IHwgcGFnZSB8IGNvbHVtbiB8IGF2b2lkLXBhZ2UgfCBhdm9pZC1jb2x1bW4iLCJicmVhay1iZWZvcmUiOiJhdXRvIHwgYWx3YXlzIHwgYXZvaWQgfCBsZWZ0IHwgcmlnaHQgfCBwYWdlIHwgY29sdW1uIHwgYXZvaWQtcGFnZSB8IGF2b2lkLWNvbHVtbiIsImJyZWFrLWluc2lkZSI6ImF1dG8gfCBhdm9pZCB8IGF2b2lkLXBhZ2UgfCBhdm9pZC1jb2x1bW4iLCJjYXB0aW9uLXNpZGUiOiJ0b3AgfCBib3R0b20gfCBpbmhlcml0IixjbGVhcjoibm9uZSB8IHJpZ2h0IHwgbGVmdCB8IGJvdGggfCBpbmhlcml0IixjbGlwOjEsY29sb3I6Ijxjb2xvcj4gfCBpbmhlcml0IiwiY29sb3ItcHJvZmlsZSI6MSwiY29sdW1uLWNvdW50IjoiPGludGVnZXI+IHwgYXV0byIsImNvbHVtbi1maWxsIjoiYXV0byB8IGJhbGFuY2UiLCJjb2x1bW4tZ2FwIjoiPGxlbmd0aD4gfCBub3JtYWwiLCJjb2x1bW4tcnVsZSI6Ijxib3JkZXItd2lkdGg+IHx8IDxib3JkZXItc3R5bGU+IHx8IDxjb2xvcj4iLCJjb2x1bW4tcnVsZS1jb2xvciI6Ijxjb2xvcj4iLCJjb2x1bW4tcnVsZS1zdHlsZSI6Ijxib3JkZXItc3R5bGU+IiwiY29sdW1uLXJ1bGUtd2lkdGgiOiI8Ym9yZGVyLXdpZHRoPiIsImNvbHVtbi1zcGFuIjoibm9uZSB8IGFsbCIsImNvbHVtbi13aWR0aCI6IjxsZW5ndGg+IHwgYXV0byIsY29sdW1uczoxLGNvbnRlbnQ6MSwiY291bnRlci1pbmNyZW1lbnQiOjEsImNvdW50ZXItcmVzZXQiOjEsY3JvcDoiPHNoYXBlPiB8IGF1dG8iLGN1ZToiY3VlLWFmdGVyIHwgY3VlLWJlZm9yZSB8IGluaGVyaXQiLCJjdWUtYWZ0ZXIiOjEsImN1ZS1iZWZvcmUiOjEsY3Vyc29yOjEsZGlyZWN0aW9uOiJsdHIgfCBydGwgfCBpbmhlcml0IixkaXNwbGF5OiJpbmxpbmUgfCBibG9jayB8IGxpc3QtaXRlbSB8IGlubGluZS1ibG9jayB8IHRhYmxlIHwgaW5saW5lLXRhYmxlIHwgdGFibGUtcm93LWdyb3VwIHwgdGFibGUtaGVhZGVyLWdyb3VwIHwgdGFibGUtZm9vdGVyLWdyb3VwIHwgdGFibGUtcm93IHwgdGFibGUtY29sdW1uLWdyb3VwIHwgdGFibGUtY29sdW1uIHwgdGFibGUtY2VsbCB8IHRhYmxlLWNhcHRpb24gfCBncmlkIHwgaW5saW5lLWdyaWQgfCBub25lIHwgaW5oZXJpdCB8IC1tb3otYm94IHwgLW1vei1pbmxpbmUtYmxvY2sgfCAtbW96LWlubGluZS1ib3ggfCAtbW96LWlubGluZS1ncmlkIHwgLW1vei1pbmxpbmUtc3RhY2sgfCAtbW96LWlubGluZS10YWJsZSB8IC1tb3otZ3JpZCB8IC1tb3otZ3JpZC1ncm91cCB8IC1tb3otZ3JpZC1saW5lIHwgLW1vei1ncm91cGJveCB8IC1tb3otZGVjayB8IC1tb3otcG9wdXAgfCAtbW96LXN0YWNrIHwgLW1vei1tYXJrZXIgfCAtd2Via2l0LWJveCB8IC13ZWJraXQtaW5saW5lLWJveCB8IC1tcy1mbGV4Ym94IHwgLW1zLWlubGluZS1mbGV4Ym94IHwgZmxleCB8IC13ZWJraXQtZmxleCB8IGlubGluZS1mbGV4IHwgLXdlYmtpdC1pbmxpbmUtZmxleCIsImRvbWluYW50LWJhc2VsaW5lIjoxLCJkcm9wLWluaXRpYWwtYWZ0ZXItYWRqdXN0IjoiY2VudHJhbCB8IG1pZGRsZSB8IGFmdGVyLWVkZ2UgfCB0ZXh0LWFmdGVyLWVkZ2UgfCBpZGVvZ3JhcGhpYyB8IGFscGhhYmV0aWMgfCBtYXRoZW1hdGljYWwgfCA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiIsImRyb3AtaW5pdGlhbC1hZnRlci1hbGlnbiI6ImJhc2VsaW5lIHwgdXNlLXNjcmlwdCB8IGJlZm9yZS1lZGdlIHwgdGV4dC1iZWZvcmUtZWRnZSB8IGFmdGVyLWVkZ2UgfCB0ZXh0LWFmdGVyLWVkZ2UgfCBjZW50cmFsIHwgbWlkZGxlIHwgaWRlb2dyYXBoaWMgfCBhbHBoYWJldGljIHwgaGFuZ2luZyB8IG1hdGhlbWF0aWNhbCIsImRyb3AtaW5pdGlhbC1iZWZvcmUtYWRqdXN0IjoiYmVmb3JlLWVkZ2UgfCB0ZXh0LWJlZm9yZS1lZGdlIHwgY2VudHJhbCB8IG1pZGRsZSB8IGhhbmdpbmcgfCBtYXRoZW1hdGljYWwgfCA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiIsImRyb3AtaW5pdGlhbC1iZWZvcmUtYWxpZ24iOiJjYXBzLWhlaWdodCB8IGJhc2VsaW5lIHwgdXNlLXNjcmlwdCB8IGJlZm9yZS1lZGdlIHwgdGV4dC1iZWZvcmUtZWRnZSB8IGFmdGVyLWVkZ2UgfCB0ZXh0LWFmdGVyLWVkZ2UgfCBjZW50cmFsIHwgbWlkZGxlIHwgaWRlb2dyYXBoaWMgfCBhbHBoYWJldGljIHwgaGFuZ2luZyB8IG1hdGhlbWF0aWNhbCIsImRyb3AtaW5pdGlhbC1zaXplIjoiYXV0byB8IGxpbmUgfCA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiIsImRyb3AtaW5pdGlhbC12YWx1ZSI6ImluaXRpYWwgfCA8aW50ZWdlcj4iLGVsZXZhdGlvbjoiPGFuZ2xlPiB8IGJlbG93IHwgbGV2ZWwgfCBhYm92ZSB8IGhpZ2hlciB8IGxvd2VyIHwgaW5oZXJpdCIsImVtcHR5LWNlbGxzIjoic2hvdyB8IGhpZGUgfCBpbmhlcml0IixmaWx0ZXI6MSxmaXQ6ImZpbGwgfCBoaWRkZW4gfCBtZWV0IHwgc2xpY2UiLCJmaXQtcG9zaXRpb24iOjEsZmxleDoiPGZsZXg+IiwiZmxleC1iYXNpcyI6Ijx3aWR0aD4iLCJmbGV4LWRpcmVjdGlvbiI6InJvdyB8IHJvdy1yZXZlcnNlIHwgY29sdW1uIHwgY29sdW1uLXJldmVyc2UiLCJmbGV4LWZsb3ciOiI8ZmxleC1kaXJlY3Rpb24+IHx8IDxmbGV4LXdyYXA+IiwiZmxleC1ncm93IjoiPG51bWJlcj4iLCJmbGV4LXNocmluayI6IjxudW1iZXI+IiwiZmxleC13cmFwIjoibm93cmFwIHwgd3JhcCB8IHdyYXAtcmV2ZXJzZSIsIi13ZWJraXQtZmxleCI6IjxmbGV4PiIsIi13ZWJraXQtZmxleC1iYXNpcyI6Ijx3aWR0aD4iLCItd2Via2l0LWZsZXgtZGlyZWN0aW9uIjoicm93IHwgcm93LXJldmVyc2UgfCBjb2x1bW4gfCBjb2x1bW4tcmV2ZXJzZSIsIi13ZWJraXQtZmxleC1mbG93IjoiPGZsZXgtZGlyZWN0aW9uPiB8fCA8ZmxleC13cmFwPiIsIi13ZWJraXQtZmxleC1ncm93IjoiPG51bWJlcj4iLCItd2Via2l0LWZsZXgtc2hyaW5rIjoiPG51bWJlcj4iLCItd2Via2l0LWZsZXgtd3JhcCI6Im5vd3JhcCB8IHdyYXAgfCB3cmFwLXJldmVyc2UiLCItbXMtZmxleCI6IjxmbGV4PiIsIi1tcy1mbGV4LWFsaWduIjoic3RhcnQgfCBlbmQgfCBjZW50ZXIgfCBzdHJldGNoIHwgYmFzZWxpbmUiLCItbXMtZmxleC1kaXJlY3Rpb24iOiJyb3cgfCByb3ctcmV2ZXJzZSB8IGNvbHVtbiB8IGNvbHVtbi1yZXZlcnNlIHwgaW5oZXJpdCIsIi1tcy1mbGV4LW9yZGVyIjoiPG51bWJlcj4iLCItbXMtZmxleC1wYWNrIjoic3RhcnQgfCBlbmQgfCBjZW50ZXIgfCBqdXN0aWZ5IiwiLW1zLWZsZXgtd3JhcCI6Im5vd3JhcCB8IHdyYXAgfCB3cmFwLXJldmVyc2UiLCJmbG9hdCI6ImxlZnQgfCByaWdodCB8IG5vbmUgfCBpbmhlcml0IiwiZmxvYXQtb2Zmc2V0IjoxLGZvbnQ6MSwiZm9udC1mYW1pbHkiOjEsImZvbnQtc2l6ZSI6IjxhYnNvbHV0ZS1zaXplPiB8IDxyZWxhdGl2ZS1zaXplPiB8IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdCIsImZvbnQtc2l6ZS1hZGp1c3QiOiI8bnVtYmVyPiB8IG5vbmUgfCBpbmhlcml0IiwiZm9udC1zdHJldGNoIjoibm9ybWFsIHwgdWx0cmEtY29uZGVuc2VkIHwgZXh0cmEtY29uZGVuc2VkIHwgY29uZGVuc2VkIHwgc2VtaS1jb25kZW5zZWQgfCBzZW1pLWV4cGFuZGVkIHwgZXhwYW5kZWQgfCBleHRyYS1leHBhbmRlZCB8IHVsdHJhLWV4cGFuZGVkIHwgaW5oZXJpdCIsImZvbnQtc3R5bGUiOiJub3JtYWwgfCBpdGFsaWMgfCBvYmxpcXVlIHwgaW5oZXJpdCIsImZvbnQtdmFyaWFudCI6Im5vcm1hbCB8IHNtYWxsLWNhcHMgfCBpbmhlcml0IiwiZm9udC13ZWlnaHQiOiJub3JtYWwgfCBib2xkIHwgYm9sZGVyIHwgbGlnaHRlciB8IDEwMCB8IDIwMCB8IDMwMCB8IDQwMCB8IDUwMCB8IDYwMCB8IDcwMCB8IDgwMCB8IDkwMCB8IGluaGVyaXQiLCJncmlkLWNlbGwtc3RhY2tpbmciOiJjb2x1bW5zIHwgcm93cyB8IGxheWVyIiwiZ3JpZC1jb2x1bW4iOjEsImdyaWQtY29sdW1ucyI6MSwiZ3JpZC1jb2x1bW4tYWxpZ24iOiJzdGFydCB8IGVuZCB8IGNlbnRlciB8IHN0cmV0Y2giLCJncmlkLWNvbHVtbi1zaXppbmciOjEsImdyaWQtY29sdW1uLXNwYW4iOiI8aW50ZWdlcj4iLCJncmlkLWZsb3ciOiJub25lIHwgcm93cyB8IGNvbHVtbnMiLCJncmlkLWxheWVyIjoiPGludGVnZXI+IiwiZ3JpZC1yb3ciOjEsImdyaWQtcm93cyI6MSwiZ3JpZC1yb3ctYWxpZ24iOiJzdGFydCB8IGVuZCB8IGNlbnRlciB8IHN0cmV0Y2giLCJncmlkLXJvdy1zcGFuIjoiPGludGVnZXI+IiwiZ3JpZC1yb3ctc2l6aW5nIjoxLCJoYW5naW5nLXB1bmN0dWF0aW9uIjoxLGhlaWdodDoiPG1hcmdpbi13aWR0aD4gfCA8Y29udGVudC1zaXppbmc+IHwgaW5oZXJpdCIsImh5cGhlbmF0ZS1hZnRlciI6IjxpbnRlZ2VyPiB8IGF1dG8iLCJoeXBoZW5hdGUtYmVmb3JlIjoiPGludGVnZXI+IHwgYXV0byIsImh5cGhlbmF0ZS1jaGFyYWN0ZXIiOiI8c3RyaW5nPiB8IGF1dG8iLCJoeXBoZW5hdGUtbGluZXMiOiJuby1saW1pdCB8IDxpbnRlZ2VyPiIsImh5cGhlbmF0ZS1yZXNvdXJjZSI6MSxoeXBoZW5zOiJub25lIHwgbWFudWFsIHwgYXV0byIsaWNvbjoxLCJpbWFnZS1vcmllbnRhdGlvbiI6ImFuZ2xlIHwgYXV0byIsImltYWdlLXJlbmRlcmluZyI6MSwiaW1hZ2UtcmVzb2x1dGlvbiI6MSwiaW5saW5lLWJveC1hbGlnbiI6ImluaXRpYWwgfCBsYXN0IHwgPGludGVnZXI+IiwianVzdGlmeS1jb250ZW50IjoiZmxleC1zdGFydCB8IGZsZXgtZW5kIHwgY2VudGVyIHwgc3BhY2UtYmV0d2VlbiB8IHNwYWNlLWFyb3VuZCIsIi13ZWJraXQtanVzdGlmeS1jb250ZW50IjoiZmxleC1zdGFydCB8IGZsZXgtZW5kIHwgY2VudGVyIHwgc3BhY2UtYmV0d2VlbiB8IHNwYWNlLWFyb3VuZCIsbGVmdDoiPG1hcmdpbi13aWR0aD4gfCBpbmhlcml0IiwibGV0dGVyLXNwYWNpbmciOiI8bGVuZ3RoPiB8IG5vcm1hbCB8IGluaGVyaXQiLCJsaW5lLWhlaWdodCI6IjxudW1iZXI+IHwgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBub3JtYWwgfCBpbmhlcml0IiwibGluZS1icmVhayI6ImF1dG8gfCBsb29zZSB8IG5vcm1hbCB8IHN0cmljdCIsImxpbmUtc3RhY2tpbmciOjEsImxpbmUtc3RhY2tpbmctcnVieSI6ImV4Y2x1ZGUtcnVieSB8IGluY2x1ZGUtcnVieSIsImxpbmUtc3RhY2tpbmctc2hpZnQiOiJjb25zaWRlci1zaGlmdHMgfCBkaXNyZWdhcmQtc2hpZnRzIiwibGluZS1zdGFja2luZy1zdHJhdGVneSI6ImlubGluZS1saW5lLWhlaWdodCB8IGJsb2NrLWxpbmUtaGVpZ2h0IHwgbWF4LWhlaWdodCB8IGdyaWQtaGVpZ2h0IiwibGlzdC1zdHlsZSI6MSwibGlzdC1zdHlsZS1pbWFnZSI6Ijx1cmk+IHwgbm9uZSB8IGluaGVyaXQiLCJsaXN0LXN0eWxlLXBvc2l0aW9uIjoiaW5zaWRlIHwgb3V0c2lkZSB8IGluaGVyaXQiLCJsaXN0LXN0eWxlLXR5cGUiOiJkaXNjIHwgY2lyY2xlIHwgc3F1YXJlIHwgZGVjaW1hbCB8IGRlY2ltYWwtbGVhZGluZy16ZXJvIHwgbG93ZXItcm9tYW4gfCB1cHBlci1yb21hbiB8IGxvd2VyLWdyZWVrIHwgbG93ZXItbGF0aW4gfCB1cHBlci1sYXRpbiB8IGFybWVuaWFuIHwgZ2VvcmdpYW4gfCBsb3dlci1hbHBoYSB8IHVwcGVyLWFscGhhIHwgbm9uZSB8IGluaGVyaXQiLG1hcmdpbjp7bXVsdGk6IjxtYXJnaW4td2lkdGg+IHwgaW5oZXJpdCIsbWF4OjR9LCJtYXJnaW4tYm90dG9tIjoiPG1hcmdpbi13aWR0aD4gfCBpbmhlcml0IiwibWFyZ2luLWxlZnQiOiI8bWFyZ2luLXdpZHRoPiB8IGluaGVyaXQiLCJtYXJnaW4tcmlnaHQiOiI8bWFyZ2luLXdpZHRoPiB8IGluaGVyaXQiLCJtYXJnaW4tdG9wIjoiPG1hcmdpbi13aWR0aD4gfCBpbmhlcml0IixtYXJrOjEsIm1hcmstYWZ0ZXIiOjEsIm1hcmstYmVmb3JlIjoxLG1hcmtzOjEsIm1hcnF1ZWUtZGlyZWN0aW9uIjoxLCJtYXJxdWVlLXBsYXktY291bnQiOjEsIm1hcnF1ZWUtc3BlZWQiOjEsIm1hcnF1ZWUtc3R5bGUiOjEsIm1heC1oZWlnaHQiOiI8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IDxjb250ZW50LXNpemluZz4gfCBub25lIHwgaW5oZXJpdCIsIm1heC13aWR0aCI6IjxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgPGNvbnRlbnQtc2l6aW5nPiB8IG5vbmUgfCBpbmhlcml0IiwibWluLWhlaWdodCI6IjxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgPGNvbnRlbnQtc2l6aW5nPiB8IGNvbnRhaW4tZmxvYXRzIHwgLW1vei1jb250YWluLWZsb2F0cyB8IC13ZWJraXQtY29udGFpbi1mbG9hdHMgfCBpbmhlcml0IiwibWluLXdpZHRoIjoiPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCA8Y29udGVudC1zaXppbmc+IHwgY29udGFpbi1mbG9hdHMgfCAtbW96LWNvbnRhaW4tZmxvYXRzIHwgLXdlYmtpdC1jb250YWluLWZsb2F0cyB8IGluaGVyaXQiLCJtb3ZlLXRvIjoxLCJuYXYtZG93biI6MSwibmF2LWluZGV4IjoxLCJuYXYtbGVmdCI6MSwibmF2LXJpZ2h0IjoxLCJuYXYtdXAiOjEsb3BhY2l0eToiPG51bWJlcj4gfCBpbmhlcml0IixvcmRlcjoiPGludGVnZXI+IiwiLXdlYmtpdC1vcmRlciI6IjxpbnRlZ2VyPiIsb3JwaGFuczoiPGludGVnZXI+IHwgaW5oZXJpdCIsb3V0bGluZToxLCJvdXRsaW5lLWNvbG9yIjoiPGNvbG9yPiB8IGludmVydCB8IGluaGVyaXQiLCJvdXRsaW5lLW9mZnNldCI6MSwib3V0bGluZS1zdHlsZSI6Ijxib3JkZXItc3R5bGU+IHwgaW5oZXJpdCIsIm91dGxpbmUtd2lkdGgiOiI8Ym9yZGVyLXdpZHRoPiB8IGluaGVyaXQiLG92ZXJmbG93OiJ2aXNpYmxlIHwgaGlkZGVuIHwgc2Nyb2xsIHwgYXV0byB8IGluaGVyaXQiLCJvdmVyZmxvdy1zdHlsZSI6MSwib3ZlcmZsb3ctd3JhcCI6Im5vcm1hbCB8IGJyZWFrLXdvcmQiLCJvdmVyZmxvdy14IjoxLCJvdmVyZmxvdy15IjoxLHBhZGRpbmc6e211bHRpOiI8cGFkZGluZy13aWR0aD4gfCBpbmhlcml0IixtYXg6NH0sInBhZGRpbmctYm90dG9tIjoiPHBhZGRpbmctd2lkdGg+IHwgaW5oZXJpdCIsInBhZGRpbmctbGVmdCI6IjxwYWRkaW5nLXdpZHRoPiB8IGluaGVyaXQiLCJwYWRkaW5nLXJpZ2h0IjoiPHBhZGRpbmctd2lkdGg+IHwgaW5oZXJpdCIsInBhZGRpbmctdG9wIjoiPHBhZGRpbmctd2lkdGg+IHwgaW5oZXJpdCIscGFnZToxLCJwYWdlLWJyZWFrLWFmdGVyIjoiYXV0byB8IGFsd2F5cyB8IGF2b2lkIHwgbGVmdCB8IHJpZ2h0IHwgaW5oZXJpdCIsInBhZ2UtYnJlYWstYmVmb3JlIjoiYXV0byB8IGFsd2F5cyB8IGF2b2lkIHwgbGVmdCB8IHJpZ2h0IHwgaW5oZXJpdCIsInBhZ2UtYnJlYWstaW5zaWRlIjoiYXV0byB8IGF2b2lkIHwgaW5oZXJpdCIsInBhZ2UtcG9saWN5IjoxLHBhdXNlOjEsInBhdXNlLWFmdGVyIjoxLCJwYXVzZS1iZWZvcmUiOjEscGVyc3BlY3RpdmU6MSwicGVyc3BlY3RpdmUtb3JpZ2luIjoxLHBob25lbWVzOjEscGl0Y2g6MSwicGl0Y2gtcmFuZ2UiOjEsInBsYXktZHVyaW5nIjoxLCJwb2ludGVyLWV2ZW50cyI6ImF1dG8gfCBub25lIHwgdmlzaWJsZVBhaW50ZWQgfCB2aXNpYmxlRmlsbCB8IHZpc2libGVTdHJva2UgfCB2aXNpYmxlIHwgcGFpbnRlZCB8IGZpbGwgfCBzdHJva2UgfCBhbGwgfCBpbmhlcml0Iixwb3NpdGlvbjoic3RhdGljIHwgcmVsYXRpdmUgfCBhYnNvbHV0ZSB8IGZpeGVkIHwgaW5oZXJpdCIsInByZXNlbnRhdGlvbi1sZXZlbCI6MSwicHVuY3R1YXRpb24tdHJpbSI6MSxxdW90ZXM6MSwicmVuZGVyaW5nLWludGVudCI6MSxyZXNpemU6MSxyZXN0OjEsInJlc3QtYWZ0ZXIiOjEsInJlc3QtYmVmb3JlIjoxLHJpY2huZXNzOjEscmlnaHQ6IjxtYXJnaW4td2lkdGg+IHwgaW5oZXJpdCIscm90YXRpb246MSwicm90YXRpb24tcG9pbnQiOjEsInJ1YnktYWxpZ24iOjEsInJ1Ynktb3ZlcmhhbmciOjEsInJ1YnktcG9zaXRpb24iOjEsInJ1Ynktc3BhbiI6MSxzaXplOjEsc3BlYWs6Im5vcm1hbCB8IG5vbmUgfCBzcGVsbC1vdXQgfCBpbmhlcml0Iiwic3BlYWstaGVhZGVyIjoib25jZSB8IGFsd2F5cyB8IGluaGVyaXQiLCJzcGVhay1udW1lcmFsIjoiZGlnaXRzIHwgY29udGludW91cyB8IGluaGVyaXQiLCJzcGVhay1wdW5jdHVhdGlvbiI6ImNvZGUgfCBub25lIHwgaW5oZXJpdCIsInNwZWVjaC1yYXRlIjoxLHNyYzoxLHN0cmVzczoxLCJzdHJpbmctc2V0IjoxLCJ0YWJsZS1sYXlvdXQiOiJhdXRvIHwgZml4ZWQgfCBpbmhlcml0IiwidGFiLXNpemUiOiI8aW50ZWdlcj4gfCA8bGVuZ3RoPiIsdGFyZ2V0OjEsInRhcmdldC1uYW1lIjoxLCJ0YXJnZXQtbmV3IjoxLCJ0YXJnZXQtcG9zaXRpb24iOjEsInRleHQtYWxpZ24iOiJsZWZ0IHwgcmlnaHQgfCBjZW50ZXIgfCBqdXN0aWZ5IHwgaW5oZXJpdCIsInRleHQtYWxpZ24tbGFzdCI6MSwidGV4dC1kZWNvcmF0aW9uIjoxLCJ0ZXh0LWVtcGhhc2lzIjoxLCJ0ZXh0LWhlaWdodCI6MSwidGV4dC1pbmRlbnQiOiI8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGluaGVyaXQiLCJ0ZXh0LWp1c3RpZnkiOiJhdXRvIHwgbm9uZSB8IGludGVyLXdvcmQgfCBpbnRlci1pZGVvZ3JhcGggfCBpbnRlci1jbHVzdGVyIHwgZGlzdHJpYnV0ZSB8IGthc2hpZGEiLCJ0ZXh0LW91dGxpbmUiOjEsInRleHQtb3ZlcmZsb3ciOjEsInRleHQtcmVuZGVyaW5nIjoiYXV0byB8IG9wdGltaXplU3BlZWQgfCBvcHRpbWl6ZUxlZ2liaWxpdHkgfCBnZW9tZXRyaWNQcmVjaXNpb24gfCBpbmhlcml0IiwidGV4dC1zaGFkb3ciOjEsInRleHQtdHJhbnNmb3JtIjoiY2FwaXRhbGl6ZSB8IHVwcGVyY2FzZSB8IGxvd2VyY2FzZSB8IG5vbmUgfCBpbmhlcml0IiwidGV4dC13cmFwIjoibm9ybWFsIHwgbm9uZSB8IGF2b2lkIix0b3A6IjxtYXJnaW4td2lkdGg+IHwgaW5oZXJpdCIsIi1tcy10b3VjaC1hY3Rpb24iOiJhdXRvIHwgbm9uZSB8IHBhbi14IHwgcGFuLXkiLCJ0b3VjaC1hY3Rpb24iOiJhdXRvIHwgbm9uZSB8IHBhbi14IHwgcGFuLXkiLHRyYW5zZm9ybToxLCJ0cmFuc2Zvcm0tb3JpZ2luIjoxLCJ0cmFuc2Zvcm0tc3R5bGUiOjEsdHJhbnNpdGlvbjoxLCJ0cmFuc2l0aW9uLWRlbGF5IjoxLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIjoxLCJ0cmFuc2l0aW9uLXByb3BlcnR5IjoxLCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiI6MSwidW5pY29kZS1iaWRpIjoibm9ybWFsIHwgZW1iZWQgfCBpc29sYXRlIHwgYmlkaS1vdmVycmlkZSB8IGlzb2xhdGUtb3ZlcnJpZGUgfCBwbGFpbnRleHQgfCBpbmhlcml0IiwidXNlci1tb2RpZnkiOiJyZWFkLW9ubHkgfCByZWFkLXdyaXRlIHwgd3JpdGUtb25seSB8IGluaGVyaXQiLCJ1c2VyLXNlbGVjdCI6Im5vbmUgfCB0ZXh0IHwgdG9nZ2xlIHwgZWxlbWVudCB8IGVsZW1lbnRzIHwgYWxsIHwgaW5oZXJpdCIsInZlcnRpY2FsLWFsaWduIjoiYXV0byB8IHVzZS1zY3JpcHQgfCBiYXNlbGluZSB8IHN1YiB8IHN1cGVyIHwgdG9wIHwgdGV4dC10b3AgfCBjZW50cmFsIHwgbWlkZGxlIHwgYm90dG9tIHwgdGV4dC1ib3R0b20gfCA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiIsdmlzaWJpbGl0eToidmlzaWJsZSB8IGhpZGRlbiB8IGNvbGxhcHNlIHwgaW5oZXJpdCIsInZvaWNlLWJhbGFuY2UiOjEsInZvaWNlLWR1cmF0aW9uIjoxLCJ2b2ljZS1mYW1pbHkiOjEsInZvaWNlLXBpdGNoIjoxLCJ2b2ljZS1waXRjaC1yYW5nZSI6MSwidm9pY2UtcmF0ZSI6MSwidm9pY2Utc3RyZXNzIjoxLCJ2b2ljZS12b2x1bWUiOjEsdm9sdW1lOjEsIndoaXRlLXNwYWNlIjoibm9ybWFsIHwgcHJlIHwgbm93cmFwIHwgcHJlLXdyYXAgfCBwcmUtbGluZSB8IGluaGVyaXQgfCAtcHJlLXdyYXAgfCAtby1wcmUtd3JhcCB8IC1tb3otcHJlLXdyYXAgfCAtaHAtcHJlLXdyYXAiLCJ3aGl0ZS1zcGFjZS1jb2xsYXBzZSI6MSx3aWRvd3M6IjxpbnRlZ2VyPiB8IGluaGVyaXQiLHdpZHRoOiI8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IDxjb250ZW50LXNpemluZz4gfCBhdXRvIHwgaW5oZXJpdCIsIndvcmQtYnJlYWsiOiJub3JtYWwgfCBrZWVwLWFsbCB8IGJyZWFrLWFsbCIsIndvcmQtc3BhY2luZyI6IjxsZW5ndGg+IHwgbm9ybWFsIHwgaW5oZXJpdCIsIndvcmQtd3JhcCI6Im5vcm1hbCB8IGJyZWFrLXdvcmQiLCJ3cml0aW5nLW1vZGUiOiJob3Jpem9udGFsLXRiIHwgdmVydGljYWwtcmwgfCB2ZXJ0aWNhbC1sciB8IGxyLXRiIHwgcmwtdGIgfCB0Yi1ybCB8IGJ0LXJsIHwgdGItbHIgfCBidC1sciB8IGxyLWJ0IHwgcmwtYnQgfCBsciB8IHJsIHwgdGIgfCBpbmhlcml0Iiwiei1pbmRleCI6IjxpbnRlZ2VyPiB8IGF1dG8gfCBpbmhlcml0Iix6b29tOiI8bnVtYmVyPiB8IDxwZXJjZW50YWdlPiB8IG5vcm1hbCJ9O1Byb3BlcnR5TmFtZS5wcm90b3R5cGU9bmV3IFN5bnRheFVuaXQsUHJvcGVydHlOYW1lLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1Qcm9wZXJ0eU5hbWUsUHJvcGVydHlOYW1lLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybih0aGlzLmhhY2s/dGhpcy5oYWNrOiIiKSt0aGlzLnRleHR9LFByb3BlcnR5VmFsdWUucHJvdG90eXBlPW5ldyBTeW50YXhVbml0LFByb3BlcnR5VmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yPVByb3BlcnR5VmFsdWUsUHJvcGVydHlWYWx1ZUl0ZXJhdG9yLnByb3RvdHlwZS5jb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJ0cy5sZW5ndGh9LFByb3BlcnR5VmFsdWVJdGVyYXRvci5wcm90b3R5cGUuaXNGaXJzdD1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5faX0sUHJvcGVydHlWYWx1ZUl0ZXJhdG9yLnByb3RvdHlwZS5oYXNOZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2k8dGhpcy5fcGFydHMubGVuZ3RofSxQcm9wZXJ0eVZhbHVlSXRlcmF0b3IucHJvdG90eXBlLm1hcms9ZnVuY3Rpb24oKXt0aGlzLl9tYXJrcy5wdXNoKHRoaXMuX2kpfSxQcm9wZXJ0eVZhbHVlSXRlcmF0b3IucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oY291bnQpe3JldHVybiB0aGlzLmhhc05leHQoKT90aGlzLl9wYXJ0c1t0aGlzLl9pKyhjb3VudHx8MCldOm51bGx9LFByb3BlcnR5VmFsdWVJdGVyYXRvci5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc05leHQoKT90aGlzLl9wYXJ0c1t0aGlzLl9pKytdOm51bGx9LFByb3BlcnR5VmFsdWVJdGVyYXRvci5wcm90b3R5cGUucHJldmlvdXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faT4wP3RoaXMuX3BhcnRzWy0tdGhpcy5faV06bnVsbH0sUHJvcGVydHlWYWx1ZUl0ZXJhdG9yLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKCl7dGhpcy5fbWFya3MubGVuZ3RoJiYodGhpcy5faT10aGlzLl9tYXJrcy5wb3AoKSl9LFByb3BlcnR5VmFsdWVQYXJ0LnByb3RvdHlwZT1uZXcgU3ludGF4VW5pdCxQcm9wZXJ0eVZhbHVlUGFydC5wcm90b3R5cGUuY29uc3RydWN0b3I9UHJvcGVydHlWYWx1ZVBhcnQsUHJvcGVydHlWYWx1ZVBhcnQuZnJvbVRva2VuPWZ1bmN0aW9uKHRva2VuKXtyZXR1cm4gbmV3IFByb3BlcnR5VmFsdWVQYXJ0KHRva2VuLnZhbHVlLHRva2VuLnN0YXJ0TGluZSx0b2tlbi5zdGFydENvbCl9O3ZhciBQc2V1ZG9zPXsiOmZpcnN0LWxldHRlciI6MSwiOmZpcnN0LWxpbmUiOjEsIjpiZWZvcmUiOjEsIjphZnRlciI6MX07UHNldWRvcy5FTEVNRU5UPTEsUHNldWRvcy5DTEFTUz0yLFBzZXVkb3MuaXNFbGVtZW50PWZ1bmN0aW9uKHBzZXVkbyl7cmV0dXJuIDA9PT1wc2V1ZG8uaW5kZXhPZigiOjoiKXx8UHNldWRvc1twc2V1ZG8udG9Mb3dlckNhc2UoKV09PVBzZXVkb3MuRUxFTUVOVH0sU2VsZWN0b3IucHJvdG90eXBlPW5ldyBTeW50YXhVbml0LFNlbGVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TZWxlY3RvcixTZWxlY3RvclBhcnQucHJvdG90eXBlPW5ldyBTeW50YXhVbml0LFNlbGVjdG9yUGFydC5wcm90b3R5cGUuY29uc3RydWN0b3I9U2VsZWN0b3JQYXJ0LFNlbGVjdG9yU3ViUGFydC5wcm90b3R5cGU9bmV3IFN5bnRheFVuaXQsU2VsZWN0b3JTdWJQYXJ0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TZWxlY3RvclN1YlBhcnQsU3BlY2lmaWNpdHkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpTcGVjaWZpY2l0eSxjb21wYXJlOmZ1bmN0aW9uKG90aGVyKXt2YXIgaSxsZW4sY29tcHM9WyJhIiwiYiIsImMiLCJkIl07Zm9yKGk9MCxsZW49Y29tcHMubGVuZ3RoO2xlbj5pO2krKyl7aWYodGhpc1tjb21wc1tpXV08b3RoZXJbY29tcHNbaV1dKXJldHVybi0xO2lmKHRoaXNbY29tcHNbaV1dPm90aGVyW2NvbXBzW2ldXSlyZXR1cm4gMX1yZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiAxZTMqdGhpcy5hKzEwMCp0aGlzLmIrMTAqdGhpcy5jK3RoaXMuZH0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIsIit0aGlzLmIrIiwiK3RoaXMuYysiLCIrdGhpcy5kfX0sU3BlY2lmaWNpdHkuY2FsY3VsYXRlPWZ1bmN0aW9uKHNlbGVjdG9yKXtmdW5jdGlvbiB1cGRhdGVWYWx1ZXMocGFydCl7dmFyIGksaixsZW4sbnVtLG1vZGlmaWVyLGVsZW1lbnROYW1lPXBhcnQuZWxlbWVudE5hbWU/cGFydC5lbGVtZW50TmFtZS50ZXh0OiIiO2ZvcihlbGVtZW50TmFtZSYmIioiIT1lbGVtZW50TmFtZS5jaGFyQXQoZWxlbWVudE5hbWUubGVuZ3RoLTEpJiZkKyssaT0wLGxlbj1wYXJ0Lm1vZGlmaWVycy5sZW5ndGg7bGVuPmk7aSsrKXN3aXRjaChtb2RpZmllcj1wYXJ0Lm1vZGlmaWVyc1tpXSxtb2RpZmllci50eXBlKXtjYXNlImNsYXNzIjpjYXNlImF0dHJpYnV0ZSI6YysrO2JyZWFrO2Nhc2UiaWQiOmIrKzticmVhaztjYXNlInBzZXVkbyI6UHNldWRvcy5pc0VsZW1lbnQobW9kaWZpZXIudGV4dCk/ZCsrOmMrKzticmVhaztjYXNlIm5vdCI6Zm9yKGo9MCxudW09bW9kaWZpZXIuYXJncy5sZW5ndGg7bnVtPmo7aisrKXVwZGF0ZVZhbHVlcyhtb2RpZmllci5hcmdzW2pdKX19dmFyIGksbGVuLHBhcnQsYj0wLGM9MCxkPTA7Zm9yKGk9MCxsZW49c2VsZWN0b3IucGFydHMubGVuZ3RoO2xlbj5pO2krKylwYXJ0PXNlbGVjdG9yLnBhcnRzW2ldLHBhcnQgaW5zdGFuY2VvZiBTZWxlY3RvclBhcnQmJnVwZGF0ZVZhbHVlcyhwYXJ0KTtyZXR1cm4gbmV3IFNwZWNpZmljaXR5KDAsYixjLGQpfTt2YXIgaD0vXlswLTlhLWZBLUZdJC8sbm9uYXNjaWk9L15bXFx1MDA4MC1cXHVGRkZGXSQvLG5sPS9cXG58XFxyXFxufFxccnxcXGYvO1Rva2VuU3RyZWFtLnByb3RvdHlwZT1taXgobmV3IFRva2VuU3RyZWFtQmFzZSx7X2dldFRva2VuOmZ1bmN0aW9uKCl7dmFyIGMscmVhZGVyPXRoaXMuX3JlYWRlcix0b2tlbj1udWxsLHN0YXJ0TGluZT1yZWFkZXIuZ2V0TGluZSgpLHN0YXJ0Q29sPXJlYWRlci5nZXRDb2woKTtmb3IoYz1yZWFkZXIucmVhZCgpO2M7KXtzd2l0Y2goYyl7Y2FzZSIvIjp0b2tlbj0iKiI9PXJlYWRlci5wZWVrKCk/dGhpcy5jb21tZW50VG9rZW4oYyxzdGFydExpbmUsc3RhcnRDb2wpOnRoaXMuY2hhclRva2VuKGMsc3RhcnRMaW5lLHN0YXJ0Q29sKTticmVhaztjYXNlInwiOmNhc2UifiI6Y2FzZSJeIjpjYXNlIiQiOmNhc2UiKiI6dG9rZW49Ij0iPT1yZWFkZXIucGVlaygpP3RoaXMuY29tcGFyaXNvblRva2VuKGMsc3RhcnRMaW5lLHN0YXJ0Q29sKTp0aGlzLmNoYXJUb2tlbihjLHN0YXJ0TGluZSxzdGFydENvbCk7YnJlYWs7Y2FzZVwnIlwnOmNhc2UiXCciOnRva2VuPXRoaXMuc3RyaW5nVG9rZW4oYyxzdGFydExpbmUsc3RhcnRDb2wpO2JyZWFrO2Nhc2UiIyI6dG9rZW49aXNOYW1lQ2hhcihyZWFkZXIucGVlaygpKT90aGlzLmhhc2hUb2tlbihjLHN0YXJ0TGluZSxzdGFydENvbCk6dGhpcy5jaGFyVG9rZW4oYyxzdGFydExpbmUsc3RhcnRDb2wpO2JyZWFrO2Nhc2UiLiI6dG9rZW49aXNEaWdpdChyZWFkZXIucGVlaygpKT90aGlzLm51bWJlclRva2VuKGMsc3RhcnRMaW5lLHN0YXJ0Q29sKTp0aGlzLmNoYXJUb2tlbihjLHN0YXJ0TGluZSxzdGFydENvbCk7YnJlYWs7Y2FzZSItIjp0b2tlbj0iLSI9PXJlYWRlci5wZWVrKCk/dGhpcy5odG1sQ29tbWVudEVuZFRva2VuKGMsc3RhcnRMaW5lLHN0YXJ0Q29sKTppc05hbWVTdGFydChyZWFkZXIucGVlaygpKT90aGlzLmlkZW50T3JGdW5jdGlvblRva2VuKGMsc3RhcnRMaW5lLHN0YXJ0Q29sKTp0aGlzLmNoYXJUb2tlbihjLHN0YXJ0TGluZSxzdGFydENvbCk7YnJlYWs7Y2FzZSIhIjp0b2tlbj10aGlzLmltcG9ydGFudFRva2VuKGMsc3RhcnRMaW5lLHN0YXJ0Q29sKTticmVhaztjYXNlIkAiOnRva2VuPXRoaXMuYXRSdWxlVG9rZW4oYyxzdGFydExpbmUsc3RhcnRDb2wpO2JyZWFrO2Nhc2UiOiI6dG9rZW49dGhpcy5ub3RUb2tlbihjLHN0YXJ0TGluZSxzdGFydENvbCk7YnJlYWs7Y2FzZSI8Ijp0b2tlbj10aGlzLmh0bWxDb21tZW50U3RhcnRUb2tlbihjLHN0YXJ0TGluZSxzdGFydENvbCk7YnJlYWs7Y2FzZSJVIjpjYXNlInUiOmlmKCIrIj09cmVhZGVyLnBlZWsoKSl7dG9rZW49dGhpcy51bmljb2RlUmFuZ2VUb2tlbihjLHN0YXJ0TGluZSxzdGFydENvbCk7YnJlYWt9ZGVmYXVsdDp0b2tlbj1pc0RpZ2l0KGMpP3RoaXMubnVtYmVyVG9rZW4oYyxzdGFydExpbmUsc3RhcnRDb2wpOmlzV2hpdGVzcGFjZShjKT90aGlzLndoaXRlc3BhY2VUb2tlbihjLHN0YXJ0TGluZSxzdGFydENvbCk6aXNJZGVudFN0YXJ0KGMpP3RoaXMuaWRlbnRPckZ1bmN0aW9uVG9rZW4oYyxzdGFydExpbmUsc3RhcnRDb2wpOnRoaXMuY2hhclRva2VuKGMsc3RhcnRMaW5lLHN0YXJ0Q29sKX1icmVha31yZXR1cm4gdG9rZW58fG51bGwhPT1jfHwodG9rZW49dGhpcy5jcmVhdGVUb2tlbihUb2tlbnMuRU9GLG51bGwsc3RhcnRMaW5lLHN0YXJ0Q29sKSksdG9rZW59LGNyZWF0ZVRva2VuOmZ1bmN0aW9uKHR0LHZhbHVlLHN0YXJ0TGluZSxzdGFydENvbCxvcHRpb25zKXt2YXIgcmVhZGVyPXRoaXMuX3JlYWRlcjtyZXR1cm4gb3B0aW9ucz1vcHRpb25zfHx7fSx7dmFsdWU6dmFsdWUsdHlwZTp0dCxjaGFubmVsOm9wdGlvbnMuY2hhbm5lbCxlbmRDaGFyOm9wdGlvbnMuZW5kQ2hhcixoaWRlOm9wdGlvbnMuaGlkZXx8ITEsc3RhcnRMaW5lOnN0YXJ0TGluZSxzdGFydENvbDpzdGFydENvbCxlbmRMaW5lOnJlYWRlci5nZXRMaW5lKCksZW5kQ29sOnJlYWRlci5nZXRDb2woKX19LGF0UnVsZVRva2VuOmZ1bmN0aW9uKGZpcnN0LHN0YXJ0TGluZSxzdGFydENvbCl7dmFyIGlkZW50LHJ1bGU9Zmlyc3QscmVhZGVyPXRoaXMuX3JlYWRlcix0dD1Ub2tlbnMuQ0hBUjtyZXR1cm4gcmVhZGVyLm1hcmsoKSxpZGVudD10aGlzLnJlYWROYW1lKCkscnVsZT1maXJzdCtpZGVudCx0dD1Ub2tlbnMudHlwZShydWxlLnRvTG93ZXJDYXNlKCkpLCh0dD09VG9rZW5zLkNIQVJ8fHR0PT1Ub2tlbnMuVU5LTk9XTikmJihydWxlLmxlbmd0aD4xP3R0PVRva2Vucy5VTktOT1dOX1NZTToodHQ9VG9rZW5zLkNIQVIscnVsZT1maXJzdCxyZWFkZXIucmVzZXQoKSkpLHRoaXMuY3JlYXRlVG9rZW4odHQscnVsZSxzdGFydExpbmUsc3RhcnRDb2wpfSxjaGFyVG9rZW46ZnVuY3Rpb24oYyxzdGFydExpbmUsc3RhcnRDb2wpe3ZhciB0dD1Ub2tlbnMudHlwZShjKSxvcHRzPXt9O3JldHVybi0xPT10dD90dD1Ub2tlbnMuQ0hBUjpvcHRzLmVuZENoYXI9VG9rZW5zW3R0XS5lbmRDaGFyLHRoaXMuY3JlYXRlVG9rZW4odHQsYyxzdGFydExpbmUsc3RhcnRDb2wsb3B0cyl9LGNvbW1lbnRUb2tlbjpmdW5jdGlvbihmaXJzdCxzdGFydExpbmUsc3RhcnRDb2wpe3ZhciBjb21tZW50PSh0aGlzLl9yZWFkZXIsdGhpcy5yZWFkQ29tbWVudChmaXJzdCkpO3JldHVybiB0aGlzLmNyZWF0ZVRva2VuKFRva2Vucy5DT01NRU5ULGNvbW1lbnQsc3RhcnRMaW5lLHN0YXJ0Q29sKX0sY29tcGFyaXNvblRva2VuOmZ1bmN0aW9uKGMsc3RhcnRMaW5lLHN0YXJ0Q29sKXt2YXIgcmVhZGVyPXRoaXMuX3JlYWRlcixjb21wYXJpc29uPWMrcmVhZGVyLnJlYWQoKSx0dD1Ub2tlbnMudHlwZShjb21wYXJpc29uKXx8VG9rZW5zLkNIQVI7cmV0dXJuIHRoaXMuY3JlYXRlVG9rZW4odHQsY29tcGFyaXNvbixzdGFydExpbmUsc3RhcnRDb2wpXG59LGhhc2hUb2tlbjpmdW5jdGlvbihmaXJzdCxzdGFydExpbmUsc3RhcnRDb2wpe3ZhciBuYW1lPSh0aGlzLl9yZWFkZXIsdGhpcy5yZWFkTmFtZShmaXJzdCkpO3JldHVybiB0aGlzLmNyZWF0ZVRva2VuKFRva2Vucy5IQVNILG5hbWUsc3RhcnRMaW5lLHN0YXJ0Q29sKX0saHRtbENvbW1lbnRTdGFydFRva2VuOmZ1bmN0aW9uKGZpcnN0LHN0YXJ0TGluZSxzdGFydENvbCl7dmFyIHJlYWRlcj10aGlzLl9yZWFkZXIsdGV4dD1maXJzdDtyZXR1cm4gcmVhZGVyLm1hcmsoKSx0ZXh0Kz1yZWFkZXIucmVhZENvdW50KDMpLCJceDNjIS0tIj09dGV4dD90aGlzLmNyZWF0ZVRva2VuKFRva2Vucy5DRE8sdGV4dCxzdGFydExpbmUsc3RhcnRDb2wpOihyZWFkZXIucmVzZXQoKSx0aGlzLmNoYXJUb2tlbihmaXJzdCxzdGFydExpbmUsc3RhcnRDb2wpKX0saHRtbENvbW1lbnRFbmRUb2tlbjpmdW5jdGlvbihmaXJzdCxzdGFydExpbmUsc3RhcnRDb2wpe3ZhciByZWFkZXI9dGhpcy5fcmVhZGVyLHRleHQ9Zmlyc3Q7cmV0dXJuIHJlYWRlci5tYXJrKCksdGV4dCs9cmVhZGVyLnJlYWRDb3VudCgyKSwiLS1ceDNlIj09dGV4dD90aGlzLmNyZWF0ZVRva2VuKFRva2Vucy5DREMsdGV4dCxzdGFydExpbmUsc3RhcnRDb2wpOihyZWFkZXIucmVzZXQoKSx0aGlzLmNoYXJUb2tlbihmaXJzdCxzdGFydExpbmUsc3RhcnRDb2wpKX0saWRlbnRPckZ1bmN0aW9uVG9rZW46ZnVuY3Rpb24oZmlyc3Qsc3RhcnRMaW5lLHN0YXJ0Q29sKXt2YXIgcmVhZGVyPXRoaXMuX3JlYWRlcixpZGVudD10aGlzLnJlYWROYW1lKGZpcnN0KSx0dD1Ub2tlbnMuSURFTlQ7cmV0dXJuIigiPT1yZWFkZXIucGVlaygpPyhpZGVudCs9cmVhZGVyLnJlYWQoKSwidXJsKCI9PWlkZW50LnRvTG93ZXJDYXNlKCk/KHR0PVRva2Vucy5VUkksaWRlbnQ9dGhpcy5yZWFkVVJJKGlkZW50KSwidXJsKCI9PWlkZW50LnRvTG93ZXJDYXNlKCkmJih0dD1Ub2tlbnMuRlVOQ1RJT04pKTp0dD1Ub2tlbnMuRlVOQ1RJT04pOiI6Ij09cmVhZGVyLnBlZWsoKSYmInByb2dpZCI9PWlkZW50LnRvTG93ZXJDYXNlKCkmJihpZGVudCs9cmVhZGVyLnJlYWRUbygiKCIpLHR0PVRva2Vucy5JRV9GVU5DVElPTiksdGhpcy5jcmVhdGVUb2tlbih0dCxpZGVudCxzdGFydExpbmUsc3RhcnRDb2wpfSxpbXBvcnRhbnRUb2tlbjpmdW5jdGlvbihmaXJzdCxzdGFydExpbmUsc3RhcnRDb2wpe3ZhciB0ZW1wLGMscmVhZGVyPXRoaXMuX3JlYWRlcixpbXBvcnRhbnQ9Zmlyc3QsdHQ9VG9rZW5zLkNIQVI7Zm9yKHJlYWRlci5tYXJrKCksYz1yZWFkZXIucmVhZCgpO2M7KXtpZigiLyI9PWMpe2lmKCIqIiE9cmVhZGVyLnBlZWsoKSlicmVhaztpZih0ZW1wPXRoaXMucmVhZENvbW1lbnQoYyksIiI9PT10ZW1wKWJyZWFrfWVsc2V7aWYoIWlzV2hpdGVzcGFjZShjKSl7aWYoL2kvaS50ZXN0KGMpKXt0ZW1wPXJlYWRlci5yZWFkQ291bnQoOCksL21wb3J0YW50L2kudGVzdCh0ZW1wKSYmKGltcG9ydGFudCs9Yyt0ZW1wLHR0PVRva2Vucy5JTVBPUlRBTlRfU1lNKTticmVha31icmVha31pbXBvcnRhbnQrPWMrdGhpcy5yZWFkV2hpdGVzcGFjZSgpfWM9cmVhZGVyLnJlYWQoKX1yZXR1cm4gdHQ9PVRva2Vucy5DSEFSPyhyZWFkZXIucmVzZXQoKSx0aGlzLmNoYXJUb2tlbihmaXJzdCxzdGFydExpbmUsc3RhcnRDb2wpKTp0aGlzLmNyZWF0ZVRva2VuKHR0LGltcG9ydGFudCxzdGFydExpbmUsc3RhcnRDb2wpfSxub3RUb2tlbjpmdW5jdGlvbihmaXJzdCxzdGFydExpbmUsc3RhcnRDb2wpe3ZhciByZWFkZXI9dGhpcy5fcmVhZGVyLHRleHQ9Zmlyc3Q7cmV0dXJuIHJlYWRlci5tYXJrKCksdGV4dCs9cmVhZGVyLnJlYWRDb3VudCg0KSwiOm5vdCgiPT10ZXh0LnRvTG93ZXJDYXNlKCk/dGhpcy5jcmVhdGVUb2tlbihUb2tlbnMuTk9ULHRleHQsc3RhcnRMaW5lLHN0YXJ0Q29sKToocmVhZGVyLnJlc2V0KCksdGhpcy5jaGFyVG9rZW4oZmlyc3Qsc3RhcnRMaW5lLHN0YXJ0Q29sKSl9LG51bWJlclRva2VuOmZ1bmN0aW9uKGZpcnN0LHN0YXJ0TGluZSxzdGFydENvbCl7dmFyIGlkZW50LHJlYWRlcj10aGlzLl9yZWFkZXIsdmFsdWU9dGhpcy5yZWFkTnVtYmVyKGZpcnN0KSx0dD1Ub2tlbnMuTlVNQkVSLGM9cmVhZGVyLnBlZWsoKTtyZXR1cm4gaXNJZGVudFN0YXJ0KGMpPyhpZGVudD10aGlzLnJlYWROYW1lKHJlYWRlci5yZWFkKCkpLHZhbHVlKz1pZGVudCx0dD0vXmVtJHxeZXgkfF5weCR8XmdkJHxecmVtJHxednckfF52aCR8XnZtYXgkfF52bWluJHxeY2gkfF5jbSR8Xm1tJHxeaW4kfF5wdCR8XnBjJC9pLnRlc3QoaWRlbnQpP1Rva2Vucy5MRU5HVEg6L15kZWd8XnJhZCR8XmdyYWQkL2kudGVzdChpZGVudCk/VG9rZW5zLkFOR0xFOi9ebXMkfF5zJC9pLnRlc3QoaWRlbnQpP1Rva2Vucy5USU1FOi9eaHokfF5raHokL2kudGVzdChpZGVudCk/VG9rZW5zLkZSRVE6L15kcGkkfF5kcGNtJC9pLnRlc3QoaWRlbnQpP1Rva2Vucy5SRVNPTFVUSU9OOlRva2Vucy5ESU1FTlNJT04pOiIlIj09YyYmKHZhbHVlKz1yZWFkZXIucmVhZCgpLHR0PVRva2Vucy5QRVJDRU5UQUdFKSx0aGlzLmNyZWF0ZVRva2VuKHR0LHZhbHVlLHN0YXJ0TGluZSxzdGFydENvbCl9LHN0cmluZ1Rva2VuOmZ1bmN0aW9uKGZpcnN0LHN0YXJ0TGluZSxzdGFydENvbCl7Zm9yKHZhciBkZWxpbT1maXJzdCxzdHJpbmc9Zmlyc3QscmVhZGVyPXRoaXMuX3JlYWRlcixwcmV2PWZpcnN0LHR0PVRva2Vucy5TVFJJTkcsYz1yZWFkZXIucmVhZCgpO2MmJihzdHJpbmcrPWMsYyE9ZGVsaW18fCJcXFxcIj09cHJldik7KXtpZihpc05ld0xpbmUocmVhZGVyLnBlZWsoKSkmJiJcXFxcIiE9Yyl7dHQ9VG9rZW5zLklOVkFMSUQ7YnJlYWt9cHJldj1jLGM9cmVhZGVyLnJlYWQoKX1yZXR1cm4gbnVsbD09PWMmJih0dD1Ub2tlbnMuSU5WQUxJRCksdGhpcy5jcmVhdGVUb2tlbih0dCxzdHJpbmcsc3RhcnRMaW5lLHN0YXJ0Q29sKX0sdW5pY29kZVJhbmdlVG9rZW46ZnVuY3Rpb24oZmlyc3Qsc3RhcnRMaW5lLHN0YXJ0Q29sKXt2YXIgdGVtcCxyZWFkZXI9dGhpcy5fcmVhZGVyLHZhbHVlPWZpcnN0LHR0PVRva2Vucy5DSEFSO3JldHVybiIrIj09cmVhZGVyLnBlZWsoKSYmKHJlYWRlci5tYXJrKCksdmFsdWUrPXJlYWRlci5yZWFkKCksdmFsdWUrPXRoaXMucmVhZFVuaWNvZGVSYW5nZVBhcnQoITApLDI9PXZhbHVlLmxlbmd0aD9yZWFkZXIucmVzZXQoKToodHQ9VG9rZW5zLlVOSUNPREVfUkFOR0UsLTE9PXZhbHVlLmluZGV4T2YoIj8iKSYmIi0iPT1yZWFkZXIucGVlaygpJiYocmVhZGVyLm1hcmsoKSx0ZW1wPXJlYWRlci5yZWFkKCksdGVtcCs9dGhpcy5yZWFkVW5pY29kZVJhbmdlUGFydCghMSksMT09dGVtcC5sZW5ndGg/cmVhZGVyLnJlc2V0KCk6dmFsdWUrPXRlbXApKSksdGhpcy5jcmVhdGVUb2tlbih0dCx2YWx1ZSxzdGFydExpbmUsc3RhcnRDb2wpfSx3aGl0ZXNwYWNlVG9rZW46ZnVuY3Rpb24oZmlyc3Qsc3RhcnRMaW5lLHN0YXJ0Q29sKXt2YXIgdmFsdWU9KHRoaXMuX3JlYWRlcixmaXJzdCt0aGlzLnJlYWRXaGl0ZXNwYWNlKCkpO3JldHVybiB0aGlzLmNyZWF0ZVRva2VuKFRva2Vucy5TLHZhbHVlLHN0YXJ0TGluZSxzdGFydENvbCl9LHJlYWRVbmljb2RlUmFuZ2VQYXJ0OmZ1bmN0aW9uKGFsbG93UXVlc3Rpb25NYXJrKXtmb3IodmFyIHJlYWRlcj10aGlzLl9yZWFkZXIscGFydD0iIixjPXJlYWRlci5wZWVrKCk7aXNIZXhEaWdpdChjKSYmNj5wYXJ0Lmxlbmd0aDspcmVhZGVyLnJlYWQoKSxwYXJ0Kz1jLGM9cmVhZGVyLnBlZWsoKTtpZihhbGxvd1F1ZXN0aW9uTWFyaylmb3IoOyI/Ij09YyYmNj5wYXJ0Lmxlbmd0aDspcmVhZGVyLnJlYWQoKSxwYXJ0Kz1jLGM9cmVhZGVyLnBlZWsoKTtyZXR1cm4gcGFydH0scmVhZFdoaXRlc3BhY2U6ZnVuY3Rpb24oKXtmb3IodmFyIHJlYWRlcj10aGlzLl9yZWFkZXIsd2hpdGVzcGFjZT0iIixjPXJlYWRlci5wZWVrKCk7aXNXaGl0ZXNwYWNlKGMpOylyZWFkZXIucmVhZCgpLHdoaXRlc3BhY2UrPWMsYz1yZWFkZXIucGVlaygpO3JldHVybiB3aGl0ZXNwYWNlfSxyZWFkTnVtYmVyOmZ1bmN0aW9uKGZpcnN0KXtmb3IodmFyIHJlYWRlcj10aGlzLl9yZWFkZXIsbnVtYmVyPWZpcnN0LGhhc0RvdD0iLiI9PWZpcnN0LGM9cmVhZGVyLnBlZWsoKTtjOyl7aWYoaXNEaWdpdChjKSludW1iZXIrPXJlYWRlci5yZWFkKCk7ZWxzZXtpZigiLiIhPWMpYnJlYWs7aWYoaGFzRG90KWJyZWFrO2hhc0RvdD0hMCxudW1iZXIrPXJlYWRlci5yZWFkKCl9Yz1yZWFkZXIucGVlaygpfXJldHVybiBudW1iZXJ9LHJlYWRTdHJpbmc6ZnVuY3Rpb24oKXtmb3IodmFyIHJlYWRlcj10aGlzLl9yZWFkZXIsZGVsaW09cmVhZGVyLnJlYWQoKSxzdHJpbmc9ZGVsaW0scHJldj1kZWxpbSxjPXJlYWRlci5wZWVrKCk7YyYmKGM9cmVhZGVyLnJlYWQoKSxzdHJpbmcrPWMsYyE9ZGVsaW18fCJcXFxcIj09cHJldik7KXtpZihpc05ld0xpbmUocmVhZGVyLnBlZWsoKSkmJiJcXFxcIiE9Yyl7c3RyaW5nPSIiO2JyZWFrfXByZXY9YyxjPXJlYWRlci5wZWVrKCl9cmV0dXJuIG51bGw9PT1jJiYoc3RyaW5nPSIiKSxzdHJpbmd9LHJlYWRVUkk6ZnVuY3Rpb24oZmlyc3Qpe3ZhciByZWFkZXI9dGhpcy5fcmVhZGVyLHVyaT1maXJzdCxpbm5lcj0iIixjPXJlYWRlci5wZWVrKCk7Zm9yKHJlYWRlci5tYXJrKCk7YyYmaXNXaGl0ZXNwYWNlKGMpOylyZWFkZXIucmVhZCgpLGM9cmVhZGVyLnBlZWsoKTtmb3IoaW5uZXI9IlwnIj09Y3x8XCciXCc9PWM/dGhpcy5yZWFkU3RyaW5nKCk6dGhpcy5yZWFkVVJMKCksYz1yZWFkZXIucGVlaygpO2MmJmlzV2hpdGVzcGFjZShjKTspcmVhZGVyLnJlYWQoKSxjPXJlYWRlci5wZWVrKCk7cmV0dXJuIiI9PT1pbm5lcnx8IikiIT1jPyh1cmk9Zmlyc3QscmVhZGVyLnJlc2V0KCkpOnVyaSs9aW5uZXIrcmVhZGVyLnJlYWQoKSx1cml9LHJlYWRVUkw6ZnVuY3Rpb24oKXtmb3IodmFyIHJlYWRlcj10aGlzLl9yZWFkZXIsdXJsPSIiLGM9cmVhZGVyLnBlZWsoKTsvXlshIyQlJlxcXFwqLX5dJC8udGVzdChjKTspdXJsKz1yZWFkZXIucmVhZCgpLGM9cmVhZGVyLnBlZWsoKTtyZXR1cm4gdXJsfSxyZWFkTmFtZTpmdW5jdGlvbihmaXJzdCl7Zm9yKHZhciByZWFkZXI9dGhpcy5fcmVhZGVyLGlkZW50PWZpcnN0fHwiIixjPXJlYWRlci5wZWVrKCk7OylpZigiXFxcXCI9PWMpaWRlbnQrPXRoaXMucmVhZEVzY2FwZShyZWFkZXIucmVhZCgpKSxjPXJlYWRlci5wZWVrKCk7ZWxzZXtpZighY3x8IWlzTmFtZUNoYXIoYykpYnJlYWs7aWRlbnQrPXJlYWRlci5yZWFkKCksYz1yZWFkZXIucGVlaygpfXJldHVybiBpZGVudH0scmVhZEVzY2FwZTpmdW5jdGlvbihmaXJzdCl7dmFyIHJlYWRlcj10aGlzLl9yZWFkZXIsY3NzRXNjYXBlPWZpcnN0fHwiIixpPTAsYz1yZWFkZXIucGVlaygpO2lmKGlzSGV4RGlnaXQoYykpZG8gY3NzRXNjYXBlKz1yZWFkZXIucmVhZCgpLGM9cmVhZGVyLnBlZWsoKTt3aGlsZShjJiZpc0hleERpZ2l0KGMpJiY2PisraSk7cmV0dXJuIDM9PWNzc0VzY2FwZS5sZW5ndGgmJi9cXHMvLnRlc3QoYyl8fDc9PWNzc0VzY2FwZS5sZW5ndGh8fDE9PWNzc0VzY2FwZS5sZW5ndGg/cmVhZGVyLnJlYWQoKTpjPSIiLGNzc0VzY2FwZStjfSxyZWFkQ29tbWVudDpmdW5jdGlvbihmaXJzdCl7dmFyIHJlYWRlcj10aGlzLl9yZWFkZXIsY29tbWVudD1maXJzdHx8IiIsYz1yZWFkZXIucmVhZCgpO2lmKCIqIj09Yyl7Zm9yKDtjOyl7aWYoY29tbWVudCs9Yyxjb21tZW50Lmxlbmd0aD4yJiYiKiI9PWMmJiIvIj09cmVhZGVyLnBlZWsoKSl7Y29tbWVudCs9cmVhZGVyLnJlYWQoKTticmVha31jPXJlYWRlci5yZWFkKCl9cmV0dXJuIGNvbW1lbnR9cmV0dXJuIiJ9fSk7dmFyIFRva2Vucz1be25hbWU6IkNETyJ9LHtuYW1lOiJDREMifSx7bmFtZToiUyIsd2hpdGVzcGFjZTohMH0se25hbWU6IkNPTU1FTlQiLGNvbW1lbnQ6ITAsaGlkZTohMCxjaGFubmVsOiJjb21tZW50In0se25hbWU6IklOQ0xVREVTIix0ZXh0OiJ+PSJ9LHtuYW1lOiJEQVNITUFUQ0giLHRleHQ6Inw9In0se25hbWU6IlBSRUZJWE1BVENIIix0ZXh0OiJePSJ9LHtuYW1lOiJTVUZGSVhNQVRDSCIsdGV4dDoiJD0ifSx7bmFtZToiU1VCU1RSSU5HTUFUQ0giLHRleHQ6Iio9In0se25hbWU6IlNUUklORyJ9LHtuYW1lOiJJREVOVCJ9LHtuYW1lOiJIQVNIIn0se25hbWU6IklNUE9SVF9TWU0iLHRleHQ6IkBpbXBvcnQifSx7bmFtZToiUEFHRV9TWU0iLHRleHQ6IkBwYWdlIn0se25hbWU6Ik1FRElBX1NZTSIsdGV4dDoiQG1lZGlhIn0se25hbWU6IkZPTlRfRkFDRV9TWU0iLHRleHQ6IkBmb250LWZhY2UifSx7bmFtZToiQ0hBUlNFVF9TWU0iLHRleHQ6IkBjaGFyc2V0In0se25hbWU6Ik5BTUVTUEFDRV9TWU0iLHRleHQ6IkBuYW1lc3BhY2UifSx7bmFtZToiVklFV1BPUlRfU1lNIix0ZXh0OlsiQHZpZXdwb3J0IiwiQC1tcy12aWV3cG9ydCJdfSx7bmFtZToiVU5LTk9XTl9TWU0ifSx7bmFtZToiS0VZRlJBTUVTX1NZTSIsdGV4dDpbIkBrZXlmcmFtZXMiLCJALXdlYmtpdC1rZXlmcmFtZXMiLCJALW1vei1rZXlmcmFtZXMiLCJALW8ta2V5ZnJhbWVzIl19LHtuYW1lOiJJTVBPUlRBTlRfU1lNIn0se25hbWU6IkxFTkdUSCJ9LHtuYW1lOiJBTkdMRSJ9LHtuYW1lOiJUSU1FIn0se25hbWU6IkZSRVEifSx7bmFtZToiRElNRU5TSU9OIn0se25hbWU6IlBFUkNFTlRBR0UifSx7bmFtZToiTlVNQkVSIn0se25hbWU6IlVSSSJ9LHtuYW1lOiJGVU5DVElPTiJ9LHtuYW1lOiJVTklDT0RFX1JBTkdFIn0se25hbWU6IklOVkFMSUQifSx7bmFtZToiUExVUyIsdGV4dDoiKyJ9LHtuYW1lOiJHUkVBVEVSIix0ZXh0OiI+In0se25hbWU6IkNPTU1BIix0ZXh0OiIsIn0se25hbWU6IlRJTERFIix0ZXh0OiJ+In0se25hbWU6Ik5PVCJ9LHtuYW1lOiJUT1BMRUZUQ09STkVSX1NZTSIsdGV4dDoiQHRvcC1sZWZ0LWNvcm5lciJ9LHtuYW1lOiJUT1BMRUZUX1NZTSIsdGV4dDoiQHRvcC1sZWZ0In0se25hbWU6IlRPUENFTlRFUl9TWU0iLHRleHQ6IkB0b3AtY2VudGVyIn0se25hbWU6IlRPUFJJR0hUX1NZTSIsdGV4dDoiQHRvcC1yaWdodCJ9LHtuYW1lOiJUT1BSSUdIVENPUk5FUl9TWU0iLHRleHQ6IkB0b3AtcmlnaHQtY29ybmVyIn0se25hbWU6IkJPVFRPTUxFRlRDT1JORVJfU1lNIix0ZXh0OiJAYm90dG9tLWxlZnQtY29ybmVyIn0se25hbWU6IkJPVFRPTUxFRlRfU1lNIix0ZXh0OiJAYm90dG9tLWxlZnQifSx7bmFtZToiQk9UVE9NQ0VOVEVSX1NZTSIsdGV4dDoiQGJvdHRvbS1jZW50ZXIifSx7bmFtZToiQk9UVE9NUklHSFRfU1lNIix0ZXh0OiJAYm90dG9tLXJpZ2h0In0se25hbWU6IkJPVFRPTVJJR0hUQ09STkVSX1NZTSIsdGV4dDoiQGJvdHRvbS1yaWdodC1jb3JuZXIifSx7bmFtZToiTEVGVFRPUF9TWU0iLHRleHQ6IkBsZWZ0LXRvcCJ9LHtuYW1lOiJMRUZUTUlERExFX1NZTSIsdGV4dDoiQGxlZnQtbWlkZGxlIn0se25hbWU6IkxFRlRCT1RUT01fU1lNIix0ZXh0OiJAbGVmdC1ib3R0b20ifSx7bmFtZToiUklHSFRUT1BfU1lNIix0ZXh0OiJAcmlnaHQtdG9wIn0se25hbWU6IlJJR0hUTUlERExFX1NZTSIsdGV4dDoiQHJpZ2h0LW1pZGRsZSJ9LHtuYW1lOiJSSUdIVEJPVFRPTV9TWU0iLHRleHQ6IkByaWdodC1ib3R0b20ifSx7bmFtZToiUkVTT0xVVElPTiIsc3RhdGU6Im1lZGlhIn0se25hbWU6IklFX0ZVTkNUSU9OIn0se25hbWU6IkNIQVIifSx7bmFtZToiUElQRSIsdGV4dDoifCJ9LHtuYW1lOiJTTEFTSCIsdGV4dDoiLyJ9LHtuYW1lOiJNSU5VUyIsdGV4dDoiLSJ9LHtuYW1lOiJTVEFSIix0ZXh0OiIqIn0se25hbWU6IkxCUkFDRSIsZW5kQ2hhcjoifSIsdGV4dDoieyJ9LHtuYW1lOiJSQlJBQ0UiLHRleHQ6In0ifSx7bmFtZToiTEJSQUNLRVQiLGVuZENoYXI6Il0iLHRleHQ6IlsifSx7bmFtZToiUkJSQUNLRVQiLHRleHQ6Il0ifSx7bmFtZToiRVFVQUxTIix0ZXh0OiI9In0se25hbWU6IkNPTE9OIix0ZXh0OiI6In0se25hbWU6IlNFTUlDT0xPTiIsdGV4dDoiOyJ9LHtuYW1lOiJMUEFSRU4iLGVuZENoYXI6IikiLHRleHQ6IigifSx7bmFtZToiUlBBUkVOIix0ZXh0OiIpIn0se25hbWU6IkRPVCIsdGV4dDoiLiJ9XTsoZnVuY3Rpb24oKXt2YXIgbmFtZU1hcD1bXSx0eXBlTWFwPXt9O1Rva2Vucy5VTktOT1dOPS0xLFRva2Vucy51bnNoaWZ0KHtuYW1lOiJFT0YifSk7Zm9yKHZhciBpPTAsbGVuPVRva2Vucy5sZW5ndGg7bGVuPmk7aSsrKWlmKG5hbWVNYXAucHVzaChUb2tlbnNbaV0ubmFtZSksVG9rZW5zW1Rva2Vuc1tpXS5uYW1lXT1pLFRva2Vuc1tpXS50ZXh0KWlmKFRva2Vuc1tpXS50ZXh0IGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBqPTA7VG9rZW5zW2ldLnRleHQubGVuZ3RoPmo7aisrKXR5cGVNYXBbVG9rZW5zW2ldLnRleHRbal1dPWk7ZWxzZSB0eXBlTWFwW1Rva2Vuc1tpXS50ZXh0XT1pO1Rva2Vucy5uYW1lPWZ1bmN0aW9uKHR0KXtyZXR1cm4gbmFtZU1hcFt0dF19LFRva2Vucy50eXBlPWZ1bmN0aW9uKGMpe3JldHVybiB0eXBlTWFwW2NdfHwtMX19KSgpO3ZhciBWYWxpZGF0aW9uPXt2YWxpZGF0ZTpmdW5jdGlvbihwcm9wZXJ0eSx2YWx1ZSl7dmFyIG5hbWU9KCIiK3Byb3BlcnR5KS50b0xvd2VyQ2FzZSgpLGV4cHJlc3Npb249KHZhbHVlLnBhcnRzLG5ldyBQcm9wZXJ0eVZhbHVlSXRlcmF0b3IodmFsdWUpKSxzcGVjPVByb3BlcnRpZXNbbmFtZV07aWYoc3BlYykibnVtYmVyIiE9dHlwZW9mIHNwZWMmJigic3RyaW5nIj09dHlwZW9mIHNwZWM/c3BlYy5pbmRleE9mKCJ8fCIpPi0xP3RoaXMuZ3JvdXBQcm9wZXJ0eShzcGVjLGV4cHJlc3Npb24pOnRoaXMuc2luZ2xlUHJvcGVydHkoc3BlYyxleHByZXNzaW9uLDEpOnNwZWMubXVsdGk/dGhpcy5tdWx0aVByb3BlcnR5KHNwZWMubXVsdGksZXhwcmVzc2lvbixzcGVjLmNvbW1hLHNwZWMubWF4fHwxLzApOiJmdW5jdGlvbiI9PXR5cGVvZiBzcGVjJiZzcGVjKGV4cHJlc3Npb24pKTtlbHNlIGlmKDAhPT1uYW1lLmluZGV4T2YoIi0iKSl0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCJVbmtub3duIHByb3BlcnR5IFwnIitwcm9wZXJ0eSsiXCcuIixwcm9wZXJ0eS5saW5lLHByb3BlcnR5LmNvbCl9LHNpbmdsZVByb3BlcnR5OmZ1bmN0aW9uKHR5cGVzLGV4cHJlc3Npb24sbWF4KXtmb3IodmFyIHBhcnQscmVzdWx0PSExLHZhbHVlPWV4cHJlc3Npb24udmFsdWUsY291bnQ9MDtleHByZXNzaW9uLmhhc05leHQoKSYmbWF4PmNvdW50JiYocmVzdWx0PVZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLHR5cGVzKSk7KWNvdW50Kys7aWYoIXJlc3VsdCl0aHJvdyBleHByZXNzaW9uLmhhc05leHQoKSYmIWV4cHJlc3Npb24uaXNGaXJzdCgpPyhwYXJ0PWV4cHJlc3Npb24ucGVlaygpLG5ldyBWYWxpZGF0aW9uRXJyb3IoIkV4cGVjdGVkIGVuZCBvZiB2YWx1ZSBidXQgZm91bmQgXCciK3BhcnQrIlwnLiIscGFydC5saW5lLHBhcnQuY29sKSk6bmV3IFZhbGlkYXRpb25FcnJvcigiRXhwZWN0ZWQgKCIrdHlwZXMrIikgYnV0IGZvdW5kIFwnIit2YWx1ZSsiXCcuIix2YWx1ZS5saW5lLHZhbHVlLmNvbCk7aWYoZXhwcmVzc2lvbi5oYXNOZXh0KCkpdGhyb3cgcGFydD1leHByZXNzaW9uLm5leHQoKSxuZXcgVmFsaWRhdGlvbkVycm9yKCJFeHBlY3RlZCBlbmQgb2YgdmFsdWUgYnV0IGZvdW5kIFwnIitwYXJ0KyJcJy4iLHBhcnQubGluZSxwYXJ0LmNvbCl9LG11bHRpUHJvcGVydHk6ZnVuY3Rpb24odHlwZXMsZXhwcmVzc2lvbixjb21tYSxtYXgpe2Zvcih2YXIgcGFydCxyZXN1bHQ9ITEsdmFsdWU9ZXhwcmVzc2lvbi52YWx1ZSxjb3VudD0wO2V4cHJlc3Npb24uaGFzTmV4dCgpJiYhcmVzdWx0JiZtYXg+Y291bnQmJlZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLHR5cGVzKTspaWYoY291bnQrKyxleHByZXNzaW9uLmhhc05leHQoKSl7aWYoY29tbWEpe2lmKCIsIiE9ZXhwcmVzc2lvbi5wZWVrKCkpYnJlYWs7cGFydD1leHByZXNzaW9uLm5leHQoKX19ZWxzZSByZXN1bHQ9ITA7aWYoIXJlc3VsdCl0aHJvdyBleHByZXNzaW9uLmhhc05leHQoKSYmIWV4cHJlc3Npb24uaXNGaXJzdCgpPyhwYXJ0PWV4cHJlc3Npb24ucGVlaygpLG5ldyBWYWxpZGF0aW9uRXJyb3IoIkV4cGVjdGVkIGVuZCBvZiB2YWx1ZSBidXQgZm91bmQgXCciK3BhcnQrIlwnLiIscGFydC5saW5lLHBhcnQuY29sKSk6KHBhcnQ9ZXhwcmVzc2lvbi5wcmV2aW91cygpLGNvbW1hJiYiLCI9PXBhcnQ/bmV3IFZhbGlkYXRpb25FcnJvcigiRXhwZWN0ZWQgZW5kIG9mIHZhbHVlIGJ1dCBmb3VuZCBcJyIrcGFydCsiXCcuIixwYXJ0LmxpbmUscGFydC5jb2wpOm5ldyBWYWxpZGF0aW9uRXJyb3IoIkV4cGVjdGVkICgiK3R5cGVzKyIpIGJ1dCBmb3VuZCBcJyIrdmFsdWUrIlwnLiIsdmFsdWUubGluZSx2YWx1ZS5jb2wpKTtpZihleHByZXNzaW9uLmhhc05leHQoKSl0aHJvdyBwYXJ0PWV4cHJlc3Npb24ubmV4dCgpLG5ldyBWYWxpZGF0aW9uRXJyb3IoIkV4cGVjdGVkIGVuZCBvZiB2YWx1ZSBidXQgZm91bmQgXCciK3BhcnQrIlwnLiIscGFydC5saW5lLHBhcnQuY29sKX0sZ3JvdXBQcm9wZXJ0eTpmdW5jdGlvbih0eXBlcyxleHByZXNzaW9uKXtmb3IodmFyIG5hbWUscGFydCxyZXN1bHQ9ITEsdmFsdWU9ZXhwcmVzc2lvbi52YWx1ZSx0eXBlQ291bnQ9dHlwZXMuc3BsaXQoInx8IikubGVuZ3RoLGdyb3Vwcz17Y291bnQ6MH0scGFydGlhbD0hMTtleHByZXNzaW9uLmhhc05leHQoKSYmIXJlc3VsdCYmKG5hbWU9VmFsaWRhdGlvblR5cGVzLmlzQW55T2ZHcm91cChleHByZXNzaW9uLHR5cGVzKSkmJiFncm91cHNbbmFtZV07KWdyb3Vwc1tuYW1lXT0xLGdyb3Vwcy5jb3VudCsrLHBhcnRpYWw9ITAsZ3JvdXBzLmNvdW50IT10eXBlQ291bnQmJmV4cHJlc3Npb24uaGFzTmV4dCgpfHwocmVzdWx0PSEwKTtpZighcmVzdWx0KXRocm93IHBhcnRpYWwmJmV4cHJlc3Npb24uaGFzTmV4dCgpPyhwYXJ0PWV4cHJlc3Npb24ucGVlaygpLG5ldyBWYWxpZGF0aW9uRXJyb3IoIkV4cGVjdGVkIGVuZCBvZiB2YWx1ZSBidXQgZm91bmQgXCciK3BhcnQrIlwnLiIscGFydC5saW5lLHBhcnQuY29sKSk6bmV3IFZhbGlkYXRpb25FcnJvcigiRXhwZWN0ZWQgKCIrdHlwZXMrIikgYnV0IGZvdW5kIFwnIit2YWx1ZSsiXCcuIix2YWx1ZS5saW5lLHZhbHVlLmNvbCk7aWYoZXhwcmVzc2lvbi5oYXNOZXh0KCkpdGhyb3cgcGFydD1leHByZXNzaW9uLm5leHQoKSxuZXcgVmFsaWRhdGlvbkVycm9yKCJFeHBlY3RlZCBlbmQgb2YgdmFsdWUgYnV0IGZvdW5kIFwnIitwYXJ0KyJcJy4iLHBhcnQubGluZSxwYXJ0LmNvbCl9fTtWYWxpZGF0aW9uRXJyb3IucHJvdG90eXBlPUVycm9yKCk7dmFyIFZhbGlkYXRpb25UeXBlcz17aXNMaXRlcmFsOmZ1bmN0aW9uKHBhcnQsbGl0ZXJhbHMpe3ZhciBpLGxlbix0ZXh0PSgiIitwYXJ0LnRleHQpLnRvTG93ZXJDYXNlKCksYXJncz1saXRlcmFscy5zcGxpdCgiIHwgIiksZm91bmQ9ITE7Zm9yKGk9MCxsZW49YXJncy5sZW5ndGg7bGVuPmkmJiFmb3VuZDtpKyspdGV4dD09YXJnc1tpXS50b0xvd2VyQ2FzZSgpJiYoZm91bmQ9ITApO3JldHVybiBmb3VuZH0saXNTaW1wbGU6ZnVuY3Rpb24odHlwZSl7cmV0dXJuISF0aGlzLnNpbXBsZVt0eXBlXX0saXNDb21wbGV4OmZ1bmN0aW9uKHR5cGUpe3JldHVybiEhdGhpcy5jb21wbGV4W3R5cGVdfSxpc0FueTpmdW5jdGlvbihleHByZXNzaW9uLHR5cGVzKXt2YXIgaSxsZW4sYXJncz10eXBlcy5zcGxpdCgiIHwgIiksZm91bmQ9ITE7Zm9yKGk9MCxsZW49YXJncy5sZW5ndGg7bGVuPmkmJiFmb3VuZCYmZXhwcmVzc2lvbi5oYXNOZXh0KCk7aSsrKWZvdW5kPXRoaXMuaXNUeXBlKGV4cHJlc3Npb24sYXJnc1tpXSk7cmV0dXJuIGZvdW5kfSxpc0FueU9mR3JvdXA6ZnVuY3Rpb24oZXhwcmVzc2lvbix0eXBlcyl7dmFyIGksbGVuLGFyZ3M9dHlwZXMuc3BsaXQoIiB8fCAiKSxmb3VuZD0hMTtmb3IoaT0wLGxlbj1hcmdzLmxlbmd0aDtsZW4+aSYmIWZvdW5kO2krKylmb3VuZD10aGlzLmlzVHlwZShleHByZXNzaW9uLGFyZ3NbaV0pO3JldHVybiBmb3VuZD9hcmdzW2ktMV06ITF9LGlzVHlwZTpmdW5jdGlvbihleHByZXNzaW9uLHR5cGUpe3ZhciBwYXJ0PWV4cHJlc3Npb24ucGVlaygpLHJlc3VsdD0hMTtyZXR1cm4iPCIhPXR5cGUuY2hhckF0KDApPyhyZXN1bHQ9dGhpcy5pc0xpdGVyYWwocGFydCx0eXBlKSxyZXN1bHQmJmV4cHJlc3Npb24ubmV4dCgpKTp0aGlzLnNpbXBsZVt0eXBlXT8ocmVzdWx0PXRoaXMuc2ltcGxlW3R5cGVdKHBhcnQpLHJlc3VsdCYmZXhwcmVzc2lvbi5uZXh0KCkpOnJlc3VsdD10aGlzLmNvbXBsZXhbdHlwZV0oZXhwcmVzc2lvbikscmVzdWx0fSxzaW1wbGU6eyI8YWJzb2x1dGUtc2l6ZT4iOmZ1bmN0aW9uKHBhcnQpe3JldHVybiBWYWxpZGF0aW9uVHlwZXMuaXNMaXRlcmFsKHBhcnQsInh4LXNtYWxsIHwgeC1zbWFsbCB8IHNtYWxsIHwgbWVkaXVtIHwgbGFyZ2UgfCB4LWxhcmdlIHwgeHgtbGFyZ2UiKX0sIjxhdHRhY2htZW50PiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuIFZhbGlkYXRpb25UeXBlcy5pc0xpdGVyYWwocGFydCwic2Nyb2xsIHwgZml4ZWQgfCBsb2NhbCIpfSwiPGF0dHI+IjpmdW5jdGlvbihwYXJ0KXtyZXR1cm4iZnVuY3Rpb24iPT1wYXJ0LnR5cGUmJiJhdHRyIj09cGFydC5uYW1lfSwiPGJnLWltYWdlPiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuIHRoaXNbIjxpbWFnZT4iXShwYXJ0KXx8dGhpc1siPGdyYWRpZW50PiJdKHBhcnQpfHwibm9uZSI9PXBhcnR9LCI8Z3JhZGllbnQ+IjpmdW5jdGlvbihwYXJ0KXtyZXR1cm4iZnVuY3Rpb24iPT1wYXJ0LnR5cGUmJi9eKD86XFwtKD86bXN8bW96fG98d2Via2l0KVxcLSk/KD86cmVwZWF0aW5nXFwtKT8oPzpyYWRpYWxcXC18bGluZWFyXFwtKT9ncmFkaWVudC9pLnRlc3QocGFydCl9LCI8Ym94PiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuIFZhbGlkYXRpb25UeXBlcy5pc0xpdGVyYWwocGFydCwicGFkZGluZy1ib3ggfCBib3JkZXItYm94IHwgY29udGVudC1ib3giKX0sIjxjb250ZW50PiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuImZ1bmN0aW9uIj09cGFydC50eXBlJiYiY29udGVudCI9PXBhcnQubmFtZX0sIjxyZWxhdGl2ZS1zaXplPiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuIFZhbGlkYXRpb25UeXBlcy5pc0xpdGVyYWwocGFydCwic21hbGxlciB8IGxhcmdlciIpfSwiPGlkZW50PiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuImlkZW50aWZpZXIiPT1wYXJ0LnR5cGV9LCI8bGVuZ3RoPiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuImZ1bmN0aW9uIj09cGFydC50eXBlJiYvXig/OlxcLSg/Om1zfG1venxvfHdlYmtpdClcXC0pP2NhbGMvaS50ZXN0KHBhcnQpPyEwOiJsZW5ndGgiPT1wYXJ0LnR5cGV8fCJudW1iZXIiPT1wYXJ0LnR5cGV8fCJpbnRlZ2VyIj09cGFydC50eXBlfHwiMCI9PXBhcnR9LCI8Y29sb3I+IjpmdW5jdGlvbihwYXJ0KXtyZXR1cm4iY29sb3IiPT1wYXJ0LnR5cGV8fCJ0cmFuc3BhcmVudCI9PXBhcnR9LCI8bnVtYmVyPiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuIm51bWJlciI9PXBhcnQudHlwZXx8dGhpc1siPGludGVnZXI+Il0ocGFydCl9LCI8aW50ZWdlcj4iOmZ1bmN0aW9uKHBhcnQpe3JldHVybiJpbnRlZ2VyIj09cGFydC50eXBlfSwiPGxpbmU+IjpmdW5jdGlvbihwYXJ0KXtyZXR1cm4iaW50ZWdlciI9PXBhcnQudHlwZX0sIjxhbmdsZT4iOmZ1bmN0aW9uKHBhcnQpe3JldHVybiJhbmdsZSI9PXBhcnQudHlwZX0sIjx1cmk+IjpmdW5jdGlvbihwYXJ0KXtyZXR1cm4idXJpIj09cGFydC50eXBlfSwiPGltYWdlPiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuIHRoaXNbIjx1cmk+Il0ocGFydCl9LCI8cGVyY2VudGFnZT4iOmZ1bmN0aW9uKHBhcnQpe3JldHVybiJwZXJjZW50YWdlIj09cGFydC50eXBlfHwiMCI9PXBhcnR9LCI8Ym9yZGVyLXdpZHRoPiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuIHRoaXNbIjxsZW5ndGg+Il0ocGFydCl8fFZhbGlkYXRpb25UeXBlcy5pc0xpdGVyYWwocGFydCwidGhpbiB8IG1lZGl1bSB8IHRoaWNrIil9LCI8Ym9yZGVyLXN0eWxlPiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuIFZhbGlkYXRpb25UeXBlcy5pc0xpdGVyYWwocGFydCwibm9uZSB8IGhpZGRlbiB8IGRvdHRlZCB8IGRhc2hlZCB8IHNvbGlkIHwgZG91YmxlIHwgZ3Jvb3ZlIHwgcmlkZ2UgfCBpbnNldCB8IG91dHNldCIpfSwiPGNvbnRlbnQtc2l6aW5nPiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuIFZhbGlkYXRpb25UeXBlcy5pc0xpdGVyYWwocGFydCwiZmlsbC1hdmFpbGFibGUgfCAtbW96LWF2YWlsYWJsZSB8IC13ZWJraXQtZmlsbC1hdmFpbGFibGUgfCBtYXgtY29udGVudCB8IC1tb3otbWF4LWNvbnRlbnQgfCAtd2Via2l0LW1heC1jb250ZW50IHwgbWluLWNvbnRlbnQgfCAtbW96LW1pbi1jb250ZW50IHwgLXdlYmtpdC1taW4tY29udGVudCB8IGZpdC1jb250ZW50IHwgLW1vei1maXQtY29udGVudCB8IC13ZWJraXQtZml0LWNvbnRlbnQiKX0sIjxtYXJnaW4td2lkdGg+IjpmdW5jdGlvbihwYXJ0KXtyZXR1cm4gdGhpc1siPGxlbmd0aD4iXShwYXJ0KXx8dGhpc1siPHBlcmNlbnRhZ2U+Il0ocGFydCl8fFZhbGlkYXRpb25UeXBlcy5pc0xpdGVyYWwocGFydCwiYXV0byIpfSwiPHBhZGRpbmctd2lkdGg+IjpmdW5jdGlvbihwYXJ0KXtyZXR1cm4gdGhpc1siPGxlbmd0aD4iXShwYXJ0KXx8dGhpc1siPHBlcmNlbnRhZ2U+Il0ocGFydCl9LCI8c2hhcGU+IjpmdW5jdGlvbihwYXJ0KXtyZXR1cm4iZnVuY3Rpb24iPT1wYXJ0LnR5cGUmJigicmVjdCI9PXBhcnQubmFtZXx8Imluc2V0LXJlY3QiPT1wYXJ0Lm5hbWUpfSwiPHRpbWU+IjpmdW5jdGlvbihwYXJ0KXtyZXR1cm4idGltZSI9PXBhcnQudHlwZX0sIjxmbGV4LWdyb3c+IjpmdW5jdGlvbihwYXJ0KXtyZXR1cm4gdGhpc1siPG51bWJlcj4iXShwYXJ0KX0sIjxmbGV4LXNocmluaz4iOmZ1bmN0aW9uKHBhcnQpe3JldHVybiB0aGlzWyI8bnVtYmVyPiJdKHBhcnQpfSwiPHdpZHRoPiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuIHRoaXNbIjxtYXJnaW4td2lkdGg+Il0ocGFydCl9LCI8ZmxleC1iYXNpcz4iOmZ1bmN0aW9uKHBhcnQpe3JldHVybiB0aGlzWyI8d2lkdGg+Il0ocGFydCl9LCI8ZmxleC1kaXJlY3Rpb24+IjpmdW5jdGlvbihwYXJ0KXtyZXR1cm4gVmFsaWRhdGlvblR5cGVzLmlzTGl0ZXJhbChwYXJ0LCJyb3cgfCByb3ctcmV2ZXJzZSB8IGNvbHVtbiB8IGNvbHVtbi1yZXZlcnNlIil9LCI8ZmxleC13cmFwPiI6ZnVuY3Rpb24ocGFydCl7cmV0dXJuIFZhbGlkYXRpb25UeXBlcy5pc0xpdGVyYWwocGFydCwibm93cmFwIHwgd3JhcCB8IHdyYXAtcmV2ZXJzZSIpfX0sY29tcGxleDp7IjxiZy1wb3NpdGlvbj4iOmZ1bmN0aW9uKGV4cHJlc3Npb24pe2Zvcih2YXIgcmVzdWx0PSExLG51bWVyaWM9IjxwZXJjZW50YWdlPiB8IDxsZW5ndGg+Iix4RGlyPSJsZWZ0IHwgcmlnaHQiLHlEaXI9InRvcCB8IGJvdHRvbSIsY291bnQ9MDtleHByZXNzaW9uLnBlZWsoY291bnQpJiYiLCIhPWV4cHJlc3Npb24ucGVlayhjb3VudCk7KWNvdW50Kys7cmV0dXJuIDM+Y291bnQ/VmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24seERpcisiIHwgY2VudGVyIHwgIitudW1lcmljKT8ocmVzdWx0PSEwLFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLHlEaXIrIiB8IGNlbnRlciB8ICIrbnVtZXJpYykpOlZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLHlEaXIpJiYocmVzdWx0PSEwLFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLHhEaXIrIiB8IGNlbnRlciIpKTpWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbix4RGlyKT9WYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbix5RGlyKT8ocmVzdWx0PSEwLFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLG51bWVyaWMpKTpWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbixudW1lcmljKSYmKFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLHlEaXIpPyhyZXN1bHQ9ITAsVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sbnVtZXJpYykpOlZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCJjZW50ZXIiKSYmKHJlc3VsdD0hMCkpOlZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLHlEaXIpP1ZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLHhEaXIpPyhyZXN1bHQ9ITAsVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sbnVtZXJpYykpOlZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLG51bWVyaWMpJiYoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24seERpcik/KHJlc3VsdD0hMCxWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbixudW1lcmljKSk6VmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sImNlbnRlciIpJiYocmVzdWx0PSEwKSk6VmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sImNlbnRlciIpJiZWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbix4RGlyKyIgfCAiK3lEaXIpJiYocmVzdWx0PSEwLFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLG51bWVyaWMpKSxyZXN1bHR9LCI8Ymctc2l6ZT4iOmZ1bmN0aW9uKGV4cHJlc3Npb24pe3ZhciByZXN1bHQ9ITEsbnVtZXJpYz0iPHBlcmNlbnRhZ2U+IHwgPGxlbmd0aD4gfCBhdXRvIjtyZXR1cm4gVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sImNvdmVyIHwgY29udGFpbiIpP3Jlc3VsdD0hMDpWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbixudW1lcmljKSYmKHJlc3VsdD0hMCxWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbixudW1lcmljKSkscmVzdWx0fSwiPHJlcGVhdC1zdHlsZT4iOmZ1bmN0aW9uKGV4cHJlc3Npb24pe3ZhciBwYXJ0LHJlc3VsdD0hMSx2YWx1ZXM9InJlcGVhdCB8IHNwYWNlIHwgcm91bmQgfCBuby1yZXBlYXQiO3JldHVybiBleHByZXNzaW9uLmhhc05leHQoKSYmKHBhcnQ9ZXhwcmVzc2lvbi5uZXh0KCksVmFsaWRhdGlvblR5cGVzLmlzTGl0ZXJhbChwYXJ0LCJyZXBlYXQteCB8IHJlcGVhdC15Iik/cmVzdWx0PSEwOlZhbGlkYXRpb25UeXBlcy5pc0xpdGVyYWwocGFydCx2YWx1ZXMpJiYocmVzdWx0PSEwLGV4cHJlc3Npb24uaGFzTmV4dCgpJiZWYWxpZGF0aW9uVHlwZXMuaXNMaXRlcmFsKGV4cHJlc3Npb24ucGVlaygpLHZhbHVlcykmJmV4cHJlc3Npb24ubmV4dCgpKSkscmVzdWx0fSwiPHNoYWRvdz4iOmZ1bmN0aW9uKGV4cHJlc3Npb24pe3ZhciByZXN1bHQ9ITEsY291bnQ9MCxpbnNldD0hMSxjb2xvcj0hMTtpZihleHByZXNzaW9uLmhhc05leHQoKSl7Zm9yKFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCJpbnNldCIpJiYoaW5zZXQ9ITApLFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCI8Y29sb3I+IikmJihjb2xvcj0hMCk7VmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIjxsZW5ndGg+IikmJjQ+Y291bnQ7KWNvdW50Kys7ZXhwcmVzc2lvbi5oYXNOZXh0KCkmJihjb2xvcnx8VmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIjxjb2xvcj4iKSxpbnNldHx8VmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sImluc2V0IikpLHJlc3VsdD1jb3VudD49MiYmND49Y291bnR9cmV0dXJuIHJlc3VsdH0sIjx4LW9uZS1yYWRpdXM+IjpmdW5jdGlvbihleHByZXNzaW9uKXt2YXIgcmVzdWx0PSExLHNpbXBsZT0iPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhlcml0IjtyZXR1cm4gVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sc2ltcGxlKSYmKHJlc3VsdD0hMCxWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbixzaW1wbGUpKSxyZXN1bHR9LCI8ZmxleD4iOmZ1bmN0aW9uKGV4cHJlc3Npb24pe3ZhciBwYXJ0LHJlc3VsdD0hMTtpZihWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbiwibm9uZSB8IGluaGVyaXQiKT9yZXN1bHQ9ITA6VmFsaWRhdGlvblR5cGVzLmlzVHlwZShleHByZXNzaW9uLCI8ZmxleC1ncm93PiIpP2V4cHJlc3Npb24ucGVlaygpP1ZhbGlkYXRpb25UeXBlcy5pc1R5cGUoZXhwcmVzc2lvbiwiPGZsZXgtc2hyaW5rPiIpP3Jlc3VsdD1leHByZXNzaW9uLnBlZWsoKT9WYWxpZGF0aW9uVHlwZXMuaXNUeXBlKGV4cHJlc3Npb24sIjxmbGV4LWJhc2lzPiIpOiEwOlZhbGlkYXRpb25UeXBlcy5pc1R5cGUoZXhwcmVzc2lvbiwiPGZsZXgtYmFzaXM+IikmJihyZXN1bHQ9bnVsbD09PWV4cHJlc3Npb24ucGVlaygpKTpyZXN1bHQ9ITA6VmFsaWRhdGlvblR5cGVzLmlzVHlwZShleHByZXNzaW9uLCI8ZmxleC1iYXNpcz4iKSYmKHJlc3VsdD0hMCksIXJlc3VsdCl0aHJvdyBwYXJ0PWV4cHJlc3Npb24ucGVlaygpLG5ldyBWYWxpZGF0aW9uRXJyb3IoIkV4cGVjdGVkIChub25lIHwgWyA8ZmxleC1ncm93PiA8ZmxleC1zaHJpbms+PyB8fCA8ZmxleC1iYXNpcz4gXSkgYnV0IGZvdW5kIFwnIitleHByZXNzaW9uLnZhbHVlLnRleHQrIlwnLiIscGFydC5saW5lLHBhcnQuY29sKTtyZXR1cm4gcmVzdWx0fX19O3BhcnNlcmxpYi5jc3M9e0NvbG9yczpDb2xvcnMsQ29tYmluYXRvcjpDb21iaW5hdG9yLFBhcnNlcjpQYXJzZXIsUHJvcGVydHlOYW1lOlByb3BlcnR5TmFtZSxQcm9wZXJ0eVZhbHVlOlByb3BlcnR5VmFsdWUsUHJvcGVydHlWYWx1ZVBhcnQ6UHJvcGVydHlWYWx1ZVBhcnQsTWVkaWFGZWF0dXJlOk1lZGlhRmVhdHVyZSxNZWRpYVF1ZXJ5Ok1lZGlhUXVlcnksU2VsZWN0b3I6U2VsZWN0b3IsU2VsZWN0b3JQYXJ0OlNlbGVjdG9yUGFydCxTZWxlY3RvclN1YlBhcnQ6U2VsZWN0b3JTdWJQYXJ0LFNwZWNpZmljaXR5OlNwZWNpZmljaXR5LFRva2VuU3RyZWFtOlRva2VuU3RyZWFtLFRva2VuczpUb2tlbnMsVmFsaWRhdGlvbkVycm9yOlZhbGlkYXRpb25FcnJvcn19KCksZnVuY3Rpb24oKXtmb3IodmFyIHByb3AgaW4gcGFyc2VybGliKWV4cG9ydHNbcHJvcF09cGFyc2VybGliW3Byb3BdfSgpO3ZhciB1dGlsPXtpc0FycmF5OmZ1bmN0aW9uKGFyKXtyZXR1cm4gQXJyYXkuaXNBcnJheShhcil8fCJvYmplY3QiPT10eXBlb2YgYXImJiJbb2JqZWN0IEFycmF5XSI9PT1vYmplY3RUb1N0cmluZyhhcil9LGlzRGF0ZTpmdW5jdGlvbihkKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGQmJiJbb2JqZWN0IERhdGVdIj09PW9iamVjdFRvU3RyaW5nKGQpfSxpc1JlZ0V4cDpmdW5jdGlvbihyZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiByZSYmIltvYmplY3QgUmVnRXhwXSI9PT1vYmplY3RUb1N0cmluZyhyZSl9LGdldFJlZ0V4cEZsYWdzOmZ1bmN0aW9uKHJlKXt2YXIgZmxhZ3M9IiI7cmV0dXJuIHJlLmdsb2JhbCYmKGZsYWdzKz0iZyIpLHJlLmlnbm9yZUNhc2UmJihmbGFncys9ImkiKSxyZS5tdWx0aWxpbmUmJihmbGFncys9Im0iKSxmbGFnc319OyJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9Y2xvbmUpLGNsb25lLmNsb25lUHJvdG90eXBlPWZ1bmN0aW9uKHBhcmVudCl7aWYobnVsbD09PXBhcmVudClyZXR1cm4gbnVsbDt2YXIgYz1mdW5jdGlvbigpe307cmV0dXJuIGMucHJvdG90eXBlPXBhcmVudCxuZXcgY307dmFyIENTU0xpbnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhcHBseUVtYmVkZGVkUnVsZXNldCh0ZXh0LHJ1bGVzZXQpe3ZhciB2YWx1ZU1hcCxlbWJlZGRlZD10ZXh0JiZ0ZXh0Lm1hdGNoKGVtYmVkZGVkUnVsZXNldCkscnVsZXM9ZW1iZWRkZWQmJmVtYmVkZGVkWzFdO3JldHVybiBydWxlcyYmKHZhbHVlTWFwPXsidHJ1ZSI6MiwiIjoxLCJmYWxzZSI6MCwyOjIsMToxLDA6MH0scnVsZXMudG9Mb3dlckNhc2UoKS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocnVsZSl7dmFyIHBhaXI9cnVsZS5zcGxpdCgiOiIpLHByb3BlcnR5PXBhaXJbMF18fCIiLHZhbHVlPXBhaXJbMV18fCIiO3J1bGVzZXRbcHJvcGVydHkudHJpbSgpXT12YWx1ZU1hcFt2YWx1ZS50cmltKCldfSkpLHJ1bGVzZXR9dmFyIHJ1bGVzPVtdLGZvcm1hdHRlcnM9W10sZW1iZWRkZWRSdWxlc2V0PS9cXC9cXCpjc3NsaW50KFteXFwqXSopXFwqXFwvLyxhcGk9bmV3IHBhcnNlcmxpYi51dGlsLkV2ZW50VGFyZ2V0O3JldHVybiBhcGkudmVyc2lvbj0iQFZFUlNJT05AIixhcGkuYWRkUnVsZT1mdW5jdGlvbihydWxlKXtydWxlcy5wdXNoKHJ1bGUpLHJ1bGVzW3J1bGUuaWRdPXJ1bGV9LGFwaS5jbGVhclJ1bGVzPWZ1bmN0aW9uKCl7cnVsZXM9W119LGFwaS5nZXRSdWxlcz1mdW5jdGlvbigpe3JldHVybltdLmNvbmNhdChydWxlcykuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLmlkPmIuaWQ/MTowfSl9LGFwaS5nZXRSdWxlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciBydWxlc2V0PXt9LGk9MCxsZW49cnVsZXMubGVuZ3RoO2xlbj5pOylydWxlc2V0W3J1bGVzW2krK10uaWRdPTE7cmV0dXJuIHJ1bGVzZXR9LGFwaS5hZGRGb3JtYXR0ZXI9ZnVuY3Rpb24oZm9ybWF0dGVyKXtmb3JtYXR0ZXJzW2Zvcm1hdHRlci5pZF09Zm9ybWF0dGVyfSxhcGkuZ2V0Rm9ybWF0dGVyPWZ1bmN0aW9uKGZvcm1hdElkKXtyZXR1cm4gZm9ybWF0dGVyc1tmb3JtYXRJZF19LGFwaS5mb3JtYXQ9ZnVuY3Rpb24ocmVzdWx0cyxmaWxlbmFtZSxmb3JtYXRJZCxvcHRpb25zKXt2YXIgZm9ybWF0dGVyPXRoaXMuZ2V0Rm9ybWF0dGVyKGZvcm1hdElkKSxyZXN1bHQ9bnVsbDtyZXR1cm4gZm9ybWF0dGVyJiYocmVzdWx0PWZvcm1hdHRlci5zdGFydEZvcm1hdCgpLHJlc3VsdCs9Zm9ybWF0dGVyLmZvcm1hdFJlc3VsdHMocmVzdWx0cyxmaWxlbmFtZSxvcHRpb25zfHx7fSkscmVzdWx0Kz1mb3JtYXR0ZXIuZW5kRm9ybWF0KCkpLHJlc3VsdH0sYXBpLmhhc0Zvcm1hdD1mdW5jdGlvbihmb3JtYXRJZCl7cmV0dXJuIGZvcm1hdHRlcnMuaGFzT3duUHJvcGVydHkoZm9ybWF0SWQpfSxhcGkudmVyaWZ5PWZ1bmN0aW9uKHRleHQscnVsZXNldCl7dmFyIHJlcG9ydGVyLGxpbmVzLHJlcG9ydCxpPTAscGFyc2VyPW5ldyBwYXJzZXJsaWIuY3NzLlBhcnNlcih7c3RhckhhY2s6ITAsaWVGaWx0ZXJzOiEwLHVuZGVyc2NvcmVIYWNrOiEwLHN0cmljdDohMX0pO2xpbmVzPXRleHQucmVwbGFjZSgvXFxuXFxyPy9nLCIkc3BsaXQkIikuc3BsaXQoIiRzcGxpdCQiKSxydWxlc2V0fHwocnVsZXNldD10aGlzLmdldFJ1bGVzZXQoKSksZW1iZWRkZWRSdWxlc2V0LnRlc3QodGV4dCkmJihydWxlc2V0PWNsb25lKHJ1bGVzZXQpLHJ1bGVzZXQ9YXBwbHlFbWJlZGRlZFJ1bGVzZXQodGV4dCxydWxlc2V0KSkscmVwb3J0ZXI9bmV3IFJlcG9ydGVyKGxpbmVzLHJ1bGVzZXQpLHJ1bGVzZXQuZXJyb3JzPTI7Zm9yKGkgaW4gcnVsZXNldClydWxlc2V0Lmhhc093blByb3BlcnR5KGkpJiZydWxlc2V0W2ldJiZydWxlc1tpXSYmcnVsZXNbaV0uaW5pdChwYXJzZXIscmVwb3J0ZXIpO3RyeXtwYXJzZXIucGFyc2UodGV4dCl9Y2F0Y2goZXgpe3JlcG9ydGVyLmVycm9yKCJGYXRhbCBlcnJvciwgY2Fubm90IGNvbnRpbnVlOiAiK2V4Lm1lc3NhZ2UsZXgubGluZSxleC5jb2wse30pfXJldHVybiByZXBvcnQ9e21lc3NhZ2VzOnJlcG9ydGVyLm1lc3NhZ2VzLHN0YXRzOnJlcG9ydGVyLnN0YXRzLHJ1bGVzZXQ6cmVwb3J0ZXIucnVsZXNldH0scmVwb3J0Lm1lc3NhZ2VzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5yb2xsdXAmJiFiLnJvbGx1cD8xOiFhLnJvbGx1cCYmYi5yb2xsdXA/LTE6YS5saW5lLWIubGluZX0pLHJlcG9ydH0sYXBpfSgpO1JlcG9ydGVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UmVwb3J0ZXIsZXJyb3I6ZnVuY3Rpb24obWVzc2FnZSxsaW5lLGNvbCxydWxlKXt0aGlzLm1lc3NhZ2VzLnB1c2goe3R5cGU6ImVycm9yIixsaW5lOmxpbmUsY29sOmNvbCxtZXNzYWdlOm1lc3NhZ2UsZXZpZGVuY2U6dGhpcy5saW5lc1tsaW5lLTFdLHJ1bGU6cnVsZXx8e319KX0sd2FybjpmdW5jdGlvbihtZXNzYWdlLGxpbmUsY29sLHJ1bGUpe3RoaXMucmVwb3J0KG1lc3NhZ2UsbGluZSxjb2wscnVsZSl9LHJlcG9ydDpmdW5jdGlvbihtZXNzYWdlLGxpbmUsY29sLHJ1bGUpe3RoaXMubWVzc2FnZXMucHVzaCh7dHlwZToyPT09dGhpcy5ydWxlc2V0W3J1bGUuaWRdPyJlcnJvciI6Indhcm5pbmciLGxpbmU6bGluZSxjb2w6Y29sLG1lc3NhZ2U6bWVzc2FnZSxldmlkZW5jZTp0aGlzLmxpbmVzW2xpbmUtMV0scnVsZTpydWxlfSl9LGluZm86ZnVuY3Rpb24obWVzc2FnZSxsaW5lLGNvbCxydWxlKXt0aGlzLm1lc3NhZ2VzLnB1c2goe3R5cGU6ImluZm8iLGxpbmU6bGluZSxjb2w6Y29sLG1lc3NhZ2U6bWVzc2FnZSxldmlkZW5jZTp0aGlzLmxpbmVzW2xpbmUtMV0scnVsZTpydWxlfSl9LHJvbGx1cEVycm9yOmZ1bmN0aW9uKG1lc3NhZ2UscnVsZSl7dGhpcy5tZXNzYWdlcy5wdXNoKHt0eXBlOiJlcnJvciIscm9sbHVwOiEwLG1lc3NhZ2U6bWVzc2FnZSxydWxlOnJ1bGV9KX0scm9sbHVwV2FybjpmdW5jdGlvbihtZXNzYWdlLHJ1bGUpe3RoaXMubWVzc2FnZXMucHVzaCh7dHlwZToid2FybmluZyIscm9sbHVwOiEwLG1lc3NhZ2U6bWVzc2FnZSxydWxlOnJ1bGV9KX0sc3RhdDpmdW5jdGlvbihuYW1lLHZhbHVlKXt0aGlzLnN0YXRzW25hbWVdPXZhbHVlfX0sQ1NTTGludC5fUmVwb3J0ZXI9UmVwb3J0ZXIsQ1NTTGludC5VdGlsPXttaXg6ZnVuY3Rpb24ocmVjZWl2ZXIsc3VwcGxpZXIpe3ZhciBwcm9wO2Zvcihwcm9wIGluIHN1cHBsaWVyKXN1cHBsaWVyLmhhc093blByb3BlcnR5KHByb3ApJiYocmVjZWl2ZXJbcHJvcF09c3VwcGxpZXJbcHJvcF0pO3JldHVybiBwcm9wfSxpbmRleE9mOmZ1bmN0aW9uKHZhbHVlcyx2YWx1ZSl7aWYodmFsdWVzLmluZGV4T2YpcmV0dXJuIHZhbHVlcy5pbmRleE9mKHZhbHVlKTtmb3IodmFyIGk9MCxsZW49dmFsdWVzLmxlbmd0aDtsZW4+aTtpKyspaWYodmFsdWVzW2ldPT09dmFsdWUpcmV0dXJuIGk7cmV0dXJuLTF9LGZvckVhY2g6ZnVuY3Rpb24odmFsdWVzLGZ1bmMpe2lmKHZhbHVlcy5mb3JFYWNoKXJldHVybiB2YWx1ZXMuZm9yRWFjaChmdW5jKTtmb3IodmFyIGk9MCxsZW49dmFsdWVzLmxlbmd0aDtsZW4+aTtpKyspZnVuYyh2YWx1ZXNbaV0saSx2YWx1ZXMpfX0sQ1NTTGludC5hZGRSdWxlKHtpZDoiYWRqb2luaW5nLWNsYXNzZXMiLG5hbWU6IkRpc2FsbG93IGFkam9pbmluZyBjbGFzc2VzIixkZXNjOiJEb25cJ3QgdXNlIGFkam9pbmluZyBjbGFzc2VzLiIsYnJvd3NlcnM6IklFNiIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe3ZhciBydWxlPXRoaXM7cGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLGZ1bmN0aW9uKGV2ZW50KXt2YXIgc2VsZWN0b3IscGFydCxtb2RpZmllcixjbGFzc0NvdW50LGksaixrLHNlbGVjdG9ycz1ldmVudC5zZWxlY3RvcnM7Zm9yKGk9MDtzZWxlY3RvcnMubGVuZ3RoPmk7aSsrKWZvcihzZWxlY3Rvcj1zZWxlY3RvcnNbaV0saj0wO3NlbGVjdG9yLnBhcnRzLmxlbmd0aD5qO2orKylpZihwYXJ0PXNlbGVjdG9yLnBhcnRzW2pdLHBhcnQudHlwZT09PXBhcnNlci5TRUxFQ1RPUl9QQVJUX1RZUEUpZm9yKGNsYXNzQ291bnQ9MCxrPTA7cGFydC5tb2RpZmllcnMubGVuZ3RoPms7aysrKW1vZGlmaWVyPXBhcnQubW9kaWZpZXJzW2tdLCJjbGFzcyI9PT1tb2RpZmllci50eXBlJiZjbGFzc0NvdW50KyssY2xhc3NDb3VudD4xJiZyZXBvcnRlci5yZXBvcnQoIkRvblwndCB1c2UgYWRqb2luaW5nIGNsYXNzZXMuIixwYXJ0LmxpbmUscGFydC5jb2wscnVsZSl9KX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJib3gtbW9kZWwiLG5hbWU6IkJld2FyZSBvZiBicm9rZW4gYm94IHNpemUiLGRlc2M6IkRvblwndCB1c2Ugd2lkdGggb3IgaGVpZ2h0IHdoZW4gdXNpbmcgcGFkZGluZyBvciBib3JkZXIuIixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7ZnVuY3Rpb24gc3RhcnRSdWxlKCl7cHJvcGVydGllcz17fSxib3hTaXppbmc9ITF9ZnVuY3Rpb24gZW5kUnVsZSgpe3ZhciBwcm9wLHZhbHVlO2lmKCFib3hTaXppbmcpe2lmKHByb3BlcnRpZXMuaGVpZ2h0KWZvcihwcm9wIGluIGhlaWdodFByb3BlcnRpZXMpaGVpZ2h0UHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSYmcHJvcGVydGllc1twcm9wXSYmKHZhbHVlPXByb3BlcnRpZXNbcHJvcF0udmFsdWUsKCJwYWRkaW5nIiE9PXByb3B8fDIhPT12YWx1ZS5wYXJ0cy5sZW5ndGh8fDAhPT12YWx1ZS5wYXJ0c1swXS52YWx1ZSkmJnJlcG9ydGVyLnJlcG9ydCgiVXNpbmcgaGVpZ2h0IHdpdGggIitwcm9wKyIgY2FuIHNvbWV0aW1lcyBtYWtlIGVsZW1lbnRzIGxhcmdlciB0aGFuIHlvdSBleHBlY3QuIixwcm9wZXJ0aWVzW3Byb3BdLmxpbmUscHJvcGVydGllc1twcm9wXS5jb2wscnVsZSkpO2lmKHByb3BlcnRpZXMud2lkdGgpZm9yKHByb3AgaW4gd2lkdGhQcm9wZXJ0aWVzKXdpZHRoUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSYmcHJvcGVydGllc1twcm9wXSYmKHZhbHVlPXByb3BlcnRpZXNbcHJvcF0udmFsdWUsKCJwYWRkaW5nIiE9PXByb3B8fDIhPT12YWx1ZS5wYXJ0cy5sZW5ndGh8fDAhPT12YWx1ZS5wYXJ0c1sxXS52YWx1ZSkmJnJlcG9ydGVyLnJlcG9ydCgiVXNpbmcgd2lkdGggd2l0aCAiK3Byb3ArIiBjYW4gc29tZXRpbWVzIG1ha2UgZWxlbWVudHMgbGFyZ2VyIHRoYW4geW91IGV4cGVjdC4iLHByb3BlcnRpZXNbcHJvcF0ubGluZSxwcm9wZXJ0aWVzW3Byb3BdLmNvbCxydWxlKSl9fXZhciBwcm9wZXJ0aWVzLHJ1bGU9dGhpcyx3aWR0aFByb3BlcnRpZXM9e2JvcmRlcjoxLCJib3JkZXItbGVmdCI6MSwiYm9yZGVyLXJpZ2h0IjoxLHBhZGRpbmc6MSwicGFkZGluZy1sZWZ0IjoxLCJwYWRkaW5nLXJpZ2h0IjoxfSxoZWlnaHRQcm9wZXJ0aWVzPXtib3JkZXI6MSwiYm9yZGVyLWJvdHRvbSI6MSwiYm9yZGVyLXRvcCI6MSxwYWRkaW5nOjEsInBhZGRpbmctYm90dG9tIjoxLCJwYWRkaW5nLXRvcCI6MX0sYm94U2l6aW5nPSExO3BhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIixzdGFydFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRmb250ZmFjZSIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cGFnZSIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cGFnZW1hcmdpbiIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0a2V5ZnJhbWVydWxlIixzdGFydFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLGZ1bmN0aW9uKGV2ZW50KXt2YXIgbmFtZT1ldmVudC5wcm9wZXJ0eS50ZXh0LnRvTG93ZXJDYXNlKCk7aGVpZ2h0UHJvcGVydGllc1tuYW1lXXx8d2lkdGhQcm9wZXJ0aWVzW25hbWVdPy9eMFxcUyokLy50ZXN0KGV2ZW50LnZhbHVlKXx8ImJvcmRlciI9PT1uYW1lJiYibm9uZSI9PSIiK2V2ZW50LnZhbHVlfHwocHJvcGVydGllc1tuYW1lXT17bGluZTpldmVudC5wcm9wZXJ0eS5saW5lLGNvbDpldmVudC5wcm9wZXJ0eS5jb2wsdmFsdWU6ZXZlbnQudmFsdWV9KTovXih3aWR0aHxoZWlnaHQpL2kudGVzdChuYW1lKSYmL14obGVuZ3RofHBlcmNlbnRhZ2UpLy50ZXN0KGV2ZW50LnZhbHVlLnBhcnRzWzBdLnR5cGUpP3Byb3BlcnRpZXNbbmFtZV09MToiYm94LXNpemluZyI9PT1uYW1lJiYoYm94U2l6aW5nPSEwKX0pLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kcnVsZSIsZW5kUnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJlbmRmb250ZmFjZSIsZW5kUnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJlbmRwYWdlIixlbmRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHBhZ2VtYXJnaW4iLGVuZFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5ka2V5ZnJhbWVydWxlIixlbmRSdWxlKX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJib3gtc2l6aW5nIixuYW1lOiJEaXNhbGxvdyB1c2Ugb2YgYm94LXNpemluZyIsZGVzYzoiVGhlIGJveC1zaXppbmcgcHJvcGVydGllcyBpc25cJ3Qgc3VwcG9ydGVkIGluIElFNiBhbmQgSUU3LiIsYnJvd3NlcnM6IklFNiwgSUU3Iix0YWdzOlsiQ29tcGF0aWJpbGl0eSJdLGluaXQ6ZnVuY3Rpb24ocGFyc2VyLHJlcG9ydGVyKXt2YXIgcnVsZT10aGlzO3BhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLGZ1bmN0aW9uKGV2ZW50KXt2YXIgbmFtZT1ldmVudC5wcm9wZXJ0eS50ZXh0LnRvTG93ZXJDYXNlKCk7ImJveC1zaXppbmciPT09bmFtZSYmcmVwb3J0ZXIucmVwb3J0KCJUaGUgYm94LXNpemluZyBwcm9wZXJ0eSBpc25cJ3Qgc3VwcG9ydGVkIGluIElFNiBhbmQgSUU3LiIsZXZlbnQubGluZSxldmVudC5jb2wscnVsZSl9KX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJidWxsZXRwcm9vZi1mb250LWZhY2UiLG5hbWU6IlVzZSB0aGUgYnVsbGV0cHJvb2YgQGZvbnQtZmFjZSBzeW50YXgiLGRlc2M6IlVzZSB0aGUgYnVsbGV0cHJvb2YgQGZvbnQtZmFjZSBzeW50YXggdG8gYXZvaWQgNDA0XCdzIGluIG9sZCBJRSAoaHR0cDovL3d3dy5mb250c3ByaW5nLmNvbS9ibG9nL3RoZS1uZXctYnVsbGV0cHJvb2YtZm9udC1mYWNlLXN5bnRheCkuIixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7dmFyIGxpbmUsY29sLHJ1bGU9dGhpcyxmb250RmFjZVJ1bGU9ITEsZmlyc3RTcmM9ITAscnVsZUZhaWxlZD0hMTtwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0Zm9udGZhY2UiLGZ1bmN0aW9uKCl7Zm9udEZhY2VSdWxlPSEwfSkscGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsZnVuY3Rpb24oZXZlbnQpe2lmKGZvbnRGYWNlUnVsZSl7dmFyIHByb3BlcnR5TmFtZT0oIiIrZXZlbnQucHJvcGVydHkpLnRvTG93ZXJDYXNlKCksdmFsdWU9IiIrZXZlbnQudmFsdWU7aWYobGluZT1ldmVudC5saW5lLGNvbD1ldmVudC5jb2wsInNyYyI9PT1wcm9wZXJ0eU5hbWUpe3ZhciByZWdleD0vXlxccz91cmxcXChbXCciXS4rXFwuZW90XFw/LipbXCciXVxcKVxccypmb3JtYXRcXChbXCciXWVtYmVkZGVkLW9wZW50eXBlW1wnIl1cXCkuKiQvaTshdmFsdWUubWF0Y2gocmVnZXgpJiZmaXJzdFNyYz8ocnVsZUZhaWxlZD0hMCxmaXJzdFNyYz0hMSk6dmFsdWUubWF0Y2gocmVnZXgpJiYhZmlyc3RTcmMmJihydWxlRmFpbGVkPSExKX19fSkscGFyc2VyLmFkZExpc3RlbmVyKCJlbmRmb250ZmFjZSIsZnVuY3Rpb24oKXtmb250RmFjZVJ1bGU9ITEscnVsZUZhaWxlZCYmcmVwb3J0ZXIucmVwb3J0KCJAZm9udC1mYWNlIGRlY2xhcmF0aW9uIGRvZXNuXCd0IGZvbGxvdyB0aGUgZm9udHNwcmluZyBidWxsZXRwcm9vZiBzeW50YXguIixsaW5lLGNvbCxydWxlKX0pfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6ImNvbXBhdGlibGUtdmVuZG9yLXByZWZpeGVzIixuYW1lOiJSZXF1aXJlIGNvbXBhdGlibGUgdmVuZG9yIHByZWZpeGVzIixkZXNjOiJJbmNsdWRlIGFsbCBjb21wYXRpYmxlIHZlbmRvciBwcmVmaXhlcyB0byByZWFjaCBhIHdpZGVyIHJhbmdlIG9mIHVzZXJzLiIsYnJvd3NlcnM6IkFsbCIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe3ZhciBjb21wYXRpYmxlUHJlZml4ZXMscHJvcGVydGllcyxwcm9wLHZhcmlhdGlvbnMscHJlZml4ZWQsaSxsZW4scnVsZT10aGlzLGluS2V5RnJhbWU9ITEsYXJyYXlQdXNoPUFycmF5LnByb3RvdHlwZS5wdXNoLGFwcGx5VG89W107Y29tcGF0aWJsZVByZWZpeGVzPXthbmltYXRpb246IndlYmtpdCBtb3oiLCJhbmltYXRpb24tZGVsYXkiOiJ3ZWJraXQgbW96IiwiYW5pbWF0aW9uLWRpcmVjdGlvbiI6IndlYmtpdCBtb3oiLCJhbmltYXRpb24tZHVyYXRpb24iOiJ3ZWJraXQgbW96IiwiYW5pbWF0aW9uLWZpbGwtbW9kZSI6IndlYmtpdCBtb3oiLCJhbmltYXRpb24taXRlcmF0aW9uLWNvdW50Ijoid2Via2l0IG1veiIsImFuaW1hdGlvbi1uYW1lIjoid2Via2l0IG1veiIsImFuaW1hdGlvbi1wbGF5LXN0YXRlIjoid2Via2l0IG1veiIsImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iOiJ3ZWJraXQgbW96IixhcHBlYXJhbmNlOiJ3ZWJraXQgbW96IiwiYm9yZGVyLWVuZCI6IndlYmtpdCBtb3oiLCJib3JkZXItZW5kLWNvbG9yIjoid2Via2l0IG1veiIsImJvcmRlci1lbmQtc3R5bGUiOiJ3ZWJraXQgbW96IiwiYm9yZGVyLWVuZC13aWR0aCI6IndlYmtpdCBtb3oiLCJib3JkZXItaW1hZ2UiOiJ3ZWJraXQgbW96IG8iLCJib3JkZXItcmFkaXVzIjoid2Via2l0IiwiYm9yZGVyLXN0YXJ0Ijoid2Via2l0IG1veiIsImJvcmRlci1zdGFydC1jb2xvciI6IndlYmtpdCBtb3oiLCJib3JkZXItc3RhcnQtc3R5bGUiOiJ3ZWJraXQgbW96IiwiYm9yZGVyLXN0YXJ0LXdpZHRoIjoid2Via2l0IG1veiIsImJveC1hbGlnbiI6IndlYmtpdCBtb3ogbXMiLCJib3gtZGlyZWN0aW9uIjoid2Via2l0IG1veiBtcyIsImJveC1mbGV4Ijoid2Via2l0IG1veiBtcyIsImJveC1saW5lcyI6IndlYmtpdCBtcyIsImJveC1vcmRpbmFsLWdyb3VwIjoid2Via2l0IG1veiBtcyIsImJveC1vcmllbnQiOiJ3ZWJraXQgbW96IG1zIiwiYm94LXBhY2siOiJ3ZWJraXQgbW96IG1zIiwiYm94LXNpemluZyI6IndlYmtpdCBtb3oiLCJib3gtc2hhZG93Ijoid2Via2l0IG1veiIsImNvbHVtbi1jb3VudCI6IndlYmtpdCBtb3ogbXMiLCJjb2x1bW4tZ2FwIjoid2Via2l0IG1veiBtcyIsImNvbHVtbi1ydWxlIjoid2Via2l0IG1veiBtcyIsImNvbHVtbi1ydWxlLWNvbG9yIjoid2Via2l0IG1veiBtcyIsImNvbHVtbi1ydWxlLXN0eWxlIjoid2Via2l0IG1veiBtcyIsImNvbHVtbi1ydWxlLXdpZHRoIjoid2Via2l0IG1veiBtcyIsImNvbHVtbi13aWR0aCI6IndlYmtpdCBtb3ogbXMiLGh5cGhlbnM6ImVwdWIgbW96IiwibGluZS1icmVhayI6IndlYmtpdCBtcyIsIm1hcmdpbi1lbmQiOiJ3ZWJraXQgbW96IiwibWFyZ2luLXN0YXJ0Ijoid2Via2l0IG1veiIsIm1hcnF1ZWUtc3BlZWQiOiJ3ZWJraXQgd2FwIiwibWFycXVlZS1zdHlsZSI6IndlYmtpdCB3YXAiLCJwYWRkaW5nLWVuZCI6IndlYmtpdCBtb3oiLCJwYWRkaW5nLXN0YXJ0Ijoid2Via2l0IG1veiIsInRhYi1zaXplIjoibW96IG8iLCJ0ZXh0LXNpemUtYWRqdXN0Ijoid2Via2l0IG1zIix0cmFuc2Zvcm06IndlYmtpdCBtb3ogbXMgbyIsInRyYW5zZm9ybS1vcmlnaW4iOiJ3ZWJraXQgbW96IG1zIG8iLHRyYW5zaXRpb246IndlYmtpdCBtb3ogbyIsInRyYW5zaXRpb24tZGVsYXkiOiJ3ZWJraXQgbW96IG8iLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIjoid2Via2l0IG1veiBvIiwidHJhbnNpdGlvbi1wcm9wZXJ0eSI6IndlYmtpdCBtb3ogbyIsInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIjoid2Via2l0IG1veiBvIiwidXNlci1tb2RpZnkiOiJ3ZWJraXQgbW96IiwidXNlci1zZWxlY3QiOiJ3ZWJraXQgbW96IG1zIiwid29yZC1icmVhayI6ImVwdWIgbXMiLCJ3cml0aW5nLW1vZGUiOiJlcHViIG1zIn07Zm9yKHByb3AgaW4gY29tcGF0aWJsZVByZWZpeGVzKWlmKGNvbXBhdGlibGVQcmVmaXhlcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSl7Zm9yKHZhcmlhdGlvbnM9W10scHJlZml4ZWQ9Y29tcGF0aWJsZVByZWZpeGVzW3Byb3BdLnNwbGl0KCIgIiksaT0wLGxlbj1wcmVmaXhlZC5sZW5ndGg7bGVuPmk7aSsrKXZhcmlhdGlvbnMucHVzaCgiLSIrcHJlZml4ZWRbaV0rIi0iK3Byb3ApO2NvbXBhdGlibGVQcmVmaXhlc1twcm9wXT12YXJpYXRpb25zLGFycmF5UHVzaC5hcHBseShhcHBseVRvLHZhcmlhdGlvbnMpfXBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIixmdW5jdGlvbigpe3Byb3BlcnRpZXM9W119KSxwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0a2V5ZnJhbWVzIixmdW5jdGlvbihldmVudCl7aW5LZXlGcmFtZT1ldmVudC5wcmVmaXh8fCEwfSkscGFyc2VyLmFkZExpc3RlbmVyKCJlbmRrZXlmcmFtZXMiLGZ1bmN0aW9uKCl7aW5LZXlGcmFtZT0hMX0pLHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLGZ1bmN0aW9uKGV2ZW50KXt2YXIgbmFtZT1ldmVudC5wcm9wZXJ0eTtDU1NMaW50LlV0aWwuaW5kZXhPZihhcHBseVRvLG5hbWUudGV4dCk+LTEmJihpbktleUZyYW1lJiYic3RyaW5nIj09dHlwZW9mIGluS2V5RnJhbWUmJjA9PT1uYW1lLnRleHQuaW5kZXhPZigiLSIraW5LZXlGcmFtZSsiLSIpfHxwcm9wZXJ0aWVzLnB1c2gobmFtZSkpfSkscGFyc2VyLmFkZExpc3RlbmVyKCJlbmRydWxlIixmdW5jdGlvbigpe2lmKHByb3BlcnRpZXMubGVuZ3RoKXt2YXIgaSxsZW4sbmFtZSxwcm9wLHZhcmlhdGlvbnMsdmFsdWUsZnVsbCxhY3R1YWwsaXRlbSxwcm9wZXJ0aWVzU3BlY2lmaWVkLHByb3BlcnR5R3JvdXBzPXt9O2ZvcihpPTAsbGVuPXByb3BlcnRpZXMubGVuZ3RoO2xlbj5pO2krKyl7bmFtZT1wcm9wZXJ0aWVzW2ldO2Zvcihwcm9wIGluIGNvbXBhdGlibGVQcmVmaXhlcyljb21wYXRpYmxlUHJlZml4ZXMuaGFzT3duUHJvcGVydHkocHJvcCkmJih2YXJpYXRpb25zPWNvbXBhdGlibGVQcmVmaXhlc1twcm9wXSxDU1NMaW50LlV0aWwuaW5kZXhPZih2YXJpYXRpb25zLG5hbWUudGV4dCk+LTEmJihwcm9wZXJ0eUdyb3Vwc1twcm9wXXx8KHByb3BlcnR5R3JvdXBzW3Byb3BdPXtmdWxsOnZhcmlhdGlvbnMuc2xpY2UoMCksYWN0dWFsOltdLGFjdHVhbE5vZGVzOltdfSksLTE9PT1DU1NMaW50LlV0aWwuaW5kZXhPZihwcm9wZXJ0eUdyb3Vwc1twcm9wXS5hY3R1YWwsbmFtZS50ZXh0KSYmKHByb3BlcnR5R3JvdXBzW3Byb3BdLmFjdHVhbC5wdXNoKG5hbWUudGV4dCkscHJvcGVydHlHcm91cHNbcHJvcF0uYWN0dWFsTm9kZXMucHVzaChuYW1lKSkpKX1mb3IocHJvcCBpbiBwcm9wZXJ0eUdyb3VwcylpZihwcm9wZXJ0eUdyb3Vwcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSYmKHZhbHVlPXByb3BlcnR5R3JvdXBzW3Byb3BdLGZ1bGw9dmFsdWUuZnVsbCxhY3R1YWw9dmFsdWUuYWN0dWFsLGZ1bGwubGVuZ3RoPmFjdHVhbC5sZW5ndGgpKWZvcihpPTAsbGVuPWZ1bGwubGVuZ3RoO2xlbj5pO2krKylpdGVtPWZ1bGxbaV0sLTE9PT1DU1NMaW50LlV0aWwuaW5kZXhPZihhY3R1YWwsaXRlbSkmJihwcm9wZXJ0aWVzU3BlY2lmaWVkPTE9PT1hY3R1YWwubGVuZ3RoP2FjdHVhbFswXToyPT09YWN0dWFsLmxlbmd0aD9hY3R1YWwuam9pbigiIGFuZCAiKTphY3R1YWwuam9pbigiLCAiKSxyZXBvcnRlci5yZXBvcnQoIlRoZSBwcm9wZXJ0eSAiK2l0ZW0rIiBpcyBjb21wYXRpYmxlIHdpdGggIitwcm9wZXJ0aWVzU3BlY2lmaWVkKyIgYW5kIHNob3VsZCBiZSBpbmNsdWRlZCBhcyB3ZWxsLiIsdmFsdWUuYWN0dWFsTm9kZXNbMF0ubGluZSx2YWx1ZS5hY3R1YWxOb2Rlc1swXS5jb2wscnVsZSkpfX0pfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6ImRpc3BsYXktcHJvcGVydHktZ3JvdXBpbmciLG5hbWU6IlJlcXVpcmUgcHJvcGVydGllcyBhcHByb3ByaWF0ZSBmb3IgZGlzcGxheSIsZGVzYzoiQ2VydGFpbiBwcm9wZXJ0aWVzIHNob3VsZG5cJ3QgYmUgdXNlZCB3aXRoIGNlcnRhaW4gZGlzcGxheSBwcm9wZXJ0eSB2YWx1ZXMuIixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7ZnVuY3Rpb24gcmVwb3J0UHJvcGVydHkobmFtZSxkaXNwbGF5LG1zZyl7cHJvcGVydGllc1tuYW1lXSYmKCJzdHJpbmciIT10eXBlb2YgcHJvcGVydGllc1RvQ2hlY2tbbmFtZV18fHByb3BlcnRpZXNbbmFtZV0udmFsdWUudG9Mb3dlckNhc2UoKSE9PXByb3BlcnRpZXNUb0NoZWNrW25hbWVdKSYmcmVwb3J0ZXIucmVwb3J0KG1zZ3x8bmFtZSsiIGNhblwndCBiZSB1c2VkIHdpdGggZGlzcGxheTogIitkaXNwbGF5KyIuIixwcm9wZXJ0aWVzW25hbWVdLmxpbmUscHJvcGVydGllc1tuYW1lXS5jb2wscnVsZSl9ZnVuY3Rpb24gc3RhcnRSdWxlKCl7cHJvcGVydGllcz17fX1mdW5jdGlvbiBlbmRSdWxlKCl7dmFyIGRpc3BsYXk9cHJvcGVydGllcy5kaXNwbGF5P3Byb3BlcnRpZXMuZGlzcGxheS52YWx1ZTpudWxsO2lmKGRpc3BsYXkpc3dpdGNoKGRpc3BsYXkpe2Nhc2UiaW5saW5lIjpyZXBvcnRQcm9wZXJ0eSgiaGVpZ2h0IixkaXNwbGF5KSxyZXBvcnRQcm9wZXJ0eSgid2lkdGgiLGRpc3BsYXkpLHJlcG9ydFByb3BlcnR5KCJtYXJnaW4iLGRpc3BsYXkpLHJlcG9ydFByb3BlcnR5KCJtYXJnaW4tdG9wIixkaXNwbGF5KSxyZXBvcnRQcm9wZXJ0eSgibWFyZ2luLWJvdHRvbSIsZGlzcGxheSkscmVwb3J0UHJvcGVydHkoImZsb2F0IixkaXNwbGF5LCJkaXNwbGF5OmlubGluZSBoYXMgbm8gZWZmZWN0IG9uIGZsb2F0ZWQgZWxlbWVudHMgKGJ1dCBtYXkgYmUgdXNlZCB0byBmaXggdGhlIElFNiBkb3VibGUtbWFyZ2luIGJ1ZykuIik7YnJlYWs7Y2FzZSJibG9jayI6cmVwb3J0UHJvcGVydHkoInZlcnRpY2FsLWFsaWduIixkaXNwbGF5KTtcbmJyZWFrO2Nhc2UiaW5saW5lLWJsb2NrIjpyZXBvcnRQcm9wZXJ0eSgiZmxvYXQiLGRpc3BsYXkpO2JyZWFrO2RlZmF1bHQ6MD09PWRpc3BsYXkuaW5kZXhPZigidGFibGUtIikmJihyZXBvcnRQcm9wZXJ0eSgibWFyZ2luIixkaXNwbGF5KSxyZXBvcnRQcm9wZXJ0eSgibWFyZ2luLWxlZnQiLGRpc3BsYXkpLHJlcG9ydFByb3BlcnR5KCJtYXJnaW4tcmlnaHQiLGRpc3BsYXkpLHJlcG9ydFByb3BlcnR5KCJtYXJnaW4tdG9wIixkaXNwbGF5KSxyZXBvcnRQcm9wZXJ0eSgibWFyZ2luLWJvdHRvbSIsZGlzcGxheSkscmVwb3J0UHJvcGVydHkoImZsb2F0IixkaXNwbGF5KSl9fXZhciBwcm9wZXJ0aWVzLHJ1bGU9dGhpcyxwcm9wZXJ0aWVzVG9DaGVjaz17ZGlzcGxheToxLCJmbG9hdCI6Im5vbmUiLGhlaWdodDoxLHdpZHRoOjEsbWFyZ2luOjEsIm1hcmdpbi1sZWZ0IjoxLCJtYXJnaW4tcmlnaHQiOjEsIm1hcmdpbi1ib3R0b20iOjEsIm1hcmdpbi10b3AiOjEscGFkZGluZzoxLCJwYWRkaW5nLWxlZnQiOjEsInBhZGRpbmctcmlnaHQiOjEsInBhZGRpbmctYm90dG9tIjoxLCJwYWRkaW5nLXRvcCI6MSwidmVydGljYWwtYWxpZ24iOjF9O3BhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIixzdGFydFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRmb250ZmFjZSIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0a2V5ZnJhbWVydWxlIixzdGFydFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRwYWdlbWFyZ2luIixzdGFydFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRwYWdlIixzdGFydFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLGZ1bmN0aW9uKGV2ZW50KXt2YXIgbmFtZT1ldmVudC5wcm9wZXJ0eS50ZXh0LnRvTG93ZXJDYXNlKCk7cHJvcGVydGllc1RvQ2hlY2tbbmFtZV0mJihwcm9wZXJ0aWVzW25hbWVdPXt2YWx1ZTpldmVudC52YWx1ZS50ZXh0LGxpbmU6ZXZlbnQucHJvcGVydHkubGluZSxjb2w6ZXZlbnQucHJvcGVydHkuY29sfSl9KSxwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHJ1bGUiLGVuZFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kZm9udGZhY2UiLGVuZFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5ka2V5ZnJhbWVydWxlIixlbmRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHBhZ2VtYXJnaW4iLGVuZFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kcGFnZSIsZW5kUnVsZSl9fSksQ1NTTGludC5hZGRSdWxlKHtpZDoiZHVwbGljYXRlLWJhY2tncm91bmQtaW1hZ2VzIixuYW1lOiJEaXNhbGxvdyBkdXBsaWNhdGUgYmFja2dyb3VuZCBpbWFnZXMiLGRlc2M6IkV2ZXJ5IGJhY2tncm91bmQtaW1hZ2Ugc2hvdWxkIGJlIHVuaXF1ZS4gVXNlIGEgY29tbW9uIGNsYXNzIGZvciBlLmcuIHNwcml0ZXMuIixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7dmFyIHJ1bGU9dGhpcyxzdGFjaz17fTtwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IixmdW5jdGlvbihldmVudCl7dmFyIGksbGVuLG5hbWU9ZXZlbnQucHJvcGVydHkudGV4dCx2YWx1ZT1ldmVudC52YWx1ZTtpZihuYW1lLm1hdGNoKC9iYWNrZ3JvdW5kL2kpKWZvcihpPTAsbGVuPXZhbHVlLnBhcnRzLmxlbmd0aDtsZW4+aTtpKyspInVyaSI9PT12YWx1ZS5wYXJ0c1tpXS50eXBlJiYoc3RhY2tbdmFsdWUucGFydHNbaV0udXJpXT09PXZvaWQgMD9zdGFja1t2YWx1ZS5wYXJ0c1tpXS51cmldPWV2ZW50OnJlcG9ydGVyLnJlcG9ydCgiQmFja2dyb3VuZCBpbWFnZSBcJyIrdmFsdWUucGFydHNbaV0udXJpKyJcJyB3YXMgdXNlZCBtdWx0aXBsZSB0aW1lcywgZmlyc3QgZGVjbGFyZWQgYXQgbGluZSAiK3N0YWNrW3ZhbHVlLnBhcnRzW2ldLnVyaV0ubGluZSsiLCBjb2wgIitzdGFja1t2YWx1ZS5wYXJ0c1tpXS51cmldLmNvbCsiLiIsZXZlbnQubGluZSxldmVudC5jb2wscnVsZSkpfSl9fSksQ1NTTGludC5hZGRSdWxlKHtpZDoiZHVwbGljYXRlLXByb3BlcnRpZXMiLG5hbWU6IkRpc2FsbG93IGR1cGxpY2F0ZSBwcm9wZXJ0aWVzIixkZXNjOiJEdXBsaWNhdGUgcHJvcGVydGllcyBtdXN0IGFwcGVhciBvbmUgYWZ0ZXIgdGhlIG90aGVyLiIsYnJvd3NlcnM6IkFsbCIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe2Z1bmN0aW9uIHN0YXJ0UnVsZSgpe3Byb3BlcnRpZXM9e319dmFyIHByb3BlcnRpZXMsbGFzdFByb3BlcnR5LHJ1bGU9dGhpcztwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0Zm9udGZhY2UiLHN0YXJ0UnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHBhZ2UiLHN0YXJ0UnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHBhZ2VtYXJnaW4iLHN0YXJ0UnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydGtleWZyYW1lcnVsZSIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IixmdW5jdGlvbihldmVudCl7dmFyIHByb3BlcnR5PWV2ZW50LnByb3BlcnR5LG5hbWU9cHJvcGVydHkudGV4dC50b0xvd2VyQ2FzZSgpOyFwcm9wZXJ0aWVzW25hbWVdfHxsYXN0UHJvcGVydHk9PT1uYW1lJiZwcm9wZXJ0aWVzW25hbWVdIT09ZXZlbnQudmFsdWUudGV4dHx8cmVwb3J0ZXIucmVwb3J0KCJEdXBsaWNhdGUgcHJvcGVydHkgXCciK2V2ZW50LnByb3BlcnR5KyJcJyBmb3VuZC4iLGV2ZW50LmxpbmUsZXZlbnQuY29sLHJ1bGUpLHByb3BlcnRpZXNbbmFtZV09ZXZlbnQudmFsdWUudGV4dCxsYXN0UHJvcGVydHk9bmFtZX0pfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6ImVtcHR5LXJ1bGVzIixuYW1lOiJEaXNhbGxvdyBlbXB0eSBydWxlcyIsZGVzYzoiUnVsZXMgd2l0aG91dCBhbnkgcHJvcGVydGllcyBzcGVjaWZpZWQgc2hvdWxkIGJlIHJlbW92ZWQuIixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7dmFyIHJ1bGU9dGhpcyxjb3VudD0wO3BhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIixmdW5jdGlvbigpe2NvdW50PTB9KSxwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IixmdW5jdGlvbigpe2NvdW50Kyt9KSxwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHJ1bGUiLGZ1bmN0aW9uKGV2ZW50KXt2YXIgc2VsZWN0b3JzPWV2ZW50LnNlbGVjdG9yczswPT09Y291bnQmJnJlcG9ydGVyLnJlcG9ydCgiUnVsZSBpcyBlbXB0eS4iLHNlbGVjdG9yc1swXS5saW5lLHNlbGVjdG9yc1swXS5jb2wscnVsZSl9KX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJlcnJvcnMiLG5hbWU6IlBhcnNpbmcgRXJyb3JzIixkZXNjOiJUaGlzIHJ1bGUgbG9va3MgZm9yIHJlY292ZXJhYmxlIHN5bnRheCBlcnJvcnMuIixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7dmFyIHJ1bGU9dGhpcztwYXJzZXIuYWRkTGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihldmVudCl7cmVwb3J0ZXIuZXJyb3IoZXZlbnQubWVzc2FnZSxldmVudC5saW5lLGV2ZW50LmNvbCxydWxlKX0pfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6ImZhbGxiYWNrLWNvbG9ycyIsbmFtZToiUmVxdWlyZSBmYWxsYmFjayBjb2xvcnMiLGRlc2M6IkZvciBvbGRlciBicm93c2VycyB0aGF0IGRvblwndCBzdXBwb3J0IFJHQkEsIEhTTCwgb3IgSFNMQSwgcHJvdmlkZSBhIGZhbGxiYWNrIGNvbG9yLiIsYnJvd3NlcnM6IklFNixJRTcsSUU4Iixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7ZnVuY3Rpb24gc3RhcnRSdWxlKCl7cHJvcGVydGllcz17fSxsYXN0UHJvcGVydHk9bnVsbH12YXIgbGFzdFByb3BlcnR5LHByb3BlcnRpZXMscnVsZT10aGlzLHByb3BlcnRpZXNUb0NoZWNrPXtjb2xvcjoxLGJhY2tncm91bmQ6MSwiYm9yZGVyLWNvbG9yIjoxLCJib3JkZXItdG9wLWNvbG9yIjoxLCJib3JkZXItcmlnaHQtY29sb3IiOjEsImJvcmRlci1ib3R0b20tY29sb3IiOjEsImJvcmRlci1sZWZ0LWNvbG9yIjoxLGJvcmRlcjoxLCJib3JkZXItdG9wIjoxLCJib3JkZXItcmlnaHQiOjEsImJvcmRlci1ib3R0b20iOjEsImJvcmRlci1sZWZ0IjoxLCJiYWNrZ3JvdW5kLWNvbG9yIjoxfTtwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0Zm9udGZhY2UiLHN0YXJ0UnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHBhZ2UiLHN0YXJ0UnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHBhZ2VtYXJnaW4iLHN0YXJ0UnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydGtleWZyYW1lcnVsZSIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IixmdW5jdGlvbihldmVudCl7dmFyIHByb3BlcnR5PWV2ZW50LnByb3BlcnR5LG5hbWU9cHJvcGVydHkudGV4dC50b0xvd2VyQ2FzZSgpLHBhcnRzPWV2ZW50LnZhbHVlLnBhcnRzLGk9MCxjb2xvclR5cGU9IiIsbGVuPXBhcnRzLmxlbmd0aDtpZihwcm9wZXJ0aWVzVG9DaGVja1tuYW1lXSlmb3IoO2xlbj5pOykiY29sb3IiPT09cGFydHNbaV0udHlwZSYmKCJhbHBoYSJpbiBwYXJ0c1tpXXx8Imh1ZSJpbiBwYXJ0c1tpXT8oLyhbXlxcKV0rKVxcKC8udGVzdChwYXJ0c1tpXSkmJihjb2xvclR5cGU9UmVnRXhwLiQxLnRvVXBwZXJDYXNlKCkpLGxhc3RQcm9wZXJ0eSYmbGFzdFByb3BlcnR5LnByb3BlcnR5LnRleHQudG9Mb3dlckNhc2UoKT09PW5hbWUmJiJjb21wYXQiPT09bGFzdFByb3BlcnR5LmNvbG9yVHlwZXx8cmVwb3J0ZXIucmVwb3J0KCJGYWxsYmFjayAiK25hbWUrIiAoaGV4IG9yIFJHQikgc2hvdWxkIHByZWNlZGUgIitjb2xvclR5cGUrIiAiK25hbWUrIi4iLGV2ZW50LmxpbmUsZXZlbnQuY29sLHJ1bGUpKTpldmVudC5jb2xvclR5cGU9ImNvbXBhdCIpLGkrKztsYXN0UHJvcGVydHk9ZXZlbnR9KX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJmbG9hdHMiLG5hbWU6IkRpc2FsbG93IHRvbyBtYW55IGZsb2F0cyIsZGVzYzoiVGhpcyBydWxlIHRlc3RzIGlmIHRoZSBmbG9hdCBwcm9wZXJ0eSBpcyB1c2VkIHRvbyBtYW55IHRpbWVzIixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7dmFyIHJ1bGU9dGhpcyxjb3VudD0wO3BhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLGZ1bmN0aW9uKGV2ZW50KXsiZmxvYXQiPT09ZXZlbnQucHJvcGVydHkudGV4dC50b0xvd2VyQ2FzZSgpJiYibm9uZSIhPT1ldmVudC52YWx1ZS50ZXh0LnRvTG93ZXJDYXNlKCkmJmNvdW50Kyt9KSxwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHN0eWxlc2hlZXQiLGZ1bmN0aW9uKCl7cmVwb3J0ZXIuc3RhdCgiZmxvYXRzIixjb3VudCksY291bnQ+PTEwJiZyZXBvcnRlci5yb2xsdXBXYXJuKCJUb28gbWFueSBmbG9hdHMgKCIrY291bnQrIiksIHlvdVwncmUgcHJvYmFibHkgdXNpbmcgdGhlbSBmb3IgbGF5b3V0LiBDb25zaWRlciB1c2luZyBhIGdyaWQgc3lzdGVtIGluc3RlYWQuIixydWxlKX0pfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6ImZvbnQtZmFjZXMiLG5hbWU6IkRvblwndCB1c2UgdG9vIG1hbnkgd2ViIGZvbnRzIixkZXNjOiJUb28gbWFueSBkaWZmZXJlbnQgd2ViIGZvbnRzIGluIHRoZSBzYW1lIHN0eWxlc2hlZXQuIixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7dmFyIHJ1bGU9dGhpcyxjb3VudD0wO3BhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRmb250ZmFjZSIsZnVuY3Rpb24oKXtjb3VudCsrfSkscGFyc2VyLmFkZExpc3RlbmVyKCJlbmRzdHlsZXNoZWV0IixmdW5jdGlvbigpe2NvdW50PjUmJnJlcG9ydGVyLnJvbGx1cFdhcm4oIlRvbyBtYW55IEBmb250LWZhY2UgZGVjbGFyYXRpb25zICgiK2NvdW50KyIpLiIscnVsZSl9KX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJmb250LXNpemVzIixuYW1lOiJEaXNhbGxvdyB0b28gbWFueSBmb250IHNpemVzIixkZXNjOiJDaGVja3MgdGhlIG51bWJlciBvZiBmb250LXNpemUgZGVjbGFyYXRpb25zLiIsYnJvd3NlcnM6IkFsbCIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe3ZhciBydWxlPXRoaXMsY291bnQ9MDtwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IixmdW5jdGlvbihldmVudCl7ImZvbnQtc2l6ZSI9PSIiK2V2ZW50LnByb3BlcnR5JiZjb3VudCsrfSkscGFyc2VyLmFkZExpc3RlbmVyKCJlbmRzdHlsZXNoZWV0IixmdW5jdGlvbigpe3JlcG9ydGVyLnN0YXQoImZvbnQtc2l6ZXMiLGNvdW50KSxjb3VudD49MTAmJnJlcG9ydGVyLnJvbGx1cFdhcm4oIlRvbyBtYW55IGZvbnQtc2l6ZSBkZWNsYXJhdGlvbnMgKCIrY291bnQrIiksIGFic3RyYWN0aW9uIG5lZWRlZC4iLHJ1bGUpfSl9fSksQ1NTTGludC5hZGRSdWxlKHtpZDoiZ3JhZGllbnRzIixuYW1lOiJSZXF1aXJlIGFsbCBncmFkaWVudCBkZWZpbml0aW9ucyIsZGVzYzoiV2hlbiB1c2luZyBhIHZlbmRvci1wcmVmaXhlZCBncmFkaWVudCwgbWFrZSBzdXJlIHRvIHVzZSB0aGVtIGFsbC4iLGJyb3dzZXJzOiJBbGwiLGluaXQ6ZnVuY3Rpb24ocGFyc2VyLHJlcG9ydGVyKXt2YXIgZ3JhZGllbnRzLHJ1bGU9dGhpcztwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsZnVuY3Rpb24oKXtncmFkaWVudHM9e21vejowLHdlYmtpdDowLG9sZFdlYmtpdDowLG86MH19KSxwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IixmdW5jdGlvbihldmVudCl7L1xcLShtb3p8b3x3ZWJraXQpKD86XFwtKD86bGluZWFyfHJhZGlhbCkpXFwtZ3JhZGllbnQvaS50ZXN0KGV2ZW50LnZhbHVlKT9ncmFkaWVudHNbUmVnRXhwLiQxXT0xOi9cXC13ZWJraXRcXC1ncmFkaWVudC9pLnRlc3QoZXZlbnQudmFsdWUpJiYoZ3JhZGllbnRzLm9sZFdlYmtpdD0xKX0pLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kcnVsZSIsZnVuY3Rpb24oZXZlbnQpe3ZhciBtaXNzaW5nPVtdO2dyYWRpZW50cy5tb3p8fG1pc3NpbmcucHVzaCgiRmlyZWZveCAzLjYrIiksZ3JhZGllbnRzLndlYmtpdHx8bWlzc2luZy5wdXNoKCJXZWJraXQgKFNhZmFyaSA1KywgQ2hyb21lKSIpLGdyYWRpZW50cy5vbGRXZWJraXR8fG1pc3NpbmcucHVzaCgiT2xkIFdlYmtpdCAoU2FmYXJpIDQrLCBDaHJvbWUpIiksZ3JhZGllbnRzLm98fG1pc3NpbmcucHVzaCgiT3BlcmEgMTEuMSsiKSxtaXNzaW5nLmxlbmd0aCYmND5taXNzaW5nLmxlbmd0aCYmcmVwb3J0ZXIucmVwb3J0KCJNaXNzaW5nIHZlbmRvci1wcmVmaXhlZCBDU1MgZ3JhZGllbnRzIGZvciAiK21pc3Npbmcuam9pbigiLCAiKSsiLiIsZXZlbnQuc2VsZWN0b3JzWzBdLmxpbmUsZXZlbnQuc2VsZWN0b3JzWzBdLmNvbCxydWxlKX0pfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6ImlkcyIsbmFtZToiRGlzYWxsb3cgSURzIGluIHNlbGVjdG9ycyIsZGVzYzoiU2VsZWN0b3JzIHNob3VsZCBub3QgY29udGFpbiBJRHMuIixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7dmFyIHJ1bGU9dGhpcztwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsZnVuY3Rpb24oZXZlbnQpe3ZhciBzZWxlY3RvcixwYXJ0LG1vZGlmaWVyLGlkQ291bnQsaSxqLGssc2VsZWN0b3JzPWV2ZW50LnNlbGVjdG9ycztmb3IoaT0wO3NlbGVjdG9ycy5sZW5ndGg+aTtpKyspe2ZvcihzZWxlY3Rvcj1zZWxlY3RvcnNbaV0saWRDb3VudD0wLGo9MDtzZWxlY3Rvci5wYXJ0cy5sZW5ndGg+ajtqKyspaWYocGFydD1zZWxlY3Rvci5wYXJ0c1tqXSxwYXJ0LnR5cGU9PT1wYXJzZXIuU0VMRUNUT1JfUEFSVF9UWVBFKWZvcihrPTA7cGFydC5tb2RpZmllcnMubGVuZ3RoPms7aysrKW1vZGlmaWVyPXBhcnQubW9kaWZpZXJzW2tdLCJpZCI9PT1tb2RpZmllci50eXBlJiZpZENvdW50Kys7MT09PWlkQ291bnQ/cmVwb3J0ZXIucmVwb3J0KCJEb25cJ3QgdXNlIElEcyBpbiBzZWxlY3RvcnMuIixzZWxlY3Rvci5saW5lLHNlbGVjdG9yLmNvbCxydWxlKTppZENvdW50PjEmJnJlcG9ydGVyLnJlcG9ydChpZENvdW50KyIgSURzIGluIHRoZSBzZWxlY3RvciwgcmVhbGx5PyIsc2VsZWN0b3IubGluZSxzZWxlY3Rvci5jb2wscnVsZSl9fSl9fSksQ1NTTGludC5hZGRSdWxlKHtpZDoiaW1wb3J0IixuYW1lOiJEaXNhbGxvdyBAaW1wb3J0IixkZXNjOiJEb25cJ3QgdXNlIEBpbXBvcnQsIHVzZSA8bGluaz4gaW5zdGVhZC4iLGJyb3dzZXJzOiJBbGwiLGluaXQ6ZnVuY3Rpb24ocGFyc2VyLHJlcG9ydGVyKXt2YXIgcnVsZT10aGlzO3BhcnNlci5hZGRMaXN0ZW5lcigiaW1wb3J0IixmdW5jdGlvbihldmVudCl7cmVwb3J0ZXIucmVwb3J0KCJAaW1wb3J0IHByZXZlbnRzIHBhcmFsbGVsIGRvd25sb2FkcywgdXNlIDxsaW5rPiBpbnN0ZWFkLiIsZXZlbnQubGluZSxldmVudC5jb2wscnVsZSl9KX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJpbXBvcnRhbnQiLG5hbWU6IkRpc2FsbG93ICFpbXBvcnRhbnQiLGRlc2M6IkJlIGNhcmVmdWwgd2hlbiB1c2luZyAhaW1wb3J0YW50IGRlY2xhcmF0aW9uIixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7dmFyIHJ1bGU9dGhpcyxjb3VudD0wO3BhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLGZ1bmN0aW9uKGV2ZW50KXtldmVudC5pbXBvcnRhbnQ9PT0hMCYmKGNvdW50KysscmVwb3J0ZXIucmVwb3J0KCJVc2Ugb2YgIWltcG9ydGFudCIsZXZlbnQubGluZSxldmVudC5jb2wscnVsZSkpfSkscGFyc2VyLmFkZExpc3RlbmVyKCJlbmRzdHlsZXNoZWV0IixmdW5jdGlvbigpe3JlcG9ydGVyLnN0YXQoImltcG9ydGFudCIsY291bnQpLGNvdW50Pj0xMCYmcmVwb3J0ZXIucm9sbHVwV2FybigiVG9vIG1hbnkgIWltcG9ydGFudCBkZWNsYXJhdGlvbnMgKCIrY291bnQrIiksIHRyeSB0byB1c2UgbGVzcyB0aGFuIDEwIHRvIGF2b2lkIHNwZWNpZmljaXR5IGlzc3Vlcy4iLHJ1bGUpfSl9fSksQ1NTTGludC5hZGRSdWxlKHtpZDoia25vd24tcHJvcGVydGllcyIsbmFtZToiUmVxdWlyZSB1c2Ugb2Yga25vd24gcHJvcGVydGllcyIsZGVzYzoiUHJvcGVydGllcyBzaG91bGQgYmUga25vd24gKGxpc3RlZCBpbiBDU1MzIHNwZWNpZmljYXRpb24pIG9yIGJlIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5LiIsYnJvd3NlcnM6IkFsbCIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe3ZhciBydWxlPXRoaXM7cGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsZnVuY3Rpb24oZXZlbnQpe2V2ZW50LmludmFsaWQmJnJlcG9ydGVyLnJlcG9ydChldmVudC5pbnZhbGlkLm1lc3NhZ2UsZXZlbnQubGluZSxldmVudC5jb2wscnVsZSl9KX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJvcmRlci1hbHBoYWJldGljYWwiLG5hbWU6IkFscGhhYmV0aWNhbCBvcmRlciIsZGVzYzoiQXNzdXJlIHByb3BlcnRpZXMgYXJlIGluIGFscGhhYmV0aWNhbCBvcmRlciIsYnJvd3NlcnM6IkFsbCIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe3ZhciBwcm9wZXJ0aWVzLHJ1bGU9dGhpcyxzdGFydFJ1bGU9ZnVuY3Rpb24oKXtwcm9wZXJ0aWVzPVtdfTtwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0Zm9udGZhY2UiLHN0YXJ0UnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHBhZ2UiLHN0YXJ0UnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHBhZ2VtYXJnaW4iLHN0YXJ0UnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydGtleWZyYW1lcnVsZSIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IixmdW5jdGlvbihldmVudCl7dmFyIG5hbWU9ZXZlbnQucHJvcGVydHkudGV4dCxsb3dlckNhc2VQcmVmaXhMZXNzTmFtZT1uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXi0uKj8tLywiIik7cHJvcGVydGllcy5wdXNoKGxvd2VyQ2FzZVByZWZpeExlc3NOYW1lKX0pLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kcnVsZSIsZnVuY3Rpb24oZXZlbnQpe3ZhciBjdXJyZW50UHJvcGVydGllcz1wcm9wZXJ0aWVzLmpvaW4oIiwiKSxleHBlY3RlZFByb3BlcnRpZXM9cHJvcGVydGllcy5zb3J0KCkuam9pbigiLCIpO2N1cnJlbnRQcm9wZXJ0aWVzIT09ZXhwZWN0ZWRQcm9wZXJ0aWVzJiZyZXBvcnRlci5yZXBvcnQoIlJ1bGUgZG9lc25cJ3QgaGF2ZSBhbGwgaXRzIHByb3BlcnRpZXMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyZWQuIixldmVudC5saW5lLGV2ZW50LmNvbCxydWxlKX0pfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6Im91dGxpbmUtbm9uZSIsbmFtZToiRGlzYWxsb3cgb3V0bGluZTogbm9uZSIsZGVzYzoiVXNlIG9mIG91dGxpbmU6IG5vbmUgb3Igb3V0bGluZTogMCBzaG91bGQgYmUgbGltaXRlZCB0byA6Zm9jdXMgcnVsZXMuIixicm93c2VyczoiQWxsIix0YWdzOlsiQWNjZXNzaWJpbGl0eSJdLGluaXQ6ZnVuY3Rpb24ocGFyc2VyLHJlcG9ydGVyKXtmdW5jdGlvbiBzdGFydFJ1bGUoZXZlbnQpe2xhc3RSdWxlPWV2ZW50LnNlbGVjdG9ycz97bGluZTpldmVudC5saW5lLGNvbDpldmVudC5jb2wsc2VsZWN0b3JzOmV2ZW50LnNlbGVjdG9ycyxwcm9wQ291bnQ6MCxvdXRsaW5lOiExfTpudWxsfWZ1bmN0aW9uIGVuZFJ1bGUoKXtsYXN0UnVsZSYmbGFzdFJ1bGUub3V0bGluZSYmKC0xPT09KCIiK2xhc3RSdWxlLnNlbGVjdG9ycykudG9Mb3dlckNhc2UoKS5pbmRleE9mKCI6Zm9jdXMiKT9yZXBvcnRlci5yZXBvcnQoIk91dGxpbmVzIHNob3VsZCBvbmx5IGJlIG1vZGlmaWVkIHVzaW5nIDpmb2N1cy4iLGxhc3RSdWxlLmxpbmUsbGFzdFJ1bGUuY29sLHJ1bGUpOjE9PT1sYXN0UnVsZS5wcm9wQ291bnQmJnJlcG9ydGVyLnJlcG9ydCgiT3V0bGluZXMgc2hvdWxkblwndCBiZSBoaWRkZW4gdW5sZXNzIG90aGVyIHZpc3VhbCBjaGFuZ2VzIGFyZSBtYWRlLiIsbGFzdFJ1bGUubGluZSxsYXN0UnVsZS5jb2wscnVsZSkpfXZhciBsYXN0UnVsZSxydWxlPXRoaXM7cGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLHN0YXJ0UnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydGZvbnRmYWNlIixzdGFydFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRwYWdlIixzdGFydFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRwYWdlbWFyZ2luIixzdGFydFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRrZXlmcmFtZXJ1bGUiLHN0YXJ0UnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsZnVuY3Rpb24oZXZlbnQpe3ZhciBuYW1lPWV2ZW50LnByb3BlcnR5LnRleHQudG9Mb3dlckNhc2UoKSx2YWx1ZT1ldmVudC52YWx1ZTtsYXN0UnVsZSYmKGxhc3RSdWxlLnByb3BDb3VudCsrLCJvdXRsaW5lIiE9PW5hbWV8fCJub25lIiE9IiIrdmFsdWUmJiIwIiE9IiIrdmFsdWV8fChsYXN0UnVsZS5vdXRsaW5lPSEwKSl9KSxwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHJ1bGUiLGVuZFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kZm9udGZhY2UiLGVuZFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kcGFnZSIsZW5kUnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJlbmRwYWdlbWFyZ2luIixlbmRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoImVuZGtleWZyYW1lcnVsZSIsZW5kUnVsZSl9fSksQ1NTTGludC5hZGRSdWxlKHtpZDoib3ZlcnF1YWxpZmllZC1lbGVtZW50cyIsbmFtZToiRGlzYWxsb3cgb3ZlcnF1YWxpZmllZCBlbGVtZW50cyIsZGVzYzoiRG9uXCd0IHVzZSBjbGFzc2VzIG9yIElEcyB3aXRoIGVsZW1lbnRzIChhLmZvbyBvciBhI2ZvbykuIixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7dmFyIHJ1bGU9dGhpcyxjbGFzc2VzPXt9O3BhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIixmdW5jdGlvbihldmVudCl7dmFyIHNlbGVjdG9yLHBhcnQsbW9kaWZpZXIsaSxqLGssc2VsZWN0b3JzPWV2ZW50LnNlbGVjdG9ycztmb3IoaT0wO3NlbGVjdG9ycy5sZW5ndGg+aTtpKyspZm9yKHNlbGVjdG9yPXNlbGVjdG9yc1tpXSxqPTA7c2VsZWN0b3IucGFydHMubGVuZ3RoPmo7aisrKWlmKHBhcnQ9c2VsZWN0b3IucGFydHNbal0scGFydC50eXBlPT09cGFyc2VyLlNFTEVDVE9SX1BBUlRfVFlQRSlmb3Ioaz0wO3BhcnQubW9kaWZpZXJzLmxlbmd0aD5rO2srKyltb2RpZmllcj1wYXJ0Lm1vZGlmaWVyc1trXSxwYXJ0LmVsZW1lbnROYW1lJiYiaWQiPT09bW9kaWZpZXIudHlwZT9yZXBvcnRlci5yZXBvcnQoIkVsZW1lbnQgKCIrcGFydCsiKSBpcyBvdmVycXVhbGlmaWVkLCBqdXN0IHVzZSAiK21vZGlmaWVyKyIgd2l0aG91dCBlbGVtZW50IG5hbWUuIixwYXJ0LmxpbmUscGFydC5jb2wscnVsZSk6ImNsYXNzIj09PW1vZGlmaWVyLnR5cGUmJihjbGFzc2VzW21vZGlmaWVyXXx8KGNsYXNzZXNbbW9kaWZpZXJdPVtdKSxjbGFzc2VzW21vZGlmaWVyXS5wdXNoKHttb2RpZmllcjptb2RpZmllcixwYXJ0OnBhcnR9KSl9KSxwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHN0eWxlc2hlZXQiLGZ1bmN0aW9uKCl7dmFyIHByb3A7Zm9yKHByb3AgaW4gY2xhc3NlcyljbGFzc2VzLmhhc093blByb3BlcnR5KHByb3ApJiYxPT09Y2xhc3Nlc1twcm9wXS5sZW5ndGgmJmNsYXNzZXNbcHJvcF1bMF0ucGFydC5lbGVtZW50TmFtZSYmcmVwb3J0ZXIucmVwb3J0KCJFbGVtZW50ICgiK2NsYXNzZXNbcHJvcF1bMF0ucGFydCsiKSBpcyBvdmVycXVhbGlmaWVkLCBqdXN0IHVzZSAiK2NsYXNzZXNbcHJvcF1bMF0ubW9kaWZpZXIrIiB3aXRob3V0IGVsZW1lbnQgbmFtZS4iLGNsYXNzZXNbcHJvcF1bMF0ucGFydC5saW5lLGNsYXNzZXNbcHJvcF1bMF0ucGFydC5jb2wscnVsZSl9KX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJxdWFsaWZpZWQtaGVhZGluZ3MiLG5hbWU6IkRpc2FsbG93IHF1YWxpZmllZCBoZWFkaW5ncyIsZGVzYzoiSGVhZGluZ3Mgc2hvdWxkIG5vdCBiZSBxdWFsaWZpZWQgKG5hbWVzcGFjZWQpLiIsYnJvd3NlcnM6IkFsbCIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe3ZhciBydWxlPXRoaXM7cGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLGZ1bmN0aW9uKGV2ZW50KXt2YXIgc2VsZWN0b3IscGFydCxpLGosc2VsZWN0b3JzPWV2ZW50LnNlbGVjdG9ycztmb3IoaT0wO3NlbGVjdG9ycy5sZW5ndGg+aTtpKyspZm9yKHNlbGVjdG9yPXNlbGVjdG9yc1tpXSxqPTA7c2VsZWN0b3IucGFydHMubGVuZ3RoPmo7aisrKXBhcnQ9c2VsZWN0b3IucGFydHNbal0scGFydC50eXBlPT09cGFyc2VyLlNFTEVDVE9SX1BBUlRfVFlQRSYmcGFydC5lbGVtZW50TmFtZSYmL2hbMS02XS8udGVzdCgiIitwYXJ0LmVsZW1lbnROYW1lKSYmaj4wJiZyZXBvcnRlci5yZXBvcnQoIkhlYWRpbmcgKCIrcGFydC5lbGVtZW50TmFtZSsiKSBzaG91bGQgbm90IGJlIHF1YWxpZmllZC4iLHBhcnQubGluZSxwYXJ0LmNvbCxydWxlKX0pfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6InJlZ2V4LXNlbGVjdG9ycyIsbmFtZToiRGlzYWxsb3cgc2VsZWN0b3JzIHRoYXQgbG9vayBsaWtlIHJlZ2V4cyIsZGVzYzoiU2VsZWN0b3JzIHRoYXQgbG9vayBsaWtlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIHNsb3cgYW5kIHNob3VsZCBiZSBhdm9pZGVkLiIsYnJvd3NlcnM6IkFsbCIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe3ZhciBydWxlPXRoaXM7cGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLGZ1bmN0aW9uKGV2ZW50KXt2YXIgc2VsZWN0b3IscGFydCxtb2RpZmllcixpLGosayxzZWxlY3RvcnM9ZXZlbnQuc2VsZWN0b3JzO2ZvcihpPTA7c2VsZWN0b3JzLmxlbmd0aD5pO2krKylmb3Ioc2VsZWN0b3I9c2VsZWN0b3JzW2ldLGo9MDtzZWxlY3Rvci5wYXJ0cy5sZW5ndGg+ajtqKyspaWYocGFydD1zZWxlY3Rvci5wYXJ0c1tqXSxwYXJ0LnR5cGU9PT1wYXJzZXIuU0VMRUNUT1JfUEFSVF9UWVBFKWZvcihrPTA7cGFydC5tb2RpZmllcnMubGVuZ3RoPms7aysrKW1vZGlmaWVyPXBhcnQubW9kaWZpZXJzW2tdLCJhdHRyaWJ1dGUiPT09bW9kaWZpZXIudHlwZSYmLyhbXFx+XFx8XFxeXFwkXFwqXT0pLy50ZXN0KG1vZGlmaWVyKSYmcmVwb3J0ZXIucmVwb3J0KCJBdHRyaWJ1dGUgc2VsZWN0b3JzIHdpdGggIitSZWdFeHAuJDErIiBhcmUgc2xvdyEiLG1vZGlmaWVyLmxpbmUsbW9kaWZpZXIuY29sLHJ1bGUpfSl9fSksQ1NTTGludC5hZGRSdWxlKHtpZDoicnVsZXMtY291bnQiLG5hbWU6IlJ1bGVzIENvdW50IixkZXNjOiJUcmFjayBob3cgbWFueSBydWxlcyB0aGVyZSBhcmUuIixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7dmFyIGNvdW50PTA7cGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLGZ1bmN0aW9uKCl7Y291bnQrK30pLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kc3R5bGVzaGVldCIsZnVuY3Rpb24oKXtyZXBvcnRlci5zdGF0KCJydWxlLWNvdW50Iixjb3VudCl9KX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJzZWxlY3Rvci1tYXgtYXBwcm9hY2hpbmciLG5hbWU6Ildhcm4gd2hlbiBhcHByb2FjaGluZyB0aGUgNDA5NSBzZWxlY3RvciBsaW1pdCBmb3IgSUUiLGRlc2M6IldpbGwgd2FybiB3aGVuIHNlbGVjdG9yIGNvdW50IGlzID49IDM4MDAgc2VsZWN0b3JzLiIsYnJvd3NlcnM6IklFIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7dmFyIHJ1bGU9dGhpcyxjb3VudD0wO3BhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIixmdW5jdGlvbihldmVudCl7Y291bnQrPWV2ZW50LnNlbGVjdG9ycy5sZW5ndGh9KSxwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHN0eWxlc2hlZXQiLGZ1bmN0aW9uKCl7Y291bnQ+PTM4MDAmJnJlcG9ydGVyLnJlcG9ydCgiWW91IGhhdmUgIitjb3VudCsiIHNlbGVjdG9ycy4gSW50ZXJuZXQgRXhwbG9yZXIgc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDQwOTUgc2VsZWN0b3JzIHBlciBzdHlsZXNoZWV0LiBDb25zaWRlciByZWZhY3RvcmluZy4iLDAsMCxydWxlKX0pfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6InNlbGVjdG9yLW1heCIsbmFtZToiRXJyb3Igd2hlbiBwYXN0IHRoZSA0MDk1IHNlbGVjdG9yIGxpbWl0IGZvciBJRSIsZGVzYzoiV2lsbCBlcnJvciB3aGVuIHNlbGVjdG9yIGNvdW50IGlzID4gNDA5NS4iLGJyb3dzZXJzOiJJRSIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe3ZhciBydWxlPXRoaXMsY291bnQ9MDtwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsZnVuY3Rpb24oZXZlbnQpe2NvdW50Kz1ldmVudC5zZWxlY3RvcnMubGVuZ3RofSkscGFyc2VyLmFkZExpc3RlbmVyKCJlbmRzdHlsZXNoZWV0IixmdW5jdGlvbigpe2NvdW50PjQwOTUmJnJlcG9ydGVyLnJlcG9ydCgiWW91IGhhdmUgIitjb3VudCsiIHNlbGVjdG9ycy4gSW50ZXJuZXQgRXhwbG9yZXIgc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDQwOTUgc2VsZWN0b3JzIHBlciBzdHlsZXNoZWV0LiBDb25zaWRlciByZWZhY3RvcmluZy4iLDAsMCxydWxlKX0pfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6InNlbGVjdG9yLW5ld2xpbmUiLG5hbWU6IkRpc2FsbG93IG5ldy1saW5lIGNoYXJhY3RlcnMgaW4gc2VsZWN0b3JzIixkZXNjOiJOZXctbGluZSBjaGFyYWN0ZXJzIGluIHNlbGVjdG9ycyBhcmUgdXN1YWxseSBhIGZvcmdvdHRlbiBjb21tYSBhbmQgbm90IGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLiIsYnJvd3NlcnM6IkFsbCIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe2Z1bmN0aW9uIHN0YXJ0UnVsZShldmVudCl7dmFyIGksbGVuLHNlbGVjdG9yLHAsbixwTGVuLHBhcnQscGFydDIsdHlwZSxjdXJyZW50TGluZSxuZXh0TGluZSxzZWxlY3RvcnM9ZXZlbnQuc2VsZWN0b3JzO2ZvcihpPTAsbGVuPXNlbGVjdG9ycy5sZW5ndGg7bGVuPmk7aSsrKWZvcihzZWxlY3Rvcj1zZWxlY3RvcnNbaV0scD0wLHBMZW49c2VsZWN0b3IucGFydHMubGVuZ3RoO3BMZW4+cDtwKyspZm9yKG49cCsxO3BMZW4+bjtuKyspcGFydD1zZWxlY3Rvci5wYXJ0c1twXSxwYXJ0Mj1zZWxlY3Rvci5wYXJ0c1tuXSx0eXBlPXBhcnQudHlwZSxjdXJyZW50TGluZT1wYXJ0LmxpbmUsbmV4dExpbmU9cGFydDIubGluZSwiZGVzY2VuZGFudCI9PT10eXBlJiZuZXh0TGluZT5jdXJyZW50TGluZSYmcmVwb3J0ZXIucmVwb3J0KCJuZXdsaW5lIGNoYXJhY3RlciBmb3VuZCBpbiBzZWxlY3RvciAoZm9yZ290IGEgY29tbWE/KSIsY3VycmVudExpbmUsc2VsZWN0b3JzW2ldLnBhcnRzWzBdLmNvbCxydWxlKX12YXIgcnVsZT10aGlzO3BhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIixzdGFydFJ1bGUpfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6InNob3J0aGFuZCIsbmFtZToiUmVxdWlyZSBzaG9ydGhhbmQgcHJvcGVydGllcyIsZGVzYzoiVXNlIHNob3J0aGFuZCBwcm9wZXJ0aWVzIHdoZXJlIHBvc3NpYmxlLiIsYnJvd3NlcnM6IkFsbCIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe2Z1bmN0aW9uIHN0YXJ0UnVsZSgpe3Byb3BlcnRpZXM9e319ZnVuY3Rpb24gZW5kUnVsZShldmVudCl7dmFyIHByb3AsaSxsZW4sdG90YWw7Zm9yKHByb3AgaW4gbWFwcGluZylpZihtYXBwaW5nLmhhc093blByb3BlcnR5KHByb3ApKXtmb3IodG90YWw9MCxpPTAsbGVuPW1hcHBpbmdbcHJvcF0ubGVuZ3RoO2xlbj5pO2krKyl0b3RhbCs9cHJvcGVydGllc1ttYXBwaW5nW3Byb3BdW2ldXT8xOjA7dG90YWw9PT1tYXBwaW5nW3Byb3BdLmxlbmd0aCYmcmVwb3J0ZXIucmVwb3J0KCJUaGUgcHJvcGVydGllcyAiK21hcHBpbmdbcHJvcF0uam9pbigiLCAiKSsiIGNhbiBiZSByZXBsYWNlZCBieSAiK3Byb3ArIi4iLGV2ZW50LmxpbmUsZXZlbnQuY29sLHJ1bGUpfX12YXIgcHJvcCxpLGxlbixwcm9wZXJ0aWVzLHJ1bGU9dGhpcyxwcm9wZXJ0aWVzVG9DaGVjaz17fSxtYXBwaW5nPXttYXJnaW46WyJtYXJnaW4tdG9wIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0Il0scGFkZGluZzpbInBhZGRpbmctdG9wIiwicGFkZGluZy1ib3R0b20iLCJwYWRkaW5nLWxlZnQiLCJwYWRkaW5nLXJpZ2h0Il19O2Zvcihwcm9wIGluIG1hcHBpbmcpaWYobWFwcGluZy5oYXNPd25Qcm9wZXJ0eShwcm9wKSlmb3IoaT0wLGxlbj1tYXBwaW5nW3Byb3BdLmxlbmd0aDtsZW4+aTtpKyspcHJvcGVydGllc1RvQ2hlY2tbbWFwcGluZ1twcm9wXVtpXV09cHJvcDtwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0Zm9udGZhY2UiLHN0YXJ0UnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsZnVuY3Rpb24oZXZlbnQpe3ZhciBuYW1lPSgiIitldmVudC5wcm9wZXJ0eSkudG9Mb3dlckNhc2UoKTtwcm9wZXJ0aWVzVG9DaGVja1tuYW1lXSYmKHByb3BlcnRpZXNbbmFtZV09MSl9KSxwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHJ1bGUiLGVuZFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kZm9udGZhY2UiLGVuZFJ1bGUpfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6InN0YXItcHJvcGVydHktaGFjayIsbmFtZToiRGlzYWxsb3cgcHJvcGVydGllcyB3aXRoIGEgc3RhciBwcmVmaXgiLGRlc2M6IkNoZWNrcyBmb3IgdGhlIHN0YXIgcHJvcGVydHkgaGFjayAodGFyZ2V0cyBJRTYvNykiLGJyb3dzZXJzOiJBbGwiLGluaXQ6ZnVuY3Rpb24ocGFyc2VyLHJlcG9ydGVyKXt2YXIgcnVsZT10aGlzO3BhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLGZ1bmN0aW9uKGV2ZW50KXt2YXIgcHJvcGVydHk9ZXZlbnQucHJvcGVydHk7IioiPT09cHJvcGVydHkuaGFjayYmcmVwb3J0ZXIucmVwb3J0KCJQcm9wZXJ0eSB3aXRoIHN0YXIgcHJlZml4IGZvdW5kLiIsZXZlbnQucHJvcGVydHkubGluZSxldmVudC5wcm9wZXJ0eS5jb2wscnVsZSl9KX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJ0ZXh0LWluZGVudCIsbmFtZToiRGlzYWxsb3cgbmVnYXRpdmUgdGV4dC1pbmRlbnQiLGRlc2M6IkNoZWNrcyBmb3IgdGV4dCBpbmRlbnQgbGVzcyB0aGFuIC05OXB4Iixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7ZnVuY3Rpb24gc3RhcnRSdWxlKCl7dGV4dEluZGVudD0hMSxkaXJlY3Rpb249ImluaGVyaXQifWZ1bmN0aW9uIGVuZFJ1bGUoKXt0ZXh0SW5kZW50JiYibHRyIiE9PWRpcmVjdGlvbiYmcmVwb3J0ZXIucmVwb3J0KCJOZWdhdGl2ZSB0ZXh0LWluZGVudCBkb2VzblwndCB3b3JrIHdlbGwgd2l0aCBSVEwuIElmIHlvdSB1c2UgdGV4dC1pbmRlbnQgZm9yIGltYWdlIHJlcGxhY2VtZW50IGV4cGxpY2l0bHkgc2V0IGRpcmVjdGlvbiBmb3IgdGhhdCBpdGVtIHRvIGx0ci4iLHRleHRJbmRlbnQubGluZSx0ZXh0SW5kZW50LmNvbCxydWxlKX12YXIgdGV4dEluZGVudCxkaXJlY3Rpb24scnVsZT10aGlzO3BhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIixzdGFydFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRmb250ZmFjZSIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IixmdW5jdGlvbihldmVudCl7dmFyIG5hbWU9KCIiK2V2ZW50LnByb3BlcnR5KS50b0xvd2VyQ2FzZSgpLHZhbHVlPWV2ZW50LnZhbHVlOyJ0ZXh0LWluZGVudCI9PT1uYW1lJiYtOTk+dmFsdWUucGFydHNbMF0udmFsdWU/dGV4dEluZGVudD1ldmVudC5wcm9wZXJ0eToiZGlyZWN0aW9uIj09PW5hbWUmJiJsdHIiPT0iIit2YWx1ZSYmKGRpcmVjdGlvbj0ibHRyIil9KSxwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHJ1bGUiLGVuZFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kZm9udGZhY2UiLGVuZFJ1bGUpfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6InVuZGVyc2NvcmUtcHJvcGVydHktaGFjayIsbmFtZToiRGlzYWxsb3cgcHJvcGVydGllcyB3aXRoIGFuIHVuZGVyc2NvcmUgcHJlZml4IixkZXNjOiJDaGVja3MgZm9yIHRoZSB1bmRlcnNjb3JlIHByb3BlcnR5IGhhY2sgKHRhcmdldHMgSUU2KSIsYnJvd3NlcnM6IkFsbCIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe3ZhciBydWxlPXRoaXM7cGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsZnVuY3Rpb24oZXZlbnQpe3ZhciBwcm9wZXJ0eT1ldmVudC5wcm9wZXJ0eTsiXyI9PT1wcm9wZXJ0eS5oYWNrJiZyZXBvcnRlci5yZXBvcnQoIlByb3BlcnR5IHdpdGggdW5kZXJzY29yZSBwcmVmaXggZm91bmQuIixldmVudC5wcm9wZXJ0eS5saW5lLGV2ZW50LnByb3BlcnR5LmNvbCxydWxlKX0pfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6InVuaXF1ZS1oZWFkaW5ncyIsbmFtZToiSGVhZGluZ3Mgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCBvbmNlIixkZXNjOiJIZWFkaW5ncyBzaG91bGQgYmUgZGVmaW5lZCBvbmx5IG9uY2UuIixicm93c2VyczoiQWxsIixpbml0OmZ1bmN0aW9uKHBhcnNlcixyZXBvcnRlcil7dmFyIHJ1bGU9dGhpcyxoZWFkaW5ncz17aDE6MCxoMjowLGgzOjAsaDQ6MCxoNTowLGg2OjB9O3BhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIixmdW5jdGlvbihldmVudCl7dmFyIHNlbGVjdG9yLHBhcnQscHNldWRvLGksaixzZWxlY3RvcnM9ZXZlbnQuc2VsZWN0b3JzO2ZvcihpPTA7c2VsZWN0b3JzLmxlbmd0aD5pO2krKylpZihzZWxlY3Rvcj1zZWxlY3RvcnNbaV0scGFydD1zZWxlY3Rvci5wYXJ0c1tzZWxlY3Rvci5wYXJ0cy5sZW5ndGgtMV0scGFydC5lbGVtZW50TmFtZSYmLyhoWzEtNl0pL2kudGVzdCgiIitwYXJ0LmVsZW1lbnROYW1lKSl7Zm9yKGo9MDtwYXJ0Lm1vZGlmaWVycy5sZW5ndGg+ajtqKyspaWYoInBzZXVkbyI9PT1wYXJ0Lm1vZGlmaWVyc1tqXS50eXBlKXtwc2V1ZG89ITA7YnJlYWt9cHNldWRvfHwoaGVhZGluZ3NbUmVnRXhwLiQxXSsrLGhlYWRpbmdzW1JlZ0V4cC4kMV0+MSYmcmVwb3J0ZXIucmVwb3J0KCJIZWFkaW5nICgiK3BhcnQuZWxlbWVudE5hbWUrIikgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiIscGFydC5saW5lLHBhcnQuY29sLHJ1bGUpKX19KSxwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHN0eWxlc2hlZXQiLGZ1bmN0aW9uKCl7dmFyIHByb3AsbWVzc2FnZXM9W107Zm9yKHByb3AgaW4gaGVhZGluZ3MpaGVhZGluZ3MuaGFzT3duUHJvcGVydHkocHJvcCkmJmhlYWRpbmdzW3Byb3BdPjEmJm1lc3NhZ2VzLnB1c2goaGVhZGluZ3NbcHJvcF0rIiAiK3Byb3ArInMiKTttZXNzYWdlcy5sZW5ndGgmJnJlcG9ydGVyLnJvbGx1cFdhcm4oIllvdSBoYXZlICIrbWVzc2FnZXMuam9pbigiLCAiKSsiIGRlZmluZWQgaW4gdGhpcyBzdHlsZXNoZWV0LiIscnVsZSl9KX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJ1bml2ZXJzYWwtc2VsZWN0b3IiLG5hbWU6IkRpc2FsbG93IHVuaXZlcnNhbCBzZWxlY3RvciIsZGVzYzoiVGhlIHVuaXZlcnNhbCBzZWxlY3RvciAoKikgaXMga25vd24gdG8gYmUgc2xvdy4iLGJyb3dzZXJzOiJBbGwiLGluaXQ6ZnVuY3Rpb24ocGFyc2VyLHJlcG9ydGVyKXt2YXIgcnVsZT10aGlzO3BhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIixmdW5jdGlvbihldmVudCl7dmFyIHNlbGVjdG9yLHBhcnQsaSxzZWxlY3RvcnM9ZXZlbnQuc2VsZWN0b3JzO2ZvcihpPTA7c2VsZWN0b3JzLmxlbmd0aD5pO2krKylzZWxlY3Rvcj1zZWxlY3RvcnNbaV0scGFydD1zZWxlY3Rvci5wYXJ0c1tzZWxlY3Rvci5wYXJ0cy5sZW5ndGgtMV0sIioiPT09cGFydC5lbGVtZW50TmFtZSYmcmVwb3J0ZXIucmVwb3J0KHJ1bGUuZGVzYyxwYXJ0LmxpbmUscGFydC5jb2wscnVsZSl9KX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJ1bnF1YWxpZmllZC1hdHRyaWJ1dGVzIixuYW1lOiJEaXNhbGxvdyB1bnF1YWxpZmllZCBhdHRyaWJ1dGUgc2VsZWN0b3JzIixkZXNjOiJVbnF1YWxpZmllZCBhdHRyaWJ1dGUgc2VsZWN0b3JzIGFyZSBrbm93biB0byBiZSBzbG93LiIsYnJvd3NlcnM6IkFsbCIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe3ZhciBydWxlPXRoaXM7cGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLGZ1bmN0aW9uKGV2ZW50KXt2YXIgc2VsZWN0b3IscGFydCxtb2RpZmllcixpLGssc2VsZWN0b3JzPWV2ZW50LnNlbGVjdG9ycztmb3IoaT0wO3NlbGVjdG9ycy5sZW5ndGg+aTtpKyspaWYoc2VsZWN0b3I9c2VsZWN0b3JzW2ldLHBhcnQ9c2VsZWN0b3IucGFydHNbc2VsZWN0b3IucGFydHMubGVuZ3RoLTFdLHBhcnQudHlwZT09PXBhcnNlci5TRUxFQ1RPUl9QQVJUX1RZUEUpZm9yKGs9MDtwYXJ0Lm1vZGlmaWVycy5sZW5ndGg+aztrKyspbW9kaWZpZXI9cGFydC5tb2RpZmllcnNba10sImF0dHJpYnV0ZSIhPT1tb2RpZmllci50eXBlfHxwYXJ0LmVsZW1lbnROYW1lJiYiKiIhPT1wYXJ0LmVsZW1lbnROYW1lfHxyZXBvcnRlci5yZXBvcnQocnVsZS5kZXNjLHBhcnQubGluZSxwYXJ0LmNvbCxydWxlKX0pfX0pLENTU0xpbnQuYWRkUnVsZSh7aWQ6InZlbmRvci1wcmVmaXgiLG5hbWU6IlJlcXVpcmUgc3RhbmRhcmQgcHJvcGVydHkgd2l0aCB2ZW5kb3IgcHJlZml4IixkZXNjOiJXaGVuIHVzaW5nIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5LCBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGUgc3RhbmRhcmQgb25lLiIsYnJvd3NlcnM6IkFsbCIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe2Z1bmN0aW9uIHN0YXJ0UnVsZSgpe3Byb3BlcnRpZXM9e30sbnVtPTF9ZnVuY3Rpb24gZW5kUnVsZSgpe3ZhciBwcm9wLGksbGVuLG5lZWRlZCxhY3R1YWwsbmVlZHNTdGFuZGFyZD1bXTtmb3IocHJvcCBpbiBwcm9wZXJ0aWVzKXByb3BlcnRpZXNUb0NoZWNrW3Byb3BdJiZuZWVkc1N0YW5kYXJkLnB1c2goe2FjdHVhbDpwcm9wLG5lZWRlZDpwcm9wZXJ0aWVzVG9DaGVja1twcm9wXX0pO2ZvcihpPTAsbGVuPW5lZWRzU3RhbmRhcmQubGVuZ3RoO2xlbj5pO2krKyluZWVkZWQ9bmVlZHNTdGFuZGFyZFtpXS5uZWVkZWQsYWN0dWFsPW5lZWRzU3RhbmRhcmRbaV0uYWN0dWFsLHByb3BlcnRpZXNbbmVlZGVkXT9wcm9wZXJ0aWVzW25lZWRlZF1bMF0ucG9zPHByb3BlcnRpZXNbYWN0dWFsXVswXS5wb3MmJnJlcG9ydGVyLnJlcG9ydCgiU3RhbmRhcmQgcHJvcGVydHkgXCciK25lZWRlZCsiXCcgc2hvdWxkIGNvbWUgYWZ0ZXIgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IFwnIithY3R1YWwrIlwnLiIscHJvcGVydGllc1thY3R1YWxdWzBdLm5hbWUubGluZSxwcm9wZXJ0aWVzW2FjdHVhbF1bMF0ubmFtZS5jb2wscnVsZSk6cmVwb3J0ZXIucmVwb3J0KCJNaXNzaW5nIHN0YW5kYXJkIHByb3BlcnR5IFwnIituZWVkZWQrIlwnIHRvIGdvIGFsb25nIHdpdGggXCciK2FjdHVhbCsiXCcuIixwcm9wZXJ0aWVzW2FjdHVhbF1bMF0ubmFtZS5saW5lLHByb3BlcnRpZXNbYWN0dWFsXVswXS5uYW1lLmNvbCxydWxlKX12YXIgcHJvcGVydGllcyxudW0scnVsZT10aGlzLHByb3BlcnRpZXNUb0NoZWNrPXsiLXdlYmtpdC1ib3JkZXItcmFkaXVzIjoiYm9yZGVyLXJhZGl1cyIsIi13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyI6ImJvcmRlci10b3AtbGVmdC1yYWRpdXMiLCItd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzIjoiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiLCItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIiwiLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyI6ImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiLW8tYm9yZGVyLXJhZGl1cyI6ImJvcmRlci1yYWRpdXMiLCItby1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjoiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsIi1vLWJvcmRlci10b3AtcmlnaHQtcmFkaXVzIjoiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiLCItby1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIjoiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsIi1vLWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjoiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiLCItbW96LWJvcmRlci1yYWRpdXMiOiJib3JkZXItcmFkaXVzIiwiLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQiOiJib3JkZXItdG9wLWxlZnQtcmFkaXVzIiwiLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0IjoiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiLCItbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdCI6ImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiLCItbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQiOiJib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyIsIi1tb3otY29sdW1uLWNvdW50IjoiY29sdW1uLWNvdW50IiwiLXdlYmtpdC1jb2x1bW4tY291bnQiOiJjb2x1bW4tY291bnQiLCItbW96LWNvbHVtbi1nYXAiOiJjb2x1bW4tZ2FwIiwiLXdlYmtpdC1jb2x1bW4tZ2FwIjoiY29sdW1uLWdhcCIsIi1tb3otY29sdW1uLXJ1bGUiOiJjb2x1bW4tcnVsZSIsIi13ZWJraXQtY29sdW1uLXJ1bGUiOiJjb2x1bW4tcnVsZSIsIi1tb3otY29sdW1uLXJ1bGUtc3R5bGUiOiJjb2x1bW4tcnVsZS1zdHlsZSIsIi13ZWJraXQtY29sdW1uLXJ1bGUtc3R5bGUiOiJjb2x1bW4tcnVsZS1zdHlsZSIsIi1tb3otY29sdW1uLXJ1bGUtY29sb3IiOiJjb2x1bW4tcnVsZS1jb2xvciIsIi13ZWJraXQtY29sdW1uLXJ1bGUtY29sb3IiOiJjb2x1bW4tcnVsZS1jb2xvciIsIi1tb3otY29sdW1uLXJ1bGUtd2lkdGgiOiJjb2x1bW4tcnVsZS13aWR0aCIsIi13ZWJraXQtY29sdW1uLXJ1bGUtd2lkdGgiOiJjb2x1bW4tcnVsZS13aWR0aCIsIi1tb3otY29sdW1uLXdpZHRoIjoiY29sdW1uLXdpZHRoIiwiLXdlYmtpdC1jb2x1bW4td2lkdGgiOiJjb2x1bW4td2lkdGgiLCItd2Via2l0LWNvbHVtbi1zcGFuIjoiY29sdW1uLXNwYW4iLCItd2Via2l0LWNvbHVtbnMiOiJjb2x1bW5zIiwiLW1vei1ib3gtc2hhZG93IjoiYm94LXNoYWRvdyIsIi13ZWJraXQtYm94LXNoYWRvdyI6ImJveC1zaGFkb3ciLCItbW96LXRyYW5zZm9ybSI6InRyYW5zZm9ybSIsIi13ZWJraXQtdHJhbnNmb3JtIjoidHJhbnNmb3JtIiwiLW8tdHJhbnNmb3JtIjoidHJhbnNmb3JtIiwiLW1zLXRyYW5zZm9ybSI6InRyYW5zZm9ybSIsIi1tb3otdHJhbnNmb3JtLW9yaWdpbiI6InRyYW5zZm9ybS1vcmlnaW4iLCItd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4iOiJ0cmFuc2Zvcm0tb3JpZ2luIiwiLW8tdHJhbnNmb3JtLW9yaWdpbiI6InRyYW5zZm9ybS1vcmlnaW4iLCItbXMtdHJhbnNmb3JtLW9yaWdpbiI6InRyYW5zZm9ybS1vcmlnaW4iLCItbW96LWJveC1zaXppbmciOiJib3gtc2l6aW5nIiwiLXdlYmtpdC1ib3gtc2l6aW5nIjoiYm94LXNpemluZyJ9O3BhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIixzdGFydFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRmb250ZmFjZSIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cGFnZSIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cGFnZW1hcmdpbiIsc3RhcnRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0a2V5ZnJhbWVydWxlIixzdGFydFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLGZ1bmN0aW9uKGV2ZW50KXt2YXIgbmFtZT1ldmVudC5wcm9wZXJ0eS50ZXh0LnRvTG93ZXJDYXNlKCk7cHJvcGVydGllc1tuYW1lXXx8KHByb3BlcnRpZXNbbmFtZV09W10pLHByb3BlcnRpZXNbbmFtZV0ucHVzaCh7bmFtZTpldmVudC5wcm9wZXJ0eSx2YWx1ZTpldmVudC52YWx1ZSxwb3M6bnVtKyt9KX0pLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kcnVsZSIsZW5kUnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJlbmRmb250ZmFjZSIsZW5kUnVsZSkscGFyc2VyLmFkZExpc3RlbmVyKCJlbmRwYWdlIixlbmRSdWxlKSxwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHBhZ2VtYXJnaW4iLGVuZFJ1bGUpLHBhcnNlci5hZGRMaXN0ZW5lcigiZW5ka2V5ZnJhbWVydWxlIixlbmRSdWxlKX19KSxDU1NMaW50LmFkZFJ1bGUoe2lkOiJ6ZXJvLXVuaXRzIixuYW1lOiJEaXNhbGxvdyB1bml0cyBmb3IgMCB2YWx1ZXMiLGRlc2M6IllvdSBkb25cJ3QgbmVlZCB0byBzcGVjaWZ5IHVuaXRzIHdoZW4gYSB2YWx1ZSBpcyAwLiIsYnJvd3NlcnM6IkFsbCIsaW5pdDpmdW5jdGlvbihwYXJzZXIscmVwb3J0ZXIpe3ZhciBydWxlPXRoaXM7cGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsZnVuY3Rpb24oZXZlbnQpe2Zvcih2YXIgcGFydHM9ZXZlbnQudmFsdWUucGFydHMsaT0wLGxlbj1wYXJ0cy5sZW5ndGg7bGVuPmk7KSFwYXJ0c1tpXS51bml0cyYmInBlcmNlbnRhZ2UiIT09cGFydHNbaV0udHlwZXx8MCE9PXBhcnRzW2ldLnZhbHVlfHwidGltZSI9PT1wYXJ0c1tpXS50eXBlfHxyZXBvcnRlci5yZXBvcnQoIlZhbHVlcyBvZiAwIHNob3VsZG5cJ3QgaGF2ZSB1bml0cyBzcGVjaWZpZWQuIixwYXJ0c1tpXS5saW5lLHBhcnRzW2ldLmNvbCxydWxlKSxpKyt9KX19KSxmdW5jdGlvbigpe3ZhciB4bWxFc2NhcGU9ZnVuY3Rpb24oc3RyKXtyZXR1cm4gc3RyJiZzdHIuY29uc3RydWN0b3I9PT1TdHJpbmc/c3RyLnJlcGxhY2UoL1tcXCImPjxdL2csZnVuY3Rpb24obWF0Y2gpe3N3aXRjaChtYXRjaCl7Y2FzZVwnIlwnOnJldHVybiImcXVvdDsiO2Nhc2UiJiI6cmV0dXJuIiZhbXA7IjtjYXNlIjwiOnJldHVybiImbHQ7IjtjYXNlIj4iOnJldHVybiImZ3Q7In19KToiIn07Q1NTTGludC5hZGRGb3JtYXR0ZXIoe2lkOiJjaGVja3N0eWxlLXhtbCIsbmFtZToiQ2hlY2tzdHlsZSBYTUwgZm9ybWF0IixzdGFydEZvcm1hdDpmdW5jdGlvbigpe3JldHVyblwnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48Y2hlY2tzdHlsZT5cJ30sZW5kRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIjwvY2hlY2tzdHlsZT4ifSxyZWFkRXJyb3I6ZnVuY3Rpb24oZmlsZW5hbWUsbWVzc2FnZSl7cmV0dXJuXCc8ZmlsZSBuYW1lPSJcJyt4bWxFc2NhcGUoZmlsZW5hbWUpK1wnIj48ZXJyb3IgbGluZT0iMCIgY29sdW1uPSIwIiBzZXZlcnR5PSJlcnJvciIgbWVzc2FnZT0iXCcreG1sRXNjYXBlKG1lc3NhZ2UpK1wnIj48L2Vycm9yPjwvZmlsZT5cJ30sZm9ybWF0UmVzdWx0czpmdW5jdGlvbihyZXN1bHRzLGZpbGVuYW1lKXt2YXIgbWVzc2FnZXM9cmVzdWx0cy5tZXNzYWdlcyxvdXRwdXQ9W10sZ2VuZXJhdGVTb3VyY2U9ZnVuY3Rpb24ocnVsZSl7cmV0dXJuIHJ1bGUmJiJuYW1lImluIHJ1bGU/Im5ldC5jc3NsaW50LiIrcnVsZS5uYW1lLnJlcGxhY2UoL1xccy9nLCIiKToiIn07cmV0dXJuIG1lc3NhZ2VzLmxlbmd0aD4wJiYob3V0cHV0LnB1c2goXCc8ZmlsZSBuYW1lPSJcJytmaWxlbmFtZStcJyI+XCcpLENTU0xpbnQuVXRpbC5mb3JFYWNoKG1lc3NhZ2VzLGZ1bmN0aW9uKG1lc3NhZ2Upe21lc3NhZ2Uucm9sbHVwfHxvdXRwdXQucHVzaChcJzxlcnJvciBsaW5lPSJcJyttZXNzYWdlLmxpbmUrXCciIGNvbHVtbj0iXCcrbWVzc2FnZS5jb2wrXCciIHNldmVyaXR5PSJcJyttZXNzYWdlLnR5cGUrXCciXCcrXCcgbWVzc2FnZT0iXCcreG1sRXNjYXBlKG1lc3NhZ2UubWVzc2FnZSkrXCciIHNvdXJjZT0iXCcrZ2VuZXJhdGVTb3VyY2UobWVzc2FnZS5ydWxlKStcJyIvPlwnKX0pLG91dHB1dC5wdXNoKCI8L2ZpbGU+IikpLG91dHB1dC5qb2luKCIiKX19KX0oKSxDU1NMaW50LmFkZEZvcm1hdHRlcih7aWQ6ImNvbXBhY3QiLG5hbWU6IkNvbXBhY3QsIFwncG9yY2VsYWluXCcgZm9ybWF0IixzdGFydEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiIifSxlbmRGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sZm9ybWF0UmVzdWx0czpmdW5jdGlvbihyZXN1bHRzLGZpbGVuYW1lLG9wdGlvbnMpe3ZhciBtZXNzYWdlcz1yZXN1bHRzLm1lc3NhZ2VzLG91dHB1dD0iIjtvcHRpb25zPW9wdGlvbnN8fHt9O3ZhciBjYXBpdGFsaXplPWZ1bmN0aW9uKHN0cil7cmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStzdHIuc2xpY2UoMSl9O3JldHVybiAwPT09bWVzc2FnZXMubGVuZ3RoP29wdGlvbnMucXVpZXQ/IiI6ZmlsZW5hbWUrIjogTGludCBGcmVlISI6KENTU0xpbnQuVXRpbC5mb3JFYWNoKG1lc3NhZ2VzLGZ1bmN0aW9uKG1lc3NhZ2Upe291dHB1dCs9bWVzc2FnZS5yb2xsdXA/ZmlsZW5hbWUrIjogIitjYXBpdGFsaXplKG1lc3NhZ2UudHlwZSkrIiAtICIrbWVzc2FnZS5tZXNzYWdlKyJcXG4iOmZpbGVuYW1lKyI6ICIrImxpbmUgIittZXNzYWdlLmxpbmUrIiwgY29sICIrbWVzc2FnZS5jb2wrIiwgIitjYXBpdGFsaXplKG1lc3NhZ2UudHlwZSkrIiAtICIrbWVzc2FnZS5tZXNzYWdlKyIgKCIrbWVzc2FnZS5ydWxlLmlkKyIpXFxuIn0pLG91dHB1dCl9fSksQ1NTTGludC5hZGRGb3JtYXR0ZXIoe2lkOiJjc3NsaW50LXhtbCIsbmFtZToiQ1NTTGludCBYTUwgZm9ybWF0IixzdGFydEZvcm1hdDpmdW5jdGlvbigpe3JldHVyblwnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48Y3NzbGludD5cJ30sZW5kRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIjwvY3NzbGludD4ifSxmb3JtYXRSZXN1bHRzOmZ1bmN0aW9uKHJlc3VsdHMsZmlsZW5hbWUpe3ZhciBtZXNzYWdlcz1yZXN1bHRzLm1lc3NhZ2VzLG91dHB1dD1bXSxlc2NhcGVTcGVjaWFsQ2hhcmFjdGVycz1mdW5jdGlvbihzdHIpe3JldHVybiBzdHImJnN0ci5jb25zdHJ1Y3Rvcj09PVN0cmluZz9zdHIucmVwbGFjZSgvXFwiL2csIlwnIikucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpOiIifTtyZXR1cm4gbWVzc2FnZXMubGVuZ3RoPjAmJihvdXRwdXQucHVzaChcJzxmaWxlIG5hbWU9IlwnK2ZpbGVuYW1lK1wnIj5cJyksQ1NTTGludC5VdGlsLmZvckVhY2gobWVzc2FnZXMsZnVuY3Rpb24obWVzc2FnZSl7bWVzc2FnZS5yb2xsdXA/b3V0cHV0LnB1c2goXCc8aXNzdWUgc2V2ZXJpdHk9IlwnK21lc3NhZ2UudHlwZStcJyIgcmVhc29uPSJcJytlc2NhcGVTcGVjaWFsQ2hhcmFjdGVycyhtZXNzYWdlLm1lc3NhZ2UpK1wnIiBldmlkZW5jZT0iXCcrZXNjYXBlU3BlY2lhbENoYXJhY3RlcnMobWVzc2FnZS5ldmlkZW5jZSkrXCciLz5cJyk6b3V0cHV0LnB1c2goXCc8aXNzdWUgbGluZT0iXCcrbWVzc2FnZS5saW5lK1wnIiBjaGFyPSJcJyttZXNzYWdlLmNvbCtcJyIgc2V2ZXJpdHk9IlwnK21lc3NhZ2UudHlwZStcJyJcJytcJyByZWFzb249IlwnK2VzY2FwZVNwZWNpYWxDaGFyYWN0ZXJzKG1lc3NhZ2UubWVzc2FnZSkrXCciIGV2aWRlbmNlPSJcJytlc2NhcGVTcGVjaWFsQ2hhcmFjdGVycyhtZXNzYWdlLmV2aWRlbmNlKStcJyIvPlwnKX0pLG91dHB1dC5wdXNoKCI8L2ZpbGU+IikpLG91dHB1dC5qb2luKCIiKX19KSxDU1NMaW50LmFkZEZvcm1hdHRlcih7aWQ6Imp1bml0LXhtbCIsbmFtZToiSlVOSVQgWE1MIGZvcm1hdCIsc3RhcnRGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm5cJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PHRlc3RzdWl0ZXM+XCd9LGVuZEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiI8L3Rlc3RzdWl0ZXM+In0sZm9ybWF0UmVzdWx0czpmdW5jdGlvbihyZXN1bHRzLGZpbGVuYW1lKXt2YXIgbWVzc2FnZXM9cmVzdWx0cy5tZXNzYWdlcyxvdXRwdXQ9W10sdGVzdHM9e2Vycm9yOjAsZmFpbHVyZTowfSxnZW5lcmF0ZVNvdXJjZT1mdW5jdGlvbihydWxlKXtyZXR1cm4gcnVsZSYmIm5hbWUiaW4gcnVsZT8ibmV0LmNzc2xpbnQuIitydWxlLm5hbWUucmVwbGFjZSgvXFxzL2csIiIpOiIifSxlc2NhcGVTcGVjaWFsQ2hhcmFjdGVycz1mdW5jdGlvbihzdHIpe3JldHVybiBzdHImJnN0ci5jb25zdHJ1Y3Rvcj09PVN0cmluZz9zdHIucmVwbGFjZSgvXFwiL2csIlwnIikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iik6IiJ9O3JldHVybiBtZXNzYWdlcy5sZW5ndGg+MCYmKG1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24obWVzc2FnZSl7dmFyIHR5cGU9Indhcm5pbmciPT09bWVzc2FnZS50eXBlPyJlcnJvciI6bWVzc2FnZS50eXBlO21lc3NhZ2Uucm9sbHVwfHwob3V0cHV0LnB1c2goXCc8dGVzdGNhc2UgdGltZT0iMCIgbmFtZT0iXCcrZ2VuZXJhdGVTb3VyY2UobWVzc2FnZS5ydWxlKStcJyI+XCcpLG91dHB1dC5wdXNoKCI8Iit0eXBlK1wnIG1lc3NhZ2U9IlwnK2VzY2FwZVNwZWNpYWxDaGFyYWN0ZXJzKG1lc3NhZ2UubWVzc2FnZSkrXCciPjwhW0NEQVRBW1wnK21lc3NhZ2UubGluZSsiOiIrbWVzc2FnZS5jb2wrIjoiK2VzY2FwZVNwZWNpYWxDaGFyYWN0ZXJzKG1lc3NhZ2UuZXZpZGVuY2UpKyJdXT48LyIrdHlwZSsiPiIpLG91dHB1dC5wdXNoKCI8L3Rlc3RjYXNlPiIpLHRlc3RzW3R5cGVdKz0xKX0pLG91dHB1dC51bnNoaWZ0KFwnPHRlc3RzdWl0ZSB0aW1lPSIwIiB0ZXN0cz0iXCcrbWVzc2FnZXMubGVuZ3RoK1wnIiBza2lwcGVkPSIwIiBlcnJvcnM9IlwnK3Rlc3RzLmVycm9yK1wnIiBmYWlsdXJlcz0iXCcrdGVzdHMuZmFpbHVyZStcJyIgcGFja2FnZT0ibmV0LmNzc2xpbnQiIG5hbWU9IlwnK2ZpbGVuYW1lK1wnIj5cJyksb3V0cHV0LnB1c2goIjwvdGVzdHN1aXRlPiIpKSxvdXRwdXQuam9pbigiIil9fSksQ1NTTGludC5hZGRGb3JtYXR0ZXIoe2lkOiJsaW50LXhtbCIsbmFtZToiTGludCBYTUwgZm9ybWF0IixzdGFydEZvcm1hdDpmdW5jdGlvbigpe3JldHVyblwnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48bGludD5cJ30sZW5kRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIjwvbGludD4ifSxmb3JtYXRSZXN1bHRzOmZ1bmN0aW9uKHJlc3VsdHMsZmlsZW5hbWUpe3ZhciBtZXNzYWdlcz1yZXN1bHRzLm1lc3NhZ2VzLG91dHB1dD1bXSxlc2NhcGVTcGVjaWFsQ2hhcmFjdGVycz1mdW5jdGlvbihzdHIpe3JldHVybiBzdHImJnN0ci5jb25zdHJ1Y3Rvcj09PVN0cmluZz9zdHIucmVwbGFjZSgvXFwiL2csIlwnIikucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpOiIifTtyZXR1cm4gbWVzc2FnZXMubGVuZ3RoPjAmJihvdXRwdXQucHVzaChcJzxmaWxlIG5hbWU9IlwnK2ZpbGVuYW1lK1wnIj5cJyksQ1NTTGludC5VdGlsLmZvckVhY2gobWVzc2FnZXMsZnVuY3Rpb24obWVzc2FnZSl7bWVzc2FnZS5yb2xsdXA/b3V0cHV0LnB1c2goXCc8aXNzdWUgc2V2ZXJpdHk9IlwnK21lc3NhZ2UudHlwZStcJyIgcmVhc29uPSJcJytlc2NhcGVTcGVjaWFsQ2hhcmFjdGVycyhtZXNzYWdlLm1lc3NhZ2UpK1wnIiBldmlkZW5jZT0iXCcrZXNjYXBlU3BlY2lhbENoYXJhY3RlcnMobWVzc2FnZS5ldmlkZW5jZSkrXCciLz5cJyk6b3V0cHV0LnB1c2goXCc8aXNzdWUgbGluZT0iXCcrbWVzc2FnZS5saW5lK1wnIiBjaGFyPSJcJyttZXNzYWdlLmNvbCtcJyIgc2V2ZXJpdHk9IlwnK21lc3NhZ2UudHlwZStcJyJcJytcJyByZWFzb249IlwnK2VzY2FwZVNwZWNpYWxDaGFyYWN0ZXJzKG1lc3NhZ2UubWVzc2FnZSkrXCciIGV2aWRlbmNlPSJcJytlc2NhcGVTcGVjaWFsQ2hhcmFjdGVycyhtZXNzYWdlLmV2aWRlbmNlKStcJyIvPlwnKX0pLG91dHB1dC5wdXNoKCI8L2ZpbGU+IikpLG91dHB1dC5qb2luKCIiKX19KSxDU1NMaW50LmFkZEZvcm1hdHRlcih7aWQ6InRleHQiLG5hbWU6IlBsYWluIFRleHQiLHN0YXJ0Rm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LGVuZEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiIifSxmb3JtYXRSZXN1bHRzOmZ1bmN0aW9uKHJlc3VsdHMsZmlsZW5hbWUsb3B0aW9ucyl7dmFyIG1lc3NhZ2VzPXJlc3VsdHMubWVzc2FnZXMsb3V0cHV0PSIiO2lmKG9wdGlvbnM9b3B0aW9uc3x8e30sMD09PW1lc3NhZ2VzLmxlbmd0aClyZXR1cm4gb3B0aW9ucy5xdWlldD8iIjoiXFxuXFxuY3NzbGludDogTm8gZXJyb3JzIGluICIrZmlsZW5hbWUrIi4iO291dHB1dD0iXFxuXFxuY3NzbGludDogVGhlcmUgIixvdXRwdXQrPTE9PT1tZXNzYWdlcy5sZW5ndGg/ImlzIDEgcHJvYmxlbSI6ImFyZSAiK21lc3NhZ2VzLmxlbmd0aCsiIHByb2JsZW1zIixvdXRwdXQrPSIgaW4gIitmaWxlbmFtZSsiLiI7dmFyIHBvcz1maWxlbmFtZS5sYXN0SW5kZXhPZigiLyIpLHNob3J0RmlsZW5hbWU9ZmlsZW5hbWU7cmV0dXJuLTE9PT1wb3MmJihwb3M9ZmlsZW5hbWUubGFzdEluZGV4T2YoIlxcXFwiKSkscG9zPi0xJiYoc2hvcnRGaWxlbmFtZT1maWxlbmFtZS5zdWJzdHJpbmcocG9zKzEpKSxDU1NMaW50LlV0aWwuZm9yRWFjaChtZXNzYWdlcyxmdW5jdGlvbihtZXNzYWdlLGkpe291dHB1dD1vdXRwdXQrIlxcblxcbiIrc2hvcnRGaWxlbmFtZSxtZXNzYWdlLnJvbGx1cD8ob3V0cHV0Kz0iXFxuIisoaSsxKSsiOiAiK21lc3NhZ2UudHlwZSxvdXRwdXQrPSJcXG4iK21lc3NhZ2UubWVzc2FnZSk6KG91dHB1dCs9IlxcbiIrKGkrMSkrIjogIittZXNzYWdlLnR5cGUrIiBhdCBsaW5lICIrbWVzc2FnZS5saW5lKyIsIGNvbCAiK21lc3NhZ2UuY29sLG91dHB1dCs9IlxcbiIrbWVzc2FnZS5tZXNzYWdlLG91dHB1dCs9IlxcbiIrbWVzc2FnZS5ldmlkZW5jZSl9KSxvdXRwdXR9fSksbW9kdWxlLmV4cG9ydHMuQ1NTTGludD1DU1NMaW50fSksYWNlLmRlZmluZSgiYWNlL21vZGUvY3NzX3dvcmtlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3dvcmtlci9taXJyb3IiLCJhY2UvbW9kZS9jc3MvY3NzbGludCJdLGZ1bmN0aW9uKGFjZXF1aXJlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgb29wPWFjZXF1aXJlKCIuLi9saWIvb29wIiksbGFuZz1hY2VxdWlyZSgiLi4vbGliL2xhbmciKSxNaXJyb3I9YWNlcXVpcmUoIi4uL3dvcmtlci9taXJyb3IiKS5NaXJyb3IsQ1NTTGludD1hY2VxdWlyZSgiLi9jc3MvY3NzbGludCIpLkNTU0xpbnQsV29ya2VyPWV4cG9ydHMuV29ya2VyPWZ1bmN0aW9uKHNlbmRlcil7TWlycm9yLmNhbGwodGhpcyxzZW5kZXIpLHRoaXMuc2V0VGltZW91dCg0MDApLHRoaXMucnVsZXNldD1udWxsLHRoaXMuc2V0RGlzYWJsZWRSdWxlcygiaWRzfG9yZGVyLWFscGhhYmV0aWNhbCIpLHRoaXMuc2V0SW5mb1J1bGVzKCJhZGpvaW5pbmctY2xhc3Nlc3xxdWFsaWZpZWQtaGVhZGluZ3N8emVyby11bml0c3xncmFkaWVudHN8aW1wb3J0fG91dGxpbmUtbm9uZXx2ZW5kb3ItcHJlZml4Iil9O29vcC5pbmhlcml0cyhXb3JrZXIsTWlycm9yKSxmdW5jdGlvbigpe3RoaXMuc2V0SW5mb1J1bGVzPWZ1bmN0aW9uKHJ1bGVOYW1lcyl7InN0cmluZyI9PXR5cGVvZiBydWxlTmFtZXMmJihydWxlTmFtZXM9cnVsZU5hbWVzLnNwbGl0KCJ8IikpLHRoaXMuaW5mb1J1bGVzPWxhbmcuYXJyYXlUb01hcChydWxlTmFtZXMpLHRoaXMuZG9jLmdldFZhbHVlKCkmJnRoaXMuZGVmZXJyZWRVcGRhdGUuc2NoZWR1bGUoMTAwKX0sdGhpcy5zZXREaXNhYmxlZFJ1bGVzPWZ1bmN0aW9uKHJ1bGVOYW1lcyl7aWYocnVsZU5hbWVzKXsic3RyaW5nIj09dHlwZW9mIHJ1bGVOYW1lcyYmKHJ1bGVOYW1lcz1ydWxlTmFtZXMuc3BsaXQoInwiKSk7XG52YXIgYWxsPXt9O0NTU0xpbnQuZ2V0UnVsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHgpe2FsbFt4LmlkXT0hMH0pLHJ1bGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKHgpe2RlbGV0ZSBhbGxbeF19KSx0aGlzLnJ1bGVzZXQ9YWxsfWVsc2UgdGhpcy5ydWxlc2V0PW51bGw7dGhpcy5kb2MuZ2V0VmFsdWUoKSYmdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSgxMDApfSx0aGlzLm9uVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIHZhbHVlPXRoaXMuZG9jLmdldFZhbHVlKCk7aWYoIXZhbHVlKXJldHVybiB0aGlzLnNlbmRlci5lbWl0KCJhbm5vdGF0ZSIsW10pO3ZhciBpbmZvUnVsZXM9dGhpcy5pbmZvUnVsZXMscmVzdWx0PUNTU0xpbnQudmVyaWZ5KHZhbHVlLHRoaXMucnVsZXNldCk7dGhpcy5zZW5kZXIuZW1pdCgiYW5ub3RhdGUiLHJlc3VsdC5tZXNzYWdlcy5tYXAoZnVuY3Rpb24obXNnKXtyZXR1cm57cm93Om1zZy5saW5lLTEsY29sdW1uOm1zZy5jb2wtMSx0ZXh0Om1zZy5tZXNzYWdlLHR5cGU6aW5mb1J1bGVzW21zZy5ydWxlLmlkXT8iaW5mbyI6bXNnLnR5cGUscnVsZTptc2cucnVsZS5uYW1lfX0pKX19LmNhbGwoV29ya2VyLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbGliL2VzNS1zaGltIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oKXtmdW5jdGlvbiBFbXB0eSgpe31mdW5jdGlvbiBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKG9iamVjdCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCJzZW50aW5lbCIse30pLCJzZW50aW5lbCJpbiBvYmplY3R9Y2F0Y2goZXhjZXB0aW9uKXt9fWZ1bmN0aW9uIHRvSW50ZWdlcihuKXtyZXR1cm4gbj0rbixuIT09bj9uPTA6MCE9PW4mJm4hPT0xLzAmJm4hPT0tKDEvMCkmJihuPShuPjB8fC0xKSpNYXRoLmZsb29yKE1hdGguYWJzKG4pKSksbn1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHRoYXQpe3ZhciB0YXJnZXQ9dGhpcztpZigiZnVuY3Rpb24iIT10eXBlb2YgdGFyZ2V0KXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIit0YXJnZXQpO3ZhciBhcmdzPXNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGJvdW5kPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIGJvdW5kKXt2YXIgcmVzdWx0PXRhcmdldC5hcHBseSh0aGlzLGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO3JldHVybiBPYmplY3QocmVzdWx0KT09PXJlc3VsdD9yZXN1bHQ6dGhpc31yZXR1cm4gdGFyZ2V0LmFwcGx5KHRoYXQsYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSl9O3JldHVybiB0YXJnZXQucHJvdG90eXBlJiYoRW1wdHkucHJvdG90eXBlPXRhcmdldC5wcm90b3R5cGUsYm91bmQucHJvdG90eXBlPW5ldyBFbXB0eSxFbXB0eS5wcm90b3R5cGU9bnVsbCksYm91bmR9KTt2YXIgZGVmaW5lR2V0dGVyLGRlZmluZVNldHRlcixsb29rdXBHZXR0ZXIsbG9va3VwU2V0dGVyLHN1cHBvcnRzQWNjZXNzb3JzLGNhbGw9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwscHJvdG90eXBlT2ZBcnJheT1BcnJheS5wcm90b3R5cGUscHJvdG90eXBlT2ZPYmplY3Q9T2JqZWN0LnByb3RvdHlwZSxzbGljZT1wcm90b3R5cGVPZkFycmF5LnNsaWNlLF90b1N0cmluZz1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QudG9TdHJpbmcpLG93bnM9Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTtpZigoc3VwcG9ydHNBY2Nlc3NvcnM9b3ducyhwcm90b3R5cGVPZk9iamVjdCwiX19kZWZpbmVHZXR0ZXJfXyIpKSYmKGRlZmluZUdldHRlcj1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVHZXR0ZXJfXyksZGVmaW5lU2V0dGVyPWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZVNldHRlcl9fKSxsb29rdXBHZXR0ZXI9Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pLGxvb2t1cFNldHRlcj1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBTZXR0ZXJfXykpLDIhPVsxLDJdLnNwbGljZSgwKS5sZW5ndGgpaWYoZnVuY3Rpb24oKXtmdW5jdGlvbiBtYWtlQXJyYXkobCl7dmFyIGE9QXJyYXkobCsyKTtyZXR1cm4gYVswXT1hWzFdPTAsYX12YXIgbGVuZ3RoQmVmb3JlLGFycmF5PVtdO3JldHVybiBhcnJheS5zcGxpY2UuYXBwbHkoYXJyYXksbWFrZUFycmF5KDIwKSksYXJyYXkuc3BsaWNlLmFwcGx5KGFycmF5LG1ha2VBcnJheSgyNikpLGxlbmd0aEJlZm9yZT1hcnJheS5sZW5ndGgsYXJyYXkuc3BsaWNlKDUsMCwiWFhYIiksbGVuZ3RoQmVmb3JlKzE9PWFycmF5Lmxlbmd0aCxsZW5ndGhCZWZvcmUrMT09YXJyYXkubGVuZ3RoPyEwOnZvaWQgMH0oKSl7dmFyIGFycmF5X3NwbGljZT1BcnJheS5wcm90b3R5cGUuc3BsaWNlO0FycmF5LnByb3RvdHlwZS5zcGxpY2U9ZnVuY3Rpb24oc3RhcnQsZGVsZXRlQ291bnQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2FycmF5X3NwbGljZS5hcHBseSh0aGlzLFt2b2lkIDA9PT1zdGFydD8wOnN0YXJ0LHZvaWQgMD09PWRlbGV0ZUNvdW50P3RoaXMubGVuZ3RoLXN0YXJ0OmRlbGV0ZUNvdW50XS5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMsMikpKTpbXX19ZWxzZSBBcnJheS5wcm90b3R5cGUuc3BsaWNlPWZ1bmN0aW9uKHBvcyxyZW1vdmVDb3VudCl7dmFyIGxlbmd0aD10aGlzLmxlbmd0aDtwb3M+MD9wb3M+bGVuZ3RoJiYocG9zPWxlbmd0aCk6dm9pZCAwPT1wb3M/cG9zPTA6MD5wb3MmJihwb3M9TWF0aC5tYXgobGVuZ3RoK3BvcywwKSksbGVuZ3RoPnBvcytyZW1vdmVDb3VudHx8KHJlbW92ZUNvdW50PWxlbmd0aC1wb3MpO3ZhciByZW1vdmVkPXRoaXMuc2xpY2UocG9zLHBvcytyZW1vdmVDb3VudCksaW5zZXJ0PXNsaWNlLmNhbGwoYXJndW1lbnRzLDIpLGFkZD1pbnNlcnQubGVuZ3RoO2lmKHBvcz09PWxlbmd0aClhZGQmJnRoaXMucHVzaC5hcHBseSh0aGlzLGluc2VydCk7ZWxzZXt2YXIgcmVtb3ZlPU1hdGgubWluKHJlbW92ZUNvdW50LGxlbmd0aC1wb3MpLHRhaWxPbGRQb3M9cG9zK3JlbW92ZSx0YWlsTmV3UG9zPXRhaWxPbGRQb3MrYWRkLXJlbW92ZSx0YWlsQ291bnQ9bGVuZ3RoLXRhaWxPbGRQb3MsbGVuZ3RoQWZ0ZXJSZW1vdmU9bGVuZ3RoLXJlbW92ZTtpZih0YWlsT2xkUG9zPnRhaWxOZXdQb3MpZm9yKHZhciBpPTA7dGFpbENvdW50Pmk7KytpKXRoaXNbdGFpbE5ld1BvcytpXT10aGlzW3RhaWxPbGRQb3MraV07ZWxzZSBpZih0YWlsTmV3UG9zPnRhaWxPbGRQb3MpZm9yKGk9dGFpbENvdW50O2ktLTspdGhpc1t0YWlsTmV3UG9zK2ldPXRoaXNbdGFpbE9sZFBvcytpXTtpZihhZGQmJnBvcz09PWxlbmd0aEFmdGVyUmVtb3ZlKXRoaXMubGVuZ3RoPWxlbmd0aEFmdGVyUmVtb3ZlLHRoaXMucHVzaC5hcHBseSh0aGlzLGluc2VydCk7ZWxzZSBmb3IodGhpcy5sZW5ndGg9bGVuZ3RoQWZ0ZXJSZW1vdmUrYWRkLGk9MDthZGQ+aTsrK2kpdGhpc1twb3MraV09aW5zZXJ0W2ldfXJldHVybiByZW1vdmVkfTtBcnJheS5pc0FycmF5fHwoQXJyYXkuaXNBcnJheT1mdW5jdGlvbihvYmope3JldHVybiJbb2JqZWN0IEFycmF5XSI9PV90b1N0cmluZyhvYmopfSk7dmFyIGJveGVkU3RyaW5nPU9iamVjdCgiYSIpLHNwbGl0U3RyaW5nPSJhIiE9Ym94ZWRTdHJpbmdbMF18fCEoMCBpbiBib3hlZFN0cmluZyk7aWYoQXJyYXkucHJvdG90eXBlLmZvckVhY2h8fChBcnJheS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihmdW4pe3ZhciBvYmplY3Q9dG9PYmplY3QodGhpcyksc2VsZj1zcGxpdFN0cmluZyYmIltvYmplY3QgU3RyaW5nXSI9PV90b1N0cmluZyh0aGlzKT90aGlzLnNwbGl0KCIiKTpvYmplY3QsdGhpc3A9YXJndW1lbnRzWzFdLGk9LTEsbGVuZ3RoPXNlbGYubGVuZ3RoPj4+MDtpZigiW29iamVjdCBGdW5jdGlvbl0iIT1fdG9TdHJpbmcoZnVuKSl0aHJvdyBuZXcgVHlwZUVycm9yO2Zvcig7bGVuZ3RoPisraTspaSBpbiBzZWxmJiZmdW4uY2FsbCh0aGlzcCxzZWxmW2ldLGksb2JqZWN0KX0pLEFycmF5LnByb3RvdHlwZS5tYXB8fChBcnJheS5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGZ1bil7dmFyIG9iamVjdD10b09iamVjdCh0aGlzKSxzZWxmPXNwbGl0U3RyaW5nJiYiW29iamVjdCBTdHJpbmddIj09X3RvU3RyaW5nKHRoaXMpP3RoaXMuc3BsaXQoIiIpOm9iamVjdCxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wLHJlc3VsdD1BcnJheShsZW5ndGgpLHRoaXNwPWFyZ3VtZW50c1sxXTtpZigiW29iamVjdCBGdW5jdGlvbl0iIT1fdG9TdHJpbmcoZnVuKSl0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Zm9yKHZhciBpPTA7bGVuZ3RoPmk7aSsrKWkgaW4gc2VsZiYmKHJlc3VsdFtpXT1mdW4uY2FsbCh0aGlzcCxzZWxmW2ldLGksb2JqZWN0KSk7cmV0dXJuIHJlc3VsdH0pLEFycmF5LnByb3RvdHlwZS5maWx0ZXJ8fChBcnJheS5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKGZ1bil7dmFyIHZhbHVlLG9iamVjdD10b09iamVjdCh0aGlzKSxzZWxmPXNwbGl0U3RyaW5nJiYiW29iamVjdCBTdHJpbmddIj09X3RvU3RyaW5nKHRoaXMpP3RoaXMuc3BsaXQoIiIpOm9iamVjdCxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wLHJlc3VsdD1bXSx0aGlzcD1hcmd1bWVudHNbMV07aWYoIltvYmplY3QgRnVuY3Rpb25dIiE9X3RvU3RyaW5nKGZ1bikpdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4rIiBpcyBub3QgYSBmdW5jdGlvbiIpO2Zvcih2YXIgaT0wO2xlbmd0aD5pO2krKylpIGluIHNlbGYmJih2YWx1ZT1zZWxmW2ldLGZ1bi5jYWxsKHRoaXNwLHZhbHVlLGksb2JqZWN0KSYmcmVzdWx0LnB1c2godmFsdWUpKTtyZXR1cm4gcmVzdWx0fSksQXJyYXkucHJvdG90eXBlLmV2ZXJ5fHwoQXJyYXkucHJvdG90eXBlLmV2ZXJ5PWZ1bmN0aW9uKGZ1bil7dmFyIG9iamVjdD10b09iamVjdCh0aGlzKSxzZWxmPXNwbGl0U3RyaW5nJiYiW29iamVjdCBTdHJpbmddIj09X3RvU3RyaW5nKHRoaXMpP3RoaXMuc3BsaXQoIiIpOm9iamVjdCxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wLHRoaXNwPWFyZ3VtZW50c1sxXTtpZigiW29iamVjdCBGdW5jdGlvbl0iIT1fdG9TdHJpbmcoZnVuKSl0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Zm9yKHZhciBpPTA7bGVuZ3RoPmk7aSsrKWlmKGkgaW4gc2VsZiYmIWZ1bi5jYWxsKHRoaXNwLHNlbGZbaV0saSxvYmplY3QpKXJldHVybiExO3JldHVybiEwfSksQXJyYXkucHJvdG90eXBlLnNvbWV8fChBcnJheS5wcm90b3R5cGUuc29tZT1mdW5jdGlvbihmdW4pe3ZhciBvYmplY3Q9dG9PYmplY3QodGhpcyksc2VsZj1zcGxpdFN0cmluZyYmIltvYmplY3QgU3RyaW5nXSI9PV90b1N0cmluZyh0aGlzKT90aGlzLnNwbGl0KCIiKTpvYmplY3QsbGVuZ3RoPXNlbGYubGVuZ3RoPj4+MCx0aGlzcD1hcmd1bWVudHNbMV07aWYoIltvYmplY3QgRnVuY3Rpb25dIiE9X3RvU3RyaW5nKGZ1bikpdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4rIiBpcyBub3QgYSBmdW5jdGlvbiIpO2Zvcih2YXIgaT0wO2xlbmd0aD5pO2krKylpZihpIGluIHNlbGYmJmZ1bi5jYWxsKHRoaXNwLHNlbGZbaV0saSxvYmplY3QpKXJldHVybiEwO3JldHVybiExfSksQXJyYXkucHJvdG90eXBlLnJlZHVjZXx8KEFycmF5LnByb3RvdHlwZS5yZWR1Y2U9ZnVuY3Rpb24oZnVuKXt2YXIgb2JqZWN0PXRvT2JqZWN0KHRoaXMpLHNlbGY9c3BsaXRTdHJpbmcmJiJbb2JqZWN0IFN0cmluZ10iPT1fdG9TdHJpbmcodGhpcyk/dGhpcy5zcGxpdCgiIik6b2JqZWN0LGxlbmd0aD1zZWxmLmxlbmd0aD4+PjA7aWYoIltvYmplY3QgRnVuY3Rpb25dIiE9X3RvU3RyaW5nKGZ1bikpdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4rIiBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCFsZW5ndGgmJjE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3ZhciByZXN1bHQsaT0wO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpcmVzdWx0PWFyZ3VtZW50c1sxXTtlbHNlIGZvcig7Oyl7aWYoaSBpbiBzZWxmKXtyZXN1bHQ9c2VsZltpKytdO2JyZWFrfWlmKCsraT49bGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1mb3IoO2xlbmd0aD5pO2krKylpIGluIHNlbGYmJihyZXN1bHQ9ZnVuLmNhbGwodm9pZCAwLHJlc3VsdCxzZWxmW2ldLGksb2JqZWN0KSk7cmV0dXJuIHJlc3VsdH0pLEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodHx8KEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodD1mdW5jdGlvbihmdW4pe3ZhciBvYmplY3Q9dG9PYmplY3QodGhpcyksc2VsZj1zcGxpdFN0cmluZyYmIltvYmplY3QgU3RyaW5nXSI9PV90b1N0cmluZyh0aGlzKT90aGlzLnNwbGl0KCIiKTpvYmplY3QsbGVuZ3RoPXNlbGYubGVuZ3RoPj4+MDtpZigiW29iamVjdCBGdW5jdGlvbl0iIT1fdG9TdHJpbmcoZnVuKSl0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoIWxlbmd0aCYmMT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTt2YXIgcmVzdWx0LGk9bGVuZ3RoLTE7aWYoYXJndW1lbnRzLmxlbmd0aD49MilyZXN1bHQ9YXJndW1lbnRzWzFdO2Vsc2UgZm9yKDs7KXtpZihpIGluIHNlbGYpe3Jlc3VsdD1zZWxmW2ktLV07YnJlYWt9aWYoMD4tLWkpdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIil9ZG8gaSBpbiB0aGlzJiYocmVzdWx0PWZ1bi5jYWxsKHZvaWQgMCxyZXN1bHQsc2VsZltpXSxpLG9iamVjdCkpO3doaWxlKGktLSk7cmV0dXJuIHJlc3VsdH0pLEFycmF5LnByb3RvdHlwZS5pbmRleE9mJiYtMT09WzAsMV0uaW5kZXhPZigxLDIpfHwoQXJyYXkucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oc291Z2h0KXt2YXIgc2VsZj1zcGxpdFN0cmluZyYmIltvYmplY3QgU3RyaW5nXSI9PV90b1N0cmluZyh0aGlzKT90aGlzLnNwbGl0KCIiKTp0b09iamVjdCh0aGlzKSxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wO2lmKCFsZW5ndGgpcmV0dXJuLTE7dmFyIGk9MDtmb3IoYXJndW1lbnRzLmxlbmd0aD4xJiYoaT10b0ludGVnZXIoYXJndW1lbnRzWzFdKSksaT1pPj0wP2k6TWF0aC5tYXgoMCxsZW5ndGgraSk7bGVuZ3RoPmk7aSsrKWlmKGkgaW4gc2VsZiYmc2VsZltpXT09PXNvdWdodClyZXR1cm4gaTtyZXR1cm4tMX0pLEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiYmLTE9PVswLDFdLmxhc3RJbmRleE9mKDAsLTMpfHwoQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHNvdWdodCl7dmFyIHNlbGY9c3BsaXRTdHJpbmcmJiJbb2JqZWN0IFN0cmluZ10iPT1fdG9TdHJpbmcodGhpcyk/dGhpcy5zcGxpdCgiIik6dG9PYmplY3QodGhpcyksbGVuZ3RoPXNlbGYubGVuZ3RoPj4+MDtpZighbGVuZ3RoKXJldHVybi0xO3ZhciBpPWxlbmd0aC0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihpPU1hdGgubWluKGksdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpKSxpPWk+PTA/aTpsZW5ndGgtTWF0aC5hYnMoaSk7aT49MDtpLS0paWYoaSBpbiBzZWxmJiZzb3VnaHQ9PT1zZWxmW2ldKXJldHVybiBpO3JldHVybi0xfSksT2JqZWN0LmdldFByb3RvdHlwZU9mfHwoT2JqZWN0LmdldFByb3RvdHlwZU9mPWZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIG9iamVjdC5fX3Byb3RvX198fChvYmplY3QuY29uc3RydWN0b3I/b2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZTpwcm90b3R5cGVPZk9iamVjdCl9KSwhT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIEVSUl9OT05fT0JKRUNUPSJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNhbGxlZCBvbiBhIG5vbi1vYmplY3Q6ICI7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcj1mdW5jdGlvbihvYmplY3QscHJvcGVydHkpe2lmKCJvYmplY3QiIT10eXBlb2Ygb2JqZWN0JiYiZnVuY3Rpb24iIT10eXBlb2Ygb2JqZWN0fHxudWxsPT09b2JqZWN0KXRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1Qrb2JqZWN0KTtpZihvd25zKG9iamVjdCxwcm9wZXJ0eSkpe3ZhciBkZXNjcmlwdG9yLGdldHRlcixzZXR0ZXI7aWYoZGVzY3JpcHRvcj17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHN1cHBvcnRzQWNjZXNzb3JzKXt2YXIgcHJvdG90eXBlPW9iamVjdC5fX3Byb3RvX187b2JqZWN0Ll9fcHJvdG9fXz1wcm90b3R5cGVPZk9iamVjdDt2YXIgZ2V0dGVyPWxvb2t1cEdldHRlcihvYmplY3QscHJvcGVydHkpLHNldHRlcj1sb29rdXBTZXR0ZXIob2JqZWN0LHByb3BlcnR5KTtpZihvYmplY3QuX19wcm90b19fPXByb3RvdHlwZSxnZXR0ZXJ8fHNldHRlcilyZXR1cm4gZ2V0dGVyJiYoZGVzY3JpcHRvci5nZXQ9Z2V0dGVyKSxzZXR0ZXImJihkZXNjcmlwdG9yLnNldD1zZXR0ZXIpLGRlc2NyaXB0b3J9cmV0dXJuIGRlc2NyaXB0b3IudmFsdWU9b2JqZWN0W3Byb3BlcnR5XSxkZXNjcmlwdG9yfX19aWYoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz1mdW5jdGlvbihvYmplY3Qpe3JldHVybiBPYmplY3Qua2V5cyhvYmplY3QpfSksIU9iamVjdC5jcmVhdGUpe3ZhciBjcmVhdGVFbXB0eTtjcmVhdGVFbXB0eT1udWxsPT09T2JqZWN0LnByb3RvdHlwZS5fX3Byb3RvX18/ZnVuY3Rpb24oKXtyZXR1cm57X19wcm90b19fOm51bGx9fTpmdW5jdGlvbigpe3ZhciBlbXB0eT17fTtmb3IodmFyIGkgaW4gZW1wdHkpZW1wdHlbaV09bnVsbDtyZXR1cm4gZW1wdHkuY29uc3RydWN0b3I9ZW1wdHkuaGFzT3duUHJvcGVydHk9ZW1wdHkucHJvcGVydHlJc0VudW1lcmFibGU9ZW1wdHkuaXNQcm90b3R5cGVPZj1lbXB0eS50b0xvY2FsZVN0cmluZz1lbXB0eS50b1N0cmluZz1lbXB0eS52YWx1ZU9mPWVtcHR5Ll9fcHJvdG9fXz1udWxsLGVtcHR5fSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKHByb3RvdHlwZSxwcm9wZXJ0aWVzKXt2YXIgb2JqZWN0O2lmKG51bGw9PT1wcm90b3R5cGUpb2JqZWN0PWNyZWF0ZUVtcHR5KCk7ZWxzZXtpZigib2JqZWN0IiE9dHlwZW9mIHByb3RvdHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0eXBlb2YgcHJvdG90eXBlWyIrdHlwZW9mIHByb3RvdHlwZSsiXSAhPSBcJ29iamVjdFwnIik7dmFyIFR5cGU9ZnVuY3Rpb24oKXt9O1R5cGUucHJvdG90eXBlPXByb3RvdHlwZSxvYmplY3Q9bmV3IFR5cGUsb2JqZWN0Ll9fcHJvdG9fXz1wcm90b3R5cGV9cmV0dXJuIHZvaWQgMCE9PXByb3BlcnRpZXMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCxwcm9wZXJ0aWVzKSxvYmplY3R9fWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl7dmFyIGRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdD1kb2VzRGVmaW5lUHJvcGVydHlXb3JrKHt9KSxkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb209InVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudHx8ZG9lc0RlZmluZVByb3BlcnR5V29yayhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7aWYoIWRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdHx8IWRlZmluZVByb3BlcnR5V29ya3NPbkRvbSl2YXIgZGVmaW5lUHJvcGVydHlGYWxsYmFjaz1PYmplY3QuZGVmaW5lUHJvcGVydHl9aWYoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZGVmaW5lUHJvcGVydHlGYWxsYmFjayl7dmFyIEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1I9IlByb3BlcnR5IGRlc2NyaXB0aW9uIG11c3QgYmUgYW4gb2JqZWN0OiAiLEVSUl9OT05fT0JKRUNUX1RBUkdFVD0iT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBvbiBub24tb2JqZWN0OiAiLEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRD0iZ2V0dGVycyAmIHNldHRlcnMgY2FuIG5vdCBiZSBkZWZpbmVkIG9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiO09iamVjdC5kZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbihvYmplY3QscHJvcGVydHksZGVzY3JpcHRvcil7aWYoIm9iamVjdCIhPXR5cGVvZiBvYmplY3QmJiJmdW5jdGlvbiIhPXR5cGVvZiBvYmplY3R8fG51bGw9PT1vYmplY3QpdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9UQVJHRVQrb2JqZWN0KTtpZigib2JqZWN0IiE9dHlwZW9mIGRlc2NyaXB0b3ImJiJmdW5jdGlvbiIhPXR5cGVvZiBkZXNjcmlwdG9yfHxudWxsPT09ZGVzY3JpcHRvcil0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IrZGVzY3JpcHRvcik7aWYoZGVmaW5lUHJvcGVydHlGYWxsYmFjayl0cnl7cmV0dXJuIGRlZmluZVByb3BlcnR5RmFsbGJhY2suY2FsbChPYmplY3Qsb2JqZWN0LHByb3BlcnR5LGRlc2NyaXB0b3IpfWNhdGNoKGV4Y2VwdGlvbil7fWlmKG93bnMoZGVzY3JpcHRvciwidmFsdWUiKSlpZihzdXBwb3J0c0FjY2Vzc29ycyYmKGxvb2t1cEdldHRlcihvYmplY3QscHJvcGVydHkpfHxsb29rdXBTZXR0ZXIob2JqZWN0LHByb3BlcnR5KSkpe3ZhciBwcm90b3R5cGU9b2JqZWN0Ll9fcHJvdG9fXztvYmplY3QuX19wcm90b19fPXByb3RvdHlwZU9mT2JqZWN0LGRlbGV0ZSBvYmplY3RbcHJvcGVydHldLG9iamVjdFtwcm9wZXJ0eV09ZGVzY3JpcHRvci52YWx1ZSxvYmplY3QuX19wcm90b19fPXByb3RvdHlwZX1lbHNlIG9iamVjdFtwcm9wZXJ0eV09ZGVzY3JpcHRvci52YWx1ZTtlbHNle2lmKCFzdXBwb3J0c0FjY2Vzc29ycyl0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCk7b3ducyhkZXNjcmlwdG9yLCJnZXQiKSYmZGVmaW5lR2V0dGVyKG9iamVjdCxwcm9wZXJ0eSxkZXNjcmlwdG9yLmdldCksb3ducyhkZXNjcmlwdG9yLCJzZXQiKSYmZGVmaW5lU2V0dGVyKG9iamVjdCxwcm9wZXJ0eSxkZXNjcmlwdG9yLnNldCl9cmV0dXJuIG9iamVjdH19T2JqZWN0LmRlZmluZVByb3BlcnRpZXN8fChPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihvYmplY3QscHJvcGVydGllcyl7Zm9yKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKW93bnMocHJvcGVydGllcyxwcm9wZXJ0eSkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QscHJvcGVydHkscHJvcGVydGllc1twcm9wZXJ0eV0pO3JldHVybiBvYmplY3R9KSxPYmplY3Quc2VhbHx8KE9iamVjdC5zZWFsPWZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIG9iamVjdH0pLE9iamVjdC5mcmVlemV8fChPYmplY3QuZnJlZXplPWZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIG9iamVjdH0pO3RyeXtPYmplY3QuZnJlZXplKGZ1bmN0aW9uKCl7fSl9Y2F0Y2goZXhjZXB0aW9uKXtPYmplY3QuZnJlZXplPWZ1bmN0aW9uKGZyZWV6ZU9iamVjdCl7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG9iamVjdD9vYmplY3Q6ZnJlZXplT2JqZWN0KG9iamVjdCl9fShPYmplY3QuZnJlZXplKX1pZihPYmplY3QucHJldmVudEV4dGVuc2lvbnN8fChPYmplY3QucHJldmVudEV4dGVuc2lvbnM9ZnVuY3Rpb24ob2JqZWN0KXtyZXR1cm4gb2JqZWN0fSksT2JqZWN0LmlzU2VhbGVkfHwoT2JqZWN0LmlzU2VhbGVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSxPYmplY3QuaXNGcm96ZW58fChPYmplY3QuaXNGcm96ZW49ZnVuY3Rpb24oKXtyZXR1cm4hMX0pLE9iamVjdC5pc0V4dGVuc2libGV8fChPYmplY3QuaXNFeHRlbnNpYmxlPWZ1bmN0aW9uKG9iamVjdCl7aWYoT2JqZWN0KG9iamVjdCk9PT1vYmplY3QpdGhyb3cgbmV3IFR5cGVFcnJvcjtmb3IodmFyIG5hbWU9IiI7b3ducyhvYmplY3QsbmFtZSk7KW5hbWUrPSI/IjtvYmplY3RbbmFtZV09ITA7dmFyIHJldHVyblZhbHVlPW93bnMob2JqZWN0LG5hbWUpO3JldHVybiBkZWxldGUgb2JqZWN0W25hbWVdLHJldHVyblZhbHVlfSksIU9iamVjdC5rZXlzKXt2YXIgaGFzRG9udEVudW1CdWc9ITAsZG9udEVudW1zPVsidG9TdHJpbmciLCJ0b0xvY2FsZVN0cmluZyIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNvbnN0cnVjdG9yIl0sZG9udEVudW1zTGVuZ3RoPWRvbnRFbnVtcy5sZW5ndGg7Zm9yKHZhciBrZXkgaW57dG9TdHJpbmc6bnVsbH0paGFzRG9udEVudW1CdWc9ITE7T2JqZWN0LmtleXM9ZnVuY3Rpb24ob2JqZWN0KXtpZigib2JqZWN0IiE9dHlwZW9mIG9iamVjdCYmImZ1bmN0aW9uIiE9dHlwZW9mIG9iamVjdHx8bnVsbD09PW9iamVjdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7dmFyIGtleXM9W107Zm9yKHZhciBuYW1lIGluIG9iamVjdClvd25zKG9iamVjdCxuYW1lKSYma2V5cy5wdXNoKG5hbWUpO2lmKGhhc0RvbnRFbnVtQnVnKWZvcih2YXIgaT0wLGlpPWRvbnRFbnVtc0xlbmd0aDtpaT5pO2krKyl7dmFyIGRvbnRFbnVtPWRvbnRFbnVtc1tpXTtvd25zKG9iamVjdCxkb250RW51bSkmJmtleXMucHVzaChkb250RW51bSl9cmV0dXJuIGtleXN9fURhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0pO3ZhciB3cz0iXHRcXG5cdlxcZlxcciDCoOGagOGgjuKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFxcdTIwMjhcXHUyMDI5XHVmZWZmIjtpZighU3RyaW5nLnByb3RvdHlwZS50cmltfHx3cy50cmltKCkpe3dzPSJbIit3cysiXSI7dmFyIHRyaW1CZWdpblJlZ2V4cD1SZWdFeHAoIl4iK3dzK3dzKyIqIiksdHJpbUVuZFJlZ2V4cD1SZWdFeHAod3Mrd3MrIiokIik7U3RyaW5nLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMrIiIpLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCIiKS5yZXBsYWNlKHRyaW1FbmRSZWdleHAsIiIpfX12YXIgdG9PYmplY3Q9ZnVuY3Rpb24obyl7aWYobnVsbD09byl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW5cJ3QgY29udmVydCAiK28rIiB0byBvYmplY3QiKTtyZXR1cm4gT2JqZWN0KG8pfX0pOyd9fV0pOw==")))
if err != nil {
panic(err)
}
err = f.Close()
if err != nil {
panic(err)
}
}