-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathb0xfile__chunk-9aa77aca.49424edb.js.go
22 lines (18 loc) · 86.1 KB
/
b0xfile__chunk-9aa77aca.49424edb.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-9aa77aca.49424edb.js", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
if err != nil {
panic(err)
}
_, err = f.Write([] byte(base64Decoding("KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1siY2h1bmstOWFhNzdhY2EiXSx7MTE0ODpmdW5jdGlvbihlLHQsYSl7InVzZSBzdHJpY3QiO3ZhciByPWEoIjU5MjYiKSxuPWEoIjU3N2UiKSxpPWEoIjFkODAiKSxvPVJhbmdlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW4oaSh0aGlzKSksYT0iIixzPXIoZSk7aWYoczwwfHxzPT0xLzApdGhyb3cgbygiV3JvbmcgbnVtYmVyIG9mIHJlcGV0aXRpb25zIik7Zm9yKDtzPjA7KHM+Pj49MSkmJih0Kz10KSkxJnMmJihhKz10KTtyZXR1cm4gYX19LDc0NDQ6ZnVuY3Rpb24oZSx0LGEpeyJ1c2Ugc3RyaWN0IjthLnIodCksYSgiYTRkMyIpLGEoImUwMWEiKTt2YXIgcj1hKCI1NTMwIiksbj0oYSgiZDNiNyIpLGEoIjNjYTMiKSxhKCJkZGIwIiksYSgiMjVmMCIpLGEoIjE1OWIiKSxhKCJiMGMwIiksYSgiNGRlNCIpLGEoIjE0ZDkiKSxhKCI0ZDYzIiksYSgiYzYwNyIpLGEoImFjMWYiKSxhKCIyYzNlIiksYSgiMDBiNCIpLGEoImNhYWQiKSxhKCIyNTMyIiksYSgiYTE1YiIpLGEoIjUzMTkiKSxhKCJiNjRiIiksYSgiOTlhZiIpLGEoImI2ODAiKSxhKCJlOWM0IiksYSgiNDk4YSIpLGEoIjhhNzkiKSxhKCIyYjNkIiksYSgiOTg2MSIpLGEoIjgyMzciKSxhKCI0MzI4IiksYSgiYjFjNyIpKSxpPXtyZXNvbHZlQmxvYlJlc3BvbnNlOmZ1bmN0aW9uKGUsdCl7aWYobi5hLmNoZWNrVW5kZWZpbmVkKGUpKXt2YXIgYT1lLnJlcXVlc3Qscj1lLmhlYWRlcnM7aWYobi5hLmNoZWNrVW5kZWZpbmVkKGEpKXt2YXIgaT1uLmEucHJvcFZhbHVlKCJjb250ZW50LWRpc3Bvc2l0aW9uIixyLCIiKTtpZigiYmxvYiI9PWEucmVzcG9uc2VUeXBlfHxuLmEuc3RyTm90QmxhbmsoaSkpe3ZhciBvPWUuZGF0YS50eXBlO2lmKCJhcHBsaWNhdGlvbi9qc29uIj09b3x8ImFwcGxpY2F0aW9uL3htbCI9PW98fCJ0ZXh0L2h0bWwiPT1vfHwidGV4dC9wbGFpbiI9PW8pe3ZhciBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPWZ1bmN0aW9uKHIpe3ZhciBuPXtyZXNwb25zZVRleHQ6ci50YXJnZXQucmVzdWx0LHJlc3BvbnNlOnIudGFyZ2V0LnJlc3VsdCxyZXNwb25zZVRleHRUeXBlOm8sc3RhdHVzOmEuc3RhdHVzLGhlYWRlcnM6ZS5oZWFkZXJzLHN0YXR1c1RleHQ6YS5zdGF0dXNUZXh0LHJlYWR5U3RhdGU6YS5yZWFkeVN0YXRlLHRpbWVvdXQ6YS50aW1lb3V0LHdpdGhDcmVkZW50aWFsczphLndpdGhDcmVkZW50aWFsc307dChuKX0scy5yZWFkQXNUZXh0KGUuZGF0YSl9fWVsc2V7dmFyIGw9e3Jlc3BvbnNlVGV4dDplLmRhdGEscmVzcG9uc2U6ZS5kYXRhLHJlc3BvbnNlVGV4dFR5cGU6IiIsc3RhdHVzOmEuc3RhdHVzLGhlYWRlcnM6ZS5oZWFkZXJzLHN0YXR1c1RleHQ6YS5zdGF0dXNUZXh0LHJlYWR5U3RhdGU6YS5yZWFkeVN0YXRlLHRpbWVvdXQ6YS50aW1lb3V0LHdpdGhDcmVkZW50aWFsczphLndpdGhDcmVkZW50aWFsc307dChsKX19ZWxzZXt2YXIgdT17cmVzcG9uc2VUZXh0OmUuZGF0YSxyZXNwb25zZTplLmRhdGEscmVzcG9uc2VUZXh0VHlwZToiIixzdGF0dXM6YS5zdGF0dXMsaGVhZGVyczplLmhlYWRlcnMsc3RhdHVzVGV4dDphLnN0YXR1c1RleHQscmVhZHlTdGF0ZTphLnJlYWR5U3RhdGUsdGltZW91dDphLnRpbWVvdXQsd2l0aENyZWRlbnRpYWxzOmEud2l0aENyZWRlbnRpYWxzfTt0KHUpfX19fSxvPWEoIjE0NjkiKSxzPWEoIjU2MDkiKSxsPWZ1bmN0aW9uKGUsdCxhLHIsbil7dGhpcy5ncm91cElkPW4sdGhpcy5jYWNoZUtleT1lLHRoaXMuYWxsR3JvdXBzPWEsdGhpcy5jb21tYW5kcz1yLHRoaXMudGFyZ2V0VmFsdWU9dHx8e30sdGhpcy5pbml0KCl9O2wucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztuLmEuYXJyTm90RW1wdHkodGhpcy5jb21tYW5kcykmJnRoaXMuY29tbWFuZHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5hZGRWYWx1ZSh0Lm5hbWUsdC52YWx1ZSx0LnR5cGUsdC5hbGwpfSkpfSxhZGRWYWx1ZTpmdW5jdGlvbihlLHQsYSxyKXt2YXIgbj10aGlzO3I/dGhpcy5hbGxHcm91cHMuZm9yRWFjaCgoZnVuY3Rpb24ocil7bi5hZGRDdXJyZW50R3JvdXAoZSx0LGEscil9KSk6dGhpcy5hZGRDdXJyZW50R3JvdXAoZSx0LGEsdGhpcy5ncm91cElkKX0sYWRkQ3VycmVudEdyb3VwOmZ1bmN0aW9uKGUsdCxhLHIpe3ZhciBpPWUrYSxvPXRoaXMudGFyZ2V0VmFsdWVbcl07bi5hLmFyck5vdEVtcHR5KG8pP28uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wa2lkPT1pJiZlLmluPT1hfSkpLmxlbmd0aD4wP28uZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5wa2lkPT1pJiZlLmluPT1hJiYoZS52YWx1ZT10KX0pKTpvLnB1c2goe25hbWU6ZSx2YWx1ZTp0LGluOmEscGtpZDppfSk6KG89W10pLnB1c2goe25hbWU6ZSx2YWx1ZTp0LGluOmEscGtpZDppfSk7dGhpcy50YXJnZXRWYWx1ZVtyXT1vfSxzYXZlOmZ1bmN0aW9uKCl7by5hLnNldEl0ZW0odGhpcy5jYWNoZUtleSx0aGlzLnRhcmdldFZhbHVlKX19O3ZhciB1PWwsZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuZ3JvdXBpZD1lLmdyb3VwaWR8fCJhZnRlclNjcmlwdEdyb3VwIix0aGlzLmNvbW1hbmRzPVtdLHRoaXMuYWxsZ3JvdXBpZHM9ZS5hbGxncm91cGlkc3x8W10sdGhpcy5yZXNwb25zZT1lLnJlc3BvbnNlfHx7ZGF0YTp7fSxoZWFkZXJzOnt9fSx0aGlzLmdsb2JhbD17c2V0SGVhZGVyOmZ1bmN0aW9uKGUsYSl7dC5nbG9iYWwuc2V0Q29tbW9uKGUsYSwiaGVhZGVyIiwhMSl9LHNldEFsbEhlYWRlcjpmdW5jdGlvbihlLGEpe3QuZ2xvYmFsLnNldENvbW1vbihlLGEsImhlYWRlciIsITApfSxzZXRQYXJhbWV0ZXI6ZnVuY3Rpb24oZSxhKXt0Lmdsb2JhbC5zZXRDb21tb24oZSxhLCJxdWVyeSIsITEpfSxzZXRBbGxQYXJhbWV0ZXI6ZnVuY3Rpb24oZSxhKXt0Lmdsb2JhbC5zZXRDb21tb24oZSxhLCJxdWVyeSIsITApfSxzZXRDb21tb246ZnVuY3Rpb24oZSxhLHIsbil7dC5nbG9iYWwuY2FjaGVDb21tYW5kKGUsYSxyLG4pfSxjYWNoZUNvbW1hbmQ6ZnVuY3Rpb24oZSxhLHIsbil7dC5jb21tYW5kcy5wdXNoKHtuYW1lOmUsdmFsdWU6YSx0eXBlOnIsYWxsOm59KX0sYWN0aW9uOmZ1bmN0aW9uKCl7aWYobnVsbCE9dC5jb21tYW5kcyYmdC5jb21tYW5kcy5sZW5ndGg+MCl7dmFyIGU9dC5jb21tYW5kcyxhPXQuZ3JvdXBpZCxyPXQuYWxsZ3JvdXBpZHM7by5hLmdldEl0ZW0ocy5hLmdsb2JhbFBhcmFtZXRlcikudGhlbigoZnVuY3Rpb24odCl7bmV3IHUocy5hLmdsb2JhbFBhcmFtZXRlcix0LHIsZSxhKS5zYXZlKCl9KSl9fSxleGVjdXRlQXN5bmNDb21tb246ZnVuY3Rpb24oZSxhLHIsaSl7dmFyIGw9dC5ncm91cGlkLHU9ZStyO2lmKGkpe3ZhciBkPXQuYWxsZ3JvdXBpZHM7by5hLmdldEl0ZW0ocy5hLmdsb2JhbFBhcmFtZXRlcikudGhlbigoZnVuY3Rpb24odCl7aWYobi5hLmNoZWNrVW5kZWZpbmVkKHQpKXt2YXIgaT17fTtkLmZvckVhY2goKGZ1bmN0aW9uKG8pe3ZhciBzPXRbb107bi5hLmNoZWNrVW5kZWZpbmVkKHMpfHxuLmEuYXJyRW1wdHkocyk/KChzPVtdKS5wdXNoKHtuYW1lOmUsdmFsdWU6YSxpbjpyLHBraWQ6dX0pLGlbb109cyk6KDA9PXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wa2lkPT11JiZlLmluPT1yfSkpLmxlbmd0aD9zLnB1c2goe25hbWU6ZSx2YWx1ZTphLGluOnIscGtpZDp1fSk6cy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmluPT1yJiZlLnBraWQ9PXUmJihlLnZhbHVlPWEpfSkpLGlbb109cyl9KSksby5hLnNldEl0ZW0ocy5hLmdsb2JhbFBhcmFtZXRlcixpKX1lbHNle3ZhciBsPVtdO2wucHVzaCh7bmFtZTplLHZhbHVlOmEsaW46cixwa2lkOnV9KTt2YXIgYz17fTtkLmZvckVhY2goKGZ1bmN0aW9uKGUpe2NbZV09bH0pKSxvLmEuc2V0SXRlbShzLmEuZ2xvYmFsUGFyYW1ldGVyLGMpfX0pKX1lbHNlIG8uYS5nZXRJdGVtKHMuYS5nbG9iYWxQYXJhbWV0ZXIpLnRoZW4oKGZ1bmN0aW9uKHQpe3ZhciBpPVtdLGQ9e307aWYobi5hLmNoZWNrVW5kZWZpbmVkKHQpKXtmb3IodmFyIGMgaW4gdCljPT1sP2k9dFtjXTpkW2NdPXRbY107MD09aS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBraWQ9PXUmJmUuaW49PXJ9KSkubGVuZ3RoP2kucHVzaCh7bmFtZTplLHZhbHVlOmEsaW46cixwa2lkOnV9KTppLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaW49PXImJmUucGtpZD09dSYmKGUudmFsdWU9YSl9KSksZFtsXT1pLG8uYS5zZXRJdGVtKHMuYS5nbG9iYWxQYXJhbWV0ZXIsZCl9ZWxzZSBpLnB1c2goe25hbWU6ZSx2YWx1ZTphLGluOnIscGtpZDp1fSk7ZFtsXT1pLG8uYS5zZXRJdGVtKHMuYS5nbG9iYWxQYXJhbWV0ZXIsZCl9KSl9fX0sYz1hKCJiYzNhIiksaD1hLm4oYyksbT1hKCIwNjQ0IikscD1hLm4obSksZj1hKCI1M2NhIik7Ci8qKgogKiB2a0JlYXV0aWZ5IC0gamF2YXNjcmlwdCBwbHVnaW4gdG8gcHJldHR5LXByaW50IG9yIG1pbmlmeSB0ZXh0IGluIFhNTCwgSlNPTiwgQ1NTIGFuZCBTUUwgZm9ybWF0cy4KICogaHR0cHM6Ly9naXRodWIuY29tL2FhYmx1ZWRyYWdvbi92a2JlYXV0aWZ5CiAqIENvcHlyaWdodCAoYykgMjAxMiBWYWRpbSBLaXJ5dWtoaW4KICogdmtpcnl1a2hpbiBAIGdtYWlsLmNvbQogKiBodHRwOi8vd3d3LmVzbGluc3RydWN0b3IubmV0L3ZrYmVhdXRpZnkvCiAqCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzOgogKiAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCiAqICAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sCiAqCiAqICAgUHJldHR5IHByaW50CiAqCiAqICAgICAgICB2a2JlYXV0aWZ5LnhtbCh0ZXh0IFssaW5kZW50X3BhdHRlcm5dKTsKICogICAgICAgIHZrYmVhdXRpZnkuanNvbih0ZXh0IFssaW5kZW50X3BhdHRlcm5dKTsKICogICAgICAgIHZrYmVhdXRpZnkuY3NzKHRleHQgWyxpbmRlbnRfcGF0dGVybl0pOwogKiAgICAgICAgdmtiZWF1dGlmeS5zcWwodGV4dCBbLGluZGVudF9wYXR0ZXJuXSk7CiAqCiAqICAgICAgICBAdGV4dCAtIFN0cmluZzsgdGV4dCB0byBiZWF0dWZ5OwogKiAgICAgICAgQGluZGVudF9wYXR0ZXJuIC0gSW50ZWdlciB8IFN0cmluZzsKICogICAgICAgICAgICAgICAgSW50ZWdlcjogIG51bWJlciBvZiB3aGl0ZSBzcGFjZXM7CiAqICAgICAgICAgICAgICAgIFN0cmluZzogICBjaGFyYWN0ZXIgc3RyaW5nIHRvIHZpc3VhbGl6ZSBpbmRlbnRhdGlvbiAoIGNhbiBhbHNvIGJlIGEgc2V0IG9mIHdoaXRlIHNwYWNlcyApCiAqICAgTWluaWZ5CiAqCiAqICAgICAgICB2a2JlYXV0aWZ5LnhtbG1pbih0ZXh0IFsscHJlc2VydmVfY29tbWVudHNdKTsKICogICAgICAgIHZrYmVhdXRpZnkuanNvbm1pbih0ZXh0KTsKICogICAgICAgIHZrYmVhdXRpZnkuY3NzbWluKHRleHQgWyxwcmVzZXJ2ZV9jb21tZW50c10pOwogKiAgICAgICAgdmtiZWF1dGlmeS5zcWxtaW4odGV4dCk7CiAqCiAqICAgICAgICBAdGV4dCAtIFN0cmluZzsgdGV4dCB0byBtaW5pZnk7CiAqICAgICAgICBAcHJlc2VydmVfY29tbWVudHMgLSBCb29sOyBbb3B0aW9uYWxdOwogKiAgICAgICAgICAgICAgICBTZXQgdGhpcyBmbGFnIHRvIHRydWUgdG8gcHJldmVudCByZW1vdmluZyBjb21tZW50cyBmcm9tIEB0ZXh0ICggbWlueG1sIGFuZCBtaW5jc3MgZnVuY3Rpb25zIG9ubHkuICkKICoKICogICBFeGFtcGxlczoKICogICAgICAgIHZrYmVhdXRpZnkueG1sKHRleHQpOyAvLyBwcmV0dHkgcHJpbnQgWE1MCiAqICAgICAgICB2a2JlYXV0aWZ5Lmpzb24odGV4dCwgNCApOyAvLyBwcmV0dHkgcHJpbnQgSlNPTgogKiAgICAgICAgdmtiZWF1dGlmeS5jc3ModGV4dCwgJy4gLiAuIC4nKTsgLy8gcHJldHR5IHByaW50IENTUwogKiAgICAgICAgdmtiZWF1dGlmeS5zcWwodGV4dCwgJy0tLS0nKTsgLy8gcHJldHR5IHByaW50IFNRTAogKgogKiAgICAgICAgdmtiZWF1dGlmeS54bWxtaW4odGV4dCwgdHJ1ZSk7Ly8gbWluaWZ5IFhNTCwgcHJlc2VydmUgY29tbWVudHMKICogICAgICAgIHZrYmVhdXRpZnkuanNvbm1pbih0ZXh0KTsvLyBtaW5pZnkgSlNPTgogKiAgICAgICAgdmtiZWF1dGlmeS5jc3NtaW4odGV4dCk7Ly8gbWluaWZ5IENTUywgcmVtb3ZlIGNvbW1lbnRzICggZGVmYXVsdCApCiAqICAgICAgICB2a2JlYXV0aWZ5LnNxbG1pbih0ZXh0KTsvLyBtaW5pZnkgU1FMCiAqCiAqLwpmdW5jdGlvbiBnKGUpe3ZhciB0PSIgICAgIjtpZihpc05hTihwYXJzZUludChlKSkpdD1lO2Vsc2Ugc3dpdGNoKGUpe2Nhc2UgMTp0PSIgIjticmVhaztjYXNlIDI6dD0iICAiO2JyZWFrO2Nhc2UgMzp0PSIgICAiO2JyZWFrO2Nhc2UgNDp0PSIgICAgIjticmVhaztjYXNlIDU6dD0iICAgICAiO2JyZWFrO2Nhc2UgNjp0PSIgICAgICAiO2JyZWFrO2Nhc2UgNzp0PSIgICAgICAgIjticmVhaztjYXNlIDg6dD0iICAgICAgICAiO2JyZWFrO2Nhc2UgOTp0PSIgICAgICAgICAiO2JyZWFrO2Nhc2UgMTA6dD0iICAgICAgICAgICI7YnJlYWs7Y2FzZSAxMTp0PSIgICAgICAgICAgICI7YnJlYWs7Y2FzZSAxMjp0PSIgICAgICAgICAgICAifWZvcih2YXIgYT1bIlxuIl0scj0wO3I8MTAwO3IrKylhLnB1c2goYVtyXSt0KTtyZXR1cm4gYX1mdW5jdGlvbiB3KCl7dGhpcy5zdGVwPSIgICAgIix0aGlzLnNoaWZ0PWcodGhpcy5zdGVwKX1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuIHQtKGUucmVwbGFjZSgvXCgvZywiIikubGVuZ3RoLWUucmVwbGFjZSgvXCkvZywiIikubGVuZ3RoKX1mdW5jdGlvbiB2KGUsdCl7cmV0dXJuIGUucmVwbGFjZSgvXHN7MSx9L2csIiAiKS5yZXBsYWNlKC8gQU5EIC9naSwifjo6fiIrdCt0KyJBTkQgIikucmVwbGFjZSgvIEJFVFdFRU4gL2dpLCJ+Ojp+Iit0KyJCRVRXRUVOICIpLnJlcGxhY2UoLyBDQVNFIC9naSwifjo6fiIrdCsiQ0FTRSAiKS5yZXBsYWNlKC8gRUxTRSAvZ2ksIn46On4iK3QrIkVMU0UgIikucmVwbGFjZSgvIEVORCAvZ2ksIn46On4iK3QrIkVORCAiKS5yZXBsYWNlKC8gRlJPTSAvZ2ksIn46On5GUk9NICIpLnJlcGxhY2UoLyBHUk9VUFxzezEsfUJZL2dpLCJ+Ojp+R1JPVVAgQlkgIikucmVwbGFjZSgvIEhBVklORyAvZ2ksIn46On5IQVZJTkcgIikucmVwbGFjZSgvIElOIC9naSwiIElOICIpLnJlcGxhY2UoLyBKT0lOIC9naSwifjo6fkpPSU4gIikucmVwbGFjZSgvIENST1NTfjo6fnsxLH1KT0lOIC9naSwifjo6fkNST1NTIEpPSU4gIikucmVwbGFjZSgvIElOTkVSfjo6fnsxLH1KT0lOIC9naSwifjo6fklOTkVSIEpPSU4gIikucmVwbGFjZSgvIExFRlR+Ojp+ezEsfUpPSU4gL2dpLCJ+Ojp+TEVGVCBKT0lOICIpLnJlcGxhY2UoLyBSSUdIVH46On57MSx9Sk9JTiAvZ2ksIn46On5SSUdIVCBKT0lOICIpLnJlcGxhY2UoLyBPTiAvZ2ksIn46On4iK3QrIk9OICIpLnJlcGxhY2UoLyBPUiAvZ2ksIn46On4iK3QrdCsiT1IgIikucmVwbGFjZSgvIE9SREVSXHN7MSx9QlkvZ2ksIn46On5PUkRFUiBCWSAiKS5yZXBsYWNlKC8gT1ZFUiAvZ2ksIn46On4iK3QrIk9WRVIgIikucmVwbGFjZSgvXChcc3swLH1TRUxFQ1QgL2dpLCJ+Ojp+KFNFTEVDVCAiKS5yZXBsYWNlKC9cKVxzezAsfVNFTEVDVCAvZ2ksIil+Ojp+U0VMRUNUICIpLnJlcGxhY2UoLyBUSEVOIC9naSwiIFRIRU5+Ojp+Iit0KS5yZXBsYWNlKC8gVU5JT04gL2dpLCJ+Ojp+VU5JT05+Ojp+IikucmVwbGFjZSgvIFVTSU5HIC9naSwifjo6flVTSU5HICIpLnJlcGxhY2UoLyBXSEVOIC9naSwifjo6fiIrdCsiV0hFTiAiKS5yZXBsYWNlKC8gV0hFUkUgL2dpLCJ+Ojp+V0hFUkUgIikucmVwbGFjZSgvIFdJVEggL2dpLCJ+Ojp+V0lUSCAiKS5yZXBsYWNlKC8gQUxMIC9naSwiIEFMTCAiKS5yZXBsYWNlKC8gQVMgL2dpLCIgQVMgIikucmVwbGFjZSgvIEFTQyAvZ2ksIiBBU0MgIikucmVwbGFjZSgvIERFU0MgL2dpLCIgREVTQyAiKS5yZXBsYWNlKC8gRElTVElOQ1QgL2dpLCIgRElTVElOQ1QgIikucmVwbGFjZSgvIEVYSVNUUyAvZ2ksIiBFWElTVFMgIikucmVwbGFjZSgvIE5PVCAvZ2ksIiBOT1QgIikucmVwbGFjZSgvIE5VTEwgL2dpLCIgTlVMTCAiKS5yZXBsYWNlKC8gTElLRSAvZ2ksIiBMSUtFICIpLnJlcGxhY2UoL1xzezAsfVNFTEVDVCAvZ2ksIlNFTEVDVCAiKS5yZXBsYWNlKC9cc3swLH1VUERBVEUgL2dpLCJVUERBVEUgIikucmVwbGFjZSgvIFNFVCAvZ2ksIiBTRVQgIikucmVwbGFjZSgvfjo6fnsxLH0vZywifjo6fiIpLnNwbGl0KCJ+Ojp+Iil9YSgiODQxYyIpLGEoImZiNmEiKSx3LnByb3RvdHlwZS54bWw9ZnVuY3Rpb24oZSx0KXt2YXIgYT1lLnJlcGxhY2UoLz5cc3swLH08L2csIj48IikucmVwbGFjZSgvPC9nLCJ+Ojp+PCIpLnJlcGxhY2UoL1xzKnhtbG5zXDovZywifjo6fnhtbG5zOiIpLnJlcGxhY2UoL1xzKnhtbG5zXD0vZywifjo6fnhtbG5zPSIpLnNwbGl0KCJ+Ojp+Iikscj1hLmxlbmd0aCxuPSExLGk9MCxvPSIiLHM9MCxsPXQ/Zyh0KTp0aGlzLnNoaWZ0O2ZvcihzPTA7czxyO3MrKylhW3NdLnNlYXJjaCgvPCEvKT4tMT8obys9bFtpXSthW3NdLG49ITAsKGFbc10uc2VhcmNoKC8tLT4vKT4tMXx8YVtzXS5zZWFyY2goL1xdPi8pPi0xfHxhW3NdLnNlYXJjaCgvIURPQ1RZUEUvKT4tMSkmJihuPSExKSk6YVtzXS5zZWFyY2goLy0tPi8pPi0xfHxhW3NdLnNlYXJjaCgvXF0+Lyk+LTE/KG8rPWFbc10sbj0hMSk6L148XHcvLmV4ZWMoYVtzLTFdKSYmL148XC9cdy8uZXhlYyhhW3NdKSYmL148W1x3OlwtXC5cLF0rLy5leGVjKGFbcy0xXSk9PS9ePFwvW1x3OlwtXC5cLF0rLy5leGVjKGFbc10pWzBdLnJlcGxhY2UoIi8iLCIiKT8obys9YVtzXSxufHxpLS0pOmFbc10uc2VhcmNoKC88XHcvKT4tMSYmLTE9PWFbc10uc2VhcmNoKC88XC8vKSYmLTE9PWFbc10uc2VhcmNoKC9cLz4vKT9vPW8rPW4/YVtzXTpsW2krK10rYVtzXTphW3NdLnNlYXJjaCgvPFx3Lyk+LTEmJmFbc10uc2VhcmNoKC88XC8vKT4tMT9vPW8rPW4/YVtzXTpsW2ldK2Fbc106YVtzXS5zZWFyY2goLzxcLy8pPi0xP289bys9bj9hW3NdOmxbLS1pXSthW3NdOmFbc10uc2VhcmNoKC9cLz4vKT4tMT9vPW8rPW4/YVtzXTpsW2ldK2Fbc106YVtzXS5zZWFyY2goLzxcPy8pPi0xfHxhW3NdLnNlYXJjaCgveG1sbnNcOi8pPi0xfHxhW3NdLnNlYXJjaCgveG1sbnNcPS8pPi0xP28rPWxbaV0rYVtzXTpvKz1hW3NdO3JldHVybiJcbiI9PW9bMF0/by5zbGljZSgxKTpvfSx3LnByb3RvdHlwZS5qc29uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHx8dGhpcy5zdGVwLCJ1bmRlZmluZWQiPT10eXBlb2YgSlNPTj9lOiJzdHJpbmciPT10eXBlb2YgZT9KU09OLnN0cmluZ2lmeShKU09OLnBhcnNlKGUpLG51bGwsdCk6Im9iamVjdCI9PT1PYmplY3QoZi5hKShlKT9KU09OLnN0cmluZ2lmeShlLG51bGwsdCk6ZX0sdy5wcm90b3R5cGUuY3NzPWZ1bmN0aW9uKGUsdCl7dmFyIGE9ZS5yZXBsYWNlKC9cc3sxLH0vZywiICIpLnJlcGxhY2UoL1x7L2csInt+Ojp+IikucmVwbGFjZSgvXH0vZywifjo6fn1+Ojp+IikucmVwbGFjZSgvXDsvZywiO346On4iKS5yZXBsYWNlKC9cL1wqL2csIn46On4vKiIpLnJlcGxhY2UoL1wqXC8vZywiKi9+Ojp+IikucmVwbGFjZSgvfjo6flxzezAsfX46On4vZywifjo6fiIpLnNwbGl0KCJ+Ojp+Iikscj1hLmxlbmd0aCxuPTAsaT0iIixvPTAscz10P2codCk6dGhpcy5zaGlmdDtmb3Iobz0wO288cjtvKyspL1x7Ly5leGVjKGFbb10pP2krPXNbbisrXSthW29dOi9cfS8uZXhlYyhhW29dKT9pKz1zWy0tbl0rYVtvXTooL1wqXFwvLmV4ZWMoYVtvXSksaSs9c1tuXSthW29dKTtyZXR1cm4gaS5yZXBsYWNlKC9eXG57MSx9LywiIil9LHcucHJvdG90eXBlLnNxbD1mdW5jdGlvbihlLHQpe3ZhciBhPWUucmVwbGFjZSgvXHN7MSx9L2csIiAiKS5yZXBsYWNlKC9cJy9naSwifjo6ficiKS5zcGxpdCgifjo6fiIpLHI9YS5sZW5ndGgsbj1bXSxpPTAsbz10aGlzLnN0ZXAscz0wLGw9IiIsdT0wLGQ9dD9nKHQpOnRoaXMuc2hpZnQ7Zm9yKHU9MDt1PHI7dSsrKW49dSUyP24uY29uY2F0KGFbdV0pOm4uY29uY2F0KHYoYVt1XSxvKSk7Zm9yKHI9bi5sZW5ndGgsdT0wO3U8cjt1Kyspcz1iKG5bdV0scyksL1xzezAsfVxzezAsfVNFTEVDVFxzezAsfS8uZXhlYyhuW3VdKSYmKG5bdV09blt1XS5yZXBsYWNlKC9cLC9nLCIsXG4iK28rbykpLC9cc3swLH1cc3swLH1TRVRcc3swLH0vLmV4ZWMoblt1XSkmJihuW3VdPW5bdV0ucmVwbGFjZSgvXCwvZywiLFxuIitvK28pKSwvXHN7MCx9XChcc3swLH1TRUxFQ1Rcc3swLH0vLmV4ZWMoblt1XSk/bCs9ZFsrK2ldK25bdV06L1wnLy5leGVjKG5bdV0pPyhzPDEmJmkmJmktLSxsKz1uW3VdKToobCs9ZFtpXStuW3VdLHM8MSYmaSYmaS0tKTtyZXR1cm4gbD1sLnJlcGxhY2UoL15cbnsxLH0vLCIiKS5yZXBsYWNlKC9cbnsxLH0vZywiXG4iKX0sdy5wcm90b3R5cGUueG1sbWluPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ/ZTplLnJlcGxhY2UoL1w8IVsgXHJcblx0XSooLS0oW15cLV18W1xyXG5dfC1bXlwtXSkqLS1bIFxyXG5cdF0qKVw+L2csIiIpLnJlcGxhY2UoL1sgXHJcblx0XXsxLH14bWxucy9nLCIgeG1sbnMiKSkucmVwbGFjZSgvPlxzezAsfTwvZywiPjwiKX0sdy5wcm90b3R5cGUuanNvbm1pbj1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIEpTT04/ZTpKU09OLnN0cmluZ2lmeShKU09OLnBhcnNlKGUpLG51bGwsMCl9LHcucHJvdG90eXBlLmNzc21pbj1mdW5jdGlvbihlLHQpe3JldHVybih0P2U6ZS5yZXBsYWNlKC9cL1wqKFteKl18W1xyXG5dfChcKisoW14qL118W1xyXG5dKSkpKlwqK1wvL2csIiIpKS5yZXBsYWNlKC9cc3sxLH0vZywiICIpLnJlcGxhY2UoL1x7XHN7MSx9L2csInsiKS5yZXBsYWNlKC9cfVxzezEsfS9nLCJ9IikucmVwbGFjZSgvXDtcc3sxLH0vZywiOyIpLnJlcGxhY2UoL1wvXCpcc3sxLH0vZywiLyoiKS5yZXBsYWNlKC9cKlwvXHN7MSx9L2csIiovIil9LHcucHJvdG90eXBlLnNxbG1pbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cc3sxLH0vZywiICIpLnJlcGxhY2UoL1xzezEsfVwoLywiKCIpLnJlcGxhY2UoL1xzezEsfVwpLywiKSIpfTt2YXIgRj13LHk9e25hbWU6IkRlYnVnIixjb21wb25lbnRzOntFZGl0b3JTY3JpcHQ6ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5hbGwoW2EuZSgiY2h1bmstM2I4ODhhNjUiKSxhLmUoImNodW5rLTBmZDY3NzE2IiksYS5lKCJjaHVuay0wZDEwMmQ1YSIpXSkudGhlbihhLmJpbmQobnVsbCwiY2YwNCIpKX0sRWRpdG9yRGVidWdTaG93OmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UuYWxsKFthLmUoImNodW5rLTNiODg4YTY1IiksYS5lKCJjaHVuay0wZmQ2NzcxNiIpLGEuZSgiY2h1bmstMjE0MjE4ZjAiKSxhLmUoImNodW5rLTczNWM2NzVjIildKS50aGVuKGEuYmluZChudWxsLCJiM2VlIikpfSxEZWJ1Z1Jlc3BvbnNlOmZ1bmN0aW9uKCl7cmV0dXJuIGEuZSgiY2h1bmstNTg5ZmFlZTAiKS50aGVuKGEuYmluZChudWxsLCIzYzYwIikpfX0scHJvcHM6e2FwaTp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITB9LHN3YWdnZXJJbnN0YW5jZTp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITB9fSxkYXRhOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm57b2xkQXBpOnt9LGkxOG46bnVsbCxiaWdGbGFnOiExLGJpZ0Jsb2JGbGFnOiExLGRlYnVnVXJsU3R5bGU6IndpZHRoOiA3MCUiLGVuYWJsZVJlcXVlc3RDYWNoZTohMSxlbmFibGVEeW5hbWljUGFyYW1ldGVyOiExLGVuYWJsZUhvc3Q6ITEsZW5hYmxlSG9zdFRleHQ6IiIsYXV0aG9yaXplUXVlcnlQYXJhbWV0ZXJzOltdLGhlYWRlckNvbHVtbjpbXSxmb3JtQ29sdW1uOltdLHVybEZvcm1Db2x1bW46W10sYWxsb3dDbGVhcjohMCxwYWdpbmF0aW9uOiExLGhlYWRlckF1dG9PcHRpb25zOnMuYS5kZWJ1Z1JlcXVlc3RIZWFkZXJzLGhlYWRlck9wdGlvbnM6cy5hLmRlYnVnUmVxdWVzdEhlYWRlck9wdGlvbnMsaGVhZGVyQ291bnQ6MCxoZWFkZXJDb3VudEZsYWc6ITEsaGVhZGVyU2VsZWN0TmFtZToiIixzZWxlY3RlZFJvd0tleXM6W10scmVxdWVzdFBhcmFtZXRlckFsbG93OiEwLHJvd1NlbGVjdGlvbjp7c2VsZWN0ZWRSb3dLZXlzOltdLG9uQ2hhbmdlOmZ1bmN0aW9uKHQsYSl7ZS5yb3dTZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzPXR9fSxyb3dGb3JtU2VsZWN0aW9uOntzZWxlY3RlZFJvd0tleXM6W10sb25DaGFuZ2U6ZnVuY3Rpb24odCxhKXtlLnJvd0Zvcm1TZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzPXR9fSxyb3dSYXdGb3JtU2VsZWN0aW9uOntzZWxlY3RlZFJvd0tleXM6W10sb25DaGFuZ2U6ZnVuY3Rpb24odCxhKXtlLnJvd1Jhd0Zvcm1TZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzPXR9fSxyb3dVcmxGb3JtU2VsZWN0aW9uOntzZWxlY3RlZFJvd0tleXM6W10sb25DaGFuZ2U6ZnVuY3Rpb24odCxhKXtlLnJvd1VybEZvcm1TZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzPXR9fSxoZWFkZXJEYXRhOltdLGhlYWRlclRhYmxlRmxhZzohMCxnbG9iYWxQYXJhbWV0ZXJzOltdLGRlYnVnVXJsOiIiLGRlYnVnTWV0aG9kVHlwZToiIixkZWJ1Z1BhdGhGbGFnOiExLGRlYnVnUGF0aFBhcmFtczpbXSxkZWJ1Z0xvYWRpbmc6ITEsb0F1dGhBcGk6ITEsZGVidWdTZW5kOiExLGZvcm1EYXRhOltdLGZvcm1GbGFnOiExLGZvcm1UYWJsZUZsYWc6ITAsdXJsRm9ybURhdGE6W10sdXJsRm9ybUZsYWc6ITEsdXJsRm9ybVRhYmxlRmxhZzohMCxyYXdGb3JtRGF0YTpbXSxyYXdGb3JtRmxhZzohMSxyYXdGb3JtVGFibGVGbGFnOiEwLHJhd0RlZmF1bHRUZXh0OiJBdXRvIixyYXdGbGFnOiExLHJhd1R5cGVGbGFnOiExLGZvcm1hdEZsYWc6ITEscmF3VGV4dDoiIixyYXdTY3JpcHQ6IiIscmF3U2NyaXB0TW9kZToiamF2YXNjcmlwdCIscmF3TW9kZToidGV4dCIscmF3UmVxdWVzdFR5cGU6ImFwcGxpY2F0aW9uL2pzb24iLHJlcXVlc3RDb250ZW50VHlwZToieC13d3ctZm9ybS11cmxlbmNvZGVkIixyZXNwb25zZUhlYWRlcnM6W10scmVzcG9uc2VSYXdUZXh0OiIiLHJlc3BvbnNlQ3VybFRleHQ6IiIscmVzcG9uc2VTdGF0dXM6bnVsbCxyZXNwb25zZUNvbnRlbnQ6bnVsbCxyZXNwb25zZUZpZWxkRGVzY3JpcHRpb25DaGVja2VkOiEwLHJvdXRlSGVhZGVyOm51bGwsb2FzMjohMH19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnJvdXRlSGVhZGVyPXRoaXMuc3dhZ2dlckluc3RhbmNlLmhlYWRlcix0aGlzLm9hczI9dGhpcy5zd2FnZ2VySW5zdGFuY2Uub2FzMigpLHRoaXMuaW5pdEkxOG4oKSx0aGlzLmluaXRMb2NhbEdsb2JhbFBhcmFtZXRlcnMoKSx0aGlzLmluaXREZWJ1Z1VybCgpLHRoaXMub2xkQXBpPXAoKSh0aGlzLmFwaSksdGhpcy5lbmFibGVSZWxvYWRDYWNoZVBhcmFtZXRlcj90aGlzLmRlYnVnVXJsU3R5bGU9IndpZHRoOiA2NSU7Ijp0aGlzLmRlYnVnVXJsU3R5bGU9IndpZHRoOiA3MCU7In0sY29tcHV0ZWQ6e2xhbmd1YWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLmdsb2JhbHMubGFuZ3VhZ2V9LGVuYWJsZUFmdGVyU2NyaXB0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLmdsb2JhbHMuZW5hYmxlQWZ0ZXJTY3JpcHR9LGVuYWJsZVJlbG9hZENhY2hlUGFyYW1ldGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLmdsb2JhbHMuZW5hYmxlUmVsb2FkQ2FjaGVQYXJhbWV0ZXJ9fSx3YXRjaDp7bGFuZ3VhZ2U6ZnVuY3Rpb24oZSx0KXt0aGlzLmluaXRJMThuKCl9fSxtZXRob2RzOntyZXNldENhY2hlUGFyYW1ldGVyOmZ1bmN0aW9uKCl7dGhpcy5oZWFkZXJEYXRhPVtdLHRoaXMuZm9ybURhdGE9W10sdGhpcy51cmxGb3JtRGF0YT1bXSx0aGlzLnJhd0Zvcm1EYXRhPVtdLHRoaXMucmF3VGV4dD1uLmEudG9TdHJpbmcodGhpcy5vbGRBcGkucmVxdWVzdFZhbHVlLCIiKSx0aGlzLnJhd1NjcmlwdD0iIix0aGlzLnN0b3JlQXBpUGFyYW1zKCksdGhpcy5pbml0TG9jYWxHbG9iYWxQYXJhbWV0ZXJzKCksdGhpcy5pbml0RGVidWdVcmwoKX0scmVsb2FkQ2FjaGVQYXJhbWV0ZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9W10sYT10aGlzLmFwaS5pbnN0YW5jZUlkO3RoaXMuJGxvY2FsU3RvcmUuZ2V0SXRlbShzLmEuZ2xvYmFsUGFyYW1ldGVyKS50aGVuKChmdW5jdGlvbihyKXtudWxsIT1yJiZudWxsIT1yW2FdJiZudWxsIT1yW2FdJiYodD1yW2FdKSxuLmEuYXJyTm90RW1wdHkodCkmJihlLnJlbG9hZFVwZGF0ZUhlYWRlcih0KSxlLnJhd0ZsYWc/ZS5yZWxvYWRVcGRhdGVSYXdGb3JtKHQpOmUuZm9ybUZsYWc/ZS5yZWxvYWRVcGRhdGVGb3JtKHQpOmUudXJsRm9ybUZsYWcmJmUucmVsb2FkVXBkYXRlVXJsRm9ybSh0KSl9KSl9LHJlbG9hZFVwZGF0ZUNvbW1vbnM6ZnVuY3Rpb24oZSx0LGEpe3ZhciByPVtdLGk9ITEsbz0hMTtuLmEuYXJyTm90RW1wdHkodCkmJnQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG89dC5uYW1lK2Escz1lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUucGtpZD09b30pKTtpZihuLmEuYXJyTm90RW1wdHkocykpe3ZhciBsPXNbMF0sdT1uLmEuZ2V0VmFsdWUobCwidmFsdWUiLCIiLCEwKTt0LmNvbnRlbnQ9dSxpPSEwfXIucHVzaCh0KX0pKTt2YXIgcz1lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW49PWF9KSk7cmV0dXJuIG4uYS5hcnJOb3RFbXB0eShzKSYmcy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZT09ZS5uYW1lfSkpO2lmKCFuLmEuYXJyTm90RW1wdHkodCkpe3ZhciBhPXtpZDpuLmEucmFuZG9tTWQ1KCksbmFtZTplLm5hbWUsY29udGVudDplLnZhbHVlLHJlcXVpcmU6ITAsZGVzY3JpcHRpb246IiIsZW51bXM6bnVsbCxlbnVtc01vZGU6ImRlZmF1bHQiLG5ldzohMX07ci5wdXNoKGEpLGk9ITAsbz0hMH19KSkse3VwZGF0ZTppLGRhdGE6cixhZGQ6b319LHJlbG9hZFVwZGF0ZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLGE9dGhpcy5yZWxvYWRVcGRhdGVDb21tb25zKGUsdGhpcy5oZWFkZXJEYXRhLCJoZWFkZXIiKTthLnVwZGF0ZSYmKHRoaXMuaGVhZGVyRGF0YT1bXSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuaGVhZGVyRGF0YT1hLmRhdGEsYS5hZGQmJih0LmluaXRTZWxlY3Rpb25IZWFkZXJzKCksdC5oZWFkZXJSZXNldENhbGMoKSl9KSwxMCkpfSxyZWxvYWRVcGRhdGVVcmxGb3JtOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsYT10aGlzLnJlbG9hZFVwZGF0ZUNvbW1vbnMoZSx0aGlzLnVybEZvcm1EYXRhLCJxdWVyeSIpO2EudXBkYXRlJiYodGhpcy51cmxGb3JtRGF0YT1bXSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3QudXJsRm9ybURhdGE9YS5kYXRhLGEuYWRkJiZ0LmluaXRVcmxGb3JtU2VsZWN0aW9ucygpfSksMTApKX0scmVsb2FkVXBkYXRlRm9ybTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLGE9dGhpcy5yZWxvYWRVcGRhdGVDb21tb25zKGUsdGhpcy5mb3JtRGF0YSwicXVlcnkiKTthLnVwZGF0ZSYmKHRoaXMuZm9ybURhdGE9W10sc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LmZvcm1EYXRhPWEuZGF0YSxhLmFkZCYmdC5pbml0Rm9ybVNlbGVjdGlvbnMoKX0pLDEwKSl9LHJlbG9hZFVwZGF0ZVJhd0Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxhPXRoaXMucmVsb2FkVXBkYXRlQ29tbW9ucyhlLHRoaXMucmF3Rm9ybURhdGEsInF1ZXJ5Iik7YS51cGRhdGUmJih0aGlzLnJhd0Zvcm1EYXRhPVtdLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dC5yYXdGb3JtRGF0YT1hLmRhdGEsYS5hZGQmJih0LnJhd0Zvcm1GbGFnPSEwLHQucmF3Rm9ybVRhYmxlRmxhZz0hMCx0LmluaXRSYXdGb3JtU2VsZWN0aW9ucygpKX0pLDEwKSl9LGdldEN1cnJlbnRJMThuSW5zdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kaTE4bi5tZXNzYWdlc1t0aGlzLmxhbmd1YWdlXX0saW5pdEkxOG46ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEN1cnJlbnRJMThuSW5zdGFuY2UoKTt0aGlzLmkxOG49ZSx0aGlzLmhlYWRlckNvbHVtbj1lLnRhYmxlLmRlYnVnUmVxdWVzdEhlYWRlckNvbHVtbnMsdGhpcy5mb3JtQ29sdW1uPWUudGFibGUuZGVidWdGb3JtRGF0YVJlcXVlc3RDb2x1bW5zLHRoaXMudXJsRm9ybUNvbHVtbj1lLnRhYmxlLmRlYnVnVXJsRm9ybVJlcXVlc3RDb2x1bW5zfSxkZWJ1Z1VybENoYW5nZTpmdW5jdGlvbihlKXt0aGlzLmRlYnVnVXJsPWUudGFyZ2V0LnZhbHVlfSxpbml0RGVidWdVcmw6ZnVuY3Rpb24oKXtpZih0aGlzLmRlYnVnVXJsPXRoaXMuYXBpLnVybCx0aGlzLmRlYnVnTWV0aG9kVHlwZT10aGlzLmFwaS5tZXRob2RUeXBlLG5ldyBSZWdFeHAoInsoLio/KX0iLCJpZyIpLnRlc3QodGhpcy5kZWJ1Z1VybCkpe3RoaXMuZGVidWdQYXRoRmxhZz0hMDtmb3IodmFyIGU9bnVsbCx0PW5ldyBSZWdFeHAoInsoLio/KX0iLCJpZyIpO2U9dC5leGVjKHRoaXMuZGVidWdVcmwpOyl0aGlzLmRlYnVnUGF0aFBhcmFtcy5wdXNoKGVbMV0pfX0saW5pdExvY2FsR2xvYmFsUGFyYW1ldGVyczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmFwaS5pbnN0YW5jZUlkO3RoaXMuJGxvY2FsU3RvcmUuZ2V0SXRlbShzLmEuZ2xvYmFsU2V0dGluZ3NLZXkpLnRoZW4oKGZ1bmN0aW9uKGEpe2lmKG4uYS5jaGVja1VuZGVmaW5lZChhKSYmKGUuZW5hYmxlUmVxdWVzdENhY2hlPWEuZW5hYmxlUmVxdWVzdENhY2hlLG4uYS5jaGVja1VuZGVmaW5lZChhLmVuYWJsZUR5bmFtaWNQYXJhbWV0ZXIpJiYoZS5lbmFibGVEeW5hbWljUGFyYW1ldGVyPWEuZW5hYmxlRHluYW1pY1BhcmFtZXRlciksbi5hLmNoZWNrVW5kZWZpbmVkKGEuZW5hYmxlSG9zdCkpKXtlLmVuYWJsZUhvc3Q9YS5lbmFibGVIb3N0O3ZhciByPWEuZW5hYmxlSG9zdFRleHQ7bi5hLmNoZWNrVW5kZWZpbmVkKHIpPyhyLnN0YXJ0V2l0aCgiaHR0cCIpfHwocj0iaHR0cDovLyIrciksZS5lbmFibGVIb3N0VGV4dD1yKTplLmVuYWJsZUhvc3Q9ITF9ZS4kbG9jYWxTdG9yZS5nZXRJdGVtKHMuYS5nbG9iYWxQYXJhbWV0ZXIpLnRoZW4oKGZ1bmN0aW9uKGEpe251bGwhPWEmJm51bGwhPWFbdF0mJm51bGwhPWFbdF0mJihlLmdsb2JhbFBhcmFtZXRlcnM9YVt0XSk7dmFyIHI9cy5hLmRlYnVnQ2FjaGVBcGlJZCtlLmFwaS5pZDtlLiRsb2NhbFN0b3JlLmdldEl0ZW0ocikudGhlbigoZnVuY3Rpb24odCl7ZS5pbml0SGVhZGVyUGFyYW1ldGVyKHQpO3ZhciBhPXMuYS5nbG9iYWxTZWN1cml0eVBhcmFtUHJlZml4K2UuYXBpLmluc3RhbmNlSWQ7ZS4kbG9jYWxTdG9yZS5nZXRJdGVtKGEpLnRoZW4oKGZ1bmN0aW9uKGEpe24uYS5hcnJOb3RFbXB0eShhKSYmYS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZigicXVlcnkiPT10LmluKXt2YXIgYT17aWQ6bi5hLnJhbmRvbU1kNSgpLG5hbWU6dC5uYW1lLGNvbnRlbnQ6dC52YWx1ZSx2YWx1ZTp0LnZhbHVlLHJlcXVpcmU6ITAsZGVzY3JpcHRpb246IiIsZW51bXM6bnVsbCxlbnVtc01vZGU6ImRlZmF1bHQiLG5ldzohMX07ZS5hcGkuc2VjdXJpdHlGbGFnJiZlLmFwaS5zZWN1cml0eUtleXMuaW5jbHVkZXModC5rZXkpJiZlLmF1dGhvcml6ZVF1ZXJ5UGFyYW1ldGVycy5wdXNoKGEpfX0pKSxlLmluaXRCb2R5UGFyYW1ldGVyKHQpfSkpfSkpfSkpfSkpfSxpbml0SGVhZGVyUGFyYW1ldGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsYT10aGlzLnN5bmNGcm9tT0F1dGgyKCk7aWYobi5hLmNoZWNrVW5kZWZpbmVkKGEpKXt0aGlzLm9BdXRoQXBpPSEwO3ZhciByPXtpZDpuLmEucmFuZG9tTWQ1KCksbmFtZTphLm5hbWUsY29udGVudDphLmFjY2Vzc1Rva2VuLHJlcXVpcmU6ITAsZGVzY3JpcHRpb246IiIsZW51bXM6bnVsbCxlbnVtc01vZGU6ImRlZmF1bHQiLG5ldzohMX07dGhpcy5hZGREZWJ1Z0hlYWRlcihyKX10aGlzLmdsb2JhbFBhcmFtZXRlcnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoImhlYWRlciI9PWUuaW4pe3ZhciBhPXtpZDpuLmEucmFuZG9tTWQ1KCksbmFtZTplLm5hbWUsY29udGVudDplLnZhbHVlLHJlcXVpcmU6ITAsZGVzY3JpcHRpb246IiIsZW51bXM6bnVsbCxlbnVtc01vZGU6ImRlZmF1bHQiLG5ldzohMX07dC5hZGREZWJ1Z0hlYWRlcihhKX19KSk7dmFyIGk9cy5hLmdsb2JhbFNlY3VyaXR5UGFyYW1QcmVmaXgrdGhpcy5hcGkuaW5zdGFuY2VJZDt0aGlzLiRsb2NhbFN0b3JlLmdldEl0ZW0oaSkudGhlbigoZnVuY3Rpb24oYSl7bi5hLmFyck5vdEVtcHR5KGEpJiZhLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBhPW4uYS5nZXRPQXV0aDJCZWFyZXJWYWx1ZShlLnNjaGVtYSxlLnZhbHVlKSxyPXtpZDpuLmEucmFuZG9tTWQ1KCksbmFtZTplLm5hbWUsY29udGVudDphLHJlcXVpcmU6ITAsZGVzY3JpcHRpb246IiIsZW51bXM6bnVsbCxlbnVtc01vZGU6ImRlZmF1bHQiLG5ldzohMX07ImhlYWRlciI9PWUuaW4mJnQuYXBpLnNlY3VyaXR5RmxhZyYmdC5hcGkuc2VjdXJpdHlLZXlzLmluY2x1ZGVzKGUua2V5KSYmdC5hZGREZWJ1Z0hlYWRlcihyKX0pKSx0LnVwZGF0ZUhlYWRlckZyb21DYWNoZUFwaShlKSx0LmFkZE5ld0xpbmVIZWFkZXIoKSx0LmluaXRTZWxlY3Rpb25IZWFkZXJzKCksdC5oZWFkZXJSZXNldENhbGMoKX0pKX0sdXBkYXRlSGVhZGVyRnJvbUNhY2hlQXBpOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodGhpcy5lbmFibGVSZXF1ZXN0Q2FjaGUmJm4uYS5jaGVja1VuZGVmaW5lZChlKSl7dmFyIGE9ZS5oZWFkZXJEYXRhO3RoaXMuaGVhZGVyRGF0YS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZighbi5hLnN0ck5vdEJsYW5rKGUuY29udGVudCkpe3ZhciByPWEuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT1lLm5hbWV9KSk7ci5sZW5ndGg+MCYmKHQub0F1dGhBcGk/IkF1dGhvcml6YXRpb24iIT1lLm5hbWUmJihlLmNvbnRlbnQ9clswXS5jb250ZW50KTplLmNvbnRlbnQ9clswXS5jb250ZW50KX19KSl9fSx1cGRhdGVVcmxGb3JtQ2FjaGVBcGk6ZnVuY3Rpb24oZSl7aWYodGhpcy5lbmFibGVSZXF1ZXN0Q2FjaGUmJm4uYS5jaGVja1VuZGVmaW5lZChlKSl7dmFyIHQ9ZS51cmxGb3JtRGF0YTt0aGlzLnVybEZvcm1EYXRhLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKCFuLmEuc3RyTm90QmxhbmsoZS5jb250ZW50KSl7dmFyIGE9dC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWU9PWUubmFtZX0pKTthLmxlbmd0aD4wJiYoZS5jb250ZW50PWFbMF0uY29udGVudCl9fSkpfX0sdXBkYXRlUmF3Rm9ybUNhY2hlQXBpOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZW5hYmxlUmVxdWVzdENhY2hlJiZuLmEuY2hlY2tVbmRlZmluZWQoZSkpe3ZhciB0PWUucmF3Rm9ybURhdGE7dGhpcy5yYXdGb3JtRGF0YS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZighbi5hLnN0ck5vdEJsYW5rKGUuY29udGVudCkpe3ZhciBhPXQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT1lLm5hbWV9KSk7YS5sZW5ndGg+MCYmKGUuY29udGVudD1hWzBdLmNvbnRlbnQpfX0pKSx0aGlzLnJhd1RleHQ9ZS5yYXdUZXh0fX0sc3luY0Zyb21PQXV0aDI6ZnVuY3Rpb24oKXt2YXIgZT0iU0VMRk9BdXRoIit0aGlzLnN3YWdnZXJJbnN0YW5jZS5pZDtpZih3aW5kb3cubG9jYWxTdG9yYWdlKXt2YXIgdD13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oZSk7aWYobi5hLnN0ck5vdEJsYW5rKHQpKXJldHVybiBuLmEuanNvbjVwYXJzZSh0KX1yZXR1cm4gbnVsbH0sdXBkYXRlRm9ybUNhY2hlQXBpOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZW5hYmxlUmVxdWVzdENhY2hlJiZuLmEuY2hlY2tVbmRlZmluZWQoZSkpe3ZhciB0PWUuZm9ybURhdGE7dGhpcy5mb3JtRGF0YS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZighbi5hLnN0ck5vdEJsYW5rKGUuY29udGVudCkpe3ZhciBhPXQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT1lLm5hbWV9KSk7YS5sZW5ndGg+MCYmKGUuY29udGVudD1hWzBdLmNvbnRlbnQpfX0pKX19LGluaXRCb2R5UGFyYW1ldGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2xvYmFsUGFyYW1ldGVycy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiJoZWFkZXIiIT1lLmlufSkpLGE9dGhpcy5hcGkucGFyYW1ldGVycyxyPVtdLGk9W107aWYodC5sZW5ndGg+MCYmdC5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihuLmEuYXJyTm90RW1wdHkoYSkpe3ZhciB0PSEwO2EuZm9yRWFjaCgoZnVuY3Rpb24oYSl7ZS5uYW1lPT1hLm5hbWUmJmUuaW49PWEuaW4mJm4uYS5zdHJOb3RCbGFuayhhLnR4dFZhbHVlKSYmKHQ9ITEpfSkpLHQmJnIucHVzaChlKX1lbHNlIHIucHVzaChlKX0pKSxuLmEuYXJyTm90RW1wdHkoYSkmJmEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYobi5hLmFyck5vdEVtcHR5KHQpKXt2YXIgYT0hMDt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QubmFtZT09ZS5uYW1lJiZ0LmluPT1lLmluJiYobi5hLnN0ck5vdEJsYW5rKGUudHh0VmFsdWUpfHwoYT0hMSkpfSkpLGEmJmkucHVzaChlKX1lbHNlIGkucHVzaChlKX0pKSxuLmEuYXJyTm90RW1wdHkodGhpcy5hdXRob3JpemVRdWVyeVBhcmFtZXRlcnMpJiZ0aGlzLmF1dGhvcml6ZVF1ZXJ5UGFyYW1ldGVycy5mb3JFYWNoKChmdW5jdGlvbihlKXtyLnB1c2goZSl9KSksci5sZW5ndGgsaS5sZW5ndGgsbi5hLmFyck5vdEVtcHR5KGkpKWlmKDE9PWkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4iYm9keSI9PWUuaW59KSkubGVuZ3RoKXt2YXIgbz1pLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuImJvZHkiIT1lLmluJiYiaGVhZGVyIiE9ZS5pbn0pKTt0aGlzLmFkZEdsb2JhbFBhcmFtZXRlclRvUmF3Rm9ybShyKSxvLmxlbmd0aD4wJiYodGhpcy5yYXdGb3JtRmxhZz0hMCx0aGlzLmFkZEFwaVBhcmFtZXRlclRvUmF3Rm9ybShvKSksbi5hLmFyck5vdEVtcHR5KHRoaXMucmF3Rm9ybURhdGEpJiYodGhpcy5yYXdGb3JtRmxhZz0hMCksdGhpcy5zaG93VGFiUmF3KCksdGhpcy5hZGRBcGlQYXJhbWV0ZXJUb1JhdyhpKSx0aGlzLnVwZGF0ZVJhd0Zvcm1DYWNoZUFwaShlKSx0aGlzLnJhd0Zvcm1GbGFnJiZ0aGlzLmluaXRGaXJzdFJhd0Zvcm1WYWx1ZSgpfWVsc2V7aS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiJNdWx0aXBhcnRGaWxlIj09ZS5zY2hlbWFWYWx1ZXx8ImZpbGUiPT1lLnNjaGVtYVZhbHVlfHwiZmlsZSI9PWUudHlwZXx8ImZvcm1EYXRhIj09ZS5pbnx8ImZvcm1kYXRhIj09ZS5pbn0pKS5sZW5ndGg+MD8odGhpcy5zaG93VGFiRm9ybSgpLHRoaXMuYWRkR2xvYmFsUGFyYW1ldGVyVG9Gb3JtKHIpLHRoaXMuYWRkQXBpUGFyYW1ldGVyVG9Gb3JtKGkpLHRoaXMudXBkYXRlRm9ybUNhY2hlQXBpKGUpLHRoaXMuaW5pdEZpcnN0Rm9ybVZhbHVlKCkpOih0aGlzLnNob3dUYWJVcmxGb3JtKCksdGhpcy5hZGRHbG9iYWxQYXJhbWV0ZXJUb1VybEZvcm0ociksdGhpcy5hZGRBcGlQYXJhbWV0ZXJUb1VybEZvcm0oaSksdGhpcy51cGRhdGVVcmxGb3JtQ2FjaGVBcGkoZSksdGhpcy5pbml0VXJsRm9ybVZhbHVlKCkpfWVsc2UicmF3Ij09dGhpcy5hcGkuY29udGVudFZhbHVlPyh0aGlzLnNob3dUYWJSYXcoKSx0aGlzLmluaXRGaXJzdFJhd0Zvcm1WYWx1ZSgpKToodGhpcy5zaG93VGFiVXJsRm9ybSgpLHRoaXMuYWRkR2xvYmFsUGFyYW1ldGVyVG9VcmxGb3JtKHIpLHRoaXMuYWRkQXBpUGFyYW1ldGVyVG9VcmxGb3JtKGkpLHRoaXMudXBkYXRlVXJsRm9ybUNhY2hlQXBpKGUpLHRoaXMuaW5pdFVybEZvcm1WYWx1ZSgpKTt0aGlzLnVwZGF0ZVNjcmlwdEZyb21DYWNoZShlKSx0aGlzLnVwZGF0ZUhlYWRlckZyb21DYWNoZUFwaShlKSx0aGlzLmhpZGVEeW5hbWljUGFyYW1ldGVyVGFibGUoKX0sdXBkYXRlU2NyaXB0RnJvbUNhY2hlOmZ1bmN0aW9uKGUpe24uYS5jaGVja1VuZGVmaW5lZChlKSYmbi5hLnN0ck5vdEJsYW5rKGUucmF3U2NyaXB0KSYmKHRoaXMucmF3U2NyaXB0PWUucmF3U2NyaXB0KX0saGlkZUR5bmFtaWNQYXJhbWV0ZXJUYWJsZTpmdW5jdGlvbigpe3RoaXMuZW5hYmxlRHluYW1pY1BhcmFtZXRlcnx8KDA9PXRoaXMuaGVhZGVyRGF0YS5sZW5ndGg/dGhpcy5oZWFkZXJUYWJsZUZsYWc9ITE6dGhpcy5oZWFkZXJUYWJsZUZsYWc9ITAsMD09dGhpcy51cmxGb3JtRGF0YS5sZW5ndGg/dGhpcy51cmxGb3JtVGFibGVGbGFnPSExOnRoaXMudXJsRm9ybVRhYmxlRmxhZz0hMCwwPT10aGlzLmZvcm1EYXRhLmxlbmd0aD90aGlzLmZvcm1UYWJsZUZsYWc9ITE6dGhpcy5mb3JtVGFibGVGbGFnPSEwLDA9PXRoaXMucmF3Rm9ybURhdGEubGVuZ3RoP3RoaXMucmF3Rm9ybVRhYmxlRmxhZz0hMTp0aGlzLnJhd0Zvcm1UYWJsZUZsYWc9ITApLHRoaXMuaW5pdFNlbGVjdGlvbkhlYWRlcnMoKSx0aGlzLmhlYWRlclJlc2V0Q2FsYygpfSxhZGROZXdMaW5lSGVhZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLmVuYWJsZUR5bmFtaWNQYXJhbWV0ZXIpe3ZhciB0PXtpZDpuLmEucmFuZG9tTWQ1KCksbmFtZToiIixjb250ZW50OiIiLHJlcXVpcmU6ITEsZGVzY3JpcHRpb246IiIsZW51bXM6bnVsbCxlbnVtc01vZGU6ImRlZmF1bHQiLG5ldzohMH07c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5hZGREZWJ1Z0hlYWRlcih0KX0pLDEwMCl9dGhpcy5oaWRlRHluYW1pY1BhcmFtZXRlclRhYmxlKCl9LGFkZERlYnVnSGVhZGVyOmZ1bmN0aW9uKGUpe2lmKG4uYS5zdHJOb3RCbGFuayhlLm5hbWUpKXt2YXIgdD10aGlzLmhlYWRlckRhdGEuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT1lLm5hbWV9KSk7bi5hLnN0ckJsYW5rKGUuY29udGVudCk/MD09dC5sZW5ndGgmJnRoaXMuaGVhZGVyRGF0YS5wdXNoKGUpOnRoaXMuaGVhZGVyRGF0YS5wdXNoKGUpfWVsc2UgdGhpcy5oZWFkZXJEYXRhLnB1c2goZSl9LGluaXRGaXJzdEZvcm1WYWx1ZTpmdW5jdGlvbigpe3RoaXMuYWRkTmV3TGluZUZvcm1WYWx1ZSgpLHRoaXMuaW5pdEZvcm1TZWxlY3Rpb25zKCl9LGluaXRGb3JtU2VsZWN0aW9uczpmdW5jdGlvbihlKXt2YXIgdD10aGlzO24uYS5zdHJOb3RCbGFuayhlKT8wPT10aGlzLnJvd0Zvcm1TZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PWV9KSkubGVuZ3RoJiZ0aGlzLnJvd0Zvcm1TZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzLnB1c2goZSk6dGhpcy5mb3JtRGF0YS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnJlcXVpcmUmJnQucm93Rm9ybVNlbGVjdGlvbi5zZWxlY3RlZFJvd0tleXMucHVzaChlLmlkKX0pKX0saW5pdFJhd0Zvcm1TZWxlY3Rpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7bi5hLnN0ck5vdEJsYW5rKGUpPzA9PXRoaXMucm93UmF3Rm9ybVNlbGVjdGlvbi5zZWxlY3RlZFJvd0tleXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdD09ZX0pKS5sZW5ndGgmJnRoaXMucm93UmF3Rm9ybVNlbGVjdGlvbi5zZWxlY3RlZFJvd0tleXMucHVzaChlKTp0aGlzLnJhd0Zvcm1EYXRhLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucmVxdWlyZSYmdC5yb3dSYXdGb3JtU2VsZWN0aW9uLnNlbGVjdGVkUm93S2V5cy5wdXNoKGUuaWQpfSkpfSxpbml0VXJsRm9ybVNlbGVjdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztuLmEuc3RyTm90QmxhbmsoZSk/MD09dGhpcy5yb3dVcmxGb3JtU2VsZWN0aW9uLnNlbGVjdGVkUm93S2V5cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT1lfSkpLmxlbmd0aCYmdGhpcy5yb3dVcmxGb3JtU2VsZWN0aW9uLnNlbGVjdGVkUm93S2V5cy5wdXNoKGUpOnRoaXMudXJsRm9ybURhdGEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZXF1aXJlJiZ0LnJvd1VybEZvcm1TZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzLnB1c2goZS5pZCl9KSl9LHNob3dUYWJGb3JtOmZ1bmN0aW9uKCl7dGhpcy5mb3JtRmxhZz0hMCx0aGlzLnJhd0ZsYWc9ITEsdGhpcy5yYXdUeXBlRmxhZz0hMSx0aGlzLmZvcm1hdEZsYWc9ITEsdGhpcy51cmxGb3JtRmxhZz0hMSx0aGlzLnJlcXVlc3RDb250ZW50VHlwZT0iZm9ybS1kYXRhIix0aGlzLnRvZ2dsZUJlYXV0aWZ5QnV0dG9uU3RhdHVzKCl9LHNob3dUYWJVcmxGb3JtOmZ1bmN0aW9uKCl7dGhpcy51cmxGb3JtRmxhZz0hMCx0aGlzLnJhd0ZsYWc9ITEsdGhpcy5yYXdUeXBlRmxhZz0hMSx0aGlzLmZvcm1GbGFnPSExLHRoaXMucmVxdWVzdENvbnRlbnRUeXBlPSJ4LXd3dy1mb3JtLXVybGVuY29kZWQiLHRoaXMudG9nZ2xlQmVhdXRpZnlCdXR0b25TdGF0dXMoKX0sc2hvd1RhYlJhdzpmdW5jdGlvbigpe3RoaXMucmF3RmxhZz0hMCx0aGlzLnJhd01vZGU9dGhpcy5hcGkuY29udGVudE1vZGUsdGhpcy5yYXdEZWZhdWx0VGV4dD10aGlzLmFwaS5jb250ZW50U2hvd1ZhbHVlLHRoaXMucmF3VHlwZUZsYWc9ITAsdGhpcy5mb3JtRmxhZz0hMSx0aGlzLnVybEZvcm1GbGFnPSExLHRoaXMucmF3VGV4dD1uLmEudG9TdHJpbmcodGhpcy5hcGkucmVxdWVzdFZhbHVlLCIiKSx0aGlzLmFwaS54bWxSZXF1ZXN0JiYodGhpcy5yYXdSZXF1ZXN0VHlwZT0iYXBwbGljYXRpb24veG1sIiksdGhpcy5yZXF1ZXN0Q29udGVudFR5cGU9InJhdyIsdGhpcy50b2dnbGVCZWF1dGlmeUJ1dHRvblN0YXR1cygpfSxnZXRFbnVtT3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdD1uLmEucHJvcFZhbHVlKCJlbnVtIixlLG51bGwpLGE9bnVsbDtpZihuLmEuY2hlY2tVbmRlZmluZWQodCkpe3ZhciByPVtdO3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ci5wdXNoKHt2YWx1ZTplLGxhYmVsOmV9KX0pKSxhPXJ9cmV0dXJuIGF9LGFkZE5ld0xpbmVGb3JtVmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZUR5bmFtaWNQYXJhbWV0ZXIpe3ZhciBlPXtpZDpuLmEucmFuZG9tTWQ1KCksbmFtZToiIix0eXBlOiJ0ZXh0IixyZXF1aXJlOiExLHRhcmdldDpudWxsLG11bHRpcGFydDohMSxjb250ZW50OiIiLGRlc2NyaXB0aW9uOiIiLGVudW1zOm51bGwsZW51bXNNb2RlOiJkZWZhdWx0IixuZXc6ITB9O3RoaXMuZm9ybURhdGEucHVzaChlKX1lbHNlIHRoaXMuaGlkZUR5bmFtaWNQYXJhbWV0ZXJUYWJsZSgpfSxhZGRHbG9iYWxQYXJhbWV0ZXJUb1Jhd0Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztuLmEuYXJyTm90RW1wdHkoZSkmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGE9e2lkOm4uYS5yYW5kb21NZDUoKSxuYW1lOmUubmFtZSx0eXBlOiJ0ZXh0IixyZXF1aXJlOiExLHRhcmdldDpudWxsLG11bHRpcGFydDohMSxjb250ZW50OmUudmFsdWUsZGVzY3JpcHRpb246IiIsZW51bXM6bnVsbCxlbnVtc01vZGU6ImRlZmF1bHQiLG5ldzohMX07dC5yYXdGb3JtRGF0YS5wdXNoKGEpfSkpfSxhZGRHbG9iYWxQYXJhbWV0ZXJUb0Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztuLmEuYXJyTm90RW1wdHkoZSkmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGE9e2lkOm4uYS5yYW5kb21NZDUoKSxuYW1lOmUubmFtZSx0eXBlOiJ0ZXh0IixyZXF1aXJlOiExLHRhcmdldDpudWxsLG11bHRpcGFydDohMSxjb250ZW50OmUudmFsdWUsZGVzY3JpcHRpb246IiIsZW51bXM6bnVsbCxlbnVtc01vZGU6ImRlZmF1bHQiLG5ldzohMX07dC5mb3JtRGF0YS5wdXNoKGEpfSkpfSxhZGRBcGlQYXJhbWV0ZXJUb1JhdzpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKG4uYS5hcnJOb3RFbXB0eShlKSl7dmFyIGE9ZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiJoZWFkZXIiPT1lLmlufSkpO2EubGVuZ3RoPjAmJmEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGE9e2lkOm4uYS5yYW5kb21NZDUoKSxuYW1lOmUubmFtZSxyZXF1aXJlOmUucmVxdWlyZSxjb250ZW50OmUudHh0VmFsdWUsZGVzY3JpcHRpb246bi5hLnByb3BWYWx1ZSgiZGVzY3JpcHRpb24iLGUsIiIpLGVudW1zOnQuZ2V0RW51bU9wdGlvbnMoZSksZW51bXNNb2RlOiJkZWZhdWx0IixuZXc6ITF9O251bGwhPWEuZW51bXMmJihuLmEuc3RyTm90QmxhbmsoYS5jb250ZW50KXx8KGEuY29udGVudD1hLmVudW1zWzBdLnZhbHVlKSksdC5hZGREZWJ1Z0hlYWRlcihhKX0pKX19LGFkZEFwaVBhcmFtZXRlclRvRm9ybTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO24uYS5hcnJOb3RFbXB0eShlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZigiaGVhZGVyIj09ZS5pbil7dmFyIGE9e2lkOm4uYS5yYW5kb21NZDUoKSxuYW1lOmUubmFtZSxyZXF1aXJlOmUucmVxdWlyZSxjb250ZW50OmUudHh0VmFsdWUsZGVzY3JpcHRpb246bi5hLnByb3BWYWx1ZSgiZGVzY3JpcHRpb24iLGUsIiIpLGVudW1zOnQuZ2V0RW51bU9wdGlvbnMoZSksZW51bXNNb2RlOiJkZWZhdWx0IixuZXc6ITF9O251bGwhPWEuZW51bXMmJihuLmEuc3RyTm90QmxhbmsoYS5jb250ZW50KXx8KGEuY29udGVudD1hLmVudW1zWzBdLnZhbHVlKSksdC5hZGREZWJ1Z0hlYWRlcihhKX1lbHNle3ZhciByPSJ0ZXh0IixpPSExOyJNdWx0aXBhcnRGaWxlIiE9ZS5zY2hlbWFWYWx1ZSYmImZpbGUiIT1lLnNjaGVtYVZhbHVlJiYiZmlsZSIhPWUudHlwZXx8KHI9ImZpbGUiLCJhcnJheSI9PWUudHlwZSYmKGk9ITApKTt2YXIgbz17aWQ6bi5hLnJhbmRvbU1kNSgpLG5hbWU6ZS5uYW1lLHR5cGU6cixyZXF1aXJlOmUucmVxdWlyZSx0YXJnZXQ6bnVsbCxtdWx0aXBhcnQ6aSxjb250ZW50OmUudHh0VmFsdWUsZGVzY3JpcHRpb246bi5hLnByb3BWYWx1ZSgiZGVzY3JpcHRpb24iLGUsIiIpLGVudW1zOnQuZ2V0RW51bU9wdGlvbnMoZSksZW51bXNNb2RlOiJkZWZhdWx0IixuZXc6ITF9O251bGwhPW8uZW51bXMmJihuLmEuc3RyTm90Qmxhbmsoby5jb250ZW50KXx8KG8uY29udGVudD1vLmVudW1zWzBdLnZhbHVlKSksdC5mb3JtRGF0YS5wdXNoKG8pfX0pKX0sYWRkR2xvYmFsUGFyYW1ldGVyVG9VcmxGb3JtOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7bi5hLmFyck5vdEVtcHR5KGUpJiZlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBhPXtpZDpuLmEucmFuZG9tTWQ1KCksbmFtZTplLm5hbWUsdHlwZToidGV4dCIscmVxdWlyZTohMSx0YXJnZXQ6bnVsbCxjb250ZW50OmUudmFsdWUsZGVzY3JpcHRpb246IiIsZW51bXM6bnVsbCxlbnVtc01vZGU6ImRlZmF1bHQiLG5ldzohMX07dC51cmxGb3JtRGF0YS5wdXNoKGEpfSkpfSxhZGRBcGlQYXJhbWV0ZXJUb1Jhd0Zvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztuLmEuYXJyTm90RW1wdHkoZSkmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoImhlYWRlciI9PWUuaW4pe3ZhciBhPXtpZDpuLmEucmFuZG9tTWQ1KCksbmFtZTplLm5hbWUscmVxdWlyZTplLnJlcXVpcmUsY29udGVudDplLnR4dFZhbHVlLGRlc2NyaXB0aW9uOm4uYS5wcm9wVmFsdWUoImRlc2NyaXB0aW9uIixlLCIiKSxlbnVtczp0LmdldEVudW1PcHRpb25zKGUpLGVudW1zTW9kZToiZGVmYXVsdCIsbmV3OiExfTtudWxsIT1hLmVudW1zJiYobi5hLnN0ck5vdEJsYW5rKGEuY29udGVudCl8fChhLmNvbnRlbnQ9YS5lbnVtc1swXS52YWx1ZSkpLHQuYWRkRGVidWdIZWFkZXIoYSl9ZWxzZXt2YXIgcj17aWQ6bi5hLnJhbmRvbU1kNSgpLG5hbWU6ZS5uYW1lLHR5cGU6InRleHQiLHJlcXVpcmU6ZS5yZXF1aXJlLHRhcmdldDpudWxsLGNvbnRlbnQ6ZS50eHRWYWx1ZSxkZXNjcmlwdGlvbjpuLmEucHJvcFZhbHVlKCJkZXNjcmlwdGlvbiIsZSwiIiksZW51bXM6dC5nZXRFbnVtT3B0aW9ucyhlKSxlbnVtc01vZGU6ImRlZmF1bHQiLG5ldzohMX07bnVsbCE9ci5lbnVtcyYmKG4uYS5zdHJOb3RCbGFuayhyLmNvbnRlbnQpfHwoci5jb250ZW50PXIuZW51bXNbMF0udmFsdWUpKSx0LnJhd0Zvcm1EYXRhLnB1c2gocil9fSkpfSxhZGRBcGlQYXJhbWV0ZXJUb1VybEZvcm06ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztuLmEuYXJyTm90RW1wdHkoZSkmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoImhlYWRlciI9PWUuaW4pe3ZhciBhPXtpZDpuLmEucmFuZG9tTWQ1KCksbmFtZTplLm5hbWUscmVxdWlyZTplLnJlcXVpcmUsY29udGVudDplLnR4dFZhbHVlLGRlc2NyaXB0aW9uOm4uYS5wcm9wVmFsdWUoImRlc2NyaXB0aW9uIixlLCIiKSxlbnVtczp0LmdldEVudW1PcHRpb25zKGUpLGVudW1zTW9kZToiZGVmYXVsdCIsbmV3OiExfTtudWxsIT1hLmVudW1zJiYobi5hLnN0ck5vdEJsYW5rKGEuY29udGVudCl8fChhLmNvbnRlbnQ9YS5lbnVtc1swXS52YWx1ZSkpLHQuYWRkRGVidWdIZWFkZXIoYSl9ZWxzZXt2YXIgcj0iZGVmYXVsdCI7bi5hLmFyck5vdEVtcHR5KGUuZW51bSkmJiJhcnJheSI9PWUudHlwZSYmKHI9Im11bHRpcGxlIik7dmFyIGk9e2lkOm4uYS5yYW5kb21NZDUoKSxuYW1lOmUubmFtZSx0eXBlOiJ0ZXh0IixyZXF1aXJlOmUucmVxdWlyZSx0YXJnZXQ6bnVsbCxjb250ZW50OmUudHh0VmFsdWUsZGVzY3JpcHRpb246bi5hLnByb3BWYWx1ZSgiZGVzY3JpcHRpb24iLGUsIiIpLGVudW1zOnQuZ2V0RW51bU9wdGlvbnMoZSksZW51bXNNb2RlOnIsbmV3OiExfTtudWxsIT1pLmVudW1zJiYobi5hLnN0ck5vdEJsYW5rKGkuY29udGVudCl8fChpLmNvbnRlbnQ9aS5lbnVtc1swXS52YWx1ZSkpLHQudXJsRm9ybURhdGEucHVzaChpKX19KSl9LGFkZE5ld0xpbmVVcmxGb3JtVmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZUR5bmFtaWNQYXJhbWV0ZXIpe3ZhciBlPXtpZDpuLmEucmFuZG9tTWQ1KCksbmFtZToiIix0eXBlOiJ0ZXh0IixyZXF1aXJlOiExLHRhcmdldDpudWxsLGNvbnRlbnQ6IiIsZGVzY3JpcHRpb246IiIsZW51bXM6bnVsbCxlbnVtc01vZGU6ImRlZmF1bHQiLG5ldzohMH07dGhpcy51cmxGb3JtRGF0YS5wdXNoKGUpfWVsc2UgdGhpcy5oaWRlRHluYW1pY1BhcmFtZXRlclRhYmxlKCl9LGFkZE5ld0xpbmVSYXdGb3JtVmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZUR5bmFtaWNQYXJhbWV0ZXIpe3ZhciBlPXtpZDpuLmEucmFuZG9tTWQ1KCksbmFtZToiIix0eXBlOiJ0ZXh0IixyZXF1aXJlOiExLHRhcmdldDpudWxsLGNvbnRlbnQ6IiIsZGVzY3JpcHRpb246IiIsZW51bXM6bnVsbCxlbnVtc01vZGU6ImRlZmF1bHQiLG5ldzohMH07dGhpcy5yYXdGb3JtRGF0YS5wdXNoKGUpfWVsc2UgdGhpcy5oaWRlRHluYW1pY1BhcmFtZXRlclRhYmxlKCl9LGluaXRGaXJzdFJhd0Zvcm1WYWx1ZTpmdW5jdGlvbigpe3RoaXMuYWRkTmV3TGluZVJhd0Zvcm1WYWx1ZSgpLHRoaXMuaW5pdFJhd0Zvcm1TZWxlY3Rpb25zKCl9LGluaXRVcmxGb3JtVmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmFkZE5ld0xpbmVVcmxGb3JtVmFsdWUoKSx0aGlzLmluaXRVcmxGb3JtU2VsZWN0aW9ucygpfSxpbml0U2hvd0Zvcm1UYWJsZTpmdW5jdGlvbigpeyJ4LXd3dy1mb3JtLXVybGVuY29kZWQiPT10aGlzLnJlcXVlc3RDb250ZW50VHlwZT8odGhpcy51cmxGb3JtRmxhZz0hMCx0aGlzLmZvcm1GbGFnPSExLHRoaXMucmF3RmxhZz0hMSx0aGlzLnJhd1R5cGVGbGFnPSExKToiZm9ybS1kYXRhIj09dGhpcy5yZXF1ZXN0Q29udGVudFR5cGU/KHRoaXMuZm9ybUZsYWc9ITAsdGhpcy51cmxGb3JtRmxhZz0hMSx0aGlzLnJhd0ZsYWc9ITEsdGhpcy5yYXdUeXBlRmxhZz0hMSk6InJhdyI9PXRoaXMucmVxdWVzdENvbnRlbnRUeXBlJiYodGhpcy5yYXdGbGFnPSEwLHRoaXMucmF3VHlwZUZsYWc9ITAsdGhpcy51cmxGb3JtRmxhZz0hMSx0aGlzLmZvcm1GbGFnPSExKSx0aGlzLnRvZ2dsZUJlYXV0aWZ5QnV0dG9uU3RhdHVzKCl9LGluaXRTZWxlY3Rpb25IZWFkZXJzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7bi5hLnN0ck5vdEJsYW5rKGUpPzA9PXRoaXMucm93U2VsZWN0aW9uLnNlbGVjdGVkUm93S2V5cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT1lfSkpLmxlbmd0aCYmdGhpcy5yb3dTZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzLnB1c2goZSk6dGhpcy5oZWFkZXJEYXRhLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucmVxdWlyZSYmdC5yb3dTZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzLnB1c2goZS5pZCl9KSl9LGhlYWRlckNvbnRlbnRFbnVtQ2huYWdlOmZ1bmN0aW9uKGUsdCl7dmFyIGE9dC5jb250ZXh0LiRhdHRyc1siZGF0YS1rZXkiXTt0aGlzLmhlYWRlckNvbnRlbnRDaG5hZ2VVcGRhdGUoZSxhKX0saGVhZGVyQ29va2llVmFsdWU6ZnVuY3Rpb24oZSl7ImNvb2tpZSI9PWUubmFtZS50b0xvd2VyQ2FzZSgpJiYoZG9jdW1lbnQuY29va2llPWUuY29udGVudCl9LGhlYWRlckNvbnRlbnRDaG5hZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQudmFsdWUsYT1lLnRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEta2V5Iik7dGhpcy5oZWFkZXJDb250ZW50Q2huYWdlVXBkYXRlKHQsYSl9LGhlYWRlckNvbnRlbnRDaG5hZ2VVcGRhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgYT10aGlzLHI9dGhpcy5oZWFkZXJEYXRhLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PXR9KSlbMF07ci5uZXc/KHRoaXMuaGVhZGVyRGF0YS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmlkPT1yLmlkJiYodC5jb250ZW50PWUsdC5uZXc9ITEsYS5oZWFkZXJDb29raWVWYWx1ZSh0KSl9KSksdGhpcy5hZGROZXdMaW5lSGVhZGVyKCkpOnRoaXMuaGVhZGVyRGF0YS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmlkPT1yLmlkJiYodC5jb250ZW50PWUsdC5uZXc9ITEsYS5oZWFkZXJDb29raWVWYWx1ZSh0KSl9KSksdGhpcy5pbml0U2VsZWN0aW9uSGVhZGVycyhyLmlkKSx0aGlzLmhlYWRlclJlc2V0Q2FsYygpfSxoZWFkZXJOYW1lRmlsdGVyT3B0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuY29tcG9uZW50T3B0aW9ucy5jaGlsZHJlblswXS50ZXh0LnRvVXBwZXJDYXNlKCkuaW5kZXhPZihlLnRvVXBwZXJDYXNlKCkpPj0wfSxoZWFkZXJTZWxlY3Q6ZnVuY3Rpb24oZSx0KXt0aGlzLmhlYWRlclNlbGVjdE5hbWU9ZTt2YXIgYT10LmNvbnRleHQuJGF0dHJzWyJkYXRhLWlkIl07dGhpcy5oZWFkZXJEYXRhLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuaWQ9PWEmJih0Lm5hbWU9ZSx0Lm5ldz0hMSl9KSl9LGhlYWRlclNlYXJjaDpmdW5jdGlvbihlKXt0aGlzLmhlYWRlclNlbGVjdE5hbWU9ZX0saGVhZGVyTmFtZUNoYW5nZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2UubmV3Pyh0aGlzLmhlYWRlckRhdGEuZm9yRWFjaCgoZnVuY3Rpb24oYSl7YS5pZD09ZS5pZCYmKGEubmFtZT10LmhlYWRlclNlbGVjdE5hbWUsYS5uZXc9ITEpfSkpLHRoaXMuYWRkTmV3TGluZUhlYWRlcigpKTp0aGlzLmhlYWRlckRhdGEuZm9yRWFjaCgoZnVuY3Rpb24oYSl7YS5pZD09ZS5pZCYmKGEubmFtZT10LmhlYWRlclNlbGVjdE5hbWUsYS5uZXc9ITEpfSkpLHRoaXMuaW5pdFNlbGVjdGlvbkhlYWRlcnMoZS5pZCksdGhpcy5oZWFkZXJSZXNldENhbGMoKX0saGVhZGVyRGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3RoaXMuaGVhZGVyRGF0YS5mb3JFYWNoKChmdW5jdGlvbihhKXthLmlkIT1lLmlkJiZ0LnB1c2goYSl9KSksdGhpcy5oZWFkZXJEYXRhPXQsdGhpcy5oZWFkZXJSZXNldENhbGMoKX0saGVhZGVyUmVzZXRDYWxjOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oZWFkZXJEYXRhLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIDA9PWUubmV3fSkpO2UubGVuZ3RoPjA/KHRoaXMuaGVhZGVyQ291bnRGbGFnPSEwLHRoaXMuaGVhZGVyQ291bnQ9ZS5sZW5ndGgpOih0aGlzLmhlYWRlckNvdW50RmxhZz0hMSx0aGlzLmhlYWRlckNvdW50PTApfSxyZXF1ZXN0Q29udGVudFR5cGVDaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5yZXF1ZXN0Q29udGVudFR5cGU9ZS50YXJnZXQudmFsdWUsdGhpcy5pbml0U2hvd0Zvcm1UYWJsZSgpfSxmb3JtRGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3RoaXMuZm9ybURhdGEuZm9yRWFjaCgoZnVuY3Rpb24oYSl7YS5pZCE9ZS5pZCYmdC5wdXNoKGEpfSkpLHRoaXMuZm9ybURhdGE9dH0sZm9ybUZpbGVVcGxvYWRDbGljazpmdW5jdGlvbihlKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZSIrZS5pZCkuY2xpY2soKX0sZm9ybU5hbWVDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQudmFsdWUsYT1lLnRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEta2V5Iikscj10aGlzLmZvcm1EYXRhLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PWF9KSlbMF07ci5uZXc/KHRoaXMuZm9ybURhdGEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5pZD09ci5pZCYmKGUubmFtZT10LGUubmV3PSExKX0pKSx0aGlzLmFkZE5ld0xpbmVGb3JtVmFsdWUoKSk6dGhpcy5mb3JtRGF0YS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmlkPT1yLmlkJiYoZS5uYW1lPXQsZS5uZXc9ITEpfSkpLHRoaXMuaW5pdEZvcm1TZWxlY3Rpb25zKHIuaWQpfSxmb3JtVHlwZUNoYW5nZTpmdW5jdGlvbihlLHQpe3ZhciBhPWUuc3BsaXQoIi0iKSxyPWFbMF0sbj1hWzFdO3RoaXMuZm9ybURhdGEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5pZD09biYmKGUuY29udGVudD0iIixlLnR5cGU9cil9KSl9LGZvcm1GaWxlQ2hhbmdlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnRhcmdldC5maWxlcyxhPVtdLHI9MDtyPHQubGVuZ3RoO3IrKylhLnB1c2godFtyXS5uYW1lKTt2YXIgbj1hLmpvaW4oIiwiKSxpPWUudGFyZ2V0LG89aS5nZXRBdHRyaWJ1dGUoImRhdGEta2V5Iikscz10aGlzLmZvcm1EYXRhLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PW99KSlbMF07cy5uZXc/KHRoaXMuZm9ybURhdGEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5pZD09cy5pZCYmKGUuY29udGVudD1uLGUudGFyZ2V0PWksZS5uZXc9ITEpfSkpLHRoaXMuYWRkTmV3TGluZUZvcm1WYWx1ZSgpKTp0aGlzLmZvcm1EYXRhLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaWQ9PXMuaWQmJihlLmNvbnRlbnQ9bixlLnRhcmdldD1pLGUubmV3PSExKX0pKSx0aGlzLmluaXRGb3JtU2VsZWN0aW9ucyhzLmlkKX0sZm9ybUNvbnRlbnRVcGRhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgYT10aGlzLmZvcm1EYXRhLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PXR9KSlbMF07YS5uZXc/KHRoaXMuZm9ybURhdGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5pZD09YS5pZCYmKHQuY29udGVudD1lLHQubmV3PSExKX0pKSx0aGlzLmFkZE5ld0xpbmVGb3JtVmFsdWUoKSk6dGhpcy5mb3JtRGF0YS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmlkPT1hLmlkJiYodC5jb250ZW50PWUsdC5uZXc9ITEpfSkpLHRoaXMuaW5pdEZvcm1TZWxlY3Rpb25zKGEuaWQpfSxmb3JtQ29udGVudEVudW1DaGFuZ2U6ZnVuY3Rpb24oZSx0KXt2YXIgYT10LmNvbnRleHQuJGF0dHJzWyJkYXRhLWtleSJdO3RoaXMuZm9ybUNvbnRlbnRVcGRhdGUoZSxhKX0sZm9ybUNvbnRlbnRDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQudmFsdWUsYT1lLnRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEta2V5Iik7dGhpcy5mb3JtQ29udGVudFVwZGF0ZSh0LGEpfSxyYXdGb3JtRGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3RoaXMucmF3Rm9ybURhdGEuZm9yRWFjaCgoZnVuY3Rpb24oYSl7YS5pZCE9ZS5pZCYmdC5wdXNoKGEpfSkpLHRoaXMucmF3Rm9ybURhdGE9dH0sdXJsRm9ybURlbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD1bXTt0aGlzLnVybEZvcm1EYXRhLmZvckVhY2goKGZ1bmN0aW9uKGEpe2EuaWQhPWUuaWQmJnQucHVzaChhKX0pKSx0aGlzLnVybEZvcm1EYXRhPXR9LHJhd0Zvcm1OYW1lQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LnZhbHVlLGE9ZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJkYXRhLWtleSIpLHI9dGhpcy5yYXdGb3JtRGF0YS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT1hfSkpWzBdO3IubmV3Pyh0aGlzLnJhd0Zvcm1EYXRhLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaWQ9PXIuaWQmJihlLm5hbWU9dCxlLm5ldz0hMSl9KSksdGhpcy5hZGROZXdMaW5lUmF3Rm9ybVZhbHVlKCkpOnRoaXMucmF3Rm9ybURhdGEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5pZD09ci5pZCYmKGUubmFtZT10LGUubmV3PSExKX0pKSx0aGlzLmluaXRSYXdGb3JtU2VsZWN0aW9ucyhyLmlkKX0sdXJsRm9ybU5hbWVDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQudmFsdWUsYT1lLnRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEta2V5Iikscj10aGlzLnVybEZvcm1EYXRhLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PWF9KSlbMF07ci5uZXc/KHRoaXMudXJsRm9ybURhdGEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5pZD09ci5pZCYmKGUubmFtZT10LGUubmV3PSExKX0pKSx0aGlzLmFkZE5ld0xpbmVVcmxGb3JtVmFsdWUoKSk6dGhpcy51cmxGb3JtRGF0YS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmlkPT1yLmlkJiYoZS5uYW1lPXQsZS5uZXc9ITEpfSkpLHRoaXMuaW5pdFVybEZvcm1TZWxlY3Rpb25zKHIuaWQpfSxyYXdGb3JtQ29udGVudFVwZGF0ZTpmdW5jdGlvbihlLHQpe3ZhciBhPXRoaXMucmF3Rm9ybURhdGEuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pZD09dH0pKVswXTthLm5ldz8odGhpcy5yYXdGb3JtRGF0YS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmlkPT1hLmlkJiYodC5jb250ZW50PWUsdC5uZXc9ITEpfSkpLHRoaXMuYWRkTmV3TGluZVJhd0Zvcm1WYWx1ZSgpKTp0aGlzLnJhd0Zvcm1EYXRhLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuaWQ9PWEuaWQmJih0LmNvbnRlbnQ9ZSx0Lm5ldz0hMSl9KSksdGhpcy5pbml0UmF3Rm9ybVNlbGVjdGlvbnMoYS5pZCl9LHJhd0Zvcm1Db250ZW50RW51bUNoYW5nZTpmdW5jdGlvbihlLHQpe3ZhciBhPXQuY29udGV4dC4kYXR0cnNbImRhdGEta2V5Il07dGhpcy5yYXdGb3JtQ29udGVudFVwZGF0ZShlLGEpfSxyYXdGb3JtQ29udGVudENoYW5nZTpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldC52YWx1ZSxhPWUudGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS1rZXkiKTt0aGlzLnJhd0Zvcm1Db250ZW50VXBkYXRlKHQsYSl9LHVybEZvcm1Db250ZW50VXBkYXRlOmZ1bmN0aW9uKGUsdCl7dmFyIGE9dGhpcy51cmxGb3JtRGF0YS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT10fSkpWzBdO2EubmV3Pyh0aGlzLnVybEZvcm1EYXRhLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuaWQ9PWEuaWQmJih0LmNvbnRlbnQ9ZSx0Lm5ldz0hMSl9KSksdGhpcy5hZGROZXdMaW5lVXJsRm9ybVZhbHVlKCkpOnRoaXMudXJsRm9ybURhdGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5pZD09YS5pZCYmKHQuY29udGVudD1lLHQubmV3PSExKX0pKSx0aGlzLmluaXRVcmxGb3JtU2VsZWN0aW9ucyhhLmlkKX0sdXJsRm9ybUNvbnRlbnRFbnVtQ2hhbmdlOmZ1bmN0aW9uKGUsdCl7aWYobi5hLmNoZWNrVW5kZWZpbmVkKHQpKXt2YXIgYTthPUFycmF5LmlzQXJyYXkodCk/dFswXS5jb250ZXh0LiRhdHRyc1siZGF0YS1rZXkiXTp0LmNvbnRleHQuJGF0dHJzWyJkYXRhLWtleSJdLHRoaXMudXJsRm9ybUNvbnRlbnRVcGRhdGUoZSxhKX19LHVybEZvcm1Db250ZW50Q2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LnZhbHVlLGE9ZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJkYXRhLWtleSIpO3RoaXMudXJsRm9ybUNvbnRlbnRVcGRhdGUodCxhKX0scmF3TWVudUNsaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaXRlbSxhPWUua2V5O2Uua2V5UGF0aCx0aGlzLnJhd01vZGU9dC4kZWwuZ2V0QXR0cmlidXRlKCJkYXRhLW1vZGUiKSx0aGlzLnJhd1JlcXVlc3RUeXBlPXQuJGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1tb2RlLXR5cGUiKSx0aGlzLnJhd0RlZmF1bHRUZXh0PWEsdGhpcy50b2dnbGVCZWF1dGlmeUJ1dHRvblN0YXR1cygpfSxiZWF1dGlmeUpzb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJhd1RleHQ7aWYobi5hLnN0ck5vdEJsYW5rKGUpKXRyeXt2YXIgdD1uLmEuanNvbjVzdHJpbmdpZnkobi5hLmpzb241cGFyc2UoZSkpO3RoaXMucmF3VGV4dD10fWNhdGNoKGUpe319LHRvZ2dsZUJlYXV0aWZ5QnV0dG9uU3RhdHVzOmZ1bmN0aW9uKCl7dmFyIGU9ITE7dGhpcy5yYXdGbGFnJiYianNvbiI9PXRoaXMucmF3TW9kZSYmKGU9ITApLHRoaXMuZm9ybWF0RmxhZz1lfSxyYXdTY3JpcHRDaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5yYXdTY3JpcHQ9ZX0scmF3Q2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMucmF3VGV4dD1lfSxzZW5kUmVzdGZ1bEFwaTpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIHQ9dGhpcy52YWxpZGF0ZUNvbW1vbkhlYWRlcnMoKTt0LnZhbGlkYXRlP3RoaXMucmF3RmxhZz90aGlzLmRlYnVnU2VuZFJhd1JlcXVlc3QoKTp0aGlzLmZvcm1GbGFnP3RoaXMuZGVidWdTZW5kRm9ybVJlcXVlc3QoKTp0aGlzLnVybEZvcm1GbGFnJiZ0aGlzLmRlYnVnU2VuZFVybEZvcm1SZXF1ZXN0KCk6dGhpcy4kbWVzc2FnZS5pbmZvKHQubWVzc2FnZSl9LGNhbGxDaGlsZEVkaXRvclNob3c6ZnVuY3Rpb24oKXt0aGlzLmJpZ0ZsYWd8fHRoaXMuJHJlZnMuY2hpbGREZWJ1Z1Jlc3BvbnNlLnNob3dFZGl0b3JGaWVsZERlc2NyaXB0aW9uKCl9LGRlYnVnSGVhZGVyczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD17fSxhPXRoaXMuYXBpO2lmKG51bGwhPWEucHJvZHVjZXMmJm51bGwhPWEucHJvZHVjZXMmJmEucHJvZHVjZXMubGVuZ3RoPjApe3ZhciByPWEucHJvZHVjZXNbMF07dC5BY2NlcHQ9cn1yZXR1cm4gdGhpcy5oZWFkZXJEYXRhLmZvckVhY2goKGZ1bmN0aW9uKGEpe2EubmV3fHxlLnJvd1NlbGVjdGlvbi5zZWxlY3RlZFJvd0tleXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZT09YS5pZH0pKS5sZW5ndGg+MCYmbi5hLnN0ck5vdEJsYW5rKGEubmFtZSkmJiJjb29raWUiIT1hLm5hbWUudG9Mb3dlckNhc2UoKSYmKG4uYS5pc0NoaW5lc2UoYS5jb250ZW50KT90W2EubmFtZV09ZW5jb2RlVVJJQ29tcG9uZW50KGEuY29udGVudCk6dFthLm5hbWVdPW4uYS50b1N0cmluZyhhLmNvbnRlbnQsIiIpKX0pKSx0WyJSZXF1ZXN0LU9yaWdpb24iXT0iS25pZmU0aiIsbi5hLmNoZWNrVW5kZWZpbmVkKHRbIkNvbnRlbnQtVHlwZSJdKXx8KHRoaXMucmF3RmxhZz90WyJDb250ZW50LVR5cGUiXT10aGlzLnJhd1JlcXVlc3RUeXBlOnRoaXMudXJsRm9ybUZsYWc/dFsiQ29udGVudC1UeXBlIl09ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6dGhpcy5mb3JtRmxhZyYmKHRoaXMudmFsaWRhdGVGb3JtRGF0YUNvbnRhaW50c0ZpbGUoKT90WyJDb250ZW50LVR5cGUiXT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6dFsiQ29udGVudC1UeXBlIl09ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpKSxuLmEuY2hlY2tVbmRlZmluZWQodGhpcy5yb3V0ZUhlYWRlcikmJih0WyJrbmZpZTRqLWdhdGV3YXktcmVxdWVzdCJdPXRoaXMucm91dGVIZWFkZXIpLHRoaXMuc3dhZ2dlckluc3RhbmNlLmRlc2t0b3AmJih0WyJrbmlmZTRqLWdhdGV3YXktY29kZSJdPXRoaXMuc3dhZ2dlckluc3RhbmNlLmRlc2t0b3BDb2RlKSx0fSxkZWJ1Z1Jhd0Zvcm1QYXJhbXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9e307cmV0dXJuIHRoaXMucmF3Rm9ybURhdGEuZm9yRWFjaCgoZnVuY3Rpb24oYSl7YS5uZXd8fGUucm93UmF3Rm9ybVNlbGVjdGlvbi5zZWxlY3RlZFJvd0tleXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZT09YS5pZH0pKS5sZW5ndGg+MCYmbi5hLnN0ck5vdEJsYW5rKGEubmFtZSkmJih0W2EubmFtZV09YS5jb250ZW50KX0pKSx0fSxkZWJ1Z1VybEZvcm1QYXJhbXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9e307cmV0dXJuIHRoaXMudXJsRm9ybURhdGEuZm9yRWFjaCgoZnVuY3Rpb24oYSl7YS5uZXd8fGUucm93VXJsRm9ybVNlbGVjdGlvbi5zZWxlY3RlZFJvd0tleXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZT09YS5pZH0pKS5sZW5ndGg+MCYmbi5hLnN0ck5vdEJsYW5rKGEubmFtZSkmJih0W2EubmFtZV09YS5jb250ZW50KX0pKSx0fSxkZWJ1Z0Zvcm1EYXRhUGFyYW1zOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsYT17dXJsOiIiLHBhcmFtczp7fX0scj10aGlzLmRlYnVnVXJsO2lmKGUpe3ZhciBpPW5ldyBGb3JtRGF0YTt0aGlzLmZvcm1EYXRhLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKCFlLm5ldyYmKHQucm93Rm9ybVNlbGVjdGlvbi5zZWxlY3RlZFJvd0tleXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdD09ZS5pZH0pKS5sZW5ndGg+MCYmbi5hLnN0ck5vdEJsYW5rKGUubmFtZSkpKWlmKCJ0ZXh0Ij09ZS50eXBlKWlmKHQuZGVidWdQYXRoRmxhZylpZigtMT09dC5kZWJ1Z1BhdGhQYXJhbXMuaW5kZXhPZihlLm5hbWUpKW4uYS5zdHJOb3RCbGFuayhlLmNvbnRlbnQpJiZpLmFwcGVuZChlLm5hbWUsZS5jb250ZW50KTtlbHNle3ZhciBhPSJ7IitlLm5hbWUrIn0iO3I9ci5yZXBsYWNlKGEsZS5jb250ZW50KX1lbHNlIG4uYS5zdHJOb3RCbGFuayhlLmNvbnRlbnQpJiZpLmFwcGVuZChlLm5hbWUsZS5jb250ZW50KTtlbHNlIGlmKG4uYS5jaGVja1VuZGVmaW5lZChlLnRhcmdldCkpe3ZhciBvPWUudGFyZ2V0LmZpbGVzO2lmKG8ubGVuZ3RoPjApZm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspaS5hcHBlbmQoZS5uYW1lLG9bc10pfX0pKSxhLnBhcmFtcz1pfWVsc2V7dmFyIG89e307dGhpcy5mb3JtRGF0YS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZighZS5uZXcmJih0LnJvd0Zvcm1TZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PWUuaWR9KSkubGVuZ3RoPjAmJm4uYS5zdHJOb3RCbGFuayhlLm5hbWUpKSlpZih0LmRlYnVnUGF0aEZsYWcpaWYoLTE9PXQuZGVidWdQYXRoUGFyYW1zLmluZGV4T2YoZS5uYW1lKSlvW2UubmFtZV09ZS5jb250ZW50O2Vsc2V7dmFyIGE9InsiK2UubmFtZSsifSI7cj1yLnJlcGxhY2UoYSxlLmNvbnRlbnQpfWVsc2Ugb1tlLm5hbWVdPWUuY29udGVudH0pKSxhLnBhcmFtcz1vfXJldHVybiBhLnVybD1yLGF9LGRlYnVnU3RyZWFtRmxhZzpmdW5jdGlvbigpe3ZhciBlPSExLHQ9dGhpcy5hcGk7bnVsbCE9dC5wcm9kdWNlcyYmbnVsbCE9dC5wcm9kdWNlcyYmdC5wcm9kdWNlcy5sZW5ndGg+MCYmKHQucHJvZHVjZXNbMF0sZT1uLmEuYmluYXJ5Q29udGVudFR5cGUodC5wcm9kdWNlcyxudWxsKS5iaW5hcnkpO3JldHVybiBlfSx2YWxpZGF0ZUNvbW1vbkhlYWRlcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9ITAsdD0iIixhPTA7YTx0aGlzLmhlYWRlckRhdGEubGVuZ3RoO2ErKyl7dmFyIHI9dGhpcy5oZWFkZXJEYXRhW2FdO2lmKCFyLm5ldylpZih0aGlzLnJvd1NlbGVjdGlvbi5zZWxlY3RlZFJvd0tleXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZT09ci5pZH0pKS5sZW5ndGg+MCYmbi5hLnN0ck5vdEJsYW5rKHIubmFtZSkmJnIucmVxdWlyZSYmIW4uYS5zdHJOb3RCbGFuayhyLmNvbnRlbnQpKXtlPSExLHQ9dGhpcy5pMThuLnZhbGlkYXRlLmhlYWRlcityLm5hbWUrdGhpcy5pMThuLnZhbGlkYXRlLm5vdEVtcHR5O2JyZWFrfX1yZXR1cm57dmFsaWRhdGU6ZSxtZXNzYWdlOnR9fSx2YWxpZGF0ZUZvcm1EYXRhOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPSEwLHQ9IiIsYT0wO2E8dGhpcy5mb3JtRGF0YS5sZW5ndGg7YSsrKXt2YXIgcj10aGlzLmZvcm1EYXRhW2FdO2lmKCFyLm5ldylpZih0aGlzLnJvd0Zvcm1TZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PXIuaWR9KSkubGVuZ3RoPjAmJm4uYS5zdHJOb3RCbGFuayhyLm5hbWUpJiZyLnJlcXVpcmUpaWYoInRleHQiPT1yLnR5cGUpe2lmKCFuLmEuc3RyTm90Qmxhbmsoci5jb250ZW50KSl7ZT0hMSx0PXIubmFtZSt0aGlzLmkxOG4udmFsaWRhdGUubm90RW1wdHk7YnJlYWt9fWVsc2UgaWYobnVsbD09ci50YXJnZXQpe2U9ITEsdD1yLm5hbWUrdGhpcy5pMThuLnZhbGlkYXRlLmZpbGVOb3RFbXB0eTticmVha319cmV0dXJue3ZhbGlkYXRlOmUsbWVzc2FnZTp0fX0sdmFsaWRhdGVSYXdGb3JtOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPSEwLHQ9IiIsYT0wO2E8dGhpcy5yYXdGb3JtRGF0YS5sZW5ndGg7YSsrKXt2YXIgcj10aGlzLnJhd0Zvcm1EYXRhW2FdO2lmKCFyLm5ldylpZih0aGlzLnJvd1Jhd0Zvcm1TZWxlY3Rpb24uc2VsZWN0ZWRSb3dLZXlzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PXIuaWR9KSkubGVuZ3RoPjAmJm4uYS5zdHJOb3RCbGFuayhyLm5hbWUpJiZyLnJlcXVpcmUmJiFuLmEuc3RyTm90Qmxhbmsoci5jb250ZW50KSl7ZT0hMSx0PXIubmFtZSt0aGlzLmkxOG4udmFsaWRhdGUubm90RW1wdHk7YnJlYWt9fXJldHVybnt2YWxpZGF0ZTplLG1lc3NhZ2U6dH19LHZhbGlkYXRlVXJsRm9ybTpmdW5jdGlvbigpe2Zvcih2YXIgZT0hMCx0PSIiLGE9MDthPHRoaXMudXJsRm9ybURhdGEubGVuZ3RoO2ErKyl7dmFyIHI9dGhpcy51cmxGb3JtRGF0YVthXTtpZighci5uZXcpaWYodGhpcy5yb3dVcmxGb3JtU2VsZWN0aW9uLnNlbGVjdGVkUm93S2V5cy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1yLmlkfSkpLmxlbmd0aD4wJiZuLmEuc3RyTm90Qmxhbmsoci5uYW1lKSYmci5yZXF1aXJlJiYhbi5hLnN0ck5vdEJsYW5rKHIuY29udGVudCkpe2U9ITEsdD1yLm5hbWUrdGhpcy5pMThuLnZhbGlkYXRlLm5vdEVtcHR5O2JyZWFrfX1yZXR1cm57dmFsaWRhdGU6ZSxtZXNzYWdlOnR9fSx2YWxpZGF0ZUZvcm1EYXRhQ29udGFpbnRzRmlsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD0hMTtyZXR1cm4gdGhpcy5mb3JtRGF0YS5mb3JFYWNoKChmdW5jdGlvbihhKXthLm5ld3x8ZS5yb3dGb3JtU2VsZWN0aW9uLnNlbGVjdGVkUm93S2V5cy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1hLmlkfSkpLmxlbmd0aD4wJiYiZmlsZSI9PWEudHlwZSYmKHQ9ITApfSkpLHR9LGNoZWNrVXJsUGFyYW1zOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5kZXhPZigiPyIpLGE9e3Jlc3VsdDohMSxwYXJhbXM6e30sdXJsOmV9O2lmKHQ+LTEpe3ZhciByPWUuc3Vic3RyaW5nKHQrMSk7aWYoYS51cmw9ZS5zdWJzdHJpbmcoMCx0KSxhLnJlc3VsdD0hMCxuLmEuc3RyTm90Qmxhbmsocikpci5zcGxpdCgiJiIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKG4uYS5zdHJOb3RCbGFuayhlKSl7dmFyIHQ9ZS5zcGxpdCgiPSIpOzI9PXQubGVuZ3RoJiYoYS5wYXJhbXNbdFswXV09dFsxXSl9fSkpfXJldHVybiBhfSxkZWJ1Z1NlbmRIYXNDb29raWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7aWYobi5hLmNoZWNrVW5kZWZpbmVkKGUpKXt2YXIgYT1PYmplY3Qua2V5cyhlKTtpZihuLmEuYXJyTm90RW1wdHkoYSkpaWYoYS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiJjb29raWUiPT09ZS50b0xvY2FsZUxvd2VyQ2FzZSgpfSkpLmxlbmd0aD4wKXt2YXIgcj1lLkNvb2tpZTtuLmEuc3RyTm90QmxhbmsocikmJihkb2N1bWVudC5jb29raWU9cix0PSEwKX19cmV0dXJuIHR9LGFwcGx5UmVxdWVzdFBhcmFtczpmdW5jdGlvbihlLHQpe3ZhciBhPW51bGw7cmV0dXJuWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmNsdWRlcyh0LnRvTG93ZXJDYXNlKCkpP24uYS5jaGVja1VuZGVmaW5lZChlKSYmKGE9ZSk6YT1lLHtkYXRhOm51bGwscGFyYW1zOmF9fSxkZWJ1Z0NoZWNrVXJsOmZ1bmN0aW9uKGUpe3ZhciB0PWU7dHJ5e2lmKG5ldyBSZWdFeHAoIi4qPyh7Lio/fSkkIiwiaWciKS50ZXN0KGUpKXt2YXIgYT1SZWdFeHAuJDE7dD1lLnJlcGxhY2UoYSwiIil9fWNhdGNoKGUpe3dpbmRvdy5jb25zb2xlfXJldHVybiB0fSxkZWJ1Z1NlbmRVcmxGb3JtUmVxdWVzdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnZhbGlkYXRlVXJsRm9ybSgpO2lmKHQudmFsaWRhdGUpe3RoaXMuZGVidWdMb2FkaW5nPSEwLHRoaXMuZGVidWdTZW5kPSEwO3ZhciBhPXRoaXMuZGVidWdIZWFkZXJzKCksaT10aGlzLmRlYnVnVXJsLG89dGhpcy5kZWJ1Z01ldGhvZFR5cGUudG9Mb3dlckNhc2UoKSxzPXRoaXMuZGVidWdVcmxGb3JtUGFyYW1zKCk7aWYodGhpcy5kZWJ1Z1BhdGhGbGFnKXt2YXIgbD17fTtmb3IodmFyIHUgaW4gdGhpcy5kZWJ1Z1BhdGhQYXJhbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9InsiK2UrIn0iLGE9bi5hLmdldFZhbHVlKHMsZSwiIiwhMCk7aT1pLnJlcGxhY2UodCxhKX0pKSxzKS0xPT10aGlzLmRlYnVnUGF0aFBhcmFtcy5pbmRleE9mKHUpJiYobFt1XT1zW3VdKTtzPWx9dmFyIGQ9dGhpcy5jaGVja1VybFBhcmFtcyhpKTtkLnJlc3VsdCYmKGk9ZC51cmwscz1PYmplY3QuYXNzaWduKHMsZC5wYXJhbXMpKTt2YXIgYz0iIjt0aGlzLmVuYWJsZUhvc3QmJihjPXRoaXMuZW5hYmxlSG9zdFRleHQpO3ZhciBtPXRoaXMuYXBwbHlSZXF1ZXN0UGFyYW1zKHMsbykscD17YmFzZVVSTDpjLHVybDp0aGlzLmRlYnVnQ2hlY2tVcmwoaSksbWV0aG9kOm8saGVhZGVyczphLHBhcmFtczptLnBhcmFtcyx0aW1lb3V0OjAsd2l0aENyZWRlbnRpYWxzOnRoaXMuZGVidWdTZW5kSGFzQ29va2llKGEpLGRhdGE6bS5kYXRhfTt0aGlzLm9hczI/dGhpcy5kZWJ1Z1N0cmVhbUZsYWcoKSYmKHA9T2JqZWN0KHIuYSkoT2JqZWN0KHIuYSkoe30scCkse30se3Jlc3BvbnNlVHlwZToiYmxvYiJ9KSk6cD1PYmplY3Qoci5hKShPYmplY3Qoci5hKSh7fSxwKSx7fSx7cmVzcG9uc2VUeXBlOiJibG9iIn0pO3ZhciBmPWguYS5jcmVhdGUoKTtmLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS51cmw7aWYoImdldCI9PT1lLm1ldGhvZCYmZS5wYXJhbXMpe3QrPSI/Ijtmb3IodmFyIGE9MCxyPU9iamVjdC5rZXlzKGUucGFyYW1zKTthPHIubGVuZ3RoO2ErKyl7dmFyIGk9clthXTtuLmEuc3RyTm90QmxhbmsoZS5wYXJhbXNbaV0pJiYodCs9IiIuY29uY2F0KGVuY29kZVVSSUNvbXBvbmVudChpKSwiPSIpLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQoZS5wYXJhbXNbaV0pLCImIikpfXQ9dC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0xKSxlLnBhcmFtcz17fX1yZXR1cm4gZS51cmw9dCxlfSkpO3ZhciBnPW5ldyBEYXRlO2YucmVxdWVzdChwKS50aGVuKChmdW5jdGlvbih0KXtlLmRlYnVnTG9hZGluZz0hMSxlLmhhbmRsZURlYnVnU3VjY2VzcyhnLG5ldyBEYXRlLHQpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtlLmRlYnVnTG9hZGluZz0hMSx0LnJlc3BvbnNlP2UuaGFuZGxlRGVidWdFcnJvcihnLG5ldyBEYXRlLHQucmVzcG9uc2UpOmUuJG1lc3NhZ2UuZXJyb3IodC5tZXNzYWdlKX0pKX1lbHNlIHRoaXMuJG1lc3NhZ2UuaW5mbyh0Lm1lc3NhZ2UpfSxkZWJ1Z1NlbmRGb3JtUmVxdWVzdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnZhbGlkYXRlRm9ybURhdGEoKTtpZih0LnZhbGlkYXRlKXt0aGlzLmRlYnVnTG9hZGluZz0hMCx0aGlzLmRlYnVnU2VuZD0hMDt2YXIgYT10aGlzLmRlYnVnSGVhZGVycygpLG49dGhpcy5kZWJ1Z1VybCxpPXRoaXMuZGVidWdNZXRob2RUeXBlLnRvTG93ZXJDYXNlKCksbz10aGlzLnZhbGlkYXRlRm9ybURhdGFDb250YWludHNGaWxlKCkscz10aGlzLmRlYnVnRm9ybURhdGFQYXJhbXMobyk7bj1zLnVybDt2YXIgbD1zLnBhcmFtcyx1PSIiO3RoaXMuZW5hYmxlSG9zdCYmKHU9dGhpcy5lbmFibGVIb3N0VGV4dCk7dmFyIGQ9e2Jhc2VVUkw6dSx1cmw6dGhpcy5kZWJ1Z0NoZWNrVXJsKG4pLG1ldGhvZDppLGhlYWRlcnM6YSx0aW1lb3V0OjAsd2l0aENyZWRlbnRpYWxzOnRoaXMuZGVidWdTZW5kSGFzQ29va2llKGEpLGRhdGE6bnVsbH07aWYobylkPU9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LGQpLHt9LHtkYXRhOmx9KTtlbHNle3ZhciBjPXRoaXMuY2hlY2tVcmxQYXJhbXMobik7Yy5yZXN1bHQmJihuPWMudXJsLGw9T2JqZWN0LmFzc2lnbihsLGMucGFyYW1zKSksZD1PYmplY3Qoci5hKShPYmplY3Qoci5hKSh7fSxkKSx7fSx7cGFyYW1zOmx9KX10aGlzLmRlYnVnU3RyZWFtRmxhZygpJiYoZD1PYmplY3Qoci5hKShPYmplY3Qoci5hKSh7fSxkKSx7fSx7cmVzcG9uc2VUeXBlOiJibG9iIn0pKTt2YXIgbT1oLmEuY3JlYXRlKCkscD1uZXcgRGF0ZTttLnJlcXVlc3QoZCkudGhlbigoZnVuY3Rpb24odCl7ZS5kZWJ1Z0xvYWRpbmc9ITEsZS5oYW5kbGVEZWJ1Z1N1Y2Nlc3MocCxuZXcgRGF0ZSx0KX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7ZS5kZWJ1Z0xvYWRpbmc9ITEsdC5yZXNwb25zZT9lLmhhbmRsZURlYnVnRXJyb3IocCxuZXcgRGF0ZSx0LnJlc3BvbnNlKTplLiRtZXNzYWdlLmVycm9yKHQubWVzc2FnZSl9KSl9ZWxzZSB0aGlzLiRtZXNzYWdlLmluZm8odC5tZXNzYWdlKX0sZGVidWdTZW5kUmF3UmVxdWVzdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnZhbGlkYXRlUmF3Rm9ybSgpO2lmKHQudmFsaWRhdGUpe3RoaXMuZGVidWdMb2FkaW5nPSEwLHRoaXMuZGVidWdTZW5kPSEwO3ZhciBhPXRoaXMuZGVidWdIZWFkZXJzKCksaT10aGlzLmRlYnVnVXJsLG89dGhpcy5kZWJ1Z01ldGhvZFR5cGUudG9Mb3dlckNhc2UoKSxzPXRoaXMucmF3VGV4dCxsPXRoaXMuZGVidWdSYXdGb3JtUGFyYW1zKCk7aWYodGhpcy5kZWJ1Z1BhdGhGbGFnKXt2YXIgdT17fTtmb3IodmFyIGQgaW4gdGhpcy5kZWJ1Z1BhdGhQYXJhbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9InsiK2UrIn0iLGE9bi5hLmdldFZhbHVlKGwsZSwiIiwhMCk7aT1pLnJlcGxhY2UodCxhKX0pKSxsKS0xPT10aGlzLmRlYnVnUGF0aFBhcmFtcy5pbmRleE9mKGQpJiYodVtkXT1sW2RdKTtsPXV9dmFyIGM9dGhpcy5jaGVja1VybFBhcmFtcyhpKTtjLnJlc3VsdCYmKGk9Yy51cmwsbD1PYmplY3QuYXNzaWduKGwsYy5wYXJhbXMpKTt2YXIgbT0iIjt0aGlzLmVuYWJsZUhvc3QmJihtPXRoaXMuZW5hYmxlSG9zdFRleHQpO3ZhciBwPXtiYXNlVVJMOm0sdXJsOnRoaXMuZGVidWdDaGVja1VybChpKSxtZXRob2Q6byxoZWFkZXJzOmEscGFyYW1zOmwsZGF0YTpzLHdpdGhDcmVkZW50aWFsczp0aGlzLmRlYnVnU2VuZEhhc0Nvb2tpZShhKSx0aW1lb3V0OjB9O3RoaXMuZGVidWdTdHJlYW1GbGFnKCkmJihwPU9iamVjdChyLmEpKE9iamVjdChyLmEpKHt9LHApLHt9LHtyZXNwb25zZVR5cGU6ImJsb2IifSkpO3ZhciBmPW5ldyBEYXRlO2guYS5jcmVhdGUoKS5yZXF1ZXN0KHApLnRoZW4oKGZ1bmN0aW9uKHQpe2UuZGVidWdMb2FkaW5nPSExLGUuaGFuZGxlRGVidWdTdWNjZXNzKGYsbmV3IERhdGUsdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe2UuZGVidWdMb2FkaW5nPSExLHQucmVzcG9uc2U/ZS5oYW5kbGVEZWJ1Z0Vycm9yKGYsbmV3IERhdGUsdC5yZXNwb25zZSk6ZS4kbWVzc2FnZS5lcnJvcih0Lm1lc3NhZ2UpfSkpfWVsc2UgdGhpcy4kbWVzc2FnZS5pbmZvKHQubWVzc2FnZSl9LGNhbGxBZnRlclNjcmlwdDpmdW5jdGlvbihlLHQpe3ZhciBhPXRoaXMuc3dhZ2dlckluc3RhbmNlLmlkLHI9dGhpcy5zd2FnZ2VySW5zdGFuY2UuYWxsR3JvdXBJZHMsbj1uZXcgZCh7YWxsZ3JvdXBpZHM6cixncm91cGlkOmEscmVzcG9uc2U6e2RhdGE6ZSxoZWFkZXJzOnR9fSk7dHJ5e25ldyBGdW5jdGlvbigia2UiLHRoaXMucmF3U2NyaXB0KShuKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe24uZ2xvYmFsLmFjdGlvbigpfSksMWUzKX1jYXRjaChlKXt9fSxyZXNvbHZlT0FTM1Jlc3BvbnNlOmZ1bmN0aW9uKGUpe3ZhciB0PWUucmVzcG9uc2VUZXh0OyJhcHBsaWNhdGlvbi9qc29uIj09PWUucmVzcG9uc2VUZXh0VHlwZSYmKHQ9bi5hLmpzb241cGFyc2UoZS5yZXNwb25zZVRleHQpKSx0aGlzLmNhbGxBZnRlclNjcmlwdCh0LGUuaGVhZGVycyl9LGV4ZWN1dGVBZnRlclNjcmlwdDpmdW5jdGlvbihlKXtuLmEuc3RyTm90QmxhbmsodGhpcy5yYXdTY3JpcHQpJiYodGhpcy5vYXMyP3RoaXMuY2FsbEFmdGVyU2NyaXB0KGUuZGF0YSxlLmhlYWRlcnMpOmkucmVzb2x2ZUJsb2JSZXNwb25zZShlLHRoaXMucmVzb2x2ZU9BUzNSZXNwb25zZSkpfSxoYW5kbGVEZWJ1Z1N1Y2Nlc3M6ZnVuY3Rpb24oZSx0LGEpe3RoaXMuYmlnRmxhZz0hMSx0aGlzLmJpZ0Jsb2JGbGFnPSExLHRoaXMuc2V0UmVzcG9uc2VCb2R5KGEpLHRoaXMuc2V0UmVzcG9uc2VIZWFkZXJzKGEuaGVhZGVycyksdGhpcy5zZXRSZXNwb25zZVJhdyhhKSx0aGlzLnNldFJlc3BvbnNlU3RhdHVzKGUsdCxhKSx0aGlzLnNldFJlc3BvbnNlQ3VybChhLnJlcXVlc3QpLHRoaXMuY2FsbENoaWxkRWRpdG9yU2hvdygpLHRoaXMuZXhlY3V0ZUFmdGVyU2NyaXB0KGEpLHRoaXMuc3RvcmVBcGlQYXJhbXMoKX0saGFuZGxlRGVidWdFcnJvcjpmdW5jdGlvbihlLHQsYSl7dGhpcy5iaWdGbGFnPSExLHRoaXMuYmlnQmxvYkZsYWc9ITEsdGhpcy5zZXRSZXNwb25zZUJvZHkoYSksdGhpcy5zZXRSZXNwb25zZUhlYWRlcnMoYS5oZWFkZXJzKSx0aGlzLnNldFJlc3BvbnNlUmF3KGEpLHRoaXMuc2V0UmVzcG9uc2VTdGF0dXMoZSx0LGEpLHRoaXMuc2V0UmVzcG9uc2VDdXJsKGEucmVxdWVzdCksdGhpcy5jYWxsQ2hpbGRFZGl0b3JTaG93KCksdGhpcy5zdG9yZUFwaVBhcmFtcygpfSxzdG9yZUFwaVBhcmFtczpmdW5jdGlvbigpe2lmKHRoaXMuZW5hYmxlUmVxdWVzdENhY2hlKXt2YXIgZT17aGVhZGVyRGF0YTpbXSxmb3JtRGF0YTpbXSx1cmxGb3JtRGF0YTpbXSxyYXdGb3JtRGF0YTpbXSxyYXdUZXh0OiIifSx0PXMuYS5kZWJ1Z0NhY2hlQXBpSWQrdGhpcy5hcGkuaWQ7ZS5oZWFkZXJEYXRhPXRoaXMuaGVhZGVyRGF0YS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiAwPT1lLm5ld30pKSxlLmZvcm1EYXRhPXRoaXMuZm9ybURhdGEuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gMD09ZS5uZXd9KSksZS51cmxGb3JtRGF0YT10aGlzLnVybEZvcm1EYXRhLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIDA9PWUubmV3fSkpLGUucmF3Rm9ybURhdGE9dGhpcy5yYXdGb3JtRGF0YS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiAwPT1lLm5ld30pKSxlLnJhd1RleHQ9dGhpcy5yYXdUZXh0LGUucmF3U2NyaXB0PXRoaXMucmF3U2NyaXB0LHRoaXMuJGxvY2FsU3RvcmUuc2V0SXRlbSh0LGUpfX0sc2V0UmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKG4uYS5jaGVja1VuZGVmaW5lZChlKSlmb3IodmFyIGEgaW4gZSl7dmFyIHI9e2lkOm4uYS5yYW5kb21NZDUoKSxuYW1lOmEsdmFsdWU6ZVthXX07dC5wdXNoKHIpfXRoaXMucmVzcG9uc2VIZWFkZXJzPXR9LHNldFJlc3BvbnNlUmF3OmZ1bmN0aW9uKGUpe2lmKG4uYS5jaGVja1VuZGVmaW5lZChlKSl7dmFyIHQ9ZS5yZXF1ZXN0O2lmKGUuaGVhZGVycyxuLmEuY2hlY2tVbmRlZmluZWQodCkmJiJibG9iIiE9dC5yZXNwb25zZVR5cGUpe3ZhciBhPW4uYS50b1N0cmluZyh0LnJlc3BvbnNlVGV4dCwiIik7dGhpcy5yZXNwb25zZVJhd1RleHQ9YX19fSxzZXRSZXNwb25zZVN0YXR1czpmdW5jdGlvbihlLHQsYSl7aWYobi5hLmNoZWNrVW5kZWZpbmVkKGEpKXt2YXIgcj1hLnJlcXVlc3Q7aWYobi5hLmNoZWNrVW5kZWZpbmVkKHIpKXt2YXIgaT0iIixvPXQuZ2V0VGltZSgpLWUuZ2V0VGltZSgpLHM9ci5zdGF0dXM7aWYobz4xZTMpaT1NYXRoLmZsb29yKG8vMWUzKS50b0ZpeGVkKDEpKyJzIjtlbHNlIGk9bysibXMiO3ZhciBsPTA7ImJsb2IiPT1yLnJlc3BvbnNlVHlwZT9sPXIucmVzcG9uc2Uuc2l6ZTpuLmEuY2hlY2tVbmRlZmluZWQoci5yZXNwb25zZVRleHQpJiYobD1yLnJlc3BvbnNlVGV4dC5nYmxlbigpKSx0aGlzLnJlc3BvbnNlU3RhdHVzPXtjb2RlOnMsY29zdDppLHNpemU6bH19fX0sc2V0UmVzcG9uc2VDdXJsOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsYT10aGlzLHI9dGhpcy5kZWJ1Z0NoZWNrVXJsKHRoaXMuZGVidWdVcmwpLGk9bmV3IEFycmF5LG89Imh0dHAiLHM9d2luZG93LmxvY2F0aW9uLmhyZWY7bmV3IFJlZ0V4cCgiXmh0dHBzLioiLCJpZyIpLnRlc3QocykmJihvPSJodHRwcyIpO3ZhciBsPSIiO2w9bmV3IFJlZ0V4cCgiXihodHRwfGh0dHBzKTouKiIsImlnIikudGVzdCh0aGlzLmFwaS5ob3N0KT90aGlzLmFwaS5ob3N0Om8rIjovLyIrdGhpcy5hcGkuaG9zdCx0aGlzLmVuYWJsZUhvc3QmJihsPXRoaXMuZW5hYmxlSG9zdFRleHQpLHIuc3RhcnRXaXRoKCIvIil8fChsKz0iLyIpLGwrPXIsaS5wdXNoKCJjdXJsIiksaS5wdXNoKCItWCIsdGhpcy5kZWJ1Z01ldGhvZFR5cGUudG9VcHBlckNhc2UoKSk7dmFyIHU9dGhpcy5kZWJ1Z0hlYWRlcnMoKSxkPVtdO2lmKGQucHVzaCgia25maWU0ai1nYXRld2F5LXJlcXVlc3QiKSxkLnB1c2goImtuaWZlNGotZ2F0ZXdheS1jb2RlIiksZC5wdXNoKCJSZXF1ZXN0LU9yaWdpb24iKSxuLmEuY2hlY2tVbmRlZmluZWQodSkpZm9yKHZhciBjIGluIHUpZC5pbmNsdWRlcyhjKXx8KGkucHVzaCgiLUggIiksaS5wdXNoKCciJytjKyI6Iit1W2NdKyciJykpO2lmKHRoaXMucmF3RmxhZyl7dmFyIGg9dGhpcy5kZWJ1Z1Jhd0Zvcm1QYXJhbXMoKSxtPVtdO2lmKG4uYS5jaGVja1VuZGVmaW5lZChoKSlmb3IodmFyIHAgaW4gaClpZihhLmRlYnVnUGF0aEZsYWcpaWYoLTE9PWEuZGVidWdQYXRoUGFyYW1zLmluZGV4T2YocCkpbS5wdXNoKHArIj0iK24uYS50b1N0cmluZyhoW3BdLCIiKSk7ZWxzZXt2YXIgZj0ieyIrcCsifSIsZz1uLmEudG9TdHJpbmcoaFtwXSwiIik7bD1sLnJlcGxhY2UoZixnKX1lbHNlIG0ucHVzaChwKyI9IituLmEudG9TdHJpbmcoaFtwXSwiIikpO3ZhciB3PW0uam9pbigiJiIpO2lmKG4uYS5zdHJOb3RCbGFuayh3KSYmKGw9LTE9PWwuaW5kZXhPZigiPyIpP2wrIj8iK3c6bCsiJiIrdyksbi5hLnN0ck5vdEJsYW5rKHRoaXMucmF3VGV4dCkpdHJ5e3ZhciBiPUpTT04ucGFyc2UodGhpcy5yYXdUZXh0KSx2PUpTT04uc3RyaW5naWZ5KGIpLnJlcGxhY2UoL1xcbi9nLCIiKS5yZXBsYWNlKC8iL2csJ1xcIicpO2kucHVzaCgiLWQiKSxpLnB1c2goJyInK3YrJyInKX1jYXRjaChlKXt2PXRoaXMucmF3VGV4dC5yZXBsYWNlKC9cXG4vZywiIikucmVwbGFjZSgvIi9nLCdcXCInKSxpLnB1c2goIi1kIiksaS5wdXNoKCciJyt2KyciJyl9fWVsc2UgaWYodGhpcy51cmxGb3JtRmxhZyl7dmFyIEY9dGhpcy5kZWJ1Z1VybEZvcm1QYXJhbXMoKTtpZihuLmEuY2hlY2tVbmRlZmluZWQoRikpe2Zvcih2YXIgcCBpbiBtPVtdLEYpYS5kZWJ1Z1BhdGhGbGFnPy0xPT1hLmRlYnVnUGF0aFBhcmFtcy5pbmRleE9mKHApP20ucHVzaChwKyI9IituLmEudG9TdHJpbmcoRltwXSwiIikpOihmPSJ7IitwKyJ9IixnPW4uYS50b1N0cmluZyhGW3BdLCIiKSxsPWwucmVwbGFjZShmLGcpKTptLnB1c2gocCsiPSIrbi5hLnRvU3RyaW5nKEZbcF0sIiIpKTt3PW0uam9pbigiJiIpLG4uYS5zdHJOb3RCbGFuayh3KSYmKCJnZXQiPT10aGlzLmRlYnVnTWV0aG9kVHlwZS50b0xvd2VyQ2FzZSgpfHwiZGVsZXRlIj09dGhpcy5kZWJ1Z01ldGhvZFR5cGUudG9Mb3dlckNhc2UoKT9sPS0xPT1sLmluZGV4T2YoIj8iKT9sKyI/Iit3OmwrIiYiK3c6KGkucHVzaCgiLS1kYXRhLXVybGVuY29kZSAiKSxpLnB1c2goJyInK3crJyInKSkpfX1lbHNlIGlmKHRoaXMuZm9ybUZsYWcpe3ZhciB5PXRoaXMuZGVidWdGb3JtQ3VybFBhcmFtcygpO2lmKG4uYS5jaGVja1VuZGVmaW5lZCh5KSlpZih0aGlzLnZhbGlkYXRlRm9ybURhdGFDb250YWludHNGaWxlKCkpdGhpcy5mb3JtRGF0YS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLm5ld3x8dC5yb3dGb3JtU2VsZWN0aW9uLnNlbGVjdGVkUm93S2V5cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT1lLmlkfSkpLmxlbmd0aD4wJiZuLmEuc3RyTm90QmxhbmsoZS5uYW1lKSYmKGkucHVzaCgiLUYgIiksInRleHQiPT1lLnR5cGU/aS5wdXNoKCciJytlLm5hbWUrIj0iK24uYS50b1N0cmluZyhlLmNvbnRlbnQsIiIpKyciJyk6aS5wdXNoKCciJytlLm5hbWUrIj1AIitlLmNvbnRlbnQrJyInKSl9KSk7ZWxzZXtmb3IodmFyIHAgaW4gbT1bXSx5KWEuZGVidWdQYXRoRmxhZz8tMT09YS5kZWJ1Z1BhdGhQYXJhbXMuaW5kZXhPZihwKT9tLnB1c2gocCsiPSIrbi5hLnRvU3RyaW5nKHlbcF0sIiIpKTooZj0ieyIrcCsifSIsZz1uLmEudG9TdHJpbmcoeVtwXSwiIiksbD1sLnJlcGxhY2UoZixnKSk6bS5wdXNoKHArIj0iK24uYS50b1N0cmluZyh5W3BdLCIiKSk7dz1tLmpvaW4oIiYiKSxuLmEuc3RyTm90QmxhbmsodykmJigiZ2V0Ij09dGhpcy5kZWJ1Z01ldGhvZFR5cGUudG9Mb3dlckNhc2UoKXx8ImRlbGV0ZSI9PXRoaXMuZGVidWdNZXRob2RUeXBlLnRvTG93ZXJDYXNlKCk/bD0tMT09bC5pbmRleE9mKCI/Iik/bCsiPyIrdzpsKyImIit3OihpLnB1c2goIi0tZGF0YS11cmxlbmNvZGUgIiksaS5wdXNoKCciJyt3KyciJykpKX19aS5wdXNoKCciJytlbmNvZGVVUkkobCkrJyInKSx0aGlzLnJlc3BvbnNlQ3VybFRleHQ9aS5qb2luKCIgIil9LGRlYnVnRm9ybUN1cmxQYXJhbXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9e307cmV0dXJuIHRoaXMuZm9ybURhdGEuZm9yRWFjaCgoZnVuY3Rpb24oYSl7YS5uZXd8fGUucm93Rm9ybVNlbGVjdGlvbi5zZWxlY3RlZFJvd0tleXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZT09YS5pZH0pKS5sZW5ndGg+MCYmbi5hLnN0ck5vdEJsYW5rKGEubmFtZSkmJih0W2EubmFtZV09YS5jb250ZW50KX0pKSx0fSxzZXRSZXNwb25zZUJvZHk6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZihuLmEuY2hlY2tVbmRlZmluZWQoZSkpe3ZhciBhPWUucmVxdWVzdCxyPWUuaGVhZGVycztpZihuLmEuY2hlY2tVbmRlZmluZWQoYSkpe3ZhciBpPW4uYS5wcm9wVmFsdWUoImNvbnRlbnQtdHlwZSIsciwiIiksbz1uLmEucHJvcFZhbHVlKCJjb250ZW50LWRpc3Bvc2l0aW9uIixyLCIiKTtpZigiYmxvYiI9PWEucmVzcG9uc2VUeXBlfHxuLmEuc3RyTm90QmxhbmsobykpaWYoImFwcGxpY2F0aW9uL2pzb24iPT1lLmRhdGEudHlwZXx8ImFwcGxpY2F0aW9uL3htbCI9PWUuZGF0YS50eXBlfHwidGV4dC9odG1sIj09ZS5kYXRhLnR5cGV8fCJ0ZXh0L3BsYWluIj09ZS5kYXRhLnR5cGUpe3ZhciBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPWZ1bmN0aW9uKGUpe3ZhciBuPXtyZXNwb25zZVRleHQ6ZS50YXJnZXQucmVzdWx0LHJlc3BvbnNlOmUudGFyZ2V0LnJlc3VsdCxyZXNwb25zZVR5cGU6IiIsc3RhdHVzOmEuc3RhdHVzLHN0YXR1c1RleHQ6YS5zdGF0dXNUZXh0LHJlYWR5U3RhdGU6YS5yZWFkeVN0YXRlLHRpbWVvdXQ6YS50aW1lb3V0LHdpdGhDcmVkZW50aWFsczphLndpdGhDcmVkZW50aWFsc307dC5zZXRSZXNwb25zZUpzb25Cb2R5KG4scil9LHMucmVhZEFzVGV4dChlLmRhdGEpfWVsc2UgaWYoInRleHQvaHRtbCI9PWl8fCJ0ZXh0L3BsYWluIj09aXx8ImFwcGxpY2F0aW9uL3htbCI9PWkpdGhpcy5zZXRSZXNwb25zZUpzb25Cb2R5KGEscik7ZWxzZXt2YXIgbD0hMSx1PSJLbmlmZTRqLnR4dCI7aWYobi5hLnN0ck5vdEJsYW5rKG8pfHwobz1uLmEucHJvcFZhbHVlKCJjb250ZW50LWRpc3Bvc2l0aW9uIixyLCIiKSksbi5hLnN0ck5vdEJsYW5rKG8pKWZvcih2YXIgZD1vLnNwbGl0KCI7IiksYz0wO2M8ZC5sZW5ndGg7YysrKXt2YXIgaD1kW2NdO2lmKG51bGwhPWgmJiIiIT1oKXtoLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiaW5saW5lIik+LTEmJihsPSEwKTt2YXIgbT1oLnNwbGl0KCI9Iik7aWYobnVsbCE9bSYmbS5sZW5ndGg+MCl7dmFyIHA9bVswXTtpZihudWxsIT1wJiZudWxsIT1wJiYiIiE9cCYmKCJmaWxlbmFtZSoiPT1wLnRvTG93ZXJDYXNlKCkudHJpbSgpfHwiZmlsZW5hbWUiPT1wLnRvTG93ZXJDYXNlKCkudHJpbSgpKSl7dmFyIGY9bVsxXS5yZXBsYWNlKC9cIi9nLCIiKTt1PWRlY29kZVVSSUNvbXBvbmVudChmKX19fX12YXIgZz0hMTtpZigtMSE9aS5pbmRleE9mKCJpbWFnZSIpKWc9ITA7ZWxzZXtbImJtcCIsImpwZyIsInBuZyIsInRpZiIsImdpZiIsInBjeCIsInRnYSIsImV4aWYiLCJmcHgiLCJzdmciLCJwc2QiLCJjZHIiLCJwY2QiLCJkeGYiLCJ1Zm8iLCJlcHMiLCJhaSIsInJhdyIsIldNRiIsIndlYnAiXS5mb3JFYWNoKChmdW5jdGlvbihlKXt1LmVuZHNXaXRoKGUpJiYoZz0hMCl9KSl9dmFyIHc9dGhpcy5hcGkucHJvZHVjZXMsYj0hMTtpZihuLmEuYXJyTm90RW1wdHkodykmJncuZm9yRWFjaCgoZnVuY3Rpb24oZSl7LTEhPWUuaW5kZXhPZigiaW1hZ2UiKSYmKGI9ITApfSkpLGd8fChnPWIpLGwpdGhpcy5zZXRSZXNwb25zZUpzb25Cb2R5KGEscik7ZWxzZXt2YXIgdj0iIjt0cnl7dj13aW5kb3cuVVJMP3dpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGUuZGF0YSk6d2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwoZS5kYXRhKX1jYXRjaCh0KXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUuZXJyb3IodCk7dmFyIEY9W10uY29uY2F0KGUuZGF0YSkseT1uZXcgQmxvYihGKTt2PXdpbmRvdy5VUkw/d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoeSk6d2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwoeSl9dGhpcy5yZXNwb25zZUNvbnRlbnQ9e3RleHQ6IiIsbW9kZToiYmxvYiIsYmxvYkZsYWc6ITAsaW1hZ2VGbGFnOmcsYmxvYkZpbGVOYW1lOnUsYmxvYlVybDp2LGJhc2U2NDoiIn19fWVsc2UgdGhpcy5zZXRSZXNwb25zZUpzb25Cb2R5KGEscil9fX0sc2V0UmVzcG9uc2VKc29uQm9keTpmdW5jdGlvbihlLHQpe3ZhciBhPSIiLHI9IiIsaT10aGlzLmdldENvbnRlbnRUeXBlQnlIZWFkZXJzKHQpO2lmKCJqc29uIj09aSl7dmFyIG89KGUucmVzcG9uc2VUZXh0LmdibGVuKCkvMTAyNCkudG9GaXhlZCgxKTtpZih0aGlzLmJpZ0Jsb2JGbGFnPW8+MzAwLG8+MTUwKXt0aGlzLmJpZ0ZsYWc9ITA7dmFyIHM9dGhpcy5pMThuLm1lc3NhZ2UuZGVidWcuY29udGVudFRvQmlnO3RoaXMuJG1lc3NhZ2UuaW5mbyhzKSxpPSJ0ZXh0In1lbHNlIGlmKG4uYS5zdHJOb3RCbGFuayhlLnJlc3BvbnNlVGV4dCkpdHJ5e2E9bi5hLmpzb241c3RyaW5naWZ5KG4uYS5qc29uNXBhcnNlKGUucmVzcG9uc2VUZXh0KSl9Y2F0Y2godCl7YT1lLnJlc3BvbnNlVGV4dCxpPSJ0ZXh0In1pZihuLmEuc3RyTm90QmxhbmsoZS5yZXNwb25zZVRleHQpJiYhdGhpcy5iaWdGbGFnJiZlLnJlc3BvbnNlVGV4dC5pbmRleE9mKCJkYXRhOmltYWdlIik+LTEpaWYobmV3IFJlZ0V4cCgnLio/IihkYXRhOmltYWdlLio/YmFzZTY0Lio/KSIuKicsImlnIikudGVzdChlLnJlc3BvbnNlVGV4dCkpcj1SZWdFeHAuJDF9ZWxzZSBpZigieG1sIj09aSl7dmFyIGw9ZS5yZXNwb25zZVRleHQ7YT1uLmEuc3RyTm90QmxhbmsobCk/KG5ldyBGKS54bWwobCk6bH1lbHNlIGE9ZS5yZXNwb25zZVRleHQ7dGhpcy5yZXNwb25zZUNvbnRlbnQ9e3RleHQ6YSxtb2RlOmksYmxvYkZsYWc6ITEsaW1hZ2VGbGFnOiExLGJsb2JGaWxlTmFtZToiIixibG9iVXJsOiIiLGJhc2U2NDpyfX0sZGVidWdFZGl0b3JDaGFuZ2U6ZnVuY3Rpb24oZSl7bi5hLmNoZWNrVW5kZWZpbmVkKHRoaXMucmVzcG9uc2VDb250ZW50KSYmKHRoaXMucmVzcG9uc2VDb250ZW50LnRleHQ9ZSl9LGdldENvbnRlbnRUeXBlQnlIZWFkZXJzOmZ1bmN0aW9uKGUpe3ZhciB0PSJqc29uIixhPW4uYS5wcm9wVmFsdWUoIkNvbnRlbnQtVHlwZSIsZSwiIik7cmV0dXJuIG4uYS5zdHJOb3RCbGFuayhhKXx8KGE9bi5hLnByb3BWYWx1ZSgiY29udGVudC10eXBlIixlLCIiKSksbi5hLnN0ck5vdEJsYW5rKGEpJiYodD1hLmluZGV4T2YoImpzb24iKT49MD8ianNvbiI6YS5pbmRleE9mKCJ4bWwiKT49MD8ieG1sIjphLmluZGV4T2YoInRleHQvaHRtbCIpPj0wPyJodG1sIjoidGV4dCIpLHR9LGRlYnVnU2hvd0ZpZWxkRGVzY3JpcHRpb25DaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5yZXNwb25zZUZpZWxkRGVzY3JpcHRpb25DaGVja2VkPWV9fX0sQz1hKCIyODc3Iiksaz1PYmplY3QoQy5hKSh5LChmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLl9zZWxmLl9jO3JldHVybiB0KCJkaXYiLHtzdGF0aWNDbGFzczoia25pZmU0ai1kZWJ1ZyJ9LFt0KCJhLXNwaW4iLHthdHRyczp7dGlwOiJMb2FkaW5nLi4uIixzcGlubmluZzplLmRlYnVnTG9hZGluZ319LFt0KCJkaXYiLHtzdGF0aWNDbGFzczoic3Bpbi1jb250ZW50In0sW3QoImEtcm93IixbdCgiYS1jb2wiLHtjbGFzczoia25pZmU0ai1kZWJ1Zy1hcGktIitlLmRlYnVnTWV0aG9kVHlwZS50b0xvd2VyQ2FzZSgpLGF0dHJzOntzcGFuOjI0fX0sW3QoImEtaW5wdXQtZ3JvdXAiLHthdHRyczp7Y29tcGFjdDoiIn19LFtlLmFwaS5zZWN1cml0eUZsYWc/dCgic3BhbiIse3N0YXRpY0NsYXNzOiJrbmlmZTRqLWFwaS1zdW1tYXJ5LW1ldGhvZCJ9LFt0KCJhLWljb24iLHtzdGF0aWNTdHlsZTp7ImZvbnQtc2l6ZSI6IjE2cHgifSxhdHRyczp7dHlwZToidW5sb2NrIn19KV0sMSk6ZS5fZSgpLHQoImEtaW5wdXQiLHtzdHlsZTplLmRlYnVnVXJsU3R5bGUsYXR0cnM6e3ZhbHVlOmUuZGVidWdVcmx9LG9uOntjaGFuZ2U6ZS5kZWJ1Z1VybENoYW5nZX0sc2NvcGVkU2xvdHM6ZS5fdShbe2tleToiYWRkb25CZWZvcmUiLGZuOmZ1bmN0aW9uKCl7cmV0dXJuW3QoImEtc2VsZWN0Iix7c3RhdGljU3R5bGU6e3dpZHRoOiIxMTBweCJ9LG1vZGVsOnt2YWx1ZTplLmRlYnVnTWV0aG9kVHlwZSxjYWxsYmFjazpmdW5jdGlvbih0KXtlLmRlYnVnTWV0aG9kVHlwZT10fSxleHByZXNzaW9uOiJkZWJ1Z01ldGhvZFR5cGUifX0sW3QoImEtc2VsZWN0LW9wdGlvbiIse2F0dHJzOnt2YWx1ZToiR0VUIn19LFtlLl92KCJHRVQiKV0pLHQoImEtc2VsZWN0LW9wdGlvbiIse2F0dHJzOnt2YWx1ZToiUE9TVCJ9fSxbZS5fdigiUE9TVCIpXSksdCgiYS1zZWxlY3Qtb3B0aW9uIix7YXR0cnM6e3ZhbHVlOiJQVVQifX0sW2UuX3YoIlBVVCIpXSksdCgiYS1zZWxlY3Qtb3B0aW9uIix7YXR0cnM6e3ZhbHVlOiJQQVRDSCJ9fSxbZS5fdigiUEFUQ0giKV0pLHQoImEtc2VsZWN0LW9wdGlvbiIse2F0dHJzOnt2YWx1ZToiREVMRVRFIn19LFtlLl92KCJERUxFVEUiKV0pLHQoImEtc2VsZWN0LW9wdGlvbiIse2F0dHJzOnt2YWx1ZToiQ09QWSJ9fSxbZS5fdigiQ09QWSIpXSksdCgiYS1zZWxlY3Qtb3B0aW9uIix7YXR0cnM6e3ZhbHVlOiJIRUFEIn19LFtlLl92KCJIRUFEIildKSx0KCJhLXNlbGVjdC1vcHRpb24iLHthdHRyczp7dmFsdWU6Ik9QVElPTlMifX0sW2UuX3YoIk9QVElPTlMiKV0pLHQoImEtc2VsZWN0LW9wdGlvbiIse2F0dHJzOnt2YWx1ZToiTElOSyJ9fSxbZS5fdigiTElOSyIpXSksdCgiYS1zZWxlY3Qtb3B0aW9uIix7YXR0cnM6e3ZhbHVlOiJVTkxJTksifX0sW2UuX3YoIlVOTElOSyIpXSksdCgiYS1zZWxlY3Qtb3B0aW9uIix7YXR0cnM6e3ZhbHVlOiJQVVJHRSJ9fSxbZS5fdigiUFVSR0UiKV0pXSwxKV19LHByb3h5OiEwfV0pfSksdCgiYS1idXR0b24iLHtzdGF0aWNDbGFzczoia25pZmU0ai1hcGktc2VuZCIsYXR0cnM6e3R5cGU6InByaW1hcnkifSxkb21Qcm9wczp7aW5uZXJIVE1MOmUuX3MoZS4kdCgiZGVidWcuc2VuZCIpKX0sb246e2NsaWNrOmUuc2VuZFJlc3RmdWxBcGl9fSxbZS5fdigi5Y+RIOmAgSAiKV0pLGUuZW5hYmxlUmVsb2FkQ2FjaGVQYXJhbWV0ZXI/dCgiYS1idXR0b24iLHtvbjp7Y2xpY2s6ZS5yZWxvYWRDYWNoZVBhcmFtZXRlcn19LFtlLl92KCLliLfmlrDlj5jph48iKV0pOmUuX2UoKSx0KCJhLWJ1dHRvbiIse29uOntjbGljazplLnJlc2V0Q2FjaGVQYXJhbWV0ZXJ9fSxbZS5fdigi6YeN572uIildKV0sMSldLDEpXSwxKSx0KCJhLXJvdyIse3N0YXRpY0NsYXNzOiJrbmlmZTRqLWRlYnVnLXRhYnMifSxbdCgiYS10YWJzIix7YXR0cnM6e2RlZmF1bHRBY3RpdmVLZXk6IjIifX0sW3QoImEtdGFiLXBhbmUiLHtrZXk6IjEifSxbdCgidGVtcGxhdGUiLHtzbG90OiJ0YWIifSxbdCgic3BhbiIsW2UuaGVhZGVyQ291bnRGbGFnP3QoImEtdGFnIix7c3RhdGljQ2xhc3M6ImtuaWZlNGotZGVidWctcGFyYW0tY291bnQifSxbZS5fdihlLl9zKGUuaGVhZGVyQ291bnQpKV0pOmUuX2UoKSx0KCJzcGFuIix7ZG9tUHJvcHM6e2lubmVySFRNTDplLl9zKGUuJHQoImRlYnVnLmhlYWRlcnMiKSl9fSxbZS5fdigi6K+35rGC5aS06YOoIildKV0sMSldKSxlLmhlYWRlclRhYmxlRmxhZz90KCJhLXRhYmxlIix7YXR0cnM6e2JvcmRlcmVkOiIiLHNpemU6InNtYWxsIixyb3dTZWxlY3Rpb246ZS5yb3dTZWxlY3Rpb24sY29sdW1uczplLmhlYWRlckNvbHVtbixwYWdpbmF0aW9uOmUucGFnaW5hdGlvbixkYXRhU291cmNlOmUuaGVhZGVyRGF0YSxyb3dLZXk6ImlkIn0sc2NvcGVkU2xvdHM6ZS5fdShbe2tleToiaGVhZGVyTmFtZSIsZm46ZnVuY3Rpb24oYSxyKXtyZXR1cm5bdCgiYS1hdXRvLWNvbXBsZXRlIix7c3RhdGljU3R5bGU6e3dpZHRoOiIxMDAlIn0sYXR0cnM6eyJkYXRhLWlkIjpyLmlkLHZhbHVlOmEsZmlsdGVyT3B0aW9uOmUuaGVhZGVyTmFtZUZpbHRlck9wdGlvbixhbGxvd0NsZWFyOmUuYWxsb3dDbGVhcixkYXRhU291cmNlOmUuaGVhZGVyQXV0b09wdGlvbnMscGxhY2Vob2xkZXI6ZS4kdCgiZGVidWcudGFibGVIZWFkZXIuaG9sZGVyTmFtZSIpfSxvbjp7c2VsZWN0OmUuaGVhZGVyU2VsZWN0LHNlYXJjaDplLmhlYWRlclNlYXJjaCxjaGFuZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIGUuaGVhZGVyTmFtZUNoYW5nZShyKX19fSldfX0se2tleToiaGVhZGVyVmFsdWUiLGZuOmZ1bmN0aW9uKGEscil7cmV0dXJuW251bGwhPXIuZW51bXM/dCgiYS1yb3ciLFt0KCJhLXNlbGVjdCIse3N0YXRpY1N0eWxlOnt3aWR0aDoiMTAwJSJ9LGF0dHJzOnttb2RlOnIuZW51bXNNb2RlLGRlZmF1bHRWYWx1ZTphLCJkYXRhLWtleSI6ci5pZCxvcHRpb25zOnIuZW51bXN9LG9uOntjaGFuZ2U6ZS5oZWFkZXJDb250ZW50RW51bUNobmFnZX19KV0sMSk6dCgiYS1yb3ciLFt0KCJhLWlucHV0Iix7Y2xhc3M6ImtuaWZlNGotZGVidWctcGFyYW0tcmVxdWlyZSIrci5yZXF1aXJlLGF0dHJzOntwbGFjZWhvbGRlcjpudWxsIT1yLmRlc2NyaXB0aW9uJiYiIiE9ci5kZXNjcmlwdGlvbj9yLmRlc2NyaXB0aW9uOmUuJHQoImRlYnVnLnRhYmxlSGVhZGVyLmhvbGRlclZhbHVlIiksImRhdGEta2V5IjpyLmlkLGRlZmF1bHRWYWx1ZTphfSxvbjp7Y2hhbmdlOmUuaGVhZGVyQ29udGVudENobmFnZX19KV0sMSldfX0se2tleToib3BlcmF0aW9uIixmbjpmdW5jdGlvbihhLHIpe3JldHVybiB0KCJhLXJvdyIse30sW3IubmV3P2UuX2UoKTp0KCJhLWJ1dHRvbiIse2F0dHJzOnt0eXBlOiJsaW5rIn0sZG9tUHJvcHM6e2lubmVySFRNTDplLl9zKGUuJHQoImRlYnVnLnRhYmxlSGVhZGVyLmhvbGRlckRlbCIpKX0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe3JldHVybiBlLmhlYWRlckRlbGV0ZShyKX19fSxbZS5fdigi5Yig6ZmkIildKV0sMSl9fV0sbnVsbCwhMSw4Njk0Mjg2MjYpfSk6ZS5fZSgpXSwyKSx0KCJhLXRhYi1wYW5lIix7a2V5OiIyIixhdHRyczp7dGFiOmUuJHQoImRlYnVnLnBhcmFtcyIpLGZvcmNlUmVuZGVyOiIifX0sW3QoImEtcm93Iix7c3RhdGljQ2xhc3M6ImtuaWZlNGotZGVidWctcmVxdWVzdC10eXBlIn0sW3QoImRpdiIse3N0YXRpY0NsYXNzOiJrbmlmZTRqLWRlYnVnLXJlcXVlc3QtY29udGVudC10eXBlLWZsb2F0In0sW3QoImEtcmFkaW8tZ3JvdXAiLHtzdGF0aWNDbGFzczoia25pZmU0ai1kZWJ1Zy1yZXF1ZXN0LWNvbnRlbnQtdHlwZSIsb246e2NoYW5nZTplLnJlcXVlc3RDb250ZW50VHlwZUNoYW5nZX0sbW9kZWw6e3ZhbHVlOmUucmVxdWVzdENvbnRlbnRUeXBlLGNhbGxiYWNrOmZ1bmN0aW9uKHQpe2UucmVxdWVzdENvbnRlbnRUeXBlPXR9LGV4cHJlc3Npb246InJlcXVlc3RDb250ZW50VHlwZSJ9fSxbdCgiYS1yYWRpbyIse2F0dHJzOnt2YWx1ZToieC13d3ctZm9ybS11cmxlbmNvZGVkIn19LFtlLl92KCJ4LXd3dy1mb3JtLXVybGVuY29kZWQiKV0pLHQoImEtcmFkaW8iLHthdHRyczp7dmFsdWU6ImZvcm0tZGF0YSJ9fSxbZS5fdigiZm9ybS1kYXRhIildKSx0KCJhLXJhZGlvIix7YXR0cnM6e3ZhbHVlOiJyYXcifX0sW2UuX3YoInJhdyIpXSldLDEpXSwxKSx0KCJkaXYiLHtzdGF0aWNDbGFzczoia25pZmU0ai1kZWJ1Zy1yZXF1ZXN0LWNvbnRlbnQtdHlwZS1mbG9hdCJ9LFt0KCJkaXYiLHtzdGF0aWNDbGFzczoia25pZmU0ai1kZWJ1Zy1yZXF1ZXN0LWNvbnRlbnQtdHlwZS1yYXcifSxbZS5yYXdUeXBlRmxhZz90KCJhLWRyb3Bkb3duIix7YXR0cnM6e3RyaWdnZXI6WyJjbGljayJdfX0sW3QoInNwYW4iLHtzdGF0aWNDbGFzczoia25pZmU0ai1kZWJ1Zy1yYXctc3BhbiJ9LFt0KCJzcGFuIixbZS5fdihlLl9zKGUucmF3RGVmYXVsdFRleHQpKV0pLHQoImEtaWNvbiIse2F0dHJzOnt0eXBlOiJkb3duIn19KV0sMSksdCgiYS1tZW51Iix7YXR0cnM6e3Nsb3Q6Im92ZXJsYXkifSxvbjp7Y2xpY2s6ZS5yYXdNZW51Q2xpY2t9LHNsb3Q6Im92ZXJsYXkifSxbdCgiYS1tZW51LWl0ZW0iLHtrZXk6IkF1dG8iLGF0dHJzOnsiZGF0YS1tb2RlLXR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIiwiZGF0YS1tb2RlIjoidGV4dCJ9fSxbZS5fdigiQXV0byIpXSksdCgiYS1tZW51LWl0ZW0iLHtrZXk6IlRleHQodGV4dC9wbGFpbikiLGF0dHJzOnsiZGF0YS1tb2RlLXR5cGUiOiJ0ZXh0L3BsYWluIiwiZGF0YS1tb2RlIjoidGV4dCJ9fSxbZS5fdigiIFRleHQodGV4dC9wbGFpbikiKV0pLHQoImEtbWVudS1pdGVtIix7a2V5OiJKU09OKGFwcGxpY2F0aW9uL2pzb24pIixhdHRyczp7ImRhdGEtbW9kZS10eXBlIjoiYXBwbGljYXRpb24vanNvbiIsImRhdGEtbW9kZSI6Impzb24ifX0sW2UuX3YoIiBKU09OKGFwcGxpY2F0aW9uL2pzb24pIildKSx0KCJhLW1lbnUtaXRlbSIse2tleToiSmF2YXNjcmlwdChhcHBsaWNhdGlvbi9KYXZhc2NyaXB0KSIsYXR0cnM6eyJkYXRhLW1vZGUtdHlwZSI6ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLCJkYXRhLW1vZGUiOiJqYXZhc2NyaXB0In19LFtlLl92KCJKYXZhc2NyaXB0KGFwcGxpY2F0aW9uL0phdmFzY3JpcHQpIildKSx0KCJhLW1lbnUtaXRlbSIse2tleToiWE1MKGFwcGxpY2F0aW9uL3htbCkiLGF0dHJzOnsiZGF0YS1tb2RlLXR5cGUiOiJhcHBsaWNhdGlvbi94bWwiLCJkYXRhLW1vZGUiOiJ4bWwifX0sW2UuX3YoIiBYTUwoYXBwbGljYXRpb24veG1sKSIpXSksdCgiYS1tZW51LWl0ZW0iLHtrZXk6IlhNTCh0ZXh0L3htbCkiLGF0dHJzOnsiZGF0YS1tb2RlLXR5cGUiOiJ0ZXh0L3htbCIsImRhdGEtbW9kZSI6InhtbCJ9fSxbZS5fdigiWE1MKHRleHQveG1sKSAiKV0pLHQoImEtbWVudS1pdGVtIix7a2V5OiJIVE1MKHRleHQvaHRtbCkiLGF0dHJzOnsiZGF0YS1tb2RlLXR5cGUiOiJ0ZXh0L2h0bWwiLCJkYXRhLW1vZGUiOiJodG1sIn19LFtlLl92KCJIVE1MKHRleHQvaHRtbCkgIildKV0sMSldLDEpOmUuX2UoKV0sMSldKSxlLmZvcm1hdEZsYWc/dCgiZGl2Iix7c3RhdGljQ2xhc3M6ImtuaWZlNGotZGVidWctcmVxdWVzdC1jb250ZW50LXR5cGUtYmVhdXRpZnkifSxbdCgiYSIse29uOntjbGljazplLmJlYXV0aWZ5SnNvbn19LFtlLl92KCJCZWF1dGlmeSIpXSldKTplLl9lKCldKSxlLmZvcm1GbGFnP3QoImEtcm93IixbZS5mb3JtVGFibGVGbGFnP3QoImEtdGFibGUiLHthdHRyczp7Ym9yZGVyZWQ6IiIsc2l6ZToic21hbGwiLHJvd1NlbGVjdGlvbjplLnJvd0Zvcm1TZWxlY3Rpb24sY29sdW1uczplLmZvcm1Db2x1bW4scGFnaW5hdGlvbjplLnBhZ2luYXRpb24sZGF0YVNvdXJjZTplLmZvcm1EYXRhLHJvd0tleToiaWQifSxzY29wZWRTbG90czplLl91KFt7a2V5OiJmb3JtTmFtZSIsZm46ZnVuY3Rpb24oYSxyKXtyZXR1cm5bdCgiYS1pbnB1dCIse2F0dHJzOntwbGFjZWhvbGRlcjpyLmRlc2NyaXB0aW9uLCJkYXRhLWtleSI6ci5pZCxkZWZhdWx0VmFsdWU6YX0sb246e2NoYW5nZTplLmZvcm1OYW1lQ2hhbmdlfX0pXX19LHtrZXk6ImZvcm1UeXBlIixmbjpmdW5jdGlvbihhLHIpe3JldHVyblt0KCJhLXNlbGVjdCIse3N0YXRpY1N0eWxlOnt3aWR0aDoiMTAwJSJ9LGF0dHJzOntkZWZhdWx0VmFsdWU6YSsiLSIrci5pZH0sb246e2NoYW5nZTplLmZvcm1UeXBlQ2hhbmdlfX0sW3QoImEtc2VsZWN0LW9wdGlvbiIse2F0dHJzOnt2YWx1ZToidGV4dC0iK3IuaWR9fSxbdCgic3BhbiIse2RvbVByb3BzOntpbm5lckhUTUw6ZS5fcyhlLiR0KCJkZWJ1Zy5mb3JtLml0ZW1UZXh0IikpfX0sW2UuX3YoIuaWh+acrCIpXSldKSx0KCJhLXNlbGVjdC1vcHRpb24iLHthdHRyczp7dmFsdWU6ImZpbGUtIityLmlkfX0sW3QoInNwYW4iLHtkb21Qcm9wczp7aW5uZXJIVE1MOmUuX3MoZS4kdCgiZGVidWcuZm9ybS5pdGVtRmlsZSIpKX19LFtlLl92KCLmlofku7YiKV0pXSldLDEpXX19LHtrZXk6ImZvcm1WYWx1ZSIsZm46ZnVuY3Rpb24oYSxyKXtyZXR1cm5bInRleHQiPT1yLnR5cGU/dCgiZGl2IixbbnVsbCE9ci5lbnVtcz90KCJhLXJvdyIsW3QoImEtc2VsZWN0Iix7c3RhdGljU3R5bGU6e3dpZHRoOiIxMDAlIn0sYXR0cnM6e21vZGU6ci5lbnVtc01vZGUsZGVmYXVsdFZhbHVlOmEsImRhdGEta2V5IjpyLmlkLG9wdGlvbnM6ci5lbnVtc30sb246e2NoYW5nZTplLmZvcm1Db250ZW50RW51bUNoYW5nZX19KV0sMSk6dCgiYS1yb3ciLFt0KCJhLWlucHV0Iix7Y2xhc3M6ImtuaWZlNGotZGVidWctcGFyYW0tcmVxdWlyZSIrci5yZXF1aXJlLGF0dHJzOntwbGFjZWhvbGRlcjpyLmRlc2NyaXB0aW9uLCJkYXRhLWtleSI6ci5pZCxkZWZhdWx0VmFsdWU6YX0sb246e2NoYW5nZTplLmZvcm1Db250ZW50Q2hhbmdlfX0pXSwxKV0sMSk6dCgiZGl2IixbdCgiZGl2Iixbci5tdWx0aXBhcnQ/dCgiZGl2Iix7c3RhdGljU3R5bGU6e2Rpc3BsYXk6Im5vbmUifX0sW3QoImlucHV0Iix7c3RhdGljU3R5bGU6e2Rpc3BsYXk6Im5vbmUifSxhdHRyczp7aWQ6ImZpbGUiK3IuaWQsbXVsdGlwbGU6IiIsdHlwZToiZmlsZSIsImRhdGEta2V5IjpyLmlkfSxvbjp7Y2hhbmdlOmUuZm9ybUZpbGVDaGFuZ2V9fSldKTp0KCJkaXYiLHtzdGF0aWNTdHlsZTp7ZGlzcGxheToibm9uZSJ9fSxbdCgiaW5wdXQiLHtzdGF0aWNTdHlsZTp7ZGlzcGxheToibm9uZSJ9LGF0dHJzOntpZDoiZmlsZSIrci5pZCx0eXBlOiJmaWxlIiwiZGF0YS1rZXkiOnIuaWR9LG9uOntjaGFuZ2U6ZS5mb3JtRmlsZUNoYW5nZX19KV0pLHQoImEtaW5wdXQtZ3JvdXAiLHthdHRyczp7Y29tcGFjdDoiIn19LFt0KCJhLWlucHV0Iix7Y2xhc3M6ImtuaWZlNGotZGVidWctcGFyYW0tcmVxdWlyZSIrci5yZXF1aXJlLHN0YXRpY1N0eWxlOnt3aWR0aDoiODAlIn0sYXR0cnM6e3ZhbHVlOnIuY29udGVudCxkaXNhYmxlZDoiIn19KSx0KCJhLWJ1dHRvbiIse3N0YXRpY0NsYXNzOiJrbmlmZTRqLWFwaS1zZW5kIixzdGF0aWNTdHlsZTp7d2lkdGg6IjgwcHgifSxhdHRyczp7dHlwZToicHJpbWFyeSJ9LGRvbVByb3BzOntpbm5lckhUTUw6ZS5fcyhlLiR0KCJkZWJ1Zy5mb3JtLnVwbG9hZCIpKX0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe3JldHVybiBlLmZvcm1GaWxlVXBsb2FkQ2xpY2socil9fX0sW2UuX3YoIumAieaLqeaWh+S7tiIpXSldLDEpXSwxKV0pXX19LHtrZXk6Im9wZXJhdGlvbiIsZm46ZnVuY3Rpb24oYSxyKXtyZXR1cm4gdCgiYS1yb3ciLHt9LFtyLm5ldz9lLl9lKCk6dCgiYS1idXR0b24iLHthdHRyczp7dHlwZToibGluayJ9LGRvbVByb3BzOntpbm5lckhUTUw6ZS5fcyhlLiR0KCJkZWJ1Zy50YWJsZUhlYWRlci5ob2xkZXJEZWwiKSl9LG9uOntjbGljazpmdW5jdGlvbih0KXtyZXR1cm4gZS5mb3JtRGVsZXRlKHIpfX19LFtlLl92KCLliKDpmaQiKV0pXSwxKX19XSxudWxsLCExLDIxNDg3MjY4MDUpfSk6ZS5fZSgpXSwxKTplLl9lKCksZS51cmxGb3JtRmxhZz90KCJhLXJvdyIsW2UudXJsRm9ybVRhYmxlRmxhZz90KCJhLXRhYmxlIix7YXR0cnM6e2JvcmRlcmVkOiIiLHNpemU6InNtYWxsIixyb3dTZWxlY3Rpb246ZS5yb3dVcmxGb3JtU2VsZWN0aW9uLGNvbHVtbnM6ZS51cmxGb3JtQ29sdW1uLHBhZ2luYXRpb246ZS5wYWdpbmF0aW9uLGRhdGFTb3VyY2U6ZS51cmxGb3JtRGF0YSxyb3dLZXk6ImlkIn0sc2NvcGVkU2xvdHM6ZS5fdShbe2tleToidXJsRm9ybU5hbWUiLGZuOmZ1bmN0aW9uKGEscil7cmV0dXJuW3QoImEtaW5wdXQiLHthdHRyczp7cGxhY2Vob2xkZXI6ci5kZXNjcmlwdGlvbiwiZGF0YS1rZXkiOnIuaWQsZGVmYXVsdFZhbHVlOmF9LG9uOntjaGFuZ2U6ZS51cmxGb3JtTmFtZUNoYW5nZX19KV19fSx7a2V5OiJ1cmxGb3JtVmFsdWUiLGZuOmZ1bmN0aW9uKGEscil7cmV0dXJuW251bGwhPXIuZW51bXM/dCgiYS1yb3ciLFt0KCJhLXNlbGVjdCIse3N0YXRpY1N0eWxlOnt3aWR0aDoiMTAwJSJ9LGF0dHJzOnttb2RlOnIuZW51bXNNb2RlLGRlZmF1bHRWYWx1ZTphLCJkYXRhLWtleSI6ci5pZCxvcHRpb25zOnIuZW51bXN9LG9uOntjaGFuZ2U6ZS51cmxGb3JtQ29udGVudEVudW1DaGFuZ2V9fSldLDEpOnQoImEtcm93IixbdCgiYS1pbnB1dCIse2NsYXNzOiJrbmlmZTRqLWRlYnVnLXBhcmFtLXJlcXVpcmUiK3IucmVxdWlyZSxhdHRyczp7cGxhY2Vob2xkZXI6ci5kZXNjcmlwdGlvbiwiZGF0YS1rZXkiOnIuaWQsZGVmYXVsdFZhbHVlOmF9LG9uOntjaGFuZ2U6ZS51cmxGb3JtQ29udGVudENoYW5nZX19KV0sMSldfX0se2tleToib3BlcmF0aW9uIixmbjpmdW5jdGlvbihhLHIpe3JldHVybiB0KCJhLXJvdyIse30sW3IubmV3P2UuX2UoKTp0KCJhLWJ1dHRvbiIse2F0dHJzOnt0eXBlOiJsaW5rIn0sZG9tUHJvcHM6e2lubmVySFRNTDplLl9zKGUuJHQoImRlYnVnLnRhYmxlSGVhZGVyLmhvbGRlckRlbCIpKX0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe3JldHVybiBlLnVybEZvcm1EZWxldGUocil9fX0sW2UuX3YoIuWIoOmZpCIpXSldLDEpfX1dLG51bGwsITEsOTQyNTc4MTM1KX0pOmUuX2UoKV0sMSk6ZS5fZSgpLGUucmF3RmxhZz90KCJhLXJvdyIsW2UucmF3Rm9ybUZsYWc/dCgiYS1yb3ciLFtlLnJhd0Zvcm1UYWJsZUZsYWc/dCgiYS10YWJsZSIse2F0dHJzOntib3JkZXJlZDoiIixzaXplOiJzbWFsbCIscm93U2VsZWN0aW9uOmUucm93UmF3Rm9ybVNlbGVjdGlvbixjb2x1bW5zOmUudXJsRm9ybUNvbHVtbixwYWdpbmF0aW9uOmUucGFnaW5hdGlvbixkYXRhU291cmNlOmUucmF3Rm9ybURhdGEscm93S2V5OiJpZCJ9LHNjb3BlZFNsb3RzOmUuX3UoW3trZXk6InVybEZvcm1OYW1lIixmbjpmdW5jdGlvbihhLHIpe3JldHVyblt0KCJhLWlucHV0Iix7YXR0cnM6e3BsYWNlaG9sZGVyOnIuZGVzY3JpcHRpb24sImRhdGEta2V5IjpyLmlkLGRlZmF1bHRWYWx1ZTphfSxvbjp7Y2hhbmdlOmUucmF3Rm9ybU5hbWVDaGFuZ2V9fSldfX0se2tleToidXJsRm9ybVZhbHVlIixmbjpmdW5jdGlvbihhLHIpe3JldHVybltudWxsIT1yLmVudW1zP3QoImEtcm93IixbdCgiYS1zZWxlY3QiLHtzdGF0aWNTdHlsZTp7d2lkdGg6IjEwMCUifSxhdHRyczp7bW9kZTpyLmVudW1zTW9kZSxkZWZhdWx0VmFsdWU6YSwiZGF0YS1rZXkiOnIuaWQsb3B0aW9uczpyLmVudW1zfSxvbjp7Y2hhbmdlOmUucmF3Rm9ybUNvbnRlbnRFbnVtQ2hhbmdlfX0pXSwxKTp0KCJhLXJvdyIsW3QoImEtaW5wdXQiLHtjbGFzczoia25pZmU0ai1kZWJ1Zy1wYXJhbS1yZXF1aXJlIityLnJlcXVpcmUsYXR0cnM6e3BsYWNlaG9sZGVyOnIuZGVzY3JpcHRpb24sImRhdGEta2V5IjpyLmlkLGRlZmF1bHRWYWx1ZTphfSxvbjp7Y2hhbmdlOmUucmF3Rm9ybUNvbnRlbnRDaGFuZ2V9fSldLDEpXX19LHtrZXk6Im9wZXJhdGlvbiIsZm46ZnVuY3Rpb24oYSxyKXtyZXR1cm4gdCgiYS1yb3ciLHt9LFtyLm5ldz9lLl9lKCk6dCgiYS1idXR0b24iLHthdHRyczp7dHlwZToibGluayJ9LGRvbVByb3BzOntpbm5lckhUTUw6ZS5fcyhlLiR0KCJkZWJ1Zy50YWJsZUhlYWRlci5ob2xkZXJEZWwiKSl9LG9uOntjbGljazpmdW5jdGlvbih0KXtyZXR1cm4gZS5yYXdGb3JtRGVsZXRlKHIpfX19LFtlLl92KCLliKDpmaQiKV0pXSwxKX19XSxudWxsLCExLDI3NTc4MjQ0NzEpfSk6ZS5fZSgpXSwxKTplLl9lKCksdCgiZWRpdG9yLWRlYnVnLXNob3ciLHtzdGF0aWNTdHlsZTp7Im1hcmdpbi10b3AiOiI1cHgifSxhdHRyczp7dmFsdWU6ZS5yYXdUZXh0LG1vZGU6ZS5yYXdNb2RlfSxvbjp7Y2hhbmdlOmUucmF3Q2hhbmdlfX0pXSwxKTplLl9lKCldLDEpLGUuZW5hYmxlQWZ0ZXJTY3JpcHQ/dCgiYS10YWItcGFuZSIse2tleToiMyIsYXR0cnM6e3RhYjoiQWZ0ZXJTY3JpcHQifX0sW3QoImEtcm93Iix7c3RhdGljU3R5bGU6e2hlaWdodDoiMjVweCIsImxpbmUtaGVpZ2h0IjoiMjVweCJ9fSxbZS5fdigiIOWFs+S6jkFmdGVyU2NyaXB05pu06K+m57uG55qE5L2/55So5pa55rOV5Y+K5LuL57uNLOivtyIpLHQoImEiLHthdHRyczp7aHJlZjoiaHR0cHM6Ly9naXRlZS5jb20veGlhb3ltL2tuaWZlNGovd2lraXMvQWZ0ZXJTY3JpcHQiLHRhcmdldDoiX2JsYW5rIn19LFtlLl92KCLlj4LogIPmlofmoaMiKV0pXSksdCgiYS1yb3ciLFt0KCJlZGl0b3Itc2NyaXB0Iix7c3RhdGljU3R5bGU6eyJtYXJnaW4tdG9wIjoiNXB4In0sYXR0cnM6e3ZhbHVlOmUucmF3U2NyaXB0fSxvbjp7Y2hhbmdlOmUucmF3U2NyaXB0Q2hhbmdlfX0pXSwxKV0sMSk6ZS5fZSgpXSwxKV0sMSksdCgiYS1yb3ciLFt0KCJEZWJ1Z1Jlc3BvbnNlIix7cmVmOiJjaGlsZERlYnVnUmVzcG9uc2UiLGF0dHJzOntyZXNwb25zZUZpZWxkRGVzY3JpcHRpb25DaGVja2VkOmUucmVzcG9uc2VGaWVsZERlc2NyaXB0aW9uQ2hlY2tlZCxzd2FnZ2VySW5zdGFuY2U6ZS5zd2FnZ2VySW5zdGFuY2UsYXBpOmUuYXBpLGRlYnVnU2VuZDplLmRlYnVnU2VuZCxyZXNwb25zZUNvbnRlbnQ6ZS5yZXNwb25zZUNvbnRlbnQscmVzcG9uc2VDdXJsVGV4dDplLnJlc3BvbnNlQ3VybFRleHQscmVzcG9uc2VTdGF0dXM6ZS5yZXNwb25zZVN0YXR1cyxyZXNwb25zZVJhd1RleHQ6ZS5yZXNwb25zZVJhd1RleHQscmVzcG9uc2VIZWFkZXJzOmUucmVzcG9uc2VIZWFkZXJzfSxvbjp7ZGVidWdTaG93RmllbGREZXNjcmlwdGlvbkNoYW5nZTplLmRlYnVnU2hvd0ZpZWxkRGVzY3JpcHRpb25DaGFuZ2UsZGVidWdFZGl0b3JDaGFuZ2U6ZS5kZWJ1Z0VkaXRvckNoYW5nZX19KV0sMSldLDEpXSldLDEpfSksW10sITEsbnVsbCxudWxsLG51bGwpO3QuZGVmYXVsdD1rLmV4cG9ydHN9LGI2ODA6ZnVuY3Rpb24oZSx0LGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgcj1hKCIyM2U3Iiksbj1hKCJlMzMwIiksaT1hKCI1OTI2Iiksbz1hKCI0MDhhIikscz1hKCIxMTQ4IiksbD1hKCJkMDM5IiksdT1SYW5nZUVycm9yLGQ9U3RyaW5nLGM9TWF0aC5mbG9vcixoPW4ocyksbT1uKCIiLnNsaWNlKSxwPW4oMS4udG9GaXhlZCksZj1mdW5jdGlvbihlLHQsYSl7cmV0dXJuIDA9PT10P2E6dCUyPT0xP2YoZSx0LTEsYSplKTpmKGUqZSx0LzIsYSl9LGc9ZnVuY3Rpb24oZSx0LGEpe2Zvcih2YXIgcj0tMSxuPWE7KytyPDY7KW4rPXQqZVtyXSxlW3JdPW4lMWU3LG49YyhuLzFlNyl9LHc9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGE9NixyPTA7LS1hPj0wOylyKz1lW2FdLGVbYV09YyhyL3QpLHI9ciV0KjFlN30sYj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9NixhPSIiOy0tdD49MDspaWYoIiIhPT1hfHwwPT09dHx8MCE9PWVbdF0pe3ZhciByPWQoZVt0XSk7YT0iIj09PWE/cjphK2goIjAiLDctci5sZW5ndGgpK3J9cmV0dXJuIGF9O3Ioe3RhcmdldDoiTnVtYmVyIixwcm90bzohMCxmb3JjZWQ6bCgoZnVuY3Rpb24oKXtyZXR1cm4iMC4wMDAiIT09cCg4ZS01LDMpfHwiMSIhPT1wKC45LDApfHwiMS4yNSIhPT1wKDEuMjU1LDIpfHwiMTAwMDAwMDAwMDAwMDAwMDEyOCIhPT1wKDB4ZGUwYjZiM2E3NjQwMDgwLDApfSkpfHwhbCgoZnVuY3Rpb24oKXtwKHt9KX0pKX0se3RvRml4ZWQ6ZnVuY3Rpb24oZSl7dmFyIHQsYSxyLG4scz1vKHRoaXMpLGw9aShlKSxjPVswLDAsMCwwLDAsMF0scD0iIix2PSIwIjtpZihsPDB8fGw+MjApdGhyb3cgdSgiSW5jb3JyZWN0IGZyYWN0aW9uIGRpZ2l0cyIpO2lmKHMhPXMpcmV0dXJuIk5hTiI7aWYoczw9LTFlMjF8fHM+PTFlMjEpcmV0dXJuIGQocyk7aWYoczwwJiYocD0iLSIscz0tcykscz4xZS0yMSlpZih0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLGE9ZTthPj00MDk2Oyl0Kz0xMixhLz00MDk2O2Zvcig7YT49MjspdCs9MSxhLz0yO3JldHVybiB0fShzKmYoMiw2OSwxKSktNjksYT10PDA/cypmKDIsLXQsMSk6cy9mKDIsdCwxKSxhKj00NTAzNTk5NjI3MzcwNDk2LCh0PTUyLXQpPjApe2ZvcihnKGMsMCxhKSxyPWw7cj49NzspZyhjLDFlNywwKSxyLT03O2ZvcihnKGMsZigxMCxyLDEpLDApLHI9dC0xO3I+PTIzOyl3KGMsMTw8MjMpLHItPTIzO3coYywxPDxyKSxnKGMsMSwxKSx3KGMsMiksdj1iKGMpfWVsc2UgZyhjLDAsYSksZyhjLDE8PC10LDApLHY9YihjKStoKCIwIixsKTtyZXR1cm4gbD4wP3Y9cCsoKG49di5sZW5ndGgpPD1sPyIwLiIraCgiMCIsbC1uKSt2Om0odiwwLG4tbCkrIi4iK20odixuLWwpKTp2PXArdix2fX0pfX1dKTs=")))
if err != nil {
panic(err)
}
err = f.Close()
if err != nil {
panic(err)
}
}