xiaomianao666

小程序:青豆

Feb 27th, 2024
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@青豆@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6ImpzOlxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoXCJoaWtlcjovL3BhZ2UvbWFpblwiKSkucnVsZSk7XG5sZXQgdHlwZSA9IGdldFBhcmFtKCd0eXBlJywgJycpLFxuICAgIGlkID0gZ2V0UGFyYW0oJ2lkJywgJycpLFxuICAgIHRpdGxlID0gZ2V0UGFyYW0oJ3RpdGxlJywgJycpO1xubGV0IHJlcyA9IGdldERvdWJhblJlcyhcImh0dHBzOi8vZnJvZG8uZG91YmFuLmNvbS9hcGkvdjIvXCIgKyB0eXBlICsgXCIvXCIgKyBpZCk7XG5sZXQgdXBkYXRlID0gXCJcIjtcbmlmICh0aXRsZSA9PSAnJykge1xuICAgIGxldCBsZW5ndGggPSByZXMudmVuZG9ycy5sZW5ndGg7XG4gICAgdXBkYXRlICs9IGxlbmd0aCA+IDAgPyAn5YWxJyArIGxlbmd0aCArICfkuKrniYfmupAnIDogJ+aaguaXoOeJh+a6kCc7XG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGUgPSByZXMudmVuZG9yc1swXTtcbiAgICAgICAgdXBkYXRlICs9IGUuZXBpc29kZXNfaW5mbyA/IFwifFwiICsgZS5lcGlzb2Rlc19pbmZvIDogXCJcIjtcbiAgICB9XG59IGVsc2Uge1xuICAgIGZvciAobGV0IGUgb2YgcmVzLnZlbmRvcnMpIHtcbiAgICAgICAgaWYgKGUudGl0bGUgPT0gdGl0bGUpIHtcbiAgICAgICAgICAgIHVwZGF0ZSArPSBlLmVwaXNvZGVzX2luZm8gPyBlLmVwaXNvZGVzX2luZm8gOiBcIlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5zZXRSZXN1bHQodXBkYXRlKTsiLCJ0aXRsZSI6IumdkuixhiIsImF1dGhvciI6Ikpva2VyJiZSZWJvcm4iLCJ1cmwiOiJoaWtlcjovL2VtcHR5IyNmeXBhZ2UiLCJ2ZXJzaW9uIjoyOCwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOlxubGV0IGZvcmNlVXJnZW5jeU1vZGUgPSAwXG5pZiAoZm9yY2VVcmdlbmN5TW9kZSkge1xuICAgIGxldCBlID0gJ+W9k+WJjeS4uuW8uuWItuaApeaVkeaooeW8jydcbiAgICBsZXQgcG9zID0gJ+aApeaVkeaooeW8jydcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdChcImhpa2VyOi8vcGFnZS91cmdlbmN5TW9kZVwiKSkucnVsZSlcbn0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoXCJoaWtlcjovL3BhZ2UvbWFpblwiKSkucnVsZSk7XG4gICAgICAgIGhvbWUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxldCBwb3MgPSBcIummlumhtVwiO1xuICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdChcImhpa2VyOi8vcGFnZS91cmdlbmN5TW9kZVwiKSkucnVsZSlcbiAgICB9XG59Iiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHkvJHBhZ2V7ZnlwYWdlfS8jLyoqIiwiZ3JvdXAiOiIx44CB56We5ZmoIiwic2VhcmNoRmluZCI6ImpzOlxudHJ5IHtcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdChcImhpa2VyOi8vcGFnZS9tYWluXCIpKS5ydWxlKTtcbiAgICBzZWFyY2goKTtcbn0gY2F0Y2ggKGUpIHtcbiAgICBsZXQgcG9zID0gXCLmkJzntKLpobVcIjtcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdChcImhpa2VyOi8vcGFnZS91cmdlbmN5TW9kZVwiKSkucnVsZSlcbn0iLCJkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xX3ZlcnRpY2FsX3BpYyIsImRldGFpbF9maW5kX3J1bGUiOiJqczpcbnRyeSB7XG4gICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoXCJoaWtlcjovL3BhZ2UvbWFpblwiKSkucnVsZSk7XG4gICAgZXJqaSgpO1xufSBjYXRjaCAoZSkge1xuICAgIGxldCBwb3MgPSBcIuS6jOe6p+mhtemdolwiO1xuICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KFwiaGlrZXI6Ly9wYWdlL3VyZ2VuY3lNb2RlXCIpKS5ydWxlKVxufSIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiIvKmxldCBmaWxlID0gXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2pva2VyL3FkYi5qc1wiO1xubGV0IGdpdGZpbGUgPSAnaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV80MTg0Njc1Ni9oaWtlci8tL3Jhdy9tYXN0ZXIvcWRiLmpzJztcbmxldCB2ZXIgPSBnZXRJdGVtKCduZXd2ZXInLCcnKTtcbmlmICghZmV0Y2goZmlsZSkgfHwgdmVyIDwgTVlfUlVMRS52ZXJzaW9uKSB7XG4gICAgd3JpdGVGaWxlKGZpbGUsIHJlcXVlc3QoZ2l0ZmlsZSkpO1xuICAgIHNldEl0ZW0oJ25ld3ZlcicsU3RyaW5nKE1ZX1JVTEUudmVyc2lvbikpO1xufVxucHV0VmFyKHtcbiAgICBrZXk6IFwicWRiX2ZpbGVcIixcbiAgICB2YWx1ZTogZmlsZVxufSk7Ki9cbmxldCB2ZXIgPSBnZXRJdGVtKCduZXd2ZXInLCcnKTtcbmlmICh2ZXIgPCBNWV9SVUxFLnZlcnNpb24pIHtcbiAgICBzZXRJdGVtKCduZXd2ZXInLFN0cmluZyhNWV9SVUxFLnZlcnNpb24pKTtcbn1cbnRyeSB7XG4gICAgbGV0IGZpbGUgPSBcImhpa2VyOi8vZmlsZXMvcnVsZXMvam9rZXIvcWRiX2NvbmZpZy5qc1wiO1xuICAgIGxldCBkZWZhdWx0Q29uZmlncyA9ICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9kZWZhdWx0Q29uZmlnc1wiKTtcbiAgICBpZiAoIWZldGNoKGZpbGUpKSB7XG4gICAgICAgIHdyaXRlRmlsZShmaWxlLCBKU09OLnN0cmluZ2lmeShkZWZhdWx0Q29uZmlncykpO1xuICAgIH1lbHNle1xuICAgICAgICBsZXQgY29uZmlnID0gSlNPTi5wYXJzZShmZXRjaChmaWxlKSk7XG4gICAgICAgIGNvbmZpZy5kZXRhaWxzVmlld0NvbmZpZ3NbXCLpu5jorqRcIl0gPSBkZWZhdWx0Q29uZmlncy5kZXRhaWxzVmlld0NvbmZpZ3NbXCLpu5jorqRcIl07XG4gICAgICAgIGNvbmZpZy5ob21lUGFnZUNvbmZpZ3NbXCLpu5jorqRcIl0gPSBkZWZhdWx0Q29uZmlncy5ob21lUGFnZUNvbmZpZ3NbXCLpu5jorqRcIl07XG4gICAgICAgIHdyaXRlRmlsZShmaWxlLCBKU09OLnN0cmluZ2lmeShjb25maWcpKTtcbiAgICB9XG4gICAgcHV0TXlWYXIoXCJxZGJfY29uZmlnXCIsIGZpbGUpO1xufSBjYXRjaCAoZSkge1xuICAgIGxldCBwb3MgPSBcIumihOWkhOeQhlwiO1xuICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KFwiaGlrZXI6Ly9wYWdlL3VyZ2VuY3lNb2RlXCIpKS5ydWxlKVxufVxuXG4iLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6YWN572u57yW6L6R55WM6Z2iXCIsXCJwYXRoXCI6XCJzZXR0aW5nLWVkaXRvclwiLFwicnVsZVwiOlwianM6XFxuLyoqXFxuICog6YCa6L+H5Lyg5YWlIHBhcmFtcyDlr7nosaHnlJ/miJDnvJbovpHnlYzpnaJcXG4gKiBAcGFyYW0gZCDop4bnlYwgc2V0UmVzdWx0IOeUqOeahOWIl+ihqFxcbiAqIEBwYXJhbSBjb25maWdLZXkgY29uZmlnIOeahCBrZXkg5YC877yM5q+U5aaC5oiR6KaB5ou/IGNvbmZpZy5kZXRhaWxzVmlld0NvbmZpZ3PvvIxjb25maWdLZXkg5bCx5LygIFxcXCJkZXRhaWxzVmlld0NvbmZpZ3NcXFwiXFxuICogQHBhcmFtIHBhcmFtcyDnvJbovpHnlYzpnaLnmoTphY3nva5cXG4gKlxcbiAqIOOAkHBhcmFtc+WvueixoeaVsOaNruekuuS+i+OAkVxcbiAqIHtcXG4gICAgICAgIGtleTogXFxcImlucHV0X25hbWVcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeWQjeensFxcXCIsXFxuICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxcbiAgICAgICAgZGF0YToge1xcbiAgICAgICAgICAgIGNvbmZpZzoge1xcbiAgICAgICAgICAgICAgICBrZXk6IFxcXCJpbnB1dF9jb2RlXFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpei+k+WFpemFjee9rlxcXCIsXFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0YXJlYSdcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgfVxcbiAgICB9XFxuICovXFxuZnVuY3Rpb24gbW9kZUVkaXRQYWdlKGQsIGNvbmZpZ0tleSwgcGFyYW1zKSB7XFxuICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygocGFyYW1zKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKHBhcmFtcy5rZXkpXFxuICAgICAgICBsZXQgZGF0YXMgPSBwYXJhbXMuZGF0YTtcXG4gICAgICAgIGxldCBkYXRhS2V5cyA9IE9iamVjdC5rZXlzKGRhdGFzKTtcXG4gICAgICAgIGZvciAobGV0IGkgaW4gZGF0YUtleXMpIHtcXG4gICAgICAgICAgICBsZXQgZGF0YUtleSA9IGRhdGFLZXlzW2ldXFxuICAgICAgICAgICAgY2xlYXJNeVZhcihkYXRhc1tkYXRhS2V5XS5rZXkpXFxuICAgICAgICB9XFxuICAgIH0sIHBhcmFtcykpXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuS/neWtmFxcXCIsXFxuICAgICAgICBkZXNjOiBwYXJhbXMuZGVzYyxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIocGFyYW1zLmtleSwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHR5cGU6IHBhcmFtcy50eXBlID8gcGFyYW1zLnR5cGUgOiAnJyxcXG4gICAgICAgICAgICBvbkNoYW5nZTogJ3B1dE15VmFyKFxcXCInICsgcGFyYW1zLmtleSArICdcXFwiLCBpbnB1dCknXFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIGxldCBkYXRhcyA9IHBhcmFtcy5kYXRhO1xcbiAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyhkYXRhcyk7XFxuICAgIGZvciAobGV0IGRhdGFLZXkgb2YgZGF0YUtleXMpIHtcXG4gICAgICAgIGxldCBkYXRhID0gZGF0YXNbZGF0YUtleV1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLkv53lrZhcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGVzYyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKGRhdGEua2V5LCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgIHR5cGU6IGRhdGEudHlwZSA/IGRhdGEudHlwZSA6ICcnLFxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IC0xLFxcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IHRydWUsXFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0TXlWYXIoXFxcIicgKyBkYXRhLmtleSArICdcXFwiLCBpbnB1dCknXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfkv53lrZgnLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKChjb25maWdLZXksIHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgIGxldCBjb25maWcgPSBKU09OLnBhcnNlKHJlcXVlc3QoZ2V0TXlWYXIoJ3FkYl9jb25maWcnKSkpXFxuICAgICAgICAgICAgbGV0IG5hbWUgPSBnZXRNeVZhcihwYXJhbXMua2V5LCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgY29uZmlnW2NvbmZpZ0tleV0udXNlID0gbmFtZVxcbiAgICAgICAgICAgIGlmICghY29uZmlnW2NvbmZpZ0tleV1bbmFtZV0pIGNvbmZpZ1tjb25maWdLZXldW25hbWVdID0ge31cXG4gICAgICAgICAgICBsZXQgZGF0YXMgPSBwYXJhbXMuZGF0YTtcXG4gICAgICAgICAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyhkYXRhcyk7XFxuICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBkYXRhS2V5cykge1xcbiAgICAgICAgICAgICAgICBsZXQgZGF0YUtleSA9IGRhdGFLZXlzW2ldXFxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gZGF0YXNbZGF0YUtleV1cXG4gICAgICAgICAgICAgICAgY29uZmlnW2NvbmZpZ0tleV1bbmFtZV1bZGF0YUtleV0gPSBnZXRNeVZhcihkYXRhLmtleSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB3cml0ZUZpbGUoZ2V0TXlWYXIoJ3FkYl9jb25maWcnKSwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSlcXG4gICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S/neWtmOaIkOWKnydcXG4gICAgICAgIH0sIGNvbmZpZ0tleSwgcGFyYW1zKVxcbiAgICB9KVxcbn1cXG5cXG4vL+iHquWumuS5iemmlumhtS3phY3nva7nvJbovpHpobXpnaJcXG5mdW5jdGlvbiBob21lUGFnZU1vZGVFZGl0UGFnZShkKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXCJyZWRcXFwiPicgKyAn6L+U5Zue5pWw57uELOS+m3NldFJlc3VsdOS9v+eUqCcgKyAnPC9mb250PicgKyAnPGZvbnQgY29sb3I9XFxcIiM4MDgwODBcXFwiPjxicj4nICsgJ+OAkOWGhee9ruWHveaVsOOAkScgKyAnPGJyPiZuYnNwOyZuYnNwOyZuYnNwO2hpa2VyOi8vcGFnZS9zZXR0aW5nUGFnZTog6K6+572u6aG1KOm7mOiupOmmlumhteacieS9v+eUqOekuuS+iyknICsgJzwvZm9udD4nLFxcbiAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxuICAgIH0pXFxuICAgIG1vZGVFZGl0UGFnZShkLCBcXFwiaG9tZVBhZ2VDb25maWdzXFxcIiwge1xcbiAgICAgICAga2V5OiBcXFwiaW5wdXRfbmFtZVxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl5ZCN56ewXFxcIixcXG4gICAgICAgIC8vIHR5cGU6ICdpbnB1dCdcXG4gICAgICAgIGRhdGE6IHtcXG4gICAgICAgICAgICBjb25maWc6IHtcXG4gICAgICAgICAgICAgICAga2V5OiBcXFwiaW5wdXRfY29kZVxcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaXphY3nva7ku6PnoIFcXFwiLFxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dGFyZWEnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn1cXG5cXG4vL+iHquWumuS5ieivpuaDhemhtemdoi3phY3nva7nvJbovpHpobXpnaJcXG5mdW5jdGlvbiBkZXRhaWxWaWV3TW9kZUVkaXRQYWdlKGQpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XFxcIiM4MDgwODBcXFwiPicgKyAn44CQ5YaF572u5Y+Y6YeP44CRJyArICc8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7aWQ6IOeJh+WNlWlkJyArICc8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7dHlwZTog54mH5Y2V57G75Z6LJyArICc8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7dGl0bGU6IOeJh+WNleagh+mimCcgKyAnPC9mb250PicsXFxuICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgfSlcXG4gICAgbW9kZUVkaXRQYWdlKGQsIFxcXCJkZXRhaWxzVmlld0NvbmZpZ3NcXFwiLCB7XFxuICAgICAgICBrZXk6IFxcXCJpbnB1dF9uYW1lXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaXlkI3np7BcXFwiLFxcbiAgICAgICAgLy8gdHlwZTogJ2lucHV0J1xcbiAgICAgICAgZGF0YToge1xcbiAgICAgICAgICAgIGNvbmZpZzoge1xcbiAgICAgICAgICAgICAgICBrZXk6IFxcXCJpbnB1dF9jb2RlXFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpemFjee9ruS7o+eggVxcXCIsXFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0YXJlYSdcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHNldHRpbmc6IHtcXG4gICAgICAgICAgICAgICAga2V5OiBcXFwiaW5wdXRfc2V0dGluZ19jb2RlXFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeiuvue9rumhtemdouS7o+eggVxcXCIsXFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0YXJlYSdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0pXFxufVxcblxcbi8v6Ieq5a6a5LmJ6Kej5p6QLee8lui+kemhtemdolxcbmZ1bmN0aW9uIGFuYWx5c2lzTW9kZUVkaXRQYWdlKGQpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XFxcIiM4MDgwODBcXFwiPicgKyAn44CQ6Kej5p6Q5Luj56CB5YaF572u5Y+Y6YeP44CRJyArICc8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7aW5wdXQ6IOinhumikemTvuaOpScgKyAnPC9mb250PicsXFxuICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgfSlcXG4gICAgbW9kZUVkaXRQYWdlKGQsIFxcXCJhbmFseXNpc0NvbmZpZ3NcXFwiLCB7XFxuICAgICAgICBrZXk6IFxcXCJpbnB1dF9uYW1lXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaXlkI3np7BcXFwiLFxcbiAgICAgICAgLy8gdHlwZTogJ2lucHV0J1xcbiAgICAgICAgZGF0YToge1xcbiAgICAgICAgICAgIGNvbmZpZzoge1xcbiAgICAgICAgICAgICAgICBrZXk6IFxcXCJpbnB1dF9jb2RlXFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeino+aekOS7o+eggVxcXCIsXFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0YXJlYSdcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGtleTogJ2lucHV0X2V4dHJhJyxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ+ivt+i+k+WFpWV4dHJh5bGe5oCn5YC8JyxcXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHRhcmVhJ1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2V0dGluZzoge1xcbiAgICAgICAgICAgICAgICBrZXk6IFxcXCJpbnB1dF9zZXR0aW5nX2NvZGVcXFwiLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl6K6+572u6aG16Z2i5Luj56CBXFxcIixcXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHRhcmVhJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSlcXG59XFxuXFxubGV0IGQgPSBbXTtcXG5sZXQgdmlldyA9IGdldFBhcmFtKFxcXCJ2aWV3XFxcIixcXFwiXFxcIik7XFxuaWYodmlldz09XFxcImFuYWx5c2lzTW9kZUVkaXRQYWdlXFxcIil7XFxuICAgIHNldFBhZ2VUaXRsZShcXFwi6Ieq5a6a5LmJ6Kej5p6Q57yW6L6RXFxcIilcXG4gICAgYW5hbHlzaXNNb2RlRWRpdFBhZ2UoZCk7XFxufWVsc2UgaWYodmlldz09XFxcImRldGFpbFZpZXdNb2RlRWRpdFBhZ2VcXFwiKXtcXG4gICAgc2V0UGFnZVRpdGxlKFxcXCLoh6rlrprkuYnor6bmg4XpobXnvJbovpFcXFwiKVxcbiAgICBkZXRhaWxWaWV3TW9kZUVkaXRQYWdlKGQpO1xcbn1lbHNlIGlmKHZpZXc9PVxcXCJob21lUGFnZU1vZGVFZGl0UGFnZVxcXCIpe1xcbiAgICBzZXRQYWdlVGl0bGUoXFxcIuiHquWumuS5iemmlumhtee8lui+kVxcXCIpXFxuICAgIGhvbWVQYWdlTW9kZUVkaXRQYWdlKGQpO1xcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PpmaTooqvlsIFpcFwiLFwicGF0aFwiOlwicmVsZWFzZUlQXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgaWQgPSBnZXRQYXJhbSgnaWQnKTtcXG5sZXQgZCA9IFtdO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5oKo5bey6KKr5bCB56aBSVDlnLDlnYDmiJbop6blj5HkuobkurrmnLrpqozor4HvvIzor7fmjInnhafku6XkuIvmraXpqqTlpITnkIYo5aaC5LiN5aSE55CG5oKo5bCG5Zyo5LiA5q615pe26Ze05YaF5peg5rOV5q2j5bi46I635Y+W5Ymn6ZuG5YiX6KGoKScsXFxuICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJzEu54K55Ye75q2k5aSE5a+85YWl6Ieq5Yqo6I635Y+WQ29va2ll5o+S5Lu2JyxcXG4gICAgdXJsOiAkKClcXG4gICAgICAgIC5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgbGV0IGdldERvdWJhbkNvb2tpZSA9IFxcXCIoZnVuY3Rpb24oKXtpZih3aW5kb3dbJ2xvY2F0aW9uJ11bJ2hvc3QnXT09J3d3dy5kb3ViYW4uY29tJyl7ZnlfYnJpZGdlX2FwcFsnd3JpdGVGaWxlJ10oJ2hpa2VyOi8vZmlsZXMvY2FjaGUvZG91YmFuY29va2llLnR4dCcsZnlfYnJpZGdlX2FwcFsnZ2V0Q29va2llJ10oJ2h0dHBzOi8vd3d3LmRvdWJhbi5jb20vJykpO31pZih3aW5kb3dbJ2xvY2F0aW9uJ11bJ2hvc3QnXT09J20uZG91YmFuLmNvbScpe2Z5X2JyaWRnZV9hcHBbJ3dyaXRlRmlsZSddKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2RvdWJhbmNvb2tpZS50eHQnLGZ5X2JyaWRnZV9hcHBbJ2dldENvb2tpZSddKCdodHRwczovL20uZG91YmFuLmNvbS8nKSk7fX0oKSk7XFxcIlxcbiAgICAgICAgICAgIGlmICghZmlsZUV4aXN0KCdoaWtlcjovL2ZpbGVzL2NhY2hlL2dsb2JhbF9nZXREb3ViYW5Db29raWUuanMnKSkge1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvZ2xvYmFsX2dldERvdWJhbkNvb2tpZS5qcycsIGdldERvdWJhbkNvb2tpZSk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKCfmtbfpmJTop4bnlYzvvIznvZHpobXmj5Lku7bvv6Vqc191cmzvv6VnbG9iYWxfZ2V0RG91YmFuQ29va2llQGhpa2VyOi8vZmlsZXMvY2FjaGUvZ2xvYmFsX2dldERvdWJhbkNvb2tpZS5qcycpO1xcbiAgICAgICAgfSksXFxuICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnMi7ngrnlh7vmraTlpITov5vlhaXnvZHpobXov5vooYznmbvlvZXmiJbkurrmnLrpqozor4HvvIzlrozmiJDlkI7ov5Tlm57mraTpobXpnaInLFxcbiAgICB1cmw6ICdodHRwczovL21vdmllLmRvdWJhbi5jb20vc3ViamVjdC8nICsgaWQgKyAnLycsXFxuICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnMy7lrozmiJDnmbvlvZXmiJbkurrmnLrpqozor4HlkI7ov5Tlm57lvbHniYfor6bmg4XpobXpnaLph43mlrDov5vlhaUnLFxcbiAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxufSk7XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmiqLmlZHpobXpnaJcIixcInBhdGhcIjpcInVyZ2VuY3lNb2RlXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgZCA9IFtdO1xcblxcbmQucHVzaCh7XFxuICB0aXRsZTogJ+W+iOaYjuaYvizlh7rkuobkuIDkupvlsI/pl67popgs5bu66K6u5p+l55yL6K6+572uJyxcXG4gIGRlc2M6IFxcXCLlh7rplJnkvY3nva46XFxcIiArICh0eXBlb2YocG9zKSA9PSAndW5kZWZpbmVkJyA/ICfmnKrnn6UnIDogcG9zKSxcXG4gIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG59KTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+eCueaIkei/m+WFpeiuvue9rumhtScsXFxuICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdQYWdlXFxcIlxcbn0pXFxuXFxuZC5wdXNoKHtcXG4gIHRpdGxlOiAn6Iul5L+u5pS56K6+572u5LiN6LW35L2c55SoLOeCueaIkeWkjeWItumUmeivr+S/oeaBr+aPkOS6pOe7meW8gOWPkeiAhScsXFxuICBkZXNjOiBlLnRvU3RyaW5nKCksXFxuICBjb2xfdHlwZTogJ3RleHRfMScsXFxuICB1cmw6ICdjb3B5Oi8vJyArIGUudG9TdHJpbmcoKSxcXG59KTtcXG5cXG5zZXRSZXN1bHQoZCk7XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpobrkvazkuJPnlKjor6bmg4XpobVcIixcInBhdGhcIjpcIlNkZXRhaWxcIixcInJ1bGVcIjpcImpzOlxcbi8vIHB1dFZhcigncWRiX2ZpbGUnLCAnaGlrZXI6Ly9maWxlcy9ydWxlcy9qb2tlci9xZGIuanMnKTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9wYWdlL21haW5cXFwiKSkucnVsZSk7XFxucHJlKCk7XFxuLy9nZXRNeVZhcihcXFwicWRiX2NvbmZpZ1xcXCIpXFxubGV0IHR5cGUgPSBnZXRQYXJhbSgndHlwZScsICcnKSxcXG4gICAgaWQgPSBnZXRQYXJhbSgnaWQnLCAnJyk7XFxuZGV0YWlsc1ZpZXcodHlwZSwgaWQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Li75Luj56CBXCIsXCJwYXRoXCI6XCJtYWluXCIsXCJydWxlXCI6XCJsZXQgdmVyc2lvbiA9IDIwMjQwMTMxMDAwNDtcXHJcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3V0aWxzJykpLnJ1bGUpO1xcclxcblxcclxcbmxldCBwYXJzZVZpZGVvVXJsTGF6eSA9ICQudG9TdHJpbmcoKCkgPT4ge1xcclxcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgIGxldCBhbmFseXNpc0NvbmZpZ3MgPSBnZXRDb25maWcoJ2FuYWx5c2lzQ29uZmlncycpO1xcclxcbiAgICBsZXQgYW5hbHlzaXNDb25maWcgPSBhbmFseXNpc0NvbmZpZ3NbYW5hbHlzaXNDb25maWdzLnVzZV0uY29uZmlnO1xcclxcbiAgICBsZXQgcmVzdWx0ID0gXFxcInRvYXN0Oi8v6Kej5p6Q5aSx6LSlXFxcIjtcXHJcXG4gICAgdHJ5IHtcXHJcXG4gICAgICAgIGlmIChhbmFseXNpc0NvbmZpZy5zdGFydHNXaXRoKFxcXCIoXFxcIikpIHtcXHJcXG4gICAgICAgICAgICBldmFsKCdyZXN1bHQgPSAnICsgYW5hbHlzaXNDb25maWcpO1xcclxcbiAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICBldmFsKCdyZXN1bHQgPSAnICsgJygoKSA9PiB7JyArIGFuYWx5c2lzQ29uZmlnICsgJ30pKCknKTtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgfSBjYXRjaCAoZSkge31cXHJcXG4gICAgcmV0dXJuIHJlc3VsdDtcXHJcXG59KVxcclxcbmZ1bmN0aW9uIHByZSgpIHtcXHJcXG4gICAgbGV0IGZpbGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9qb2tlci9xZGJfY29uZmlnLmpzXFxcIjtcXG4gICAgbGV0IGRlZmF1bHRDb25maWdzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGVmYXVsdENvbmZpZ3NcXFwiKTtcXG4gICAgaWYgKCFmZXRjaChmaWxlKSkge1xcbiAgICAgICAgd3JpdGVGaWxlKGZpbGUsIEpTT04uc3RyaW5naWZ5KGRlZmF1bHRDb25maWdzKSk7XFxuICAgIH1lbHNle1xcbiAgICAgICAgbGV0IGNvbmZpZyA9IEpTT04ucGFyc2UoZmV0Y2goZmlsZSkpO1xcbiAgICAgICAgY29uZmlnLmRldGFpbHNWaWV3Q29uZmlnc1tcXFwi6buY6K6kXFxcIl0gPSBkZWZhdWx0Q29uZmlncy5kZXRhaWxzVmlld0NvbmZpZ3NbXFxcIum7mOiupFxcXCJdO1xcbiAgICAgICAgY29uZmlnLmhvbWVQYWdlQ29uZmlnc1tcXFwi6buY6K6kXFxcIl0gPSBkZWZhdWx0Q29uZmlncy5ob21lUGFnZUNvbmZpZ3NbXFxcIum7mOiupFxcXCJdO1xcbiAgICAgICAgd3JpdGVGaWxlKGZpbGUsIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpO1xcbiAgICB9XFxuICAgIHB1dE15VmFyKFxcXCJxZGJfY29uZmlnXFxcIiwgZmlsZSk7XFxyXFxufVxcclxcbi8v6aaW6aG1XFxyXFxuZnVuY3Rpb24gaG9tZSgpIHtcXHJcXG4gICAgaWYgKGdldEl0ZW0oXFxcInN0YXJ0XFxcIiwgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxyXFxuICAgICAgICBzZXRJdGVtKFxcXCJzdGFydFxcXCIsIFxcXCIxXFxcIik7XFxyXFxuICAgICAgICBzZXRJdGVtKCd1cGRhdGUnLCBTdHJpbmcodmVyc2lvbikpO1xcclxcbiAgICAgICAgY29uZmlybSh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6ICfmuKnppqjmj5DnpLonLFxcclxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICfmraTop4TliJnku4XpmZDlrabkuaDkuqTmtYHkvb/nlKhcXFxcbuivt+S6juWvvOWFpeWQjjI05bCP5pe25YaF5Yig6ZmkIVxcXFxuXFxcXG7ku7vkvZXnu4Tnu4fmiJbkuKrkurrkuI3lvpfku6Xku7vkvZXmlrnlvI/mlrnms5VcXFxcbuS8oOaSreatpOinhOWImeeahOaVtOS9k+aIlumDqOWIhiEhXFxcXG5cXFxcbuaEn+iwouWkp+S9rOS7rOaPkOS+m+eahOaKgOacr+aUr+aMgSEhIScsXFxyXFxuICAgICAgICAgICAgY29uZmlybTogJycsXFxyXFxuICAgICAgICAgICAgY2FuY2VsOiAnJ1xcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfSBlbHNlIHtcXHJcXG4gICAgICAgIGxldCB1cGRhdGVJbmZvID0gZ2V0SXRlbSgndXBkYXRlJywgJycpO1xcclxcbiAgICAgICAgaWYgKHVwZGF0ZUluZm8gPT0gJycgfHwgcGFyc2VJbnQodXBkYXRlSW5mbykgPCB2ZXJzaW9uKSB7XFxyXFxuICAgICAgICAgICAgc2V0SXRlbSgndXBkYXRlJywgU3RyaW5nKHZlcnNpb24pKTtcXHJcXG4gICAgICAgICAgICBjb25maXJtKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmnKzmrKHmm7TmlrDlhoXlrrknLFxcclxcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnYnVncyBmaXhlZCcsXFxyXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06ICcnLFxcclxcbiAgICAgICAgICAgICAgICBjYW5jZWw6ICcnXFxyXFxuICAgICAgICAgICAgfSlcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcclxcbiAgICAgICAgY2xlYXJNeVZhcihcXFwicWRiX2NvbmZpZ1xcXCIpO1xcclxcbiAgICB9KSlcXHJcXG4gICAgbGV0IGhvbWVQYWdlQ29uZmlncyA9IGdldENvbmZpZygnaG9tZVBhZ2VDb25maWdzJyk7XFxyXFxuICAgIGxldCBob21lUGFnZUNvbmZpZyA9IGhvbWVQYWdlQ29uZmlnc1tob21lUGFnZUNvbmZpZ3MudXNlXS5jb25maWc7XFxyXFxuICAgIGlmIChob21lUGFnZUNvbmZpZy5zdGFydHNXaXRoKFxcXCIoXFxcIikpIHtcXHJcXG4gICAgICAgIGV2YWwoJ2QgPSAnICsgaG9tZVBhZ2VDb25maWcpXFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICBldmFsKCdkID0gJyArICcoKCkgPT4geycgKyBob21lUGFnZUNvbmZpZyArICd9KSgpJylcXHJcXG4gICAgfVxcclxcbiAgICBzZXRSZXN1bHQoZCk7XFxyXFxufVxcclxcblxcclxcbi8v5rW36ZiU5pCc57SiXFxyXFxuZnVuY3Rpb24gc2VhcmNoKCkge1xcclxcbiAgICBsZXQgd2QgPSBNWV9VUkwuc3BsaXQoXFxcIi8jL1xcXCIpWzFdO1xcclxcbiAgICBsZXQgcGFnZSA9IE1ZX1BBR0U7XFxyXFxuICAgIGxldCBzID0gZ2V0RG91YmFuUmVzKCdodHRwczovL2Zyb2RvLmRvdWJhbi5jb20vYXBpL3YyL3NlYXJjaC9zdWJqZWN0cz90eXBlPW1vdmllJnE9JyArIHdkICsgKHBhZ2UgPyAnJnN0YXJ0PScgKyAocGFnZSAtIDEpICogMjAgOiAnJnN0YXJ0PTAnKSArICcmY291bnQ9MjAnKTtcXHJcXG5cXHJcXG4gICAgbGV0IGxpc3QgPSBzLml0ZW1zO1xcclxcbiAgICBsZXQgZGV0YWlsc1ZpZXdDb25maWdzID0gZ2V0Q29uZmlnKCdkZXRhaWxzVmlld0NvbmZpZ3MnKTtcXHJcXG5cXHJcXG4gICAgbGV0IGl0ZW1zID0gW107XFxyXFxuICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHtcXHJcXG4gICAgICAgIGlmIChkYXRhLnRhcmdldF90eXBlID09ICdkb3VsaXN0X2NhcmRzJykge1xcclxcbiAgICAgICAgICAgIGRhdGEudGFyZ2V0LmRvdWxpc3RzLmZvckVhY2goZSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGUudGl0bGUsXFxyXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHkvJHBhZ2V7ZnlwYWdlfSNub0hpc3RvcnkjJylcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICAucnVsZSgodHlwZSwgaWQpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9tYWluJykpLnJ1bGUpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gXFxcInBsYXlsaXN0XFxcIikge1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91TGlzdChpZCwgTVlfUEFHRSwgNTApO1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXFxcImNvbGxlY3Rpb25cXFwiIHx8IHR5cGUgPT0gXFxcImNoYXJ0XFxcIikge1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdENvbGxlY3Rpb25MaXN0KE1ZX1BBR0UsIDUwLCBpZCk7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBlLnRhcmdldF90eXBlLCBlLmlkKSxcXHJcXG4gICAgICAgICAgICAgICAgICAgIGltZzogZS5jb3Zlcl91cmwgKyBcXFwiQFJlZmVyZXI9XFxcIiArIGUuY292ZXJfdXJsXFxyXFxuICAgICAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICAgICAgfSlcXHJcXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS50YXJnZXRfdHlwZSA9PSAnY2hhcnQnKSB7XFxyXFxuICAgICAgICAgICAgbGV0IGUgPSBkYXRhLnRhcmdldDtcXHJcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGUudGl0bGUsXFxyXFxuICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eS8kcGFnZXtmeXBhZ2V9I25vSGlzdG9yeSMnKVxcclxcbiAgICAgICAgICAgICAgICAgICAgLnJ1bGUoKHR5cGUsIGlkKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9tYWluJykpLnJ1bGUpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBcXFwicGxheWxpc3RcXFwiKSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdUxpc3QoaWQsIE1ZX1BBR0UsIDUwKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXFxcImNvbGxlY3Rpb25cXFwiIHx8IHR5cGUgPT0gXFxcImNoYXJ0XFxcIikge1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0Q29sbGVjdGlvbkxpc3QoTVlfUEFHRSwgNTAsIGlkKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgICAgICAgICB9LCBkYXRhLnRhcmdldF90eXBlLCBlLmlkKSxcXHJcXG4gICAgICAgICAgICAgICAgaW1nOiBlLmNvdmVyX3VybCArIFxcXCJAUmVmZXJlcj1cXFwiICsgZS5jb3Zlcl91cmxcXHJcXG4gICAgICAgICAgICB9KVxcclxcbiAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICBsZXQgdHlwZSA9IGRhdGEudGFyZ2V0X3R5cGUsXFxyXFxuICAgICAgICAgICAgICAgIGlkID0gZGF0YS50YXJnZXQuaWQsXFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlID0gZGF0YS50YXJnZXQudGl0bGU7XFxyXFxuICAgICAgICAgICAgbGV0IHVzZUNvbmZpZyA9IGRldGFpbHNWaWV3Q29uZmlnc1tkZXRhaWxzVmlld0NvbmZpZ3MudXNlXS5jb25maWc7XFxyXFxuICAgICAgICAgICAgbGV0IHVybFBhcmFtcyA9IHt9O1xcclxcbiAgICAgICAgICAgIGlmICh1c2VDb25maWcuc3RhcnRzV2l0aCgneycpKSB7XFxyXFxuICAgICAgICAgICAgICAgIGV2YWwoJ3VybFBhcmFtcyA9ICcgKyB1c2VDb25maWcpO1xcclxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgIHVybFBhcmFtcy51cmwgPSAkKFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSMjaW1tZXJzaXZlVGhlbWUjXFxcIiArICc/dHlwZT0nICsgdHlwZSArICcmaWQ9JyArIGlkKVxcclxcbiAgICAgICAgICAgICAgICAgICAgLnJ1bGUoKHR5cGUsIGlkLCB0aXRsZSwgdXNlQ29uZmlnKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9tYWluJykpLnJ1bGUpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBcXFwicGxheWxpc3RcXFwiKSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdUxpc3QoaWQsIE1ZX1BBR0UsIDUwKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgICAgICAgICAgfSwgdHlwZSwgaWQsIHRpdGxlLCB1c2VDb25maWcpO1xcclxcbiAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcclxcbiAgICAgICAgICAgICAgICBpbWc6IGRhdGEudGFyZ2V0LmNvdmVyX3VybCArIFxcXCJAUmVmZXJlcj1cXFwiICsgZGF0YS50YXJnZXQuY292ZXJfdXJsLFxcclxcbiAgICAgICAgICAgICAgICBkZXNjOiBkYXRhLnR5cGVfbmFtZSxcXHJcXG4gICAgICAgICAgICAgICAgY29udGVudDogZGF0YS50YXJnZXQuY2FyZF9zdWJ0aXRsZSxcXHJcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmxQYXJhbXMudXJsLFxcclxcbiAgICAgICAgICAgICAgICBleHRyYTogdXJsUGFyYW1zLmV4dHJhXFxyXFxuICAgICAgICAgICAgfSk7XFxyXFxuICAgICAgICB9XFxyXFxuXFxyXFxuICAgIH0pO1xcclxcblxcclxcbiAgICBzZXRTZWFyY2hSZXN1bHQoe1xcclxcbiAgICAgICAgZGF0YTogaXRlbXNcXHJcXG4gICAgfSk7XFxyXFxufVxcclxcblxcclxcbi8v5LqM57qn6aG16Z2iXFxyXFxuZnVuY3Rpb24gZXJqaSgpIHtcXHJcXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXHJcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcImZpbmRMaXN0XFxcIik7XFxyXFxuICAgICAgICBjbGVhck15VmFyKFxcXCJob3RMaXN0XFxcIik7XFxyXFxuICAgICAgICBjbGVhck15VmFyKFxcXCJjbGFzc2xpc3RcXFwiKTtcXHJcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInBsYXlsaXN0XFxcIik7XFxyXFxuICAgICAgICBjbGVhck15VmFyKFxcXCJyYW5rTGlzdFxcXCIpO1xcclxcbiAgICAgICAgY2xlYXJNeVZhcihcXFwicmFua2luZ1xcXCIpO1xcclxcbiAgICAgICAgY2xlYXJNeVZhcihcXFwiY29taW5nXFxcIik7XFxyXFxuICAgICAgICBjbGVhck15VmFyKFxcXCJhbmFseXNpc1xcXCIpO1xcclxcbiAgICB9KSlcXHJcXG5cXHJcXG4gICAgbGV0IGNob2ljZSA9IE1ZX1VSTC5zcGxpdCgnLyMvJylbMV0uc3BsaXQoJyMnKVswXTtcXHJcXG4gICAgbGV0IGQgPSBbXTtcXHJcXG4gICAgc3dpdGNoIChjaG9pY2UpIHtcXHJcXG4gICAgICAgIGNhc2UgXFxcIuaOqOiNkFxcXCI6XFxyXFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9tYWluJykpLnJ1bGUpO1xcclxcbiAgICAgICAgICAgIGQgPSBmaW5kTGlzdChNWV9QQUdFLCAxMCk7XFxyXFxuICAgICAgICAgICAgYnJlYWs7XFxyXFxuICAgICAgICBjYXNlIFxcXCLng63pl6hcXFwiOlxcclxcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICBkID0gaG90TGlzdChNWV9QQUdFLCAxMCk7XFxyXFxuICAgICAgICAgICAgYnJlYWs7XFxyXFxuICAgICAgICBjYXNlIFxcXCLliIbnsbtcXFwiOlxcclxcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICBkID0gY2xhc3NMaXN0KE1ZX1BBR0UsIDE1KTtcXHJcXG4gICAgICAgICAgICBicmVhaztcXHJcXG4gICAgICAgIGNhc2UgXFxcIueJh+WNlVxcXCI6XFxyXFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9tYWluJykpLnJ1bGUpO1xcclxcbiAgICAgICAgICAgIGQgPSBwbGF5TGlzdChNWV9QQUdFLCAxMCk7XFxyXFxuICAgICAgICAgICAgYnJlYWs7XFxyXFxuICAgICAgICBjYXNlIFxcXCLmppzljZVcXFwiOlxcclxcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICBkID0gcmFua0xpc3QoTVlfUEFHRSwgMTApO1xcclxcbiAgICAgICAgICAgIGJyZWFrO1xcclxcbiAgICAgICAgY2FzZSBcXFwi5bCG5LiK5pigXFxcIjpcXHJcXG4gICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgZCA9IGNvbWluZ0xpc3QoTVlfUEFHRSwgMTApO1xcclxcbiAgICAgICAgICAgIGJyZWFrO1xcclxcbiAgICB9XFxyXFxuICAgIHNldFJlc3VsdChkKTtcXHJcXG59XFxyXFxuXFxyXFxuLy/ojrflj5bosYbnk6PotYTmupAs6L+U5ZueanNvbuaVsOaNrlxcclxcbmZ1bmN0aW9uIGdldERvdWJhblJlcyh1cmwpIHtcXHJcXG4gICAgdmFyIGNjID1udWxsO1xcclxcbiAgICBpZigkLnR5cGUodXJsKT09J29iamVjdCcpe1xcclxcbiAgICAgICAgIGNjPXVybC5jYztcXHJcXG4gICAgICAgICB1cmwgPSB1cmwudXJsO1xcclxcbiAgICB9XFxyXFxuICAgIHZhciBfdXJsID0gdXJsO1xcclxcbiAgICBpZiAodXJsLmluZGV4T2YoJ2FwaWtleScpID09PSAtMSkge1xcclxcbiAgICAgICAgX3VybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgXFxcImFwaWtleT0wZGFkNTUxZWMwZjg0ZWQwMjkwN2ZmNWM0MmU4ZWM3MFxcXCJcXHJcXG4gICAgfVxcclxcbiAgICBsZXQgX3RzID0gcGFyc2VJbnQoRGF0ZS5ub3coKS8xMDAwKS50b1N0cmluZygpO1xcclxcbiAgICBsZXQgbSA9ICdHRVQmJyArIGVuY29kZVVSSUNvbXBvbmVudCh1cmwuc3BsaXQoJ2RvdWJhbi5jb20nKVsxXS5zcGxpdCgnPycpWzBdKSArICcmJyArIF90cztcXHJcXG4gICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXHJcXG4gICAgbGV0IF9zaWcgPSBoZXhUb0Jhc2U2NChDcnlwdG9KUy5IbWFjU0hBMShtLCdiZjdkZGRjN2M5Y2ZlNmY3JykudG9TdHJpbmcoKSk7XFxyXFxuICAgIF91cmwgKz0gJyZfc2lnPScgKyBfc2lnICsnJl90cz0nICsgX3RzO1xcclxcbiAgICAvL2xldCBjb29raWVDYWNoZSA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL2RvdWJhbmNvb2tpZS50eHQnO1xcclxcbiAgICBsZXQgcyA9IGZldGNoKF91cmwsIHtcXHJcXG4gICAgICAgIGhlYWRlcnM6IHtcXHJcXG4gICAgICAgICAgICAvLydDb29raWUnOiBmZXRjaChjb29raWVDYWNoZSksXFxyXFxuICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiUmV4eGFyLUNvcmUvMC4xLjMgYXBpLWNsaWVudC8xIGNvbS5kb3ViYW4uZnJvZG8vNy45LjAuYmV0YTIoMjE1KSBBbmRyb2lkLzI1IHByb2R1Y3QvVEFTLUFMMDAgdmVuZG9yL0hVQVdFSSBtb2RlbC9UQVMtQUwwMCAgcm9tL2FuZHJvaWQgIG5ldHdvcmsvd2lmaSAgcGxhdGZvcm0vbW9iaWxlIGNvbS5kb3ViYW4uZnJvZG8vNy45LjAuYmV0YTIoMjE1KSBSZXh4YXIvMS4yLjE1MSAgcGxhdGZvcm0vbW9iaWxlIDEuMi4xNTFcXFwiXFxyXFxuICAgICAgICB9LFxcclxcbiAgICAgICAgbWV0aG9kOiAnR0VUJ1xcclxcbiAgICAgICAgLy9ib2R5OiAnaG9zdD1mcm9kby5kb3ViYW4uY29tJ1xcclxcbiAgICB9KTtcXHJcXG4gICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKHMpO1xcclxcbiAgICBpZihqc29uLmxvY2FsaXplZF9tZXNzYWdlKXtcXHJcXG4gICAgICAgIGNjPSBjYz09bnVsbCA/IDEgOiBjYysxO1xcclxcbiAgICAgICAgbG9nKCfph43or5XmrKHmlbA6JytjYyk7XFxyXFxuICAgICAgICBpZihjYz41KXt0aHJvdyBuZXcgRXJyb3IoJ+i2heaXticpfVxcclxcbiAgICAgICAgamF2YS5sYW5nLlRocmVhZC5zbGVlcCgxMDAwKTtcXHJcXG4gICAgICAgIHJldHVybiBnZXREb3ViYW5SZXMoe3VybDp1cmwsY2M6Y2N9KTtcXHJcXG4gICAgfWVsc2V7XFxyXFxuICAgICAgICByZXR1cm4ganNvbjtcXHJcXG4gICAgfVxcclxcbn1cXHJcXG5cXHJcXG4vL+agueaNruivhOWIhuS/oeaBr+iOt+WPluivhOWIhuaYn+aYn+agt+W8j1xcclxcbmZ1bmN0aW9uIGNvbXB1dGVSYXRpbmcoZSwgdCkge1xcclxcbiAgICBsZXQgaSA9IFxcXCJcXFwiO1xcclxcbiAgICBmb3IgKGxldCByID0gMDsgciA8IDU7IHIrKykgciA8IE1hdGgucm91bmQodCAvIChlIC8gNSkpID8gaSArPSBcXFwi4piFXFxcIiA6IGkgKz0gXFxcIuKYhlxcXCI7XFxyXFxuICAgIHJldHVybiBpO1xcclxcbn1cXHJcXG5cXHJcXG4vL+ivhOWIhuivpuaDhemhtemdolxcclxcbmZ1bmN0aW9uIHJhdGluZyh0eXBlLCBpZCwgcmF0aW5nQ291bnQpIHtcXHJcXG4gICAgc2V0UGFnZVRpdGxlKCflvbHniYfkv6Hmga8nKTtcXHJcXG4gICAgLy/or4TliIbnu5/orqFcXHJcXG4gICAgbGV0IGkgPSBnZXREb3ViYW5SZXMoXFxcImh0dHBzOi8vZnJvZG8uZG91YmFuLmNvbS9hcGkvdjIvXFxcIiArIHR5cGUgKyBcXFwiL1xcXCIgKyBpZCArIFxcXCIvcmF0aW5nXFxcIik7XFxyXFxuXFxyXFxuICAgIGxldCByID0gXFxcIjxoMj7or4TliIbnu5/orqE8L2gyPlxcXCI7XFxyXFxuXFxyXFxuICAgIHIgKz0gJzxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JyArIHJhdGluZ0NvdW50ICsgJ+S6uuivhOWIhicgKyAnPC9mb250Pjwvc21hbGw+PGJyLz4nO1xcclxcblxcclxcbiAgICBsZXQgc3RhckNvbG9yID0gZ2V0Q29uZmlnKCdzdGFyQ29sb3InKTtcXHJcXG4gICAgaWYgKGkuc3RhdHMubGVuZ3RoID09IDApIHtcXHJcXG4gICAgICAgIGkuc3RhdHMgPSBbMCwgMCwgMCwgMCwgMF07XFxyXFxuICAgIH1cXHJcXG4gICAgaS5zdGF0cy5yZXZlcnNlKCkuZm9yRWFjaCgoKHZhbHVlLCBpbmRleCkgPT4ge1xcclxcbiAgICAgICAgciArPSAnPGZvbnQgY29sb3I9JyArIHN0YXJDb2xvciArICc+JyArIFtcXFwi4piF4piF4piF4piF4piFXFxcIiwgXFxcIuKYheKYheKYheKYheKYhlxcXCIsIFxcXCLimIXimIXimIXimIbimIZcXFwiLCBcXFwi4piF4piF4piG4piG4piGXFxcIiwgXFxcIuKYheKYhuKYhuKYhuKYhlxcXCJdW2luZGV4XSArIFxcXCI8L2ZvbnQ+Jm5ic3A7XFxcIjtcXHJcXG5cXHJcXG4gICAgICAgIHIgKz0gZnVuY3Rpb24oZSkge1xcclxcbiAgICAgICAgICAgIGxldCB0MSA9ICcnO1xcclxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZTsgaSsrKSB0MSArPSBcXFwi4paHXFxcIjtcXHJcXG4gICAgICAgICAgICBsZXQgdDIgPSAnJztcXHJcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwIC0gZTsgaSsrKSB0MiArPSBcXFwi4paHXFxcIjtcXHJcXG4gICAgICAgICAgICByZXR1cm4gdDEuZm9udGNvbG9yKCcjZmZhYzJkJykgKyB0Mi5mb250Y29sb3IoJyNlNWUxZTQnKTtcXHJcXG4gICAgICAgIH0oKDEwICogdmFsdWUpLnRvRml4ZWQoMCkpO1xcclxcblxcclxcbiAgICAgICAgciArPSAnJm5ic3A7PHNtYWxsPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj4nICsgKDEwMCAqIHZhbHVlKVxcclxcbiAgICAgICAgICAgIC50b0ZpeGVkKDEpICsgXFxcIiU8L2ZvbnQ+PC9zbWFsbD48YnIvPlxcXCI7XFxyXFxuICAgIH0pKTtcXHJcXG5cXHJcXG4gICAgciArPSBbaS5kb25lX2NvdW50ID8gaS5kb25lX2NvdW50ICsgXFxcIuS6uueci+i/h1xcXCIgOiBcXFwiXFxcIiwgaS5kb2luZ19jb3VudCA/IGkuZG9pbmdfY291bnQgKyBcXFwi5Lq65Zyo55yLXFxcIiA6IFxcXCJcXFwiLCBpLndpc2hfY291bnQgPyBpLndpc2hfY291bnQgKyBcXFwi5Lq65oOz55yLXFxcIiA6IFxcXCJcXFwiXS5qb2luKFxcXCImbmJzcDsmbmJzcDtcXFwiKVxcclxcbiAgICAgICAgLnNtYWxsKClcXHJcXG4gICAgICAgIC5mb250Y29sb3IoJ2dyZXknKTtcXHJcXG4gICAgLy/lvbHniYfkv6Hmga9cXHJcXG4gICAgaSA9IGdldERvdWJhblJlcyhcXFwiaHR0cHM6Ly9mcm9kby5kb3ViYW4uY29tL2FwaS92Mi9cXFwiICsgdHlwZSArIFxcXCIvXFxcIiArIGlkICsgXFxcIi9kZXNjXFxcIik7XFxyXFxuICAgIGxldCBsID0gaS5odG1sLnJlcGxhY2UoL1tcXFxcblxcXFx0XFxcXHJdL2csIFxcXCJcXFwiKVxcclxcbiAgICAgICAgLnJlcGxhY2UoLzx0ZFxcXFxzKltePl0qPiguKj8pPFxcXFwvdGQ+L2csIFxcXCI8c3Bhbj4kMTwvc3Bhbj5cXFwiKVxcclxcbiAgICAgICAgLnJlcGxhY2UoLzx0clxcXFxzKltePl0qPiguKj8pPFxcXFwvdHI+L2csIFxcXCI8dGVuZz4kMTwvdGVuZz48YnIvPlxcXCIpO1xcclxcbiAgICBwYXJzZURvbUZvckFycmF5KGwsIFxcXCJzZWN0aW9uJiZ0ZW5nXFxcIikuZm9yRWFjaCgoZSA9PiB7XFxyXFxuICAgICAgICBsZXQgdCA9IHBhcnNlRG9tRm9yQXJyYXkoZSwgXFxcInNwYW5cXFwiKTtcXHJcXG4gICAgICAgIGwgPSBsLnJlcGxhY2UodFswXSwgJzxmb250IGNvbG9yPVxcXCJncmV5XFxcIj4nICsgdFswXS5yZXBsYWNlKC88c3BhblxcXFxzKltePl0qPiguKj8pPFxcXFwvc3Bhbj4vZywgXFxcIiQxXFxcIikgKyBcXFwi77yaPC9mb250PlxcXCIpXFxyXFxuICAgIH0pKTtcXHJcXG4gICAgciArPSBsO1xcclxcbiAgICAvL+iOt+WlluiusOW9lVxcclxcbiAgICBsZXQgcGFnZSA9IE1ZX1BBR0U7XFxyXFxuICAgIGxldCBzID0gZ2V0RG91YmFuUmVzKFxcXCJodHRwczovL2Zyb2RvLmRvdWJhbi5jb20vYXBpL3YyL1xcXCIgKyB0eXBlICsgXFxcIi9cXFwiICsgaWQgKyBcXFwiL2F3YXJkcz9zdGFydD1cXFwiICsgMjAgKiAocGFnZSAtIDEpICsgXFxcIiZjb3VudD0yMFxcXCIpO1xcclxcbiAgICByICs9IFxcXCI8aDI+6I635aWW6K6w5b2VXFxcIiArICc8c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPicgKyAocy50b3RhbCAhPSAwID8gJyjlhbEnICsgcy50b3RhbCArICfpobkpJyA6ICco5pqC5pegKScpICsgJzwvZm9udD48L3NtYWxsPicgKyBcXFwiPC9oMj5cXFwiO1xcclxcbiAgICAvL3IgKz0gJzxmb250IGNvbG9yPVxcXCJncmV5XFxcIj4nICsgKHMudG90YWwgIT0gMCA/ICflhbEnICsgcy50b3RhbCArICfpobknIDogJ+aaguaXoCcpICsgJzwvZm9udD48YnIvPic7XFxyXFxuICAgIGxldCByMiA9ICcnO1xcclxcbiAgICBzLmF3YXJkcy5mb3JFYWNoKGUgPT4ge1xcclxcbiAgICAgICAgcjIgKz0gKGUuY2VyZW1vbnkudGl0bGUgKyAnKCcgKyBlLmNlcmVtb255LnllYXIgKyAnKScpLmJpZygpLmJvbGQoKSArICc8c21hbGw+KDxhIGhyZWY9XFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5I0BydWxlPWpzOmV2YWwoSlNPTi5wYXJzZShmZXRjaChgaGlrZXI6Ly9wYWdlL21haW5gKSkucnVsZSk7YXdhcmRWaWV3KGAnICsgZS5jZXJlbW9ueS5pZCArICdgLGAnICsgZS5jZXJlbW9ueS50aXRsZSArICdgKTtcXFwiPuafpeeci+ivpuaDhTwvYT4pPC9zbWFsbD4nICsgJzxici8+JztcXHJcXG4gICAgICAgIGUuY2F0ZWdvcmllcy5mb3JFYWNoKGl0ZW0gPT4ge1xcclxcbiAgICAgICAgICAgIHIyICs9IChpdGVtLmNhdGVnb3J5LnRpdGxlICsgKGl0ZW0uaXNfd29uID8gJycgOiAnKOaPkOWQjSknKSArICcmbmJzcDsnKS5mb250Y29sb3IoXFxcImdyZXlcXFwiKTtcXHJcXG4gICAgICAgICAgICByMiArPSBpdGVtLmNlbGVicml0aWVzLm1hcChjZWxlYnJpdHkgPT4gY2VsZWJyaXR5Lm5hbWUpLmpvaW4oJyZuYnNwOy8mbmJzcDsnKTtcXHJcXG4gICAgICAgICAgICByMiArPSAnPGJyLz4nO1xcclxcbiAgICAgICAgfSlcXHJcXG4gICAgICAgIHIyICs9ICc8YnIvPic7XFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIGlmIChwYWdlID09IDEpIHtcXHJcXG4gICAgICAgIHNldEhvbWVSZXN1bHQoe1xcclxcbiAgICAgICAgICAgIGRhdGE6IFt7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiByICsgcjIsXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcclxcbiAgICAgICAgICAgIH1dXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9IGVsc2UgaWYocy5hd2FyZHMubGVuZ3RoID09IDApe1xcclxcbiAgICAgICAgc2V0UmVzdWx0KFtdKTtcXHJcXG4gICAgfSBlbHNle1xcclxcbiAgICAgICAgc2V0SG9tZVJlc3VsdCh7XFxyXFxuICAgICAgICAgICAgZGF0YTogW3tcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHIyLFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXHJcXG4gICAgICAgICAgICB9XVxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfVxcclxcbn1cXHJcXG5cXHJcXG4vL+WllumhueivpuaDhemhtemdolxcclxcbmZ1bmN0aW9uIGF3YXJkVmlldyhpZCwgbmFtZSkge1xcclxcbiAgICBzZXRQYWdlVGl0bGUobmFtZSk7XFxyXFxuICAgIGxldCBzID0gZ2V0RG91YmFuUmVzKFxcXCJodHRwczovL2Zyb2RvLmRvdWJhbi5jb20vYXBpL3YyL2NlcmVtb255L1xcXCIgKyBpZCk7XFxyXFxuICAgIGxldCBhID0gW107XFxyXFxuICAgIGEucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAocy50aXRsZSArICcoJyArIHMueWVhciArICcpJykuYmlnKCkuYm9sZCgpLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcclxcbiAgICAgICAgZXh0cmE6IHtcXHJcXG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgfSlcXHJcXG4gICAgcy5wbGF5bGlzdHMuZm9yRWFjaChlID0+IHtcXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IGUudGl0bGUsXFxyXFxuICAgICAgICAgICAgZGVzYzogJ+WFsScgKyBlLml0ZW1zX2NvdW50ICsgJ+mDqCcsXFxyXFxuICAgICAgICAgICAgaW1nOiBlLmNvdmVyX3VybCArICdAUmVmZXJlcj0nICsgZS5jb3Zlcl91cmwsXFxyXFxuICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5I25vSGlzdG9yeSMnKS5ydWxlKChpZCkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgICAgIGRvdUxpc3QoaWQpO1xcclxcbiAgICAgICAgICAgIH0sIGUuaWQpXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICBsZXQgciA9ICcnO1xcclxcbiAgICBzLnByaXplcy5mb3JFYWNoKGUgPT4ge1xcclxcbiAgICAgICAgciArPSAnPGg0PuiOt+WlluWQjeWNlSgnICsgZS50aXRsZSArICcpPC9oND4nO1xcclxcbiAgICAgICAgZS5jYXRlZ29yaWVzLmZvckVhY2godCA9PiB7XFxyXFxuICAgICAgICAgICAgciArPSAodC50aXRsZSArICcmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsnKS5mb250Y29sb3IoXFxcImdyZXlcXFwiKS5ib2xkKCk7XFxyXFxuICAgICAgICAgICAgciArPSB0LnJlc3VsdHMubWFwKGl0ZW0gPT4gISFpdGVtLmluZm8gPyBpdGVtLmluZm8gKyAoJyZuYnNwOy0mbmJzcDsnICsgaXRlbS50aXRsZSArICcmbmJzcDsmbmJzcDsnKS5mb250Y29sb3IoXFxcImdyZXlcXFwiKSA6IGl0ZW0udGl0bGUpLmpvaW4oJyZuYnNwOy8mbmJzcDsnKS5ib2xkKCk7XFxyXFxuICAgICAgICAgICAgciArPSAnPGJyLz4nO1xcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfSlcXHJcXG4gICAgYS5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiByLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIGxldCBpID0gW107XFxyXFxuICAgIHMuY2VyZW1vbmllcy5mb3JFYWNoKGUgPT4ge1xcclxcbiAgICAgICAgaS5wdXNoKHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogZS50aXRsZSxcXHJcXG4gICAgICAgICAgICBkZXNjOiBlLnllYXIgKyAn5bm0JyxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnLFxcclxcbiAgICAgICAgICAgIGltZzogZS5waWMubm9ybWFsICsgJ0BSZWZlcmVyPScgKyBlLnBpYy5ub3JtYWwsXFxyXFxuICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5I25vSGlzdG9yeSMnKS5ydWxlKChpZCwgbmFtZSkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgICAgIGF3YXJkVmlldyhpZCwgbmFtZSk7XFxyXFxuICAgICAgICAgICAgfSwgZS5pZCwgZS50aXRsZSlcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIH0pXFxyXFxuICAgIGlmIChpLmxlbmd0aCA+IDApIHtcXHJcXG4gICAgICAgIGkudW5zaGlmdCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgJ+WOhuWxiuWbnumhvicuYmlnKCkuYm9sZCgpLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXHJcXG4gICAgICAgICAgICBleHRyYToge1xcclxcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHNldFJlc3VsdChhLmNvbmNhdChpKSk7XFxyXFxufVxcclxcblxcclxcbi8v5Ymn54Wn6aG16Z2iXFxyXFxuZnVuY3Rpb24gc3RpbGxzTGlzdCh0eXBlLCBpZCkge1xcclxcbiAgICBhZGRMaXN0ZW5lcignb25DbG9zZScsICdjbGVhck15VmFyKFxcXCJwaG90b1xcXCIpJyk7XFxyXFxuICAgIGxldCBwYWdlID0gTVlfUEFHRTtcXHJcXG4gICAgbGV0IGl0ZW1zID0ge1xcclxcbiAgICAgICAg5Ymn54WnOiAncGhvdG9zJyxcXHJcXG4gICAgICAgIOa1t+aKpTogJ2NvdmVycydcXHJcXG4gICAgfTtcXHJcXG4gICAgbGV0IGEgPSBbXTtcXHJcXG4gICAgbGV0IHRlbXAgPSBnZXRNeVZhcigncGhvdG8nLCAncGhvdG9zJyk7XFxyXFxuICAgIGxldCBjb2xvciA9IGdldENvbmZpZygnY2hvb3NlQ29sb3InKTtcXHJcXG4gICAgZm9yIChsZXQgaSBpbiBpdGVtcykge1xcclxcbiAgICAgICAgYS5wdXNoKHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogdGVtcCA9PSBpdGVtc1tpXSA/ICfigJzigJzigJ3igJ0nICsgaS5mb250Y29sb3IoY29sb3IpIDogaSxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcclxcbiAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScpLmxhenlSdWxlKCh0KSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdwaG90bycsIHQpO1xcclxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcclxcbiAgICAgICAgICAgIH0sIGl0ZW1zW2ldKVxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBsZXQgciA9IGdldERvdWJhblJlcyhcXFwiaHR0cHM6Ly9mcm9kby5kb3ViYW4uY29tL2FwaS92Mi9cXFwiICsgdHlwZSArIFxcXCIvXFxcIiArIGlkICsgXFxcIi9cXFwiICsgdGVtcCArIFxcXCI/c3RhcnQ9XFxcIiArIDMwICogKHBhZ2UgLSAxKSArIFxcXCImY291bnQ9MzBcXFwiKTtcXHJcXG4gICAgbGV0IGwgPSByLnBob3Rvcy5tYXAoKGUgPT4gKHtcXHJcXG4gICAgICAgIHRpdGxlOiBlLmNyZWF0ZV90aW1lLFxcclxcbiAgICAgICAgaW1nOiBlLmltYWdlLnNtYWxsLnVybCArIFxcXCJAUmVmZXJlcj1cXFwiICsgZS5pbWFnZS5zbWFsbC51cmwsXFxyXFxuICAgICAgICB1cmw6IGUuaW1hZ2UubGFyZ2UudXJsICsgXFxcIj90eXBlPS5qcGdAUmVmZXJlcj1cXFwiICsgZS5pbWFnZS5sYXJnZS51cmwgKyBcXFwiP3R5cGU9LmpwZ1xcXCIsXFxyXFxuICAgICAgICBjb2xfdHlwZTogXFxcInBpY18yXFxcIlxcclxcbiAgICB9KSkpO1xcclxcblxcclxcbiAgICBpZiAocGFnZSA9PSAxKSB7XFxyXFxuICAgICAgICBsLnVuc2hpZnQoe1xcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxyXFxuICAgICAgICB9KTtcXHJcXG4gICAgICAgIGlmICh0ZW1wID09ICdwaG90b3MnKSB7XFxyXFxuICAgICAgICAgICAgbC51bnNoaWZ0KHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCI8YmlnPuWFsTxzdHJvbmc+IFxcXCIgKyByLnRvdGFsICsgJyA8L3N0cm9uZz7lvKDliafnhac8L2JpZz48YnIvPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+5a6Y5pa55Ymn54Wn77yaJyArIHIubyArIFxcXCLlvKAmbmJzcDvmiKrlm77vvJpcXFwiICsgci5jICsgXFxcIuW8oCZuYnNwO+W3peS9nOeFp++8mlxcXCIgKyByLncgKyBcXFwi5bygJm5ic3A75paw6Ze75Zu+54mH77yaXFxcIiArIHIubiArIFxcXCLlvKAmbmJzcDvnsonkuJ3lm77niYfvvJpcXFwiICsgci5mICsgXFxcIuW8oDwvZm9udD48L3NtYWxsPlxcXCIsXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcclxcbiAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgIGwudW5zaGlmdCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiPGJpZz7lhbE8c3Ryb25nPiBcXFwiICsgci50b3RhbCArIFxcXCI8L3N0cm9uZz7lvKDmtbfmiqU8L2JpZz5cXFwiLFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXHJcXG4gICAgICAgICAgICB9KVxcclxcbiAgICAgICAgfVxcclxcbiAgICAgICAgbCA9IGEuY29uY2F0KGwpO1xcclxcbiAgICB9XFxyXFxuICAgIHNldEhvbWVSZXN1bHQoe1xcclxcbiAgICAgICAgZGF0YTogbFxcclxcbiAgICB9KVxcclxcbn1cXHJcXG5cXHJcXG4vL+a8lOiBjOS6uuWRmOmhtemdolxcclxcbmZ1bmN0aW9uIGNyZWRpdHModHlwZSwgaWQpIHtcXHJcXG4gICAgbGV0IGkgPSBnZXREb3ViYW5SZXMoXFxcImh0dHBzOi8vZnJvZG8uZG91YmFuLmNvbS9hcGkvdjIvXFxcIiArIHR5cGUgKyBcXFwiL1xcXCIgKyBpZCArIFxcXCIvY3JlZGl0c1xcXCIpO1xcclxcbiAgICBsZXQgciA9IFtdO1xcclxcbiAgICBpLmNyZWRpdHMuZm9yRWFjaCgoZSA9PiB7XFxyXFxuICAgICAgICByLnB1c2goe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiBlLnRpdGxlLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcclxcbiAgICAgICAgfSk7XFxyXFxuICAgICAgICBlLmNlbGVicml0aWVzLmZvckVhY2goKGUgPT4ge1xcclxcbiAgICAgICAgICAgIHIucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBlLm5hbWUgKyBcXFwiXFxcXG5cXFwiICsgZS5sYXRpbl9uYW1lLFxcclxcbiAgICAgICAgICAgICAgICBkZXNjOiBlLmNoYXJhY3RlcixcXHJcXG4gICAgICAgICAgICAgICAgaW1nOiBlLmF2YXRhci5ub3JtYWwgKyBcXFwiQFJlZmVyZXI9XFxcIiArIGUuYXZhdGFyLm5vcm1hbCxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxyXFxuICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI2ltbWVyc2l2ZVRoZW1lIycpLnJ1bGUoKGUpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGVsZXNzYXJWaWV3KGUudXJpLnNwbGl0KFxcXCJzdWJqZWN0X2lkPVxcXCIpWzFdLCBlLmlkLCBlLm5hbWUpO1xcclxcbiAgICAgICAgICAgICAgICB9LCBlKVxcclxcbiAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICB9KSlcXHJcXG4gICAgfSkpO1xcclxcbiAgICBzZXRIb21lUmVzdWx0KHtcXHJcXG4gICAgICAgIGRhdGE6IHJcXHJcXG4gICAgfSlcXHJcXG59XFxyXFxuXFxyXFxuLy/nn63or4TpobXpnaJcXHJcXG5mdW5jdGlvbiBzaG9ydENvbW1lbnRMaXN0KHR5cGUsIGlkKSB7XFxyXFxuICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgXFxcImNsZWFyTXlWYXIoJ3Nob3J0Y29tbWVudCcpXFxcIik7XFxyXFxuICAgIGxldCBpdGVtcyA9IHtcXHJcXG4gICAgICAgIOeDremXqDogJ2hvdCcsXFxyXFxuICAgICAgICDmnIDmlrA6ICdsYXRlc3QnXFxyXFxuICAgIH1cXHJcXG4gICAgbGV0IHUgPSBnZXRNeVZhcignc2hvcnRjb21tZW50JywgJ2hvdCcpO1xcclxcbiAgICBsZXQgYSA9IFtdO1xcclxcbiAgICBsZXQgY2hvb3NlQ29sb3IgPSBnZXRDb25maWcoJ2Nob29zZUNvbG9yJykgLy8gfHwgXFxcIiNGQTcyOThcXFwiO1xcclxcbiAgICBmb3IgKGkgaW4gaXRlbXMpIHtcXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IHUgPT09IGl0ZW1zW2ldID8gJ+KAnOKAnOKAneKAnTxiPiA8Zm9udCBjb2xvcj0nICsgY2hvb3NlQ29sb3IgKyAnPicgKyBpICsgJyA8L2ZvbnQ+PC9iPicgOiBpLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxyXFxuICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjogLy9lbXB0eScpLmxhenlSdWxlKCh0KSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzaG9ydGNvbW1lbnRcXFwiLCB0KTtcXHJcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXHJcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcclxcbiAgICAgICAgICAgIH0sIGl0ZW1zW2ldKVxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBsZXQgcGFnZSA9IE1ZX1BBR0U7XFxyXFxuICAgIGxldCByID0gZ2V0RG91YmFuUmVzKFxcXCJodHRwczovL2Zyb2RvLmRvdWJhbi5jb20vYXBpL3YyL1xcXCIgKyB0eXBlICsgXFxcIi9cXFwiICsgaWQgKyBcXFwiL2ludGVyZXN0cz9zdGFydD1cXFwiICsgMzAgKiAocGFnZSAtIDEpICsgXFxcIiZjb3VudD0zMCZvcmRlcl9ieT1cXFwiICsgdSk7XFxyXFxuICAgIGxldCBsID0gW107XFxyXFxuICAgIGxldCBzdGFyQ29sb3IgPSBnZXRDb25maWcoJ3N0YXJDb2xvcicpO1xcclxcbiAgICByLmludGVyZXN0cy5mb3JFYWNoKChlID0+IHtcXHJcXG4gICAgICAgIGxldCB0ID0gXFxcIlxcXCI7XFxyXFxuICAgICAgICBpZiAoZS5yYXRpbmcpIHtcXHJcXG4gICAgICAgICAgICB0ID0gY29tcHV0ZVJhdGluZyhlLnJhdGluZy5tYXgsIGUucmF0aW5nLnZhbHVlKTtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIGwucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IGUudXNlci5uYW1lLFxcclxcbiAgICAgICAgICAgIGltZzogZS51c2VyLmF2YXRhcixcXHJcXG4gICAgICAgICAgICB1cmw6IGUudXNlci51cmwsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxyXFxuICAgICAgICB9KTtcXHJcXG4gICAgICAgIGwucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IGUuY29tbWVudCArICh0ID8gJzxici8+PHNtYWxsPueci+i/hyA8Zm9udCBjb2xvcj0nICsgc3RhckNvbG9yICsgJz4nICsgdCArIFxcXCI8L2ZvbnQ+PC9zbWFsbD5cXFwiIDogXFxcIlxcXCIpICsgJzxici8+PHNtYWxsPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj4nICsgZS52b3RlX2NvdW50ICsgXFxcIui1nuKAolxcXCIgKyAvXFxcXGR7NH0tXFxcXGR7MSwyfS1cXFxcZHsxLDJ9L2cuZXhlYyhlLmNyZWF0ZV90aW1lKSArIFxcXCI8L2ZvbnQ+PC9zbWFsbD5cXFwiLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcclxcbiAgICAgICAgfSk7XFxyXFxuICAgICAgICBsLnB1c2goe1xcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCJcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIH0pKTtcXHJcXG5cXHJcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcclxcbiAgICAgICAgbC51bnNoaWZ0KHtcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcclxcbiAgICAgICAgfSk7XFxyXFxuICAgICAgICBsLnVuc2hpZnQoe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwiPGJpZz7lhbE8c3Ryb25nPiBcXFwiICsgci50b3RhbCArIFxcXCIgPC9zdHJvbmc+5p2h55+t6K+EPC9iaWc+XFxcIixcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXHJcXG4gICAgICAgIH0pO1xcclxcbiAgICAgICAgc2V0SG9tZVJlc3VsdCh7XFxyXFxuICAgICAgICAgICAgZGF0YTogYS5jb25jYXQobClcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICBzZXRIb21lUmVzdWx0KHtcXHJcXG4gICAgICAgICAgICBkYXRhOiBsXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxufVxcclxcblxcclxcbi8v5Ymn6K+E6aG16Z2iXFxyXFxuZnVuY3Rpb24gZHJhbWFSZXZpZXdMaXN0KHR5cGUsIGlkKSB7XFxyXFxuICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgXFxcImNsZWFyTXlWYXIoJ2RyYW1hcmV2aWV3JylcXFwiKTtcXHJcXG4gICAgbGV0IGl0ZW1zID0ge1xcclxcbiAgICAgICAg54Ot6ZeoOiAnaG90JyxcXHJcXG4gICAgICAgIOacgOaWsDogJ2xhdGVzdCdcXHJcXG4gICAgfVxcclxcbiAgICBsZXQgdSA9IGdldE15VmFyKCdkcmFtYXJldmlldycsICdob3QnKTtcXHJcXG4gICAgbGV0IGEgPSBbXTtcXHJcXG4gICAgbGV0IGNob29zZUNvbG9yID0gZ2V0Q29uZmlnKCdjaG9vc2VDb2xvcicpO1xcclxcbiAgICBmb3IgKGkgaW4gaXRlbXMpIHtcXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IHUgPT09IGl0ZW1zW2ldID8gJ+KAnOKAnOKAneKAnTxiPiA8Zm9udCBjb2xvcj0nICsgY2hvb3NlQ29sb3IgKyAnPicgKyBpICsgJyA8L2ZvbnQ+PC9iPicgOiBpLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxyXFxuICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjogLy9lbXB0eScpLmxhenlSdWxlKCh0KSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkcmFtYXJldmlld1xcXCIsIHQpO1xcclxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICAgICAgfSwgaXRlbXNbaV0pXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGxldCBwYWdlID0gTVlfUEFHRVxcclxcbiAgICBsZXQgciA9IGdldERvdWJhblJlcyhcXFwiaHR0cHM6Ly9mcm9kby5kb3ViYW4uY29tL2FwaS92Mi9cXFwiICsgdHlwZSArIFxcXCIvXFxcIiArIGlkICsgXFxcIi9yZXZpZXdzP3N0YXJ0PVxcXCIgKyAxNSAqIChwYWdlIC0gMSkgKyBcXFwiJmNvdW50PTE1Jm9yZGVyX2J5PVxcXCIgKyB1KTtcXHJcXG4gICAgbGV0IGwgPSBbXTtcXHJcXG4gICAgbGV0IHN0YXJDb2xvciA9IGdldENvbmZpZygnc3RhckNvbG9yJyk7XFxyXFxuICAgIHIucmV2aWV3cy5mb3JFYWNoKChlID0+IHtcXHJcXG4gICAgICAgIGxldCB0ID0gXFxcIlxcXCI7XFxyXFxuICAgICAgICBpZiAoZS5yYXRpbmcpIHtcXHJcXG4gICAgICAgICAgICB0ID0gY29tcHV0ZVJhdGluZyhlLnJhdGluZy5tYXgsIGUucmF0aW5nLnZhbHVlKTtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIGxldCBpID0gZS5jb21tZW50c19jb3VudCA/IGUuY29tbWVudHNfY291bnQgKyBcXFwi5Zue5aSNXFxcIiA6IFxcXCJcXFwiLFxcclxcbiAgICAgICAgICAgIHIgPSBlLnVzZWZ1bF9jb3VudCA/IGUudXNlZnVsX2NvdW50ICsgXFxcIuacieeUqFxcXCIgOiBcXFwiXFxcIixcXHJcXG4gICAgICAgICAgICBvID0gZS5yZXNoYXJlc19jb3VudCA/IGUucmVzaGFyZXNfY291bnQgKyBcXFwi6L2s5Y+RXFxcIiA6IFxcXCJcXFwiO1xcclxcblxcclxcbiAgICAgICAgciA9IGkgJiYgciA/IFxcXCLigKJcXFwiICsgciA6IHI7XFxyXFxuICAgICAgICBvID0gKGkgfHwgcikgJiYgbyA/IFxcXCLigKJcXFwiICsgbyA6IG87XFxyXFxuICAgICAgICBsLnB1c2goe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiBlLnVzZXIubmFtZSxcXHJcXG4gICAgICAgICAgICBpbWc6IGUudXNlci5hdmF0YXIsXFxyXFxuICAgICAgICAgICAgdXJsOiBlLnVzZXIudXJsLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgICAgIGwucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCI8c3Ryb25nPlxcXCIgKyBlLnRpdGxlICsgXFxcIjwvc3Ryb25nPjxici8+XFxcIiArIGUuYWJzdHJhY3QgKyAnICAgPHNtYWxsPig8YSBocmVmPVxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNAcnVsZT1qczpldmFsKEpTT04ucGFyc2UoZmV0Y2goYGhpa2VyOi8vcGFnZS9tYWluYCkpLnJ1bGUpO2RyYW1hUmV2aWV3VmlldygnICsgZS5pZCArICcpXFxcIj7mm7TlpJo8L2E+KTwvc21hbGw+JyArICh0ID8gJzxici8+PHNtYWxsPueci+i/hyA8Zm9udCBjb2xvcj0nICsgc3RhckNvbG9yICsgJz4nICsgdCArIFxcXCI8L2ZvbnQ+PC9zbWFsbD5cXFwiIDogXFxcIlxcXCIpICsgJzxici8+PHNtYWxsPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj4nICsgaSArIHIgKyBvICsgXFxcIjwvZm9udD48L3NtYWxsPlxcXCIsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICAgICAgbC5wdXNoKHtcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9KSk7XFxyXFxuXFxyXFxuICAgIGlmIChwYWdlID09IDEpIHtcXHJcXG4gICAgICAgIGwudW5zaGlmdCh7XFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXHJcXG4gICAgICAgIH0pO1xcclxcbiAgICAgICAgbC51bnNoaWZ0KHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogXFxcIjxiaWc+5YWxPHN0cm9uZz4gXFxcIiArIHIudG90YWwgKyBcXFwiIDwvc3Ryb25nPuadoeWJp+ivhDwvYmlnPlxcXCIsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxyXFxuICAgICAgICB9KTtcXHJcXG5cXHJcXG4gICAgICAgIHNldEhvbWVSZXN1bHQoe1xcclxcbiAgICAgICAgICAgIGRhdGE6IGEuY29uY2F0KGwpXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgc2V0SG9tZVJlc3VsdCh7XFxyXFxuICAgICAgICAgICAgZGF0YTogbFxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfVxcclxcbn1cXHJcXG5cXHJcXG4vL+mihOWRiueJh+mhtemdolxcclxcbmZ1bmN0aW9uIHRyYWlsZXJzKHR5cGUsIGlkKSB7XFxyXFxuICAgIHNldFBhZ2VUaXRsZSgn6aKE5ZGKLeeJh+autS3oirHnta4nKVxcclxcbiAgICBsZXQgaSA9IGdldERvdWJhblJlcyhcXFwiaHR0cHM6Ly9mcm9kby5kb3ViYW4uY29tL2FwaS92Mi9cXFwiICsgdHlwZSArIFxcXCIvXFxcIiArIGlkICsgXFxcIi90cmFpbGVyc1xcXCIpLnRyYWlsZXJzO1xcclxcbiAgICBpLmZvckVhY2goKGUgPT4ge1xcclxcbiAgICAgICAgZS5jb2xfdHlwZSA9IFxcXCJtb3ZpZV8yXFxcIiwgZS5kZXNjID0gZS5zdWJqZWN0X3RpdGxlICsgXFxcIuKAolxcXCIgKyBlLmNyZWF0ZV90aW1lLCBlLmltZyA9IGUuY292ZXJfdXJsLCBlLnVybCA9IGUudmlkZW9fdXJsXFxyXFxuICAgIH0pKTtcXHJcXG5cXHJcXG4gICAgbGV0IHIgPSBpLmZpbHRlcigoZSA9PiBcXFwiQVxcXCIgPT09IGUudHlwZSkpO1xcclxcbiAgICBsZXQgbCA9IGkuZmlsdGVyKChlID0+IFxcXCJCXFxcIiA9PT0gZS50eXBlKSk7XFxyXFxuICAgIGxldCBvID0gaS5maWx0ZXIoKGUgPT4gXFxcIkNcXFwiID09PSBlLnR5cGUpKTtcXHJcXG5cXHJcXG4gICAgaWYgKHIubGVuZ3RoID4gMCkge1xcclxcbiAgICAgICAgci51bnNoaWZ0KHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogXFxcIumihOWRilxcXCIsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuICAgIGlmIChsLmxlbmd0aCA+IDApIHtcXHJcXG4gICAgICAgIGwudW5zaGlmdCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLniYfmrrVcXFwiLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfVxcclxcbiAgICBpZiAoby5sZW5ndGggPiAwKSB7XFxyXFxuICAgICAgICBvLnVuc2hpZnQoe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi6Iqx57WuXFxcIixcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgc2V0SG9tZVJlc3VsdCh7XFxyXFxuICAgICAgICBkYXRhOiByLmNvbmNhdChsKVxcclxcbiAgICAgICAgICAgIC5jb25jYXQobylcXHJcXG4gICAgfSlcXHJcXG59XFxyXFxuXFxyXFxuLy/op4bpopHor4TorrrpobXpnaJcXHJcXG5mdW5jdGlvbiB2aWRlb0NvbW1lbnQodHlwZSwgaWQpIHtcXHJcXG4gICAgbGV0IGkgPSBnZXREb3ViYW5SZXMoXFxcImh0dHBzOi8vZnJvZG8uZG91YmFuLmNvbS9hcGkvdjIvXFxcIiArIHR5cGUgKyBcXFwiL1xcXCIgKyBpZCArIFxcXCIvdmlkZW9zXFxcIikudmlkZW9zO1xcclxcbiAgICBpLmZvckVhY2goKGUgPT4ge1xcclxcbiAgICAgICAgZS5jb2xfdHlwZSA9IFxcXCJtb3ZpZV8yXFxcIiwgZS5kZXNjID0gZS5hdXRob3IubmFtZSArIFxcXCLigKJcXFwiICsgZS5jcmVhdGVfdGltZSwgZS5pbWcgPSBlLmNvdmVyX3VybCArIFxcXCJAUmVmZXJlcj1cXFwiICsgZS5jb3Zlcl91cmwsIGUudXJsID0gZS52aWRlb191cmxcXHJcXG4gICAgfSkpXFxyXFxuICAgIGlmIChpLmxlbmd0aCA+IDApIHtcXHJcXG4gICAgICAgIGkudW5zaGlmdCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLop4bpopHor4TorrpcXFwiLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfVxcclxcbiAgICBzZXRIb21lUmVzdWx0KHtcXHJcXG4gICAgICAgIGRhdGE6IGlcXHJcXG4gICAgfSlcXHJcXG59XFxyXFxuXFxyXFxuLy/mvJTogYzkurrlkZjor6bmg4XpobXpnaJcXHJcXG5mdW5jdGlvbiBlbGVzc2FyVmlldyhpZCwgcGlkLCBuYW1lKSB7XFxyXFxuICAgIHNldFBhZ2VUaXRsZShuYW1lKTtcXHJcXG4gICAgbGV0IGkgPSBnZXREb3ViYW5SZXMoXFxcImh0dHBzOi8vZnJvZG8uZG91YmFuLmNvbS9hcGkvdjIvZWxlc3Nhci9zdWJqZWN0L1xcXCIgKyBpZCk7XFxyXFxuICAgIGxldCBhID0gW107XFxyXFxuICAgIGEucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAoaS50aXRsZSArICcoJyArIGkubGF0aW5fdGl0bGUgKyAnKScpLmJpZygpLmJvbGQoKSxcXHJcXG4gICAgICAgIGRlc2M6ICfigJzigJzigJ3igJ0nICsgaS5kZXNjLm1hdGNoKC9cXFxcPHBcXFxcPi4qXFxcXDxcXFxcL3BcXFxcPi8pWzBdLFxcclxcbiAgICAgICAgaW1nOiBpLmNvdmVyLm5vcm1hbC51cmwgKyAnQFJlZmVyZXI9JyArIGkuY292ZXIubm9ybWFsLnVybCxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cicsXFxyXFxuICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHknKS5ydWxlKChkZXNjLCBleHRyYSwgbmFtZSkgPT4ge1xcclxcbiAgICAgICAgICAgIGxldCBpbmZvID0gZXh0cmEuaW5mby5tYXAoZSA9PiBlLmpvaW4oJzombmJzcDsnKSk7XFxyXFxuICAgICAgICAgICAgc2V0UmVzdWx0KFt7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnPGgyPicgKyBuYW1lICsgJzwvaDI+JyArIGluZm8uam9pbignPGJyLz4nKSArIGRlc2MubWF0Y2goL1xcXFw8cFxcXFw+LipcXFxcPFxcXFwvcFxcXFw+LylbMF0sXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcclxcbiAgICAgICAgICAgIH1dKVxcclxcbiAgICAgICAgfSwgaS5kZXNjLCBpLmV4dHJhLCBpLnRpdGxlKVxcclxcbiAgICB9KVxcclxcbiAgICBcXHJcXG4gICAgbGV0IGluZGV4ID0gaS5tb2R1bGVzLmZpbmRJbmRleChjdXIgPT4gY3VyLnR5cGUgPT0gXFxcImF3YXJkX3Jlc3VsdF9jb2xsZWN0aW9uXFxcIik7XFxyXFxuICAgIGlmIChpbmRleCA+IC0xKSB7XFxyXFxuICAgICAgICBsZXQgZSA9IGkubW9kdWxlc1tpbmRleF0ucGF5bG9hZDtcXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgJ+iOt+WlluiusOW9lScuYmlnKCkuYm9sZCgpICsgJzxzbWFsbD4o5YWxJyArIGUudG90YWwgKyAn6aG5KTwvc21hbGw+JyxcXHJcXG4gICAgICAgICAgICBkZXNjOiAn4oCc4oCc4oCd4oCdPHN0cm9uZz4nICsgZS5hd2FyZHNbMF0uY2VyZW1vbnkudGl0bGUgKyAnPC9zdHJvbmc+XFxcXG4nICsgZS5hd2FyZHNbMF0uY2F0ZWdvcnkudGl0bGUgKyAoZS5hd2FyZHNbMF0uaXNfd29uID8gJycgOiAnKOaPkOWQjSknKSxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcclxcbiAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eS8jLyRwYWdle2Z5cGFnZX0jbm9IaXN0b3J5IycpLnJ1bGUoKGlkLCBjb3VudCkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgICAgIGVsZXNzYXJBd2FyZHMoaWQsIGNvdW50KTtcXHJcXG4gICAgICAgICAgICB9LCBlLmlkLCBlLnRvdGFsKSxcXHJcXG4gICAgICAgICAgICBleHRyYToge1xcclxcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuICAgIFxcclxcbiAgICBpbmRleCA9IGkubW9kdWxlcy5maW5kSW5kZXgoY3VyID0+IGN1ci50eXBlID09IFxcXCJ3b3JrX2NvbGxlY3Rpb25zXFxcIik7XFxyXFxuICAgIGlmIChpbmRleCA+IC0xKSB7XFxyXFxuICAgICAgICBsZXQgZTIgPSBpLm1vZHVsZXNbaW5kZXhdLnBheWxvYWQ7XFxyXFxuICAgICAgICBhLnB1c2goe1xcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgICAgICBhLnB1c2goe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArICflvbHop4bkvZzlk4EnLmJpZygpLmJvbGQoKSArICgnKOWFsScgKyBlMi5jb2xsZWN0aW9uc1swXS50b3RhbCArICfpg6gpJykuc21hbGwoKSxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcclxcbiAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eS8jLyRwYWdle2Z5cGFnZX0jbm9IaXN0b3J5IycpLnJ1bGUoKGlkLCB0eXBlKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICAgICAgZWxlc3NhcldvcmtzKGlkLCB0eXBlKTtcXHJcXG4gICAgICAgICAgICB9LCBlMi5pZCwgZTIuY29sbGVjdGlvbnNbMF0udGl0bGUpLFxcclxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxyXFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcclxcbiAgICAgICAgICAgIH1cXHJcXG4gICAgICAgIH0pXFxyXFxuXFxyXFxuICAgICAgICBsZXQgZGV0YWlsc1ZpZXdDb25maWdzID0gZ2V0Q29uZmlnKCdkZXRhaWxzVmlld0NvbmZpZ3MnKTtcXHJcXG4gICAgICAgIGxldCB3b3JrcyA9IGUyLmNvbGxlY3Rpb25zWzBdLndvcmtzO1xcclxcbiAgICAgICAgbGV0IGxlbmd0aCA9IHdvcmtzLmxlbmd0aCA8PSAzID8gd29ya3MubGVuZ3RoIDogMztcXHJcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcXHJcXG4gICAgICAgICAgICBsZXQgZSA9IHdvcmtzW2ldO1xcclxcbiAgICAgICAgICAgIGxldCByYXRpbmcgPSBcXFwiXFxcIjtcXHJcXG4gICAgICAgICAgICBpZiAoZS5zdWJqZWN0LmV4dHJhLnJhdGluZ19ncm91cC5yYXRpbmcpIHtcXHJcXG4gICAgICAgICAgICAgICAgcmF0aW5nID0gY29tcHV0ZVJhdGluZyhlLnN1YmplY3QuZXh0cmEucmF0aW5nX2dyb3VwLnJhdGluZy5tYXgsIGUuc3ViamVjdC5leHRyYS5yYXRpbmdfZ3JvdXAucmF0aW5nLnZhbHVlKSArIFxcXCIgXFxcIiArIGUuc3ViamVjdC5leHRyYS5yYXRpbmdfZ3JvdXAucmF0aW5nLnZhbHVlICsgXFxcIuWIhlxcXCI7XFxyXFxuICAgICAgICAgICAgfVxcclxcblxcclxcbiAgICAgICAgICAgIGxldCB0eXBlID0gZS5zdWJqZWN0LnN1YnR5cGUsXFxyXFxuICAgICAgICAgICAgICAgIGlkID0gZS5zdWJqZWN0LmlkLFxcclxcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGUuc3ViamVjdC50aXRsZTtcXHJcXG4gICAgICAgICAgICBsZXQgdXNlQ29uZmlnID0gZGV0YWlsc1ZpZXdDb25maWdzW2RldGFpbHNWaWV3Q29uZmlncy51c2VdLmNvbmZpZztcXHJcXG4gICAgICAgICAgICBsZXQgdXJsUGFyYW1zID0ge307XFxyXFxuICAgICAgICAgICAgaWYgKHVzZUNvbmZpZy5zdGFydHNXaXRoKCd7JykpIHtcXHJcXG4gICAgICAgICAgICAgICAgZXZhbCgndXJsUGFyYW1zID0gJyArIHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgdXJsUGFyYW1zLnVybCA9ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5IyNpbW1lcnNpdmVUaGVtZSNcXFwiICsgJz90eXBlPScgKyB0eXBlICsgJyZpZD0nICsgaWQpLnJ1bGUoKHR5cGUsIGlkLCB0aXRsZSwgdXNlQ29uZmlnKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gXFxcInBsYXlsaXN0XFxcIikge1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvdUxpc3QoaWQsIE1ZX1BBR0UsIDUwKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCh1c2VDb25maWcpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgICAgICB9LCB0eXBlLCBpZCwgdGl0bGUsIHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXHJcXG4gICAgICAgICAgICAgICAgaW1nOiBlLnN1YmplY3QuY292ZXIubm9ybWFsLnVybCArIFxcXCJAUmVmZXJlcj1cXFwiICsgZS5zdWJqZWN0LmNvdmVyLm5vcm1hbC51cmwsXFxyXFxuICAgICAgICAgICAgICAgIGRlc2M6IHJhdGluZyxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zJyxcXHJcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmxQYXJhbXMudXJsLFxcclxcbiAgICAgICAgICAgICAgICBleHRyYTogdXJsUGFyYW1zLmV4dHJhXFxyXFxuICAgICAgICAgICAgfSlcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIC8qYS5wdXNoKHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogJ+afpeeci+abtOWkmicsXFxyXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9qb2tlci10eC5jb2RpbmcubmV0L3AvaGlrZXJpbWcvZC9oaWtlci9naXQvcmF3L21hc3Rlci9pbWcvbW9yZV92ZXIucG5nP2Rvd25sb2FkPWZhbHNlJyxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnLFxcclxcbiAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eS8jLyRwYWdle2Z5cGFnZX0jbm9IaXN0b3J5IycpXFxyXFxuICAgICAgICAgICAgICAgIC5ydWxlKChpZCwgdHlwZSkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgICAgIGVsZXNzYXJXb3JrcyhpZCwgdHlwZSk7XFxyXFxuICAgICAgICAgICAgfSwgZTIuaWQsIGUyLmNvbGxlY3Rpb25zWzBdLnRpdGxlKVxcclxcbiAgICAgICAgfSkqL1xcclxcbiAgICB9XFxyXFxuICAgIFxcclxcbiAgICBpbmRleCA9IGkubW9kdWxlcy5maW5kSW5kZXgoY3VyID0+IGN1ci50eXBlID09IFxcXCJwaG90b3NcXFwiKTtcXHJcXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcXHJcXG4gICAgICAgIGxldCBlMyA9IGkubW9kdWxlc1tpbmRleF0ucGF5bG9hZDtcXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcclxcbiAgICAgICAgfSlcXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgJ+a8lOWRmOeFp+eJhycuYmlnKCkuYm9sZCgpICsgKCco5YWxJyArIGUzLnRvdGFsICsgJ+W8oCknKS5zbWFsbCgpLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxyXFxuICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5LyMvJHBhZ2V7ZnlwYWdlfSNub0hpc3RvcnkjJykucnVsZSgocGlkKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICAgICAgZWxlc3NhclBob3RvcyhwaWQpO1xcclxcbiAgICAgICAgICAgIH0sIHBpZCksXFxyXFxuICAgICAgICAgICAgZXh0cmE6IHtcXHJcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgfSlcXHJcXG5cXHJcXG4gICAgICAgIGxldCBwbGVuZ3RoID0gZTMucGhvdG9zLmxlbmd0aCA8PSAyID8gZTMucGhvdG9zLmxlbmd0aCA6IDI7XFxyXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsZW5ndGg7IGkrKykge1xcclxcbiAgICAgICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIC8vdGl0bGU6IGUzLnBob3Rvc1swXS5kZXNjcmlwdGlvbixcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18yJyxcXHJcXG4gICAgICAgICAgICAgICAgZGVzYzogJzAnLFxcclxcbiAgICAgICAgICAgICAgICBpbWc6IGUzLnBob3Rvc1tpXS5pbWFnZS5ub3JtYWwudXJsICsgJ0BSZWZlcmVyPScgKyBlMy5waG90b3NbaV0uaW1hZ2Uubm9ybWFsLnVybCxcXHJcXG4gICAgICAgICAgICAgICAgdXJsOiBlMy5waG90b3NbaV0uaW1hZ2Uubm9ybWFsLnVybCArICdAUmVmZXJlcj0nICsgZTMucGhvdG9zW2ldLmltYWdlLm5vcm1hbC51cmxcXHJcXG4gICAgICAgICAgICB9KVxcclxcbiAgICAgICAgfVxcclxcblxcclxcbiAgICAgICAgLyphLnB1c2goe1xcclxcbiAgICAgICAgICAgIC8vdGl0bGU6ICfmn6XnnIvmm7TlpJonLFxcclxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vam9rZXItdHguY29kaW5nLm5ldC9wL2hpa2VyaW1nL2QvaGlrZXIvZ2l0L3Jhdy9tYXN0ZXIvaW1nL21vcmUucG5nP2Rvd25sb2FkPWZhbHNlJyxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzInLFxcclxcbiAgICAgICAgICAgIGRlc2M6ICcwJyxcXHJcXG4gICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHkvIy8kcGFnZXtmeXBhZ2V9I25vSGlzdG9yeSMnKVxcclxcbiAgICAgICAgICAgICAgICAucnVsZSgocGlkKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICAgICAgZWxlc3NhclBob3RvcyhwaWQpO1xcclxcbiAgICAgICAgICAgIH0sIHBpZClcXHJcXG4gICAgICAgIH0pKi9cXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBzZXRSZXN1bHQoYSk7XFxyXFxufVxcclxcblxcclxcbi8v5ryU6IGM5Lq65ZGY6I635aWW6K+m5oOF6aG16Z2iXFxyXFxuZnVuY3Rpb24gZWxlc3NhckF3YXJkcyhpZCwgY291bnQpIHtcXHJcXG4gICAgbGV0IGkgPSBnZXREb3ViYW5SZXMoXFxcImh0dHBzOi8vZnJvZG8uZG91YmFuLmNvbS9hcGkvdjIvZWxlc3Nhci9hd2FyZF9yZXN1bHRfY29sbGVjdGlvbi9cXFwiICsgaWQgKyBcXFwiL2F3YXJkcz9zdGFydD1cXFwiICsgMzAgKiAoTVlfUEFHRSAtIDEpICsgXFxcIiZjb3VudD0zMFxcXCIpO1xcclxcbiAgICBsZXQgbCA9IFtdO1xcclxcbiAgICBsZXQgZGV0YWlsc1ZpZXdDb25maWdzID0gZ2V0Q29uZmlnKCdkZXRhaWxzVmlld0NvbmZpZ3MnKTtcXHJcXG4gICAgaS5hd2FyZHMuZm9yRWFjaCh0ID0+IHtcXHJcXG4gICAgICAgIGwucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6ICh0LnllYXIrXFxcIlxcXCIpLmJvbGQoKS5iaWcoKSxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXHJcXG4gICAgICAgIH0pXFxyXFxuXFxyXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubW9kdWxlcy5sZW5ndGg7IGkrKykge1xcclxcbiAgICAgICAgICAgIGxldCBlID0gdC5tb2R1bGVzW2ldO1xcclxcbiAgICAgICAgICAgIGlmICghZS5jZXJlbW9ueSB8fCAhZS5jYXRlZ29yeSkge1xcclxcbiAgICAgICAgICAgICAgICBsZXQgcmF0aW5nID0gXFxcIlxcXCI7XFxyXFxuICAgICAgICAgICAgICAgIGlmIChlLmV4dHJhLnJhdGluZ19ncm91cC5yYXRpbmcpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJhdGluZyA9IGNvbXB1dGVSYXRpbmcoZS5leHRyYS5yYXRpbmdfZ3JvdXAucmF0aW5nLm1heCwgZS5leHRyYS5yYXRpbmdfZ3JvdXAucmF0aW5nLnZhbHVlKSArIFxcXCIgXFxcIiArIGUuZXh0cmEucmF0aW5nX2dyb3VwLnJhdGluZy52YWx1ZSArIFxcXCLliIZcXFwiO1xcclxcbiAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgICAgIGxldCB0eXBlID0gZS5zdWJ0eXBlLFxcclxcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBlLmlkLFxcclxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBlLnRpdGxlO1xcclxcbiAgICAgICAgICAgICAgICBsZXQgdXNlQ29uZmlnID0gZGV0YWlsc1ZpZXdDb25maWdzW2RldGFpbHNWaWV3Q29uZmlncy51c2VdLmNvbmZpZztcXHJcXG4gICAgICAgICAgICAgICAgbGV0IHVybFBhcmFtcyA9IHt9O1xcclxcbiAgICAgICAgICAgICAgICBpZiAodXNlQ29uZmlnLnN0YXJ0c1dpdGgoJ3snKSkge1xcclxcbiAgICAgICAgICAgICAgICAgICAgZXZhbCgndXJsUGFyYW1zID0gJyArIHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICB1cmxQYXJhbXMudXJsID0gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI2ltbWVyc2l2ZVRoZW1lI1xcXCIgKyAnP3R5cGU9JyArIHR5cGUgKyAnJmlkPScgKyBpZCkucnVsZSgodHlwZSwgaWQsIHRpdGxlLCB1c2VDb25maWcpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFxcXCJwbGF5bGlzdFxcXCIpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91TGlzdChpZCwgTVlfUEFHRSwgNTApO1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwodXNlQ29uZmlnKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgICAgICAgICB9LCB0eXBlLCBpZCwgdGl0bGUsIHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICAgICAgbC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXHJcXG4gICAgICAgICAgICAgICAgICAgIGltZzogZS5jb3Zlci5ub3JtYWwudXJsICsgXFxcIkBSZWZlcmVyPVxcXCIgKyBlLmNvdmVyLm5vcm1hbC51cmwsXFxyXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiByYXRpbmcgKyAnXFxcXG4nICsgZS5leHRyYS5zaG9ydF9pbmZvLFxcclxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmxQYXJhbXMudXJsLFxcclxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHVybFBhcmFtcy5leHRyYVxcclxcbiAgICAgICAgICAgICAgICB9KVxcclxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgIGwucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZS5jZXJlbW9ueS50aXRsZS5ib2xkKCkgKyAnPHNtYWxsPig8YSBocmVmPVxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNAcnVsZT1qczpldmFsKEpTT04ucGFyc2UoZmV0Y2goYGhpa2VyOi8vcGFnZS9tYWluYCkpLnJ1bGUpO2F3YXJkVmlldyhgJyArIGUuY2VyZW1vbnkuaWQgKyAnYCxgJyArIGUuY2VyZW1vbnkudGl0bGUgKyAnYCk7XFxcIj7mn6XnnIvor6bmg4U8L2E+KTwvc21hbGw+JyArICc8YnIvPicgKyAoZS5jYXRlZ29yeS50aXRsZSArIChlLmlzX3dvbiA/ICcnIDogJyjmj5DlkI0pJykpLnNtYWxsKCksXFxyXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXHJcXG4gICAgICAgICAgICAgICAgfSlcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICB9XFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIGlmIChNWV9QQUdFID09IDEpIHtcXHJcXG4gICAgICAgIGwudW5zaGlmdCh7XFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgICAgICBsLnVuc2hpZnQoe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwiPGJpZz7lhbE8c3Ryb25nPiBcXFwiICsgY291bnQgKyBcXFwiIDwvc3Ryb25nPumhueiOt+WlluiusOW9lTwvYmlnPlxcXCIsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuICAgIHNldFJlc3VsdChsKTtcXHJcXG59XFxyXFxuXFxyXFxuLy/mvJTogYzkurrlkZjkvZzlk4HpobXpnaJcXHJcXG5mdW5jdGlvbiBlbGVzc2FyV29ya3MoaWQsIHR5cGUpIHtcXHJcXG4gICAgbGV0IGkgPSBnZXREb3ViYW5SZXMoXFxcImh0dHBzOi8vZnJvZG8uZG91YmFuLmNvbS9hcGkvdjIvZWxlc3Nhci93b3JrX2NvbGxlY3Rpb25zL1xcXCIgKyBpZCArIFxcXCIvd29ya3M/c3RhcnQ9XFxcIiArIDMwICogKE1ZX1BBR0UgLSAxKSArIFxcXCImY291bnQ9MzAmY29sbGVjdGlvbl90aXRsZT1cXFwiICsgdHlwZSk7XFxyXFxuXFxyXFxuICAgIGxldCBsID0gW107XFxyXFxuICAgIGxldCBkZXRhaWxzVmlld0NvbmZpZ3MgPSBnZXRDb25maWcoJ2RldGFpbHNWaWV3Q29uZmlncycpO1xcclxcbiAgICBpLndvcmtzLmZvckVhY2goKGUgPT4ge1xcclxcbiAgICAgICAgbGV0IHJhdGluZyA9IFxcXCJcXFwiO1xcclxcbiAgICAgICAgaWYgKGUuc3ViamVjdC5leHRyYS5yYXRpbmdfZ3JvdXAucmF0aW5nKSB7XFxyXFxuICAgICAgICAgICAgcmF0aW5nID0gY29tcHV0ZVJhdGluZyhlLnN1YmplY3QuZXh0cmEucmF0aW5nX2dyb3VwLnJhdGluZy5tYXgsIGUuc3ViamVjdC5leHRyYS5yYXRpbmdfZ3JvdXAucmF0aW5nLnZhbHVlKSArIFxcXCIgXFxcIiArIGUuc3ViamVjdC5leHRyYS5yYXRpbmdfZ3JvdXAucmF0aW5nLnZhbHVlICsgXFxcIuWIhlxcXCI7XFxyXFxuICAgICAgICB9XFxyXFxuXFxyXFxuICAgICAgICBsZXQgdHlwZSA9IGUuc3ViamVjdC5zdWJ0eXBlLFxcclxcbiAgICAgICAgICAgIGlkID0gZS5zdWJqZWN0LmlkLFxcclxcbiAgICAgICAgICAgIHRpdGxlID0gZS5zdWJqZWN0LnRpdGxlO1xcclxcbiAgICAgICAgbGV0IHVzZUNvbmZpZyA9IGRldGFpbHNWaWV3Q29uZmlnc1tkZXRhaWxzVmlld0NvbmZpZ3MudXNlXS5jb25maWc7XFxyXFxuICAgICAgICBsZXQgdXJsUGFyYW1zID0ge307XFxyXFxuICAgICAgICBpZiAodXNlQ29uZmlnLnN0YXJ0c1dpdGgoJ3snKSkge1xcclxcbiAgICAgICAgICAgIGV2YWwoJ3VybFBhcmFtcyA9ICcgKyB1c2VDb25maWcpO1xcclxcbiAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICB1cmxQYXJhbXMudXJsID0gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI2ltbWVyc2l2ZVRoZW1lI1xcXCIgKyAnP3R5cGU9JyArIHR5cGUgKyAnJmlkPScgKyBpZCkucnVsZSgodHlwZSwgaWQsIHRpdGxlLCB1c2VDb25maWcpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9tYWluJykpLnJ1bGUpO1xcclxcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gXFxcInBsYXlsaXN0XFxcIikge1xcclxcbiAgICAgICAgICAgICAgICAgICAgZG91TGlzdChpZCwgTVlfUEFHRSwgNTApO1xcclxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgICAgICAgICAgZXZhbCh1c2VDb25maWcpO1xcclxcbiAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgfSwgdHlwZSwgaWQsIHRpdGxlLCB1c2VDb25maWcpO1xcclxcbiAgICAgICAgfVxcclxcbiAgICAgICAgbC5wdXNoKHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxyXFxuICAgICAgICAgICAgaW1nOiBlLnN1YmplY3QuY292ZXIubm9ybWFsLnVybCArIFxcXCJAUmVmZXJlcj1cXFwiICsgZS5zdWJqZWN0LmNvdmVyLm5vcm1hbC51cmwsXFxyXFxuICAgICAgICAgICAgZGVzYzogZS5yb2xlcy5qb2luKFxcXCLigKJcXFwiKSArIFxcXCJcXFxcblxcXCIgKyByYXRpbmcsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxyXFxuICAgICAgICAgICAgdXJsOiB1cmxQYXJhbXMudXJsLFxcclxcbiAgICAgICAgICAgIGV4dHJhOiB1cmxQYXJhbXMuZXh0cmFcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIH0pKVxcclxcblxcclxcbiAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxyXFxuICAgICAgICBsLnVuc2hpZnQoe1xcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICAgICAgbC51bnNoaWZ0KHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogXFxcIjxiaWc+5YWxPHN0cm9uZz4gXFxcIiArIGkudG90YWwgKyBcXFwiIDwvc3Ryb25nPumDqOS9nOWTgTwvYmlnPlxcXCIsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuICAgIHNldEhvbWVSZXN1bHQoe1xcclxcbiAgICAgICAgZGF0YTogbFxcclxcbiAgICB9KVxcclxcbn1cXHJcXG5cXHJcXG4vL+a8lOiBjOS6uuWRmOeFp+eJh+mhtemdolxcclxcbmZ1bmN0aW9uIGVsZXNzYXJQaG90b3MocGlkKSB7XFxyXFxuICAgIGxldCBpID0gZ2V0RG91YmFuUmVzKFxcXCJodHRwczovL2Zyb2RvLmRvdWJhbi5jb20vYXBpL3YyL2NlbGVicml0eS9cXFwiICsgcGlkICsgXFxcIi9waG90b3M/c3RhcnQ9XFxcIiArIDMwICogKE1ZX1BBR0UgLSAxKSArIFxcXCImY291bnQ9MzBcXFwiKTtcXHJcXG4gICAgbGV0IGwgPSBbXTtcXHJcXG4gICAgaS5waG90b3MuZm9yRWFjaChlID0+IHtcXHJcXG4gICAgICAgIGwucHVzaCh7XFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18yJyxcXHJcXG4gICAgICAgICAgICBkZXNjOiAnMCcsXFxyXFxuICAgICAgICAgICAgaW1nOiBlLmltYWdlLm5vcm1hbC51cmwgKyAnQFJlZmVyZXI9JyArIGUuaW1hZ2Uubm9ybWFsLnVybCxcXHJcXG4gICAgICAgICAgICB1cmw6IGUuaW1hZ2Uubm9ybWFsLnVybCArICdAUmVmZXJlcj0nICsgZS5pbWFnZS5ub3JtYWwudXJsXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9KVxcclxcbiAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxyXFxuICAgICAgICBsLnVuc2hpZnQoe1xcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICAgICAgbC51bnNoaWZ0KHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogXFxcIjxiaWc+5YWxPHN0cm9uZz4gXFxcIiArIGkudG90YWwgKyBcXFwiIDwvc3Ryb25nPuW8oOeFp+eJhzwvYmlnPlxcXCIsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuICAgIHNldFJlc3VsdChsKTtcXHJcXG59XFxyXFxuXFxyXFxuLy/liafor4Tor6bmg4XpobXpnaJcXHJcXG5mdW5jdGlvbiBkcmFtYVJldmlld1ZpZXcoaWQpIHtcXHJcXG4gICAgc2V0UGFnZVRpdGxlKCfliafor4Tor6bmg4UnKTtcXHJcXG4gICAgbGV0IGkgPSBnZXREb3ViYW5SZXMoXFxcImh0dHBzOi8vZnJvZG8uZG91YmFuLmNvbS9hcGkvdjIvcmV2aWV3L1xcXCIgKyBpZCk7XFxyXFxuXFxyXFxuICAgIGkucGhvdG9zLmZvckVhY2goKGUgPT4ge1xcclxcbiAgICAgICAgaS5jb250ZW50ID0gaS5jb250ZW50LnJlcGxhY2UoJ2lkPVxcXCInICsgZS50YWdfbmFtZSArICdcXFwiJywgJ3NyYz1cXFwiJyArIGUuaW1hZ2UubGFyZ2UudXJsICsgXFxcIkBSZWZlcmVyPVxcXCIgKyBlLmltYWdlLmxhcmdlLnVybCArICdcXFwiJylcXHJcXG4gICAgfSkpO1xcclxcblxcclxcbiAgICBsZXQgbCA9IGdldERvdWJhblJlcyhcXFwiaHR0cHM6Ly9mcm9kby5kb3ViYW4uY29tL2FwaS92Mi9yZXZpZXcvXFxcIiArIGlkICsgXFxcIi9jb21tZW50c1xcXCIpO1xcclxcbiAgICBsZXQgbyA9IFt7XFxyXFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcclxcbiAgICB9LCB7XFxyXFxuICAgICAgICB0aXRsZTogXFxcIjxiaWc+PHN0cm9uZz7or4TorrrvvJo8L3N0cm9uZz48L2JpZz5cXFwiLFxcclxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxyXFxuICAgIH1dO1xcclxcblxcclxcbiAgICBsLmNvbW1lbnRzLmxlbmd0aCA+IDAgPyBsLmNvbW1lbnRzLmZvckVhY2goKGUgPT4ge1xcclxcbiAgICAgICAgby5wdXNoKHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogZS5hdXRob3IubmFtZSxcXHJcXG4gICAgICAgICAgICBpbWc6IGUuYXV0aG9yLmF2YXRhcixcXHJcXG4gICAgICAgICAgICB1cmw6IGUuYXV0aG9yLnVybCxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgICAgICBvLnB1c2goe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiBlLnRleHQgKyAoZS5yZXBsaWVzLmxlbmd0aCA+IDAgPyAnIDxzbWFsbD48YSBocmVmPVxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNAcnVsZT1qczpldmFsKEpTT04ucGFyc2UoZmV0Y2goYGhpa2VyOi8vcGFnZS9tYWluYCkpLnJ1bGUpO2RyYW1hUmV2aWV3UmVwbHlWaWV3KCcgKyBlLmlkICsgJyk7XFxcIj5b5p+l55yL5Zue5aSNXTwvYT48L3NtYWxsPicgOiBcXFwiXFxcIiksXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICAgICAgby5wdXNoKHtcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9KSkgOiBvLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+KCDigKLMpcyBIMuNIOKAosyA4KWCICnov5jmsqHmnInkurror4TorrouLi48L2ZvbnQ+JyxcXHJcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcclxcbiAgICB9KTtcXHJcXG5cXHJcXG4gICAgbGV0IGEgPSBcXFwiXFxcIjtcXHJcXG4gICAgaWYgKGkucmF0aW5nKSB7XFxyXFxuICAgICAgICBhID0gY29tcHV0ZVJhdGluZyhpLnJhdGluZy5tYXgsIGkucmF0aW5nLnZhbHVlKTtcXHJcXG4gICAgfVxcclxcbiAgICBsZXQgY29sb3IgPSBKU09OLnBhcnNlKGZldGNoKGdldE15VmFyKCdxZGJfY29uZmlnJykpKVxcclxcbiAgICAgICAgLnN0YXJDb2xvciB8fCBcXFwiI2ZmYWMyZFxcXCI7XFxyXFxuICAgIGxldCBzID0gW3tcXHJcXG4gICAgICAgIHRpdGxlOiBcXFwiPGJpZz48c3Ryb25nPlxcXCIgKyBpLnRpdGxlICsgXFxcIjwvc3Ryb25nPjwvYmlnPlxcXCIsXFxyXFxuICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXHJcXG4gICAgfSwge1xcclxcbiAgICAgICAgdGl0bGU6IGkudXNlci5uYW1lICsgXFxcIiDnmoTliafor4RcXFwiLFxcclxcbiAgICAgICAgaW1nOiBpLnVzZXIuYXZhdGFyLFxcclxcbiAgICAgICAgdXJsOiBpLnVzZXIudXJsLFxcclxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxyXFxuICAgIH0sIHtcXHJcXG4gICAgICAgIHRpdGxlOiAoaS5zcG9pbGVyID8gXFxcIjxzbWFsbD48Zm9udCBjb2xvcj0jZjIwYzAwPui/meevh+W9seivhOWPr+iDveacieWJp+mAjzwvZm9udD48L3NtYWxsPjxici8+XFxcIiA6IFxcXCJcXFwiKSArIChhID8gJzxzbWFsbD7nnIvov4cgPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz4nICsgYSArIFxcXCI8L2ZvbnQ+PGJyLz48L3NtYWxsPlxcXCIgOiBcXFwiXFxcIikgKyAnPHNtYWxsPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj4nICsgL1xcXFxkezR9LVxcXFxkezEsMn0tXFxcXGR7MSwyfS9nLmV4ZWMoaS5jcmVhdGVfdGltZSkgKyBcXFwiPC9mb250Pjwvc21hbGw+XFxcIixcXHJcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcclxcbiAgICB9LCB7XFxyXFxuICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxyXFxuICAgIH0sIHtcXHJcXG4gICAgICAgIHRpdGxlOiBpLmNvbnRlbnQucmVwbGFjZSgvPGRpdlxcXFxzKltePl0qPiguKj8pPFxcXFwvZGl2Pi9nLCBcXFwiJDFcXFwiKSArIChpLmlzX29yaWdpbmFsID8gJzxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JmNvcHk75pys5paH54mI5p2D5b2S6K+l5L2c6ICF5omA5pyJ77yM5Lu75L2V5b2i5byP6L2s6L296K+36IGU57O75L2c6ICF44CCPC9mb250Pjwvc21hbGw+JyA6IFxcXCJcXFwiKSxcXHJcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcclxcbiAgICB9XTtcXHJcXG5cXHJcXG4gICAgc2V0SG9tZVJlc3VsdCh7XFxyXFxuICAgICAgICBkYXRhOiBzLmNvbmNhdChvKVxcclxcbiAgICB9KVxcclxcbn1cXHJcXG5cXHJcXG4vL+WJp+ivhOWbnuWkjemhtemdolxcclxcbmZ1bmN0aW9uIGRyYW1hUmV2aWV3UmVwbHlWaWV3KGlkKSB7XFxyXFxuICAgIHNldFBhZ2VUaXRsZSgn5Zue5aSN6K+m5oOFJyk7XFxyXFxuICAgIGxldCB0ID0gZ2V0RG91YmFuUmVzKFxcXCJodHRwczovL2Zyb2RvLmRvdWJhbi5jb20vYXBpL3YyL3Jldmlldy9jb21tZW50L1xcXCIgKyBpZCArIFxcXCIvcmVwbGllc1xcXCIpO1xcclxcbiAgICBsZXQgaSA9IFtdO1xcclxcbiAgICB0LnJlcGxpZXMuZm9yRWFjaCgoZSA9PiB7XFxyXFxuICAgICAgICBpLnB1c2goe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiBlLmF1dGhvci5uYW1lLFxcclxcbiAgICAgICAgICAgIGltZzogZS5hdXRob3IuYXZhdGFyLFxcclxcbiAgICAgICAgICAgIHVybDogZS5hdXRob3IudXJsLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgICAgIGkucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IChlLnJlZl9jb21tZW50Lmhhc19yZWYgPyAn5Zue5aSNQDxmb250IGNvbG9yPVxcXCJibHVlXFxcIj4nICsgZS5yZWZfY29tbWVudC5hdXRob3IubmFtZSArIFxcXCI8L2ZvbnQ+77yaXFxcIiA6IFxcXCJcXFwiKSArIGUudGV4dCxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgICAgICBpLnB1c2goe1xcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCJcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIH0pKVxcclxcblxcclxcbiAgICBzZXRIb21lUmVzdWx0KHtcXHJcXG4gICAgICAgIGRhdGE6IGlcXHJcXG4gICAgfSlcXHJcXG59XFxyXFxuXFxyXFxuLy/nm7jlhbPmjqjojZDpobXpnaJcXHJcXG5mdW5jdGlvbiByZWNvbW1lbmRhdGlvbnModHlwZSwgaWQpe1xcclxcbiAgICBzZXRQYWdlVGl0bGUoJ+ebuOWFs+aOqOiNkCcpO1xcclxcbiAgICBsZXQgcmVzID0gZ2V0RG91YmFuUmVzKFxcXCJodHRwczovL2Zyb2RvLmRvdWJhbi5jb20vYXBpL3YyL1xcXCIrIHR5cGUgKyBcXFwiL1xcXCIgKyBpZCArIFxcXCIvcmVjb21tZW5kYXRpb25zXFxcIik7XFxyXFxuICAgIGxldCBkZXRhaWxzVmlld0NvbmZpZ3MgPSBnZXRDb25maWcoJ2RldGFpbHNWaWV3Q29uZmlncycpO1xcclxcbiAgICBsZXQgaSA9IHJlcy5tYXAoKGUgPT4ge1xcclxcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGUsXFxyXFxuICAgICAgICAgICAgaWQgPSBlLmlkLFxcclxcbiAgICAgICAgICAgIHRpdGxlID0gZS50aXRsZTtcXHJcXG4gICAgICAgIGxldCB1c2VDb25maWcgPSBkZXRhaWxzVmlld0NvbmZpZ3NbZGV0YWlsc1ZpZXdDb25maWdzLnVzZV0uY29uZmlnO1xcclxcbiAgICAgICAgbGV0IHVybFBhcmFtcyA9IHt9O1xcclxcbiAgICAgICAgaWYgKHVzZUNvbmZpZy5zdGFydHNXaXRoKCd7JykpIHtcXHJcXG4gICAgICAgICAgICBldmFsKCd1cmxQYXJhbXMgPSAnICsgdXNlQ29uZmlnKTtcXHJcXG4gICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgdXJsUGFyYW1zLnVybCA9ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5IyNpbW1lcnNpdmVUaGVtZSNcXFwiICsgJz90eXBlPScgKyB0eXBlICsgJyZpZD0nICsgaWQpLnJ1bGUoKHR5cGUsIGlkLCB0aXRsZSwgdXNlQ29uZmlnKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFxcXCJwbGF5bGlzdFxcXCIpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGRvdUxpc3QoaWQsIE1ZX1BBR0UsIDUwKTtcXHJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwodXNlQ29uZmlnKTtcXHJcXG4gICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIH0sIHR5cGUsIGlkLCB0aXRsZSwgdXNlQ29uZmlnKTtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIHJldHVybiB7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcclxcbiAgICAgICAgICAgIHVybDogdXJsUGFyYW1zLnVybCxcXHJcXG4gICAgICAgICAgICBleHRyYTogdXJsUGFyYW1zLmV4dHJhLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMycsXFxyXFxuICAgICAgICAgICAgaW1nOiBlLnBpYyA/IGUucGljLm5vcm1hbCArIFxcXCJAUmVmZXJlcj1cXFwiICsgZS5waWMubm9ybWFsIDogZS5jb3Zlci51cmwgKyAnQFJlZmVyZXI9JyArIGUuY292ZXIudXJsLFxcclxcbiAgICAgICAgICAgIGRlc2M6IGUubnVsbF9yYXRpbmdfcmVhc29uIHx8IGUucmF0aW5nLnZhbHVlXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH0pKTtcXHJcXG5cXHJcXG4gICAgc2V0SG9tZVJlc3VsdCh7XFxyXFxuICAgICAgICBkYXRhOiBpXFxyXFxuICAgIH0pXFxyXFxufVxcclxcblxcclxcbi8v5b2x54mH6K+m5oOF6aG16Z2iXFxyXFxuZnVuY3Rpb24gZGV0YWlsc1ZpZXcodHlwZSwgaWQpIHtcXHJcXG4gICAgbGV0IGkgPSBnZXREb3ViYW5SZXMoXFxcImh0dHBzOi8vZnJvZG8uZG91YmFuLmNvbS9hcGkvdjIvXFxcIiArIHR5cGUgKyBcXFwiL1xcXCIgKyBpZCk7XFxyXFxuICAgIHNldFBhZ2VUaXRsZShpLnRpdGxlKTtcXHJcXG4gICAgbGV0IGluZm8gPSBcXFwiXFxcIjtcXHJcXG4gICAgaWYgKGkuaXNfdHYpIHtcXHJcXG4gICAgICAgIGluZm8gPSBbaS5jb3VudHJpZXMgPyBpLmNvdW50cmllcy5qb2luKFxcXCIgXFxcIikgOiBudWxsLCBpLmdlbnJlcyA/IGkuZ2VucmVzLmpvaW4oXFxcIiBcXFwiKSA6IG51bGwsIGkucHViZGF0ZSA/IGkucHViZGF0ZVswXSArIFxcXCLpppbmkq1cXFwiIDogbnVsbCwgaS5lcGlzb2Rlc19jb3VudCA/IFxcXCLlhbFcXFwiICsgaS5lcGlzb2Rlc19jb3VudCArIFxcXCLpm4ZcXFwiIDogbnVsbCwgaS5kdXJhdGlvbnMgPyBcXFwi5Y2V6ZuG54mH6ZW/XFxcIiArIGkuZHVyYXRpb25zIDogbnVsbF0uZmlsdGVyKChlID0+IG51bGwgIT09IGUpKS5qb2luKFxcXCIgLyBcXFwiKTtcXHJcXG4gICAgfSBlbHNlIHtcXHJcXG4gICAgICAgIGluZm8gPSBbaS5jb3VudHJpZXMgPyBpLmNvdW50cmllcy5qb2luKFxcXCIgXFxcIikgOiBudWxsLCBpLmdlbnJlcyA/IGkuZ2VucmVzLmpvaW4oXFxcIiBcXFwiKSA6IG51bGwsIGkucHViZGF0ZSA/IGkucHViZGF0ZVswXSArIFxcXCLpppbmkq1cXFwiIDogbnVsbCwgaS5kdXJhdGlvbnMgPyBcXFwi54mH6ZW/XFxcIiArIGkuZHVyYXRpb25zIDogbnVsbF0uZmlsdGVyKChlID0+IG51bGwgIT09IGUpKS5qb2luKFxcXCIgLyBcXFwiKTtcXHJcXG4gICAgfVxcclxcbiAgICBsZXQgaW5mb0l0ZW1zID0gW3tcXHJcXG4gICAgICAgIHRpdGxlOiBpLnRpdGxlICsgXFxcIlxcXFxuXFxcIiArIGkub3JpZ2luYWxfdGl0bGUgKyBcXFwiKFxcXCIgKyBpLnllYXIgKyBcXFwiKVxcXCIsXFxyXFxuICAgICAgICBkZXNjOiBpbmZvIHx8IGkuY2FyZF9zdWJ0aXRsZSxcXHJcXG4gICAgICAgIGltZzogaS5waWMubm9ybWFsICsgXFxcIkBSZWZlcmVyPVxcXCIgKyBpLnBpYy5ub3JtYWwsXFxyXFxuICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzFfdmVydGljYWxfcGljX2JsdXJcXFwiLFxcclxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3NldHRpbmdQYWdlP3ZpZXc9YW5hbHlzaXNTZXR0aW5nTW9kdWxlI25vSGlzdG9yeSMnLFxcclxcbiAgICAgICAgZXh0cmE6IHtcXHJcXG4gICAgICAgICAgICBuZXdXaW5kb3c6IHRydWUsXFxyXFxuICAgICAgICAgICAgd2luZG93SWQ6ICfpq5jnuqflip/og70nLFxcclxcbiAgICAgICAgICAgIGdyYWRpZW50OiB0cnVlXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH1dO1xcclxcblxcclxcbiAgICBsZXQgcmF0aW5nID0gXFxcIlxcXCI7XFxyXFxuICAgIGlmIChpLnJhdGluZykge1xcclxcbiAgICAgICAgcmF0aW5nID0gY29tcHV0ZVJhdGluZyhpLnJhdGluZy5tYXgsIGkucmF0aW5nLnZhbHVlKTtcXHJcXG4gICAgfVxcclxcbiAgICBsZXQgcmF0aW5nSXRlbXMgPSBbXTtcXHJcXG4gICAgbGV0IGNvbG9yID0gZ2V0Q29uZmlnKCdzdGFyQ29sb3InKTtcXHJcXG4gICAgbGV0IHJhdGluZ1RpdGxlID0gJydcXHJcXG4gICAgaWYgKHJhdGluZykge1xcclxcbiAgICAgICAgcmF0aW5nVGl0bGUgPSAn6LGG55Oj6K+E5YiG4oSiJy5iaWcoKS5ib2xkKCkgKyAnPGJyPicgKyByYXRpbmcuZm9udGNvbG9yKGNvbG9yKSArICcmbmJzcDsmbmJzcDsnICsgKGkucmF0aW5nLnZhbHVlLnRvRml4ZWQoMSkgKyAn5YiGJykuYmlnKCkuYm9sZCgpO1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgcmF0aW5nVGl0bGUgPSAn5pqC5peg6K+E5YiGJy5iaWcoKS5ib2xkKCkgKyAnPGJyPicgKyAn54K55oiR5p+l55yL5b2x54mH5L+h5oGvJy5mb250Y29sb3IoJ2dyZXknKTtcXHJcXG4gICAgfVxcclxcbiAgICByYXRpbmdJdGVtcyA9IFt7XFxyXFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyByYXRpbmdUaXRsZSxcXHJcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxyXFxuICAgICAgICBleHRyYToge1xcclxcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcclxcbiAgICAgICAgfSxcXHJcXG4gICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eS8jLyRwYWdle2Z5cGFnZX0jbm9IaXN0b3J5IycpLnJ1bGUoKHR5cGUsIGlkLCByYXRpbmdDb3VudCkgPT4ge1xcclxcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICByYXRpbmcodHlwZSwgaWQsIHJhdGluZ0NvdW50KTtcXHJcXG4gICAgICAgIH0sIGkuc3VidHlwZSwgaS5pZCwgaS5yYXRpbmcgPyBpLnJhdGluZy5jb3VudCA6IDApXFxyXFxuICAgIH1dO1xcclxcblxcclxcbiAgICBsZXQgcmVsYXRlZEl0ZW1zID0gW3tcXHJcXG4gICAgICAgIHRpdGxlOiBcXFwi5Ymn54WnXFxcIixcXHJcXG4gICAgICAgIGltZzogXFxcImh0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfNDE4NDY3NTYvaGlrZXIvLS9yYXcvbWFzdGVyL2ltZy/liafnhacucG5nXFxcIixcXHJcXG4gICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eS8jLyRwYWdle2Z5cGFnZX0jbm9IaXN0b3J5IycpLnJ1bGUoKHQpID0+IHtcXHJcXG4gICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgc3RpbGxzTGlzdCh0WzBdLCB0WzFdKTtcXHJcXG4gICAgICAgIH0sIFtpLnN1YnR5cGUsIGkuaWRdKSxcXHJcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9yb3VuZF9zbWFsbF80XFxcIlxcclxcbiAgICB9LCB7XFxyXFxuICAgICAgICB0aXRsZTogXFxcIua8lOiBjFxcXCIsXFxyXFxuICAgICAgICBpbWc6IFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzQxODQ2NzU2L2hpa2VyLy0vcmF3L21hc3Rlci9pbWcv5ryU6IGMLnBuZ1xcXCIsXFxyXFxuICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHkvIy8kcGFnZXtmeXBhZ2V9I25vSGlzdG9yeSMnKS5ydWxlKCh0KSA9PiB7XFxyXFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9tYWluJykpLnJ1bGUpO1xcclxcbiAgICAgICAgICAgIGNyZWRpdHModFswXSwgdFsxXSk7XFxyXFxuICAgICAgICB9LCBbaS5zdWJ0eXBlLCBpLmlkXSksXFxyXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fcm91bmRfc21hbGxfNFxcXCJcXHJcXG4gICAgfSwge1xcclxcbiAgICAgICAgdGl0bGU6IFxcXCLnn63or4RcXFwiLFxcclxcbiAgICAgICAgaW1nOiBcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV80MTg0Njc1Ni9oaWtlci8tL3Jhdy9tYXN0ZXIvaW1nL+efreivhC5wbmdcXFwiLFxcclxcbiAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5LyMvJHBhZ2V7ZnlwYWdlfSNub0hpc3RvcnkjJykucnVsZSgodCkgPT4ge1xcclxcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICBzaG9ydENvbW1lbnRMaXN0KHRbMF0sIHRbMV0pO1xcclxcbiAgICAgICAgfSwgW2kuc3VidHlwZSwgaS5pZF0pLFxcclxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3JvdW5kX3NtYWxsXzRcXFwiXFxyXFxuICAgIH0sIHtcXHJcXG4gICAgICAgIHRpdGxlOiBcXFwi5Ymn6K+EXFxcIixcXHJcXG4gICAgICAgIGltZzogXFxcImh0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfNDE4NDY3NTYvaGlrZXIvLS9yYXcvbWFzdGVyL2ltZy/liafor4QucG5nXFxcIixcXHJcXG4gICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eS8jLyRwYWdle2Z5cGFnZX0jbm9IaXN0b3J5IycpLnJ1bGUoKHQpID0+IHtcXHJcXG4gICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgZHJhbWFSZXZpZXdMaXN0KHRbMF0sIHRbMV0pO1xcclxcbiAgICAgICAgfSwgW2kuc3VidHlwZSwgaS5pZF0pLFxcclxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3JvdW5kX3NtYWxsXzRcXFwiXFxyXFxuICAgIH1dO1xcclxcblxcclxcbiAgICBsZXQgaW50cm9JdGVtcyA9IFtdO1xcclxcbiAgICBpZiAoaS5pbnRybykge1xcclxcbiAgICAgICAgaW50cm9JdGVtcyA9IFt7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ08YmlnPjxzdHJvbmc+5Ymn5oOF566A5LuLPC9zdHJvbmc+PC9iaWc+XFxcIixcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcclxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxyXFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcclxcbiAgICAgICAgICAgIH0sXFxyXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgIH0sIHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogXFxcIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xcXCIgKyBpLmludHJvLnJlcGxhY2UoL1xcXFxuL2csIFxcXCI8YnIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xcXCIpLnJlcGxhY2UoL1xcXFxzL2csIFxcXCIgXFxcIikucmVwbGFjZSgvXFxcXHQvZywgXFxcIiBcXFwiKSxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXHJcXG4gICAgICAgIH1dXFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgbGV0IHZpZGVvUmVsYXRlZEl0ZW1zID0gW107XFxyXFxuICAgIGlmIChpLnRyYWlsZXIpIHtcXHJcXG4gICAgICAgIHZpZGVvUmVsYXRlZEl0ZW1zLnB1c2goe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPGJpZz48c3Ryb25nPumihOWRijwvc3Ryb25nPjwvYmlnPlxcXCIsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXHJcXG4gICAgICAgICAgICBleHRyYToge1xcclxcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXHJcXG4gICAgICAgICAgICB9LFxcclxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICB9KTtcXHJcXG4gICAgICAgIHZpZGVvUmVsYXRlZEl0ZW1zLnB1c2goe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiBpLnRyYWlsZXIudGl0bGUsXFxyXFxuICAgICAgICAgICAgaW1nOiBpLnRyYWlsZXIuY292ZXJfdXJsLFxcclxcbiAgICAgICAgICAgIHVybDogaS50cmFpbGVyLnZpZGVvX3VybCxcXHJcXG4gICAgICAgICAgICBkZXNjOiBpLnRyYWlsZXIuc3ViamVjdF90aXRsZSArIFxcXCLigKJcXFwiICsgaS50cmFpbGVyLmNyZWF0ZV90aW1lLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfMlxcXCJcXHJcXG4gICAgICAgIH0pO1xcclxcbiAgICAgICAgdmlkZW9SZWxhdGVkSXRlbXMucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6ICfmn6XnnIvmm7TlpJonLFxcclxcbiAgICAgICAgICAgIGltZzogXFxcImh0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfNDE4NDY3NTYvaGlrZXIvLS9yYXcvbWFzdGVyL2ltZy9tb3JlLnBuZ1xcXCIsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8yXFxcIixcXHJcXG4gICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHkvIy8kcGFnZXtmeXBhZ2V9I25vSGlzdG9yeSMnKS5ydWxlKCh0KSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICAgICAgdHJhaWxlcnModFswXSwgdFsxXSk7XFxyXFxuICAgICAgICAgICAgfSwgW2kuc3VidHlwZSwgaS5pZF0pLFxcclxcbiAgICAgICAgfSk7XFxyXFxuICAgIH1cXHJcXG4gICAgaWYgKGkudmlkZW8pIHtcXHJcXG4gICAgICAgIHZpZGVvUmVsYXRlZEl0ZW1zLnB1c2goe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPGJpZz48c3Ryb25nPuinhumikeivhOiuujwvc3Ryb25nPjwvYmlnPlxcXCIsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXHJcXG4gICAgICAgICAgICBleHRyYToge1xcclxcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXHJcXG4gICAgICAgICAgICB9LFxcclxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICB9KTtcXHJcXG4gICAgICAgIHZpZGVvUmVsYXRlZEl0ZW1zLnB1c2goe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiBpLnZpZGVvLnRpdGxlLFxcclxcbiAgICAgICAgICAgIGltZzogaS52aWRlby5jb3Zlcl91cmwgKyBcXFwiQFJlZmVyZXI9XFxcIiArIGkudmlkZW8uY292ZXJfdXJsLFxcclxcbiAgICAgICAgICAgIHVybDogaS52aWRlby52aWRlb191cmwsXFxyXFxuICAgICAgICAgICAgZGVzYzogaS52aWRlby5hdXRob3IubmFtZSArIFxcXCLigKJcXFwiICsgaS52aWRlby5jcmVhdGVfdGltZSxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzJcXFwiXFxyXFxuICAgICAgICB9KTtcXHJcXG4gICAgICAgIHZpZGVvUmVsYXRlZEl0ZW1zLnB1c2goe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiAn5p+l55yL5pu05aSaJyxcXHJcXG4gICAgICAgICAgICBpbWc6IFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzQxODQ2NzU2L2hpa2VyLy0vcmF3L21hc3Rlci9pbWcvbW9yZS5wbmdcXFwiLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfMlxcXCIsXFxyXFxuICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5LyMvJHBhZ2V7ZnlwYWdlfSNub0hpc3RvcnkjJykucnVsZSgodCkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgICAgIHZpZGVvQ29tbWVudCh0WzBdLCB0WzFdKTtcXHJcXG4gICAgICAgICAgICB9LCBbaS5zdWJ0eXBlLCBpLmlkXSksXFxyXFxuICAgICAgICB9KTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBsZXQgY29uZmlnID0gSlNPTi5wYXJzZShmZXRjaChnZXRNeVZhcigncWRiX2NvbmZpZycpKSk7XFxyXFxuXFxyXFxuICAgIGxldCBhbmFseXNpc0NvbmZpZ3MgPSBnZXRDb25maWcoJ2FuYWx5c2lzQ29uZmlncycsIGNvbmZpZyk7XFxyXFxuICAgIGxldCBleHRyYUNvbmZpZyA9IGFuYWx5c2lzQ29uZmlnc1thbmFseXNpc0NvbmZpZ3MudXNlXS5leHRyYSB8fCAne30nO1xcclxcbiAgICBsZXQgZXh0cmEgPSB7fTtcXHJcXG4gICAgdHJ5IHtcXHJcXG4gICAgICAgIGlmIChleHRyYUNvbmZpZy5zdGFydHNXaXRoKCd7JykpIGV2YWwoJ2V4dHJhPScgKyBleHRyYUNvbmZpZyk7XFxyXFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxyXFxuICAgIGxldCB2aWRlb0l0ZW1zID0gW107XFxyXFxuICAgIHZpZGVvVXJsc01vZHVsZSh2aWRlb0l0ZW1zLCB0eXBlLCBpZCwgWydpY29uXzInLCAnaWNvbl9zbWFsbF80J10sIHBhcnNlVmlkZW9VcmxMYXp5LCBpLCBleHRyYSk7XFxyXFxuICAgIGlmICh2aWRlb0l0ZW1zLmxlbmd0aCA+IDApIHtcXHJcXG4gICAgICAgIHZpZGVvSXRlbXMudW5zaGlmdCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ08YmlnPjxzdHJvbmc+5Zyo57q/6KeC55yLPC9zdHJvbmc+PC9iaWc+XFxcIixcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcclxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxyXFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcclxcbiAgICAgICAgICAgIH0sXFxyXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICB2aWRlb0l0ZW1zLnVuc2hpZnQoe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPGJpZz48c3Ryb25nPuWwmuaXoOeJh+a6kDwvc3Ryb25nPjwvYmlnPlxcXCIsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXHJcXG4gICAgICAgICAgICBleHRyYToge1xcclxcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXHJcXG4gICAgICAgICAgICB9LFxcclxcbiAgICAgICAgICAgIHVybDogJ3RvYXN0Oi8v55yf55qE5rKh54mH5rqQJ1xcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBsZXQgcXVpY2tTZWFyY2hDb25maWdzID0gZ2V0Q29uZmlnKCdxdWlja1NlYXJjaENvbmZpZ3MnLCBjb25maWcpO1xcclxcbiAgICBsZXQgcXVpY2tTZWFyY2hJdGVtcyA9IFtdO1xcclxcbiAgICBxdWlja1NlYXJjaENvbmZpZ3Mub3JkZXIuZm9yRWFjaChxdWlja1NlYXJjaEl0ZW0gPT4ge1xcclxcbiAgICAgICAgaWYgKHF1aWNrU2VhcmNoQ29uZmlnc1txdWlja1NlYXJjaEl0ZW1dKSB7XFxyXFxuICAgICAgICAgICAgcXVpY2tTZWFyY2hJdGVtcy5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHF1aWNrU2VhcmNoSXRlbSxcXHJcXG4gICAgICAgICAgICAgICAgaW1nOiBxdWlja1NlYXJjaENvbmZpZ3NbcXVpY2tTZWFyY2hJdGVtXS5waWMsXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBxdWlja1NlYXJjaENvbmZpZ3MubW9kZSB8fCAnaWNvbl9zbWFsbF80JyxcXHJcXG4gICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9zZWFyY2g/cz0nICsgaS50aXRsZSArICcmcnVsZT0nICsgcXVpY2tTZWFyY2hDb25maWdzW3F1aWNrU2VhcmNoSXRlbV0ubmFtZVxcclxcbiAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH0pXFxyXFxuICAgIGlmIChxdWlja1NlYXJjaEl0ZW1zLmxlbmd0aCA+IDApIHtcXHJcXG4gICAgICAgIHF1aWNrU2VhcmNoSXRlbXMudW5zaGlmdCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHN0cm9uZz48YmlnPuW/q+mAn+aQnOe0ojwvYmlnPjwvc3Ryb25nPicsXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxyXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXHJcXG4gICAgICAgICAgICAgICAgfSxcXHJcXG4gICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICB9KVxcclxcbiAgICAgICAgICAgIC8qcXVpY2tTZWFyY2hJdGVtcy51bnNoaWZ0KHtcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcclxcbiAgICAgICAgICAgIH0pKi9cXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBzZXRIb21lUmVzdWx0KHtcXHJcXG4gICAgICAgIGRhdGE6IGluZm9JdGVtcy5jb25jYXQocmF0aW5nSXRlbXMpXFxyXFxuICAgICAgICAgICAgLmNvbmNhdChyZWxhdGVkSXRlbXMpXFxyXFxuICAgICAgICAgICAgLmNvbmNhdCh7XFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXHJcXG4gICAgICAgICAgICB9KVxcclxcbiAgICAgICAgICAgIC5jb25jYXQocXVpY2tTZWFyY2hJdGVtcylcXHJcXG4gICAgICAgICAgICAuY29uY2F0KHtcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcclxcbiAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICAgICAgLmNvbmNhdCh2aWRlb0l0ZW1zKVxcclxcbiAgICAgICAgICAgIC5jb25jYXQoe1xcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxyXFxuICAgICAgICAgICAgfSlcXHJcXG4gICAgICAgICAgICAuY29uY2F0KHZpZGVvUmVsYXRlZEl0ZW1zKVxcclxcbiAgICAgICAgICAgIC5jb25jYXQoe1xcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxyXFxuICAgICAgICAgICAgfSlcXHJcXG4gICAgICAgICAgICAuY29uY2F0KGludHJvSXRlbXMpXFxyXFxuICAgICAgICAgICAgLmNvbmNhdCh7XFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZScsXFxyXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXHJcXG4gICAgICAgICAgICAgICAgICBpZDogJ3JlY29tbWVuZGF0aW9ucydcXHJcXG4gICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICAgICAgLmNvbmNhdCh7XFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPSM4NzFmNzg+5Lul5LiK5pWw5o2u5p2l5rqQ5LqO6LGG55Oj77yM5aaC5oKo5Zac5qyi77yM6K+35LiL6L295a6Y5pa5YXBwPC9mb250Pjwvc21hbGw+JyxcXHJcXG4gICAgICAgICAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnTxzbWFsbD48Zm9udCBjb2xvcj0jZjIwYzAwPuatpOinhOWImeS7hemZkOWtpuS5oOS6pOa1geS9v+eUqO+8jOivt+S6juWvvOWFpeWQjjI05bCP5pe25YaF5Yig6Zmk77yM5Lu75L2V57uE57uH5oiW5Liq5Lq65LiN5b6X5Lul5Lu75L2V5pa55byP5pa55rOV5Lyg5pKt5q2k6KeE5YiZ55qE5pW05L2T5oiW6YOo5YiG77yBPC9mb250Pjwvc21hbGw+JyxcXHJcXG4gICAgICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9tb3ZpZS5kb3ViYW4uY29tL3N1YmplY3QvJyArIGlkICsgJy8nLFxcclxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcclxcbiAgICAgICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxyXFxuICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICB9KVxcclxcbiAgICB9KVxcclxcbiAgICBiZShbe1xcclxcbiAgICAgICAgZnVuYzogZnVuY3Rpb24ob2JqKXtcXHJcXG4gICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgbGV0IHJlcyA9IGdldERvdWJhblJlcyhvYmoudXJsKTtcXHJcXG4gICAgICAgICAgICBcXHJcXG4gICAgICAgICAgICBsZXQgZGV0YWlsc1ZpZXdDb25maWdzID0gZ2V0Q29uZmlnKCdkZXRhaWxzVmlld0NvbmZpZ3MnKTtcXHJcXG4gICAgICAgICAgICBsZXQgbCA9IFtyZXNbMF0scmVzWzFdLHJlc1syXV07XFxyXFxuICAgICAgICAgICAgbGV0IGkgPSBsLm1hcCgoZSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGxldCB0eXBlID0gZS50eXBlLFxcclxcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBlLmlkLFxcclxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBlLnRpdGxlO1xcclxcbiAgICAgICAgICAgICAgICBsZXQgdXNlQ29uZmlnID0gZGV0YWlsc1ZpZXdDb25maWdzW2RldGFpbHNWaWV3Q29uZmlncy51c2VdLmNvbmZpZztcXHJcXG4gICAgICAgICAgICAgICAgbGV0IHVybFBhcmFtcyA9IHt9O1xcclxcbiAgICAgICAgICAgICAgICBpZiAodXNlQ29uZmlnLnN0YXJ0c1dpdGgoJ3snKSkge1xcclxcbiAgICAgICAgICAgICAgICAgICAgZXZhbCgndXJsUGFyYW1zID0gJyArIHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICB1cmxQYXJhbXMudXJsID0gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI2ltbWVyc2l2ZVRoZW1lI1xcXCIgKyAnP3R5cGU9JyArIHR5cGUgKyAnJmlkPScgKyBpZCkucnVsZSgodHlwZSwgaWQsIHRpdGxlLCB1c2VDb25maWcpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFxcXCJwbGF5bGlzdFxcXCIpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91TGlzdChpZCwgTVlfUEFHRSwgNTApO1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwodXNlQ29uZmlnKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgICAgICAgICB9LCB0eXBlLCBpZCwgdGl0bGUsIHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXHJcXG4gICAgICAgICAgICAgICAgICAgIHVybDogdXJsUGFyYW1zLnVybCxcXHJcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB1cmxQYXJhbXMuZXh0cmEsXFxyXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGUucGljID8gZS5waWMubm9ybWFsICsgXFxcIkBSZWZlcmVyPVxcXCIgKyBlLnBpYy5ub3JtYWwgOiBlLmNvdmVyLnVybCArICdAUmVmZXJlcj0nICsgZS5jb3Zlci51cmwsXFxyXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBlLm51bGxfcmF0aW5nX3JlYXNvbiB8fCBlLnJhdGluZy52YWx1ZVxcclxcbiAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgfSkpO1xcclxcbiAgICAgICAgICAgIGFkZEl0ZW1BZnRlcigncmVjb21tZW5kYXRpb25zJywgaVsyXSk7XFxyXFxuICAgICAgICAgICAgYWRkSXRlbUFmdGVyKCdyZWNvbW1lbmRhdGlvbnMnLCBpWzFdKTtcXHJcXG4gICAgICAgICAgICBhZGRJdGVtQWZ0ZXIoJ3JlY29tbWVuZGF0aW9ucycsIGlbMF0pO1xcclxcbiAgICAgICAgICAgIGFkZEl0ZW1BZnRlcigncmVjb21tZW5kYXRpb25zJywge1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxiaWc+PHN0cm9uZz7nm7jlhbPmjqjojZA8L3N0cm9uZz48L2JpZz5cXFwiLFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcclxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHkvI25vSGlzdG9yeSMnKS5ydWxlKCh0KSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICByZWNvbW1lbmRhdGlvbnModFswXSwgdFsxXSk7XFxyXFxuICAgICAgICAgICAgICAgIH0sIFtvYmoudHlwZSwgb2JqLmlkXSksXFxyXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXHJcXG4gICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICAgICAgdXBkYXRlSXRlbSgncmVjb21tZW5kYXRpb25zJyx7Y29sX3R5cGU6ICdsaW5lJyxleHRyYTp7aWQ6J25vb29wJ319KVxcclxcbiAgICAgICAgfSxcXHJcXG4gICAgICAgIHBhcmFtOiB7XFxyXFxuICAgICAgICAgICAgdXJsOiBcXFwiaHR0cHM6Ly9mcm9kby5kb3ViYW4uY29tL2FwaS92Mi9cXFwiICsgdHlwZSArIFxcXCIvXFxcIiArIGlkICsgXFxcIi9yZWNvbW1lbmRhdGlvbnNcXFwiLFxcclxcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXFxyXFxuICAgICAgICAgICAgaWQ6IGlkXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH1dKVxcclxcbn1cXHJcXG5cXHJcXG4vL+aOqOiNkFxcclxcbmZ1bmN0aW9uIGZpbmRMaXN0KHBhZ2UsIGNvdW50KSB7XFxyXFxuICAgIGlmICghZ2V0TXlWYXIoJ2ZpbmRMaXN0JykpIHB1dE15VmFyKCdmaW5kTGlzdCcsICd7XFxcIml0ZW1cXFwiOlxcXCJtb3ZpZVxcXCIsXFxcInBsYXlhYmxlXFxcIjpcXFwiMFxcXCIsXFxcInNjb3JlXFxcIjpcXFwiMCwxMFxcXCJ9Jyk7XFxyXFxuICAgIGxldCBhID0gW107XFxyXFxuICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShnZXRNeVZhcignZmluZExpc3QnKSk7XFxyXFxuICAgIGxldCBjb2xvciA9IGdldENvbmZpZygnY2hvb3NlQ29sb3InKTtcXHJcXG5cXHJcXG4gICAgbGV0IGl0ZW1zID0ge1xcclxcbiAgICAgICAg55S15b2xOiAnbW92aWUnLFxcclxcbiAgICAgICAg55S16KeG5YmnOiAndHYnXFxyXFxuICAgIH1cXHJcXG4gICAgZm9yIChpIGluIGl0ZW1zKSB7XFxyXFxuICAgICAgICBhLnB1c2goe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiB0ZW1wLml0ZW0gPT09IGl0ZW1zW2ldID8gJ+KAnOKAnOKAneKAnTxiPiA8Zm9udCBjb2xvcj0nICsgY29sb3IgKyAnPicgKyBpICsgJyA8L2ZvbnQ+PC9iPicgOiBpLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxyXFxuICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjogLy9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGUpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdmaW5kTGlzdCcpKTtcXHJcXG4gICAgICAgICAgICAgICAgdGVtcC5pdGVtID0gZTtcXHJcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImZpbmRMaXN0XFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICAgICAgfSwgaXRlbXNbaV0pXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGEucHVzaCh7XFxyXFxuICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcclxcbiAgICB9KVxcclxcblxcclxcbiAgICBsZXQgcGxheWFibGUgPSB7XFxyXFxuICAgICAgICDlhajpg6jlvbHniYc6ICcwJyxcXHJcXG4gICAgICAgIOS7heacieeJh+a6kDogJzEnXFxyXFxuICAgIH1cXHJcXG4gICAgZm9yIChsZXQgciBpbiBwbGF5YWJsZSkge1xcclxcbiAgICAgICAgYS5wdXNoKHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogdGVtcC5wbGF5YWJsZSA9PSBwbGF5YWJsZVtyXSA/ICfigJzigJzigJ3igJ08Yj4gPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz4nICsgciArICcgPC9mb250PjwvYj4nIDogcixcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcclxcbiAgICAgICAgICAgIHVybDogJCgnaGlrZXI6IC8vZW1wdHkjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChlKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShnZXRNeVZhcignZmluZExpc3QnKSk7XFxyXFxuICAgICAgICAgICAgICAgIHRlbXAucGxheWFibGUgPSBlO1xcclxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZmluZExpc3RcXFwiLCBKU09OLnN0cmluZ2lmeSh0ZW1wKSk7XFxyXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxyXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICB9LCBwbGF5YWJsZVtyXSlcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgYS5wdXNoKHtcXHJcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGI+IDxmb250IGNvbG9yPScgKyBjb2xvciArICc+6K+E5YiG5Yy66Ze0OicgKyB0ZW1wLnNjb3JlLnJlcGxhY2UoJywnLCAnLScpICsgJyA8L2ZvbnQ+PC9iPicsXFxyXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcclxcbiAgICAgICAgdXJsOiAkKHRlbXAuc2NvcmUucmVwbGFjZSgnLCcsICctJyksICfor4TliIblupTlnKgwLTEw5LmL6Ze0JykuaW5wdXQoKCkgPT4ge1xcclxcbiAgICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShnZXRNeVZhcignZmluZExpc3QnKSk7XFxyXFxuICAgICAgICAgICAgbGV0IGlucHV0cyA9IGlucHV0LnNwbGl0KCctJyk7XFxyXFxuICAgICAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT0gMiAmJiBpbnB1dHMuZXZlcnkoZSA9PiBlID49IDAgJiYgZSA8PSAxMCkgJiYgcGFyc2VGbG9hdChpbnB1dHNbMF0pIDwgaW5wdXRzWzFdKSB7XFxyXFxuICAgICAgICAgICAgICAgIHRlbXAuc2NvcmUgPSBpbnB1dC5yZXBsYWNlKCctJywgJywnKTtcXHJcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImZpbmRMaXN0XFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+ato+ehrui+k+WFpSdcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICBsZXQgcyA9IGdldERvdWJhblJlcyhcXFwiaHR0cHM6Ly9mcm9kby5kb3ViYW4uY29tL2FwaS92Mi9cXFwiICsgdGVtcC5pdGVtICsgXFxcIi9yZWNvbW1lbmRcXFwiICsgJz9wbGF5YWJsZT0nICsgdGVtcC5wbGF5YWJsZSArICcmc2NvcmVfcmFuZ2U9JyArIHRlbXAuc2NvcmUgKyAocGFnZSA/IFxcXCImc3RhcnQ9XFxcIiArIChwYWdlIC0gMSkgKiBjb3VudCArIFxcXCImY291bnQ9XFxcIiArIGNvdW50IDogXFxcIiZzdGFydD0wJmNvdW50PThcXFwiKSk7XFxyXFxuICAgIGxldCBsID0gcy5pdGVtcztcXHJcXG4gICAgbCA9IGwuZmlsdGVyKGUgPT4gZS50eXBlICE9PSBcXFwiYWRcXFwiICYmIGUudHlwZSAhPT0gXFxcInRhZ3NcXFwiKTtcXHJcXG5cXHJcXG4gICAgbGV0IGRldGFpbHNWaWV3Q29uZmlncyA9IGdldENvbmZpZygnZGV0YWlsc1ZpZXdDb25maWdzJyk7XFxyXFxuICAgIGxldCBpID0gbC5tYXAoKGUgPT4ge1xcclxcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGUsXFxyXFxuICAgICAgICAgICAgaWQgPSBlLmlkLFxcclxcbiAgICAgICAgICAgIHRpdGxlID0gZS5zdWJ0aXRsZSB8fCBlLnRpdGxlO1xcclxcbiAgICAgICAgbGV0IGJhc2VVcmwgPSBlLnR5cGUgPT09IFxcXCJwbGF5bGlzdFxcXCIgPyAnaGlrZXI6Ly9lbXB0eS8kcGFnZXtmeXBhZ2V9JyA6ICdoaWtlcjovL2VtcHR5I2ltbWVyc2l2ZVRoZW1lIyc7XFxyXFxuICAgICAgICBsZXQgdXNlQ29uZmlnID0gZGV0YWlsc1ZpZXdDb25maWdzW2RldGFpbHNWaWV3Q29uZmlncy51c2VdLmNvbmZpZztcXHJcXG4gICAgICAgIGxldCB1cmxQYXJhbXMgPSB7fTtcXHJcXG4gICAgICAgIGlmICh1c2VDb25maWcuc3RhcnRzV2l0aCgneycpKSB7XFxyXFxuICAgICAgICAgICAgZXZhbCgndXJsUGFyYW1zID0gJyArIHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgIHVybFBhcmFtcy51cmwgPSAkKGJhc2VVcmwgKyBcXFwiI25vSGlzdG9yeSNcXFwiICsgJz90eXBlPScgKyB0eXBlICsgJyZpZD0nICsgaWQpLnJ1bGUoKHR5cGUsIGlkLCB0aXRsZSwgdXNlQ29uZmlnKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFxcXCJwbGF5bGlzdFxcXCIpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGRvdUxpc3QoaWQsIE1ZX1BBR0UsIDUwKTtcXHJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwodXNlQ29uZmlnKTtcXHJcXG4gICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIH0sIHR5cGUsIGlkLCB0aXRsZSwgdXNlQ29uZmlnKTtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIHJldHVybiB7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlICsgKHR5cGUgPT09IFxcXCJwbGF5bGlzdFxcXCIgPyBcXFwiXFxcIiA6IFxcXCLvvIhcXFwiICsgZS55ZWFyICsgXFxcIu+8iVxcXCIpLFxcclxcbiAgICAgICAgICAgIHVybDogdXJsUGFyYW1zLnVybCxcXHJcXG4gICAgICAgICAgICBleHRyYTogdXJsUGFyYW1zLmV4dHJhLFxcclxcbiAgICAgICAgICAgIGltZzogZS5waWMgPyBlLnBpYy5ub3JtYWwgKyBcXFwiQFJlZmVyZXI9XFxcIiArIGUucGljLm5vcm1hbCA6IGUuY292ZXJfdXJsICsgXFxcIkBSZWZlcmVyPVxcXCIgKyBlLmNvdmVyX3VybCxcXHJcXG4gICAgICAgICAgICBkZXNjOiBlLnR5cGUgIT09IFxcXCJwbGF5bGlzdFxcXCIgPyAoZS50YWdzLm1hcCgoZSA9PiBlLm5hbWUpKS5qb2luKFxcXCIsXFxcIikgKyBcXFwiXFxcXG5cXFwiICsgKGUucmF0aW5nID8gY29tcHV0ZVJhdGluZyhlLnJhdGluZy5tYXgsIGUucmF0aW5nLnZhbHVlKSArIFxcXCIgXFxcIiArIGUucmF0aW5nLnZhbHVlLnRvRml4ZWQoMSkgKyBcXFwi5YiGXFxcIiA6IFxcXCLmmoLml6Dor4TliIZcXFwiKSkgOiAoZS50aXRsZSArIFxcXCJcXFxcblxcXCIgKyBlLnRhZ3Muam9pbihcXFwiLFxcXCIpICsgXFxcIlxcXFxu5YWxXFxcIiArIGUuaXRlbXNfY291bnQgKyBcXFwi6YOoXFxcIilcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgfSkpO1xcclxcblxcclxcbiAgICByZXR1cm4gcGFnZSA+IDEgPyBpIDogYS5jb25jYXQoaSk7XFxyXFxufVxcclxcblxcclxcbi8v54Ot6ZeoXFxyXFxuZnVuY3Rpb24gaG90TGlzdChwYWdlLCBjb3VudCkge1xcclxcbiAgICBpZiAoIWdldE15VmFyKCdob3RMaXN0JykpIHB1dE15VmFyKCdob3RMaXN0JywgJ3tcXFwiaXRlbVxcXCI6XFxcIm1vdmllX3Nob3dpbmc/YXJlYT3lhajpg6hcXFwiLFxcXCJwbGF5YWJsZVxcXCI6XFxcIjBcXFwiLFxcXCJzb3J0XFxcIjpcXFwicmVjb21tZW5kXFxcIixcXFwic2NvcmVcXFwiOlxcXCIwLDEwXFxcIn0nKTtcXHJcXG4gICAgbGV0IGEgPSBbXTtcXHJcXG4gICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdob3RMaXN0JykpO1xcclxcbiAgICBsZXQgY29sb3IgPSBnZXRDb25maWcoJ2Nob29zZUNvbG9yJyk7XFxyXFxuXFxyXFxuICAgIGxldCBpdGVtcyA9IHtcXHJcXG4gICAgICAgIOeUteW9sToge1xcclxcbiAgICAgICAgICAgIOW9semZoueDreaYoOeUteW9sTogJ21vdmllX3Nob3dpbmc/YXJlYT3lhajpg6gnLFxcclxcbiAgICAgICAgICAgIOixhueTo+eDremXqOeUteW9sTogJ2hvdF9nYWlhP2FyZWE95YWo6YOoJyxcXHJcXG4gICAgICAgICAgICDng63pl6jljY7or63nlLXlvbE6ICdob3RfZ2FpYT9hcmVhPeWNjuivrScsXFxyXFxuICAgICAgICAgICAg54Ot6Zeo5qyn576O55S15b2xOiAnaG90X2dhaWE/YXJlYT3mrKfnvo4nLFxcclxcbiAgICAgICAgICAgIOeDremXqOmfqeWbveeUteW9sTogJ2hvdF9nYWlhP2FyZWE96Z+p5Zu9JyxcXHJcXG4gICAgICAgICAgICDng63pl6jml6XmnKznlLXlvbE6ICdob3RfZ2FpYT9hcmVhPeaXpeacrCdcXHJcXG4gICAgICAgIH0sXFxyXFxuICAgICAgICDnlLXop4bliac6IHtcXHJcXG4gICAgICAgICAgICDng63mkq3nlLXop4bliac6ICd0dl9ob3QnLFxcclxcbiAgICAgICAgICAgIOeDreaSreWbveS6p+WJpzogJ3R2X2RvbWVzdGljJyxcXHJcXG4gICAgICAgICAgICDng63mkq3mrKfnvo7liac6ICd0dl9hbWVyaWNhbicsXFxyXFxuICAgICAgICAgICAg54Ot5pKt5pel5YmnOiAndHZfamFwYW5lc2UnLFxcclxcbiAgICAgICAgICAgIOeDreaSremfqeWJpzogJ3R2X2tvcmVhbicsXFxyXFxuICAgICAgICAgICAg54Ot5pKt5Yqo55S7OiAndHZfYW5pbWF0aW9uJ1xcclxcbiAgICAgICAgfSxcXHJcXG4gICAgICAgIOe7vOiJujoge1xcclxcbiAgICAgICAgICAgIOeDreaSree7vOiJujogJ3Nob3dfaG90JyxcXHJcXG4gICAgICAgICAgICDlm73lhoXnu7zoibo6ICdzaG93X2RvbWVzdGljJyxcXHJcXG4gICAgICAgICAgICDlm73lpJbnu7zoibo6ICdzaG93X2ZvcmVpZ24nXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH1cXHJcXG4gICAgZm9yIChsZXQgaSBpbiBpdGVtcykge1xcclxcbiAgICAgICAgZm9yIChsZXQgaiBpbiBpdGVtc1tpXSkge1xcclxcbiAgICAgICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0ZW1wLml0ZW0gPT0gaXRlbXNbaV1bal0gPyAn4oCc4oCc4oCd4oCdPGI+IDxmb250IGNvbG9yPScgKyBjb2xvciArICc+JyArIGogKyAnIDwvZm9udD48L2I+JyA6IGosXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxyXFxuICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGUpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShnZXRNeVZhcignaG90TGlzdCcpKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHRlbXAuaXRlbSA9IGU7XFxyXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignaG90TGlzdCcsIEpTT04uc3RyaW5naWZ5KHRlbXApKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxyXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICAgICAgICAgIH0sIGl0ZW1zW2ldW2pdKVxcclxcbiAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICBhLnB1c2goe1xcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGxldCBzb3J0ID0ge1xcclxcbiAgICAgICAg54Ot5bqm5o6S5bqPOiAncmVjb21tZW5kJyxcXHJcXG4gICAgICAgIOaXtumXtOaOkuW6jzogJ3RpbWUnLFxcclxcbiAgICAgICAg6K+E5YiG5o6S5bqPOiAncmFuaydcXHJcXG4gICAgfVxcclxcbiAgICBmb3IgKGxldCByIGluIHNvcnQpIHtcXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IHRlbXAuc29ydCA9PSBzb3J0W3JdID8gJ+KAnOKAnOKAneKAnTxiPiA8Zm9udCBjb2xvcj0nICsgY29sb3IgKyAnPicgKyByICsgJyA8L2ZvbnQ+PC9iPicgOiByLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxyXFxuICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjogLy9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGUpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdob3RMaXN0JykpO1xcclxcbiAgICAgICAgICAgICAgICB0ZW1wLnNvcnQgPSBlO1xcclxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaG90TGlzdFxcXCIsIEpTT04uc3RyaW5naWZ5KHRlbXApKTtcXHJcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXHJcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcclxcbiAgICAgICAgICAgIH0sIHNvcnRbcl0pXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGEucHVzaCh7XFxyXFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICBsZXQgcGxheWFibGUgPSB7XFxyXFxuICAgICAgICDlhajpg6jlvbHniYc6ICcwJyxcXHJcXG4gICAgICAgIOS7heacieeJh+a6kDogJzEnXFxyXFxuICAgIH1cXHJcXG4gICAgZm9yIChsZXQgciBpbiBwbGF5YWJsZSkge1xcclxcbiAgICAgICAgYS5wdXNoKHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogdGVtcC5wbGF5YWJsZSA9PSBwbGF5YWJsZVtyXSA/ICfigJzigJzigJ3igJ08Yj4gPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz4nICsgciArICcgPC9mb250PjwvYj4nIDogcixcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcclxcbiAgICAgICAgICAgIHVybDogJCgnaGlrZXI6IC8vZW1wdHkjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChlKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShnZXRNeVZhcignaG90TGlzdCcpKTtcXHJcXG4gICAgICAgICAgICAgICAgdGVtcC5wbGF5YWJsZSA9IGU7XFxyXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJob3RMaXN0XFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICAgICAgfSwgcGxheWFibGVbcl0pXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGEucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxiPiA8Zm9udCBjb2xvcj0nICsgY29sb3IgKyAnPuivhOWIhuWMuumXtDonICsgdGVtcC5zY29yZS5yZXBsYWNlKCcsJywgJy0nKSArICcgPC9mb250PjwvYj4nLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXHJcXG4gICAgICAgIHVybDogJCh0ZW1wLnNjb3JlLnJlcGxhY2UoJywnLCAnLScpLCAn6K+E5YiG5bqU5ZyoMC0xMOS5i+mXtCcpLmlucHV0KCgpID0+IHtcXHJcXG4gICAgICAgICAgICBsZXQgdGVtcCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ2hvdExpc3QnKSk7XFxyXFxuICAgICAgICAgICAgbGV0IGlucHV0cyA9IGlucHV0LnNwbGl0KCctJyk7XFxyXFxuICAgICAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT0gMiAmJiBpbnB1dHMuZXZlcnkoZSA9PiBlID49IDAgJiYgZSA8PSAxMCkgJiYgcGFyc2VGbG9hdChpbnB1dHNbMF0pIDwgaW5wdXRzWzFdKSB7XFxyXFxuICAgICAgICAgICAgICAgIHRlbXAuc2NvcmUgPSBpbnB1dC5yZXBsYWNlKCctJywgJywnKTtcXHJcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImhvdExpc3RcXFwiLCBKU09OLnN0cmluZ2lmeSh0ZW1wKSk7XFxyXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxyXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6K+35q2j56Gu6L6T5YWlJ1xcclxcbiAgICAgICAgICAgIH1cXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIGxldCBsID0gW107XFxyXFxuICAgIGlmICh0ZW1wLml0ZW0uaW5kZXhPZignPycpICE9IC0xKSB7XFxyXFxuICAgICAgICBsZXQgcyA9IGdldERvdWJhblJlcyhcXFwiaHR0cHM6Ly9mcm9kby5kb3ViYW4uY29tL2FwaS92Mi9tb3ZpZS9cXFwiICsgdGVtcC5pdGVtICsgJyZwbGF5YWJsZT0nICsgdGVtcC5wbGF5YWJsZSArICcmc29ydD0nICsgdGVtcC5zb3J0ICsgJyZzY29yZV9yYW5nZT0nICsgdGVtcC5zY29yZSArIChwYWdlID8gXFxcIiZzdGFydD1cXFwiICsgKHBhZ2UgLSAxKSAqIGNvdW50ICsgXFxcIiZjb3VudD1cXFwiICsgY291bnQgOiBcXFwiJnN0YXJ0PTAmY291bnQ9MzBcXFwiKSArICcmbG9jX2lkPTEwODI4OCcpO1xcclxcbiAgICAgICAgbCA9IHMuaXRlbXM7XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICBsZXQgcyA9IGdldERvdWJhblJlcyhcXFwiaHR0cHM6Ly9mcm9kby5kb3ViYW4uY29tL2FwaS92Mi9zdWJqZWN0X2NvbGxlY3Rpb24vXFxcIiArIHRlbXAuaXRlbSArICcvaXRlbXMnICsgJz9wbGF5YWJsZT0nICsgdGVtcC5wbGF5YWJsZSArICcmc29ydD0nICsgdGVtcC5zb3J0ICsgJyZzY29yZV9yYW5nZT0nICsgdGVtcC5zY29yZSArIChwYWdlID8gXFxcIiZzdGFydD1cXFwiICsgKHBhZ2UgLSAxKSAqIGNvdW50ICsgXFxcIiZjb3VudD1cXFwiICsgY291bnQgOiBcXFwiJnN0YXJ0PTAmY291bnQ9MzBcXFwiKSk7XFxyXFxuICAgICAgICBsID0gcy5zdWJqZWN0X2NvbGxlY3Rpb25faXRlbXM7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgbGV0IGRldGFpbHNWaWV3Q29uZmlncyA9IGdldENvbmZpZygnZGV0YWlsc1ZpZXdDb25maWdzJyk7XFxyXFxuICAgIGxldCBpID0gbC5tYXAoKGUgPT4ge1xcclxcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGUsXFxyXFxuICAgICAgICAgICAgaWQgPSBlLmlkLFxcclxcbiAgICAgICAgICAgIHRpdGxlID0gZS50aXRsZTtcXHJcXG4gICAgICAgIGxldCB1c2VDb25maWcgPSBkZXRhaWxzVmlld0NvbmZpZ3NbZGV0YWlsc1ZpZXdDb25maWdzLnVzZV0uY29uZmlnO1xcclxcbiAgICAgICAgbGV0IHVybFBhcmFtcyA9IHt9O1xcclxcbiAgICAgICAgaWYgKHVzZUNvbmZpZy5zdGFydHNXaXRoKCd7JykpIHtcXHJcXG4gICAgICAgICAgICBldmFsKCd1cmxQYXJhbXMgPSAnICsgdXNlQ29uZmlnKTtcXHJcXG4gICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgdXJsUGFyYW1zLnVybCA9ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5IyNpbW1lcnNpdmVUaGVtZSNcXFwiICsgJz90eXBlPScgKyB0eXBlICsgJyZpZD0nICsgaWQpLnJ1bGUoKHR5cGUsIGlkLCB0aXRsZSwgdXNlQ29uZmlnKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFxcXCJwbGF5bGlzdFxcXCIpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGRvdUxpc3QoaWQsIE1ZX1BBR0UsIDUwKTtcXHJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwodXNlQ29uZmlnKTtcXHJcXG4gICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIH0sIHR5cGUsIGlkLCB0aXRsZSwgdXNlQ29uZmlnKTtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIHJldHVybiB7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlICsgXFxcIu+8iFxcXCIgKyBlLnllYXIgKyBcXFwi77yJXFxcIixcXHJcXG4gICAgICAgICAgICB1cmw6IHVybFBhcmFtcy51cmwsXFxyXFxuICAgICAgICAgICAgZXh0cmE6IHVybFBhcmFtcy5leHRyYSxcXHJcXG4gICAgICAgICAgICBpbWc6IGUucGljID8gZS5waWMubm9ybWFsICsgXFxcIkBSZWZlcmVyPVxcXCIgKyBlLnBpYy5ub3JtYWwgOiBlLmNvdmVyLnVybCArICdAUmVmZXJlcj0nICsgZS5jb3Zlci51cmwsXFxyXFxuICAgICAgICAgICAgZGVzYzogKGUudGFncyA/IGUudGFncy5tYXAoKGUgPT4gZS5uYW1lKSkuam9pbihcXFwiLFxcXCIpIDogZS5jYXJkX3N1YnRpdGxlKSArIFxcXCJcXFxcblxcXCIgKyAoZS5yYXRpbmcgPyBjb21wdXRlUmF0aW5nKGUucmF0aW5nLm1heCwgZS5yYXRpbmcudmFsdWUpICsgXFxcIiBcXFwiICsgZS5yYXRpbmcudmFsdWUudG9GaXhlZCgxKSArIFxcXCLliIZcXFwiIDogXFxcIuaaguaXoOivhOWIhlxcXCIpXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH0pKTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIHBhZ2UgPiAxID8gaSA6IGEuY29uY2F0KGkpO1xcclxcbn1cXHJcXG5cXHJcXG4vL+WIhuexu1xcclxcbmZ1bmN0aW9uIGNsYXNzTGlzdChwYWdlLCBjb3VudCkge1xcclxcbiAgICBpZiAoIWdldE15VmFyKCdjbGFzc2xpc3QnKSl7XFxyXFxuICAgICAgICBwdXRNeVZhcignY2xhc3NsaXN0JywgSlNPTi5zdHJpbmdpZnkoe3N1YnR5cGU6XFxcIlxcXCIsbG9jYWw6XFxcIlxcXCIseWVhcjpcXFwiXFxcIixjbGFzczpcXFwiXFxcIixyYW5rOlxcXCJVXFxcIix0eXBlOlxcXCJcXFwiLGZpbHRlcjpcXFwiXFxcIixzY29yZTpcXFwiMCwxMFxcXCJ9KSk7XFxyXFxuICAgIH1cXHJcXG4gICAgbGV0IGEgPSBbXTtcXHJcXG4gICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdjbGFzc2xpc3QnKSk7XFxyXFxuICAgIGxldCBjb2xvciA9IGdldENvbmZpZygnY2hvb3NlQ29sb3InKTtcXHJcXG5cXHJcXG4gICAgbGV0IGl0ZW1zID0ge1xcclxcbiAgICAgICAgc3VidHlwZTogW1xcXCLlhajpg6jlvaLlvI9cXFwiLCBcXFwi55S15b2xXFxcIiwgXFxcIueUteinhuWJp1xcXCIsIFxcXCLnu7zoibpcXFwiLCBcXFwi5Yqo5ryrXFxcIiwgXFxcIue6quW9leeJh1xcXCIsIFxcXCLnn63niYdcXFwiXSxcXHJcXG4gICAgICAgIGxvY2FsOiBbXFxcIuWFqOmDqOWcsOWMulxcXCIsIFxcXCLoh6rlrprkuYnlnLDljLpcXFwiLCBcXFwi5Lit5Zu95aSn6ZmGXFxcIiwgXFxcIue+juWbvVxcXCIsIFxcXCLkuK3lm73pppnmuK9cXFwiLCBcXFwi5Lit5Zu95Y+w5rm+XFxcIiwgXFxcIuaXpeacrFxcXCIsIFxcXCLpn6nlm71cXFwiLCBcXFwi6Iux5Zu9XFxcIiwgXFxcIuazleWbvVxcXCIsIFxcXCLlvrflm71cXFwiLCBcXFwi5oSP5aSn5YipXFxcIiwgXFxcIuilv+ePreeJmVxcXCIsIFxcXCLljbDluqZcXFwiLCBcXFwi5rOw5Zu9XFxcIiwgXFxcIuS/hOe9l+aWr1xcXCIsIFxcXCLkvIrmnJdcXFwiLCBcXFwi5Yqg5ou/5aSnXFxcIiwgXFxcIua+s+Wkp+WIqeS6mlxcXCIsIFxcXCLniLHlsJTlhbBcXFwiLCBcXFwi55Ge5YW4XFxcIiwgXFxcIuW3tOilv1xcXCIsIFxcXCLkuLnpuqZcXFwiXSxcXHJcXG4gICAgICAgIHR5cGU6IFtcXFwi5YWo6YOo57G75Z6LXFxcIiwgXFxcIuiHquWumuS5ieexu+Wei1xcXCIsIFxcXCLliafmg4VcXFwiLCBcXFwi5Zac5YmnXFxcIiwgXFxcIuWKqOS9nFxcXCIsIFxcXCLniLHmg4VcXFwiLCBcXFwi56eR5bm7XFxcIiwgXFxcIuWKqOeUu1xcXCIsIFxcXCLmgqznlpFcXFwiLCBcXFwi5oOK5oKaXFxcIiwgXFxcIuaBkOaAllxcXCIsIFxcXCLniq/nvapcXFwiLCBcXFwi5ZCM5oCnXFxcIiwgXFxcIumfs+S5kFxcXCIsIFxcXCLmrYzoiJ5cXFwiLCBcXFwi5Lyg6K6wXFxcIiwgXFxcIuWOhuWPslxcXCIsIFxcXCLmiJjkuolcXFwiLCBcXFwi6KW/6YOoXFxcIiwgXFxcIuWlh+W5u1xcXCIsIFxcXCLlhpLpmalcXFwiLCBcXFwi54G+6Zq+XFxcIiwgXFxcIuatpuS+oFxcXCIsIFxcXCJcXFxcdTYwYzVcXFxcdTgyNzJcXFwiXSxcXHJcXG4gICAgICAgIHllYXI6IFtcXFwi5YWo6YOo5bm05LujXFxcIiwgXFxcIuiHquWumuS5ieW5tOS7vVxcXCIsIFxcXCIyMDIw5bm05LujXFxcIiwgXFxcIjIwMTDlubTku6NcXFwiLCBcXFwiMjAwMOW5tOS7o1xcXCIsIFxcXCI5MOW5tOS7o1xcXCIsIFxcXCI4MOW5tOS7o1xcXCIsIFxcXCI3MOW5tOS7o1xcXCIsIFxcXCI2MOW5tOS7o1xcXCIsIFxcXCLmm7Tml6lcXFwiXSxcXHJcXG4gICAgICAgIGNsYXNzOiBbXFxcIuWFqOmDqOeJueiJslxcXCIsIFxcXCLoh6rlrprkuYnmoIfnrb5cXFwiLCBcXFwi57uP5YW4XFxcIiwgXFxcIumdkuaYpVxcXCIsIFxcXCLmlofoibpcXFwiLCBcXFwi5pCe56yRXFxcIiwgXFxcIuWKseW/l1xcXCIsIFxcXCLprZTlubtcXFwiLCBcXFwi5oSf5Lq6XFxcIiwgXFxcIuWls+aAp1xcXCIsIFxcXCLpu5HluK5cXFwiLCBcXFwi5rK75oSIXFxcIiwgXFxcIue+jumjn1xcXCIsIFxcXCLlrpfmlZlcXFwiLCBcXFwi5bCP6K+05pS557yWXFxcIiwgXFxcIui2hee6p+iLsembhFxcXCJdXFxyXFxuICAgIH1cXHJcXG4gICAgZm9yIChpdGVtIGluIGl0ZW1zKSB7XFxyXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zW2l0ZW1dLmxlbmd0aDsgaSsrKSB7XFxyXFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gXFxcIlxcXCI7XFxyXFxuICAgICAgICAgICAgaWYodGVtcFtpdGVtXSA9PSBpdGVtc1tpdGVtXVtpXSB8fCAodGVtcFtpdGVtXSA9PSBcXFwiXFxcIiAmJiBpID09IDApKXtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSAn4oCc4oCc4oCd4oCdPGI+IDxmb250IGNvbG9yPScgKyBjb2xvciArICc+JyArIGl0ZW1zW2l0ZW1dW2ldICsgJyA8L2ZvbnQ+PC9iPic7XFxyXFxuICAgICAgICAgICAgfWVsc2V7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlID0gaXRlbXNbaXRlbV1baV07XFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIGxldCB1cmwgPSAkKCdoaWtlcjovL2VtcHR5I25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGV4dCxpdGVtKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdjbGFzc2xpc3QnKSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFtpdGVtXSA9IHRleHQuaW5kZXhPZihcXFwi5YWo6YOoXFxcIikgIT0gLTEgPyBcXFwiXFxcIiA6IHRleHQ7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImNsYXNzbGlzdFxcXCIsIEpTT04uc3RyaW5naWZ5KHRlbXApKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICAgICAgICAgIH0sIGl0ZW1zW2l0ZW1dW2ldLCBpdGVtKTtcXHJcXG4gICAgICAgICAgICBcXHJcXG4gICAgICAgICAgICBpZihpdGVtc1tpdGVtXVtpXSA9PSBcXFwi6Ieq5a6a5LmJ5bm05Lu9XFxcIil7XFxyXFxuICAgICAgICAgICAgICAgIGlmKHRlbXAueWVhciA9PSBcXFwi6Ieq5a6a5LmJ5bm05Lu9XFxcIil7XFxyXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICfigJzigJzigJ3igJ08Yj4gPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz7oh6rlrprkuYnlubTku706JyArIHRlbXAuY3VzdG9tWWVhciArICcgPC9mb250PjwvYj4nO1xcclxcbiAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgICAgIFxcclxcbiAgICAgICAgICAgICAgICB1cmwgPSAkKHRlbXAuY3VzdG9tWWVhciwgJ+ebtOaOpei+k+WFpeivpue7huW5tOS7vSzkvovlpoIyMDAwJykuaW5wdXQoKCkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdjbGFzc2xpc3QnKSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICBpZihpbnB1dC5sZW5ndGggPT0gNCl7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5jdXN0b21ZZWFyID0gaW5wdXQ7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC55ZWFyID0gXFxcIuiHquWumuS5ieW5tOS7vVxcXCI7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImNsYXNzbGlzdFxcXCIsIEpTT04uc3RyaW5naWZ5KHRlbXApKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/or7fmraPnoa7ovpPlhaUnXFxyXFxuICAgICAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgICAgIH0pO1xcclxcbiAgICAgICAgICAgIH1lbHNlIGlmKGl0ZW1zW2l0ZW1dW2ldID09IFxcXCLoh6rlrprkuYnlnLDljLpcXFwiKXtcXHJcXG4gICAgICAgICAgICAgICAgaWYodGVtcC5sb2NhbCA9PSBcXFwi6Ieq5a6a5LmJ5Zyw5Yy6XFxcIil7XFxyXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICfigJzigJzigJ3igJ08Yj4gPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz7oh6rlrprkuYnlnLDljLo6JyArIHRlbXAuY3VzdG9tTG9jYWwgKyAnIDwvZm9udD48L2I+JztcXHJcXG4gICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgICAgICBcXHJcXG4gICAgICAgICAgICAgICAgdXJsID0gJCh0ZW1wLmN1c3RvbUxvY2FsLCAn55u05o6l6L6T5YWl6K+m57uG5Zyw5Yy6LOS+i+WmguS4reWbveWkp+mZhicpLmlucHV0KCgpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShnZXRNeVZhcignY2xhc3NsaXN0JykpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5wdXQubGVuZ3RoID4gMCl7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5jdXN0b21Mb2NhbCA9IGlucHV0O1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAubG9jYWwgPSBcXFwi6Ieq5a6a5LmJ5Zyw5Yy6XFxcIjtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiY2xhc3NsaXN0XFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcclxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+ato+ehrui+k+WFpSdcXHJcXG4gICAgICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICAgICAgfSk7XFxyXFxuICAgICAgICAgICAgfWVsc2UgaWYoaXRlbXNbaXRlbV1baV0gPT0gXFxcIuiHquWumuS5ieexu+Wei1xcXCIpe1xcclxcbiAgICAgICAgICAgICAgICBpZih0ZW1wLnR5cGUgPT0gXFxcIuiHquWumuS5ieexu+Wei1xcXCIpe1xcclxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAn4oCc4oCc4oCd4oCdPGI+IDxmb250IGNvbG9yPScgKyBjb2xvciArICc+6Ieq5a6a5LmJ57G75Z6LOicgKyB0ZW1wLmN1c3RvbVR5cGUgKyAnIDwvZm9udD48L2I+JztcXHJcXG4gICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgICAgICBcXHJcXG4gICAgICAgICAgICAgICAgdXJsID0gJCh0ZW1wLmN1c3RvbVR5cGUsICfnm7TmjqXovpPlhaXor6bnu4bnsbvlnoss5L6L5aaC5Ymn5oOFJykuaW5wdXQoKCkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdjbGFzc2xpc3QnKSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICBpZihpbnB1dC5sZW5ndGggPiAwKXtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLmN1c3RvbVR5cGUgPSBpbnB1dDtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnR5cGUgPSBcXFwi6Ieq5a6a5LmJ57G75Z6LXFxcIjtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiY2xhc3NsaXN0XFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcclxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+ato+ehrui+k+WFpSdcXHJcXG4gICAgICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICAgICAgfSk7XFxyXFxuICAgICAgICAgICAgfWVsc2UgaWYoaXRlbXNbaXRlbV1baV0gPT0gXFxcIuiHquWumuS5ieagh+etvlxcXCIpe1xcclxcbiAgICAgICAgICAgICAgICBpZih0ZW1wLmNsYXNzID09IFxcXCLoh6rlrprkuYnmoIfnrb5cXFwiKXtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlID0gJ+KAnOKAnOKAneKAnTxiPiA8Zm9udCBjb2xvcj0nICsgY29sb3IgKyAnPuiHquWumuS5ieagh+etvjonICsgdGVtcC5jdXN0b21DbGFzcyArICcgPC9mb250PjwvYj4nO1xcclxcbiAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgICAgIFxcclxcbiAgICAgICAgICAgICAgICB1cmwgPSAkKHRlbXAuY3VzdG9tQ2xhc3MsICfnm7TmjqXovpPlhaXor6bnu4bmoIfnrb4s5L6L5aaC57uP5YW4XFxcXG7lj6/lhpnlpJrkuKrmoIfnrb4s5L2/55SoXFxcIuiLseaWh+mAl+WPt1xcXCLliIbpmpQnKS5pbnB1dCgoKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ2NsYXNzbGlzdCcpKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGlmKGlucHV0Lmxlbmd0aCA+IDApe1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAuY3VzdG9tQ2xhc3MgPSBpbnB1dDtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLmNsYXNzID0gXFxcIuiHquWumuS5ieagh+etvlxcXCI7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImNsYXNzbGlzdFxcXCIsIEpTT04uc3RyaW5naWZ5KHRlbXApKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/or7fmraPnoa7ovpPlhaUnXFxyXFxuICAgICAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgICAgIH0pO1xcclxcbiAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICBhLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxyXFxuICAgICAgICAgICAgICAgIHVybDogdXJsXFxyXFxuICAgICAgICAgICAgfSlcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgbGV0IHJhbmsgPSB7XFxyXFxuICAgICAgICDpu5jorqTmjpLluo86IFxcXCJVXFxcIixcXHJcXG4gICAgICAgIOeDreW6pjogXFxcIlRcXFwiLFxcclxcbiAgICAgICAg6K+E5YiGOiBcXFwiU1xcXCIsXFxyXFxuICAgICAgICDml7bpl7Q6IFxcXCJSXFxcIlxcclxcbiAgICB9XFxyXFxuICAgIGZvciAobGV0IHIgaW4gcmFuaykge1xcclxcbiAgICAgICAgYS5wdXNoKHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogdGVtcC5yYW5rID09PSByYW5rW3JdID8gJ+KAnOKAnOKAneKAnTxiPiA8Zm9udCBjb2xvcj0nICsgY29sb3IgKyAnPicgKyByICsgJyA8L2ZvbnQ+PC9iPicgOiByLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxyXFxuICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjogLy9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGUpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdjbGFzc2xpc3QnKSk7XFxyXFxuICAgICAgICAgICAgICAgIHRlbXAucmFuayA9IGU7XFxyXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJjbGFzc2xpc3RcXFwiLCBKU09OLnN0cmluZ2lmeSh0ZW1wKSk7XFxyXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxyXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICB9LCByYW5rW3JdKVxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBhLnB1c2goe1xcclxcbiAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXHJcXG4gICAgfSlcXHJcXG5cXHJcXG4gICAgbGV0IGZpbHRlciA9IHtcXHJcXG4gICAgICAgIOWFqOmDqOW9seeJhzogJycsXFxyXFxuICAgICAgICDku4XmnInniYfmupA6ICdwbGF5YWJsZSdcXHJcXG4gICAgfVxcclxcbiAgICBmb3IgKGxldCByIGluIGZpbHRlcikge1xcclxcbiAgICAgICAgYS5wdXNoKHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogdGVtcC5maWx0ZXIgPT09IGZpbHRlcltyXSA/ICfigJzigJzigJ3igJ08Yj4gPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz4nICsgciArICcgPC9mb250PjwvYj4nIDogcixcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcclxcbiAgICAgICAgICAgIHVybDogJCgnaGlrZXI6IC8vZW1wdHkjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChlKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShnZXRNeVZhcignY2xhc3NsaXN0JykpO1xcclxcbiAgICAgICAgICAgICAgICB0ZW1wLmZpbHRlciA9IGU7XFxyXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJjbGFzc2xpc3RcXFwiLCBKU09OLnN0cmluZ2lmeSh0ZW1wKSk7XFxyXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxyXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICB9LCBmaWx0ZXJbcl0pXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGEucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxiPiA8Zm9udCBjb2xvcj0nICsgY29sb3IgKyAnPuivhOWIhuWMuumXtDonICsgdGVtcC5zY29yZS5yZXBsYWNlKCcsJywgJy0nKSArICcgPC9mb250PjwvYj4nLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXHJcXG4gICAgICAgIHVybDogJCh0ZW1wLnNjb3JlLnJlcGxhY2UoJywnLCAnLScpLCAn6K+E5YiG5bqU5ZyoMC0xMOS5i+mXtCcpLmlucHV0KCgpID0+IHtcXHJcXG4gICAgICAgICAgICBsZXQgdGVtcCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ2NsYXNzbGlzdCcpKTtcXHJcXG4gICAgICAgICAgICBsZXQgaW5wdXRzID0gaW5wdXQuc3BsaXQoJy0nKTtcXHJcXG4gICAgICAgICAgICBpZiAoaW5wdXRzLmxlbmd0aCA9PSAyICYmIGlucHV0cy5ldmVyeShlID0+IGUgPj0gMCAmJiBlIDw9IDEwKSAmJiBwYXJzZUZsb2F0KGlucHV0c1swXSkgPCBpbnB1dHNbMV0pIHtcXHJcXG4gICAgICAgICAgICAgICAgdGVtcC5zY29yZSA9IGlucHV0LnJlcGxhY2UoJy0nLCAnLCcpO1xcclxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiY2xhc3NsaXN0XFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+ato+ehrui+k+WFpSdcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICBsZXQgcyA9IGdldERvdWJhblJlcyhcXFwiaHR0cHM6Ly9mcm9kby5kb3ViYW4uY29tL2FwaS92Mi9tb3ZpZS90YWc/XFxcIlxcclxcbiAgICAgICAgICAgICsgKHBhZ2UgPyBcXFwic3RhcnQ9XFxcIiArIChwYWdlIC0gMSkgKiBjb3VudFxcclxcbiAgICAgICAgICAgICsgXFxcIiZjb3VudD1cXFwiICsgY291bnQgOiBcXFwic3RhcnQ9MCZjb3VudD0zMFxcXCIpXFxyXFxuICAgICAgICAgICAgKyBcXFwiJnE9XFxcIiArIHRlbXAuc3VidHlwZVxcclxcbiAgICAgICAgICAgICsgXFxcIixcXFwiICsgKHRlbXAubG9jYWw9PVxcXCLoh6rlrprkuYnlnLDljLpcXFwiID8gdGVtcC5jdXN0b21Mb2NhbCA6IHRlbXAubG9jYWwpXFxyXFxuICAgICAgICAgICAgKyBcXFwiLFxcXCIgKyAodGVtcC50eXBlPT1cXFwi6Ieq5a6a5LmJ57G75Z6LXFxcIiA/IHRlbXAuY3VzdG9tVHlwZSA6IHRlbXAudHlwZSlcXHJcXG4gICAgICAgICAgICArIFxcXCIsXFxcIiArICh0ZW1wLnllYXI9PVxcXCLoh6rlrprkuYnlubTku71cXFwiID8gdGVtcC5jdXN0b21ZZWFyIDogdGVtcC55ZWFyKVxcclxcbiAgICAgICAgICAgICsgXFxcIixcXFwiICsgKHRlbXAuY2xhc3M9PVxcXCLoh6rlrprkuYnmoIfnrb5cXFwiID8gdGVtcC5jdXN0b21DbGFzcyA6IHRlbXAuY2xhc3MpXFxyXFxuICAgICAgICAgICAgKyBcXFwiJnNvcnQ9XFxcIiArIHRlbXAucmFuayArIFxcXCImc2NvcmVfcmFuZ2U9XFxcIiArIHRlbXAuc2NvcmUgKyAnJmZpbHRlcj0nICsgdGVtcC5maWx0ZXIpO1xcclxcbiAgICBsZXQgbCA9IHMuZGF0YTtcXHJcXG5cXHJcXG4gICAgbGV0IGRldGFpbHNWaWV3Q29uZmlncyA9IGdldENvbmZpZygnZGV0YWlsc1ZpZXdDb25maWdzJyk7XFxyXFxuICAgIGxldCBpID0gbC5tYXAoKGUgPT4ge1xcclxcbiAgICAgICAgbGV0IHR5cGUgPSBlLnR5cGUsXFxyXFxuICAgICAgICAgICAgaWQgPSBlLmlkLFxcclxcbiAgICAgICAgICAgIHRpdGxlID0gZS50aXRsZTtcXHJcXG4gICAgICAgIGxldCB1c2VDb25maWcgPSBkZXRhaWxzVmlld0NvbmZpZ3NbZGV0YWlsc1ZpZXdDb25maWdzLnVzZV0uY29uZmlnO1xcclxcbiAgICAgICAgbGV0IHVybFBhcmFtcyA9IHt9O1xcclxcbiAgICAgICAgaWYgKHVzZUNvbmZpZy5zdGFydHNXaXRoKCd7JykpIHtcXHJcXG4gICAgICAgICAgICBldmFsKCd1cmxQYXJhbXMgPSAnICsgdXNlQ29uZmlnKTtcXHJcXG4gICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgdXJsUGFyYW1zLnVybCA9ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5IyNpbW1lcnNpdmVUaGVtZSNcXFwiICsgJz90eXBlPScgKyB0eXBlICsgJyZpZD0nICsgaWQpLnJ1bGUoKHR5cGUsIGlkLCB0aXRsZSwgdXNlQ29uZmlnKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFxcXCJwbGF5bGlzdFxcXCIpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGRvdUxpc3QoaWQsIE1ZX1BBR0UsIDUwKTtcXHJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwodXNlQ29uZmlnKTtcXHJcXG4gICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIH0sIHR5cGUsIGlkLCB0aXRsZSwgdXNlQ29uZmlnKTtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIHJldHVybiB7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMycsXFxyXFxuICAgICAgICAgICAgdXJsOiB1cmxQYXJhbXMudXJsLFxcclxcbiAgICAgICAgICAgIGV4dHJhOiB1cmxQYXJhbXMuZXh0cmEsXFxyXFxuICAgICAgICAgICAgaW1nOiBlLmNvdmVyX3VybCArIFxcXCJAUmVmZXJlcj1cXFwiICsgZS5jb3Zlcl91cmwsXFxyXFxuICAgICAgICAgICAgZGVzYzogZS5udWxsX3JhdGluZ19yZWFzb24gfHwgZS5yYXRpbmcudmFsdWVcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgfSkpO1xcclxcblxcclxcbiAgICByZXR1cm4gcGFnZSA+IDEgPyBpIDogYS5jb25jYXQoaSk7XFxyXFxufVxcclxcblxcclxcbi8v54mH5Y2VXFxyXFxuZnVuY3Rpb24gcGxheUxpc3QocGFnZSwgY291bnQpIHtcXHJcXG4gICAgaWYgKCFnZXRNeVZhcigncGxheWxpc3QnKSkgcHV0TXlWYXIoJ3BsYXlsaXN0JywgJ3tcXFwic3VidHlwZVxcXCI6XFxcIlxcXCIsXFxcInR5cGVcXFwiOlxcXCJhbGxcXFwifScpO1xcclxcbiAgICBsZXQgYSA9IFtdO1xcclxcbiAgICBsZXQgdGVtcCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ3BsYXlsaXN0JywgJ3tcXFwic3VidHlwZVxcXCI6XFxcIlxcXCIsXFxcInR5cGVcXFwiOlxcXCJhbGxcXFwifScpKTtcXHJcXG4gICAgbGV0IGNvbG9yID0gZ2V0Q29uZmlnKCdjaG9vc2VDb2xvcicpO1xcclxcblxcclxcbiAgICBsZXQgaXRlbXMgPSB7XFxyXFxuICAgICAgICB0eXBlOiB7XFxyXFxuICAgICAgICAgICAg5YWo6YOoOiBcXFwiYWxsXFxcIixcXHJcXG4gICAgICAgICAgICDosYbnk6PniYfljZU6IFxcXCJvZmZpY2lhbFxcXCIsXFxyXFxuICAgICAgICAgICAg57K+6YCJOiBcXFwic2VsZWN0ZWRcXFwiLFxcclxcbiAgICAgICAgICAgIOe7j+WFuDogXFxcImNsYXNzaWNhbFxcXCIsXFxyXFxuICAgICAgICAgICAg6I635aWWOiBcXFwicHJpemVcXFwiLFxcclxcbiAgICAgICAgICAgIOmrmOWIhjogXFxcImhpZ2hfc2NvcmVcXFwiLFxcclxcbiAgICAgICAgICAgIOamnOWNlTogXFxcIm1vdmllX2xpc3RcXFwiLFxcclxcbiAgICAgICAgICAgIOWGt+mXqOS9s+eJhzogXFxcImRhcmtfaG9yc2VcXFwiLFxcclxcbiAgICAgICAgICAgIOS4u+mimDogXFxcInRvcGljXFxcIixcXHJcXG4gICAgICAgICAgICDlr7zmvJQ6IFxcXCJkaXJlY3RvclxcXCIsXFxyXFxuICAgICAgICAgICAg5ryU5ZGYOiBcXFwiYWN0b3JcXFwiLFxcclxcbiAgICAgICAgICAgIOezu+WIlzogXFxcInNlcmllc1xcXCIsXFxyXFxuICAgICAgICAgICAg5Y2O6K+tOiBcXFwiY2hpbmVzZVxcXCIsXFxyXFxuICAgICAgICAgICAg5qyn576OOiBcXFwid2VzdGVyblxcXCIsXFxyXFxuICAgICAgICAgICAg5pel5pysOiBcXFwiamFwYW5lc2VcXFwiLFxcclxcbiAgICAgICAgICAgIOmfqeWbvTogXFxcImtvcmVhXFxcIixcXHJcXG4gICAgICAgICAgICDllpzliac6IFxcXCJjb21lZHlcXFwiLFxcclxcbiAgICAgICAgICAgIOWKqOS9nDogXFxcImFjdGlvblxcXCIsXFxyXFxuICAgICAgICAgICAg54ix5oOFOiBcXFwibG92ZVxcXCIsXFxyXFxuICAgICAgICAgICAg56eR5bm7OiBcXFwic2NpZW5jZV9maWN0aW9uXFxcIixcXHJcXG4gICAgICAgICAgICDliqjnlLs6IFxcXCJjYXJ0b29uXFxcIixcXHJcXG4gICAgICAgICAgICDmgqznlpE6IFxcXCJteXN0ZXJ5XFxcIixcXHJcXG4gICAgICAgICAgICDmg4rmgpo6IFxcXCJwYW5pY1xcXCIsXFxyXFxuICAgICAgICAgICAg5oGQ5oCWOiBcXFwiaG9ycmlibGVcXFwiLFxcclxcbiAgICAgICAgICAgIOeKr+e9qjogXFxcImNyaW1pbmFsXFxcIixcXHJcXG4gICAgICAgICAgICDlkIzmgKc6IFxcXCJsZ2J0XFxcIixcXHJcXG4gICAgICAgICAgICDmiJjkuok6IFxcXCJ3YXJcXFwiLFxcclxcbiAgICAgICAgICAgIOWlh+W5uzogXFxcImZhbnRhc3lcXFwiLFxcclxcbiAgICAgICAgICAgIFxcXCJcXFxcdTYwYzVcXFxcdTgyNzJcXFwiOiBcXFwiZXJvdGljYVxcXCIsXFxyXFxuICAgICAgICAgICAg6Z+z5LmQOiBcXFwibXVzaWNcXFwiLFxcclxcbiAgICAgICAgICAgIOe6quW9leeJhzogXFxcImRvY3VtZW50YXJ5XFxcIixcXHJcXG4gICAgICAgICAgICDmsrvmhIg6IFxcXCJjdXJlXFxcIixcXHJcXG4gICAgICAgICAgICDoibrmnK86IFxcXCJhcnRcXFwiLFxcclxcbiAgICAgICAgICAgIOm7keiJsuW5vem7mDogXFxcImRhcmtfaHVtb3JcXFwiLFxcclxcbiAgICAgICAgICAgIOmdkuaYpTogXFxcInlvdXRoXFxcIixcXHJcXG4gICAgICAgICAgICDlpbPmgKc6IFxcXCJmZW1hbGVcXFwiLFxcclxcbiAgICAgICAgICAgIOecn+WunuS6i+S7tuaUuee8ljogXFxcInJlYWxfZXZlbnRcXFwiLFxcclxcbiAgICAgICAgICAgIOaatOWKmzogXFxcInZpb2xlbmNlXFxcIixcXHJcXG4gICAgICAgICAgICDpu5Hnmb06IFxcXCJibGFja193aGl0ZVxcXCIsXFxyXFxuICAgICAgICAgICAg576O6aOfOiBcXFwiZm9vZFxcXCIsXFxyXFxuICAgICAgICAgICAg5peF6KGMOiBcXFwidHJhdmVsXFxcIixcXHJcXG4gICAgICAgICAgICDlhL/nq6U6IFxcXCJjaGlsZFxcXCIsXFxyXFxuICAgICAgICAgICAg5Lq65oCnOiBcXFwiaHVtYW5pdHlcXFwiLFxcclxcbiAgICAgICAgICAgIOWutuW6rTogXFxcImZhbWlseVxcXCIsXFxyXFxuICAgICAgICAgICAg5paH6Im6OiBcXFwibGl0ZXJhcnlfYXJ0XFxcIixcXHJcXG4gICAgICAgICAgICDlsI/or7TmlLnnvJY6IFxcXCJub3ZlbFxcXCIsXFxyXFxuICAgICAgICAgICAg5oSf5Lq6OiBcXFwibW92aW5nXFxcIixcXHJcXG4gICAgICAgICAgICDlirHlv5c6IFxcXCJpbnNwaXJhdGlvblxcXCJcXHJcXG4gICAgICAgIH0sXFxyXFxuICAgICAgICBzdWJ0eXBlOiB7XFxyXFxuICAgICAgICAgICAg5YWo6YOoOiBcXFwiXFxcIixcXHJcXG4gICAgICAgICAgICDnlLXlvbE6IFxcXCJtb3ZpZVxcXCIsXFxyXFxuICAgICAgICAgICAg55S16KeG5YmnOiBcXFwidHZcXFwiXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH1cXHJcXG4gICAgZm9yIChsZXQgaSBpbiBpdGVtcykge1xcclxcbiAgICAgICAgZm9yIChsZXQgaiBpbiBpdGVtc1tpXSkge1xcclxcbiAgICAgICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0ZW1wW2ldID09PSBpdGVtc1tpXVtqXSA/ICfigJzigJzigJ3igJ08Yj4gPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz4nICsgaiArICcgPC9mb250PjwvYj4nIDogaixcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXHJcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5I25vTG9hZGluZyMnKS5sYXp5UnVsZSgodCkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdwbGF5bGlzdCcsICd7XFxcInN1YnR5cGVcXFwiOlxcXCJcXFwiLFxcXCJ0eXBlXFxcIjpcXFwiYWxsXFxcIn0nKSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICB0ZW1wW3RbMF1dID0gdFsxXTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwbGF5bGlzdFxcXCIsIEpTT04uc3RyaW5naWZ5KHRlbXApKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxyXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICAgICAgICAgIH0sIFtpLCBpdGVtc1tpXVtqXV0pXFxyXFxuICAgICAgICAgICAgfSlcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgbGV0IHMgPSBnZXREb3ViYW5SZXMoXFxcImh0dHBzOi8vZnJvZG8uZG91YmFuLmNvbS9hcGkvdjIvc2t5bmV0L25ld19wbGF5bGlzdHNcXFwiICsgXFxcIj9jYXRlZ29yeT1cXFwiICsgdGVtcC50eXBlICsgXFxcIiZzdWJqZWN0X3R5cGU9XFxcIiArIHRlbXAuc3VidHlwZSArIChwYWdlID8gXFxcIiZzdGFydD1cXFwiICsgKHBhZ2UgLSAxKSAqIGNvdW50ICsgXFxcIiZjb3VudD1cXFwiICsgY291bnQgOiBcXFwiJnN0YXJ0PTAmY291bnQ9MTBcXFwiKSk7XFxyXFxuICAgIGxldCBsID0gcy5kYXRhWzBdLml0ZW1zO1xcclxcblxcclxcbiAgICBsZXQgaSA9IGwubWFwKChlID0+ICh7XFxyXFxuICAgICAgICB0aXRsZTogZS50aXRsZSxcXHJcXG4gICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eS8kcGFnZXtmeXBhZ2V9I25vSGlzdG9yeSMnKS5ydWxlKCh0eXBlLCBpZCkgPT4ge1xcclxcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gXFxcInBsYXlsaXN0XFxcIikge1xcclxcbiAgICAgICAgICAgICAgICBkb3VMaXN0KGlkLCBNWV9QQUdFLCA1MCk7XFxyXFxuICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgc3ViamVjdENvbGxlY3Rpb25MaXN0KE1ZX1BBR0UsIDUwLCBpZCk7XFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgfSwgZS50eXBlLCBlLmlkKSxcXHJcXG4gICAgICAgIGltZzogZS5jb3Zlcl91cmwgKyBcXFwiQFJlZmVyZXI9XFxcIiArIGUuY292ZXJfdXJsLFxcclxcbiAgICAgICAgZGVzYzogXFxcIuWFsVxcXCIgKyBlLml0ZW1zX2NvdW50ICsgXFxcIumDqFxcXCJcXHJcXG4gICAgfSkpKTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIHBhZ2UgPiAxID8gaSA6IGEuY29uY2F0KGkpO1xcclxcbn1cXHJcXG5cXHJcXG4vL+amnOWNlVxcclxcbmZ1bmN0aW9uIHJhbmtMaXN0KHBhZ2UsIGNvdW50KSB7XFxyXFxuICAgIGlmICghZ2V0TXlWYXIoJ3JhbmtMaXN0JykpIHB1dE15VmFyKCdyYW5rTGlzdCcsICd7XFxcInR5cGVcXFwiOlxcXCJtb3ZpZVxcXCIsXFxcImxpc3RcXFwiOlxcXCJyYW5rX2xpc3RcXFwiLFxcXCJ5ZWFyX2xpc3RzXFxcIjpbXSxcXFwiY2F0ZWdvcnlfbGlzdHNcXFwiOltdLFxcXCJ5ZWFyXFxcIjpcXFwiXFxcIixcXFwiY2F0ZWdvcnlcXFwiOlxcXCJcXFwifScpO1xcclxcbiAgICBsZXQgYSA9IFtdO1xcclxcbiAgICBsZXQgdGVtcCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ3JhbmtMaXN0JykpO1xcclxcbiAgICBsZXQgY29sb3IgPSBnZXRDb25maWcoJ2Nob29zZUNvbG9yJyk7XFxyXFxuXFxyXFxuICAgIGxldCBpdGVtcyA9IHtcXHJcXG4gICAgICAgIOeUteW9sTogJ21vdmllJyxcXHJcXG4gICAgICAgIOeUteinhuWJpzogJ3R2J1xcclxcbiAgICB9XFxyXFxuICAgIGZvciAobGV0IGkgaW4gaXRlbXMpIHtcXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IHRlbXAudHlwZSA9PSBpdGVtc1tpXSA/ICfigJzigJzigJ3igJ08Yj4gPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz4nICsgaSArICcgPC9mb250PjwvYj4nIDogaSxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcclxcbiAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGUpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdyYW5rTGlzdCcpKTtcXHJcXG4gICAgICAgICAgICAgICAgdGVtcC50eXBlID0gZTtcXHJcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInJhbmtMaXN0XFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICAgICAgfSwgaXRlbXNbaV0pXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGEucHVzaCh7XFxyXFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICBsZXQgbGlzdCA9IHtcXHJcXG4gICAgICAgIOWPo+eikeamnOWNlTogJ3JhbmtfbGlzdCcsXFxyXFxuICAgICAgICDlubTluqbmppzljZU6ICd5ZWFyX3JhbmtzJyxcXHJcXG4gICAgICAgIOexu+Wei+amnOWNlTogJ2NhdGVnb3J5X3JhbmtzJ1xcclxcbiAgICB9XFxyXFxuICAgIGZvciAobGV0IGkgaW4gbGlzdCkge1xcclxcbiAgICAgICAgYS5wdXNoKHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogdGVtcC5saXN0ID09IGxpc3RbaV0gPyAn4oCc4oCc4oCd4oCdPGI+IDxmb250IGNvbG9yPScgKyBjb2xvciArICc+JyArIGkgKyAnIDwvZm9udD48L2I+JyA6IGksXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXHJcXG4gICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChlKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShnZXRNeVZhcigncmFua0xpc3QnKSk7XFxyXFxuICAgICAgICAgICAgICAgIHRlbXAubGlzdCA9IGU7XFxyXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJyYW5rTGlzdFxcXCIsIEpTT04uc3RyaW5naWZ5KHRlbXApKTtcXHJcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXHJcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcclxcbiAgICAgICAgICAgIH0sIGxpc3RbaV0pXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGlmICh0ZW1wLmxpc3QgPT0gJ3llYXJfcmFua3MnICYmIHRlbXAueWVhcl9saXN0cy5sZW5ndGggPT0gMCkge1xcclxcbiAgICAgICAgbGV0IHQgPSBnZXREb3ViYW5SZXMoXFxcImh0dHBzOi8vZnJvZG8uZG91YmFuLmNvbS9hcGkvdjIvXFxcIiArIHRlbXAudHlwZSArICcvcmFua19saXN0Jyk7XFxyXFxuICAgICAgICB0ZW1wLnllYXJfbGlzdHMgPSB0Lmdyb3Vwc1sxXS50YWJzO1xcclxcbiAgICAgICAgcHV0TXlWYXIoJ3JhbmtMaXN0JywgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICB9IGVsc2UgaWYgKHRlbXAubGlzdCA9PSAnY2F0ZWdvcnlfcmFua3MnICYmIHRlbXAuY2F0ZWdvcnlfbGlzdHMubGVuZ3RoID09IDApIHtcXHJcXG4gICAgICAgIGxldCB0ID0gZ2V0RG91YmFuUmVzKFxcXCJodHRwczovL2Zyb2RvLmRvdWJhbi5jb20vYXBpL3YyL1xcXCIgKyB0ZW1wLnR5cGUgKyAnL3JhbmtfbGlzdCcpO1xcclxcbiAgICAgICAgdGVtcC5jYXRlZ29yeV9saXN0cyA9IHQuZ3JvdXBzWzJdLnRhYnM7XFxyXFxuICAgICAgICBwdXRNeVZhcigncmFua0xpc3QnLCBKU09OLnN0cmluZ2lmeSh0ZW1wKSk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgaWYgKHRlbXAubGlzdCA9PSAneWVhcl9yYW5rcycpIHtcXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgICAgICBpZiAoIXRlbXAueWVhcikgdGVtcC55ZWFyID0gdGVtcC55ZWFyX2xpc3RzWzBdLmtleTtcXHJcXG4gICAgICAgIGZvciAobGV0IHQgb2YgdGVtcC55ZWFyX2xpc3RzKSB7XFxyXFxuICAgICAgICAgICAgYS5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRlbXAueWVhciA9PSB0LmtleSA/ICfigJzigJzigJ3igJ08Yj4gPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz4nICsgdC50aXRsZSArICcgPC9mb250PjwvYj4nIDogdC50aXRsZSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXHJcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5I25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZSkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdyYW5rTGlzdCcpKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHRlbXAueWVhciA9IGU7XFxyXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwicmFua0xpc3RcXFwiLCBKU09OLnN0cmluZ2lmeSh0ZW1wKSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcclxcbiAgICAgICAgICAgICAgICB9LCB0LmtleSlcXHJcXG4gICAgICAgICAgICB9KVxcclxcbiAgICAgICAgfVxcclxcbiAgICB9IGVsc2UgaWYgKHRlbXAubGlzdCA9PSAnY2F0ZWdvcnlfcmFua3MnKSB7XFxyXFxuICAgICAgICBhLnB1c2goe1xcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICAgICAgaWYgKCF0ZW1wLmNhdGVnb3J5KSB0ZW1wLmNhdGVnb3J5ID0gdGVtcC5jYXRlZ29yeV9saXN0c1swXS5rZXk7XFxyXFxuICAgICAgICBmb3IgKGxldCB0IG9mIHRlbXAuY2F0ZWdvcnlfbGlzdHMpIHtcXHJcXG4gICAgICAgICAgICBhLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGVtcC5jYXRlZ29yeSA9PSB0LmtleSA/ICfigJzigJzigJ3igJ08Yj4gPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz4nICsgdC50aXRsZSArICcgPC9mb250PjwvYj4nIDogdC50aXRsZSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXHJcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5I25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZSkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdyYW5rTGlzdCcpKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHRlbXAuY2F0ZWdvcnkgPSBlO1xcclxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInJhbmtMaXN0XFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICAgICAgfSwgdC5rZXkpXFxyXFxuICAgICAgICAgICAgfSlcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBsZXQgbCA9IFtdO1xcclxcbiAgICBpZiAodGVtcC5saXN0ID09ICdyYW5rX2xpc3QnICYmIE1ZX1BBR0UgPT0gMSkge1xcclxcbiAgICAgICAgbGV0IHMgPSBnZXREb3ViYW5SZXMoXFxcImh0dHBzOi8vZnJvZG8uZG91YmFuLmNvbS9hcGkvdjIvXFxcIiArIHRlbXAudHlwZSArICcvJyArIHRlbXAubGlzdCArIChwYWdlID8gXFxcIj9zdGFydD1cXFwiICsgKHBhZ2UgLSAxKSAqIGNvdW50ICsgXFxcIiZjb3VudD1cXFwiICsgY291bnQgOiBcXFwiP3N0YXJ0PTAmY291bnQ9MTBcXFwiKSk7XFxyXFxuICAgICAgICBsID0gcy5ncm91cHNbMF0uc2VsZWN0ZWRfY29sbGVjdGlvbnM7XFxyXFxuICAgIH0gZWxzZSBpZiAodGVtcC5saXN0ID09ICd5ZWFyX3JhbmtzJyAmJiBNWV9QQUdFID09IDEpIHtcXHJcXG4gICAgICAgIGxldCBzID0gZ2V0RG91YmFuUmVzKFxcXCJodHRwczovL2Zyb2RvLmRvdWJhbi5jb20vYXBpL3YyL1xcXCIgKyB0ZW1wLnR5cGUgKyAnLycgKyB0ZW1wLmxpc3QgKyAnP3llYXI9JyArIHRlbXAueWVhciArIChwYWdlID8gXFxcIiZzdGFydD1cXFwiICsgKHBhZ2UgLSAxKSAqIGNvdW50ICsgXFxcIiZjb3VudD1cXFwiICsgY291bnQgOiBcXFwiJnN0YXJ0PTAmY291bnQ9MTBcXFwiKSk7XFxyXFxuICAgICAgICBsID0gcy5ncm91cHNbMF0uc2VsZWN0ZWRfY29sbGVjdGlvbnM7XFxyXFxuICAgIH0gZWxzZSBpZiAodGVtcC5saXN0ID09ICdjYXRlZ29yeV9yYW5rcycpIHtcXHJcXG4gICAgICAgIGxldCBzID0gZ2V0RG91YmFuUmVzKFxcXCJodHRwczovL2Zyb2RvLmRvdWJhbi5jb20vYXBpL3YyL1xcXCIgKyB0ZW1wLnR5cGUgKyAnLycgKyB0ZW1wLmxpc3QgKyAnP2NhdGVnb3J5PScgKyB0ZW1wLmNhdGVnb3J5ICsgKHBhZ2UgPyBcXFwiJnN0YXJ0PVxcXCIgKyAocGFnZSAtIDEpICogY291bnQgKyBcXFwiJmNvdW50PVxcXCIgKyBjb3VudCA6IFxcXCImc3RhcnQ9MCZjb3VudD0xMFxcXCIpKTtcXHJcXG4gICAgICAgIGwgPSBzLnNlbGVjdGVkX2NvbGxlY3Rpb25zO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGxldCBpID0gW107XFxyXFxuICAgIGlmICh0ZW1wLmxpc3QgPT0gJ2NhdGVnb3J5X3JhbmtzJykge1xcclxcbiAgICAgICAgaSA9IGwubWFwKChlID0+ICh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgZS50aXRsZS5ib2xkKCksXFxyXFxuICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5LyRwYWdle2Z5cGFnZX0jbm9IaXN0b3J5IycpLnJ1bGUoKHR5cGUsIGlkKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFxcXCJwbGF5bGlzdFxcXCIpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGRvdUxpc3QoaWQsIE1ZX1BBR0UsIDUwKTtcXHJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3RDb2xsZWN0aW9uTGlzdChNWV9QQUdFLCA1MCwgaWQpO1xcclxcbiAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgfSwgZS50eXBlLCBlLmlkKSxcXHJcXG4gICAgICAgICAgICBpbWc6IGUuY292ZXJfdXJsICsgXFxcIkBSZWZlcmVyPVxcXCIgKyBlLmNvdmVyX3VybCxcXHJcXG4gICAgICAgICAgICBkZXNjOiBcXFwi5YWxXFxcIiArIGUudG90YWwgKyBcXFwi6YOoXFxcIlxcclxcbiAgICAgICAgfSkpKTtcXHJcXG4gICAgfSBlbHNlIHtcXHJcXG4gICAgICAgIGkgPSBsLm1hcCgoZSA9PiAoe1xcclxcbiAgICAgICAgICAgIHRpdGxlOiAnJyAvKifigJzigJzigJ3igJ0nICsgZS5tZWRpdW1fbmFtZSArICdcXFxcbicgKyBnZXRTdHJvbmdUZXh0KGUudGl0bGUpKi8gLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMicsXFxyXFxuICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5LyRwYWdle2Z5cGFnZX0jbm9IaXN0b3J5IycpLnJ1bGUoKHR5cGUsIGlkLCBzdGl0bGUpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKHN0aXRsZSk7XFxyXFxuICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvbWFpbicpKS5ydWxlKTtcXHJcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFxcXCJwbGF5bGlzdFxcXCIpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGRvdUxpc3QoaWQsIE1ZX1BBR0UsIDUwKTtcXHJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3RDb2xsZWN0aW9uTGlzdChNWV9QQUdFLCA1MCwgaWQpO1xcclxcbiAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgfSwgZS50eXBlLCBlLmlkLCBlLnRpdGxlKSxcXHJcXG4gICAgICAgICAgICBpbWc6IGUuY292ZXJfdXJsICsgXFxcIkBSZWZlcmVyPVxcXCIgKyBlLmNvdmVyX3VybCxcXHJcXG4gICAgICAgICAgICBkZXNjOiBcXFwiMFxcXCJcXHJcXG4gICAgICAgIH0pKSk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIHBhZ2UgPiAxID8gaSA6IGEuY29uY2F0KGkpO1xcclxcbn1cXHJcXG5cXHJcXG4vL+WwhuS4iuaYoFxcclxcbmZ1bmN0aW9uIGNvbWluZ0xpc3QocGFnZSwgY291bnQpIHtcXHJcXG4gICAgaWYgKCFnZXRNeVZhcignY29taW5nJykpIHB1dE15VmFyKCdjb21pbmcnLCAne1xcXCJ0eXBlXFxcIjpcXFwibW92aWVcXFwiLFxcXCJyYW5rXFxcIjpcXFwiJnNvcnRieT1ob3RcXFwiLFxcXCJsb2NhbFxcXCI6XFxcImRvbWVzdGljXFxcIixcXFwiYXJlYVxcXCI6XFxcIlxcXCIsXFxcImZpbHRlclxcXCI6XFxcIlxcXCJ9Jyk7XFxyXFxuICAgIGxldCBhID0gW107XFxyXFxuICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShnZXRNeVZhcignY29taW5nJykpO1xcclxcbiAgICBsZXQgY29sb3IgPSBnZXRDb25maWcoJ2Nob29zZUNvbG9yJyk7XFxyXFxuXFxyXFxuICAgIGxldCBpdGVtcyA9IHtcXHJcXG4gICAgICAgIOeUteW9sTogJ21vdmllJyxcXHJcXG4gICAgICAgIOeUteinhuWJpzogJ3R2J1xcclxcbiAgICB9XFxyXFxuICAgIGZvciAobGV0IGkgaW4gaXRlbXMpIHtcXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IHRlbXAudHlwZSA9PT0gaXRlbXNbaV0gPyAn4oCc4oCc4oCd4oCdPGI+IDxmb250IGNvbG9yPScgKyBjb2xvciArICc+JyArIGkgKyAnIDwvZm9udD48L2I+JyA6IGksXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXHJcXG4gICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChlKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShnZXRNeVZhcignY29taW5nJykpO1xcclxcbiAgICAgICAgICAgICAgICB0ZW1wLnR5cGUgPSBlO1xcclxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiY29taW5nXFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICAgICAgfSwgaXRlbXNbaV0pXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuICAgIGxldCByYW5rID0ge1xcclxcbiAgICAgICAg54Ot5bqmOiAnJnNvcnRieT1ob3QnLFxcclxcbiAgICAgICAg5pe26Ze0OiAnJ1xcclxcbiAgICB9XFxyXFxuICAgIGEucHVzaCh7XFxyXFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcclxcbiAgICB9KVxcclxcbiAgICBmb3IgKGxldCBpIGluIHJhbmspIHtcXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IHRlbXAucmFuayA9PT0gcmFua1tpXSA/ICfigJzigJzigJ3igJ08Yj4gPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz4nICsgaSArICcgPC9mb250PjwvYj4nIDogaSxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcclxcbiAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGUpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdjb21pbmcnKSk7XFxyXFxuICAgICAgICAgICAgICAgIHRlbXAucmFuayA9IGU7XFxyXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJjb21pbmdcXFwiLCBKU09OLnN0cmluZ2lmeSh0ZW1wKSk7XFxyXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxyXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICB9LCByYW5rW2ldKVxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfVxcclxcbiAgICBsZXQgbG9jYWwgPSB7XFxyXFxuICAgICAgICDlm73lhoU6ICdkb21lc3RpYycsXFxyXFxuICAgICAgICDlhajnkIM6ICdpbnRlcm5hdGlvbmFsJ1xcclxcbiAgICB9XFxyXFxuICAgIGlmICh0ZW1wLnR5cGUgPT0gJ21vdmllJykge1xcclxcbiAgICAgICAgYS5wdXNoKHtcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgICAgIGZvciAobGV0IGkgaW4gbG9jYWwpIHtcXHJcXG4gICAgICAgICAgICBhLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGVtcC5sb2NhbCA9PT0gbG9jYWxbaV0gPyAn4oCc4oCc4oCd4oCdPGI+IDxmb250IGNvbG9yPScgKyBjb2xvciArICc+JyArIGkgKyAnIDwvZm9udD48L2I+JyA6IGksXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxyXFxuICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGUpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShnZXRNeVZhcignY29taW5nJykpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgdGVtcC5sb2NhbCA9IGU7XFxyXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiY29taW5nXFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICAgICAgfSwgbG9jYWxbaV0pXFxyXFxuICAgICAgICAgICAgfSlcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgICBsZXQgYXJlYSA9IHtcXHJcXG4gICAgICAgIOWFqOmDqDogJycsXFxyXFxuICAgICAgICDnvo7lm706ICcmYXJlYV9maWx0ZXI9YW1lcmljYW4nLFxcclxcbiAgICAgICAg5qyn5rSyOiAnJmFyZWFfZmlsdGVyPWV1cm9wZScsXFxyXFxuICAgICAgICDml6XmnKw6ICcmYXJlYV9maWx0ZXI9amFwYW5lc2UnLFxcclxcbiAgICAgICAg6Z+p5Zu9OiAnJmFyZWFfZmlsdGVyPWtvcmVhbidcXHJcXG4gICAgfVxcclxcbiAgICBpZiAodGVtcC50eXBlID09ICdtb3ZpZScgJiYgdGVtcC5sb2NhbCA9PSAnaW50ZXJuYXRpb25hbCcpIHtcXHJcXG4gICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXHJcXG4gICAgICAgIH0pXFxyXFxuICAgICAgICBmb3IgKGxldCBpIGluIGFyZWEpIHtcXHJcXG4gICAgICAgICAgICBhLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGVtcC5hcmVhID09PSBhcmVhW2ldID8gJ+KAnOKAnOKAneKAnTxiPiA8Zm9udCBjb2xvcj0nICsgY29sb3IgKyAnPicgKyBpICsgJyA8L2ZvbnQ+PC9iPicgOiBpLFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcclxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChlKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ2NvbWluZycpKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHRlbXAuYXJlYSA9IGU7XFxyXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiY29taW5nXFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICAgICAgfSwgYXJlYVtpXSlcXHJcXG4gICAgICAgICAgICB9KVxcclxcbiAgICAgICAgfVxcclxcbiAgICB9XFxyXFxuICAgIGxldCBmaWx0ZXIgPSB7XFxyXFxuICAgICAgICDlhajpg6g6ICcnLFxcclxcbiAgICAgICAg5Zu95Lqn5YmnOiAnJnR5cGVfZmlsdGVyPXR2X2RvbWVzdGljJyxcXHJcXG4gICAgICAgIOasp+e+juWJpzogJyZ0eXBlX2ZpbHRlcj10dl9hbWVyaWNhbicsXFxyXFxuICAgICAgICDml6Xliac6ICcmdHlwZV9maWx0ZXI9dHZfamFwYW5lc2UnLFxcclxcbiAgICAgICAg6Z+p5YmnOiAnJnR5cGVfZmlsdGVyPXR2X2tvcmVhbicsXFxyXFxuICAgICAgICDliqjnlLs6ICcmdHlwZV9maWx0ZXI9dHZfYW5pbWF0aW9uJyxcXHJcXG4gICAgICAgIOWbveWGhee7vOiJujogJyZ0eXBlX2ZpbHRlcj1zaG93X2RvbWVzdGljJyxcXHJcXG4gICAgICAgIOWbveWklue7vOiJujogJyZ0eXBlX2ZpbHRlcj1zaG93X2ZvcmVpZ24nXFxyXFxuICAgIH1cXHJcXG4gICAgaWYgKHRlbXAudHlwZSA9PSAndHYnKSB7XFxyXFxuICAgICAgICBhLnB1c2goe1xcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICAgICAgZm9yIChsZXQgaSBpbiBmaWx0ZXIpIHtcXHJcXG4gICAgICAgICAgICBhLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGVtcC5maWx0ZXIgPT09IGZpbHRlcltpXSA/ICfigJzigJzigJ3igJ08Yj4gPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz4nICsgaSArICcgPC9mb250PjwvYj4nIDogaSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXHJcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5I25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZSkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdjb21pbmcnKSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICB0ZW1wLmZpbHRlciA9IGU7XFxyXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiY29taW5nXFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICAgICAgfSwgZmlsdGVyW2ldKVxcclxcbiAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgbGV0IHMgPSBnZXREb3ViYW5SZXMoXFxcImh0dHBzOi8vZnJvZG8uZG91YmFuLmNvbS9hcGkvdjIvXFxcIiArIHRlbXAudHlwZSArIFxcXCIvY29taW5nX3Nvb25cXFwiICsgXFxcIj9hcmVhPVxcXCIgKyB0ZW1wLmxvY2FsICsgdGVtcC5yYW5rICsgdGVtcC5hcmVhICsgdGVtcC5maWx0ZXIgKyAocGFnZSA/IFxcXCImc3RhcnQ9XFxcIiArIChwYWdlIC0gMSkgKiBjb3VudCArIFxcXCImY291bnQ9XFxcIiArIGNvdW50IDogXFxcIiZzdGFydD0wJmNvdW50PTEwXFxcIikpO1xcclxcbiAgICBsZXQgbCA9IHMuc3ViamVjdHM7XFxyXFxuICAgIGxldCBkZXRhaWxzVmlld0NvbmZpZ3MgPSBnZXRDb25maWcoJ2RldGFpbHNWaWV3Q29uZmlncycpO1xcclxcblxcclxcbiAgICBsZXQgaSA9IGwubWFwKChlID0+IHtcXHJcXG4gICAgICAgIGxldCB0eXBlID0gZS50eXBlLFxcclxcbiAgICAgICAgICAgIGlkID0gZS5pZCxcXHJcXG4gICAgICAgICAgICB0aXRsZSA9IGUudGl0bGU7XFxyXFxuICAgICAgICBsZXQgdXNlQ29uZmlnID0gZGV0YWlsc1ZpZXdDb25maWdzW2RldGFpbHNWaWV3Q29uZmlncy51c2VdLmNvbmZpZztcXHJcXG4gICAgICAgIGxldCB1cmxQYXJhbXMgPSB7fTtcXHJcXG4gICAgICAgIGlmICh1c2VDb25maWcuc3RhcnRzV2l0aCgneycpKSB7XFxyXFxuICAgICAgICAgICAgZXZhbCgndXJsUGFyYW1zID0gJyArIHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgIHVybFBhcmFtcy51cmwgPSAkKFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSMjaW1tZXJzaXZlVGhlbWUjXFxcIiArICc/dHlwZT0nICsgdHlwZSArICcmaWQ9JyArIGlkKS5ydWxlKCh0eXBlLCBpZCwgdGl0bGUsIHVzZUNvbmZpZykgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBcXFwicGxheWxpc3RcXFwiKSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBkb3VMaXN0KGlkLCBNWV9QQUdFLCA1MCk7XFxyXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBldmFsKHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICB9LCB0eXBlLCBpZCwgdGl0bGUsIHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICByZXR1cm4ge1xcclxcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSArIFxcXCLvvIhcXFwiICsgZS55ZWFyICsgXFxcIu+8iVxcXCIsXFxyXFxuICAgICAgICAgICAgdXJsOiB1cmxQYXJhbXMudXJsLFxcclxcbiAgICAgICAgICAgIGV4dHJhOiB1cmxQYXJhbXMuZXh0cmEsXFxyXFxuICAgICAgICAgICAgaW1nOiBlLmNvdmVyX3VybCArIFxcXCJAUmVmZXJlcj1cXFwiICsgZS5jb3Zlcl91cmwsXFxyXFxuICAgICAgICAgICAgZGVzYzogXFxcIuS4iuaYoOaXpeacnzpcXFwiICsgZS5wdWJkYXRlICsgXFxcIlxcXFxuXFxcIiArIGUud2lzaF9jb3VudCArIFxcXCLkurrmg7PnnItcXFwiICsgXFxcIlxcXFxuXFxcIiArIGUubnVsbF9yYXRpbmdfcmVhc29uXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH0pKTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIHBhZ2UgPiAxID8gaSA6IGEuY29uY2F0KGkpO1xcclxcbn1cXHJcXG5cXHJcXG4vL+eJh+WNleivpuaDhVxcclxcbmZ1bmN0aW9uIHN1YmplY3RDb2xsZWN0aW9uTGlzdChwYWdlLCBjb3VudCwgaWQpIHtcXHJcXG4gICAgaWYgKCFnZXRNeVZhcigncmFua2luZycpKSBwdXRNeVZhcigncmFua2luZycsICd7XFxcIml0ZW1cXFwiOlxcXCJtb3ZpZV9yZWFsX3RpbWVfaG90ZXN0XFxcIixcXFwicGxheWFibGVcXFwiOlxcXCIwXFxcIixcXFwic2NvcmVcXFwiOlxcXCIwLTEwXFxcIn0nKTtcXHJcXG4gICAgbGV0IGEgPSBbXTtcXHJcXG4gICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdyYW5raW5nJykpO1xcclxcbiAgICBsZXQgY29sb3IgPSBnZXRDb25maWcoJ2Nob29zZUNvbG9yJyk7XFxyXFxuXFxyXFxuICAgIGxldCBpdGVtcyA9IHtcXHJcXG4gICAgICAgIOeUteW9sToge1xcclxcbiAgICAgICAgICAgIOWunuaXtueDremXqOeUteW9sTogJ21vdmllX3JlYWxfdGltZV9ob3Rlc3QnLFxcclxcbiAgICAgICAgICAgIOS4gOWRqOWPo+eikeeUteW9sTogJ21vdmllX3dlZWtseV9iZXN0JyxcXHJcXG4gICAgICAgICAgICB0b3AyNTDnlLXlvbE6ICdtb3ZpZV90b3AyNTAnXFxyXFxuICAgICAgICB9LFxcclxcbiAgICAgICAg55S16KeG5YmnOiB7XFxyXFxuICAgICAgICAgICAg5a6e5pe254Ot6Zeo5Ymn6ZuGOiAndHZfcmVhbF90aW1lX2hvdGVzdCcsXFxyXFxuICAgICAgICAgICAg5Y2O6K+t5Y+j56KR5Ymn6ZuGOiAndHZfY2hpbmVzZV9iZXN0X3dlZWtseScsXFxyXFxuICAgICAgICAgICAg5YWo55CD5Y+j56KR5Ymn6ZuGOiAndHZfZ2xvYmFsX2Jlc3Rfd2Vla2x5J1xcclxcbiAgICAgICAgfSxcXHJcXG4gICAgICAgIOe7vOiJujoge1xcclxcbiAgICAgICAgICAgIOWbveWGheWPo+eikee7vOiJujogJ3Nob3dfY2hpbmVzZV9iZXN0X3dlZWtseScsXFxyXFxuICAgICAgICAgICAg5Zu95aSW5Y+j56KR57u86Im6OiAnc2hvd19nbG9iYWxfYmVzdF93ZWVrbHknXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH1cXHJcXG4gICAgZm9yIChsZXQgaSBpbiBpdGVtcykge1xcclxcbiAgICAgICAgZm9yIChsZXQgaiBpbiBpdGVtc1tpXSkge1xcclxcbiAgICAgICAgICAgIGEucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0ZW1wLml0ZW0gPT0gaXRlbXNbaV1bal0gPyAn4oCc4oCc4oCd4oCdPGI+IDxmb250IGNvbG9yPScgKyBjb2xvciArICc+JyArIGogKyAnIDwvZm9udD48L2I+JyA6IGosXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxyXFxuICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGUpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShnZXRNeVZhcigncmFua2luZycpKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHRlbXAuaXRlbSA9IGU7XFxyXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwicmFua2luZ1xcXCIsIEpTT04uc3RyaW5naWZ5KHRlbXApKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxyXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICAgICAgICAgIH0sIGl0ZW1zW2ldW2pdKVxcclxcbiAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICBhLnB1c2goe1xcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGEucHVzaCh7XFxyXFxuICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcclxcbiAgICB9KVxcclxcblxcclxcbiAgICBsZXQgaSA9IFtdO1xcclxcbiAgICBsZXQgcGxheWFibGUgPSB7XFxyXFxuICAgICAgICDlhajpg6jlvbHniYc6ICcwJyxcXHJcXG4gICAgICAgIOS7heacieeJh+a6kDogJzEnXFxyXFxuICAgIH1cXHJcXG4gICAgZm9yIChsZXQgciBpbiBwbGF5YWJsZSkge1xcclxcbiAgICAgICAgaS5wdXNoKHtcXHJcXG4gICAgICAgICAgICB0aXRsZTogdGVtcC5wbGF5YWJsZSA9PSBwbGF5YWJsZVtyXSA/ICfigJzigJzigJ3igJ08Yj4gPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz4nICsgciArICcgPC9mb250PjwvYj4nIDogcixcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcclxcbiAgICAgICAgICAgIHVybDogJCgnaGlrZXI6IC8vZW1wdHkjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChlKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShnZXRNeVZhcigncmFua2luZycpKTtcXHJcXG4gICAgICAgICAgICAgICAgdGVtcC5wbGF5YWJsZSA9IGU7XFxyXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJyYW5raW5nXFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICAgICAgfSwgcGxheWFibGVbcl0pXFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGkucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxiPiA8Zm9udCBjb2xvcj0nICsgY29sb3IgKyAnPuivhOWIhuWMuumXtDonICsgdGVtcC5zY29yZSArICcgPC9mb250PjwvYj4nLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXHJcXG4gICAgICAgIHVybDogJCh0ZW1wLnNjb3JlLCAn6K+E5YiG5bqU5ZyoMC0xMOS5i+mXtCcpLmlucHV0KCgpID0+IHtcXHJcXG4gICAgICAgICAgICBsZXQgdGVtcCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ3JhbmtpbmcnKSk7XFxyXFxuICAgICAgICAgICAgbGV0IGlucHV0cyA9IGlucHV0LnNwbGl0KCctJyk7XFxyXFxuICAgICAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT0gMiAmJiBpbnB1dHMuZXZlcnkoZSA9PiBlID49IDAgJiYgZSA8PSAxMCkgJiYgcGFyc2VGbG9hdChpbnB1dHNbMF0pIDwgaW5wdXRzWzFdKSB7XFxyXFxuICAgICAgICAgICAgICAgIHRlbXAuc2NvcmUgPSBpbnB1dDtcXHJcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInJhbmtpbmdcXFwiLCBKU09OLnN0cmluZ2lmeSh0ZW1wKSk7XFxyXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxyXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXHJcXG4gICAgICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6K+35q2j56Gu6L6T5YWlJ1xcclxcbiAgICAgICAgICAgIH1cXHJcXG4gICAgICAgIH0pXFxyXFxuICAgIH0pXFxyXFxuXFxyXFxuICAgIGxldCB0ID0gZ2V0RG91YmFuUmVzKFxcXCJodHRwczovL2Zyb2RvLmRvdWJhbi5jb20vYXBpL3YyL3N1YmplY3RfY29sbGVjdGlvbi9cXFwiICsgKGlkIHx8IHRlbXAuaXRlbSkpO1xcclxcbiAgICBpLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6IHQudGl0bGUgKyAnKOWFsScgKyB0LnRvdGFsICsgJ+mDqCknLFxcclxcbiAgICAgICAgZGVzYzogdC5kZXNjcmlwdGlvbixcXHJcXG4gICAgICAgIC8qaW1nOiB0LmhlYWRlcl9iZ19pbWFnZSArIFxcXCJAUmVmZXJlcj1cXFwiICsgdC5oZWFkZXJfYmdfaW1hZ2UsXFxyXFxuICAgICAgICB1cmw6IHQuaGVhZGVyX2JnX2ltYWdlICsgXFxcIj90eXBlPS5qcGdAUmVmZXJlcj1cXFwiICsgdC5oZWFkZXJfYmdfaW1hZ2UgKyBcXFwiP3R5cGU9LmpwZ1xcXCIsKi9cXHJcXG4gICAgICAgIHVybDogJ3RvYXN0Oi8v54K55oiR5bmy5ZibJyxcXHJcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIlxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICBsZXQgcyA9IGdldERvdWJhblJlcyhcXFwiaHR0cHM6Ly9mcm9kby5kb3ViYW4uY29tL2FwaS92Mi9zdWJqZWN0X2NvbGxlY3Rpb24vXFxcIiArIChpZCB8fCB0ZW1wLml0ZW0pICsgXFxcIi9pdGVtcz9cXFwiICsgKHBhZ2UgPyBcXFwic3RhcnQ9XFxcIiArIChwYWdlIC0gMSkgKiBjb3VudCArIFxcXCImY291bnQ9XFxcIiArIGNvdW50IDogXFxcInN0YXJ0PTAmY291bnQ9NTBcXFwiKSk7XFxyXFxuICAgIGxldCBsID0gcy5zdWJqZWN0X2NvbGxlY3Rpb25faXRlbXM7XFxyXFxuICAgIGlmICh0ZW1wLnBsYXlhYmxlID09ICcxJykgbCA9IGwuZmlsdGVyKGUgPT4gISFlLmhhc19saW5ld2F0Y2gpO1xcclxcbiAgICBpZiAodGVtcC5zY29yZSAhPSAnMC0xMCcpIHtcXHJcXG4gICAgICAgIGwgPSBsLmZpbHRlcihlID0+IHtcXHJcXG4gICAgICAgICAgICBsZXQgciA9IHRlbXAuc2NvcmUuc3BsaXQoJy0nKTtcXHJcXG4gICAgICAgICAgICByZXR1cm4gZS5yYXRpbmcgJiYgZS5yYXRpbmcudmFsdWUgPCByWzFdICYmIGUucmF0aW5nLnZhbHVlID4gclswXTtcXHJcXG4gICAgICAgIH0pO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGxldCBkZXRhaWxzVmlld0NvbmZpZ3MgPSBnZXRDb25maWcoJ2RldGFpbHNWaWV3Q29uZmlncycpO1xcclxcbiAgICBsZXQgciA9IGwubWFwKChlID0+IHtcXHJcXG4gICAgICAgIGxldCB0eXBlID0gZS50eXBlLFxcclxcbiAgICAgICAgICAgIGlkID0gZS5pZCxcXHJcXG4gICAgICAgICAgICB0aXRsZSA9IGUudGl0bGU7XFxyXFxuICAgICAgICBsZXQgdXNlQ29uZmlnID0gZGV0YWlsc1ZpZXdDb25maWdzW2RldGFpbHNWaWV3Q29uZmlncy51c2VdLmNvbmZpZztcXHJcXG4gICAgICAgIGxldCB1cmxQYXJhbXMgPSB7fTtcXHJcXG4gICAgICAgIGlmICh1c2VDb25maWcuc3RhcnRzV2l0aCgneycpKSB7XFxyXFxuICAgICAgICAgICAgZXZhbCgndXJsUGFyYW1zID0gJyArIHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgIHVybFBhcmFtcy51cmwgPSAkKFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSMjaW1tZXJzaXZlVGhlbWUjXFxcIiArICc/dHlwZT0nICsgdHlwZSArICcmaWQ9JyArIGlkKS5ydWxlKCh0eXBlLCBpZCwgdGl0bGUsIHVzZUNvbmZpZykgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBcXFwicGxheWxpc3RcXFwiKSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBkb3VMaXN0KGlkLCBNWV9QQUdFLCA1MCk7XFxyXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBldmFsKHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICB9LCB0eXBlLCBpZCwgdGl0bGUsIHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICByZXR1cm4ge1xcclxcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJyxcXHJcXG4gICAgICAgICAgICB1cmw6IHVybFBhcmFtcy51cmwsXFxyXFxuICAgICAgICAgICAgZXh0cmE6IHVybFBhcmFtcy5leHRyYSxcXHJcXG4gICAgICAgICAgICBpbWc6IGUucGljLm5vcm1hbCArIFxcXCJAUmVmZXJlcj1cXFwiICsgZS5waWMubm9ybWFsLFxcclxcbiAgICAgICAgICAgIGRlc2M6IGUuY2FyZF9zdWJ0aXRsZS5zcGxpdChcXFwiL1xcXCIpLmZpbHRlcigoKGUsIHQpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgaWYgKHQgPCAzKSByZXR1cm4gZVxcclxcbiAgICAgICAgICAgIH0pKS5qb2luKFxcXCIsXFxcIikgKyBcXFwiXFxcXG5cXFwiICsgKGUucmF0aW5nID8gY29tcHV0ZVJhdGluZyhlLnJhdGluZy5tYXgsIGUucmF0aW5nLnZhbHVlKSArIFxcXCIgXFxcIiArIGUucmF0aW5nLnZhbHVlLnRvRml4ZWQoMSkgKyBcXFwi5YiGXFxcIiA6IFxcXCLmmoLml6Dor4TliIZcXFwiKVxcclxcbiAgICAgICAgfVxcclxcbiAgICB9KSk7XFxyXFxuXFxyXFxuICAgIHNldEhvbWVSZXN1bHQoe1xcclxcbiAgICAgICAgZGF0YTogcGFnZSA+IDEgPyByIDogKGlkID8gaS5jb25jYXQocikgOiBhLmNvbmNhdChpKS5jb25jYXQocikpXFxyXFxuICAgIH0pXFxyXFxufVxcclxcblxcclxcbi8v6LGG5YiX6K+m5oOFXFxyXFxuZnVuY3Rpb24gZG91TGlzdChpZCwgcGFnZSwgY291bnQpIHtcXHJcXG4gICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJNeVZhcihcXFwiZG91TGlzdFxcXCIpJyk7XFxyXFxuICAgIGlmICghZ2V0TXlWYXIoJ2RvdUxpc3QnKSkgcHV0TXlWYXIoJ2RvdUxpc3QnLCAne1xcXCJwbGF5YWJsZVxcXCI6XFxcIjBcXFwiLFxcXCJzY29yZVxcXCI6XFxcIjAtMTBcXFwifScpO1xcclxcbiAgICBsZXQgaSA9IFtdO1xcclxcbiAgICBsZXQgdGVtcCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ2RvdUxpc3QnKSk7XFxyXFxuICAgIGxldCBjb2xvciA9IGdldENvbmZpZygnY2hvb3NlQ29sb3InKTtcXHJcXG5cXHJcXG4gICAgbGV0IHBsYXlhYmxlID0ge1xcclxcbiAgICAgICAg5YWo6YOo5b2x54mHOiAnMCcsXFxyXFxuICAgICAgICDku4XmnInniYfmupA6ICcxJ1xcclxcbiAgICB9XFxyXFxuICAgIGZvciAobGV0IHIgaW4gcGxheWFibGUpIHtcXHJcXG4gICAgICAgIGkucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IHRlbXAucGxheWFibGUgPT0gcGxheWFibGVbcl0gPyAn4oCc4oCc4oCd4oCdPGI+IDxmb250IGNvbG9yPScgKyBjb2xvciArICc+JyArIHIgKyAnIDwvZm9udD48L2I+JyA6IHIsXFxyXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXHJcXG4gICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOiAvL2VtcHR5I25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZSkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBsZXQgdGVtcCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ2RvdUxpc3QnKSk7XFxyXFxuICAgICAgICAgICAgICAgIHRlbXAucGxheWFibGUgPSBlO1xcclxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZG91TGlzdFxcXCIsIEpTT04uc3RyaW5naWZ5KHRlbXApKTtcXHJcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXHJcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcclxcbiAgICAgICAgICAgIH0sIHBsYXlhYmxlW3JdKVxcclxcbiAgICAgICAgfSlcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBpLnB1c2goe1xcclxcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Yj4gPGZvbnQgY29sb3I9JyArIGNvbG9yICsgJz7or4TliIbljLrpl7Q6JyArIHRlbXAuc2NvcmUgKyAnIDwvZm9udD48L2I+JyxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxyXFxuICAgICAgICB1cmw6ICQodGVtcC5zY29yZSwgJ+ivhOWIhuW6lOWcqDAtMTDkuYvpl7QnKS5pbnB1dCgoKSA9PiB7XFxyXFxuICAgICAgICAgICAgbGV0IHRlbXAgPSBKU09OLnBhcnNlKGdldE15VmFyKCdkb3VMaXN0JykpO1xcclxcbiAgICAgICAgICAgIGxldCBpbnB1dHMgPSBpbnB1dC5zcGxpdCgnLScpO1xcclxcbiAgICAgICAgICAgIGlmIChpbnB1dHMubGVuZ3RoID09IDIgJiYgaW5wdXRzLmV2ZXJ5KGUgPT4gZSA+PSAwICYmIGUgPD0gMTApICYmIHBhcnNlRmxvYXQoaW5wdXRzWzBdKSA8IGlucHV0c1sxXSkge1xcclxcbiAgICAgICAgICAgICAgICB0ZW1wLnNjb3JlID0gaW5wdXQ7XFxyXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkb3VMaXN0XFxcIiwgSlNPTi5zdHJpbmdpZnkodGVtcCkpO1xcclxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcclxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxyXFxuICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+ato+ehrui+k+WFpSdcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICB9KVxcclxcbiAgICB9KVxcclxcblxcclxcbiAgICBsZXQgdCA9IGdldERvdWJhblJlcyhcXFwiaHR0cHM6Ly9mcm9kby5kb3ViYW4uY29tL2FwaS92Mi9kb3VsaXN0L1xcXCIgKyBpZCk7XFxyXFxuICAgIGkucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogdC50aXRsZSxcXHJcXG4gICAgICAgIGRlc2M6ICflhbEnICsgdC5pdGVtc19jb3VudCArICfpg6goJyArIHQucGxheWFibGVfY291bnQgKyAn6YOo5Y+v5pKt5pS+KScsXFxyXFxuICAgICAgICAvKmltZzogdC5oZWFkZXJfYmdfaW1hZ2UgKyBcXFwiQFJlZmVyZXI9XFxcIiArIHQuaGVhZGVyX2JnX2ltYWdlLFxcclxcbiAgICAgICAgdXJsOiB0LmhlYWRlcl9iZ19pbWFnZSArIFxcXCI/dHlwZT0uanBnQFJlZmVyZXI9XFxcIiArIHQuaGVhZGVyX2JnX2ltYWdlICsgXFxcIj90eXBlPS5qcGdcXFwiLCovXFxyXFxuICAgICAgICB1cmw6ICd0b2FzdDovL+WIq+eCueaIkScsXFxyXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCJcXHJcXG4gICAgfSk7XFxyXFxuXFxyXFxuICAgIGxldCBzID0gZ2V0RG91YmFuUmVzKFxcXCJodHRwczovL2Zyb2RvLmRvdWJhbi5jb20vYXBpL3YyL2RvdWxpc3QvXFxcIiArIGlkICsgXFxcIi9wb3N0c1xcXCIgKyAnP3BsYXlhYmxlPScgKyB0ZW1wLnBsYXlhYmxlICsgKHBhZ2UgPyBcXFwiJnN0YXJ0PVxcXCIgKyAocGFnZSAtIDEpICogY291bnQgKyBcXFwiJmNvdW50PVxcXCIgKyBjb3VudCA6IFxcXCImc3RhcnQ9MCZjb3VudD01MFxcXCIpKTtcXHJcXG4gICAgbGV0IGwgPSBzLml0ZW1zO1xcclxcbiAgICBpZiAodGVtcC5zY29yZSAhPSAnMC0xMCcpIHtcXHJcXG4gICAgICAgIGwgPSBsLmZpbHRlcihlID0+IHtcXHJcXG4gICAgICAgICAgICBsZXQgciA9IHRlbXAuc2NvcmUuc3BsaXQoJy0nKTtcXHJcXG4gICAgICAgICAgICByZXR1cm4gZS5jb250ZW50LnN1YmplY3QucmF0aW5nICYmIGUuY29udGVudC5zdWJqZWN0LnJhdGluZy52YWx1ZSA8IHJbMV0gJiYgZS5jb250ZW50LnN1YmplY3QucmF0aW5nLnZhbHVlID4gclswXTtcXHJcXG4gICAgICAgIH0pO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGxldCBkZXRhaWxzVmlld0NvbmZpZ3MgPSBnZXRDb25maWcoJ2RldGFpbHNWaWV3Q29uZmlncycpO1xcclxcbiAgICBsZXQgciA9IGwubWFwKChlID0+IHtcXHJcXG4gICAgICAgIGxldCB0eXBlID0gZS5jb250ZW50LnN1YmplY3QudHlwZSxcXHJcXG4gICAgICAgICAgICBpZCA9IGUuY29udGVudC5zdWJqZWN0LmlkLFxcclxcbiAgICAgICAgICAgIHRpdGxlID0gZS5jb250ZW50LnN1YmplY3QudGl0bGU7XFxyXFxuICAgICAgICBsZXQgdXNlQ29uZmlnID0gZGV0YWlsc1ZpZXdDb25maWdzW2RldGFpbHNWaWV3Q29uZmlncy51c2VdLmNvbmZpZztcXHJcXG4gICAgICAgIGxldCB1cmxQYXJhbXMgPSB7fTtcXHJcXG4gICAgICAgIGlmICh1c2VDb25maWcuc3RhcnRzV2l0aCgneycpKSB7XFxyXFxuICAgICAgICAgICAgZXZhbCgndXJsUGFyYW1zID0gJyArIHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgIHVybFBhcmFtcy51cmwgPSAkKFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSMjaW1tZXJzaXZlVGhlbWUjXFxcIiArICc/dHlwZT0nICsgdHlwZSArICcmaWQ9JyArIGlkKS5ydWxlKCh0eXBlLCBpZCwgdGl0bGUsIHVzZUNvbmZpZykgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL21haW4nKSkucnVsZSk7XFxyXFxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBcXFwicGxheWxpc3RcXFwiKSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBkb3VMaXN0KGlkLCBNWV9QQUdFLCA1MCk7XFxyXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBldmFsKHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICB9LCB0eXBlLCBpZCwgdGl0bGUsIHVzZUNvbmZpZyk7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICByZXR1cm4ge1xcclxcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXHJcXG4gICAgICAgICAgICB1cmw6IHVybFBhcmFtcy51cmwsXFxyXFxuICAgICAgICAgICAgZXh0cmE6IHVybFBhcmFtcy5leHRyYSxcXHJcXG4gICAgICAgICAgICBpbWc6IGUuY29udGVudC5zdWJqZWN0LnBpYy5ub3JtYWwgKyBcXFwiQFJlZmVyZXI9XFxcIiArIGUuY29udGVudC5zdWJqZWN0LnBpYy5ub3JtYWwsXFxyXFxuICAgICAgICAgICAgZGVzYzogZS5jb250ZW50LnN1YmplY3QuY2FyZF9zdWJ0aXRsZS5zcGxpdChcXFwiL1xcXCIpLmZpbHRlcigoKGUsIHQpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgaWYgKHQgPCAzKSByZXR1cm4gZVxcclxcbiAgICAgICAgICAgIH0pKS5qb2luKFxcXCIsXFxcIikgKyBcXFwiXFxcXG5cXFwiICsgKGUuY29udGVudC5zdWJqZWN0LnJhdGluZyA/IGNvbXB1dGVSYXRpbmcoZS5jb250ZW50LnN1YmplY3QucmF0aW5nLm1heCwgZS5jb250ZW50LnN1YmplY3QucmF0aW5nLnZhbHVlKSArIFxcXCIgXFxcIiArIGUuY29udGVudC5zdWJqZWN0LnJhdGluZy52YWx1ZS50b0ZpeGVkKDEpICsgXFxcIuWIhlxcXCIgOiBcXFwi5pqC5peg6K+E5YiGXFxcIilcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgfSkpO1xcclxcblxcclxcbiAgICBzZXRIb21lUmVzdWx0KHtcXHJcXG4gICAgICAgIGRhdGE6IHBhZ2UgPiAxID8gciA6IGkuY29uY2F0KHIpXFxyXFxuICAgIH0pXFxyXFxufVxcclxcblxcclxcblxcclxcblxcclxcbi8v6KeG6aKR5qih5Z2XXFxyXFxuZnVuY3Rpb24gdmlkZW9VcmxzTW9kdWxlKGQsIHR5cGUsIGlkLCBjb2wsIGxhenksIF9yZXMsIGV4dHJhKSB7XFxyXFxuICAgIC8vY29s5piv5qC35byPY29sWzBdLGNvbFsxXeWIhuWIq+aYr3R25ZKMbW92aWXnmoTmoLflvI8odHbkvJrmnInliIbpm4bkv6Hmga90aXRsZeS8muW+iOmVvylcXHJcXG4gICAgaWYgKCFjb2wpIGNvbCA9IFsnaWNvbl8yJywgJ2ljb25fc21hbGxfNCddO1xcclxcbiAgICBpZiAoIWxhenkpIGxhenkgPSAncmV0dXJuIGlucHV0JztcXHJcXG4gICAgbGV0IHJlcyA9IF9yZXMgfHwgZ2V0RG91YmFuUmVzKFxcXCJodHRwczovL2Zyb2RvLmRvdWJhbi5jb20vYXBpL3YyL1xcXCIgKyB0eXBlICsgXFxcIi9cXFwiICsgaWQpO1xcclxcbiAgICBmb3IgKGxldCBpdGVtIGluIHJlcy52ZW5kb3JzKSB7XFxyXFxuICAgICAgICBsZXQgZSA9IHJlcy52ZW5kb3JzW2l0ZW1dO1xcclxcbiAgICAgICAgaWYgKHR5cGUgPT09IFxcXCJ0dlxcXCIpIHtcXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogZS50aXRsZSArIChlLmVwaXNvZGVzX2luZm8gPyBcXFwi4oCiXFxcIiArIGUuZXBpc29kZXNfaW5mbyA6IFxcXCJcXFwiKSxcXHJcXG4gICAgICAgICAgICAgICAgaW1nOiBlLmljb24sXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xbMF0gfHwgXFxcImljb25fMlxcXCIsXFxyXFxuICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eT9pZD0nICsgaWQgKyAnJnR5cGU9JyArIHR5cGUgKyAnJnRpdGxlPScgKyBlLnRpdGxlKS5ydWxlKChyZXMsIGlkLCBlLCBsYXp5LCBleHRyYSkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gcmVzLnRpdGxlLFxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpYyA9IHJlcy5waWMubm9ybWFsICsgXFxcIkBSZWZlcmVyPVxcXCIgKyByZXMucGljLm5vcm1hbDtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHNldFBhZ2VUaXRsZShlLnRpdGxlICsgJy0nICsgdGl0bGUpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlUGljVXJsKHBpYyk7XFxyXFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcclxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9tYWluJykpLnJ1bGUpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybHMgPSBnZXRUdlVybHMoaWQsIGUuaWQpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgbGF6eSA9ICQoXFxcIlxcXCIpLmxhenlSdWxlKGxhenkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRVcmwgPSBcXFwidG9hc3Q6Ly/op6PmnpDlpLHotKVcXFwiO1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXp5LnN0YXJ0c1dpdGgoXFxcIihcXFwiKSkge1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgncmVzdWx0VXJsID0gJyArIGxhenkpXFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKCdyZXN1bHRVcmwgPSAnICsgJygoKSA9PiB7JyArIGxhenkgKyAnfSkoKScpXFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRVcmxcXHJcXG4gICAgICAgICAgICAgICAgICAgIH0sIGxhenkpXFxyXFxuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IFtdO1xcclxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZih1cmxzKSA9PSBcXFwib2JqZWN0XFxcIikge1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkID0gW107XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cmxzLmxlbmd0aDsgaSsrKSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+esrCcgKyAoaSArIDEpICsgJ+mbhicsXFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfNCcsXFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGxhenkgPyB1cmxzW2ldICsgbGF6eSA6IHVybHNbaV0sXFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogZXh0cmFcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YodXJscykgPT0gXFxcInN0cmluZ1xcXCIgJiYgdXJscyA9PSAn6KKr5bCBaXAnKSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGUgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vcGFnZS9yZWxlYXNlSVA/cnVsZT3pnZLosYZcXFwiKSlcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJ1bGU7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChydWxlKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKHVybHMpID09ICdzdHJpbmcnICYmIHVybHMgPT0gJ+ayoeacieaUtuW9lScpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IFtdO1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn6LGG55Oj5rKh5pyJ5pS25b2V5q2k6KeG6aKR5rqQ55qE6K+m57uG5L+h5oGvJyxcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+eCueaIkeWPr+S7peWOu+inhumikea6kOe9keermeeci+eciycsXFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogZS51cmxcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICAgICAgfSwgcmVzLCBpZCwgZSwgbGF6eSwgZXh0cmEpXFxyXFxuICAgICAgICAgICAgfSlcXHJcXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ21vdmllJykge1xcclxcbiAgICAgICAgICAgIGxldCBtTGF6eSA9ICQoXFxcIlxcXCIpLmxhenlSdWxlKGxhenkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0VXJsID0gXFxcInRvYXN0Oi8v6Kej5p6Q5aSx6LSlXFxcIjtcXHJcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXp5LnN0YXJ0c1dpdGgoXFxcIihcXFwiKSkge1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3Jlc3VsdFVybCA9ICcgKyBsYXp5KVxcclxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKCdyZXN1bHRVcmwgPSAnICsgJygoKSA9PiB7JyArIGxhenkgKyAnfSkoKScpXFxyXFxuICAgICAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxyXFxuICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFVybFxcclxcbiAgICAgICAgICAgIH0sIGxhenkpXFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGUudGl0bGUgKyAoZS5lcGlzb2Rlc19pbmZvID8gXFxcIuKAolxcXCIgKyBlLmVwaXNvZGVzX2luZm8gOiBcXFwiXFxcIiksXFxyXFxuICAgICAgICAgICAgICAgIGltZzogZS5pY29uLFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sWzFdIHx8IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcclxcbiAgICAgICAgICAgICAgICB1cmw6IG1MYXp5ID8gZS51cmwgKyBtTGF6eSA6IGUudXJsLFxcclxcbiAgICAgICAgICAgICAgICBleHRyYTogZXh0cmFcXHJcXG4gICAgICAgICAgICB9KVxcclxcbiAgICAgICAgfVxcclxcbiAgICB9XFxyXFxufVxcclxcblxcclxcbi8v6I635Y+W55S16KeG5Ymn5YiG6ZuG6ZO+5o6lLGlk5piv54mH5a2Q57yW5Y+3LHVpZOaYr+inhumikea6kOe8luWPt1xcclxcbmZ1bmN0aW9uIGdldFR2VXJscyhpZCwgdWlkKSB7XFxyXFxuICAgIGxldCBjb29raWVDYWNoZSA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL2RvdWJhbmNvb2tpZS50eHQnO1xcclxcbiAgICBsZXQgbVVybCA9ICdodHRwczovL21vdmllLmRvdWJhbi5jb20vc3ViamVjdC8nICsgaWQgKyAnLyc7XFxyXFxuICAgIGxldCBoZWFkZXJzID0ge1xcclxcbiAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQSxcXHJcXG4gICAgfVxcclxcbiAgICBpZiAoZmlsZUV4aXN0KGNvb2tpZUNhY2hlKSkge1xcclxcbiAgICAgICAgaGVhZGVyc1tcXFwiQ29va2llXFxcIl0gPSBmZXRjaChjb29raWVDYWNoZSlcXHJcXG4gICAgfVxcclxcbiAgICBsZXQgaHRtbCA9IHJlcXVlc3QobVVybCwge1xcclxcbiAgICAgICAgaGVhZGVyczogaGVhZGVyc1xcclxcbiAgICB9KVxcclxcbiAgICBpZiAoKGh0bWwuaW5jbHVkZXMoXFxcIueZu+W9lei3s+i9rFxcXCIpICYmIGh0bWwuaW5jbHVkZXMoXFxcIuW8guW4uOivt+axglxcXCIpKSB8fCAoaHRtbC5pbmNsdWRlcyhcXFwid2luZG93LmxvY2F0aW9uLmhyZWZcXFwiKSAmJiBodG1sLmluY2x1ZGVzKFxcXCJzZWMuZG91YmFuXFxcIikpKSB7XFxyXFxuICAgICAgICByZXR1cm4gJ+iiq+WwgWlwJztcXHJcXG4gICAgfSBlbHNlIHtcXHJcXG4gICAgICAgIGxldCBzID0ge1xcclxcbiAgICAgICAgICAgIHFxOiAxLFxcclxcbiAgICAgICAgICAgIHlvdWt1OiAzLFxcclxcbiAgICAgICAgICAgIGxldHY6IDYsXFxyXFxuICAgICAgICAgICAgbWd0djogNyxcXHJcXG4gICAgICAgICAgICBiaWxpYmlsaTogOCxcXHJcXG4gICAgICAgICAgICBpcWl5aTogOSxcXHJcXG4gICAgICAgICAgICBjbnR2OiAxMixcXHJcXG4gICAgICAgICAgICBjY3R2NjogMTMsXFxyXFxuICAgICAgICAgICAgbWlndXZpZGVvOiAxNSxcXHJcXG4gICAgICAgICAgICB4aWd1YTogMTcsXFxyXFxuICAgICAgICAgICAgYWNmdW46IDE4LFxcclxcbiAgICAgICAgICAgIG1haWR1aWR1aTogMTlcXHJcXG4gICAgICAgIH07XFxyXFxuICAgICAgICBsZXQgbnVtID0gc1t1aWRdO1xcclxcblxcclxcbiAgICAgICAgdmFyIHNvdXJjZXMgPSB7fTtcXHJcXG4gICAgICAgIGxldCBzbCA9IGh0bWwubWF0Y2goL3NvdXJjZXNcXFxcW1sxLTldezEsMn1cXFxcXVtcXFxcc1xcXFxTXSo/XFxcXF0vZyk7XFxyXFxuICAgICAgICBpZiAoc2wpIHtcXHJcXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIHNsKSB7XFxyXFxuICAgICAgICAgICAgICAgIGV2YWwoc2xbaV0pO1xcclxcbiAgICAgICAgICAgIH1cXHJcXG4gICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgbGV0IHNjcmlwdF9saXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmc2NyaXB0W3NyY10nKTtcXHJcXG4gICAgICAgICAgICBsZXQgc291cmNlc191cmwgPSBcXFwiXFxcIjtcXHJcXG4gICAgICAgICAgICBmb3IgKGxldCBpIGluIHNjcmlwdF9saXN0KSB7XFxyXFxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBwYXJzZURvbUZvckh0bWwoc2NyaXB0X2xpc3RbaV0sICdzY3JpcHQmJnNyYycpO1xcclxcbiAgICAgICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJ21peGVkX3N0YXRpYycpICE9PSAtMSkge1xcclxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlc191cmwgPSB1cmw7XFxyXFxuICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgbGV0IHNvdXJjZXNfbGlzdCA9IHJlcXVlc3Qoc291cmNlc191cmwpLm1hdGNoKC9zb3VyY2VzXFxcXFtbMS05XXsxLDJ9XFxcXF1bXFxcXHNcXFxcU10qP1xcXFxdL2cpO1xcclxcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc291cmNlc19saXN0KSB7XFxyXFxuICAgICAgICAgICAgICAgIGV2YWwoc291cmNlc19saXN0W2ldKTtcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICB9XFxyXFxuXFxyXFxuICAgICAgICBsZXQgcmVuID0gc291cmNlc1tudW1dO1xcclxcbiAgICAgICAgaWYgKHJlbiAmJiByZW4ubGVuZ3RoID4gMCkge1xcclxcbiAgICAgICAgICAgIC8qdmFyIHIgPSByZW4ubWFwKGUgPT4gdW5lc2NhcGUoZS5wbGF5X2xpbmsucmVwbGFjZSgvKGh0dHBzfGh0dHApOlxcXFwvXFxcXC93d3cuZG91YmFuLmNvbVxcXFwvbGluazJcXFxcL1xcXFw/dXJsPS8sICcnKVxcclxcbiAgICAgICAgICAgICAgICAuc3BsaXQoJzsnKVswXS5zcGxpdCgnLmh0bWwnKVswXSArICcuaHRtbCcpKSovXFxyXFxuICAgICAgICAgICAgdmFyIHIgPSByZW4ubWFwKGUgPT4gdW5lc2NhcGUoZS5wbGF5X2xpbmsuc3BsaXQoJz91cmw9JylbMV0uc3BsaXQoJyYnKVswXSkpXFxyXFxuXFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICByZXR1cm4gciB8fCAn5rKh5pyJ5pS25b2VJztcXHJcXG4gICAgfVxcclxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuiuvue9rumhtVwiLFwicGF0aFwiOlwic2V0dGluZ1BhZ2VcIixcInJ1bGVcIjpcImpzOlxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvdXRpbHMnKSkucnVsZSk7XFxuXFxuLy/lvbHniYfor6bmg4XphY3nva7mqKHlnZdcXG5mdW5jdGlvbiBkZXRhaWxWaWV3TW9kZU1vZHVsZShkLCBkZXRhaWxzVmlld0NvbmZpZ3MpIHtcXG4gICAgbGV0IGRldGFpbHNWaWV3Q29uZmlncyA9IGdldENvbmZpZygnZGV0YWlsc1ZpZXdDb25maWdzJyk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+iHquWumuS5ieW9seeJh+ivpuaDhemhtemdoicuYm9sZCgpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxuICAgIH0pXFxuICAgIGZvciAobGV0IGNvbmZpZ0tleSBvZiBPYmplY3Qua2V5cyhkZXRhaWxzVmlld0NvbmZpZ3MpKSB7XFxuICAgICAgICBpZiAoY29uZmlnS2V5ID09PSAndXNlJykgY29udGludWU7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBjb25maWdLZXkgPT09IGRldGFpbHNWaWV3Q29uZmlncy51c2UgPyBcXFwi4oCc4oCcXFxcIiArIGNvbmZpZ0tleSArIFxcXCLigJ3igJ1cXFwiIDogY29uZmlnS2V5LFxcbiAgICAgICAgICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoY29uZmlnS2V5ID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IEpTT04ucGFyc2UocmVxdWVzdChnZXRNeVZhcigncWRiX2NvbmZpZycpKSlcXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5kZXRhaWxzVmlld0NvbmZpZ3MudXNlID09PSBjb25maWdLZXkpIHtcXG4gICAgICAgICAgICAgICAgICAgIC8vcHV0TXlWYXIoXFxcImlucHV0X2NvbmZpZ190eXBlXFxcIiwgJ+W9seeJh+ivpuaDhemhtemdoumFjee9ricpXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaW5wdXRfbmFtZVxcXCIsIGNvbmZpZ0tleSk7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaW5wdXRfY29kZVxcXCIsIGNvbmZpZy5kZXRhaWxzVmlld0NvbmZpZ3NbY29uZmlnS2V5XS5jb25maWcpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImlucHV0X3NldHRpbmdfY29kZVxcXCIsIGNvbmZpZy5kZXRhaWxzVmlld0NvbmZpZ3NbY29uZmlnS2V5XS5zZXR0aW5nIHx8IFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NldHRpbmctZWRpdG9yP3J1bGU96Z2S6LGGJnZpZXc9ZGV0YWlsVmlld01vZGVFZGl0UGFnZSc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgY29uZmlnLmRldGFpbHNWaWV3Q29uZmlncy51c2UgPSBjb25maWdLZXlcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGdldE15VmFyKCdxZGJfY29uZmlnJyksIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouaIkOWKnydcXG4gICAgICAgICAgICB9LCBjb25maWdLZXkpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgICAgICB9KVxcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfinpUnLFxcbiAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2Uvc2V0dGluZy1lZGl0b3I/cnVsZT3pnZLosYYmdmlldz1kZXRhaWxWaWV3TW9kZUVkaXRQYWdlJ1xcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4p6WJyxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgdXJsOiAkKE9iamVjdC5rZXlzKGRldGFpbHNWaWV3Q29uZmlncykuZmlsdGVyKGNvbmZpZ0tleSA9PiBjb25maWdLZXkgIT09ICd1c2UnICYmIGNvbmZpZ0tleSAhPT0gJ+m7mOiupCcpLCAyKVxcbiAgICAgICAgICAgIC5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT09ICfpu5jorqQnKSByZXR1cm4gJ3RvYXN0Oi8v6buY6K6k6YWN572u5peg5rOV5Yig6Zmk77yBJ1xcbiAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gSlNPTi5wYXJzZShyZXF1ZXN0KGdldE15VmFyKCdxZGJfY29uZmlnJykpKVxcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT09IGNvbmZpZy5kZXRhaWxzVmlld0NvbmZpZ3MudXNlKSByZXR1cm4gJ3RvYXN0Oi8v6K+l6YWN572u5q2j5Zyo5L2/55So77yM5peg5rOV5Yig6Zmk77yBJ1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu6K6k5Yig6ZmkXFxcIicgKyBpbnB1dCArICdcXFwi77yfJykuY29uZmlybSgoY29uZmlnLCBjb25maWdLZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuZGV0YWlsc1ZpZXdDb25maWdzW2NvbmZpZ0tleV1cXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShnZXRNeVZhcigncWRiX2NvbmZpZycpLCBKU09OLnN0cmluZ2lmeShjb25maWcpKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIoOmZpCcgKyBjb25maWdLZXkgKyAn5oiQ5YqfJ1xcbiAgICAgICAgICAgICAgICB9LCBjb25maWcsIGlucHV0KVxcbiAgICAgICAgICAgIH0pXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ/Cfk50nLFxcbiAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICB1cmw6ICQoT2JqZWN0LmtleXMoZGV0YWlsc1ZpZXdDb25maWdzKS5maWx0ZXIoY29uZmlnS2V5ID0+IGNvbmZpZ0tleSAhPT0gJ3VzZScpLCAyKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgIC8vIGlmIChpbnB1dCA9PT0gJ+m7mOiupCcpIHJldHVybiAndG9hc3Q6Ly/pu5jorqTphY3nva7ml6Dms5XnvJbovpHvvIEnXFxuICAgICAgICAgICAgbGV0IGNvbmZpZyA9IEpTT04ucGFyc2UocmVxdWVzdChnZXRNeVZhcigncWRiX2NvbmZpZycpKSlcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwiaW5wdXRfbmFtZVxcXCIsIGNvbmZpZ0tleSk7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcImlucHV0X2NvZGVcXFwiLCBjb25maWcuZGV0YWlsc1ZpZXdDb25maWdzW2NvbmZpZ0tleV0uY29uZmlnKTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwiaW5wdXRfc2V0dGluZ19jb2RlXFxcIiwgY29uZmlnLmRldGFpbHNWaWV3Q29uZmlnc1tjb25maWdLZXldLnNldHRpbmcgfHwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NldHRpbmctZWRpdG9yP3J1bGU96Z2S6LGGJnZpZXc9ZGV0YWlsVmlld01vZGVFZGl0UGFnZSdcXG4gICAgICAgIH0pXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ/Cfk6UnLFxcbiAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICB1cmw6ICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlj6Pku6RcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgaWYgKCFpbnB1dC5pbmNsdWRlcyhcXFwi5b2x54mH6K+m5oOF6aG16Z2i6YWN572uXFxcIikpIHJldHVybiBcXFwidG9hc3Q6Ly/or6Xlj6Pku6TkuI3mmK/lvbHniYfor6bmg4XpobXpnaLphY3nva5cXFwiO1xcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvdXRpbHMnKSkucnVsZSlcXG4gICAgICAgICAgICBsZXQgaW1wb3J0Q29uZmlncyA9IENvbmZpZ1Rvb2wuaW1wb3J0KGlucHV0KTtcXG4gICAgICAgICAgICBpZiAoIWltcG9ydENvbmZpZ3MpIHJldHVybiBcXFwidG9hc3Q6Ly/kvLzkuY7lh7rkuobplJnvvIzor7flsJ3or5Xlho3mrKHlr7zlhaXvvZ5cXFwiO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJpbnB1dF9uYW1lXFxcIiwgaW1wb3J0Q29uZmlncy5uYW1lKTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwiaW5wdXRfY29kZVxcXCIsIGltcG9ydENvbmZpZ3MuZGF0YS5jb25maWcpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJpbnB1dF9zZXR0aW5nX2NvZGVcXFwiLCBpbXBvcnRDb25maWdzLmRhdGEuc2V0dGluZyB8fCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2V0dGluZy1lZGl0b3I/cnVsZT3pnZLosYYmdmlldz1kZXRhaWxWaWV3TW9kZUVkaXRQYWdlJztcXG4gICAgICAgIH0pXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ/Cfk6QnLFxcbiAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICB1cmw6ICQoT2JqZWN0LmtleXMoZGV0YWlsc1ZpZXdDb25maWdzKS5maWx0ZXIoY29uZmlnS2V5ID0+IGNvbmZpZ0tleSAhPT0gJ3VzZScpLCAyKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgIC8vIGlmIChpbnB1dCA9PT0gJ+m7mOiupCcpIHJldHVybiAndG9hc3Q6Ly/pu5jorqTphY3nva7ml6Dms5XnvJbovpHvvIEnXFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS91dGlscycpKS5ydWxlKVxcbiAgICAgICAgICAgIGxldCBjb25maWcgPSBnZXRDb25maWcoKTtcXG4gICAgICAgICAgICBsZXQgc2VsZWN0Q29uZmlnID0ge1xcbiAgICAgICAgICAgICAgICBuYW1lOiBpbnB1dCxcXG4gICAgICAgICAgICAgICAgZGF0YTogY29uZmlnLmRldGFpbHNWaWV3Q29uZmlnc1tpbnB1dF1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICQoQ29uZmlnVG9vbC5lbmNUeXBlTGlzdCwgMikuc2VsZWN0KChzZWxlY3RDb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS91dGlscycpKS5ydWxlKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29uZmlnVG9vbC50b0NsaXBib2FyZChDb25maWdUb29sLmV4cG9ydChzZWxlY3RDb25maWcubmFtZSwgc2VsZWN0Q29uZmlnLCBcXFwi5b2x54mH6K+m5oOF6aG16Z2i6YWN572uXFxcIiwgaW5wdXQpKVxcbiAgICAgICAgICAgIH0sIHNlbGVjdENvbmZpZylcXG4gICAgICAgIH0pXFxuICAgIH0pXFxufVxcbi8vIOivpuaDhemhteiuvue9ruaooeWdl1xcbmZ1bmN0aW9uIGRldGFpbFZpZXdTZXR0aW5nTW9kdWxlKGQpIHtcXG4gICAgbGV0IGRldGFpbHNWaWV3Q29uZmlncyA9IGdldENvbmZpZygnZGV0YWlsc1ZpZXdDb25maWdzJyk7XFxuICAgIGRldGFpbFZpZXdNb2RlTW9kdWxlKGQsIGRldGFpbHNWaWV3Q29uZmlncylcXG4gICAgbGV0IGRldGFpbFZpZXdTZXR0aW5nID0gZGV0YWlsc1ZpZXdDb25maWdzW2RldGFpbHNWaWV3Q29uZmlncy51c2VdLnNldHRpbmdcXG4gICAgbGV0IHJlc3VsdCA9IFxcXCJ0b2FzdDovL+ivpeivpuaDhemhteaXoOiuvue9rumhtemdolxcXCI7XFxuICAgIGlmIChkZXRhaWxWaWV3U2V0dGluZykge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBpZiAoZGV0YWlsVmlld1NldHRpbmcuaW5kZXhPZigncmV0dXJuJykgPT0gLTEpIHRocm93IG5ldyBFcnJvcign5b+F6aG7IHJldHVybiBAcnVsZT1qczog5oiWICQoKS5ydWxlJyk7XFxuICAgICAgICAgICAgaWYgKGRldGFpbFZpZXdTZXR0aW5nLnN0YXJ0c1dpdGgoXFxcIihcXFwiKSkge1xcbiAgICAgICAgICAgICAgICBldmFsKCdyZXN1bHQgPSAnICsgZGV0YWlsVmlld1NldHRpbmcpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZXZhbCgncmVzdWx0ID0gJyArICcoKCkgPT4geycgKyBkZXRhaWxWaWV3U2V0dGluZyArICd9KSgpJylcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgbG9nKGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgcmVzdWx0ID0gXFxcInRvYXN0Oi8v6ZSZ6K+v55qE6K6+572u6aG16Z2i5Luj56CBLOivt+WJjeW+gCDml6Xlv5cg5p+l55yL6ZSZ6K+v5Y6f5ZugXFxcIlxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+Kame+4jycsXFxuICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIHVybDogcmVzdWx0XFxuICAgIH0pXFxufVxcblxcbi8vIOmmlumhteiuvue9ruaooeWdl1xcbmZ1bmN0aW9uIGhvbWVQYWdlU2V0dGluZ01vZHVsZShkKSB7XFxuICAgIGxldCBob21lUGFnZUNvbmZpZ3MgPSBnZXRDb25maWcoJ2hvbWVQYWdlQ29uZmlncycpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfoh6rlrprkuYnpppbpobUnLmJvbGQoKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbiAgICB9KVxcbiAgICBmb3IgKGxldCBjb25maWdLZXkgb2YgT2JqZWN0LmtleXMoaG9tZVBhZ2VDb25maWdzKSkge1xcbiAgICAgICAgaWYgKGNvbmZpZ0tleSA9PT0gJ3VzZScpIGNvbnRpbnVlO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogY29uZmlnS2V5ID09PSBob21lUGFnZUNvbmZpZ3MudXNlID8gXFxcIuKAnOKAnFxcXCIgKyBjb25maWdLZXkgKyBcXFwi4oCd4oCdXFxcIiA6IGNvbmZpZ0tleSxcXG4gICAgICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKGNvbmZpZ0tleSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBjb25maWcgPSBKU09OLnBhcnNlKHJlcXVlc3QoZ2V0TXlWYXIoJ3FkYl9jb25maWcnKSkpXFxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuaG9tZVBhZ2VDb25maWdzLnVzZSA9PT0gY29uZmlnS2V5KSB7XFxuICAgICAgICAgICAgICAgICAgICAvL3B1dE15VmFyKFxcXCJpbnB1dF9jb25maWdfdHlwZVxcXCIsICfpppbpobXphY3nva4nKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImlucHV0X25hbWVcXFwiLCBjb25maWdLZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImlucHV0X2NvZGVcXFwiLCBjb25maWcuaG9tZVBhZ2VDb25maWdzW2NvbmZpZ0tleV0uY29uZmlnKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NldHRpbmctZWRpdG9yP3J1bGU96Z2S6LGGJnZpZXc9aG9tZVBhZ2VNb2RlRWRpdFBhZ2UnO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGNvbmZpZy5ob21lUGFnZUNvbmZpZ3MudXNlID0gY29uZmlnS2V5XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShnZXRNeVZhcigncWRiX2NvbmZpZycpLCBKU09OLnN0cmluZ2lmeShjb25maWcpKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLmiJDlip8nXFxuICAgICAgICAgICAgfSwgY29uZmlnS2V5KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4p6VJyxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3NldHRpbmctZWRpdG9yP3ZpZXc9aG9tZVBhZ2VNb2RlRWRpdFBhZ2UnXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfinpYnLFxcbiAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICB1cmw6ICQoT2JqZWN0LmtleXMoaG9tZVBhZ2VDb25maWdzKS5maWx0ZXIoY29uZmlnS2V5ID0+IGNvbmZpZ0tleSAhPT0gJ3VzZScgJiYgY29uZmlnS2V5ICE9PSAn6buY6K6kJyksIDIpXFxuICAgICAgICAgICAgLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ+m7mOiupCcpIHJldHVybiAndG9hc3Q6Ly/pu5jorqTphY3nva7ml6Dms5XliKDpmaTvvIEnXFxuICAgICAgICAgICAgICAgIGxldCBjb25maWcgPSBKU09OLnBhcnNlKHJlcXVlc3QoZ2V0TXlWYXIoJ3FkYl9jb25maWcnKSkpXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gY29uZmlnLmhvbWVQYWdlQ29uZmlncy51c2UpIHJldHVybiAndG9hc3Q6Ly/or6XphY3nva7mraPlnKjkvb/nlKjvvIzml6Dms5XliKDpmaTvvIEnXFxuICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7orqTliKDpmaRcXFwiJyArIGlucHV0ICsgJ1xcXCLvvJ8nKS5jb25maXJtKChjb25maWcsIGNvbmZpZ0tleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5ob21lUGFnZUNvbmZpZ3NbY29uZmlnS2V5XVxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGdldE15VmFyKCdxZGJfY29uZmlnJyksIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Yig6ZmkJyArIGNvbmZpZ0tleSArICfmiJDlip8nXFxuICAgICAgICAgICAgICAgIH0sIGNvbmZpZywgaW5wdXQpXFxuICAgICAgICAgICAgfSlcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn8J+TnScsXFxuICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIHVybDogJChPYmplY3Qua2V5cyhob21lUGFnZUNvbmZpZ3MpLmZpbHRlcihjb25maWdLZXkgPT4gY29uZmlnS2V5ICE9PSAndXNlJyksIDIpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgLy8gaWYgKGlucHV0ID09PSAn6buY6K6kJykgcmV0dXJuICd0b2FzdDovL+m7mOiupOmFjee9ruaXoOazlee8lui+ke+8gSdcXG4gICAgICAgICAgICBsZXQgY29uZmlnID0gSlNPTi5wYXJzZShyZXF1ZXN0KGdldE15VmFyKCdxZGJfY29uZmlnJykpKTtcXG4gICAgICAgICAgICBsZXQgY29uZmlnS2V5ID0gaW5wdXQ7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcImlucHV0X25hbWVcXFwiLCBjb25maWdLZXkpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJpbnB1dF9jb2RlXFxcIiwgY29uZmlnLmhvbWVQYWdlQ29uZmlnc1tjb25maWdLZXldLmNvbmZpZyk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2V0dGluZy1lZGl0b3I/cnVsZT3pnZLosYYmdmlldz1ob21lUGFnZU1vZGVFZGl0UGFnZSc7XFxuICAgICAgICB9KVxcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfwn5OlJyxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgdXJsOiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl5Y+j5LukXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgIGlmICghaW5wdXQuaW5jbHVkZXMoXFxcIummlumhtemFjee9rlxcXCIpKSByZXR1cm4gXFxcInRvYXN0Oi8v6K+l5Y+j5Luk5LiN5piv6aaW6aG16YWN572uXFxcIjtcXG4gICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3V0aWxzJykpLnJ1bGUpXFxuICAgICAgICAgICAgbGV0IGltcG9ydENvbmZpZ3MgPSBDb25maWdUb29sLmltcG9ydChpbnB1dCk7XFxuICAgICAgICAgICAgaWYgKCFpbXBvcnRDb25maWdzKSByZXR1cm4gXFxcInRvYXN0Oi8v5Ly85LmO5Ye65LqG6ZSZ77yM6K+35bCd6K+V5YaN5qyh5a+85YWl772eXFxcIjtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwiaW5wdXRfbmFtZVxcXCIsIGltcG9ydENvbmZpZ3MubmFtZSk7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcImlucHV0X2NvZGVcXFwiLCBpbXBvcnRDb25maWdzLmRhdGEuY29uZmlnKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9zZXR0aW5nLWVkaXRvcj9ydWxlPemdkuixhiZ2aWV3PWhvbWVQYWdlTW9kZUVkaXRQYWdlJztcXG4gICAgICAgIH0pXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ/Cfk6QnLFxcbiAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICB1cmw6ICQoT2JqZWN0LmtleXMoaG9tZVBhZ2VDb25maWdzKS5maWx0ZXIoY29uZmlnS2V5ID0+IGNvbmZpZ0tleSAhPT0gJ3VzZScpLCAyKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgIC8vIGlmIChpbnB1dCA9PT0gJ+m7mOiupCcpIHJldHVybiAndG9hc3Q6Ly/pu5jorqTphY3nva7ml6Dms5XnvJbovpHvvIEnXFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS91dGlscycpKS5ydWxlKVxcbiAgICAgICAgICAgIGxldCBjb25maWcgPSBnZXRDb25maWcoKTtcXG4gICAgICAgICAgICBsZXQgc2VsZWN0Q29uZmlnID0ge1xcbiAgICAgICAgICAgICAgICBuYW1lOiBpbnB1dCxcXG4gICAgICAgICAgICAgICAgZGF0YTogY29uZmlnLmhvbWVQYWdlQ29uZmlnc1tpbnB1dF1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICQoQ29uZmlnVG9vbC5lbmNUeXBlTGlzdCwgMikuc2VsZWN0KChzZWxlY3RDb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS91dGlscycpKS5ydWxlKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29uZmlnVG9vbC50b0NsaXBib2FyZChDb25maWdUb29sLmV4cG9ydChzZWxlY3RDb25maWcubmFtZSwgc2VsZWN0Q29uZmlnLCBcXFwi6aaW6aG16YWN572uXFxcIiwgaW5wdXQpKVxcbiAgICAgICAgICAgIH0sIHNlbGVjdENvbmZpZylcXG4gICAgICAgIH0pXFxuICAgIH0pXFxufVxcblxcbi8vIOino+aekOmFjee9ruaooeWdl1xcbmZ1bmN0aW9uIGFuYWx5c2lzTW9kZU1vZHVsZShkLCBhbmFseXNpc0NvbmZpZ3MpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn6Ieq5a6a5LmJ6Kej5p6Q5o+S5Lu2Jy5ib2xkKCksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXG4gICAgfSlcXG4gICAgZm9yIChsZXQgY29uZmlnS2V5IG9mIE9iamVjdC5rZXlzKGFuYWx5c2lzQ29uZmlncykpIHtcXG4gICAgICAgIGlmIChjb25maWdLZXkgPT09ICd1c2UnKSBjb250aW51ZTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGNvbmZpZ0tleSA9PT0gYW5hbHlzaXNDb25maWdzLnVzZSA/IFxcXCLigJzigJxcXFwiICsgY29uZmlnS2V5ICsgXFxcIuKAneKAnVxcXCIgOiBjb25maWdLZXksXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZShjb25maWdLZXkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gSlNPTi5wYXJzZShyZXF1ZXN0KGdldE15VmFyKCdxZGJfY29uZmlnJykpKVxcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmFuYWx5c2lzQ29uZmlncy51c2UgPT09IGNvbmZpZ0tleSkge1xcbiAgICAgICAgICAgICAgICAgICAgLy9wdXRNeVZhcihcXFwiaW5wdXRfY29uZmlnX3R5cGVcXFwiLCAn6Kej5p6Q5o+S5Lu26YWN572uJylcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJpbnB1dF9uYW1lXFxcIiwgY29uZmlnS2V5KTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJpbnB1dF9jb2RlXFxcIiwgY29uZmlnLmFuYWx5c2lzQ29uZmlnc1tjb25maWdLZXldLmNvbmZpZyk7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaW5wdXRfZXh0cmFcXFwiLCBjb25maWcuYW5hbHlzaXNDb25maWdzW2NvbmZpZ0tleV0uZXh0cmEgfHwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImlucHV0X3NldHRpbmdfY29kZVxcXCIsIGNvbmZpZy5hbmFseXNpc0NvbmZpZ3NbY29uZmlnS2V5XS5zZXR0aW5nIHx8IFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NldHRpbmctZWRpdG9yP3J1bGU96Z2S6LGGJnZpZXc9YW5hbHlzaXNNb2RlRWRpdFBhZ2UnO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGNvbmZpZy5hbmFseXNpc0NvbmZpZ3MudXNlID0gY29uZmlnS2V5XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShnZXRNeVZhcigncWRiX2NvbmZpZycpLCBKU09OLnN0cmluZ2lmeShjb25maWcpKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLmiJDlip8nXFxuICAgICAgICAgICAgfSwgY29uZmlnS2V5KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4p6VJyxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3NldHRpbmctZWRpdG9yP3J1bGU96Z2S6LGGJnZpZXc9YW5hbHlzaXNNb2RlRWRpdFBhZ2UnXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfinpYnLFxcbiAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICB1cmw6ICQoT2JqZWN0LmtleXMoYW5hbHlzaXNDb25maWdzKS5maWx0ZXIoY29uZmlnS2V5ID0+IGNvbmZpZ0tleSAhPT0gJ3VzZScgJiYgY29uZmlnS2V5ICE9PSAn5LiN6Kej5p6QJyAmJiBjb25maWdLZXkgIT09ICfmlq3mj5InKSwgMilcXG4gICAgICAgICAgICAuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSAn5LiN6Kej5p6QJyAmJiBpbnB1dCA9PT0gJ+aWreaPkicpIHJldHVybiAndG9hc3Q6Ly/pu5jorqTop6PmnpDml6Dms5XliKDpmaTvvIEnXFxuICAgICAgICAgICAgICAgIGxldCBjb25maWcgPSBKU09OLnBhcnNlKHJlcXVlc3QoZ2V0TXlWYXIoJ3FkYl9jb25maWcnKSkpXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gY29uZmlnLmFuYWx5c2lzQ29uZmlncy51c2UpIHJldHVybiAndG9hc3Q6Ly/or6Xop6PmnpDmraPlnKjkvb/nlKjvvIzml6Dms5XliKDpmaTvvIEnXFxuICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7orqTliKDpmaRcXFwiJyArIGlucHV0ICsgJ1xcXCLvvJ8nKS5jb25maXJtKChjb25maWcsIGNvbmZpZ0tleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5hbmFseXNpc0NvbmZpZ3NbY29uZmlnS2V5XVxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGdldE15VmFyKCdxZGJfY29uZmlnJyksIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Yig6ZmkJyArIGNvbmZpZ0tleSArICfmiJDlip8nXFxuICAgICAgICAgICAgICAgIH0sIGNvbmZpZywgaW5wdXQpXFxuICAgICAgICAgICAgfSlcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn8J+TnScsXFxuICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIHVybDogJChPYmplY3Qua2V5cyhhbmFseXNpc0NvbmZpZ3MpLmZpbHRlcihjb25maWdLZXkgPT4gY29uZmlnS2V5ICE9PSAndXNlJyksIDIpXFxuICAgICAgICAgICAgLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIC8vIGlmIChpbnB1dCA9PT0gJ+S4jeino+aekCcgJiYgaW5wdXQgPT09ICfmlq3mj5InKSByZXR1cm4gJ3RvYXN0Oi8v6buY6K6k6Kej5p6Q5peg5rOV57yW6L6R77yBJ1xcbiAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gSlNPTi5wYXJzZShyZXF1ZXN0KGdldE15VmFyKCdxZGJfY29uZmlnJykpKTtcXG4gICAgICAgICAgICAgICAgbGV0IGNvbmZpZ0tleSA9IGlucHV0O1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaW5wdXRfbmFtZVxcXCIsIGNvbmZpZ0tleSk7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJpbnB1dF9jb2RlXFxcIiwgY29uZmlnLmFuYWx5c2lzQ29uZmlnc1tjb25maWdLZXldLmNvbmZpZyk7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJpbnB1dF9leHRyYVxcXCIsIGNvbmZpZy5hbmFseXNpc0NvbmZpZ3NbY29uZmlnS2V5XS5leHRyYSB8fCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJpbnB1dF9zZXR0aW5nX2NvZGVcXFwiLCBjb25maWcuYW5hbHlzaXNDb25maWdzW2NvbmZpZ0tleV0uc2V0dGluZyB8fCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NldHRpbmctZWRpdG9yP3J1bGU96Z2S6LGGJnZpZXc9YW5hbHlzaXNNb2RlRWRpdFBhZ2UnO1xcbiAgICAgICAgICAgIH0pXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ/Cfk6UnLFxcbiAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICB1cmw6ICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXlj6Pku6RcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgaWYgKCFpbnB1dC5pbmNsdWRlcyhcXFwi6Kej5p6Q5o+S5Lu26YWN572uXFxcIikpIHJldHVybiBcXFwidG9hc3Q6Ly/or6Xlj6Pku6TkuI3mmK/op6PmnpDmj5Lku7bphY3nva5cXFwiO1xcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvdXRpbHMnKSkucnVsZSlcXG4gICAgICAgICAgICBsZXQgaW1wb3J0Q29uZmlncyA9IENvbmZpZ1Rvb2wuaW1wb3J0KGlucHV0KTtcXG4gICAgICAgICAgICBpZiAoIWltcG9ydENvbmZpZ3MpIHJldHVybiBcXFwidG9hc3Q6Ly/kvLzkuY7lh7rkuobplJnvvIzor7flsJ3or5Xlho3mrKHlr7zlhaXvvZ5cXFwiO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJpbnB1dF9uYW1lXFxcIiwgaW1wb3J0Q29uZmlncy5uYW1lKTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwiaW5wdXRfY29kZVxcXCIsIGltcG9ydENvbmZpZ3MuZGF0YS5jb25maWcpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJpbnB1dF9leHRyYVxcXCIsIGltcG9ydENvbmZpZ3MuZGF0YS5leHRyYSB8fCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcImlucHV0X3NldHRpbmdfY29kZVxcXCIsIGltcG9ydENvbmZpZ3MuZGF0YS5zZXR0aW5nIHx8IFxcXCJcXFwiKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9zZXR0aW5nLWVkaXRvcj9ydWxlPemdkuixhiZ2aWV3PWFuYWx5c2lzTW9kZUVkaXRQYWdlJztcXG4gICAgICAgIH0pXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ/Cfk6QnLFxcbiAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICB1cmw6ICQoT2JqZWN0LmtleXMoYW5hbHlzaXNDb25maWdzKS5maWx0ZXIoY29uZmlnS2V5ID0+IGNvbmZpZ0tleSAhPT0gJ3VzZScpLCAyKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgIC8vIGlmIChpbnB1dCA9PT0gJ+m7mOiupCcpIHJldHVybiAndG9hc3Q6Ly/pu5jorqTphY3nva7ml6Dms5XnvJbovpHvvIEnXFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS91dGlscycpKS5ydWxlKVxcbiAgICAgICAgICAgIGxldCBjb25maWcgPSBnZXRDb25maWcoKTtcXG4gICAgICAgICAgICBsZXQgc2VsZWN0Q29uZmlnID0ge1xcbiAgICAgICAgICAgICAgICBuYW1lOiBpbnB1dCxcXG4gICAgICAgICAgICAgICAgZGF0YTogY29uZmlnLmFuYWx5c2lzQ29uZmlnc1tpbnB1dF1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICQoQ29uZmlnVG9vbC5lbmNUeXBlTGlzdCwgMikuc2VsZWN0KChzZWxlY3RDb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS91dGlscycpKS5ydWxlKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29uZmlnVG9vbC50b0NsaXBib2FyZChDb25maWdUb29sLmV4cG9ydChzZWxlY3RDb25maWcubmFtZSwgc2VsZWN0Q29uZmlnLCBcXFwi6Kej5p6Q5o+S5Lu26YWN572uXFxcIiwgaW5wdXQpKVxcbiAgICAgICAgICAgIH0sIHNlbGVjdENvbmZpZylcXG4gICAgICAgIH0pXFxuICAgIH0pXFxufVxcblxcbi8vIOino+aekOiuvue9ruaooeWdl1xcbmZ1bmN0aW9uIGFuYWx5c2lzU2V0dGluZ01vZHVsZShkKSB7XFxuICAgIGxldCBhbmFseXNpc0NvbmZpZ3MgPSBnZXRDb25maWcoJ2FuYWx5c2lzQ29uZmlncycpO1xcbiAgICBhbmFseXNpc01vZGVNb2R1bGUoZCwgYW5hbHlzaXNDb25maWdzKTtcXG4gICAgLyoqXFxuICAgICAqIOi/meS4i+mdoueahOmDveaYr+aLv+iuvue9rumhtemdoueahOmFjee9ruWHuuadpSBldmFsIOaJp+ihjO+8jOacgOe7iOiOt+W+l+aPkuS7tuiuvue9rumhtemdoueahCB1cmzvvIzov5nkuKogdXJsIOWPr+S7peaYr+e9kemhteS5n+WPr+S7peaYr+S6jOe6p+eVjOmdolxcbiAgICAgKi9cXG4gICAgbGV0IGFuYWx5c2lzU2V0dGluZyA9IGFuYWx5c2lzQ29uZmlnc1thbmFseXNpc0NvbmZpZ3MudXNlXS5zZXR0aW5nO1xcbiAgICBsZXQgcmVzdWx0ID0gXFxcInRvYXN0Oi8v6K+l5o+S5Lu25peg6K6+572u6aG16Z2iXFxcIjtcXG4gICAgaWYgKGFuYWx5c2lzU2V0dGluZykge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBpZiAoYW5hbHlzaXNTZXR0aW5nLmluZGV4T2YoJ3JldHVybicpID09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ+W/hemhuyByZXR1cm4gQHJ1bGU9anM6IOaIliAkKCkucnVsZScpO1xcbiAgICAgICAgICAgIGlmIChhbmFseXNpc1NldHRpbmcuc3RhcnRzV2l0aChcXFwiKFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ3Jlc3VsdCA9ICcgKyBhbmFseXNpc1NldHRpbmcpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ3Jlc3VsdCA9ICcgKyAnKCgpID0+IHsnICsgYW5hbHlzaXNTZXR0aW5nICsgJ30pKCknKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgbG9nKGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgcmVzdWx0ID0gXFxcInRvYXN0Oi8v6ZSZ6K+v55qE6K6+572u6aG16Z2i5Luj56CBLOivt+WJjeW+gCDml6Xlv5cg5p+l55yL6ZSZ6K+v5Y6f5ZugXFxcIlxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+Kame+4jycsXFxuICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIHVybDogcmVzdWx0XFxuICAgIH0pXFxufVxcblxcbi8v6Ieq5a6a5LmJ5b+r6YCf5pCc57Si5qih5Z2XXFxuZnVuY3Rpb24gcXVpY2tTZWFyY2hESVlNb2R1bGUoZCwgY29uZmlnKSB7XFxuICAgIGxldCBxdWlja1NlYXJjaENvbmZpZ3MgPSBnZXRDb25maWcoJ3F1aWNrU2VhcmNoQ29uZmlncycsIGNvbmZpZyk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+iHquWumuS5ieW/q+mAn+aQnOe0oicuYm9sZCgpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxuICAgIH0pXFxuICAgIGZvciAobGV0IGNvbmZpZ0tleSBvZiBxdWlja1NlYXJjaENvbmZpZ3Mub3JkZXIpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGNvbmZpZ0tleSxcXG4gICAgICAgICAgICB1cmw6ICQoJ+KeleaYr+a3u+WKoFxcXFxu4p6W5piv5Yig6ZmkXFxcXG7wn5Od5piv5L+u5pS5XFxcXG7wn5SB5piv5o6S5bqPXFxcXG7impnvuI/mmK/orr7nva7moLflvI8nKS5jb25maXJtKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4i+asoeS4jeimgeWGjeeCueaIkeS6hidcXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4p6V77iPJyxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgdXJsOiAkKCfmmL7npLrlkI1AQOWwj+eoi+W6j+WQjUBA5Zu+54mH6ZO+5o6lJywgJ+agueaNruaPkOekuui+k+WFpeWwseWlveS6hlxcXFxu5bCP56iL5bqP5ZCN5Li656m65YiZ5Li65rW36ZiU5pCc57SiJykuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBjb25maWcgPSBKU09OLnBhcnNlKGZldGNoKGdldE15VmFyKCdxZGJfY29uZmlnJykpKTtcXG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0LnNwbGl0KCdAQCcpO1xcbiAgICAgICAgICAgIGlmKGlucHV0Lmxlbmd0aCAhPSAzIHx8IGlucHV0WzBdID09PSBcXFwiXFxcIikgcmV0dXJuIFxcXCJ0b2FzdDovL+agvOW8j+S4jeWvue+8jOaMieagvOW8j+i+k+WFpSFcXFwiO1xcbiAgICAgICAgICAgIGlmIChjb25maWcucXVpY2tTZWFyY2hDb25maWdzLm9yZGVyLmluZGV4T2YoaW5wdXRbMF0pID09IC0xKSBjb25maWcucXVpY2tTZWFyY2hDb25maWdzLm9yZGVyLnB1c2goaW5wdXRbMF0pO1xcbiAgICAgICAgICAgIGNvbmZpZy5xdWlja1NlYXJjaENvbmZpZ3NbaW5wdXRbMF1dID0ge1xcbiAgICAgICAgICAgICAgICBuYW1lOiBpbnB1dFsxXSxcXG4gICAgICAgICAgICAgICAgcGljOiBpbnB1dFsyXVxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgd3JpdGVGaWxlKGdldE15VmFyKCdxZGJfY29uZmlnJyksIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5re75Yqg5oiQ5YqfJztcXG4gICAgICAgIH0pXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfinpYnLFxcbiAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICB1cmw6ICQocXVpY2tTZWFyY2hDb25maWdzLm9yZGVyLCAyKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBjb25maWcgPSBKU09OLnBhcnNlKHJlcXVlc3QoZ2V0TXlWYXIoJ3FkYl9jb25maWcnKSkpXFxuICAgICAgICAgICAgcmV0dXJuICQoJ+ehruiupOWIoOmZpFxcXCInICsgaW5wdXQgKyAnXFxcIu+8nycpLmNvbmZpcm0oKGNvbmZpZywgY29uZmlnS2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IGNvbmZpZy5xdWlja1NlYXJjaENvbmZpZ3Mub3JkZXIuaW5kZXhPZihjb25maWdLZXkpO1xcbiAgICAgICAgICAgICAgICBjb25maWcucXVpY2tTZWFyY2hDb25maWdzLm9yZGVyLnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb25maWcucXVpY2tTZWFyY2hDb25maWdzW2NvbmZpZ0tleV1cXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGdldE15VmFyKCdxZGJfY29uZmlnJyksIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIoOmZpCcgKyBjb25maWdLZXkgKyAn5oiQ5YqfJ1xcbiAgICAgICAgICAgIH0sIGNvbmZpZywgaW5wdXQpXFxuICAgICAgICB9KVxcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfwn5OdJyxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgdXJsOiAkKHF1aWNrU2VhcmNoQ29uZmlncy5vcmRlciwgMikuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgICAgICBsZXQgY29uZmlnID0gSlNPTi5wYXJzZShyZXF1ZXN0KGdldE15VmFyKCdxZGJfY29uZmlnJykpKTtcXG4gICAgICAgICAgICBsZXQgcXVpY2tTZWFyY2hDb25maWdzID0gY29uZmlnLnF1aWNrU2VhcmNoQ29uZmlncztcXG4gICAgICAgICAgICBsZXQgZHRleHQgPSBpbnB1dCArICdAQCcgKyBxdWlja1NlYXJjaENvbmZpZ3NbaW5wdXRdLm5hbWUgKyAnQEAnICsgcXVpY2tTZWFyY2hDb25maWdzW2lucHV0XS5waWM7XFxuICAgICAgICAgICAgcmV0dXJuICQoZHRleHQsICfor7fkv67mlLknKS5pbnB1dCgoY29uZmlnLCByYXcpID0+IHtcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5zcGxpdCgnQEAnKTtcXG4gICAgICAgICAgICAgICAgaWYgKHJhdyAhPSBpbnB1dFswXSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gY29uZmlnLnF1aWNrU2VhcmNoQ29uZmlncy5vcmRlci5pbmRleE9mKHJhdyk7XFxuICAgICAgICAgICAgICAgICAgICBjb25maWcucXVpY2tTZWFyY2hDb25maWdzLm9yZGVyW2luZGV4XSA9IGlucHV0WzBdO1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5xdWlja1NlYXJjaENvbmZpZ3NbcmF3XTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnF1aWNrU2VhcmNoQ29uZmlncy5vcmRlci5pbmRleE9mKGlucHV0WzBdKSA9PSAtMSkgY29uZmlnLnF1aWNrU2VhcmNoQ29uZmlncy5vcmRlci5wdXNoKGlucHV0WzBdKTtcXG4gICAgICAgICAgICAgICAgY29uZmlnLnF1aWNrU2VhcmNoQ29uZmlnc1tpbnB1dFswXV0gPSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpbnB1dFsxXSxcXG4gICAgICAgICAgICAgICAgICAgIHBpYzogaW5wdXRbMl1cXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGdldE15VmFyKCdxZGJfY29uZmlnJyksIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kv67mlLnmiJDlip8nO1xcbiAgICAgICAgICAgIH0sIGNvbmZpZywgaW5wdXQpXFxuICAgICAgICB9KVxcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfwn5SBJyxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5I25vSGlzdG9yeSMnKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICBhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdqc29uJyk7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ29wJyk7XFxuICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgaWYgKGdldE15VmFyKCdqc29uJykgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IEpTT04ucGFyc2UocmVxdWVzdChnZXRNeVZhcigncWRiX2NvbmZpZycpKSk7XFxuICAgICAgICAgICAgICAgIGxldCBxdWlja1NlYXJjaENvbmZpZ3MgPSBjb25maWcucXVpY2tTZWFyY2hDb25maWdzO1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignanNvbicsIEpTT04uc3RyaW5naWZ5KHF1aWNrU2VhcmNoQ29uZmlncykpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBsZXQgb2xkID0gSlNPTi5wYXJzZShnZXRNeVZhcignanNvbicpKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5YiG5Yir54K55Ye75Lik6aG55Lul5Lqk5o2i6aG65bqPXFxcXG7igJjigJjmjpLluo/lrozmr5XlkI7ngrnmiJHkv53lrZjmjpLluo8s5ZCm5YiZ5o6S5bqP5LiN55Sf5pWI4oCZ4oCZJyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25maWcgPSBKU09OLnBhcnNlKGZldGNoKGdldE15VmFyKCdxZGJfY29uZmlnJykpKTtcXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5xdWlja1NlYXJjaENvbmZpZ3MgPSBKU09OLnBhcnNlKGdldE15VmFyKCdqc29uJykpO1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGdldE15VmFyKCdxZGJfY29uZmlnJyksIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpO1xcbiAgICAgICAgICAgICAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kv67mlLnmiJDlip8nXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBvbGQub3JkZXIuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ29wJykgPT0gdmFsdWUgPyB2YWx1ZSArICfigJjigJgo5b2T5YmN6YCJ5LitKeKAmeKAmScgOiB2YWx1ZSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChrZXksIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9wID0gZ2V0TXlWYXIoJ29wJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wID09ICcnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdvcCcsIGtleSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wID09IGtleSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdvcCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9sZCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ2pzb24nKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdhID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogb2xkLm1vZGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogb2xkLm9yZGVyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcGluZGV4ID0gbmV3YS5vcmRlci5pbmRleE9mKG9wKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKG9waW5kZXggLSBpbmRleCkgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3YS5vcmRlcltvcGluZGV4XSA9IGtleTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2Eub3JkZXJbaW5kZXhdID0gb3A7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BpbmRleCA+IGluZGV4KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdhLm9yZGVyLnNwbGljZShvcGluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2Eub3JkZXIuc3BsaWNlKGluZGV4LCAwLCBvcCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdhLm9yZGVyLnNwbGljZShvcGluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2Eub3JkZXIuc3BsaWNlKGluZGV4IC0gMSwgMCwgb3ApO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2Eub3JkZXIuZm9yRWFjaCh2YWx1ZSA9PiBuZXdhW3ZhbHVlXSA9IG9sZFt2YWx1ZV0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdqc29uJywgSlNPTi5zdHJpbmdpZnkobmV3YSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdvcCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSwgdmFsdWUsIGluZGV4KVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgfSlcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4pqZ77iPJyxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgdXJsOiAkKHF1aWNrU2VhcmNoQ29uZmlnc1snbW9kZSddIHx8IFxcXCJcXFwiLCAn6K+35q2j56Gu6L6T5YWl57uE5Lu25qC35byPXFxcXG7lu7rorq7lgLw6ZmxleF9idXR0b24gc2Nyb2xsX2J1dHRvbiBpY29uX3JvdW5kX3NtYWxsXzQgaWNvbl9zbWFsbF80JykuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBjb25maWcgPSBKU09OLnBhcnNlKHJlcXVlc3QoZ2V0TXlWYXIoJ3FkYl9jb25maWcnKSkpO1xcbiAgICAgICAgICAgIGNvbmZpZy5xdWlja1NlYXJjaENvbmZpZ3MubW9kZSA9IGlucHV0O1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShnZXRNeVZhcigncWRiX2NvbmZpZycpLCBKU09OLnN0cmluZ2lmeShjb25maWcpKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+agt+W8j+S/ruaUueaIkOWKnydcXG4gICAgICAgIH0pXFxuICAgIH0pXFxufVxcblxcbi8v6K6+572u6aG16Z2iXFxuZnVuY3Rpb24gc2V0dGluZ1BhZ2UoKSB7XFxuICAgIGxldCBjb25mID0gSlNPTi5wYXJzZShmZXRjaChnZXRNeVZhcigncWRiX2NvbmZpZycpKSk7XFxuICAgIGxldCBkID0gW107XFxuXFxuICAgIGxldCBzdGFyQ29sb3IgPSBjb25mLnN0YXJDb2xvciB8fCAnI2ZmYWMyZCc7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAn6Ieq5a6a5LmJ5pif5pif6aKc6ImyJy5ib2xkKCksXFxuICAgICAgICBkZXNjOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9JyArIHN0YXJDb2xvciArICc+JyArICfimIXimIXimIXimIXimIU8L2ZvbnQ+JyxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgICAgIHVybDogJChzdGFyQ29sb3IsICfliKvlv5jkuoYjJykuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBjb25maWcgPSBKU09OLnBhcnNlKGZldGNoKGdldE15VmFyKCdxZGJfY29uZmlnJykpKTtcXG4gICAgICAgICAgICBjb25maWcuc3RhckNvbG9yID0gaW5wdXQ7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKGdldE15VmFyKCdxZGJfY29uZmlnJyksIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+iuvue9ruabtOaUueW3suS/neWtmFxcXCI7XFxuICAgICAgICB9KVxcbiAgICB9KVxcbiAgICBsZXQgY2hvb3NlQ29sb3IgPSBjb25mLmNob29zZUNvbG9yIHx8ICcjRkE3Mjk4JztcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArICfoh6rlrprkuYnpgInkuK3moIfnrb7popzoibInLmJvbGQoKSxcXG4gICAgICAgIGRlc2M6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj0nICsgY2hvb3NlQ29sb3IgKyAnPicgKyAn5oiR5piv6aKE6KeI5pWI5p6cPC9mb250PicsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxuICAgICAgICB1cmw6ICQoY2hvb3NlQ29sb3IsICfliKvlv5jkuoYjJykuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBjb25maWcgPSBKU09OLnBhcnNlKGZldGNoKGdldE15VmFyKCdxZGJfY29uZmlnJykpKTtcXG4gICAgICAgICAgICBjb25maWcuY2hvb3NlQ29sb3IgPSBpbnB1dDtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoZ2V0TXlWYXIoJ3FkYl9jb25maWcnKSwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K6+572u5pu05pS55bey5L+d5a2YXFxcIjtcXG4gICAgICAgIH0pXFxuICAgIH0pXFxuXFxuICAgIGhvbWVQYWdlU2V0dGluZ01vZHVsZShkKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgfSlcXG5cXG4gICAgcXVpY2tTZWFyY2hESVlNb2R1bGUoZCwgY29uZik7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgIH0pXFxuXFxuICAgIGRldGFpbFZpZXdTZXR0aW5nTW9kdWxlKGQpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICB9KVxcblxcbiAgICBpZiAodHJ1ZS8qZ2V0SXRlbSgncGFzc3dvcmQnKSA9PSAndHJ1ZScqLykge1xcbiAgICAgICAgYW5hbHlzaXNTZXR0aW5nTW9kdWxlKGQpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICB9KVxcbiAgICB9XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAn5oGi5aSN6buY6K6k6K6+572uJy5ib2xkKCksXFxuICAgICAgICBkZXNjOiAn6YeN55SfJyxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgICAgIHVybDogJChbJ+mHjee9ruaYn+aYn+minOiJsicsICfph43nva7pgInkuK3moIfnrb7popzoibInLCAn6YeN572u5b+r6YCf5pCc57SiJywgJ+mHjee9rummlumhteS4uum7mOiupCcsICfph43nva7or6bmg4XpobUnICwgJ+a4hemZpOWFqOmDqOiuvue9riddLCAxKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiAkKFxcXCLnoa7lrpropoFcXFwiICsgaW5wdXQgKyBcXFwi77yfXFxcIikuY29uZmlybSgoc2VsKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gJyc7XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAoc2VsKSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfph43nva7mmJ/mmJ/popzoibInOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSAnc3RhckNvbG9yJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+mHjee9rumAieS4reagh+etvuminOiJsic6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9ICdjaG9vc2VDb2xvcic7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfph43nva7lv6vpgJ/mkJzntKInOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSAncXVpY2tTZWFyY2hDb25maWdzJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+mHjee9rummlumhteS4uum7mOiupCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9ICdob21lUGFnZUNvbmZpZ3MnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn6YeN572u6K+m5oOF6aG1JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gJ2RldGFpbFZpZXdDb25maWdzJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+a4hemZpOWFqOmDqOiuvue9ric6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9ICdhbGwnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2Uvc2V0dGluZ1BhZ2UnKSkucnVsZSk7XFxuICAgICAgICAgICAgICAgIGxldCBkZWZhdWx0Q29uZmlncyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RlZmF1bHRDb25maWdzXFxcIik7XFxuICAgICAgICAgICAgICAgIGlmIChpdGVtID09ICdhbGwnKSB7XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoZ2V0TXlWYXIoJ3FkYl9jb25maWcnKSwgSlNPTi5zdHJpbmdpZnkoZGVmYXVsdENvbmZpZ3MpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5beyXFxcIiArIHNlbDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKGl0ZW0gPT0gXFxcImhvbWVQYWdlQ29uZmlnc1xcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IEpTT04ucGFyc2UoZmV0Y2goZ2V0TXlWYXIoJ3FkYl9jb25maWcnKSkpO1xcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnW2l0ZW1dW1xcXCLpu5jorqRcXFwiXSA9IGRlZmF1bHRDb25maWdzW2l0ZW1dW1xcXCLpu5jorqRcXFwiXTtcXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1tpdGVtXS51c2UgPSBcXFwi6buY6K6kXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShnZXRNeVZhcigncWRiX2NvbmZpZycpLCBKU09OLnN0cmluZ2lmeShjb25maWcpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5beyXFxcIiArIHNlbDtcXG4gICAgICAgICAgICAgICAgfWVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IEpTT04ucGFyc2UoZmV0Y2goZ2V0TXlWYXIoJ3FkYl9jb25maWcnKSkpO1xcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnW2l0ZW1dID0gZGVmYXVsdENvbmZpZ3NbaXRlbV07XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoZ2V0TXlWYXIoJ3FkYl9jb25maWcnKSwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3slxcXCIgKyBzZWw7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCBpbnB1dClcXG4gICAgICAgIH0pXFxuICAgIH0pXFxuICAgIHNldFJlc3VsdChkKTtcXG59XFxuXFxubGV0IHZpZXcgPSBnZXRQYXJhbShcXFwidmlld1xcXCIsXFxcIlxcXCIpO1xcbmlmKHZpZXc9PVxcXCJcXFwiKXtcXG4gICAgc2V0UGFnZVRpdGxlKFxcXCLorr7nva5cXFwiKVxcbiAgICBzZXR0aW5nUGFnZSgpO1xcbn1lbHNlIGlmKHZpZXc9PVxcXCJhbmFseXNpc1NldHRpbmdNb2R1bGVcXFwiKXtcXG4gICAgbGV0IGQgPSBbXTtcXG4gICAgc2V0UGFnZVRpdGxlKFxcXCLop6PmnpDorr7nva5cXFwiKVxcbiAgICBhbmFseXNpc1NldHRpbmdNb2R1bGUoZCk7XFxuICAgIHNldFJlc3VsdChkKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpu5jorqTphY3nva5cIixcInBhdGhcIjpcImRlZmF1bHRDb25maWdzXCIsXCJydWxlXCI6XCJqczpcXHJcXG5sZXQgZGVmYXVsdENvbmZpZ3MgPSB7XFxyXFxuICAgIHN0YXJDb2xvcjogXFxcIiNmZmFjMmRcXFwiLFxcclxcbiAgICBjaG9vc2VDb2xvcjogXFxcIiNGQTcyOThcXFwiLFxcclxcbiAgICBxdWlja1NlYXJjaENvbmZpZ3M6IHtcXHJcXG4gICAgICAgIG1vZGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXHJcXG4gICAgICAgIG9yZGVyOiBbXFxcIua1t+mYlOaQnOe0olxcXCJdLFxcclxcbiAgICAgICAgXFxcIua1t+mYlOaQnOe0olxcXCI6IHtcXHJcXG4gICAgICAgICAgICBuYW1lOiBcXFwiXFxcIixcXHJcXG4gICAgICAgICAgICBwaWM6IFxcXCJcXFwiXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH0sXFxyXFxuICAgIGRldGFpbHNWaWV3Q29uZmlnczoge1xcclxcbiAgICAgICAgdXNlOiBcXFwi6buY6K6kXFxcIixcXHJcXG4gICAgICAgIFxcXCLpu5jorqRcXFwiOiB7XFxyXFxuICAgICAgICAgICAgY29uZmlnOiBcXFwiZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9tYWluJykpLnJ1bGUpO2RldGFpbHNWaWV3KHR5cGUsIGlkKTtcXFwiXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH0sXFxyXFxuICAgIGhvbWVQYWdlQ29uZmlnczp7XFxyXFxuICAgICAgICB1c2U6IFxcXCLpu5jorqRcXFwiLFxcclxcbiAgICAgICAgXFxcIum7mOiupFxcXCI6IHtcXHJcXG4gICAgICAgICAgICBjb25maWc6IGBsZXQgZCA9IFtdO1xcclxcbmQucHVzaCh7XFxyXFxuICAgIHRpdGxlOiAnJyxcXHJcXG4gICAgaW1nOiAnaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV80MTg0Njc1Ni9oaWtlci8tL3Jhdy9tYXN0ZXIvaW1nL+ixhueToy5wbmcnLFxcclxcbiAgICBkZXNjOiAnMCcsXFxyXFxuICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMScsXFxyXFxuICAgIHVybDogJ2hpa2VyOi8vcGFnZS9zZXR0aW5nUGFnZSdcXHJcXG59KVxcclxcblxcclxcbmxldCBzID0gW1xcXCLmjqjojZBcXFwiLCBcXFwi54Ot6ZeoXFxcIiwgXFxcIuWIhuexu1xcXCIsIFxcXCLniYfljZVcXFwiLCBcXFwi5qac5Y2VXFxcIiwgXFxcIuWwhuS4iuaYoFxcXCJdO1xcclxcbmxldCBpbWcgPSBcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV80MTg0Njc1Ni9oaWtlci8tL3Jhdy9tYXN0ZXIvaW1nL1xcXCI7XFxyXFxuZm9yIChsZXQgaSBpbiBzKSB7XFxyXFxuICAgIGQucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogc1tpXSxcXHJcXG4gICAgICAgIGltZzogaW1nICsgc1tpXSArICcuanBnJyxcXHJcXG4gICAgICAgIGNvbF90eXBlOiAnaWNvbl8yJyxcXHJcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiICsgJyRwYWdle2Z5cGFnZX0vIy8nICsgc1tpXSArIFxcXCIjbm9IaXN0b3J5I1xcXCJcXHJcXG4gICAgfSlcXHJcXG59XFxyXFxucmV0dXJuIGQ7YFxcclxcbiAgICAgICAgfVxcclxcbiAgICB9LFxcclxcbiAgICBhbmFseXNpc0NvbmZpZ3M6IHtcXHJcXG4gICAgICAgIHVzZTogXFxcIuS4jeino+aekFxcXCIsXFxyXFxuICAgICAgICBcXFwi5LiN6Kej5p6QXFxcIjoge1xcclxcbiAgICAgICAgICAgIGNvbmZpZzogJC50b1N0cmluZygoKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXHJcXG4gICAgICAgICAgICB9KSxcXHJcXG4gICAgICAgICAgICBzZXR0aW5nOiAkLnRvU3RyaW5nKCgpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ivpeaPkuS7tuaXoOiuvue9rumhtemdolxcXCI7XFxyXFxuICAgICAgICAgICAgfSlcXHJcXG4gICAgICAgIH0sXFxyXFxuICAgICAgICBcXFwi5pat5o+SXFxcIjoge1xcclxcbiAgICAgICAgICAgIGNvbmZpZzogJC50b1N0cmluZygoKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGxldCBmaWxlID0gXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uXFxcIjtcXHJcXG4gICAgICAgICAgICAgICAgbGV0IG9sZGZpbGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiO1xcclxcbiAgICAgICAgICAgICAgICBpZiAoZmlsZUV4aXN0KGZpbGUpKSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBldmFsKCdqc29uPScgKyBmZXRjaChmaWxlKSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICBsZXQganNVcmwgPSBqc29uLnNldHRpbmdzLmNqO1xcclxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaChqc1VybCkpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShpbnB1dCk7XFxyXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsZUV4aXN0KG9sZGZpbGUpKSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBsZXQganNVcmwgPSBKU09OLnBhcnNlKGZldGNoKG9sZGZpbGUpKS5jajtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goanNVcmwpKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UoaW5wdXQpO1xcclxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ayoeaJvuWIsOaWreaPkumFjee9ruaWh+S7tic7XFxyXFxuICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICB9KSxcXHJcXG4gICAgICAgICAgICBzZXR0aW5nOiAkLnRvU3RyaW5nKCgpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgbGV0IGZpbGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb25cXFwiO1xcclxcbiAgICAgICAgICAgICAgICBsZXQgb2xkZmlsZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCI7XFxyXFxuICAgICAgICAgICAgICAgIGlmIChmaWxlRXhpc3QoZmlsZSkpIHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoJ2pzb249JyArIGZldGNoKGZpbGUpKTtcXHJcXG4gICAgICAgICAgICAgICAgICAgIGxldCBqc1VybCA9IGpzb24uc2V0dGluZ3MuY2o7XFxyXFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGpzVXJsKSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0VXJsO1xcclxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGVFeGlzdChvbGRmaWxlKSkge1xcclxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGpzVXJsID0gSlNPTi5wYXJzZShmZXRjaChvbGRmaWxlKSkuY2o7XFxyXFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGpzVXJsKSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0VXJsO1xcclxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uXFxcIjtcXHJcXG4gICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgIH0pXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH1cXHJcXG59XFxyXFxuJC5leHBvcnRzID0gZGVmYXVsdENvbmZpZ3M7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlt6Xlhbfpm4ZcIixcInBhdGhcIjpcInV0aWxzXCIsXCJydWxlXCI6XCJqczpcXHJcXG4vL+WIneWni+WMlumFjee9rixuYW1l5Li66YWN572u6aG55ZCN56ewXFxyXFxuZnVuY3Rpb24gaW5pdENvbmZpZ3MobmFtZSwgY29uZmlnKSB7XFxyXFxuICAgIGlmICghY29uZmlnKSB7XFxyXFxuICAgICAgICBjb25maWcgPSBKU09OLnBhcnNlKGZldGNoKGdldE15VmFyKCdxZGJfY29uZmlnJykpKTtcXHJcXG4gICAgfVxcclxcbiAgICBpZiAoY29uZmlnW25hbWVdID09IG51bGwpIHtcXHJcXG4gICAgICAgIGxldCBkZWZhdWx0Q29uZmlncyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RlZmF1bHRDb25maWdzXFxcIik7XFxyXFxuICAgICAgICBjb25maWdbbmFtZV0gPSBkZWZhdWx0Q29uZmlnc1tuYW1lXSA/IGRlZmF1bHRDb25maWdzW25hbWVdIDoge307XFxyXFxuICAgICAgICB3cml0ZUZpbGUoZ2V0TXlWYXIoJ3FkYl9jb25maWcnKSwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XFxyXFxuICAgIH1cXHJcXG4gICAgcmV0dXJuIGNvbmZpZztcXHJcXG59XFxyXFxuXFxyXFxuLy/ojrflj5bphY3nva7poblcXHJcXG5mdW5jdGlvbiBnZXRDb25maWcobmFtZSwgcm9vdENvbmZpZykge1xcclxcbiAgICBsZXQgY29uZmlnID0gcm9vdENvbmZpZyA/IHJvb3RDb25maWcgOiBKU09OLnBhcnNlKGZldGNoKGdldE15VmFyKCdxZGJfY29uZmlnJykpKTtcXHJcXG4gICAgaWYgKG5hbWUpIHtcXHJcXG4gICAgICAgIGlmIChjb25maWdbbmFtZV0gPT0gbnVsbCkge1xcclxcbiAgICAgICAgICAgIGNvbmZpZyA9IGluaXRDb25maWdzKG5hbWUsIGNvbmZpZyk7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICByZXR1cm4gY29uZmlnW25hbWVdO1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcXHJcXG4gICAgfVxcclxcbn1cXHJcXG5cXHJcXG4vL+e8lueggeW3peWFt+exu1xcclxcbmxldCBaaXBUb29sID0ge1xcclxcbiAgICBkZXBlbmRlbmNlOiAnaHR0cHM6Ly91bnBrZy5jb20vbHotc3RyaW5nQDEuNC40L2xpYnMvbHotc3RyaW5nLm1pbi5qcycsXFxyXFxuICAgIGNvbXByZXNzOiB7XFxyXFxuICAgICAgICBzaXplOiB7XFxyXFxuICAgICAgICAgICAga2V5OiBcXFwidGV4dC1jb21wcmVzcy1zaXplXFxcIixcXHJcXG4gICAgICAgICAgICBzZXQ6IChuZXdWYWx1ZSkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcih0aGlzLmtleSwgbmV3VmFsdWUudG9TdHJpbmcoKSlcXHJcXG4gICAgICAgICAgICB9LFxcclxcbiAgICAgICAgICAgIGdldDogKCkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoZ2V0TXlWYXIodGhpcy5rZXksIFxcXCIwXFxcIikpXFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgfSxcXHJcXG4gICAgICAgIGV4ZWM6IChpbnB1dCkgPT4ge1xcclxcbiAgICAgICAgICAgIGV2YWwocmVxdWVzdChaaXBUb29sLmRlcGVuZGVuY2UpKVxcclxcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBMWlN0cmluZy5jb21wcmVzc1RvRW5jb2RlZFVSSUNvbXBvbmVudChpbnB1dClcXHJcXG4gICAgICAgICAgICAgICAgLy8gWmlwVG9vbC5jb21wcmVzcy5zaXplLnNldChyZXN1bHQubGVuZ3RoICogMilcXHJcXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XFxyXFxuICAgICAgICB9XFxyXFxuICAgIH0sXFxyXFxuICAgIGRlY29tcHJlc3M6IHtcXHJcXG4gICAgICAgIHNpemU6IHtcXHJcXG4gICAgICAgICAgICBnZXQ6ICgpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldE15VmFyKFxcXCJ0ZXh0LWRlY29tcHJlc3NcXFwiLCBcXFwiMFxcXCIpXFxyXFxuICAgICAgICAgICAgICAgICAgICAubGVuZ3RoXFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgfSxcXHJcXG4gICAgICAgIGV4ZWM6IChpbnB1dCkgPT4ge1xcclxcbiAgICAgICAgICAgIGV2YWwocmVxdWVzdChaaXBUb29sLmRlcGVuZGVuY2UpKVxcclxcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBMWlN0cmluZy5kZWNvbXByZXNzRnJvbUVuY29kZWRVUklDb21wb25lbnQoaW5wdXQpXFxyXFxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxcclxcbiAgICAgICAgfVxcclxcbiAgICB9XFxyXFxufVxcclxcblxcclxcbi8vIOmFjee9rumhueW3peWFt+exu1xcclxcbmxldCBDb25maWdUb29sID0ge1xcclxcbiAgICBlbmNUeXBlTGlzdDogWydCYXNlNjQnLCAnWmlwcGVyJ10uY29uY2F0KGdldFBhc3RlcygpKSxcXHJcXG4gICAgdG9DbGlwYm9hcmQ6IChjb25maWdDb21tYW5kLCBuYW1lKSA9PiB7XFxyXFxuICAgICAgICBpZiAoY29uZmlnQ29tbWFuZC5zdGFydHNXaXRoKCd0b2FzdDovLycpKSByZXR1cm4gY29uZmlnQ29tbWFuZFxcclxcbiAgICAgICAgaWYgKCFuYW1lKSB7XFxyXFxuICAgICAgICAgICAgbGV0IGNvbW1hbmRTcGxpdHMgPSBjb25maWdDb21tYW5kLnNwbGl0KFxcXCLvv6VcXFwiKVxcclxcbiAgICAgICAgICAgIG5hbWUgPSBjb21tYW5kU3BsaXRzWzJdXFxyXFxuICAgICAgICAgICAgbmFtZSA9IG5hbWUgPyAoXFxcIuKAnFxcXCIgKyBuYW1lICsgXFxcIuKAnVxcXCIpIDogJydcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXHJcXG4gICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBjb25maWdDb21tYW5kICsgXFxcIi5qczondG9hc3Q6Ly/lr7zlh7pcXFwiICsgbmFtZSArIFxcXCLmiJDlip/vvIEnXFxcIjtcXHJcXG4gICAgfSxcXHJcXG4gICAgZXhwb3J0OiAobmFtZSwgY29uZmlnLCByZW1hcmssIGVuY1R5cGUpID0+IHtcXHJcXG4gICAgICAgIGxldCBzeW1ib2wgPSBcXFwi6Z2S6LGG5Y+j5Luk77+lXFxcIiArIHJlbWFyayArIFxcXCLvv6VcXFwiICsgbmFtZSArIFxcXCLvv6VcXFwiICsgZW5jVHlwZSArIFxcXCLvv6VcXFwiO1xcclxcbiAgICAgICAgbGV0IHJlc3VsdCA9IGNvbmZpZ1xcclxcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFxcXCJvYmplY3RcXFwiKSB7XFxyXFxuICAgICAgICAgICAgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkoY29uZmlnKTtcXHJcXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXFxcInN0cmluZ1xcXCIpIHtcXHJcXG4gICAgICAgICAgICByZXN1bHQgPSBjb25maWc7XFxyXFxuICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgIHRocm93IFxcXCLlr7zlh7rmlbDmja7kuI3lkIjms5VcXFwiXFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICBzd2l0Y2ggKGVuY1R5cGUpIHtcXHJcXG4gICAgICAgICAgICBjYXNlICdCYXNlNjQnOlxcclxcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBiYXNlNjRFbmNvZGUocmVzdWx0KTtcXHJcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxyXFxuICAgICAgICAgICAgY2FzZSAnWmlwcGVyJzpcXHJcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gWmlwVG9vbC5jb21wcmVzcy5leGVjKHJlc3VsdClcXHJcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxyXFxuICAgICAgICAgICAgZGVmYXVsdCA6XFxyXFxuICAgICAgICAgICAgICAgIGlmIChnZXRBcHBWZXJzaW9uKCkgPiAyMDcwKSB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBcXFwi6Z2S6LGG5Y+j5Luk77+lXFxcIiArIHJlbWFyayArIFxcXCLvv6VcXFwiICsgbmFtZVxcclxcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2hhcmVQYXN0ZShDb25maWdUb29sLmV4cG9ydChuYW1lLCBjb25maWcsIHJlbWFyaywgJ1ppcHBlcicpLGVuY1R5cGUpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdcXFxcblxcXFxuJyArIHN5bWJvbFxcclxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+abtOaWsOinhueVjOeJiOacrOiHsyBDMjA3MCDku6XkuIonXFxyXFxuICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgICByZXN1bHQgPSBzeW1ib2wgKyByZXN1bHRcXHJcXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxyXFxuICAgIH0sXFxyXFxuICAgIGltcG9ydDogKGNvbmZpZ0NvbW1hbmQpID0+IHtcXHJcXG4gICAgICAgIGxldCByZXN1bHQgPSAnJ1xcclxcbiAgICAgICAgaWYgKGNvbmZpZ0NvbW1hbmQuc3RhcnRzV2l0aCgn5LqRJykpIHtcXHJcXG4gICAgICAgICAgICBpZiAoZ2V0QXBwVmVyc2lvbigpID4gMjA3MCkge1xcclxcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBjb25maWdDb21tYW5kLnNwbGl0KCfpnZLosYYnKVswXS5yZXBsYWNlKC9cXFxcXFxcXG4vLCAnJylcXHJcXG4gICAgICAgICAgICAgICAgY29uZmlnQ29tbWFuZCA9IHBhcnNlUGFzdGUocmVzdWx0KVxcclxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/or7fmm7TmlrDop4bnlYzniYjmnKzoh7MgQzIwNzAg5Lul5LiKJ1xcclxcbiAgICAgICAgICAgIH1cXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIHRyeSB7XFxyXFxuICAgICAgICAgICAgbGV0IHJlc3VsdFNwbGl0cyA9IGNvbmZpZ0NvbW1hbmQuc3BsaXQoXFxcIu+/pVxcXCIpXFxyXFxuICAgICAgICAgICAgbGV0IGVuY1R5cGUgPSByZXN1bHRTcGxpdHNbM11cXHJcXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHRTcGxpdHNbNF1cXHJcXG4gICAgICAgICAgICBzd2l0Y2ggKGVuY1R5cGUpIHtcXHJcXG4gICAgICAgICAgICAgICAgY2FzZSAnQmFzZTY0JzpcXHJcXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2U2NERlY29kZShyZXN1bHQpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxyXFxuICAgICAgICAgICAgICAgIGNhc2UgJ1ppcHBlcic6XFxyXFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBaaXBUb29sLmRlY29tcHJlc3MuZXhlYyhyZXN1bHQpXFxyXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXN1bHQpO1xcclxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcclxcbiAgICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxyXFxuICAgICAgICAgICAgdGhyb3cgXFxcIuWvvOWFpeaVsOaNruS4jeWQiOazlVxcXCJcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxyXFxuICAgIH1cXHJcXG59XCJ9XSIsImljb24iOiJodHRwczovL2dpdGNvZGUubmV0L3FxXzQxODQ2NzU2L2hpa2VyLy0vcmF3L21hc3Rlci9pbWcv6Z2S6LGGLnBuZyIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment