xiaomianao666

小程序:悦读

Sep 14th, 2023
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@悦读@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi5oKm6K+7IiwiYXV0aG9yIjoiSm9lJiblsI/mo4noooTwn4yeIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSIsInZlcnNpb24iOjUzLCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6InJlYWQiLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczokLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvaG9tZVwiKSIsInNlYXJjaF91cmwiOiJoaWtlcjovL2VtcHR5P2t3PSoqIiwiZ3JvdXAiOiLikafpmIXor7siLCJzZWFyY2hGaW5kIjoianM6XG52YXIgZCA9IFtdO1xubGV0IGt3ID0gZ2V0UGFyYW0oXCJrd1wiKVxuc2V0UmVzdWx0KFt7XG4gICAgdGl0bGU6IFwi54K55Ye75byA5aeL6IGa5pCcXCIgKyBrdyxcbiAgICB1cmw6IFwiaGlrZXI6Ly9wYWdlL2p1P3A9ZnlwYWdlJmt3PVwiICsga3dcbn1dKVxuc2V0UmVzdWx0KGQpOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6IiIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIua6kOebruW9lVwiLFwicGF0aFwiOlwic291cmNlXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnZhciBtID0gTVlfUEFSQU1TLnJ1bGVzXFxudmFyIGJhc2V1cmwgPSBtLmJvb2tTb3VyY2VVcmxcXG5pZiAobS5ydWxlRXhwbG9yZS5ib29rTGlzdCkge1xcbiAgICB2YXIgcnVsZSA9IG0ucnVsZUV4cGxvcmVcXG59IGVsc2Uge1xcbiAgICB2YXIgcnVsZSA9IG0ucnVsZVNlYXJjaFxcbn1cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgIGRlc2M6IFxcXCLor7fovpPlhaXmkJzntKLlhbPplK7or41cXFwiLFxcbiAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcImt3XFxcIiwgaW5wdXQpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2Uvc2VhcmNoP3A9ZnlwYWdlJmt3PVxcXCIgKyBpbnB1dFxcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBcXFwidVxcXCI6IGJhc2V1cmwgKyBtLnNlYXJjaFVybCxcXG4gICAgICAgIFxcXCJydWxlc1xcXCI6IG0sXFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJrd1xcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgIGJvb2tTb3VyY2VOYW1lOiBtLmJvb2tTb3VyY2VOYW1lXFxuICAgIH1cXG59KTtcXG50cnkge1xcbiAgICBpZiAobS5lbmFibGVkRXhwbG9yZSAmJiBtLmV4cGxvcmVVcmwpIHtcXG4gICAgICAgIEpTT04ucGFyc2UobS5leHBsb3JlVXJsKS5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogaXRlbS5zdHlsZS5sYXlvdXRfZmxleEJhc2lzUGVyY2VudCA9PSAxID8gXFxcInRleHRfY2VudGVyXzFcXFwiIDogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogaXRlbS51cmwgPT0gXFxcIlxcXCIgPyBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgOiBcXFwiaGlrZXI6Ly9wYWdlL2Jvb2tzP3A9ZnlwYWdlXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJhbGxcXFwiOiBtLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInJ1bGVzXFxcIjogcnVsZSxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJ1XFxcIjogYmFzZXVybCArIGl0ZW0udXJsXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn0gY2F0Y2ggKGUpIHtcXG4gICAgbG9nKG0uZXhwbG9yZVVybCk7XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4u+mhtVwiLFwicGF0aFwiOlwiaG9tZVwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG5sZXQge1xcbiAgICBsb2FkLFxcbiAgICBsb2FkUnVsZXMsXFxuICAgIGdldFNlbGVjdFxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhdFxcXCIpO1xcbmxldCBkYXRhID0gbG9hZCgpO1xcbmlmIChkYXRhLmxlbmd0aCA+IDApIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi4pqZ77iP6K6+572uXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9jb25maWdcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KTtcXG4gICAgbGV0IHNlbGVjdCA9IGdldFNlbGVjdChkYXRhKTtcXG4gICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogc2VsZWN0LnVybCA9PSBpdGVtLnVybCA/IFxcXCLigJzigJxcXFwiICsgaXRlbS5uYW1lICsgXFxcIuKAneKAnVxcXCIgOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJ0YWJcXFwiLCB1cmwpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIh+aNouaIkOWKn1xcXCJcXG4gICAgICAgICAgICB9LCBpdGVtLnVybCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgfSlcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5pCc57SiXFxcIixcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcImt3XFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL2p1P3A9ZnlwYWdlJmt3PVxcXCIgKyBpbnB1dFxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLogZrlkIjmkJzntKLvvIzor7fovpPlhaXlhbPplK7or41cXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcImt3XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgbGV0IGxpc3QgPSBsb2FkUnVsZXMoc2VsZWN0Lm5hbWUpO1xcbiAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLmJvb2tTb3VyY2VOYW1lICsgYCgke2l0ZW0uYm9va1NvdXJjZUdyb3VwfSlgLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2Uvc291cmNlP3A9ZnlwYWdlXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBcXFwicnVsZXNcXFwiOiBpdGVtXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfSlcXG59IGVsc2Uge1xcbiAgICBzZXRSZXN1bHQoW3tcXG4gICAgICAgIHRpdGxlOiBcXFwi5L2g6L+Y5rKh5pyJ5Lmm5ZOm772e772e54K55oiR6L+b5YWl6K6+572uXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9jb25maWdcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbiAgICB9XSlcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMV92ZXJ0aWNhbF9waWNcIixcIm5hbWVcIjpcIuWIl+ihqFwiLFwicGF0aFwiOlwiYm9va3NcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxudmFyIHtcXG4gICAgY29udmVydCxcXG4gICAgcGFyc2VVcmwsXFxuICAgIGdldENoYXJzZXRcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvY29udmVydGVyXFxcIik7XFxudHJ5IHtcXG4gICAgLy9sb2coTVlfUEFSQU1TKTtcXG4gICAgdmFyIG0gPSBNWV9QQVJBTVMucnVsZXNcXG4gICAgLy8g6ZiF6K+7PT7op4bnlYxcXG4gICAgdmFyIHVybCA9IHBhcnNlVXJsKE1ZX1BBUkFNUy51LCBNWV9QQUdFKTtcXG4gICAgdmFyIGxpc3RydWxlID0gXFxcImJvZHkmJlxcXCIgKyBjb252ZXJ0KG0uYm9va0xpc3Quc3BsaXQoXFxcInx8XFxcIilbMF0pO1xcbiAgICBsZXQgYXV0aG9yID0gbnVsbDtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGF1dGhvciA9IGNvbnZlcnQobS5hdXRob3IpO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbiAgICBsZXQgY292ZXIgPSBudWxsO1xcbiAgICB0cnkge1xcbiAgICAgICAgY292ZXIgPSBjb252ZXJ0KG0uY292ZXJVcmwpO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbiAgICBsZXQgbmFtZSA9IG51bGw7XFxuICAgIHRyeSB7XFxuICAgICAgICBuYW1lID0gY29udmVydChtLm5hbWUpO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbiAgICBsZXQgYm9va3VybCA9IG51bGw7XFxuICAgIHRyeSB7XFxuICAgICAgICBib29rdXJsID0gY29udmVydChtLmJvb2tVcmwpO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbiAgICBsZXQgaW50cm8gPSBudWxsO1xcbiAgICB0cnkge1xcbiAgICAgICAgaW50cm8gPSBjb252ZXJ0KG0uaW50cm8pO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbiAgICBsZXQgcGRmaDEgPSAoYSwgYikgPT4ge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBpZiAoYiA9PSBudWxsKSByZXR1cm4gXFxcIlxcXCI7XFxuICAgICAgICAgICAgcmV0dXJuIHBkZmgoYSwgYik7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGxldCBwZDEgPSAoYSwgYiwgYykgPT4ge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBpZiAoYiA9PSBudWxsKSByZXR1cm4gXFxcIlxcXCI7XFxuICAgICAgICAgICAgcmV0dXJuIHBkKGEsIGIsIGMpO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiXFxcIjtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBNWV9VUkwgPSB1cmw7XFxuICAgIGlmIChNWV9QQVJBTVMuYWxsICYmIE1ZX1BBUkFNUy5hbGwuc2VhcmNoVXJsKSB7XFxuICAgICAgICBtLmNoYXJzZXQgPSBnZXRDaGFyc2V0KE1ZX1BBUkFNUy5hbGwuc2VhcmNoVXJsKTtcXG4gICAgfVxcbiAgICBsZXQgaGVhZGVycyA9IG0uY2hhcnNldCA/IHtcXG4gICAgICAgIFxcXCJDb250ZW50LVR5cGVcXFwiOiBcXFwidGV4dC9odG1sOyBjaGFyc2V0PVxcXCIgKyBtLmNoYXJzZXRcXG4gICAgfSA6IHt9O1xcbiAgICB2YXIgcmVzID0gcmVxdWVzdCh1cmwsIHtcXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnNcXG4gICAgfSlcXG4gICAgbGV0IGxpc3QgPSBwZGZhKHJlcywgbGlzdHJ1bGUpXFxuICAgIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgIGxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBsZXQgbmV4dCA9IE1ZX1BBUkFNUy5hbGwucnVsZVRvYy5uZXh0VG9jVXJsO1xcbiAgICAgICAgICAgIGxldCBuZXh0dG9jID0gbmV4dCAmJiBuZXh0ICE9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCBhYyA9IG5leHR0b2MgPyBcXFwiXFxcIjogXFxcIiNhdXRvQ2FjaGUjXFxcIjtcXG4gICAgICAgICAgICAvL2xldCBhYyA9IFxcXCIjYXV0b0NhY2hlI1xcXCI7XFxuICAgICAgICAgICAgbGV0IHUxID0gcGQxKGl0ZW0sIGJvb2t1cmwpICsgYWMgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCI7XFxuICAgICAgICAgICAgaWYgKG0uY2hhcnNldCkge1xcbiAgICAgICAgICAgICAgICB1MSA9IHUxICsgXFxcIjtnZXQ7XFxcIiArIG0uY2hhcnNldFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogKGNvdmVyID8gXFxcIm1vdmllXzFfdmVydGljYWxfcGljXFxcIiA6IFxcXCJ0ZXh0XzFcXFwiKSxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgxKGl0ZW0sIG5hbWUpLFxcbiAgICAgICAgICAgICAgICBpbWc6IChjb3ZlciA/IHBkMShpdGVtLCBjb3ZlcikgKyBcXFwiQFJlZmVyZXI9XFxcIiA6IFxcXCJoaWtlcjovL2VtcHR5XFxcIiksXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9tZW51XFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogKGF1dGhvciA/IHBkZmgxKGl0ZW0sIGF1dGhvcikgOiBcXFwiXFxcIikgKyBcXFwiXFxcXG5cXFwiICsgKGludHJvID8gcGRmaDEoaXRlbSwgaW50cm8pIDogXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcImJvb2tOYW1lXFxcIjogcGRmaDEoaXRlbSwgbmFtZSksXFxuICAgICAgICAgICAgICAgICAgICBcXFwiY292ZXJcXFwiOiAoY292ZXIgPyBwZDEoaXRlbSwgY292ZXIpICsgXFxcIkBSZWZlcmVyPVxcXCIgOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIlRvY1xcXCI6IE1ZX1BBUkFNUy5hbGwucnVsZVRvYyxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJjb250ZW50XFxcIjogTVlfUEFSQU1TLmFsbC5ydWxlQ29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogbmV4dHRvYyA/IFxcXCJoaWtlcjovL2VtcHR5I1xcXCIgKyB1MSA6IHUxLFxcbiAgICAgICAgICAgICAgICAgICAgdTE6IG5leHR0b2MgPyB1MSA6IG51bGwsXFxuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0OiBtLmNoYXJzZXQsXFxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLliJfooajliqDovb3lpLHotKXvvJpcXFwiICsgbGlzdHJ1bGUsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSlcXG4gICAgfVxcbn0gY2F0Y2ggKGUpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5Yqg6L295aSx6LSl77yaXFxcIiArIGUubWVzc2FnZSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICB9KVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0X2NlbnRlcl8xXCIsXCJuYW1lXCI6XCLorr7nva5cIixcInBhdGhcIjpcImNvbmZpZ1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG50cnkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmt7vliqDorqLpmIVcXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl6K6i6ZiF5ZCN56ew77yM5Y+W5Liq5ZCN5ZCn77yI5rOo5oSP5LiN6KaB5aGr5Zyw5Z2A77yJXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSBudWxsIHx8IGlucHV0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuI3loavmgI7kuYjog73ooYzlkaJcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChpbnB1dC5pbmNsdWRlcyhcXFwiOi8vXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4jeiDveWhq+WcsOWdgOWTpu+8jOWCu+Wunei0nVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXorqLpmIXlnLDlnYBcXFwiKS5pbnB1dCgobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgYWRkLFxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlXFxuICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhdFxcXCIpO1xcbiAgICAgICAgICAgICAgICBhZGQobmFtZSwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlKG5hbWUsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5a+85YWl5oiQ5YqfXFxcIlxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5a+85YWl5aSx6LSlXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgaW5wdXQpXFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIlxcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmt7vliqDmnKzlnLBcXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl6K6i6ZiF5ZCN56ew77yM5Y+W5Liq5ZCN5ZCn77yI6L6T5a6M54K55Ye756Gu5a6a5ZCO5Lya6Lez6L2s6YCJ5oup5Lmm5rqQ5paH5Lu255WM6Z2i77yJXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSBudWxsIHx8IGlucHV0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuI3loavmgI7kuYjog73ooYzlkaJcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChpbnB1dC5pbmNsdWRlcyhcXFwiOi8vXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4jeiDveWhq+WcsOWdgOWTpu+8jOWCu+Wunei0nVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJmaWxlU2VsZWN0Oi8vXFxcIiArICQudG9TdHJpbmcoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHMgPSBpbnB1dC5zcGxpdChcXFwiL1xcXCIpXFxuICAgICAgICAgICAgICAgIGxldCBmbmFtZSA9IHNbcy5sZW5ndGggLSAxXS5yZXBsYWNlKFxcXCJfZmlsZVNlbGVjdF9cXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgIGlmICghZm5hbWUuaW5jbHVkZXMoXFxcIi5qc29uXFxcIikgJiYgIWZuYW1lLmluY2x1ZGVzKFxcXCIudHh0XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/moLzlvI/kuI3lr7nvvIzku4XmlK/mjIFqc29u5oiWdHh05qC85byP55qE5Lmm5rqQ5paH5Lu2XFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9cXFwiICsgZm5hbWU7XFxuICAgICAgICAgICAgICAgIGxldCBjID0gZmV0Y2goXFxcImZpbGU6Ly9cXFwiICsgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICBpZiAoIWMuaW5jbHVkZXMoXFxcImJvb2tTb3VyY2VcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+agvOW8j+S4jeWvue+8jOS7heaUr+aMgeS5pua6kOaWh+S7tlxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUodXJsLCBjKTtcXG4gICAgICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgICAgIGFkZCxcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YXRcXFwiKTtcXG4gICAgICAgICAgICAgICAgYWRkKG5hbWUsIHVybCk7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGUobmFtZSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5a+85YWl5oiQ5YqfXFxcIlxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5a+85YWl5aSx6LSlXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgaW5wdXQpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMlxcXCJcXG4gICAgfSlcXG4gICAgbGV0IGxpc3QgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhdFxcXCIpLmxvYWQoKTtcXG4gICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgZGVzYzogaXRlbS51cmwsXFxuICAgICAgICAgICAgdXJsOiAkKFtcXFwi5Yig6Zmk6K6i6ZiFXFxcIiwgXFxcIue8lui+keWQjeensFxcXCIsIFxcXCLliIbkuqvorqLpmIVcXFwiLCBcXFwi5pu05paw5pWw5o2uXFxcIl0pLnNlbGVjdCgobmFtZSwgdXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi5Yig6Zmk6K6i6ZiFXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuehruiupOWIoOmZpO+8n1xcXCIpLmNvbmZpcm0oKG5hbWUsIHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aChcXFwiaGlrZXI6Ly9maWxlcy9cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvXFxcIiArIG1kNShuYW1lKSArIFxcXCIuanNvblxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YXRcXFwiKS5yZW1vdmUodXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LliKDpmaRcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LCBuYW1lLCB1cmwpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gXFxcIue8lui+keWQjeensFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiKS5pbnB1dCgobmFtZSwgdXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9cXFwiICsgbWQ1KG5hbWUpICsgXFxcIi5qc29uXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhdFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZShpbnB1dCwgdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5hbWUodXJsLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LCBuYW1lLCB1cmwpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gXFxcIuWIhuS6q+iuoumYhVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aChcXFwiaGlrZXI6Ly9maWxlcy9cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lvZPliY3orqLpmIXkuLrmnKzlnLDmlofku7bvvIzml6Dms5XliIbkuqtcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKG5hbWUsIHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGF0XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNoYXJlKG5hbWUsIHVybClcXG4gICAgICAgICAgICAgICAgICAgIH0sIG5hbWUsIHVybClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGF0XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlKG5hbWUsIHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+abtOaWsOaIkOWKn1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pu05paw5aSx6LSlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgaXRlbS5uYW1lLCBpdGVtLnVybCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxuICAgICAgICB9KVxcbiAgICB9KVxcbn0gY2F0Y2ggKGUpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi6ZSZ6K+v77yaXFxcIiArIGUubWVzc2FnZSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICB9KVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIuebruW9lVwiLFwicGF0aFwiOlwibWVudVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG52YXIgcmVzID0gZ2V0UmVzQ29kZSgpXFxubGV0IFRvYyA9IE1ZX1BBUkFNUy5Ub2NcXG5sZXQge1xcbiAgICBnZXRBcnJheSxcXG4gICAgZ2V0VGV4dCxcXG4gICAgZ2V0VXJsMCxcXG4gICAgY29udmVydFxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb252ZXJ0ZXJcXFwiKTtcXG4vL2xvZyhUb2MpO1xcbnZhciBjYWNoZXMgPSBbXTtcXG5cXG5mdW5jdGlvbiBnZXRDYWNoZSgpIHtcXG4gICAgbGV0IGMgPSByZWFkRmlsZShcXFwiY2hhcHRlci5qc29uXFxcIikgfHwgXFxcIltdXFxcIjtcXG4gICAgY2FjaGVzID0gSlNPTi5wYXJzZShjKVxcbiAgICBsZXQgdXJsID0gTVlfVVJMXFxuICAgIGFkZExpc3RlbmVyKFxcXCJvblJlZnJlc2hcXFwiLCAkLnRvU3RyaW5nKCh1cmwpID0+IHtcXG4gICAgICAgIGxldCBjID0gcmVhZEZpbGUoXFxcImNoYXB0ZXIuanNvblxcXCIpIHx8IFxcXCJbXVxcXCI7XFxuICAgICAgICBjID0gSlNPTi5wYXJzZShjKVxcbiAgICAgICAgbGV0IGNoZSA9IHtcXG4gICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICBuZXh0OiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjaGFwdGVyczogW11cXG4gICAgICAgIH07XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBpZiAoY1tpXS51cmwgPT0gY2hlLnVybCkge1xcbiAgICAgICAgICAgICAgICBjW2ldID0gY2hlO1xcbiAgICAgICAgICAgICAgICBsb2coXFxcImNsZWFyOlxcXCIgKyB1cmwpXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKFxcXCJjaGFwdGVyLmpzb25cXFwiLCBKU09OLnN0cmluZ2lmeShjKSlcXG4gICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0sIHVybCkpXFxuICAgIGZvciAobGV0IGl0IG9mIGNhY2hlcykge1xcbiAgICAgICAgaWYgKGl0LnVybCA9PSB1cmwpIHtcXG4gICAgICAgICAgICByZXR1cm4gaXQ7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHtcXG4gICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgbmV4dDogXFxcIlxcXCIsXFxuICAgICAgICBjaGFwdGVyczogW11cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBzYXZlQ2FjaGUoY2hlKSB7XFxuICAgIGxldCBjID0gY2FjaGVzXFxuICAgIGlmIChjLmxlbmd0aCA+IDEwKSB7XFxuICAgICAgICBjLnNoaWZ0KClcXG4gICAgfVxcbiAgICBsZXQgZXhpc3QgPSBmYWxzZVxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGlmIChjW2ldLnVybCA9PSBjaGUudXJsKSB7XFxuICAgICAgICAgICAgY1tpXSA9IGNoZTtcXG4gICAgICAgICAgICBleGlzdCA9IHRydWU7XFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBpZiAoIWV4aXN0KSB7XFxuICAgICAgICBjLnB1c2goY2hlKVxcbiAgICB9XFxuICAgIHNhdmVGaWxlKFxcXCJjaGFwdGVyLmpzb25cXFwiLCBKU09OLnN0cmluZ2lmeShjKSlcXG59XFxuXFxuXFxubGV0IG5leHQgPSBUb2MubmV4dFRvY1VybDtcXG5sZXQgbGlzdCA9IFtdO1xcbmlmIChuZXh0ICYmIG5leHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgaWYgKG5leHQgPT0gXFxcIm9wdGlvbkB2YWx1ZVxcXCIpIHtcXG4gICAgICAgIG5leHQgPSBcXFwidGV4dC7kuIvkuIDpobUmJmhyZWZcXFwiO1xcbiAgICB9XFxuICAgIE1ZX1VSTCA9IE1ZX1BBUkFNUy51MSB8fCBNWV9VUkw7XFxuICAgIGxldCBoZWFkZXJzID0gTVlfUEFSQU1TLmNoYXJzZXQgPyB7XFxuICAgICAgICBcXFwiY2hhcnNldFxcXCI6IE1ZX1BBUkFNUy5jaGFyc2V0LFxcbiAgICAgICAgXFxcIkNvbnRlbnQtVHlwZVxcXCI6IFxcXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9XFxcIiArIE1ZX1BBUkFNUy5jaGFyc2V0XFxuICAgIH0gOiB7fTtcXG4gICAgbmV4dCA9IGNvbnZlcnQobmV4dCk7XFxuICAgIC8vbG9nKG5leHQpO1xcbiAgICBsZXQgY2FjaGUgPSBnZXRDYWNoZSgpO1xcbiAgICBsZXQgbnVybCA9IGNhY2hlLm5leHQ7XFxuICAgIGlmIChudXJsID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBudXJsID0gTVlfVVJMO1xcbiAgICB9XFxuICAgIGxldCBpZCA9IE1ZX1VSTCArIFxcXCJAQFxcXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcXG4gICAgbGV0IGFpZCA9IFxcXCJhXFxcIiArIGlkO1xcbiAgICBwdXRNeVZhcihhaWQsIFxcXCIxXFxcIik7XFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoYWlkKSA9PiB7XFxuICAgICAgICBsb2coXFxcImNsZWFyOiBcXFwiICsgYWlkKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoYWlkKTtcXG4gICAgfSwgYWlkKSk7XFxuICAgIGxldCBhcnIgPSBjYWNoZS5jaGFwdGVycyB8fCBbXTtcXG4gICAgdmFyIGNjID0gKGEpID0+IHtcXG4gICAgICAgIHJldHVybiBhLm1hcChpdGVtID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBnZXRUZXh0KGl0ZW0sIFRvYy5jaGFwdGVyTmFtZSlcXG4gICAgICAgICAgICBpZiAodGl0bGUgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHUxID0gZ2V0VXJsMChpdGVtLCBUb2MuY2hhcHRlckxpc3QsIFRvYy5jaGFwdGVyVXJsKSArIFxcXCIjYXV0b1BhZ2UjI3JlYWRUaGVtZSNcXFwiO1xcbiAgICAgICAgICAgICAgICBpZiAoTVlfUEFSQU1TLmNoYXJzZXQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHUxID0gdTEgKyBcXFwiO2dldDtcXFwiICsgTVlfUEFSQU1TLmNoYXJzZXQ7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9jb250ZW50XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IE1ZX1BBUkFNUy5jb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdTFcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCJcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICAvL2xvZyhjYWNoZS5uZXh0ICsgXFxcIjpcXFwiICsgY2FjaGUuY2hhcHRlcnMubGVuZ3RoKTtcXG4gICAgbGV0IGQyID0gY2MoYXJyKTtcXG4gICAgZDIucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuWKoOi9veS4re+8jOivt+eojeWAmS4uLlxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IGlkXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBkMi51bnNoaWZ0KHtcXG4gICAgICAgIHRpdGxlOiBNWV9QQVJBTVMuYm9va05hbWUsXFxuICAgICAgICBpbWc6IE1ZX1BBUkFNUy5jb3ZlcixcXG4gICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyXFxcIlxcbiAgICB9KTtcXG4gICAgc2V0UmVzdWx0KGQyKTtcXG4gICAgaGVhZGVyc1tcXFwiUmVmZXJlclxcXCJdID0gTVlfVVJMLnNwbGl0KFxcXCIjXFxcIilbMF07XFxuICAgIGlmIChudXJsICE9IE1ZX1VSTCkge1xcbiAgICAgICAgTVlfVVJMID0gbnVybDtcXG4gICAgICAgIHJlcyA9IGZldGNoKE1ZX1VSTCwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnNcXG4gICAgICAgIH0pO1xcbiAgICB9IGVsc2UgaWYgKE1ZX1BBUkFNUy51MSkge1xcbiAgICAgICAgcmVzID0gZmV0Y2goTVlfVVJMLCB7XFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVyc1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgdmFyIHVybHMgPSBbbnVybF07XFxuICAgIHdoaWxlICh0cnVlKSB7XFxuICAgICAgICBsZXQgYSA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxuICAgICAgICAgICAgYS5wdXNoKGl0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGNhY2hlLmNoYXB0ZXJzID0gYTtcXG4gICAgICAgIGxldCBhcnIxID0gZ2V0QXJyYXkocmVzLCBUb2MuY2hhcHRlckxpc3QpO1xcbiAgICAgICAgLy9sb2coYXJyMSk7XFxuICAgICAgICBpZiAoYXJyMSAmJiBhcnIxLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBhcnIxKSB7XFxuICAgICAgICAgICAgICAgIGFyci5wdXNoKGl0KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGFkZEl0ZW1CZWZvcmUoaWQsIGNjKGFycjEpKTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgaWYgKGdldE15VmFyKGFpZCwgXFxcIjBcXFwiKSAhPSBcXFwiMVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgbG9nKFxcXCJicmVhazogXFxcIiArIGFpZCk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKDUwKTtcXG4gICAgICAgICAgICBsZXQgbnVybDIgPSBwZChyZXMsIFxcXCJib2R5JiZcXFwiICsgbmV4dCk7XFxuICAgICAgICAgICAgaWYgKG51cmwyICYmIG51cmwyICE9IFxcXCJcXFwiICYmICF1cmxzLmluY2x1ZGVzKG51cmwyKSkge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzW1xcXCJSZWZlcmVyXFxcIl0gPSBjYWNoZS5uZXh0LnNwbGl0KFxcXCIjXFxcIilbMF07XFxuICAgICAgICAgICAgICAgIHVybHMucHVzaChudXJsMik7XFxuICAgICAgICAgICAgICAgIGNhY2hlLm5leHQgPSBudXJsMjtcXG4gICAgICAgICAgICAgICAgbnVybCA9IG51cmwyO1xcbiAgICAgICAgICAgICAgICBNWV9VUkwgPSBudXJsO1xcbiAgICAgICAgICAgICAgICByZXMgPSBmZXRjaChudXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBkZWxldGVJdGVtKGlkKTtcXG4gICAgLy9sb2coY2FjaGUubmV4dCArIFxcXCI6ZW5kOlxcXCIgKyBjYWNoZS5jaGFwdGVycy5sZW5ndGgpO1xcbiAgICBzYXZlQ2FjaGUoY2FjaGUpO1xcbn0gZWxzZSB7XFxuICAgIGxpc3QgPSBnZXRBcnJheShyZXMsIFRvYy5jaGFwdGVyTGlzdCk7XFxuICAgIGxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgIC8vbG9nKGl0ZW0pOyAgICBcXG4gICAgICAgIHZhciB0aXRsZSA9IGdldFRleHQoaXRlbSwgVG9jLmNoYXB0ZXJOYW1lKVxcbiAgICAgICAgaWYgKHRpdGxlICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgbGV0IHUxID0gZ2V0VXJsMChpdGVtLCBUb2MuY2hhcHRlckxpc3QsIFRvYy5jaGFwdGVyVXJsKSArIFxcXCIjYXV0b1BhZ2UjI3JlYWRUaGVtZSNcXFwiO1xcbiAgICAgICAgICAgIGlmIChNWV9QQVJBTVMuY2hhcnNldCkge1xcbiAgICAgICAgICAgICAgICB1MSA9IHUxICsgXFxcIjtnZXQ7XFxcIiArIE1ZX1BBUkFNUy5jaGFyc2V0O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9jb250ZW50XFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IE1ZX1BBUkFNUy5jb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1MVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgIHZhciBjcCA9IGQubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgXFxcInRpdGxlXFxcIjogaXRlbS50aXRsZSxcXG4gICAgICAgICAgICBcXFwidXJsXFxcIjogaXRlbS5leHRyYS51cmwucmVwbGFjZShcXFwiI2F1dG9QYWdlIyNyZWFkVGhlbWUjXFxcIiwgXFxcIlxcXCIpXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICBkLnVuc2hpZnQoe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5LiL6L29XFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZG93bmxvYWQudmlldyNub1JlY29yZEhpc3RvcnkjI25vUmVmcmVzaCMjbm9IaXN0b3J5Iz9ydWxlPeacrOWcsOi1hOa6kOeuoeeQhlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBjaGFwdGVyTGlzdDogY3AsXFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWaWV3OiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgICAgIGluZm86IHtcXG4gICAgICAgICAgICAgICAgICAgIGJvb2tOYW1lOiBNWV9QQVJBTVMuYm9va05hbWUsXFxuICAgICAgICAgICAgICAgICAgICBib29rVG9wUGljOiBNWV9QQVJBTVMuY292ZXIsXFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZTogXFxcIuaCpuivu1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGU6ICQudG9TdHJpbmcoKE1ZX1BBUkFNUywgcjApID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvbnZlcnRlcj9ydWxlPVxcXCIgKyByMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHJlcXVlc3QoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydWxlID0gTVlfUEFSQU1TLmNvbnRlbnQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHIgPSBjb252ZXJ0KHJ1bGUuY29udGVudCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHIxID0gci5zcGxpdChcXFwiJiZcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcjIgPSByMS5zbGljZSgwLCByMS5sZW5ndGggLSAxKS5qb2luKFxcXCImJlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKHJlcywgXFxcImJvZHkmJlxcXCIgKyByMik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHQgPSBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIGFycikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCA9IGl0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiXFxcXG5cXFwiLCBcXFwiZ1xcXCIpLCBcXFwiLS1ici0tXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGl0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBwZGZoKGl0LCBcXFwiVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIi0tYnItLVxcXCIsIFxcXCJnXFxcIiksIFxcXCI8YnI+XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0MiA9IHQuc3BsaXQoXFxcIjxicj5cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXQyIG9mIHQyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQyID09IFxcXCJcXFwiIHx8IGl0Mi5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0Mi5zdGFydHNXaXRoKFxcXCLjgIBcXFwiKSAmJiAhaXQyLnN0YXJ0c1dpdGgoXFxcIiZuYnNwOyZuYnNwO1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQyID0gXFxcIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xcXCIgKyBpdDIudHJpbSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUucmVwbGFjZVJlZ2V4KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQyID0gaXQyLnJlcGxhY2UobmV3IFJlZ0V4cChydWxlLnJlcGxhY2VSZWdleC5yZXBsYWNlKFxcXCIjI1xcXCIsIFxcXCJcXFwiKSwgXFxcImdcXFwiKSwgXFxcIlxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQyID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0ICs9IGl0MiArIFxcXCJcXFxcblxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHRcXG4gICAgICAgICAgICAgICAgICAgIH0sIE1ZX1BBUkFNUywgTVlfUlVMRS50aXRsZSksXFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFwibm92ZWxcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGQudW5zaGlmdCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmnKrop6PmnpDliLDnm67lvZXliJfooahcXFwiLFxcbiAgICAgICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBkLnVuc2hpZnQoe1xcbiAgICAgICAgdGl0bGU6IE1ZX1BBUkFNUy5ib29rTmFtZSxcXG4gICAgICAgIGltZzogTVlfUEFSQU1TLmNvdmVyLFxcbiAgICAgICAgdXJsOiBNWV9VUkwsXFxuICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzFfdmVydGljYWxfcGljX2JsdXJcXFwiXFxuICAgIH0pXFxuICAgIHNldFJlc3VsdChkKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlhoXlrrlcIixcInBhdGhcIjpcImNvbnRlbnRcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxubGV0IHtcXG4gICAgY29udmVydFxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb252ZXJ0ZXJcXFwiKTtcXG52YXIgcmVzID0gZ2V0UmVzQ29kZSgpO1xcbnZhciBydWxlID0gTVlfUEFSQU1TLmNvbnRlbnRcXG5sZXQgciA9IGNvbnZlcnQocnVsZS5jb250ZW50KTtcXG5sZXQgcjEgPSByLnNwbGl0KFxcXCImJlxcXCIpO1xcbmxldCByMiA9IHIxLnNsaWNlKDAsIHIxLmxlbmd0aCAtIDEpLmpvaW4oXFxcIiYmXFxcIik7XFxubGV0IGFyciA9IHBkZmEocmVzLCBcXFwiYm9keSYmXFxcIiArIHIyKTtcXG4vL2xvZyhhcnIpO1xcbmZvciAobGV0IGl0IG9mIGFycikge1xcbiAgICBpdCA9IGl0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiXFxcXG5cXFwiLCBcXFwiZ1xcXCIpLCBcXFwiLS1ici0tXFxcIik7XFxuICAgIC8vbG9nKGl0KTtcXG4gICAgdmFyIHQgPSBwZGZoKGl0LCBcXFwiVGV4dFxcXCIpO1xcbiAgICB0ID0gdC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIi0tYnItLVxcXCIsIFxcXCJnXFxcIiksIFxcXCI8YnI+XFxcIik7XFxuICAgIGlmICh0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBjb250aW51ZVxcbiAgICB9XFxuICAgIGxldCB0MiA9IHQuc3BsaXQoXFxcIjxicj5cXFwiKTtcXG4gICAgZm9yIChsZXQgaXQyIG9mIHQyKSB7XFxuICAgICAgICBpZiAoaXQyID09IFxcXCJcXFwiIHx8IGl0Mi5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgIGNvbnRpbnVlXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIWl0Mi5zdGFydHNXaXRoKFxcXCLjgIBcXFwiKSAmJiAhaXQyLnN0YXJ0c1dpdGgoXFxcIiZuYnNwOyZuYnNwO1xcXCIpKSB7XFxuICAgICAgICAgICAgaXQyID0gXFxcIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xcXCIgKyBpdDIudHJpbSgpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHJ1bGUucmVwbGFjZVJlZ2V4KSB7XFxuICAgICAgICAgICAgaXQyID0gaXQyLnJlcGxhY2UobmV3IFJlZ0V4cChydWxlLnJlcGxhY2VSZWdleC5yZXBsYWNlKFxcXCIjI1xcXCIsIFxcXCJcXFwiKSwgXFxcImdcXFwiKSwgXFxcIlxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaXQyID09IFxcXCJcXFwiIHx8IGl0MiA9PSBcXFwiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XFxcIikge1xcbiAgICAgICAgICAgIGNvbnRpbnVlXFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdDIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9XFxufVxcbmQudW5zaGlmdCh7XFxuICAgIHRpdGxlOiBcXFwiPGJpZz5cXFwiICsgTVlfUEFSQU1TLnRpdGxlICsgXFxcIjwvYmlnPlxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbn0pXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMV92ZXJ0aWNhbF9waWNcIixcIm5hbWVcIjpcIuaQnOe0olwiLFwicGF0aFwiOlwic2VhcmNoXCIsXCJydWxlXCI6XCJqczpcXG5sZXQge1xcbiAgICBzZWFyY2hcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3NcXFwiKTtcXG5sZXQgZCA9IFtdO1xcbmxldCBrdyA9IGdldFBhcmFtKFxcXCJrd1xcXCIpO1xcbmxldCBzID0ga3c7XFxuc2V0UGFnZVRpdGxlKFxcXCLmkJzntKJcXFwiICsga3cgKyBcXFwiIFxcXCIgKyBNWV9QQVJBTVMuYm9va1NvdXJjZU5hbWUpO1xcbmlmICh0eXBlb2YoZ2V0U2VhcmNoTW9kZSkgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgY29uZmlybSh7XFxuICAgICAgICB0aXRsZTogXFxcIua4qemmqOaPkOekulxcXCIsXFxuICAgICAgICBjb250ZW50OiBcXFwi5L2g55qE6L2v5Lu254mI5pys5aSq5L2O77yM5pu05paw5Yiw5pyA5paw54mI5omN6IO95L2/55So5pys6KeE5YiZXFxcIlxcbiAgICB9KVxcbn1cXG5sZXQgbWF0Y2hNdXN0ID0gZ2V0U2VhcmNoTW9kZSgpID09IDE7XFxubGV0IHRpcCA9IFxcXCLnsr7noa7ljLnphY3vvJpcXFwiICsgKG1hdGNoTXVzdCA/IFxcXCLmmK9cXFwiIDogXFxcIuWQplxcXCIpO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB0aXAsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHNldFNlYXJjaE1vZGUoZ2V0U2VhcmNoTW9kZSgpID09IDAgPyAxIDogMCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vT0tcXFwiO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgIH0pO1xcbn1cXG5sZXQgZDIgPSBzZWFyY2goTVlfUEFSQU1TLnJ1bGVzLCBrdywgTVlfUEFHRSk7XFxuZm9yIChsZXQgaXQgb2YgZDIpIHtcXG4gICAgaWYgKCFtYXRjaE11c3QgfHwgc2VhcmNoQ29udGFpbnMoaXQudGl0bGUsIHMpKSB7XFxuICAgICAgICBpdC50aXRsZSA9IGl0LnRpdGxlLmluY2x1ZGVzKFxcXCLigJzigJzigJ3igJ1cXFwiKSA/IGl0LnRpdGxlIDogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBpdC50aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIjxlbT58PC9lbT5cXFwiLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXCJnXFxcIiksIFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcIj5cXFwiICsgcyArIFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcIilcXG4gICAgICAgIGQucHVzaChpdCk7XFxuICAgIH1cXG59XFxuXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6L2s5o2iXCIsXCJwYXRoXCI6XCJjb252ZXJ0ZXJcIixcInJ1bGVcIjpcInZhciBjb252ZXJ0ID0gKHN0cikgPT4ge1xcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL0AvZywgXFxcIiYmXFxcIilcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcLlswLTldL2csIGZ1bmN0aW9uKGEpIHtcXG4gICAgICAgICAgICByZXR1cm4gYS5yZXBsYWNlKFxcXCIuXFxcIiwgXFxcIixcXFwiKVxcbiAgICAgICAgfSlcXG4gICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIiBcXFwiLCBcXFwiZ1xcXCIpLCBcXFwiJiZcXFwiKVxcbiAgICAgICAgLnJlcGxhY2UoL3RleHRcXFxcLiguKj8pJiYvZywgXFxcIio6Y29udGFpbnMoJDEpLC0xJiZcXFwiKVxcbiAgICAgICAgLnJlcGxhY2UoLy1jbGFzc1xcXFwuL2csIFxcXCIuXFxcIilcXG4gICAgICAgIC5yZXBsYWNlKC9jbGFzc1xcXFwuL2csIFxcXCIuXFxcIilcXG4gICAgICAgIC5yZXBsYWNlKC90YWdcXFxcLi9nLCBcXFwiXFxcIilcXG4gICAgICAgIC5yZXBsYWNlKC9pZFxcXFwuL2csIFxcXCIjXFxcIilcXG4gICAgICAgIC5yZXBsYWNlKC8jIy9nLCBcXFwiIVxcXCIpXFxuICAgICAgICAucmVwbGFjZSgvJiYoW2EtekEtWlxcXFwuXFxcXC1dKz8pIShbMC05XSkvZywgXFxcIi0tJDEsJDImJiQxXFxcIilcXG4gICAgICAgIC5yZXBsYWNlKFxcXCJ0ZXh0XFxcIiwgXFxcIlRleHRcXFwiKTtcXG59O1xcbmxldCBnZXRBcnJheSA9IChodG1sLCBydWxlKSA9PiB7XFxuICAgIGxldCByMSA9IHJ1bGUuc3BsaXQoXFxcIiFcXFwiKVswXS5zcGxpdChcXFwifHxcXFwiKTtcXG4gICAgbGV0IGMgPSBjb252ZXJ0KHIxWzBdKTtcXG4gICAgaWYgKGMuaW5jbHVkZXMoXFxcIiYmbGkmJmFcXFwiKSAmJiBjW2MubGVuZ3RoIC0gMV0gPT0gXFxcImFcXFwiKSB7XFxuICAgICAgICBjID0gYy5yZXBsYWNlKFxcXCImJmxpJiZhXFxcIiwgXFxcIiYmbGlcXFwiKTtcXG4gICAgfVxcbiAgICBsb2coYyk7XFxuICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiZcXFwiICsgYyk7XFxuICAgIGlmIChyMS5sZW5ndGggPiAxKSB7XFxuICAgICAgICBsZXQgcjIgPSByMVsxXS5zcGxpdChcXFwiOlxcXCIpO1xcbiAgICAgICAgbGV0IHIzID0gW107XFxuICAgICAgICBmb3IgKGxldCBpdCBvZiByMikge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGxldCBpID0gcGFyc2VJbnQoaXQpO1xcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4oaSkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHIzLnB1c2goaSk7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBhcnIyID0gW107XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGlmIChyMy5pbmRleE9mKGkpIDwgMCkge1xcbiAgICAgICAgICAgICAgICBhcnIyLnB1c2goYXJyW2ldKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gYXJyMjtcXG4gICAgfVxcbiAgICBsb2coXFxcIuiOt+WPluWksei0pe+8jOWksei0peWumuS9je+8mlxcXCIgKyByMSlcXG4gICAgcmV0dXJuIGFycjtcXG59O1xcbmxldCBnZXRUZXh0ID0gKGh0bWwsIHJ1bGUpID0+IHtcXG4gICAgdmFyIHJ1ID0gY29udmVydChydWxlKVxcbiAgICB2YXIgciA9IHBkZmgoaHRtbCwgcnUpXFxuICAgIGlmIChyID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBsb2coXFxcIui/lOWbnuS4uuepuu+8jOWPr+iDveaYr+WumuS9jeWksei0pe+8mlxcXCIgKyBydWxlKVxcbiAgICB9XFxuICAgIHJldHVybiByXFxufTtcXG5sZXQgZ2V0VXJsMCA9IChodG1sLCBwYXJlbnRSdWxlLCBydWxlKSA9PiB7XFxuICAgIGlmIChwYXJlbnRSdWxlICE9IG51bGwpIHtcXG4gICAgICAgIHBhcmVudFJ1bGUgPSBwYXJlbnRSdWxlLnNwbGl0KFxcXCIhXFxcIilbMF07XFxuICAgIH1cXG4gICAgbGV0IHAgPSBwYXJlbnRSdWxlICE9IG51bGwgJiYgcGFyZW50UnVsZVtwYXJlbnRSdWxlLmxlbmd0aCAtIDFdID09IFxcXCJhXFxcIiA/IFxcXCJhJiZcXFwiIDogXFxcIlxcXCI7XFxuICAgIGxldCByID0gcGQoaHRtbCwgcCArIGNvbnZlcnQocnVsZS5zcGxpdChcXFwiIyNcXFwiKVswXSkpO1xcbiAgICBpZiAociA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgbG9nKFxcXCLov5Tlm57kuLrnqbrvvIzlj6/og73mmK/lrprkvY3lpLHotKXvvJpcXFwiICsgcnVsZSlcXG4gICAgfVxcbiAgICByZXR1cm4gclxcbn07XFxubGV0IHBhcnNlVXJsID0gKHVybCwgcGFnZSkgPT4ge1xcbiAgICB1cmwgPSB1cmwucmVwbGFjZShuZXcgUmVnRXhwKFxcXCJ7e3BhZ2V9fVxcXCIsIFxcXCJnXFxcIiksIHBhZ2UpO1xcbiAgICBsZXQgcyA9IHVybC5zcGxpdChcXFwiPCxcXFwiKTtcXG4gICAgaWYgKHMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgaWYgKHBhZ2UgPiAxKSB7XFxuICAgICAgICAgICAgbGV0IHMyID0gc1sxXS5zcGxpdChcXFwiPlxcXCIpO1xcbiAgICAgICAgICAgIHVybCA9IHNbMF0gKyBzMlswXSArIChzMi5sZW5ndGggPiAxID8gczJbMV0gOiBcXFwiXFxcIilcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdXJsID0gc1swXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gdXJsO1xcbn1cXG5sZXQgZ2V0Q2hhcnNldCA9IChzZWFyY2hVcmwpID0+IHtcXG4gICAgaWYgKHNlYXJjaFVybCkge1xcbiAgICAgICAgaWYgKHNlYXJjaFVybC5pbmNsdWRlcygnXFxcImdia1xcXCInKSB8fCBzZWFyY2hVcmwuaW5jbHVkZXMoXFxcIidnYmsnXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImdia1xcXCJcXG4gICAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVXJsLmluY2x1ZGVzKCdcXFwiZ2IyMzEyXFxcIicpIHx8IHNlYXJjaFVybC5pbmNsdWRlcyhcXFwiJ2diMjMxMidcXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiZ2IyMzEyXFxcIlxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBudWxsXFxufVxcbiQuZXhwb3J0cyA9IHtcXG4gICAgZ2V0QXJyYXk6IGdldEFycmF5LFxcbiAgICBjb252ZXJ0OiBjb252ZXJ0LFxcbiAgICBnZXRUZXh0OiBnZXRUZXh0LFxcbiAgICBnZXRVcmwwOiBnZXRVcmwwLFxcbiAgICBwYXJzZVVybDogcGFyc2VVcmwsXFxuICAgIGdldENoYXJzZXQ6IGdldENoYXJzZXRcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLogZrmkJxcIixcInBhdGhcIjpcImp1XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmxldCB7XFxuICAgIHNlYXJjaCxcXG4gICAgbGlzdFJ1bGVzXFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3NzXFxcIik7XFxubGV0IHtcXG4gICAgYWxsLFxcbiAgICB1c2UsXFxuICAgIGRhdGFcXG59ID0gbGlzdFJ1bGVzKE1ZX1BBR0UpO1xcbmRhdGEgPSBkYXRhIHx8IFtdO1xcbmxldCBzID0gZ2V0UGFyYW0oXFxcImt3XFxcIik7XFxuc2V0UGFnZVRpdGxlKFxcXCLmkJzntKJcXFwiICsgcyk7XFxuaWYgKHR5cGVvZihnZXRTZWFyY2hNb2RlKSA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICBjb25maXJtKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5rip6aao5o+Q56S6XFxcIixcXG4gICAgICAgIGNvbnRlbnQ6IFxcXCLkvaDnmoTova/ku7bniYjmnKzlpKrkvY7vvIzmm7TmlrDliLDmnIDmlrDniYjmiY3og73kvb/nlKjmnKzop4TliJlcXFwiXFxuICAgIH0pXFxufVxcbmxldCBtYXRjaE11c3QgPSBnZXRTZWFyY2hNb2RlKCkgPT0gMTtcXG5sZXQgdGlwID0gXFxcIuaQnOe0oua6kO+8mlxcXCIgKyB1c2UgKyBcXFwiL1xcXCIgKyBhbGwgKyBcXFwiICDnsr7noa7ljLnphY3vvJpcXFwiICsgKG1hdGNoTXVzdCA/IFxcXCLmmK9cXFwiIDogXFxcIuWQplxcXCIpO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB0aXAsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHNldFNlYXJjaE1vZGUoZ2V0U2VhcmNoTW9kZSgpID09IDAgPyAxIDogMCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vT0tcXFwiO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBcXFwieXVlZHUtcy1oXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59IGVsc2UgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICB1cGRhdGVJdGVtKFxcXCJ5dWVkdS1zLWhcXFwiLCB7XFxuICAgICAgICB0aXRsZTogdGlwXFxuICAgIH0pO1xcbn1cXG5sZXQgcCA9IE1ZX1BBR0U7XFxubGV0IHBhZ2VpZCA9IFxcXCJ5dWVkdS1wYWdlXFxcIiArIE1ZX1BBR0U7XFxuaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLliqDovb3nrKxcXFwiICsgTVlfUEFHRSArIFxcXCLpobXkuK3vvIzov5vluqbvvJoxL1xcXCIgKyBkYXRhLmxlbmd0aCxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcXG5pZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgIC8v5aSa57q/56iL5Yqg6L29XFxuICAgIGxldCB0YXNrcyA9IGRhdGEubWFwKGl0ID0+IHtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocnVsZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VhcmNoKHJ1bGUsIHMsIDEpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgcGFyYW06IGl0LFxcbiAgICAgICAgICAgIGlkOiBcXFwicnVsZUBcXFwiICsgaXQubmFtZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG4gICAgYmF0Y2hFeGVjdXRlKHRhc2tzLCB7XFxuICAgICAgICBmdW5jOiBmdW5jdGlvbihwYXJhbSwgaWQsIGVycm9yLCByZXN1bHQpIHtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibGlzdGVuZXI6IFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxuICAgICAgICAgICAgcGFyYW0uaSA9IHBhcmFtLmkgKyAxO1xcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmogPSBwYXJhbS5qICsgMTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hNdXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VhcmNoQ29udGFpbnMoaXQudGl0bGUsIHMpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXh0cmEgPSBpdC5leHRyYSB8fCB7fTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5pZCA9IFxcXCJfX2FwcFxcXCIgKyBNWV9QQUdFICsgXFxcIkBcXFwiICsgcGFyYW0uajtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5ib29rTmFtZSA9IGl0LnRpdGxlXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuY292ZXIgPSBpdC5waWNfdXJsIHx8IGl0LmltZ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1CZWZvcmUocGFnZWlkLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC50aXRsZS5pbmNsdWRlcyhcXFwi4oCc4oCc4oCd4oCdXFxcIikgPyBpdC50aXRsZSA6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgaXQudGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKFxcXCI8ZW0+fDwvZW0+XFxcIiwgXFxcImdcXFwiKSwgXFxcIlxcXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChzLCBcXFwiZ1xcXCIpLCBcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiAjMUU5MEZGXFxcXFxcXCI+XFxcIiArIHMgKyBcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBpdC5kZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LnVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogaXQucGljX3VybCB8fCBpdC5pbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBpdC5waWNfdXJsIHx8IGl0LmltZyA/ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycgOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IGV4dHJhXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG5cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHBhcmFtLmkgPj0gcGFyYW0uYWxsKSB7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0ocGFnZWlkKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliqDovb3nrKxcXFwiICsgTVlfUEFHRSArIFxcXCLpobXkuK3vvIzov5vluqbvvJpcXFwiICsgKHBhcmFtLmkgKyAxKSArIFxcXCIvXFxcIiArIHBhcmFtLmFsbCxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAgcGFyYW06IHtcXG4gICAgICAgICAgICBhbGw6IGRhdGEubGVuZ3RoLFxcbiAgICAgICAgICAgIGk6IDAsXFxuICAgICAgICAgICAgajogLTFcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57Si6L6F5YqpXCIsXCJwYXRoXCI6XCJzc1wiLFwicnVsZVwiOlwidmFyIHtcXG4gICAgY29udmVydCxcXG4gICAgcGFyc2VVcmwsXFxuICAgIGdldENoYXJzZXRcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvY29udmVydGVyXFxcIik7XFxubGV0IHNlYXJjaCA9IChydWxlLCBrdywgcGFnZSkgPT4ge1xcbiAgICBsZXQgZCA9IFtdO1xcbiAgICBsZXQgbSA9IHJ1bGUucnVsZVNlYXJjaFxcbiAgICAvLyDpmIXor7s9PuinhueVjFxcbiAgICBsZXQgdSA9IHJ1bGUuc2VhcmNoVXJsLnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSA/IHJ1bGUuc2VhcmNoVXJsIDogcnVsZS5ib29rU291cmNlVXJsICsgcnVsZS5zZWFyY2hVcmw7XFxuICAgIC8vbG9nKG0pO1xcbiAgICBsZXQgdXJsMSA9IHBhcnNlVXJsKHUsIHBhZ2UpLnJlcGxhY2UobmV3IFJlZ0V4cChcXFwie3trZXl9fVxcXCIsIFxcXCJnXFxcIiksIGt3KTtcXG4gICAgbGV0IHVybDIgPSB1cmwxLnNwbGl0KFxcXCIse1xcXCIpO1xcbiAgICBsZXQgdXJsID0gdXJsMlswXTtcXG4gICAgbGV0IGhlYWRlcnMgPSB7fTtcXG4gICAgbGV0IG1ldGhvZCA9IFxcXCJnZXRcXFwiO1xcbiAgICBsZXQgYm9keSA9IG51bGw7XFxuICAgIGxldCBjID0gZ2V0Q2hhcnNldCh1cmwxKTtcXG4gICAgaWYgKGMpIHtcXG4gICAgICAgIGhlYWRlcnMuY2hhcnNldCA9IGM7XFxuICAgICAgICBoZWFkZXJzW1xcXCJDb250ZW50LVR5cGVcXFwiXSA9IFxcXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9XFxcIiArIGM7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIGlmICh1cmwyLmxlbmd0aCA+IDEgJiYgdXJsMS5zdWJzdHJpbmcodXJsMS5sZW5ndGggLSAxLCB1cmwxLmxlbmd0aCkgPT0gXFxcIn1cXFwiKSB7XFxuICAgICAgICAgICAgbGV0IGV4dCA9IFxcXCJ7XFxcIiArIHVybDEuc3Vic3RyaW5nKHVybDEuaW5kZXhPZihcXFwiLHtcXFwiKSArIDIsIHVybDEubGVuZ3RoKTtcXG4gICAgICAgICAgICAvL2xvZyhleHQpO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGV4dCA9IEpTT04ucGFyc2UoZXh0KTtcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcImV4dD1cXFwiICsgZXh0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGV4dC5tZXRob2QgJiYgZXh0Lm1ldGhvZCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBleHQubWV0aG9kO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZXh0LmJvZHkgJiYgZXh0LmJvZHkgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgYm9keSA9IGV4dC5ib2R5O1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzW1xcXCJDb250ZW50LVR5cGVcXFwiXSA9IFxcXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXFwiICsgKGhlYWRlcnMuY2hhcnNldCA/IFxcXCI7Y2hhcnNldD1cXFwiICsgaGVhZGVycy5jaGFyc2V0IDogXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgaWYgKHVybDEuaW5jbHVkZXMoJ1xcXCJQT1NUXFxcIicpIHx8IHVybDEuaW5jbHVkZXMoJ1xcXCJwb3N0XFxcIicpKSB7XFxuICAgICAgICAgICAgbWV0aG9kID0gXFxcInBvc3RcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGlmIChtZXRob2QgPT0gXFxcInBvc3RcXFwiIHx8IG1ldGhvZCA9PSBcXFwiUE9TVFxcXCIpIHtcXG4gICAgICAgIGxldCBjdCA9IGhlYWRlcnNbXFxcIkNvbnRlbnQtVHlwZVxcXCJdO1xcbiAgICAgICAgaGVhZGVyc1tcXFwiQ29udGVudC1UeXBlXFxcIl0gPSBjdCA/IGN0LnJlcGxhY2UoXFxcInRleHQvaHRtbFxcXCIsIFxcXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXFwiKSA6IFxcXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXFwiO1xcbiAgICB9XFxuXFxuICAgIGxldCBsaXN0cnVsZSA9IFxcXCJib2R5JiZcXFwiICsgY29udmVydChtLmJvb2tMaXN0KS5zcGxpdChcXFwifHxcXFwiKVswXVxcbiAgICBsZXQgYXV0aG9yID0gbnVsbDtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGF1dGhvciA9IGNvbnZlcnQobS5hdXRob3IpO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbiAgICBsZXQgY292ZXIgPSBudWxsO1xcbiAgICB0cnkge1xcbiAgICAgICAgY292ZXIgPSBjb252ZXJ0KG0uY292ZXJVcmwpO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbiAgICBsZXQgbmFtZSA9IG51bGw7XFxuICAgIHRyeSB7XFxuICAgICAgICBuYW1lID0gY29udmVydChtLm5hbWUpO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbiAgICBsZXQgYm9va3VybCA9IG51bGw7XFxuICAgIHRyeSB7XFxuICAgICAgICBib29rdXJsID0gY29udmVydChtLmJvb2tVcmwpO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbiAgICBsZXQgaW50cm8gPSBudWxsO1xcbiAgICB0cnkge1xcbiAgICAgICAgaW50cm8gPSBjb252ZXJ0KG0uaW50cm8pO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAvL3NldFBhZ2VUaXRsZShcXFwi5pCc57SiXFxcIiArIGdldFBhcmFtKFxcXCJrd1xcXCIpICsgXFxcIiBcXFwiICsgTVlfUEFSQU1TLmJvb2tTb3VyY2VOYW1lKTtcXG4gICAgLy9NWV9VUkwgPSB1cmw7XFxuICAgIGxldCByZXMgPSByZXF1ZXN0KHVybCwge1xcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcbiAgICAgICAgYm9keTogYm9keVxcbiAgICB9KTtcXG4gICAgbGV0IHBkZmgxID0gKGEsIGIpID0+IHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgaWYgKGIgPT0gbnVsbCkgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHJldHVybiBwZGZoKGEsIGIpO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiXFxcIjtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBsZXQgcGQxID0gKGEsIGIsIGMpID0+IHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgaWYgKGIgPT0gbnVsbCkgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHJldHVybiBwZChhLCBiLCBjKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCI7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgbGlzdHJ1bGUgPSBsaXN0cnVsZS5yZXBsYWNlKFxcXCImJnRib2R5LS10ciwwJiZ0clxcXCIsIFxcXCImJnRhYmxlIHRib2R5IHRyOmd0KDApXFxcIik7XFxuICAgIC8vbG9nKGxpc3RydWxlKTtcXG4gICAgbGV0IGxpc3QgPSBwZGZhKHJlcywgbGlzdHJ1bGUpO1xcbiAgICAvL2xvZyhsaXN0KTtcXG4gICAgLy9sb2cobmFtZSk7XFxuICAgIGxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgIGxldCBuZXh0ID0gcnVsZS5ydWxlVG9jLm5leHRUb2NVcmw7XFxuICAgICAgICBsZXQgbmV4dHRvYyA9IG5leHQgJiYgbmV4dCAhPSBcXFwiXFxcIjtcXG4gICAgICAgIGxldCBhYyA9IG5leHR0b2MgPyBcXFwiXFxcIjogXFxcIiNhdXRvQ2FjaGUjXFxcIjtcXG4gICAgICAgIC8vbGV0IGFjID0gXFxcIiNhdXRvQ2FjaGUjXFxcIjtcXG4gICAgICAgIGxldCB1MSA9IHBkMShpdGVtLCBib29rdXJsLCB1cmwpICsgYWMgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCI7XFxuICAgICAgICBpZiAoYykge1xcbiAgICAgICAgICAgIHUxID0gdTEgKyBcXFwiO2dldDtcXFwiICsgY1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaDEoaXRlbSwgbmFtZSksXFxuICAgICAgICAgICAgaW1nOiBwZDEoaXRlbSwgY292ZXIsIHVybCksXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL21lbnVcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IHJ1bGUuYm9va1NvdXJjZU5hbWUgKyBcXFwiXFxcXG5cXFwiICsgcGRmaDEoaXRlbSwgYXV0aG9yKSArIFxcXCJcXFxcblxcXCIgKyBwZGZoMShpdGVtLCBpbnRybyksXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlRvY1xcXCI6IHJ1bGUucnVsZVRvYyxcXG4gICAgICAgICAgICAgICAgXFxcImNvbnRlbnRcXFwiOiBydWxlLnJ1bGVDb250ZW50LFxcbiAgICAgICAgICAgICAgICBcXFwiYm9va05hbWVcXFwiOiBwYXJzZURvbUZvckh0bWwoaXRlbSwgbmFtZSksXFxuICAgICAgICAgICAgICAgIFxcXCJjb3ZlclxcXCI6IHBhcnNlRG9tKGl0ZW0sIGNvdmVyLCB1cmwpLFxcbiAgICAgICAgICAgICAgICB1cmw6IG5leHR0b2MgPyBcXFwiaGlrZXI6Ly9lbXB0eSNcXFwiICsgdTEgOiB1MSxcXG4gICAgICAgICAgICAgICAgdTE6IG5leHR0b2MgPyB1MSA6IG51bGwsXFxuICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgIGNoYXJzZXQ6IGNcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIGQ7XFxufVxcbiQuZXhwb3J0cyA9IHtcXG4gICAgY29udmVydDogY29udmVydCxcXG4gICAgc2VhcmNoOiBzZWFyY2gsXFxuICAgIGxpc3RSdWxlczogKHBhZ2UsIHJ1bGUpID0+IHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy/lubblj5HmlbDph49cXG4gICAgICAgICAgICBsZXQgc2l6ZSA9IDE2O1xcbiAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgIGxvYWQsXFxuICAgICAgICAgICAgICAgIGxvYWRSdWxlcyxcXG4gICAgICAgICAgICAgICAgZ2V0U2VsZWN0XFxuICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGF0XFxcIik7XFxuICAgICAgICAgICAgbGV0IGRhdGEgPSBsb2FkKCk7XFxuICAgICAgICAgICAgbGV0IHNlbGVjdCA9IGdldFNlbGVjdChkYXRhKTtcXG4gICAgICAgICAgICBsZXQgcnVsZXMgPSBkYXRhLmxlbmd0aCA+IDAgPyBsb2FkUnVsZXMoc2VsZWN0Lm5hbWUpIDogW107XFxuICAgICAgICAgICAgaWYgKCFwYWdlICYmICFydWxlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBydWxlcy5tYXAoaXQgPT4gaXQubmFtZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChydWxlICE9IG51bGwpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHNpemU7XFxuICAgICAgICAgICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHN0YXJ0ICsgMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBsZW4gPSBzaXplO1xcbiAgICAgICAgICAgIGlmIChydWxlcy5sZW5ndGggPCBwYWdlICogc2l6ZSkge1xcbiAgICAgICAgICAgICAgICBsZW4gPSBydWxlcy5sZW5ndGggLSBzdGFydFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgYWxsID0gcnVsZXMubGVuZ3RoO1xcbiAgICAgICAgICAgIGxldCB1c2UgPSAocGFnZSAtIDEpICogc2l6ZSArIGxlbjtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICBhbGw6IGFsbCxcXG4gICAgICAgICAgICAgICAgdXNlOiB1c2UsXFxuICAgICAgICAgICAgICAgIGRhdGE6IHJ1bGVzLnNsaWNlKHN0YXJ0LCBzdGFydCArIGxlbilcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIGFsbDogMCxcXG4gICAgICAgICAgICAgICAgdXNlOiAwLFxcbiAgICAgICAgICAgICAgICBkYXRhOiBbXVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaVsOaNrlwiLFwicGF0aFwiOlwiZGF0YXRcIixcInJ1bGVcIjpcImxldCBsb2FkID0gZnVuY3Rpb24oKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9saXN0Lmpzb25cXFwiKSkudXJscztcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgcmV0dXJuIFtdO1xcbiAgICB9XFxufVxcbmxldCBsb2FkUnVsZXMgPSBmdW5jdGlvbihuYW1lKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgbGlzdCA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvXFxcIiArIG1kNShuYW1lKSArIFxcXCIuanNvblxcXCIpKTtcXG4gICAgICAgIHJldHVybiBsaXN0LmZpbHRlcihpdCA9PiB7XFxuICAgICAgICAgICAgbGV0IHMgPSBKU09OLnN0cmluZ2lmeShpdClcXG4gICAgICAgICAgICBpZiAocy5pbmNsdWRlcyhcXFwiPGpzPlxcXCIpIHx8IHMuaW5jbHVkZXMoXFxcIkBqczpcXFwiKSB8fCBzLmluY2x1ZGVzKFxcXCIkLlxcXCIpIHx8IHMuaW5jbHVkZXMoXFxcIvCflJ5cXFwiKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICByZXR1cm4gW107XFxuICAgIH1cXG59XFxubGV0IHJlbW92ZSA9IGZ1bmN0aW9uKHVybCkge1xcbiAgICBsZXQgZGF0YSA9IGxvYWQoKTtcXG4gICAgZGF0YSA9IGRhdGEuZmlsdGVyKGl0ID0+IGl0LnVybCAhPSB1cmwpO1xcbiAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgdXJsczogZGF0YVxcbiAgICB9KSlcXG59XFxubGV0IHJlbmFtZSA9IGZ1bmN0aW9uKHVybCwgbmFtZSkge1xcbiAgICBsZXQgYXJyID0gbG9hZCgpO1xcbiAgICBmb3IgKGxldCBpIGluIGFycikge1xcbiAgICAgICAgaWYgKGFycltpXS51cmwgPT0gdXJsKSB7XFxuICAgICAgICAgICAgYXJyW2ldLm5hbWUgPSBuYW1lO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9saXN0Lmpzb25cXFwiLCBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICB1cmxzOiBhcnJcXG4gICAgfSkpXFxufVxcbmxldCBhZGQgPSBmdW5jdGlvbihuYW1lLCB1cmwpIHtcXG4gICAgbGV0IGRhdGEgPSBsb2FkKCk7XFxuICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpdCA9PiBpdC51cmwgIT0gdXJsKTtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgICB1cmw6IHVybFxcbiAgICB9KTtcXG4gICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXCIsIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgIHVybHM6IGRhdGFcXG4gICAgfSkpXFxufVxcbmxldCB1cGRhdGUgPSBmdW5jdGlvbihuYW1lLCB1cmwpIHtcXG4gICAgbGV0IHQgPSBmZXRjaCh1cmwpXFxuICAgIEpTT04ucGFyc2UodClcXG4gICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L1xcXCIgKyBtZDUobmFtZSkgKyBcXFwiLmpzb25cXFwiLCB0KVxcbn1cXG5sZXQgc2hhcmUgPSBmdW5jdGlvbihuYW1lLCB1cmwpIHtcXG4gICAgcmV0dXJuIFxcXCJjb3B5Oi8v5oKm6K+76K6i6ZiF5pWw5o2u5YiG5Lqr77yM5aSN5Yi25pW05p2h5Y+j5Luk5omT5byA6L2v5Lu25Y2z5Y+v5a+85YWlXFxcXG5cXFwiICsgbmFtZSArIFxcXCLvvJpcXFwiICsgdXJsICsgXFxcIkBpbXBvcnQ9anM6JC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YXQ/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXCInKS5jYSgpXFxcIlxcbn1cXG5sZXQgY2xvdWRBZGQgPSBmdW5jdGlvbigpIHtcXG4gICAgbGV0IHMgPSBpbnB1dC5zcGxpdChcXFwi77yaXFxcIik7XFxuICAgIGlmIChzLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgIGFkZChzWzBdLCBzWzFdKTtcXG4gICAgICAgIHVwZGF0ZShzWzBdLCBzWzFdKTtcXG4gICAgfVxcbiAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5a+85YWl5oKm6K+76K6i6ZiF5rqQ4oCcXFxcIiArIHNbMF0gKyBcXFwi4oCdXFxcIlxcbn1cXG5sZXQgZ2V0U2VsZWN0ID0gZnVuY3Rpb24oZGF0YSkge1xcbiAgICBpZiAoZGF0YSA9PSBudWxsKSB7XFxuICAgICAgICBkYXRhID0gbG9hZCgpO1xcbiAgICB9XFxuICAgIGlmIChkYXRhLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICByZXR1cm4ge307XFxuICAgIH1cXG4gICAgbGV0IHRhYiA9IGdldEl0ZW0oXFxcInRhYlxcXCIsIGRhdGFbMF0udXJsKTtcXG4gICAgbGV0IHNlbGVjdCA9IGRhdGEuZmlsdGVyKGl0ID0+IGl0LnVybCA9PSB0YWIpO1xcbiAgICBpZiAoc2VsZWN0Lmxlbmd0aCA8PSAwKSB7XFxuICAgICAgICByZXR1cm4gZGF0YVswXTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiBzZWxlY3RbMF07XFxuICAgIH1cXG59XFxuJC5leHBvcnRzID0ge1xcbiAgICBhZGQ6IGFkZCxcXG4gICAgdXBkYXRlOiB1cGRhdGUsXFxuICAgIHJlbW92ZTogcmVtb3ZlLFxcbiAgICByZW5hbWU6IHJlbmFtZSxcXG4gICAgbG9hZDogbG9hZCxcXG4gICAgbG9hZFJ1bGVzOiBsb2FkUnVsZXMsXFxuICAgIGdldFNlbGVjdDogZ2V0U2VsZWN0LFxcbiAgICBzaGFyZTogc2hhcmUsXFxuICAgIGNhOiBjbG91ZEFkZFxcbn1cIn1dIiwiaWNvbiI6Imh0dHBzOi8vczMuYm1wLm92aC9pbWdzLzIwMjIvMTAvMDIvOTI0OGFmMjYyNGQ2NDkwNC5wbmciLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment